]> matita.cs.unibo.it Git - helm.git/commitdiff
This commit was manufactured by cvs2svn to create tag 'camera_ready'. camera_ready
authorno author <no.author@nowhere.it>
Tue, 15 Jul 2003 16:02:25 +0000 (16:02 +0000)
committerno author <no.author@nowhere.it>
Tue, 15 Jul 2003 16:02:25 +0000 (16:02 +0000)
3304 files changed:
CVSROOT/checkoutlist [deleted file]
CVSROOT/commitinfo [deleted file]
CVSROOT/config [deleted file]
CVSROOT/cvswrappers [deleted file]
CVSROOT/editinfo [deleted file]
CVSROOT/loginfo [deleted file]
CVSROOT/modules [deleted file]
CVSROOT/notify [deleted file]
CVSROOT/rcsinfo [deleted file]
CVSROOT/taginfo [deleted file]
CVSROOT/verifymsg [deleted file]
helm/DEVEL/.cvsignore [deleted file]
helm/DEVEL/gdome_xslt/.cvsignore [deleted file]
helm/DEVEL/gdome_xslt/AUTHORS [deleted file]
helm/DEVEL/gdome_xslt/BUGS [deleted file]
helm/DEVEL/gdome_xslt/C++/.cvsignore [deleted file]
helm/DEVEL/gdome_xslt/C++/Makefile.am [deleted file]
helm/DEVEL/gdome_xslt/C++/gdome_xslt/.cvsignore [deleted file]
helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLT.hh [deleted file]
helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLTStylesheet.cc [deleted file]
helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLTStylesheet.hh [deleted file]
helm/DEVEL/gdome_xslt/C++/gdome_xslt/Makefile.am [deleted file]
helm/DEVEL/gdome_xslt/C++/test/.cvsignore [deleted file]
helm/DEVEL/gdome_xslt/C++/test/Makefile.am [deleted file]
helm/DEVEL/gdome_xslt/C++/test/main.cc [deleted file]
helm/DEVEL/gdome_xslt/C/.cvsignore [deleted file]
helm/DEVEL/gdome_xslt/C/Makefile.am [deleted file]
helm/DEVEL/gdome_xslt/C/gdome_xslt/.cvsignore [deleted file]
helm/DEVEL/gdome_xslt/C/gdome_xslt/Makefile.am [deleted file]
helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.c [deleted file]
helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.h [deleted file]
helm/DEVEL/gdome_xslt/C/test/.cvsignore [deleted file]
helm/DEVEL/gdome_xslt/C/test/Makefile.am [deleted file]
helm/DEVEL/gdome_xslt/C/test/test.c [deleted file]
helm/DEVEL/gdome_xslt/ChangeLog [deleted file]
helm/DEVEL/gdome_xslt/LICENSE [deleted file]
helm/DEVEL/gdome_xslt/LICENSE-INRIA [deleted file]
helm/DEVEL/gdome_xslt/Makefile.am [deleted file]
helm/DEVEL/gdome_xslt/NEWS [deleted file]
helm/DEVEL/gdome_xslt/README [deleted file]
helm/DEVEL/gdome_xslt/configure.ac [deleted file]
helm/DEVEL/gdome_xslt/debian/changelog [deleted file]
helm/DEVEL/gdome_xslt/debian/compat [deleted file]
helm/DEVEL/gdome_xslt/debian/control [deleted file]
helm/DEVEL/gdome_xslt/debian/copyright [deleted file]
helm/DEVEL/gdome_xslt/debian/docs [deleted file]
helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-dev.examples [deleted file]
helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-dev.install [deleted file]
helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.dirs [deleted file]
helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.examples [deleted file]
helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.install [deleted file]
helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml.dirs [deleted file]
helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml.install [deleted file]
helm/DEVEL/gdome_xslt/debian/libgdome2-xslt0.install [deleted file]
helm/DEVEL/gdome_xslt/debian/rules [deleted file]
helm/DEVEL/gdome_xslt/gdome2-xslt-cpp-smart.pc.in [deleted file]
helm/DEVEL/gdome_xslt/gdome2-xslt.pc.in [deleted file]
helm/DEVEL/gdome_xslt/ocaml/.cvsignore [deleted file]
helm/DEVEL/gdome_xslt/ocaml/Makefile.am [deleted file]
helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/.cvsignore [deleted file]
helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/.depend [deleted file]
helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/META.in [deleted file]
helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/Makefile.am [deleted file]
helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt.ml [deleted file]
helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt.mli [deleted file]
helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt_init.ml [deleted file]
helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt_init.mli [deleted file]
helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/i_gdome_xslt.ml [deleted file]
helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ml_gdome_xslt.c [deleted file]
helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ml_gdome_xslt.h [deleted file]
helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ocaml-io.h [deleted file]
helm/DEVEL/gdome_xslt/ocaml/test/.cvsignore [deleted file]
helm/DEVEL/gdome_xslt/ocaml/test/Makefile.am [deleted file]
helm/DEVEL/gdome_xslt/ocaml/test/test.ml [deleted file]
helm/DEVEL/gdome_xslt/test_files/.cvsignore [deleted file]
helm/DEVEL/gdome_xslt/test_files/Makefile.am [deleted file]
helm/DEVEL/gdome_xslt/test_files/input.xml [deleted file]
helm/DEVEL/gdome_xslt/test_files/output.xml.correct [deleted file]
helm/DEVEL/gdome_xslt/test_files/stylesheet.xsl [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0-1.i386.rpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0-1.spec [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0-1.src.rpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0.tar.gz [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/.cvsignore [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/CHANGES [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/COPYING [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/Makefile [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/Makefile.nt [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/README [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/.cvsignore [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/Makefile [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/README [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/TODO [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/editor.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/file.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/lexical.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/list2.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/shell.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/text.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/useunix.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/widgets.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/.cvsignore [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/CHANGES [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/Makefile [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/README [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/aspectframe.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/button.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/checkbutton.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/clist.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/colorselection.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/combo.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/common.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/entry.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/eventbox.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/fixed.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/frame.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gToolbar2.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gTree2.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gTree2.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtkTree2.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtktree2.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtktree2.h [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtktreeitem2.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtktreeitem2.h [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/handlebox.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/hbox.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/hbuttonbox.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/hseparator.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/label.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/load_lexer.mll [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/load_parser.mly [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/main.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/ml_gtk2.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/notebook.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/pixmap.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/property.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/property.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/propwin.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/propwin.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/radiobutton.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/scrolledwindow.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/spinbutton.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/statusbar.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiBase.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiBin.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiButton.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiContainer.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiEdit.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiList.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiMisc.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiPack.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiWidget.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiWindow.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/togglebutton.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/toolbar.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tree_minus.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tree_plus.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/utils.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/vbox.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/vbuttonbox.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/viewport.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/vseparator.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/window.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/unison/.cvsignore [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/unison/README [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/unison/uigtk.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/config.make.nt [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/configure.mk [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/doc/formula.eps [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/doc/lablgtk.mgp [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/GL/morph3d.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/GL/planet.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/GL/simple.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/README [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/buttons.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/calc.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/calendar.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/clist.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/combo.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/csview.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/dcalendar.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/drawing.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/editor.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/entry.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/events.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/fifteen.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/fixed_editor.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/fixpoint.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/hello.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/image.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/image256x256.rgb [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/kaimono.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/label.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/lissajous.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/nihongo.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/old/fixpoint.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/old/hello.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/old/progressbar.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/pousse.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/progressbar.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/radiobuttons.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/rpn.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/scrolledwin.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/socket.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/test.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/testdnd.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/testgtk.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/testinput.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/tictactoe.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/tron.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/xmhtml/test.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gBin.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gBin.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gButton.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gButton.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gContainer.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gContainer.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gData.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gData.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gDraw.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gDraw.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gEdit.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gEdit.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gHtml.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gList.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gList.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMain.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMenu.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMenu.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMisc.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMisc.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gObj.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gObj.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gPack.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gPack.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gRange.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gRange.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gTree.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gTree.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gUtil.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gUtil.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gWindow.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gWindow.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gaux.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdk.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdk.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdkEvent.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdkKeysyms.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdk_tags.var [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/glGtk.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/glGtk.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/glib.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gpointer.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtk.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkArgv.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkBase.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkBin.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkButton.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkData.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkEdit.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkInit.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkList.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkMain.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkMenu.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkMisc.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkNew.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkPack.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkRange.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkSignal.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkSignal.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkThInit.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkThread.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkTree.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkWindow.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkXmHTML.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtk_tags.var [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkgl_tags.var [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkxmhtml_tags.var [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/lablgl.patch [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/lablgtk.in [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gdk.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gdk.h [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_glib.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_glib.h [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gtk.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gtk.h [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gtkgl.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gtkxmhtml.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/var2conv.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/var2def.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/wrappers.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/wrappers.h [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0-1.spec [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0.tar.gz [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/.cvsignore [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/CHANGES [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/COPYING [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile.nt [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/README [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/.cvsignore [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/Makefile [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/README [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/TODO [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/editor.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/file.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/lexical.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/list2.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/shell.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/text.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/useunix.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/widgets.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/.cvsignore [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/CHANGES [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/Makefile [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/README [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/aspectframe.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/button.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/checkbutton.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/clist.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/colorselection.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/combo.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/common.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/entry.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/eventbox.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/fixed.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/frame.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gToolbar2.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gTree2.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gTree2.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtkTree2.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtktree2.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtktree2.h [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtktreeitem2.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtktreeitem2.h [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/handlebox.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/hbox.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/hbuttonbox.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/hseparator.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/label.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/load_lexer.mll [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/load_parser.mly [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/main.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/ml_gtk2.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/notebook.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/pixmap.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/property.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/property.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/propwin.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/propwin.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/radiobutton.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/scrolledwindow.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/spinbutton.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/statusbar.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiBase.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiBin.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiButton.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiContainer.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiEdit.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiList.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiMisc.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiPack.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiWidget.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiWindow.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/togglebutton.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/toolbar.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tree_minus.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tree_plus.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/utils.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/vbox.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/vbuttonbox.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/viewport.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/vseparator.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/window.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/unison/.cvsignore [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/unison/README [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/config.make.nt [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/configure.mk [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/doc/formula.eps [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/doc/lablgtk.mgp [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/GL/morph3d.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/GL/planet.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/GL/simple.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/README [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/buttons.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/calc.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/calendar.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/clist.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/combo.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/csview.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/dcalendar.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/drawing.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/editor.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/entry.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/events.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/fifteen.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/fixed_editor.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/fixpoint.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/hello.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/image.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/image256x256.rgb [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/kaimono.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/label.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/lissajous.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/nihongo.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/pousse.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/progressbar.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/radiobuttons.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/rpn.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/scrolledwin.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/socket.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/test.xpm [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/testdnd.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/testgtk.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/testinput.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/tictactoe.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/tron.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/xmhtml/test.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gHtml.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMain.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gaux.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkEvent.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkKeysyms.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk_tags.var [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glib.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gpointer.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkArgv.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBase.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBin.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkButton.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkData.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkEdit.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkInit.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkList.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMain.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMenu.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMisc.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkNew.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkPack.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkRange.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.mli [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThInit.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThread.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkTree.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkWindow.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkXmHTML.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk_tags.var [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkgl_tags.var [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkxmhtml_tags.var [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/lablgl.patch [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/lablgtk.in [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.h [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.h [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.h [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbin.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbutton.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkedit.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkgl.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtklist.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmenu.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmisc.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtknew.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkpack.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkrange.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtktree.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkxmhtml.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/varcc.ml [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.c [deleted file]
helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.h [deleted file]
helm/DEVEL/lablgtk_gtkmathview/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/.depend [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.i386.rpm [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.spec [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.src.rpm [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0.tar.gz [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/.depend [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/COPYING [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/config.make [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/configure.mk [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gMathView.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtkMathView.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtk_mathview.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/ml_gtk_mathview.c [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.xml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0-1.spec [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0.tar.gz [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/.depend [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/COPYING [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/configure.mk [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/gMathView.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/gtkMathView.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/gtk_mathview.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/minidom.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/minidom.mli [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/ml_minidom.c [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/ml_minidom.h [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/test.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/test.xml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/ml_gtk_mathview.c [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/t1.config [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/test.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/test.xml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1-1.spec [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/.depend [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/COPYING [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/configure.mk [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/gMathView.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/gtkMathView.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/gtk_mathview.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/minidom.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/minidom.mli [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/ml_minidom.c [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/ml_minidom.h [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/ominidom.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/test.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/test.xml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/ml_gtk_mathview.c [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/t1.config [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/test.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/test.xml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1-1.spec [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/.depend [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/COPYING [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/configure.mk [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/gMathView.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/gtkMathView.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/gtk_mathview.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/minidom.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/minidom.mli [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/ml_minidom.c [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/ml_minidom.h [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/ominidom.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/ominidom.mli [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/test.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/test.xml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/ml_gtk_mathview.c [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/t1.config [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/test.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/test.xml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2-1.spec [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2.tar.gz [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.depend [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/COPYING [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/configure.mk [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gMathView.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtkMathView.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtk_mathview.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.mli [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.c [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.h [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.mli [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.xml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/ml_gtk_mathview.c [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/.cvsignore [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/Makefile [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/t1.config [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.ml [deleted file]
helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.xml [deleted file]
helm/DEVEL/lablgtkmathview/.cvsignore [deleted file]
helm/DEVEL/lablgtkmathview/.depend [deleted file]
helm/DEVEL/lablgtkmathview/AUTHORS [deleted file]
helm/DEVEL/lablgtkmathview/COPYING [deleted file]
helm/DEVEL/lablgtkmathview/ChangeLog [deleted file]
helm/DEVEL/lablgtkmathview/LICENSE [deleted file]
helm/DEVEL/lablgtkmathview/META.in [deleted file]
helm/DEVEL/lablgtkmathview/Makefile.in [deleted file]
helm/DEVEL/lablgtkmathview/NEWS [deleted file]
helm/DEVEL/lablgtkmathview/README [deleted file]
helm/DEVEL/lablgtkmathview/configure.in [deleted file]
helm/DEVEL/lablgtkmathview/debian/changelog [deleted file]
helm/DEVEL/lablgtkmathview/debian/compat [deleted file]
helm/DEVEL/lablgtkmathview/debian/control [deleted file]
helm/DEVEL/lablgtkmathview/debian/copyright [deleted file]
helm/DEVEL/lablgtkmathview/debian/docs [deleted file]
helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml-dev.dirs [deleted file]
helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml.dirs [deleted file]
helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml.install [deleted file]
helm/DEVEL/lablgtkmathview/debian/rules [deleted file]
helm/DEVEL/lablgtkmathview/gMathView.ml [deleted file]
helm/DEVEL/lablgtkmathview/gMathView.mli [deleted file]
helm/DEVEL/lablgtkmathview/gMathViewAux.ml [deleted file]
helm/DEVEL/lablgtkmathview/gMathViewAux.mli [deleted file]
helm/DEVEL/lablgtkmathview/gtkMathView.ml [deleted file]
helm/DEVEL/lablgtkmathview/gtk_mathview.ml [deleted file]
helm/DEVEL/lablgtkmathview/lablgtk/META.lablgtk [deleted file]
helm/DEVEL/lablgtkmathview/lablgtkmathview.spec.in [deleted file]
helm/DEVEL/lablgtkmathview/ml_gtk_mathview.c [deleted file]
helm/DEVEL/lablgtkmathview/test/.cvsignore [deleted file]
helm/DEVEL/lablgtkmathview/test/Makefile.in [deleted file]
helm/DEVEL/lablgtkmathview/test/t1.config [deleted file]
helm/DEVEL/lablgtkmathview/test/test.ml [deleted file]
helm/DEVEL/lablgtkmathview/test/test.xml [deleted file]
helm/DEVEL/mathml_editor/.cvsignore [deleted file]
helm/DEVEL/mathml_editor/.log [deleted file]
helm/DEVEL/mathml_editor/AUTHORS [deleted file]
helm/DEVEL/mathml_editor/BROWSE [deleted file]
helm/DEVEL/mathml_editor/BUGS [deleted file]
helm/DEVEL/mathml_editor/BUGS-GDOME2 [deleted file]
helm/DEVEL/mathml_editor/ChangeLog [deleted file]
helm/DEVEL/mathml_editor/LICENSE [deleted file]
helm/DEVEL/mathml_editor/MODES [deleted file]
helm/DEVEL/mathml_editor/Makefile.am [deleted file]
helm/DEVEL/mathml_editor/Makefile.in [deleted file]
helm/DEVEL/mathml_editor/NEWS [deleted file]
helm/DEVEL/mathml_editor/PATTERNS [deleted file]
helm/DEVEL/mathml_editor/README [deleted file]
helm/DEVEL/mathml_editor/TML.dtd [deleted file]
helm/DEVEL/mathml_editor/TODO [deleted file]
helm/DEVEL/mathml_editor/configure.ac [deleted file]
helm/DEVEL/mathml_editor/debian/changelog [deleted file]
helm/DEVEL/mathml_editor/debian/control [deleted file]
helm/DEVEL/mathml_editor/debian/copyright [deleted file]
helm/DEVEL/mathml_editor/debian/docs [deleted file]
helm/DEVEL/mathml_editor/debian/libeditex-dev.files [deleted file]
helm/DEVEL/mathml_editor/debian/libeditex-ocaml-dev.files [deleted file]
helm/DEVEL/mathml_editor/debian/libeditex-ocaml.files [deleted file]
helm/DEVEL/mathml_editor/debian/libeditex0.files [deleted file]
helm/DEVEL/mathml_editor/debian/rules [deleted file]
helm/DEVEL/mathml_editor/dict/.cvsignore [deleted file]
helm/DEVEL/mathml_editor/dict/Makefile.am [deleted file]
helm/DEVEL/mathml_editor/dict/dictionary-basic.xml [deleted file]
helm/DEVEL/mathml_editor/dict/dictionary-test.xml [deleted file]
helm/DEVEL/mathml_editor/dict/dictionary-tex.xml [deleted file]
helm/DEVEL/mathml_editor/dict/dictionary.dtd [deleted file]
helm/DEVEL/mathml_editor/doc/.cvsignore [deleted file]
helm/DEVEL/mathml_editor/doc/spec.tex [deleted file]
helm/DEVEL/mathml_editor/editex.pc.in [deleted file]
helm/DEVEL/mathml_editor/examples/.cvsignore [deleted file]
helm/DEVEL/mathml_editor/examples/Makefile.am [deleted file]
helm/DEVEL/mathml_editor/examples/abs.tex [deleted file]
helm/DEVEL/mathml_editor/examples/big.tex [deleted file]
helm/DEVEL/mathml_editor/ocaml/.cvsignore [deleted file]
helm/DEVEL/mathml_editor/ocaml/.depend [deleted file]
helm/DEVEL/mathml_editor/ocaml/META.in [deleted file]
helm/DEVEL/mathml_editor/ocaml/Makefile.am [deleted file]
helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.cc [deleted file]
helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.h [deleted file]
helm/DEVEL/mathml_editor/ocaml/i_mathml_editor.ml [deleted file]
helm/DEVEL/mathml_editor/ocaml/mathml_editor.ml [deleted file]
helm/DEVEL/mathml_editor/ocaml/mathml_editor.mli [deleted file]
helm/DEVEL/mathml_editor/ocaml/ml_mathml_editor.c [deleted file]
helm/DEVEL/mathml_editor/src/.cvsignore [deleted file]
helm/DEVEL/mathml_editor/src/ALogger.hh [deleted file]
helm/DEVEL/mathml_editor/src/AMathMLConsumer.hh [deleted file]
helm/DEVEL/mathml_editor/src/AMathMLFactory.cc [deleted file]
helm/DEVEL/mathml_editor/src/AMathMLFactory.hh [deleted file]
helm/DEVEL/mathml_editor/src/APushLexer.hh [deleted file]
helm/DEVEL/mathml_editor/src/APushParser.cc [deleted file]
helm/DEVEL/mathml_editor/src/APushParser.hh [deleted file]
helm/DEVEL/mathml_editor/src/BROWSE [deleted file]
helm/DEVEL/mathml_editor/src/CLoggerConsole.cc [deleted file]
helm/DEVEL/mathml_editor/src/CLoggerConsole.hh [deleted file]
helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc [deleted file]
helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.hh [deleted file]
helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLTDiff.cc [deleted file]
helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLTDiff.hh [deleted file]
helm/DEVEL/mathml_editor/src/Diff.cc [deleted file]
helm/DEVEL/mathml_editor/src/Diff.hh [deleted file]
helm/DEVEL/mathml_editor/src/ILPushLexer.cc [deleted file]
helm/DEVEL/mathml_editor/src/ILPushLexer.hh [deleted file]
helm/DEVEL/mathml_editor/src/ITPushLexer.cc [deleted file]
helm/DEVEL/mathml_editor/src/ITPushLexer.hh [deleted file]
helm/DEVEL/mathml_editor/src/LPushLexer.cc [deleted file]
helm/DEVEL/mathml_editor/src/LPushLexer.hh [deleted file]
helm/DEVEL/mathml_editor/src/Makefile.am [deleted file]
helm/DEVEL/mathml_editor/src/Makefile.in [deleted file]
helm/DEVEL/mathml_editor/src/TDictionary.cc [deleted file]
helm/DEVEL/mathml_editor/src/TDictionary.hh [deleted file]
helm/DEVEL/mathml_editor/src/TDocument.cc [deleted file]
helm/DEVEL/mathml_editor/src/TDocument.hh [deleted file]
helm/DEVEL/mathml_editor/src/TListener.hh [deleted file]
helm/DEVEL/mathml_editor/src/TNode.cc [deleted file]
helm/DEVEL/mathml_editor/src/TNode.hh [deleted file]
helm/DEVEL/mathml_editor/src/TPushLexer.cc [deleted file]
helm/DEVEL/mathml_editor/src/TPushLexer.hh [deleted file]
helm/DEVEL/mathml_editor/src/TPushParser.cc [deleted file]
helm/DEVEL/mathml_editor/src/TPushParser.hh [deleted file]
helm/DEVEL/mathml_editor/src/TToken.hh [deleted file]
helm/DEVEL/mathml_editor/src/TTokenizer.cc [deleted file]
helm/DEVEL/mathml_editor/src/TTokenizer.hh [deleted file]
helm/DEVEL/mathml_editor/src/config.dirs.in [deleted file]
helm/DEVEL/mathml_editor/src/dom.hh [deleted file]
helm/DEVEL/mathml_editor/src/globals.hh [deleted file]
helm/DEVEL/mathml_editor/test/.cvsignore [deleted file]
helm/DEVEL/mathml_editor/test/Makefile.am [deleted file]
helm/DEVEL/mathml_editor/test/Makefile.in [deleted file]
helm/DEVEL/mathml_editor/test/aux.cc [deleted file]
helm/DEVEL/mathml_editor/test/editor.cc [deleted file]
helm/DEVEL/mathml_editor/test/guiGTK.c [deleted file]
helm/DEVEL/mathml_editor/test/guiGTK.h [deleted file]
helm/DEVEL/mathml_editor/textomml/.cvsignore [deleted file]
helm/DEVEL/mathml_editor/textomml/Makefile.am [deleted file]
helm/DEVEL/mathml_editor/textomml/config.dirs.in [deleted file]
helm/DEVEL/mathml_editor/textomml/main.cc [deleted file]
helm/DEVEL/mathml_editor/xsl/.cvsignore [deleted file]
helm/DEVEL/mathml_editor/xsl/Makefile.am [deleted file]
helm/DEVEL/mathml_editor/xsl/d-xsl.xsl [deleted file]
helm/DEVEL/mathml_editor/xsl/tml-litex.xsl [deleted file]
helm/DEVEL/mathml_editor/xsl/tml-mmlp.xsl [deleted file]
helm/DEVEL/mathml_editor/xsl/tml-tex.xsl [deleted file]
helm/DEVEL/mathml_editor/xsl/tml-texid.xsl [deleted file]
helm/DEVEL/mlminidom/.cvsignore [deleted file]
helm/DEVEL/mlminidom/.depend [deleted file]
helm/DEVEL/mlminidom/AUTHORS [deleted file]
helm/DEVEL/mlminidom/COPYING [deleted file]
helm/DEVEL/mlminidom/ChangeLog [deleted file]
helm/DEVEL/mlminidom/META.in [deleted file]
helm/DEVEL/mlminidom/Makefile.in [deleted file]
helm/DEVEL/mlminidom/NEWS [deleted file]
helm/DEVEL/mlminidom/README [deleted file]
helm/DEVEL/mlminidom/configure.in [deleted file]
helm/DEVEL/mlminidom/debian/changelog [deleted file]
helm/DEVEL/mlminidom/debian/control [deleted file]
helm/DEVEL/mlminidom/debian/copyright [deleted file]
helm/DEVEL/mlminidom/debian/dirs [deleted file]
helm/DEVEL/mlminidom/debian/docs [deleted file]
helm/DEVEL/mlminidom/debian/examples [deleted file]
helm/DEVEL/mlminidom/debian/rules [deleted file]
helm/DEVEL/mlminidom/minidom.ml [deleted file]
helm/DEVEL/mlminidom/minidom.mli [deleted file]
helm/DEVEL/mlminidom/ml_minidom.c [deleted file]
helm/DEVEL/mlminidom/ml_minidom.h [deleted file]
helm/DEVEL/mlminidom/mlminidom.spec.in [deleted file]
helm/DEVEL/mlminidom/ominidom.ml [deleted file]
helm/DEVEL/mlminidom/ominidom.mli [deleted file]
helm/DEVEL/mlminidom/test.ml [deleted file]
helm/DEVEL/mlminidom/test.xml [deleted file]
helm/DEVEL/ocaml-http/.cvsignore [deleted file]
helm/DEVEL/ocaml-http/.depend [deleted file]
helm/DEVEL/ocaml-http/.ocamlinit [deleted file]
helm/DEVEL/ocaml-http/INSTALL [deleted file]
helm/DEVEL/ocaml-http/LICENSE [deleted file]
helm/DEVEL/ocaml-http/META.in [deleted file]
helm/DEVEL/ocaml-http/Makefile [deleted file]
helm/DEVEL/ocaml-http/Makefile.defs [deleted file]
helm/DEVEL/ocaml-http/Makefile.overrides [deleted file]
helm/DEVEL/ocaml-http/README [deleted file]
helm/DEVEL/ocaml-http/TODO [deleted file]
helm/DEVEL/ocaml-http/debian/changelog [deleted file]
helm/DEVEL/ocaml-http/debian/control [deleted file]
helm/DEVEL/ocaml-http/debian/copyright [deleted file]
helm/DEVEL/ocaml-http/debian/dirs [deleted file]
helm/DEVEL/ocaml-http/debian/docs [deleted file]
helm/DEVEL/ocaml-http/debian/examples [deleted file]
helm/DEVEL/ocaml-http/debian/rules [deleted file]
helm/DEVEL/ocaml-http/doc/dot/.cvsignore [deleted file]
helm/DEVEL/ocaml-http/doc/html/.cvsignore [deleted file]
helm/DEVEL/ocaml-http/doc/latex/.cvsignore [deleted file]
helm/DEVEL/ocaml-http/examples/.cvsignore [deleted file]
helm/DEVEL/ocaml-http/examples/Makefile [deleted file]
helm/DEVEL/ocaml-http/examples/always_ok_daemon.ml [deleted file]
helm/DEVEL/ocaml-http/examples/chdir.ml [deleted file]
helm/DEVEL/ocaml-http/examples/client_address.ml [deleted file]
helm/DEVEL/ocaml-http/examples/damned_recursion.ml [deleted file]
helm/DEVEL/ocaml-http/examples/dont_fork.ml [deleted file]
helm/DEVEL/ocaml-http/examples/dump_args.ml [deleted file]
helm/DEVEL/ocaml-http/examples/highlander.ml [deleted file]
helm/DEVEL/ocaml-http/examples/obj_foo.ml [deleted file]
helm/DEVEL/ocaml-http/examples/oo_daemon.ml [deleted file]
helm/DEVEL/ocaml-http/examples/threads.ml [deleted file]
helm/DEVEL/ocaml-http/examples/timeout.ml [deleted file]
helm/DEVEL/ocaml-http/examples/webfsd.ml [deleted file]
helm/DEVEL/ocaml-http/http_common.ml [deleted file]
helm/DEVEL/ocaml-http/http_common.mli [deleted file]
helm/DEVEL/ocaml-http/http_constants.ml [deleted file]
helm/DEVEL/ocaml-http/http_constants.mli [deleted file]
helm/DEVEL/ocaml-http/http_daemon.ml [deleted file]
helm/DEVEL/ocaml-http/http_daemon.mli [deleted file]
helm/DEVEL/ocaml-http/http_message.ml [deleted file]
helm/DEVEL/ocaml-http/http_message.mli [deleted file]
helm/DEVEL/ocaml-http/http_misc.ml [deleted file]
helm/DEVEL/ocaml-http/http_misc.mli [deleted file]
helm/DEVEL/ocaml-http/http_parser.ml [deleted file]
helm/DEVEL/ocaml-http/http_parser.mli [deleted file]
helm/DEVEL/ocaml-http/http_parser_sanity.ml [deleted file]
helm/DEVEL/ocaml-http/http_parser_sanity.mli [deleted file]
helm/DEVEL/ocaml-http/http_request.ml [deleted file]
helm/DEVEL/ocaml-http/http_request.mli [deleted file]
helm/DEVEL/ocaml-http/http_response.ml [deleted file]
helm/DEVEL/ocaml-http/http_response.mli [deleted file]
helm/DEVEL/ocaml-http/http_tcp_server.ml [deleted file]
helm/DEVEL/ocaml-http/http_tcp_server.mli [deleted file]
helm/DEVEL/ocaml-http/http_threaded_tcp_server.mli [deleted file]
helm/DEVEL/ocaml-http/http_types.ml [deleted file]
helm/DEVEL/ocaml-http/mt/.cvsignore [deleted file]
helm/DEVEL/ocaml-http/mt/http_threaded_tcp_server.ml [deleted file]
helm/DEVEL/ocaml-http/non_mt/.cvsignore [deleted file]
helm/DEVEL/ocaml-http/non_mt/http_threaded_tcp_server.ml [deleted file]
helm/DEVEL/ocaml-http/tophttp [deleted file]
helm/DEVEL/pxp/.cvsignore [deleted file]
helm/DEVEL/pxp/findlib-0.4.tar.gz [deleted file]
helm/DEVEL/pxp/netstring-0.9.3.tar.gz [deleted file]
helm/DEVEL/pxp/netstring/.cvsignore [deleted file]
helm/DEVEL/pxp/netstring/LICENSE [deleted file]
helm/DEVEL/pxp/netstring/META [deleted file]
helm/DEVEL/pxp/netstring/Makefile [deleted file]
helm/DEVEL/pxp/netstring/RELEASE [deleted file]
helm/DEVEL/pxp/netstring/base64.ml [deleted file]
helm/DEVEL/pxp/netstring/base64.mli [deleted file]
helm/DEVEL/pxp/netstring/cgi.ml [deleted file]
helm/DEVEL/pxp/netstring/cgi.mli [deleted file]
helm/DEVEL/pxp/netstring/compat-base64/META [deleted file]
helm/DEVEL/pxp/netstring/compat-cgi/META [deleted file]
helm/DEVEL/pxp/netstring/depend [deleted file]
helm/DEVEL/pxp/netstring/depend.pkg [deleted file]
helm/DEVEL/pxp/netstring/doc/ABOUT-FINDLIB [deleted file]
helm/DEVEL/pxp/netstring/doc/ABOUT-FINDLIB.xml [deleted file]
helm/DEVEL/pxp/netstring/doc/INSTALL [deleted file]
helm/DEVEL/pxp/netstring/doc/INSTALL.xml [deleted file]
helm/DEVEL/pxp/netstring/doc/Makefile [deleted file]
helm/DEVEL/pxp/netstring/doc/README [deleted file]
helm/DEVEL/pxp/netstring/doc/README.xml [deleted file]
helm/DEVEL/pxp/netstring/mimestring.ml [deleted file]
helm/DEVEL/pxp/netstring/mimestring.mli [deleted file]
helm/DEVEL/pxp/netstring/netbuffer.ml [deleted file]
helm/DEVEL/pxp/netstring/netbuffer.mli [deleted file]
helm/DEVEL/pxp/netstring/netconversion.ml [deleted file]
helm/DEVEL/pxp/netstring/netconversion.mli [deleted file]
helm/DEVEL/pxp/netstring/netencoding.ml [deleted file]
helm/DEVEL/pxp/netstring/netencoding.mli [deleted file]
helm/DEVEL/pxp/netstring/nethtml.ml [deleted file]
helm/DEVEL/pxp/netstring/nethtml.mli [deleted file]
helm/DEVEL/pxp/netstring/nethtml_scanner.mll [deleted file]
helm/DEVEL/pxp/netstring/netmappings.ml [deleted file]
helm/DEVEL/pxp/netstring/netmappings.mli [deleted file]
helm/DEVEL/pxp/netstring/netmappings_iso.ml [deleted file]
helm/DEVEL/pxp/netstring/netmappings_other.ml [deleted file]
helm/DEVEL/pxp/netstring/netstream.ml [deleted file]
helm/DEVEL/pxp/netstring/netstream.mli [deleted file]
helm/DEVEL/pxp/netstring/netstring.cma [deleted file]
helm/DEVEL/pxp/netstring/netstring.cmxa [deleted file]
helm/DEVEL/pxp/netstring/netstring_mt.ml [deleted file]
helm/DEVEL/pxp/netstring/netstring_mt.mli [deleted file]
helm/DEVEL/pxp/netstring/netstring_str.ml [deleted file]
helm/DEVEL/pxp/netstring/netstring_str.mli [deleted file]
helm/DEVEL/pxp/netstring/netstring_top.ml [deleted file]
helm/DEVEL/pxp/netstring/netstring_top.mli [deleted file]
helm/DEVEL/pxp/netstring/neturl.ml [deleted file]
helm/DEVEL/pxp/netstring/neturl.mli [deleted file]
helm/DEVEL/pxp/netstring/tests/.cvsignore [deleted file]
helm/DEVEL/pxp/netstring/tests/Makefile [deleted file]
helm/DEVEL/pxp/netstring/tests/test_cgi.ml [deleted file]
helm/DEVEL/pxp/netstring/tests/test_encoding.cgi [deleted file]
helm/DEVEL/pxp/netstring/tests/test_mimestring.ml [deleted file]
helm/DEVEL/pxp/netstring/tests/test_netencoding.ml [deleted file]
helm/DEVEL/pxp/netstring/tests/test_neturl.ml [deleted file]
helm/DEVEL/pxp/netstring/tests/test_recode.ml [deleted file]
helm/DEVEL/pxp/netstring/tools/Makefile [deleted file]
helm/DEVEL/pxp/netstring/tools/unimap_to_ocaml/.cvsignore [deleted file]
helm/DEVEL/pxp/netstring/tools/unimap_to_ocaml/Makefile [deleted file]
helm/DEVEL/pxp/netstring/tools/unimap_to_ocaml/unimap_to_ocaml.ml [deleted file]
helm/DEVEL/pxp/ocaml-findlib-0.4.0-1.i386.rpm [deleted file]
helm/DEVEL/pxp/ocaml-findlib-0.4.0-1.src.rpm [deleted file]
helm/DEVEL/pxp/ocaml-findlib.spec [deleted file]
helm/DEVEL/pxp/ocaml-netstring-0.9.3-2.i386.rpm [deleted file]
helm/DEVEL/pxp/ocaml-netstring-0.9.3-2.src.rpm [deleted file]
helm/DEVEL/pxp/ocaml-netstring.spec [deleted file]
helm/DEVEL/pxp/ocaml-pxp-1.0-1.i386.rpm [deleted file]
helm/DEVEL/pxp/ocaml-pxp-1.0-1.src.rpm [deleted file]
helm/DEVEL/pxp/ocaml-pxp.spec [deleted file]
helm/DEVEL/pxp/pxp-1.0.tar.gz [deleted file]
helm/DEVEL/pxp/pxp/.cvsignore [deleted file]
helm/DEVEL/pxp/pxp/LICENSE [deleted file]
helm/DEVEL/pxp/pxp/META [deleted file]
helm/DEVEL/pxp/pxp/Makefile [deleted file]
helm/DEVEL/pxp/pxp/Makefile.code [deleted file]
helm/DEVEL/pxp/pxp/Makefile.conf [deleted file]
helm/DEVEL/pxp/pxp/RELEASE [deleted file]
helm/DEVEL/pxp/pxp/compatibility/.cvsignore [deleted file]
helm/DEVEL/pxp/pxp/compatibility/META [deleted file]
helm/DEVEL/pxp/pxp/compatibility/Makefile [deleted file]
helm/DEVEL/pxp/pxp/compatibility/Makefile.code [deleted file]
helm/DEVEL/pxp/pxp/compatibility/Makefile.conf [deleted file]
helm/DEVEL/pxp/pxp/compatibility/README [deleted file]
helm/DEVEL/pxp/pxp/compatibility/markup_document.ml [deleted file]
helm/DEVEL/pxp/pxp/compatibility/markup_document.mli [deleted file]
helm/DEVEL/pxp/pxp/compatibility/markup_dtd.ml [deleted file]
helm/DEVEL/pxp/pxp/compatibility/markup_dtd.mli [deleted file]
helm/DEVEL/pxp/pxp/compatibility/markup_reader.ml [deleted file]
helm/DEVEL/pxp/pxp/compatibility/markup_reader.mli [deleted file]
helm/DEVEL/pxp/pxp/compatibility/markup_types.ml [deleted file]
helm/DEVEL/pxp/pxp/compatibility/markup_types.mli [deleted file]
helm/DEVEL/pxp/pxp/compatibility/markup_yacc.ml [deleted file]
helm/DEVEL/pxp/pxp/compatibility/markup_yacc.mli [deleted file]
helm/DEVEL/pxp/pxp/doc/ABOUT-FINDLIB [deleted file]
helm/DEVEL/pxp/pxp/doc/ABOUT-FINDLIB.xml [deleted file]
helm/DEVEL/pxp/pxp/doc/EXTENSIONS [deleted file]
helm/DEVEL/pxp/pxp/doc/EXTENSIONS.xml [deleted file]
helm/DEVEL/pxp/pxp/doc/INSTALL [deleted file]
helm/DEVEL/pxp/pxp/doc/INSTALL.xml [deleted file]
helm/DEVEL/pxp/pxp/doc/Makefile [deleted file]
helm/DEVEL/pxp/pxp/doc/PRERELEASE [deleted file]
helm/DEVEL/pxp/pxp/doc/PRERELEASE.xml [deleted file]
helm/DEVEL/pxp/pxp/doc/README [deleted file]
helm/DEVEL/pxp/pxp/doc/README.xml [deleted file]
helm/DEVEL/pxp/pxp/doc/SPEC [deleted file]
helm/DEVEL/pxp/pxp/doc/SPEC.xml [deleted file]
helm/DEVEL/pxp/pxp/doc/design.txt [deleted file]
helm/DEVEL/pxp/pxp/doc/dist-common.xml [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/Makefile [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/TIMESTAMP [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/c1567.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/c36.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/c533.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/c893.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/index.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/markup.css [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/p34.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/pic/done [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/pic/extension_general.gif [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_add.gif [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_clone.gif [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_delete.gif [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_general.gif [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_term.gif [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/x107.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/x1439.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/x1496.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/x1629.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/x1812.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/x1818.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/x1965.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/x468.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/x550.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/x675.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/x738.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/html/x939.html [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/ps/markup.ps [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/dtd.mli.ent [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/getcode.ml [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/markup.css [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/markup.dsl [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/markup.sgml [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/pic/extension_general.fig [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_add.fig [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_clone.fig [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_delete.fig [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_general.fig [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_term.fig [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/readme.ent [deleted file]
helm/DEVEL/pxp/pxp/doc/manual/src/yacc.mli.ent [deleted file]
helm/DEVEL/pxp/pxp/examples/Makefile [deleted file]
helm/DEVEL/pxp/pxp/examples/readme/.cvsignore [deleted file]
helm/DEVEL/pxp/pxp/examples/readme/Makefile [deleted file]
helm/DEVEL/pxp/pxp/examples/readme/Makefile.code [deleted file]
helm/DEVEL/pxp/pxp/examples/readme/main.ml [deleted file]
helm/DEVEL/pxp/pxp/examples/readme/readme.dtd [deleted file]
helm/DEVEL/pxp/pxp/examples/readme/to_html.ml [deleted file]
helm/DEVEL/pxp/pxp/examples/readme/to_text.ml [deleted file]
helm/DEVEL/pxp/pxp/examples/simple_transformation/Makefile [deleted file]
helm/DEVEL/pxp/pxp/examples/simple_transformation/README [deleted file]
helm/DEVEL/pxp/pxp/examples/simple_transformation/delcol.ml [deleted file]
helm/DEVEL/pxp/pxp/examples/simple_transformation/print.ml [deleted file]
helm/DEVEL/pxp/pxp/examples/simple_transformation/record.dtd [deleted file]
helm/DEVEL/pxp/pxp/examples/simple_transformation/sample.xml [deleted file]
helm/DEVEL/pxp/pxp/examples/simple_transformation/sort.ml [deleted file]
helm/DEVEL/pxp/pxp/examples/validate/.cvsignore [deleted file]
helm/DEVEL/pxp/pxp/examples/validate/Makefile [deleted file]
helm/DEVEL/pxp/pxp/examples/validate/validate.ml [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/.cvsignore [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/Makefile [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/Makefile.code [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/README [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/ds_app.ml [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/ds_context.ml [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/ds_style.ml [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/styles/Makefile [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/styles/address-style.xml [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/styles/crazy-style.xml [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/styles/ds-object.dtd [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/styles/ds-style.dtd [deleted file]
helm/DEVEL/pxp/pxp/examples/xmlforms/styles/mini-style.xml [deleted file]
helm/DEVEL/pxp/pxp/lexers/Makefile [deleted file]
helm/DEVEL/pxp/pxp/lexers/Makefile.code [deleted file]
helm/DEVEL/pxp/pxp/lexers/Makefile.generate [deleted file]
helm/DEVEL/pxp/pxp/lexers/objects [deleted file]
helm/DEVEL/pxp/pxp/lexers/open_pxp_lex_aux_iso88591.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/open_pxp_lex_aux_utf8.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/open_pxp_lex_misc_iso88591.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/open_pxp_lex_misc_utf8.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_aux.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_aux_iso88591.ml [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_aux_utf8.ml [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_content.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_content_string.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_declaration.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_defs_drv_utf8.def [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_defs_generic.def [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_defs_iso88591.def [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_document.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_document_type.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_dtd_string.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_misc.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_name_string.src [deleted file]
helm/DEVEL/pxp/pxp/lexers/pxp_lex_within_tag.src [deleted file]
helm/DEVEL/pxp/pxp/m2parsergen/Makefile [deleted file]
helm/DEVEL/pxp/pxp/m2parsergen/README [deleted file]
helm/DEVEL/pxp/pxp/m2parsergen/ast.ml [deleted file]
helm/DEVEL/pxp/pxp/m2parsergen/generator.ml [deleted file]
helm/DEVEL/pxp/pxp/m2parsergen/lexer.mll [deleted file]
helm/DEVEL/pxp/pxp/m2parsergen/parser.mly [deleted file]
helm/DEVEL/pxp/pxp/m2parsergen/x.m2y [deleted file]
helm/DEVEL/pxp/pxp/pxp_aux.ml [deleted file]
helm/DEVEL/pxp/pxp/pxp_codewriter.ml [deleted file]
helm/DEVEL/pxp/pxp/pxp_codewriter.mli [deleted file]
helm/DEVEL/pxp/pxp/pxp_dfa.ml [deleted file]
helm/DEVEL/pxp/pxp/pxp_dfa.mli [deleted file]
helm/DEVEL/pxp/pxp/pxp_document.ml [deleted file]
helm/DEVEL/pxp/pxp/pxp_document.mli [deleted file]
helm/DEVEL/pxp/pxp/pxp_dtd.ml [deleted file]
helm/DEVEL/pxp/pxp/pxp_dtd.mli [deleted file]
helm/DEVEL/pxp/pxp/pxp_entity.ml [deleted file]
helm/DEVEL/pxp/pxp/pxp_lexer_types.ml [deleted file]
helm/DEVEL/pxp/pxp/pxp_lexer_types.mli [deleted file]
helm/DEVEL/pxp/pxp/pxp_lexers.ml [deleted file]
helm/DEVEL/pxp/pxp/pxp_lexers.mli [deleted file]
helm/DEVEL/pxp/pxp/pxp_reader.ml [deleted file]
helm/DEVEL/pxp/pxp/pxp_reader.mli [deleted file]
helm/DEVEL/pxp/pxp/pxp_types.ml [deleted file]
helm/DEVEL/pxp/pxp/pxp_types.mli [deleted file]
helm/DEVEL/pxp/pxp/pxp_utf8.ml [deleted file]
helm/DEVEL/pxp/pxp/pxp_utf8.mli [deleted file]
helm/DEVEL/pxp/pxp/pxp_yacc.m2y [deleted file]
helm/DEVEL/pxp/pxp/pxp_yacc.mli [deleted file]
helm/DEVEL/pxp/pxp/rtests/MISSING_TESTS [deleted file]
helm/DEVEL/pxp/pxp/rtests/Makefile [deleted file]
helm/DEVEL/pxp/pxp/rtests/README [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/Makefile [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/README [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/001.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/002.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/003.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/004.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/005.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/006.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/007.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/008.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/008.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/009.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/009.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/010.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/010.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/011.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/011.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/012.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/012.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/013.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/013.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/014.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/014.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/008.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/009.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/010.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/011.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/012.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/013.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/014.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/001.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/002.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/003-1.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/003-2.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/004-1.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/004-2.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/005-1.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/005-2.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/006.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/007.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/008.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/008.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/009.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/009.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/010.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/010.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/011.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/011.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/012.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/012.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/013.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/013.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/014.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/014.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/015.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/015.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/016.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/016.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/017.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/017.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/018.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/018.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/019.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/019.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/020.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/020.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/021.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/021.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/022.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/022.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/023.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/023.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/024.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/024.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/025.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/025.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/026.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/026.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/027.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/027.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/028.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/028.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/029.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/029.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/030.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/030.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/031-1.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/031-2.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/031.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/008.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/009.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/010.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/011.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/012.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/013.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/014.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/015.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/016.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/017.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/018.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/019.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/020.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/021.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/022.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/023.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/024.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/025.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/026.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/027.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/028.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/029.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/030.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/031.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/008.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/009.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/010.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/011.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/012.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/013.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/014.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/015.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/016.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/017.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/018.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/019.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/020.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/021.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/022.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/023.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/024.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/025.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/026.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/027.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/028.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/029.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/030.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/031.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/032.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/033.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/034.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/035.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/036.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/037.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/038.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/039.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/040.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/041.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/042.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/043.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/044.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/045.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/046.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/047.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/048.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/049.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/050.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/051.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/052.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/053.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/054.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/055.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/056.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/057.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/058.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/059.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/060.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/061.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/062.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/063.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/064.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/065.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/066.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/067.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/068.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/069.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/070.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/071.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/072.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/073.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/074.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/075.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/076.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/077.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/078.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/079.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/080.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/081.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/082.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/083.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/084.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/085.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/086.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/087.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/088.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/089.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/090.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/091.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/092.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/093.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/094.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/095.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/096.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/097.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/097.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/098.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/099.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/100.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/101.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/102.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/103.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/104.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/105.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/106.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/107.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/108.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/109.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/110.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/111.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/112.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/113.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/114.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/115.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/116.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/117.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/118.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/119.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/008.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/009.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/010.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/011.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/012.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/013.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/014.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/015.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/016.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/017.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/018.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/019.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/020.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/021.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/022.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/023.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/024.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/025.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/026.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/027.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/028.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/029.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/030.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/031.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/032.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/033.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/034.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/035.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/036.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/037.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/038.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/039.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/040.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/041.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/042.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/043.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/044.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/045.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/046.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/047.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/048.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/049.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/050.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/051.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/052.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/053.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/054.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/055.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/056.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/057.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/058.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/059.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/060.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/061.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/062.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/063.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/064.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/065.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/066.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/067.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/068.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/069.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/070.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/071.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/072.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/073.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/074.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/075.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/076.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/077.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/078.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/079.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/080.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/081.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/082.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/083.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/084.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/085.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/086.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/087.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/088.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/089.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/090.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/091.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/092.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/093.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/094.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/095.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/096.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/097.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/098.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/099.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/100.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/101.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/102.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/103.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/104.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/105.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/106.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/107.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/108.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/109.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/110.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/111.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/112.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/113.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/114.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/115.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/116.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/117.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/118.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/119.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/INDEX [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/002+.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/INDEX [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/out/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/out/002+.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/out/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/comments/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/comments/INDEX [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/comments/out/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/001.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/002.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/003.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/004.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/005.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/006.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/007.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/008.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/008.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/009.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/009.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/010.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/010.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/011.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/011.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/INDEX [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/008.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/009.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/010.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/011.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/INDEX [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/run_canonxml [deleted file]
helm/DEVEL/pxp/pxp/rtests/canonxml/test_canonxml.ml [deleted file]
helm/DEVEL/pxp/pxp/rtests/codewriter/Makefile [deleted file]
helm/DEVEL/pxp/pxp/rtests/codewriter/compile.ml [deleted file]
helm/DEVEL/pxp/pxp/rtests/codewriter/run_codewriter [deleted file]
helm/DEVEL/pxp/pxp/rtests/codewriter/sample001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/codewriter/test_codewriter [deleted file]
helm/DEVEL/pxp/pxp/rtests/dumpfiles.ml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/Makefile [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/README [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/001.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/010.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/010.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/011.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/011.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/012.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/012.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/013.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/013.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/014.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/014.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/015.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/015.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/016.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/016.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/017.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/017.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/018.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/018.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/019.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/019.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/020.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/020.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/021.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/021.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/022.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/022.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/023.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/023.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/024.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/024.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/025.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/025.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/026.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/026.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/027.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/027.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/028.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/028.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/029.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/029.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/030.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/030.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/031.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/031.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/032.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/032.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/033.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/033.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/034.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/034.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/035.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/035.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/036.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/036.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/037.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/037.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/038.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/038.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/060.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/060.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/060.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/061.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/061.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/061.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/062.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/062.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/062.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/063.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/063.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/063.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/064.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/064.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/064.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/065.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/065.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/065.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/066.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/066.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/066.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/067.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/067.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/067.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/068.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/068.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/068.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/069.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/069.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/069.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/070.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/070.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/070.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/080.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/080.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/081.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/081.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/INDEX [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/001.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/001.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/002.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/002.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/003.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/003.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/004.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/004.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/005.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/005.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/006.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/006.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/001.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/001.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/002.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/002.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/003.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/003.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/001.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/001.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/002.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/003.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/003.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/004.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/004.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/005.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/005.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/006.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/006.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/007.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/007.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/008.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/008.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/008.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa-problems/140.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa-problems/141.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/001.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/002.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/003.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/003.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/004.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/004.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/005.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/005.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/006.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/006.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/007.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/007.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/008.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/008.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/009.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/009.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/010.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/010.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/011.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/011.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/012.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/012.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/013.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/013.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/014.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/014.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/015.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/015.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/016.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/016.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/017.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/017.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/018.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/018.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/019.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/019.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/020.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/020.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/021.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/021.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/022.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/022.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/023.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/023.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/024.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/024.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/025.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/025.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/026.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/026.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/027.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/027.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/028.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/028.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/029.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/029.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/030.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/030.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/031.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/031.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/032.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/032.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/033.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/033.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/034.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/034.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/035.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/035.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/036.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/036.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/037.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/037.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/038.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/038.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/039.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/039.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/040.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/040.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/041.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/041.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/042.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/042.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/043.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/043.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/044.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/044.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/045.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/045.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/046.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/046.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/047.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/047.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/048.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/048.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/049.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/049.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/050.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/050.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/051.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/051.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/052.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/052.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/053.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/053.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/054.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/054.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/055.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/055.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/056.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/056.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/057.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/057.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/058.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/058.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/059.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/059.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/060.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/060.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/061.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/061.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/062.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/062.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/063.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/063.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/064.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/064.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/065.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/065.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/066.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/066.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/067.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/067.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/068.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/068.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/069.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/069.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/070.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/070.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/071.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/071.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/072.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/072.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/073.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/073.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/074.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/074.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/075.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/075.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/076.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/076.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/077.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/077.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/078.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/078.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/079.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/079.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/080.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/080.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/081.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/081.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/082.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/082.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/083.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/083.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/084.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/084.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/085.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/085.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/086.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/086.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/087.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/087.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/088.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/088.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/089.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/089.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/090.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/090.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/091.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/091.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/092.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/092.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/093.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/093.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/094.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/094.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/095.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/095.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/096.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/096.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/097.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/097.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/098.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/098.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/099.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/099.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/100.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/100.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/101.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/101.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/102.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/102.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/103.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/103.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/104.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/104.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/105.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/105.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/106.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/106.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/107.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/107.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/108.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/108.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/109.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/109.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/110.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/110.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/111.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/111.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/112.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/112.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/113.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/113.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/114.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/114.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/115.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/115.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/116.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/116.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/117.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/117.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/118.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/118.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/119.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/119.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/120.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/120.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/121.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/121.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/122.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/122.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/123.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/123.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/124.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/124.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/125.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/125.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/126.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/126.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/127.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/127.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/128.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/128.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/129.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/129.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/130.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/130.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/131.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/131.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/132.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/132.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/133.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/133.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/134.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/134.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/135.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/135.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/136.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/136.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/137.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/137.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/138.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/138.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/139.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/139.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/140.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/140.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/141.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/141.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/142.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/142.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/143.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/143.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/144.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/144.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/145.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/145.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/146.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/146.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/147.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/147.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/148.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/148.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/149.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/149.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/150.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/150.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/151.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/151.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/152.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/152.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/153.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/153.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/154.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/154.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/155.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/155.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/156.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/156.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/157.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/157.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/158.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/158.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/159.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/159.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/160.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/160.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/161.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/161.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/162.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/162.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/163.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/163.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/164.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/164.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/165.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/165.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/166.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/166.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/167.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/167.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/168.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/168.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/169.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/169.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/170.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/170.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/171.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/171.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/172.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/172.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/173.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/173.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/174.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/174.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/175.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/175.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/176.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/176.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/177.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/177.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/178.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/178.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/179.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/179.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/180.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/180.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/181.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/181.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/182.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/182.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/183.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/183.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/184.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/184.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/185.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/185.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/185.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/186.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/186.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/null.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/001.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/002.out [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/002.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/null.ent [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/run_negative [deleted file]
helm/DEVEL/pxp/pxp/rtests/negative/test_negative.ml [deleted file]
helm/DEVEL/pxp/pxp/rtests/reader/Makefile [deleted file]
helm/DEVEL/pxp/pxp/rtests/reader/minilex.mll [deleted file]
helm/DEVEL/pxp/pxp/rtests/reader/t100.dat [deleted file]
helm/DEVEL/pxp/pxp/rtests/reader/test_reader.ml [deleted file]
helm/DEVEL/pxp/pxp/rtests/run [deleted file]
helm/DEVEL/pxp/pxp/rtests/write/Makefile [deleted file]
helm/DEVEL/pxp/pxp/rtests/write/run_write [deleted file]
helm/DEVEL/pxp/pxp/rtests/write/sample001.xml [deleted file]
helm/DEVEL/pxp/pxp/rtests/write/test_write.ml [deleted file]
helm/DEVEL/pxp/pxp/tools/collect_files [deleted file]
helm/DEVEL/pxp/pxp/tools/insert_variant [deleted file]
helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/.cvsignore [deleted file]
helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/Makefile [deleted file]
helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/README [deleted file]
helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/lexer.mll [deleted file]
helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/parser.mly [deleted file]
helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/types.ml [deleted file]
helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/ucs2_to_utf8.ml [deleted file]
helm/EXPORT/cshrc [deleted file]
helm/EXPORT/export_Bordeaux_EXCEPTIONS/Makefile [deleted file]
helm/EXPORT/export_Bordeaux_EXCEPTIONS/exporttheories.sh [deleted file]
helm/EXPORT/export_Bordeaux_EXCEPTIONS/prova_Bordeaux_EXCEPTIONS.v [deleted file]
helm/EXPORT/export_Marseille_CCS/Makefile [deleted file]
helm/EXPORT/export_Marseille_CCS/exporttheories.sh [deleted file]
helm/EXPORT/export_Marseille_CCS/prova_Marseille_CCS.v [deleted file]
helm/EXPORT/export_Nijmegen_Rem/Makefile [deleted file]
helm/EXPORT/export_Nijmegen_Rem/exporttheories.sh [deleted file]
helm/EXPORT/export_Nijmegen_Rem/prova_Nijmegen_Rem.v [deleted file]
helm/EXPORT/export_Paris_ZF/Makefile [deleted file]
helm/EXPORT/export_Paris_ZF/exporttheories.sh [deleted file]
helm/EXPORT/export_Paris_ZF/prova_Paris_ZF.v [deleted file]
helm/EXPORT/export_Rocq_CHECKER/Makefile [deleted file]
helm/EXPORT/export_Rocq_CHECKER/exporttheories.sh [deleted file]
helm/EXPORT/export_Rocq_CHECKER/prova_Rocq_CHECKER.v [deleted file]
helm/EXPORT/export_Rocq_HIGMAN/Makefile [deleted file]
helm/EXPORT/export_Rocq_HIGMAN/exporttheories.sh [deleted file]
helm/EXPORT/export_Rocq_HIGMAN/prova_Rocq_HIGMAN.v [deleted file]
helm/EXPORT/export_Rocq_SHUFFLE/Makefile [deleted file]
helm/EXPORT/export_Rocq_SHUFFLE/exporttheories.sh [deleted file]
helm/EXPORT/export_Rocq_SHUFFLE/prova_Rocq_SHUFFLE.v [deleted file]
helm/EXPORT/export_Utrecht_Ramsey/Makefile [deleted file]
helm/EXPORT/export_Utrecht_Ramsey/exporttheories.sh [deleted file]
helm/EXPORT/export_Utrecht_Ramsey/prova_Utrecht_Ramsey.v [deleted file]
helm/EXPORT/exportcoq/Makefile [deleted file]
helm/EXPORT/exportcoq/export_contrib_theory.sh [deleted file]
helm/EXPORT/exportcoq/export_theory_theory.sh [deleted file]
helm/EXPORT/exportcoq/exporttheories.sh [deleted file]
helm/EXPORT/exportcoq/provacoq.v [deleted file]
helm/EXPORT/exportcoq/provacoqArith.v [deleted file]
helm/EXPORT/exportcoq/provacoqBool.v [deleted file]
helm/EXPORT/exportcoq/provacoqInit.v [deleted file]
helm/EXPORT/exportcoq/provacoqLists.v [deleted file]
helm/EXPORT/exportcoq/provacoqLogic.v [deleted file]
helm/EXPORT/exportcoq/provacoqReals.v [deleted file]
helm/EXPORT/exportcoq/provacoqRelations.v [deleted file]
helm/EXPORT/exportcoq/provacoqSets.v [deleted file]
helm/EXPORT/exportcoq/provacoqSorting.v [deleted file]
helm/EXPORT/exportcoq/provacoqTrees.v [deleted file]
helm/EXPORT/exportcoq/provacoqZArith.v [deleted file]
helm/EXPORT/exportcoq/provacoqcontribOmega.v [deleted file]
helm/EXPORT/exportcoq/provacoqcontribRing.v [deleted file]
helm/EXPORT/exportcsczfc/Makefile [deleted file]
helm/EXPORT/exportcsczfc/csc_zfc/.cvsignore [deleted file]
helm/EXPORT/exportcsczfc/csc_zfc/csc_eqdep.v [deleted file]
helm/EXPORT/exportcsczfc/csc_zfc/csc_zfc.v [deleted file]
helm/EXPORT/exportcsczfc/exporttheories.sh [deleted file]
helm/EXPORT/exportcsczfc/provacsczfc.v [deleted file]
helm/EXPORT/exportprove/Makefile [deleted file]
helm/EXPORT/exportprove/exporttheories.sh [deleted file]
helm/EXPORT/exportprove/prova.v [deleted file]
helm/EXPORT/exportprove/provaCofix.v [deleted file]
helm/EXPORT/exportprove/provaFeIota.v [deleted file]
helm/EXPORT/exportprove/provaStruct.v [deleted file]
helm/EXPORT/exportprove/prove/.cvsignore [deleted file]
helm/EXPORT/exportprove/prove/provaF.v [deleted file]
helm/EXPORT/exportprove/prove/provaIota.v [deleted file]
helm/EXPORT/exportprove/prove/provacofix.v [deleted file]
helm/EXPORT/exportprove/prove/provastruct.v [deleted file]
helm/EXPORT/exportprove/prove/provastruct2.v [deleted file]
helm/EXPORT/exportprove/prove/provastruct3.v [deleted file]
helm/EXPORT/exportprove/prove/provastruct4.v [deleted file]
helm/EXPORT/exportprove/prove/provastruct5.v [deleted file]
helm/EXPORT/mktheory.pl [deleted file]
helm/Makefile [deleted file]
helm/annotationHelper/.cvsignore [deleted file]
helm/annotationHelper/.depend [deleted file]
helm/annotationHelper/Makefile [deleted file]
helm/annotationHelper/cicAnnotationHelper.ml [deleted file]
helm/annotationHelper/cicAnnotationHinter.ml [deleted file]
helm/annotationHelper/cicAnnotationHinter.mli [deleted file]
helm/cgi/mkcontrol.pl [deleted file]
helm/cgi/mkheader.pl [deleted file]
helm/cgi/mkindex.pl [deleted file]
helm/cgi/mkindexcic.pl [deleted file]
helm/cgi/mkindextheory.pl [deleted file]
helm/configuration/.cvsignore [deleted file]
helm/configuration/AUTHORS [deleted file]
helm/configuration/COPYING [deleted file]
helm/configuration/ChangeLog [deleted file]
helm/configuration/Makefile.in [deleted file]
helm/configuration/NEWS [deleted file]
helm/configuration/README [deleted file]
helm/configuration/config.cache.pkg [deleted file]
helm/configuration/configure.in [deleted file]
helm/configuration/etc/.cvsignore [deleted file]
helm/configuration/etc/configuration.dtd [deleted file]
helm/configuration/etc/configuration.xml.in [deleted file]
helm/configuration/etc/helm-dictionary.xml [deleted file]
helm/configuration/etc/helm-font-configuration.xml [deleted file]
helm/configuration/etc/helm-math-engine-configuration.xml.in [deleted file]
helm/configuration/helm-config.in [deleted file]
helm/configuration/helm_configuration.spec.in [deleted file]
helm/configuration/lib/.cvsignore [deleted file]
helm/configuration/lib/configuration.pl.in [deleted file]
helm/configuration/library/servers.txt [deleted file]
helm/configuration/library/urls_of_uris.db [deleted file]
helm/dtd/annotations.dtd [deleted file]
helm/dtd/backward.dtd [deleted file]
helm/dtd/cic.dtd [deleted file]
helm/dtd/cicobject.dtd [deleted file]
helm/dtd/cictypes.dtd [deleted file]
helm/dtd/forward.dtd [deleted file]
helm/dtd/isoamsa.ent [deleted file]
helm/dtd/isoamsb.ent [deleted file]
helm/dtd/isoamsc.ent [deleted file]
helm/dtd/isoamsn.ent [deleted file]
helm/dtd/isoamso.ent [deleted file]
helm/dtd/isoamsr.ent [deleted file]
helm/dtd/isobox.ent [deleted file]
helm/dtd/isocyr1.ent [deleted file]
helm/dtd/isocyr2.ent [deleted file]
helm/dtd/isodia.ent [deleted file]
helm/dtd/isogrk3.ent [deleted file]
helm/dtd/isolat1.ent [deleted file]
helm/dtd/isolat2.ent [deleted file]
helm/dtd/isomfrk.ent [deleted file]
helm/dtd/isomopf.ent [deleted file]
helm/dtd/isomscr.ent [deleted file]
helm/dtd/isonum.ent [deleted file]
helm/dtd/isopub.ent [deleted file]
helm/dtd/isotech.ent [deleted file]
helm/dtd/ls.dtd [deleted file]
helm/dtd/mathml2-qname-1.mod [deleted file]
helm/dtd/mathml2.dtd [deleted file]
helm/dtd/maththeory.dtd [deleted file]
helm/dtd/mmlalias.ent [deleted file]
helm/dtd/mmlextra.ent [deleted file]
helm/dtd/provastruct.theory.xml [deleted file]
helm/dtd/theoryobject.dtd [deleted file]
helm/fix_params/.cvsignore [deleted file]
helm/fix_params/.depend [deleted file]
helm/fix_params/Makefile [deleted file]
helm/fix_params/cic2Xml.ml [deleted file]
helm/fix_params/cicFindParameters.ml [deleted file]
helm/fix_params/fix_params.ml [deleted file]
helm/gTopLevel/.cvsignore [deleted file]
helm/gTopLevel/.depend [deleted file]
helm/gTopLevel/INSTALL [deleted file]
helm/gTopLevel/Makefile [deleted file]
helm/gTopLevel/TATTICHE [deleted file]
helm/gTopLevel/applyStylesheets.ml [deleted file]
helm/gTopLevel/applyStylesheets.mli [deleted file]
helm/gTopLevel/cic2Xml.ml [deleted file]
helm/gTopLevel/cic2Xml.mli [deleted file]
helm/gTopLevel/cic2acic.ml [deleted file]
helm/gTopLevel/cic2acic.mli [deleted file]
helm/gTopLevel/dictionary-cic.xml [deleted file]
helm/gTopLevel/disambiguate.ml [deleted file]
helm/gTopLevel/disambiguate.mli [deleted file]
helm/gTopLevel/doubleTypeInference.ml [deleted file]
helm/gTopLevel/doubleTypeInference.mli [deleted file]
helm/gTopLevel/esempi/and_implies_or.cic [deleted file]
helm/gTopLevel/esempi/and_implies_or2.cic [deleted file]
helm/gTopLevel/esempi/apply.cic [deleted file]
helm/gTopLevel/esempi/bug.cic [deleted file]
helm/gTopLevel/esempi/calcolo_proposizioni.cic [deleted file]
helm/gTopLevel/esempi/conversion.cic [deleted file]
helm/gTopLevel/esempi/decompose.cic [deleted file]
helm/gTopLevel/esempi/elim.cic [deleted file]
helm/gTopLevel/esempi/elim2.cic [deleted file]
helm/gTopLevel/esempi/evars.cic [deleted file]
helm/gTopLevel/esempi/fourier.cic [deleted file]
helm/gTopLevel/esempi/fourier/fourier.cic [deleted file]
helm/gTopLevel/esempi/fourier/fourier_benchmarks.cic [deleted file]
helm/gTopLevel/esempi/fourier/fourier_make_benchmarks.ml [deleted file]
helm/gTopLevel/esempi/prova.cic [deleted file]
helm/gTopLevel/esempi/rewrite.cic [deleted file]
helm/gTopLevel/esempi/ring/0eq0.cic [deleted file]
helm/gTopLevel/esempi/ring/aliases.cic [deleted file]
helm/gTopLevel/esempi/ring/caso0.cic [deleted file]
helm/gTopLevel/esempi/ring/caso1.cic [deleted file]
helm/gTopLevel/esempi/ring/caso2.cic [deleted file]
helm/gTopLevel/esempi/ring/caso3.1.cic [deleted file]
helm/gTopLevel/esempi/ring/caso3.1bis.cic [deleted file]
helm/gTopLevel/esempi/ring/caso3.2.cic [deleted file]
helm/gTopLevel/esempi/ring/caso3.3.cic [deleted file]
helm/gTopLevel/esempi/ring/coq_overkill_helm_rulez.cic [deleted file]
helm/gTopLevel/esempi/ring/novarmap.cic [deleted file]
helm/gTopLevel/esempi/ring/novarmap_tofinish.cic [deleted file]
helm/gTopLevel/esempi/ring/varmap.cic [deleted file]
helm/gTopLevel/esempi/ring/varmap2.cic [deleted file]
helm/gTopLevel/esempi/ring/varmap_trivial.cic [deleted file]
helm/gTopLevel/esempi/ring/varmap_trivial2.cic [deleted file]
helm/gTopLevel/esempi/ring/varmap_trivial3.cic [deleted file]
helm/gTopLevel/esempi/ring/varmap_trivial_molte_variabili.cic [deleted file]
helm/gTopLevel/esempi/sets.cic [deleted file]
helm/gTopLevel/esempi/various.cic [deleted file]
helm/gTopLevel/gTopLevel.ml [deleted file]
helm/gTopLevel/hbugs.ml [deleted file]
helm/gTopLevel/hbugs.mli [deleted file]
helm/gTopLevel/invokeTactics.ml [deleted file]
helm/gTopLevel/invokeTactics.mli [deleted file]
helm/gTopLevel/logicalOperations.ml [deleted file]
helm/gTopLevel/logicalOperations.mli [deleted file]
helm/gTopLevel/misc.ml [deleted file]
helm/gTopLevel/misc.mli [deleted file]
helm/gTopLevel/proofEngine.ml [deleted file]
helm/gTopLevel/proofEngine.mli [deleted file]
helm/gTopLevel/rootcontent.xsl [deleted file]
helm/gTopLevel/script.sh [deleted file]
helm/gTopLevel/sequentPp.ml [deleted file]
helm/gTopLevel/sequentPp.mli [deleted file]
helm/gTopLevel/termEditor.ml [deleted file]
helm/gTopLevel/termEditor.mli [deleted file]
helm/gTopLevel/termViewer.ml [deleted file]
helm/gTopLevel/termViewer.mli [deleted file]
helm/gTopLevel/texTermEditor.ml [deleted file]
helm/gTopLevel/texTermEditor.mli [deleted file]
helm/gTopLevel/xml2Gdome.ml [deleted file]
helm/gTopLevel/xml2Gdome.mli [deleted file]
helm/graphs/tools/.cvsignore [deleted file]
helm/graphs/tools/Makefile [deleted file]
helm/graphs/tools/drawGraph.ml [deleted file]
helm/graphs/tools/draw_graph.cgi [deleted file]
helm/graphs/tools/mk_html.pl [deleted file]
helm/graphs/tools/simplify_deps/.cvsignore [deleted file]
helm/graphs/tools/simplify_deps/Makefile [deleted file]
helm/graphs/tools/simplify_deps/simplify_deps.ml [deleted file]
helm/graphs/tools/uriSetQueue.ml [deleted file]
helm/graphs/tools/uri_set_queue.cgi [deleted file]
helm/gtkmathview-bonobo/.cvsignore [deleted file]
helm/gtkmathview-bonobo/AUTHORS [deleted file]
helm/gtkmathview-bonobo/ChangeLog [deleted file]
helm/gtkmathview-bonobo/Makefile.am [deleted file]
helm/gtkmathview-bonobo/NEWS [deleted file]
helm/gtkmathview-bonobo/README [deleted file]
helm/gtkmathview-bonobo/configure.ac [deleted file]
helm/gtkmathview-bonobo/src/.cvsignore [deleted file]
helm/gtkmathview-bonobo/src/GNOME_GtkMathView.server.in [deleted file]
helm/gtkmathview-bonobo/src/Makefile.am [deleted file]
helm/gtkmathview-bonobo/src/gtkmathview-bonobo.c [deleted file]
helm/gtkmathview-bonobo/src/gtkmathview-bonobo.h [deleted file]
helm/hbugs/Makefile [deleted file]
helm/hbugs/broker/.cvsignore [deleted file]
helm/hbugs/broker/.depend [deleted file]
helm/hbugs/broker/Makefile [deleted file]
helm/hbugs/broker/Makefile.overrides [deleted file]
helm/hbugs/broker/hbugs_broker.ml [deleted file]
helm/hbugs/broker/hbugs_broker_ctl.sh [deleted file]
helm/hbugs/broker/hbugs_broker_registry.ml [deleted file]
helm/hbugs/broker/hbugs_broker_registry.mli [deleted file]
helm/hbugs/broker/run/.cvsignore [deleted file]
helm/hbugs/client/.cvsignore [deleted file]
helm/hbugs/client/Makefile [deleted file]
helm/hbugs/client/hbugs_client.ml [deleted file]
helm/hbugs/client/hbugs_client.mli [deleted file]
helm/hbugs/client/hbugs_gui.glade [deleted file]
helm/hbugs/client/main.ml [deleted file]
helm/hbugs/common/.cvsignore [deleted file]
helm/hbugs/common/.depend [deleted file]
helm/hbugs/common/Makefile [deleted file]
helm/hbugs/common/Makefile.overrides [deleted file]
helm/hbugs/common/hbugs_common.ml [deleted file]
helm/hbugs/common/hbugs_common.mli [deleted file]
helm/hbugs/common/hbugs_id_generator.ml [deleted file]
helm/hbugs/common/hbugs_id_generator.mli [deleted file]
helm/hbugs/common/hbugs_messages.ml [deleted file]
helm/hbugs/common/hbugs_messages.mli [deleted file]
helm/hbugs/common/hbugs_misc.ml [deleted file]
helm/hbugs/common/hbugs_misc.mli [deleted file]
helm/hbugs/common/hbugs_types.ml [deleted file]
helm/hbugs/common/threadSafe.ml [deleted file]
helm/hbugs/doc/.cvsignore [deleted file]
helm/hbugs/doc/hbugs.dia [deleted file]
helm/hbugs/meta/.cvsignore [deleted file]
helm/hbugs/meta/META.hbugs-client.in [deleted file]
helm/hbugs/meta/META.hbugs-common.in [deleted file]
helm/hbugs/meta/META.hbugs-thread-safe.in [deleted file]
helm/hbugs/meta/Makefile [deleted file]
helm/hbugs/test/.cvsignore [deleted file]
helm/hbugs/test/HBUGS_MESSAGES.xml [deleted file]
helm/hbugs/test/Makefile [deleted file]
helm/hbugs/test/test_serialization.ml [deleted file]
helm/hbugs/tutors/.cvsignore [deleted file]
helm/hbugs/tutors/INDEX.xml [deleted file]
helm/hbugs/tutors/Makefile [deleted file]
helm/hbugs/tutors/build_tutors.ml [deleted file]
helm/hbugs/tutors/hbugs_deity.ml [deleted file]
helm/hbugs/tutors/hbugs_deity.mli [deleted file]
helm/hbugs/tutors/hbugs_tutor.TPL.ml [deleted file]
helm/hbugs/tutors/hbugs_tutors_common.ml [deleted file]
helm/hbugs/tutors/hbugs_tutors_common.mli [deleted file]
helm/hbugs/tutors/ls_tutors.ml [deleted file]
helm/hbugs/tutors/run/.cvsignore [deleted file]
helm/hbugs/tutors/sabba.sh [deleted file]
helm/hbugs/tutors/search_pattern_apply_tutor.ml [deleted file]
helm/header/getheader.xml [deleted file]
helm/header/provaurl [deleted file]
helm/header/provaurl1 [deleted file]
helm/header/setheader.xsl [deleted file]
helm/helm_data/.cvsignore [deleted file]
helm/helm_data/AUTHORS [deleted file]
helm/helm_data/COPYING [deleted file]
helm/helm_data/ChangeLog [deleted file]
helm/helm_data/LICENSE [deleted file]
helm/helm_data/LICENSE.ml [deleted file]
helm/helm_data/LICENSE.script [deleted file]
helm/helm_data/LICENSE.xml [deleted file]
helm/helm_data/Makefile.in [deleted file]
helm/helm_data/NEWS [deleted file]
helm/helm_data/README [deleted file]
helm/helm_data/config.cache.pkg [deleted file]
helm/helm_data/configure.in [deleted file]
helm/helm_data/helm_data.spec.in [deleted file]
helm/helmpot/.cvsignore [deleted file]
helm/helmpot/AUTHORS [deleted file]
helm/helmpot/ChangeLog [deleted file]
helm/helmpot/LICENSE [deleted file]
helm/helmpot/Makefile.am [deleted file]
helm/helmpot/NEWS [deleted file]
helm/helmpot/README [deleted file]
helm/helmpot/acconfig.h [deleted file]
helm/helmpot/configure.in [deleted file]
helm/helmpot/debian/changelog [deleted file]
helm/helmpot/debian/control [deleted file]
helm/helmpot/debian/copyright [deleted file]
helm/helmpot/debian/docs [deleted file]
helm/helmpot/debian/rules [deleted file]
helm/helmpot/guiGTK.c [deleted file]
helm/helmpot/guiGTK.h [deleted file]
helm/helmpot/helmpot.spec.in [deleted file]
helm/helmpot/main.c [deleted file]
helm/helmpot/pot_mask [deleted file]
helm/http_getter/.cvsignore [deleted file]
helm/http_getter/.depend [deleted file]
helm/http_getter/AUTHORS [deleted file]
helm/http_getter/BUGS [deleted file]
helm/http_getter/COPYING [deleted file]
helm/http_getter/ChangeLog [deleted file]
helm/http_getter/Makefile [deleted file]
helm/http_getter/Makefile.overrides [deleted file]
helm/http_getter/NEWS [deleted file]
helm/http_getter/README [deleted file]
helm/http_getter/doc/http_getter.conf.xml.sample [deleted file]
helm/http_getter/http_getter.ml [deleted file]
helm/http_getter/http_getter_cache.ml [deleted file]
helm/http_getter/http_getter_cache.mli [deleted file]
helm/http_getter/http_getter_common.ml [deleted file]
helm/http_getter/http_getter_common.mli [deleted file]
helm/http_getter/http_getter_const.ml [deleted file]
helm/http_getter/http_getter_const.mli [deleted file]
helm/http_getter/http_getter_debugger.ml [deleted file]
helm/http_getter/http_getter_debugger.mli [deleted file]
helm/http_getter/http_getter_env.ml [deleted file]
helm/http_getter/http_getter_env.mli [deleted file]
helm/http_getter/http_getter_map.ml [deleted file]
helm/http_getter/http_getter_map.mli [deleted file]
helm/http_getter/http_getter_misc.ml [deleted file]
helm/http_getter/http_getter_misc.mli [deleted file]
helm/http_getter/http_getter_types.ml [deleted file]
helm/http_getter/panel/.cvsignore [deleted file]
helm/http_getter/panel/Makefile [deleted file]
helm/http_getter/panel/control.html [deleted file]
helm/http_getter/panel/control.js [deleted file]
helm/http_getter/panel/index.html [deleted file]
helm/http_getter/panel/welcome.html [deleted file]
helm/http_getter/threadSafe.ml [deleted file]
helm/http_getter/threadSafe.mli [deleted file]
helm/http_getter/tools/dump_db.ml [deleted file]
helm/http_getter/tools/dump_db.pl [deleted file]
helm/http_getter/tools/uri_escape.pl [deleted file]
helm/http_getter/tools/uri_unescape.pl [deleted file]
helm/http_getter/zack.ml [deleted file]
helm/http_getter/zack.mli [deleted file]
helm/hxsp/config [deleted file]
helm/hxsp/hxsp.pl [deleted file]
helm/hxsp/make.pl [deleted file]
helm/hxsp/msg/error.en [deleted file]
helm/hxsp/msg/error.it [deleted file]
helm/hxsp/msg/message.en [deleted file]
helm/hxsp/msg/message.it [deleted file]
helm/hxsp/splitted/0.init.p.pl [deleted file]
helm/hxsp/splitted/1.globvars.p.pl [deleted file]
helm/hxsp/splitted/2.start.p.pl [deleted file]
helm/hxsp/splitted/3.daemon.p.pl [deleted file]
helm/hxsp/splitted/4.hash.p.pl [deleted file]
helm/hxsp/splitted/5.libxslt.p.pl [deleted file]
helm/hxsp/splitted/6.commands.p.pl [deleted file]
helm/hxsp/splitted/7.qsparse.p.pl [deleted file]
helm/hxsp/splitted/8.strrep.p.pl [deleted file]
helm/hxsp/splitted/9.load.p.pl [deleted file]
helm/hxsp/tpl/ok.tpl [deleted file]
helm/hxsp/tpl/operror.tpl [deleted file]
helm/hxsp/tpl/synerror.tpl [deleted file]
helm/interface/.cvsignore [deleted file]
helm/interface/.depend [deleted file]
helm/interface/AUTHORS [deleted file]
helm/interface/COPYING [deleted file]
helm/interface/ChangeLog [deleted file]
helm/interface/Makefile.in [deleted file]
helm/interface/NEWS [deleted file]
helm/interface/README [deleted file]
helm/interface/TEMPI [deleted file]
helm/interface/WGET [deleted file]
helm/interface/annotation2Xml.ml [deleted file]
helm/interface/annotationParser.ml [deleted file]
helm/interface/annotationParser2.ml [deleted file]
helm/interface/cic.ml [deleted file]
helm/interface/cic2Xml.ml [deleted file]
helm/interface/cicAnnotationHinter.ml [deleted file]
helm/interface/cicCache.ml [deleted file]
helm/interface/cicCache.mli [deleted file]
helm/interface/cicCooking.ml [deleted file]
helm/interface/cicCooking.mli [deleted file]
helm/interface/cicFindParameters.ml [deleted file]
helm/interface/cicParser.ml [deleted file]
helm/interface/cicParser.mli [deleted file]
helm/interface/cicParser2.ml [deleted file]
helm/interface/cicParser2.mli [deleted file]
helm/interface/cicParser3.ml [deleted file]
helm/interface/cicParser3.mli [deleted file]
helm/interface/cicPp.ml [deleted file]
helm/interface/cicPp.mli [deleted file]
helm/interface/cicReduction.ml [deleted file]
helm/interface/cicReduction.mli [deleted file]
helm/interface/cicSubstitution.ml [deleted file]
helm/interface/cicSubstitution.mli [deleted file]
helm/interface/cicTypeChecker.ml [deleted file]
helm/interface/cicTypeChecker.mli [deleted file]
helm/interface/cicXPath.ml [deleted file]
helm/interface/clientHTTP.ml [deleted file]
helm/interface/config.cache.pkg [deleted file]
helm/interface/configuration.ml.in [deleted file]
helm/interface/configure.in [deleted file]
helm/interface/deannotate.ml [deleted file]
helm/interface/experiment.ml [deleted file]
helm/interface/fix_params.ml [deleted file]
helm/interface/getter.ml [deleted file]
helm/interface/getter.mli [deleted file]
helm/interface/helm_gtk_interface.spec.in [deleted file]
helm/interface/helm_wget.in [deleted file]
helm/interface/mmlinterface.ml [deleted file]
helm/interface/pxpUriResolver.ml [deleted file]
helm/interface/reduction.ml [deleted file]
helm/interface/styleConfiguration.ml [deleted file]
helm/interface/theory.ml [deleted file]
helm/interface/theoryCache.ml [deleted file]
helm/interface/theoryParser.ml [deleted file]
helm/interface/theoryParser2.ml [deleted file]
helm/interface/theoryTypeChecker.ml [deleted file]
helm/interface/toglie_helm_xref.pl [deleted file]
helm/interface/toglie_helm_xref.sh [deleted file]
helm/interface/uriManager.ml [deleted file]
helm/interface/uriManager.ml.implementazione_banale [deleted file]
helm/interface/uriManager.ml.implementazione_doppia [deleted file]
helm/interface/uriManager.ml.implementazione_semplice [deleted file]
helm/interface/uriManager.mli [deleted file]
helm/interface/uris_of_filenames.pl [deleted file]
helm/interface/xml.ml [deleted file]
helm/interface/xml.mli [deleted file]
helm/interface/xsltProcessor.ml [deleted file]
helm/mathql/grammar.txt [deleted file]
helm/mathql/homepage/authors.html [deleted file]
helm/mathql/homepage/documentation.html [deleted file]
helm/mathql/homepage/features.html [deleted file]
helm/mathql/homepage/implementation.html [deleted file]
helm/mathql/homepage/index.html [deleted file]
helm/mathql/homepage/links.html [deleted file]
helm/mathql/homepage/whatsnew.html [deleted file]
helm/mathql/query.xml [deleted file]
helm/mathql/result.xml [deleted file]
helm/mathql/xmathql.dtd [deleted file]
helm/mathql/xmqlresult.dtd [deleted file]
helm/mathql_test/.cvsignore [deleted file]
helm/mathql_test/.depend [deleted file]
helm/mathql_test/Makefile [deleted file]
helm/mathql_test/mQGTopLexer.mll [deleted file]
helm/mathql_test/mQGTopParser.mly [deleted file]
helm/mathql_test/mqgtop.ml [deleted file]
helm/mathql_test/mqitop.ml [deleted file]
helm/mathql_test/mqtop.ml [deleted file]
helm/meta_style/.cvsignore [deleted file]
helm/meta_style/Makefile [deleted file]
helm/meta_style/algebra.xml [deleted file]
helm/meta_style/arith.xml [deleted file]
helm/meta_style/basic.xml [deleted file]
helm/meta_style/meta_cic2mathml.xsl [deleted file]
helm/meta_style/modeset.xsl [deleted file]
helm/meta_style/operator.dtd [deleted file]
helm/meta_style/positive.xsl [deleted file]
helm/meta_style/reals.xml [deleted file]
helm/meta_style/set.xml [deleted file]
helm/meta_style/subst.pl [deleted file]
helm/meta_style/xslt_index.txt [deleted file]
helm/metadata/create/.cvsignore [deleted file]
helm/metadata/create2/Makefile [deleted file]
helm/metadata/create2/fix_rdf.pl [deleted file]
helm/metadata/create2/invert.pl [deleted file]
helm/metadata/create2/mk_forward/.cvsignore [deleted file]
helm/metadata/create2/mk_forward/.depend [deleted file]
helm/metadata/create2/mk_forward/Makefile [deleted file]
helm/metadata/create2/mk_forward/mk_forward.ml [deleted file]
helm/metadata/create2/mkindex.sh [deleted file]
helm/metadata/create2/touch/.cvsignore [deleted file]
helm/metadata/create2/touch/.depend [deleted file]
helm/metadata/create2/touch/Makefile [deleted file]
helm/metadata/create2/touch/touch.ml [deleted file]
helm/metadata/create2/uris_of_filenames.pl [deleted file]
helm/metadata/create4/METADATA/Makefile [deleted file]
helm/metadata/create4/METADATA/meta_lex.l [deleted file]
helm/metadata/create4/METADATA/sthandler.c [deleted file]
helm/metadata/create4/METADATA/sthandler.h [deleted file]
helm/metadata/create4/Makefile [deleted file]
helm/metadata/create_V7_mowgli/.cvsignore [deleted file]
helm/metadata/create_V7_mowgli/METADATA/.cvsignore [deleted file]
helm/metadata/create_V7_mowgli/METADATA/Makefile [deleted file]
helm/metadata/create_V7_mowgli/METADATA/README [deleted file]
helm/metadata/create_V7_mowgli/METADATA/meta_lex.l [deleted file]
helm/metadata/create_V7_mowgli/METADATA/meta_lex_ind.l [deleted file]
helm/metadata/create_V7_mowgli/METADATA/sthandler.c [deleted file]
helm/metadata/create_V7_mowgli/METADATA/sthandler.h [deleted file]
helm/metadata/create_V7_mowgli/METADATA/sthandler_ind.c [deleted file]
helm/metadata/create_V7_mowgli/METADATA/sthandler_ind.h [deleted file]
helm/metadata/create_V7_mowgli/Makefile [deleted file]
helm/metadata/create_V7_mowgli/fix_rdf.pl [deleted file]
helm/metadata/create_V7_mowgli/forward_rel_or_sort_footer.txt [deleted file]
helm/metadata/create_V7_mowgli/forward_rel_or_sort_header.txt [deleted file]
helm/metadata/create_V7_mowgli/invert.pl [deleted file]
helm/metadata/create_V7_mowgli/mkindex.sh [deleted file]
helm/metadata/create_V7_mowgli/touch/.cvsignore [deleted file]
helm/metadata/create_V7_mowgli/touch/.depend [deleted file]
helm/metadata/create_V7_mowgli/touch/Makefile [deleted file]
helm/metadata/create_V7_mowgli/touch/touch.ml [deleted file]
helm/metadata/create_V7_mowgli/uris_of_filenames.pl [deleted file]
helm/metadata/dc_mowgli/.cvsignore [deleted file]
helm/metadata/dc_mowgli/Makefile [deleted file]
helm/metadata/dc_mowgli/create_dc_indexes [deleted file]
helm/metadata/dc_mowgli/create_dc_tables [deleted file]
helm/metadata/dc_mowgli/drop_dc_tables [deleted file]
helm/metadata/dc_mowgli/mkindex.sh [deleted file]
helm/metadata/dc_mowgli/upload.pl [deleted file]
helm/metadata/dc_mowgli/uris_of_filenames.pl [deleted file]
helm/metadata/postgresql_V7_mowgli/.cvsignore [deleted file]
helm/metadata/postgresql_V7_mowgli/Makefile [deleted file]
helm/metadata/postgresql_V7_mowgli/README [deleted file]
helm/metadata/postgresql_V7_mowgli/inserisci.pl [deleted file]
helm/metadata/postgresql_V7_mowgli/inserisci_names.pl [deleted file]
helm/metadata/postgresql_V7_mowgli/metadata_for_names/.cvsignore [deleted file]
helm/metadata/postgresql_V7_mowgli/metadata_for_names/Makefile [deleted file]
helm/metadata/postgresql_V7_mowgli/metainfo.xsl [deleted file]
helm/metadata/postgresql_V7_mowgli/upload_rel.pl [deleted file]
helm/metadata/postgresql_V7_mowgli/upload_sort.pl [deleted file]
helm/minidom/.cvsignore [deleted file]
helm/minidom/AUTHORS [deleted file]
helm/minidom/COPYING [deleted file]
helm/minidom/ChangeLog [deleted file]
helm/minidom/HEADER [deleted file]
helm/minidom/INSTALL [deleted file]
helm/minidom/Makefile.am [deleted file]
helm/minidom/NEWS [deleted file]
helm/minidom/README [deleted file]
helm/minidom/TODO [deleted file]
helm/minidom/acconfig.h [deleted file]
helm/minidom/config.guess [deleted file]
helm/minidom/config.sub [deleted file]
helm/minidom/configure.in [deleted file]
helm/minidom/debian/README.helm [deleted file]
helm/minidom/debian/autopippe.helm [deleted file]
helm/minidom/debian/changelog [deleted file]
helm/minidom/debian/control [deleted file]
helm/minidom/debian/copyright [deleted file]
helm/minidom/debian/debianize.helm [deleted file]
helm/minidom/debian/docs [deleted file]
helm/minidom/debian/garbage.helm [deleted file]
helm/minidom/debian/libminidom-dev.files [deleted file]
helm/minidom/debian/libminidom-dev.undocumented [deleted file]
helm/minidom/debian/libminidom0.files [deleted file]
helm/minidom/debian/libminidom0.postinst [deleted file]
helm/minidom/debian/rules [deleted file]
helm/minidom/minidom-config.in [deleted file]
helm/minidom/minidom.c [deleted file]
helm/minidom/minidom.h [deleted file]
helm/minidom/minidom.spec.in [deleted file]
helm/minidom/stamp-h.in [deleted file]
helm/mowgli/home/htaccess [deleted file]
helm/mowgli/home/html/.cvsignore [deleted file]
helm/mowgli/home/html/Makefile [deleted file]
helm/mowgli/home/html/deliverables/distribution/.cvsignore [deleted file]
helm/mowgli/home/html/deliverables/information-dissemination-and-exploitation/.cvsignore [deleted file]
helm/mowgli/home/html/deliverables/interfaces/.cvsignore [deleted file]
helm/mowgli/home/html/deliverables/metadata/.cvsignore [deleted file]
helm/mowgli/home/html/deliverables/project-management/.cvsignore [deleted file]
helm/mowgli/home/html/deliverables/requirement-analysis/.cvsignore [deleted file]
helm/mowgli/home/html/deliverables/testing-and-validation/.cvsignore [deleted file]
helm/mowgli/home/html/deliverables/transformation/.cvsignore [deleted file]
helm/mowgli/home/html/members/.cvsignore [deleted file]
helm/mowgli/home/html/mowgli-events/.cvsignore [deleted file]
helm/mowgli/home/html/people/aei/.cvsignore [deleted file]
helm/mowgli/home/html/people/bologna/.cvsignore [deleted file]
helm/mowgli/home/html/people/dfki/.cvsignore [deleted file]
helm/mowgli/home/html/people/inria/.cvsignore [deleted file]
helm/mowgli/home/html/people/nijmegen/.cvsignore [deleted file]
helm/mowgli/home/html/people/trusted-logic/.cvsignore [deleted file]
helm/mowgli/home/html/proposal/.cvsignore [deleted file]
helm/mowgli/home/html/publications/.cvsignore [deleted file]
helm/mowgli/home/html/publications/mowgli/.cvsignore [deleted file]
helm/mowgli/home/html/publications/others/.cvsignore [deleted file]
helm/mowgli/home/html/sites/.cvsignore [deleted file]
helm/mowgli/home/html/slides/.cvsignore [deleted file]
helm/mowgli/home/html/software/.cvsignore [deleted file]
helm/mowgli/home/html/work-packages/.cvsignore [deleted file]
helm/mowgli/home/images/NextArrow.gif [deleted file]
helm/mowgli/home/images/PreviousArrow.gif [deleted file]
helm/mowgli/home/images/arch.png [deleted file]
helm/mowgli/home/images/gantt_new.png [deleted file]
helm/mowgli/home/images/istbutton.gif [deleted file]
helm/mowgli/home/images/istbutton_small.gif [deleted file]
helm/mowgli/home/images/istdrop.gif [deleted file]
helm/mowgli/home/images/logo.png [deleted file]
helm/mowgli/home/images/mowgli_combo.gif [deleted file]
helm/mowgli/home/images/mowgli_combo.png [deleted file]
helm/mowgli/home/images/mowgli_parquet.png [deleted file]
helm/mowgli/home/images/mowgli_parquet_light.png [deleted file]
helm/mowgli/home/images/pert_new.png [deleted file]
helm/mowgli/home/misc/contract/MOWGLIfinal-for-ceto.zip [deleted file]
helm/mowgli/home/misc/contract/RTD-annex2-rtd-final.pdf [deleted file]
helm/mowgli/home/misc/contract/RTD-annex3-ist-fet.pdf [deleted file]
helm/mowgli/home/misc/contract/RTD-audit-cert-annex4.pdf [deleted file]
helm/mowgli/home/misc/contract/mowgli-an1-final.pdf [deleted file]
helm/mowgli/home/misc/contract/mowgli-ctr-final.pdf [deleted file]
helm/mowgli/home/misc/kick-off/AIP_Intro.ppt [deleted file]
helm/mowgli/home/misc/kick-off/KM2002GO.ps [deleted file]
helm/mowgli/home/misc/kick-off/KM2002GO_mathweb.ps [deleted file]
helm/mowgli/home/misc/kick-off/MoWGLI-LogiCal.ps [deleted file]
helm/mowgli/home/misc/kick-off/lemme2.ppt [deleted file]
helm/mowgli/home/misc/proposal/MOWGLI.xls [deleted file]
helm/mowgli/home/misc/proposal/mowgli.pdf [deleted file]
helm/mowgli/home/misc/proposal/mowgli.ps [deleted file]
helm/mowgli/home/misc/proposal/proposal.tgz [deleted file]
helm/mowgli/home/style/mowgli.css [deleted file]
helm/mowgli/home/templates/index.html [deleted file]
helm/mowgli/home/templates/ml-help-example.txt [deleted file]
helm/mowgli/home/xml/Makefile [deleted file]
helm/mowgli/home/xml/consortium.xml [deleted file]
helm/mowgli/home/xml/deliverables/deliverable.dtd [deleted file]
helm/mowgli/home/xml/deliverables/distribution/d5a.xml [deleted file]
helm/mowgli/home/xml/deliverables/distribution/d5b.xml [deleted file]
helm/mowgli/home/xml/deliverables/information-dissemination-and-exploitation/d7a.xml [deleted file]
helm/mowgli/home/xml/deliverables/information-dissemination-and-exploitation/d7b.xml [deleted file]
helm/mowgli/home/xml/deliverables/interfaces/d4a.xml [deleted file]
helm/mowgli/home/xml/deliverables/interfaces/d4b.xml [deleted file]
helm/mowgli/home/xml/deliverables/interfaces/d4c.xml [deleted file]
helm/mowgli/home/xml/deliverables/interfaces/d4d.xml [deleted file]
helm/mowgli/home/xml/deliverables/interfaces/d4e.xml [deleted file]
helm/mowgli/home/xml/deliverables/metadata/d3a.xml [deleted file]
helm/mowgli/home/xml/deliverables/metadata/d3b.xml [deleted file]
helm/mowgli/home/xml/deliverables/project-management/d0a.xml [deleted file]
helm/mowgli/home/xml/deliverables/project-management/d0b.xml [deleted file]
helm/mowgli/home/xml/deliverables/project-management/d0c.xml [deleted file]
helm/mowgli/home/xml/deliverables/project-management/d0d.xml [deleted file]
helm/mowgli/home/xml/deliverables/requirement-analysis/d1a.xml [deleted file]
helm/mowgli/home/xml/deliverables/requirement-analysis/d1b.xml [deleted file]
helm/mowgli/home/xml/deliverables/requirement-analysis/d1c.xml [deleted file]
helm/mowgli/home/xml/deliverables/testing-and-validation/d6a.xml [deleted file]
helm/mowgli/home/xml/deliverables/testing-and-validation/d6b.xml [deleted file]
helm/mowgli/home/xml/deliverables/testing-and-validation/d6c.xml [deleted file]
helm/mowgli/home/xml/deliverables/testing-and-validation/d6d.xml [deleted file]
helm/mowgli/home/xml/deliverables/transformation/d2a.xml [deleted file]
helm/mowgli/home/xml/deliverables/transformation/d2b.xml [deleted file]
helm/mowgli/home/xml/deliverables/transformation/d2c.xml [deleted file]
helm/mowgli/home/xml/deliverables/transformation/d2d.xml [deleted file]
helm/mowgli/home/xml/deliverables/transformation/d2e.xml [deleted file]
helm/mowgli/home/xml/deliverables/transformation/d2f.xml [deleted file]
helm/mowgli/home/xml/deliverables/transformation/d2g.xml [deleted file]
helm/mowgli/home/xml/home.xml [deleted file]
helm/mowgli/home/xml/members-index.xml [deleted file]
helm/mowgli/home/xml/members/kick-off.xml [deleted file]
helm/mowgli/home/xml/menu.xml [deleted file]
helm/mowgli/home/xml/mowgli-events.xml [deleted file]
helm/mowgli/home/xml/mowgli-events/kick-off.xml [deleted file]
helm/mowgli/home/xml/mowgli-xhtml1-transitional.dtd [deleted file]
helm/mowgli/home/xml/news.xml [deleted file]
helm/mowgli/home/xml/other-events.xml [deleted file]
helm/mowgli/home/xml/people/aei/kelley.xml [deleted file]
helm/mowgli/home/xml/people/aei/pollney.xml [deleted file]
helm/mowgli/home/xml/people/aei/schutz.xml [deleted file]
helm/mowgli/home/xml/people/aei/velden.xml [deleted file]
helm/mowgli/home/xml/people/aei/wegner.xml [deleted file]
helm/mowgli/home/xml/people/aei/weyher.xml [deleted file]
helm/mowgli/home/xml/people/bologna/asperti.xml [deleted file]
helm/mowgli/home/xml/people/bologna/guidi.xml [deleted file]
helm/mowgli/home/xml/people/bologna/padovani.xml [deleted file]
helm/mowgli/home/xml/people/bologna/sacerdoti.xml [deleted file]
helm/mowgli/home/xml/people/bologna/schena.xml [deleted file]
helm/mowgli/home/xml/people/dfki/goguadze.xml [deleted file]
helm/mowgli/home/xml/people/dfki/kohlhase.xml [deleted file]
helm/mowgli/home/xml/people/dfki/libbrecht.xml [deleted file]
helm/mowgli/home/xml/people/dfki/melis.xml [deleted file]
helm/mowgli/home/xml/people/dfki/moschner.xml [deleted file]
helm/mowgli/home/xml/people/dfki/siekmann.xml [deleted file]
helm/mowgli/home/xml/people/index.xml [deleted file]
helm/mowgli/home/xml/people/inria/amerkad.xml [deleted file]
helm/mowgli/home/xml/people/inria/bertot.xml [deleted file]
helm/mowgli/home/xml/people/inria/chicli.xml [deleted file]
helm/mowgli/home/xml/people/inria/delahaye.xml [deleted file]
helm/mowgli/home/xml/people/inria/herbelin.xml [deleted file]
helm/mowgli/home/xml/people/inria/naciri.xml [deleted file]
helm/mowgli/home/xml/people/inria/pottier.xml [deleted file]
helm/mowgli/home/xml/people/inria/rideau.xml [deleted file]
helm/mowgli/home/xml/people/inria/thery.xml [deleted file]
helm/mowgli/home/xml/people/inria/werner.xml [deleted file]
helm/mowgli/home/xml/people/nijmegen/barendregt.xml [deleted file]
helm/mowgli/home/xml/people/nijmegen/barreiro.xml [deleted file]
helm/mowgli/home/xml/people/nijmegen/cohen.xml [deleted file]
helm/mowgli/home/xml/people/nijmegen/cruz-filipe.xml [deleted file]
helm/mowgli/home/xml/people/nijmegen/geuvers.xml [deleted file]
helm/mowgli/home/xml/people/nijmegen/niqui.xml [deleted file]
helm/mowgli/home/xml/people/nijmegen/stein.xml [deleted file]
helm/mowgli/home/xml/people/nijmegen/synek.xml [deleted file]
helm/mowgli/home/xml/people/nijmegen/wiedijk.xml [deleted file]
helm/mowgli/home/xml/people/person.dtd [deleted file]
helm/mowgli/home/xml/people/trusted-logic/bolignano.xml [deleted file]
helm/mowgli/home/xml/people/trusted-logic/gimenez.xml [deleted file]
helm/mowgli/home/xml/people/trusted-logic/loiseaux.xml [deleted file]
helm/mowgli/home/xml/project.xml [deleted file]
helm/mowgli/home/xml/proposal/EC-contribution.xml [deleted file]
helm/mowgli/home/xml/proposal/contribution.xml [deleted file]
helm/mowgli/home/xml/proposal/econ-scient-tech-prospects.xml [deleted file]
helm/mowgli/home/xml/proposal/innovation.xml [deleted file]
helm/mowgli/home/xml/proposal/project-components.xml [deleted file]
helm/mowgli/home/xml/proposal/project-management.xml [deleted file]
helm/mowgli/home/xml/proposal/project-objectives.xml [deleted file]
helm/mowgli/home/xml/proposal/project-planning.xml [deleted file]
helm/mowgli/home/xml/proposal/project-summary.xml [deleted file]
helm/mowgli/home/xml/publications/index.xml [deleted file]
helm/mowgli/home/xml/publications/mowgli/crimea2002_aw.xml [deleted file]
helm/mowgli/home/xml/publications/mowgli/crimea2002_aw_on_line.xml [deleted file]
helm/mowgli/home/xml/publications/others/category_al.xml [deleted file]
helm/mowgli/home/xml/publications/others/cc.xml [deleted file]
helm/mowgli/home/xml/publications/others/crimea2001_apss.xml [deleted file]
helm/mowgli/home/xml/publications/others/cup_hp91.xml [deleted file]
helm/mowgli/home/xml/publications/others/cup_hp93.xml [deleted file]
helm/mowgli/home/xml/publications/others/cup_s.xml [deleted file]
helm/mowgli/home/xml/publications/others/cup_s2.xml [deleted file]
helm/mowgli/home/xml/publications/others/extreme2001_apss.xml [deleted file]
helm/mowgli/home/xml/publications/others/har_bg.xml [deleted file]
helm/mowgli/home/xml/publications/others/jep_ws.xml [deleted file]
helm/mowgli/home/xml/publications/others/jep_wwsw.xml [deleted file]
helm/mowgli/home/xml/publications/others/jlp2001_scg.xml [deleted file]
helm/mowgli/home/xml/publications/others/mathml2000_apss.xml [deleted file]
helm/mowgli/home/xml/publications/others/mscs_gb.xml [deleted file]
helm/mowgli/home/xml/publications/others/publication.dtd [deleted file]
helm/mowgli/home/xml/publications/others/tcs2001_og.xml [deleted file]
helm/mowgli/home/xml/publications/others/tphols2000_gwz.xml [deleted file]
helm/mowgli/home/xml/publications/others/tphols2001_apss.xml [deleted file]
helm/mowgli/home/xml/publications/others/w3c_bl98.xml [deleted file]
helm/mowgli/home/xml/sites/aei.xml [deleted file]
helm/mowgli/home/xml/sites/bologna.xml [deleted file]
helm/mowgli/home/xml/sites/dfki.xml [deleted file]
helm/mowgli/home/xml/sites/inria.xml [deleted file]
helm/mowgli/home/xml/sites/nijmegen.xml [deleted file]
helm/mowgli/home/xml/sites/site.dtd [deleted file]
helm/mowgli/home/xml/sites/trusted-logic.xml [deleted file]
helm/mowgli/home/xml/slides/mowgligroup.xml [deleted file]
helm/mowgli/home/xml/software/index.xml [deleted file]
helm/mowgli/home/xml/work-packages/distribution.xml [deleted file]
helm/mowgli/home/xml/work-packages/index.xml [deleted file]
helm/mowgli/home/xml/work-packages/information-dissemination-and-exploitation.xml [deleted file]
helm/mowgli/home/xml/work-packages/interfaces.xml [deleted file]
helm/mowgli/home/xml/work-packages/metadata.xml [deleted file]
helm/mowgli/home/xml/work-packages/project-management.xml [deleted file]
helm/mowgli/home/xml/work-packages/requirement-analysis.xml [deleted file]
helm/mowgli/home/xml/work-packages/testing-and-validation.xml [deleted file]
helm/mowgli/home/xml/work-packages/transformation.xml [deleted file]
helm/mowgli/home/xml/work-packages/work-package.dtd [deleted file]
helm/mowgli/home/xsl/approaching-deadlines.xsl [deleted file]
helm/mowgli/home/xsl/common.xsl [deleted file]
helm/mowgli/home/xsl/consortium.xsl [deleted file]
helm/mowgli/home/xsl/deadlines.xsl [deleted file]
helm/mowgli/home/xsl/deliverable.xsl [deleted file]
helm/mowgli/home/xsl/events.xsl [deleted file]
helm/mowgli/home/xsl/latest-news.xsl [deleted file]
helm/mowgli/home/xsl/management.xsl [deleted file]
helm/mowgli/home/xsl/minutes.xsl [deleted file]
helm/mowgli/home/xsl/news.xsl [deleted file]
helm/mowgli/home/xsl/people-list.xsl [deleted file]
helm/mowgli/home/xsl/person.xsl [deleted file]
helm/mowgli/home/xsl/project.xsl [deleted file]
helm/mowgli/home/xsl/publication.xsl [deleted file]
helm/mowgli/home/xsl/publications-index.xsl [deleted file]
helm/mowgli/home/xsl/site.xsl [deleted file]
helm/mowgli/home/xsl/work-package.xsl [deleted file]
helm/mowgli/home/xsl/work-packages_index.xsl [deleted file]
helm/mowgli/home/xsl/xhtml-content.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_abstract.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_annotatedpres.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_content_to_html2.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_expand.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_html_arith.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_html_basic.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_link.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_links_library.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_mmlextension.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_proof.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_rules.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_term.xsl [deleted file]
helm/nuprl_stylesheets/nuprl_tree.xsl [deleted file]
helm/nuprl_stylesheets/xslt_index.txt [deleted file]
helm/ocaml/.cvsignore [deleted file]
helm/ocaml/META.helm-cic.src [deleted file]
helm/ocaml/META.helm-cic_annotations.src [deleted file]
helm/ocaml/META.helm-cic_annotations_cache.src [deleted file]
helm/ocaml/META.helm-cic_cache.src [deleted file]
helm/ocaml/META.helm-cic_proof_checking.src [deleted file]
helm/ocaml/META.helm-cic_textual_parser.src [deleted file]
helm/ocaml/META.helm-cic_unification.src [deleted file]
helm/ocaml/META.helm-getter.src [deleted file]
helm/ocaml/META.helm-mathql.src [deleted file]
helm/ocaml/META.helm-mathql_generator.src [deleted file]
helm/ocaml/META.helm-mathql_interpreter.src [deleted file]
helm/ocaml/META.helm-pxp.src [deleted file]
helm/ocaml/META.helm-tactics.src [deleted file]
helm/ocaml/META.helm-tex_cic_textual_parser.src [deleted file]
helm/ocaml/META.helm-urimanager.src [deleted file]
helm/ocaml/META.helm-xml.src [deleted file]
helm/ocaml/Makefile.common.in [deleted file]
helm/ocaml/Makefile.in [deleted file]
helm/ocaml/cic/.cvsignore [deleted file]
helm/ocaml/cic/.depend [deleted file]
helm/ocaml/cic/Makefile [deleted file]
helm/ocaml/cic/cic.ml [deleted file]
helm/ocaml/cic/cicParser.ml [deleted file]
helm/ocaml/cic/cicParser.mli [deleted file]
helm/ocaml/cic/cicParser2.ml [deleted file]
helm/ocaml/cic/cicParser2.mli [deleted file]
helm/ocaml/cic/cicParser3.ml [deleted file]
helm/ocaml/cic/cicParser3.mli [deleted file]
helm/ocaml/cic/deannotate.ml [deleted file]
helm/ocaml/cic/deannotate.mli [deleted file]
helm/ocaml/cic_annotations/.cvsignore [deleted file]
helm/ocaml/cic_annotations/.depend [deleted file]
helm/ocaml/cic_annotations/Makefile [deleted file]
helm/ocaml/cic_annotations/cicAnnotation2Xml.ml [deleted file]
helm/ocaml/cic_annotations/cicAnnotation2Xml.mli [deleted file]
helm/ocaml/cic_annotations/cicAnnotationParser.ml [deleted file]
helm/ocaml/cic_annotations/cicAnnotationParser.mli [deleted file]
helm/ocaml/cic_annotations/cicAnnotationParser2.ml [deleted file]
helm/ocaml/cic_annotations/cicAnnotationParser2.mli [deleted file]
helm/ocaml/cic_annotations/cicXPath.ml [deleted file]
helm/ocaml/cic_annotations/cicXPath.mli [deleted file]
helm/ocaml/cic_annotations_cache/.cvsignore [deleted file]
helm/ocaml/cic_annotations_cache/.depend [deleted file]
helm/ocaml/cic_annotations_cache/Makefile [deleted file]
helm/ocaml/cic_annotations_cache/cicCache.ml [deleted file]
helm/ocaml/cic_annotations_cache/cicCache.mli [deleted file]
helm/ocaml/cic_cache/.cvsignore [deleted file]
helm/ocaml/cic_cache/.depend [deleted file]
helm/ocaml/cic_cache/Makefile [deleted file]
helm/ocaml/cic_cache/cicCache.ml [deleted file]
helm/ocaml/cic_cache/cicCache.mli [deleted file]
helm/ocaml/cic_proof_checking/.cvsignore [deleted file]
helm/ocaml/cic_proof_checking/.depend [deleted file]
helm/ocaml/cic_proof_checking/Makefile [deleted file]
helm/ocaml/cic_proof_checking/cicEnvironment.ml [deleted file]
helm/ocaml/cic_proof_checking/cicEnvironment.mli [deleted file]
helm/ocaml/cic_proof_checking/cicMiniReduction.ml [deleted file]
helm/ocaml/cic_proof_checking/cicMiniReduction.mli [deleted file]
helm/ocaml/cic_proof_checking/cicPp.ml [deleted file]
helm/ocaml/cic_proof_checking/cicPp.mli [deleted file]
helm/ocaml/cic_proof_checking/cicReduction.mli [deleted file]
helm/ocaml/cic_proof_checking/cicReductionMachine.ml [deleted file]
helm/ocaml/cic_proof_checking/cicReductionMachine.mli [deleted file]
helm/ocaml/cic_proof_checking/cicReductionNaif.ml [deleted file]
helm/ocaml/cic_proof_checking/cicReductionNaif.mli [deleted file]
helm/ocaml/cic_proof_checking/cicSubstitution.ml [deleted file]
helm/ocaml/cic_proof_checking/cicSubstitution.mli [deleted file]
helm/ocaml/cic_proof_checking/cicTypeChecker.ml [deleted file]
helm/ocaml/cic_proof_checking/cicTypeChecker.mli [deleted file]
helm/ocaml/cic_proof_checking/logger.ml [deleted file]
helm/ocaml/cic_proof_checking/logger.mli [deleted file]
helm/ocaml/cic_textual_parser/.cvsignore [deleted file]
helm/ocaml/cic_textual_parser/.depend [deleted file]
helm/ocaml/cic_textual_parser/Makefile [deleted file]
helm/ocaml/cic_textual_parser/cicTextualLexer.mll [deleted file]
helm/ocaml/cic_textual_parser/cicTextualParser.mly [deleted file]
helm/ocaml/cic_textual_parser/cicTextualParser0.ml [deleted file]
helm/ocaml/cic_textual_parser/cicTextualParserContext.ml [deleted file]
helm/ocaml/cic_textual_parser/cicTextualParserContext.mli [deleted file]
helm/ocaml/cic_unification/.cvsignore [deleted file]
helm/ocaml/cic_unification/.depend [deleted file]
helm/ocaml/cic_unification/Makefile [deleted file]
helm/ocaml/cic_unification/cicRefine.ml [deleted file]
helm/ocaml/cic_unification/cicRefine.mli [deleted file]
helm/ocaml/cic_unification/cicUnification.ml [deleted file]
helm/ocaml/cic_unification/cicUnification.mli [deleted file]
helm/ocaml/configure.in [deleted file]
helm/ocaml/getter/.cvsignore [deleted file]
helm/ocaml/getter/.depend [deleted file]
helm/ocaml/getter/Makefile [deleted file]
helm/ocaml/getter/clientHTTP.ml [deleted file]
helm/ocaml/getter/clientHTTP.mli [deleted file]
helm/ocaml/getter/configuration.ml [deleted file]
helm/ocaml/getter/configuration.mli [deleted file]
helm/ocaml/getter/getter.ml [deleted file]
helm/ocaml/getter/getter.mli [deleted file]
helm/ocaml/mathql/.cvsignore [deleted file]
helm/ocaml/mathql/.depend [deleted file]
helm/ocaml/mathql/Makefile [deleted file]
helm/ocaml/mathql/mQueryTLexer.mll [deleted file]
helm/ocaml/mathql/mQueryTParser.mly [deleted file]
helm/ocaml/mathql/mQueryUtil.ml [deleted file]
helm/ocaml/mathql/mQueryUtil.mli [deleted file]
helm/ocaml/mathql/mathQL.ml [deleted file]
helm/ocaml/mathql_generator/.cvsignore [deleted file]
helm/ocaml/mathql_generator/.depend [deleted file]
helm/ocaml/mathql_generator/Makefile [deleted file]
helm/ocaml/mathql_generator/mQGTypes.ml [deleted file]
helm/ocaml/mathql_generator/mQGUtil.ml [deleted file]
helm/ocaml/mathql_generator/mQGUtil.mli [deleted file]
helm/ocaml/mathql_generator/mQueryGenerator.ml [deleted file]
helm/ocaml/mathql_generator/mQueryGenerator.mli [deleted file]
helm/ocaml/mathql_generator/mQueryLevels.ml [deleted file]
helm/ocaml/mathql_generator/mQueryLevels.mli [deleted file]
helm/ocaml/mathql_generator/mQueryLevels2.ml [deleted file]
helm/ocaml/mathql_generator/mQueryLevels2.mli [deleted file]
helm/ocaml/mathql_interpreter/.cvsignore [deleted file]
helm/ocaml/mathql_interpreter/.depend [deleted file]
helm/ocaml/mathql_interpreter/Makefile [deleted file]
helm/ocaml/mathql_interpreter/mQIConn.ml [deleted file]
helm/ocaml/mathql_interpreter/mQIConn.mli [deleted file]
helm/ocaml/mathql_interpreter/mQIPostgres.ml [deleted file]
helm/ocaml/mathql_interpreter/mQIPostgres.mli [deleted file]
helm/ocaml/mathql_interpreter/mQIProperty.ml [deleted file]
helm/ocaml/mathql_interpreter/mQIProperty.mli [deleted file]
helm/ocaml/mathql_interpreter/mQIUtil.ml [deleted file]
helm/ocaml/mathql_interpreter/mQIUtil.mli [deleted file]
helm/ocaml/mathql_interpreter/mQueryInterpreter.ml [deleted file]
helm/ocaml/mathql_interpreter/mQueryInterpreter.mli [deleted file]
helm/ocaml/mathql_interpreter/mQueryMisc.ml [deleted file]
helm/ocaml/mathql_interpreter/mQueryMisc.mli [deleted file]
helm/ocaml/pxp/.cvsignore [deleted file]
helm/ocaml/pxp/.depend [deleted file]
helm/ocaml/pxp/Makefile [deleted file]
helm/ocaml/pxp/pxpUrlResolver.ml [deleted file]
helm/ocaml/pxp/pxpUrlResolver.mli [deleted file]
helm/ocaml/tactics/.cvsignore [deleted file]
helm/ocaml/tactics/.depend [deleted file]
helm/ocaml/tactics/Makefile [deleted file]
helm/ocaml/tactics/discriminationTactics.ml [deleted file]
helm/ocaml/tactics/discriminationTactics.mli [deleted file]
helm/ocaml/tactics/eliminationTactics.ml [deleted file]
helm/ocaml/tactics/eliminationTactics.mli [deleted file]
helm/ocaml/tactics/equalityTactics.ml [deleted file]
helm/ocaml/tactics/equalityTactics.mli [deleted file]
helm/ocaml/tactics/fourier.ml [deleted file]
helm/ocaml/tactics/fourier.mli [deleted file]
helm/ocaml/tactics/fourierR.ml [deleted file]
helm/ocaml/tactics/fourierR.mli [deleted file]
helm/ocaml/tactics/introductionTactics.ml [deleted file]
helm/ocaml/tactics/introductionTactics.mli [deleted file]
helm/ocaml/tactics/negationTactics.ml [deleted file]
helm/ocaml/tactics/negationTactics.mli [deleted file]
helm/ocaml/tactics/primitiveTactics.ml [deleted file]
helm/ocaml/tactics/primitiveTactics.mli [deleted file]
helm/ocaml/tactics/proofEngineHelpers.ml [deleted file]
helm/ocaml/tactics/proofEngineHelpers.mli [deleted file]
helm/ocaml/tactics/proofEngineReduction.ml [deleted file]
helm/ocaml/tactics/proofEngineReduction.mli [deleted file]
helm/ocaml/tactics/proofEngineStructuralRules.ml [deleted file]
helm/ocaml/tactics/proofEngineStructuralRules.mli [deleted file]
helm/ocaml/tactics/proofEngineTypes.ml [deleted file]
helm/ocaml/tactics/reductionTactics.ml [deleted file]
helm/ocaml/tactics/reductionTactics.mli [deleted file]
helm/ocaml/tactics/ring.ml [deleted file]
helm/ocaml/tactics/ring.mli [deleted file]
helm/ocaml/tactics/tacticChaser.ml [deleted file]
helm/ocaml/tactics/tacticChaser.mli [deleted file]
helm/ocaml/tactics/tacticals.ml [deleted file]
helm/ocaml/tactics/tacticals.mli [deleted file]
helm/ocaml/tactics/variousTactics.ml [deleted file]
helm/ocaml/tactics/variousTactics.mli [deleted file]
helm/ocaml/tex_cic_textual_parser/.cvsignore [deleted file]
helm/ocaml/tex_cic_textual_parser/.depend [deleted file]
helm/ocaml/tex_cic_textual_parser/Makefile [deleted file]
helm/ocaml/tex_cic_textual_parser/texCicTextualLexer.mll [deleted file]
helm/ocaml/tex_cic_textual_parser/texCicTextualParser.mly [deleted file]
helm/ocaml/tex_cic_textual_parser/texCicTextualParser0.ml [deleted file]
helm/ocaml/tex_cic_textual_parser/texCicTextualParserContext.ml [deleted file]
helm/ocaml/tex_cic_textual_parser/texCicTextualParserContext.mli [deleted file]
helm/ocaml/urimanager/.cvsignore [deleted file]
helm/ocaml/urimanager/.depend [deleted file]
helm/ocaml/urimanager/Makefile [deleted file]
helm/ocaml/urimanager/uriManager.ml [deleted file]
helm/ocaml/urimanager/uriManager.mli [deleted file]
helm/ocaml/xml/.cvsignore [deleted file]
helm/ocaml/xml/.depend [deleted file]
helm/ocaml/xml/Makefile [deleted file]
helm/ocaml/xml/xml.ml [deleted file]
helm/ocaml/xml/xml.mli [deleted file]
helm/on-line/html/cic/control.html [deleted file]
helm/on-line/html/cic/index.html [deleted file]
helm/on-line/html/control.html [deleted file]
helm/on-line/html/index.html [deleted file]
helm/on-line/html/library/control.html [deleted file]
helm/on-line/html/library/header.html [deleted file]
helm/on-line/html/library/index.html [deleted file]
helm/on-line/html/theory/control.html [deleted file]
helm/on-line/html/theory/index.html [deleted file]
helm/on-line/html/welcome.html [deleted file]
helm/on-line/icons/back.gif [deleted file]
helm/on-line/icons/folder.gif [deleted file]
helm/on-line/icons/generic.red.gif [deleted file]
helm/on-line/icons/text.gif [deleted file]
helm/on-line/javascript/.cvsignore [deleted file]
helm/on-line/javascript/Makefile [deleted file]
helm/on-line/javascript/control.js [deleted file]
helm/on-line/javascript/defaults.js [deleted file]
helm/on-line/javascript/graphLinks.js [deleted file]
helm/on-line/javascript/helmjsmenu.js [deleted file]
helm/on-line/javascript/prelude.js [deleted file]
helm/on-line/javascript/utils.js [deleted file]
helm/on-line/xslt/getParam.xsl [deleted file]
helm/on-line/xslt/ls2html.xsl [deleted file]
helm/on-line/xslt/makeGraphLinks.xsl [deleted file]
helm/on-line/xslt/metadataControl.xsl [deleted file]
helm/on-line/xslt/metadataLib.xsl [deleted file]
helm/on-line/xslt/resolve_topurl.xsl [deleted file]
helm/on-line/xslt/utils.xsl [deleted file]
helm/on-line/xslt/xslt_index.txt [deleted file]
helm/pacchetti/Makefile [deleted file]
helm/proofChecker/.cvsignore [deleted file]
helm/proofChecker/.depend [deleted file]
helm/proofChecker/Makefile [deleted file]
helm/proofChecker/proofChecker.ml [deleted file]
helm/schemas/13-dcagent [deleted file]
helm/schemas/21-euler [deleted file]
helm/schemas/dces [deleted file]
helm/schemas/dcq [deleted file]
helm/schemas/dctype [deleted file]
helm/schemas/schema-h [deleted file]
helm/schemas/schema-hth [deleted file]
helm/scripts/Makefile [deleted file]
helm/scripts/init.d/etc_default_helm [deleted file]
helm/scripts/init.d/etc_default_helm_mowgli [deleted file]
helm/scripts/init.d/helm [deleted file]
helm/scripts/init.d/helm-bootmisc.sh [deleted file]
helm/scripts/init.d/helm-bootmisc_mowgli.sh [deleted file]
helm/scripts/init.d/helm-draw-graph [deleted file]
helm/scripts/init.d/helm-draw-graph_mowgli [deleted file]
helm/scripts/init.d/helm-http-getter [deleted file]
helm/scripts/init.d/helm-http-getter_mowgli [deleted file]
helm/scripts/init.d/helm-proof-checker [deleted file]
helm/scripts/init.d/helm-proof-checker_mowgli [deleted file]
helm/scripts/init.d/helm-search-engine_mowgli [deleted file]
helm/scripts/init.d/helm-tomcat [deleted file]
helm/scripts/init.d/helm-tomcat_mowgli [deleted file]
helm/scripts/init.d/helm-uri-set-queue [deleted file]
helm/scripts/init.d/helm-uri-set-queue_mowgli [deleted file]
helm/scripts/init.d/helm-uwobo_mowgli [deleted file]
helm/scripts/init.d/helm_mowgli [deleted file]
helm/scripts/init.d/loadPredefinedStylesheets.pl [deleted file]
helm/scripts/init.d/uwobo_forever.sh [deleted file]
helm/scripts/makeit [deleted file]
helm/scripts/start-tomcat [deleted file]
helm/scripts/start-tomcat-debug [deleted file]
helm/scripts/stop-tomcat-debug [deleted file]
helm/scripts/template.cshrc [deleted file]
helm/scripts/template.rc [deleted file]
helm/searchEngine/.cvsignore [deleted file]
helm/searchEngine/Makefile [deleted file]
helm/searchEngine/html/aliaslist.html [deleted file]
helm/searchEngine/html/almost_blank.html [deleted file]
helm/searchEngine/html/blank.html [deleted file]
helm/searchEngine/html/boole.html [deleted file]
helm/searchEngine/html/constraints_choice_template.html [deleted file]
helm/searchEngine/html/editor.html [deleted file]
helm/searchEngine/html/editorpdq.html [deleted file]
helm/searchEngine/html/expnamedsubst.html [deleted file]
helm/searchEngine/html/expr.html [deleted file]
helm/searchEngine/html/genid.html [deleted file]
helm/searchEngine/html/grammar.html [deleted file]
helm/searchEngine/html/grammarpdq.html [deleted file]
helm/searchEngine/html/index.html [deleted file]
helm/searchEngine/html/loc_obj.html [deleted file]
helm/searchEngine/html/manual/alias.jpg [deleted file]
helm/searchEngine/html/manual/ex1.jpg [deleted file]
helm/searchEngine/html/manual/frames.jpg [deleted file]
helm/searchEngine/html/manual/index.html [deleted file]
helm/searchEngine/html/mat_con.html [deleted file]
helm/searchEngine/html/paginacollink.html [deleted file]
helm/searchEngine/html/pdq.html [deleted file]
helm/searchEngine/html/query_choice.html [deleted file]
helm/searchEngine/html/set.html [deleted file]
helm/searchEngine/html/start.html [deleted file]
helm/searchEngine/html/summary.html [deleted file]
helm/searchEngine/html/templateambigpdq1.html [deleted file]
helm/searchEngine/html/templateambigpdq2.html [deleted file]
helm/searchEngine/html/templateambigpdq3.html [deleted file]
helm/searchEngine/html/val.html [deleted file]
helm/searchEngine/searchEngine.ml [deleted file]
helm/style/annotatedcont.xsl [deleted file]
helm/style/annotatedpres.xsl [deleted file]
helm/style/content.xsl [deleted file]
helm/style/content_to_html.xsl [deleted file]
helm/style/contentlib.xsl [deleted file]
helm/style/drop_coercions.xsl [deleted file]
helm/style/expandobj.xsl [deleted file]
helm/style/genmmlid.xsl [deleted file]
helm/style/getter.xsl [deleted file]
helm/style/headercontent.xsl [deleted file]
helm/style/html_init.xsl [deleted file]
helm/style/html_reals.xsl [deleted file]
helm/style/html_set.xsl [deleted file]
helm/style/inductive.xsl [deleted file]
helm/style/lambda.xsl [deleted file]
helm/style/link.xsl [deleted file]
helm/style/links_library.xsl [deleted file]
helm/style/mk_dep_graph.xsl [deleted file]
helm/style/mk_meta_and_dep_graph.xsl [deleted file]
helm/style/mk_meta_graph.xsl [deleted file]
helm/style/mk_meta_theory.xsl [deleted file]
helm/style/mmlctop.xsl [deleted file]
helm/style/mmlctop.xsl-0.14 [deleted file]
helm/style/mmlctop2_0.xsl [deleted file]
helm/style/mmlextension.xsl [deleted file]
helm/style/mmlnotation.xsl [deleted file]
helm/style/mmltheoryextension.xsl [deleted file]
helm/style/objcontent.xsl [deleted file]
helm/style/objtheorycontent.xsl [deleted file]
helm/style/params.xsl [deleted file]
helm/style/proofs.xsl [deleted file]
helm/style/ricerca.xsl [deleted file]
helm/style/ring.xsl [deleted file]
helm/style/rootcontent.xsl [deleted file]
helm/style/roottheory.xsl [deleted file]
helm/style/show_dc.xsl [deleted file]
helm/style/theory_content.xsl [deleted file]
helm/style/theory_pres.xsl [deleted file]
helm/style/xslt_index.txt [deleted file]
helm/uwobo-panel/.cvsignore [deleted file]
helm/uwobo-panel/Makefile [deleted file]
helm/uwobo-panel/control.html [deleted file]
helm/uwobo-panel/control.js [deleted file]
helm/uwobo-panel/index.html [deleted file]
helm/uwobo-panel/welcome.html [deleted file]
helm/uwobo/.cvsignore [deleted file]
helm/uwobo/.depend [deleted file]
helm/uwobo/Makefile [deleted file]
helm/uwobo/log/.cvsignore [deleted file]
helm/uwobo/uwobo.ml [deleted file]
helm/uwobo/uwobo_common.ml [deleted file]
helm/uwobo/uwobo_common.mli [deleted file]
helm/uwobo/uwobo_engine.ml [deleted file]
helm/uwobo/uwobo_engine.mli [deleted file]
helm/uwobo/uwobo_logger.ml [deleted file]
helm/uwobo/uwobo_logger.mli [deleted file]
helm/uwobo/uwobo_styles.ml [deleted file]
helm/uwobo/uwobo_styles.mli [deleted file]
helm/xmltheory/Coq_v2theoryxml/.cvsignore [deleted file]
helm/xmltheory/Coq_v2theoryxml/.depend [deleted file]
helm/xmltheory/Coq_v2theoryxml/Makefile [deleted file]
helm/xmltheory/Coq_v2theoryxml/coq_v2theoryxml.ml [deleted file]
helm/xmltheory/FakeCoq_vo2xml/README [deleted file]
helm/xmltheory/FakeCoq_vo2xml/coq_vo2xml [deleted file]
helm/xmltheory/XmlTheory/.cvsignore [deleted file]
helm/xmltheory/XmlTheory/.depend [deleted file]
helm/xmltheory/XmlTheory/COME_COMPILARE [deleted file]
helm/xmltheory/XmlTheory/Make [deleted file]
helm/xmltheory/XmlTheory/Makefile [deleted file]
helm/xmltheory/XmlTheory/README [deleted file]
helm/xmltheory/XmlTheory/XmlTheory.v [deleted file]
helm/xmltheory/XmlTheory/iXml.ml [deleted file]
helm/xmltheory/XmlTheory/iXml.mli [deleted file]
helm/xmltheory/XmlTheory/xmltheoryentries.ml [deleted file]
helm/xmltheory/maththeory.dtd [deleted file]
helm/xsltd/.cvsignore [deleted file]
helm/xsltd/AUTHORS [deleted file]
helm/xsltd/COPYING [deleted file]
helm/xsltd/ChangeLog [deleted file]
helm/xsltd/Makefile.in [deleted file]
helm/xsltd/Makefile.old [deleted file]
helm/xsltd/NEWS [deleted file]
helm/xsltd/README [deleted file]
helm/xsltd/config.cache.pkg [deleted file]
helm/xsltd/configure.in [deleted file]
helm/xsltd/helm_xsltd.spec.in [deleted file]
helm/xsltd/start-xaland.in [deleted file]
helm/xsltd/xaland-cpp/xaland.cpp [deleted file]
helm/xsltd/xaland-java-DOM/xaland_DOM.class [deleted file]
helm/xsltd/xaland-java-DOM/xaland_DOM.java [deleted file]
helm/xsltd/xaland-java/rompi.class [deleted file]
helm/xsltd/xaland-java/rompi.java [deleted file]
helm/xsltd/xaland-java/sped.class [deleted file]
helm/xsltd/xaland-java/sped.java [deleted file]
helm/xsltd/xaland-java/xaland.class [deleted file]
helm/xsltd/xaland-java/xaland.java [deleted file]
helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco [deleted file]
helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco_ma_dopo_i_reset [deleted file]
helm/xsltd/xaland-java2/xaland2.class [deleted file]
helm/xsltd/xaland-java2/xaland2.java [deleted file]
helm/xsltd/xaland-uwobo/.cvsignore [deleted file]
helm/xsltd/xaland-uwobo/xaland_uwobo.java [deleted file]
helm/xsltd/xaland.class [deleted file]
helm/xsltd/xaland2.class [deleted file]
helm/xsltd/xaland_DOM.class [deleted file]

diff --git a/CVSROOT/checkoutlist b/CVSROOT/checkoutlist
deleted file mode 100644 (file)
index b04b350..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# The "checkoutlist" file is used to support additional version controlled
-# administrative files in $CVSROOT/CVSROOT, such as template files.
-#
-# The first entry on a line is a filename which will be checked out from
-# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
-# The remainder of the line is an error message to use if the file cannot
-# be checked out.
-#
-# File format:
-#
-#      [<whitespace>]<filename><whitespace><error message><end-of-line>
-#
-# comment lines begin with '#'
diff --git a/CVSROOT/commitinfo b/CVSROOT/commitinfo
deleted file mode 100644 (file)
index b19e7b7..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# The "commitinfo" file is used to control pre-commit checks.
-# The filter on the right is invoked with the repository and a list 
-# of files to check.  A non-zero exit of the filter program will 
-# cause the commit to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT.  For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
diff --git a/CVSROOT/config b/CVSROOT/config
deleted file mode 100644 (file)
index 8069cad..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# Set this to "no" if pserver shouldn't check system users/passwords
-#SystemAuth=no
-
-# Set `PreservePermissions' to `yes' to save file status information
-# in the repository.
-#PreservePermissions=no
-
-# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top
-# level of the new working directory when using the `cvs checkout'
-# command.
-#TopLevelAdmin=no
diff --git a/CVSROOT/cvswrappers b/CVSROOT/cvswrappers
deleted file mode 100644 (file)
index 0accaf1..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# This file affects handling of files based on their names.
-#
-# The -t/-f options allow one to treat directories of files
-# as a single file, or to transform a file in other ways on
-# its way in and out of CVS.
-#
-# The -m option specifies whether CVS attempts to merge files.
-#
-# The -k option specifies keyword expansion (e.g. -kb for binary).
-#
-# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
-#
-#  wildcard    [option value][option value]...
-#
-#  where option is one of
-#  -f          from cvs filter         value: path to filter
-#  -t          to cvs filter           value: path to filter
-#  -m          update methodology      value: MERGE or COPY
-#  -k          expansion mode          value: b, o, kkv, &c
-#
-#  and value is a single-quote delimited value.
-# For example:
-#*.gif -k 'b'
diff --git a/CVSROOT/editinfo b/CVSROOT/editinfo
deleted file mode 100644 (file)
index d78886c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# The "editinfo" file is used to allow verification of logging
-# information.  It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure.  Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-#   Making sure that the entered bug-id number is correct.
-#   Validating that the code that was reviewed is indeed the code being
-#       checked in (using the bug-id number or a seperate review
-#       number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# One thing that should be noted is the the ALL keyword is not
-# supported.  There can be only one entry that matches a given
-# repository.
diff --git a/CVSROOT/loginfo b/CVSROOT/loginfo
deleted file mode 100644 (file)
index 5a59f0a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# The "loginfo" file controls where "cvs commit" log information
-# is sent.  The first entry on a line is a regular expression which must match
-# the directory that the change is being made to, relative to the
-# $CVSROOT.  If a match is found, then the remainder of the line is a filter
-# program that should expect log information on its standard input.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name ALL appears as a regular expression it is always used
-# in addition to the first matching regex or DEFAULT.
-#
-# You may specify a format string as part of the
-# filter.  The string is composed of a `%' followed
-# by a single format character, or followed by a set of format
-# characters surrounded by `{' and `}' as separators.  The format
-# characters are:
-#
-#   s = file name
-#   V = old version number (pre-checkin)
-#   v = new version number (post-checkin)
-#
-# For example:
-#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog
-# or
-#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog
diff --git a/CVSROOT/modules b/CVSROOT/modules
deleted file mode 100644 (file)
index cb9e9ef..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Three different line formats are valid:
-#      key     -a    aliases...
-#      key [options] directory
-#      key [options] directory files...
-#
-# Where "options" are composed of:
-#      -i prog         Run "prog" on "cvs commit" from top-level of module.
-#      -o prog         Run "prog" on "cvs checkout" of module.
-#      -e prog         Run "prog" on "cvs export" of module.
-#      -t prog         Run "prog" on "cvs rtag" of module.
-#      -u prog         Run "prog" on "cvs update" of module.
-#      -d dir          Place module in directory "dir" instead of module name.
-#      -l              Top-level directory only -- do not recurse.
-#
-# NOTE:  If you change any of the "Run" options above, you'll have to
-# release and re-checkout any working directories of these modules.
-#
-# And "directory" is a path to a directory relative to $CVSROOT.
-#
-# The "-a" option specifies an alias.  An alias is interpreted as if
-# everything on the right of the "-a" had been typed on the command line.
-#
-# You can encode a module within a module by using the special '&'
-# character to interpose another module into the current module.  This
-# can be useful for creating a module that consists of many directories
-# spread out over the entire source repository.
diff --git a/CVSROOT/notify b/CVSROOT/notify
deleted file mode 100644 (file)
index 34f0bc2..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# The "notify" file controls where notifications from watches set by
-# "cvs watch add" or "cvs edit" are sent.  The first entry on a line is
-# a regular expression which is tested against the directory that the
-# change is being made to, relative to the $CVSROOT.  If it matches,
-# then the remainder of the line is a filter program that should contain
-# one occurrence of %s for the user to notify, and information on its
-# standard input.
-#
-# "ALL" or "DEFAULT" can be used in place of the regular expression.
-#
-# For example:
-#ALL mail %s -s "CVS notification"
diff --git a/CVSROOT/rcsinfo b/CVSROOT/rcsinfo
deleted file mode 100644 (file)
index 49e59f4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# The "rcsinfo" file is used to control templates with which the editor
-# is invoked on commit and import.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being made to, relative to the
-# $CVSROOT.  For the first match that is found, then the remainder of the
-# line is the name of the file that contains the template.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
diff --git a/CVSROOT/taginfo b/CVSROOT/taginfo
deleted file mode 100644 (file)
index 274a46d..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# The "taginfo" file is used to control pre-tag checks.
-# The filter on the right is invoked with the following arguments:
-#
-# $1 -- tagname
-# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
-# $3 -- repository
-# $4->  file revision [file revision ...]
-#
-# A non-zero exit of the filter program will cause the tag to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT.  For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
diff --git a/CVSROOT/verifymsg b/CVSROOT/verifymsg
deleted file mode 100644 (file)
index 86f747c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# The "verifymsg" file is used to allow verification of logging
-# information.  It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure.  Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-#   Making sure that the entered bug-id number is correct.
-#   Validating that the code that was reviewed is indeed the code being
-#       checked in (using the bug-id number or a seperate review
-#       number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# One thing that should be noted is the the ALL keyword is not
-# supported.  There can be only one entry that matches a given
-# repository.
diff --git a/helm/DEVEL/.cvsignore b/helm/DEVEL/.cvsignore
deleted file mode 100644 (file)
index c1fcbc4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-*.cmo
-*.cmx
-*.cmi
-
-*.o
-*.a
-
diff --git a/helm/DEVEL/gdome_xslt/.cvsignore b/helm/DEVEL/gdome_xslt/.cvsignore
deleted file mode 100644 (file)
index 4d69800..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-gdome2-xslt-cpp-smart.pc
-gdome2-xslt.pc
-autom4te.cache
-Makefile
-Makefile.in
-aclocal.m4
-config.h
-config.h.in
-config.log
-config.status
-configure
-libtool
-stamp-h
-stamp-h.in
diff --git a/helm/DEVEL/gdome_xslt/AUTHORS b/helm/DEVEL/gdome_xslt/AUTHORS
deleted file mode 100644 (file)
index 834817f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
-Stefano Zacchiroli <zacchiro@cs.unibo.it>
-Luca Padovani <lpadovan@cs.unibo.it>
diff --git a/helm/DEVEL/gdome_xslt/BUGS b/helm/DEVEL/gdome_xslt/BUGS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/gdome_xslt/C++/.cvsignore b/helm/DEVEL/gdome_xslt/C++/.cvsignore
deleted file mode 100644 (file)
index 282522d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/helm/DEVEL/gdome_xslt/C++/Makefile.am b/helm/DEVEL/gdome_xslt/C++/Makefile.am
deleted file mode 100644 (file)
index 30e2ce8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = gdome_xslt test
diff --git a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/.cvsignore b/helm/DEVEL/gdome_xslt/C++/gdome_xslt/.cvsignore
deleted file mode 100644 (file)
index 051d1bd..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Makefile
-Makefile.in
-.deps
diff --git a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLT.hh b/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLT.hh
deleted file mode 100644 (file)
index 97b8cc6..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#ifndef __GdomeSmartDOMXSLT_hh__
-#define __GdomeSmartDOMXSLT_hh__
-
-#include "GdomeSmartDOMXSLTStylesheet.hh"
-
-#endif // __GdomeSmartDOMXSLT_hh__
diff --git a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLTStylesheet.cc b/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLTStylesheet.cc
deleted file mode 100644 (file)
index 330f872..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-// This file is part of a XSLT engine working on Gdome documents. In fact,
-// it just maps Gdome documents to libxml documents back and forth, and
-// applies the transformation on libxml documents using libxlt.
-// 
-// Copyright (C) 2002: Luca Padovani <lpadovan@cs.unibo.it>
-// 
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library 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
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-//
-// For more information, please send an email to lpadovan@cs.unibo.it
-
-#include "config.h"
-
-#include <string>
-#include <cassert>
-
-#include <stdio.h>
-#include <GdomeSmartDOM.hh>
-
-#include "GdomeSmartDOMXSLTStylesheet.hh"
-
-namespace GdomeSmartDOMExt {
-
-  XSLTStylesheet::XSLTStylesheet(const Document& doc)
-  {
-    assert(doc);
-    GdomeDocument* _doc = gdome_cast_doc(doc.gdome_object());
-    assert(_doc);
-    stylesheet = processStylesheet(_doc);
-    GdomeException _exc = 0;
-    gdome_doc_unref(_doc, &_exc);
-    assert(_exc == 0);
-  }
-
-  XSLTStylesheet::~XSLTStylesheet()
-  {
-    if (stylesheet)
-      {
-       xsltFreeStylesheet(stylesheet);
-       stylesheet = 0;
-      }
-  }
-
-  Document
-  XSLTStylesheet::apply(const Document& source) const
-  {
-    std::vector< std::pair<GdomeString,GdomeString> > noParams;
-    return apply(source, noParams);
-  }
-
-  Document
-  XSLTStylesheet::apply(const Document& source, const std::vector< std::pair<GdomeString,GdomeString> >& params) const
-  {
-    assert(source);
-
-    char** _params = (char**) malloc(sizeof(char*) * (2 * params.size() + 1));
-    for (unsigned i = 0; i < params.size(); i++)
-      {
-       std::string param = params[i].first;
-       _params[2 * i] = strdup(param.c_str());
-       std::string value = params[i].second;
-       _params[2 * i + 1] = strdup(value.c_str());
-      }
-    _params[2 * params.size()] = 0;
-
-    GdomeDocument* _source = gdome_cast_doc(source.gdome_object());
-    assert(_source);
-    GdomeDocument* _result = applyStylesheet(_source, stylesheet, const_cast<const char**>(_params));
-
-    GdomeException _exc = 0;
-    gdome_doc_unref(_source, &_exc);
-    assert(_exc == 0);
-
-    for (unsigned i = 0; i < 2 * params.size(); i++) free(_params[i]);
-    free(_params);
-
-    Document result(_result);
-    gdome_doc_unref(_result, &_exc);
-    assert(_exc == 0);
-
-    return result;
-  }
-
-  void
-  XSLTStylesheet::save(const Document& doc, const std::string& filename) const
-  {
-    assert(doc);
-    GdomeException _exc = 0;
-    GdomeDocument* _doc = gdome_cast_doc(doc.gdome_object());
-    assert(_doc);
-    if (saveResultToFilename(filename.c_str(), _doc, stylesheet, 0) < 0) throw SaveException();
-    gdome_doc_unref(_doc, &_exc);
-    assert(_exc == 0);
-  }
-
-  void
-  XSLTStylesheet::save(const Document& doc, FILE* f) const
-  {
-    assert(doc);
-    GdomeException _exc = 0;
-    GdomeDocument* _doc = gdome_cast_doc(doc.gdome_object());
-    assert(_doc);
-    if (saveResultToFile(f, _doc, stylesheet) < 0) throw SaveException();
-    gdome_doc_unref(_doc, &_exc);
-    assert(_exc == 0);
-  }
-
-  void
-  XSLTStylesheet::save(const Document& doc, int fd) const
-  {
-    assert(doc);
-    GdomeException _exc = 0;
-    GdomeDocument* _doc = gdome_cast_doc(doc.gdome_object());
-    assert(_doc);
-    if (saveResultToFd(fd, _doc, stylesheet) < 0) throw SaveException();
-    gdome_doc_unref(_doc, &_exc);
-    assert(_exc == 0);
-  }
-
-}
diff --git a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLTStylesheet.hh b/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLTStylesheet.hh
deleted file mode 100644 (file)
index 1757f39..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// This file is part of a XSLT engine working on Gdome documents. In fact,
-// it just maps Gdome documents to libxml documents back and forth, and
-// applies the transformation on libxml documents using libxlt.
-// 
-// Copyright (C) 2002: Luca Padovani <lpadovan@cs.unibo.it>
-// 
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library 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
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-//
-// For more information, please send an email to lpadovan@cs.unibo.it
-
-#ifndef __GdomeSmartDOMXSLTStylesheet_hh__
-#define __GdomeSmartDOMXSLTStylesheet_hh__
-
-#include <vector>
-#include <string>
-#include <stdio.h>
-
-#include "gdome_xslt.h"
-#include <GdomeSmartDOM.hh>
-
-namespace GdomeSmartDOMExt {
-
-  using namespace GdomeSmartDOM;
-
-  class XSLTStylesheet
-  {
-  public:
-    explicit XSLTStylesheet(const Document& doc);
-    ~XSLTStylesheet();
-
-    Document apply(const Document& source) const;
-    Document apply(const Document& source, const std::vector< std::pair<GdomeString, GdomeString> >& params) const;
-    void     save(const Document& result, const std::string& filename) const;
-    void     save(const Document& result, FILE* f) const;
-    void     save(const Document& result, int fd) const;
-
-    class SaveException { };
-
-  private:
-    XSLTStylesheet(const XSLTStylesheet&);
-
-    xsltStylesheet* stylesheet;
-  };
-
-}
-
-#endif // __GdomeSmartDOMXSLTStylesheet_hh__
diff --git a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/Makefile.am b/helm/DEVEL/gdome_xslt/C++/gdome_xslt/Makefile.am
deleted file mode 100644 (file)
index 0e4b76e..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-
-lib_LTLIBRARIES = libgdome_xslt_cpp_smart.la
-
-libgdome_xslt_cpp_smart_la_LIBADD = $(top_builddir)/C/gdome_xslt/libgdome_xslt.la
-
-libgdome_xslt_cpp_smart_la_LDFLAGS = -version-info @VERSION_INFO@
-
-libgdome_xslt_cpp_smart_la_SOURCES = \
-  GdomeSmartDOMXSLTStylesheet.cc
-
-pkginclude_HEADERS = \
-  GdomeSmartDOMXSLTStylesheet.hh \
-  GdomeSmartDOMXSLT.hh
-
-INCLUDES = \
-  $(GMETADOM_CFLAGS) \
-  $(LIBXSLT_CFLAGS) \
-  -I$(top_srcdir) \
-  -I$(top_srcdir)/C/gdome_xslt
diff --git a/helm/DEVEL/gdome_xslt/C++/test/.cvsignore b/helm/DEVEL/gdome_xslt/C++/test/.cvsignore
deleted file mode 100644 (file)
index 051d1bd..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Makefile
-Makefile.in
-.deps
diff --git a/helm/DEVEL/gdome_xslt/C++/test/Makefile.am b/helm/DEVEL/gdome_xslt/C++/test/Makefile.am
deleted file mode 100644 (file)
index 12a08d0..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-noinst_PROGRAMS = test
-
-test_SOURCES = main.cc
-
-LDADDS = \
-  $(GMETADOM_LIBS) \
-  $(LIBXSLT_LIBS) \
-  $(top_builddir)/C++/gdome_xslt/libgdome_xslt_cpp_smart.la
-
-test_LDADD = $(LDADDS)
-
-INCLUDES = \
-  $(GMETADOM_CFLAGS) \
-  $(LIBXSLT_CFLAGS) \
-  -I$(top_srcdir)/C/gdome_xslt \
-  -I$(top_srcdir)/C++/gdome_xslt
-
diff --git a/helm/DEVEL/gdome_xslt/C++/test/main.cc b/helm/DEVEL/gdome_xslt/C++/test/main.cc
deleted file mode 100644 (file)
index 0f5aa2d..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* This file is a test for the XSLT engine working on Gdome documents.
- *
- * Copyright (C) 2002 Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please send an email to <sacerdot@cs.unibo.it>
- */
-
-#include <string>
-#include <iostream>
-#include "GdomeSmartDOMXSLT.hh"
-
-namespace DOM = GdomeSmartDOM;
-namespace DOMX = GdomeSmartDOMExt;
-
-#define        OUTPUT_FILE             "../../test_files/output.xml"
-#define CORRECT_OUTPUT_FILE    "../../test_files/output.xml.correct"
-
-int
-main(void)
-{
-   int bytes;
-   DOM::DOMImplementation di;
-   std::vector< std::pair<DOM::GdomeString, DOM::GdomeString> > params;
-
-   params.push_back(std::make_pair(DOM::GdomeString("parameter1"), DOM::GdomeString("'value1'")));
-   params.push_back(std::make_pair(DOM::GdomeString("parameter2"), DOM::GdomeString("'value2'")));
-   params.push_back(std::make_pair(DOM::GdomeString("parameter3"), DOM::GdomeString("'value3'")));
-
-   DOM::Document input = di.createDocumentFromURI("../../test_files/input.xml");
-   DOM::Document style = di.createDocumentFromURI("../../test_files/stylesheet.xsl");
-
-   DOMX::XSLTStylesheet style_libxslt(style);
-   DOM::Document output = style_libxslt.apply(input, params);
-   style_libxslt.save(output, OUTPUT_FILE);
-
-   std::cout << "The test was successful iff " << OUTPUT_FILE << " is equal to " << CORRECT_OUTPUT_FILE << std::endl;
-
-   return 0;
-}
diff --git a/helm/DEVEL/gdome_xslt/C/.cvsignore b/helm/DEVEL/gdome_xslt/C/.cvsignore
deleted file mode 100644 (file)
index 282522d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/helm/DEVEL/gdome_xslt/C/Makefile.am b/helm/DEVEL/gdome_xslt/C/Makefile.am
deleted file mode 100644 (file)
index 7424d61..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-SUBDIRS = gdome_xslt test
-
diff --git a/helm/DEVEL/gdome_xslt/C/gdome_xslt/.cvsignore b/helm/DEVEL/gdome_xslt/C/gdome_xslt/.cvsignore
deleted file mode 100644 (file)
index 572cf3a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-gdome_xslt.o
-Makefile
-Makefile.in
-.deps
diff --git a/helm/DEVEL/gdome_xslt/C/gdome_xslt/Makefile.am b/helm/DEVEL/gdome_xslt/C/gdome_xslt/Makefile.am
deleted file mode 100644 (file)
index b8e374e..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-lib_LTLIBRARIES = libgdome_xslt.la
-
-libgdome_xslt_la_LDFLAGS = -version-info @VERSION_INFO@
-
-libgdome_xslt_la_SOURCES = gdome_xslt.c
-
-pkginclude_HEADERS = gdome_xslt.h
-
-INCLUDES = \
-  $(GDOME_CFLAGS) \
-  $(LIBXSLT_CFLAGS) \
-  -I$(top_srcdir)
-
diff --git a/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.c b/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.c
deleted file mode 100644 (file)
index 2c34f9c..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-/* This file implements a XSLT engine working on Gdome documents. In fact,
- * it just maps Gdome documents to libxml documents back and forth, and
- * applyes the transformation on libxml documents using libxlt.
- * 
- * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT
- * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT)
- *
- * Copyright (C) 2002:
- *     Claudio Sacerdoti Coen          <sacerdot@cs.unibo.it>
- *     Stefano Zacchiroli              <zack@cs.unibo.it>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please send an email to {sacerdot,zack}@cs.unibo.it
- */
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include <libgdome/gdome.h>
-#include <libxslt/xsltconfig.h>
-#include <libxslt/xslt.h>
-#include <libxslt/xsltutils.h>
-#include <libxslt/transform.h>
-#include <libxslt/imports.h>
-#include "gdome_xslt.h"
-
-// Begin of Gdome internals exposed
-typedef struct _Gdome_xml_Document Gdome_xml_Document;
-struct _Gdome_xml_Document {
-        GdomeDocument super;
-        const GdomeDocumentVtab* vtab;
-        int refcnt;
-        xmlDocPtr n;
-        GdomeAccessType accessType;
-};
-
-GdomeNode* gdome_xml_n_mkref(xmlNode* n);
-// End of Gdome internals exposed
-
-// Begin of the abstraction of Gdome internals. Uses the Gdome internals exposed
-xmlDocPtr libxml_of_gdome(GdomeDocument* doc)
-{
-   return ((Gdome_xml_Document*)doc)->n;
-}
-
-GdomeDocument* gdome_of_libxml(xmlDocPtr n)
-{
-   return (GdomeDocument*)gdome_xml_n_mkref((xmlNode*)n);
-}
-// End of the abstraction of Gdome internals. Uses the Gdome internals exposed.
-
-
-
-// From now on no Gdome internal should be used directly.
-
-       /******************************/
-       /* XSLT stylesheet Processing */
-       /******************************/
-
-xsltStylesheetPtr processStylesheet(GdomeDocument* style)
-{
-   xmlDocPtr style_copy;
-   xmlDocPtr style_libxml;
-
-   if (style == NULL) {
-      return NULL;
-   }
-   style_libxml = libxml_of_gdome(style);
-   style_copy = xmlCopyDoc(style_libxml, 1);
-   style_copy->URL = xmlStrdup(style_libxml->URL);
-
-   xsltSetGenericDebugFunc(NULL, NULL);
-
-   return xsltParseStylesheetDoc(style_copy);
-}
-
-       /*******************************/
-       /* XSLT stylesheet Application */
-       /*******************************/
-
-GdomeDocument* applyStylesheet(GdomeDocument* source, xsltStylesheetPtr
-               style_libxslt, const char** params)
-{
-   xmlDocPtr source_libxml;
-   xmlDocPtr output_libxml;
-
-   if (source == NULL) return NULL;
-   source_libxml = libxml_of_gdome(source);
-
-   xsltSetGenericDebugFunc(NULL, NULL);
-
-   output_libxml = xsltApplyStylesheet(style_libxslt, source_libxml,
-                  params);
-
-   if (output_libxml == NULL) return NULL;
-
-   return gdome_of_libxml(output_libxml);
-}
-
-       /******************/
-       /* Results Output */
-       /******************/
-
-int saveResultToFilename (const char* name, GdomeDocument* result,
-               xsltStylesheetPtr style_libxslt, int compression)
-{
-       xmlDocPtr result_libxml;
-
-       if (result == NULL) return -1;
-       result_libxml = libxml_of_gdome(result);
-
-       xsltSetGenericDebugFunc(NULL, NULL);
-
-       return xsltSaveResultToFilename(name, result_libxml,
-                       style_libxslt, compression);
-}
-
-int saveResultToFile (FILE* file, GdomeDocument* result,
-               xsltStylesheetPtr style_libxslt)
-{
-       xmlDocPtr result_libxml;
-
-       if (result == NULL) return -1;
-       result_libxml = libxml_of_gdome(result);
-
-       xsltSetGenericDebugFunc(NULL, NULL);
-
-       return xsltSaveResultToFile(file, result_libxml, style_libxslt);
-}
-
-int saveResultToFd (int fd, GdomeDocument* result, xsltStylesheetPtr
-               style_libxslt)
-{
-       xmlDocPtr result_libxml;
-
-       if (result == NULL) return -1;
-       result_libxml = libxml_of_gdome(result);
-
-       xsltSetGenericDebugFunc(NULL, NULL);
-
-       return xsltSaveResultToFd(fd, result_libxml, style_libxslt);
-}
-
-       /**********************************************/
-       /* Error and Debugging Callbacks Registration */
-       /**********************************************/
-
-       /* max size of a single message passed to callbacks */
-#define MAX_MSG_SIZE   1024
-#define TRUNCATED_MSG  "... TRUNCATED ..."
-#define TRUNCATED_MSG_LEN      strlen(TRUNCATED_MSG)
-
-               /* ERROR callbacks */
-
-       /* user provided error callback, needs a string input */
-static gdomeXsltMsgCallback errorUserCallback = NULL;
-
-       /* libxslt like error callback, ignore context, builds a string
-        * input for user provided error callback and invoke it */
-void gdomeXsltErrorCallback (void *ctx, const char *msg, ...) {
-       va_list args;
-       char buf[MAX_MSG_SIZE];
-
-       if (errorUserCallback == NULL)
-               return;
-
-       va_start(args, msg);
-       if (vsnprintf(buf, MAX_MSG_SIZE, msg, args) > MAX_MSG_SIZE - 1)
-       {       /* message truncated; write TRUNCATED_MSG on it */
-               strncpy(buf+(strlen(buf) - TRUNCATED_MSG_LEN),
-                               TRUNCATED_MSG, TRUNCATED_MSG_LEN);
-       }
-       va_end(args);
-
-       (*errorUserCallback) (buf);
-
-       return;
-}
-
-       /* set user provided error callback */
-void setErrorCallback (gdomeXsltMsgCallback callback)
-{
-       errorUserCallback = callback;
-       xsltSetGenericErrorFunc(NULL,
-               (callback == NULL ? NULL : gdomeXsltErrorCallback));
-
-       return;
-}
-
-               /* DEBUG callbacks */
-
-       /* user provided debug callback, needs a string input */
-static gdomeXsltMsgCallback debugUserCallback = NULL;
-
-       /* libxslt like debug callback, ignore context, builds a string
-        * input for user provided debug callback and invoke it */
-void gdomeXsltDebugCallback (void *ctx, const char *msg, ...) {
-       va_list args;
-       char buf[MAX_MSG_SIZE];
-
-       if (debugUserCallback == NULL)
-               return;
-
-       va_start(args, msg);
-       if (vsnprintf(buf, MAX_MSG_SIZE, msg, args) > MAX_MSG_SIZE - 1)
-       {       /* message truncated; write TRUNCATED_MSG on it */
-               strncpy(buf+(strlen(buf) - TRUNCATED_MSG_LEN),
-                               TRUNCATED_MSG, TRUNCATED_MSG_LEN);
-       }
-       va_end(args);
-
-       (*debugUserCallback) (buf);
-
-       return;
-}
-
-       /* set user provided debug callback */
-void setDebugCallback (gdomeXsltMsgCallback callback)
-{
-       debugUserCallback = callback;
-       xsltSetGenericDebugFunc(NULL,
-               (callback == NULL ? NULL : gdomeXsltDebugCallback));
-
-       return;
-}
-
diff --git a/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.h b/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.h
deleted file mode 100644 (file)
index 3832087..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-
-/* This file implements a XSLT engine working on Gdome documents. In fact,
- * it just maps Gdome documents to libxml documents back and forth, and
- * applies the transformation on libxml documents using libxlt.
- * 
- * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT
- * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT)
- *
- * Copyright (C) 2002:
- *     Claudio Sacerdoti Coen          <sacerdot@cs.unibo.it>
- *     Stefano Zacchiroli              <zack@cs.unibo.it>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please send an email to {sacerdot,zack}@cs.unibo.it
- */
-
-#ifndef __gdome_xslt_h__
-#define __gdome_xslt_h__
-
-#include <gdome.h>
-#include <libxslt/xsltconfig.h>
-#include <libxslt/xslt.h>
-#include <libxslt/xsltutils.h>
-#include <libxslt/transform.h>
-#include <libxslt/imports.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-       /******************************/
-       /* XSLT stylesheet Processing */
-       /******************************/
-
-xsltStylesheetPtr      processStylesheet       (GdomeDocument* style);
-
-
-       /*******************************/
-       /* XSLT stylesheet Application */
-       /*******************************/
-
-GdomeDocument*                 applyStylesheet         (GdomeDocument* source,
-                                                xsltStylesheetPtr style_libxslt,
-                                                const char** params);
-
-       /******************/
-       /* Results Output */
-       /******************/
-
-int                    saveResultToFilename    (const char* name,
-                                                GdomeDocument* result,
-                                                xsltStylesheetPtr style_libxslt,
-                                                int compression);
-int                    saveResultToFile        (FILE* file,
-                                                GdomeDocument* result,
-                                                xsltStylesheetPtr style_libxslt);
-int                    saveResultToFd          (int fd,
-                                                GdomeDocument* result,
-                                                xsltStylesheetPtr style_libxslt);
-
-       /**********************************************/
-       /* Error and Debugging Callbacks Registration */
-       /**********************************************/
-
-typedef                        void(*gdomeXsltMsgCallback)(const char *);
-
-void                   setErrorCallback        (gdomeXsltMsgCallback callback);
-void                   setDebugCallback        (gdomeXsltMsgCallback callback);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __gdome_xslt_h__ */
diff --git a/helm/DEVEL/gdome_xslt/C/test/.cvsignore b/helm/DEVEL/gdome_xslt/C/test/.cvsignore
deleted file mode 100644 (file)
index 87ed101..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-test
-.deps
-Makefile
-Makefile.in
diff --git a/helm/DEVEL/gdome_xslt/C/test/Makefile.am b/helm/DEVEL/gdome_xslt/C/test/Makefile.am
deleted file mode 100644 (file)
index e17047c..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-noinst_PROGRAMS = test
-
-test_SOURCES = test.c
-
-LDADDS = \
-  $(GDOME_LIBS) \
-  $(LIBXSLT_LIBS) \
-  $(top_builddir)/C/gdome_xslt/libgdome_xslt.la
-
-test_LDADD = $(LDADDS)
-
-INCLUDES = \
-  $(GDOME_CFLAGS) \
-  $(LIBXSLT_CFLAGS) \
-  -I$(top_srcdir)/C/gdome_xslt
-
diff --git a/helm/DEVEL/gdome_xslt/C/test/test.c b/helm/DEVEL/gdome_xslt/C/test/test.c
deleted file mode 100644 (file)
index a37c471..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/* This file is a test for the XSLT engine working on Gdome documents.
- *
- * Copyright (C) 2002 Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please send an email to <sacerdot@cs.unibo.it>
- */
-
-#include <stdio.h>
-#include <libgdome/gdome.h>
-#include <libxslt/xsltconfig.h>
-#include <libxslt/xslt.h>
-#include <libxslt/imports.h>
-
-#include "gdome_xslt.h"
-
-#define        OUTPUT_FILE             "../../test_files/output.xml"
-#define CORRECT_OUTPUT_FILE    "../../test_files/output.xml.correct"
-
-GdomeDocument* loadDocument(GdomeDOMImplementation *domimpl, char *uri)
-{
-   GdomeDocument *doc;
-   GdomeException exc;
-
-   doc = gdome_di_createDocFromURI(domimpl, uri, GDOME_LOAD_PARSING, &exc);
-   if (doc == NULL) {
-      fprintf (stderr,
-               "DOMImplementation.createDocFromURI: failed\n\tException #%d\n",
-               exc);
-   }
-
-   return doc;
-}
-
-/*     // old version: use gdome serialization
-int saveDocument(GdomeDOMImplementation *domimpl, GdomeDocument* doc, char *uri)
-{
-   GdomeException exc;
-
-   if (!gdome_di_saveDocToFile (domimpl, doc, uri, GDOME_SAVE_STANDARD, &exc)) {
-      fprintf (stderr,
-               "DOMImplementation.saveDocToFile: failed\n\tException #%d\n",
-               exc);
-      return 0;
-   }
-
-   return 1;
-}
-*/
-
-       /* new version, use libxslt serialization */
-int saveDocument(char* fname, GdomeDocument* result, xsltStylesheetPtr style) {
-       return saveResultToFilename(fname, result, style, 0);
-}
-
-int main(void)
-{
-   int bytes;
-   GdomeDOMImplementation *domimpl;
-   GdomeDocument *input;
-   GdomeDocument *style;
-   xsltStylesheetPtr style_libxslt;
-   GdomeDocument *output;
-   GdomeException exc;
-   const char* params[] = {"parameter1", "'value1'",
-                           "parameter2", "'value2'",
-                           "parameter3", "'value3'",
-                          NULL};
-
-   domimpl = gdome_di_mkref();
-
-   if (!(input = loadDocument(domimpl, "../../test_files/input.xml"))) return 1;
-   if (!(style = loadDocument(domimpl, "../../test_files/stylesheet.xsl"))) return 1;
-
-   style_libxslt = processStylesheet(style);
-
-   output = applyStylesheet(input, style_libxslt, params);
-
-/*    if (!(saveDocument(domimpl, output, "../../test_files/output.xml"))) return 1; */
-   bytes = saveDocument("../../test_files/output.xml", output, style_libxslt);
-
-   xsltFreeStylesheet(style_libxslt);
-   gdome_di_freeDoc (domimpl, input, &exc);
-   gdome_di_freeDoc (domimpl, style, &exc);
-   gdome_di_freeDoc (domimpl, output, &exc);
-   gdome_di_unref (domimpl, &exc);
-
-   printf("The test was successful iff %s is equal to %s\n",
-          OUTPUT_FILE,
-          CORRECT_OUTPUT_FILE);
-
-   return 0;
-}
diff --git a/helm/DEVEL/gdome_xslt/ChangeLog b/helm/DEVEL/gdome_xslt/ChangeLog
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/gdome_xslt/LICENSE b/helm/DEVEL/gdome_xslt/LICENSE
deleted file mode 100644 (file)
index cf9b6b9..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 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.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations
-below.
-
-  When we speak of free software, we are referring to freedom of use,
-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 and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-^L
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it
-becomes a de-facto standard.  To achieve this, non-free programs must
-be allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-^L
-                  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, 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 library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete 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 distribute a copy of this License along with the
-Library.
-
-  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.
-\f
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-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 Library, 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 Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-^L
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you 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.
-
-  If distribution of 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 satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-^L
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at least
-    three years, to give the same user the materials specified in
-    Subsection 6a, above, for a charge no more than the cost of
-    performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be 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.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-^L
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library 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.
-
-  9. 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 Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-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 with
-this License.
-^L
-  11. 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 Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library 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 Library.
-
-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.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library 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.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser 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 Library
-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 Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-^L
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-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
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "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
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. 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 LIBRARY 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
-LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-^L
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms
-of the ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.
-It is safest to attach them to the start of each source file to most
-effectively convey the exclusion of warranty; and each file should
-have at least the "copyright" line and a pointer to where the full
-notice is found.
-
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library 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
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the library,
-if necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James
-  Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/helm/DEVEL/gdome_xslt/LICENSE-INRIA b/helm/DEVEL/gdome_xslt/LICENSE-INRIA
deleted file mode 100644 (file)
index 0fcaa95..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-As a special exception to the GNU Library General Public License, you
-may link, statically or dynamically, a "work that uses the Library"
-with a publicly distributed version of the Library to produce an
-executable file containing portions of the Library, and distribute
-that executable file under terms of your choice, without any of the
-additional requirements listed in clause 6 of the GNU Library General
-Public License.  By "a publicly distributed version of the Library",
-we mean either the unmodified Library as distributed by INRIA, or a
-modified version of the Library that is distributed under the
-conditions defined in clause 3 of the GNU Library General Public
-License.  This exception does not however invalidate any other reasons
-why the executable file might be covered by the GNU Library General
-Public License.
diff --git a/helm/DEVEL/gdome_xslt/Makefile.am b/helm/DEVEL/gdome_xslt/Makefile.am
deleted file mode 100644 (file)
index 5c36bb5..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-DISTDIR = @PACKAGE@-@VERSION@
-
-EXTRA_DIST = BUGS LICENSE aclocal.m4 debian/ gdome2-xslt.pc.in gdome2-xslt-cpp-smart.pc.in
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = gdome2-xslt.pc gdome2-xslt-cpp-smart.pc
-
-## SUBDIRS = C C++ test_files
-SUBDIRS = C C++ ocaml test_files
-
-deb: dist
-       if [ -d $(DISTDIR)/ ]; then rm -rf $(DISTDIR); else true; fi
-       tar xvzf $(DISTDIR).tar.gz
-       (cd $(DISTDIR)/ && debuild)
-       rm -rf $(DISTDIR)
-
diff --git a/helm/DEVEL/gdome_xslt/NEWS b/helm/DEVEL/gdome_xslt/NEWS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/gdome_xslt/README b/helm/DEVEL/gdome_xslt/README
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/gdome_xslt/configure.ac b/helm/DEVEL/gdome_xslt/configure.ac
deleted file mode 100644 (file)
index 8919353..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_INIT
-AC_CONFIG_SRCDIR([C/gdome_xslt/gdome_xslt.h])
-
-PACKAGE=gdome2-xslt
-VERSION=0.0.5
-VERSION_INFO=`echo $VERSION | awk -F. '{ printf "%d:%d:%d", $1+$2, $3, $2 }'`
-AC_SUBST(VERSION_INFO)
-
-AC_PROG_CC
-AC_PROG_CXX
-AC_PROG_INSTALL
-
-AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
-AM_PROG_LIBTOOL
-
-PKG_CHECK_MODULES(GDOME, gdome2 >= 0.7.0,, AC_MSG_ERROR(could not find Gdome2))
-AC_SUBST(GDOME_CFLAGS)
-AC_SUBST(GDOME_LIBS)
-
-PKG_CHECK_MODULES(GMETADOM, gdome2-cpp-smart >= 0.1.8,, AC_MSG_ERROR(could not find GMetaDOM))
-AC_SUBST(GMETADOM_CFLAGS)
-AC_SUBST(GMETADOM_LIBS)
-
-PKG_CHECK_MODULES(LIBXSLT, libxslt,, AC_MSG_ERROR(could not find libxslt))
-AC_SUBST(LIBXSLT_CFLAGS)
-AC_SUBST(LIBXSLT_LIBS)
-
-AC_CHECK_PROG(HAVE_OCAMLC, ocamlc, yes, no)
-if test $HAVE_OCAMLC = "no"; then
-  AC_MSG_ERROR(could not find ocamlc in PATH, please make sure ocaml is installed)
-else
-  OCAMLC=ocamlc
-  OCAMLSTDLIBDIR="`ocamlc -where`"
-  OCAMLSTUBDIR="`ocamlc -where`/stublibs"
-  AC_SUBST(OCAMLC)
-  AC_SUBST(OCAMLSTDLIBDIR)
-  AC_SUBST(OCAMLSTUBDIR)
-fi
-
-AC_CHECK_PROG(HAVE_OCAMLOPT, ocamlopt, yes, no)
-if test $HAVE_OCAMLOPT = "no"; then
-       AC_MSG_WARN(ocaml native libraries won't be compiled since ocamlopt was not found)
-else
-  OCAMLOPT=ocamlopt
-  AC_SUBST(OCAMLOPT)
-fi
-AM_CONDITIONAL(HAVE_OCAMLOPT_COND, test x$HAVE_OCAMLOPT = xyes)
-
-AC_CHECK_PROG(HAVE_OCAMLFIND, ocamlfind, yes, no)
-if test $HAVE_OCAMLFIND = "no"; then
-  AC_MSG_ERROR(could not find ocamlfind in PATH, please make sure findlib is installed)
-else
-  OCAMLFIND=ocamlfind
-  AC_SUBST(OCAMLFIND)
-fi
-
-AC_CHECK_PROG(HAVE_OCAMLDEP, ocamldep, yes, no)
-if test $HAVE_OCAMLDEP = "yes"; then
-  OCAMLDEP=ocamldep
-  AC_SUBST(OCAMLDEP)
-fi
-
-AC_CHECK_PROG(HAVE_OCAMLMKLIB, ocamlmklib, yes, no)
-if test $HAVE_OCAMLMKLIB = "no"; then
-  AC_MSG_ERROR(could not find ocamlmklib in PATH, please make sure ocamlmklib is installed)
-else
-  OCAMLMKLIB=ocamlmklib
-  AC_SUBST(OCAMLMKLIB)
-fi
-
-AC_MSG_CHECKING(for gdome2 ocaml binding)
-ocamlfind query gdome2 ||
-  AC_MSG_ERROR(gdome2 not installed (according to findlib))
-MLGDOME_CFLAGS="`$OCAMLFIND query -i-format gdome2`"
-AC_SUBST(MLGDOME_CFLAGS)
-
-AC_MSG_CHECKING(for the ocaml library dir)
-OCAML_LIB_DIR=`ocamlc -where`
-AC_MSG_RESULT($OCAML_LIB_DIR)
-
-AC_CHECK_FILE(/usr/include/caml/mlvalues.h,
-       OCAML_INCLUDE_DIR=/usr/include/caml,
-       OCAML_INCLUDE_DIR=$OCAML_LIB_DIR/caml
-)
-
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-AC_SUBST(OCAML_INCLUDE_DIR)
-
-AC_CONFIG_FILES([
-  Makefile
-  C/Makefile
-  C/gdome_xslt/Makefile
-  C/test/Makefile
-  C++/gdome_xslt/Makefile
-  C++/test/Makefile
-  C++/Makefile
-  ocaml/Makefile
-  ocaml/gdome_xslt/Makefile
-  ocaml/gdome_xslt/META
-  ocaml/test/Makefile
-  gdome2-xslt.pc
-  gdome2-xslt-cpp-smart.pc
-  test_files/Makefile])
-AC_OUTPUT
diff --git a/helm/DEVEL/gdome_xslt/debian/changelog b/helm/DEVEL/gdome_xslt/debian/changelog
deleted file mode 100644 (file)
index 5727e94..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-gdome2-xslt (0.0.5-1) unstable; urgency=low
-
-  * ocaml binding
-    - wrapped XSLT stylesheet application in a blocking section so that
-      it can be interrupted by ocaml exceptions, signals, ...
-
- -- Stefano Zacchiroli <zack@debian.org>  Mon, 14 Jul 2003 16:05:43 +0200
-
-gdome2-xslt (0.0.4-7) unstable; urgency=low
-
-  * rebuilt against gmetadom 0.1.10-3
-  * debian/control
-     - strictly depends on gmetadom >= 0.1.10-3 (older version are buggy
-       on mips)
-
- -- Stefano Zacchiroli <zack@debian.org>  Mon, 14 Jul 2003 11:16:59 +0200
-
-gdome2-xslt (0.0.4-6) unstable; urgency=low
-
-  * debian/control
-    - bumped gmetadom dependencies to >= 0.1.10-2 (to ensure that .pc
-      is available)
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue,  1 Jul 2003 10:14:14 +0200
-
-gdome2-xslt (0.0.4-5) unstable; urgency=low
-
-  * rebuilt using gmetadom 0.1.9
-  * debian/control
-    - added build-dep on pkg-config
-    - bumped dependencies on gmetadom to 0.1.9
-    - bumped standards-version to 3.5.10
-    - changed section of -dev packages to libdevel
-    - added ${misc:Depends}
-  * debian/rules
-    - removed DH_COMPAT in favour of debian/compat
-    - removed dh_movefiles in favour of dh_install
-    - cosmetic changes
-
- -- Stefano Zacchiroli <zack@debian.org>  Thu, 19 Jun 2003 17:05:47 +0200
-
-gdome2-xslt (0.0.4-4) unstable; urgency=low
-
-  * Bugfix: ships also -config script
-  * Bumped Standards-Version to 3.5.9
-
- -- Stefano Zacchiroli <zack@debian.org>  Thu, 20 Mar 2003 20:45:27 +0100
-
-gdome2-xslt (0.0.4-3) unstable; urgency=low
-
-  * Implemented "high" level functions to set handlers for libxslt error and
-    debugging messages: setErrorCallback, setDebugCallback        (C flavour)
-  * Implemented binding for the above functions               (OCaml flavour)
-  * Bugfix: installs also i_gdome_xslt.ml, gdome_xslt_init.o
-
- -- Stefano Zacchiroli <zack@debian.org>  Thu, 13 Mar 2003 18:07:22 +0100
-
-gdome2-xslt (0.0.4-2) unstable; urgency=low
-
-  * Bugfix: installs also i_gdome_xslt.cmi
-
- -- Stefano Zacchiroli <zack@debian.org>  Wed, 12 Mar 2003 18:28:27 +0100
-
-gdome2-xslt (0.0.4-1) unstable; urgency=low
-
-  * New release
-  * Added a new interface for apply method which requires no arguments
-  * Bumped gmetadom dependencies to 0.1.6
-  * Removed << dependencies on gmetadom
-  * Bumpetd gdome2 version to 0.7.4
-
- -- Stefano Zacchiroli <zack@debian.org>  Mon, 10 Mar 2003 17:50:42 +0100
-
-gdome2-xslt (0.0.3-3) unstable; urgency=low
-
-  * No longer use virtual dependencies on other ocaml libraries, reverted to
-    >=/<< dependencies approach
-  * Bumped dependencies on gmetadom to version 0.1.5
-
- -- Stefano Zacchiroli <zack@debian.org>  Fri, 24 Jan 2003 13:10:22 +0100
-
-gdome2-xslt (0.0.3-2) unstable; urgency=low
-
-  * Use versioned ocaml standard library directory
-  * Changed deps and build-deps to ocaml-3.06-1
-  * Source named changed to gdome2-xslt
-  * Moved OCaml .so stub in <stdlib>/stublibs
-  * Moved ocaml stuff in /usr/lib/ocaml/3.06
-  * Ship also C and C++ flavours
-  * Added dep from libgdome2-xslt-ocaml to libgdome2-ocaml
-  * Added dep from libgdome2-xslt-ocaml-dev to libgdome2-ocaml-dev-0.1.4
-  * Added build-dep to libgdome2-cpp-smart-dev
-  * Provided a better Description
-  * Bumped Standards-Version to 3.5.8
-  * Better test for ocamlopt existence
-
- -- Stefano Zacchiroli <zack@debian.org>  Sun,  8 Dec 2002 16:09:56 +0100
-
-libxslt-ocaml (0.0.2-1) unstable; urgency=low
-
-  * Added serialization functions
-
- -- Stefano Zacchiroli <zack@debian.org>  Thu, 28 Nov 2002 17:59:29 +0100
-
-libxslt-ocaml (0.0.1-3) unstable; urgency=low
-
-  * Rebuilt with ocaml 3.06 (Closes: Bug#158225, Bug#158217)
-  * Upgraded Standards-Version to 3.5.6
-  * Switched deps and build-deps to ocaml-3.06 and ocaml-base-3.06
-  * Switched to debhelper 4
-
- -- Stefano Zacchiroli <zack@debian.org>  Wed, 28 Aug 2002 11:09:04 +0200
-
-libxslt-ocaml (0.0.1-2) unstable; urgency=low
-
-  * Added -fPIC option when compiled some .o in order to succesfully build
-    also on HPPA (Closes: Bug#142485).
-  * Renamed binary packages to libgdome2-xslt-ocaml and -dev.
-
- -- Stefano Zacchiroli <zack@debian.org>  Fri, 12 Apr 2002 14:55:57 +0200
-
-libxslt-ocaml (0.0.1-1) unstable; urgency=low
-
-  * Initial Release.
-
- -- Stefano Zacchiroli <zack@debian.org>  Sat,  6 Apr 2002 13:00:49 +0200
-
diff --git a/helm/DEVEL/gdome_xslt/debian/compat b/helm/DEVEL/gdome_xslt/debian/compat
deleted file mode 100644 (file)
index b8626c4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-4
diff --git a/helm/DEVEL/gdome_xslt/debian/control b/helm/DEVEL/gdome_xslt/debian/control
deleted file mode 100644 (file)
index dc84635..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-Source: gdome2-xslt
-Section: devel
-Priority: optional
-Maintainer: Stefano Zacchiroli <zack@debian.org>
-Build-Depends: debhelper (>> 4.0.0), ocaml-3.06-1, ocaml-findlib, libgdome2-ocaml-dev (>= 0.1.10-3), libgdome2-dev (>= 0.7.4), libxslt1-dev, libgdome2-cpp-smart-dev (>= 0.1.10-3), pkg-config
-Standards-Version: 3.5.10
-
-Package: libgdome2-xslt0
-Section: libs
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: Minimal XSLT processor working on GDome2 documents
- gdome2-xslt is a very small C library that implements a minimal
- XSLT processor that can be used to apply XSLT stylesheets to
- gdome2 documents.
- .
- This package includes shared libraries for the C implementation
- and for the C++ bindings.
-
-Package: libgdome2-xslt-dev
-Section: libdevel
-Architecture: any
-Depends: libgdome2-xslt0 (= ${Source-Version}), libxslt1-dev, libgdome2-dev (>= 0.7.4), libgdome2-cpp-smart-dev (>= 0.1.10-3), ${misc:Depends}
-Description: Minimal XSLT processor working on GDome2 documents
- gdome2-xslt is a very small C library that implements a minimal
- XSLT processor that can be used to apply XSLT stylesheets to
- gdome2 documents.
- .
- This package includes development support files for the C
- library and for its C++ bindings.
-
-Package: libgdome2-xslt-ocaml
-Architecture: any
-Depends: ocaml-base-3.06-1, libgdome2-ocaml (>= 0.1.10-3), ${shlibs:Depends}, ${misc:Depends}
-Description: OCaml bindings for a minimal GDome2 based XSLT processor
- gdome2-xslt is a very small C library that implements a minimal
- XSLT processor that can be used to apply XSLT stylesheets to
- gdome2 documents.
- .
- This package ships the OCaml language bindings for gdome2-xslt.
- .
- This package contains only the OCaml shared runtime stub libraries.
-
-Package: libgdome2-xslt-ocaml-dev
-Architecture: any
-Section: libdevel
-Depends: ocaml-3.06-1, libgdome2-xslt-ocaml (= ${Source-Version}), libgdome2-ocaml-dev (>= 0.1.10-3), libxslt1-dev, libgdome2-dev (>= 0.7.4), ${misc:Depends}
-Description: OCaml bindings for a minimal GDome2 based XSLT processor
- gdome2-xslt is a very small C library that implements a minimal
- XSLT processor that can be used to apply XSLT stylesheets to
- gdome2 documents.
- .
- This package ships the OCaml language bindings for gdome2-xslt.
- .
- This package contains OCaml development stuff for gdome2-xslt.
-
diff --git a/helm/DEVEL/gdome_xslt/debian/copyright b/helm/DEVEL/gdome_xslt/debian/copyright
deleted file mode 100644 (file)
index 5cafed7..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-This package was debianized by Stefano Zacchiroli <zack@dalamar.krynn.it> on
-Sat,  6 Apr 2002 13:00:49 +0200.
-
-It was exported from the HELM CVS which is accesible using ViewCVS from:
-  http://www.cs.unibo.it/helm/
-
-Upstream Author:
-  Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
-
-Copyright:
-
-  This library 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
-  Lesser General Public License for more details.
-
-  On a Debian GNU/Linux system, the LGPL can be found as
-  /usr/share/common-licenses/LGPL-2.1.
diff --git a/helm/DEVEL/gdome_xslt/debian/docs b/helm/DEVEL/gdome_xslt/debian/docs
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-dev.examples b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-dev.examples
deleted file mode 100644 (file)
index 2361011..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-ocaml/test/test.ml
-test_files/*
diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-dev.install b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-dev.install
deleted file mode 100644 (file)
index c403746..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-usr/include/
-usr/lib/*.a
-usr/lib/*.la
-usr/lib/*.so
-usr/lib/pkgconfig/
diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.dirs b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.dirs
deleted file mode 100644 (file)
index 8fd9995..0000000
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/ocaml/3.06
diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.examples b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.examples
deleted file mode 100644 (file)
index 354012c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-C/test/test.c
-C++/test/main.cc
-test_files/*
diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.install b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.install
deleted file mode 100644 (file)
index e7203c3..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-usr/lib/ocaml/3.06/stublibs/*.owner
-usr/lib/ocaml/3.06/stublibs/lib*.so
-usr/lib/ocaml/3.06/gdome2-xslt/
diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml.dirs b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml.dirs
deleted file mode 100644 (file)
index 8fd9995..0000000
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/ocaml/3.06
diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml.install b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml.install
deleted file mode 100644 (file)
index 2dd4e59..0000000
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/ocaml/3.06/stublibs/dll*.so
diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt0.install b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt0.install
deleted file mode 100644 (file)
index 093956b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/*.so.*
diff --git a/helm/DEVEL/gdome_xslt/debian/rules b/helm/DEVEL/gdome_xslt/debian/rules
deleted file mode 100755 (executable)
index 6479a0b..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/make -f
-# Sample debian/rules that uses debhelper.
-# GNU copyright 1997 to 1999 by Joey Hess.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-TARGETDIR = debian/libgdome2-xslt-ocaml-dev
-SHARED_LIB_PKG = libgdome2-xslt0
-
-configure: configure-stamp
-configure-stamp:
-       dh_testdir
-       ./configure --prefix=/usr
-       touch configure-stamp
-
-build: build-stamp
-build-stamp: configure-stamp 
-       dh_testdir
-       $(MAKE)
-       touch build-stamp
-
-clean:
-       dh_testdir
-       dh_testroot
-       rm -f build-stamp configure-stamp
-       -$(MAKE) clean
-       dh_clean
-
-install: build
-       dh_testdir
-       dh_testroot
-       dh_clean -k
-       dh_installdirs -s
-       $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp
-       dh_install --sourcedir=debian/tmp
-
-binary-arch: build install
-       dh_testdir
-       dh_testroot
-       dh_installdocs -s
-       dh_installexamples -s
-       dh_installman -s
-       dh_installinfo -s
-       dh_installchangelogs -s
-       dh_link -s
-       dh_strip -s
-       dh_compress -s
-       dh_fixperms -s
-       dh_makeshlibs -p $(SHARED_LIB_PKG)
-       dh_installdeb -s
-       dh_shlibdeps -s
-       dh_gencontrol -s
-       dh_md5sums -s
-       dh_builddeb -s
-
-binary: binary-arch
-.PHONY: build clean binary-arch binary install configure
diff --git a/helm/DEVEL/gdome_xslt/gdome2-xslt-cpp-smart.pc.in b/helm/DEVEL/gdome_xslt/gdome2-xslt-cpp-smart.pc.in
deleted file mode 100644 (file)
index 0046f27..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# This is a comment
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-datadir=@datadir@
-
-Name: Gdome2/XSLT C++ Binding
-Description: API for applying XSLT stylesheets to Gdome2 documents
-Version: @VERSION@
-Requires: gdome2 libxslt
-Libs: @LIBXSLT_LIBS@ -L${libdir} -lgdome_xslt_cpp_smart
-Cflags: @LIBXSLT_CFLAGS@ -I${includedir}/@PACKAGE@
-
diff --git a/helm/DEVEL/gdome_xslt/gdome2-xslt.pc.in b/helm/DEVEL/gdome_xslt/gdome2-xslt.pc.in
deleted file mode 100644 (file)
index 88df34a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# This is a comment
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-datadir=@datadir@
-
-Name: Gdome2/XSLT C Binding
-Description: API for applying XSLT stylesheets to Gdome2 documents
-Version: @VERSION@
-Requires: gdome2 libxslt
-Libs: @LIBXSLT_LIBS@ -L${libdir} -lgdome_xslt
-Cflags: @LIBXSLT_CFLAGS@ -I${includedir}/@PACKAGE@
-
diff --git a/helm/DEVEL/gdome_xslt/ocaml/.cvsignore b/helm/DEVEL/gdome_xslt/ocaml/.cvsignore
deleted file mode 100644 (file)
index 282522d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/helm/DEVEL/gdome_xslt/ocaml/Makefile.am b/helm/DEVEL/gdome_xslt/ocaml/Makefile.am
deleted file mode 100644 (file)
index 30e2ce8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = gdome_xslt test
diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/.cvsignore b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/.cvsignore
deleted file mode 100644 (file)
index 68ade6c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-META
-Makefile
-Makefile.in
-config.cache
-config.log
-config.status
-configure
-gdome2-xslt.cma
-gdome_xslt.cmi
-gdome_xslt.cmo
-gdome_xslt.cmx
-gdome2-xslt.cmxa
-gdome_xslt.o
-gdome_xslt_init.cmi
-gdome_xslt_init.cmo
-gdome_xslt_init.cmx
-gdome_xslt_init.o
-i_gdome_xslt.cmi
-i_gdome_xslt.cmo
-i_gdome_xslt.cmx
-i_gdome_xslt.o
-ml_gdome_xslt.o
-.deps
diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/.depend b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/.depend
deleted file mode 100644 (file)
index 519df4b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-gdome_xslt.cmo: i_gdome_xslt.cmo gdome_xslt.cmi 
-gdome_xslt.cmx: i_gdome_xslt.cmx gdome_xslt.cmi 
-gdome_xslt_init.cmo: i_gdome_xslt.cmo gdome_xslt_init.cmi 
-gdome_xslt_init.cmx: i_gdome_xslt.cmx gdome_xslt_init.cmi 
-gdome_xslt.cmi: i_gdome_xslt.cmo 
diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/META.in b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/META.in
deleted file mode 100644 (file)
index e5c9b19..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-requires="gdome2"
-version="@VERSION@"
-archive(byte)="mlgdome2-xslt.cma gdome_xslt_init.cmo"
-archive(native)="mlgdome2-xslt.cmxa gdome_xslt_init.cmx"
diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/Makefile.am b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/Makefile.am
deleted file mode 100644 (file)
index 3524a9f..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-
-ARCHIVE = mlgdome2-xslt
-PKGNAME = gdome2-xslt
-OCAMLINSTALLDIR = $(DESTDIR)$(OCAMLSTDLIBDIR)/$(PKGNAME)
-STUBSDIR = $(DESTDIR)$(OCAMLSTUBDIR)
-OCAMLFLAGS = -I +gdome2
-OCAMLC = @OCAMLC@ ${OCAMLFLAGS}
-OCAMLOPT = @OCAMLOPT@ ${OCAMLFLAGS}
-OCAMLDEP = @OCAMLDEP@
-OCAML_CFLAGS  = @OCAML_CFLAGS@
-OCAMLFIND = @OCAMLFIND@
-OCAMLMKLIB = ocamlmklib
-DLL = dll$(ARCHIVE).so
-
-CLEANFILES = \
-  $(ARCHIVE).cma $(ARCHIVE).cmxa $(ARCHIVE).a lib$(ARCHIVE).a $(DLL)   \
-  *.cmo *.cmx *.cmi
-
-EXTRA_DIST =   \
-       META.in .depend \
-       gdome_xslt.ml gdome_xslt.mli gdome_xslt_init.ml gdome_xslt_init.mli     \
-       i_gdome_xslt.ml \
-       ocaml-io.h
-
-if HAVE_OCAMLOPT_COND
-noinst_DATA =  \
-       $(ARCHIVE).cma $(DLL) $(ARCHIVE).cmxa $(ARCHIVE).a lib$(ARCHIVE).a      \
-       gdome_xslt_init.cmo gdome_xslt_init.cmx
-else
-noinst_DATA =  \
-       $(ARCHIVE).cma $(DLL) gdome_xslt_init.cmo lib$(ARCHIVE).a
-endif
-
-noinst_LTLIBRARIES = libmlgdome2-xslt.la
-C_SRC = ml_gdome_xslt.c
-libmlgdome2_xslt_la_SOURCES = $(C_SRC)
-
-O_S = $(C_SRC:%.c=%.o)
-LO_S = $(O_S:%.o=%.lo) $(top_builddir)/C/gdome_xslt/gdome_xslt.lo
-CMA_DEPS = i_gdome_xslt.cmo gdome_xslt.cmo
-CMXA_DEPS = $(CMA_DEPS:%.cmo=%.cmx)
-SHARED_LIBS = -lxslt -lgdome -lglib -lxml2 -lmlgdome
-
-$(ARCHIVE).cma: $(CMA_DEPS)
-       $(OCAMLMKLIB) -o $(ARCHIVE) -L@OCAMLSTUBDIR@ $(CMA_DEPS) $(SHARED_LIBS)
-
-$(ARCHIVE).cmxa: $(CMXA_DEPS)
-       $(OCAMLMKLIB) -o $(ARCHIVE) -L@OCAMLSTUBDIR@ $(CMXA_DEPS) $(SHARED_LIBS)
-
-$(DLL) lib$(ARCHIVE).a: $(LO_S)
-       # use .lo for ocamlmklib
-       for f in $(LO_S); do    \
-               cp $$f $$f.o;   \
-       done
-       $(OCAMLMKLIB) -o $(ARCHIVE) -L@OCAMLSTUBDIR@ $(LO_S:%=%.o)  $(SHARED_LIBS)
-       for f in $(LO_S:%=%.o); do      \
-               rm $$f; \
-       done
-
-INCLUDES = $(GDOME_CFLAGS) $(MLGDOME_CFLAGS) -I/usr/include/caml -I$(top_srcdir)/C/gdome_xslt
-
-BYTECODE_STUFF =       \
-       $(ARCHIVE).cma $(DLL) i_gdome_xslt.cmi i_gdome_xslt.ml gdome_xslt.cmi   \
-       gdome_xslt.mli gdome_xslt_init.cmi gdome_xslt_init.mli gdome_xslt_init.cmo      \
-       lib$(ARCHIVE).a
-NATIVECODE_STUFF =     \
-       $(ARCHIVE).cmxa $(ARCHIVE).a gdome_xslt_init.cmx gdome_xslt_init.o
-if HAVE_OCAMLOPT_COND
-install-data-local: $(BYTECODE_STUFF) $(NATIVECODE_STUFF)
-else
-install-data-local: $(BYTECODE_STUFF)
-endif
-       $(mkinstalldirs) $(OCAMLINSTALLDIR) $(STUBSDIR)
-       chmod -x $(DLL)
-       for i in $^; do \
-               if [ "$$i" != "$(DLL)" ]; then  \
-                       $(INSTALL_DATA) $$i $(OCAMLINSTALLDIR)/$$i; \
-               fi      \
-       done
-       if [ "x$(OCAMLFIND)" != "x" ]; then \
-               mv $(OCAMLINSTALLDIR) $(OCAMLINSTALLDIR).saved; \
-               $(OCAMLFIND) install -destdir $(DESTDIR)$(OCAMLSTDLIBDIR)/ $(PKGNAME) META $(DLL); \
-               $(INSTALL_DATA) $(OCAMLINSTALLDIR).saved/* $(OCAMLINSTALLDIR)/; \
-               rm -rf $(OCAMLINSTALLDIR).saved/;       \
-       else    \
-               $(INSTALL_DATA) $(DLL) $(STUBSDIR);     \
-       fi
-       ln -fs $(DLL) $(STUBSDIR)/lib$(ARCHIVE).so
-
-uninstall-local:
-       if [ "x$(OCAMLFIND)" != "x" ]; then     \
-         $(OCAMLFIND) remove -destdir $(DESTDIR)$(OCAMLSTDLIBDIR)/ $(PKGNAME); \
-       else    \
-               rm -rf $(OCAMLINSTALLDIR);      \
-               rm $(STUBSDIR)/$(DLL);  \
-       fi
-       rm $(STUBSDIR)/lib$(ARCHIVE).so
-
-#### OCaml only stuff from now on
-
-DEPOBJS = *.ml *.mli
-
-depend:
-       $(OCAMLDEP) $(DEPOBJS) > .depend
-
-%.cmi : $(srcdir)/%.mli
-       if test ! -e $(@:%.cmi=%.mli) -a "x$(srcdir)" != "x." ; then $(LN_S) $< . ; fi
-       $(OCAMLC) -c $(@:%.cmi=%.mli)
-
-%.cmo : $(srcdir)/%.ml
-       if test ! -e $(@:%.cmo=%.ml) -a "x$(srcdir)" != "x." ; then $(LN_S) $< . ; fi
-       $(OCAMLC) -c $(@:%.cmo=%.ml)
-
-%.cmx %.o : $(srcdir)/%.ml
-       if test ! -e $(@:%.cmx=%.ml) -a "x$(srcdir)" != "x." ; then $(LN_S) $< . ; fi
-       $(OCAMLOPT) -c $(@:%.cmx=%.ml)
-
-include .depend
-
diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt.ml b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt.ml
deleted file mode 100644 (file)
index b64a006..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-(* This file is part of an ocaml binding of an XSLT engine working on Gdome
- * documents.
- * 
- * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT
- * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT)
- *
- * Copyright (C) 2002:
- *     Claudio Sacerdoti Coen  <sacerdot@cs.unibo.it>
- *     Stefano Zacchiroli      <zack@cs.unibo.it>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please send an email to {sacerdot,zack}@cs.unibo.it
- *)
-
-let processStylesheet style =
- I_gdome_xslt.processStylesheet style#as_Document
-;;
-
-let applyStylesheet ~source ~stylesheet ~params =
- let res =
-  I_gdome_xslt.applyStylesheet ~source:(source#as_Document) ~stylesheet
-   ~params
- in
-  new Gdome.document res
-;;
-
-let saveResultToChannel ~outchan ~result ~stylesheet =
-  I_gdome_xslt.saveResultToChannel
-    ~outchan
-    ~result:result#as_Document
-    ~stylesheet
-;;
-
-let setErrorCallback = function
-  | None -> I_gdome_xslt.disableErrorCallback ()
-  | Some (callback: string -> unit) ->
-      Callback.register "error_callback" callback;
-      I_gdome_xslt.enableErrorCallback ()
-;;
-let setDebugCallback = function
-  | None -> I_gdome_xslt.disableDebugCallback ()
-  | Some (callback: string -> unit) ->
-      Callback.register "debug_callback" callback;
-      I_gdome_xslt.enableDebugCallback ()
-;;
-
diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt.mli b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt.mli
deleted file mode 100644 (file)
index 8115457..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-(* This file is part of an ocaml binding of an XSLT engine working on Gdome
- * documents.
- * 
- * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT
- * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT)
- *
- * Copyright (C) 2002:
- *     Claudio Sacerdoti Coen  <sacerdot@cs.unibo.it>
- *     Stefano Zacchiroli      <zack@cs.unibo.it>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please send an email to {sacerdot,zack}@cs.unibo.it
- *)
-
-(* processStylesheet stylesheet                               *)
-(* Process a stylesheet so that it can be subsequently used   *)
-(* with applyStylesheet.                                      *)
-val processStylesheet:
- Gdome.document ->
-   I_gdome_xslt.processed_stylesheet
-
-(* applyStylesheet source stylesheet params                   *)
-(* Applies a processed stylesheet to a source document, using *)
-(* the given list of parameters (couples name,value)          *)
-val applyStylesheet:
- source: Gdome.document ->
- stylesheet:I_gdome_xslt.processed_stylesheet ->
- params:(string * string) list ->
-   Gdome.document
-
-(* output the result of a previous XSLT transformation to an  *)
-(* output channel                                             *)
-val saveResultToChannel:
-  outchan: out_channel ->
-  result: Gdome.document ->
-  stylesheet: I_gdome_xslt.processed_stylesheet ->
-    unit
-
-(** set error callback, that is a function invoked each time an error message is
-generated. If None is passed, libxslt default error callback is used *)
-val setErrorCallback: (string -> unit) option -> unit
-
-(** set debug callback, that is a function invoked each time a debugging message
-is generated. If None is passed, libxslt default error callback is used *)
-val setDebugCallback: (string -> unit) option -> unit
-
diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt_init.ml b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt_init.ml
deleted file mode 100644 (file)
index e7da4e0..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-(* This file is part of an ocaml binding of an XSLT engine working on Gdome
- * documents.
- * 
- * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT
- * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT)
- *
- * Copyright (C) 2002:
- *     Claudio Sacerdoti Coen  <sacerdot@cs.unibo.it>
- *     Stefano Zacchiroli      <zack@cs.unibo.it>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please send an email to {sacerdot,zack}@cs.unibo.it
- *)
-
-exception ProcessStylesheetException
-exception ApplyStylesheetException
-
-let _ =
- Callback.register_exception
-  "ProcessStylesheetException" ProcessStylesheetException
-;;
-
-let _ =
- Callback.register_exception
-  "ApplyStylesheetException" ApplyStylesheetException
-;;
-
-I_gdome_xslt.setXsltMaxDepth 2000;;
diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt_init.mli b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt_init.mli
deleted file mode 100644 (file)
index d3e6d67..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-(* This file is part of an ocaml binding of an XSLT engine working on Gdome
- * documents.
- * 
- * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT
- * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT)
- *
- * Copyright (C) 2002:
- *     Claudio Sacerdoti Coen  <sacerdot@cs.unibo.it>
- *     Stefano Zacchiroli      <zack@cs.unibo.it>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please send an email to {sacerdot,zack}@cs.unibo.it
- *)
-
-(**************************** WARNING!!! ***********************************)
-(***                                                                     ***)
-(*** This file must always be linked with any code using gdome_xslt and  ***)
-(*** must be linked as the first file. It is responsible of initializing ***)
-(*** the whole binding, registering some ocaml values to the C level.    ***)
-(***                                                                     ***)
-(***************************************************************************)
-
-exception ProcessStylesheetException
-exception ApplyStylesheetException
diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/i_gdome_xslt.ml b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/i_gdome_xslt.ml
deleted file mode 100644 (file)
index 6f686c4..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-(* This file is part of an ocaml binding of an XSLT engine working on Gdome
- * documents.
- * 
- * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT
- * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT)
- *
- * Copyright (C) 2002:
- *     Claudio Sacerdoti Coen  <sacerdot@cs.unibo.it>
- *     Stefano Zacchiroli      <zack@cs.unibo.it>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please send an email to {sacerdot,zack}@cs.unibo.it
- *)
-
-type processed_stylesheet
-
-external setXsltMaxDepth:
-  int ->
-    unit
-  = "setXsltMaxDepth"
-
-external processStylesheet:
-  [> `Document] GdomeT.t ->
-    processed_stylesheet
-  = "ml_processStylesheet"
-
-external applyStylesheet:
-  source: [> `Document] GdomeT.t ->
-  stylesheet: processed_stylesheet ->
-  params: (string * string) list ->
-    TDocument.t
-  = "ml_applyStylesheet"
-
-external saveResultToChannel:
-  outchan: out_channel ->
-  result: TDocument.t ->
-  stylesheet: processed_stylesheet ->
-    unit
-  = "ml_saveResultToChannel"
-
-external enableErrorCallback  :  unit -> unit = "ml_enableErrorCallback"
-external disableErrorCallback :  unit -> unit = "ml_disableErrorCallback"
-external enableDebugCallback  :  unit -> unit = "ml_enableDebugCallback"
-external disableDebugCallback :  unit -> unit = "ml_disableDebugCallback"
-
diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ml_gdome_xslt.c b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ml_gdome_xslt.c
deleted file mode 100644 (file)
index 225698a..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/* This file is part of an ocaml binding of an XSLT engine working on Gdome
- * documents.
- * 
- * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT
- * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT)
- *
- * Copyright (C) 2002:
- *     Claudio Sacerdoti Coen  <sacerdot@cs.unibo.it>
- *     Stefano Zacchiroli      <zack@cs.unibo.it>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please send an email to {sacerdot,zack}@cs.unibo.it
- */
-
-#include <assert.h>
-
-#include <caml/memory.h>
-#include <caml/custom.h>
-#include <caml/callback.h>
-#include <caml/mlvalues.h>
-
-#include <libxslt/xsltconfig.h>
-#include <libxslt/imports.h>
-
-#include "ocaml-io.h"
-#include "mlgdomevalue.h"
-#include "gdome_xslt.h"
-
-xsltStylesheetPtr XsltStylesheetPtr_val(value);
-
-static void ml_xsltFreeStylesheet(value v)
-{
-   xsltFreeStylesheet(XsltStylesheetPtr_val(v));
-}
-
-xsltStylesheetPtr XsltStylesheetPtr_val(value v)
-{
-   CAMLparam1(v);
-   xsltStylesheetPtr res = *((xsltStylesheetPtr*) Data_custom_val(v));
-   CAMLreturn(res);
-}
-
-value Val_XsltStylesheetPtr(xsltStylesheetPtr obj)
-{
-   CAMLparam0();
-   CAMLlocal1(v);
-   static struct custom_operations ops = {
-      "http://www.cs.unibo.it/helm/gdome_xslt/XsltStylesheetPtr",
-      ml_xsltFreeStylesheet,
-      custom_compare_default,
-      custom_hash_default,
-      custom_serialize_default,
-      custom_deserialize_default
-   };
-
-   v = alloc_custom(&ops, sizeof(xsltStylesheetPtr), 0, 1);
-   *((xsltStylesheetPtr*) Data_custom_val(v)) = obj;
-
-   CAMLreturn(v);
-}
-
-value ml_processStylesheet(value style)
-{
-   CAMLparam1(style);
-   xsltStylesheetPtr res;
-   res = processStylesheet(Document_val(style));
-   if (res == NULL) {
-      value* excp;
-      excp = caml_named_value("ProcessStylesheetException");
-      assert(excp != NULL);
-      raise_constant(*excp);
-   }
-   CAMLreturn(Val_XsltStylesheetPtr(res));
-}
-
-value setXsltMaxDepth(value depth)
-{
-   CAMLparam1(depth);
-   xsltMaxDepth = Int_val(depth);
-   CAMLreturn0;
-}
-
-value ml_applyStylesheet(value source, value style, value params)
-{
-   CAMLparam3(source,style,params);
-   CAMLlocal1(list);
-   GdomeDocument* res;
-   int i;
-   const char** c_params;
-
-   i = 0 ; list = params;
-   while(list != Val_int(0)) {
-      list = Field(list,1);
-      i++;
-   }
-   c_params = (const char **)malloc(sizeof(char *) * (i * 2 + 1));
-
-   i = 0; list = params;
-   while(list != Val_int(0)) {
-      c_params[i]   = String_val(Field(Field(list,0),0));
-      c_params[i+1] = String_val(Field(Field(list,0),1));
-      list = Field(list,1);
-      i+=2;
-   }
-   c_params[i] = NULL;
-   enter_blocking_section();
-   res = applyStylesheet(Document_val(source),
-                        XsltStylesheetPtr_val(style),
-                        c_params);
-   leave_blocking_section();
-   free(c_params);
-   if (res == NULL) {
-      value* excp;
-      excp = caml_named_value("ApplyStylesheetException");
-      assert(excp != NULL);
-      raise_constant(*excp);
-   }
-   CAMLreturn(Val_Document(res));
-}
-
-value ml_saveResultToChannel(value channel,
-                            value result,
-                            value stylesheet)
-{
-       CAMLparam3(channel, result, stylesheet);
-
-       saveResultToFd((Channel(channel))->fd,
-                     Document_val(result),
-                     XsltStylesheetPtr_val(stylesheet));
-
-       CAMLreturn0;
-}
-
-       /* error callback handling */
-
-static void ml_gdomeXsltErrorCallback(const char *msg) {
-       callback(*caml_named_value("error_callback"), copy_string(msg));
-
-       return;
-}
-
-value ml_enableErrorCallback(value unit) {
-       CAMLparam1(unit);
-       setErrorCallback(ml_gdomeXsltErrorCallback);
-       CAMLreturn(Val_unit);
-}
-
-value ml_disableErrorCallback(value unit) {
-       CAMLparam1(unit);
-       setErrorCallback(NULL);
-       CAMLreturn(Val_unit);
-}
-
-       /* debug callback handling */
-
-static void ml_gdomeXsltDebugCallback(const char *msg) {
-       callback(*caml_named_value("debug_callback"), copy_string(msg));
-
-       return;
-}
-
-value ml_enableDebugCallback(value unit) {
-       CAMLparam1(unit);
-       setDebugCallback(ml_gdomeXsltDebugCallback);
-       CAMLreturn(Val_unit);
-}
-
-value ml_disableDebugCallback(value unit) {
-       CAMLparam1(unit);
-       setDebugCallback(NULL);
-       CAMLreturn(Val_unit);
-}
-
diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ml_gdome_xslt.h b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ml_gdome_xslt.h
deleted file mode 100644 (file)
index a173bc9..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* This file is part of an ocaml binding of an XSLT engine working on Gdome
- * documents.
- * 
- * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT
- * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT)
- *
- * Copyright (C) 2002:
- *     Claudio Sacerdoti Coen  <sacerdot@cs.unibo.it>
- *     Stefano Zacchiroli      <zack@cs.unibo.it>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please send an email to {sacerdot,zack}@cs.unibo.it
- */
-
-xsltStylesheetPtr XsltStylesheetPtr_val(value);
-value Val_XsltStylesheetPtr(xsltStylesheetPtr);
-
-value ml_processStylesheet(value style);
-value ml_applyStylesheet(value source, value style, value params);
-
-value ml_saveResultToChannel(value channel, value result, value stylesheet);
-
-value ml_enableErrorCallback(value unit);
-value ml_disableErrorCallback(value unit);
-value ml_enableDebugCallback(value unit);
-value ml_disableDebugCallback(value unit);
-
diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ocaml-io.h b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ocaml-io.h
deleted file mode 100644 (file)
index 6ce9493..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/**********************************************************************/
-/*                                                                    */
-/*                           Objective Caml                           */
-/*                                                                    */
-/*            Xavier Leroy, projet Cristal, INRIA Rocquencourt        */
-/*                                                                    */
-/*  Copyright 1996 Institut National de Recherche en Informatique et  */
-/*  en Automatique.  All rights reserved.  This file is distributed   */
-/*  under the terms of the GNU Library General Public License, with   */
-/*  the special exception on linking described in file                */
-/*  ../../LICENSE-INRIA.                                              */
-/*                                                                    */
-/**********************************************************************/
-
-/* Buffered input/output */
-
-#ifndef __IO_H__
-#define __IO_H__
-
-#ifndef IO_BUFFER_SIZE
-#define IO_BUFFER_SIZE 4096
-#endif
-
-typedef long file_offset;
-
-struct channel {
-  int fd;                       /* Unix file descriptor */
-  file_offset offset;           /* Absolute position of fd in the file */
-  char * end;                   /* Physical end of the buffer */
-  char * curr;                  /* Current position in the buffer */
-  char * max;                   /* Logical end of the buffer (for input) */
-  void * mutex;                 /* Placeholder for mutex (for systhreads) */
-  struct channel * next;        /* Linear chaining of channels (flush_all) */
-  int revealed;                 /* For Cash only */
-  int old_revealed;             /* For Cash only */
-  int refcount;                 /* For flush_all and for Cash */
-  char buff[IO_BUFFER_SIZE];    /* The buffer itself */
-};
-
-/* For an output channel:
-     [offset] is the absolute position of the beginning of the buffer [buff].
-   For an input channel:
-     [offset] is the absolute position of the logical end of the buffer, [max].
-*/
-
-/* Functions and macros that can be called from C.  Take arguments of
-   type struct channel *.  No locking is performed. */
-
-/* Extract a struct channel * from the heap object representing it */
-
-#define Channel(v) (*((struct channel **) (Data_custom_val(v))))
-
-#endif /* __IO_H__ */
-
diff --git a/helm/DEVEL/gdome_xslt/ocaml/test/.cvsignore b/helm/DEVEL/gdome_xslt/ocaml/test/.cvsignore
deleted file mode 100644 (file)
index fb5d24d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-test.cmi
-test.cmo
-test.cmx
-test.o
-test
-test.opt
-Makefile
-Makefile.in
diff --git a/helm/DEVEL/gdome_xslt/ocaml/test/Makefile.am b/helm/DEVEL/gdome_xslt/ocaml/test/Makefile.am
deleted file mode 100644 (file)
index 58be30f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-REQUIRES = gdome2
-OCAMLFIND = @OCAMLFIND@
-OCAMLC = $(OCAMLFIND) @OCAMLC@ -package "$(REQUIRES)"
-OCAMLOPT = $(OCAMLFIND) @OCAMLOPT@ -package "$(REQUIRES)"
-CMA = $(top_builddir)/ocaml/gdome_xslt/mlgdome2-xslt.cma
-CMXA = $(top_builddir)/ocaml/gdome_xslt/mlgdome2-xslt.cmxa
-INIT_CMO = $(top_builddir)/ocaml/gdome_xslt/gdome_xslt_init.cmo
-INIT_CMX = $(top_builddir)/ocaml/gdome_xslt/gdome_xslt_init.cmx
-OCAMLC_FLAGS = -I $(top_builddir)/ocaml/gdome_xslt/
-
-EXTRA_DIST = test.ml
-CLEANFILES = test{,.o,.opt} test.cm[iox]
-
-if HAVE_OCAMLOPT_COND
-noinst_DATA = test.opt test
-else
-noinst_DATA = test
-endif
-
-test: test.ml $(CMA) $(INIT_CMO)
-       $(OCAMLC) -o $@ -linkpkg $(OCAMLC_FLAGS) $(CMA) $(INIT_CMO) $<
-test.opt: test.ml $(CMXA) $(INIT_CMX)
-       $(OCAMLOPT) -o $@ -linkpkg $(OCAMLC_FLAGS) $(CMXA) $(INIT_CMX) $<
-
diff --git a/helm/DEVEL/gdome_xslt/ocaml/test/test.ml b/helm/DEVEL/gdome_xslt/ocaml/test/test.ml
deleted file mode 100644 (file)
index 4cd1034..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-(* This file is part of an ocaml binding of an XSLT engine working on Gdome
- * documents.
- * 
- * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT
- * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT)
- *
- * Copyright (C) 2002 Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please send an email to <sacerdot@cs.unibo.it>
- *)
-
-let (output_file,
-     correct_output_file,
-     input_file,
-     stylesheet_file)  =
-  ("../../test_files/output.xml",
-   "../../test_files/output.xml.correct",
-   "../../test_files/input.xml",
-   "../../test_files/stylesheet.xsl")
-in
-let domImpl = Gdome.domImplementation () in
- let input =
-  domImpl#createDocumentFromURI ~uri:input_file ()
- and style =
-  domImpl#createDocumentFromURI ~uri:stylesheet_file ()
- in
-  (* First of all, let's try the exception handling machinery *)
-  let _ =
-   try
-    ignore (Gdome_xslt.processStylesheet input);
-    assert false (* previous line should rise an exception *)
-   with
-    Gdome_xslt_init.ProcessStylesheetException -> ()
-  in
-  let pstyle = Gdome_xslt.processStylesheet style in
-   let output =
-    Gdome_xslt.applyStylesheet input pstyle
-     ["parameter1","'value1'" ;
-      "parameter2","'value2'" ;
-      "parameter3","'value3'"
-     ]
-   in
-(*  (* old version: use gdome serialization functions *)
-    let res =
-     domImpl#saveDocumentToFile ~doc:output ~name:output_file ()
-    in
-     if not res then
-      prerr_endline ("Error saving to document " ^ output_file)
-     else
-      begin
-       Printf.printf
-        "The test was successful iff %s is equal to %s\n"
-        output_file
-        correct_output_file
-      end
-*)
-  (* new version: use libxslt serialization functions *)
-  let outchan = open_out output_file in
-  Gdome_xslt.saveResultToChannel ~outchan ~result:output ~stylesheet:pstyle;
-  close_out outchan;
-  Printf.printf
-   "The test was successful iff %s is equal to %s\n"
-   output_file
-   correct_output_file
-;;
diff --git a/helm/DEVEL/gdome_xslt/test_files/.cvsignore b/helm/DEVEL/gdome_xslt/test_files/.cvsignore
deleted file mode 100644 (file)
index d1e4943..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-output.xml
-Makefile
-Makefile.in
diff --git a/helm/DEVEL/gdome_xslt/test_files/Makefile.am b/helm/DEVEL/gdome_xslt/test_files/Makefile.am
deleted file mode 100644 (file)
index ead191b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-EXTRA_DIST = input.xml output.xml.correct stylesheet.xsl
diff --git a/helm/DEVEL/gdome_xslt/test_files/input.xml b/helm/DEVEL/gdome_xslt/test_files/input.xml
deleted file mode 100644 (file)
index b6ffa38..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0"?>
-<input>
- <msg>It works!</msg>
-</input>
diff --git a/helm/DEVEL/gdome_xslt/test_files/output.xml.correct b/helm/DEVEL/gdome_xslt/test_files/output.xml.correct
deleted file mode 100644 (file)
index c4adda3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0"?>
-<output><parameter>value2</parameter><parameter>value3</parameter><parameter>value1</parameter>
- <msg>It works!</msg>
-</output>
diff --git a/helm/DEVEL/gdome_xslt/test_files/stylesheet.xsl b/helm/DEVEL/gdome_xslt/test_files/stylesheet.xsl
deleted file mode 100644 (file)
index ca4534e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:param name="parameter1"/>
-<xsl:param name="parameter2"/>
-<xsl:param name="parameter3"/>
-
-<xsl:template match="/">
- <output>
-  <parameter><xsl:value-of select="$parameter2"/></parameter>
-  <parameter><xsl:value-of select="$parameter3"/></parameter>
-  <parameter><xsl:value-of select="$parameter1"/></parameter>
-  <xsl:apply-templates/>
- </output>
-</xsl:template>
-
-<xsl:template match="msg">
- <xsl:copy-of select="."/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0-1.i386.rpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0-1.i386.rpm
deleted file mode 100644 (file)
index 78f0a3b..0000000
Binary files a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0-1.i386.rpm and /dev/null differ
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0-1.spec b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0-1.spec
deleted file mode 100644 (file)
index 4b579e8..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-Summary: LablGTK : an interface to the GIMP Tool Kit for OCaml
-Name: lablgtk_20000829
-Version: 0.1.0
-Release: 1
-Copyright: LGPL
-Group: Development/Libraries
-Source: ftp://ftp.kurims.kyoto-u.ac.jp/pub/lang/olabl/lablgtk-20000829.tar.gz
-%description
-LablGTK is an interface to the GIMP Tool Kit for OCaml.
-
-%prep
-%setup
-
-%build
-make configure
-make
-make opt
-
-%install
-make install
-
-%files
-%doc CHANGES COPYING README doc
-
-/usr/lib/ocaml/lablgtk/
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0-1.src.rpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0-1.src.rpm
deleted file mode 100644 (file)
index 7ebeed1..0000000
Binary files a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0-1.src.rpm and /dev/null differ
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0.tar.gz b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0.tar.gz
deleted file mode 100644 (file)
index ba7056f..0000000
Binary files a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0.tar.gz and /dev/null differ
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/.cvsignore b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/.cvsignore
deleted file mode 100644 (file)
index da3c3c5..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.depend
-config.make
-var2conv
-var2def
-lablgtk
-lablgtktop
-lablgtktop_t
-lablgtkrun
-*_tags.c
-*_tags.h
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/CHANGES b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/CHANGES
deleted file mode 100644 (file)
index f5afeef..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-$Id$
-
-2000.8.29
-  * bugs in color selection reported by Nicolas George
-  * changed the license
-
-2000.8.21
-  * correct GtkStyle.set_font bug reported by Patrick Doane
-
-2000.7.27
-  * changed GUtil.signal and GUtil.variable for better usability
-  * suppressed obsolete color settings in tooltips
-
-2000.6.19
-  * patch by Michael Welsh for Gdk regions
-
-2000.6.15
-  * add CList.set_cell_style/set_row_style
-  * change set_usize/set_uposition into set_geometry
-  * return an option rather than raise an exception for null pointers
-  * map empty strings to NULL when meaningful
-  * Gdk.Font.get_type/ascent/descent
-
-2000.6.14
-  * add GDraw.optcolor for functions with a default (Jerome suggested)
-
-2000.6.8
-  * apply Jerome Vouillon's patch
-  * changes in GtkSignal and GtkArgv.ml
-
-2000.6.7
-  * create #misc#connect for widget generic signals
-
-2000.6.6
-  * move notebook from GMisc to GPack
-  * #connect#event, #add_event, #misc#event, #misc#set_events_extension
-    transferred to #event su-bobject.
-  * #connect#drag -> #drag#connect.
-  * #get_type, #connect#disconnect, #connect#stop_emit transferred to #misc.
-
-2000.5.25
-  * split misc.ml into gaux.ml and gpointer.ml
-
-2000.5.23
-  * add GMisc.notebook#get_{tab,menu}_label. Rename nth_page to get_nth_page.
-  * modified ML signals in GUtil, to allow signals without widget.
-
-2000.5.22
-  * Incompatible!: Change default for ~expand in Box.pack,
-    Pack.build_options, Table.build_options. Now defaults to false/`NONE.
-    This means that all options default to false/`NONE, except ~show
-    (true for all widgets except windows) and ~fill (always true but
-    effect controlled by ~expand).
-  * add GtkArgv.get_nativeint and GtkArgv.set_nativeint.
-  * make offset and length optional in GtkArgv.string_at_pointer.
-
-2000.5.10
-  * rename GtkFrame to GtkBin and GFrame to GBin
-  * move socket to GBin
-
-2000.5.9
-  * add arrow and image classes to GMisc
-  * add list and set_item_string methods to GEdit.combo
-  * add socket and plug classes to GContainer and GWindow
-  * two new examples: combo.ml and socket.ml
-
-2000.4.28
-  * add GUtil.variable
-
-2000.4.27
-  * add GtkXmHTML widget
-
-2000.4.26
-  * release 1.00
-
-2000.4.24
-  * merge in changes for ocaml 3.00: label and syntax changes, autolink
-  * added better visual and colormap handling to Gdk
-  * GdkObj renamed to GDraw, GtkPixmap moved to GMisc
-  * Initialize Gtk in gtkInit.cmo/cmx, start a thread in gtkInitThread.cmo.
-    These are only included in toplevels, link them explicitely or call
-    GMain.Main.init and GtkThread.start otherwise.
-  * install to caml standard library
-  * many other forgotten changes...
-
-2000.3.02
-  * move locale setting inside GtkMain.init, since it requires an
-    X display
-
-2000.2.24
-  * add checks in add methods, to avoid critical errors
-
-2000.2.23
-  * add dcalendar.ml (submitted by Ken Wakita) and csview.ml
-  * correct bug in GdkObj.pixmap#line
-
-1999.12.19
-  * release lablGTK beta2
-
-1999.12.16
-  * upgraded unison to version 1.169
-  * radio groups are of type {radio_menu_item,radio_button} obj option,
-    otherwise you could not use them several times
-
-1999.12.13
-  * added GtkEdit::{insert_text,delete_text} signals
-  * better syntax highlighting and ergonomy in the browser's shell
-
-1999.11...
-  * switched to Objective Caml 3
-  * constructors are no longer classes, but simple functions
-
-1999.10.29
-  * changed GtkArgv.get_{string,pointer,object} to return option types
-
-1999.10.27
-  * added radtest/CHANGES for cooperative editing on radtest
-
-1999.10.21
-  * added a UI for unison
-    (ask bcpierce@saul.cis.upenn.edu about how to get unison)
-
-1999.10.20
-  * corrected CList signals
-  * moved initialization out of the library, in gtkInit.cmo
-
-1999.10.15
-  * release lablGTK beta1
-
-1999.10.13
-  * improved gtkThread.ml (no timer)
-  * modify Sys.argv in place (gtkMain.ml)
-  * add set_row_data and get_row_data for GtkCList
-
-1999.10.11
-  * bugfixes in Makefile, radtest and lv
-
-1999.10.6
-  * added Gdk.X.flush and Gdk.X.beep 
-  * Gdk.X.flush is exported in GtkMain.Main
-
-1999.9.9
-  * added font selection dialog
-
-1999.8.25
-  * re-added connect#draw
-
-1999.8.10
-  * reduced the number of methods in widget
-  * moved disconnect and stop_emit to object_signals
-  * moved ?:after to each signal
-  * more functions in applications/browser
-
-1999.8.9
-  * Major change: created one set_param method by parameter,
-    rather than grouping them and using options.
-    You can get previous versions with tag "changing_set"
-  * corrected examples, radtest and browser for these changes
-  * a bit of clean-up in radtest (treew.ml and Makefile)
-
-1999.8.5
-  * corrected a bad bug with indirected pointers in caml heap
-
-1999.7.15
-  * add GdkKeysyms for exotic keysyms
-
-1999.7.14
-  * moved Truecolor inside Gdk
-  * added COPYING
-  * prepared for release
-
-1999.7.12
-  * clean up drag-and-drop
-
-1999.7.9
-  * corrected bug in Container.children
-  * added ML signal support in GUtil
-
-1999.7.6
-  * added DnD, improved radtest (Hubert)
-  * small corrections (Jacques)
-
-1999.7.1
-  * added some gdk functions related window and ximage
-  * also added applications/lv, "labl image viewer" with
-    the camlimage library.
-  (JPF)
-
-1999.7.1
-  * added applications/lablglade (Koji)
-
-1999.6.28
-  * added applications/radtest (Hubert)
-
-1999.6.23
-  * improved variant conversions for space.
-
-1999.6.22
-  * updated olabl.patch. With this new version you can access fields
-    of records without opening modules.  You can also use several times
-    the same label in one module.
-  * examples/GL/morph3d.ml uses it.
-
-1999.6.21
-  * moved event functions to GdkEvent
-
-1999.6.20
-  * new example: radtest.ml (Hubert)
-
-1999.6.18
-  * added GL extension
-
-1999.6.15
-  * grouped set methods into set_<keyword>
-  * added width and height option to all classes
-  * windows not shown are automatically destroyed by the GC
-
-1999.6.14
-  * added GPack.layout, GPack.packer, GPack.paned, GMisc.notebook,
-    GRange.scale, GMisc.calendar
-  * added 3 examples
-  * #add_events only available on windowed widgets
-
-1999.6.11
-  * added CList widget in GList module, and examples/clist.ml
-  * improved pixmap abstraction in GdkObj / GPix
-
-1999.6.10
-  * suppressed almost all raw pointers from the code. Pointers are now
-    either boxed (second field of an abstract block) or marked (lowest
-    bit set to 1).
-
-1999.6.9
-  * added GtkBase.Object.get_id and GObj.gtkobj#get_id to get an
-    unique identifier to gtk objects. Nice for hash-tables, etc...
-  * GUtil.memo is such an hash-table, allowing you to recover an
-    object's wrapper.
-  * added a show option to all classes, commanding whether the widget
-    should be shown immediately.  It is by default true on all widgets
-    except in module GWindow.
-  * moved non-OO examples to examples/old. Do "cvs update -d old" to
-    get them.
-  * changes in Gdk/GtkData/GObj about styles.
-
-1999.6.8
-  * updated olabl.patch
-
-1999.6.7
-  * split gtk.ml into gtk*.ml
-
-1999.6.5
-  * grouped Container focus operations in a "focus" subwidget
-
-1999.6.4
-  * slightly reorganized widget grouping
-
-1999.6.3
-  * disabled gtk_caller
-  * subtle hack to have GTree get the right interface
-  * switched completely to the new widget scheme (including examples)
-  * added olabl.patch to apply to olabl-2.02 to compile new sources
-
-1999.6.2
-  * integrated changes from Hubert in Gtk, GtkObj and testgtk.ml
-  * added G* modules to replace GtkObj. "make lablgtk2" for it
-
-1999.6.1
-  * added experimental GtkMenu for a cleaner approach to OO (Jacques)
-
-1999.5.31
-  * GtkObj: list, tree and menu_shell inherit from item_container (Jacques)
-  * Argv.get_{string,pointer,object} may raise Null_pointer (Jacques)
-  * Support for creating new widgets (Hubert)
-
-1999.5.28
-  * a few stylistic corrections
-  * added Packer in gtk.ml
-
-1999.5.27
-  * new Gtk.Main.main Gtk.Main.quit and GtkThread.main (for modal windows)
-  * added x: and y: to Window.setter
-  * new methods: object#get_type widget#misc#lock_accelerators
-    widget#misc#visible widget#misc#parent container#set_focus#vadjustment
-    container#set_focus#hadjustment (could be container#set_focus#adjustment with a dir param)
-    window#set_modal window#set_position window#set_default_size
-    window#set_transient_for
-    menu#set_accel_group
-  * new classes: handle_box_skel handle_box_signals handle_box
-    bbox color_selection color_selection_dialog toolbar
-    and the corresponding modules in gtk.ml
-    new class type: is_window and method as_window
-  * new param tearoff: in new_menu_item
-    new param x: and y: modal: in Window.setter
-  * Widget.event and Widget.activate return bool
-  * new example: examples/testgtk.ml and test.xpm
-  (Hubert)
-
-1999.5.25
-  * upgraded to gtk+-1.2.3 (all examples work)
-  * suppressed deprecated function calls and corrected examples
-  * added a patch to use toplevel threads in olabl-2.02
-
-1998.12.13
-  * upgraded to olabl-2.01
-
-1998.12.9
-  * replicated Main, Timeout and Grab to GtkObj (no need to open Gtk anymore)
-  * moved some non standard classes to GtkExt
-
-1998.12.8
-  * added the first application, xxaplay, Playstation audio track 
-    player for linux. (How architecture specific!) (Furuse)
-
-1998.12.8
-  * more widgets in GtkObj
-  * refined memory management
-  * all variants in upper case
-
-1998.12.7
-  * after deeper thought, re-introduced the connect sub-object
-  * simplified GtkObj: use simple inheritance and allow easy subtyping
-  * updated olabl.diffs for bugs in class functions parsing and printing
-  * add ThreadObj for concurrent object programming
-  (Jacques)
-
-1998.12.3
-  * pousse.ml is now a reversi game (idea for strategy ?)
-  * solved startup bug (a value checker for ocaml is now available)
-  (Jacques)
-
-1998.12.2
-  * added GdkObj for high level drawing primitives (Jacques)
-
-1998.11.30
-  * removed cast checking for NULL valued widgets (ml_gtk.[ch])
-  * module Arg is renamed as GtkArg because of the name corrision with
-       the module Arg in the standard library
-  * Makefile : native code compilation added
-  (Furuse)
-1998.11.29
-  * renamed widget_ops sub-object to misc
-  * various improvements of set functions
-  (Jacques)
-
-1998.11.28
-  * switched to object-oriented model. GtkObj is now the standard way
-    to access the library, but not all objects are ready (see README)
-  * removed inheritance in gtk.ml
-  (Jacques)
-
-1998.11.24
-  * added inheritance in gtk.ml
-
-1998.11.22
-  * added gtkObj.ml and examples/*_obj.ml
-  * various modifications in gtk.ml
-                                  
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/COPYING b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/COPYING
deleted file mode 100644 (file)
index d417b8b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-This library is made available under the LGPL.
-You should have got a copy of the LGPL with Objective Caml.
-The LGPL applies to all the files in this directory, but not in
-subdirectories.
-
-For the examples subdirectory, there is no specific licensing policy,
-but you may freely take inspiration from the code, and copy parts of
-it in your application.
-
-For the applications subdirectory, stricter rules apply:
-
-* You are free to do anything you want with this code as long as it is
-  for personal use.
-
-* Redistribution can only be "as is".  Binary distribution and bug
-  fixes are allowed, but you cannot extensively modify the code
-  without asking the authors.
-
-The authors may choose to remove any of the above restrictions on a
-per request basis.
-
-Authors:
-       Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
-       Hubert Fauque  <hubert.fauque@wanadoo.fr>
-       Jun Furuse     <Jun.Furuse@inria.fr>
-       Koji Kagawa    <kagawa@eng.kagawa-u.ac.jp>
-
-$Id$
\ No newline at end of file
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/Makefile b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/Makefile
deleted file mode 100644 (file)
index 23157f2..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-# $Id$
-# Makefile for lablgtk.
-
-TARGETS = var2conv var2def lablgtktop lablgtktop_t lablgtkrun lablgtk
-
-all: $(TARGETS)
-
-opt: lablgtkopt
-
-configure:
-       @rm -f config.make
-       @$(MAKE) --no-print-directory -f configure.mk
-
-depend:
-       @rm -f .depend
-       @$(MAKE) --no-print-directory -f configure.mk .depend
-
-.depend config.make:
-       @$(MAKE) --no-print-directory -f configure.mk
-
-COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-TOPLEVEL = ocamlmktop $(MLFLAGS)
-
-include config.make
-
-INSTALLDIR = $(LIBDIR)/lablgtk
-LABLGLDIR = $(LIBDIR)/lablGL
-
-MLLIBS = lablgtk.cma
-CLIBS = liblablgtk.a
-MLLINK = unix.cma str.cma
-
-ifdef DEBUG
-CFLAGS = -g $(GTKCFLAGS)
-MLLINK += -cclib -lcamlrund
-MLFLAGS = -g
-else
-CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS)
-endif
-
-THFLAGS = -thread
-THLINK = unix.cma threads.cma
-
-ifdef USE_CC
-CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS)
-else
-CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)"
-endif
-
-ifdef USE_GL
-MLFLAGS += -I $(LABLGLDIR)
-MLLINK += lablgl.cma
-MLLIBS += lablgtkgl.cma
-CLIBS += liblablgtkgl.a
-GLLINK = -cclib -llablgtkgl -cclib -lgtkgl
-GLMLOBJS = glGtk.cmo
-GLCOBJS = ml_gtkgl.o
-
-endif
-
-ifdef USE_GNOME
-MLLIBS += lablgnome.cma
-CLIBS += liblablgnome.a
-GNOMEMLOBJS = gtkXmHTML.cmo gHtml.cmo
-GNOMECOBJS = ml_gtkxmhtml.o
-endif
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def
-.c.o:
-       $(CCOMPILER) $<
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-.var.h:
-       ./var2def < $< > $@
-.var.c:
-       ./var2conv < $< > $@
-
-# Targets
-COBJS = ml_gtk.o ml_gdk.o ml_glib.o wrappers.o
-MLOBJS = gaux.cmo gpointer.cmo glib.cmo gdk.cmo gdkEvent.cmo gdkKeysyms.cmo \
-       gtk.cmo gtkArgv.cmo gtkSignal.cmo \
-       gtkData.cmo gtkBase.cmo gtkPack.cmo gtkButton.cmo \
-       gtkMenu.cmo gtkMisc.cmo gtkWindow.cmo gtkTree.cmo gtkList.cmo \
-       gtkBin.cmo gtkEdit.cmo gtkRange.cmo gtkMain.cmo gtkNew.cmo \
-       gDraw.cmo \
-       gObj.cmo gMain.cmo gData.cmo gContainer.cmo gPack.cmo gButton.cmo \
-       gMenu.cmo gMisc.cmo gWindow.cmo gTree.cmo gList.cmo gBin.cmo \
-       gEdit.cmo gRange.cmo gUtil.cmo
-THOBJS = gtkThread.cmo
-INITOBJS = gtkInit.cmo
-THINITOBJS = gtkThInit.cmo
-ALLOBJS = $(MLOBJS) $(GLMLOBJS) $(GNOMEMLOBJS) $(THOBJS) \
-       $(INITOBJS) $(THINITOBJS)
-
-lablgtktop: $(CLIBS) $(MLLIBS) $(INITOBJS)
-       $(TOPLEVEL) -o $@ $(MLLINK) -ccopt -L. $(MLLIBS) $(INITOBJS)
-
-lablgtktop_t: $(CLIBS) $(MLLIBS) $(THOBJS) $(INITOBJS) $(THINITOBJS)
-       $(TOPLEVEL) $(THFLAGS) -o $@ $(THLINK) $(MLLINK) \
-          -ccopt -L. $(MLLIBS) $(THOBJS) $(INITOBJS) $(THINITOBJS)
-
-lablgtk: Makefile config.make lablgtk.in
-       sed -e "s|@INSTALLDIR@|$(INSTALLDIR)|g" \
-           -e "s|@LABLGLDIR@|$(LABLGLDIR)|g" \
-           -e "s|@LIBDIR@|$(LIBDIR)|g" \
-           < lablgtk.in > $@
-       chmod 755 $@
-
-lablgtkrun: $(CLIBS) $(MLLIBS)
-       $(LINKER) -o $@ -make-runtime $(MLLINK) -ccopt -L. $(MLLIBS)
-
-lablgtkopt: $(CLIBS) $(MLLIBS:.cma=.cmxa) $(INITOBJS:.cmo=.cmx) \
-       $(THOBJS:.cmo=.cmx)
-
-install:
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       cp *.mli $(INSTALLDIR)
-       cp *.h $(INSTALLDIR)
-       cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR)
-       cp $(MLLIBS) $(THOBJS) $(INITOBJS) $(THINITOBJS) $(INSTALLDIR)
-       cp $(CLIBS) $(INSTALLDIR)
-       cp lablgtktop  lablgtktop_t $(INSTALLDIR)
-       cp lablgtk lablgtkrun $(BINDIR)
-       if test -f lablgtk.cmxa; then \
-          cp $(MLLIBS:.cma=.cmxa) $(MLLIBS:.cma=.a) \
-             $(INITOBJS:.cmo=.cmx) $(INITOBJS:.cmo=.o) $(INSTALLDIR); fi
-       if test -f gtkThread.cmx; then \
-          cp $(THOBJS:.cmo=.cmx) $(THOBJS:.cmo=.o) $(INSTALLDIR); fi
-
-liblablgtk.a: $(COBJS)
-       ar rc $@ $(COBJS)
-       $(RANLIB) $@
-lablgtk.cma: $(MLOBJS)
-       $(LINKER) -a -custom -o $@ $(MLOBJS) \
-         -cclib -llablgtk $(GTKLIBS)
-lablgtk.cmxa: $(MLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) \
-         -cclib -llablgtk $(GTKLIBS)
-
-liblablgtkgl.a: $(GLCOBJS)
-       ar rc $@ $(GLCOBJS)
-       $(RANLIB) $@
-lablgtkgl.cma: $(GLMLOBJS)
-       $(LINKER) -a -custom -o $@ $(GLLINK) $(GLMLOBJS)
-lablgtkgl.cmxa: $(GLMLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(GLLINK) $(GLMLOBJS:.cmo=.cmx)
-
-liblablgnome.a: $(GNOMECOBJS)
-       ar rc $@ $(GNOMECOBJS)
-       $(RANLIB) $@
-lablgnome.cma: $(GNOMEMLOBJS)
-       $(LINKER) -a -custom -o $@ $(GNOMEMLOBJS) \
-         -cclib -llablgnome $(GNOMELIBS)
-lablgnome.cmxa: $(GNOMEMLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(GNOMEMLOBJS:.cmo=.cmx) \
-         -cclib -llablgnome $(GNOMELIBS)
-
-gtkThread.cmo: gtkThread.ml
-       $(COMPILER) $(THFLAGS) gtkThread.ml
-
-gtkThread.cmx: gtkThread.ml
-       if test -f $(LIBDIR)/libthreadsnat.a; then \
-          $(COMPOPT) $(THFLAGS) gtkThread.ml; fi
-
-var2conv: var2conv.cmo
-       $(LINKER) -o $@ var2conv.cmo
-       rm -f *_tags.c
-
-var2def: var2def.cmo
-       $(LINKER) -o $@ var2def.cmo
-       rm -f *_tags.h
-
-clean:
-       rm -f *.cm* *.o *.a *_tags.[ch] $(TARGETS)
-
-ml_gtk.o: gtk_tags.c gtk_tags.h ml_gtk.h ml_gdk.h wrappers.h
-ml_gdk.o: gdk_tags.c gdk_tags.h ml_gdk.h wrappers.h
-ml_gtkgl.o: gtkgl_tags.c gtkgl_tags.h ml_gtk.h ml_gdk.h wrappers.h
-ml_gtkxmhtml.o: gtkxmhtml_tags.c gtkxmhtml_tags.h ml_gtk.h ml_gdk.h wrappers.h
-
-include .depend
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/Makefile.nt b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/Makefile.nt
deleted file mode 100644 (file)
index bdf5b6c..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-# $Id$
-# Makefile for lablgtk.
-
-EXE = .exe
-TARGETS = var2conv var2def lablgtk$(EXE) lablgtk_t$(EXE) \
-       lablgtkrun$(EXE) config.make
-
-all: $(TARGETS)
-
-opt: lablgtkopt
-
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-
-TOPLEVEL = ocamlmktop $(MLFLAGS)
-### How to invoke the librarian
-MKLIB=lib /nologo /debugtype:CV /out:
-
-!include config.make.nt
-
-INSTALLDIR = $(LIBDIR:/=\)\lablgtk
-BINDIR = $(LIBDIR:/=\)\..\bin
-LABLGLDIR = $(LIBDIR)/lablGL
-
-CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS)
-LDFLAGS = $(GTKLIBS)
-
-THFLAGS = -thread
-THLIBS = unix.cma threads.cma
-
-!if $(USE_CC) == 1
-CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS)
-!else
-CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)"
-!endif
-
-!if $(USE_GL) == 1
-MLFLAGS = $(MLFLAGS) -I $(LIBDIR)/lablGL
-GLLINK = -I $(LABLGLDIR) lablgl.cma -cclib -lgtkgl
-GLMLOBJS = glGtk.cmo
-GLCOBJS = ml_gtkgl.o
-!endif
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .obj .var .h .opt .def
-.c.obj:
-       $(CCOMPILER) $<
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-.var.h:
-       ocamlrun ./var2def < $< > $@
-.var.c:
-       ocamlrun ./var2conv < $< > $@
-
-# Targets
-COBJS = ml_gtk.obj ml_gdk.obj ml_glib.obj wrappers.obj $(GLCOBJS)
-OLDMLOBJS = misc.cmo glib.cmo gdk.cmo gtk.cmo gdkObj.cmo gtkObj.cmo gtkExt.cmo
-MLOBJS = misc.cmo glib.cmo gdk.cmo gdkEvent.cmo gdkKeysyms.cmo \
-       gtk.cmo gtkArgv.cmo gtkSignal.cmo \
-       gtkData.cmo gtkBase.cmo gtkPack.cmo gtkButton.cmo \
-       gtkMenu.cmo gtkMisc.cmo gtkWindow.cmo gtkTree.cmo gtkList.cmo \
-       gtkFrame.cmo gtkEdit.cmo gtkRange.cmo gtkMain.cmo gtkNew.cmo \
-       gDraw.cmo \
-       gObj.cmo gMain.cmo gData.cmo gContainer.cmo gPack.cmo gButton.cmo \
-       gMenu.cmo gMisc.cmo gWindow.cmo gTree.cmo gList.cmo gFrame.cmo \
-       gEdit.cmo gRange.cmo gUtil.cmo $(GLMLOBJS)
-THOBJS = gtkThread.cmo threadObj.cmo
-INITOBJS = gtkInit.cmo
-THINITOBJS = gtkThInit.cmo
-ALLOBJS = $(MLOBJS) $(THOBJS) $(INITOBJS) $(THINITOBJS)
-
-lablgtk$(EXE): liblablgtk.lib lablgtk.cma $(INITOBJS)
-       $(TOPLEVEL) -custom -o $@ unix.cma str.cma $(GLLINK) \
-           lablgtk.cma $(INITOBJS)
-
-lablgtk_t$(EXE): liblablgtk.lib lablgtk.cma $(THOBJS) $(INITOBJS) $(THINITOBJS)
-       $(TOPLEVEL) -custom $(THFLAGS) -o $@ $(THLIBS) str.cma $(GLLINK) \
-           lablgtk.cma $(THOBJS) $(INITOBJS) $(THINITOBJS)
-
-lablgtkrun$(EXE): liblablgtk.lib lablgtk.cma
-       $(LINKER) -o $@ -make-runtime $(GLLINK) lablgtk.cma
-
-lablgtkopt: liblablgtk.lib lablgtk.cmxa gtkInit.cmx
-
-install:
-       if not exist $(INSTALLDIR) mkdir $(INSTALLDIR)
-       cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       cp *.mli $(INSTALLDIR)
-       cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR)
-       cp lablgtk.cma $(THOBJS) $(INITOBJS) $(THINITOBJS) $(INSTALLDIR)
-       cp liblablgtk.lib $(INSTALLDIR)
-       cp lablgtk$(EXE) lablgtk_t$(EXE) lablgtkrun$(EXE) $(BINDIR)
-       if exist lablgtk.cmxa cp lablgtk.cmxa lablgtk.lib gtkInit.cmx gtkInit.obj $(INSTALLDIR)
-
-liblablgtk.lib: $(COBJS)
-       $(MKLIB)$@ $(COBJS)
-
-lablgtk.cma: $(MLOBJS)
-       $(LINKER) -a -custom -o $@ $(MLOBJS) \
-         -cclib -llablgtk $(GTKLIBS)
-
-lablgtk.cmxa: $(MLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) \
-         -cclib -llablgtk $(GTKLIBS)
-
-gtkThread.cmo: gtkThread.ml
-       $(COMPILER) $(THFLAGS) gtkThread.ml
-
-threadObj.cmo: threadObj.ml
-       $(COMPILER) $(THFLAGS) threadObj.ml
-
-gtkThread.cmx: gtkThread.ml
-       $(COMPOPT) $(THFLAGS) gtkThread.ml
-
-threadObj.cmx: threadObj.ml
-       $(COMPOPT) $(THFLAGS) threadObj.ml
-
-var2conv: var2conv.cmo
-       $(LINKER) -o $@ var2conv.cmo
-       rm -f *_tags.c
-
-var2def: var2def.cmo
-       $(LINKER) -o $@ var2def.cmo
-       rm -f *_tags.h
-
-clean:
-       rm -f *.cm* *.obj *.lib *_tags.[ch] $(TARGETS)
-
-config.make: config.make.nt
-       cp config.make.nt config.make
-
-depend .depend:
-       ocamldep *.ml *.mli > .depend
-
-ml_gtk.obj: gtk_tags.c gtk_tags.h ml_gtk.h ml_gdk.h wrappers.h
-ml_gdk.obj: gdk_tags.c gdk_tags.h ml_gdk.h wrappers.h
-ml_gtkgl.obj: gtkgl_tags.c gtkgl_tags.h ml_gtk.h ml_gdk.h wrappers.h
-
-!include .depend
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/README b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/README
deleted file mode 100644 (file)
index eabc247..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-
-               LablGTK : an interface to the GIMP Tool Kit
-
-
-Needed:
-       ocaml-3.00
-       gtk-1.2.x
-       gmake (there is no standard for conditionals)
-
-How to compile:
-
-       You should normally not need to modify Makefiles.
-       First type "make configure <options>".
-       Options are
-               USE_CC=1        to use $(CC) rather than gcc
-               USE_GL=1        to compile with OpenGL support (see lower)
-
-       Then just type "make" to build the library and toplevels.
-
-       On FreeBSD, you need to link with libxpg4.so for Japanese
-       output.
-
-Contents:
-
-       gdk.ml          low-level interface to the General Drawing Kit
-       gtk.ml          low-level interface to the GIMP Tool Kit
-       gtkThread.ml    main loop for threaded version
-       g[A-Z]*.ml      object-oriented interface to GTK
-       gdkObj.ml       object-oriented interface to GDK
-
-       lablgtk         toplevel
-
-       examples/*.ml   various examples
-       applications/*  applications using the library
-               radtest         a very experimental RAD for lablgtk
-                               (by Hubert Fauque)
-               browser         the begin of a port of OCamlBrowser
-                               (by Jacques Garrigue)
-                unison          a frontend for the Unison file synchronizer
-                                see the README for details.
-
-Upgrading from lablgtk-1.00:
-  There are a few incompatibilities between this version and the
-  previous release. We do not describe them all, since usually a type
-  error message will inform you.
-  * all signals are no longer under #connect. #connect#event changed
-    to #event#connect, and some signals are under #misc#connect or
-    #grab#connect. See lower for a description of the new widget
-    structure.
-  * some defaults changed. In particular GPack.box#pack have now all
-    its parameter defaulting to false rather than true. See lower for
-    the new default policy. Beware that this does not cause type
-    errors, just changes in the aspect.
-
-How to run the examples:
-  In the examples directory just type:
-       lablgtk -labels examples/???.ml
-
-  Before installing lablgtk you have to be more explicit:
-       ../lablgtktop -labels -w s -I .. ???.ml
-
-How to link them:
-  lablgtktop contains an extra module GtkInit, whose only contents is:
-        let locale = GtkMain.Main.init ()
-  You must either add this line, or add this module to your link,
-  before calling any Gtk function.
-  ocamlc -I CAMLLIB/lablgtk -labels -w s lablgtk.cma gtkInit.cmo ???.ml -o ???
-
-How to use the threaded toplevel:
-
-       % lablgtk -thread           (or lablgtktop_t before installing)
-               Objective Caml version 3.00
-       
-       # let w = GWindow.window ~show:true ();;
-
-  You should at once see a window appear.
-  The GTK main loop is running in a separate thread. Any command
-  is immediately reflected by the system.
-  Beware that you cannot switch threads within a callback, that is the
-  only thread related command you may use in a callback is
-  Thread.create. On the other hand, all newly created threads will be
-  run directly by the caml main loop, so they can use all thread
-  operations.
-
-Structure of the (raw) Gtk* modules:
-
-  These modules are composed of one submodule for each class.
-  Signals specific to a widget are in a Signals inner module.
-  A setter function is defined to give access to set_param functions.
-
-Structure of the G[A-Z]* modules:
-
-  These modules provide classes to wrap the raw function calls.
-  Here are the widget classes contained in each module:
-
-  GDraw         Gdk pixmaps, etc...
-  GObj         gtkobj, widget, style
-  GData                data, adjustment, tooltips
-  GContainer   container, item_container
-  GWindow      window, dialog, color_selection_dialog, file_selection, plug
-  GPack                box, button_box, table, fixed, layout, packer, paned, notebook
-  GBin         scrolled_window, event_box, handle_box, frame,
-               aspect_frame, viewport, socket
-  GButton      button, toggle_button, check_button, radio_button, toolbar
-  GMenu                menu_item, tearoff_item, check_menu_item, radio_menu_item,
-               menu_shell, menu, option_menu, menu_bar, factory
-  GMisc                separator, statusbar, calendar, drawing_area,
-               misc, arrow, image, pixmap, label, tips_query,
-                color_selection, font_selection
-  GTree                tree_item, tree
-  GList                list_item, liste, clist
-  GEdit                editable, entry, spin_button, combo, text
-  GRange       progress, progress_bar, range, scale, scrollbar
-
-  While subtyping follows the Gtk widget hierarchy, you cannot always
-  use width subtyping (i.e. #super is not unifiable with all the
-  subclasses of super). Still, it works for some classes, like
-  #widget and #container, and allows subtyping without coercion towards
-  these classes (cf. #container in pousse.ml for instance).
-
-  Practically, each widget class is composed of:
-  * a coerce method, returning the object coerced to the type widget.
-  * an as_widget method, returning the raw Gtk widget used for packing, etc...
-  * a connect sub-object, allowing one to widget specific
-    signals (this is what prevents width subtyping in subclasses.)
-  * a misc sub-object, giving access to miscellanous functionality of
-    the basic gtkwidget class, and a misc#connect sub-object.
-  * an event sub-object, for Xevent related functions (only if the widget
-    has an Xwindow), and an event#connect sub-object.
-  * a grab sub-object, containing drag and drop functions,
-    and a grab#connect sub-object.
-  * widget specific methods.
-
-  Here is a diagram of the structure (- for methods, + for sub-objects)
-        - coerce : widget
-        - as_widget : Gtk.widget obj
-        - destroy : unit -> unit
-        - ...
-        + connect : mywidget_signals
-        |   - after
-        |   - signal_name : callback:(... -> ...) -> GtkSignal.id
-        + misc : misc_ops
-        |   - show, hide, disconnect, ...
-        |   + connect : misc_signals
-        + event : event_ops
-        |   - add, ...
-        |   + connect : event_signals
-        + grab : grab_ops
-        |   - ...
-        |   + connect : grab_signals
-
-  You create a widget by [<Module>.<widget name> options ... ()].
-  Many optional arguments are admitted. The last two of them, packing:
-  and show:, allow you respectively to call a function on your newly
-  created widget, and to decide wether to show it immediately or not.
-  By default all widgets except toplevel windows (GWindow module) are
-  shown immediately.
-
-Default arguments:
-  For many constructor or method arguments, default values are provided.
-  Generally, this default value is defined by GTK, and you must refer
-  to GTK's documentation.
-  For ML defined defaults, usually default values are either false, 0, None
-  or `NONE, according to the expected type.
-  Important exceptions are ~show, which default to true in all widgets
-  except those in GWindow, and ~fill, which defaults to true or `BOTH.
-
-Note about unit as method argument:
-
-  O'Caml introduces no distinction between methods having side-effects
-  and methods simply returning a value. In practice, this is
-  confusing, and awkward when used as callbacks. For this reason all
-  methods having noticeable side-effects should take arguments, and
-  unit if they have no argument.
-
-Memory management:
-
-  Important efforts have been dedicated to cooperate with Gtk's
-  reference counting mechanism. As a result you should generally be
-  able to use Gdk/Gtk data structures without caring about memory
-  management. They will be freed when nobody points to them any more.
-  This also means that you do not need to pay too much attention to
-  whether a data structure is still alive or not. If it is not, you
-  should get an error rather than a core dump.
-  The case of Gtk objects deserves special care. Since they are
-  interactive, we cannot just destroy them when they are no longer
-  referenced. They have to be explicitely destroyed. If a widget was
-  added to a container widget, it will automatically be destroyed when
-  its last container is destroyed. For this reason you need only
-  destroy toplevel widgets.
-
-GL extension
-
-  You can use lablgtk in combination with LablGL
-
-  * get and install lablGL 0.94 from
-    http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgl.html
-  * get and install gtkglarea-1.2.x.tar.gz from
-    http://www.student.oulu.fi/~jlof/gtkglarea/index.html
-  * reconfigure: "make configure USE_GL=1"
-
-  You can then use the widget GlGtk.gl_area as an OpenGL window.
-  Some examples are in examples/GL, but basically any LablGL example
-  can be easily ported.
-
-Windows port
-
-  A Win32 port is provided. In order to compile it, you will need to
-  get and unpack glib-dev-????.zip and gtk+-dev-????.zip from
-        http://www.gimp.org/~tml/gimp/win32/
-  Do not forget to get also extralibs-dev-????.zip, since you will
-  need some of the DLLs.
-
-  Edit config.make.nt, then, using Visual C++,
-        nmake -f Makefile.nt
-        nmake -f Makefile.nt opt        (if you have an MS Assembler)
-  Then install with
-        nmake -f Makefile.nt install
-
-  Since the link is dynamic you will also need to have in your path:
-  gnu-intl.dll (extralibs), glib-1.3.dll, module-1.3.dll and
-  gthread-1.3.dll (glib), gdk-1.3.dll and gtk-1.3.dll (gtk+).
-
-  I checked with the 2000-02-02 version of these libraries.
-  Currently threads do not seem to work, but otherwise everything
-  seems OK. In particular, you can run all examples, and build
-  applications\unison as usual.
-
-Authors:
-       Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
-       Hubert Fauque  <hubert.fauque@wanadoo.fr>
-       Jun Furuse     <Jun.Furuse@inria.fr>
-       Koji Kagawa    <kagawa@eng.kagawa-u.ac.jp>
-                                  
-Bug reports:
-       Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
-
-$Id$
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/.cvsignore b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/.cvsignore
deleted file mode 100644 (file)
index bc09d74..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-olabl-src
-browser
-.depend
\ No newline at end of file
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/Makefile b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/Makefile
deleted file mode 100644 (file)
index 8822e47..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# $Id$
-# Makefile for lablgtk.
-
-all: browser
-
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-COMPILER = $(CAMLC) $(MLFLAGS) -labels -w s -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -labels -w s -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-
-RANLIB = ranlib
-
-include ../../config.make
-
-MLFLAGS = -I ../.. -I ocaml-src/utils -I ocaml-src/parsing
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-
-# Targets
-MLOBJS = text.cmo file.cmo lexical.cmo shell.cmo editor.cmo
-
-browser: $(MLOBJS)
-       $(LINKER) -o $@ toplevellib.cma str.cma unix.cma \
-           lablgtk.cma $(MLOBJS) 
-
-clean:
-       rm -f *.cm* browser
-
-.depend:
-       ocamldep *.ml *.mli > .depend
-
-include .depend
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/README b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/README
deleted file mode 100644 (file)
index a6f01ce..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-       Browser: the beginning of a port of the LablBrowser
-
-Installation:
-
-* make a link from a directory where the O'Labl distribution is
-  compiled to olabl-src
-       ln -s /path/to/olabl/ocaml-2.02 olabl-src
-  (actually only the directory parsing needs to be compiled)
-
-* just type "make"
-
-Use:
-
-When you run browser, you just get a customized editor with lexical
-coloring. Nothing very fancy.
-In the file menu you can open a shell, running olabl as subprocess.
-
-Jacques Garrigue
\ No newline at end of file
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/TODO b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/TODO
deleted file mode 100644 (file)
index 0c8bb53..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-* lexical coloring (done)
-* hyperlinks (call signal with position)
-* keyboard popup
-* protection
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/editor.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/editor.ml
deleted file mode 100644 (file)
index d4adbfb..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-class editor ?packing ?show () =
-  let text = GEdit.text ~editable:true ?packing ?show () in
-object (self)
-  inherit GObj.widget text#as_widget
-
-  val mutable filename = None
-
-  method text = text
-
-  method load_file name =
-    try
-      let ic = open_in name in
-      filename <- Some name;
-      text#freeze ();
-      text#delete_text ~start:0 ~stop:text#length;
-      let buf = String.create 1024 and len = ref 0 in
-      while len := input ic ~buf ~pos:0 ~len:1024; !len > 0 do
-       if !len = 1024 then text#insert buf
-       else text#insert (String.sub buf ~pos:0 ~len:!len)
-      done;
-      text#set_point 0;
-      text#thaw ();
-      close_in ic
-    with _ -> ()
-
-  method open_file () = File.dialog ~title:"Open" ~callback:self#load_file ()
-
-  method save_file () =
-    File.dialog ~title:"Save" ?filename () ~callback:
-      begin fun name ->
-       try
-         if Sys.file_exists name then Sys.rename ~src:name ~dst:(name ^ "~");
-         let oc = open_out name in
-         output_string oc (text#get_chars ~start:0 ~stop:text#length);
-         close_out oc
-       with _ -> prerr_endline "Save failed"
-      end
-end
-
-open GdkKeysyms
-
-class editor_window ?(show=false) () =
-  let window = GWindow.window ~width:500 ~height:300
-      ~title:"Program Editor" () in
-  let vbox = GPack.vbox ~packing:window#add () in
-
-  let menubar = GMenu.menu_bar ~packing:vbox#pack () in
-  let factory = new GMenu.factory menubar in
-  let accel_group = factory#accel_group
-  and file_menu = factory#add_submenu "File"
-  and edit_menu = factory#add_submenu "Edit"
-  and comp_menu = factory#add_submenu "Compiler" in
-
-  let hbox = GPack.hbox ~packing:vbox#add () in
-  let scrollbar =
-    GRange.scrollbar `VERTICAL ~packing:(hbox#pack ~from:`END) ()
-  and editor = new editor ~packing:hbox#add () in
-object (self)
-  inherit GObj.widget window#as_widget
-
-  method window = window
-  method editor = editor
-  method show = window#show
-
-  initializer
-    window#connect#destroy ~callback:Main.quit;
-    let factory = new GMenu.factory file_menu ~accel_group in
-    factory#add_item "Open..." ~key:_O ~callback:editor#open_file;
-    factory#add_item "Save..." ~key:_S ~callback:editor#save_file;
-    factory#add_item "Shell"
-      ~callback:(fun () -> Shell.f ~prog:"ocaml" ~title:"Objective Caml Shell");
-    factory#add_separator ();
-    factory#add_item "Quit" ~key:_Q ~callback:window#destroy;
-    let factory = new GMenu.factory edit_menu ~accel_group in
-    factory#add_item "Copy" ~key:_C ~callback:editor#text#copy_clipboard;
-    factory#add_item "Cut" ~key:_X ~callback:editor#text#cut_clipboard;
-    factory#add_item "Paste" ~key:_V ~callback:editor#text#paste_clipboard;
-    factory#add_separator ();
-    factory#add_check_item "Word wrap" ~active:false
-      ~callback:editor#text#set_word_wrap;
-    factory#add_check_item "Read only" ~active:false
-      ~callback:(fun b -> editor#text#set_editable (not b));
-    let factory = new GMenu.factory comp_menu ~accel_group in
-    factory#add_item "Lex" ~key:_L
-      ~callback:(fun () -> Lexical.tag editor#text);
-    window#add_accel_group accel_group;
-    editor#text#set_vadjustment scrollbar#adjustment;
-    if show then self#show ()
-end
-
-let _ =
-  Main.init ();
-  if Array.length Sys.argv >= 2 && Sys.argv.(1) = "-shell" then
-    Shell.f ~prog:"ocaml" ~title:"Objective Caml Shell"
-  else
-    ignore (new editor_window ~show:true ());
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/file.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/file.ml
deleted file mode 100644 (file)
index e9c0cf3..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-(* $Id$ *)
-
-let dialog ~title ~callback ?filename () =
-  let sel =
-    GWindow.file_selection ~title ~modal:true ?filename () in
-  sel#cancel_button#connect#clicked ~callback:sel#destroy;
-  sel#ok_button#connect#clicked ~callback:
-    begin fun () ->
-      let name = sel#get_filename in
-      sel#destroy ();
-      callback name
-    end;
-  sel#show ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/lexical.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/lexical.ml
deleted file mode 100644 (file)
index 9acb9c0..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-(* $Id$ *)
-
-open Parser
-
-type tags = [`none|`control|`define|`structure|`char|`infix|`label|`uident]
-
-let colors : (tags * GDraw.color) list Lazy.t =
-  lazy
-    (List.map ~f:(fun (tag,col) -> tag, `COLOR (GDraw.color (`NAME col)))
-       [ `control, "blue";
-        `define, "forestgreen";
-        `structure, "purple";
-        `char, "gray40";
-        `infix, "indianred4";
-        `label, "brown";
-        `uident, "midnightblue";
-         `none, "black" ])
-
-let tag ?(start=0) ?stop:pend (tw : GEdit.text) =
-  let pend = Gaux.default tw#length ~opt:pend in
-  let colors = Lazy.force colors in
-  tw#freeze ();
-  let position = tw#position
-  and text = tw#get_chars ~start ~stop:pend in
-  let replace ~start:pstart ~stop:pend ~tag =
-    if pend > pstart then begin
-      tw#delete_text ~start:(start+pstart) ~stop:(start+pend);
-      tw#set_point (start+pstart);
-      tw#insert ~foreground:(List.assoc tag colors)
-       (String.sub text ~pos:pstart ~len:(pend-pstart));
-    end
-  and next_lf = ref (-1) in
-  let colorize ~start:rstart ~stop:rend ~tag =
-    let rstart = ref rstart in
-    while !rstart < rend do
-      if !next_lf < !rstart then begin
-       try next_lf := String.index_from text !rstart '\n'
-       with Not_found -> next_lf := pend-start
-      end;
-      replace ~start:!rstart ~stop:(min !next_lf rend) ~tag;
-      rstart := !next_lf + 1
-    done
-  in
-  let buffer = Lexing.from_string text
-  and last = ref (EOF, 0, 0)
-  and last_pos = ref 0 in
-  try
-    while true do
-    let token = Lexer.token buffer
-    and start = Lexing.lexeme_start buffer
-    and stop = Lexing.lexeme_end buffer in
-    let tag =
-      match token with
-        AMPERAMPER
-      | AMPERSAND
-      | BARBAR
-      | DO | DONE
-      | DOWNTO
-      | ELSE
-      | FOR
-      | IF
-      | LAZY
-      | MATCH
-      | OR
-      | THEN
-      | TO
-      | TRY
-      | WHEN
-      | WHILE
-      | WITH
-          -> `control
-      | AND
-      | AS
-      | BAR
-      | CLASS
-      | CONSTRAINT
-      | EXCEPTION
-      | EXTERNAL
-      | FUN
-      | FUNCTION
-      | FUNCTOR
-      | IN
-      | INHERIT
-      | INITIALIZER
-      | LET
-      | METHOD
-      | MODULE
-      | MUTABLE
-      | NEW
-      | OF
-      | PARSER
-      | PRIVATE
-      | REC
-      | TYPE
-      | VAL
-      | VIRTUAL
-          -> `define
-      | BEGIN
-      | END
-      | INCLUDE
-      | OBJECT
-      | OPEN
-      | SIG
-      | STRUCT
-          -> `structure
-      | CHAR _
-      | STRING _
-          -> `char
-      | BACKQUOTE
-      | INFIXOP1 _
-      | INFIXOP2 _
-      | INFIXOP3 _
-      | INFIXOP4 _
-      | PREFIXOP _
-      | QUESTION2
-      | SHARP
-          -> `infix
-      | LABEL _
-      | OPTLABEL _
-      | QUESTION
-      | TILDE
-          -> `label
-      | UIDENT _ -> `uident
-      | LIDENT _ ->
-          begin match !last with
-            (QUESTION | TILDE), _, _ -> `label
-          | _ -> `none
-          end
-      | COLON ->
-          begin match !last with
-            LIDENT _, lstart, lstop when lstop = start ->
-              colorize ~tag:`none ~start:!last_pos ~stop:lstart;
-              colorize ~tag:`label ~start:lstart ~stop;
-              last_pos := stop;
-              `none
-          | _ -> `none
-          end
-      | EOF -> raise End_of_file
-      | _ -> `none
-    in
-    if tag <> `none then begin
-      colorize ~tag:`none ~start:!last_pos ~stop:start;
-      colorize ~tag ~start ~stop;
-      last_pos := stop
-    end;
-    last := (token, start, stop)
-    done
-  with exn ->
-    colorize ~tag:`none ~start:!last_pos ~stop:(pend-start);
-    tw#thaw ();
-    tw#set_position position;
-    tw#set_point position;
-    match exn with
-      End_of_file | Lexer.Error _ -> ()
-    | _ -> raise exn
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/list2.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/list2.ml
deleted file mode 100644 (file)
index 0d7798a..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(* $Id$ *)
-
-let rec cut l ~len =
-  if len <= 0 then [], l else
-  match l with
-    a::l ->
-      let l1, l2 = cut l ~len:(len-1) in
-      a::l1, l2
-  | [] ->
-      invalid_arg "cut_list"
-
-let rec chop l ~len =
-  if l = [] then [] else
-  let l1, l2 =
-    try cut_list l ~len
-    with Invalid_argument _ -> l, []
-  in
-  l1 :: chop l2 ~len
-
-
-let rec iteri_aux ~f:f ~i = function
-    [] -> ()
-  | a::l -> f ~i a; iteri_aux ~f:f ~i:(i+1) l
-
-let iteri = iteri_aux ~i:0
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/shell.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/shell.ml
deleted file mode 100644 (file)
index fbe0f92..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-(* $Id$ *)
-
-open GdkKeysyms
-open Printf
-
-(* Nice history class. May reuse *)
-
-class ['a] history () = object
-  val mutable history = ([] : 'a list)
-  val mutable count = 0
-  method empty = history = []
-  method add s = count <- 0; history <- s :: history
-  method previous =
-    let s = List.nth history count in
-    count <- (count + 1) mod List.length history;
-    s
-  method next =
-    let l = List.length history in
-    count <- (l + count - 1) mod l;
-    List.nth history ((l + count - 1) mod l)
-end
-
-(* The shell class. Now encapsulated *)
-
-let protect f x = try f x with _ -> ()
-
-class shell ~prog ~args ~env ?packing ?show () =
-  let (in2,out1) = Unix.pipe ()
-  and (in1,out2) = Unix.pipe ()
-  and (err1,err2) = Unix.pipe () in
-  let _ = List.iter ~f:Unix.set_nonblock [out1;in1;err1] in
-object (self)
-  val textw = GEdit.text ~editable:true ?packing ?show ()
-  val pid = Unix.create_process_env
-      ~prog ~args ~env ~stdin:in2 ~stdout:out2 ~stderr:err2
-  val out = Unix.out_channel_of_descr out1
-  val h = new history ()
-  val mutable alive = true
-  val mutable reading = false
-  val mutable input_start = 0
-  method text = textw
-  method alive = alive
-  method kill () =
-    textw#set_editable false;
-    if alive then begin
-      alive <- false;
-      protect close_out out;
-      List.iter ~f:(protect Unix.close) [in1; err1; in2; out2; err2];
-      try
-       Unix.kill ~pid ~signal:Sys.sigkill;
-       Unix.waitpid pid ~mode:[]; ()
-      with _ -> ()
-    end
-  method interrupt () =
-    if alive then try
-      reading <- false;
-      Unix.kill ~pid ~signal:Sys.sigint
-    with Unix.Unix_error _ -> ()
-  method send s =
-    if alive then try
-      output_string out s;
-      flush out
-    with Sys_error _ -> ()
-  method private read ~fd ~len =
-    try
-      let buf = String.create len in
-      let len = Unix.read fd ~buf ~pos:0 ~len in
-      if len > 0 then begin
-       textw#set_position textw#length;
-       self#insert (String.sub buf ~pos:0 ~len);
-       input_start <- textw#position;
-      end;
-      len
-    with Unix.Unix_error _ -> 0
-  method history (dir : [`next|`previous]) =
-    if not h#empty then begin
-      if reading then begin
-       textw#delete_text ~start:input_start ~stop:textw#position;
-      end else begin
-       reading <- true;
-       input_start <- textw#position
-      end;
-      self#insert (if dir = `previous then h#previous else h#next);
-    end
-  val mutable lexing = false
-  method private lex ~start ~stop:e =
-    if not lexing && start < e then begin
-      lexing <- true;
-      Lexical.tag textw ~start ~stop:e;
-      lexing <- false
-    end
-  method insert ?(lex=true) text =
-    let start = Text.line_start textw in
-    textw#insert text;
-    if lex then self#lex ~start ~stop:(Text.line_end textw)
-  method private keypress c =
-    if not reading & c > " " then begin
-      reading <- true;
-      input_start <- textw#position
-    end
-  method private return () =
-    if reading then reading <- false
-    else input_start <- textw#position;
-    textw#set_position (Text.line_end textw);
-    let s = textw#get_chars ~start:input_start ~stop:textw#position in
-    h#add s;
-    self#send s;
-    self#send "\n"
-  method private paste () =
-    if not reading then begin
-      reading <- true;
-      input_start <- textw#position;
-    end
-  initializer
-    textw#event#connect#key_press ~callback:
-      begin fun ev ->
-       if GdkEvent.Key.keyval ev = _Return && GdkEvent.Key.state ev = []
-       then self#return ()
-       else self#keypress (GdkEvent.Key.string ev);
-        false
-      end;
-    textw#connect#after#insert_text ~callback:
-      begin fun s ~pos ->
-        if not lexing then
-          self#lex ~start:(Text.line_start textw ~pos:(pos - String.length s))
-            ~stop:(Text.line_end textw ~pos)
-      end;
-    textw#connect#after#delete_text ~callback:
-      begin fun ~start:pos ~stop ->
-        if not lexing then
-          self#lex ~start:(Text.line_start textw ~pos)
-            ~stop:(Text.line_end textw ~pos)
-      end;
-    textw#event#connect#button_press ~callback:
-      begin fun ev ->
-       if GdkEvent.Button.button ev = 2 then self#paste ();
-       false
-      end;
-    textw#connect#destroy ~callback:self#kill;
-    GMain.Timeout.add ~ms:100 ~callback:
-      begin fun () ->
-       if alive then begin
-         List.iter [err1;in1]
-           ~f:(fun fd -> while self#read ~fd ~len:1024 = 1024 do () done);
-         true
-       end else false
-      end;
-    ()
-end
-
-(* Specific use of shell, for LablBrowser *)
-
-let shells : (string * shell) list ref = ref []
-
-(* Called before exiting *)
-let kill_all () =
-  List.iter !shells ~f:(fun (_,sh) -> if sh#alive then sh#kill ());
-  shells := []
-let _ = at_exit kill_all
-
-let get_all () =
-  let all = List.filter !shells ~f:(fun (_,sh) -> sh#alive) in
-  shells := all;
-  all
-
-let may_exec prog =
-  try Unix.access prog ~perm:[Unix.X_OK]; true
-  with Unix.Unix_error _ -> false
-
-let f ~prog ~title =
-  let progargs =
-    List.filter ~f:((<>) "") (Str.split ~sep:(Str.regexp " ") prog) in
-  if progargs = [] then () else
-  let prog = List.hd progargs in
-  let path = try Sys.getenv "PATH" with Not_found -> "/bin:/usr/bin" in
-  let exec_path = Str.split ~sep:(Str.regexp":") path in
-  let prog =
-    if not (Filename.is_implicit prog) then
-      if may_exec prog then prog else ""
-    else
-      List.fold_left exec_path ~init:"" ~f:
-       begin fun acc dir ->
-         if acc <> "" then acc else
-         let prog = Filename.concat dir prog in
-         if may_exec prog then prog else acc
-       end
-  in
-  if prog = "" then () else
-  let reg = Str.regexp "TERM=" in
-  let env = Array.map (Unix.environment ()) ~f:
-      begin fun s ->
-       if Str.string_match ~pat:reg s ~pos:0 then "TERM=dumb" else s
-      end in
-  let load_path =
-    List.flatten (List.map !Config.load_path ~f:(fun dir -> ["-I"; dir])) in
-  let args = Array.of_list (progargs @ load_path) in
-  let current_dir = ref (Unix.getcwd ()) in
-
-  let tl = GWindow.window ~title ~width:500 ~height:300 () in
-  let vbox = GPack.vbox ~packing:tl#add () in
-  let menus = GMenu.menu_bar ~packing:vbox#pack () in
-  let f = new GMenu.factory menus in
-  let accel_group = f#accel_group in
-  let file_menu = f#add_submenu "File"
-  and history_menu = f#add_submenu "History"
-  and signal_menu = f#add_submenu "Signal" in
-
-  let hbox = GPack.hbox ~packing:vbox#add () in
-  let sh = new shell ~prog ~env ~args ~packing:hbox#add () in
-  let sb =
-    GRange.scrollbar `VERTICAL ~adjustment:sh#text#vadjustment
-      ~packing:hbox#pack ()
-  in
-
-  let f = new GMenu.factory file_menu ~accel_group in
-  f#add_item "Use..." ~callback:
-    begin fun () ->
-      File.dialog ~title:"Use File" ~filename:(!current_dir ^ "/") () ~callback:
-       begin fun name ->
-         current_dir := Filename.dirname name;
-         if Filename.check_suffix name ".ml" then
-           let cmd = "#use \"" ^ name ^ "\";;\n" in
-           sh#insert cmd;
-           sh#send cmd
-       end
-    end;
-  f#add_item "Load..." ~callback:
-    begin fun () ->
-      File.dialog ~title:"Load File" ~filename:(!current_dir ^ "/") () ~callback:
-       begin fun name ->
-         current_dir := Filename.dirname name;
-         if Filename.check_suffix name ".cmo" or
-           Filename.check_suffix name ".cma"
-         then
-           let cmd = Printf.sprintf "#load \"%s\";;\n" name in
-           sh#insert cmd;
-           sh#send cmd
-       end
-    end;
-  f#add_item "Import path" ~callback:
-    begin fun () ->
-      List.iter (List.rev !Config.load_path)
-       ~f:(fun dir -> sh#send (sprintf "#directory \"%s\";;\n" dir))
-    end;
-  f#add_item "Close" ~key:_W ~callback:tl#destroy;
-
-  let h = new GMenu.factory history_menu ~accel_group ~accel_modi:[`MOD1] in
-  h#add_item "Previous" ~key:_P ~callback:(fun () -> sh#history `previous);
-  h#add_item "Next" ~key:_N ~callback:(fun () -> sh#history `next);
-  let s = new GMenu.factory signal_menu ~accel_group in
-  s#add_item "Interrupt" ~key:_G ~callback:sh#interrupt;
-  s#add_item "Kill" ~callback:sh#kill;
-  shells := (title, sh) :: !shells;
-  tl#add_accel_group accel_group;
-  tl#show ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/text.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/text.ml
deleted file mode 100644 (file)
index 729f310..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-(* $Id$ *)
-
-open GEdit
-
-let line_start ?pos (text : GEdit.text) =
-  let pos = Gaux.default text#position ~opt:pos in
-  if pos = 0 then 0 else
-  let start = max 0 (pos-256) in
-  let buffer = text#get_chars ~start ~stop:pos in
-  try start + String.rindex buffer '\n' with Not_found -> 0
-
-let line_end ?pos (text : GEdit.text) =
-  let pos = Gaux.default text#position ~opt:pos in
-  if pos = text#length then text#length else
-  let buffer = text#get_chars ~start:pos ~stop:(min text#length (pos+256)) in
-  try pos + String.index buffer '\n' with Not_found -> text#length
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/useunix.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/useunix.ml
deleted file mode 100644 (file)
index c4860a8..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-(* $Id$ *)
-
-open Unix
-
-let get_files_in_directory dir =
-  try
-  let dirh = opendir dir in
-  let rec get_them () =
-    try
-      let x = readdir dirh in
-      x :: get_them ()
-    with
-      _ -> closedir dirh; [] 
-  in
-    Sort.list ~order:(<) (get_them ())
-  with Unix_error _ -> []
-
-let is_directory name =
-  try
-    (stat name).st_kind = S_DIR
-  with _ -> false
-
-let get_directories_in_files ~path =
-  List.filter ~pred:(fun x -> is_directory  (path ^ "/" ^ x))
-
-(************************************************** Subshell call *)
-let subshell ~cmd =
-  let rc = open_process_in ~cmd in
-  let rec it () =
-    try 
-      let x = input_line rc in x :: it ()
-    with _ -> []
-  in 
-  let answer = it () in
-  close_process_in rc;
-  answer
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/widgets.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/browser/widgets.ml
deleted file mode 100644 (file)
index c27ca9f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-(* $Id$ *)
-
-open GObj
-
-class multibox ~rows ~columns ?(row_view = rows) ?(col_view = columns)
-    ?packing ?show () =
-  let sw =
-    GBin.scrolled_window ~hpolicy:`AUTOMATIC ~vpolicy:`AUTOMATIC
-      ?show ?packing () in
-  let vp = GBin.viewport ~shadow_type:`NONE ~packing:sw#add in
-  let table =
-    GPack.table ~columns ~rows ~homogeneous:true ~packing:vp#add () in
-  let buttons =
-    Array.init ~len:columns
-      ~f:(fun left -> Array.init ~len:rows
-         ~f:(fun top -> GButton.button
-              ~packing:(table#attach ~top ~left ~expand:`BOTH)))
-  in
-  object (self)
-    inherit widget sw#as_widget
-    method cell ~col ~row = buttons.(col).(row)
-    initializer
-      let id = ref None in
-      id := Some
-         (sw#event#connect#expose ~after:true ~callback:
-            begin fun _ ->
-              may !id ~f:sw#connect#disconnect;
-              let height = table#misc#allocation.height * row_view / rows
-              and width = table#misc#allocation.width * col_view / columns in
-              vp#misc#set_size ~height ~width;
-              false
-            end);
-      table#focus#set_vadjustment vp#vadjustment
-  end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/.cvsignore b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/.cvsignore
deleted file mode 100644 (file)
index a2d75da..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-.depend radtest
-*_parser.ml *_parser.mli
-*_lexer.ml
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/CHANGES b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/CHANGES
deleted file mode 100644 (file)
index e87fc0a..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-$Id$
-
-2000.05.15
-  * suppressed treew.ml; replaced by ti*.ml
-  * new widgets
-  * less known bugs  (Hubert)
-1999.10.28
-  * re-objectified property.ml
-  * split it into common.mli/property.ml/propwin.ml
-  * undo is back
-  * restructure menu code in main.ml
-
-1999.10.27
-  * simplified property.ml, and corrected treew.ml accordingly.
-    undo is temporarily disabled.
-    (Jacques)
\ No newline at end of file
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/Makefile b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/Makefile
deleted file mode 100644 (file)
index 175eca9..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# $Id$
-# Makefile for lablgtk.
-
-all: radtest
-
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-COMPILER = $(CAMLC) $(MLFLAGS) -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-
-RANLIB = ranlib
-
-include ../../config.make
-
-MLFLAGS = -I ../.. -w s -labels
-
-ifdef DEBUG
-CFLAGS = -g $(GTKCFLAGS)
-MLFLAGS += -g
-else
-CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS)
-endif
-
-ifdef USE_CC
-CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS)
-else
-CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)"
-endif
-
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def
-.c.o:
-       $(CCOMPILER) $<
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-
-# Targets
-MLOBJS = utils.cmo property.cmo propwin.cmo \
-       load_parser.cmo load_lexer.cmo tiBase.cmo tiContainer.cmo tiBin.cmo \
-       tiButton.cmo tiEdit.cmo tiList.cmo tiMisc.cmo tiPack.cmo tiWindow.cmo \
-       tiWidget.cmo main.cmo
-
-MLSRC = common.mli utils.ml property.mli property.ml propwin.mli \
-       propwin.ml \
-       load_parser.ml load_lexer.ml tiBase.ml tiContainer.ml tiBin.ml \
-       tiButton.ml tiEdit.ml tiList.ml tiMisc.ml tiPack.ml tiWindow.ml \
-       tiWidget.ml main.ml
-
-radtest: $(MLOBJS)  libgtk2.a gtk2.cma
-       $(LINKER) -o $@ lablgtk.cma gtkInit.cmo -I . gtk2.cma \
-           $(MLOBJS)
-
-radtestopt: $(MLOBJS:.cmo=.cmx) libgtk2.a gtk2.cmxa
-       $(LINKOPT) -o $@ lablgtk.cmxa gtkInit.cmx -I . gtk2.cmxa \
-           $(MLOBJS:.cmo=.cmx)
-
-%.mli %.ml: %.mly
-       ocamlyacc $<
-
-%.ml: %.mll
-       ocamllex $<
-
-libgtk2.a: gtktree2.o gtktreeitem2.o ml_gtk2.o
-       ar rc $@ gtktree2.o gtktreeitem2.o ml_gtk2.o
-       $(RANLIB) $@
-
-gtk2.cma: gtkTree2.cmo gTree2.cmo gToolbar2.cmo libgtk2.a
-       $(LINKER) -a -o $@ gtkTree2.cmo gTree2.cmo gToolbar2.cmo -cclib -lgtk2
-
-gtk2.cmxa: gtkTree2.cmx gTree2.cmx gToolbar2.cmx libgtk2.a
-       $(LINKOPT) -a -o $@ gtkTree2.cmx gTree2.cmx gToolbar2.cmx -cclib -lgtk2
-
-clean:
-       rm -f *.cm* *.o *.a radtest *_parser.ml *_parser.mli *_lexer.ml
-
-.depend: $(MLSRC) load_parser.ml load_lexer.ml
-       ocamldep $(MLSRC) load_parser.ml* load_lexer.ml* > .depend
-
-include .depend
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/README b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/README
deleted file mode 100644 (file)
index aedd81f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-       Lablgtk RADTEST
-
-Author: Hubert Fauque, hubert.fauque@inria.fr
-
-This is an experimental R.A.D. for Lablgtk.
-You can compile it simply by make.
-
-
-When radtest starts a new empty project is open;
-you can add new windows to this project by clicking on
-the window icon at the top of the icons window;
-
-by clicking on an item in the tree window with the third button
-you can add or remove widgets;
-you can also drag widgets from the icons window and drop them
-on the tree;
-
-when a widget is selected (click on it in the tree) you can
-move it up or down (if its parent is a box) with CTRL-up_arrow
-or CTRL-down_arrow; with up_arrow and down_arrow you select
-the widget which is above or below the currently selected widget;
-
-Save the project by Project->Save, and load an already existing
-project by Project->Open.
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/aspectframe.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/aspectframe.xpm
deleted file mode 100644 (file)
index 66b9ca1..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *aspectframe_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++   + +++++++++++",
-"+...X X X   X......O+",
-"+.OOX   X X XOOOOO.O+",
-"+.OXX X X   XXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXX.XXXXXXX.O+",
-"+.OXXXXXX...XXXXXX.O+",
-"+.OXXXXX.X.X.XXXXX.O+",
-"+.OXXXXXXX.XXXXXXX.O+",
-"+.OXX.XXXX.XXXX.XX.O+",
-"+.OX.XXXXX.XXXXX.X.O+",
-"+.O................O+",
-"+.OX.XXXXX.XXXXX.X.O+",
-"+.OXX.XXXX.XXXX.XX.O+",
-"+.OXXXXX.X.X.XXXXX.O+",
-"+.OXXXXXX...XXXXXX.O+",
-"+.OXXXXXXX.XXXXXXX.O+",
-"+..................O+",
-"+OOOOOOOOOOOOOOOOOOO+",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/button.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/button.xpm
deleted file mode 100644 (file)
index 62ebc30..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *button_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+OOOOOOOOOOOOOOOOOO +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXX   XXX XXX XX. +",
-"+OXX XXX XX XX XXX. +",
-"+OXX XXX XX X XXXX. +",
-"+OXX XXX XX  XXXXX. +",
-"+OXX XXX XX X XXXX. +",
-"+OXX XXX XX XX XXX. +",
-"+OXXX   XXX XXX XX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+O................. +",
-"+                   +",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/checkbutton.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/checkbutton.xpm
deleted file mode 100644 (file)
index 314ba97..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *checkbutton_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++OOOOOOOOOOO+++++",
-"+++++OXXXXXXXXX +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OX........ +++++",
-"+++++O          +++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/clist.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/clist.xpm
deleted file mode 100644 (file)
index 2dd61e7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* XPM */
-static char *clist_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 3 1",
-"  c Gray0",
-". c Gray87",
-"X c Gray100",
-/* pixels */
-"                     ",
-" ...... ...... ..... ",
-" ...... ...... ..... ",
-" ...... ...... ..... ",
-"                     ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-"                     ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-"                     ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-"                     ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-"                     "
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/colorselection.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/colorselection.xpm
deleted file mode 100644 (file)
index 0bb0914..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/* XPM */
-static char *colorselection_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 8 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c Blue",
-"o c Green",
-"O c Red",
-"+ c #b3cece",
-"@ c Gray100",
-"# c None",
-/* pixels */
-"#####################",
-"#####################",
-"#####################",
-"#####################",
-"#####################",
-"##................###",
-"##.@@@@@@@@@@@@@@. ##",
-"##.@@@@@@@@@@@@@@. ##",
-"##.@@@@@@@@@@@@@@. ##",
-"##.@@OOOoooXXX@@@. ##",
-"##.@@OOOoooXXX@@@. ##",
-"##.@@OOOoooXXX@@@. ##",
-"##.@@OOOoooXXX@@@. ##",
-"##.@@@@@@@@@@@@@@. ##",
-"##.@@@@@@@@@@@@@@. ##",
-"##.@@@@@@@@@@@@@@. ##",
-"##................ ##",
-"###                ##",
-"#####################",
-"#####################",
-"#####################"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/combo.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/combo.xpm
deleted file mode 100644 (file)
index 3b4055b..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* XPM */
-static char *combo_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 7 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray87",
-"+ c Gray100",
-"@ c None",
-/* pixels */
-"@@@@@@@@@@@@@@@@@@@@@",
-"                     ",
-" +++++++++++++ OOOOO ",
-" +++++++++++++  OOO  ",
-" +++++++++++++   O   ",
-"                     ",
-" +++++++++++++ ++++++",
-" +++++++++++++ XXXXX ",
-" +.........+++ XX XX ",
-" +++++++++++++ X   X ",
-" +++++++++++++ XXXXX ",
-" +...........+       ",
-" +++++++++++++ +++++ ",
-" +++++++++++++ +XXXX ",
-" +..........++ ..... ",
-" +++++++++++++ +++++ ",
-" +++++++++++++ XXXXX ",
-" +...........+ X   X ",
-" +++++++++++++ XX XX ",
-" +++++++++++++ XXXXX ",
-"                     "
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/common.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/common.mli
deleted file mode 100644 (file)
index 7050f9f..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-(* $Id$ *)
-
-type range =
-  |  String
-  | Int
-  | Float of float * float
-  | Enum of string list
-  | Enum_string of string list
-  | Adjust
-  | CList_titles
-  | File
-
-class type prop =
-  object
-    method name : string       (* name of the property *)
-    method range : range       (* range of its values *)
-    method get : string                (* current value *)
-    method set : string -> unit        (* change value *)
-    method modified : bool     (* value differs from default *)
-    method code : string       (* encoded value for the ml code *)
-    method save_code : string   (* encoded value for saving *)
-  end
-
-class type tiwidget_base = object
-  method name : string
-  method proplist : (string * prop) list
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/entry.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/entry.xpm
deleted file mode 100644 (file)
index cb90041..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *entry_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"....................O",
-".                  XO",
-". OOOOOOOOOOOOOOOOOXO",
-". OOOOOOOOOOOOOOO OXO",
-". OOOOOOOO OOOOOO OXO",
-". OOOOOOOO OOOOOO OXO",
-". OOO   OO X  OOO OXO",
-". OO XOX O  O. OO OXO",
-". OOOOOO O OOO OO OXO",
-". OOO    O OOO OO OXO",
-". OO XOO O OOO OO OXO",
-". OO XOO O OO. OO OXO",
-". OOO    O    OOO OXO",
-". OOOOOOOOOOOOOOO OXO",
-". OOOOOOOOOOOOOOOOOXO",
-".XXXXXXXXXXXXXXXXXXXO",
-"OOOOOOOOOOOOOOOOOOOOO",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/eventbox.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/eventbox.xpm
deleted file mode 100644 (file)
index 73da445..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* XPM */
-static char *eventbox_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 7 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c Blue",
-"o c #d6d6d6",
-"O c #b3cece",
-"+ c Gray100",
-"@ c None",
-/* pixels */
-"@@@@@@@@@@X+@@@@@@@@@",
-"@@@@@@@@@XX+@@@@@@@@@",
-"@@@@@@@@XX+@@@@@@@@@@",
-"@@@@@@@XX+@@@@@@@@@@@",
-"@@@@@@@@XX+@@@@@@@@@@",
-"@@@@@@@@@XX+@@@@@@@@@",
-"@@@@@@@@@@XX+@@@@@@@@",
-"@@@++++++XX++++++ @@@",
-"@@@+ooooXX+ooooo. @@@",
-"@@@+oooXX+oooooo. @@@",
-"@@@+ooooXX+ooooo. @@@",
-"@@@+oooooXX+oooo. @@@",
-"@@@+ooooooXX+ooo. @@@",
-"@@@+oooooooooooo. @@@",
-"@@@+oooooooooooo. @@@",
-"@@@+oooooooooooo. @@@",
-"@@@+............. @@@",
-"@@@               @@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/fixed.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/fixed.xpm
deleted file mode 100644 (file)
index 2e04815..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* XPM */
-static char *fixed_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 4 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c Gray100",
-/* pixels */
-"oooooooooooooooooooo ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXooooo XXXXXXXXXXX. ",
-"oXoXXX. XXXXXXXXXXX. ",
-"oXoXXX. XXXXooooo X. ",
-"oXo.... XXXXoXXX. X. ",
-"oX      XXXXoXXX. X. ",
-"oXXXXXXXXXXXo.... X. ",
-"oXXXXXXXXXXX      X. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXooooo XXXXXXXX. ",
-"oXXXXoXXX. XXXXXXXX. ",
-"oXXXXoXXX. XXXXXXXX. ",
-"oXXXXo.... XXXXXXXX. ",
-"oXXXX      XXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"o................... ",
-"                     "
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/frame.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/frame.xpm
deleted file mode 100644 (file)
index c8c8b57..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *frame_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++   + +++++++++++",
-"+...X X X   X......O+",
-"+.OOX   X X XOOOOO.O+",
-"+.OXX X X   XXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+..................O+",
-"+OOOOOOOOOOOOOOOOOOO+",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gToolbar2.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gToolbar2.ml
deleted file mode 100644 (file)
index c2ad0a8..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkButton
-open GObj
-open GContainer
-open GButton
-
-module Toolbar2 = struct
-  external set_text : [>`toolbar] obj -> string -> int -> unit =
-    "ml_gtk_toolbar2_set_text"
-  external set_icon : [>`toolbar] obj -> [>`widget] obj -> int -> unit =
-    "ml_gtk_toolbar2_set_icon"
-end
-
-class toolbar2 obj = object
-  inherit container_full (obj : Gtk.toolbar obj)
-  method insert_widget ?tooltip ?tooltip_private ?pos w =
-    Toolbar.insert_widget obj (as_widget w) ?tooltip ?tooltip_private ?pos
-
-  method insert_button ?text ?tooltip ?tooltip_private ?icon
-      ?pos ?callback () =
-    let icon = may_map icon ~f:as_widget in
-    new button
-      (Toolbar.insert_button obj ~kind:`BUTTON ?icon ?text
-        ?tooltip ?tooltip_private ?pos ?callback ())
-
-  method insert_toggle_button ?text ?tooltip ?tooltip_private ?icon
-      ?pos ?callback () =
-    let icon = may_map icon ~f:as_widget in
-    new toggle_button
-      (ToggleButton.cast
-        (Toolbar.insert_button obj ~kind:`TOGGLEBUTTON ?icon ?text
-           ?tooltip ?tooltip_private ?pos ?callback ()))
-
-  method insert_radio_button ?text ?tooltip ?tooltip_private ?icon
-      ?pos ?callback () =
-    let icon = may_map icon ~f:as_widget in
-    new radio_button
-      (RadioButton.cast
-        (Toolbar.insert_button obj ~kind:`RADIOBUTTON ?icon ?text
-           ?tooltip ?tooltip_private ?pos ?callback ()))
-
-  method insert_space = Toolbar.insert_space obj
-
-  method set_orientation = Toolbar.set_orientation obj
-  method set_style = Toolbar.set_style obj
-  method set_space_size = Toolbar.set_space_size obj
-  method set_space_style = Toolbar.set_space_style obj
-  method set_tooltips = Toolbar.set_tooltips obj
-  method set_button_relief = Toolbar.set_button_relief obj
-  method button_relief = Toolbar.get_button_relief obj
-  method set_text = Toolbar2.set_text obj
-  method set_icon (icon : widget) = Toolbar2.set_icon obj icon#as_widget
-end
-
-let toolbar2 ?(orientation=`HORIZONTAL) ?style
-    ?space_size ?space_style ?tooltips ?button_relief
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Toolbar.create orientation ?style () in
-  Toolbar.set w ?space_size ?space_style ?tooltips ?button_relief;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new toolbar2 w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gTree2.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gTree2.ml
deleted file mode 100644 (file)
index 62c38ac..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkTree2
-open GObj
-open GContainer
-
-class tree_item_signals obj = object
-  inherit item_signals obj
-  method expand = GtkSignal.connect obj ~sgn:TreeItem.Signals.expand ~after
-  method collapse = GtkSignal.connect obj ~sgn:TreeItem.Signals.collapse ~after
-end
-
-class tree_item obj = object
-  inherit container obj
-  method event = new GObj.event_ops obj
-  method as_item : Gtk.tree_item obj = obj
-  method connect = new tree_item_signals obj
-  method set_subtree (w : tree) = TreeItem.set_subtree obj w#as_tree
-  method remove_subtree () = TreeItem.remove_subtree obj
-  method expand () = TreeItem.expand obj
-  method collapse () = TreeItem.collapse obj
-  method subtree =
-    try Some(new tree (TreeItem.subtree obj)) with Gpointer.Null -> None
-end
-
-and tree_signals obj = object
-  inherit container_signals obj
-  method selection_changed =
-    GtkSignal.connect obj ~sgn:Tree.Signals.selection_changed ~after
-  method select_child ~callback =
-    GtkSignal.connect obj ~sgn:Tree.Signals.select_child ~after
-      ~callback:(fun w -> callback (new tree_item (TreeItem.cast w))) 
-  method unselect_child ~callback =
-    GtkSignal.connect obj ~sgn:Tree.Signals.unselect_child ~after
-      ~callback:(fun w -> callback (new tree_item (TreeItem.cast w))) 
-end
-
-and tree obj = object (self)
-  inherit [tree_item] item_container obj
-  method event = new GObj.event_ops obj
-  method as_tree = Tree.coerce obj
-  method insert w ~pos = Tree.insert obj w#as_item ~pos
-  method connect = new tree_signals obj
-  method clear_items = Tree.clear_items obj
-  method select_item = Tree.select_item obj
-  method unselect_item = Tree.unselect_item obj
-  method child_position (w : tree_item) = Tree.child_position obj w#as_item
-  method remove_items items =
-    Tree.remove_items obj
-      (List.map ~f:(fun (t : tree_item) -> t#as_item) items)
-(*  method set_selection_mode = Tree.set_selection_mode obj
-  method set_view_mode = Tree.set_view_mode obj *)
-  method set_view_lines = Tree.set_view_lines obj
-  method selection =
-    List.map ~f:(fun w -> self#wrap (Widget.coerce w)) (Tree.selection obj)
-  method item_up ~pos =
-    Tree.item_up obj pos
-  method private wrap w =
-    new tree_item (TreeItem.cast w)
-end
-
-let tree_item ?label ?border_width ?width ?height ?packing ?show () =
-  let w = TreeItem.create ?label () in
-  Container.set w ?border_width ?width ?height;
-  let self = new tree_item w in
-  may packing ~f:(fun f -> (f self : unit));
-  if show <> Some false then self#misc#show ();
-  self
-
-let tree ?selection_mode ?view_mode ?view_lines
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Tree.create () in
-  Tree.set w ?selection_mode ?view_mode ?view_lines;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new tree w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gTree2.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gTree2.mli
deleted file mode 100644 (file)
index c288e15..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class tree_item_signals : 'a obj ->
-  object
-    inherit item_signals
-    constraint 'a = [>`treeitem|`container|`item|`widget]
-    val obj : 'a obj
-    method collapse : callback:(unit -> unit) -> GtkSignal.id
-    method expand : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class tree_item : Gtk.tree_item obj ->
-  object
-    inherit GContainer.container
-    val obj : Gtk.tree_item obj
-    method event : event_ops
-    method as_item : Gtk.tree_item obj
-    method collapse : unit -> unit
-    method connect : tree_item_signals
-    method expand : unit -> unit
-    method remove_subtree : unit -> unit
-    method set_subtree : tree -> unit
-    method subtree : tree option
-  end
-
-and tree_signals : Gtk.tree obj ->
-  object
-    inherit container_signals
-    val obj : Gtk.tree obj
-    method select_child : callback:(tree_item -> unit) -> GtkSignal.id
-    method selection_changed : callback:(unit -> unit) -> GtkSignal.id
-    method unselect_child : callback:(tree_item -> unit) -> GtkSignal.id
-  end
-
-and tree : Gtk.tree obj ->
-  object
-    inherit [tree_item] item_container
-    val obj : Gtk.tree obj
-    method event : event_ops
-    method as_tree : Gtk.tree obj
-    method child_position : tree_item -> int
-    method clear_items : start:int -> stop:int -> unit
-    method connect : tree_signals
-    method insert : tree_item -> pos:int -> unit
-    method item_up : pos:int -> unit
-    method remove_items : tree_item list -> unit
-    method select_item : pos:int -> unit
-    method selection : tree_item list
-(*    method set_selection_mode : Tags.selection_mode -> unit *)
-    method set_view_lines : bool -> unit
-(*    method set_view_mode : [`LINE|`ITEM] -> unit *)
-    method unselect_item : pos:int -> unit
-    method private wrap : Gtk.widget obj -> tree_item
-  end
-
-val tree_item :
-  ?label:string ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(tree_item -> unit) -> ?show:bool -> unit -> tree_item
-
-val tree :
-  ?selection_mode:Tags.selection_mode ->
-  ?view_mode:[`LINE|`ITEM] ->
-  ?view_lines:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int -> ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> tree
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtkTree2.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtkTree2.ml
deleted file mode 100644 (file)
index 46d1e02..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module TreeItem = struct
-  let cast w : tree_item obj =
-    if Object.is_a w "GtkTreeItem" then Obj.magic w
-    else invalid_arg "Gtk.TreeItem.cast"
-  external create : unit -> tree_item obj = "ml_gtk_tree_item2_new"
-  external create_with_label : string -> tree_item obj
-      = "ml_gtk_tree_item2_new_with_label"
-  let create ?label () =
-    match label with None -> create ()
-    | Some label -> create_with_label label
-  external set_subtree : [>`treeitem] obj -> [>`widget] obj -> unit
-      = "ml_gtk_tree_item2_set_subtree"
-  external remove_subtree : [>`treeitem] obj -> unit
-      = "ml_gtk_tree_item2_remove_subtree"
-  external expand : [>`treeitem] obj -> unit
-      = "ml_gtk_tree_item2_expand"
-  external collapse : [>`treeitem] obj -> unit
-      = "ml_gtk_tree_item2_collapse"
-  external subtree : [>`treeitem] obj -> tree obj
-      = "ml_GTK_TREE_ITEM2_SUBTREE"
-  let subtree t = try subtree t with Gpointer.Null -> raise Not_found
-  module Signals = struct
-    open GtkSignal
-    let expand : ([>`treeitem],_) t =
-      { name = "expand"; marshaller = marshal_unit }
-    let collapse : ([>`treeitem],_) t =
-      { name = "collapse"; marshaller = marshal_unit }
-  end
-end
-
-module Tree = struct
-  let cast w : tree obj =
-    if Object.is_a w "GtkTree" then Obj.magic w
-    else invalid_arg "Gtk.Tree.cast"
-  external coerce : [>`tree] obj -> tree obj = "%identity"
-  external create : unit -> tree obj = "ml_gtk_tree2_new"
-  external insert : [>`tree] obj -> [>`treeitem] obj -> pos:int -> unit
-      = "ml_gtk_tree2_insert"
-  external remove_items : [>`tree] obj -> [>`treeitem] obj list -> unit
-      = "ml_gtk_tree2_remove_items"
-  external clear_items : [>`tree] obj -> start:int -> stop:int -> unit
-      = "ml_gtk_tree2_clear_items"
-  external select_item : [>`tree] obj -> pos:int -> unit
-      = "ml_gtk_tree2_select_item"
-  external unselect_item : [>`tree] obj -> pos:int -> unit
-      = "ml_gtk_tree2_unselect_item"
-  external child_position : [>`tree] obj -> [>`treeitem] obj -> int
-      = "ml_gtk_tree2_child_position"
-(*  external set_selection_mode : [>`tree] obj -> selection_mode -> unit
-      = "ml_gtk_tree2_set_selection_mode"
-  external set_view_mode : [>`tree] obj -> [`LINE|`ITEM] -> unit
-      = "ml_gtk_tree2_set_view_mode"
-*)
-  external set_view_lines : [>`tree] obj -> bool -> unit
-      = "ml_gtk_tree2_set_view_lines"
-  external selection : [>`tree] obj -> tree_item obj list =
-    "ml_gtk_tree2_selection"
-  external item_up : [>`tree] obj -> int -> unit =
-    "ml_gtk_tree2_item_up"
-
-  let set ?selection_mode ?view_mode ?view_lines w =
-    let may_set f = may ~f:(f w) in
-(*    may_set set_selection_mode selection_mode;
-    may_set set_view_mode view_mode; *)
-    may_set set_view_lines view_lines
-  module Signals = struct
-    open GtkSignal
-    let selection_changed : ([>`tree],_) t =
-      { name = "selection_changed"; marshaller = marshal_unit }
-    let select_child : ([>`tree],_) t =
-      { name = "select_child"; marshaller = Widget.Signals.marshal }
-    let unselect_child : ([>`tree],_) t =
-      { name = "unselect_child"; marshaller = Widget.Signals.marshal }
-  end
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtktree2.c b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtktree2.c
deleted file mode 100644 (file)
index db37a1f..0000000
+++ /dev/null
@@ -1,1385 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "gtktree2.h"
-#include "gtktreeitem2.h"
-
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtklist.h>
-
-enum {
-  SELECTION_CHANGED,
-  SELECT_CHILD,
-  UNSELECT_CHILD,
-  LAST_SIGNAL
-};
-
-static void gtk_tree2_class_init      (GtkTree2Class   *klass);
-static void gtk_tree2_init            (GtkTree2        *tree);
-static void gtk_tree2_destroy         (GtkObject      *object);
-static void gtk_tree2_map             (GtkWidget      *widget);
-static void gtk_tree2_unmap           (GtkWidget      *widget);
-static void gtk_tree2_realize         (GtkWidget      *widget);
-static void gtk_tree2_draw            (GtkWidget      *widget,
-                                     GdkRectangle   *area);
-static gint gtk_tree2_expose          (GtkWidget      *widget,
-                                     GdkEventExpose *event);
-static gint gtk_tree2_motion_notify   (GtkWidget      *widget,
-                                     GdkEventMotion *event);
-static gint gtk_tree2_button_press    (GtkWidget      *widget,
-                                     GdkEventButton *event);
-static gint gtk_tree2_button_release  (GtkWidget      *widget,
-                                     GdkEventButton *event);
-static void gtk_tree2_size_request    (GtkWidget      *widget,
-                                     GtkRequisition *requisition);
-static void gtk_tree2_size_allocate   (GtkWidget      *widget,
-                                     GtkAllocation  *allocation);
-static void gtk_tree2_add             (GtkContainer   *container,
-                                     GtkWidget      *widget);
-static void gtk_tree2_forall          (GtkContainer   *container,
-                                     gboolean        include_internals,
-                                     GtkCallback     callback,
-                                     gpointer        callback_data);
-
-static void gtk_real_tree2_select_child   (GtkTree2       *tree,
-                                         GtkWidget     *child);
-static void gtk_real_tree2_unselect_child (GtkTree2       *tree,
-                                         GtkWidget     *child);
-
-static GtkType gtk_tree2_child_type  (GtkContainer   *container);
-
-static GtkContainerClass *parent_class = NULL;
-static guint tree_signals[LAST_SIGNAL] = { 0 };
-
-GtkType
-gtk_tree2_get_type (void)
-{
-  static GtkType tree_type = 0;
-  
-  if (!tree_type)
-    {
-      static const GtkTypeInfo tree_info =
-      {
-       "GtkTree2",
-       sizeof (GtkTree2),
-       sizeof (GtkTree2Class),
-       (GtkClassInitFunc) gtk_tree2_class_init,
-       (GtkObjectInitFunc) gtk_tree2_init,
-       /* reserved_1 */ NULL,
-        /* reserved_2 */ NULL,
-        (GtkClassInitFunc) NULL,
-      };
-      
-      tree_type = gtk_type_unique (gtk_container_get_type (), &tree_info);
-    }
-  
-  return tree_type;
-}
-
-static void
-gtk_tree2_class_init (GtkTree2Class *class)
-{
-  GtkObjectClass *object_class;
-  GtkWidgetClass *widget_class;
-  GtkContainerClass *container_class;
-  
-  object_class = (GtkObjectClass*) class;
-  widget_class = (GtkWidgetClass*) class;
-  container_class = (GtkContainerClass*) class;
-  
-  parent_class = gtk_type_class (gtk_container_get_type ());
-  
-  tree_signals[SELECTION_CHANGED] =
-    gtk_signal_new ("selection_changed",
-                   GTK_RUN_FIRST,
-                   object_class->type,
-                   GTK_SIGNAL_OFFSET (GtkTree2Class, selection_changed),
-                   gtk_marshal_NONE__NONE,
-                   GTK_TYPE_NONE, 0);
-  tree_signals[SELECT_CHILD] =
-    gtk_signal_new ("select_child",
-                   GTK_RUN_FIRST,
-                   object_class->type,
-                   GTK_SIGNAL_OFFSET (GtkTree2Class, select_child),
-                   gtk_marshal_NONE__POINTER,
-                   GTK_TYPE_NONE, 1,
-                   GTK_TYPE_WIDGET);
-  tree_signals[UNSELECT_CHILD] =
-    gtk_signal_new ("unselect_child",
-                   GTK_RUN_FIRST,
-                   object_class->type,
-                   GTK_SIGNAL_OFFSET (GtkTree2Class, unselect_child),
-                   gtk_marshal_NONE__POINTER,
-                   GTK_TYPE_NONE, 1,
-                   GTK_TYPE_WIDGET);
-  
-  gtk_object_class_add_signals (object_class, tree_signals, LAST_SIGNAL);
-  
-  object_class->destroy = gtk_tree2_destroy;
-  
-  widget_class->map = gtk_tree2_map;
-  widget_class->unmap = gtk_tree2_unmap;
-  widget_class->realize = gtk_tree2_realize;
-  widget_class->draw = gtk_tree2_draw;
-  widget_class->expose_event = gtk_tree2_expose;
-  widget_class->motion_notify_event = gtk_tree2_motion_notify;
-  widget_class->button_press_event = gtk_tree2_button_press;
-  widget_class->button_release_event = gtk_tree2_button_release;
-  widget_class->size_request = gtk_tree2_size_request;
-  widget_class->size_allocate = gtk_tree2_size_allocate;
-  
-  container_class->add = gtk_tree2_add;
-  container_class->remove = 
-    (void (*)(GtkContainer *, GtkWidget *)) gtk_tree2_remove_item;
-  container_class->forall = gtk_tree2_forall;
-  container_class->child_type = gtk_tree2_child_type;
-  
-  class->selection_changed = NULL;
-  class->select_child = gtk_real_tree2_select_child;
-  class->unselect_child = gtk_real_tree2_unselect_child;
-}
-
-static GtkType
-gtk_tree2_child_type (GtkContainer     *container)
-{
-  return GTK_TYPE_TREE_ITEM2;
-}
-
-static void
-gtk_tree2_init (GtkTree2 *tree)
-{
-  tree->children = NULL;
-  tree->root_tree = NULL;
-  tree->selection = NULL;
-  tree->tree_owner = NULL;
-  tree->selection_mode = GTK_SELECTION_SINGLE;
-  tree->indent_value = 9;
-  tree->current_indent = 0;
-  tree->level = 0;
-  tree->view_mode = GTK_TREE2_VIEW_LINE;
-  tree->view_line = 1;
-}
-
-GtkWidget*
-gtk_tree2_new (void)
-{
-  return GTK_WIDGET (gtk_type_new (gtk_tree2_get_type ()));
-}
-
-void
-gtk_tree2_append (GtkTree2   *tree,
-                GtkWidget *tree_item)
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  gtk_tree2_insert (tree, tree_item, -1);
-}
-
-void
-gtk_tree2_prepend (GtkTree2   *tree,
-                 GtkWidget *tree_item)
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  gtk_tree2_insert (tree, tree_item, 0);
-}
-
-void
-gtk_tree2_insert (GtkTree2   *tree,
-                GtkWidget *tree_item,
-                gint       position)
-{
-  gint nchildren;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  nchildren = g_list_length (tree->children);
-  
-  if ((position < 0) || (position > nchildren))
-    position = nchildren;
-  
-  if (position == nchildren)
-    tree->children = g_list_append (tree->children, tree_item);
-  else
-    tree->children = g_list_insert (tree->children, tree_item, position);
-  
-  gtk_widget_set_parent (tree_item, GTK_WIDGET (tree));
-  
-  if (GTK_WIDGET_REALIZED (tree_item->parent))
-    gtk_widget_realize (tree_item);
-
-  if (GTK_WIDGET_VISIBLE (tree_item->parent) && GTK_WIDGET_VISIBLE (tree_item))
-    {
-      if (GTK_WIDGET_MAPPED (tree_item->parent))
-       gtk_widget_map (tree_item);
-
-      gtk_widget_queue_resize (tree_item);
-    }
-}
-
-/* moves the pos child up in the tree */
-void
-gtk_tree2_item_up (GtkTree2   *tree,
-                gint       position)
-{
-  gint nchildren, i;
-  GList *children, *tmp;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  children = (tree->children);
-  nchildren = g_list_length (tree->children);
-  
-  if ((position < 1) || (position >= nchildren))
-    return;
-  
-  for (i=1; i < position; i++)
-    children = (children->next);
-
-  tmp = children->next;
-  if (position == 1)
-    {
-      tree->children = children->next;
-      children->next->prev = NULL;
-    }
-  else
-    {
-      children->prev->next = children->next;
-      children->next->prev = children->prev;
-    }
-  children->next = tmp->next;
-  children->prev = tmp;
-  if (tmp->next)
-      tmp->next->prev = children;
-  tmp->next = children;
-  
-  if (GTK_WIDGET_VISIBLE (tree))
-    {
-/*      if (GTK_WIDGET_VISIBLE (GTK_WIDGET(children->data)))
-       gtk_widget_queue_resize (GTK_WIDGET(children->data));
-      if (GTK_WIDGET_VISIBLE (GTK_WIDGET(tmp->data)))
-       gtk_widget_queue_resize (GTK_WIDGET(tmp->data));
-*/
-      gtk_widget_queue_resize (GTK_WIDGET(tree));
-    }
-}
-
-static void
-gtk_tree2_add (GtkContainer *container,
-             GtkWidget    *child)
-{
-  GtkTree2 *tree;
-  
-  g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (container));
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (child));
-  
-  tree = GTK_TREE2 (container);
-  
-  tree->children = g_list_append (tree->children, child);
-  
-  gtk_widget_set_parent (child, GTK_WIDGET (container));
-  
-  if (GTK_WIDGET_REALIZED (child->parent))
-    gtk_widget_realize (child);
-
-  if (GTK_WIDGET_VISIBLE (child->parent) && GTK_WIDGET_VISIBLE (child))
-    {
-      if (GTK_WIDGET_MAPPED (child->parent))
-       gtk_widget_map (child);
-
-      gtk_widget_queue_resize (child);
-    }
-  
-  if (!tree->selection && (tree->selection_mode == GTK_SELECTION_BROWSE))
-    gtk_tree2_select_child (tree, child);
-}
-
-static gint
-gtk_tree2_button_press (GtkWidget      *widget,
-                      GdkEventButton *event)
-{
-  GtkTree2 *tree;
-  GtkWidget *item;
-  
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-  
-  tree = GTK_TREE2 (widget);
-  item = gtk_get_event_widget ((GdkEvent*) event);
-  
-  while (item && !GTK_IS_TREE_ITEM2 (item))
-    item = item->parent;
-  
-  if (!item || (item->parent != widget))
-    return FALSE;
-  
-  switch(event->button) 
-    {
-    case 1:
-      gtk_tree2_select_child (tree, item);
-      break;
-    case 2:
-      if(GTK_TREE_ITEM2(item)->subtree) gtk_tree_item2_expand(GTK_TREE_ITEM2(item));
-      break;
-    case 3:
-      if(GTK_TREE_ITEM2(item)->subtree) gtk_tree_item2_collapse(GTK_TREE_ITEM2(item));
-      break;
-    }
-  
-  return TRUE;
-}
-
-static gint
-gtk_tree2_button_release (GtkWidget      *widget,
-                        GdkEventButton *event)
-{
-  GtkTree2 *tree;
-  GtkWidget *item;
-  
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-  
-  tree = GTK_TREE2 (widget);
-  item = gtk_get_event_widget ((GdkEvent*) event);
-  
-  return TRUE;
-}
-
-gint
-gtk_tree2_child_position (GtkTree2   *tree,
-                        GtkWidget *child)
-{
-  GList *children;
-  gint pos;
-  
-  
-  g_return_val_if_fail (tree != NULL, -1);
-  g_return_val_if_fail (GTK_IS_TREE2 (tree), -1);
-  g_return_val_if_fail (child != NULL, -1);
-  
-  pos = 0;
-  children = tree->children;
-  
-  while (children)
-    {
-      if (child == GTK_WIDGET (children->data)) 
-       return pos;
-      
-      pos += 1;
-      children = children->next;
-    }
-  
-  
-  return -1;
-}
-
-void
-gtk_tree2_clear_items (GtkTree2 *tree,
-                     gint     start,
-                     gint     end)
-{
-  GtkWidget *widget;
-  GList *clear_list;
-  GList *tmp_list;
-  guint nchildren;
-  guint index;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  nchildren = g_list_length (tree->children);
-  
-  if (nchildren > 0)
-    {
-      if ((end < 0) || (end > nchildren))
-       end = nchildren;
-      
-      if (start >= end)
-       return;
-      
-      tmp_list = g_list_nth (tree->children, start);
-      clear_list = NULL;
-      index = start;
-      while (tmp_list && index <= end)
-       {
-         widget = tmp_list->data;
-         tmp_list = tmp_list->next;
-         index++;
-         
-         clear_list = g_list_prepend (clear_list, widget);
-       }
-      
-      gtk_tree2_remove_items (tree, clear_list);
-    }
-}
-
-static void
-gtk_tree2_destroy (GtkObject *object)
-{
-  GtkTree2 *tree;
-  GtkWidget *child;
-  GList *children;
-  
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (object));
-  
-  tree = GTK_TREE2 (object);
-  
-  children = tree->children;
-  while (children)
-    {
-      child = children->data;
-      children = children->next;
-      
-      gtk_widget_ref (child);
-      gtk_widget_unparent (child);
-      gtk_widget_destroy (child);
-      gtk_widget_unref (child);
-    }
-  
-  g_list_free (tree->children);
-  tree->children = NULL;
-  
-  if (tree->root_tree == tree)
-    {
-      GList *node;
-      for (node = tree->selection; node; node = node->next)
-       gtk_widget_unref ((GtkWidget *)node->data);
-      g_list_free (tree->selection);
-      tree->selection = NULL;
-    }
-  
-  if (GTK_OBJECT_CLASS (parent_class)->destroy)
-    (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-static void
-gtk_tree2_draw (GtkWidget    *widget,
-              GdkRectangle *area)
-{
-  GtkTree2 *tree;
-  GtkWidget *subtree;
-  GtkWidget *child;
-  GdkRectangle child_area;
-  GList *children;
-  
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (widget));
-  g_return_if_fail (area != NULL);
-  
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      tree = GTK_TREE2 (widget);
-      
-      children = tree->children;
-      while (children)
-       {
-         child = children->data;
-         children = children->next;
-         
-         if (gtk_widget_intersect (child, area, &child_area))
-           gtk_widget_draw (child, &child_area);
-         
-         if((subtree = GTK_TREE_ITEM2(child)->subtree) &&
-            GTK_WIDGET_VISIBLE(subtree) &&
-            gtk_widget_intersect (subtree, area, &child_area))
-           gtk_widget_draw (subtree, &child_area);
-       }
-    }
-  
-}
-
-static gint
-gtk_tree2_expose (GtkWidget      *widget,
-                GdkEventExpose *event)
-{
-  GtkTree2 *tree;
-  GtkWidget *child;
-  GdkEventExpose child_event;
-  GList *children;
-  
-  
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-  
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      tree = GTK_TREE2 (widget);
-      
-      child_event = *event;
-      
-      children = tree->children;
-      while (children)
-       {
-         child = children->data;
-         children = children->next;
-         
-         if (GTK_WIDGET_NO_WINDOW (child) &&
-             gtk_widget_intersect (child, &event->area, &child_event.area))
-           gtk_widget_event (child, (GdkEvent*) &child_event);
-       }
-    }
-  
-  
-  return FALSE;
-}
-
-static void
-gtk_tree2_forall (GtkContainer *container,
-                gboolean      include_internals,
-                GtkCallback   callback,
-                gpointer      callback_data)
-{
-  GtkTree2 *tree;
-  GtkWidget *child;
-  GList *children;
-  
-  
-  g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (container));
-  g_return_if_fail (callback != NULL);
-  
-  tree = GTK_TREE2 (container);
-  children = tree->children;
-  
-  while (children)
-    {
-      child = children->data;
-      children = children->next;
-
-      (* callback) (child, callback_data);
-
-      if (include_internals && GTK_TREE_ITEM2(child)->subtree)
-      (* callback) (GTK_TREE_ITEM2(child)->subtree, callback_data);
-    }
-}
-
-static void
-gtk_tree2_map (GtkWidget *widget)
-{
-  GtkTree2 *tree;
-  GtkWidget *child;
-  GList *children;
-  
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (widget));
-  
-  GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
-  tree = GTK_TREE2 (widget);
-  
-  if(GTK_IS_TREE2(widget->parent)) 
-    {
-      /* set root tree for this tree */
-      tree->root_tree = GTK_TREE2(widget->parent)->root_tree;
-      
-      tree->level = GTK_TREE2(GTK_WIDGET(tree)->parent)->level+1;
-      tree->indent_value = GTK_TREE2(GTK_WIDGET(tree)->parent)->indent_value;
-      tree->current_indent = GTK_TREE2(GTK_WIDGET(tree)->parent)->current_indent + 
-       tree->indent_value;
-      tree->view_mode = GTK_TREE2(GTK_WIDGET(tree)->parent)->view_mode;
-      tree->view_line = GTK_TREE2(GTK_WIDGET(tree)->parent)->view_line;
-    } 
-  else
-    tree->root_tree = tree;
-  
-  children = tree->children;
-  while (children)
-    {
-      child = children->data;
-      children = children->next;
-      
-      if (GTK_WIDGET_VISIBLE (child) &&
-         !GTK_WIDGET_MAPPED (child))
-       gtk_widget_map (child);
-      
-      if (GTK_TREE_ITEM2 (child)->subtree)
-       {
-         child = GTK_WIDGET (GTK_TREE_ITEM2 (child)->subtree);
-         
-         if (GTK_WIDGET_VISIBLE (child) && !GTK_WIDGET_MAPPED (child))
-           gtk_widget_map (child);
-       }
-    }
-
-  gdk_window_show (widget->window);
-}
-
-static gint
-gtk_tree2_motion_notify (GtkWidget      *widget,
-                       GdkEventMotion *event)
-{
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-  
-#ifdef TREE_DEBUG
-  g_message("gtk_tree2_motion_notify\n");
-#endif /* TREE_DEBUG */
-  
-  return FALSE;
-}
-
-static void
-gtk_tree2_realize (GtkWidget *widget)
-{
-  GdkWindowAttr attributes;
-  gint attributes_mask;
-  
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (widget));
-  
-  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
-  
-  attributes.window_type = GDK_WINDOW_CHILD;
-  attributes.x = widget->allocation.x;
-  attributes.y = widget->allocation.y;
-  attributes.width = widget->allocation.width;
-  attributes.height = widget->allocation.height;
-  attributes.wclass = GDK_INPUT_OUTPUT;
-  attributes.visual = gtk_widget_get_visual (widget);
-  attributes.colormap = gtk_widget_get_colormap (widget);
-  attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK;
-  
-  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-  
-  widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask);
-  gdk_window_set_user_data (widget->window, widget);
-  
-  widget->style = gtk_style_attach (widget->style, widget->window);
-  gdk_window_set_background (widget->window, 
-                            &widget->style->base[GTK_STATE_NORMAL]);
-}
-
-void
-gtk_tree2_remove_item (GtkTree2      *container,
-                     GtkWidget    *widget)
-{
-  GList *item_list;
-  
-  g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (container));
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (container == GTK_TREE2 (widget->parent));
-  
-  item_list = g_list_append (NULL, widget);
-  
-  gtk_tree2_remove_items (GTK_TREE2 (container), item_list);
-  
-  g_list_free (item_list);
-}
-
-/* used by gtk_tree2_remove_items to make the function independant of
-   order in list of items to remove.
-   Sort item bu depth in tree */
-static gint 
-gtk_tree2_sort_item_by_depth(GtkWidget* a, GtkWidget* b)
-{
-  if((GTK_TREE2(a->parent)->level) < (GTK_TREE2(b->parent)->level))
-    return 1;
-  if((GTK_TREE2(a->parent)->level) > (GTK_TREE2(b->parent)->level))
-    return -1;
-  
-  return 0;
-}
-
-void
-gtk_tree2_remove_items (GtkTree2 *tree,
-                      GList   *items)
-{
-  GtkWidget *widget;
-  GList *selected_widgets;
-  GList *tmp_list;
-  GList *sorted_list;
-  GtkTree2 *real_tree;
-  GtkTree2 *root_tree;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-#ifdef TREE_DEBUG
-  g_message("+ gtk_tree2_remove_items [ tree %#x items list %#x ]\n", (int)tree, (int)items);
-#endif /* TREE_DEBUG */
-  
-  /* We may not yet be mapped, so we actively have to find our
-   * root tree
-   */
-  if (tree->root_tree)
-    root_tree = tree->root_tree;
-  else
-    {
-      GtkWidget *tmp = GTK_WIDGET (tree);
-      while (tmp->parent && GTK_IS_TREE2 (tmp->parent))
-       tmp = tmp->parent;
-      
-      root_tree = GTK_TREE2 (tmp);
-    }
-  
-  tmp_list = items;
-  selected_widgets = NULL;
-  sorted_list = NULL;
-  widget = NULL;
-  
-#ifdef TREE_DEBUG
-  g_message("* sort list by depth\n");
-#endif /* TREE_DEBUG */
-  
-  while (tmp_list)
-    {
-      
-#ifdef TREE_DEBUG
-      g_message ("* item [%#x] depth [%d]\n", 
-                (int)tmp_list->data,
-                (int)GTK_TREE2(GTK_WIDGET(tmp_list->data)->parent)->level);
-#endif /* TREE_DEBUG */
-      
-      sorted_list = g_list_insert_sorted(sorted_list,
-                                        tmp_list->data,
-                                        (GCompareFunc)gtk_tree2_sort_item_by_depth);
-      tmp_list = g_list_next(tmp_list);
-    }
-  
-#ifdef TREE_DEBUG
-  /* print sorted list */
-  g_message("* sorted list result\n");
-  tmp_list = sorted_list;
-  while(tmp_list)
-    {
-      g_message("* item [%#x] depth [%d]\n", 
-               (int)tmp_list->data,
-               (int)GTK_TREE2(GTK_WIDGET(tmp_list->data)->parent)->level);
-      tmp_list = g_list_next(tmp_list);
-    }
-#endif /* TREE_DEBUG */
-  
-#ifdef TREE_DEBUG
-  g_message("* scan sorted list\n");
-#endif /* TREE_DEBUG */
-  
-  tmp_list = sorted_list;
-  while (tmp_list)
-    {
-      widget = tmp_list->data;
-      tmp_list = tmp_list->next;
-      
-#ifdef TREE_DEBUG
-      g_message("* item [%#x] subtree [%#x]\n", 
-               (int)widget, (int)GTK_TREE_ITEM2_SUBTREE(widget));
-#endif /* TREE_DEBUG */
-      
-      /* get real owner of this widget */
-      real_tree = GTK_TREE2(widget->parent);
-#ifdef TREE_DEBUG
-      g_message("* subtree having this widget [%#x]\n", (int)real_tree);
-#endif /* TREE_DEBUG */
-      
-      
-      if (widget->state == GTK_STATE_SELECTED)
-       {
-         selected_widgets = g_list_prepend (selected_widgets, widget);
-#ifdef TREE_DEBUG
-         g_message("* selected widget - adding it in selected list [%#x]\n",
-                   (int)selected_widgets);
-#endif /* TREE_DEBUG */
-       }
-      
-      /* remove this item from its real parent */
-#ifdef TREE_DEBUG
-      g_message("* remove widget from its owner tree\n");
-#endif /* TREE_DEBUG */
-      real_tree->children = g_list_remove (real_tree->children, widget);
-      
-      /* remove subtree associate at this item if it exist */      
-      if(GTK_TREE_ITEM2(widget)->subtree) 
-       {
-#ifdef TREE_DEBUG
-         g_message("* remove subtree associate at this item [%#x]\n",
-                   (int) GTK_TREE_ITEM2(widget)->subtree);
-#endif /* TREE_DEBUG */
-         if (GTK_WIDGET_MAPPED (GTK_TREE_ITEM2(widget)->subtree))
-           gtk_widget_unmap (GTK_TREE_ITEM2(widget)->subtree);
-         
-         gtk_widget_unparent (GTK_TREE_ITEM2(widget)->subtree);
-         GTK_TREE_ITEM2(widget)->subtree = NULL;
-       }
-      
-      /* really remove widget for this item */
-#ifdef TREE_DEBUG
-      g_message("* unmap and unparent widget [%#x]\n", (int)widget);
-#endif /* TREE_DEBUG */
-      if (GTK_WIDGET_MAPPED (widget))
-       gtk_widget_unmap (widget);
-      
-      gtk_widget_unparent (widget);
-      
-      /* delete subtree if there is no children in it */
-/* HF supprime */
-/*       if(real_tree->children == NULL && 
-        real_tree != root_tree)
-       {
-*/
-#ifdef TREE_DEBUG
-         g_message("* owner tree don't have children ... destroy it\n");
-#endif /* TREE_DEBUG */
-/*
-         gtk_tree_item2_remove_subtree(GTK_TREE_ITEM2(real_tree->tree_owner));
-       }
-*/      
-#ifdef TREE_DEBUG
-      g_message("* next item in list\n");
-#endif /* TREE_DEBUG */
-    }
-  
-  if (selected_widgets)
-    {
-#ifdef TREE_DEBUG
-      g_message("* scan selected item list\n");
-#endif /* TREE_DEBUG */
-      tmp_list = selected_widgets;
-      while (tmp_list)
-       {
-         widget = tmp_list->data;
-         tmp_list = tmp_list->next;
-         
-#ifdef TREE_DEBUG
-         g_message("* widget [%#x] subtree [%#x]\n", 
-                   (int)widget, (int)GTK_TREE_ITEM2_SUBTREE(widget));
-#endif /* TREE_DEBUG */
-         
-         /* remove widget of selection */
-         root_tree->selection = g_list_remove (root_tree->selection, widget);
-         
-         /* unref it to authorize is destruction */
-         gtk_widget_unref (widget);
-       }
-      
-      /* emit only one selection_changed signal */
-      gtk_signal_emit (GTK_OBJECT (root_tree), 
-                      tree_signals[SELECTION_CHANGED]);
-    }
-  
-#ifdef TREE_DEBUG
-  g_message("* free selected_widgets list\n");
-#endif /* TREE_DEBUG */
-  g_list_free (selected_widgets);
-  g_list_free (sorted_list);
-  
-  if (root_tree->children && !root_tree->selection &&
-      (root_tree->selection_mode == GTK_SELECTION_BROWSE))
-    {
-#ifdef TREE_DEBUG
-      g_message("* BROWSE mode, select another item\n");
-#endif /* TREE_DEBUG */
-      widget = root_tree->children->data;
-      gtk_tree2_select_child (root_tree, widget);
-    }
-  
-  if (GTK_WIDGET_VISIBLE (root_tree))
-    {
-#ifdef TREE_DEBUG
-      g_message("* query queue resizing for root_tree\n");
-#endif /* TREE_DEBUG */      
-      gtk_widget_queue_resize (GTK_WIDGET (root_tree));
-    }
-}
-
-void
-gtk_tree2_select_child (GtkTree2   *tree,
-                      GtkWidget *tree_item)
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  gtk_signal_emit (GTK_OBJECT (tree), tree_signals[SELECT_CHILD], tree_item);
-}
-
-void
-gtk_tree2_select_next_child (GtkTree2   *tree,
-                      GtkWidget *tree_item, gboolean descend)
-{
-  GList *children;
-
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  if (descend && GTK_TREE2(GTK_TREE_ITEM2(tree_item)->subtree)->children)
-    {
-      gtk_signal_emit (GTK_OBJECT (GTK_TREE_ITEM2(tree_item)->subtree), tree_signals[SELECT_CHILD], GTK_TREE2(GTK_TREE_ITEM2(tree_item)->subtree)->children->data);
-      return;
-    }
-
-  children = tree->children;
-  while (children)
-    {
-      if (tree_item == GTK_WIDGET (children->data)) 
-       break;
-      
-      children = children->next;
-    }
-  if (!children) return;
-  
-  if (children->next)
-    gtk_signal_emit (GTK_OBJECT (tree), tree_signals[SELECT_CHILD], children->next->data);
-  else if (tree != tree->root_tree)
-    {
-      children = GTK_TREE2(GTK_WIDGET(tree)->parent)->children;
-       gtk_tree2_select_next_child (GTK_TREE2(GTK_WIDGET(tree)->parent), tree->tree_owner, FALSE);
-    }
-
-}
-
-/* we know that tree is not the roor_tree and that
-   tree_items always have subtrees */
-void
-gtk_tree2_select_prev_child (GtkTree2   *tree,
-                      GtkWidget *tree_item)
-{
-  GList *children;
-  GtkTreeItem2 *tree_item2;
-
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-
-  children = tree->children;
-  while (children)
-    {
-      if (tree_item == GTK_WIDGET (children->data)) 
-       break;
-      
-      children = children->next;
-    }
-  if (!children) return;
-  
-  if (children = children->prev)
-    {
-      tree_item2 = GTK_TREE_ITEM2(children->data);
-      while (GTK_TREE2(tree_item2->subtree)->children)
-       {
-         children = GTK_TREE2(tree_item2->subtree)->children;
-         while (children->next)
-           children = children->next;
-         tree_item2 = GTK_TREE_ITEM2(children->data);
-       }
-    gtk_signal_emit (GTK_OBJECT (GTK_WIDGET(tree_item2)->parent), tree_signals[SELECT_CHILD], tree_item2);
-    }
-  else
-    {
-      gtk_signal_emit (GTK_OBJECT (GTK_WIDGET(tree)->parent), tree_signals[SELECT_CHILD], tree->tree_owner);
-    }
-
-}
-
-void
-gtk_tree2_select_item (GtkTree2   *tree,
-                     gint       item)
-{
-  GList *tmp_list;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  tmp_list = g_list_nth (tree->children, item);
-  if (tmp_list)
-    gtk_tree2_select_child (tree, GTK_WIDGET (tmp_list->data));
-  
-}
-
-static void
-gtk_tree2_size_allocate (GtkWidget     *widget,
-                       GtkAllocation *allocation)
-{
-  GtkTree2 *tree;
-  GtkWidget *child, *subtree;
-  GtkAllocation child_allocation;
-  GList *children;
-  
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (widget));
-  g_return_if_fail (allocation != NULL);
-  
-  tree = GTK_TREE2 (widget);
-  
-  widget->allocation = *allocation;
-  if (GTK_WIDGET_REALIZED (widget))
-    gdk_window_move_resize (widget->window,
-                           allocation->x, allocation->y,
-                           allocation->width, allocation->height);
-  
-  if (tree->children)
-    {
-      child_allocation.x = GTK_CONTAINER (tree)->border_width;
-      child_allocation.y = GTK_CONTAINER (tree)->border_width;
-      child_allocation.width = MAX (1, (gint)allocation->width - child_allocation.x * 2);
-      
-      children = tree->children;
-      
-      while (children)
-       {
-         child = children->data;
-         children = children->next;
-         
-         if (GTK_WIDGET_VISIBLE (child))
-           {
-             GtkRequisition child_requisition;
-             gtk_widget_get_child_requisition (child, &child_requisition);
-             
-             child_allocation.height = child_requisition.height;
-             
-             gtk_widget_size_allocate (child, &child_allocation);
-             
-             child_allocation.y += child_allocation.height;
-             
-             if((subtree = GTK_TREE_ITEM2(child)->subtree))
-               if(GTK_WIDGET_VISIBLE (subtree))
-                 {
-                   child_allocation.height = subtree->requisition.height;
-                   gtk_widget_size_allocate (subtree, &child_allocation);
-                   child_allocation.y += child_allocation.height;
-                 }
-           }
-       }
-    }
-  
-}
-
-static void
-gtk_tree2_size_request (GtkWidget      *widget,
-                      GtkRequisition *requisition)
-{
-  GtkTree2 *tree;
-  GtkWidget *child, *subtree;
-  GList *children;
-  GtkRequisition child_requisition;
-  
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (widget));
-  g_return_if_fail (requisition != NULL);
-  
-  tree = GTK_TREE2 (widget);
-  requisition->width = 0;
-  requisition->height = 0;
-  
-  children = tree->children;
-  while (children)
-    {
-      child = children->data;
-      children = children->next;
-      
-      if (GTK_WIDGET_VISIBLE (child))
-       {
-         gtk_widget_size_request (child, &child_requisition);
-         
-         requisition->width = MAX (requisition->width, child_requisition.width);
-         requisition->height += child_requisition.height;
-         
-         if((subtree = GTK_TREE_ITEM2(child)->subtree) &&
-            GTK_WIDGET_VISIBLE (subtree))
-           {
-             gtk_widget_size_request (subtree, &child_requisition);
-             
-             requisition->width = MAX (requisition->width, 
-                                       child_requisition.width);
-             
-             requisition->height += child_requisition.height;
-           }
-       }
-    }
-  
-  requisition->width += GTK_CONTAINER (tree)->border_width * 2;
-  requisition->height += GTK_CONTAINER (tree)->border_width * 2;
-  
-  requisition->width = MAX (requisition->width, 1);
-  requisition->height = MAX (requisition->height, 1);
-  
-}
-
-static void
-gtk_tree2_unmap (GtkWidget *widget)
-{
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (widget));
-  
-  GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
-  gdk_window_hide (widget->window);
-  
-}
-
-void
-gtk_tree2_unselect_child (GtkTree2   *tree,
-                        GtkWidget *tree_item)
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  gtk_signal_emit (GTK_OBJECT (tree), tree_signals[UNSELECT_CHILD], tree_item);
-}
-
-void
-gtk_tree2_unselect_item (GtkTree2 *tree,
-                       gint     item)
-{
-  GList *tmp_list;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  tmp_list = g_list_nth (tree->children, item);
-  if (tmp_list)
-    gtk_tree2_unselect_child (tree, GTK_WIDGET (tmp_list->data));
-  
-}
-
-static void
-gtk_real_tree2_select_child (GtkTree2   *tree,
-                           GtkWidget *child)
-{
-  GList *selection, *root_selection;
-  GList *tmp_list;
-  GtkWidget *tmp_item;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (child != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (child));
-  
-  root_selection = tree->root_tree->selection;
-  
-  switch (tree->root_tree->selection_mode)
-    {
-    case GTK_SELECTION_SINGLE:
-      
-      selection = root_selection;
-      
-      /* remove old selection list */
-      while (selection)
-       {
-         tmp_item = selection->data;
-         
-         if (tmp_item != child)
-           {
-             gtk_tree_item2_deselect (GTK_TREE_ITEM2 (tmp_item));
-             
-             tmp_list = selection;
-             selection = selection->next;
-             
-             root_selection = g_list_remove_link (root_selection, tmp_list);
-             gtk_widget_unref (tmp_item);
-             
-             g_list_free (tmp_list);
-           }
-         else
-           selection = selection->next;
-       }
-      
-      if (child->state == GTK_STATE_NORMAL)
-       {
-         gtk_tree_item2_select (GTK_TREE_ITEM2 (child));
-         root_selection = g_list_prepend (root_selection, child);
-         gtk_widget_ref (child);
-       }
-      else if (child->state == GTK_STATE_SELECTED)
-       {
-         gtk_tree_item2_deselect (GTK_TREE_ITEM2 (child));
-         root_selection = g_list_remove (root_selection, child);
-         gtk_widget_unref (child);
-       }
-      
-      tree->root_tree->selection = root_selection;
-      
-      gtk_signal_emit (GTK_OBJECT (tree->root_tree), 
-                      tree_signals[SELECTION_CHANGED]);
-      break;
-      
-      
-    case GTK_SELECTION_BROWSE:
-      selection = root_selection;
-      
-      while (selection)
-       {
-         tmp_item = selection->data;
-         
-         if (tmp_item != child)
-           {
-             gtk_tree_item2_deselect (GTK_TREE_ITEM2 (tmp_item));
-             
-             tmp_list = selection;
-             selection = selection->next;
-             
-             root_selection = g_list_remove_link (root_selection, tmp_list);
-             gtk_widget_unref (tmp_item);
-             
-             g_list_free (tmp_list);
-           }
-         else
-           selection = selection->next;
-       }
-      
-      tree->root_tree->selection = root_selection;
-      
-      if (child->state == GTK_STATE_NORMAL)
-       {
-         gtk_tree_item2_select (GTK_TREE_ITEM2 (child));
-         root_selection = g_list_prepend (root_selection, child);
-         gtk_widget_ref (child);
-         tree->root_tree->selection = root_selection;
-         gtk_signal_emit (GTK_OBJECT (tree->root_tree), 
-                          tree_signals[SELECTION_CHANGED]);
-       }
-      break;
-      
-    case GTK_SELECTION_MULTIPLE:
-      if (child->state == GTK_STATE_NORMAL)
-       {
-         gtk_tree_item2_select (GTK_TREE_ITEM2 (child));
-         root_selection = g_list_prepend (root_selection, child);
-         gtk_widget_ref (child);
-         tree->root_tree->selection = root_selection;
-         gtk_signal_emit (GTK_OBJECT (tree->root_tree), 
-                          tree_signals[SELECTION_CHANGED]);
-       }
-      else if (child->state == GTK_STATE_SELECTED)
-       {
-         gtk_tree_item2_deselect (GTK_TREE_ITEM2 (child));
-         root_selection = g_list_remove (root_selection, child);
-         gtk_widget_unref (child);
-         tree->root_tree->selection = root_selection;
-         gtk_signal_emit (GTK_OBJECT (tree->root_tree), 
-                          tree_signals[SELECTION_CHANGED]);
-       }
-      break;
-      
-    case GTK_SELECTION_EXTENDED:
-      break;
-    }
-}
-
-static void
-gtk_real_tree2_unselect_child (GtkTree2   *tree,
-                             GtkWidget *child)
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (child != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (child));
-  
-  switch (tree->selection_mode)
-    {
-    case GTK_SELECTION_SINGLE:
-    case GTK_SELECTION_MULTIPLE:
-    case GTK_SELECTION_BROWSE:
-      if (child->state == GTK_STATE_SELECTED)
-       {
-         GtkTree2* root_tree = GTK_TREE2_ROOT_TREE(tree);
-         gtk_tree_item2_deselect (GTK_TREE_ITEM2 (child));
-         root_tree->selection = g_list_remove (root_tree->selection, child);
-         gtk_widget_unref (child);
-         gtk_signal_emit (GTK_OBJECT (tree->root_tree), 
-                          tree_signals[SELECTION_CHANGED]);
-       }
-      break;
-      
-    case GTK_SELECTION_EXTENDED:
-      break;
-    }
-}
-
-void
-gtk_tree2_set_selection_mode (GtkTree2       *tree,
-                            GtkSelectionMode mode) 
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  tree->selection_mode = mode;
-}
-
-void
-gtk_tree2_set_view_mode (GtkTree2       *tree,
-                       GtkTree2ViewMode mode) 
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  tree->view_mode = mode;
-}
-
-void
-gtk_tree2_set_view_lines (GtkTree2       *tree,
-                        guint          flag) 
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  tree->view_line = flag;
-}
-
-void 
-gtk_tree2_item_up_1 (GtkTree2       *tree,
-                  guint pos)
-{
-  GList *tmp;
-  guint length;
-  gpointer data;
-
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  tmp = tree->children;
-  length = g_list_length (tmp);
-  if (pos <= 0 || pos >= length) { return; }
-  data = g_list_nth_data (tree->children, pos);
-  g_list_remove (tree->children, data);
-  tree->children = g_list_insert (tree->children, data, pos-1);
-}
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtktree2.h b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtktree2.h
deleted file mode 100644 (file)
index 291a1d1..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#ifndef __GTK_TREE2_H__
-#define __GTK_TREE2_H__
-
-/* set this flag to enable tree debugging output */
-/* #define TREE_DEBUG */
-
-#include <gdk/gdk.h>
-#include <gtk/gtkcontainer.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
-#define GTK_TYPE_TREE2                  (gtk_tree2_get_type ())
-#define GTK_TREE2(obj)                  (GTK_CHECK_CAST ((obj), GTK_TYPE_TREE2, GtkTree2))
-#define GTK_TREE2_CLASS(klass)          (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_TREE2, GtkTree2Class))
-#define GTK_IS_TREE2(obj)               (GTK_CHECK_TYPE ((obj), GTK_TYPE_TREE2))
-#define GTK_IS_TREE2_CLASS(klass)       (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TREE2))
-
-#define GTK_IS_ROOT_TREE2(obj)   ((GtkObject*) GTK_TREE2(obj)->root_tree == (GtkObject*)obj)
-#define GTK_TREE2_ROOT_TREE(obj) (GTK_TREE2(obj)->root_tree ? GTK_TREE2(obj)->root_tree : GTK_TREE2(obj))
-#define GTK_TREE2_SELECTION(obj) (GTK_TREE2_ROOT_TREE(obj)->selection)
-
-typedef enum 
-{
-  GTK_TREE2_VIEW_LINE,  /* default view mode */
-  GTK_TREE2_VIEW_ITEM
-} GtkTree2ViewMode;
-
-typedef struct _GtkTree2       GtkTree2;
-typedef struct _GtkTree2Class  GtkTree2Class;
-
-struct _GtkTree2
-{
-  GtkContainer container;
-  
-  GList *children;
-  
-  GtkTree2* root_tree; /* owner of selection list */
-  GtkWidget* tree_owner;
-  GList *selection;
-  guint level;
-  guint indent_value;
-  guint current_indent;
-  guint selection_mode : 2;
-  guint view_mode : 1;
-  guint view_line : 1;
-};
-
-struct _GtkTree2Class
-{
-  GtkContainerClass parent_class;
-  
-  void (* selection_changed) (GtkTree2   *tree);
-  void (* select_child)      (GtkTree2   *tree,
-                             GtkWidget *child);
-  void (* unselect_child)    (GtkTree2   *tree,
-                             GtkWidget *child);
-};
-
-
-GtkType    gtk_tree2_get_type           (void);
-GtkWidget* gtk_tree2_new                (void);
-void       gtk_tree2_append             (GtkTree2          *tree,
-                                       GtkWidget        *tree_item);
-void       gtk_tree2_prepend            (GtkTree2          *tree,
-                                       GtkWidget        *tree_item);
-void       gtk_tree2_insert             (GtkTree2          *tree,
-                                       GtkWidget        *tree_item,
-                                       gint              position);
-void       gtk_tree2_remove_items       (GtkTree2          *tree,
-                                       GList            *items);
-void       gtk_tree2_clear_items        (GtkTree2          *tree,
-                                       gint              start,
-                                       gint              end);
-void       gtk_tree2_select_item        (GtkTree2          *tree,
-                                       gint              item);
-void       gtk_tree2_unselect_item      (GtkTree2          *tree,
-                                       gint              item);
-void       gtk_tree2_select_child       (GtkTree2          *tree,
-                                       GtkWidget        *tree_item);
-void       gtk_tree2_unselect_child     (GtkTree2          *tree,
-                                       GtkWidget        *tree_item);
-gint       gtk_tree2_child_position     (GtkTree2          *tree,
-                                       GtkWidget        *child);
-void       gtk_tree2_set_selection_mode (GtkTree2          *tree,
-                                       GtkSelectionMode  mode);
-void       gtk_tree2_set_view_mode      (GtkTree2          *tree,
-                                       GtkTree2ViewMode   mode); 
-void       gtk_tree2_set_view_lines     (GtkTree2          *tree,
-                                       guint            flag);
-
-/* deprecated function, use gtk_container_remove instead.
- */
-void       gtk_tree2_remove_item        (GtkTree2          *tree,
-                                       GtkWidget        *child);
-void       gtk_tree2_item_up             (GtkTree2   *tree,
-                                        gint       position);
-
-void gtk_tree2_select_next_child (GtkTree2   *tree,
-                                 GtkWidget *tree_item, gboolean descend);
-
-void gtk_tree2_select_prev_child (GtkTree2   *tree,
-                                 GtkWidget *tree_item);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GTK_TREE2_H__ */
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtktreeitem2.c b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtktreeitem2.c
deleted file mode 100644 (file)
index 7e6f811..0000000
+++ /dev/null
@@ -1,1110 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <gtk/gtklabel.h>
-#include "gtktree2.h"
-#include "gtktreeitem2.h"
-#include <gtk/gtkeventbox.h>
-#include <gtk/gtkpixmap.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
-
-#include "tree_plus.xpm"
-#include "tree_minus.xpm"
-
-#define DEFAULT_DELTA 9
-
-enum {
-  COLLAPSE_TREE,
-  EXPAND_TREE,
-  LAST_SIGNAL
-};
-
-typedef struct _GtkTree2Pixmaps GtkTree2Pixmaps;
-
-struct _GtkTree2Pixmaps {
-  gint refcount;
-  GdkColormap *colormap;
-  
-  GdkPixmap *pixmap_plus;
-  GdkPixmap *pixmap_minus;
-  GdkBitmap *mask_plus;
-  GdkBitmap *mask_minus;
-};
-
-static GList *pixmaps = NULL;
-
-static void gtk_tree_item2_class_init (GtkTreeItem2Class *klass);
-static void gtk_tree_item2_init       (GtkTreeItem2      *tree_item);
-static void gtk_tree_item2_realize       (GtkWidget        *widget);
-static void gtk_tree_item2_size_request  (GtkWidget        *widget,
-                                        GtkRequisition   *requisition);
-static void gtk_tree_item2_size_allocate (GtkWidget        *widget,
-                                        GtkAllocation    *allocation);
-static void gtk_tree_item2_draw          (GtkWidget        *widget,
-                                        GdkRectangle     *area);
-static void gtk_tree_item2_draw_focus    (GtkWidget        *widget);
-static void gtk_tree_item2_paint         (GtkWidget        *widget,
-                                        GdkRectangle     *area);
-static gint gtk_tree_item2_button_press  (GtkWidget        *widget,
-                                        GdkEventButton   *event);
-static gint gtk_tree_item2_expose        (GtkWidget        *widget,
-                                        GdkEventExpose   *event);
-static gint gtk_tree_item2_focus_in      (GtkWidget        *widget,
-                                        GdkEventFocus    *event);
-static gint gtk_tree_item2_focus_out     (GtkWidget        *widget,
-                                        GdkEventFocus    *event);
-static void gtk_tree_item2_forall        (GtkContainer    *container,
-                                        gboolean         include_internals,
-                                        GtkCallback      callback,
-                                        gpointer         callback_data);
-
-static void gtk_real_tree_item2_select   (GtkItem          *item);
-static void gtk_real_tree_item2_deselect (GtkItem          *item);
-static void gtk_real_tree_item2_toggle   (GtkItem          *item);
-static void gtk_real_tree_item2_expand   (GtkTreeItem2      *item);
-static void gtk_real_tree_item2_collapse (GtkTreeItem2      *item);
-static void gtk_real_tree_item2_expand   (GtkTreeItem2      *item);
-static void gtk_real_tree_item2_collapse (GtkTreeItem2      *item);
-static void gtk_tree_item2_destroy        (GtkObject *object);
-static void gtk_tree_item2_subtree_button_click (GtkWidget *widget);
-static void gtk_tree_item2_subtree_button_changed_state (GtkWidget *widget);
-
-static void gtk_tree_item2_map(GtkWidget*);
-static void gtk_tree_item2_unmap(GtkWidget*);
-
-static void gtk_tree_item2_add_pixmaps    (GtkTreeItem2       *tree_item);
-static void gtk_tree_item2_remove_pixmaps (GtkTreeItem2       *tree_item);
-
-static GtkItemClass *parent_class = NULL;
-static guint tree_item_signals[LAST_SIGNAL] = { 0 };
-
-GtkType
-gtk_tree_item2_get_type (void)
-{
-  static GtkType tree_item_type = 0;
-
-  if (!tree_item_type)
-    {
-      static const GtkTypeInfo tree_item_info =
-      {
-       "GtkTreeItem",
-       sizeof (GtkTreeItem2),
-       sizeof (GtkTreeItem2Class),
-       (GtkClassInitFunc) gtk_tree_item2_class_init,
-       (GtkObjectInitFunc) gtk_tree_item2_init,
-       /* reserved_1 */ NULL,
-        /* reserved_2 */ NULL,
-        (GtkClassInitFunc) NULL,
-      };
-
-      tree_item_type = gtk_type_unique (gtk_item_get_type (), &tree_item_info);
-    }
-
-  return tree_item_type;
-}
-
-static void
-gtk_tree_item2_class_init (GtkTreeItem2Class *class)
-{
-  GtkObjectClass *object_class;
-  GtkWidgetClass *widget_class;
-  GtkContainerClass *container_class;
-  GtkItemClass *item_class;
-
-  object_class = (GtkObjectClass*) class;
-  widget_class = (GtkWidgetClass*) class;
-  item_class = (GtkItemClass*) class;
-  container_class = (GtkContainerClass*) class;
-
-  parent_class = gtk_type_class (gtk_item_get_type ());
-  
-  tree_item_signals[EXPAND_TREE] =
-    gtk_signal_new ("expand",
-                   GTK_RUN_FIRST,
-                   object_class->type,
-                   GTK_SIGNAL_OFFSET (GtkTreeItem2Class, expand),
-                   gtk_marshal_NONE__NONE,
-                   GTK_TYPE_NONE, 0);
-  tree_item_signals[COLLAPSE_TREE] =
-    gtk_signal_new ("collapse",
-                   GTK_RUN_FIRST,
-                   object_class->type,
-                   GTK_SIGNAL_OFFSET (GtkTreeItem2Class, collapse),
-                   gtk_marshal_NONE__NONE,
-                   GTK_TYPE_NONE, 0);
-
-  gtk_object_class_add_signals (object_class, tree_item_signals, LAST_SIGNAL);
-
-  object_class->destroy = gtk_tree_item2_destroy;
-
-  widget_class->realize = gtk_tree_item2_realize;
-  widget_class->size_request = gtk_tree_item2_size_request;
-  widget_class->size_allocate = gtk_tree_item2_size_allocate;
-  widget_class->draw = gtk_tree_item2_draw;
-  widget_class->draw_focus = gtk_tree_item2_draw_focus;
-  widget_class->button_press_event = gtk_tree_item2_button_press;
-  widget_class->expose_event = gtk_tree_item2_expose;
-  widget_class->focus_in_event = gtk_tree_item2_focus_in;
-  widget_class->focus_out_event = gtk_tree_item2_focus_out;
-  widget_class->map = gtk_tree_item2_map;
-  widget_class->unmap = gtk_tree_item2_unmap;
-
-  container_class->forall = gtk_tree_item2_forall;
-
-  item_class->select = gtk_real_tree_item2_select;
-  item_class->deselect = gtk_real_tree_item2_deselect;
-  item_class->toggle = gtk_real_tree_item2_toggle;
-
-  class->expand = gtk_real_tree_item2_expand;
-  class->collapse = gtk_real_tree_item2_collapse;
-}
-
-/* callback for event box mouse event */
-static void 
-gtk_tree_item2_subtree_button_click (GtkWidget *widget)
-{
-  GtkTreeItem2* item;
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_EVENT_BOX (widget));
-  
-  item = (GtkTreeItem2*) gtk_object_get_user_data (GTK_OBJECT (widget));
-  if (!GTK_WIDGET_IS_SENSITIVE (item))
-    return;
-  
-  if (item->expanded)
-    gtk_tree_item2_collapse (item);
-  else
-    gtk_tree_item2_expand (item);
-}
-
-/* callback for event box state changed */
-static void
-gtk_tree_item2_subtree_button_changed_state (GtkWidget *widget)
-{
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_EVENT_BOX (widget));
-  
-  if (GTK_WIDGET_VISIBLE (widget))
-    {
-      
-      if (widget->state == GTK_STATE_NORMAL)
-       gdk_window_set_background (widget->window, &widget->style->base[widget->state]);
-      else
-       gdk_window_set_background (widget->window, &widget->style->bg[widget->state]);
-      
-      if (GTK_WIDGET_DRAWABLE (widget))
-       gdk_window_clear_area (widget->window, 0, 0, 
-                              widget->allocation.width, widget->allocation.height);
-    }
-}
-
-static void
-gtk_tree_item2_init (GtkTreeItem2 *tree_item)
-{
-  GtkWidget *eventbox, *pixmapwid;
-  
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  tree_item->expanded = FALSE;
-  tree_item->subtree = NULL;
-  GTK_WIDGET_SET_FLAGS (tree_item, GTK_CAN_FOCUS);
-  
-  /* create an event box containing one pixmaps */
-  eventbox = gtk_event_box_new();
-  gtk_widget_set_events (eventbox, GDK_BUTTON_PRESS_MASK);
-  gtk_signal_connect(GTK_OBJECT(eventbox), "state_changed",
-                    (GtkSignalFunc)gtk_tree_item2_subtree_button_changed_state, 
-                    (gpointer)NULL);
-  gtk_signal_connect(GTK_OBJECT(eventbox), "realize",
-                    (GtkSignalFunc)gtk_tree_item2_subtree_button_changed_state, 
-                    (gpointer)NULL);
-/* HF inutile
-  gtk_signal_connect(GTK_OBJECT(eventbox), "button_press_event",
-                    (GtkSignalFunc)gtk_tree_item2_subtree_button_click,
-                    (gpointer)NULL);
-*/
-  gtk_object_set_user_data(GTK_OBJECT(eventbox), tree_item);
-  tree_item->pixmaps_box = eventbox;
-
-  /* create pixmap for button '+' */
-  pixmapwid = gtk_type_new (gtk_pixmap_get_type ());
-  if (!tree_item->expanded) 
-    gtk_container_add (GTK_CONTAINER (eventbox), pixmapwid);
-  gtk_widget_show (pixmapwid);
-  tree_item->plus_pix_widget = pixmapwid;
-  gtk_widget_ref (tree_item->plus_pix_widget);
-  gtk_object_sink (GTK_OBJECT (tree_item->plus_pix_widget));
-  
-  /* create pixmap for button '-' */
-  pixmapwid = gtk_type_new (gtk_pixmap_get_type ());
-  if (tree_item->expanded) 
-    gtk_container_add (GTK_CONTAINER (eventbox), pixmapwid);
-  gtk_widget_show (pixmapwid);
-  tree_item->minus_pix_widget = pixmapwid;
-  gtk_widget_ref (tree_item->minus_pix_widget);
-  gtk_object_sink (GTK_OBJECT (tree_item->minus_pix_widget));
-  
-  gtk_widget_set_parent (eventbox, GTK_WIDGET (tree_item));
-}
-
-
-GtkWidget*
-gtk_tree_item2_new (void)
-{
-  GtkWidget *tree_item;
-
-  tree_item = GTK_WIDGET (gtk_type_new (gtk_tree_item2_get_type ()));
-
-  return tree_item;
-}
-
-GtkWidget*
-gtk_tree_item2_new_with_label (gchar *label)
-{
-  GtkWidget *tree_item;
-  GtkWidget *label_widget;
-
-  tree_item = gtk_tree_item2_new ();
-  label_widget = gtk_label_new (label);
-  gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5);
-
-  gtk_container_add (GTK_CONTAINER (tree_item), label_widget);
-  gtk_widget_show (label_widget);
-
-
-  return tree_item;
-}
-
-void
-gtk_tree_item2_set_subtree (GtkTreeItem2 *tree_item,
-                          GtkWidget   *subtree)
-{
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  g_return_if_fail (subtree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (subtree));
-
-  if (tree_item->subtree)
-    {
-      g_warning("there is already a subtree for this tree item\n");
-      return;
-    }
-
-  tree_item->subtree = subtree; 
-  GTK_TREE2 (subtree)->tree_owner = GTK_WIDGET (tree_item);
-
-  /* show subtree button */
-  if (tree_item->pixmaps_box)
-    gtk_widget_show (tree_item->pixmaps_box);
-
-  if (tree_item->expanded)
-    gtk_widget_show (subtree);
-  else
-    gtk_widget_hide (subtree);
-
-  gtk_widget_set_parent (subtree, GTK_WIDGET (tree_item)->parent);
-
-  if (GTK_WIDGET_REALIZED (subtree->parent))
-    gtk_widget_realize (subtree);
-
-  if (GTK_WIDGET_VISIBLE (subtree->parent) && GTK_WIDGET_VISIBLE (subtree))
-    {
-      if (GTK_WIDGET_MAPPED (subtree->parent))
-       gtk_widget_map (subtree);
-
-      gtk_widget_queue_resize (subtree);
-    }
-}
-
-void
-gtk_tree_item2_select (GtkTreeItem2 *tree_item)
-{
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  gtk_item_select (GTK_ITEM (tree_item));
-}
-
-void
-gtk_tree_item2_deselect (GtkTreeItem2 *tree_item)
-{
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  gtk_item_deselect (GTK_ITEM (tree_item));
-}
-
-void
-gtk_tree_item2_expand (GtkTreeItem2 *tree_item)
-{
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  gtk_signal_emit (GTK_OBJECT (tree_item), tree_item_signals[EXPAND_TREE], NULL);
-}
-
-void
-gtk_tree_item2_collapse (GtkTreeItem2 *tree_item)
-{
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  gtk_signal_emit (GTK_OBJECT (tree_item), tree_item_signals[COLLAPSE_TREE], NULL);
-}
-
-static void
-gtk_tree_item2_add_pixmaps (GtkTreeItem2 *tree_item)
-{
-  GList *tmp_list;
-  GdkColormap *colormap;
-  GtkTree2Pixmaps *pixmap_node = NULL;
-
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  if (tree_item->pixmaps)
-    return;
-
-  colormap = gtk_widget_get_colormap (GTK_WIDGET (tree_item));
-
-  tmp_list = pixmaps;
-  while (tmp_list)
-    {
-      pixmap_node = (GtkTree2Pixmaps *)tmp_list->data;
-
-      if (pixmap_node->colormap == colormap)
-       break;
-      
-      tmp_list = tmp_list->next;
-    }
-
-  if (tmp_list)
-    {
-      pixmap_node->refcount++;
-      tree_item->pixmaps = tmp_list;
-    }
-  else
-    {
-      pixmap_node = g_new (GtkTree2Pixmaps, 1);
-
-      pixmap_node->colormap = colormap;
-      gdk_colormap_ref (colormap);
-
-      pixmap_node->refcount = 1;
-
-      /* create pixmaps for plus icon */
-      pixmap_node->pixmap_plus = 
-       gdk_pixmap_create_from_xpm_d (GTK_WIDGET (tree_item)->window,
-                                     &pixmap_node->mask_plus,
-                                     NULL,
-                                     tree_plus);
-      
-      /* create pixmaps for minus icon */
-      pixmap_node->pixmap_minus = 
-       gdk_pixmap_create_from_xpm_d (GTK_WIDGET (tree_item)->window,
-                                     &pixmap_node->mask_minus,
-                                     NULL,
-                                     tree_minus);
-
-      tree_item->pixmaps = pixmaps = g_list_prepend (pixmaps, pixmap_node);
-    }
-  
-  gtk_pixmap_set (GTK_PIXMAP (tree_item->plus_pix_widget), 
-                 pixmap_node->pixmap_plus, pixmap_node->mask_plus);
-  gtk_pixmap_set (GTK_PIXMAP (tree_item->minus_pix_widget), 
-                 pixmap_node->pixmap_minus, pixmap_node->mask_minus);
-}
-
-static void
-gtk_tree_item2_remove_pixmaps (GtkTreeItem2 *tree_item)
-{
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  if (tree_item->pixmaps)
-    {
-      GtkTree2Pixmaps *pixmap_node = (GtkTree2Pixmaps *)tree_item->pixmaps->data;
-      
-      g_assert (pixmap_node->refcount > 0);
-      
-      if (--pixmap_node->refcount == 0)
-       {
-         gdk_colormap_unref (pixmap_node->colormap);
-         gdk_pixmap_unref (pixmap_node->pixmap_plus);
-         gdk_bitmap_unref (pixmap_node->mask_plus);
-         gdk_pixmap_unref (pixmap_node->pixmap_minus);
-         gdk_bitmap_unref (pixmap_node->mask_minus);
-         
-         pixmaps = g_list_remove_link (pixmaps, tree_item->pixmaps);
-         g_list_free_1 (tree_item->pixmaps);
-         g_free (pixmap_node);
-       }
-
-      tree_item->pixmaps = NULL;
-    }
-}
-
-static void
-gtk_tree_item2_realize (GtkWidget *widget)
-{    
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-
-  if (GTK_WIDGET_CLASS (parent_class)->realize)
-    (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
-  
-  gdk_window_set_background (widget->window, 
-                            &widget->style->base[GTK_STATE_NORMAL]);
-
-  gtk_tree_item2_add_pixmaps (GTK_TREE_ITEM2 (widget));
-}
-
-static void
-gtk_tree_item2_size_request (GtkWidget      *widget,
-                           GtkRequisition *requisition)
-{
-  GtkBin *bin;
-  GtkTreeItem2* item;
-  GtkRequisition child_requisition;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-  g_return_if_fail (requisition != NULL);
-
-  bin = GTK_BIN (widget);
-  item = GTK_TREE_ITEM2(widget);
-
-  requisition->width = (GTK_CONTAINER (widget)->border_width +
-                       widget->style->klass->xthickness) * 2;
-  requisition->height = GTK_CONTAINER (widget)->border_width * 2;
-
-  if (bin->child && GTK_WIDGET_VISIBLE (bin->child))
-    {
-      GtkRequisition pix_requisition;
-      
-      gtk_widget_size_request (bin->child, &child_requisition);
-
-      requisition->width += child_requisition.width;
-
-      gtk_widget_size_request (item->pixmaps_box, 
-                              &pix_requisition);
-      requisition->width += pix_requisition.width + DEFAULT_DELTA + 
-       GTK_TREE2 (widget->parent)->current_indent;
-
-      requisition->height += MAX (child_requisition.height,
-                                 pix_requisition.height);
-    }
-}
-
-static void
-gtk_tree_item2_size_allocate (GtkWidget     *widget,
-                            GtkAllocation *allocation)
-{
-  GtkBin *bin;
-  GtkTreeItem2* item;
-  GtkAllocation child_allocation;
-  guint border_width;
-  int temp;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-  g_return_if_fail (allocation != NULL);
-
-  widget->allocation = *allocation;
-  if (GTK_WIDGET_REALIZED (widget))
-    gdk_window_move_resize (widget->window,
-                           allocation->x, allocation->y,
-                           allocation->width, allocation->height);
-
-  bin = GTK_BIN (widget);
-  item = GTK_TREE_ITEM2(widget);
-
-  if (bin->child)
-    {
-      border_width = (GTK_CONTAINER (widget)->border_width +
-                     widget->style->klass->xthickness);
-
-      child_allocation.x = border_width + GTK_TREE2(widget->parent)->current_indent;
-      child_allocation.y = GTK_CONTAINER (widget)->border_width;
-
-      child_allocation.width = item->pixmaps_box->requisition.width;
-      child_allocation.height = item->pixmaps_box->requisition.height;
-      
-      temp = allocation->height - child_allocation.height;
-      child_allocation.y += ( temp / 2 ) + ( temp % 2 );
-
-      gtk_widget_size_allocate (item->pixmaps_box, &child_allocation);
-
-      child_allocation.y = GTK_CONTAINER (widget)->border_width;
-      child_allocation.height = MAX (1, (gint)allocation->height - child_allocation.y * 2);
-      child_allocation.x += item->pixmaps_box->requisition.width+DEFAULT_DELTA;
-
-      child_allocation.width = 
-       MAX (1, (gint)allocation->width - ((gint)child_allocation.x + border_width));
-
-      gtk_widget_size_allocate (bin->child, &child_allocation);
-    }
-}
-
-static void 
-gtk_tree_item2_draw_lines (GtkWidget *widget) 
-{
-  GtkTreeItem2* item;
-  GtkTree2* tree;
-  guint lx1, ly1, lx2, ly2;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-
-  item = GTK_TREE_ITEM2(widget);
-  tree = GTK_TREE2(widget->parent);
-
-  /* draw vertical line */
-  lx1 = item->pixmaps_box->allocation.width;
-  lx1 = lx2 = ((lx1 / 2) + (lx1 % 2) + 
-              GTK_CONTAINER (widget)->border_width + 1 + tree->current_indent);
-  ly1 = 0;
-  ly2 = widget->allocation.height;
-
-  if (g_list_last (tree->children)->data == widget)
-    ly2 = (ly2 / 2) + (ly2 % 2);
-
-  if (tree != tree->root_tree)
-    gdk_draw_line (widget->window, widget->style->black_gc, lx1, ly1, lx2, ly2);
-
-  /* draw vertical line for subtree connecting */
-  if(g_list_last(tree->children)->data != (gpointer)widget)
-    ly2 = (ly2 / 2) + (ly2 % 2);
-  
-  lx2 += DEFAULT_DELTA;
-
-  if (item->subtree && item->expanded)
-    gdk_draw_line (widget->window, widget->style->black_gc,
-                  lx2, ly2, lx2, widget->allocation.height);
-
-  /* draw horizontal line */
-  ly1 = ly2;
-  lx2 += 2;
-
-  gdk_draw_line (widget->window, widget->style->black_gc,
-                lx1, ly1, lx2, ly2);
-
-  lx2 -= DEFAULT_DELTA+2;
-  ly1 = 0;
-  ly2 = widget->allocation.height;
-
-  if (tree != tree->root_tree)
-    {
-      item = GTK_TREE_ITEM2 (tree->tree_owner);
-      tree = GTK_TREE2 (GTK_WIDGET (tree)->parent);
-      while (tree != tree->root_tree)
-       {
-         lx1 = lx2 -= tree->indent_value;
-         
-         if (g_list_last (tree->children)->data != item)
-           gdk_draw_line (widget->window, widget->style->black_gc, lx1, ly1, lx2, ly2);
-         item = GTK_TREE_ITEM2 (tree->tree_owner);
-         tree = GTK_TREE2 (GTK_WIDGET (tree)->parent);
-       } 
-    }
-}
-
-static void
-gtk_tree_item2_paint (GtkWidget    *widget,
-                    GdkRectangle *area)
-{
-  GtkBin *bin;
-  GdkRectangle child_area, item_area;
-  GtkTreeItem2* tree_item;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-  g_return_if_fail (area != NULL);
-
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      bin = GTK_BIN (widget);
-      tree_item = GTK_TREE_ITEM2(widget);
-
-      if (widget->state == GTK_STATE_NORMAL)
-       {
-         gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
-         gdk_window_clear_area (widget->window, area->x, area->y, area->width, area->height);
-       }
-      else 
-       {
-         if (!GTK_WIDGET_IS_SENSITIVE (widget)) 
-           gtk_paint_flat_box(widget->style, widget->window,
-                              widget->state, GTK_STATE_INSENSITIVE,
-                              area, widget, "treeitem",
-                              0, 0, -1, -1);
-         else
-           gtk_paint_flat_box(widget->style, widget->window,
-                              widget->state, GTK_SHADOW_ETCHED_OUT,
-                              area, widget, "treeitem",
-                              0, 0, -1, -1);
-       }
-
-      /* draw left size of tree item */
-      item_area.x = 0;
-      item_area.y = 0;
-      item_area.width = (tree_item->pixmaps_box->allocation.width + DEFAULT_DELTA +
-                        GTK_TREE2 (widget->parent)->current_indent + 2);
-      item_area.height = widget->allocation.height;
-
-
-      if (gdk_rectangle_intersect(&item_area, area, &child_area)) 
-       {
-         
-         gtk_tree_item2_draw_lines(widget);
-
-         if (tree_item->pixmaps_box && 
-             GTK_WIDGET_VISIBLE(tree_item->pixmaps_box) &&
-             gtk_widget_intersect (tree_item->pixmaps_box, area, &child_area))
-           gtk_widget_draw (tree_item->pixmaps_box, &child_area);
-       }
-
-      if (GTK_WIDGET_HAS_FOCUS (widget))
-       gtk_paint_focus (widget->style, widget->window,
-                        NULL, widget, "treeitem",
-                        0, 0,
-                        widget->allocation.width - 1,
-                        widget->allocation.height - 1);
-      
-    }
-}
-
-static void
-gtk_tree_item2_draw (GtkWidget    *widget,
-                   GdkRectangle *area)
-{
-  GtkBin *bin;
-  GdkRectangle child_area;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-  g_return_if_fail (area != NULL);
-
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      bin = GTK_BIN (widget);
-
-      gtk_tree_item2_paint (widget, area);
-     
-      if (bin->child && 
-         gtk_widget_intersect (bin->child, area, &child_area))
-       gtk_widget_draw (bin->child, &child_area);
-
-    }
-}
-
-static void
-gtk_tree_item2_draw_focus (GtkWidget *widget)
-{
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-
-  gtk_widget_draw(widget, NULL);
-}
-
-static gint
-gtk_tree_item2_button_press (GtkWidget      *widget,
-                           GdkEventButton *event)
-{
-/* HF
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE_ITEM2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  if (event->type == GDK_BUTTON_PRESS
-       && GTK_WIDGET_IS_SENSITIVE(widget)
-       && !GTK_WIDGET_HAS_FOCUS (widget))
-      gtk_widget_grab_focus (widget);
-
-  return FALSE;
-
-*/
-}
-
-static gint
-gtk_tree_item2_expose (GtkWidget      *widget,
-                     GdkEventExpose *event)
-{
-  GdkEventExpose child_event;
-  GtkBin *bin;
-
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE_ITEM2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      bin = GTK_BIN (widget);
-      
-      gtk_tree_item2_paint (widget, &event->area);
-
-      child_event = *event;
-      if (bin->child && GTK_WIDGET_NO_WINDOW (bin->child) &&
-         gtk_widget_intersect (bin->child, &event->area, &child_event.area))
-       gtk_widget_event (bin->child, (GdkEvent*) &child_event);
-   }
-
-  return FALSE;
-}
-
-static gint
-gtk_tree_item2_focus_in (GtkWidget     *widget,
-                       GdkEventFocus *event)
-{
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE_ITEM2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);
-  gtk_widget_draw_focus (widget);
-
-
-  return FALSE;
-}
-
-static gint
-gtk_tree_item2_focus_out (GtkWidget     *widget,
-                        GdkEventFocus *event)
-{
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE_ITEM2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
-  gtk_widget_draw_focus (widget);
-
-
-  return FALSE;
-}
-
-static void
-gtk_real_tree_item2_select (GtkItem *item)
-{    
-  GtkTreeItem2 *tree_item;
-  GtkWidget *widget;
-
-  g_return_if_fail (item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (item));
-
-  tree_item = GTK_TREE_ITEM2 (item);
-  widget = GTK_WIDGET (item);
-
-  gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_SELECTED);
-
-  if (!widget->parent || GTK_TREE2 (widget->parent)->view_mode == GTK_TREE2_VIEW_LINE)
-    gtk_widget_set_state (GTK_TREE_ITEM2 (item)->pixmaps_box, GTK_STATE_SELECTED);
-}
-
-static void
-gtk_real_tree_item2_deselect (GtkItem *item)
-{
-  GtkTreeItem2 *tree_item;
-  GtkWidget *widget;
-
-  g_return_if_fail (item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (item));
-
-  tree_item = GTK_TREE_ITEM2 (item);
-  widget = GTK_WIDGET (item);
-
-  gtk_widget_set_state (widget, GTK_STATE_NORMAL);
-
-  if (!widget->parent || GTK_TREE2 (widget->parent)->view_mode == GTK_TREE2_VIEW_LINE)
-    gtk_widget_set_state (tree_item->pixmaps_box, GTK_STATE_NORMAL);
-}
-
-static void
-gtk_real_tree_item2_toggle (GtkItem *item)
-{
-  g_return_if_fail (item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (item));
-
-  if(!GTK_WIDGET_IS_SENSITIVE(item))
-    return;
-
-  if (GTK_WIDGET (item)->parent && GTK_IS_TREE2 (GTK_WIDGET (item)->parent))
-    gtk_tree2_select_child (GTK_TREE2 (GTK_WIDGET (item)->parent),
-                          GTK_WIDGET (item));
-  else
-    {
-      /* Should we really bother with this bit? A listitem not in a list?
-       * -Johannes Keukelaar
-       * yes, always be on the safe side!
-       * -timj
-       */
-      if (GTK_WIDGET (item)->state == GTK_STATE_SELECTED)
-       gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_NORMAL);
-      else
-       gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_SELECTED);
-    }
-}
-
-static void
-gtk_real_tree_item2_expand (GtkTreeItem2 *tree_item)
-{
-  GtkTree2* tree;
-  
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  if (tree_item->subtree && !tree_item->expanded)
-    {
-      tree = GTK_TREE2 (GTK_WIDGET (tree_item)->parent); 
-      
-      /* hide subtree widget */
-      gtk_widget_show (tree_item->subtree);
-      
-      /* hide button '+' and show button '-' */
-      if (tree_item->pixmaps_box)
-       {
-         gtk_container_remove (GTK_CONTAINER (tree_item->pixmaps_box), 
-                               tree_item->plus_pix_widget);
-         gtk_container_add (GTK_CONTAINER (tree_item->pixmaps_box), 
-                            tree_item->minus_pix_widget);
-       }
-      if (tree->root_tree)
-       gtk_widget_queue_resize (GTK_WIDGET (tree->root_tree));
-      tree_item->expanded = TRUE;
-    }
-}
-
-static void
-gtk_real_tree_item2_collapse (GtkTreeItem2 *tree_item)
-{
-  GtkTree2* tree;
-  
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  if (tree_item->subtree && tree_item->expanded) 
-    {
-      tree = GTK_TREE2 (GTK_WIDGET (tree_item)->parent);
-      
-      /* hide subtree widget */
-      gtk_widget_hide (tree_item->subtree);
-      
-      /* hide button '-' and show button '+' */
-      if (tree_item->pixmaps_box)
-       {
-         gtk_container_remove (GTK_CONTAINER (tree_item->pixmaps_box), 
-                               tree_item->minus_pix_widget);
-         gtk_container_add (GTK_CONTAINER (tree_item->pixmaps_box), 
-                            tree_item->plus_pix_widget);
-       }
-      if (tree->root_tree)
-       gtk_widget_queue_resize (GTK_WIDGET (tree->root_tree));
-      tree_item->expanded = FALSE;
-    }
-}
-
-static void
-gtk_tree_item2_destroy (GtkObject *object)
-{
-  GtkTreeItem2* item;
-  GtkWidget* child;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (object));
-
-#ifdef TREE_DEBUG
-  g_message("+ gtk_tree_item2_destroy [object %#x]\n", (int)object);
-#endif /* TREE_DEBUG */
-
-  item = GTK_TREE_ITEM2(object);
-
-  /* free sub tree if it exist */
-  child = item->subtree;
-  if (child)
-    {
-      gtk_widget_ref (child);
-      gtk_widget_unparent (child);
-      gtk_widget_destroy (child);
-      gtk_widget_unref (child);
-      item->subtree = NULL;
-    }
-  
-  /* free pixmaps box */
-  child = item->pixmaps_box;
-  if (child)
-    {
-      gtk_widget_ref (child);
-      gtk_widget_unparent (child);
-      gtk_widget_destroy (child);
-      gtk_widget_unref (child);
-      item->pixmaps_box = NULL;
-    }
-  
-  
-  /* destroy plus pixmap */
-  if (item->plus_pix_widget)
-    {
-      gtk_widget_destroy (item->plus_pix_widget);
-      gtk_widget_unref (item->plus_pix_widget);
-      item->plus_pix_widget = NULL;
-    }
-  
-  /* destroy minus pixmap */
-  if (item->minus_pix_widget)
-    {
-      gtk_widget_destroy (item->minus_pix_widget);
-      gtk_widget_unref (item->minus_pix_widget);
-      item->minus_pix_widget = NULL;
-    }
-  
-  /* By removing the pixmaps here, and not in unrealize, we depend on
-   * the fact that a widget can never change colormap or visual.
-   */
-  gtk_tree_item2_remove_pixmaps (item);
-  
-  GTK_OBJECT_CLASS (parent_class)->destroy (object);
-  
-#ifdef TREE_DEBUG
-  g_message("- gtk_tree_item2_destroy\n");
-#endif /* TREE_DEBUG */
-}
-
-void
-gtk_tree_item2_remove_subtree (GtkTreeItem2* item) 
-{
-  g_return_if_fail (item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2(item));
-  g_return_if_fail (item->subtree != NULL);
-  
-  if (GTK_TREE2 (item->subtree)->children)
-    {
-      /* The following call will remove the children and call
-       * gtk_tree_item2_remove_subtree() again. So we are done.
-       */
-      gtk_tree2_remove_items (GTK_TREE2 (item->subtree), 
-                            GTK_TREE2 (item->subtree)->children);
-      return;
-    }
-
-  if (GTK_WIDGET_MAPPED (item->subtree))
-    gtk_widget_unmap (item->subtree);
-      
-  gtk_widget_unparent (item->subtree);
-  
-  if (item->pixmaps_box)
-    gtk_widget_hide (item->pixmaps_box);
-  
-  item->subtree = NULL;
-
-  if (item->expanded)
-    {
-      item->expanded = FALSE;
-      if (item->pixmaps_box)
-       {
-         gtk_container_remove (GTK_CONTAINER (item->pixmaps_box), 
-                               item->minus_pix_widget);
-         gtk_container_add (GTK_CONTAINER (item->pixmaps_box), 
-                            item->plus_pix_widget);
-       }
-    }
-}
-
-static void
-gtk_tree_item2_map (GtkWidget *widget)
-{
-  GtkBin *bin;
-  GtkTreeItem2* item;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-
-  bin = GTK_BIN (widget);
-  item = GTK_TREE_ITEM2(widget);
-
-  GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
-
-  if(item->pixmaps_box &&
-     GTK_WIDGET_VISIBLE (item->pixmaps_box) &&
-     !GTK_WIDGET_MAPPED (item->pixmaps_box))
-    gtk_widget_map (item->pixmaps_box);
-
-  if (bin->child &&
-      GTK_WIDGET_VISIBLE (bin->child) &&
-      !GTK_WIDGET_MAPPED (bin->child))
-    gtk_widget_map (bin->child);
-
-  gdk_window_show (widget->window);
-}
-
-static void
-gtk_tree_item2_unmap (GtkWidget *widget)
-{
-  GtkBin *bin;
-  GtkTreeItem2* item;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-
-  GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
-  bin = GTK_BIN (widget);
-  item = GTK_TREE_ITEM2(widget);
-
-  gdk_window_hide (widget->window);
-
-  if(item->pixmaps_box &&
-     GTK_WIDGET_VISIBLE (item->pixmaps_box) &&
-     GTK_WIDGET_MAPPED (item->pixmaps_box))
-    gtk_widget_unmap (bin->child);
-
-  if (bin->child &&
-      GTK_WIDGET_VISIBLE (bin->child) &&
-      GTK_WIDGET_MAPPED (bin->child))
-    gtk_widget_unmap (bin->child);
-}
-
-static void
-gtk_tree_item2_forall (GtkContainer *container,
-                     gboolean      include_internals,
-                     GtkCallback   callback,
-                     gpointer      callback_data)
-{
-  GtkBin *bin;
-  GtkTreeItem2 *tree_item;
-
-  g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (container));
-  g_return_if_fail (callback != NULL);
-
-  bin = GTK_BIN (container);
-  tree_item = GTK_TREE_ITEM2 (container);
-
-  if (bin->child)
-    (* callback) (bin->child, callback_data);
-/*  if (include_internals && tree_item->subtree)
-    (* callback) (tree_item->subtree, callback_data); */
-}
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtktreeitem2.h b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/gtktreeitem2.h
deleted file mode 100644 (file)
index bbbb364..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#ifndef __GTK_TREE_ITEM2_H__
-#define __GTK_TREE_ITEM2_H__
-
-
-#include <gdk/gdk.h>
-#include <gtk/gtkitem.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
-#define GTK_TYPE_TREE_ITEM2              (gtk_tree_item2_get_type ())
-#define GTK_TREE_ITEM2(obj)              (GTK_CHECK_CAST ((obj), GTK_TYPE_TREE_ITEM2, GtkTreeItem2))
-#define GTK_TREE_ITEM2_CLASS(klass)      (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_TREE_ITEM2, GtkTreeItem2Class))
-#define GTK_IS_TREE_ITEM2(obj)           (GTK_CHECK_TYPE ((obj), GTK_TYPE_TREE_ITEM2))
-#define GTK_IS_TREE_ITEM2_CLASS(klass)   (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TREE_ITEM2))
-
-#define GTK_TREE_ITEM2_SUBTREE(obj)      (GTK_TREE_ITEM2(obj)->subtree)
-
-
-typedef struct _GtkTreeItem2       GtkTreeItem2;
-typedef struct _GtkTreeItem2Class  GtkTreeItem2Class;
-
-struct _GtkTreeItem2
-{
-  GtkItem item;
-
-  GtkWidget *subtree;
-  GtkWidget *pixmaps_box;
-  GtkWidget *plus_pix_widget, *minus_pix_widget;
-
-  GList *pixmaps;              /* pixmap node for this items color depth */
-
-  guint expanded : 1;
-};
-
-struct _GtkTreeItem2Class
-{
-  GtkItemClass parent_class;
-
-  void (* expand)   (GtkTreeItem2 *tree_item);
-  void (* collapse) (GtkTreeItem2 *tree_item);
-};
-
-
-GtkType    gtk_tree_item2_get_type       (void);
-GtkWidget* gtk_tree_item2_new            (void);
-GtkWidget* gtk_tree_item2_new_with_label (gchar       *label);
-void       gtk_tree_item2_set_subtree    (GtkTreeItem2 *tree_item,
-                                        GtkWidget   *subtree);
-void       gtk_tree_item2_remove_subtree (GtkTreeItem2 *tree_item);
-void       gtk_tree_item2_select         (GtkTreeItem2 *tree_item);
-void       gtk_tree_item2_deselect       (GtkTreeItem2 *tree_item);
-void       gtk_tree_item2_expand         (GtkTreeItem2 *tree_item);
-void       gtk_tree_item2_collapse       (GtkTreeItem2 *tree_item);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GTK_TREE_ITEM2_H__ */
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/handlebox.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/handlebox.xpm
deleted file mode 100644 (file)
index e4d792c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* XPM */
-static char *handlebox_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 7 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray87",
-"+ c Gray100",
-"@ c None",
-/* pixels */
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@++++++++++++++++++ @",
-"@+OOOO.XXXXXXXXXXX. @",
-"@++OOO.XXXXXXXXXXX. @",
-"@+O.+O.XXXXXXXXXXX. @",
-"@+OOO..XXXXXXXXXXX. @",
-"@++OOO.XXXXXXXXXXX. @",
-"@+O.+O.XXXXXXXXXXX. @",
-"@+OOO..XXXXXXXXXXX. @",
-"@++OOO.XXXXXXXXXXX. @",
-"@+O.+O.XXXXXXXXXXX. @",
-"@+OOO..XXXXXXXXXXX. @",
-"@+................. @",
-"@                   @",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/hbox.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/hbox.xpm
deleted file mode 100644 (file)
index 7363317..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* XPM */
-static char *hbox_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 4 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c Gray100",
-/* pixels */
-"oooooo oooooo oooooo ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"o..... o..... o..... ",
-"                     "
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/hbuttonbox.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/hbuttonbox.xpm
deleted file mode 100644 (file)
index 77d73dc..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *hbuttonbox_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+OOOOO +OOOOO +OOOOO ",
-"+OXXX. +OXXX. +OXXX. ",
-"+OXXX. +OXXX. +OXXX. ",
-"+O.... +O.... +O.... ",
-"+      +      +      ",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/hseparator.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/hseparator.xpm
deleted file mode 100644 (file)
index 41ad8aa..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* XPM */
-static char *hseparator_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 4 1",
-"  c #7b7b7b",
-". c #b3cece",
-"X c Gray100",
-"o c None",
-/* pixels */
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"o                   o",
-"oXXXXXXXXXXXXXXXXXXXo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/label.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/label.xpm
deleted file mode 100644 (file)
index 013e13a..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* XPM */
-static char *label_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 3 1",
-"  c Gray0",
-". c #b3cece",
-"X c None",
-/* pixels */
-"XXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXX  XXXXXXXXX",
-"XXXXXXXXX   XXXXXXXXX",
-"XXXXXXXXX   XXXXXXXXX",
-"XXXXXXXX     XXXXXXXX",
-"XXXXXXXX     XXXXXXXX",
-"XXXXXXXX      XXXXXXX",
-"XXXXXXX  X    XXXXXXX",
-"XXXXXXX  X     XXXXXX",
-"XXXXXX  XX     XXXXXX",
-"XXXXXX          XXXXX",
-"XXXXX           XXXXX",
-"XXXXX  XXXXX    XXXXX",
-"XXXX   XXXXX     XXXX",
-"XXX    XXXXX      XXX",
-"XXX     XXX       XXX",
-"XXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXX"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/load_lexer.mll b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/load_lexer.mll
deleted file mode 100644 (file)
index 46aa5ac..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-open Load_parser
-} 
-
-rule token = parse
-  [ ' ' '\t' '\n']+     { token lexbuf }
-| "<window"             { WINDOW_START }
-| "</window>"           { WINDOW_END }
-| "name"                { NAME }
-|  '='                  { EQUAL }
-|  '>'                  { SUP }
-
-| "<" ['A'-'Z' 'a'-'z' '0'-'9' '_']+
-  {
-    let l = Lexing.lexeme lexbuf in
-    let s = String.sub l ~pos:1 ~len:(String.length l - 1) in
-    WIDGET_START s
-  }
-
-| "</" ['A'-'Z' 'a'-'z' '0'-'9' '_']+ '>'
-  {
-    let l = Lexing.lexeme lexbuf in
-    let s = String.sub l ~pos:2 ~len:(String.length l - 3) in
-    WIDGET_END s
-  }
-
-| '"' [^ '"']* '"'
-  {
-    let l = Lexing.lexeme lexbuf in
-    let s = String.sub l ~pos:1 ~len:(String.length l - 2) in
-    IDENT s
-  }
-
-| '\'' [^ '\'']* '\''
-  {
-    let l = Lexing.lexeme lexbuf in
-    let s = String.sub l ~pos:1 ~len:(String.length l - 2) in
-    IDENT s
-  }
-
-| ['A'-'Z' 'a'-'z' '0'-'9' '_' '.']+
-  {
-    let s = Lexing.lexeme lexbuf in IDENT s
-  }
-
-| eof               { EOF }
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/load_parser.mly b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/load_parser.mly
deleted file mode 100644 (file)
index 09c7b7b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-%{
-open Utils
-%}
-
-%token EOF NAME EQUAL SUP WINDOW_START WINDOW_END
-%token <string> WIDGET_START WIDGET_END IDENT
-
-%type <string> window_start
-%type <string * string> property widget_start
-%type <(string * string) list> property_list
-%type <Utils.yywidget_tree> widget window
-%type <Utils.yywidget_tree list> children window_list project
-
-%start project
-%start window
-%start widget
-
-%%
-
-project : window_list EOF        { List.rev $1 }
-
-window_list :                    { [] }
-            | window_list window { $2 :: $1 }
-; 
-
-window : window_start property_list children WINDOW_END 
-  { 
-    Node (("window", $1, List.rev $2), $3)
-  } 
-;
-
-window_start : WINDOW_START NAME EQUAL IDENT SUP   { $4 }
-;
-
-children  :                  { [] }
-         | children widget   { $2 :: $1 }
-;
-
-widget : widget_start property_list children WIDGET_END
-  { 
-    let classe, name = $1 in
-    if classe <> $4 then raise Parsing.Parse_error;
-    Node ((classe, name, List.rev $2), $3)
-  } 
-;
-
-widget_start  : WIDGET_START NAME EQUAL IDENT SUP   { $1, $4 }
-;
-
-property_list :                         { [] }
-              | property_list property  { $2 :: $1 }
-;
-
-property      : IDENT EQUAL IDENT       { $1, $3 }
-;
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/main.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/main.ml
deleted file mode 100644 (file)
index cb150e0..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-(* $Id$ *)
-
-open GdkKeysyms
-open Gtk
-open GObj
-
-open Utils
-open TiBase
-
-let main_project_modify = ref false
-
-let main_window  = GWindow.window ~title:"ZOOM" ~x:10 ~y:10 ()
-let main_vbox    = GPack.vbox ~packing:main_window#add ()
-let main_menu    = GMenu.menu_bar ~packing:(main_vbox#pack ~expand:false) ()
-
-let can_copy = ref (fun _ -> assert false)
-let can_paste = ref (fun _ -> assert false)
-
-class project () =
-  let project_box = GPack.vbox ~packing:main_vbox#pack () in
-  let project_tree = GTree2.tree ~packing:project_box#pack () in
-  object(self)
-    val mutable window_list = []
-
-(* the selected window *)
-    val mutable selected = (None : window_and_tree option)
-
-    method change_selected sel =
-      match selected with
-      |        None ->
-         selected <- Some sel;
-         sel#project_tree_item#misc#set_state `SELECTED;
-         !can_copy true
-      |        Some old_sel ->
-         if sel = old_sel then begin
-           selected <- None;
-           sel#project_tree_item#misc#set_state `NORMAL;
-           !can_copy false
-         end else begin
-           old_sel#project_tree_item#misc#set_state `NORMAL;
-           selected <- Some sel;
-           sel#project_tree_item#misc#set_state `SELECTED;
-           !can_copy true
-         end
-
-    val mutable filename = ""
-    val mutable dirname = ""
-
-    method set_filename f =
-      let dir, file = split_filename f ~ext:".rad" in
-      filename <- file;
-      dirname <- dir
-
-    method get_filename () =
-      get_filename ~callback:self#set_filename ~dir:dirname ()
-
-    method dirname = dirname
-
-(*    method set_dirname f = dirname <- f *)
-
-    method add_window ~name ?tree:wt () =
-      let wt = match wt with
-      |        None -> new window_and_tree ~name
-      |        Some wt -> wt in
-      let tiwin = wt#tiwin and tw=wt#tree_window in
-      let project_tree_item = wt#project_tree_item in
-      project_tree#append project_tree_item;
-      let show = ref true in
-      project_tree_item#event#connect#button_press ~callback:
-       (fun ev ->
-       match GdkEvent.get_type ev with
-       | `BUTTON_PRESS ->
-           if GdkEvent.Button.button ev = 1 then begin
-             self#change_selected wt
-           end else
-           if GdkEvent.Button.button ev = 3 then begin
-             let menu = GMenu.menu () in
-             let name = wt#tiwin#name in
-             let mi_remove = GMenu.menu_item ~label:("delete " ^ name)
-                 ~packing:menu#append ()
-             and mi_copy = GMenu.menu_item ~label:("copy " ^ name)
-                 ~packing:menu#append ()      
-             and mi_cut = GMenu.menu_item ~label:("cut " ^ name)
-                 ~packing:menu#append () in
-             mi_remove#connect#activate
-               ~callback:(fun () -> self#delete_window wt);
-             mi_copy#connect#activate
-               ~callback:(fun () -> self#copy_wt wt);
-             mi_cut#connect#activate
-               ~callback:(fun () -> self#cut_wt wt);
-             menu#popup ~button:3 ~time:(GdkEvent.Button.time ev)
-           end;
-            GtkSignal.stop_emit ();
-            true
-       | `TWO_BUTTON_PRESS ->
-           if GdkEvent.Button.button ev = 1 then begin
-             if !show then begin
-               show := false;
-               tiwin#widget#misc#hide ();
-               tw#misc#hide ()
-             end
-             else begin
-               show := true;
-               tiwin#widget#misc#show ();
-               tw#misc#show ()
-             end
-           end;
-           true
-       | _ -> false);
-      tiwin#connect_event#delete ~callback:
-       (fun _ -> show := false; tiwin#widget#misc#hide (); true);
-      tw#event#connect#delete ~callback:
-       (fun _ -> show := false; tw#misc#hide (); true);
-      window_list <- wt :: window_list;
-      add_undo (Remove_window name);
-      main_window#misc#set_can_focus false;
-      main_window#misc#grab_focus ()
-
-      
-    method add_window_by_node
-       (Node ((classe, name, proplist), children)) =
-      if classe <> "window"
-      then failwith "add_window_by_node: class <> \"window\"";
-      let name = change_name name in  (* for paste *)
-      let wt = new window_and_tree ~name in
-      let tiwin = wt#tiwin in
-      List.iter proplist ~f:(fun (n,v) -> tiwin#set_property n v);
-      begin match children with
-      | [] -> ()
-      | [ ch ] -> tiwin#add_children_wo_undo ch; ()
-      | _ -> failwith "add_window_by_node: more than one child"
-      end;
-      self#add_window ~name ~tree:wt ()
-
-    method delete_window (wt : window_and_tree) =
-      let tiwin = wt#tiwin in
-      project_tree#remove wt#project_tree_item;
-      tiwin#remove_me ();
-      wt#tree_window#destroy ();
-      window_list <- list_remove ~f:(fun w -> w = wt) window_list
-
-    method delete_window_by_name ~name =
-      let wt = List.find window_list ~f:(fun wt -> wt#tiwin#name = name) in
-      self#delete_window wt
-      
-    method delete () =
-      List.iter window_list
-       ~f:(fun wt -> self#delete_window wt);
-      main_vbox#remove project_box#coerce;
-(* remove after test *)
-      if !name_list <> [] then failwith "name_list not empty"
-
-    method save_as () = if self#get_filename () then self#save ()
-
-    method save () =
-      if filename = "" then self#save_as ()
-      else begin
-       let outch = open_out (dirname ^ filename ^ ".rad") in
-       let f = Format.formatter_of_out_channel outch in
-       List.iter window_list ~f:(fun wt -> wt#tiwin#save f);
-       close_out outch;
-       main_project_modify := false
-      end
-
-    method copy_wt (wt : window_and_tree) =
-      wt#tiwin#copy ();
-      !can_paste true
-
-    method cut_wt (wt : window_and_tree) =
-      self#copy_wt wt;
-      self#delete_window wt
-
-    method copy () =
-      match selected with
-      |        None -> failwith "main_project copy"
-      |        Some sel -> self#copy_wt sel
-
-    method cut () =
-      match selected with
-      |        None -> failwith "main_project cut"
-      |        Some sel -> self#cut_wt sel
-
-    method paste () =
-      let lexbuf = Lexing.from_string !window_selection in
-      let node = Load_parser.window Load_lexer.token lexbuf in
-      self#add_window_by_node node
-
-    method emit () =
-      let outc = open_out (dirname ^ filename ^ ".ml") in
-      let f = Format.formatter_of_out_channel outc in
-      List.iter window_list ~f:(fun wt -> wt#emit f);
-      Format.fprintf f "let main () =@\n";
-(* this is just for demo *)
-      List.iter window_list ~f:
-       begin fun wt ->
-         let name = wt#tiwin#name in
-         Format.fprintf f "  let %s = new %s () in %s#show ();@\n"
-           name name name
-       end;
-      Format.fprintf f
-       "  GMain.Main.main ()@\n@\nlet _ = main ()@\n";
-      close_out outc
-
-  end
-
-
-let main_project = ref (new project ())
-
-let load () =
-  let filename = ref "" in
-  get_filename ~callback:(fun f -> filename := f) ~dir:!main_project#dirname ();
-  if !filename <> "" then begin
-    !main_project#delete ();
-    main_project := new project ();
-    let inch = open_in !filename in
-    let lexbuf = Lexing.from_channel inch in
-    let project_list = Load_parser.project Load_lexer.token lexbuf in
-    close_in inch;
-    List.iter project_list
-      ~f:(fun node -> !main_project#add_window_by_node node);
-    !main_project#set_filename !filename
-  end
-
-
-let interpret_undo = function
-  | Add (parent_name, node, pos) ->
-      let parent = Hashtbl.find widget_map parent_name in
-      parent#add_children node ~pos
-  | Remove child_name ->
-      let child  = Hashtbl.find widget_map child_name in
-      child#remove_me ()
-  | Property (property, value_string) ->
-      property#set value_string
-  | Add_window node -> !main_project#add_window_by_node node
-  | Remove_window name -> !main_project#delete_window_by_name ~name
-
-let undo () =
-  if !last_action_was_undo then begin
-    match !next_undo_info with
-    | hd :: tl -> interpret_undo hd; next_undo_info := tl
-    | [] -> message "no more undo info"
-  end
-  else begin
-    match !undo_info with
-    | hd :: tl -> interpret_undo hd; next_undo_info := tl
-    | [] -> message "no undo info"
-  end;
-  last_action_was_undo := true
-
-
-let targets = [  { target = "STRING"; flags = []; info = 0}  ]
-
-let xpm_window () =
-  let source_drag_data_get classe _ (data : selection_data) ~info ~time =
-    data#set ~typ:data#target ~format:0 ~data:classe in
-  let window = GWindow.window ~title:"icons" ~x:250 ~y:10 () in
-  window#misc#realize ();
-  let vbox = GPack.vbox ~packing:window#add () in
-  let table = GPack.table ~rows:1 ~columns:5 ~border_width:20
-      ~packing:vbox#pack () in
-  let tooltips = GData.tooltips () in
-  let add_xpm ~file ~left ~top ~tip =
-    let gdk_pix = GDraw.pixmap_from_xpm ~file ~window () in
-    let ev = GBin.event_box ~packing:(table#attach ~left ~top) () in
-    let pix = GMisc.pixmap gdk_pix ~packing:ev#add () in
-    ev#event#connect#button_press ~callback:
-      (fun ev -> match GdkEvent.get_type ev with
-       | `BUTTON_PRESS ->
-           if GdkEvent.Button.button ev = 1 then begin
-             !main_project#add_window ~name:(make_new_name "window") ()
-           end;
-           true
-       | _ -> false);
-    tooltips#set_tip ev#coerce ~text:tip
-  in
-  add_xpm ~file:"window.xpm" ~left:0 ~top:0 ~tip:"window";
-  GMisc.separator `HORIZONTAL ~packing:vbox#pack ();
-  let table = GPack.table ~rows:6 ~columns:6 ~packing:vbox#pack
-      ~row_spacings:20 ~col_spacings:20 ~border_width:20 () in
-  let add_xpm file ~left ~top ~classe =
-    let gdk_pix = GDraw.pixmap_from_xpm ~file ~window () in
-    let ev = GBin.event_box ~packing:(table#attach ~left ~top) () in
-    let pix = GMisc.pixmap gdk_pix ~packing:ev#add () in
-    ev#drag#source_set ~modi:[`BUTTON1] targets ~actions:[`COPY];
-    ev#drag#source_set_icon ~colormap:window#misc#style#colormap 
-      gdk_pix; 
-    ev#drag#connect#data_get ~callback:(source_drag_data_get classe);
-    tooltips#set_tip ev#coerce ~text:classe
-  in
-  
-  add_xpm "button.xpm"         ~left:0 ~top:0 ~classe:"button";
-  add_xpm "togglebutton.xpm"   ~left:1 ~top:0 ~classe:"toggle_button";
-  add_xpm "checkbutton.xpm"    ~left:2 ~top:0 ~classe:"check_button";
-  add_xpm "radiobutton.xpm"    ~left:3 ~top:0 ~classe:"radio_button";
-  add_xpm "toolbar.xpm"        ~left:4 ~top:0 ~classe:"toolbar";
-  add_xpm "hbox.xpm"           ~left:0 ~top:1 ~classe:"hbox";
-  add_xpm "vbox.xpm"           ~left:1 ~top:1 ~classe:"vbox";
-  add_xpm "hbuttonbox.xpm"     ~left:2 ~top:1 ~classe:"hbutton_box";
-  add_xpm "vbuttonbox.xpm"     ~left:3 ~top:1 ~classe:"vbutton_box";
-  add_xpm "fixed.xpm"          ~left:4 ~top:1 ~classe:"fixed";
-  add_xpm "frame.xpm"          ~left:0 ~top:2 ~classe:"frame";
-  add_xpm "aspectframe.xpm"    ~left:1 ~top:2 ~classe:"aspect_frame";
-  add_xpm "scrolledwindow.xpm" ~left:2 ~top:2 ~classe:"scrolled_window";
-  add_xpm "eventbox.xpm"       ~left:3 ~top:2 ~classe:"event_box";
-  add_xpm "handlebox.xpm"      ~left:4 ~top:2 ~classe:"handle_box";
-  add_xpm "viewport.xpm"       ~left:5 ~top:2 ~classe:"viewport";
-  add_xpm "hseparator.xpm"     ~left:0 ~top:3 ~classe:"hseparator";
-  add_xpm "vseparator.xpm"     ~left:1 ~top:3 ~classe:"vseparator";
-  add_xpm "clist.xpm"          ~left:2 ~top:3 ~classe:"clist";
-  add_xpm "label.xpm"          ~left:0 ~top:4 ~classe:"label";
-  add_xpm "statusbar.xpm"      ~left:1 ~top:4 ~classe:"statusbar";
-  add_xpm "notebook.xpm"       ~left:2 ~top:4 ~classe:"notebook";
-  add_xpm "colorselection.xpm" ~left:3 ~top:4 ~classe:"color_selection";
-  add_xpm "pixmap.xpm"         ~left:4 ~top:4 ~classe:"pixmap";
-  add_xpm "entry.xpm"          ~left:0 ~top:5 ~classe:"entry";
-  add_xpm "spinbutton.xpm"     ~left:1 ~top:5 ~classe:"spin_button";
-  add_xpm "combo.xpm"          ~left:2 ~top:5 ~classe:"combo";
-
-  window#show ();
-  window
-
-
-let main () =
-  let _ = GMain.Main.init () in
-  let prop_win = Propwin.init () in
-  let palette = xpm_window () in
-  main_window#show ();
-  main_window#connect#destroy ~callback:GMain.Main.quit;
-
-  let mp = main_project in
-  let f = new GMenu.factory main_menu in
-  let accel_group  = f#accel_group in
-  main_window#add_accel_group accel_group;
-  prop_win#add_accel_group accel_group;
-  palette#add_accel_group accel_group;
-
-  let file_menu    = new GMenu.factory (f#add_submenu "File") ~accel_group
-  and edit_menu    = new GMenu.factory (f#add_submenu "Edit") ~accel_group
-  and view_menu    = new GMenu.factory (f#add_submenu "View") ~accel_group
-  and project_menu = new GMenu.factory (f#add_submenu "Project") ~accel_group
-  in
-
-  file_menu#add_item "Quit" ~key:_Q ~callback:GMain.Main.quit;
-
-  project_menu#add_item "New" ~key:_N
-    ~callback:(fun () -> !mp#delete (); mp := new project ());
-  project_menu#add_item "Open..." ~key:_O ~callback:load;
-  project_menu#add_item "Save" ~key:_S ~callback:(fun () -> !mp#save ());
-  project_menu#add_item "Save as..." ~callback:(fun () -> !mp#save_as ());
-  project_menu#add_separator ();
-  project_menu#add_item "Emit code" ~callback:(fun () -> !mp#emit ());
-
-  let copy_item =
-    edit_menu#add_item "Copy" ~key:_C ~callback:(fun () -> !mp#copy ())
-  and cut_item =
-    edit_menu#add_item "Cut" ~key:_X ~callback:(fun () -> !mp#cut ())
-  and paste_item =
-    edit_menu#add_item "Paste" ~key:_V ~callback:(fun () -> !mp#paste ())
-  in
-  can_copy :=
-    (fun b -> copy_item#misc#set_sensitive b; cut_item#misc#set_sensitive b);
-  can_paste := paste_item#misc#set_sensitive;
-  !can_copy false; !can_paste false;
-  edit_menu#add_item "Undo" ~key:_Z ~callback:undo;
-
-  let palette_visible = ref true in
-  palette#event#connect#delete ~callback:
-    (fun _ -> palette_visible := false; palette#misc#hide (); true);
-  view_menu#add_item "Palette"
-    ~callback:(fun () ->
-      if !palette_visible then begin
-       palette#misc#hide ();
-       palette_visible := false
-      end else begin
-       palette#misc#show ();
-       palette_visible := true
-      end);
-  let prop_win_visible = ref true in
-  prop_win#event#connect#delete ~callback:
-    (fun _ -> prop_win_visible := false; prop_win#misc#hide (); true);
-  view_menu#add_item "Properties window"
-    ~callback:(fun () ->
-      if !prop_win_visible then begin
-       prop_win#misc#hide ();
-       prop_win_visible := false
-      end else begin
-       prop_win#misc#show ();
-       prop_win_visible := true
-      end);
-
-  GMain.Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/ml_gtk2.c b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/ml_gtk2.c
deleted file mode 100644 (file)
index 49ce27b..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/* $Id$ */
-
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "../../wrappers.h"
-#include "../../ml_glib.h"
-#include "../../ml_gdk.h"
-#include "../../ml_gtk.h"
-#include "../../gtk_tags.h"
-
-#include "gtktree2.h"
-#include "gtktreeitem2.h"
-
-#include <stdio.h>
-
-value Val_GtkObject_sink (GtkObject *);
-
-#define Val_GtkAny(w) Val_GtkObject((GtkObject*)w)
-#define Val_GtkAny_sink(w) Val_GtkObject_sink((GtkObject*)w)
-
-#define GtkWidget_val(val) check_cast(GTK_WIDGET,val)
-
-/* gtkwidget.h */
-
-
-#define Val_GtkWidget Val_GtkAny
-#define Val_GtkWidget_sink Val_GtkAny_sink
-
-
-/* gtktreeitem2.h */
-
-#define GtkTreeItem2_val(val) check_cast(GTK_TREE_ITEM2,val)
-ML_0 (gtk_tree_item2_new, Val_GtkWidget_sink)
-ML_1 (gtk_tree_item2_new_with_label, String_val, Val_GtkWidget_sink)
-ML_2 (gtk_tree_item2_set_subtree, GtkTreeItem2_val, GtkWidget_val, Unit)
-ML_1 (gtk_tree_item2_remove_subtree, GtkTreeItem2_val, Unit)
-ML_1 (gtk_tree_item2_expand, GtkTreeItem2_val, Unit)
-ML_1 (gtk_tree_item2_collapse, GtkTreeItem2_val, Unit)
-ML_1 (GTK_TREE_ITEM2_SUBTREE, GtkTreeItem2_val, Val_GtkWidget)
-
-/* gtktree2.h */
-
-#define GtkTree2_val(val) check_cast(GTK_TREE2,val)
-ML_0 (gtk_tree2_new, Val_GtkWidget_sink)
-ML_3 (gtk_tree2_insert, GtkTree2_val, GtkWidget_val, Int_val, Unit)
-ML_3 (gtk_tree2_clear_items, GtkTree2_val, Int_val, Int_val, Unit)
-ML_2 (gtk_tree2_select_item, GtkTree2_val, Int_val, Unit)
-ML_2 (gtk_tree2_unselect_item, GtkTree2_val, Int_val, Unit)
-ML_2 (gtk_tree2_select_child, GtkTree2_val, GtkWidget_val, Unit)
-ML_2 (gtk_tree2_unselect_child, GtkTree2_val, GtkWidget_val, Unit)
-ML_2 (gtk_tree2_child_position, GtkTree2_val, GtkWidget_val, Val_int)
-
-/*
-ML_2 (gtk_tree2_set_selection_mode, GtkTree2_val, Selection_mode_val, Unit)
-ML_2 (gtk_tree2_set_view_mode, GtkTree2_val, Tree_view_mode_val, Unit)
-*/
-
-ML_2 (gtk_tree2_set_view_lines, GtkTree2_val, Bool_val, Unit)
-ML_2 (gtk_tree2_item_up, GtkTree2_val, Int_val, Unit)
-ML_3 (gtk_tree2_select_next_child, GtkTree2_val, GtkWidget_val, Bool_val, Unit)
-ML_2 (gtk_tree2_select_prev_child, GtkTree2_val, GtkWidget_val, Unit)
-
-static value val_gtkany (gpointer p) { return Val_GtkAny(p); }
-value ml_gtk_tree2_selection (value tree)
-{
-  GList *selection = GTK_TREE2_SELECTION(GtkTree2_val(tree));
-  return Val_GList(selection, val_gtkany);
-}
-static gpointer gtkobject_val (value val) { return GtkObject_val(val); }
-value ml_gtk_tree2_remove_items (value tree, value items)
-{
-  GList *items_list = GList_val (items, gtkobject_val);
-  gtk_tree2_remove_items (GtkTree2_val(tree), items_list);
-  return Val_unit;
-}
-
-value ml_gtk_tree2_children (value tree)
-{
-  GList *children = (GtkTree2_val(tree))->children;
-  return Val_GList(children, val_gtkany);
-}
-
-
-
-#define GtkToolbar_val(val) check_cast(GTK_TOOLBAR,val)
-/* sets the text of the label of a button; creates the label
-   if necessary */
-value ml_gtk_toolbar2_set_text (value toolbar, value text, value pos)
-{
-  GtkToolbar *t = GtkToolbar_val(toolbar);
-  GtkToolbarChild *ch = (GtkToolbarChild *)g_list_nth_data (t->children, Int_val(pos));
-  GtkWidget *label = ch->label;
-
-  if (label)
-    gtk_label_set_text (GTK_LABEL(label), String_val(text));
-  else {
-    label = ch->label = gtk_label_new (String_val(text));
-    gtk_box_pack_end (GTK_BOX (GTK_BIN(ch->widget)->child), label, FALSE, FALSE, 0);
-    if (t->style != GTK_TOOLBAR_ICONS)
-      gtk_widget_show (label);
-  }
-
-  return Val_unit;
-}
-
-value ml_gtk_toolbar2_set_icon (value toolbar, value icon, value pos)
-{
-  GtkToolbar *t = GtkToolbar_val(toolbar);
-  GtkToolbarChild * ch =
-    (GtkToolbarChild *)g_list_nth_data (t->children, Int_val(pos));
-  GtkWidget *vbox = GTK_BIN(ch->widget)->child;
-  gtk_container_remove (GTK_CONTAINER(vbox), ch->icon);
-  ch->icon = GtkWidget_val(icon);
-  gtk_box_pack_end (GTK_BOX (vbox), ch->icon, FALSE, FALSE, 0);
-  if (t->style != GTK_TOOLBAR_TEXT)
-    gtk_widget_show (ch->icon);
-  
-  return Val_unit;
-}
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/notebook.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/notebook.xpm
deleted file mode 100644 (file)
index 77ac20d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *notebook_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+OOOOOO.OOOO.OOOO.+++",
-"+OXXXXX.X.X..X.X..+++",
-"+OXXXXX..X.X..X.X.+++",
-"+OXXXXX.X.X..X.X..+++",
-"+OXXXXX.OOOOOOOOOOO +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+O................. +",
-"+                   +",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/pixmap.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/pixmap.xpm
deleted file mode 100644 (file)
index d76a5ec..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char *pixmap_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 12 1",
-"  c Gray0",
-". c #007b00",
-"X c #7b7b7b",
-"o c Blue",
-"O c Green",
-"+ c Cyan",
-"@ c Yellow",
-"# c #d6d6d6",
-"$ c #b3cece",
-"% c Gray87",
-"& c Gray100",
-"* c None",
-/* pixels */
-"*********************",
-"*********************",
-"*********************",
-"*                    ",
-"* +++++%%%&+++++++++ ",
-"* +&&&++%%++&+++XX++ ",
-"* +++++++%+++++X@@X+ ",
-"* ++&&++++XX+++X@@X+ ",
-"* +++++++ XXX&++XX++ ",
-"* &+++++XXXXXX++++&+ ",
-"* +++++        +++++ ",
-"* +++++ ###### +++++ ",
-"* +++++ #o##o# +++++ ",
-"* ..... ###### ..... ",
-"* OOOOO ##oo## OOOOO ",
-"* OOOOO ##oo## OOOOO ",
-"* OOOOO        OOOOO ",
-"* OOOOOOOOOOOOOOOOOO ",
-"*                    ",
-"*********************",
-"*********************"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/property.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/property.ml
deleted file mode 100644 (file)
index 829e40b..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GEdit
-open GData
-open GPack
-open GMisc
-open GWindow
-
-open Common
-open Utils
-
-(* external id : 'a -> 'a = "%identity" *)
-
-class virtual vprop ~name ~init ~set =
-  object (self)
-    val mutable s : string = init
-    val name : string = name
-    method private virtual parse : string -> 'a
-    method get = s
-    method set s' =
-      if s' <> s then begin
-       let v = self#parse s' in
-       if (set v) then begin
-         add_undo (Property ((self :> prop), s));
-         s <- s'
-       end
-      end
-    method modified = s <> init
-    method name = name
-    method code = s
-    method virtual range : range
-    method save_code = self#code
-  end
-
-let invalid_prop kind name s =
-  invalid_arg (Printf.sprintf "Property.%s(%s) <- %s" kind name s)
-
-class prop_enum ~values ~name ~init ~set =
-  object (self)
-    inherit vprop ~name ~init ~set
-    method private parse s =
-      try List.assoc s values
-      with Not_found -> invalid_prop "enum" name s
-    method range = Enum (List.map ~f:fst values)
-  end
-
-(* used for radio_button groups; there is nothing to do
-  in radtest when setting a radio_button group, only when writing
-  code or saving *)
-class prop_enum_dyn ~values ~name ~init ~set =
-  object (self)
-    inherit vprop ~name ~init ~set
-    method private parse s = ()
-    method range = Enum (values ())
-  end
-
-let bool_values =
-  [ "true", true; "false", false ]
-
-let shadow_type_values : (string * Tags.shadow_type) list =
-  [ "NONE", `NONE; "IN", `IN; "OUT", `OUT;
-    "ETCHED_IN", `ETCHED_IN; "ETCHED_OUT", `ETCHED_OUT ]
-
-let policy_type_values : (string * Tags.policy_type) list =
-  [ "ALWAYS", `ALWAYS; "AUTOMATIC", `AUTOMATIC ]
-
-let orientation_values : (string * Tags.orientation) list =
-  [ "HORIZONTAL", `HORIZONTAL; "VERTICAL", `VERTICAL ]
-
-let toolbar_style_values : (string * Tags.toolbar_style) list =
-  [ "ICONS", `ICONS; "TEXT", `TEXT; "BOTH", `BOTH ]
-
-let toolbar_space_style_values : (string * [`EMPTY | `LINE]) list =
-  [ "EMPTY", `EMPTY; "LINE", `LINE ]
-
-let relief_style_values : (string * Tags.relief_style) list =
-  [ "NORMAL", `NORMAL; "HALF", `HALF; "NONE", `NONE ]
-
-let position_values : (string * Tags.position) list =
-  [ "LEFT", `LEFT; "RIGHT", `RIGHT; "TOP", `TOP; "BOTTOM", `BOTTOM ]
-
-let combo_use_arrows_values : (string * [ `NEVER | `DEFAULT | `ALWAYS ]) list =
-[ "NEVER", `NEVER; "DEFAULT", `DEFAULT; "ALWAYS", `ALWAYS ] 
-
-let spin_button_update_policy_values :
-    (string * Tags. spin_button_update_policy) list =
-  [ "ALWAYS", `ALWAYS; "IF_VALID", `IF_VALID ]
-
-let button_box_style_values : (string * Tags.button_box_style) list =
-  [ "DEFAULT_STYLE", `DEFAULT_STYLE; "SPREAD", `SPREAD; "EDGE", `EDGE;
-    "START", `START; "END", `END ]
-
-let update_type_values : (string * Tags.update_type) list =
-  [ "CONTINUOUS", `CONTINUOUS; "DISCONTINUOUS", `DISCONTINUOUS;
-    "DELAYED", `DELAYED ]
-
-
-class prop_bool = prop_enum ~values:bool_values
-
-(*
-class prop_variant ~values ~name ~init ~set : prop =
-  object
-    inherit prop_enum ~values ~name ~init ~set
-    method code = "`" ^ s
-  end
-*)
-
-class prop_shadow = prop_enum ~values:shadow_type_values
-class prop_policy = prop_enum ~values:policy_type_values
-class prop_orientation = prop_enum ~values:orientation_values
-class prop_toolbar_style = prop_enum ~values:toolbar_style_values
-class prop_toolbar_space_style = prop_enum ~values:toolbar_space_style_values
-class prop_relief_style = prop_enum ~values:relief_style_values
-class prop_position = prop_enum ~values:position_values
-class prop_combo_use_arrows = prop_enum ~values:combo_use_arrows_values
-class prop_spin_button_update_policy = prop_enum
-    ~values:spin_button_update_policy_values
-class prop_button_box_style = prop_enum ~values:button_box_style_values
-class prop_update_type = prop_enum ~values:update_type_values
-
-class prop_int ~name ~init ~set : prop =
-  object
-    inherit vprop ~name ~init ~set
-    method private parse s =
-      try int_of_string s with _ -> invalid_prop "int" name s
-    method range = Int
-  end
-
-(* NB: float_of_string doesn't raise an exception in case of error *)
-class prop_float ~name ~init ~min ~max ~set : prop =
-  object
-    inherit vprop ~name ~init ~set
-    method private parse s =
-      try float_of_string s with _ -> invalid_prop "float" name s
-    method code =
-      if String.contains s '.' || String.contains s 'e' then s
-      else s ^ ".0"
-    method range = Float(min,max)
-  end
-
-class prop_string ~name ~init ~set : prop =
-  object
-    inherit vprop ~name ~init ~set
-    method private parse s = s
-    method range = String
-    method code = "\"" ^ String.escaped s ^ "\""
-  end
-
-class prop_adjustment ~name ~init ~set : prop =
-  object
-    inherit vprop ~name ~init ~set
-    method private parse = get5floats_from_string
-    method range = Adjust
-  end
-
-class prop_clist_titles ~name ~init ~set : prop =
-  object
-    inherit vprop ~name ~init ~set
-    method private parse = split_string ~sep:' '
-    method range = CList_titles
-    method code = "[ \"" ^
-      String.concat ~sep:"\"; \"" (split_string ~sep:' ' s) ^ "\" ]"
-    method save_code = "\"" ^ s ^ "\""
-  end
-
-class prop_file ~name ~init ~set : prop =
-  object
-    inherit vprop ~name ~init ~set
-    method private parse s = s
-    method range = File
-    method code = "\"" ^ String.escaped s ^ "\""
-  end
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/property.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/property.mli
deleted file mode 100644 (file)
index ccf2650..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-(* $Id$ *)
-
-open Gtk.Tags
-open Common
-
-class virtual vprop :
-  name:string ->               (* property's name *)
-  init:string ->               (* default value *)
-  set:('a -> bool) ->
-  object
-    val name : string
-    val mutable s : string
-    method code : string       (* encoded value *)
-    method get : string
-    method modified : bool
-    method name : string
-    method private virtual parse : string -> 'a
-    method virtual range : range
-    method save_code : string
-    method set : string -> unit
-  end
-
-class prop_int :
-  name:string -> init:string -> set:(int -> bool) -> prop
-
-class prop_float :
-  name:string ->
-  init:string -> min:float -> max:float -> set:(float -> bool) -> prop
-
-class prop_string :
-  name:string -> init:string -> set:(string -> bool) -> prop
-
-class prop_bool :
-  name:string -> init:string -> set:(bool -> bool) -> prop
-(*
-class prop_variant :
-  values:(string * 'a) list ->
-  name:string -> init:string -> set:('a -> bool) -> prop
-*)
-class prop_shadow :
-  name:string -> init:string -> set:(shadow_type -> bool) -> prop
-
-class prop_policy :
-  name:string -> init:string -> set:(policy_type -> bool) -> prop
-
-class prop_orientation :
-  name:string ->
-  init:string -> set:(Gtk.Tags.orientation -> bool) -> prop
-
-class prop_toolbar_style :
-  name:string ->
-  init:string -> set:(Gtk.Tags.toolbar_style -> bool) -> prop
-
-class prop_toolbar_space_style :
-  name:string -> init:string -> set:([ `EMPTY | `LINE] -> bool) -> prop
-
-class prop_relief_style :
-  name:string ->
-  init:string -> set:(Gtk.Tags.relief_style -> bool) -> prop
-
-class prop_position :
-  name:string ->
-  init:string -> set:(Gtk.Tags.position -> bool) -> prop
-
-class prop_combo_use_arrows :
-  name:string ->
-  init:string -> set:([ `NEVER | `DEFAULT | `ALWAYS] -> bool) -> prop
-
-class prop_spin_button_update_policy :
-  name:string ->
-  init:string -> set:(Gtk.Tags.spin_button_update_policy -> bool) -> prop
-
-class prop_button_box_style :
-  name:string ->
-  init:string -> set:(Gtk.Tags.button_box_style -> bool) -> prop
-
-class prop_update_type :
-  name:string ->
-  init:string -> set:(Gtk.Tags.update_type -> bool) -> prop
-
-class prop_enum_dyn :
-  values:(unit -> string list) -> name:string ->
-  init:string -> set:(unit -> bool) -> prop
-
-class prop_adjustment :
-  name:string -> init:string ->
-    set:(float * float * float * float * float -> bool) -> prop
-
-class prop_clist_titles :
-  name:string -> init:string ->
-    set:(string list -> bool) -> prop
-
-class prop_file :
-  name:string -> init:string -> set:(string -> bool) -> prop
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/propwin.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/propwin.ml
deleted file mode 100644 (file)
index 2f8b291..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-(* $Id$ *)
-
-open GObj
-
-open Common
-open Utils
-
-class type tiwidget_base = object
-  method name : string
-  method proplist : (string * prop) list
-end
-
-let prop_widget (prop : prop) =
-  match prop#range with
-    Enum l ->
-      let w = GEdit.combo ~popdown_strings:l ~use_arrows:`ALWAYS () in
-      w#entry#connect#changed ~callback:(fun () -> prop#set w#entry#text);
-      w#entry#set_editable false;
-      w#entry#set_text prop#get;
-      w#coerce
-  | String ->
-      let w = GEdit.entry ~text:prop#get () in
-      w#connect#activate ~callback:(fun () -> prop#set w#text);
-      w#coerce
-  | File ->
-      let w = GPack.hbox () in
-      let e = GEdit.entry ~text:prop#get ~editable:false ~packing:w#pack () in
-      let b = GButton.button ~label:"..." ~packing:w#pack () in
-      b#connect#clicked
-       ~callback:(fun () -> get_filename
-           ~callback:(fun name -> e#set_text name; prop#set name) (); ());
-      w#coerce
-  | Int ->
-      let adjustment =
-       GData.adjustment ~value:(float_of_string prop#get)
-         ~lower:(-2.) ~upper:5000. ~step_incr:1. ~page_incr:10. ~page_size:0. ()
-      in
-      let w = GEdit.spin_button ~rate:0.5 ~digits:0 ~adjustment () in
-      w#connect#activate
-       ~callback:(fun () -> prop#set (string_of_int w#value_as_int));
-      w#coerce
-  | Float (lower, upper) ->
-(*      let adjustment =
-       GData.adjustment ~value:(float_of_string prop#get)
-         ~lower ~upper ~step_incr:((upper-.lower)/.100.)
-         ~page_incr:((upper-.lower)/.10.) ~page_size:0. ()
-      in
-      let w = GEdit.spin_button ~rate:0.5 ~digits:2 ~adjustment () in
-      w#connect#activate
-       ~callback:(fun () -> prop#set (string_of_float w#value));
-      w#coerce
-*)
-      let w = entry_float ~init:(float_of_string prop#get) () in
-      w#connect#activate
-       ~callback:(fun () -> prop#set (string_of_float w#value));
-      w#coerce
-(*  | Adjust ->
-      let wpop = GWindow.window ~title:"Adjustment values" () in
-      let vb = GPack.vbox ~packing:wpop#add()  in
-      let hb1 = GPack.hbox ~packing:vb#pack () in
-      let l1 = GMisc.label ~text:"lower" ~packing:hb1#pack () in
-      let e1 = entry_float ~packing:hb1#pack
-         ~init:(float_of_string prop#get) ~set:prop#set in
-*)    
-  | CList_titles ->
-      let wpop = GWindow.window ~title:"titles of the columns" () in
-      let vb = GPack.vbox ~packing:wpop#add () in
-      let titles = split_string prop#get ~sep:' ' in
-      let n = List.length titles in
-      let rtitles = ref titles in
-      let rget = ref [] and rset = ref [] in
-      for i = 1 to n do
-       match !rtitles with
-       | hd::tl ->
-           let hb = GPack.hbox ~packing:vb#pack () in
-           let _ = GMisc.label ~text:("column" ^ (string_of_int i))
-               ~packing:hb#pack () in
-           let e = GEdit.entry ~text:hd ~packing:hb#pack () in
-           rtitles := tl;
-           rget := (fun () -> e#text) :: !rget;
-           rset := e#set_text :: !rset;
-       | _ -> failwith "CList_titles: this cannot happen!!"
-      done;
-      rtitles := titles;
-      rget := List.rev !rget;
-      rset := List.rev !rset;
-      let hb = GPack.hbox ~packing:vb#pack () in
-      let ok = GButton.button ~label:"OK" ~packing:hb#pack () in
-      let cancel = GButton.button ~label:"Cancel" ~packing:hb#pack () in
-      ok#connect#pressed
-       ~callback:(fun () ->
-         let tit = List.map ~f:(fun f -> f ()) !rget in
-         prop#set (String.concat ~sep:" " tit);
-         rtitles := tit;
-         wpop#misc#hide ());
-      cancel#connect#pressed
-       ~callback:(fun () ->
-         wpop#misc#hide ();
-         List.iter2 ~f:(fun f v -> f v) !rset !rtitles);
-      let e = GEdit.entry ~text:"double click here" ~editable:false () in
-      e#event#connect#button_press ~callback:
-       (fun ev -> 
-          GdkEvent.get_type ev = `TWO_BUTTON_PRESS &&
-         GdkEvent.Button.button ev = 1 &&
-          begin
-           wpop#misc#show ();
-            GtkSignal.stop_emit ();
-            true
-         end);
-      e#coerce
-
-let prop_box list =
-  let vbox = GPack.vbox () in
-  List.iter list ~f:
-    begin fun (name, prop) ->
-      let hbox =
-       GPack.hbox ~homogeneous:true ~packing:(vbox#pack ~expand:false) () in
-      GMisc.label ~text:name ~packing:hbox#pack ();
-      hbox#pack ~fill:true (prop_widget prop);
-      GMisc.separator `HORIZONTAL ~packing:(vbox#pack ~expand:false) ();
-      ()
-    end;
-  vbox
-
-class ['a] frozen lz = object
-  method get : 'a = Lazy.force lz
-end
-
-let vbox =
-  new frozen (lazy (GWindow.window ~show:true ~title:"Properties" ()))
-
-let init () = vbox#get
-
-let widget_pool = Hashtbl.create 7
-
-let boxref = ref None
-let shown_widget = ref ""
-
-let show_prop_box vb =
-  Gaux.may !boxref ~f:vbox#get#remove;
-  vbox#get#add vb#coerce;
-  boxref := Some vb#coerce
-
-let show (w : #tiwidget_base) =
-  let name = w#name in
-  let vb =
-    try
-      Hashtbl.find widget_pool name
-    with Not_found ->
-      let vb = prop_box w#proplist in
-      Hashtbl.add widget_pool ~key:name ~data:vb;
-      vb
-  in
-  show_prop_box vb;
-  shown_widget := name
-
-let add (w : #tiwidget_base) =
-  let vb = prop_box w#proplist in
-  Hashtbl.add widget_pool ~key:w#name ~data:vb
-
-
-let remove name =
-  Hashtbl.remove widget_pool name;
-  if !shown_widget = name then begin
-    shown_widget := "";
-    show_prop_box (GMisc.label ~text:"No widget selected" ())
-  end
-
-(*
-let change_name oldname newname =
-  let vb = Hashtbl.find widget_pool oldname in
-  Hashtbl.remove widget_pool oldname;
-  Hashtbl.add widget_pool ~key:newname ~data:vb
-*)
-
-let update (w : #tiwidget_base) show_modif =
-  let vb = prop_box w#proplist in
-  Hashtbl.remove widget_pool w#name;
-  Hashtbl.add widget_pool ~key:w#name ~data:vb;
-  if show_modif && !shown_widget = w#name then show_prop_box vb
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/propwin.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/propwin.mli
deleted file mode 100644 (file)
index 6636a4f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-(* $Id$ *)
-
-open Common
-
-val init : unit -> GWindow.window
-val show : #tiwidget_base -> unit
-val add : #tiwidget_base -> unit
-val remove : string -> unit
-(* val change_name : string -> string -> unit *)
-val update : #tiwidget_base -> bool -> unit
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/radiobutton.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/radiobutton.xpm
deleted file mode 100644 (file)
index 0f5fbbd..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *radiobutton_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"++++++++++.++++++++++",
-"+++++++++...+++++++++",
-"++++++++.. ..++++++++",
-"+++++++.. X ..+++++++",
-"++++++.. XXX ..++++++",
-"+++++.. XXXXX ..+++++",
-"++++++OOXXXXXOO++++++",
-"+++++++OOXXXOO+++++++",
-"++++++++OOXOO++++++++",
-"+++++++++OOO+++++++++",
-"++++++++++O++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/scrolledwindow.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/scrolledwindow.xpm
deleted file mode 100644 (file)
index 44e59f6..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* XPM */
-static char *scrolledwindow_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 3 1",
-"  c Gray0",
-". c #d6d6d6",
-"X c Gray100",
-/* pixels */
-"XXXXXXXXXXXXXXXXXXXXX",
-"X.............X..... ",
-"X.............X.. .. ",
-"X.............X.   . ",
-"X.............X..... ",
-"X.............X      ",
-"X.............XXXXXX ",
-"X.............XX.... ",
-"X.............XX.... ",
-"X.............XXXXXX ",
-"X.............X..... ",
-"X.............X.   . ",
-"X.............X.. .. ",
-"X.............X..... ",
-"XXXXXXXXXXXXXXX      ",
-"X.... XXX .... ......",
-"X.. . X.. . .. ......",
-"X.  . X.. .  . ......",
-"X.. . X.. . .. ......",
-"X.... X.. .... ......",
-"X              ......"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/spinbutton.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/spinbutton.xpm
deleted file mode 100644 (file)
index f3a313b..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *spinbutton_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+                   +",
-"+ OOOOOOOOOOO OOOOO +",
-"+ OOOOOOOOOOO OX X. +",
-"+ OOOOOOOOOOO O   . +",
-"+ OOOOOOOOOOO OOOOO +",
-"+ OOOOOOOOOOO O   . +",
-"+ OOOOOOOOOOO OX X. +",
-"+ OOOOOOOOOOO ..... +",
-"+                   +",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/statusbar.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/statusbar.xpm
deleted file mode 100644 (file)
index 8576d88..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* XPM */
-static char *statusbar_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 7 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray87",
-"+ c Gray100",
-"@ c None",
-/* pixels */
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@+XX.@@@@@@@@@@@@@@",
-"@@@+XX.@@@@@@@@@@@@@@",
-"@@@+XX.@@@@@@@@@@@@@@",
-"@@@+XX.@@@@@@@@@@@@@@",
-"@@@+XX++++++++++++@@@",
-"@@@+XXXXXXXXXXXXXX@@@",
-"@@@+XXXXXXXXXXXXXX@@@",
-"@@@+XX............@@@",
-"@@@+XX.OOOOOOOOOOO@@@",
-"@@@+XX.OOOOOOOOOOO@@@",
-"@@@+XX.OOOOOOOOOOO@@@",
-"@@@+XX++++++++++++@@@",
-"@@@+XXXXXXXXXXXXXX@@@",
-"@@@+XXXXXXXXXXXXXX@@@",
-"@@@               @@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiBase.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiBase.ml
deleted file mode 100644 (file)
index 3907493..0000000
+++ /dev/null
@@ -1,671 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GObj
-open GContainer
-
-open Utils
-open Common
-open Property
-
-(* possible children; used to make the menus *)
-let widget_add_list =
-  [ "vbox"; "hbox"; "vbutton_box"; "hbutton_box"; "fixed";
-    "frame"; "aspect_frame"; "handle_box"; "event_box";
-    "hseparator"; "vseparator"; "statusbar"; "label"; "notebook";
-    "color_selection";
-    "button";
-    "toggle_button"; "check_button"; "radio_button"; "scrolled_window";
-
-    "entry"; "spin_button"; "combo"; "clist"; "toolbar"]
-
-
-(*********** selection ***********)
-
-let selection = ref ""
-let window_selection = ref ""
-
-
-(**************** signals class ***************)
-
-class tiwidget_signals ~signals =
-  let name_changed : string signal = signals in
-  object
-    val after = false
-    method after = {< after = true >}
-    method name_changed = name_changed#connect ~after
-  end
-
-
-(************* class type ***************)
-(* the ti<gtkwidget> classes encapsulate the corresponding gtk
-   widget which will be in the gtk-window and a tree item
-   labelled with the name of the widget which will be in the
-   tree-window.
-   all these classes have the same following interface *)
-
-class virtual tiwidget0 = object
-  method virtual widget : GObj.widget
-  method virtual connect_event : GObj.event_signals
-  method virtual parent : tiwidget0 option
-  method virtual set_parent : tiwidget0 -> unit
-  method virtual base : GObj.widget
-  method virtual tree_item : GTree2.tree_item
-  method virtual tree : GTree2.tree
-  method virtual children : (tiwidget0 * Gtk.Tags.pack_type) list
-  method virtual name : string
-  method virtual proplist : (string * prop) list
-  method virtual add_to_proplist : (string * prop) list -> unit
-  method virtual change_name_in_proplist : string -> string -> unit
-  method virtual set_property : string -> string -> unit
-  method virtual forall :  callback:(tiwidget0 -> unit) -> unit
-  method virtual remove : tiwidget0 -> unit
-(*  method virtual add_child_with_name : string -> string -> pos:int -> tiwidget0 *)
-  method virtual add_children : ?pos:int -> yywidget_tree -> unit
-  method virtual add_children_wo_undo : ?pos:int -> yywidget_tree -> string
-  method virtual remove_me  : unit -> unit
-  method virtual remove_me_without_undo  : unit -> unit
-  method virtual emit_code : Format.formatter -> char list -> unit
-  method virtual emit_init_code : Format.formatter -> packing:string -> unit
-  method virtual emit_method_code : Format.formatter -> unit
-  method virtual emit_initializer_code : Format.formatter -> unit
-  method virtual save : Format.formatter -> unit
-  method virtual copy : unit -> unit
-  method virtual connect : tiwidget_signals
-  method virtual disconnect : GtkSignal.id -> bool
-  method virtual child_up : tiwidget0 -> unit
-  method virtual up : unit -> unit
-  method virtual child_down : tiwidget0 -> unit
-  method virtual down : unit -> unit
-  method virtual next : tiwidget0
-  method virtual next_child : tiwidget0 -> tiwidget0
-  method virtual last : tiwidget0
-  method virtual prev : tiwidget0
-  method virtual set_full_menu : bool -> unit
-end
-
-class virtual window_and_tree0 = object
-  method virtual tiwin : tiwidget0
-(*  method virtual tree_window : window *)
-  method virtual change_selected : tiwidget0 -> unit
-  method virtual remove_sel : tiwidget0 -> unit
-  method virtual add_param : char
-  method virtual remove_param : char -> unit
-(*  method virtual emit : unit -> unit *)
-end
-
-(* forward declaration of function new_widget *)
-let new_tiwidget :
-    (classe:string -> ?pos:int -> name:string ->parent_tree:GTree2.tree ->
-      ?insert_evbox:bool -> ?listprop:(string * string) list -> window_and_tree0 -> tiwidget0) ref =
-  ref (fun ~classe ?pos ~name ~parent_tree ?insert_evbox ?listprop w -> failwith "new_tiwidget")
-
-
-let widget_map = Hashtbl.create 17
-
-(* list of names of radio_buttons (for groups) *)
-let radio_button_pool = ref []
-
-
-(************* window creation class *************)
-(* an instance of this class is created for each window opened
-   in radtest. It contains the tree window and the gtk window (tiwin) *)
-
-class window_and_tree ~name =
-  let tree_window = GWindow.window ~show:true ~title:(name ^ "-Tree") () in
-  let vbox = GPack.vbox ~spacing:2 ~packing:tree_window#add () in
-  let root_tree = GTree2.tree ~packing:vbox#pack ~selection_mode:`EXTENDED () in
-  let project_tree_item = GTree2.tree_item () in
-  let label = GMisc.label ~text:name ~xalign:0. ~yalign:0.5
-      ~packing:project_tree_item#add () in
-
-  object(self)
-
-    inherit window_and_tree0
-
-(* the params of the window class; because the class clist needs a param
-   I suppose there will be no more than 26 clists in a single window    *)
-    val param_list = Array.create 26 false
-
-    method add_param =
-      let i = ref 0 in
-      while param_list.(!i) do incr i done;
-      param_list.(!i) <- true;
-      char_of_int (97 + !i)
-
-    method remove_param c =
-      param_list.(int_of_char c - 97) <- false
-
-    method private param_list =
-      let r = ref [] in
-      for i = 25 downto 0 do
-       if Array.unsafe_get param_list i then r := (char_of_int (i+97)) :: !r
-      done;
-      !r
-
-(* I use magic here because the real initialization is done
-   below in the initializer part. It can't be done here because
-   of the call to self *)
-    val mutable tiwin = (Obj.magic 0 : tiwidget0)
-
-    method tiwin = tiwin
-    method tree_window = tree_window
-
-    method project_tree_item = project_tree_item
-
-(* the selected item in this window *)
-    val mutable selected = (None : tiwidget0 option)
-
-(* what to do when a new item is selected.
-   this method is passed to all the tiwidgets (by the select_fun
-   parameter) and they will call it when they are clicked on;
-   she is also called when changing the selection the arrow keys
-   (see in the initializer part) *)
-    method change_selected sel =
-      match selected with
-      |        None ->
-         selected <- Some sel;
-         sel#tree_item#misc#set_state `SELECTED;
-         sel#base#misc#set_state `SELECTED;
-         Propwin.show sel
-      |        Some old_sel ->
-         if sel = old_sel then begin
-           selected <- None;
-           sel#base#misc#set_state `NORMAL;
-           sel#tree_item#misc#set_state `NORMAL
-         end else begin
-           old_sel#tree_item#misc#set_state `NORMAL;
-           old_sel#base#misc#set_state `NORMAL;
-           selected <- Some sel;
-           sel#tree_item#misc#set_state `SELECTED;
-           sel#base#misc#set_state `SELECTED;
-           Propwin.show sel
-         end
-
-(* the tiwidget tiw is being removed; if it was selected,
-   put the selection to None *)
-    method remove_sel tiw =
-      match selected with
-      |        Some sel when sel = tiw -> selected <- None
-      |        _ -> ()
-
-(* emits the code corresponding to this window *)
-    method emit c = tiwin#emit_code c self#param_list;
-
-    method delete () =
-      tiwin#remove_me_without_undo ();
-      tree_window#destroy ();
-
-    initializer
-      tiwin <- !new_tiwidget ~classe:"window" ~name ~parent_tree:root_tree
-         (self : #window_and_tree0 :> window_and_tree0);
-
-      tiwin#connect#name_changed ~callback:
-         (fun n -> label#set_text n; tree_window#set_title (n ^ "-Tree"));
-
-      Propwin.show tiwin;
-
-      tree_window#event#connect#key_press ~callback:
-       begin fun ev ->
-         let state = GdkEvent.Key.state ev in
-         let keyval = GdkEvent.Key.keyval ev in
-         if keyval = GdkKeysyms._Up then begin
-           match selected with
-           | None -> ()
-           | Some t -> 
-               if List.mem `CONTROL state then t#up ()
-               else try
-                 self#change_selected t#prev
-               with Not_found -> ()
-         end
-         else if keyval = GdkKeysyms._Down then begin
-           match selected with
-           | None -> ()
-           | Some t -> 
-               if List.mem `CONTROL state then t#down ()
-               else try
-                 self#change_selected t#next
-               with Not_found -> ()
-         end;
-         GtkSignal.stop_emit ();
-          true
-       end;
-      ()
-  end
-
-
-
-(***************** class implementation *****************)
-(* this is the base class of the ti<gtkwidget> hierarchy.
-   all these classes will inherit from tiwidget, but without
-   adding new methods. In this way all the classes have the
-   same interface and we can use them in lists, pass them to
-   functions without caring on the type.
-   All methods needed by any of the classes are defined in
-   tiwidget but if a method is not pertinent in tiwidget
-   it has for implementation:
-      failwith "<name of the method>"
-   the real implementation of the method is done in the
-   class (or classes) in which it is needed (or sometimes
-   in tiwidget anyway).
-   Additionally, to workaround some problem with recursive types
-   the type of the (public) methods of tiwidget is defined in
-   tiwidget0 of which tiwidget inherits.
-   The parent_tree parameter is the tree in which the
-   tiwidget#tree_item will be inserted at position :pos.
-*)
-
-class virtual tiwidget ~name ~parent_tree:(parent_tree : GTree2.tree) ~pos
-    ~widget ?(insert_evbox=true) (parent_window : window_and_tree0) =
-object(self)
-
-  inherit tiwidget0
-  inherit has_ml_signals
-
-  val evbox =
-    if insert_evbox then
-      let ev = GBin.event_box () in ev#add widget#coerce; Some ev
-    else None
-
-(* used only for windows delete_event *)
-  method connect_event = failwith "tiwidget::connect_event"
-
-  val widget = widget#coerce
-  method widget = widget
-
-  val mutable parent = None
-  method set_parent p = parent <- Some p
-  method parent =  parent
-  method private sure_parent =
-    match parent with
-    | None -> failwith "sure_parent"
-    | Some p -> p
-
-  method base =
-    match evbox with
-    | None -> widget#coerce
-    | Some ev -> ev#coerce
-
-(* this is the name used in new_tiwidget for the creation
-   of an object of this class *)
-  val mutable classe = ""
-
-  val tree_item = GTree2.tree_item ()
-  method tree_item = tree_item
-
-  val mutable stree = GTree2.tree ()
-  method tree = stree
-
-  val label = GMisc.label ~text:name ~xalign:0. ~yalign:0.5 ()
-
-  val mutable name : string = name
-  method name = name
-
-(* this is the complete name for the creation of the widget
-   in lablgtk e.g. GPack.vbox; used in emit_init_code *)
-  method private class_name = ""
-
-  val mutable proplist : (string * prop) list = []
-  method proplist = proplist
-  method private get_mandatory_props = []
-
-  method add_to_proplist plist = proplist <- proplist @ plist
-
-(* for children of a box *)
-  method change_name_in_proplist : string -> string -> unit =
-    fun _ _ -> ()
-  method set_property name value_string = try
-    (List.assoc name proplist)#set value_string
-  with Not_found -> Printf.printf "Property not_found %s, %s\n" name value_string;
-    flush stdout
-
-  method private get_property name =
-    (List.assoc name proplist)#get
-
-
-(* the proplist with some items removed e.g. the expand... in a box
-   used for saving and emitting code *)
-  method private emit_clean_proplist =
-    List.fold_left ~f:(fun l p -> List.remove_assoc p l)
-      ~init:proplist
-      ([ "name"; "expand"; "fill"; "padding" ] @ self#get_mandatory_props)
-(*  method private emit_clean_proplist plist =
-    List.fold_left ~init:plist ~f:
-      (fun pl propname -> List.remove_assoc propname pl)
-       [ "name"; "expand"; "fill"; "padding" ]
-*)
-
-  method private save_clean_proplist =
-    List.fold_left ~f:(fun l p -> List.remove_assoc p l)
-      ~init:proplist ("name" :: self#get_mandatory_props)
-(*  method private save_clean_proplist =
-    List.remove_assoc "name" proplist *)
-
-  val mutable children : (tiwidget0 * Gtk.Tags.pack_type) list = []
-  method children = children
-  method forall =
-    fun ~callback -> List.iter (List.map children ~f:fst) ~f:callback
-
-(* encapsulate container#add and container#remove 
-   they are here because they depend on the type of the widget:
-   e.g.: gtkbin->add scrolled_window->add_with_viewport box->pack *)
-  method private add = failwith (name ^ "::add")
-  method remove = failwith (name ^ "::remove")
-
-
-(* removes self from his parent;
-   will be different for a window *)
-  method remove_me () =
-    let sref = ref "" in
-    self#save_to_string sref;
-    let pos = list_pos ~item:(self : #tiwidget0 :> tiwidget0)
-       (List.map self#sure_parent#children ~f:fst) in
-    let lexbuf = Lexing.from_string !sref in
-    let node = Load_parser.widget Load_lexer.token lexbuf in
-    add_undo (Add (self#sure_parent#name, node, pos));
-    self#remove_me_without_undo ()
-
-  method remove_me_without_undo () =
-(* it should be enough to only recursively remove the children from the
-   name_list and do the tip#remove and tip#tree#remove
-   only for self *)
-    self#forall ~callback:(fun tiw -> tiw#remove_me_without_undo ());
-    parent_window#remove_sel (self : #tiwidget0 :> tiwidget0);
-    match parent with
-    | None -> failwith "remove without parent"
-    | Some (tip : #tiwidget0) ->
-       tip#tree#remove tree_item;
-       tip#remove (self : #tiwidget0 :> tiwidget0);
-       name_list := list_remove !name_list ~f:(fun n -> n=name);
-       Hashtbl.remove widget_map name;
-       Propwin.remove name
-
-(* used for undo *)
-  method private remove_child_by_name name () =
-    let child = fst (List.find children
-       ~f:(fun (ch, _) -> ch#name = name)) in
-    child#remove_me ()
-
-(* for most widgets we make a child with new_tiwidget and then add it
-   to self; for toolbars we use toolbar#insert_button...     *)
-      method private make_child = !new_tiwidget
-
-(* adds a child and shows his properties;
-   used when adding a child by the menu or DnD *)
-  method private add_child classe ?name ?(undo = true) ?(affich = true) ?(pos = -1) ?(listprop = []) () =
-    let name = match name with
-    | None -> make_new_name classe
-    | Some n -> n in
-    let child = self#make_child ~classe ~name ~parent_tree:stree parent_window ~pos ~listprop in
-    child#set_parent (self : #tiwidget0 :> tiwidget0);
-    self#add child ~pos;
-    if affich then Propwin.show child;
-    if undo then add_undo (Remove name);
-    child
-
-
-(* adds the subtree saved in the Node *)
-  method add_children ?(pos = -1) node =
-    let child_name = self#add_children_wo_undo node ~pos in
-    add_undo (Remove child_name)
-
-  method add_children_wo_undo ?(pos = -1) (Node (child, children)) =
-    let classe, name, property_list = child in
-    let rname = change_name name in
-    let tc = self#add_child classe ~name:rname ~undo:false ~affich:false ~pos ~listprop:property_list () in
-    List.iter (List.rev children)
-      ~f:(fun c -> tc#add_children_wo_undo c; ());
-    List.iter property_list ~f:(fun (n,v) -> tc#set_property n v);
-    rname
-
-(* only a tiwindow can emit code *)
-  method emit_code = failwith "emit_code"
-
-(* some methods for emitting code *)
-(* this one calculates the expand, fill and padding parameters
-   of a box child *)
-  method private get_packing packing =
-    let aux name =
-      let prop  = List.assoc name proplist in
-      if prop#modified then " ~" ^ name ^ ":" ^ prop#code else ""
-    in
-    let efp = try
-      (aux "expand") ^ (aux "fill") ^ (aux "padding")
-    with Not_found -> "" in
-    if efp = "" then ("~packing:" ^ packing)
-    else ("~packing:(" ^ packing ^ efp ^ ")")
-
-(* this one emits the declaration code of the widget *)
-  method emit_init_code formatter ~packing =
-    Format.fprintf formatter "@ @[<hv 2>let %s =@ @[<hov 2>%s"
-      name self#class_name;
-    List.iter self#get_mandatory_props
-      ~f:begin fun name ->
-       Format.fprintf formatter "@ ~%s:%s" name
-         (List.assoc name proplist)#code
-      end;
-    let packing = self#get_packing packing in
-    if packing <> "" then Format.fprintf formatter "@ %s" packing;
-    self#emit_prop_code formatter;
-    Format.fprintf formatter "@ ()@ in@]@]"
-
-(* this one emits the properties which do not have their
-   default value; used by emit_init_code *)
-  method private emit_prop_code formatter =
-    let mandatory = self#get_mandatory_props in
-    List.iter self#emit_clean_proplist ~f:
-      begin  fun (name, prop) ->
-       if List.mem name mandatory then () else
-       if prop#modified then
-         Format.fprintf formatter "@ ~%s:%s" prop#name prop#code
-      end
-
-(* this one emits the method returning this widget *)
-  method emit_method_code formatter =
-    Format.fprintf formatter "@ method %s = %s" name name;
-
-(* emits the code in the initializer part for this widget *)
-  method emit_initializer_code _ = ()
-
-(* for saving the project to a file. Used also by copy and cut *)
-  method private save_start formatter =
-    Format.fprintf formatter "@\n@[<2><%s name=%s>" classe name;
-    List.iter
-      ~f:(fun p -> Format.fprintf formatter 
-         "@\n%s=\"%s\"" p (List.assoc p proplist)#get)
-      self#get_mandatory_props
-      
-
-  method private save_end formatter =
-    Format.fprintf formatter "@]@\n</%s>" classe
-
-  method save formatter =
-    self#save_start formatter;
-    List.iter self#save_clean_proplist ~f:
-      (fun (name, prop) ->
-       if prop#modified then
-         Format.fprintf formatter "@\n%s=%s" name prop#save_code);
-    self#forall ~callback:(fun w -> w#save formatter);
-    self#save_end formatter
-
-
-  method private save_to_string string_ref =
-    let b = Buffer.create 80 in
-    let f = Format.formatter_of_buffer b in
-    self#save f;
-    Format.pp_print_flush f ();
-    string_ref := Buffer.contents b
-
-  method private copy_to_sel selection = self#save_to_string selection
-
-  method copy () = self#copy_to_sel selection
-
-  method private cut () =
-    self#copy ();
-    self#remove_me ()
-
-  method private paste () =
-    let lexbuf = Lexing.from_string !selection in
-    let node = Load_parser.widget Load_lexer.token lexbuf in
-    self#add_children node
-    
-
-(* ML signal used when the name of the widget is changed *)
-  val name_changed : string signal = new signal
-  method connect = new tiwidget_signals ~signals:name_changed
-  method private call_name_changed = name_changed#call
-
-
-(* this is necessary because gtk_tree#remove deletes the tree
-   when removing the last item  *)
-(* suppressed this in gtktree2 
-  method new_tree () =
-    stree <- GTree2.tree;
-    tree_item#set_subtree stree;
-    tree_item#expand ()
-*)
-
-(* when full_menu is true we use the menu else the restricted menu *)
-  val mutable full_menu  = true
-  method set_full_menu b = full_menu <- b
-
-(* the menu for this widget 
-   This menu is recalculated when one clicks on the 3rd button.
-   There is nothing to do e.g. when the name of the widget changes,
-   it will change in the menu the next time. *)
-  method private menu ~time = self#restricted_menu ~time
-
-(* the restricted menu for this widget 
-   used for containers when they are full *)
-  method private restricted_menu ~time =
-    let menu = GMenu.menu () in
-    let mi_remove = GMenu.menu_item ~packing:menu#append       ~label:"remove" ()
-    and mi_cut  = GMenu.menu_item ~packing:menu#append ~label:"Cut" ()
-    and mi_copy = GMenu.menu_item ~packing:menu#append ~label:"Copy" () in
-    mi_remove#connect#activate ~callback:self#remove_me;
-    mi_copy#connect#activate ~callback:self#copy;
-    mi_cut#connect#activate ~callback:self#cut;
-    menu#popup ~button:3 ~time
-
-(* changes all that depends on the name *)
-  method private set_new_name new_name =
-    if test_unique new_name then begin
-      Hashtbl.remove widget_map name;
-      Hashtbl.add widget_map ~key:new_name
-       ~data:(self : #tiwidget0 :> tiwidget0);
-      if (classe = "radio_button") then begin
-       radio_button_pool := new_name ::
-         (list_remove !radio_button_pool ~f:(fun x -> x = name));
-       List.iter
-         ~f:(fun x -> Propwin.update (Hashtbl.find widget_map x) false)
-         !radio_button_pool
-      end;
-      label#set_text new_name;
-      let old_name = name in
-      name <- new_name;
-(*      Propwin.change_name old_name new_name; *)
-      name_list :=
-       new_name :: (list_remove !name_list ~f:(fun n -> n=old_name));
-      begin match self#parent with
-      | None -> ()
-      | Some p -> p#change_name_in_proplist old_name new_name
-      end;
-      self#call_name_changed new_name;
-      true
-    end
-    else begin
-      message_name ();
-      Propwin.update self true;
-      false
-    end
-
-
-(* moves the present tiw up in his parents' children list *)
-(* does something only when the parent is a box *)
-  method child_up = fun _ -> ()
-
-  method up () = match parent with
-  | None -> ()
-  | Some t -> t#child_up (self : #tiwidget0 :> tiwidget0)
-
-  method child_down = fun _ -> ()
-
-  method down () = match parent with
-  | None -> ()
-  | Some t -> t#child_down (self : #tiwidget0 :> tiwidget0)
-
-
-(* get the next tiwidget in the tree (used with Down arrow) *)
-  method next =
-    if children <> [] then fst (List.hd children)
-    else begin
-      match parent with
-      |        None -> raise Not_found
-      |        Some p -> p#next_child (self : #tiwidget0 :> tiwidget0)
-    end
-
-  method next_child child =
-    let _, tl = cut_list ~item:child (List.map ~f:fst children) in
-    match tl with
-    | ch :: next :: _ -> next
-    | ch :: [] -> begin
-       match parent with
-       | None -> raise Not_found
-       | Some p -> p#next_child (self : #tiwidget0 :> tiwidget0)
-    end
-    | _ -> failwith "next_child"
-
-(* get the last child of the last child ... of our last child.
-   Used by prev. *)
-  method last =
-    if children = [] then (self : #tiwidget0 :> tiwidget0)
-    else (fst (List.hd (List.rev children)))#last
-
-(* get the previous tiwidget in the tree (used with Up arrow) *)
-  method prev =
-    match parent with
-    | None -> raise Not_found
-    | Some p ->
-       let hd, _ = cut_list ~item:(self : #tiwidget0 :> tiwidget0)
-           (List.map ~f:fst p#children) in
-       match hd with
-       | [] -> p
-       | h :: _ -> h#last
-
-  initializer
-    Hashtbl.add widget_map ~key:name ~data:(self : #tiwidget0 :> tiwidget0);
-    name_list := name :: !name_list;
-    parent_tree#insert tree_item ~pos;
-    tree_item#set_subtree stree;
-    tree_item#add label#coerce;
-    tree_item#expand ();
-
-    proplist <-  proplist @
-      [ "name",
-        new prop_string ~name:"name" ~init:name ~set:self#set_new_name; 
-        "width", new prop_int ~name:"width" ~init:"-2"
-         ~set:(fun v -> widget#misc#set_geometry ~width:v (); true);
-        "height", new prop_int ~name:"height" ~init:"-2"
-         ~set:(fun v -> widget#misc#set_geometry ~height:v (); true) ];
-
-    self#add_signal name_changed;
-
-    tree_item#event#connect#button_press ~callback:
-      (fun ev -> match GdkEvent.get_type ev with
-      | `BUTTON_PRESS ->
-         if GdkEvent.Button.button ev = 1 then begin
-           parent_window#change_selected
-             (self : #tiwidget0 :> tiwidget0);
-         end
-         else if GdkEvent.Button.button ev = 3 then begin
-           if full_menu
-           then self#menu ~time:(GdkEvent.Button.time ev)
-           else self#restricted_menu ~time:(GdkEvent.Button.time ev);
-         end;
-         GtkSignal.stop_emit ();
-          true
-      | _ -> false);
-    ()
-end
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiBin.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiBin.ml
deleted file mode 100644 (file)
index 5ebcb3e..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-open Gtk
-
-open Utils
-open Property
-
-open TiContainer
-
-class tiframe ~(widget : GBin.frame) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val frame = widget
-  inherit ticontainer ~name ~widget ~parent_tree ~pos
-      ~insert_evbox parent_window as container
-
-  method private class_name = "GBin.frame"
-
-  method private get_mandatory_props = [ "label" ]
-
-  initializer
-    classe <- "frame";
-    frame#set_label name;
-    proplist <- proplist @
-      [ "label",
-       new prop_string ~name:"label" ~init:name ~set:(ftrue frame#set_label);
-       "label_xalign",
-       new prop_float ~name:"label_xalign" ~init:"0.0" ~min:0. ~max:1.
-            ~set:(fun x -> frame#set_label_align ~x (); true);
-       "shadow_type",
-       new prop_shadow ~name:"shadow_type" ~init:"ETCHED_IN"
-         ~set:(ftrue frame#set_shadow_type) ]
-end
-
-let new_tiframe ~name ?(listprop = []) =
-  new tiframe ~widget:(GBin.frame ()) ~name
-
-
-
-
-class tiaspect_frame ~(widget : GBin.aspect_frame) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val aspect_frame = widget
-  inherit tiframe ~name ~widget:(widget :> GBin.frame) ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GBin.aspect_frame"
-
-  initializer
-    classe <- "aspect_frame";
-    frame#set_label name;
-    proplist <- proplist @
-      [ "obey_child",
-       new prop_bool ~name:"obey_child" ~init:"true"
-         ~set:(ftrue aspect_frame#set_obey_child);
-       "ratio",
-       new prop_float ~name:"ratio" ~init:"1.0" ~min:0. ~max:1.
-            ~set:(ftrue aspect_frame#set_ratio)
-      ]        
-end
-
-let new_tiaspect_frame ~name ?(listprop = []) =
-  new tiaspect_frame ~widget:(GBin.aspect_frame ()) ~name
-
-
-
-
-class tievent_box ~(widget : GBin.event_box) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val event_box = widget
-  inherit ticontainer ~name ~widget ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GBin.event_box"
-  initializer
-    classe <- "event_box"
-end
-
-let new_event_box ~name ?(listprop = []) =
-  new tievent_box ~widget:(GBin.event_box ()) ~name
-
-
-
-
-class tihandle_box ~(widget : GBin.handle_box) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val handle_box = widget
-  inherit ticontainer ~name ~widget ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GBin.handle_box"
-
-  initializer
-    classe <- "handle_box";
-    proplist <- proplist @
-      [ "shadow_type",
-       new prop_shadow ~name:"shadow_type" ~init:"OUT"
-         ~set:(ftrue handle_box#set_shadow_type);
-       "handle_position",
-       new prop_position ~name:"handle_position" ~init:"LEFT"
-         ~set:(ftrue handle_box#set_handle_position);
-       "snap_edge",
-       new prop_position ~name:"snap_edge" ~init:"TOP"
-         ~set:(ftrue handle_box#set_snap_edge)
-      ]
-end
-
-let new_handle_box ~name ?(listprop = []) =
-  new tihandle_box ~widget:(GBin.handle_box ()) ~name
-
-
-
-
-
-class tiviewport ~(widget : GBin.handle_box) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val viewport = widget
-  inherit ticontainer ~name ~widget ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GBin.viewport"
-
-  initializer
-    classe <- "viewport";
-    proplist <- proplist @
-      [ "shadow_type",
-       new prop_shadow ~name:"shadow_type" ~init:"OUT"
-         ~set:(ftrue viewport#set_shadow_type)
-      ]
-end
-
-let new_viewport ~name ?(listprop = []) =
-  new tiviewport ~widget:(GBin.handle_box ()) ~name
-
-
-
-
-
-class tiscrolled_window ~(widget : GBin.scrolled_window)
-    ~name ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-  object(self)
-    val scrolled_window = widget
-    inherit ticontainer ~name ~insert_evbox
-       ~parent_tree ~pos ~widget parent_window
-
-    method private class_name = "GBin.scrolled_window"
-    method private name_of_add_method = "#add_with_viewport"
-
-    method private add rw ~pos =
-      scrolled_window#add_with_viewport (rw#base);
-      children <- [ rw, `START];
-      self#set_full_menu false;
-      tree_item#drag#dest_unset ()
-
-(* we must remove the child from the viewport,
-   not from the scrolled_window;
-   it is not mandatory to remove the viewport
-   from the scrolled_window *)
-    method remove child =
-      let viewport = (new GContainer.container (GtkBase.Container.cast (List.hd scrolled_window#children)#as_widget)) in
-      viewport#remove child#base;
-(*      scrolled_window#remove (List.hd scrolled_window#children); *)
-      children <- [ ];
-      self#set_full_menu true;
-      tree_item#drag#dest_set ~actions:[`COPY]
-       [ { target = "STRING"; flags = []; info = 0} ]
-
-
-    initializer
-      classe <- "scrolled_window";
-      proplist <- proplist @
-       [ "hscrollbar_policy",
-         new prop_policy ~name:"hscrollbar_policy" ~init:"ALWAYS"
-           ~set:(ftrue scrolled_window#set_hpolicy);
-         "vscrollbar_policy",
-         new prop_policy ~name:"vscrollbar_policy" ~init:"ALWAYS"
-           ~set:(ftrue scrolled_window#set_vpolicy) ]
-end
-
-let new_tiscrolled_window ~name ?(listprop = []) =
-  new tiscrolled_window ~widget:(GBin.scrolled_window ()) ~name
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiButton.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiButton.ml
deleted file mode 100644 (file)
index 174c6eb..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-open Utils
-open Property
-
-open TiBase
-open TiContainer
-
-(* the button inherits from widget because it can't accept
-   a child; 
-   needs to add the border_width property *)
-class tibutton ~(widget : #GButton.button) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val button = widget
-  inherit tiwidget ~name ~widget ~parent_tree ~pos ~insert_evbox
-       parent_window as widget
-
-  method private class_name = "GButton.button"
-
-  method private get_mandatory_props = [ "label" ]
-
-  initializer
-    classe <- "button";
-    proplist <-  proplist @
-      [ "border_width",        new prop_int ~name:"border_width" ~init:"0"
-                         ~set:(ftrue button#set_border_width);
-       "label",
-       new prop_string ~name:"label" ~init:name ~set:
-         begin fun v ->
-           button#remove (List.hd button#children)#coerce;
-           GMisc.label ~text:v ~xalign:0.5 ~yalign:0.5 ~packing:button#add ();
-           true
-         end ]
-end
-
-let new_tibutton ~name ?(listprop = []) =
-  let b = GButton.button ~label:name () in
-  b#event#connect#enter_notify
-    ~callback:(fun _ -> GtkSignal.stop_emit (); true);
-  b#event#connect#leave_notify
-    ~callback:(fun _ -> GtkSignal.stop_emit (); true);
-  new tibutton ~widget:b ~name
-
-
-class ticheck_button ~(widget : #GButton.toggle_button) ~name
-    ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-object(self)
-  val button = widget
-  inherit tiwidget ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-
-  method private class_name = "GButton.check_button"
-
-  method private get_mandatory_props = [ "label" ]
-
-  initializer
-    classe <- "check_button";
-    proplist <-  proplist @
-      [ "border_width",        new prop_int ~name:"border_width" ~init:"0"
-                        ~set:(ftrue button#set_border_width);
-       "label",
-       new prop_string ~name:"label" ~init:name ~set:
-         begin fun v ->
-           button#remove (List.hd button#children)#coerce;
-           GMisc.label ~text:v ~xalign:0.5 ~yalign:0.5 ~packing:button#add ();
-           true
-         end
-      ]
-end
-
-let new_ticheck_button ~name ?(listprop = []) =
-  new ticheck_button ~widget:(GButton.check_button ~label:name ()) ~name
-
-
-
-class titoggle_button ~(widget : #GButton.toggle_button) ~name
-    ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-object(self)
-  val button = widget
-  inherit tiwidget ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GButton.toggle_button"
-
-  method private get_mandatory_props = [ "label" ]
-
-  initializer
-    classe <- "toggle_button";
-    proplist <-  proplist @
-      [ "border width",        new prop_int ~name:"border_width" ~init:"0"
-                         ~set:(ftrue button#set_border_width);
-       "label",
-       new prop_string ~name:"label" ~init:name ~set:
-         begin fun v ->
-           button#remove (List.hd button#children)#coerce;
-           GMisc.label ~text:v ~xalign:0.5 ~yalign:0.5 ~packing:button#add ();
-           true
-         end ]
-end
-
-let new_titoggle_button ~name ?(listprop = []) =
-  let b = GButton.toggle_button ~label:name () in
-(*  b#connect#event#enter_notify
-    ~callback:(fun _ -> GtkSignal.stop_emit ());
-  b#connect#event#leave_notify
-    ~callback:(fun _ -> GtkSignal.stop_emit ());
-*)
-  new titoggle_button ~name ~widget:b
-
-
-class tiradio_button ~(widget : #GButton.radio_button) ~name:nname
-    ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-object(self)
-  val button = widget
-  inherit tiwidget ~name:nname ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  val group_prop =
-    new prop_enum_dyn ~values:(fun () -> !radio_button_pool) ~name:"group"
-      ~set:(fun () -> true) ~init:nname
-
-
-  method private class_name = "GButton.radio_button"
-
-  method remove_me_without_undo () =
-    radio_button_pool := list_remove !radio_button_pool
-       ~f:(fun x -> x = name);
-    widget#remove_me_without_undo ()
-
-  method private get_mandatory_props = [ "label" ]
-
-  method private emit_clean_proplist =
-    List.remove_assoc "group" widget#emit_clean_proplist
-
-  method emit_initializer_code formatter =
-    let groupname = group_prop#get in
-    if name <> groupname then
-      Format.fprintf formatter "@ %s#set_group %s#group;" name groupname
-
-  initializer
-    classe <- "radio_button";
-    radio_button_pool := name :: !radio_button_pool;
-    List.iter
-      ~f:(fun x -> Propwin.update (Hashtbl.find widget_map x) true)
-      (List.tl !radio_button_pool);
-
-    proplist <-  proplist @
-      [ "border_width",        new prop_int ~name:"border_width" ~init:"0"
-                         ~set:(ftrue button#set_border_width);
-       "label",
-       new prop_string ~name:"label" ~init:name ~set:
-         begin fun v ->
-           button#remove (List.hd button#children)#coerce;
-           GMisc.label ~text:v ~xalign:0.5 ~yalign:0.5 ~packing:button#add ();
-           true
-         end ;
-       "group", group_prop
-      ]
-end
-
-let new_tiradio_button ~name ?(listprop = []) =
-  let b = GButton.radio_button ~label:name () in
-  (*
-  b#event#connect#enter_notify
-    ~callback:(fun _ -> b#misc#stop_emit ~name:"enter_notify_event"; true);
-  b#event#connect#leave_notify
-    ~callback:(fun _ -> b#misc#stop_emit ~name:"leave_notify_event"; true);
-  *)
-  new tiradio_button ~name ~widget:b
-
-
-
-
-class tibutton_toolbar ~(widget : #GButton.button) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window ~toolbar =
-object(self)
-  val button = widget
-  inherit tibutton ~name ~widget ~parent_tree ~pos ~insert_evbox
-       parent_window as button
-
-  method private get_mandatory_props =
-    [ "text"; "tooltip"; "tooltip_private" ]
-
-  method emit_init_code formatter ~packing =
-    Format.fprintf formatter "@ @[<hv 2>let %s =@ @[<hov 2>%s#insert_button"
-      name toolbar#name;
-    List.iter self#get_mandatory_props ~f:
-      begin fun name ->
-       Format.fprintf formatter "@ ~%s:%s" name
-         (List.assoc name proplist)#code
-      end;
-    Format.fprintf formatter "@ ()@ in@]@]"
-
-  initializer
-    proplist <- List.remove_assoc "label" proplist
-end
-
-
-class titoggle_button_toolbar ~(widget : #GButton.toggle_button) ~name
-    ~parent_tree ~pos ?(insert_evbox=true) parent_window ~toolbar =
-object(self)
-  val button = widget
-  inherit titoggle_button ~name ~widget ~parent_tree ~pos ~insert_evbox
-       parent_window as button
-
-  method private get_mandatory_props =
-    [ "text"; "tooltip"; "tooltip_private" ]
-
-  method emit_init_code formatter ~packing =
-    Format.fprintf formatter
-      "@ @[<hv 2>let %s =@ @[<hov 2>%s#insert_toggle_button"
-      name toolbar#name;
-    List.iter self#get_mandatory_props ~f:
-      begin fun name ->
-       Format.fprintf formatter "@ ~%s:%s" name
-         (List.assoc name proplist)#code
-      end;
-    Format.fprintf formatter "@ ()@ in@]@]"
-
-  initializer
-    proplist <- List.remove_assoc "label" proplist
-end
-
-
-class tiradio_button_toolbar ~(widget : #GButton.radio_button) ~name
-    ~parent_tree ~pos ?(insert_evbox=true) parent_window ~toolbar =
-object(self)
-  val button = widget
-  inherit tiradio_button ~name ~widget ~parent_tree ~pos ~insert_evbox
-       parent_window as button
-
-  method private get_mandatory_props =
-    [ "text"; "tooltip"; "tooltip_private" ]
-
-  method emit_init_code formatter ~packing =
-    Format.fprintf formatter
-      "@ @[<hv 2>let %s =@ @[<hov 2>%s#insert_radio_button"
-      name toolbar#name;
-    List.iter self#get_mandatory_props ~f:
-      begin fun name ->
-       Format.fprintf formatter "@ ~%s:%s" name
-         (List.assoc name proplist)#code
-      end;
-    Format.fprintf formatter "@ ()@ in@]@]"
-
-  initializer
-    proplist <- List.remove_assoc "label" proplist
-end
-
-
-
-
-class titoolbar ~(widget : GToolbar2.toolbar2) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val toolbar = widget
-  inherit ticontainer ~name ~widget ~parent_tree ~pos
-    ~insert_evbox parent_window
-
-  method private class_name = "GButton.toolbar"
-
-  method private add child ~pos =
-    children <- children @ [child, `START]
-
-  method private get_pos child =
-    let rec aux n = function
-      |        [] -> failwith "toolbar::get_pos"
-      |        (hd, _)::tl -> if hd = child then n else aux (n+1) tl in
-    aux 0 children
-
-  method private make_child ~classe ?(pos = -1) ~name ~parent_tree
-      ?(insert_evbox = true) ?(listprop = []) parent_window =
-    match classe with
-    | "button" ->
-       let t = try List.assoc "text" listprop with Not_found -> "" in
-       let tt = try List.assoc "tooltip" listprop with Not_found -> "" in
-       let ptt = try List.assoc "tooltip_private" listprop
-       with Not_found -> "" in
-       let listp = List.fold_left ~f:(fun l p -> List.remove_assoc p l)
-           ~init:listprop
-           [ "text"; "tooltip"; "tooltip_private" ] in
-       let b = toolbar#insert_button ~text:t ~tooltip:tt
-           ~tooltip_private:ptt () in
-       let child = new tibutton_toolbar ~name ~widget:b ~pos:(-1)
-             ~insert_evbox:false ~parent_tree:stree parent_window ~toolbar:self in
-       let tp = new prop_string ~name:"text" ~init:t
-           ~set:(fun v -> 
-             toolbar#set_text v (self#get_pos child); true)
-       and ttp = new prop_string ~name:"tooltip" ~init:tt
-           ~set:(fun _ -> true)
-       and pttp = new prop_string ~name:"tooltip_private" ~init:ptt
-           ~set:(fun _ -> true) in
-       child#add_to_proplist
-         [ "text", tp; "tooltip", ttp; "tooltip_private", pttp ];
-       child
-    | "toggle_button" ->
-       let t = try List.assoc "text" listprop with Not_found -> "" in
-       let tt = try List.assoc "tooltip" listprop with Not_found -> "" in
-       let ptt = try List.assoc "tooltip_private" listprop
-       with Not_found -> "" in
-       let listp = List.fold_left ~f:(fun l p -> List.remove_assoc p l)
-           ~init:listprop
-           [ "text"; "tooltip"; "tooltip_private" ] in
-       let b = toolbar#insert_toggle_button ~text:t ~tooltip:tt
-           ~tooltip_private:ptt () in
-       let child = new titoggle_button_toolbar ~name ~widget:b ~pos:(-1)
-             ~insert_evbox:false ~parent_tree:stree parent_window ~toolbar:self in
-       let tp = new prop_string ~name:"text" ~init:t
-           ~set:(fun v -> toolbar#set_text v (self#get_pos child); true)
-       and ttp = new prop_string ~name:"tooltip" ~init:tt
-           ~set:(fun _ -> true)
-       and pttp = new prop_string ~name:"tooltip_private" ~init:ptt
-           ~set:(fun _ -> true) in
-       child#add_to_proplist
-         [ "text", tp; "tooltip", ttp; "tooltip_private", pttp ];
-       child
-    | "radio_button" ->
-       let t = try List.assoc "text" listprop with Not_found -> "" in
-       let tt = try List.assoc "tooltip" listprop with Not_found -> "" in
-       let ptt = try List.assoc "tooltip_private" listprop
-       with Not_found -> "" in
-       let listp = List.fold_left ~f:(fun l p -> List.remove_assoc p l)
-           ~init:listprop
-           [ "text"; "tooltip"; "tooltip_private" ] in
-       let b = toolbar#insert_radio_button ~text:t ~tooltip:tt
-           ~tooltip_private:ptt () in
-       let child = new tiradio_button_toolbar ~name ~widget:b ~pos:(-1)
-             ~insert_evbox:false ~parent_tree:stree parent_window ~toolbar:self in
-       let tp = new prop_string ~name:"text" ~init:t
-           ~set:(fun v -> toolbar#set_text v (self#get_pos child); true)
-       and ttp = new prop_string ~name:"tooltip" ~init:tt
-           ~set:(fun _ -> true)
-       and pttp = new prop_string ~name:"tooltip_private" ~init:ptt
-           ~set:(fun _ -> true) in
-       child#add_to_proplist
-         [ "text", tp; "tooltip", ttp; "tooltip_private", pttp ];
-       child
-    | _ -> failwith "toolbar"
-
-
-
-  method remove child =
-    toolbar#remove (child#base);
-    children <- list_remove ~f:(fun (ch, _) -> ch = child) children;
-
-  initializer
-    classe <- "toolbar";
-    proplist <- proplist @
-      [ "orientation",
-       new prop_orientation ~name:"orientation" ~init:"HORIZONTAL"
-         ~set:(ftrue toolbar#set_orientation);
-       "style",
-       new prop_toolbar_style ~name:"style" ~init:"BOTH"
-         ~set:(ftrue toolbar#set_style);
-       "space_size",
-       new prop_int ~name:"space_size" ~init:"5"
-         ~set:(ftrue toolbar#set_space_size);
-       "space_style",
-       new prop_toolbar_space_style ~name:"space_style" ~init:"EMPTY"
-         ~set:(ftrue toolbar#set_space_style);
-       "tooltips",
-       new prop_bool ~name:"tooltips" ~init:"true"
-         ~set:(ftrue toolbar#set_tooltips);
-       "button_relief",
-       new prop_relief_style ~name:"button_relief" ~init:"NORMAL"
-         ~set:(ftrue toolbar#set_button_relief)
-      ]
-end
-
-let new_toolbar ~name ?(listprop = []) =
-  new titoolbar ~name ~widget:(GToolbar2.toolbar2 ())
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiContainer.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiContainer.ml
deleted file mode 100644 (file)
index ddf04d3..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-
-open Gtk
-open GObj
-open GContainer
-
-open Utils
-open Property
-
-open TiBase
-
-(* for containers being able to have at least one child;
-   not for buttons (can't have children) *)
-
-class virtual ticontainer ~widget ~name
-    ?(insert_evbox=true) ~parent_tree ~pos parent_window =
-object(self)
-
-  val container = (widget : #container :> container)
-
-  inherit tiwidget ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-(* name of the add method: add for most bin widgets,
-   pack for boxes, add_with_viewport for scrolled windows... *)
-  method private name_of_add_method = "#add"
-
-  method private add child ~pos =
-    container#add child#base;
-    children <- [child, `START];
-    self#set_full_menu false;
-    tree_item#drag#dest_unset ()
-
-  method remove child =
-    container#remove child#base;
-    children <- [];
-    self#set_full_menu true;
-    tree_item#drag#dest_set ~actions:[`COPY]
-      [ { target = "STRING"; flags = []; info = 0} ]
-
-  method private menu ~time =
-    let menu = GMenu.menu () and menu_add = GMenu.menu () in
-    List.iter
-      ~f:(fun n ->
-       let mi = GMenu.menu_item ~packing:menu_add#append ~label:n ()
-       in mi#connect#activate
-         ~callback:(fun () -> self#add_child n ();()); ())
-      widget_add_list;      
-    let mi_add = GMenu.menu_item ~packing:menu#append
-       ~label:("add to " ^ name) ()
-    and mi_remove = GMenu.menu_item ~packing:menu#append
-       ~label:("remove " ^ name) ()
-    and mi_cut  = GMenu.menu_item ~packing:menu#append ~label:"Cut" ()
-    and mi_copy = GMenu.menu_item ~packing:menu#append ~label:"Copy" ()
-    and mi_paste = GMenu.menu_item ~packing:menu#append ~label:"Paste" () in
-    mi_remove#connect#activate ~callback:self#remove_me;
-    mi_add#set_submenu menu_add;
-    mi_copy#connect#activate ~callback:self#copy;
-    mi_cut#connect#activate ~callback:self#cut;
-    if !selection <> ""
-    then begin mi_paste#connect#activate ~callback:self#paste; () end
-    else mi_paste#misc#set_sensitive false;
-    menu#popup ~button:3 ~time
-
-  method emit_init_code c ~packing =
-    widget#emit_init_code c ~packing;
-    self#forall ~callback:(fun child -> child#emit_init_code c
-       ~packing:(name ^ self#name_of_add_method))
-
-  method emit_method_code c =
-    widget#emit_method_code c;
-    self#forall ~callback:(fun child -> child#emit_method_code c)
-
-  method emit_initializer_code c =
-    widget#emit_initializer_code c;
-    self#forall ~callback:(fun child -> child#emit_initializer_code c)
-
-
-  initializer
-    proplist <-  proplist @
-      [ "border_width",        new prop_int ~name:"border_width" ~init:"0"
-                         ~set:(ftrue container#set_border_width) ];
-
-    tree_item#drag#dest_set ~actions:[`COPY]
-      [ { target = "STRING"; flags = []; info = 0} ];
-    tree_item#drag#connect#data_received ~callback:
-      begin fun (context : drag_context) ~x ~y
-         (data : selection_data) ~info ~time ->
-           self#add_child data#data ();
-           context#finish ~success:true ~del:false ~time
-      end;()
-end
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiEdit.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiEdit.ml
deleted file mode 100644 (file)
index 4b0977b..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-open Utils
-open Property
-
-open TiBase
-
-
-
-class tientry ~(widget : GEdit.entry) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val entry = widget
-  inherit tiwidget ~name ~widget ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GEdit.entry"
-  initializer
-    classe <- "entry";
-      proplist <- proplist @
-      [ "visibility",
-       new prop_bool ~name:"visibility" ~init:"true"
-                    ~set:(ftrue entry#set_visibility);
-       "editable",
-       new prop_bool ~name:"editable" ~init:"true"
-                    ~set:(ftrue entry#set_editable)
-      ]
-end
-
-let new_tientry ~name ?(listprop = []) =
-  new tientry ~name ~widget:(GEdit.entry ())
-
-
-class tispin_button ~(widget : GEdit.spin_button) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-    val spin_button = widget
-  inherit tientry ~widget:(widget :> GEdit.entry) ~name ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GEdit.spin_button"
-  initializer
-    classe <- "spin_button";
-      proplist <- proplist @
-      [ "digits",
-       new prop_int ~name:"digits" ~init:"0"
-                    ~set:(ftrue spin_button#set_digits);
-       "update_policy",
-       new prop_spin_button_update_policy ~name:"update_policy"
-         ~init:"ALWAYS"
-         ~set:(ftrue spin_button#set_update_policy);
-       "numeric",
-       new prop_bool ~name:"numeric" ~init:"false"
-         ~set:(ftrue spin_button#set_numeric);
-       "wrap",
-       new prop_bool ~name:"wrap" ~init:"false"
-         ~set:(ftrue spin_button#set_wrap);
-       "shadow_type",
-       new prop_shadow ~name:"shadow_type" ~init:"NONE"
-         ~set:(ftrue spin_button#set_shadow_type);
-       "snap_to_ticks",
-       new prop_bool ~name:"snap_to_ticks" ~init:"false"
-         ~set:(ftrue spin_button#set_snap_to_ticks)
-      ]
-    
-end
-
-
-let get_adjustment () =
-  let rv = ref 0. and rl = ref 0. and ru = ref 100. and rsi = ref 1.
-      and rpi = ref 10. and rps = ref 10. in
-  let w  = GWindow.window ~modal:true () in
-  let v  = GPack.vbox  ~packing:w#add () in
-  let l  = GMisc.label ~text:"adjustment properties" ~packing:v#pack () in
-  let h1 = GPack.hbox ~packing:v#pack () in
-  let l1 = GMisc.label ~text:"value" ~packing:h1#pack () in
-  let e1 = GEdit.entry ~text:"0." ~packing:h1#pack () in
-  let h2 = GPack.hbox ~packing:v#pack () in
-  let l2 = GMisc.label ~text:"lower" ~packing:h2#pack () in
-  let e2 = GEdit.entry ~text:"0." ~packing:h2#pack () in
-  let h3 = GPack.hbox ~packing:v#pack () in
-  let l3 = GMisc.label ~text:"upper" ~packing:h3#pack () in
-  let e3 = GEdit.entry ~text:"100." ~packing:h3#pack () in
-  let h4 = GPack.hbox ~packing:v#pack () in
-  let l4 = GMisc.label ~text:"step_incr" ~packing:h4#pack () in
-  let e4 = GEdit.entry ~text:"1." ~packing:h4#pack () in
-  let h5 = GPack.hbox ~packing:v#pack () in
-  let l5 = GMisc.label ~text:"page_incr" ~packing:h5#pack () in
-  let e5 = GEdit.entry ~text:"10." ~packing:h5#pack () in
-  let h6 = GPack.hbox ~packing:v#pack () in
-  let l6 = GMisc.label ~text:"page_size" ~packing:h6#pack () in
-  let e6 = GEdit.entry ~text:"10." ~packing:h6#pack () in
-  let h7 = GPack.hbox ~packing:v#pack () in
-  let b1 = GButton.button ~label:"OK" ~packing:h7#pack () in
-  let b2 = GButton.button ~label:"Cancel" ~packing:h7#pack () in
-  w#show ();
-  b1#connect#clicked
-    ~callback:(fun () ->
-      begin
-       try rv  := float_of_string e1#text with _ ->
-       try rv  := float_of_int (int_of_string e1#text) with _ -> () end;
-      begin
-       try rl  := float_of_string e2#text with _ ->
-       try rl  := float_of_int (int_of_string e2#text) with _ -> () end;
-      begin
-       try ru  := float_of_string e3#text with _ ->
-       try ru  := float_of_int (int_of_string e3#text) with _ -> () end;
-      begin
-       try rsi := float_of_string e4#text with _ ->
-       try rsi := float_of_int (int_of_string e4#text) with _ -> () end;
-      begin
-       try rpi := float_of_string e5#text with _ ->
-       try rpi := float_of_int (int_of_string e5#text) with _ -> () end;
-      begin
-       try rps := float_of_string e6#text with _ ->
-       try rps := float_of_int (int_of_string e6#text) with _ -> () end;
-      w#destroy ());
-  b2#connect#clicked ~callback:w#destroy;
-  w#connect#destroy ~callback:GMain.Main.quit;
-  GMain.Main.main ();
-  !rv, !rl, !ru, !rsi, !rpi, !rps
-
-let new_tispin_button ~name ?(listprop = []) =
-  let v, l, u, si, pi, ps = get_adjustment () in
-  new tispin_button ~name
-    ~widget:(GEdit.spin_button ~adjustment:
-              (GData.adjustment ~value:v ~lower:l ~upper:u
-                 ~step_incr:si ~page_incr:pi ~page_size:ps ()) ())
-
-
-class ticombo ~(widget : GEdit.combo) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val combo = widget
-  inherit tiwidget ~name ~widget ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GEdit.combo"
-  initializer
-    classe <- "combo";
-      proplist <- proplist @
-      [ "use_arrows",
-       new prop_combo_use_arrows ~name:"use_arrows" ~init:"true"
-                    ~set:(ftrue combo#set_use_arrows);
-       "case_sensitive",
-       new prop_bool ~name:"case_sensitive" ~init:"false"
-                    ~set:(ftrue combo#set_case_sensitive)
-      ]
-end
-
-let new_ticombo ~name ?(listprop = []) =
-  new ticombo ~name ~widget:(GEdit.combo ())
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiList.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiList.ml
deleted file mode 100644 (file)
index 770e19b..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-
-open Utils
-open Property
-
-open TiBase
-
-class ticlist ~(widget : 'a GList.clist) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window ~columns ~titles =
-  object(self)
-    val clist = widget
-    inherit tiwidget ~name ~widget ~parent_tree ~pos
-       ~insert_evbox parent_window as widget
-
-    val param = parent_window#add_param
-
-    method private class_name = "GList.clist"
-
-    method private get_mandatory_props = [ "columns" ]
-
-    method remove_me_without_undo () =
-      parent_window#remove_param param;
-      widget#remove_me_without_undo ()
-
-    method emit_init_code formatter ~packing =
-      Format.fprintf formatter 
-       "@ @[<hv 2>let (%s : '%c GList.clist) =@ @[<hov 2>GList.clist"
-       name param;
-      List.iter self#get_mandatory_props ~f:
-       begin fun name ->
-         Format.fprintf formatter "@ ~%s:%s" name
-           (List.assoc name proplist)#code
-       end;
-      let packing = self#get_packing packing in
-      if packing <> "" then Format.fprintf formatter "@ %s" packing;
-      self#emit_prop_code formatter;
-      Format.fprintf formatter "@ ()@ in@]@]"
-
-
-    initializer
-      classe <- "clist";
-      proplist <- proplist @
-      [ "columns",
-       new prop_int ~name:"columns" ~init:(string_of_int columns)
-         ~set:(fun _ -> true);
-       "titles",
-       new prop_clist_titles ~name:"titles" ~init:(String.concat ~sep:" " titles)
-         ~set:(fun v ->
-           let v = Array.of_list v in
-           for i = 0 to Array.length v - 1 do
-             clist#set_column i ~title:v.(i)
-           done;
-           true)
-      ]
-end
-
-let new_clist ~name ?(listprop = []) =
-  let c, lp = match listprop with
-  | [] -> (get_a_number "number of columns" 3), []
-  | ("columns", n)::tl -> (int_of_string n), tl
-  | _ -> failwith "new_clist"
-  in
-  let rtitles = ref [] in
-  for i = c downto 1 do rtitles := ("column" ^(string_of_int i)):: !rtitles done;
-  new ticlist ~name ~widget:(GList.clist ~columns:c ~titles: !rtitles ()) ~columns:c ~titles: !rtitles
-    
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiMisc.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiMisc.ml
deleted file mode 100644 (file)
index f4f435a..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-
-open Utils
-open Property
-
-open TiBase
-open TiContainer
-
-
-class tiseparator ~(dir : Gtk.Tags.orientation) ~(widget : GObj.widget_full)
-    ~name ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-object
-  val separator = widget
-  inherit tiwidget ~name ~widget ~parent_tree ~pos parent_window ~insert_evbox
-
-  method private class_name =
-    match dir with `VERTICAL -> "GMisc.separator `VERTICAL"
-    | `HORIZONTAL -> "GMisc.separator `HORIZONTAL"
-  initializer
-    classe <-
-    (match dir with `VERTICAL -> "vseparator" | `HORIZONTAL -> "hseparator")
-
-end
-
-let new_tihseparator ~name ?(listprop = []) =
-  new tiseparator ~dir: `HORIZONTAL ~name
-    ~widget:(GMisc.separator `HORIZONTAL ())
-let new_tivseparator ~name ?(listprop = []) = 
-  new tiseparator ~dir: `VERTICAL ~name
-    ~widget:(GMisc.separator `VERTICAL ())
-
-
-
-
-class tistatusbar ~(widget : GMisc.statusbar) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val statusbar = widget
-  inherit ticontainer ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GMisc.statusbar"
-
-  initializer
-    classe <- "statusbar"
-end
-
-let new_tistatusbar ~name ?(listprop = []) =
-  new tistatusbar ~widget:(GMisc.statusbar ()) ~name
-
-
-
-class timisc ~(widget : GMisc.misc) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val misc = widget
-  inherit tiwidget ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = failwith "timisc::class_name"
-
-  initializer
-    proplist <- proplist @
-      [ "x_alignment",
-       new prop_float ~name:"x alignment" ~init:"0.5" ~min:0. ~max:1.
-         ~set:(fun v -> misc#set_alignment ~x:v (); true);
-       "y_alignment",
-       new prop_float ~name:"y alignment" ~init:"0.5" ~min:0. ~max:1.
-         ~set:(fun v -> misc#set_alignment ~y:v (); true);
-       "x_padding",
-       new prop_int ~name:"x padding" ~init:"0.5"
-         ~set:(fun v -> misc#set_padding ~x:v (); true);
-       "y_padding",
-       new prop_int ~name:"y padding" ~init:"0.5"
-         ~set:(fun v -> misc#set_padding ~y:v (); true)
-
-      ]
-end
-
-
-class tiarrow ~(widget : GMisc.arrow) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val arrow = widget
-  inherit timisc ~name ~widget:(widget :> GMisc.misc) ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GMisc.arrow"
-  initializer
-    classe <- "arrow";
-end
-
-
-(* TODO   fenetre demandant kind et shadow 
-let new_tiarrow ~name = new tiarrow ~widget:(GMisc.arrow ()) ~name
-*)
-
-
-class tilabel ~(widget : GMisc.label) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val labelw = widget
-  inherit timisc ~name ~widget:(widget :> GMisc.misc) ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GMisc.label"
-
-  method private get_mandatory_props = [ "text" ]
-
-  initializer
-    classe <- "label";
-    proplist <-  proplist @
-      [ "text",
-       new prop_string ~name:"text" ~init:name ~set:(ftrue labelw#set_text);
-       "line_wrap",
-       new prop_bool ~name:"line_wrap" ~init:"true"
-         ~set:(ftrue labelw#set_line_wrap)
-      ]
-end
-
-let new_tilabel ~name ?(listprop = []) =
-  new tilabel ~widget:(GMisc.label ~text:name ()) ~name
-
-
-
-
-
-class ticolor_selection ~(widget : GMisc.color_selection) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val color_selection = widget
-  inherit tiwidget ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GMisc.color_selection"
-
-  initializer
-    classe <- "color_selection";
-    proplist <-  proplist @
-      [ "use_opacity",
-       new prop_bool ~name:"use_opacity" ~init:"false"
-         ~set:(ftrue color_selection#set_opacity);
-       "update_policy",
-       new prop_update_type ~name:"update_policy" ~init:"CONTINUOUS"
-         ~set:(ftrue color_selection#set_update_policy)
-      ]
-end
-
-let new_ticolor_selection ~name ?(listprop = []) =
-  new ticolor_selection ~widget:(GMisc.color_selection ()) ~name
-
-
-class tipixmap ~(widget : GMisc.pixmap) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val pixmap = widget
-  inherit timisc ~name ~widget:(widget :> GMisc.misc) ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GMisc.pixmap"
-  initializer
-    classe <- "pixmap";
-    proplist <- proplist @
-      [ "file",
-       new prop_file ~name:"file" ~init:""
-         ~set:(fun v ->
-           pixmap#set_pixmap
-             (GDraw.pixmap_from_xpm ~window:parent_window#tiwin#widget
-                ~file:v ());
-           true)
-      ]
-end
-
-let new_tipixmap ~name ?(listprop = []) ~parent_tree ~pos ?(insert_evbox=true) (parent_window : window_and_tree0) =
-  new tipixmap ~widget:(GMisc.pixmap (GDraw.pixmap_from_xpm 
-   ~window:parent_window#tiwin#widget ~file:"pixmap.xpm" ()) ()) ~name
-    ~parent_tree ~pos ~insert_evbox parent_window
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiPack.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiPack.ml
deleted file mode 100644 (file)
index 291eec9..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-
-open Utils
-open Property
-
-open TiContainer
-
-class tibox ~(dir : Gtk.Tags.orientation) ~(widget : GPack.box)
-    ~name ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-  let class_name =
-    match dir with `VERTICAL -> "GPack.vbox" | _ -> "GPack.hbox" in
-object(self)
-  val box = widget
-  inherit ticontainer ~name ~widget ~parent_tree ~pos ~insert_evbox
-      parent_window as container
-
-  method private class_name = class_name
-
-  method private name_of_add_method = "#pack"
-
-(* removes the ::expand ::fill ::padding in the proplist of a box
-   assumes that these are the only properties with a :: in the name *)
-  method private save_clean_proplist =
-    List.filter container#save_clean_proplist
-      ~f:(fun (n,p) ->
-       try
-         let i = String.index n ':' in
-         i = String.length n || n.[i+1] <> ':'
-       with Not_found -> true)
-
-  method private emit_clean_proplist =
-    List.filter container#emit_clean_proplist
-      ~f:(fun (n,p) ->
-       try
-         let i = String.index n ':' in
-         i = String.length n || n.[i+1] <> ':'
-       with Not_found -> true)
-
-  method change_name_in_proplist oldn newn =
-    proplist <- List.fold_left ~init:proplist ~f:
-       (fun pl propname ->
-         change_property_name (oldn ^ propname) (newn ^ propname) pl)
-       [ "::expand"; "::fill"; "::padding" ];
-    Propwin.update self false
-
-  method child_up child =
-    let pos = list_pos ~item:child (List.map ~f:fst children) in
-    if pos > 0 then begin
-      box#reorder_child child#base ~pos:(pos-1);
-      children <- list_reorder_up children ~pos;
-      stree#item_up ~pos
-    end
-           
-  method child_down child =
-    let pos = list_pos ~item:child (List.map ~f:fst children) in
-    if pos < (List.length children - 1) then begin
-      box#reorder_child child#base ~pos:(pos+1);
-      children <- list_reorder_down children ~pos;
-      stree#item_up ~pos:(pos+1)
-    end
-           
-  method private add child ~pos =
-    box#pack  child#base;
-    if pos < 0 then begin
-      children <-  children @ [(child, `START)]
-    end
-    else begin
-      children <- list_insert ~item:(child, `START) children ~pos;
-      box#reorder_child child#base ~pos
-    end;
-    let n = child#name in
-    let expand =
-      new prop_bool ~name:"expand" ~init:"false" ~set:
-       begin fun v ->
-         box#set_child_packing (child#base) ~expand:v;
-         Propwin.update child false;
-         Propwin.update self false; true
-       end
-    and fill =
-      new prop_bool ~name:"fill" ~init:"true" ~set:
-       begin fun v ->
-         box#set_child_packing (child#base) ~fill:v;
-         Propwin.update child false;
-         Propwin.update self false; true
-       end
-    and padding =
-      new prop_int ~name:"padding" ~init:"0" ~set:
-       begin fun v ->
-         box#set_child_packing (child#base) ~padding:v;
-         Propwin.update child false;
-         Propwin.update self false; true
-       end
-    in
-    proplist <-  proplist @ 
-      [ (n ^ "::expand"),  expand;
-       (n ^ "::fill"),    fill;
-        (n ^ "::padding"), padding ];
-    child#add_to_proplist
-      [ "expand", expand; "fill", fill; "padding", padding ];
-    Propwin.update self true
-         
-
-  method remove child =
-    box#remove (child#base);
-    children <- list_remove ~f:(fun (ch, _) -> ch = child) children;
-    let n = child#name in
-    proplist <-  List.fold_left ~init:proplist
-       ~f:(fun acc n -> List.remove_assoc n acc)
-       [ (n ^ "::expand"); (n ^ "::fill"); (n ^ "::padding") ];
-    Propwin.update self true
-
-  initializer
-    classe <- (match dir with `VERTICAL -> "vbox" | _ -> "hbox");
-    proplist <-  proplist @
-      [ "homogeneous",
-       new prop_bool ~name:"homogeneous" ~init:"false"
-         ~set:(ftrue box#set_homogeneous);
-       "spacing",
-       new prop_int ~name:"spacing" ~init:"0"
-         ~set:(ftrue box#set_spacing)
-      ]
-end
-
-class tihbox = tibox ~dir:`HORIZONTAL
-class tivbox = tibox ~dir:`VERTICAL
-
-let new_tihbox ~name ?(listprop = []) = new tihbox ~widget:(GPack.hbox ()) ~name
-let new_tivbox ~name ?(listprop = []) = new tivbox ~widget:(GPack.vbox ()) ~name
-
-
-
-
-class tibbox ~(dir : Gtk.Tags.orientation) ~(widget : GPack.button_box)
-    ~name ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-  let class_name =
-    match dir with `VERTICAL -> "GPack.button_box `VERTICAL"
-    | _ -> "GPack.button_box `HORIZONTAL" in
-object(self)
-  val bbox = widget
-  inherit tibox ~dir ~widget:(widget :> GPack.box)
-    ~name ~parent_tree ~pos ~insert_evbox parent_window
-
-  method private class_name = class_name
-
-initializer
-    classe <- (match dir with `VERTICAL -> "vbutton_box" | _ -> "hbutton_box");
-    proplist <-  proplist @
-      [ "layout",
-       new prop_button_box_style ~name:"layout" ~init:"DEFAULT_STYLE"
-         ~set:(ftrue bbox#set_layout);
-       "spacing",
-       new prop_int ~name:"spacing"
-         ~init:(match dir with `VERTICAL -> "10" | _ -> "30")
-(*  donne -1 (defaut)  
-(GtkPack.BBox.get_spacing bbox#as_button_box) *)
-         ~set:(fun v -> bbox#set_spacing v;
-           GtkBase.Widget.queue_resize bbox#as_widget; true);
-       "child_width",
-       new prop_int ~name:"child_width" ~init:"85"
-         ~set:(fun v ->
-           bbox#set_child_size ~width:v
-             ~height:(int_of_string (self#get_property "child_height")) ();
-           GtkBase.Widget.queue_resize bbox#as_widget; true);
-       "child_height",
-       new prop_int ~name:"child_height" ~init:"27"
-         ~set:(fun v ->
-           bbox#set_child_size ~height:v
-             ~width:(int_of_string (self#get_property "child_width")) (); 
-           GtkBase.Widget.queue_resize bbox#as_widget; true);
-       "child_ipad_x",
-       new prop_int ~name:"child_ipad_x" ~init:"7"
-         ~set:(fun v ->
-           bbox#set_child_ipadding ~x:v
-             ~y:(int_of_string (self#get_property "child_ipad_y")) ();
-           GtkBase.Widget.queue_resize bbox#as_widget; true);
-       "child_ipad_y",
-       new prop_int ~name:"child_ipad_y" ~init:"0"
-         ~set:(fun v ->
-           bbox#set_child_ipadding ~y:v
-             ~x:(int_of_string (self#get_property "child_ipad_x")) (); 
-           GtkBase.Widget.queue_resize bbox#as_widget; true);
-      ]
-end
-
-
-(* TODO:  pour proplist/spacing il faudrait implementer
-          les fonctions get_spacing ... (voir dans gtkPack) *)
-
-class tihbutton_box = tibbox ~dir:`HORIZONTAL
-class tivbutton_box = tibbox ~dir:`VERTICAL
-
-let new_tihbutton_box ~name ?(listprop = []) =
-  new tihbutton_box ~widget:(GPack.button_box `HORIZONTAL ()) ~name
-
-let new_tivbutton_box ~name ?(listprop = []) =
-  new tivbutton_box ~widget:(GPack.button_box `VERTICAL ()) ~name
-
-
-
-
-let get_fixed_pos () =
-  let rx = ref 0 and ry = ref 0 in
-  let w  = GWindow.window ~modal:true () in
-  let v  = GPack.vbox  ~packing:w#add () in
-  let l  = GMisc.label ~text:"Enter position for child" ~packing:v#pack () in
-  let h1 = GPack.hbox ~packing:v#pack () in
-  let l1 = GMisc.label ~text:"x:" ~packing:h1#pack () in
-  let e1 = GEdit.entry ~text:"0" ~packing:h1#pack () in
-  let h2 = GPack.hbox ~packing:v#pack () in
-  let l2 = GMisc.label ~text:"y" ~packing:h2#pack () in
-  let e2 = GEdit.entry ~text:"0" ~packing:h2#pack () in
-  let h7 = GPack.hbox ~packing:v#pack () in
-  let b1 = GButton.button ~label:"OK" ~packing:h7#pack () in
-  let b2 = GButton.button ~label:"Cancel" ~packing:h7#pack () in
-  w#show ();
-  b1#connect#clicked
-    ~callback:(fun () ->
-      begin
-       try rx  := int_of_string e1#text with _ -> () end;
-      begin
-       try ry  := int_of_string e2#text with _ -> () end;
-      w#destroy ());
-  b2#connect#clicked ~callback:w#destroy;
-  w#connect#destroy ~callback:GMain.Main.quit;
-  GMain.Main.main ();
-  !rx, !ry
-
-
-class tifixed ~(widget : GPack.fixed)
-    ~name ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-object(self)
-  val fixed = widget
-  inherit ticontainer ~widget
-    ~name ~parent_tree ~pos ~insert_evbox parent_window
-
-  method private class_name = "GPack.fixed"
-
-  method private add child ~pos =
-    let x, y = get_fixed_pos () in
-    fixed#put child#base ~x ~y;
-    children <-  children @ [(child, `START)]
-  initializer
-    classe <- "fixed"
-end
-
-let new_tifixed ~name ?(listprop = []) =
-  new tifixed ~widget:(GPack.fixed ()) ~name
-
-
-
-
-
-class tinotebook ~(widget : GPack.notebook) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val notebook = widget
-  inherit ticontainer ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GPack.notebook"
-
-  method private add child ~pos =
-    children <- children @ [child, `START];
-    notebook#insert_page child#base ~pos;
-    child#add_to_proplist
-      [ "tab_label",
-       new prop_string ~name:"tab_label" ~init:""
-         ~set:(fun v -> notebook#set_page
-             ~tab_label:((GMisc.label ~text:v())#coerce) child#base; true)
-      ]
-
-
-  initializer
-    classe <- "notebook";
-    proplist <-  proplist @
-      [ "tab_pos",
-       new prop_position ~name:"tab_ pos" ~init:"TOP"
-         ~set:(ftrue notebook#set_tab_pos);
-       "show_tabs",
-       new prop_bool ~name:"show_tabs" ~init:"true"
-         ~set:(ftrue notebook#set_show_tabs);
-       "homogeneous_tabs",
-       new prop_bool ~name:"homogeneous_tabs" ~init:"true"
-         ~set:(ftrue notebook#set_homogeneous_tabs);
-       "show_border",
-       new prop_bool ~name:"show_border" ~init:"true"
-         ~set:(ftrue notebook#set_show_border);
-       "scrollable",
-       new prop_bool ~name:"scrollable" ~init:"false"
-         ~set:(ftrue notebook#set_scrollable);
-       "tab_border",
-       new prop_int ~name:"tab_border" ~init:"2"
-         ~set:(ftrue notebook#set_tab_border);
-       "popup_enable",
-       new prop_bool ~name:"popup_enable" ~init:"false"
-         ~set:(ftrue notebook#set_popup)
-      ]
-end
-
-let new_tinotebook ~name ?(listprop = []) =
-  new tinotebook ~widget:(GPack.notebook ()) ~name
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiWidget.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiWidget.ml
deleted file mode 100644 (file)
index 5a6e3ac..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-
-let new_class_list (* :
-  (string *
-  (name:string -> ?listprop:string list ->
-   parent_tree:GTree2.tree -> pos:int ->
-   ?insert_evbox:bool ->
-   
-   TiBase.window_and_tree0 -> TiBase.tiwidget0)) list *)
-= [
-  "window",          TiWindow.new_tiwindow;
-  "hbox",            TiPack.new_tihbox;
-  "vbox",            TiPack.new_tivbox;
-  "hbutton_box",     TiPack.new_tihbutton_box;
-  "vbutton_box",     TiPack.new_tivbutton_box;
-  "fixed",           TiPack.new_tifixed;
-  "notebook",        TiPack.new_tinotebook;
-  "button",          TiButton.new_tibutton;
-  "check_button",    TiButton.new_ticheck_button;
-  "toggle_button",   TiButton.new_titoggle_button;
-  "radio_button",    TiButton.new_tiradio_button;
-  "toolbar",         TiButton.new_toolbar;
-  "hseparator",      TiMisc.new_tihseparator;
-  "vseparator",      TiMisc.new_tivseparator;
-  "statusbar",       TiMisc.new_tistatusbar;
-  "label",           TiMisc.new_tilabel;
-  "color_selection", TiMisc.new_ticolor_selection;
-  "pixmap",          TiMisc.new_tipixmap;
-  "frame",           TiBin.new_tiframe;
-  "aspect_frame",    TiBin.new_tiaspect_frame;
-  "handle_box",      TiBin.new_handle_box;
-  "viewport",        TiBin.new_viewport;
-  "event_box",       TiBin.new_event_box;
-  "scrolled_window", TiBin.new_tiscrolled_window;
-  "entry",           TiEdit.new_tientry;
-  "spin_button",     TiEdit.new_tispin_button;
-  "combo",           TiEdit.new_ticombo;
-  "clist",           TiList.new_clist
-]
-
-let _ =
-  TiBase.new_tiwidget :=
-    (fun ~classe ?(pos = -1) ~name ~parent_tree ?insert_evbox ?(listprop = []) -> (List.assoc classe new_class_list) ~pos ~name ~parent_tree ?insert_evbox ~listprop)
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiWindow.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tiWindow.ml
deleted file mode 100644 (file)
index b44b4d4..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-
-open Utils
-open Property
-
-open TiBase
-open TiContainer
-
-
-class tiwindow ~widget ~name ~parent_tree ~pos ?(insert_evbox=true)
-    parent_window =
-object(self)
-  val window = widget
-  inherit ticontainer ~name ~widget
-      ~insert_evbox:false ~parent_tree ~pos parent_window as container
-
-  method connect_event = window#event#connect
-
-  method private class_name = "GWindow.window"
-
-  method private get_mandatory_props = [ "title" ]
-
-(*  method private save_clean_proplist =
-    List.remove_assoc "title" container#save_clean_proplist
-
-  method private emit_clean_proplist plist =
-    List.remove_assoc "title" (container#emit_clean_proplist plist)
-*)
-  method remove_me () =
-    let sref = ref "" in
-    self#save_to_string sref;
-    let lexbuf = Lexing.from_string !sref in
-    let node = Load_parser.window Load_lexer.token lexbuf in
-    add_undo (Add_window node);
-    self#remove_me_without_undo ()
-
-  method copy () = self#copy_to_sel window_selection
-
-  method remove_me_without_undo () =
-    self#forall ~callback:(fun tiw -> tiw#remove_me_without_undo ());
-    parent_window#remove_sel (self : #tiwidget0 :> tiwidget0);
-    name_list := list_remove !name_list ~f:(fun n -> n=name);
-    Hashtbl.remove widget_map name;
-    Propwin.remove name;
-    widget#destroy ()
-
-  method private get_packing packing = ""
-
-  method emit_code f param_list =
-    let param_string =
-      match param_list with
-      |         [] -> ""
-      |        _ -> "['" ^
-         (String.concat ~sep:", '"
-            (List.map ~f:(fun c -> (String.make 1 c)) param_list)) ^
-         "] " in
-    Format.fprintf f "(* Code for %s *)@\n@\n@[<hv 2>class %s%s () ="
-      name param_string name;
-    self#emit_init_code f ~packing:"";
-    Format.fprintf f "@]@\n@[<hv 2>object (self)";
-    self#emit_method_code f;
-    Format.fprintf f "@ method show () = %s#show ()" name;
-    Format.fprintf f "@ @[<v 2>initializer";
-    self#emit_initializer_code f;
-    Format.fprintf f "@ ()@]@]@ end@\n@\n"
-
-(*  method private save_start formatter =
-    Format.fprintf formatter "@[<0>@\n@[<2><window name=%s>" name;
-    Format.fprintf formatter "@\ntitle=\"%s\""
-      (List.assoc "title" proplist)#get
-*)
-  method private save_end formatter =
-    Format.fprintf formatter "@]@\n</window>@\n@]"
-
-  method private menu ~time =
-    let menu = GMenu.menu () and menu_add = GMenu.menu () in
-    List.iter
-      ~f:(fun n ->
-       let mi = GMenu.menu_item ~packing:menu_add#append ~label:n ()
-       in mi#connect#activate
-         ~callback:(fun () -> self#add_child n (); ()); ())
-      widget_add_list;      
-    let mi_add = GMenu.menu_item ~packing:menu#append ~label:("add to "^ name) ()
-    and mi_paste = GMenu.menu_item ~packing:menu#append ~label:"Paste" ()
-    in
-    mi_add#set_submenu menu_add;
-    if !selection <> ""
-    then begin mi_paste#connect#activate ~callback:self#paste; () end
-    else mi_paste#misc#set_sensitive false;
-    menu#popup ~button:3 ~time
-
-
-  initializer
-    classe <- "window";
-    window#set_title name;
-    proplist <-        proplist @
-      [ "title",
-       new prop_string ~name:"title" ~init:name ~set:(ftrue window#set_title);
-       "allow_shrink", new prop_bool ~name:"allow_shrink" ~init:"false"
-                         ~set:(ftrue window#set_allow_shrink);
-       "allow_grow", new prop_bool ~name:"allow_grow" ~init:"true"
-                       ~set:(ftrue window#set_allow_grow);
-       "auto_shrink", new prop_bool ~name:"auto_shrink" ~init:"false"
-                        ~set:(ftrue window#set_auto_shrink);
-       "x position", new prop_int ~name:"x" ~init:"-2"
-         ~set:(fun x -> window#misc#set_geometry ~x (); true);
-       "y position", new prop_int ~name:"y" ~init:"-2"
-         ~set:(fun y -> window#misc#set_geometry ~y (); true) ]
-end
-
-let new_tiwindow ~name ?(listprop = []) =
-  let w = GWindow.window ~show:true () in
-  w#misc#set_can_focus false;
-  w#misc#set_can_default false;
-  new tiwindow ~widget:w ~name
-
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/togglebutton.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/togglebutton.xpm
deleted file mode 100644 (file)
index f29d769..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *togglebutton_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+..................O+",
-"+.                 O+",
-"+. XXXXXXXXXXXXXXXXO+",
-"+. XXXXXXXXXXXXXXXXO+",
-"+. XXX   XXX XXX XXO+",
-"+. XX XXX XX  XX XXO+",
-"+. XX XXX XX  XX XXO+",
-"+. XX XXX XX X X XXO+",
-"+. XX XXX XX XX  XXO+",
-"+. XX XXX XX XX  XXO+",
-"+. XXX   XXX XXX XXO+",
-"+. XXXXXXXXXXXXXXXXO+",
-"+. XXXXXXXXXXXXXXXXO+",
-"+. XXXXXXXXXXXXXXXXO+",
-"+OOOOOOOOOOOOOOOOOOO+",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/toolbar.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/toolbar.xpm
deleted file mode 100644 (file)
index d9a5217..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *toolbar_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+OOOOOOOOOOOOOOOOOOO ",
-"+OXXXXXXXXXXXXXXXXX. ",
-"+OXOOOO OOOO OOOO X. ",
-"+OXOXXX OXXX OXXX X. ",
-"+OXOXXX OXXX OXXX X. ",
-"+OXO    O    O    X. ",
-"+OXXXXXXXXXXXXXXXXX. ",
-"+O.................. ",
-"+                    ",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tree_minus.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tree_minus.xpm
deleted file mode 100644 (file)
index cce0679..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/* XPM */
-static char *tree_minus[] = {
-/* width height num_colors chars_per_pixel */
-"     9     9        2            1",
-/* colors */
-". c #000000",
-"# c #f8fcf8",
-/* pixels */
-".........",
-".#######.",
-".#######.",
-".#######.",
-".#.....#.",
-".#######.",
-".#######.",
-".#######.",
-"........."
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tree_plus.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/tree_plus.xpm
deleted file mode 100644 (file)
index d0ba80c..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/* XPM */
-static char *tree_plus[] = {
-/* width height num_colors chars_per_pixel */
-"     9     9        2            1",
-/* colors */
-". c #000000",
-"# c #f8fcf8",
-/* pixels */
-".........",
-".#######.",
-".###.###.",
-".###.###.",
-".#.....#.",
-".###.###.",
-".###.###.",
-".#######.",
-"........."
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/utils.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/utils.ml
deleted file mode 100644 (file)
index 0b37975..0000000
+++ /dev/null
@@ -1,353 +0,0 @@
-(* $Id$ *)
-
-open GObj
-
-open Common
-
-external test_modifier : Gdk.Tags.modifier -> int -> bool
-    = "ml_test_GdkModifier_val"
-
-
-(************* types *************)
-(* used in the load_parser and for the selection *)
-
-(* widget: class * name * property list
-   where property = name * value_string *)
-type yywidget = string * string * (string * string) list
-type yywidget_tree = Node of yywidget * yywidget_tree list
-
-
-(*********** some utility functions **************)
-let rec list_remove ~f = function
-  | [] -> []
-  | hd :: tl -> if f hd then tl else hd :: (list_remove ~f tl)
-
-
-(* cut the list at the element elt; elt stays in tail;
-   hd stays in reverse order *)
-let cut_list ~item l =
-  let rec aux h t = match t with
-  | hd :: tl -> if hd = item then h, t
-       else aux (hd :: h) tl
-  | [] -> failwith "cut_list"
-  in aux [] l
-
-let list_pos ~item l =
-  let rec aux pos = function
-    | [] -> raise Not_found
-    | hd :: tl -> if hd = item then pos else aux (pos+1) tl
-  in aux 0 l
-
-(* moves the pos element up; pos is >= 1;
-   the first element is numbered 0 *)
-let rec list_reorder_up ~pos = function
-    | hd1 :: hd2 :: tl when pos = 1 -> hd2 :: hd1 :: tl
-    | hd :: tl when pos > 1 -> hd :: (list_reorder_up ~pos:(pos-1) tl)
-    | _ -> failwith "list_reorder"
-
-(* moves the pos element down; pos is < length of l - 1;
-   the first element is numbered 0 *)
-let rec list_reorder_down ~pos = 
-  list_reorder_up ~pos:(pos+1)
-
-
-let rec list_insert ~item l ~pos =
-  if pos=0 then item :: l
-  else
-    match l with
-    | [] ->  failwith "list_insert"
-    | hd :: tl -> hd :: (list_insert ~item tl ~pos:(pos-1))
-
-
-let rec change_property_name oldname newname = function
-  | (n, p) :: tl when oldname = n -> (newname, p) :: tl
-  | (n, p) :: tl -> (n, p) :: change_property_name oldname newname tl
-  | [] -> failwith "change_property_name: name not found"
-
-
-
-(* contains the list of names of widgets in the current project;
-   used to test if a name is already used;
-   a name is added to the list when a tiwrapper is created (in
-   the initilizer part of tiwrapper,
-   it is removed when the widget is removed from his parent,
-   in method remove_me of tiwrapper *)
-let name_list = ref ([] : string list)
-
-let split name =
-  let l = String.length name in
-  let i = ref (l-1) in
-  while !i >= 0 && name.[!i] >= '0' && name.[!i] <= '9' do decr i done;
-  if !i = l-1 then
-    name, (-1)
-  else
-    (String.sub name ~pos:0 ~len:(!i+1)),
-    int_of_string (String.sub name ~pos:(!i+1) ~len:(l- !i-1))
-
-let test_unique name = not (List.mem name !name_list)
-
-let make_new_name ?(index=1) base =
-  let index, name =
-    if index = -1 then ref 1, ref base
-    else ref index, ref (base ^ (string_of_int index)) in
-  while not (test_unique !name) do
-    incr index;
-    name := base ^ (string_of_int !index)
-  done;
-  !name
-
-let change_name name =
-  let base, index = split name in make_new_name base ~index
-
-let message s =
-  let w = GWindow.window ~show:true ~modal:true () in
-  let v = GPack.vbox ~packing:w#add () in
-  let l = GMisc.label ~text:s ~packing:v#add () in
-  let b = GButton. button ~label:"OK" ~packing:v#add () in
-  b#connect#clicked ~callback:w#destroy;
-  w#connect#destroy ~callback:GMain.Main.quit;
-  GMain.Main.main ()
-
-let message_name () = message "name already in use\npick a new name"
-
-(* better: use a spin button *)
-let get_a_number s default=
-  let res = ref default in
-  let w = GWindow.window ~show:true ~modal:true () in
-  let v = GPack.vbox ~packing:w#add () in
-  let l = GMisc.label ~text:s ~packing:v#add () in
-  let e = GEdit.entry ~text:(string_of_int default) ~packing:v#add () in
-  let b = GButton. button ~label:"OK" ~packing:v#add () in
-  b#connect#clicked ~callback:(fun () ->
-    begin try res := int_of_string e#text with Failure _ -> () end;
-    w#destroy ());
-  w#connect#destroy ~callback:GMain.Main.quit;
-  GMain.Main.main ();
-  !res
-
-
-(*************** file selection *****************)
-
-let get_filename ~callback:set_filename ?(dir="") () =
-  let res = ref false in
-  let file_selection = GWindow.file_selection ~modal:true () in
-  if dir <> "" then file_selection#set_filename dir;
-  file_selection#show ();
-  file_selection#ok_button#connect#clicked
-    ~callback:(fun () -> set_filename file_selection#get_filename;
-      res := true;
-      file_selection#destroy ());
-  file_selection#cancel_button#connect#clicked
-    ~callback:file_selection#destroy;
-  file_selection#connect#destroy ~callback:GMain.Main.quit;
-  GMain.Main.main ();
-  !res
-
-(* returns the directory and the file name (without the extension) *)
-let split_filename filename ~ext =
-  let lext = String.length ext in
-  let l = String.length filename in
-  let filename, l =
-    if (l > lext) && (String.sub filename ~pos:(l - lext) ~len:lext = ext)
-    then (String.sub filename ~pos:0 ~len:(l-lext)), l-lext
-    else filename, l in
-  let i = 1 + (String.rindex filename '/') in
-  String.sub filename ~pos:0 ~len:i,
-  String.sub filename ~pos:i ~len:(l-i)
-
-
-(******************  ML signals *****************)
-let signal_id = ref 0
-
-let next_callback_id () : GtkSignal.id =
-  decr signal_id; Obj.magic (!signal_id : int)
-
-class ['a] signal = object
-  val mutable callbacks : (GtkSignal.id * ('a -> unit)) list = []
-  method connect ~callback ~after =
-    let id = next_callback_id () in
-    callbacks <-
-      if after then callbacks @ [id,callback] else (id,callback)::callbacks;
-    id
-  method call arg =
-    List.iter callbacks ~f:(fun (_,f) -> f arg)
-  method disconnect id =
-    List.mem_assoc id callbacks &&
-    (callbacks <- List.remove_assoc id callbacks; true)
-  method reset () = callbacks <- []
-end
-
-class type disconnector =
-  object
-    method disconnect : GtkSignal.id -> bool
-    method reset : unit -> unit
-  end
-
-class has_ml_signals = object
-  val mutable disconnectors = []
-  method private add_signal (sgn : 'a signal) =
-    disconnectors <- (sgn :> disconnector) :: disconnectors
-
-  method disconnect id =
-    List.exists disconnectors ~f:(fun d -> d#disconnect id)
-end
-
-
-(****************** undo information ********************)
-
-type undo_action =
-  | Add of string * yywidget_tree * int
-  | Remove of string
-  | Property of prop * string
-  | Add_window of yywidget_tree
-  | Remove_window of string
-
-let undo_info = ref ([] : undo_action list)
-let next_undo_info = ref ([] : undo_action list)
-let last_action_was_undo = ref false
-
-let add_undo f =
-  undo_info := f :: !undo_info;
-  last_action_was_undo := false
-
-
-(**********************************************************)
-let ftrue f = fun x -> f x; true
-
-
-(**********************************************************)
-
-let toolbar_child_prop kind =
-  let rt = ref "" and rtt = ref "" and rptt = ref "" and ok = ref false in
-  let w  = GWindow.window ~modal:true () in
-  let v  = GPack.vbox ~packing:w#add () in
-  let h1 = GPack.hbox ~packing:v#pack () in
-  let h2 = GPack.hbox ~packing:v#pack () in
-  let h3 = GPack.hbox ~packing:v#pack () in
-  let h4 = GPack.hbox ~packing:v#pack () in
-  let l1 = GMisc.label ~text:"text" ~packing:h1#pack () in
-  let e1 = GEdit.entry ~packing:h1#pack () in
-  let l2 = GMisc.label ~text:"tooltip_text" ~packing:h2#pack () in
-  let e2 = GEdit.entry ~packing:h2#pack () in
-  let l3 = GMisc.label ~text:"private_text" ~packing:h3#pack () in
-  let e3 = GEdit.entry ~packing:h3#pack () in
-  let b1 = GButton.button ~label:"OK" ~packing:h4#pack () in
-  let b2 = GButton.button ~label:"Cancel" ~packing:h4#pack () in
-  w#show ();
-  b1#connect#clicked
-    ~callback:(fun () -> rt := e1#text; rtt := e2#text;
-      rptt := e3#text; ok := true;
-      w#destroy ());
-  b2#connect#clicked ~callback:w#destroy;
-  w#connect#destroy ~callback:GMain.Main.quit;
-  GMain.Main.main ();
-  !ok, !rt, !rtt, !rptt
-
-
-
-(**********************************************************)
-
-let get5floats_from_string s =
-  try
-    let n1 = String.index s ' ' in
-    let f1 = float_of_string (String.sub s ~pos:0 ~len:(n1-1)) in
-    let n2 = String.index_from s (n1+1) ' ' in
-    let f2 = float_of_string (String.sub s ~pos:(n1+1) ~len:(n2-1)) in
-    let n3 = String.index_from s (n2+1) ' ' in
-    let f3 = float_of_string (String.sub s ~pos:(n2+1) ~len:(n3-1)) in
-    let n4 = String.index_from s (n3+1) ' ' in
-    let f4 = float_of_string (String.sub s ~pos:(n3+1) ~len:(n4-1)) in
-    let f5 = float_of_string (String.sub s ~pos:(n4+1) ~len:
-                               ((String.length s) -1)) in
-    f1, f2, f3, f4, f5
-  with _ -> failwith "get5floats_of_string"
-
-
-
-(**********************************************************)
-
-exception Float_of_string
-let my_float_of_string s =
-  let l = String.length s in
-  if l=0 then raise Float_of_string;
-  let sign, d = match s.[0] with
-  | '+' ->  1, 1
-  | '-' -> -1, 1
-  | _   ->  1, 0 in
-  let m, p =
-    let p = 
-      try
-       String.index s '.'
-      with Not_found -> l in
-    if p=d then 0, p
-    else
-      try int_of_string (String.sub s ~pos:d ~len:(p-d)), p
-      with Failure "int_of_string" -> raise Float_of_string
-  in
-  if p=l then float_of_int m
-  else begin
-    let f = ref 0. and r = ref 0.1 in
-    for i = p+1 to l-1 do
-      let k = (int_of_char s.[i]) - 48 in
-      if k > 9 || k < 0 then raise Float_of_string;
-      f := !f +. (float_of_int k) *. !r;
-      r := !r *. 0.1
-    done;
-    !f +. (float_of_int m)
-  end
-
-    
-  
-
-class entry_float obj ~init = let rv = ref init in
-object
-  inherit GEdit.entry obj as entry
-  method value =
-    try 
-      let v = my_float_of_string entry#text in
-      rv := v;
-      v
-    with Float_of_string ->
-      let pop = GWindow.window ~title:"error" ~modal:true () in
-      let vb = GPack.vbox ~packing:pop#add () in
-      let l = GMisc.label ~text:"value must be a float" ~packing:vb#pack () in
-      let b = GButton.button ~label:"OK" ~packing:vb#pack () in
-      b#connect#clicked ~callback:pop#destroy;
-      pop#event#connect#delete ~callback:(fun _ -> pop#destroy (); true);
-      pop#connect#destroy ~callback:GtkMain.Main.quit;
-      pop#show ();
-      GtkMain.Main.main ();
-      entry#set_text (string_of_float !rv);
-      !rv
-end
-
-
-let set_editable ?editable ?(width = -2) ?(height = -2) w =
-  Gaux.may editable ~f:(GtkEdit.Editable.set_editable w);
-  if width <> -2 || height <> -2 then GtkBase.Widget.set_usize w ~width ~height
-
-
-let entry_float ~init ?max_length ?visibility ?editable
-    ?width ?height ?packing ?show () = 
-  let w = GtkEdit.Entry.create ?max_length () in
-  GtkEdit.Entry.set w ~text:(string_of_float init) ?visibility;
-  set_editable w ?editable ?width ?height;
-  pack_return (new entry_float w ~init) ~packing ~show
-
-
-(*************************************************************)
-
-
-let split_string s ~sep =
-  let l = String.length s in
-  let r = ref [] in
-  let j = ref 0 in
-  for i = 0 to l-1 do
-    if String.unsafe_get s i = sep then begin
-      r := (String.sub s ~pos:!j ~len:(i - !j)) :: !r;
-      j := i + 1
-    end
-  done;
-  List.rev ((String.sub s ~pos:!j ~len:(l - !j)) :: !r)
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/vbox.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/vbox.xpm
deleted file mode 100644 (file)
index 1c557b0..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* XPM */
-static char *vbox_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 4 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c Gray100",
-/* pixels */
-"oooooooooooooooooooo ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"o................... ",
-"                     ",
-"oooooooooooooooooooo ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"o................... ",
-"                     ",
-"oooooooooooooooooooo ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"o................... ",
-"                     "
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/vbuttonbox.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/vbuttonbox.xpm
deleted file mode 100644 (file)
index 0c2bc95..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *vbuttonbox_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"++++++++OOOOO +++++++",
-"++++++++OXXX. +++++++",
-"++++++++OXXX. +++++++",
-"++++++++O.... +++++++",
-"++++++++      +++++++",
-"+++++++++++++++++++++",
-"++++++++OOOOO +++++++",
-"++++++++OXXX. +++++++",
-"++++++++OXXX. +++++++",
-"++++++++O.... +++++++",
-"++++++++      +++++++",
-"+++++++++++++++++++++",
-"++++++++OOOOO +++++++",
-"++++++++OXXX. +++++++",
-"++++++++OXXX. +++++++",
-"++++++++O.... +++++++",
-"++++++++      +++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/viewport.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/viewport.xpm
deleted file mode 100644 (file)
index 71e5e80..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* XPM */
-static char *viewport_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 7 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray87",
-"+ c Gray100",
-"@ c None",
-/* pixels */
-"@@@@@@@@@@@@@@@@@@@@@",
-"@...................@",
-"@.                +O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@.+++++++++++++++++O@",
-"@.OOOOOOOOOOOOOOOOOO@",
-"@@@@@@@@@@@@@@@@@@@@@"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/vseparator.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/vseparator.xpm
deleted file mode 100644 (file)
index 3455f74..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* XPM */
-static char *vseparator_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 4 1",
-"  c #7b7b7b",
-". c #b3cece",
-"X c Gray100",
-"o c None",
-/* pixels */
-"ooooooooooooooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"ooooooooooooooooooooo"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/window.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/radtest/window.xpm
deleted file mode 100644 (file)
index 8407e28..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char *window_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 11 1",
-"  c Gray0",
-". c #00007b",
-"X c #7b7b7b",
-"o c Green",
-"O c Cyan",
-"+ c Red",
-"@ c Yellow",
-"# c #d6d6d6",
-"$ c #b3cece",
-"% c Gray100",
-"& c None",
-/* pixels */
-"&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&",
-"XXXXXXXXXXXXXXXXXXXX&",
-"X.+@...............X ",
-"X.Oo.%%%.%%.....# #X ",
-"XXXXXXXXXXXXXXXXXXXX ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"XXXXXXXXXXXXXXXXXXXX ",
-"&                    ",
-"&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/unison/.cvsignore b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/unison/.cvsignore
deleted file mode 100644 (file)
index 31706ab..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unison-*
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/unison/README b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/unison/README
deleted file mode 100644 (file)
index 73bcc25..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-       A GUI for Unison
-
-Here is a lablGTK port of Unison's GUI.
-Or rather was, since this is now the standard GUI for unison.
-
-Unison is a file synchronization software developped by Benjamin
-Pierce, Trevor Jim, and others.
-
-As of version 2.3.12, unison is based on LablGTK 1.00.
-To use it with the current version, you must:
- * get unison-2.3.12/src.tar.gz from http://www.cis.upenn.edu/~bcpierce/unison/
- * untar it in this directory
- * copy or make links for uigtk.ml here inside unison-2.3.12
-        ln -fs ../uigtk.ml .
- * make and follow instructions in INSTALL.txt
-
-Jacques Garrigue
-
-$Id$
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/unison/uigtk.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/applications/unison/uigtk.ml
deleted file mode 100644 (file)
index 6efacd6..0000000
+++ /dev/null
@@ -1,1434 +0,0 @@
-(* $Id$ *)
-
-open Util
-open Os
-open Common
-open Uicommon
-open Printf
-open Trace
-
-(**********************************************************************)
-(*                           GRAPHICAL INTERFACE                      *)
-(**********************************************************************)
-
-module Private : Uicommon.UI = struct
-
-open GMain
-open GdkKeysyms
-
-let debugprogress = Trace.debug "progress"
-
-(**********************************************************************)
-(* UI preferences                                                     *)
-(**********************************************************************)
-
-let fontMonospaceMedium =
-  if Sys.os_type = "Win32" then
-    lazy (Gdk.Font.load "-*-Courier New-Medium-R-Normal--*-110-*-*-*-*-*-*")
-  else
-    lazy (Gdk.Font.load "-*-Clean-Medium-R-Normal--*-130-*-*-*-*-*-*")
-let fontMonospaceBold =
-  if Sys.os_type = "Win32" then
-    lazy (Gdk.Font.load "-*-Courier New-Bold-R-Normal--*-110-*-*-*-*-*-*")
-  else
-    lazy (Gdk.Font.load "-*-Courier-Bold-R-Normal--*-120-*-*-*-*-*-*")
-
-(**********************************************************************)
-(* UI state variables                                                 *)
-(**********************************************************************)
-
-type stateItem = { ri : reconItem;
-                   mutable bytesTransferred : int;
-                   mutable whatHappened : unit confirmation option }
-let theState = ref [||]
-
-let current = ref None
-
-let currentWindow = ref None
-let grabFocus t =
-  match !currentWindow with
-    Some w -> t#set_transient_for w;
-              w#misc#set_sensitive false
-  | None   -> ()
-let releaseFocus () =
-  begin match !currentWindow with
-    Some w -> w#misc#set_sensitive true
-  | None   -> ()
-  end
-
-(**********************************************************************)
-(*                         Lock management                            *)
-(**********************************************************************)
-
-let busy = ref false
-
-let getLock f =
-  if !busy then
-    Trace.message "Synchronizer is busy, please wait..\n"
-  else begin
-    busy := true; f (); busy := false
-  end
-
-(**********************************************************************)
-(* Some widgets                                                              *)
-(**********************************************************************)
-
-class scrolled_text ?editable ?word_wrap ?width ?height ?packing ?show
-    () =
-  let sw =
-    GBin.scrolled_window ?width ?height ?packing ~show:false
-      ~hpolicy:`NEVER ~vpolicy:`AUTOMATIC ()
-  in
-  let text = GEdit.text ?editable ?word_wrap ~packing:sw#add () in
-  object
-    inherit GObj.widget_full sw#as_widget
-    method text = text
-    method insert ?(font=fontMonospaceMedium) s =
-      text#freeze ();
-      text#delete_text ~start:0 ~stop:text#length;
-      text#insert ~font:(Lazy.force font) s;
-      text#thaw ()
-    method show () = sw#misc#show ()
-    initializer
-      if show <> Some false then sw#misc#show ()
-  end
-
-let gtk_sync () = while Glib.Main.iteration false do () done
-
-(**********************************************************************)
-(*                           YES OR NO FUNCTION                       *)
-(**********************************************************************)
-(* val yesOrNo : string -> string -> (unit -> unit) -> (unit -> unit) *)
-(*                      -> unit                                       *)
-(* Displays a window with two buttons : YES and NO                    *)
-(* yesOrNo title message yesFunction noFunction open the title        *)
-(* window in which is displayed message. yesFunction and noFunctions  *)
-(* are the functions associated two the two buttons                   *)
-(**********************************************************************)
-let yesOrNo ~title ~message ~yes:yesFunction ~no:noFunction =
-  let t = GWindow.dialog ~title ~wm_name:title ~modal:true ~position:`CENTER () in
-  grabFocus t;
-  let theLabel = GMisc.label ~text:message
-      ~packing:(t#vbox#pack ~padding:4) () in
-  let yes = GButton.button ~label:"Yes" ~packing:t#action_area#add ()
-  and no = GButton.button ~label:"No" ~packing:t#action_area#add () in
-  no#grab_default ();
-  ignore
-    (yes#connect#clicked ~callback:(fun () -> t#destroy (); yesFunction ()));
-  ignore
-    (no#connect#clicked  ~callback:(fun () -> t#destroy (); noFunction ()));
-  t#show ();
-  ignore (t#connect#destroy ~callback:Main.quit);
-  Main.main ();
-  releaseFocus ()
-
-(**********************************************************************)
-(*                         SAFE EXIT FUNCTION                         *)
-(**********************************************************************)
-
-(* Avoid recursive invocations of the function below
-   (a window receives delete events even when it is not sensitive) *)
-let inExit = ref false
-
-let safeExit () =
-  if not !inExit then begin
-    inExit := true;
-    if not !busy then exit 0 else
-    yesOrNo ~title:"Premature exit"
-      ~message:"Unison is working, exit anyway ?"
-      ~yes:(fun () -> exit 0) ~no:(fun () -> ());
-    inExit := false
-  end
-
-(**********************************************************************)
-(* okBox: Display a message in a window and wait for the user         *)
-(* to hit the "OK" button.                                            *)
-(**********************************************************************)
-let okBox ~title ~message =
-  let t = GWindow.dialog ~title ~wm_name:title ~modal:true ~position:`CENTER () in
-  grabFocus t;
-  let theLabel = GMisc.label ~text:message
-      ~packing:(t#vbox#pack ~padding:4) () in
-  let ok = GButton.button ~label:"OK" ~packing:t#action_area#add () in
-  ok#grab_default ();
-  ignore (ok#connect#clicked ~callback:(fun () -> t#destroy()));
-  t#show ();
-  (* Do nothing until user destroys window *)
-  ignore (t#connect#destroy ~callback:Main.quit);
-  Main.main ();
-  releaseFocus ()
-
-(**********************************************************************)
-(* warnBox: Display a warning message in a window and wait for the    *)
-(* user to hit "OK" or "Exit".                                        *)
-(**********************************************************************)
-let warnBox ~title ~message =
-  inExit := true;
-  let t = GWindow.dialog ~title ~wm_name:title ~modal:true ~position:`CENTER () in
-  grabFocus t;
-  let theLabel =
-    GMisc.label ~text:message
-      ~packing:(t#vbox#pack ~padding:4) () in
-  let ok = GButton.button ~label:"OK" ~packing:t#action_area#add () in
-  ok#grab_default ();
-  ignore (ok#connect#clicked ~callback:(fun () -> t#destroy()));
-  let exi = GButton.button ~label:"Exit" ~packing:t#action_area#add () in
-  ignore (exi#connect#clicked ~callback:(fun () -> exit 0));
-  t#show ();
-  (* Do nothing until user destroys window *)
-  ignore (t#connect#destroy ~callback:Main.quit);
-  Main.main ();
-  releaseFocus ();
-  inExit := false
-
-(**********************************************************************)
-(* Standard file dialog                                               *)
-(**********************************************************************)
-let file_dialog ~title ~callback ?filename () =
-  let sel = GWindow.file_selection ~title ~modal:true ?filename () in
-  grabFocus sel;
-  ignore (sel#cancel_button#connect#clicked ~callback:sel#destroy);
-  ignore (sel#ok_button#connect#clicked ~callback:
-            (fun () ->
-               let name = sel#get_filename in
-               sel#destroy ();
-               callback name));
-  sel#show ();
-  Main.main ();
-  releaseFocus ()
-
-(**********************************************************************)
-(* The root selection dialog                                          *)
-(**********************************************************************)
-let rootSelect cont =
-  let t = GWindow.dialog ~title:"Root selection" ~wm_name:"Root selection"
-      ~modal:true ~allow_grow:true () in
-  t#misc#grab_focus ();
-  
-  let makeGetRoot title =
-    let fr =
-      GBin.frame ~label:title ~border_width:2 ~packing:(t#vbox#add) () in
-
-    let vb = GPack.vbox ~border_width:4 ~packing:fr#add () in
-  
-    let f = GPack.vbox ~packing:(vb#add) () in
-    let f0 = GPack.hbox ~spacing:4 ~packing:f#add () in
-    ignore (GMisc.label ~text:"Host:" ~packing:f0#pack ());
-    let localB = GButton.radio_button ~packing:f0#pack
-        ~label:"Local" () in
-    let remoteB = GButton.radio_button ~group:localB#group
-        ~packing:f0#pack ~label:"Remote" () in
-    let hostE = GEdit.entry ~packing:f0#add () in
-    let f1 = GPack.hbox ~spacing:4 ~packing:f#add () in
-    ignore (GMisc.label ~text:"File:" ~packing:f1#pack ());
-    let fileE = GEdit.entry ~packing:f1#add () in
-    let browseCommand() =
-      file_dialog ~title:"Select a local file"
-        ~callback:(fun file -> fileE#set_text file) ~filename:fileE#text ()
-    in
-    let b = GButton.button ~label:"Browse"
-        ~packing:f1#pack () in
-    ignore (b#connect#clicked ~callback:browseCommand);
-    let varLocalRemote = ref (`Local : [`Local|`Remote]) in
-    let localState() =
-      varLocalRemote := `Local;
-      hostE#misc#set_sensitive false;
-      b#misc#set_sensitive true
-    in
-    let remoteState() =
-      varLocalRemote := `Remote;
-      hostE#misc#set_sensitive true;
-      b#misc#set_sensitive false
-    in
-    ignore (localB#connect#clicked ~callback:localState);
-    ignore (remoteB#connect#clicked ~callback:remoteState);
-    localState();
-    let getRoot() =
-      let filePart = fileE#text in
-      let remoteHost = hostE#text in
-      (* FIX: should do sanity checking here *)
-      match !varLocalRemote with
-        `Local -> filePart
-      | `Remote -> "//"^remoteHost^"/"^filePart in
-    getRoot
-  in
-  
-  let getRoot1 = makeGetRoot "Root 1" in
-  let getRoot2 = makeGetRoot "Root 2" in
-  
-  let f3 = t#action_area in
-  let okCommand() =
-    let root1 = getRoot1() in
-    let root2 = getRoot2() in
-    Prefs.setPref Uicommon.roots Prefs.TempSetting [root1;root2];
-    t#destroy ();
-    cont ()
-  in
-  let okButton = GButton.button ~label:"OK" ~packing:f3#add () in
-  ignore (okButton#connect#clicked ~callback:okCommand);
-  okButton#grab_default ();
-  let cancelButton = GButton.button ~label:"Cancel" ~packing:f3#add () in
-  ignore (cancelButton#connect#clicked ~callback:safeExit);
-  
-  (* The profile editing dialog has been installed into the Gtk
-     main interaction loop; wait until it completes. *)
-  t#show ();
-  ignore (t#connect#destroy ~callback:Main.quit);
-  Main.main ()
-
-(**********************************************************************)
-(* The root selection dialog                                          *)
-(**********************************************************************)
-let editProfile prof =
-  (* FIX:
-     Scan the profile (if it is defined)
-     Extract the roots
-     Modifications
-     Save with new roots *)
-  let t = GWindow.dialog ~title:"Edit profile" ~wm_name:"Edit profile"
-      ~modal:true ~allow_grow:true () in
-  t#misc#grab_focus ();
-  
-  let vb = GPack.vbox ~border_width:4 ~packing:t#vbox#add () in
-  
-  let makeGetRoot() =
-    let f = GPack.vbox ~packing:(vb#pack ~expand:true ~padding:4) () in
-    let f0 = GPack.hbox ~spacing:4 ~packing:f#add () in
-    ignore (GMisc.label ~text:"Host:" ~packing:f0#pack ());
-    let localB = GButton.radio_button ~packing:f0#pack ~label:"Local" () in
-    let remoteB = GButton.radio_button ~group:localB#group
-        ~packing:f0#pack ~label:"Remote" () in
-    let hostE = GEdit.entry ~packing:f0#add () in
-    let f1 = GPack.hbox ~spacing:4 ~packing:f#add () in
-    ignore (GMisc.label ~text:"File:" ~packing:f1#pack ());
-    let fileE = GEdit.entry ~packing:f1#add () in
-    let browseCommand() =
-      file_dialog ~title:"Select a local file"
-        ~callback:(fun file -> fileE#set_text file) ()
-    in
-    let b = GButton.button ~label:"Browse" ~packing:f1#pack () in
-    ignore (b#connect#clicked ~callback:browseCommand);
-    let varLocalRemote = ref (`Local : [`Local|`Remote]) in
-    let localState() =
-      varLocalRemote := `Local;
-      hostE#set_editable false;
-      b#misc#set_state `NORMAL
-    in
-    let remoteState() =
-      varLocalRemote := `Remote;
-      hostE#set_editable true;
-      b#misc#set_state `INSENSITIVE
-    in
-    ignore (localB#connect#clicked ~callback:localState);
-    ignore (remoteB#connect#clicked ~callback:remoteState);
-    localState();
-    let getRoot() =
-      let filePart = fileE#text in
-      let remoteHost = hostE#text in
-      (* FIX: should do sanity checking here *)
-      match !varLocalRemote with
-        `Local -> filePart
-      | `Remote -> "//"^remoteHost^"/"^filePart in
-    getRoot
-  in
-  
-  
-  ignore (GMisc.label ~text:"Root 1:" ~xalign:0.
-            ~packing:(vb#pack ~expand:true ~padding:4) ());
-  let getRoot1 = makeGetRoot() in
-  
-  ignore (GMisc.label ~text:"Root 2:" ~xalign:0.
-            ~packing:(vb#pack ~expand:true ~padding:4) ());
-  let getRoot2 = makeGetRoot() in
-  
-  let f3 = t#action_area in
-  let okCommand() =
-    let root1 = getRoot1() in
-    let root2 = getRoot2() in
-    Prefs.setPref Uicommon.roots Prefs.PermanentSetting [root1;root2];
-    Globals.savePrefs();
-    t#destroy () in
-  let okButton = GButton.button ~label:"OK" ~packing:f3#add () in
-  ignore (okButton#connect#clicked ~callback:okCommand);
-  let cancelCommand() =
-    t#destroy ()
-  in
-  let cancelButton = GButton.button ~label:"Cancel" ~packing:f3#add () in
-  ignore (cancelButton#connect#clicked ~callback:cancelCommand);
-  
-  (* The profile editing dialog has been installed into the Gtk
-     main interaction loop; wait until it completes. *)
-  t#show ();
-  ignore (t#connect#destroy ~callback:Main.quit);
-  Main.main ()
-
-(**********************************************************************)
-(*                        Documentation window                        *)
-(**********************************************************************)
-let documentation sect =
-  let title = "Documentation" in
-  let t = GWindow.dialog ~title ~wm_name:title () in
-  let t_dismiss =
-    GButton.button ~label:"dismiss" ~packing:t#action_area#add () in
-  t_dismiss#grab_default ();
-  let dismiss () = t#destroy () in
-  ignore (t_dismiss#connect#clicked ~callback:dismiss);
-  ignore (t#event#connect#delete ~callback:(fun _ -> dismiss (); true));
-
-  let (name, docstr) = List.assoc sect Strings.docs in
-  let hb = GPack.hbox ~packing:(t#vbox#pack ~expand:false ~padding:2) () in
-  let optionmenu =
-    GMenu.option_menu ~packing:(hb#pack ~fill:false) () in
-
-  let charW = Gdk.Font.char_width (Lazy.force fontMonospaceMedium) 'M' in
-  let charH = 16 in
-  let t_text =
-    new scrolled_text ~editable:false
-      ~width:(charW * 80) ~height:(charH * 20) ~packing:t#vbox#add ()
-  in
-  t_text#insert docstr;
-
-  let sect_idx = ref 0 in
-  let idx = ref 0 in
-  let menu = GMenu.menu () in
-  let addDocSection (shortname, (name, docstr)) =
-    if shortname <> "" && name <> "" then begin
-      if shortname = sect then sect_idx := !idx;
-      incr idx;
-      let item = GMenu.menu_item ~label:name ~packing:menu#append () in
-      ignore
-        (item#connect#activate ~callback:(fun () -> t_text#insert docstr))
-    end
-  in
-  Safelist.iter addDocSection Strings.docs;
-  optionmenu#set_menu menu;
-  optionmenu#set_history !sect_idx;
-
-  t#show ()
-
-(**********************************************************************)
-(* The profile selection dialog                                       *)
-(**********************************************************************)
-let profileSelect cont =
-(* FIX:
-  - Choix du profil par defaut
-*)
-  let profilesAndRoots =
-    ref
-      (Safelist.map
-         (fun f ->
-            let filename = fspath2string (Os.fileInUnisonDir f) in
-            let roots =
-              Safelist.map snd
-                (Safelist.filter (fun (n, v) -> n = "root")
-                   (Prefs.scanPreferencesFile filename))
-            in
-            (Filename.chop_suffix f ".prf", roots))
-         (Files.ls (fspath2string Os.synchronizerFspath) "*.prf")) in
-
-  (* The selected profile *)
-  let selection = ref None in
-  
-  (* Build the dialog *)
-  let t = GWindow.dialog ~title:"Profiles" ~wm_name:"Profiles" () in
-  
-  let okCommand() =
-    match !selection with
-      Some profile ->
-        Globals.prefsFileName := profile ^ ".prf";
-        currentWindow := None;
-        t#destroy ();
-        cont ()
-    | _ ->
-        ()
-  in
-  let okButton = GButton.button ~label:"OK" ~packing:t#action_area#add () in
-  ignore (okButton#connect#clicked ~callback:okCommand);
-  okButton#misc#set_sensitive false;
-  okButton#grab_default ();
-  let cancelCommand() = t#destroy (); Main.quit () in
-  let cancelButton = GButton.button ~label:"Cancel"
-      ~packing:t#action_area#add () in
-  ignore (cancelButton#connect#clicked ~callback:cancelCommand);
-  cancelButton#misc#set_can_default true;
-  
-  let vb = t#vbox in
-  
-  ignore (GMisc.label
-            ~text:"Select an existing profile or create a new one"
-            ~xpad:2 ~ypad:2 ~packing:vb#pack ());
-  
-  let sw =
-    GBin.scrolled_window ~packing:vb#add ~height:100
-      ~hpolicy:`AUTOMATIC ~vpolicy:`AUTOMATIC ()
-  in
-  let lst = GList.clist ~selection_mode:`BROWSE ~packing:(sw#add) () in
-  let fillLst default =
-    lst#freeze ();
-    lst#clear ();
-    let selRow = ref 0 in
-    let i = ref 0 in (* FIX: Work around a lablgtk bug *)
-    Safelist.iter
-      (fun (profile, roots) ->
-         ignore (lst#append [profile]);
-         if profile = default then selRow := !i;
-         lst#set_row_data !i (profile, roots);
-         incr i)
-      (List.sort (fun (p, _) (p', _) -> compare p p') !profilesAndRoots);
-    let r = lst#rows in
-    let p = if r < 2 then 0. else float !selRow /. float (r - 1) in
-    lst#scroll_vertical `JUMP p;
-    lst#thaw ()
-  in
-  let tbl =
-    GPack.table ~rows:2 ~columns:2 ~packing:vb#pack ()
-  in
-  tbl#misc#set_sensitive false;
-  ignore (GMisc.label ~text:"Root 1:" ~xpad:2
-            ~packing:(tbl#attach ~left:0 ~top:0 ~expand:`NONE) ());
-  ignore (GMisc.label ~text:"Root 2:" ~xpad:2
-            ~packing:(tbl#attach ~left:0 ~top:1 ~expand:`NONE) ());
-  let root1 =
-    GEdit.entry ~packing:(tbl#attach ~left:1 ~top:0) ~editable:false () in
-  let root2 =
-    GEdit.entry ~packing:(tbl#attach ~left:1 ~top:1) ~editable:false () in
-  root1#misc#set_can_focus false;
-  root2#misc#set_can_focus false;
-  let hb =
-    GPack.hbox ~border_width:2 ~spacing:2 ~packing:(vb#pack ~expand:false) ()
-  in
-  let nw =
-    GButton.button ~label:"Create new profile"
-      ~packing:hb#pack () in
-  ignore (nw#connect#clicked ~callback:(fun () ->
-    let t =
-      GWindow.dialog ~title:"New profile" ~wm_name:"New profile" ~modal:true ()
-    in
-    let vb = GPack.vbox ~border_width:4 ~packing:t#vbox#add () in
-    let f = GPack.vbox ~packing:(vb#pack ~expand:true ~padding:4) () in
-    let f0 = GPack.hbox ~spacing:4 ~packing:f#add () in
-    ignore (GMisc.label ~text:"Profile name:"
-              ~packing:f0#pack ());
-    let prof = GEdit.entry ~packing:f0#add () in
-    prof#misc#grab_focus ();
-
-    let exit () = t#destroy (); Main.quit () in
-    ignore (t#event#connect#delete ~callback:(fun _ -> exit (); true));
-
-    let f3 = t#action_area in
-    let okCommand () =
-      let profile = prof#text in
-      if profile <> "" then
-        let file = profile ^ ".prf" in
-        let fspath = Os.fileInUnisonDir file in
-        let filename = fspath2string fspath in
-        if Sys.file_exists filename then
-          okBox (myName ^ " error")
-            ("Profile \""
-             ^ profile
-             ^ "\" already exists!\nPlease select another name.")
-        else
-          (* Make an empty file *)
-          let ch =
-            open_out_gen
-              [Open_wronly; Open_creat; Open_trunc] 0o600 filename in
-          close_out ch;
-          profilesAndRoots := (profile, [])::!profilesAndRoots;
-          fillLst profile;
-          exit ()
-    in
-    let okButton = GButton.button ~label:"OK" ~packing:f3#add () in
-    ignore (okButton#connect#clicked ~callback:okCommand);
-    okButton#grab_default ();
-    let cancelButton = GButton.button ~label:"Cancel" ~packing:f3#add () in
-    ignore (cancelButton#connect#clicked ~callback:exit);
-
-    t#show ();
-    grabFocus t;
-    Main.main ();
-    releaseFocus ()));
-  let ed =
-    GButton.button ~label:"Edit" (*~packing:(hb#pack ~expand:false)*) () in
-  let sd =
-    GButton.button ~label:"Set default" (*~packing:(hb#pack ~expand:false)*) ()
-  in
-  let hlp =
-    GButton.button ~label:"Help"
-      ~packing:(hb#pack ~expand:false ~from:`END) () in
-  ignore (hlp#connect#clicked ~callback:(fun () -> documentation "tutorial"));
-
-  ignore (lst#connect#unselect_row ~callback:(fun _ _ _ ->
-    root1#set_text ""; root2#set_text "";
-    selection := None;
-    tbl#misc#set_sensitive false;
-    okButton#misc#set_sensitive false;
-    ed#misc#set_sensitive false;
-    sd#misc#set_sensitive false));
-  ignore (lst#connect#select_row ~callback:(fun i _ _ ->
-    (* Inserting the first row trigger the signal, even before the row
-       data is set. So, we need to catch the corresponding exception *)
-    try
-      let (profile, roots) = lst#get_row_data i in
-      selection := Some profile;
-      begin match roots with
-        [r1; r2] -> root1#set_text r1; root2#set_text r2;
-                    tbl#misc#set_sensitive true
-      | _        -> root1#set_text ""; root2#set_text "";
-                    tbl#misc#set_sensitive false
-      end;
-      okButton#misc#set_sensitive true;
-      ed#misc#set_sensitive true;
-      sd#misc#set_sensitive true
-    with Gpointer.Null -> ()));
-  ignore (lst#event#connect#button_press ~callback:(fun ev ->
-    match GdkEvent.get_type ev with
-      `TWO_BUTTON_PRESS ->
-        okCommand ();
-        true
-    | _ ->
-        false));
-  fillLst "default";
-  lst#misc#grab_focus ();
-  currentWindow := Some (t :> GWindow.window);
-  ignore (t#event#connect#delete ~callback:(fun _ -> Main.quit (); true));
-  t#show ()
-
-(**********************************************************************)
-(* Function to display a message in a new window                      *)
-(**********************************************************************)
-let messageBox ~title ?(label = "Dismiss") ?(action = fun t -> t#destroy)
-    ?(modal = false) message =
-  let t = GWindow.dialog ~title ~wm_name:title ~modal ~position:`CENTER () in
-  let t_dismiss = GButton.button ~label ~packing:t#action_area#add () in
-  t_dismiss#grab_default ();
-  ignore (t_dismiss#connect#clicked ~callback:(action t));
-  let charW = Gdk.Font.char_width (Lazy.force fontMonospaceMedium) 'M' in
-  let charH = 16 in
-  let t_text =
-    new scrolled_text ~editable:false
-      ~width:(charW * 80) ~height:(charH * 20) ~packing:t#vbox#add ()
-  in
-  t_text#insert message;
-  ignore (t#event#connect#delete ~callback:(fun _ -> action t (); true));
-  t#show ();
-  if modal then begin
-    grabFocus t;
-    Main.main ();
-    releaseFocus ()
-  end
-
-(**********************************************************************)
-(* Fatal error handling                                               *)
-(**********************************************************************)
-let fatalError =
-  messageBox ~title:"Fatal Error" ~label:"Exit" ~modal:true
-    ~action:(fun t () -> exit 1)
-
-
-(**********************************************************************)
-(*                      Toplevel window                               *)
-(**********************************************************************)
-let createToplevelWindow () =
-  let toplevelWindow = GWindow.window ~wm_name:myName () in
-  let toplevelVBox = GPack.vbox ~packing:toplevelWindow#add () in
-
-  (**********************************************************************)
-  (* Groups of same sensitivity                                         *)
-  (**********************************************************************)
-  let grAction = ref [] in
-  let grDiff = ref [] in
-  let grProceed = ref [] in
-  let grRestart = ref [] in
-  let grAdd gr w = gr := w#misc::!gr in
-  let grSet gr st = List.iter (fun x -> x#set_sensitive st) !gr in
-
-  (**********************************************************************)
-  (* Create the menu bar                                                *)
-  (**********************************************************************)
-  let menuBar =
-    GMenu.menu_bar ~border_width:2 ~packing:toplevelVBox#pack ()
-  in
-  let menus = new GMenu.factory ~accel_modi:[] menuBar in
-  let accel_group = menus#accel_group in
-  toplevelWindow#add_accel_group accel_group;
-  let add_submenu ?(modi=[]) ~label () =
-    new GMenu.factory ~accel_group ~accel_modi:modi (menus#add_submenu label)
-  in
-  
-  (**********************************************************************)
-  (* Create the menus                                                   *)
-  (**********************************************************************)
-  let fileMenu = add_submenu ~label:"Synchronization" ()
-  and actionsMenu = add_submenu ~label:"Actions" ()
-  and ignoreMenu = add_submenu ~modi:[`SHIFT] ~label:"Ignore" ()
-  and helpMenu = add_submenu ~label:"Help" () in
-
-  (**********************************************************************)
-  (* Create the main window                                             *)
-  (**********************************************************************)
-  let mainWindow =
-    let sw =
-      GBin.scrolled_window ~packing:(toplevelVBox#add)
-        ~height:(Prefs.readPref mainWindowHeight * 12)
-        ~hpolicy:`AUTOMATIC ~vpolicy:`AUTOMATIC ()
-    in
-    GList.clist
-      ~columns:5 ~titles_show:true ~selection_mode:`BROWSE ~packing:sw#add ()
-  in
-  mainWindow#misc#grab_focus ();
-  (* FIX: roots2string should return a pair *)
-  let s = roots2string () in
-  Array.iteri
-    (fun i data ->
-       mainWindow#set_column
-         ~title_active:false ~auto_resize:true ~title:data i)
-    [| " " ^ String.sub s ~pos:0 ~len:12 ^ " "; "  Action  ";
-       " " ^ String.sub s ~pos:15 ~len:12 ^ " "; "  Status  "; " Path" |];
-  let status_width =
-    let font = mainWindow#misc#style#font in
-    4 + max (Gdk.Font.string_width font "working")
-            (Gdk.Font.string_width font "skipped")
-  in
-  mainWindow#set_column ~justification:`CENTER 1;
-  mainWindow#set_column
-    ~justification:`CENTER ~auto_resize:false ~width:status_width 3;
-
-  (**********************************************************************)
-  (* Create the details window                                          *)
-  (**********************************************************************)
-
-  let charW = Gdk.Font.char_width (Lazy.force fontMonospaceMedium) 'M' in
-  let charH = if Sys.os_type = "Win32" then 20 else 16 in
-
-  let detailsWindow =
-    let sw =
-      GBin.scrolled_window ~packing:(toplevelVBox#pack ~expand:false)
-        ~hpolicy:`AUTOMATIC ~vpolicy:`AUTOMATIC ()
-    in
-    GEdit.text ~editable:false ~height:(3 * charH) ~width: (96 * charW)
-      ~line_wrap:false ~packing:sw#add () in
-  detailsWindow#misc#set_can_focus false;
-  let style = detailsWindow#misc#style#copy in
-  style#set_font (Lazy.force fontMonospaceMedium);
-  detailsWindow#misc#set_style style;
-  let updateButtons () =
-    match !current with
-      None ->
-        grSet grAction false;
-        grSet grDiff false
-    | Some row ->
-        let (activate1, activate2) =
-          match !theState.(row).whatHappened, !theState.(row).ri.replicas with
-            Some _, _                                    -> (false, false)
-          | None,   Different((FILE,_, _),(FILE,_, _),_) -> (true, true)
-          | None,   _                                    -> (true, false)
-        in
-        grSet grAction activate1;
-        grSet grDiff activate2
-  in
-
-  let makeRowVisible row =
-    if mainWindow#row_is_visible row <> `FULL then begin
-      let adj = mainWindow#vadjustment in
-      let current = adj#value
-      and upper = adj#upper and lower = adj#lower in
-      let v =
-        float row /. float (mainWindow#rows + 1) *. (upper-.lower) +. lower
-      in
-      adj#set_value (min v (upper -. adj#page_size))
-    end
-  in
-
-  let updateDetails () =
-    detailsWindow#freeze ();
-    detailsWindow#delete_text ~start:0 ~stop:detailsWindow#length;
-    begin match !current with
-      None ->
-        ()
-    | Some row ->
-        makeRowVisible row;
-        let details =
-          match !theState.(row).whatHappened with
-            None -> details2string !theState.(row).ri "  "
-          | Some(Succeeded(_)) -> details2string !theState.(row).ri "  "
-          | Some(Failed(s)) -> s in
-        detailsWindow#insert (path2string !theState.(row).ri.path);
-        detailsWindow#insert "\n";
-        detailsWindow#insert details
-    end;
-    (* Display text *)
-    detailsWindow#thaw ();
-    updateButtons ()
-  in
-
-  (**********************************************************************)
-  (*                       CREATE THE STATUS WINDOW                     *)
-  (**********************************************************************)
-
-  let statusWindow =
-    GMisc.statusbar ~packing:toplevelVBox#pack () in
-  let statusContext = statusWindow#new_context ~name:"status" in
-  ignore (statusContext#push "");
-
-  let displayStatus s1 s2 =
-    Threads.do_on_main_thread (fun () ->
-      (* Concatenate the new message *)
-      let m =
-        s1 ^ (String.make (max 2 (30 - String.length s1)) ' ') ^ s2 in
-      statusContext#pop ();
-      ignore (statusContext#push m);
-      (* Force message to be displayed immediately *)
-      gtk_sync ())
-  in
-
-  (* Tell the Trace module about the status printer *)
-  Trace.statusPrinter := Some displayStatus;
-
-  (**********************************************************************)
-  (*            FUNCTIONS USED TO PRINT IN THE MAIN WINDOW              *)
-  (**********************************************************************)
-
-  let select i =
-    let r = mainWindow#rows in
-    let p = if r < 2 then 0. else (float i +. 0.5) /. float (r - 1) in
-    mainWindow#scroll_vertical `JUMP (min p 1.)
-  in
-
-  ignore (mainWindow#connect#unselect_row ~callback:
-      (fun ~row ~column ~event -> current := None; updateDetails ()));
-  ignore (mainWindow#connect#select_row ~callback:
-      (fun ~row ~column ~event -> current := Some row; updateDetails ()));
-
-  let nextInteresting () =
-    let l = Array.length !theState in
-    let start = match !current with Some i -> i + 1 | None -> 0 in
-    let rec loop i =
-      if i < l then
-        match !theState.(i).ri.replicas with
-          Different (_, _, dir)
-              when not (Prefs.readPref auto) || !dir = Conflict ->
-            select i
-        | _ ->
-            loop (i + 1)
-    in
-    loop start
-  in
-  let selectSomethingIfPossible () =
-    if !current=None then nextInteresting ()
-  in
-
-  let columnsOf i =
-    let oldPath = if i = 0 then emptypath else !theState.(i-1).ri.path in
-    let status =
-      match !theState.(i).whatHappened with
-        None -> "      "
-      | Some conf ->
-          match !theState.(i).ri.replicas with
-            Different(_,_,{contents=Conflict}) | Problem _ ->
-              "      "
-          | _ ->
-              match conf with
-                Succeeded _ -> "done  "
-              | Failed _    -> "failed"
-    in
-    let s = reconItem2string oldPath !theState.(i).ri status in
-    (* FIX: This is ugly *)
-    (String.sub s ~pos:0 ~len:8,
-     String.sub s ~pos:9 ~len:5,
-     String.sub s ~pos:15 ~len:8,
-     String.sub s ~pos:25 ~len:6,
-     String.sub s ~pos:32 ~len:(String.length s - 32))
-  in
-
-  let rightArrow =
-    GDraw.pixmap_from_xpm_d ~window:toplevelWindow ~data:Pixmaps.copyAB () in
-  let leftArrow =
-    GDraw.pixmap_from_xpm_d ~window:toplevelWindow ~data:Pixmaps.copyBA () in
-  let rightArrowBlack =
-    GDraw.pixmap_from_xpm_d
-      ~window:toplevelWindow ~data:Pixmaps.copyABblack () in
-  let leftArrowBlack =
-    GDraw.pixmap_from_xpm_d
-      ~window:toplevelWindow ~data:Pixmaps.copyBAblack () in
-  let ignoreAct =
-    GDraw.pixmap_from_xpm_d ~window:toplevelWindow ~data:Pixmaps.ignore () in
-  let doneIcon = 
-    GDraw.pixmap_from_xpm_d ~window:toplevelWindow ~data:Pixmaps.success () in
-  let failedIcon = 
-    GDraw.pixmap_from_xpm_d ~window:toplevelWindow ~data:Pixmaps.failure () in
-
-  let displayArrow i action =
-    match action with
-      "<-?->" -> mainWindow#set_cell ~pixmap:ignoreAct i 1
-    | "---->" -> mainWindow#set_cell ~pixmap:rightArrow i 1
-    | "<----" -> mainWindow#set_cell ~pixmap:leftArrow i 1
-    | "error" -> mainWindow#set_cell ~pixmap:failedIcon i 1
-    |    _    -> assert false
-  in
-
-  let displayStatusIcon i status =
-    match status with
-    | "failed" -> mainWindow#set_cell ~pixmap:failedIcon i 3
-    | "done  " -> mainWindow#set_cell ~pixmap:doneIcon i 3
-    | _        -> mainWindow#set_cell ~text:status i 3
-  in
-
-  let displayMain() =
-    mainWindow#freeze ();
-    mainWindow#clear ();
-    for i = 0 to Array.length !theState - 1 do
-      let (r1, action, r2, status, path) = columnsOf i in
-      ignore (mainWindow#append [ r1; ""; r2; status; path ]);
-      displayArrow i action
-    done;
-    selectSomethingIfPossible ();
-    begin match !current with Some idx -> select idx | None -> () end;
-    mainWindow#thaw ();
-    updateDetails ()
-  in
-
-  let redisplay i =
-    let (r1, action, r2, status, path) = columnsOf i in
-    mainWindow#freeze ();
-    mainWindow#set_cell ~text:r1     i 0;
-    displayArrow i action;
-    mainWindow#set_cell ~text:r2     i 2;
-    displayStatusIcon i status;
-    mainWindow#set_cell ~text:path   i 4;
-    if status = " failed " then mainWindow#set_row ~foreground:(`NAME"red") i;
-    mainWindow#thaw ();
-    if !current = Some i then updateDetails ();
-    updateButtons ()
-  in
-
-  let showProgress i bytes =
-    !theState.(i).bytesTransferred <- !theState.(i).bytesTransferred + bytes;
-    let b = !theState.(i).bytesTransferred in
-    let len = Common.riLength !theState.(i).ri in
-    let newstatus =
-      if b=0 || len = 0 then "working "
-      else if len = 0 then sprintf "%8d" b 
-      else
-        let percentage = (int_of_float ((float b) *. 100.0 /. (float len))) in
-        if percentage > 100 then
-          debugprogress (fun() -> errmsg "Progress amount miscalculated for %s\n"
-                                    (path2string (!theState.(i).ri.path)));
-        sprintf "  %3d%%  " (max 100 percentage) in
-    Threads.do_on_main_thread (fun () ->
-      mainWindow#set_cell ~text:newstatus i 3;
-      gtk_sync ())
-  in
-
-  (* Install showProgress so that we get called back by low-level
-     file transfer stuff *)
-  Util.progressPrinter := Some(showProgress);
-
-  (* Apply new ignore patterns to the current state, expecting that the
-     number of reconitems will grow smaller. Adjust the display, being
-     careful to keep the cursor as near as possible to its position
-     before the new ignore patterns take effect. *)
-  let ignoreAndRedisplay () =
-    let lst = Array.to_list !theState in
-    (* FIX: we should actually test whether any prefix is now ignored *)
-    let keep sI = not (Pred.test Globals.ignore (path2string sI.ri.path)) in
-    begin match !current with
-      None ->
-        theState := Array.of_list (Safelist.filter keep lst)
-    | Some index ->
-        let i = ref index in
-        let l = ref [] in
-        Array.iteri
-          (fun j sI -> if keep sI then l := sI::!l
-                       else if j < !i then decr i)
-          !theState;
-        current := if !l = [] then None else Some !i;
-        theState := Array.of_list (Safelist.rev !l)
-    end;
-    displayMain();
-  in
-  
-  (**********************************************************************)
-  (*                         FUNCTION DETECT UPDATES                    *)
-  (**********************************************************************)
-
-  let detectUpdatesAndReconcile () =
-    grSet grAction false;
-    grSet grDiff false;
-    grSet grProceed false;
-    grSet grRestart false;
-
-    let (r1,r2) = Globals.getReplicaRoots () in
-    let t = Trace.startTimer "Checking for updates" in
-    let findUpdates () =
-      let updates = Update.findUpdates () in
-      Trace.showTimer t;
-      updates
-    in
-    let reconcile updates =
-      let t = Trace.startTimer "Reconciling" in
-      Recon.reconcileAll updates
-    in
-    let reconItemList = reconcile (findUpdates ()) in
-    Trace.showTimer t;
-    if reconItemList = [] then
-      Trace.status "Everything is up to date"
-    else
-      Trace.status ("Check and/or adjust selected actions; "
-                    ^ "then press Proceed");
-    theState :=
-      Array.of_list
-         (Safelist.map
-            (fun ri -> { ri = ri; bytesTransferred = 0; whatHappened = None })
-            reconItemList);
-    current := None;
-    displayMain();
-    grSet grProceed (Array.length !theState > 0);
-    grSet grRestart true
-  in
-
-  (**********************************************************************)
-  (* The ignore dialog                                                  *)
-  (**********************************************************************)
-
-  let ignoreDialog () =
-    let t = GWindow.dialog ~title: "Ignore" ~wm_name: "Ignore" () in
-    let hbox = GPack.hbox ~packing:t#vbox#add () in
-    let sb = GRange.scrollbar `VERTICAL
-        ~packing:(hbox#pack ~from:`END) () in
-    let regExpWindow =
-      GList.clist ~columns:1 ~titles_show:false ~packing:hbox#add
-        ~vadjustment:sb#adjustment ~width:400 ~height:150 () in
-    
-    (* Local copy of the regular expressions; the global copy will
-       not be changed until the Apply button is pressed *)
-    let theRegexps = Pred.extern Globals.ignore in
-    Safelist.iter (fun r -> ignore (regExpWindow#append [r])) theRegexps;
-    let maybeGettingBigger = ref false in
-    let maybeGettingSmaller = ref false in
-    let selectedRow = ref None in
-    ignore
-      (regExpWindow#connect#select_row ~callback:
-         (fun ~row ~column ~event -> selectedRow := Some row));
-    ignore
-      (regExpWindow#connect#unselect_row ~callback:
-         (fun ~row ~column ~event -> selectedRow := None));
-    
-    (* Configure the add frame *)
-    let hbox = GPack.hbox ~spacing:4 ~packing:t#vbox#pack () in
-    ignore (GMisc.label ~text: "Regular expression:"
-              ~packing:(hbox#pack ~padding:2) ());
-    let entry = GEdit.entry ~packing:hbox#add () in
-    let add () =
-      let theRegExp = entry#text in
-      if theRegExp<>"" then begin
-        entry#set_text "";
-        regExpWindow#unselect_all ();
-        ignore (regExpWindow#append [theRegExp]);
-        maybeGettingSmaller := true
-      end
-    in
-    let addButton = GButton.button ~label:"Add"
-        ~packing:hbox#pack () in
-    ignore (addButton#connect#clicked ~callback:add);
-    ignore (entry#connect#activate ~callback:add);
-    entry#misc#grab_focus ();
-    
-    (* Configure the delete button *)
-    let delete () =
-      match !selectedRow with
-        Some x ->
-          (* After a deletion, updates must be detected again *)
-          maybeGettingBigger := true;
-          (* Delete xth regexp *)
-          regExpWindow#unselect_all ();
-          regExpWindow#remove ~row:x
-      | None ->
-          ()
-    in
-    let deleteButton = GButton.button ~label:"Delete"
-        ~packing:hbox#pack () in
-    ignore (deleteButton#connect#clicked ~callback:delete);
-    
-    ignore
-      (regExpWindow#event#connect#after#key_press ~callback:
-         begin fun ev ->
-           let key = GdkEvent.Key.keyval ev in
-           if key = _Up || key = _Down || key = _Prior || key = _Next ||
-           key = _Page_Up || key = _Page_Down then begin
-             regExpWindow#select (regExpWindow#focus_row) 0;
-             true
-           end else if key = _Delete then begin
-             delete (); true
-           end else
-             false
-         end);
-    
-    (* A function to refresh the state and ignore list *)
-    let refresh () =
-      let theRegexps = ref [] in
-      for i = regExpWindow#rows - 1 downto 0 do
-        theRegexps := regExpWindow#cell_text i 0 :: !theRegexps
-      done;
-      Pred.intern Globals.ignore (!theRegexps);
-      if !maybeGettingBigger || !maybeGettingSmaller then begin
-        Globals.savePrefs();
-        Globals.propagatePrefs()
-      end;
-      if !maybeGettingBigger then detectUpdatesAndReconcile ()
-      else if !maybeGettingSmaller then ignoreAndRedisplay();
-      maybeGettingBigger := false;
-      maybeGettingSmaller := false;
-    in
-    
-    (* Install the main buttons *)
-    let applyButton =
-      GButton.button ~label:"Apply" ~packing:t#action_area#add () in
-    ignore (applyButton#connect#clicked ~callback:refresh);
-    let cancelButton =
-      GButton.button ~label:"Cancel" ~packing:t#action_area#add () in
-    ignore (cancelButton#connect#clicked ~callback:(t#destroy));
-    let okButton =
-      GButton.button ~label:"OK" ~packing:t#action_area#add () in
-    ignore
-      (okButton#connect#clicked
-         ~callback:(fun () -> refresh (); t#destroy ()));
-    ignore (t#connect#destroy ~callback:Main.quit);
-    grabFocus t;
-    t#show ();
-    Main.main ();
-    releaseFocus ()
-  in
-
-  (**********************************************************************)
-  (* Add entries to the Help menu                                       *)
-  (**********************************************************************)
-  let addDocSection (shortname, (name, docstr)) =
-    if shortname <> "" && name <> "" then
-      ignore (helpMenu#add_item
-               ~callback:(fun () -> documentation shortname)
-                name)
-  in
-  Safelist.iter addDocSection Strings.docs;
-
-  (**********************************************************************)
-  (* Add entries to the Ignore menu                                     *)
-  (**********************************************************************)
-  let addRegExpByPath pathfunc =
-    match !current with
-      Some i ->
-        addIgnorePattern (pathfunc !theState.(i).ri.path);
-        ignoreAndRedisplay ()
-    | None ->
-        ()
-  in
-  grAdd grAction
-    (ignoreMenu#add_item ~key:_i
-       ~callback:(fun () -> getLock (fun () -> addRegExpByPath ignorePath))
-       "Ignore this file permanently");
-  grAdd grAction
-    (ignoreMenu#add_item ~key:_E
-       ~callback:(fun () -> getLock (fun () -> addRegExpByPath ignoreExt))
-       "Ignore files with this extension");
-  grAdd grAction
-    (ignoreMenu#add_item ~key:_N
-       ~callback:(fun () -> getLock (fun () -> addRegExpByPath ignoreName))
-       "Ignore files with this name");
-
-(*
-  grAdd grRestart
-    (ignoreMenu#add_item ~callback:
-       (fun () -> getLock ignoreDialog) "Edit ignore patterns");
-*)
-
-  (**********************************************************************)
-  (*                       MAIN FUNCTION : SYNCHRONIZE                  *)
-  (**********************************************************************)
-  let synchronize () =
-    if Array.length !theState = 0 then
-      Trace.status "Nothing to synchronize"
-    else begin
-      grSet grAction false;
-      grSet grDiff false;
-      grSet grProceed false;
-      grSet grRestart false;
-
-      Trace.status "Propagating changes";
-      let t = Trace.startTimer "Propagating changes" in
-      let (start, wait) = Threads.thread_maker () in
-      let background = let i = 55000 in `RGB (i, i, i) in
-      let finish i =
-        redisplay i;
-        mainWindow#set_row ~background:`WHITE i;
-        gtk_sync ()
-      in
-      for i = 0 to Array.length !theState - 1 do
-        let theSI = !theState.(i) in
-        assert (theSI.whatHappened = None);
-        start
-          (fun () ->
-             Threads.do_on_main_thread (fun () ->
-               mainWindow#set_row ~background i;
-               makeRowVisible i);
-             theSI.whatHappened <- Some (Transport.transportItem theSI.ri i);
-             i)
-          finish
-      done;
-      wait finish;
-      
-      Trace.showTimer t;
-      Trace.status "Updating synchronizer state";
-      let t = Trace.startTimer "Updating synchronizer state" in
-      Update.commitUpdates();
-      Trace.showTimer t;
-      Trace.status "Synchronization complete";
-
-      grSet grRestart true
-    end
-  in
-
-  (**********************************************************************)
-  (*                  CREATE THE ACTION BAR                             *)
-  (**********************************************************************)
-  let actionBar =
-    GButton.toolbar
-      ~orientation:`HORIZONTAL ~tooltips:true ~space_size:10
-      ~packing:toplevelVBox#pack () in
-
-  (**********************************************************************)
-  (*         CREATE AND CONFIGURE THE QUIT BUTTON                       *)
-  (**********************************************************************)
-  actionBar#insert_space ();
-  ignore (actionBar#insert_button ~text:"Quit" ~callback:safeExit ());
-
-  (**********************************************************************)
-  (*         CREATE AND CONFIGURE THE PROCEED BUTTON                    *)
-  (**********************************************************************)
-  actionBar#insert_space ();
-  grAdd grProceed
-    (actionBar#insert_button ~text:"Proceed"
-       (* tooltip:"Proceed with displayed actions" *)
-       ~callback:(fun () ->
-                    getLock synchronize) ());
-
-  (**********************************************************************)
-  (*           CREATE AND CONFIGURE THE RESCAN BUTTON                   *)
-  (**********************************************************************)
-  let detectCmdName = "Restart" in
-  let detectCmd () =
-    getLock detectUpdatesAndReconcile;
-    if Prefs.readPref batch then begin
-      Prefs.setPref batch Prefs.TempSetting false; synchronize()
-    end
-  in
-  actionBar#insert_space ();
-  grAdd grRestart
-    (actionBar#insert_button ~text:detectCmdName ~callback:detectCmd ());
-
-  (**********************************************************************)
-  (* Buttons for <--, -->, Skip                                         *)
-  (**********************************************************************)
-  let doAction f =
-    match !current with
-      Some i ->
-        let theSI = !theState.(i) in
-        begin match theSI.whatHappened, theSI.ri.replicas with
-          None, Different(_, _, dir) ->
-            f dir;
-            redisplay i;
-            nextInteresting ()
-        | _ ->
-            ()
-        end
-    | None ->
-        ()
-  in
-  let leftAction     _ = doAction (fun dir -> dir := Replica2ToReplica1) in
-  let rightAction    _ = doAction (fun dir -> dir := Replica1ToReplica2) in
-  let questionAction _ = doAction (fun dir -> dir := Conflict) in
-
-  (**********************************************************************)
-  (*             CREATE AND CONFIGURE THE DIFF BUTTON and KEY           *)
-  (**********************************************************************)
-  let diffCmd () =
-    match !current with
-      Some i ->
-        getLock (fun () ->
-          showDiffs !theState.(i).ri
-            (fun title text -> messageBox ~title text)
-            Trace.status i)
-    | None ->
-        ()
-  in
-
-  actionBar#insert_space ();
-  grAdd grAction
-    (actionBar#insert_button
-       ~icon:((GMisc.pixmap leftArrowBlack ())#coerce)
-       ~callback:leftAction ());
-  actionBar#insert_space ();
-  grAdd grAction
-    (actionBar#insert_button
-       ~icon:((GMisc.pixmap rightArrowBlack ())#coerce)
-       ~callback:rightAction ());
-  actionBar#insert_space ();
-  grAdd grAction
-    (actionBar#insert_button ~text:"Skip" ~callback:questionAction ());
-  actionBar#insert_space ();
-  grAdd grDiff (actionBar#insert_button ~text:"Diff" ~callback:diffCmd ());
-
-  (**********************************************************************)
-  (* Configure keyboard commands                                        *)
-  (**********************************************************************)
-  ignore
-    (mainWindow#event#connect#key_press ~callback:
-       begin fun ev ->
-         let key = GdkEvent.Key.keyval ev in
-         if key = _Left then begin
-           leftAction (); GtkSignal.stop_emit (); true
-         end else if key = _Right then begin
-           rightAction (); GtkSignal.stop_emit (); true
-         end else
-           false
-       end);
-
-  (**********************************************************************)
-  (* Add entries to the Action menu                                     *)
-  (**********************************************************************)
-  let (root1,root2) = Globals.getReplicaRoots () in
-  let loc1 = root2hostname root1 in
-  let loc2 = root2hostname root2 in
-  let descr =
-    if loc1 = loc2 then "left to right" else
-    Printf.sprintf "from %s to %s" loc1 loc2
-  in
-  let left =
-    actionsMenu#add_item ~key:_greater ~callback:rightAction
-      ("Propagate " ^ descr) in
-  grAdd grAction left;
-  left#add_accelerator ~group:accel_group ~modi:[`SHIFT] _greater;
-  
-  let descl =
-    if loc1 = loc2 then "right to left" else
-    Printf.sprintf "from %s to %s" loc2 loc1
-  in
-  let right =
-    actionsMenu#add_item ~key:_less ~callback:leftAction
-      ("Propagate " ^ descl) in
-  grAdd grAction right;
-  right#add_accelerator ~group:accel_group ~modi:[`SHIFT] _less;
-  grAdd grAction
-    (actionsMenu#add_item ~key:_slash ~callback:questionAction
-       "Do not propagate changes");
-
-  ignore (actionsMenu#add_separator ());
-  grAdd grDiff (actionsMenu#add_item ~key:_d ~callback:diffCmd "Show diffs");
-
-  (**********************************************************************)
-  (* Add commands to the Synchronization menu                           *)
-  (**********************************************************************)
-  grAdd grProceed
-    (fileMenu#add_item ~key:_g
-       ~callback:(fun () ->
-                    getLock synchronize)
-       "Proceed");
-  grAdd grRestart (fileMenu#add_item ~key:_r ~callback:detectCmd detectCmdName);
-  grAdd grRestart
-    (fileMenu#add_item ~key:_a
-       ~callback:(fun () ->
-                    getLock detectUpdatesAndReconcile; 
-                    getLock synchronize)
-       "Atomically detect updates and proceed");
-  ignore (fileMenu#add_separator ());
-  let cm =
-    fileMenu#add_check_item ~active:(Prefs.readPref Transport.backups)
-      ~callback:(fun b -> Prefs.setPref Transport.backups Prefs.TempSetting b)
-      "Make backups"
-  in
-  cm#set_show_toggle true;
-  grAdd grRestart cm;
-  ignore (fileMenu#add_separator ());
-  ignore (fileMenu#add_item ~key:_q ~callback:safeExit "Quit");
-
-  grSet grAction false;
-  grSet grDiff false;
-  grSet grProceed false;
-  grSet grRestart false;
-
-  ignore (toplevelWindow#event#connect#delete ~callback:
-            (fun _ -> safeExit (); true));
-  toplevelWindow#show ();
-  currentWindow := Some toplevelWindow;
-  detectCmd ()
-
-(**********************************************************************)
-(* Starting up...                                                     *)
-(**********************************************************************)
-let start _ =
-  begin try
-    (* Initialize the library *)
-    ignore (Main.init ());
-
-    Util.warnPrinter := Some (warnBox "Warning");
-    (* Ask the Remote module to call us back at regular intervals during
-       long network operations. *)
-    Threads.tickProc := Some gtk_sync;
-
-    (**********************************************************************)
-    (* Set things up to initialize the client/server connection and       *)
-    (* detect updates after the ui is displayed.                          *)
-    (* This makes a difference when the replicas are large and it takes   *)
-    (* a lot of time to detect updates.                                   *)
-    (**********************************************************************)
-    let msg = ref None in
-    Uicommon.uiInit
-      profileSelect
-      rootSelect
-      (fun () ->
-         let w =
-           GWindow.window ~kind:`TOPLEVEL ~position:`CENTER
-             ~wm_name:"Unison" ~border_width:16 () in
-         ignore (GMisc.label ~text: "Contacting server..."
-                   ~packing:(w#add) ());
-         w#show ();
-         ignore (w#event#connect#delete ~callback:(fun _ -> exit 0));
-         msg := Some w)
-      (fun () ->
-         begin match !msg with
-           None   -> ()
-         | Some w -> w#destroy ()
-         end;
-         createToplevelWindow ());
-
-    (**********************************************************************)
-    (* Display the ui                                                     *)
-    (**********************************************************************)
-    ignore (Timeout.add 500 (fun _ -> true));
-              (* Hack: this allows signals such as SIGINT to be
-                 handled even when Gtk is waiting for events *)
-    Main.main ()
-  with exn ->
-    fatalError (exn2string exn)
-  end
-
-end (* module Private *)
-
-(**********************************************************************)
-(*                               MODULE MAIN                          *)
-(**********************************************************************)
-
-module Body : Uicommon.UI = struct
-
-let start = function
-    Text -> Uitext.Body.start Text
-  | Graphic -> Private.start Graphic
-
-end (* module Body *)
-
-(*
-FIX:
-- Ã‰dition (minimale) et création des profiles
-- Profile par défaut
-- Sanity checks pour "Root selection"
-- Edition du filtrage
-*)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/config.make.nt b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/config.make.nt
deleted file mode 100644 (file)
index 3fe6b56..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-LIBDIR=c:/Home/garrigue/ocaml/lib
-GTKCFLAGS=-I../glib -I../gtk+
-GTKSRC=c:\Home\garrigue
-GTKLIBS=$(GTKSRC)/glib/gmodule-1.3.lib $(GTKSRC)/glib/glib-1.3.lib $(GTKSRC)/gtk+/gdk/gdk-1.3.lib $(GTKSRC)/gtk+/gtk/gtk-1.3.lib
-USE_GL=0
-USE_CC=0
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/configure.mk b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/configure.mk
deleted file mode 100644 (file)
index 49b3d70..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# makefile for configuring lablGTK
-
-# Default compilers
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-
-# Default installation directories
-BINDIR = `$(GETBINDIR)`
-INSTALLDIR = $(LIBDIR)/lablgtk
-
-# Autoconf
-GETLIBDIR = ocamlc -v | grep "^Standard" | sed 's/^.*: *//'
-LIBDIR = `$(GETLIBDIR)`
-GETBINDIR = $(GETLIBDIR) | sed -e 's|/lib/[^/]*$$|/bin|' -e 's|/lib$$|/bin|'
-GETRANLIB = which ranlib 2>/dev/null | sed -e 's|.*/ranlib$$|!|' -e 's/^[^!]*$$/:/' -e 's/!/ranlib/'
-
-ifdef USE_GNOME
-GTKGETCFLAGS = gtk-config --cflags`" -I"`gnome-config --includedir
-GNOMELIBS = `gnome-config --libs gtkxmhtml`
-else
-GTKGETCFLAGS = gtk-config --cflags
-endif
-
-GTKGETLIBS = gtk-config --libs
-
-configure: .depend config.make
-
-.depend:
-       ocamldep *.ml *.mli > .depend
-
-config.make:
-       @echo CAMLC=$(CAMLC) > config.make
-       @echo CAMLOPT=$(CAMLOPT) >> config.make
-       @echo USE_GL=$(USE_GL) >> config.make
-       @echo USE_GNOME=$(USE_GNOME) >> config.make
-       @echo USE_CC=$(USE_CC) >> config.make
-       @echo DEBUG=$(DEBUG) >> config.make
-       @echo CC=$(CC) >> config.make
-       @echo RANLIB=`$(GETRANLIB)` >> config.make
-       @echo LIBDIR=$(LIBDIR) >> config.make
-       @echo BINDIR=`$(GETBINDIR)` >> config.make
-       @echo INSTALLDIR=$(INSTALLDIR) >> config.make
-       @echo GTKCFLAGS=`$(GTKGETCFLAGS)` >> config.make
-       @echo GTKLIBS=`$(GTKGETLIBS)` | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-       @echo GNOMELIBS=$(GNOMELIBS) | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-       cat config.make
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/doc/formula.eps b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/doc/formula.eps
deleted file mode 100644 (file)
index 31ddafc..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Creator: dvipsk 5.78 p1.4c Copyright 1996-99 ASCII Corp.(www-ptex@ascii.co.jp)
-%%dvipsk 5.78 Copyright 1998 Radical Eye Software (www.radicaleye.com)
-%%Title: formula.dvi
-%%BoundingBox: 71 318 395 524
-%%DocumentFonts: Symbol Times-Italic Times-Roman Helvetica
-%%EndComments
-%DVIPSCommandLine: dvips -E -o formula.eps formula
-%DVIPSParameters: dpi=300, compressed
-%DVIPSSource:  TeX output 1999.08.19:0906
-%%BeginProcSet: texc.pro
-%!
-/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
-/X{S N}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{dup dup 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 /IE 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 IE N
-end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /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 dup definefont setfont}B /ch-width{ch-data dup
-length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
-128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
-get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
-dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
-/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
-/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
-0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
-setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
-.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
-/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
-gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
-add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
-/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
-dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
-adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
-idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
-putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
-adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
-{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
-adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
-chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
-}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
-length 1 sub dup 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 dup 1 get dup mul exch 0 get dup 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
-/IE 256 array N 2 string 0 1 255{IE S dup 360 add 36 4 index cvrs cvn
-put}for pop 65781.76 div /vsize X 65781.76 div /hsize X}N /dir 0 def
-/dyy{/dir 0 def}B /dyt{/dir 1 def}B /dty{/dir 2 def}B /dtt{/dir 3 def}B
-/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90
-rotate}{show}ifelse}ifelse}B /RMat[1 0 0 -1 0 0]N /BDot 260 string N
-/rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V{}B /RV statusdict
-begin /product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{dup
-length product length le{dup 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 rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR
--.1 .1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}
-ifelse B /QV{gsave newpath transform round exch round exch itransform
-moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto fill
-grestore}B /a{moveto}B /delta 0 N /tail{dup /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
-% @@psencodingfile@{
-%   author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
-%   version = "0.6",
-%   date = "22 June 1996",
-%   filename = "8r.enc",
-%   email = "kb@@mail.tug.org",
-%   address = "135 Center Hill Rd. // Plymouth, MA 02360",
-%   codetable = "ISO/ASCII",
-%   checksum = "119     662    4424",
-%   docstring = "Encoding for TrueType or Type 1 fonts to be used with TeX."
-% @}
-% 
-% 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 + 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.
-% 
-% (4) Remaining positions left undefined are for use in (hopefully)
-% upward-compatible revisions, if someday more characters are generally
-% available.
-% 
-% (5) hyphen appears twice for compatibility with both ASCII and Windows.
-% 
-/TeXBase1Encoding [
-% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
-  /.notdef /dotaccent /fi /fl
-  /fraction /hungarumlaut /Lslash /lslash
-  /ogonek /ring /.notdef
-  /breve /minus /.notdef 
-% These are the only two remaining unencoded characters, so may as
-% well include them.
-  /Zcaron /zcaron 
-% 0x10
- /caron /dotlessi 
-% (unusual TeX characters available in, e.g., Lucida Bright)
- /dotlessj /ff /ffi /ffl 
- /.notdef /.notdef /.notdef /.notdef
- /.notdef /.notdef /.notdef /.notdef
- % very contentious; it's so painful not having quoteleft and quoteright
- % at 96 and 145 that we move the things normally found there down to here.
- /grave /quotesingle 
-% 0x20 (ASCII begins)
- /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 % rubout; ASCII ends
-% 0x80
- /.notdef /.notdef /quotesinglbase /florin
- /quotedblbase /ellipsis /dagger /daggerdbl
- /circumflex /perthousand /Scaron /guilsinglleft
- /OE /.notdef /.notdef /.notdef
-% 0x90
- /.notdef /.notdef /.notdef /quotedblleft
- /quotedblright /bullet /endash /emdash
- /tilde /trademark /scaron /guilsinglright
- /oe /.notdef /.notdef /Ydieresis
-% 0xA0
- /.notdef % nobreakspace
- /exclamdown /cent /sterling
- /currency /yen /brokenbar /section
- /dieresis /copyright /ordfeminine /guillemotleft
- /logicalnot
- /hyphen % Y&Y (also at 45); Windows' softhyphen
- /registered
- /macron
-% 0xD0
- /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
-%!
-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]/Metrics
-exch def dict begin 0 1 255{exch dup type /integertype ne{pop pop 1 sub
-dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
-ifelse}for Metrics /Metrics currentdict end def[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{/Encoding exch def}def end
-
-%%EndProcSet
-%%BeginProcSet: special.pro
-%!
-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 /copypage{}N /p 3 def @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 /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
-%!
-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
-TeXDict begin 40258437 52099154 1000 300 300 (formula.dvi)
-@start /Fa 134[ 41 5[ 41 3[ 46 46 1[ 18 6[ 46 15[ 60
-4[ 55 14[ 55 23[ 28 28 40[{  TeXBase1Encoding ReEncodeFont } 11
-82.6359 /Helvetica rf /Fb 205[ 34 34 49[{
- TeXBase1Encoding ReEncodeFont } 2 68.8667 /Times-Roman
-rf /Fc 154[ 30 101[{ } 1 68.8667 /Symbol rf
-%DVIPSBitmapFont: Fd cmr10 19.907 4
-/Fd 4 94 df<146014E0EB01C0EB0380EB0700130E5B133C13385B13F05B1201485AA248
-5AA348C7FCA25A121EA2123EA2123CA2127CA5127812F8B01278127CA5123CA2123EA212
-1EA2121F7EA26C7EA36C7EA26C7E12007F13707F133C131C7F7FEB0380EB01C0EB00E014
-60135278BD20> 40 D<7E7E7E12707E7E7E120F7E6C7E7F12017F6C7EA21378A37FA213
-3E131EA2131FA27FA21480A5130714C0B01480130FA51400A25BA2131EA2133E133CA25B
-A35BA2485A5B12035B48C7FC5A120E5A5A5A5A5A5A12527BBD20> I<EAFFF8A4EAF000B3
-B3B3B3A3EAFFF8A40D5378BD17> 91 D<EAFFF8A4EA0078B3B3B3B3A3EAFFF8A40D537F
-BD17> 93 D E
-%EndDVIPSBitmapFont
-/Fe 197[ 23 58[{  TeXBase1Encoding ReEncodeFont } 1 82.6359
-/Times-Roman rf
-%DVIPSBitmapFont: Ff cmsy10 19.907 4
-/Ff 4 106 df<0060161800F0163CA26C167C00781678007C16F8003C16F0A2003E1501
-001E16E0A2001F15036C16C06D140700071680A26D140F000316006D5C6CB612FEA36C5D
-01F8C7127C01781478A2017C14F8013C5CA2013E1301011E5C011F13036D5CA2EC800701
-075CECC00F010391C7FCA26E5A0101131EECF03E0100133CA2ECF87CEC7878A2EC7CF8EC
-3CF0143F6E5AA36E5AA26E5AA26EC8FC2E3A80B82F> 56 D<126012F0B3A7B8FC1780A3
-00F0CAFCB3A8126029397CB832> 96 D<14C0EB01E0A2130314C013071480A2130F1400
-A25B131E133E133CA2137C137813F85BA212015BA212035B12075BA2120F90C7FC5A121E
-A2123E123CA2127C127812F85AA27E1278127C123CA2123E121EA2121F7E7F1207A27F12
-037F1201A27F1200A27F1378137C133CA2133E131E131F7FA214801307A214C0130314E0
-1301A2EB00C0135278BD20> 104 D<126012F0A27E1278127C123CA2123E121EA2121F7E
-7F1207A27F12037F1201A27F1200A27F1378137C133CA2133E131E131F7FA214801307A2
-14C0130314E01301A2130314C013071480A2130F1400A25B131E133E133CA2137C137813
-F85BA212015BA212035B12075BA2120F90C7FC5A121EA2123E123CA2127C127812F85AA2
-126013527CBD20> I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg cmmi10 19.907 1
-/Fg 1 59 df<121C123E127FEAFF80A3EA7F00123E121C0909798817> 58
-D E
-%EndDVIPSBitmapFont
-/Fh 158[ 41 31[ 50 65[{  TeXBase1Encoding ReEncodeFont } 2
-82.6359 /Times-Italic rf /Fi 139[ 36 50 13[ 36 101[{ } 3
-82.6359 /Symbol rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 300dpi
-TeXDict begin
-
-%%EndSetup
-0 0 bop Black Black 0 0.7 0 TeXcolorrgb Fh 567 883 a(A) p
-Ff 636 883 a(`) p Fh 705 883 a(a) p Fe 765 883 a(:) p
-0 0 1 TeXcolorrgb Fi 806 883 a(t) p Fb 842 900 a(1) p
-0 0.7 0 TeXcolorrgb Fd 948 883 a(\() p 0 0 1 TeXcolorrgb
-Fi(t) p Fb 1016 900 a(1) p 0 0.7 0 TeXcolorrgb Fe 1071
-883 a(:) p 0 0 1 TeXcolorrgb Fi 1112 883 a(t) p 0 0.7 0
-TeXcolorrgb Fe 1167 883 a(:) p 0 0 1 TeXcolorrgb Fi 1208
-883 a(t) p Fb 1244 900 a(2) p 0 0.7 0 TeXcolorrgb Fd
-1281 883 a(\)) p 567 920 746 4 v Fh 704 995 a(A) p Ff
-773 995 a(`) p Fd 842 995 a(\() p Fh(a) p Fe 934 995
-a(:) p 0 0 1 TeXcolorrgb Fi 975 995 a(t) p 0 0.7 0 TeXcolorrgb
-Fd(\)) p Fe 1062 995 a(:) p 0 0 1 TeXcolorrgb Fi 1103
-995 a(t) p Fb 1139 1012 a(2) p 0 0.7 0 TeXcolorrgb Black
-Fa 2 939 a(\(Ann\)) p 0 0.7 0 TeXcolorrgb Black 0 0.7 0
-TeXcolorrgb Fh 540 1208 a(A) p Ff 609 1208 a(`) p Fh
-678 1208 a(a) p Fe 738 1208 a(:) p 0 0 1 TeXcolorrgb
-Fi 779 1208 a(s) p Fb 829 1225 a(1) p 0 0.7 0 TeXcolorrgb
-Fd 934 1208 a(\() p 0 0 1 TeXcolorrgb Fi(s) p Fb 1016
-1225 a(1) p 0 0.7 0 TeXcolorrgb Fe 1071 1208 a(:) p 0 0 1
-TeXcolorrgb Fi 1112 1208 a(s) p 0 0.7 0 TeXcolorrgb Fe
-1180 1208 a(:) p 0 0 1 TeXcolorrgb Fi 1222 1208 a(s) p
-Fb 1272 1225 a(2) p 0 0.7 0 TeXcolorrgb Fd 1308 1208
-a(\)) p 540 1245 801 4 v Fh 661 1321 a(A) p Ff 730 1321
-a(`) p Fd 799 1321 a([) p Fh(a) p Fe 881 1321 a(:) p
-0 0 1 TeXcolorrgb Fi 923 1321 a(s) p 0 0.7 0 TeXcolorrgb
-Fd 972 1321 a(]) p Fe 1014 1321 a(:) p 0 0 1 TeXcolorrgb
-Fd 1055 1321 a([) p Fi(s) p Fb 1128 1338 a(2) p Fd 1164
-1321 a(]) p Fc 1187 1297 a(e) p 0 0.7 0 TeXcolorrgb Black
-Fa 2 1264 a(\(P) l(oly\)) p 0 0.7 0 TeXcolorrgb Black
-0 0.7 0 TeXcolorrgb Fh 704 1537 a(A) p Ff 773 1537 a(`) p
-Fh 842 1537 a(a) p Fe 902 1537 a(:) p 0 0 1 TeXcolorrgb
-Ff 943 1537 a(8) p Fi(e) p Fg(:) p Fd([) p Fi(s) p Fd(]) p
-Fc 1145 1507 a(e) p 0 0.7 0 TeXcolorrgb 704 1573 472
-4 v Fh 764 1649 a(A) p Ff 833 1649 a(`) p 902 1649 a(h) p
-Fh(a) p Ff(i) p Fe 1025 1649 a(:) p 0 0 1 TeXcolorrgb
-Fi 1067 1649 a(s) p 0 0.7 0 TeXcolorrgb Black Fa 2 1592
-a(\(Use\)) p 0 0.7 0 TeXcolorrgb Black Black Black 90 rotate
-dyy eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/doc/lablgtk.mgp b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/doc/lablgtk.mgp
deleted file mode 100644 (file)
index 3eac793..0000000
+++ /dev/null
@@ -1,558 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%deffont "code" xfont "itc avant garde gothic-demi-r", tfont "verdana.ttf"
-%deffont "code-bold" xfont "terminal-bold-r", tfont "verdanab.ttf"
-%deffont "sans" xfont "helvetica-medium-r", tfont "comic.ttf"
-%deffont "sans-bold" xfont "helvetica-bold-r", tfont "comicbd.ttf"
-%deffont "sansit" xfont "helvetica-medium-i", tfont "marlett.ttf"
-%deffont "title" xfont "times-medium-r", tfont "times.ttf"
-%deffont "title-bold" xfont "times-bold-r", tfont "timesbd.ttf"
-%default 1 right, size 2, fore "white", bgrad
-%default 1 vfont "goth", font "sans-bold", vgap 100
-%default 2 leftfill, size 8, vgap 60, prefix " ", font "sans"
-%default 3 size 4, bar "beige", vgap 10
-%default 4 size 5, fore "white", vgap 20, prefix " "
-%tab 1 size 5, vgap 40, prefix "  ", icon box "green" 50
-%tab 2 size 5, vgap 40, prefix "      ", icon arc "yellow" 50
-%tab 3 size 5, vgap 40, prefix "            ", icon arc "white" 40
-%tab com1      size 4, prefix "     "
-%tab com2      size 4, prefix "          "
-%tab com3      size 4, prefix "             "
-%tab txt       font "sans", size 5, fore "white", prefix " "
-%tab vspace    size 2
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-%nodefault
-%size 9, font "title-bold"
-%fore "beige", back "navyblue", vgap 20
-%center
-
-
-A Type System in Action:
-
-the LablGTK Interface
-
-
-%size 7, font "title"
-Jacques Garrigue
-Kyoto University
-%size 6, font "code"
-garrigue@kurims.kyoto-u.ac.jp
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-2
-Synopsis
-
-       Objective Label introduction
-%size 2
-
-       Why GTK+?
-       GTK+/LablGTK structure
-%size 2
-
-       Low Level
-               Type encoding with variants
-               Labeled parameters
-%size 2
-
-       High Level
-               Object-orientation
-               Optional arguments
-               Polymorphic methods
-%size 2
-
-       Conclusion
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-3
-Objective Label
-
-       Based on Objective Caml
-               ML syntax and type inference
-               Class-based object system
-
-       Several extensions
-               Labeled and optional parameters
-               Polymorphic variants
-               Polymorphic methods
-
-       Tools
-               Type-based browser
-               GUI and 3D graphics
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-4
-Labels and optionals
-
-%font "code", size 4, prefix "    ", fore "yellow"
-let rec map fun:f = function
-    [] -> []
-  | x :: l -> f x :: map fun:f l
-%fore "lightpink"
-val map : fun:('a -> 'b) -> 'a list -> 'b list
-
-%pause, fore "yellow", font "code"
-let f = map [1;2;3]
-%fore "lightpink"
-val f : fun:(int -> 'a) -> 'a list
-%fore "yellow"
-f fun:(fun x -> 2*x)
-%fore "lightpink"
-- : int list = [2; 3; 4]
-
-%pause, fore "yellow", font "code"
-let f x ?incr:y [< 1 >] = x + y
-%fore "lightpink"
-val f : int -> ?incr:int -> int
-%fore "yellow"
-f 1
-%fore "lightpink"
-- : int = 2
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-5
-Polymorphic variants
-
-
-%font "code", size 4, prefix "    ", fore "yellow"
-[`on; `off]
-%fore "lightpink"
-- : [> off on] list = [`on; `off]
-
-%pause, fore "yellow", font "code"
-`number 1;;
-%fore "lightpink"
-- : [> number(int)] = `number 1
-
-%pause, fore "yellow", font "code"
-let f = function `on -> 1 | `off -> 0 | `number n -> n
-%fore "lightpink"
-val f : [< number(int) off on] -> int
-
-%pause, fore "yellow", font "code"
-type t = [on off number(int)]
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-6
-Polymorphic methods
-
-Not allowed in Objective Caml
-%size 2
-
-%font "code", size 4, prefix "    ", fore "yellow"
-class c = object method m x = x end
-%fore "red"
-Some type variables are unbound in this type:
-  class c : object method m : 'a -> 'a end
-The method m has type 'a -> 'a where 'a is unbound
-
-%pause, font "sans", size 5, prefix " ", fore "white"
-Need explicit annotation in O'Labl
-%size 2
-
-%font "code", size 4, prefix "    ", fore "yellow"
-class c = object
-    method m : 'a. 'a -> 'a = fun x -> x
-end
-%fore "lightpink"
-class c : object method m : 'a -> 'a end
-%fore "yellow"
-let o = new c
-%fore "lightpink"
-val o : c = <obj>
-%fore "yellow"
-o#m 1, o#m true
-%fore "lightpink"
-- : int * bool = 1, true
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-7
-Why GTK+ ?
-
-Why use the GIMP Tool Kit?
-%size 3
-
-       Widely used in free software
-
-       Easy to interface
-               Written in C (QT uses C++)
-               Memory management
-
-Drawbacks
-%size 3
-
-       Design lacks uniformity
-       Extensive use of dynamic typing
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-8
-GTK+ Structure
-
-Class hierarchy based on GtkObject
-%size 2
-
-       Single inheritance
-&com1 New widgets may redefine methods
-%size 2
-
-       Dynamically checked
-&com1 Casting necessay both up and down
-%size 2
-
-       Developper-side hierarchy
-&com1 Inheritance is not always meaningful to the user
-%size 2
-
-%size 5
-Signal-based callback mechanism
-%size 2
-
-       May use multiple callbacks
-%size 2
-
-       Signals are polymorphic
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-9
-LablGTK structure
-
-Typed at all levels
-
-       Low-level interface
-%size 2
-
-               C stub functions -- typechecked by C
-
-               ML type declarations -- ML abstract types
-
-       High-level interface
-%size 2
-
-               ML class wrappers -- ML concrete types
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-10
-Low Level Interface
-
-Goals
-
-       Strongly typed interface
-&com1 heavy use of advanced typing techniques
-
-       Very little ML code
-&com1 C-stubs and external declarations
-
-       Safe memory management
-&com1 have the library cooperate with the GC
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-11
-Low level encoding (I)
-
-
-How to represent widget subtyping in ML?
-
-       Example: buttons' hierarchy
-%size 2
-
-%font "code", size 5, prefix "      ", fore "yellow"
-GtkObject
-    GtkWidget
-        GtkContainer
-            GtkButton
-                GtkToggleButton
-                    GtkRadioButton
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-12
-Variants as set constraints
-
-
-Variants can be seen as sets of possible values:
-
-       [tag1 ... tagn] = {tag1,...,tagn}
-
-
-Polymorphic variants introduce constraints
-
-       \e$B&A\e(B[> tag1 ... tagn] \e$B"N\e(B \e$B&A\e(B \e$B"?\e(B {tag1,...,tagn}
-       \e$B&A\e(B[< tag1 ... tagn] \e$B"N\e(B \e$B&A\e(B \e$B">\e(B {tag1,...,tagn}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-13
-Encoding hierarchies
-
-Define an abstract type
-&vspace
-%font "code", fore "yellow", size 5
-      type 'a obj
-
-&txt Use tags to represent properties
-&vspace
-%font "code", fore "yellow", size 5
-      type t = [class1 ... classn] obj
-
-&txt Functions check properties
-&vspace
-%font "code", fore "yellow", size 5
-      val f : [> class1 ... classn] obj -> ...
-&txt
-       Subsumes Haskell type classes
-&vspace
-       Allows multiple inheritance
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-14
-Low level encoding (II)
-
-Example: buttons' hierarchy
-%size 2
-
-%font "code", size 4, prefix "    ", fore "yellow"
-type 'a obj
-type widget = [widget] obj
-type container = [widget container] obj
-type button = [widget container button] obj
-type toggle_button = [widget ... togglebutton] obj
-type radio_button = [widget ... radiobutton] obj
-type state_type = [ NORMAL
-     ACTIVE PRELIGHT SELECTED INSENSITIVE ] 
-val set_state : [> widget] obj -> state_type -> unit
-val children : [> container] obj -> [widget] obj list
-val clicked : [> button] obj -> unit
-val set_group : [> radiobutton] obj -> group -> unit
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-15
-Alternate encoding
-
-Use only standard ML features
-%size 2
-
-%font "code", size 4, prefix "  ", fore "yellow", vgap 50
-type 'a obj
-type 'a widget
-...
-type 'a radio
-type state_type = NORMAL | ACTIVE | ... | INSENSITIVE
-val set_state : 'a widget obj -> state_type -> unit
-val children :
-    'a container widget obj -> unit widget obj list
-val clicked : 'a button container widget obj -> unit
-
-&txt Weaknesses
-       No multiple inheritance
-       Not very intuitive for the user
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-16
-Low level encoding (III)
-
-Use of labeled parameters
-%size 2
-
-%font "code", size 4, prefix "  ", fore "yellow", vgap 50
-val adjustment_new :
-    value:float -> lower:float -> upper:float ->
-    step_incr:float -> page_incr:float ->
-    page_size:float -> adjustment obj
-
-&txt Signals
-%size 2
-
-%font "code", size 4, prefix "  ", fore "yellow", vgap 50
-type ('a,'b) signal =
-    { name: string; marshaller: 'b -> GtkArgv.t -> unit }
-val connect : 'a obj -> sig:('a,'b) signal ->
-               callback:'b -> ?after:bool -> id
-val button_clicked : ([> button], unit -> unit) signal
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-17
-High-Level Interface
-
-Problems with GTK+
-%size 2
-
-       Name space is scattered
-&com1 One has to know in which superclass a function is defined
-       Developper oriented design
-&com1 There is no clear distinction between public and private definitions
-
-&txt LablGTK design
-%size 2
-
-       OCaml classes to reunify name space
-       Omit developper-oriented methods
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-18
-High-level classes
-
-%font "code", size 4, prefix "  ", fore "yellow"
-class button :
-%fore "lightgreen"
-  ?label:string ->
-%fore "lightpink"
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-%fore "lightgray"
-  ?packing:(GButton.button -> unit) ->
-  ?show:bool ->
-%fore "yellow"
-  object
-%fore "lightgray"
-    method destroy : unit -> unit
-    method as_widget : Gtk.widget obj
-    method misc : GObj.widget_misc
-%fore "lightpink"
-    method add : #is_widget -> unit
-    method set_border_width : int -> unit
-%fore "lightgreen"
-    method clicked : unit -> unit
-    method connect : GButton.button_signals
-    method grab_default : unit -> unit
-%fore "yellow"
-  end
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-19
-High-level features
-
-       Objective Caml classes
-&com1 allow collecting methods from different modules
-
-       Use optionals in class constructors
-&com1 makes widget creation much easier
-
-       Polymorphic methods
-&com1 needed for container widgets
-%size 2
-
-%font "code", size 4, fore "yellow", vgap 50
-        method add : 'a. (#is_widget as 'a) -> unit
-
-%fore "white", font "sans"
-       Polymorphic variants
-&com1 for C-style enumeration types, avoid name-space dependancies
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-20
-Polymorphic methods (I)
-
-       Instance of first-class polymorphism
-%size 2
-
-               first-class polytypes cannot be inferred
-               they are propagated by the definition flow
-
-       Technically
-%size 2
-
-               use polymorphism to track available information
-               type system excludes derivations based on "guessed" information
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-21
-First class polymorphism
-
-%prefix "            "
-%image "formula.eps" 512x384
-%size 2
-
-%prefix " ", size 5, fore "lightblue"
-  (\e$B&R\e(B1 : \e$B&R\e(B : \e$B&R\e(B2) \e$B"N\e(B \e$B&R\e(B1 = \e$B&H\e(B(\e$B&Q\e(B1(\e$B&R\e(B)) \e$B"J\e(B \e$B&R\e(B2 = \e$B&H\e(B(\e$B&Q\e(B2(\e$B&R\e(B))
-%fore "white"
-where \e$B&H\e(B instantiates free variables, and \e$B&Q\e(B1,\e$B&Q\e(B2 rename free labels of \e$B&R\e(B.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-22
-Polymorphic methods (II)
-
-Definitions
-%size 2
-
-%font "code", size 4, prefix "    ", fore "yellow", vgap 50
-type is_widget = < as_widget : widget obj >
-type #is_widget = < as_widget : widget obj; .. >
-type container =
-    < ... ; add : 'a. (#as_widget as 'a) -> unit; ... >
-
-%pause
-&txt Propagation
-%size 2
-
-%font "code", size 4, prefix "    ", fore "lightgreen", vgap 50
-fun (cont : container) -> cont#add widget
-
-%pause
-let button = new button in button#add widget
-
-%pause, fore "red"
-fun cont -> cont#add widget
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-23
-Programming example
-
-Hello World
-%size 2
-
-%font "code", size 4, prefix "    ", fore "yellow"
-open GMain
-
-let window =
-    new GWindow.window border_width: 10
-
-let button =
-    new GButton.button
-        label: "Hello World" packing: window#add
-
-let _ =
-  window#connect#destroy callback: Main.quit;
-  button#connect#clicked callback: window#destroy;
-  window#show ();
-  Main.main ()
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-24
-Conclusion
-
-       Results
-%size 2
-
-               Could build a strongly typed interface
-
-               It is easier to use than the C API
-
-               Makes effective use of extensions to the type system
-
-       Comments
-%size 2
-
-               Still difficulties with the Caml object system 
-&com2 class recursion, method type refinement, etc...
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/GL/morph3d.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/GL/morph3d.ml
deleted file mode 100644 (file)
index a08726e..0000000
+++ /dev/null
@@ -1,607 +0,0 @@
-(* $Id$ *)
-
-(*-
- * morph3d.c - Shows 3D morphing objects (TK Version)
- *
- * This program was inspired on a WindowsNT(R)'s screen saver. It was written 
- * from scratch and it was not based on any other source code. 
- * 
- * Porting it to xlock (the final objective of this code since the moment I
- * decided to create it) was possible by comparing the original Mesa's gear
- * demo with it's ported version, so thanks for Danny Sung for his indirect
- * help (look at gear.c in xlock source tree). NOTE: At the moment this code
- * was sent to Brian Paul for package inclusion, the XLock Version was not
- * available. In fact, I'll wait it to appear on the next Mesa release (If you
- * are reading this, it means THIS release) to send it for xlock package 
- * inclusion). It will probably there be a GLUT version too.
- *
- * Thanks goes also to Brian Paul for making it possible and inexpensive
- * to use OpenGL at home.
- *
- * Since I'm not a native english speaker, my apologies for any gramatical
- * mistake.
- *
- * My e-mail addresses are
- *
- * vianna@cat.cbpf.br 
- *         and
- * marcelo@venus.rdc.puc-rio.br
- *
- * Marcelo F. Vianna (Feb-13-1997)
- *)
-
-(*
-This document is VERY incomplete, but tries to describe the mathematics used
-in the program. At this moment it just describes how the polyhedra are 
-generated. On futhurer versions, this document will be probabbly improved.
-
-Since I'm not a native english speaker, my apologies for any gramatical
-mistake.
-
-Marcelo Fernandes Vianna 
-- Undergraduate in Computer Engeneering at Catholic Pontifical University
-- of Rio de Janeiro (PUC-Rio) Brasil.
-- e-mail: vianna@cat.cbpf.br or marcelo@venus.rdc.puc-rio.br
-- Feb-13-1997
-
-POLYHEDRA GENERATION
-
-For the purpose of this program it's not sufficient to know the polyhedra
-vertexes coordinates. Since the morphing algorithm applies a nonlinear 
-transformation over the surfaces (faces) of the polyhedron, each face has
-to be divided into smaller ones. The morphing algorithm needs to transform 
-each vertex of these smaller faces individually. It's a very time consoming
-task.
-
-In order to reduce calculation overload, and since all the macro faces of
-the polyhedron are transformed by the same way, the generation is made by 
-creating only one face of the polyhedron, morphing it and then rotating it
-around the polyhedron center. 
-
-What we need to know is the face radius of the polyhedron (the radius of 
-the inscribed sphere) and the angle between the center of two adjacent 
-faces using the center of the sphere as the angle's vertex.
-
-The face radius of the regular polyhedra are known values which I decided
-to not waste my time calculating. Following is a table of face radius for
-the regular polyhedra with edge length = 1:
-
-    TETRAHEDRON  : 1/(2*sqrt(2))/sqrt(3)
-    CUBE        : 1/2
-    OCTAHEDRON   : 1/sqrt(6)
-    DODECAHEDRON : T^2 * sqrt((T+2)/5) / 2     -> where T=(sqrt(5)+1)/2
-    ICOSAHEDRON  : (3*sqrt(3)+sqrt(15))/12
-
-I've not found any reference about the mentioned angles, so I needed to
-calculate them, not a trivial task until I figured out how :)
-Curiously these angles are the same for the tetrahedron and octahedron.
-A way to obtain this value is inscribing the tetrahedron inside the cube
-by matching their vertexes. So you'll notice that the remaining unmatched
-vertexes are in the same straight line starting in the cube/tetrahedron
-center and crossing the center of each tetrahedron's face. At this point
-it's easy to obtain the bigger angle of the isosceles triangle formed by
-the center of the cube and two opposite vertexes on the same cube face.
-The edges of this triangle have the following lenghts: sqrt(2) for the base
-and sqrt(3)/2 for the other two other edges. So the angle we want is:
-     +-----------------------------------------------------------+
-     | 2*ARCSIN(sqrt(2)/sqrt(3)) = 109.47122063449069174 degrees |
-     +-----------------------------------------------------------+
-For the cube this angle is obvious, but just for formality it can be
-easily obtained because we also know it's isosceles edge lenghts:
-sqrt(2)/2 for the base and 1/2 for the other two edges. So the angle we 
-want is:
-     +-----------------------------------------------------------+
-     | 2*ARCSIN((sqrt(2)/2)/1)   = 90.000000000000000000 degrees |
-     +-----------------------------------------------------------+
-For the octahedron we use the same idea used for the tetrahedron, but now
-we inscribe the cube inside the octahedron so that all cubes's vertexes
-matches excatly the center of each octahedron's face. It's now clear that
-this angle is the same of the thetrahedron one:
-     +-----------------------------------------------------------+
-     | 2*ARCSIN(sqrt(2)/sqrt(3)) = 109.47122063449069174 degrees |
-     +-----------------------------------------------------------+
-For the dodecahedron it's a little bit harder because it's only relationship
-with the cube is useless to us. So we need to solve the problem by another
-way. The concept of Face radius also exists on 2D polygons with the name
-Edge radius:
-  Edge Radius For Pentagon (ERp)
-  ERp = (1/2)/TAN(36 degrees) * VRp = 0.6881909602355867905
-  (VRp is the pentagon's vertex radio).
-  Face Radius For Dodecahedron
-  FRd = T^2 * sqrt((T+2)/5) / 2 = 1.1135163644116068404
-Why we need ERp? Well, ERp and FRd segments forms a 90 degrees angle, 
-completing this triangle, the lesser angle is a half of the angle we are 
-looking for, so this angle is:
-     +-----------------------------------------------------------+
-     | 2*ARCTAN(ERp/FRd)        = 63.434948822922009981 degrees |
-     +-----------------------------------------------------------+
-For the icosahedron we can use the same method used for dodecahedron (well
-the method used for dodecahedron may be used for all regular polyhedra)
-  Edge Radius For Triangle (this one is well known: 1/3 of the triangle height)
-  ERt = sin(60)/3 = sqrt(3)/6 = 0.2886751345948128655
-  Face Radius For Icosahedron
-  FRi= (3*sqrt(3)+sqrt(15))/12 = 0.7557613140761707538
-So the angle is:
-     +-----------------------------------------------------------+
-     | 2*ARCTAN(ERt/FRi)        = 41.810314895778596167 degrees |
-     +-----------------------------------------------------------+
-
-*)
-
-
-let scale = 0.3
-
-let vect_mul (x1,y1,z1) (x2,y2,z2) =
-  (y1 *. z2 -. z1 *. y2, z1 *. x2 -. x1 *. z2, x1 *. y2 -. y1 *. x2)
-
-let sqr a = a *. a
-
-(* Increasing this values produces better image quality, the price is speed. *)
-(* Very low values produces erroneous/incorrect plotting *)
-let tetradivisions =            23
-let cubedivisions =             20
-let octadivisions =             21
-let dodecadivisions =           10
-let icodivisions =              15
-
-let tetraangle =                109.47122063449069174
-let cubeangle =                 90.000000000000000000
-let octaangle =                 109.47122063449069174
-let dodecaangle =               63.434948822922009981
-let icoangle =                  41.810314895778596167
-
-let pi = acos (-1.)
-let sqrt2 = sqrt 2.
-let sqrt3 = sqrt 3.
-let sqrt5 = sqrt 5.
-let sqrt6 = sqrt 6.
-let sqrt15 = sqrt 15.
-let cossec36_2 = 0.8506508083520399322
-let cosd x =  cos (float x /. 180. *. pi)
-let sind x =  sin (float x /. 180. *. pi)
-let cos72 = cosd 72
-let sin72 = sind 72
-let cos36 = cosd 36
-let sin36 = sind 36
-
-(*************************************************************************)
-
-let front_shininess =   60.0
-let front_specular  =   0.7, 0.7, 0.7, 1.0
-let ambient         =   0.0, 0.0, 0.0, 1.0
-let diffuse         =   1.0, 1.0, 1.0, 1.0
-let position0       =   1.0, 1.0, 1.0, 0.0
-let position1       =   -1.0,-1.0, 1.0, 0.0
-let lmodel_ambient  =   0.5, 0.5, 0.5, 1.0
-let lmodel_twoside  =   true
-
-let materialRed     =   0.7, 0.0, 0.0, 1.0
-let materialGreen   =   0.1, 0.5, 0.2, 1.0
-let materialBlue    =   0.0, 0.0, 0.7, 1.0
-let materialCyan    =   0.2, 0.5, 0.7, 1.0
-let materialYellow  =   0.7, 0.7, 0.0, 1.0
-let materialMagenta =   0.6, 0.2, 0.5, 1.0
-let materialWhite   =   0.7, 0.7, 0.7, 1.0
-let materialGray    =   0.2, 0.2, 0.2, 1.0
-let all_gray = Array.create 20 materialGray
-
-let vertex ~xf ~yf ~zf ~ampvr2 =
-  let xa = xf +. 0.01 and yb = yf +. 0.01 in
-  let xf2 = sqr xf and yf2 = sqr yf in
-  let factor = 1. -. (xf2 +. yf2) *. ampvr2
-  and factor1 = 1. -. (sqr xa +. yf2) *. ampvr2
-  and factor2 = 1. -. (xf2 +. sqr yb) *. ampvr2 in
-  let vertx = factor *. xf and verty = factor *. yf
-  and vertz = factor *. zf in
-  let neiax = factor1 *. xa -. vertx and neiay = factor1 *. yf -. verty
-  and neiaz = factor1 *. zf -. vertz and neibx = factor2 *. xf -. vertx
-  and neiby = factor2 *. yb -. verty and neibz = factor2 *. zf -. vertz in
-  GlDraw.normal3 (vect_mul (neiax, neiay, neiaz) (neibx, neiby, neibz));
-  GlDraw.vertex3 (vertx, verty, vertz)
-
-let triangle ~edge ~amp ~divisions ~z =
-  let divi = float divisions in
-  let vr = edge *. sqrt3 /. 3. in
-  let ampvr2 = amp /. sqr vr
-  and zf = edge *. z in
-  let ax = edge *. (0.5 /. divi)
-  and ay = edge *. (-0.5 *. sqrt3 /. divi)
-  and bx = edge *. (-0.5 /. divi) in
-  for ri = 1 to divisions do
-    GlDraw.begins `triangle_strip;
-    for ti = 0 to ri - 1 do
-      vertex ~zf ~ampvr2
-       ~xf:(float (ri-ti) *. ax +. float ti *. bx)
-       ~yf:(vr +. float (ri-ti) *. ay +. float ti *. ay);
-      vertex ~zf ~ampvr2
-       ~xf:(float (ri-ti-1) *. ax +. float ti *. bx)
-       ~yf:(vr +. float (ri-ti-1) *. ay +. float ti *. ay)
-    done;
-    vertex ~xf:(float ri *. bx) ~yf:(vr +. float ri *. ay) ~zf ~ampvr2;
-    GlDraw.ends ()
-  done
-
-let square ~edge ~amp ~divisions ~z =
-  let divi = float divisions in
-  let zf = edge *. z
-  and ampvr2 = amp /. sqr (edge *. sqrt2 /. 2.) in
-  for yi = 0 to divisions - 1 do
-    let yf = edge *. (-0.5 +. float yi /. divi) in
-    let yf2 = sqr yf in
-    let y = yf +. 1.0 /. divi *. edge in
-    let y2 = sqr y in
-    GlDraw.begins `quad_strip;
-    for xi = 0 to divisions do
-      let xf = edge *. (-0.5 +. float xi /. divi) in
-      vertex ~xf ~yf:y ~zf ~ampvr2;
-      vertex ~xf ~yf ~zf ~ampvr2
-    done;
-    GlDraw.ends ()
-  done
-
-let pentagon ~edge ~amp ~divisions ~z =
-  let divi = float divisions in
-  let zf = edge *. z
-  and ampvr2 = amp /. sqr(edge *. cossec36_2) in
-  let x =
-    Array.init 6
-      ~f:(fun fi -> -. cos (float fi *. 2. *. pi /. 5. +. pi /. 10.)
-                    /. divi *. cossec36_2 *. edge)
-  and y =
-    Array.init 6
-      ~f:(fun fi -> sin (float fi *. 2. *. pi /. 5. +. pi /. 10.)
-                    /. divi *. cossec36_2 *. edge)
-  in
-  for ri = 1 to divisions do
-    for fi = 0 to 4 do
-      GlDraw.begins `triangle_strip;
-      for ti = 0 to ri-1 do
-       vertex ~zf ~ampvr2
-         ~xf:(float(ri-ti) *. x.(fi) +. float ti *. x.(fi+1))
-         ~yf:(float(ri-ti) *. y.(fi) +. float ti *. y.(fi+1));
-       vertex ~zf ~ampvr2
-         ~xf:(float(ri-ti-1) *. x.(fi) +. float ti *. x.(fi+1))
-         ~yf:(float(ri-ti-1) *. y.(fi) +. float ti *. y.(fi+1))
-      done;
-      vertex ~xf:(float ri *. x.(fi+1)) ~yf:(float ri *. y.(fi+1)) ~zf ~ampvr2;
-      GlDraw.ends ()
-    done
-  done
-
-let call_list list color =
-  GlLight.material ~face:`both (`diffuse color);
-  GlList.call list
-
-let draw_tetra ~amp ~divisions ~color =
-  let list = GlList.create `compile in
-  triangle ~edge:2.0 ~amp ~divisions ~z:(0.5 /. sqrt6);
-  GlList.ends();
-
-  call_list list color.(0);
-  GlMat.push();
-  GlMat.rotate ~angle:180.0 ~z:1.0 ();
-  GlMat.rotate ~angle:(-.tetraangle) ~x:1.0 ();
-  call_list list color.(1);
-  GlMat.pop();
-  GlMat.push();
-  GlMat.rotate ~angle:180.0 ~y:1.0 ();
-  GlMat.rotate ~angle:(-180.0 +. tetraangle) ~x:0.5 ~y:(sqrt3 /. 2.) ();
-  call_list list color.(2);
-  GlMat.pop();
-  GlMat.rotate ~angle:180.0 ~y:1.0 ();
-  GlMat.rotate ~angle:(-180.0 +. tetraangle) ~x:0.5 ~y:(-.sqrt3 /. 2.) ();
-  call_list list color.(3);
-
-  GlList.delete list
-
-let draw_cube ~amp ~divisions ~color =
-  let list = GlList.create `compile in
-  square ~edge:2.0 ~amp ~divisions ~z:0.5;
-  GlList.ends ();
-
-  call_list list color.(0);
-  for i = 1 to 3 do
-    GlMat.rotate ~angle:cubeangle ~x:1.0 ();
-    call_list list color.(i)
-  done;
-  GlMat.rotate ~angle:cubeangle ~y:1.0 ();
-  call_list list color.(4);
-  GlMat.rotate ~angle:(2.0 *. cubeangle) ~y:1.0 ();
-  call_list list color.(5);
-
-  GlList.delete list
-
-let draw_octa ~amp ~divisions ~color =
-  let list = GlList.create `compile in
-  triangle ~edge:2.0 ~amp ~divisions ~z:(1.0 /. sqrt6);
-  GlList.ends ();
-
-  let do_list (i,y) =
-    GlMat.push();
-    GlMat.rotate ~angle:180.0 ~y:1.0 ();
-    GlMat.rotate ~angle:(-.octaangle) ~x:0.5 ~y ();
-    call_list list color.(i);
-    GlMat.pop()
-  in
-  call_list list color.(0);
-  GlMat.push();
-  GlMat.rotate ~angle:180.0 ~z:1.0 ();
-  GlMat.rotate ~angle:(-180.0 +. octaangle) ~x:1.0 ();
-  call_list list color.(1);
-  GlMat.pop();
-  List.iter [2, sqrt3 /. 2.0; 3, -.sqrt3 /. 2.0] ~f:do_list;
-  GlMat.rotate ~angle:180.0 ~x:1.0 ();
-  GlLight.material ~face:`both (`diffuse color.(4));
-  GlList.call list;
-  GlMat.push();
-  GlMat.rotate ~angle:180.0 ~z:1.0 ();
-  GlMat.rotate ~angle:(-180.0 +. octaangle) ~x:1.0 ();
-  GlLight.material ~face:`both (`diffuse color.(5));
-  GlList.call list;
-  GlMat.pop();
-  List.iter [6, sqrt3 /. 2.0; 7, -.sqrt3 /. 2.0] ~f:do_list;
-
-  GlList.delete list
-
-let draw_dodeca ~amp ~divisions ~color =
-  let tau = (sqrt5 +. 1.0) /. 2.0 in
-  let list = GlList.create `compile in
-  pentagon ~edge:2.0 ~amp ~divisions
-    ~z:(sqr(tau) *. sqrt ((tau+.2.0)/.5.0) /. 2.0);
-  GlList.ends ();
-
-  let do_list (i,angle,x,y) =
-    GlMat.push();
-    GlMat.rotate ~angle:angle ~x ~y ();
-    call_list list color.(i);
-    GlMat.pop();
-  in
-  GlMat.push ();
-  call_list list color.(0);
-  GlMat.rotate ~angle:180.0 ~z:1.0 ();
-  List.iter ~f:do_list
-    [ 1, -.dodecaangle, 1.0, 0.0;
-      2, -.dodecaangle, cos72, sin72;
-      3, -.dodecaangle, cos72, -.sin72;
-      4, dodecaangle, cos36, -.sin36;
-      5, dodecaangle, cos36, sin36 ];
-  GlMat.pop ();
-  GlMat.rotate ~angle:180.0 ~x:1.0 ();
-  call_list list color.(6);
-  GlMat.rotate ~angle:180.0 ~z:1.0 ();
-  List.iter ~f:do_list
-    [ 7, -.dodecaangle, 1.0, 0.0;
-      8, -.dodecaangle, cos72, sin72;
-      9, -.dodecaangle, cos72, -.sin72;
-      10, dodecaangle, cos36, -.sin36 ];
-  GlMat.rotate ~angle:dodecaangle ~x:cos36 ~y:sin36 ();
-  call_list list color.(11);
-
-  GlList.delete list
-
-let draw_ico ~amp ~divisions ~color =
-  let list = GlList.create `compile in
-  triangle ~edge:1.5 ~amp ~divisions
-    ~z:((3.0 *. sqrt3 +. sqrt15) /. 12.0);
-  GlList.ends ();
-
-  let do_list1 i =
-    GlMat.rotate ~angle:180.0 ~y:1.0 ();
-    GlMat.rotate ~angle:(-180.0 +. icoangle) ~x:0.5 ~y:(sqrt3/.2.0) ();
-    call_list list color.(i)
-  and do_list2 i =
-    GlMat.rotate ~angle:180.0 ~y:1.0 ();
-    GlMat.rotate ~angle:(-180.0 +. icoangle) ~x:0.5 ~y:(-.sqrt3/.2.0) ();
-    call_list list color.(i)
-  and do_list3 i =
-    GlMat.rotate ~angle:180.0 ~z:1.0 ();
-    GlMat.rotate ~angle:(-.icoangle) ~x:1.0 ();
-    call_list list color.(i)
-  in
-  GlMat.push ();
-  call_list list color.(0);
-  GlMat.push ();
-  do_list3 1;
-  GlMat.push ();
-  do_list1 2;
-  GlMat.pop ();
-  do_list2 3;
-  GlMat.pop ();
-  GlMat.push ();
-  do_list1 4;
-  GlMat.push ();
-  do_list1 5;
-  GlMat.pop();
-  do_list3 6;
-  GlMat.pop ();
-  do_list2 7;
-  GlMat.push ();
-  do_list2 8;
-  GlMat.pop ();
-  do_list3 9;
-  GlMat.pop ();
-  GlMat.rotate ~angle:180.0 ~x:1.0 ();
-  call_list list color.(10);
-  GlMat.push ();
-  do_list3 11;
-  GlMat.push ();
-  do_list1 12;
-  GlMat.pop ();
-  do_list2 13;
-  GlMat.pop ();
-  GlMat.push ();
-  do_list1 14;
-  GlMat.push ();
-  do_list1 15;
-  GlMat.pop ();
-  do_list3 16;
-  GlMat.pop ();
-  do_list2 17;
-  GlMat.push ();
-  do_list2 18;
-  GlMat.pop ();
-  do_list3 19;
-
-  GlList.delete list
-
-class view area = object (self)
-  val area : GlGtk.area = area
-  val mutable smooth = true
-  val mutable step = 0.
-  val mutable obj = 1
-  val mutable draw_object = fun ~amp -> ()
-  val mutable magnitude = 0.
-
-  method width =  area#misc#allocation.Gtk.width
-  method height = area#misc#allocation.Gtk.height
-
-  method draw () =
-    let ratio = float self#height /. float self#width in
-    GlClear.clear [`color;`depth];
-    GlMat.push();
-    GlMat.translate ~z:(-10.0) ();
-    GlMat.scale ~x:(scale *. ratio) ~y:scale ~z:scale ();
-    GlMat.translate ()
-      ~x:(2.5 *. ratio *. sin (step *. 1.11))
-      ~y:(2.5 *. cos (step *. 1.25 *. 1.11));
-    GlMat.rotate ~angle:(step *. 100.) ~x:1.0 ();
-    GlMat.rotate ~angle:(step *. 95.) ~y:1.0 ();
-    GlMat.rotate ~angle:(step *. 90.) ~z:1.0 ();
-    draw_object ~amp:((sin step +. 1.0/.3.0) *. (4.0/.5.0) *. magnitude);
-    GlMat.pop();
-    Gl.flush();
-    area#swap_buffers ();
-    step <- step +. 0.05
-
-  method reshape ~width ~height =
-    GlDraw.viewport ~x:0 ~y:0 ~w:width ~h:height;
-    GlMat.mode `projection;
-    GlMat.load_identity();
-    GlMat.frustum ~x:(-1.0, 1.0) ~y:(-1.0, 1.0) ~z:(5.0, 15.0);
-    GlMat.mode `modelview
-
-  method key sym =
-    begin match sym with
-      "1" -> obj <- 1
-    | "2" -> obj <- 2
-    | "3" -> obj <- 3
-    | "4" -> obj <- 4
-    | "5" -> obj <- 5
-    | "\r" -> smooth <- not smooth
-    | "\027" -> area#misc#toplevel#destroy (); exit 0
-    | _ -> ()
-    end;
-    self#pinit
-
-  method pinit =
-    begin match obj with
-      1 ->
-       draw_object <- draw_tetra
-            ~divisions:tetradivisions
-            ~color:[|materialRed;  materialGreen;
-                    materialBlue; materialWhite|];
-       magnitude <- 2.5
-    | 2 ->
-       draw_object <- draw_cube
-            ~divisions:cubedivisions
-            ~color:[|materialRed; materialGreen; materialCyan;
-                    materialMagenta; materialYellow; materialBlue|];
-       magnitude <- 2.0
-    | 3 ->
-       draw_object <- draw_octa
-            ~divisions:octadivisions
-            ~color:[|materialRed; materialGreen; materialBlue;
-                    materialWhite; materialCyan; materialMagenta;
-                    materialGray; materialYellow|];
-       magnitude <- 2.5
-    | 4 ->
-      draw_object <- draw_dodeca
-          ~divisions:dodecadivisions
-          ~color:[|materialRed; materialGreen; materialCyan;
-                  materialBlue; materialMagenta; materialYellow;
-                  materialGreen; materialCyan; materialRed;
-                  materialMagenta; materialBlue; materialYellow|];
-      magnitude <- 2.0
-    | 5 ->
-       draw_object <- draw_ico
-            ~divisions:icodivisions
-            ~color:[|materialRed; materialGreen; materialBlue;
-                    materialCyan; materialYellow; materialMagenta;
-                    materialRed; materialGreen; materialBlue;
-                    materialWhite; materialCyan; materialYellow;
-                    materialMagenta; materialRed; materialGreen;
-                    materialBlue; materialCyan; materialYellow;
-                    materialMagenta; materialGray|];
-       magnitude <- 3.5
-    | _ -> ()
-    end;
-    GlDraw.shade_model (if smooth then `smooth else `flat)
-  initializer
-    area#connect#display ~callback:self#draw;
-    area#connect#reshape ~callback:self#reshape;
-    ()
-end
-
-open GMain
-
-let main () =
-  List.iter ~f:print_string
-    [ "Morph 3D - Shows morphing platonic polyhedra\n";
-      "Author: Marcelo Fernandes Vianna (vianna@cat.cbpf.br)\n";
-      "Ported to LablGL by Jacques Garrigue\n\n";
-      "  [1]    - Tetrahedron\n";
-      "  [2]    - Hexahedron (Cube)\n";
-      "  [3]    - Octahedron\n";
-      "  [4]    - Dodecahedron\n";
-      "  [5]    - Icosahedron\n";
-      "[RETURN] - Toggle smooth/flat shading\n";
-      " [ESC]   - Quit\n" ];
-  flush stdout;
-
-  let window =
-    GWindow.window ~title:"Morph 3D - Shows morphing platonic polyhedra" ()
-  in
-  window#connect#destroy ~callback:Main.quit;
-  window#set_resize_mode `IMMEDIATE;
-
-  let area = GlGtk.area [`DEPTH_SIZE 1;`RGBA;`DOUBLEBUFFER]
-      ~width:640 ~height:480 ~packing:window#add () in
-
-  let view = new view area in
-
-  area#connect#realize ~callback:
-    begin fun () ->
-      view#pinit;
-      GlClear.depth 1.0;
-      GlClear.color (0.0, 0.0, 0.0);
-      GlDraw.color (1.0, 1.0, 1.0);
-
-      GlClear.clear [`color;`depth];
-      Gl.flush();
-
-      List.iter ~f:(GlLight.light ~num:0)
-       [`ambient ambient; `diffuse diffuse; `position position0];
-      List.iter ~f:(GlLight.light ~num:1)
-       [`ambient ambient; `diffuse diffuse; `position position1];
-      GlLight.light_model (`ambient lmodel_ambient);
-      GlLight.light_model (`two_side lmodel_twoside);
-      List.iter ~f:Gl.enable
-       [`lighting;`light0;`light1;`depth_test;`normalize];
-
-      GlLight.material ~face:`both (`shininess front_shininess);
-      GlLight.material ~face:`both (`specular front_specular);
-
-      GlMisc.hint `fog `fastest;
-      GlMisc.hint `perspective_correction `fastest;
-      GlMisc.hint `polygon_smooth `fastest
-    end;
-
-  window#event#connect#key_press
-    ~callback:(fun ev -> view#key (GdkEvent.Key.string ev); true);
-
-  Timeout.add ~ms:20
-    ~callback:(fun _ -> if area#misc#visible then view#draw (); true);
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/GL/planet.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/GL/planet.ml
deleted file mode 100644 (file)
index 51f947c..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-(* $Id$ *)
-
-class planet area = object (self)
-  val area : GlGtk.area = area
-  val mutable year = 0.0
-  val mutable day = 0.0
-  val mutable eye = 0.0
-  val mutable time = 0.0
-
-  method tick new_time =
-    if time = 0. then time <- new_time else
-    let diff = new_time -. time in
-    time <- new_time;
-    day <- mod_float (day +. diff *. 200.) 360.0;
-    year <- mod_float (year +. diff *. 20.) 360.0
-  method day_add () =
-    day <- mod_float (day +. 10.0) 360.0
-  method day_subtract () =
-    day <- mod_float (day -. 10.0) 360.0
-  method year_add () =
-    year <- mod_float (year +. 5.0) 360.0
-  method year_subtract () =
-    year <- mod_float (year -. 5.0) 360.0
-  method eye x =
-    eye <- x; self#display ()
-
-  method display () =
-    GlClear.clear [`color;`depth];
-
-    GlDraw.color (1.0, 1.0, 1.0);
-    GlMat.push();
-    GlMat.rotate ~angle:eye ~x:1. ();
-(*     draw sun        *)
-    GlLight.material ~face:`front (`specular (1.0,1.0,0.0,1.0));
-    GlLight.material ~face:`front (`shininess 5.0);
-    GluQuadric.sphere ~radius:1.0 ~slices:32 ~stacks:32 ();
-(*     draw smaller planet     *)
-    GlMat.rotate ~angle:year ~y:1.0 ();
-    GlMat.translate ~x:3.0 ();
-    GlMat.rotate ~angle:day ~y:1.0 ();
-    GlDraw.color (0.0, 1.0, 1.0);
-    GlDraw.shade_model `flat;
-    GlLight.material ~face:`front(`shininess 128.0);
-    GluQuadric.sphere ~radius:0.2 ~slices:10 ~stacks:10 ();
-    GlDraw.shade_model `smooth;
-    GlMat.pop ();
-    Gl.flush ();
-    area#swap_buffers ()
-end
-
-let myinit () =
-  let light_ambient = 0.5, 0.5, 0.5, 1.0
-  and light_diffuse = 1.0, 0.8, 0.2, 1.0
-  and light_specular = 1.0, 1.0, 1.0, 1.0
-  (*  light_position is NOT default value      *)
-  and light_position = 1.0, 1.0, 1.0, 0.0
-  in
-  List.iter ~f:(GlLight.light ~num:0)
-    [ `ambient light_ambient; `diffuse light_diffuse;
-      `specular light_specular; `position light_position ];
-  GlFunc.depth_func `less;
-  List.iter ~f:Gl.enable [`lighting; `light0; `depth_test];
-  GlDraw.shade_model `smooth
-
-
-let my_reshape ~width:w ~height:h =
-  GlDraw.viewport ~x:0 ~y:0 ~w ~h;
-  GlMat.mode `projection;
-  GlMat.load_identity();
-  GluMat.perspective ~fovy:60.0 ~aspect:(float w /. float h) ~z:(1.0,20.0);
-  GlMat.mode `modelview;
-  GlMat.load_identity();
-  GlMat.translate ~z:(-5.0) ()
-
-(*  Main Loop
- *  Open window with initial window size, title bar, 
- *  RGBA display mode, and handle input events.
- *)
-open GMain
-open GdkKeysyms
-
-let main () =
-  let w = GWindow.window ~title:"Planet" () in
-  w#connect#destroy ~callback:(fun () -> Main.quit (); exit 0);
-  w#set_resize_mode `IMMEDIATE;
-  let hb = GPack.hbox ~packing:w#add () in
-  let area = GlGtk.area [`DOUBLEBUFFER;`RGBA;`DEPTH_SIZE 1]
-      ~width:700 ~height:500 ~packing:hb#add () in
-  area#event#add [`KEY_PRESS];
-
-  let planet = new planet area in
-  let adjustment = GData.adjustment ~value:0. ~lower:(-90.) ~upper:90.
-      ~step_incr:1. ~page_incr:5. ~page_size:5. () in
-  let scale = GRange.scale `VERTICAL ~adjustment ~draw_value:false
-      ~packing:hb#pack () in
-  adjustment#connect#value_changed
-    ~callback:(fun () -> planet#eye adjustment#value);
-  w#event#connect#key_press ~callback:
-    begin fun ev ->
-      let key = GdkEvent.Key.keyval ev in
-      if key = _Left then planet#year_subtract () else
-      if key = _Right then planet#year_add () else
-      if key = _Up then planet#day_add () else
-      if key = _Down then planet#day_subtract () else
-      if key = _Escape then w#destroy ();
-      planet#display ();
-      true
-    end;
-  
-  Timeout.add ~ms:20 ~callback:
-    begin fun () ->
-      planet#tick (Sys.time ()); planet#display (); true
-    end;
-  area#connect#display ~callback:planet#display;
-  area#connect#reshape ~callback:my_reshape;
-
-  area#connect#realize ~callback:
-    begin fun () ->
-      myinit ();
-      my_reshape ~width:700 ~height:500
-    end;
-  w#show ();
-  Main.main ()
-
-let _ = Printexc.print main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/GL/simple.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/GL/simple.ml
deleted file mode 100644 (file)
index ea6ebde..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-  let w = GWindow.window ~title:"LablGL/Gtk" () in
-  w#connect#destroy ~callback:Main.quit;
-  let area =
-    GlGtk.area [`RGBA;`DEPTH_SIZE 1] ~width:500 ~height:500 ~packing:w#add () in
-  area#connect#realize ~callback:
-    begin fun () ->
-      GlMat.mode `projection;
-      GlMat.load_identity ();
-      GlMat.ortho ~x:(-1.0,1.0) ~y:(-1.0,1.0) ~z:(-1.0,1.0);
-    end;
-  area#connect#display ~callback:
-    begin fun () ->
-      GlClear.color (0.0, 0.0, 0.0);
-      GlClear.clear [`color];
-      GlDraw.color (1.0, 1.0, 1.0);
-      GlDraw.begins `polygon;
-      GlDraw.vertex ~x:(-0.5) ~y:(-0.5) ();
-      GlDraw.vertex ~x:(-0.5) ~y:(0.5) ();
-      GlDraw.vertex ~x:(0.5) ~y:(0.5) ();
-      GlDraw.vertex ~x:(0.5) ~y:(-0.5) ();
-      GlDraw.ends ();
-      Gl.flush ()
-    end;
-  Timeout.add ~ms:10000 ~callback:(fun () -> w#destroy ();false);
-  w#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/README b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/README
deleted file mode 100644 (file)
index 6cbb5b6..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Since this library was written in commuting label mode, examples were
-also written in this mode.
-Still, the following examples also compile in classic mode without
-any modification.
-
-* calendar.ml
-* clist.ml
-* drawing.ml
-* entry.ml
-* events.ml
-* fifteen.ml
-* hello.ml
-* image.ml
-* radiobuttons.ml
-* rpn.ml
-* scrolledwin.ml
-* testinput.ml
\ No newline at end of file
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/buttons.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/buttons.ml
deleted file mode 100644 (file)
index 78eebb0..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let xpm_label_box ~(window : #GContainer.container)
-    ~file ~text ?packing ?(show=true) () =
-  if not (Sys.file_exists file) then failwith (file ^ " does not exist");
-  let box = GPack.hbox ~border_width: 2 ?packing ~show:false () in
-  let pixmap = GDraw.pixmap_from_xpm ~file ~window () in
-  GMisc.pixmap pixmap ~packing:(box#pack ~padding:3) ();
-  GMisc.label ~text ~packing:(box#pack ~padding:3) ();
-  if show then box#misc#show ();
-  new GObj.widget_full box#as_widget
-
-let main () =
-  let window = GWindow.window ~title:"Pixmap'd Buttons!" ~border_width:10 () in
-  window#connect#destroy ~callback:Main.quit;
-  let button = GButton.button ~packing:window#add () in
-  button#connect#clicked ~callback:
-    (fun () -> prerr_endline "Hello again - cool button was pressed");
-  xpm_label_box ~window ~file:"test.xpm" ~text:"cool button"
-    ~packing:button#add ();
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/calc.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/calc.ml
deleted file mode 100644 (file)
index 405d1bf..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-(* $Id$ *)
-
-(* A simple calculator ported from LablTk to LablGtk *)
-
-let mem_string ~char s =
-  try
-    for i = 0 to String.length s -1 do
-      if s.[i] = char then raise Exit
-    done; false
-  with Exit -> true
-
-let ops = ['+',(+.); '-',(-.); '*',( *.); '/',(/.)]
-
-(* The abstract calculator class. Does not use Gtk *)
-
-class virtual calc = object (calc)
-  val mutable x = 0.0
-  val mutable op = None
-  val mutable displaying = true
-
-  method virtual set : string -> unit
-  method virtual get : string
-  method virtual quit : unit -> unit
-  method insert s = calc#set (calc#get ^ s)
-  method get_float = float_of_string (calc#get)
-
-  initializer calc#set "0"
-
-  method command s =
-    if s <> "" then match s.[0] with
-      '0'..'9' ->
-       if displaying then (calc#set ""; displaying <- false);
-       calc#insert s
-    | '.' ->
-       if displaying then
-         (calc#set "0."; displaying <- false)
-       else
-         if not (mem_string ~char:'.' calc#get) then calc#insert s
-    | '+'|'-'|'*'|'/' as c ->
-       displaying <- true;
-       begin match op with
-         None ->
-           x <- calc#get_float;
-           op <- Some (List.assoc c ops)
-       | Some f ->
-           x <- f x (calc#get_float);
-           op <- Some (List.assoc c ops);
-           calc#set (string_of_float x)
-       end
-    | '='|'\n'|'\r' ->
-       displaying <- true;
-       begin match op with
-         None -> ()
-       | Some f ->
-           x <- f x (calc#get_float);
-           op <- None;
-           calc#set (string_of_float x)
-       end
-    | 'q' -> calc#quit ()
-    | _ -> ()
-end
-
-(* Buttons for the calculator *)
-
-let m =
-  [|[|"7";"8";"9";"+"|];
-    [|"4";"5";"6";"-"|];
-    [|"1";"2";"3";"*"|];
-    [|"0";".";"=";"/"|]|]
-
-(* The physical calculator. Inherits from the abstract one *)
-
-open GMain
-
-class calculator ?packing ?show () =
-  let table = GPack.table ~rows:5 ~columns:4 ~homogeneous:true ~show:false () in
-  object (calc)
-    inherit calc
-
-    val label =
-      let frame = GBin.frame ~shadow_type:`IN ()
-       ~packing:(table#attach ~left:0 ~top:0 ~right:4 ~expand:`BOTH) in
-      let evbox = GBin.event_box ~packing:frame#add () in
-      evbox#misc#set_style evbox#misc#style#copy;
-      evbox#misc#style#set_bg [`NORMAL,`WHITE];
-      GMisc.label ~justify:`RIGHT ~xalign:0.95 ~packing:evbox#add ()
-    val table = table
-
-    method set = label#set_text
-    method get = label#text
-    method quit = Main.quit
-
-    initializer
-      for i = 0 to 3 do for j = 0 to 3 do
-       let button =
-         GButton.button ~label:("  " ^ m.(i).(j) ^ "  ")
-           ~packing:(table#attach ~top:(i+1) ~left:j ~expand:`BOTH) () in
-       button#connect#clicked ~callback:(fun () -> calc#command m.(i).(j));
-      done done;
-      ignore (GObj.pack_return table ~packing ~show)
-  end
-
-(* Finally start everything *)
-
-let w = GWindow.window ~auto_shrink:true ()
-
-let applet = new calculator ~packing: w#add ()
-
-let _ =
-  w#connect#destroy ~callback: Main.quit;
-  w#event#connect#key_press
-    ~callback:(fun ev -> applet#command (GdkEvent.Key.string ev); true);
-  w#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/calendar.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/calendar.ml
deleted file mode 100644 (file)
index 233c744..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-  let window = GWindow.window () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let calendar = GMisc.calendar ~packing:window#add () in
-  calendar#connect#day_selected ~callback:
-    begin fun () ->
-      let (year,month,day) = calendar#date in
-      Printf.printf "You selected %d/%d/%02d.\n"
-       day (month+1) (year mod 100);
-      flush stdout
-    end;
-
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/clist.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/clist.ml
deleted file mode 100644 (file)
index f900f17..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-  let window = GWindow.window ~title:"CList example" ~width:300 ~height:150 () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let vbox = GPack.vbox ~border_width:5 ~packing:window#add () in
-
-  let hbox = GPack.hbox ~packing:vbox#add () in
-  let sb =
-    GRange.scrollbar `VERTICAL ~packing:(hbox#pack ~from:`END) () in
-  let clist =
-    GList.clist ~titles:["Ingredients";"Amount"] ~shadow_type:`OUT
-      ~packing:hbox#add ~vadjustment:sb#adjustment () in
-  clist#connect#select_row ~callback:
-    begin fun ~row ~column ~event ->
-      let text = clist#cell_text row column in
-      Printf.printf "You selected row %d. More specifically you clicked in column %d, and the text in this cell is %s\n\n" row column text;
-      flush stdout
-    end;
-
-  let hbox = GPack.hbox ~packing:vbox#pack () in
-
-  let button_add = GButton.button ~label:"Add List" ~packing:hbox#add () in
-  button_add#connect#clicked ~callback:
-    begin fun () ->
-      List.iter ~f:(fun t -> ignore (clist#append t))
-       [ ["Milk"; "3 Oz"];
-         ["Water"; "6 l"];
-         ["Carrots"; "2"];
-         ["Snakes"; "55"] ]
-    end;
-
-  let button_clear = GButton.button ~label:"Clear List" ~packing:hbox#add () in
-  button_clear#connect#clicked ~callback:clist#clear;
-
-  let button_hide_show =
-    GButton.button ~label:"Hide/Show titles" ~packing:hbox#add () in
-  let flag = ref false in
-  button_hide_show#connect#clicked ~callback:
-    begin fun () ->
-      clist#set_titles_show !flag;
-      flag := not !flag
-    end;
-
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/combo.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/combo.ml
deleted file mode 100644 (file)
index 9aff1b3..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let make_arrow_label combo ~label ~string =
-  let item = GList.list_item () in (* no packing here, it blocks GTK *)
-  let hbox = GPack.hbox ~spacing:3 ~packing:item#add () in
-  GMisc.arrow ~kind:`RIGHT ~shadow:`OUT ~packing:hbox#pack ();
-  GMisc.label ~text:label ~packing:hbox#pack ();
-  combo#set_item_string item string;
-  combo#list#add item;
-  item
-
-let main () =
-  let window = GWindow.window ~border_width:10 () in
-  window#connect#destroy ~callback:Main.quit;
-  let combo = GEdit.combo ~packing:window#add () in
-  make_arrow_label combo ~label:"First item" ~string:"1st item";
-  make_arrow_label combo ~label:"Second item" ~string:"2nd item";
-  window#show ();
-  Main.main ()
-  
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/csview.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/csview.ml
deleted file mode 100644 (file)
index eaf8de1..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-(* $Id$ *)
-
-(* A simple CSV data viewer *)
-
-type data =
-    { fields : string list;
-      titles : string list;
-      data : string list list }
-
-let mem_string ~char s =
-  try
-    for i = 0 to String.length s - 1 do
-      if s.[i] = char then raise Exit
-    done;
-    false
-  with Exit -> true
-
-let rec until ~chars ?(escapes="") ?(buf = Buffer.create 80) s =
-  match Stream.peek s with
-    Some c ->
-      if mem_string ~char:c escapes then begin
-        Stream.junk s;
-        Buffer.add_char buf (Stream.next s);
-        until ~chars ~escapes ~buf s
-      end else if mem_string ~char:c chars then
-        Buffer.contents buf
-      else begin
-        Buffer.add_char buf c;
-        Stream.junk s;
-        until ~chars ~escapes ~buf s
-      end
-  | None ->
-      if Buffer.length buf > 0 then raise (Stream.Error "until")
-      else raise Stream.Failure
-
-let rec ignores ?(chars = " \t") s =
-  match Stream.peek s with
-    Some c when mem_string ~char:c chars ->
-      Stream.junk s; ignores ~chars s
-  | _ -> ()
-
-let parse_field = parser
-    [< ''"'; f = until ~chars:"\"" ~escapes:"\\"; ''"'; _ = ignores >] ->
-      for i = 0 to String.length f - 1 do
-        if f.[i] = '\031' then f.[i] <- '\n'
-      done;
-      f
-  | [< f = until ~chars:",\n\r" >] -> f
-  | [< >] -> ""
-
-let comma = parser [< '','; _ = ignores >] -> ()
-
-let rec parse_list ~item ~sep = parser
-    [< i = item; s >] ->
-      begin match s with parser
-        [< _ = sep; l = parse_list ~item ~sep >] -> i :: l
-      | [< >] -> [i]
-      end
-  | [< >] -> []
-
-let parse_one = parse_list ~item:parse_field ~sep:comma
-
-let lf = parser [< ''\n'|'\r'; _ = ignores ~chars:"\n\r"; _ = ignores >] -> ()
-
-let parse_all = parse_list ~item:parse_one ~sep:lf
-
-let read_file file =
-  let ic = open_in file in
-  let s = Stream.of_channel ic in
-  let data = parse_all s in
-  close_in ic;
-  match data with
-    ("i"::fields) :: ("T"::titles) :: data ->
-      {fields=fields; titles=titles; data=List.map ~f:List.tl data}
-  | titles :: data ->
-      {fields=titles; titles=titles; data=data}
-  | _ -> failwith "Insufficient data"
-
-let print_string s =
-  Format.print_char '"';
-  for i = 0 to String.length s - 1 do
-    match s.[i] with
-      '\'' -> Format.print_char '\''
-    | '"' -> Format.print_string "\\\""
-    | '\160'..'\255' as c -> Format.print_char c
-    | c -> Format.print_string (Char.escaped c)
-  done;
-  Format.print_char '"'  
-
-(*
-#install_printer print_string;;
-*)
-
-open GMain
-
-let field_widths =
-  [ "i", 0;
-    "ATTR", 0;
-    "NAME", 17;
-    "NAPR", 8;
-    "TEL1", 14;
-    "ZIPC", 12;
-    "ADR1", 40;
-    "BRTH", 10;
-    "RMRK", 20;
-    "CHK1", 0;
-    "CHK2", 0;
-    "CHK3", 0;
-    "CHK4", 0;
-    "TIM1", 16;
-    "TIM2", 16;
-    "ALRM", 0;
-    "ATTM", 0;
-  ]
-
-let main argv =
-  if Array.length argv <> 2 then begin
-    prerr_endline "Usage: csview <csv file>";
-    exit 2
-  end;
-  let data = read_file argv.(1) in
-  let w = GWindow.window () in
-  w#misc#realize ();
-  let style = w#misc#style in
-  let font = Gdk.Font.load_fontset "-schumacher-clean-medium-r-normal--13-*-*-*-c-60-*,-mnkaname-fixed-*--12-*" in
-  let w0 = Gdk.Font.char_width font '0' in
-  style#set_font font;
-  w#connect#destroy ~callback:Main.quit;
-  let sw = GBin.scrolled_window ~width:600 ~height:300 ~packing:w#add () in
-  let cl = GList.clist ~titles:data.titles ~packing:sw#add () in
-  List.fold_left data.fields ~init:0 ~f:
-    begin fun acc f ->
-      let width = try List.assoc f field_widths with Not_found -> -1 in
-      if width = 0 then
-        cl#set_column ~visibility:false acc
-      else begin
-        if width > 0 then cl#set_column ~width:(width * w0) acc
-        else cl#set_column ~auto_resize:true acc;
-        if f = "NAPR" || f = "TIM1" || f = "CLAS" then
-          cl#set_sort ~auto:true ~column:acc ();
-        try
-          let ali = GBin.alignment_cast (cl#column_widget acc) in
-          let lbl = GMisc.label_cast (List.hd ali#children) in
-          lbl#set_alignment ~x:0. ()
-        with _ ->
-          prerr_endline ("No column widget for field " ^ f)
-      end;
-      succ acc
-    end;
-  List.iter data.data
-    ~f:(fun l -> if List.length l > 1 then ignore (cl#append l));
-  w#show ();
-  Main.main ()
-
-let _ = main Sys.argv
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/dcalendar.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/dcalendar.ml
deleted file mode 100644 (file)
index 6128506..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-(* $Id$ *)
-
-(* A small calendar *)
-(* Needs Unix module, so use with lablgtk_t *)
-
-open Printf
-
-type date = { mutable year: int; mutable mon: int; mutable mday: int }
-
-    (* Load the schedule data *)
-let calendar_file = Filename.concat (Sys.getenv "HOME") ".camlendar"
-
-let schedule =
-  try
-    let ichan = open_in calendar_file in
-    let (s : (int * int * int, string) Hashtbl.t) =
-      Marshal.from_channel ichan in
-    close_in ichan;
-    s
-  with Sys_error msg ->
-    prerr_endline msg; flush stderr;
-    Hashtbl.create 13;;
-
-    (* Saves the schedule data when the application terminates *)
-at_exit (fun () ->
-  let ochan = open_out calendar_file in
-  Marshal.to_channel ochan schedule ~mode: [];
-  close_out ochan);;
-
-    (* date: Current date initialized to "today" *)
-let date =
-  let tm = Unix.localtime (Unix.time ()) in
-  { year = 1900 + tm.Unix.tm_year; mon = tm.Unix.tm_mon; mday = 1 }
-
-
-    (* previous_month, next_month: change application status *)
-let previous_month () =
-  date.mday <- 1;
-  if date.mon = 0 then
-    (date.year <- date.year - 1; date.mon <- 11)
-  else date.mon <- date.mon - 1
-
-let next_month () =
-  date.mday <- 1;
-  if date.mon = 11 then (date.year <- date.year + 1; date.mon <- 0)
-  else date.mon <- date.mon + 1
-
-    (* leap, mon_name, wday_name: Calendar related function and data *)
-let leap year =
-  (year mod 400 = 0) or
-  (year mod 4 = 0) & (year mod 100 <> 0)
-
-let mdays_in_month = [|31; 28; 31; 30; 31; 30; 31; 31; 30; 31; 30; 31|]
-
-let mon_name =
-  [|"Jan"; "Feb"; "Mar"; "Apr"; "May"; "Jun";
-    "Jul"; "Aug"; "Sep"; "Oct"; "Nov"; "Dec"|]
-
-let wday_name =
-  [|"Sun"; "Mon"; "Tue"; "Wed"; "Thu"; "Fri"; "Sat"|]
-
-let s_normal = 0 and s_focused = 1 and s_planned = 2
-let styles =
-  let default = (Obj.magic () : GObj.style) in
-  [| default; default; default |]
-
-   (* class date_button: one button for each day in the month *)
-class date_button i (calendar : GPack.table) =
-  let mday = i + 1 in
-
-  object (self)
-    val widget = GButton.button ~label: (string_of_int mday) ~show: false ()
-    val mday = mday
-    val mutable show = false
-    val mutable have_plan = false
-
-    method widget = widget
-    method focus_on =
-      date.mday <- mday;
-      widget#misc#set_style styles.(s_focused)
-    method focus_off =
-      widget#misc#set_style styles.(if have_plan then s_planned else s_normal)
-    method set_plan =
-      have_plan <- true;
-      widget#misc#set_style styles.(s_planned)
-    method unset_plan =
-      have_plan <- false;
-      widget#misc#set_style styles.(s_normal)
-       
-    method show wday0 =
-      if not show then
-       let top = (mday + wday0) / 7 + 1
-       and left = (mday + wday0) mod 7 in
-       calendar#attach ~left ~top ~expand:`BOTH widget#coerce;
-       widget#misc#show ();
-       show <- true
-           
-    method hide =
-      if show then
-       (widget#misc#hide ();
-        calendar#remove widget#coerce;
-        show <- false)
-  end
-
-let update_calendar (calendar : GPack.table) (buttons : date_button array) =
-  let now = Unix.localtime (Unix.gettimeofday ()) in
-  let _, first = Unix.mktime { now with 
-                              Unix.tm_mday = 1;
-                              Unix.tm_mon = date.mon;
-                              Unix.tm_year = date.year - 1900 } in
-
-  (* wday0: day of the week of the zero'th day in the month *)
-  let wday0 = (first.Unix.tm_wday - 1 + 7) mod 7 in
-  
-  let ndays =
-    if date.mon = 1 & leap date.year then mdays_in_month.(date.mon) + 1
-    else mdays_in_month.(date.mon) in
-
-  Array.iter ~f: (fun button -> button#hide)
-    buttons;
-
-  for i = 0 to ndays - 1 do buttons.(i)#show wday0 done
-
-let create_GUI () =
-  
-  (* views part *)
-
-  let win =
-    GWindow.window ~title: "Camlendar" ~show: true
-      ~allow_shrink: false ~allow_grow: false () in
-  win#event#connect#delete
-    ~callback: (fun _ -> GMain.Main.quit (); exit 0; false);
-
-  let style = win#misc#style#copy in
-  styles.(s_normal) <- style;
-  
-  let style = style#copy in
-  style#set_bg [`NORMAL, `NAME "light green";
-               `PRELIGHT, `NAME "light green"];
-  styles.(s_focused) <- style;
-
-  styles.(s_focused) <- style;
-  let style = style#copy in
-  style#set_bg [`NORMAL, `NAME "sky blue";
-               `PRELIGHT, `NAME "sky blue"];
-  styles.(s_planned) <- style;
-
-  let vbox = GPack.vbox ~packing: win#add () in
-  let packing = vbox#add in
-  let toolbar = GButton.toolbar ~style: `TEXT ~packing () in
-
-  let prev =
-    toolbar#insert_button ~text: "Prev" ~tooltip: "Show previous month" () in
-  let next =
-    toolbar#insert_button ~text: "Next" ~tooltip: "Show next month" () in
-  
-  let calendar =
-    GPack.table ~homogeneous: true ~rows: 7 ~columns: 7
-      ~border_width: 10 ~row_spacings: 2 ~col_spacings: 2 ~packing () in
-
-  Array.iteri
-    ~f: (fun i wday ->
-      ignore (GButton.button ~label: wday
-               ~packing:(calendar#attach ~top: 0 ~left: i ~expand:`BOTH) ()))
-    wday_name;
-
-  let buttons =
-    Array.init 31 ~f: (fun i -> new date_button i calendar) in
-
-  let date_view = GMisc.label ~justify: `CENTER ~packing () in
-
-  let text = GEdit.text ~editable: true ~width: 70 ~height: 50 ~packing () in
-
-  (* Controls part *)
-
-  let save_text () =
-    let data = text#get_chars ~start: 0 ~stop: text#length in
-    let key = (date.year, date.mon, date.mday) in
-    Hashtbl.remove schedule key;
-    if data <> "" then
-      (Hashtbl.add schedule ~key ~data;
-       buttons.(date.mday - 1)#set_plan)
-    else buttons.(date.mday - 1)#unset_plan in
-
-  let restore_text () =
-    text#delete_text ~start: 0 ~stop: text#length;
-    try
-      text#insert_text ~pos: 0
-       (Hashtbl.find schedule (date.year, date.mon, date.mday));
-      ()
-    with Not_found -> () in
-
-  let update_date_view () =
-    date_view#set_text (sprintf "%d %s, %d\n"
-                         date.mday mon_name.(date.mon) date.year) in
-  
-  let update_view () =
-    update_calendar calendar buttons;
-    update_date_view ();
-    Array.iteri ~f: (fun i button ->
-      (try
-       Hashtbl.find schedule (date.year, date.mon, i + 1);
-       button#set_plan
-      with Not_found -> button#unset_plan);
-      button#focus_off) buttons;
-    win#set_title (sprintf "Camlendar: %s, %d"
-                    mon_name.(date.mon) date.year) in
-
-  prev#connect#clicked
-    ~callback: (fun () ->
-      save_text ();
-      previous_month ();
-      
-      update_view ();
-      restore_text ();
-      buttons.(0)#focus_on);
-  
-  next#connect#clicked
-    ~callback: (fun () ->
-      save_text ();
-      next_month ();
-      
-      update_view ();
-      restore_text ();
-      buttons.(0)#focus_on);
-  
-  Array.iteri
-    ~f: (fun i button ->
-      button#widget#connect#clicked
-       ~callback: (fun () ->
-         save_text ();
-         buttons.(date.mday - 1)#focus_off;
-
-         button#focus_on;
-         restore_text ();
-         update_date_view ());
-      ())
-    buttons;
-
-  update_view ();
-  buttons.(0)#focus_on;;
-
-GMain.Main.init ();
-print_endline (GtkMain.Main.set_locale ());
-flush stdout;
-create_GUI ();
-GMain.Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/drawing.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/drawing.ml
deleted file mode 100644 (file)
index a4623ba..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let window = GWindow.window ~show:true ()
-
-let w = window#misc#window
-let drawing = new GDraw.drawable w
-
-let redraw _ =
-  drawing#polygon ~filled:true
-    [ 10,100; 35,35; 100,10; 165,35; 190,100;
-      165,165; 100,190; 35,165; 10,100 ];
-  false
-
-let _ =
-  window#connect#destroy ~callback:Main.quit;
-  window#event#connect#after#configure ~callback:redraw;
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/editor.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/editor.ml
deleted file mode 100644 (file)
index 5e3da80..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let file_dialog ~title ~callback ?filename () =
-  let sel =
-    GWindow.file_selection ~title ~modal:true ?filename () in
-  sel#cancel_button#connect#clicked ~callback:sel#destroy;
-  sel#ok_button#connect#clicked ~callback:
-    begin fun () ->
-      let name = sel#get_filename in
-      sel#destroy ();
-      callback name
-    end;
-  sel#show ()
-
-class editor ?packing ?show () = object (self)
-  val text = GEdit.text ~editable:true ?packing ?show ()
-  val mutable filename = None
-
-  method text = text
-
-  method load_file name =
-    try
-      let ic = open_in name in
-      filename <- Some name;
-      text#freeze ();
-      text#delete_text ~start:0 ~stop:text#length;
-      let buf = String.create 1024 and len = ref 0 in
-      while len := input ic ~buf ~pos:0 ~len:1024; !len > 0 do
-       if !len = 1024 then text#insert buf
-       else text#insert (String.sub buf ~pos:0 ~len:!len)
-      done;
-      text#set_point 0;
-      text#thaw ();
-      close_in ic
-    with _ -> ()
-
-  method open_file () = file_dialog ~title:"Open" ~callback:self#load_file ()
-
-  method save_dialog () =
-    file_dialog ~title:"Save" ?filename
-      ~callback:(fun file -> self#output ~file) ()
-
-  method save_file () =
-    match filename with
-      Some file -> self#output ~file
-    | None -> self#save_dialog ()
-
-  method output ~file =
-    try
-      if Sys.file_exists file then Sys.rename ~src:file ~dst:(file ^ "~");
-      let oc = open_out file in
-      output_string oc (text#get_chars ~start:0 ~stop:text#length);
-      close_out oc;
-      filename <- Some file
-    with _ -> prerr_endline "Save failed"
-end
-
-let window = GWindow.window ~width:500 ~height:300 ~title:"editor" ()
-let vbox = GPack.vbox ~packing:window#add ()
-
-let menubar = GMenu.menu_bar ~packing:vbox#pack ()
-let factory = new GMenu.factory menubar
-let accel_group = factory#accel_group
-let file_menu = factory#add_submenu "File"
-let edit_menu = factory#add_submenu "Edit"
-
-let hbox = GPack.hbox ~packing:vbox#add ()
-let editor = new editor ~packing:hbox#add ()
-let scrollbar = GRange.scrollbar `VERTICAL ~packing:hbox#pack ()
-
-open GdkKeysyms
-
-let _ =
-  window#connect#destroy ~callback:Main.quit;
-  let factory = new GMenu.factory file_menu ~accel_group in
-  factory#add_item "Open..." ~key:_O ~callback:editor#open_file;
-  factory#add_item "Save" ~key:_S ~callback:editor#save_file;
-  factory#add_item "Save as..." ~callback:editor#save_dialog;
-  factory#add_separator ();
-  factory#add_item "Quit" ~key:_Q ~callback:window#destroy;
-  let factory = new GMenu.factory edit_menu ~accel_group in
-  factory#add_item "Copy" ~key:_C ~callback:editor#text#copy_clipboard;
-  factory#add_item "Cut" ~key:_X ~callback:editor#text#cut_clipboard;
-  factory#add_item "Paste" ~key:_V ~callback:editor#text#paste_clipboard;
-  factory#add_separator ();
-  factory#add_check_item "Word wrap" ~active:false
-    ~callback:editor#text#set_word_wrap;
-  factory#add_check_item "Read only" ~active:false
-    ~callback:(fun b -> editor#text#set_editable (not b));
-  window#add_accel_group accel_group;
-  editor#text#event#connect#button_press
-    ~callback:(fun ev ->
-      let button = GdkEvent.Button.button ev in
-      if button = 3 then begin
-       file_menu#popup ~button ~time:(GdkEvent.Button.time ev); true
-      end else false);
-  editor#text#set_vadjustment scrollbar#adjustment;
-  window#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/entry.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/entry.ml
deleted file mode 100644 (file)
index 30f3c3d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-(* $Id$ *)
-
-open Printf
-open GMain
-
-let enter_callback entry =
-  printf "Entry contents: %s\n" entry#text;
-  flush stdout
-
-let entry_toggle_editable button entry =
-  entry#set_editable button#active
-
-let entry_toggle_visibility button entry =
-  entry#set_visibility button#active
-
-let main () =
-
-  let window = GWindow.window ~title: "GTK Entry" ~width: 200 ~height: 100 () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let vbox = GPack.vbox ~packing: window#add () in
-
-  let entry = GEdit.entry ~max_length: 50 ~packing: vbox#add () in
-  entry#connect#activate ~callback:(fun () -> enter_callback entry);
-  entry#set_text "Hello";
-  entry#append_text " world";
-  entry#select_region ~start:0 ~stop:entry#text_length;
-
-  let hbox = GPack.hbox ~packing: vbox#add () in
-
-  let check = GButton.check_button ~label: "Editable" ~active: true
-      ~packing: hbox#add () in
-  check#connect#toggled ~callback:(fun () -> entry_toggle_editable check entry);
-
-  let check =
-    GButton.check_button ~label:"Visible" ~active:true ~packing:hbox#add () in
-  check#connect#toggled
-    ~callback:(fun () -> entry_toggle_visibility check entry);
-
-  let button = GButton.button ~label: "Close" ~packing: vbox#add () in
-  button#connect#clicked ~callback:window#destroy;
-  button#grab_default ();
-
-  window#show ();
-
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/events.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/events.ml
deleted file mode 100644 (file)
index 91a9872..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let _ =
-  let window = GWindow.window () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let text = GEdit.text ~editable:true ~packing:window#add () in
-  text#event#connect#button_press ~callback:
-    begin fun ev ->
-      GdkEvent.Button.button ev = 3 &&
-      GdkEvent.get_type ev = `BUTTON_PRESS &&
-      begin
-       let pos = text#position in
-       GdkEvent.Button.set_button ev 1;
-       text#event#send (GdkEvent.coerce ev);
-       Printf.printf "Position is %d.\n" text#position;
-       flush stdout;
-       text#set_position pos;
-       true
-      end
-    end;
-  window#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/fifteen.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/fifteen.ml
deleted file mode 100644 (file)
index efdf51f..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GObj
-open GMain
-
-class position ~init_x ~init_y ~min_x ~min_y ~max_x ~max_y = object
-  val mutable x = init_x
-  val mutable y = init_y
-  method current = (x, y)
-  method up ()    = if y > min_y then y <- y-1 else (); (x, y)
-  method down ()  = if y < max_y then y <- y+1 else (); (x, y)
-  method left ()  = if x > min_x then x <- x-1 else (); (x, y)
-  method right () = if x < max_x then x <- x+1 else (); (x, y)
-end
-
-let game_init () = (* generate initial puzzle state *)
-  let rec game_aux acc rest n_invert =
-    let len = List.length rest in
-    if len=0 then
-      if n_invert mod 2 = 0 then
-       acc (* to be solvable, n_invert must be even *)
-      else
-       (List.hd (List.tl acc))::(List.hd acc)::(List.tl (List.tl acc))
-    else begin
-      let rec extract n xs =
-       if (n=0) then (List.hd xs, List.tl xs)
-       else
-         let (ans, ys) = extract (n-1) (List.tl xs) in
-          (ans, List.hd xs :: ys) in
-      let ran = Random.int len in
-      let (elm, rest1) = extract ran rest in
-      let rec count p xs = match xs with
-       [] -> 0
-      |        y :: ys -> let acc = count p ys in
-                if p y then 1+acc else acc
-      in
-      let new_n_invert = count (fun x -> elm > x) acc in
-      game_aux (elm :: acc) rest1 (n_invert+new_n_invert)
-    end in
-  let rec from n = if n=0 then [] else n :: from (n-1) in
-  game_aux [] (from 15) 0
-      
-let _ = Random.init (int_of_float (Sys.time () *. 1000.))
-let window = GWindow.window ()
-let _ = window#connect#destroy ~callback:GMain.Main.quit
-
-let tbl = GPack.table ~rows:4 ~columns:4 ~homogeneous:true ~packing:window#add ()
-let dummy = GMisc.label ~text:"" ~packing:(tbl#attach ~left:3 ~top:3) ()
-let arr = Array.create_matrix ~dimx:4 ~dimy:4 dummy
-let init = game_init ()
-let _ =
-  for i = 0 to 15 do
-    let j = i mod 4  in
-    let k = i/4 in
-    let frame =
-      GBin.frame ~shadow_type:`OUT ~width:32 ~height:32
-       ~packing:(tbl#attach ~left:j ~top:k) () in
-    if i < 15 then
-      arr.(j).(k) <-
-       GMisc.label ~text:(string_of_int (List.nth init i))
-         ~packing:frame#add ()
-  done
-let pos = new position ~init_x:3 ~init_y:3 ~min_x:0 ~min_y:0 ~max_x:3 ~max_y:3
-    
-open GdkKeysyms
-
-let _ =
-  window#event#connect#key_press ~callback:
-    begin fun ev ->
-      let (x0, y0) = pos#current in
-      let wid0 = arr.(x0).(y0) in
-      let key = GdkEvent.Key.keyval ev in
-      if key = _q || key = _Escape then (Main.quit (); exit 0) else
-      let (x1, y1) =
-       if key = _h || key = _Left then 
-          pos#right ()
-       else if key = _j || key = _Down then
-         pos#up ()
-       else if key = _k || key = _Up then
-         pos#down ()
-       else if key = _l || key = _Right then
-         pos#left ()
-       else (x0, y0)
-      in
-      let wid1 = arr.(x1).(y1) in
-      wid0#set_text (wid1#text);
-      wid1#set_text "";
-      true
-    end
-             
-let main () = 
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/fixed_editor.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/fixed_editor.ml
deleted file mode 100644 (file)
index 1cde124..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-open Gdk  
-open Gtk
-open GObj
-open GMain
-
-let dnd_source_window () =
-  let window = GWindow.window ~position:`MOUSE () in
-  let vbx = GPack.vbox ~border_width:10 ~packing:window#add ()
-  in   
-  let evb = GBin.event_box ~border_width:0 ~packing:vbx#add () in
-  let frm = GBin.frame ~shadow_type:`OUT ~packing:evb#add () in
-  let lbl = GMisc.label ~text:"hello" ~packing:frm#add () in
-  let lbl2 = GMisc.label ~text:"drag from here!" ~packing:vbx#add () in
-  let targets = [ { target = "STRING"; flags = []; info = 0} ] in
-  begin
-    window#show ();
-    evb#drag#source_set targets ~modi:[`BUTTON1] ~actions:[`COPY];
-    evb#drag#connect#data_get ~callback: begin
-      fun _ data ~info ~time:_ ->
-       data#set ~typ:data#target ~format:0 ~data:"hello! "
-    end
-  end
-
-let corner_width  = 7  
-let corner_height = 7
-
-type drag_action_type =
-    GB_DRAG_NONE
-  | GB_MIDDLE
-  | GB_TOP
-  | GB_BOTTOM
-  | GB_LEFT
-  | GB_RIGHT
-  | GB_TOP_LEFT
-  | GB_TOP_RIGHT
-  | GB_BOTTOM_LEFT
-  | GB_BOTTOM_RIGHT
-
-let get_position_in_widget w ~x ~y ~width ~height =
-  if (x <= corner_width) then
-    if (y <= corner_height) then
-      GB_TOP_LEFT
-    else if (y >= height-corner_width) then
-      GB_BOTTOM_LEFT
-    else GB_LEFT
-  else if (x >= width-corner_width) then
-    if (y <= corner_height) then
-      GB_TOP_RIGHT
-    else if (y >= height-corner_width) then
-      GB_BOTTOM_RIGHT
-    else GB_RIGHT
-  else if (y <= corner_height) then
-      GB_TOP
-    else if (y >= height-corner_width) then
-      GB_BOTTOM
-    else GB_MIDDLE
-    
-class drag_info = object
-  val mutable drag_action = GB_DRAG_NONE
-  val mutable drag_offset = (0, 0)
-  val mutable toimen      = (0, 0)
-  val mutable drag_widget = None
-  method drag_action = drag_action
-  method drag_offset = drag_offset
-  method toimen = toimen (* coord. of opposite corner *)
-  method set_drag_widget (w : GObj.widget) = begin
-    match drag_widget with
-      None -> begin
-       GMain.Grab.add w;
-       drag_widget <- Some w;
-       ()
-      end
-    | Some w -> ()
-  end
-  method unset_drag_widget () = begin
-    match drag_widget with
-      Some w -> begin
-       GMain.Grab.remove w;
-       drag_widget <- None;
-       ()
-      end
-    | None -> ()
-  end
-  method set_drag_offset ~x ~y = drag_offset <- (x, y)
-  method set_drag_action (w : Gdk.window) ~x ~y =
-    begin
-      let (x0, y0) = Window.get_position w in
-      let (width, height) = Window.get_size w in
-      drag_action <- get_position_in_widget w ~x ~y ~width ~height;
-      let (x1, y1) = (x0+width, y0+height) in
-      toimen <-
-       match drag_action with
-         GB_TOP_LEFT     -> (x1, y1)
-       | GB_BOTTOM_LEFT  -> (x1, y0)
-       | GB_TOP_RIGHT    -> (x0, y1)
-       | GB_BOTTOM_RIGHT -> (x0, y0)
-       | GB_TOP          -> (x0, y1)
-       | GB_BOTTOM       -> (x0, y0)
-       | GB_LEFT         -> (x1, y0)
-       | GB_RIGHT        -> (x0, y0)
-       |  _              -> (-1, -1) 
-    end
-  method unset_drag_action () = drag_action <- GB_DRAG_NONE
-end
-
-    
-let to_grid g x = x - (x mod g)
-  
-let to_grid2 g (x, y) = (to_grid g x, to_grid g y)
-
-class fix_editor ~width ~height ~packing =
-  let info = new drag_info in
-  let fix = GPack.fixed ~width ~height ~packing () in
-  let _ = fix#misc#realize () in
-  let fix_window = fix#misc#window in
-  let fix_drawing = new GDraw.drawable fix_window in
-
-  object (self)
-    inherit GObj.widget fix#as_widget
-    val mutable grid = 1
-    method set_grid g =
-      if (grid != g) then begin
-       let pix =
-          GDraw.pixmap ~window:fix ~width:g ~height:g ~mask:true () in
-       let c = fix#misc#style#bg `NORMAL in
-       pix#set_foreground (`COLOR c);
-       pix#rectangle ~filled:true ~x:0 ~y:0 ~width:g ~height:g ();
-       pix#set_foreground `BLACK;
-       pix#point ~x:0 ~y:0;
-       Gdk.Window.set_back_pixmap (fix#misc#window) (`PIXMAP pix#pixmap)
-      end;
-      grid <- g
-
-    method new_child ~name ~x ~y ~width ~height ~callback =
-      let evb = GBin.event_box ~border_width:0 ~packing:fix#add () in
-      let lbl = GMisc.label ~text:name ~width ~height ~packing:evb#add () in
-      evb#misc#realize ();
-      evb#misc#set_geometry ~x ~y ();
-      self#connect_signals ~ebox:evb ~widget:lbl#coerce ~callback;
-      ()
-
-    method private connect_signals
-      ~ebox:(ebox : GBin.event_box) ~widget:(widget : widget) ~callback:cbfun =
-      let drawing = new GDraw.drawable (ebox#misc#window) in
-      let draw_id = ref None in
-      let exps_id = ref None in
-      let on_paint _ =
-       let (width, height) = Window.get_size (ebox#misc#window) in begin
-         drawing#set_foreground `BLACK;
-         drawing#rectangle ~filled:true ~x:0 ~y:0
-           ~width:corner_width ~height:corner_height ();
-         drawing#rectangle ~filled:true ~x:(width-corner_width) ~y:0
-           ~width:corner_width ~height:corner_height ();
-         drawing#rectangle ~filled:true
-           ~x:(width-corner_width)
-           ~y:(height-corner_height)
-           ~width:corner_width ~height:corner_height ();
-         drawing#rectangle ~filled:true
-           ~x:0
-           ~y:(height-corner_height)
-           ~width:corner_width ~height:corner_height ();
-         drawing#rectangle ~filled:false
-           ~x:0 ~y:0 ~width:(width-1) ~height:(height-1) ();
-       end
-      in
-      ebox#event#connect#button_press ~callback:
-       begin fun ev -> 
-         let bx = int_of_float (GdkEvent.Button.x ev) in
-         let by = int_of_float (GdkEvent.Button.y ev) in
-         info#set_drag_action (ebox#misc#window) ~x:bx ~y:by;
-         info#set_drag_offset ~x:bx ~y:by;
-         true
-       end;
-      ebox#event#connect#motion_notify ~callback:
-       begin fun ev ->
-         info#set_drag_widget ebox#coerce;
-         let action = info#drag_action in
-         let (mx, my) = fix#misc#pointer in
-         let (ox, oy) = info#drag_offset in
-         begin match action with
-           GB_MIDDLE ->
-             let (nx, ny) = to_grid2 grid (mx-ox, my-oy) in
-             ebox#misc#set_geometry ~x:nx ~y:ny ();
-             if cbfun ~x:nx ~y:ny ~width:(-2) ~height:(-2) then
-               ()
-             else (* should we undo ? *) ()
-         | GB_DRAG_NONE -> () (* do nothing *)
-         | GB_TOP_LEFT | GB_BOTTOM_LEFT
-         | GB_TOP_RIGHT | GB_BOTTOM_RIGHT ->
-             let (toi_x, toi_y) =  info#toimen in
-             let (mx, my) = to_grid2 grid (mx, my) in
-             let (lx, rx) =
-               if mx<toi_x then (mx, toi_x) else (toi_x, mx) in
-             let (ty, by) =
-               if my<toi_y then (my, toi_y) else (toi_y, my) in
-             let (w, h) = (rx-lx, by-ty) in
-             ebox#misc#set_geometry ~x:lx ~y:ty ~width:w ~height:h ();
-             if cbfun ~x:lx ~y:ty ~width:w ~height:h then
-               ()
-             else (* should we undo ? *) ()
-         | GB_TOP | GB_BOTTOM ->
-             let (lx, toi_y) = info#toimen in
-             let my = to_grid grid my in
-             let (ty, by) = if my<toi_y then (my, toi_y) else (toi_y, my) in
-             let h = by-ty in
-             ebox#misc#set_geometry ~y:ty ~height:h ();
-             if cbfun ~x:lx ~y:ty ~width:(-2) ~height:h then
-               ()
-             else (* should we undo ? *) ()
-         | GB_LEFT | GB_RIGHT ->
-             let (toi_x, ty) = info#toimen in
-             let mx = to_grid grid mx in
-             let (lx, rx) = if mx<toi_x then (mx, toi_x) else (toi_x, mx) in
-             let w = rx-lx in 
-             ebox#misc#set_geometry ~x:lx ~width:w ();
-             if cbfun ~x:lx ~y:ty ~width:w ~height:(-2) then
-               ()
-             else (* should we undo ? *) ()
-         end;
-         true
-       end;
-      ebox#event#connect#button_release ~callback:
-       begin fun ev -> 
-         info#unset_drag_action ();
-         info#unset_drag_widget ();
-         true
-       end;
-      exps_id := Some (ebox#event#connect#after#expose
-                         ~callback:(fun _ -> on_paint(); false));
-      draw_id := Some (ebox#misc#connect#draw ~callback:on_paint);
-      ()
-    initializer
-      fix#drag#dest_set ~actions:[`COPY]
-       [ { target = "STRING"; flags = []; info = 0} ];
-      fix#drag#connect#data_received ~callback: begin
-       fun context ~x ~y data ~info ~time ->
-         let name = data#data in
-         let _ = self#new_child ~name ~x ~y ~width:32 ~height:32
-             ~callback:(fun ~x ~y ~width ~height -> true) in
-(*               Printf.printf "%s %d %d\n" (data#data) x y;
-                 flush stdout; *)
-         context#finish ~success:true ~del:false ~time;
-      end;
-      ()
-  end
-    
-(* the following is for test only *)
-let window1 () =    
-  let window = GWindow.window () in
-  let _ = window#connect#destroy ~callback: Main.quit in
-  let fix = new fix_editor ~width:640 ~height:480 ~packing:window#add in
-  fix#set_grid 5;
-  let setter = fix#new_child ~name:"hello" ~x:100 ~y:200 ~width:32 ~height:32
-      ~callback:begin fun ~x ~y ~width ~height ->
-       (* Printf.printf "name=%s, x=%d, y=%d, width=%d, height=%d\n"
-                     "hello" x y width height;
-       flush stdout; *)
-       true
-      end in
-   window#show ();
-  ()
-
-
-    
-let main () =
-  window1 ();
-  dnd_source_window ();
-  Main.main ()
-  
-let _ = main ()
-
-(* Todo
-   
-   change mouse cursor
-   resize fixed itself
-   remove_child
-   (drag and) drop
-   
-*)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/fixpoint.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/fixpoint.ml
deleted file mode 100644 (file)
index c33b74d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let rec fix ~f ~eq x =
-  let x' = f x in
-  if eq x x' then x
-  else fix ~f ~eq x'
-
-let eq_float x y = abs_float (x -. y) < 1e-13
-
-let _ =
-  let top = GWindow.window () in
-  top#connect#destroy ~callback:Main.quit;
-  let vbox = GPack.vbox ~packing: top#add () in
-  let entry = GEdit.entry ~max_length: 20 ~packing: vbox#add () in
-  let tips = GData.tooltips () in
-  tips#set_tip entry#coerce ~text:"Initial value for fix-point";
-  let result =
-    GEdit.entry ~max_length: 20 ~editable: false ~packing: vbox#add () in
-
-  entry#connect#activate ~callback:
-    begin fun () ->
-      let x = try float_of_string entry#text with _ -> 0.0 in
-      entry#set_text (string_of_float (cos x));
-      let res = fix ~f:cos ~eq:eq_float x in
-      result#set_text (string_of_float res)
-    end;
-  top#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/hello.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/hello.ml
deleted file mode 100644 (file)
index 15ede9a..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let window = GWindow.window ~border_width: 10 ()
-
-let button = GButton.button ~label:"Hello World" ~packing: window#add ()
-
-let main () =
-  window#event#connect#delete 
-    ~callback:(fun _ -> prerr_endline "Delete event occured"; true);
-  window#connect#destroy ~callback:Main.quit;
-  button#connect#clicked ~callback:(fun () -> prerr_endline "Hello World");
-  button#connect#clicked ~callback:window#destroy;
-  window#show ();
-  Main.main ()
-
-let _ = Printexc.print main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/image.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/image.ml
deleted file mode 100644 (file)
index faf82cf..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-(* $Id$ *)
-
-open GMain
-open Gdk
-
-(* load image *)
-let buf = String.create (256*256*3)
-let ic = open_in_bin "image256x256.rgb"
-let _ = 
-  really_input ic ~buf:buf ~pos:0 ~len:(256*256*3);
-  close_in ic
-
-let rgb_at x y =
-  let offset = (y * 256 + x) * 3 in
-  (int_of_char buf.[offset  ],
-   int_of_char buf.[offset+1],
-   int_of_char buf.[offset+2])
-
-(* let id = Thread.create GtkThread.main () *)
-
-(* Choose a visual appropriate for RGB *)
-let _ =
-  Gdk.Rgb.init ();
-  GtkBase.Widget.set_default_visual (Gdk.Rgb.get_visual ());
-  GtkBase.Widget.set_default_colormap (Gdk.Rgb.get_cmap ())
-
-(* We need show: true because of the need of visual *)
-let window = GWindow.window ~show:true ~width: 256 ~height: 256 ()
-
-let visual = window#misc#visual
-
-let color_create = Truecolor.color_creator visual
-
-let w = window#misc#window
-let drawing = new GDraw.drawable w
-
-let _ =
-  window#connect#destroy ~callback:Main.quit;
-
-  let image =
-    Image.create ~kind: `FASTEST ~visual: visual ~width: 256 ~height: 256
-  in
-
-  let draw () =
-    for x = 0 to 255 do
-      for y = 0 to 255 do
-        let r,g,b = rgb_at x y in
-        Image.put_pixel image ~x: x ~y: y 
-          ~pixel: (color_create ~red: (r * 256) ~green: (g * 256) ~blue: (b * 256))
-      done
-    done 
-  in
-  let display () =
-    drawing#image image ~xsrc:0 ~ysrc:0 ~xdest:0 ~ydest:0 ~width:256 ~height:256
-  in
-
-  draw (); 
-
-  window#event#connect#after#expose ~callback:
-    begin fun _ ->
-      display (); false
-    end;
-  (* Thread.join id *)
-
-  window#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/image256x256.rgb b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/image256x256.rgb
deleted file mode 100644 (file)
index 25d4995..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-\94·â\95ºÃ\9b±Ã\93­Ã\8f\9fÃ’\9f¤Ã\9f¦Î¤¦Ûª¤ÎªªÚ¯\9eפ\95á\99Ô±¬â­©Þ®§ç\9e®Ã\9a¶É\94¸Ë¡¶¼¥®Å¢³Ó ´Îª½Æ¨¼Ó¬·Ó¶´ÃµÀÆ´°¼¬¾À·³ÄÄö¾½ÂÇÀ¼¿½·ÆĹÑÆÃÂ÷ÃÌÅÃÉÙ¼ÃÓ¿ÊÃÆÃÇÄãÃÕßÃØÕÃÎÜÌÇãÑÑâÙÔ×ÚÈâÈÔÜÄÌØÈÒÒÇÃ×ÃÅÛÃÃáÇËàÊËêËÚð½×ïÅáíËÞõ¼ñø¿âã·Úæ¾ÜÙÈáâÅÜÙÃÖ×®Ö̳ÞȱØÉ·ÃÔ²ÑØ«ÑÑ¡ÎÃ\8eÃ’Ãœ\97ÔØ\8càÃ\91ÖÊ\8fü\83ɼ\88μ\88ÃÃ\90ÔËzãÇwØÉ\80ÚÆ{âÎ\7fçÓ\89Ã×\85á×\82ÖÜ\7fÓÞ\8aÙÔ\93ØØ\8cÓØ\82Îá\86ÃŽÃ’|ÛàsÓÛzÞ×ráÙyàÔs×Üi×ØgäÆkåÑoÃœÃ_áÃdàÈR߸C׸?Ö´GÙ°WÚ°Kç¸EÚ·YÜÊ]ÞÂOÕ¿;Ù½@ÞÃHâË9íÇ<éË@ðÇ8éÉAè´@æ·AòÌ9ÃÄ7é´@ܲ?Þ½Eä¯CÙ²RάLïPÒ¡Ré]̨RÀ¿UÀ²XÉ©FÌ´JñPŹFËÃJÄ¿FÆÄQȼDÒ°OÔ­DدHÒ³PѵPɶYÃÄ^Ë¿WÙ¬PÃŽ\9e[ѧWتOˬWèYÃ\98ZÃŽ\9ddØ£ZÌ·XðEŹPε\îN½»T½³Y´ÃY¶¸N¹¶D°³S±¨YǬMª¬U¦¬[§®@ª®T ¯M¥¢M£\9eZ \9cG¬\91E£\91KÂ¥\8fY¢\8cK·\8f[¨\85S¦\97E\9e\90N§\90`¡\96R\9d\98X\9f\83[\91\86Q\9a\82S\9a\91R\99\87U§\80W©\80T\9c\87J¢~Q\9c~C\96tO\94iL\95rS\94tN©lPªoJ¢zT¯pBÂ¥qI\9e[M lC«gC¤lD±cC³YTÃSI¸OQ´IBÀIE»ZK»OE¸QH°WU¬TK«QG¹VK®TGºV?¬MD¶Z[¾MGÂUK»ZK²QO½NX¸JZÃHP³KV½J[¼ESÀF]Ä@WÆ;VÆ;\\8f·à\9a´Ù\97«Ò\94¬Õ\99 Î£¥Ê¥±Ë¡­Ø¤«Ñª«Ù¬¤Ò¦\9bѯ\9aì ×«¦×¦§Û\9b«Ê\9e¸Å\97®Æ ²À§¾Èª¹Î±¾ÅªÀÆ£Æ˨Ãø¹Ç½¼½¾·¸®²¼½µ»½Â²¼È³ÄÄÀ÷ÂÌ»ÀǽÀÂË¿ÃÀÃÃÃÑÌÃÃÃ…ÃÉÈÞËËÞÀÓßËÃØÌÇäοáÔÄÕÖÒÚÑÃÃÎÑÓËËÑËÃÑÒÆÖÇÄØËÓÙÄÑÞÊÙèÉÛò½á÷ÃÛîÄãö½ëõ¶èé´ÚáÃåøáá¾ÜØ»ÞׯÓ˳ÒƸÊɳÃÑ°Ã飂Ã\9dÆÖ\99È×\8fÎÆ\96ÙÅ\8cÔÂ\95ÌÅ\8fÃÊ\96þ\8fÌÈ\8aÚÃ\83äÉ~ÃÆxÃÆzè×\83ãÖ~ßà\85ÙÜ\81Ùß\88ÑÛ\8cÑË\8eÎ×\91Ã×\85ÎÕxÓØyÙÃ\7fÙÔzÞØnßÚmÔânÙØmÙÑfèÓpÚÕmÃÉjèÂ_ã¾Oç·Oä¹IزUÓ¯VÙºQâ»Kß½MÖÈVÓÃP×À@àÃ>ä¾=ðÀ;ñÌEîÒ8íÌ4êË@ïºDêÀCëÄ4íÄ9ÃÀ8ܹ?æ´BëRçPѲIË®SØ®QÔ¤\õQõUïLëPβDĵDƶ?ηHÒ±RɺKDZR÷K̼GïHÒ¶HÌ®V׿\ÖÀRÛ±XѨUÃ\9f[Æ OÀ¤YɬTÃ’\9dSÖ\9fSÛ§PÕ®ZÔ´WƱIʺLβZÉ»bÅ´Z»¸^±¹U¹ªHº¬D±ªAª¨I±­U°®Q­©Q \9cG¨¡Q¦¤J¤\97G\9d\98N£\8bO¦\8bQ£\8eO \8aP°\84W®\8cQ¬\99Y¦\95O¨\92N¦\94\\9a\96Z\9b\94P \8dR\99\80S\9c\81Y\9b\83U¢\80XÂ¥\87R\9bzL zW¤x\¡\7fP\9cqY\9amR\9boP\9brS©oN©lI\9fvG¦oL\9faW\99]T¨fL©jD³n=¶bD²\C»^I´OR½HJ¸HH¿RFÆJG¼EV²SI«XH©TL´LO¾MBºU9ÀU@·VO¿MAÄUAÃVI·ML¼LV³H\³GZ·PTÂKZ¼IUÈMTÈ@Y½ARº9V\93°Ù¤ºÙ\91«Õ\8b©×\99\9dÃ\9f¤Ã\9f¦Ñ®´Õ²¦Î¨¤Ã´¤Ô£¥Ã«£Ø©«Ø±¢Û¯¨Ã¬¹Ô¢·É¢»Å«³Ã\9bºÃ¡·Ã¦ÂÌ©ÄĨ½À©ÉðÈɶ»¸³¼¸½º³³¼°¶Ã²¼Â¸¸Î»ËÇÿĺÃÅÄÃÎÃÂÀËÈÇÃÒÃÈÌÌÄÔ×¾ÇÑÀÓÛÌÊ×ÔÃÃÑ¿ÙÑÀàÓÊÙÎ×ÒÊÔÖÎÃÚÎÑÔÜÈÃÉÃÓÓÔÕÔ×èÈàæÃáêÉßô»ÚóÂÞî¶êõµçñ¸åëÅÚé´àáÀáóÛÛ©äÙ«ÒÇ´Ôη×ĹÉ΢ÃÃ…\9eÓÑ\94ØÎ\93ÃÑ\95àÃ\8cÔÂ\8aÒÂ\88ÓÆ\82ÔÀ\87ÙÄ\82ßÈzÞÉ|äÌnÛØwíàuèÚuÕêzÜâ\86ßÒ\86×Ñ\83Ñ×\91ÙÓ\89ÃÃŽ\8aÓÃ\87ÓÖ\83ÜÔsåÚ\80ßÃzÚÞjàÃqæâ}êÛlèÃuéÊqÃÈ[áÅ^àÊLÞÄIÞÂLÕ¿Tà­RÔ»RæÉXØ¿X×ÄIãÀFåÃJÃ¥ÃJíÈIíËDփHõÈ:ëÕ9ôÂ9ö¿Fä½7îÇ7á·2áÆ?ç¾FæªKàªWÞ TÒ­VÒ­LÃŽ\9e]Ö\9d^Ò¨Pö^çO̳TöKôMʼBѼIÖ»Kʱ?̯JÕ¯?Ë­FÚ¨Kׯ?Ú¦BÜ´NòSß°K΢IÃÂ¥NêNÆ®OÒ¯JÕ¦LÙ¨IíNѱRŶT·RÄ´O¾º^ǺSòZµ»Q¯²O·©@¿¡G¼¯9°¤?¨ª<²­F¯¥A² E«\96B¢ E®\95@¨\9aQ¨\89R\9d\8bN©\95G¡\91KÂ¥\87Q®\92P°\8aD­\8fN¨\90KÂ¥\8fX\99\8cU \97N\9b\93Y\97\8a^ \89`£\8f_ \90X\9c\86\\9f\81Y\9c\87Z£\83M\93zV\99}U\9cwZ\98iM\92jR¢lU dJ qV¡kP£]L\93W_£`W iLª\M´YT³\O´PQ²RSÂJJ¹DEÂGD·MT·EI²FU¦[O¤GR­BN±MHºJCºZ<°_CÄ]<ÊNBÇKEÃTK¿O[¶N\ÃLMÂGOÃGPÃDWÇJLË:YÄ8Pº4\\98²Þ\9d³Ã\99²Ô\92¢Ã\9aªÙ¡ Ûª¯Ã­±Øµ©Ì³£Ã·«Ñ®¦Ó¶¥Ù´©Ô±ºÈ±¹Ë®¸É±¶Å¨¯Ã¦¹Ë\9d¶Ã\9eÃÅ¡ºÆ¢»Ä¬ÂħÇÆ«Ì»¸¿¶½»¼½¾³º½³´Â³µÌ¹»ÈµÂÑÀ¿Ì¹ÃÀ·ÎĹüÃÓÅÃ×ÅÃÔËÌÒÃÃÃÈÄËÃÔÂÌÖÄËÖÅÛ×ÌÙÃÃŽÃÑÃÙÌÉÑÃÃÚÛÃ××ÃÃËÈÒÃÃ×ÔÛçÃÖðÂÃéÃáîÃáñ·Úì·áëµìè¾ìè½ãæ¸ãÛ´ÞÔµáÛ¯ÃﻆïØȵÖÆ°ÎÀ´ÒȨá̦ÞÄ\92ÃÃŽ\8b×Ê\8bÃÃ\92ÃË\8aÖÅ\85ÕÇ\7fÃÃ’sØÒpæØqä×tåÑtá×vßäuÙâuÕÚnßÕwÒÚ\81ÔÑ\86Ã’ÃŒ\8bàÌ\80ä×\82ÜÑ\80Ã¥Ã\81àÓwæÃ{âÕvâÃ|ìÚ{ïßyéÛoÞÜbâÔYêË\àÅWá¿TÛÀUöSÞ»NÜÃHÞÆS×ÉVÚÃIáÂPê¹EåÆ@ëÆHõÈNցBíËHòÃCêÓ?íÆCéÊ=å¼9æ¹5ã»Bæ°IÞ®NÔ«\Ó¤YÚ \Ó§UÌ®YΣQÒ¡^ɪ]ά_ëXŲPÉ·J÷@úDÖ³HÒ¸DÌ­>̬Aî:׫AÓ­7æ;ÚµGÙ³JÜ®RØ­IìRÇ­RÒ«JÕ²HÒ²SÔ¨NëKÖ«MѸWÄ·P¼ÃV¼ÄY·ÇO¾¾PĽN¸µF³­<³¡?­©:·¦9·¡:±\9e=µ\98Aº¢7µ\936¯\929´\93B§\8aH¢\8aG \8cE§\87> \92E¦\94Iª\94@¦\92=¬\90C¡\94Q\9e\94X\92\8cW\94\93W\95\8fT\99\84_¤\8e]¤\91b£\8bd\9e\8bW£\88O \89O\9e\8aS\93zP\96\83P\93zQ\94sS\97jJ\8fsS\93lV\9bhW\9c\Y\97b\\9bWY\95SY\9d]R¨RT¯RU®PT´MM¶KN½DJ½GMÄFL¶MN®HFÂ¥KOªMU¯DG§EI¤GG®NCµMI·Y=´S@¾QD¼QNÉTUÃ…NZÃ…SUÀTXÀCJÀ>IÉCPÊIYÊAQÃ4\¿.X\9e·Û ¶à\92³à\97ªÎ¡¤Ö¥¦Ó¢²Ô±¦Ó¯©Õ©°Ã¢­Ô©®Õ¥£Ó§¦Õ«±Ì¯¸Ã¯»Å°ÀǬ»Ä¥®¿¦¶½¬À¾¥´É¨º½¡½Â¬Éƶ¾½ÄË®¼º­ºÊ¶»Ã´µ¿²¾¸°¹Æ·¿Ê¬¼Ë¶ÄȮøÓü˾ÇÔÃÌÜÅÅÊÊÂÃÃÆÇÃÊÃÆÒËËÒÊÃØÂØÌËÖÒÃÛÒÀÛËÊÃÃÂÈÕÎÚÑÎÞÃÃÛÌÞâÌÃçÊÙèËØñ¿ãï®ãò³àë½äá¿Þí¿ßß·äÙ±ßÙµéβÃÒ³ê̲ÞÄ­ÒíÑË\9fÙÃ¥ØÆ\9fÙÄ\92ÞÂ\95ÃÃ’\8bÜÓ\88ÃÃ\90ÖÆ\89ÑÊ}ÃÖ\7fÜàqÕßtÞÙsèà|àä|åÙtÃè}àár×âvÑÚ}Ú×~ÓÔ\83àÖ\81ÞÓ}Üà\88ÔÖ}â×qá×oßÓpíâ{èãzêáwïÛlçÓaÜÖaÚÓWÒÊdÞÃ`Ó¾_áÅRãºKÖ·Kæ·UÛµGéÇGæ´Hã¹Iä¿CãÂLîÃIéÊEçÉMíÑCéÂ@èÈJí½AÃÃ…DâÃ<ç±JåºBÚ©DÖ²OÚ­PÞ¬[Þ«OæSɱQÌ°Z¿¨gˤUDzYDzRɲKʹPÑ¿?×·?ر7ø?á@ÃÂ¥?ëAÕ\9e@Ôª4Õ­Iß­HÖ·CÌ´LæQÆ®[ȪVƪFÃ\9cGʧIÓ\9eAèHõM¿¸K˦NɳMŶQȀB÷?²µB¬­=ª¨<² ;µ£2°¤<¢:¼¥=¼\9dA³\9c;§\97F°\8dC³\96N \87L©\95D\9e\8bE¡\8aF«\96;´\915©\92G¦\97OÂ¥\98K\97\8dU\94\94W\97\93R\90\92`\97\83[\98\8f_\9e\91b\8f\93]\9a\99M\9c\86W\9f\8aT\91\88U\91yW\9dtM\90yP¡rK\9cmN£aR¡^Q\96fV `Y\9aZW\94Z]¤]Q©cL¨TU´QL·MW°QT³OF²OS³UK¿OX¼ET°JU¸HZ®JW´FY¬<S«BR­KI·F<½RJ²YHÀRQ´KOÇOV¼KKÃŽSTÉLN½>NÃ=FÃ:TÃBTÃŒ;ZÃ6[Ê4Y\91Â×\98¼Þ\9d±ä\98¦Û\97«ß\9a°Ö¢´Õ£©Û¡µÙ¢µÒ£´Ã¥¨Ë«³Ñ¡°Ó¬¸Ó·¼Ç¯·Ä¡¼Ì\9b²È\9d´Ä©±¿¨¿¹°·º©³Æ³¼º«Æµ»Å­Ãȱ»Ê«¼Æ«½ºµ³¸¶¼Ã²´½³Ä®ȿ¬¾Ê±ÄƷú¹É¾ÌÖÊÒ×ÃÆËØ¿ÉÎÄØÃÅÕÅÎÕÆØÌÌÑÃÃØÆÙÃÄÞÆÇÕÂÑÌÅÃÊÕÌ×ÎÃÜÀÔß¾ÔàÌÙëÃÒíÉÜî¹Úã±âç¸Ãíµåä´àã¸êá¬èß«ïÖªéÌ«àѧçéäʨÙÆ\9bÚÄ\98çË¡àààÉ\91ãÎ\92ÙÃ\94ÓÔ\9bÃË\91ÃÑ\8dÓÒ\83Òá\83ÕÞ\7fÛæ\87ÞÜ\7fØá\80ÚázÞßpßìv×ëwÙÃ\85Üá\87ÓÕ~Õ×\80ÒÕ{ÔÛ\88Öç\87ÜîyÖç{åé\82æàxàäyàÞyçãyïÚqìÕnßÔlÔÈdѾcÕ¶hÔ»^Û»XÖ»SÙ¾XܱLä²Jë¿Lì´Eå¹HàºMâÌMäËQçÃIñÃPìÑHäÄMìÃAæÃ>ãÂAàÄMà¸Hå­LÙ­?à´RÕ¯XÓ®UÙ¬VÛ¦cî_˹`õc̳`ѨKʪDøIÔ·DǵIʳIö:³C¢JÅ¡RÒ£IÕ¦Eʨ=ʬLÖ¯QѪCÆ®FÆ­DѧRÄ¥IÄ\9fLÄ\99KÂ\9a<̧CÆ­;êAɯ9ʨ7ƲF¾·MþE˼?¶µ4º°3±§1±\9f7±\9c.·\91/Â\972´\9f<¶\9d:±\9a=°\8cF¯\95J´\95D¤\9a:¤\90<¦\93?£\8a?¦\883®\856µ\85Eª\91I©\98G\9d\8eN\96\94X\99\8cU\95\84P\9b\88Z\93\8dY\91\83S\8f\8fK\8a\95O\8e\94F\9b\8fM\96\84L\91zY\92yZ\9dyU\9eoW\9feW¤ZR\9f]M\9aiF\94dI\99TR\99Q[\9bRZ¦XP®^LªXM§[TµTJ±MS²UR¯\XµYW±Mb½H\¸O^µMW°?\­?R´CM¹EG¸DD¸OH¾QW´JW±PO·KWÆHNÈLNÃŒHH¾FSÇJWÇ@OÃ1`¼/`Â6UÃŒ,P\92Æá\95Èà ¿×\9a¸Ù¡¸Ú\99´ä¥²Ã¡©Ú©³Î¢¼Ò\9b³Ã\9e¨Ã¡¯Ã¬´Ã¦½Ç®À˧ºÊ\9d°¿£µ¹ µ¼\9d¼½©¾½ª»Å³¯»°Æ²¬À¸À¿©»¿´Ã¿®¿À©¯¼±ªµ©³Ä¤¹Ã©¶»ªÈĢ¹¯¿½§Ì¿²Æ½¼ÖÉÊÜÃÃ…ÃÓÆÎùÃÅÃÞÎÃËÌÈÉÃÎÇÌÉÅÇÃÉÈÓÓÒ¿ÇØÌÒÃÃÒØÃÇÃÄÔÙÇÚÖÉÛãÀÙâÀÕÙÂØà½×è¾ßë½êõÃÒ¹äÛ´ëà®éÓªäÄ°ìɱèȲáѧéÃ\99àÈ£îÇ\98åÖ\9eæÖ\8eæ×\93ÓÒ\90ÃÓ\93ÉÑ\8bÔË\8bÒØ\8fäÃ\8açÚ\85Ã×\82êç\83çâyëç{äé\7fäæuäã|ÙÛ\82Þâ~ÃÞz×ã\89ÑáwÃÃ\84Õå}ÒæwÕçsÛêuãåxâàpÜæsÞÖnîÕjç×màÎfáÑ_˾cÔ¼eÙ·^ܳ`Ô³Qã¶QܶNæµTÃ¥ÃRè½Uõ½FëÃJêÒLðÉKòÖTòÌAáËLãÈDèÄJéÆHãÄ@àÇKÞ´Kè²Hâ´CÖªIðPصTß­VõZÉ©dö`Ĺ`̳^˦SħTβN³NÀ©JÊ®D̸EâHÆ\9f>É«>É«Lç@¾ @ëAÖ«DÔ·HøOÊ­@Ò£KáD˨EÇ\969Ä\9b7Ǫ?­8ÃÂ¥>Dz1ǵ:ô;º¼Cº¹>ò@²¾,µµ5·´'·¤/Ã\9d4¼\9b8 /µ\97,´\983°\9cA¶\88Eº\94K¹\9a;µ\97E¦\949¨\89BÂ¥\87;¤\83>²\847¨\90;¯\91Qª\89E\9d\99PÂ¥\92W£\8aV\99\83T\99\8bV\8f\87V\94|Y\88\91X\87\8eW\8f\91Y\92\89L\97\8dY\98wb\9at\\92uS\95jW§mW\95eT¢dS\8fXU\99cA\91aF\9bSHÂ¥VV¨JM£LM³WN¯XNµK\µJKªRU¨WN»_T±]O¸LY·GVµSK½JP±HD·AH¼?E·@H¯MV°JO»TR¿JYºFN·GYËKVÇ?WÂ:ZÇFNÊ@\ÃŒ>ZÃ/ZÉ4TÑ4Q\90ÄÞ\90Âã\90Ȏ\9e¿ã«ÄÚ©¾à©¬Ö§ªÃ§¦Ô ²Ö\9e©Ó£°Ó¤­Êª³Â­®Â¬´Ã¡µÄ¤±¶¨«¼©³»«¾Å¥ÃÀ©Å´­»´®½¹¸È­·Å§ºÄª±Ì¢²Ê\9e´¼\9a²½§³Ä¡°¼¡ºÃ\9fþ§¿½­Ç¿¦Æ½®Ã¾¸ÃdzÙʾÃÑÀÕøÃËÃÖÉÈÙÒÅÎÉÉÑÈÕÒÃÃËÃÌÔÎÉÙÑËÒÃÃÃÑÅËÓÈÑÛÀØÜÃÞã¸Ùà½àØÀÚÖÃáâ¶ßÞºáÓ½éÒºìÓ±ìÑ®èÔ®ìǦöÊ®ðÒ®õΩíÉ¡öâðÃ\92öË\99î×\99ãÃ\99ØÒ\8eÎË\90ÓÕ\90ÜØ\99ÛÃ\93ìç\90íá\81çè\87ìâ\80ðå|ôä\83èá\7féè~àézÃßyÕØ}Îà\87Çë\82ÃÃ¥\80Ãæ|Øëzæå}åàoâèqìãsíápáßoéÜgêÃiâËfãÄZßÃUÖÊ_ÜÂbÔ¿]Û½\ÞºXå»ZßÃRê·[ð·Xí¼Q÷¾QóÉNîÃWêÈTôÃQåÚAçÓBåÑDðÌLïÃLíÃHç¿?êÃDù<à¯?å²<æ°Dè·N÷Yà¶YÓ§`ʲcƬa̵R­QůLƲGéDÊ©F¼²K»©D½¨9Ȣ;º­D§CÈ¥Dˬ@Ã…Â¥AñFó>Ò´FÑ·BÈ©Cë>Ǥ5ʦ8Ä\9e<º¦@¼®7©5Ç­7õ,¿®0¸¸5¸°6º¯.²¹-¶µ/¼°+¹ª/Ã…\9c,¾\9f'Ã\9b2¿ 6¸\982°\98A·\90B¼\95=¹\92>¬\945¯\8a;«\8f6¨\8bB©\85Bµ\86A´\8cE´\8dH°\8dG¨\9aR¢\99RÂ¥\91N¡\8dH\9f\89N\99\82R\8f\86Z\84\8aS\88\8dW\90\95b\99\8f[\9f\91U\99\85Y\94{\\93zW\9fnN\9dhT\9di[\95_T\92`G\97\I\9b]G\99VF\9bSG§MR¬P\³K[¯EX¬I\¯DV¦HS°M`µZ[½RM³[J­NPµINµLD¾AF²@E³BOµ=O¬>Z¨L^²L[±DX½JQºNTÃHUÃ@P¼>ZÃE`ÆC`È=^Ã4ZÊ)`ÃŽ+[\9d¹å\94ÃÃ\92¸Ø\9e´â\99¹ß«·Ã§­Ã­¬Õ©­Ã\9c®Î\99·Ú¦¬Ã\9d«Î£¯Ã¡²É´µÄ¬­º©¸½¥¬Ä©»µ ¿À\9e¶²§²® »´±Ã±±Ä³³¼¦¼½«´Ä¤²Ã\99¨½¤«¿¦¨Ã­²Ã¡¿Ä£¼¾£º³¶Î·®Å»»Ò¾ÂÕ»»ÚÉÀÃȾÃíÓÌÀÛÃÈÑÆ»ËÀÈÕÊÊÃÿÊÿ×ÙÃÑÃÎÈ×ÎÒÊÉÃÙÄÅÙ¸Ñ߸Ëå½Ûà¸Ãá¼ÔàÈÕÖµÔî¶àÙµëÉ»ä÷ïÌ«åðîëòѦ÷θëË®ñÉ\9fðÆ\99÷À\98éÃ\99çÜ\8cÞÃ\8eÖÒ\8dÞÃ\88ÑÕ\87ÖÌ\84ÞÜ\85ÞÒ\8bêÞ\80àÚwæè{äê\86ñî\86ææ|ÞÙ\84ÛÙxåæ\88ÜÜ\82Ãæ\85×é\87Çâ\86Ùè{Óò{Þéx×ãvÞâjîáiéånÙÛiÛØeßØoæËkßÊ]ÖÒ[ÚÅgÛÈcѶW×¼WÕ»`ã¶Ué¾Rì¾NéµTì¾UðÃMúÇ^ïÃ`öÆSïÑMìÆBóËKóÃ@îÎCôÉEë¿Gç¾Må¸EÞÃ@ܳ>ä°Háµ<Ù®EÙº\Ó±`Ô­YÔ«^È¥eÉ¡aàSƦQ»·C¬HÇ\9eG½«G°£<·¡D¿\9d?¾¤9­C¾¬H»¤E»­<ŪJŬ>ų=Ê©KȬC¯A¸¢2¾ <Ç\996¾¥5Ŷ5ñ:Ť8˧1È­2½¤:¯§9´«0³´*÷$¸¸&¹¤.Â\9a)É£1Ê\998»\9f=·\96<¿\9cD¹\9aH­\8b@ª\8eC«\82>¯\84H¢\829«\8a>«\89I¯}F®\91H³\8eL¤\96F­\9bU\9d\9aP¢\8bN\92\90U\99\84H\8f\8dR\8b\85\\8f\92Q\86\8fO\90\93Y\93\87\\9a\80e\93\7fd\9c}W\9cpU\9dnb¨t_\9bo_\9cZX\97[[\98`P\9bUI\99PI¤KQ¦HZ¦U_¬Dd¨JY¦IS¦U`£UU¦W^©S[³YV°XH¯\F¨HJ¯CC¶@@°:H·?L±@PµJS­EO¯KYµH_³ATÄB]ºLZÀDZ³>VÄ:ZÀB\Ã1UÇ3SÑ(SÃ2Y\90¯Ò\95¹Ã\92·Ã\9fµÞ¥±à\9f¯Ñ¢¯Ø£´Ö¨«Ø\9c«Ô¦±Ã¥­Ñ¡³É¦»Ê¨·Ñ«´È¦½Ã¡´È\9b²·¤¼·\9f·»¦°³¡½µ¤º¨«¶²¨²­¶»«½Ä¯½¾\9e·¹\9e³Ãª§º¤©¼±µ¼²¶Ä¯²º­Ã¾ºË°»Ã²ÈÒ½ÄÌǺӿ³ÛëÓɲÊǯҺ¼Ô¼ÊÇ»Ñ̳ØüÒÒÉÊÔÄÅÃËÎÔÈÌØÆÈÒºÃÔ¶Ìã»Èß®Ñ×®Ëá¹ÃÚ¾Ûç¶Øí¾ÛÚ·ßðÜÖ©èÕ­äòäÒ§äØ©ôÔ´ïÕ¤ñÊ¥íÌ¢ðÄ\9dåÄ\93åÒ\89âÃ\92âÄ\89àÅ\84à×\81âÖw×É}ãÊzâÖwäÜ|àÃzáß\83âì}Ã¥Ã|äÚ\7fßß\86Ûâ\8aÑà~Ãá{Îè\85Ñð\86àô\88Ãê\84ÞïzÚãréäxæäpÞäsâÓqáÔpÛÙjÃÞ\ÖÓ^ÃÃdÎË]ËÃ`×½WѵSؽ`á²]ïµ[ï­Xð²Mý·MøºOó½YðÃaðÉYãÌDçÔHñËBðÎCïÎHäÃKê»Páµ@æ¼=è·7ã½=Þ¸Dä¬CÙ­QÒ¯Uί^×¹_Ô³l˦hΪ`Ǥ^¸©O·®L¹¨H· N¸ C¯©C¶ H¾¡?´§Bº«E¹®B¼£B¿±DůE»°F·¤>³­<½¦IÀ®9·¦7¹«=Â¥A¸±7¿¬9½¤.ë1¿ª8Ħ-½§6µ¨6º£2ˬ5ʪ$ð"ɨ+¾§5»\9e2Ã…\90\962Ä\98=¸\969³\92>¨\915§\8b;¦\86E£\82D \8bF¦\85?¯~C³\85C±\85N¨\90O¬\95ZÂ¥\97S\93\9dY\91\95V\97\83S\94~G\8d\8eT\97\8cX\97\92V\95\96Q\8c\86[\90\84[\8ez[\87wa\97pb\9eta\9dq`¡wa¨wf\9ff^¦bW£gQ\99V\\9aS[\9cQ^®SX¬Qe«Id©K_\9eS[Â¥][°ZW©a]¬Z[¬^U·XQ°ZF¦UE­HI¤FBÂ¥=E²BL³;S²DL¹DK³LS±MX·BZ½FQ¿DT»4X¹5Rº?[Ç9`É.fÃ0\È-^É*Z\96¼Ã\95·Ô¦ªÕ¡­Ù\9b¦Ó¡±Ë¤±Ó\9f²Ù£°Ñ\94±Ë\9f±Ã\9c³¿£±Æ§¼Ã¬³Ç¯ÂË­¾Ã§ÂÕ£³Ë£½·¦¹´¨±· µ±£¾³¥¼¥\9dº¤®µ¤²·¤·Ã\9d¶¾©¶º§§Â\9a¬´¢½²¥¶°¶½¹³Ãµ»Æ±¿É½Åʶ¿Ë²¶Ö¸°Ã¾°Î¸ѹ®Ó°ÃÚ¶³Ì»ÀÊÅÃÇƺÎÖ¿ÃÑÉÌßËÑâÃËÖÅÃáÂÑÛµÃá¼ÑÖ·ÌÜ®ÃîÞÓ¿Ùç±ÙêºãéµçܨâاÜÒ«àÙ­ëïãÎ¥èزôÕ¤äΠçÒ\9fíΣéÃ\8fêÆ\8bèÅ\81æ¾\86ÃÉ\7fæËzÜËwÜÅtæÓ|ØØtÛÜxäÃsàà\7fàâ\82äà\85äÙ\86×á\82ÑàwßáxÌé\7fÓç\81×éwâå}æð\88êá\7fæÜläâpêßjáãpÞÛlÖÓhÙàjÚÃdÒÑYÑÌhÉËZÖÃeØÃ[æ½Và±að»_ø½U÷´Rè»Uù»V÷ÃRù¼OïÆ[éÃTáÎ?åÌ<èÑ>éÎDáÃGçÄ>æ¿Bâ»FÛ¶BêºEܼ?ë´Dá®B׫DÙ«SÓ¹OØÄXì`ħjëfÇ£bÀ¦Z³¢L´©Qª\95W©§Dª¦L¬\9bA°¢D½©G¼«KèM¡<ű<Ç©7µ­G°§<À£I·¬O½§?®°6¸¨1´¦B´\9f2â4½¥.¾«2²§0±³-·±:°«:¯«:µ\9f3¼¨1Ç£ Ã„­&¿¤5Ä\951Â\96?½\90CÇ\8dA¼\92Bº\8b=²\91A¡\912¬\83B©\8aE©\89I«\87G°\8b?­\89?¨\84G­\92T¤\97L\9b\94Q\90\8dQ\8c\8dN\8e\89V\8f~G\92\8aL\8b\89W\8f\8dP\95\90S\94\8bI\8f\8eM\8cy[\91\80[\8at^£rdÂ¥te¤w_§z`\9fe^¨b\\9b^aÂ¥W_­Sa²Nd­O^Â¥Wd¡Vh¦V] [_Â¥RV\9fO^®Vb­[\±PL£RH°SO¢YD£G@¨GA²HG´QPµDF±GJ¯DQµAR¶JSÂ;V¶=QÃGPÄ<X½*TÃ…9W·6a»*U¸'^Ã…-PÃ,Y\98­Ü¡²Ó¥§Ö¤©È¦¨Ç¨«Åª¯Ã\9e²Ì\9a¯Ã\95µÅ¢ªÄ ­½\9c»¿\9d¾Ì¢¸ÕªÃѬÉÌ«ÂÓ´¿È¬ºÂ¤½¼­¸¯ªº¶¢·±\97µ¬\9d¹©¡¼\9f­¹£§·¨±·¦¬¿¨°¸\9f¼¹¥¶¯£¿´´¸®·À«Æ˯ÄÆ»ÃÌ·½Õ¬Âά·Ë°²Ã¶³Óº®Ø¶ºÃÀ¼Ã»½Î¿ºÇʼÅÊÄÊÙÇÎáËËáÇÆäÌÒßÀßä·ÚÞµÑìÓÓ²ÔÓµßÖ±äâ­Ùè±åä§äߧÛÞ³ÜñÃÔ®éÚ®ãÔ´ëÔªåÑ¥àÒªÞãåãéˤàÃ\96×Æ\88ÃÃ…\80æÂzàÃqåÆråÉvßÈuÃÓsßãmãèvÃëxâÞ\82íã\84èÚ\7fèátØØt×åpØè}àè\7fÛáyÃÃœ~ãè\80áâ\82ëÛtñâuÃ¥Ãr×åeÖãbÓçbØÞ^Êà^ÃÑ^ÔÖcÓÓdßË\â¾[â±båµ`åÃVñÄYô¿PðÀWðÃTò½PíºZîÀ[îÆQíËIçÃBçÃAäÃ;àÆ9éÀ7é»Dß³@ß·Lå¶Dæ·Bï²@ë¯<ë¶@ܲHÙ°GÕ½SØÂX̵^ɸ`ʬ[²`¸¦Y­¨S«\9bY§¦Q¯¥H³¨A«\9dH«\9eH¸\9fEº©>¸¢GȻ=¸®5¹­Dµ¨F±¯@¶­E®¨9±®9º«?³\9b5¹£7¿©)¶©)·­.®°9®¹2°¶4µ³1¹«+µ¢1¹ 5Æ¥)¾ª-½\9d3¿\9e1É\92=Æ\97<½\8b\89;¸\87=°\906¬\8e:¨\8bB§\89@Â¥\89H³\8aG­\88L°\8bC¨\88E¦\84Q§\8fI\98\8eN\8d\96P\8a\94F\90\93M\88\86S\91\86N\8e\8cX\8f\97I\91\98J\8c\94H\8e\86N\84\89S\8a~Z\8c}X\9bv`¤zd\9c{cÂ¥sZ©t^¢sf£eb£df®`d°Zh¯Ta¤Oj¢Wf¦^b£\a\9cWZ\9dS`¡QY©TW§HP\9eHO§JF¢PKÂ¥IF¤KCÂ¥UH¯OGªUO¢SN¤SR§E^¸He¼;aÃ…<TÃBUÆ<[½-aÂ2_¸+]º/X½$SË"\ÃŒ#Y\95¯Î\9e¹×¢®Ã¡ªÎ\9d¤Î¦«Ã µÀ\99²È\95¶Ì\99¼É¤±È\9a±º©ÃÄ©¹Î¨·Ã£Äç¼Ë¦¿Ò¤¾Ô¦µÃ¢³Ã²´º¥½­«¹»\9fº±\99º¢¨®®²½\9f£µ\9d©¶ ¨®\9eº½¡¯½§»ª¬½«³³¶®Å²ºÈ·½¾¿µÈ¸²Ê±·Ã°ÂǬºÈ®³Öµ»Ë¾¿ËÀÃѽ»Ä»´ÎÇ·ÃȺÈÃÅÕÖËÒÛÃ×ÜÃÔÞµÌâ´ÒÒ¶ÙéßÑ¥ØÛ´Ãß´âè¨ÃèªÛì©äåªàÓ­åÞ©ïÓ¤èÓ°éÒ¥åѬäؤåÕ\9fæÙ\99àÙ£ëÔ\99ÃÃ\95ÛÅ\89ëÃ\8cëÃ\82ëÇ~äÀ~óÅsßÌ|âàzæÕvÛâyãÞ\81êèyàãvìávÃÃ¥yÚä~ÚÃ\85Üæ\81ÜäyâÞwØä{Þê\8däê|çÜuéäuÙÚpÙåpÑã]ÕÖ_Ãä_ÌÕ^×ÉeÒØ[ÓÕ^ÃœÃfß¼\ê¹bë»Rî½PÃÃVð¿\ò½aíÂYâÃVîÉXíº^é¾RçÉEðÉBâÉEàÌ:ìµ?à¿Jä¿Oà²>ä·@æ¾Jí¼Bã¹=Þ¹JܱBÙ´EìOÖµQɯU˲aÓ´bË·[¿´Z¼ªW±¥`¼¡_±©H¯¤=±\9fI¦\96J¯\94@¿\95M¼\96H®¤A·¦=½«;¯©5³¡7°¡A®±=¹¬@¹­E­¨9º\9a-Â\9d2î(º¨.·°2½¸&µ3±²/¯³-µ§+²£3¼¦0Ǥ)¿¢2Ê\934Ê\903È\96;Ã\91<º\899º\80:»\80:µ\80<²\88A°\818§\8aG°\8dB³\80D¨\8dI¡\8dK§\89O£\8bB\99\87B\94\8cG\8d\94M\81\98C\8a\87J\87\85U\84\91X\8f\92T\8f\99R\90\99>\8d\94K\90\87E\8c\87I\91z^\90|\\8dv\\93\84l\97\82hÂ¥|bÂ¥{]£tc©i^Â¥aj\9e\o§Tc¯^g®Yc§[b¦[Y®^a \c\9c]]©YP£[L¤RN£CL\9bAZ\9bD\ªNO¤OP¬XI HM¢FM\99CS\9fDX§EY¯HV«Ea¾GRÃ>c¿:S¾)U¹.S»(]¶3^³)S½-aÃŒ$Y\9f¶Õ\9fµÑ£¦Ñ §×¦¦Æ¥­Å¡²Ç\99¿É¨À»§¼½§À¸\9e½¾¤µÀ¦¼Èª·Ä©·Ç¥¿Ê­·Ã§¬È\9e±Ê\9e´È¨·»¨®´¦¯´¦ª·¤³¨¡»¬¦±¢¦³£¦­\9c²¯\94¶¹\9c²·¦·¶­²­¶¼µ­²Âµ³½·¶¼¼»»²»±ºÄ­»Ã²¶Ã¶³Ë½µÆĹĿÂó¾Èµ»Å½¹Ó¿¾ÃÈÄÌÒË×ÃÃÖÕÃÃÖ³ÃܶÕѹÚÛ³àÓ¤×Ö¦ÃÙ³ßé«åéªÚé¨ßÜ¥ëå§èÜ\9bòؤðÖ°íÃ¥àÒ¡æÖ\94ëÃ\94îÎ\90ì×\93âÃ\8déË\94ñÎ\88é¿\8aç¹\8fë½\85îÈtðÌtâ×zÞÛyÔã\80ÚÃwàèpáèxÜë|èâ~Ùí\7fÔéwÑî\83ßå\8aãè\80åã\81Ùì\81Ûå\88Öñ\89Ùí{ÓêtÞètßÃc×ÓaÚàfÃÃœ^ØÔ`ÕÃcÙÇ]âÉeëÃhâÅZâ¶Wé·TéÃSØÃRâÂZê»`åÂ_ÚÅ]àÂ[ÿXá¾OæËFëÈ@ëÓAåÃGèµMê±Câ²Hç®CÞ¬@å¸Dè»JØ¿R׺LÒ¸IηQØ®UÖ­LÃÂ¥R̪YË·YǹR«_¾¥\¿ªT¿¤UÀ©F¹\9dBº¤N­ J¹ J·\90I°\9aK¬ >·\9f;³\9f9´\9c,µ©0²¨<¶¦9¯°8±¨A½\9e0¹£+Ƥ3Â¥.è2¯0¸°+²²%²¯!¯«)¯ª)»¡9¸\998º\981¾\98/È\90<Ë\94BÄ\8bAº\85@½\864¸{:½}CÃyK¶\7fD¸\8f@©\8dA¯\82<µ\80<­\7fC¡\81G\9a{<\9e\84?\96\88>\99\8fL\8c\85G\85\8aL\83\86Q\88\8dR\8a\96E\8e\93I\8d\97C\8b\94B\8d\9cA\8b\95F\95\95F\98\85R\99\86\\8f\80`\8dwn\96~j\9c~a yf¨vd©lg£gf\9a\j­\l±Xp±Xm§\f©YY¨`W¦cUª][°[O©VL«WS LU\99?W\9dA^\9eC`¨SWªYV¡PQ\9bC]\9e@[\9dEV­CZ¯>]«=V´AZ¾F`Ã>d¿2X´9Yµ1Z´&V´)^³(a¼%e\9b¯Ú¡ªË\9c²Ù\9a®Û¡µ×\9e¨Ã¤½Ì©ÃÉ\9f¸É¨´Ã¤±¿¡ÃÉ\9fÃÂ\9cÄë±Ä °Ã\9f´Ì¢²É\97¶Ã\9dȮ\9c·Ã ²¼ ²¶¤«¸ª·«¡¸¢\9d½«ª±\9e©³¢¨¶ª²¹¥·¼\98»«©²²¨¹¹\9e»·¦¯´±º¸¼°¼²¾²°¸»¶Â¼±Ã¿´¿¿ºÃ¼·Àº´Êijù°Ã´¶ÈǾÌɺÓÅÄÜƸÞ˵ÜÖ²ÃÔµÛ׶çß°ÜÖªåÙ ÃÎ¥àÕ¸ä×®îë¨àá¢èÜ«äá\9eâÛ\94æß õØ ç׫ëÕ\9dçÓ¦ìß\9dúÕ\96óÛ\94ìÈ\8dùÃ\85ë¾\83êÂ\8aïÄ~ü¼{ð¾\7fïÇ{ã×uïÚoæß|ÔÞu×ÞzÜè\81ÛÜ\82çëxÚê}ÃÃ\8bàæ\88áã\8eÙê\8bÜá\83ßâ\8féé\8eÙç\85ØãrÔè~ßãpÜâd×ÖYÃÓeÖÊiÜÓdãÊYæÃhçÇbÛÎcäÃ^Þ¼ZþZßÃWÃÃ…OÔ¾Tæ¸^ØÀVÙÆeÖÆVÞ½SÖÄKÃÆRÃËPåÒPèÄCܬRܬFÚ²NׯCâªDÙºMæ¾Jç¾CÛÀAÒ¸TѼRÙºEß½HÒ©MÕ§TÔ±MƽXªQʯOÈ\9fIº«BĨ@½¤>·¢E¯¦Dº\99;¯\8b<»\975°\9e<¹\9a3©£?µ\990º\9e1´¢+²®4ºªA¸¥;°°:½ª3¶\9a$¶\9a(¿§.Ê£0¸£$ȴ/±«)´©'³\9b6¼\9f4¹ >Ã…\9b/Ã\947À\8e<È\8e3Ä\91B½\8e=¸\888Æ\83<µ|<À\89>­~F¹\8c>­\84G¦\8c7²\869²\86>¦\86J\9b\8c<\96\84G\97\91N\91\8eQ\87\94S\85\90W\8a\90O\84\9bN\82\8cK\8d\8fQ\8f\98H\8d\8cG\94\92F\86\8dD\8c\93N\94\83X\92\89P \81`\9e}k\9d\80h\91vd¤zd§vl\9cjs\9afk\90Xs\9cai [i£Qe¬]]¢][¢cR ]a«Ze¢X_©XH\97XM\9cVV\9fCV\98@h¢@Z\9fJb¦N^Â¥DX£>Q¤;[\9f>Y¬I]±BU±?R¬B[­?b±?n¶9`­1Z²,Y­6k±0nµ/d»,m\92©É\98«Õ¢«Ò\9c´Ã¥³Ú\9d´×\9d½Î©¿Ì£´Ê¡´¾¤¶Ã\99¹Â\9e²¿\9f»É¡ÀÃ\9f¶É\94¯Ç\96¸Ñ\9eµÔ\9d¼Ë\9f»Ê\9f°Ã¦«Æ\9fµ¼¦¯®\9d·«¢¼«£·¨£º²°°«·­¤»´¤°²\99®¬\9d®¶\99³µ¤­°¦°¯²»·°¸³¹®¾À´º¸·¿¹½¾·Æ®ǾªÊIJ½½±ÃöÃĺÈȲÕ´ÃÀ°ØñØÚ­àÛ¬èÙ´éá®åÔ³ïÔ©èÙ±áÕ®ßקæáªãÜ­ßå¥íã¨ëë\9aõè\91îÜ\97ìÞ\99êá£üà\9fþá\9fûá\93þÒ\87ÿÇ\84ÿÆ\7fÿÃ|úÉ\83õ¾zýÄzóÄzïÃ}òÃqðÒtâÛxßÖxâàzÃáxãÃ}×â}Øé\8cÖÞ\8eÚê\86Ûí\8cÛê\89Ãì\8bÜç\92åê\8aÛá\86ÞÚxåáyÞßqåÛeÛÒ`âÉ]ØÉb×Ç]å¾[âÂ`âÄ\äÆgßÆbÖ¿[ÚÅ[ßÌNÒÂRÃÀWܼ[Ú»YÔÀbÚÃ`Ã’Ã…WÃ’ÃŒOÔÎWÖÃVáÄNá¶X×°PÙ°\á°Vé³Mß´Mâ²Iâ²Iä±JܹFÕ±EѺMÜ¿SÞ¾KܱQÙ²UÙ´M˺VʵWίPÇ©B½§?í7·¡>¶¥1¿\9d2¹\91.³\94;±\8d;µ\915²\957­\9e4¼\9a(¹ ,°«3±«4®­8¶¯5·¡.º¤0¾ª1»\9f#¼£$¨"¨!½\9c0¹\9c/¶ ,½¥8µ\9b<´£<À\9d<Ç\95?¾\935¿\91=À\8c5À|8¿}DÃ\82H½\81@º\80<µ\8aF¹\82<°\84<¤\84G©\89@\9f\888Â¥\88?\9c\95@\99\90E\8f\96P\91\93M\8c\99P\8e\97Y\91¢P\82\9bS\7f\98S\89\94K\86\8dM\8c\90F\92\8aM\91\94F\9d\8dO\99\89M\9a\8f`\9f\89d\9bzo\97vi\92x_\9awe¤ta\9dim\9e\n\94_s\97Ur\9fOn£Pr¦\d¬^]§[[¦VeªL^¡FS\9ePT LJ\95NQ\90AR\94Ca\9e@b\9bBa\9aAb HW§F_©BV¬E`ªA]±7e¦>_£9g­El©>h¬>s³@t°8f¹;o´5q±.mº#l\9a¢Ë\8e³Ì\8fªÃ\98µÃ\9a­Ü\96»Ù¨±Ã¦­Î\9f¸»\9b§¹\9f¸Ã£¾»\97µÆ\9e®É£­Ã¢­Ã¡ªÃ\99¶É\9f°¾\9b¶Ë\99¸È\99¶Ã\99¯¸\99´°§²»¢½±­¹¦¦º§³°§±®­¸¦²¹© º¶\9c¬¬¨³±\9f²±³±±°«¦¹²§¬Ãµ¶»­µÀ®¼¸·±Ä¿²Éµ·¾½¯»Ã·Ã娦ðÃʳÖ̲àʹÚóÜÓ´âѱÛܬÙß­çðäÕ¯êÜ©öß«æçàÖ¢íØ£êØ\9dèÙ\9fëÜ\9açæ\9cäâ\90çÃ\9dèà£ëè£íæ\9cëÛ\9c÷Û\90øÃ\8bòÇ\8aÿ¿~ø¼\83ù¿\81óÊ\80öË\7föË{ûÆyèËwàÖxâËqçÃvãÖsßÖsâáxÜâ\8bàé\88âì\7fßé|äó\80èò\81Üé\80äé\87àå\7fáäxäÙ{æÙkçÃfáÜgØÓcÖÃkÙÕlÜÌ[èÃUíÇZáÃUØÇT×ÉV×Ã^Õ¿]Úº]Õ¸^ã¹\Ù¹XܾVÃÃdÃÃ…TÒÂZÜÀZ×ÌUÙÊKÜ¿UÙ¸Jå­RÞ¸Nè¬Nê¬Rì¹Ië²Mç»Iå·OÔÀMÒÃUÙ·YýOõJÒ¬KÉ®YɧWôYɶVÅ®IÊ®CȢE´¬D¼\9e<²¤:¾\9d(·\93.²\97C©\9aB·\989­\9b8°\9a@³¤6«\9d/®¥0¸¬)²§2°\9d'²¤4¼¡3¶¬1¹\9d\1fº¤$¹¤"´\9e,º\9a2½\9e6²\9f7¾ 9¿¢>Ã\9b4¼\97\94@º\968¶\8a5µ\8d8°\83>Ä\85@´\8d8³\7fF½\86H«\84@·\7fB¤\7f5¢}@\9f\84D¯\90;§\85C¤\95D\8d\88C\95\93O\95\8fR\8e\95[\92\8eQ\86\96V\86\99J\8f\96M\93\97U\82\8bH\8f\8bN\91\90T\95\8eM\95\89I\88\8dO\95\91[\9e\85Y\96\84V\9doZ\94th\96hc\90bm\95gr\97ar\8eOe\9eYl\97Hl\9fMu®fj«cf¤Rf¢Tf¬]g¢T[ªSV£T]\90O[\93Fa\9aQg Jf\99Ha¨DW CW¤BM¤HZ¨Cf©NW­?a®?[³<n¯Gv§=u³Ai¹Af°5b½8mº:k¿,f²%v\91¬Ú\90¯Ã\91³Ã\95¬Ì\97¯Å\9bµÃ\9d¸Ñ«©Å¦¬¿\9e§½ «Ä\9b·º\98µÉ\9f­Ç¡³½\95¨¼\9e¢¹\97¬À\96¹º\98µ¾\94¶¾\9f¯·¤¬©\99¤«¥µ­®¹º­¶®¨««©¥§¹§°³¦¥´¨ª¸¢©®­£¸°¬¶¨°°¨²·§¯¶©¸À¥²µ©¶»¯·º»ÃÀ¿¾È½¼¾°µ¿·ª·Â«¼Ã¯ÂË­ÉóàʬÃÒ´ÞÒ¯æÖµÞÚ®ÃѳáË«âÕ¬óâ¡öÕ­ôÔ©èàèØ\98ãÓ¡ãÖ\98îÓ¡ðá\9dèÚ\93çÕ\93ÜÛ¡Üâ\9dÃÙ\8cáÜ\8cæÞ\96êÑ\91õÇ\90ÿÂ\83ÿ·\81ý½\81íÂ\83ìË\84ð½\82÷¾\81òÊ}áÓpìÒrëÉvâÃ}çÃsëÓzÃÛ\87ßÚwçêxãëväî\7fÛî{ãìxÛé\83Ãê|ÞïyëæmèåræÜlÕÙqÃ’ÃiÕÚmáÕháÇhçÅVâÅUäÄXéÃXÞÃUåÎZáÃP߶`׸^Õ¹XäÅUæ½Qç»Yßµ_ÕµTÙÂX×ÄOÛµVܳOêµDæ»Hé·Cá°Eç¸>ê±Dê²Lç¼NÛÃLؼVÞ¹_Ú¼VÒ·QëGÔ\9eDÉ¢QÃ¥OȪXÆ¢UɨH·¬I´®B½ 8¶\999²\980¶\95+µ\8d*©\91:°\967¯\9e@µ¢8¯¢>ª\9e7Â¥\9c2²¨3µ¨,±ª)·\9c$ê,½«.¾¬*¸ &±\97\1d¸\98 Â´Â¢*ȴ*¸¢,½¢4·¡2¼\995Â\8e?Ã\90@·\87B·\8c9²\860®\83/º\86,·\948·\939¶\8c=¬\87>°\87>¬\885¦{6­\7f5Â¥\8a6¨\8eE¨\91F\9a\8eD\92\8c<\8c\9bO\8d\98R\92\93L\91\91Q\8d\9aX\87\9bO\8f\95U\8b\8cP\8d\85V\8b\8eN\94\9aI\92\97S\86\9aU\87\93L\8c\8eF\8c\81P\94sO\93p\\8fpX\91aa\90`]\98\g\9c_k\97Pa\9cO`\9cMp¡]r¨`o¡_d£Ui\9fab£`bª[aÂ¥TV\9fTT\9aU[\92Ud\98P[¢OS¢N[©PKÂ¥LG£OP\9cNb¡Kc\9fIa£LV«E\¯>f«Hn²Cn¸>l·@`µ6dº=j¸2d½%dº!p\90¤É\86¥Ë\89¬Ã\86«Ã\97¨¾ ­Ã\9c¯À\9c¢¾\9b«·¤ª³\97¨Ã¥¬º ¦Ä\9d¤Ä\9d­¿\91­»\9f±µ\99¶¾£¨Ã ¬» «¿\9a¤¶¢¥«¢¡¤\9e©®²¯´±¥¶°£¶¹±±Ã¬»¶ ©½\9b¨¹«©µ¨¤³§¬´\9b®·¦¬¿£©Ã\9e¶·\9e°Ç£ºÆ¬´¹µ´Ê¹ÂÆ»Àƹ¼¼³¼µÈ·ÇɳÈƪ×ήæ̬ÛÔ³ÞÊ£èÖ²ßôìÚ²îÑ\9fåÒ¦øÞ\9eéá¡õÃ¥éÃ\9cçÞ\94íÖ\92èØ\96ֆ\94úÜ\9dõÃ\92ðÕ\91åÓ\9açÞ\9báÒ\9dãÔ\8dêÎ\8dëÆ\97òÄ\94òÃ\92ÿÂ\7fúÈ\87ÿÀ~íÀ\81ë½\89óÃ\7fèÌ\7fèÓxéÅlëÃpêÔwÙÕkéÑtßÞ\80ßÛ|êð|æéxâìsÞæzÜê|çé{âìsâçxÞífáÞjëâbâápÃëfÓÚdÜ×pÛÃ_áÊdãÃ]ãÀUßÂLÜÒWßÄFäÃHç·NæÂPúTéÅQê¾Zå¹\æ½Wå®TØ®YÚ¬SÜ°Hà®KÞµEé¶Qì®?Þ±Eê©=î±;é¾JæºRä³QàÃQã´OسWÒ»KγKÒ¦RæOƧT¹±R¯K¹©Rº¯L¸¦:º©0³\98-¶\9f.¯\9b+¨\9b%ª\9a0ª\9f=¢\98A\9f\9cG¦¡H­¤7±\95?¨¢3¨¤0´\98)¼\9e*¸¢-²¦-½¦/±£!¶\94-³\9a\1e²¥\1c·¬(®§'¾¦+¹\9f3½\980´\99<¹\91?¹\90B¯\8e3¯\818µ\85%©\96.«\97-¶\99/­\96=´\861º\8a:¦\854¢\841£\8f3«\96,\9a\97CÂ¥\8aD\95\91C\92\8a=\8e\8eL\96\96W\8e\93G\8e¡H\92¡H\90\94O\85\91N\8b\8aT\89\8eK\91\93N\89\8cK\95\88J\88\89K\8c\93Q\83\87Y\88\86Z\93v\\91eX\88aY\99WY\95ab ]j\98Xe\9aW\\9aJl Pl\98]j©ed©dp\99Zj¤Vf£XZ¢MU®V]ªQP¡ZZ\9eNZ\94Nh\9fS^§I^¬KX«PK¡FM¨O\\98Mf\9dBm¨E]«HY°OZ©Fo¶Pf¾>e´?]·4j¿2b»7f»#l»&s~«Ê\82¢Ã|§Ã\85¡Ã\96\9fÃ…\99¥¸¢«¶\9a¡À\9f\9c¹ \9e¶¨\9eº£¬¾£¤Æ\97«¾\8c¦È\90¯Ã\93®·¤¶·©®½¨¬¾¬«°¢ª«¦¢¨¤§­¤®µ¤§±®¢µ³¬´¾°¹·¥¶·\9d±º\9b¬¾\97®³\9e¥·\98¯¸\9eª´\9cª¹\9d²Ã¥´» »½ ·Ç¨³Î¥±Å®·¼³¹Ãµ¾¸¾µ»¾²ÄìÌçÕΫÞðÜïÞʦðÒ­ððëÑ\9f÷Þ\9fêä\9bëÜ\99ëÃ\93ëÃ\9bèÓ\95òÓ\99÷Þ\9cøÛ\9aïÕ\8cõÜ\8eïÃ\8fïÒ\94íÎ\96áÒ\94êÎ\9bêÈ\94âÌ\8cæÄ\92éÈ\9aõ»\94ù»\8eÿÃ\88ÿÇ\7fûÃ\87ûÉ\82ïÈyñËxãÌqÜÇuæÃuß×{ÛÙoæÜoäÔ}éÙrïäqìÞyêáwâÛ\82àä|éÞtæàxÛìnáèoãéiåæcáíbÜédÖênÖÃfÞ×háØcâÕYåËXÃÖVßÃJÞÀKãÀHí¼?éÃGêÈVìÂUïºMê´Tæ»Vã°\ê¤Væ¥Xå¬WÙ¯L×°MÞ¬Kî«PìµEì¹Dä±@ê´K߸Eã¸EýOá¿QÞ¹ZعTÛ¶NɧSƧJŤM´®L·¦I¶©M±«E¶¦6¶ +»\98,³£!¨\9d#¢\95-¨\92/©\9e6\9a\9fA\97\9a9¡ A¨\99?­\9d;§\9d.§\9b1°£-°\9b+´\98!µ #¯¡)¯\96&±\98"«\97&©\94*±¡#µ\98'²\9e3®\9f2·\96<¾\8c>µ\8d7»\8f-°\894°\8a)°\8e"¸\93\1c¯\94#¹\99%±\95,¸\8f4·\8c5²\867ª\857 \861Â¥\923 \989\9a\93=\9c\9aB\9b\8fLÂ¥\94E\9d\9aL\9a\9dD\91\9fM\96\9fR\8e\99K\93\93U\8d\97U\8e\8fY\87\94T\85\93R\8b\88R\8c\8dO\89\8bT\8b\81R\85\83Z\81{]\88jb\90ij\90^b\97^f\98Wk\8fX`\94Nd\92[n\9fWg ag\9e`i\97`s\9d]m\9e^^¬M\­W`°RU³ZO±SX\9fSf\9eTd S`\9fLU§QI¯WK¬ULªEY\9d@g\9eAk¦BgÂ¥G_²D[²QbµIa½I]·C]½<jÃ2lµ-m´1a¿$e~\9aÃ’\85§É\88\9dÄ\8a¥º\88\9a·\93§·\89\9b¶\92\9f´\95¦¸¡£¾\95¡¿\98\9cÀ\98¦\8e«·\8b¯´\9b³Â¡¨»\9b¦»¬¦´ª§¾£«¾¢\9f®©ª¨¡£´\9d«´¬ªª®¤µ©°»¯¨¼­§»®£ª´\94¨³¢¬Ã\98¡º\99°¼\97±Ã\9e¯Ã ¼¹¢°Âª¼Ë«¾È¯¸Ã¦½¼­½È¸µÀ¹¬Â»²¼µ³ÆÈ­ÌʯÜŬä˵æÊ£ÜçëÓ¤êÒ¨úѦ÷Ú\9bæÛ¥îÓ\9cîÎ\99ðÚ\96êÃ\95èË\97óÔ\9añÑ\91ֆ\97üÙ\95ôÑ\88ð×\95æÊ\87ëÖ\8eçË\8fíÉ\8dã¿\8bì½\82ì»\81ñº\8böÆ\8dõÈ\87úÄ\8aü¿\84ý¾vö½~ëÎ}×Ì\80ãÓxåÓ{ÛÔ|ßÖlìÞyêÑ{íà\7féäsóéyíìyäèrÃ×wçÞkÖâqåámÛÜqâábÖçgãÞeÃç^âä]á×[ÛÒ]ÛÊVÚÊ^çÈZåÆMçÈTÙËTâÈMä»Dç·Hí¹Jê»Qê»MòµWì¸Oä«`å³Të¦]Ù«RÙªKëPß­Vç°BܵIܳ=Þ¨Dã¶Jå±>ÔºGÃÃ…IλJÞ²RÙ©TôJɱ>¿ªJ¾ªF±¤J­¯C¶§G¶\9eF·¢@±¥,­\93.·\96*¨\9d/­\90.³\927¨\97C\9a\98G\9fÂ¥:¥¥C ¡5«£:ǻ;\96©6\9c\993®\92)²\9c(¯¤(²\96)¦\97+§\97* \90+­\9a%°\92!­\9f#¬\9e3¯\997®\9b0¬\98.µ\8f6ª\86*ª\91$°\8a+°\91-¸\920­\8e%ª\96!ª\95,·\8b4²\823©\88=©\8f5£\864 \93:©\8b@ \8fC\9f\95;\9c\97D\9f\8cP¨\96J¢\9fO \96Q\8b\97T\95\91J\90\8fI\8a\98V\8b\98I\88\91Q\82\8aW\8c\8bR\81\8c\\8e\82L\8e\82S\93uZ\8du\\8fih\95o`\8b`o\95\j\8dQu\98Ww\92]i\91Zm\94]k\92`e¦]m\9f^l¢Oc\9eTi¨Od¬Q\­R^²PU¬Oa£QX\9eY^ ZaÂ¥QS¤]U©SI«RV±Q^£Hc\9aDfÂ¥Bh¬Fj¯Ie¹Fh´?fÄAbÃGcÀDl·.h±$mÃ%hÆ$dx¦Î}¡Ã\80\95¼\90\98¶\84£·\81§¾\86¢»\93\92µ\9b\94µ\92£Ã\85£¿\89\9cÃ\8a\98»\94\9b´\8d¬»\94«½ ¦¿\9f¡¶£©½¤¡È\9b¢¾\9e¤²¤¥¹¤¡·¨£´«\9e«¦ µ°¯¶¤¢·¨ ´©¥´¸\9d¯¼\9c©À\95§Ê\93¢È\98§Î\96ªÆ\9d¸Ã¦³½¬½½³²Ê²·Æ¸»¹®¸Ê¶¯É·ª½Âº»½º¹¼»Å½¯Ã̸áÌ´áèÃÇ¥ëæôΰçÃ¥ëÓ¤éÒ æÊ\9díÕ\9dîÔ\96éÉ\98êÇ\8eå×\8aìÖ\8eփ\91òÌ\93ôÈ\93ëÑ\8fÃ¥Ã\8dîÑ\83éÆ\80óÊ\8bõÊ|é¿}ôÀ\7fó»\82ùÇ|ւ\80ð¼\85ùÂ\7fó¾wõ½råÌyÛÊ}ÚÔtÃÔ{çØríÖzáÔ\80áÖzäÕxðÓyîÚvóêmíåfåÔnÃÃ’fÖÚfàßlØÕnÛÔhÔ×bÔØiÜã^åÖbáÖZ×Ö^ÙÃYäÊ^äÈYæÓ^áÌYÙËKßÄHá¼Fí·EçºVéµWæ±Mè½Tå¶WíµXí°SÞµRè´Mä¶Të¯SìµRâµTÃÂ¥Dã£CÙ«Hå¨Lã¯FÚ°LÓ¼TÒ¼SήKÉ´LÊ©Eɧ>¸£=²©H²¢B¬\9bE®£M½«A¨9¾\91(°\8b#»\8b%·\8c-¾\93=´ <¦\999\9b\9dA\99\96D \995¡\9e=¢¥9\97«4\95©0\99\9d2\9d\99,£\9e)¢\9f1\9c\94/\9f\99$\9c\99# \8f1\9c\94$Â¥\90(ª\992§\922\9e\8c/¦\8f#²\87!º\8e#¹\95\1f©\8b"µ\82'µ\88-²\86-¯\8c+¤\8f'ª\8f%±\8c%§\88+\9e\811¦\88> \93?§\8fAÂ¥\94E¡\93>¤\9cD¦\99D§\8bC¡\8eMÂ¥\90V£\92R\9a\99P\8d\90U\86\8cX\8a\8fJ\8d\89V\89\83R\87\89P\87\80]\85zU\83zO\83sT\91rd\90il\93of\94dl\92go\8aau\92Rs\95Qx\94_w\97ar\8bYd\9cdm\9f]g\9bR`\9bQf\9eQe \l\9bQd§VY°OU®O[­\^\9faZ£eX¨`X§WS®SO­ST¯Pa¦Ba¦Bc²Ea±Hg¯Ol´Fc¾>eº;nÂ9e¸;j²6v·)sµ'o d\85\9cÆ\83\9d½\8d¦½\95¤¾\85\9aµ\81¡¼\87\99¼\83\9b°\90\96½\8c£À\83¡À\80\9eµ\8e\97¶\91\96À\9a¤Â\90¦·\95¡À¡¤¹\9e ¿¦¬Ë\95£Å\9d¨\9a®­\9c­±¬¡¶¥\9f±­\9d«¥ª°\9e§¥\9c\97³¯\94­±\9eǦ\97£»£¨¿\9d§Ê\9c¦Ã\97®Î\97¶Ë¢³»¥¶½¯¾Ã«±É§´Â¶´¾¬´Æ´®Ë¶®Ã¾·¾¼¶ÄŹĮ̀ÞˬáâçÌ\9aáÇ õÔ¬ôË éÒ§éÃ\97꾦àÑ£ðÊ\9fâÉ\9aôË\8cñÃ\95éÓ\93åÂ\8fñÃ\92ðÃ\97ãÔ\8cìÊ\88òÑ}åÌ\85ôÎ\86ùÎ\88ìÅ\7fñÂsùÄvó¹\81ÿÈtù¼\80ù¼qè»zւzéÉ}ÃÃxÓÒ\80ÜÛxÚÚsï×nâÕpìØyêÃyíÜnôåvçßjìâsáÚjâÞ`ÒÚaÃÃkÕÜ^ÖÒjÚÎgÒÕ^ÞÜ]åÓVêÚ[äÃXäÃTäËNÃ¥Ã[çËLÃÃŒUæÆSÙ¼IåÀPàÃJîºLî°Tè¿Hò¼JçÀSðÃVï¹\ä¨Vâ®Kë¨LߪVã´Lì´Fæ§Jà¡Jß²P×·Uç³GÚ¯VþXÇ´XƯKƵAƪCÄ´=º´@®­J¸¬@®¤?¯ªR³§>Ç£3³\935º\8b%ª\97)ª\8b6®\98=ª¡1¨\9a;¡\99A ¢5¤ 4\96§7\94ª5\92®2\8e¤5\8eª.\9e 0\9b£(¢£0\9f£$\9b\99#\98\923¡\91,¢\9b3\9d\95%¬\92.­\94-¯\8d(¢\93\19®\85'·\8e\1d¬\8b#³\89 Â¦\8b0§\8f/²\95(£\97!«\90'®\89)¤\8e2¤\85)Â¥\89-ª\886¢\8a<£\9b5°\9aE¤\9a@¨\99I©\96L£\94A§\8aM£\8aR¢\84D\9a\8cQ\8a\90N\87\8fK\8e\83P\90\8aT\8d\88T\88{R\8e}Z\8a\7f\\8esO\8apb\97qe\93oa\98xc\93mi\93dl\93_o\8bYz\90_y\88Rl\8fZn\8d\h\8aas\95[g\9bR`\95Xa\9bTg\9eYg¡So¬W[²X]°Id¦Z[¯`R¬aY§gP±QK«TQ³XP²RT«KU§DZ©I[©Yg³K_¸NlÀCp»Ae¸8m¿Gb»4i³)uµ%i¿!e\8b\9aÀ\85¢º\8c ¶\8a¡¹\82¦Â\86¥À\8b¦¶~\97³\82¢¹\7f\9d½\8a\93¼\84\98´\93\9cº\94¢À\8f »\9a\9f¸¢¨¾¡ªµ\99³·\98ªÀ\95­¼\94­º\92¥¯\9e©³¤\9b±¦\9c´¦¢©¡¢¥¥\97©\9f\9a¨«\9f£¯\98­½\9e«Ã¥¤Ã§®Æ\9e°À\9b±Ë\9b¬Ã£±Æ¤´¿§»Â©±Ä¶¸À±µÄº»Ã±¸Å»±Ãõν½Ìǵʼ®Ø½¦ÜÄ¡êÌ çÑ¥éÈ\9cêÅ çÆ\99ܾ\9dßÃ\9eü\9cçàäÈ\9aìÂ\8fìÅ\95ÞÄ\92ê¼\89äÂ\8dëÀ\8fãÊ\8eè¿\86ëÃ~éÀ}éÃ\83òÃ\80ûËuÿÇrÿ¼oûºvý½xö¼pëÇqñÃwçÄ}ßÄ\82ÙÊuÕÛtÚÚwßÕiåØißÒfêÛiðßoèÚgèävêàtßßläÙnØÒoÛÃ`Ã’ÃŽX×Ô_ÛÚgÖÖcÔÃ^ÚÃ`äÚ^â×TÞÛSëÙVãÎTãÃMÞÑNàÎMÛËPÛÀQÙÈTâÅNí¾Rè»Jê¿Rñ»NíÂXç¼Xè¯_ìªYí©Tæ«Oã´Nå±Sé¨Qá¤Má¬MÙ­TÚ°YõYÓ®UÓ¸ZηZɸIÄÀPöG»®A»³E¹ºM±³J¶´FȻFÀ¦@À¤;Â\9d.µ\93/ª\9b8«\947´\98:¯\9e5¡£2¡¡0 £5\9d\9f9\91Â¥4\91¤2\9c¤9\95©7\94­,\8f¤,\98¦+\9e£-\98Â¥*£\9f/\9e\9d2\9c\9a*\98\9b0Â¥\95&¦\92\1f¨\94)°\86)­\89\1d«\90$­\8e Â¯\91*¬\91*­\96#§\8b'¬\8f"\9f\93(\9c\87,Â¥\8b)\9f\8d&¨\88.¤\937¨\95?¦\9a9­\999«\91?ª\90A°\96F§\8eI¦\86E©\8fG¢\8a>\9d\83C\99\87F\94\84K\8a\86H\89\84J\88\83T\8d\87O\8dzI\8bvS\85qR\8ct_\98t_\95qg\9aqb\91qf\85ai\88bj\87dl\8car\81bq\85Vj\81^t\89Yr\93\x\97Yl\99Pe\9fTb Na¢Xk®Tq«Qh¯T_±T\³aU°_SµdR¯]O®]Z©WT¤\NÂ¥\X¯R\«U[¬ZY§X]¦S^´Gl±Fo¾<b½>dÂAeÄ;m½9w¿-rÃ.w\88\99Ã\80£¶\7f\9e·\85¤º|\9b¼\8c\94°\85¢¸t\9b¾\7f¡³z\9fµ\7f ¸\89\94¯\92¢¾\8f\99Ã\94\9e¼\92¡µ\94¤¾§\9fÀ\96\9e³\95©¿\99¢Ã\8e´¾\99´­¢­ª\97¦¤\9c ¨\99¨©\9a \9c\9b\99«\9c\9c§¥\96§«\98¥­¤¥¹¨­¸\97­É\99­Ä©¨Ñ\9d§Ç£´¿«½Ä¨µÌ³©Ç®¬Ç«¾Ä«¶¿¸»Ñ±´ÌůÌúÒƮú¨×½«ê¼¥êÅ\9bíÃ\98ðÂ\9eìÈ\92îÃ\91Û¾\95æÎ\8fçÅ\93å·\97ì»\8bìµ\84åÇ\8eãË\92éÆ\7fïÄ\80äÄ\82çË\86âÂzãÃuðÆrðÃqû¾xÿ¼vö¹{ÿ»zÿ¾tÿÀoðÆpïÉxæÀ{è¸xåÌyãÓzØØoãÓxÃÃhÞÎeáÖkÞÃvâÃoêÖqèÔuççmìÃtãÃcÞÊeáÉbØ×^×ËeáÃeÖÕ\áÃcÜÒ`ÃÃVãÓUâÃNêØYëÃWìÓSãÈVâÅUé¿VåÆUá·Jí¸MíÀVä²Gç¼Gò»Sé²RÞ°Rè¸Vê¤`ä¡Uä§KÞ¬Læ±IÛ±Hà¡FÞ­H̬XÛ«V߯QùQغVÕºTȶJÌ¿TÄ®N¸ª@µ°=º¹K«¬>²®@´£@¸\94;º\9bA¶\8f2­\936¬\95;­\9b6³\9f2¶\9e2£¤+¦ 7\99\950\98\9e0\99¢;\9f /\96¤7\90£6\9c\9a+\91¡1££.¨\9d6¡\9a%®\99+©\9f& \96$©\93"§\95+£\8c-ª\970¤\8f"¡\90'Â¥\8b#³\96\1e«\97.¯\98.¦\8f,\9f\88# \95(§\97#¡\91)¦\8b&§\8b'\9f\94+Â¥\93<¢¢@£\959ª\95@¯\99Aª\88@£\86E¦\92?®\87F£~O\9a\80@\98\7f=\99\8aN\91\7fL\97\85P\8b\8bL\90\80P\8c\84Q\84\87U\82{X\85ub\88nZ\8dpj\88wX\8ah^\95c^\88f`\87fm\91lr\93_w\87dq\81]o\92Um\92Pg\91Tj\98Oo\96Zl\9a`a\9cVmÂ¥^g\9c[g¬Ug¯_`Â¥T]§bZ²gT¨XV¢_Q£aQ°RZ§TW¦XN°^b \g©]dªVg­K`­Hf®Gkµ=p½Bd½9j¾6l¼9}¹/xÊ+m\8a\93³\7f\9aµy\9c·\7f¥¯~£ª\85\94¯\7f\92®y\97¼~\9d¬w\98ªu ±\80\99­\90\9a¹\8f\95·\8e\9aµ\93¢À\90¢»\9c\9d¼\94¥¹\93£¾\9d ´\96©·\94¦­\9d²¦¥°§\9e¬¡\9f©\9a£\9f\9e©\9dÂ¥\9d¥¨¨®°©¥«²¡´¶\9c®³¤³À\9eª¿©¦Å«³Å©´Â³¶Æ·¯Æ¶®Å²¸Ä©¼Â±À¹´Ã½¶Ó¹·ÃµªÛ¶«Ö¾ Ú´¢ßº§ëàçÃ\95åÃ\94àÀ\8cãÃ\95íÆ\8dæË\8dïÇ\83ó¸\89ñ³\87è·|à»{æÈ\85æÂzé¾wôÀyï¾\81â¾ußÄrçÇné¼pò½|ÿ½xÿ¹wÿ¾sÿÂpþ¾i÷Ãpñ¹\82ä¿\81ç¹\81àÃ\82ÜÒvÃÖuÞÛpãÓgäÓháÒvâÑrëÔmêÕmîÖmëänòáríÛgÜÉkÚÇeÛÃ]ØÃ]ÖË[ãÃ^àÕ_çËfàÉXêÉQæÇPêÃKäÖFïÎRôÉRçÉOßÉUåÀWð·QîºLó«Wí«Qê¼Uê¾JíºHæ²Lå¤UÞ¥VÞ\9e\Þ¤X×­TØ®Nã¥Xà¦PÙ¢SíR׫VóYɺOÔ¸J÷N˼V¾²S¿¯G±®@°³E«®D®­C®\9b8»\963·\8c2²\8d:­\90:¯\998¶\8d2±\919´\97:­£1¡ /\9d\9b6\98¡6£\961\9d 5¢\995 \9e5\92\9c:\9e\95:\9b\97-§£)§\9f-Â¥\9d-©\95(©\8a'¦\8f(¢\911£\89.Â¥\93-¨\8c*¦\92&¡\91'©\950°\9d)®\9d"­\98#¨\98&\9b\91*\9d\87*\9d\8c\e®\94)­\93*­\91/\9c\913\9b\94.  4\9c\9b1\9e\9e8Â¥\96>§\8a4¨\93B©\8dF©\8eD¡~M\9c\8aC\95\8aE\95}S\96~X\8b~R\8e\81J\93\84O\90\84T\8f\7fY\89\81M\7f\81_\84yf\89\7fg\8c|Z\8awb\94fX\85`V\87je\81qu\89ks\8fho\8e[o\91[f\8dWe\96Zc\93Oo\96Wd\9e^g\9e`f\96R`\9aJdªRi§^f¤a]°fgµde´[f¢RY X]ª]Z¦]V¨VQ¨[b¦^c²[a²Tl¦Qg«Jh®LxºGwÂGuÂ8kÉ6hÃ…2vÇ)xÃ*o\84\9e¹y\9bµ|¨·\88\9e±|\9e®\81\9d°\7f\9b³}\94·x\97·r\9b«{\97¬\86\96£~\95®\8d\95«\86¢¹\88¤½\9aª´¢\9c²\9b£±\92¨­\92¤­\97£­\98§¥\97°¤¡©¬\9d¢£\9b ¤\9a¡\9c\9b\9a¯\9f\9fª¦ ¤¨¦®´\9fª®\99¦« ©²\97®±\9c­À¨®Â©²É°©Ç²¬Å³«Ë¯©Ë³®Ë¸°Ä¾«Ç´­Ã¸²Ñµ¬çº±Û­¨Ø¯\9dæ¾\9bà´\9aßµ\8fà¾\94ܾ\93áÂ\8aßÈ\8fðÃ~ã¼\85åµ{òµyñ±\80ò´|ë¿tê¾qâÃxßÆtæÃwãÂjèÅjë½tá¼\7fö½sòº\83ñ¾\7fÿÄwցpÿÃeøÇzïºxè½\80çÃzì¼\80çÄrÞÃxÔÞgØÃdÞÙdå×dÃÃfêÒlàÖfâÚoïðpéÚeçàgàÒsàÅfÞÇhØÔ`ßÖeâÊhÃÑcëÉaæÃbáÃOæÃNÜÈVìÇRðÅZñÄMïËOíÇKç¾WäµSòµRä²Jí©Nê°LéÄSæ´Nå±KߪSß²Và¦Ká\9ePÛªVâ¡UÞ£^à©XѱVÙ·QîTÈ©S̯OƲIι[Ì®XùQöFÀ«Mµ:«­@¤¢8² ?±\9a0ª\942§\924¯\927®\8e5´\9b4¯\9b?´\9a;¯¡0¤¤3\99¤=\9d\9e3¤\9f4\9e\993\9a\975\9c\92=\95\96:\98\94+\97¢'¤\95.¤\980 \93!¬\8b+¢\89\1f­\90"ª\852§\81.£\8d0²\8c*¡\930¦\87#°\950´£(§¢ Â¯\96&\9e\9a$ \8b/¦\8d"\9b\87\1a\9d\94"§\97"\9c\99.¢\9f*¢\9e7\98¦0¢\9f;¤\9e=¯\8b9­\86<§\84?ª\81E¤\83A\9d\87D\9e\85M\9e\80H\9a\84M\90\84Z\95\82O\92~R\8a}K\89\85O\8e\8cO\85\8aP\85\80^\8f\83Z\8f\80a\87|P\8coK lS\98q^\86ug\82rm\7fet\89fm\8eYo\87aa\92\l\8cRj\92[r\96Qo\97eq\95\o\95Qj£Rc¡SiªZk¦\g§ae§as X`¡QR\9a^T¡[\¡Xb§L[\9e]`¬Tb²Qo¨HiªPl²Rl¾RiÃG}¿Mwº;zÇ;wÃ…?\82ÃŒ)tÃ…!p\83\9bÀ\81\9aº\85\9b¿\83¤µ\7f\99®s\9bªn\93³s\96±}\8eº}\95²\7f\9a¶\82\94¨\8a\96¬\85\9c«\86£¬\88©º\98©«\97\9dª\95\95§\9a\9c¬¡\9c¬\97§®\9c©´\9aªª¨§¯¤¦ª\9a££\9b\98¢\9d\97¬¥¡²­¢¶¯¡¯¯\9d¯­\9d£¬\96¤§\9bª³\9b\9e²\9d\9eµ­ Å¯¥Ì²¬Ä¹¦À¸¤Ç°±Ò¹ªÑ´¨Ñ¶¬Ñ³§Ø±¨á±¦Ù«¤áµ\9dܸ\9bÚ°\95Ö¬\8dâ¶\8bßÃ\87äÀ\8bâÌ\81êÆ}ðÅtåµzî¶~õ¶yï¾ué½jéÇhåÂnè»oÙ¾cÃÄkâËmàËwéÅ~ï»|ð´}ì¾\86ö½~ùÂvùÄoíº{î¾zðÃwíÀ~éÉzéÃ\7fßÒ|×ØoØÓpÚÓdèÖ`Ã¥ÃgâÃaßÞaçÞeèêeòÜcêÖjæËjèÃsêÉuãÓsâÃoåÑbèÕ]ã×_àÃSæÉWã»`Þ»Zá¼PêÂVíÈOåÂYâÅJì¹Jñ»Xä¶Uë¬Uâ®Oà¯Hß»KöEøJÛ¶Ié­Ið\9eYê\9eXñ `ì\9fZÛ¡dÚ«\ô[Ñ°[Ñ¥KΧL΢S¢W£TʱUùUÅ´L»«K¯©>²­3¥¢4¦\9a6§\942¤\912¬\95=°\8bH¨\8eB¦\93Eª¡@§\9f7¬¡9¥§< ¦<¦¨;\9d\9d8\96\954\96\945¡\96.¢\93-¢\940\9f\9d-\9c\9d(¦\94%¡\88\1e\9f\87&ª\8e+¬\89(®\86$¨\86,²\8c#«\87'°\87"¨\8a-­\92.§\9b(±\9e$­\99\1f¦\91\1f¢\8c#§\8f)ª\89&­\92%£\9b$¦\9e(\9b "\96\98-\99\9f4\9a\8e-©\8c2²\8b0¬\8d6Â¥\919£\85<\9e\88G¤\7f@\9d\829\99\80C£wO\9bzV\97zV\97\81Y\91\87N\87\83O\86\81P\8f\87L\95\81S\91\82Y\91}Y\8dlK\90pJ\9dhR\8fjW\8apa\87h^\86ne\90ln\8fYi\8f\i\86Vg\8fXg\8a\s\90Wy\9fZs\9e[s ]s¡Xg\95\l\94Uf¤Yk¯Ul¨Xo Yn\9c^\¤TT Z[§W]¢RaÂ¥Ve¤Vd«Vi¯Ij¯RmµNj¹Kh¼Ot¾Ky´D\81ºHzÆ>}ÃŒ/\82Ó$u\89\9dµ|\98¶\81\99»\80¬¸v\9c³r¤¶w\9a´j\92ªt\9dµx\95«z\97¯\7f\8b­|\90 \84\97¡}\99¬\8c§»\8a\9e­\97§°\91¤ª\94¥¥\8a©ª\98 ¦\92««\93­­\98¨¦\99\9d¨¥\96ª\96\98\9f\9a\9d¥¡¦¨ \96®«§®£\9c°¦\9e¢¦\98®¨\95 ¬¢¥¶\9f¡´£¤¼¦®Ä¨¥¸¶«½´¦Ç­¨Ñ±§Ã´ Ô²¡Ù²¦Ã³\98Ò­\9fá®\97è¹\9eá³\96â¯\90ä°\92é³\81é»\84Þ¶\80åÈ\80ìÅ|ð¾~í¶wö±sòÃkñ·nå³rèÂvèÌgç¾eÖÃiáºaâÆqïÃfìÃuçµpåµ\82ò½zñÊkù½kð·n÷½mñÈvïÃwæÂ{ñÂpðÑsåÒkÞßnáØjâÑcéÕoïÒdãÕgÛÖfÚçdáðnêájàÙhæÃvíÃwêÌsåÒsñÃläÛcäÔg×Ó]åÔ_àÒLáÆRäµYãÃXñ¿LâÅLåºMà¼Zð¶Oêµ]â·T×»RÙ¬QÙ·PÔ»EáµUׯJà­Qà·Fá®OÞ¡Yã©]ß\9bSå¦_äPܨZîLѪTÃŽÂ¥MÓ\9cEÇ\9ePÒ«VÑ®RÌ¡VÃÂ¥G¼®9´°3­ ?­\9b:ª¡<­\90<Â¥\9b4¡\92>\9e\91F±\91C¡\8a?¤\91=³\9e7±£D²ª@ª\9bA¨§7\9d\987\9c¡,\98\974\9d\9c,¯\97.\9a\91+¢\97"¦ ) \93$\9b\89\1d\9c\87$«\87/§\8b.¯\91*¦\8f'¦\8c\1fµ\8b&­\8d Â¨\8e#­\8e*\9f\9a(\9d\910¦\99$\9b\91*\9b\97%\9d\8b)®\8a3¦\98-§\9f/\9a\95#\91\93 \90\9a0\9f\944¤\8e6£\9a1Â¥\8d/¨\9b,¯\92> }Cª\84G§yE¦|<\9cwD\91vF\9c}P\92vW\8e\8bL\84}M\8d\85Q\8a\86I\95\8aW\90\86O\8b\84Z\96\80^\8bsP\8cpP\9ecS\95hW\97v\\91sc\8egj\91mb\95[l\8e[j\7f]p\85[x\91Vr\93Yy\9fUp\9e[v¡Ms\95\u\8b^m\96Wc\99To\9d\tÂ¥Nh¡[o¨^]§Xa\9fQeÂ¥P\ªLl\9cJ`¡JX®Nm«Di´Rd·Gs®RtÃJr²MqµAy½F\80À;{Ê8\82Ã$|\83\93¼}\9c·\84¦À\86­¸\82¬´x¦´uª¯k\9e«i¢­o¢®j\99 t\92¡~¢ }¡¢\86\9f«~\9cµ\80«­\93«©\93¬¤\86¬«\85°¦\94¨§\8d«¥\96« \93ª \9dÂ¥\9f\96¡\98\94\93\9c\99\9c\9b\9c\99\9a¦¡®¢\9b²« ¯¢\97¨ª\96«©\92§¬\94§¯\9d£©\99«´£§±¤ ½´¨½¬¤Ç¨©Ç² Ã¬\9bĪ Ã­ Ëµ\9eÑ·\93Ú¯\97å³\9dï­\93ê¯\86ç°}ß©\80ظ\84ܵ\86îÄ\83ïÃ\80ñ·yù²|û´nöºiò°jæ²uõ·móÇpë¸hä¹eéÆpéÂiè¿hè¶fëµiå­zéµlñÆhó¼n÷¹fï¼pôÂiöËlîÆtëÈpêÒnÃÕrÖÕsÛØjÞÔiâÕpçÃeéËjàÔpâÙiÛèsÜçtßÚnäßuãØoäÞlìÚbëÔ`îÖ[êÖaÜÄcãÆTëÊMò¾Hè½KáºNæÀMêºTâÃKÛ¿Räº\ñXÞ±Y߯TØ·`à·WתMÛ©QÞ§Qß©GÜ°NÛ°Uã«SצUÜ¡\Ö¡[Õ\9bUß\96Wà\9cMÚ¤JÙ\9bJË\99Q΢FÃ\99SÓ\9aWÓ\9eEÈ\9aBè7º¥3³©,®\9d4¥¤5¨\995¡\9b=\9d\8e<£\84;ª\8b@­\87<§\8f9®\975¯©>¯¬B±\9e>®\9e7®\9f/®£:¨\9d3£\942¯\954§\99%\99\99"\9f\95\1e\9d\99$¤\94'\9a\91(ª\92%¬\91.²\8b#®\8f&¨\89'³\8a Â¯\8e(¤\8b!\9d\8d+\9e\981\9b\925Â¥\8a+¡\96"\95\98*\9d\96*£\911Â¥\98*\9f\96- \92-\96\94-\9f\9b.\98\97'  $Â¥\99-²\946°\981¬\8c3¦\838¡\88=Â¥\7fD\9a\82G\94xM\9cuN\9dyS\96wI\88\84J\8e\83K\8e\85U\84\8aZ\8b\81W\8ezQ\91\81W\8cw`\8euZ\8cn_\92gW\8amT\93j\\91rb\8cme\8bcd\91gn\94[r\88Zr\84\r\8dNu\90Xt\9e[|\94S\82\9bMz\9bIj\8ePk\8bUq\95_l¢Xg To¨_k£]a§[e¨J^¡AeÂ¥Fm¡H\¨O[¨Oc¤Pp­Wf©Ok´Li¼Mt¿No¼>zµ9~¿<\80Ã0tÇ!u\7f\96¼\88\95·\7f\9b·\82­¶\80¥ªw\9e°n£¢p¢ªh¤\9en¥£u\9c\9an\9a¢\83\98\9d\82\9d\9d\81¤°\80\9a±\82£ \8f­¨\86°©\83¨¨\8c¥ª\99« \95\9e\9d\8e¤\97¨\97\9f\99£¡\93\97\9c\8c¦\93\90¤\9e\9bÂ¥\9d\93¢«¡¥¬\9d¦¢\91¯¨\96¬¤\9a¤´¡¯´\9e¤³\98ª¹§¦¹±\9c·®¥·ª\9cõ\9fÀ¨¡Ê¨\96Ó²¡Óµ\96Ó«\9fܸ\98Úµ\95è¯\99äµ\94è§\81ä³\8dà§|Þ¨{ä°\82ä¸\82öÃ\86îµ~ö·rþºoú´nù½oò·kë¹gùºgô¾qð­gôÀmìÄfë½cé´oè²oé¶tôºjëÃgõ¹níÄo÷ÈhúÌiøÃcéÅkçÔtæØmëÕqàÌmßÔißÕfãÓkáÜqÛÒoÃÔg×ànÃëpÚ×j×àpßÓpá×hçÔeìÃ]àÃcîÒbÃÃŽVßÃ]ÜÉ]ãÃJá»Tî·Ræ¾QÃÄGßÇSÙ¿TÕ¹Tè¿YÙ»bÓ¼[Ó·aÒ¸_ض^Ó²SÓ²QÖ§YÚ«VرFÞ¡Pä¦[Û\99[æ\9bVà¤ZÒ¡YÚ£QØ\9aRÙ\9dNÛ\9aWÕ\91\9b\9aWØ\98WÓ\97HÃ…\97\9f4À\9d3º\9c;¶\986ª\983®\8a@\9f\939¢\90G£\8b6§\979¬\8aE®\89G¤£<ª\9e>¦ 5¨\9f9¤¦)²\9e/¦¡)Ǭ/·\9b4³\98/\9f\95*¢\9f\1eÂ¥\93#\9d\8b"\9b\95,\95\98.¡\8b2Â¥\93.¢\902«\87+¤\8d"©\88#¬\8e%£\87-\9d\93%Â¥\95*¡\900\96\8e/\9c\931\90\931\99\9a&\96\9e(\97\936\9f\8f*\94\8f)\96\9a'\9a\9a5 \981¢\9a* \9a%\9f\9a8£\98=«\94<©\8b9¨\898Â¥\7f:\99\7f<\95\82E\93|S\90\7fJ\8b~R\91{Y\97\83Z\91\85c\96wV\8e{e\8b\89U\92}Q\90z\\8bq[\8eyT\92sT\8fwO\92mV\9bf]\90k`\91j]\96ql\88ia\84\t\85Sw\89Wx\92K\7f\90]\7f\95Os\9aUy\99Uu\97Is\9eYv\97W{¡Uz¤Pi¢\i¦P`\9eRl§Da¡Ae¡En§Hc¬K[«La®Lp§Nt©Jg±DmÂF{Ã…Br»=yÇ3~Ä6|Ã1zÃ.|\82\9a°\83\91²\84\93ºv£¸y«¯~¢¥r¡¥u\9c£n¢¢m\97\97q\96¢v\9a\9dx¢\9c\83¥©\86£«\85£¤\81§¡\82\9e\9d\81¢\99\85­\9e\8f¢¡\95\9d§\93\9b£\96¡¤\9d¢\99\9c\95\9c\92\92\9f\95\90\9e\97\89ª\92\8cÂ¥\98\89«¤\97¥ \98\9fª\8e¦¬\8b¡­\95ª¤\9d±ª\9c¨¬ ¥®§\99¶¢\95®¤\94º®\9c¾´\94Ë­\8eÒ¯\94Óµ\93×·\9cà¼\94Ü°\8fæ³\8bäº\8bñ»\82íª\8aã¦\8bãª\86Ú¢}éwã±\7fë»zðµyùÀrø¹lô´jó½eó¾ló¶eôºjú®nô±oø¯gí¼jï½iíÂkç¶tì¸kî®iì²uñ¿wîÀlîÃcðÑdóÚkõÑfñÎkóÔtéÔmêÎpàÎtßÃpÙÛqÛÜnÓÖfÕÖm×ÞoßÞnåÖaÃœÃdÚØ_ßÚaÚØaàØaàÑ\åÈXéÈRãÃSÃœÃOãÃUêÀ[èÂRè¾SÞÃQàÃUÓ¸Vþ^ÜÄ]Ü»ZÙµUâ°`Ü·aâ¬[Û±Tã«^Ú¤Wß\9fPߣOâ©Tã¤Rç\96NÃ¥\97Yå [Ø\9fQÚ\9b^á ZÕ£VØ\9cSÛ\9aNÚ\8c\93\91NÈ\8cBÃ…\8aDÇ\90C¸\94:Â\964º\893´\87;©\8b>§\97G«\95@¯\98=¦\9b?« B°\94E¨¡E©\9dA§ 7¤¨-¬ 3Ǥ,µ«1¶©-¯¥)­\9e(¦\9d Â©\99'Â¥\97&\9a\8d \96\88,¡\90'\98\94,\9c\97*Â¥\952 \890\9d\84)¨\8d*­\80$«\83,\9d\89/\9c\84&\9e\89/\95\94.\9d\8f-\9b\92.\91\9f&\98\9b)\9c\9f(£\970\97\94,\99\8e2\9e\8c7¡\92+¦\861§\89+£\90. \907\9b\89*¢\87. \83;\9d\889¡{D¡{@\93\85A\94\83N\9a\80U\8e|Y\8d\84[\96{`\8etg\8e~a\98\88f\98\82[\94\7f]\95v[\97pW\95uW t\\9cuR\95pX\97nW\97hZ\8bkZ\86[h\8eZm\89X~\87T}\94M~\91S|\8fG}\8bLv\93Is\97S{\9cT\80\9dO}\9eWr\9aTn\9bWh\9eHm¨Hs£Gm©Ge¤;iÂ¥>f\9eDg§@k¨:k´>l°Ct´@q¼Gy¼DzÀ<uÈ@wË5uÓ*~Ã/\89{\87²{\8c³v\97»\81\9e¸r\9f«~\9e¤~\9d¤u\94\9fv\8d\9be\8a£p¡\94p¦\9cy¤\9c\89«¡\8aª\9e\84\9a\99\81\9f¤|\9d\96|¨\9d\88 \9f\8c¦\99\8c£«\98ª\9c\97©¢\8c ¢\95\95\95\93\97\97\9c\92¢\9b\94\9d\93\9b \9c¡¥¨¥£¯\98¨«\96¯°\8d«µ\94Ǥ\91««\94\9e±¢§®ª¡µ­\9a¨¥\91±¦\96Ŷ\94é\91Ω\91ò\9a榢ì\9cÖ¯\8bÙ±\91ß»\85æµ\82ê®\8aæ\88è´\84Ú¬\83æ´vòµtõÀ{ø¸tô¹bñ»jþ¾hð¿põÃiù¸aöÂbôÃcí¼hë¼dç²kò¼oöÃdò´mñ½rð³líÀkíÃfâÄlòÊ^éÂZóÕaïÔfòÚgùÕgòËiîÃtäÔuáÒyÒànÛÖk×ÑlÚÑnØØqÖßrßßpß×bØÕjÓÑYàØWãÔbéÃVáÂVàÈYîËRèÂXà½SâÂOçÈXßÇIýJÙ»PدUÔ·X×Ãdѽ]äµOÙ²Zß½aìcâ¶VߦMÛ£YÃ¥\9aJàTè Và\99IÛ\9eGÞ\90OÃ¥\95TÓ\9fLäYé WÔ\9cHÔ\96WØ\97PÞ\85LÃŽ\8fRÈ\90QÃ’\8cBÈ\8c=µ\90:´\916°\8f9À\8b>«\886¯\83B¤\8c4´\99B±\9aA¢¥>°¥=£\9eLª\92C\9e\94F\9f\996\9b\97.£\9e*­\99'­¥(©¥"«\95$©¡%¤\93"©\94(©\96-\95\8c\1e\96\850\9e\91+\9c\93 \99\8b)¡\8d(\9f\8f/¬\95+¦\8e,¢\96)¯\8d\1e\9f\92/\99\88%¢\90#\96\9b$\9c\912\9a\9e(\9c\8e4\8f\9a4\9f\97)ª\96)¦\92)\99\89, \8d(\9e\95(\99\97)ª\95.\9e\98/\9c\8f:\92\867\9e\811\9d\821\96\85:\98{B\9ex>\8a|I\87\8bR\96~X\8bt[\99\82R yV\8d\84b\8e}b\95tQ\9a\7fT\98oW\8eka\90k]\95r\\9dp[¡sc\92iV\98sR\90fV\87b^\95hp\97fx\8cSm\81Ls\95W}\91Yz\8aV{\85U\80\8cMr\92Ku\8fM\82\95K\7f\99I{ Rx£Xj\95Tp\94Nu\94Rj\96Lf\9fCl§Gf¤Qu\9dNq¦Cy¦Ir®A\80¦M\83·C\7fºG{¹6\7f¼AuÆ8\8aÉ4\80Ñ6\8am\89«w\8d¯x\88¬}\94µq\8b³r\90ª\82\96ª\80\95«t\92©m\8d§x\97\9ay£\94} \99\84©\99\83¡ \87¡\9d\8b¢¤\82§\9a\83£\98\88\9c\9b\90£¥\87  \86ª\96\8f¨\9d\8c£\9e\92\9f\9e\8b \9c\94\92\96\9e\95\9e\9b\9b\9e¡£ª¦¢«¬¤¥§\96ª¤\8f¡±\95\9e¬\9d¥³\9a\9a³\9b\9c¸¤ ¬¤\9b±ª\91±¥\98è\8f¿­\90À³\98¿´ Î©¡Ì±\9aÛ´\93Ö·\91Ôª\86Ú±~Ù¨\85Þ³\8cî\82â¬~ì¶ró¾nô½uòÃjæ½bë¹Zù¹]ÿ»e֦jú½k÷½còÅgë½dàµb߶oá½sî¼eñµoó¹wïÂrâÀoÜÄqßÉcèÃ]ò¿_æÄgãÃ^ìÊhñÓdôÑgïÇtëÂ}ÛÎwÚÑ{ÑÙq×ÃgÜÛgØÚdÙárÔápÃÃœhÚÎfÖÎXÖÆ_çÂ\êÀXßÅJß¿KìÆOîÈUíÇVë¹VؼNÕÆKÃÇIÓÆLóZÔ¶aÌ´`Þ¼Sà²RÒ­R÷`Ô±bç²Tá¤PãVß\9aLæ\9ePä\99Oà\94Mà\92IÙ\99GÛ\9cGçV× NߨEΪSÃŽ\9cOÕ\97\8cAÃ’\91\8dCÓ\98@Ã…\93F¶\8eJ´\92?¼\91G»\8cH²\91C±\8b5®\8b5«\978¯\96>ª F\9f£<\9fÂ¥A¦\9fF\9f\939©\8d-¢\95,Â¥\9b(¨\9c,Â¥\9a#­\91&³\93!¯ )­¥*©\99,Â¥\8a0\9d\80+£\7f5£\8e/\9e\8e)¢\90$Â¥\8d%\9e\97"¨\8e#©\96+¦\90(ª\91 Â¥\8e,\96\935¡\91.£\97'\9c\9d(\9d\9c)\97\94-\91\8d. \994§\9b*\99\8e$\99\92 \99\8f!\96\92,\95\9c2 \9a1\97\930\98\94:\95\8e:\8e\84?\93\8a7\99\849\91{D\8b}B\87yH\86\82U\93xQ\91z[\8fyW\9ayX\92z\\95{R\8d}^\8dxX\8cr`\90kX\9apZ¢qe£f_\9akf\9cu`\91rZ\97kd\8fjh\95ip\92cy\8dUv\88Rq\94Yv\95Tz\8cL{\89Oz\88R\7f\8aNw\89Pp\90Qw\9eL\80\9fNy\99Ip\97Uv\94Op\93Ug\97Dg\9dDb¦Jh¡Ou£J{\9aHy\9eF\7fÂ¥L\7f¡J\87«M\84·K\82½9zÉ9\86Ã>\8dÇ=\84Ã’<\83n|²|\8c¶x\88ª\81\9d´x\98²r\96¬\82\8a§w\92¬u\93£o\88¦p\9d\95p¢\94z¢\97}©¡{¤\9b\88©¤\7f§\97\87Â¥\9a\85\97\92\8e\9c\96\8b\92\9e\92¢£\88¡\96\93«¥\8e¢\95\92\9d\9e\9b\96¢\94\96\9d\92\9e£¡\93\9b\99¥©£¬ \9c§­£\9d§¥\9a\9e«£¡®\9d¨­ ©¬\9f¤³±¦±¦\9a´¸\99¹¶\8a±\93ê\8aµ±\92À±¢Ñ \9bƤ\94Ì¥\99Ú³\85Ö¦\88â\8bÙ°\8cà¤~ܳ\80û~óÃzî½gø¿rö¶bæ½bôº^óÀZìÂ]ú½iô»kñ¸aï³föÄmà¼fÚ¿iéÃgé·oñÃrò°vé³oãÄiêÃeàÎbëÆgîÀhãÀlàÎZßÓhß×véÔmæËußÃxÚÊjØÕtÙÙv×ÓkÜÖoØåkÃ’Ã¥wÓÒsÃÛoÖÃjÓÑdÙËWÜÆXèÇUÞÃMæ»GéÀKã¼[èÄ`ãÇYÖ·SÒ½LËÂFÆÄNȶ^ɶ`Ô«a×»WÓ®ZÔ©QÙªbã°Zè\9fQâ\9c^á¦Sé¦TÛ\95[Ã¥\96Pæ\8fIß\98BÚ\9eNè¤Nè®PÃ¥\9bLÓ\9c>Ô\96@ÃŒ\98NÔ\96@Ú\94;Ô\8eIÃŒ\93C¾\8a\8aK¿\8e>»\89\84?µ\93Eº\8fF©\8f>«\85@¡\8aA¥¡B\9f >£ 7\95\9a0\96\974\9b\92-\9c\9f/¬\9a4°¢0°\963º\94+¶\971¹\93-®\984¬\9c.µ\8d$¢\8d/ª},\9c\832\9f\89-¡\8d5°\8c1©\8f,Â¥\9b-¦\9b&´\92$¯\94%®\9e\19\9f\920£\9f:\93\934\9c\8e6\9c\9d6\94\94.\9c\95&\93\9c-\98\98(¬\90'\97\91"\94\90'\90\95'\96\9d&\9b\900\9f\9c*\8d\9b1\95\95>\95\88:\8ax.\9a\85=\93\7f=\9a\8dC\87\83D\88\8bH\90\81Q\94\85U\92\82S\8fyT\90vQ\96yT\98yT\8buY\8by[\95kT\98mZ\98ma\9eu_\95o`\9arW\8akg\93n]\8dhf\82hj\8a`w\8eex\90Wt\83Py\8fX~\92\q\87U\81\82Vr\84Xz\94Hx\96S{\90L\83\8cNx\9dKm\92Mx\93Vh\9aTq\8f[e\9bUc\98Ue\9fKg\9dKo\9fU\82\97H\81\9cS\82¢E\8e¬J\85´D\8b·E\7fµ<\7fÃ…9\8cÃ<\8dÃŒ=\86Ã8~{\84¯z\82®q\91°y\97¯x\8f·\83\95²\86\8d²|\85Â¥u\85¦s\8d\98z\9b¢w\9e\9cz\95\98}\98\97}\97\9e\7f¤§\80«¤\80¢\99\89\9f£\8e\93\9c\87\92\93\8c\9c\98\8a\9b\95\92ª\9b\9fª\9a ¤\92\9f§\91\9e\9a\9e\93\97¢\97\96¨\93\9d¥ ¤¦\9f¢\99¢¡\9c\9f¡ª£¥§\9e«¯¦³¨¢®©®­ ¥®\96§¹\93®¼\89µ±\89½¹\96¸²\94»©\94Ƥ\9fâ\99Ê\9f\8dÇ©\93ѯ\8fÛ­\94Þ§\87å¥\8fß´\89è´\83î¼që´ní±gî¹aô½\øÆXñÃYúÃXñ¸aõ±iù²gú¼kó¾læ²qå·tã½xä¿xë»m÷·sý¿yó·näµhàÂjÔ¾vÙ¼rûjàÆgàÃuÙÃzØÔvàËzÞÎkÑÆmÔÃmÖÊt×ËrÊÛoÒÕuÃ’ÃœtÙÎuÙÃjØÉcÃÇbÑÊfß¿XÃÉKéÄJïÃNå»Rê¶Zç½\ì¹Nâ½MßÃLÃÃRùRòY×·XòXȱWôZÚ¯]تTקTÃ¥\99Uà\99Pè\9d\é\9f_á\9dZäVä\99Hî\96@é\9aGߧAã£LÜ¡HÑ\97CÃŒ\97GÑ @Ó\9dFÃ’\8cCÃ\86\8d\95FÀ\8b?Ã…\88AÂ\8bKº\8cG´\8b@±\90@Â¥\88<ª\8bJ¦\8dI­\9cN¥£E\99\9a>\99\990\97\930\9f\9a-§\9c1§\9a7¯\9c8º\9b>µ¤A¼\9d:º\91;³\90.¶\93*°\87"®\89,§\83+°\7f3§\833®\915°\90/§\99&­\99+©\9e%¯\9b\18©\9d\18¢\9f!¥¤2¡\9e1\96¡7\8f\925\92\9b8\90\976\88\98,\8f\9a'\93\97. \90+\9f\912\9a\94+\8d\91&\91\9e%\92\984\97\991\93\8f6\89\852\86\844\92z*\94\851\9b\846\9e\90:\93\8cA\8c\8fP\8a\82S\8a\84O\8f{M\92zZ\8cqY\8drN\95wR\8cqS\8dmZ\9cnU\9boY¡j]\9bmc\98jZ\91sY\8cia\8cpa\87qc\85hs\8d_x\89cy\86Zz\8cV\81\8e]}\95Tu\95Vz\8bVx\8eR~\91S\83\97[y\8dU\7f\96Sw\92Rp\9c]r\9b\h\9fbk\98Xj\9dWg\97\t\99Yt£PtÂ¥O|\9fW\86©P\89£O\8b«M\90ºG\8f¶F\8d¾I\8d´L\91»A\88·;\8fÀ<\8av\89«~~³|\8a®x\86¦\80\97²{\91¨\80\85³\80\8a¨v\8d\9ds\8e ~\90¤{\97\9bx¢\98\7f¤\9d\85\9c¢\81\9b¨\86¦¥\83¤¡\85\9b\92\93\9d\9d\8e\95\8e\88£\8f\8c¨\94\97¬\94\94\9a\96\9e¢\8f\9d\9a\92\9d\97\9d\97¡\9f\92£ \9e£¢\9e¯®¢\9d\9d¡\9b\9e¢¨\9eÂ¥\9f§²°¢¦ª£µ©£® \9d¨¨\98£³\8cµ¦\93¸­\86´«\93º¬\92¾¥\9cÄ\9b\9aé\90Â¥\95Òµ\92í\91Ôµ\84å±\89ç­\8dð\8cæ²yî½tã½uá­qí¾]ð±jé¾Zô½[ê¿_ë¹gö¸bó¨]æ³dç¼dî²të¾kçµtîÃqó¯oç´dó¾uô¿läÊiÛÄdåÀeÕ»nÞÌqÚËsâÆnÙÃs×Ó~àÖnØ×jÃÊt×ÌhÎÓoÑÖrÓØrÌÞlÓÜmÌØfÖËcÑÉjȼaØÆVÞ¾TÃÃIèºJâ¹UìµSÞ¸^ß³[â¯NØ·ZθNËÄIÌ·UѼP̲Y×®^Ú»]Ò¬PÕ­[îWÖ£XÛ\97Rê\9fRô\9fIè\9fOâ¥Uê\9bNÚ\8dLè\94CÛ\92HØ£HÕ\9aIäNÒ£?Ù\9dIË¢<Õ\93CÉ\8c\85H½\83F½\84=¾\89\90\89L¹\8c>¾\8f>¯\84:³\915 \8d>ª\8eB©\9b@\9e\9c9©\91D\9c\8d@­ ;¢\930ª =¯\99?µ\93;¼\98@¹\97@¹\999·\9c,«\8b)²\90.·\89*¨\85.³\8d,²\84-·\87:³\8a(±\89!®\990©\9e.ª\90%¨\8e Â¥\9e\e\99 !\96\94 \9d¡5\9c\97;\8f\8e=\90\9a3\94\933\91\947\96Â¥'\9d\8d,\9b\97$\9b\8c\1f\96\8b\1f\9b\9d'\94Â¥\18\96\9c-\97\95+\91\870\8e\81,\95~+\86x-\8f\88+\94\8a8\8axA\8e~@\92uP\8e\84Q\8e\81M\83zL\8cxY\97x[\91mX\92zc\91yZ\95wb\91t[\96dc\92r^\9fhe\99la\9bmh\98lY\8bkc\88ll\86`l\92fo\91ps\94bu\91Z\88\97_s\8bPu\87bo\8a_m\8cX}\98\\86\8dPy\8eX\80\91Y|\8dWs\97bj fc\9b_o\9dbu\98Xt¢Yp\9e^|\9cTt\97]z\9fT\85¢U\88¯O\88¶L\8b«J\92ºI\94»O\97·A\85°I\82µE\7fÃŒB\8er\87§v\84«v\80¤w\86¬x\83±w\88®t|±y~²{\82®~\95Â¥\81\98«|\91¦z \9f\81\9e\9b\88\96­\7f\97­\8a\9c£\84\99§\81\96\9b\88\9c\8d\91 \97\8dÂ¥\8f\89¯\98\8b§\97\98\99\92\9a\96\99\9c\99\92©\9d\93¢\9e¢\9e\9f©¥¨££¨¥¥¢ª\9f\9b¢¦¡¡®\9d\9e¦£\94®®\9a´ \98¯ \94µ\9f\88®¡\8dµ¨\8d¸£\92¾¤\9aã\92Ã\9d\99É\99\96Â\9a\93¼ª\94Ê®\8aÓ¼\83Ü·\84Þ©\8aÞ¦\87ç±\80ä©vá±oÚ½fä·lç¯hâ¯gëµeë¾QíÆZðÂbì³fè¬cí¶cçºeßÀmæ´në¶hì¸lð¶hã°féºuíÅ{ìÅ{äÇnÃÇmßÈjÕÃrÜÄxÕËtØÄwÃÉwãÚrÃáiÖ×oÔÖcÒ×hÃÖbÊÔhÃÃg×ÙqØÎcÈÔeÉÈ\Ò¹[ξVÔ¾WÃÀOí¿Hä¿Hã½Xç±Xâ³XÕ¸SÔ¯WóKÃŒÃNÕÈCÑÀI×»YÔ¸\Óº_à¬WÚ®RÕ­Nß©NÚ¡Pá¦Hî\9eGÃ¥\97JÃ¥\9eNä\9fDá\8eHÙ\8aGÛ\96QØ\9c\9dBË\95KÕ\9eJÜ£CÑ IÕ\93FÈ\8e\8e>Ç\86@½\8b@·\95CÀ\95@Æ\83JÊ\83M¿\8dA¾\8b3¯\8d6­\87<\9d\8e<\9b\88>¤\91>­\92F¬\92C·\913°\992§\95:­\95G¦\8eL­\98@·\96@½ 3°\927´\8a.«\83,­\89;ª\8a-±\8e)´\8a-¹\802º\7f0¾\8d#²\8c+©\95)¢\90+©\92"¢\8b\1d\9b\90 \9c\99#\96\920\9b\98=\96\928\8f\9c1\96\9f9\91Â¥4\98\9e&\98\93(\9b\8d\18\99\8f\1c\93\93!\98\9f%\8e\9c\19\88\9a\1e\8b\91'\8e\8d&\8cy0\91~;\8b\857\97\862\93\7f4\92|7\8at>\83p<\82tK~\80P\88\80O\89\82T\9avd\97zf\97sc\9d{[\92yY\91u\\8fih\9agh£ma\9bqc\9ehf\98ad\98i^\8ahe\8dej\88s{\8ep}\8aqz\97g\7f\8bf{\8f[t\93_{\89aq\96^\80\99X}\89\x\86O{\88Sz\86Yp\8daf\98_l\8fbr\97`u\9aTl¨VnªWx\9cW\80\96Y{\9fX\85§X\83°Y\90¨L\85©N\8a¯C\97±H\97°O\95³E\81¾>\86ÊB\86p|¯j{²s\85²pz³oz½z\83Àr|º||°\85\87±\87\96³z\93¨}\8c¨x\8f\9f|\95\98\82\96\9f\82\9c\9f\7f\91\9d\87\92¨\80\9c\9b\8b\92\98\92\9e\90\92\9d\94\8c\96\95\95\9d\9c\98¢\96Â¥\95\95£\93\8fª£\9b\9e  ©\97\9fÂ¥\95®§§¬¤\97¡¬\9d\9c­¤£¨\9d§³¥\97´¢\97Ȭ\97« \97º \8aµ£\87¹ª\95¹¨\8b²®\94¯¤\90º¨\95¼\97\93¼ \91¸«\9a˵\8cǶ\7fÖ¶\81Ó²~à¸yê­xä¶nà¾gã»så¯nëlåªdä¸Té¼XêºUò´_å¹Sâ¬\íºWâ»YèÂdâ¾rå¯hð°jâºké¼mç¹mæ»mê¼pçÃxßÃ\7fåÊpåÉ{ÚËrÞÎrÙ×uâÖráÙuÖÜnÖÃ}Ã’ÃxÃÃœdÒÔcÊÃrÒÕiÊàeÖØnÔÕqÃÆ]ÑÄXÒ»TÚÃPãÀ[ïÄJÚ½KèµTä¬Lç¬Ná±UÕ³VײQѹSÔ¶UÃÃJÙ±MÔ±NÑ«[× L×°TÙ¢FÖ®RÞªSæ\98Hç\9cEê\9e\91MÕ\9aWÛ\93VÖ\9fWÓ\99GÙ\90QÉ\90>Ê\9eLÖ£OÙ¥LÃœ\9aAË\95JÇ\8d\8aBÆ\8eGÀ\87NÆ\8f@È\8bEÀ\81@Æ\84I¾\8d@½\87:¶\939¦\909\9f\961¨\911£\8f2©\948¯\8c>´\99E¼\9c=®\8e<¶\8eB°\95B¸¡Bº\966¶¥1¾\92/°\98;«\8e<¹\94<¯\8f6¸\915½\91$¾\851°\81)µ\8b$¸\94 Âª\93\1d±\8d#¤\9b\e\9c\96"\98\97- \8c"\9a\8f(\93\958\93\929\8f\90;\9c¢:\8d\97.\93\9f0\8b\99\1e\8b\96\e\96\95\12\89\9a\17\8b\9e\19\7f\9d\e\88\99!\8d\8e#\82\83$\86\80/\92z8\8axA\92\82=\8ft6\86\81:\92u:\8ds@\8duJ\8buL\90xK\96yZ\98{f\9c}\ nc\9dra\92wg\9ejj\99poÂ¥al¤cX¤ng\9dbd¦md\94j[\98^i\9agb\96nz\8fpy\8en\83\97q|\8agr\8d^n\95i\7f\8em{\98a}\8fc{\8dPz\8a\z\94Yy\8cVu\89Xq\92X|\95^l\9eax [w\9bV{\9dN{¡N\82¨Z\8aÂ¥K\88©S\81²\\91³O\8bÂ¥B\8f®P\8c¸N\94µ>\8d±G\81¼I\8d¾9\90h\83°jy¿s{Ãr}½wyÉ}yÃ}\88Â}\86·~\8e±\82\8d¯x\8a·v\8a´w\8b¨\86\96Â¥\8d\96©\86\92¡\84\91¢}\9b\98\84\98\8d\84\97\93\91\96\93\92\91\95\98\9c\91\98\9b\99\99¤\96§ \90¡ \93£\9d\99\9f\91¡£\93¡³\92¥²\9a¨¶§¤·¢£®£ª±\9a©¹\96\9f¹\97\98´¢\94³¥\96ȣ\99¹©\8eȻ\89²¦\8f«¤\96»\8cº­\90»¡\8c¹²\86õ\8f̶\8eɵ\7fï\84Ô·|Û·uôtúlÛºlà³må³méªbë¯^ä¯Vî¿Zè·Lð·Oò°Yä¶Yà´Vç¿Uï»déºfî®cê²lé¼oß¹kêÀqïÃkè½sëÆ}îÆ{ãÈ\85îÒ\83éÌ|ÞØ}áÙoÔÜkÔÕwÕÛrÊÓ|ÖÒzÕÃqÓÙm×ÙjÓÃeÌÕiÊÛnÕÃoßÅcܾcØ¿]â»XèÀWà»UåµIÜ­Hå®KÞ²KóMܾSܾTøTÚ²UÖ¹YÖ´XÒ±QÕ¥KÖ¤Ká®Iá¨Lå§WâPá\9cLà\95EÙ\99MÃœ\8dTß\99OÕ\96TÃ’\97\9eLÃ’\99MÃŒ\92AÔ\99@ÃŒ\9dEÃŽ\9a=Ø\9d\946È\9b=Ã…\9eGÄ\92JÆ\8fJÄ\90NÈ\95H½\8fGÃ\8a>¾\88B¿\8b7±\939¦\90.¢\902\9c\919¢\935\9b\8b5Â¥\87C­\90=¶\8eD»\93L´\8dB­\96<´\9cG¼\99<´\9e<»\9a;²\98=µ\98>¹\999µ\8f1¸\8a1¯\8f.³\8c\1e±\8c\eº\8e Â°\96%¯\9a Âª\92#§\93\1dÂ¥\9b&\99\96(\8f\90)\95\940\9d\8b.\97\8e5\99\948\96\98,\96\8d+\87\93-\81\93+\89\9c\1a\8a\91\11\89\95\14\89\91\10\81\9d\1a\82\94%\89\8b+\8b\8c-\89\7f1\8f\833\84v@\8a|F\8cz;\95wE\8euB\90vO\8czN\8f{K\8fsS\9cwT\9bta\9d}k¡ug¢|_\9etg ke¦ekªf[\9fc\\9f^g¤geÂ¥[c\9e_a\9eii\9agf\8cso\88qx\82ut\86ww\82w\80\8foy\8at~\91n{\99mv\91^|\93[q\99Wl\9b]s\8d[o\8bZw\9aS|\97U}¢Yw\97]\86\9aT\83 Z\7f¦S\8a¢J\85¤M\85±L\90®O\8b§M\93¦C\8a´J\8f²F\8d·K\87µC\92¸9\90Â7\8ce\81±iv®s\85¶n\8a»}~½\83\7f°zx²x{µ\85\89º\7f\88²~\8b«t\90§r\93ª\7f\9a\9by\99 \86\8c\9b\8b\97 \8c\9d\96\85\96\9f\89¤\98\90\99\96\92\91\97\8d¡\9b\99\9d\8f¡ \93\9f¤\98«\99\9f\9f¤\96\99¡\98\9d\97\9c®\94\9f¬\8c¦³£¨²\99\9f´\98¤¯\9e¢¦\9b¢¬¢ ²¢\9d¤\9a\91µ \8d´\9f~°¥\92« \95¨ \89ª£\87¾\9b\87¹£\8d¹¨\8dÄ­\81̳\84ïwÖ®\81ùt׸wâ´sÔ¬uå³lè®lã»eð½Zö°YêÀVí¶Pð´SçÀ]áÂRä³Uâ¼^çºeâÃeÃœÃpà´fá¯cé±aÙ¶kè´ièÀgãÉvã¿zÞÄxý~×ÃzÃœÃ\83ÛÓ\7fäÃyÑÌw××kÓÃ}ÆÈ{ÆÜl×änØàtÖÓmÎÙdØÙlÃÃŽeÒÙ_ÖÎbÖÂeãÆWåÆMÚÅUÙ½LÖ¾SØ®V׺Mß»C×ÂIöVÃŒÃPDZLÕ¸[Ùµ]ïPÒ·RÒ­FÓ\9bOÃ’\9fDÕ\9ePß\9fMä\9bMâ\94EÛ\95Oß\9cFÖ\95NÓ\9cMÖ\95_ÃŽ\97[Ë VÆ\94AÃ…\94\9b@Û\9cKס=Ã\97BÙ\9eLÆ\9eHÇ\9bDÆ\92GÄ\90MË\93G¿\91L½\90I¾\8e<¸\95:±\89:®\965ª\8f=¨\9d;¢\9e0¨\95< \8e:\9d\90>©\8aF¨\96>µ\90H©\8cJ­\98D® ?·\9cA±\9a>©\8e6²\8a@¨\96A°\93>©\8b0¯\86.·\85%·\93,­\8c#­\8f%ª\8f'«\9a\1f«\92\16³\99\e§\93# \94!£\9a-\92\8e4\8d\97/\96\92)\8b\9a4\96\98/\8e $\89\90#\8f\99-\83\95\1f\8e\90%\86\91\16\90\9d\1f\88¢%\8e\9a%\8c\83%\87\8e*\82\8e/\86v/\87\7f9\91r4\8azE\93\81C\8d\82E\8ezL\87rG\89sM\99\80\\95{X§yZ©oh wl {d¨yt¤oo du\9bgf¤uW¦a_ kn¢\g¤e`\9bnn\9fin\8aio\90xv\90z\81\96rt\8eu{\8cjk\8cn~\90n{\94b\84\94cy\8b\u\9ebs\8deq\90gq\96^s§Q\82¦aw¡PqÂ¥Sw\9cUv£S\7f®M\8a®X\8d¤N\90«H\8dºC\86Â¥N\8a¤I\82³O\8c­Q\95±B\8e¶F\8d»D\91»1\8ab~¤h~ªc\83¯o\89¶n\81®x\83­n}´o\80½\81\7f±\84\8c§v\92©r\89¡s\8a\9cu\99\9bz\93¡~\8f\9f\86\93§\8b\8e£}\9e¢\7f\9f\90\87\97\8f\88\97\97\8f¨\8f¢¬\94¦­\94¤\9c\9f£§\98\9d¡\9a\9a¦§£¤¥²\9f£³\8c\9b«\9d\9b± \9fª\9c\9b«\97\99¦\96\9e¤¦ ¦\96\98¡\96\8f\9d\9b\8e£\97\7f\9b\9e\83£¥\93©§\8c³\98\88¸\9e\8eÃ\9a\94Ç¢\86½¢{¾¦|ȲzιuÒ¶qÔ·{Öºwß®så¦aî]á³bâ°Zó»[ôÃVæ¶Wíº[éÀcìÃbæ¼_é¾cçºiÞ¸uÞ½që»géµjè¿fÙ¼cÛ¸pé½rëÃ\7fæ½|ÛÇxÛÃ\7fÔÎ\86ÔÎ\80ÙÅzØÆwÃÃ’lÃØmÃ×qÓÌvÖÃsÇÃn×ÃhÙÎhÖÃrÖÜmØÔiÓÃWÃËUÃÄcÃÊ`ÜÃOÃÈKÕÂTÚ·RÞ¶R×ÂHßÀIÛÃJÜ»MËÀJ÷OȸUÕ³TÛ­U×­RάGÔ\9bJÑ\97HØ\9bFß\92Cà\9aIÞ\94LØ\93JÛ¤EÔ¦MÃŽ\9bSÃŒ\96ZÉ¢ŢQàDÈ\9bG×\91GÙ\94JÒ¢GØ\9eH×\9dTÑ\97OÄ\8fF¸\93FÀ\99DÈ\95@Ê\99I»\90A¼\907·\9b=²\96>´\883¶\8f<¯\9a6§¡7\9f\9c1£\925£\8cH¦\8aI£\96E­\9eA®\96J¹£Nµ¢Aµ\91<­\8f=¢\8aB§\8b:Â¥\8dA¦\86@°~=ª\81-«\88'ª\911²\8f+±\91 Â¹\8d\18±\92\1a¯\9d\1c²\99!«\94\1d«\9e$£\9c/\98\91)\9b\8e&\90\91.\88 0\90\9e.\96¡"\97\97$\8a\93(\8a\8c)\90\8e.\88\91)\81\9a+\8b\99#\8b\92"\89\8c\1e\8f\951\8a\8c6\86\89/\84x5\84s5\92uB\91\82O\8a\88P\89yO\90zG\91uG\9d|Tªz_©wa¨{g\9c|i§pqÂ¥mq£ru¡sn\99qh\9dv[\9aw\\97hi\9ejk¨cc\9cmq\9coq\93mw\8apw\8at}\95|~\95pu\8fln\88l{\8ah~\85m\83\91f\85\8cj\8a\94d\86\8d\\81\8ae}\9de\86¤^~¢Vv¡Wp¬QtÂ¥Rs±Pv«N\81±O\89³V\8a²G\88´E\80·Oz©K\80¤S\8e¨L\91®J\96ÀG\8bÈ<\8b¾<\7ff\80ª`{±b\80°c\82¨q~§w\80«w\85µs\84°\82\84µ\85\80¦\83\94 v\8d\9b~\89\9cs\8a¦\84\88¦|\90\9b}\8b§\82\9b¢\8c\98\95~¢\98\82\9b\95\93\97\94\96\9b\96¨ª\98\99§\96 \99\9fª\9a¥¤­\97ª¨\98¯\99\9c²\9c\9d©\91\95±\9e\95¢\9d®\9a\9b¤\9d\96¤\99\9c \98\92\9e\9b\93Â¥\9a\8f«\93\86¢\9a\81­\9f\83\9e\9e\8f°«\8f³¡|À\9c\88º£\8a¾\99\84¿¡\84È©wÒ²xˬrÕ±uܸqÕ·mÜ®kå®`ܧhá¶aêµ\ó´Vçµbð¶\ìÀ\æÀaá¹`ãÄVàÅeî·eæÃtÞ¼nç¶jß¼pؽlÓ´\õpê¸vèÄqßÅuéÇ\82ÔÄtÙÃ\7fÙÉrÖÒpÇÓqÓÃnØÔjÃÑiÚÛqÃÖxÃâkÓÕlÓ×_ÃÃœcØÛaÖÃ`ãÃQÓÃUÃÀbÚÀTâËUá¾OÙ¹[׿QÛ´VÖ»IܺKþJ×¼QÔ®X̼NêWשPѦ[ܯ^Ù¤WÃ\96IÓ\91FÔ AÃ\93D×\96DÞ\91SàFÚ£QâDâNÈ\98^äVˤPÒªUÃ…\9aNË\9cHÚ¤D×\96\9dEÕ\9dIÃŒ\90FÆ\91A¿ DÃ\9eK»\97D½ G´\9e@·\91Eº\94Aµ\8a6±\835­\90@¨\94@¤\966¦\96<¤¡A©\8fJ¨\9cF\9e\93J\9e\9dR°\9fT§£R¶\9dE·\95K¯\92?©\88:©\8e:®\90:±\85C­\90<®\881«\89)¬\9e*²\9d!¨\9b#µ\98'¯\98!²¢\15¹£\1aª\9d$¡£$Â¥\99&\91\9b&\9c\923\93\9b0\90\9d6\8f\94'\92\943\96\98&\86\8a$\80\912\8c\89'\8c\8b!\8c\96*\90\97\1a\8f\90#\82\93+\87\93'\82\931\88\8c2\92\81A\8d\87F\97}:\97\81E\86\8fE\87{F\8c\80I\99\86V¡z]\9dw\¤wc§uk\9bmp£yi§rt\9fkr­nh¬wp\9em[ xo¦lr£hn¦ej§sq\92uq\97mp\93r{\92pr\9anx\93s{\90kn\94hr\92ky\97g\8b\9a`\88\98k\87\94h\8b\8cl\85\9bf}\92\\88¬U\88Â¥W\7f¡Os\9f^o\9e\{©Uv­S~¬O\82©I\84­P}²C\83µF}·A~¬H\86¬A\96»<\8aÄ<\81Ç6\8dÇ4\89[\8f\9f\\88¬h\89©f\82ªl\84©w\85¬y\88©t|°{{³\82\82¬\80\85\9b\81\96\9b|\8c\96\82\88¡\85\8a¦z\8f¢~\94¢\81\9a¢\82\9e\94\86¢\96\8f\99\94\93¡\96\93¦\90 ©\95\98\9e\96¡¤\9f\9c«£¢¨¡¡¥\9a«\99\96®\9d\98§\92\93©\93\9b¦\9f ¥§\9b§¥\9d¤\99\99\99\99\88\9c\9f\86\9e\94\7f« \83©\9c~£\99\89§§\83º«x»«{¨z¾\9b\88¼\98\91¾\95\88Π\83Σ\82Ø«uÕ«wÃŽÂ¥zÕ¯qÕ£jקcÞª]ë­]è¨eñ³^í³Sî·Yé½\è²`êÃgÞÂ\à¼dä½hãÅjâ½tÛ¹sã½pä¾sûfâ¾ué¿uè¸\82ç»\7fÛÊ{ÚËtÃ’ÃoÓÇrÔÊyÇÃqÃÖnÃÑwÇ×qÃÃmÆØjÃÖmÑÔfØÛ`ãÕYÜÒ^çÃXáÃXãÇ^Ù¿VáÅVßÂKصNÕ·RÒ¶NʲJÖ¸QÑÃUòTÑ´R÷Xʱ^ΫRǬT΢_Ó¢^Ö\96XÃ’\94RÖ\93SÃœ\9aLÓ\92QÃŒ\94KÆ\96KÑ\9dNêDȪKÅ¢PÊ©XÊ©QצXÛªYÒ¨XéTäMÇ SÃ\97\93GÆ\96IÃ\9fNäF¸¡E´¥E´\9cN¸\9fI»\9bI¿\94Fµ\87;³\89@±\8b?¦\95D§\8f@¢\9a@¢¡E  >¤\9eJ \98F\9c\96O¤\99R³\92U·\98Pµ\91C§\8c<°\8d<«\879Â¥\923­\907°\8c;¬\8a3ª\98.®\9a0§\9b0«\9a%¨\92\18¯\9b\e©§\16²¦!¤ª"\9b¦)\95¡'\98¢0\9a¤-\95\983\9a\8e3\96\91.\8c\8b(\8a\87-~\87'\82\90.\83\94.\84\94"~\9a(\83\93"\85\97\1c\89\8f'\8d\90(\84\88.\92\8d5\8e\8c<\92\8dF\98\84B\8b\81?\8e\84@\95\7fE\8c\87Q\92~X¡\83T\9c\82b§t_¤j]Â¥jj¨se\9eri¢w`ªvg±~l¦ul\9fzi¤rt«kv¢op xr\99pg\99xm\9fxr or£l}\9brt\94tx\98f\81\94f\82\9c`\88\97\\89\93a\83\92d\8c\9b`\87\9bg\87£`}£Z\84¡\\7f«Tt©PvÂ¥W\7f\9fZ{\9eSzÂ¥EwªGy«@\82»I\85¸A\86·@\8c¾:\8c³E\89¶>\88¼8\88À?\8fÃ…=\87c\8e¯`\8d¦g\88¡l\8cÂ¥e~ªh~·ey°p{µm\8d«z\8a°s\8f\9cv\97 r\90§\80\92©s\90\9e~\8f\9c~\8d¨}\90\99\85\99\92\8b®\97\8f \8f\8a \9e\99¤\93\97\9f\97\9e\9d\94 °\97 ¡\9b\98\9b\9f« \9f©\9b\96¦¡\93²\98\96¤\9f¡¦\9f¥­\9e\95\9f \98\9b\9b\94§\9a\89¡\94\88¨\96\85\9d\9d\7f¦\92\8a\9d\99\86©|®¤\7fº«\86¬\9d\82³\98\84¸\9a\87½\9c\83º\9a\87Ã\9esǨ{ظnìoÚ§vѤsà±`ã²aåµ^â·hàÃWéÀ[öÀVä²\í®fã´[á¼[àÃcÚ·nÚ¸yÞÀnæ´v×»m׸iسrçÀeçÃpâ»uä½\7fåºzÒÇ}ÛÃnØÄqÖÊjÉÇpÑÒwÕÒjÚÔmÔ×kÑÒfÃŽÃ’vÓØ`ÃÃgÓÌ_ÞÆSÔÂRäÅVÖÉLÛÀN×½PÚ¾P̾TÉÄXÊÃNÑ»PÃÄOÊÉKÛºUñ]Ƶ`èWìZô]Ö§\Ã\9e\95QÃŒ\9bMÃœ\95JâMʤFÓ\9dRÃ’\9cPÉ£WÓ¡XɧEÃŒ\9fUÇ¢MɬNÒ¬QÈ°WÖ¦^áWÃ\9d\99JÃ\93MÈ E¼\99IË\9dQ¬AëOÂ\9cP¿\99L³ Mº J¬\93I¶\98J¤\91>¬\92;³\968®\988Â¥\8aC¤\929£\92?\9f\95>\98\8b?\9c\96A¡\9fHª\98H­¢F§\97H\9f\97C£\857¤\876«\93;¦\893¤\956£\924®\871¯\8f0®\912¯\96/³\9d"¯\9a\15¥ª"«®%¤\1f¨\98%¡\97%\95 0\99¡;\8e\9e/\87\993\89\94,\85\8c5\88\99'{\95*y\8d)\80\99*\84\96\1cz\97 }\96\1d\91\8f(\91\8f+\91\97*\8a\945\91\938\89\8e2\87\90@\98\87<\99\8fF\8f\867\91\83C\8a\92T\99\7fQª~O«wV¨tg§rl¯plªl^¢{`¡}f¤}m°to©liªugªzp¬ll¢w~\9clm¨~r\99~v\9czt\99wz\95du\99fm\98qu\99tr\9bl}\97a\88\9cf\85\92i\90\8e]\81\9eb\86\9b`\8d\9e^y\9bWv\9eW~¯_u§Z\80£U\83¤OzÂ¥R\82¤J\7f®L}±J}´R\90´A\86»>\92¹?\82º@\89µB\87µ:\8eËB\92Ê;\86^\88\9fS\80Â¥a\81¡f\89Â¥n\87¤ez²]}ªd\82³g\94­e\95¨h\91\9cp\91\9f|\8c§x\8d\9fu\8c y\96¡t\93\9ct\94\98y¤\8e~«\8a\82¬\97\90¦\95\96\9c\98\96¡\8e\95¨\89\9cª\92£¤\92\9b\9c\8e\9a\98\91©£\9e¦\99\9e¯\98\98ª\90¡ \99\99\9b©\8e¤¬\92¥¨\93ª£\89±¦\80©\9ez\9c\97x\9e\94\84§\98|¦¦\82­\9c\86§\99\80ª\9b\83´\92}½\9b\83¹ª\84Ų\7fƨr˵mʶpëtÜ­sçpÚ¯hà¯eÃÀlâ¹`ßÂZâÅSôÃWïÆbá¹`ßÃfæ¿dÞÅiá¾påÀs߸vâ±wÖ¸qôzØ´tüjâÈiâÅgáÅqØÀxØ¿uÚÀyÃÇlÖÆqÑÃtÃœÃsÖÃlÞËhÚÊnÞØpÃØoÓÚnÌÕ_ÒÉQÃÃPÓ·]×¼XÕËTÜÈKßÉPûIÄ¿MÈÃXÄÆK̽LþRÔÉPÙ¼]Ù¸`Ù®eȯZÙ¨YêbÚ\98eØ\96dÓ\93ZÔ\92QÖ\9c\9aQÆ\9bOʦOÄ¢NÈ\9a\9eWÔ¬LÓ¨GÃ’\9fPÒ¬YʯPÄ´U˪bȤV¾\99P¿\9bQÃ…\95FÃ…\9dQÃ\9cLÉ£GĬF¼®D¾\9eIÀ O¼ Eª\9fK¦\95B\9c\95D \8eB¯\96C¯\957¯\8b:¡\8bB\9d\8fA\99\8f@\98\8c?\9c\8aB\9c\93;Â¥\97<¬\9bF¦\9aH«\9eC¢\92C¦\936Â¥\840¤\925¯\921­\8e+«\8a+²\8a/­\88&©\8e1¬\9d,¤¨*¦¦ Â¡Â©(§¬%§¤!ª\97.© 7¡\9a/\9d\942\8c\926\83\9b.\84\97+\87\97(} 1y\945u\99(p¢#w \1e{\9c\1c\87\91\1d\8c\97\18\8e\9e \8c\9f-\89\98+\85\91.\89\935\8a\8b;\8f\84F\8e\85>\96\8f<\94\8fD\99\8bN\9c}W¤zO®v^ªpf®q^¨m^\9bod\9asd\9dzr§vnÂ¥zj¨og¢tp¤\7fk\9e|u¤nz©|u­|~Â¥rt\97wm\9fhy\97jv\94sn\8cqk\89s\80\95k\86\9fg\89\98e\87\9f]\81\99\\86\96Z\7f\9d_\83\94j{\9ceu bt£Xk©Y~¤X\82\9aP\8b\9dD\83¦G\88¬K\80¤B\83­J\8d´C\87Ã@\8a»:\8dÄ=\8a½5\86½:\93Æ>\94ÃŒ7\8bR\82ªZ\82§]\8c¨\\8bª\\81³a\7f®[\88°k\85±a\8c­e\8c¯m\97«k\96\97o\90\94f\89\91m\9a z\95\9fv\94\9b\82¡\93\85\9c\8f\86£\89\87¤\83\97\9f\91\98¨\89\9b£\91\9e¦\8a\97­\8f\98\9c\8e\9e \88«\96\8d£\98 ª\95\9cÂ¥\9a\95¡¡\91¬\9c\9b\9c\9d\98¨«\92¬¯\85¡\9d\83ª¨\80\9f\96x\9e\93\83¡\90\8d¨\95\85© \8c¢\93{¦\95}¤\92\86§\8e\82µ\94\80À\9du¾ª|Æ£kÄ´hðpÓ¹nøtÜ®wÛ¸kÙ´nâºmÖ¾lÙÅcäÈ`ëÃ^ç¹Yß¼cá¸XïÂeÃÀcõrØÀj×´oÙ°nѹmÞ¿hÙ¶mßÊjäÌcêÃhÃÃjÙ»tܺuÙÅf×ÃjÛÃyÙÇvÖÌiÞÓiØÇoâÎpÑÃjÜØlÕÒbÃÊVÑÃVÖ½QÖÂ[ÓÄPÔÅGâÃLÃÈF×ÄP×ÄJÓÆ\˽XÄÃRÓÄQÖÌPà·bܲcÚ±fÙ±_Ù¯_اiâ\9fcÖ\9cdÚ\9b_ÃŒ\9a\9b\9cXÕ\9a\Ô®QѦVÖ\9aOÛ¬PÖ¤ZÓªJÑ\99Vؤ^˧YÈ®a΢`Ã\9e\97XǤJº\9fNÆ\9cHº¢T£SãE¶¤B¿£Kã@¶\998¨\936¬\8d9\9e\94D\98\84=¤\875¢\924©\93<¢\8a:\98\8c9¡\85A£\91A¤\8e6\9d\94;©\91H\9e\9cC§\91G¨\8cH¨\90H\9d\8d?ª\8e-¤\899§\8a9«\8b'§\8c1­\880ª\8b,§\99#¤¡ Â¬\9b*ª¨$\9e\9e#§¡)§¥%¬\9f$¬\98. \986\98\99/\87\8e+\8f\93*\81¤3\82\9d*wÂ¥*|¡*t¡/\82¦\1f\84\9a\1e\84 \e\81\94%\85\91\1c\90\96\1d\91\94\1f\86\9e"\8b\98'\92\9a.\95\97/\98\87D \8f;\97\97;\9c\8fL¡\91R\95\84L\9d~J¨|U©kb¦ma\9eka i^\94jf\9a~jÂ¥|mÂ¥qg©vo¡\81i¨~p¢~uªnsÂ¥tx«xt¨u}\95ty\95pu\97fu\95dz\98kt\99ky\97_\7f\9ea\82\96b\8a\99b~¢hz\9be\84£\z\9b^~\9b\s©Vo\9f^x¡P~ªR\7f\9fP\86Â¥I\8d¦M\8b¦T\80µF\86¸>\90®I\97¿D\8b¿D\8c½H\8d¼<\85¾;\90ËG\97Õ;\8cZ\8fªU\90«Q\85Â¥R\86¨^{³Y~°c\84«c\85¯^\86²]\85ªc\92¤e\98\9ck\9c\98e\90\91k\92\8cu\99\90\81\9e\8d~\9d\89\7fª\83\86ª\87\90«\88\8eÂ¥\85\90¤\81\9d¨\8e¥ª\9a\9e \94¡¤\98§¤\90©¦\8c©\97\99°\9f\8d¨\9e\8f¬\9d\89¨¤\94¥¤\92\9cÂ¥\86¢¬\83¤¤} ¥x¢\9b\80©\98| \8f\87£\99\8a¡\91\85 \91\83Â¥\94{\9f\8e\87ª\98\83µ\97y»\9fuº¤m¹­j¾·fƵrógôjÔ¾hÿvÒÀ~áÃuÃ¥ÃrÞÈdâºoê¼hä½jíÃ\ê½]ê¾cûmÜ·kÜ´dÛ´n÷jÛ´fß´kÛ¾qÜÅoèËmàÂyäÇsÃÃ…qÚ¿kÔÃsÒÊpýpØÃtàÃx×Ãj×ÊpÚ×dÕÙ\ÖÃ]ÕÌTÌÌNÚÄIÖÂPÜÇSÑËQÖÂOÖÀDÓ¼GÓÈJÉËGÿOŵZʸ[ѵcØÃ[âÃcÛ¹[á·\Ú±aâ¤Zâ\9d^Ú\9adÙ\9b\94dÓ\96YÒ cÃ’\9b\9aaÌ¥bïdÒ©TÓ¬XÞ­Yâ§[Ö¤WäUÕ©cÈ«ZÆ£^É\99VÉ\9bS¾\9cM¾£S²¤U¶ªX®¬V³¥Lº\98C°\9b>±\968·\9a6³\99:ª\8e:Â¥\930¡\891¦\8a-\99\869\9d\926£\908¦\867\9d\888 \92.¡\8f5 \96<¡\92BÂ¥\8fH¦\89H\9f\87J\9e\86A\9e\86C¨\869¬z4°}3°\7f9­\89.®\8c+¬\91)Â¥\96%¬\97$±\98'¦\98+®¤.¨¡%Ǥ$§¢$¨\95"¢\94,\98\8b$\91\90+\86\960\86\9f,{Â¥"{\9a'\7fÂ¥.z§(\83® \84Â¥(\82\9e%}\9c!~\98\1f\83\97)\90\90$\94\99!\8f\92&\8e\92)\93\948\9b\967\97\96:\9e\938\95\86@\9a\89M\93\8eF\97\83O£\80Z\9fvf\9ams£un\99|f\9brh sj§}b±yo©{m®}j³xm®uv¯xz±x~¬qy wu\9exu\92vy\94ix\95ho\98`s\9eet\95b|\94[\83\98_\84 ]}\9dd|\95\u\98`x\9eVo\9cWt\9e[s¨VvÂ¥N}©G\8a¦?\94­G\8e¯I\93¬K\91¸M\8e³=\8f´F\97µL\97ÃR\93ÆJ\8cÉK\8dÃL\88ÄB\91ÃŽC\93T\86¶`\8a¤[\89®Y\85£Z}£^}±`~¬g\80¬c\87¢d\90¤^\8f\9ba\96\9e]\97\97q\8f\96d\93\8cp\9b\8bu¢\8fz¡\89\88¡\85\89ª\87\90Â¥\90\98£\97\9b \93¢¥\97\99Â¥\90\95¤\89 \9d\8d¨ \94\9d\9d\8e \99\91\99\9e\97\9c\99\89Â¥\9b\8e©£\84£\9f\7f¢¥\86§¢\87©¡\86­\9f\84¨\94\8b¡\9d\85\9c\99\88¦\8d\83¤\89\81¦\86\84\9d\8e\88­\96\8b¦\9c\85³\9cv²\9c\9bg¹©mȴfÀ¯v¿³mÌ®pδyÕ¾rÕÆoÕÈmÕÌnàÆløoß»jßÃ\ôÅeå»^â¶lçÀmÒ·gÖ´`îcÖ³hâºdÓ¼qÛÀuÞ¾ráÊrãÑfãÊrã»qؼjÃÇpÇÃtÃŒÃqáÃ}ÚÃláÔiÙÒqáÃ_ÃÃkÊÊ]ËÒSÎÉNÒÉVþHÔÊMÃÓQÃÃŒIÔ¾=×ÆOǺRÃÃG˲SκXü_ι]ܳaرVÛ°Vá¬_à¸\Û²]Û¥]Ü©^ì_Ú\9a\90fÓ\9e\9aSÕ Z̨`À VÒªHõQ߬SÖ¯Wæ[×\9eSʬXê]¹\9ag¼©aƤLãM²¨\³\9fMº¢V¸\9dX°\9fC·¦@²\98L´\96>³\9b>¯\937¶\939 \8b5§\87/¨\85/¤~: \90B£\96=\9f\891 \8c<¦\861 \841\96\83?\9c\86H\9d\8cN«~N \85K\9f\86<\9b\8a?Â¥\8aB¨}3Â¥\88-\9d|,ª\82+¤\896©\8d2§\8f.§\9c, \980¢\9d+¨\94#²¡!©§\1f¢\9f* ¤"« *\94\98'\8a\9b+\84£"y¢*~ª0|¢"\84\9f.~¦'x£+\84\9f&\81\9d\1fu\9c&~\93&\8e\8e0\95\99-\9e  \8d\9f+\8b\918\9b\9c>£\8d5\9c\97=\9e\92<\9f\98=¡\94L\90\8fW¡\91M\95\8aS\9b{j xm£sc\95um ke\9ezf§|k­\7fi©sqÂ¥zt²vs°wt¯v}°|q®ts\9dyp®~o¢km\93fw\92fu¤e}\92`y\90g\89\9bb\85\9d`}\9a^\7f\9fb\85\9e`\81\96[v ]| Tv§U\80´L}¨T\81¯J\8a±L\8aµR\83­L\89°@\88¶C\89·I\95¼E\8d¼D\8bÃO\87ÉX\97ÄF\84ÈF\93ÑL\95ÑE\9dSt°[{¨Y\83£V\88¨V\84£]\81¯`\7f¤`\84§^\95°Y\94¨U\88¢\\8b\9da\88\92o\8d\93r\8e\8ce\9a\90u\9b\8ft\9b\8c\84¤\91\87\9d\94\8d¨\8e\94§\98\92«\9c\96¡\99\9a\9e\93\99¤\8f\9d¡\8a¦¥\89\9b¡\92\9f\97\91\98\96\8f\95\9a\94\91\92\87\98\94}£\96v ¦}¢\9d~«\92}°\90\87¨\9d\86ª\96\7f©\94\84¨\8e\82¡\8b{©\84\88¤\8b\86Â¥\91\8eª\8f\86­\99\82°\9ar³ iÄ\9djÇ\9doȣj¬iìtίvÚ¾xÓÌjÖÈhÔÅdØÂpÖ½dàµeæ¼]é½dë¼jùhÖ½h׳`η^Ò¹gà¿jß¼hÞÃkÃÃ…mÈÃsÒÊpÓÅnäÌfßÀhá¼gÃŽÃ…`ÉÃfËÃtÞÅvåÔxàÙqÖÖqÚÅh×ÃgÄÓbÇÊ^ÑÈLÛÆRÃÃKÕÄUÇÊMÇÄPÃÂCËÂ@˳MÊ»O̶MÔ³WÕ¯RÛ»RÓµ_Ù·_Ø°Z×±Yå²^ë°eß±`Ù¨cÙ°]Ó§ZÙ\99\9dbÕ£TŨVáU¾«K±JDzJÒ¬L΢LÉ\9b\9dUȦQ¾\9cU·¢dçYŨOº­V¶¡S¹\99L¯¡O³£R¶\9cK°\98Jª\9eM§\97F®\9fG±\9eF±\93:¢\8f.£\8d1\9e\86<£\82:\9d\8e8¡\96B©\967¡\84/¤}1\9a\832\99\83B\99\89I¦\85I¦\7fQ\9e\84M¤zF \83:£\85:\97\821\9b\878\9f\8d7\98\83.\9c\831\98\932\9e\9c)\9e\9a*\9c¡&ª\97(«¡&¬\9d\1f¬¡ Â¨\9f+\9e\9f#£§( °)\93ª(\8a®0y¬+\82§*\82©&\7f¬&\83\9e2\7f\9b'|\9b&{\9b\1et\95\1f\84\98 \8a\95(\8e\9a(\96\99+\98\9e.\8a\9c=\89\96C\99\8f8\97\96E\93\97A\95\93D\96\97L\98\92N\9d\93Q\9d\89`\9f\89^\98z_\95xc\99mf\9bopÂ¥zk¦\83i£ti«se nk¦oy¨y{­xv¨}}\9fxz\9f\82|®\7fm\9dsq\9bgw\99s\7f\9eo~\9ak\83\97j\84\9bc{ g{¦Z\82 Z\88\9ec}\9c\y¤_{®b}«]\85µS\81¸X\81«[\8c»]\81»P\83¶H\92°D\8f¶Q\93²P\91´M\95ÂB\8b¾R\8dÆU\90¾N\90ÆM\8dÄL\89ÃN\95W}©X\80ªN\85­Z\85­[\89¦\\83­[\83«b\87§^\91©]\8d\9fW\91\9e_\87\9ce\8f¡q\93 d\93\8do\8a\98p\8a\92s\97\87{\9c\91\84\91\8f\91¢\8e\92¤\9c\8f©\9a\92°\9a\9d¡\92¡\9f\8f£\9a\94ª\9d\92\9c\8e\94\9d\94\8e\94\96\8e\95\9d\9a\9d\91\8e\94\9bx\9a\94|\9c¦v\9c£z¯\9a{«\90\84©\9d\86²\8f\81§\97~­\91\85¨\8eyª\95\84§\8f\87Â¥\91\89©\88\87°\8f|§\9aiÀ\9cn½¡iÂ\9dhº©h¼¦sðzùwÔ·mߺhÖÂnÕºnè¼füdå´gå¹Yâ´eÖµ_Ú·jÙ¯]Ó«bÛ±bõiÃÀbãÇ`ØÃaØÃgØÅ`ÑÊfÞ»`ÜÊYÛÌiügØÃ^ÈÌpËÄkÎÄvÛ×}ÞÜjÙÒhÃÃgÎÇ\¿ÃWþTÒºSÓÆTÔÂIÓÀDÃÄNŽCĹCúLÉ«NÊ»K̯HÒ·XÉ«Wض[Õ²TέRѹYáµaÚ¬^׸aá´fÓ«e×°`Ú¤hÕ\98cØ\98S×¢TÂ\9cTãO·«SÈ©D½¨F½\9fA½¢QÉ\92GÉ\99PÈ\9eX¸£]¾\9bf¶¡SÆ©QÇ\9aL·\99Q³\99U¾\9bL¶\97F¨\9eB¤D±\9eJ¯\9fAº\94J­\8aJ«\89C®\913\98\8b6\94\843\9d\81;\94\93?¡\9a9\97\877\9a\896\9b\83<\9b\8a4£\82;\95~G¤\80K\9d|R\98vP \86J\93\859¤\88:\90~0\93z.\9az,\91}6\8f\830\9a\8b4\93\9a-\9a\97$\9d\93+\9f\9c(«\96) \9f\1c\9a\9d.\9e\99#\9c /\9b¢$\91Â¥4\90£&\81¡'y ){¢5\8c¨3\8e\9d-\88\997\88§,{\9b"\85 \1c\80¢\e\82\9d \89\953\90\94-\91\97/\89\8eB\8b\92C\8d\94<\99\8eD\97\8cA\98\98O\9b\9bR\9b\98\Â¥\9eX\9d\95`©\8de£\92_Â¥\8fd\95}^¤tb\9cxr¨zj\9e|e«rbª|iµqj¬\7fx®\80~Â¥w{«\81|\9c\84}­\7f{°zr«q{\9bg\85Â¥sz£pw\99n~\94v\80\99i\85£j~¨\|¢g\80\9d^}\9e`xÂ¥e\85¨f\83³W\84¯a\83·T\82¸Z\8e°W\88³M\82·H\83´E\93½G\85¹I\90ºK\89ËH\83ÀI\83ÄT\8c¿R\94¾M\8dÃS\94ÃR\94A\86¦J\83¯Q\88°U\88°T\8b¡Q\92£K\90¤U\8c¡R\8c¤\\86\96e}\96`\82 _\87\97k\8a\9er\85\98g\88\94e\8a\87o\8f\8a\7f\96\95\88\95\90\87\98\90\8e\9f\99\88\9e \8f­\9b\98Â¥\8f\99\95\8e\99\97\8d¤\92\90¦\87\8a\99\8b\8e\93\95\96\94\90\8f\9d\90\7f\95\91}\9a\98s ¡z\9c\9f|§\92w«\8fu²\91}´\97t©\94y©\8fy«\93\81³\92\8bª\97\87¨\96\82ª\91\81«\8cx¬\95o½\95tÃ\9foÇ£kÀ\9fsÉ£tÅ­uɬyÛ¬nå²dß»dà·aèµ^Þ¸Uà¹]׳^Þ·_ß¼dÖº]ú]Ô³b׺gÓ¶fÓ·]ÛÆcÔÀcÑÄ]ÔÃVÕ»_Ù½aÙ½]ûZÎÊ_ÖÔlÓÎlÑÌsÃÃŒuÚ×rÙ×tÃÓbÊÇZýZÃÃTǸQƽSÃÉPÃÇDÃÈCÌÇBýEľOɯZƱVɹK˹JÒ¯JʲSǪTÒ§QΦUØ´\ß²cõbÞ²`Õ­gصh×´i̳aæ[Æ\97]É\97XË\92Y¿\96M¾¥H½¨M´¬Qµ G¶£MÂ\94FÄ\9aMÇ\94X¼ Y¸£[À¦_ŧYȦMÂ\9a\9bM¼\99Q°\9cR¦¦H \9eA¨¡?­\97<µ\93H­\83M«\84@¤\82H\97\84@\95\83<\91\8e<\91\947\90\8eA\90\8fI\9f\8d@\99\90<\9f\877¨\815¢}>¦\83C¤|M¡wG\92\82<\8fy0\94}5\98z2\8b}3\91\89<\93\83:\97\808\96\86)\9e\8a$\96\96*\92\92'\99\9c\1d\9b\98 \9f\94$\94\96.\96£,\92­0\97ª/\8f¤7\84¬.\8a 1\7fÂ¥3\80 0\8b¡1\84\9d*\88\9f+\84ª(\80Â¥\1f\80¦\1c\80¡"\7f\9a'\83\996\83 @\87\99?\85\8e=\90\86K\9c\87O\96\88M\98\96J\9e\98P\99¡[\9d\98]\9e\9a]ª\9bg±\99c¦\93^ª\98b \8b] \83g \81e£{m ~l¯rq°vo©{y¯\7fy¤|l¦|pÂ¥\84x¡\81|¤\80|«tw\9ey\81¢r\81¦r{¨j\81\9fr\80 pv¦b|ªd\7f³^y±c{¶^\80«]~§iy±g\81·d\89³`\83´U\7f´V\8cÀX\8f»K\8b¾C\8cÃI\90¹I\83·Q\83·S~ÈK\85Ã…P\89ÈR\8c¾X\93Ä]\8eÈZ\9cÑU L\81\98L|\9dZ}\9cX\8c U\83\9fS\98£K\8c¤S\82\9e]\83\9bX\84\9bg\8b\96h\85¢`\89\9aa\87\94l\8f\8ea\8a\8ei\8d\92x\86\8b\7f\8a\92\81\9a\9e\86\97\95\97\9b\92\8e§ \86ª\9d\90\9c\94\8f\9f\92\9d\92\8e\9f\8d\83\99\8a\85\97\8c\89\9b\89\83\94\8c\84\9b\8e\82\96\8b}\9d\92z\9d¤y¢\9ds¯\99s©\96s´\90\88±\93\7f¨\8e{¨\88\81\9a\92w­\8a\82²\88z§\92\81­\97t´\9bzª\9bg´\95w¼\9dqŬx¸£n¾¨qȸz̲uá­lß´dÓµ_Ú·hà©fã¿eعYÙ¿gÛ·]×±]Ô·S̬fÔ±_Æ»eÔ°fÕ¶]ÉÆ]ζQÃ…Ã]úPÃÆ\Ò·Q׶]ʽeÉÅdÇÃ]ÇÃjÃÔuÃÃrÒÑqÃÓ{ÕËgÃÖaÇÒ^¾Â[ÎÃQżSÃÊLËÎDÆÎGÕÃQÃÀI¼ÄPξWŹ^Ê¿WúTñYÊ£ZŧLÃÂ¥Jò\Ò¯aêcض\ï[Ù¯eØ­iÔ®bÒ¬Yó_É\9cRÃ…\9eZÃŒ\99]Ã\9fH¾¨N¼§IÄ¢Q±\9fP¶¤EÃ\92DÆ\8fE¼\91T¿\9cU´XÃ\9dRË P¡RãV¶\9dT²§W²¢G\9f\9fF¨¤Cµ\96C´\9b?¸\98O«\87C¯\8dF¢\92>\95\8cK\9f\8c9\98\895\9a\8eE\90\8eG\8c\87?\97\8bB\90~<\90\8eG\9d\86:\9dvA§\7fA\9eyI\9dvH\94yB\88\83:\88\80B\96}7\89\82;\98\8c6\9a\91D\8e\91.\93\81*\9e\88&\9c\8f/\94\94.¤\9f!\98\9b\1a¢\99\e\9a\9d'\91¤'\8f\9f$\92¡-\8e¦.\84\9f-\7f£&\8a¤(z\998|\9b:\86\9a4\89\9b4|Â¥&\8c¯%y§\1c\82\98!\88\991\83 9\89\9d8\83\92B\85\90L\8f\93N\8b\94@\9f\92D\9e\94J\9c\90L\9c\9aU\99\90_Â¥\96f§\9bh¡\93^²\9df¢\8c_\9c\8ff \8eX\9e\8d^Â¥{f¨wj¯\7fv´\82x²zs«\87tÂ¥\80t³\85s \85s\9ct\82±|\80¯h\7f£ky\9f~\8b¢~\82®v\89²p}¨n{¬qv°dz«p\88µk|¬i\81·`\82·a\7fÂc|³^|½f\87¿g\86Ãe\86¶T\8d²R\89Ã…T\94»E\89¿M\85¶_\83¿R\8fÃR\88ÄU\95ÃŽU\95ÃŽ[\92Ã`\97ÇW\98ÔSªOw\8cZ|\93Z\82\94M\82\9cQ\83\9cL\8d\9dO\85Â¥[\89¢U\8e\9f^\89\8fb\8b\90_\82\9cU}\99Y\89\8d[\94\8dd\8f\8bm\87\97u\8a\96~\97\92z\9b\9a\87\9a\8d\8fÂ¥\8b\90\9f\97\89Â¥\9e\93¦\98\91\99\89\9b\9d\81Â¥\96\85¡\9c\88\9b\90\91\93\8a\8b\9c\92{ \92v\96\92\82\9d\9b{¦\9ap¡\8ek©\92s°\8b\85¶\8f\88µ\93\82§\94z\98\86~\9a\87x\9c\8a\80¨\87~«\85t«\8du­\8ds´\95k²¤t¸ªw´¯f¿¯eÉ©p̳wçzÙ¨pÜ¥nîhØ©fß®bà½fÛ¿a×ÆdÕ½^ÕµZÜ´ZÉ«`Ƴaø[ðT¿­VǵRεXȱSÈÀVÃÃP÷XξWÔÅ^ÃÆ]ÃÃ]ÌÅlÃÃŒnÃŽÃŽqÃÊsËÖsÒÛ^ÕÕYÒËaÈÊaÃ…Ã…ZǾVÃÈJÃÈLËÃSÃÆRÑÅOļLÃÄJÌÃTǽPƾOĪQÄ¥W»¬S¾¬Tî\̦bÖ¬[κd˵k̺bʸgÆ´hˬ]À´VÃ…Â¥X¿\9a[èRȬPîUÃ\9fN·\96J¹\9dG·\9dAÃ…\9e@¼\9cI¸\91J½¢H±¦IÂ\9fPÂ\9cVÃ…\94PÀ\9bY¶\9fW©§S±\9fS¨\98Dª\94@°\8fA¯\8dD¬\8dLª\90L£\90@Â¥\8dL\98\8eJ\9c\8fF\9d\867\98\85A\8c|G\88\82;\8e{<\94\87>\90\88K\95}Q\96\80J¤\87L¤\81Q\93sJ\90qA\8a|H\8b~@\8c\82E\8f\83=\96\81A\95\8fB\94\946\98\8b.\9d\8c*\9d\88-\9a\88*\9d\93)©\9f(¨\9b\1a\9a \1e\9b (\9e\9b$\90§#\98 #\90\9e)\86¦.\87\9e.~\9a8u\9c9|\9d7\83\98:\85\9b.\89©+\88\9c'u\9a&\7f\92&\8a\9a/\82\947\8b\8fI\89\8dG\8b\9b@\91\96N\9a\97K\94\97R\92\8aV\9c\99U\9a\96V\9d\91Y\9e\8b\¦\8c\°\98h¨\93g©\93]¯\90WÂ¥\91]²\7fe¯zfÂ¥\7fnª\80x­\8bvª\86s°\85q·\87{©|\87£v\82ªsz²k\82¦s\8a¡~\85¡\81\8d­|\90ºx\84¸g}»d\86»o\7f­x\7f°u\85¾j\86¾n|¾o\86Äa~Àa\84Çi\85Ã`\8aÉb\8a½Y\90¹M\8e·G\96ÀR\90½[\8d¯_\86¾^\82»^\8cÉf\99Éb\97Äg\8eË]\96ÊQ\96ÑQÂ¥T~\98P\81\94K{\9dM\8b\97V\91\98K\93\94W\84\9fZ\90\95V}\9bU\87\89X\82\8a^\81\91X\81\92`\87\90_\83\91l\85\85j\93\92u\95\97|\9c\9er\9b\92\82\9c\9d\84¤\9a\82Â¥\93\83\9f\95\87£\90\97\98\9a\94\90\94§\97\8e¤\8b\80 \85\8f\99\85\89£\94{¢\93s\90\87v\9b\92x\9c\93sª\91q¦\84y­\8b\80®\9a\85®\91\8c¦\8e\85£\91{\93\92u\9b\84w\9f\93zÂ¥\8ct®\83w¬\87n©\8ah¸\9av´ j·±m·±kË«kælÒ¤hÓ¨dÖ®kέb׬_Ù§eÖ±]à´Y×®TÛ¹_Ò°[ïVΧdȪ]Ê®]È«TɺMýMűXÆ·M¾¼Y̳\¿»ZúRý^Æ·]˽húfÃÂkÃÃnÉÃeÓÎrÇÕgÔÚ[ÑÃ\ÕÈXÇÃUÃÊ]È¿PÇÃQÊÄWȽNýKøIÒ·]ѲS˲\ȺRȨOïYˤU¹£YÇ«SäaædÓ®jô\¼°fŹZ¾¼ZĺaíT¸¤\ìfíTÀ¬UǨTƦW½\96Hµ\9cK½£Iº¢H¼ D­ H¸\9fC¼¥S½\99PÄ\9eN¸¢T¸ N®\9bVÂ¥\9bV¦¤Eª\8e=¨\8cA§\92F\9e\89O\9f\94T§\94Q\97\8eP¢\8bK¡\8cI\9f\81F\93\89;\95\84B\93\839\93vC\90\80<\86\7fG\92\84H\9a\84I\9cvP\9d\84K\97\88S\92wI\93qB\97qD\87\82E\8a\80<\90\80>\97\86;\99\8fB\99\874 \895\93\8b0\9e\82.©\861¬\8b& \8b\1d¤\91%\9c\91%¡\99#\92\98+\90\97.\91 %\90\94%\89Â¥'\8c\99*\82\9d&x 4x\9c9x\94:\84\9e<\84¤&z\9c0\80\97)\85Â¥4\81¤9\82\9b:\83\9aI\89\92G\81\9d;\8b\9aH \92Q\9b\92R\97\97_\94\99b\93\97] \90a\9e\93\±\9ceµ\98k±\97i³\98]´\8d`¬\93f±\95h¯\90g´\7fnª\8ax«\87{®\87{©\8dw±\81|­\80\87¤z\86ª\81\7f®p\82\9fr\86£~\87¡\84\91°\81\8b®\82\92µx\8b±t}Â}}¹}\90·t\8c¹s\8bÀr|¹n\88Ãf\84Àd}ÃnvÇ`\84Ãc\8c½a\85¹M\89Æ]\88ÀS\8d½_\8e¸_\89·d\8a»\\86·`\90Ã…k\94¿h\95ÃZ\8eÈY¢ÃW\9bL\8a\95S\86\95P\80\8eS\87\91U\82\96K\8d\89V\91\92O\85\95S\81\93J{\87X|\8eT\82\87X\8a\82e\80\8dr\7f\83r\89\84q\90\82v\98\90|\9c\8fy\94\96w\97\91\86\9c\9d\8b\9f\93\8e¡\94\8a\98\99\8c\9c\9a\8b\93\9b\9a\92\8c\9d\85\8f\9d\89\80\9f\8a\80\99\8cw \80y\9a\83s\99~x\9d\85w \87\7f\99\85uª\94\80ª\93\86¯\97\8b­\8b\85\9e\89\84\9d\8f~¡\96\81£\93w¢\92x \88v«\86t¤\8ds¨\9du²£m³ t¾¬kË´cΪiÒ¦fË­cÔ¨hÒ¤_Ú£XÓ¤bܱ\à²Zصaá§VÒ¯YΨ`É¥aÓ®Yȱ_Å°Wù[ɵOÆ°Zº²TñOǵXξSÄ¿^È·[ó_Å¿l˺nÙÂoÕ¿dÃÉhÃŽÃlÃØeÆÔhÉÃcÒÈ[ÔÌWÉÊXÂÅUÀËL¿ÆQ˾YƼUξW×·WÕ±\̨`É°\ǤPÀ©QÄ­P½©V»¤RÇ©WΩYȯfìi½±_ƹT¿µY´·W¹¨b´±g¾¬añ`¿ªYÄ¢SÃ…\9fN¼ TÀ\94Q¼\9aR·\9aEµ\97H°¢@¶§H¸\9bL¸\9aX¸\98R¼\9aO¶¥S¶ MÂ¥\9dO\9a\91B\9f\95F\9b\95H\9f\8bT\9c\8fV \96N¢\92W\98\97P \92V\9c\8dL\9a\82E\93\82A\94\89=\95~9\98\85;\8b~K\96~K\92yM\96{C\90{I\97\85I\90~S\96\84P\90yJ\90qO\8fyM\9c\84L\97\8bG\8c\8f;\92\8a?\9c\85.\96\90-\9b\962\9e\8d- \87+ª\8b/ª\91,£\95$¢\92&\9c\8b&\91\87(\8e\92+\84\90*\81\9a%}\97\1f\81£)|¦/|§*s«1v¡9~©1\80«/\85¬+\7f¤6v\9dCz§E\83\9bN\87\98E\8c\8dK\88\92G\96\94I\96\93P\90\9aO\91\98[\8f\99h\99\8ad\9f\8bl§\9ae¦\98e®\98f³\95a±\9cZ³\9ad»\97cÀ\9e`µ\95l¸\85s±\83y«\88\86²\81\88³\8d\8c´\88\89º\90\81°\89\80¬\80\88¦v\83¦v}¡z\80«u\91®\81\90±|\94±\83\90²\87\91¾y\8b½u\8fÊt\8fÃŒs\84Ây\85Àg\7f»e\80º\\83ÉaxÇb\89ÃZ\8aÑ[\8aÆZ\89¾V\8b¶X\8b·`\89¸j\8aÃ^\85¼b\8dÂf\86ºm\8eºn\97Ã…c\96Ô_\90Ñ_\97T\85\9bO\81\97R\89\8bG\86\9aJ\8b\8cG\90\89S\7f\91R\81\90I{\92N\7f\8cV\7f\8dO}\8cY\88\8b`\88\97g\88\84~\91\83p\89\8cq\91\8b~\9d\8f{\97\8fu\9b\9f\86\98\9c\8b\9e\93\8d\95\98\86\9c\9a\81\97\9a\91\95\91\8f\91|\9d\89\8a\95\8b\84\9e\87\80\92\87y\91\84r\99\8cv\95}j\99\84o\97\87o\97\95{\98\89u«\96\83\9c\8f\86¨\93\81©\8by\97\95\7f\95\86z¦\86w\9d\92w\9d\91x \8dy£\90k®\97j«\9cm®\9fp³¬sŤdË°eÓ³bôVʪ_ΣSÕ«aÙ©bã¨Tå¨Ræ¨`à®Yó\ɪ[űZõQ¸X¼°Y̺KýUűUƸS¾®MÂÀV·¶TĺZÉÀ`òZÆ»hücβjɳfÆÃiÓÈtÊÒaÈÕhÈÃbžeÆÄSÇÃZÉÃKÂÃIÃÄN½ÃVÄÊ[ȹZ˸QÔÀd̹Uʵ[ïUÀ¬\·¥\ĪW©XÇ¢Uò`çX»´Vò\Ä¥S¼¶Y¿°_¶¯Uº©`çZ³^îT»\9cPÃ\9fK¹\93A²\8eD¶\9c?½\9dF·\9e=«¦;²£C»\9eJ­\98S¸ F»\98O¶\98Fª\9aG¤£O£\94G\9b\96>§\8aD\96\92[ \91X\97\90M\96\92U¤\92G \95I\9b\8cG\91\8aF\93|A\90~5\95\829\94\87F\8a\88B\8dvB\95\7f@\8c\82M\97zO\8brH\9a~S\94tQ\8d\7fI\88\81R\8d\81O\8a\82J\94\80H\98\7fH\8e\84I\94\8a@\95\95=\9b\92.\98\994\9e\8e2¢\906\93\89&\96\8a)\94\96 \9a\8f'\95\92(\95\97/\8a\9d+\83 %\8a¦0~¬0\83©0w£&\80Â¥/r¤:|­.zª5tª-\80Â¥/\82\9c=z\97C\81\95=\7f\92I\84\9fF\84\99I\90¤G\9c\9bP\9e\91X\94\9bU\98\9fX¡\90h\9e\98i©\97\¤\99]±\9bh° `¨¡b¼\91h½\9dfµ\91d¬\92l·\89y¬yt·\85{©\7f\80­\8f\84°\95\86·\8b\8a´\8c~´}\84¤~\86¨\80~Â¥~\8d´{\95±z\92ª|\8aº|\8f°s\8a»u\93Éq\94Àj\95Àp\8fÃ…}\96Æs\8fÀj\80Çn\82Ãj\81ËczÊd\8bÃ\\80Ã\\89È[\8cÀ`\83°f\8cÃf\8cÂf\8d¼o\84¹`\89¼m\8fºb\8f¿a\8eÃŒ_\96ÆZ\8eR\84\93H{\94?\82\9bGy\94N\81\91R\87\8fG\86\8eDs\94Av\91Nu\8fN|\8eSv\97c\81\98j\8c\92x\93\90{\8d\84u\8c\8b{\98\86m\9d\88n\93\96m\93\9d}\95\99\8e\91¡\8d\8d\9b\84\8f\92\85\8c\8c\8e\8d\81\95\95}\98\96\82\9a\90|\97\94s\93\8bu\9b\8dh\9b\83l¨yj£|q\9d\8cw\9e\97oÂ¥\94x\9d\98\83\96\91}\9a\94\84¢\8dy\9d\8dz¢\8bn\99\85n\94\8co\9d\97n\9b\90y \93s¦\94l¤¤eª\98b²\9dj½ iȦcɲ^È®UÈ´OάLß³JߪVîTä¦ZÞ¨NÜ°SÊ®Pȱ[˵OƬHĹQĽXÊ¿MüM»µKÅ°WżX´¼T¼ÅQ»½U¶¶WÀ®]ʱWÅ´`ï`»µ_ȼkÊÃj¾¿lÂÅ_ËÆgŹ_ý[ÀÃUÉÌXÀÃNÂÈT»Ã]¶¿^¸ÀYÃÃRǾ[¾_¾·_ûgÅ·_¿¹Z¼©Vº\9fMÆ¡TË\9fOĬRƪ_¶¤\¶­[ê\Æ¡XˬSDz\¿®[©S¹¨U¼¤P¾\9bA¿\91?µ\95G±\99G³\929´\99:²\9c8±£<²¡O«\99Pµ\9eJ¼\9eB¼\98G¾\9bB® E§\9dN \92G£\9bM\9d\9aQ \90J\9a\92T\9f\94W¨\98O\9b\93I\92\96L\94\8dK\9f\84=¡\8d:\9b\86=\94\87C\9a\82C£xH\9c{>\97sK\93yS\9d\81Q\9bzI\95\86K\8a\83U\8c}W\89yI\8b~M\88{F\91\80E\9b\8fD\98\8cE\8f\90@\92\9c=\9a\99A\98\91@\8c\926\90\940\97\8e)\94\93(\89\9c1\8b\92<\8a\995\87\9d5\86¢(\8c­%\86¦0\88«(x /y\9e-u¦9m«8n¢0lª:xª6\83¨7\80\95A\86\949\86\96<\86¦D\85¨M\92¨S\99 O\9a¡V\94\9bY£\94_§\9db£\97d\9f\91Y¨\92^±\95fª\92g­\94q°\9fn·\9a[¬\96a°\8dt±\80g°wk®|n¬\84w¨\8b\80°\93\80²\8d\8b¯\7f\87µ\86\89°|~¬|\85²~\91®}\9c¯s\96²|\8a²v\86¶q\8d¿t\90¹m\94ºi\8dÃ…u\96¿v\95Çu\8aÃp\8aÊp\82Ëc\83Âh{Çh~Ãd\88Êi\83Àa\85¸j\82»s\8cºk\89Éo\87Çj\85ÃŒh\89Ê]\86Ê]\80¾\\88ÇV\8dÄX\96N~\94Mz\8fIy\94Ms\88M|\8aIy\8bL\7f\91Fo\86J\7f\90J|\8dW{\88Ku\99W\80\8ce\90\89r\87\7fq\8b\82|\8d\86w\90\8aj\9b\88r\9c\91q\95\9a{\94\8f\86\97\95\87\8c\9f\92\84\8e\8b\81\89\97\8e\85\94\9cw\92\92{\98\9b\7f\90\90v\8b\8br\99\92m\9a\8di\95\8fu§\7fn¡\8de\99\88k¦\8ep¤\98|\9b\9b\81\9b\8f\80\94\94\83\9c\89y¤\95z\94\8ak\98\90s\92\9asÂ¥\90p§\97w©\97k¦\9e_²\9dfµ¥cÃ\9fV̧UÃÂ¥R¼¬QÒ¦QÙªMÒ¡Nå¤Tß¡Nç­Lè¦KÙ¸GðGÒªXƳGË»QαFÀ¼MÇÃVÇ»P˦\ı_·¯[³¹Yµ°T°¶O¶µa²¨[´¬g¸ºb´²i±Ã`¿Ãiú[ÀËVÈÃa˺dǹaÃÃV»ÈZÂÃS¿ÔM·Ã[ÀÆ\¼ÃY¶ÊV»¹`úZ˼i¹¼e˦Y¸±_»±e¶\9fe¾£cÄ\9eRŬW»®P·®L«¥X±\9eU¼£R³\9fR¶\9aP¿\9bTȣZ¶¬O²£UÀ¥P¸\99G¹\99B·\92B¹\8e8®\8f5´\99<¶\9fHÂ¥\99;Â¥\97O¯¢Fµ\98K´\95@µ¡A¯\9aK¬\9fJª\92N\9e\8cQ\9a\91Iª\9fV \92J¨\94Q«\8eQ§\9aU\99\94H\94\8fI\91\89@\9d\8c8\9c|>\9a\89C\97\82?\99\84;\99\83A\99xE\90\84I\9f|H\9arN¦xP\91\80L\95\83G\95\81N\87{B\89\81G\86y@\8c\87A\9b\88B\92\8dI\8a\89A\85\92J\90\94L\89\91G\88\95@\86\89>\8f\92,\8f\8b/\92\9cA\8f\970\80\990\82\9e3\84­)\87¤0\85¢6}\9f&~£0}¬.}³,w¢,o %v¡)z¡0}\9c-v\9d;{\9d<\84Â¥>\84\9fB\8a§H\8b°J\91£S\9eªX\92 T\9f\9aW¤ Z\9e¦d\9e\97`Â¥\9be¬\91hª\8dj\9f\92i«\97c³\92h§\96e©\8dh²\86t²tt²uk§\82u±\81}®\98\83®\8a{´\8a\87´\82\83±~\8b©~\8c©t\87µ\81\8e­y\97«z\85´x\81½m\84¹g\88Äu\88¶o\94Âx\93Æl\94Ãt\8cÆu\92Ãj~Ãl\84ÃŽk\8bÂc\88Ç`\84Ée\85¾i}Âg\80»n\86ºm\90¾e\8eÔh\8aÉk\8eÃY\93Â[\89Ç\\84Ë]\94ÀS\9a?}\8aFt\8d@|\87Hx\86Ny\83Eu~@u|Cv\81E\82~E\7f\84L\82\93T~\95d\84\8ff\8f\84r\99\8av\92\83u\8e\86n\95\82p\99\81r\96\90{\99\93r\92\93u\86\90\83\88\91\85\8f\84\91\87\84\93\8f|\8e\94\80\90\9e\83\8b\99w\92\99i\91\96h\8d\92k\93\97m\92\8bh\9c\88g¢\86j\9a\88f\9b\98m¤\9bx\99¢w\99\97z \94v\9b\8bw\9e\8ay\9e\94w\9c\9fm\98\9at\95¤r\9e\9dm¢£b«\9fe³\97^´\9eT¾ªUˬW¤KÀ©O¢OÓ£LÛ\9cGß Dá£Bà®Fé­Eà¶?Þ°<ñHűIżIÑ¿LÌ»LõY¿¾YÆÄ`ǾYð\¼³`½©W®­T³§Tª­]¶­e±·e¸¿g³À_À¿dŽZ»¹]ÂÅSÇÉZ½aÆÃ]ÇÃYÂÃPÀÃV¼É^¸Ä_ºÈbªÃX­Äg¶¶g¼Àc»g½³k³·a³¨`¹£e¸\9f[µ£aµ¬]¶¦L´©N±¤G¨¤N¯\98W­\9dT»\95VÃÂ¥V¾¥W· T»\9dPÀ\9bD¿\9fH·\97B»\9b;¸\99:·\8a8¸\86=¨\90F£\9fC§\9cB«\9bC¯\93A«\9a@±\9cH§\92K£\96W©\95V¢\96R®\9aP«\98K² R§\96I§\9fQ¡\98N\9a\8fG\96\92D\94\928\97\898\9c\86:\95\809\8ew>\8a|=\91\7f9\94~B\95\80J\9d|B\98\81L {J\9esI\91wA\8ev@\91\80I\87\86M\89\81A\93}N\95\85M\8b\8aC\85\8aE\8e\93A\8a\92E\8b\8e>\83\93F\8c\98@\8d\92<\94\8eF\90\91A\8a\937\84\967\80¢0\83¨*{¢'y§.t§2|¨)|¤'}¯0oª&q\9c$f\9b$k\9e-uÂ¥)y«3\85°=\8e¤C\8e¯P\97³P\8c¬U\8d®_\8e²_\9c©Q¢¯X¢©U\9e\9fd¥£f®\95q§\90p\9f\96e\9a\8ch\98\9bg\9f\98g¡\91iª\8bi¬\84m²\7fl·yl±~l¬\8cz²\8e|­\8b\88®\8e\85°\8f\8d²\81\88·\83\81ª{\81´v\85®t\8a·q\8e¾s\83¶p\81½g\81µm\8bºt\91Âh\8b»m\91Èd\95Æj\8c¿k\83Èv\82ÃŒk~ÃŒm\8aÃŒq\88Âd\87Âi\81Àl\87Ät\82Ä|\86Ãn\8cÓd\86Õg\91Ã^\8eÃ_\8cÃd\8fÈi\94½^\90By\90Ks\8cHj\86Bs\8cFp\89;i\83LjvMqvK~~Ux\8dVu\95[u\9bV\81\89k\87\88i\84\83x\93\7ff\88\85o\94\84k\94\81y\94~q\8d\88v\90\8e\80\88\92\84\84\88\82\8a\8e\8d\89\90\91\93\8b\8f\8e{\8b\94x\8e\9am\92\8av\8f\8e_\98\8fo\97\95e\9d\86k\94\82^\97\88m\93\96j\94\93w©\9d{£¡\7f\92\98z\92\93w\90\87}\96\91s\93\95u\98\93u\99\9fn\99\94f©\9d`³¥^²¢X¶¤a¬\99K· Tº\98ZæVÉ\9eLíMëGɱQÒ¯OÞ¬BØ­JÖ·HײOÕ»LÇ·VıK±NDZB¿OÎÃJÈÀUÆÃ^½­Uí`µ²b±¶a«·]®±V§¸R§«^®¶`¯³_»¸\¼ÂQº¾_þOÀÃWÃÂVĹ[¾ÀZË¿YÉÆ]ÂÈ\¿¼\µ½c´Ãd¨¾`¦¿^·Â^µ­W¸¬]®«Y¸±f°£a»\9fV¹\9fUª\9c\±§O­¡G°§P¬ A´\9eGµ\95S¼\96]µ\9bV´¦[Ã¥ZÀ¥U¸\97S¹\9bM· E±\9fD²\94D½\88;¸\89Fµ\8c8³\8aD®\97:¢\9b;±\96K©\95G²\9aJ­\9bB¤\9bJ\99\90F\9d\9eF¤\95Rª\92F®\8eK§\99I\9b\8dN¢\99F\9f\8f?\96\9dA\94\91H£\96@¡\83A\93\8a;\99\8d9 }>\96\807\91\80:\91\858\98\84D\93z9\95yG¤sD\9dyI\8dwL\87\80L\92vH\85{?\82y?\92~L\9a}U\84~Q\85\86M~}H\81\91C\86\89C\7f\93H\8c\8aI\83\8b;\85\88:\8d\8a=\83\99:\82\9b6\80\9b1\87\9d,}«9xÂ¥>wª0\81§$u¬4p¦8o¢5k¬$i¨.a©6s\9e0u¬6\7f©B\82\9eA\8aÂ¥R\95³\\96¶`\88¹c\8f­_\96§Y\9e£P\9f«R¥¡_ª¡b¨\93c\9b\9bo\9d\9bf \9cf \91c\9d d¯\8f_¬\81c¹\84`»~d´\82h±\81sµ\87n½\8as«\88s¶\92\83­\7f|·z\85¶\80\8aªz{¨w\80²q\93­n}´lx¬c\87±b\87¹s\8dÂn\84¿n\8a¹o\99Ëk\99Âl\88Ãk\92Ã…|\80Âk\81Ãw|ÃŒj\87Ãm}¸o\8b¶o\8bÆu\94½u\96ÃŽs\85Êk\8eÃŒk\8cËg\8bÊa\94Ã…b\8fÃŒe\84À[\93Qt\8dGq\8bEb\81Ba\86D[{;c|GntMuyPu\89Tv\8f[y\91Qw\97b\81\9cc\87\94j\81\87s\84~g\8e\86e\8a\7fj\85yy\84}r\8f\83t\8d\82z\8a\7f\83~\85\85\8b\8f\83\91\8d\87\8d\8f\84\87\85\8a\8at\91\8at\8b\8ah\88\88e\88\91i\99\8db\95\8a_\9b~_\98\8ek\8d\97n\9e\93p¢\9cx\90\99\82\8d\93z\8c\95r\93\85y\9c\94x\99\98g\9e\96t¢\9bt§\99t®¡d¯\9f]µ\9f\¯¢M­\95Lº\9e\96XŤYÇ RĤJîOÆ©F˲MÒ¸I̹?Ç·CνPʶSòSûRÄ´MÀ²QÄ»HʶJȽRÊ®OÀ¬ZȣY¶ª^¯©_¯¯d¦«a¤´W£»`­¸e¸ÃX¸¾X»¼V½¯S¿³T·¸VÀ¿a¼¹dÀÅm¿ÉeûY¾¾T³Ã]¯¶^±¹R«½W©ÅXª¼Q©¼P¯«_®ªf³¦^ª©\¯\9eV¶\9cO­\99Q« G£¤G§¤E±£F¶¨J®\9dZ©Qµ£O²¥[¶\9eX¹\9bLȢDèAȤ@­\9bL«\99L´\86L³\81D´\84>µ\8c;­\95?®\8fD±\99Dª\9fE¬\99Aª\9aC¤\9c@ \96=©\91> \9bG¢\8cL¨\8cPª\95H\9d\8fM \95F\93\93?\95\8eF¡\96@Â¥\8e:\9c\89B¨\887£\898\9a\835\9b\845\97\856\96|6\98{1\96\898¢x8£sI\9b{O\95~K\87tJ\83oD\81lP\85uL\87rM\94\7fR\87\81V~wR|{G\84\83?\88\83B\84\8dM\87\8bE\87\86?\86\859\80\8c8~\87A~\91=u\9b>|\998k¬8g®=j®-w¤.p\9e+r©/h°0o²3qª7g«<n¨5o£7z£?x E\87\9aR\84¢\\8e¨a\8dºV\8e±\\98±S\9cÂ¥Z ª]¤¨V¡ ]¦\9bc\9c\9cp\9a¤b§\9be°\92]¨\98e¬\88e²\87b¯\81j·\86fº\8cg­\88m­\88p¶\8bj°\80u¯\86q¯{\81±|\89³\80\8aª|\7f¯\7f\81©p\8a¨o}©k{«f\80¬_\80´q\85Ã…s\85Ãg\97Ã…k\9bÃŒo\9dÉi\90Èp\87Ã…~\8bÃn\84Ëo\7fÃŽm\88Ãy\83Àu\8a½n\91¸{\8b¿v\94Ã…y\8f¾u\94Än\8aÇc\8c¾k\86Ãk\86Èo\80¾a\88Kd\89Al\8bJ[\86:X\7f:h\8aEe|IpxBj\84Qp\80Jn\82Sr\92Nu\96Xt\96Z\81\87_y\8cl\8b\8ae\8d\85\\84{g\89ywxvq\89\80w\92uu\8dyx|\8bw\8a~\88\82z\85\8a\84\83\8b~\8c\7fy\80\8ay\8a\86k\95\82h\8d\82k\96\89l\8d\81_\9b\8ah\8b\8fn\96\92s\94\96g\8f\99y\8f\9bv\87\9dy\8e\90z\8c\93}\94\8al \8fk¡\9ae¢\9fq¡¡_§\97T¬\97Uª\9a^¨\9dS¯ IÀ\92YÃ\9dL¼¤GÃŒ\9fE¾£EóKʯCó@ôCÅÀBʺKÊ´P˼KðQýU¼³G̺QËÃNʹM̽OººQ·®QíY²¶Wµªf¯¹b©³c©¹V±±V¢®_±¶S¹ÂR¸·Pº³V¹°]¸±f²º\·¿g¸»hµºb»Âa²·Q¥¿T§®V¥µa¡µO\9dµP£°X¡§]°¬Z®¡a¦¡Y¢¥^®\99RÂ¥\9bM¯\9fU£S££I«¥P±\9bT©\9eI±\95O´\9cPª¥K±¥Q®¦L¯\95I©\9eO­\98I­«K¥¡B¬\93I®\86Lª\89<µ\88K¸\85G³\90:®\89C\9f\8bE¨\8dH\9c\93A¦\94>\9e\9aC§\9cE\9f\9cI¢\97J\9f\99O¦\93P\9c\91P\91\92T\94\89L\98\89G \8fD\9a\8f7\9d\846¦\8d6\9f\886¡\7f;\9cz6\9e\88?§\88>£\84=\9c\884\95\836Â¥\82D\9dzD\97~C\98{?\95{>|h;\8bpH\8csO\84\7fR\87\82H\88\80M\8asT\87pJ\80\82<~~F\81\8bN\8f{M\89~:\88\80H\8c\89A\88\925|\8c8t\9a6m\98Ct\9e8`§Ij¤Cv¨6k¦<j¨3pª<c§>d¦0b©>w¬=m­1q©>}ªD\83£T\8a«_\88¨W\8e·T\9b»P\9b°\\97£Z\90©_\97\9ca¡\98f¨ d\99\98o\9a kÂ¥\9bg\9e\91h±\96g¬\95a©\8bm·\91m¬\8fq´\8dkª\96fµ\89d·\85c¯\8fiµ|l­\80y·\85\8b´\81\88§\81x°\82\8a°{\8d¡p\83¢{~±p\87§b\85­q\89¾u\8f¹e\97Çq ¼k\93ÃŒr\9aÈp\93Çu\8cÃv\88Ãt\8dÃt\87Ç|\8fÀ\84\91Ãy\8dÇy\88Ã…v\94Èo\8aÈt\94Èl\87Ãn\87Ã…m\8c½q\8e¿e\8dÀ^\85FW\9dA^\94Ac\94;]\846g\88Ae\82Gh\7fHf\82Lm}Jo}Hj~Ok\87To\80Pu\86`|\7fc\84\89l\8czd\82{n\85|uy\7fr\86~\7f\86v{\85\80x\87\81~\84~\81\81w|\89~\83\89\7f\7f\82v\80\85w\8e\82r\91\8ak\94\8ak\87\8ad\8c\8a^\91\88_\87\8bn\8d\97m\87\8ep\8c\94h\87\8e`\8d\98f\92\99q\93\94o\9d\8bp\9e\8dg\9e\99l¦\94j¨\94W°\93S±\8eO­\90P®\90Z´\9eSÆ\99UÈ\99LÌ¡> AÇ¡GŨJƨIÅ©>Ì´<ʼGκEùNõR¿·UŹOþIÊÃKƹM¼B¿³EÇ°Q¾¬Lº«Z¹°X¯µU«³`©¼a«¸U¨¹[¨­\£¶Z©´S¶¹R·±[¯¬Y¬¯d¦¯]¯¿b³Ã_´¹e´¹]©Ã[¦²[\9b±Z\9a­R\9d®R§´Z¥¨Y\9c­_¤¯_¨°d\9eÂ¥_\9d\9bQ¡\9aS§\9bO¦\9dR\9e\9eW\9b\9aK¤\9aK©\9dT¨\95R©\92O®\91JÂ¥\9eQ¦\9bDª\9eG±\92L¦\96O¯\9bK¨\9dJ£\9dF¨\8dP§\84D®\8bC«\8bF¯\8cH®\87I­\8e>§\85D\99\85:\9c\8eA\99\90=¡ D¡\9eD\9b\9bF\9f\9d>\9c¢E\9c\99J\99\91K\96\93I\95\96H\98\90A\9f\8c4 \893¬\8e.¬\867§}?¦\7f6£\859§}A¢\87=«\87>\9f\8b>¢\8b:\97\85A\99~A\8ey@\93z6\8es2\85r;\8cz;\88pH\7fwD\80zM\8a|Q\84oT}nTwrJ\86sM\88wH\8ey=\86\83B\81|J\8a\85F\81\95F~\96=m\93Fj\9fAe\9cEj£CiªJf\9fDg\9a5cÂ¥7d\9d8_¦9m©4m¯9m´4y¬;vÂ¥Gw©Q|¯R\81¨[\82´V\94´Y\97®U\9a±[\8e²N\90¢Q\90¤]\9f\9ea§\9ff¡¡bÂ¥\98`\9e\99f\9e\8dj«\8c]´\89\­\90k«\97l©\90l§\8dd´\99h·\95p«\8eh¸\89e´\80i°\88u¬\81|µ~v¯\85}°\85\87ª|\84Â¥~x¤y{¢v~¯l\86±r\91¶o\95Ãb\90Ã…f\94Êi\99Àq\95Ât\91ÃŒt\8eÃm\88Ât\8dÊ\83\86Ã\81\8cÄ~\8eÀ\86\89¾z\87Ãx\8eÇ\81\90Éz\83ÃŒy\8c¿k\88Ã…p~Êg\84Ãf\82Â_\84<W\94=b\99DW\87DZ\91?c\8dAZ\86H^\89FjxUn\80On\84QfyVl\7fVu\8bNu\90c\80\90\\82\86_\83\87ev{mx\83k\84ur||pxwpvxn\86\85\84\88}\83xq\88\87|{\88w\80\7f{\82\81\80~\87w\8a\8dj\8d\83m\87\8ck\88\8ad\8b\90[\93\93a\8a\8bk\89\9cf\97\8c`\8f\8ca\90\92o\99\86s\9e\86j \8cs¦\8ep\97\94i \94k¨\99d©\97`±\9bU¬\8fO¨\9f\´\9bZáR¿ªMÄ\9eOÅ KÆ\9fRȬDÈ¥DÀ¤BȬCÌ´K÷HÇÃLÆ·MþPº½EöN¾´I¹·MÆ»Wº²I¹­VȪZµ´]¶°Z°·T¶¬[¤¬[ǻ[ª¸V¦°_¢¹Z¦ºZ®ªO¬­]³¶]¦³a©¿kº¼]«·d¯Àc§º_\9eµS\9f¿Z¢¹U£¹Q¦¹[\9b«Y¦°S¥³b¤®Y\9d¯\\9f¤T\99§Z£¢O¦¤N¢§L¤\9dR\96\99N¤¤Q¥¢L¤\91Q\9c\93P\9b\96K¢\95Q©\99G³\9b=©¤E¬\98@Â¥\99F¤¢E¢¢Q©\9aV«\88B¬\87F´\90?´\8d>¨\92Fª\919¬\8e?\97\8dH \98=£\9b8¨\9f= \9f@§\96H\99\988Â¥\98:\95\99B\90\8fE\9b\8dJ\90\8fA\99\89<\97\8e=\9b\8c=Â¥|0§\834¦x-©u8§{1\9e~6\9f\7fC\9d\87F\94\7f<¢\91>\9f\86F\9a}>\92\82?\9ct=\8f}0\89x7\8bo>\91{A\80rF\7fsMvyL}nIt}J{|L\89tB\8dy>\8e~?\88\8eF\8d\83@\87\93F|\92G\7f\8c:s\9bA{Â¥8l\9fBj¢FgÂ¥Lp§Pe£Af©<g¢6d¬Aa¬:aº7u¹?m¬>s©Hk¬O|ªU\82³Z\86´T\9d¿J\93¬S\96¬]\8f®P\8e¯T\98«_\93«c\9d\9c`\94¡g\9e£e\9b\9ec\9b\8fa\9c\94]\9a\8f`¡\97fÂ¥\8ds\9f\9bd§\90t© r£\8e`¦\92^ª\92b³\8dv¯\80w¨\81t§~\82¬\7f\81µ|~µ}\87³\85\89¤|}Â¥z\85¬r\93©n\96¯w\92¼l\97½s\98¾w\90·u\88¼l\8eÃ’o\8c¾j\84Âx\83¹r\85¸~\86»z\87Â\82\85ÃŒ~\89Ê\80\8aÃw\88Ãk\87Æh\87¶o\90¸b\8bÃ…i\83Ç[\82Ãe\86>Y\94@`\8f;c\89Dd\92>]\93I`\87Lc\85SozSa\82Mc}M]xKf{Pr\86W\7f\8ce\82\91a\8d\93h\88\84cxvbsqf\7f{f|\82kswo}xqx\85u~z\83}x\8b\81n\82\8aq\82|w\81\7fx\89\84n\88\7fl\88\82a\8a\94e\94\99e\91\98b\83\9b^\85\8cW\86\89^\98\95e\94\8di\97\88g \84p\97\87o¡\85t¢\83l\9b\89g\99\8em\9b\99h­\94^«\9b`¦\98\´£Q²¡Vº\9fL·©F³¥O¸¦S»±GȪKÃÂ¥K¦N˻Oê>ʲF˹RƹK¾³SľR¹·FùL½¹N»»T½·YÅ©ZäWÄ¥\ºµY¼©b¯§_¨¢a­¦Z³©d­³c³°`§®T©¹J°´PµµR¨°`«À\´Àe­½V²·V©±O¤·W§¯H\9b°J\9a«T\9e·W¦·_ ­Z\9c¨[\9aªU\9d±^\9c§W\98§K¥ E\9f¨P¢¥K\99¡K\9d\9eB\9d\98>\99\99K\97\9aN\98\96J\9b\9aB\9b\90Aª\8e5­\9b5¥¥2Â¥\9f;\9f\9cI¤¤J¦\9fN¤\97P®\89F´\83=ª\80:±\8cB´\8aB«\8dA¡\97D\9d\99I¨¡K©\9cD¨\98L\99\92I\9e\9b@¤\94@\9c\99E\99\98@\98 Q\90\97V\9c\96N\9d\8eG\9f\83;\96\806\97\820¡\816£|:¦y/\9dv1\9e}6\95~:\8f\80B\8d\81:\96\85>\98\846\91\85>\92x:\98y<\98r3\94|7\90\81G\8avJ}sAqyHnuMt|J|yE|\84C\80}:\90\86;\91\8dM\92\89M\95\87K\8c\91<\84\978{\91?v\8f7\82\99<\81¨Hy©JnÂ¥Jh©Lf¤;]©:c¤E[­>_¸Gcµ>`ºFm·=h¯Mn³Q\7f¿X\7fºQ\83»H\94¸I\98¯K\8c°T\89«V\8e¯Q\91¨Z\96¬[\93©b\90\9fd\93\9c]\90¡^\91\9eP\95\8bR\9d\97Z\9d\9bd\93£j\98\9dm\95¡i£\9bm¬\96n¬\92`­\97p¤\8ew\9b\7fv¢vv©\82~¬\86y¨\8a|°\86\87¨\86\8e­~\8b\9fv\90¢p\91©|\8f·x\96µ\81\96»y\8aµx\91µr\8a¹p\86Ék\8bÀn\85¼p\82¼s\88·~\7f½s\85Ät\8bÀ\80\8bÃ…{\81¾y}·e\80¸m\8f·k\8d²m\8a´j\89¸d~º_|Ha¡=o\92Hl\93Qj\8dKd\8aOp\84OoyWfxYjwT_vQl\85Sn\88Mk}cr\90b~\93\\88\8b_\84\82fu}ns\80es|d{t`sqpq\80t{|u\82s|\88p}\83w~\8bq\8c~o\88\86s\84\84o\86\88g\8f\93m\81\98f\84\95d\97\97a\8a\9a\\90\95Y\92\8fb\9d\8fd\9a\94k\8c\83c\97\85k\98\8ek\9e\8ar\9e\88i\93\8ae\8e\90z¤\88cÂ¥\9b]§\95g¨\8db¯\9c\º¦Y¼©W¹§E¯«Mº¬OÃ…\9fVˤJèQ½\9eU̬LçGéI˾Sº¯M¾¶UÇ´WÅ·IÆ´J¼¬KÇ®T»µZ½¦]¼¡[À©^³°S³¦S°ªX¯¡W·°a±¥f­³`§³Y\9f¶^£­X¨±W®­Q²¦_±¶^¶Ãd«¿W´®Wª³\§»N\99¾P\9fµH\9b³R¡µT\97¼M ¶P\9e­Y\9d«Y¥§T¢¤W§¦Rª£>¨\9eF\9d£H\98¢>\9d G\9c\9fM\98¡=\96\95A\8f\94=¡\8d<\9c\933\9d\9b7ª 8¬\95?\9f D \96D\9a\9cK©\97H¦\8dTª\91Qª~E³\81B²\8cJ¨\81I£\91KÂ¥\9c@\9a¡B¢\99I©¡J£\90@\94\96K\9a\93F£\8fJ\9c\95I\93\9fB\96\94H\9a\88U\96\87S\99\8fF\97\8a=\97~C\97\8a8¤\84:Â¥\83@\9e~8\95\84,\97\863\96\861\90z=\95\80C\8a\85:\98\87@\8d\8bA\8f\87>\8a\7fI\99\84C\98\8bB\92\81F\91vJ}vMw\86@yyO\7f\86J\80\8dF\86\8a<\86\8bH\89\91F\94\87I\93\94M\9a\90L\90\8cL\8a\97J\84\94E\86\95;\81¦I\80¦?q£Os¢Ik ?c¨Df¢:f®7_¨C^¶BX«C^¾?b´>g¸Go·L}·D\83®R|¹M\85±I\92°U\8f´S\8dªN\88·Y\95«b\93§\\8a§V\86ªc\96\9dg\8e£_\98£R\96\94U\8d\93U\90\9a_\98¢h\91\97d\95\99d\9a\9ag\9c\9dc¦\94b§\90i¬\92~«\88m\9dzm\9e\81m¡~\7f¤\8d\87¨\85}®\86\8d¦\86\8e±\84\89¨y\8f°\85\92¶\84\90·\83\96±z\89·{\8b¿y\96Æp\93¼r\89´x\8b¹rzµt\88¹|}»y\8aºq\82Ày\81µs\87Âu\8b½h\8dÃm\91¶b\90½^\8c¹e\90¾c\84·_\838l£Bx\9eQ\81\96Rx\96Tx\8cYo\88Yh\82Wl~crz]jy\hwTj\83Sq\8c^r\8d[r\8bh\83\89j\7f\85kt\80n}ybxrhpwfomsny}zzt\83z{\82mx\82b\83\81h\8a\80q\88|j\89|i\86\85h\82\93^\85\93e\87\96f\91\94^\8c\8ac\91\8fd\8a\9ae\91\97a\8d\97l\90\8di\91\92c\94\88n\8b\85r\8a\88h\90\83o\93\85u\9f\8an \91f²\93h´\93e¹\99^²¢S´­Y´¦U¹\9eX¸¢LÀ«J¿¢SÀ£TÈ\9b\9fJÄ©B¸¶J¼³J˦KðOìQδXóQÈ°PÉ®VÄ®M˻Sº®W±¨X®®U­´\¢ª^¡¢T¯«Y¦¶b«²^Ǧ`¥´a©©U¥©P¨¦L¬¤T«­T¶±U¨®K¨¶M§¹KµT\9b³R\99ÀO\9f½L\9a¾O¥¾W¡¸O °S¥£[\9f\9dY\9e§T¢£R \9bD \9d>\9e§; ¬D\9d G ¥:\93\9f<\90\9f8\96\97>¤\94;¦\903¤\982¢\948\9d\8dK \8fL¨\99T¡\99L²\98V³\8aPµ\82S±\85K¬\84A´\7fA·\82@ª\8eG£\99L£\9aJ«\9e<­\9d>¦\94G\9a\8eI\9f\97E\99\92D\99\9b@\97\98F\93\93D\99\8aP\9c\85A\9a\89>¡\84G\9a\87> \8dA\9e\85D\9e|D\9c\829\89~;\86\881\88\7f=\85\807\89|E\89\84E\89\8e<\94\8e?\94\8cI\8a\95L\8a\88M\8f\8aF\83|P\87~O{\84At\83Dy\82>\83\8bH\88\8e=\90\93B\89\98?\8f\8fL\89\8bD\92\96G\8f\8eJ\95\8eQ\87\97V\8a\9bK\7f\97Bx£E|£Au\9cNn\9aHn\95>k\97=j¡C[¤@Z²>^¸H]°Ba½=`º7m³5p½?l³Ey³AyµF\86¸L\8f²O\87²S\8c»[\90²_\95³]\8c§]\92®\\87Â¥^\90©`\94£Y\8f¤P\91\9bU\8c\92]\8e\94T\8c¢_\96\9e_\98\9dl\9d k\9d\99i£\9cj\9d\96kÂ¥\85v«\84yÂ¥\7fp¡|}§\81x¤\85\7f±\8d\82´\8d\8f­\80\8c£\8b\89ª\88\90µ\81\91¶\83\94¯\86\91·\89\8f·\86\95¿\89\9a·\81\95·v\92±m\82µt\82Ão\87Àu\86½~\82´z\86®~\8d°w\84»o\92»n\91´f\94·\\8f³^\93´]\86´Z\80´d~Ih£Jl\9fOl\9cWo\94\m\93\i\86Zf\88Um\81So\81\j\82Tn\86]k\7fYp\82ao\89iy\85c\87\82p{\8berzg\80\81[ylhykozrwwv}ps\83{s}\81e\88}o\8a\7fa\80\7fk\8dne\8b{b\8ft[\8c}a\8a\93a\87\8bg\88\95b\86\8fc\94\98d\97\8d^\99\99d\8e\93r\8d\89p\8d\85s\8b\8ez\88\87s\88\8bf\8f\82d\92\87s\94\85o\9f\87s©\98sµ\90d¶\97X¶\9cYª¥N²\9eK²\9cF¶\9fI½¤E¹¥EÀ¦DáPÉ®AÊ«FÆ«CÊ©KħGãSîRÇ­MƨIÄ­RÌ­S©Q¢R¿¯Z¶®U´³T¥¯S\97°V«­S³¯^¤µUª·X­«^¢²f¤¥[®¢P­­L³\9dX®§Q­´P±°Y¥¹L«±X\9f­\¢¯S¡·G\98ÀL\9bµM¢·U­±F¢©V§£M¤¢O\98£N\9d\9e?§«E¡\9bE¤ª@\99£J ¦C\9b\9e?\93£4\97\94C\9d\98C¢\935\9d\986\97\9b9\97\909¦\95:°\86K\9b\92M \9cN¡\8eD¬\82K¯\86G´\8aJ­\8a<³\845¬\877­\8f;¦\94E¨\96J¦¦C¬\9b@¦\95<¡\8fI¡\93N\9a\9bQ\96\9eI \94O\99\99A\99\87K\9f\90K \91=\91\84C\91\85>\9d\89E¤\81K\8f\8a=\8cv;\8d\866\93\8f>\8a\89A\8c\84B\84}D\85\7fJ\84\85?\8c\8eL\82\91H\8b\88A\81\87E\91\87K\81\8a>\7f\82Gw\8aHv\80Fy\86L\8c\8bI\8a\92E\8f\98H\87\92B\84\8d@\85\93J\8b\92L\88\94B\8f\91S\8b\9fK|¤Cw\9bH\80\9dA\82©@\81§Cs\98Jk\9f;rÂ¥Aj¨@`§FT 2X¦?g±:]­@nµ2h°;p¶8r¸:o°Eu½>\83ÂG~½F\89¶L}±S\80¹_\87¯[\7f\9fQ\81ªa\8c­_\8c£a\84ªW\84£V\84\99T\97¢K\90¡P\8b£_\8e\96[\94\9aj\95 g\9a¡k\99¨l¦\9cj\9e\8do\99\8as\99\86l\9d\82n\9e\86y£\8d\86¶\8e\89Â¥\87\8a®\8e~¢\84\89©\96\91ª\92\90«\7f\8eµ\8a\8f¹\86\91Ã\85\9a¾\83\8dÂz\99Ãr\8f¹v\89µ\7f\83Æ|\92Äp\82Ã\7f\8e²z\8a²\80\89¹y\80¹l\87¶]\86¬b\87³^\87¶`\84¶\\8c¯V~£i\89<p\9aJo\9bQk\9bUu [k\93Tn\8fQm\89KkyLfy^r}Xr\87[e\8cXp\85dn\85l\80\8bd\82\8b`\84\80fz\81js\81cwrjpuvvxsqq}syz{m\81yj\86{h\80\80k\8bya\88pg\88p]\8ar^\88\81_\88\85c\88\88Z\8b\85Z\8e\97V\86\99a\8b\92c\9d\91q\9e\95r\96\89s\94\89l\8c\95t\92\86h\94\83k\8d\83g\8f\7fk\9e\8fj\9d\8dr¢\97q¯\93l¯\98b±\98Y±¥K°¡G´§Q´©I¯ªC²®Bµ³BÇ«EĬ@Ä­LæNÆ\9dEΠUÓ£XÃŒ\9cQË¢EÃ\9eOêXέ\Ç Y¬a¾®ZȻY°¯Qª®M\9cµY\98·Q¥±X­³P¦³L¥µY¥«Z©®X¬U²¨ZǤMª¥[³¯\·ªQ²±U¥¬W¡±_\9cµZ£³N\99¯I\99µN ­H§®N¢«F¬¦E¬«@\9e§I\9d¨A£«5¦«E\9b H¨¢P¤\9aH\9a E\9c\96:\9a\8d7\9f\93=\9f\9c@\95¡7\9a\9d=\9a\972§\8f5®\88C¨\99J \99Bª\8bL£\88I¡\86H®\84N¹\88M¾\90:±\8a4³\8a>¹\92B® A® ;¥¡B©\95G­\96H\9e\92C\9d\98O\9d\93I\9c\95P¦\96M\9e\95?\93\9b?\96\91C\99\92I\93\8eB\8f\95L\98\8dM\91~A\8a{8\8a\88B\8f\85F\87\8eM\8a\8cK\8a\87M\87\86B\88\95L\8c\92I}\94P~\86F\83\87@\82\91F}\82=\84\84@{\8dBw\84B\83\86A\89\88M\86\8b?\8e\96@\87\8d:\85\8e@\8e\9fE\8a\9eE\86\9aL\91\99K\81\9dN|¦I\83\9dHx£G\80©<\82¢>zÂ¥=i¤A_\9dHd¤@^Â¥9^\9c7]¨Da©CaÂ¥Ek¨5p«:u¹4m»Au®C}±N\81ÃG\87»D\85½Qw½Mz¹Pz²Wx¨Qz¨Q\85«V\8a£Y\85«Y\8d Q\85¡R\94\9bL\97¢Q\97 V\8c\9bd\99\96h\9b\97Z\9d a\9b¦\\9c\9ce \99c\98\9ck\9e\8fuÂ¥\8cr \86z©\96z¯\98\85°\8b\87\9f\8e|¬\8c\86¶\94\90¯\8d\91ª\8c\84¸\91\96À\85\98¾z\93¼|\8f¾w\86¿z\89¼\7f\8eÂ\82\94Ç\83\9aÂy\8e¸\81\7f¯}~°\82\86´}\8b²e\8e°]\8c³`\8e«e\8b´T\90«R\89\9eX\87¢b\83?n\9fKn\8fTu\9eV}\9eVu\90Qy\92Vp\85Ln\87Qq~Qk~]k\80Wq\88`r\8eWy\90_z\82]\82\82c\80\82hv\8brz\83s~\7fo\7f|t{py\7fzylvvku}iqt{osutwxu\7fqs\82qc\83n^{\80\\88\87a\8d\85]\8b\7fb\89\8ba\8e\9bc\91\97m\97\98h\9a\90v\93\86t\8b\93w\8c\92s\97\8bq\92{i\8f\84q\95\86n\97\88t\95\95p£\97p«\96p²\9e[­\99]©¦Y¯§Cµ­B¿µK°§M©²F±³@ôJÅ­L̪FǨAÃ’\9eLçRÃŒ\9cPÙ¨KÖ¤MÊ P̱OÇ¥YÀ©O¸¡P¼±Z°¶Y¯¯O¢¹O\97´Q¤±M\9c³W\97­V\97ªN\9f£O\97§S¢¨Z®®V¤¥W­¥J§­M¬°`³ºX§½M¤´R¬¿d§±`£·O¢«M\9e§I\98¯M\98¢S\9e°@£ I\9cªI¥§= ©9§©2§°8\99¢;¨¤K\9c\9dAÂ¥\9b9\9f\9b5\94\92>\9d\9f5¡¤@\98 5\9c\9b@\9b\8c7Â¥\96:¨\8dD­\8d3£\93<¨\8fD¯\85K·\86L¼\87>´\8d<½\8eA¶\92Cº\95?¹\9d7©¥>« F§¢L­\9bBª\98J§\8cP\9f\8dH\9f\99S©\92M\9c\9bL¡\88B\9c\8b<\94\91H\92\84?\98\88A\8a\90F\96\92M\8a\80@\88}9\8d\8cD\91\84@\90\8eM\83\89I\89\8bI\8a\91K\80\98B\7f\9cHx\95H}\84C\7f\8bB\80\8fF{\8cB{\8b?\7f\86;\80\80E|\8dN\86\86K\87\8b<\87\93:\87\99:\88\9a>\82\99@\84¦B\89§F\8c§E{©J\81°D\83\9bC\81¡Az¢?\89¤A}¦:f¦>l\98Hr¡:c 6]¡0e 6c¯EY¬:_£:k¬:hµ7jª=i§Iq¶?uÀNxÂFp½Do²Hp²En»Jl»Ft²L\7f¯T\89±V\7f²Q\86¯M~\9fV\8c«L\92¯L\8b¬S\8f£`\9a\9d_\98\99[\9d V\9c«b\95\99g¤\8eh\95\8bq\9e\8cs\9b\8eq\9f\85}©\88\85§\94\87¨\9e\85¬\9a\82«\9c\85»\95\8e°\95\8a«\8d\8bº\86\91º\83\8d¾\80\95¹\8c\8f³~\8cÃ\89\91¸\88\93¼\86\94º|\91¾{\81³\82\8a±zx²\82\81­o\8c°e\88­j\85®[\8d¨a\8c¢U\84§Y\88¨]\88¡d\8bA|\91Eu\94Jv\97H\7f\98T{\90Ts\97Jr\97Q{\86X|\93Ss\8fU|\86^s\88Uu\8dX}\8a^~\8dgu\80e\82}i~\85ku}u{\80n\84{k\80mlzlrunwfishjypjtmwug{xdr\83om}ph~uc~ye\89\83l\82\7fd\95\88k\97\8bf\9c\8cq\9a\94n\9c\8bm\99\88o\99\95p\8a\91n\8e\8dh\92\82h\8e~b\93\83m\90\90k\98\99c\99\99Z§\9dbª\9c\°¤\¸¡Y°©I¶ªN¹µB½°H±²D¨°;°­C¤JÃ¥FÃ\9fFÓ\9eJÑ\9fGÑ\9cQË\9d[Ó¤WÖ¬XÈ©N´QÆ­N¿¨D°¤J¤¥M ¶V¤¹P µV\98´N\95¨H\9e¤E\98Â¥O\94°_\98«]\9a¢[§ªW±ªL±Q¤²X©¸X¡Ä\ ¿V¦º_¨Ã[§²P\96°V\96±F\97ªB\91\9f?\97¢I¡£D\9f§A¤¢?\9e¤8\9d¤5¨¨8´7¨©5§°?\9f¨G\9a\9fC\9a\9e:\96Â¥<\97¤>¡¥<\9c\9f5\9e\969Â¥\90A¦\915¤\885¨\898¨\8a5­\96:¯\93=®\96Dº\8e>Â\86GÄ\8eHÃ…\98E¾\99>¼\9bD´¦?¬­J°¢D¢\93R¡\91O©\97J¡\8eJ¢\98G©\93P£\8fEÂ¥\8cB¨\90A \8aF\9d\8fC\90\87K\95\89@\8c\8eC\93\81P\8a\81K\8c\88B\85\8fD\88\96I\7f\8fP\84\98V\83\95N\86\9aP|\98Ax\8dOs\89Kw\86G}\89Mu\8fCy\8fC\80\92P\7f\86K\81\81K\85\81=~\88@\84\89=\8c\92?\88\9b:\8d\9e8\8d\9f?\7f¦>\81¨C~­I\81¨>\83\99G\87\9aD\7f\9a?~\9aAy\96Dt\9d?y\95Fr\9eAs£:i®6c©.Zª6d¯8aª=jª5l°>c®Ab°E`±Gm¼Md¸Jj¹Hg¸Lq·Hj½Cn¼DyµA}­N}±N\85©W\8f±S\88ªR\97¯M\94«W\93¢^\95¤_\93£b\9b¦U\9aªR\9dÂ¥_\95\99i\9d\94h¢\8dw\9d\8et\9f\8f~¦\8f\82\9e\8f\84\9d\95\7f«\9e~©\9e|«\92\80°\96\88³\8b}º\88\81µ\91\84¸\88\8d®\85\90³\90\91®\86\8a·\8b\8eÀ\8d\87¾\86\85¾\8c\82¸\88\84º|\89µ|\83µ|\7f§o\81¢l~®f\86¬d\89©]\84¡]\82\99`\81\9b\\8b\9dT\8bI}\90Mz\96Ow\8bMx\89M\7f\94Pt\8eH{\91Mq\8cQ{\88U~\8cTr\89Uw\80cx\81^{~[~\83fw\86`}\88i~\84jx\86mwyt\81{z}mmrmprdnqbybdmjuwlrnessnr\84rk\84yhyrf~{a}tc{{a\87\80b\90\7fv\96\8bm\95\90t\90\8ev\96\7fn\89\86n\85\94t\92\8an\8b\89g\94zm\94~h\9e\8ag\97\88b¨\97b©\9cd­\9d\§§Z©\9bE©©?®¡J·²B¾°O²§K¸¦H¸©G·±OÉ¥>ȦJÃ\9dKÃ’\97OÑ¢HÉ£FïNâMÇ°VëKɬP¸¨L°­C­°N§¯]\9d±Z£·S£¨P\9e©J\9a¡K ¢O\9d¦[¡«V¢±_§®]©¨U§§Xª¶Z¬ÀRª½W¨µO¥¾V ¶T ¸Q£²R\9e­O¥¯C¢¦A¢©H¨¤G£¢K£¢;\9a\9c:©°D¤­D ®6§¤>\9d¡;\9c\9bJ¢ D\95\9dC\95£E¦«5\9e\9bC\9d\99C\9b\9fD¬\98A¢\90B§\900©\842«\907¦\8a=®\9a>»\8b3º\9a@¾\90CÄ\89B¾\98:À\9f:¢A½\9b<ºªH¸ª9¥¢N©\90I\9b\94D§\8dI­\90C¤\9bM¢\8fD£\858¡\8f?\98\87D\92\8cB\9a\85C\94\92A\8d\90>\88\8dP\90}O\92\88K\89\8bE{\95?w\84>z\90=\87\91>\84\9dC\82\96Ez\92>~\8aKw\92Sx\84I|\93Dv\8b=\81\93M}\8a@\83\85A\81\7f=v\83@{\8fA\84\97B\8c\91?\87\9a7\8c©>\7f«8~ª<\84¯?\80°4y\9c=x\93Eu\9b>r\908w\992u\9e5q 6n¡B^ª2d£8W§Agª:\²8`¶6]³Gd·Gf¶@m³Al¸@n³Ej¾@k¼Bo¯Jm·Mq¸Qt²EoªKt¯Bx¨J\8bªQ\7f«W}§M\8a±Y\99³R\97­Y\9c§W\91¤]\90¤X\95©_\91 k\95£g\9d\94o\9d\96w\9a\94u¤\8f}£\85\84\9a\89z¦\93\82 \95}©¢{£\9e}µ\9fy¸\8d\81±\86x°\85\85º\8e\92³\87\84²\8a~²\93\84²\90\89º\86~¸\82\88«\86\87³|\81¬\87\85©x\88¬s{¤q}Â¥f\7f«r\82¨^\8b¨\\81\97V{\99XyÂ¥^\8a¢R\89Ly\8bL{\8cT\81\85M}}BpzDo\84Fk\81Px\86Rq\8bUw\7fXqxRtoSxucw{atz_z}a\85\88e\80\84ay\82ewpykm{p{yrsppblvmnlkuvwstr{qq|ne}pj\80th\80ug\82xk\88sc\83yl\8f}s\8eyt\8exp\9b\85n\92\84x\88\83p\8c\89e\81\90h\83\8fe\8d\82g\8ex`\97xj\93\80]\95\88_¦\9b`¬ X¤£O¢¡I¯\9dD«¡;±¦E¾§Jº®I³«O·±P¾®N¬FΩDÉ¢=¾ BʦDÓ DáM¬LɯSÊ°QƬXº³M´¥U²¤L¹±L°²R¤­W\9f°U\9fªM ­Q\9e¬S¢\9eP£¥N¦³R¨¯W¸¸T·³`²®Z¯¼Zµ¾QµºV¬´X§½Q¨»N¤ÃM¦¿L«¾J¤·O¦´Q\9c²Mª\9fP®\9dG¢£>\9c¡<\9e£@¤±F¡±>\9a«;\97¨@\9d\9dN\95\9dO\9c¡?¥­F©¨;\9c\96?\9f\94A¦\9fIÂ¥\99N \98=¢\928«\8a;¢\8c7¨\8f@³\937³\9a9»\970¾\8e0³\95?º >Ã\9f?À\99H´\96C¬¡9®§<¤§@£ I¤¤D¨\99F¡\99C§\9aG\9d\95>\9a\857\9b\82A\99\85K\99\8aO\95\8fG\94\86O\99\89J\98\81Q\8a\81R\85\7fH\8c\89J\88\89:w\89;\82\92?\83\96<}\937v\93Bt\96D~\8eMq\89Nm\8cHm\96Gr\92F|\95Hz\87Dw\89N|\84L|\7fFu\86H~\86E\88\94@\88\9dE\82­>\86ª1\89ª0y£/z¨3\81£:w\97:u\924u\932p\99:v 4p£:\¢5W\9f6X\9c>e\9cCd¤9`ªB\±9f¶:d¯Fe´Ij³Ce»>j¸@m»Bf³Dd»El»Lw½Os­Jt®Bv±G{ºQ\7f¶S~³W\83³V\82²P\8fªY\92´[\98¯[\9aªb\95¡f\8f¢i\8c\9eg\92\92g\98\94j\9c\8ek\9c\8eu\9b\95o£\8bt¢\91\7f\9f\97\85\9b\9fx¢¥w¬\9c\7f® x°¢wª\93\80­\8c\88¯\94\89¦\92\85¬\88|²\8ew®\93x­\85u©~\83«\83\85°\7f\7fª\88|¡\80\80\9b\80\85£p}£n\86\9fm\86\9ed\86\98c\82\97V~ V}\99]\80\9bY|@x\8d?\82\8aPtwFsrPi|@g~Dy}I|zEv|HiwWqjUtg\kq`pvTp{av|ay\85bp~_\80|bxkrousq}|iewd]uljpcvuqqt|y\7fkm{qfwqk||g\85|c\8ezb\85}p\94|m\96ql\90~i\98yn\93\85f\99\8dr\89\84z\8f\84g\89\87j\8b\86k\93\8bo\9a\82f\94qp\99\82l\95\8ci¨\92]´\9dZ°\9aR\9e\9aR¦\9eN©§A±¢AÅ¢Q»¦QæXʲKǶEά@Ë©?é<Ç©>ÃŒ\9b=É\99GÂ¥I¸±KúIÀ°UùXººU°¦N®±B°°S©¸W©«R¤®Y\9d²U¯®V©®L®¦Q£ªS¤°Z±²RÀ´RùO¿°O¶¸W¸²J­ÀO¼¶\¥ÅO¥ÀOǦN¢¹L¦´Rª´WªµU\97¬R¦±H«¢N£¥J\9c¤A©ª<°²I¡±<£¦@¤\9d<\9fÂ¥C\9a§L¤\9f?ª¡I§¥6¤¨8\9b\9bK\9b\9cC¡\95Q¤\97E¡\98G\9e\9aA«\8f?¢\9dB´\93=³¢=¹ 1±\9c5³¦>¹\94@½ =¼ ;¼\99C°\98G´¥=©«A¡«K±\9aD¡§CÂ¥\92DÂ¥\96I¡\8bA\95\8b2£\8dG\9b\8fR\91\8eJ\95\95N\9c\92O\93\8bP\97\83J\89\86I\85\8dB\8e\90G{\94A~\93<\82\8bC\8a\9a5{\919t\9cD{\90I}\8dOw\8aCo\8fHp\92Lo\90At\8dB}\85D\84\90Kz\82Ry\86E{\8cD\85\99D\7f¦>\80 <\84¬2\89®<|¤.x¯.v¤;n\9f;r\98>f\9a:i\991f\99.o¤0i¨2\ ;^¢>U\99;\«7dÂ¥3_°7b¦6e§9a²K[­@Y°>\¬Gj»?b¬>m½Io±Hu¹Nl¼Tk¹Gm´Bi¬C|µO\81¬F\8a­U\86µT\90µR\88¦W\8f¶\\9a®Z\8b±b\94±e\84¯a\85\9fa\8b\96f\91\92k\8e\9am\91\95s \96i§\92w¤\93u\94\92\83©\9fu¤§z¬ v\9d«s¯\98y¯\8d\80°\8e|²\97\87¨\8e\83·\8ez®\93\83¯\96{¨\90s¨}\86«w\82§\7f\85 ~\81£\81\83Â¥p{«i\80\9fq\80\9ew\8e\9eg\80\94h\84\97X\8b\93R\8b\98Sz\96]v;\86\85>y\7fE{\80HpwDtuHi}Ivu=vsCmjKhhTfnPohRsrOhtTfv[t{ds\84_m}Z{te{svwwvmowigyghxkouiozxprwqspfwtft{k}yk\7f\80a\92wd\93oc\95si\96~`\91~e\9b\81d\93\89o\98\8dq\90\81t\8b\8cn\8b\87o\8e\88c\99\88e\91\84k\99zi\97\89j\98\89e\9e\95Zª\98Z¡\9cW§£T°£P«\9c=°£G¾«JȧOƯSóFαJˤMÆ¥@à9˪9Ë©9áGȱB¿µH¿MÀ·V°°K¬·O«¸B«­A¦¯H¡³M¤¼O«´T«®W®¦T´\9dC´£@¹¯M¦V¹ºV¹µY¶µLîL¼¹G¼²R¼¹OºÂT¹ÅS¨ÂM±¹Y¦T°¹\©¸Z\9d²N¢²G§§G«¡I©\9bD¦¥A­°Dª´C­­<©«@¤ @ \9cH\9c\9aO¥¨Mª«Hª­A¦©H¥«D\96\9cH\97\97K\99\8dS \92S¢\8cOÂ¥\94G­\98G®¢=±¢;ȴ5¶ª5·¥2¼¤.´\9a2²¢<¾\98=Ã…\979»\9f>²¥:°©BÂ¥\9fEª£H¤\94R\9c\8fJ¦\8a@\9e\8d9\97\96I\9a\92L\96\8cN\94\8bK\9b\89O\94\92M\95\96F\90\8cH\8c\99E\86\9c@\8a\93<}\98;\89\9f5\84\97=\86\9d;w\96@\81\8eKy\90Ep\99Hr\9eEu\91Ir\91F\80\8aE\80\8dO\81\8bR~\91V\80\95Vw\96M|\9eA\83¦6\8aÂ¥.\8a­4\88\9f:\7f¢4p¬6m¨2nª7b\9b4h\997i\985m\972_¡=ZÂ¥4Z¤3Y­5bÂ¥:g§,a©-d©6c\9f5a\9d3]§BR¯BV³DZ¯Nd®Fe»Mg»If¶HvºKt¶Vo¹Qj¬Ij«Fx¦E\7f§F\82¦M\85°Z\82¨[\85©c\8bµ^\90·Y\83¾[\82¶Z\8c¯\\87¨h\85¢r\91¡p\99\9eq\93\9dl\90\96j\9c m¡¤q\9a\96z\9b\9fy¥¤q¨¥w\9c«u \9cw§\95\82«\9b\84¤\94\84¢\96\8a±\89\82·\83|­\89w¤\83x¬\83} {{\9f~z£\81z¤v{¡w\81¬sv®w\81ªs\84Â¥f\8b\94b\8e\96\\91\8cT\8f\96V\8a\8eU|C~{Fv\86?y|Lyq<ip5av5jx=msExuLnoHykPygSllHnpOvsWsnVonev{^mqlpsm}f}nkrrdshgvqbqevpuntxpisc|}py{p}pj\7frf\92~^\94uh\8cwo\94ym\98{n\8c\8am\93\82o\92\82u\8d\80h\97\87t\91\83q\91\84g\9a\85_\92wl\9fqi\95\85^\95\88]¦\8aV¯\98Z­\9eR\9f¡S©¢J·¡?±§>¼µ>êC¾«OÆ´CêQɬK¿¯HÆ°>Ó°7À\9c=Ì£EɯJ¾½KÆ¿LȦL°ºO®´N³®L´·F°²J®¦=¤³B¦¶U²¸V©¶G³®A¸­?¹²D±®O¼®XôböZ¸²V¼µ[¶´Zºº]ƾW±¸TµºZ¥ÄM¦¿H´¼U¯Ã\­µT´¹E²´N®®E¯°Fª¤>¤®E¡¦> ®CÂ¥\9cA¨¤;¡\9a?Â¥\9d>¢£@§¨C«¦C®©EǤ?Â¥\9c?\98£E\92¡O¦\91C\9e\91F¤\94F«\94J®¤H¨\9e>®¡'ª¢*´+±£3¯\9b1ª\97@³§>¼\9f<³©=¹¤>¬¬9¨«:¢¥@®¢@¬\9eA\9d\917\9e\992 \8a<\98\9a:\9b\99E\9f\90< \8fD\98\99G\94\95H\8f\89>\86\8cF\91\95>\85\90B|\9bA\8a\986\81\956y\9a;z\9eIx\9c8\81\978s\94Bm\98Fy\93G\84\98?\81\9cH\88\9eM{\95D\87\98L{\9fB}\94M\80¨G\87¦7\80¤2\85ª>\8a±:\84¦)q¨/z«9h\9b2c\988f£=n\9c<iª:j©-^¨2Tª@Y\9e1i­4]®.[µ*_¡3[¡7[­1\¢:^¦9Y¦9f¤Arµ?gµOfµLx¹Rt±FsµCjµOg¹Pq¨Hl­Jp°Cr­K\81¼Zx§O\88±_\8dµW\95¼P\82²W\84±V\86°f\8aÂ¥r\89\9dj\8f\9fj\9dÂ¥l\90ªf\9f\9cn\95©u\94¦s\90¢q\9c¡l\9b\9fp¡\9fp\9c«o§©s­\9f|\9e\9dv\9e\96{§\92\83Â¥\8f{¶\8bt²\8bw«\86rª\82}Â¥\8ar\9e\81\7f\98\80\80\9fuz¨|\7f§stÂ¥s\88\9co| h\7f\95e\87\99a\89\92[\88\95Y\83\97Tu9h\80Ar\7f=u}@yv5st3jq>q};ryF{mFziGwoOvnX|iO|ePrp\oif}d`~glvkqoe{vktyhmhjqeawaholouygizklzrsyj}tc\7fpf\88\7fm\8d}h\8bua\8a}i\95wd\95{e\9b\86l\94\82t\9c\89k\93\8bg\8f\86g\99\8fv\9f\84l\94\85`\99wb\95td\8c{a\92\83c\94\91]¢\90P£\8fM¡\92D¯\98Gµ¢?³«;¿°AêF¿²L˹AÈ®FÇ´OèFìMΧBÄ\9aLÆ\9bRÀ¦PÄ´R¶ÃN¹ÃP·¸G¶µE¶ÃH´»D±³;µ©<¬²A°°H©¯F²´H¾°C¿§<ȤMĪUÃÂ¥[Ȩ\¿¯S¸«P¾¨R¶°\įbóY·½`±¿\«½T©·M¯²F·¸M¹»Gµ¹JªºD¬«E±¯I§¬F¤¦J¨¨D\9a\9f>\9b\9eD\9a§GÂ¥\9f<£«>¥®/Ǥ2°°<³¯A¥¤; ¬H\95¤N\9c\9bB\9a\99?\9a\96@©\9d>¯\94C¨\99D£=®­(±\9d4¬\9d/¦\997§ 7¢\9d@®§@²\9eC®¡?®\9fFµ£=°\9c:«\9f;²ª4£:°¡>®\98:ª\949¡\930ª\8f4£\959\9d\8eA\9c\94<\99\92H\97\90E\8a\98@\8c\98I\82\99N\84\8dD{\95G\7f\8f8\87\9bG~\98G\82\988\82¢7w¨Hs¡H\83\95E\87\97?~\9dB\7f£L\80¨E\82\9fAv\98?z D{¢J\81§B}µ7\88¸=\8d¸-\80¨-{Â¥,u /h§=k¡9a¢3c¦9i°8cª)U¬.Xª;YÂ¥<c¤;W©:V¯,Z´*W®4W¬:\­5Zª?b\9f?b­In®Al²Ir¹Pq°Dx¬Ci´Dd¶Og°El«=q¢Bn¨Ny¬Yy¶W\7f³W\80®I\85³Y\88²W\82ªU\82©S\86«e\8d¨n\90¨h\9b¦a\9f°i\9dªg\95®l\99Â¥t\96\9ax\91\9fr\99\98n\96\9fl\9c¡m£§v¬¤w©©k®¨j¨\96y®\89\7fª\8dwµ\8cz±\81}£\8e|¡\8bv«\85z£\81z©{|\9d}{\9d}|®{~\9ex}\9fg\85£b\81\99`\81\98\}\9cb\82\97h~\90_}9w\841g\82;o\812uw6ny+u{5rk:y|;xs6yjD\82hGubH\7fiPvfU}ePwbdoa^qe_u^ulmwu]w}a}y^uj^wuasqto}dr\81mi\82fw{n}yb\7fid\8bqp\89\7fo\8a\84k\86\89m\87\86i\96vj\8dvo\8a\83r\8d\84v\96\89k\96\85r\8e\8em\8d\8de\94yg\8c{_\8dzf\9a\80d\8a\89^\99\92P\9b\8aR\9d\98F\9e\8bAª\9eJ«¡A»\9dCɧHʲH°PÅ»Iέ=άMŬBˬBéMÄ©GÄ«VβKÀ®EðJýKÀ¾I½¹EĶG¼´G²²;ò6´¸Cª¨E·³Aµ¥B³§D¾¡FïBȨU˶RʱSéJóW¸¶V³»S½µ`½µU¹·V½·^ȁ\¯¼V¯³IÄ»H¹µI¼¿M²²K±«?¨¯@¬¯K°±=§¥C¥®8£\9e;¡¥@¦«9\9e§.¦´5¦¨;»/©\9e2¬«;\9d¤D\95£G\96 @\92\9b9\9f\9f;¬¡8«\9f@¢\9aF¦ 4¨­'¤©&®\9e0¤¥2\9f©5¦¡-²¨0°¥A¦¨;²£6²²D­°B«¤5ª©=°©<¶\987±\9a5¬\991°\943¦\9e-¥ -© 3\99\96=\9d\979\96\9bM\91\9dK\8a\99A\89\8eL\85\97P}\8f>~\968w\94<y\98A\7f¤9~\9bE\81\9d7\80Â¥9\81£9\7f¤9\87\9dJ\81©A\88¦I\84Â¥G\83­E\87\9dEv¦7\82®7t¦?\81½3y®?|­2w¤2{\9d4n 7t±>`±1Y­4a¬8Y­-R¨/X¦6Y­9`¢8b¯7\±)c¯7Rª?_«7gª7d¬A_¬Fr§Gv­KrÂ¥Ju±LvªEo´Km»Ni´No¼Bv­<pªGy²Kq¹Uv²MrªR\82°N\7f¸G\88³R{°U{¯V\90°]\8a¢k\95Â¥a\96§b\95¦i\97 r¡­r¡¡r\9e\9bs\92\9cy\9f\97r£ p¦\9fm\9e«q¦¤g£§b©ªk­\9fy\9f\9ax¬\95t¯\93l¨\8fx®\85y¨}hÂ¥zm\9cvz¢\80~\98m\87£u}£{\83¨o\84¢d~\96b\88\9cm\88\8fi\84\91W\82\9cV\80\8f_z\1ei\7f%m}$wx-w\7f5\83s-~v*{r8un?|t5ti5|cD\81bJw]HzZLxbQx^]|j`oilubksdyyXwuX~oXvqasw^n\7fkw\7fou{kzxpv|ey~f\84sr\82{o\91}q\94\87s\8b\83r\86}h\87zh\94ze\91|s\96\85x\93\84q\95\81w\93\86m\94\83p\8e{e\8fyh\8c\83\\8c\83`\91\85R\8e\94Q\9c\91N\9d\8cL«\93N¦\98Q±£H²\9eDáLɪKÈ´D÷DιAÕ°IέIæIêMîQÉ©JôCůAøIÀ¼LÅ´RÊ°IìGøB¸¾:¾¾7²À;°°;¸²:½¤D¼¨I¸¤LÅ«FòK˱CÇ°KþR˼QúR¾½YÅÃUùY¿¿[¾¿W¼·N¿½VÄÄMÀÃQ·ÂO¸µR¸±P±G©´F¥µ?\9f¦@ª¥5££1ǻ-\9d¢/\9f©2\9aÂ¥9\9a©6\9dª2Â¥\9f,\9f /¦¥1 ª0\99¤? ¤A\98\99C\95 A¢\99@\9d\98;¨¥=®¡3«¦/©§*§¯5\9d¦1£©2¢\9f+¯¢+´¥6®«8­¶A¥°@ª­A­¬@±°:´¨:±¥?¬\974­\927®\912Â¥\926  1«\959¤\96A\9a <\9e\9bE\9a¢H\94\9c>\87\96C\88\96K\8d\99Q\81¢E\82\9fI}\9b=\87\98?\85\9cB\8d¡F\87Â¥;\80³=~¯>{¬F\82§G\87²E\86°@\81²C\84Â¥9\83Â¥6s¤7z¯0t´5k¯4i·:g®2pª+l¶2m³5_³)[¨,[§9T¦=a ?\ª<Y©<]¦5W®6_¬7]£A\¦<f¡3e¨5j¤9m§>p¬Lm¨Lj¡>m¤@l²Dj³Gh¼Eq¸As¯Kp¶C|±By»F|¶It¯Hw±DrµB|µJ\7f´P\87°Z\80´a\85¦Y\93¡`\91¦f\96\9bn\90¡q\9b¦k\9b°h\97«j\9d©k\99\9du\9a¨n¡¡k¦ q ªn£©h¡±j¡²f£¥p\9e\98jÂ¥\96f \8cg¢\8eq§\80n©wj¡ut\9eus\9axy\94n\82\9ep~\9fo}\9aky¢q\86\95f|\98h\82\8fZ\81\8eY\82\90Z\84\96W\80/iw8eu8l\818ts6l|?t|3muCgf9giAsa5qbDycE}gG\83eFnZJp^Vr^_pZeidqldkw_ynOitWjehom_usp|utuwk\81|l{}n}|t\87qx\8d\83r\89\83i\82\82n\88\7ft\8f|c\8byd\8ayl\97ol\99wv\88~p\91}f\8f\89n\8f\80n\89}f\8f\83`\8c\8f[\8f\83Z\96\8eH\91\8bV\9c\97I§\8bI\9d\86H©\94>¨©Gª\9a>¸«KêLDz>ºAó4ŸEÊ®RçDÇ\9fL¬BįKÀ²HÀ°AøL½¶I¸¬OðKɪH´»6º¿C¿¼:ºµ>¯­:³¨B´«DÀ\9fIÃÂ¥Mà>µ§=¼­@ªS½¼G»ÃB·ÃO¹ÄVĸZ¼·^¼QƶPIJVøIÿJ´ÀO­¾G¶µG§°K«°R\9f°H£¥:­£?´£;¡¨5\9f *¦\9e.¥ 2\99Â¥,\9bÂ¥7\9fª:³¡,®¡-¥¤:\9bª9¡­: \996¨\9f9¢\9b?¢\9fA¨£9£°<  <ª£1°©1°ª>\9f¤9¦§8¡ 7¨¨-¥©-¦¯4\9e¯3ª´3§ª:ª¦C¶¬5¹¬>·\9e<«\98;¶\9a5°\9e9¦\994¥¡6©\9f5¤\9f>¢¨B£¤@\93\9a?\94\98C\87\99K\8b\9aG\7f¦D\85©H\87¦M~¦?\8e\9b?\8f\9e6\87 =\8e D}§>\80ªC\85®@\82Â¥Q{¨B\83²;\8a¦<}©9x¯8\81«At¹@t¹<p¶1d«+n¶'h®/t³'i´+m±2e¢3c®-`µA_¦<a«6V§>Y±9c¶<a³Ae²?V·;c¶@X¯>]¦:jÂ¥9i°Lw¦Ph¤Jg­Dj§@cºId¸Ls¸?i²HlÀEsÄ;s½Fp´Jz¶Ex»Ow¨@w«J\81³P\80®V\85§R\8e±[\8b°[\8d¤X\9c¤\\99®`£¤n\93°_\94«m\8d­i\95§}\97 n\97ªj\9a§e\95Â¥t\9d¦k\96ªk\9fªl¢\99l¨\95eÂ¥\94m¦\8fi£\94u\9d\83t\99zi\97\82h\9d|r wz\97}|\92tp\9crs¡pr\90dp\90b{\91`t\90aw\8e_\84\9c`|\94S}1mt;ct4cs6bu:p~?ru<mhBckBjb<r\<{^6ya>sfMz`KkQRfMPoIRtVanTeeVlo]ovUegchfbgsjmxm|xo\80ur~\82m\87\80n\86\80f\88}n\86\84p~\82pxyo{od\89yb\8e{a\8bxe\94rk\90vj\8b\81m\89xl\93~k\99\83]\94\85Z\9a\89e\8f\8bc\93\8b\\9a\91O\91\8dQ\98\8fU¢\87W\9f\8aG©\9aH¨¡9¡¦:«¦H©¦M´¥C¼³C¾´8¾©=»®IȬQŤHäIìAˬIȢHðO¹°H·¨?¿©D¾´@¸¶:º³>¶²>¾¹Dµ°E¦L´®G¼°;»¡<¿¡@¶¨>±±J¶ªLµºBµ½DÀÄSººY²³Nµ¶T¹´PõWľI¼·Jº¹M²ÃH´ÃKª¸C¢¯Q¥§Pª£A¤¡9­¬5¯¨B­\9a@¡\9b5¨ -¡§4¦¡0ª 2±\9a:¯¡2¤©A©¦B¢®:¢¥6¬¦?¯¡? \9e=\9e\9b4\9bª(¥­,¬³4§«9«®8ª­6¦²>§¥5°¥5ª«9\9f®>\9d¦:\9f§2£¦7§§6µ\9d?¯\9c7³§6´\95-®\924«\95;°§1Ǭ5®§=¥¬>\9c¬@\94§?\9d«E\96¢G\99\94G\8d\9cE\84\9fN\8bÂ¥L\84¢F\7f\9eN\8a\9fI\93\995\8d\992\89\9c7\84\9eB~\9fI}±?\83©N\84\9dO~°E\83±@}¯B\80²D\87¶>~¸;\83»?~¶:v¬2n¬,f¯'f¯(k§(p®&k°)_ª(_®1[³7cµ4b°AY²2\³0f·;bº=[º0^·3T±6Z±<c»;l´@z´>v«Dv¤KhÂ¥Sc¬Fc¶Ir¯Ht­Et²<iÃ…;dÆ:lºElÃMv½J\83¹B\80ªK\80´K~®J{£K|¤M\81¬X\89¯R\8b²V\92¤Y\9f²a¢²`\9d²e\8eÂ¥j\90\9fp\91Â¥u\9d¤n\9c§n\94«n\98 h\9b«d\8f­m\9c¡p\9a\9co\9a\97p£\9aq\9f\9dj\9e\98g\94\93k\96\8cl\96\87z\9fty\91sv\93~w\91{y\9csl\8ehq\8egk\8fji\93io\9aj~\9c\~\9c_\81\92]\850fo7Zo@ek4jwEaxJcp<fg9_n@iZGj^6nT6w^Hi\PoVCeRGaLPcSWlLc`Z`jVp`YugTcgVnlfmvbcphwpe\82xk\81sd\89}i\88v`\8c\7fi{vn\87\80d\84ypxgn\83rc\89yf\8fn\\92pf\95vd\87\81c\8bwi\88\86[\92\88h\92\87]\89\84g\86\90g\8f\87Q\99\96T\9e\97T\9e\88K¬\8cJ¯\95<°\979«\991­\9e<³\9c;¬¡?¹\9d;»¤5´±=º²D³¥K¾¡MÀ¬D¹­NÀ¢L¹¦I¼¥SȢH²³B¼¢=âFȻ@¸¦9¼¬=¼¥@»«<¿ªK¾§:°´=¶³;¶«Cµ¤;¼°BçL·¦C½¬M¸·J³ÃU¸¾N½¯X»­G½®RÇ´ZÄ°V½±T¾«D³ºP°®M¦©? ¨B®¬I ¢G§\98?¡\9d?ª¤C§£?\97§6\9f 8¦¦3¡£7 ¦7 £:¯¡<¡\9cG ¢C¤\9eD¢¤<§¬B´¥A±¨4¤©+°¡%³«/´³7¦´>ª¯9¨ª7\9fª8ª®2¤°>¤¤C¨\9e?¨«/©\9f-¥¡1­¡<±\9f7²¡5Â¥;°\96?¯\8d3¬\973´£6ª­8§¡=\9e¯G¥²E ¨=\9c©?\9f¢J\91\92B\95\9eL\80\9cF\87\96@{\97B\89\96;\82\9dH\81\9b8\80£2\86Â¥>}¬B|¡8\7f 9\86¬<\80¤Q\89£E}­J\80­F{¸A|¼F~´Gx³G\80²>s¿2u¶+p­,d¶8h¯4f¨/e¨5k«/Z«4gÂ=b¼2l²<Z±7]À-QÀ@`³:\¶7[À6T«C\³;h»>t²Ep¯Co¤Cg£Sb¤Jl¯Hb©Am¯Fh·>lÃDlÃBv»DmÄ>nÃ…?r¿Hs²Ly¸I\82ªR\80°R\7f©O\88¦Sz³Q\7f¨M\8f¬Q\92ª]\96´W\9e·c\92¶c\89¯q\95«i\93 v\94¡l\91¤l\8d¬r\94¦i\96¡q\8a®c\8c£k\9b\99e\92\9dgÂ¥\91n¢\9cr\91\93e\98\8do\8c\92i\9f\84j£\7ft\95yt\98zy\96rl\91yq\91wi\90me\90ut\9bkq\95bw\94e\80\95Yt\93`|3ct7]n5Ys>`t?UhGYbCai?cb;gXGlS:s\<nYIaODeUJlO?dPLdQYZMZbPa_Zbbcie`do\ip\jm_jvbxpk}qfvsh}|_\84}Z\80~\\7f\82\\82uc\86wi\80mj\81dk\82k]\90p^\8fwa\92\7fV\84wZ\86\86Y\83\83W\8b\81e\8c}a\92\8bZ\88\88_\88\93R\8c\96R\9d\99T¤\92Q­\96K´\92>µ\8eB°\8e:§\9a>©¡3ª¬:­¥8«\9e1·¡6À«?¼¤GÄ©>À¬@êE¼§MÂ\9fW¼¢Pº©J´¦D¶¨E´¢;¯\996²¡8µ¡:À\9f9· ;¿¢B·¨>±«5¹µ>µ²:³¨A½¬?ȤBº±D´»Q¸·R¹¼L··Q¸«FëK¾°F¾²Qº±S¿§R°¦R°®F£¦?£¨Iª¨Mª¥F©£H¨\9cC©¡F¤¨>¡£1\98©4\91­9\99¡8\95§0\9d\9c9ª\9f@§\99B©\9fI¢\9dK¡¨A±©A«¥8°¦1³¦1ª¨)ª¤ Â¶Â¨$¼­3³°2±¨,¥«.ª¦>©¬<­¨7­¨@ª«3¡ 1¡\95;©\963¹ 0¸\9b=¾\9eEÀ\97>´\9fD¹\96Cµ\96?¢:«\9e?®§8 ª9£§E¦£F\9a©>\92¡=\8c\9dE\85\96@\88\9cE\89\9bF\82\99<\82\92D\8a\99A\89\9f:\83£=}Â¥?\83«8\86Â¥A\87\9f=\91ªD\8a¨F\84´L~±Ds±Cv²J{·Sv²L\80¾L{½?pÆ@m¾5tÄ8k¾8k¶;f®8f·2n²3`¸/bÀ5b·:i»:^¼3VÃ5Xº<S½?QµIR¹J`«Da®Bp®>r¶Ao¨JvªPe¯Ie¬Je¬OeªIm»Ii»Geº=rÃ7uÈEsÃGrÉKm½Em½M|¼P\89µT\84«H\83¯G\8a¬W\80¨N}­U\8a®S\8d¸_\8e³X\9dµ^\9d±Z\8b¹f\86´^\89ªg\7f¡b\7f¢n\86§a\87ªb\83¨f\8e­j\89Â¥h\90Â¥^\8e¢h\98\98i\9d\93b\94\8el\96\84e\8f\86c\91\83f\9b\86k\90|q\92yq\8btu\95\7fh\9c~f\95|h\9atq\94in\9b]{\94bv\95g{\86[z3jl+nc.bk3buAZh@T_B]V:Y\BfYGaTAe[@h[E[R?bJ:`SCVQN[^GcVM^\[VSecXriZajTal[eiejqajsmnthtvb\7fn]~\81f\86\7fbzuY\86y[|wY|te\85jb\8bbd\91wi\86s\\92t^\80s[\8c\83_\84\80N\8cxU\80|V\90\87\\90\85^\84\91^\8e\97P\8f\96T\9b\9aL¡\8dR§\94=©\97;·\9b?´\9a<¨\979©©5²ª.¸¥,¼¦9±§:¯\99N¹§9°¥?Ã\9f=´¨E¹\9c@µ\9cBµ£H·¨B®¨Kº¨D®\9b:­\9a3¼\985¿¢7À\9eBà7Ã¥Aá7¹±6³­3´¬7¹«?»¦<ȤK¼§N¶¯L·®N²µK¿¸V½ªG¾®DñN»©Iµ¨X¶¯HºªC¸®D´«C¸§Aº£E« I¤\9b>¨­>¬­9£´9«³2\99\9e;¡¤5Â¥\9bB¨©;\9e¡A£\9f4­¤>®¡J® 9µ¥4´\9e:º©4­¥1£©3­©'´¡/¬².¶«<£¨6\9fª5\9e¦:¦­A¨¬?·©:­\9e=Â¥\9e8¬\989±\8d6º\9a<µ\96@·\9bA°\95G°\99@¼\9b<³\99B§¢A¥¨6¯©;¤¦4¦¬7\98¬5¡¨8\9c¨G\9a\98I\8d\98L\8d¦@\8e\9aH\89\9d?\84£;\92\9eB\8a\97E\7f¡;\84®>\8a­2\7f§=}«@\89¤=~¯F\80´P~³G\85¹F}²L\81ªP\80µA\84»=vµB{½An´8yÃ4pÂ8wº5n»<wº<h»2o²4]³9g¸:f½:gÀ/ZÃŒ0NÃ=L¾<U¸DQÆC]¿?i¹>o°=t´Gt¸Gw¦Pq¦Oo¬Nm¨Bn¬Dp¬Ij¶Bs³@o»;n·6t»MkºOi»Bu¼R|¿V\82¬O\86´K\81°F{©\\81­Z\84¬M\89µO\87»O\8b¾R\95«W\8e´Z\92¼h\8b»e\94¸n\91©k\89¡e\8d¤h\82©g\82­_\80¬e\8f£k\8e\9e]\94\9dn\96\90m\98\8aq\96\93m\91\86h\8f\8cd\92|l\8f\87a\95\80c\91|q\92\81g\96ym\99\83g\90\81p\8dzk\8aoq\8dru\8b`z\91a{\86]\81.td/md7mg.\n+\]2\X8RT<VSG^WFcX:_];abB_RGXO>[UAR[GTdEZ\LVRS]PdiLjfTrt^iq]ordijhkpakvapiapl`\80{\\80\81_\89re\84nY\86k_\7fn\\8cs`\90g`\85p`\8bue\90uh\8bs`\8au]\8d~K\82\83I\81~T\87\85_\89\88b\88\7fc\94\87\\90\92M\98\94L\94\91I\9c\8aIª\88?­\97E°\9b;§\9e?¦\9f0­¡/´¡6¹\9c5¯¥B²\9dCª\98B°\9b=° @· >»\9cI·¦Eª£;ª¦B®\9d@½\9dJ¾\94K¯\96=²\9eG¶\9cE³\9a;ȴ9¹¨3Ĥ<¿£8³¦8¶\9e>â<ƬFÄ¥GàE½ªI·§M°ªV·ªJ¼´M¿¨Q¾¢J¶\9bQ¯¤L®°J²²;¶¬C¼¯DÀ¥B»\9e:±ª<§¥?±©J³´C©³=¯¬A\9f¡;\9d\9a8¤>²¥=®\9d0¦¤4¬\96B­\99B¤¢6§\9e4­¥-»­*¹¹/¨µ.°¦-®§5¬­6®©7¨©9¥¡>¡¬<¨°E¨¨3°¦/§\9c1Â¥\996°\9dA°\92Bµ\98:¶\99B®\9c<ª\96D¼\95<¿\9c=¤9³\9f?µ°<ª´;¡ª8¦¥7¦¯3\96´:\9d£E\9a¡G\8f¡M\86¢I\87¦D\96\9fA\8f\9f@\8e¢F\84©8\89\9f5\8b­8\82®3z§C\81°B\88«E}¯My´I\86ªJw®Rv¶T\85²J\84¨=}©B|¶D|¿:v¸<\84·?\80Æ4\84»-x½/p¿0q»<r·2g·6b»,`ÃŒ2cÄ-`ÃŒ1ZÊ/NÃŒ0IÆ.NÂ<\¸3a³9p­Km¬Nt®Uq±Rj¢Uj¤Pe§Jn³<i­Gp±Dqµ=t¶6v¹;jÀBr¾Dj²My·Sw°M\83²D\82­H\80­Ru©P|©R\88£V\83®U\8b¼O\93¯U\8d²_\94¯j\96¸d\99¾k\8e´e\95²`\8f e\8a§h\8a\9eZ\89\9cZ}\9df\8f\99k\91\9di\8e\9dh\94\96m\95\8fn\8d\8do\86\92q\85\85n\89\87c\91}a\89\80h\8a}_\8fx^\8a\82`\96~j\92\80j\90ym\86xe\89if\86cq\8ago\88]x;q`;te3m^1Z^.ab6WW<WO2[W;b[L`OHaT;S`E`TAaQ@WTIK^CTUGZMRZX^aVaYUgab^mW`hhejjcr\eubhvcsy_pj[{sV\7fvR\80m`\7fpV\83hb|k\\82th\8dm[\8fw]\88v]\8agY\8bfh\86sR\88xN\80mX\83uU\8a\81`\8d\84[\8e\89]\93\85S\9a\87H\97\88Q\90\8dA\99\8fB\9d\8cD­\96G« @\9d\9e8©\981°¢,·\92<®\96:º\9cG¶\8eF¸\929ª\8c9·\9a5« @°¢;­¦E¤\99K¥¦@»©L·¤P´\96<µ¡Bµ\94BÃ…\9eB·\9cAŦD¿\9b8Ä >Ä G´\9d:Ä\986á@À\99;ìC¾¨G»©KðW©ªMº®Mµ¯Mº¢I½\9eI¯ªNº§L­±F³§?¶«1·²8º\9e3µ\9d3·¡=¬\9f>®µ=¸«=¬«Eª­I¦¤Fª\9dG²\98>±\9f@±§4®\99+¦\9b/ª\958§\94:«£6¨¥-¯²2¯¨,¯®5²¨,²¯1´«0·µ9®®:¬¤4¬¤1©®G¥ 4°«<¨\9f8 £3\9e\98<ª\9f=¨\9c@ª\9bAª\8cB­\8a=ª\9b=¿\99<²\9c:¶¨B¦ªB¬¬7£¤?\9f£6\98¢6\98¨2\9c¦B\90³P\89©Q\90Â¥P\89ªF\9e«E\98©I\87 E\8a¤G\89\9c7\81¤7\8a²:\8bµE\82¼Oy®C\85¬G\83²Ky´G\80§F\86·N\86µQ\89°;\89·A\8b¶>\87¼8|ºDv¸<\86È7\7fÃ…5}Ä9{½Ax¿>~ÊEjÉ6mÄ>kÕ)`Æ(\È7`Ó0XÃ4WÊ,YË.aÉ:b·;\»?jºKkºNqµUmºIk§Nt·Er±;n³Do©:j°6e¼?oÂ6oÀ=hº<e¬Om±Go®Yw«Tt«M\80­V{²M}ªH\8e¨L\90¶I\86ÂO\8c°N\8b»\\8a²Z\95»Y\97®U\89®X\8f©X\8eªZ\8b¢_\89\9ee\83¢b\88\9c`\7f£c\93\9cl\8e\9ec\90\92i\87\8ce\91\8dh\83\83e{\92c\80\7f_\8f~b\85~S\93\84R\8b\80`\8azd\83\85g\90\80m\87\80g\8buh\82ee\8bab\8e[l\8aUtBgo>nc0pY.a^4\];VS@XP8\Q4USA^MJZWBSW@UX?YP;[ZFSXINSWZOXeSZ^Ud^c]]gh\_cifjeanmZmt[ktTluS{mS\7fuW{qUul[zmW\7fz]\7fy_\83z]\88wg\96yc\92i`\8aj\\91f_\85jT\85iT\8ah^\82s_\8asX\83wZ\82yO\89zP\94\7fG\93\88J\8c\8aJ\96\95?Â¥\8aG¤\90Bª\98H£\97@£\96=°\94:³\99F¬\8dC°\84I­\89?©\82=³\894¬\8c2Â¥\97:«\9eH \9fE\9f\99E­\9cE±¦=¾¥Eµ¤H½\9dF½\909Ã\91:Ã…\9d7Ã\9aA¿\91CÈ\93K¿\96B½\9aF¸\9eK¹\97@¹ LĦMÀ²T¯U¿¯P±ªQ¬ L± I¬¡K±¦?¶¡7³¢@·¬6¶ª9º«4µ£,µ©+¼«4¾¡@³¨>»¦A¹¯G­¡N¨¢E® L¬\9cD¸\9b;¼\9eC·¥>¹\9c2¶ +¯\9f5®¥;²\9d5²¬0¬¯8«²,»¯1±¸4¸·)¸­2³°-²¶2±­*±¢6ª¡:®¬9­¦@¦¥?¦\9b6\9c£>\9f\9d9\9a\99< \93F¯\8bE­\8f@³\98K²\9fDªªG­°Cª´E¤­>§¯?\9c¤5\9f¡1\92¬;\93¸=\8b¶J\8b·F\90­H\8f®B\94²D\8f°B\8e¨?\8e©H\8d¦C\96§E\8d¯;\8a±<\7f¶L\87­P\85³K\81µG|·B\8b¨C\88©K~­R~¯G\88·B\88³;\88¶5~¶=|¸2\83Ã…3\89Æ>\81ÆD|ÃL\81ÃŒD\80×I|ÖBxÔ3hÃ-f×5[Ñ/R×4WË/aÔ.aË+V¾4XÂ8XÄCV¹FW±Pi·Jv·=sº>h¼4j±;d¬<m²?a½@b¾6l·1nÀ5i»HfµI`©Hc§Vo«]r¨Rw¦J}®P\86³S\87«F\8e³D\88¸G\90¹F\89»Q\8b¼L\91¼X\98¾W\8e¯R\95²S\8cÂ¥]\85\9cZ\81£d\80§f\82¢a\8b\9ea\85\9b`\89\9ef\87\9dj\83\8fh\8a\8df\84\8bc\81\8f]\86\84\\82\84\\8d\8b]\8b\8aT\81\7f[\83\81]\87\85_|\83d\81wb\89zd\8epf\87bb\90\q\88]p7rb:d\-eW6^h3Z\-YL7SV9bQ4UM=^S<QG6QO9WXGYQNKPMS^VLLXOKR[\^Q`a\cVZ]_jhWjdjq]gi]fp]osbpqTukPthOzkM~jW\7fpW\7fr]\8dlW\8el^\86t^\8aqh\90e\\8dpU\90rQ\8bfM\86sY\8atY~q`\87n_\83xR\80\7fH\8a\83V\97\81C\97\8aJ\90\8e@\98\909¦\8aDª\96E¢\88D \8fH \8a>¦\9d5¡\92C\9f\8e9§\85<£\813©\8a1­\901¦\93;¨\8b=©\91=\9b\97>\9e\9f8¯\98C´\9fA¸¢Eµ\9c@Ã…\9a@Ã\9eB¹\94:Ã\957Â\8eBÇ\98F¼\92EÈ\99JÃ¥B¼\98KÀ L¶\95;¹£I¼ C¸\9fI·\9bT¶¤J«\99I±\9eM¸\9fM¸¢F³\99C®¦D¶£7½\9e:º\9e6­¢2¿ª2´²9¸¨3¯¬>¹±B¼§Fº¯<®¬F³ H­¡B¹\94D¯£F¸§@¿¡2°¡3§\96(®\91/©¢3µ\98-¶¢9¹¤'í2ij2º±*¼«*¼°%º³)¸«:´­6©\9a6©\9b<¬\9e:­\95D¦\9d?­\9e: \9a?¡\94@Â¥\88H¦\91Fµ\91J©\9f?¨\9d= §>ª®<£²D¥¦D¦¨? £4\9e¤<\98·=\98¦=\98©K\94¬F\96¢L\97±:\9b´C\94©?\86 K\8bÂ¥=\8f¨D\9a¬B\8a­9\88¨K\8f½B\8c²L\88¸D\80µD|ºC\87¶K\8c¯F\7f©B|©A\8a¬E~¸={·@{³1|¼?|Ê:zÉ@|Ã’>\83ÆCsÉFrÃ…>zÚ@pÚ9gÑ7^ÃŽ6dÖ.cË,SÃŒ5ZÃŒ3fÃŽ3^Â3ZÀ3a¿BUÃAj´Dl½KlµAhÀ>f´7[³=^»Bi¹5fÂ6iµ8lÃ7p¿;q¸Ek½Kk©N_¢Un¨Lu¡Vv§Gz¨R\86«H\84¦G\87®E\8b»I\85±Q\91µH\8b¸W\85ÃO\80»I\83·U\8e³M\8e¤V\86\9fc~§Y\81¦^\83«R\84\99V\83£d}\98]\86\9cf\91\96h\8f\8d\\84\89Y|\93]\83\8e`\91\8ba\85\87U\83\86Yw\87Uz\89a\80\85V\85\81e\8e\86X\94zj\8bl]\84f[\89cp\8amm;kZ0gW/f\3ad/bP+bK4bR.ZW3UM*[G+OS0TS@OR@ULGTWTJWXLUZSRZPb\Sd`O_]W^^g^Qj^]hYkf[npaqjdsqYphKobOxfP\84fK\7fuJ\84nZ\8bfY\8dea\95hc\8bmb\8bpa\95mc\8epS\88oN\83zN|sH\84lR~kS\84sO\8eoV\89{K\93}@\95}E\9dy?\9f\81B\9c\90=¦\948£\916£\88>¤\88D¬\94A¬\97;\9c\905\9d\903\9e\807¡\81< \8c4¡\874°\8a0¯\91-¤\898\9d\94D§\9c?«\9fD®\96:¡@Ê\9cB½\9b@º\95AÀ\9bA¼\8f<¸\9e7¿\9d=Ê©FȧEÆ¥G¶\9fG»\96;¹\97:¼\94:¹\97@µ\9eL·\99T³\9cW±£Iº\9cNº\95B²\9b7®¢<®¢.²\9e,¹\9d)°©7²°4»±3¾¸1¶¯?°¨<²©6·±?²§:±¡>µ\96@­\95C¯\9a;¾\99=À©1À¥%®\94'µ\9c(¯\97(¶\97\9e1Ȧ3È¥$ï Â·Â¶-¾©/­(¾©6´ª8¢=±\9d:³¢A¯ 9©\93E¤\8e@©\965±\93;§\8bG©\8eO­\97N°¢L­\9b?¤\92>©\91;¡¡D\9c\9c?¨¨A\9b±?\96¬A\9fªF\9c±>\9c²J\9a©P\97®L\8bÂ¥A\99¬7\97ª>\89ª;\8c\9bF\95\9eH\98¨D\8eªN\95§G\8f¬A\8f¶?\81±D~¶;\8bºA\88¹L\8d²P\86¸C\7f¬<\84±C~»E\85µ<|¹A~µ4vÂA|Ë=\84Ã:zÃŒ6oÄFsÉJtÑ<lÃ>o×6gÕ<\Ã2^Ö.UÃŽ:ZÃ…?\Ë0ZÃ/]½.V¹;b¼>`Ã4pÃ…8y¿Fn·Ci¾<gÈA[Ã?]É3]¿7^½3d¹3mÃ.o»4f»7k»Hh¸Sc£Od¦Oh£Ns©IwÂ¥Dx¤H\88¤K{«N\7f¯Q\8a¯U\92¸N\8dºL|ºQ|¹V\7f¼I~¯H\81­Vy­R|¤Q\84°K\7f¬Nx¡Y{\9d]\88¡W\90\9d\\84Â¥Z\88\9d[\8e\8fR\82\86U\86\8cV\8f\8da\8f\7f[}~^s|\t\87]u\8ea\84\85\\81|U\8e|^\90u`\80w]\84ta\8bnn,aO3_X,[_/c`)[O,VS3c[3\R(ZX!PO2SP/RM4EMHNLCUJYTVSOSRQURW[]O]Y[ZW\eR^XYZc_Whgahpgehn]r\[{gK\82lO\7foI}oG~fO\8a^S\88gO\8em]\9ae^\9aw]\95rb\96le\99x\\90|X\87tF\8a\81L\8dtN\87wU\8arO\95tJ\86uN\98\80D\98{E\95|;\97\8e;\9d\85=ª\8c8\9e\8d6©\8cH¡\88B\9f\85L¢\86<\9c\88@\96\83?\9ey?Â¥\82?¡\866¯\85.¬\939 \840©\85.¢\901©\968¸\9f5¸\92,Å :Ä\9d@Ç\9dEÃ\9bE»\94BÇ\91A¶\9a:½\9e7º«>Ã\9eN½\9d;²\9c7´\9b=º\9c2¼\8f\9dIÀ\99J¶¡Mº\9fQÀ¥N»\95D¿\9aD¯\911µ\9d.±¢/­\98(´\9d.²ª8µ©:¶³1·«>¾°9¯§0«©;§\9c7«®;­¤=©\97@±\9cC¯\95:¾£5½¦/±£0¬\9e/ª\92!¨\96.À\920Ä\9c,½§#ñ,¾².ij/ì-Ä­"·²,¿«+©¨8¯¤3³¨3©©=¨\95C¦\93A¯\9aA³\9b6©\9aF«\90C°\98N³\98P¢\93N\9c\93K\9a\9d@¢¡9\9b¦H\9f°;\99¯G\9bªB\97­E¡¶I\9e­G\9d¦Q\93¨J\8f£H\9a¦F\9eªN\8bÂ¥J\8b\97>\89 J\92\9fB\9a¯B\97¬G\8c¶E\94²:\86¸>\82±8\80¸>|·?\80¾E\82¼F\92¹J\84¸B\88Ã?\93°A\84·:~¼7x¿9\84Ã…>tÃŽD~ÉE{ÊDqÇFnÃ’;xÃFtÉGsÃœClÃŒAiÃ.^É?_Ë@\È1_Ã/fÉ;[Ä<\Æ,h¾3o·5\83Â?w½Co·E`Ã…9VÃ<_Ã0`¾=`·9e¹0k¼8h¿5c´Co°Jc°Oj¨Pi¨LoÂ¥Ik\9fL\7f¢B~ª@\84®E\85®Q\7f¸L\7f¬N\8b¿S\8a²V\84µH\81·Gy±HuºT\85«KwµNq©Yu§N|®J~°X\87¡M\80¨Y\84 P\83\9eR\84\97`\88\8eY\8d\9a_\8b\8aX\8b\8e^\87\8ae{\80ay\89hs\84ax\8chy\86^\8c\85g\8e\83[\85vg|}e}}c\80wd0T_,aU7YN7`V1Y_+TZ"XQ'\N$RX%OR%MX1CP??IDBQKQNRQU]XTYNSXP`WWeXSeQZZUSSRY]UPb^Wib`ckaav`[~aL}_M\83mL\8alQ\82^H\8aaF\88aQ\98nW\98oT\97qV\94ta\9duf\9brb\9d\7fP\96\7fO\96{P\97\7fW\8dyN\93pP\95qU\93{K\98};\9a\82<\93\80:\97\8dA\9a\904¡\8a6\99\8aC\9d\81G \7fB\98\87E\9c}J\9a}D\9fwG¤w9\9b\86?¢\8d=®\8b=«\8f;®\8c<¤\874±\872¬\8b1®\8e*¿\9c-¿\9b.Æ\9b\91\90BÇ\97FÀ\99E¶¡9º¡=»¡;ĦFº\9bD¼\9e7µ\989¸\929´\9bD¿\9dEÆ\95M½\9aG¾\9eL¾\9aC³\94>³\98:¸\96=º\98.´\96)´ 3´\9c/¯£5½ 8¼­<¼«0· 4³\998©\9f7©¥0³¤4ª\9c.¬\9a6­\97;¸ :¸¥7¾¨4µ¥2¶¦(µ\9d+²\94+»\93 Ã„\9c$Ä£-ì,ȱ.É®.ì*²(µ#¸¦.¨©7¤ª<ª¦3ª¢;¯¢:®\93<¨\96:®\97=±\8f=¬\98H²\93E®\90Q£\96R\9c\98L\97ªH\9c¬?¢¯F\9e°>§·F\9e®H ¦K\98ªL\98±V\94§R\95©Q\99\9eO\9b\97O\99\9aL\95\95P\8e\9fC\8e¨E\95Â¥9\98®<\91³B\95¼9\87»9{»5~²:v­D|¹<\82Ã6\8bÄA\8bÃ?\92Ã…J\98½H\91¶D\88Ã=\84ÉE\84Ë?{ÃŒ<pËJtÃIpÆDyÇGuÊ>wÔ@jÃŽ@mÃ’AsÓ=kÃŒ9gÈ7]ÈAcÆ@iÈ4lÉ0e¿5dÄ3hº0r·;{À8xº5i¸=]¸3_Ã9WÂ5_Ç2k¾(h¼/k¼6]·=_²<d±:pÂ¥Ap¦Qu\9cUm\9cTr\9cMv¡FtÂ¥Mv²Lx¯My°K\81µS\87´R\81±T\7f¿M\84¿Xy¶R}­Z}®Pn¯Im¶Ri¶Ev±G{¹H\83°M\80¤X~©T\8e§M\8c\9bT\89Â¥N\8d\9eW\8e\94`\8a\91g\88\8ei\85\8e`z\8egt\83hv\8ab{\89^\8c\8ai\8e\81g\92zd\87~c{wl\7fsd-UU&[[3`R.VM9RF/VU&RN4WG&HE0LE)AT1>P<EO>JTLK[WIZWDTUFXTUi^Tp^[iTTdWNT]PUUSVd`an_coX_mbTsZQxaLylI\80fK{hF\88^O\8c^O\8abT\94f]\8dgV\91q]\8cnb\95o`\97\82R\96\87P\9avS\90uN\92wJ\8fqI\9awH\8d\81;\98\7f>\98\86?\8d~D\92\90M\9c\8d8Â¥\8f0¡\8aB\99}A\9d\89@\9a\8e@\9f\87<\96sH\9c\82F­}C z=\9c\91Aª\8d?¯\90C«\8a<­\811·\8d,±\880½\8c6Â\959Â\924¿\9a,Ë\8a\90<Ã\98HÂ\95F¾\9b<¸¡D¼£@¿¡;¶\99CÀ\985´\96A¼\97/¿\92EÃ\96:¡;¿¢:º\9c?º\98C±\9e1´\8f0¼\914¾\96.²\94/» ,º\9e:¬«5¯¡?¸²?²¦Bº\9c:·\9d2¯¢;¤¤?ª¬5« <® 6¹¡9¼§=Ä¥/Å¢6´­4º¬.¯\9f)º\91*·\9b)Ä¢*Å©&Ī/ä/¿³6ǵ3õ(¾¯%é.¬\9d3¬¦6«\9d9·\99=±\97F \8b@¦\9bK\9c\94A\9c\9b<«\91M©\9bB§\8dR\9f\98Q\9a¨S\92¡K\9f¦F\9d°?\9b°I\98³J\9c®F\9b§H\9c±O\9e°J\98²P\93«N\9bÂ¥Y\8f¨J\92Â¥H\8a¡R\94\9dB\88¬G\8a¨>\93²A\91°A\95µE\89¯I\82¹:\81¾>{¼B\81²;\81·D\82¿?\92Ã@\83Â?\85½M\8d¶N\88¹D\80ÇC\89Ç@\80Ú=tÑ>nÉBoÃŒG\80Ã’J{Æ<\80Ã’;uØCtÃGpÔHcÈB`Ã’7]ÃG^À:aÈ3f¾7gÃ0bÇ9qÄ6hÃ=rÃŽ0xÃ6a·8b»;eÊ4i»5cÆ/e¸,r°1k¸9`´0g¶0]³9l¨Go£Mh\9aNj\99Mo\9e?j§Ez®?i¤Ly¯Qs¬Dy­L\8a¸G\89²L\83ÆL|¿Fl»Ix«Bz¶Sh°Fg·Rs±FqªG|±P\8f¯Nz´I{²M\8a­I\84\9fM\91\9a^\86\9cR\8d\91c\81\8c_\80\90a\8d\90_x\85`{\8df\7f\8eb{\89c\80\86j\8d\7fm\8b\88l\88\81_\83wl{\7f`.[_)JW4SP2[F9VH6QC-IN/JM+IM4IC-HA6JK7DM>O]RNWZI[`HZWHbYNoeKnaOhWO_VRW[WU\PXfYUcOdjVguZYw^X\80`L~dMykK~nO\8cpZ\88jS\8ajX\7ffT\82kT\91sV\8dmR\93xW\8e{Q\95\7fV\99xR\95yM\98\85L\97\7fB\96\848\98\85<\96\83B\90\87D\8b\8a@\90\81G\99\85A\9e\888¦yD\9ex>\9f\87D \85E\96\81L\9dwC£\80?§y>£\853¤\886£\914¯\89>­\83?»\84/À\8d/¼\882»\875´\884½\93-Ã…\8c.Ä\979»\92B¹ BÄ DʦDÂ\9a9Ä\9d5º\946Ã\96?¼\91>¼\8d7Â\906¼\9e?À\9c>¹¨4¸¢;¹£>·\9e8·\9b4¸\912²\93/´\9a;¼\9c;¹\9b3«¡1®¬:»¬9¾§?æC»\9b6º\9a2©¨6\9fªB¦¦<¡\9d4¦\9a=Ǭ3¸©0¶¤-ã8²ª.´¤(µ\9f(³\99,µ\9d-³£+¼¥(È\99$Ǥ)·©-²¬-¾·4½³,» -½¤/±\9d=¹\95=²\9dE«\9fH¢\94M¢\9cI\9b\9eJ \9a=\9f\93@\9d\8e?\9c\96N\95\9fP\97§N\97¦F\97©H\9b«O °J¥£F¢¢H\9d®O\98²L\94²B\96®H\9c¤W\96£Z\8f¬W\8d­J\86§L\8a¨L\89­F\86ªO\86­P\95¬?\96§I\8c¬J\7f±J{¿G\85²H~¶?\80¼E\85Ã?\8cÇD\83É;\84Ç>\88¸M\8dÀL\80Æ<\8aÊ8\84Ù=\80ÛEuÕ?xÃ;wÃŒ<{Ã5\80Ã;\84×D{ÃIoÊKdÃFfÈ=kÃ=_Ã5\Ê=\ÃŒ:aË:`ÆBkÇCfË9qÊ7sÆ5g¼-k½%hÈ.bÃ…,^µ5dº/kµ/e¬3Z³3SÃ4]½0f®8j¬?p¨Gp\9dDm¡Bn«=g¡Jk¤Nv Pr¤C{´E\84³M\82µIw½Jl¹Fn¯Av½KlºHi³Qm¸Jq¯Rn¯Pt²Q\89Â¥J\86ªE~®K\89²P\83¨P\8a¢U\89\95[\8a\92Z\81\91X\83\95[\87\8bb\85\94bs\96mx\95e\84\82c\7f\84g|~q\89~m\84\80f\89\86m~\7fc&MJ%QW2VD4XC1PI.HD)MF+CK(GG/ED=HM1CV:CONMeUOZRCaXETP@ZYIedKlXT_ZQgRSY_[abK\VV^h_hh\mi]it[dphZ|fWyeSylWz`W~_]}k]vnT\8cg^\85{[\90vR\8fqT\90qZ\9ayI\91uF\99p=\8dy@\9e~E\94\80G\8f\83H\99\8aM\9c\81J\95{E\8c\85K\9a|I\93\8aB\9c\849\99u3\9d\83:\9c\80B¡\83B£z>¨|9¤}D±\850¨\89.§{+±\821®\824¹{0¿z)»~:¶\83/¸\924µ\8a0Ê\91/¼\8e0³\97;Ä\96AÀ\97DÄ\93?Â\91>½\955²\92.²\954°\91=µ\8f3»\87\986º\95;¯¥C³ 8¸ C¸\9c:µ\9b=µ\9b(¹¢:¾ .®\9d5´\981³«8¸ªC» 6½¥6µ\9aAº\9bG¨¥=§¨EªªF¦¥?¤§G±¢?ǬD¸¬4ºªBÀ\9d9¼\9b1´\9d,³\99)½\973»\9f(³¤/´\9f'º\91)Æ\9b2ª3á5¶µ8¸ >µ\9b3°\969³\9f9»\9fC¼¨E±£R«\98S\9a\91J\92\9dP\93¡@¦\9aD¡\95E \98H\9a\9eS \9eU ¦Q\94¤N\9c£P\9d¨F\9bªU\95¢R\9fªJ\98²S\92¬R\9d±R\9d®X\93°R\8b±W\89²[\80°R\8a£Y\87§Z\7f§W\86¤L\99±M\95²C\86®M\7f­F\7fÄ=\8e·?\85¸A\84¾9\8fÃC\8fÃI\8bÇA\85É?\88ÃP\8dÃŒ>\86Ã;\8eÃŒ9\8dÃ’G\82Ã’?{ÃŒ:{ÕDsÄ=\7fÃŒ6\84Ù<vÔ:\82ÖEnÖAbÃœHeÕJoÆEhÈ:b×LeÉFkÃ8hÑIqÆ?uÆ9qÃ?p¾6l¿1gÉ)gÈ4mº0^¾=lº5o±6l´=i³6a½/S¼8[¹7\ª9_³>s¡Ca\9c>a©Ap\9fJj¢NsÂ¥Ak¡=w´Ou«N~°Nn²Ep¶Js¸?m°Hj­KjºCuÃJq»O}®W\85¨T\8aÂ¥Ry°T{³T}¢S\89¤\\8e\9b[\8d\8eZ\82\94b\80\9b^\89\90T\8e\90Zz\93i\7f\9fkx\98]\85\91h\81\81a~}iz\81j\81w^\85wd\84\83`.OF*NN&FK-GF7JK5HE-LA+EI4MN0EI2@T:GQ=MYMH^KGWNDZECdL>\V=f_KeXSj`JeYHZXQ^YPkPMf_S]]^cn_^qfbs^R{]RueUze_}mbte]|iZ}tU\85rW\86sX\84lQ\90vZ\99wZ\94oJ\95fE\8fn=\93xF\93\80?\97\87?\91\85G\92\81K\96\7fK\90yS\8byI\8c\81L\95|?\95\820\95\802¢z1 }5®\83;¬\86<£\84B©~:ª\7f-®}+µy.³|.´w)³y*µ\81\802º\89*¸\8c*¾\904¾\92.Â\9e/¸\999À\975Â\9d7Ã\97;¶\954°\8a8·\8b+µ\92-µ\874À\849¹\8e7±\8dAª\99?´\97?® :º\9aD·¡<À¥;»\9e.µ\9f2¼«0¿«*±¦/¶§1²§=±¤>¯\9c;¯¦:¯¤G­\9a?°¡E¤¥K¨\9bF£¢E¬\9f;²ªBµ¬F¼©E·¦>º\9a9Ã\9d)ɧ+¿ )¶\99*º\9b.¹\9f+½\990Æ\9d*Æ\9a(è/Ȼ5´\9b@·\99?°\9a>¸\9d@³\9aF´£G«\97G¢\99M¦\97L\99\97M\92\93O\9b\9bC\9dÂ¥M\9d\9dH\9b§R\9cÂ¥K¡¨R\97\9dX\8c©N\90¤R\99«K\94±R\93µK\9a±N\9b°R\9aºJ\93¶P\8a´R\86©P\83¦^\81¤b\83§Z\83«Y\80 X\8c¨U\92«K\91¯D\8c¯B\90®D\8cºB\94¶F\95¼:\90·C\8cÀ?\8d¾J\90ËG\89ÃI\87ËD\82ÕK\88ÃA\82ÕA\8aÃ’F\84ÃŽE}ÉD\81Æ<}Ë:\81×A\80Ñ8\81ÙE{×FqÚ=lÛCqÛEkÃŒ?pÃCpÖIqËAgÃGsÃFmÈCkÊBxÃ’=sÇ:f¾5c»3i¿/k»0k»3q¸,g¹3iºAiµ?e¾?Z¶9b¼>Y·4\ª?e¨@l¡<b\9cBh¨Eg£?j«Gp­H{³Nu°Nr¯Eo·Cu·Gk³@n©@v¯?u°?pºEq»N\80ªS}ªU|«Vu°S\7f¨[\89¡R\89¨Y\88§X\87\97b\81\97X\7f\97X{\91T\85\92a\83\93`y\98`\80\99[\7f\9adt\8dht\8cg\84{`\86ye~q^\86xZ$NH\1eKH%LF+HB6IM6B@)PM1NE.BO5>K3LG7RNADV@?PT9RL>HS:WR>OVNd[H`VLYWV[TOcWP]PRdTO\OYec\encefa]sVQo]TnXW{^]nadpeayq_\84hQ\80jP\85x\\8cv\\8du^\99oS\99yI\8bqN\8anB\8f~=\9b\84E\8e\86@\91~N\9a\8aI¤\87Q\94\81O\90|9\94u@\96s;\9dw1\9d\81.§x7¨\8a5¬}8«\83;«\812¢\827­\83/§\8a9¶}.¬v&¸z-¶\810º~'Ç~0¿\7f)Â\8c)·\87*¿\93(º\8f0½¡:¸\999Ä¡=º\97+º\8c5¯\8d/¯\92'µ\8d4·\8e0²\953¬\89@°\919¬\94C´\9cB§¡?ª Aº\97\9a6¾¤4»\9c1­\9d7¶¤4°®.¬¯1±­9³\9a>ª\9bFº¢Fµ¯N°\9dE¶©E´\96G¤\97I¤¤Gº\9f8¸\9fH²´Q·ªHÀ°9¸«;¿\9b3Â\970á)¼\9d6¶\982Ä\985Â\9f4É\9a+¾\9d4¼­6ǬB·©7±¦GÀ¦J¿¨=º§Gº¢A¤£E\9e\9cU\99\91M\97\9aR\9a\9aD\99\97D££J¢\97L\9b¨Q\95£C\98¤Q¡ªV\9a£N\9a²S\95©R\9b²K\98­Q¡´I\96¶Y\91ªP\8bµL\89±M\8a©Y\91­^\87Â¥V\86Â¥Y\8e¦]\86¬W\87¯\\8cµO\8e°P\88²J\83µD\93±F\86¸I\92Ç@\8eº=\8dÉ5\88ÈB\8aÃH\87ÇD\89Æ@\92ÊA\89Ñ?\80ÃK\82ÑT|ËB\7fÄK|ÊK\89ØG\83Ã’;vÕ@}Ú@\80ÃLyÃGjØGsÃ’FpÃ…>jÃGrÃ’FdÃ’HgËHnÆNdÂEqÆEzÓ:uÃŽ>fÃ>lÃ6`Ã0j´-j±+e³/_µ9g³4`±7b¶D`¼8[°8\´<b²7eªCoªMh¤Eq©An¯Ig¡Po«IxÂ¥OoµEsµJx²Kp¤Fp¬Nt¯Iq´Bn½Fz¶<w·D\89ªUw­P\84¦^\87ªT{«[\8c\9ca\85ªY\82\96W\85¡a\83\9fXu¤U|\96a\83\90X\86\9bU{\9ce\85\96f\84\9d_u\8bZw\8d[w\84]~{Z\7f\7f_\87{P\1e>>\1cAA\1d@G$>L&JM1MK&HI*SD8JH5BUCDSBOJ8?A?@GG=BU;GWJPMGOVFPWE^XI`MRVQIPbH[\NUT[YP`d[Z]d[`lTZfR`hUYvfTrf_sdglm]no]~iP\8cdS\89oN\95uM\97xP\98yO\90yR\96}E\8cr=\8dy;\9b|D\9e\88M\90\84G¡\8eJ¡\8fM¤\89=\9e\82:£\847\9exA\9b\80:\9d|,¬\886©\86;«\828\9b|1\9a\7f9¡u=ªy:¢\87;±\822µ\81.­y"¯~%±}0¿s+¿\84/Â\8e9ÃŒ\863Æ\8d3Ç\96-¿\9a5È\9c<Ê\965Ê\99:Ã…\91/À\874ª\8b.­\8c&®\8a,¯\8f3°\95A¾\94?»\9c@µ\9b3Â¥\985¨\9b;µ\9e<¹¡1¼¤1¼£;¬\9c3²§0´>´®?»6¸ªD³\9bAº¤E·«E·°:®£7¤¥C§\9aFµ¤A·§=¼«L³­K¼«D½°:·¢0¾\962¾\9f/º\978Â\8f/½\97*¿¦*Æ¥/¿¢6Æ©1ó5˵=¼·?¶¬@²\9fE¾£I¹£Q³§Kª\98S¢\98P\9f\97P\99\9bP\93\94M\9b\9aQ¥¡O\9e\9eG\96¦Q\95«I\93®K¡­G£§M\98®K\98©K\9b±M\9e¯L¡¯U\91´Q\8e¨V\80ªW\80¦H\85§O\8d­O\87²R\89²_\94·Y\91±]\8a¼Z\8d¸L\82°M\87®V\83µM\8a¯L\8f¯L\8eÀE\86Ç;\8eÄ<\90½I\82ÄG\88ÈA\8eÃŒ=\84ÆI\89ÊG\87ÃI}Ã…R\86ÉM\81ÇB|ÃŒQ\84ÔO\80ßNxßF\81Ô>{ÕEvÃEnÃŒFuÉ>kÄ?lÃ;eÆ;]ÃŽDeÑFiËKgÈFhÔCjÃ=tÉ=nÃŽBmÑBbÄ?Zº?`¶3_À8g¼5^´<c°=^³:]¾7b»<c¬;s·Hr±Lk§Aq¤Bu¨Ji®EvªMtªRn­Ps­F~®H{¤C~Â¥Kv¤JpÂ¥Ct³Bu¼={¸7|²<\84¯R{¬Y~¡W\7f¦\\80¡W\7fÂ¥\\87\9a`\81\94c\89\9f\}\9e^w¡Tu\9cR\83\96W\8c [\85\9f`\82\98_\80\97_t\8fXt\8f\q\8aT}\8c\\84\88T\86~Q I?\18MC)<B%EG#CD3ML0NR%]E8LN3QL;DGHUHE?IGGKG8FUGJQ:JGHRM@LKN\MK^JH[]S[bC_TW[dR`\`OcYRj]`n\Xdb[b]Zm`Yr`Xtk[qfY~kQ\80t]\8euQ\8fgT\8djJ\98mW\8blP\8doN\93rQ\8fnD\95vF\9b\82<\96\80:\8b\81J¡\87L \8d@¡\85A \865§\80=£}?\96{0\91\85&¢w)­\861¤\848£}9«t7¬t>¤~C\9f\83?Â¥\8a+©\81-³\841¨\84.¬|+°r*µ\80(´\89/¹\8f;¾\93AÉ\99<è/Ë\9e1Ã…\99/Ê\9a6·\95=½\874·\90<´\8a7³\972¶\8b<µ\98@»\90A±\93;®\946¬\91=ª\9bEº¢D±§;»®0´¤-³«5»\9c<·ª;µ\9b=²ª?²«;¨¢K¯ªE±£Bµ£8¹­8²¢@´¦G³ K®¤G­®J±«D¸¬C®¶B¹¥4·\98<¼\9bC¶\97BÂ\98?À\997Æ£*»\9a5é/Æ®9Ò§0Ê©6Ì´=¼ :À­F¹£B¯¡Eµ\98Q¨\97N£\98S¦\94J¨¥O£¡R\9b\9eI\9e¢K\99©R\95­Q\9eÂ¥M\9e§O\9c£O\9d´G °V\99´J\9d¼Lª°Z£ªM\9f¤S\8d¢W\87©J\87¦H\8f¶H\87·Z\93¶W\95¯b\89¯Z\95¹^\8fµR\90Ã…N\97³R\96¯I\8c¹Q\87±J\89ÃF\8fÀO\94¸>\89ÈI\8bÆE\88ÆJ\86Ä@\83Ã…@\89Ã…J\89ÃK\83ÈNvÃŒL\85ÃŒE\86ÃL\8aÃN\8dÚOwØK}â@yØF|ÓKyØGmÃŽAlÉChÃ>uÃ’>gÓAiÑDeÃFlÃ=mÊ>fÃ=pÆJrÈHkÃ?_ÃŽGaÇChÄ:a¼8`¾5fÂ6nµ>sº>a®Aa´?c½8t­Au¯Is¶Lz¬Co¤@n¨Gy­Ns²M}µN~¦M{¨R\83ªQs¨Q|¦G\81£Hw\9d=o­>}¨@u²3w®@~²S}­R}\99Q\89©R\82¢S\82Â¥\\94\9a`\8e\9b[\8a¡bx\9cV{¨[{©T\87\99]}\9a`\86¡k\87\9ehz h}\8efx\95Z}\89az\83`\82\83`\8b\82O\19U?"I@%=?$BO*RI#PI+RC.VM3YK@RNJXHCNM<DWF?OOBSIEI@9HE=DL>FDIRHP]KOYPJSYMZaIRcNXfW\m\OgTSj]Xb\Rj_UnbYmaTsjZudR|ga\85q^\87iX\8cpY\88sO\89sU\85wT\8eoR\9bvP\99rH\9czG\93\8a?\98\887\95\81>¢\85E\9f\8bC¡\8f=§\87?¤~>\9d\844\96\887\94\7f.\9e\868 ~3¤w/­r/³o6¨x@©\86A­\83:¢~.¨\82+¨\83+Â¥{'¢v(°z&ª\85*¬\8a'±\940»\99=Ä¢8Ȥ6ê.È¡0·\9c:·\919¹\8c6²\8e;¾\8cG¿\95B¸\989º\99=¯¡<³\99;º\9c;±\8eB«\8e7°\9e=°\9b7º©-¸¤+À©:¶ Aµ\9eG¯\9cK§\9aC³¤F®ªJ²£Eµ¨I¿£K»­=°­:³®>°©?®¥Mº\9eMµ¢Cº¢M¯«G«¡@¨\9aA¶\90;µ\93C½\8d=º\93>´\9c1¿\9f5¦5ʨ4Õ©5Ñ­6É£8Ë¡D¿\9bA»¦I¯¡S«\97Tª\91^©\9aZª\99S§\9fN¦\92K©\96R¤¦U\9f§Q\9b¡L\9e¦U\9e«J\99¤M\9f®R¡±Uª¯\ª¶U¢²K£ªM\98\9eT\8f¡J\84«G\8a«N\85¸N\83·[\88¼f\91¯b\8a·e\8c¿a\89»f\91ÄY\8cÃ…Q\94µK\99¶N\8c´O\8f·G\95ÃI\91¹M\92»E\88ÃO\81ÄK{Ã@\84ÃŽE\89Æ?\82ÇB~ÈLwÉT\82ÆN\85ÃŽJ\8fÃœJ\88ÙQ\82Ã¥FxáJrâBtÙ@wÔAhËMiÃŒOqÃŒKoÈArÓCh×FoÃ;mÈ7kÃŒ;tÔ@nÊHsÃ?hÉ<_Ã’8_Ë@^¼9b¹6f¶6o¹:z¿>t¹1lº3l²;u´Jt¼Kw¼Ey´Gs³R|­Kz­S~´Q\81´Zv³X\81º[\83¯O|¨K{¦Ow\9dH\84£M\84¢Gy\9b<\83¨<}¨=\7f¡E{Â¥Gy©U\85\9eX\86Â¥U\87¦_\8c£S\93\9dS\90\9cQ\7f\9fX\80§Vuª\\7f¬\~\9f\w \\7f¢g\88\9bb\7f\9ej\86\93d}\8fat\8eis\8ab\81\89`~\80\$L>!IC.PG"AT\1fEE+QF$NG:TL1GEAUO<HEFLJ<GOBA=INB?EG;HG>>FDAOPJLOUPKPNPHN]QSbJ[]ITePOcMMd\RhYFi^IicYikKriSo_ZrdQ\83gR\83hb\81aR\83dX\81lM\80jQ\85fG\8bkF\99gM\94wK\94tN\9e|:\91\86E\8b\92=\8c\90:\97\8d8\97\86>Â¥\83A¤\8b1\93\8d8\9e\8b<\98\851\9a\84=£{.\9et-¯{7§w@Â¥wIµ\856Â¥z@¯{2¡}2­\7f-´{8³x#²\7f%ª\871´\813ª\94.¸\8d;Ã…\9cCÈ\9b5Ã…\99/ɦ6Ǥ.¶\9f1¸\94/«\9c7µ\96EÂ\96D·\90JÀ\9cCº 9³\95C±\9b;ª\96J«\929º\950´\998¸£6¿«4¾£9Ȭ<µ¤<® J®¨D¹­O¿°E»¬J¿¤I³®MȤDÀ¦B¶°D´ªQª²Pµ­E¿©G¼±N½¤Oª\9dL«\9dI°\96EÂ\95M·\8fIÄ\8fB½£9Ã\9d8½¦7À¬:̪4È©8çGÌ¥LĪD¾\9eD´¦J§¥V¦£Z®\9cW§¤]¨\9eSª\98HÂ¥\9aVÂ¥\9cO¨¯X\97¬Q\9a§T¥¡N\9e\9eG¥©J\9d§V °O¨ªU\9f¯U\98®K¤¥Q\93£E\8b¯T\88²H\88´N\8b¼O\8e´V\99µa\9bÀW\8e¾U\9b¿_\90ÃU\9a¸N\93¼J\8b¸T\7f½N\8aÃM\8f·I\96¾L\8dÃJ\85»F\7fÉE\8fÃC\8cÊE\81É>\86ÂH\85ËC~ÃYwËV\81ÉD\86ÃŽY\84Û_\82ÞW\81ÃœUr×ShÚ?pÓAfÑTqÊFxÃJsÈNvÃ@mÃ…=qÃŽ?g¿>tÇFlÂChÆGjÊEh¿3bÇA`Ã?aÃ;d¶2k±3tµ;p¸;k·1j·?oº9o¾Bn³A{¶@\80¹A\86¸Qy»M~®Q\80°Z\81®[\83®P\85²O\87«F~®K\86 Q\80¡U\8b§L|¨K\7f§E\82«?~©Lu\9dFtÂ¥J\84\97J|\96X\87\9eU\92\9fS\91\98^\95 P\81\97\w\9eMt­S|­dx©X\80¨X\80ªX~«d\85¡_\89\9bh}\8e[\82\98g\83\97]\81\93cv\88Y\81\84P\1dHN'DE,F>0OG%QL)KJ2LN4KM>LA=IFDME9NAAP=8M<>I:?Q@DJK?BG=AHKPDON>QNFISJQQVRUV`IMZQVcNNjHPdQBc^DkaSfeYklTz[Vz[S{ZP{[[x\Y~bM}gG~dH~fK\8dfK\8fpN\8foO\8ezJ\98}A\96\8fC\8c\91@\87\94B\90\87<\88\8c:\91\8eA\90\8d>\9a\8d0\9e\8c3\94z?\9fz9\9cz4£o<¡u8±r9³|A³\82<¨{6­}9¤}8¨\84<³\848ª\84-±\89*²\825ª\811°\87A®\8e?´\97<¿\93<½ 9­8Ã…\9e7¹\9c/¸\9d;°\998¹\8b:·\8dA³\99A¶ L­\92Mµ\92@¬\8fJ®\9cD·\9a<º\984¼\990á5Ä\9b+À\9c2¹¦1¾§Aµ­Iº¯C¼¨AˤO½«G·«P¸¬PÀ\9dSµ¤M°£S©©Yª°U¶®V¹¯I¸§O»¤V®¤N°\9bE¼\9bEÃ\9fSÀ\99\96NÂ\9fAÇ£=Å HÅ CΤBÊ®?É«EÅ­C½¯?¾¡<­¨?¢M®\9bS´\«\99V \94O\9e\92G£\92H\9e\9aV£ªT¡£K\9c\9dF¡\9cF¦¥O\9e V¥¢V£®U­¬N£¨F\99¢I¢«J¡¦Q\93¬Q\91±O\98´R\8d½M\99ÃW\99·T\94ÇO\93Ã…U\9cÃŽ\\9eÆW\9aÈZ\90ÀM\8a¼Z\80½W\8f¶R\96¹E\9aÀL\93ÀL\8dËB\89ÄG\84Ñ@\8eÑI\88ÑO\88ÃIwÆSsÈLyÇQ\87ÃM\8aÃX\8bà]~Ãœa{ÛWrØKiÃJnØKqÔNtÔIsËFlÊIu¾Gn¿Mk¾Bu¾<vÃ…@{ÃŽNoÃKpÃK_¾:XË>XÈ;Z¼<c¹;`Ã8g¼?o¶Bq¸=cµ<b»9k¹6w»D\85´H\86·J\89±K\86¼R\8c­S\8b®S\89¶S\85¯X\82ªN\87¯L\8b°Q\86¤G\8c\9eE\84§O\90 O\8aªA|Â¥Ey\9cK\7f\9eNz\9fJx\9dO}\9aX\87\93_\90\94T\93¡O\8c\9fW\8a\9cQ~¡K\87­Q~§[|¬Uw\9f_zªZ\80§_\88\9a_\87\98`\85\96_\88\96]\85\92Z\8b\91V\84\8bJ~\87N\16I@\19GB'IC4II4P>0NG7LB6IA;V?<PFCJC@H87EA4N>8L@9EDJE@>E=C@JUHFRJOHOQLGVYGOUCUZ?RkAHeMKlQO`SIaaLfeKh_StfR}_[{[KvZL\7f\Q|_Iw^K\83TF\80YH\80aH\87hM\8ekN\92wL\95{N\9d\80?\89\908\8f\97?\8e\87<\94\8d3\88\89>\8b\89B\91\8e8\97\84>\9a\8d:\99\848\99{;£\84F r<Â¥nG¯{A¯vC¨u>£\82<ª\82?¤\837Â¥y8¦\820³\880­\7f*Â¥\8b0¦\8a-°\8e:®\875±\96B½\9b6æ0˱<¿\9c;½\95-³\984·\91F®\95C´\8a=¼\9dM»\92E²\95A¼\94@¬\92@³\94I» :º @¶\9a1¼¡:È 3Ì«>¾¨:æF¶©F®;¼§HÀ²QƦM¾¬Y¼­XÃ…\9fYº R¦¥I­¨K®¨Y®¤O¼©T²ªT¾¬O´§N¬\9dH·¤RȤMÉ\96WË\92HÃ…\9b\98?ÃŽ\9f?΢CäIð7Â¥EɯBÌ¡CɦB¢G¶©Nµ\9dW®¬^¤\96R®\95J¯\9aL«\9aM\9e\9dW¦«J «Q\99«N\9a«K \9eN¦¤W©¦R¤¨O§ T\9cªH\9d\9bJ¢¢H§ªY\99­W\94¹J\8d´R\96³S\94µP\8fÀ]\93ÀS\92ÂW¡¼V\94·Z\9e¾[\96ÄZ\8b¾Q\87º\\8e·T\86¾B\8fÂS\94¹[\91ÃO\84ÆQ\81ÉV\93ÄK\8fÊK\85ÃŽH\8bÇNuËV|ËH\84ÑJ\80Ã’\\8cÚV}Ã’VrÃ’YrÉRlÊUsÑXpØSdÃCiËLr¿Dh¿;eºBuÀNnÃ<v¹Ai¿IrÃIgÃHZÂFZÄBd»:[»;eÀ:k°@i¶8c¶>w´5q¸BhÂBkµ=r³Ku¸M\80»E\87´O~½L\82¸W\88«X\88ºU\8b½Y\8b¶O~ºF\86°I\8f¬;\8b­J}±I\88°B\85¡D~\9fH\82\9fK\83\9fL|\9aNw\92F\80\92T\83\96U\88\9eW\92\97T\8f«Y\8aÂ¥Ux£L\7f«[~«^s¢X} dw\99a\81¦XwÂ¥a\81Â¥X\8d\9a_\84\98_\8f\8cc\8e\94S\80\88S}\8fW\1a[?\eRI PA+IF5LF>T<>XE?ODDOC:VCAVG9K@7MCAC<BN<CIFAOIHKDI@;XC@\JLPER^MSZCP^<HY>I]FBlKDkUIcbJl^GihGy`G|^S{`R~fSveXyVKu^N\80XJ\84VJxUCz^C\85gA\87o@\83xE\8cxE\92\81B\86\90:\82\8e5\8c\90?\86\877\87\8a6\88~5\92\7f5\93\89@\97\86;\9f\8f@¬\85J©\83F°}K©vM«yG¯}@®\80?«\80@¤\7fB®|:«\85>¦\8a8 \80:©\853£\84*®\911¨\8f/§\89<·\8e5¸\9a0º£-º¥0¾\9c6´\9e9¹\9d=­\95F®\8fP·\94J´\8eR¸\95H·\9cH¿\94D³\97:²\9a=³¤Aº\9c=º\99CŦ;Ì¢>È«:É£:¾¬> ?À£=È£BîM˵S°[½¦W¸¡V¸ S«¦J±£T­­Pª¯W®\9fQ¸¦R¸¢UµªY·©LºªK¾\9dP»\9aUÇ\99LÆ\92FÆ\9bNáGÉ¡HÄ\9fIê9βBůFÄ¥FÈ¥AîE²¬M·¦G­¢R¯¡V²\9dP®\98X¬\9fS¬P¢©K¢¯E\9c¨K\9a¯M¥¨Y¯\9cU¨\9bW¨¡W¢\99O£\95S¢¢T¦²P\9c²O\92»J\92³R\92µY\94µ\\8eÄS\93ÂV\9cÉQ\9cÀS\9d·T\97·Y\95·O\96ÄV\8aÉJ\85¿O{¿R\81ÇP\8cÊ[\8eÃX\80¸`\80»`\89Ã…\\87Ã[\89Ã…S\8eËL\8bÉG\82ÖQxßZ\7fÙS|âL\7fÙVwØXuÃ[{ÃVrÃUtÃ^eÃ’UdÇGcÃ…GeºIc¸@a¿Jo¸Ip³Jj»Fh·<fÂ?dËG\ÄAaÇDc¸;^²;j¸@e´5c±4g¾3l»1gÃ…:h½?m¸7z¹@\83®@\80±N\8a½P\85¹J\8c¶S\8b°T\88µW\8d¼W\82ÀN\85¶O\81³G\89¸@\88¸D\84¬B\8c¨M\83§N\80\9aH\88\99M~\94H\82\8eB\82\90D\86\96D\82\9fF\8e\9fH\8a¤R\8f©S\85®K\81£T}£W\81©V|¢Rs£]r\98ev\98[u¤Y~ a\82¢[\85\96[\8c\88X\90\8b_\94\83b\89\8bS\1fIG\ePJ'BA0BL4JA<NJ9KCEHMCHF;JB9RB;G>9OEFD<AELDOGIGJEG:UL>U>DNJGTAL[:OW;IWGA\FCiM<iI=dX>i_Jc`=d`OghFijLufI\81aEu\FnQ9rW9\82SD\80aI~SB\86WF\86^I~b<\80u7\81wF\88\88H\83\8c8\83\82:\85\893\8fx;\82};\85{/\8b\7f;\8e~9 \7fF\96\81H\9f\80D¦\8bL§\87J´vJ©\83?­\84Cª|=±\7f6¯\848²\87E°\86<ª\8c3²\8a8«\87>¦\8d0±\92@¨\92Cª\8cB«\968«\9b.¼\99)¹¦-­¡7© B± I¨\97F²\91Q±\9aI¯\9cE±\8dJÀ\94KÀ¡D½\97=º\9dA»\9d7½\939´©C¿®8¢>È©@«@´¤I¾¨?Ĥ=Ä©L¼¤Ié]ɪ^­N·§P¶¦G®¥H°«P¶¢O¯ M±\95I¸\9cZ¸ U¹ Nµ¢Nº\9bT²\97ZÃ\8eNÈ\9cRÃ…\9fHÇ¢VÇ¡VÄ¢NʤCã@â:Å«DîD̨7µ­J°¬M³¦Sµ¤Sµ©Q¬¬B¦«N«¥C¦©I\9f\9fA\9c¤F\9a¦M\9c¢K©¢T\9fÂ¥Z°\9fU¤¤_\9d¨]¢¢R\9f¨[¨ª\¥¹[\9c»W\9b´P\97·N\97½S\9bÀY\98´`\93½[\96ËQ\9fÀ[\98´\\8fÀN\8b¸X\8a¹]\8a´Y\81Ã\\82Ã’T\8dÃS\92º_\82ÀV\8a¹_\81»U}ÄR\8bÓX\8cÑO\7fÃœW\86ÛI\82ÃœR~ÃŽW{Û^wß[tÔ[\7fÔZwØ\lÕOkÃœU]ÃŒUeÃ’Ra¿@]ÄKj·Gr²Ck»Jg¼;iÄ9e»HcÈ>^Ã…Kd´;e²@^¸9eÀ3k¹=o¼6d³Cr³1q°2uÂ5bÃ…EvÂGpÃC\80¾Oy±O\85´I\83¸F\82³L\88·S\86ªP\8bºV\8c­J~µH\87¶K\8cµC\81±G\89¯7\81§?\84\9eH\8d\99G\8a¢=\85\91H\90\95E~\9eK\87\97B\83¨?\8eÂ¥O\93ªQ\8f³P\86§Hz¢W\80ªR\8a\9dU~¨\\80«a{\9eet [\80£b\82\99c\85\9a]y\93Y\87\8c^\8e\95^\86\96R\90\94T\1cG>&L>2M?0?I/KM3JN3KJ<GL>>H9DL4BE5NI<HB?JHAMAPMETQKGN@VK<VD>XKN\CLaFP]:H`<AlMEtM?kKAr_Dla>jdI^[IZgAgdAf_>tfBug=l\8~X8\7f\3v^>wZDy\J\81^F\7f_8\8ae:\81wJ\85\80H\8e}F\8e~A\87n<\88o;\85\7f:\8c\82.\9c\80/\9aq5\96s>\9buI¯zJ²\89G°\838´\7f7¸\81@±\86>¹}A±x4ª\87C®\8aGµ\85>³\88?Â¥\81D£\81?°\7f;¬\89?£\8fA¡\87>©\95@Â¥\936±\980¹\99$»\979®¡=¯£B±\98K±\9eH¬¡F¨¢G®\95R°\99DÀ£<¼\973²\924º\9dC³\99F¿¢Cí>ɯ;ĬB¸¤;ȬCŪFìBÉ¡DáMƧYÃ\9c[½¦Lµ§F»©B²\9dK¸\9aL¸¤N·¨I´\9cR¹¡W²¡Y²§OÃ\9bK´\92Nµ\92U´\97FÄ\92GÃŒ\96IÈ£S̪UË\9fLÃÂ¥GÒ¡9Ø­4Ò©6È¢CÅ >¾®>¹¬E´£Q»¡M½«H­­B£®<¡ D\9e¡J¬¡F¤\9fL\99©U\9bÂ¥]\9eÂ¥U¬¬Y¨§_¨¨X¢¦`¡§^­¡T¨¤Z\9e³]\98²T\98·O\96½Q\8c¿T\9cÃR\9bµX\9eÀ[\90Ã…V\96¶R\98µT\91ÀU\8d¹V\90¼Z\8bº_\8c½^\94Ã[\89Ãb\8eÀZ\90Âb\83½`\7fÉ]xÃŒZ\87Ö[\84×P\85ÛSyÃœNrÕ[{ÃY\82Ã]{ÕWwÓ]\7fÖQ|Ã’QuÞLtÃœNcÕL`ÉEbÉBkÃBnÃHf½Bm¸?r·Fl»<b»HhÄKhÄ@i²D_¯Df²9o´7gº3p²@h±Ag²Eu³At³AkÃ;tÃ…ClºDn¹@y²M\83±U{­M\88²P\84³T\8f³I\8c¨F\87«F|§I\85\9fS\80¤P\8c£M\8e¯:\94¤>\88\997~\98.\84\9a6\83¡9\8f\9aI\90Â¥N\82£D\8f£Q\8f¦N\8aªG\84®F| Mz\9dT\86£[\89\9bb\85Â¥e\85Â¥b\81\9ab\81\98aw¡\|\9c_\81\8e]~\8fd\85\98^\8b\97U\85¡V\8b\9f\*N=&U>(L91?J1II2BP:AD4CF@CQAAQ<DO<DIDOSHQECJRUIKLR@QI@YK9X9<WE;ZBLd;HW8@`AKiD<fGDfVCsO:q^?j]Fa[KhY8oU7iWCehHhk@tdCt^8~T7|\6iVFp\Bx]I|\J\7fg>\80hA\84zJ\8b~?\89t;\8dw2\81l>\8fl.\83{0\96u9\99h>\99o3£oBÂ¥\84I¯\7f?¯y6¾z?­\861±\87A«\80;¨z=Â¥~6³\83<¤\93:©\909¤\89?£\86D¨\8e5¯\867«\87;¦\86?Â¥\966£\9d3¬\91/ª\9f\1f­\947´©?¶\99>·\99Jº\9e=®\9e@³¤K´ T²\98H»\97>±\9f?¾\9c@½\8e9µ\99E»\99J¸®Fµ\9eL»¬H¿\9e@¼¬CÆ\9bAÒ¦RÄ£OàSÄ NÈ¢Z¼¦U·­Hº\9cNº\9aN½¦S¢U¼\9bV°\9aM¿\9bXµ«J·¢FÇ¡O»\97H¼\98K»\99IÇ\9e@ȧ?èMÃ\9bTÂ\9dMÆ\9eMË\98;ɨ>Ë¡CéBÒ©7ǧH˻KîH¹§L¸ H®£F´¡CǻJ§\9f=¯\9b?¢©P\98±N¢­[\9c°R\9d©R±«_£^¢®[¥«c§ªS§±_¥¯T¨¼Q¢¯K\95¾X\93¾W\99³M\92±U\8aºO\97Ê[\92¸Y\93´W\92»P\96ºM\8cÆa\89Èc\8dÃW\91ÄN\90ÀP\85ÃŒT}ÂV\86¾V{ÃU\81ËU\83ÉP\8aÃS\84ÖX\82ÑVuË\\7fÃ’S\7fÑbtÃa{Ô`|ÃW}ÞOuãIcáM_Ã’XXÇLcÃ…AjÉKqÇTnÀBmÃ?nÀBeÀA]´C_ºNlÂ=jºDa³Aj±De¶AbÉ7nÃ7d¾@tºDp°PsÂBq¹KrÃD}º;\80±Nv­Iz­M\85¶N\87ºU\85·R\85©C\82\9c>y¡Ly¢M~£G\87\9eJ\8b­E\89±<\97«6\8e >\8f\9b@\7f\996\83\9f:\93\94B\82\9eH{©E\7f³I\92³I\88®C\86­C\84¨N\7f¢\\81\9cU\8d\9ad\8a¨[\93Â¥X\80©\\83£]~\98Z\80¨_u\96X{\90Z{\97P\91\94U\92¦M\95\9eX%I3-M4,O6'IH$GS-DL+HL5?H5CE8MI@KGDJQLBNBJNLSRMLJRA?T?9W43Z:<c::c=Ca=?ZD?\H6aI=`W>oY=oV=rZ3m`8dW;l\7gS>`Q8c`=nk9sf<l]1pZ1j]4kaAogBzbGt\F|aN\88sK\8dtC\89x7\81p1|n5\83k2\83k/\8ah=\89i5\8dm8\97x?\9aw:£x9¬|A®uD¸{<²y?¹\866¹\85:§\888¡\8b4ª\8cA¤\8b<¡\8f5«\8f/¦\8d:±\897­\862²\907©\919©\8f9¤\962«\9d5«\96*¼¤'»¡/»¤7¹§E¹¨A²\9c?³\9aL²\9dN­\99K°\97\9e\9b?Ã…\9a>¾\94CȣHµ U°\9eR¼\9bOÇ\99JÆ¡DÃ\93NÇ\92\9cUÊ\97Z¼§P½©KƲNîJ¸§X¶¢X½ ^¿ YÄ\98O½ J¹ªDȣL´\97C¾\95G´\8aE¶\8fN¶ H¹¢B¶­F¹¦D½¤IÀ¤PÆ\9fPÉ KÀ¡?âCÃŽÂ¥=è=Ó¥KÌ¥GƱD¾¬NàS»\9eO®\9aK©¤>¡ªG¨ C§°A\9f±L¥©R¥©T£°\­§[¦´Zª¶b¥±g¦´c¤¹^¨®U\9e¼Q¢¸W ·Y¤ºQ¤ÃO\93»Q\99¶V\8eÀQ\99ÃY\99Ã[\9b¾V\9e¾R\99¿R\90É\\90¾[\8eÂM\8cÃŒI\8aÆQ~ÃY}ÈZ\82Ã…X|Ã_\7fÚZ\81×U{ÛX}ÃS\82ÃŽ]uÃŒVo×WrÑf\7fÃŒf{×a|ÕXuÃœQbÚ[`ÔW[Ê[^ÂNaÇOiÆNqÃMqÈJb¼LcºGa¿@aºCf¾CiÃ8l¼7_¼=dÃ…9nÇ;vÃDqÄHmÉSw¾QuÈOtÂK}ÃH}·B~¹K|²J|¹F\81³L{´R~³H~¡M\80 E\84\99H\7f¢F\84¤E\82§N\8e¢D\91«D\98©C\95¤A\87¡2\85\9b4\81\9e8\87\9fA\8c§?\85¬L\8c§M\86³F\86®=\80§B|\9dE\86\9dT~\9d\\84\9b[\88\97Z\90£V\88¢O\8dªU\82¡P\80¤N}\9dZy\95Z\8b\9c]\8b\9dP\8b\98Z\8d¢S"<3&I<\1c@8\1d>I\1fKE*C;)HD2A=.F>1::@G>8=I<ARKISE@FIDIQ??JF:ZC<]<4W6=WJ<fJA[F>cDCcG=]U=aV7q^2kd4d^6gL?dTC_ODc]@`hAh[<j^=ob3mR7uY:qT;tc6o\8\7f_E\80h?\80nH\8ff?\8fm9\80o>\84m?\8bx<\89r9\8fkB\8ea1\92c.\9ax-¤r;£m5ªt9·u>º|8¿\895¿\87A¹~8®\89=¯\8b4§\95;\9f\8a9«\853£\939«\8a6\9f\888 \97/ª\89>´\96:°\8f0\9c\8a;Â¥\9b,ª\8e%«\9a&½¡.»¦0»¡;¸\97:´\96F¸\97:µ\9dF´\99?µ§B½\99HÀ\90F¾\9c@¯\97>¿§Cµ§S¼\9a\98M»¦UÂ\9bTÀ\9fNÄ\99PÄ\9cOÇ\99ZÃÂ¥S¹¦V»¦NçD¹ S±\9eK¾ª[Ä­S½©VǤRáSêP¼ J¿\9cO·\93Oµ\97R¸\97Cµ\98O¼¤Oµ©G¾­@Ç¢N¼ªJÀ\95EΣKȤ=âIÊ\9f9Ò¬BÃ\9eCɱ<¿±CëPº¥R°¯C¸±8®¤=°£E¯§F±±Q\9d®K«°LµVµ°e®¬d\9eµV¥­Y¨ÀZ£¸_\9b½Yªµa¤Ãg ºY£ÅJ\9a¿W\94ÄY\8cºQ\8eÃ…V\94¸[\97½V\95Ê]\99¼S\8dÃU\88Ç[\8dÃŒa\8dÃW\88É]\8aÓT\85Ã^~ÓW\81Õ`\89Ä]\86ÃŒ]\85Ã[\85Ód\85ÇTtÔasÃŽZrÉXrÕotÖdzÃ’^rÞirÙafÑ]iÓO_ÃN\¿UaÈReÃFiÆFjÃKeÄBrÃF]³K^¿Q^·>`»;gÃ…@cÂAgÂ>iÂIfÂCwÀDzµQ\80µRw¿L|¼M\83½H\7f·Ez´I|´Px®N\89²G\81µAx·J\7f³@\80ªK\86ªE|§?\83§<\80¦N\84©N\89³C\8c§H\91Â¥=\95£;\8b\9d,\91¤3\8e¨?\86Â¥I\85Â¥O\8a³F\88´@\81¨Ku¯G\83¨B\7f\99P~\9eU\81Â¥^\87¦U\8b¬Y\94«Y\93Â¥X\8b±Oz«Yu\9ca\84\9db\87Â¥W\81\9dF\81\9eX\82®V\103/\1d:9\1f<9\1c@D+<>.@8)E@.:C+=8-3<-=:77B=EOJCLNJHJ?IL@JNGLI9IO5;UE6RF>YK@eLAdO5^N7gU<dZ1cW0d];]_:dR7l]@hXAde<ac:k\4k]0rP7lO8mQ8tV=pX2s^5\85_;\88h8\93e:\91h7\8dsA\8ewC\8br<\84v4\8aq0\90g=\91g8\94e+\96g/¡w6¤x>³j8¸pA®\829¹z;¼\7f=·\85A°\885¨\8a3\9f\8e6\9f\94:§\89?\9e\91@¢\934¦\926¡\97:§ >¯\97=«\94A¤\8b4§\96*¡\92.\9f\95'­\980³¡4²\98?¶\9a:«\96?® C³\9d?·\9bLȬK²\9dK¶\93B¶\9fI¬¦J®\9cE¾¢Lº\9fI¿¢Rº§Zº\9fU¿ O¸\9fY´\9eT¿ SÆ\9f\9aU¹\9cQ¿¨IÅ­O¼©JÄ°Y¾­\º¬VƦP»¯F½ªLÆ\9eIÆ\95EÄ\94?´\9cG¬\9cH²\98Jµ¤O¶¨HÆ¥Kŧ?¼\9cBÃ\9bDÊ @Ѥ<Õ¨:È¡EÈ«?Ǧ9ñDɪ=Æ¥C¾°L¼±F³@¶¨9·®=»«Q±¬U¥®W ±R«¯d¯°e©«e\9b°V\9d½`£ºb¡¶^\9d½W¢¶_ª¸g\9aÃd\91Ã…O\96ÃJ\8dÆU\8bÃY\8d½N\92ÆX\97ÄY\8aÆR\8aÈ\\91Ã_\91Êa\89Æf\8aÃŽb\8cÊW\81Ã’[\86Ã’Z\82ÖX\82ÃW\89È[\8cÆe\86Õb\86Ã^\80Ãd|Ãg|ÃŽZvÃ’_rÙfvÃŽmvÃ’gqÕ`mÃœioÃœ_sÃRtÃŒWgÃ[hÆWpÆOmÃŽPfÓJmÄNo¼G_³R]¹Q`ºH\½K_ÄE`Ã…Bc¹F_·Jk»Lp¼E|½D|¶L{°H~²D\7f©G\85°?{¯F{¬N}¤K\82­:~³A}±?v«D}®A\86®=\89¦=\90§@\89 C\91£M\92ªI\8d¨H\97\9a5\8b¦7\90Â¥-\99«;\90¡@\95¦:\94ªB\84£?\84«Hy³Jz¬;{©<x¦I\82¨O\80ªd\80¤U\8c¨Q\94¦R\92¨W\87®a}ª`\84Â¥a\80\9fct\9fUx¨J\81¡V}ªS\18;4#41%<>\1e:D 0C1351.D.=@24>+0:46G66DA9B>BHMBKD4RT:KJEFVF;I:FZG;ZJ0cB8jP2mP4mH8kQ8kV5b_;iaBaU8lQ/^W@_Z<\VGbd;`c/a\/dW5mV6iW;lV>v]9t]3ua<\8c_:\8cc4\8en;\8en>\91fJ\87i;\85{8\91q?\89k4\92h1\91^&¢k,¡i0«q3®e>¸l9·w7¹\86>±|@²\8b2¬\8f;§\960¢\962\9c\8c3°\8a@©\939\9b\95/¤\97A¢\87?®\8fA¤\998Â¥\8b7ª\8c5¦\8e1\9e\8f'\9f\8d+«\96,©\973­\99;\9c\984\9c\98@¬\96:©©<¶\99M»¡V­\97E¸¡V¯\99U©¡G·\9eP³\9c[¶¢Rµ\90U¶\94\µ\99S°\9e\¿\91Z¶\9dTâ`º\93WÉ\95Y¼ X»®JéUñUĦQ»¯LÆ©ZãXÃ…Â¥Tº¦Q·\97EÆ\9cJº\99E¿\99Tµ\9dJ¯\99N±\98I·¡BĨ<¼\9eEÊ\99@É\9e@È\9e@Õ\9d?Ì¢FÕ¢DêA̵:Ô°=̶7îF¼·;˲BÇ»EÀ°J¯¶?±¨G·¸Mµ´Q²¹P¥³[\9f»_\9eÀ]\99¼b\98¿^\9a½[¢¹`\98Ã…U\98·a ½b¢»Z\98È[\9bÇY\8a½W\93»L\85ÂJ\8bË[\8fÆU\90ÃŒT\94Éb\94È]\93Ã`\85Ño\84ÃŒ_\87Ãh\8aÃX\81Ù_\85Ö\\90×\\8aÊ[\85Ú_~Ód\81ÚauÕjuÃ’brÃfpÚ[oäjnàj}Ã’`nÛqfÚetÃhtÕ_kÉ\lÉ[mÃS`¿^eÉZbÕLiÃ…Yk»P_ÃNZÃ…WeÄQ\ÊNg¿FZÉGcÉFdÃDc¹MzºNz¶@z¿I\86¼D\8bº<\83¬7\91·>\8eªC\82¬M{¹L\84ªD\80¶Au®9\83«4|±A\84¤>\83¤3\8e\9e6\82¢B\8a\9bA\99\9cD\8fÂ¥;\99¢;\8d\9d2\97­-\9a¤-\94£:\93ª9\94µ>\8d®H\93¬;\82¦G\85¡<s®I{§Ou¬N~«d\86§P\7f£R\83¤X\88®N\8b²Xw­c\82¦]}¬f|¤Vq­Uw¬J\84©Q\197"#2%\1d05".7 ,7():)0<)0B*,B6,G2-K;7=56>>@>E;?N9MP8RR7EW7FTD?ZC;g@2e;4gG4bH0kF4bK)aT-jN3iV:lT=gU8]S6]_D]T@_X=b`;[W7\Q1lU+t`.oY2kU7uX0\80X>\85_:~j6\81g8\84bF\88dD\85hH\89n>\87p=\90p:\8eq/\98g,Â¥i*£].¬h-°h2³s*ºs2½\81=´\80>±\897«\93;©\987¡\92:®\88;ª\8dA¯\887¢\8d;£\81D«\83<\9e\8eA¢\8e?ª\92F©\92@¤\96:\9d\98.\9d\9b*\97\942\9c\9a,\97\95-\92\9a2\98¡7\9b\9c?©£@¥¢K¬\97S±\9bR²\9dX­¡Z®\99T¸\9cU´\9bX´\96X­\8e]¬\88_±\8eW±\94Q·\91Q¾\9d\97]¾\9eUÃ…\9d\˦ZȦXÄ«YÆ©UʨIæL¼\9cPÃ\9dT½\96SÂ\9fPµ\9dGµ\9cM´\9eM½\9aQ¶\9dY¹\96R·£D¢?Ç\99:½\9b<½¢<Å©EÅ©PÉ¡MÉ£GÒ©KرDÙµ<Ö±6û:ÆÅ<ÊÀ7ȶ7ʲE¿¸H·°C·ºH¹·M¿ÃP³¹X©º_\9dÃ_\96Ãj\9aÃd\9aÃ]\98Éa\96ÆW\92Ã\\9b¹h ¼c¢»n Ãh\9aÇd\93ÀZ\8e¾U\8aÃU\81ÓY\87Ë[\8aÃ_\8dÃŽ^\85Êb\8eÆh\8eÃŽq\82Óm\7fÔn\87Ã’`\88Êa\8cÃj\8eËc\86Ö`|Ó`yÛmyÃœuzÃl}ÖbqÚ`m×]kÞiqÛorÙgkÃllÖmlÚbhÃŽcrÈekÇ_bÄ\`ÇejÃ^jË^i¿`lÄVhÇReÈWnÄSlÉYpÀQeÃRhÇOeÆIpÀArÂJt¹;\82»9\81¸4\89µ:\83³1\8b»9\85¹;\8aµ@\8a®K\87³E\8b¯@~µ9\7f´0\8c¨/\92\9e:\89\9f5\8e\92>\88\95>\8e\90>\93\9b=\96¡3\93¢0\96£4\95­2\97­2\97­/\96ª0\97°A\93³F\90Â¥>\8c¬K\81¡It§Ox­N{©V\82¦Z|¬O\80¯R\8b³L\8c¬U\84¨]~°b\89­\\83¯[\82¬Uz´W|¶Q|ªJ\19>.$4)*1:#.<032/(<3/9+4J7.E,/@8.C1?@24:9<HN7GJ<LHANP@@X@CSF>cC.gL.^P8eB1_K5lP4eQ4hb9]_+aa7eX;qWDrN@d_4dS?]R3]`1VR/fZ.l`$fT+p_,uZ'xW/xX9\85e>}_:\82r5\82hD\80cC\83u;\81m9\85m7\99s>\99t=\95p.\9fq2®_+³i1¯n6®q6¼v:ºs7§}E°\8b=²\7fJ­\889\9d\879 \84@¨\87<£\8f8¤\91F\9f\85G®\88I\9c\84H£\86:©\8f5¬\978¢\920£\986\92\9c(\9c\8f/\9d\99(\8f\925¤\969 ¨?¦\9d4\9b¦@ \9fD\9f\9aV©¡U¶\9bS«\9bW«\96Qµ¤M¸¢`²\97Y´\92Y¶\96P¬\90Z¸\8fT·\9cO³ SÃ\98[¹\97aÇ\9aVÅ©^¾£XÅ«]ºµ\À©R¹°MÄ¡NÅ¡OÀ\98Y²£P¹«WÀ¡V¹\9dT½£_¿©Rµ\9fN¶¢C¼\9a=Ä©8¶\9b=Â¥=À­Mɤ@˦?ɯHÖ­DÕ®?û:Ǻ?Ì»?ÿBαDòOôLÆ°Q¼¨J´¶H°·P³·\²»[¡¿Y¦Çb\9dÄ`\92Éc\9eË]\9aÃ’\\93ÃT\9aÃ…c¢»f¡¶]\94¼d\9eÃj\94¶Z\8c»T\90ÂV\8b¿\\89ÃŽP\91Æb\8aÃ…\\8fÊ_\97Éf\9cÂk\88Är\82Äk\81Ó_\86ÃŒa\85Êf\97Ôc\88Ãe\8bÞZ\87Óm\82Úo\86Ã’j\85Ã’k\81Ó`v×arÔ`e×dnÞoqÞmhÕimÃœhmÊhmÚ_iÖioÖc`ÉibÇZ]¿gbÃŽfc¿ahÃVeÉZ_½\mÊ`nÉ_e¾Lm¸Nk¸Up»FmÃBoÄE|³:w³F~¹9~±?\81²7\90¯>\84»F\90²C\84²7\7f´Bz´4\84¬7\87¨/\83­3\84®)\83\9d4\8f .\85\9b7\87¤;\91 F\94¦<\95©8\98¦4\8d¶<\9b°4\94©,\8f§=\9c¶7\8a­G\8c«D\8c A\8d\9cEx°O|®Hr°P} \\81®Y\7f«W\87²Y\89¯\\7f·U\7f©a\80·X}ºT{µ_w´[\84µH\82±I\1f7+&52\1f+4(-:-57*-0$&>.)B53?.399.D65F/9J92FK0DQ1LP5NKE>SHBXM:WE7[M0cD-hK2lH(bN+dX9]`7bb:f\2oR;rK>mL=qS/gR-e\8`R1`X*]b&h])o\(t[.uU6wZ.{c8z^4x_@\83k:\88s<\83r;\80j6\8al@\89gG\91m@\91h;\9ds2\9fm/ªr0¶{2°w@·u?°s3§u?©zK¦\84B±|H®\82:\9e\884\9f\884¢\856©\8c4\9e\90@\9c\93M\9f\92Iª\86H¦\86=§\8d> \98;¢\94>¢\954\94\99+\93\99+\90\8c6\96\8d4§ <©¡8¢¤F\9e¡B\9f«J\9f§G¢\9bSµ\93N³\95J¬\9aKµ§^»©`³«]¯\9c`± N³\94Lº\99Vµ Uº¥`À¡YÃ\9f_·\99W°¡Y¹©TñP·°XÀ·S¸¯DÀ£G·£M¶\9dO°¡W¿£]¿¯W¶ªQ¹¨[¹¤Y¹¯M²¦L¼\9cD¹¤@¶¬CÄ°MÅ®IÒ¢Cä<ƯEï?Õ´:ѳ=®=ôEùMÒ­JĵUïT¼­Q»«T±®S·¬Z¸³O³´S­³V£¼Y\9fÀN\96ÈQ\9bÔR¤ÃR\9bÃŽ[ Ê[¡Ã] ½g\9d¶j\8cº`\87½d\87¼\\8eÃZ\89½Z\85Ã…R\8eÃ’W\9aÂ_\9bÃi\91Æk\98Äe\94Àh\93Æj\95ÃŽW\8aÆR\89ÑR\95Ö`\9b×[\94×_\8cØb\93Ã’p\89ßc\89ÃcxÕZuÃœbzÖ`mÑiiÃnm×cuÑbpÑpw×gsÕ^oÃkoÓipÃjfÂ^eÉ]gÃ…anÃcnÇYdÀ\\ÀbYÈbgÃ…Th¹Vx¾T}·Pu¼PlÀAj·ChÃBuºBt¶Ezº@\84»C\83²D\85¨C\8a¯E}²:~¸3}²1\82¬=\82©6\8a±,\83µ4\83¨-\84§5\8c\998\8d\9aG\80¤L\87\9f=\88\9f>\93¡B\91´5\98«4\8f¦5\98¨<\97±<\95¹G\8c´B\86«=\8c¨E\80§Kt²El°EsªPt³I{´K\84®M~±[y±Y\81²So¶[n¸\sÀWv¶T\83ÀQ\86¸J%,8%;*\1c73)71$7-!6+*5=/*F38@27J4:H2:@78J7><F;FL3IE7>VI7TG4UI5QF<VK0\I9bU9aO9dX3l^3eX>l^5gQ*kL9hC9uC7iE9bL/kR4gM/tU4pY+kY'mY,if2ya,nY/q[7ka@oh8}`9yiByk?\8bkB\8caF\95pI\96pK\8d{;\9e|2¦x;©i3ªyD²w@§q<­~F¤|Gµ\81J­\83H­\7f@´\897\9b\8a9£\8c6 \888¢\83;Â¥\97L\9d\8f>­\93J®\88=¨\86?¬\86>§\9a5\9b\92/\98\90>\99\94:\95 +\9e\92-¡\8e:\9b\9b5©\99B\9cªI\95\9fD¡\9aEÂ¥\98D³\94B²\9dLµ\9cT­\99Y½¢[¸¯Y±¦`ª\96S·\9a[²\9fH²\9dRº\9aQº\9aOÃ…\9aO¿¦Jº¨L®£Q½±P·°Uµ­P°³M¹±Q·«M·´M±T°®Y°¤P³µTÀ³U³´`±±\¹²I¼¯N¹¨F°ªE·¢Qµ³JÇ®C̬C̦6ø:ζ<øFÒ®?ʱ=Æ©HíNÔ¸DÒ´JÂ¥O¹¨Z¹¦V¼­\´¤`¹²_¶®W®±K\9dÂM¨ÃK\9eÈQ\9fÃ]\99ËQ\9aÂa\94Æ^\9bÊZ\99¾a\94¹]\8d¼W\8a³`\8cÃS\84¾X\91ºU\91Èd\92È\\93ÃŒ[\92Ãi\99½g\9bÃdÂ¥Ãa\95¾k\96ËX\97ÈT\98É_\95Ã^\92Ã’c\99Úk\99Öj\97Ãp\8dÃh\87Û`\87Ú\nØckÓeqØ]m×^gÃŽ^wÖjtÄ`uËczÃlzÃ’erÃnoÇ^sÃ]iËboÑ^eÄZhÊScÊ]YÃZ^Â\aÆNgÃ…VvÃŽMqÃ…Tq¶Aq´Nj±Mi¹Ln·DxÀ>z¶C|º@z·?u³=\80±D|®9q«5~¨?zµ7\88²2\8b§5\80«3\7fÂ¥7\89¡,\8d\9d@\87©;\85¨D\80\9e@\89\9e@\84§:\92²6\97«8\93´9\89¨2\96°:\83®F\8bÂ¥@\82«M\83§F\82±Bs¹GnªPk®Us¯W~¸Lt±U}°[\7f©N\83´Jw³Mvµ^r¸b}¸Zx¶K\81´J\1d,2\1f1/\e62\1a7-\19=)\1e53#1;-4C57K90I1:M4:F8;B?=;J3:D4;G10S=2P:3ND4U=-\E2dU7eY>aUFkW<mT6iY9eY3kN3pG9nIBsN5fB7mA6jO0jW9vU3q\5v`,t`,oh:wd?qh=sk?ieFegCqf=oaB{_F\80bD\8cg;\93l<\91qG\98|I\95xA\9eoJ mAªiF°s=Â¥|D¦|JªzR±|H³zCµ\84D°\80=©}:¦|C¡\84E¤\8fH¦\91O®\8eIª\87<¢\8aC«\919³\921«\8d2\9e\8d6\9e\9c=§\9d5£\964¡\8b:Â¥\905­\9eE£\9fF¤\9fL\98©W\9c§T¤\9aO¦\95P²\98C«\9aT¯\9eUµ\9aUȴ]³\9fS³\9eW¬¡P¯ªL±«E¶\9aDáEÄ\9dJ½¨Fµ¯K´·N³¯V°§Y²°Mº¯H¸³PµÀV¹½M²¹O­³\¶©S±¯Y¬²`¶³^¶«Y°¨S¨«^®«X¸¡\±¦Pº¬S·­Gų>Ǹ9ƽD˺?Ô¬DÑ©GÌ­GǬGóAòHȲKĪPÇ®Oé^Ç©c¼¦_ª·[§·N¨ÂJ¤ÀM\9e»K¥ÅX¡¿_\9fÃV\9eÃŒZ\99ÃŒ`\9aÃ[\99Ã…W\9a»L\97ÃO\91ÂJ\89µU\8e¯[\8cº\\94¿c\93Êb\8bÉc\94Ã`\95Ãa£Ên\9fÊk¤½e\9b¾b\9aÃ…Y\9eÃ[¡Õ^¡åg\9cãn\97âc\98Úg\8fÃo\88Ãœg\84ßXxÃYyØdrÃ’_hÉZnÑZsÃŽasÆ_nÄftÃ…hpÆdrÃ’imÔgpÑgrÃŒfuÃ_mÑYfÃRb×TdÃŒYoÆQiÃŽOuÓQwÃŽJwÇLt»BlÀKb¹Gcº@e¼FpºCo¾Iw¸GsµHz¤<v¡;m®=p©AyÂ¥:x²8\84Â¥7\89©,\83\9d2\8c\9d2\90­5\8f®8\89°=\81«H\85®G\8b«P\8e£P\8c«H\87§D\8d±<\8f°>\87ª<\80«?\84¦L\82¦E\83·L\8a´O\83®Eq­Jo´Pw³Lw³U{±Vo£MpªQu­Kp³Zm³]{®Zy·Yv±O|µG\18',$-3\1977$;+$?<-8=*0:9>=64;:6C/6?93DA<8BA;FA2F.1C.7C22K?6BB8EE.UB:_T<bY5^]:cW>lV5rV6`H._O6_E<hF<hF7_A;mP._V5qX7r`5kY0oX8sj7}k6|iCrk=gbCdo=mnFwtH\85jD\81\H\8ecA\82^7\87g9\8dj@\9dn;\90\7f:\94n<§n=©k;°o@¦vFÂ¥q;¸uH³yD¸sM°}H·yB´\80>®\87@¨~GÂ¥\8bD \91S¨\92O²\85=­\82C¡\88>¨\89=\9f\93?\9f\99=\9a\925\9b\992\9a\93<¤\8e9 \8e;\9f\989¡ K\9f¨G\95\9fW¤\9bP\9c¡Q­\92B¹\8b<µ\93P¾¢K¶ªQ»\9fTÀ\9fY±ªL¯¢S­±J°\9eB± F±\9aK¸\99W² I¼\9eE¼ \¿±]·°T·«W¸¹W·µE¿¹J·¿]°µR¡´]«®W«¯\­·T·¯bº±Q±¦V´¯Y²¨\¬­O±ªR¶®L°¥=²µB¸¹>Ë¿IÉÄNÅ°EÖ®OĵSβO¿¸O¾µLãN·¦Xµ²^¶²^ðc½§Y·©Z²¼I§ÃK¥¶J¡ÅT§¾^¤Ã\\9e»\ Ä^\9eÇd£ÃV\91ºa\95Ã…U\93Ê]\93»[\83µP\85¼V\86º\\8eÃ…[\95Â[\96Â`\98Ê^¡Ël¤Àj\9bÃi£Æo¥Äe¤ÉZ§Ãe\9eÖn\97Ã¥g\97ëg\98Þm\93àg\93Ã’j\85×d\89Þ]\8aà[\84Ø^wÃaxÉbkÉZ|ÇXsÃ_oÃg\83Ã…hnÇboÊbsÕjmÛqjÚexÙ]wÉZlÓYsÖXoÊTgËTnÕYlÈF{ÕGtÃItÈCk¾>n³Gm°Kk°@u¯BkÂBk¼Ei´Nm¨Hl¡5y\9d2u®<u²:}´6\83Â¥7\84Â¥8\8dª<\88ªA\81¡?\85¬<y¡Hv§Bx°Kv¬Q\8e®H\8f»M\85«K{±9\82§C\91·7~«=\8c­J\86«I~®Iz¶Ou®E}³Kk­Ss­Vp¨Of¬Ju Jp§Ql Mi¬Rh¸`pªOv­\w´Rq±Q'-)\1a('\18+6\1f79#04-887>369;-C>/<@./?=3B@78DB7J:/P17N=3C76GF<BO8EP7KN3RG-WM7fV>fS4rU3lP8nG9bH8^M4c@AfD@eF3_X:e[4nf4l_;f\@o`4|c9~\9xdDpjIrqJkg:nrDzqG\82jO\8bhH\89aG\88c?\88p9\92p@\96o:\99{?\9ezA\9ck9¯i;±jE·nE²k7«i;´pK¸yR²tI®y>¯{Aª\83F¶\88@±\8cE§\93M«\97I¨\8fK¢\8a<§\83<\9d\89F\96\90@\96\92;\99\8d3¤\8d: \927 \915\95\8e=\8b\96<\92\99C\9f K\9e\9d^¨\9dQ¢ J®\96A¯\8fF¯\99I½¦N¼¦Pº©Sµ¥T¶¤L°§M³«Mµ­F±ªJº\9fF»\9bSº£N´\9eO¶©[¿£b·¢U¹²R¸´V±®K´¸T·µ\¨®]¦®a°ªV²«R©¦W¯±V»°Q·³X¾¶\¶ªW»¯O²§E°\9eH®£B·ªO¸²L½»LνKùEίJƱIĹUǵJ¸¬O·¥X³£W¯±T°®Q´£Sµ¤d©¹Y¬¼L¤¶F¡ºM\9aµW£¼V\9f¾Q »W§¾^¢Â]\97¾]\98½a\95½b\97ÃZ\8f¼R\8a»S\92»V\88Ã]\8a¿]\92À] Âe ¿l¦Ài\9dÃ…q\9bÃ…r\98Êg\9e¼a¡¼a\9eËl\9cØm\9cÃœg âm\9cÚp\99Ùr\96Öv\89Ún\92Ûh\8aáY\84ÃŽZ\82ËXtÑbwÇa{ÊetÉ`zÃŽg\82Éo~ÔnnÑfkÃŒcwÔi{Þin×ikÑlxË^xØ_o×QhÃœPrÑToÖLvÃNuÈCjÃ…@pÊHm½Lp²Eq¬=l®Fl¶Dk­=l±Ex£?r 5vª:w¢0{¬2\83©8\84«1\82\9d3\7f\9c;\81©?|Â¥Ez\9fLsÂ¥J{©H}ª?r´Ex¿J\8c¼M~¸Mx¨B\85³:\89¹=\8d°=\82®:\80ª>|µJqªRn­Sv¨Xq¯Mq¬J`¢Jc¢Tj®Rh¦Vf¤Yq ak­[q¯SoªNs¯Hi¬S\1c"*#"3'.-\1c,<!72,6=*/?4=.>;7287?4HB=<KB9N6BR65V><O?6D;ACE?NRDNVACT4JI=OQ2f[<dZ=rY2rU8lS@eD0pJ>eN?mM2fE2sY<g]2eb=r`?ma;q[6{a7|YEuaC~dFydKgn>osOvvA\82kH\88rF\88p;\85_B\98_8\92d<\9ci=\9bpC qD\93s?©lF¬nF«v?³h6©r9±j@¯uL¼tP´uQ¼pE°t>¿\84H´\87L«\8eVª\90N«\8bDª\826°\8c; \897\95\91@\94\854\94\95/\9b\966\8f\93@\9b\8b<\9c\8a@\90\8aC¢\9dF\97¢M \97Z¬\9dS££H¦\97N¶\97E¯\9bRµ§CˤE²¢V¶¢E³¥E±±U¾³Kº¥L®´G¾\9fF³ W·«O°\9eJ¿¡W¹£d´¨e³¯X½¶Qª¬X¸¨Qµ·X²ªZ²¶V±­Q®µN®¸M©±Q³¯N¶¹N¦L³´T¸¨M­¤C¹°@µ§G¶£Q³²M¸°UÊ¿JË°YδZǬW¾»_ŸM»³M½«T²¤P´­O¨­J«³[³¡f´µ\§°V\9dÀI\98ºG\9eÃT\97ÆN\97½[\9dÄ[\95ÊU Ë]¢ÃZ\98Èb\92Ç`¢Ì\\8fÂQ\8d¿`\8bµP\99¶b\96Â^\8f¾b\9b¹d\97¹`\9d½h¢¾q\9dËl\95Âf\9dÆZ¥Ég¦Ìj¨Õc\9d×n§Úi¡áf\94ßm\92Ã’n\87ãs\8aÞ_\8dãZ\87ÑQ\83ÃL\82Ô^\8eÈf\86Ãg\84Ã_\81Ã`\8bÂmyÉjvÔhyÓo~×`qÃœnpØjxÛcxÃW}Ô`pÑ]sÙWvÃŽRsËLyÈSs¼Hb¹DcÃJdº@i±>w°6y·8k²8uªIr®Am D~¡5\7f¬0~²-|­2\85±=}°2{ª3~©B~­Hw\99@~\9fNy§Mv¡P|ªK{®Qx¿R\7f¶R\85®Ds®?}¸?\81Ã<x³Is²Fq®L\7f¾Ot¬Tw´Ls¯Hs¦Oa¢FX©Pfª][­W]µTh¯dd¨fh°^`²PgªXc£Oe³Q!-6#-4\1e,6#'7++9,852:1560>8>=D<C=8M>BW89Q3?H>DO;AHB<RJHQTHKTCOPCKP:OU>XV2ba0i\7i_<mX;tY4rK4kO1jK9fM0oQ8rZDr]>o`:m^5q`2qe;tZEwZD\80ZO~dMrrNrnOwtNvpH}kF\87nG\93iE\92f>\99dD\9de=\98i?\99sE\97r@\98kI«u=¬v@¨wG©v?¹kF·l?¹lC¼kG¹rEºlOµzR¾~J¿|J¯\82Q³\82K¦\82;®\8b<ª\866¨\857\9f\867\92\86>\8e\8e4\94\8b4\8f\87E\93\82J\98\8dL\9b\8eN¡\96P\9c¢K\9e\9fVÂ¥\99L°\9dPº\9dU³\97M±\9fF³¤D¹\9aD¹ M¿¡G»¤KƯDñLõQ´­K¸®P¼­J²TȤLµ°L¼¨]¯Y¹°c¾©d³°Y±³U°±W¶­U¬²W£²L©®R§¯O¦X¬¬L§²P¨K´»P¶ºI²ªF©¬Q¯«O³§N¹¤SÀ®UÀ²Y¼­Wƶ]¿²eÀ²`º°SúSÅ·Z·±R±®Q°´O­©M²­Z¹°^®¬[\9d°N\9b¾K\93¾I\93ÃP\9eÊX\98ÈR\96ÃS\94ÃU\97¼X\96ÂY\91Ã…V\9cÆR\93ÂV\93À]\9a¿V\99¹U\91¾a\96·^\99¶\\97Â]\95Àb¢Æg\9aÉf\97½X\9eÊ` È\¥ÃZ¤Ê]§Ã[¥ài¢Ö`\9cÖc\94àm\91àf\99à`\99Ö[\94ØM\92ÕO\8eËX\96Èc\8bÇg\86Ãi\86Ãm\88Êa\81Éa{Ãk\83Ñg}ÃœfuÛhvÃœauàg\7fØ]vÖ^tÃXiÊOlÉRf½PqÀJd¼Of²Cj©Bj±En¸As¼=tÀ?w´9w§@q¤@\7f§F{¦<\84²B\81°8w¨4zª6w£@r­Dx£Iy¡Cz\9cBx\9aKj\98Mm¢Lx¬O}¹SwÀNz¼L\82¹SyºJ\80µNy·@sµMq­Nq¬Qp¸HnµBy°Mn©Io§Gm°I_²W]²YY­^^®c]²g[«b^£^[®^W«\f²cd¬Z+47(%<**9,.7.(8#7;)28+)749>C<<C;EN89T4EJ;=G>FC>6P=HKI;TL6KQ?MW=CM;KO8_W1XL7lT=j\?iQ>jO6rJ6mD;eB?rN7eQ9q[=s_Erd=oh-nV<{f<mb>ycI\80\Fxf>zgE{lFudG\81jE{iC\83iI\87qH\8cr<\8fu;\9fnH\94sC\9euC\98rH\96rH\9bkJ£~>®m6\9fmBÂ¥b7¸lH½o>¶jMÂtB½qI¾tE´xK¹vSµ\82N©\8cN¤\8eG©\82D­{8¦\80C\9d\8eC\9d\918\91\961\8d\8b8\9f\81I\9b\85@¡\8aU\9b\91Q£\9cQ©\95U\97 \¨£]§\9cL§\99S­\9cU¼\95K¼\9bE±¥N¸\9bR´£L²¤N¹¡NɧE»«B¿µO¶²D¿£M®«Y´¤N² ^¸ `¾°U¹®]¯µa¶¤\¯²TȤT©´R£´\­¹]±Q®®_¯½[¬Ã[­ÀI®»Jº¿Y·ºX¼µT³«W²ºL­µK´°Wµ¶Q¸®Q¾³S¿³W½½[½¬fîVµ½`´´Sµ®Xº±W«´]µ¼T¥»R³°X¯¶b¬°X£ÀG¡³T\8dºL\93Ã…V\95ËK\98Æ[\9bÉS\91ÉV£¾[\9eÂ^\97ÇS\9e¼c\91È_\9dÃX\8fµX\98¾]\93±c\94¾Z¢Î_\9bÆm\98Ëd¢¾i\9cÇb\9eÃ’f\9fÈU¥Ì_ ÌU Üc§á`¦×j¤ác\9cÙ^\97Ãc\98ÃX\8cÕM\98ÕZ\8fØW\8eÕ[\8fÓY\8dÓ]{Ã’e\81Ãg\8bÃ_\7fÃŽr~ÓpuÉfpÃczÙj\80Ù\tÃ’T\7fÃ’^qÃ\sÖXeÔWuËSl¾Ls¹Op¾Ad¶5p³;g¦Au¹9s´@\80·Bx³<|³>}©>\7f©4\86«6}´>\81§3v®,z\9d0vª=r¶@r­@w¯Ar£Hu\99Fp Eo¨Ds¸Lv¸X\7f¶Rq¶Rr´Kv¸P|ºBs¾Gr¶Br³Mh¾Db¸Gu¹Ql¯Hi¬EmÂ¥Ob²Ka¨a^¨SY´XU¨\ZµhT°cV¡aeª]Vªfa¯ak¡T%/7\1f,9)'2$&<(-3('0(28.-05/??-A@'AO13G6?H?@M69E98D:4SB<GM=JX2AY?IP:MI/YO,fN.fN5mU7bX;jXBdF8bA=gG?bL0eT/gT>kcEzhDza6~b)sU-{ZAvfCv\A\83X?~WA\81^G\84kI}hB\86j9\85h?\86o5\84x<\8fxG\93oK\93qB\9bmB£v;\99nBÂ¥vI¤w>\9foB¢c8³[<´`F¬pD´tJ°lNºkJ¶n@¯{@²yC²|V©\85V£\8cK±\86D­x@°\88@¢\8b?¡\91C\90\95<\98\89F \87D\9f\8f@ \8fL§\88P¦\92Q¦\95N  ZÂ¥\9c^©¡Y¥¢U®\9cN¶\98X½\99V·\9fN³\9bRȴHº¦JÀ¦D˻N¹µR¼°D¿\9eO³\9bQ¬\9e\°ª\µ¤Q¹¢V¾¥b¸¯_¾«V²¥X®­Pµ¬Vµµ\£»T­º`¶³\¹ÃR­ÅT°»T®¼Q®¹S±¶W¼±_º²X¶¶X´·X¶µY¼¼N··O¹ºW³»`·º\½¯`»²f±¬f³°^³¸[¸±b¹½[³¹Yª°T¤·R¦³S¨±[¬´W¥¸O\9d»M\94·J\95µS\9f¾O\96¿W\98Äa\93ÃU\9fÇW\9aÇS\98½\\92¾b\97Éb\94À^\95¿[\8f¼h\99¶h¡Åa\9fËi\9fÃ_\97¾c\9aÃŽa\97Ãi ÉY¡ÓYªÓ[¨Ã[ªãeªçb­ÜW¤Ü]¡Ú_\9fÖj\97ÃŒU\8bÃO\86ÖV\8dßN\83àR\83×\yÓezÊh~Õe\84Ãm|ÃŽq~ÈmqÃŽnoÃjsÇZyÃ’[x×WsÖPqÔVhÖKjÃUnÈRx¹Cu¹Dl¾Fs¹8w²<n£<x°I}²G{·Ju­=p©7{§>\84¬B\87¸8}³/v¯5u¦/\85\9f/\85¢4\7f±<o¯;l°Gx´J{§Ns£EpÂ¥Jp²Nv½N|ºYsµZr¾\x¸Qw½Eq¾CnÇHgÂHc¿Sd¿Ld¶Lg­Om®Pc¯Hc´WW­[V´SY±RT´^Y®cW­d_«XY¤adÂ¥el£\c§Z-+4,1(*&8'.7.1)51+1+42,.9-69)><19K08G?=C8=M>8G??FC4XL=JR4N]6FX1SK<MP*]P5eM7cL._O;bN7[S2ZL-^G;aK6cZ;cQ2l\@wd=wZ:\81b3}Y'}](|\7y\;vU7z^F~`>\7faEzfE~kG\8al?\8cjC\8btC\8e\7fF\89hB\91pO\9bcJ\90kP\91`N\9ehH¦t;«jB§fD\9bk9¬iD¨dH­iL£hJ®xA±vE²uK¡yE¯xI¨\7fN\9f\90E£\91F¯\8aIÂ¥\80I¤}F§\83>\99\99K\8e\95K\9e\8dI¨\89D¡\87GÂ¥\83MÂ¥\86F¯\94T¨\97Q¢\96Z¦\9cXª\9e]¹¥L·\9cG³\95Oº¡Z±\9aK¹¤R½¤JÃÂ¥NÄ\9eT·«O´¯P¹§V¿\9dP®\92L¯\99U³\9dP³¤U´¦W¹¡O«®T¶§U²¢Y·¥T³ªb¥±R\9e³P³³Y®°R¼ÂY²¿V¶¾Zµ¸Uº°`«¹c¯¹`±°]±¬V¼¶[¸À^´Ã`¯ÅT»Â\ȮQ·ÇR¹Å\À·cµºf´¹e±±e¸®i­º^°¸R³²W®»Uª·[\9f¬W\9d±R¡±M¢½R\8eºJ\9e´U\9e¿^\9c¾Q\96¹S\9dÈ\\96ÂM¢ÌQ¢ÀW\9dÃŽ^\9fÃŽ\\9cÃŽb Å] ¼hªµl\9eÈp¨Ì^¤Êl\96¾j¢Çh¡ÓaªÃ_\9fÖ^«Ãi­Ãa£ã\¨âl§Þ\£ç\¥Ód§Ãm\9cÃ’\\86ÕN\87×J\89ÚU|ÓX\84ØX\80Öa\86Èg\81Ç]\86Ãe|Ã…_\86ÆkqËbeÓggÉfzÓWwÉQsÃœVmÃHeÙDeÃPeÆLq½Nq·JpÂ?k¶:w«;zª=u£7x´Cz«KoÂ¥@}¡B}®6\89©/\88·6|¬:\84©2{¨0\85\9c+\8a©3z¦B{¬FuªAo¦@|¤Fx­Ho¤Ez¶Er´Su¾V{¸Uv¶Ul»Yq¶OgµJnÃ…Rp¿Kb¾TeÊKb¸U`¸I`¸He·N`«WW·UZ°Zd¾]W°aYµad¸WVª_`ªaf\9fha c^£a+\e,(%(,/'150*/21+*/,45)5:)::.::6>F/6C<6H:6P@;HD9FB4RI6TE<IR6MX:MS9NX:ZU-^P/bI,eO1aI/_D0^C1ZC6aO7]TCj^?if3wc8|\4wV-y["zV#u`2~]2\80a2{]A\80dA{cI\81eF\82lF\7fmB\84yB\81uJ\8axI\90mV\8eeT\96\T\8dcT\8biU\93`L£hD¨j>¨i9¡e?\9ckCÂ¥cF¡jF¢jB±yA±y<«x? wE£\85M¤\88G«\86B§\8cM­\8bN§~I¦\8dP \8bF£\8eB\97\96I\9c\96N¦\8aB\9f\90H§\88B«\8dO¶\89T»\8dN³\9dV¿\9aQº\9fY´©V²¤Qª¨U±\9dQ«¡R³¢O¹¤T¿\98SÂ\9cS»¡O¼\9eN¶§V³\9bW¹\99L¸\9cJ¾\9bR¾¢\°¬X³²]¥ªS§£U­ a´¤`¬¬a®­X¨µN¥¸U«¼T±¹X¾Ç_µËZ¼À_¶²g«°_­´W©ªYª¶\´µU¹¾]²Ãb±¾[±Ã[¹ÉS´ÆX»½d¸Äa°Ëa·Âj¼¾d¸­`¶ª]µ\³®Xª²[£¹_\9b³R\9b¼V\9dºT\90¶W\93¿X\9c²Y\9d¶_¥¶\¤¶T\9bÆU\9cËR\9eÉP£È_ ÃX¤ÇZ\9dË^\9dÃc§ÄgªÅj©Ãj¬Êd«Åc\9aÉi¥ÕgªØd­Úk¨Öc«×g¤ào°ân«ág‡f£äZ\9dàd£Ô_ äV\8câZ\80ä\\82ÃœN\8aÞZ\81ØU\82×\\81ÊW{ÆVvÇb|ÃŒc}Äc|ÃŒdjÃcnÄYlÃ`wÊOqÑOmÕEoËJrÃ…MkÇFfºBh¾DpÂ4m¸4t¸>z©7|Â¥<\7f°@u«:t¦E~©A\86­5\88²8\88¸3\89¯.\83«+\8b¯2\81£3y\9d5\81¨@\7f°8t®9z°6o¨BjµNk°Mm·Mt¼RzÇTxÀ^xÃ]pÀ^d¿Rd½OmÄLrÇTuÃ…RmÆOj¸Pa¸O[¹Q^±M]¸Wh°Yl»__»[c¿_^´Zb·YW¶bZ®gW§]X©RR§W(\18)((+50+31444*,-\1f.(,3+)?/.>)1D24D47;.+E@+@@:BH*I>:PB8EU,IT2NL+P\<WT*QV0QO.`U4WF5ZL+^G5[W(bY6[V2\M8kO1x`.vd,n`1|_1r[!uX)\86['ye6\81bB}\>\80XE\87eF\8bmE|s=\8aqA\7fyC\88kF\86v;\88mM\8feN\84aI\91aX\8b`F\97mC\9d^I¨a8¡k9\9bp<\9dh>¢cG§kC\9dqG¬p<³wC±v>¤\86;°\87;²\82?©\8cC°\84I­\81L \83Q¤\90O\98\8aP\91\89B\92\92P\95\8eH§\91V\9e\82C©\83?ª\8eQ±\95Wµ\94S´\8fO¾\93U±\9d]¶¤Z¸\99P²\97Xµ\92X¹\96^ª¢Tµ\98X¶\92S¼\95UÃ\99Pº\9fL¬\97V¶ O®¢N¶¤LÀ\9eT¯®Y¬¦^³¡]©\9aV¨\9dX´b«­W¯©Q£µQª³G¨ÃV€O¬ÀYÂÆa¸Ãd»V¹µY©ªT±±X®®e¯¹Uª¶V­ÈU¸ÃXªËVµÇ^¸ÇQ·Ã\½ÌXÃÃ…c«»j©¸n¦¿h¦i¯»^ ¹U¦¬X£ÀU¦¸T\9e¸Z\98³V\97®S\9f¸Y\98½W\93°b\9d´]\99¼W\99ÇT¤ÃR\9dËZ¤ËY\99Óf£ÑeªÊj£Ç`\9aÓk¡Ìn³Ës±Ëb¯Äf¥¾` Îu\9fÊf¯f¤Ãa¢Ãf®Ö`¢Öd¨Ù^¶æg­×W\9açT\95ØO¡Ã_\8dßY\85äQ\83ÖY\83àN\84ßV\85ÓN\82ÔR\84ÈW\81Ô_\80Èa\82ÃŽ_yËi{ÃŒ^uÊZjÃbrºarËOl¿FlÊDnÃ…KlÄ?p¾Eg¹Kkµ<j·A|´4z°8\81³4y©6v¨>\81´=yªJ}«4\84²:\80¬-\81¼8\8cµ*~§&} ,\86©<\87Â¥?\86­7u­Bo¤=vÂ¥Am±DnµSr»Wv´XtµOhÃ^xÃir¾fmÇTm¿\qÃŽSjÃŽNgËMdÃVaÄXXÀKT½VcÃLU³Tb¸Zf¬Qb¶V_µ`W½\S°Y]ºXX°ZW©bS±`R§WK\9fS.";2\1c4(\e8-'-.5-71%30*4.&A0#>'/=13?,&C0+<8/:=3;?*@=6?I9LP/HQ.F[2QZ0Jb/J\4IN8XQ+YW&JQ*[[%`[0dR/`T2ZK7cN/iV1xU*sV%sZ+vR,~O#\7fW1\80^:\83c8\82cB\84iF\8b^C\89kF\82kE\82pN\82iM\87gF\8eb<\95_?\90hE\86]M\88`O\91^I\8emJ\91c?\9ee:\97c6\97m;\9ckD©gF±rB©l?¯v4©t:®z7«\845©}:®\809´}:¨~@¬\86D¤\8bM\9c\8eL\9b\8dI\92\90C\94\93K\93\98K \8cX­\8aM¨\8cC±\95@­\91H¹\89Aµ\8dI´\89T·\92X¾\98X¸\9fL®\95^±\90_°£V°¨]¯©]¯\99T²\93WÄ\9cQ¼\96J³\95N¹\9eT²\9cM³¨H±¦Rµ©P¶¬Z¹ªN°\9aS«¥W­¨cª¬R²©P©¶M£½NǦM«»Y²Å\¾ÀU¼¿U¹¹Z«¹U®°L¯±T·¼_­À^€P¦Î\ƒX®ÊY´ÌY¸ÒS´ÃS¿ÃQ¹Ä]ª¶V§²`ª¹a¡¼g\9d²Z¡«^¨®Z¬¼T¢³T\96¬Y\92­Y\91ªa\8c¬a\97½`\9c°V\96°W\91¿M\93ÇR\9eÃU\9cÃb¤Ò^\9aÃŽa­Ãn±Ói¨Ãs¢Ìm¯Ìk¯Îo¯Èf¤»`\9fÀg Åp Ãn\9eÉ\¢Ãg¨Õb¤Éb¬Ë]ªÚ\²ß]¡ØV\9cØS\98×M\94ÃŒS\87ÔO\89×S\80×H\87äM\7f×T{ÚI{ÛF\81Ã’NyË\\81ÕYyÊX~Ã]pÕVpÃ`mÇXsÂ`xÇYm¾KnÃ…DmÃ…Mr·Pr·Bhº@l°=sº=zµ6x¿6\81¹4w¸4~§5t²>{¼B\81±<\83¬2\82²3\81À7~µ;\82­.\7f£/z¨8\7f\9f/\85¦7\82§;vªAw¯Gq®En²Pt¶Vm­Yh´[fºfjÀbm¼YmÂVoÂToÃafË`lÄTgÊY`ËWb½XR½Z]Ã…\[¼Vb»SY¶PP³TR´U\³aU®^P¨]X³TQ²RH¶`MªXL¦_4\1c(0!2= )3(&/'\1e9/\1f01 ?%(C5.831@;/44#72\eAC$ED\1fDJ/>D09O*IJ6CL.FL,BX+BT3@\;NV1WQ3TW.HS-RQ&[W\1eaY'dS*jV&kS+hU'z\*tW-}c"|b\1f~P!\85]2\85W1~_5\8d`9~Y<\88f>\85nK~oA\87nC\87hB~a@\8c^A~`C\8efG\8a_Q\86\Q\8fnJ\93iC\96n@ k5\9er9\9em; jE©tE©l? f<£t=°w3¯x:­\8a=²{?¨\7f9¨\7f:Â¥\86;¡\83J\98\97M\94\88H\9d\89@\9c\95K\91\92X\96\93U \8dY \8fI£\87U¨\89Qµ\91D­\88I¸\8bS½\8bT«\93T·\94O¾\9eWµ\94Vº\8af·\97d²ªb·¤T¹\99^Ä `Ã…\99]·\9aV»\99W®\94O¸\93W·\9bY°¢c´\9c\²¢_¨§]«¡cǬW°ª_¥ [««^ª¹P¥ºT´²[¸²P·Ã_¼ºNÂÃR˵Y·¿O¸¾H¾¾Z°º\¹¿_³¿P¯Ãa®Ì\®Ã_¯ÄR®ËR¬×T®ÄT«ËX¨ÀY\99¸]¤´e\9bºj¡·`£µi¦¿e¦µY\9a¸\ §]\9c´T\8c±d\9fºe\9f²c\98°V\9b·`\97·^\97¹N¤Ë\§Ée£Ëa§Ô^¦Øc·Ùj¨Éb¤Ën®Ãm¯Éu€cª³k¦½b¡»d¢Ãm§Ña Ê[§Ò[¡ÎX°×YµÙ_¤ÙT¢ÛW\99Ô\\9fÃR\89Ã`\85àY\92ÕQ\87ØM\8dÃœR}âW\84Ãœ[}âJ\84ÞR\83ØT\84ÙXwÙ`\81Ã’UpÖWuØTtËN{ÂO~»Vt»HoÇGwËLvÄ@q³Di·;p¸8jº4t¯<\80±7u´@\86´=w´8\80µ2\7fÃC\83³:\88·:}À7}¿4\82¿1\80²6}¸-y±2\83°<|¢9\84Â¥:~¶I\7f²EpºAo´Js¼\m¹Pu´VrÃ]sÃatÃŒ`rÇ[sÇYnÃ’bbÑi`ÃŒ\[Ã\WËe\ÂVL¾^OÃOZ¾\L¿YT¹NU¹UL·T\µ^U§^N¹RR¬LT¯RN¿ZQ®[Qª\;%)<\1c,5 %7\1d\1f<$\188\1e\1a?.!<-&E;\1fA9(C@\e8>\1c9B#=A\1a5@\1e>C)E?)AI+IW2BU7=V=CJ3FK0GT0L^)J`/La&H`%NU\1eUQ\1cWV\1c_V\1djK nL\1fpY\1ajV%qS y_%~V){]"t`-yU9\86S9\86Z<\7f`;\82]C\89iG\8anB\87qC\83lA\88hB\7f^@\87`F~jF\8djA\8beK\8bgF\8aeK\96]E\97b9\9eiF¢rF\9ez;¡s@£tB£mA«z4¨x8§v8¦\853ª\89@©\80@¬\88@©\85B£\939\9c\96@\99\8aH\92\8eH\9a\91T\9d\97Y\9e\95\¤\9aTÂ¥\93P¯\8cU¸\8bS¸\8bN¼\8aO¶\8cN¹\8dQ¯\92U¯\8d`³\8bZ¶\86e½\8f`µ\96`º\9aa¾\96fÇ\99aÈ\9diÀ£c¶¥a·\9eZ¾\95SÀ\98[º\99e¯¢d°\99k­\9ab°\96d­\9ed´\9fcǬZ©¨_¨«[®­M§¸O¬¯[¸µX¹¾OºÀS¸ºT·ÃPµ¹S¾½N³ÅQ¸¿_¯ÃZ±Å^«Ñd®Ã`¶Ç_¸É\±ÃP°ÑP®ÊL§ËS§ÉX\9aÇY\9b¼Z\99·[\9eÄe\9aÀe\96¼Z\9f·[\95²X\98­U\9b¯b\98¬]¤º] ¸_\97²`\96·\\9f¸b\9cºX\9c¼d¢ÃaÂ¥ÃhªÃg©Êf¬Îf¨Éd§Æcƒm£Çk\9cÂu\9e¹q\9fÄg¤¿i\9bÉk\9fÃc¨Ãg§ÃYªØS¬ÒN£ÃM¦ËU£Âa\9fÈ[\9dÕ_\8bÙ\\92ÛY\8aàZ\8eÃT\87ØS\8eÃ¥`\8bâ[\85Ãœ\}ÃœWzàU{ßV\80Ã’W{ÃW\80ÔWuÃN}ÊU|ÀMz¿Nz¼A\7fºJsÇGqÄBwµ<z½8l³<r²Aj¸Ap´;zµ:|®5|¶0\7f»1\84¾5\8a»:\8dÀ6\92Ã5\85º0x´+x¾,\80»<}·=\83ª=\83­>\81¯J{±E{»E\80½K{ºOuºWoÃXr¶RlÃTkÇ^sÃdoÓjmÑghÃŒf`Ã’f\Ñg_Æ^RÃ…aSÉ\TÀRP»WH¶SE°RE»SMÃSUºU\°SX°UZ°[K²UG¼NQ¼VW¶ZRµ`5 $9\19'=\172:%0: !/,\1c12.A)465'2;\1e15&CB'4F\1c;A\1cH@%ID.JP%BE/AV19O@>Z;BQ8JN.FK)AV2D[+N]6A`.GZ.MJ\19bZ\1eiW+kV*qN#iY'de%g_%vf+nU(rd0uY+y`1~ZE\88\D~YA\84g?\8b^:~aE|f@\86iL}mI\7f^<~fF\80aA\8c[K\8cgK\8c`?\95dJ\8af<\98_>\93jI\9fpD\9fk? l>§l<¦\80D£|6®q? w3ª{?¤{G²\84E²|I¡zP\9a\8eH\9d\89H\96\8fN\9b\8dT\9a\99P¢\8feÂ¥\91\¡\9dY\9e\8cY²\91O³\93Z¹\8dV¶\87Mµ\8fJÀ\94F¸\8fM»\92]²\96b¾\91Y¹¡^°\99f³\95fº\9c_Ã…\97c¤aÄ\9a\9bi² d¸¢]¶\93_¶\9fQ· S±¢b°\99`¯\9d_²¨d§®W¦¢a ®]§ªS©´[ ·[¸ÃN°°V¸ÂS¶Ã`º½QÀ´XÃÀN¶¶O³¶Yµ¸S¯ÈYªÃV°ËWºËk³ÃY„X³ÎW¤ÌQ¬ÓG\9cÂK¡Ã\\9eÀZ\96µc\98¼Z\91³b\97Ã]\9fÃ…W\98Ã^\99º]\9f»L\93§X\9a±R\98¸X\96²^\98¼\\8e³]\91µa\91´a\97½`\9dÃŒk\9bÆ\«ÀY¡Èk§Çi¡Ë`±¿d¦Çj¨ºm\9f¾f©¾m¤ºk¢Åf§¸Z©¼`¥¾T§¿V¨ÃY¨ÌP§ÃR¦ÄS\9bÃ\\9aÉZ\9eÖT\91×U\92ÕT\8fÙU\85ÛZ\92ÃY\8fÖY\8açN\83Ö\\83ÕZ|ÕXvÃœ[t×M\81Ã^~ÃN~ÈLzÃMv½PpºOxÂG{ÂLpÃ@p½E{¹@vª3uªBf¹Gj»Jo±=\86¹F\82¹;\86´7\8cµ2\8cÀ:\7f¿5~Ã8\84´3wÃ7\7f².\7f¹.v³2\87²J\86´L\8d³Mz¨J\80©?x­Fz²P\85´Z{ºP}¼Xu´OhºYj»lb»aeÊkfÃgsÃ’[iÃ_`Ã’kSÂjWÃŒcM¸`Q¹RF½]N²]O±`H¸bXº`Uµ]_³SY°PQ©TM©KR²ZE¶aV®cN°_;'2<"*1\1d35%1</053,90)4371-%20!<=%<? CF#@B(:B/BC:DF)MM%LU8?U9KM+LU.DO5MJ/QS6G]7GQ.JR3UY0UQ%X\$hV*qT n^&rg&kb$u^0n^,lf,x^1z`0\81Z8\80e;z^Jue?\80_7|k;\83eB\80c>|hEwjK}i@\88`?\87]>\91_?\8dZE\94]<\99b>\92n@\8emL\9arA¡t?«jEÂ¥pA§z@¤\81;¡{<¤{C\9a\838\9d\81>­\7fG°yM¯tR£|O¤\84K\9d\88Q\99\8cP¡\96U\9b\91W \93b§\89e\9e\8f_\9d\86\«\8bX²\93O­\8fR¾\91\8bDº\8aM¸\9a\99\¹\91a³\95[´¡c¼\9cg²\96\µ\97X½\9e`¹¦e»\9ed·\92j¼\97b´\97`¼\9aW¿\98N±\97M¸\96S¶ `©\9cU¦¤X¤ ^¥¬e\9f·Y£µX®¼_¨¹X®¶aµ¼\¿¿_¸Ãaµ¼W»²[¹²^²½W«¹S¥¼UªÈ`´Ç[³Ëa´Éf±Ã[±ÈN«ÃK¤ÅI¡ÄO\98ÊM\9aÀQ¡½Z\98³`\92¶a\96Ãd\91ÀY\96»U\94¾Y\95½V\9f¸T\93³T\8e©O\8d©W\8b¸R\92¹P\91¬W\97´W\97³c\8fºp\98Äk¢¿^ªº[­Ç\¢ÎdªÂ\Ǽb¨¹f¨·m¬Ãt©Ãpªºd®Ã]ª¶\¤³\¯´Oª¸R£½U\9e¼M§¼O¢ÅP\9bÊK£ÑN\9aÈT\8cÃV\84ÚX\85ÚU\88ÑK\8cÑO\84ÛV~ÚQ\82ÃK\85ÃK\86×UvÃN\7fÉX{Ã’[vÃ\{ÀQuÃ…Hs¼Il¿NoÃŒBlÆLrÀGs²8}°7x®4r«?z¨9s±Du¬=\83¬@\87¯@\85¾@\8d¾D\88·6xÀ1uÃ<m¶>t¹9t½.{»4\80±;\86¯H\88·N\86¶U\7f²P\84¤I\8b¦T\81ªT\85µY{²Uv¶Q{°Xw¹ec¶hd²ijºmp»]mÊ]\ÈbWÃ…jUËeNÉaR·bJ¶SBµWE®dL³_Lª_U¬]b±WY²QY­UN«SR¬MH«UD²_HµYN­V8(/F)12'.:#103-11&229:8?.851'$?-&9B*@9"@="GG4G=?H>+OA-B@'DE9PM4PV/GM.TM3II5NU3IS/PH3RG(_O(fP(qR'eO5hW'uT/ph1jb)pb(kY'ya-{e2yZ@\80d;{lE\86j:\84g8\86n=\7f`I\87fH\88u8\7fh<\7fsC\8al=\89lM\87fC\86eR\8ekN\8eo?\98iE\92tE\95lF\9arA\9dj@¡nD vF¦sF§\81<\96yF£{K \85D­}R®~O¢x[Â¥\83O\9e\89X\9c\8bW \8fX\9d\91O¤\9c`£\9cY«\8eXª\96Z°\84]§\94O­\8d\¯\8cS±\88M·\85<Ã\96HÇ\97UÃ\97Y¸\96V´\9e_±¤b«¤f²\9ej­¥^«¡`²\98h±\95a± `±\98a°\9eYµ\92M»\97I²\9cI«\91\²\94^®\9fW­¢P§ªb\9a§g\9c±W¢µY¢º^°»SµÀa·Àb¼º]±Å]·¿h¦¯[¯­`«¼d«»`¢ºS¯¿_³Ãg²Åe¸Éd©Åa³¾N¦¿TªÃG\99ÂI\9a¼P\9c¸N\95Ã…M\9f¶Z\9a¾S\9aÇW\98ÃY\99Ã…U\91¾`\9aºQ\8e³R\97´K\8dµM\91¯X\8a¼N\8f¶S\8d¬N\88¬P\8d»b\8f¹]\95ºi\97Àa£Ä^\9eÈZÂ¥Ã^¤Ëa°¼`¨Ãe¬¿r£¼v«´n«¸`­·f¤±^®¶Y¤¶P¬­P¥²M\9f·R ¶O\96»H¨ÈO\9cÔU¥ÄO\9eÔ\\8eÃX\8aÙY\81ÛS\85ÙY\84ÛZ\7fÛZ\7fÙJ\89ÃŽCyÄLrÃP\82ÃŒZsÑ_\85É`\86ÃOuÊWx½SvÉD}Ã:t¿GzÃGy¸7\7f´7\80³:o¨AzÂ¥Cn²Gv¨;\81°G\82ª=\83®K\81µ8{¶CxÀ>pÀBpÀ9{º>}¹:t¾9\7f·E\81¾G\8d¶N\8d´[\84±S{Â¥Y~¯_{±W\84¬Zw½Qy¸V{·Yf±hg³pd¯ajº_g½\cÃfWÇdY¼_LÉ\VÇ\F¾^GÂVC¼`D­dN±_R¡^\¦Zb±P`°X^¸]P§JM¯JU²ZN¬aS±ZS«bB%6>+7@+>:)5..92-+6-,576/103,%77%B5%<< G7'LD,R?7WF.O>,N@0JD(SH)UH.QF2LQ5RG+VM0RN2RM5YJ1\M+dR-jL0kM(hP1kS/sa,nf0t_&|^&s`5x_=ncGlj@xhE\85n;\83f?\83h@\89l@\82jC\84q9\81g:\80k?}mL\89pN\87pH\88bQ\86kM\8eoQ\91vN\99lK\9aiF jI¢mD¢lH§lD\9esJ\9ezN\97\85F\96\83MÂ¥\8aV¢~Y£\7fX\99}U\9f\84]\96\84c\9e\7fa§\94S¦\97V\9e P£\9cW°\95P®\8bWÂ¥\93\¨\8dU¸\82Q¶\85Q³\86S»\8fDÆ\94FÃ…\8dOÆ\90T¿\9cZÃ\9f]¶\9bh¯\9dp®£gª\9fc§£j¦ i«\94f¬\90`¬\9aS®\9cT¼\90O¶\8aN®\8fN±\92V±\99Q°\97O¥¥Q©©P ¢]\9c¨[©°bªºb©¸\¬¼V¶½^µ¶c±º]¨¾e\9eºc\9c»_\9f«b\9e¨\ª¶Yª»^ªÄb¶¿W´ÈZ¹¿S­ÂT¯¸J¦±P\9c«G\97µM\9b¼F\8fÀH\99ÃM\9bÈV\9cÃ…P\9aÀR\94¾U\9c¶a\9b¼Z\8d¹Q\89³T\8b¹O\87·T\8d¼Q\89¾R\8e°Q\8c¯V\8dºU\8a½b\96³l\9e¿m¢Â`¥¾c¦Äa°¾b«Ã_\9e¸n¡ºn¯¼h«­l²¹o³µaµµW¯¶U¯²O\9f¯W\9c·Y\9d½L\96»O\99½D\9dÈP¦ÇV\9cÉ_ ÉY\98Ç\\87ÑT\89ØQ}ØQ\88ÖY\85ÃW\87Ã’I|ÃL{ÇMxÃ…OrÑV|Ã^zÃY\81Ã]tÃŒ[rÇOxÄM|¾=\7fº9\83Â=\7f³:\82±2\83«.|¨;}ª;x²>\7f¶8x¯=tª:\80®Du¸Ez³D\7f¶EvÆ:lÃ;rÆ=xÆ?qÉD\80ÃR\82»Q\82¬O\84­]y©f{¨]|±]\81ªa~»X{ºRy¹Vl¬edµdi±lp¶^n¼_o¸af¼f]¿bV¸WZ¾PLÄWIÃ…XMÀYQ²]I­fF­XQ¦Y_­Oa³TW²SV¶SZ¬UN¦TW¦ON£YIªcH®_585A%2968D52?:26<0=;+A2895+>-8;.(A0)I@.I76R@,R@2R@+TB6ZI)YD#L>1OD&ZK7XV:\X:XW9WR7NU<WJ5cK7bE7xP<tS7lG9rO3ye/je9sW6t`*e]0olGzl>x_C\82gP\84mF\85b@\84eA\85gG\8apG\81s@~w9\82iD{i<ziC\81bI\8c]R\91jV\91`L\98sN¡oT\9apO\9bsO§tD¦jB¨xQ\9duBÂ¥|M\9f\83P§\89Uª\83UªzT¡uZ\9azQ¦~\\97\88T\93\7fZ\9e\86d\9f\9cS \97Y¤¡\¦\9dV·\9aY¦\8bV\9d\8aM«\8dT¸\82J¶\95O´\91K¿\97Q¼\94K¶\8fPÀ\9b]¶ d´\9ec³¦j³\97o«¥^­\9dk©\9a_ª¦]³\99Z³\95X»\95N²\85Z²\92R¸\8cPª\9fX¨£Zª\9fS£¢Z \9c`\9d\9bh\9a\9ag£ª[§¶g¥³_¨¯g³²[°ºWª¬f¡·b£»Y\99°Y¥¬f£±Y§±\¯¯S°¿^©Âb®ÊO¡¿_\9a±]\98´J¡¬V\99¬O\97³G\94¿K\8e½O\9dÉR\94Ê^\9cÃR\97Æ\\97Àe¡¹`\9a·^\96ÀJ\95·U\8c¹Q\93·Q\95º[\97¼Z\8d¯Z\8c°P\91®`\99²Z\9a±d\97À`\9d³f£½d\9cÃŒj­Èg§Ìj¯´n¤²t¤±k´­m·«b®¶]¸®Y´¹T§®O\9d²U¥²G¥ÅL\98´A\9d´E\94ÆL¢ËR£ÊY¡ÃW\8aËP}ÕW\84Ø[xÔQ\81ÇK\81½J\87ÆL~ÃOxÃŒH}¿X\7fÃ…Q~Ó]}Ë^\8cÆ^{¼Rz¼FwÂCz¿?~½G|»=\85ºA\83Â¥7\7f£Bs§;s­I\7f­>|¤D\88¤8\80Â¥@z±>|°L\89»>}ÀJn¿F{¼Bn¹HzÃIyË={¸P\8a¼_\7f©W\7f­_r\9eU{£Q|\9dby¤W\7f³Yy¼Sk§ai¯Zm¢dp©wj²sn±ak¶_g½`_±fT³aYµWG¾LGµULÃXJµ\H³eS¬gL£^bÂ¥XXµVVµZ^¸XV­VW [O«SH©\L¦TK¡W=399/.=0&G9)P>)HB,DB*=67816D9<S-8P13J;6PC8Y?.TE-O<-ZD/_C5W@*Z=4RG.YI<UP=`T9\P9]O<X[?eR=kL;mO2vH8|D=tM7tM7x[AiZ@iZ5c`7fh9ok8vhE\83hW\83_W\82fO\85mE}sG\81iEynJ\80kD\7fn<\7frEzg;yj@za>\8bdI\88eM\89`T\91fX\9dmY\95qU\97qW¡iZ§iKªtO¡|I\9f\7fN \86P \85T¡\82X\9e\7fT¡tU\98tR\9d}X\9e\83X\94\80^\92\90c\9b\91^\9f S¬ S°\9dZ®\9cS­\97W\9e\91T\9f\95S¬\89P«\8dJ³\98Hª\94F°\97O±\93\¾\98Y¬¡R« Z¨\9d\®\9cg§\92b®\98Z¥ ^§¦Pº U»\96S°\98P°\8aY±\91b±\93]ª\98V¬¤U¯£S¨\9c`©\99f\9d\99f¢ j\9d d\9f ^\9a®c£²_§¯a\9e¨h\9c­a\98ªd£¬`§®T£±Y§¶\ ¬W¬·X©¹X\9e¿^£¼R\9c·Z\97±X\95·\\91¶O\90³H\9bªK\9b¼R\96¾Z\96¼^\97ÇW\8cÉS\91¾_\9c¼a\96Èf\98ËZ\93ÈR\91ÇJ\88ÂL\94ÈY\92¾T\93«U\90©^\8e®a\90­^\99³]\9e¶^¥²`¨³eªÃa£Çc¥Ãm¯Åo¨¸p­³q¨³r¯­h­¬f¶µY³¬T´´Q§¨Mª­T¤­S¥¾A\9cÃF\9d¸C\9e¸B\94ÂN\91ÀE\97ÃI\89ÊE\83ÃLyÃ…YzÆY\7f»M\85¾E\87ÀD\85ÇLxÉO|ÊP\87Ã…^\8bË^\8f¿_\85¿S\82ºMzÃG{¾Q~ÂK\88ÀI\84´:\87§E\85©>\87®C{§Cx±F}±H\8cªD\89 ={¢>xªF\83ª>\8b¶G\86²Hu¯Cw¬@t¸G{ÄG}ÂE{¼M\84²^\7f´doÂ¥Zh\9eOn Tg£SkÂ¥Zu±Uy¬XwÂ¥[l§Wr¬iv¡rkÂ¥lg­nh°n[°^V¾fXºgS»USµQNºZJ½UU°eO°eX¦cX¦VX©L\¬OS¦U[¬]Q©ZX¨UO®ZG´PW§YW¤P780A019@/F=&=K!EE)<K'=5.L58@;4K?>V11P38G<:NG4JL1P=4TL1WE/ZB8[A2]C3^F4`N8YJ@^S>YV:aS3oR3pWBvV:uG5sFEpPCnV?sXIoYJpP@bU9jd?sdJwdLr`Q\89`P\88]W\87bK\86nV\87lVyeG{qV|rGw|L\85tM{nC~eI\80rK\8ceQ\91_L\99_K\9esT\93x_\9ayT\96p`\9auK\9b{T§\80P\9c\85R­\80T\9e\84c¤za§\82e£o_\9d\80W\9f\7fU\94zS\98\86T\99\8dY\98\8dQ«\97`°\9d[ \99P«\8fR¦\98Q\9b\8aP \87W©\87Sµ\97M¹¡N¼\96RȢI²\96Nµ\97_¹§Q«\9d`¬¡Z¶\9af´\9fc²\96Zµ V¬¬K´¢R¶\94I©\97Y­\91V¶\9bO±\98S©\99S­ _¡\99f¦\92a\93¡n\9d\9be\98\97f\94\98`\94­^\99°c\94«b§¨f\9f¨a\9dµb¡¥c ¥R\9c­S¨¶_£µO\9b©Y¦³Pª¯W¥¹T\9b°P\97©Y\8d¦^\8f²[\93¬Y\8e£N\91§L\8d¸T\88¶[\94¿Y\95½\\86ÃO\8aÃT\93ÄV\91Ãg\8eÇa\92ÃR\81¿W\85ÈK\81ÂV\8b¹Y\92°c\98²c\91¸V\9c¯T\96®\\99µ[¨µ_¨¶^\9c¿m¦Äa«Èl§Âi³²k²­q¯¬c¬«a©¼e»¿U±¸]µ¶KǦT¦¬J²¼C§¹F\9e»J¡ºJ\98¶F\93¿T\93ÊI\8a½A\8dÃŒA\83ÂI\82ÊS\82ÈO\8aÃL\8eµC}ºS~ÇG\88ÂD\8aÂG\85¸P\8eÄQ\83¼Y\81ÀJ\83·D|»J\7fºE\84¹O\85«H\82ªD\84´F\7f³:\82°Cx¯I}¨K\83µH\88£H\8eª>\7f«F\85Â¥L\8d«M\93¬?\84¹9\84³Eu»;m²<r»K{µG\83¹Wu­Uu¯bw¢bi¨br\9f`t\9f\s¦`g\9f^s£cu¤YqÂ¥`o¦`}\9clmªpk©g\Â¥j\³`a¬j_½eS¸^O³XZ»a]¸`[ºaX¬XR¢T]°VS¯T]­XZ©ZUÂ¥SX¤SW©QZ¬XF¯WW¡QO O69%8>&DI,FG)=F+@N'II,GE3E?/J96U9?T:=H;:H>8R?/QA6SI<ZC9Y=7Y>;SGB\K;XS3_N:o[;m[4iT:gW8qV4o[;jPCtP<zGHtOHiVBnZHiXEhUJn\Dl_JxTKrVIrWU}`V\80cd{``}^V\82fW~oS\7fgX\7fiM\7fvF\85yK\84yJ\84mO\84nD\94sA\94hH\94`J\95g[¡l\¡xb\9bpb\9by\\94x_\9c\85\Â¥\81h©\82e \86^¤~eÂ¥\81[\9f{`¦|h¡}^\96\8cR\95\89V\9c\92R\9f\91O\99\98Z¤\9c] \94c\99\90]\97\89Q£\92S¬\94Mª\94K±\9eG¸\9cQ±¦Mµ\9eO¶¥\°¢Y¶¥Pª U³©U¯¦Z«\9cP¬\9cP«©H¶¤O©©S¬\9fK°\9cN°\98X±\97T®¡R¤\9aY©\9b\\9c\97e\99\96l\8d¤h\8d¤h\8e¤g\86¡e\8f£h\91§Y\99¤`\99 _\9f¦b\97¬\\9c³_\95«P\9d§W\9b±T\93±L\9a¶M ·Q¢«Q¢°V\9dÂ¥T\95­N\8c§V\8a¨N\94\9eW\93¬Q\8b©X\8d­S\7f´R|ÃO\82¼O\85ÉJ{ÈV|È_\89ÈY\8dÃT\89Ë^\89ËU\83ÉT{¸a\83¶^\8a´]\94´Y\9bµ^\9a½[\98½f¡¸`\95µk\9a´f©¸o§½n¤Âi£»h«¸r©·j®Ãf²¹Z­³U°¸Z®²\ª¼P°´E©»H®¯U®³P©°T¡®L\92·I\93ÃO\97¼C\8bÂE\94ËG\8fÄL\88½V\84ÂS\8e¸Q\87¹I{²M\7f¸P\8c±M\8dµF\94¶P\8bµO\93¼T\8a¸L\86¶N\86²L\8b¨H\81£P{Â¥K}Â¥Ez´Cx±>~³=v±I\86®J\87´K\8c²@\88Â¥=\90¡;\87§G\82¬@\8b­>\8d¬@\82¹:}´=v½?x±A~±Ay©Hs²X{§^x¦fm¡cl¤`i«ak£]e¢\p¦]{¨eu¡hz«gu£jo¡ad¦ef­f\§id«q`´j[¸iYº`c±[a³a]©`WªUXª_P©^V¯YU¤\S\9aUS RO§UV°ZW¦[V Q^¡JTÂ¥R:591B&EE/DD)EI+E="EB%OA4L;6N;+X:1T@FY<7KE<MA4PF6\N0NN<T?2^>0RE3VP<SI7dS=`P>]^@cb@pa4vZ;zV<oR>o]Ay]Bf\MpU=mOCkVIbTBq]Jk`SqaQtdT}XQ{dTtb]\82me|f_|iV{hVslU{uQ~uP\81tQ|qU|iL\84xQ\87rE\94mQ\96dL\97aY\90kW\8e\7fd\9dxV\9e\80^\9b\85c\97zV\9a{X¦\84g\9e\82b¢\82h¦xc¢nd\95\83Z\92\85X\93}M\93\88T\94\8cM\98\8fF£\9aL©\99[¢\8c\\99\96]¨\99O¤¡Y«\90P© U²\9eP´\9b_­¢O¨\9cN©\96W²\9aR¨\9cV§\99]¶©`±\9dY§\9ec«\9eV±\9dP­©Zº¤M«\96L¯\9dO»\95\²\9f`Â¥\9bYª\94V¢\9d^\9a\9f_\98\9c_\99ª\\8c£n\8b¢a\8b\97e\8a\9c[\99Â¥P\8f\9eR\92\96Q\96¨R\9d¨d\92²R\9c²V\9d®W¢¬K\94±X¥³Y¥¢H\9c±G¨§R¥²S\91®P\93­L\8f\9dK\8f\9fV\91¨P\82Â¥`\7f¶Z\85ºS\85²O\88¼O\80·K\8b¼S\80ÇQ\83¿T\83Ñ`\89Õ_\8dÃN\8fÉL\80¾Z~µX\89ºV\92½b\91¿V\9dÀg\96²i¢ºi ´_\99ºf\9b¾h¦Äq¢¼k\9b²`\9c¼i ¬k¦½_¨²`\9d¿R¡º\¥³P­¼R­ºN¯¹Lª¯H\9bµV¤­I\9f¶J\96°G\88¼U\8bÀE\90¼F\90¼M\8eÉT\94ÉL\86ÊU\88ÄU\84½O\89¼F\8e³K\84»C\81±C\89»R\84µZ\89¯L\8a¾@\85ºO\8b±H}´K~¤F\82©L}©>\80Â¥Is«Kz«J\82²Q\83²?}©@\81¨G\86¦E\86\9dC\85¦K\80§B\85¯;\82¯B{¼D{ºB\80ºBw´H|°Fp±Tm«Zo°[|©cv¤WqªXp£dl\9bes\9cgyªez¬fr¦`s°dk¯np£iiÂ¥cXªmd\9ekZ©dW±fY¿`[±gb³]a°V^¨Ua±aT«XL\9fdU¡XXÂ¥fS£^S\99YZ­OOªUV¨N\ W^©WO§`>;,7D*5B\1eAE#>;+@=%KB-FD.OI4MF/IJ0TC>V=:U;5Z<3XN.YQ)NI1LD2XJ2TE1MH/T[)Y]0Xa7\X@meGmg>k_CuT6~[GuZKmZMiXAaMB`Q=ZR=daBg]LkbNieLpdMunZ|iZvkYyjYug`|tdrySpuLplSmnJslG\7fhQ\82vY|vO\87vO\94gO\91^]\8e`a\94r^\8czU\8exf\96ye\9cy_\93yW\8b\80\\94\88i\98\91g\9e\89k¡\81b qX\9d\84[\93\8aX\92\8eR\9c\84I\93\91N\9b\93L\9c\9dVÂ¥\95P \8cQ\9f\92Sª\9cZ§\9eQ¬\9dV¡\9dY®\9ac¯£]ª\9aWª¢Q³£Z·\96V´\9bQ²¢Sµ\9b]ª£c¨¢b²¬]¯ [° V°\9a^²\9c]»\94W·\9dZ®\97Zª\97`¦\95XÂ¥\9e[\9f¨T\99¡Z\9c­]\8d­c\83¬h\85\9c]\93¤_\97§W\92\9b^\96\99S\99¡^\92¯]\8c¤]\94¨\\9f«S\9b°O\97«T\9e¤S¥¬K£¥B\9d©D¢¯F\93¢?\8a¢H\87ª@\8d¤E\8e¬L\87¯V~´J~´L\8b©H\8e¬T\87­J\89¶M\8c¼T\7fÃ…R}ÃO\85ÑS\8bÃ…I\8fÂN\83Ç]\84»a\8b¿c\8c¶Z\90¿[\94¼b\99ºm¬°o¨±f¥µg­·t©»v ¹h\9b®_\9f¨b¥±g\99²X\97¹Z\95¶S\99¹V\9c¯]\9f¬\\9e®N¦³M£µL\98¨S\9a³R\9b·K\92µJ\86­I\94¶@\95¶B\95¼J\90ÀQ\97Ã…K\8cÇQ\80ÆS\83»L\80½H\8c³D\89¶K\84·N\90­I\8c®S\93¹U\95¶E\89­E\80«F\81±K\8b°M\8b¦I\81\9cG\84\9dMu My¬D\82¶J\84§C{¡<xÂ¥?\85\98;{\9eI\81­E\81º;\81µ=zºE\84ÃG\7fÃIy³Ay­Pq¯Ok°Zu²[~¨^v¯Yx¬er\9f_o\9aXo¤by¤as¢aw¢Xo±_q®fr©le³ka³qX³u_¡ma¦oSµjP¶q[¸hT´XT¶VZ°_`§eV\9ceK\96`P\97WZ¤_]Â¥bY\9b]Y©]Y±RY·P[«UY¨^U\98`.93<?;5:*@3#>;,:D\1eH:"LE"B>0P?.X<3W@BTC4\=>UG/ZT1[P,XS%NV'SM0JH2TW-NQ.Rf6\d5YX?faCj_Ioa7u\=fY@xcKu\?jUAdKBfM;jV<m[Hu`@ljHzhL~fG\80oSr_[ri[qk_{iWqufujZrzTysKthQqlNrs]\83lW}qM\87xY\9crO\9ak\\96n^\98x^\98wQ\88zf\8a\80\\90{_\90{c\93\89f\8f\8cm\9c\87l\92\90^ \84W\9dp`\90\89T\9a\8fP£\90R\9e\85C\9c\86J\98\90N¨\8eI\9f\8e[£\98M¢\8dW¡\99[®\9c[ª\9cT¡\9f\¦¥WÂ¥\9b_­\9eO¦\99H¨\9aR¸\8cYµ\9dT°¢K©©U«®Y­¨[´¯Y«¬c« Y¯­Q°§Y¶¤U°£bÂ¥\99V¦\95f«\95^¨\95V\9a\96]\95\9f^\8a\9bh\8c¨l\82¦c\8a¢k\95£^ \96`\95\98^\9a\9bV\9b£Z\98§\\9a°U£¥P\9a¢N\94§R\9e°S¡\9fU\9c¨K¢¡D\9f°G\97ªG\9c®M\96®N\8e¤O\8aÂ¥C\91Â¥P~³J\89·M\85¶E\90ºU\97ªT\8f¹R\87½L|¼L|ÈM\87ÉO\8dÄO\95ÊM\99ÉR\94ºU\86º]\8cºZ\83¾f\96³Z\8f¸h\9d¹o¥ªh¨²n\9f®k ¬k¯ªs\9d¹g\9cºj¡²`\9b¶e\9b»a\92ª[\93«R\9dµ\\94°\¡°T¢¶\¢°R\99¸J\9a­N\98¬J\95³@\8b¨=\86¯L\87­C\8c¼O\8b´G\97¶J\94Ã…O\99ÂO\95¶P\8c¼P\90¹F\90ªE\94¬J\91»U\92­J\91Â¥K\94µD\96¬G\8d·?\80­E\90§C\93µA\80¦L}\94Jx\98Pp\9aNs¡E\83¸K}«K\88 I\88\98=\84\93;\83¤F\89¦D\84®D\8bµ={Â<z»<z³D\82´6}·Hy´Cy²Mr¬^y¨Xp¨Xp¯[j\9fck¤fs Y{ªYm«[m¢dq¦_x±nq³jo¦uhµoaªa^¡bX¬mY²bZ¹dZ³iT´`K±d[ agÂ¥`W cV\99cI\9f`Z¢^Y\9ecW `V¡TT­IZ¡RQ\9bNa\9f`V\93]24627>25691*<//;:$B;$AF%HL,JB+J;6WB;\EA_O7WW4UQ7_R6ZN(YH#NS+XU6X_6\\4Rb8cf9bc9hh:rfGe^DdeAch=j\FmSFoONkWHgWDk\LidEpm@xqL\83sU\80pR\81rUxf^vgavma}kgtp^shdzqbmmTonTmsZrl]sn_\82sY\91iO\92oS\96nY\91j_\99{d\92{\\86{]\8a\7f`\8d|a\93\80f\88\87a\88\89d\90\89]\93\88X\8b|W\93z`\97\7f`\9a\8bRÂ¥\84Q¢\8aN¤\92S£\94M\9d\8fS\9b\8aT\92\87N\9a\94V\9d\9e]Â¥\99T«\93K§\9dQ¡\9da§\99_¯\96^ª\96O°\94J±\90T¨\9cU¯ Q³¢_±©[´­\¶²`°°d´ªYª¤V­ªX¥«_®¨[°\96Y§\94\ª\91^Â¥\94U\9c\8cY\94\94e\8f d\87Â¥d\8b¨j\88\9bi\99\99b\99\95^\9c\9d]\97\94c ¢l\9a£c\9d\9f^¢«R\9cÂ¥Y\9b§S\9b W\9b¦R¥²H\9e­F\98¨?\95§@\9c­?\96±E\96¨F\92¦J\86¨L\81°C\8e¹L\8c·K\8f³M\8e°X\8a»F\84¼E~ËM\86ÃŽF\8fÃŽ?\8cÃD\88ÀR\93¾N\91µ`\97¶a\97¾b\88ºg\94¾d\92¾d\9d±b¦¯m¢´f¤³k¨²m¨¨n¥¯r\97·h\8f¼h\97¹Y\94©\\8b¨S\91§V\93«\\8e£a\91¬Y\8dµc\91´[\91°V\8e¸H\8b²@\8a­<~±E\81«?\86·G\8b¶N\86±I\92¶R\8e»G\9a¹K\8b±M\8d·C\91»@\8a®?\8e°=\97µL¡µK\9e¬H\92¬I\8e¬9\8c©3\8e¯>\87·=\89­C{¡Ou\9cQ}\9aHt£Hv¦M\84ªF\8e£@\92§D\8cªG\8f\9eG\8b¦<\83£<\86¶:\84º<|µ?\80¸@}µ>~¾<rÆHq¾Fi´Jj¬XiªVt«Xl¬fn¯ix©itÂ¥_o¨it¦dq£mw£kz¯g|¯lwÂ¥en©jj¢ha¬`X®\Z³\P´dP°jQ®iM\9epZ¦m\ eR\9acU\9fZQ\98`L\94ZY\90SX\9dSZ¦U[¡N_¡NX\9cPY\98Y_\9c\75B37A7=8C+"4@"5I(AA&BN+GL0TJ%YG5YH;YM9SV4TQA[J4UI/SW+\T*\Y*]Y,PW5Z\<\f8`l9dg;sc<jdPfbKc\Fo[HmXLtWNoOOtYMd\BqbHucIskNvqM|pX|mJ}jav^Z\7fsUzrSxfenuaztaxjW}hQpnNoc]niazri\84jg|ze\8bnh\91x`\92oh\90{`\94~b\86t_\84~l\8c\87e\95}h\8e\80[\81\88f\92\89h\94\8bZ\90~f\90u\\99\84d£\90a£\91M£\90M\9c\8cS\9a\92O\95\96G\9e\82Q\96\84Y©\92W¡\8b^\9b\9cS¨£Y¨\9eK\9d\9b`\9d\9fc«\97P¡\9d]®\95U¸\9dQ²\9bS«£WǬ]®±Zµ¥_¸«X¸¬c¶²[¬«P¤¯[ª¤Y·«W©¥Y \9cT\9d U©\9bU¢\9f\\99\96g\97¡e\88¨k\91\98l\90\8fa\9a\90h\9d\99c\98\99[\97£a\93\9eg\9e\99\\95ªW\94ªS\91©U\8d¬H\8f P\9c®F\9c\9fH\97§@\98©A\91Â¥>\92¡; «9\98Â¥:\92¨>\8f¨H\85·A\89¯?\8d«U\8eªS\95¯H\89®R\85µH\81¿?\88ËC|Ç>~Ã=\88½P\98ÀT\98»Z\92·a\82ÀV\89»c\95¾d\93Æi\93³r§²m\9d¶d¡·q¬¯h\9e§q§«o\9d³c¢µc\92ºX\9d§]\95¦T\93Â¥a\97´f\95 `\97 b\8e§U\98²`\8a»P\91®K\86»?\8b²2\86Â¥A\8e¨<\89¬G\94°J\8a«@ ²E\94·E\9f°A\96µD\8f«F\95«;\8f¨;\8e£E\9c§=¢¢B« =¢ªE\97¢=\8fÂ¥B\95´D\96¬8\8b¯K\85¡D|¤Bs¦M\86¤>\81§H\87ªI\92ªM\8b«@\8e­C\91\9cA\81\9e@\86¤G\89¹A\83¶:\84¾8\81ÂE\84Â7\7f¶Bt²Bn»El¸OyªZu¤\t«QsÂ¥ZzÂ¥gq£ns«]n²[t¨\{¢j{¢`{«f~ªgo¦qx¨cq£kh¦ff±dU§nY«lW°rQ¨lLÂ¥lP\9df^\9aaW¢[\\93]O¡^J\9d^N\9fP\\9dX^\9dSX\9cHa¡MaªUe\99QW\99WA:;86:?<$A5\1f:6!>H/:Q2;I)A@"O@([=8YHAPR6NO7PO8[O<WUBZX6^R4\[6\S9PX8Zi7Yj9dc<fa?g_AohIrfOiaHxhNuaPm[Jt]BrfJodMh_RpfPrqOyoVtfWvnStj`\7fac\82i\}tUwfephcrr[vr[yoPxiUvb^ngdymqvno\84\7fx\82~o}qs\87qe\8cyg\90vc\8c\85a\8d\82h\91\81b\8e\8a]\93\8bc\8a\8ag\83\88n\8b\8cg\8b\84e\95\80c\9c\84i\9c\87_\9c\88RÂ¥\90O\98\97N\94\91U\9d\8aS\99\8aG¨\88T¨\84Y\9d\98]\9f\9cU\9e£T\97\99T\93\92U\99\9bZ¡\94ZÂ¥\9a\²\9cOµ\9aS­\9dZ¯\94Q¨\9caǻcº­`·¯T¹±b¯¯_«¦T¢§T¯­`¯¬_¤ªU§§S«\99X\9f\9aU\95\95`\8e\9fi\8f\98k\90\9fo\8e\9fg\96\92_\9d\90k \8be\99\97f\94¦g\98¢c\9a\9e\\96 T\8d¢Q\94¬G\8eªB\92£I\98¦C\8aÂ¥M\8c\9fJ\8b¦O\98¦L\9c¡<\98¢8\90¨6\85°;\84¸5\89°7\8a²L\90¬Q\8f·N\90´I\93±P\89¶N\82ºC\85ÆB\82ÆD}¹E\87»N\8d²W\8c­N\85¶T\7f·V\87º\\8fÄ^\98½e\9bÄe\9d¼sªºk«¬h\9f\9fj\9e h ¥`«©i¡²`\96°Y¡­V\9b\9da\9c­a\97­e\9b¦W\9a Z\99±c\8e²c\8d¬]\84²O\80µ>\8b³4\89¬7\90¬:\8a¶?\92¯G\92¨9\9c§;¡«7\99­@\93¬A\97¡; \9f8\9d¦8\98¢6\91¤4¢¨9¨\9f9¥£:\95\9e7\98Â¥<\92³;\8c®B\91¡G\88¤Nx«C\7f©@\86\9cE\92Â¥;\8f«>\88«C\85¦H\8d©J\91¨I\8cÂ¥B\84¨@\89·J\7f¾D\87ÃA\81Ã9|¼=t¶=k¸Dn¯Mw®Xw§Ul²Zn°Zq²^{£o|¬st«er·`}±_uªXz­b\82±l\81¨k\83§bu­it©ca§eeÂ¥o[ s^¢rS\9eqM\9biXÂ¥cY\99[T\9ccN\90aU\95Y\\93VQ\9cVR¡QP¡UV£[U¡OR£H`¦MY\9bV_\9fY5;.54,:?":8\1fEI$EG.>N1EM%DD&PK*GO;MN>\N:Z[2XU8]T0aX1eK3a\9dR?dV>\b2Wh?]f:ekDgY?pi>naCqg?nj9ugEyiLyiKxdHljFrfO{aTo^VrqTwnStwZyqV~p^za\vj`|tTomWrc`roitp_ycg|fdyglssdtogp|q}os\81smy\80f\87\80u\8ard\8e\82g\84\80d\8bza\92\8cb\80\8cY\83\8d^\84\8dg\89\88f\83\8e_\83\80f\91\83d\8e\89c\99\8bY\95\90\ \8f\\99\97X¡\8fV\96\8eT\9c\8dA§~N\9b\84\£\93^\98\90V\9c\91V\95\99V\9d\95a\9d\9cX \94U§\92^Â¥\95\°\98U¶\95`´\9bW§\9eU¢¨Y¬¬X»U²¨[³©b°´`¢¡\\9c®`­±a¡¤^¦§Z\9c\9eU\96\99V\9c\98f\8a¡n\95\93p\88\90q\97\95h\94\90m\8f\92j\9d\90k\96\93_\99\96^\92¦f\93©^\9d¬U\91§W\8c®F\8b°M\8b§F\99¢F\8aÂ¥K\88©L\89¨G\8f§A\8f¦G\90\9d;\87¡8\96©7\8e£=\82µ@\89²9\8b¨L\87¯D\8eµL\8b´E{µR{µO|ÃD\80ÂJ|¾J|³S\81ºY\83¶`\88®c\83½U\90Ãg\90¸]\9c³o\95·j¡Ãk§ºn ©h§­l¦¡kª£c©¡[ §d\95ªa\93 W\91¡d\98\9cg\9b\9ea\99\9fW\8c\96Y\9a©[\93°^\89³L\88¯D\91¦=\8dµ;\8c±?\8f§:\95°8\93©>\98±G\9e\9d;\93­4\9e¨8\9e¤<\97\9fE\9f\9a1\99®>¢ª=¦\986\9c\9d8©\9e5\9c\9c<\9b\9d@\96­H\97®:\96\9f=\97¨O\82\9e@\84Â¥K\85¯G\83£P\86¤@\96¤?\82Â¥I\88²I\81®N\8e¢M\8d°L\81­E\7f²H|½G\80³Cu¹FvµGq²Nh¹Pr«Tm²V}¬\s¯Tw­Y\82«dv¬et¯oz©qp«`\84®[\7f´hx­h\7f«l\7f¯py­kw³me d`£ti\9bp[\9ep\\97zZ\9fmY£kYªbO¦l[¢nN\96aV¢aU\98bT\91TN£]JÂ¥ZI\98ITÂ¥Q_£T`«K[¬OW£PG3)94(;9*@B'7H#:C#9@\1eGK)GX&BT1GS6MY8TX4\^1WY,ZR1eU9^J@_TDgV<`XB[Z=X^8^j5gl:f]Ce]Eg^BdbGna;neBniIpjRunL}sDumKupE|gMzoT\81r_\82sZzi\zl_xpTxybtu`rhZvfYpagqfkkqkpmiore{trr}srxqrtizvmzzq\80\80u\8a|o\88\81o\88\83s\8c|i\86\8bk}\8c\\80\8cb\7f\8b^\88\92W\84\89Z\86\93Z\8a\8eZ\94\95Y\8c\8cQ\8b\87P\98\93W \95N¡\8cU«\80N¤\83K\9b\8bR\93\85Q\9b\8bT\97\8bZ\9c\88Y\9e\8a] \92Z\9b\91Z\9d\96[¡\98`©\9bd®\9db¤\9dc©¤h¬\9f_ª \\9f¨]¤¨Q°ª_¯®[¯§_ «\¢§[\9fÂ¥S\9eÂ¥_ \9da\9e\97g\99\9cd\96\9bj\8a\95k\8a\93i\8b\8fh\8c\90j\8b\88l\8f\8cd\94\96b¢\9bb¡\95`¤\97V\9cÂ¥Y\90«X\91¨M\8a§K\8eÂ¥F\8f¡C\96\9bH\97\9eA\8e¦G\88­@\85¨D\88\9dE\8d\9d9\95¢/\95\9f3\8b£<\8c«>\84«8|³?\86¹A\81±Ly·G~ºM{ÄR~¿Lw´Ky±V\82¯W~µ^\81µ[\83±a\80®h\8eºe\8fÀo\9c¸j¨¸j¦·j«¬g¥©q«¢n¨§g¤£i  [\9b¢W\9e\98W\9b¡b\90 a\95§e\8e\9e]\88\9eb\8e\96c\91¤Y\95 Z\96¤H\8dÂ¥C\8a¯B\88«@\96­A\93²9\94¬7\9b±=\96¤7¢ 9\99£4\98\9f9¥¤;¡\9d=¨\9f2¤¨8°¨2«\975£\9a8\9e\9a7\9b¨@ ¨D\9d§B\9a§I\8e¡Q\90¡I\8b¢D\84¬H\81§I\8d­O\85¬N\8b©I\8c³@\89­G\84³E\83¬G~±=\84ªD|¯>{³By¼Ev¶AwÀFu¹Nv°Wm®PoªVx¶R\85·\\82¹V\84°bz©frªcp­my«m{«d}¦[{¨_vªfsªlm§cj¨gd\9bxn\97wk\8f}f\92v[\94w]\91lW\99aR\9ecX¡`Y\9dkO\9fnO¡eU\97aU\92cV\94UK\9cQM\9bJS¢O[¦Na§Zb­]^¢T;'&52$J9/D?0;I"HQ DG5RM6KT)RS2RT3VW;XS:\S.\N7RU2RT7VX-dZ7]T5fP7`YAXa:av.bm6b^CnSBmW9m_?lZAna7vuJod?ufG{jKilWstKzr\~iS\8alYyn^uwa\83sZ{uWmm^quhoeeqdTxdiqjuwotniunuxw}rrmr~mzykj{nx{\82rt\89u\85\84p\82\83y\8e\7fo\93|f\82}pv\8c_\80\8e\\80\83i\84\87e}\83Z\8b\8di\91\82_\8e\88`\9a\8b]\9e\8f]Â¥\83X¡\90[¤\8e\\97\8dM\96\8bD\9b\82M\99\88O\9b\80T\93\8dY\9f\86P\94\95W\93\91[\94\88]¢\89Q£\96Y¡\97`´£[µ\98`«\9db¦\99^¯\99Xª¥]¦\9dWª\9c`°¯^ª W\99¨]\9b£d\90\9fQ¡¢_\9c£j\97\95b\9b\8cg\88\93c\8a\8dg\83\96a\91\8fk\94\8fj\8a\94\\98\8fl\8c\8fa\9b\99g¡\9de\9a¢g\93¢Y\93Â¥W\85¨R\86\9fM\8f¦Q\90©H\8f£K\8b\97>\8d¤?\8e\9eF\93©>\8b§G\85\9d4\8c 6\8e¤@\8a¬6\84¡>\85±@\81²Ju¹B|½Kw¹M\85µD\7f´IwµN\86±G\86®Sy¬V\8a´d\80©T\8a²`\84·f\8e¿^\8d³b\9f´k£ºm¤¾o\9a±l\9c©f©ªe\9f¤i¨©jÂ¥\94b\9a\9bS \96U\9f\9b]\8dª`\92Â¥X\8f¡S\8b\9cX\93\9cZ\8b\9aR\91\9cP\8b\9eL\91§>\8a\9fI\81ªF\8c«A\95­<\8b³9\93ª:\8d¦- £2\97Â¥;\90\9c6\93\98:\97¦8\9c¢.\9b¢8¡\9e4¨\97+«\9e,§\92:©\97@ ¥O\95\9dK\9b\9b?\91£L\90§E\8fªN\90¦E\90§J\98\9bR\8f\9fD\8e¨?\8a¬A\8e¨G\86Â¥=\84\9f:\80¦>\80¬>\81­H\80£D\7f©A{®Nx¹Rw»Tt´Ls¨Nu«Rv¹Y{´X\80°d\83´]u«a\83¤mzµe\81­`t³dx«Zw\9ddx\9ebz§hj§oq¯gj¡lj mg uh\8euW\8ara\95cT\95d]\9c^a\9fkZ\96t\\90kK\91cT\93bU\91\V\95XP\9c^X§U_\9cL[\9aN^¢Xh\9cSl ZJ/3B)/A**K6)BK2DP-KN-LT9JK1XH/QL8SJ9[D4TF/U>5SG0MP(T\*WO1^N.T\6WY9em6ep2i]?g[<^]7fZ=o`5n_=rj4lo<kcFwgGwmIkt\qn[suZuh^\88ga\80pcvwe{pY\81pWyc[idhqkdth^jcnjgnea{mdvljpmtlrvx\80nu\86lvzpv\81tly\88p{\88n\88{x\8czl\8d\84h\82\85u{\81r~\80u\7f\83f{|h\85\86i\87\8el\87\87j\99\8fd\99\90b\9c\80g¢\81b©\81f¤\86Y\97\92L\96\90M\9a\85K\9c\80F¢\82D\9e\86O\97\91W\96\97X\8d\90S\92\90W\95\8eV£\8dP¬\8c\°\9aV·\99Q´\9bM´\97Nª\9f\¡\9af¤\9e_ \99e¡\9f`¨«i\9e«f\96©l\90\9f`\98Â¥`\93¡d\9b\97o\99\8dh\8e\8ff\82\95i\85\90i\90\94k\92\8dj\8d\8fY\93\93d\93\98k\94\9bd\9a\9b^\98\97`\92\93j\95\93\\89\99P\8a£O\8d§T\8b©G\8e\9c=\8a\9aJ\97¢E\9b\9eE\93¤D\89¨?~¨9|¬7\89\9eC\86¤I\84¦@\83©Fw³T~½Lw¹H\80ÀG\85¹G|±H{·M\80±M\89¶K\8a®Z\86¬]\86©a\7f¬U\8b±X\90¹`\96³g\97³g\95­c\9f¶f\9d¼b\97°h\9a¬g¤®l\9a\9ac\9a\96Y\9f\8bS\9e\91Q\9b\9fT\95¤R\94\9b^\86\92X\90\97P\93\95Y\93¢Q\96¡N\8d\9b@\87\9eB\83¦G\83¨A\86¯=\8e­1\8f«-\8d£.\8a«1\8d¦0\95\9b8\92\9d5\93Â¥0\94\9e)\91¦&\9f .¡¢*§\9a+¬\974¦\907ª\88D\9d\90H\9f\9dL\9a\98C\92¤H\8bÂ¥H\94¦O\96¬D\9d G\93\99J\90§L\92¨C\87¤L\87¤G\81¨E\89£>\84 D\8b¡E\89\9bM\82¢Mw§Pw©R\82µa\83´^\81²O~­O\87Â¥V\81ªcy°j}®d\84²b\81¤_\89§i\81°lt­av©eq¢bx¡az\9fku¦nm¨pt¨`h¤ek ra\99kc\93md\97bV\8bdP\8b_[\91cc\8dn^\8fl^\8acT\91^V\9f[X\9b_P¦_S eY\9ba`\9cQY\9dWX\90\e\96Oi\98R?*0=$7K18M60JA/QE6RU;NSA^V2^Z8WQ1JP:ML,WK-PG,^H5\N4\\#ZK&QK%SR*d\>b\:fl.m]:cb5oc9p`;q^>lbCwj;qvAoh?urBysMvu_wp]vkd~cZ\84db\84cnrkl\81k`{niqhiifcgl[lmdkdhqcvhiqkZvzekolt\80po\8bdq}nu\80|wz|uw\84wx\85ot{p\85\86|\85\82q|\8at~\81j}\81r{|o\81\83l\82wd}\83g\81\83a\8c~f\9b\8e\¤~g§\7fZ¡\85\ \86^\95\8c[\94\8aG\97\8eR\95\89?\9b\91Q¢\8fT\95\91P\95\91P\9c\96X\90\93L\95\8eQ \95IÂ¥\91L¬\90V´\9bX¤\9cT¦\98Y£\9c[®\9dV«\99S§¨Yª¤[¥ a\9f\9di\93\9ff\95\97]\98\99g\8a\90m\8c\8eh\96\89h\89\8c^\81\91`\8a\93g\87\88b\89\8bb\8f\95V\8e\8cj\98\91b\9c\97j\93\9da\8e\94n\95\8bh\95\9bi\8f£[\94\9fO\8a£U\91\9cG\90\9dF\95¬;\99¢I\8dÂ¥G\8d¢?\80¬I\7f£D\87Â¥D\88§J\86¦F\82\9eO{¤K~«Mw­Q}°N\89µ?\84¶K\8a­?\7f¯J\80ºK\87³R\85®Z\88±c\85³P}¯X\8d­S\8cµ[\95¼i\8f¹d\9e¶e£­h\9a°a\9cªn\9e¯a\9d¨i\9f©c\98\90\\97\9aS¢\97O\9f\97P\99¤T\91\97Y\8f\94`\8b\9dR\8e\94V\8f\97N\90\98P\87¡=\83¦:\83¯={«8|¤4\8c¤,\88©1\8d\984\92¤7\95\95,\8f¢8\95\930\99\9a+\93\94*\9a\9e3 \931§\955¨ -£\97:£\8b9¤\89>¤\96;\99\95M\99\95B\8c\8eN\89\99F\8e¡>\94\9eJ\8f\9cH\86 F\97\9dA\91ªG\89¨N\88£@~\9aG\82¨@\88 N\91\9cL\88¦I\92\99M\86«X~¯b|®b}¶\\82´^\81¨Xy«^\88²^\7fÂ¥ht²b\7f­f\82ªg\7f±d\82§o} ut\9cpxÂ¥n~ mo¬mo§ek®cj¬je£_m¤_j\9fmf\8akW\97_Y\85d`\90b`\8fl[\95jb\87ha\8ecQ\94k[\9bk[\98bT\9cbd\98Zf\9a]d\9bT^\9d]k\98\c\98Jk\8eN90<F.<A:@D84IF;VK=XO9ZTAWQ2VZ3[N+NL*OQ$SM%`O$_L-UN&ZQ+VV)UU)\d1eb6gf;ce6dj>gc7nc:heBhe<roAmrGxoCyhD\80rH{lKtoZruezi_zqa\81jivoqsgkvihymisd`yb`l\[habcgmmell[hq`ppe|zgy\89ot\86in\8aqi\83ynt\82zt\85~y\8c\82p\86vr\81w\7f\8cx\82\80s{\83l\81\7fnyxf\85oc\7fw`~\7fl\86}f\95}f\9bz]\96va\9e{[\95\7fQ\93\80S\97\85O\98\8dO\9f\94J\98\8cF\99\8aC¤\8eK¦\8aL\9b\96L  U\9c\98Pª\9cJ§\99M«\9bNª\97J«\8eSÂ¥\96U£¥]ǬS¶\9eW³ W¦\9ce§¤d¨£b\9a\9ak\9a\95e\93\93e\91\94l\92\8dk\98\86d\8d\8cb\8a\90c\82\91Xz\8c`\82\85]\87\89\\85\94^\88\9be\90\90e\89\8ep\90\90j\9a\8er\93\93k\90\95q\90\9de\8d\94W\92\97T\98¤J\8d§B\97¨<\9a¬?\92¤<\8c§E\85­H\7f«?\80´L~®Sv³O~§U\88¦Z\82ªSwÂ¥U}®Jz¢B\88§C\8f¯B\8a´D\84ºN\8f®P\8f¨^\86¯\\7f¾Y\82»U\86µV\93µ[\8a®k\91°j\90±i\97£l\9a\9dp\9e¤h¤¦b\9e£_ \9c\\9c\9bV\93 O\9b\9aU\96£c\9a\9bc\8b\95b\8b\9ad\87\95Y\8b\93M\85\9bI\8f\9bG\89¨J\8a©A\80¦@}®;~¦5{©1\89¦;\8e\954\8d\8e>\94\8f7\8b\8c,\8b\95)\8b\98+\9a\8d. \8b)\97\950\9f\934Â¥\9e5¬\924¨\953¡\8a0 \8f>\90\88=\8d\90I\8e\91F\8b\8dB\96\96@\96\99B\88¤=\87¢D\8a\9cK\8d\9eK\81\93O\84\95G\8b\92N\83\9eH\89¡J\8f¨K\93¦N\92 [\89ª\\83¬f\85¨g\86¬`~¦i\84£i~¤f\85ªg\81®fzªb\85³j\7f±h\80¶kw©o{\9duv\9bpz\9bsz\9fx{\9dtp«lh£dm¢ce\9ef]\9d[^\9b]`\8eca\96cZ\8ek_\91fg\87fa\84le\8cnc\89oT\8bq\\88kV\92hc\88bg\8b]c\96am\97Xu\94Nm\8fKd\90Sj\8fOH68=49;?;>G7KBBU?DSTEaTBN]DVR+JQ*UH!VS.RQ"SP.VN1PR VZ&Y[1WN)`W:_[9`e>k\*_i=n`7le9cnCpmAuk<pfE}dCycGzqA\85oNtm`~eTzdV\81dg|f_vljn_ovgd\82h]yf`rbbneeo^\obgxY`jerv]p{kmtgt\89pr\83gu\81ik\88zpzv~~\90\82y\8czl\82qr\91sy\8e\7f\7f\8cuv~ozwm\82uo}ya}~h\8arl\89va\8a{^\98~b\91~X¢ye\9c\82]\9d\84W\9f\86I\9c\93W\96\90R \8eO£\90P\9e\97R\9c\8fH \93P\99\94F ¢@¤ L¤\8fI«\95I\9d\98C\9e\98T¤\9aI¢ªO±¨P²\9bVª\9b\«\9cf¤©mÂ¥\9bg¤¢k¡\92i\9a\9ce\8f\85r\8d\83s\95\8ai\87\8bm\84\8fa~\8dW\8a\92a\81\8b[|\8bh\89\91f\8e\89\\97\87f\8c\97l\93\92j\85\96o\94\91_\85\92`\8f\92k\8d\97]\88\9bI\8bªL\93¬Q\8eª@\99¬C\8c¯H\90¦H\88¡H{£@z¨O\82¨W~Â¥W~£Jy¨W|®P\88¨U\88\9fQ\87­M\84ªS}°@\89¯;\86¨D\8bª^\86®Q\88·d\8d¬T\82®R\91®Y\96±^\90Â¥a\85°e\8eÂ¥i\9c\9fl\94\9cc\98\9c] ¥b\92¡`\95¡Y\99\97Z¢¤^¤\9aV\91\9fb\88¦c\83\9bX\88\92]\89\9cM\85\9aG\92\9dS\93ªD\97¦@\84§C\81¨<\84±3\83ª5y¨/}£5\88\9c4\8b\99<\92\92/\86\91(\80\89-\8b\88!¢\85$\97\8f*\8f\9f)\96¢0\9b¤0¤\974¢\96+¦\8f:¤\94B\92\95@\8c\8bI\99\89;\94\91:\92\93C\98\90;\93\97@\88¡>\8d\93C\83\8fK\8a\97E\94\97C\8d\98D\80\9f<\8c¢H\89\98R\89\9bQ\95\9b\\8f\9aY\8d\9dk\8e¡m\8b j\8d§a~\9cn}¡d\85£b\82¨l{Â¥k\83¦g{°s~³b}¯ls«o~\9alq\98hw¢lr¢ju _j¡ie\99[m\9c__\9c]^\9baX\8d]Z\88``\91ic\8ddd\89^d\8ff\\87nY\95pQ\8asZ\8di\\89\Z\98an\99cl\9b^f\9b\p\95[q\8bXj\8dSb\8fQD44?<7<:2GI5OA3TD@]M?XRKRRCKW2QX(US)^V.YX&O\\1fMV#MX)\a$S\/RX.__2[b:ja7gc/bb5i^5hlCchBf`Ey`Gxc@sa>\7fmK\81hFy`H}_X\80_S\87_S\90d]\88]a\81iiuhm{ccy]\w]RnbYqV_gU\j``w^_lXgmZryelvhp\82fk\8bsp~iu}ot\83~qy\8d}}\87|u\8fxz\8cww\87~t\81o\81\80n}mjzki\88rf\88uo\8d}d\89u^\91\84U\96\84Z\93{e\98}a\9b}[\98\86K\99\8aW \98U¡\95H\9b\88J \94Q\9e\99R\9f\90N \90L\96\95E\97¡A§\9f@Â¥\96D¤\96<\9d\9aE¯¥C¯¦J®§U¬¦P¤ªO  V\9c\98e\9e¡h\9a¤^¢\9ab\9a\99g\97\96h\93\85j\8f\82o\8f}s\91\88h\93\8c[\83\86^\80\84i\87\8eg}\8fm\81\8eg\7f\88b\8c\89]\8c\88f\8d\96b\93\8eZ\87\8cb\83\8dd\8d\98`\8f\9bQ\8f¤K\8f\9cN\9a£P\8f§C\8f§C\88¦>\8a¡;\8b§G\80«K}§Hx¦Ut£Lw¤Pr¬S|Â¥]\7f¬Z\83¡Y\89©W\7f¯TyµI}³C\87§I\82¦[z£b\80­_\86®V\8aªU\90¢P\92£T\88\9c^\89¢]\96\9di\9c¤g\9e§i\9c¤[\9a\9d_\96\9b`\97¡Y¤\9eZ\9d¢T¡\99[\96\9a`\87¡Z\82¦[~\9aW~\9cT\8b¢O\92£O\93ªG\95¤E\8f«M\91¬<\81­<{¤:}¨<\83\9c9\86\928~\93@\86\8f6}\923\84\88!\94\87+\9b\8a*\98\8e%\94\9a%\98\9a1 \9b3§\9d,«\9d2ª\909\99\94?\96\8eB\91\8b>\92\945\9a\8f9\94\958\95\8f?\8d\8bA\86\98A\8d\93E\88\8eT\90\8fS\92\8eA\85\8eF\80\91@\82\8fQ\92\96[\8c\90^\88\99c\81 X\8a\9f^\8f©c\88¢l\81\9fq\87\9ae\83\9ad\86Â¥l\8b®p\8aªo\82¢j\83¤m\80¬kz°b}¤`x\9bbp\9c[t«\y¡fz _o\9b[g\92^r\96dm\94bj\99``\8eae\8aae\83hX\8b[Z\83_Z\8bhc\8d`g\8be^\92ne\90_g\8d^c\96Ue\9a\^\95[h\9cNk\95Od\96]a\97Wi\86\>1FG;BFA>EBDRQFNGJ^NA\YCPLCHK3K]4SU5X](RW&M[ RT/[U4`c,P^6Te2X]8]cFan@ja:dd6q_=f]=mZCf\Fx^BoiA\7f]@\84fF\8bgI\7f[S\8aYT\8eWU\89Za\84da\87]i\86imr]mt_dq`[kZVhXcsYZkYWjOckYgzZnsTu}ahyhv\8buu\91wg~wh\7f\82q\7f\87x{\8e\81q\92x|\8b\86s\8a||\86\89p\89\81\83wr}prwnj\83ys\7f{m\7fzd\8fqb\87\81^\8e\81Y\8c\84_\8a\85]\9b\89V\9f\89S\96\87N\97\9bOÂ¥\8bI\9f\92Q£\99W¦\9fQ¤\8fV¤\8dA¡\8fG\9c\97C\96\93FÂ¥\9dG\98\96D \97O¡¦M§£Qµ§F²¤W¢\9cM¡¢U¤\9bX¦¨k\9e\99l£¤h\9e\9co\9d\8ca\97\88o\9b\82p\97\89d\8a\81n\8a\87i\8d\85l\87\8cc\84\86i\8c\88]\82\8cb\89\88d\7f\89f\85\8eaw\8fa\88\8de\81\86a\84\8dZ\90 ^\8a¤R\8a¦Q\8c¨J\9a\98R\97«O\8e¦A\93­<\8d§9\81¦B\81¦D}¤Q|³]x°Qw Jz\9eW~­\\83§Y}\9bUy§\}¹O\82ªTv°J\84­R\80¯U|¤U\8c´Z\8e¬V\81§Y\8f£[\86¤V\8b\98\\93¤V\94¤b\94£f\91\97c\94\92Y\9c\96h\98\8fe \92j\9a\9ci\9f\9d[\9c\9b_\91ªS\8d\9eX\7f¦]\81\9a[\85¨M\8e\9dL\86²O\85´L\91²B\8d©>\86Â¥G\86ªA\87¬=\88¤F\7f\962\84\96+\8e\8f9\81\8d(\80\95$\88\8d'\9d\85* \92!\9b\90*\9b\9a$\98\9c'\9d\9b'¤\9a6©\910¨\943¤\8f<\95\897\9f\8e>\95\88D\99\93@\95\8cC\9b\90?\8b\8aO\82\91O\89\97J\8e\8bK\8b\93G\8b\8fN\88\97D\87\94A\92\95K\90\99]\83\9dW\8a\9bk\92\90d\83¢h\92\92g\8b\97q\8e\99r\87\96q\85\9fh\8b\9er\83¢p\86 l\8d§w\85©j}Â¥nv­fu¡hz«Y\7f£Y|°b}\9e]}£by\9fTq\95Yl\94^l\96br\8a\d\90fZ\8ccb\84mj\80\j\83h^\8e[i\8cf`\89bd\8dn`\98_j\96\b\93ac\94_b\93Sg\9aWp\9cMd\9aae\9bQj\8fVM9?K:HM:IHJAGRMSOMNWDYUKPRCPPBSU@KZ=Le1Ub,M]1M[,P^6Xd:Za<Qa4Xc?alAer>bg<dgAj^<lV5kY:ue<ne3ml8}bA~`J\8aaC\8eYK\8bbQ\91Z\\85Y^\7fY^\82d`\89\b\7fZhu\_l[dvQ_pTcr_XiX]t]`pPnn[gwXoyar\86ls\85hp\88qk\82vi|\83i\80\88u}\84yv\8czv\85\82o|\84u\84\83yx\8aty\7fxn}xss\87po\86yl\8ato\86zc\8byW\81{[\8a\80X\8a\8eT\8c\8bQ\98\8fS\98\8fH\9d\92L¤\8cR\9f\94P\99\98Y\9e\9eR\9c\9eNÂ¥\95D\9c\91E\9f\99G\9b\9eL\9d\95C\9a\90P\9d\99T\9e\9dW®\9cN¬\9aJ®\9fR¦\96X¢\95S\9e\9ccª\9edª£c¡\9fj\98\9bp\98\8dk \92n\9a\86h\8c\82g\89\82d\8a\81o\96\8aj\9a\8em\92\88e\8e\94d\7f\93_\80\99cy\90_|\9c]q\96hw\99hx\90hz\9ac\8b\9aO\87¤N\8dÂ¥K\99\9fM\95\9dC\92¦H\8f©G\94³J\8d«@\85®F\7f®C\83§M\81®UuÂ¥Wy¤Ux¤Ly¦Ou§V~¦Yq­St±Rs²T~­O|§Sz­N~¸M\87³V\86°a\86§]|\9eR\80£T\80¢[\8d\99V\8e\9eN\95\97V\90\90V\9a\8eZ\9c\91e\9c\94h\97\9dm\9f\9eg¢§\\94£]\85«b\82©V\80¢Wzª\~©]\88Â¥V\85¨V\87µG\90µD\8f®=\8f°F\86¨F\87\9dA\8d£B\85\9e>\89\93+\82\9a0\8a\9a+\84\90.\8f\90(\90\890¢\8e(¢\8f*Â¥\98+¢\9b&ª\8f+¨\89%¦\93+ \97/\9f\8b8\99\92<\9f\872\9e\896\90\94H\8d\8aQ\90\90M\8b\8bK\89\93V\94\91M\8e\8bO\96\93E\91\95I\96\9cM\8f\95C\8b\90O\89\8fX\91\8fY\88\92c\88\8c_\8a\95e\88\99n\93\90n\8f\95y\90\89w\8b\89y\85\94y\88\9cu\87 w\82§k}Â¥nq«erÂ¥bp©Y{«`y«ey§av¤ew\9c]p\93bt\99Xt\91Ov\90Vm\98_a\90]_\88h_\8caf\8eZi\85ac\82ke\90gk\96iq\91\i\95]m\98cp\91Wg\91Zo\92^s\94Qr\92Qf\9cTm\9dMl\92W9>B=CJK<K:HIKMARXQ\PN[[IXYKRR;MN<Pa<Tc7P_<QS4TU6Jb/^b>Yc6Yf0Y]7]gB^bGZd:a]9k_:j_:q]2y]>ri0\80fC\85gD\80gF\87dG\8aiJ\92_[\89\N\8e\`\8cd^yaezkZ{Zc{aXhZhxa`nXXhOSsTVoO]uSep]hrihu]l\84qi}mn\8b{j\8c{i\82}iy\83nw\82voz\81x\82\7fsz\89t\86\7fx\83}v\7f|y}~\80mt\7f~z\88\82k\7f\82r\8aql\82zZ\8a\80U\8d\88`\8a\86Y\94\8dS\8d\8cM\9b\8eX \9aH\9e\94G\9c\8eL¡\93O\9b\99S\98¡XÂ¥\97JÂ¥\9aN\9f\92M\9c\9eR\94\97M\97\95T\95\9dV®\9bU°\9cO®\94J°\9fY±\94K­\8eV®\95T¨£ZÂ¥\9bh© d\9b\95b\8d\94e\9d\94j\9b\85b\8d~d\8b\81c\8f\84]\9c\8ck\9b\80`\95\80k\95\84^\81\90W~\92a\80\88ds\87dv\8eb~\8fgy\93p\7f `\8b\9dP\84\99M\8e\97M\86\9cE\97¢B\8a­P\85°S\85®E\86£J~­G|¯Lp£I\7f¦SyÂ¥X}©W}¦_r\9e\w¦V\83°[x¦TlºPy§Zx«L\82¢Lz®JxµR\87®Z\81°]\8b±[y«[}©[\85£V\81 X\85\9bX\97\98Q\97\9cW\98\9c\\9a\93c\98\96j\9a\9bc\95\9de \9dU\97¢R\8d\9f[\8e¤N\84¨\~£U\89®]\82¦I\7fªU\84¯G\86²B\8c¦A\87¨=\83ªH\8c :\8b\9d9\8d\972\8c\96)\8c\97.\85\8a(\97\94+\9a\942\9a\8d*\95\87/£\95*±\93-­\95&¤\94&«\953©\93$ª\877¤\944 \8f1¢\8e0\8f\8bA\91\8eK\8b\8bG\8d\8fQ\88\86X\8c\8aR\86\95K\80\8b@\90\88E\94\90G\99\90B\91\83I\8b\86S\8e\8eT\8f\90\\8b\96c\81\90m\88\92k\8c\87g\8e\92k\88\90m\87\89p\85\8bn|\8er\80\9fq\81¦m\88\98mvÂ¥x}\99sl\9few c|®jx fz£pz\98j\81\9dUw\94Tx\94Qs\99Vw\91`v\8bba\8cQ]\86T]\8c]Y\83_[\83ia\7f^c\8eih\8cal\8fff\89Ym\9a[l\96`l\93Yn\8baw\8cMt\93Qg\97Ud\93ag\8fV@=T;AK=CF;?K;LCKPFUPD`RDTWCXUA[]CTZ;OT6IX?HZ0JM.NO-T_1XY5`Y/\Z=c`Gb^BZg=aoGogHsj>q`;\80`8\7fb<zgG|ZNwiL{fB\87kH\8fkT\8e_T\89^T\7fjR~l_w^c\81`YweXj[_iX]vWWwRNmVVrTdo\mihtojo\80cf\81hh\83ir\87vk\8ctp\85\80oz\81twwxxvys~\83gs|gx\85sn\86xt~yp\7fyry\80{v{}v\86xj\83we\84~e\89\8aU\81~Y\87\82a\8a\83W\89\89W\9b\95Q\9d\99R\98\9aM\91\94Q\9b\98L\99\9cT\98\9dU\93\99Y\96\99b \9bZ\96\91X\9c\94O\9c\8bW\9d\91W§\8aT²\8eU¸\92U·\9bT«¢N®\98R§\95S¡\98Z \94Z\9f\9e]\95\9ac\92\8ek\8f\94i\99\8bb \87f\9b|Z\9fzV\94\89`\9b\90i\98\89a\94\93d\90\8f^\87\84Sx\84Xv\90c~\93a\83\9af\80\9bi\83\9cW\82\9fP\8b£I\88\97N\87¡L\8d§E\84²U\8a¬T\8c«V\8a¤L\84\9eIr©En¡Go¨Ln¯^x¦akÂ¥eo£ax V~®\q±Ttµ]p¨Q|£Vx¦\z¬S\81¤\\80ª[\86¶X\82¶Qv°Xv¨Q{¤Q\85¡R\80¤[\88\9bR\84\9ec\84 b\8f\9d^\92\8df\97\90m\96\98d\94Â¥b\98 P\93ªT\93§W\88¦U{¤Y\7f£P\89«F\8c´N\83¹U\8eºP\87¯E\8b³C\8d¬>\89\9bB\86\95?\93\933\92\9b+\89\8f7\8e\8a4\92\8f0\9e\89*¡\815\98\848\9f\89*®\8c*¡\8e0\9e\8c.ª\822ª\83%«\8c$¦\8b4\9d\8d1\99\8b9\8d\95C\90\92H\83\87L\87\86V\93\85Y\92\8bJ\93\89=\83\90A\92\86B\90\89R\95~J\91\7fK\93{H\94\86I\89\8eP\89\90a\87\86m\8a\8ch\8c\8fn\8d\8cv\83\94v\82\8fkz\86s\80\86m\89\8as\82\9eq\81§z~\9eyz\99qs\98s{¡tt¦mw\9fo\82£m\82\97f\87\96\~\99_r\92Rt\8bWx\8ebr\8b]i\93Qi\8eP\\7fV\\84U[\84eZyce|[i\85_a\8fb`\8dbn\8abj\90[d\8b_k\93\n\92Xn\87Wp\87dg\88`g\88f5@K>GR=FS9HO>LCCLJVOEYG@RZ=MW=NOAPXAMNA=Z9HS6AJ:AQ4V]+[S0U\9`b<i[O^aHegEkYLt`GsdHn[A\7fYE~\P\84gN\84_G\88`M}c?\83lN\90gK\88kR\83fV\87fZxe_\85`_yZ[xd^lS]}Tf}R\wUZm[[{\fsfkzlh{nu\81nj\7frj\81ooyvzxwr\83~|\83~q\7f{\80{p~vo\85p}\7fos\8fht\84z\85\8cq|\89oz}z\85\84q\7f{szk{wjz\83Y~\83R\7f~U\8bzd\7f\88]\91\82U\8a\93P\8e\90M\9c\90M\8a\8eQ\8a\93X\93\8ec\98\9cb\99\90X\99\94a\9f\93]Â¥\8fW\9b\92X\9e\8eWÂ¥\93L±\92M·\92Tª\8fP®\9fO±\98P\9e\9dU¦\92d\94\9eZ\96\9f_\9d\97]\9e\9db\95\94q\8e\8b`\9b\94Z\9b\8bV¢yR\98\83Y\91\8fd\9f\86f\9b\87h\92\93^\91\91m\85\8fk\81~Z|\81g\84\93a\82\99c\83\9ah\83\92Ux£T\88\9cQ{\9cP\82¡I\86\9cW\89¨V\8eªS\8c Y\8c©M\81®Rm¨Tr¢Vo L{\9dW\80\9feu¡coÂ¥\r¬Yu¯dr¨Uv¬Wl­Tz¢Zx§Tq±Vw³Mo¶Nw´On·\|©\r±]s ^\85«Z\83¦N\86£M\84¢]\81\99X\8b\96f\90\98d\8c\9cc\8b\95d\8e\9d^\9c¤X\92«O\90«M\81 J}¡S\7fªV{©J{¶Lyº[t²H\81·;\80¸5\90¬5\88¢7\90\9a?\91\9b9\90\997\9b\8f7\8f\812\93\8e<\93\8a)£\874¢\81A\9a\8c9³\916ª\8d/\9c|3Â¥\88.Â¥w#­\81)§\88/\9e\8b:\91\8eC\8e\86H\88\8aD\91\8cR\92\89O\92\8eW\89\93U\94\87M\8c\93G\83\88L\86\82S\95|Q\8e{T\9cyQ\9d\8fI\97\8cS\91\91T\8b\93h\8f\8ea\92\94j\93\83q\8c\93r\8d\89m|\92s\87\85p\84\92r{\9dz{\9fy}\98|z\99up¡ol\95lp¢x\81\9ei\85\9ct{\94`\8a\92dv\99[y\92Wr\8bWj\89gq\8eZe\8bXd\8a^_\85\b\85ag\85e[\86]ft__\87ed|[i~ce\84\p\7f[b\7fZo\89ac\88Qp\91fm\93]k\88_j\8abH8JE<GJHG?GLEKGH@MNOPVMLQWCOW9K\8OP8IU0@W9EN4AK@@F>GI5IO;[S:\N@bZLb\NbVLhQSv]Py^TvbKtbNycS{XY\89^P\8c[G\85fH\85rG\84oI\8atD\88kJ\80sN{oYtb_}bhvgm{Zc{a^}WizZeyi^na`sfhpltxsqsty}\80v\80wpy{xzx\7fzl\80{g\7fzr{xvu{n~kx\81h~\87k\8b\8en\87\8cw|\8es\81\88o\87\88n\8c\81p\85up\83hq{e\80\84`\87wc\87y]\8e\7fV\87\86^\8d\8dT\8d\93M\8a\88P\91\8bO\8c\86Q\8a\91b\89\95Z\8e\8fV\98\97X\90\99_\93\99^§\95P§\99R¬\92M¬\96Eª\88JÂ¥\92L¬\93W¦\95X\9b\98b\93\9df\98\99`\9b\93c\9d\8fi\97\93h\98\9ae\96\95Y\96\93\\92\85Q\9e\85V\98\86b\9f\89h\98\92k\93\93l\86\8df\82\8bo\8d\88h\86\86f\7f\88f\87\84\}\93\\7f\94^}\95^|\96`y\90Px\92Nq\95Mx¡\\80ªW\83ªV\8d¦Z\86¨]~¯Sx§Q\82¤V~\9bY\7f\9dWv\9e[z¦Ut§S}«Uv³[i²\m¨[qÂ¥Ws©[n®Wh²SfºYi±QhÂ¥_h©\k­at¯[\80«VzÂ¥ax¨a\7f\9eS\86\9bR\82\9dP\8c\98S\84\95a\7f\96T\89\99T\85¡L\8e«N\8c­T\90ªK\95®H\89¤O\89 Ox©Vs­Tt­Qm¹Ju¶<\82¸9\85­4\86¯1\90£/\90\9b/\94\948\8d\89?\97\83<\99\811\99\832\9a\8e/\9c\8c9£\929¦\8b7ª\857¨{(¦{\1e y\1e\9e\87&¢\891\9e\843\97\87>\99\8d@\8c\86O\98\89M\92\90O\90\96M\8c\93R\84\88S\8c\8aH\88\8aG\87~D\96~S\95|Q\94\8a^\9e\86Z\97\80W\99\88T\97\90b\90\8ah\92\8dh\96\8am\8c\86r\8a\8fu\8b\82t\85\86l{\92t}\91{x\95}z yn\9b\7fq\9cst\94|w\8dz{\8dxz\99iy\94g\87\9b_y\8da|\8dXp\95Zi\8baq\86Vh\87Zg\82^[\83WY\80PdxVayaY|[_\80Z[x`c\7fil\84dq\7fZf|^b\7fde\82Zi\8c`n\8d`x\8flp\90j@<CH>EE@PDANHKRJLWRNTQJN[FMLQ>\V?VDCJL5DS7JR=CILNTACR;UOA[X6eSEZ^Ig[FXJWdUIm]GpdJqaO|_L\83YK\86cO\80]L\83gU\8dfV\8deK\8ahO~sZylS~sRmg`u_]zch\81Z[y^Z}U`yWl{ek\80i^rij|gpwqp\83tp\7fpm\83|q~\80p||qymv\7foxxp\80vp\80\85qz\82w|py}sy\90j\84\8dx|\80rz\87iq\83l\88\8cr\89\86k\8bzmzlv\88eozgw\83k\89rg|}c\8a\86c\8d\92\\88\91V\80\8aZ\8d\8dW\84\8cX\92\91b\93\93j\8a\8dX\8d\95X\97\96\ \9cU\9d\9c[¡\98S©\9bM°\8eO¨\98O©\92U´\99M§\91\\9f\8dd\9d\93Y\9d\9eV\9d\8ae\97\88[£\97_\95\96Y\94\96X\99\90V\92\88Z\91\7fQ¡\86a\91\98h\8d\93m\91\8cf\86\94o\87\8fn\85\8d`\91\8cd\8e\8eT\87\94]\8f\91b~\93_}\99\\87\92S\83\96]o\91K|\9cJq\9bR\81Â¥R\80£b\88¬W\82¦\\88¬[}\9eP|\9c\\88£_y\97]p§^t\9dcz¨Zs°]nµPt§_h©[g¢bk¨fq²\q®So¸Zq­Qn«Yp§cjªSr³b{«ct©kwª`\83\9d[\7f\9aM\84 L\83\8f[~\9a]\7f\96^\86\93W\87Â¥U\8f­P\8d¡O\8eªL\90§O\82 Q\8aÂ¥Qy«F\7f®Q}¯@~­Kz­Hz´@~¤1\83¦9\8f\9e6\94\9e9\96\8e+\97\8d8\98\93<\95\819\9b\851\92\840\9d\8e6 }3\99\85@ª},«\830£v)©l"\98z" \8c/\8f\83:\93yA\96\80C\9a\8aS\89\83Q\97\92E\95\97K\92\8dR\8c\85Y\90\83N\85\88M~\80J\8a\83Z\8asO\96\81]¢}b\95\87V\95\83^\90\82a\8b\83[\8e\7fh\9c\83^\9a\8dt\91\90x\8a\7fo\95|n\85\8dy|\83v\85\95}~\9a~r\9ert\8dxw\8f{w\86~}\88m{\92i\8d\92c\84\8fiy\93h~\8c^n\88[c\95`r\8f]c\83[\\83ZZ~`ZzTh\7f[f|Q]\80aX\80Zg}_g\80e^\82f\w]_xc`{\^\7fZfvdc\8alq\85bo\8bv=KN@KQ?=J9@TF<VMGOMIYMHVQLOWNMWG<\@<WB:IQ7CUGHJF?NEESFFS=QK=aSCcXJ]OIWLP_WJiVHeZRpfOxXR\84YL\7faP\85ZM\8aWQ\8cbS\91cZ\8dlW|bbzf[taWpi\xja\81``w^e~bb\81`ly\lue^}f_|jbvif{hu~mv|hryrj{vi\81yo\89\7fv\84v}\80x\81\80qv|k\83|p\86os\8ds\81\8bm\87\83t\80\84ru\90ir\8ed\80\8ah\80\88u\80vq\81mo\80wn|tsyl{zj\88|h\88\8b`\80\88`\7f\94S\85\95Y\82\91[\88\90\\8d\93h\8a\94d\90\90k\90\94g\92\98X\99\98U£\91V\9c\94S¦\95R¦\90K¬\98S±\98Q¬\8eT \89Z\9a\89T§\8bX¦\93\\9f\87T¢\89Q\9e\90U¢\95N\9d\96]\9d\99^\98\92V\91\87W\93\94W\94\96b\90\8fg\8c\91e\8c\8ef\94\8bc\97\95T\94\95U\88\96a\8b\97\\84\95\\8a\90Q\82\9cV\88\96T\7f\9fJv\97Nt\97Jx\9cQ\80¢S{©^x±X\84¬T\84¨T{\9eI\7f\9cK\80\9f^~ Zt\9fZo\99by fz®Wo¯Uv¤al¢bv¨eo¬jt«li¬caµah¶Qr®Tp²Yf§cl§[i¦go it\9fX}¡W~\97R\80\95W\80\96]\88\97X\84\9bU\7f\9d]\86\9bQ\8b¢T\83\99N\7f\9bS\8b\9fS\85§M\83°P\83©G\84®K|°=pÂ¥@r«C~¦=\82¡1\84\9f5\89¡6\84¢:\86\98.\97\973\97\92;\92\84:\99\81<\9c{A\95\828\93\85:\99\7f@ w2¢z1ªw& l!\9dr*\94}*\91s)\8cz5\97\7f8\97\84H\93\8dE\8a\8cK\92\88P\91\8bW\96\8dN\90\8aV\82|\\7fw[|tb\87y[\8btT\97u[\98w^\91\83V\8c}[\8c\7fX\93\80a\98\7f^\9d\89f\93\89o\8c\8ct\96\80s\94\86v\85~{{\8f}|\96~{\8doz\87py{y\80~}~|w\84\82u\8f\81x\8d\8dk|\92ls\92jv\89bm\91gn\8den\8bZg\8dTa\87Xa|[j\7fRdvX[vXesWdsVY|c]{abr^es_^t^[ric\7fm`{oq~ls\8bp@EJDJMDKP>9W:JRJIVIJUMANLLOWIQ\JLcEGKN5HS2OFCMTETIINJISOC\G7WX?aZIVUHaDRiKFnSQjSMn[R{cWpYSwdT\88[O\8d`P\8dZW\86_T\8ea]}rZ\80tawj]qg]zj]ol[|b[yrb\7f\_\7fat\82eazbe}hd|eguet}w{\80xt\8ath\8arf\84|o\80\82u\86r|\87u\81\82\81w|}\82~y\92\7f~\8dj~\93{y\91t|\92xt\86kl\99mo\8bes\8eks\80puvv\7frqy\7frym\81~x{\84o\83\8fez\8dc\82\8b[z\92Y~\93a\82\8e[\87\93c\88\8ek\8d\96q\95\94a\96\8cf\93\8d`£\96c¢\9b\®\92X­\91Y±\98b°\93Y¯\8eP¦\86X\9a\88I¦\82Y«\8dU©\90M«\88H«\88Oª\91G\9f\8eU¡\9f^\98\9cS\91\8bU\93\98V\9a\92Y\97\99a\95\92f\8d\88a\9b\91U\90\8bP\8f\91\\93\90]\85 T\88\91N\91\97V\88\8aP\8a\8eX|\93H\81\99Fu\97U\7f\9dSo§Uw R|¤Vy Ux\9fSx O{\9dUuÂ¥Xy bx«clÂ¥cpÂ¥hq¡htÂ¥Vw¤^r©fr©le§sk£j^¡[m­Xj¯^q©bg·\o¤Wr©dl¡hn¨cqªarª\~\9a_\82\97Z\82\96c~ S\82¦Zy\9aS\86¦I\81¢G\85\98N\84\96N\81\9bD\8fªC\8c£L}Â¥A}ª<w¤B~Â¥9x 4u\9c0\7f\9c-\84\952\86\984x\99<\80\954\87\994\94\956\96\927\98\858 \81>\9e\83=\92\86?\91\816¡\830¡~+\9bv$¡j(¤{'\94s%\90p.\87x2\8dvD\9c}E\98zG\89\82?\94\84P\92\84M\87\88V\88}_\82xR\85yT\87}T\81vc\8dl^\8eiP\99{Q\97tZ\94\82b\84qe\8e{e\8f\81Y\97\89e\8c\81d\95\84q\97xt\92wl\8bz|\8b\84~\82\89w~\8cu\85\80p~\81v\84|z\8a\81y\8b\83r\80\83q\89\89q\7f\83gk\8din\8fjh\87ts\95ii\8bhf\8b\d~[q~_hsWeuQa\7f\cr]es^gpWVxdYn\euqaujXnoUox`usivuu\82mCDV7KQBGX>=YI9ZDENAFKOAOIGDNBDZHGYEASIFOO;UM8MNBLE;ZHAaA8VI@^IM\QHfSFaKMdPKiMWkXMj\ToSNmYU~\W\82gU}i_\82aW|e`\82c_\82sf\80rf\86ogzn_ty[lu[mr`oqcnih|enwfcwdf\80_g\84hxykp}xv{|s\8a{l\8dpk\83vr\86|s\82\7fw\7fxz{\81yu\85\89{\82\8c\7fw\87ry\90zx\93r{\8ftv\90ol\92qk\8bok\82no\86jt\7fpl\83uty\7fx\80w\86x}\84z\80\8dw\7f\89g\81\86g\85\7fl\89\87a\86\85l\85\89i\8c\82q\8f\8bg\92\91^\93\90f\9a\97q\9f\9ck£\9c]¤\95_¡\9ad©\90`Â¥\8bX¡\87M\9e\88D\9e\8aJ¡\88H¬\84O¯\89D«\87E¯\86Eª\94J¢\99H¡\98P\99\9cH\96\98M\8c\93T\92\9aY\90\90V\93\8ad\8c\90U\92\98Q\98\9cK\95\95Q\93\90O\8f\99R\90\9bL\8e\91V\85\8eK\89\8eK\81\8dI\82\9bMy\98Tw Pt¢Yr\9dSp\97Pt\97X\82\99P~¤Vy§_o°\t°mr±nr°mkÂ¥po\9fjt¨do­bkÂ¥^g ad©kc¨`\Â¥`h¬gh±fn®cm¬cj©dm¨h|£jyÂ¥a\80ªlw«hu°e\80¤b}\9d_| [\80\9fP\80¤Kx\9fNw\99Fz\98G\85\9bL\81\9fA\89«G\83«={\9d:x¡9y¤<}\9a2\7f\9b/\80\997z\9b4y\9d=t\969s\8e4~\891|\957\81\928\88\8e8\99\8c<\99\8aC\95\84A\9b~<\9a\838\95\81:\9c\83/\97s5¡p)\99s$\99v.\98z;\91t@\96{C\98zE\93{I\8f\81C\94yC\8d\7fM\90\82Y\81\81\z\81_|}[\86x]\84r]\8awU\91mV\93oV\94v^\95w]\8atd\8e}]\92\7fa\8c~d\8b\7fj\94xu\97vr\93xx\8c}o\8d\85|\8b\84x\88\83}\85\86|\8a\80~\88\80|\8c\8cz\80\8er|\92|\83\8by{\8dqr\81mj\7fkk\8auj\84le\8blc\8bfl\80amtdlu[es^k|]i\80ek|[`\7f^`q``vgZkranuYmsgo|djymqng|o?BV6DWDIW?FYO>UHFRCAQD>UQ>DMB>PCDUKJ[KKLREWGFJCKLTFWJGTHNYAKRPF]^Qd]UaXMZY[bUZmc]hfRvdVyY]uWV\85bU\82Z\v\dv]eu_^wfn}hs}ngva_{gbuudyjmzqnvikycg~al}nrwgrzilurx}~xuxp~~i\7furztdw|n~\87s\84\83o\7f\8dt|\8c\8d\80{\97\80\81\8byq\9dt\81\93p\85\97nr\8enz\99`y\8bnu\89cq\88k{\86eo\81kqv{}os\83{y}yv\8azy~j\7f\8cd{\8f^y\81a}\82mw\86i\90\83c\8d\8bi\8f\95h\86\91o\9a\9as\99\9ds\9f\96n¡\87d¡\88c ~h¤\8aS®\89[¦\83S\98\83C¦\87Q´\89L£\82P±\8cF\9d\84L¨\89I\9d\92T\9a\8cX\99\97K\96\8aM\8f\91\\98\93a\85\95_\83\91Z\86\8bS\86\91L\87\8bR\91\90Y\92\97\\8f\95]\88\8fQ\8b\90X\85\93X\91\92B\84\8bR\80\92G|\8eCv\97It\96Hp ]x\9eRp\9e`t¤LxÂ¥Q\7f\9dRp©et£lt¯ht¬kp\9crv\9fcz±cp¬Xa®W`¬\]¦qa«`d\9ejb°ep¨ti¬ok£hpª`h¤lt¡ip\9fft¦cgÂ¥d{«k}§hs\98Zy\98O\82¤Z}\9cU\7f\97Uw\91P}\98F{\9cK\86ªE\85Â¥K\89ªB}¤K\81¡=x¤Fx\9cGy\95;\87\987\84¡0z\9c?{ ?r\862\87\810\83\847\84\86B\96\93@\9c\89>\97\93<\8c\8dF\97|=\98\893\9cx0 \81+§v$¨t\1c£q-\90q%\9eu/\92q;\9dy?\92{6\9bx<\8c{D\8b~;\8b\85C\84\82Oyr[\81w]\88rd\85rT\8dyS\8fnU\87rR\94qY\8e{a\8bzY\8c\7f]\94\83l\99vj\92~g\8e{n\89ro\8f|u\8est\90\85h\91|n\90\8b}\8e\7f\84\96z\82\88\82\80\8by|\87\86~\8f\8a}\8c\89{\87\88{\83~q}~l{yq{\86vi\82mf\8cio\8cok\8bih}[sx`dyghveqq`p{W_n^c\80W_xn[epZhpbsklo{c|\82syri\83p=MY<MR@RMLHNV>IQ>LE4VI;QQ=DY?H`GS^GP[FOWIKMLAJHCTHE]VRXUOXFIYKTY[NVe\\cXYZbb_]`h`ie]m]U\80ZV\84UV\86\T\82b_yhhqjjw\ekcbn^nuemtdhuj`vlermm{gu{nmqoprjvthpyqisjmvsn}x}wxxm\80rv{n|~ep}`t\89l{\8cw}\8f}q\81\8fv{\92xw\9a\82y \85{¡y\84\93sz\94b~\95cz\8fdr\7fay{fr\85c|\82k{ws|uz\83p{\7fvwytz|x\89\8fl}\90az\84f\81}`z\80i\8b\83n\8f\8ds\8e\8fq\87\97k\8b\93s\94\90l\9b\89o\9d\8ae |hÂ¥{a¢\7fV©zZ\9dxK \87I­\8dD¯\8fO£\92S§\8aW¤\8dM\9a\80H\9a\88P\9f\83X\8e\87S\8d\87T\87\92S\8c\93]\8f\94f\84\87]\8e\90\\89\96V\82\8bS\89\89X\88\88T\8e\87V\97\83V\94\8cd\89\8dT\8a\94J\7f\8bM|\89C|\88L}\92G~\9bGv\97Xs\9f_x\95Ws\96\{¢O~\9fUx\9e`k¡ek\9bij¢hg iq¦a~¨Ws®Th«]i§fa´g_¦rn§nv£un¦sx\9brr¡or§ga§ci\99Zh\96`o\9aff£fu\9dg\7fÂ¥_\81Â¥Ru\98N~\98Xy\93Yy\95T\81\8fPx\92Ax¢=\81¡C\87¨?\80©N\83ªL|\9cD\7f\9fH\80\91B\82\91H\82\95I\7f\9c8}\939w\98<\84\8dF\80\82?\88\835\92\84;\99\8b?\91\8e>\95\8a<\8d\8b;\92\885¢~9¨q5\9ep(\9fm$\9eo\e\9cp&\97l&\9en)\9dl8\94t7\90{4\8cu8\92y6\98q6\95zD\88sQ|oZ\84nX\8awb\90s[\86wY\83wa\87z^\94qS\92xW\97{f\8a\7fe\92}n\98wg\91tj\8e\81u\87sp\8drr\9avl\98\84j\97\8ek\92\8d}\9a\89\83\98\7f}\87~z\84sq\84zy\92\87x\8e\88~\81\88\80yz\7fzxq~\84x\83\84p}\85jq~mw\8fry\8egq\90dn\84_nxbjtehmXdpV^pY`~WiwYcnljlt`zpd\80wr}yo\81wv\87k<MdBPUBKURNWZIH[CJP>OK<VWBSXEQaCVUGRTL\aKPKTSOQHVRGdYTbONVSF`PQ]PT\`R[_`^e`lU\fgUqfXnfSza\\84W\\86^Xx^Z|[ey^a}Wpz[jxbqv`wvkqu]or]tubtu_v|`myey}pluczvij|vvwhvwwtrnpx\80oo\81ou\86`p\7fiu\87l{\89t}\87\88m\88\82z\81\8eu}\92\89\85\99x\82\9dz\83\90s\86\98c\82\93m\87\7fn\85\81`~yi{\84mu{u|\84q~s~sxx}o\88\83m\8c\82t\80\85t\84\91r}\83t\87\89dx\84m\8b\82n\8b\8e{\81\88h\89\8cp\84\95m\92\8eb\93\8bm\90\87p\9e}k©qf\9bx]­tR¡xK\9a\83Gª\83N¬\89O\9f\8fS¨\82V\99\80H\8e~H\95\81K\99zU\95}`\90\87e\8f\8b`\84\88i\82\8b^\8c\89R\81\84S\84\95c\8f\89X\8a\88U\8b\82W\83\83]\87\95[\95\8e\\95\92V\8a\9fL\87\8aH\88\82@x\92M\7f\90@|\8cUs\97Un\98Ov\8fYo\94Vt\92Mt\93Px\97To\91kb\9ane\9ake [x\9ee}«[q§Tiªdp®ja¸[h²fo§bw«mr­hn£fq rk\97pb\9bg^\8ffe\89n]\9cig\9b`g\9e`|\9dey\94]y\9aOt\9dQ{\8aZt\8aTy\96O\87\90Kz¢A\89\9a:\89\9fF\8b\9fE\7f\9fJy«G\81¦Q\84\91I\87\8e=\83\8e8y\98?v\99>m\8e?|\83B|\88B\83\84?\8a\838\94\804\8b\87A\8e\93=\89\880\9d~2\9cu1§~/¢z,£o"¦k\e\9co"©m. r5\97o0\92m5\98z-\9ay<\99v.\90~F\8e}L\8ayL~h_\82x\\82xX\83vW\91q]\8dvV\8fyf\90\84`\89zV\8bz\\92wa\91sg\98vs\95xf\8f\80r\8b\7ft\8flk\97yk\93\87n\9e\88v\95\8a\81\90~v\98x}\99~n\87xu\8f\81m\92\87q\89\7fv|~~\81\84}\8dxw\83zv\8e\80n\81vu\83\82n\83\88bx\8fet\7fgs\87bm}gvpnjqWry`iwQcvTgu]ithr|ae\85nkzo{\85q\80\88||\84p=EiDBhQIiRSXVUUYONPM\WHYSLR\BYcJX[Ja]Mh]S^\W\ONLTIKdJNkZLeXS^]RaUYg_Ueg\scNqYNvTJw\TucZp\en[m|XdnS^p[^pXly_lrWrw_mrbxj`yrSypWsqWp\80`s{ay\87bw\8ahw{ht{h{yprtt|mqtxrkurplspr}gl|pv||{~~t\89\83o\7f\86p\84\8f{\80\9d~\88 q\89Â¥m\8e\99i\81\8di\82\86p\7f\85l\88\81n\83\83mz~ut\81zm\82uq\82wsw\82{u\88\82p\8c\88o\87\8bz\8b\82z\84\83r\80}j\83\85g\81zg\83\80q|\85h\86\90p\87\97e\88\91i\87\81d\90\7fn\94}h\9bt]\9c|T¢sSÂ¥~L\9b\80Q\97\81P\9e\8bY£\8dR \8bI\93\86I\8f~M\8d\86O\94}Q\97\89Y\92\8be\89\90^\8d\84c\84\8c[\8a\8dW\92\8b^\88\86_\80\80V\89\84]\87\84[\89\90^\8a\99f\8d\9a`\87\9da\8f\98X\91\99L\83\8bMy\8aP|\91G{\96Ow\96Qv\9dSr\93Vl\91Lt\8fQu\90Ml\8aWp\96`e\96jk\9bhe£^d¡ct¬Yo¨Xo¯dmµhj«^t®eu°[|±bs¨lu«ao¢cs\93be\93n_\8bt]\8bnj\99ei\98^g\96ei\95\r\9day\97Tx\94Y|\8fZ{\97P~\96O\85\96N\8b\91N\86\96K\87\9eB\83\9bB\81¡D\81¦Hx¢L\80\92?z\8d:x\8e:v\8c<y\87;t\852|\86/\82\8e9~\91>\84\8c?\88\8bB\8b\85;\99\8b<\95\8a5\93\8a/¡|4¢y5«{.¯\7f)ªs\1f§k'«s4¤u/\9dg5\96i-\96u/\98u9\9d\816\8eyJ\8a}P\8dzO\86qW\8erZ\85t]\91ma\8cn\\85{[\86\7f^\87z_\87}d\82{h\8cv`\8d\80c\93\81p\8cuc\8eqg\8ctn\8bvm\8exp\94\7f{\8fyx\99\82|£\81\82\9bv}\92wt\94wm\91wj\87\82m\88}n\83}t\81\80y\8f\7fs\89\81r\8azs\90\83t\86{q\83\8bhz\8e\\81\8cY~}fzth}xgv~iov]k~^p{\q\81]r}Zz\88gr\8acv\81l\7f\81s\82\8es\84\8dz:EqMDlGQaWVV`VUZJ[[O`PQXMD_YM_SQ[cWc^NY]UU]QX\S\VRXb\P[X]g\XcfUeYTc_SfmdvicifS{\Y\84\Nti`pelzf\\89\`\80YfmV\uVdl[qkbun\}o^|rX{kUpv]s|cq\84aoub|~c}\80pk~pj|mrskktqompmjopvu|k\80zh\7fvv\81|yx\80rz{u\83\88p\90\89q\84\9cp\8a\9e~\8c\9f{\8f\94o\84\95m\93\8dj\88\91m\82\7fdy\81ixwtr~st\88yi\80}hwvpq\85wv\91{x\87\81|\8e\92v\8b\8ap\80{~v\8bi\82\89r}\84h~\7fp\80\8dr\80\84s\87\8bv|\82k\84\85q\93~o\8ath\96zf\95s[\98u[\95y\\96\83V\91\81\\98\7fc\89\83Y\93\81E\93~D\8cuO\84|Q\8a\85M\81\81c\8b\8bk\82}Y\92\81a\84\8f]\8d\8d]\80\8c`\88\89]\90\84^\8d\86P\86\85a\82\86V\8e\8eV\96\93b\8d\8eQ\8e\8dV\90\89O\87\85Hx\8eCy\98@{\99Ev\9dL{\90Lz\91Lx\87O\80\8dNw\8cOu\92Q_\93dh\9d^d\9ajf¡Yx©Wr°[{«b~©_u±Zo£bs°R}Â¥\n¤\{\9ddp¡m{\9chk\9bkm\93lh\8clg\86bn\8fhf\97bb\92Sm\89Os\86Uv\93Ip\8cJ\7f\8e\t\96U\7f\8eP\85\8cN\8c\90R\8f\8fC\8e\9cM\88\96K\83 @u\9dE\7f\94N~\8dJx\839|\88Aw\8fBu\85:}{/}\87=\8a\82=\8b\85@\90\86J\85~?\8c\828\91{C\93y2\9fv8¤j0 o.®p7ªl Â´w\1cÂ¥d\1e®g&­`(\9fl3\93g4\9ft9\9bt1\9a\857\9bzJ\90tM\8fyR\94nN\8bnV\81zW\89~`\83pS\8du]\8b{W\96\80R\93\82\\8bud\95yX\89ri\90~c\85xd\83on\8exg\8bml\94so\9f\88{\94\86s\8d\8cq\9az{¢{o\92tw¤tj\97tv\8bqp\81ss\83sp\82ux\81qq\83rt\90\82l\86|m\8cul~\82_u\90g}\90c|\87m|\7fg\83|govirwal\85jx\8aanzfuzdu\8b`s\8b^{}b}\8bm|\87r\8e\86\7f<QaGG^VGf[W_dMV\K]WT_PWbZRaRRa[[_]S\\STPJ]XHaZObZRT[`Va`T[hcnoYohXqvTsv]vkfmkczsf\81kWtk[vcfzeb\89^cx^^w[gmZpj\soW\7fvU|qR~iZ}mW}qex{ewv[osbmupumuxtumrslxpjkzqlrlhwtk\86xr\8bsh\89wp~|w\7f~y\84\8cy\81\8dz\84\8do\8f\98m\92\90|\85\99p\88\9fs\8b\96p\8f\8cs\8e\8bs\85~h{|gz}tx~w~|mv\81vxx|jl}hu\8as}\8b\85t\8f\8cr\7f\83o{\83x~\85pv\84w}}ow\81k\80\82r\89\88u\81\81w~\7fs\82|i\86xh\8ezh\97}d\92\85c\9c}]\8e\7fc\90\82_\93\82W\84y^\8arT\85tK\87jUypRvuVx|P~\84Uy\89c}\81_\85~Z\84\85b\7f\8cb\88\8e^\89\83U\92\8cL\8e\88R\8d\83[\7f\8a^\8d\91b\8e\95U\89\93Z\8f\88X\8f\8aR\88\84J\7f\8bJy\90Bs\93C}\9f@\84\8d?y\8bN}\8aM}\86Ir\86Lm\91R^\8bT`\95]k\9dgv£c{¬b\7f°Ry¦R{¬az¦^t¬[q­^z«Wx\9d[z\96fy\9f`v\9d^r\9bmt\9ckj\94pp\90gl\9cdl\96bj\88Xm\84Rk\8eVu\89Ky\91Wp\93S\82\90U\82\82T\8b\83V\86\8dS\82\9cG\88\9dI|\9b=t\9c;\80\9a=~\89Fu\88As\88Hw\7fA}\817\7fy/\80z4\88\86C\8f\80E\87tG\8brE\91qD\93\81A\9bp<\93k?\92d<\9ai-¢_/¤f.²h#±j#±j\1e±a\1cÂ¥\(¡b-\97c/\98n3\96rC\96xD\98\7fH\8dy@\92xL\95lL\90pI\8b\80O\83zO\88xY\90vM\97nQ\9dwS\91}V\8etR\95m_\96t\\85yf\8fqc\89yl\96wv\92qq\94|w\9c\86q\93\8bq\92\8bt\8f\84p\97|r\96}t¤\7fu\97s\7f\90py\8ezr\8csm\80ot\83sj\84rt\8c}o\8bxb\81}\\86\91g\81\93dy\8ef|\80f~xb\82\7f[~\86`q\84gq\8bn~\87mw\86ur\80lr}t{\83j}\86pw\85f{\8bv\8e\86zJEnJQZOR_]YgPY_SOeY^eU]i_[q[YqPSmZUg^]kNQiYOgSQkRbfQd_cekZicnhgop^xy]|nYwmcyoe{j[wk^\82idxjg\82_`\8a[r\84Wnv_pqYypetgWymY\7fqU\84j[yy\v{`\86tgrtbro_m~mzuxgwsrwsps\82pw{cfrfg\7for\8aoq\8c{r\81ym{xn\88{t{\8d|\89\93t\89\93o\88\9cs\86\9dr\8b\97y\82\95y\7f\87p\84\8fu\85\84e\89zj\86}h}{sqvnovryy|qy\87qo}l|\7fqw\83\87x\93\82{\84\84\80{\8dr\84\8ew\81\82uw\85{x\8c~\84\8fo\81\86sz\8bsvzpy\86n}wq\89\81`\90\80d\95~^ \7fX\89wg\83v_\8a~^\83tP}uZ\84nO{oSyk]|~`\80\83S{zV{w]v|U~\80\w\87\\81\83ex\8cU\82\7f`\85\90_\8a\89]}\8bU\87\97W\88\94R\88\94N\85\8aZ\93\90I\8a\91R\80\87I\83\89K\85\98K\85\9aI\87 D\85\8fFq\86J\81\8eN\83\87>\83\91Mt\8bMk\86Oj\95Te\97Qy\9cVu«Z\82¬Q\83\9d]}¦Zz¢ay¢Zn£\u\9c\v\9agy\8fap\95ct¢Z{\9af{\9fov\97iq\8fbp\96\v\92gx\94aw\8bZw\8a^p\8cMu\8dIq\84Rp\81St\83V\7f\83[z\8dT\85\97Jz\98D|\9c;q\9d2n\906u\83>u\81Ex\85O~\84I\82\838\89\844\81x7\8f{B\8epI\94oF\8fwG\87jJ\8bw>\8c{>\96r6\99l9¦o(\9fl4®e6­r/±a$¸d\1e½g\1d²m\1e¨Y$¦[4\96],¢iA\97{B\92xD\92wF\91sB\95pG\9bwS\90}M\90yT\86\80L\94~J\99\81R\8auM\8euT\8diV\8ekX\88s^\8cl_\87ua\96tf\89}j\95xk\90\80u\9b\86|\8e\7fp\99\89q\9f\84p\9d\88q\9d~m£sx\98\82o¢zt\96nl\99tg\8ayf\87\7fe\8axj\88\80f\8ezj\93\85h\80\8a\\85\8ad\89\8e`\8cz^|\86b\89|c\81\82jw\8cc}\86e\81\8dfv\8bjs\8bpu\86mv\89r\81\87l~\8fa\80\89j\8d\81zYH`XJgSVpWUjQ`bV[k_il^fuYpoZis_gvS[lRcbY]iT^rUZiXWqVen^rn`neotgpxaoz_~q`}gYzcV}hU}fa}d^\86_b\83Xf\83^s~SvzXqtasob|ubzq]zsVxo\{rY\82we\82lZ{l`yy`{zio{mj}wmsznv\82mq\89iq\80iz\8cir\86rz\88up\86ur\87\82t\82\83t\81\90~\83\8c|\84\88r\87\95u\8f\92w\85\9c}}\89y}\86~z~s\87\85r\84\8aj\84\80`\84\80gu\7fpjyinpysv\80rq{kz\82ts\8fyw\8f\88|\8e\88{\84\8dv\84\82~}\88~\83\8a\87y\8a\80p\8e\85x\89x{\8bxv}z\81z~z\82p\82zk~\82^\91|f\93x^\8cx^\85ka\86ia\7fsS\83wWxpQttPvs]\81r^zx^}vSsuWxo_vt]wzh{\88as\81_y\87[\82\90X\81\8dW\81\88J\89\94L\8c\8dY\84\8dT\8b\89I\88\8eF\83\8eD\86\8d?\8e\97:\87\91F\8c\91<\84\96?}\89Mz\8dI\7f\89C\81\8dA\86\8eP}\88Ot\83Mf\8bNl\8fMr\98Zq\9fZv¡Yy\9dVy\9acs\9bhp§[u\99W}\94c\80\8f[x\93az\9aZ{\95d~\98_s\96il\93at\92^}\8a`z\8bgz\95k|\8dis\82_{\80Wu\7fT\7f\84Pw|Ms\82Z|\8dRw\95Nr\9cIy\98Ko\8dJu\939s\85Au\85<svFwxE\87\84L\8a\80C\8b\80B\91\7f;\8ds:\90oA\85mD\89lG\8dtJ\8emF\87jF\90r5¡n/¤h.¢d1§q,¬o"´h Â¸e\1a¸l$±b#ªa%¦W\1f\9c\*\9ak=\9al?\99q:\8f|B\97\7fL\94{D¡tB\9cvO\9a{T\95\83N\99\89R\91\84K\98rQ\8fq[\9arV\94f^\8bhf\8coi\97lb\97th\97}p\90\81n\8c\87p\8e\88}\96\84{\9f\82|\98\80}\99\86r£\88~§x{¢xn§\7fg\99~i\9bwh\9azf\98|g\8cuf\8a\7f\\88\82h\94\86b\8d\8e]\8b\84d\8b\7fm\8b\80d\82\83_\86\81]\8e\87d\89\8bn\8a\88tz\8cmx\84_z\88bz\82b\7f\81j\84\87b\8b\8fc\8f\88f\91\89pZKrV[hW_j`_v`flXejamrcd}Xp\7fYlwXWx]_i]XiTe`S_eU]l_^raoi^urgmdowbxxhzx_utoxpb\7fbW\83e^~uo\8ano\8bei\8cWf~Zq}ZqqSyoT\7fjT}t[\80ya\82nh|r^pof}wb\87k]{ij}zezrruvqpt}v\7f\84gp\85w~\8cer\88jp\88mo\89vm\91nj\94~o\8f}u\8d{k\8c\8dw\87\8am\7f\89~\86\8ct\7f\95p\8f\91t\86\8au\86\91{\86\89j\83\85u\8d}k\81\89s\85\81fozht\82sozuwryuz\81zy\8buv\90\81y\93\85~\8d\8d\80~\91xz\8a\81{}\7fx\88\82u\8c~q\83\80\81|po~zv}mx~p\80\85ruyo{uX\86w[\89i[\8fyX\86m]vkZvzR~qP}xTpwRvx\t{Y~\81]t}a|zUsqPmnYp\81Yt\7fZt\8f`\80\8f]{\91T\89\83Q\85\91P\80\8aE\82\8bU|\8b[z\90H\7f\81N\85\8fF\83~G\82\85<\91\93:\8b\95:z\888\82\87Ev\8fH\7f\87Cz\8eG\80\92E\7f\8cHt\84Hk\87Tm\8aXr\98Nu\90\p\8f_v¡c|¡Zu¡Sr¢]z\9eYx¤]\82¡]v\97Uw\9c\\80\90`\84\89`v\92gu\8bhu\8abt\8cgr\91a\82\91b\83\85n\83{_\83vd\83x]~\83b\80\8bWs\8a]\7f\93O|\91Ty\97Lo\90Gu\98Dt\959v\89D~y9q}IzuF\85wI\8eyP\82\85>\92\82K\94v:\95x:\94vA\88oJ\85kE\8fyB\97v;\9bf6\9em*¢h- k+£v,Â¥f&·g*°n"µi\1f²h#Â¥`*\9fd%¬\+¢\;\9dg<\9at:\8dr;\8eqI\90oD\91tA\9f}F\9a\83F\91\87I\8bzI\8axK\98sY\91pW\98gg\9es`\93tq\93wv\8brt\8bnf\9b\7fl\9fwi\9b\83z\9c{q\9e|u¢\83|¢\81m¢\87u¢\85o¢{~²~s°tl£|j\9azh\99\82p\9c\7fe\9azj\8f\82]\93x[\9e|`\93\7f^\94\8c^\88\81j\89uh\85\81m\90~]\92\81h\92\88i\87\86l\8b\84k\86\86n\87\8cf\80|j\80\89l\8d\8c`\8c\8bk\96\82h\8b\8dwTV~Q]wQ^uZfzekwafthd|_n\84fcwdfoeUv^TtU^kVacQjdOhgbhrgmmloq_ske|`n|fjsqsknremtii\82rs\83xu~hi\85dl\87_i\87Yn\80V|yX|pSznSzt`~xg\7frhpwcovdvz[\81n]\84pk{up\7fvqqz|jv\80p~\84my\88r\84\8en}\8flk\93gj\85ru\91lr\91uu\8b}j\8e\81s\88\89o\82\88s\81\8ex|\8cj\85\8di\8d\8bq\90\8cw\86\8al\88\8bi\85\82n\82\7fk\85\87p\83\80oz\7fvp\7f~vyuuuwywz|\83\85v\87\83\7f\7f\92\81}\87~\83w\84\8bpx\84vx\80x\87|y\85\7f}}xx\80uv\82ow\8aor\8fzz\82}|ukxp`um\\82kd}le\82~Zs|NqoOvoFs}M~nI|pPzsZr~Vrw]vmWwpRnyXw\83Qy\82Pw\8cW\80\89W\83\83T\80\87Lr\89Eu\8cJq\90Mm\92Rx\8aPv\81Rz|R\86\80K\85\92E\8b\939y\98<x\8b={\92>y\8aA\81\93Dx\8cGs\86Fx\91Cm\89Br\8cKm\8dKr\96Px\89Uy\8a[w\9cdt\9f^u¡[y\9bT}¢St¢Ov\95R{\99Sy\8d[\80\8ba\81\94c\83\90o~\8cg\82\92p{\8dft\89j}\90`\81\87a\88}h~nc\87|i\84\85b}\87^q\87Y}\8fN\80\90Rx\88Sr\8aPz\92Q|\8dC~\7fE\81u?{x>y\81Hy~T\85\83T\82\81S\82\84I\8d\83?\89r@\84w?\8d{J\93rI\8ezB\98y@\99k:\94x7\94w&\9dl*¨l\1e¢s+¨i*¬e#¯`!®^#¯_1¤^9ªj2\9fg8¢`A\97d<\9coA\92vI\99oF\94|?\97~H\98\82R\91\86M\94\7fR\90tZ\91p\\9ar]\9bkh\9dni\9dtv\91mt\8fli\8eso\97qh\9dyq\9cuv\9cxr\97~|¢\7fx¦\83|\9d\8bp©yq«xoÂ¥qf­ue£pi¨qq¡tn\9a\82r\9d\84f¡xb£rd\9bzf¡\86b\9c\84[\93\85_\88{i\91tc\8cqf\8b|h\8e\85e\92\81c\90\88o\8d{p\85~l~zl\84\81c\91\82p\92\80n\88|q\8c\88rQI\81Y[\7f[a}Zc\89Zl~Zs\80`ez`d\81^l\7f\coZ^yi[nbfifcsQdhLkfSer_htkrvfylcwml|tqxlxko\80xf|xg\7fss\84\80}\87m|\81qp\81cu|aysRuxU\84qT\80nZxqV\7fp[|}ZtoglsXt\80a{wh\86pw\7ftm~lsttrry~tm~jj\8euu\92t|\8fwt\86kx\83~g\88tj\8fwq\92\7fi\89{g\87\83iy~d{\85t\84\8ar\8f\8bk\8a\84d\8b\81m\88\8dq\8d\80j\8b\87m\8f\85c\88}q\81{u|}\7ft\82\7f\80w\85w\80~\83}\81r\85\7f{\84\8b}\82\8d\85\81\80{\85\81}\85z}\8foz\8f{p\90y~\88ow\83zwyoxst\88w|x\83w\83~ttm~v^|oc\88n^tsZtpX}~]ryLrrRwwHmvJ~mMutVj}UopUy|]wkYhxYz~Tt\80Wv\80Ow\7fIz\82Jz~Tv}Dp\8aDo\84Ro\91\l\89Lt\8bG}\88Ez{F\8b\80<\84\92@\87\94A\82\8f7r\8cCx\8b@w\88Nw\97Fp\87Pk\93Is\8dIr\8eQv\91Ps\91Pm\90Sq\83\j\8e`l\8eUq\9dPv\9fU|\9eJu¢O\82\94J\88\95O\7f\8a`~\88c{\8fe\8b\9bi|\98r\84\8diz\8f_q\85gy\88[x\83i|pf\8api\8cvc\86\83l~\83Xt\86Sz\8f`\82\83\|\90Yq\8eTv\8cY\84\8fP\83\82G\86w=\88w@\85\7fH\81yL\83\82L{\85U~\90O\8byP\8dyN\84vJ\90\84T\8bwO\9c\7fD\9fs=\92n-\9fz/\9ao*\97j,ªt(\9fi-¬f'¦k.¡j)°]1«c9ªn:°l6\9f^;£[H\9bjE\97o;\99eK\93tK\93nU¡zG \7fH¢\7fN\9d\82L\8esM\9br[\91pe\94wo\95mg\98mr\9aqq\9esj\99{w\9but\95vo£v\7f\9f}z§\86\83 \7f\81\9e\8br¢\82yª\83p¤}w°tc¦\80m¨qj§mq¡yk¡\8czª}q |k§wc¦\80k\9e\82f\95\82g\94ye\8a|i\8cwh\8bre\96yf\8f\81_\8f\89k\8e\88k\91xg\85}r\8e\80s\8c~n\90wm\8c\85h\9a\85x\8a\7fo\X}eO\84ja\87jh\86lg~do\84ao\80\g\83]]\82[Z}eaxdbsljwheqbmhXigZugZptfk|ksrtwuu~qrxu{ysy\7fn\88zl\88\83s\83{y~x~tu\7f\80cwzawuV}pS\84nS\89zX\84x\{w_ux[poaup[v}d}|duws~ss\7fkltcpgkzkk\86qj\8bpv\83p}\8ax~\81|w\85xx\8epj\92jd\97va\8c|]\8c{f\80\84^~\86b\8b\81b\8f~j\94\87d\8e\86h\93\82l\95\82h\8b\8am\89\83c\88~k{\7fnx||x\81\82\83\81\8a\85\83\82{\8c}\85\83|\80\84y\7f}\87\89\86|\85\8dzv\90vy\8fsv\8dto\90oq\92wq\88x|\85vq}yt\86uy{\7fzy\84{v\81qk\87s\|mYnl^mq_wvasxUl|TsyHpqOupHojKsrVyy^oy\ezcio]sq^xtPxvRs}Gy{Mw{Pr\84Vg\80J^\89Wf\8aUo\93Yk\8cLn\86D\7f~I\8c\87M\87\88B\82\838}\8d>y\8dCz\95Iu\97Rn\94Mf\88Nl\8cSo\88Mj\84Ot\80Mu|Iw~Pm\84Pb\8fWh\89Sp\8eKs\95Tt¢Yt\9eLv\99S\84\95T}\90b~\91b\8b\96q\87\99n\88\96c~\8dg}\82`s\80]ruX\7fwa\8axf\88n]\84kh\82sf\80xj\84\8a\}\8d^w\87_u\82]|\8dd\80\86e\85\86\\8b}S\8atE\8bnN\89wS\85\81N}\82Tz\8bJ\86\8aM\8f\82S\87\81O\8a}V\94\84O\95\82S\9bzE p6\96r0\9du)\96t0\91o4\9ck)Â¥r%¦p"¨l$\9ep0\9en.¨h0£fB¯mB§lB£aE\9ea@\9d_A\9fbB\9biP\9coZ\9cmT\9boM¢zDÂ¥\82C\9cxQ\91w^\96|i\9btl\8fwr\98pn\9dst\99\7fj\9d~n\94}s\9c~}\95\89\82\9a\88\81\98\8f\8bÂ¥\8a\83¢\8ey¡\84}£\8fy§\89m¢\83n§{g¨\7fgÂ¥xo¨\87n¨\84v¤\87m¦\80n¡\81m«\83a¢\82k\9fzg\92wk\96n`\91rX\9bq_¤v[\9b\7fg\9e~l\97}j\9c\84w\90~r\8dwm\8dsl\8b\7fs\93{r\90\84v\97\83v^T}kS\85qU}qbz^a\8b[j\84dp\86hk\86ae\85[\}cathrvohnfmkbnoghq]qkipwmvxjz}fyyry\80y|\83xv\80y\81}~\84}z~z}|w\7fy\81to\83xe\82yd\84{c\85{\\82v\\84{c\87}ayx[xpZmxkvya{\81b}\81oyznx~krlpqwqnm\80nv\81ss\80wy\81x{\94nv\8et{\8dws\95ei\8cgg\86to\91xo\84zf\87\80e\8b\83j\83v_\93\89^\88~c\89\81l\91\8cf\83\8an\81\91i\88\83c\90yb\84yo{\86t\7f|x\83\89}~\8a\81y\8b\88\82|u\87\86{\7f\8e{\83\8f\86z\89}p\90r{\8bpy\81ur\8dvu\88m~\88w}ztt\80}q\81pi\84|k\81zro\82dg~ijtoWgq_fpPp|WxyNn\84Nq~LhyOihDooKukVjoXou\jn[j{Tq{IytFj|RnuLyvI|{Pr~EfuQ]\83QZ\87Kf\84Hl~To\85N\89\80Ay\82G\80\88My\86Hp\8dEx\96Ip\89Lx\8fQm\92Um\93Om\93Xb~Iq\7fHn\86RrtHs\81Ro\84Qh\84Pv\8eWo\91To\98My\9fKr\91Oz\91X\90\87Z\81\8db\8a\94g\8e\9ed\89\92h\80\9cm\88\92g\85\86d|v[\81\83b\85te\8dti\83{f\86miws`}\83V\83\84Q\84\84]x\82j\7f~fy\82\\7f\88[\82\84Z\84\81L\87tD\89}R\85s\{{M|yP\7f\86N\86\89K\86\88O\91\82G\86~R\88\83Q\94}H \81F\99oA\91y;\8fl-\9fu*\97t&\9ft&©h&±s)¤y%¢z'£v.«a6¡m4°aH¦m>\9cb<\9eeB\95h9£nJ£kS\9alO\9crP\9btD\9etK\9c\7fL\96~P\94~[\97xi\95\80f\8cpk\8c|f\9erx\90\7fi\91~o\95\81oÂ¥\81u\9f\83\84\94\8b\87¤\87\86­\88\90¢\86\8b«~\82£\82t£\8cs«\87n£rf¡\81j\99vi¢\82o¯|g©|p¬\83`¤\87`Â¥\8a` uk§tp\9f{i¡h\\96ih¨s[©{cÂ¥wn¢xq\8fzv\90wg\8c\87m\8e\80r\93tp\93\83h\98\85x\8e}w\93zvm`\83l^\8aj^\8dgY\7f`f\83cl\83bk~eh\88f_\8ece\82ee|qt{jl{mrkaxgdlpantkwx^xz`\7f|a\88\7fl\84\87h\81\89pu}|~\87~\84\85u}\83w\86{x\85\82qy\7fkk\86td\83{b~to\8ark\88ub~ld~s\z}Zrvft\7fl\82xi\80|r\83yivvyszyr{yykuzos}zzp}\7fk\84\90js\8ckn\91in\94pj\8dfm\91qm\90{u\88zk\87xw\8a|q\86zj\8e\87a\8a\85f\8d\90^\85\8dm\82\98s\7f\92q\85\84i\89\80i\80{kq~j\81\82j\81\7fr\84{\81y{}}\82\7f\7f\82\7f\86\8d|\85\8awz\8dxx\80\81\7f{z~}{s\82ps\7fno\83pu~|n}{g{qexkmzwnsthkyidqhefsXe|QpuVu}Uv\83Nl\82JfySkmKkpKnp[ryVt{\rwNtvJo\80Gh{Jj|OtnM}xFxtBkvNbwKhwN_\86Ji\7fMiqWz{I\82w>t\81<uyGo\7fFo\92Es\8d?i\83Al\90Bl\95Qd\95Uh\8bTn\8dVk}M{\85S}{W\80zMqyBj\87Rt\85Tz\8bPs\93Nu\97R|\95]\82\88T\8c\88T\86\8eT\84\92_\88\98h\8e\9bp\8d\98n\81\8bl\80\88q\88|i|{c\7fze\8e\80a\8dwj\81yh{r[y~\\81\85Wy|cv\81e\7f\82e~\85`y\87]\83\81R~}K\81kH~zV\88\7fT\86\87Nu\7fJy|F\85{L\8c\82S\96\82J\90\85@\88wD\93zF¢vH¡oF\95y7\9b~;\96s4\9cs+¤p(­i+³p2­l+¤u+\9fx/¡j:¬\B®_D¯`C¤gA\9eb>\98h?\94fH\9feD\98q>\9csI\9etI¦pG\9bzN\9azR\9cwb\96\7fd\98\80Z\93y`\90re\93ur\90\7fv\96\86m\9f\84p\9f\80v\98x}\98|~¤\8c\8b§\8c\8e¬\86\8f¦\88\84©}\80\9e}w¢\83z£ztÂ¥\87{\9a\85p¨ym§~b \80j¨\82a«\84[©\81dª|n\9dsj x]£s[¤wY¤id¬wp¨tmÂ¥lo\98ls\93mq\93\7fg\99~q\92\80p\90\88u\98\83t\95v~\98x|cS}g`~sc\7fjV\8bmZ\8ckc~bd\84lp\84ld\82imwlo\81nm\81vrss\82vd}piqspxr`\89~d\7f\85_\87\8c[\81\80g\83\92j\8b\82m{\88q}\80n\91\8bm\89\86q~\7f|\7fyrs\81}n}|f}so\83wn\89ug\81uo\83lh\84uj\85tb\84k_vyb|ui}xlzyftvm}tw}qlvfyyyy{sux|\8ah\82\8dfw\8buv\92sm\87mo\92rl\89lo\96ym\94\81s\91|p\92zw\95\80c\90\84\\8f\89c\8e\8eb\89\8bh\83\91g\88\95u\83\8dk\8d{n\80\83cryo}w_~}i\7fwwt\80~wz\81~\81}{\85\82{\88\82\83\8c~t|\81{}~w\80vr\86ro\86oo{vx~we\81vp\7fgrtqephdimkgotfrvjixYd\7fXr\7fVq\81]e\86Ll\84Op\81RnvDlmKqv]uoSvyYxxOpyPq|VdqGpsKnkSo{Srv=ouA`rFg\81FgwWetLhiLloS|~A~~;q\80Iu\8bCo\8cAo\86Cw\90Cv\86Cd\94Ek\8cIr\88Xp\84Mk\82Ru{Qt\88Tz\86Pv\84J\80~Mv~O\7f\83Sy\8fS\88\90V\81\91\\8d\84T\8b\8dS\8c\90^\92\90Y\91\8e_\94\96b\92\86g\86\80c\90\81f\85qe\91{j\81ss\80{b\8f{n\88pdxukszWx~_u\83d{{d~}ezzb\84t^\85v\\87xUzrM\88oJxwM\85\81V~rM\81tK\89xS\8fxE\94sM\8dp@\8emD\96lH\9dsC\9c}K\9cu@\9ewA¢t1¢x5±m(¶s-·i:¯g1§u4§q4§j:¢`?­hI§gF¤mB jC\9efB\9boA\9ffE\94qM¢tN\9b|F¨~P¢wU¡|W\93xY\94\80c\95\80[\95\82]\90\86o\96\80w\91\81k\8d\84r\99\90y\92\83s\8fzv\96\84s\98~\89¤\82\81\9f\7f\82\9d\80\81Â¥\86\83£ztª|}¦{v \8cn\98\83q\9a~c \83[ª\89Y¦\83i¤}i©\89c¯tp¤ro®\80^²\80]®}]§ij\9dni¡kk¤jn£nq\95}m\9f\83h\9e\82q\9fwh \87q\97}w\95\82\81\96z\87lS\83mZ\80oZ~oZ\85kV\83m^\89uj\88ri\82um\82yjzym\80xrzn}|o\80ul\84rr\83{n~|_\89}Y\83}a\8a\8cj\8d\90b\90\94d\8b\8ei\85\89b\85\81l\8f\81o\88~t\85\81q\82\7ftswvxywn}\82v\81|x~tw\84np\89lo\88mg\84nd\8aph\83jj\83l_|wc\85sd\7f|dysf}sh}psxmqo{xtsyh|\86l\83\89r\7f\8dv\80\84mx\89qq\93tm\93\80p\8f\82k\96\80l\96xl\96\80h\93\83c\8f\89_\95\88^\91\91l\8d\8bl\86\87r\81\88n\83\86g\81~h|\7fhs\88bt\7ffw\85ps~~r}\83v\84\88\7f\85\85z\93\84x\8cwv\89\82q\83~z~}s\83}i\7fqc\87ti\82mt\83poreiyjcnsnjnrplwmgs_j~ej\80^_\82Wc\80\`\8aRi\84Qj}Lt~KqzStzPk~LowVvq\ryTk}VasPeoYdwSguSe|Hf~E^vM_tM]pTkiQqpOmlRutFps<{x=}\84Av\8aG~\93Eu\92Ir\87?k\88Bp\87F{\90N~\85Gx\88Ou\86Iu\86Ss\88W\82~I|\80D\85\88C|\81Q\81\87P\90\82`\8e\7fb\91\8cf\89\88`\84\8fd\90\8e]\98\88e\8f\8ae\8d}h\8axg\8aye\93to\8auv\88lr\8cnj\81seyt_|ni\81ydxzbwyj\82|m{}e|qhuxfvp[th_\80oR{rPymV\80tP\82uQ|{T\84vS\95|T\94uE\9ezE\99n>\92yG\96vH\9dsM\95nC£o:£p8°n>±y6¬r>°p4¬u:¢h<©l8¤e2©c?«f<Â¥^E¦gD¬lD¤h;§p:\99iD\94mA\96zJ \82N\9b{K sR\9dyX\98}X\8d\8cY\90\90a\93\87c\91\82g\96\88t\91\8dk\8b\8fl\8c\87l\91\8ay\8b\7fw\8d\81w\92\8a\86\9a\85\85\92\83\85\99\85\84ª\84}©\80v\9d\85|\9b\81r\95\91q \90l¨\84a\9f\88b\9a\87j\9d\85b¬\85^ª\84fÂ¥}b©{j­xm³\80j©vl©v`¡j[ n[\9ah[\9dmh\99|h¦}mªxq\9f}n§yjÂ¥zt§z|\9e}\80lW\82gN\85pT\8cjc\7ftd\80n_\8dgl\81gg\8bkr\8bxn\88lx\7fvxsw{\81u\7fzh\85\80k~\82a\89\82k\8f\86g\87\8eq\91\89l\86\93j}\98b\80\86h~\91q\8d\85i\91\8fw~\80l\82xz\85\82tvysw\7ftm\87~x\8au~{kw|qu\85nk{zcxmr\82mk\84lnzfswmc\81idrsdzsq{{v\7fvn\7frsoulpt{qs~n\81\80i|}uu~q\81\83ks\86{{\8f\81e\95\87g\91\85n\91|c\9a\87k\91\8dh\93\8cf\8a\8b]\8c\83b\86\8bw\82\8dl\88\8er\88\8ap|\8c_\87|c\81\7flx\87iq\85h\83tzu\83\88\83\8f\88~\8f\84\7f\95\82t\97nt\92vq\8fzv{~o\87wj\86yr|md\81wdtylmbilbiteinjsnpr^fmeivai}S[x[`\88Sg~^_zNlqZi}Kj\81P~qDk{Kp|^evRk{Pd\7fMbwPexOfqPgpJh|?^w@[qHcwR[oMbqMlnSnzNi~?o|CxzLnvExzRn\82Ds\8fEi\82Me}Mp\80E|\8aIu\85Jv\7fRv\83Tp\84Sr{T\81zG|\87N}\81J}\7fO~\82N\88~T\92{i\8c\8bW\85\82a\92\84X\88\83_\94~g\8b\88l\8d\7f_\89}_\93mr\8fve\93gr\8fjo\8anh}ro~{f}lb\81p_o{U{ob\8bsj\84sa~k]\80s^zia\87s\\82eQ\86uO~rJ\8cqI\8dmC\8asQ|lK\8dsN\9aoF\97kO p<\90pA\95{B\9dtA\9fo= hF¡j4¡p1«s*«p:°k?¬h4³d;Â¥e@\9bi0¦f/§d>¦e7¬iC¨b:§iG£nE\9fiB£kF\98\7f@\95{BÂ¥qV£zN£~T\9atW\94\88W\95\82_\9b|a \86t\91\7fq\96\80{\9d\84~\98\83y\95\84\7f\8a\85r\88vq\9a\88\82\9a~{\91\87\83¦\7fu¤\83v\9f{\80\9f\87m¢\80i\95\88eÂ¥\8a^\9b\80m£\8dg¡\89a\95{g§\82m¦\80aÂ¥vl­vq£taÂ¥|h³v[°}Yªq^¡qi¡ej¦ma\99nc«ye\9fqg£\81v\98rq\99p}£{\80\9dv\86kO\8deQ\92oV\90je\84sg}qh\7ftf\82lr\89jt\81hx\88hw\7fnw{x\81\80r\86zu\88\7fg\86\84i\84\7ff\86\88f\89\83q\88\88r\88\8em{\8epx\95p\80\8es\7f\91p\88\8b{\81~ty\80t|\87x\81\89\7f\80\8awp\87o|\83nv\86mwxjmvtg~vn}vo~wn\8drj\8bgu\7fjv\83euvhzv{qyuk\80xtvyltuqu}rxx\84jw\86gv|fx\88sz\85uq\85vw\8d\83q\98|b\9a\83^\96\8ek\97\8co\98\8ek\97\94a\8f\83e\8e\81i\87\82p\8a\91q\88\91k\82\83g\8e\8bd\88\88q\83\89py\8fo~\8cn\82{m\81\8c}\82\93\84v\99yz\99s\80\9dtu\93xz\94|y\83{o\80km\89okwfeurmsrltlgk_npdkx^woivcqv\dwRaqWX\7fR]\82V[tRaqV_s\krYiyUvvIzmUpqWmoVfwG]rJYyV`~Z`vPkt?ms?`z>]zF^hG_cKfgU^{XdwTjvHd~UozTzvQwyT\80zVx\83Ox}Np\7fXm\80Zx\85O\80yR|wNsyRtwV\7fvMy\84H}\88B\80\83MqtKquM}\85S\88\83`~\7fS\84\88T\84\8bO\89\82U\84wb\8dth\83lo\89pe\8ejf\91il\92j^\8bu`\87na\87wm}nn{tazl^vrU\85pX\82rZrnbsvc~w]\80l^\81dW\8beT\88oH\8arG\94xI\91uD\88oI\85iJ\8dbP\92jW\93bM\9afF\98kN\9auI\9fv@\98q;\99c9\9ce?¬]/®d-®h4¶i=¾g4µo8°l9\9eh7®k;®a6£i7¡d6\9ek7\9dfC\97pC\9fmM\97mC\9ftD¨mR eQ§lR§vZ¯pbÂ¥u]Â¥~e\99xb\93|q\9d\83z¦z{¤u\83\9ez\8b\9dz\82\8fwv\90{w\8b{\7f\8d\80\82¡\7f\81¤\80sÂ¥\81w£{}¢\8aw\9b\8fe¡\8bc\9f\80a©\8ac¬\85l\9d}h\9c~o\98wo\9czdªrl¯nj¦y^\9exa±zf³w]§jl\9clo¦qt¡ok\9etf¤hm\9djo¢tw qw\9dt{\92z\81\8e{}mX\8enY\94fX\8fif\90rh\87mo\84ft\86or\84ft\8b`z\8fi~\89mozsy\88dw\8cp\82}r\84}j\86\84e\82}j}\8az\7f\80uu\8exr\88lt\97t}\9cp\7f\93d\88\8ery\86hw~mu\82|\81\87xs\88qm~jv\88jq\82wx\7fhstpjquexpu\83vo\8cpw\89pz\7fkq\80m~{pqvurz}wsrr|{sly|jw}pyxlv\83rz\80u~\81vv\8cm\7f\88vy\82\86u\96\88i\93~`\8f\89h\9a\93f\9a\91g\97\8dk\99\8bf\9c\7ff\8e\92o\90\8cf\96\90o\84\82g\88\8fg\90\8ch\81\91u\83\91|\83\83{~\87\81\83\91~{\9c\83q\9a\80y\97zx\9dmn\95pr\91l~\8cml\80nj~^fw`pqerzitl`ojktlf|z_xxiwjq\81ck|gk\82\]~^f|Wj\83Vf\81[fuaryXm~Mx}UqxTf|QdoRYrE[yM_{NXuUk|DkxHtmH_uJh\81FelVigTZrPQ~KY\82Mj{LauPl\7fVysR\7ftItrWluVo\80Ovx`r|Mx\83S\7f\82IzzU\86xZ\84|X\7ft[{\85Tv\81N~\86RtpXyzX~rNw\80Q|\85V\8avZ\8a}Z\81sb\83mZ\88i]\84rWyxU\86ui\8aoa\8cri\87t]\81v[\84nq\84~l|l_}{^\7f~^{rP\88}R\80pOzu]}kY{nP\89nW\8f]O\96cS\8eeE\89vM\8asM\94kD\8cjI\8ajL\90cW\9fgRÂ¥iO¢cH§l<£d9\9cf2©n4¬q9«b6­n7¯g7¸i<¶lAµo9²a4£c:Â¥_/¨]@¢a=¯[:¦b4\9deA\9fbJ¢_K¨gN«nG£fJ¦fY«qV¯mN¨u`«h\Â¥kdÂ¥p`ª~w¡w\82¢w\82\9dt\88£s\80 ~\81\9dzz\9a||\92xx\96y\80\9ez\82\9e}x£\80\81\9e\84s \8c} \8ci§\7fi\9d~`\9dylÂ¥\8an¤ym¦xm\9asd\9emd©pe­mm£u]\9dgb¤ig²xi«vj\9blj§er\9flk¤rq\9cqz wq¨x\7f\9bs|\96w|\97\84w\8c\80\82_c\98ea\9fv`\98u]\94gj\9cie\98us\90ox\8ag\82\90d\7f\89n}\88lr\87ao\8afv\8eh\85\90o\8c\86s\8c\83k\81}gx\83r|\85w}\84tt\87n\82\94q\80\9art\94ex\89h|\85m\80\84k\84ysy}o~\89px\85vs\89pv\83xlrsoqll~ug{qm|po\8bh{\8aqx\81tszj{tm{wrnvnsxwrqyrr\81~pxwy{vq\80\81{w|wv\8avr\8aos\89|v\87\83y\98\7fl\99\89a\98\95^\8c\8f^\98\8f`\94\8cg\95\92\\9a\89[£\91c \94n\9c\90g\96\8fm\94\91m\86\98n\8d\88y\87\87\7f|\8e}\82\8bx{\99\7fr\9c\84t |r\9fwt\9arv\94f|\8aks\89lq\84gs|`w\82dn|mrwersljvequd}|czvpukm\7fk`|]d\86]`|]azYc\84cj\7fbmsfru[u\80Nq\7fOg\7fIgvQZzP[yIWoK[uMYwKdwBoxEjoKbpMcwVhrOakQ[oMTvK^yJ\\81Rk}TpsLtzK}qMruPowLfq\k{ZxvXz\80T}wT\7fyL\82~O\87}Y|\83S\82yZz\7f^~|Ty|PvoTulLrrMrmY\7fuZ\7fh^\7fk]vlb~nY\84iPzqT\8atY\88la|kX\7fj_\84njzvcwxd~s\\87qW\88zZ\89~N\88{O\86|M|tQ\85oT\7fiL\86`G\91aK\8e_M\94iB\9adI\94pG\99eR\95]U\98ZX\92]X\91\U\9e[JÂ¥[I¤g:¦f0©b-¢f,ªm5°j5°s7»v-µk4¶j9¬b:§_:¨Y0ªd>£e;­h4¯`2¯d;§Y8\9fYB§bI²bU±lT©mZ¬cO§iR²cS¨__¯j`µtg­po¦x~¢r\7f\9cn\84\9bz\84£~\84¡v|\97}\7f\93}z\96us\92y{\9e\80v\9fwy£\82r£\84zª\88x®\82x¦\87q©\83b \82b¡\7fo§uw¤os¦jd¤mf¢tf¦ll¦dc«e^´l`«re¬ri«`eªbb `m\9aor\9anw\9bhr¤pv\9c\80}\94~y\90|s\8f\80}gd\9fr]¨mh\9ar\\9bq_\9a`j\8bqo\93hz\86ip\92nt\8dmo\8dlo\87hu\82q{\88u\8d\84x\87\8ed\88\81m\87\81q\80\81g\8a\80m\84\8d}v\8euw\94m\7f\9af\83\9bl\84\87a\81\83c~ynw\85hy~nz{ts\82ou\82ss\8asq~nvvyq|nawnkzjk\91du\8eqx\80itycqubvxiw\7fvxvwqqwwk{xqy|vxqyjx\80o\85\83r\8bop\8ali\8bqo\93\7fq\9a\8ag\8e\89j\94\8bV\92\8b^\9a\89Y\98\8a_\99\89`\8f\90^\96\8da\9c\91f\99\94k\96\96h\8b\9fs\8a§l\85\90o\93\88|\83\87{\7f\90z\7f\99\7fu\94}\7f\96qs\9az| h\7f\91lp\8db\80\8fgx\87a}}hvynp~_wokzjemtgl\80c}nnqhp}fk\80nd\80di\8bkb\80gd\80Xn|gr|gjqbwz`t\80Nh~KgxI_oJhpPYuUVzOasSWjN_u?jsMjqIhjJgkRYiQdvN]nHUvLY\81M]vJ_|ThmSmnJ}lHyxHmvJz~St|Y}~N\83zUsxN}vS{\7fW\84sV|tS\82rYwnY}t\yf]~v^ygU\7fn]~ocxndzqf\82cd\83kc\85iUxr[vqX{aa\81lb\7fgd\7fm\\82{auvp|u^tja\80zQ\88rS\8a}S\84|L\8axE\7fmU\89jV\80_N\83^T\8bYQ\90]H\95h@\94m>\90qF\95_H\8biJ\8fWU\8eXP\9d_F\9eTJ\9f[BÂ¥oF«e7 a1¦^5¬b-°c,¹d8³j0¬b-°Z7¨X+¤S'§_,ªU.«W9°[2¶Y1§`7°^0®]=\9ciCªeS¯bGÂ¥eL¢eP¯bQ«nV²nU­l]£qa©di\9fe{¤kt¢v}\9co\80 u\80\9au{\98y|\9dt|\95u\83\95w~\97us\9epxÂ¥s{\9ew{\9b\86{¤wiª\85l¤\84a sp©\80p­vv­ez©nl©pi¢j`£de£bl®`e§pm®ah¯hpÂ¥]l«\y\9edr\99^~\9ecz§fz©ct\96yv\9c~}\8fyt\92v\84ma­v`¡k_§oa£hn\9dhn\8fdz\90ot\92ov\97rt\8fvl\91hr\88h\82\87s\82\89o\8e\88r\8c\8do\84\93h\86\94f\82\97g\8b\89h\8a\8et\81\95j\85\95j|\9da}\93g\7f\96d|\8dfx|j|\7f_~\84i\7fxrrytw\7fuu\7fqq\80nlztesliskmwmh\8cnp\8b`}\85h\7f\83dq\7flv\80gr|nwx{~pnzrlo~rz\80jvsm\84rg\84\82k\88\81w~qo\8b{i\92wr\97{o\93\8e]\97\8c[\98\8bc\93\8a^\9b\91^\92\95f\94\98g\95\95j \91s\9f\9ao\92\93m\9a¢s\94¤z\8e\93q\8f\93p\95\9bx\8c\99t\8a¡z\7f\9d~u\9crv\9bkr\96fw\9ee}\93`\83\8dg}\85_\81\8aes\8aft}du\7fmtrpr}huyp}piyegxmp\84jl|qc\80gfvda}[bw]qnctndo\7fYqt`kmVnmUfuIc{FbqP]oPbnI`iK[cH]hTmmTccOafG^mNZzJdtP^vNd\7fUcyNa~IdsKyvP}xT}uP|}PuzOs\7fU\7f\81Q~\81S\81yYvySs|\wr^qo^{o^tmX|f`\84d_\80k`zie\84me{bg\80eg|f\\81_^\87k[\84fb\83ei\81cd\81jn|fkwkk|ujupnpwnwk`vi_}eQ~qR\81~S\80}P\8buL\8ajH\82_X\84dZ\8biS\91_O\87]G\89fM\91jQ\8deC\8d_D\8eeJ\88ZI\8d[H\9caO\99^D\9ajD§iB¤n?¦c/ª_1£U+¯`2²^/®Z/²b(¹T(®Q,·X(¯_&§\*Â¥T'·V)ºU.·Z)®a1¨d> iE kP§cK°fL§eF§eG®nWµh^ªid®gi¦bi©kp¨nx«w\83£q\82 s\81\9fv\7f¡sq\96ls\95hw\95q\85¢kx£qs¢zw\95{v\97\82s\9dyf\9f|k¢yf\9e~e¦rk®otªho¨bq\9eci¤`d¨\c°cn¦hr¢mc®ae¨hs¯`}´Z\80¬X~­_}¡i\81¨`\7f¬cvÂ¥jx\93p{\94pw\98s\80ie h^\9fim¨io¤uk\9cm~\93v\80\94yy\8f{r\99vo\8eum\98ar\89p}\98hu\96v\82\8d{\8e\91u\8a\97o\88\8d_\87\92b\92\94`\95\90i\8e\8do\7f\91o}\9fd\80\94c\83\90h\80\82_u\83er\88_{\85^s|qw~ov|go~cnzgjqslyirzro\83ql\8a]}\8bbv\87ao\85joyju\7f`x\82esum\84\7fjt\86o\83\86`wwlv\81n\8b\82o\8d\7fk\85\86{}yt\87\7fx\91us\8c\85n\8b\87f\8f\83W\95\86[\9f\8af¢\8ab¡\94f\90\94b\9c\8ei\98\95r\97\91y\9a\91m\9b\98z\9d©y\91Â¥|\8e£p\96\95}\85\9b}\8d§s}\9cv{\9bwr\97k\7f\9eh\87\9bj\8c\92m\82\97[\7f\8a^\80\89gy\82bw\87h\80|mzxs}zjvyh{fb\86lq~dsz`rzeqzcon\orfoifeuV`kdp~`en]ewakx\\rWcnWbdN]gJeeRhcNfcWicLefNgsWapSYkQUrIdySfqTexUkk]mtTdwKmnKnvLyzIk}MztHs\87T|~Kt\89Rq\8aQn\82Sx{_l{a|mR\80pW}lZ\83X`\88ha\82a[ylf\85d_\81`av\avY_\83cZ\89X`~Za{[h\87_f\7fiarnfyugvlb~wjnnitq_|d\~m_xnU~sZ\81{Q\88jF\93tP\8flV\82kW\8bfO\97dQ\97_V\8bfQ\98bJ\8fcI\8a]G\9c]N\94WT\91^F\9e_E\9f`D\96f@¨i;¦fA Z:­W5¨W4¨P'´Q*ªX$²Q/¶R*¬V Â°Q*¸\*¶]\1f­V#¸V(»K2¾^6·d8³_;«]:§\?§`J¶kP·jD¨mZ©vRÂ¥o[§ob¯jh¨boªdl¹ey²op¢k}£jy zu¡nr\97tz\9bv~\9bz\8a\98s\86§s}\93ju\98sz wg¤xq\9cve\9evq\9eqo¨hm\9efh§elÂ¥pf©`f¡Ye¨\l¯ho¢gl°ku¬dr©ar²a\86°Y\7f¤\\87¢f\82¦f~\9db\84­b\88¤h\7f r~¡n\80\9fo\81hh¯kbªwm¡rv\9fz\80£t\86\97p\80\94v\82\93v\84 wz\9brv\97ju\92c}\92mt\9bq~\9dt~\95r\81\90h\8f\8ea\8c\8bd\90\8d_\8f\91a\95\89o\96\94k\8d\93s\82\8bm\81\8ec{\8ce{\89kv\81al\85dsyfqwmw}cr}dh{dmxlp\82ni\84st}ht\80]v\86ax\86bw\83ay\81hr|bt|a|\82my\83b|\83b\86\8ad\8a\8ci\86\85f\8c\8bq\8d\86r\83\7fo\81\85qzzv\81~j\8e\81j\8d\82f\8eyd\94~c§}]«\8dk§\85h\97\85m\94\8el\97\92n¡\8cu\9e\97|\96\9as\9b£p\91\9fu\98¢|\8bÂ¥r\8d©n\89\9fo\8b¡oz¨nz¤r\8a£h\88\9bi\8e\9aj\8b\96h\8b\8c`\80\8cb~\8dd\86\86g}~o|xw\7fmmzkg\83ok\81op}lgw`esdqpbot\on`ir_bkZilTbv_f\80Z_yaho]_vTbeOYdX[dYggSalQkdTjiW]iT[tKdsPYnO^uVep\fyUqk[qj]zl\rqMpfIokMvmPkvQp{Vy\80I~\8cUw\89Zo\81\o\81\i\7f\qyT}lVwhX\84bf\83Zc|Y_\82`f\84ikzfarf\xXdyQ[\7f[`\84Vd\83_d\86dc\85_cubovgklnksserxfynjvm\vh_\7fj[|nZ\85kQ\84jN\8feG\93pP\93oJ\8dcO\8cjW\90aV\9acP\9a`M\97TK\97YT\9bYQ\9aSQ\98QS\9b]K\9a[F\9cfO¤fM\9b[D¨bH§[>±N@¬P1´V7­J-¬V-±Q(½R,»R\1f¸Q\19²Q$¶R!¹Y%¼U1·O1¹Q7¹X;¸^?®_5­i5´dC·kMµbM°gX©p]¯o_°oa·nb´jq¯iy¹hs³n{±cs®jmªrt¦yq£ru¦u\88\9fr\8a\9em\8a\9bi{\97wt\96ut\9dxt ol\95ni\9bsk\9cgg\99go¢nb¡oa i\Â¥bg¢Wa§[d©ae¨fhÂ¥av±^w¯X\87¶V\87©X\81§Z\8a [\80¨b\80«k\8b f\8a\9ch\83¢v\82¦y\83\98x\84sg¤gl­vl\9crq¨{t\96pv\90nz\96y~\96n\7f\9cv}\8fp{\96`q\91h}\99o\81\99wu\9fuy\9cl\8f\98m\94\98h\95\8fh\91\98d\99\8ea\86\8fo\8b\9au\96\9fs\8e\99f{\95jx\8bqy\89ku\89lw\82it\7fdl~anxdv\83cq~jstnw\81di\7fkuxeyvjt\7ffxybx\86]}\86ft\8b]u\81gy\91fp\8fu\82\8cp\89\93t\8c\8eq\86\8dp\84\88j\8c\8ao\89\88p\8c\82d\89\90l\8a\84f\85\84m\90\90f\9d\87c\94\88h£}f¤\92b \8bg¦\87qÂ¥\97fÂ¥\97w\95\9dr\9b\9e|\97\9bx§¨w ¢s\98\9bl\99¤s\8a¬o\8b§s\92§q\89\9fg\82ªo\88\9da\87Â¥`\89\98_\8b\97^\8e\96Z\89\89e\8a\88l\87\80k{\86k\81sg{w_\80ma\85xZ\84iaom\xi\wjdofaw_qzcfqmio`jsifthajmWwc]rajyTgoOl\Wb_TbsLfaUaeUYaXYePUf\YnQXiWSqUZlPamTpm`qf]ueYrfLiuLltPvkVuwKntMz{Ev\82Qz\8dOk\86Sj|To\7f]wwO}oU{eV\82X`|aczZ\\7fck\85acxa[wae\80c[\80\WxNX\83__\7f^p\86db\8fed\81[j{hnstnzxl\84gb|ig\7fig{dZ\85cc\82kR\8abV\8dgI\83oM\95n]\8elY\86lO\90`R\8a[Z\92\T\96aV\9fcX\99_T\9dVX ]M§]W¤_T\97fJ\9ehM\99gI\9f\C«XD§N>«X:ªG,«C1¡R)©T,§R&°O(¹K+ºS%±G\1c½O Â¬M'­N2µM2ºN5½T@°R=¬b2¬ZB³^<»ZG½fM±aY­mU°]f®ed±ik­ge²pjÀohºesµ]u¶_|¹s~¤dr¡l\80\9avx¡j\8a\9bg\8a\9dmv\95j{\98nv\9coy¢oo¤gr¦mk©mt\9e]r­gq¯b`¦b\±Th§]l³\m°Uq±Vg©Vk®Yy©S\80Â¥Z\82¨Q\81®X\89¢^\89¤Y\8a\98k\86\9di\8b\9bs\8f\9ee\80\9b{\86¢p\8ahg°ll¦rq§vzÂ¥ww§tw\98uq\94uz\8fiq\88iq\8fkw¡gv¡my¤k|¤v{¡z\81\9dk\87\9cd\8d\97c\8f\9df\9c\94j\93\95i\88\98h\95¢r\90\9do\84\93o\82\8dn|\86lw\8cl\80\89k\83zfv\83dr}ho\81ouwl}|h\82sgt|ipyaqvZw}fy\85l}}r\82|j|}f\82\8e\y\90^x\91or\92{x\99u~\97n\85\8ax\97\86u\8d\8fq\7f\96e\85\91h\87\8cg\89\92f\94\94i\98\8cc\94\8cj\9e\8bi \80d¤\88hª\8ce®\8bc­\8em°\9bm¦\99l\9b\9cr\9b\98u\9a¢u¡§f\93©c\91¤k\8e\9et\8b¤r\8e\9eo\91¨i\95§m\87 p\86§j\7f j\8e\9aY\8f\89c\94\88c\90\8cd\86\7fd\88\7fc\88\84g~}i\85~_\82~U\83yWynbuibnj_hkYnmaxrkwosrtlnnqiermkbvi_nehplmlbnm^nePpnXioRgfQaeVaa\UkQXkZZd\Vf^VfTYmRejYew_srWkrU`kObkUmkSsgMzjPtwQ~wQz{Mr\7fQvv[ryZysMtnOu]T\81]]rZ`sbQzgV\81^a~V]\83Z\\88af\82]^zO\yP\\81[_~`k\87\e\8bY]\82\Ztghyrd\7flcy^h\82`\\84a]xqa|dW\89aV\92jY\8fgN\93mP\89h[\8dpO\8dgN\90VQ\8eU[\8a^M\8ebO\95^O\9bd_¢Z_¡`WÂ¥VK¦XK\9eZH\9eaH¡^G¬]DªW=¡QFªQ@¡C2¤C.¢R*«Q(®V#µN,²K0°C&¹D Â±@)®I6ºG1¹D=®@E´HCªV:ªX9¶O8²OE·RC¹^P¹^J´YO»dW·^k·_g·lb¿inºji¼luÀ^|µa\83·f~±]u¤d{¦c\84¦q\86 a\80\98b}\95bx\95o{\93iz\99lsÂ¥kk¨qiÂ¥og«`oÂ¥Tf°WfµOb®Ua¸Sbµ[l¶[xªQv®Rs Qq¨Uv¤Xt©azµ^\88®^\84\9eV\82\9bh\89\96j\8b\98f\8e£d\88¤q\89¡y\8dqe«is¦oh°~r²rxªst\99wy\96w\85\90vq\9cwp\9avp\99kv\9bs\83ªi\87 n\80¡}\88\9dn\86\9de\91\9dm\98\90g\92\9ce\8f\8d^\89\8ek\92\94g\8c¢m\84\9bd\7f\93^z\8df\82\8cp\80\7fkx}at\80`v\7fis~s}ym{pr\7f\7fh\7frl}w_\82\80\|z\\81xj\8b\7fl|ylx\85hy\8a`z\8e\{\99dz\91s\86\94j\8f\92v\87\89{\98\8bo\88\8dy\85\90p~\9bi\8e\95i\90\91]\8e\8d_\92\98d\92\91_\94\85e\9f\83p­\8cd¦\88b³\89aÂ¥\8c`¦ a­¢q §p\9e\9ah\9f­g\9d©k£\9dj\8f¦d\8b\9cx\95¢q\88\9fi\94¢f\94©m\8a¨d\89\9a_\87\96d\8b\90S\8a\81P\84\90]\81\90T\83\83f\82}X\87\83\|\86`\86\80]\80yS{yQwnWvg_bsUeoZjobjmfk{gwofizldhkshpmr_slcrhhvmpi`liTmjL^nO_eQc_TTdSY]Y`]^QlXOh[VgYbaUfpUacJsoVinH[ePneEelOmgH}gDreLrfXwrYw\7fQl}R}z^rs]|vRvh^xkVu[PjaPyWW\84T^\83Oa\88U]~T^\8cO`\8aR[\87Vc}Zh\8c\i\85[b\89Na\82^h\83ZqvZbx^h\83^W\89j^~gX\83b`\84i^\80a]\8ekU\8fn]\90gU\8elY\8fm\\90_O\9bbT O\\92RU\97_[\99^R\8fiV\99]Y¢iZ¢\K¦SCÂ¥SNÂ¥\P«eHªZHÂ¥\H QP\9bJB¤FB R/¢L1¦V/´^"ªN%¬U(»J+µA/²K3°L<´L1·K@¾EG¸OC»T?®W<®J8²N>¶QG´UH²IU²R[²S[¿ah¾Zn·lcÃoaÃkfÂ]r·[\7fÃWyÂf\85¶ct¦k\82®o}£f\8a£gzÂ¥h\84¨h\83\9dj\80¡qr\9cps¢gk oh®cl¹jn®ao­Zf²Qg³^p³_k¹^p°Wm¨Kv®I{©PwªVo¤_q§[u¬X} \\84Â¥Sy¤f\84\95l\85\9cb\89\97_\83\9bh\8f t\91ds¦mq©kq²ym­~oÂ¥z}¦z\85¨w\82\9e}s©}t§~y¡ot¢h~\9br\88£n\87¬n\8f£u\8b¢j\89\92a\96\8b]\94\94\\94\8fZ\93\92]\91\97h\8f\9bh\86\8e\\81\8b]\8d\92b\88\8fm\82\93g}\86b\81\8adt\82g}\85q\83zh\80tl\89zl\82uj\85xb\82r]~{a\86}_\89\7f`\82\89d\83\88g\81\90^~\97g\86\9dh|\9ao\80\90g\92\92h\97\8ft\94\94t\8f\94o\88\99u\85¡n\8b\9ef\8f\9f[\8b\97^\87\88[\92\89[ ~c \83a¬\82i±\8d^­\97^©\9b_±\9cd¯¡i®¤]ǻhª«e\9f¬`¤¥d\97\9ef\92\99j\8d¤d\92§k\93Â¥\\99Â¥\\8fÂ¥\\94\98S\8e\9aZ\86\95V\87\89M\8a\8aN\83\85S\80\8d[\84\8bN\7f\84R~\88X\83\80Uz\82Nw\7fRorOjyRdpM`tM`yMi}XpxSk{^g{nlvponhqweqrmwtmrntn^qvZmkNcfS[_HWcNVdZ^^[[^\RgMTiTWfOXaPViRekUbkGlr<dp@ftLijGnnDr`Io\Vpc_um]tmWxl\vtQyuZ~v\|qcwgXnfLr\O\7fUV\81PYzUg\7fSj\8aOe\88Nj\8aJn\89Sg\8aUn\8c^d\94Yj\91Sm\90Ve\85[i\8c[e\81\g\87\_\81gRz_O\7f]O}`Z\83]W\82YS\88e]\8c[[\8fbV\8egP\92cS\98`_¡U`Â¥Y]\9eUW\8f_a\91^\\97cY¢bKªTI¬WE²TJ¦^K©bJ­]@ªOB\9fQL¤SLÂ¥GD°R9°L?¦V7¨Y/¦L,­O%µG'»@/¹J1¼D2Ã…@B¿ICºQ>¸RC±IG³M<§KD¬@D®=E³FM·HP¹Ja¾Pb½[e¾XjÇfoÑ\rÊ_jÉWrºRz¿Z~¿Z|¶`y®f|«b\82®g\87²d\88³i}±_\87¤e\80¢r\80\9emv\9dmlÂ¥jn²fkµdnµak´Ov¿Tw¼]r¶Up¶^p¯]g­Vm®Qo£G{°H\80¬Ux®S\80°Q{¡]t ]|\9d]\8b\9b_\89\94f\80\92`\83\9cn\86\99r\8bkq°cq²lk²pwÂ¥npªvq­zs\9fs{\9co}©\81m¯wn d\83§r\81¤r\83ªn\88¤q\97\9dk\88¤l\84\9f_\8e\99a\8a\9dX\93\9eT\92\90c\8c\93q\90Â¥b\92\9cV\82\98`\84\9b\z\8f^}\92j\83\93aw\83Zt\8fj\83}o\88\86^}uh\80ui\8c\86d\80\81b|yW\80\7fWx\87Q\82\84b\81\91`\88\8baz\8bg\8b\91^\83\9a_\87\8fh\8c¡d\87 m\8e\95{\8b\99{\88\94j\85£i\8a§n\9b b\8c¡j\8b\91e\97\8dc\96\9aa \91c\9c\8ca¤\94f¸\8fl±\92_ª\95X·\98^¸¥]®¨`©¥a\9f¢_\9f°g\9dÂ¥Y¡­f\94¤a\96¨X\8e¢W\92¨b\84¬Y\8e\9eY\87 Y\98\9b]\91\97_\89\94[\87\87[\83\8bQ\82\84T\88\8cR\87\8cRq\8bZs\7fKo\8cIj\81JomLlnUlvShrMgnYbu_j\82T^yYa\81chygjjalm`mflsmkobll]qhVppXjlNgbPO]\VaVRcaLfU[sTWkRcgRVoXYeJanTecDafDlnMjiCmg@l^OgeTofYqeZkiXnbQsl]tkUniTrs[qkVxgXuXUvbR\86]`\8cSd}V`uT[\82U`\81Xq\7fXm\8dXq\84U^\87\e\8cUk\8dUj\87Re\91Z\\86\d\85Xg~eT\81dF\87_S}YV\88WP\82R^\88Rb\93X_\94^_\9abS\91\`\97Y`¢`[\9aKc\9aYW£[R c\\8bZS\95_V\9fbJ§RG­OH®MI±ZF¤UB¶SJ®[F­GB­JM HB¬DC¸H5§H>¢O;§U1¶K4°O-¶N5¹@5¿H9¾IHÈJ=¼@C¾D=¹K=ÀB>½G<¸HD¯MA¹LG¯PQ®@[ÀPb¼]eºTfÃa`ÆXcÂ^k¹_rÇJpµY}¾S\82¸]v´Z{´g|´]\8c¹e\80¼_~´[\88°l\8c°j\85¢m} f}®Yz³[m±]x¹Xv´Mu­Vn²Ww¼Ws³Ws°Ss®Uy±Uv\9dM\84 J\85¸[\82¯S{¸O\82Â¥]w¬f}¤^\8e\95^\87 U\83¡e~\96h\8e«i\93ju©fh±mtªf{¤lm©km©el¬m|¦s|¢uq«hy¢c\82ªi\86Â¥e\8a«g\93®m\96Â¥j\8e\9ch\87£`\87®U\91¨O\93\9fW\96\9dg\9c\98j\97¤`\8cª[\83¤d\81\9e]}\9f\\87\97g\89\91`\82\8cZw\8fb\85\83_\82\84W\85y_\84~[~\83X|\87R\83\8a]z\80W{\85S\7f\8a[~\8aY{\94]}\94b\89\89b\8b\8e`\81\92Y|\9dc\84£u\84¢w\8e\98x\8e r\93 j\9bÂ¥a\9b¡f\9e\9eo\9b\93p©\98l¦\99p¤\95b£\97`Â¥\94h­\8ee°\98`µ\97T¹¢Y¶©b°¡e ¨d®\9fb®¢d¢§U\9bªO££X ¨U\9a¢Q\8a©_\86¡`\88¢Y\8f\98W\91\93^\89\8cV\8c\8fU\85\83Y\8d\83]\8f\8aV\8b\95R\86\89Kp\84Lp\8eRp\87Qv\85JoxQu~WjxSt|LoqSp}\_\80Sg\87[_\82]Ypg^ohWpjajn_nmjco`[kdafkTifU^_VV[ZY\\Q\bZfVSmVVqV_jW^nUcgO`eTldJp`FbiSffIksFfoIk_Zn_biaXs]YtZ[ud[|mVkfKk^Qs`Tm\_tYW\80\\\80^Y\85Pb\84MfvJZuRa|Th\84Hf\84Mm\89Zg~YcxX`\82\i\8dYc\8dR\\87Xa\81b]\87eT\86_K\8dWN\89^P\89U^\8aNZ\88K]\94XY\98]_\97VZ\9eWi \f\9fM[£L`\9fX[¨ZT\99dW\96^S\9eWQ RS\9eLI¨IMªIQ¯IG°US°WP¯GI°FE£=E\9f>H­FAµA0«B2Â¥H8²U;±Q3ÀW@¿LA¼VC¼QI¼F;Ã…A>Ã…=C»?B¸DF½>IÉJBÃGIÂAK¸GK·?]´F]»I\¼NiÈSlÆKaºMh¼YgÆZiÄQw¸L\82´Q}·VxÀX{®c\7f«]\88µ[\86»W\86À]\86³c\87°b\81³ez®`u«W{®Q\7fªJv¦Jr®Co¬Gm«XxµX\81²Z~ºPx·Ry¯Su\9eD\81¨Kz³T\84½O\7f¹J~³^\83­`\86 X\8b\9bW\95\9fR\86\9fZ\86¢]\8c¬b\96et¨ev§_}¡\}©cx\9fhj´ps¬nx£r{­s{³fy³c\84¨\\8c¯g\93Â¥d\85¯k\92ª`\90¯_\8f°_\93«U\9b¶O\95¡U\9b­W\9f£k\94\9cb\8c\9cZ\87\9cc\7f¨f\8a¤[~\9dn\86\8bX\8c\8ea\85\94a\85\89]\92\8b\\85\86i\8b\83b\88\84^~\90Z\85\8aT\8a\8c_}\89[\85\8eQ\81\8aX\88\95e\81\8bg\84\8ec\8f\98c\82\9ca\8e e\8e\9fm\8d r\8d¢k\91¡j\9e\9b`\97©e\9e\9ek\9a\9dm\9b m«¢o¤\91iª\95j­\94f¡\92n§\9be±\96c´\9fe¢\´²Vª¦Q³§\¨ W©©P¨©R¦®Uª­R¥°O\90\9cL\8dÂ¥Q\8d\9eU\90\9aW\8e\9f\\94\92S\8a\96U\83\8bW~\88Z\8a\89M\81\8dZ\85\8aN\82\8cSo\92Sw\92Sn\8bCl\8aPo\80MdxYhtSpuR_~W_\83f^\89W]\8bbe\7f^_~mYqi^r_hwekitnhike^nbdbgn`]bcTacbV[XYk`^kcaeV\kSZ]_X`Y_]LggMmeIj_KjqRgoMbeIq_OjgWt\PnaXq^WtUYx[Uw[SocRpVOqPOsOSsZ\tZU}SY|T[\86U[yISwP\\7fTeuJlzFm|Gk\82SgyZg{a[\8f\\\84Zb\89Ua\8di`\85^T\8a]U\82`L\8aOT\83U[\8eVb\8b[X\94S`\96Q`¡JeªPb©Z_§I\®IX¢PV\9cYUÂ¥RU\98QS§ZY£TO¬KF¨SU¨ES¶PI±WH¯QV¬KR²BC±DN¢C@©?;­J5©I7³A7©S8³O7ºJCÃK9¿K@ÃNGÃQD¹IB¸?F¶EBÆHR»;P¸GM½DBÇAB²AN¾AN¯K]¿CYÂE[ÃŒIkÑDf¼J`ÆOcÃUjÈUw½Wu¹Zm´NqÇSy´Q\85²W\8a»[~¼a\7f·\\8e¾\\88¿f\85µ_}ÂWx¾Uu¹V{§SsÂ¥Lr¨>i·Iz¯Lv©Lx±T|°L|²Tp§Kt¦Ls°N\7f¬MtºJt¸Q|«M\86³[\8e¬a\8e\9b]\94©a\8e\9fV\8b¦^\8a²Y\96q\81«oz¨o{§by¤iuÂ¥dp®d{·kw®czµl|¶]z½\\81³\\89§W\8d¬V\94¦X\8a®]\8e¦\\96­R\94µY\99´V ¸Y¡¬`\93¨Z\95Â¥b\86Â¥`\87¢Y\81¡b\87¡\\89\98c\8d\8fg\8d\96_\8d\8di\8b\83b\90\89\\85\88a\89\83c\81\89Y\82\8aT\88\88W\89\89X\8e\80U\86\84O\87\90T\88\8cb\84\85d\88\88f\8f\93i\8b\99`\8e\9ag\89\98e\89Â¥r\99 o \9fa§\9fg¬\98c¤¢c¡¢m¨§n©¢n¯\99n«\9da«\9ei­\9ad© f¤ªc©«_¤¤W®«N´Kµ\9dTµ\9fS©¤M­¢O§¢W¦¤Q¥¦Q\93\9eX\91\9da\8e£X\90\99Y\8d\8b]\86\8cT\8d\87V\82\88Q|\88V}\8eP\82\92Q\81\90[\82\93Vy\98In\94Kk\8dMt\91Ep\83Gd\84Si}Tgz__~\V\84_Y\86Xb\80_`\81bd\7fkb\7fmhyaeznaijeildaakdfmdf`ckg[eca[djWlg]nWa`We_Q^`YY]V[bYhiXffQddSdgJjhHjhOf]OlbMp[Mr`Ys\Xh\Zm[WpYXgP]fSPbRXkMWhJYkK^uQ_{Pb\81Tc\82R]{DZ|F^wKU{K]\83TX\81Mb\83Zh\83W]\83b_\8a\Z\8feR\8beR\85hL\88`R\89[L\8fNO\89TL\8bQZ\8cS^\8dW[\97OW¤L_¨F_¯NV«Cd­Ia¦Ec\9eK_¢VV£ORÂ¥NU¯QJ¸SH¯KM®J[¸NW±UO³LN¶HMµLIµIF®EC¹D;´L8´L9±I5­JD­FBµH@¸SAÄK>ÃPIÇTN¾FM½?U½CSÉFQÃ=Gº<KÀH=¹ID½CHÀLT¸KQ¾?WÂA\ÄB`ÊMg¿IgÃReÇP_ÄRj»Jc½QmÄGqÀM}½O\81´\~ªa\8b°]\88±[\8a¾Y\83¾T\81Ã…X\84ÃŒS~ÂPy¼Os¯Mv±B{°Bq¹Js¹Eq´@~±L|ºRx³Vw®Lo¬Nu¬OqªMpÂ¥Jv¯M~®M\8b©]\8e¨[\93¢`\92£`\93¨a\96±Y\95¬`\91g|°k\80¨j\80«[yÂ¥lwªbv¢n}ªc\81\9ek\7f¨m~¬k\85±g\80Â¥U\85µO\8e¯R\86¯U\95±L\8b­^\92­S\93´Z\8e­Y\92ªd ³e\9a«d¢£\\90¦[\86©g\86Â¥d\8b\9dj\88¢X\8e\93[\8b\93`\8e\8bX\90\91Y\92\90]\83\87d\8c\86f\8e\82[\84\82R\89\86V\83\8eP\8d\91]\84\8bR\87\92Y\88\8cS\86\8b_\83\85b\80\87e\85\92]\94\9e^\95\93m\92¤m\9c\94f§\96h\9f\9e_£\98d©\9cm±\9a_ª\9b_« m§\9b\«\99b¡\96c­£p¬\9bj¯\99d£«_°\9d\¹¨W°\9aXµ¥Q¨¤P§\9cU\9e\9eJ£\9aP\9c\9eU \9fL\9a\9eY\99 Q\92\97U\97\9bX\94\9c_\82\9dV\87\88Z\83\89b\8a\8aS|\8cY\7f\90S\7f\89Xz\88Ut\97Pl\86Bq\8dCn\87>h\89Hh}Lf\85N^\83Rf\7f^\\8a\S\82d_~c[zc^\86i]\86\\zc\id`fbjYhc`_ejeg\Zc^`ZVbdW^jWTjcTka`bUfcM^aQa^[icRa\PciZ\gVe^BefBmbHs\UnYRmfVv`_u^Sj^VuZ^l_Vga^jVTjU\\7fAUvI[mAcoKV\87Zf|La\88S\zGb|KY\87Ni\89Hi\88Uk\7fMa\87L[\8eUT\86^P\8biZ\87cP\88ZZ\85`]}[Z\81[L\90WP\8c\S\88K\\8aWQ\88]]\8fVb\9eP\¢GUªUU\9eQV¬DZ\9fOg\98Lb\96LQ¡RI©TH§KQ²LH®JF©@U«JI­ET²ILºGJ°GF¬?L±C<«K?­B8Â¥Q;±E0´K>³K8·D;¿T?Ã…ENÃCQÈRRºLL¼MGÆHUÇ@KÂDBÊDB¸AE·F>¼DNÃ:F½FT¾IW¼<^Ã…HbÃ…GX¾T\ÀQg¶MfºIj³Mo¸Rs¸Nt¹Yv¼\r·S\80¨\y³Z\81®[\80²S\83¼Y\87Æ]\81¾Lt¶X|¶Wp¸So¼Lj²Cs±=zÃLt°Ds¹Rz¸S\7f·GuµV\7fªS}¬NzªSu¯T\81³N\85²L\82©S\84£Y\90\98[\88§d\88ª^\92§g\95¢i\95oz«s~£o\83§b|¦c\7f\9fou¢t\7f¤k\81\9fe\83¡iy¨h\7f¨a~§]\84¯R\89°L\88§G\90­L\8f§Y\98¦V\9b¯]\8e¦g\9c©e\9f«o\9cÂ¥k\9e¯j\9a¨`\95\9fj\94\9ai\82\9ag|¡Y\7f\9cS\82\99^\93\93]\85\93]\82\95^\85\91_\8d\89g\89\8ee\89\83`\8d\89S\84\95_\82\97Z\82\87O\8b\8fN\86\98P\82\8cS\83\8b_\84\88Z\80\8b[\90\90`\9a\9ce¡\9fe\9d\98`\9f\9bf\9e\9dl¨\9ce¯\9dZ®\95_°\9cZ§\9ed¤gÂ¥\9e`¨\9eh¬\98nÂ¥\9fh¨\98h©\9c_¥§]²¢\«£_±¡T¢\94U¢\95Qª\8fQ¦\95Z¢\96V\9e\97N\99\9fQ\96\97W\97\94U\9b\96Y\97\93W\8f\9eT\88\8fa\89\8eX\8b\8b]\81\8a[\83\91Uw\91[p\86Ou\87Fs\84Dy\80>n~Hi\8aJ`\88V^\86Qc\8aMl\86Ui\8cb[\82`f\80`exb`}]Z}dZph_gbX_k]XedVX`daagYY^[NZeTQ[YL]mXYlWX_Tca\edS`cOkW[d^Vi`WgWQ]^J][BlZHlWLz_X~bbz]_qbZp[ThUTk`Pw]TvW_wVU\81FPsE^uB[xP^\82R\\86SW\88J^~SZ\80Lc\82Ga\8bKf\8fVo\87Qf\8fZc\8aRX\84WU\8adT\8aYVy]\xbT\7fcT\83jR\82`T\8aXR\8fQO\90J[\8aRX\8cJ[\9fJX¡LZ\95Xa\98Sc\9eJc\9aGY\98L\\8fO]\95LO\9bOK¡CF¡DH§>J\9d7L¢@J«HX¹MU²JGµ:@³C;§>D£F:ªH@\9fB8¢E8±D2±F7·O:¾FIÆLFÃBM½NR¼LI¹BIÂFLÈGOÄHDÂMM¾JI·<F½8Nº<VÃ>PÈCXÃ=T¼JV¹GZ»J`±Q_ºGf±Jk¨En­Pv¶Pl´SoªTm­Y{®Ut­T}¬Ry²S}ÀV\7f¿Y{ºMq³Qu¹Kq½LvµQn³In²G\7f¸B\83¼F~ºM\7f¬Nx­By´Qp­OsªHo¶Rv©PuÂ¥O\7f¨M\83ªZ\83\9eX\84\9bY\89\9cT\90¤W\90\9fT\96©b\95u\89±m\89¤k\85¬`{«b\7f¬ms\9eb\86£d\84\9ap\84¤f{¦]\82¦f{²V\82²V~±K\8a¬A\8bªN\8f©^\95Â¥Y\90Â¥Y\9a°e\90«c¨¬j\9b¢n\9f«k\9b­]\91 b\95Â¥f\8a\9db\7f\93_\87\93g\85\9aa\88\8ee\84\88m\87\95k~\97\\84\85]\8b\92^\8e\92\\82\99R\83\94R\8b\8eQ|\81L\81\8eM\88\98L\81\95O\80\92S\88\90]\8a\89^\97\92i£\9fi\98\9fa¢\9ac¨¥]°¢d¬\97b§\97`´¥`±¦^¥¡Z ®h\9dªd§\97k¦\9at©\93m\9e\91hª¡b±\97`ª¡bµ¥X¤\9a^\9e\94c£\97Qª\96M\9d\8eK£\91M¤\99W\95\95X\9b\99Z\93\9f\\92\96V\97\97X\99\99Z\8a\9ei\8a\91Z\87\85L\84\8aH{\8bL{\92P\7f\84Sy\80L\80\81Gn|VvyWmzQb\82TZ~Nb\82Jl\88Na\7f`e|ahvS`yX\r\]v[Unlb_c\ejYV`Y]QZR_WSTPZRYS]NSeYXcdQZeQg`VagYflUlb[bUSc\_h_SiaG`WRiUTnULqXXpa[\81XTy\X~Q\t\W{^[va^nP[qT[~EW\80NU\82?X\81I`zK`}G^|U^\8aTh\84JY\8dTk\83Wa\8eSj\84Ho\8eFn\8aKc\8dMP\8f]Z\80cW\81[X\81aZ\7fX[\80\Z~XS\82^a}P[\84XY\8cYR\86P[\99\U\9dY[\94MX\93Tc\9fHd\94Qj Q\\92RP\94MT\91TP\95NI\9aML¨HJ\9fFG\9fIH¡IN£=VµMR´=Hµ4R¨>G³7I¦:L¨>P ME¨DJ¨PF°R@»IL´KM´DQÂ@Q½AJ¶NUÄEBËFG¼HAÃPDÆKOÂLQ¸=QÇ@Jº:TÃ…JQÂHMÀ<UÂ<Z¼HZµFd¯Od®Jn¼Rg³Ku°Zw§Oz«Tm¬Xv¦`\85«Yz­[{­Y\88¯Ry¾Sz¹P\82²X\80¯W\82¼Tu²\u½U\80½Rq´E\81Ã;\8d¼I\8b´I\8c´A\84²G\82¨D~§Qw¶G{²W}¯Kz¦X\86°H\86µT\87°P\82¡T}\9bX\90¤_\93«^\8a¦c n\8e¸i\84¶b\89¼k\80³ny±i\80¨c\81 d\86Â¥d\8f±j\86«g\83­_\80¬d\84®Y\7f¡X\7f¤K\86¨J\97\9dW\97 O\95®U\94¬X£®j ¨oª¨k¢¥k¤¥c\9c¦g\8c¢g\86\95p\8b\92g~\8a\\85\8e_\86\8em\86\90l\80\8dn\87\97h~\91b~\93\\8b\99U\95\90S\8e\91W\8f\8bL\83\8bU~\8fU\84\94W\84\94U}\8c]|\8e_\89\8bb\96\91d\9e\92c§\9aY¢¢X§¢X³\9ej©¢j° j¯¬j¨«^£¤`\9cª\¤\9d_\9b¡l \9bi \93i¤\98b¤\94X¦\92X« ]ª\9dW¢\9eZ\99\98_ \93[ª\95W¢\8dT\98\92Q\99\93Z\99\97R\9b\9fe\9c\97g\99\9fc\9eÂ¥d\94\9fb\87\9e_}\99S|\98I\81\86Av\87Gx\87F\80\91L\80\89Ny\80QtzUksYfu]e\7fVd\83Ne\86PexSd}Wm\81[rxTeu[bmYXh[\m^TcY[e_eYW`LROJ\UQWLPOUNRYNWaQacV`b_if_ggUbhYgbWic\m`UeUL\TPbWMn\VkUOy[Uw]PuXYzVWwQZ\80RP|[QwX]\7fIOwJQuGN\84IV\87AW\82BS\83Oa~K^xO]\83Zd\8cWc\8bVc\8aLh\89Ni\91Hh\8bJe\93FZ\8aIT\81HY|XP|SS{ZS}YXx[RwP[yR^\81Ya\87RW\92[K\8b]O\93^]\90]\\94X^\95QU\9aO_\9bN_\97N_\99RU\9fTU\9cJK\97QY\9bHW\9f<K\99=P¢;J©GO£JI«AI§@N©<U¤6O¯?M²BK£DU\9dNX¨PM§KC­MIºRN¹KC®QH´MOºHP½FP¹DJÂIE¾LK´RGµTSÄHN¿DOÃBIÈ=ZÂGY½>T¼EYÃFV¿JYºR[³Hk®Dk¹Nj¶[t¬Ww­TyÂ¥Qz§_\82¯^~¨R\85­T\82²N|·K\83½HzµL{¬H\80²P\86­[\8b¶[\84¸^~ÂR}ÄT}¼D\8dÆF\84¾D\8c¾E\88®;\8a­<\86°G{²At¯Lx´N\84¬P\80²Q|¯I\7f¤X}¨W\81\9f^\86¤g\86¡d\9a¤i\9ec\8a±p\8f«`\88«p|¬n\8d¬n\88¨b\86\9eh\8c\9e_\92\9e[\84¦c\8a¬X\86«R|¢[\8a­Y\83©M\8fÂ¥[\89 Q\97\94S\94\9cQ\8e«e\9b l\95¬i\9fÂ¥e\9b\9fd\9a­g\96Â¥d\8a\9de\84¢py\8fow\9ag\83\9dV\82\8fay\9bf~\96b\81\8ba\7f\97h\80\8e[\86\9e`\92\95[\84 Y\82\9cX\83\8eK\80\97]\8c\8cR\87\96Wz\86Y\83\87e\84\8e`\8f\9bX\8f\9fZ\99\91U\96\9eX¥§S©\9fe¬ t¨ªb¢h¦\9d[¥«b\9d¤_¢©\§\99h\9d\93h\9d\91l\9f\97i°\8fV©\94W´\9cT\9f\9d]\9b\9aa\9e\9a^¨\99_\9e\9bK\9b\94P\9a\89J\94\94[ \9dO\9b\9b_\9c k\95\9dg\90\97b\97 b\80¡`\80\91T\87\97T\86\92D{\8dJ~\8ePx|F\83\81Nv\84Wq\7fUm}`hxUf{`_\8fZ\~Q`\81T]\83V`|Ri{UfiR[fUedXUbQUbSTed[]b[^aLQQTQTJUOGK`OGd^Sc]S]ZU`iO]iTbfZ`gXhjLhWLrSEh^LcVVjTXaZTg_YrZXn`UxWTy[MrUSw\Xq]X|P_xEW{GS}TM\80JL\80HJ\84GU\8dS`\84M`\8aTd\92Wk\8dJ_\8cV`\8eCh\8cU^\95U[\92RS\90PP\8cZV\7fVY\86cJyXH~YT}XO~]Z~P[\80U]\89U^\86__\93dI\95f]\8aj_\95_Z\9cRV\9aN\¢YY¡PR\99MI\9bMM\98HS LT\989M IE\97BN§AN¨<Y¦DQ§AC®CQ\9d6O¦6O°=N©HI¨OL\9cKL¢IR®GK¨RQ»ME¼FL¼KQ°@W²CS¼G[Ã@W¾>E±GS¹KP¼ES»QYºATÀAP¾HF¼PT½H[¶URºSWÃHbÂH\¹Pn°Hs­Hp¯Hj«JoªNu§Jw±S}°X\86 M\88¨S\8d§K\88¯M\87¬O\80¨C\85®M}»M\87¯V\82¹Y\7f¶L{Ã[\81ÆI~¿E\8eµH\87¿F\95°G\88°?\8aºA\86³K|¬P\88±Sx¨Z\81µ`\83¯Q\89¬R\81±W\8b·f\89µh\8b¬h\92±`\9a\9co£e\9a¢h\98£a\89­e\88¬h\8aªm\96£r\94§g\95¦[\8d¡W\8e¦\\81¨Z|¬]z¨O\85«[\8c\9eV\86\9c[\8c\9fT\97\94R\90¡Y\95¢]\95 q\90 l\90Â¥d\9f¨r\9a¤t\89¤q} iz\9ed\80\9ejx\9bh\80¡\\83¡d~\94\}\91Sy\96Z\84\9bd\8d\92g\8b\93`\8d\95Y\81 ^\81\9aS~\98S\80\95U\92\90S\8f\92[\87\8bX}\8dc\82\91]\84\91X\91\9bZ\99\9aQ\92\98V\96\9c]¢¥k\9d§n£¬q\9c b¢\98_\9d\95]¥¢a¡§Xª¡^¤\96` \95d¤\9de¯\9bV®\95V¯\8eV®\90\£\96ZÂ¥\8fS¢\98J\9c\8dO\99\92T \8fT \8e\ \9dX\9f\9a]\9f\98l\96\90e\9a\99[\92\95m\8b\97m{\9a_\80\98Z\80\94Pz\90C|\88>{\85Hy{Vo\80Zqz[l~_cz^T|aV\89PV{P_zT\vT_zSbqSfg`[o]alY`nNb_Q]cYYWaPWaJ\SGUUHMcOIbOO_SU`XVb_YZZPYfVWdKihToeMv]St[Hh^HfXPb`Yg\[vW_tcUn^QndQpdSsdMvlYoc[tbO\84OO\82HS\82NO\86VL\8bYR\94\R\8bMR\88V[\8cNc\84Ih\8cM^\8dDY\89HY\97VP\96RV\91WS\8dW\\84VX\85aS}VQ\86[K\84bI\85_S}]N\82US\86]`\8b^c\90X`\8b[Q\92eR\8de`\8fW[\96VZ¢QW\9fU[Â¥LT\9bFK\9aAH\9dHI\9bGO£9O\9aFC\9cFB DHªAQ©9T¤6G£7O¢8M¤GI¤HP\99KK\9eJF\96RJ\9bLK\9bKU¬PS´CM¼?Q¾F]¹C^¶@T»MW·BP²>T¯CN­IN­MN´LU´DV¾DN»KFÄKJÄHQ½SZºU_¹Md·Ki¼Na½Aj­Ds¬?k´IhµKn¦R\7f¬P\8e¨K\8d\9fK\86\9dG\8d¨N\90¤G\88 B~§I\83²K{·J}¶C\87¹I\82Ã…Y\82ÇZ{ÃPzÇR\80¿V\8d·J\93¸E\8f½C\83¹P\88¶M\8a¸R\82³Q\82¯Y\81±d\85¯b\95¶W\94Ã]\94»e\8bºj\8e¶f\90§^\9d¤d\99^\93\9dm\9d\9cl\96­i\8f®d\95«q\9e¨l\9b c\94¤k\92­b\9b¬Q\86°]\8aªM\88°L\88ªQ\83£Z\87£Y\8a\90\\97\91U\9b\9e_\89\95a\87\9fp\84\9dd\8e¢d£\98g\90\9de\8f¡c\84§j\81\9dm\82\9boy©b\7f¢kx§e{\98b\80\93Z\86\9dY\84\9fX\86\95c\81\8da{¢`\86\9aU\86¢Lv\9a^\87\92X\93\8dX\95\8bT\93~b\8d\88a\85\95Y\89\8fZ\8e\94N\8e\9aX\8b\9d_\9e¢Z\99¡[\9a j\9f¤a¦¦gÂ¥\94i¦\9e]£¡S \9ea°\9aZ¨\92d¨\91]¡\95b°\8da©\92U¯\87^«\93d¦\8eS¡\95X©\8eX¢\95S¤\92Z\9c\83VÂ¥\8cV\9e\8b\\99\99_\96\8bm\95\8dj\89\91h\95\96n\86\94nv\8f\}\99dr\98Nu\88Gn\87Th\8bWt\7fXe\8d\o\88Vn~Y[~]U\83i[\84TY\7fJb}X[\80S_pNghKfcV_kb]aRhaVeXT[bRLZ]OPZE\Z@KWJNfPO`KMcQPbOVgPSiSV]]K[eQ]fMt`Fs_Vs[WjZUcaQmUSn^XwhPg^Pk^SsgOlbRwaOp_KsaZycSwdN\84]R\85QJ\84_F\91[R\8aMQ\87GN\91NY\96GX\92T[\93R\\92L[\85UO\8dWW\99VX\99^N\96bQ\89^P\90kO\83fZ\85WQ|YKzeZ\86eU|bT\89b_\85^]\8a]`\97ZK\94]V\96^T\98VV\89P[\93PUÂ¥V^£NK£IJ\95ND\98BM¡GJ¡4G¨@@¡HE£AL¤8W\9f@Q\9b>R£<J\9e3I\9d?T\9d?O\9dLL\9fNV DR\98KO\9fBNªOW«BU¶C_¹=fºE\°Kc¹DZ´I\­HPµIM·IP´JP«?T·LQÃ…BYÇHH¿LHÄGW¸O[¬I_­G`¼OW½Ei°Mmª<p²Fg²Oc¡T{¢Lz\9bS\8c£Q\8a\9f@\92 A\87\94F\8f¢>\90¡E\82­E\89³S\87±T~½U\89½M\86ÃU\8bÉO\82Ã…X{Ã…N\83ÆO\8a°K\8d½Q\82¼P\80¸S\85¶P\91ÃT\8c±d\95·`\91²b\8bºf\8dµg\92Ã^\97¼h\8dµj\9aµh\92±c\9c±Z\94]\9f\99h\9d¢n «p\9a©r\97°h¡¯f\97²p\99§i\94¡b\98¤Y\94§S\8b«[\8a©W\91 K\9b¤N\94\98P\9d\97V\98\90_\89\96k\89\8fp\82\98e\86\97r\94\94q\97\99k\95\9cb\8d¡\\8c¨g|¦c\84 c\82«^\81­iy gu£h~\9ac\81\92a\81\95]\89\9cV\81\95_\7f\97Y\82£\|\9bU}\95a\86\95\\8c\8bR\89\8fQ\8e\81[\88\7fY\8b\8b^\92\83Z\95\8a[\9c\8aY\91\91Y\9b\8dS\94\99Y\9f¨_«¦a¯©g©\9e]©\97]§\96_°\95]¬\94U®\8fV¤\90[´\8fT²\8b^¨\84`¯\8ef«\8ee«\95a¨\91Xª\8eQ \92[\9e\89^\9b~[£\84a\9d\89a¤\91a\9c\89f\93\8fd\91\89e\89\93_\8a\8eg|\88kz\87dr\8a^w\82Ql\85Zn\8bba\90a^\90_i\8e`f\8dcY\92lT\84gZ\87fT\87UY|MWrTTvNXySblZllVg\^b[]W[ZZ_VKX_NV[KTYQR^GOjFNeSQnOKeOMaNSiORhYH_[LkUSgZLqdRs\Vi^QjZVnSWrXXsgSkfNmgYucYogNniRjmStaRseUvjY~gV\8d_Q\8a`I\90UH\8fIU\90JP\92EQ\96PT\94X]\93OZ\8bZ]\8fVR\92VR\95[T\98\T\8dlQ\91nR\90jZ\84]V\7f]Q|_Q\7fe[\8a`b\85jY\8ea`\85hb\91lV\92aT\8f]T\93_V\8dWM\8dYO\9aTU\99JS£IV¢DL¦FM\9eCHÂ¥CD\9a<D¦@M§?I¤@G¬6V«3[¢;P¨8J¡?H\9a;P\9c=QÂ¥<[\9dDZ\9e?Q GTÂ¥GO«>T©6\«;g´>]¶9d²A^µGdº>c´CY¬CYµATµCP³?MºBKºHR¾MK½NQ»KS¯MR©SM©RX±KVµGb¬>a¬El£=g©Fl£Mm P}Â¥D}\9cI\89\9cF\8d\93G\82\91E\8f\9e@\8f¬>\8a«L\8a¯R\80±L\80½M\7f¿S\8f¿Y\8d¾N\8a¿R\8fÄN\89¶L\90·J\88¼V\7fÃ[\86»V\8fÂ]\89Âb\8eºf\98±_\95·f\93³d\90¿j\9d¼j\99¾m\98µk\9c¯d\9d±b\92¯a\95b¡\9dc\9a©m\9aªu\9a¯l\9a°n££w\9c¦p\9dªv\8c§`\97\9fe\91¨_\8a¢[\88©P\91¤W\98\98C\97\97[\95\94`£\97Z\8d\90o\88\92_\8d\8ek\97\99n\9e\9eq\9d¤g\95\9bb\94§e\81\9eot\9bo\83©r\7f¢a{¨ds\95l\83\9f`{\8fa\7f\96b\82¦d\89¡Y\7f¡_\82©Z\82¤X\88¦Uw\9eX\7f\96W\82\9a^\84\8eX\8c~_\7f\89W\82\93V\83\92N\98\97Y\91\96P\98\9c]\8d\99T\92Â¥V¢\9cT¥¢d³\9cf²\98X¬\93U¶\9eP§\92T­\87X®\8dT«\90N¢\91I¶\8dV¯\82]´\8eh©\95]§\90R©\96Y©\8bU©\8dZ\9f\85b \91d¨\82_§\8fZ\91\8cf\92\88^\8c\8fZ\96\8ff\82\8bY}\8d_\83\86ix\8fds\7fUv\86QqwT_\84fW\8fY^\8dc^\83eg\90``\87bP\8fj`\84aW\88YMu`]wV[mXapZ]i_\gZgUYbTTNSPU][IYQHOYTDaGOWGGZNJlQPbPVcSIdUJ_NSfNSbXOn_KkUQrdUsh[u]UgYVvRNnXV|[OpVS|aVx\_tXUq[Vm^WnaXvj[}jS\89[R\83fD\86TT\96HE\93LI\84MT\95QO\89SL\85ZR\86ZR\8f_U\8e`K\92dK\8fWL\98cY\99cQ\8ega\90nT\92l]\8cg\\8b^S\89[]\8a]d~h\{ad\8cqb\81[V\84]O\90]T\8b^]\8d_]\96^X\8dXS\95OU\8fJQ\93BL\9cKE\9aAF\96=@\927N\946D\97>D¢2W©?K¦DJ¨<P¦>W\9d1L\9f5P\9d;U\9cCZ\9fEe\98Hb\92=b¦IZª7T§9[Â¥K^´I\µ8i±D^­Ec³Bgº>^¹9S®EU¹GZ¯JP±CL·CS¾EYÃ>[¨BT«N]©E`©Nc²S^­HX©<g­?m¢=g¡Be¦Gu\9dF\8a\92O\8e\9dC\95\97M\8f\95@\85\9aL\94¦;\94 I\89´W\83µS\8d©T\89»L\88»P\8a¼G\80ÃP\89ÄY\84¼O\8cÂP\8f²Z\84¹\\8c¼[\88¸\\92³T\8e±\\9d»a\9c·a\9f¸o\97¯e\92¸h\8f¸j\9dÂh¡±_\97¦^£¦Z\93¶\\93`\99¦`¡¤n\9aªn\9b²t¢¦n\9a§q\92®t\92¤z\96\9en\8b\9fk\88§_\8a£]\97\9eN\95¤T\9b«I\8f Q\9a\9c`\9f\95^\9f\99f\8f\99e\93\9ch \9bh\99\9ap\9f£d\9d¡f\91¤_\87¡e} qt¤st¤p}¤hv\97ot\98g\7f\93k\84¡h\8a¦k\86£c\8c£Z\8a®U\8d¨W\84Â¥Y\80\9e[\84\9fV\85\97[\89\95]\7f\8aW\84\8a^}\8dS\82\8cQ\89\96N\8c\95U\95 M\95 T\9a¢[¡¬Q¬«P¶¡Y²\95Z²\8dX³\95M°\93M¬\8bV§\92M£\87K±\85O²\87Qª\8dcª\8a]±\97V®\94]²\98R¬\8bX£\8cf¡\92m«\86c©\89X£\86X\8e\83^\93\90a\96\95b\95\93X\8c\8cS\88\88Y\85\91^|\8a^t\85^k\82XgzVb\81X\\82WZ\86a]\82cd\83c[~fQ\81hU\84hXucQvVVvZTjXXg`[l^QZXUMX[JSUOZ^N\U[XQRRTC_PG`RCdGGeHSaUUYTPYYMdNEnMEjPHlPMoZZs\]ybRscTmXJxcVx^YwW^yTZxWX\7f\cwY`tZWv`OmcSvXS\83YX\80fN\80fF\90^C\8eLO\8aNX\89JR\88WS\87TE\89QG\86WX\89^O\97dF\9f_?\98\G\9bgT\96`Y\97iY\95d_\87__\87kU\8b]U\8bZa\83hf}l`\81sW\88h_\8c`P\84^R\8bZT\8d[[\9cXS\9d\Z\94XW\8fIM\90RO\8dKJ\98I=\95H?\95CI\90CO\94=P\979P\9d<I\95>Q\98KJ\9fHO¨;U£3W\99<X\94?`\99@X\99?_\8fC^\93?b\8dD[\98>Z¤?b I\¤Cc¯EgµEm´Ge²F]¯9Y­Cb®@Zº=R¶KX¯>T¯@V¼?\·<e¨7f Cb¤Bi¯Jd²Je±K_°<`¨;f¬=o\9e@n\9e<y\9b@\85\93D\90\90J\94¤F\9b¦C\97¬>\8eªE\93²S\93¯Q\82«K\8c°K\8d­J\8c­M\82­O\83»Q\82ÂL\8e¼W\91°V\8eµY~³X\8c»]\88¸]\94²U\98±[¢¹b\9c³n\98³h\9d¶p\97¯p\91­f¤µe¥¶h ¦i¢«^ ®\\8fX¨\9eU\9d c¦©e\98µa\93«l\93Â¥m\97\9dv\92 j\92Â¥l\95\9dc\95\9e_\95¨\\95¬`\91ªO\92¢P\90\9e^¤¤\©\99c¦\99b\99\9b_¢\96f¢\9bp¡\99k\9c¢r\8c\99o\8e¦k\82£i\80 o|\96vs\9eg|\9ae\7f\90bt\9ba\83\93g\87Â¥n\84 j\86\9ek\8e\9eg\82¢^\88«_\85\9eY}¢X\86\94a\88\91_\81\9cc\8c\88i\80\96f\86\8d\\88\90S\88\95R\89¡T\9c\9dQ\95\9bH\9b«Q­¬Xµ\9fT¯\96W±\8dRª\94T±\93N¯\89L¯\97P´\85A²\82HÂ¥\8aJ¯\92U¬\93Y«\93S¯\8b`­\95a¯\95Q¦\8aWª\8c`¢\84b©\90[Â¥\8fc\95\8ce\8d\88[\8c\82f\97\92[\95\84[\94\82_\8f\93R}\93]v\88Vo\89Qf\86X`\84Zf\86\Y\89hS\80iU\86[T\7f\^\84_P\87iS\87eS{l_uXVlaSk[de\VkbYVSQQTRMZXHPOP^PSULTK[@VZN^OJaO?jHJgPL`WObWHoKJlZDuMJj]Ujb`vaXo`NoXUkWSr\[v\Rn`_\80QZsUS\7fMV~YUy[ZwRZ|_P\82YR\86NK\87`C\84^A\82ZI\8fHU\8cFT\8cQK\8aKO\86OA\88_I|YL\8d^N\87mR\91_J\9abE\9fbU\96cQ\94pW\91fX\88aP\91m[\88[Z\90S^\8b^Y{ga\83g[\92jX\8acQ~aR\8fTa\95V]\8fSR\8fYM\94MJ\8bVF\8fSM\8bJ?\90KI\8dJE\93JG\91HM\8d<H\98AL\91@M\94FT\94CU\97>W\987[\9b:S 6V\959Y\9fG`\9d=Z\8dC]\8dC_\8fIV\94EU\98Hb\9cLX¤JbÂ¥Ae¦>aªD^«<`µ<Y±:^¤<YÂ¥@\©EY²;c«Cb»;Zº9]²H\§Cj£Gi©K^¬Mc²Hn²<gµAw¦9jÂ¥9u\9fLz¡F\89£M\8c\98H\97\95@\95Â¥F\90¨E\91­G\96´J\86±R\82¬K\83©J\98ªL\89¨I}»S\8c½V\8bºV\8e­U\92µT\86§S\87±T\87­e\96¶Z\99¹Q¢·T\99±[\99ªh\9d³l¢­h¢¬j\99¯a\9f¦b\9f­^\9f§a¦´d\93¯W\99T©\99Wª¦cª¬]£®_\96 _\95¢n\92Â¥k\9c©h¡£k\9e«k\91¯h\95¦g\91¡h\99\9f]\94 U\9d¡Z\9f W©\99U¦\94V¢\9ea\9b¤Z\9f¡d\9c\9em\9a\9ev\94\98n\84\9ds\85\9ch~ rz\92k{\94t\7f\9am}\94m\7f\9ef\81 p\87\9bj\7f¤i\85¦l\7f\99l\8e\9b[\8d\9cQ\90¢X\88\98d\89\99`\87\9bh\8e\96f\87\93d~\98c\82\95^\86\9dT\8c\94L\8e\96T\9a\9fU§§M¨¤R³¤N± J¯\96W®\91\¯\90Y´\93U³\94O¿\92Q´\84D¶\7fD°\8fK©\8fZ­\8fY£\97Z©\98]Â¥\8f^ \87_«\88bª\86h¤\83]¨\8da\9e\87i\99~j\91\83h\92~b\8e\8aX\8e\88V\8c\81_\88\81Z\85\8bR\7f\83[{\87Wk\8aPc\84Z^\81X`~eS|lV\82d^\8f][\8ebY\84bM\86[^\7fdaz[^o`cm_]_W\YTZM\UN]OG_TPYQHVPLNTOORK]R?YMCZVG_PD`YI^YO`TSnVJk]JrRW{R^u_UzcTm`Qj_Mf_Xa^\j`SkRYwSS|I^\80MY\81ITzMQwPV{SNxKK\81OE\83Y@\84YL|[M\80PQ\88MU\90LK\85UB\84MC\86ZC\82bI\83eM\83eP\90cF\99nK\9ftF\9drN\97iP\8doS\89l`\92_[\94Te\8bXd\8a[X\89VP\8bcJ\8afP\80aR\87b]\8e^S\94OX\8dQM\8fOO\92XF\8dXH\8cQ=\88WA\87N?\8cTH\8aSC\93OK\98GM\8b=U\88FJ\8cFJ\96BH\93BS\88>X\8e@O\92EV\9a>[\99CW\93Cc\98C]\8c>_\9aAe\98FY\91MX\98Qa\92J`\9cI\©Kg¦<d¡C_«;i°;`§B^®?a©;a®3e¸;i¹Cd¸<e©=\Â¥Bc§G_£Af®Ci²AnªGo°>y­Fy¦B|¨H}§J~\9aL\7f\98B\8b\95<\82\9b?\88 J\95­P\91²L\8d·S\8c¹^\92®Y\93ªX\8b®K\84¶M\83¶P\89°R\8d¨]\8a«W\8aÂ¥[\85§g\87ªa\93¯f\95´Y\9dª]¢«`¥¦f\9c£b\9c\9eZ\99\9dc\9d©fª¥e¥¢c ¯d¤­`\99¬P\94X¤¢V\9e«V\99\9e[\9a­a\98¬k\9a¦b£«p§±s ­p\97 m\91Â¥]\99¯d\8f\9fe¡©c\9e¢^ \9eX\9e£W\9b\95P\9d¡R¡«V©¦]£\9a\¢\9al\9f\96q\8d\99m\92\9ef\83¢h}\9cuy\9cjt\93g~\93i\86\95c\83\96hx¨n\86©l~ªq\84\9brz£l\89\9cg\94\9de\83\9be\8b§g\88Â¥h\92 h\8c\98\\80\8eW\80\96i\81£d\87\9aN\94\99[\92\98R\9a\93U\9d\98V¡\9eP­\97Hµ\9cL±\9bRµ\8dL¼\88X°\9aX¯\90O¸\8aK®\85C·\85E´\88J \98W£\8dSÂ¥\90^­\8bN¨\91S¤\86R¦\86]ª\8d_©\80d£\7fW¡~h\96\80^\8b\82h\94\85Z\97\7fd\92\8fZ\80\90\\81\92[\82\85X{\85bz\8e]o\87\b\83Td\88_f\85`Z\82pUzhN\87eO}cR\81]V\7f]^zgWybci]]qd]f\fRaZT\]U]UTjTP`WL\QMbSMZQO_QGQM=_PAhQI_RDhNU`YNmNSbPLlMNq[ZlOMvTOl]Tg\QrfWf`TbeOiQR|YH~MG\8aUK}MUyKN\83VN{SG\82NN\87YM\81X@\8fRK|ZR\89XI\90PN\93FO\89U@\90PE\93^B\82d?\8flG\80kF\87cA\93tP\8fvP\98fM\96gW\8biQ\8beU\90ZO\94]]\8eWX\87aX\90UX\86eW\99ZI\8aVW\8aTY\92UR\98W_\86XL\8dQS\90ZB\86T>\85]K\84^H\8aW>\90UC\8aYC\8dOF\89KE\90>Q\8aEG\8dJP\8cHY\9aCW\98>O\9eF_\94F_\9eFW\9e<i\92Ag\86Cc\89<]\8b:_\9c=j\8f?e\9bVk\95Mb¦B^£<i ;r¬De§;f¢9`´<c£FX @e²9a´?c¨2g¯?dªCb¤As«Df\9fAs¡=d°Am§:p¨8z«=w\9fEn§Ht©Fw£E{\98B\8e\95?\84Â¥B\93¦@\8e¯Z\87´M\8dªL\85§[\94§U\90®P\8e©A\94¦L\91±R\89«R\82¬O\90¢]\82\9ca\84Â¥X\96±_\95°`\98¯a\9a®Y\9e\9eZ\9f®g\9b¬n¤¦f¤\9dj\96\9b`¤\9eY£¡a£¬cª²Q\94¸[\8fX¤ªa ¥h\9e\9f_\9a\9fh\9b§o¦¬i¥«p¦§q\9aÂ¥l\99£]\92¢_\98§f\97«d\99¦Z\9f\98V\9a\99U\94\99P\9b\9fP\9a\9b\¢§U¡ª[¢¢g ¡a\95\91c\8f\92o\90\9bg\88¢my\9asx\8fuy\92l~¡p} sz\98i|\9eivÂ¥v}¢g\86\9di\81§`\81¦a\89§h\84£b}Â¥i\82§_\8b\9ed\82\9dX\82\94a\8f\9f_\8a e\8a\99Y\99\9bO\98\90I\9a\8fV\93\8dQ\9d\97F¤\93Eª\9b>·\90H²\88E®\93Nº\90V¹\8cO±\85W²\87N­\88P¦\89C¤\8fN§\91S«\93I£\8eO«\8bT­\90S²\8bS·\84a®\7fc |Z }X\9c\80^\8f\81a\94\89c\94\84]\83\94X\83\96\v\96\t\86Zk\8eah\92es\88Wm}[j~]_\82kQwtQqmKoeQ|eVz]W\80c[zcWmb`c_febcZnd\ic^^`X^`UjTTdVCeMBgP?hRBgIDVOCaNFeRL_JJcOT\QV`PW]Y[iTUkVNnLLrNYlSVxZQvcZvdZgYRlWKzXK\88\C\89RG\90DG\85GJwHFzVL\8aSI\89_E\84\@\89X@~OI\82PM\86LH\95HB\8dG=\94RA\91a?\91f?\89]@\86a>\90gD\94oF\96jM\93iS\8cba\8ae`\91^T\87WR\93`Y\8dd]\95[`\8c`V\8bdU\97WF\8aSE\86WR\90QQ\91WU\8d]V\81\Q\88SA\81NB\82Y9\91X>\97WK\8fYJ\90TJ\90PA\88?G\88>I\89?M\97EU\8bGU\8fGY\90GV\9fLd\96Q^\96L`\96E_\97Gf\8cG_\858i\956o\93=l\8f<k\8fKs\9b<w\9f>k\99Fo =o¨8nÂ¥Ch¬>^¯;e±FZ¢I]©8]¢4c§?d\9f;hª?t©Hq°DtªAr§>i¦3m¤>n\9fCo§Cs\9dFl\9b;w¡8v\939z\95@\87\94>\8e\9f@\8e©L\94±S\8e¨L\93Â¥U\8e¡S\87¡P\8b©M\91¤H\95¨O\91¤X\82¤T\81£P\8e\9bR\85\9dX\8b\9fY\9a­[\97ª_\92§j\8e `\8c\9eb\95§f\95ªo¢«b\99\9da\97\97d¤\9fX®¤T¬¤V ¯^\98´W\99d\99¨d¤©i\98¢h\94\9ag« n«°q¡®r «n £q¡ªh¡°d¥ªh£ [¡¥U¥¤a«\9fO\9d\99I¤ U¦\9aP©¥X¢£b\9a\9ce\97\99[\8c\91k\88\9an\92¢f\83\92nx\92i{\9apx\96js\9bmr£r\85¦t{\95o\81£wy\9bh\83\9be\84¦c\84\9eb\8f£d\8dª]|¨`|¤b\85\9e`\7f\91d\86\8c_\88\91a\92¦U\94\97Z\9c\91S\98\98E\96\8bR\9b\87A£\98D£\96M¦\8e=¬\8c<½\84I´\83H·\8f@º\82B¸\87K¸\7fI­~K´\83B­\8c@Â¥\8aS±\8eC¦\85I·\86F°\92Q±\8cQ®\86]·\8cY¨\87W\9e\87g\91\89X\98\8a\\94\8db\94\90d\81\92_\87\91`\82\85g|\88dl\94Ul\96_r\83Wf|[l\7f_hxd\tsUufTslZ~oX\7f\_th[ke[ggUnjkflbbhjYpZQbfTfdYdTWpRVoZNh[ClNH^PI_MF^LQhKPiRQcSPgLQdVZmU[h\XlVGvVKjWUjHZwPXveSj[YnQJqTDoXCzQK\8eKK~LK\89PK\83KS}\I\85QH\87g@\90SB\87\:~^M\86MK\90TF\90RG\8aV?\8fP9\98P@\90[F\8efH\8ei=\87a@\89hK\99oJ\92i\\98`^\8ea\\85c[\87SM\87dY\86hZ\87^Z\92WX\8dSK\9eRG\93QG\8cXH\91OK\8c]R\89RP\80TA\88ZF\88O;\87S?\8fT@\89[A\8eTO\89VO\92KH\87FE\8eFM\8fPU\91IU\90TU\89P\\94GX\9aK`\97Ee\9dR_\9dDq\9fAl\93Dn\91=s\94@i\8cIg\87Ky\8fAp\97Ai£Ic\98Dv\9bJu¨Lt\9cEc >^©5h¢=`\9dKb«Ah @r\9fCk\98:g\9eKyÂ¥=l©7x£?r\9d2m¦/m\9b1s\99Ce\9cEu\9d=v§9t\9b9s¦:|\959\8c\9e7\7f«=\8b§A\90±O\91£P\94­V\8e\9fU\92\9cU\92¢M\87¦J\8d\9eW\86¡T\7f¡R\82¦W\8e\9f`\8c \\91°[\90²k\8e¬d\95¬l\86Â¥j\9b¤h\90§e\9e¤i\9fªr\9a\9cp\91¡g¢¥T´[­¡a¢©[¨´N©m\92Â¥`\99ªj\98®c\9f£g¯¢b­¨c®©m¨°p\9c°p\9c¬s\98©d£­]«¡^®¡W±\9a[ª U°\97S±\9aQ­\9dS¨£N¥¥X¢ W\97Â¥c\91\98c\96\9cf\8a\9b^\89\9ee|\98]v\9eau\92p\7f\9crx\9bwv\9dt\80\9dt{¨qx¡rz\9dk\86\9dg~¢_\87¤d\87\99a\84\9be\8a d\81\98g{\9fi\80\95h\82\98_\91\9c`\98\9eU\92\8eY\8c\84P\93\88H\9b\88B\9d\8fF¬\8bH¬\85B¶\8b<¼\857´\80B¹\86D²\80D¼\80L»}Gµ\84?¨\90D©\8aF«\7fJ«~P¨\89D±\8eQ·\85Q¯\8cY¬\89V²\87^ª\80d¦\86a\9f\82_\93\85a\8f\8de\90\8e^\8e\87g\80\85_\80\8fau\90at\91Xj\96dg\88`h\88ng\81nhxw_xn^rgSkoRur]vkXqiXpvSml__rcUq_`ga[ifYoZRu]WkbWlgIs[KkNFiRKaLIdKFiUEaNNfGNiNQrPQlSKuZKrVQjaGpZNjVWqNZwZVxUMvOJuYP{ORrNFxE@\81LF\8aDD\85GC\8bJF\86ST\8caK\90]D\84`=\88WC\89RK\7fXE\85OJ\87WA\94W>\93O@\94V=\90ZF\84Z=\89j@\82pG\8biD\8cbR\93gT\98[V\8d[Z\92^]\89UV\8e^_\8dc]\8fXP\97XO\8dOV\94WN\95SP\88^A\8bU>\84TD\85TJ\8eO@\8aM=\85QE\8fW8\91X<\8d^I\8fSH\8bJQ\8eNK\94HM\96PD\91[L\8fUW\95R[\91OY\92Dc\96E\\9f@h\99Gg\928m\95:t\9b5p\8f?n\89@k\88Es\92;j\92<q\94Jm\9aIl\99Ii£Hp\96Oe\9aGf\97:iÂ¥>c\9dJc¦Dg£Lh\9eBo\9dAz\9bEw©Ao§Ax\9f@\81¤2~§7|\9d1q\9f,p\944h\931g\99:o\98Ao¢<n¤An :\7f¯7\83¯E|¦L\88«G\84­J\8d§U\8d£T\8f§O\8eÂ¥U\81\9cJ~\95N|\9eN\83\99R\8bÂ¥`\8b£]\8f§a\8d§k\87®l\8dªj\88§m\8e¦g\95\9cq\9b p\9c\9dh\9d\9cb\9f¦m\97«h§¨`¦£a¨¨b°©W¦¨V©i¦µf\99©f¢¬s ¨p¨\9ei¦­l®µy¦®l¤·l\9d¨n\9e¶k\95©`\9b¯n\9f¯`³¡Z­¬WµªT¯©\° ^\9d­e¥¤c\98©j\91¤a\8d\9ci\8b\97^\8e\8fi\83\95_v¡i\85\8ees\99k\80\9fm\82\9alv¢v\81Â¥j\86\9do\86¤e\88«h\87 [\8a©g\89¦[\8f©f\8b\9bjz¡g{\9bk}\99b\82\92g\88 l\93\9e[\97\8fW\90\90_\92\8fP\8b\8cH \8cO\9b\8dN\9e\8bK§\8dP³\88I´\85L°\89<±yEÀz?½\85A¶~C¾zB¶\8bE¬\85D¬\80F¬\83JÂ¥\84E¨\81K­\86RÂ¥\85X°\8b^¤\83S\9e\80^\9c\8ck\90\8d]\95\81f\8c\93[\8d\88]\86\92d\81\92et\8a_n\92bm\8fXh\8fXc\92ai\83_e\7frd}q_ukh{oXtbZ|oYjnRejUes]js_lvWZd]U`Y\gQPt[Lh\QmbXiVUn[JpYEmMJaEB`JFhHRdIRrBQrFFiWKkNUpLNo\MqOJmYQgKXtGbwMTr]VoYUjXVyQNs\DwZF\8aLD\87Q@\82J;\84VD\80PU\83OR\92QC\89P<\8eUD\8dXE\86fG\86V<\8e`8\92]7\8eW9\87UJ\88PM\8deD\8chR\82iI\87_B\88`K\88gS\93cY\90gV\8fdV\8cY\\86a[\8eiV\8fcY\8abW\8d_T\8bUW\89_O\8b`R\8b]O\87VA\85SE\80[G\86\C\85XB\89S<\85[?\8aUI\8fLR\8cGK\91JL\8dQC\95EJ\84MN\85IZ\83OR\89T[\98Gd\8fAe\8fA^\97Mm\9aKj\96Ci\96Hm\92Kh\95Er\8cNz\8a;r\97=m\90Jq\97Js\9eKoÂ¥Qq\96Ff¤Iq\9c=`§@e\9d:g\93?d Al\9a?p @v Gq¨?p­=o¨6v¢*xÂ¥/v\9c7q¡)w\9e4z£?q\9f>m\987h\9c2m\9dBx C\82¨@\82³It±H{¢O{ªJ~°G\8d\9eG\92§A\90\9fP\8e\95V\85\9dI\80ªY\81¦U\87ªU\8c\9cd\87\9cZ\8d«e\88³h\90­`\97§c\8f­d\9d¦h\93\9dk\9d§l\94ªd\9a®h\93§a ªY®§Z¯©eª³Z¨¨P¬o¨ªo\9e©m\9c¤t¦\9bq«¬g©¯m¥¨y§°k­­d£¯b\96ªp\98¯q\99´n¡°iª§c·ªa¸¥\´¦]®«c\9e°k\9d±d\91¤a\85 o\85\99a\85\95Y\85\8d^\81\95e\81\9ddz\9ff~\95fz\90^{\9bmw\99j|¡c\87¤j\83¬k\86¯Z\86¬e\8aµe\92¯d\8f¨j\87¤a~\9ad\7f\95^\83\97]\88\9dd\8f£j\9d\98d\9c\93d\9e\97]\95\88Y\91\89N\94\86L¢\8cR¬\89Gª\86T¦\8bR°\7fT±\84G¶xM¶\7fC·\8aM¿|M¸|L¯\84G¨\8cC¨\8fB¤\86;\9d~C\9a\80@\97\86I£\85R£\81U\9e\86S\93\84_\97\8el\97\8fg\91\8cX\84\88Z\88\93X\7f\92c\83\90f}\91Zq\8bTk\95Za\92bk\8e[l\8f[b\86lX~qf\84qb~o^{^WvcUknZeg`jkVlsPdsRcnMYePNcYPgYNtUJsUOqWSr^QkOChI?_ICVQBgONpERtCDuIEyFKlONmLKyZXmYKhPMoIPoNYxWZyUU|QTpSYl]Zw[IzNG\83PB\8cS@\8fP?\94QQ\87VY\8cSP\82K>\83S>\85`7\80]F\87bE\8aj>\84c=\91W>\93[@\8dQB\82QF\85VT\8bgR\84cO\7fcD\82gR\88[O\8aaU\89eL\84mV\80hV\89`N\8ecT\92l`\8ahZ\92eU\8eaP\86]Q\8a^T\83aP{XBx];\80`E\83V:\80S;{IG\80MR\80FV\8aMJ\81SH\83HH\80DT\88IR\7fLQ\80F[\7fSS\84PZ\89Ng\98Eb\9aF_\98Id\9eLa\99Bb\9aNe\97Mr\93Fq\8dGs\93Oo\9eHi\9eDn\91>~\90<z\9dHr\9aCz\9eNp\9dAs¦?f\9dDo\91Fj\87Ov\8cFu\9aLu¡Mm¤Fs¨<t\9e5z\9f-\81\99.z\9c/|\992\81 -\81¡2s\9d?o§3k¤4s\9fA\7f\9c@\81\9cEy§Dy\9eNq£Mx¡S\7f¬I\87®?\83¡B\85\9bR\8b\9cW\90©P\96§U\8c¢\\88¤U\8b¢_\89\9eX\8cªb\8f¨h\8d³`\91¬Y\95¬X\90¨c\95«e\99©b\8d­^\93¦X\99Â¥Y\9c¯b®³]¢ªX¡­Z\9f®Y®q\9a­qª«zªª{¥¦j¢ qª¦o¢¨\7f ®t¥±o¥«m§±k\94«v¢¯i¦¦j®¯i¹¬d½¬b²°i¦­]¤­a¡«_\99¦o\91\9bg\81\9b^\8f\9a[\94\97U\8c\94d\85\92Y\8b\99e\82\8ca\82\8cV\85\9ad\83Â¥Wx\9f_\86¤d\85­e\8b¦b\82¢a\89±j\98«j\96°i\92§d\90\9d`\85¤U\8d£Y\93\9bY\96 i¢\9ek\97\8fg\95\90^\99\8aY\94\84W¦\85P¦\8dI¨\87M«\82K«\83T³\83V±\80Q¶zM±|L­\82I²\88V«\83O°\81Lª\86@¡\86B¢\81H\97\81?\95\88H \8aS\9d\8aV\97\90`\91\8f]\9c\8ea\96\84c\8d\90b\83\8bb\8b\8baz\91ay\86a\86\8aau\92Vv\8cZu\93bf\8adb\8a_`\89kk\81sZ\83dZ\84o\\83a\\7fcXpmYpaYerUaq_ejNklYilW[oNLoOJcRPi]ApWRt]LsZSmKDjPNaSGURFcO?wCHsNP\80JLlOPwFQzLTtZLqRXgNOsPYjTRsKVzJNvYRrJYz[R\83]N~^E\85X;\86TF\8cSG\8aWG\88RX\8aKD\83VC\7fTA\8bY2~W>\85kG\8dZA\89Z?\8e]@\8ab;\81^?{OO{RS\83fX\80aS\7f]F\83YI\82iJ\85ZEzfH\8afR\88nL\85fR\8ffK\8cgY\8ep_\8egX\8ae]\88b]\8c\U|^J\81ZI\81eC\7ffN\87aL\84\F\7fO=~LK\84SH{PK\81VK\81ZP\85RS\85AI\82IQ\82HQ\83O[\81PT\80UV\87Sf\95P^\95Rl\9bFd\8cG^\9aPk\8dSo\97Mz\91Km\99Rg\95Hr\94Ap\8e:\84\92E\84¡E}\99Lx\98Ks\98Np¢Lm\9dJo\95Io\89Ru\85Lp\9cNo\9bKz\97Ep\9c0u\9d3|\95<}§:\84\9d(\82¨'\86¦'\81\9a0x\90=t\91:{\9aE\7f¡4wÂ¥5{¡5|©;\83¤<y¬@\81 M\89¦D\82§C\83¦@\92\9eB\89\9fU\8e¤R\86\9dP\96£S\8b N\85¤Z\8c£f\81\99Y\84«Z\8f©^\91®_\8e£`\93Â¥]\95°e\94¬^\86±S\90¦P\92²S\9c±\£ªX©ªT²¬T­£aµ{¤·v©¸n²©u©§m¦¡r£ r\9c¦w\9c«z¥°r¨©o¡­l §i§¨t±¡r¹ªk·®f±±g¯¯g­·g¡²e\9cÂ¥a\9e\9eg\9c\95j\8e\99i\90Â¥_\96\9f\\92\9cY\91\94U\84\8bW\81\8c_|\90^\81\97Qz§T\83¨Y~®Y\85¬Z\8a¦Z\85¤h\96¦d\97¬j\8c¯b\8b«Y\92¦Y\90£b\95 Z\93\9eX¡\9ed£\9dbÂ¥\97Y\9d\91\\9a\8fX¢\87Q\9f\80R \83O\9f\88K©\8bJ¢\8dN¦\84W­\87O§{T°\7fY¯\84W¯\8aV­\85S¤\8dU©\88I\9e\8cF¤\82@§}C\9a\81G\93\82R\95\88[\9a\90`\90\90c\95\8bb\98\8b]\89\87Y\86\90V{\92cy\85g{\7fb\7f\83`x\7f^u\8ack\87_n\86Vk\86]^\8cZd\8fhg\87ae\81efxmdmoYpcaoe`ejUkjVilP`oRdlN`kRPaSAaXAeQIhRDrNEuRJkPM`QLdQL]H=aIAtG<yE@zONuNEsIK{GJxRKrIRoKQnOZnURlOIsNMqJGoKQsXE\80VJ\84WD\87\<\8eb@\84VH\80JD\8aMM\8d[F\80Y:\82Z4\86Z;\85[=\89cG\86hH\93^E\97^K\8c\D\8ccL~]Rz\XzUV\7fQV\87YL\80ZB\80gH\83mQ|aHwe@\7fmG\7fnG\88wS\88tR\80zW~zX\8ao]\84cW\8df]\84g]|mN\88^O\87_R\86`B\89SC~XLxVDsTH|\T\85TP\85[X~MV\7fINxIT~STwRQ\80TZ\89M_\84Wd\86Of\93Ti\95Pd\8cNd\8dKl\8cWq\8a\k\8eQp\96Kw\96Hs\91Mz\93C\82\90@{\94C~\9fOu\99Rr\9cMk\95Oo\92S{\98V{\98N\7f\8fUz\8cK}\91K}\99Hw\955t\944\80\9a9~\9c8\7f«0\84¯3\80Â¥.y¡1\82\93=|\91J~\94E|\9c=\81¢:\82¤6\8eÂ¥8\8a\9f@\8c©?\80©<\89¨J\89¡C\8b¦B\90¦D\88«J\8f\9fW\8f£[\8f£Z\91\9dV\86£[\83\9bd\83\99e\7f\9dY\85©\\86¨S\93Â¥Z\85©U\87Â¥^\8a¨\\8f¨Z\8d¯S\9c®]\98¯V¢¦^² Z³\9fe®¦a±sª°f¦³p®³s¥§o¡\9fp¯©x§©s\9a£l\9b¨w\9b²m¢¥j\9f±k««o®\9ej««c½¸m¬³eª±^§¹b\9c¹d\98²l\9bª_\94 p\87\97d\8b\9eU\8f¢[\95¦[\88\97S\7f\93^\80\99c\83\97^\89\90U\82Â¥Q\84\9aX\84¡b\85¬T\91£S\90¯Y\8b§`\94£f\8b®j\8d°Z\94§h\9c\9d\\93Â¥O ¡^\9c§g§\9bc£¢`\9c\91R\94\8aZ\9d\8bZ\9c\83Q\9a\88X\9f\90Q¨\84V\9f\80N¢\80V¨{Q¬~Y±\85V«\82`ª\8bU±\83W¯\8dP°\8cE­\8aM§\88C¤|R\99{N\98xJ\96xY\8az\\8f\88Y\91\8aY\9b\86[\83\90X\87\89]\82\85m\7f\8agq\85]{\7fko\84p}\84os\8ecf\8a`g\82Zd\90f[\83h`|\^\80hhwbexpgm_]kakdYdf\WZ`OWgRS^X^lKT_T?nP<kP8hWGoTJvOCcUH]IAcTFiA:mG?lK5tKCvQ>{AA{@G\81>N\83@QsIXkKToSQoLPuPYmPOxVPnGIxM>w]B\84\K\84_G|RA}TC\83MJ\8cGF}QG\84R9|\A\82^=\83d@\8ad=\8a\G\92kK\85hC\86`G\89YI\7fXOzcQv`SxZUx]E\85ZR\84gK\86kD}`SwkMydK\84nW\8bzT\87|M\81{X\81vN\8bu`\82c`\82d]\85sK\84kP{kO\84cV\8feQ\91`F|RL}VAp\K\7f`K}]M\88[_|YS\85SW\82NM~[R\85NY\89T[\8bNe\89Wj\91ah\92T`\88`^\84Xh\92Xh\94Zt\8fNk\8eTl\8eUz\9a?|\9bHw\9eIx\9a9\8a\8bD{\9b@z¢Hp\91En\9bUt\96Sl\8b[u\93Yu\90R\7f\92I\80\91Ep\96Cw\98B}\8e5v\93B\81\98?\81¤>\80\9d9\85Â¥/\80\9b7\84\9d8{\9b8\82\93=\89\96C\8b¤6\8c¡7\87\9e;\89\9c8\83§9\83 :~§=\8d\9bB\8e§A\97ªG\89¬L\83\9fR\89¡Y\83¢\\91«X\90Â¥a\84¤`\7f\9d\\86\97b\8a\9aX\94¤X\91­Q\99§]\93«`\90¤\\87ªV\95°]\9b«X\95£_\9c§^¤\9f\¸\9d[§¦d¨n ¬d§©qª¤o§¥u ¬jª«r\99\9eu\98¡w\94Â¥m\9a°t¥«q¥¯j©j¥¤k·®a»·a«²fµb«°X\9b®e\9f²g\96±e\8d¨l\91\9b^\8e¦Z\88¤`\7f¨[\85§]}Â¥S\85\9bd\86\9cd\88\99]\88\99W\89\9c]\8b«Z\8e®T\88¨T\93±]\96Â¥[\91¤j\8b¢h\96£i\9eÂ¥e\98¡W¡\9aT\9c£V§\9f^Â¥\9e[§¥U\9a\9aU\95\8bR\96\81O\93\81M \85O\9c\84[§\8eX\9b\80V\9e\83K\9c\82Q¦\81P«zT¨{^Â¥\82Y­\89L¨\8dI°\8f@µ\8fD¨\8dF©\8dR\9b~S\9a\80D\8cxP\8d\7f^\99{\\92\88U\8f\90]\88\8ch\82\92kv\8cg{\90do\96hp\8ch|\88pz\8emk\8bni\89_a\85[Y\8fe_}b\ta`j]anb\xcgt\fm\k]S`e[U\[T\\SSbQWcUScLMlO9gG;nJ>gB:eDEhGFhK;qG;oI6yH2tA6zL2oG;yE;w=K\7f9T\83=P\84HWwKSvQWvORnQ]sQVvKKzJB\81N8}V<\83WF\85RF|QD{OD}NB\86JH\8bJH\82T;\8a\F\87[D\8d_<\89Y?\84dK\8aiK\8diK\81iD~^O\8c\R\86WS\7f\Q}aQyeN|kW|cO|bM\80hO}dD\83dE\8fuQ\89}^\82s\zwOtkL|kVyeR\7flV\87qW}xK}uO\89`V\8bZL\88`P\80]OrZKn_JpVNr^N|XWzXOzOQ~LX{QO{U]\88JZ\93X]\8c[e\93`j\8d\`\89de\80^a~ca\8dYe\92Ym\96Xq\95Ou\9fAv\99Hs\9cA\7f\9a>{\90=\87\92H\87\9cHw£Il\9aOo\96[u\8bUn\92Zy\96W}\91Mp\99Lj\96Dl\95Iu\8d?o\92<s\9d4wÂ¥;\88\9a8\83\976\86¤Ey¦B|ª8\85\9d.\90\972\8f\9e?\85\94:}\9a<\86¤5\90¨<\8c\9c6\81¡:\84\9d7\8b¡=\91¦>\95£A\88£K\82¦W\88«T\8e©Y\8e¢Z\91\9fT\8c¦T\96\9c_\92\9f^\96\9eV\9b¤S¢¯`\9c´^\98­d\8b§f\8aªc\94¨f\95\9e^\94¤X§ªT¬\9eaµ\9b\¬g\9f­j­¤g¥¨k±°b©£c««o¡¥o\97¬j¡£r ¬i«¤t¯¢m¥°e®¬a²¸]º®f¶¶g¯·c¦«Z\9f«^\9b¨n\9b«n\94©n\95£b\91¨N\92±X\8e§S|¯]\89¤N\88Â¥^\82\9e]\85\94a\8f\99U\90£Q\90«^\9a©S\98¬S\91¨`\8e²`\9d­`\9b¢p\94 _\99\9cb¤\9eZ§ U§ªX\9e\9f_¯\96`§\9cW¢\95\\94\8aV¢\82_\9c\82U¨\92^\9c\8bb\9a\91\\97\8a_\9a~M¦\86K¢zS°\87W¬~Q³\86a¦\89]©\90W²\8dO£\92P\9e\8cG \8e\\9b~T\9azN\94tP\8f\7fU\89\82X\83\82Q\8e\8b]\81\93h\88\91i\7f\8e[{\8a^z\8a_j\95gk\86qv\8aui\8dlh\84ob\7f\_\8agg}c]ud^o[nrcpqVoxWerangVfWOQaUIXZSMWMHUIV]MAiFEoD<rJEoQ8fJ>a?=^I9lJ=lD1i?1m>1n=4l?8~B?v;M\84:K|@PzDMyNMzRN|FEzHHwMZvTM\80DJ{RJ\81Z:\86LC\82JMzH?\88RE\87R;\83J?\84U7\8aTF\87Y?\88ZC\82]A\90g?\8ajF\83aH\87lG~gB\8ciC\90dI\80fI\84`NzjN\83bV~dH\81kQz^V~mNxpJwhOzqO\82\81YtqMzqR\7flHxmJrfU\80gXznK\85~N~sQ\81pV}iV\89jW{]Gz]GzYRtPFpVGxYTzMXnNV\80[TsRYzX`\7fK]\86QZ\8eOa\88Ne\91Rd\8b]b~Ve\8a\b\83]o\88Vo\93Rz\9bUm£Pv\9fE|\92Rt\9aC|\9c>\84\909|\99Kz\9dJk\90Fl\97Ir\99Zl\95Px\9a^v\9eXw\9bNi\9cGw\91Hv\95Bs\98@}¤B|¨;\8b¡A\84\989\82\9d?z\9fA\87§0\89\9f7\94\9e-\88\930\98\90>\88\98:\86 8\92\9c<\8f\9eB\8e\9aE\86\9e@\87¨6\80£7\87 D\8b¢C\87©M\85\9eL\8b§X\91\98[\95\9dU\90\9f]\94¢S\91 W\95¢[\95¤W\9f§`\96³c\9f§_\99­_\90ª^\97¯X\9c¨\\98§T\96®Vª\9f\¡\9ec¨h°±j®«n³³eǻ`´¨i®£p«¬w¤¦x«¤j¡¬u\9e¯qª£qª§d­´e·²c³³[¥¬Y¦°a¦­\\99©X\98§e\8f«\\8f®a\90®X\86¸O\8b´Y\83­R\84¦U\83®T\7f¦U\88 X\82\9dU\8e\98Q\8d J\90\9fT\96©S\93 U\99¦Z\94¢_\9b©^\9d¡g\98\9bb¢\9b`§\98c«\96[¡¥]¨ \­\9eg¨¤b¢\9cdÂ¥\97X\9f\8eZÂ¥\91b£\8ej\9c\86a\9d\82X\9e|W\98\81X\9c\80S¢\83J­\80M¬\86X¬\8c[¯\8f[¶\95T­\8aR©\92Q¤\8eS\9f\93W\97\8bM\97zJ\8bzU\83~R\81\83V\84\84W\85\81Z\84\88\\7f\87]v\84`v\8feq\93du\91cj\89op\8dkp}qn}wo\7fmg~pi}cazd^}VixYb\80VlxNovTgfRdbOQVYLLVLPTOVXMKiCKiJDpP9iM;iI5dF<^=>d@/l?5nE7gMAkK;nB;rB8|=;\7f=D|BH\849O\88EQ\83DK\8dOE\86HIwJTtNOuIKvFE}JH~QB~QD\84NH\81H?\86J9{K9\7fW3\87Y8\81X?\88cA\88]@\88fM\8bjN\93aK\89gJ\8dlF\89k=\82n>\87fE\84kF\81kO\7f`X\7f^PyjU|jMrdRseNvmNuwI\7f\82Jy|WouLvvHptCtkN|rHziP~jU\86rW~rZ\7fwMwxU{jMqhPrYOpQTsVNwNLtTKpVIs\V|V_yXWxM`\83R^\84W_\8dOj\83In\87Rb\81Rd\82M^\8aYg\83Xm\8bRu\92Vx\8bUr\95Mv\90Js\93Qx\9eR{\99A|\91;y\90=o\8d=g\93Kl¡Lj\9dMl\96Xu\95Ym bi\9b\h\8eLs\92Mx\99Fw\99Iz\9e>z¡5\82¬;\88©B}¯7\8b¨;\8c£8\98\99/\93\949\9e\971\9b\98:\92\8f7\8e\97C\8b\9a>\96\9fH\94\9fA\93\99G\88¡;\7f H\83\9dE\8f\9cA\96§I\91¢P\8a\9eT\92Â¥L\97\9eT\91\9f_\98£X\97¤Z\8e\9f`\96\9fc¢¨b\9c¶Z\9c²]\99¬^\96³\\92«Q\90¢W\95«[\9cªU\9fÂ¥_£ f¡`®·m©°h§°`¤ªh§ªl¥¬j\9f¢u\9d©v£¦g¨¢m¨¦r¬l¬²k³²kǻ]°¼` ¸Z\98­V\9a¶S\92®b\8c«d\8e¨a\8a²]\8bµP\83ªT\90¢\\83ª_~¤O\8d¤R|¨V\8c\9fX\82¦^\87£]\92¯R\8e¬^\89¤T\91®\\93\9c\\95­c\95¬c\99®\\99\9af ¥^\9f\9b]ª¦b£«c¡\9ef³¨c§\97g£\9cd¡\8d[\9e\8cWª\8fc\9c\93_Â¥\8cU£\94RÂ¥\89SÂ¥\8d]Â¥\7fZ°\8eKÂ¥\8bS£\8cN°\95_¹\98O³\93O¨\8dR«\89G\9f\86X \89L£\88H\9a\82Q\92tV\8bwZ\82\89S\82~T\81\8a[}\8dU\83\7fX\84\8bc\7f\90Y~\8dhu\8apn\96xf\93sd\88ch\87un\7fsg|m_zdYr^[}[iuTjyOdvP^rXbi[X^X^QYLTbGQXNUh\PqHBnM<sA;qEHpF=gA6gF6tB<rJ0nD>vI/z<8uN:sEA\84CFzAD\83@@\871E\8e@I\7fJ>\89IH\84JH\84CBvAKtEJm@4~S:vQ<xOD{GFxS:\80I-\83R1\8aX)\80R9\85XB{_>\8dX3\7fgC\85rI\8dcF\8c_K\89nA\8c^D\8ca={Z8\80cI~iD\83mK\83bW{`IviOtfCzhSplB\82sK\7ftM\85\86KtrHrvRvvIniXwoYtmN|xRzyN\7fvTwmLtoNtlTodVvZNzZNv[Jy_XpVSzVKyaWrbQzW]wVc\7fRg\8a]e\80Id\80Ln\85Zq\86Ka\86P^\85Yr\83Tp\8a]u\84K{\92Nr\94J~\93S|\8aH|\92Ky\98E\80\92Gw\8d?{\9e?y\90Kg\98Uq\9bTu\96Yi\8cUp\91Ql\99Xh\97Ow\94Ks\8fJ\81\95B}\92E\85\96<\86£A\89«H\7fªA\8b¡7\92\910\91\9d%\96\92(\8e\9e.\97\927\8b\9a8\90\9c7\88\99C\8e =\94\9a;\89 5\8b\9d>~\9bC\7f¨>\92¢@\8c¤E\95\9cW\94\9eS\8d\96O\97¢[\91¨P\8e¦T\99¢T\92­X\99©a\95Â¥[§\9fU\9eªe\97®c\95º[\99¤`\8f®]\96£`\95§Xª V¡¦d¨]±Äd³Ãj¬¾c¦¯m¢²o¨¦q¬\9f|¥©z\9e§t¥£|¦£{¦¥l©«b±®b¥´a¦³[¦ºe\99·a\97²X\92²]\97¶_\8c¬V\81ª^\85¯W\87¯V\83 V\7f\9e]\89£]\85 V\87\99U\8c\96Y\85¤\\94§W\91¬\\86¤\\88¬Z\89\9eZ\90\9fb\94°Y\95±U¤¬R¡ [¦\9e[\9e ]\9c\9da¥ l¨ªe«¢j­\9bc¬\96Z¢\96[¢\93Z \91[¦\90S«\8bS®\94PÂ¥\8e[£\87[­\87S¯\88X´\94Xª\91X¯\91[³\95Q®\94R¬\8bWÂ¥\88Lª\81Q \8bN\9f\88H¡\82F\92xV\8e{\\8c}V\82|_~\8cUy\90V}\85Tu\8a_~\94]\83\88`z\8cem\91pk\8djl\8bdf\85cg\82oonlqr`arifu`crWVcTZdTYldcpa_aU]]cNfcP^bQ^iZVnMKxD@j<@mCDkO=jJ?qOAuH9\7fK4yJ5w=;}>8}ME~KG{=F\818F~5@\858B\8f>8\8cC;\8276\81;;}E>\81A@x?7mH1rI4~JB{M?}LB\83P<wR0}V*\87Z*\82b0x_9xc:\86^2\84_>\85hJ\8b`L\8afQ\8cmL\8abO\87_C}X8wZ8|k@wdQylRsfF~^B}_Dy_J\84tH\80zE{{?\80\84D\86uI}qOtnQpuQywNzj[w{Tv|N~{XzlSvtP|lL{qXufXqiWpaTm[PuXTwX\o_SmaexVe\80Xg{]_y[[\82S\{S`xZs{Lm}Mm\80Mr\80Ww\81Tl\82Lo\85Lw\90Lx\8bLw\8dCy\96Hz\9dGz\99D\80\99A|\968p\99@p\8fQu\8e\z\8aZs\8c`t\94Um\97On\97Ql\98Oy\95E\82\97J\83\93P\80\98G\81£M\85£B\86\956\91\939\95\92+\9d\92*\94\9d-\91\97/\8f\9d-\8d\990\97\9a1\8d\8e?\87\92?\81\9c@\85\95:z\9f:\7f\9e@~¬@\83\9cE\89\9dI\88\9bV\93\9bS\98\9cI\99\9fP\88¦G\83 J\8bªY\89©[\92 Z\9d\9fS §X¥¡b¦«_\9a¯W\9e¯a\92¬f\8e¢^\94 Z£¬W ­d¨e§ºb®»k²²aǼb³³q°²p·´y´¨t«¦z°®v«·{³¶m¦·[£®[§²X\9b¿`§¹d\9e²Y\97±S\90µb\8f¸l\8c¦l\8d±j\84Â¥V\82¢V{\9dU~¨\\85§R\7fÂ¥P\89Â¥`\80\9bZ\92«b\83ªb\94°S\86 [\8c¢U\91§U\8e\9aL\91Â¥^\9f¶[\9b®X¡¤V©¥T©¡X¯¥_©\9dZµ­a¶\9eY©¦\³¦c¢\9eZ¢\96a¢\89Y \96_¨\94O±\93Y­\8f[ª\8fRª\83W®\8cQÂ¥\8ea§\8cX±\92R²\94^©\92Q­\88V\9e\7fK£\88KÂ¥|R\92\89H\93\80S\8fzL\86y[\84\87^~\82Zt\83]y\89Os\85S}\82Uu\95_~\8bbw\83fv\88rn\7ffk\83guynvqglmfhs[hdccbe`obhbWdf[iki`lcblbZc\b`_][fWTm[WjYO\7fHK}N=qAN|L<p>AqJEw@>\83I:z@=yM5\82B:}DE}A?\8aBN\825A\8b6H\8c99\8963\90>0\89<5}57\81??\80<8qE/r9*tA-t?<{?A\7fJD}?:lF+sM+~`-}W+\80_4\7fX-\85d=\84Z3\82l:\82gJ\85eN\81`H}hEwgJvS>t]8~aC|eDtmKwlFx^H}`BndD\80nK\84w;\83uFw\85D\83z=\84|A\81lGvn[{o\{oV{x[p\80Or~SzsJpjO|lWu^Tw]Zn^VuVRp_O|eSj^\hYWv]as`]|Y_t]_vY[nV^yKmuR|tYm|Uhs\o\88Wz\86Yv\85Vy\87Mu\93U\86\9aSv\8dIp\8fJs\99Ju\91:s\95E\82\91>x\9f>y\91J}\8b[s\96`u\95d{\96Uj\97Lq\96Ns\93Pt\8cK\84\98F\7f\9dCv\98E\88\9fH\8c§?\81\9dC\90\900\9b\94-\91\91(\95\97+\99\89'\87\903\95\8b.\88\898\86\8eG\92\9b<\8a\99C\90\9b8\89\9e:\8f§A\7f©?~\9fA\88¡P\83\9fS\91¨I\98\9bN\96¡P\92¦R\91¬Q\85­O\84¨U\85©S\9a\9cT\9a¢T\9a¡_ª§U¡§Z¢¬_\92¨l\94¤i\96¦f\9b f¨¨b¦r¶Âk¯Äa·¹h³¶r·²nº·pµ·\82¶±\7f«·{«¹u¤»w®»p¨¸e£¿a\9f¼]\9fÂ\\9cÈS¢½R£»Z\9b¯e\94¬h\8a°e\84£m\83¡\\87¢[}¢]{\9fV\88\9c\\86§R\82Â¥X\90©]\8f¨^\95¦]\89ª^\8fªS\8d\9cU\94\94M\98\9aH\98\9eS\9d©X§\9cO¡\9d[\9e£Y¨¤R¬¤U¶¦Z¸¡\´¨b¨®d¨¤Z¦¢Z\9e\8e]¤\87b§\8ab²\8fY­\99a«\9aW¨\89T³\91V³\89\§\83^¦\8e]¯\8cVª\94R\9d\8bT¡\8dW\9e\86V\9e\80X\9auI\93yK\98\86P\8d\84P\80\81\}\86[t\7f[z\86av~Uo\86Ot\90Xx\8afw\87fx\83kp\84gq\7flp\81j|v`sjbtfWwh\kck^dk]bpaahhjiimcdjedfdffcldkeYnmJjcL{UCzSG\86TO\81HKz<Au?B\80=D\85;G}DG\84GF\88E:\82N?\81R<\89GD\87DD\87>F\8cH=\91@;\8fA6\92<0\8c@6\8a?6\8462v9=~8:w:1r>7n>3xB8x:5pE2qD*tL,~U+wS'zO'\81\1\84^7\80b<\81g9\89ZD\85]L\85gJ\80eKxaLx^;zeJyeHnp>rjCvf;qkDwpErnJr~>}|Aw\7fF|{B\83xJ}vB\7fvQzrW\84qZ|tN\7f\83Mz\81Um~HltLkhSphPqaVj\Lp_SuYV~UUva]sabrZcr`]qf_te`idad_`ePfdXonPwv[wnZp\81\z\82]x~dy\88a~\87e~\91W\83\9bU\83\9dSr\95Lz\96Es\95Au\93=\7f\8c@\83\95H\85\99O\80\8e[w\92V{\91]r\86Yr\85Qm\87Iq\8aGz\91Du\8aIw\94J\83\99F\80\93I\85\9bB\8d\8f8\90\912\97\8f)\9e\85'\97\843\9a\8c-\8e\8d)\92\8a.\86\875\83\8d>\8c\8fF\96\99B\90¡A\94£:\92\9bA\86\9c8\84\98?\8d¢J\8b«V\93©P\8e\9fL\94 I\8d§L\84§H\86¯E\86¦G\88ªV\8e\9cT\9a\96P¡\9dY¤\9aZ\9a§d\96¨]\97Â¥f\94¢h\99¨p\9b©p¢¬p\9etµÅp¿Âj¼Çr´¶tȼe¸»r¶¸|½|¶¹z«»\7f°·{­Åe§Ài\9e»g\9fÆi\9d¿[\9e½U¡¶Z\91°e\93«^\8a³f\8d¬j\8c¨p\88­e\89¨d\82\98Z\88\9cf\86\95]~¦]\8f£\\8b©a\89­e\8b®^\93«V\91\9fN\99©J\8f¡R\97¡J\9a©X\98¨W¤«]\98¡M¨¥`¤¢Y¤¨Qµ¥T±¤_¯\9eX«\9f`¨\9eX®\90h¡\96g¤\97h±\94d¶\97\´\90U±\94P°\8fP©\8eJ¬\8fN©\91O®\85X¤\90S¯\8bOª\92W¡\82_¢\82]¢\85O¡\87T\9b}U\89\8a[\84\88a\83\85gwvbu\81bs\87U\81{\q\88S|\8bOz~Sv\84W\7f\82bpslv\83eixkmf[wieocgqjdrdk\WiWUkd^Y_khg^ggahZbh^eqafrebsiRxcOq^KsWLtWG\81KFtCEyBNy7E}3E\846L\7f<J\7fI8~?5\83?5\8e?@\8e79\8c>A\82A;\9077\91;6\9371\85</\9790\80>8}77s@0\817.rA-}B-{A5\85C9\82<&x9*tF!\87M)\83T zO'tZ-~V5\85XA\85XE\88cJ\87b=\8ddI}gC\80cA\80l?{eD{g<piGrdOtlLuoG|k<tiLsy@t{FwuE\83zNqrLvs?}zU}\7f[}\82Xx\82Oy}H|{Tf}Rn}OilQbcTjfKafMl_NmhSggYfcUnh_miofhjmec_kbZfi_VcgSgjNrkUnpSuv\nzSv\84\x\80`\86\85c\8b\8dY\8a\8d[\89\8dW\85\91W\84\8cM}\8bCy\8eCz\8eCs\89:y\8fF}\96Ey\98Oz\8dSn\98Wn\94R~\80Lq\83K~\83M{\83F\8a\8aF\86\94S}\96R\7f\8aL\85\9a@\8f\95:\90\905\91\904\8e\90/\93\85-\94\82*\95\91.\88\8f@\8a\8b6\8c\95@\92\97B\96\98N\8b ?\8eÂ¥2¡\9a9\93\9c@\93\9cD\87¨C\87ªE\88ªU\88\9eG\86Â¥J\95§C\89¡?\87¡C\8b¦T\90¦J\8c\97R\8e\99\¡\94S¬\9bYÂ¥\9fb\9e©c\8f ^\97ªj\99¬h ¢p\97ªv\9bt¹Ét½Ås¶Âp¸Æf³¼m¸½q¶ºvþp·ÅzºÇo²Ën¨¿l¬Èc\9e¿]\9fÇg\9a¾d\94¶b\9a¹Z\8a«a\8b«]\8c³f\92«b\86­i\80§e\81ª_\89\9bf\81\99g\86\99c\8f¤f\8b\9dg\8c\9f[\8dªY\94¢c\8e£d\90\9bY\93¤M\90£L\98¨\\9f©\\95±_¢´Z\9f¨[\98ªU\9f Q¡«[¬°]ª `¹¡T¹¤W°\98X´\92e«\94jµ\9e^¶\99XÀ\95U¸\92R¶\92R´\98T®\94O§\91G¤\93L­\89P¸\8eVµ\86\¨\81Z\9e\85V\98\88\¢\87[ \82\\92~X\8e{]\88\89^\86~`\82tc\84w`y~j\86\83b\83\82W\82\80W}\80YwzVtoipzmm}dmo`hgYxp`wjhqZjjZoeUj`Yf``Yg^]iV\eZlYUoX`y^izZazb_|_V~_Z}SVyMPpSKqONw:Q{:O\849J\88EK{?E\819A\8997\8905\8873\8a0)\883.\8c8<\8a19\81A7\87A:\88C4\94B7\8193\7f=7\847,\83:'\845,\81=4\8858\84:5\834'|;"w?(\83J%|T&vS+uQ'{\2\80X1\81RA\90QB\8da?\8c\3\80^8veA|l>wpCzc7p]HvfJzgP{nDtjHqs>m}>rzH}wHx\7fLywMvqJ~yX}\7fU~\81Hv\82Lj~FnsHkwOgwTfrWdjIkgNhjZicZmhYf`Yb^Rf]]`jj]kga\ncip\qehcqdVkjZwnOsuNwnMu{aovcx|[~\84_\87\85]\85\8aX\83\87N\85\8dJ\86\8eJu\82@t\8cIo\85Dw\80Gw\80?\84\82F\88\91K}\90T~\8das\87Sw\8cS\84\85W\8e\8dP\8a\83J\92\87J\8e\88T\88\89V\83\8bQ\8f\89@\96\8c?\93\957\9b\8e/\93\923\8f\8c(\96\89,\8b\95:\8a\96A\90\91F\8e\8e<\8c\99C\87\9cI\8f§D\9d¢8\9e©=\94¤<\96¦@\97 L\86Â¥N\8dªK\8e§K\8b\99J\8d£Q\85¨G\82¦S\8a¦P\8f\9fK\95 S\8f\9aX\90\8fQ¢\99T\95£^\96\98`\8f\97b\97\9fg\90¨o\94°y\8d®q\90tÊÄ\7f¿ÂvÄÂo½Ãl½½v¾ÇvºÆp¼¿z½Ã{ÀÃ}®Æm³Ìq¤Êm¨Ìc\98Ãc\9e¼r\9fÂv\97Äj\9e½c\88³l\8d´j\87®c\82Â¥b\84¡l\8b¡`\8a¨h\86\98o\87¡g\92\97k\87\98j\91¡^\88±V\82¦T\88Â¥S\93\9b`\9c¦R\91£Y\96§S\91®\\9b©U\97±d\9cª_\9d¤bª°Uª©e«©Y¬«\®\9f`²\9bZ©\98W³ ]³\9cY¶\92a²\95T³\92U±\96H»\9aW»\9aK±\90PÂ¥\8cU°\91S¬\97N¯\8dV«\8dT¡\85`\9c\82X\9d\89]¦\80R\94\89`\89\80d\90|\\97\80^\84\84\\83yV\83y`wx\xxV|sbt~S~wZ{uYmxctxbopendet]cqfjydcgbgkSjo^hhY^fbUacX^`T[^l\cl\gzZbz`e\84e_}^U|_\\80LX\80ONuKF\80PR{:V\809N\849E\82A?\84>?}@A\8083~5.|73\8c*-\8b*-\8f7*\8e,:\8847\8a/.\8e25\90;=\8a:*\8685\8cB/\846*\88?1\8559}06\7f8/v4,w@+zA\1e\80J/|H/vI#\82P2\83[:tZ>\81YB|S<\87g>\82^B\83d:vm5sk@xp7tp6qlEyj@ql@\82j?wo:qvAy}@{|@r\84@psNnwPwoTt\81Nn\80QoxPr\83KgqGl{E]}V[lW[v\kmRcpZki[jkTclZacU\_Xahg\hd\lhj[tipw\li\aha^fm_nkWomWxo[uxY\81|T|t\\85\82Q\8f\8b_~\90b|\91Rz\88O\87\88J|\86Ay\80@w\80Jt\84=wwD~\83I\7f\8bJ|\89[y\8cTy\83K\89\7fK\8b\85J\91\80L\8a\88J\85\94V\8d\88L\92\8dX\8e\86R\94\8eF¡\85@\92\98?\9f\978¢\8d;\94\93?\8f\8e3\98\88C\99\93@\8b\97@\90\92L\90\9bP\92\9dG\92\97H ¦:\97¢9\98©>\94©M\88Â¥E\8c¢W\86¤X\88\9fF\8a\9aC\8a¨?\82©H\94¨S\91 U\9b©Y\8d©N\94\9aV£\93V\9d\97O\9c\8f[¤\95\\96\99^\97¡f\9d¦q\9b\9do\99¢t\8dsȼzƽ}ÃÆxÂËpÊÅtÂÀpȁx¿ÅxÅÇ\7f¼ÄrÃÑu·Îw©Óz¤Ñq\9bÃk\9eÇw¤Éx\9fÃ|\9aÄr\90¼k\94­q\8cªn\89¤a\8c©m\92«g\97©f\99¨i\91\9fm\85\99m\85\9fe\8b\9c]\8aªW\86\9cS\85\9fO\92\9eX\95\9e^\9b\96]\8f\9eb\90¦Y\90«_\90¯e\9b§e\99°_§®i«²b°©Z¯¥^­\9e`¦¡\ª\9f\´\9a\¹\92R´\90Y¶\99P¯\94O´\9eS¼\9dL³\90Y³\93[®\91V«\8fX°\94M²\86P®\89P«\7fZ\9c\82W¤\83S\9e\86W wa\91yj\98ze\94}^\8ezV\8c{P\83}[\83tR{rW|r_vq^tudqxaet`cubiibnhgp]lj[lo^ja[_d\`ic`keSbdW_[b^_[a[^dYrV^pZ[v[btaa\80_`\81a`|UW~\YxQK|IV\7f?S\83:Jw9Lw<H\82>=\80=8}=,u<4}2/\8822\8b01\9013\8e4)\914/\89.&\935(\9071\942+\87=%\86<"\83:*\85+2z-2\82,,\7f3,\7f80x9$u9/zD(\7fF)\85F*\88E.|N5\82N3|R9~b@\88c9\86g6\82a:ze:zp1wi1}sA\81u?wwB~tA{v@z\80?|y?\80wE\7f\7fFw\84HqxEw\82Iv~NuzKl\83MdxEhvA`\80EdyIfoK[pY`wUesWZpW`qVZfTcdUa`\ZkaUq\alajimbdsj`}blzcdnn^ppb|i\vrb\84pb\83tc\89{V\81}R\87yR\85\88Q\89\89]\7f\92T\84\8dK~\8aUw\82N{\81Iw\88Cw~Hu\7fJs\82Km\85Tu\7fZ}}R\84{N\86|I\89|P\89\83O\8e\92K\8b\8fQ\8a\88Z\8e\8aR\95\89S\93\84S\9c\83G¢\90G\9d\93O\9d\8fG\9d\8c@\9c\8a=\97\84K\96\8dM\96\92H\90\91K\92\8dG\90\99R\9d\95U¤\9eF\9a§B\9a¢B\8c\9cQ\97Â¥O\92\99W\8e\9cT\91\9bJ\8d\9fH\84£L\89 D\94\9aJ\8e T\95¡U\94£R\9c\96P\9c\92P\9b\94O¤\8c_¢\9c]\97\9bh\9d\9ce£\9da\9f\9c^¤£j\97}ÃÃ{ÃÃŽy¾ÃxÈÂyƽuÃÄzÇÂmÉË{¿Êp¿ÈwÃÄnµÆx¶×s±Ëh\9fÃŒi­Ép­Ët¦Ês\9aÃ…j\9bÃm\93·h\97ºd\97¶g\8e·h\97µf\92®e\8eÂ¥m\93©e\8d¤g\86®m\8c«m\8c£e\82 _\8bÂ¥[\8eÂ¥b\98\99[\92 X\88\95c\87\9cX\98¤_\9a¡`\92\9fa¥§a¨£U°ªT­\9bV°\9a\§¨W£¤Y§\9a[º\9b^²\9eW½\95a²¢U³\95U¼\93M¹\95Z¸\8d^¸\92]¸\87c°\97Y­\8bS¯\8cG¨\91\¨\89Z\9b\87\©yX®\81X\95{[\8awh\8a{g\9a\81`\94u_\83x\\8cwc\8do\~lVzmWzv_wtYdm]jp\ht[^d\k_aigjoVusammdiu\ji[Xo^[p^^nOakUUfKjYOzXUw[YuV^|`drb[q`Ur`QrVWsPVyBMx@TsJKrB=xBAyDA\83;2z;-\81>1\7f4>\894:\8775\859#\8b7)\86>#\8c94\8e1+\91B*\90?*\839+\809"\8a71\8569y5;\80+9\81=,sC5\7fB's=.xD!}O.|G$zT.{R>~N5y[>\86Z.\86f<\8ee>~_-\82g4\84s3\80y9rs<nr?|z;vk<yq;ot?sr7zxJ\83tJouFktDpyIm|Eb\80G^yTbvOkwEauMX\7fNXoJ[|XcpRhmV`rQ[wXeq\`jYXf^[o\\`fWlm]cdghm_hoUl{g_xe\lp_lj`|f]tqa\85vV\80\80_\86\7f[\80~^\83\81\\82xO\81|Vx\82M}\83K\83\88N{\81C|\85M\80\80Bz\84SutHyzR{zN\80tS\80\83L\82~T\84\87R\86\85O\90~X\89\81Y\97\8dK\90\81R\93\81U\93{R¤\81J¢\91@\97\8d?\95\8dB\92\8f:\99\8b=\99\8cI\8c}D\90\81D\8e\87K\91\85@\8c\87H\94\91?\92\9dK¦ L\8e¡Q\8f«P\94¤N\98\98R\99\95N\96¡O\86¡Uy\94I\83\94U\8e\9bR\8e\9f_\97\99K\8c¢H\9d\9cP \9bJ\9c\9bT\99\9bT \9ch\98\91f\97\9fa\93\99`¡\9ak\9a®k\97\84¶Ì{½Î\83¾Å\89ÈÄ\82½Æx¿ÅtÌÀpοjÉÅmÈÈlÈÄm¶Îl²Ãh®Òb¬Ôm«Æh²È`©Ãl¡Åo\98¾r\99¸j\98Àp\8f»u\94¸p\9d±t\98®y\99­o\91ªr\84±n\88µj\85§l\84£b\87¡g\92«`\8b¢h\8f \\8b\9fW\85\96a\8a a\96¡T\9a§W\99\9f`\9f¦a­¢S¹¡Vµ\97Rª\9b]©¥^¤\9ba¯\92d¶\95d¶\9bb°\9c[±\9f]¶\9aQ¼\98Y»\99`¬\98`º\91a¶\8bZ·\89`­\8eNÂ¥\8aK¨\89RÂ¥\7fZ¡}S­{]®xd¤nd\93uW\96oY\91tZ\90nf\81m\\81q^\8aoY}heuncuuVqmXgm]eccedaclfla`i`qs`qu^kw[lvch}k^rbclTamQ\bJZfJllRpbMk_Ow\bmYWobUgdVm[Rq\YmOQsQE{GHzB8rG7m;8y:3\847/\82:.z@:uE=w90\8a8'\7fA,\80I\1f\87>"\8344\8cB+\8cD/\8d<3\857)\85;3\8b?3\8a=8{35y27\8299\80E6vC*zE!sH\1evJ vN&xT1yT;|]=\84[2\80U+\85Z3\83Z3\87j0\81p5\7fn6tq@ws>v|Dpu?soDmkFvj8zh8\80n9ufHmr@op;ksK_kL[vL]{NexN]rEb{HYyH[}J[|QcrVhvRdoMaxTkr[gjTbiVYcYUlfUjiYmp\`gQafUcvbjwddobSmdRviWxt\zq[v{_\80{Y\86~[\83zP\85vKvsIw\7fUu\82P\80|R\7f\80G\85|I}|J{zMy\80LyvQ\84xR~qcvtc\84\85R\81\85X\85{M\85\83G\8f\82P\92\88X\98\89N\8d\8aN\8f}L\9f\88A\9f\83C\9f\86?\98\83G\96\80=\93~=\8dx;\96~;\98zD\8a\83I\8a~<\8b\86>\92\8dH\94\92D¡\91P\98\9fQ\93\9aT\8f¤J\96\9dO\99\95V\8d\99N\8f\9dS\7f\9b[\88\96T\89\9eP\8d\99Z\88¦P\94¡H\96¤I\95\9aP \9bQ\9d¤X\97£Z\94\95`\90\9aZ\90\99Z\97©j\9c§m\9dv½ÊuÈÃxÇÊ\86ÅÈ\85ËÃ|ÄÃmÿuËÈkÂÊvÇÆh¹ÅqµÆo²Ãg²Ôi¥Îr³Êm¨Óf«Ìf¤»f\9b¸u¡Ål\96¹u\95µv¥·u¤®q£°q\96±i\9b·m\9a¬b\8a´s\87ªl\90ªw\8dªq\88£j\88§m\88£_\8e\99`\8b\9ca\91\9b]\95\9ff\9a\99Z¡\91f\9a\9ai¦¢_­ W¯\99f¯¦a²\9dX¶\98\¸\96X¾\92d®\9d^»\99^ª\94R°\96ZÃ\98T²\90Vº\92g²\8d\·\85b¸\80Y³\81T³\81J£{V |Z¡sV«zT²zX¡ue\93rY\98wT\90we\85om{dg\8eqf\8diZ\82gczndulOok[ql[maZf^big[`fdhc`gai|\jkcptSmqT_g^\rVaeTd`IYeIaYQwfFhdKng_uYPhVMn`ThZJhSUjSSlKEsXIrICqE<sH=y=;z73\7f7;\84HApD;vI9\82D.\84H-\83C\1f\86>*\87I*\87G)\8a>+\83C3\899!\83D+\83=1}E4\827.w;6\8a@=\8242u>2yD#oM\1cvR/vO5\83P-{\CzT8z`AyY6zXAzh/\85k8xq3\80rB{n=rz>px=i{Gqr;rv@tbCpg;yhLnlAmm:kg9on?jhA[t?U|FduH[zR^|FcqE\{UTtPXySgvTg}W^tXpm^aqVkk\^\Zde_Sad^`ldSgQZqZ`|aVufZwa`re\sgb\80u]xwc\81|p\7fx\}p\~pYtrH\82vGulUsvW\84tM\80rR\7foH|tP\84zH\85|Q\83|X\8clSvvinz[y\83S\82\82W\80{Z\8f~H\8e~R\90\86L\8b\89R\87\88L\8d\80F\9bv@\94}D\98{@¢wD\99\87A\9d\81=\88}<\94yB\8f\83J\95\84C\95u8\95\823\95\8fD\98\8c8\9a\9c@\9d\94I\9a\9dU\91¤T\98¡S\88\9aV\85\92N\85\91L~\8fN\83\9dX\87\98N~\97_\81\93S\95 K\9e O £T©¥O  ^\9a\9fU\9c\97b\8f£^\8c\9a[\90\9ck\93§a \85ÃÈzÈÄ|ÑÄ\86ÃÃyÖÙqÑÒtÚÆqÑÆmÇËxÃÆyµÂqºÅp¹Çu­Êg°Ôe®Óo±Óh­ÃqÂ¥Ãi¨¼m­¸s£Âp\9cÇx¤»u¥¹z¦³v\98³m\99¶b\97®f\98´s\9dµo\92®j\8b\9fv\8e\9cn\93\9fm\87\9ek\85¤b\89\98]\91 e\93\9ah\8e\99n\99\8ce¡\87f§\93d¢\9dgª\9aa¨\96[´ f¿\9e_º\9dX³\91^µ\95W¶\8cV±\90^®\90Y¸\91\93X½\8aXÂ\84aµ~^²{W¬\7fX²\81S«|M¨rX¬q[µwT¯sU§uc\95sX\9bj^\90jb\88bf\85_j\84ah\85i\\86^_~d^uiSgfWh`Mh\QhbWh^_c`_iYfxdiv_doXilTrsQilR`oMafP^^KcYKpdLoeIimSmdTf^QoZJr^AqdIcYBf]Ki[AnZ>~M<|N9sD0zI4{L;\83=:\87:4zE=zE>|N/\85D$\80K)vF"zN#zF1~D1\8aK'\8aD&\80D.\82D0\83G.\80;4x@0\8194wB7}>+\82K1vQ)tS2vZ2\86T9\89[:}U@{\?ydB{bA}l<|o6yr9}i>vsAmoDpsAoz=}w9|sAtpHufDmc>skHrqIpf<ff5gq7dy:ZvG]|HZ{U]~N`sS^qW]zNU}O^tXczVlr[mm[koVfdReaZ_e`Z\cTX[\Wb\ct[]v_[v_UzgXwp]ztg}ldx|jq}oqraqpbtsQunM|fH\82iKxvB{xG\86tF\8fmI\88tE\8crP\8fzL\90qW\85r[\7fz`wyXx{[\85}d\83|[\90\87Y\8d\87H\91\81C\89\86J\90\83I\96|N\93yR\9e}D\9b~H\9fxA¡\81@\95\826\94\89;\9e~>\97\80D\9duD\92tE\90y7\9a\7f?¦\8b<¢\93E\99\98N\95\94Y\88\96R\8c\9eQ\87\95Z\83\92]\84\88U\80\8eX\87\96J\81\95F\86\94S\85\90N\93\99V\9b\9aR\97¤M£¯U\9f©\¢£S\95\9bY\92\98\\8a c\90\9eZ\98\9e`¢\84ÃÕ\80ÎÕ\85Ã×{ÌÔqÓÔrÈËvÊÃzÑÇiÃÉm·Ãv·ÉpÃÂ}¿Êw´Ôm³Ùb­ÃkªÃ`ªÔm Îq¢Ãw­º{¡¿w®Ç}¥Ã\85¦¿w\99­u\93®i\98½h\92¿o\98¹h\8e¹l\98«s\90ªo\88\9as\8c\98y\82\98f\8a\95j\8f\8e[\8c\8f\\9b\9ad\9a\94h\99\98_¦\98jª\90n¤\98oÂ¥\9fcÂ¥\9ab«\9ce°\98hº¡f­\92q¬\97f®\8fl°\87Y¶\92^ª\94_¶\95fµ\8c]·}kµ\80`­\86X±\84Yµ\85W«uP«pV¯uM®hVÂ¥zYªvb r_\9aeY\90c^\91dl\87h^\8cfd\8andxp\\7fbcjj[k__lYVcdbhaThZXlZZpbde`mkUom__tNcuZcsOkiNgeZb]DjbCc_DjcKu[JqjMrfGlkCf`OgeOpcEj]QmX<j`>zP:\7fN>zO7sF.pM1}H;yF5vRBtQ6\81V4\84O1\82L)~T+}G!\80Q2|C9yA6|N,\82D4\87;,\8cA-\8eG4~B:x3-t4+s3.\82J$\81P.\80V3\80^'\84T5\8aa3|g6\80Z;wm?t`>wgAqg1\83kBuqGlxKekNiwAp\817pzGt{;pgCllGshEddEon9sb0lk1jy:XsFO|QRtST\80L`lUijPcyJZoZfyTex_jve[l\`hUseXjlUddUf]`iVcgSi`]gcUhg[yaau`[\7fnSso`|t^\80uh{zfzplknnrnZ|hWvwGymRxqP\83vN{}K\84kG~qL\81yM\8a|P\90|Y\92\82Z}uV|rXv\83U\85\83Q\86\85a\81\89]\87\81Y\90\7fL\92\86M\95\7fF\92\80P\89\7fP\96qI\93\80A\8fvJ\9a{J\9dw6\90w-\8at<\8eq>\97yH\9cq=\9cr<\91\84@\91~7\97|;\9d\87F\94\89L\97\94U\8e\93Z\8a\91O\8d\8a_\87\85X\84\85Wy\92U\7f\9aT\8c\92\~\92Sy\9a[\8b\9d[\94\99L£\9fT\97 S\9aªV¡ªV\9b¢R\9c\9dY\9a©[\8b¢\ ¢i©\85ÇÕ\87Ê×}ÉÃ}ÑÒ\80ÔÇsÃÈl×ÊqÑÃoÃÑn¾Ã\7fÃÃŽ~ÂÂpµÃq²Îq®Õ`¯Ã\¨Ùh¥ÕmªËw£Ãq­Ìv©¿~±Ç\81¨Â\8a\98·\84\96±z ¾u\9a¼m\97Âs\92·{\95±u\91¬k\90\9eo\8e¡l\84ªt\8b£l\93\95b\98\91\\9d\90^\9c\90i\9a\99g\98\9dk\97\97aÂ¥\98f¡\97j§\9ag£\90m©\96a«\99c·\94rµ\97r±\8ay»\8fpµ\85l¯\90d«\92g´\95c®\8b`´\80l½wfµ{Pº\82JÀ~I¼{G¯mS²kS°nQ¬tW¬sU¤nZ\91bY\8fg[\89rh\8dwe\85\7fe\87we|bdx^fm[`_eek^cn\fj``gfff[be[kjaid\\tR`rXZjU_oXZcYc\S_cAca>pbKmYSeaNk`GrhHnmGkjOabI_SRkTIyTDwU;qJDuB=yO2nK*uH.kN:jNHqPFkQ1tU-tU.\80J/vM0{N-\80Q2\83L6\87H2zH7zJ2\82</\8eG3\8aA-|69y36v/&z9&|A)}E0\85B7{P-~b6\87i6}b7\84iD\82m;xm<\80p3wp;\7fx@|rCyuDntGksEp};p\80:dqBbqGhgDcgJdk?^cAfh1nn9is:gmMSvQSnOZvTgkWcnRUiMUpXerWgzeXtaZrZjdUr_Zded_]^f`WjY_j\[[]gh`yhb{k[{_c\82oU\81mSys[swg|tf~tjolhtj_\81pQ\7frJ}xG\7fqQ\87kI\89vQ\85s[{n[\81\81^\90\82R\8d\7f^\88\82\\86\81c\88z`\82\85Uz\86Sz\88Q\7f\86[\85\8b^\89\84S\90\81T\88\83L\8axI\8bxH\88xG\8fv@\8e\80K\8fzD\99z>\94s2\8cp1\8dn;\95kD\9fhG\9br;\91\7f@\91x@\96w;\9d~E\92\80O\8c\88U\84\8ba\83\8b`\89}S\7f\8b[~\8aY|\94[z\90^\85\96Yy\8e_~\97Z\88\9eU\99¨V£«L\9b¢U\9a¡\\96¦^\92¨P\98°Q\99¦V\8dÂ¥V\9a\9bbÂ¥\89ÉÃ\87ÈÞ\81ÆÖ\81ÑÑyÕÈzÑÊtËÌpÉÃyÀÃsÀÃ\82½¿}ȀmºÃl©Ëb«Ãj¢Ún±Ãl®Þw¨Îw\9dÊ|¥Óz¦Ã}¨Ã\81¬Ã\83 ¿\80\9b®\85\95¶\81\90³v\93¯q\8a©\80\87\9fs\84«o\83\9cl\95\98h\8d¤s\85\95e\8e\9fa\9f\90b¢\9aW \95f\9c\9eiª\99d®\9aY¨\8ch¦\9cm©\8cl£\92l©\8em¨\92b±\93q­\83x¬\8aq±\7fu´\8cn·\80c´\8eg¦\86c±\80aº\83c¹\82[»y[Ã}TµsN¾xS¸wQ°uU¯|Q¯qN±tZ tX\95gW\96if\99rb\98{`\82}f\89tc|qf\7fhehehglZej^gc^nn_ok`nahja[afZcbWrfZe\[e]^`^`^ShYU\`KdfI_hHeiYqiKfhHi\DkgN_^>`aFaZ;q]@eWFtT?wK8lC5wL)qA/sG+zL2tM5wKJnO=vP7wZ7\87U8{L3zV9~G+\80O+\8bL+\81L2\85D-\8b::\8272\8aI1xB+x:7\7f=)z3.\81=&\80D)\85E-\84U+~_;\7f`0}f?\83fE\88q?\83e7}rC\7fkB\80p>xnMth>hl>tzGfnDck;heEjl9fe=kj@bd5Z`>jd5^o9]h;anNSyKRyFZsL[mN[uLbjXNiZbr_jybjnXXhUcbdm`bahg\U]ie[gVjback^fp_rp\{_^sXhzbYufPwpc}yevv_r}fym`qnayx]\80qWzrW\82eO\92lY\86vL\8ajP\8dyR\91tU\86\83_\8e\89d\88{`~yc\88\7fe}\86U\88\90V|\92^\85\8ea\85\8eU\94\85R\99\8fN\93\82D\8a\82B\8ewL\86q?\86p=\83xG\85\80;\8el4\91r,\89n2\91g>\9br=\8fiM\9crO\93}L\90w?\98rD\9a{>\92mT\8cqP\87ye\88\83V~y[\84\87\\89\80Z\80\8aX\86\8dY\8f\83e\84\8dY\88\96S\95\96[\97\98S\97ªQ\93«N\9c\9cW\94¡^\94¯Z\94¬Z\9a§S\99Â¥c\94\9c]¢\87×Ü\87ÃÔ\81Ã×\83ËÜ\82ÃÃyÉÊyÃÄzÑÆ\85ÊÄ~ÄÆuËÌ|ÀÈq°ÈjªÓq¤Õm¦Öo¦Øh«Ûi¥ßs\9eÔ\83\9eÃ\81\9fÇ\7f\9eÄ\83¤Ã\86©¹\86\9c»\80\93Ã\82\8f·\83\98­{\92£\82\8a\96z\83\9am\80\9di\8d\94a\88\93h\8d\98a\99\8db\98\91X\9c\90_\9f\9a`\9c\94cª\97^µ\9d[®\91Y²\95_«\8eg©\95p§\92m«\81rª\80r±\8ax·\83q·|s´\85q±}p¯\82v°|r±\83k¹\81e³\81d³~U¼vX»nP¹qS³}Q¸wK¼tS±wa«v_©w[¡pb\93pZ\9cl`\93ra\89xj\83rk\85k_}nbzcagadhagelbokbrf]robii[mkXfk\`f^imako[`d_Zffe^chUahFbbGjjNplJiaIgZMcZJ`hK`g@`_:iU5nN7lJ;rD4lB+iC1iD0xR6wS0uP:yU<\81[2}Y4xM4\82N=~S;\80T;\8eQ;\8dK/\94G/\90I+\92D9\87;7}G:}A7xB2\83<,\868.\7f='\84@1\87H3\81J>\8aX7\89\;}e;\82j:\83k@\7fe5~l7ti3zj;ycIukGue>npBruAlp?sb:l^@hW7d_9]]:bd;fd=_d;d_AY`GcmN]mJcnF`vBcwQ\lO`m[TrbVve^rbfl^feamgkicnjXjj^hi_jmdfxjru`ln\mmWvbZq`^nd\}fX{dR\85rZ\80qlwwpz|kwqdwwa{qW\85qX\86gZ\8bdO\84mO\8ctQ\89sZ\92xW\92\86c\87\8ad\86\7fa\83\87]z\88_\82\87a\83\92_\8a\96_\88\89W\86\88R\8c\90P\94\95F\92\88<\91\889\8ey>\8c{J\92vD\87u9\8cu5\88k1\88l7\95k>\94i>\92cD\9alD\9eoE\93oM\97tA\9csE\9ahL\97iJ\8eoP\8bs\\8dxV\8dwX\84~R\83~[\89w_\88}c\8c\80W\92\8bW\89\8aW\8b\8fS\9a\9fX\97¡R\97Â¥Y\9e ^\98¤\\90¯V\92¦_\90¤[\96¢^\8fª_\97\8aÛâ\81ÙÎ\89ÃÃ|ÓÜ{ÃŽÃŒpÊÌzÆÑsÃŽÃ\82ÊÄvÃÃ|ÃÈ\85ËÓv»Ös´Øx³ÜnªÛt®Ôl¯×y£Ú}\9aÃ\84ªÓ\82\9eÃ\8d\9e¿\82§¿\84\95¸\93\94º\87\9aª\7f\97¬\80\91¯\8a\8b¤\81\90¨\86\90\9br\88 n\8f\8cx\90\95i\8b\94j\95\8cq\98\85d \9bl\9d\9di¤\97b©\9ak¬\90l®\8eh¦\8cb \83l¡\89w®\93t²\90u¯\83m¯\88o­\88pª}o©{q¶|o´\80s­\7fq¨um®pl­qd´|c¹|X¯v[®nO»sU°}S»rV¸|c¦ybÂ¥yf\97sd\8coi\96od\97ej\82pf\83kd\84d`~ekochnfadc\kmbge[sfgpiad`\igW`dbfnW^pUjf_bddbciiS]gJ`nDadNclJ]_OddN\YBX`BZ_JanH`^>kWFbZCpF8mD2uR;f?6fK+jP)~K8qO3vP9zK0\82X,zR3\83U7\86I?\81L.\83O%\8fL(\8fB2\8cI/\8a=/\81;4\7f47}39\8aD/\8a9(\83@ yJ%|P$\83L3\89O5\7fX(\88V*\84`9u[?~_9\83d1\83u.{p=zl?wp@moHloEoe9uj;snImt6_d5fh4]h5ca5[`6\_1a`9YlBVe?ZcOSsEbjM^vC]pHakYckQ[h^[kWloWorXkg_chggeflineffrZjcdieimz[rm_nk]~qU{sYurUti]xqc\7fnW|mexvmyoet~^smi\85he\89o_\8bjY\8cm\\8atQ\86lR\86i]\93xW\85\89f\87\85V}vd\8a}W\82\8ea\81\84T\8c\89^\8d\82M\8b\8eY\81\90E\89\88A\90\88A\89\81A\89}@\8c\83F\82w?\86qDzsC\89q:\86f7\96o,\92k4\9ck<\8do;\9fr7\9cwJ\8fwD\8dvM\94m?\9dwB\8dxG\91mN\8fsa\95yR\8c|S\8d~V\90vQ\8d~Z\95\84\\8c\8d\\90\92S\94\89S\91\8dN\94\9fH¢\9bW\9d\97O\96ª_¡\9e_\98ªZ\8d§W\9b V¡¥V\9b X¦sÛÒxÃÕ\82ÙÃ\7fÊÃ\81ÃÃvÌÌzÚÃvÖÉwÑÃzÃØwÑÓ\81ÊÔwÈÃw½Îy¶Òn«Õx­Ìq©Ër¬Ö|¡×{«Ê\84ªÈ\8c£¿\89\9eµ\88¢¸\8e\95´\94\95¨\88\92¦\85\86°\89\7f¬\83\89ª\8d\8c \88\89\91w\96\93y\97\91y\98\91\7f\99\95v\90\8ap¢\93r¦\98s²\94i¬\90k¢\8bn§\8eo§\8es\9f\86v«\86u¨\92w·\91g´\85t·}o­\82m¶zl­\7fi§~v¨yw¡|p¨mpÂ¥hb«ohµli®u[¸dY±bg¸kc®ub¹xa´vb£ta\9em]\8cod\85sg\86jh\8ebs\8a\nwfj\80llyjl{oivcdviXk]emRblXbkYbd^Z]ecblbgtU`nVabhe[iq]bmR`lZ_oQ[pM]_LT_J\]A]i6Wf<Yj?_j?[j=^\E`\NiLEsG>oS9jB2rA#vM0uR.uO)|O1\86U.\80Q+zP.yP=\82U6}N'|M-\8aG&\8bD'\88=2\8bE;\89?6\884)\836-\8dB.\8d?+\8bC,|K$vL$|R)yZ\1d\80S!\81P-~\2}Z-v`+\80c+yl2}p<su<he;fb>cd5mh6rj=ntAbo?`l;Y`.Y`0\f1[].[X0b`4cf9_iG`fOZoJ_nFckJmsMfqUci]gd_ieUrk\ig_pqdpummggkgtlessgphadkgjmenw]qtZ~xZ}uWynW{kX\80tUzr`xii|mf\87ym\83{bzp]\8clf\8fs]\90i^\7fq]zqL\85nW\83pP\83{Z\84|Y\81}U\81xU\84wU\81\85T\8b\81\\81|R\82\80P\86\85K\89\8b@\87\87B|\828\80\898}\87>\85\84F\82vB~uH|u;xj0\83d0\8bi'\97j;\94hA\94r=\8fu;\99y@\98t@\8evE\86p@\8euN\8cxO\8at\\93xZ\8cxS\93\80P\9a\82F¢}M\99\8cL\92\8d\\98\92Q\91\8eV\93\8bM\9a\97M\9d\94U\94\91P\9a\92T\96£N ¨S\9a\9f`\97¡Z\9b§Z ¤^¢\99\¤\86ÒÙ\85ØØ\82ÖÒzËÕsÃÃ’pÃ’ÃŽqÎË{ØÃ\80Ã’ÃŽy×à\82Òß\88ÃÃŽzÊÙ|ÉÃo³Ëxƒx¬×o±ÆzµÆx±É~¨Ì\8c¨¹\80¨¾\87\99³\8f¢¸\8e\90²\88\94¨~\94Â¥\80\89¤\83~®\81\8f¡\89\8fÂ¥\80\91\95\80\98\96|\9d\8bv\91\95v\97\96y\8d\87s\93\8er¤\8czª\95o±\96w¯\82i«\8ct\9d\85}£\82s¨\88x®\8by°\8dh»\85r³\88f¢\81k¯\83tªvj¬tq¤vlªjp\9brt§hg©onªke©jc«mZªhY¤jk\9fq_¡hl³y_ f`\98gj\93pg\8ekh\84m]\83hf\8ads\82gpzdqvceyfb{a^u]Sg]S]PYh\a[]\e^cdml_sXjgbpahhabs\asYXoJXsGXfNVfN`lPZh=U`GTeEZcET\CSh=]g<]X@^\GfYHoM?j[=qW4vD(lB/rI1rP$~Q3sL6\7fL)\7fR6|R=xO1|R.\8aE(\8fC'\84N/\8b@*\9284\88=2~C+\82:5\8c:,\90F1\8c\83W#\89L#~U\1e|Y*\82U\1d\7f[+\83]0\7fZ#{a/sd-ps9vk5s}3cu5``0nl*ln.pk-`s9]p>er=bd5ba([m.dd,gk+hf:ar<Xt>XrKZiO_oHbnLduDooLmr]ig]xbcnqalhiqnjn]ivdfqcstmnv]nj`hgWjee{q\vuM\81vR\7fuave[|qg\7foa}vb\7foi\88ik\84qh\83qgykj\81yg\83m\\92ej\88oY\82mV\90cM\7foL\7fkP\85}_\82\7fQ\89yP\8d\7fX\83~Y\88\86^\90uW\86\80U\84\82G\83\81BzwA\83\88I\82\83Auz?yxE\7fr?yqJ\87n:{t+{j(\84s#\99b2\96k;\89f>\93w5\92zC\88zH\91pI\93tH\87jS\8as[\8cyL\96qZ\8f~M\96uN\94zZ\93|F¡\8bL¤\86[\9f\8eK\99~H\9b\8bO\9a\92D¢\8cJ\9c\8bT\99\94J¤\98D\9e\8fY£\9dV\94£^\98\9aXÂ¥\99^\99\9dc¤\80ÃÃœ\80×Ò\82Ã×yÓÔyÕÖzÜÕwÖÚtÕÞtÛÕyÑÜtÃŽÃ\80ÃÔ{ÊÓoÈÊo¹Òs´Ìp³Õt½Î|½Ò\83¶É\7f¹Ã\8b±\88§«\8b\9d®~\9f®~\97³|\8a­\81\89©~\91 \86\8c¤\88\8c\9d\8c\8b¡\87\86\98~\91\9c{\8d\99z\9a\88\7f\93\8c\83\95\93\87\9c\9b|£\91s¢\89vª\8cm¤\84m¢\80p\9d\86w¦\8bxª\91y­\8an­\7ft±\84i¤\7fb§\84eªtp©qp«ij\9ejr\98ro\9foo¦to¦ps\98cj\9a`m¡be¢^lÂ¥ae\9b`d¨op¤tf¦k`\9cci\8dm`\8bgb\8ab^\88gl\82hh\80kpydf|g`|bbrg[a^X^UZbU\]VdY__Yjgbtd^oifgendim]aobed^YgO`cQUkM[eDUlCRdGS`ET[IQXGWZNQbLJgIT]<a`AaV?eS<p\3pS(mN+uK.mJ#qJ%zK(pJ+vS6zZ6rT4w[/~T6\84V3\84K'\84O\1d\8fG$\86>*\87>&\81?/\82@,\80D.\87N*\8bI\1f\8bU\e\8eJ\14\85M\1euL&tS)w`&v_$qi'pf*zj0rj/fk.ku)`s,dm)jr,br#bl1_u1hp3_g5`k1[g,\d1\q$]k-cp/hv<`m=[oGfoFdqLngJtqGioIlhKukX|oSrn^qbg~^ruapv_sv^uzhwvfoubwsb\85lX\83tW\82tP\7fvY{i^vdhwgjw`brjewmf\8akq\8cqz\8eos\81jd\8cuc\87qh\93hf\91h]\88dV\8abV\82bV\83eW\84saype\81xW\88\84a\81\80Z\8ave\85|^\8avX\86wS\83rG\8bsK\81v@~\80Cu~=|z?\85~:\8cs=\83o7\88q0\83k0\8dm+\94n:\8eh;\8ac=\86o=\8co:\93pH\8bmO\8frH\8cgR\8bmV\93oL\9cnR\97zO\9e{Z\97x\\9c\85O¢\85Iª{M¢\81I\9f\7fK\95\8aP\9e\90J\95\8cF \8fK\9b\87O\9c\8bI\9c\92T\96\90W\9b\97Y\9f\95b¡\9bc¢\9d[\9e\89ÃØ\86âÞ{ÃÙ\7fÃ’Ã’}ÃÚzÛàsÃäzÃçvÎä{ÃßyÃÑ~ÒÙzÃÃŽvÌÅoÄÎxµÖs³ÊxÃÃ~­Â\93­¾\8a¶´\89¨·\80£«\85¦­|\98¨\84\96¯\86\89¯|\8d\9f\7f\85\9c}\87©\8c\94\9c\90\8b\99\7f\89\9a{\8a\9c\82\8e\86s\9e}\83\99\83}\9b\86\81\9c\8f\84\9f\91t\9e\94}°\92q¦\88r¨\83kÂ¥\89oª\8bk¬\8au±\85i°\86o²\82i¤\8bc¦\83j\9fqs£rq\9boh\93og£ja\98kk\98qy¤oc¡hb¡i[£Zh\9aY^¦cd\9dgn\9eqg\9eoo¡uf\97lc\88h^\84ec~gc\8c^e\89jr\89ik\86mkuqjmeelnXod\`NPhUPXRZbYU`lYal^lmbjfbncXbeWn^`jQYgQ\vHKnQQnJPh>Xq?JiSQeO[aCVdHVkHT\GPe>`[CZ`CiX@mb1gY,l[#oV"sV"iH\1dzG\1fqN0vV-qK)uU3uQ6\86P*\87P)\89V/\81K%\86Q!\87B!\87=*\8f?/\8bI)\81C&\86P+\86P"\8eQ\1c\81Q\1d\87R\17\86K'~Y-uW)xa$qa+ej"l_+qm8od)me1ip-_r&_k"cq0[m,]m-Vh2dh>Vl&[]0Rf'Qd&Zl+dv4cp@]jDek:fhGadCfnJjfL\rJsjUll_liYyha{do}mh{e}u`up[xrdn}curczzU\81lP\88xU\85}K{wW\86g_\80neufspeg~okwok\82ju\89cm\8fsk\90fi\80tc\83pb\8epk\8ccY\8c`R\8fb\\88dO\7flX\83o_xjU\88pT\90{V\89\86Z\8a|X\84xZ\7fuM\85lL\82}QxxMwsBss?|vC~tE~rE\81tC\84p<\81v9\87e+\80v%\83j5\8fqB\84mJ\91qH\87kL\92vH\80qC\89sB\81uQ\8eyK\9d}T\9a~V\97r[\9ap`¡\84M\9a\87R®\81WÂ¥vG\9b\83I \8aQ\90\81V\91\89J\9d\88K¢\83W\93\8aW\9d\8dV\9e\8aQ\9d\92a\9f\96a§\91c£\90]¡©W\94\8aÃé|ÛÛzÛÃyØÃxÖÒ|ÃãyÙêwÕä\86ØÓ\87ÉÑ\86ÆË\82ÉÌ\7fÃÔ\81Ã’ÃwÆÒw¼Õz½Ãx¸É\8cºÃ\91ªÀ\94§¼\85®º\82¥¬\7fǬ\8b\99£\88\91Â¥\86\83ª}\83£\88\8b\9a\84\8a\9f\84\87\90\8b\93\8e\86\94\90\89\94\96|\8d\87y\97\80w¤}\84¢\88\8a¤\8d\81¡\90z\9b\8dr¤\8dy§\84r£\85t§\7fq¤\86i \88n¬\88l¤\8ai©\89f®\8aq«~p\9cvh\95il\94sm\95ti\9dna\9dib\99pq¡fc\9ag`\9egc¡\`\99Ud\9eXe jpªnnÂ¥md\9aei\99l`\8eld\7fnozmm\7fbt\82iw\87qyzlrtmdrrgkg]l]^nXQiQQ\YXe_[kebea^hldcoXhdScd]fYXpYYpYUrUIvEMpH[qFMrOMtOUdOY]@RdCUfISeH]`:Tg@Z]9Vb6Xb:g^4p`#nU+jT$kS*jM\1erU$yM'\81Q2zL-~V&}[+za.\81\-\80\'\8a\93?(\8d=*\8eD-\8bI,\84D1\8dN*\8eH#\85R'\8cK#\86N\14\7fO\19\81P${R\1cuQ\1fi\&i]*j_._h/fk(^e'di*ai(Tc/Ra0Pf5Vc4Ql<Ze5`g3U`&O`*Vc.]e-^n8_l5Wv9]n=^h<im:dkIegU_tR^lQmgWvYcq\_qibukmqrzvg\81}Z|zVsu_{l^\83va\80|T\84~V\8byM\82kU\8ahZ\86hc\83ilwil|qc\80ftyaw\82dm\8cki\90di\86hm~ka\86g`\87k_\86`]\89nY}lM|iYxjT}sO\83jQ\8bsa\87\83f\8exc\83oT}nI}oKq{Kh{ToyJ{lHyuB\7fp>|l?ys>um?~l@}p2xm(\83t2\80sA\8euE\85nN\8atH\89zK\86|K\89zJ\82\81B\90}G\9bxK\98\83Y\95\84[\96uY\9bxT\9e|S©yJ£xL\9f\82L\98\87V\98\84N\9e\8eM¤\84Q\9d\86U\9b\81U \89V¨\92b©\91\§\96_¬\89S¢\96K\95£S\99\80Þá~Öæ{Ãß~Ã’ÃŒxÊÖ\86ÖØ\80ËêxÚê}Ôç\81ÈÙ\89ÃÃ\80Ã’ÃŽ|ÇÇ\88ÆÇzÇÃwÄØ\81·Ì\89³Ò\87²Â\86¯¾\8c©µ\7f¼\8c±­|¦¥\7f©«\7f\97\9bz\8d£x\8b\96\81\92\90\84\86\91\84\94\8a\8c\96\8f\8f\89\8b\89\94\99\88\98\88\85\9a\84\84\94\7f\85\9a\86w \8e\84¤\8b\83\98\86u\9b\82t \83t \81x¤\88y\97yn§\84x¬\83u\99\81u\96\84u¢tw\9e|l\9epe\96nf\9bii\94mn\9dbk\9dak\99i`ªadÂ¥`d¨`^\9bYg§bc¢[k§pv\9bfo\98er\94mn\92oh\85pi~px\81pzvus}kxzu{~qo{bjqfkec\maas]W`aJ[UPa]VidYh`XfaV`^VbY^jV\laTdXPp]LvFFsKF~IRrCYyLUvPUq=^_8TlAS]CN]IWhGM^4_c;Ma0Sb9X`&f[*m^*n\&iS'jL\1csU\1aoV\1eyQ)vX"\7f\84`\1e{^"zd/z\*\8aS\1d\88G(\88K#\86I+\96R#\92L(\8eU%\83Z)\89N(}U'\89R\19\87P#wT\15\7fU\1f|Z\19pW+fZ&`j0]l)X[$U`)Um.ed2_c<Zb=Mc1Vb2Ok1Yf0Pi2[]-]a"b\/Un2]n?[j3^gHag6Zj8Wu:TpJgjO[nI_jRnleb`]ibhkZgx^tuc{xm}vZ}rTmkY\80kW\81zV\88uZvqU~vU\84v[yqT\84i^~ljxrg{up\81ql\86lq\83dm\82\d\8ekq}eo\8akn~gf\85h\\85h`\8bd[}`O\81gQ{hZzc\\8an_\81wU|yc\8dn]\89yTzwKwsTswLh~UiwHmaVscLn`@pcIkp=zqBmk?}i0th+|u=\8amD\88yF\92xR\90vP\8apQ\8bsE\8auK\87\82S\94~M\92\83V\9a\87[\9dv[\98}X\98\80S\9evY§}P£vT\9ez[\9f\81P\93\88N©\8bJ£\8dT­~Q¦\89U¢\8dTª\84Y \89Q­\8eNÂ¥\88F©\97R\9e\95O¦\80äâ}ØàvÃäyÖÖ\86Ãß\81ÃŽÃœ\84Ãç~Ãá\87Îã\88Óä\8aÔÞ\82ÖÔ\85ÕÓ\8cÈÌ\85ÊÕ\83ÉÃ\85ÄÊ\90µÒ\93·Ç\8c¬Ã\8aµ·\84°ª\83µ¬\85¨¤\88¨§\83\9d\9e}\94 }\90\94s\8a\97z\8c\8e\83\86\8c\8a\89\90\83\92\87\8b\89\8a\8a\93\87\85\8f\86w\94\8ez\9e\89~Â¥\89\81¡}x\9eyz\9a\7fu\9a~w\97\82r\94{s\90wx\9c\83q\9d\80r tv\94tx\95nr\9dup\96os\9bks\9agf\91jj\8eal\9b]j¨a_£db jg¢cm¢Zm¤]u\9ahn jy¤et\9afm\97fr\8ckl\87kt\83m~\80l|vw~sur~nmzkup\rj[dn_[lcVle[mbTj_OpWVh_S_dZg]ZcbS_XJi`Qj\YeWWfPLsGLwMO~EK\80AZ\82C[yIYjM_f?blLXeJUePLfEOlERj5Tp3Rg)\k1c`,of,lb(b]!bQ)oO rN\18s[\11zV\e\80U\18\82a\1etW#v]&\7fR\1d~K%\81E&\85L$\8dX\1e\8fT$\8eM/\8dL*\95N#\8bY&\8d`)\7fa\1cz_\esS\15vM\1cuW\1eo`!ed&\`'Yc&aa%Y_&V\2Yf7Yi?Z]>[i>Uf2Uh/Qd.Yg-`\)h^&bf&Zf*Vh5]c@XfETn;SsARgFUl;bo=hfJhb]_kaXk^b^drWmtasuc\80sj|hi~kWtiT\81rX\7frS\83wPwwV{z\}{\|s^yjevqf\80zg\89rk\8cth\93lj\88dc\83^i\7fec\82bh\86kl\84ja\83eT}fW\81d[\85[Q\80_I\82`P\85pYwp]yme}s`~lV{qO{|PmuPlwTltOrfNy`YrXYm_NghMri=qb3tc3qg2\81h7\81s?\89pJ\8dsP\8evK\8etG\95oE\95tR\8a}Q\88zH\98\80H\98}N\91\84O\9b\7fL\99\7fN \83Q¤v\£v`©wZ\9dzP\9d\88N\9d\92E¢\8bF«\8cF®\85N­\88UÂ¥\83P£\7fM£\88O¡\93H¤\98J¡\9fO\9e\98V§\80éÃxàè\85Ü×}ÜÞxÙÞ}Öã\80Ôà|Ãà{×Ü\83Ñß\7fÞÑ~ÒÇ\81ØÔ\88ÑÓ}ÓÓ}ÑÌ\81¾Å\84¼¿\84®È\94§À\89¨¹\83««x«\9e~¤¤}¦¥\86\9e£|\9e\9a\81\8b\9b\83\96\96\87\90\92\83\95\86\84\84\8c\7f\82\93}\86\90\8c\86\88\8a\96\8f~\99\80\81\93{}\99\81\81\9d\83\80\99\80v\96\7f|\98\82{ \83s\91zt\99uu¡\80w¢\80l\91pq\94sy\95po\91|o vd\9fdg\98_i\95_e\9ehs\97Zb\9a_e\98fj\9af`¢\h\97_e\98Ve£hj dr\95Zv\99[z\98aq\85gs\84cqznpxnxrukztx}rhymkmVllVjj[Zh_a`\Xla]g_Rq[VqaRfa_c`[lZ^oNOjPZ`KYaNVsCWrELxNQtNE}@PyEbn:]c<biHa^:Z^BXhIMl9Mk;Nl*Ri%Tg$_[)a_,kV\1fmb+jX \R(aO'oW\17{M\17}N\1cyY\1f{P\1fxY\1d|Z2\83V\1f\81U$\81C"~B,\81M#\8bJ\1d\89S)~T)|M%~[%ug\1avg\1dnT\1azU\1dnQ\1dmZ\18i`%mb\17aj"Pk4Yi3[\1^k4VhD_b:h[5[e6Yo7Uf;Vg+da-fk2`o3Wi4at/`eDWt@foNQw=NsCSs:WbGafRpoW`eRZbgY^e]Wjmmfsoxnj\80om{iqvhfuj_~|eupX~sWtxZs{g}~Z\80s]\84{a\80t_\8bwm\8btd\87mq\7fnl\88fo\89fl\88ap\80`l\8fif\80h_\89qZ\7fbU\90jN\8b]G\7f_Vx_X\83gXyo_{k[~q^\81vZ\83lV|qQ~tMypQs{\jpXlcYpmPugNr_?yh>|`<qa9\7fd;}d9zjB\85xQ\83iG\92pO\8czH\98tW\90sT\95|Q\8cxT\96}N\99~F\9b\88O\94\84P\9b\84]¡yb«w^£vg§}]\9c}T\9e\83W\9b|S\9f\89V£\80MÂ¥\83J¶\84S®\87T£\86X¢\88P \8dQ®\88W¦\93J§\92[ uÃÚzæà\88Üä\84Ùâ\83ßÚ\82ØÞ{ÓßtÛÙqàÜ}ÕÜyàÊ{ÙÇ\7fÓÌ\89ÓÔ\86ÃËvÉÃrÅ¿\7f·½\8b·Ã\96­¹\94­®\81¦¬\84¯©x±\9a}«\9d~ \9b\83\97\96\8b\92\99\8c\8f\98\8a\95\8c\8a\89\89\87\8d\87\85\8c\8f\7f\8a\89\85\8d\80\87\96\88\89\91\86\84\93x\80¡}|§\85}£\86}\95v\83\99\85\7f¦\88\8bÂ¥\7f\86\99tx\9as{\9fs}\9dqm\95zl\97sv\94ui\98ha£fe\9agj\9c_n£Zh\9bfd\9b`i\9ace\91dj\94Ub\91Qa\9c^h¡bj\9aZi Wq\9baz\95Ur\89Zv\84^l\7fklrmlvclyft~hlx^bsa`nfimZkqc`e\]gRahOWlTWqaVjXTnTWuK[rJadGYbD\l<QtESqMMyDE\81AMyMQk@[e;]^<^aJ^]HSW8Zc;Pj:Pk1Il(Uk)eX$^X#hV$c]%`[#fS#dP\1daL&kW!j^\16vW\ f\83\84P\1f\83`-s^0\80U,\89M$\82G\1ezG'xC\1e\86M%|N-xN,}R#pY\17pe\1ekf"jc\13wW\14iX\11iS\18kZ\15cd\19_j(Nd4Wf9Qe-ae5bj@f`@db<egC]rAbk9V_8fd=fr:Ys7]o0_j8YpH]hEbqISsHTq@]kCXhNggRfgR]]Sd`]Z\Y]`d\kgdtvrr|{xzvvykovvft|axtazzWw}exva\84ti\80{c~\85^\85\7f]\8cui\8cxf\89ml\8bdl\80_s{dm\85ib\7fhd\86i^\81nY\85qU\8fiI\91jH\83gN~nM\87dN\7fiO}iS\87rX}ob\80y^\85uX\88xY\7fpUzqZ{v]or^ln[xc[~eXrhPsb=}]B\7fhA\87`?\89e>|gDysI\81vB\8djI\8byN\91~Y\93yW\9ewM\99\82V\8d\80N\89\81J\87\8eT\8c\8c\\97~_¡|`¢\83h¤\8ag¢\86[¦\84]\98|Y\98zS\9b\80[ \89K¡\8fK°\80R­\81P\9e\7fU£\8aV¬\8c\¤\85S¨\89L¨\8eV\9b\84Þé\87æì\83Úí\84Ùâ\86Ùè\80åâ\7fâãqÙãvÛÓ\84Ñ×uÓÓ\82ÚÃ\81ÃÇ\8eÓÃ{ØÌoÈÃwÂÃ}¿¹\8d°¶\90¯º\8e³±\8e\9f­y«©\7f³\99zǤz\9f¢\81\9a\9c\83\8b\99\8c\8a\9a\8a\9d\97\8b\91\92\8a\93\86\7f\84\8c\85\94\86\82\98|\8d\93\81\82\99|\8a\8f|\80\98u\88\9d\86\89Â¥\7fz\9b}\88\9f~\81¡\83~\9f\80\8b\9dp\85£z|£lv¡rl\8exs\92hz¡pl\99``\9eXhÂ¥Xo£bo¡_u\98Uh\95dg\9aYf\8fQm\95Rc\98Rf§Pg\98Rm¡Ji\95Ty\8dav\8dS\80\80Vkvct|auyjtpjjp\u~Vkrbjlgke`mk]paer[ZbcVhhOZeNczVapZWlN\wKgkRYpCcgJVpLZj?]q=OzAWnGL}CUg@W_8bg;Sf@\]CXX?He=Qe;Kh3Vl1Z[+aU&eV&_d\16_X\17\_\ecW\17bY\14qS\1ezO\1a\7fW\1d\7f^\16yS\11}P\1d\87S\1auX-z\\1e\85K%zO\18\85C"\83R&|Z yN\1f~W'oT&uR\1ffY"fg\19lc\17x]\1diS\12lZ\16he\17hg\18Wc+Jg)Oe9`Y1eb2Zd?a`=jjC_s7amFZh8cm;^m3k|3Yv4]|0Xn7VrIYmLcfB\pDad:TlM_^CZhG]cS_dYgfPgf^]kmalrhxzuwo{xvxttqm}pf\84xc\84wfxvV|x\xya\83pg\8awd\88yd\82\80W\89\7fk\93lj\88ci\92kg\8beo\80bt\8din\90\j\8dh_\96db\93cQ\88dD\88bP\8bfH|eR\86gKzmS~p]\8cxc\8ag`\88kX\8dr[\8ct[\80sX\86mR~mWzncthYud_waRvkGrgA~nJxm=\86m;\88m7\82mC\88tC\84gO\87mI\8doP\8etV\9bsL\92\80W\9c{K\93\87]\9a\82X\8e\82S\87\8a[\8f\84[\98\86`Â¥\85^©\89a«\7fZ©z^¢\89`\99\84T \83T \81Wª\8dF­\8cR¢\80P¤\8bV¯\89X±\89Z\9f\8aZ\9d\8aZ\9f\90Y\96\8eëì\8eâî\96êä\8fçç\8aëÞ\86åÛ\82ÜÚxÃÃtàÚ|×ÃzÓÓ\84ÙÇ\8bÓÃ\81ÃÊ\86ÚÇyÃ’ÃŽ\86ÇÃ\86ÈÂ\85ÇÅ\8c¸¿\83¸Ã\89©±\85ª§z©¤\83 ¯\83\92­\89\89§\8c\8f¢\8a\96ª\93\94¢\96\8a\9a\87\88\8e\86\8a\8c\7f\91\7f\80\92x\85 }{¢{\82\9c|\87¤\7f\88£}\7f¬~\83ª{\8d¢\7f\8e£{\86ªn\88­p{«w~£v\83\98f|\98fs\97_l\9fdk£`c [k\99cf [l\98Op\9fSt\99Nm\8aSu\93Ln\94Mp\98Lg¡P^\98Cf\9bGv\90Rx\8aS|\86W|\84Svt\uobnsawpckqcfvUilSombti]uidokes`_he_ihMllKdsSfq^]sYh|NdsM`hM_f?baAbeJcuKZwD\nBRrBRp:Wa>Ue;V]9IY=MV:HSBN_>VY<T]0U]$TX#b_"e`\16d^\11i\\1dq]\19oS\1cpU\12|O\16\80S\15}`\10\82b\17\85X\11}_\15\7fX'wP'|M!\88\82O\17\85X\15~]\15y[\18s[!vc\19kZ\17i_!d_\1eff$o[#hY%g[\1d]](db(Yi0Vb/Vd5e]:jbCa`<cb@bnAfq9ap@iq6bk:`t9du:_q?Vy=`wK\iI\lK`dI\d>dcD]e=Z`AYkLagGmtJoqQkpgksmluoi|wftutuurtzqv\83vm\84xg\81|c\7f|c}sg\89qc\84{j\8bye\85{k\89|a\8d{`\8bmg\95bc\93ak\8adg\92ik\8dnq\95al\93fa\93a^\9a_\\91kN\90bS\86hN\86tM\87rS\86wZ\81x[\8b|_\95pg\91nm\87ya\7f~_\81uT\82tZunbwxf\82q^\80lR|iU~qK\82lR{qJxuH~v8\80k9\89r>\8fiJ\8crP\86jQ\8cpL\88vQ\92{V\8f{S\98\85T\9f}\\99xd\8d\84Z\92z_\8d~g\94vj¡}e\9e\83a\9b\82aÂ¥|bª\85\\9d\8c\«\85Oª\8cM£\8bQª\85Qª~Vª\85T±\84_§\8ccÂ¥\85[\9f\88[Â¥\86Q\9f\8dêó\8fêî\85çà\8aÜâ\88åç\8aÃ¥Ã\8bçå{âÙ\82ÔÛzÃ’Ã\88ÎÊ\88ÔÆ\89ÓÓ}ÃÃtÙÃzÑÀwÇÆyËÎ\81Ȃ\88µµ\8c­¶\89µ®\82«°r«®\83¦°\81\95¤\82\9b£}\8d\9d\87\8aÂ¥\8c\98\9b\8e\93\9b\83\93\8e\7f\8c\93\91\9c\87\81\98\86\8a¤\81\8e\96\85\8e¤y\84¤\82\8a¤\84\8aÂ¥\80\80£x\85¨q\8c\9e|\81¨p\80\9e~z\99zu¢ws\96pr\97qx\97b\7f¢ei\97hr Xl\9dRt¤Th\9eR{¤W{\9cQp\90Nf\8dNl\9aGb\97Vm¡Mf\9fLc\8cPb\93Si\85KkxJt{RnsUiuYtwMhz]tnZby\tzWjwYvgXq_eze_tmWzhOftGivMk~WXnU[{K`kSWpC]q9__?__I[dCWpMYm9Sr;Qo?[a@Q\:Pc@TV8O]6YN1H[8Ld:S]1Sc.OX(P[*SU%fZ\1efZ\19nb\11rT\1esN\1dnY\13zR\19\7fZ\ ey]\vsS\12\81Z\1duM\19xQ\1d~Y*qO)\7fK!\7fV\1c\81O\15vO\14|S\1cl]\1csV\18cV\10nY\17eQ"jV)hd*YV\1ddU+dX*gc%Rb'[`.\b2]a2Xb7cj7]l5Zw=_gEfhHeo@lmI`m9bs9c\80BV\7fI^z9Uv<]aGe`Nc`A\bFbeJY]JbhHcgRaaSmeTuoXpspo|pn|fn|itwppuxpnt\7frw\82h\84wmt|cv|[\85pf\87nd\82tb{yq\7fps\8a~m\89vf\8egd\8fim\8cmq\93bl\99ir\93Yn\9c[]\8e_[ j[\8fyT\90rL\81gQ\83j]\8fmS\8ep_\8dw[\94mb\94ti\8du_\8exU\85zQzwW{sS\80je\80h\\88ma\83gV}hJxcMxoR{pR\86tE\81iK{vE\81lH\80tO\82pK\8fmW\87tQ\96nO\93yV\94}a\90sX\9f\7fY\9f\85O\9b{O\9c\85a\8fxk\93{d\9f\8b]\9c}i \84i\9b}m¤\84e\9f\81f¢\7f[­\8d^\9e\88T©\80`¡\83^\9e\7fU«\89S¢{\¨\82SÂ¥\82\¢\83R\98\7fÃñ~ãí{äì\83áÚ\8eßß\89ëÃ\85ßÛ\84×á\7fÜÓ\82ØÃ\83ÕÈ\82ÔÒ\89ÃÃŒ\84ÃŒÃ\84ÖÆtÕÃ\7fÇÃyÂÈ~ÈÀ\84½³|±±|²¸v²·{¨±\84\9b®\80\9bÂ¥\88\92«~\8c£\7f\87\9a|\8c\95\85\95\91\83\91\8e\8f\9d\96\92\9c\92\88 \92\86\9f\8c\86 \81\90\9c{\8c\9bv\90£y\90\9cw\8aÂ¥p\87\9fn\83\94z\87\9a~| }\81\9fvy\98ry\9bwv\9ak\83\9fa\84\94c\83\9e]r¢^k\9eYq¨Sw Wx\9dLp\94Tt\92Of\88Fb\8fNj\91Um\94Ul\8aOh\8eQe\83Pc\7fReqEvtEvpAmnJdsKisIgzZo{Zqt[poSxadw_cxc_wvTz{SrqEp}J`xQ[vTZzGSuGReFWj9Te4Qh?UgIchG`k?\oGWp=X`6U^3Vd4J[3OV7SP0OW2MY5RX(Ph#J]-Ma%]W!fW\16ob\fk[\10lR\11qU\16lY
-pa\10xf\10v\\ f{Q
-pQ\1cqV!xW |J(sN'xQ&\81V rN\elJ\1enI\14pU\13m[\1chY\1ac[\edQ!\N#Q\"]\)]Q'`Z&Z\-P\.Rb3Xd/Ob+Qb6Th9Tm=[q:co5ag>mfKglGgt9Zs:bxG]{Cb{IZt>\o9_eEUe@YlGgiNciLdfJedPn]Sid`piiutdsomlvfxpbrsgyoisqlyfk\7fey\84nvzirx^\80s\\82s`\7fxi{uj\87us\8czg\90xi\8ckt\98`n\92\q\93hr\93`j\90^j\9a^k\9emZ\94oN\91vJ\85p[\87w[\86s[\90uT\93vR\8enY\8cud\88x]\91vR\85\7fT\82|M\86\7fS\81xayn]\7fl]\88uY\89gL}cNxkJ\7fkP\83qT\85mP\84iFxoI}pG\84rV\87kU\8af[\8bqS\94qQ\91q^\9as]\92}T\8fzQ\9d\80K\95\80O\9d\84\\9ey^\98\83^¡\88f \89f\9d~k\95{t\99{k¢\7fh \82_¡\80X\9d\8f_\9f\96\\9c\8b]¡\82Z§\80X yY§{W¨\8bI\9d\8dJ¢\92åß\87èé\82èä\7fîã\87íÛ\80àß\7fÚÒ~ÙÒ\7fäÕ\82ØÎ\81âÕ\80ÙÎ\85ÙÊ\85Ã’ÃvØÃsÑÃ\7fÇÃ~ÉÂ\85¾À{º¹z¸Ã~µ¿\81¶°~\9f·{\9e®\84\97ª\87\97\9f\84\8f§x\95¤\89\95\96|\89\8d\85\89\93\8d\91\90\8a\8d\96\86\9a\86\8f\95\92\95\93\87\9c\97\87\98§w\8dÂ¥s\90ªl\87\9ex\84\9a|\80\9cs\84\97o\84\9cu\85\97z}\97x\88\96j{\9dl\8b\9fc\81\9c^\86\9cZ{¡bz©cu Z| Tv\97Lo\90U|\9aXl\8cMl\87Sl\92Kj\91Rj\88[`\88TixW`pMgnBlvIuy?sqDszL|nBztT|vZwxWolStmZva]ziLtiTpxIlwJe{QdyIe~NVs?_mEWlCPp>Ik7MeELkDWl9ao9``6O^<T]6Nj9Pf+G\0FX8HS+U^-EX8FW%El\17Qh\1aUX$\`\1caU\12cR\18fN\16fZ\1enX\1ckT\17bU\18t[\bmW\17tP\16qM"pK\17jO\1czK!qL\eoP&xR\17iV\efW\17lN\12_N\17^[\13`W\1e\H\1feH$[L*XL&PQ$]E+SG0^T(VX,SX0R^&NY%^i1Zk>Tq<bq>an6gl=dnDhg=fsEWy@Y\81?f\85Ii\81KbwI]jLatL\nA`fLakGZdP[]Hd`Njd\gdeoebsj[pgelqkiwiordnulvilljux_qqdx{hmlesvhv~kvslq\81i\7fn|\8d{l\85yi\89gu\8bal\99an\90hg\96hl\99Yi¡l_\90iY\89iS\95vU\87rS\87wa\8eqb\8b}[\95~Z\92w^\90oW\94rc\8f~]\94zR\8e}Z\88~M\89|SxvR{nVymV\86mV}kK\83bS\7faK\8cmK\8d_W\85rV\82oK}jP\80v[\81f_\90m_\89uV\87vI\91oY\94p[\9do\\99~W\94}V¢\86X\96{a\95yg\9c\7fj\9d\91a\90\8ck\93yr yc£\84n§\86o\9c\83h§\8dh\9a\90`¢\89_\9f\8di\97\85f\98\88Z\9avV\9erQ©\84P\9e\8dI\9c\94âÜ\93äÞ\8fåØ\85ïà\89ìå\86áØ\87æÛ\88äÔ\87ãÈxçÊtÙÆvÙÉwÎÈxÑÃ}ÙÃ}Ã’Ã…qÔ¾uÒ¼\80ÃÂ\80ȼ~Ȯ\86µ¾\82¨µ\83§¶\86\9e±\8b\98®\8a\92 \81\92\9d\7f\9c\9c\86\99\97\89\91\92\81\8e\8e\87\8c\94\8a\8c\91\94\8b\86\96\9a\88\91\9c\88\9a\97\83\9d \81\93¢w\89¦r\8d¤p\80\9er\82\9ar\86\9bj\8e\9cn\88\9cx\88¡x\8d\9cs\8a\96g\83\9ce\89\9ea\8f\9d^\86£_x\9aVx\9dXy\9dSv\91]w\8c_x\90Oq\8dHs\84Ld\8bSe\87Y[\83T\\86V`{HcqHfxGgsBjoHotArvG}zBsuFxnPwlGxiHllFqhRssNplHsmVjyRj~RbwCUs=XzE\\81@YzJQlIKk=I^CN_7Wh3Uf@[^<W\2P].Ef2=]2Aa0AX,N\7GR/HV-Kd+Hd\1cQf\eTY\14MU\12SU\12bN\1e`P\1eXQ\1eaU\1edS\1a_M\ ffN\14lV\15lP\13mK jQ$mF!vE\1cnM\18nR\emN\1ccT"fW\18jY \P\19XI\19\L\1fTI\18ZI"[K%MB,OE6KF1PC3VF(RN1RS*P]3^]/Sk1Vi7Sf=a`C`bD_k>[o@WlCYl;^v<l|<i}DiqCauFnuMivFhiB_dEUhDYeIR[LU]Zd_Zacdh_Ynd[ll^skmwwuvwmrqbjnfvepsdqvlykdpzh~wb{wjq}nvup\81xs~rn\81wo\86xs\8fiy\95ls\8d`i\95gn\9cai\99fd\95dg\8fpd\8fmY\8dta\91~Y\97\81a\99|d\9b\83d\92xb\98x`\8d{a\91\84X\93}T\8e\83Q\91wN\8atX\85uRzuUymO~pJ\82oF}kS\87cQ\83`H\87bO\8bpI\81nO\81cW\83hZ\85q^\8au^\87u`\96uP\99}X\93uW\98o`\9ar^\96wZ\9f{Y\9dwa\9c}k \8cl\92\8am\91\82t\98\81j\9b\86j\9b\80o\9c\8aj§\8fh¡\8ck\9c\8d`\9b\93e\8e\88f\90|l\97~`\95\80X\99x[\9b\82Y\9d\85P¡\86ìß\92éã\91îé\7fõè\8aï×\81êÚ\88èÖ\85áßzæÃwòÉ}ãÃvÃÀyÜÂ\7fÚÎ\8bÃÉ\87×¼\7fÊÉzÑ»yõz»{¸¹\81»½\7f°¶\7f±®| ¬\82\98ª{\98­\86\9b\9b\83\98¡~ \93\86\9c\8f\82\93\8e\82\95\94\91\9c\96\90\96\8e\94 \8b\92\9b\80\8e\9ev\92\99w\95§\80\92«t\87¡q\89\99o\84\9dr\8e\90s\83\92o\8b\98x\94£v\8f\91u\95\8fh\97\94f\97\9e_\89\97_z\9fe\7f\9eYu\97S\7f\9f[m Qu\90Ju\8eYp\8cPu\8dOi\82O]\84bk\87]_zMj~ShrGkxGglAdmFpmHrs>o\80M{mLynUqoEpnDpcI|nKucMirKk|Cc\80MlxEeyDRpDSw=SnHUl=TqHMg5Vi>Ii9Yl?UfEPo9F_7Hi+Dh0Kd3Bh*Ng5F]2GU0DP*QT\1cBb\1dUY
-PP\13\R\1aYO\f]J\12bS\18iI\1egQ cK\ f_F\10bX
-uY\17dM\elL#gG\erR$kL\18jL!`N%gJ%^O\1e^N&fC\1fRD WN!]I+VQ(PI#TP!SB/GH7QL-[D/MA/OS&OP#SU&\b6bV5\a.[l;`i3f`BaiBYn=Zm>QsCXpBil:esIjgBcl>kgB_r;ggC`l?\iHSeTVh\WbXY\Zgfnol[ykexpjxue}sqrqovmbqodenft[ml^xdbzw^xt_\89op~}hwvw\86tr\85orzeh\7fhv\87hm\97ad m^\92l]\9e_^\97e^\8bnh\90l[\95ja\8bmV\8f}V\91qW\9c\81c\92se\9ev\\91vf\97uc\89~Z\89uZ\8e~R\86yP\8dzR\83vOypR\86xV\83yS\80jF\82iT\82[E{gO\8bmP\80nX\8cq[\92jT\80eT\89hc\81tW\88r^\97z[\92}P\8dzQ\92wS\8dyV\95w^\8e|W\98\87Y\9b\7fb\99\85l\8f\95i\99\86r\96}u\96\80u\96\84u\99\88e¡\89h\98\8dc\9b\8aT\9d\90d\91\86T\9e|a\9axU\93{S\97~S\98\7fR£\87R§\8aóð\88õë\83ýß\89öã\8eðØ\8bôÙ\84ëà\83èÜ\83åã\82ðØ\85èÃ\82ì¿\82äÅ\89âÃ\86ßË\8eÿ\87̼~ÃÄ|ʾ}Æ´uǽz¾Â\88¸¼\84«³\83©­\82\9e±\82¢§~\9eÂ¥}\97\9c\87\97 \81\9b\95\88\90\99\84\99\8c\86¢\90\96Â¥\8a\98\99~\95\97\82\8e y\8d¤u\87¦{\8eªx\8f¤s\87\9ds\84\96o|\9cf\84\94h\86\91m\93\99u\8d\98r\93\91c\94\90j\95\99a\88\9dc|\9cat\97Wz\8d[p\9bWr\9dHw\9aKm\8dSt\94Rs\89No\83Tb\8bbk\8ccl}UpzKe\80Ql\81XguQvzCsv>j{Lg{Mt|HqqKgp?ej>uc8{f;rsHiqNbwHlzBh}AbwEPq?Kz3Mz>Oj=Rp9\h:On@Nh9Om6Vo8Jk;Cm3Mc#J_"TX,Na(Mc7Kc9NU)QV)PS%DW\14IT\ fPM\11NV\18ZM\ fUW\f`R\ ecI\1cgL\1c^F\18ZE\17_N\14nW\14oL\19_M#nT\1dkW$k]#cS gJ dP ^P#`>%`B(YG\1e^I\1dRS%TI1NE+SE(GS)SN+WJ6]B2QJ,WS%T\+bb4`Y4QT-SW+[c4Wn4`m6_j>[sDVsAPp<Zm<]c@aj?fl;[d>bd;fb@f`DbiC\`TTgSWlQUh_Qmb]jfac[ui^trctneuqc\7fukxmfjffe\rqamlh|jk{jg\80n\\8doa\8dxp\86wu\80x}\80gz|`i\83ef\95dj\9aa_\9cmc\9am_\9fda\96da\8cqb\90o]\96h]\92a^\8dj^\98oZ\9axa\99t[\93oa\8dxb\89vZ\8fq`\97sU\8eu_\87|Z\80sV|iL\80uY\82vW\87uQytMyfK\81bH\83eM\89nQ\85{S\8cvW\92sV\93j\\89ob\86t]\8awT\93pV\92tO\8f\82X\89\8aS\8f\81U\8c\80]\8d\81[\98\7fe\99\88g\91\94e\94\90q\8f\8an\8e~o\98xk\97~s\92\83q\9b\8ah\97\86g\99\91X\9c\81L\9b~Q\9b\80U\91\80P\8c\83\\9d~Y\9e\85Z¬\8c[¨\8bõð\80ðí\8dõè\8bóæ\89òå\91ôâ\85úÙ\8díæ\89îá\85ìÒ\85çÄ\81ðÅ\8bßÃ~ÚÊ\8bÚÃ\96ÑÈ\83ž~¾Ç\81½Ä|ɺ{¿µ~ƽ\80´Ä\8c°¿\8d¦²\85ª®\8d«©\8e\9c£\83\98\9c\8b\94\92\87\94\94\81\9c \86\9e\9b{¨\8e\90§}\90\9b~\91\9cp\86¡t\8a\9av\86\9c}\82\9fv\92ªo\93¤t\8e\99f\88\99p\8b\9fh\8c\94v\93\94q\98\8dq\9d\95f\90\99c\93\9ei\8d\95U\80\91T\8b\89X\89\90L\84\95Tv\95Tz\9aIu\93Uf\89Lu\85Ze\87[g\92]k\8c_i{Zly[mxPbwUj\81Qw~LxuIlrJf~@pnEliDnv8noFyp7vl8np=elFoj:l{3as:fz=Yo/Pn7Nn6Xg0Ug>^h3No1NfAJn.Hk,Gh/Ri7Pb/SZ%T^([d$UZ-O[4Pf4R[$W_$IX\11IM\13LZ\vVJ\ 1NM\ fXU\ 4VK\ 6gQ\16dR\18`N\19]M\vgW
-mY\1afQ\1ebG$`R"eW#dQ\1aZ\&^R(_D\19g@#b>,\;\1e[;\1cYD&TL&]Q\1dGR,KT"HR4HV8]L9SN+^W<R_6^g(UY3ZQ6aW8YP/Vb.^n:]r@^b=_oGWh;]f=\i@Td?[^C_m<^hDhm>`]:iaHUeM`n\SjV_ifced_pb]pkmolseXxr`{gk\80f_~ljto`gijghpa`liiymg\84hc\8dtb\91og\8cso\8ekz\8ctuz`z\8d`o\88fl\98gn\8eme\9ede\9ehY\94i[\96h[\8fm`\89qb\8bef\98h_\8bmT\91r\\8btZ\88mW\94qX\85rQ\91}W\96kX\98kZ\97te\90x^\84n\\88hG\83iJ\82h[\87qO|fD\82iE{hP\80nK\8drL\8bw]\96yS\8eq`\8fhg\8bob\95}g\86yZ\89\84a\8f\86[\87x`\82\86_\8d\87`\95~Y\8c\87_\9a\8cc\8f}c\91\8eg\93\93i\90\84z\8a\81s\91\81k\94\83w\97zj\97\85\\97\81U\93\8cU\96\86Y \87M\8f\90G\8e\87N\99\83W\9e\8bV\9a\86Jª\91W©\8dîæ\89ïæ\80öí\85ðå\86ñè\87ûÞ\83։\85։\80üà\80ð×\81÷Ã\87íÃ\84ßÉ\7fÕÌ\84ÃÓ\8cÃÃŽ\8dÊÌ\80ľ\85õ\81ü}¿¸{ÀÂ~¼À\83º½\87÷\8a¸¹\89©©\8f¨¤\93«\93\96¢\93\8a \8d\89¤\95~Â¥\8c}«\8e\82§\7f\86«z\8c\9b|\8d\97q\8b\9em\83\98p\84\9cg\83¢c\86\9ed\97\9fh\92\9ce\98\9ak\92\8ck\8b\8em\8a\85t\97\87r\9b\87m\8f\91c\9a\88V\94\8bM\8c\84N\8c\8bK\84\92S}\9aVr\9aMq\96Qk\9b^f\8e]c\8cRe\87Xb\88Q_\82Vc\87Pg|Tn}Oq{Gz}KuuMmzAmrBon7co:frDpk<lb;se9va4jh.`j)gq5fm/eq/_d&Qf+Vh1_l(^o1^x:Qp<Ii;Ni:He0MW*QW-\X'U\$ag*^b0_g&Za)[h!Xa%S`\1aRZ\13QZ\ 4XZ\ 3]\\0SM\ 4WV\ 4PQ\ 6UR\13bI\13dJ\10bR
-fK\11_L\10SW\1aXR\13TU\18aT\1f_\,[V'bK(`E\1cbC\18d>%aD\1cg>#hB\1caQ\19^Y\1fPT#SP3QR1WS/QF0YP8\]:Tg5V`6^T2bS1eN.]Z,a_3]f.fi9`f=VmF[gEYgKQlD]h8_b:^h@]h;gc;ah>YjGXfVWea`ea_jbgfb`iajtjqpeno^skYyf_pk^xj_tqnkik_ajafm\kral\85lh\82v`\8dkm\97hq\91^r\85dv\85\y\87_l\8f[m\95al\91c]\9el\\9cuZ\9bm`\93f]\92fT\92rR\9bl]\92fU\85qS\82yR\82t[\86pU\88uS\8b{Y\96tZ\9fkY¢pb\99th\89sb\7fxZ\8cvO\87kG\8dkO\86gS\8bfL\87oQ}tJ\82xJ\83zT\8euS\89l[\92sj\90mg\8fta\98\81`\8f\84_\9a\87^\96\85i\9a}b\8c\87_\8d\85Z\94\7fW\97\85U\95\86_\9c\81k\9c\8be\95\91p\95\96r\8b\90v\89\86q\94\82l\91\88i\99~[\9a~T\9c\8a\\9d\90O\95\94N\94\92M\94\8cL\95\8fM\95\89F£\8eF\9f\85R xùã\88êã\86çÛ\80èæ}úÃ\7fóØ{úà\83ôÔ\8aóã\85ðÛ\84ñÊ\93Ã¥Ã\8fáÃ\8dàÆ\82ÑÇ\95ØÙ\8dÕÀ\8b̽\8aõ\8bż\85ľ\86¼´\83´¸|°»\8c²·\89µª\8d¼§\8e©\98\89ª\90\9a¯\95\8e¨\91\94«\98\86°\8f\88§\90\8a¬|\88§y\87¨\83\8c\9es\8c\98o\8e\9ep\7fÂ¥q\8c¦o\8e h\94\99b\91¢m\97 g\99\8fh\89\93h\95\87a\8b\93e\92\96m\93\8d[\8a\95S\9b\85P\96\88S\90\91J\8b\87[\8b\8fN\81\8dQq\9cXd\8fMd\83Nc\8cRk\85Lf\86Wa\85[m~JtyVpzPguItpIyvMszCim8rwEck6ie6jh@dp=lh0so4sh;mm7bk6fq-Wp!Rq&Lk\eVe)Zi \y-X\829Ro.Ok,Ic,Hq(Wd'PZ-R^*J_\17Ni\1dY_,Wk\1cgk\1fZj\1eOc#Q\\11N^\fXV
-_X\0OR\ 5RM\ 1UU\ 5OO
-_J\10aT\ e[U\12hZ\f_N\14_F\12eO\11VX\1fUU"]S\19UK\1fcL+bG&g@\12`@\14e5%^9&h>!fI\19bE\ fQW\15F[\17OO#HL%TJ2M>-ZQ)\Z*d^,Yf;dY4dP5XU9Ma8V_<W\5^_1`h@ZnA_i>ZsLNn>Si8Yb9dj9dd;[_G`lNa_N`qW\aYap_\fbXnb_j]kzgcvhoz\rnkuwbofmtkgpbpmog`jl[iebjqfg\80oo\8dwa\98gb\91dv\8e_t\87ov\86jn\88\w\87cl\8b[e\8f_d\9aqc\97uh mk¡tb\9bgf\93m\\8euh\8fn`\85d\\86d`\8eic\8bmd\89w]\91pQ\94lW\9exU\97sY tg\92|n\8cmY\8coX\87kN\81gN\86hK\8bsP\8coF\88xP\87yQ\80zL\8axN\92yd\87uX\8dvf\8e\80U\8a}Y\86\89\\89\81b\86\85i\8a\86^\86\83i\85vW\90\83U\93\8aX\93\8ad\91\8f\\9e\89p\91\90r\97\8ee\8a\97f\90\89q\86\85f\91|c\91uk¢\89_\98\91a\9e\88U\9b\8bP¥\94Y\91\8fV\8d\89G\99\95T\9c\84R \81^©sóävìã~éå\7fîßxíÖvíÜzðÒ\81úÖ\88ñá\8cíÛ\95æÕ\93äÑ\98îÄ\92çÄ\88àÈ\8cØÔ\86ÙÉ\8cÎÃ\85Ⱥ\8c¿º\83ƽ\83¾¶\81²¶\82´°\8c°¨\88½¨\86¦\86·\97\8a¸\91\96²\8f\95©\8a\8f¯\8e\93¨\8a\8b¥\84\87¦\8a\83¤\7f\88\9d~\8a§\7f\88¢x\8c\97t\84£i\83¥n\8b\9ec\98\90h\90\9ed\99\9ei\95\90g\93\8ba\95\89\\8c\93h\8e\93i\8a\8d[\97\8a[\96\8f]\8f\8ec\91\8cX\8a\8fW\8c\81P}\8fTo\94\h\96Yn\86Gb\85Nf\85LcyXm}Up}LwxKjvRlkLuoGzqNrs>jv9ug;nd?ot5ar9av2co2pu3qq6ev5iu.Zu(Vp#Sv\16Wj\19cs\17_t&]|-S{&Ju$Jg+Qs1Sp-Pf$[h'Qc\1cOh\ fKj\11Wj\18cp\16cf!Wf$Mc\16Kf\12P]
-YZ\ 2XG\ 3YE\0]O\0YJ\ 4\O\b`J\10^U        ZT\ eeP\18jQ\18bH\1cZR$a[\1f]P#[V\1e[P$_N ]E\1c]9\16\A\1fd9\19b6\1aY="YK"[J\14JL\11GQ\18OF\19KH'GB!NE\1dTP\1a_L'ZY0\a2Xb.[\2Yg8Nc=JaANc?Z[7W]9akHamFVrGYqGXmI^a;_]Aih;]`CVfOXnN]jW]fLcoMfiaZse`k^endol\nvcwv`qvmuvhkkknktnfmrldedhemmplzmn\8bja\91bl\88fp\86mk\92mo\8edi\94br\90et\91_n\8dgr\87ms\8erv\92tr op¢hj\92js\8dto\8af`\83f`\8bke\8add\88sX\94p]\94rb\92rX\95nX\96qY\9dye\97vi\8eqb\86v_\8ffX\93eO\86sS\7fpL\86rJ\90uK\89lO\8apJ\81mQ\8at[\89uY\90xX\93\80X\90\85T\8b\83V\92\82g\87\8bo\87\86i\83\82]\88xa\86y[\90\86Y\90\8fY\89\8cY\93\87_\94\8ep\92\8fc\93\8da\93\82^\90\81d\8d|_\91|i¢\84`©\89[§\8cS\9f\81TÂ¥\91S¡\93V\96\9bY\97\92R\9b\95`ª\8d^©uöõ~ïã\81֊\7fîãrîéwõå{ùØ\84òÖ\85ëÓ\8cîÔ\98íÕ\8fãÃ\92çÔ\98äÌ\8aÙÃ\93×Ë\90ÖÌ\8fËÂ\8bÈÇ\94ø\8f°\7f·½}²°\85¸¬~²¨\85æ\8b´ª\83¼\94\8e®\92\97¶\89\8c°\89\8d¦\87\92§\85\8e\9e\84\80\9f\84\88¯\8b\8bª\85\8b¤w\8fÂ¥r\8c\96u\91¢{\87\9bt\8e\9av\9a\91n\94\93n\9b\94q\9c\97]\95\8aZ\99\93[\97\95]\95\90a\8e\97_\87\84b\9a\93_\97\8bT\96\8cQ\92\8bQ\8eyZy\87Rt\8cSw\84PwwI|yGl\82Bl\89HuuMr\80GpoNpsPjmIvsQvgDwn=jo1et?gm5ao/dc4cc,Zh%ds*ko"kg&eg#jh+`d"cp\19Yl\14Xs\1c\i$`h*Rn$Xg\1aYi!Yp*Ko\1cMt!Tj\17Rk\11[m\ 4``\ f`h\16Xl\12ea\1dYa\19^Z\16SV\vUW\ eYP      XG\ 3_D\ fYM
-XM\ 4VV\0VS\ 3[R\ 5^T
-f`\1aYP\1efN\15\J\16ZU\11ZS\1eRM\16`T\18TN\12UD\10W7\15W9\ f]B\va@\16_8\1cXK\17YH\11JR\14NQ\11EG\15KG$OG#^K\19]F\1c^R2]T%_^6_`:be3Lc5O[>Rk@Um8Uk8ObESh<TcHTpBbsA^fLbiBZm?lgIWaH[pSdpL^fNavQlsA[tK]vae}h]sa`\7fojrbguckzermommmgfo_memjljisib{fn{pi\8ebp\88ds\85fs\86]q\96bf\8dey\92br\94gk\96]l\96gy\8euu\8ctn\92yz om\9eqa\92of\99of\8frm\93g]\89^d\8d_f\93fd\96w`\9apY\9blX\9dyT\99}X§mb\9ake\9axg\86o^\89jZ\87gY\8coN\87gR\86rG\86sE\88vM\8bkR}hL\84xW\87vZ\89oN\98wR\8d\8eU\83\80T\8b\91d\92\91Y\8d\8dg\81\86\\86\80U\8b\86Y\8a{U\90\85X\8d\8aS\8e\86h\96\93e\95\88i\99\90h\8f\8cf\8e\89n\90\85^\95ua\9b\84Y¬\82^¨|U\9fyU­\8d^\9a\97S\97\99U\9d\95R¡\8a_\9f\94_©|úñwùítÿêwÿßxøèrÿç}ÿã\82ôÛ\84ôÞ\92ðÔ\9aëÃ\91áÔ\8fçÇ\90æÇ\93ãÃ\8aÃÈ\84ÕÉ\88ÃÆ\8bɺ\8cȵ\86ɽ\83¿´\81ø\84¹µ\81¼²\85˱\8d³©\88·\9a\90·\90\98µ\8c\93²\8a\94¨\8a\99¦\8b\94Â¥\89\91ª\88\82©\87\82¨\87\82¯|\86³t\88Â¥q\8c\9bw\90\95y\93\90n\8a\94m\90\97c\99\95j\98\8eh\9b\91`\9a\98d\99\99]\99\9ba\8e\91_\90\85f\90\86a\90\88^\96\86S\92\8bX\83\81R\82\82P\80\85U\88z[\83yXxxSy\82IsyJ~~G~uBvpFvs?olDtjA|jBzl7jp3ll>gf9a^6e`(bl$_o%_q'kn\1ebq$df!`d\1adb\16ig\15^f\1c_c\e`h$Yo\1aVl\e]f\1d\i\17]k Ol\19Hg\13Kj\ 6Rf\ 6Yq\bUo\10`_\10Vh\10[b
-``\11`W\ f^P\17UN\ eTQ\bSI
-QK
-`Q\ eX[\aT^\ 6U\\v[W\vaX\14W_\11P^\17ZX\18VR\ e^N\fUU
-XL\12[M\10SM\f_B\ 6]A\11V=
-XG
-XN
-^C\12]=\15TB\17SN\16QI\eTL\19QO\16WJ\16\G\1f[D)`N0aP2Z^.^b,W^:V_?Qa<Rg4Th8WmDOfEMgGWcI]iK_fDRlAViMTnBamGWkCYiL\hRfiFcnCirEd{Pa{UZvgb\80il}phyjmujk{ib\7fmcsjXto\pm]iqghvhfxji}op|ep\8cXh\95\h\8efs\8dgm\9aip\99rw\9ekp\98jr\91py\98kt\93rl\98tq\99rr\98xh\94wg\98qm\91gn\9bjf\95nh\94el\95cb\9aqf\8fqj\90o`\9bzi\99za t`£qh\94si\84xh\82\7fa\83t`\84u]\8ciV\90rN\88mL\8akP\83uO\83vL\90jQ\8bmX\91sP\92\84O\83\85Y\85\83[\91\90S\8d\94S\87\89\\86\87Y\91|U\90x]\95~b\93\85`\97\80]\8c\82^\84\8cd\8d\88\\90\88e\96\8bh\91\82g\96\83g\96{Y£|^¥\7fU¦}] z\¤\83]\9e\8a_\9e\86S¦\93S¢\97]\98\8aW\9f
\ No newline at end of file
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/kaimono.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/kaimono.ml
deleted file mode 100644 (file)
index e524156..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-(* $Id$ *)
-
-open GMain
-open Printf
-
-let file_dialog ~title ~callback ?filename () =
-  let sel = GWindow.file_selection ~title ~modal:true ?filename () in
-  sel#cancel_button#connect#clicked ~callback:sel#destroy;
-  sel#ok_button#connect#clicked ~callback:
-    begin fun () ->
-      let name = sel#get_filename in
-      sel#destroy ();
-      callback name
-    end;
-  sel#show ()
-
-let w = GWindow.window ~title:"Okaimono" ()
-let vb = GPack.vbox ~packing:w#add ()
-
-let menubar = GMenu.menu_bar ~packing:vb#pack ()
-let factory = new GMenu.factory menubar
-let file_menu = factory#add_submenu "File"
-let edit_menu = factory#add_submenu "Edit"
-
-let sw = GBin.scrolled_window ~height:200 ~packing:vb#add
-    ~hpolicy:`AUTOMATIC ~vpolicy:`AUTOMATIC ()
-let vp = GBin.viewport ~width:340 ~shadow_type:`NONE ~packing:sw#add ()
-let table = GPack.table ~columns:4 ~rows:256 ~packing:vp#add ()
-let _ =
-  table#focus#set_vadjustment (Some vp#vadjustment)
-
-let top = ref 0
-and left = ref 0
-let add_to_table  w =
-  table#attach ~left:!left ~top:!top ~expand:`X w;
-  incr left;
-  if !left >= 4 then (incr top; left := 0)
-
-let entry_list = ref []
-
-let add_entry () =
-  let entry =
-    List.map [40;200;40;60]
-      ~f:(fun width -> GEdit.entry ~packing:add_to_table ~width ())
-  in entry_list := entry :: !entry_list
-
-let _ =
-  List.iter2 ["Number";"Name";"Count";"Price"] [40;200;40;60] ~f:
-    begin fun text width ->
-      ignore (GButton.button ~label:text ~width ~packing:add_to_table ())
-    end;
-  for i = 1 to 9 do add_entry () done
-
-let split ~sep s =
-  let len = String.length s in
-  let rec loop pos =
-    let next =
-      try String.index_from s pos sep with Not_found -> len
-    in
-    let sub = String.sub s ~pos ~len:(next-pos) in
-    if next = len then [sub] else sub::loop (next+1)
-  in loop 0
-
-let load name =
-  try
-    let ic = open_in name in
-    List.iter !entry_list
-      ~f:(fun l -> List.iter l ~f:(fun e -> e#set_text ""));
-    let entries = Stack.create () in
-    List.iter !entry_list ~f:(fun x -> Stack.push x entries);
-    try while true do
-      let line = input_line ic in
-      let fields = split ~sep:'\t' line in
-      let entry =
-       try Stack.pop entries
-       with Stack.Empty ->
-         add_entry (); List.hd !entry_list
-      in
-      List.fold_left fields ~init:entry ~f:
-       begin fun acc field ->
-         (List.hd acc)#set_text field;
-         List.tl acc
-       end
-    done
-    with End_of_file -> close_in ic
-  with Sys_error _ -> ()
-    
-
-let save name =
-  try
-    let oc = open_out name in
-    List.iter (List.rev !entry_list) ~f:
-      begin fun entry ->
-       let l = List.map entry ~f:(fun e -> e#text) in
-       if List.exists l ~f:((<>) "") then
-         let rec loop = function
-             [] -> ()
-           | [x] -> fprintf oc "%s\n" x
-           | x::l -> fprintf oc "%s\t" x; loop l
-         in loop l
-      end;
-    close_out oc
-  with Sys_error _ -> ()
-
-open GdkKeysyms
-
-let _ =
-  w#connect#destroy ~callback:Main.quit;
-  w#event#connect#key_press ~callback:
-    begin fun ev ->
-      let key = GdkEvent.Key.keyval ev and adj = vp#vadjustment in
-      if key = _Page_Up then
-       adj#set_value (adj#value -. adj#page_increment)
-      else if key = _Page_Down then
-       adj#set_value (min (adj#value +. adj#page_increment)
-                        (adj#upper -. adj#page_size));
-      false
-    end;
-  w#add_accel_group factory#accel_group;
-  let ff = new GMenu.factory file_menu ~accel_group:factory#accel_group in
-  ff#add_item ~key:_O "Open..."
-    ~callback:(file_dialog ~title:"Open data file" ~callback:load);
-  ff#add_item ~key:_S "Save..."
-    ~callback:(file_dialog ~title:"Save data" ~callback:save);
-  ff#add_separator ();
-  ff#add_item ~key:_Q "Quit" ~callback:w#destroy;
-  let ef = new GMenu.factory edit_menu ~accel_group:factory#accel_group in
-  ef#add_item ~key:_A "Add line" ~callback:add_entry;
-  w#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/label.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/label.ml
deleted file mode 100644 (file)
index b9829fb..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-(* $Id$ *)
-
-(* Embedding xpm data into an ML file *)
-
-let openfile = [|
-(* width height num_colors chars_per_pixel *)
-"    20    19       5            1";
-(* colors *)
-". c None";
-"# c #000000";
-"i c #ffffff";
-"s c #7f7f00";
-"y c #ffff00";
-(* pixels *)
-"....................";
-"....................";
-"....................";
-"...........###......";
-"..........#...#.#...";
-"...............##...";
-"...###........###...";
-"..#yiy#######.......";
-"..#iyiyiyiyi#.......";
-"..#yiyiyiyiy#.......";
-"..#iyiy###########..";
-"..#yiy#sssssssss#...";
-"..#iy#sssssssss#....";
-"..#y#sssssssss#.....";
-"..##sssssssss#......";
-"..###########.......";
-"....................";
-"....................";
-"...................." |]
-
-open GMain
-
-let main () =
-  let w = GWindow.window ~border_width:2 () in
-  w#misc#realize ();
-  let hbox = GPack.hbox ~spacing:10 ~packing:w#add () in
-  let pm = GDraw.pixmap_from_xpm_d ~data:openfile ~window:w () in
-  GMisc.pixmap pm ~packing:hbox#add ();
-  GMisc.label ~text:"Embedded xpm" ~packing:hbox#add ();
-  w#show ();
-  w#connect#destroy ~callback:Main.quit;
-  Main.main ()
-
-let () = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/lissajous.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/lissajous.ml
deleted file mode 100644 (file)
index 9d6cf3b..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-(* $Id$ *)
-(* Lissajous \e$B?^7A\e(B *)
-
-open GMain
-
-
-let main () =
-  let window = GWindow.window ~border_width: 10 () in
-  window#event#connect#delete
-     ~callback:(fun _ -> prerr_endline "Delete event occured"; true);
-  window#connect#destroy ~callback:Main.quit;
-  let vbx = GPack.vbox ~packing:window#add () in
-  let quit = GButton.button ~label:"Quit" ~packing:vbx#add () in
-  quit#connect#clicked ~callback:window#destroy;
-  let area = GMisc.drawing_area ~width:200 ~height:200 ~packing:vbx#add () in
-  let drawing = area#misc#realize (); new GDraw.drawable (area#misc#window) in
-  let m_pi = acos (-1.) in
-  let c = ref 0. in
-  let expose_event _ =
-    drawing#set_foreground `WHITE;
-    drawing#rectangle ~filled:true ~x:0 ~y:0 ~width:200 ~height:200 ();
-    drawing#set_foreground `BLACK;
-(*    drawing#line x:0 y:0 x:150 y:150; 
-      drawing#polygon filled:true [10,100; 35,35; 100,10; 10, 100];
-*)
-    let n = 200 in
-    let r = 100. in
-    let a = 3 in let b = 5 in 
-    for i=0 to n do
-      let theta0 = 2.*.m_pi*.(float (i-1))/. (float n) in
-      let x0 = 100 + (truncate (r*.sin ((float a)*.theta0))) in
-      let y0 = 100 - (truncate (r*.cos ((float b)*.(theta0+. !c)))) in
-      let theta1 = 2.*.m_pi*.(float i)/.(float n) in
-      let x1 = 100 + (truncate (r*.sin((float a)*.theta1))) in
-      let y1 = 100 - (truncate (r*.cos((float b)*.(theta1+. !c)))) in
-      drawing#line ~x:x0 ~y:y0 ~x:x1 ~y:y1
-    done;  
-    false
-  in 
-  area#event#connect#expose ~callback:expose_event;
-  let timeout _ = c := !c +. 0.01*.m_pi;
-                  expose_event ();
-                 true in 
-  Timeout.add ~ms:500 ~callback:timeout;
-  window#show ();
-  Main.main ()
-
-let _ = Printexc.print main()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/nihongo.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/nihongo.ml
deleted file mode 100644 (file)
index 48f7d8c..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(* $Id$ *)
-
-(* Â¤Â³Â¤Ã¬Â¤Ã²Â¼Ã‚¹Ô¤¹¤ëð¤ËLC_CTYPE=ja_JP.EUC¤Ê¤É¤È»ØÄꤷ¤Ê¤±¤ì¤Ã¤Ê¤é¤Ê¤¤ *)
-
-(* cut-and-paste Â¤Ã¢Ã‚ñþ¤·¤Æ¤¤¤Þ¤¹¤¬¡¢edit¤Ã¤¦¤Þ¤¯¤¤¤­¤Þ¤»¤ó *)
-
-open GMain
-
-let window = GWindow.window ()
-let box = GPack.vbox ~packing: window#add ()
-let text = GEdit.text ~editable: true ~packing: box#add ()
-let font = Gdk.Font.load_fontset
-    "-*-fixed-medium-r-normal--24-*-c-120-iso8859-1, \
-     -*-fixed-medium-r-normal--24-*-jisx0208.1983-0, \
-     -*-fixed-medium-r-normal--24-*-jisx0201.1976-0"
-let button = GButton.button ~label: "½ªÎ»" ~packing: box#add ()
-let label = GMisc.label ~text:"¤³¤ì¤Ë¤Ã±Æ¶Ã¤·¤Ê¤¤" ~packing: box#add ()
-
-let _ =
-  window#connect#destroy ~callback:Main.quit;
-  text#misc#realize ();
-  text#insert "¤³¤ó¤Ë¤Ã¤Ã" ~font;
-  let style = button#misc#style#copy in
-  button#misc#set_style style;
-  style#set_font font;
-  style#set_bg [`NORMAL,`NAME "green"; `PRELIGHT,`NAME "red"];
-  button#connect#clicked ~callback:Main.quit
-
-let _ =
-  window#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/old/fixpoint.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/old/fixpoint.ml
deleted file mode 100644 (file)
index c41b11b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-(* $Id$ *)
-
-open GtkData
-open GtkBase
-open GtkPack
-open GtkWindow
-open GtkEdit
-open GtkMain
-
-let rec fix fun:f :eq x =
-  let x' = f x in
-  if eq x x' then x
-  else fix fun:f :eq x'
-
-let eq_float x y = abs_float (x -. y) < 1e-13
-
-let _ =
-  let top = Window.create `TOPLEVEL in
-  GtkSignal.connect sig:Object.Signals.destroy top callback:Main.quit;
-  let hbox = Box.create `VERTICAL in
-  Container.add top hbox;
-  let entry = Entry.create () in
-  Entry.set entry max_length:20;
-  let tips = Tooltips.create () in
-  Tooltips.set_tip tips entry text:"Initial value for fix-point";
-  let result = Entry.create () in
-  Entry.set result max_length:20 editable:false;
-  Box.pack hbox entry;
-  Box.pack hbox result;
-
-  GtkSignal.connect sig:Editable.Signals.activate entry callback:
-    begin fun () ->
-      let x = try float_of_string (Entry.get_text entry) with _ -> 0.0 in
-      Entry.set entry text:(string_of_float (cos x));
-      let res = fix fun:cos eq:eq_float x in
-      Entry.set result text:(string_of_float res)
-    end;
-  Widget.show_all top;
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/old/hello.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/old/hello.ml
deleted file mode 100644 (file)
index 60506e3..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-(* $Id$ *)
-
-open GtkBase
-open GtkButton
-open GtkWindow
-open GtkMain
-
-let window = Window.create `TOPLEVEL
-
-let button = Button.create label:"Hello World"
-
-let main () =
-  GtkSignal.connect sig:Widget.Signals.Event.delete window
-    callback:(fun _ -> prerr_endline "Delete event occured"; true);
-  GtkSignal.connect sig:Object.Signals.destroy window callback:Main.quit;
-  Container.set_border_width window 10;
-  GtkSignal.connect sig:Button.Signals.clicked button
-    callback:(fun () -> prerr_endline "Hello World"; Object.destroy window);
-  Container.add window button;
-  Widget.show_all window;
-  Main.main ()
-
-let _ = Printexc.print main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/old/progressbar.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/old/progressbar.ml
deleted file mode 100644 (file)
index f4ad465..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GtkBase
-open GtkMisc
-open GtkWindow
-open GtkRange
-open GtkPack
-open GtkButton
-open GtkMain
-
-
-class bar bar = object
-  val bar : progress_bar obj = bar
-  val mutable pstat = true
-  method progress =
-    let pvalue = Progress.get_percentage bar in
-    let pvalue =
-      if pvalue >= 1.0 || not pstat then (pstat <- true; 0.0)
-      else pvalue +. 0.01
-    in
-    ProgressBar.update bar percent:pvalue;
-    true
-  method progress_r =
-    pstat <- false
-end
-
-let main () =
-
-  let window = Window.create `TOPLEVEL in
-  GtkSignal.connect sig:Object.Signals.destroy window callback:Main.quit;
-  Container.set_border_width window 10;
-
-  let table = Table.create rows:3 columns:2 in
-  Container.add window table;
-  
-  let label = Label.create "Progress Bar Example" in
-  Table.attach table label left:0 right:2 top:0 expand:`X shrink:`BOTH;
-  
-  let pbar = ProgressBar.create () in
-  Table.attach table pbar left:0 right:2 top:1 fill:`X shrink:`BOTH;
-
-  let bar = new bar pbar in
-  let ptimer = Timeout.add 100 callback:(fun () -> bar#progress) in
-
-  let button = Button.create label:"Reset" in
-  GtkSignal.connect sig:Button.Signals.clicked button
-    callback:(fun () -> bar#progress_r);
-  Table.attach table button left:0 top:2 expand:`NONE fill:`X shrink:`BOTH;
-
-  let button = Button.create label:"Cancel" in
-  GtkSignal.connect sig:Button.Signals.clicked button callback:Main.quit;
-  Table.attach table button left:1 top:2 expand:`NONE fill:`X shrink:`BOTH;
-
-  Widget.show_all window
-
-
-let _ =
-  main ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/pousse.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/pousse.ml
deleted file mode 100644 (file)
index ecf0dff..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-(* $Id$ *)
-
-(* The game logic *)
-
-type color = [`none|`white|`black]
-
-module type BoardSpec = sig
-  type t
-  val size : int
-  val get : t -> x:int -> y:int -> color
-  val set : t -> x:int -> y:int -> color:color -> unit
-end
-
-module Board (Spec : BoardSpec) = struct
-  open Spec
-  let size = size
-
-  let on_board x y =
-    x >= 0 && x < size && y >= 0 && y < size
-
-  let rec string board ~x ~y ~dx ~dy ~color l =
-    let x = x+dx and y = y+dy in
-    if on_board x y then
-      let col = get board ~x ~y in 
-      if col = (color : [`white|`black] :> color) then l else
-      if col = `none then [] else
-      string board ~x ~y ~dx ~dy ~color ((x,y)::l)
-    else []
-
-  let find_swaps board ~x ~y ~color =
-    if get board ~x ~y <> `none then [] else
-    List.fold_left [-1,-1; -1,0; -1,1; 0,-1; 0,1; 1,-1; 1,0; 1,1]
-      ~init:[]
-      ~f:(fun acc (dx,dy) -> string board ~x ~y ~dx ~dy ~color [] @ acc)
-
-  let action board ~x ~y ~color =
-    let swaps = find_swaps board ~x ~y ~color in
-    if swaps = [] then false else begin
-      List.iter ((x,y)::swaps)
-       ~f:(fun (x,y) -> set board ~x ~y ~color:(color :> color));
-      true
-    end
-
-  let check_impossible board ~color =
-    try
-      for x = 0 to size - 1 do for y = 0 to size - 1 do
-       if find_swaps board ~x ~y ~color <> [] then raise Exit
-      done done;
-      true
-    with Exit -> false
-
-  let count_cells board =
-    let w = ref 0 and b = ref 0 in
-    for x = 0 to size - 1 do for y = 0 to size - 1 do
-      match get board ~x ~y with
-       `white -> incr w
-      | `black -> incr b
-      | `none -> ()
-    done done;
-    (!w,!b)
-end
-
-(* GUI *)
-
-open GMain
-
-(* Toplevel window *)
-
-let window = GWindow.window ~title:"pousse" ()
-
-(* Create pixmaps *)
-
-let pixdraw =
-  GDraw.pixmap ~window ~width:40 ~height:40 ~mask:true ()
-let pixdraw1 =
-  GDraw.pixmap ~window ~width:40 ~height:40 ~mask:true ()
-let pixdraw2 =
-  GDraw.pixmap ~window ~width:40 ~height:40 ~mask:true ()
-
-let _ =
-  pixdraw1#set_foreground `BLACK;
-  pixdraw1#arc ~x:3 ~y:3 ~width:34 ~height:34 ~filled:true ();
-  pixdraw2#set_foreground `WHITE;
-  pixdraw2#arc ~x:3 ~y:3 ~width:34 ~height:34 ~filled:true ();
-  pixdraw2#set_foreground `BLACK;
-  pixdraw2#arc ~x:3 ~y:3 ~width:34 ~height:34 ()
-
-(* The cell class: a button with a pixmap on it *)
-
-class cell ?packing ?show () =
-  let button = GButton.button ?packing ?show () in
-object (self)
-  inherit GObj.widget button#as_widget
-  method connect = button#connect
-  val mutable color : color = `none
-  val pm = GMisc.pixmap pixdraw ~packing:button#add ()
-  method color = color
-  method set_color col =
-    if col <> color then begin
-      color <- col;
-      pm#set_pixmap
-       (match col with `none -> pixdraw
-       | `black -> pixdraw1
-       | `white -> pixdraw2)
-    end
-end
-
-module RealBoard = Board (
-  struct
-    type t = cell array array
-    let size = 8
-    let get (board : t) ~x ~y = board.(x).(y)#color
-    let set (board : t) ~x ~y ~color = board.(x).(y)#set_color color
-  end
-)
-
-(* Conducting a game *)
-
-open RealBoard
-
-class game ~(frame : #GContainer.container) ~(label : #GMisc.label)
-    ~(statusbar : #GMisc.statusbar) =
-  let table = GPack.table ~columns:size ~rows:size ~packing:frame#add () in
-object (self)
-  val cells =
-    Array.init size
-      ~f:(fun i -> Array.init size
-         ~f:(fun j -> new cell ~packing:(table#attach ~top:i ~left:j) ()))
-  val label = label
-  val turn = statusbar#new_context ~name:"turn"
-  val messages = statusbar#new_context ~name:"messages"
-  val mutable current_color = `black
-  method board = cells
-  method table = table
-  method player = current_color
-
-  method swap_players () =
-    current_color <-
-      match current_color with
-       `white -> turn#pop (); turn#push "Player is black"; `black
-      | `black -> turn#pop (); turn#push "Player is white"; `white
-
-  method finish () =
-    turn#pop ();
-    let w, b = count_cells cells in
-    turn#push
-      (if w > b then "White wins" else
-       if w < b then "Black wins" else
-       "Game is a draw");
-    ()
-
-  method update_label () =
-    let w, b = count_cells cells in
-    label#set_text (Printf.sprintf "White: %d Black: %d " w b)
-
-  method play x y =
-    if action cells ~x ~y ~color:current_color then begin
-      self#update_label ();
-      self#swap_players ();
-      if check_impossible cells ~color:current_color then begin
-       self#swap_players ();
-       if check_impossible cells ~color:current_color then self#finish ()
-      end
-    end else
-      messages#flash "You cannot play there"
-
-  initializer
-    for i = 0 to size-1 do for j = 0 to size-1 do
-      let cell = cells.(i).(j) in
-      cell#connect#enter ~callback:cell#misc#grab_focus;
-      cell#connect#clicked ~callback:(fun () -> self#play i j)
-    done done;
-    List.iter ~f:(fun (x,y,col) -> cells.(x).(y)#set_color col)
-      [ 3,3,`black; 4,4,`black; 3,4,`white; 4,3,`white ];
-    self#update_label ();
-    turn#push "Player is black";
-    ()
-end
-
-(* Graphical elements *)
-
-let vbox = GPack.vbox ~packing:window#add ()
-let frame = GBin.frame ~shadow_type:`IN ~packing:vbox#add ()
-let hbox = GPack.hbox ~packing:vbox#pack ()
-
-let bar = GMisc.statusbar ~packing:hbox#add ()
-
-let frame2 = GBin.frame ~shadow_type:`IN ~packing:hbox#pack ()
-let label =
-  GMisc.label ~justify:`LEFT ~xpad:5 ~xalign:0.0 ~packing:frame2#add ()
-
-let game = new game ~frame ~label ~statusbar:bar
-
-(* Start *)
-
-let _ =
-  window#connect#destroy ~callback:Main.quit;
-  window#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/progressbar.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/progressbar.ml
deleted file mode 100644 (file)
index b614f08..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-class bar bar = object
-  val bar : #GRange.progress = bar
-  val mutable pstat = true
-  method progress () =
-    let pvalue = bar#percentage in
-    let pvalue =
-      if pvalue > 0.99 || not pstat then (pstat <- true; 0.0)
-      else pvalue +. 0.01
-    in
-    bar#set_percentage pvalue;
-    true
-  method reset () =
-    pstat <- false
-end
-
-let main () =
-
-  let window = GWindow.window ~border_width: 10 () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let table = GPack.table ~rows:3 ~columns:2 ~packing: window#add () in
-  
-  GMisc.label ~text:"Progress Bar Example" ()
-    ~packing:(table#attach ~left:0 ~right:2 ~top:0 ~expand:`X ~shrink:`BOTH);
-  
-  let pbar =
-    GRange.progress_bar ~bar_style:`DISCRETE ~discrete_blocks:20 ()
-      ~packing:(table#attach ~left:0 ~right:2 ~top:1
-                  ~expand:`BOTH ~fill:`X ~shrink:`BOTH) in
-
-  let bar = new bar pbar in
-  let ptimer = Timeout.add ~ms:50 ~callback:bar#progress in
-
-  let button = GButton.button ~label:"Reset" ()
-      ~packing:(table#attach ~left:0 ~top:2
-                  ~expand:`NONE ~fill:`X ~shrink:`BOTH) in
-  button#connect#clicked ~callback:bar#reset;
-
-  let button = GButton.button ~label:"Cancel" ()
-      ~packing:(table#attach ~left:1 ~top:2
-                  ~expand:`NONE ~fill:`X ~shrink:`BOTH) in
-  button#connect#clicked ~callback:Main.quit;
-
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/radiobuttons.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/radiobuttons.ml
deleted file mode 100644 (file)
index 5743ee2..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-
-  let window = GWindow.window ~title: "radio buttons" ~border_width: 0 () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let box1 = GPack.vbox ~packing: window#add () in
-
-  let box2 = GPack.vbox ~spacing:10 ~border_width: 10 ~packing: box1#add () in
-
-  let button1 = GButton.radio_button ~label:"button1" ~packing: box2#add () in
-  button1#connect#clicked ~callback:(fun () -> prerr_endline "button1");
-
-  let button2 = GButton.radio_button ~group:button1#group ~label:"button2"
-      ~active:true ~packing: box2#add () in
-  button2#connect#clicked ~callback:(fun () -> prerr_endline "button2");
-
-  let button3 = GButton.radio_button
-      ~group:button1#group ~label:"button3" ~packing: box2#add () in
-  button3#connect#clicked ~callback:(fun () -> prerr_endline "button3");
-
-  let separator =
-    GMisc.separator `HORIZONTAL ~packing: box1#pack () in
-
-  let box3 = GPack.vbox ~spacing: 10 ~border_width: 10
-      ~packing: box1#pack () in
-
-  let button = GButton.button ~label: "close" ~packing: box3#add () in
-  button#connect#clicked ~callback:Main.quit;
-  button#grab_default ();
-
-  window#show ();
-
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/rpn.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/rpn.ml
deleted file mode 100644 (file)
index e701f18..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-(* $Id$ *)
-
-(* reverse polish calculator *)
-
-open GMain
-
-let wow _ = prerr_endline "Wow!"; ()
-let main () =
-  let stack = Stack.create () in       
-
-  (* toplevel window *)
-  let window =
-    GWindow.window ~border_width: 10 ~title:"Reverse Polish Calculator" () in
-  window#connect#destroy ~callback:Main.quit;
-
-
-  (* vbox *)
-  let vbx = GPack.vbox ~packing:window#add () in
-
-  (* entry *)
-  let entry =
-    GEdit.entry ~text:"0" ~editable:false ~max_length: 20 ~packing: vbx#add () in
-
-  (* BackSpace, Clear, All Clear, Quit *) 
-  let table0 = GPack.table ~rows:1 ~columns:4 ~packing:vbx#add () in
-  let bs_clicked _ = begin
-    let txt = entry#text in
-    let len = String.length txt in 
-    if len <= 1 then
-      entry#set_text "0"
-    else entry#set_text (String.sub txt ~pos:0 ~len:(len-1))
-  end in
-  let c_clicked _ = entry#set_text("0") in
-  let ac_clicked _ = Stack.clear stack; entry#set_text("0") in
-  let labels0 = [("BS", bs_clicked) ; ("C", c_clicked);
-                ("AC", ac_clicked); ("Quit", window#destroy)] in
-  let rec loop0 labels n =
-    match labels 
-    with  [] -> ()
-        | (lbl, cb) :: t  ->
-    let button =
-      GButton.button ~label:lbl
-        ~packing:(table0#attach ~left:n ~top:1 ~expand:`BOTH) () in
-    button#connect#clicked ~callback:cb;
-    loop0 t (n+1) in
-  loop0 labels0 1;
-
-  (* Numerals *)
-  let table1 = GPack.table ~rows:4 ~columns:5 ~packing:vbx#add () in
-  let labels1 = ["7"; "8"; "9"; "4"; "5"; "6"; "1"; "2"; "3"; "0"] in
-  let numClicked n _ =
-     let txt = entry#text in
-     if (txt = "0") then
-       entry#set_text n
-     else begin
-       entry#append_text n
-     end in
-  let rec loop1 labels n =
-    match labels with [] -> ()
-    | lbl :: lbls ->
-        let button = GButton.button ~label:(" "^lbl^" ")
-           ~packing:(table1#attach ~left:(n mod 3) ~top:(n/3) ~expand:`BOTH)
-            () in
-        button#connect#clicked ~callback:(numClicked lbl);
-        loop1 lbls (n+1) in
-  loop1 labels1 0; 
-
-  (* Period *)
-  let periodClicked _ = 
-     let txt = entry#text in
-     if (String.contains txt '.') then begin
-       Printf.printf "\a";
-        flush stdout;
-     end
-     else
-       entry#append_text "." in
-  (GButton.button ~label:" . "
-     ~packing:(table1#attach ~left:1 ~top:3 ~expand:`BOTH) ())
-    #connect#clicked ~callback:periodClicked;
-
-  (* Enter (Push) *)
-  let enterClicked _ =
-     let txt = entry#text in
-     let n = float_of_string txt in begin
-       Stack.push n stack;
-       entry#set_text "0"
-     end in
-  (GButton.button ~label:"Ent"
-     ~packing:(table1#attach ~left:2 ~top:3 ~expand:`BOTH) ())
-    #connect#clicked ~callback:enterClicked;
-
-  (* Operators *)
-  let op2Clicked op _ =
-    let n1 = float_of_string (entry#text) in
-    let n2 = Stack.pop stack in
-    entry#set_text (string_of_float (op n2 n1)) 
-  in
-  let op1Clicked op _ =
-    let n1 = float_of_string (entry#text) in
-    entry#set_text (string_of_float (op n1)) 
-  in
-  let modClicked _ =
-    let n1 = int_of_string (entry#text) in
-    let n2 = truncate (Stack.pop stack) in
-    entry#set_text (string_of_int (n2 mod n1))
-  in
-  let labels2 = [(" / ", op2Clicked (/.)); (" * ", op2Clicked ( *. ));
-                (" - ", op2Clicked (-.)); (" + ", op2Clicked (+.));
-                ("mod", modClicked); (" ^ ", op2Clicked ( ** ));
-                ("+/-", op1Clicked (~-.));
-                 ("1/x", op1Clicked (fun x -> 1.0/.x))] in
-  let rec loop2 labels n =
-    match labels
-    with [] -> ()
-    | (lbl, cb) :: t ->
-       let button = GButton.button ~label:lbl
-            ~packing:(table1#attach ~left:(3 + n/4) ~top: (n mod 4)
-                        ~expand:`BOTH)
-            () in
-       button#connect#clicked ~callback:cb;
-       loop2 t (n+1)
-  in
-  loop2 labels2 0;
-
-  (* show all and enter event loop *)
-  window#show ();
-  Main.main ()
-
-let _ = Printexc.print main()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/scrolledwin.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/scrolledwin.ml
deleted file mode 100644 (file)
index 8f4bee2..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-  let window = GWindow.dialog ~title: "dialog"
-      ~border_width: 10 ~width: 300 ~height: 300 () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let scrolled_window = GBin.scrolled_window
-      ~border_width: 10 ~hpolicy: `AUTOMATIC ~packing: window#vbox#add ()
-  in
-
-  let table = GPack.table ~rows:10 ~columns:10
-      ~row_spacings: 10 ~col_spacings: 10
-      ~packing: scrolled_window#add_with_viewport ()
-  in
-
-  for i = 0 to 9 do
-    for j = 0 to 9 do
-      let label = Printf.sprintf "button (%d,%d)\n" i j in
-      GButton.toggle_button ~label
-        ~packing:(table#attach ~left: i ~top: j ~expand: `BOTH) ()
-    done
-  done;
-
-  let button =
-    GButton.button ~label: "close" ~packing: window#action_area#add () in
-  button#connect#clicked ~callback: Main.quit;
-  button#grab_default ();
-  window#show ();
-  Main.main ()
-
-let _ = main ()
-    
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/socket.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/socket.ml
deleted file mode 100644 (file)
index 687389c..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-  let w = GWindow.window ~title:"Socket example" () in
-  w#connect#destroy ~callback:Main.quit;
-  let vbox = GPack.vbox ~packing:w#add () in
-  let label = GMisc.label ~packing:vbox#pack () in
-  let socket = GBin.socket ~packing:vbox#add ~height:40 () in
-  label#set_text ("XID to plug into this socket: 0x" ^ 
-                  Int32.format "%x" socket#xwindow);
-  w#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/test.xpm b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/test.xpm
deleted file mode 100644 (file)
index 9b0d2ef..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/* XPM */
-static char *openfile[] = {
-/* width height num_colors chars_per_pixel */
-"    20    19       66            2",
-/* colors */
-".. c None",
-".# c #000000",
-".a c #dfdfdf",
-".b c #7f7f7f",
-".c c #006f6f",
-".d c #00efef",
-".e c #009f9f",
-".f c #004040",
-".g c #00bfbf",
-".h c #ff0000",
-".i c #ffffff",
-".j c #7f0000",
-".k c #007070",
-".l c #00ffff",
-".m c #00a0a0",
-".n c #004f4f",
-".o c #00cfcf",
-".p c #8f8f8f",
-".q c #6f6f6f",
-".r c #a0a0a0",
-".s c #7f7f00",
-".t c #007f7f",
-".u c #5f5f5f",
-".v c #707070",
-".w c #00f0f0",
-".x c #009090",
-".y c #ffff00",
-".z c #0000ff",
-".A c #00afaf",
-".B c #00d0d0",
-".C c #00dfdf",
-".D c #005f5f",
-".E c #00b0b0",
-".F c #001010",
-".G c #00c0c0",
-".H c #000f0f",
-".I c #00007f",
-".J c #005050",
-".K c #002f2f",
-".L c #dfcfcf",
-".M c #dfd0d0",
-".N c #006060",
-".O c #00e0e0",
-".P c #00ff00",
-".Q c #002020",
-".R c #dfc0c0",
-".S c #008080",
-".T c #001f1f",
-".U c #003f3f",
-".V c #007f00",
-".W c #00000f",
-".X c #000010",
-".Y c #00001f",
-".Z c #000020",
-".0 c #00002f",
-".1 c #000030",
-".2 c #00003f",
-".3 c #000040",
-".4 c #00004f",
-".5 c #000050",
-".6 c #00005f",
-".7 c #000060",
-".8 c #00006f",
-".9 c #000070",
-"#. c #7f7f80",
-"## c #9f9f9f",
-/* pixels */
-"........................................",
-"........................................",
-"........................................",
-".......................#.#.#............",
-".....................#.......#...#......",
-"...............................#.#......",
-".......#.#.#.................#.#.#......",
-".....#.y.i.y.#.#.#.#.#.#.#..............",
-".....#.i.y.i.y.i.y.i.y.i.#..............",
-".....#.y.i.y.i.y.i.y.i.y.#..............",
-".....#.i.y.i.y.#.#.#.#.#.#.#.#.#.#.#....",
-".....#.y.i.y.#.s.s.s.s.s.s.s.s.s.#......",
-".....#.i.y.#.s.s.s.s.s.s.s.s.s.#........",
-".....#.y.#.s.s.s.s.s.s.s.s.s.#..........",
-".....#.#.s.s.s.s.s.s.s.s.s.#............",
-".....#.#.#.#.#.#.#.#.#.#.#..............",
-"........................................",
-"........................................",
-"........................................"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/testdnd.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/testdnd.ml
deleted file mode 100644 (file)
index 8c10f7b..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-(* this is a translation in Caml of the gtk+ example testdnd.c  *)
-
-
-open Gaux
-open Gtk
-open GObj
-open GMain
-
-(* GtkThread.start() *)
-
-let drag_icon_xpm = [|
-"36 48 9 1";
-"      c None";
-".     c #020204";
-"+     c #8F8F90";
-"@     c #D3D3D2";
-"#     c #AEAEAC";
-"$     c #ECECEC";
-"%     c #A2A2A4";
-"&     c #FEFEFC";
-"*     c #BEBEBC";
-"               .....................";
-"              ..&&&&&&&&&&&&&&&&&&&.";
-"             ...&&&&&&&&&&&&&&&&&&&.";
-"            ..&.&&&&&&&&&&&&&&&&&&&.";
-"           ..&&.&&&&&&&&&&&&&&&&&&&.";
-"          ..&&&.&&&&&&&&&&&&&&&&&&&.";
-"         ..&&&&.&&&&&&&&&&&&&&&&&&&.";
-"        ..&&&&&.&&&@&&&&&&&&&&&&&&&.";
-"       ..&&&&&&.*$%$+$&&&&&&&&&&&&&.";
-"      ..&&&&&&&.%$%$+&&&&&&&&&&&&&&.";
-"     ..&&&&&&&&.#&#@$&&&&&&&&&&&&&&.";
-"    ..&&&&&&&&&.#$**#$&&&&&&&&&&&&&.";
-"   ..&&&&&&&&&&.&@%&%$&&&&&&&&&&&&&.";
-"  ..&&&&&&&&&&&.&&&&&&&&&&&&&&&&&&&.";
-" ..&&&&&&&&&&&&.&&&&&&&&&&&&&&&&&&&.";
-"................&$@&&&@&&&&&&&&&&&&.";
-".&&&&&&&+&&#@%#+@#@*$%$+$&&&&&&&&&&.";
-".&&&&&&&+&&#@#@&&@*%$%$+&&&&&&&&&&&.";
-".&&&&&&&+&$%&#@&#@@#&#@$&&&&&&&&&&&.";
-".&&&&&&@#@@$&*@&@#@#$**#$&&&&&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&@%&%$&&&&&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.";
-".&&&&&&&&$#@@$&&&&&&&&&&&&&&&&&&&&&.";
-".&&&&&&&&&+&$+&$&@&$@&&$@&&&&&&&&&&.";
-".&&&&&&&&&+&&#@%#+@#@*$%&+$&&&&&&&&.";
-".&&&&&&&&&+&&#@#@&&@*%$%$+&&&&&&&&&.";
-".&&&&&&&&&+&$%&#@&#@@#&#@$&&&&&&&&&.";
-".&&&&&&&&@#@@$&*@&@#@#$#*#$&&&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&&&$%&%$&&&&&&&&.";
-".&&&&&&&&&&$#@@$&&&&&&&&&&&&&&&&&&&.";
-".&&&&&&&&&&&+&$%&$$@&$@&&$@&&&&&&&&.";
-".&&&&&&&&&&&+&&#@%#+@#@*$%$+$&&&&&&.";
-".&&&&&&&&&&&+&&#@#@&&@*#$%$+&&&&&&&.";
-".&&&&&&&&&&&+&$+&*@&#@@#&#@$&&&&&&&.";
-".&&&&&&&&&&$%@@&&*@&@#@#$#*#&&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&$%&%$&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.";
-".&&&&&&&&&&&&&&$#@@$&&&&&&&&&&&&&&&.";
-".&&&&&&&&&&&&&&&+&$%&$$@&$@&&$@&&&&.";
-".&&&&&&&&&&&&&&&+&&#@%#+@#@*$%$+$&&.";
-".&&&&&&&&&&&&&&&+&&#@#@&&@*#$%$+&&&.";
-".&&&&&&&&&&&&&&&+&$+&*@&#@@#&#@$&&&.";
-".&&&&&&&&&&&&&&$%@@&&*@&@#@#$#*#&&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&&&&&$%&%$&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.";
-"...................................." |]
-
-
-
-let trashcan_closed_xpm = [|
-"64 80 17 1";
-"      c None";
-".     c #030304";
-"+     c #5A5A5C";
-"@     c #323231";
-"#     c #888888";
-"$     c #1E1E1F";
-"%     c #767677";
-"&     c #494949";
-"*     c #9E9E9C";
-"=     c #111111";
-"-     c #3C3C3D";
-";     c #6B6B6B";
-">     c #949494";
-",     c #282828";
-"'     c #808080";
-")     c #545454";
-"!     c #AEAEAC";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                       ==......=$$...===                        ";
-"                 ..$------)+++++++++++++@$$...                  ";
-"             ..=@@-------&+++++++++++++++++++-....              ";
-"          =.$$@@@-&&)++++)-,$$$$=@@&+++++++++++++,..$           ";
-"         .$$$$@@&+++++++&$$$@@@@-&,$,-++++++++++;;;&..          ";
-"        $$$$,@--&++++++&$$)++++++++-,$&++++++;%%'%%;;$@         ";
-"       .-@@-@-&++++++++-@++++++++++++,-++++++;''%;;;%*-$        ";
-"       +------++++++++++++++++++++++++++++++;;%%%;;##*!.        ";
-"        =+----+++++++++++++++++++++++;;;;;;;;;;;;%'>>).         ";
-"         .=)&+++++++++++++++++;;;;;;;;;;;;;;%''>>#>#@.          ";
-"          =..=&++++++++++++;;;;;;;;;;;;;%###>>###+%==           ";
-"           .&....=-+++++%;;####''''''''''##'%%%)..#.            ";
-"           .+-++@....=,+%#####'%%%%%%%%%;@$-@-@*++!.            ";
-"           .+-++-+++-&-@$$=$=......$,,,@;&)+!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           =+-++-+++-+++++++++!++++!++++!+++!++!+++=            ";
-"            $.++-+++-+++++++++!++++!++++!+++!++!+.$             ";
-"              =.++++++++++++++!++++!++++!+++!++.=               ";
-"                 $..+++++++++++++++!++++++...$                  ";
-"                      $$=.............=$$                       ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                "  |]
-
-let trashcan_open_xpm = [|
-"64 80 17 1";
-"      c None";
-".     c #030304";
-"+     c #5A5A5C";
-"@     c #323231";
-"#     c #888888";
-"$     c #1E1E1F";
-"%     c #767677";
-"&     c #494949";
-"*     c #9E9E9C";
-"=     c #111111";
-"-     c #3C3C3D";
-";     c #6B6B6B";
-">     c #949494";
-",     c #282828";
-"'     c #808080";
-")     c #545454";
-"!     c #AEAEAC";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                      .=.==.,@                  ";
-"                                   ==.,@-&&&)-=                 ";
-"                                 .$@,&++;;;%>*-                 ";
-"                               $,-+)+++%%;;'#+.                 ";
-"                            =---+++++;%%%;%##@.                 ";
-"                           @)++++++++;%%%%'#%$                  ";
-"                         $&++++++++++;%%;%##@=                  ";
-"                       ,-++++)+++++++;;;'#%)                    ";
-"                      @+++&&--&)++++;;%'#'-.                    ";
-"                    ,&++-@@,,,,-)++;;;'>'+,                     ";
-"                  =-++&@$@&&&&-&+;;;%##%+@                      ";
-"                =,)+)-,@@&+++++;;;;%##%&@                       ";
-"               @--&&,,@&)++++++;;;;'#)@                         ";
-"              ---&)-,@)+++++++;;;%''+,                          ";
-"            $--&)+&$-+++++++;;;%%'';-                           ";
-"           .,-&+++-$&++++++;;;%''%&=                            ";
-"          $,-&)++)-@++++++;;%''%),                              ";
-"         =,@&)++++&&+++++;%'''+$@&++++++                        ";
-"        .$@-++++++++++++;'#';,........=$@&++++                  ";
-"       =$@@&)+++++++++++'##-.................=&++               ";
-"      .$$@-&)+++++++++;%#+$.....................=)+             ";
-"      $$,@-)+++++++++;%;@=........................,+            ";
-"     .$$@@-++++++++)-)@=............................            ";
-"     $,@---)++++&)@===............................,.            ";
-"    $-@---&)))-$$=..............................=)!.            ";
-"     --&-&&,,$=,==...........................=&+++!.            ";
-"      =,=$..=$+)+++++&@$=.............=$@&+++++!++!.            ";
-"           .)-++-+++++++++++++++++++++++++++!++!++!.            ";
-"           .+-++-+++++++++++++++++++++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!+++!!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           =+-++-+++-+++++++++!++++!++++!+++!++!+++=            ";
-"            $.++-+++-+++++++++!++++!++++!+++!++!+.$             ";
-"              =.++++++++++++++!++++!++++!+++!++.=               ";
-"                 $..+++++++++++++++!++++++...$                  ";
-"                      $$==...........==$$                       ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                "  |]
-
-let window = GWindow.window ~title:"DnD Test" ()
-let _ = window#misc#realize ()
-
-let drag_icon =
-  GDraw.pixmap_from_xpm_d ~data:drag_icon_xpm ~window ()
-
-let trashcan_open =
-  GDraw.pixmap_from_xpm_d ~data:trashcan_open_xpm ~window ()
-
-let trashcan_closed =
-  GDraw.pixmap_from_xpm_d ~data:trashcan_closed_xpm ~window ()
-
-let targets = [
-  { target = "STRING"; flags = []; info = 0};
-  { target = "text/plain"; flags = []; info = 0};
-  { target = "text/uri-list"; flags = []; info = 2};
-  { target = "application/x-rootwin-drop"; flags = []; info = 1}
-]
-
-class drag_handler = object
-  method private beginning (_ : drag_context) = ()
-  method private data_delete (_ : drag_context) = ()
-  method private data_get (_ : drag_context) (_ : selection_data)
-      ~info:(_ : int) ~time:(_ : int) = ()
-  method private data_received (_ : drag_context) ~x:(_ : int) ~y:(_ : int)
-      (_ : selection_data) ~info:(_ : int) ~time:(_ : int) = ()
-  method private drop (_ : drag_context) ~x:(_ : int) ~y:(_ : int)
-      ~time:(_ : int) = false
-  method private ending (_ : drag_context) = ()
-  method private leave (_ : drag_context) ~time:(_ : int) = ()
-  method private motion (_ : drag_context) ~x:(_ : int) ~y:(_ : int)
-      ~time:(_ : int) = false
-end
-
-
-class target_drag ?packing ?show () =
-  let pixmap = GMisc.pixmap trashcan_closed ?packing ?show () in
-object (self)
-  inherit widget pixmap#as_widget
-  inherit drag_handler
-  val mutable have_drag = false
-
-  method leave _ ~time =
-    print_endline "leave"; flush stdout;
-    have_drag <- false;
-    pixmap#set_pixmap trashcan_closed
-
-  method motion context ~x ~y ~time =
-    if not have_drag then begin
-      have_drag <- true;
-      pixmap#set_pixmap trashcan_open
-    end;
-    let source_typename =
-      try
-       context#source_widget#misc#get_type
-      with Gpointer.Null -> "unknown"
-    in
-    Printf.printf "motion, source %s\n" source_typename; flush stdout;
-    context#status [context#suggested_action] ~time;
-    true
-
-  method drop context ~x ~y ~time =
-    prerr_endline "drop"; flush stdout;
-    have_drag <- false;
-    pixmap#set_pixmap trashcan_closed;
-    match context#targets with
-    | [] -> false
-    | d :: _ -> pixmap#drag#get_data d ~context ~time; true
-
-  method data_received context ~x ~y data ~info ~time =
-    if data#format = 8 then begin
-      Printf.printf "Received \"%s\" in trashcan\n" data#data;
-      flush stdout;
-      context#finish ~success:true ~del:false ~time
-    end
-    else context#finish ~success:false ~del:false ~time
-
-  initializer
-    pixmap#drag#dest_set targets ~actions:[`COPY;`MOVE];
-    pixmap#drag#connect#leave ~callback:self#leave;
-    pixmap#drag#connect#motion ~callback:self#motion;
-    pixmap#drag#connect#drop ~callback:self#drop;
-    pixmap#drag#connect#data_received ~callback:self#data_received;
-    ()
-end
-
-class label_drag ?packing ?show () =
-  let label = GMisc.label ~text:"Drop Here\n" ?packing ?show () in
-object (self)
-  inherit widget label#as_widget
-  inherit drag_handler
-  method data_received context ~x ~y data ~info ~time =
-    if data#format = 8 then  begin
-      Printf.printf "Received \"%s\" in label\n" data#data;
-      flush stdout;
-      context#finish ~success:true ~del:false ~time
-    end
-    else context#finish ~success:false ~del:false ~time
-
-  initializer
-    label#drag#dest_set targets ~actions:[`COPY; `MOVE ];
-    label#drag#connect#data_received ~callback:self#data_received;
-    ()
-end
-
-class source_drag ?packing ?show () =
-  let button = GButton.button ~label:"Drag Here\n" ?packing ?show () in
-object (self)
-  inherit widget button#as_widget
-  inherit drag_handler
-  method data_get _ data ~info ~time =
-    if info = 1 then begin
-      print_endline "I was dropped on the rootwin"; flush stdout
-    end
-    else if info = 2 then
-      data#set ~typ:data#target ~format:8
-       ~data:"file:///home/otaylor/images/weave.png"
-    else
-      data#set ~typ:data#target ~format:8 ~data:"I'm Data!"
-
-  method data_delete _ =
-    print_endline "Delete the data!"; flush stdout
-
-  initializer
-    button#drag#source_set targets
-      ~modi:[`BUTTON1; `BUTTON3 ] ~actions:[`COPY; `MOVE ];
-    button#drag#source_set_icon drag_icon;
-    button#drag#connect#data_get ~callback:self#data_get;
-    button#drag#connect#data_delete ~callback:self#data_delete;
-    ()
-end
-
-class popup () = object (self)
-  inherit drag_handler
-  val mutable popup_window = (None : GWindow.window option)
-  val mutable popped_up = false
-  val mutable in_popup = false
-  val mutable popdown_timer = None
-  val mutable popup_timer = None
-
-  method timer = popup_timer
-  method remove_timer () =
-    may popup_timer
-      ~f:(fun pdt -> Timeout.remove pdt; popup_timer <- None)
-  method add_timer time ~callback =
-    popup_timer <- Some (Timeout.add ~ms:time ~callback)
-
-  method popdown () =
-    popdown_timer <- None;
-    may popup_window ~f:(fun w -> w#misc#hide ());
-    popped_up <- false;
-    false
-
-  method motion (_ : drag_context) ~x ~y ~time =
-    if not in_popup then begin
-      in_popup <- true;
-      may popdown_timer ~f:
-       begin fun pdt ->
-         print_endline "removed popdown"; flush stdout;
-         Timeout.remove pdt;
-         popdown_timer <- None
-       end
-    end;
-    true
-
-  method leave (_ : drag_context) ~time =
-    if in_popup then begin
-      in_popup <- false;
-      if popdown_timer = None then begin
-       print_endline "added popdown"; flush stdout;
-       popdown_timer <- Some (Timeout.add ~ms:500 ~callback:self#popdown)
-      end
-    end
-
-  method popup () =
-    if not popped_up then begin
-      if popup_window = None then begin
-       let w = GWindow.window ~kind:`POPUP ~position:`MOUSE () in
-       popup_window <- Some w;
-       let table = GPack.table ~rows:3 ~columns:3 ~packing:w#add () in
-       for i = 0 to 2 do
-         for j = 0 to 2 do
-           let button =
-             GButton.button ~label:(string_of_int i ^ "," ^ string_of_int j)
-               ~packing:(table#attach ~left:i ~top:j ~expand:`BOTH) ()
-           in
-           button#drag#dest_set targets ~actions:[`COPY; `MOVE ];
-           button#drag#connect#motion ~callback:self#motion;
-           button#drag#connect#leave ~callback:self#leave;
-         done
-       done
-      end;
-      may popup_window ~f:(fun w -> w#show ());
-      popped_up <- true
-    end;
-    popdown_timer <- Some (Timeout.add ~ms:500 ~callback:self#popdown);
-    print_endline "added popdown"; flush stdout;
-    self#remove_timer ();
-    false
-end
-
-class popsite ?packing ?show () =
-  let label = GMisc.label ~text:"Popup\n" ?packing ?show ()
-  and popup = new popup () in
-object (self)
-  inherit widget label#as_widget
-  inherit drag_handler
-  method motion _ ~x ~y ~time =
-    if popup#timer = None then begin
-      print_endline "added popdown"; flush stdout;
-      popup#add_timer 500 ~callback:popup#popup
-    end;
-    true
-
-  method leave _ ~time =
-    popup#remove_timer ()
-
-  initializer
-    label#drag#dest_set targets ~actions:[`COPY; `MOVE ];
-    label#drag#connect#motion ~callback:self#motion;
-    label#drag#connect#leave ~callback:self#leave;
-    ()
-end
-
-let main () =
-  window#connect#destroy ~callback: Main.quit;
-  let table = GPack.table ~rows:2 ~columns:2 ~packing:window#add () in
-  let attach = table#attach ~expand:`BOTH in
-  new label_drag ~packing:(attach ~left:0 ~top:0) ();
-  new target_drag ~packing:(attach ~left:1 ~top:0) ();
-  new source_drag ~packing:(attach ~left:0 ~top:1) ();
-  new popsite ~packing:(attach ~left:1 ~top:1) ();
-
-  window#show ();
-  Main.main ()
-
-let _ =
-  main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/testgtk.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/testgtk.ml
deleted file mode 100644 (file)
index 6c937f5..0000000
+++ /dev/null
@@ -1,1140 +0,0 @@
-(* $Id$ *)
-
-open GdkKeysyms
-open GMain
-open GObj
-
-let create_bbox direction title spacing child_w child_h layout =
-  let frame = GBin.frame ~label: title () in
-  let bbox = GPack.button_box direction ~border_width: 5 ~packing: frame#add 
-      ~layout: layout ~child_height: child_h ~child_width: child_w
-      ~spacing: spacing () in
-  GButton.button ~label: "OK"     ~packing: bbox#add ();
-  GButton.button ~label: "Cancel" ~packing: bbox#add ();
-  GButton.button ~label: "Help"   ~packing: bbox#add ();
-  frame#coerce
-
-let create_button_box =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "Button Boxes" ~border_width: 0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let main_vbox = GPack.vbox ~packing: (window#add) () in
-
-       let frame_horz = GBin.frame ~label: "Horizontal Button Boxes"
-           ~packing:(main_vbox#pack ~expand:true ~fill:true ~padding:10) () in
-       
-       let vbox = GPack.vbox ~border_width: 10 ~packing: frame_horz#add () in
-       
-       vbox#add  (create_bbox `HORIZONTAL "Spread" 40 85 20 `SPREAD);
-       vbox#pack (create_bbox `HORIZONTAL "Edge"   40 85 20 `EDGE) 
-          ~expand: true ~fill: true ~padding: 5;
-       vbox#pack (create_bbox `HORIZONTAL "Start"  40 85 20 `START)
-          ~expand: true ~fill: true ~padding: 5;
-       vbox#pack (create_bbox `HORIZONTAL "End"    40 85 20 `END)
-          ~expand: true ~fill: true ~padding: 5;
-
-       let frame_vert = GBin.frame ~label: "Vertical Button Boxes"
-           ~packing:(main_vbox#pack ~expand:true ~fill:true ~padding:10) () in
-       
-       let hbox = GPack.hbox ~border_width: 10 ~packing: frame_vert#add () in
-       hbox#add  (create_bbox `VERTICAL "Spread" 30 85 20 `SPREAD);
-       hbox#pack (create_bbox `VERTICAL "Edge"   30 85 20 `EDGE)
-          ~expand: true ~fill: true ~padding: 5;
-       hbox#pack (create_bbox `VERTICAL "Start"  30 85 20 `START)
-          ~expand: true ~fill: true ~padding: 5;
-       hbox#pack (create_bbox `VERTICAL "End"    30 85 20 `END)
-          ~expand: true ~fill: true ~padding: 5;
-       window #show () 
-
-    | Some window -> window #destroy ()
-in aux
-
-
-let button_window button _ =
-  if button #misc#visible then
-    button #misc#hide ()
-  else
-    button #misc#show ()
-
-let create_buttons =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "GtkButton" ~border_width: 0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let box1 = GPack.vbox ~packing:window#add () in
-       
-       let table = GPack.table ~rows:3 ~columns:3 ~homogeneous:false 
-           ~row_spacings:3 ~col_spacings:3 ~border_width:10
-           ~packing:box1#add () in
-
-       let button = Array.create 9 (GButton.button ~label:"button1" ()) in
-       for i = 2 to 9 do
-         button.(i-1) <- GButton.button ~label:("button" ^ string_of_int i) ();
-       done;
-
-       let f i l r t b =
-         button.(i) #connect#clicked ~callback:(button_window button.(i+1));
-         table #attach button.(i)#coerce ~left:l ~right:r ~top:t ~bottom:b
-           ~xpadding:0 ~ypadding:0 ~expand:`BOTH
-       in
-       f 0 0 1 0 1;
-       f 1 1 2 1 2;
-       f 2 2 3 2 3;
-       f 3 0 1 2 3;
-       f 4 2 3 0 1;
-       f 5 1 2 2 3;
-       f 6 1 2 0 1;
-       f 7 2 3 1 2;
-       button.(8) #connect#clicked ~callback:(button_window button.(0)); 
-       table #attach button.(8)#coerce ~left:0 ~right:1 ~top:1 ~bottom:2
-         ~xpadding:0 ~ypadding:0 ~expand:`BOTH;
-
-       GMisc.separator `HORIZONTAL ~packing:box1#pack ();
-       
-       let box2 = GPack.vbox ~spacing: 10 ~border_width: 10
-            ~packing: box1#pack () in
-
-       let button = GButton.button ~label: "close" ~packing: box2#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-       window #show ()
-
-    | Some window -> window #destroy ()
-in aux
-
-
-
-let create_check_buttons =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "GtkCheckButton"
-           ~border_width: 0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let box1 = GPack.vbox ~packing:window#add () in
-       let box2 = GPack.vbox ~spacing: 10 ~border_width: 10
-           ~packing: box1#pack () in
-       
-       for i = 1 to 3 do
-         GButton.check_button ~label:("button" ^ (string_of_int i))
-           ~packing: box2#add ();
-       done;
-
-       GMisc.separator `HORIZONTAL ~packing: box1#pack ();
-       
-       let box2 = GPack.vbox ~spacing:10 ~border_width:10
-           ~packing: box1#pack () in
-
-       let button = GButton.button ~label: "close" ~packing:box2#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-       window #show ()
-       
-    | Some window ->  window #destroy ()
-in aux
-
-
-let create_radio_buttons =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "radio buttons"
-           ~border_width: 0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let box1 = GPack.vbox ~packing:window#add () in
-       
-       let box2 = GPack.vbox ~spacing:10 ~border_width:10 
-           ~packing: box1#pack () in
-       
-       let button = GButton.radio_button ~label:"button1"
-           ~packing: box2#add () in
-
-       let button = GButton.radio_button ~label:"button2" ~group:button#group
-           ~packing: box2#add ~active:true () in
-       
-       let button = GButton.radio_button ~label:"button3" ~group:button#group
-           ~packing: box2#add () in
-
-       GMisc.separator `HORIZONTAL ~packing: box1#pack ();
-       
-       let box2 = GPack.vbox ~spacing:10 ~border_width:10
-            ~packing: box1#pack () in
-
-       let button = GButton.button ~label: "close" ~packing: box2#add () in
-       button #connect#clicked ~callback: window #destroy;
-       button #grab_default ();
-       window #show ()
-       
-    | Some window -> window #destroy ()
-in aux
-
-
-let create_toggle_buttons =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "GtkToggleButton"
-           ~border_width: 0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let box1 = GPack.vbox ~packing: window#add () in
-       
-       let box2 = GPack.vbox ~spacing: 10 ~border_width: 10
-           ~packing: box1#pack () in
-       
-       for i = 1 to 3 do
-         GButton.toggle_button ~label:("button" ^ (string_of_int i))
-           ~packing: box2#add ()
-       done;
-
-       GMisc.separator `HORIZONTAL ~packing: box1#pack ();
-       
-       let box2 = GPack.vbox ~spacing: 10 ~border_width: 10
-           ~packing: box1#pack () in
-
-       let button = GButton.button ~label: "close" ~packing:box2#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-       window #show ()
-       
-    | Some window -> window #destroy ()
-in aux
-
-
-(* Menus *)
-
-let create_menu depth tearoff =
-  let rec aux depth tearoff =
-    let menu = GMenu.menu () and group = ref None in
-    if tearoff then ignore (GMenu.tearoff_item ~packing: menu#append ());
-    for i = 0 to 4 do
-      let menuitem = GMenu.radio_menu_item ?group:!group
-         ~label:("item " ^ string_of_int depth ^ " - " ^ string_of_int (i+1))
-         ~packing:menu#append ~show_toggle:(depth mod 2 <> 0)
-         () in
-      group := Some (menuitem #group);
-      if i = 3 then menuitem #misc#set_sensitive false;
-      if depth > 1 then
-       menuitem #set_submenu (aux (depth-1) true)
-    done;
-
-    menu
-  in aux depth tearoff
-
-
-let create_menus =
-  let rw = ref None in
-  fun () ->
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "menus"
-           ~border_width: 0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-       window #event#connect#delete ~callback:(fun _ -> true);
-
-       let accel_group = GtkData.AccelGroup.create () in
-       window #add_accel_group accel_group  ;
-
-       let box1 = GPack.vbox ~packing:window#add () in
-
-       let menubar = GMenu.menu_bar ~packing: box1#pack () in
-
-       let menuitem = GMenu.menu_item ~label:"test\nline2"
-           ~packing: menubar#append () in
-       menuitem #set_submenu (create_menu 2 true);
-
-       let menuitem = GMenu.menu_item ~label:"foo"
-           ~packing: menubar#append () in
-       menuitem #set_submenu (create_menu 3 true);
-       menuitem #right_justify ();
-
-       let box2 = GPack.vbox ~spacing: 10 ~packing: box1#add
-           ~border_width: 10 () in
-
-       let menu = create_menu 1 false in
-       menu #set_accel_group accel_group;
-
-       let menuitem = GMenu.check_menu_item ~label:"Accelerate Me"
-           ~packing:menu#append () in
-       menuitem #add_accelerator ~group:accel_group _M
-         ~flags:[`VISIBLE; `SIGNAL_VISIBLE];
-
-       let menuitem = GMenu.check_menu_item ~label:"Accelerator Locked"
-           ~packing:menu#append () in
-       menuitem #add_accelerator ~group:accel_group _L
-         ~flags:[`VISIBLE; `LOCKED];
-
-       let menuitem = GMenu.check_menu_item ~label:"Accelerators Frozen"
-           ~packing:menu#append () in
-       menuitem #add_accelerator ~group:accel_group _F
-         ~flags:[`VISIBLE];
-       menuitem #misc#lock_accelerators ();
-
-       let optionmenu = GMenu.option_menu ~packing: box2#add () in
-       optionmenu #set_menu menu;
-       optionmenu #set_history 3;
-
-       GMisc.separator `HORIZONTAL ~packing: box1#pack ();
-
-       let box2 = GPack.vbox ~spacing:10 ~border_width:10
-           ~packing: box1#pack () in
-
-       let button = GButton.button ~label: "close" ~packing: box2#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-       window #show ()
-
-    | Some window -> window #destroy ()
-
-
-
-(* Modal windows *)
-
-let cmw_destroy_cb _ =
-  Main.quit ()
-
-let cmw_color parent _ =
-  let csd = GWindow.color_selection_dialog ~modal:true
-      ~title:"This is a modal color selection dialog" () in
-  csd # set_transient_for parent;
-  csd # connect#destroy ~callback:cmw_destroy_cb;
-  csd # ok_button # connect#clicked ~callback:csd#destroy;
-  csd # cancel_button # connect#clicked ~callback:csd#destroy;
-  csd # show ();
-  Main.main ()
-
-let cmw_file parent _ =
-  let fs = GWindow.file_selection ~modal:true
-      ~title:"This is a modal file selection dialog" () in
-  fs # set_transient_for parent;
-  fs # connect#destroy ~callback:cmw_destroy_cb;
-  fs # ok_button # connect#clicked ~callback:fs#destroy;
-  fs # cancel_button # connect#clicked ~callback:fs#destroy;
-  fs # show ();
-  Main.main ()
-
-let create_modal_window () =
-  let window = GWindow.window ~modal:true ~title:"This window is modal" () in
-  let box1 = GPack.vbox ~spacing:5 ~border_width:3 ~packing:window#add () in
-  let frame1 = GBin.frame ~label:"Standard dialogs in modal form"
-      ~packing:(box1#pack ~expand:true ~padding:4) () in
-  let box2 = GPack.vbox ~homogeneous:true ~spacing:5 ~packing:frame1#add () in
-  let btnColor = GButton.button ~label:"Color" 
-      ~packing:(box2#pack ~padding:4) ()
-  and btnFile = GButton.button ~label:"File selection" 
-      ~packing:(box2#pack ~padding:4) ()
-  and btnClose = GButton.button ~label:"Close" 
-      ~packing:(box2#pack ~padding:4) () in
-  GMisc.separator `HORIZONTAL
-    ~packing:(box1#pack ~padding:4) ();
-  
-  btnClose #connect#clicked ~callback:(fun _ -> window #destroy ());
-  window #connect#destroy ~callback:cmw_destroy_cb;
-  btnColor #connect#clicked ~callback: (cmw_color window);
-  btnFile #connect#clicked ~callback: (cmw_file window);
-  window # show ();
-  Main.main ()
-
-
-(* corrected bug in testgtk.c *)
-let scrolled_windows_remove, scrolled_windows_clean =
-  let parent = ref None and float_parent = ref None in
-  let remove (scrollwin : GBin.scrolled_window) () =
-    match !parent with
-    | None ->
-       parent := scrollwin#misc#parent;
-       let f = GWindow.window ~title:"new parent" () in
-       float_parent := Some f#coerce;
-       f #set_default_size ~width:200 ~height:200;
-       scrollwin #misc#reparent f#coerce;
-       f #show ()
-    | Some p ->
-       scrollwin #misc#reparent p;
-       match !float_parent with
-       | None -> ()
-       | Some f ->
-         f #destroy ();
-       float_parent := None;
-       parent := None
-  and clean () =
-    match !float_parent with
-    | None -> ()
-    | Some p -> p #destroy (); parent := None; float_parent := None
-  in remove, clean
-
-
-(* scrolled windows *)
-
-let create_scrolled_windows =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.dialog ~title:"dialog" ~border_width:0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun  _ -> rw := None);
-       window #connect#destroy ~callback:scrolled_windows_clean;
-
-       let scrolled_window = GBin.scrolled_window ~border_width:10
-           ~hpolicy: `AUTOMATIC ~vpolicy:`AUTOMATIC
-           ~packing: window#vbox#add () in
-
-       let table = GPack.table ~rows:20 ~columns:20 ~row_spacings:10
-           ~col_spacings:10 ~packing:scrolled_window#add_with_viewport () in
-       table #focus#set_hadjustment (Some scrolled_window # hadjustment);
-       table #focus#set_vadjustment (Some scrolled_window # vadjustment);
-
-       for i = 0 to 19 do
-         for j=0 to 19 do
-           GButton.toggle_button
-             ~label:("button ("^ string_of_int i ^","^ string_of_int j ^")\n")
-             ~packing:(table #attach ~left:i ~top:j ~expand:`BOTH) ()
-         done
-       done;
-
-       let button = GButton.button ~label:"close"
-           ~packing:window#action_area#add () in
-       button #connect#clicked ~callback:(window #destroy);
-       button #grab_default ();
-
-       let button = GButton.button ~label:"remove"
-           ~packing:window#action_area#add () in
-       button #connect#clicked
-         ~callback:(scrolled_windows_remove scrolled_window);
-       button #grab_default ();
-       
-       window #set_default_size ~width:300 ~height:300;
-       window #show ()
-
-    | Some window -> window #destroy ()
-  in aux
-
-
-(* Toolbar *)
-
-let make_toolbar (toolbar : GButton.toolbar) window =
-  let icon =
-    let info = GDraw.pixmap_from_xpm ~file:"test.xpm" ~window () in
-    fun () -> (GMisc.pixmap info ())#coerce
-  in
-
-  toolbar #insert_button ~text:"Horizontal"
-    ~tooltip:"Horizontal toolbar layout"
-    ~tooltip_private:"Toolbar/Horizontal"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_orientation `HORIZONTAL) ();
-  
-  toolbar #insert_button ~text:"Vertical"
-    ~tooltip:"Vertical toolbar layout"
-    ~tooltip_private:"Toolbar/Vertical"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_orientation `VERTICAL) ();
-  
-  toolbar #insert_space ();
-  
-  toolbar #insert_button ~text:"Icons"
-    ~tooltip: "Only show toolbar icons"
-    ~tooltip_private:"Toolbar/IconsOnly"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_style `ICONS) ();
-  
-  toolbar #insert_button ~text:"Text"
-    ~tooltip: "Only show toolbar text"
-    ~tooltip_private:"Toolbar/TextOnly"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_style `TEXT) ();
-  
-  toolbar #insert_button ~text:"Both"
-    ~tooltip: "Show toolbar icons and text"
-    ~tooltip_private:"Toolbar/Both"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_style `BOTH) ();
-  
-  toolbar #insert_space ();
-  
-  GEdit.entry ~packing:(toolbar #insert_widget
-                        ~tooltip:"This is an unusable GtkEntry"
-                        ~tooltip_private: "Hey don't click me!!!") ();
-  
-  toolbar #insert_button ~text:"Small"
-    ~tooltip:"Use small spaces"
-    ~tooltip_private:"Toolbar/Small"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_space_size 5) ();
-  
-  toolbar #insert_button ~text:"Big"
-    ~tooltip:"Use big spaces"
-    ~tooltip_private:"Toolbar/Big"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_space_size 10) ();
-  
-  toolbar #insert_space ();
-  
-  toolbar #insert_button ~text:"Enable"
-    ~tooltip:"Enable tooltips"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_tooltips true) ();
-  
-  toolbar #insert_button ~text:"Disable"
-    ~tooltip:"Disable tooltips"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_tooltips false) ();
-  
-  toolbar #insert_space ();
-  
-  toolbar #insert_button ~text:"Borders"
-    ~tooltip:"Show borders"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_button_relief `NORMAL) ();
-  
-  toolbar #insert_button ~text:"Borderless"
-    ~tooltip:"Hide borders"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_button_relief `NONE) ();
-  
-  toolbar #insert_space ();
-  
-  toolbar #insert_button ~text:"Empty"
-    ~tooltip:"Empty spaces"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_space_style `EMPTY) ();
-  
-  toolbar #insert_button ~text:"Lines"
-    ~tooltip:"Lines in spaces"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_space_style `LINE) ();
-  ()
-let create_toolbar =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "Toolbar test"
-           ~border_width: 0 ~allow_shrink: false ~allow_grow: true
-           ~auto_shrink: true () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-       window #misc #realize ();
-       
-       let toolbar = GButton.toolbar ~packing: window#add () in
-       make_toolbar toolbar window;
-       
-       window #show ()
-         
-    | Some window -> window #destroy ()
-  in aux
-
-
-(* Handlebox *)
-
-let handle_box_child_signal action (hb : GBin.handle_box) child =
-  Printf.printf "%s: child <%s> %s\n" hb#misc#get_type child#misc#get_type action
-
-let create_handle_box =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "Handle box test"
-           ~border_width: 20 ~allow_shrink: false ~allow_grow: true
-           ~auto_shrink: true () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-       window #misc #realize ();
-
-       let vbox = GPack.vbox ~packing:window#add () in
-
-       GMisc.label ~text:"Above" ~packing:vbox#add ();
-       GMisc.separator `HORIZONTAL ~packing:vbox#add ();
-
-       let hbox = GPack.hbox ~spacing:10 ~packing:vbox#add () in
-       GMisc.separator `HORIZONTAL ~packing:vbox#add ();
-
-       GMisc.label ~text:"Below" ~packing:vbox#add ();
-       let handle_box = GBin.handle_box ~packing:hbox#pack () in
-       handle_box #connect#child_attached
-         ~callback:(handle_box_child_signal "attached" handle_box);
-       handle_box #connect#child_detached
-         ~callback:(handle_box_child_signal "detached" handle_box);
-
-       let toolbar = GButton.toolbar ~packing:handle_box#add () in
-       make_toolbar toolbar window;
-       toolbar #set_button_relief `NORMAL;
-
-       let handle_box = GBin.handle_box ~packing:hbox#pack () in
-       handle_box #connect#child_attached
-         ~callback:(handle_box_child_signal "attached" handle_box);
-       handle_box #connect#child_detached
-         ~callback:(handle_box_child_signal "detached" handle_box);
-
-       let handle_box2 = GBin.handle_box ~packing:handle_box#add () in
-       handle_box2 #connect#child_attached
-         ~callback:(handle_box_child_signal "attached" handle_box);
-       handle_box2 #connect#child_detached
-         ~callback:(handle_box_child_signal "detached" handle_box);
-
-       GMisc.label ~text:"Fooo!" ~packing:handle_box2#add ();
-       window #show ()
-         
-    | Some window -> window #destroy ()
-  in aux
-
-
-
-(* Tree *)
-
-class tree_and_buttons () =
-object
-  val tree = GTree.tree ()
-  val add_button = GButton.button ~label: "Add Item" ()
-  val remove_button = GButton.button ~label:"Remove Item(s)" ()
-  val subtree_button = GButton.button ~label:"Remove Subtree" ()
-  val mutable nb_item_add = 0
-
-  method tree = tree
-  method add_button = add_button
-  method remove_button = remove_button
-  method subtree_button = subtree_button
-  method nb_item_add = nb_item_add
-  method incr_nb_item_add = nb_item_add <- nb_item_add + 1
-end
-
-let cb_tree_destroy_event w = ()
-
-let cb_add_new_item (treeb : tree_and_buttons) _ =
-  let subtree =
-    match treeb#tree#selection with
-    | []  -> treeb#tree
-    | selected_item :: _ ->
-       match selected_item#subtree with Some t -> t
-       | None ->
-          let t = GTree.tree () in
-          selected_item#set_subtree t;
-          t
-  in
-  let item_new = GTree.tree_item ~packing:(subtree#insert ~pos:0)
-      ~label:("item add " ^ string_of_int treeb # nb_item_add) () in
-  treeb #incr_nb_item_add
-
-
-let cb_remove_item (treeb : tree_and_buttons) _  = 
-  let tree = treeb#tree in
-  match tree #selection with
-  | [] -> ()
-  |  selected -> tree #remove_items selected
-
-
-let cb_remove_subtree (treeb : tree_and_buttons) _ =
-  match treeb#tree #selection with
-  | [] -> ()
-  | selected_item :: _ ->
-    try selected_item#subtree; selected_item#remove_subtree ()
-    with Not_found -> ()
-
-let cb_tree_changed (treeb : tree_and_buttons) _ =
-  let tree = treeb#tree in
-  let nb_selected = List.length (tree#selection) in
-  if nb_selected = 0 then begin
-    treeb # remove_button #misc#set_sensitive false;
-    treeb # subtree_button #misc#set_sensitive false;
-  end else begin
-    treeb # remove_button #misc#set_sensitive true;
-    treeb # subtree_button #misc#set_sensitive (nb_selected = 1);
-    treeb # add_button #misc#set_sensitive (nb_selected = 1);
-  end
-  
-  
-let rec create_subtree (item : GTree.tree_item) level nb_item_max
-    recursion_level_max =
-  if level = recursion_level_max then ()
-  else begin
-    let item_subtree = GTree.tree () in
-    for nb_item = 1 to nb_item_max do
-      let item_new = GTree.tree_item ~packing:(item_subtree#insert ~pos:0)
-         ~label:("item" ^ string_of_int level ^ "-" ^ string_of_int nb_item) ()
-      in
-      create_subtree item_new (level + 1) nb_item_max recursion_level_max;
-    done;
-    item # set_subtree item_subtree
-  end
-
-
-let create_tree_sample selection_mode draw_line view_line no_root_item
-    nb_item_max recursion_level_max =
-  let window = GWindow.window ~title:"Tree Sample" () in
-  let box1 = GPack.vbox ~packing:window#add () in
-  let box2 = GPack.vbox ~packing:box1#add ~border_width:5 () in
-  let scrolled_win = GBin.scrolled_window ~packing:box2#add
-      ~hpolicy: `AUTOMATIC ~vpolicy:`AUTOMATIC
-      ~width:200 ~height:200 () in
-
-  let root_treeb = new tree_and_buttons () in
-  let root_tree = root_treeb#tree in
-  root_tree #connect#selection_changed ~callback:(cb_tree_changed root_treeb);
-  scrolled_win #add_with_viewport root_tree#coerce;
-  root_tree #set_selection_mode selection_mode;
-  root_tree #set_view_lines draw_line;
-  root_tree #set_view_mode
-    (match view_line with `LINE -> `ITEM | `ITEM -> `LINE);
-
-  if no_root_item then
-    for nb_item = 1 to nb_item_max do
-      let item_new = GTree.tree_item ~label:("item0-" ^ string_of_int nb_item)
-         ~packing:(root_tree#insert ~pos:0) () in
-      create_subtree item_new 1 nb_item_max recursion_level_max;
-    done
-  else begin
-    let root_item = GTree.tree_item ~label:"root item"
-       ~packing:(root_tree #insert ~pos:0) () in
-    create_subtree root_item 0 nb_item_max recursion_level_max
-  end;
-
-  let box2 = GPack.vbox ~border_width:5 ~packing:box1#pack () in
-
-  let button = root_treeb #add_button in
-  button #misc#set_sensitive false;
-  button #connect#clicked ~callback:(cb_add_new_item root_treeb);
-  box2 #add button#coerce;
-
-  let button = root_treeb #remove_button in
-  button #misc#set_sensitive false;
-  button #connect#clicked ~callback:(cb_remove_item root_treeb);
-  box2 #add button#coerce;
-
-  let button = root_treeb #subtree_button in
-  button #misc#set_sensitive false;
-  button #connect#clicked ~callback:(cb_remove_subtree root_treeb);
-  box2 #add button#coerce;
-
-  GMisc.separator `HORIZONTAL ~packing:box1#pack ();
-
-  let button = GButton.button ~label:"Close" ~packing:box2#add () in
-  button #connect#clicked ~callback:window#destroy;
-
-  window #show ()
-
-
-let create_tree_mode_window =
-  let rw = ref None in
-  let aux () =
-    let default_number_of_item = 3.0 in
-    let default_recursion_level = 3.0 in
-    let single_button = GButton.radio_button ~label:"SINGLE" () in
-    let browse_button = GButton.radio_button
-       ~group:single_button#group ~label:"BROWSE" () in
-    let multiple_button = GButton.radio_button
-       ~group:browse_button#group ~label:"MULTIPLE" () in
-    let draw_line_button = GButton.check_button ~label:"Draw line" () in
-    let view_line_button = GButton.check_button ~label:"View line mode" () in
-    let no_root_item_button = GButton.check_button
-       ~label:"Without Root item" () in
-    let nb_item_spinner = GEdit.spin_button
-       ~adjustment:(GData.adjustment ~value:default_number_of_item
-          ~lower:1.0 ~upper:255.0 ~step_incr:1.0 ~page_incr:5.0
-          ~page_size:0.0 ()) ~rate:0. ~digits:0 () in
-    let recursion_spinner = GEdit.spin_button
-       ~adjustment:(GData.adjustment ~value:default_recursion_level
-          ~lower:0.0 ~upper:255.0 ~step_incr:1.0 ~page_incr:5.0
-          ~page_size:0.0 ()) ~rate:0. ~digits:0 () in
-    let cb_create_tree _ =
-      let selection_mode =
-       if single_button #active then `SINGLE
-       else if browse_button #active then `BROWSE
-       else `MULTIPLE in
-      let nb_item = nb_item_spinner#value_as_int  in
-      let recursion_level = recursion_spinner#value_as_int in
-      create_tree_sample selection_mode (draw_line_button #active)
-       (if (view_line_button #active) then `ITEM else `LINE)
-       (no_root_item_button #active)
-       nb_item recursion_level
-    in
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title:"Set Tree Parameters" () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let box1 = GPack.vbox ~packing:window#add () in
-
-       let box2 = GPack.vbox ~spacing:5 ~packing:box1#add
-           ~border_width:5 () in
-
-       let box3 = GPack.hbox ~spacing:5 ~packing:box2#add () in
-
-       let frame = GBin.frame ~label:"Selection Mode" ~packing:box3#add ()
-       in
-       
-       let box4 = GPack.vbox ~packing:frame#add ~border_width:5 () in
-
-       box4 #add single_button#coerce;
-       box4 #add browse_button#coerce;
-       box4 #add multiple_button#coerce;
-
-       let frame = GBin.frame ~label:"Options" ~packing:box3#add () in
-       
-       let box4 = GPack.vbox ~packing:frame#add ~border_width:5 () in
-       box4 #add draw_line_button#coerce;
-       draw_line_button #set_active true;
-       
-       box4 #add view_line_button#coerce;
-       view_line_button #set_active true;
-       
-       box4 #add no_root_item_button#coerce;
-
-       let frame = GBin.frame ~label:"Size Parameters" ~packing:box2#add ()
-       in
-
-       let box4 = GPack.hbox ~spacing:5 ~packing:frame#add ~border_width:5 () in
-
-       let box5 = GPack.hbox ~spacing:5 ~packing:box4#add () in
-       let label = GMisc.label ~text:"Number of items : "
-            ~xalign:0. ~yalign:0.5 ~packing:box5#pack () in
-       box5 #pack nb_item_spinner#coerce;
-       
-       let label = GMisc.label ~text:"Depth : " ~xalign:0. ~yalign:0.5
-           ~packing:box5#pack () in
-       box5 #pack recursion_spinner#coerce;
-       
-       GMisc.separator `HORIZONTAL ~packing:box1#pack ();
-
-       let box2 = GPack.hbox ~homogeneous:true ~spacing:10 ~border_width:5
-           ~packing:box1#pack () in
-
-       let button = GButton.button ~label:"Create Tree"
-            ~packing:box2#add () in
-       button #connect#clicked ~callback:cb_create_tree;
-
-       let button = GButton.button ~label: "close" ~packing:box2#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-       window #show ()
-       
-    | Some window -> window #destroy ()
-  in aux
-
-
-
-(* Tooltips *)
-
-let tips_query_widget_entered (toggle : GButton.toggle_button)
-    (tq : GMisc.tips_query) _ ~text ~privat:_  =
-  if toggle #active then begin
-    tq #set_text
-      (match text with
-      | None -> "There is no tip!" | Some _ -> "There is a tip!");
-    GtkSignal.stop_emit ()
-  end
-
-let tips_query_widget_selected (w : #widget option) ~text ~privat:tp _ =
-  (match w with
-  | None -> ()
-  | Some w -> 
-    Printf.printf "Help \"%s\" requested for <%s>\n"
-       (match tp with None -> "None" | Some t -> t)
-       (w #misc#get_type));
-   true
-
-
-let create_tooltips =
-  let rw = ref None in
-  let aux () =
-     match !rw with
-    | None ->
-
-       let window = GWindow.window ~title:"Tooltips"
-           ~border_width:0 ~allow_shrink:false ~allow_grow:false
-           ~auto_shrink:true () in
-       rw := Some window;
-       let tooltips = GData.tooltips () in
-       window #connect#destroy 
-         ~callback:(fun _ -> tooltips #destroy ();  rw := None);
-
-       let box1 = GPack.vbox ~packing:window#add () in
-
-       let box2 = GPack.vbox ~spacing:10 ~border_width:10
-           ~packing:box1#add () in
-
-       let button = GButton.toggle_button ~label:"button1"
-            ~packing:box2#add ()
-       in
-       tooltips #set_tip button#coerce ~text:"This is button1"
-         ~privat:"ContextHelp/buttons/1";
-       
-       let button = GButton.toggle_button ~label:"button2"
-            ~packing:box2#add ()
-       in
-       tooltips #set_tip button#coerce
-         ~text:"This is button 2. This is also a really long tooltip which probably won't fit on a single line and will therefore need to be wrapped. Hopefully the wrapping will work correctly."
-         ~privat:"ContextHelp/buttons/2_long";
-
-       let toggle = GButton.toggle_button ~label:"Override TipsQuery Label" 
-           ~packing:box2#add () in
-       tooltips #set_tip toggle#coerce ~text:"Toggle TipsQuery view."
-         ~privat:"Hi msw! ;)";
-
-       let box3 = GPack.vbox ~spacing:5 ~border_width:5 () in
-
-       let button = GButton.button ~label:"[?]" 
-           ~packing:box3#pack () in
-
-       let tips_query = GMisc.tips_query ~packing:box3#add () in
-       button #connect#clicked ~callback:(tips_query #start);
-
-       tooltips #set_tip button#coerce ~text:"Start the Tooltips Inspector"
-         ~privat:"ContextHelp/buttons/?";
-
-       tips_query #set_caller button#coerce;
-       tips_query #connect#widget_entered
-         ~callback:(tips_query_widget_entered toggle tips_query);
-       tips_query #connect#widget_selected ~callback:tips_query_widget_selected;
-
-       let frame = GBin.frame ~label:"Tooltips Inspector"
-           ~border_width:0 ~packing:(box2#pack ~expand:true ~padding:10) 
-           ~label_xalign:0.5 ~label_yalign:0.0 () in
-       frame #add box3#coerce;
-
-       GMisc.separator `HORIZONTAL ~packing:box1#pack ();
-
-       let box2 = GPack.vbox ~spacing: 10 ~border_width: 10
-           ~packing: box1#pack () in
-
-       let button = GButton.button ~label: "close" ~packing: box2#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-       tooltips #set_tip button#coerce ~text:"Push this button to close window"
-         ~privat:"ContextHelp/buttons/Close";
-
-       window #show ();
-
-    | Some window -> window #destroy ()
-  in aux
-
-
-(* Labels *)
-let create_labels =
-  let rw = ref None in
-  let aux () =
-     match !rw with
-    | None ->
-
-       let window = GWindow.window ~title:"Labels" ~border_width:5 () in
-       rw := Some window;
-       window #connect#destroy 
-         ~callback:(fun _ -> rw := None);
-
-       let hbox = GPack.hbox ~spacing:5 ~packing:window#add () in
-       let vbox = GPack.vbox ~spacing:5 ~packing:hbox#add () in
-
-       let frame = GBin.frame ~label:"Normal Label"
-           ~packing:vbox#pack () in
-       GMisc.label ~text:"This is a normal label" ~packing:frame#add ();
-
-       let frame = GBin.frame ~label:"Multi_line Label"
-           ~packing:vbox#pack () in
-       GMisc.label ~packing:frame#add
-         ~text:"This is a multi-line label.\nSecond line\nThird line" ();
-
-       let frame = GBin.frame ~label:"Left Justified Label"
-           ~packing:vbox#pack () in
-       GMisc.label ~packing:frame#add ~justify:`LEFT
-         ~text:"This is a left justified\nmulti_line label\nThird line" ();
-
-       let frame = GBin.frame ~label:"Right Justified Label"
-           ~packing:vbox#pack () in
-       GMisc.label ~packing:frame#add ~justify:`RIGHT
-         ~text:"This is a right justified\nmulti_line label\nThird line" ();
-
-       let vbox = GPack.vbox ~spacing:5 ~packing:hbox#add () in
-
-       let frame = GBin.frame ~label:"Line wrapped Label"
-           ~packing:vbox#pack () in
-       GMisc.label ~packing:frame#add ~line_wrap:true
-         ~text:"This is an example of a line-wrapped label.  It should not be taking up the entire             width allocated to it, but automatically wraps the words to fit.  The time has come, for all good men, to come to the aid of their party.  The sixth sheik's six sheep's sick.\n     It supports multiple paragraphs correctly, and  correctly   adds many          extra  spaces. " ();
-
-       let frame = GBin.frame ~label:"Underlined Label"
-           ~packing:vbox#pack () in
-       GMisc.label ~text:"This label is underlined!\nThis one is underlined in a quite a funky fashion" ~packing:frame#add
-         ~justify:`LEFT ~pattern:"_________________________ _ _________ _ _____ _ __ __  ___ ____ _____" ();
-
-       window #show ();
-
-    | Some window -> window #destroy ()
-  in aux
-
-
-(* reparent *)
-
-
-let set_parent child old_parent =
-  let name_opt = function
-    | None -> "(NULL)"
-    | Some w -> w#misc#get_type in
-  Printf.printf
-    "set parent for \"%s\": new parent: \"%s\", old parent: \"%s\"\n" 
-    child#misc#get_type
-    (match child#misc#parent with Some p -> p#misc#get_type | None -> "(NULL)")
-    (name_opt old_parent)
-
-let reparent_label (label : GMisc.label) new_parent _ =
-  label #misc#reparent new_parent
-
-
-
-let create_reparent =
-  let rw = ref None in
-  let aux () =
-     match !rw with
-    | None ->
-
-       let window = GWindow.window ~title:"Reparent" ~border_width:5 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let vbox = GPack.vbox ~packing:window#add () in
-       let hbox = GPack.hbox ~spacing:5 ~border_width:10
-            ~packing:vbox#add () in
-
-       let frame = GBin.frame ~label:"Frame1"  ~packing:hbox#add () in
-       let vbox2 = GPack.vbox ~spacing:5 ~border_width:5
-            ~packing:frame#add () in
-       let label = GMisc.label ~text:"Hello world"
-           ~packing:vbox2#pack () in
-       label #misc#connect#parent_set ~callback:(set_parent label);
-       let button = GButton.button ~label:"switch"
-           ~packing:vbox2#pack () in
-       button #connect#clicked ~callback:(reparent_label label vbox2#coerce);
-
-       let frame = GBin.frame ~label:"Frame2"  ~packing:hbox#add () in
-       let vbox2 = GPack.vbox ~spacing:5 ~packing:frame#add ~border_width:5 () in
-       let button = GButton.button ~label:"switch"
-           ~packing:vbox2#pack () in
-       button #connect#clicked ~callback:(reparent_label label vbox2#coerce);
-
-       GMisc.separator `HORIZONTAL ~packing:vbox#pack ();
-
-       let vbox = GPack.vbox ~spacing:10 ~border_width:10
-           ~packing:vbox#pack () in
-
-       let button = GButton.button ~label: "close" ~packing:vbox#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-
-       window #show ();
-
-    | Some window -> window #destroy ()
-  in aux
-
-
-
-
-let create_main_window () =
-  let buttons = [
-    "button box", Some create_button_box;
-    "buttons", Some create_buttons;
-    "check buttons", Some create_check_buttons;
-    "clist", None;
-    "color selection", None;
-    "ctree", None;
-    "cursors", None;
-    "dialog", None;
-    "entry", None;
-    "event watcher", None;
-    "file selection", None;
-    "font selection", None;
-    "gamma curve", None;
-    "handle box", Some create_handle_box;
-    "item factory", None;
-    "labels", Some create_labels;
-    "layout", None;
-    "list", None;
-    "menus", Some create_menus;
-    "modal windows", Some create_modal_window;
-    "notebooks", None;
-    "panes", None;
-    "pixmap", None;
-    "preview color", None;
-    "preview gray", None;
-    "progress bar", None;
-    "radio buttons", Some create_radio_buttons;
-    "range controls", None;
-    "rc file", None;
-    "reparent", Some create_reparent;
-    "rulers", None;
-    "saved position", None;
-    "scrolled windows", Some create_scrolled_windows;
-    "shapes", None;
-    "spinbutton", None;
-    "statusbar", None;
-    "test idle", None;
-    "test mainloop", None;
-    "test scrolling", None;
-    "test selection", None;
-    "test timeout", None;
-    "text", None;
-    "toggle buttons", Some create_toggle_buttons;
-    "toolbar", Some create_toolbar;
-    "tooltips", Some create_tooltips;
-    "tree", Some create_tree_mode_window;
-    "WM hints", None
-  ] in
-
-  let window = GWindow.window ~title:"main window" ~allow_shrink:false
-      ~allow_grow:false ~auto_shrink:false ~width:200 ~height:400 ~x:20 ~y:20 () in
-
-  window #connect#destroy ~callback: Main.quit;
-
-  let box1 = GPack.vbox ~packing: window#add () in
-
-  GMisc.label ~text: "Gtk+ v1.2" ~packing:box1#pack ();
-
-  let scrolled_window = GBin.scrolled_window ~border_width: 10
-      ~hpolicy: `AUTOMATIC ~vpolicy: `AUTOMATIC
-      ~packing:box1#add () in
-
-  let box2 = GPack.vbox ~border_width: 10
-      ~packing:scrolled_window#add_with_viewport () in
-  box2 #focus#set_vadjustment (Some scrolled_window#vadjustment);
-
-  let rec aux = function
-    | [] -> ()
-    | (_,     None) :: tl -> aux tl
-    | (label, Some func) :: tl ->
-       let button = GButton.button ~label: label ~packing: box2#add () in
-       button #connect#clicked ~callback: func;
-       aux tl
-  in aux buttons;
-
-  GMisc.separator `HORIZONTAL ~packing: box1#pack ();
-
-  let box2 = GPack.vbox ~spacing: 10 ~border_width: 10
-      ~packing: box1#pack () in
-
-  let button = GButton.button ~label: "close"  ~packing: box2#add () in
-  button #connect#clicked ~callback: window#destroy;
-  button #grab_default ();
-
-  window #show ();
-
-  Main.main ()
-
-let _ = create_main_window ()
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/testinput.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/testinput.ml
deleted file mode 100644 (file)
index a6aceb8..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-  let window = GWindow.window () in
-  window#misc#set_name "Test input";
-  window#connect#destroy ~callback:Main.quit;
-
-  let vbox = GPack.vbox ~packing:window#add () in
-
-  let drawing_area =
-    GMisc.drawing_area ~width:200 ~height:200 ~packing:vbox#add () in
-
-  drawing_area#event#connect#key_press ~callback:
-    begin fun ev ->
-      let key = GdkEvent.Key.keyval ev in
-      if key >= 32 && key < 256 then
-       Printf.printf "I got a %c\n" (Char.chr key)
-      else
-       print_string "I got another key\n";
-      flush stdout;
-      true
-    end;
-
-  drawing_area#event#add
-    [`EXPOSURE;`LEAVE_NOTIFY;`BUTTON_PRESS;
-     `POINTER_MOTION;`POINTER_MOTION_HINT;`PROXIMITY_OUT];
-  drawing_area#event#set_extensions `ALL;
-  drawing_area#misc#set_can_focus true;
-  drawing_area#misc#grab_focus ();
-
-  GButton.button ~label:"Input Dialog" ~packing:vbox#pack ();
-
-  let button =
-    GButton.button ~label:"Quit" ~packing:vbox#pack () in
-
-  button#connect#clicked ~callback:window#destroy;
-
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/tictactoe.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/tictactoe.ml
deleted file mode 100644 (file)
index be01e19..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-(* $Id$ *)
-
-open GtkNew
-open GtkBase
-
-(* To create a new widget:
-   create an array sig_array containing the signals defined by
-   the new widget;
-   call:
-      make_new_widget name parent:parent signal_array:sig_array
-   where name is the name of the new widget (a string)
-   parent is the type of the parent: of type Gtk.New.object_type
-   This call returns a triple:
-     (get_type_func, new_func, sig_array_num)
-   where get_type_func is the new widget get_type function,
-   new_func is the function returning a new widget of the new type
-   sig_array_num is an array containing the Gtk id of the signals
-   of the new widget.
-*)
-
-module Tictactoe = struct
-  type t = [`widget|`container|`box|`tictactoe]
-  module Signals = struct
-    open GtkSignal
-    let tictactoe : ([>`tictactoe],_) t =
-      { name = "tictactoe"; marshaller = marshal_unit }
-    let emit_tictactoe = emit_unit ~sgn:tictactoe
-  end
-  let create : unit -> t Gtk.obj =
-    let _,tictactoe_new = make_new_widget
-       ~name:"Tictactoe" ~parent:VBOX ~signals:[Signals.tictactoe]
-    in fun () -> Object.try_cast (tictactoe_new ()) "Tictactoe"
-end
-
-open GMain
-
-class tictactoe_signals obj = object
-  inherit GContainer.container_signals obj
-  method tictactoe =
-    GtkSignal.connect ~sgn:Tictactoe.Signals.tictactoe obj ~after
-end
-
-exception Trouve
-
-class tictactoe ?packing ?show () =
-  let obj : Tictactoe.t Gtk.obj = Tictactoe.create () in
-  let box = new GPack.box_skel obj in
-object (self)
-  inherit GObj.widget obj
-  val mutable buttons = [||]
-  val mutable buttons_handlers = [||]
-  val label = GMisc.label ~text:"Go on!" ~packing:box#add ()
-  method clear () =
-    for i = 0 to 2 do
-      for j = 0 to 2 do
-       let button = buttons.(i).(j)
-       and handler = buttons_handlers.(i).(j) in
-       button#misc#handler_block handler;
-       button#set_active false;
-       button#misc#handler_unblock handler
-      done
-    done
-  method connect = new tictactoe_signals obj
-  method emit_tictactoe () =
-    GtkSignal.emit_unit obj ~sgn:Tictactoe.Signals.tictactoe
-  method toggle () =
-    let rwins = [| [| 0; 0; 0 |]; [| 1; 1; 1 |]; [| 2; 2; 2 |];
-                   [| 0; 1; 2 |]; [| 0; 1; 2 |]; [| 0; 1; 2 |];
-                   [| 0; 1; 2 |]; [| 0; 1; 2 |] |]
-    and cwins = [| [| 0; 1; 2 |]; [| 0; 1; 2 |]; [| 0; 1; 2 |];
-                   [| 0; 0; 0 |]; [| 1; 1; 1 |]; [| 2; 2; 2 |];
-                   [| 0; 1; 2 |]; [| 2; 1; 0 |] |] in
-    label#set_text"Go on!";
-    try
-      for k = 0 to 7 do
-       let rec aux i =
-         (i = 3) ||
-         (buttons.(rwins.(k).(i)).(cwins.(k).(i))#active) && (aux (i+1)) in
-       if aux 0 then raise Trouve
-      done
-    with Trouve -> label#set_text "Win!!"; self#emit_tictactoe ()
-       
-  initializer
-    let table =
-      GPack.table ~rows:3 ~columns:3 ~homogeneous:true ~packing:box#add () in
-    buttons <-
-      Array.init 3 ~f:
-       (fun i -> Array.init 3 ~f:
-           (fun j ->
-             GButton.toggle_button ~width:20 ~height:20
-               ~packing:(table#attach ~left:i ~top:j ~expand:`BOTH) ()));
-    buttons_handlers <-
-      Array.mapi buttons ~f:
-       (fun i -> Array.mapi ~f:
-         (fun j button -> button #connect#toggled ~callback:self#toggle));
-    GObj.pack_return self ~packing ~show;
-    ()
-end
-
-let win (ttt : tictactoe)  _ =
-  Printf.printf "Gagne!!\n" ;
-  ttt #clear ()
-
-let essai () =
-  let window = GWindow.window ~title:"Tictactoe" ~border_width:10 () in
-  window #connect#destroy ~callback:Main.quit;
-  let ttt = new tictactoe ~packing:window#add () in
-  ttt #connect#tictactoe ~callback:(win ttt);
-  window #show ();
-  Main.main ()
-
-let _ = essai ()
-  
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/tron.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/tron.ml
deleted file mode 100644 (file)
index eced44a..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-(* $Id$ *)
-
-(* Tron? Game *)
-open GMain
-
-let m_pi = acos (-1.)
-let clRed   = `NAME "red"  (* `BLACK *)
-let clBlue  = `NAME "blue" (* `WHITE *)
-let clBlack = `BLACK
-
-type point = {mutable x: int; mutable y: int}
-
-let main () =
-(* Game State *)
-  let gameSize = 64 in
-  let gameState =
-    Array.create_matrix ~dimx:(gameSize+2) ~dimy:(gameSize+2) 0 in
-  let gameInit _ = 
-    for i=1 to gameSize do
-      for j=1 to gameSize do
-        gameState.(i).(j) <- 0;
-      done
-    done;
-    for i=0 to gameSize do
-      gameState.(0).(i) <- 3;            (* left wall *)
-      gameState.(i).(gameSize+1) <- 3;   (* floor *) 
-      gameState.(gameSize+1).(i+1) <- 3; (* right wall *)
-      gameState.(i+1).(0) <- 3           (* ceiling *)
-    done in
-  gameInit ();
-  let lpos = {x=4; y=4} in
-  let lspeed = {x=0; y=1} in
-  let rpos = {x=gameSize-3; y=gameSize-3} in
-  let rspeed = {x=0; y= -1} in
-  let keys = "asdfhjkl" in
-  let keyMapL = [|(-1, 0); (0, -1); (0, 1); (1, 0)|] in
-  let keyMapR = [|(-1, 0); (0, 1); (0, -1); (1, 0)|] in
-
-(* User Interface *)
-  let window = GWindow.window ~border_width:10 ~title:"tron(?)" () in
-  window#event#connect#delete
-     ~callback:(fun _ -> prerr_endline "Delete event occured"; false);
-  window#connect#destroy ~callback:Main.quit;
-  let vbx = GPack.vbox ~packing:window#add () in
-  let area = GMisc.drawing_area ~width:((gameSize+2)*4) ~height:((gameSize+2)*4)
-      ~packing:vbx#add () in
-  let drawing = area#misc#realize (); new GDraw.drawable (area#misc#window) in
-  let style = area#misc#style#copy in
-  style#set_bg [`NORMAL,`WHITE];
-  area#misc#set_style style;
-  drawing#set_background `WHITE;
-  let area_expose _ =
-    for i=0 to gameSize+1 do
-      for j=0 to gameSize+1 do
-        if gameState.(i).(j) = 1 then begin
-          drawing#set_foreground clRed;
-          drawing#rectangle ~filled:true ~x:(i*4) ~y:(j*4) ~width:4 ~height:4 ()
-        end
-        else if gameState.(i).(j) = 2 then begin
-          drawing#set_foreground clBlue;
-          drawing#rectangle ~filled:true ~x:(i*4) ~y:(j*4) ~width:4 ~height:4 ()
-        end
-        else if gameState.(i).(j) = 3 then begin
-          drawing#set_foreground clBlack;
-          drawing#rectangle ~filled:true ~x:(i*4) ~y:(j*4) ~width:4 ~height:4 ()
-        end 
-      done
-    done;
-    false
-  in
-  area#event#connect#expose ~callback:area_expose;
-  let control = GPack.table ~rows:3 ~columns:7 ~packing:vbx#pack () in
-
-  let abuttonClicked num (lbl : GMisc.label) _ = begin
-    let dialog =
-      GWindow.window ~kind:`DIALOG ~border_width:10 ~title:"Key remap" () in
-    let dvbx = GPack.box `VERTICAL ~packing:dialog#add () in
-    let entry  = GEdit.entry ~max_length:1 ~packing: dvbx#add () in
-    let txt = String.make 1 keys.[num] in
-    entry#set_text txt;
-    let dquit = GButton.button ~label:"OK" ~packing: dvbx#add () in 
-    dquit#connect#clicked ~callback:
-      begin fun _ ->
-       let chr = entry#text.[0] in
-        let txt2 = String.make 1 chr in
-        lbl#set_text txt2;
-        keys.[num]<-chr; 
-        dialog#destroy ()
-      end;
-    dialog#show ()
-  end in
-  let attach = control#attach ~expand:`BOTH in
-  let new_my_button ~label:label ~left:left ~top:top =
-      let str = String.make 1 keys.[label] in
-      let btn = GButton.button ~packing:(attach ~left:left ~top:top) () in
-      let lbl = GMisc.label ~text:str ~packing:(btn#add) () in
-      btn#connect#clicked ~callback:(abuttonClicked label lbl);
-      btn
-  in
-  new_my_button ~label:0 ~left:1 ~top:2;
-  new_my_button ~label:1 ~left:2 ~top:1;
-  new_my_button ~label:2 ~left:2 ~top:3;
-  new_my_button ~label:3 ~left:3 ~top:2;
-  new_my_button ~label:4 ~left:5 ~top:2;
-  new_my_button ~label:5 ~left:6 ~top:3;
-  new_my_button ~label:6 ~left:6 ~top:1;
-  new_my_button ~label:7 ~left:7 ~top:2;
-  let quit =
-    GButton.button ~label:"Quit" ~packing:(attach ~left:4 ~top:2) () in
-  quit#connect#clicked ~callback:window#destroy;
-  let message = GMisc.label ~text:"tron(?) game" ~packing:vbx#pack () in
-
-  let game_step () =
-        let lx = lpos.x in let ly = lpos.y in
-        gameState.(lx).(ly) <- 1;
-        drawing#set_foreground clRed;
-        drawing#rectangle ~filled:true ~x:(lx*4) ~y:(ly*4) ~width:4 ~height:4 ();
-        let rx = rpos.x in let ry = rpos.y in
-        gameState.(rx).(ry) <- 2;
-        drawing#set_foreground clBlue;
-        drawing#rectangle ~filled:true ~x:(rx*4) ~y:(ry*4) ~width:4 ~height:4 ()
-  in
-  game_step ();
-  let keyDown ev = begin
-    let key = GdkEvent.Key.keyval ev in
-    for i=0 to (Array.length keyMapL)-1 do
-       let (x, y) = keyMapL.(i) in
-       let k = keys.[i] in
-       if key = Char.code k then begin
-         lspeed.x <- x;
-         lspeed.y <- y 
-       end;
-       let (x, y) = keyMapR.(i) in
-       let k = keys.[i+4] in
-       if key = Char.code k then begin
-         rspeed.x <- x;
-         rspeed.y <- y 
-       end
-    done;       
-    false end in
-  window#event#connect#key_press ~callback:keyDown;
-  let safe_check _ = 
-    if lpos.x == rpos.x && lpos.y == rpos.y then
-      3
-    else
-      (* player 1 *)
-      (if gameState.(lpos.x).(lpos.y) != 0  then 2 else 0)
-      +
-      (* player 2 *)
-      (if gameState.(rpos.x).(rpos.y) != 0  then 1 else 0)
-      in
-  let timerID = ref (* dummy *) (Timeout.add ~ms:100 ~callback:(fun _ -> true)) in
-  let timerTimer _ = begin
-     lpos.x <- lpos.x+lspeed.x;
-     lpos.y <- lpos.y+lspeed.y;
-     rpos.x <- rpos.x+rspeed.x;
-     rpos.y <- rpos.y+rspeed.y;
-     let result = safe_check() in
-     if result!=0 then begin
-        Timeout.remove (!timerID);
-        message#set_text ("player "^string_of_int result^" won.")
-     end
-     else begin
-       game_step()
-     end;
-     true
-  end in
-  let count = ref 3 in
-  let timerTimer2 _ = begin
-(*    message#set_label (string_of_int (!count)); *)
-    if (!count==0) then begin
-      Timeout.remove (!timerID);
-      timerID := Timeout.add ~ms:100 ~callback:timerTimer
-    end
-    else begin
-      count := !count-1;
-    end;
-    true
-  end in
-  let restartClicked () =
-    Timeout.remove !timerID;
-    gameInit();
-    lpos.x <- 4; lpos.y <- 4;
-    lspeed.x <- 0; lspeed.y <- 1;
-    rpos.x <- gameSize-3; rpos.y <- gameSize-3;
-    rspeed.x <- 0; rspeed.y <- -1;
-    drawing#set_foreground `WHITE;
-    drawing#rectangle ~filled:true ~x:0 ~y:0
-      ~width:((gameSize+2)*4) ~height:((gameSize+2)*4) ();
-    area_expose();
-    count := 3;
-    timerID := Timeout.add ~ms:300 ~callback:timerTimer2;
-  in
-  let restart =
-    GButton.button ~label: "Restart" ~packing:(attach ~left:4 ~top:3) () in
-  restart#connect#clicked ~callback:restartClicked;
-  restartClicked ();
-
-  window#show ();
-  Main.main ()
-
-let _ = Printexc.print main ()
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/xmhtml/test.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/xmhtml/test.ml
deleted file mode 100644 (file)
index 6c9d371..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-(* $Id$ *)
-
-let test_string2 = String.concat ~sep:"" [
-  "<html>\n";
-  "<head><title>The Gtk/XmHTML test</title></head>\n";
-  "This is the Gtk/XmHTML test program<p>\n";
-  "You can invoke this program with a command line argument, like this:\n";
-  "<hr>";
-  "<tt>./xtest filename.html</tt>";
-  "<hr>";
-  "Click here to load a different <a href=\"nothing\">test message</a>";
-  "</html>";
-]
-
-let read_file file =
-  let ic = open_in file in
-  let b = Buffer.create 16384 and s = String.create 1024 and len = ref 0 in
-  while len := input ic ~buf:s ~pos:0 ~len:1024; !len > 0 do
-    Buffer.add_substring b s ~pos:0 ~len:!len
-  done;
-  Buffer.contents b
-
-open GMain
-
-let _ =
-  let w = GWindow.window ~width:600 ~height:500 () in
-  w#connect#destroy ~callback:Main.quit;
-  let source =
-    if Array.length Sys.argv > 1 then begin
-      Sys.chdir (Filename.dirname Sys.argv.(1));
-      read_file (Filename.basename Sys.argv.(1))
-    end
-    else test_string2 in
-  let html = GHtml.xmhtml ~source ~packing:w#add () in
-  html#set_anchor_buttons false;
-  html#set_anchor_underline [`SINGLE;`DASHED];
-  w#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gBin.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gBin.ml
deleted file mode 100644 (file)
index f248ba0..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkBin
-open GObj
-open GContainer
-
-class scrolled_window obj = object
-  inherit container_full (obj : Gtk.scrolled_window obj)
-  method hadjustment =
-    new GData.adjustment (ScrolledWindow.get_hadjustment obj)
-  method vadjustment =
-    new GData.adjustment (ScrolledWindow.get_vadjustment obj)
-  method set_hadjustment adj =
-    ScrolledWindow.set_hadjustment obj (GData.as_adjustment adj)
-  method set_vadjustment adj =
-    ScrolledWindow.set_vadjustment obj (GData.as_adjustment adj)
-  method set_hpolicy hpolicy = ScrolledWindow.set_policy' obj ~hpolicy
-  method set_vpolicy vpolicy = ScrolledWindow.set_policy' obj ~vpolicy
-  method set_placement = ScrolledWindow.set_placement obj
-  method add_with_viewport w =
-    ScrolledWindow.add_with_viewport obj (as_widget w)
-end
-
-let scrolled_window ?hadjustment ?vadjustment ?hpolicy ?vpolicy
-    ?placement ?border_width ?width ?height ?packing ?show () =
-  let w =
-    ScrolledWindow.create ()
-      ?hadjustment:(may_map ~f:GData.as_adjustment hadjustment)
-      ?vadjustment:(may_map ~f:GData.as_adjustment vadjustment) in
-  ScrolledWindow.set w ?hpolicy ?vpolicy ?placement;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new scrolled_window w) ~packing ~show
-
-class event_box obj = object
-  inherit container_full (obj : Gtk.event_box obj)
-  method event = new GObj.event_ops obj
-end
-
-let event_box ?border_width ?width ?height ?packing ?show () =
-  let w = EventBox.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new event_box w) ~packing ~show
-
-class handle_box_signals obj = object
-  inherit container_signals obj
-  method child_attached ~callback =
-    GtkSignal.connect ~sgn:HandleBox.Signals.child_attached obj ~after
-      ~callback:(fun obj -> callback (new widget obj))
-  method child_detached ~callback =
-    GtkSignal.connect ~sgn:HandleBox.Signals.child_detached obj ~after
-      ~callback:(fun obj -> callback (new widget obj))
-end
-
-class handle_box obj = object
-  inherit container (obj : Gtk.handle_box obj)
-  method set_shadow_type     = HandleBox.set_shadow_type     obj
-  method set_handle_position = HandleBox.set_handle_position obj
-  method set_snap_edge       = HandleBox.set_snap_edge       obj
-  method connect = new handle_box_signals obj
-  method event = new GObj.event_ops obj
-end
-
-let handle_box ?border_width ?width ?height ?packing ?show () =
-  let w = HandleBox.create () in
-  let () = Container.set w ?border_width ?width ?height in
-  pack_return (new handle_box w) ~packing ~show
-
-class frame_skel obj = object
-  inherit container obj
-  method set_label = Frame.set_label obj
-  method set_label_align ?x ?y () = Frame.set_label_align' obj ?x ?y
-  method set_shadow_type = Frame.set_shadow_type obj
-end
-
-class frame obj = object
-  inherit frame_skel (Frame.coerce obj)
-  method connect = new container_signals obj
-end
-
-let frame ?(label="") ?label_xalign ?label_yalign ?shadow_type
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Frame.create label in
-  Frame.set w ?label_xalign ?label_yalign ?shadow_type;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new frame w) ~packing ~show
-
-class aspect_frame obj = object
-  inherit frame_skel (obj : Gtk.aspect_frame obj)
-  method connect = new container_signals obj
-  method set_alignment ?x ?y () = AspectFrame.set obj ?xalign:x ?yalign:y
-  method set_ratio ratio = AspectFrame.set obj ~ratio
-  method set_obey_child obey_child = AspectFrame.set obj ~obey_child
-end
-
-let aspect_frame ?label ?xalign ?yalign ?ratio ?obey_child
-    ?label_xalign ?label_yalign ?shadow_type
-    ?border_width ?width ?height ?packing ?show () =
-  let w =
-    AspectFrame.create ?label ?xalign ?yalign ?ratio ?obey_child () in
-  Frame.set w ?label_xalign ?label_yalign ?shadow_type;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new aspect_frame w) ~packing ~show
-
-class viewport obj = object
-  inherit container_full (obj : Gtk.viewport obj)
-  method event = new event_ops obj
-  method set_hadjustment adj =
-    Viewport.set_hadjustment obj (GData.as_adjustment adj)
-  method set_vadjustment adj =
-    Viewport.set_vadjustment obj (GData.as_adjustment adj)
-  method set_shadow_type = Viewport.set_shadow_type obj
-  method hadjustment = new GData.adjustment (Viewport.get_hadjustment obj)
-  method vadjustment = new GData.adjustment (Viewport.get_vadjustment obj)
-end
-
-let viewport ?hadjustment ?vadjustment ?shadow_type
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Viewport.create ()
-      ?hadjustment:(may_map ~f:GData.as_adjustment hadjustment)
-      ?vadjustment:(may_map ~f:GData.as_adjustment vadjustment) in
-  may shadow_type ~f:(Viewport.set_shadow_type w);
-  Container.set w ?border_width ?width ?height;
-  pack_return (new viewport w) ~packing ~show
-
-class alignment obj = object
-  inherit container_full (obj : Gtk.alignment obj)
-  method set_alignment ?x ?y () = Alignment.set ?x ?y obj
-  method set_scale ?x ?y () = Alignment.set ?xscale:x ?yscale:y obj
-end
-
-let alignment ?x ?y ?xscale ?yscale
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Alignment.create ?x ?y ?xscale ?yscale () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new alignment w) ~packing ~show
-  
-let alignment_cast w = new alignment (Alignment.cast w#as_widget)
-
-class socket obj = object (self)
-  inherit container_full (obj : Gtk.socket obj)
-  method steal = Socket.steal obj
-  method xwindow =
-    self#misc#realize ();
-    Gdk.Window.get_xwindow self#misc#window
-end
-
-let socket ?border_width ?width ?height ?packing ?show () =
-  let w = Socket.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new socket w) ?packing ?show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gBin.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gBin.mli
deleted file mode 100644 (file)
index 9593650..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class scrolled_window : Gtk.scrolled_window obj ->
-  object
-    inherit container_full
-    val obj : Gtk.scrolled_window obj
-    method add_with_viewport : widget -> unit
-    method hadjustment : GData.adjustment
-    method set_hadjustment : GData.adjustment -> unit
-    method set_hpolicy : Tags.policy_type -> unit
-    method set_placement : Tags.corner_type -> unit
-    method set_vadjustment : GData.adjustment -> unit
-    method set_vpolicy : Tags.policy_type -> unit
-    method vadjustment : GData.adjustment
-  end
-val scrolled_window :
-  ?hadjustment:GData.adjustment ->
-  ?vadjustment:GData.adjustment ->
-  ?hpolicy:Tags.policy_type ->
-  ?vpolicy:Tags.policy_type ->
-  ?placement:Tags.corner_type ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> scrolled_window
-
-class event_box : Gtk.event_box obj ->
-  object
-    inherit container_full
-    val obj : Gtk.event_box obj
-    method event : event_ops
-  end
-val event_box :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> event_box
-
-class handle_box_signals : 'a obj ->
-  object
-    inherit container_signals
-    constraint 'a = [>`handlebox|`container|`widget]
-    val obj : 'a obj
-    method child_attached : callback:(widget -> unit) -> GtkSignal.id
-    method child_detached : callback:(widget -> unit) -> GtkSignal.id
-  end
-
-class handle_box : Gtk.handle_box obj ->
-  object
-    inherit container
-    val obj : Gtk.handle_box obj
-    method event : event_ops
-    method connect : handle_box_signals
-    method set_handle_position : Tags.position -> unit
-    method set_shadow_type : Tags.shadow_type -> unit
-    method set_snap_edge : Tags.position -> unit
-  end
-val handle_box :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> handle_box
-
-class frame_skel : 'a obj ->
-  object
-    inherit container
-    constraint 'a = [>`frame|`container|`widget]
-    val obj : 'a obj
-    method set_label : string -> unit
-    method set_label_align : ?x:clampf -> ?y:clampf -> unit -> unit
-    method set_shadow_type : Tags.shadow_type -> unit
-  end
-class frame : [>`frame] obj ->
-  object
-    inherit frame_skel
-    val obj : Gtk.frame obj
-    method connect : GContainer.container_signals
-  end
-val frame :
-  ?label:string ->
-  ?label_xalign:clampf ->
-  ?label_yalign:clampf ->
-  ?shadow_type:Tags.shadow_type ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> frame
-
-class aspect_frame : Gtk.aspect_frame obj ->
-  object
-    inherit frame
-    val obj : Gtk.aspect_frame obj
-    method set_alignment : ?x:clampf -> ?y:clampf -> unit -> unit
-    method set_obey_child : bool -> unit
-    method set_ratio : clampf -> unit
-  end
-val aspect_frame :
-  ?label:string ->
-  ?xalign:clampf ->
-  ?yalign:clampf ->
-  ?ratio:float ->
-  ?obey_child:bool ->
-  ?label_xalign:clampf ->
-  ?label_yalign:clampf ->
-  ?shadow_type:Tags.shadow_type ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> aspect_frame
-
-class viewport : Gtk.viewport obj ->
-  object
-    inherit container_full
-    val obj : Gtk.viewport obj
-    method event : event_ops
-    method hadjustment : GData.adjustment
-    method set_hadjustment : GData.adjustment -> unit
-    method set_shadow_type : Gtk.Tags.shadow_type -> unit
-    method set_vadjustment : GData.adjustment -> unit
-    method vadjustment : GData.adjustment
-  end
-val viewport :
-  ?hadjustment:GData.adjustment ->
-  ?vadjustment:GData.adjustment ->
-  ?shadow_type:Tags.shadow_type ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> viewport
-
-class alignment : Gtk.alignment obj ->
-  object
-    inherit container_full
-    val obj : Gtk.alignment obj
-    method set_alignment : ?x:Gtk.clampf -> ?y:Gtk.clampf -> unit -> unit
-    method set_scale : ?x:Gtk.clampf -> ?y:Gtk.clampf -> unit -> unit
-  end
-val alignment :
-  ?x:Gtk.clampf ->
-  ?y:Gtk.clampf ->
-  ?xscale:Gtk.clampf ->
-  ?yscale:Gtk.clampf ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> alignment
-val alignment_cast : < as_widget : 'a obj; .. > -> alignment
-
-class socket : Gtk.socket obj ->
-  object
-    inherit container_full
-    val obj : Gtk.socket obj
-    method steal : Gdk.xid -> unit
-    method xwindow : Gdk.xid
-  end
-
-val socket :
-  ?border_width:int -> ?width:int -> ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> socket
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gButton.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gButton.ml
deleted file mode 100644 (file)
index 08ac704..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkButton
-open GObj
-open GContainer
-
-class button_skel obj = object (self)
-  inherit container obj
-  method clicked () = Button.clicked obj
-  method grab_default () =
-    Widget.set_can_default obj true;
-    Widget.grab_default obj
-end
-
-class button_signals obj = object
-  inherit container_signals obj
-  method clicked = GtkSignal.connect ~sgn:Button.Signals.clicked ~after obj
-  method pressed = GtkSignal.connect ~sgn:Button.Signals.pressed ~after obj
-  method released = GtkSignal.connect ~sgn:Button.Signals.released ~after obj
-  method enter = GtkSignal.connect ~sgn:Button.Signals.enter ~after obj
-  method leave = GtkSignal.connect ~sgn:Button.Signals.leave ~after obj
-end
-
-class button obj = object
-  inherit button_skel (Button.coerce obj)
-  method connect = new button_signals obj
-  method event = new GObj.event_ops obj
-end
-
-let button ?label ?border_width ?width ?height ?packing ?show () =
-  let w = Button.create ?label () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new button w) ~packing ~show
-
-class toggle_button_signals obj = object
-  inherit button_signals obj
-  method toggled =
-    GtkSignal.connect ~sgn:ToggleButton.Signals.toggled obj ~after
-end
-
-class toggle_button obj = object
-  inherit button_skel obj
-  method connect = new toggle_button_signals obj
-  method active = ToggleButton.get_active obj
-  method set_active = ToggleButton.set_active obj
-  method set_draw_indicator = ToggleButton.set_mode obj
-end
-
-let toggle_button ?label ?active ?draw_indicator
-    ?border_width ?width ?height ?packing ?show () =
-  let w = ToggleButton.create_toggle ?label () in
-  ToggleButton.set w ?active ?draw_indicator;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new toggle_button w) ~packing ~show
-
-let check_button ?label ?active ?draw_indicator
-    ?border_width ?width ?height ?packing ?show () =
-  let w = ToggleButton.create_check ?label () in
-  ToggleButton.set w ?active ?draw_indicator;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new toggle_button w) ~packing ~show
-
-class radio_button obj = object
-  inherit toggle_button (obj : Gtk.radio_button obj)
-  method set_group = RadioButton.set_group obj
-  method group = Some obj
-end
-
-let radio_button ?group ?label ?active ?draw_indicator
-    ?border_width ?width ?height ?packing ?show () =
-  let w = RadioButton.create ?group ?label () in
-  ToggleButton.set w ?active ?draw_indicator;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new radio_button w) ~packing ~show
-
-class toolbar obj = object
-  inherit container_full (obj : Gtk.toolbar obj)
-  method insert_widget ?tooltip ?tooltip_private ?pos w =
-    Toolbar.insert_widget obj (as_widget w) ?tooltip ?tooltip_private ?pos
-
-  method insert_button ?text ?tooltip ?tooltip_private ?icon
-      ?pos ?callback () =
-    let icon = may_map icon ~f:as_widget in
-    new button
-      (Toolbar.insert_button obj ~kind:`BUTTON ?icon ?text
-        ?tooltip ?tooltip_private ?pos ?callback ())
-
-  method insert_toggle_button ?text ?tooltip ?tooltip_private ?icon
-      ?pos ?callback () =
-    let icon = may_map icon ~f:as_widget in
-    new toggle_button
-      (ToggleButton.cast
-        (Toolbar.insert_button obj ~kind:`TOGGLEBUTTON ?icon ?text
-           ?tooltip ?tooltip_private ?pos ?callback ()))
-
-  method insert_radio_button ?text ?tooltip ?tooltip_private ?icon
-      ?pos ?callback () =
-    let icon = may_map icon ~f:as_widget in
-    new radio_button
-      (RadioButton.cast
-        (Toolbar.insert_button obj ~kind:`RADIOBUTTON ?icon ?text
-           ?tooltip ?tooltip_private ?pos ?callback ()))
-
-  method insert_space = Toolbar.insert_space obj
-
-  method set_orientation = Toolbar.set_orientation obj
-  method set_style = Toolbar.set_style obj
-  method set_space_size = Toolbar.set_space_size obj
-  method set_space_style = Toolbar.set_space_style obj
-  method set_tooltips = Toolbar.set_tooltips obj
-  method set_button_relief = Toolbar.set_button_relief obj
-  method button_relief = Toolbar.get_button_relief obj
-end
-
-let toolbar ?(orientation=`HORIZONTAL) ?style
-    ?space_size ?space_style ?tooltips ?button_relief
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Toolbar.create orientation ?style () in
-  Toolbar.set w ?space_size ?space_style ?tooltips ?button_relief;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new toolbar w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gButton.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gButton.mli
deleted file mode 100644 (file)
index ee2653d..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class button_skel :
-  'a obj ->
-  object
-    inherit container
-    constraint 'a = [>`widget|`button|`container]
-    val obj : 'a obj
-    method clicked : unit -> unit
-    method grab_default : unit -> unit
-  end
-class button_signals :
-  'b obj ->
-  object ('a)
-    inherit container_signals
-    constraint 'b = [>`button|`container|`widget]
-    val obj : 'b obj
-    method clicked : callback:(unit -> unit) -> GtkSignal.id
-    method enter : callback:(unit -> unit) -> GtkSignal.id
-    method leave : callback:(unit -> unit) -> GtkSignal.id
-    method pressed : callback:(unit -> unit) -> GtkSignal.id
-    method released : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class button :
-  [>`button] obj ->
-  object
-    inherit button_skel
-    val obj : Gtk.button obj
-    method event : event_ops
-    method connect : button_signals
-  end
-val button :
-  ?label:string ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> button
-
-class toggle_button_signals :
-  'b obj ->
-  object ('a)
-    inherit button_signals
-    constraint 'b = [>`toggle|`button|`container|`widget]
-    val obj : 'b obj
-    method toggled : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class toggle_button :
-  'a obj ->
-  object
-    inherit button_skel
-    constraint 'a = [>`toggle|`button|`container|`widget]
-    val obj : 'a obj
-    method active : bool
-    method connect : toggle_button_signals
-    method set_active : bool -> unit
-    method set_draw_indicator : bool -> unit
-  end
-val toggle_button :
-  ?label:string ->
-  ?active:bool ->
-  ?draw_indicator:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> toggle_button
-val check_button :
-  ?label:string ->
-  ?active:bool ->
-  ?draw_indicator:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> toggle_button
-
-class radio_button :
-  Gtk.radio_button obj ->
-  object
-    inherit toggle_button
-    val obj : Gtk.radio_button obj
-    method group : Gtk.radio_button group
-    method set_group : Gtk.radio_button group -> unit
-  end
-val radio_button :
-  ?group:Gtk.radio_button group ->
-  ?label:string ->
-  ?active:bool ->
-  ?draw_indicator:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> radio_button
-
-class toolbar :
-  Gtk.toolbar obj ->
-  object
-    inherit container_full
-    val obj : Gtk.toolbar obj
-    method button_relief : Tags.relief_style
-    method insert_button :
-      ?text:string ->
-      ?tooltip:string ->
-      ?tooltip_private:string ->
-      ?icon:widget ->
-      ?pos:int -> ?callback:(unit -> unit) -> unit -> button
-    method insert_radio_button :
-      ?text:string ->
-      ?tooltip:string ->
-      ?tooltip_private:string ->
-      ?icon:widget ->
-      ?pos:int -> ?callback:(unit -> unit) -> unit -> radio_button
-    method insert_space : ?pos:int -> unit -> unit
-    method insert_toggle_button :
-      ?text:string ->
-      ?tooltip:string ->
-      ?tooltip_private:string ->
-      ?icon:widget ->
-      ?pos:int -> ?callback:(unit -> unit) -> unit -> toggle_button
-    method insert_widget :
-      ?tooltip:string ->
-      ?tooltip_private:string -> ?pos:int -> widget -> unit
-    method set_button_relief : Tags.relief_style -> unit
-    method set_orientation : Tags.orientation -> unit
-    method set_space_size : int -> unit
-    method set_space_style : [`EMPTY|`LINE] -> unit
-    method set_style : Tags.toolbar_style -> unit
-    method set_tooltips : bool -> unit
-  end
-val toolbar :
-  ?orientation:Tags.orientation ->
-  ?style:Tags.toolbar_style ->
-  ?space_size:int ->
-  ?space_style:[`EMPTY|`LINE] ->
-  ?tooltips:bool ->
-  ?button_relief:Tags.relief_style ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> toolbar
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gContainer.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gContainer.ml
deleted file mode 100644 (file)
index 2ea765e..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GObj
-open GData
-
-class focus obj = object
-  val obj = obj
-  method circulate = Container.focus obj
-  method set (child : widget option) =
-    let child = may_map child ~f:(fun x -> x#as_widget) in
-    Container.set_focus_child obj (Gpointer.optboxed child)
-  method set_hadjustment adj =
-    Container.set_focus_hadjustment obj
-      (Gpointer.optboxed (may_map adj ~f:as_adjustment))
-  method set_vadjustment adj =
-    Container.set_focus_vadjustment obj
-      (Gpointer.optboxed (may_map adj ~f:as_adjustment))
-end
-
-class container obj = object (self)
-  inherit widget obj
-  method add w =
-    (* Hack to avoid creating a bin class *)
-    if GtkBase.Object.is_a obj "GtkBin" && Container.children obj <> [] then
-      raise (Gtk.Error "GContainer.container#add: already full");
-    Container.add obj (as_widget w)
-  method remove w = Container.remove obj (as_widget w)
-  method children = List.map ~f:(new widget) (Container.children obj)
-  method set_border_width = Container.set_border_width obj
-  method focus = new focus obj
-end
-
-class container_signals obj = object
-  inherit widget_signals obj
-  method add ~callback =
-    GtkSignal.connect ~sgn:Container.Signals.add obj ~after
-      ~callback:(fun w -> callback (new widget w))
-  method remove ~callback =
-    GtkSignal.connect ~sgn:Container.Signals.remove obj ~after
-      ~callback:(fun w -> callback (new widget w))
-end
-
-class container_full obj = object
-  inherit container obj
-  method connect = new container_signals obj
-end
-
-let cast_container (w : widget) =
-  new container_full (GtkBase.Container.cast w#as_widget)
-
-class virtual ['a] item_container obj = object (self)
-  inherit widget obj
-  method add (w : 'a) =
-    Container.add obj w#as_item
-  method remove (w : 'a) =
-    Container.remove obj w#as_item
-  method private virtual wrap : Gtk.widget obj -> 'a
-  method children : 'a list =
-    List.map ~f:self#wrap (Container.children obj)
-  method set_border_width = Container.set_border_width obj
-  method focus = new focus obj
-  method virtual insert : 'a -> pos:int -> unit
-  method append (w : 'a) = self#insert w ~pos:(-1)
-  method prepend (w : 'a) = self#insert w ~pos:0
-end
-
-class item_signals obj = object
-  inherit container_signals obj
-  method select = GtkSignal.connect ~sgn:Item.Signals.select obj ~after
-  method deselect = GtkSignal.connect ~sgn:Item.Signals.deselect obj ~after
-  method toggle = GtkSignal.connect ~sgn:Item.Signals.toggle obj ~after
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gContainer.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gContainer.mli
deleted file mode 100644 (file)
index 2909829..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-
-class focus :
-  'a obj ->
-  object
-    constraint 'a = [>`container]
-    val obj : 'a obj
-    method circulate : Tags.direction_type -> bool
-    method set : widget option -> unit
-    method set_hadjustment : GData.adjustment option -> unit
-    method set_vadjustment : GData.adjustment option -> unit
-  end
-
-class container :
-  'a obj ->
-  object
-    inherit widget
-    constraint 'a = [>`container|`widget]
-    val obj : 'a obj
-    method add : widget -> unit
-    method children : widget list
-    method remove : widget -> unit
-    method focus : focus
-    method set_border_width : int -> unit
-  end
-
-class container_signals :
-  'a obj ->
-  object
-    inherit widget_signals
-    constraint 'a = [>`container|`widget]
-    val obj : 'a obj
-    method add : callback:(widget -> unit) -> GtkSignal.id
-    method remove : callback:(widget -> unit) -> GtkSignal.id
-  end
-
-class container_full :
-  'a obj ->
-  object
-    inherit container
-    constraint 'a = [>`container|`widget]
-    val obj : 'a obj
-    method connect : container_signals
-  end
-
-val cast_container : widget -> container_full
-(* may raise [Gtk.Cannot_cast "GtkContainer"] *)
-
-class virtual ['a] item_container :
-  'c obj ->
-  object
-    constraint 'a = < as_item : [>`widget] obj; .. >
-    constraint 'c = [>`container|`widget]
-    inherit widget
-    val obj : 'c obj
-    method add : 'a -> unit
-    method append : 'a -> unit
-    method children : 'a list
-    method virtual insert : 'a -> pos:int -> unit
-    method prepend : 'a -> unit
-    method remove : 'a -> unit
-    method focus : focus
-    method set_border_width : int -> unit
-    method private virtual wrap : Gtk.widget obj -> 'a
-  end
-
-class item_signals :
-  'a obj ->
-  object
-    inherit container_signals
-    constraint 'a = [>`container|`item|`widget]
-    val obj : 'a obj
-    method deselect : callback:(unit -> unit) -> GtkSignal.id
-    method select : callback:(unit -> unit) -> GtkSignal.id
-    method toggle : callback:(unit -> unit) -> GtkSignal.id
-  end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gData.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gData.ml
deleted file mode 100644 (file)
index 52aa3f1..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkData
-open GObj
-
-class data_signals obj = object
-  inherit gtkobj_signals obj
-  method disconnect_data =
-    GtkSignal.connect ~sgn:Data.Signals.disconnect obj ~after
-end
-
-class adjustment_signals obj = object
-  inherit data_signals obj
-  method changed = GtkSignal.connect ~sgn:Adjustment.Signals.changed obj ~after
-  method value_changed =
-    GtkSignal.connect ~sgn:Adjustment.Signals.value_changed obj ~after
-end
-
-class adjustment obj = object
-  inherit gtkobj obj
-  method as_adjustment : Gtk.adjustment obj = obj
-  method connect = new adjustment_signals obj
-  method set_value = Adjustment.set_value obj
-  method clamp_page = Adjustment.clamp_page obj
-  method lower = Adjustment.get_lower obj
-  method upper = Adjustment.get_upper obj
-  method value = Adjustment.get_value obj
-  method step_increment = Adjustment.get_step_increment obj
-  method page_increment = Adjustment.get_page_increment obj
-  method page_size = Adjustment.get_page_size obj
-end
-
-let adjustment ?(value=0.) ?(lower=0.) ?(upper=100.)
-    ?(step_incr=1.) ?(page_incr=10.) ?(page_size=10.) () =
-  let w =
-    Adjustment.create ~value ~lower ~upper ~step_incr ~page_incr ~page_size in
-  new adjustment w
-
-let as_adjustment (adj : adjustment) = adj#as_adjustment
-
-class tooltips obj = object
-  inherit gtkobj (obj : Gtk.tooltips obj)
-  method as_tooltips = obj
-  method connect = new data_signals obj
-  method enable () = Tooltips.enable obj
-  method disable () = Tooltips.disable obj
-  method set_tip ?text ?privat w =
-    Tooltips.set_tip obj (as_widget w) ?text ?privat
-  method set_delay = Tooltips.set_delay obj
-end
-
-let tooltips ?delay () =
-  let tt = Tooltips.create () in
-  Tooltips.set tt ?delay;
-  new tooltips tt
-
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gData.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gData.mli
deleted file mode 100644 (file)
index ae7b29e..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-class data_signals :
-  'a obj ->
-  object
-    inherit GObj.gtkobj_signals
-    constraint 'a = [>`data]
-    val obj : 'a obj
-    method disconnect_data : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class adjustment_signals :
-  'a obj ->
-  object
-    inherit data_signals
-    constraint 'a = [>`adjustment|`data]
-    val obj : 'a obj
-    method changed : callback:(unit -> unit) -> GtkSignal.id
-    method value_changed : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class adjustment : Gtk.adjustment obj ->
-  object
-    inherit GObj.gtkobj
-    val obj : Gtk.adjustment obj
-    method as_adjustment : Gtk.adjustment obj
-    method clamp_page : lower:float -> upper:float -> unit
-    method connect : adjustment_signals
-    method set_value : float -> unit
-    method lower : float
-    method upper : float
-    method value : float
-    method step_increment : float
-    method page_increment : float
-    method page_size : float
-  end
-val adjustment :
-  ?value:float ->
-  ?lower:float ->
-  ?upper:float ->
-  ?step_incr:float ->
-  ?page_incr:float -> ?page_size:float -> unit -> adjustment
-
-val as_adjustment : adjustment -> Gtk.adjustment obj
-
-class tooltips :
-  Gtk.tooltips obj ->
-  object
-    inherit GObj.gtkobj
-    val obj : Gtk.tooltips obj
-    method as_tooltips : Gtk.tooltips obj
-    method connect : data_signals
-    method disable : unit -> unit
-    method enable : unit -> unit
-    method set_delay : int -> unit
-    method set_tip : ?text:string -> ?privat:string -> GObj.widget -> unit
-  end
-val tooltips : ?delay:int -> unit -> tooltips
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gDraw.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gDraw.ml
deleted file mode 100644 (file)
index 5782079..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gdk
-
-type color = [
-  | `COLOR of Color.t
-  | `WHITE
-  | `BLACK
-  | `NAME of string
-  | `RGB of int * int * int
-]
-
-let default_colormap = GtkBase.Widget.get_default_colormap
-
-let color ?(colormap = default_colormap ()) (c : color) =
-  match c with
-  | `COLOR col -> col
-  | #Gdk.Color.spec as def -> Color.alloc ~colormap def
-
-type optcolor = [
-  | `COLOR of Color.t
-  | `WHITE
-  | `BLACK
-  | `NAME of string
-  | `RGB of int * int * int
-  | `DEFAULT
-]
-
-let optcolor ?colormap (c : optcolor) =
-  match c with
-  | `DEFAULT -> None
-  | #color as c -> Some (color ?colormap c)
-
-class ['a] drawable ?(colormap = default_colormap ()) w =
-object (self)
-  val colormap = colormap
-  val gc = GC.create w
-  val w : 'a Gdk.drawable = w
-  method color = color ~colormap
-  method set_foreground col = GC.set_foreground gc (self#color col)
-  method set_background col = GC.set_background gc (self#color col)
-  method gc_values = GC.get_values gc
-  method set_clip_region region = GC.set_clip_region gc region
-  method set_line_attributes ?width ?style ?cap ?join () =
-    let v = GC.get_values gc in
-    GC.set_line_attributes gc
-      ~width:(default v.GC.line_width ~opt:width)
-      ~style:(default v.GC.line_style ~opt:style)
-      ~cap:(default v.GC.cap_style ~opt:cap)
-      ~join:(default v.GC.join_style ~opt:join)
-  method point = Draw.point w gc
-  method line = Draw.line w gc
-  method rectangle = Draw.rectangle w gc
-  method arc = Draw.arc w gc
-  method polygon ?filled l = Draw.polygon w gc ?filled l
-  method string s = Draw.string w gc ~string:s
-  method image ~width ~height ?(xsrc=0) ?(ysrc=0) ?(xdest=0) ?(ydest=0) image =
-    Draw.image w gc ~image ~width ~height ~xsrc ~ysrc ~xdest ~ydest
-end
-
-class pixmap ?colormap ?mask pm = object
-  inherit [[`pixmap]] drawable ?colormap pm as pixmap
-  val bitmap = may_map mask ~f:
-      begin fun x ->
-        let mask = new drawable x in
-        mask#set_foreground `WHITE;
-        mask
-      end
-  val mask : Gdk.bitmap option = mask
-  method pixmap = w
-  method mask = mask
-  method set_line_attributes ?width ?style ?cap ?join () =
-    pixmap#set_line_attributes ?width ?style ?cap ?join ();
-    may bitmap ~f:(fun m -> m#set_line_attributes ?width ?style ?cap ?join ())
-  method point ~x ~y =
-    pixmap#point ~x ~y;
-    may bitmap ~f:(fun m -> m#point ~x ~y)
-  method line ~x ~y ~x:x' ~y:y' =
-    pixmap#line ~x ~y ~x:x' ~y:y';
-    may bitmap ~f:(fun m -> m#line ~x ~y ~x:x' ~y:y')
-  method rectangle ~x ~y ~width ~height ?filled () =
-    pixmap#rectangle ~x ~y ~width ~height ?filled ();
-    may bitmap ~f:(fun m -> m#rectangle ~x ~y ~width ~height ?filled ())
-  method arc ~x ~y ~width ~height ?filled ?start ?angle () =
-    pixmap#arc ~x ~y ~width ~height ?filled ?start ?angle ();
-    may bitmap
-      ~f:(fun m -> m#arc ~x ~y ~width ~height ?filled ?start ?angle ());
-  method polygon ?filled l =
-    pixmap#polygon ?filled l;
-    may bitmap ~f:(fun m -> m#polygon ?filled l)
-  method string s ~font ~x ~y =
-    pixmap#string s ~font ~x ~y;
-    may bitmap ~f:(fun m -> m#string s ~font ~x ~y)
-end
-
-class type misc_ops = object
-  method allocation : Gtk.rectangle
-  method colormap : colormap
-  method draw : Rectangle.t option -> unit
-  method hide : unit -> unit
-  method hide_all : unit -> unit
-  method intersect : Rectangle.t -> Rectangle.t option
-  method pointer : int * int
-  method realize : unit -> unit
-  method set_app_paintable : bool -> unit
-  method set_geometry :
-    ?x:int -> ?y:int -> ?width:int -> ?height:int -> unit -> unit
-  method show : unit -> unit
-  method unmap : unit -> unit
-  method unparent : unit -> unit
-  method unrealize : unit -> unit
-  method visible : bool
-  method visual : visual
-  method visual_depth : int
-  method window : window
-end
-
-let pixmap ~(window : < misc : #misc_ops; .. >)
-    ~width ~height ?(mask=false) () =
-  window#misc#realize ();
-  let window =
-    try window#misc#window
-    with Gpointer.Null -> failwith "GDraw.pixmap : no window"
-  and depth = window#misc#visual_depth
-  and colormap = window#misc#colormap in
-  let mask =
-    if not mask then None else
-    let bm = Bitmap.create window ~width ~height in
-    let mask = new drawable bm in
-    mask#set_foreground `BLACK;
-    mask#rectangle ~x:0 ~y:0 ~width ~height ~filled:true ();
-    Some bm
-  in
-  new pixmap (Pixmap.create window ~width ~height ~depth) ~colormap ?mask
-
-let pixmap_from_xpm ~window ~file ?colormap ?transparent () =
-  window#misc#realize ();
-  let window =
-    try window#misc#window
-    with Gpointer.Null -> failwith "GDraw.pixmap_from_xpm : no window" in
-  let pm, mask =
-    try Pixmap.create_from_xpm window ~file ?colormap
-       ?transparent:(may_map transparent ~f:(fun c -> color c))
-    with Gpointer.Null -> invalid_arg ("GDraw.pixmap_from_xpm : " ^ file) in
-  new pixmap pm ?colormap ~mask
-
-let pixmap_from_xpm_d ~window ~data ?colormap ?transparent () =
-  window#misc#realize ();
-  let window =
-    try window#misc#window
-    with Gpointer.Null -> failwith "GDraw.pixmap_from_xpm_d : no window" in
-  let pm, mask =
-    Pixmap.create_from_xpm_d window ~data ?colormap
-      ?transparent:(may_map transparent ~f:(fun c -> color c)) in
-  new pixmap pm ?colormap ~mask
-
-class drag_context context = object
-  val context = context
-  method status ?(time=0) act = DnD.drag_status context act ~time
-  method suggested_action = DnD.drag_context_suggested_action context
-  method targets = DnD.drag_context_targets context
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gDraw.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gDraw.mli
deleted file mode 100644 (file)
index 2b5fc86..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-(* $Id$ *)
-
-open Gdk
-
-type color =
-  [ `COLOR of Color.t
-  | `WHITE
-  | `BLACK
-  | `NAME of string
-  | `RGB of int * int * int]
-
-val color : ?colormap:colormap -> color -> Color.t
-
-type optcolor =
-  [ `COLOR of Color.t
-  | `WHITE
-  | `BLACK
-  | `NAME of string
-  | `RGB of int * int * int
-  | `DEFAULT ]
-
-val optcolor : ?colormap:colormap -> optcolor -> Color.t option
-
-class ['a] drawable : ?colormap:colormap -> 'a Gdk.drawable ->
-  object
-    val gc : gc
-    val w : 'a Gdk.drawable
-    method arc :
-      x:int ->
-      y:int ->
-      width:int ->
-      height:int ->
-      ?filled:bool -> ?start:float -> ?angle:float -> unit -> unit
-    method color : color -> Color.t
-    method gc_values : GC.values
-    method image :
-      width:int ->
-      height:int ->
-      ?xsrc:int -> ?ysrc:int -> ?xdest:int -> ?ydest:int -> image -> unit
-    method line : x:int -> y:int -> x:int -> y:int -> unit
-    method point : x:int -> y:int -> unit
-    method polygon : ?filled:bool -> (int * int) list -> unit
-    method rectangle :
-      x:int ->
-      y:int -> width:int -> height:int -> ?filled:bool -> unit -> unit
-    method set_background : color -> unit
-    method set_foreground : color -> unit
-    method set_clip_region : region -> unit
-    method set_line_attributes :
-      ?width:int ->
-      ?style:GC.gdkLineStyle ->
-      ?cap:GC.gdkCapStyle -> ?join:GC.gdkJoinStyle -> unit -> unit
-    method string : string -> font:font -> x:int -> y:int -> unit
-  end
-
-class pixmap :
-  ?colormap:colormap -> ?mask:bitmap -> [ `pixmap] Gdk.drawable ->
-  object
-    inherit [[`pixmap]] drawable
-    val bitmap : [ `bitmap] drawable option
-    val mask : bitmap option
-    method mask : bitmap option
-    method pixmap : Gdk.pixmap
-  end
-
-class type misc_ops =
-  object
-    method allocation : Gtk.rectangle
-    method colormap : colormap
-    method draw : Rectangle.t option -> unit
-    method hide : unit -> unit
-    method hide_all : unit -> unit
-    method intersect : Rectangle.t -> Rectangle.t option
-    method pointer : int * int
-    method realize : unit -> unit
-    method set_app_paintable : bool -> unit
-    method set_geometry :
-      ?x:int -> ?y:int -> ?width:int -> ?height:int -> unit -> unit
-    method show : unit -> unit
-    method unmap : unit -> unit
-    method unparent : unit -> unit
-    method unrealize : unit -> unit
-    method visible : bool
-    method visual : visual
-    method visual_depth : int
-    method window : window
-  end
-
-val pixmap :
-  window:< misc : #misc_ops; .. > ->
-  width:int -> height:int -> ?mask:bool -> unit -> pixmap
-val pixmap_from_xpm :
-  window:< misc : #misc_ops; .. > ->
-  file:string ->
-  ?colormap:colormap -> ?transparent:color -> unit -> pixmap
-val pixmap_from_xpm_d :
-  window:< misc : #misc_ops; .. > ->
-  data:string array ->
-  ?colormap:colormap -> ?transparent:color -> unit -> pixmap
-
-class drag_context : Gdk.drag_context ->
-  object
-    val context : Gdk.drag_context
-    method status : ?time:int -> Tags.drag_action list -> unit
-    method suggested_action : Tags.drag_action
-    method targets : atom list
-  end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gEdit.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gEdit.ml
deleted file mode 100644 (file)
index 467ee45..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkEdit
-open GObj
-
-class editable_signals obj = object
-  inherit widget_signals obj
-  method activate = GtkSignal.connect ~sgn:Editable.Signals.activate obj ~after
-  method changed = GtkSignal.connect ~sgn:Editable.Signals.changed obj ~after
-  method insert_text =
-    GtkSignal.connect ~sgn:Editable.Signals.insert_text obj ~after
-  method delete_text =
-    GtkSignal.connect ~sgn:Editable.Signals.delete_text obj ~after
-end
-
-class editable obj = object
-  inherit widget obj
-  method connect = new editable_signals obj
-  method select_region = Editable.select_region obj
-  method insert_text = Editable.insert_text obj
-  method delete_text = Editable.delete_text obj
-  method get_chars = Editable.get_chars obj
-  method cut_clipboard () = Editable.cut_clipboard obj
-  method copy_clipboard () = Editable.copy_clipboard obj
-  method paste_clipboard () = Editable.paste_clipboard obj
-  method delete_selection () = Editable.delete_selection obj
-  method set_position = Editable.set_position obj
-  method position = Editable.get_position obj
-  method set_editable = Editable.set_editable obj
-  method selection =
-    if Editable.has_selection obj then
-      Some (Editable.selection_start_pos obj, Editable.selection_end_pos obj)
-    else None
-end
-
-class entry obj = object
-  inherit editable obj
-  method event = new GObj.event_ops obj
-  method set_text = Entry.set_text obj
-  method append_text = Entry.append_text obj
-  method prepend_text = Entry.prepend_text obj
-  method set_visibility = Entry.set_visibility obj
-  method set_max_length = Entry.set_max_length obj
-  method text = Entry.get_text obj
-  method text_length = Entry.text_length obj
-end
-
-let set_editable ?editable ?(width = -2) ?(height = -2) w =
-  may editable ~f:(Editable.set_editable w);
-  if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height
-
-let entry ?max_length ?text ?visibility ?editable
-    ?width ?height ?packing ?show () =
-  let w = Entry.create ?max_length () in
-  Entry.set w ?text ?visibility;
-  set_editable w ?editable ?width ?height;
-  pack_return (new entry w) ~packing ~show
-
-class spin_button obj = object
-  inherit entry (obj : Gtk.spin_button obj)
-  method adjustment =  new GData.adjustment (SpinButton.get_adjustment obj)
-  method value = SpinButton.get_value obj
-  method value_as_int = SpinButton.get_value_as_int obj
-  method spin = SpinButton.spin obj
-  method update = SpinButton.update obj
-  method set_adjustment adj =
-    SpinButton.set_adjustment obj (GData.as_adjustment adj)
-  method set_digits = SpinButton.set_digits obj
-  method set_value = SpinButton.set_value obj
-  method set_update_policy = SpinButton.set_update_policy obj
-  method set_numeric = SpinButton.set_numeric obj
-  method set_wrap = SpinButton.set_wrap obj
-  method set_shadow_type = SpinButton.set_shadow_type obj
-  method set_snap_to_ticks = SpinButton.set_snap_to_ticks obj
-end
-
-let spin_button ?adjustment ?rate ?digits ?value ?update_policy
-    ?numeric ?wrap ?shadow_type ?snap_to_ticks
-    ?width ?height ?packing ?show () =
-  let w = SpinButton.create ?rate ?digits
-      ?adjustment:(may_map ~f:GData.as_adjustment adjustment) () in
-  SpinButton.set w ?value ?update_policy
-    ?numeric ?wrap ?shadow_type ?snap_to_ticks;
-  set_editable w ?width ?height;
-  pack_return (new spin_button w) ~packing ~show
-
-class combo obj = object
-  inherit GObj.widget (obj : Gtk.combo obj)
-  method entry = new entry (Combo.entry obj)
-  method list = new GList.liste (Combo.list obj)
-  method set_popdown_strings = Combo.set_popdown_strings obj
-  method set_use_arrows = Combo.set_use_arrows' obj
-  method set_case_sensitive = Combo.set_case_sensitive obj
-  method set_value_in_list = Combo.set_value_in_list obj
-  method disable_activate () = Combo.disable_activate obj
-  method set_item_string (item : GList.list_item) =
-    Combo.set_item_string obj item#as_item
-end
-
-let combo ?popdown_strings ?use_arrows
-    ?case_sensitive ?value_in_list ?ok_if_empty
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Combo.create () in
-  Combo.set w ?popdown_strings ?use_arrows
-    ?case_sensitive ?value_in_list ?ok_if_empty;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new combo w) ~packing ~show
-
-class text obj = object (self)
-  inherit editable (obj : Gtk.text obj) as super
-  method get_chars ~start ~stop:e =
-    if start < 0 || e > Text.get_length obj || e < start then
-      invalid_arg "GEdit.text#get_chars";
-    super#get_chars ~start ~stop:e
-  method event = new GObj.event_ops obj
-  method set_point = Text.set_point obj
-  method set_hadjustment adj =
-    Text.set_adjustment obj ~horizontal:(GData.as_adjustment adj) ()
-  method set_vadjustment adj =
-    Text.set_adjustment obj ~vertical:(GData.as_adjustment adj) ()
-  method set_word_wrap = Text.set_word_wrap obj
-  method set_line_wrap = Text.set_line_wrap obj
-  method hadjustment = new GData.adjustment (Text.get_hadjustment obj)
-  method vadjustment = new GData.adjustment (Text.get_vadjustment obj)
-  method point = Text.get_point obj
-  method length = Text.get_length obj
-  method freeze () = Text.freeze obj
-  method thaw () = Text.thaw obj
-  method insert ?font ?foreground ?background text =
-    let colormap = try Some self#misc#colormap with _ -> None in
-    Text.insert obj text ?font
-      ?foreground:(may_map foreground ~f:(GDraw.color ?colormap))
-      ?background:(may_map background ~f:(GDraw.color ?colormap))
-end
-
-let text ?hadjustment ?vadjustment ?editable
-    ?word_wrap ?line_wrap ?width ?height ?packing ?show () =
-  let w = Text.create ()
-      ?hadjustment:(may_map ~f:GData.as_adjustment hadjustment)
-      ?vadjustment:(may_map ~f:GData.as_adjustment vadjustment) in
-  may word_wrap ~f:(Text.set_word_wrap w);
-  may line_wrap ~f:(Text.set_line_wrap w);
-  set_editable w ?editable ?width ?height;
-  pack_return (new text w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gEdit.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gEdit.mli
deleted file mode 100644 (file)
index 3b2c286..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-
-class editable_signals : 'a obj ->
-  object
-    inherit widget_signals
-    constraint 'a = [>`editable|`widget]
-    val obj : 'a obj
-    method activate : callback:(unit -> unit) -> GtkSignal.id
-    method changed : callback:(unit -> unit) -> GtkSignal.id
-    method delete_text :
-      callback:(start:int -> stop:int -> unit) -> GtkSignal.id
-    method insert_text :
-      callback:(string -> pos:int -> unit) -> GtkSignal.id
-  end
-
-class editable : 'a obj ->
-  object
-    inherit widget
-    constraint 'a = [>`editable|`widget]
-    val obj : 'a obj
-    method connect : editable_signals
-    method copy_clipboard : unit -> unit
-    method cut_clipboard : unit -> unit
-    method delete_selection : unit -> unit
-    method delete_text : start:int -> stop:int -> unit
-    method get_chars : start:int -> stop:int -> string
-    method insert_text : string -> pos:int -> int
-    method paste_clipboard : unit -> unit
-    method position : int
-    method select_region : start:int -> stop:int -> unit
-    method selection : (int * int) option
-    method set_editable : bool -> unit
-    method set_position : int -> unit
-  end
-
-class entry : 'a obj ->
-  object
-    inherit editable
-    constraint 'a = [>`entry|`editable|`widget]
-    val obj : 'a obj
-    method event : event_ops
-    method append_text : string -> unit
-    method prepend_text : string -> unit
-    method set_max_length : int -> unit
-    method set_text : string -> unit
-    method set_visibility : bool -> unit
-    method text : string
-    method text_length : int
-  end
-val entry :
-  ?max_length:int ->
-  ?text:string ->
-  ?visibility:bool ->
-  ?editable:bool ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> entry
-
-class spin_button : Gtk.spin_button obj ->
-  object
-    inherit entry
-    val obj : Gtk.spin_button obj
-    method adjustment : GData.adjustment
-    method set_adjustment : GData.adjustment -> unit
-    method set_digits : int -> unit
-    method set_numeric : bool -> unit
-    method set_shadow_type : Tags.shadow_type -> unit
-    method set_snap_to_ticks : bool -> unit
-    method set_update_policy : [`ALWAYS|`IF_VALID] -> unit
-    method set_value : float -> unit
-    method set_wrap : bool -> unit
-    method spin : Tags.spin_type -> unit
-    method update : unit
-    method value : float
-    method value_as_int : int
-  end
-val spin_button :
-  ?adjustment:GData.adjustment ->
-  ?rate:float ->
-  ?digits:int ->
-  ?value:float ->
-  ?update_policy:[`ALWAYS|`IF_VALID] ->
-  ?numeric:bool ->
-  ?wrap:bool ->
-  ?shadow_type:Tags.shadow_type ->
-  ?snap_to_ticks:bool ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> spin_button
-
-class combo : Gtk.combo obj ->
-  object
-    inherit widget
-    val obj : Gtk.combo obj
-    method disable_activate : unit -> unit
-    method entry : entry
-    method list : GList.liste
-    method set_case_sensitive : bool -> unit
-    method set_item_string : GList.list_item -> string -> unit
-    method set_popdown_strings : string list -> unit
-    method set_use_arrows : [`NEVER|`DEFAULT|`ALWAYS] -> unit
-    method set_value_in_list :
-      ?required:bool -> ?ok_if_empty:bool -> unit -> unit
-  end
-val combo :
-  ?popdown_strings:string list ->
-  ?use_arrows:[`NEVER|`DEFAULT|`ALWAYS] ->
-  ?case_sensitive:bool ->
-  ?value_in_list:bool ->
-  ?ok_if_empty:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> combo
-
-class text : Gtk.text obj ->
-  object
-    inherit editable
-    val obj : Gtk.text obj
-    method event : event_ops
-    method freeze : unit -> unit
-    method hadjustment : GData.adjustment
-    method insert :
-      ?font:Gdk.font ->
-      ?foreground:GDraw.color -> ?background:GDraw.color -> string -> unit
-    method length : int
-    method point : int
-    method set_hadjustment : GData.adjustment -> unit
-    method set_point : int -> unit
-    method set_vadjustment : GData.adjustment -> unit
-    method set_word_wrap : bool -> unit
-    method set_line_wrap : bool -> unit
-    method thaw : unit -> unit
-    method vadjustment : GData.adjustment
-  end
-val text :
-  ?hadjustment:GData.adjustment ->
-  ?vadjustment:GData.adjustment ->
-  ?editable:bool ->
-  ?word_wrap:bool ->
-  ?line_wrap:bool ->
-  ?width:int ->
-  ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> text
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gHtml.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gHtml.ml
deleted file mode 100644 (file)
index 1150790..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GObj
-open GtkXmHTML
-
-class xmhtml obj = object (self)
-  inherit widget_full (obj : GtkXmHTML.xmhtml obj)
-  method event = new GObj.event_ops obj
-  method freeze = freeze obj
-  method thaw = thaw obj
-  method source = source obj
-  method set_fonts = set_font_familty obj
-  method set_fonts_fixed = set_font_familty_fixed obj
-  method set_anchor_buttons = set_anchor_buttons obj
-  method set_anchor_cursor = set_anchor_cursor obj
-  method set_anchor_underline = set_anchor_underline_type obj
-  method set_anchor_visited_underline = set_anchor_visited_underline_type obj
-  method set_anchor_target_underline = set_anchor_target_underline_type obj
-  method set_topline = set_topline obj
-  method topline = get_topline obj
-  method set_strict_checking = set_strict_checking obj
-  method set_bad_html_warnings = set_bad_html_warnings obj
-  method set_imagemap_draw = set_imagemap_draw obj
-end
-
-let xmhtml ?source ?border_width ?width ?height ?packing ?show () =
-  let w = create () in
-  Container.set w ?border_width ?width ?height;
-  may source ~f:(GtkXmHTML.source w);
-  pack_return (new xmhtml w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gList.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gList.ml
deleted file mode 100644 (file)
index 3b1abe4..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkList
-open GObj
-open GContainer
-
-class list_item obj = object
-  inherit container (obj : Gtk.list_item obj)
-  method event = new GObj.event_ops obj
-  method as_item = obj
-  method select () = Item.select obj
-  method deselect () = Item.deselect obj
-  method toggle () = Item.toggle obj
-  method connect = new item_signals obj
-end
-
-let list_item ?label ?border_width ?width ?height ?packing ?(show=true) () =
-  let w = ListItem.create ?label () in
-  Container.set w ?border_width ?width ?height;
-  let item = new list_item w in
-  may packing ~f:(fun f -> (f item : unit));
-  if show then item#misc#show ();
-  item
-
-class liste obj = object
-  inherit [list_item] item_container (obj : Gtk.liste obj)
-  method private wrap w = new list_item (ListItem.cast w)
-  method insert w = Liste.insert_item obj w#as_item
-  method clear_items = Liste.clear_items obj
-  method select_item = Liste.select_item obj
-  method unselect_item = Liste.unselect_item obj
-  method child_position (w : list_item) = Liste.child_position obj w#as_item
-end
-
-let liste ?selection_mode ?border_width ?width ?height
-    ?packing ?show () =
-  let w = Liste.create () in
-  may selection_mode ~f:(Liste.set_selection_mode w);
-  Container.set w ?border_width ?width ?height;
-  pack_return (new liste w) ~packing ~show
-
-(* Cell lists *)
-
-class clist_signals obj = object
-  inherit container_signals obj
-  method click_column =
-    GtkSignal.connect ~sgn:CList.Signals.click_column obj ~after
-  method select_row =
-    GtkSignal.connect ~sgn:CList.Signals.select_row obj ~after
-  method unselect_row =
-    GtkSignal.connect ~sgn:CList.Signals.unselect_row obj ~after
-  method scroll_vertical =
-    GtkSignal.connect ~sgn:CList.Signals.scroll_vertical obj ~after
-  method scroll_horizontal =
-    GtkSignal.connect ~sgn:CList.Signals.scroll_horizontal obj ~after
-end
-
-class ['a] clist obj = object (self)
-  inherit widget (obj : Gtk.clist obj)
-  method set_border_width = Container.set_border_width obj
-  method event = new GObj.event_ops obj
-  method connect = new clist_signals obj
-  method rows = CList.get_rows obj
-  method columns = CList.get_columns obj
-  method focus_row = CList.get_focus_row obj
-  method hadjustment = new GData.adjustment (CList.get_hadjustment obj)
-  method vadjustment = new GData.adjustment (CList.get_vadjustment obj)
-  method set_button_actions = CList.set_button_actions obj
-  method freeze () = CList.freeze obj
-  method thaw () = CList.thaw obj
-  method column_title = CList.get_column_title obj
-  method column_widget col =
-    new widget (CList.get_column_widget obj col)
-  method columns_autosize () = CList.columns_autosize obj
-  method optimal_column_width = CList.optimal_column_width obj
-  method moveto ?(row_align=0.) ?(col_align=0.) row col =
-    CList.moveto obj row col ~row_align ~col_align
-  method row_is_visible = CList.row_is_visible obj
-  method cell_type = CList.get_cell_type obj
-  method cell_text = CList.get_text obj
-  method cell_pixmap row col =
-    let pm, mask = CList.get_pixmap obj row col in
-    may_map pm ~f:(fun x -> new GDraw.pixmap ?mask x)
-  method cell_style  row col =
-    try Some (new style (CList.get_cell_style obj row col))
-    with Gpointer.Null -> None
-  method row_selectable row = CList.get_selectable obj ~row
-  method row_style row =
-    try Some (new style (CList.get_row_style obj ~row))
-    with Gpointer.Null -> None
-  method set_shift = CList.set_shift obj
-  method insert ~row texts =
-    let texts = List.map texts ~f:(fun x -> Some x) in
-    CList.insert obj ~row texts
-  method append = self#insert ~row:self#rows
-  method prepend = self#insert ~row:0
-  method remove = CList.remove obj
-  method select = CList.select obj
-  method unselect = CList.unselect obj
-  method clear () = CList.clear obj
-  method get_row_column = CList.get_row_column obj
-  method select_all () = CList.select_all obj
-  method unselect_all () = CList.unselect_all obj
-  method swap_rows = CList.swap_rows obj
-  method row_move = CList.row_move obj
-  method sort () = CList.sort obj
-  method set_hadjustment adj =
-    CList.set_hadjustment obj (GData.as_adjustment adj)
-  method set_vadjustment adj =
-    CList.set_vadjustment obj (GData.as_adjustment adj)
-  method set_shadow_type = CList.set_shadow_type obj
-  method set_button_actions = CList.set_button_actions obj
-  method set_selection_mode = CList.set_selection_mode obj
-  method set_reorderable = CList.set_reorderable obj
-  method set_use_drag_icons = CList.set_use_drag_icons obj
-  method set_row_height = CList.set_row_height obj
-  method set_titles_show = CList.set_titles_show obj
-  method set_titles_active = CList.set_titles_active obj
-  method set_sort = CList.set_sort obj
-  method set_column ?widget =
-    CList.set_column obj ?widget:(may_map widget ~f:as_widget)
-  method set_row ?foreground ?background ?selectable ?style =
-    let color = may_map ~f:(fun c -> Gpointer.optboxed (GDraw.optcolor c))
-    and style = may_map ~f:(fun (st : style) -> st#as_style) style in
-    CList.set_row obj
-      ?foreground:(color foreground) ?background:(color background)
-      ?selectable ?style
-  method set_cell ?text ?pixmap ?spacing ?style =
-    let pixmap, mask =
-      match pixmap with None -> None, None
-      | Some (pm : GDraw.pixmap) -> Some pm#pixmap, pm#mask
-    and style = may_map ~f:(fun (st : style) -> st#as_style) style in
-    CList.set_cell obj ?text ?pixmap ?mask ?spacing ?style
-  method set_row_data n ~data =
-    CList.set_row_data obj ~row:n (Obj.repr (data : 'a))
-  method get_row_data n : 'a = Obj.obj (CList.get_row_data obj ~row:n)
-  method scroll_vertical =
-    CList.Signals.emit_scroll obj ~sgn:CList.Signals.scroll_vertical
-  method scroll_horizontal =
-    CList.Signals.emit_scroll obj ~sgn:CList.Signals.scroll_horizontal
-end
-
-let clist ?(columns=1) ?titles ?hadjustment ?vadjustment
-    ?shadow_type ?button_actions ?selection_mode
-    ?reorderable ?use_drag_icons ?row_height
-    ?titles_show ?titles_active ?auto_sort ?sort_column ?sort_type
-    ?border_width ?width ?height ?packing ?show () =
-  let w =
-    match titles with None -> CList.create ~cols:columns
-    | Some titles -> CList.create_with_titles (Array.of_list titles)
-  in
-  CList.set w 
-    ?hadjustment:(may_map ~f:GData.as_adjustment hadjustment)
-    ?vadjustment:(may_map ~f:GData.as_adjustment vadjustment)
-    ?shadow_type ?button_actions ?selection_mode ?reorderable
-    ?use_drag_icons ?row_height ?titles_show ?titles_active;
-  CList.set_sort w ?auto:auto_sort ?column:sort_column ?dir:sort_type ();
-  Container.set w ?border_width ?width ?height;
-  pack_return (new clist w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gList.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gList.mli
deleted file mode 100644 (file)
index 17f4cef..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class list_item : Gtk.list_item obj ->
-  object
-    inherit container
-    val obj : Gtk.list_item obj
-    method event : event_ops
-    method as_item : Gtk.list_item obj
-    method connect : item_signals
-    method deselect : unit -> unit
-    method select : unit -> unit
-    method toggle : unit -> unit
-  end
-val list_item :
-  ?label:string ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(list_item -> unit) -> ?show:bool -> unit -> list_item
-
-class liste : Gtk.liste obj ->
-  object
-    inherit [list_item] item_container
-    val obj : Gtk.liste obj
-    method child_position : list_item -> int
-    method clear_items : start:int -> stop:int -> unit
-    method insert : list_item -> pos:int -> unit
-    method select_item : pos:int -> unit
-    method unselect_item : pos:int -> unit
-    method private wrap : Gtk.widget obj -> list_item
-  end
-val liste :
-  ?selection_mode:Tags.selection_mode ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> liste
-
-class clist_signals : 'a obj ->
-  object
-    inherit container_signals
-    constraint 'a = [>`clist|`container|`widget]
-    val obj : 'a obj
-    method click_column : callback:(int -> unit) -> GtkSignal.id
-    method select_row :
-      callback:(row:int ->
-                column:int -> event:GdkEvent.Button.t option -> unit) ->
-      GtkSignal.id
-    method unselect_row :
-      callback:(row:int ->
-                column:int -> event:GdkEvent.Button.t option -> unit) ->
-      GtkSignal.id
-    method scroll_horizontal :
-      callback:(Tags.scroll_type -> pos:clampf -> unit) -> GtkSignal.id
-    method scroll_vertical :
-      callback:(Tags.scroll_type -> pos:clampf -> unit) -> GtkSignal.id
-  end
-
-class ['a] clist : Gtk.clist obj ->
-  object
-    inherit widget
-    val obj : Gtk.clist obj
-    method event : event_ops
-    method append : string list -> int
-    method cell_pixmap : int -> int -> GDraw.pixmap option
-    method cell_style : int -> int -> style option
-    method cell_text : int -> int -> string
-    method cell_type : int -> int -> Tags.cell_type
-    method clear : unit -> unit
-    method column_title : int -> string
-    method column_widget : int -> widget
-    method columns : int
-    method columns_autosize : unit -> unit
-    method connect : clist_signals
-    method focus_row : int
-    method freeze : unit -> unit
-    method get_row_column : x:int -> y:int -> int * int
-    method get_row_data : int -> 'a
-    method hadjustment : GData.adjustment
-    method insert : row:int -> string list -> int
-    method moveto :
-      ?row_align:clampf -> ?col_align:clampf -> int -> int -> unit
-    method optimal_column_width : int -> int
-    method prepend : string list -> int
-    method remove : row:int -> unit
-    method row_is_visible : int -> Tags.visibility
-    method row_move : int -> dst:int -> unit
-    method row_selectable : int -> bool
-    method row_style : int -> style option
-    method rows : int
-    method scroll_vertical : Tags.scroll_type -> pos:clampf -> unit
-    method scroll_horizontal : Tags.scroll_type -> pos:clampf -> unit
-    method select : int -> int -> unit
-    method select_all : unit -> unit
-    method set_border_width : int -> unit
-    method set_button_actions : int -> Tags.button_action list -> unit
-    method set_cell :
-      ?text:string ->
-      ?pixmap:GDraw.pixmap ->
-      ?spacing:int -> ?style:style -> int -> int -> unit
-    method set_column :
-      ?widget:widget ->
-      ?title:string ->
-      ?title_active:bool ->
-      ?justification:Tags.justification ->
-      ?visibility:bool ->
-      ?resizeable:bool ->
-      ?auto_resize:bool ->
-      ?width:int -> ?min_width:int -> ?max_width:int -> int -> unit
-    method set_hadjustment : GData.adjustment -> unit
-    method set_reorderable : bool -> unit
-    method set_row :
-      ?foreground:GDraw.optcolor ->
-      ?background:GDraw.optcolor ->
-      ?selectable:bool ->
-      ?style:style -> int -> unit
-    method set_row_data : int -> data:'a -> unit
-    method set_row_height : int -> unit
-    method set_selection_mode : Tags.selection_mode -> unit
-    method set_shadow_type : Tags.shadow_type -> unit
-    method set_shift : int -> int -> vertical:int -> horizontal:int -> unit
-    method set_sort :
-      ?auto:bool -> ?column:int -> ?dir:Tags.sort_type -> unit -> unit
-    method set_titles_active : bool -> unit
-    method set_titles_show : bool -> unit
-    method set_use_drag_icons : bool -> unit
-    method set_vadjustment : GData.adjustment -> unit
-    method sort : unit -> unit
-    method swap_rows : int -> int -> unit
-    method thaw : unit -> unit
-    method unselect : int -> int -> unit
-    method unselect_all : unit -> unit
-    method vadjustment : GData.adjustment
-  end
-val clist :
-  ?columns:int ->
-  ?titles:string list ->
-  ?hadjustment:GData.adjustment ->
-  ?vadjustment:GData.adjustment ->
-  ?shadow_type:Tags.shadow_type ->
-  ?button_actions:(int * Tags.button_action list) list ->
-  ?selection_mode:Tags.selection_mode ->
-  ?reorderable:bool ->
-  ?use_drag_icons:bool ->
-  ?row_height:int ->
-  ?titles_show:bool ->
-  ?titles_active:bool ->
-  ?auto_sort:bool ->
-  ?sort_column:int ->
-  ?sort_type:Tags.sort_type ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> 'a clist
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMain.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMain.ml
deleted file mode 100644 (file)
index 811f490..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GtkMain
-open GObj
-
-module Main : sig
-  val init : unit -> string (* returns the locale name *)
-  val main : unit -> unit
-  val quit : unit -> unit
-  val version : int * int * int
-  val flush : unit -> unit
-end = Main
-
-module Grab = struct
-  open Grab
-  let add (w : #widget) = add w#as_widget
-  let remove (w : #widget) = remove w#as_widget
-  let get_current () = new widget (get_current ())
-end
-
-module Timeout : sig
-  type id
-  val add : ms:int -> callback:(unit -> bool) -> id
-  val remove : id -> unit
-end = Timeout
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMenu.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMenu.ml
deleted file mode 100644 (file)
index 52f05a4..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkData
-open GtkBase
-open GtkMenu
-open GObj
-open GContainer
-
-(* Menu type *)
-
-class menu_shell_signals obj = object
-  inherit container_signals obj
-  method deactivate =
-    GtkSignal.connect ~sgn:MenuShell.Signals.deactivate obj ~after
-end
-
-class type virtual ['a] pre_menu = object
-  inherit ['a] item_container
-  method as_menu : Gtk.menu Gtk.obj
-  method deactivate : unit -> unit
-  method connect : menu_shell_signals
-  method event : event_ops
-  method popup : button:int -> time:int -> unit
-  method popdown : unit -> unit
-  method set_accel_group : accel_group -> unit
-end
-
-(* Menu items *)
-
-class menu_item_signals obj = object
-  inherit item_signals obj
-  method activate = GtkSignal.connect ~sgn:MenuItem.Signals.activate obj
-end
-
-
-class ['a] pre_menu_item_skel obj = object
-  inherit container obj
-  method as_item = MenuItem.coerce obj
-  method set_submenu (w : 'a pre_menu) = MenuItem.set_submenu obj w#as_menu
-  method remove_submenu () = MenuItem.remove_submenu obj
-  method configure = MenuItem.configure obj
-  method activate () = MenuItem.activate obj
-  method right_justify () = MenuItem.right_justify obj
-  method add_accelerator ~group ?modi:m ?flags key=
-    Widget.add_accelerator obj ~sgn:MenuItem.Signals.activate group ?flags
-      ?modi:m ~key
-end
-
-class menu_item obj = object
-  inherit [menu_item] pre_menu_item_skel obj
-  method connect = new menu_item_signals obj
-  method event = new GObj.event_ops obj
-end
-
-class menu_item_skel = [menu_item] pre_menu_item_skel
-
-let pack_item self ~packing ~show =
-  may packing ~f:(fun f -> (f (self :> menu_item) : unit));
-  if show <> Some false then self#misc#show ();
-  self
-
-let menu_item ?label ?border_width ?width ?height ?packing ?show () =
-  let w = MenuItem.create ?label () in
-  Container.set w ?border_width ?width ?height;
-  pack_item (new menu_item w) ?packing ?show
-
-let tearoff_item ?border_width ?width ?height ?packing ?show () =
-  let w = MenuItem.tearoff_create () in
-  Container.set w ?border_width ?width ?height;
-  pack_item (new menu_item w) ?packing ?show
-
-class check_menu_item_signals obj = object
-  inherit menu_item_signals obj
-  method toggled =
-    GtkSignal.connect ~sgn:CheckMenuItem.Signals.toggled obj ~after
-end
-
-class check_menu_item obj = object
-  inherit menu_item_skel obj
-  method set_active = CheckMenuItem.set_active obj
-  method set_show_toggle = CheckMenuItem.set_show_toggle obj
-  method active = CheckMenuItem.get_active obj
-  method toggled () = CheckMenuItem.toggled obj
-  method connect = new check_menu_item_signals obj
-  method event = new GObj.event_ops obj
-end
-
-let check_menu_item ?label ?active ?show_toggle
-    ?border_width ?width ?height ?packing ?show () =
-  let w = CheckMenuItem.create ?label () in
-  CheckMenuItem.set w ?active ?show_toggle;
-  Container.set w ?border_width ?width ?height;
-  pack_item (new check_menu_item w) ?packing ?show
-
-class radio_menu_item obj = object
-  inherit check_menu_item (obj : Gtk.radio_menu_item obj)
-  method group = Some obj
-  method set_group = RadioMenuItem.set_group obj
-end
-
-let radio_menu_item ?group ?label ?active ?show_toggle
-    ?border_width ?width ?height ?packing ?show () =
-  let w = RadioMenuItem.create ?group ?label () in
-  CheckMenuItem.set w ?active ?show_toggle;
-  Container.set w ?border_width ?width ?height;
-  pack_item (new radio_menu_item w) ?packing ?show
-
-(* Menus *)
-
-class menu_shell obj = object
-  inherit [menu_item] item_container obj
-  method private wrap w = new menu_item (MenuItem.cast w)
-  method insert w = MenuShell.insert obj w#as_item
-  method deactivate () = MenuShell.deactivate obj
-  method connect = new menu_shell_signals obj
-  method event = new GObj.event_ops obj
-end
-
-class menu obj = object
-  inherit menu_shell obj
-  method popup = Menu.popup obj
-  method popdown () = Menu.popdown obj
-  method as_menu : Gtk.menu obj = obj
-  method set_accel_group = Menu.set_accel_group obj
-end
-
-let menu ?border_width ?packing ?show () =
-  let w = Menu.create () in
-  may border_width ~f:(Container.set_border_width w);
-  let self = new menu w in
-  may packing ~f:(fun f -> (f (self :> menu) : unit));
-  if show <> Some false then self#misc#show ();
-  self
-
-(* Option Menu (GtkButton?) *)
-
-class option_menu obj = object
-  inherit GButton.button_skel obj
-  method connect = new GButton.button_signals obj
-  method event = new GObj.event_ops obj
-  method set_menu (menu : menu) = OptionMenu.set_menu obj menu#as_menu
-  method get_menu = new menu (OptionMenu.get_menu obj)
-  method remove_menu () = OptionMenu.remove_menu obj
-  method set_history = OptionMenu.set_history obj
-end
-
-let option_menu ?border_width ?width ?height ?packing ?show () =
-  let w = OptionMenu.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new option_menu w) ~packing ~show
-
-(* Menu Bar *)
-
-let menu_bar ?border_width ?width ?height ?packing ?show () =
-  let w = MenuBar.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new menu_shell w) ~packing ~show
-
-(* Menu Factory *)
-
-class ['a] factory
-    ?(accel_group=AccelGroup.create ())
-    ?(accel_modi=[`CONTROL])
-    ?(accel_flags=[`VISIBLE]) (menu_shell : 'a) =
-  object (self)
-    val menu_shell : #menu_shell = menu_shell
-    val group = accel_group
-    val m = accel_modi
-    val flags = accel_flags
-    method menu = menu_shell
-    method accel_group = group
-    method private bind ?key ?callback (item : menu_item) =
-      menu_shell#append item;
-      may key ~f:(item#add_accelerator ~group ~modi:m ~flags);
-      may callback ~f:(fun callback -> item#connect#activate ~callback)
-    method add_item ?key ?callback ?submenu label =
-      let item = menu_item ~label () in
-      self#bind item ?key ?callback;
-      may (submenu : menu option) ~f:item#set_submenu;
-      item
-    method add_check_item ?active ?key ?callback label =
-      let item = check_menu_item ~label ?active () in
-      self#bind (item :> menu_item) ?key
-       ?callback:(may_map callback ~f:(fun f () -> f item#active));
-      item
-    method add_radio_item ?group ?active ?key ?callback label =
-      let item = radio_menu_item ~label ?group ?active () in
-      self#bind (item :> menu_item) ?key
-       ?callback:(may_map callback ~f:(fun f () -> f item#active));
-      item
-    method add_separator () = menu_item ~packing:menu_shell#append ()
-    method add_submenu ?key label =
-      let item = menu_item ~label () in
-      self#bind item ?key;
-      menu ~packing:item#set_submenu ();
-    method add_tearoff () = tearoff_item ~packing:menu_shell#append ()
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMenu.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMenu.mli
deleted file mode 100644 (file)
index 505249b..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class menu_shell_signals : 'b obj ->
-  object ('a)
-    inherit container_signals
-    constraint 'b = [>`menushell|`container|`widget]
-    val obj : 'b obj
-    method deactivate : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class menu_item_signals : 'b obj ->
-  object ('a)
-    inherit item_signals
-    constraint 'b = [>`menuitem|`container|`item|`widget]
-    val obj : 'b obj
-    method activate : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class menu_item_skel :
-  'a obj ->
-  object
-    inherit container
-    constraint 'a = [>`widget|`container|`menuitem]
-    val obj : 'a obj
-    method activate : unit -> unit
-    method add_accelerator :
-      group:accel_group ->
-      ?modi:Gdk.Tags.modifier list ->
-      ?flags:Tags.accel_flag list -> Gdk.keysym -> unit
-    method as_item : Gtk.menu_item obj
-    method configure : show_toggle:bool -> show_indicator:bool -> unit
-    method remove_submenu : unit -> unit
-    method right_justify : unit -> unit
-    method set_submenu : menu -> unit
-  end
-and menu_item : 'a obj ->
-  object
-    inherit menu_item_skel
-    constraint 'a = [>`widget|`container|`item|`menuitem]
-    val obj : 'a obj
-    method event : event_ops
-    method connect : menu_item_signals
-  end
-and menu : Gtk.menu obj ->
-  object
-    inherit [menu_item] item_container
-    val obj : Gtk.menu obj
-    method add : menu_item -> unit
-    method event : event_ops
-    method append : menu_item -> unit
-    method as_menu : Gtk.menu obj
-    method children : menu_item list
-    method connect : menu_shell_signals
-    method deactivate : unit -> unit
-    method insert : menu_item -> pos:int -> unit
-    method popdown : unit -> unit
-    method popup : button:int -> time:int -> unit
-    method prepend : menu_item -> unit
-    method remove : menu_item -> unit
-    method set_accel_group : accel_group -> unit
-    method set_border_width : int -> unit
-    method private wrap : Gtk.widget obj -> menu_item
-  end
-
-val menu :
-  ?border_width:int -> ?packing:(menu -> unit) -> ?show:bool -> unit -> menu
-val menu_item :
-  ?label:string ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(menu_item -> unit) -> ?show:bool -> unit -> menu_item
-val tearoff_item :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(menu_item -> unit) -> ?show:bool -> unit -> menu_item
-
-class check_menu_item_signals : 'a obj ->
-  object
-    inherit menu_item_signals
-    constraint 'a = [>`checkmenuitem|`container|`item|`menuitem|`widget]
-    val obj : 'a obj
-    method toggled : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class check_menu_item : 'a obj ->
-  object
-    inherit menu_item_skel
-    constraint 'a = [>`widget|`checkmenuitem|`container|`item|`menuitem]
-    val obj : 'a obj
-    method active : bool
-    method event : event_ops
-    method connect : check_menu_item_signals
-    method set_active : bool -> unit
-    method set_show_toggle : bool -> unit
-    method toggled : unit -> unit
-  end
-val check_menu_item :
-  ?label:string ->
-  ?active:bool ->
-  ?show_toggle:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(menu_item -> unit) -> ?show:bool -> unit -> check_menu_item
-
-class radio_menu_item : Gtk.radio_menu_item obj ->
-  object
-    inherit check_menu_item
-    val obj : Gtk.radio_menu_item obj
-    method group : Gtk.radio_menu_item group
-    method set_group : Gtk.radio_menu_item group -> unit
-  end
-val radio_menu_item :
-  ?group:Gtk.radio_menu_item group ->
-  ?label:string ->
-  ?active:bool ->
-  ?show_toggle:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(menu_item -> unit) -> ?show:bool -> unit -> radio_menu_item
-
-class menu_shell : 'a obj ->
-  object
-    inherit [menu_item] item_container
-    constraint 'a = [>`widget|`container|`menushell]
-    val obj : 'a obj
-    method event : event_ops
-    method deactivate : unit -> unit
-    method connect : menu_shell_signals
-    method insert : menu_item -> pos:int -> unit
-    method private wrap : Gtk.widget obj -> menu_item
-  end
-
-val menu_bar :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> menu_shell
-
-class option_menu : 'a obj ->
-  object
-    inherit GButton.button_skel
-    constraint 'a = [>`optionmenu|`button|`container|`widget]
-    val obj : 'a obj
-    method event : event_ops
-    method connect : GButton.button_signals
-    method get_menu : menu
-    method remove_menu : unit -> unit
-    method set_history : int -> unit
-    method set_menu : menu -> unit
-  end
-val option_menu :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> option_menu
-
-class ['a] factory :
-  ?accel_group:accel_group ->
-  ?accel_modi:Gdk.Tags.modifier list ->
-  ?accel_flags:Tags.accel_flag list ->
-  'a ->
-  object
-    constraint 'a = #menu_shell
-    val flags : Tags.accel_flag list
-    val group : accel_group
-    val m : Gdk.Tags.modifier list
-    val menu_shell : 'a
-    method accel_group : accel_group
-    method add_check_item :
-      ?active:bool ->
-      ?key:Gdk.keysym ->
-      ?callback:(bool -> unit) -> string -> check_menu_item
-    method add_item :
-      ?key:Gdk.keysym ->
-      ?callback:(unit -> unit) ->
-      ?submenu:menu -> string -> menu_item
-    method add_radio_item :
-      ?group:Gtk.radio_menu_item group ->
-      ?active:bool ->
-      ?key:Gdk.keysym ->
-      ?callback:(bool -> unit) -> string -> radio_menu_item
-    method add_separator : unit -> menu_item
-    method add_submenu : ?key:Gdk.keysym -> string -> menu
-    method add_tearoff : unit -> menu_item
-    method private bind :
-      ?key:Gdk.keysym -> ?callback:(unit -> unit) -> menu_item -> unit
-    method menu : 'a
-  end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMisc.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMisc.ml
deleted file mode 100644 (file)
index 13fd7b4..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkMisc
-open GObj
-
-let separator dir ?(width = -2) ?(height = -2) ?packing ?show () =
-  let w = Separator.create dir in
-  if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height;
-  pack_return (new widget_full w) ~packing ~show
-
-class statusbar_context obj ctx = object (self)
-  val obj : statusbar obj = obj
-  val context : Gtk.statusbar_context = ctx
-  method context = context
-  method push text = Statusbar.push obj context ~text
-  method pop () = Statusbar.pop obj context
-  method remove = Statusbar.remove obj context
-  method flash ?(delay=1000) text =
-    let msg = self#push text in
-    GtkMain.Timeout.add ~ms:delay ~callback:(fun () -> self#remove msg; false);
-    ()
-end
-
-class statusbar obj = object
-  inherit GContainer.container_full (obj : Gtk.statusbar obj)
-  method new_context ~name =
-    new statusbar_context obj (Statusbar.get_context obj name)
-end
-
-let statusbar ?border_width ?width ?height ?packing ?show () =
-  let w = Statusbar.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new statusbar w) ~packing ~show
-
-class calendar_signals obj = object
-  inherit widget_signals obj
-  method month_changed =
-    GtkSignal.connect obj ~sgn:Calendar.Signals.month_changed ~after
-  method day_selected =
-    GtkSignal.connect obj ~sgn:Calendar.Signals.day_selected ~after
-  method day_selected_double_click =
-    GtkSignal.connect obj
-      ~sgn:Calendar.Signals.day_selected_double_click ~after
-  method prev_month =
-    GtkSignal.connect obj ~sgn:Calendar.Signals.prev_month ~after
-  method next_month =
-    GtkSignal.connect obj ~sgn:Calendar.Signals.next_month ~after
-  method prev_year =
-    GtkSignal.connect obj ~sgn:Calendar.Signals.prev_year ~after
-  method next_year =
-    GtkSignal.connect obj ~sgn:Calendar.Signals.next_year ~after
-end
-
-class calendar obj = object
-  inherit widget (obj : Gtk.calendar obj)
-  method event = new GObj.event_ops obj
-  method connect = new calendar_signals obj
-  method select_month = Calendar.select_month obj
-  method select_day = Calendar.select_day obj
-  method mark_day = Calendar.mark_day obj
-  method unmark_day = Calendar.unmark_day obj
-  method clear_marks = Calendar.clear_marks obj
-  method display_options = Calendar.display_options obj
-  method date = Calendar.get_date obj
-  method freeze () = Calendar.freeze obj
-  method thaw () = Calendar.thaw obj
-end
-
-let calendar ?options ?(width = -2) ?(height = -2) ?packing ?show () =
-  let w = Calendar.create () in
-  if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height;
-  may options ~f:(Calendar.display_options w);
-  pack_return (new calendar w) ~packing ~show
-
-class drawing_area obj = object
-  inherit widget_full (obj : Gtk.drawing_area obj)
-  method event = new GObj.event_ops obj
-  method set_size = DrawingArea.size obj
-end
-
-let drawing_area ?(width=0) ?(height=0) ?packing ?show () =
-  let w = DrawingArea.create () in
-  if width <> 0 || height <> 0 then DrawingArea.size w ~width ~height;
-  pack_return (new drawing_area w) ~packing ~show
-
-class misc obj = object
-  inherit widget obj
-  method set_alignment = Misc.set_alignment obj
-  method set_padding = Misc.set_padding obj
-end
-
-class arrow obj = object
-  inherit misc obj
-  method set_arrow kind ~shadow = Arrow.set obj ~kind ~shadow
-end
-
-let arrow ~kind ~shadow
-    ?xalign ?yalign ?xpad ?ypad ?width ?height ?packing ?show () =
-  let w = Arrow.create ~kind ~shadow in
-  Misc.set w ?xalign ?yalign ?xpad ?ypad ?width ?height;
-  pack_return (new arrow w) ~packing ~show
-
-class image obj = object
-  inherit misc obj
-  method set_image ?mask image = Image.set obj image ?mask
-end
-
-let image image ?mask
-    ?xalign ?yalign ?xpad ?ypad ?width ?height ?packing ?show () =
-  let w = Image.create image ?mask in
-  Misc.set w ?xalign ?yalign ?xpad ?ypad ?width ?height;
-  pack_return (new image w) ~packing ~show
-
-class label_skel obj = object
-  inherit misc obj
-  method set_text = Label.set_text obj
-  method set_justify = Label.set_justify obj
-  method set_pattern = Label.set_pattern obj
-  method set_line_wrap = Label.set_line_wrap obj
-  method text = Label.get_text obj
-end
-
-class label obj = object
-  inherit label_skel (Label.coerce obj)
-  method connect = new widget_signals obj
-end
-
-let label ?(text="") ?justify ?line_wrap ?pattern
-    ?xalign ?yalign ?xpad ?ypad ?width ?height ?packing ?show () =
-  let w = Label.create text in
-  Label.set w ?justify ?line_wrap ?pattern;
-  Misc.set w ?xalign ?yalign ?xpad ?ypad ?width ?height;
-  pack_return (new label w) ~packing ~show
-
-let label_cast w = new label (Label.cast w#as_widget)
-
-class tips_query_signals obj = object
-  inherit widget_signals obj
-  method widget_entered ~callback = 
-    GtkSignal.connect ~sgn:TipsQuery.Signals.widget_entered obj ~after
-      ~callback:(function None -> callback None
-       | Some w -> callback (Some (new widget w)))
-  method widget_selected ~callback = 
-    GtkSignal.connect ~sgn:TipsQuery.Signals.widget_selected obj ~after
-      ~callback:(function None -> callback None
-       | Some w -> callback (Some (new widget w)))
-end
-
-class tips_query obj = object
-  inherit label_skel (obj : Gtk.tips_query obj)
-  method start () = TipsQuery.start obj
-  method stop () = TipsQuery.stop obj
-  method set_caller (w : widget) = TipsQuery.set_caller obj w#as_widget
-  method set_emit_always = TipsQuery.set_emit_always obj
-  method set_label_inactive inactive = TipsQuery.set_labels obj ~inactive
-  method set_label_no_tip no_tip = TipsQuery.set_labels obj ~no_tip
-  method connect = new tips_query_signals obj
-end
-
-let tips_query ?caller ?emit_always ?label_inactive ?label_no_tip
-    ?xalign ?yalign ?xpad ?ypad ?width ?height ?packing ?show () =
-  let w = TipsQuery.create () in
-  let caller = may_map caller ~f:(fun (w : #widget) -> w#as_widget) in
-  TipsQuery.set w ?caller ?emit_always ?label_inactive ?label_no_tip;
-  Misc.set w ?xalign ?yalign ?xpad ?ypad ?width ?height;
-  pack_return (new tips_query w) ~packing ~show
-
-class color_selection obj = object
-  inherit GObj.widget_full (obj : Gtk.color_selection obj)
-  method set_update_policy = ColorSelection.set_update_policy obj
-  method set_opacity = ColorSelection.set_opacity obj
-  method set_color ~red ~green ~blue ?opacity () =
-    ColorSelection.set_color obj ~red ~green ~blue ?opacity
-  method get_color = ColorSelection.get_color obj
-end
-
-let color_selection ?border_width ?width ?height ?packing ?show () =
-  let w = ColorSelection.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new color_selection w) ~packing ~show
-
-class pixmap obj = object
-  inherit misc (obj : Gtk.pixmap obj)
-  method connect = new widget_signals obj
-  method set_pixmap (pm : GDraw.pixmap) =
-    Pixmap.set obj ~pixmap:pm#pixmap ?mask:pm#mask
-  method pixmap =
-    new GDraw.pixmap (Pixmap.pixmap obj)
-      ?mask:(try Some(Pixmap.mask obj) with Gpointer.Null -> None)
-end
-
-let pixmap (pm : #GDraw.pixmap) ?xalign ?yalign ?xpad ?ypad
-    ?(width = -2) ?(height = -2) ?packing ?show () =
-  let w = Pixmap.create pm#pixmap ?mask:pm#mask in
-  Misc.set w ?xalign ?yalign ?xpad ?ypad;
-  if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height;
-  pack_return (new pixmap w) ~packing ~show
-
-class font_selection obj = object
-  inherit widget_full (obj : Gtk.font_selection obj)
-  method notebook = new GPack.notebook obj
-  method event = new event_ops obj
-  method font = FontSelection.get_font obj
-  method font_name = FontSelection.get_font_name obj
-  method set_font_name = FontSelection.set_font_name obj
-  method preview_text = FontSelection.get_preview_text obj
-  method set_preview_text = FontSelection.set_preview_text obj
-  method set_filter = FontSelection.set_filter obj
-end
-
-let font_selection ?border_width ?width ?height ?packing ?show () =
-  let w = FontSelection.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new font_selection w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMisc.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gMisc.mli
deleted file mode 100644 (file)
index 7008369..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-val separator :
-  Tags.orientation ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> widget_full
-
-class statusbar_context :
-  Gtk.statusbar obj -> Gtk.statusbar_context ->
-  object
-    val context : Gtk.statusbar_context
-    val obj : Gtk.statusbar obj
-    method context : Gtk.statusbar_context
-    method flash : ?delay:int -> string -> unit
-    method pop : unit -> unit
-    method push : string -> statusbar_message
-    method remove : statusbar_message -> unit
-  end
-
-class statusbar : Gtk.statusbar obj ->
-  object
-    inherit container_full
-    val obj : Gtk.statusbar obj
-    method new_context : name:string -> statusbar_context
-  end
-val statusbar :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> statusbar
-
-class calendar_signals : 'a obj ->
-  object
-    inherit widget_signals
-    constraint 'a = [>`calendar|`widget]
-    val obj : 'a obj
-    method day_selected : callback:(unit -> unit) -> GtkSignal.id
-    method day_selected_double_click :
-      callback:(unit -> unit) -> GtkSignal.id
-    method month_changed : callback:(unit -> unit) -> GtkSignal.id
-    method next_month : callback:(unit -> unit) -> GtkSignal.id
-    method next_year : callback:(unit -> unit) -> GtkSignal.id
-    method prev_month : callback:(unit -> unit) -> GtkSignal.id
-    method prev_year : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class calendar : Gtk.calendar obj ->
-  object
-    inherit widget
-    val obj : Gtk.calendar obj
-    method event : event_ops
-    method clear_marks : unit
-    method connect : calendar_signals
-    method date : int * int * int
-    method display_options : Tags.calendar_display_options list -> unit
-    method freeze : unit -> unit
-    method mark_day : int -> unit
-    method select_day : int -> unit
-    method select_month : month:int -> year:int -> unit
-    method thaw : unit -> unit
-    method unmark_day : int -> unit
-  end
-val calendar :
-  ?options:Tags.calendar_display_options list ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> calendar
-
-class drawing_area : Gtk.drawing_area obj ->
-  object
-    inherit widget_full
-    val obj : Gtk.drawing_area obj
-    method event : event_ops
-    method set_size : width:int -> height:int -> unit
-  end
-val drawing_area :
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> drawing_area
-
-class misc : 'a obj ->
-  object
-    inherit widget
-    constraint 'a = [>`misc|`widget]
-    val obj : 'a obj
-    method set_alignment : ?x:float -> ?y:float -> unit -> unit
-    method set_padding : ?x:int -> ?y:int -> unit -> unit
-  end
-
-class arrow : 'a obj ->
-  object
-    inherit misc
-    constraint 'a = [>`arrow|`misc|`widget]
-    val obj : 'a obj
-    method set_arrow : Tags.arrow_type -> shadow:Tags.shadow_type -> unit
-  end
-
-val arrow :
-  kind:Tags.arrow_type ->
-  shadow:Tags.shadow_type ->
-  ?xalign:float ->
-  ?yalign:float ->
-  ?xpad:int ->
-  ?ypad:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> arrow
-
-class image : 'a obj ->
-  object
-    inherit misc
-    constraint 'a = [>`image|`misc|`widget]
-    val obj : 'a obj
-    method set_image : ?mask:Gdk.bitmap -> Gdk.image -> unit
-  end
-
-val image :
-  Gdk.image ->
-  ?mask:Gdk.bitmap ->
-  ?xalign:float ->
-  ?yalign:float ->
-  ?xpad:int ->
-  ?ypad:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> image
-
-class label_skel : 'a obj ->
-  object
-    inherit misc
-    constraint 'a = [>`label|`misc|`widget]
-    val obj : 'a obj
-    method set_justify : Tags.justification -> unit
-    method set_line_wrap : bool -> unit
-    method set_pattern : string -> unit
-    method set_text : string -> unit
-    method text : string
-  end
-
-class label : [>`label] obj ->
-  object
-    inherit label_skel
-    val obj : Gtk.label obj
-    method connect : widget_signals
-  end
-val label :
-  ?text:string ->
-  ?justify:Tags.justification ->
-  ?line_wrap:bool ->
-  ?pattern:string ->
-  ?xalign:float ->
-  ?yalign:float ->
-  ?xpad:int ->
-  ?ypad:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> label
-val label_cast : < as_widget : 'a obj ; .. > -> label
-
-class tips_query_signals : 'a obj ->
-  object
-    inherit widget_signals
-    constraint 'a = [>`tipsquery|`widget]
-    val obj : 'a obj
-    method widget_entered :
-      callback:(widget option ->
-                text:string option -> privat:string option -> unit) ->
-      GtkSignal.id
-    method widget_selected :
-      callback:(widget option -> text:string option ->
-                privat:string option -> GdkEvent.Button.t option -> bool) ->
-      GtkSignal.id
-  end
-
-class tips_query : Gtk.tips_query obj ->
-  object
-    inherit label_skel
-    val obj : Gtk.tips_query obj
-    method connect : tips_query_signals
-    method set_caller : widget -> unit
-    method set_emit_always : bool -> unit
-    method set_label_inactive : string -> unit
-    method set_label_no_tip : string -> unit
-    method start : unit -> unit
-    method stop : unit -> unit
-  end
-val tips_query :
-  ?caller:#widget ->
-  ?emit_always:bool ->
-  ?label_inactive:string ->
-  ?label_no_tip:string ->
-  ?xalign:float ->
-  ?yalign:float ->
-  ?xpad:int ->
-  ?ypad:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> tips_query
-
-class pixmap : Gtk.pixmap Gtk.obj ->
-  object
-    inherit misc
-    val obj : Gtk.pixmap Gtk.obj
-    method connect : GObj.widget_signals
-    method pixmap : GDraw.pixmap
-    method set_pixmap : GDraw.pixmap -> unit
-  end
-val pixmap :
-  #GDraw.pixmap ->
-  ?xalign:float ->
-  ?yalign:float ->
-  ?xpad:int ->
-  ?ypad:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> pixmap
-
-class color_selection : Gtk.color_selection obj ->
-  object
-    inherit widget_full
-    val obj : Gtk.color_selection obj
-    method get_color : Gtk.color
-    method set_color :
-      red:float -> green:float -> blue:float -> ?opacity:float -> unit -> unit
-    method set_opacity : bool -> unit
-    method set_update_policy : Tags.update_type -> unit
-  end
-val color_selection :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> color_selection
-
-class font_selection : Gtk.font_selection obj ->
-  object
-    inherit widget_full
-    val obj : Gtk.font_selection obj
-    method event : event_ops
-    method notebook : GPack.notebook
-    method font : Gdk.font option
-    method font_name : string option
-    method preview_text : string
-    method set_filter :
-      ?kind:Tags.font_type list ->
-      ?foundry:string list ->
-      ?weight:string list ->
-      ?slant:string list ->
-      ?setwidth:string list ->
-      ?spacing:string list ->
-      ?charset:string list -> Tags.font_filter_type -> unit
-    method set_font_name : string -> unit
-    method set_preview_text : string -> unit
-  end
-val font_selection :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> font_selection
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gObj.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gObj.ml
deleted file mode 100644 (file)
index 5c4819f..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkData
-open GtkBase
-
-(* Object *)
-
-class gtkobj obj = object
-  val obj = obj
-  method destroy () = Object.destroy obj
-  method get_id = Object.get_id obj
-end
-
-class gtkobj_misc obj = object
-  val obj = obj
-  method get_type = Type.name (Object.get_type obj)
-  method disconnect = GtkSignal.disconnect obj
-  method handler_block = GtkSignal.handler_block obj
-  method handler_unblock = GtkSignal.handler_unblock obj
-end
-
-class gtkobj_signals ?(after=false) obj = object
-  val obj = obj
-  val after = after
-  method after = {< after = true >}
-  method destroy = GtkSignal.connect ~sgn:Object.Signals.destroy obj
-end
-
-(* Widget *)
-
-class event_signals ?(after=false) obj = object
-  val obj = Widget.coerce obj
-  val after = after
-  method after = {< after = true >}
-  method any = GtkSignal.connect ~sgn:Widget.Signals.Event.any ~after obj
-  method button_press =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.button_press ~after obj
-  method button_release =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.button_release ~after obj
-  method configure =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.configure ~after obj
-  method delete =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.delete ~after obj
-  method destroy =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.destroy ~after obj
-  method enter_notify =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.enter_notify ~after obj
-  method expose =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.expose ~after obj
-  method focus_in =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.focus_in ~after obj
-  method focus_out =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.focus_out ~after obj
-  method key_press =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.key_press ~after obj
-  method key_release =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.key_release ~after obj
-  method leave_notify =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.leave_notify ~after obj
-  method map = GtkSignal.connect ~sgn:Widget.Signals.Event.map ~after obj
-  method motion_notify =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.motion_notify ~after obj
-  method property_notify =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.property_notify ~after obj
-  method proximity_in =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.proximity_in ~after obj
-  method proximity_out =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.proximity_out ~after obj
-  method selection_clear =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.selection_clear ~after obj
-  method selection_notify =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.selection_notify ~after obj
-  method selection_request =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.selection_request ~after obj
-  method unmap = GtkSignal.connect ~sgn:Widget.Signals.Event.unmap ~after obj
-end
-
-class event_ops obj = object
-  val obj = Widget.coerce obj
-  method add = Widget.add_events obj
-  method connect = new event_signals obj
-  method send : Gdk.Tags.event_type Gdk.event -> bool = Widget.event obj
-  method set_extensions = Widget.set_extension_events obj
-end
-
-class style st = object
-  val style = st
-  method as_style = style
-  method copy = {< style = Style.copy style >}
-  method bg state = Style.get_bg style ~state
-  method colormap = Style.get_colormap style
-  method font = Style.get_font style
-  method set_bg =
-    List.iter ~f:
-      (fun (state,c) -> Style.set_bg style ~state ~color:(GDraw.color c))
-  method set_font = Style.set_font style
-  method set_background = Style.set_background style
-end
-
-class selection_data (sel : Selection.t) = object
-  val sel = sel
-  method selection = Selection.selection sel
-  method target = Selection.target sel
-  method seltype = Selection.seltype sel
-  method format = Selection.format sel
-  method data = Selection.get_data sel
-  method set = Selection.set sel
-end
-
-class drag_signals ?(after=false) obj = object
-  val obj =  Widget.coerce obj
-  val after = after
-  method after = {< after = true >}
-  method beginning ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_begin ~after obj
-      ~callback:(fun context -> callback (new drag_context context))
-  method ending ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_end ~after obj
-      ~callback:(fun context -> callback (new drag_context context))
-  method data_delete ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_data_delete ~after obj
-      ~callback:(fun context -> callback (new drag_context context))
-  method leave ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_leave ~after obj
-      ~callback:(fun context -> callback (new drag_context context))
-  method motion ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_motion ~after obj
-      ~callback:(fun context -> callback (new drag_context context))
-  method drop ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_drop ~after obj
-      ~callback:(fun context -> callback (new drag_context context))
-  method data_get ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_data_get ~after obj
-      ~callback:(fun context data -> callback (new drag_context context)
-              (new selection_data data))
-  method data_received ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_data_received ~after obj
-      ~callback:(fun context ~x ~y data -> callback (new drag_context context)
-              ~x ~y (new selection_data data))
-
-end
-
-and drag_ops obj = object
-  val obj = Widget.coerce obj
-  method connect = new drag_signals obj
-  method dest_set ?(flags=[`ALL]) ?(actions=[]) targets =
-    DnD.dest_set obj ~flags ~actions ~targets:(Array.of_list targets)
-  method dest_unset () = DnD.dest_unset obj
-  method get_data ?(time=0) ~context:(context : drag_context) target =
-    DnD.get_data obj (context : < context : Gdk.drag_context; .. >)#context
-      ~target ~time
-  method highlight () = DnD.highlight obj
-  method unhighlight () = DnD.unhighlight obj
-  method source_set ?modi:m ?(actions=[]) targets =
-    DnD.source_set obj ?modi:m ~actions ~targets:(Array.of_list targets)
-  method source_set_icon ?(colormap = Gdk.Color.get_system_colormap ())
-      (pix : GDraw.pixmap) =
-    DnD.source_set_icon obj ~colormap pix#pixmap ?mask:pix#mask
-  method source_unset () = DnD.source_unset obj
-end
-
-and drag_context context = object
-  inherit GDraw.drag_context context
-  method context = context
-  method finish = DnD.finish context
-  method source_widget =
-    new widget (Object.unsafe_cast (DnD.get_source_widget context))
-  method set_icon_widget (w : widget) =
-    DnD.set_icon_widget context (w#as_widget)
-  method set_icon_pixmap ?(colormap = Gdk.Color.get_system_colormap ())
-      (pix : GDraw.pixmap) =
-    DnD.set_icon_pixmap context ~colormap pix#pixmap ?mask:pix#mask
-end
-
-and misc_signals ?after obj = object
-  inherit gtkobj_signals ?after obj
-  method draw ~callback =
-    GtkSignal.connect obj ~sgn:Widget.Signals.draw ~after ~callback:
-      begin fun rect ->
-       callback
-         { x = Gdk.Rectangle.x rect ; y = Gdk.Rectangle.y rect;
-           width = Gdk.Rectangle.width rect;
-           height = Gdk.Rectangle.height rect }
-      end
-  method show = GtkSignal.connect ~sgn:Widget.Signals.show ~after obj
-  method hide = GtkSignal.connect ~sgn:Widget.Signals.hide ~after obj
-  method map = GtkSignal.connect ~sgn:Widget.Signals.map ~after obj
-  method unmap = GtkSignal.connect ~sgn:Widget.Signals.unmap ~after obj
-  method realize = GtkSignal.connect ~sgn:Widget.Signals.realize ~after obj
-  method state_changed =
-    GtkSignal.connect ~sgn:Widget.Signals.state_changed ~after obj
-  method parent_set ~callback =
-    GtkSignal.connect obj ~sgn:Widget.Signals.parent_set ~after ~callback:
-      begin function
-         None   -> callback None
-       | Some w -> callback (Some (new widget (Object.unsafe_cast w)))
-      end
-  method style_set ~callback =
-    GtkSignal.connect obj ~sgn:Widget.Signals.style_set ~after ~callback:
-      (fun opt -> callback (may opt ~f:(new style)))
-end
-
-and misc_ops obj = object
-  inherit gtkobj_misc (Widget.coerce obj)
-  method connect = new misc_signals obj
-  method show () = Widget.show obj
-  method unparent () = Widget.unparent obj
-  method show_all () = Widget.show_all obj
-  method hide () = Widget.hide obj
-  method hide_all () = Widget.hide_all obj
-  method map () = Widget.map obj
-  method unmap () = Widget.unmap obj
-  method realize () = Widget.realize obj
-  method unrealize () = Widget.unrealize obj
-  method draw = Widget.draw obj
-  method activate () = Widget.activate obj
-  method reparent (w : widget) =  Widget.reparent obj w#as_widget
-  method popup = Widget.popup obj
-  method intersect = Widget.intersect obj
-  method grab_focus () = Widget.grab_focus obj
-  method grab_default () = Widget.grab_default obj
-  method is_ancestor (w : widget) = Widget.is_ancestor obj w#as_widget
-  method add_accelerator ~sgn:sg ~group ?modi ?flags key =
-    Widget.add_accelerator obj ~sgn:sg group ~key ?modi ?flags
-  method remove_accelerator ~group ?modi key =
-    Widget.remove_accelerator obj group ~key ?modi
-  method lock_accelerators () = Widget.lock_accelerators obj
-  method set_name = Widget.set_name obj
-  method set_state = Widget.set_state obj
-  method set_sensitive = Widget.set_sensitive obj
-  method set_can_default = Widget.set_can_default obj
-  method set_can_focus = Widget.set_can_focus obj
-  method set_geometry ?(x = -2) ?(y = -2) ?(width = -2) ?(height = -2)  () =
-    if x+y <> -4 then Widget.set_uposition obj ~x ~y;
-    if width+height <> -4 then Widget.set_usize obj ~width ~height
-  method set_style (style : style) = Widget.set_style obj style#as_style
-  (* get functions *)
-  method name = Widget.get_name obj
-  method toplevel =
-    try Some (new widget (Object.unsafe_cast (Widget.get_toplevel obj)))
-    with Gpointer.Null -> None
-  method window = Widget.window obj
-  method colormap = Widget.get_colormap obj
-  method visual = Widget.get_visual obj
-  method visual_depth = Gdk.Window.visual_depth (Widget.get_visual obj)
-  method pointer = Widget.get_pointer obj
-  method style = new style (Widget.get_style obj)
-  method visible = Widget.visible obj
-  method has_focus = Widget.has_focus obj
-  method parent =
-    try Some (new widget (Object.unsafe_cast (Widget.parent obj)))
-    with Gpointer.Null -> None
-  method set_app_paintable = Widget.set_app_paintable obj
-  method allocation = Widget.allocation obj
-end
-
-and widget obj = object (self)
-  inherit gtkobj obj
-  method as_widget = Widget.coerce obj
-  method misc = new misc_ops obj
-  method drag = new drag_ops (Object.unsafe_cast obj)
-  method coerce =
-    (self :> < destroy : _; get_id : _; as_widget : _; misc : _;
-               drag : _; coerce : _ >)
-end
-
-(* just to check that GDraw.misc_ops is compatible with misc_ops *)
-let _ = fun (x : #GDraw.misc_ops) -> (x : misc_ops)
-
-class widget_signals ?after (obj : [> `widget] obj) =
-  gtkobj_signals ?after obj
-
-(*
-class widget_coerce obj = object
-  inherit widget obj
-  method coerce = (self :> widget)
-end
-*)
-
-class widget_full obj = object
-  inherit widget obj
-  method connect = new widget_signals obj
-end
-
-let as_widget (w : widget) = w#as_widget
-
-let pack_return self ~packing ~show =
-  may packing ~f:(fun f -> (f (self :> widget) : unit));
-  if show <> Some false then self#misc#show ();
-  self
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gObj.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gObj.mli
deleted file mode 100644 (file)
index 7c37cf1..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-(* Object *)
-
-class gtkobj :
-  'a obj ->
-  object
-    val obj : 'a obj
-    method destroy : unit -> unit
-    method get_id : int
-  end
-
-class gtkobj_signals :
-  ?after:bool -> 'a obj ->
-  object ('b)
-    val obj : 'a obj
-    val after : bool
-    method after : 'b
-    method destroy : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class gtkobj_misc : 'a obj ->
-  object
-    method get_type : string
-    method disconnect : GtkSignal.id -> unit
-    method handler_block : GtkSignal.id -> unit
-    method handler_unblock : GtkSignal.id -> unit
-  end
-
-(* Widget *)
-
-class event_signals :
-  ?after:bool -> [>`widget] obj ->
-  object ('a)
-    method after : 'a
-    method any :
-       callback:(Gdk.Tags.event_type Gdk.event -> bool) -> GtkSignal.id
-    method button_press : callback:(GdkEvent.Button.t -> bool) -> GtkSignal.id
-    method button_release :
-       callback:(GdkEvent.Button.t -> bool) -> GtkSignal.id
-    method configure : callback:(GdkEvent.Configure.t -> bool) -> GtkSignal.id
-    method delete : callback:([`DELETE] Gdk.event -> bool) -> GtkSignal.id
-    method destroy : callback:([`DESTROY] Gdk.event -> bool) -> GtkSignal.id
-    method enter_notify :
-       callback:(GdkEvent.Crossing.t -> bool) -> GtkSignal.id
-    method expose : callback:(GdkEvent.Expose.t -> bool) -> GtkSignal.id
-    method focus_in : callback:(GdkEvent.Focus.t -> bool) -> GtkSignal.id
-    method focus_out : callback:(GdkEvent.Focus.t -> bool) -> GtkSignal.id
-    method key_press : callback:(GdkEvent.Key.t -> bool) -> GtkSignal.id
-    method key_release : callback:(GdkEvent.Key.t -> bool) -> GtkSignal.id
-    method leave_notify :
-       callback:(GdkEvent.Crossing.t -> bool) -> GtkSignal.id
-    method map : callback:([`MAP] Gdk.event -> bool) -> GtkSignal.id
-    method motion_notify :
-       callback:(GdkEvent.Motion.t -> bool) -> GtkSignal.id
-    method property_notify :
-       callback:(GdkEvent.Property.t -> bool) -> GtkSignal.id
-    method proximity_in :
-       callback:(GdkEvent.Proximity.t -> bool) -> GtkSignal.id
-    method proximity_out :
-       callback:(GdkEvent.Proximity.t -> bool) -> GtkSignal.id
-    method selection_clear :
-       callback:(GdkEvent.Selection.t -> bool) -> GtkSignal.id
-    method selection_notify :
-       callback:(GdkEvent.Selection.t -> bool) -> GtkSignal.id
-    method selection_request :
-       callback:(GdkEvent.Selection.t -> bool) -> GtkSignal.id
-    method unmap : callback:([`UNMAP] Gdk.event -> bool) -> GtkSignal.id
-  end
-
-class event_ops : [>`widget] obj ->
-  object
-    method add : Gdk.Tags.event_mask list -> unit
-    method connect : event_signals
-    method send : Gdk.Tags.event_type Gdk.event -> bool
-    method set_extensions : Gdk.Tags.extension_events -> unit
-  end
-
-class style : Gtk.style ->
-  object ('a)
-    val style : Gtk.style
-    method as_style : Gtk.style
-    method bg : Tags.state_type -> Gdk.Color.t
-    method colormap : Gdk.colormap
-    method copy : 'a
-    method font : Gdk.font
-    method set_background : Gdk.window -> Tags.state_type -> unit
-    method set_bg : (Tags.state_type * GDraw.color) list -> unit
-    method set_font : Gdk.font -> unit
-  end
-
-class selection_data :
-  GtkData.Selection.t ->
-  object
-    val sel : GtkData.Selection.t
-    method data : string       (* May raise Null_pointer *)
-    method format : int
-    method selection : Gdk.atom
-    method seltype : Gdk.atom
-    method target : Gdk.atom
-    method set : typ:Gdk.atom -> format:int -> ?data:string -> unit
-  end
-
-class drag_ops : [>`widget] obj ->
-  object
-    method connect : drag_signals
-    method dest_set :
-      ?flags:Tags.dest_defaults list ->
-      ?actions:Gdk.Tags.drag_action list -> target_entry list -> unit
-    method dest_unset : unit -> unit
-    method get_data : ?time:int -> context:drag_context -> Gdk.atom ->unit
-    method highlight : unit -> unit
-    method source_set :
-      ?modi:Gdk.Tags.modifier list ->
-      ?actions:Gdk.Tags.drag_action list -> target_entry list -> unit
-    method source_set_icon : ?colormap:Gdk.colormap -> GDraw.pixmap -> unit
-    method source_unset : unit -> unit
-    method unhighlight : unit -> unit
-  end
-
-and misc_ops :
-  [>`widget] obj ->
-  object
-    inherit gtkobj_misc
-    val obj : Gtk.widget obj
-    method activate : unit -> bool
-    method add_accelerator :
-      sgn:(Gtk.widget, unit -> unit) GtkSignal.t ->
-      group:accel_group -> ?modi:Gdk.Tags.modifier list ->
-      ?flags:Tags.accel_flag list -> Gdk.keysym -> unit
-    method allocation : rectangle
-    method colormap : Gdk.colormap
-    method connect : misc_signals
-    method draw : Gdk.Rectangle.t option -> unit
-    method grab_default : unit -> unit
-    method grab_focus : unit -> unit
-    method has_focus : bool
-    method hide : unit -> unit
-    method hide_all : unit -> unit
-    method intersect : Gdk.Rectangle.t -> Gdk.Rectangle.t option
-    method is_ancestor : widget -> bool
-    method lock_accelerators : unit -> unit
-    method map : unit -> unit
-    method name : string
-    method parent : widget option
-    method pointer : int * int
-    method popup : x:int -> y:int -> unit
-    method realize : unit -> unit
-    method remove_accelerator :
-      group:accel_group -> ?modi:Gdk.Tags.modifier list -> Gdk.keysym -> unit
-    method reparent : widget -> unit
-    method set_app_paintable : bool -> unit
-    method set_can_default : bool -> unit
-    method set_can_focus : bool -> unit
-    method set_name : string -> unit
-    method set_sensitive : bool -> unit
-    method set_state : Tags.state_type -> unit
-    method set_style : style -> unit
-    method set_geometry :
-      ?x:int -> ?y:int -> ?width:int -> ?height:int -> unit -> unit
-    method show : unit -> unit
-    method show_all : unit -> unit
-    method style : style
-    method toplevel : widget option
-    method unmap : unit -> unit
-    method unparent : unit -> unit
-    method unrealize : unit -> unit
-    method visible : bool
-    method visual : Gdk.visual
-    method visual_depth : int
-    method window : Gdk.window
-  end
-
-and widget :
-  'a obj ->
-  object
-    inherit gtkobj
-    constraint 'a = [>`widget]
-    val obj : 'a obj
-    method as_widget : Gtk.widget obj
-    method coerce : widget
-    method drag : drag_ops
-    method misc : misc_ops
-  end
-
-and misc_signals :
-  ?after:bool -> Gtk.widget obj ->
-  object ('b)
-    inherit gtkobj_signals 
-    val obj : Gtk.widget obj
-    method after : 'b
-    method draw : callback:(Gtk.rectangle -> unit) -> GtkSignal.id
-    method hide : callback:(unit -> unit) -> GtkSignal.id
-    method map : callback:(unit -> unit) -> GtkSignal.id
-    method parent_set : callback:(widget option -> unit) -> GtkSignal.id
-    method realize : callback:(unit -> unit) -> GtkSignal.id
-    method show : callback:(unit -> unit) -> GtkSignal.id
-    method state_changed :
-      callback:(Gtk.Tags.state_type -> unit) -> GtkSignal.id
-    method style_set : callback:(unit -> unit) -> GtkSignal.id
-    method unmap : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-and drag_context :
-  Gdk.drag_context ->
-  object
-    val context : Gdk.drag_context
-    method context : Gdk.drag_context
-    method finish : success:bool -> del:bool -> time:int -> unit
-    method source_widget : widget 
-    method set_icon_pixmap :
-      ?colormap:Gdk.colormap -> GDraw.pixmap -> hot_x:int -> hot_y:int -> unit
-    method set_icon_widget : widget -> hot_x:int -> hot_y:int -> unit
-    method status : ?time:int -> Gdk.Tags.drag_action list -> unit
-    method suggested_action : Gdk.Tags.drag_action
-    method targets : Gdk.atom list
-  end
-
-and drag_signals :
-  ?after:bool -> Gtk.widget obj ->
-  object ('a)
-    method after : 'a
-    method beginning :
-      callback:(drag_context -> unit) -> GtkSignal.id
-    method data_delete :
-      callback:(drag_context -> unit) -> GtkSignal.id
-    method data_get :
-      callback:(drag_context -> selection_data -> info:int -> time:int -> unit)
-      -> GtkSignal.id
-    method data_received :
-      callback:(drag_context -> x:int -> y:int ->
-               selection_data -> info:int -> time:int -> unit) -> GtkSignal.id
-    method drop :
-      callback:(drag_context -> x:int -> y:int -> time:int -> bool) ->
-      GtkSignal.id
-    method ending :
-      callback:(drag_context -> unit) -> GtkSignal.id
-    method leave :
-      callback:(drag_context -> time:int -> unit) -> GtkSignal.id
-    method motion :
-      callback:(drag_context -> x:int -> y:int -> time:int -> bool) ->
-      GtkSignal.id
-  end
-
-class widget_signals : ?after:bool -> 'a obj ->
-  object
-    inherit gtkobj_signals
-    constraint 'a = [>`widget]
-    val obj : 'a obj
-  end
-
-class widget_full : 'a obj ->
-  object
-    inherit widget
-    constraint 'a = [>`widget]
-    val obj : 'a obj
-    method connect : widget_signals
-  end
-
-val as_widget : widget -> Gtk.widget obj
-
-val pack_return :
-    (#widget as 'a) ->
-    packing:(widget -> unit) option -> show:bool option -> 'a
-    (* To use in initializers to provide a ?packing: option *)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gPack.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gPack.ml
deleted file mode 100644 (file)
index 3641349..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkPack
-open GObj
-open GContainer
-
-class box_skel obj = object
-  inherit container obj
-  method pack ?from:f ?expand ?fill ?padding w =
-    Box.pack obj (as_widget w) ?from:f ?expand ?fill ?padding
-  method set_homogeneous = Box.set_homogeneous obj
-  method set_spacing = Box.set_spacing obj
-  method set_child_packing ?from:f ?expand ?fill ?padding w =
-    Box.set_child_packing obj (as_widget w) ?from:f ?expand ?fill ?padding
-  method reorder_child w = Box.reorder_child obj (as_widget w)
-end
-
-class box obj = object
-  inherit box_skel obj
-  method connect = new container_signals obj
-end
-  
-let box dir ?homogeneous ?spacing ?border_width ?width ?height
-    ?packing ?show () =
-  let w = Box.create dir ?homogeneous ?spacing () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new box w) ~packing ~show
-
-let vbox = box `VERTICAL
-let hbox = box `HORIZONTAL
-
-class button_box obj = object
-  inherit box_skel (obj : Gtk.button_box obj)
-  method connect = new container_signals obj
-  method set_layout  = BBox.set_layout  obj
-  method set_spacing = BBox.set_spacing obj
-  method set_child_size = BBox.set_child_size obj
-  method set_child_ipadding = BBox.set_child_ipadding obj
-end
-
-let button_box dir ?spacing ?child_width ?child_height ?child_ipadx
-    ?child_ipady ?layout ?border_width ?width ?height ?packing ?show ()=
-  let w = BBox.create dir in
-  BBox.set w ?spacing ?child_width ?child_height ?child_ipadx
-    ?child_ipady ?layout;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new button_box w) ~packing ~show
-
-class table obj = object
-  inherit container_full (obj : Gtk.table obj)
-  method attach ~left ~top ?right ?bottom ?expand ?fill ?shrink
-      ?xpadding ?ypadding w =
-    Table.attach obj (as_widget w) ~left ~top ?right ?bottom ?expand
-      ?fill ?shrink ?xpadding ?ypadding
-  method set_row_spacing = Table.set_row_spacing obj
-  method set_col_spacing = Table.set_col_spacing obj
-  method set_row_spacings = Table.set_row_spacings obj
-  method set_col_spacings = Table.set_col_spacings obj
-  method set_homogeneous = Table.set_homogeneous obj
-end
-
-let table ~rows ~columns ?homogeneous ?row_spacings ?col_spacings
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Table.create ~rows ~columns ?homogeneous () in
-  Table.set w ?row_spacings ?col_spacings;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new table w) ~packing ~show
-
-class fixed obj = object
-  inherit container_full (obj : Gtk.fixed obj)
-  method event = new GObj.event_ops obj
-  method put w = Fixed.put obj (as_widget w)
-  method move w = Fixed.move obj (as_widget w)
-end
-
-let fixed ?border_width ?width ?height ?packing ?show () =
-  let w = Fixed.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new fixed w) ~packing ~show
-
-class layout obj = object
-  inherit container_full (obj : Gtk.layout obj)
-  method event = new GObj.event_ops obj
-  method put w = Layout.put obj (as_widget w)
-  method move w = Layout.move obj (as_widget w)
-  method set_hadjustment adj =
-    Layout.set_hadjustment obj (GData.as_adjustment adj)
-  method set_vadjustment adj =
-    Layout.set_vadjustment obj (GData.as_adjustment adj)
-  method set_width width = Layout.set_size obj ~width
-  method set_height height = Layout.set_size obj ~height
-  method hadjustment = new GData.adjustment (Layout.get_hadjustment obj)
-  method vadjustment = new GData.adjustment (Layout.get_vadjustment obj)
-  method freeze () = Layout.freeze obj
-  method thaw () = Layout.thaw obj
-  method width = Layout.get_width obj
-  method height = Layout.get_height obj
-end
-
-let layout ?hadjustment ?vadjustment ?layout_width ?layout_height
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Layout.create
-      (Gpointer.optboxed (may_map ~f:GData.as_adjustment hadjustment))
-      (Gpointer.optboxed (may_map ~f:GData.as_adjustment vadjustment)) in
-  if layout_width <> None || layout_height <> None then
-    Layout.set_size w ?width:layout_width ?height:layout_height;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new layout w) ~packing ~show
-
-
-class packer obj = object
-  inherit container_full (obj : Gtk.packer obj)
-  method pack ?side ?anchor ?expand ?fill
-      ?border_width ?pad_x ?pad_y ?i_pad_x ?i_pad_y w =
-    let options = Packer.build_options ?expand ?fill () in
-    if border_width == None && pad_x == None && pad_y == None &&
-      i_pad_x == None && i_pad_y == None
-      then Packer.add_defaults obj (as_widget w) ?side ?anchor ~options
-      else Packer.add obj (as_widget w) ?side ?anchor ~options
-         ?border_width ?pad_x ?pad_y ?i_pad_x ?i_pad_y
-  method set_child_packing ?side ?anchor ?expand ?fill
-      ?border_width ?pad_x ?pad_y ?i_pad_x ?i_pad_y w =
-    Packer.set_child_packing obj (as_widget w) ?side ?anchor
-      ~options:(Packer.build_options ?expand ?fill ())
-      ?border_width ?pad_x ?pad_y ?i_pad_x ?i_pad_y
-  method reorder_child w = Packer.reorder_child obj (as_widget w)
-  method set_spacing = Packer.set_spacing obj
-  method set_defaults = Packer.set_defaults obj
-end
-
-let packer ?spacing ?border_width ?width ?height ?packing ?show () =
-  let w = Packer.create () in
-  may spacing ~f:(Packer.set_spacing w);
-  Container.set w ?border_width ?width ?height;
-  pack_return (new packer w) ~packing ~show
-
-class paned obj = object
-  inherit container_full (obj : Gtk.paned obj)
-  method event = new GObj.event_ops obj
-  method add w =
-    if List.length (Container.children obj) = 2 then
-      raise(Error "Gpack.paned#add: already full");
-    Container.add obj (as_widget w)
-  method add1 w =
-    try ignore(Paned.child1 obj); raise(Error "GPack.paned#add1: already full")
-    with _ -> Paned.add1 obj (as_widget w)
-  method add2 w =
-    try ignore(Paned.child2 obj); raise(Error "GPack.paned#add2: already full")
-    with _ -> Paned.add2 obj (as_widget w)
-  method set_handle_size = Paned.set_handle_size obj
-  method set_gutter_size = Paned.set_gutter_size obj
-  method child1 = new widget (Paned.child1 obj)
-  method child2 = new widget (Paned.child2 obj)
-  method handle_size = Paned.handle_size obj
-  method gutter_size = Paned.gutter_size obj
-end
-
-let paned dir ?handle_size ?gutter_size
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Paned.create dir in
-  Paned.set w ?handle_size ?gutter_size;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new paned w) ~packing ~show
-
-class notebook_signals obj = object
-  inherit GContainer.container_signals obj
-  method switch_page =
-    GtkSignal.connect obj ~sgn:Notebook.Signals.switch_page ~after
-end
-
-class notebook obj = object (self)
-  inherit GContainer.container obj
-  method event = new GObj.event_ops obj
-  method connect = new notebook_signals obj
-  method insert_page ?tab_label ?menu_label ~pos child =
-      Notebook.insert_page obj (as_widget child) ~pos
-       ~tab_label:(Gpointer.may_box tab_label ~f:as_widget)
-       ~menu_label:(Gpointer.may_box menu_label ~f:as_widget)
-  method append_page = self#insert_page ~pos:(-1)
-  method prepend_page = self#insert_page ~pos:0
-  method remove_page = Notebook.remove_page obj
-  method current_page = Notebook.get_current_page obj
-  method goto_page = Notebook.set_page obj
-  method previous_page () = Notebook.prev_page obj
-  method next_page () = Notebook.next_page obj
-  method set_tab_pos = Notebook.set_tab_pos obj
-  method set_show_tabs = Notebook.set_show_tabs obj
-  method set_homogeneous_tabs = Notebook.set_homogeneous_tabs obj
-  method set_show_border = Notebook.set_show_border obj
-  method set_scrollable = Notebook.set_scrollable obj
-  method set_tab_border = Notebook.set_tab_border obj
-  method set_popup = Notebook.set_popup obj
-  method page_num w = Notebook.page_num obj (as_widget w)
-  method get_nth_page n = new widget (Notebook.get_nth_page obj n)
-  method get_tab_label w =
-    new widget (Notebook.get_tab_label obj (as_widget w))
-  method get_menu_label w =
-    new widget (Notebook.get_tab_label obj (as_widget w))
-  method set_page ?tab_label ?menu_label page =
-    let child = as_widget page in
-    may tab_label
-      ~f:(fun lbl -> Notebook.set_tab_label obj child (as_widget lbl));
-    may menu_label
-      ~f:(fun lbl -> Notebook.set_menu_label obj child (as_widget lbl))
-end
-
-let notebook ?tab_pos ?tab_border ?show_tabs ?homogeneous_tabs
-    ?show_border ?scrollable ?popup
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Notebook.create () in
-  Notebook.set w ?tab_pos ?tab_border ?show_tabs
-    ?homogeneous_tabs ?show_border ?scrollable ?popup;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new notebook w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gPack.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gPack.mli
deleted file mode 100644 (file)
index 994c8b8..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class box_skel :
-  'a obj ->
-  object
-    inherit container
-    constraint 'a = [>`box|`container|`widget]
-    val obj : 'a obj
-    method pack :
-      ?from:Tags.pack_type ->
-      ?expand:bool -> ?fill:bool -> ?padding:int -> widget -> unit
-    method reorder_child : widget -> pos:int -> unit
-    method set_child_packing :
-      ?from:Tags.pack_type ->
-      ?expand:bool -> ?fill:bool -> ?padding:int -> widget -> unit
-    method set_homogeneous : bool -> unit
-    method set_spacing : int -> unit
-  end
-class box :
-  'a obj ->
-  object
-    inherit box_skel
-    constraint 'a = [>`box|`container|`widget]
-    val obj : 'a obj
-    method connect : GContainer.container_signals
-  end
-
-val box :
-  Tags.orientation ->
-  ?homogeneous:bool ->
-  ?spacing:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> box
-val vbox :
-  ?homogeneous:bool ->
-  ?spacing:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> box
-val hbox :
-  ?homogeneous:bool ->
-  ?spacing:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> box
-
-class button_box :
-  Gtk.button_box obj ->
-  object
-    inherit container_full
-    val obj : Gtk.button_box obj
-    method pack :
-      ?from:Tags.pack_type ->
-      ?expand:bool -> ?fill:bool -> ?padding:int -> widget -> unit
-    method reorder_child : widget -> pos:int -> unit
-    method set_child_ipadding : ?x:int -> ?y:int -> unit -> unit
-    method set_child_packing :
-      ?from:Tags.pack_type ->
-      ?expand:bool -> ?fill:bool -> ?padding:int -> widget -> unit
-    method set_child_size : ?width:int -> ?height:int -> unit -> unit
-    method set_homogeneous : bool -> unit
-    method set_layout : GtkPack.BBox.bbox_style -> unit
-    method set_spacing : int -> unit
-  end
-val button_box :
-  Tags.orientation ->
-  ?spacing:int ->
-  ?child_width:int ->
-  ?child_height:int ->
-  ?child_ipadx:int ->
-  ?child_ipady:int ->
-  ?layout:GtkPack.BBox.bbox_style ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> button_box
-
-class table :
-  Gtk.table obj ->
-  object
-    inherit container_full
-    val obj : Gtk.table obj
-    method attach :
-      left:int ->
-      top:int ->
-      ?right:int ->
-      ?bottom:int ->
-      ?expand:Tags.expand_type ->
-      ?fill:Tags.expand_type ->
-      ?shrink:Tags.expand_type ->
-      ?xpadding:int -> ?ypadding:int -> widget -> unit
-    method set_col_spacing : int -> int -> unit
-    method set_col_spacings : int -> unit
-    method set_homogeneous : bool -> unit
-    method set_row_spacing : int -> int -> unit
-    method set_row_spacings : int -> unit
-  end
-val table :
-  rows:int ->
-  columns:int ->
-  ?homogeneous:bool ->
-  ?row_spacings:int ->
-  ?col_spacings:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> table
-
-class fixed :
-  Gtk.fixed obj ->
-  object
-    inherit container_full
-    val obj : Gtk.fixed obj
-    method event : event_ops
-    method move : widget -> x:int -> y:int -> unit
-    method put : widget -> x:int -> y:int -> unit
-  end
-val fixed :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> fixed
-
-class layout :
-  Gtk.layout obj ->
-  object
-    inherit container_full
-    val obj : Gtk.layout obj
-    method event : event_ops
-    method freeze : unit -> unit
-    method hadjustment : GData.adjustment
-    method height : int
-    method move : widget -> x:int -> y:int -> unit
-    method put : widget -> x:int -> y:int -> unit
-    method set_hadjustment : GData.adjustment -> unit
-    method set_height : int -> unit
-    method set_vadjustment : GData.adjustment -> unit
-    method set_width : int -> unit
-    method thaw : unit -> unit
-    method vadjustment : GData.adjustment
-    method width : int
-  end
-val layout :
-  ?hadjustment:GData.adjustment ->
-  ?vadjustment:GData.adjustment ->
-  ?layout_width:int ->
-  ?layout_height:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> layout
-
-class notebook_signals : 'a obj ->
-  object
-    inherit container_signals
-    constraint 'a = [>`notebook|`container|`widget]
-    val obj : 'a obj
-    method switch_page : callback:(int -> unit) -> GtkSignal.id
-  end
-
-class notebook : ([> `widget | `container | `notebook] as 'a) obj ->
-  object
-    inherit container
-    val obj : 'a obj
-    method event : event_ops
-    method append_page :
-      ?tab_label:widget -> ?menu_label:widget -> widget -> unit
-    method connect : notebook_signals
-    method current_page : int
-    method get_menu_label : widget -> widget
-    method get_nth_page : int -> widget
-    method get_tab_label : widget -> widget
-    method goto_page : int -> unit
-    method insert_page :
-      ?tab_label:widget -> ?menu_label:widget -> pos:int -> widget -> unit
-    method next_page : unit -> unit
-    method page_num : widget -> int
-    method prepend_page :
-      ?tab_label:widget -> ?menu_label:widget -> widget -> unit
-    method previous_page : unit -> unit
-    method remove_page : int -> unit
-    method set_homogeneous_tabs : bool -> unit
-    method set_page :
-      ?tab_label:widget -> ?menu_label:widget -> widget -> unit
-    method set_popup : bool -> unit
-    method set_scrollable : bool -> unit
-    method set_show_border : bool -> unit
-    method set_show_tabs : bool -> unit
-    method set_tab_border : int -> unit
-    method set_tab_pos : Tags.position -> unit
-  end
-val notebook :
-  ?tab_pos:Tags.position ->
-  ?tab_border:int ->
-  ?show_tabs:bool ->
-  ?homogeneous_tabs:bool ->
-  ?show_border:bool ->
-  ?scrollable:bool ->
-  ?popup:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> notebook
-
-class packer :
-  Gtk.packer obj ->
-  object
-    inherit container_full
-    val obj : Gtk.packer obj
-    method pack :
-      ?side:Tags.side_type ->
-      ?anchor:Tags.anchor_type ->
-      ?expand:bool ->
-      ?fill:Tags.expand_type ->
-      ?border_width:int ->
-      ?pad_x:int ->
-      ?pad_y:int -> ?i_pad_x:int -> ?i_pad_y:int -> widget -> unit
-    method reorder_child : widget -> pos:int -> unit
-    method set_child_packing :
-      ?side:Tags.side_type ->
-      ?anchor:Tags.anchor_type ->
-      ?expand:bool ->
-      ?fill:Tags.expand_type ->
-      ?border_width:int ->
-      ?pad_x:int ->
-      ?pad_y:int -> ?i_pad_x:int -> ?i_pad_y:int -> widget -> unit
-    method set_defaults :
-      ?border_width:int ->
-      ?pad_x:int ->
-      ?pad_y:int -> ?i_pad_x:int -> ?i_pad_y:int -> unit -> unit
-    method set_spacing : int -> unit
-  end
-val packer :
-  ?spacing:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> packer
-
-class paned :
-  Gtk.paned obj ->
-  object
-    inherit container_full
-    val obj : Gtk.paned obj
-    method add1 : widget -> unit
-    method add2 : widget -> unit
-    method event : event_ops
-    method child1 : widget
-    method child2 : widget
-    method gutter_size : int
-    method handle_size : int
-    method set_gutter_size : int -> unit
-    method set_handle_size : int -> unit
-  end
-val paned :
-  Tags.orientation ->
-  ?handle_size:int ->
-  ?gutter_size:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> paned
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gRange.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gRange.ml
deleted file mode 100644 (file)
index 7df53ce..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkRange
-open GObj
-
-class progress obj = object
-  inherit widget_full obj
-  method set_adjustment adj =
-    Progress.set_adjustment obj (GData.as_adjustment adj)
-  method set_show_text = Progress.set_show_text obj
-  method set_format_string = Progress.set_format_string obj
-  method set_text_alignment = Progress.set_text_alignment obj
-  method set_activity_mode = Progress.set_activity_mode obj
-  method set_value = Progress.set_value obj
-  method set_percentage = Progress.set_percentage obj
-  method configure = Progress.configure obj
-  method value = Progress.get_value obj
-  method percentage = Progress.get_percentage obj
-  method current_text = Progress.get_current_text obj
-  method adjustment = new GData.adjustment (Progress.get_adjustment obj)
-end
-
-class progress_bar obj = object
-  inherit progress (obj : Gtk.progress_bar obj)
-  method event = new GObj.event_ops obj
-  method set_bar_style = ProgressBar.set_bar_style obj
-  method set_discrete_blocks = ProgressBar.set_discrete_blocks obj
-  method set_activity_step = ProgressBar.set_activity_step obj
-  method set_activity_blocks = ProgressBar.set_activity_blocks obj
-  method set_orientation = ProgressBar.set_orientation obj
-end
-
-let progress_bar ?adjustment ?bar_style ?discrete_blocks
-    ?activity_step ?activity_blocks ?value ?percentage ?activity_mode
-    ?show_text ?format_string ?text_xalign ?text_yalign
-    ?packing ?show () =
-  let w =
-    match adjustment with None -> ProgressBar.create ()
-    | Some adj ->
-       ProgressBar.create_with_adjustment (GData.as_adjustment adj)
-  in
-  ProgressBar.set w ?bar_style ?discrete_blocks
-    ?activity_step ?activity_blocks;
-  Progress.set w ?value ?percentage ?activity_mode
-    ?show_text ?format_string ?text_xalign ?text_yalign;
-  pack_return (new progress_bar w) ~packing ~show
-
-class range obj = object
-  inherit widget_full obj
-  method adjustment = new GData.adjustment (Range.get_adjustment obj)
-  method set_adjustment adj =
-    Range.set_adjustment obj (GData.as_adjustment adj)
-  method set_update_policy = Range.set_update_policy obj
-end
-
-class scale obj = object
-  inherit range (obj : Gtk.scale obj)
-  method set_digits = Scale.set_digits obj
-  method set_draw_value = Scale.set_draw_value obj
-  method set_value_pos = Scale.set_value_pos obj
-end
-
-let scale dir ?adjustment ?digits ?draw_value ?value_pos
-    ?packing ?show () =
-  let w =
-    Scale.create dir ?adjustment:(may_map ~f:GData.as_adjustment adjustment)
-  in
-  let () = Scale.set w ?digits ?draw_value ?value_pos in
-  pack_return (new scale w) ~packing ~show
-
-class scrollbar obj = object
-  inherit range (obj : Gtk.scrollbar obj)
-  method event = new GObj.event_ops obj
-end
-
-let scrollbar dir ?adjustment ?update_policy ?packing ?show () =
-  let w = Scrollbar.create dir
-      ?adjustment:(may_map ~f:GData.as_adjustment adjustment) in
-  let () = may update_policy ~f:(Range.set_update_policy w) in
-  pack_return (new scrollbar w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gRange.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gRange.mli
deleted file mode 100644 (file)
index ac9b38c..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-
-class progress : 'a obj ->
-  object
-    inherit widget_full
-    constraint 'a = [>`progress|`widget]
-    val obj : 'a obj
-    method adjustment : GData.adjustment
-    method configure : current:float -> min:float -> max:float -> unit
-    method current_text : string
-    method percentage : float
-    method set_activity_mode : bool -> unit
-    method set_adjustment : GData.adjustment -> unit
-    method set_format_string : string -> unit
-    method set_percentage : float -> unit
-    method set_show_text : bool -> unit
-    method set_text_alignment : ?x:float -> ?y:float -> unit -> unit
-    method set_value : float -> unit
-    method value : float
-  end
-
-class progress_bar : Gtk.progress_bar obj ->
-  object
-    inherit progress
-    val obj : Gtk.progress_bar obj
-    method event : event_ops
-    method set_activity_blocks : int -> unit
-    method set_activity_step : int -> unit
-    method set_bar_style : [`CONTINUOUS|`DISCRETE] -> unit
-    method set_discrete_blocks : int -> unit
-    method set_orientation : Tags.progress_bar_orientation -> unit
-  end
-val progress_bar :
-  ?adjustment:GData.adjustment ->
-  ?bar_style:[`CONTINUOUS|`DISCRETE] ->
-  ?discrete_blocks:int ->
-  ?activity_step:int ->
-  ?activity_blocks:int ->
-  ?value:float ->
-  ?percentage:float ->
-  ?activity_mode:bool ->
-  ?show_text:bool ->
-  ?format_string:string ->
-  ?text_xalign:float ->
-  ?text_yalign:float ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> progress_bar
-
-class range : 'a obj ->
-  object
-    inherit widget_full
-    constraint 'a = [>`range|`widget]
-    val obj : 'a obj
-    method adjustment : GData.adjustment
-    method set_adjustment : GData.adjustment -> unit
-    method set_update_policy : Tags.update_type -> unit
-  end
-
-class scale : Gtk.scale obj ->
-  object
-    inherit range
-    val obj : Gtk.scale obj
-    method set_digits : int -> unit
-    method set_draw_value : bool -> unit
-    method set_value_pos : Tags.position -> unit
-  end
-val scale :
-  Tags.orientation ->
-  ?adjustment:GData.adjustment ->
-  ?digits:int ->
-  ?draw_value:bool ->
-  ?value_pos:Tags.position ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> scale
-
-class scrollbar : Gtk.scrollbar obj ->
-  object
-    inherit range
-    val obj : Gtk.scrollbar obj
-    method event : event_ops
-  end
-val scrollbar :
-  Tags.orientation ->
-  ?adjustment:GData.adjustment ->
-  ?update_policy:Tags.update_type ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> scrollbar
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gTree.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gTree.ml
deleted file mode 100644 (file)
index 80dab7b..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkTree
-open GObj
-open GContainer
-
-class tree_item_signals obj = object
-  inherit item_signals obj
-  method expand = GtkSignal.connect obj ~sgn:TreeItem.Signals.expand ~after
-  method collapse = GtkSignal.connect obj ~sgn:TreeItem.Signals.collapse ~after
-end
-
-class tree_item obj = object
-  inherit container obj
-  method event = new GObj.event_ops obj
-  method as_item : Gtk.tree_item obj = obj
-  method connect = new tree_item_signals obj
-  method set_subtree (w : tree) = TreeItem.set_subtree obj w#as_tree
-  method remove_subtree () = TreeItem.remove_subtree obj
-  method expand () = TreeItem.expand obj
-  method collapse () = TreeItem.collapse obj
-  method subtree =
-    try Some(new tree (TreeItem.subtree obj)) with Gpointer.Null -> None
-end
-
-and tree_signals obj = object
-  inherit container_signals obj
-  method selection_changed =
-    GtkSignal.connect obj ~sgn:Tree.Signals.selection_changed ~after
-  method select_child ~callback =
-    GtkSignal.connect obj ~sgn:Tree.Signals.select_child ~after
-      ~callback:(fun w -> callback (new tree_item (TreeItem.cast w))) 
-  method unselect_child ~callback =
-    GtkSignal.connect obj ~sgn:Tree.Signals.unselect_child ~after
-      ~callback:(fun w -> callback (new tree_item (TreeItem.cast w))) 
-end
-
-and tree obj = object (self)
-  inherit [tree_item] item_container obj
-  method event = new GObj.event_ops obj
-  method as_tree = Tree.coerce obj
-  method insert w ~pos = Tree.insert obj w#as_item ~pos
-  method connect = new tree_signals obj
-  method clear_items = Tree.clear_items obj
-  method select_item = Tree.select_item obj
-  method unselect_item = Tree.unselect_item obj
-  method child_position (w : tree_item) = Tree.child_position obj w#as_item
-  method remove_items items =
-    Tree.remove_items obj
-      (List.map ~f:(fun (t : tree_item) -> t#as_item) items)
-  method set_selection_mode = Tree.set_selection_mode obj
-  method set_view_mode = Tree.set_view_mode obj
-  method set_view_lines = Tree.set_view_lines obj
-  method selection =
-    List.map ~f:(fun w -> self#wrap (Widget.coerce w)) (Tree.selection obj)
-  method private wrap w =
-    new tree_item (TreeItem.cast w)
-end
-
-let tree_item ?label ?border_width ?width ?height ?packing ?show () =
-  let w = TreeItem.create ?label () in
-  Container.set w ?border_width ?width ?height;
-  let self = new tree_item w in
-  may packing ~f:(fun f -> (f self : unit));
-  if show <> Some false then self#misc#show ();
-  self
-
-let tree ?selection_mode ?view_mode ?view_lines
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Tree.create () in
-  Tree.set w ?selection_mode ?view_mode ?view_lines;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new tree w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gTree.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gTree.mli
deleted file mode 100644 (file)
index d48e09b..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class tree_item_signals : 'a obj ->
-  object
-    inherit item_signals
-    constraint 'a = [>`treeitem|`container|`item|`widget]
-    val obj : 'a obj
-    method collapse : callback:(unit -> unit) -> GtkSignal.id
-    method expand : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class tree_item : Gtk.tree_item obj ->
-  object
-    inherit GContainer.container
-    val obj : Gtk.tree_item obj
-    method event : event_ops
-    method as_item : Gtk.tree_item obj
-    method collapse : unit -> unit
-    method connect : tree_item_signals
-    method expand : unit -> unit
-    method remove_subtree : unit -> unit
-    method set_subtree : tree -> unit
-    method subtree : tree option
-  end
-
-and tree_signals : Gtk.tree obj ->
-  object
-    inherit container_signals
-    val obj : Gtk.tree obj
-    method select_child : callback:(tree_item -> unit) -> GtkSignal.id
-    method selection_changed : callback:(unit -> unit) -> GtkSignal.id
-    method unselect_child : callback:(tree_item -> unit) -> GtkSignal.id
-  end
-
-and tree : Gtk.tree obj ->
-  object
-    inherit [tree_item] item_container
-    val obj : Gtk.tree obj
-    method event : event_ops
-    method as_tree : Gtk.tree obj
-    method child_position : tree_item -> int
-    method clear_items : start:int -> stop:int -> unit
-    method connect : tree_signals
-    method insert : tree_item -> pos:int -> unit
-    method remove_items : tree_item list -> unit
-    method select_item : pos:int -> unit
-    method selection : tree_item list
-    method set_selection_mode : Tags.selection_mode -> unit
-    method set_view_lines : bool -> unit
-    method set_view_mode : [`LINE|`ITEM] -> unit
-    method unselect_item : pos:int -> unit
-    method private wrap : Gtk.widget obj -> tree_item
-  end
-
-val tree_item :
-  ?label:string ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(tree_item -> unit) -> ?show:bool -> unit -> tree_item
-
-val tree :
-  ?selection_mode:Tags.selection_mode ->
-  ?view_mode:[`LINE|`ITEM] ->
-  ?view_lines:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int -> ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> tree
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gUtil.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gUtil.ml
deleted file mode 100644 (file)
index 260c2ac..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-(* $Id$ *)
-
-open GObj
-
-class ['a] memo () = object
-  constraint 'a = #widget
-  val tbl = Hashtbl.create 7
-  method add (obj : 'a) =
-    Hashtbl.add tbl ~key:obj#get_id ~data:obj
-  method find (obj : widget) = Hashtbl.find tbl obj#get_id
-  method remove (obj : widget) = Hashtbl.remove tbl obj#get_id
-end
-
-let signal_id = ref 0
-
-let next_callback_id () : GtkSignal.id =
-  decr signal_id; Obj.magic (!signal_id : int)
-
-class ['a] signal () = object (self)
-  val mutable callbacks : (GtkSignal.id * ('a -> unit)) list = []
-  method callbacks = callbacks
-  method connect ~after ~callback =
-    let id = next_callback_id () in
-    callbacks <-
-      if after then callbacks @ [id,callback] else (id,callback)::callbacks;
-    id
-  method call arg =
-    List.exists callbacks ~f:
-      begin fun (_,f) ->
-        let old = GtkSignal.push_callback () in
-        try f arg; GtkSignal.pop_callback old
-        with exn -> GtkSignal.pop_callback old; raise exn
-      end;
-    ()
-  method disconnect key =
-    List.mem_assoc key callbacks &&
-    (callbacks <- List.remove_assoc key callbacks; true)
-end
-
-class virtual ml_signals disconnectors =
-  object (self)
-    val after = false
-    method after = {< after = true >}
-    val mutable disconnectors : (GtkSignal.id -> bool) list = disconnectors
-    method disconnect key =
-      ignore (List.exists disconnectors ~f:(fun f -> f key))
-  end
-
-class virtual add_ml_signals obj disconnectors =
-  object (self)
-    val mutable disconnectors : (GtkSignal.id -> bool) list = disconnectors
-    method disconnect key =
-      if List.exists disconnectors ~f:(fun f -> f key) then ()
-      else GtkSignal.disconnect obj key
-  end
-
-class ['a] variable_signals ~(set : 'a signal) ~(changed : 'a signal) =
-  object
-    inherit ml_signals [changed#disconnect; set#disconnect]
-    method changed = changed#connect ~after
-    method set = set#connect ~after
-  end
-
-class ['a] variable x =
-  object (self)
-    val changed = new signal ()
-    val set = new signal ()
-    method connect = new variable_signals ~set ~changed
-    val mutable x : 'a = x
-    method get = x
-    method set = set#call
-    method private equal : 'a -> 'a -> bool = (=)
-    method private real_set y =
-      let x0 = x in x <- y;
-      if changed#callbacks <> [] && not (self#equal x x0)
-      then changed#call y
-    initializer
-      ignore (set#connect ~after:false ~callback:self#real_set)
-  end
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gUtil.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gUtil.mli
deleted file mode 100644 (file)
index cd88d86..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-(* $Id$ *)
-
-open GObj
-
-(* The memo class provides an easy way to remember the real class of
-   a widget.
-   Insert all widgets of class in one single t memo, and you can then
-   recover their original ML object with #find.
-*)
-
-class ['a] memo : unit ->
-  object
-    constraint 'a = #widget
-    val tbl : (int, 'a) Hashtbl.t
-    method add : 'a -> unit
-    method find : widget -> 'a
-    method remove : widget -> unit
-  end
-
-(* The ML signal mechanism allows one to add GTK-like signals to
-   arbitrary objects.
-*)
-
-val next_callback_id : unit -> GtkSignal.id
-
-class ['a] signal :
-  unit ->
-  object
-    val mutable callbacks : (GtkSignal.id * ('a -> unit)) list
-    method callbacks : (GtkSignal.id * ('a -> unit)) list
-    method call : 'a -> unit
-    method connect : after:bool -> callback:('a -> unit) -> GtkSignal.id
-    method disconnect : GtkSignal.id -> bool
-  end
-(* As with GTK signals, you can use [GtkSignal.stop_emit] inside a
-   callback to prevent other callbacks from being called. *)
-
-class virtual ml_signals : (GtkSignal.id -> bool) list ->
-  object ('a)
-    val after : bool
-    method after : 'a
-    method disconnect : GtkSignal.id -> unit
-    val mutable disconnectors : (GtkSignal.id -> bool) list
-  end
-class virtual add_ml_signals :
-  'a Gtk.obj -> (GtkSignal.id -> bool) list ->
-  object
-    method disconnect : GtkSignal.id -> unit
-    val mutable disconnectors : (GtkSignal.id -> bool) list
-  end
-
-(* To add ML signals to a LablGTK object:
-
-   class mywidget_signals obj ~mysignal1 ~mysignal2 = object
-     inherit somewidget_signals obj
-     inherit add_ml_signals obj [mysignal1#disconnect; mysignal2#disconnect]
-     method mysignal1 = mysignal1#connect ~after
-     method mysignal2 = mysignal2#connect ~after
-   end
-
-   class mywidget obj = object (self)
-     inherit somewidget obj
-     val mysignal1 = new signal obj
-     val mysignal2 = new signal obj
-     method connect = new mywidget_signals obj ~mysignal1 ~mysignal2
-     method call1 = mysignal1#call
-     method call2 = mysignal2#call
-   end
-
-   You can also add ML signals to an arbitrary object; just inherit
-   from [ml_signals] in place of [widget_signals]+[add_ml_signals].
-
-   class mysignals ~mysignal1 ~mysignal2 = object
-     inherit ml_signals [mysignal1#disconnect; mysignal2#disconnect]
-     method mysignal1 = mysignal1#connect ~after
-     method mysignal2 = mysignal2#connect ~after
-   end
-*)
-
-(* The variable class provides an easy way to propagate state modifications.
-   A new variable is created by [new variable init]. The [#set] method just
-   calls the [set] signal, which by default only calls [real_set].
-   [real_set] sets the variable and calls [changed] when needed.
-   Deep equality is used to compare values, but check is only done if
-   there are callbacks for [changed].
-*)
-
-class ['a] variable_signals :
-  set:'a signal -> changed:'a signal ->
-  object ('b)
-    val after : bool
-    method after : 'b
-    method set : callback:('a -> unit) -> GtkSignal.id
-    method changed : callback:('a -> unit) -> GtkSignal.id
-    method disconnect : GtkSignal.id -> unit
-    val mutable disconnectors : (GtkSignal.id -> bool) list
-  end
-
-class ['a] variable : 'a ->
-  object
-    val set : 'a signal
-    val changed : 'a signal
-    val mutable x : 'a
-    method connect : 'a variable_signals
-    method get : 'a
-    method set : 'a -> unit
-    method private equal : 'a -> 'a -> bool
-    method private real_set : 'a -> unit
-  end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gWindow.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gWindow.ml
deleted file mode 100644 (file)
index 9ee3136..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkWindow
-open GtkMisc
-open GObj
-open GContainer
-
-class ['a] window_skel obj = object
-  constraint 'a = _ #window_skel
-  inherit container obj
-  method event = new GObj.event_ops obj
-  method as_window = Window.coerce obj
-  method activate_focus () = Window.activate_focus obj
-  method activate_default () = Window.activate_default obj
-  method add_accel_group = Window.add_accel_group obj
-  method set_modal = Window.set_modal obj
-  method set_default_size = Window.set_default_size obj
-  method set_position = Window.set_position obj
-  method set_resize_mode = Container.set_resize_mode obj
-  method set_transient_for (w : 'a) =
-    Window.set_transient_for obj w#as_window
-  method set_title = Window.set_title obj
-  method set_wm_name name = Window.set_wmclass obj ~name
-  method set_wm_class cls = Window.set_wmclass obj ~clas:cls
-  method set_allow_shrink allow_shrink = Window.set_policy obj ~allow_shrink
-  method set_allow_grow allow_grow = Window.set_policy obj ~allow_grow
-  method set_auto_shrink auto_shrink = Window.set_policy obj ~auto_shrink
-  method show () = Widget.show obj
-end
-
-class window obj = object
-  inherit [window] window_skel (Window.coerce obj)
-  method connect = new container_signals obj
-end
-
-let window ?kind:(t=`TOPLEVEL) ?title ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y
-    ?border_width ?width ?height ?(show=false) () =
-  let w = Window.create t in
-  Window.set w ?title ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y;
-  Container.set w ?border_width ?width ?height;
-  if show then Widget.show w;
-  new window w
-
-class dialog obj = object
-  inherit [window] window_skel (Dialog.coerce obj)
-  method connect = new container_signals obj
-  method action_area = new GPack.box (Dialog.action_area obj)
-  method vbox = new GPack.box (Dialog.vbox obj)
-end
-
-let dialog ?title ?wm_name ?wm_class ?position ?allow_shrink
-    ?allow_grow ?auto_shrink ?modal ?x ?y ?border_width ?width ?height
-    ?(show=false) () =
-  let w = Dialog.create () in
-  Window.set w ?title ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y;
-  Container.set w ?border_width ?width ?height;
-  if show then Widget.show w;
-  new dialog w
-
-class color_selection_dialog obj = object
-  inherit [window] window_skel (obj : Gtk.color_selection_dialog obj)
-  method connect = new container_signals obj
-  method ok_button =
-    new GButton.button (ColorSelection.ok_button obj)
-  method cancel_button =
-    new GButton.button (ColorSelection.cancel_button obj)
-  method help_button =
-    new GButton.button (ColorSelection.help_button obj)
-  method colorsel =
-    new GMisc.color_selection (ColorSelection.colorsel obj)
-end
-
-let color_selection_dialog ?(title="Pick a color")
-    ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y
-    ?border_width ?width ?height ?(show=false) () =
-  let w = ColorSelection.create_dialog title in
-  Window.set w ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y;
-  Container.set w ?border_width ?width ?height;
-  if show then Widget.show w;
-  new color_selection_dialog w
-
-class file_selection obj = object
-  inherit [window] window_skel (obj : Gtk.file_selection obj)
-  method connect = new container_signals obj
-  method set_filename = FileSelection.set_filename obj
-  method get_filename = FileSelection.get_filename obj
-  method set_fileop_buttons = FileSelection.set_fileop_buttons obj
-  method ok_button = new GButton.button (FileSelection.get_ok_button obj)
-  method cancel_button =
-    new GButton.button (FileSelection.get_cancel_button obj)
-  method help_button = new GButton.button (FileSelection.get_help_button obj)
-end
-
-let file_selection ?(title="Choose a file") ?filename
-    ?(fileop_buttons=false)
-    ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y
-    ?border_width ?width ?height ?(show=false) () =
-  let w = FileSelection.create title in
-  FileSelection.set w ?filename ~fileop_buttons;
-  Window.set w ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y;
-  Container.set w ?border_width ?width ?height;
-  if show then Widget.show w;
-  new file_selection w
-
-class font_selection_dialog obj = object
-  inherit [window] window_skel (obj : Gtk.font_selection_dialog obj)
-  method connect = new container_signals obj
-(*
-  method font = FontSelectionDialog.get_font obj
-  method font_name = FontSelectionDialog.get_font_name obj
-  method set_font_name = FontSelectionDialog.set_font_name obj
-  method preview_text = FontSelectionDialog.get_preview_text obj
-  method set_preview_text = FontSelectionDialog.set_preview_text obj
-  method set_filter = FontSelectionDialog.set_filter obj
-*)
-  method selection =
-    new GMisc.font_selection (FontSelectionDialog.font_selection obj)
-  method ok_button =  new GButton.button (FontSelectionDialog.ok_button obj)
-  method apply_button =
-    new GButton.button (FontSelectionDialog.apply_button obj)
-  method cancel_button =
-    new GButton.button (FontSelectionDialog.cancel_button obj)
-end
-
-let font_selection_dialog ?title ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y
-    ?border_width ?width ?height ?(show=false) () =
-  let w = FontSelectionDialog.create ?title () in
-  Window.set w ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y;
-  Container.set w ?border_width ?width ?height;
-  if show then Widget.show w;
-  new font_selection_dialog w
-
-class plug (obj : Gtk.plug obj) = window obj
-
-let plug ~window:xid ?border_width ?width ?height ?(show=false) () =
-  let w = Plug.create xid in
-  Container.set w ?border_width ?width ?height;
-  if show then Widget.show w;
-  new plug w
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gWindow.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gWindow.mli
deleted file mode 100644 (file)
index 4c89a76..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-
-class ['a] window_skel : 'b obj ->
-  object
-    inherit GContainer.container
-    constraint 'a = 'a #window_skel
-    constraint 'b = [>`widget|`container|`window]
-    val obj : 'b obj
-    method activate_default : unit -> unit
-    method activate_focus : unit -> unit
-    method add_accel_group : accel_group -> unit
-    method event : event_ops
-    method as_window : Gtk.window obj
-    method set_allow_grow : bool -> unit
-    method set_allow_shrink : bool -> unit
-    method set_auto_shrink : bool -> unit
-    method set_default_size : width:int -> height:int -> unit
-    method set_modal : bool -> unit
-    method set_position : Tags.window_position -> unit
-    method set_resize_mode : Tags.resize_mode -> unit
-    method set_title : string -> unit
-    method set_transient_for : 'a -> unit
-    method set_wm_class : string -> unit
-    method set_wm_name : string -> unit
-    method show : unit -> unit
-  end
-
-class window : [>`window] obj ->
-  object
-    inherit [window] window_skel
-    val obj : Gtk.window obj
-    method connect : GContainer.container_signals
-  end
-val window :
-  ?kind:Tags.window_type ->
-  ?title:string ->
-  ?wm_name:string ->
-  ?wm_class:string ->
-  ?position:Tags.window_position ->
-  ?allow_shrink:bool ->
-  ?allow_grow:bool ->
-  ?auto_shrink:bool ->
-  ?modal:bool ->
-  ?x:int ->
-  ?y:int ->
-  ?border_width:int ->
-  ?width:int -> ?height:int -> ?show:bool -> unit -> window
-
-class dialog : [>`dialog] obj ->
-  object
-    inherit [window] window_skel
-    val obj : Gtk.dialog obj
-    method action_area : GPack.box
-    method connect : GContainer.container_signals
-    method event : event_ops
-    method vbox : GPack.box
-  end
-val dialog :
-  ?title:string ->
-  ?wm_name:string ->
-  ?wm_class:string ->
-  ?position:Tags.window_position ->
-  ?allow_shrink:bool ->
-  ?allow_grow:bool ->
-  ?auto_shrink:bool ->
-  ?modal:bool ->
-  ?x:int ->
-  ?y:int ->
-  ?border_width:int ->
-  ?width:int -> ?height:int -> ?show:bool -> unit -> dialog
-
-class color_selection_dialog : Gtk.color_selection_dialog obj ->
-  object
-    inherit [window] window_skel
-    val obj : Gtk.color_selection_dialog obj
-    method cancel_button : GButton.button
-    method colorsel : GMisc.color_selection
-    method connect : GContainer.container_signals
-    method help_button : GButton.button
-    method ok_button : GButton.button
-  end
-val color_selection_dialog :
-  ?title:string ->
-  ?wm_name:string ->
-  ?wm_class:string ->
-  ?position:Tags.window_position ->
-  ?allow_shrink:bool ->
-  ?allow_grow:bool ->
-  ?auto_shrink:bool ->
-  ?modal:bool ->
-  ?x:int ->
-  ?y:int ->
-  ?border_width:int ->
-  ?width:int -> ?height:int -> ?show:bool -> unit -> color_selection_dialog
-
-class file_selection : Gtk.file_selection obj ->
-  object
-    inherit [window] window_skel
-    val obj : Gtk.file_selection obj
-    method cancel_button : GButton.button
-    method connect : GContainer.container_signals
-    method get_filename : string
-    method help_button : GButton.button
-    method ok_button : GButton.button
-    method set_filename : string -> unit
-    method set_fileop_buttons : bool -> unit
-  end
-val file_selection :
-  ?title:string ->
-  ?filename:string ->
-  ?fileop_buttons:bool ->
-  ?wm_name:string ->
-  ?wm_class:string ->
-  ?position:Tags.window_position ->
-  ?allow_shrink:bool ->
-  ?allow_grow:bool ->
-  ?auto_shrink:bool ->
-  ?modal:bool ->
-  ?x:int ->
-  ?y:int ->
-  ?border_width:int ->
-  ?width:int -> ?height:int -> ?show:bool -> unit -> file_selection
-
-class font_selection_dialog : Gtk.font_selection_dialog obj ->
-  object
-    inherit [window] window_skel
-    val obj : Gtk.font_selection_dialog obj
-    method apply_button : GButton.button
-    method cancel_button : GButton.button
-    method connect : GContainer.container_signals
-    method selection : GMisc.font_selection
-    method ok_button : GButton.button
-  end
-val font_selection_dialog :
-  ?title:string ->
-  ?wm_name:string ->
-  ?wm_class:string ->
-  ?position:Tags.window_position ->
-  ?allow_shrink:bool ->
-  ?allow_grow:bool ->
-  ?auto_shrink:bool ->
-  ?modal:bool ->
-  ?x:int ->
-  ?y:int ->
-  ?border_width:int ->
-  ?width:int -> ?height:int -> ?show:bool -> unit -> font_selection_dialog
-
-class plug : Gtk.plug obj -> window
-
-val plug :
-  window:Gdk.xid ->
-  ?border_width:int ->
-  ?width:int -> ?height:int -> ?show:bool -> unit -> plug
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gaux.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gaux.ml
deleted file mode 100644 (file)
index a117291..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-(* $Id$ *)
-
-(* Option handling *)
-
-let may ~f x =
-  match x with None -> ()
-  | Some x -> let _ = f x in ()
-
-let may_map ~f x =
-  match x with None -> None
-  | Some x -> Some (f x)
-
-let default x ~opt =
-  match opt with None -> x | Some y -> y
-
-let may_default f x ~opt =
-  match opt with None -> f x | Some y -> y
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdk.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdk.ml
deleted file mode 100644 (file)
index c22c4b5..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-
-type colormap
-type visual
-type region
-type gc
-type 'a drawable
-type window = [`window] drawable
-type pixmap = [`pixmap] drawable
-type bitmap = [`bitmap] drawable
-type font
-type image
-type atom = int
-type keysym = int
-type 'a event
-type drag_context
-type cursor
-type xid = int32
-
-exception Error of string
-let _ = Callback.register_exception "gdkerror" (Error"")
-
-module Tags = struct
-  type event_type =
-    [ `NOTHING|`DELETE|`DESTROY|`EXPOSE|`MOTION_NOTIFY|`BUTTON_PRESS
-     |`TWO_BUTTON_PRESS|`THREE_BUTTON_PRESS
-     |`BUTTON_RELEASE|`KEY_PRESS
-     |`KEY_RELEASE|`ENTER_NOTIFY|`LEAVE_NOTIFY|`FOCUS_CHANGE
-     |`CONFIGURE|`MAP|`UNMAP|`PROPERTY_NOTIFY|`SELECTION_CLEAR
-     |`SELECTION_REQUEST|`SELECTION_NOTIFY|`PROXIMITY_IN
-     |`PROXIMITY_OUT|`DRAG_ENTER|`DRAG_LEAVE|`DRAG_MOTION|`DRAG_STATUS
-     |`DROP_START|`DROP_FINISHED|`CLIENT_EVENT|`VISIBILITY_NOTIFY
-     |`NO_EXPOSE ]
-
-  type event_mask =
-    [ `EXPOSURE
-     |`POINTER_MOTION|`POINTER_MOTION_HINT
-     |`BUTTON_MOTION|`BUTTON1_MOTION|`BUTTON2_MOTION|`BUTTON3_MOTION
-     |`BUTTON_PRESS|`BUTTON_RELEASE
-     |`KEY_PRESS|`KEY_RELEASE
-     |`ENTER_NOTIFY|`LEAVE_NOTIFY|`FOCUS_CHANGE
-     |`STRUCTURE|`PROPERTY_CHANGE|`VISIBILITY_NOTIFY
-     |`PROXIMITY_IN|`PROXIMITY_OUT|`SUBSTRUCTURE
-     |`ALL_EVENTS ]
-
-  type extension_events =
-    [ `NONE|`ALL|`CURSOR ]
-
-  type visibility_state =
-    [ `UNOBSCURED|`PARTIAL|`FULLY_OBSCURED ]
-
-  type input_source =
-    [ `MOUSE|`PEN|`ERASER|`CURSOR ]
-
-  type notify_type =
-    [ `ANCESTOR|`VIRTUAL|`INFERIOR|`NONLINEAR|`NONLINEAR_VIRTUAL|`UNKNOWN ] 
-
-  type crossing_mode =
-    [ `NORMAL|`GRAB|`UNGRAB ]
-
-  type modifier =
-    [ `SHIFT|`LOCK|`CONTROL|`MOD1|`MOD2|`MOD3|`MOD4|`MOD5|`BUTTON1
-     |`BUTTON2|`BUTTON3|`BUTTON4|`BUTTON5 ]
-
-  type drag_action =
-    [ `DEFAULT|`COPY|`MOVE|`LINK|`PRIVATE|`ASK ]
-
-end
-open Tags
-
-module Convert = struct
-  external test_modifier : modifier -> int -> bool
-      = "ml_test_GdkModifier_val"
-  let modifier i =
-    List.filter [`SHIFT;`LOCK;`CONTROL;`MOD1;`MOD2;`MOD3;`MOD4;`MOD5;
-                `BUTTON1;`BUTTON2;`BUTTON3;`BUTTON4;`BUTTON5]
-      ~f:(fun m -> test_modifier m i)
-end
-
-module Screen = struct
-  external width : unit -> int = "ml_gdk_screen_width"
-  external height : unit -> int = "ml_gdk_screen_height"
-end
-
-module Visual = struct
-  type visual_type =
-    [ `STATIC_GRAY|`GRAYSCALE|`STATIC_COLOR
-     |`PSEUDO_COLOR|`TRUE_COLOR|`DIRECT_COLOR ]
-
-  external get_best : ?depth:int -> ?kind:visual_type -> unit -> visual
-      = "ml_gdk_visual_get_best"
-  external get_type : visual -> visual_type = "ml_GdkVisual_type"
-  external depth : visual -> int = "ml_GdkVisual_depth"
-  external red_mask : visual -> int = "ml_GdkVisual_red_mask"
-  external red_shift : visual -> int = "ml_GdkVisual_red_shift"
-  external red_prec : visual -> int = "ml_GdkVisual_red_prec"
-  external green_mask : visual -> int = "ml_GdkVisual_green_mask"
-  external green_shift : visual -> int = "ml_GdkVisual_green_shift"
-  external green_prec : visual -> int = "ml_GdkVisual_green_prec"
-  external blue_mask : visual -> int = "ml_GdkVisual_blue_mask"
-  external blue_shift : visual -> int = "ml_GdkVisual_blue_shift"
-  external blue_prec : visual -> int = "ml_GdkVisual_blue_prec"
-end
-
-module Image = struct
-  type image_type =
-    [ `NORMAL|`SHARED|`FASTEST ] 
-
-  external create_bitmap : visual: visual -> data: string -> 
-    width: int -> height: int -> image 
-      = "ml_gdk_image_new_bitmap"
-  external create : kind: image_type -> visual: visual -> 
-    width: int -> height: int -> image
-      = "ml_gdk_image_new"
-  external get :
-      'a drawable -> x: int -> y: int -> width: int -> height: int -> image
-      = "ml_gdk_image_get"
-  external put_pixel : image -> x: int -> y: int -> pixel: int -> unit
-    = "ml_gdk_image_put_pixel"
-  external get_pixel : image -> x: int -> y: int -> int
-    = "ml_gdk_image_get_pixel"
-  external destroy : image -> unit
-    = "ml_gdk_image_destroy"
-end
-
-module Color = struct
-  type t
-
-  external color_white : colormap -> t = "ml_gdk_color_white"
-  external color_black : colormap -> t = "ml_gdk_color_black"
-  external color_parse : string -> t = "ml_gdk_color_parse"
-  external color_alloc : colormap -> t -> bool = "ml_gdk_color_alloc"
-  external color_create : red:int -> green:int -> blue:int -> t
-      = "ml_GdkColor"
-
-  external get_system_colormap : unit -> colormap
-      = "ml_gdk_colormap_get_system"
-  external colormap_new : visual -> privat:bool -> colormap
-      = "ml_gdk_colormap_new"
-  let get_colormap ?(privat=false) vis = colormap_new vis ~privat
-
-  type spec = [ `BLACK | `NAME of string | `RGB of int * int * int | `WHITE]
-  let color_alloc ~colormap color =
-    if not (color_alloc colormap color) then raise (Error"Color.alloc");
-    color
-  let alloc ~colormap color =
-    match color with
-      `WHITE -> color_white colormap
-    | `BLACK -> color_black colormap
-    | `NAME s -> color_alloc ~colormap (color_parse s)
-    | `RGB (red,green,blue) ->
-       color_alloc ~colormap (color_create ~red ~green ~blue)
-
-  external red : t -> int = "ml_GdkColor_red"
-  external blue : t -> int = "ml_GdkColor_blue"
-  external green : t -> int = "ml_GdkColor_green"
-  external pixel : t -> int = "ml_GdkColor_pixel"
-end
-
-module Rectangle = struct
-  type t
-  external create : x:int -> y:int -> width:int -> height:int -> t
-      = "ml_GdkRectangle"
-  external x : t -> int = "ml_GdkRectangle_x"
-  external y : t -> int = "ml_GdkRectangle_y"
-  external width : t -> int = "ml_GdkRectangle_width"
-  external height : t -> int = "ml_GdkRectangle_height"
-end
-
-module Window = struct
-  type background_pixmap = [ `NONE | `PARENT_RELATIVE | `PIXMAP of pixmap]
-  external visual_depth : visual -> int = "ml_gdk_visual_get_depth"
-  external get_visual : window -> visual = "ml_gdk_window_get_visual"
-  external get_parent : window -> window = "ml_gdk_window_get_parent"
-  external get_size : window -> int * int = "ml_gdk_window_get_size"
-  external get_position : window -> int * int =
-    "ml_gdk_window_get_position"
-  external root_parent : unit -> window = "ml_GDK_ROOT_PARENT"
-  external set_back_pixmap : window -> pixmap -> int -> unit = 
-    "ml_gdk_window_set_back_pixmap"
-  external clear : window -> unit = "ml_gdk_window_clear"
-  external get_xwindow : window -> xid = "ml_GDK_WINDOW_XWINDOW"
-
-  let set_back_pixmap w pix = 
-    let null_pixmap = (Obj.magic Gpointer.boxed_null : pixmap) in
-    match pix with
-      `NONE -> set_back_pixmap w null_pixmap 0
-    | `PARENT_RELATIVE -> set_back_pixmap w null_pixmap 1
-    | `PIXMAP(pixmap) -> set_back_pixmap w pixmap 0 
-       (* anything OK, Maybe... *) 
-end
-
-module PointArray = struct
-  type t = { len: int}
-  external create : len:int -> t = "ml_point_array_new"
-  external set : t -> pos:int -> x:int -> y:int -> unit = "ml_point_array_set"
-  let set arr ~pos =
-    if pos < 0 || pos >= arr.len then invalid_arg "PointArray.set";
-    set arr ~pos
-end
-
-module Region = struct
-  type gdkFillRule = [ `EVEN_ODD_RULE|`WINDING_RULE ]
-  type gdkOverlapType = [ `IN|`OUT|`PART ]
-  external create : unit -> region = "ml_gdk_region_new"
-  external destroy : region -> unit = "ml_gdk_region_destroy"
-  external polygon : PointArray.t -> gdkFillRule -> region 
-      = "ml_gdk_region_polygon"
-  let polygon l =
-    let len = List.length l in
-    let arr = PointArray.create ~len in
-    List.fold_left l ~init:0
-      ~f:(fun pos (x,y) -> PointArray.set arr ~pos ~x ~y; pos+1);
-    polygon arr    
-  external intersect : region -> region -> region
-      = "ml_gdk_regions_intersect"
-  external union : region -> region -> region 
-      = "ml_gdk_regions_union"
-  external subtract : region -> region -> region 
-      = "ml_gdk_regions_subtract"
-  external xor : region -> region -> region 
-      = "ml_gdk_regions_xor"
-  external union_with_rect : region -> Rectangle.t -> region
-      = "ml_gdk_region_union_with_rect"
-  external offset : region -> x:int -> y:int -> unit = "ml_gdk_region_offset"
-  external shrink : region -> x:int -> y:int -> unit = "ml_gdk_region_shrink"
-  external empty : region -> bool = "ml_gdk_region_empty"
-  external equal : region -> region -> bool = "ml_gdk_region_equal"
-  external point_in : region -> x:int -> y:int -> bool 
-      = "ml_gdk_region_point_in"
-  external rect_in : region -> Rectangle.t -> gdkOverlapType
-      = "ml_gdk_region_rect_in"
-  external get_clipbox : region -> Rectangle.t -> unit
-      = "ml_gdk_region_get_clipbox"
-end
-      
-
-module GC = struct
-  type gdkFunction = [ `COPY|`INVERT|`XOR ]
-  type gdkFill = [ `SOLID|`TILED|`STIPPLED|`OPAQUE_STIPPLED ]
-  type gdkSubwindowMode = [ `CLIP_BY_CHILDREN|`INCLUDE_INFERIORS ]
-  type gdkLineStyle = [ `SOLID|`ON_OFF_DASH|`DOUBLE_DASH ]
-  type gdkCapStyle = [ `NOT_LAST|`BUTT|`ROUND|`PROJECTING ]
-  type gdkJoinStyle = [ `MITER|`ROUND|`BEVEL ]
-  external create : 'a drawable -> gc = "ml_gdk_gc_new"
-  external set_foreground : gc -> Color.t -> unit = "ml_gdk_gc_set_foreground"
-  external set_background : gc -> Color.t -> unit = "ml_gdk_gc_set_background"
-  external set_font : gc -> font -> unit = "ml_gdk_gc_set_font"
-  external set_function : gc -> gdkFunction -> unit = "ml_gdk_gc_set_function"
-  external set_fill : gc -> gdkFill -> unit = "ml_gdk_gc_set_fill"
-  external set_tile : gc -> pixmap -> unit = "ml_gdk_gc_set_tile"
-  external set_stipple : gc -> pixmap -> unit = "ml_gdk_gc_set_stipple"
-  external set_ts_origin : gc -> x:int -> y:int -> unit
-      = "ml_gdk_gc_set_ts_origin"
-  external set_clip_origin : gc -> x:int -> y:int -> unit
-      = "ml_gdk_gc_set_clip_origin"
-  external set_clip_mask : gc -> bitmap -> unit = "ml_gdk_gc_set_clip_mask"
-  external set_clip_rectangle : gc -> Rectangle.t -> unit
-      = "ml_gdk_gc_set_clip_rectangle"
-  external set_clip_region : gc -> region -> unit = "ml_gdk_gc_set_clip_region"
-  external set_subwindow : gc -> gdkSubwindowMode -> unit
-      = "ml_gdk_gc_set_subwindow"
-  external set_exposures : gc -> bool -> unit = "ml_gdk_gc_set_exposures"
-  external set_line_attributes :
-      gc -> width:int -> style:gdkLineStyle -> cap:gdkCapStyle ->
-      join:gdkJoinStyle -> unit
-      = "ml_gdk_gc_set_line_attributes"
-  external copy : dst:gc -> gc -> unit = "ml_gdk_gc_copy"
-  type values = {
-      foreground : Color.t;
-      background : Color.t;
-      font : font option;
-      fonction : gdkFunction;
-      fill : gdkFill;
-      tile : pixmap option;
-      stipple : pixmap option;
-      clip_mask : bitmap option;
-      subwindow_mode : gdkSubwindowMode;
-      ts_x_origin : int;
-      ts_y_origin : int;
-      clip_x_origin : int;
-      clip_y_origin : int;
-      graphics_exposures : bool;
-      line_width : int;
-      line_style : gdkLineStyle;
-      cap_style : gdkCapStyle;
-      join_style : gdkJoinStyle;
-    }
-  external get_values : gc -> values = "ml_gdk_gc_get_values"
-end
-
-module Pixmap = struct
-  external create : window -> width:int -> height:int -> depth:int -> pixmap
-      = "ml_gdk_pixmap_new"
-  external create_from_data :
-      window -> string -> width:int -> height:int -> depth:int ->
-      fg:Color.t -> bg:Color.t -> pixmap
-      = "ml_gdk_pixmap_create_from_data_bc" "ml_gk_pixmap_create_from_data"
-  external create_from_xpm :
-      window -> ?colormap:colormap -> ?transparent:Color.t ->
-      file:string -> pixmap * bitmap
-      = "ml_gdk_pixmap_colormap_create_from_xpm"
-  external create_from_xpm_d :
-      window -> ?colormap:colormap -> ?transparent:Color.t ->
-      data:string array -> pixmap * bitmap
-      = "ml_gdk_pixmap_colormap_create_from_xpm_d"
-end
-
-module Bitmap = struct
-  let create : window -> width:int -> height:int -> bitmap =
-    Obj.magic (Pixmap.create ~depth:1)
-  external create_from_data :
-      window -> string -> width:int -> height:int -> bitmap
-      = "ml_gdk_bitmap_create_from_data"
-end
-
-module Font = struct
-  external load : string -> font = "ml_gdk_font_load"
-  external load_fontset : string -> font = "ml_gdk_fontset_load"
-  external string_width : font -> string -> int = "ml_gdk_string_width"
-  external char_width : font -> char -> int = "ml_gdk_char_width"
-  external string_height : font -> string -> int = "ml_gdk_string_height"
-  external char_height : font -> char -> int = "ml_gdk_char_height"
-  external string_measure : font -> string -> int = "ml_gdk_string_measure"
-  external char_measure : font -> char -> int = "ml_gdk_char_measure"
-  external get_type : font -> [`FONT | `FONTSET] = "ml_GdkFont_type"
-  external ascent : font -> int = "ml_GdkFont_ascent"
-  external descent : font -> int = "ml_GdkFont_descent"
-end
-
-module Draw = struct
-  external point : 'a drawable -> gc -> x:int -> y:int -> unit
-      = "ml_gdk_draw_point"
-  external line : 'a drawable -> gc -> x:int -> y:int -> x:int -> y:int -> unit
-      = "ml_gdk_draw_line_bc" "ml_gdk_draw_line"
-  external rectangle :
-      'a drawable -> gc ->
-      filled:bool -> x:int -> y:int -> width:int -> height:int -> unit
-      = "ml_gdk_draw_rectangle_bc" "ml_gdk_draw_rectangle"
-  let rectangle w gc ~x ~y ~width ~height ?(filled=false) () =
-    rectangle w gc ~x ~y ~width ~height ~filled
-  external arc :
-      'a drawable -> gc -> filled:bool -> x:int -> y:int ->
-      width:int -> height:int -> start:int -> angle:int -> unit
-      = "ml_gdk_draw_arc_bc" "ml_gdk_draw_arc"
-  let arc w gc ~x ~y ~width ~height ?(filled=false) ?(start=0.)
-      ?(angle=360.) () =
-    arc w gc ~x ~y ~width ~height ~filled
-      ~start:(truncate(start *. 64.))
-      ~angle:(truncate(angle *. 64.))
-  external polygon : 'a drawable -> gc -> filled:bool -> PointArray.t -> unit
-      = "ml_gdk_draw_polygon"
-  let polygon w gc ?(filled=false) l =
-    let len = List.length l in
-    let arr = PointArray.create ~len in
-    List.fold_left l ~init:0
-      ~f:(fun pos (x,y) -> PointArray.set arr ~pos ~x ~y; pos+1);
-    polygon w gc ~filled arr
-  external string : 'a drawable -> font: font -> gc -> x: int -> y: int ->
-    string: string -> unit
-      = "ml_gdk_draw_string_bc" "ml_gdk_draw_string"   
-  external image : 'a drawable -> gc -> image: image -> 
-    xsrc: int -> ysrc: int -> xdest: int -> ydest: int -> 
-    width: int -> height: int -> unit
-      = "ml_gdk_draw_image_bc" "ml_gdk_draw_image"
-end
-
-module Rgb = struct
-  external init : unit -> unit = "ml_gdk_rgb_init"
-  external get_visual : unit -> visual = "ml_gdk_rgb_get_visual"
-  external get_cmap : unit -> colormap = "ml_gdk_rgb_get_cmap"
-end
-
-module DnD = struct
-  external drag_status : drag_context -> drag_action list -> time:int -> unit
-      = "ml_gdk_drag_status"
-  external drag_context_suggested_action : drag_context -> drag_action
-      = "ml_GdkDragContext_suggested_action"
-  external drag_context_targets : drag_context -> atom list
-      = "ml_GdkDragContext_targets"
-end
-
-module Truecolor = struct
-  (* Truecolor quick color query *) 
-
-  type visual_shift_prec = {
-      red_shift : int;
-      red_prec : int;
-      green_shift : int;
-      green_prec : int;
-      blue_shift : int;
-      blue_prec : int
-    }
-  let shift_prec visual = {
-    red_shift = Visual.red_shift visual;
-    red_prec = Visual.red_prec visual;
-    green_shift = Visual.green_shift visual;
-    green_prec = Visual.green_prec visual;
-    blue_shift = Visual.blue_shift visual;
-    blue_prec = Visual.blue_prec visual;
-  }
-
-  let color_creator visual =
-    match Visual.get_type visual with
-      `TRUE_COLOR | `DIRECT_COLOR ->
-       let shift_prec = shift_prec visual in
-       Format.eprintf "red : %d %d, "
-         shift_prec.red_shift shift_prec.red_prec;
-       Format.eprintf "green : %d %d, "
-         shift_prec.green_shift shift_prec.green_prec;
-       Format.eprintf "blue : %d %d"
-         shift_prec.blue_shift shift_prec.blue_prec;
-       Format.pp_print_newline Format.err_formatter ();
-       let red_lsr = 16 - shift_prec.red_prec
-       and green_lsr = 16 - shift_prec.green_prec
-       and blue_lsr = 16 - shift_prec.blue_prec in
-       fun ~red: red ~green: green ~blue: blue ->
-         (((red lsr red_lsr) lsl shift_prec.red_shift) lor 
-          ((green lsr green_lsr) lsl shift_prec.green_shift) lor
-          ((blue lsr blue_lsr) lsl shift_prec.blue_shift))
-    | _ -> raise (Invalid_argument "Gdk.Truecolor.color_creator")
-
-  let color_parser visual =
-    match Visual.get_type visual with
-      `TRUE_COLOR | `DIRECT_COLOR ->
-       let shift_prec = shift_prec visual in
-       let red_lsr = 16 - shift_prec.red_prec
-       and green_lsr = 16 - shift_prec.green_prec
-       and blue_lsr = 16 - shift_prec.blue_prec in
-       let mask = 1 lsl 16 - 1 in
-       fun pixel ->
-         ((pixel lsr shift_prec.red_shift) lsl red_lsr) land mask,
-         ((pixel lsr shift_prec.green_shift) lsl green_lsr) land mask,
-         ((pixel lsr shift_prec.blue_shift) lsl blue_lsr) land mask
-    | _ -> raise (Invalid_argument "Gdk.Truecolor.color_parser")
-end
-
-module X = struct
-  (* X related functions *)
-  external flush : unit -> unit
-      = "ml_gdk_flush"
-  external beep : unit -> unit
-      = "ml_gdk_beep"
-end
-
-module Cursor = struct
-  type cursor_type = [
-    | `X_CURSOR
-    | `ARROW
-    | `BASED_ARROW_DOWN
-    | `BASED_ARROW_UP
-    | `BOAT
-    | `BOGOSITY
-    | `BOTTOM_LEFT_CORNER
-    | `BOTTOM_RIGHT_CORNER
-    | `BOTTOM_SIDE
-    | `BOTTOM_TEE
-    | `BOX_SPIRAL
-    | `CENTER_PTR
-    | `CIRCLE
-    | `CLOCK
-    | `COFFEE_MUG
-    | `CROSS
-    | `CROSS_REVERSE
-    | `CROSSHAIR
-    | `DIAMOND_CROSS
-    | `DOT
-    | `DOTBOX
-    | `DOUBLE_ARROW
-    | `DRAFT_LARGE
-    | `DRAFT_SMALL
-    | `DRAPED_BOX
-    | `EXCHANGE
-    | `FLEUR
-    | `GOBBLER
-    | `GUMBY
-    | `HAND1
-    | `HAND2
-    | `HEART
-    | `ICON
-    | `IRON_CROSS
-    | `LEFT_PTR
-    | `LEFT_SIDE
-    | `LEFT_TEE
-    | `LEFTBUTTON
-    | `LL_ANGLE
-    | `LR_ANGLE
-    | `MAN
-    | `MIDDLEBUTTON
-    | `MOUSE
-    | `PENCIL
-    | `PIRATE
-    | `PLUS
-    | `QUESTION_ARROW
-    | `RIGHT_PTR
-    | `RIGHT_SIDE
-    | `RIGHT_TEE
-    | `RIGHTBUTTON
-    | `RTL_LOGO
-    | `SAILBOAT
-    | `SB_DOWN_ARROW
-    | `SB_H_DOUBLE_ARROW
-    | `SB_LEFT_ARROW
-    | `SB_RIGHT_ARROW
-    | `SB_UP_ARROW
-    | `SB_V_DOUBLE_ARROW
-    | `SHUTTLE
-    | `SIZING
-    | `SPIDER
-    | `SPRAYCAN
-    | `STAR
-    | `TARGET
-    | `TCROSS
-    | `TOP_LEFT_ARROW
-    | `TOP_LEFT_CORNER
-    | `TOP_RIGHT_CORNER
-    | `TOP_SIDE
-    | `TOP_TEE
-    | `TREK
-    | `UL_ANGLE
-    | `UMBRELLA
-    | `UR_ANGLE
-    | `WATCH
-    | `XTERM
-  ]
-  external create : cursor_type -> cursor = "ml_gdk_cursor_new"
-  external create_from_pixmap :
-    pixmap -> mask:bitmap ->
-    fg:Color.t -> bg:Color.t -> x:int -> y:int -> cursor
-    = "ml_gdk_cursor_new_from_pixmap_bc" "ml_gdk_cursor_new_from_pixmap"
-  external destroy : cursor -> unit = "ml_gdk_cursor_destroy"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdk.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdk.mli
deleted file mode 100644 (file)
index 2914b60..0000000
+++ /dev/null
@@ -1,447 +0,0 @@
-(* $Id$ *)
-
-type colormap
-type visual
-type region
-type gc
-type 'a drawable
-type window = [`window] drawable
-type pixmap = [`pixmap] drawable
-type bitmap = [`bitmap] drawable
-type font
-type image
-type atom = int
-type keysym = int
-type 'a event
-type drag_context
-type cursor
-type xid = int32
-
-exception Error of string
-
-module Tags : sig
-  type event_type =
-    [ `NOTHING|`DELETE|`DESTROY|`EXPOSE|`MOTION_NOTIFY|`BUTTON_PRESS
-     |`TWO_BUTTON_PRESS|`THREE_BUTTON_PRESS
-     |`BUTTON_RELEASE|`KEY_PRESS
-     |`KEY_RELEASE|`ENTER_NOTIFY|`LEAVE_NOTIFY|`FOCUS_CHANGE
-     |`CONFIGURE|`MAP|`UNMAP|`PROPERTY_NOTIFY|`SELECTION_CLEAR
-     |`SELECTION_REQUEST|`SELECTION_NOTIFY|`PROXIMITY_IN
-     |`PROXIMITY_OUT|`DRAG_ENTER|`DRAG_LEAVE|`DRAG_MOTION|`DRAG_STATUS
-     |`DROP_START|`DROP_FINISHED|`CLIENT_EVENT|`VISIBILITY_NOTIFY
-     |`NO_EXPOSE ]
-  type event_mask =
-    [ `EXPOSURE
-     |`POINTER_MOTION|`POINTER_MOTION_HINT
-     |`BUTTON_MOTION|`BUTTON1_MOTION|`BUTTON2_MOTION|`BUTTON3_MOTION
-     |`BUTTON_PRESS|`BUTTON_RELEASE
-     |`KEY_PRESS|`KEY_RELEASE
-     |`ENTER_NOTIFY|`LEAVE_NOTIFY|`FOCUS_CHANGE
-     |`STRUCTURE|`PROPERTY_CHANGE|`VISIBILITY_NOTIFY
-     |`PROXIMITY_IN|`PROXIMITY_OUT|`SUBSTRUCTURE
-     |`ALL_EVENTS ]
-  type extension_events = [ `NONE|`ALL|`CURSOR ]
-  type visibility_state = [ `UNOBSCURED|`PARTIAL|`FULLY_OBSCURED ]
-  type input_source = [ `MOUSE|`PEN|`ERASER|`CURSOR ]
-  type notify_type =
-    [ `ANCESTOR|`VIRTUAL|`INFERIOR|`NONLINEAR|`NONLINEAR_VIRTUAL|`UNKNOWN ] 
-  type crossing_mode = [ `NORMAL|`GRAB|`UNGRAB ]
-  type modifier =
-    [ `SHIFT|`LOCK|`CONTROL|`MOD1|`MOD2|`MOD3|`MOD4|`MOD5|`BUTTON1
-     |`BUTTON2|`BUTTON3|`BUTTON4|`BUTTON5 ]
-  type drag_action = [ `DEFAULT|`COPY|`MOVE|`LINK|`PRIVATE|`ASK ]
-end
-
-module Convert :
-  sig
-    val modifier : int -> Tags.modifier list
-  end
-
-module Screen :
-  sig
-    external width : unit -> int = "ml_gdk_screen_width"
-    external height : unit -> int = "ml_gdk_screen_height"
-  end
-
-module Visual :
-  sig
-    type visual_type =
-      [ `STATIC_GRAY|`GRAYSCALE|`STATIC_COLOR
-       |`PSEUDO_COLOR|`TRUE_COLOR|`DIRECT_COLOR ]
-    external get_best : ?depth:int -> ?kind:visual_type -> unit -> visual
-        = "ml_gdk_visual_get_best"
-    external get_type : visual -> visual_type = "ml_GdkVisual_type"
-    external depth : visual -> int = "ml_GdkVisual_depth"
-    external red_mask : visual -> int = "ml_GdkVisual_red_mask"
-    external red_shift : visual -> int = "ml_GdkVisual_red_shift"
-    external red_prec : visual -> int = "ml_GdkVisual_red_prec"
-    external green_mask : visual -> int = "ml_GdkVisual_green_mask"
-    external green_shift : visual -> int = "ml_GdkVisual_green_shift"
-    external green_prec : visual -> int = "ml_GdkVisual_green_prec"
-    external blue_mask : visual -> int = "ml_GdkVisual_blue_mask"
-    external blue_shift : visual -> int = "ml_GdkVisual_blue_shift"
-    external blue_prec : visual -> int = "ml_GdkVisual_blue_prec"
-  end
-
-module Image :
-  sig
-    type image_type = [ `FASTEST|`NORMAL|`SHARED ]
-    external create_bitmap :
-      visual:visual -> data:string -> width:int -> height:int -> image
-      = "ml_gdk_image_new_bitmap"
-    external create :
-      kind:image_type ->
-      visual:visual -> width:int -> height:int -> image = "ml_gdk_image_new"
-    external get :
-      'a drawable -> x:int -> y:int -> width:int -> height:int -> image
-      = "ml_gdk_image_get"
-    external put_pixel : image -> x:int -> y:int -> pixel:int -> unit
-      = "ml_gdk_image_put_pixel"
-    external get_pixel : image -> x:int -> y:int -> int
-      = "ml_gdk_image_get_pixel"
-    external destroy : image -> unit = "ml_gdk_image_destroy"
-  end
-
-module Color :
-  sig
-    external get_system_colormap : unit -> colormap
-       = "ml_gdk_colormap_get_system"
-    val get_colormap : ?privat:bool -> visual -> colormap
-
-    type t
-    type spec = [
-      | `BLACK
-      | `NAME of string
-      | `RGB of int * int * int
-      | `WHITE
-    ]
-    val alloc : colormap:colormap -> spec -> t
-    external red : t -> int = "ml_GdkColor_red"
-    external blue : t -> int = "ml_GdkColor_blue"
-    external green : t -> int = "ml_GdkColor_green"
-    external pixel : t -> int = "ml_GdkColor_pixel"
-  end
-
-module Rectangle :
-  sig
-    type t
-    external create : x:int -> y:int -> width:int -> height:int -> t
-      = "ml_GdkRectangle"
-    external x : t -> int = "ml_GdkRectangle_x"
-    external y : t -> int = "ml_GdkRectangle_y"
-    external width : t -> int = "ml_GdkRectangle_width"
-    external height : t -> int = "ml_GdkRectangle_height"
-  end
-
-module Window :
-  sig
-    type background_pixmap = [ `NONE|`PARENT_RELATIVE|`PIXMAP of pixmap ]
-    external visual_depth : visual -> int = "ml_gdk_visual_get_depth"
-    external get_visual : window -> visual = "ml_gdk_window_get_visual"
-    external get_parent : window -> window = "ml_gdk_window_get_parent"
-    external get_size : window -> int * int = "ml_gdk_window_get_size"
-    external get_position : window -> int * int
-      = "ml_gdk_window_get_position"
-    external root_parent : unit -> window = "ml_GDK_ROOT_PARENT"
-    external clear : window -> unit = "ml_gdk_window_clear"
-    external get_xwindow : window -> xid = "ml_GDK_WINDOW_XWINDOW"
-    val set_back_pixmap : window -> background_pixmap -> unit
-  end
-
-module PointArray :
-  sig
-    type t = { len: int }
-    external create : len:int -> t = "ml_point_array_new"
-    val set : t -> pos:int -> x:int -> y:int -> unit
-  end
-
-module Region :
-  sig
-    type gdkFillRule = [ `EVEN_ODD_RULE|`WINDING_RULE ]
-    type gdkOverlapType = [ `IN|`OUT|`PART ]
-    external create : unit -> region = "ml_gdk_region_new"
-    external destroy : region -> unit = "ml_gdk_region_destroy"
-    val polygon : (int * int) list -> gdkFillRule -> region 
-    external intersect : region -> region -> region
-      = "ml_gdk_regions_intersect"
-    external union : region -> region -> region 
-      = "ml_gdk_regions_union"
-    external subtract : region -> region -> region 
-      = "ml_gdk_regions_subtract"
-    external xor : region -> region -> region 
-      = "ml_gdk_regions_xor"
-    external union_with_rect : region -> Rectangle.t -> region
-      = "ml_gdk_region_union_with_rect"
-    external offset : region -> x:int -> y:int -> unit = "ml_gdk_region_offset"
-    external shrink : region -> x:int -> y:int -> unit = "ml_gdk_region_shrink"
-    external empty : region -> bool = "ml_gdk_region_empty"
-    external equal : region -> region -> bool = "ml_gdk_region_equal"
-    external point_in : region -> x:int -> y:int -> bool 
-      = "ml_gdk_region_point_in"
-    external rect_in : region -> Rectangle.t -> gdkOverlapType
-      = "ml_gdk_region_rect_in"
-    external get_clipbox : region -> Rectangle.t -> unit
-      = "ml_gdk_region_get_clipbox"
-  end
-
-module GC :
-  sig
-    type gdkFunction = [ `COPY|`INVERT|`XOR ]
-    type gdkFill = [ `SOLID|`TILED|`STIPPLED|`OPAQUE_STIPPLED ]
-    type gdkSubwindowMode = [ `CLIP_BY_CHILDREN|`INCLUDE_INFERIORS ]
-    type gdkLineStyle = [ `SOLID|`ON_OFF_DASH|`DOUBLE_DASH ]
-    type gdkCapStyle = [ `NOT_LAST|`BUTT|`ROUND|`PROJECTING ]
-    type gdkJoinStyle = [ `MITER|`ROUND|`BEVEL ]
-    external create : 'a drawable -> gc = "ml_gdk_gc_new"
-    external set_foreground : gc -> Color.t -> unit
-      = "ml_gdk_gc_set_foreground"
-    external set_background : gc -> Color.t -> unit
-      = "ml_gdk_gc_set_background"
-    external set_font : gc -> font -> unit = "ml_gdk_gc_set_font"
-    external set_function : gc -> gdkFunction -> unit
-      = "ml_gdk_gc_set_function"
-    external set_fill : gc -> gdkFill -> unit = "ml_gdk_gc_set_fill"
-    external set_tile : gc -> pixmap -> unit = "ml_gdk_gc_set_tile"
-    external set_stipple : gc -> pixmap -> unit = "ml_gdk_gc_set_stipple"
-    external set_ts_origin : gc -> x:int -> y:int -> unit
-      = "ml_gdk_gc_set_ts_origin"
-    external set_clip_origin : gc -> x:int -> y:int -> unit
-      = "ml_gdk_gc_set_clip_origin"
-    external set_clip_mask : gc -> bitmap -> unit = "ml_gdk_gc_set_clip_mask"
-    external set_clip_rectangle : gc -> Rectangle.t -> unit
-      = "ml_gdk_gc_set_clip_rectangle"
-    external set_clip_region : gc -> region -> unit
-       = "ml_gdk_gc_set_clip_region"
-    external set_subwindow : gc -> gdkSubwindowMode -> unit
-      = "ml_gdk_gc_set_subwindow"
-    external set_exposures : gc -> bool -> unit = "ml_gdk_gc_set_exposures"
-    external set_line_attributes :
-      gc ->
-      width:int ->
-      style:gdkLineStyle -> cap:gdkCapStyle -> join:gdkJoinStyle -> unit
-      = "ml_gdk_gc_set_line_attributes"
-    external copy : dst:gc -> gc -> unit = "ml_gdk_gc_copy"
-    type values = {
-        foreground : Color.t;
-        background : Color.t;
-        font : font option;
-        fonction : gdkFunction;
-        fill : gdkFill;
-        tile : pixmap option;
-        stipple : pixmap option;
-        clip_mask : bitmap option;
-        subwindow_mode : gdkSubwindowMode;
-        ts_x_origin : int;
-        ts_y_origin : int;
-        clip_x_origin : int;
-        clip_y_origin : int;
-        graphics_exposures : bool;
-        line_width : int;
-        line_style : gdkLineStyle;
-        cap_style : gdkCapStyle;
-        join_style : gdkJoinStyle;
-      }
-    external get_values : gc -> values = "ml_gdk_gc_get_values"
-  end
-
-module Pixmap :
-  sig
-    external create :
-      window -> width:int -> height:int -> depth:int -> pixmap
-      = "ml_gdk_pixmap_new"
-    external create_from_data :
-      window ->
-      string ->
-      width:int ->
-      height:int -> depth:int -> fg:Color.t -> bg:Color.t -> pixmap
-      = "ml_gdk_pixmap_create_from_data_bc" "ml_gk_pixmap_create_from_data"
-    external create_from_xpm :
-      window ->
-      ?colormap:colormap ->
-      ?transparent:Color.t -> file:string -> pixmap * bitmap
-      = "ml_gdk_pixmap_colormap_create_from_xpm"
-    external create_from_xpm_d :
-      window ->
-      ?colormap:colormap ->
-      ?transparent:Color.t -> data:string array -> pixmap * bitmap
-      = "ml_gdk_pixmap_colormap_create_from_xpm_d"
-  end
-
-module Bitmap :
-  sig
-    val create : window -> width:int -> height:int -> bitmap
-    external create_from_data :
-      window -> string -> width:int -> height:int -> bitmap
-      = "ml_gdk_bitmap_create_from_data"
-  end
-
-module Font :
-  sig
-    external load : string -> font = "ml_gdk_font_load"
-    external load_fontset : string -> font = "ml_gdk_fontset_load"
-    external string_width : font -> string -> int = "ml_gdk_string_width"
-    external char_width : font -> char -> int = "ml_gdk_char_width"
-    external string_height : font -> string -> int = "ml_gdk_string_height"
-    external char_height : font -> char -> int = "ml_gdk_char_height"
-    external string_measure : font -> string -> int = "ml_gdk_string_measure"
-    external char_measure : font -> char -> int = "ml_gdk_char_measure"
-    external get_type : font -> [`FONT | `FONTSET] = "ml_GdkFont_type"
-    external ascent : font -> int = "ml_GdkFont_ascent"
-    external descent : font -> int = "ml_GdkFont_descent"
-  end
-
-module Draw :
-  sig
-    external point : 'a drawable -> gc -> x:int -> y:int -> unit
-      = "ml_gdk_draw_point"
-    external line :
-      'a drawable -> gc -> x:int -> y:int -> x:int -> y:int -> unit
-      = "ml_gdk_draw_line_bc" "ml_gdk_draw_line"
-    val rectangle :
-      'a drawable -> gc ->
-      x:int -> y:int -> width:int -> height:int -> ?filled:bool -> unit -> unit
-    val arc :
-      'a drawable -> gc ->
-      x:int -> y:int -> width:int -> height:int ->
-      ?filled:bool -> ?start:float -> ?angle:float -> unit -> unit
-    val polygon :
-      'a drawable -> gc -> ?filled:bool ->(int * int) list -> unit
-    external string :
-      'a drawable ->
-      font:font -> gc -> x:int -> y:int -> string:string -> unit
-      = "ml_gdk_draw_string_bc" "ml_gdk_draw_string"
-    external image :
-      'a drawable ->
-      gc ->
-      image:image ->
-      xsrc:int ->
-      ysrc:int -> xdest:int -> ydest:int -> width:int -> height:int -> unit
-      = "ml_gdk_draw_image_bc" "ml_gdk_draw_image"
-  end
-
-module Rgb :
-  sig
-    external init : unit -> unit = "ml_gdk_rgb_init"
-    external get_visual : unit -> visual = "ml_gdk_rgb_get_visual"
-    external get_cmap : unit -> colormap = "ml_gdk_rgb_get_cmap"
-  end
-
-module DnD :
-  sig
-    external drag_status :
-      drag_context -> Tags.drag_action list -> time:int -> unit
-      = "ml_gdk_drag_status"
-    external drag_context_suggested_action : drag_context -> Tags.drag_action
-      = "ml_GdkDragContext_suggested_action"
-    external drag_context_targets : drag_context -> atom list
-      = "ml_GdkDragContext_targets"
-  end
-
-module Truecolor :
-  sig
-    val color_creator : visual -> (red: int -> green: int -> blue: int -> int)
-       (* [color_creator visual] creates a function to calculate 
-          the pixel color id for given red, green and blue component 
-          value ([0..65535]) at the client side. [visual] must have 
-           `TRUE_COLOR or `DIRECT_COLOR type. This function improves
-           the speed of the color query of true color visual greatly. *)
-       (* WARN: this approach is not theoretically correct for true color
-          visual, because we need gamma correction. *)
-
-    val color_parser : visual -> int -> int * int * int
-  end
-
-module X :
-  (* X related functions *)
-  sig
-    val flush : unit -> unit (* also in GtkMain *)
-    val beep : unit -> unit
-  end
-
-module Cursor : sig
-  type cursor_type = [
-    | `X_CURSOR
-    | `ARROW
-    | `BASED_ARROW_DOWN
-    | `BASED_ARROW_UP
-    | `BOAT
-    | `BOGOSITY
-    | `BOTTOM_LEFT_CORNER
-    | `BOTTOM_RIGHT_CORNER
-    | `BOTTOM_SIDE
-    | `BOTTOM_TEE
-    | `BOX_SPIRAL
-    | `CENTER_PTR
-    | `CIRCLE
-    | `CLOCK
-    | `COFFEE_MUG
-    | `CROSS
-    | `CROSS_REVERSE
-    | `CROSSHAIR
-    | `DIAMOND_CROSS
-    | `DOT
-    | `DOTBOX
-    | `DOUBLE_ARROW
-    | `DRAFT_LARGE
-    | `DRAFT_SMALL
-    | `DRAPED_BOX
-    | `EXCHANGE
-    | `FLEUR
-    | `GOBBLER
-    | `GUMBY
-    | `HAND1
-    | `HAND2
-    | `HEART
-    | `ICON
-    | `IRON_CROSS
-    | `LEFT_PTR
-    | `LEFT_SIDE
-    | `LEFT_TEE
-    | `LEFTBUTTON
-    | `LL_ANGLE
-    | `LR_ANGLE
-    | `MAN
-    | `MIDDLEBUTTON
-    | `MOUSE
-    | `PENCIL
-    | `PIRATE
-    | `PLUS
-    | `QUESTION_ARROW
-    | `RIGHT_PTR
-    | `RIGHT_SIDE
-    | `RIGHT_TEE
-    | `RIGHTBUTTON
-    | `RTL_LOGO
-    | `SAILBOAT
-    | `SB_DOWN_ARROW
-    | `SB_H_DOUBLE_ARROW
-    | `SB_LEFT_ARROW
-    | `SB_RIGHT_ARROW
-    | `SB_UP_ARROW
-    | `SB_V_DOUBLE_ARROW
-    | `SHUTTLE
-    | `SIZING
-    | `SPIDER
-    | `SPRAYCAN
-    | `STAR
-    | `TARGET
-    | `TCROSS
-    | `TOP_LEFT_ARROW
-    | `TOP_LEFT_CORNER
-    | `TOP_RIGHT_CORNER
-    | `TOP_SIDE
-    | `TOP_TEE
-    | `TREK
-    | `UL_ANGLE
-    | `UMBRELLA
-    | `UR_ANGLE
-    | `WATCH
-    | `XTERM
-  ]
-  external create : cursor_type -> cursor = "ml_gdk_cursor_new"
-  external create_from_pixmap :
-    pixmap -> mask:bitmap ->
-    fg:Color.t -> bg:Color.t -> x:int -> y:int -> cursor
-    = "ml_gdk_cursor_new_from_pixmap_bc" "ml_gdk_cursor_new_from_pixmap"
-  external destroy : cursor -> unit = "ml_gdk_cursor_destroy"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdkEvent.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdkEvent.ml
deleted file mode 100644 (file)
index 87c0e88..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gdk
-open Tags
-
-external coerce : 'a event -> event_type event = "%identity"
-external unsafe_copy : Gpointer.boxed -> #event_type event
-    = "ml_gdk_event_copy"
-external copy : (#event_type as 'a) event -> 'a event
-    = "ml_gdk_event_copy"
-external get_type : 'a event -> 'a = "ml_GdkEventAny_type"
-external get_window : 'a event -> window = "ml_GdkEventAny_window"
-external get_send_event : 'a event -> bool = "ml_GdkEventAny_send_event"
-
-external create : (#event_type as 'a) -> 'a event
-    = "ml_gdk_event_new"
-external set_window : 'a event -> window -> unit
-    = "ml_gdk_event_set_window"
-
-module Expose = struct
-  type t = [ `EXPOSE ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with `EXPOSE -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Expose.cast"
-  external area : t -> Rectangle.t = "ml_GdkEventExpose_area"
-  external count : t -> int = "ml_GdkEventExpose_count"
-end
-
-module Visibility = struct
-  type t = [ `VISIBILITY_NOTIFY ] event
-  let cast (ev :  event_type event) : t =
-    match get_type ev with `VISIBILITY_NOTIFY -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Visibility.cast"
-  external visibility : t -> visibility_state
-      = "ml_GdkEventVisibility_state"
-end
-
-module Motion = struct
-  type t = [ `MOTION_NOTIFY ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with `MOTION_NOTIFY -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Motion.cast"
-  external time : t -> int = "ml_GdkEventMotion_time"
-  external x : t -> float = "ml_GdkEventMotion_x"
-  external y : t -> float = "ml_GdkEventMotion_y"
-  external pressure : t -> float = "ml_GdkEventMotion_pressure"
-  external xtilt : t -> float = "ml_GdkEventMotion_xtilt"
-  external ytilt : t -> float = "ml_GdkEventMotion_ytilt"
-  external state : t -> int = "ml_GdkEventMotion_state"
-  external is_hint : t -> bool = "ml_GdkEventMotion_is_hint"
-  external source : t -> input_source = "ml_GdkEventMotion_source"
-  external deviceid : t -> int = "ml_GdkEventMotion_deviceid"
-  external x_root : t -> float = "ml_GdkEventMotion_x_root"
-  external y_root : t -> float = "ml_GdkEventMotion_y_root"
-end
-
-module Button = struct
-  type types =
-      [ `BUTTON_PRESS|`TWO_BUTTON_PRESS|`THREE_BUTTON_PRESS|`BUTTON_RELEASE ]
-  type t = types event
-  let cast (ev : event_type event) : t =
-    match get_type ev with
-      `BUTTON_PRESS|`TWO_BUTTON_PRESS|`THREE_BUTTON_PRESS|`BUTTON_RELEASE
-      -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Button.cast"
-  external time : t -> int = "ml_GdkEventButton_time"
-  external x : t -> float = "ml_GdkEventButton_x"
-  external y : t -> float = "ml_GdkEventButton_y"
-  external pressure : t -> float = "ml_GdkEventButton_pressure"
-  external xtilt : t -> float = "ml_GdkEventButton_xtilt"
-  external ytilt : t -> float = "ml_GdkEventButton_ytilt"
-  external state : t -> int = "ml_GdkEventButton_state"
-  external button : t -> int = "ml_GdkEventButton_button"
-  external source : t -> input_source = "ml_GdkEventButton_source"
-  external deviceid : t -> int = "ml_GdkEventButton_deviceid"
-  external x_root : t -> float = "ml_GdkEventButton_x_root"
-  external y_root : t -> float = "ml_GdkEventButton_y_root"
-  external set_type : t -> #types -> unit
-      = "ml_gdk_event_set_type"
-  external set_button : t -> int -> unit
-      = "ml_gdk_event_button_set_button"
-end
-
-module Key = struct
-  type t = [ `KEY_PRESS|`KEY_RELEASE ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with
-      `KEY_PRESS|`KEY_RELEASE -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Key.cast"
-  external time : t -> int = "ml_GdkEventKey_time"
-  external state : t -> int = "ml_GdkEventKey_state"
-  external keyval : t -> keysym = "ml_GdkEventKey_keyval"
-  external string : t -> string = "ml_GdkEventKey_string"
-  let state ev = Convert.modifier (state ev)
-end
-
-module Crossing = struct
-  type t = [ `ENTER_NOTIFY|`LEAVE_NOTIFY ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with
-      `ENTER_NOTIFY|`LEAVE_NOTIFY -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Crossing.cast"
-  external subwindow : t -> window = "ml_GdkEventCrossing_subwindow"
-  external detail : t -> notify_type = "ml_GdkEventCrossing_detail"
-end
-
-module Focus = struct
-  type t = [ `FOCUS_CHANGE ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with `FOCUS_CHANGE -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Focus.cast"
-  external focus_in : t -> bool = "ml_GdkEventFocus_in"
-end
-
-module Configure = struct
-  type t = [ `CONFIGURE ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with `CONFIGURE -> Obj.magic ev
-    |  _ -> invalid_arg "GdkEvent.Configure.cast"
-  external x : t -> int = "ml_GdkEventConfigure_x"
-  external y : t -> int = "ml_GdkEventConfigure_y"
-  external width : t -> int = "ml_GdkEventConfigure_width"
-  external height : t -> int = "ml_GdkEventConfigure_height"
-end
-
-module Property = struct
-  type t = [ `PROPERTY_NOTIFY ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with `PROPERTY_NOTIFY -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Property.cast"
-  external atom : t -> atom = "ml_GdkEventProperty_atom"
-  external time : t -> int = "ml_GdkEventProperty_time"
-  external state : t -> int = "ml_GdkEventProperty_state"
-end
-
-module Selection = struct
-  type t = [ `SELECTION_CLEAR|`SELECTION_REQUEST|`SELECTION_NOTIFY ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with
-      `SELECTION_CLEAR|`SELECTION_REQUEST|`SELECTION_NOTIFY -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Selection.cast"
-  external selection : t -> atom = "ml_GdkEventSelection_selection"
-  external target : t -> atom = "ml_GdkEventSelection_target"
-  external property : t -> atom = "ml_GdkEventSelection_property"
-  external requestor : t -> int = "ml_GdkEventSelection_requestor"
-  external time : t -> int = "ml_GdkEventSelection_time"
-end
-
-module Proximity = struct
-  type t = [ `PROXIMITY_IN|`PROXIMITY_OUT ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with
-      `PROXIMITY_IN|`PROXIMITY_OUT -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Proximity.cast"
-  external time : t -> int = "ml_GdkEventProximity_time"
-  external source : t -> input_source = "ml_GdkEventProximity_source"
-  external deviceid : t -> int = "ml_GdkEventProximity_deviceid"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdkKeysyms.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdkKeysyms.ml
deleted file mode 100644 (file)
index b0257b4..0000000
+++ /dev/null
@@ -1,1320 +0,0 @@
-(* $Id$ *)
-
-open Gdk
-let _VoidSymbol : keysym = 0xFFFFFF
-let _BackSpace : keysym = 0xFF08
-let _Tab : keysym = 0xFF09
-let _Linefeed : keysym = 0xFF0A
-let _Clear : keysym = 0xFF0B
-let _Return : keysym = 0xFF0D
-let _Pause : keysym = 0xFF13
-let _Scroll_Lock : keysym = 0xFF14
-let _Sys_Req : keysym = 0xFF15
-let _Escape : keysym = 0xFF1B
-let _Delete : keysym = 0xFFFF
-let _Multi_key : keysym = 0xFF20
-let _SingleCandidate : keysym = 0xFF3C
-let _MultipleCandidate : keysym = 0xFF3D
-let _PreviousCandidate : keysym = 0xFF3E
-let _Kanji : keysym = 0xFF21
-let _Muhenkan : keysym = 0xFF22
-let _Henkan_Mode : keysym = 0xFF23
-let _Henkan : keysym = 0xFF23
-let _Romaji : keysym = 0xFF24
-let _Hiragana : keysym = 0xFF25
-let _Katakana : keysym = 0xFF26
-let _Hiragana_Katakana : keysym = 0xFF27
-let _Zenkaku : keysym = 0xFF28
-let _Hankaku : keysym = 0xFF29
-let _Zenkaku_Hankaku : keysym = 0xFF2A
-let _Touroku : keysym = 0xFF2B
-let _Massyo : keysym = 0xFF2C
-let _Kana_Lock : keysym = 0xFF2D
-let _Kana_Shift : keysym = 0xFF2E
-let _Eisu_Shift : keysym = 0xFF2F
-let _Eisu_toggle : keysym = 0xFF30
-let _Zen_Koho : keysym = 0xFF3D
-let _Mae_Koho : keysym = 0xFF3E
-let _Home : keysym = 0xFF50
-let _Left : keysym = 0xFF51
-let _Up : keysym = 0xFF52
-let _Right : keysym = 0xFF53
-let _Down : keysym = 0xFF54
-let _Prior : keysym = 0xFF55
-let _Page_Up : keysym = 0xFF55
-let _Next : keysym = 0xFF56
-let _Page_Down : keysym = 0xFF56
-let _End : keysym = 0xFF57
-let _Begin : keysym = 0xFF58
-let _Select : keysym = 0xFF60
-let _Print : keysym = 0xFF61
-let _Execute : keysym = 0xFF62
-let _Insert : keysym = 0xFF63
-let _Undo : keysym = 0xFF65
-let _Redo : keysym = 0xFF66
-let _Menu : keysym = 0xFF67
-let _Find : keysym = 0xFF68
-let _Cancel : keysym = 0xFF69
-let _Help : keysym = 0xFF6A
-let _Break : keysym = 0xFF6B
-let _Mode_switch : keysym = 0xFF7E
-let _script_switch : keysym = 0xFF7E
-let _Num_Lock : keysym = 0xFF7F
-let _KP_Space : keysym = 0xFF80
-let _KP_Tab : keysym = 0xFF89
-let _KP_Enter : keysym = 0xFF8D
-let _KP_F1 : keysym = 0xFF91
-let _KP_F2 : keysym = 0xFF92
-let _KP_F3 : keysym = 0xFF93
-let _KP_F4 : keysym = 0xFF94
-let _KP_Home : keysym = 0xFF95
-let _KP_Left : keysym = 0xFF96
-let _KP_Up : keysym = 0xFF97
-let _KP_Right : keysym = 0xFF98
-let _KP_Down : keysym = 0xFF99
-let _KP_Prior : keysym = 0xFF9A
-let _KP_Page_Up : keysym = 0xFF9A
-let _KP_Next : keysym = 0xFF9B
-let _KP_Page_Down : keysym = 0xFF9B
-let _KP_End : keysym = 0xFF9C
-let _KP_Begin : keysym = 0xFF9D
-let _KP_Insert : keysym = 0xFF9E
-let _KP_Delete : keysym = 0xFF9F
-let _KP_Equal : keysym = 0xFFBD
-let _KP_Multiply : keysym = 0xFFAA
-let _KP_Add : keysym = 0xFFAB
-let _KP_Separator : keysym = 0xFFAC
-let _KP_Subtract : keysym = 0xFFAD
-let _KP_Decimal : keysym = 0xFFAE
-let _KP_Divide : keysym = 0xFFAF
-let _KP_0 : keysym = 0xFFB0
-let _KP_1 : keysym = 0xFFB1
-let _KP_2 : keysym = 0xFFB2
-let _KP_3 : keysym = 0xFFB3
-let _KP_4 : keysym = 0xFFB4
-let _KP_5 : keysym = 0xFFB5
-let _KP_6 : keysym = 0xFFB6
-let _KP_7 : keysym = 0xFFB7
-let _KP_8 : keysym = 0xFFB8
-let _KP_9 : keysym = 0xFFB9
-let _F1 : keysym = 0xFFBE
-let _F2 : keysym = 0xFFBF
-let _F3 : keysym = 0xFFC0
-let _F4 : keysym = 0xFFC1
-let _F5 : keysym = 0xFFC2
-let _F6 : keysym = 0xFFC3
-let _F7 : keysym = 0xFFC4
-let _F8 : keysym = 0xFFC5
-let _F9 : keysym = 0xFFC6
-let _F10 : keysym = 0xFFC7
-let _F11 : keysym = 0xFFC8
-let _L1 : keysym = 0xFFC8
-let _F12 : keysym = 0xFFC9
-let _L2 : keysym = 0xFFC9
-let _F13 : keysym = 0xFFCA
-let _L3 : keysym = 0xFFCA
-let _F14 : keysym = 0xFFCB
-let _L4 : keysym = 0xFFCB
-let _F15 : keysym = 0xFFCC
-let _L5 : keysym = 0xFFCC
-let _F16 : keysym = 0xFFCD
-let _L6 : keysym = 0xFFCD
-let _F17 : keysym = 0xFFCE
-let _L7 : keysym = 0xFFCE
-let _F18 : keysym = 0xFFCF
-let _L8 : keysym = 0xFFCF
-let _F19 : keysym = 0xFFD0
-let _L9 : keysym = 0xFFD0
-let _F20 : keysym = 0xFFD1
-let _L10 : keysym = 0xFFD1
-let _F21 : keysym = 0xFFD2
-let _R1 : keysym = 0xFFD2
-let _F22 : keysym = 0xFFD3
-let _R2 : keysym = 0xFFD3
-let _F23 : keysym = 0xFFD4
-let _R3 : keysym = 0xFFD4
-let _F24 : keysym = 0xFFD5
-let _R4 : keysym = 0xFFD5
-let _F25 : keysym = 0xFFD6
-let _R5 : keysym = 0xFFD6
-let _F26 : keysym = 0xFFD7
-let _R6 : keysym = 0xFFD7
-let _F27 : keysym = 0xFFD8
-let _R7 : keysym = 0xFFD8
-let _F28 : keysym = 0xFFD9
-let _R8 : keysym = 0xFFD9
-let _F29 : keysym = 0xFFDA
-let _R9 : keysym = 0xFFDA
-let _F30 : keysym = 0xFFDB
-let _R10 : keysym = 0xFFDB
-let _F31 : keysym = 0xFFDC
-let _R11 : keysym = 0xFFDC
-let _F32 : keysym = 0xFFDD
-let _R12 : keysym = 0xFFDD
-let _F33 : keysym = 0xFFDE
-let _R13 : keysym = 0xFFDE
-let _F34 : keysym = 0xFFDF
-let _R14 : keysym = 0xFFDF
-let _F35 : keysym = 0xFFE0
-let _R15 : keysym = 0xFFE0
-let _Shift_L : keysym = 0xFFE1
-let _Shift_R : keysym = 0xFFE2
-let _Control_L : keysym = 0xFFE3
-let _Control_R : keysym = 0xFFE4
-let _Caps_Lock : keysym = 0xFFE5
-let _Shift_Lock : keysym = 0xFFE6
-let _Meta_L : keysym = 0xFFE7
-let _Meta_R : keysym = 0xFFE8
-let _Alt_L : keysym = 0xFFE9
-let _Alt_R : keysym = 0xFFEA
-let _Super_L : keysym = 0xFFEB
-let _Super_R : keysym = 0xFFEC
-let _Hyper_L : keysym = 0xFFED
-let _Hyper_R : keysym = 0xFFEE
-let _ISO_Lock : keysym = 0xFE01
-let _ISO_Level2_Latch : keysym = 0xFE02
-let _ISO_Level3_Shift : keysym = 0xFE03
-let _ISO_Level3_Latch : keysym = 0xFE04
-let _ISO_Level3_Lock : keysym = 0xFE05
-let _ISO_Group_Shift : keysym = 0xFF7E
-let _ISO_Group_Latch : keysym = 0xFE06
-let _ISO_Group_Lock : keysym = 0xFE07
-let _ISO_Next_Group : keysym = 0xFE08
-let _ISO_Next_Group_Lock : keysym = 0xFE09
-let _ISO_Prev_Group : keysym = 0xFE0A
-let _ISO_Prev_Group_Lock : keysym = 0xFE0B
-let _ISO_First_Group : keysym = 0xFE0C
-let _ISO_First_Group_Lock : keysym = 0xFE0D
-let _ISO_Last_Group : keysym = 0xFE0E
-let _ISO_Last_Group_Lock : keysym = 0xFE0F
-let _ISO_Left_Tab : keysym = 0xFE20
-let _ISO_Move_Line_Up : keysym = 0xFE21
-let _ISO_Move_Line_Down : keysym = 0xFE22
-let _ISO_Partial_Line_Up : keysym = 0xFE23
-let _ISO_Partial_Line_Down : keysym = 0xFE24
-let _ISO_Partial_Space_Left : keysym = 0xFE25
-let _ISO_Partial_Space_Right : keysym = 0xFE26
-let _ISO_Set_Margin_Left : keysym = 0xFE27
-let _ISO_Set_Margin_Right : keysym = 0xFE28
-let _ISO_Release_Margin_Left : keysym = 0xFE29
-let _ISO_Release_Margin_Right : keysym = 0xFE2A
-let _ISO_Release_Both_Margins : keysym = 0xFE2B
-let _ISO_Fast_Cursor_Left : keysym = 0xFE2C
-let _ISO_Fast_Cursor_Right : keysym = 0xFE2D
-let _ISO_Fast_Cursor_Up : keysym = 0xFE2E
-let _ISO_Fast_Cursor_Down : keysym = 0xFE2F
-let _ISO_Continuous_Underline : keysym = 0xFE30
-let _ISO_Discontinuous_Underline : keysym = 0xFE31
-let _ISO_Emphasize : keysym = 0xFE32
-let _ISO_Center_Object : keysym = 0xFE33
-let _ISO_Enter : keysym = 0xFE34
-let _dead_grave : keysym = 0xFE50
-let _dead_acute : keysym = 0xFE51
-let _dead_circumflex : keysym = 0xFE52
-let _dead_tilde : keysym = 0xFE53
-let _dead_macron : keysym = 0xFE54
-let _dead_breve : keysym = 0xFE55
-let _dead_abovedot : keysym = 0xFE56
-let _dead_diaeresis : keysym = 0xFE57
-let _dead_abovering : keysym = 0xFE58
-let _dead_doubleacute : keysym = 0xFE59
-let _dead_caron : keysym = 0xFE5A
-let _dead_cedilla : keysym = 0xFE5B
-let _dead_ogonek : keysym = 0xFE5C
-let _dead_iota : keysym = 0xFE5D
-let _dead_voiced_sound : keysym = 0xFE5E
-let _dead_semivoiced_sound : keysym = 0xFE5F
-let _dead_belowdot : keysym = 0xFE60
-let _First_Virtual_Screen : keysym = 0xFED0
-let _Prev_Virtual_Screen : keysym = 0xFED1
-let _Next_Virtual_Screen : keysym = 0xFED2
-let _Last_Virtual_Screen : keysym = 0xFED4
-let _Terminate_Server : keysym = 0xFED5
-let _AccessX_Enable : keysym = 0xFE70
-let _AccessX_Feedback_Enable : keysym = 0xFE71
-let _RepeatKeys_Enable : keysym = 0xFE72
-let _SlowKeys_Enable : keysym = 0xFE73
-let _BounceKeys_Enable : keysym = 0xFE74
-let _StickyKeys_Enable : keysym = 0xFE75
-let _MouseKeys_Enable : keysym = 0xFE76
-let _MouseKeys_Accel_Enable : keysym = 0xFE77
-let _Overlay1_Enable : keysym = 0xFE78
-let _Overlay2_Enable : keysym = 0xFE79
-let _AudibleBell_Enable : keysym = 0xFE7A
-let _Pointer_Left : keysym = 0xFEE0
-let _Pointer_Right : keysym = 0xFEE1
-let _Pointer_Up : keysym = 0xFEE2
-let _Pointer_Down : keysym = 0xFEE3
-let _Pointer_UpLeft : keysym = 0xFEE4
-let _Pointer_UpRight : keysym = 0xFEE5
-let _Pointer_DownLeft : keysym = 0xFEE6
-let _Pointer_DownRight : keysym = 0xFEE7
-let _Pointer_Button_Dflt : keysym = 0xFEE8
-let _Pointer_Button1 : keysym = 0xFEE9
-let _Pointer_Button2 : keysym = 0xFEEA
-let _Pointer_Button3 : keysym = 0xFEEB
-let _Pointer_Button4 : keysym = 0xFEEC
-let _Pointer_Button5 : keysym = 0xFEED
-let _Pointer_DblClick_Dflt : keysym = 0xFEEE
-let _Pointer_DblClick1 : keysym = 0xFEEF
-let _Pointer_DblClick2 : keysym = 0xFEF0
-let _Pointer_DblClick3 : keysym = 0xFEF1
-let _Pointer_DblClick4 : keysym = 0xFEF2
-let _Pointer_DblClick5 : keysym = 0xFEF3
-let _Pointer_Drag_Dflt : keysym = 0xFEF4
-let _Pointer_Drag1 : keysym = 0xFEF5
-let _Pointer_Drag2 : keysym = 0xFEF6
-let _Pointer_Drag3 : keysym = 0xFEF7
-let _Pointer_Drag4 : keysym = 0xFEF8
-let _Pointer_Drag5 : keysym = 0xFEFD
-let _Pointer_EnableKeys : keysym = 0xFEF9
-let _Pointer_Accelerate : keysym = 0xFEFA
-let _Pointer_DfltBtnNext : keysym = 0xFEFB
-let _Pointer_DfltBtnPrev : keysym = 0xFEFC
-let _3270_Duplicate : keysym = 0xFD01
-let _3270_FieldMark : keysym = 0xFD02
-let _3270_Right2 : keysym = 0xFD03
-let _3270_Left2 : keysym = 0xFD04
-let _3270_BackTab : keysym = 0xFD05
-let _3270_EraseEOF : keysym = 0xFD06
-let _3270_EraseInput : keysym = 0xFD07
-let _3270_Reset : keysym = 0xFD08
-let _3270_Quit : keysym = 0xFD09
-let _3270_PA1 : keysym = 0xFD0A
-let _3270_PA2 : keysym = 0xFD0B
-let _3270_PA3 : keysym = 0xFD0C
-let _3270_Test : keysym = 0xFD0D
-let _3270_Attn : keysym = 0xFD0E
-let _3270_CursorBlink : keysym = 0xFD0F
-let _3270_AltCursor : keysym = 0xFD10
-let _3270_KeyClick : keysym = 0xFD11
-let _3270_Jump : keysym = 0xFD12
-let _3270_Ident : keysym = 0xFD13
-let _3270_Rule : keysym = 0xFD14
-let _3270_Copy : keysym = 0xFD15
-let _3270_Play : keysym = 0xFD16
-let _3270_Setup : keysym = 0xFD17
-let _3270_Record : keysym = 0xFD18
-let _3270_ChangeScreen : keysym = 0xFD19
-let _3270_DeleteWord : keysym = 0xFD1A
-let _3270_ExSelect : keysym = 0xFD1B
-let _3270_CursorSelect : keysym = 0xFD1C
-let _3270_PrintScreen : keysym = 0xFD1D
-let _3270_Enter : keysym = 0xFD1E
-let _space : keysym = 0x020
-let _exclam : keysym = 0x021
-let _quotedbl : keysym = 0x022
-let _numbersign : keysym = 0x023
-let _dollar : keysym = 0x024
-let _percent : keysym = 0x025
-let _ampersand : keysym = 0x026
-let _apostrophe : keysym = 0x027
-let _quoteright : keysym = 0x027
-let _parenleft : keysym = 0x028
-let _parenright : keysym = 0x029
-let _asterisk : keysym = 0x02a
-let _plus : keysym = 0x02b
-let _comma : keysym = 0x02c
-let _minus : keysym = 0x02d
-let _period : keysym = 0x02e
-let _slash : keysym = 0x02f
-let _0 : keysym = 0x030
-let _1 : keysym = 0x031
-let _2 : keysym = 0x032
-let _3 : keysym = 0x033
-let _4 : keysym = 0x034
-let _5 : keysym = 0x035
-let _6 : keysym = 0x036
-let _7 : keysym = 0x037
-let _8 : keysym = 0x038
-let _9 : keysym = 0x039
-let _colon : keysym = 0x03a
-let _semicolon : keysym = 0x03b
-let _less : keysym = 0x03c
-let _equal : keysym = 0x03d
-let _greater : keysym = 0x03e
-let _question : keysym = 0x03f
-let _at : keysym = 0x040
-let _A : keysym = 0x041
-let _B : keysym = 0x042
-let _C : keysym = 0x043
-let _D : keysym = 0x044
-let _E : keysym = 0x045
-let _F : keysym = 0x046
-let _G : keysym = 0x047
-let _H : keysym = 0x048
-let _I : keysym = 0x049
-let _J : keysym = 0x04a
-let _K : keysym = 0x04b
-let _L : keysym = 0x04c
-let _M : keysym = 0x04d
-let _N : keysym = 0x04e
-let _O : keysym = 0x04f
-let _P : keysym = 0x050
-let _Q : keysym = 0x051
-let _R : keysym = 0x052
-let _S : keysym = 0x053
-let _T : keysym = 0x054
-let _U : keysym = 0x055
-let _V : keysym = 0x056
-let _W : keysym = 0x057
-let _X : keysym = 0x058
-let _Y : keysym = 0x059
-let _Z : keysym = 0x05a
-let _bracketleft : keysym = 0x05b
-let _backslash : keysym = 0x05c
-let _bracketright : keysym = 0x05d
-let _asciicircum : keysym = 0x05e
-let _underscore : keysym = 0x05f
-let _grave : keysym = 0x060
-let _quoteleft : keysym = 0x060
-let _a : keysym = 0x061
-let _b : keysym = 0x062
-let _c : keysym = 0x063
-let _d : keysym = 0x064
-let _e : keysym = 0x065
-let _f : keysym = 0x066
-let _g : keysym = 0x067
-let _h : keysym = 0x068
-let _i : keysym = 0x069
-let _j : keysym = 0x06a
-let _k : keysym = 0x06b
-let _l : keysym = 0x06c
-let _m : keysym = 0x06d
-let _n : keysym = 0x06e
-let _o : keysym = 0x06f
-let _p : keysym = 0x070
-let _q : keysym = 0x071
-let _r : keysym = 0x072
-let _s : keysym = 0x073
-let _t : keysym = 0x074
-let _u : keysym = 0x075
-let _v : keysym = 0x076
-let _w : keysym = 0x077
-let _x : keysym = 0x078
-let _y : keysym = 0x079
-let _z : keysym = 0x07a
-let _braceleft : keysym = 0x07b
-let _bar : keysym = 0x07c
-let _braceright : keysym = 0x07d
-let _asciitilde : keysym = 0x07e
-let _nobreakspace : keysym = 0x0a0
-let _exclamdown : keysym = 0x0a1
-let _cent : keysym = 0x0a2
-let _sterling : keysym = 0x0a3
-let _currency : keysym = 0x0a4
-let _yen : keysym = 0x0a5
-let _brokenbar : keysym = 0x0a6
-let _section : keysym = 0x0a7
-let _diaeresis : keysym = 0x0a8
-let _copyright : keysym = 0x0a9
-let _ordfeminine : keysym = 0x0aa
-let _guillemotleft : keysym = 0x0ab
-let _notsign : keysym = 0x0ac
-let _hyphen : keysym = 0x0ad
-let _registered : keysym = 0x0ae
-let _macron : keysym = 0x0af
-let _degree : keysym = 0x0b0
-let _plusminus : keysym = 0x0b1
-let _twosuperior : keysym = 0x0b2
-let _threesuperior : keysym = 0x0b3
-let _acute : keysym = 0x0b4
-let _mu : keysym = 0x0b5
-let _paragraph : keysym = 0x0b6
-let _periodcentered : keysym = 0x0b7
-let _cedilla : keysym = 0x0b8
-let _onesuperior : keysym = 0x0b9
-let _masculine : keysym = 0x0ba
-let _guillemotright : keysym = 0x0bb
-let _onequarter : keysym = 0x0bc
-let _onehalf : keysym = 0x0bd
-let _threequarters : keysym = 0x0be
-let _questiondown : keysym = 0x0bf
-let _Agrave : keysym = 0x0c0
-let _Aacute : keysym = 0x0c1
-let _Acircumflex : keysym = 0x0c2
-let _Atilde : keysym = 0x0c3
-let _Adiaeresis : keysym = 0x0c4
-let _Aring : keysym = 0x0c5
-let _AE : keysym = 0x0c6
-let _Ccedilla : keysym = 0x0c7
-let _Egrave : keysym = 0x0c8
-let _Eacute : keysym = 0x0c9
-let _Ecircumflex : keysym = 0x0ca
-let _Ediaeresis : keysym = 0x0cb
-let _Igrave : keysym = 0x0cc
-let _Iacute : keysym = 0x0cd
-let _Icircumflex : keysym = 0x0ce
-let _Idiaeresis : keysym = 0x0cf
-let _ETH : keysym = 0x0d0
-let _Eth : keysym = 0x0d0
-let _Ntilde : keysym = 0x0d1
-let _Ograve : keysym = 0x0d2
-let _Oacute : keysym = 0x0d3
-let _Ocircumflex : keysym = 0x0d4
-let _Otilde : keysym = 0x0d5
-let _Odiaeresis : keysym = 0x0d6
-let _multiply : keysym = 0x0d7
-let _Ooblique : keysym = 0x0d8
-let _Ugrave : keysym = 0x0d9
-let _Uacute : keysym = 0x0da
-let _Ucircumflex : keysym = 0x0db
-let _Udiaeresis : keysym = 0x0dc
-let _Yacute : keysym = 0x0dd
-let _THORN : keysym = 0x0de
-let _Thorn : keysym = 0x0de
-let _ssharp : keysym = 0x0df
-let _agrave : keysym = 0x0e0
-let _aacute : keysym = 0x0e1
-let _acircumflex : keysym = 0x0e2
-let _atilde : keysym = 0x0e3
-let _adiaeresis : keysym = 0x0e4
-let _aring : keysym = 0x0e5
-let _ae : keysym = 0x0e6
-let _ccedilla : keysym = 0x0e7
-let _egrave : keysym = 0x0e8
-let _eacute : keysym = 0x0e9
-let _ecircumflex : keysym = 0x0ea
-let _ediaeresis : keysym = 0x0eb
-let _igrave : keysym = 0x0ec
-let _iacute : keysym = 0x0ed
-let _icircumflex : keysym = 0x0ee
-let _idiaeresis : keysym = 0x0ef
-let _eth : keysym = 0x0f0
-let _ntilde : keysym = 0x0f1
-let _ograve : keysym = 0x0f2
-let _oacute : keysym = 0x0f3
-let _ocircumflex : keysym = 0x0f4
-let _otilde : keysym = 0x0f5
-let _odiaeresis : keysym = 0x0f6
-let _division : keysym = 0x0f7
-let _oslash : keysym = 0x0f8
-let _ugrave : keysym = 0x0f9
-let _uacute : keysym = 0x0fa
-let _ucircumflex : keysym = 0x0fb
-let _udiaeresis : keysym = 0x0fc
-let _yacute : keysym = 0x0fd
-let _thorn : keysym = 0x0fe
-let _ydiaeresis : keysym = 0x0ff
-let _Aogonek : keysym = 0x1a1
-let _breve : keysym = 0x1a2
-let _Lstroke : keysym = 0x1a3
-let _Lcaron : keysym = 0x1a5
-let _Sacute : keysym = 0x1a6
-let _Scaron : keysym = 0x1a9
-let _Scedilla : keysym = 0x1aa
-let _Tcaron : keysym = 0x1ab
-let _Zacute : keysym = 0x1ac
-let _Zcaron : keysym = 0x1ae
-let _Zabovedot : keysym = 0x1af
-let _aogonek : keysym = 0x1b1
-let _ogonek : keysym = 0x1b2
-let _lstroke : keysym = 0x1b3
-let _lcaron : keysym = 0x1b5
-let _sacute : keysym = 0x1b6
-let _caron : keysym = 0x1b7
-let _scaron : keysym = 0x1b9
-let _scedilla : keysym = 0x1ba
-let _tcaron : keysym = 0x1bb
-let _zacute : keysym = 0x1bc
-let _doubleacute : keysym = 0x1bd
-let _zcaron : keysym = 0x1be
-let _zabovedot : keysym = 0x1bf
-let _Racute : keysym = 0x1c0
-let _Abreve : keysym = 0x1c3
-let _Lacute : keysym = 0x1c5
-let _Cacute : keysym = 0x1c6
-let _Ccaron : keysym = 0x1c8
-let _Eogonek : keysym = 0x1ca
-let _Ecaron : keysym = 0x1cc
-let _Dcaron : keysym = 0x1cf
-let _Dstroke : keysym = 0x1d0
-let _Nacute : keysym = 0x1d1
-let _Ncaron : keysym = 0x1d2
-let _Odoubleacute : keysym = 0x1d5
-let _Rcaron : keysym = 0x1d8
-let _Uring : keysym = 0x1d9
-let _Udoubleacute : keysym = 0x1db
-let _Tcedilla : keysym = 0x1de
-let _racute : keysym = 0x1e0
-let _abreve : keysym = 0x1e3
-let _lacute : keysym = 0x1e5
-let _cacute : keysym = 0x1e6
-let _ccaron : keysym = 0x1e8
-let _eogonek : keysym = 0x1ea
-let _ecaron : keysym = 0x1ec
-let _dcaron : keysym = 0x1ef
-let _dstroke : keysym = 0x1f0
-let _nacute : keysym = 0x1f1
-let _ncaron : keysym = 0x1f2
-let _odoubleacute : keysym = 0x1f5
-let _udoubleacute : keysym = 0x1fb
-let _rcaron : keysym = 0x1f8
-let _uring : keysym = 0x1f9
-let _tcedilla : keysym = 0x1fe
-let _abovedot : keysym = 0x1ff
-let _Hstroke : keysym = 0x2a1
-let _Hcircumflex : keysym = 0x2a6
-let _Iabovedot : keysym = 0x2a9
-let _Gbreve : keysym = 0x2ab
-let _Jcircumflex : keysym = 0x2ac
-let _hstroke : keysym = 0x2b1
-let _hcircumflex : keysym = 0x2b6
-let _idotless : keysym = 0x2b9
-let _gbreve : keysym = 0x2bb
-let _jcircumflex : keysym = 0x2bc
-let _Cabovedot : keysym = 0x2c5
-let _Ccircumflex : keysym = 0x2c6
-let _Gabovedot : keysym = 0x2d5
-let _Gcircumflex : keysym = 0x2d8
-let _Ubreve : keysym = 0x2dd
-let _Scircumflex : keysym = 0x2de
-let _cabovedot : keysym = 0x2e5
-let _ccircumflex : keysym = 0x2e6
-let _gabovedot : keysym = 0x2f5
-let _gcircumflex : keysym = 0x2f8
-let _ubreve : keysym = 0x2fd
-let _scircumflex : keysym = 0x2fe
-let _kra : keysym = 0x3a2
-let _kappa : keysym = 0x3a2
-let _Rcedilla : keysym = 0x3a3
-let _Itilde : keysym = 0x3a5
-let _Lcedilla : keysym = 0x3a6
-let _Emacron : keysym = 0x3aa
-let _Gcedilla : keysym = 0x3ab
-let _Tslash : keysym = 0x3ac
-let _rcedilla : keysym = 0x3b3
-let _itilde : keysym = 0x3b5
-let _lcedilla : keysym = 0x3b6
-let _emacron : keysym = 0x3ba
-let _gcedilla : keysym = 0x3bb
-let _tslash : keysym = 0x3bc
-let _ENG : keysym = 0x3bd
-let _eng : keysym = 0x3bf
-let _Amacron : keysym = 0x3c0
-let _Iogonek : keysym = 0x3c7
-let _Eabovedot : keysym = 0x3cc
-let _Imacron : keysym = 0x3cf
-let _Ncedilla : keysym = 0x3d1
-let _Omacron : keysym = 0x3d2
-let _Kcedilla : keysym = 0x3d3
-let _Uogonek : keysym = 0x3d9
-let _Utilde : keysym = 0x3dd
-let _Umacron : keysym = 0x3de
-let _amacron : keysym = 0x3e0
-let _iogonek : keysym = 0x3e7
-let _eabovedot : keysym = 0x3ec
-let _imacron : keysym = 0x3ef
-let _ncedilla : keysym = 0x3f1
-let _omacron : keysym = 0x3f2
-let _kcedilla : keysym = 0x3f3
-let _uogonek : keysym = 0x3f9
-let _utilde : keysym = 0x3fd
-let _umacron : keysym = 0x3fe
-let _overline : keysym = 0x47e
-let _kana_fullstop : keysym = 0x4a1
-let _kana_openingbracket : keysym = 0x4a2
-let _kana_closingbracket : keysym = 0x4a3
-let _kana_comma : keysym = 0x4a4
-let _kana_conjunctive : keysym = 0x4a5
-let _kana_middledot : keysym = 0x4a5
-let _kana_WO : keysym = 0x4a6
-let _kana_a : keysym = 0x4a7
-let _kana_i : keysym = 0x4a8
-let _kana_u : keysym = 0x4a9
-let _kana_e : keysym = 0x4aa
-let _kana_o : keysym = 0x4ab
-let _kana_ya : keysym = 0x4ac
-let _kana_yu : keysym = 0x4ad
-let _kana_yo : keysym = 0x4ae
-let _kana_tsu : keysym = 0x4af
-let _kana_tu : keysym = 0x4af
-let _prolongedsound : keysym = 0x4b0
-let _kana_A : keysym = 0x4b1
-let _kana_I : keysym = 0x4b2
-let _kana_U : keysym = 0x4b3
-let _kana_E : keysym = 0x4b4
-let _kana_O : keysym = 0x4b5
-let _kana_KA : keysym = 0x4b6
-let _kana_KI : keysym = 0x4b7
-let _kana_KU : keysym = 0x4b8
-let _kana_KE : keysym = 0x4b9
-let _kana_KO : keysym = 0x4ba
-let _kana_SA : keysym = 0x4bb
-let _kana_SHI : keysym = 0x4bc
-let _kana_SU : keysym = 0x4bd
-let _kana_SE : keysym = 0x4be
-let _kana_SO : keysym = 0x4bf
-let _kana_TA : keysym = 0x4c0
-let _kana_CHI : keysym = 0x4c1
-let _kana_TI : keysym = 0x4c1
-let _kana_TSU : keysym = 0x4c2
-let _kana_TU : keysym = 0x4c2
-let _kana_TE : keysym = 0x4c3
-let _kana_TO : keysym = 0x4c4
-let _kana_NA : keysym = 0x4c5
-let _kana_NI : keysym = 0x4c6
-let _kana_NU : keysym = 0x4c7
-let _kana_NE : keysym = 0x4c8
-let _kana_NO : keysym = 0x4c9
-let _kana_HA : keysym = 0x4ca
-let _kana_HI : keysym = 0x4cb
-let _kana_FU : keysym = 0x4cc
-let _kana_HU : keysym = 0x4cc
-let _kana_HE : keysym = 0x4cd
-let _kana_HO : keysym = 0x4ce
-let _kana_MA : keysym = 0x4cf
-let _kana_MI : keysym = 0x4d0
-let _kana_MU : keysym = 0x4d1
-let _kana_ME : keysym = 0x4d2
-let _kana_MO : keysym = 0x4d3
-let _kana_YA : keysym = 0x4d4
-let _kana_YU : keysym = 0x4d5
-let _kana_YO : keysym = 0x4d6
-let _kana_RA : keysym = 0x4d7
-let _kana_RI : keysym = 0x4d8
-let _kana_RU : keysym = 0x4d9
-let _kana_RE : keysym = 0x4da
-let _kana_RO : keysym = 0x4db
-let _kana_WA : keysym = 0x4dc
-let _kana_N : keysym = 0x4dd
-let _voicedsound : keysym = 0x4de
-let _semivoicedsound : keysym = 0x4df
-let _kana_switch : keysym = 0xFF7E
-let _Arabic_comma : keysym = 0x5ac
-let _Arabic_semicolon : keysym = 0x5bb
-let _Arabic_question_mark : keysym = 0x5bf
-let _Arabic_hamza : keysym = 0x5c1
-let _Arabic_maddaonalef : keysym = 0x5c2
-let _Arabic_hamzaonalef : keysym = 0x5c3
-let _Arabic_hamzaonwaw : keysym = 0x5c4
-let _Arabic_hamzaunderalef : keysym = 0x5c5
-let _Arabic_hamzaonyeh : keysym = 0x5c6
-let _Arabic_alef : keysym = 0x5c7
-let _Arabic_beh : keysym = 0x5c8
-let _Arabic_tehmarbuta : keysym = 0x5c9
-let _Arabic_teh : keysym = 0x5ca
-let _Arabic_theh : keysym = 0x5cb
-let _Arabic_jeem : keysym = 0x5cc
-let _Arabic_hah : keysym = 0x5cd
-let _Arabic_khah : keysym = 0x5ce
-let _Arabic_dal : keysym = 0x5cf
-let _Arabic_thal : keysym = 0x5d0
-let _Arabic_ra : keysym = 0x5d1
-let _Arabic_zain : keysym = 0x5d2
-let _Arabic_seen : keysym = 0x5d3
-let _Arabic_sheen : keysym = 0x5d4
-let _Arabic_sad : keysym = 0x5d5
-let _Arabic_dad : keysym = 0x5d6
-let _Arabic_tah : keysym = 0x5d7
-let _Arabic_zah : keysym = 0x5d8
-let _Arabic_ain : keysym = 0x5d9
-let _Arabic_ghain : keysym = 0x5da
-let _Arabic_tatweel : keysym = 0x5e0
-let _Arabic_feh : keysym = 0x5e1
-let _Arabic_qaf : keysym = 0x5e2
-let _Arabic_kaf : keysym = 0x5e3
-let _Arabic_lam : keysym = 0x5e4
-let _Arabic_meem : keysym = 0x5e5
-let _Arabic_noon : keysym = 0x5e6
-let _Arabic_ha : keysym = 0x5e7
-let _Arabic_heh : keysym = 0x5e7
-let _Arabic_waw : keysym = 0x5e8
-let _Arabic_alefmaksura : keysym = 0x5e9
-let _Arabic_yeh : keysym = 0x5ea
-let _Arabic_fathatan : keysym = 0x5eb
-let _Arabic_dammatan : keysym = 0x5ec
-let _Arabic_kasratan : keysym = 0x5ed
-let _Arabic_fatha : keysym = 0x5ee
-let _Arabic_damma : keysym = 0x5ef
-let _Arabic_kasra : keysym = 0x5f0
-let _Arabic_shadda : keysym = 0x5f1
-let _Arabic_sukun : keysym = 0x5f2
-let _Arabic_switch : keysym = 0xFF7E
-let _Serbian_dje : keysym = 0x6a1
-let _Macedonia_gje : keysym = 0x6a2
-let _Cyrillic_io : keysym = 0x6a3
-let _Ukrainian_ie : keysym = 0x6a4
-let _Ukranian_je : keysym = 0x6a4
-let _Macedonia_dse : keysym = 0x6a5
-let _Ukrainian_i : keysym = 0x6a6
-let _Ukranian_i : keysym = 0x6a6
-let _Ukrainian_yi : keysym = 0x6a7
-let _Ukranian_yi : keysym = 0x6a7
-let _Cyrillic_je : keysym = 0x6a8
-let _Serbian_je : keysym = 0x6a8
-let _Cyrillic_lje : keysym = 0x6a9
-let _Serbian_lje : keysym = 0x6a9
-let _Cyrillic_nje : keysym = 0x6aa
-let _Serbian_nje : keysym = 0x6aa
-let _Serbian_tshe : keysym = 0x6ab
-let _Macedonia_kje : keysym = 0x6ac
-let _Byelorussian_shortu : keysym = 0x6ae
-let _Cyrillic_dzhe : keysym = 0x6af
-let _Serbian_dze : keysym = 0x6af
-let _numerosign : keysym = 0x6b0
-let _Serbian_DJE : keysym = 0x6b1
-let _Macedonia_GJE : keysym = 0x6b2
-let _Cyrillic_IO : keysym = 0x6b3
-let _Ukrainian_IE : keysym = 0x6b4
-let _Ukranian_JE : keysym = 0x6b4
-let _Macedonia_DSE : keysym = 0x6b5
-let _Ukrainian_I : keysym = 0x6b6
-let _Ukranian_I : keysym = 0x6b6
-let _Ukrainian_YI : keysym = 0x6b7
-let _Ukranian_YI : keysym = 0x6b7
-let _Cyrillic_JE : keysym = 0x6b8
-let _Serbian_JE : keysym = 0x6b8
-let _Cyrillic_LJE : keysym = 0x6b9
-let _Serbian_LJE : keysym = 0x6b9
-let _Cyrillic_NJE : keysym = 0x6ba
-let _Serbian_NJE : keysym = 0x6ba
-let _Serbian_TSHE : keysym = 0x6bb
-let _Macedonia_KJE : keysym = 0x6bc
-let _Byelorussian_SHORTU : keysym = 0x6be
-let _Cyrillic_DZHE : keysym = 0x6bf
-let _Serbian_DZE : keysym = 0x6bf
-let _Cyrillic_yu : keysym = 0x6c0
-let _Cyrillic_a : keysym = 0x6c1
-let _Cyrillic_be : keysym = 0x6c2
-let _Cyrillic_tse : keysym = 0x6c3
-let _Cyrillic_de : keysym = 0x6c4
-let _Cyrillic_ie : keysym = 0x6c5
-let _Cyrillic_ef : keysym = 0x6c6
-let _Cyrillic_ghe : keysym = 0x6c7
-let _Cyrillic_ha : keysym = 0x6c8
-let _Cyrillic_i : keysym = 0x6c9
-let _Cyrillic_shorti : keysym = 0x6ca
-let _Cyrillic_ka : keysym = 0x6cb
-let _Cyrillic_el : keysym = 0x6cc
-let _Cyrillic_em : keysym = 0x6cd
-let _Cyrillic_en : keysym = 0x6ce
-let _Cyrillic_o : keysym = 0x6cf
-let _Cyrillic_pe : keysym = 0x6d0
-let _Cyrillic_ya : keysym = 0x6d1
-let _Cyrillic_er : keysym = 0x6d2
-let _Cyrillic_es : keysym = 0x6d3
-let _Cyrillic_te : keysym = 0x6d4
-let _Cyrillic_u : keysym = 0x6d5
-let _Cyrillic_zhe : keysym = 0x6d6
-let _Cyrillic_ve : keysym = 0x6d7
-let _Cyrillic_softsign : keysym = 0x6d8
-let _Cyrillic_yeru : keysym = 0x6d9
-let _Cyrillic_ze : keysym = 0x6da
-let _Cyrillic_sha : keysym = 0x6db
-let _Cyrillic_e : keysym = 0x6dc
-let _Cyrillic_shcha : keysym = 0x6dd
-let _Cyrillic_che : keysym = 0x6de
-let _Cyrillic_hardsign : keysym = 0x6df
-let _Cyrillic_YU : keysym = 0x6e0
-let _Cyrillic_A : keysym = 0x6e1
-let _Cyrillic_BE : keysym = 0x6e2
-let _Cyrillic_TSE : keysym = 0x6e3
-let _Cyrillic_DE : keysym = 0x6e4
-let _Cyrillic_IE : keysym = 0x6e5
-let _Cyrillic_EF : keysym = 0x6e6
-let _Cyrillic_GHE : keysym = 0x6e7
-let _Cyrillic_HA : keysym = 0x6e8
-let _Cyrillic_I : keysym = 0x6e9
-let _Cyrillic_SHORTI : keysym = 0x6ea
-let _Cyrillic_KA : keysym = 0x6eb
-let _Cyrillic_EL : keysym = 0x6ec
-let _Cyrillic_EM : keysym = 0x6ed
-let _Cyrillic_EN : keysym = 0x6ee
-let _Cyrillic_O : keysym = 0x6ef
-let _Cyrillic_PE : keysym = 0x6f0
-let _Cyrillic_YA : keysym = 0x6f1
-let _Cyrillic_ER : keysym = 0x6f2
-let _Cyrillic_ES : keysym = 0x6f3
-let _Cyrillic_TE : keysym = 0x6f4
-let _Cyrillic_U : keysym = 0x6f5
-let _Cyrillic_ZHE : keysym = 0x6f6
-let _Cyrillic_VE : keysym = 0x6f7
-let _Cyrillic_SOFTSIGN : keysym = 0x6f8
-let _Cyrillic_YERU : keysym = 0x6f9
-let _Cyrillic_ZE : keysym = 0x6fa
-let _Cyrillic_SHA : keysym = 0x6fb
-let _Cyrillic_E : keysym = 0x6fc
-let _Cyrillic_SHCHA : keysym = 0x6fd
-let _Cyrillic_CHE : keysym = 0x6fe
-let _Cyrillic_HARDSIGN : keysym = 0x6ff
-let _Greek_ALPHAaccent : keysym = 0x7a1
-let _Greek_EPSILONaccent : keysym = 0x7a2
-let _Greek_ETAaccent : keysym = 0x7a3
-let _Greek_IOTAaccent : keysym = 0x7a4
-let _Greek_IOTAdiaeresis : keysym = 0x7a5
-let _Greek_OMICRONaccent : keysym = 0x7a7
-let _Greek_UPSILONaccent : keysym = 0x7a8
-let _Greek_UPSILONdieresis : keysym = 0x7a9
-let _Greek_OMEGAaccent : keysym = 0x7ab
-let _Greek_accentdieresis : keysym = 0x7ae
-let _Greek_horizbar : keysym = 0x7af
-let _Greek_alphaaccent : keysym = 0x7b1
-let _Greek_epsilonaccent : keysym = 0x7b2
-let _Greek_etaaccent : keysym = 0x7b3
-let _Greek_iotaaccent : keysym = 0x7b4
-let _Greek_iotadieresis : keysym = 0x7b5
-let _Greek_iotaaccentdieresis : keysym = 0x7b6
-let _Greek_omicronaccent : keysym = 0x7b7
-let _Greek_upsilonaccent : keysym = 0x7b8
-let _Greek_upsilondieresis : keysym = 0x7b9
-let _Greek_upsilonaccentdieresis : keysym = 0x7ba
-let _Greek_omegaaccent : keysym = 0x7bb
-let _Greek_ALPHA : keysym = 0x7c1
-let _Greek_BETA : keysym = 0x7c2
-let _Greek_GAMMA : keysym = 0x7c3
-let _Greek_DELTA : keysym = 0x7c4
-let _Greek_EPSILON : keysym = 0x7c5
-let _Greek_ZETA : keysym = 0x7c6
-let _Greek_ETA : keysym = 0x7c7
-let _Greek_THETA : keysym = 0x7c8
-let _Greek_IOTA : keysym = 0x7c9
-let _Greek_KAPPA : keysym = 0x7ca
-let _Greek_LAMDA : keysym = 0x7cb
-let _Greek_LAMBDA : keysym = 0x7cb
-let _Greek_MU : keysym = 0x7cc
-let _Greek_NU : keysym = 0x7cd
-let _Greek_XI : keysym = 0x7ce
-let _Greek_OMICRON : keysym = 0x7cf
-let _Greek_PI : keysym = 0x7d0
-let _Greek_RHO : keysym = 0x7d1
-let _Greek_SIGMA : keysym = 0x7d2
-let _Greek_TAU : keysym = 0x7d4
-let _Greek_UPSILON : keysym = 0x7d5
-let _Greek_PHI : keysym = 0x7d6
-let _Greek_CHI : keysym = 0x7d7
-let _Greek_PSI : keysym = 0x7d8
-let _Greek_OMEGA : keysym = 0x7d9
-let _Greek_alpha : keysym = 0x7e1
-let _Greek_beta : keysym = 0x7e2
-let _Greek_gamma : keysym = 0x7e3
-let _Greek_delta : keysym = 0x7e4
-let _Greek_epsilon : keysym = 0x7e5
-let _Greek_zeta : keysym = 0x7e6
-let _Greek_eta : keysym = 0x7e7
-let _Greek_theta : keysym = 0x7e8
-let _Greek_iota : keysym = 0x7e9
-let _Greek_kappa : keysym = 0x7ea
-let _Greek_lamda : keysym = 0x7eb
-let _Greek_lambda : keysym = 0x7eb
-let _Greek_mu : keysym = 0x7ec
-let _Greek_nu : keysym = 0x7ed
-let _Greek_xi : keysym = 0x7ee
-let _Greek_omicron : keysym = 0x7ef
-let _Greek_pi : keysym = 0x7f0
-let _Greek_rho : keysym = 0x7f1
-let _Greek_sigma : keysym = 0x7f2
-let _Greek_finalsmallsigma : keysym = 0x7f3
-let _Greek_tau : keysym = 0x7f4
-let _Greek_upsilon : keysym = 0x7f5
-let _Greek_phi : keysym = 0x7f6
-let _Greek_chi : keysym = 0x7f7
-let _Greek_psi : keysym = 0x7f8
-let _Greek_omega : keysym = 0x7f9
-let _Greek_switch : keysym = 0xFF7E
-let _leftradical : keysym = 0x8a1
-let _topleftradical : keysym = 0x8a2
-let _horizconnector : keysym = 0x8a3
-let _topintegral : keysym = 0x8a4
-let _botintegral : keysym = 0x8a5
-let _vertconnector : keysym = 0x8a6
-let _topleftsqbracket : keysym = 0x8a7
-let _botleftsqbracket : keysym = 0x8a8
-let _toprightsqbracket : keysym = 0x8a9
-let _botrightsqbracket : keysym = 0x8aa
-let _topleftparens : keysym = 0x8ab
-let _botleftparens : keysym = 0x8ac
-let _toprightparens : keysym = 0x8ad
-let _botrightparens : keysym = 0x8ae
-let _leftmiddlecurlybrace : keysym = 0x8af
-let _rightmiddlecurlybrace : keysym = 0x8b0
-let _topleftsummation : keysym = 0x8b1
-let _botleftsummation : keysym = 0x8b2
-let _topvertsummationconnector : keysym = 0x8b3
-let _botvertsummationconnector : keysym = 0x8b4
-let _toprightsummation : keysym = 0x8b5
-let _botrightsummation : keysym = 0x8b6
-let _rightmiddlesummation : keysym = 0x8b7
-let _lessthanequal : keysym = 0x8bc
-let _notequal : keysym = 0x8bd
-let _greaterthanequal : keysym = 0x8be
-let _integral : keysym = 0x8bf
-let _therefore : keysym = 0x8c0
-let _variation : keysym = 0x8c1
-let _infinity : keysym = 0x8c2
-let _nabla : keysym = 0x8c5
-let _approximate : keysym = 0x8c8
-let _similarequal : keysym = 0x8c9
-let _ifonlyif : keysym = 0x8cd
-let _implies : keysym = 0x8ce
-let _identical : keysym = 0x8cf
-let _radical : keysym = 0x8d6
-let _includedin : keysym = 0x8da
-let _includes : keysym = 0x8db
-let _intersection : keysym = 0x8dc
-let _union : keysym = 0x8dd
-let _logicaland : keysym = 0x8de
-let _logicalor : keysym = 0x8df
-let _partialderivative : keysym = 0x8ef
-let _function : keysym = 0x8f6
-let _leftarrow : keysym = 0x8fb
-let _uparrow : keysym = 0x8fc
-let _rightarrow : keysym = 0x8fd
-let _downarrow : keysym = 0x8fe
-let _blank : keysym = 0x9df
-let _soliddiamond : keysym = 0x9e0
-let _checkerboard : keysym = 0x9e1
-let _ht : keysym = 0x9e2
-let _ff : keysym = 0x9e3
-let _cr : keysym = 0x9e4
-let _lf : keysym = 0x9e5
-let _nl : keysym = 0x9e8
-let _vt : keysym = 0x9e9
-let _lowrightcorner : keysym = 0x9ea
-let _uprightcorner : keysym = 0x9eb
-let _upleftcorner : keysym = 0x9ec
-let _lowleftcorner : keysym = 0x9ed
-let _crossinglines : keysym = 0x9ee
-let _horizlinescan1 : keysym = 0x9ef
-let _horizlinescan3 : keysym = 0x9f0
-let _horizlinescan5 : keysym = 0x9f1
-let _horizlinescan7 : keysym = 0x9f2
-let _horizlinescan9 : keysym = 0x9f3
-let _leftt : keysym = 0x9f4
-let _rightt : keysym = 0x9f5
-let _bott : keysym = 0x9f6
-let _topt : keysym = 0x9f7
-let _vertbar : keysym = 0x9f8
-let _emspace : keysym = 0xaa1
-let _enspace : keysym = 0xaa2
-let _em3space : keysym = 0xaa3
-let _em4space : keysym = 0xaa4
-let _digitspace : keysym = 0xaa5
-let _punctspace : keysym = 0xaa6
-let _thinspace : keysym = 0xaa7
-let _hairspace : keysym = 0xaa8
-let _emdash : keysym = 0xaa9
-let _endash : keysym = 0xaaa
-let _signifblank : keysym = 0xaac
-let _ellipsis : keysym = 0xaae
-let _doubbaselinedot : keysym = 0xaaf
-let _onethird : keysym = 0xab0
-let _twothirds : keysym = 0xab1
-let _onefifth : keysym = 0xab2
-let _twofifths : keysym = 0xab3
-let _threefifths : keysym = 0xab4
-let _fourfifths : keysym = 0xab5
-let _onesixth : keysym = 0xab6
-let _fivesixths : keysym = 0xab7
-let _careof : keysym = 0xab8
-let _figdash : keysym = 0xabb
-let _leftanglebracket : keysym = 0xabc
-let _decimalpoint : keysym = 0xabd
-let _rightanglebracket : keysym = 0xabe
-let _marker : keysym = 0xabf
-let _oneeighth : keysym = 0xac3
-let _threeeighths : keysym = 0xac4
-let _fiveeighths : keysym = 0xac5
-let _seveneighths : keysym = 0xac6
-let _trademark : keysym = 0xac9
-let _signaturemark : keysym = 0xaca
-let _trademarkincircle : keysym = 0xacb
-let _leftopentriangle : keysym = 0xacc
-let _rightopentriangle : keysym = 0xacd
-let _emopencircle : keysym = 0xace
-let _emopenrectangle : keysym = 0xacf
-let _leftsinglequotemark : keysym = 0xad0
-let _rightsinglequotemark : keysym = 0xad1
-let _leftdoublequotemark : keysym = 0xad2
-let _rightdoublequotemark : keysym = 0xad3
-let _prescription : keysym = 0xad4
-let _minutes : keysym = 0xad6
-let _seconds : keysym = 0xad7
-let _latincross : keysym = 0xad9
-let _hexagram : keysym = 0xada
-let _filledrectbullet : keysym = 0xadb
-let _filledlefttribullet : keysym = 0xadc
-let _filledrighttribullet : keysym = 0xadd
-let _emfilledcircle : keysym = 0xade
-let _emfilledrect : keysym = 0xadf
-let _enopencircbullet : keysym = 0xae0
-let _enopensquarebullet : keysym = 0xae1
-let _openrectbullet : keysym = 0xae2
-let _opentribulletup : keysym = 0xae3
-let _opentribulletdown : keysym = 0xae4
-let _openstar : keysym = 0xae5
-let _enfilledcircbullet : keysym = 0xae6
-let _enfilledsqbullet : keysym = 0xae7
-let _filledtribulletup : keysym = 0xae8
-let _filledtribulletdown : keysym = 0xae9
-let _leftpointer : keysym = 0xaea
-let _rightpointer : keysym = 0xaeb
-let _club : keysym = 0xaec
-let _diamond : keysym = 0xaed
-let _heart : keysym = 0xaee
-let _maltesecross : keysym = 0xaf0
-let _dagger : keysym = 0xaf1
-let _doubledagger : keysym = 0xaf2
-let _checkmark : keysym = 0xaf3
-let _ballotcross : keysym = 0xaf4
-let _musicalsharp : keysym = 0xaf5
-let _musicalflat : keysym = 0xaf6
-let _malesymbol : keysym = 0xaf7
-let _femalesymbol : keysym = 0xaf8
-let _telephone : keysym = 0xaf9
-let _telephonerecorder : keysym = 0xafa
-let _phonographcopyright : keysym = 0xafb
-let _caret : keysym = 0xafc
-let _singlelowquotemark : keysym = 0xafd
-let _doublelowquotemark : keysym = 0xafe
-let _cursor : keysym = 0xaff
-let _leftcaret : keysym = 0xba3
-let _rightcaret : keysym = 0xba6
-let _downcaret : keysym = 0xba8
-let _upcaret : keysym = 0xba9
-let _overbar : keysym = 0xbc0
-let _downtack : keysym = 0xbc2
-let _upshoe : keysym = 0xbc3
-let _downstile : keysym = 0xbc4
-let _underbar : keysym = 0xbc6
-let _jot : keysym = 0xbca
-let _quad : keysym = 0xbcc
-let _uptack : keysym = 0xbce
-let _circle : keysym = 0xbcf
-let _upstile : keysym = 0xbd3
-let _downshoe : keysym = 0xbd6
-let _rightshoe : keysym = 0xbd8
-let _leftshoe : keysym = 0xbda
-let _lefttack : keysym = 0xbdc
-let _righttack : keysym = 0xbfc
-let _hebrew_doublelowline : keysym = 0xcdf
-let _hebrew_aleph : keysym = 0xce0
-let _hebrew_bet : keysym = 0xce1
-let _hebrew_beth : keysym = 0xce1
-let _hebrew_gimel : keysym = 0xce2
-let _hebrew_gimmel : keysym = 0xce2
-let _hebrew_dalet : keysym = 0xce3
-let _hebrew_daleth : keysym = 0xce3
-let _hebrew_he : keysym = 0xce4
-let _hebrew_waw : keysym = 0xce5
-let _hebrew_zain : keysym = 0xce6
-let _hebrew_zayin : keysym = 0xce6
-let _hebrew_chet : keysym = 0xce7
-let _hebrew_het : keysym = 0xce7
-let _hebrew_tet : keysym = 0xce8
-let _hebrew_teth : keysym = 0xce8
-let _hebrew_yod : keysym = 0xce9
-let _hebrew_finalkaph : keysym = 0xcea
-let _hebrew_kaph : keysym = 0xceb
-let _hebrew_lamed : keysym = 0xcec
-let _hebrew_finalmem : keysym = 0xced
-let _hebrew_mem : keysym = 0xcee
-let _hebrew_finalnun : keysym = 0xcef
-let _hebrew_nun : keysym = 0xcf0
-let _hebrew_samech : keysym = 0xcf1
-let _hebrew_samekh : keysym = 0xcf1
-let _hebrew_ayin : keysym = 0xcf2
-let _hebrew_finalpe : keysym = 0xcf3
-let _hebrew_pe : keysym = 0xcf4
-let _hebrew_finalzade : keysym = 0xcf5
-let _hebrew_finalzadi : keysym = 0xcf5
-let _hebrew_zade : keysym = 0xcf6
-let _hebrew_zadi : keysym = 0xcf6
-let _hebrew_qoph : keysym = 0xcf7
-let _hebrew_kuf : keysym = 0xcf7
-let _hebrew_resh : keysym = 0xcf8
-let _hebrew_shin : keysym = 0xcf9
-let _hebrew_taw : keysym = 0xcfa
-let _hebrew_taf : keysym = 0xcfa
-let _Hebrew_switch : keysym = 0xFF7E
-let _Thai_kokai : keysym = 0xda1
-let _Thai_khokhai : keysym = 0xda2
-let _Thai_khokhuat : keysym = 0xda3
-let _Thai_khokhwai : keysym = 0xda4
-let _Thai_khokhon : keysym = 0xda5
-let _Thai_khorakhang : keysym = 0xda6
-let _Thai_ngongu : keysym = 0xda7
-let _Thai_chochan : keysym = 0xda8
-let _Thai_choching : keysym = 0xda9
-let _Thai_chochang : keysym = 0xdaa
-let _Thai_soso : keysym = 0xdab
-let _Thai_chochoe : keysym = 0xdac
-let _Thai_yoying : keysym = 0xdad
-let _Thai_dochada : keysym = 0xdae
-let _Thai_topatak : keysym = 0xdaf
-let _Thai_thothan : keysym = 0xdb0
-let _Thai_thonangmontho : keysym = 0xdb1
-let _Thai_thophuthao : keysym = 0xdb2
-let _Thai_nonen : keysym = 0xdb3
-let _Thai_dodek : keysym = 0xdb4
-let _Thai_totao : keysym = 0xdb5
-let _Thai_thothung : keysym = 0xdb6
-let _Thai_thothahan : keysym = 0xdb7
-let _Thai_thothong : keysym = 0xdb8
-let _Thai_nonu : keysym = 0xdb9
-let _Thai_bobaimai : keysym = 0xdba
-let _Thai_popla : keysym = 0xdbb
-let _Thai_phophung : keysym = 0xdbc
-let _Thai_fofa : keysym = 0xdbd
-let _Thai_phophan : keysym = 0xdbe
-let _Thai_fofan : keysym = 0xdbf
-let _Thai_phosamphao : keysym = 0xdc0
-let _Thai_moma : keysym = 0xdc1
-let _Thai_yoyak : keysym = 0xdc2
-let _Thai_rorua : keysym = 0xdc3
-let _Thai_ru : keysym = 0xdc4
-let _Thai_loling : keysym = 0xdc5
-let _Thai_lu : keysym = 0xdc6
-let _Thai_wowaen : keysym = 0xdc7
-let _Thai_sosala : keysym = 0xdc8
-let _Thai_sorusi : keysym = 0xdc9
-let _Thai_sosua : keysym = 0xdca
-let _Thai_hohip : keysym = 0xdcb
-let _Thai_lochula : keysym = 0xdcc
-let _Thai_oang : keysym = 0xdcd
-let _Thai_honokhuk : keysym = 0xdce
-let _Thai_paiyannoi : keysym = 0xdcf
-let _Thai_saraa : keysym = 0xdd0
-let _Thai_maihanakat : keysym = 0xdd1
-let _Thai_saraaa : keysym = 0xdd2
-let _Thai_saraam : keysym = 0xdd3
-let _Thai_sarai : keysym = 0xdd4
-let _Thai_saraii : keysym = 0xdd5
-let _Thai_saraue : keysym = 0xdd6
-let _Thai_sarauee : keysym = 0xdd7
-let _Thai_sarau : keysym = 0xdd8
-let _Thai_sarauu : keysym = 0xdd9
-let _Thai_phinthu : keysym = 0xdda
-let _Thai_maihanakat_maitho : keysym = 0xdde
-let _Thai_baht : keysym = 0xddf
-let _Thai_sarae : keysym = 0xde0
-let _Thai_saraae : keysym = 0xde1
-let _Thai_sarao : keysym = 0xde2
-let _Thai_saraaimaimuan : keysym = 0xde3
-let _Thai_saraaimaimalai : keysym = 0xde4
-let _Thai_lakkhangyao : keysym = 0xde5
-let _Thai_maiyamok : keysym = 0xde6
-let _Thai_maitaikhu : keysym = 0xde7
-let _Thai_maiek : keysym = 0xde8
-let _Thai_maitho : keysym = 0xde9
-let _Thai_maitri : keysym = 0xdea
-let _Thai_maichattawa : keysym = 0xdeb
-let _Thai_thanthakhat : keysym = 0xdec
-let _Thai_nikhahit : keysym = 0xded
-let _Thai_leksun : keysym = 0xdf0
-let _Thai_leknung : keysym = 0xdf1
-let _Thai_leksong : keysym = 0xdf2
-let _Thai_leksam : keysym = 0xdf3
-let _Thai_leksi : keysym = 0xdf4
-let _Thai_lekha : keysym = 0xdf5
-let _Thai_lekhok : keysym = 0xdf6
-let _Thai_lekchet : keysym = 0xdf7
-let _Thai_lekpaet : keysym = 0xdf8
-let _Thai_lekkao : keysym = 0xdf9
-let _Hangul : keysym = 0xff31
-let _Hangul_Start : keysym = 0xff32
-let _Hangul_End : keysym = 0xff33
-let _Hangul_Hanja : keysym = 0xff34
-let _Hangul_Jamo : keysym = 0xff35
-let _Hangul_Romaja : keysym = 0xff36
-let _Hangul_Codeinput : keysym = 0xff37
-let _Hangul_Jeonja : keysym = 0xff38
-let _Hangul_Banja : keysym = 0xff39
-let _Hangul_PreHanja : keysym = 0xff3a
-let _Hangul_PostHanja : keysym = 0xff3b
-let _Hangul_SingleCandidate : keysym = 0xff3c
-let _Hangul_MultipleCandidate : keysym = 0xff3d
-let _Hangul_PreviousCandidate : keysym = 0xff3e
-let _Hangul_Special : keysym = 0xff3f
-let _Hangul_switch : keysym = 0xFF7E
-let _Hangul_Kiyeog : keysym = 0xea1
-let _Hangul_SsangKiyeog : keysym = 0xea2
-let _Hangul_KiyeogSios : keysym = 0xea3
-let _Hangul_Nieun : keysym = 0xea4
-let _Hangul_NieunJieuj : keysym = 0xea5
-let _Hangul_NieunHieuh : keysym = 0xea6
-let _Hangul_Dikeud : keysym = 0xea7
-let _Hangul_SsangDikeud : keysym = 0xea8
-let _Hangul_Rieul : keysym = 0xea9
-let _Hangul_RieulKiyeog : keysym = 0xeaa
-let _Hangul_RieulMieum : keysym = 0xeab
-let _Hangul_RieulPieub : keysym = 0xeac
-let _Hangul_RieulSios : keysym = 0xead
-let _Hangul_RieulTieut : keysym = 0xeae
-let _Hangul_RieulPhieuf : keysym = 0xeaf
-let _Hangul_RieulHieuh : keysym = 0xeb0
-let _Hangul_Mieum : keysym = 0xeb1
-let _Hangul_Pieub : keysym = 0xeb2
-let _Hangul_SsangPieub : keysym = 0xeb3
-let _Hangul_PieubSios : keysym = 0xeb4
-let _Hangul_Sios : keysym = 0xeb5
-let _Hangul_SsangSios : keysym = 0xeb6
-let _Hangul_Ieung : keysym = 0xeb7
-let _Hangul_Jieuj : keysym = 0xeb8
-let _Hangul_SsangJieuj : keysym = 0xeb9
-let _Hangul_Cieuc : keysym = 0xeba
-let _Hangul_Khieuq : keysym = 0xebb
-let _Hangul_Tieut : keysym = 0xebc
-let _Hangul_Phieuf : keysym = 0xebd
-let _Hangul_Hieuh : keysym = 0xebe
-let _Hangul_A : keysym = 0xebf
-let _Hangul_AE : keysym = 0xec0
-let _Hangul_YA : keysym = 0xec1
-let _Hangul_YAE : keysym = 0xec2
-let _Hangul_EO : keysym = 0xec3
-let _Hangul_E : keysym = 0xec4
-let _Hangul_YEO : keysym = 0xec5
-let _Hangul_YE : keysym = 0xec6
-let _Hangul_O : keysym = 0xec7
-let _Hangul_WA : keysym = 0xec8
-let _Hangul_WAE : keysym = 0xec9
-let _Hangul_OE : keysym = 0xeca
-let _Hangul_YO : keysym = 0xecb
-let _Hangul_U : keysym = 0xecc
-let _Hangul_WEO : keysym = 0xecd
-let _Hangul_WE : keysym = 0xece
-let _Hangul_WI : keysym = 0xecf
-let _Hangul_YU : keysym = 0xed0
-let _Hangul_EU : keysym = 0xed1
-let _Hangul_YI : keysym = 0xed2
-let _Hangul_I : keysym = 0xed3
-let _Hangul_J_Kiyeog : keysym = 0xed4
-let _Hangul_J_SsangKiyeog : keysym = 0xed5
-let _Hangul_J_KiyeogSios : keysym = 0xed6
-let _Hangul_J_Nieun : keysym = 0xed7
-let _Hangul_J_NieunJieuj : keysym = 0xed8
-let _Hangul_J_NieunHieuh : keysym = 0xed9
-let _Hangul_J_Dikeud : keysym = 0xeda
-let _Hangul_J_Rieul : keysym = 0xedb
-let _Hangul_J_RieulKiyeog : keysym = 0xedc
-let _Hangul_J_RieulMieum : keysym = 0xedd
-let _Hangul_J_RieulPieub : keysym = 0xede
-let _Hangul_J_RieulSios : keysym = 0xedf
-let _Hangul_J_RieulTieut : keysym = 0xee0
-let _Hangul_J_RieulPhieuf : keysym = 0xee1
-let _Hangul_J_RieulHieuh : keysym = 0xee2
-let _Hangul_J_Mieum : keysym = 0xee3
-let _Hangul_J_Pieub : keysym = 0xee4
-let _Hangul_J_PieubSios : keysym = 0xee5
-let _Hangul_J_Sios : keysym = 0xee6
-let _Hangul_J_SsangSios : keysym = 0xee7
-let _Hangul_J_Ieung : keysym = 0xee8
-let _Hangul_J_Jieuj : keysym = 0xee9
-let _Hangul_J_Cieuc : keysym = 0xeea
-let _Hangul_J_Khieuq : keysym = 0xeeb
-let _Hangul_J_Tieut : keysym = 0xeec
-let _Hangul_J_Phieuf : keysym = 0xeed
-let _Hangul_J_Hieuh : keysym = 0xeee
-let _Hangul_RieulYeorinHieuh : keysym = 0xeef
-let _Hangul_SunkyeongeumMieum : keysym = 0xef0
-let _Hangul_SunkyeongeumPieub : keysym = 0xef1
-let _Hangul_PanSios : keysym = 0xef2
-let _Hangul_KkogjiDalrinIeung : keysym = 0xef3
-let _Hangul_SunkyeongeumPhieuf : keysym = 0xef4
-let _Hangul_YeorinHieuh : keysym = 0xef5
-let _Hangul_AraeA : keysym = 0xef6
-let _Hangul_AraeAE : keysym = 0xef7
-let _Hangul_J_PanSios : keysym = 0xef8
-let _Hangul_J_KkogjiDalrinIeung : keysym = 0xef9
-let _Hangul_J_YeorinHieuh : keysym = 0xefa
-let _Korean_Won : keysym = 0xeff
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdk_tags.var b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gdk_tags.var
deleted file mode 100644 (file)
index a443fc0..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-(* $Id$ *)
-
-exception ml_raise_gdk
-
-type gdkEventType = "GDK_"
-  [ `NOTHING | `DELETE | `DESTROY | `EXPOSE | `MOTION_NOTIFY | `BUTTON_PRESS
-  | `TWO_BUTTON_PRESS "GDK_2BUTTON_PRESS"
-  | `THREE_BUTTON_PRESS "GDK_3BUTTON_PRESS"
-  | `BUTTON_RELEASE | `KEY_PRESS
-  | `KEY_RELEASE | `ENTER_NOTIFY | `LEAVE_NOTIFY | `FOCUS_CHANGE
-  | `CONFIGURE | `MAP | `UNMAP | `PROPERTY_NOTIFY | `SELECTION_CLEAR
-  | `SELECTION_REQUEST | `SELECTION_NOTIFY | `PROXIMITY_IN
-  | `PROXIMITY_OUT
-  | `DRAG_ENTER | `DRAG_LEAVE | `DRAG_MOTION | `DRAG_STATUS
-  | `DROP_START | `DROP_FINISHED | `CLIENT_EVENT | `VISIBILITY_NOTIFY
-  | `NO_EXPOSE ]
-
-type event_mask = "GDK_"
-  [ `EXPOSURE
-  | `POINTER_MOTION | `POINTER_MOTION_HINT
-  | `BUTTON_MOTION | `BUTTON1_MOTION | `BUTTON2_MOTION | `BUTTON3_MOTION
-  | `BUTTON_PRESS | `BUTTON_RELEASE
-  | `KEY_PRESS | `KEY_RELEASE
-  | `ENTER_NOTIFY | `LEAVE_NOTIFY | `FOCUS_CHANGE
-  | `STRUCTURE | `PROPERTY_CHANGE | `VISIBILITY_NOTIFY
-  | `PROXIMITY_IN | `PROXIMITY_OUT | `SUBSTRUCTURE
-  | `ALL_EVENTS ] "_MASK"
-
-type public extension_events = "GDK_EXTENSION_EVENTS_"
-  [ `NONE | `ALL | `CURSOR ]
-
-type gdkVisibilityState = "GDK_VISIBILITY_"
-  [ `UNOBSCURED | `PARTIAL | `FULLY_OBSCURED ]
-
-type gdkInputSource = "GDK_SOURCE_"
-  [ `MOUSE | `PEN | `ERASER | `CURSOR ]
-
-type gdkCrossingMode = "GDK_CROSSING_"
-  [ `NORMAL | `GRAB | `UNGRAB ]
-
-type gdkNotifyType = "GDK_NOTIFY_"
-  [ `ANCESTOR | `VIRTUAL | `INFERIOR | `NONLINEAR | `NONLINEAR_VIRTUAL
-  | `UNKNOWN ] 
-
-type gdkFillRule = "GDK_"
-  [ `EVEN_ODD_RULE | `WINDING_RULE ]
-
-type gdkOverlapType = "GDK_OVERLAP_RECTANGLE_"
-  [ `IN | `OUT | `PART ]
-
-type gdkFunction = "GDK_"
-  [ `COPY | `INVERT | `XOR ]
-
-type gdkFill = "GDK_"
-  [ `SOLID | `TILED | `STIPPLED | `OPAQUE_STIPPLED ]
-
-type gdkSubwindowMode = "GDK_"
-  [ `CLIP_BY_CHILDREN | `INCLUDE_INFERIORS ]
-
-type gdkLineStyle = "GDK_LINE_"
-  [ `SOLID | `ON_OFF_DASH | `DOUBLE_DASH ]
-
-type gdkCapStyle = "GDK_CAP_"
-  [ `NOT_LAST | `BUTT | `ROUND | `PROJECTING ]
-
-type gdkJoinStyle = "GDK_JOIN_"
-  [ `MITER | `ROUND | `BEVEL ]
-
-type gdkModifier = "GDK_"
-  [ `SHIFT | `LOCK | `CONTROL | `MOD1 | `MOD2 | `MOD3 | `MOD4 | `MOD5
-  | `BUTTON1 | `BUTTON2 | `BUTTON3 | `BUTTON4 | `BUTTON5 ] "_MASK"
-
-type gdkImageType = "GDK_IMAGE_"
-  [ `NORMAL | `SHARED | `FASTEST ]
-
-type gdkVisualType = "GDK_VISUAL_"
-  [ `STATIC_GRAY | `GRAYSCALE | `STATIC_COLOR | `PSEUDO_COLOR
-  | `TRUE_COLOR | `DIRECT_COLOR ]
-
-type gdkFontType = "GDK_FONT_"
-  [ `FONT | `FONTSET ]
-
-type gdkDragAction = "GDK_ACTION_"
-  [ `DEFAULT | `COPY | `MOVE | `LINK | `PRIVATE | `ASK ]
-
-type gdkCursorType = "GDK_" [
-  | `NUM_GLYPHS
-  | `X_CURSOR
-  | `ARROW
-  | `BASED_ARROW_DOWN
-  | `BASED_ARROW_UP
-  | `BOAT
-  | `BOGOSITY
-  | `BOTTOM_LEFT_CORNER
-  | `BOTTOM_RIGHT_CORNER
-  | `BOTTOM_SIDE
-  | `BOTTOM_TEE
-  | `BOX_SPIRAL
-  | `CENTER_PTR
-  | `CIRCLE
-  | `CLOCK
-  | `COFFEE_MUG
-  | `CROSS
-  | `CROSS_REVERSE
-  | `CROSSHAIR
-  | `DIAMOND_CROSS
-  | `DOT
-  | `DOTBOX
-  | `DOUBLE_ARROW
-  | `DRAFT_LARGE
-  | `DRAFT_SMALL
-  | `DRAPED_BOX
-  | `EXCHANGE
-  | `FLEUR
-  | `GOBBLER
-  | `GUMBY
-  | `HAND1
-  | `HAND2
-  | `HEART
-  | `ICON
-  | `IRON_CROSS
-  | `LEFT_PTR
-  | `LEFT_SIDE
-  | `LEFT_TEE
-  | `LEFTBUTTON
-  | `LL_ANGLE
-  | `LR_ANGLE
-  | `MAN
-  | `MIDDLEBUTTON
-  | `MOUSE
-  | `PENCIL
-  | `PIRATE
-  | `PLUS
-  | `QUESTION_ARROW
-  | `RIGHT_PTR
-  | `RIGHT_SIDE
-  | `RIGHT_TEE
-  | `RIGHTBUTTON
-  | `RTL_LOGO
-  | `SAILBOAT
-  | `SB_DOWN_ARROW
-  | `SB_H_DOUBLE_ARROW
-  | `SB_LEFT_ARROW
-  | `SB_RIGHT_ARROW
-  | `SB_UP_ARROW
-  | `SB_V_DOUBLE_ARROW
-  | `SHUTTLE
-  | `SIZING
-  | `SPIDER
-  | `SPRAYCAN
-  | `STAR
-  | `TARGET
-  | `TCROSS
-  | `TOP_LEFT_ARROW
-  | `TOP_LEFT_CORNER
-  | `TOP_RIGHT_CORNER
-  | `TOP_SIDE
-  | `TOP_TEE
-  | `TREK
-  | `UL_ANGLE
-  | `UMBRELLA
-  | `UR_ANGLE
-  | `WATCH
-  | `XTERM
-  ]
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/glGtk.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/glGtk.ml
deleted file mode 100644 (file)
index c7020a4..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-
-type visual_options = [
-  | `USE_GL
-  | `BUFFER_SIZE of int
-  | `LEVEL of int
-  | `RGBA
-  | `DOUBLEBUFFER
-  | `STEREO
-  | `AUX_BUFFERS of int
-  | `RED_SIZE of int
-  | `GREEN_SIZE of int
-  | `BLUE_SIZE of int
-  | `ALPHA_SIZE of int
-  | `DEPTH_SIZE of int
-  | `STENCIL_SIZE of int
-  | `ACCUM_GREEN_SIZE of int
-  | `ACCUM_ALPHA_SIZE of int
-]
-
-type gl_area = [`widget|`drawing|`glarea]
-
-module Raw = struct
-  external create :
-    visual_options list -> share:[>`glarea] optobj -> gl_area obj
-    = "ml_gtk_gl_area_new"
-
-  external swap_buffers : [>`glarea] obj -> unit
-    = "ml_gtk_gl_area_swapbuffers"
-
-  external make_current : [>`glarea] obj -> bool
-    = "ml_gtk_gl_area_make_current"
-end
-
-class area_signals obj =
-object (connect)
-  inherit GObj.widget_signals obj
-  method display ~callback =
-    (new GObj.event_signals ~after obj)#expose ~callback:
-      begin fun ev ->
-       if GdkEvent.Expose.count ev = 0 then
-         if Raw.make_current obj then callback ()
-         else prerr_endline "GlGtk-WARNING **: could not make current";
-       true
-      end
-  method reshape ~callback =
-    (new GObj.event_signals ~after obj)#configure ~callback:
-      begin fun ev ->
-       if Raw.make_current obj then begin
-         callback ~width:(GdkEvent.Configure.width ev)
-           ~height:(GdkEvent.Configure.height ev)
-       end
-       else prerr_endline "GlGtk-WARNING **: could not make current";
-       true
-      end
-  method realize ~callback =
-    let connect = new GObj.misc_signals ~after (GtkBase.Widget.coerce obj) in
-    connect#realize ~callback:
-      begin fun ev ->
-       if Raw.make_current obj then callback ()
-       else prerr_endline "GlGtk-WARNING **: could not make current"
-      end
-end
-
-class area obj = object (self)
-  inherit GObj.widget (obj : gl_area obj)
-  method as_area = obj
-  method event = new GObj.event_ops obj
-  method connect = new area_signals obj
-  method set_size = GtkMisc.DrawingArea.size obj
-  method swap_buffers () = Raw.swap_buffers obj
-  method make_current () =
-    if not (Raw.make_current obj) then
-      raise (Gl.GLerror "make_current")
-end
-
-let area options ?share ?(width=0) ?(height=0) ?packing ?show () =
-  let share =
-    match share with Some (x : area) -> Some x#as_area | None -> None in
-  let w = Raw.create options ~share:(Gpointer.optboxed share) in
-  if width <> 0 || height <> 0 then GtkMisc.DrawingArea.size w ~width ~height;
-  GtkBase.Widget.add_events w [`EXPOSURE];
-  GObj.pack_return (new area w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/glGtk.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/glGtk.mli
deleted file mode 100644 (file)
index 599f24a..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-
-type visual_options = [
-    `USE_GL
-  | `BUFFER_SIZE of int
-  | `LEVEL of int
-  | `RGBA
-  | `DOUBLEBUFFER
-  | `STEREO
-  | `AUX_BUFFERS of int
-  | `RED_SIZE of int
-  | `GREEN_SIZE of int
-  | `BLUE_SIZE of int
-  | `ALPHA_SIZE of int
-  | `DEPTH_SIZE of int
-  | `STENCIL_SIZE of int
-  | `ACCUM_GREEN_SIZE of int
-  | `ACCUM_ALPHA_SIZE of int
-]
-type gl_area = [`widget|`drawing|`glarea]
-
-module Raw :
-  sig
-    external create :
-      visual_options list -> share:[>`glarea] optobj -> gl_area obj
-      = "ml_gtk_gl_area_new"
-    external swap_buffers : [>`glarea] obj -> unit
-      = "ml_gtk_gl_area_swapbuffers"
-    external make_current : [>`glarea] obj -> bool
-      = "ml_gtk_gl_area_make_current"
-  end
-
-class area_signals : 'a obj ->
-  object
-    inherit widget_signals
-    constraint 'a = [>`glarea|`widget]
-    val obj : 'a obj
-    method display : callback:(unit -> unit) -> GtkSignal.id
-    method realize : callback:(unit -> unit) -> GtkSignal.id
-    method reshape :
-      callback:(width:int -> height:int -> unit) -> GtkSignal.id
-  end
-
-class area : gl_area obj ->
-  object
-    inherit widget
-    val obj : gl_area obj
-    method event : event_ops
-    method as_area : gl_area obj
-    method connect : area_signals
-    method make_current : unit -> unit
-    method set_size : width:int -> height:int -> unit
-    method swap_buffers : unit -> unit
-  end
-
-val area :
-  visual_options list ->
-  ?share:area ->
-  ?width:int ->
-  ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> area
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/glib.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/glib.ml
deleted file mode 100644 (file)
index 2fd0140..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-(* $Id$ *)
-
-type warning_func = string -> unit
-
-external set_warning_handler : (string -> unit) -> warning_func
-    = "ml_g_set_warning_handler"
-
-type print_func = string -> unit
-
-external set_print_handler : (string -> unit) -> print_func
-    = "ml_g_set_print_handler"
-
-module Main = struct
-  type t
-  external create : bool -> t = "ml_g_main_new"
-  external iteration : bool -> bool = "ml_g_main_iteration"
-  external pending : unit -> bool = "ml_g_main_pending"
-  external is_running : t -> bool = "ml_g_main_is_running"
-  external quit : t -> unit = "ml_g_main_quit"
-  external destroy : t -> unit = "ml_g_main_destroy"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gpointer.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gpointer.ml
deleted file mode 100644 (file)
index 7d28a1f..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-(* $Id$ *)
-
-(* marked pointers *)
-type 'a optaddr
-
-let optaddr : 'a option -> 'a optaddr =
-  function
-      None -> Obj.magic 0
-    | Some x -> Obj.magic x
-
-(* naked pointers *)
-type optstring
-
-external get_null : unit -> optstring = "ml_get_null"
-let raw_null = get_null ()
-
-let optstring : string option -> optstring =
-  function
-      None -> raw_null
-    | Some x -> Obj.magic x
-
-(* boxed pointers *)
-type boxed
-let boxed_null : boxed = Obj.magic (0, raw_null)
-
-type 'a optboxed
-
-let optboxed : 'a option -> 'a optboxed =
-  function
-      None -> Obj.magic boxed_null
-    | Some obj -> Obj.magic obj
-
-let may_box ~f obj : 'a optboxed =
-  match obj with
-    None -> Obj.magic boxed_null
-  | Some obj -> Obj.magic (f obj : 'a)
-
-(* Exceptions *)
-
-exception Null
-let _ =  Callback.register_exception "null_pointer" Null
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtk.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtk.ml
deleted file mode 100644 (file)
index 0c7892e..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-(* $Id$ *)
-
-exception Error of string
-exception Warning of string
-exception Cannot_cast of string * string
-type 'a obj
-type 'a optobj = 'a obj Gpointer.optboxed
-type clampf = float
-
-module Tags = struct
-  type arrow_type = [ `UP|`DOWN|`LEFT|`RIGHT ]
-  type attach_options = [ `EXPAND|`SHRINK|`FILL ]
-  type direction_type = [ `TAB_FORWARD|`TAB_BACKWARD|`UP|`DOWN|`LEFT|`RIGHT ]
-  type justification = [ `LEFT|`RIGHT|`CENTER|`FILL ]
-  type match_type = [ `ALL|`ALL_TAIL|`HEAD|`TAIL|`EXACT|`LAST ]
-  type metric_type = [ `PIXELS|`INCHES|`CENTIMETERS ]
-  type orientation = [ `HORIZONTAL|`VERTICAL ]
-  type corner_type = [ `TOP_LEFT|`BOTTOM_LEFT|`TOP_RIGHT|`BOTTOM_RIGHT ]
-  type pack_type = [ `START|`END ]
-  type path_type = [ `WIDGET|`WIDGET_CLASS|`CLASS ]
-  type policy_type = [ `ALWAYS|`AUTOMATIC|`NEVER ]
-  type position = [ `LEFT|`RIGHT|`TOP|`BOTTOM ]
-  type preview_type = [ `COLOR|`GRAYSCALE ]
-  type relief_style = [ `NORMAL|`HALF|`NONE ]
-  type resize_mode = [ `PARENT|`QUEUE|`IMMEDIATE ]
-  type signal_run_type = [ `FIRST|`LAST|`BOTH|`NO_RECURSE|`ACTION|`NO_HOOKS ]
-  type scroll_type =
-      [ `NONE|`STEP_FORWARD|`STEP_BACKWARD|`PAGE_BACKWARD|`PAGE_FORWARD|`JUMP ]
-  type selection_mode = [ `SINGLE|`BROWSE|`MULTIPLE|`EXTENDED ]
-  type shadow_type = [ `NONE|`IN|`OUT|`ETCHED_IN|`ETCHED_OUT ]
-  type state_type = [ `NORMAL|`ACTIVE|`PRELIGHT|`SELECTED|`INSENSITIVE ] 
-  type submenu_direction = [ `LEFT|`RIGHT ]
-  type submenu_placement = [ `TOP_BOTTOM|`LEFT_RIGHT ]
-  type toolbar_style = [ `ICONS|`TEXT|`BOTH ]
-  type trough_type = [ `NONE|`START|`END|`JUMP ]
-  type update_type = [ `CONTINUOUS|`DISCONTINUOUS|`DELAYED ]
-  type visibility = [ `NONE|`PARTIAL|`FULL ]
-  type window_position = [ `NONE|`CENTER|`MOUSE|`CENTER_ALWAYS ]
-  type window_type = [ `TOPLEVEL|`DIALOG|`POPUP ]
-  type sort_type = [ `ASCENDING|`DESCENDING ]
-  type fundamental_type =
-    [ `INVALID|`NONE|`CHAR|`BOOL|`INT|`UINT|`LONG|`ULONG|`FLOAT|`DOUBLE
-     |`STRING|`ENUM|`FLAGS|`BOXED|`FOREIGN|`CALLBACK|`ARGS|`POINTER
-     |`SIGNAL|`C_CALLBACK|`OBJECT ]
-
-  type accel_flag = [ `VISIBLE|`SIGNAL_VISIBLE|`LOCKED ]
-  type button_box_style = [ `DEFAULT_STYLE|`SPREAD|`EDGE|`START|`END ]
-  type expand_type = [ `X|`Y|`BOTH|`NONE ]
-  type packer_options = [ `PACK_EXPAND|`FILL_X|`FILL_Y ]
-  type side_type = [ `TOP|`BOTTOM|`LEFT|`RIGHT ]
-  type anchor_type = [ `CENTER|`NORTH|`NW|`NE|`SOUTH|`SW|`SE|`WEST|`EAST ]
-  type update_policy = [ `ALWAYS|`IF_VALID|`SNAP_TO_TICKS ]
-  type cell_type = [ `EMPTY|`TEXT|`PIXMAP|`PIXTEXT|`WIDGET ]
-  type button_action = [ `SELECTS|`DRAGS|`EXPANDS ]
-  type calendar_display_options =
-    [ `SHOW_HEADING|`SHOW_DAY_NAMES|`NO_MONTH_CHANGE|`SHOW_WEEK_NUMBERS
-     |`WEEK_START_MONDAY ]
-  type spin_button_update_policy = [ `ALWAYS|`IF_VALID ]
-  type spin_type =
-    [ `STEP_FORWARD|`STEP_BACKWARD|`PAGE_FORWARD|`PAGE_BACKWARD
-     |`HOME|`END|`USER_DEFINED of float ]
-  type progress_bar_style = [ `CONTINUOUS|`DISCRETE ]
-  type progress_bar_orientation =
-    [ `LEFT_TO_RIGHT|`RIGHT_TO_LEFT|`BOTTOM_TO_TOP|`TOP_TO_BOTTOM ]
-  type dest_defaults = [ `MOTION|`HIGHLIGHT|`DROP|`ALL ]
-  type target_flags = [ `SAME_APP|`SAME_WIDGET ]
-  type font_metric_type = [ `PIXELS|`POINTS ]
-  type font_type = [ `BITMAP|`SCALABLE|`SCALABLE_BITMAP|`ALL ]
-  type font_filter_type = [ `BASE|`USER ]
-end
-open Tags
-
-type gtk_type
-type gtk_class
-
-type accel_group
-
-type style
-type 'a group = 'a obj option
-
-type statusbar_message
-type statusbar_context
-
-type color = { red: float; green: float; blue: float; opacity: float }
-type rectangle  = { x: int; y: int; width: int; height: int }
-type target_entry = { target: string; flags: target_flags list; info: int }
-
-type data = [`data]
-type adjustment = [`data|`adjustment]
-type tooltips = [`data|`tooltips]
-type widget = [`widget]
-type container = [`widget|`container]
-type alignment = [`widget|`container|`bin|`alignment]
-type event_box = [`widget|`container|`bin|`eventbox]
-type frame = [`widget|`container|`bin|`frame]
-type aspect_frame = [`widget|`container|`bin|`frame|`aspect]
-type handle_box = [`widget|`container|`bin|`handlebox]
-type invisible = [`widget|`container|`bin|`invisible]
-type item = [`widget|`container|`bin|`item]
-type list_item = [`widget|`container|`bin|`item|`listitem]
-type menu_item = [`widget|`container|`bin|`item|`menuitem]
-type check_menu_item = [`widget|`container|`bin|`item|`menuitem|`checkmenuitem]
-type radio_menu_item =
-    [`widget|`container|`bin|`item|`menuitem|`checkmenuitem|`radiomenuitem]
-type tree_item = [`widget|`container|`bin|`item|`treeitem]
-type viewport = [`widget|`container|`bin|`viewport]
-type window = [`widget|`container|`bin|`window]
-type color_selection_dialog = [`widget|`container|`window|`colorseldialog]
-type dialog = [`widget|`container|`bin|`window|`dialog]
-type input_dialog = [`widget|`container|`bin|`window|`dialog|`inputdialog]
-type file_selection = [`widget|`container|`bin|`window|`filesel]
-type font_selection_dialog = [`widget|`container|`bin|`window|`fontseldialog]
-type plug = [`widget|`container|`bin|`window|`plug]
-type box = [`widget|`container|`box]
-type button_box = [`widget|`container|`box|`bbox]
-type gamma_curve = [`widget|`container|`bbox|`gamma]
-type color_selection = [`widget|`container|`box|`colorsel]
-type combo = [`widget|`container|`box|`combo]
-type statusbar = [`widget|`container|`box|`statusbar]
-type button = [`widget|`container|`button]
-type toggle_button = [`widget|`container|`button|`toggle]
-type radio_button = [`widget|`container|`button|`toggle|`radio]
-type option_menu = [`widget|`container|`button|`optionmenu]
-type clist = [`widget|`container|`clist]
-type fixed = [`widget|`container|`fixed]
-type layout = [`widget|`container|`layout]
-type liste = [`widget|`container|`list]
-type menu_shell = [`widget|`container|`menushell]
-type menu = [`widget|`container|`menushell|`menu]
-type menu_bar = [`widget|`container|`menushell|`menubar]
-type notebook = [`widget|`container|`notebook]
-type font_selection = [`widget|`container|`notebook|`fontsel]
-type packer = [`widget|`container|`packer]
-type paned = [`widget|`container|`paned]
-type scrolled_window = [`widget|`container|`scrolled]
-type socket = [`widget|`container|`socket]
-type table = [`widget|`container|`table]
-type toolbar = [`widget|`container|`toolbar]
-type tree = [`widget|`container|`tree]
-type calendar = [`widget|`calendar]
-type drawing_area = [`widget|`drawing]
-type editable = [`widget|`editable]
-type entry = [`widget|`editable|`entry]
-type spin_button = [`widget|`editable|`entry|`spinbutton]
-type text = [`widget|`editable|`text]
-type misc = [`widget|`misc]
-type arrow = [`widget|`misc|`arrow]
-type image = [`widget|`misc|`image]
-type label = [`widget|`misc|`label]
-type tips_query = [`widget|`misc|`label|`tipsquery]
-type pixmap = [`widget|`misc|`pixmap]
-type progress = [`widget|`progress]
-type progress_bar = [`widget|`progress|`progressbar]
-type range = [`widget|`range]
-type scale = [`widget|`range|`scale]
-type scrollbar = [`widget|`range|`scrollbar]
-type ruler = [`widget|`ruler]
-type separator = [`widget|`separator]
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkArgv.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkArgv.ml
deleted file mode 100644 (file)
index 5e60c8d..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-
-type data =
-  | NONE
-  | CHAR of char
-  | BOOL of bool
-  | INT of int
-  | FLOAT of float
-  | STRING of string option
-  | OBJECT of unit obj option
-  | POINTER of Gpointer.boxed option
-
-type 'a result =
-  [ `NONE
-  | `CHAR of char | `BOOL of bool | `INT of int
-  | `UINT of int32 | `LONG of nativeint | `ULONG of nativeint
-  | `FLOAT of float | `DOUBLE of float
-  | `STRING of string option | `ENUM of int | `FLAGS of int32
-  | `BOXED of Gpointer.boxed option
-  | `POINTER of Gpointer.boxed option
-  | `OBJECT of 'a obj option ]
-
-module Arg = struct
-  type t
-  external shift : t -> pos:int -> t = "ml_gtk_arg_shift"
-  external get_type : t -> gtk_type = "ml_gtk_arg_get_type"
-  external get : t -> data = "ml_gtk_arg_get"
-  external set_retloc : t -> 'a result -> unit = "ml_gtk_arg_set_retloc"
-  external get_pointer : t -> Gpointer.boxed = "ml_gtk_arg_get_pointer"
-  external get_nativeint : t -> nativeint = "ml_gtk_arg_get_nativeint"
-
-  (* Safely get an argument *)
-  (*
-  external get_char : t -> char = "ml_gtk_arg_get_char"
-  external get_bool : t -> bool = "ml_gtk_arg_get_bool"
-  external get_int : t -> int = "ml_gtk_arg_get_int"
-  external get_float : t -> float = "ml_gtk_arg_get_float"
-  external get_string : t -> string option = "ml_gtk_arg_get_string"
-  external get_object : t -> unit obj option = "ml_gtk_arg_get_object"
-  *)
-  (* Safely set a result
-     Beware: this is not the opposite of get, arguments and results
-     are two different ways to use GtkArg. *)
-  (*
-  external set_char : t -> char -> unit = "ml_gtk_arg_set_char"
-  external set_bool : t -> bool -> unit = "ml_gtk_arg_set_bool"
-  external set_int : t -> int -> unit = "ml_gtk_arg_set_int"
-  external set_nativeint : t -> nativeint -> unit = "ml_gtk_arg_set_nativeint"
-  external set_float : t -> float -> unit = "ml_gtk_arg_set_float"
-  external set_string : t -> string -> unit = "ml_gtk_arg_set_string"
-  external set_pointer : t -> Gpointer.boxed -> unit = "ml_gtk_arg_set_pointer"
-  external set_object : t -> 'a obj -> unit = "ml_gtk_arg_set_object"
-  *)
-end
-
-open Arg
-type raw_obj
-type t = { referent: raw_obj; nargs: int; args: Arg.t }
-let nth arg ~pos =
-  if pos < 0 || pos >= arg.nargs then invalid_arg "GtkArg.Vect.nth";
-  shift arg.args ~pos
-let result arg =
-  if arg.nargs < 0 then invalid_arg "GtkArgv.result";
-  shift arg.args ~pos:arg.nargs
-external wrap_object : raw_obj -> unit obj = "Val_GtkObject"
-let referent arg =
-  if arg.referent == Obj.magic (-1) then invalid_arg "GtkArgv.referent";
-  wrap_object arg.referent
-let get_result_type arg = get_type (result arg)
-let get_type arg ~pos = get_type (nth arg ~pos)
-let get arg ~pos = get (nth arg ~pos)
-let set_result arg = set_retloc (result arg)
-
-let get_args arg =
-  let rec loop args ~pos =
-    if pos < 0 then args
-    else loop (get arg ~pos :: args) ~pos:(pos-1)
-  in loop [] ~pos:(arg.nargs - 1)
-
-let get_pointer arg ~pos = get_pointer (nth arg ~pos)
-let get_nativeint arg ~pos = get_nativeint (nth arg ~pos)
-
-(*
-let get_char arg ~pos = get_char (nth arg ~pos)
-let get_bool arg ~pos = get_bool (nth arg ~pos)
-let get_int arg ~pos = get_int (nth arg ~pos)
-let get_float arg ~pos = get_float (nth arg ~pos)
-let get_string arg ~pos = get_string (nth arg ~pos)
-let get_object arg ~pos = get_object (nth arg ~pos)
-let set_result_char arg = set_char (result arg)
-let set_result_bool arg = set_bool (result arg)
-let set_result_int arg = set_int (result arg)
-let set_result_nativeint arg = set_nativeint (result arg)
-let set_result_float arg = set_float (result arg)
-let set_result_string arg = set_string (result arg)
-let set_result_pointer arg = set_pointer (result arg)
-let set_result_object arg = set_object (result arg)
-*)
-
-external string_at_pointer : ?pos:int -> ?len:int -> Gpointer.boxed -> string
-    = "ml_string_at_pointer"
-external int_at_pointer : Gpointer.boxed -> int
-    = "ml_int_at_pointer"
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkBase.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkBase.ml
deleted file mode 100644 (file)
index 3b1a00f..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-
-module Type = struct
-  external name : gtk_type -> string = "ml_gtk_type_name"
-  external from_name : string -> gtk_type = "ml_gtk_type_from_name"
-  external parent : gtk_type -> gtk_type = "ml_gtk_type_parent"
-  external get_class : gtk_type -> gtk_class = "ml_gtk_type_class"
-  external parent_class : gtk_type -> gtk_class = "ml_gtk_type_parent_class"
-  external is_a : gtk_type -> gtk_type -> bool = "ml_gtk_type_is_a"
-  external fundamental : gtk_type -> fundamental_type
-      = "ml_gtk_type_fundamental"
-end
-
-module Object = struct
-  external get_type : 'a obj -> gtk_type = "ml_gtk_object_type"
-  let is_a obj name =
-    Type.is_a (get_type obj) (Type.from_name name)
-  external destroy : 'a obj -> unit = "ml_gtk_object_destroy"
-  external coerce : 'a obj -> unit obj = "%identity"
-  external unsafe_cast : 'a obj -> 'b obj = "%identity"
-  let try_cast w name =
-    if is_a w name then unsafe_cast w
-    else raise (Cannot_cast(Type.name(get_type w), name))
-  let get_id (obj : 'a obj) : int = (snd (Obj.magic obj) lor 0)
-  module Signals = struct
-    open GtkSignal
-    let destroy : (_,_) t =
-      { name = "destroy"; marshaller = marshal_unit }
-  end
-end
-
-module Widget = struct
-  let cast w : widget obj = Object.try_cast w "GtkWidget"
-  external coerce : [>`widget] obj -> widget obj = "%identity"
-  external unparent : [>`widget] obj -> unit = "ml_gtk_widget_unparent"
-  external show : [>`widget] obj -> unit = "ml_gtk_widget_show"
-  external show_now : [>`widget] obj -> unit = "ml_gtk_widget_show_now"
-  external show_all : [>`widget] obj -> unit = "ml_gtk_widget_show_all"
-  external hide : [>`widget] obj -> unit = "ml_gtk_widget_hide"
-  external hide_all : [>`widget] obj -> unit = "ml_gtk_widget_hide_all"
-  external map : [>`widget] obj -> unit = "ml_gtk_widget_map"
-  external unmap : [>`widget] obj -> unit = "ml_gtk_widget_unmap"
-  external realize : [>`widget] obj -> unit = "ml_gtk_widget_realize"
-  external unrealize : [>`widget] obj -> unit = "ml_gtk_widget_unrealize"
-  external queue_draw : [>`widget] obj -> unit = "ml_gtk_widget_queue_draw"
-  external queue_resize : [>`widget] obj -> unit = "ml_gtk_widget_queue_resize"
-  external draw : [>`widget] obj -> Gdk.Rectangle.t option -> unit
-      = "ml_gtk_widget_draw"
-  external draw_focus : [>`widget] obj -> unit
-      = "ml_gtk_widget_draw_focus"
-  external draw_default : [>`widget] obj -> unit
-      = "ml_gtk_widget_draw_default"
-  external event : [>`widget] obj -> 'a Gdk.event -> bool
-      = "ml_gtk_widget_event"
-  external activate : [>`widget] obj -> bool
-      = "ml_gtk_widget_activate"
-  external reparent : [>`widget] obj -> [>`widget] obj -> unit
-      = "ml_gtk_widget_reparent"
-  external popup : [>`widget] obj -> x:int -> y:int -> unit
-      = "ml_gtk_widget_popup"
-  external intersect :
-      [>`widget] obj -> Gdk.Rectangle.t -> Gdk.Rectangle.t option
-      = "ml_gtk_widget_intersect"
-  external set_can_default : [>`widget] obj -> bool -> unit
-      = "ml_gtk_widget_set_can_default"
-  external set_can_focus : [>`widget] obj -> bool -> unit
-      = "ml_gtk_widget_set_can_focus"
-  external grab_focus : [>`widget] obj -> unit
-      = "ml_gtk_widget_grab_focus"
-  external grab_default : [>`widget] obj -> unit
-      = "ml_gtk_widget_grab_default"
-  external set_name : [>`widget] obj -> string -> unit
-      = "ml_gtk_widget_set_name"
-  external get_name : [>`widget] obj -> string
-      = "ml_gtk_widget_get_name"
-  external set_state : [>`widget] obj -> state_type -> unit
-      = "ml_gtk_widget_set_state"
-  external set_sensitive : [>`widget] obj -> bool -> unit
-      = "ml_gtk_widget_set_sensitive"
-  external set_uposition : [>`widget] obj -> x:int -> y:int -> unit
-      = "ml_gtk_widget_set_uposition"
-  external set_usize : [>`widget] obj -> width:int -> height:int -> unit
-      = "ml_gtk_widget_set_usize"
-  external add_events : [>`widget] obj -> Gdk.Tags.event_mask list -> unit
-      = "ml_gtk_widget_add_events"
-  external set_events : [>`widget] obj -> Gdk.Tags.event_mask list -> unit
-      = "ml_gtk_widget_set_events"
-  external set_extension_events :
-      [>`widget] obj -> Gdk.Tags.extension_events -> unit
-      = "ml_gtk_widget_set_extension_events"
-  external get_toplevel : [>`widget] obj -> widget obj
-      = "ml_gtk_widget_get_toplevel"
-  external get_ancestor : [>`widget] obj -> gtk_type -> widget obj
-      = "ml_gtk_widget_get_ancestor"
-  external get_colormap : [>`widget] obj -> Gdk.colormap
-      = "ml_gtk_widget_get_colormap"
-  external get_visual : [>`widget] obj -> Gdk.visual
-      = "ml_gtk_widget_get_visual"
-  external get_pointer : [>`widget] obj -> int * int
-      = "ml_gtk_widget_get_pointer"
-  external is_ancestor : [>`widget] obj -> [>`widget] obj -> bool
-      = "ml_gtk_widget_is_ancestor"
-  external set_style : [>`widget] obj -> style -> unit
-      = "ml_gtk_widget_set_style"
-  external set_rc_style : [>`widget] obj -> unit
-      = "ml_gtk_widget_set_rc_style"
-  external ensure_style : [>`widget] obj -> unit
-      = "ml_gtk_widget_ensure_style"
-  external get_style : [>`widget] obj -> style
-      = "ml_gtk_widget_get_style"
-  external restore_default_style : [>`widget] obj -> unit
-      = "ml_gtk_widget_restore_default_style"
-  external add_accelerator :
-      ([>`widget] as 'a) obj -> sgn:('a,unit->unit) GtkSignal.t ->
-      accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list ->
-      ?flags:accel_flag list -> unit
-      = "ml_gtk_widget_add_accelerator_bc" "ml_gtk_widget_add_accelerator"
-  external remove_accelerator :
-      [>`widget] obj -> accel_group ->
-      key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> unit
-      = "ml_gtk_widget_remove_accelerator"
-  external lock_accelerators : [>`widget] obj -> unit
-      = "ml_gtk_widget_lock_accelerators"
-  external unlock_accelerators : [>`widget] obj -> unit
-      = "ml_gtk_widget_unlock_accelerators"
-  external accelerators_locked : [>`widget] obj -> bool
-      = "ml_gtk_widget_accelerators_locked"
-  external window : [>`widget] obj -> Gdk.window
-      = "ml_GtkWidget_window"
-  external visible : [>`widget] obj -> bool
-      = "ml_GTK_WIDGET_VISIBLE"
-  external has_focus : [>`widget] obj -> bool
-      = "ml_GTK_WIDGET_HAS_FOCUS"
-  external parent : [>`widget] obj -> widget obj
-      = "ml_gtk_widget_parent"
-  external set_app_paintable : [>`widget] obj -> bool -> unit
-      = "ml_gtk_widget_set_app_paintable"
-  external allocation : [>`widget] obj -> rectangle
-      = "ml_gtk_widget_allocation"
-  external set_colormap : [>`widget] obj -> Gdk.colormap -> unit
-      = "ml_gtk_widget_set_colormap"
-  external set_visual : [>`widget] obj -> Gdk.visual -> unit
-      = "ml_gtk_widget_set_visual"
-  external set_default_colormap : Gdk.colormap -> unit
-      = "ml_gtk_widget_set_default_colormap"
-  external set_default_visual : Gdk.visual -> unit
-      = "ml_gtk_widget_set_default_visual"
-  external get_default_colormap : unit -> Gdk.colormap
-      = "ml_gtk_widget_get_default_colormap"
-  external get_default_visual : unit -> Gdk.visual
-      = "ml_gtk_widget_get_default_visual"
-  external push_colormap : Gdk.colormap -> unit
-      = "ml_gtk_widget_push_colormap"
-  external push_visual : Gdk.visual -> unit
-      = "ml_gtk_widget_push_visual"
-  external pop_colormap : unit -> unit
-      = "ml_gtk_widget_pop_colormap"
-  external pop_visual : unit -> unit
-      = "ml_gtk_widget_pop_visual"
-  module Signals = struct
-    open GtkArgv
-    open GtkSignal
-    let marshal f _ = function
-      | OBJECT(Some p) :: _ -> f (cast p)
-      |        _ -> invalid_arg "GtkBase.Widget.Signals.marshal"
-    let marshal_opt f _ = function
-      | OBJECT(Some obj) :: _ -> f (Some (cast obj))
-      | OBJECT None :: _ -> f None
-      | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_opt"
-    let marshal_style f _ = function
-      | POINTER p :: _ -> f (Obj.magic p : Gtk.style option)
-      | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_opt"
-    let marshal_drag1 f _ = function
-      | POINTER(Some p) :: _ -> f (Obj.magic p : Gdk.drag_context)
-      |        _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag1"
-    let marshal_drag2 f _ = function
-      | POINTER(Some p) :: INT time :: _ ->
-         f (Obj.magic p : Gdk.drag_context) ~time
-      |        _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag2"
-    let marshal_drag3 f argv = function
-      | POINTER(Some p) :: INT x :: INT y :: INT time :: _ ->
-         let res = f (Obj.magic p : Gdk.drag_context) ~x ~y ~time
-         in GtkArgv.set_result argv (`BOOL res)
-      |        _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag3"
-    let show : ([>`widget],_) t =
-      { name = "show"; marshaller = marshal_unit }
-    let hide : ([>`widget],_) t =
-      { name = "hide"; marshaller = marshal_unit }
-    let map : ([>`widget],_) t =
-      { name = "map"; marshaller = marshal_unit }
-    let unmap : ([>`widget],_) t =
-      { name = "unmap"; marshaller = marshal_unit }
-    let realize : ([>`widget],_) t =
-      { name = "realize"; marshaller = marshal_unit }
-    let draw : ([>`widget],_) t =
-      let marshal f _ = function
-       | POINTER(Some p) :: _ -> f (Obj.magic p : Gdk.Rectangle.t)
-       | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_draw"
-      in { name = "draw"; marshaller = marshal }
-    let draw_focus : ([>`widget],_) t =
-      { name = "draw_focus"; marshaller = marshal_unit }
-    let draw_default : ([>`widget],_) t =
-      { name = "draw_default"; marshaller = marshal_unit }
-    external val_state : int -> state_type = "ml_Val_state_type"
-    let state_changed : ([>`widget],_) t =
-      let marshal f = marshal_int (fun x -> f (val_state x)) in
-      { name = "state_changed"; marshaller = marshal }
-    let parent_set : ([>`widget],_) t =
-      { name = "parent_set"; marshaller = marshal_opt }
-    let style_set : ([>`widget],_) t =
-      { name = "style_set"; marshaller = marshal_style }
-    let drag_begin : ([>`widget],_) t =
-      { name = "drag_begin"; marshaller = marshal_drag1 }
-    let drag_end : ([>`widget],_) t =
-      { name = "drag_end"; marshaller = marshal_drag1 }
-    let drag_data_delete : ([>`widget],_) t =
-      { name = "drag_data_delete"; marshaller = marshal_drag1 }
-    let drag_leave : ([>`widget],_) t =
-      { name = "drag_leave"; marshaller = marshal_drag2 }
-    let drag_motion : ([>`widget],_) t =
-      { name = "drag_motion"; marshaller = marshal_drag3 }
-    let drag_drop : ([>`widget],_) t =
-      { name = "drag_drop"; marshaller = marshal_drag3 }
-    let drag_data_get : ([>`widget],_) t =
-      let marshal f argv = function
-        | POINTER(Some p) :: POINTER(Some q) :: INT info :: INT time :: _ ->
-           f (Obj.magic p : Gdk.drag_context)
-             (Obj.magic q : GtkData.Selection.t) 
-             ~info
-             ~time
-       | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag_data_get"
-      in
-      { name = "drag_data_get"; marshaller = marshal }
-    let drag_data_received : ([>`widget],_) t =
-      let marshal f _ = function
-        | POINTER(Some p) :: INT x :: INT y :: POINTER(Some q) ::
-          INT info :: INT time :: _ ->
-           f (Obj.magic p : Gdk.drag_context) ~x ~y
-              (Obj.magic q : GtkData.Selection.t)
-             ~info ~time
-       | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag_data_received"
-      in
-      { name = "drag_data_received"; marshaller = marshal }
-
-    module Event = struct
-      let marshal f argv = function
-        | [POINTER(Some p)] ->
-           let ev = GdkEvent.unsafe_copy p in
-            GtkArgv.set_result argv (`BOOL(f ev))
-       | _ -> invalid_arg "GtkBase.Widget.Event.marshal"
-      let any : ([>`widget], Gdk.Tags.event_type Gdk.event -> bool) t =
-       { name = "event"; marshaller = marshal }
-      let button_press : ([>`widget], GdkEvent.Button.t -> bool) t =
-       { name = "button_press_event"; marshaller = marshal }
-      let button_release : ([>`widget], GdkEvent.Button.t -> bool) t =
-       { name = "button_release_event"; marshaller = marshal }
-      let motion_notify : ([>`widget], GdkEvent.Motion.t -> bool) t =
-       { name = "motion_notify_event"; marshaller = marshal }
-      let delete : ([>`widget], [`DELETE] Gdk.event -> bool) t =
-       { name = "delete_event"; marshaller = marshal }
-      let destroy : ([>`widget], [`DESTROY] Gdk.event -> bool) t =
-       { name = "destroy_event"; marshaller = marshal }
-      let expose : ([>`widget], GdkEvent.Expose.t -> bool) t =
-       { name = "expose_event"; marshaller = marshal }
-      let key_press : ([>`widget], GdkEvent.Key.t -> bool) t =
-       { name = "key_press_event"; marshaller = marshal }
-      let key_release : ([>`widget], GdkEvent.Key.t -> bool) t =
-       { name = "key_release_event"; marshaller = marshal }
-      let enter_notify : ([>`widget], GdkEvent.Crossing.t -> bool) t =
-       { name = "enter_notify_event"; marshaller = marshal }
-      let leave_notify : ([>`widget], GdkEvent.Crossing.t -> bool) t =
-       { name = "leave_notify_event"; marshaller = marshal }
-      let configure : ([>`widget], GdkEvent.Configure.t -> bool) t =
-       { name = "configure_event"; marshaller = marshal }
-      let focus_in : ([>`widget], GdkEvent.Focus.t -> bool) t =
-       { name = "focus_in_event"; marshaller = marshal }
-      let focus_out : ([>`widget], GdkEvent.Focus.t -> bool) t =
-       { name = "focus_out_event"; marshaller = marshal }
-      let map : ([>`widget], [`MAP] Gdk.event -> bool) t =
-       { name = "map_event"; marshaller = marshal }
-      let unmap : ([>`widget], [`UNMAP] Gdk.event -> bool) t =
-       { name = "unmap_event"; marshaller = marshal }
-      let property_notify : ([>`widget], GdkEvent.Property.t -> bool) t =
-       { name = "property_notify_event"; marshaller = marshal }
-      let selection_clear : ([>`widget], GdkEvent.Selection.t -> bool) t =
-       { name = "selection_clear_event"; marshaller = marshal }
-      let selection_request : ([>`widget], GdkEvent.Selection.t -> bool) t =
-       { name = "selection_request_event"; marshaller = marshal }
-      let selection_notify : ([>`widget], GdkEvent.Selection.t -> bool) t =
-       { name = "selection_notify_event"; marshaller = marshal }
-      let proximity_in : ([>`widget], GdkEvent.Proximity.t -> bool) t =
-       { name = "proximity_in_event"; marshaller = marshal }
-      let proximity_out : ([>`widget], GdkEvent.Proximity.t -> bool) t =
-       { name = "proximity_out_event"; marshaller = marshal }
-    end
-  end
-end
-
-module Container = struct
-  let cast w : container obj = Object.try_cast w "GtkContainer"
-  external coerce : [>`container] obj -> container obj = "%identity"
-  external set_border_width : [>`container] obj -> int -> unit
-      = "ml_gtk_container_set_border_width"
-  external set_resize_mode : [>`container] obj -> resize_mode -> unit
-      = "ml_gtk_container_set_resize_mode"
-  external add : [>`container] obj -> [>`widget] obj -> unit
-      = "ml_gtk_container_add"
-  external remove : [>`container] obj -> [>`widget] obj -> unit
-      = "ml_gtk_container_remove"
-  let set ?border_width ?(width = -2) ?(height = -2) w =
-    may border_width ~f:(set_border_width w);
-    if width <> -2 || height <> -2 then
-      Widget.set_usize w ?width ?height
-  external foreach : [>`container] obj -> f:(widget obj-> unit) -> unit
-      = "ml_gtk_container_foreach"
-  let children w =
-    let l = ref [] in
-    foreach w ~f:(fun c -> l := c :: !l);
-    List.rev !l
-  external focus : [>`container] obj -> direction_type -> bool
-      = "ml_gtk_container_focus"
-  (* Called by Widget.grab_focus *)
-  external set_focus_child : [>`container] obj -> [>`widget] optobj -> unit
-      = "ml_gtk_container_set_focus_child"
-  external set_focus_vadjustment :
-      [>`container] obj -> [>`adjustment] optobj -> unit
-      = "ml_gtk_container_set_focus_vadjustment"
-  external set_focus_hadjustment :
-      [>`container] obj -> [>`adjustment] optobj -> unit
-      = "ml_gtk_container_set_focus_hadjustment"
-  module Signals = struct
-    open GtkSignal
-    let add : ([>`container],_) t =
-      { name = "add"; marshaller = Widget.Signals.marshal }
-    let remove : ([>`container],_) t =
-      { name = "remove"; marshaller = Widget.Signals.marshal }
-    let need_resize : ([>`container],_) t =
-      let marshal f argv _ = GtkArgv.set_result argv (`BOOL(f ())) in
-      { name = "need_resize"; marshaller = marshal }
-    external val_direction : int -> direction_type = "ml_Val_direction_type"
-    let focus : ([>`container],_) t =
-      let marshal f argv = function
-        | GtkArgv.INT dir :: _ ->
-            GtkArgv.set_result argv (`BOOL(f (val_direction dir)))
-        | _ -> invalid_arg "GtkBase.Container.Signals.marshal_focus"
-      in { name = "focus"; marshaller = marshal }
-  end
-end
-
-module Item = struct
-  let cast w : item obj = Object.try_cast w "GtkItem"
-  external coerce : [>`item] obj -> item obj = "%identity"
-  external select : [>`item] obj -> unit = "ml_gtk_item_select"
-  external deselect : [>`item] obj -> unit = "ml_gtk_item_deselect"
-  external toggle : [>`item] obj -> unit = "ml_gtk_item_toggle"
-  module Signals = struct
-    open GtkSignal
-    let select : ([>`item],_) t =
-      { name = "select"; marshaller = marshal_unit }
-    let deselect : ([>`item],_) t =
-      { name = "deselect"; marshaller = marshal_unit }
-    let toggle : ([>`item],_) t =
-      { name = "toggle"; marshaller = marshal_unit }
-  end
-end
-
-
-module DnD = struct
-  external dest_set :
-      [>`widget] obj -> flags:dest_defaults list ->
-      targets:target_entry array -> actions:Gdk.Tags.drag_action list -> unit 
-    = "ml_gtk_drag_dest_set"
-  external dest_unset : [>`widget] obj -> unit
-      = "ml_gtk_drag_dest_unset"
-  external finish :
-      Gdk.drag_context -> success:bool -> del:bool -> time:int -> unit
-      = "ml_gtk_drag_finish"
-  external get_data :
-      [>`widget] obj -> Gdk.drag_context -> target:Gdk.atom -> time:int -> unit
-      = "ml_gtk_drag_get_data"
-  external get_source_widget : Gdk.drag_context -> widget obj
-      = "ml_gtk_drag_get_source_widget"
-  external highlight : [>`widget] obj -> unit = "ml_gtk_drag_highlight"
-  external unhighlight : [>`widget] obj -> unit = "ml_gtk_drag_unhighlight"
-  external set_icon_widget :
-      Gdk.drag_context -> [>`widget] obj -> hot_x:int -> hot_y:int -> unit
-      = "ml_gtk_drag_set_icon_widget"
-  external set_icon_pixmap :
-      Gdk.drag_context -> colormap:Gdk.colormap ->
-      Gdk.pixmap -> ?mask:Gdk.bitmap -> hot_x:int -> hot_y:int -> unit
-      = "ml_gtk_drag_set_icon_pixmap_bc" "ml_gtk_drag_set_icon_pixmap"
-  external set_icon_default : Gdk.drag_context -> unit
-      = "ml_gtk_drag_set_icon_default"
-  external set_default_icon :
-      colormap:Gdk.colormap -> Gdk.pixmap ->
-      ?mask:Gdk.bitmap -> hot_x:int -> hot_y:int -> unit
-      = "ml_gtk_drag_set_default_icon"
-  external source_set :
-      [>`widget] obj -> ?modi:Gdk.Tags.modifier list ->
-      targets:target_entry array -> actions:Gdk.Tags.drag_action list -> unit
-      = "ml_gtk_drag_source_set"
-  external source_set_icon :
-      [>`widget] obj -> colormap:Gdk.colormap ->
-      Gdk.pixmap -> ?mask:Gdk.bitmap -> unit
-      = "ml_gtk_drag_source_set_icon"
-  external source_unset : [>`widget] obj -> unit
-      = "ml_gtk_drag_source_unset"
-(*  external dest_handle_event : [>`widget] -> *)
-end
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkBin.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkBin.ml
deleted file mode 100644 (file)
index ab4cc7e..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module Alignment = struct
-  let cast w : alignment obj = Object.try_cast w "GtkAlignment"
-  external create :
-      x:clampf -> y:clampf -> xscale:clampf -> yscale:clampf -> alignment obj
-      = "ml_gtk_alignment_new"
-  let create ?(x=0.5) ?(y=0.5) ?(xscale=1.) ?(yscale=1.) () =
-    create ~x ~y ~xscale ~yscale
-  external set :
-      ?x:clampf -> ?y:clampf -> ?xscale:clampf -> ?yscale:clampf ->
-      [>`alignment] obj -> unit
-      = "ml_gtk_alignment_set"
-end
-
-module EventBox = struct
-  let cast w : event_box obj = Object.try_cast w "GtkEventBox"
-  external create : unit -> event_box obj = "ml_gtk_event_box_new"
-end
-
-module Frame = struct
-  let cast w : frame obj = Object.try_cast w "GtkFrame"
-  external coerce : [>`frame] obj -> frame obj = "%identity"
-  external create : string -> frame obj = "ml_gtk_frame_new"
-  external set_label : [>`frame] obj -> string -> unit
-      = "ml_gtk_frame_set_label"
-  external set_label_align : [>`frame] obj -> x:clampf -> y:clampf -> unit
-      = "ml_gtk_frame_set_label_align"
-  external set_shadow_type : [>`frame] obj -> shadow_type -> unit
-      = "ml_gtk_frame_set_shadow_type"
-  external get_label_xalign : [>`frame] obj -> float
-      = "ml_gtk_frame_get_label_xalign"
-  external get_label_yalign : [>`frame] obj -> float
-      = "ml_gtk_frame_get_label_yalign"
-  let set_label_align' ?x ?y w =
-    set_label_align w
-      ~x:(may_default get_label_xalign w ~opt:x)
-      ~y:(may_default get_label_yalign w ~opt:y)
-  let set ?label ?label_xalign ?label_yalign ?shadow_type w =
-    may label ~f:(set_label w);
-    if label_xalign <> None || label_yalign <> None then
-      set_label_align' w ?x:label_xalign ?y:label_yalign;
-    may shadow_type ~f:(set_shadow_type w)
-end
-
-module AspectFrame = struct
-  let cast w : aspect_frame obj = Object.try_cast w "GtkAspectFrame"
-  external create :
-      label:string -> xalign:clampf ->
-      yalign:clampf -> ratio:float -> obey_child:bool -> aspect_frame obj
-      = "ml_gtk_aspect_frame_new"
-  let create ?(label="") ?(xalign=0.5) ?(yalign=0.5)
-      ?(ratio=1.0) ?(obey_child=true) () =
-    create ~label ~xalign ~yalign ~ratio ~obey_child
-  external set :
-      [>`aspect] obj ->
-      xalign:clampf -> yalign:clampf -> ratio:float -> obey_child:bool -> unit
-      = "ml_gtk_aspect_frame_set"
-  external get_xalign : [>`aspect] obj -> clampf
-      = "ml_gtk_aspect_frame_get_xalign"
-  external get_yalign : [>`aspect] obj -> clampf
-      = "ml_gtk_aspect_frame_get_yalign"
-  external get_ratio : [>`aspect] obj -> clampf
-      = "ml_gtk_aspect_frame_get_ratio"
-  external get_obey_child : [>`aspect] obj -> bool
-      = "ml_gtk_aspect_frame_get_obey_child"
-  let set ?xalign ?yalign ?ratio ?obey_child w =
-    if xalign <> None || yalign <> None || ratio <> None || obey_child <> None
-    then set w
-       ~xalign:(may_default get_xalign w ~opt:xalign)
-       ~yalign:(may_default get_yalign w ~opt:yalign)
-       ~ratio:(may_default get_ratio w ~opt:ratio)
-       ~obey_child:(may_default get_obey_child w ~opt:obey_child)
-end
-
-module HandleBox = struct
-  let cast w : handle_box obj = Object.try_cast w "GtkHandleBox"
-  external create : unit -> handle_box obj = "ml_gtk_handle_box_new"
-  external set_shadow_type : [>`handlebox] obj -> shadow_type -> unit =
-   "ml_gtk_handle_box_set_shadow_type"
-  external set_handle_position : [>`handlebox] obj -> position -> unit =
-   "ml_gtk_handle_box_set_handle_position"
-  external set_snap_edge : [>`handlebox] obj -> position -> unit =
-   "ml_gtk_handle_box_set_snap_edge"
-  module Signals = struct
-    open GtkSignal
-    let child_attached : ([>`handlebox],_) t =
-      { name = "child_attached"; marshaller = Widget.Signals.marshal }
-    let child_detached : ([>`handlebox],_) t =
-      { name = "child_detached"; marshaller = Widget.Signals.marshal }
-  end
-end
-
-module Viewport = struct
-  let cast w : viewport obj = Object.try_cast w "GtkViewport"
-  external create :
-      [>`adjustment] optobj -> [>`adjustment] optobj -> viewport obj
-      = "ml_gtk_viewport_new"
-  let create ?hadjustment ?vadjustment () =
-    create (Gpointer.optboxed hadjustment) (Gpointer.optboxed vadjustment)
-  external get_hadjustment : [>`viewport] obj -> adjustment obj
-      = "ml_gtk_viewport_get_hadjustment"
-  external get_vadjustment : [>`viewport] obj -> adjustment obj
-      = "ml_gtk_viewport_get_vadjustment"
-  external set_hadjustment : [>`viewport] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_viewport_set_hadjustment"
-  external set_vadjustment : [>`viewport] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_viewport_set_vadjustment"
-  external set_shadow_type : [>`viewport] obj -> shadow_type -> unit
-      = "ml_gtk_viewport_set_shadow_type"
-  let set ?hadjustment ?vadjustment ?shadow_type w =
-    may hadjustment ~f:(set_hadjustment w);
-    may vadjustment ~f:(set_vadjustment w);
-    may shadow_type ~f:(set_shadow_type w)
-end
-
-module ScrolledWindow = struct
-  let cast w : scrolled_window obj = Object.try_cast w "GtkScrolledWindow"
-  external create :
-      [>`adjustment] optobj -> [>`adjustment] optobj -> scrolled_window obj
-      = "ml_gtk_scrolled_window_new"
-  let create ?hadjustment ?vadjustment () =
-    create (Gpointer.optboxed hadjustment) (Gpointer.optboxed vadjustment)
-  external set_hadjustment : [>`scrolled] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_scrolled_window_set_hadjustment"
-  external set_vadjustment : [>`scrolled] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_scrolled_window_set_vadjustment"
-  external get_hadjustment : [>`scrolled] obj -> adjustment obj
-      = "ml_gtk_scrolled_window_get_hadjustment"
-  external get_vadjustment : [>`scrolled] obj -> adjustment obj
-      = "ml_gtk_scrolled_window_get_vadjustment"
-  external set_policy : [>`scrolled] obj -> policy_type -> policy_type -> unit
-      = "ml_gtk_scrolled_window_set_policy"
-  external add_with_viewport : [>`scrolled] obj -> [>`widget] obj -> unit
-      = "ml_gtk_scrolled_window_add_with_viewport"
-  external get_hscrollbar_policy : [>`scrolled] obj -> policy_type
-      = "ml_gtk_scrolled_window_get_hscrollbar_policy"
-  external get_vscrollbar_policy : [>`scrolled] obj -> policy_type
-      = "ml_gtk_scrolled_window_get_vscrollbar_policy"
-  external set_placement : [>`scrolled] obj -> corner_type -> unit
-      = "ml_gtk_scrolled_window_set_placement"
-  let set_policy' ?hpolicy ?vpolicy w =
-    set_policy w
-      (may_default get_hscrollbar_policy w ~opt:hpolicy)
-      (may_default get_vscrollbar_policy w ~opt:vpolicy)
-  let set ?hpolicy ?vpolicy ?placement w =
-    if hpolicy <> None || vpolicy <> None then
-      set_policy' w ?hpolicy ?vpolicy;
-    may placement ~f:(set_placement w)
-end
-
-module Socket = struct
-  let cast w : socket obj = Object.try_cast w "GtkSocket"
-  external coerce : [>`socket] obj -> socket obj = "%identity"
-  external create : unit -> socket obj = "ml_gtk_socket_new"
-  external steal : [>`socket] obj -> Gdk.xid -> unit = "ml_gtk_socket_steal"
-end
-
-(*
-module Invisible = struct
-  let cast w : socket obj = Object.try_cast w "GtkInvisible"
-  external coerce : [>`invisible] obj -> invisible obj = "%identity"
-  external create : unit -> invisible obj = "ml_gtk_invisible_new"
-end
-*)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkButton.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkButton.ml
deleted file mode 100644 (file)
index 6d9ddf5..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module Button = struct
-  let cast w : button obj = Object.try_cast w "GtkButton"
-  external coerce : [>`button] obj -> button obj = "%identity"
-  external create : unit -> button obj = "ml_gtk_button_new"
-  external create_with_label : string -> button obj
-      = "ml_gtk_button_new_with_label"
-  let create ?label () =
-    match label with None -> create ()
-    | Some x -> create_with_label x
-  external pressed : [>`button] obj -> unit = "ml_gtk_button_pressed"
-  external released : [>`button] obj -> unit = "ml_gtk_button_released"
-  external clicked : [>`button] obj -> unit = "ml_gtk_button_clicked"
-  external enter : [>`button] obj -> unit = "ml_gtk_button_enter"
-  external leave : [>`button] obj -> unit = "ml_gtk_button_leave"
-  module Signals = struct
-    open GtkSignal
-    let pressed : ([>`button],_) t =
-      { name = "pressed"; marshaller = marshal_unit }
-    let released : ([>`button],_) t =
-      { name = "released"; marshaller = marshal_unit }
-    let clicked : ([>`button],_) t =
-      { name = "clicked"; marshaller = marshal_unit }
-    let enter : ([>`button],_) t =
-      { name = "enter"; marshaller = marshal_unit }
-    let leave : ([>`button],_) t =
-      { name = "leave"; marshaller = marshal_unit }
-  end
-end
-
-module ToggleButton = struct
-  let cast w : toggle_button obj = Object.try_cast w "GtkToggleButton"
-  external coerce : [>`toggle] obj -> toggle_button obj = "%identity"
-  external toggle_button_create : unit -> toggle_button obj
-      = "ml_gtk_toggle_button_new"
-  external toggle_button_create_with_label : string -> toggle_button obj
-      = "ml_gtk_toggle_button_new_with_label"
-  external check_button_create : unit -> toggle_button obj
-      = "ml_gtk_check_button_new"
-  external check_button_create_with_label : string -> toggle_button obj
-      = "ml_gtk_check_button_new_with_label"
-  let create_toggle ?label () =
-    match label with None -> toggle_button_create ()
-    | Some label -> toggle_button_create_with_label label
-  let create_check ?label () =
-    match label with None -> check_button_create ()
-    | Some label -> check_button_create_with_label label
-  external set_mode : [>`toggle] obj -> bool -> unit
-      = "ml_gtk_toggle_button_set_mode"
-  external set_active : [>`toggle] obj -> bool -> unit
-      = "ml_gtk_toggle_button_set_active"
-  let set ?active ?draw_indicator w =
-    may ~f:(set_mode w) draw_indicator;
-    may ~f:(set_active w) active
-  external get_active : [>`toggle] obj -> bool
-      = "ml_gtk_toggle_button_get_active"
-  external toggled : [>`toggle] obj -> unit
-      = "ml_gtk_toggle_button_toggled"
-  module Signals = struct
-    open GtkSignal
-    let toggled : ([>`toggle],_) t =
-      { name = "toggled"; marshaller = marshal_unit }
-  end
-end
-
-module RadioButton = struct
-  let cast w : radio_button obj = Object.try_cast w "GtkRadioButton"
-  external create : radio_button group -> radio_button obj
-      = "ml_gtk_radio_button_new"
-  external create_with_label : radio_button group -> string -> radio_button obj
-      = "ml_gtk_radio_button_new_with_label"
-  external set_group : [>`radio] obj -> radio_button group -> unit
-      = "ml_gtk_radio_button_set_group"
-  let create ?(group = None) ?label () =
-    match label with None -> create group
-    | Some label -> create_with_label group label
-end
-
-module Toolbar = struct
-  let cast w : toolbar obj = Object.try_cast w "GtkToolbar"
-  external create : orientation -> style:toolbar_style -> toolbar obj
-      = "ml_gtk_toolbar_new"
-  let create dir ?(style=`BOTH) () = create dir ~style
-  external insert_space : [>`toolbar] obj -> pos:int -> unit
-      = "ml_gtk_toolbar_insert_space"
-  let insert_space w ?(pos = -1) () = insert_space w ~pos
-  external insert_button :
-      [>`toolbar] obj -> kind:[`BUTTON|`TOGGLEBUTTON|`RADIOBUTTON] ->
-      text:string -> tooltip:string ->
-      tooltip_private:string ->
-      icon:[>`widget] optobj -> pos:int -> button obj
-      = "ml_gtk_toolbar_insert_element_bc" "ml_gtk_toolbar_insert_element"
-  let insert_button w ?(kind=`BUTTON) ?(text="") ?(tooltip="")
-      ?(tooltip_private="") ?icon ?(pos = -1) ?callback () =
-    let b =insert_button w ~kind ~text ~tooltip ~tooltip_private ~pos
-        ~icon:(Gpointer.optboxed icon)
-    in
-    match callback with
-    | None   -> b
-    | Some c -> GtkSignal.connect b ~sgn:Button.Signals.clicked
-         ~callback: c; b
-  external insert_widget :
-      [>`toolbar] obj -> [>`widget] obj ->
-      tooltip:string -> tooltip_private:string -> pos:int -> unit
-      = "ml_gtk_toolbar_insert_widget"
-  let insert_widget w ?(tooltip="") ?(tooltip_private="") ?(pos = -1) w' =
-    insert_widget w w' ~tooltip ~tooltip_private ~pos
-  external set_orientation : [>`toolbar] obj -> orientation -> unit =
-    "ml_gtk_toolbar_set_orientation"
-  external set_style : [>`toolbar] obj -> toolbar_style -> unit =
-    "ml_gtk_toolbar_set_style"
-  external set_space_size : [>`toolbar] obj -> int -> unit =
-    "ml_gtk_toolbar_set_space_size"
-  external set_space_style : [>`toolbar] obj -> [ `EMPTY|`LINE ] -> unit =
-    "ml_gtk_toolbar_set_space_style"
-  external set_tooltips : [>`toolbar] obj -> bool -> unit =
-    "ml_gtk_toolbar_set_tooltips"
-  external set_button_relief : [>`toolbar] obj -> relief_style -> unit =
-    "ml_gtk_toolbar_set_button_relief"
-  external get_button_relief : [>`toolbar] obj -> relief_style =
-    "ml_gtk_toolbar_get_button_relief"
-  let set ?orientation ?style ?space_size
-      ?space_style ?tooltips ?button_relief w =
-    may orientation ~f:(set_orientation w);
-    may style ~f:(set_style w);
-    may space_size ~f:(set_space_size w);
-    may space_style ~f:(set_space_style w);
-    may tooltips ~f:(set_tooltips w);
-    may button_relief ~f:(set_button_relief w)
-  module Signals = struct
-    open GtkSignal
-    external val_orientation : int -> orientation = "ml_Val_orientation"
-    external val_toolbar_style : int -> toolbar_style
-       = "ml_Val_toolbar_style"
-    let orientation_changed : ([>`toolbar],_) t =
-      let marshal f = marshal_int (fun x -> f (val_orientation x)) in
-      { name = "orientation_changed"; marshaller = marshal }
-    let style_changed : ([>`toolbar],_) t =
-      let marshal f = marshal_int (fun x -> f (val_toolbar_style x)) in
-      { name = "style_changed"; marshaller = marshal }
-  end
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkData.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkData.ml
deleted file mode 100644 (file)
index 5b7f90e..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-
-module AccelGroup = struct
-  external create : unit -> accel_group = "ml_gtk_accel_group_new"
-  external activate :
-      accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> bool
-      = "ml_gtk_accel_group_activate"
-  external groups_activate :
-      'a obj -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> bool
-      = "ml_gtk_accel_groups_activate"
-  external attach : accel_group -> 'a obj -> unit
-      = "ml_gtk_accel_group_attach"
-  external detach : accel_group -> 'a obj -> unit
-      = "ml_gtk_accel_group_detach"
-  external lock : accel_group -> unit
-      = "ml_gtk_accel_group_lock"
-  external unlock : accel_group -> unit
-      = "ml_gtk_accel_group_unlock"
-  external lock_entry :
-      accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> bool
-      = "ml_gtk_accel_group_lock_entry"
-  external add :
-      accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list ->
-      ?flags:accel_flag list ->
-      call:'a obj -> sgn:('a,unit->unit) GtkSignal.t -> unit
-      = "ml_gtk_accel_group_add_bc" "ml_gtk_accel_group_add"
-  external remove :
-      accel_group ->
-      key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> call:'a obj -> unit
-      = "ml_gtk_accel_group_remove"
-  external valid : key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> bool
-      = "ml_gtk_accelerator_valid"
-  external set_default_mod_mask : Gdk.Tags.modifier list option -> unit
-      = "ml_gtk_accelerator_set_default_mod_mask"
-end
-
-module Style = struct
-  external create : unit -> style = "ml_gtk_style_new"
-  external copy : style -> style = "ml_gtk_style_copy"
-  external attach : style -> Gdk.window -> style = "ml_gtk_style_attach"
-  external detach : style -> unit = "ml_gtk_style_detach"
-  external set_background : style -> Gdk.window -> state_type -> unit
-      = "ml_gtk_style_set_background"
-  external draw_hline :
-      style -> Gdk.window -> state_type -> x:int -> x:int -> y:int -> unit
-      = "ml_gtk_draw_hline_bc" "ml_gtk_draw_hline"
-  external draw_vline :
-      style -> Gdk.window -> state_type -> y:int -> y:int -> x:int -> unit
-      = "ml_gtk_draw_vline_bc" "ml_gtk_draw_vline"
-  external get_bg : style -> state:state_type -> Gdk.Color.t
-      = "ml_gtk_style_get_bg"
-  external set_bg : style -> state:state_type -> color:Gdk.Color.t -> unit
-      = "ml_gtk_style_set_bg"
-  external get_dark_gc : style -> state:state_type -> Gdk.gc
-      = "ml_gtk_style_get_dark_gc"
-  external get_light_gc : style -> state:state_type -> Gdk.gc
-      = "ml_gtk_style_get_light_gc"
-  external get_colormap : style -> Gdk.colormap = "ml_gtk_style_get_colormap"
-  external get_font : style -> Gdk.font = "ml_gtk_style_get_font"
-  external set_font : style -> Gdk.font -> unit = "ml_gtk_style_set_font"
-(*
-  let set st ?:background ?:font =
-    let may_set f = may fun:(f st) in
-    may_set set_background background;
-    may_set set_font font
-*)
-end
-
-module Data = struct
-  module Signals = struct
-    open GtkSignal
-    let disconnect : ([>`data],_) t =
-      { name = "disconnect"; marshaller = marshal_unit }
-  end
-end
-
-module Adjustment = struct
-  external create :
-      value:float -> lower:float -> upper:float ->
-      step_incr:float -> page_incr:float -> page_size:float -> adjustment obj
-      = "ml_gtk_adjustment_new_bc" "ml_gtk_adjustment_new"
-  external set_value : [>`adjustment] obj -> float -> unit
-      = "ml_gtk_adjustment_set_value"
-  external clamp_page :
-      [>`adjustment] obj -> lower:float -> upper:float -> unit
-      = "ml_gtk_adjustment_clamp_page"
-  external get_lower : [>`adjustment] obj -> float
-      = "ml_gtk_adjustment_get_lower"
-  external get_upper : [>`adjustment] obj -> float
-      = "ml_gtk_adjustment_get_upper"
-  external get_value : [>`adjustment] obj -> float
-      = "ml_gtk_adjustment_get_value"
-  external get_step_increment : [>`adjustment] obj -> float
-      = "ml_gtk_adjustment_get_step_increment"
-  external get_page_increment : [>`adjustment] obj -> float
-      = "ml_gtk_adjustment_get_page_increment"
-  external get_page_size : [>`adjustment] obj -> float
-      = "ml_gtk_adjustment_get_page_size"
-  module Signals = struct
-    open GtkSignal
-    let changed : ([>`adjustment],_) t =
-      { name = "changed"; marshaller = marshal_unit }
-    let value_changed : ([>`adjustment],_) t =
-      { name = "value_changed"; marshaller = marshal_unit }
-  end
-end
-
-module Tooltips = struct
-  external create : unit -> tooltips obj = "ml_gtk_tooltips_new"
-  external enable : [>`tooltips] obj -> unit = "ml_gtk_tooltips_enable"
-  external disable : [>`tooltips] obj -> unit = "ml_gtk_tooltips_disable"
-  external set_delay : [>`tooltips] obj -> int -> unit
-      = "ml_gtk_tooltips_set_delay"
-  external set_tip :
-      [>`tooltips] obj ->
-      [>`widget] obj -> ?text:string -> ?privat:string -> unit
-      = "ml_gtk_tooltips_set_tip"
-  external set_colors :
-      [>`tooltips] obj ->
-      ?foreground:Gdk.Color.t -> ?background:Gdk.Color.t -> unit -> unit
-      = "ml_gtk_tooltips_set_colors"
-  let set ?delay ?foreground ?background tt =
-    may ~f:(set_delay tt) delay;
-    if foreground <> None || background <> None then
-      set_colors tt ?foreground ?background ()
-end
-
-
-module Selection = struct
-  type t
-  external selection : t -> Gdk.atom
-      = "ml_gtk_selection_data_selection"
-  external target : t -> Gdk.atom
-      = "ml_gtk_selection_data_target"
-  external seltype : t -> Gdk.atom
-      = "ml_gtk_selection_data_type"
-  external format : t -> int
-      = "ml_gtk_selection_data_format"
-  external get_data : t -> string
-      = "ml_gtk_selection_data_get_data"       (* May raise Gpointer.null *)
-  external set :
-      t -> typ:Gdk.atom -> format:int -> ?data:string -> unit
-      = "ml_gtk_selection_data_set"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkEdit.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkEdit.ml
deleted file mode 100644 (file)
index bef2fed..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module Editable = struct
-  let cast w : editable obj = Object.try_cast w "GtkEditable"
-  external coerce : [>`editable] obj -> editable obj = "%identity"
-  external select_region : [>`editable] obj -> start:int -> stop:int -> unit
-      = "ml_gtk_editable_select_region"
-  external insert_text : [>`editable] obj -> string -> pos:int -> int
-      = "ml_gtk_editable_insert_text"
-  external delete_text : [>`editable] obj -> start:int -> stop:int -> unit
-      = "ml_gtk_editable_delete_text"
-  external get_chars : [>`editable] obj -> start:int -> stop:int -> string
-      = "ml_gtk_editable_get_chars"
-  external cut_clipboard : [>`editable] obj -> unit
-      = "ml_gtk_editable_cut_clipboard"
-  external copy_clipboard : [>`editable] obj -> unit
-      = "ml_gtk_editable_copy_clipboard"
-  external paste_clipboard : [>`editable] obj -> unit
-      = "ml_gtk_editable_paste_clipboard"
-  external claim_selection :
-      [>`editable] obj -> claim:bool -> time:int -> unit
-      = "ml_gtk_editable_claim_selection"
-  external delete_selection : [>`editable] obj -> unit
-      = "ml_gtk_editable_delete_selection"
-  external changed : [>`editable] obj -> unit = "ml_gtk_editable_changed"
-  external set_position : [>`editable] obj -> int -> unit
-      = "ml_gtk_editable_set_position"
-  external get_position : [>`editable] obj -> int
-      = "ml_gtk_editable_get_position"
-  external set_editable : [>`editable] obj -> bool -> unit
-      = "ml_gtk_editable_set_editable"
-  external selection_start_pos : [>`editable] obj -> int
-      = "ml_gtk_editable_selection_start_pos"
-  external selection_end_pos : [>`editable] obj -> int
-      = "ml_gtk_editable_selection_end_pos"
-  external has_selection : [>`editable] obj -> bool
-      = "ml_gtk_editable_has_selection"
-  module Signals = struct
-    open GtkArgv
-    open GtkSignal
-    let activate : ([>`editable],_) t =
-      { name = "activate"; marshaller = marshal_unit }
-    let changed : ([>`editable],_) t =
-      { name = "changed"; marshaller = marshal_unit }
-    let marshal_insert f argv = function
-      | STRING _ :: INT len :: POINTER(Some pos) :: _ ->
-          (* XXX These two accesses are implementation-dependent *)
-          let s = string_at_pointer (get_pointer argv ~pos:0) ~len
-          and pos = int_at_pointer pos in
-          f s ~pos
-      | _ -> invalid_arg "GtkEdit.Editable.Signals.marshal_insert"
-    let insert_text : ([>`editable],_) t =
-      { name = "insert_text"; marshaller = marshal_insert }
-    let marshal_delete f _ = function
-      | INT start :: INT stop :: _ ->
-          f ~start ~stop
-      | _ -> invalid_arg "GtkEdit.Editable.Signals.marshal_delete"
-    let delete_text : ([>`editable],_) t =
-      { name = "delete_text"; marshaller = marshal_delete }
-  end
-end
-
-module Entry = struct
-  let cast w : entry obj = Object.try_cast w "GtkEntry"
-  external coerce : [>`entry] obj -> entry obj = "%identity"
-  external create : unit -> entry obj = "ml_gtk_entry_new"
-  external create_with_max_length : int -> entry obj
-      = "ml_gtk_entry_new_with_max_length"
-  let create ?max_length () =
-    match max_length with None -> create ()
-    | Some len -> create_with_max_length len
-  external set_text : [>`entry] obj -> string -> unit
-      = "ml_gtk_entry_set_text"
-  external append_text : [>`entry] obj -> string -> unit
-      = "ml_gtk_entry_append_text"
-  external prepend_text : [>`entry] obj -> string -> unit
-      = "ml_gtk_entry_prepend_text"
-  external get_text : [>`entry] obj -> string = "ml_gtk_entry_get_text"
-  external set_visibility : [>`entry] obj -> bool -> unit
-      = "ml_gtk_entry_set_visibility"
-  external set_max_length : [>`entry] obj -> int -> unit
-      = "ml_gtk_entry_set_max_length"
-  let set ?text ?visibility ?max_length w =
-    let may_set f = may ~f:(f w) in
-    may_set set_text text;
-    may_set set_visibility visibility;
-    may_set set_max_length max_length
-  external text_length : [>`entry] obj -> int
-      = "ml_GtkEntry_text_length"
-end
-
-module SpinButton = struct
-  let cast w : spin_button obj = Object.try_cast w "GtkSpinButton"
-  external create :
-      [>`adjustment] optobj -> rate:float -> digits:int -> spin_button obj
-      = "ml_gtk_spin_button_new"
-  let create ?adjustment ?(rate=0.5) ?(digits=0) () =
-    create (Gpointer.optboxed adjustment) ~rate ~digits
-  external configure :
-    [>`spinbutton] obj -> adjustment:[>`adjustment] obj ->
-    rate:float -> digits:int -> unit
-    = "ml_gtk_spin_button_configure"
-  external set_adjustment : [>`spinbutton] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_spin_button_set_adjustment"
-  external get_adjustment : [>`spinbutton] obj -> adjustment obj
-      = "ml_gtk_spin_button_get_adjustment"
-  external set_digits : [>`spinbutton] obj -> int -> unit
-      = "ml_gtk_spin_button_set_digits"
-  external get_value : [>`spinbutton] obj -> float
-      = "ml_gtk_spin_button_get_value_as_float"
-  let get_value_as_int w = truncate (get_value w +. 0.5)
-  external set_value : [>`spinbutton] obj -> float -> unit
-      = "ml_gtk_spin_button_set_value"
-  external set_update_policy :
-      [>`spinbutton] obj -> [`ALWAYS|`IF_VALID] -> unit
-      = "ml_gtk_spin_button_set_update_policy"
-  external set_numeric : [>`spinbutton] obj -> bool -> unit
-      = "ml_gtk_spin_button_set_numeric"
-  external spin : [>`spinbutton] obj -> spin_type -> unit
-      = "ml_gtk_spin_button_spin"
-  external set_wrap : [>`spinbutton] obj -> bool -> unit
-      = "ml_gtk_spin_button_set_wrap"
-  external set_shadow_type : [>`spinbutton] obj -> shadow_type -> unit
-      = "ml_gtk_spin_button_set_shadow_type"
-  external set_snap_to_ticks : [>`spinbutton] obj -> bool -> unit
-      = "ml_gtk_spin_button_set_snap_to_ticks"
-  external update : [>`spinbutton] obj -> unit
-      = "ml_gtk_spin_button_update"
-  let set ?adjustment ?digits ?value ?update_policy
-      ?numeric ?wrap ?shadow_type ?snap_to_ticks w =
-    let may_set f = may ~f:(f w) in
-    may_set set_adjustment adjustment;
-    may_set set_digits digits;
-    may_set set_value value;
-    may_set set_update_policy update_policy;
-    may_set set_numeric numeric;
-    may_set set_wrap wrap;
-    may_set set_shadow_type shadow_type;
-    may_set set_snap_to_ticks snap_to_ticks
-end
-
-module Text = struct
-  let cast w : text obj = Object.try_cast w "GtkText"
-  external create : [>`adjustment] optobj -> [>`adjustment] optobj -> text obj
-      = "ml_gtk_text_new"
-  let create ?hadjustment ?vadjustment () =
-    create (Gpointer.optboxed hadjustment) (Gpointer.optboxed vadjustment)
-  external set_word_wrap : [>`text] obj -> bool -> unit
-      = "ml_gtk_text_set_word_wrap"
-  external set_line_wrap : [>`text] obj -> bool -> unit
-      = "ml_gtk_text_set_line_wrap"
-  external set_adjustment :
-      [>`text] obj -> ?horizontal:[>`adjustment] obj ->
-      ?vertical:[>`adjustment] obj -> unit -> unit
-      = "ml_gtk_text_set_adjustments"
-  external get_hadjustment : [>`text] obj -> adjustment obj
-      = "ml_gtk_text_get_hadj"
-  external get_vadjustment : [>`text] obj -> adjustment obj
-      = "ml_gtk_text_get_vadj"
-  external set_point : [>`text] obj -> int -> unit
-      = "ml_gtk_text_set_point"
-  external get_point : [>`text] obj -> int = "ml_gtk_text_get_point"
-  external get_length : [>`text] obj -> int = "ml_gtk_text_get_length"
-  external freeze : [>`text] obj -> unit = "ml_gtk_text_freeze"
-  external thaw : [>`text] obj -> unit = "ml_gtk_text_thaw"
-  external insert :
-      [>`text] obj -> ?font:Gdk.font -> ?foreground:Gdk.Color.t ->
-      ?background:Gdk.Color.t -> string -> unit
-      = "ml_gtk_text_insert"
-  let set ?hadjustment ?vadjustment ?word_wrap w =
-    if hadjustment <> None || vadjustment <> None then
-      set_adjustment w ?horizontal: hadjustment ?vertical: vadjustment ();
-    may word_wrap ~f:(set_word_wrap w)
-end
-
-module Combo = struct
-  let cast w : combo obj = Object.try_cast w "GtkCombo"
-  external create : unit -> combo obj = "ml_gtk_combo_new"
-  external set_value_in_list :
-      [>`combo] obj -> ?required:bool -> ?ok_if_empty:bool -> unit -> unit
-      = "ml_gtk_combo_set_value_in_list"
-  external set_use_arrows : [>`combo] obj -> bool -> unit
-      = "ml_gtk_combo_set_use_arrows"
-  external set_use_arrows_always : [>`combo] obj -> bool -> unit
-      = "ml_gtk_combo_set_use_arrows_always"
-  external set_case_sensitive : [>`combo] obj -> bool -> unit
-      = "ml_gtk_combo_set_case_sensitive"
-  external set_item_string : [>`combo] obj -> [>`item] obj -> string -> unit
-      = "ml_gtk_combo_set_item_string"
-  external entry : [>`combo] obj -> entry obj= "ml_gtk_combo_entry"
-  external list : [>`combo] obj -> liste obj= "ml_gtk_combo_list"
-  let set_popdown_strings combo strings =
-    GtkList.Liste.clear_items (list combo) ~start:0 ~stop:(-1);
-    List.iter strings ~f:
-      begin fun s ->
-       let li = GtkList.ListItem.create_with_label s in
-       Widget.show li;
-       Container.add (list combo) li
-      end
-  let set_use_arrows' w (mode : [`NEVER|`DEFAULT|`ALWAYS]) =
-    let def,always =
-      match mode with
-       `NEVER -> false, false
-      |        `DEFAULT -> true, false
-      |        `ALWAYS -> true, true
-    in
-    set_use_arrows w def;
-    set_use_arrows_always w always
-  let set ?popdown_strings ?use_arrows
-      ?case_sensitive ?value_in_list ?ok_if_empty w =
-    may popdown_strings ~f:(set_popdown_strings w);
-    may use_arrows ~f:(set_use_arrows' w);
-    may case_sensitive ~f:(set_case_sensitive w);
-    if value_in_list <> None || ok_if_empty <> None then
-      set_value_in_list w ?required:value_in_list ?ok_if_empty ()
-  external disable_activate : [>`combo] obj -> unit
-      = "ml_gtk_combo_disable_activate"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkInit.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkInit.ml
deleted file mode 100644 (file)
index 5ce40db..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-(* $Id$ *)
-
-(* Does the initialization for toplevels *)
-
-let locale = GtkMain.Main.init ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkList.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkList.ml
deleted file mode 100644 (file)
index 4d2ae09..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module ListItem = struct
-  let cast w : list_item obj = Object.try_cast w "GtkListItem"
-  external create : unit -> list_item obj = "ml_gtk_list_item_new"
-  external create_with_label : string -> list_item obj
-      = "ml_gtk_list_item_new_with_label"
-  let create ?label () =
-    match label with None -> create ()
-    | Some label -> create_with_label label
-end
-
-module Liste = struct
-  let cast w : liste obj = Object.try_cast w "GtkList"
-  external create : unit -> liste obj = "ml_gtk_list_new"
-  external insert_item :
-      [>`list] obj -> [>`listitem] obj -> pos:int -> unit
-      = "ml_gtk_list_insert_item"
-  let insert_items l wl ~pos =
-    let wl = if pos < 0 then wl else List.rev wl in
-    List.iter wl ~f:(insert_item l ~pos)
-  let append_items l = insert_items l ~pos:(-1)
-  let prepend_items l = insert_items l ~pos:0
-  external clear_items : [>`list] obj -> start:int -> stop:int -> unit =
-    "ml_gtk_list_clear_items"
-  external select_item : [>`list] obj -> pos:int -> unit
-      = "ml_gtk_list_select_item"
-  external unselect_item : [>`list] obj -> pos:int -> unit
-      = "ml_gtk_list_unselect_item"
-  external select_child : [>`list] obj -> [>`listitem] obj -> unit
-      = "ml_gtk_list_select_child"
-  external unselect_child : [>`list] obj -> [>`listitem] obj -> unit
-      = "ml_gtk_list_unselect_child"
-  external child_position : [>`list] obj -> [>`listitem] obj -> int
-      = "ml_gtk_list_child_position"
-  external set_selection_mode : [>`list] obj -> selection_mode -> unit
-      = "ml_gtk_list_set_selection_mode"
-  module Signals = struct
-    open GtkSignal
-    let selection_changed : ([>`list],_) t =
-      { name = "selection_changed"; marshaller = marshal_unit }
-    let select_child : ([>`list],_) t =
-      { name = "select_child"; marshaller = Widget.Signals.marshal }
-    let unselect_child : ([>`list],_) t =
-      { name = "unselect_child"; marshaller = Widget.Signals.marshal }
-  end
-end
-
-module CList = struct
-  let cast w : clist obj = Object.try_cast w "GtkCList"
-  external create : cols:int -> clist obj = "ml_gtk_clist_new"
-  external create_with_titles : string array -> clist obj
-      = "ml_gtk_clist_new_with_titles"
-  external get_rows : [>`clist] obj -> int = "ml_gtk_clist_get_rows"
-  external get_columns : [>`clist] obj -> int = "ml_gtk_clist_get_columns"
-  external get_focus_row : [>`clist] obj -> int
-      = "ml_gtk_clist_get_focus_row"
-  external set_hadjustment : [>`clist] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_clist_set_hadjustment"
-  external set_vadjustment : [>`clist] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_clist_set_vadjustment"
-  external get_hadjustment : [>`clist] obj -> adjustment obj
-      = "ml_gtk_clist_get_hadjustment"
-  external get_vadjustment : [>`clist] obj -> adjustment obj
-      = "ml_gtk_clist_get_vadjustment"
-  external set_shadow_type : [>`clist] obj -> shadow_type -> unit
-      = "ml_gtk_clist_set_shadow_type"
-  external set_selection_mode : [>`clist] obj -> selection_mode -> unit
-      = "ml_gtk_clist_set_selection_mode"
-  external set_reorderable : [>`clist] obj -> bool -> unit
-      = "ml_gtk_clist_set_reorderable"
-  external set_use_drag_icons : [>`clist] obj -> bool -> unit
-      = "ml_gtk_clist_set_use_drag_icons"
-  external set_button_actions :
-      [>`clist] obj -> int -> button_action list -> unit
-      = "ml_gtk_clist_set_button_actions"
-  external freeze : [>`clist] obj -> unit = "ml_gtk_clist_freeze"
-  external thaw : [>`clist] obj -> unit = "ml_gtk_clist_thaw"
-  external column_titles_show : [>`clist] obj -> unit
-      = "ml_gtk_clist_column_titles_show"
-  external column_titles_hide : [>`clist] obj -> unit
-      = "ml_gtk_clist_column_titles_hide"
-  external column_title_active : [>`clist] obj -> int -> unit
-      = "ml_gtk_clist_column_title_active"
-  external column_title_passive : [>`clist] obj -> int -> unit
-      = "ml_gtk_clist_column_title_passive"
-  external column_titles_active : [>`clist] obj -> unit
-      = "ml_gtk_clist_column_titles_active"
-  external column_titles_passive : [>`clist] obj -> unit
-      = "ml_gtk_clist_column_titles_passive"
-  external set_column_title : [>`clist] obj -> int -> string -> unit
-      = "ml_gtk_clist_set_column_title"
-  external get_column_title : [>`clist] obj -> int -> string
-      = "ml_gtk_clist_get_column_title"
-  external set_column_widget : [>`clist] obj -> int -> [>`widget] obj -> unit
-      = "ml_gtk_clist_set_column_widget"
-  external get_column_widget : [>`clist] obj -> int -> widget obj
-      = "ml_gtk_clist_get_column_widget"
-  external set_column_justification :
-      [>`clist] obj -> int -> justification -> unit
-      = "ml_gtk_clist_set_column_justification"
-  external set_column_visibility : [>`clist] obj -> int -> bool -> unit
-      = "ml_gtk_clist_set_column_visibility"
-  external set_column_resizeable : [>`clist] obj -> int -> bool -> unit
-      = "ml_gtk_clist_set_column_resizeable"
-  external set_column_auto_resize : [>`clist] obj -> int -> bool -> unit
-      = "ml_gtk_clist_set_column_auto_resize"
-  external columns_autosize : [>`clist] obj -> unit
-      = "ml_gtk_clist_columns_autosize"
-  external optimal_column_width : [>`clist] obj -> int -> int
-      = "ml_gtk_clist_optimal_column_width"
-  external set_column_width : [>`clist] obj -> int -> int -> unit
-      = "ml_gtk_clist_set_column_width"
-  external set_column_min_width : [>`clist] obj -> int -> int -> unit
-      = "ml_gtk_clist_set_column_min_width"
-  external set_column_max_width : [>`clist] obj -> int -> int -> unit
-      = "ml_gtk_clist_set_column_max_width"
-  external set_row_height : [>`clist] obj -> int -> unit
-      = "ml_gtk_clist_set_row_height"
-  external moveto :
-      [>`clist] obj ->
-      int -> int -> row_align:clampf -> col_align:clampf -> unit
-      = "ml_gtk_clist_moveto"
-  external row_is_visible : [>`clist] obj -> int -> visibility
-      = "ml_gtk_clist_row_is_visible"
-  external get_cell_type : [>`clist] obj -> int -> int -> cell_type
-      = "ml_gtk_clist_get_cell_type"
-  external set_text : [>`clist] obj -> int -> int -> string -> unit
-      = "ml_gtk_clist_set_text"
-  external get_text : [>`clist] obj -> int -> int -> string
-      = "ml_gtk_clist_get_text"
-  external set_pixmap :
-      [>`clist] obj ->
-      int -> int -> Gdk.pixmap -> Gdk.bitmap Gpointer.optboxed -> unit
-      = "ml_gtk_clist_set_pixmap"
-  external get_pixmap :
-      [>`clist] obj -> int -> int -> Gdk.pixmap option * Gdk.bitmap option
-      = "ml_gtk_clist_get_pixmap"
-  external set_pixtext :
-      [>`clist] obj -> int -> int ->
-      string -> int -> Gdk.pixmap -> Gdk.bitmap Gpointer.optboxed -> unit
-      = "ml_gtk_clist_set_pixtext_bc" "ml_gtk_clist_set_pixtext"
-  external set_foreground :
-      [>`clist] obj -> row:int -> Gdk.Color.t Gpointer.optboxed -> unit
-      = "ml_gtk_clist_set_foreground"
-  external set_background :
-      [>`clist] obj -> row:int -> Gdk.Color.t Gpointer.optboxed -> unit
-      = "ml_gtk_clist_set_background"
-  external get_cell_style : [>`clist] obj -> int -> int -> Gtk.style
-      = "ml_gtk_clist_get_cell_style"
-  external set_cell_style : [>`clist] obj -> int -> int -> Gtk.style -> unit
-      = "ml_gtk_clist_set_cell_style"
-  external get_row_style : [>`clist] obj -> row:int -> Gtk.style
-      = "ml_gtk_clist_get_row_style"
-  external set_row_style : [>`clist] obj -> row:int -> Gtk.style -> unit
-      = "ml_gtk_clist_set_row_style"
-  external set_selectable : [>`clist] obj -> row:int -> bool -> unit
-      = "ml_gtk_clist_set_selectable"
-  external get_selectable : [>`clist] obj -> row:int -> bool
-      = "ml_gtk_clist_get_selectable"
-  external set_shift :
-      [>`clist] obj -> int -> int -> vertical:int -> horizontal:int -> unit
-      = "ml_gtk_clist_set_shift"
-  external insert : [>`clist] obj -> row:int -> Gpointer.optstring array -> int
-      = "ml_gtk_clist_insert"
-  let insert w ~row texts =
-    let len = get_columns w in
-    if List.length texts > len then invalid_arg "CList.insert";
-    let arr = Array.create (get_columns w) None in
-    List.fold_left texts ~init:0
-      ~f:(fun pos text -> arr.(pos) <- text; pos+1);
-    let r = insert w ~row (Array.map ~f:Gpointer.optstring arr) in
-    if r = -1 then invalid_arg "GtkCList::insert";
-    r
-  external remove : [>`clist] obj -> row:int -> unit
-      = "ml_gtk_clist_remove"
-  external set_row_data : [>`clist] obj -> row:int -> Obj.t -> unit
-      = "ml_gtk_clist_set_row_data"
-  external get_row_data : [>`clist] obj -> row:int -> Obj.t
-      = "ml_gtk_clist_get_row_data"
-  external select : [>`clist] obj -> int -> int -> unit
-      = "ml_gtk_clist_select_row"
-  external unselect : [>`clist] obj -> int -> int -> unit
-      = "ml_gtk_clist_unselect_row"
-  external clear : [>`clist] obj -> unit = "ml_gtk_clist_clear"
-  external get_row_column : [>`clist] obj -> x:int -> y:int -> int * int
-      = "ml_gtk_clist_get_selection_info"
-  external select_all : [>`clist] obj -> unit = "ml_gtk_clist_select_all"
-  external unselect_all : [>`clist] obj -> unit = "ml_gtk_clist_unselect_all"
-  external swap_rows : [>`clist] obj -> int -> int -> unit
-      = "ml_gtk_clist_swap_rows"
-  external row_move : [>`clist] obj -> int -> dst:int -> unit
-      = "ml_gtk_clist_row_move"
-  external set_sort_column : [>`clist] obj -> int -> unit
-      = "ml_gtk_clist_set_sort_column"
-  external set_sort_type : [>`clist] obj -> sort_type -> unit
-      = "ml_gtk_clist_set_sort_type"
-  external sort : [>`clist] obj -> unit
-      = "ml_gtk_clist_sort"
-  external set_auto_sort : [>`clist] obj -> bool -> unit
-      = "ml_gtk_clist_set_auto_sort"
-  let set_titles_show w = function
-      true -> column_titles_show w
-    | false -> column_titles_hide w
-  let set_titles_active w = function
-      true -> column_titles_active w
-    | false -> column_titles_passive w
-  let set ?hadjustment ?vadjustment ?shadow_type
-      ?(button_actions=[]) ?selection_mode ?reorderable
-      ?use_drag_icons ?row_height ?titles_show ?titles_active w =
-    let may_set f param = may param ~f:(f w) in
-    may_set set_hadjustment hadjustment;
-    may_set set_vadjustment vadjustment;
-    may_set set_shadow_type shadow_type;
-    List.iter button_actions ~f:(fun (n,act) -> set_button_actions w n act);
-    may_set set_selection_mode selection_mode;
-    may_set set_reorderable reorderable;
-    may_set set_use_drag_icons use_drag_icons;
-    may_set set_row_height row_height;
-    may_set set_titles_show titles_show;
-    may_set set_titles_active titles_active
-  let set_sort w ?auto ?column ?dir:sort_type () =
-    may auto ~f:(set_auto_sort w);
-    may column ~f:(set_sort_column w);
-    may sort_type ~f:(set_sort_type w)
-  let set_cell w ?text ?pixmap ?mask ?(spacing=0) ?style row col =
-    begin match text, pixmap with
-    | Some text, None ->
-        set_text w row col text
-    | None, Some pm ->
-        set_pixmap w row col pm (Gpointer.optboxed mask)
-    | Some text, Some pm ->
-        set_pixtext w row col text spacing pm (Gpointer.optboxed mask)
-    | _ -> ()
-    end;
-    may style ~f:(set_cell_style w row col)
-  let set_column w ?widget ?title ?title_active ?justification
-      ?visibility ?resizeable ?auto_resize ?width ?min_width ?max_width
-      col =
-    let may_set f param = may param ~f:(f w col) in
-    may_set set_column_widget widget;
-    may_set set_column_title title;
-    may title_active
-      ~f:(fun active -> if active then column_title_active w col
-                                   else column_title_passive w col);
-    may_set set_column_justification justification;
-    may_set set_column_visibility visibility;
-    may_set set_column_resizeable resizeable;
-    may_set set_column_auto_resize auto_resize;
-    may_set set_column_width width;
-    may_set set_column_min_width min_width;
-    may_set set_column_max_width max_width
-  let set_row w ?foreground ?background ?selectable ?style row =
-    let may_set f = may ~f:(f w ~row) in
-    may_set set_foreground foreground;
-    may_set set_background  background;
-    may_set set_selectable  selectable;
-    may_set set_row_style style
-  module Signals = struct
-    open GtkArgv
-    open GtkSignal
-    let marshal_select f argv = function
-      | INT row :: INT column :: POINTER p :: _ ->
-          let event : GdkEvent.Button.t option =
-           may_map ~f:GdkEvent.unsafe_copy p
-          in
-          f ~row ~column ~event
-      | _ -> invalid_arg "GtkList.CList.Signals.marshal_select"
-    let select_row : ([>`clist],_) t =
-      { name = "select_row"; marshaller = marshal_select }
-    let unselect_row : ([>`clist],_) t =
-      { name = "unselect_row"; marshaller = marshal_select }
-    let click_column : ([>`clist],_) t =
-      { name = "click_column"; marshaller = marshal_int }
-    external val_scroll_type : int -> scroll_type = "ml_Val_scroll_type"
-    let marshal_scroll f argv = function
-      | INT st :: FLOAT (pos : clampf) :: _ ->
-          f (val_scroll_type st) ~pos
-      | _ -> invalid_arg "GtkList.CList.Signals.marshal_scroll"
-    let scroll_horizontal : ([>`clist],_) t =
-      { name = "scroll_horizontal"; marshaller = marshal_scroll }
-    let scroll_vertical : ([>`clist],_) t =
-      { name = "scroll_vertical"; marshaller = marshal_scroll }
-    external emit_scroll :
-        'a obj -> name:string -> Tags.scroll_type -> pos:clampf -> unit
-        = "ml_gtk_signal_emit_scroll"
-    let emit_scroll = emit ~emitter:emit_scroll
-  end
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkMain.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkMain.ml
deleted file mode 100644 (file)
index 7ef3443..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-let _ = Callback.register_exception "gtkerror" (Error"")
-
-module Timeout = struct
-  type id
-  external add : ms:int -> callback:(GtkArgv.t -> unit) -> id
-      = "ml_gtk_timeout_add"
-  let add ~ms ~callback =
-    add ~ms ~callback:(fun arg -> GtkArgv.set_result arg (`BOOL(callback ())))
-  external remove : id -> unit = "ml_gtk_timeout_remove"
-end
-
-module Main = struct
-  external init : string array -> string array = "ml_gtk_init"
-  (* external exit : int -> unit = "ml_gtk_exit" *)
-  external set_locale : unit -> string = "ml_gtk_set_locale"
-  (* external main : unit -> unit = "ml_gtk_main" *)
-  let locale = set_locale ()
-  let init () =
-    (* let locale = set_locale () in *)
-    let argv = init Sys.argv in
-    Array.blit ~src:argv ~dst:Sys.argv ~len:(Array.length argv)
-      ~src_pos:0 ~dst_pos:0;
-    Obj.truncate (Obj.repr Sys.argv) ~len:(Array.length argv);
-    locale
-  open Glib
-  let loops = ref [] 
-  let main () =
-    let loop = (Main.create true) in
-    loops := loop :: !loops;
-    while Main.is_running loop do Main.iteration true done;
-    loops := List.tl !loops
-  and quit () = Main.quit (List.hd !loops)
-  external get_version : unit -> int * int * int = "ml_gtk_get_version"
-  let version = get_version ()
-
-  let flush = Gdk.X.flush
-end
-
-module Grab = struct
-  external add : [>`widget] obj -> unit = "ml_gtk_grab_add"
-  external remove : [>`widget] obj -> unit = "ml_gtk_grab_remove"
-  external get_current : unit -> widget obj= "ml_gtk_grab_get_current"
-end
-
-let _ = Glib.set_warning_handler (fun msg -> raise (Warning msg))
-let _ = Glib.set_print_handler (fun msg -> print_string msg)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkMenu.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkMenu.ml
deleted file mode 100644 (file)
index 2f1eb30..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-
-module MenuItem = struct
-  let cast w : menu_item obj = Object.try_cast w "GtkMenuItem"
-  external coerce : [>`menuitem] obj -> menu_item obj = "%identity"
-  external create : unit -> menu_item obj = "ml_gtk_menu_item_new"
-  external create_with_label : string -> menu_item obj
-      = "ml_gtk_menu_item_new_with_label"
-  external tearoff_create : unit -> menu_item obj
-      = "ml_gtk_tearoff_menu_item_new"
-  let create ?label () =
-    match label with None -> create ()
-    | Some label -> create_with_label label
-  external set_submenu : [>`menuitem] obj -> [>`menu] obj -> unit
-      = "ml_gtk_menu_item_set_submenu"
-  external remove_submenu : [>`menuitem] obj -> unit
-      = "ml_gtk_menu_item_remove_submenu"
-  external configure :
-      [>`menuitem] obj -> show_toggle:bool -> show_indicator:bool -> unit
-      = "ml_gtk_menu_item_configure"
-  external activate : [>`menuitem] obj -> unit
-      = "ml_gtk_menu_item_activate"
-  external right_justify : [>`menuitem] obj -> unit
-      = "ml_gtk_menu_item_right_justify"
-  module Signals = struct
-    open GtkSignal
-    let activate : ([>`menuitem],_) t =
-      { name = "activate"; marshaller = marshal_unit }
-    let activate_item : ([>`menuitem],_) t =
-      { name = "activate_item"; marshaller = marshal_unit }
-  end
-end
-
-module CheckMenuItem = struct
-  let cast w : check_menu_item obj = Object.try_cast w "GtkCheckMenuItem"
-  external coerce : [>`checkmenuitem] obj -> check_menu_item obj = "%identity"
-  external create : unit -> check_menu_item obj = "ml_gtk_check_menu_item_new"
-  external create_with_label : string -> check_menu_item obj
-      = "ml_gtk_check_menu_item_new_with_label"
-  let create ?label () =
-    match label with None -> create ()
-    | Some label -> create_with_label label
-  external set_active : [>`checkmenuitem] obj -> bool -> unit
-      = "ml_gtk_check_menu_item_set_active"
-  external get_active : [>`checkmenuitem] obj -> bool
-      = "ml_gtk_check_menu_item_get_active"
-  external set_show_toggle : [>`checkmenuitem] obj -> bool -> unit
-      = "ml_gtk_check_menu_item_set_show_toggle"
-  let set ?active ?show_toggle w =
-    may active ~f:(set_active w);
-    may show_toggle ~f:(set_show_toggle w)
-  external toggled : [>`checkmenuitem] obj -> unit
-      = "ml_gtk_check_menu_item_toggled"
-  module Signals = struct
-    open GtkSignal
-    let toggled : ([>`checkmenuitem],_) t =
-      { name = "toggled"; marshaller = marshal_unit }
-  end
-end
-
-module RadioMenuItem = struct
-  let cast w : radio_menu_item obj = Object.try_cast w "GtkRadioMenuItem"
-  external create : radio_menu_item group -> radio_menu_item obj
-      = "ml_gtk_radio_menu_item_new"
-  external create_with_label :
-      radio_menu_item group -> string -> radio_menu_item obj
-      = "ml_gtk_radio_menu_item_new_with_label"
-  let create ?(group = None) ?label () =
-    match label with None -> create group
-    | Some label -> create_with_label group label
-  external set_group : [>`radiomenuitem] obj -> radio_menu_item group -> unit
-      = "ml_gtk_radio_menu_item_set_group"
-end
-
-module OptionMenu = struct
-  let cast w : option_menu obj = Object.try_cast w "GtkOptionMenu"
-  external create : unit -> option_menu obj = "ml_gtk_option_menu_new"
-  external get_menu : [>`optionmenu] obj -> menu obj
-      = "ml_gtk_option_menu_get_menu"
-  external set_menu : [>`optionmenu] obj -> [>`menu] obj -> unit
-      = "ml_gtk_option_menu_set_menu"
-  external remove_menu : [>`optionmenu] obj -> unit
-      = "ml_gtk_option_menu_remove_menu"
-  external set_history : [>`optionmenu] obj -> int -> unit
-      = "ml_gtk_option_menu_set_history"
-  let set ?menu ?history w =
-    may menu ~f:(set_menu w);
-    may history ~f:(set_history w)
-end
-
-module MenuShell = struct
-  let cast w : menu_shell obj = Object.try_cast w "GtkMenuShell"
-  external coerce : [>`menushell] obj -> menu_shell obj = "%identity"
-  external append : [>`menushell] obj -> [>`widget] obj -> unit
-      = "ml_gtk_menu_shell_append"
-  external prepend : [>`menushell] obj -> [>`widget] obj -> unit
-      = "ml_gtk_menu_shell_prepend"
-  external insert : [>`menushell] obj -> [>`widget] obj -> pos:int -> unit
-      = "ml_gtk_menu_shell_insert"
-  external deactivate : [>`menushell] obj -> unit
-      = "ml_gtk_menu_shell_deactivate"
-  module Signals = struct
-    open GtkSignal
-    let deactivate : ([>`menushell],_) t =
-      { name = "deactivate"; marshaller = marshal_unit }
-  end
-end
-
-module Menu = struct
-  let cast w : menu obj = Object.try_cast w "GtkMenu"
-  external create : unit -> menu obj = "ml_gtk_menu_new"
-  external popup :
-      [>`menu] obj -> [>`menushell] optobj ->
-      [>`menuitem] optobj -> button:int -> time:int -> unit
-      = "ml_gtk_menu_popup"
-  let popup ?parent_menu ?parent_item w =
-    popup w (Gpointer.optboxed parent_menu) (Gpointer.optboxed parent_item)
-  external popdown : [>`menu] obj -> unit = "ml_gtk_menu_popdown"
-  external get_active : [>`menu] obj -> widget obj= "ml_gtk_menu_get_active"
-  external set_active : [>`menu] obj -> int -> unit = "ml_gtk_menu_set_active"
-  external set_accel_group : [>`menu] obj -> accel_group -> unit
-      = "ml_gtk_menu_set_accel_group"
-  external get_accel_group : [>`menu] obj -> accel_group
-      = "ml_gtk_menu_get_accel_group"
-  external ensure_uline_accel_group : [>`menu] obj -> accel_group
-      = "ml_gtk_menu_ensure_uline_accel_group"
-  external attach_to_widget : [>`menu] obj -> [>`widget] obj -> unit
-      = "ml_gtk_menu_attach_to_widget"
-  external get_attach_widget : [>`menu] obj -> widget obj
-      = "ml_gtk_menu_get_attach_widget"
-  external detach : [>`menu] obj -> unit = "ml_gtk_menu_detach"
-  let set ?active ?accel_group w =
-    may active ~f:(set_active w);
-    may accel_group ~f:(set_accel_group w)
-end
-
-module MenuBar = struct
-  let cast w : menu_bar obj = Object.try_cast w "GtkMenuBar"
-  external create : unit -> menu_bar obj = "ml_gtk_menu_bar_new"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkMisc.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkMisc.ml
deleted file mode 100644 (file)
index ded7f48..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module GammaCurve = struct
-  let cast w : gamma_curve obj = Object.try_cast w "GtkGammaCurve"
-  external create : unit -> gamma_curve obj = "ml_gtk_gamma_curve_new"
-  external get_gamma : [>`gamma] obj -> float = "ml_gtk_gamma_curve_get_gamma"
-end
-
-module ColorSelection = struct
-  let cast w : color_selection obj = Object.try_cast w "GtkColorSelection"
-  external create : unit -> color_selection obj = "ml_gtk_color_selection_new"
-  external create_dialog : string -> color_selection_dialog obj
-      = "ml_gtk_color_selection_dialog_new"
-  external set_update_policy : [>`colorsel] obj -> update_type -> unit
-      = "ml_gtk_color_selection_set_update_policy"
-  external set_opacity : [>`colorsel] obj -> bool -> unit
-      = "ml_gtk_color_selection_set_opacity"
-  let set ?update_policy ?opacity w =
-    may update_policy ~f:(set_update_policy w);
-    may opacity ~f:(set_opacity w)
-  external set_color :
-      [>`colorsel] obj ->
-      red:float -> green:float -> blue:float -> ?opacity:float -> unit
-      = "ml_gtk_color_selection_set_color"
-  external get_color : [>`colorsel] obj -> color
-      = "ml_gtk_color_selection_get_color"
-
-  external ok_button : [>`colorseldialog] obj -> button obj =
-    "ml_gtk_color_selection_dialog_ok_button"
-  external cancel_button : [>`colorseldialog] obj -> button obj =
-    "ml_gtk_color_selection_dialog_cancel_button"
-  external help_button : [>`colorseldialog] obj -> button obj =
-    "ml_gtk_color_selection_dialog_help_button"
-  external colorsel : [>`colorseldialog] obj -> color_selection obj =
-    "ml_gtk_color_selection_dialog_colorsel"
-  module Signals = struct
-    open GtkSignal
-    let color_changed : ([>`colorsel],_) t =
-      { name = "color_changed"; marshaller = marshal_unit }
-  end
-end
-
-module Statusbar = struct
-  let cast w : statusbar obj = Object.try_cast w "GtkStatusbar"
-  external create : unit -> statusbar obj = "ml_gtk_statusbar_new"
-  external get_context : [>`statusbar] obj -> string -> statusbar_context
-      = "ml_gtk_statusbar_get_context_id"
-  external push :
-      [>`statusbar] obj ->
-      statusbar_context -> text:string -> statusbar_message
-      = "ml_gtk_statusbar_push"
-  external pop : [>`statusbar] obj -> statusbar_context ->  unit
-      = "ml_gtk_statusbar_pop"
-  external remove :
-      [>`statusbar] obj -> statusbar_context -> statusbar_message -> unit
-      = "ml_gtk_statusbar_remove"
-  module Signals = struct
-    open GtkSignal
-    let text_pushed : ([>`statusbar],_) t =
-      let marshal f _ = function
-        | GtkArgv.INT ctx :: GtkArgv.STRING s :: _ ->
-           f (Obj.magic ctx : statusbar_context) s
-        | _ -> invalid_arg "GtkMisc.Statusbar.Signals.marshal_text"
-      in
-      { name = "text_pushed"; marshaller = marshal }
-  end
-end
-
-module Calendar = struct
-  let cast w : calendar obj = Object.try_cast w "GtkCalendar"
-  external create : unit -> calendar obj = "ml_gtk_calendar_new"
-  external select_month : [>`calendar] obj -> month:int -> year:int -> unit
-      = "ml_gtk_calendar_select_month"
-  external select_day : [>`calendar] obj -> int -> unit
-      = "ml_gtk_calendar_select_day"
-  external mark_day : [>`calendar] obj -> int -> unit
-      = "ml_gtk_calendar_mark_day"
-  external unmark_day : [>`calendar] obj -> int -> unit
-      = "ml_gtk_calendar_unmark_day"
-  external clear_marks : [>`calendar] obj -> unit
-      = "ml_gtk_calendar_clear_marks"
-  external display_options :
-      [>`calendar] obj -> Tags.calendar_display_options list -> unit
-      = "ml_gtk_calendar_display_options"
-  external get_date : [>`calendar] obj -> int * int * int
-      = "ml_gtk_calendar_get_date"   (* year * month * day *)
-  external freeze : [>`calendar] obj -> unit
-      = "ml_gtk_calendar_freeze"
-  external thaw : [>`calendar] obj -> unit
-      = "ml_gtk_calendar_thaw"
-  module Signals = struct
-    open GtkSignal
-    let month_changed : ([>`calendar],_) t =
-      { name = "month_changed"; marshaller = marshal_unit }
-    let day_selected : ([>`calendar],_) t =
-      { name = "day_selected"; marshaller = marshal_unit }
-    let day_selected_double_click : ([>`calendar],_) t =
-      { name = "day_selected_double_click"; marshaller = marshal_unit }
-    let prev_month : ([>`calendar],_) t =
-      { name = "prev_month"; marshaller = marshal_unit }
-    let next_month : ([>`calendar],_) t =
-      { name = "next_month"; marshaller = marshal_unit }
-    let prev_year : ([>`calendar],_) t =
-      { name = "prev_year"; marshaller = marshal_unit }
-    let next_year : ([>`calendar],_) t =
-      { name = "next_year"; marshaller = marshal_unit }
-  end
-end
-
-module DrawingArea = struct
-  let cast w : drawing_area obj = Object.try_cast w "GtkDrawingArea"
-  external create : unit -> drawing_area obj = "ml_gtk_drawing_area_new"
-  external size : [>`drawing] obj -> width:int -> height:int -> unit
-      = "ml_gtk_drawing_area_size"
-end
-
-(* Does not seem very useful ...
-module Curve = struct
-  type t = [widget drawing curve] obj
-  let cast w : t = Object.try_cast w "GtkCurve"
-  external create : unit -> t = "ml_gtk_curve_new"
-  external reset : [>`curve] obj -> unit = "ml_gtk_curve_reset"
-  external set_gamma : [>`curve] obj -> float -> unit
-      = "ml_gtk_curve_set_gamma"
-  external set_range :
-      [>`curve] obj -> min_x:float -> max_x:float ->
-      min_y:float -> max_y:float -> unit
-      = "ml_gtk_curve_set_gamma"
-end
-*)
-
-module Misc = struct
-  let cast w : misc obj = Object.try_cast w "GtkMisc"
-  external coerce : [>`misc] obj -> misc obj = "%identity"
-  external set_alignment : [>`misc] obj -> x:float -> y:float -> unit
-      = "ml_gtk_misc_set_alignment"
-  external set_padding : [>`misc] obj -> x:int -> y:int -> unit
-      = "ml_gtk_misc_set_padding"
-  external get_xalign : [>`misc] obj -> float = "ml_gtk_misc_get_xalign"
-  external get_yalign : [>`misc] obj -> float = "ml_gtk_misc_get_yalign"
-  external get_xpad : [>`misc] obj -> int = "ml_gtk_misc_get_xpad"
-  external get_ypad : [>`misc] obj -> int = "ml_gtk_misc_get_ypad"
-  let set_alignment w ?x ?y () =
-    set_alignment w ~x:(may_default get_xalign w ~opt:x)
-      ~y:(may_default get_yalign w ~opt:y)
-  let set_padding w ?x ?y () =
-    set_padding w ~x:(may_default get_xpad w ~opt:x)
-      ~y:(may_default get_ypad w ~opt:y)
-  let set ?xalign ?yalign ?xpad ?ypad ?(width = -2) ?(height = -2) w =
-    if xalign <> None || yalign <> None then
-      set_alignment w ?x:xalign ?y:yalign ();
-    if xpad <> None || ypad <> None then
-      set_padding w ?x:xpad ?y:ypad ();
-    if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height
-end
-
-module Arrow = struct
-  let cast w : arrow obj = Object.try_cast w "GtkArrow"
-  external create : kind:arrow_type -> shadow:shadow_type -> arrow obj
-      = "ml_gtk_arrow_new"
-  external set : [>`arrow] obj -> kind:arrow_type -> shadow:shadow_type -> unit
-      = "ml_gtk_arrow_set"
-end
-
-module Image = struct
-  let cast w : image obj = Object.try_cast w "GtkImage"
-  external create : Gdk.image -> ?mask:Gdk.bitmap -> image obj
-      = "ml_gtk_image_new"
-  let create ?mask img = create img ?mask
-  external set : [>`image] obj -> Gdk.image -> ?mask:Gdk.bitmap -> unit
-      = "ml_gtk_image_set"
-end
-
-module Label = struct
-  let cast w : label obj = Object.try_cast w "GtkLabel"
-  external coerce : [>`label] obj -> label obj = "%identity"
-  external create : string -> label obj = "ml_gtk_label_new"
-  external set_text : [>`label] obj -> string -> unit = "ml_gtk_label_set_text"
-  external set_justify : [>`label] obj -> justification -> unit
-      = "ml_gtk_label_set_justify"
-  external set_pattern : [>`label] obj -> string -> unit
-      = "ml_gtk_label_set_pattern"
-  external set_line_wrap : [>`label] obj -> bool -> unit
-      = "ml_gtk_label_set_line_wrap"
-  let set ?text ?justify ?line_wrap ?pattern w =
-    may ~f:(set_text w) text;
-    may ~f:(set_justify w) justify;
-    may ~f:(set_line_wrap w) line_wrap;
-    may ~f:(set_pattern w) pattern
-  external get_text : [>`label] obj -> string = "ml_gtk_label_get_label"
-end
-
-module TipsQuery = struct
-  let cast w : tips_query obj = Object.try_cast w "GtkTipsQuery"
-  external create : unit -> tips_query obj = "ml_gtk_tips_query_new"
-  external start : [>`tipsquery] obj -> unit = "ml_gtk_tips_query_start_query"
-  external stop : [>`tipsquery] obj -> unit = "ml_gtk_tips_query_stop_query"
-  external set_caller : [>`tipsquery] obj -> [>`widget] obj -> unit
-      = "ml_gtk_tips_query_set_caller"
-  external set_labels :
-      [>`tipsquery] obj -> inactive:string -> no_tip:string -> unit
-      = "ml_gtk_tips_query_set_labels"
-  external set_emit_always : [>`tipsquery] obj -> bool -> unit
-      = "ml_gtk_tips_query_set_emit_always"
-  external get_caller : [>`tipsquery] obj -> widget obj
-      = "ml_gtk_tips_query_get_caller"
-  external get_label_inactive : [>`tipsquery] obj -> string
-      = "ml_gtk_tips_query_get_label_inactive"
-  external get_label_no_tip : [>`tipsquery] obj -> string
-      = "ml_gtk_tips_query_get_label_no_tip"
-  external get_emit_always : [>`tipsquery] obj -> bool
-      = "ml_gtk_tips_query_get_emit_always"
-  let set_labels ?inactive ?no_tip w =
-    set_labels w
-      ~inactive:(may_default get_label_inactive w ~opt:inactive)
-      ~no_tip:(may_default get_label_no_tip w ~opt:no_tip)
-  let set ?caller ?emit_always ?label_inactive ?label_no_tip w =
-    may caller ~f:(set_caller w);
-    may emit_always ~f:(set_emit_always w);
-    if label_inactive <> None || label_no_tip <> None then
-      set_labels w ?inactive:label_inactive ?no_tip:label_no_tip
-  module Signals = struct
-    open GtkArgv
-    open GtkSignal
-    let start_query : ([>`tipsquery],_) t =
-      { name = "start_query"; marshaller = marshal_unit }
-    let stop_query : ([>`tipsquery],_) t =
-      { name = "stop_query"; marshaller = marshal_unit }
-    let widget_entered :
-       ([>`tipsquery],
-        widget obj option ->
-        text:string option -> privat:string option -> unit) t =
-      let marshal f _ = function
-        | OBJECT opt :: STRING text :: STRING privat :: _ ->
-           f (may_map ~f:Widget.cast opt) ~text ~privat
-        | _ -> invalid_arg "GtkMisc.TipsQuery.Signals.marshal_entered"
-      in
-      { name = "widget_entered"; marshaller = marshal }
-    let widget_selected :
-       ([>`tipsquery],
-        widget obj option ->
-        text:string option ->
-        privat:string option -> GdkEvent.Button.t option -> bool) t =
-      let marshal f argv = function
-        | OBJECT obj :: STRING text :: STRING privat :: POINTER p :: _ ->
-           let stop = 
-             f (may_map ~f:Widget.cast obj) ~text ~privat
-               (may_map ~f:GdkEvent.unsafe_copy p)
-            in set_result argv (`BOOL stop)
-        | _ -> invalid_arg "GtkMisc.TipsQuery.Signals.marshal_selected"
-      in
-      { name = "widget_selected"; marshaller = marshal }
-  end
-end
-
-module Pixmap = struct
-  let cast w : pixmap obj = Object.try_cast w "GtkPixmap"
-  external create : Gdk.pixmap -> ?mask:Gdk.bitmap -> pixmap obj
-      = "ml_gtk_pixmap_new"
-  let create ?mask img = create img ?mask
-  external set :
-      [>`pixmap] obj -> ?pixmap:Gdk.pixmap -> ?mask:Gdk.bitmap -> unit
-      = "ml_gtk_pixmap_set"
-  external pixmap : [>`pixmap] obj -> Gdk.pixmap = "ml_GtkPixmap_pixmap"
-  external mask : [>`pixmap] obj -> Gdk.bitmap = "ml_GtkPixmap_mask"
-end
-
-module Separator = struct
-  let cast w : separator obj = Object.try_cast w "GtkSeparator"
-  external hseparator_new : unit -> separator obj = "ml_gtk_hseparator_new"
-  external vseparator_new : unit -> separator obj = "ml_gtk_vseparator_new"
-  let create (dir : Tags.orientation) =
-    if dir = `HORIZONTAL then hseparator_new () else vseparator_new ()
-end
-
-module FontSelection = struct
-  type null_terminated
-  let null_terminated arg : null_terminated =
-    match arg with None -> Obj.magic Gpointer.raw_null
-    | Some l ->
-       let len = List.length l in
-       let arr = Array.create (len + 1) "" in
-       let rec loop i = function
-           [] -> arr.(i) <- Obj.magic Gpointer.raw_null
-         | s::l -> arr.(i) <- s; loop (i+1) l
-       in loop 0 l;
-       Obj.magic (arr : string array)
-  let cast w : font_selection obj =
-    Object.try_cast w "GtkFontSelection"
-  external create : unit -> font_selection obj
-      = "ml_gtk_font_selection_new"
-  external get_font : [>`fontsel] obj -> Gdk.font
-      = "ml_gtk_font_selection_get_font"
-  let get_font w =
-    try Some (get_font w) with Gpointer.Null -> None
-  external get_font_name : [>`fontsel] obj -> string
-      = "ml_gtk_font_selection_get_font_name"
-  let get_font_name w =
-    try Some (get_font_name w) with Gpointer.Null -> None
-  external set_font_name : [>`fontsel] obj -> string -> unit
-      = "ml_gtk_font_selection_set_font_name"
-  external set_filter :
-    [>`fontsel] obj -> font_filter_type -> font_type list ->
-    null_terminated -> null_terminated -> null_terminated ->
-    null_terminated -> null_terminated -> null_terminated -> unit
-    = "ml_gtk_font_selection_set_filter_bc"
-      "ml_gtk_font_selection_set_filter"
-  let set_filter w ?kind:(tl=[`ALL]) ?foundry
-      ?weight ?slant ?setwidth ?spacing ?charset filter =
-    set_filter w filter tl (null_terminated foundry)
-      (null_terminated weight) (null_terminated slant)
-      (null_terminated setwidth) (null_terminated spacing)
-      (null_terminated charset)
-  external get_preview_text : [>`fontsel] obj -> string
-      = "ml_gtk_font_selection_get_preview_text"
-  external set_preview_text : [>`fontsel] obj -> string -> unit
-      = "ml_gtk_font_selection_set_preview_text"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkNew.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkNew.ml
deleted file mode 100644 (file)
index 532a709..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-type t
-
-(* if you modify this type modify widget_info_array 
-   in ml_gtk.c in accordance *)
-type object_type =
-  | OBJECT  | WIDGET  | MISC  | LABEL  | ACCELLABEL  | TIPSQUERY  | ARROW
-  | IMAGE   | PIXMAP  | CONTAINER  | BIN  | ALIGNMENT  | FRAME  | ASPECTFRAME
-  | BUTTON  | TOGGLEBUTTON  | CHECKBUTTON  | RADIOBUTTON  | OPTIONMENU
-  | ITEM  | MENUITEM  | CHECKMENUITEM  | RADIOMENUITEM  | TEAROFFMENUITEM
-  | LISTITEM  | TREEITEM  | WINDOW  | COLORSELECTIONDIALOG  | DIALOG
-  | INPUTDIALOG  | FILESELECTION  | FONTSELECTIONDIALOG  | PLUG
-  | EVENTBOX  | HANDLEBOX  | SCROLLEDWINDOW  | VIEWPORT  | BOX
-  | BUTTONBOX  | HBUTTONBOX  | VBUTTONBOX  | VBOX  | COLORSELECTION
-  | GAMMACURVE  | HBOX  | COMBO  | STATUSBAR  | CLIST  | CTREE  | FIXED
-  | NOTEBOOK  | FONTSELECTION  | PANED  | HPANED  | VPANED  | LAYOUT
-  | LIST  | MENUSHELL  | MENUBAR  | MENU  | PACKER  | SOCKET  | TABLE
-  | TOOLBAR  | TREE  | CALENDAR  | DRAWINGAREA  | CURVE  | EDITABLE
-  | ENTRY  | SPINBUTTON  | TEXT  | RULER  | HRULER  | VRULER  | RANGE
-  | SCALE  | HSCALE  | VSCALE  | SCROLLBAR  | HSCROLLBAR  | VSCROLLBAR
-  | SEPARATOR  | HSEPARATOR  | VSEPARATOR  | PREVIEW  | PROGRESS
-  | PROGRESSBAR  | DATA  | ADJUSTMENT  | TOOLTIPS  | ITEMFACTORY
-
-external set_ml_class_init  : (t -> unit) -> unit = "set_ml_class_init"
-external signal_new : string -> int -> t -> object_type -> int  -> int
-    = "ml_gtk_signal_new"
-external object_class_add_signals : t -> int array -> int -> unit
-    = "ml_gtk_object_class_add_signals"
-external type_unique :
-    name:string -> parent:object_type -> nsignals:int -> gtk_type
-    = "ml_gtk_type_unique"
-external type_new : gtk_type -> unit obj
-    = "ml_gtk_type_new"
-
-open GtkSignal
-
-let make_new_widget ~name ~parent
-    ~(signals : ('a, unit -> unit) GtkSignal.t list) =
-  let nsignals = List.length signals in
-  let new_type = type_unique ~name ~parent ~nsignals in
-  let signal_num_array = Array.create nsignals 0 in
-  let class_init_func classe =
-    List.fold_left signals ~init:0 ~f:
-      (fun i signal ->
-       signal_num_array.(i) <- signal_new signal.name 1 classe parent i;
-       i+1);
-    object_class_add_signals classe signal_num_array nsignals
-  in
-  new_type,
-  (fun () ->
-    set_ml_class_init class_init_func;
-    type_new new_type)
-  (* , signal_num_array *)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkPack.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkPack.ml
deleted file mode 100644 (file)
index 20adb05..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module Box = struct
-  let cast w : box obj = Object.try_cast w "GtkBox"
-  external coerce : [>`box] obj -> box obj = "%identity"
-  external pack_start :
-      [>`box] obj -> [>`widget] obj ->
-      expand:bool -> fill:bool -> padding:int -> unit
-      = "ml_gtk_box_pack_start"
-  external pack_end :
-      [>`box] obj -> [>`widget] obj ->
-      expand:bool -> fill:bool -> padding:int -> unit
-      = "ml_gtk_box_pack_end"
-  let pack box ?from:( dir = (`START : pack_type))
-      ?(expand=false) ?(fill=true) ?(padding=0) child =
-    (match dir with `START -> pack_start | `END -> pack_end)
-      box child ~expand ~fill ~padding
-  external reorder_child : [>`box] obj -> [>`widget] obj -> pos:int -> unit
-      = "ml_gtk_box_reorder_child"
-  external set_homogeneous : [>`box] obj -> bool -> unit
-      = "ml_gtk_box_set_homogeneous"
-  external set_spacing : [>`box] obj -> int -> unit
-      = "ml_gtk_box_set_spacing"
-  let set ?homogeneous ?spacing w =
-    may homogeneous ~f:(set_homogeneous w);
-    may spacing ~f:(set_spacing w)
-  type packing =
-      { expand: bool; fill: bool; padding: int; pack_type: pack_type }
-  external query_child_packing : [>`box] obj -> [>`widget] obj -> packing
-      = "ml_gtk_box_query_child_packing"
-  external set_child_packing :
-      [>`box] obj -> [>`widget] obj ->
-      ?expand:bool -> ?fill:bool -> ?padding:int -> ?from:pack_type -> unit
-      = "ml_gtk_box_set_child_packing_bc" "ml_gtk_box_set_child_packing"
-  external hbox_new : homogeneous:bool -> spacing:int -> box obj
-      = "ml_gtk_hbox_new"
-  external vbox_new : homogeneous:bool -> spacing:int -> box obj
-      = "ml_gtk_vbox_new"
-  let create (dir : orientation) ?(homogeneous=false) ?(spacing=0) () =
-    (match dir with `HORIZONTAL -> hbox_new | `VERTICAL -> vbox_new)
-      ~homogeneous ~spacing
-end
-
-module BBox = struct
-  (* Omitted defaults setting *)
-  let cast w : button_box obj = Object.try_cast w "GtkBBox"
-  external coerce : [>`bbox] obj -> button_box obj = "%identity"
-  type bbox_style = [ `DEFAULT_STYLE|`SPREAD|`EDGE|`START|`END ]
-  external get_spacing : [>`bbox] obj -> int = "ml_gtk_button_box_get_spacing"
-  external get_child_width : [>`bbox] obj -> int
-      = "ml_gtk_button_box_get_child_min_width"
-  external get_child_height : [>`bbox] obj -> int
-      = "ml_gtk_button_box_get_child_min_height"
-  external get_child_ipadx : [>`bbox] obj -> int
-      = "ml_gtk_button_box_get_child_ipad_x"
-  external get_child_ipady : [>`bbox] obj -> int
-      = "ml_gtk_button_box_get_child_ipad_y"
-  external get_layout : [>`bbox] obj -> bbox_style
-      = "ml_gtk_button_box_get_layout_style"
-  external set_spacing : [>`bbox] obj -> int -> unit
-      = "ml_gtk_button_box_set_spacing"
-  external set_child_size : [>`bbox] obj -> width:int -> height:int -> unit
-      = "ml_gtk_button_box_set_child_size"
-  external set_child_ipadding : [>`bbox] obj -> x:int -> y:int -> unit
-      = "ml_gtk_button_box_set_child_ipadding"
-  external set_layout : [>`bbox] obj -> bbox_style -> unit
-      = "ml_gtk_button_box_set_layout"
-  let set_child_size w ?width ?height () =
-    set_child_size w ~width:(may_default get_child_width w ~opt:width)
-      ~height:(may_default get_child_height w ~opt:height)
-  let set_child_ipadding w ?x ?y () =
-    set_child_ipadding w
-      ~x:(may_default get_child_ipadx w ~opt:x)
-      ~y:(may_default get_child_ipady w ~opt:y)
-  let set ?spacing ?child_width ?child_height ?child_ipadx
-      ?child_ipady ?layout w =
-    may spacing ~f:(set_spacing w);
-    if child_width <> None || child_height <> None then
-      set_child_size w ?width:child_width ?height:child_height ();
-    if child_ipadx <> None || child_ipady <> None then
-      set_child_ipadding w ?x:child_ipadx ?y:child_ipady ();
-    may layout ~f:(set_layout w)
-  external set_child_size_default : width:int -> height:int -> unit
-      = "ml_gtk_button_box_set_child_size_default"
-  external set_child_ipadding_default : x:int -> y:int -> unit
-      = "ml_gtk_button_box_set_child_ipadding_default"
-  external create_hbbox : unit -> button_box obj = "ml_gtk_hbutton_box_new"
-  external create_vbbox : unit -> button_box obj = "ml_gtk_vbutton_box_new"
-  let create (dir : orientation) =
-    if dir = `HORIZONTAL then create_hbbox () else create_vbbox ()
-end
-
-module Fixed = struct
-  let cast w : fixed obj = Object.try_cast w "GtkFixed"
-  external create : unit -> fixed obj = "ml_gtk_fixed_new"
-  external put : [>`fixed] obj -> [>`widget] obj -> x:int -> y:int -> unit
-      = "ml_gtk_fixed_put"
-  external move : [>`fixed] obj -> [>`widget] obj -> x:int -> y:int -> unit
-      = "ml_gtk_fixed_move"
-end
-
-module Layout = struct
-  let cast w : layout obj = Object.try_cast w "GtkLayout"
-  external create :
-      [>`adjustment] optobj -> [>`adjustment] optobj -> layout obj
-      = "ml_gtk_layout_new"
-  external put : [>`layout] obj -> [>`widget] obj -> x:int -> y:int -> unit
-      = "ml_gtk_layout_put"
-  external move : [>`layout] obj -> [>`widget] obj -> x:int -> y:int -> unit
-      = "ml_gtk_layout_move"
-  external set_size : [>`layout] obj -> width:int -> height:int -> unit
-      = "ml_gtk_layout_set_size"
-  external get_hadjustment : [>`layout] obj -> adjustment obj
-      = "ml_gtk_layout_get_hadjustment"
-  external get_vadjustment : [>`layout] obj -> adjustment obj
-      = "ml_gtk_layout_get_vadjustment"
-  external set_hadjustment : [>`layout] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_layout_set_hadjustment"
-  external set_vadjustment : [>`layout] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_layout_set_vadjustment"
-  external freeze : [>`layout] obj -> unit
-      = "ml_gtk_layout_freeze"
-  external thaw : [>`layout] obj -> unit
-      = "ml_gtk_layout_thaw"
-  external get_height : [>`layout] obj -> int
-      = "ml_gtk_layout_get_height"
-  external get_width : [>`layout] obj -> int
-      = "ml_gtk_layout_get_width"
-  let set_size ?width ?height w =
-    set_size w ~width:(may_default get_width w ~opt:width)
-      ~height:(may_default get_height w ~opt:height)
-end
-
-
-module Packer = struct
-  let cast w : packer obj = Object.try_cast w "GtkPacker"
-  external create : unit -> packer obj = "ml_gtk_packer_new"
-  external add :
-      [>`packer] obj -> [>`widget] obj ->
-      ?side:side_type -> ?anchor:anchor_type ->
-      ?options:packer_options list ->
-      ?border_width:int -> ?pad_x:int -> ?pad_y:int ->
-      ?i_pad_x:int -> ?i_pad_y:int -> unit
-      = "ml_gtk_packer_add_bc" "ml_gtk_packer_add"
-  external add_defaults :
-      [>`packer] obj -> [>`widget] obj ->
-      ?side:side_type -> ?anchor:anchor_type ->
-      ?options:packer_options list -> unit
-      = "ml_gtk_packer_add_defaults"
-  external set_child_packing :
-      [>`packer] obj -> [>`widget] obj ->
-      ?side:side_type -> ?anchor:anchor_type ->
-      ?options:packer_options list ->
-      ?border_width:int -> ?pad_x:int -> ?pad_y:int ->
-      ?i_pad_x:int -> ?i_pad_y:int -> unit
-      = "ml_gtk_packer_set_child_packing_bc" "ml_gtk_packer_set_child_packing"
-  external reorder_child : [>`packer] obj -> [>`widget] obj -> pos:int -> unit
-      = "ml_gtk_packer_reorder_child"
-  external set_spacing : [>`packer] obj -> int -> unit
-      = "ml_gtk_packer_set_spacing"
-  external set_defaults :
-      [>`packer] obj -> ?border_width:int -> ?pad_x:int -> ?pad_y:int ->
-      ?i_pad_x:int -> ?i_pad_y:int -> unit -> unit
-      = "ml_gtk_packer_set_defaults_bc" "ml_gtk_packer_set_defaults"
-
-  let build_options ?(expand=false) ?(fill=`BOTH) () =
-    (if expand then [`PACK_EXPAND] else []) @
-    (match (fill : expand_type) with `NONE -> []
-    | `X -> [`FILL_X]
-    | `Y -> [`FILL_Y]
-    | `BOTH -> [`FILL_X;`FILL_Y])
-end
-
-module Paned = struct
-  let cast w : paned obj = Object.try_cast w "GtkPaned"
-  external add1 : [>`paned] obj -> [>`widget] obj -> unit
-      = "ml_gtk_paned_add1"
-  external add2 : [>`paned] obj -> [>`widget] obj -> unit
-      = "ml_gtk_paned_add2"
-  external set_handle_size : [>`paned] obj -> int -> unit
-      = "ml_gtk_paned_set_handle_size"
-  external set_gutter_size : [>`paned] obj -> int -> unit
-      = "ml_gtk_paned_set_gutter_size"
-  let set ?handle_size ?gutter_size w =
-    may ~f:(set_handle_size w) handle_size;
-    may ~f:(set_gutter_size w) gutter_size
-  external child1 : [>`paned] obj -> widget obj = "ml_gtk_paned_child1"
-  external child2 : [>`paned] obj -> widget obj = "ml_gtk_paned_child2"
-  external handle_size : [>`paned] obj -> int = "ml_gtk_paned_handle_size"
-  external gutter_size : [>`paned] obj -> int = "ml_gtk_paned_handle_size"
-  external hpaned_new : unit -> paned obj = "ml_gtk_hpaned_new"
-  external vpaned_new : unit -> paned obj = "ml_gtk_vpaned_new"
-  let create (dir : orientation) =
-    if dir = `HORIZONTAL then hpaned_new () else vpaned_new ()
-end
-
-module Table = struct
-  let cast w : table obj = Object.try_cast w "GtkTable"
-  external create : int -> int -> homogeneous:bool -> table obj
-      = "ml_gtk_table_new"
-  let create ~rows:r ~columns:c ?(homogeneous=false) () =
-    create r c ~homogeneous
-  external attach :
-      [>`table] obj -> [>`widget] obj -> left:int -> right:int ->
-      top:int -> bottom:int -> xoptions:attach_options list ->
-      yoptions:attach_options list -> xpadding:int -> ypadding:int -> unit
-      = "ml_gtk_table_attach_bc" "ml_gtk_table_attach"
-  let has_x : expand_type -> bool =
-    function `X|`BOTH -> true | `Y|`NONE -> false
-  let has_y : expand_type -> bool =
-    function `Y|`BOTH -> true | `X|`NONE -> false
-  let attach t ~left ~top ?(right=left+1) ?(bottom=top+1)
-      ?(expand=`NONE) ?(fill=`BOTH) ?(shrink=`NONE)
-      ?(xpadding=0) ?(ypadding=0) w =
-    let xoptions = if has_x shrink then [`SHRINK] else [] in
-    let xoptions = if has_x fill then `FILL::xoptions else xoptions in
-    let xoptions = if has_x expand then `EXPAND::xoptions else xoptions in
-    let yoptions = if has_y shrink then [`SHRINK] else [] in
-    let yoptions = if has_y fill then `FILL::yoptions else yoptions in
-    let yoptions = if has_y expand then `EXPAND::yoptions else yoptions in
-    attach t w ~left ~top ~right ~bottom ~xoptions ~yoptions
-      ~xpadding ~ypadding
-  external set_row_spacing : [>`table] obj -> int -> int -> unit
-      = "ml_gtk_table_set_row_spacing"
-  external set_col_spacing : [>`table] obj -> int -> int -> unit
-      = "ml_gtk_table_set_col_spacing"
-  external set_row_spacings : [>`table] obj -> int -> unit
-      = "ml_gtk_table_set_row_spacings"
-  external set_col_spacings : [>`table] obj -> int -> unit
-      = "ml_gtk_table_set_col_spacings"
-  external set_homogeneous : [>`table] obj -> bool -> unit
-      = "ml_gtk_table_set_homogeneous"
-  let set ?homogeneous ?row_spacings ?col_spacings w =
-    may row_spacings ~f:(set_row_spacings w);
-    may col_spacings ~f:(set_col_spacings w);
-    may homogeneous ~f:(set_homogeneous w)
-end
-
-module Notebook = struct
-  let cast w : notebook obj = Object.try_cast w "GtkNotebook"
-  external create : unit -> notebook obj = "ml_gtk_notebook_new"
-  external insert_page :
-      [>`notebook] obj -> [>`widget] obj -> tab_label:[>`widget] optobj ->
-      menu_label:[>`widget] optobj -> pos:int -> unit
-      = "ml_gtk_notebook_insert_page_menu"
-      (* default is append to end *)
-  external remove_page : [>`notebook] obj -> int -> unit
-      = "ml_gtk_notebook_remove_page"
-  external get_current_page : [>`notebook] obj -> int
-      = "ml_gtk_notebook_get_current_page"
-  external set_page : [>`notebook] obj -> int -> unit
-      = "ml_gtk_notebook_set_page"
-  external set_tab_pos : [>`notebook] obj -> position -> unit
-      = "ml_gtk_notebook_set_tab_pos"
-  external set_homogeneous_tabs : [>`notebook] obj -> bool -> unit
-      = "ml_gtk_notebook_set_homogeneous_tabs"
-  external set_show_tabs : [>`notebook] obj -> bool -> unit
-      = "ml_gtk_notebook_set_show_tabs"
-  external set_show_border : [>`notebook] obj -> bool -> unit
-      = "ml_gtk_notebook_set_show_border"
-  external set_scrollable : [>`notebook] obj -> bool -> unit
-      = "ml_gtk_notebook_set_scrollable"
-  external set_tab_border : [>`notebook] obj -> int -> unit
-      = "ml_gtk_notebook_set_tab_border"
-  external popup_enable : [>`notebook] obj -> unit
-      = "ml_gtk_notebook_popup_enable"
-  external popup_disable : [>`notebook] obj -> unit
-      = "ml_gtk_notebook_popup_disable"
-  external get_nth_page : [>`notebook] obj -> int -> widget obj
-      = "ml_gtk_notebook_get_nth_page"
-  external page_num : [>`notebook] obj -> [>`widget] obj -> int
-      = "ml_gtk_notebook_page_num"
-  external next_page : [>`notebook] obj -> unit
-      = "ml_gtk_notebook_next_page"
-  external prev_page : [>`notebook] obj -> unit
-      = "ml_gtk_notebook_prev_page"
-  external get_tab_label : [>`notebook] obj -> [>`widget] obj -> widget obj
-      = "ml_gtk_notebook_get_tab_label"
-  external set_tab_label :
-      [>`notebook] obj -> [>`widget] obj -> [>`widget] obj -> unit
-      = "ml_gtk_notebook_set_tab_label"
-  external get_menu_label : [>`notebook] obj -> [>`widget] obj -> widget obj
-      = "ml_gtk_notebook_get_menu_label"
-  external set_menu_label :
-      [>`notebook] obj -> [>`widget] obj -> [>`widget] obj -> unit
-      = "ml_gtk_notebook_set_menu_label"
-  external reorder_child : [>`notebook] obj -> [>`widget] obj -> int -> unit
-      = "ml_gtk_notebook_reorder_child"
-
-  let set_popup w = function
-      true -> popup_enable w
-    | false -> popup_disable w
-  let set ?page ?tab_pos ?show_tabs ?homogeneous_tabs
-      ?show_border ?scrollable ?tab_border ?popup w =
-    let may_set f = may ~f:(f w) in
-    may_set set_page page;
-    may_set set_tab_pos tab_pos;
-    may_set set_show_tabs show_tabs;
-    may_set set_homogeneous_tabs homogeneous_tabs;
-    may_set set_show_border show_border;
-    may_set set_scrollable scrollable;
-    may_set set_tab_border tab_border;
-    may_set set_popup popup
-  module Signals = struct
-    open GtkArgv
-    open GtkSignal
-    let marshal_page f argv = function
-      |        _ :: INT page :: _ -> f page
-      |        _ -> invalid_arg "GtkPack.Notebook.Signals.marshal_page"
-    let switch_page : ([>`notebook],_) t =
-      { name = "switch_page"; marshaller = marshal_page }
-  end
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkRange.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkRange.ml
deleted file mode 100644 (file)
index b67e49b..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module Progress = struct
-  let cast w : progress obj = Object.try_cast w "GtkProgress"
-  external set_show_text : [>`progress] obj -> bool -> unit
-      = "ml_gtk_progress_set_show_text"
-  external set_text_alignment :
-      [>`progress] obj -> ?x:float -> ?y:float -> unit -> unit
-      = "ml_gtk_progress_set_show_text"
-  external set_format_string : [>`progress] obj -> string -> unit
-      = "ml_gtk_progress_set_format_string"
-  external set_adjustment : [>`progress] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_progress_set_adjustment"
-  external configure :
-      [>`progress] obj -> current:float -> min:float -> max:float -> unit
-      = "ml_gtk_progress_configure"
-  external set_percentage : [>`progress] obj -> float -> unit
-      = "ml_gtk_progress_set_percentage"
-  external set_value : [>`progress] obj -> float -> unit
-      = "ml_gtk_progress_set_value"
-  external get_value : [>`progress] obj -> float
-      = "ml_gtk_progress_get_value"
-  external get_percentage : [>`progress] obj -> float
-      = "ml_gtk_progress_get_current_percentage"
-  external set_activity_mode : [>`progress] obj -> bool -> unit
-      = "ml_gtk_progress_set_activity_mode"
-  external get_current_text : [>`progress] obj -> string
-      = "ml_gtk_progress_get_current_text"
-  external get_adjustment : [>`progress] obj -> adjustment obj
-      = "ml_gtk_progress_get_adjustment"
-  let set ?value ?percentage ?activity_mode
-      ?show_text ?format_string ?text_xalign ?text_yalign w =
-    may value ~f:(set_value w);
-    may percentage ~f:(set_percentage w);
-    may activity_mode ~f:(set_activity_mode w);
-    may show_text ~f:(set_show_text w);
-    may format_string ~f:(set_format_string w);
-    if text_xalign <> None || text_yalign <> None then
-      set_text_alignment w ?x:text_xalign ?y:text_yalign ()
-end
-
-module ProgressBar = struct
-  let cast w : progress_bar obj = Object.try_cast w "GtkProgressBar"
-  external create : unit -> progress_bar obj = "ml_gtk_progress_bar_new"
-  external create_with_adjustment : [>`adjustment] obj -> progress_bar obj
-      = "ml_gtk_progress_bar_new_with_adjustment"
-  external set_bar_style :
-      [>`progressbar] obj -> [`CONTINUOUS|`DISCRETE] -> unit
-      = "ml_gtk_progress_bar_set_bar_style"
-  external set_discrete_blocks : [>`progressbar] obj -> int -> unit
-      = "ml_gtk_progress_bar_set_discrete_blocks"
-  external set_activity_step : [>`progressbar] obj -> int -> unit
-      = "ml_gtk_progress_bar_set_activity_step"
-  external set_activity_blocks : [>`progressbar] obj -> int -> unit
-      = "ml_gtk_progress_bar_set_activity_blocks"
-  external set_orientation :
-      [>`progressbar] obj -> Tags.progress_bar_orientation -> unit
-      = "ml_gtk_progress_bar_set_orientation"
-  let set ?bar_style ?discrete_blocks ?activity_step ?activity_blocks w =
-    let may_set f opt = may opt ~f:(f w) in
-    may_set set_bar_style bar_style;
-    may_set set_discrete_blocks discrete_blocks;
-    may_set set_activity_step activity_step;
-    may_set set_activity_blocks activity_blocks
-end
-
-module Range = struct
-  let cast w : range obj = Object.try_cast w "GtkRange"
-  external coerce : [>`range] obj -> range obj = "%identity"
-  external get_adjustment : [>`range] obj -> adjustment obj
-      = "ml_gtk_range_get_adjustment"
-  external set_adjustment : [>`range] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_range_set_adjustment"
-  external set_update_policy : [>`range] obj -> update_type -> unit
-      = "ml_gtk_range_set_update_policy"
-  let set ?adjustment ?update_policy w =
-    may adjustment ~f:(set_adjustment w);
-    may update_policy ~f:(set_update_policy w)
-end
-
-module Scale = struct
-  let cast w : scale obj = Object.try_cast w "GtkScale"
-  external hscale_new : [>`adjustment] optobj -> scale obj
-      = "ml_gtk_hscale_new"
-  external vscale_new : [>`adjustment] optobj -> scale obj
-      = "ml_gtk_vscale_new"
-  let create ?adjustment (dir : orientation) =
-    let create = if dir = `HORIZONTAL then hscale_new else vscale_new  in
-    create (Gpointer.optboxed adjustment)
-  external set_digits : [>`scale] obj -> int -> unit
-      = "ml_gtk_scale_set_digits"
-  external set_draw_value : [>`scale] obj -> bool -> unit
-      = "ml_gtk_scale_set_draw_value"
-  external set_value_pos : [>`scale] obj -> position -> unit
-      = "ml_gtk_scale_set_value_pos"
-  external get_value_width : [>`scale] obj -> int
-      = "ml_gtk_scale_get_value_width"
-  external draw_value : [>`scale] obj -> unit
-      = "ml_gtk_scale_draw_value"
-  let set ?digits ?draw_value ?value_pos w =
-    may digits ~f:(set_digits w);
-    may draw_value ~f:(set_draw_value w);
-    may value_pos ~f:(set_value_pos w)
-end
-
-module Scrollbar = struct
-  let cast w : scrollbar obj = Object.try_cast w "GtkScrollbar"
-  external hscrollbar_new : [>`adjustment] optobj -> scrollbar obj
-      = "ml_gtk_hscrollbar_new"
-  external vscrollbar_new : [>`adjustment] optobj -> scrollbar obj
-      = "ml_gtk_vscrollbar_new"
-  let create ?adjustment (dir : orientation) =
-    let create = if dir = `HORIZONTAL then hscrollbar_new else vscrollbar_new
-    in create (Gpointer.optboxed adjustment)
-end
-
-module Ruler = struct
-  let cast w : ruler obj = Object.try_cast w "GtkRuler"
-  external hruler_new : unit -> ruler obj = "ml_gtk_hruler_new"
-  external vruler_new : unit -> ruler obj = "ml_gtk_vruler_new"
-  let create (dir : orientation) =
-    if dir = `HORIZONTAL then hruler_new () else vruler_new ()
-  external set_metric : [>`ruler] obj -> metric_type -> unit
-      = "ml_gtk_ruler_set_metric"
-  external set_range :
-      [>`ruler] obj ->
-      lower:float -> upper:float -> position:float -> max_size:float -> unit
-      = "ml_gtk_ruler_set_range"
-  external get_lower : [>`ruler] obj -> float = "ml_gtk_ruler_get_lower"
-  external get_upper : [>`ruler] obj -> float = "ml_gtk_ruler_get_upper"
-  external get_position : [>`ruler] obj -> float = "ml_gtk_ruler_get_position"
-  external get_max_size : [>`ruler] obj -> float = "ml_gtk_ruler_get_max_size"
-  let set_range ?lower ?upper ?position ?max_size w =
-    set_range w ~lower:(may_default get_lower w ~opt:lower)
-      ~upper:(may_default get_upper w ~opt:upper)
-      ~position:(may_default get_position w ~opt:position)
-      ~max_size:(may_default get_max_size w ~opt:max_size)
-  let set ?metric ?lower ?upper ?position ?max_size w =
-    may metric ~f:(set_metric w);
-    if lower <> None || upper <> None || position <> None || max_size <> None
-    then set_range w ?lower ?upper ?position ?max_size
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkSignal.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkSignal.ml
deleted file mode 100644 (file)
index 8fa4602..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-type id
-type ('a,'b) t =
- { name: string;
-   marshaller: ('b -> GtkArgv.t -> GtkArgv.data list -> unit) }
-
-let enter_callback = ref (fun () -> ())
-and exit_callback = ref (fun () -> ())
-
-let stop_emit_ref = ref false
-let stop_emit () = stop_emit_ref := true
-
-type saved_state = State of bool
-let push_callback () =
-  !enter_callback ();
-  let old = !stop_emit_ref in
-  stop_emit_ref := false;
-  State old
-
-let pop_callback (State old) =
-  let res = !stop_emit_ref in
-  stop_emit_ref := old;
-  !exit_callback ();
-  res
-
-external connect :
-  'a obj -> name:string -> callback:(GtkArgv.t -> unit) -> after:bool -> id
-  = "ml_gtk_signal_connect"
-external emit_stop_by_name : 'a obj -> name:string -> unit
-  = "ml_gtk_signal_emit_stop_by_name"
-let connect  ~(sgn : ('a, _) t) ~callback ?(after=false) (obj : 'a obj) =
-  let callback argv =
-    let old = push_callback () in
-    let exn =
-      try sgn.marshaller callback argv (GtkArgv.get_args argv); None
-      with exn -> Some exn
-    in
-    if pop_callback old then emit_stop_by_name obj ~name:sgn.name;
-    Gaux.may ~f:raise exn
-  in
-  connect obj ~name:sgn.name ~callback ~after
-external disconnect : 'a obj -> id -> unit
-  = "ml_gtk_signal_disconnect"
-external handler_block : 'a obj -> id -> unit
-  = "ml_gtk_signal_handler_block"
-external handler_unblock : 'a obj -> id -> unit
-  = "ml_gtk_signal_handler_unblock"
-
-let marshal_unit f _ _ = f ()
-let marshal_int f _ = function
-  | GtkArgv.INT n :: _ -> f n
-  | _ -> invalid_arg "GtkSignal.marshal_int"
-
-let emit (obj : 'a obj) ~(sgn : ('a, 'b) t)
-    ~(emitter : 'a obj -> name:string -> 'b) =
-  emitter obj ~name:sgn.name
-external emit_none : 'a obj -> name:string -> unit -> unit
-    = "ml_gtk_signal_emit_none"
-let emit_unit obj ~sgn = emit obj ~emitter:emit_none ~sgn ()
-external emit_int : 'a obj -> name:string -> int -> unit
-    = "ml_gtk_signal_emit_int"
-let emit_int = emit ~emitter:emit_int
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkSignal.mli b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkSignal.mli
deleted file mode 100644 (file)
index 0ef2ab2..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-type id
-type ('a,'b) t =
- { name: string;
-   marshaller: ('b -> GtkArgv.t -> GtkArgv.data list -> unit) }
-
-val stop_emit : unit -> unit
-    (* Call [stop_emit ()] in a callback to prohibit further handling
-       of the current signal invocation, by calling [emit_stop_by_name].
-       Be careful about where you use it, since the concept of current
-       signal may be tricky. *)
-
-val connect :
-  sgn:('a, 'b) t -> callback:'b -> ?after:bool -> 'a obj -> id
-    (* You may use [stop_emit] inside the callback *)
-
-external disconnect : 'a obj -> id -> unit
-  = "ml_gtk_signal_disconnect"
-external emit_stop_by_name : 'a obj -> name:string -> unit
-  = "ml_gtk_signal_emit_stop_by_name"
-    (* Unsafe: use [stop_emit] instead. *)
-external handler_block : 'a obj -> id -> unit
-  = "ml_gtk_signal_handler_block"
-external handler_unblock : 'a obj -> id -> unit
-  = "ml_gtk_signal_handler_unblock"
-
-(* Some marshaller functions, to build signals *)
-val marshal_unit : (unit -> unit) -> GtkArgv.t -> GtkArgv.data list -> unit
-val marshal_int : (int -> unit) -> GtkArgv.t -> GtkArgv.data list -> unit
-
-(* Emitter functions *)
-val emit :
-  'a obj -> sgn:('a, 'b) t -> emitter:('a obj -> name:string -> 'b) -> 'b
-val emit_unit : 'a obj -> sgn:('a, unit -> unit) t -> unit
-val emit_int : 'a obj -> sgn:('a, int -> unit) t -> int -> unit
-
-(* Internal functions. *)
-val enter_callback : (unit -> unit) ref
-val exit_callback : (unit -> unit) ref
-type saved_state
-val push_callback : unit -> saved_state
-val pop_callback : saved_state -> bool
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkThInit.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkThInit.ml
deleted file mode 100644 (file)
index 517f80b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-(* $Id$ *)
-
-(* Start the main thread in a threaded toplevel *)
-
-let thread = GtkThread.start ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkThread.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkThread.ml
deleted file mode 100644 (file)
index 3ab577e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(* $Id$ *)
-
-open GtkMain
-
-(* We check first whether there are some event pending, and run
-   some iterations. We then need to delay, thus focing a thread switch. *)
-
-let main () =
-  try
-    let loop = (Glib.Main.create true) in
-    Main.loops := loop :: !Main.loops;
-    while Glib.Main.is_running loop do
-      let i = ref 0 in
-      while !i < 100 && Glib.Main.pending () do
-       Glib.Main.iteration true;
-       incr i
-      done;
-      Thread.delay 0.001
-    done;
-    Main.loops := List.tl !Main.loops
-  with exn ->
-    Main.loops := List.tl !Main.loops;
-    raise exn
-      
-let start = Thread.create main
-
-let _ =
-  let mutex = Mutex.create () in
-  let depth = ref 0 in
-  GtkSignal.enter_callback :=
-    (fun () -> if !depth = 0 then Mutex.lock mutex; incr depth);
-  GtkSignal.exit_callback :=
-    (fun () -> decr depth; if !depth = 0 then Mutex.unlock mutex)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkTree.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkTree.ml
deleted file mode 100644 (file)
index 9260741..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module TreeItem = struct
-  let cast w : tree_item obj = Object.try_cast w "GtkTreeItem"
-  external create : unit -> tree_item obj = "ml_gtk_tree_item_new"
-  external create_with_label : string -> tree_item obj
-      = "ml_gtk_tree_item_new_with_label"
-  let create ?label () =
-    match label with None -> create ()
-    | Some label -> create_with_label label
-  external set_subtree : [>`treeitem] obj -> [>`widget] obj -> unit
-      = "ml_gtk_tree_item_set_subtree"
-  external remove_subtree : [>`treeitem] obj -> unit
-      = "ml_gtk_tree_item_remove_subtree"
-  external expand : [>`treeitem] obj -> unit
-      = "ml_gtk_tree_item_expand"
-  external collapse : [>`treeitem] obj -> unit
-      = "ml_gtk_tree_item_collapse"
-  external subtree : [>`treeitem] obj -> tree obj
-      = "ml_GTK_TREE_ITEM_SUBTREE"
-  module Signals = struct
-    open GtkSignal
-    let expand : ([>`treeitem],_) t =
-      { name = "expand"; marshaller = marshal_unit }
-    let collapse : ([>`treeitem],_) t =
-      { name = "collapse"; marshaller = marshal_unit }
-  end
-end
-
-module Tree = struct
-  let cast w : tree obj = Object.try_cast w "GtkTree"
-  external coerce : [>`tree] obj -> tree obj = "%identity"
-  external create : unit -> tree obj = "ml_gtk_tree_new"
-  external insert : [>`tree] obj -> [>`treeitem] obj -> pos:int -> unit
-      = "ml_gtk_tree_insert"
-  external remove_items : [>`tree] obj -> [>`treeitem] obj list -> unit
-      = "ml_gtk_tree_remove_items"
-  external clear_items : [>`tree] obj -> start:int -> stop:int -> unit
-      = "ml_gtk_tree_clear_items"
-  external select_item : [>`tree] obj -> pos:int -> unit
-      = "ml_gtk_tree_select_item"
-  external unselect_item : [>`tree] obj -> pos:int -> unit
-      = "ml_gtk_tree_unselect_item"
-  external child_position : [>`tree] obj -> [>`treeitem] obj -> int
-      = "ml_gtk_tree_child_position"
-  external set_selection_mode : [>`tree] obj -> selection_mode -> unit
-      = "ml_gtk_tree_set_selection_mode"
-  external set_view_mode : [>`tree] obj -> [`LINE|`ITEM] -> unit
-      = "ml_gtk_tree_set_view_mode"
-  external set_view_lines : [>`tree] obj -> bool -> unit
-      = "ml_gtk_tree_set_view_lines"
-  external selection : [>`tree] obj -> tree_item obj list =
-    "ml_gtk_tree_selection"
-  let set ?selection_mode ?view_mode ?view_lines w =
-    let may_set f = may ~f:(f w) in
-    may_set set_selection_mode selection_mode;
-    may_set set_view_mode view_mode;
-    may_set set_view_lines view_lines
-  module Signals = struct
-    open GtkSignal
-    let selection_changed : ([>`tree],_) t =
-      { name = "selection_changed"; marshaller = marshal_unit }
-    let select_child : ([>`tree],_) t =
-      { name = "select_child"; marshaller = Widget.Signals.marshal }
-    let unselect_child : ([>`tree],_) t =
-      { name = "unselect_child"; marshaller = Widget.Signals.marshal }
-  end
-end
-(*
-module CTree = struct
-  type t
-  type node =  [`ctree] obj * t
-  let cast w : ctree obj = Object.try_cast w "GtkCTree"
-  external create : cols:int -> treecol:int -> ctree obj = "ml_gtk_ctree_new"
-  external insert_node :
-      [>`ctree] obj -> ?parent:node -> ?sibling:node ->
-      titles:optstring array ->
-      spacing:int -> ?pclosed:Gdk.pixmap -> ?mclosed:Gdk.bitmap obj ->
-      ?popened:Gdk.pixmap -> ?mopened:Gdk.bitmap obj ->
-      is_leaf:bool -> expanded:bool -> node
-      = "ml_gtk_ctree_insert_node_bc" "ml_gtk_ctree_insert_node"
-  let insert_node'
-      w ?parent ?sibling ?(spacing = 0) ?(is_leaf = true)
-      ?(expanded = false)
-      ?pclosed ?mclosed ?popened ?mopened titles =
-    let len = GtkList.CList.get_columns w in
-    if List.length titles > len then invalid_arg "CTree.insert_node";
-    let arr = Array.create ~len None in
-    List.fold_left titles ~acc:0
-      ~f:(fun ~acc text -> arr.(acc) <- Some text; acc+1);
-    insert_node w
-      ?parent ?sibling ~titles:(Array.map ~f:optstring arr)
-      ~spacing ~is_leaf ~expanded
-      ?pclosed ?mclosed ?popened ?mopened 
-  external node_set_row_data : [>`ctree] obj -> node:node -> Obj.t -> unit
-      = "ml_gtk_ctree_node_set_row_data"
-  external node_get_row_data : [>`ctree] obj -> node:node -> Obj.t
-      = "ml_gtk_ctree_node_get_row_data"
-  external set_indent : [>`ctree] obj -> int -> unit
-      = "ml_gtk_ctree_set_indent"
-  module Signals = struct
-    open GtkSignal
-    let marshal_select f argv =
-      let node : node =
-        match GtkArgv.get_pointer argv ~pos:0 with
-          Some p -> Obj.magic p
-        | None -> invalid_arg "GtkTree.CTree.Signals.marshal_select"
-      in
-      f ~node ~column:(GtkArgv.get_int argv ~pos:1)
-
-    let tree_select_row : ([>`ctree],_) t =
-      { name = "tree_select_row"; marshaller = marshal_select }
-    let tree_unselect_row : ([>`ctree],_) t =
-      { name = "tree_unselect_row"; marshaller = marshal_select }
-  end
-end
-*)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkWindow.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkWindow.ml
deleted file mode 100644 (file)
index ffe00e9..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module Window = struct
-  let cast w : window obj = Object.try_cast w "GtkWindow"
-  external coerce : [>`window] obj -> window obj = "%identity"
-  external create : window_type -> window obj = "ml_gtk_window_new"
-  external set_title : [>`window] obj -> string -> unit
-      = "ml_gtk_window_set_title"
-  external set_wmclass : [>`window] obj -> name:string -> clas:string -> unit
-      = "ml_gtk_window_set_title"
-  external get_wmclass_name : [>`window] obj -> string
-      = "ml_gtk_window_get_wmclass_name"
-  external get_wmclass_class : [>`window] obj -> string
-      = "ml_gtk_window_get_wmclass_class"
-  (* set_focus/default are called by Widget.grab_focus/default *)
-  external set_focus : [>`window] obj -> [>`widget] obj -> unit
-      = "ml_gtk_window_set_focus"
-  external set_default : [>`window] obj -> [>`widget] obj -> unit
-      = "ml_gtk_window_set_default"
-  external set_policy :
-      [>`window] obj ->
-      allow_shrink:bool -> allow_grow:bool -> auto_shrink:bool -> unit
-      = "ml_gtk_window_set_policy"
-  external get_allow_shrink : [>`window] obj -> bool
-      = "ml_gtk_window_get_allow_shrink"
-  external get_allow_grow : [>`window] obj -> bool
-      = "ml_gtk_window_get_allow_grow"
-  external get_auto_shrink : [>`window] obj -> bool
-      = "ml_gtk_window_get_auto_shrink"
-  external activate_focus : [>`window] obj -> bool
-      = "ml_gtk_window_activate_focus"
-  external activate_default : [>`window] obj -> bool
-      = "ml_gtk_window_activate_default"
-  external set_modal : [>`window] obj -> bool -> unit
-      = "ml_gtk_window_set_modal"
-  external set_default_size :
-      [>`window] obj -> width:int -> height:int -> unit
-      = "ml_gtk_window_set_default_size"
-  external set_position : [>`window] obj -> window_position -> unit
-      = "ml_gtk_window_set_position"
-  external set_transient_for : [>`window] obj ->[>`window] obj -> unit
-      = "ml_gtk_window_set_transient_for"
-
-  let set_wmclass ?name ?clas:wm_class w =
-    set_wmclass w ~name:(may_default get_wmclass_name w ~opt:name)
-      ~clas:(may_default get_wmclass_class w ~opt:wm_class)
-  let set_policy ?allow_shrink ?allow_grow ?auto_shrink w =
-    set_policy w
-      ~allow_shrink:(may_default get_allow_shrink w ~opt:allow_shrink)
-      ~allow_grow:(may_default get_allow_grow w ~opt:allow_grow)
-      ~auto_shrink:(may_default get_auto_shrink w ~opt:auto_shrink)
-  let set ?title ?wm_name ?wm_class ?position ?allow_shrink ?allow_grow
-      ?auto_shrink ?modal ?(x = -2) ?(y = -2) w =
-    may title ~f:(set_title w);
-    if wm_name <> None || wm_class <> None then
-      set_wmclass w ?name:wm_name ?clas:wm_class;
-    may position ~f:(set_position w);
-    if allow_shrink <> None || allow_grow <> None || auto_shrink <> None then
-      set_policy w ?allow_shrink ?allow_grow ?auto_shrink;
-    may ~f:(set_modal w) modal;
-    if x <> -2 || y <> -2 then Widget.set_uposition w ~x ~y
-  external add_accel_group : [>`window] obj -> accel_group -> unit
-      = "ml_gtk_window_add_accel_group"
-  external remove_accel_group :
-      [>`window] obj -> accel_group -> unit
-      = "ml_gtk_window_remove_accel_group"
-  external activate_focus : [>`window] obj -> unit
-      = "ml_gtk_window_activate_focus"
-  external activate_default : [>`window] obj -> unit
-      = "ml_gtk_window_activate_default"
-  module Signals = struct
-    open GtkSignal
-    let move_resize : ([>`window],_) t =
-      { name = "move_resize"; marshaller = marshal_unit }
-    let set_focus : ([>`window],_) t =
-      { name = "set_focus"; marshaller = Widget.Signals.marshal_opt }
-  end
-end
-
-module Dialog = struct
-  let cast w : dialog obj = Object.try_cast w "GtkDialog"
-  external coerce : [>`dialog] obj -> dialog obj = "%identity"
-  external create : unit -> dialog obj = "ml_gtk_dialog_new"
-  external action_area : [>`dialog] obj -> box obj
-      = "ml_GtkDialog_action_area"
-  external vbox : [>`dialog] obj -> box obj
-      = "ml_GtkDialog_vbox"
-end
-
-module InputDialog = struct
-  let cast w : input_dialog obj = Object.try_cast w "GtkInputDialog"
-  external create : unit -> input_dialog obj = "ml_gtk_input_dialog_new"
-  module Signals = struct
-    open GtkSignal
-    let enable_device : ([>`inputdialog],_) t =
-      { name = "enable_device"; marshaller = marshal_int }
-    let disable_device : ([>`inputdialog],_) t =
-      { name = "disable_device"; marshaller = marshal_int }
-  end
-end
-
-module FileSelection = struct
-  let cast w : file_selection obj = Object.try_cast w "GtkFileSelection"
-  external create : string -> file_selection obj = "ml_gtk_file_selection_new"
-  external set_filename : [>`filesel] obj -> string -> unit
-      = "ml_gtk_file_selection_set_filename"
-  external get_filename : [>`filesel] obj -> string
-      = "ml_gtk_file_selection_get_filename"
-  external show_fileop_buttons : [>`filesel] obj -> unit
-      = "ml_gtk_file_selection_show_fileop_buttons"
-  external hide_fileop_buttons : [>`filesel] obj -> unit
-      = "ml_gtk_file_selection_hide_fileop_buttons"
-  external get_ok_button : [>`filesel] obj -> button obj
-      = "ml_gtk_file_selection_get_ok_button"
-  external get_cancel_button : [>`filesel] obj -> button obj
-      = "ml_gtk_file_selection_get_cancel_button"
-  external get_help_button : [>`filesel] obj -> button obj
-      = "ml_gtk_file_selection_get_help_button"
-  let set_fileop_buttons w = function
-      true -> show_fileop_buttons w
-    | false -> hide_fileop_buttons w
-  let set ?filename ?fileop_buttons w =
-    may filename ~f:(set_filename w);
-    may fileop_buttons ~f:(set_fileop_buttons w)
-end
-
-module FontSelectionDialog = struct
-  let cast w : font_selection_dialog obj =
-    Object.try_cast w "GtkFontSelectionDialog"
-  external create : ?title:string -> unit -> font_selection_dialog obj
-      = "ml_gtk_font_selection_dialog_new"
-  external font_selection : [>`fontseldialog] obj -> font_selection obj
-      = "ml_gtk_font_selection_dialog_fontsel"
-  external ok_button : [>`fontseldialog] obj -> button obj
-      = "ml_gtk_font_selection_dialog_ok_button"
-  external apply_button : [>`fontseldialog] obj -> button obj
-      = "ml_gtk_font_selection_dialog_apply_button"
-  external cancel_button : [>`fontseldialog] obj -> button obj
-      = "ml_gtk_font_selection_dialog_cancel_button"
-(*
-  type null_terminated
-  let null_terminated arg : null_terminated =
-    match arg with None -> Obj.magic Gpointer.raw_null
-    | Some l ->
-       let len = List.length l in
-       let arr = Array.create (len + 1) "" in
-       let rec loop i = function
-           [] -> arr.(i) <- Obj.magic Gpointer.raw_null
-         | s::l -> arr.(i) <- s; loop (i+1) l
-       in loop 0 l;
-       Obj.magic (arr : string array)
-  external get_font : [>`fontseldialog] obj -> Gdk.font
-      = "ml_gtk_font_selection_dialog_get_font"
-  let get_font w =
-    try Some (get_font w) with Gpointer.Null -> None
-  external get_font_name : [>`fontseldialog] obj -> string
-      = "ml_gtk_font_selection_dialog_get_font_name"
-  let get_font_name w =
-    try Some (get_font_name w) with Gpointer.Null -> None
-  external set_font_name : [>`fontseldialog] obj -> string -> unit
-      = "ml_gtk_font_selection_dialog_set_font_name"
-  external set_filter :
-    [>`fontseldialog] obj -> font_filter_type -> font_type list ->
-    null_terminated -> null_terminated -> null_terminated ->
-    null_terminated -> null_terminated -> null_terminated -> unit
-    = "ml_gtk_font_selection_dialog_set_filter_bc"
-      "ml_gtk_font_selection_dialog_set_filter"
-  let set_filter w ?kind:(tl=[`ALL]) ?foundry
-      ?weight ?slant ?setwidth ?spacing ?charset filter =
-    set_filter w filter tl (null_terminated foundry)
-      (null_terminated weight) (null_terminated slant)
-      (null_terminated setwidth) (null_terminated spacing)
-      (null_terminated charset)
-  external get_preview_text : [>`fontseldialog] obj -> string
-      = "ml_gtk_font_selection_dialog_get_preview_text"
-  external set_preview_text : [>`fontseldialog] obj -> string -> unit
-      = "ml_gtk_font_selection_dialog_set_preview_text"
-*)
-end
-
-module Plug = struct
-  let cast w : plug obj = Object.try_cast w "GtkPlug"
-  external create : Gdk.xid -> plug obj = "ml_gtk_plug_new"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkXmHTML.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkXmHTML.ml
deleted file mode 100644 (file)
index 3bf5791..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-type string_direction = [
-  | `R_TO_L
-  | `L_TO_R
-]
-
-type position = [
-  | `END
-  | `CENTER
-  | `BEGINNING
-]
-
-type line_type = [
-  | `SOLID
-  | `DASHED
-  | `SINGLE
-  | `DOUBLE
-  | `STRIKE
-  | `UNDER
-  | `NONE
-]
-
-type dither_type = [
-  | `QUICK
-  | `BEST
-  | `FAST
-  | `SLOW
-  | `DISABLED
-]
-
-type xmhtml = [`widget|`container|`xmhtml]
-
-external create : unit -> xmhtml obj = "ml_gtk_xmhtml_new"
-external freeze : [> `xmhtml] obj -> unit = "ml_gtk_xmhtml_freeze"
-external thaw : [> `xmhtml] obj -> unit = "ml_gtk_xmhtml_thaw"
-external source : [> `xmhtml] obj -> string -> unit = "ml_gtk_xmhtml_source"
-(* external get_source : [> `xmhtml] obj -> string = "ml_gtk_xmhtml_get_source" *)
-external set_string_direction : [> `xmhtml] obj -> string_direction -> unit
-  = "ml_gtk_xmhtml_set_string_direction"
-external set_alignment : [> `xmhtml] obj -> position -> unit
-  = "ml_gtk_xmhtml_set_alignment"
-(* external set_outline : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_outline" *)
-external set_font_familty :
-  [> `xmhtml] obj -> family:string -> sizes:string -> unit
-  = "ml_gtk_xmhtml_set_font_familty"
-external set_font_familty_fixed :
-  [> `xmhtml] obj -> family:string -> sizes:string -> unit
-  = "ml_gtk_xmhtml_set_font_familty_fixed"
-external set_font_charset : [> `xmhtml] obj -> string -> unit
-  = "ml_gtk_xmhtml_set_font_charset"
-external set_allow_body_colors : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_allow_body_colors"
-external set_hilight_on_enter : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_hilight_on_enter"
-external set_anchor_underline_type : [> `xmhtml] obj -> line_type list -> unit
-  = "ml_gtk_xmhtml_set_anchor_underline_type"
-external set_anchor_visited_underline_type :
-  [> `xmhtml] obj -> line_type list -> unit
-  = "ml_gtk_xmhtml_set_anchor_visited_underline_type"
-external set_anchor_target_underline_type :
-  [> `xmhtml] obj -> line_type list -> unit
-  = "ml_gtk_xmhtml_set_anchor_target_underline_type"
-external set_allow_color_switching : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_allow_color_switching"
-external set_dithering : [> `xmhtml] obj -> dither_type -> unit
-  = "ml_gtk_xmhtml_set_dithering"
-external set_allow_font_switching : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_allow_font_switching"
-external set_max_image_colors : [> `xmhtml] obj -> int -> unit
-  = "ml_gtk_xmhtml_set_max_image_colors"
-external set_allow_images : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_allow_images"
-external set_plc_intervals :
-  [> `xmhtml] obj -> min:int -> max:int -> default:int -> unit
-  = "ml_gtk_xmhtml_set_plc_intervals"
-(*
-external set_def_body_image_url : [> `xmhtml] obj -> string -> unit
-  = "ml_gtk_xmhtml_set_def_body_image_url"
-*)
-external set_anchor_buttons : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_anchor_buttons"
-external set_anchor_cursor : [> `xmhtml] obj -> Gdk.cursor option -> unit
-  = "ml_gtk_xmhtml_set_anchor_cursor"
-external set_topline : [> `xmhtml] obj -> int -> unit
-  = "ml_gtk_xmhtml_set_topline"
-external get_topline : [> `xmhtml] obj -> int
-  = "ml_gtk_xmhtml_get_topline"
-external set_freeze_animations : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_freeze_animations"
-external set_screen_gamma : [> `xmhtml] obj -> float -> unit
-  = "ml_gtk_xmhtml_set_screen_gamma"
-external set_perfect_colors : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_perfect_colors"
-external set_uncompress_command : [> `xmhtml] obj -> string -> unit
-  = "ml_gtk_xmhtml_set_uncompress_command"
-external set_strict_checking : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_strict_checking"
-external set_bad_html_warnings : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_bad_html_warnings"
-external set_allow_form_coloring : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_allow_form_coloring"
-external set_imagemap_draw : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_imagemap_draw"
-external set_alpha_processing : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_alpha_processing"
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtk_tags.var b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtk_tags.var
deleted file mode 100644 (file)
index eb4ead7..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-(* $Id$ *)
-
-exception ml_raise_gtk
-
-type arrow_type = "GTK_ARROW_"
-  [ `UP | `DOWN | `LEFT | `RIGHT ]
-
-type attach_options = "GTK_"
-  [ `EXPAND | `SHRINK | `FILL ]
-
-type button_box_style = "GTK_BUTTONBOX_"
-  [ `DEFAULT_STYLE | `SPREAD | `EDGE | `START | `END ]
-
-type direction_type = "GTK_DIR_"
-  [ `TAB_FORWARD | `TAB_BACKWARD | `UP | `DOWN | `LEFT | `RIGHT ]
-
-type justification = "GTK_JUSTIFY_"
-  [ `LEFT | `RIGHT | `CENTER | `FILL ]
-
-type match_type = "GTK_MATCH_"
-  [ `ALL | `ALL_TAIL | `HEAD | `TAIL | `EXACT | `LAST ]
-
-type metric_type = "GTK_"
-  [ `PIXELS | `INCHES | `CENTIMETERS ]
-
-type orientation = "GTK_ORIENTATION_"
-  [ `HORIZONTAL | `VERTICAL ]
-
-type corner_type = "GTK_CORNER_"
-  [ `TOP_LEFT | `BOTTOM_LEFT | `TOP_RIGHT | `BOTTOM_RIGHT ]
-
-type pack_type = "GTK_PACK_"
-  [ `START | `END ]
-
-type path_type = "GTK_PATH_"
-  [ `WIDGET | `WIDGET_CLASS | `CLASS ]
-
-type policy_type = "GTK_POLICY_"
-  [ `ALWAYS | `AUTOMATIC | `NEVER ]
-
-type position = "GTK_POS_"
-  [ `LEFT | `RIGHT | `TOP | `BOTTOM ]
-
-type preview_type = "GTK_PREVIEW_"
-  [ `COLOR | `GRAYSCALE ]
-
-type relief_style = "GTK_RELIEF_"
-  [ `NORMAL | `HALF | `NONE ]
-
-type resize_mode = "GTK_RESIZE_"
-  [ `PARENT | `QUEUE | `IMMEDIATE ]
-
-type signal_run_type = "GTK_RUN_"
-  [ `FIRST | `LAST | `BOTH | `NO_RECURSE | `ACTION | `NO_HOOKS ]
-
-type scroll_type = "GTK_SCROLL_"
-  [ `NONE | `STEP_FORWARD | `STEP_BACKWARD | `PAGE_BACKWARD
-  | `PAGE_FORWARD | `JUMP ]
-
-type selection_mode = "GTK_SELECTION_"
-  [ `SINGLE | `BROWSE | `MULTIPLE | `EXTENDED ]
-
-type shadow_type = "GTK_SHADOW_"
-  [ `NONE | `IN | `OUT | `ETCHED_IN | `ETCHED_OUT ]
-
-type state_type = "GTK_STATE_"
-  [ `NORMAL | `ACTIVE | `PRELIGHT | `SELECTED | `INSENSITIVE ] 
-
-type submenu_direction = "GTK_DIRECTION_"
-  [ `LEFT | `RIGHT ]
-
-type submenu_placement = "GTK_"
-  [ `TOP_BOTTOM | `LEFT_RIGHT ]
-
-type toolbar_style = "GTK_TOOLBAR_"
-  [ `ICONS | `TEXT | `BOTH ]
-
-type trough_type = "GTK_TROUGH_"
-  [ `NONE | `START | `END | `JUMP ]
-
-type update_type = "GTK_UPDATE_"
-  [ `CONTINUOUS | `DISCONTINUOUS | `DELAYED ]
-
-type visibility = "GTK_VISIBILITY_"
-  [ `NONE | `PARTIAL | `FULL ]
-
-type window_position = "GTK_WIN_POS_"
-  [ `NONE | `CENTER | `MOUSE | `CENTER_ALWAYS ]
-
-type window_type = "GTK_WINDOW_"
-  [ `TOPLEVEL | `DIALOG | `POPUP ]
-
-type sort_type = "GTK_SORT_"
-  [ `ASCENDING | `DESCENDING ]
-
-
-type fundamental_type = "GTK_TYPE_"
-  [ `INVALID | `NONE | `CHAR | `BOOL | `INT | `UINT | `LONG | `ULONG
-  | `FLOAT | `DOUBLE | `STRING | `ENUM | `FLAGS | `BOXED | `FOREIGN
-  | `CALLBACK | `ARGS | `POINTER | `SIGNAL | `C_CALLBACK | `OBJECT ]
-
-type cell_type = "GTK_CELL_"
-  [ `EMPTY | `TEXT | `PIXMAP | `PIXTEXT | `WIDGET ]
-
-type toolbar_child = "GTK_TOOLBAR_CHILD_"
-  [ `SPACE | `BUTTON | `TOGGLEBUTTON | `RADIOBUTTON | `WIDGET ]
-
-type toolbar_space_style = "GTK_TOOLBAR_SPACE_"
-  [ `EMPTY | `LINE ]
-
-type tree_view_mode = "GTK_TREE_VIEW_"
-  [ `LINE | `ITEM ]
-
-type spin_type = "GTK_SPIN_"
-  [ `STEP_FORWARD | `STEP_BACKWARD | `PAGE_FORWARD | `PAGE_BACKWARD
-  | `HOME | `END | `USER_DEFINED ]
-
-type accel_flag = "GTK_ACCEL_"
-  [ `VISIBLE | `SIGNAL_VISIBLE | `LOCKED ]
-
-type packer_options = "GTK_"
-  [ `PACK_EXPAND | `FILL_X | `FILL_Y ]
-
-type side_type = "GTK_SIDE_"
-  [ `TOP | `BOTTOM | `LEFT | `RIGHT ]
-
-type anchor_type = "GTK_ANCHOR_"
-  [ `CENTER | `NORTH | `NW | `NE | `SOUTH | `SW | `SE | `WEST | `EAST ]
-
-type button_action = "GTK_BUTTON_"
-  [ `SELECTS | `DRAGS | `EXPANDS ]
-
-type calendar_display_options = "GTK_CALENDAR_"
-  [ `SHOW_HEADING | `SHOW_DAY_NAMES | `NO_MONTH_CHANGE | `SHOW_WEEK_NUMBERS
-  | `WEEK_START_MONDAY ]
-
-type progress_bar_style = "GTK_PROGRESS_"
-  [ `CONTINUOUS | `DISCRETE ]
-
-type progress_bar_orientation = "GTK_PROGRESS_"
-  [ `LEFT_TO_RIGHT | `RIGHT_TO_LEFT | `BOTTOM_TO_TOP | `TOP_TO_BOTTOM ]
-
-type dest_defaults = "GTK_DEST_DEFAULT_"
-  [ `MOTION | `HIGHLIGHT | `DROP | `ALL ]
-
-type target_flags = "GTK_TARGET_"
-  [ `SAME_APP | `SAME_WIDGET ]
-
-type font_metric_type = "GTK_FONT_METRIC_"
-  [ `PIXELS | `POINTS ]
-
-type font_type = "GTK_FONT_"
-  [ `BITMAP | `SCALABLE | `SCALABLE_BITMAP | `ALL ]
-
-type font_filter_type = "GTK_FONT_FILTER_"
-  [ `BASE | `USER ]
-
-(*
-type tree_pos = "GTK_CTREE_POS_"
-  [ `BEFORE | `AS_CHILD | `AFTER ]
-
-type tree_line_style = "GTK_CTREE_LINES_"
-  [ `NONE | `SOLID | `DOTTED | `TABBED ]
-
-type tree_expander_style = "GTK_CTREE_EXPANDER_"
-  [ `NONE | `SQUARE | `TRIANGLE | `CIRCULAR ]
-
-type tree_expansion_type = "GTK_CTREE_EXPANSION_"
-  [ `EXPAND | `EXPAND_RECURSIVE | `COLLAPSE | `COLLAPSE_RECURSIVE
-  | `TOGGLE | `TOGGLE_RECURSIVE ]
-*)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkgl_tags.var b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkgl_tags.var
deleted file mode 100644 (file)
index 57a9f73..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(* $Id$ *)
-
-type visual_options = "GDK_GL_" [
-  | `USE_GL
-  | `BUFFER_SIZE
-  | `LEVEL
-  | `RGBA
-  | `DOUBLEBUFFER
-  | `STEREO
-  | `AUX_BUFFERS
-  | `RED_SIZE
-  | `GREEN_SIZE
-  | `BLUE_SIZE
-  | `ALPHA_SIZE
-  | `DEPTH_SIZE
-  | `STENCIL_SIZE
-  | `ACCUM_GREEN_SIZE
-  | `ACCUM_ALPHA_SIZE
-]
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkxmhtml_tags.var b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/gtkxmhtml_tags.var
deleted file mode 100644 (file)
index ad93931..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-(* $Id$ *)
-
-type string_direction = "TSTRING_DIRECTION_" [
-  | `R_TO_L
-  | `L_TO_R
-]
-
-type position = "TALIGNMENT_" [
-  | `END
-  | `CENTER
-  | `BEGINNING
-]
-
-type line_type = "LINE_" [
-  | `SOLID
-  | `DASHED
-  | `SINGLE
-  | `DOUBLE
-  | `STRIKE
-  | `UNDER
-  | `NONE "NO_LINE"
-]
-
-type dither_type = "Xm" [
-  | `QUICK
-  | `BEST
-  | `FAST
-  | `SLOW
-  | `DISABLED
-]
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/lablgl.patch b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/lablgl.patch
deleted file mode 100644 (file)
index c48de24..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-Index: Makefile
-===================================================================
-RCS file: /staff2/garrigue/repos/lablGL/Makefile,v
-retrieving revision 1.33
-retrieving revision 1.34
-diff -c -r1.33 -r1.34
-*** Makefile   1998/09/17 03:16:06     1.33
---- Makefile   1999/06/18 07:39:08     1.34
-***************
-*** 12,22 ****
-  OTHERLIBS=-L$(LABLTKDIR) -llabltk41 $(LIBS)
-  
-  # Files
-! MLOBJS =     raw.cmo         togl.cmo \
-               gl.cmo          glLight.cmo     glList.cmo      glMap.cmo \
-               glMat.cmo       glMisc.cmo      glPix.cmo       glClear.cmo \
-               glTex.cmo       glDraw.cmo      glFunc.cmo      gluMisc.cmo \
-               gluNurbs.cmo    gluQuadric.cmo  gluTess.cmo     gluMat.cmo
-  OPTOBJS = $(MLOBJS:.cmo=.cmx)
-  COBJS =              ml_gl.o         ml_glu.o        ml_togl.o       ml_raw.o \
-               $(TOGLDIR)/togl.o
---- 12,23 ----
-  OTHERLIBS=-L$(LABLTKDIR) -llabltk41 $(LIBS)
-  
-  # Files
-! LIBOBJS =    raw.cmo \
-               gl.cmo          glLight.cmo     glList.cmo      glMap.cmo \
-               glMat.cmo       glMisc.cmo      glPix.cmo       glClear.cmo \
-               glTex.cmo       glDraw.cmo      glFunc.cmo      gluMisc.cmo \
-               gluNurbs.cmo    gluQuadric.cmo  gluTess.cmo     gluMat.cmo
-+ MLOBJS = $(LIBOBJS)  togl.cmo
-  OPTOBJS = $(MLOBJS:.cmo=.cmx)
-  COBJS =              ml_gl.o         ml_glu.o        ml_togl.o       ml_raw.o \
-               $(TOGLDIR)/togl.o
-***************
-*** 53,60 ****
-  var2switch: var2switch.cmo
-       $(LINKER) var2switch.cmo -o $@
-  
-! lablgl.cma: $(MLOBJS)
-!      $(LIBRARIAN) -o lablgl.cma $(MLOBJS)
-  
-  lablgl.cmxa: $(OPTOBJS)
-       $(OPTLIB) -o lablgl.cmxa $(OPTOBJS)
---- 54,61 ----
-  var2switch: var2switch.cmo
-       $(LINKER) var2switch.cmo -o $@
-  
-! lablgl.cma: $(LIBOBJS)
-!      $(LIBRARIAN) -o lablgl.cma $(LIBOBJS)
-  
-  lablgl.cmxa: $(OPTOBJS)
-       $(OPTLIB) -o lablgl.cmxa $(OPTOBJS)
-***************
-*** 66,74 ****
-  $(TOGLDIR)/togl.o:
-       cd $(TOGLDIR) && $(MAKE) togl.o
-  
-! lablgltop: lablgl.cma liblablgl.a
-       olablmktop $(OLABLINC) -custom -o lablgltop \
-!              unix.cma tk41.cma lablgl.cma \
-               -cclib "-L. -llablgl -lunix $(OTHERLIBS)"
-  
-  lablgl: lablgl.in Makefile.config
---- 67,75 ----
-  $(TOGLDIR)/togl.o:
-       cd $(TOGLDIR) && $(MAKE) togl.o
-  
-! lablgltop: lablgl.cma togl.cmo liblablgl.a
-       olablmktop $(OLABLINC) -custom -o lablgltop \
-!              unix.cma tk41.cma lablgl.cma togl.cmo \
-               -cclib "-L. -llablgl -lunix $(OTHERLIBS)"
-  
-  lablgl: lablgl.in Makefile.config
-***************
-*** 107,113 ****
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(MLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       cp $(MLOBJS:.cmo=.mli) $(INSTALLDIR)
-!      cp lablgl.cma liblablgl.a $(INSTALLDIR)
-       cp lablgltop $(INSTALLDIR)
-       cp lablgl lablgllink $(BINDIR)
-       if test -f lablgl.cmxa; then : ; \
---- 108,114 ----
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(MLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       cp $(MLOBJS:.cmo=.mli) $(INSTALLDIR)
-!      cp lablgl.cma togl.cmo liblablgl.a $(INSTALLDIR)
-       cp lablgltop $(INSTALLDIR)
-       cp lablgl lablgllink $(BINDIR)
-       if test -f lablgl.cmxa; then : ; \
-Index: lablgllink.in
-===================================================================
-RCS file: /staff2/garrigue/repos/lablGL/lablgllink.in,v
-retrieving revision 1.2
-retrieving revision 1.3
-diff -c -r1.2 -r1.3
-*** lablgllink.in      1998/09/16 10:26:17     1.2
---- lablgllink.in      1999/06/18 07:39:09     1.3
-***************
-*** 1,5 ****
-  #!/bin/sh
-  
-  exec olablc -custom @INCLUDES@ -I @INSTALLDIR@ \
-!      tk41.cma lablgl.cma $* -cclib "-L@INSTALLDIR@ -llablgl" \
-       -cclib "@OTHERLIBS@"
---- 1,5 ----
-  #!/bin/sh
-  
-  exec olablc -custom @INCLUDES@ -I @INSTALLDIR@ \
-!      tk41.cma lablgl.cma togl.cmo $* -cclib "-L@INSTALLDIR@ -llablgl" \
-       -cclib "@OTHERLIBS@"
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/lablgtk.in b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/lablgtk.in
deleted file mode 100644 (file)
index 9801514..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-thread="no"
-
-case $1 in
--help)
-    echo "Usage: lablgtk [-thread] <options> [script-file]"
-    echo "  -thread  use the threaded version of the toplevel"
-    ;;
--thread)
-    thread=yes
-    shift
-    ;;
-esac
-
-if test $thread = yes; then
-    toplevel="@INSTALLDIR@/lablgtktop_t -I @LIBDIR@/threads"
-else
-    toplevel=@INSTALLDIR@/lablgtktop
-fi
-
-exec $toplevel -w s \
-               -I @LABLGLDIR@ \
-               -I @INSTALLDIR@ $*
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gdk.c b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gdk.c
deleted file mode 100644 (file)
index 9ab1c1e..0000000
+++ /dev/null
@@ -1,522 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gdk/gdk.h>
-#ifdef _WIN32
-#include <gdk/win32/gdkwin32.h>
-#else
-#include <gdk/gdkx.h>
-#endif
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "gdk_tags.h"
-
-void ml_raise_gdk (const char *errmsg)
-{
-  static value * exn = NULL;
-  if (exn == NULL)
-      exn = caml_named_value ("gdkerror");
-  raise_with_string (*exn, (char*)errmsg);
-}
-
-#include "gdk_tags.c"
-
-Make_OptFlags_val (GdkModifier_val)
-Make_Flags_val (Event_mask_val)
-
-#define Make_test(conv) \
-value ml_test_##conv (value mask, value test) \
-{ return Val_bool (conv(mask) & Int_val(test)); }
-
-Make_test(GdkModifier_val)
-
-/* Colormap */
-
-Make_Val_final_pointer (GdkColormap, gdk_colormap_ref, gdk_colormap_unref, 0)
-ML_0 (gdk_colormap_get_system, Val_GdkColormap)
-
-/* Screen geometry */
-ML_0 (gdk_screen_width, Val_int)
-ML_0 (gdk_screen_height, Val_int)
-
-/* Visual */
-value ml_gdk_visual_get_best (value depth, value type)
-{
-     GdkVisual *vis;
-     if (type == Val_unit)
-          if (depth == Val_unit) vis = gdk_visual_get_best ();
-          else vis = gdk_visual_get_best_with_depth (Int_val(Field(depth,0)));
-     else
-          if (depth == Val_unit)
-               vis = gdk_visual_get_best_with_type
-                    (GdkVisualType_val(Field(type,0)));
-          else vis = gdk_visual_get_best_with_both
-                    (Int_val(Field(depth,0)),GdkVisualType_val(Field(type,0)));
-     if (!vis) ml_raise_gdk("Gdk.Visual.get_best");
-     return Val_GdkVisual(vis);
-}
-
-Make_Extractor (GdkVisual,GdkVisual_val,type,Val_gdkVisualType)
-Make_Extractor (GdkVisual,GdkVisual_val,depth,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,red_mask,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,red_shift,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,red_prec,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,green_mask,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,green_shift,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,green_prec,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,blue_mask,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,blue_shift,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,blue_prec,Val_int)
-
-/* Image */
-
-Make_Val_final_pointer (GdkImage, Ignore, gdk_image_destroy, 0)
-GdkImage *GdkImage_val(value val)
-{
-    if (!Field(val,1)) ml_raise_gdk ("attempt to use destroyed GdkImage");
-    return (GdkImage*)(Field(val,1));
-}
-value ml_gdk_image_destroy (value val)
-{
-    if (Field(val,1)) gdk_image_destroy((GdkImage*)(Field(val,1)));
-    Field(val,1) = NULL;
-    return Val_unit;
-}
-ML_4 (gdk_image_new_bitmap, GdkVisual_val, String_val, Int_val, Int_val,
-      Val_GdkImage)
-ML_4 (gdk_image_new, GdkImageType_val, GdkVisual_val, Int_val, Int_val,
-      Val_GdkImage)
-ML_5 (gdk_image_get, GdkWindow_val, Int_val, Int_val, Int_val, Int_val,
-      Val_GdkImage)
-ML_4 (gdk_image_put_pixel, GdkImage_val, Int_val, Int_val, Int_val, Unit)
-ML_3 (gdk_image_get_pixel, GdkImage_val, Int_val, Int_val, Val_int)
-
-/* Color */
-
-ML_2 (gdk_colormap_new, GdkVisual_val, Bool_val, Val_GdkColormap)
-
-value ml_gdk_color_white (value cmap)
-{
-    GdkColor color;
-    gdk_color_white (GdkColormap_val(cmap), &color);
-    return Val_copy(color);
-}
-    
-value ml_gdk_color_black (value cmap)
-{
-    GdkColor color;
-    gdk_color_black (GdkColormap_val(cmap), &color);
-    return Val_copy(color);
-}
-
-value ml_gdk_color_parse (char *spec)
-{
-    GdkColor color;
-    if (!gdk_color_parse (spec, &color))
-       ml_raise_gdk ("color_parse");
-    return Val_copy(color);
-}
-
-ML_2 (gdk_color_alloc, GdkColormap_val, GdkColor_val, Val_bool)
-
-value ml_GdkColor (value red, value green, value blue)
-{
-    GdkColor color;
-    color.red = Int_val(red);
-    color.green = Int_val(green);
-    color.blue = Int_val(blue);
-    color.pixel = 0;
-    return Val_copy(color);
-}
-
-Make_Extractor (GdkColor, GdkColor_val, red, Val_int)
-Make_Extractor (GdkColor, GdkColor_val, green, Val_int)
-Make_Extractor (GdkColor, GdkColor_val, blue, Val_int)
-Make_Extractor (GdkColor, GdkColor_val, pixel, Val_int)
-
-/* Rectangle */
-
-value ml_GdkRectangle (value x, value y, value width, value height)
-{
-    GdkRectangle rectangle;
-    rectangle.x = Int_val(x);
-    rectangle.y = Int_val(y);
-    rectangle.width = Int_val(width);
-    rectangle.height = Int_val(height);
-    return Val_copy(rectangle);
-}
-
-Make_Extractor (GdkRectangle, GdkRectangle_val, x, Val_int)
-Make_Extractor (GdkRectangle, GdkRectangle_val, y, Val_int)
-Make_Extractor (GdkRectangle, GdkRectangle_val, width, Val_int)
-Make_Extractor (GdkRectangle, GdkRectangle_val, height, Val_int)
-
-/* Window */
-
-Make_Val_final_pointer (GdkWindow, gdk_window_ref, gdk_window_unref, 0)
-Make_Extractor (gdk_visual_get, GdkVisual_val, depth, Val_int)
-ML_1 (gdk_window_get_visual, GdkWindow_val, Val_GdkVisual)
-ML_3 (gdk_window_set_back_pixmap, GdkWindow_val, GdkPixmap_val, Int_val, Unit)
-ML_1 (gdk_window_clear, GdkWindow_val, Unit)
-ML_0 (GDK_ROOT_PARENT, Val_GdkWindow)
-ML_1 (gdk_window_get_parent, GdkWindow_val, Val_GdkWindow)
-ML_1 (GDK_WINDOW_XWINDOW, GdkWindow_val, Val_XID)
-value ml_gdk_window_get_position (value window)
-{
-  int x, y;
-  value ret;
-
-  gdk_window_get_position (GdkWindow_val(window), &x, &y);
-  
-  ret = alloc_small (2,0);
-  Field(ret,0) = Val_int(x);
-  Field(ret,1) = Val_int(y);
-  return ret;
-}
-
-value ml_gdk_window_get_size (value window)
-{
-  int x, y;
-  value ret;
-
-  gdk_window_get_size (GdkWindow_val(window), &x, &y);
-  
-  ret = alloc_small (2,0);
-  Field(ret,0) = Val_int(x);
-  Field(ret,1) = Val_int(y);
-  return ret;
-}
-
-/* Cursor */
-
-ML_1 (gdk_cursor_new, GdkCursorType_val, Val_GdkCursor)
-ML_6 (gdk_cursor_new_from_pixmap, GdkPixmap_val, GdkPixmap_val,
-      GdkColor_val, GdkColor_val, Int_val, Int_val, Val_GdkCursor)
-ML_bc6 (ml_gdk_cursor_new_from_pixmap)
-ML_1 (gdk_cursor_destroy, GdkCursor_val, Unit)
-
-/* Pixmap */
-
-Make_Val_final_pointer (GdkPixmap, gdk_pixmap_ref, gdk_pixmap_unref, 0)
-Make_Val_final_pointer (GdkBitmap, gdk_bitmap_ref, gdk_bitmap_unref, 0)
-Make_Val_final_pointer_ext (GdkPixmap, _no_ref, Ignore, gdk_pixmap_unref, 20)
-Make_Val_final_pointer_ext (GdkBitmap, _no_ref, Ignore, gdk_bitmap_unref, 20)
-ML_4 (gdk_pixmap_new, GdkWindow_val, Int_val, Int_val, Int_val,
-      Val_GdkPixmap_no_ref)
-ML_4 (gdk_bitmap_create_from_data, GdkWindow_val,
-      String_val, Int_val, Int_val, Val_GdkBitmap_no_ref)
-ML_7 (gdk_pixmap_create_from_data, GdkWindow_val, String_val,
-      Int_val, Int_val, Int_val, GdkColor_val, GdkColor_val,
-      Val_GdkPixmap_no_ref)
-ML_bc7 (ml_gdk_pixmap_create_from_data)
-
-value ml_gdk_pixmap_colormap_create_from_xpm
-       (value window, value colormap, value transparent, char *filename)
-{
-    CAMLparam0();
-    GdkBitmap *mask;
-    CAMLlocal2(vpixmap, vmask);
-    value ret;
-
-    vpixmap = Val_GdkPixmap_no_ref
-       (gdk_pixmap_colormap_create_from_xpm
-        (GdkWindow_val(window), Option_val(colormap,GdkColormap_val,NULL),
-         &mask, Option_val(transparent,GdkColor_val,NULL), filename));
-    vmask = Val_GdkBitmap_no_ref (mask);
-
-    ret = alloc_small (2,0);
-    Field(ret,0) = vpixmap;
-    Field(ret,1) = vmask;
-    CAMLreturn(ret);
-}
-
-value ml_gdk_pixmap_colormap_create_from_xpm_d
-       (value window, value colormap, value transparent, char **data)
-{
-    CAMLparam0();
-    GdkBitmap *mask;
-    CAMLlocal2(vpixmap, vmask);
-    value ret;
-
-    vpixmap = Val_GdkPixmap_no_ref
-       (gdk_pixmap_colormap_create_from_xpm_d
-        (GdkWindow_val(window), Option_val(colormap,GdkColormap_val,NULL),
-         &mask, Option_val(transparent,GdkColor_val,NULL), data));
-    vmask = Val_GdkBitmap_no_ref (mask);
-
-    ret = alloc_small (2, 0);
-    Field(ret,0) = vpixmap;
-    Field(ret,1) = vmask;
-    CAMLreturn(ret);
-}
-
-/* Font */
-
-Make_Val_final_pointer (GdkFont, gdk_font_ref, gdk_font_unref, 0)
-Make_Val_final_pointer_ext (GdkFont, _no_ref, Ignore, gdk_font_unref, 20)
-ML_1 (gdk_font_load, String_val, Val_GdkFont_no_ref)
-ML_1 (gdk_fontset_load, String_val, Val_GdkFont_no_ref)
-ML_2 (gdk_string_width, GdkFont_val, String_val, Val_int)
-ML_2 (gdk_char_width, GdkFont_val, (gchar)Long_val, Val_int)
-ML_2 (gdk_string_height, GdkFont_val, String_val, Val_int)
-ML_2 (gdk_char_height, GdkFont_val, (gchar)Long_val, Val_int)
-ML_2 (gdk_string_measure, GdkFont_val, String_val, Val_int)
-ML_2 (gdk_char_measure, GdkFont_val, (char)Long_val, Val_int)
-Make_Extractor (GdkFont, GdkFont_val, type, Val_gdkFontType)
-Make_Extractor (GdkFont, GdkFont_val, ascent, Val_int)
-Make_Extractor (GdkFont, GdkFont_val, descent, Val_int)
-
-/* Region */
-
-#define PointArray_val(val) ((GdkPoint*)&Field(val,1))
-#define PointArrayLen_val(val) Int_val(Field(val,0))
-Make_Val_final_pointer (GdkRegion, Ignore, gdk_region_destroy, 0)
-GdkRegion *GdkRegion_val(value val)
-{
-    if (!Field(val,1)) ml_raise_gdk ("attempt to use destroyed GdkRegion");
-    return (GdkRegion*)(Field(val,1));
-}
-value ml_gdk_region_destroy (value val)
-{
-    if (Field(val,1)) gdk_region_destroy((GdkRegion*)(Field(val,1)));
-    Field(val,1) = NULL;
-    return Val_unit;
-}
-ML_0 (gdk_region_new, Val_GdkRegion)
-ML_2 (gdk_region_polygon, Insert(PointArray_val(arg1)) PointArrayLen_val,
-      GdkFillRule_val, Val_GdkRegion)
-ML_2 (gdk_regions_intersect, GdkRegion_val, GdkRegion_val, Val_GdkRegion)
-ML_2 (gdk_regions_union, GdkRegion_val, GdkRegion_val, Val_GdkRegion)
-ML_2 (gdk_regions_subtract, GdkRegion_val, GdkRegion_val, Val_GdkRegion)
-ML_2 (gdk_regions_xor, GdkRegion_val, GdkRegion_val, Val_GdkRegion)
-ML_2 (gdk_region_union_with_rect, GdkRegion_val, GdkRectangle_val,
-      Val_GdkRegion)
-ML_3 (gdk_region_offset, GdkRegion_val, Int_val, Int_val, Unit)
-ML_3 (gdk_region_shrink, GdkRegion_val, Int_val, Int_val, Unit)
-ML_1 (gdk_region_empty, GdkRegion_val, Val_bool)
-ML_2 (gdk_region_equal, GdkRegion_val, GdkRegion_val, Val_bool)
-ML_3 (gdk_region_point_in, GdkRegion_val, Int_val, Int_val, Val_bool)
-ML_2 (gdk_region_rect_in, GdkRegion_val, GdkRectangle_val, Val_gdkOverlapType)
-ML_2 (gdk_region_get_clipbox, GdkRegion_val, GdkRectangle_val, Unit)
-
-
-/* GC */
-
-Make_Val_final_pointer (GdkGC, gdk_gc_ref, gdk_gc_unref, 0)
-Make_Val_final_pointer_ext (GdkGC, _no_ref, Ignore, gdk_gc_unref, 20)
-ML_1 (gdk_gc_new, GdkWindow_val, Val_GdkGC_no_ref)
-ML_2 (gdk_gc_set_foreground, GdkGC_val, GdkColor_val, Unit)
-ML_2 (gdk_gc_set_background, GdkGC_val, GdkColor_val, Unit)
-ML_2 (gdk_gc_set_font, GdkGC_val, GdkFont_val, Unit)
-ML_2 (gdk_gc_set_function, GdkGC_val, GdkFunction_val, Unit)
-ML_2 (gdk_gc_set_fill, GdkGC_val, GdkFill_val, Unit)
-ML_2 (gdk_gc_set_tile, GdkGC_val, GdkPixmap_val, Unit)
-ML_2 (gdk_gc_set_stipple, GdkGC_val, GdkPixmap_val, Unit)
-ML_3 (gdk_gc_set_ts_origin, GdkGC_val, Int_val, Int_val, Unit)
-ML_3 (gdk_gc_set_clip_origin, GdkGC_val, Int_val, Int_val, Unit)
-ML_2 (gdk_gc_set_clip_mask, GdkGC_val, GdkBitmap_val, Unit)
-ML_2 (gdk_gc_set_clip_rectangle, GdkGC_val, GdkRectangle_val, Unit)
-ML_2 (gdk_gc_set_clip_region, GdkGC_val, GdkRegion_val, Unit)
-ML_2 (gdk_gc_set_subwindow, GdkGC_val, GdkSubwindowMode_val, Unit)
-ML_2 (gdk_gc_set_exposures, GdkGC_val, Bool_val, Unit)
-ML_5 (gdk_gc_set_line_attributes, GdkGC_val, Int_val, GdkLineStyle_val,
-      GdkCapStyle_val, GdkJoinStyle_val, Unit)
-ML_2 (gdk_gc_copy, GdkGC_val, GdkGC_val, Unit)
-value ml_gdk_gc_get_values (value gc)
-{
-    CAMLparam0();
-    GdkGCValues values;
-    int i;
-    CAMLlocal2(ret, tmp);
-
-    gdk_gc_get_values (GdkGC_val(gc), &values);
-    ret = alloc (18, 0);
-    tmp = Val_copy(values.foreground); Store_field(ret, 0, tmp);
-    tmp = Val_copy(values.background); Store_field(ret, 1, tmp);
-    if (values.font) {
-        tmp = ml_some(Val_GdkFont(values.font));
-        Store_field(ret, 2, tmp);
-    }
-    Field(ret,3) = Val_gdkFunction(values.function);
-    Field(ret,4) = Val_gdkFill(values.fill);
-    if (values.tile) {
-        tmp = ml_some(Val_GdkPixmap(values.tile));
-        Store_field(ret, 5, tmp);
-    }
-    if (values.tile) {
-        tmp = ml_some(Val_GdkPixmap(values.stipple));
-        Store_field(ret, 6, tmp);
-    }
-    if (values.tile) {
-        tmp = ml_some(Val_GdkPixmap(values.clip_mask));
-        Store_field(ret, 7, tmp);
-    }
-    Field(ret,8) = Val_gdkSubwindowMode(values.subwindow_mode);
-    Field(ret,9) = Val_int(values.ts_x_origin);
-    Field(ret,10) = Val_int(values.ts_y_origin);
-    Field(ret,11) = Val_int(values.clip_x_origin);
-    Field(ret,12) = Val_int(values.clip_y_origin);
-    Field(ret,13) = Val_bool(values.graphics_exposures);
-    Field(ret,14) = Val_int(values.line_width);
-    Field(ret,15) = Val_gdkLineStyle(values.line_style);
-    Field(ret,16) = Val_gdkCapStyle(values.cap_style);
-    Field(ret,17) = Val_gdkJoinStyle(values.join_style);
-    CAMLreturn(ret);
-}
-
-/* Draw */
-
-value ml_point_array_new (value len)
-{
-    value ret = alloc (1 + Wosize_asize(Int_val(len)*sizeof(GdkPoint)),
-                      Abstract_tag);
-    Field(ret,0) = len;
-    return ret;
-}
-value ml_point_array_set (value arr, value pos, value x, value y)
-{
-    GdkPoint *pt = PointArray_val(arr) + Int_val(pos);
-    pt->x = Int_val(x);
-    pt->y = Int_val(y);
-    return Val_unit;
-}
-
-ML_4 (gdk_draw_point, GdkDrawable_val, GdkGC_val, Int_val, Int_val, Unit)
-ML_6 (gdk_draw_line, GdkDrawable_val, GdkGC_val, Int_val, Int_val,
-      Int_val, Int_val, Unit)
-ML_bc6 (ml_gdk_draw_line)
-ML_7 (gdk_draw_rectangle, GdkDrawable_val, GdkGC_val, Bool_val,
-      Int_val, Int_val, Int_val, Int_val, Unit)
-ML_bc7 (ml_gdk_draw_rectangle)
-ML_9 (gdk_draw_arc, GdkDrawable_val, GdkGC_val, Bool_val, Int_val, Int_val,
-      Int_val, Int_val, Int_val, Int_val, Unit)
-ML_bc9 (ml_gdk_draw_arc)
-ML_4 (gdk_draw_polygon, GdkDrawable_val, GdkGC_val, Bool_val,
-      Insert(PointArray_val(arg4)) PointArrayLen_val, Unit)
-ML_6 (gdk_draw_string, GdkDrawable_val, GdkFont_val, GdkGC_val, Int_val, Int_val, String_val, Unit)
-ML_bc6 (ml_gdk_draw_string)
-
-ML_9 (gdk_draw_image, GdkDrawable_val, GdkGC_val, GdkImage_val, Int_val, Int_val, Int_val, Int_val, Int_val, Int_val, Unit)
-ML_bc9 (ml_gdk_draw_image)
-
-/* RGB */
-
-ML_0 (gdk_rgb_init, Unit)
-ML_0 (gdk_rgb_get_visual, Val_GdkVisual)
-ML_0 (gdk_rgb_get_cmap, Val_GdkColormap)
-
-/* Events */
-
-/* Have a major collection every 1000 events */
-Make_Val_final_pointer (GdkEvent, Ignore, gdk_event_free, 1)
-ML_1 (gdk_event_copy, GdkEvent_val, Val_GdkEvent)
-
-value ml_gdk_event_new (value event_type)
-{
-    GdkEvent event;
-    memset (&event, 0, sizeof(GdkEvent));
-    event.type = GdkEventType_val(event_type);
-    event.any.send_event = TRUE;
-    return Val_copy(event);
-}
-
-#define GdkEvent_arg(type) (GdkEvent##type*)GdkEvent_val
-
-Make_Extractor (GdkEventAny, GdkEvent_arg(Any), type, Val_gdkEventType)
-Make_Extractor (GdkEventAny, GdkEvent_arg(Any), window, Val_GdkWindow)
-Make_Extractor (GdkEventAny, GdkEvent_arg(Any), send_event, Val_bool)
-Make_Setter (gdk_event_set, GdkEvent_arg(Any), GdkEventType_val, type)
-Make_Setter (gdk_event_set, GdkEvent_arg(Any), GdkWindow_val, window)
-
-Make_Extractor (GdkEventExpose, GdkEvent_arg(Expose), area, Val_copy)
-Make_Extractor (GdkEventExpose, GdkEvent_arg(Expose), count, Val_int)
-
-Make_Extractor (GdkEventVisibility, GdkEvent_arg(Visibility), state,
-               Val_gdkVisibilityState)
-
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), time, Val_int)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), x, copy_double)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), y, copy_double)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), pressure, copy_double)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), xtilt, copy_double)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), ytilt, copy_double)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), state, Val_int)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), is_hint, Val_int)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), source, Val_gdkInputSource)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), deviceid, Val_int)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), x_root, copy_double)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), y_root, copy_double)
-
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), time, Val_int)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), x, copy_double)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), y, copy_double)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), pressure, copy_double)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), xtilt, copy_double)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), ytilt, copy_double)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), state, Val_int)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), button, Val_int)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), source, Val_gdkInputSource)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), deviceid, Val_int)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), x_root, copy_double)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), y_root, copy_double)
-
-Make_Setter (gdk_event_button_set, GdkEvent_arg(Button), Int_val, button)
-
-Make_Extractor (GdkEventKey, GdkEvent_arg(Key), time, Val_int)
-Make_Extractor (GdkEventKey, GdkEvent_arg(Key), state, Val_int)
-Make_Extractor (GdkEventKey, GdkEvent_arg(Key), keyval, Val_int)
-Make_Extractor (GdkEventKey, GdkEvent_arg(Key), string, Val_string)
-
-Make_Extractor (GdkEventCrossing, GdkEvent_arg(Crossing), subwindow,
-               Val_GdkWindow)
-Make_Extractor (GdkEventCrossing, GdkEvent_arg(Crossing), detail,
-               Val_gdkNotifyType)
-
-Make_Extractor (GdkEventFocus, GdkEvent_arg(Focus), in, Val_int)
-
-Make_Extractor (GdkEventConfigure, GdkEvent_arg(Configure), x, Val_int)
-Make_Extractor (GdkEventConfigure, GdkEvent_arg(Configure), y, Val_int)
-Make_Extractor (GdkEventConfigure, GdkEvent_arg(Configure), width, Val_int)
-Make_Extractor (GdkEventConfigure, GdkEvent_arg(Configure), height, Val_int)
-
-Make_Extractor (GdkEventProperty, GdkEvent_arg(Property), atom, Val_int)
-Make_Extractor (GdkEventProperty, GdkEvent_arg(Property), time, Val_int)
-Make_Extractor (GdkEventProperty, GdkEvent_arg(Property), state, Val_int)
-
-Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), selection, Val_int)
-Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), target, Val_int)
-Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), property, Val_int)
-Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), requestor, Val_int)
-Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), time, Val_int)
-
-Make_Extractor (GdkEventProximity, GdkEvent_arg(Proximity), time, Val_int)
-Make_Extractor (GdkEventProximity, GdkEvent_arg(Proximity), source,
-               Val_gdkInputSource)
-Make_Extractor (GdkEventProximity, GdkEvent_arg(Proximity), deviceid, Val_int)
-
-/* DnD */
-Make_Val_final_pointer (GdkDragContext, gdk_drag_context_ref, gdk_drag_context_unref, 0)
-Make_Flags_val (GdkDragAction_val)
-ML_3 (gdk_drag_status, GdkDragContext_val, Flags_GdkDragAction_val, Int_val, Unit)
-Make_Extractor (GdkDragContext, GdkDragContext_val, suggested_action, Val_gdkDragAction)
-value val_int(gpointer i)
-{
-  return Val_int (GPOINTER_TO_INT(i));
-}
-value ml_GdkDragContext_targets (value c)
-{
-  GList *t;
-
-  t = (GdkDragContext_val(c))->targets;
-  return Val_GList (t, val_int);
-}
-
-/* Misc */
-ML_0 (gdk_flush, Unit)
-ML_0 (gdk_beep, Unit)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gdk.h b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gdk.h
deleted file mode 100644 (file)
index 5d699ac..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $Id$ */
-
-#define GdkColormap_val(val) ((GdkColormap*)Pointer_val(val))
-extern value Val_GdkColormap (GdkColormap *);
-
-#define GdkColor_val(val) ((GdkColor*)MLPointer_val(val))
-#define Val_GdkColor Val_pointer
-
-#define GdkRectangle_val(val) ((GdkRectangle*)MLPointer_val(val))
-#define Val_GdkRectangle Val_pointer
-
-#define GdkDrawable_val(val) ((GdkDrawable*)Pointer_val(val))
-
-#define GdkWindow_val(val) ((GdkWindow*)Pointer_val(val))
-extern value Val_GdkWindow (GdkWindow *);
-
-#define GdkCursor_val(val) ((GdkCursor*)Pointer_val(val))
-#define Val_GdkCursor Val_pointer
-
-#define GdkPixmap_val(val) ((GdkPixmap*)Pointer_val(val))
-extern value Val_GdkPixmap (GdkPixmap *);
-
-#define GdkBitmap_val(val) ((GdkBitmap*)Pointer_val(val))
-extern value Val_GdkBitmap (GdkBitmap *);
-
-extern GdkImage *GdkImage_val (value); /* check argument */
-extern value Val_GdkImage (GdkImage *); /* finalizer is destroy! */
-
-#define GdkFont_val(val) ((GdkFont*)Pointer_val(val))
-extern value Val_GdkFont (GdkFont *);
-
-extern GdkRegion *GdkRegion_val (value); /* check argument */
-extern value Val_GdkRegion (GdkRegion *); /* finalizer is destroy! */
-
-#define GdkGC_val(val) ((GdkGC*)Pointer_val(val))
-extern value Val_GdkGC (GdkGC *);
-
-#define GdkEvent_val (GdkEvent*)MLPointer_val
-
-#define GdkVisual_val(val) ((GdkVisual*) val)
-#define Val_GdkVisual(visual) ((value) visual)
-
-#define Val_XID copy_int32
-#define XID_val Int32_val
-
-extern int OptFlags_GdkModifier_val (value);
-extern int Flags_Event_mask_val (value);
-extern lookup_info ml_table_extension_events[];
-#define Extension_events_val(key) ml_lookup_to_c (ml_table_extension_events, key)
-
-#define GdkDragContext_val(val) ((GdkDragContext*)Pointer_val(val))
-extern value Val_GdkDragContext (GdkDragContext *);
-extern int Flags_GdkDragAction_val (value);
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_glib.c b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_glib.c
deleted file mode 100644 (file)
index b7d3fcb..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/* $Id$ */
-
-#include <glib.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-
-/*
-value Val_GSList (GSList *list, value (*func)(gpointer))
-{
-    value new_cell, result, last_cell, cell;
-
-    if (list == NULL) return Val_unit;
-
-    last_cell = cell = Val_unit;
-    result = func(list->data);
-    Begin_roots3 (last_cell, cell, result);
-    cell = last_cell = alloc_tuple (2);
-    Field(cell,0) = result;
-    Field(cell,1) = Val_unit;
-    list = list->next;
-    while (list != NULL) {
-       result = func(list->data);
-       new_cell = alloc_tuple(2);
-       Field(new_cell,0) = result;
-       Field(new_cell,1) = Val_unit;
-       modify(&Field(last_cell,1), new_cell);
-       last_cell = new_cell;
-       list = list->next;
-    }
-    End_roots ();
-    return cell;
-}
-
-GSList *GSList_val (value list, gpointer (*func)(value))
-{
-    GSList *res = NULL;
-    GSList **current = &res;
-    value cell = list;
-    if (list == Val_unit) return res;
-    Begin_root (cell);
-    while (cell != Val_unit) {
-       *current = g_slist_alloc ();
-       (*current)->data = func(Field(cell,0));
-       cell = Field(cell,1);
-       current = &(*current)->next;
-    }
-    End_roots ();
-    return res;
-}
-*/
-
-value Val_GList (GList *list, value (*func)(gpointer))
-{
-    value new_cell, result, last_cell, cell;
-
-    if (list == NULL) return Val_unit;
-
-    last_cell = cell = Val_unit;
-    result = func(list->data);
-    Begin_roots3 (last_cell, cell, result);
-    cell = last_cell = alloc_small(2,0);
-    Field(cell,0) = result;
-    Field(cell,1) = Val_unit;
-    list = list->next;
-    while (list != NULL) {
-       result = func(list->data);
-       new_cell = alloc_small(2,0);
-       Field(new_cell,0) = result;
-       Field(new_cell,1) = Val_unit;
-       modify(&Field(last_cell,1), new_cell);
-       last_cell = new_cell;
-       list = list->next;
-    }
-    End_roots ();
-    return cell;
-}
-
-GList *GList_val (value list, gpointer (*func)(value))
-{
-    CAMLparam1(list);
-    GList *res = NULL;
-    if (list == Val_unit) CAMLreturn (res);
-    for (; Is_block(list); list = Field(list,1))
-      res = g_list_append (res, func(Field(list,0)));
-    CAMLreturn (res);
-}
-
-static value ml_warning_handler = 0L;
-
-static void ml_warning_wrapper (const gchar *msg)
-{
-    value arg = copy_string ((char*)msg);
-    callback (ml_warning_handler, arg);
-}
-    
-value ml_g_set_warning_handler (value clos)
-{
-    value old_handler = ml_warning_handler ? ml_warning_handler : clos;
-    if (!ml_warning_handler) register_global_root (&ml_warning_handler);
-    g_set_warning_handler (ml_warning_wrapper);
-    ml_warning_handler = clos;
-    return old_handler;
-}
-
-static value ml_print_handler = 0L;
-
-static void ml_print_wrapper (const gchar *msg)
-{
-    value arg = copy_string ((char*)msg);
-    callback (ml_print_handler, arg);
-}
-    
-value ml_g_set_print_handler (value clos)
-{
-    value old_handler = ml_print_handler ? ml_print_handler : clos;
-    if (!ml_print_handler) register_global_root (&ml_print_handler);
-    g_set_print_handler (ml_print_wrapper);
-    ml_print_handler = clos;
-    return old_handler;
-}
-
-value ml_get_null (value unit) { return 0L; }
-
-#define GMainLoop_val(val) ((GMainLoop*)Addr_val(val))
-ML_1 (g_main_new, Bool_val, Val_addr)
-ML_1 (g_main_iteration, Bool_val, Val_bool)
-ML_0 (g_main_pending, Val_bool)
-ML_1 (g_main_is_running, GMainLoop_val, Val_bool)
-ML_1 (g_main_quit, GMainLoop_val, Unit)
-ML_1 (g_main_destroy, GMainLoop_val, Unit)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_glib.h b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_glib.h
deleted file mode 100644 (file)
index f0b45db..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-/* $Id$ */
-
-/*
-value Val_GSList (GSList *list, value (*func)(gpointer));
-
-GSList *GSList_val (value list, gpointer (*func)(value));
-*/
-
-value Val_GList (GList *list, value (*func)(gpointer));
-GList *GList_val (value list, gpointer (*func)(value));
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gtk.c b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gtk.c
deleted file mode 100644 (file)
index 0ee12a2..0000000
+++ /dev/null
@@ -1,2170 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtk_tags.h"
-
-void ml_raise_gtk (const char *errmsg)
-{
-  static value * exn = NULL;
-  if (exn == NULL)
-      exn = caml_named_value ("gtkerror");
-  raise_with_string (*exn, (char*)errmsg);
-}
-
-value copy_string_and_free (char *str)
-{
-    value res;
-    res = copy_string_check (str);
-    g_free (str);
-    return res;
-}
-
-value *ml_gtk_root_new (value v)
-{
-    value *p = stat_alloc(sizeof(value));
-    *p = v;
-    register_global_root (p);
-    return p;
-}
-
-void ml_gtk_root_destroy (gpointer data)
-{
-    remove_global_root ((value *)data);
-    stat_free (data);
-}
-
-/* conversion functions */
-
-#include "gtk_tags.c"
-
-ML_1 (Val_direction_type, Int_val, Id)
-ML_1 (Val_orientation, Int_val, Id)
-ML_1 (Val_toolbar_style, Int_val, Id)
-ML_1 (Val_state_type, Int_val, Id)
-ML_1 (Val_scroll_type, Int_val, Id)
-
-Make_Flags_val (Attach_options_val)
-Make_Flags_val (Button_action_val)
-Make_Flags_val (Dest_defaults_val)
-Make_Flags_val (Target_flags_val)
-Make_Flags_val (Font_type_val)
-
-/* gtkobject.h */
-
-Make_Val_final_pointer(GtkObject, gtk_object_ref, gtk_object_unref, 0)
-
-#define gtk_object_ref_and_sink(w) (gtk_object_ref(w), gtk_object_sink(w))
-Make_Val_final_pointer_ext(GtkObject, _sink , gtk_object_ref_and_sink,
-                           gtk_object_unref, 20)
-
-/* gtkaccelgroup.h */
-
-#define GtkAccelGroup_val(val) ((GtkAccelGroup*)Pointer_val(val))
-Make_Val_final_pointer (GtkAccelGroup, gtk_accel_group_ref,
-                       gtk_accel_group_unref, 0)
-Make_Val_final_pointer_ext (GtkAccelGroup, _no_ref, Ignore,
-                            gtk_accel_group_unref, 20)
-Make_OptFlags_val (Accel_flag_val)
-
-#define Signal_name_val(val) String_val(Field(val,0))
-
-ML_0 (gtk_accel_group_new, Val_GtkAccelGroup_no_ref)
-ML_0 (gtk_accel_group_get_default, Val_GtkAccelGroup)
-ML_3 (gtk_accel_group_activate, GtkAccelGroup_val, Int_val,
-      OptFlags_GdkModifier_val, Val_bool)
-ML_3 (gtk_accel_groups_activate, GtkObject_val, Int_val,
-      OptFlags_GdkModifier_val, Val_bool)
-ML_2 (gtk_accel_group_attach, GtkAccelGroup_val, GtkObject_val, Unit)
-ML_2 (gtk_accel_group_detach, GtkAccelGroup_val, GtkObject_val, Unit)
-ML_1 (gtk_accel_group_lock, GtkAccelGroup_val, Unit)
-ML_1 (gtk_accel_group_unlock, GtkAccelGroup_val, Unit)
-ML_3 (gtk_accel_group_lock_entry, GtkAccelGroup_val, Int_val,
-      OptFlags_GdkModifier_val, Unit)
-ML_3 (gtk_accel_group_unlock_entry, GtkAccelGroup_val, Int_val,
-      OptFlags_GdkModifier_val, Unit)
-ML_6 (gtk_accel_group_add, GtkAccelGroup_val, Int_val,
-      OptFlags_GdkModifier_val, OptFlags_Accel_flag_val,
-      GtkObject_val, Signal_name_val, Unit)
-ML_bc6 (ml_gtk_accel_group_add)
-ML_4 (gtk_accel_group_remove, GtkAccelGroup_val, Int_val,
-      OptFlags_GdkModifier_val, GtkObject_val, Unit)
-ML_2 (gtk_accelerator_valid, Int_val, OptFlags_GdkModifier_val, Val_bool)
-ML_1 (gtk_accelerator_set_default_mod_mask, OptFlags_GdkModifier_val, Unit)
-
-/* gtkstyle.h */
-
-#define GtkStyle_val(val) ((GtkStyle*)Pointer_val(val))
-Make_Val_final_pointer (GtkStyle, gtk_style_ref, gtk_style_unref, 0)
-Make_Val_final_pointer_ext (GtkStyle, _no_ref, Ignore, gtk_style_unref, 20)
-ML_0 (gtk_style_new, Val_GtkStyle_no_ref)
-ML_1 (gtk_style_copy, GtkStyle_val, Val_GtkStyle_no_ref)
-ML_2 (gtk_style_attach, GtkStyle_val, GdkWindow_val, Val_GtkStyle)
-ML_1 (gtk_style_detach, GtkStyle_val, Unit)
-ML_3 (gtk_style_set_background, GtkStyle_val, GdkWindow_val, State_type_val, Unit)
-ML_6 (gtk_draw_hline, GtkStyle_val, GdkWindow_val, State_type_val,
-      Int_val, Int_val, Int_val, Unit)
-ML_bc6 (ml_gtk_draw_hline)
-ML_6 (gtk_draw_vline, GtkStyle_val, GdkWindow_val, State_type_val,
-      Int_val, Int_val, Int_val, Unit)
-ML_bc6 (ml_gtk_draw_vline)
-Make_Array_Extractor (gtk_style_get, GtkStyle_val, State_type_val,  bg, Val_copy)
-Make_Array_Setter (gtk_style_set, GtkStyle_val, State_type_val, *GdkColor_val, bg)
-Make_Extractor (gtk_style_get, GtkStyle_val, colormap, Val_GdkColormap)
-Make_Extractor (gtk_style_get, GtkStyle_val, depth, Val_int)
-Make_Extractor (gtk_style_get, GtkStyle_val, font, Val_GdkFont)
-/* Make_Setter (gtk_style_set, GtkStyle_val, GdkFont_val, font) */
-value ml_gtk_style_set_font (value st, value font)
-{
-    GtkStyle *style = GtkStyle_val(st);
-    if (style->font) gdk_font_unref(style->font);
-    style->font = GdkFont_val(font);
-    gdk_font_ref(style->font);
-    return Val_unit;
-}   
-Make_Array_Extractor (gtk_style_get, GtkStyle_val, State_type_val,  dark_gc, Val_GdkGC)
-Make_Array_Extractor (gtk_style_get, GtkStyle_val, State_type_val,  light_gc, Val_GdkGC)
-
-/* gtktypeutils.h */
-
-ML_1 (gtk_type_name, Int_val, Val_string)
-ML_1 (gtk_type_from_name, String_val, Val_int)
-ML_1 (gtk_type_parent, Int_val, Val_int)
-ML_1 (gtk_type_class, Int_val, (value))
-ML_1 (gtk_type_parent_class, Int_val, (value))
-ML_2 (gtk_type_is_a, Int_val, Int_val, Val_bool)
-value ml_gtk_type_fundamental (value type)
-{
-    return Val_fundamental_type (GTK_FUNDAMENTAL_TYPE (Int_val(type)));
-}
-
-/* gtkobject.h */
-
-/* ML_1 (GTK_OBJECT_TYPE, GtkObject_val, Val_int) */
-value ml_gtk_object_type (value val)
-{
-    return Val_int (GtkObject_val(val)->klass->type);
-}
-
-ML_1 (gtk_object_destroy, GtkObject_val, Unit)
-ML_1 (gtk_object_ref, GtkObject_val, Unit)
-ML_1 (gtk_object_unref, GtkObject_val, Unit)
-ML_1 (gtk_object_sink, GtkObject_val, Unit)
-
-Make_Extractor (gtk_class,(GtkObjectClass *),type,Val_int)
-
-/* gtkdata.h */
-
-/* gtkadjustment.h */
-
-#define GtkAdjustment_val(val) check_cast(GTK_ADJUSTMENT,val)
-ML_6 (gtk_adjustment_new, Float_val, Float_val, Float_val, Float_val,
-      Float_val, Float_val, Val_GtkObject_sink)
-ML_bc6 (ml_gtk_adjustment_new)
-ML_2 (gtk_adjustment_set_value, GtkAdjustment_val, Float_val, Unit)
-ML_3 (gtk_adjustment_clamp_page, GtkAdjustment_val,
-      Float_val, Float_val, Unit)
-Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, lower, copy_double)
-Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, upper, copy_double)
-Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, value, copy_double)
-Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, step_increment,
-               copy_double)
-Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, page_increment,
-               copy_double)
-Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, page_size, copy_double)
-
-/* gtktooltips.h */
-
-#define GtkWidget_val(val) check_cast(GTK_WIDGET,val)
-#define GtkTooltips_val(val) check_cast(GTK_TOOLTIPS,val)
-ML_0 (gtk_tooltips_new, Val_GtkAny)
-ML_1 (gtk_tooltips_enable, GtkTooltips_val, Unit)
-ML_1 (gtk_tooltips_disable, GtkTooltips_val, Unit)
-ML_2 (gtk_tooltips_set_delay, GtkTooltips_val, Int_val, Unit)
-ML_4 (gtk_tooltips_set_tip, GtkTooltips_val, GtkWidget_val,
-      String_option_val, String_option_val, Unit)
-ML_3 (gtk_tooltips_set_colors, GtkTooltips_val,
-      Option_val(arg2, GdkColor_val, NULL) Ignore,
-      Option_val(arg3, GdkColor_val, NULL) Ignore,
-      Unit)
-
-/* gtkwidget.h */
-
-value ml_gtk_widget_set_can_default (value val, value bool)
-{
-    GtkWidget *w = GtkWidget_val(val);
-    guint32 saved_flags = GTK_WIDGET_FLAGS(w);
-    if (Bool_val(bool)) GTK_WIDGET_SET_FLAGS(w, GTK_CAN_DEFAULT);
-    else GTK_WIDGET_UNSET_FLAGS(w, GTK_CAN_DEFAULT);
-    if (saved_flags != GTK_WIDGET_FLAGS(w))
-       gtk_widget_queue_resize (w);
-    return Val_unit;
-}
-value ml_gtk_widget_set_can_focus (value val, value bool)
-{
-    GtkWidget *w = GtkWidget_val(val);
-    guint32 saved_flags = GTK_WIDGET_FLAGS(w);
-    if (Bool_val(bool)) GTK_WIDGET_SET_FLAGS(w, GTK_CAN_FOCUS);
-    else GTK_WIDGET_UNSET_FLAGS(w, GTK_CAN_FOCUS);
-    if (saved_flags != GTK_WIDGET_FLAGS(w))
-       gtk_widget_queue_resize (w);
-    return Val_unit;
-}
-ML_1 (gtk_widget_unparent, GtkWidget_val, Unit)
-ML_1 (gtk_widget_show, GtkWidget_val, Unit)
-ML_1 (gtk_widget_show_now, GtkWidget_val, Unit)
-ML_1 (gtk_widget_show_all, GtkWidget_val, Unit)
-ML_1 (gtk_widget_hide, GtkWidget_val, Unit)
-ML_1 (gtk_widget_hide_all, GtkWidget_val, Unit)
-ML_1 (gtk_widget_map, GtkWidget_val, Unit)
-ML_1 (gtk_widget_unmap, GtkWidget_val, Unit)
-ML_1 (gtk_widget_realize, GtkWidget_val, Unit)
-ML_1 (gtk_widget_unrealize, GtkWidget_val, Unit)
-ML_1 (gtk_widget_queue_draw, GtkWidget_val, Unit)
-ML_1 (gtk_widget_queue_resize, GtkWidget_val, Unit)
-ML_2 (gtk_widget_draw, GtkWidget_val,
-      Option_val(arg2,GdkRectangle_val,NULL) Ignore, Unit)
-ML_1 (gtk_widget_draw_focus, GtkWidget_val, Unit)
-ML_1 (gtk_widget_draw_default, GtkWidget_val, Unit)
-/* ML_1 (gtk_widget_draw_children, GtkWidget_val, Unit) */
-ML_2 (gtk_widget_event, GtkWidget_val, GdkEvent_val, Val_bool)
-ML_1 (gtk_widget_activate, GtkWidget_val, Val_bool)
-ML_2 (gtk_widget_reparent, GtkWidget_val, GtkWidget_val, Unit)
-ML_3 (gtk_widget_popup, GtkWidget_val, Int_val, Int_val, Unit)
-value ml_gtk_widget_intersect (value w, value area)
-{
-    GdkRectangle inter;
-    if (gtk_widget_intersect(GtkWidget_val(w), GdkRectangle_val(area), &inter))
-       return ml_some (Val_copy (inter));
-    return Val_unit;
-}
-/* ML_1 (gtk_widget_basic, GtkWidget_val, Val_bool) */
-ML_1 (gtk_widget_grab_focus, GtkWidget_val, Unit)
-ML_1 (gtk_widget_grab_default, GtkWidget_val, Unit)
-ML_2 (gtk_widget_set_name, GtkWidget_val, String_val, Unit)
-ML_1 (gtk_widget_get_name, GtkWidget_val, Val_string)
-ML_2 (gtk_widget_set_state, GtkWidget_val, State_type_val, Unit)
-ML_2 (gtk_widget_set_sensitive, GtkWidget_val, Bool_val, Unit)
-ML_3 (gtk_widget_set_uposition, GtkWidget_val, Int_val, Int_val, Unit)
-ML_3 (gtk_widget_set_usize, GtkWidget_val, Int_val, Int_val, Unit)
-ML_2 (gtk_widget_add_events, GtkWidget_val, Flags_Event_mask_val, Unit)
-ML_2 (gtk_widget_set_events, GtkWidget_val, Flags_Event_mask_val, Unit)
-ML_2 (gtk_widget_set_extension_events, GtkWidget_val, Extension_events_val,
-      Unit)
-ML_1 (gtk_widget_get_toplevel, GtkWidget_val, Val_GtkWidget)
-ML_2 (gtk_widget_get_ancestor, GtkWidget_val, Int_val, Val_GtkWidget)
-ML_1 (gtk_widget_get_colormap, GtkWidget_val, Val_GdkColormap)
-ML_1 (gtk_widget_get_visual, GtkWidget_val, (value))
-value ml_gtk_widget_get_pointer (value w)
-{
-    int x,y;
-    value ret;
-    gtk_widget_get_pointer (GtkWidget_val(w), &x, &y);
-    ret = alloc_small (2,0);
-    Field(ret,0) = Val_int(x);
-    Field(ret,1) = Val_int(y);
-    return ret;
-}
-ML_2 (gtk_widget_is_ancestor, GtkWidget_val, GtkWidget_val, Val_bool)
-/* ML_2 (gtk_widget_is_child, GtkWidget_val, GtkWidget_val, Val_bool) */
-ML_2 (gtk_widget_set_style, GtkWidget_val, GtkStyle_val, Unit)
-ML_1 (gtk_widget_set_rc_style, GtkWidget_val, Unit)
-ML_1 (gtk_widget_ensure_style, GtkWidget_val, Unit)
-ML_1 (gtk_widget_get_style, GtkWidget_val, Val_GtkStyle)
-ML_1 (gtk_widget_restore_default_style, GtkWidget_val, Unit)
-
-ML_6 (gtk_widget_add_accelerator, GtkWidget_val, Signal_name_val,
-      GtkAccelGroup_val, Char_val, OptFlags_GdkModifier_val,
-      OptFlags_Accel_flag_val, Unit)
-ML_bc6 (ml_gtk_widget_add_accelerator)
-ML_4 (gtk_widget_remove_accelerator, GtkWidget_val, GtkAccelGroup_val,
-      Char_val, OptFlags_GdkModifier_val, Unit)
-ML_1 (gtk_widget_lock_accelerators, GtkWidget_val, Unit)
-ML_1 (gtk_widget_unlock_accelerators, GtkWidget_val, Unit)
-ML_1 (gtk_widget_accelerators_locked, GtkWidget_val, Val_bool)
-
-ML_1 (GTK_WIDGET_VISIBLE, GtkWidget_val, Val_bool)
-ML_1 (GTK_WIDGET_HAS_FOCUS, GtkWidget_val, Val_bool)
-
-Make_Extractor (GtkWidget, GtkWidget_val, window, Val_GdkWindow)
-Make_Extractor (gtk_widget, GtkWidget_val, parent, Val_GtkWidget)
-static value Val_GtkAllocation (GtkAllocation allocation)
-{
-    value ret = alloc_small (4, 0);
-    Field(ret,0) = Val_int(allocation.x);
-    Field(ret,1) = Val_int(allocation.y);
-    Field(ret,2) = Val_int(allocation.width);
-    Field(ret,3) = Val_int(allocation.height);
-    return ret;
-}
-Make_Extractor (gtk_widget, GtkWidget_val, allocation, Val_GtkAllocation)
-/*
-#define GtkAllocation_val(val) ((GtkAllocation*)Pointer_val(val))
-Make_Extractor (gtk_allocation, GtkAllocation_val, x, Val_int)
-Make_Extractor (gtk_allocation, GtkAllocation_val, y, Val_int)
-Make_Extractor (gtk_allocation, GtkAllocation_val, width, Val_int)
-Make_Extractor (gtk_allocation, GtkAllocation_val, height, Val_int)
-*/
-
-ML_2 (gtk_widget_set_app_paintable, GtkWidget_val, Bool_val, Unit)
-
-ML_2 (gtk_widget_set_visual, GtkWidget_val, GdkVisual_val, Unit)
-ML_2 (gtk_widget_set_colormap, GtkWidget_val, GdkColormap_val, Unit)
-ML_1 (gtk_widget_set_default_visual, GdkVisual_val, Unit)
-ML_1 (gtk_widget_set_default_colormap, GdkColormap_val, Unit)
-ML_0 (gtk_widget_get_default_visual, Val_GdkVisual)
-ML_0 (gtk_widget_get_default_colormap, Val_GdkColormap)
-ML_1 (gtk_widget_push_visual, GdkVisual_val, Unit)
-ML_1 (gtk_widget_push_colormap, GdkColormap_val, Unit)
-ML_0 (gtk_widget_pop_visual, Unit)
-ML_0 (gtk_widget_pop_colormap, Unit)
-
-/* gtkdnd.h */
-
-value ml_gtk_drag_dest_set (value w, value f, value t, value a)
-{
-  GtkTargetEntry *targets = (GtkTargetEntry *)Val_unit;
-  int n_targets, i;
-  
-  CAMLparam4 (w,f,t,a);
-  n_targets = Wosize_val(t);
-  if (n_targets)
-      targets = (GtkTargetEntry *)
-         alloc (Wosize_asize(n_targets * sizeof(GtkTargetEntry)),
-                Abstract_tag);
-  for (i=0; i<n_targets; i++) {
-    targets[i].target = String_val(Field(Field(t, i), 0));
-    targets[i].flags = Flags_Target_flags_val(Field(Field(t, i), 1));
-    targets[i].info = Int_val(Field(Field(t, i), 2));
-  }
-  gtk_drag_dest_set (GtkWidget_val(w), Flags_Dest_defaults_val(f),
-                    targets, n_targets, Flags_GdkDragAction_val(a));
-  CAMLreturn(Val_unit);
-}
-ML_1 (gtk_drag_dest_unset, GtkWidget_val, Unit)
-ML_4 (gtk_drag_finish, GdkDragContext_val, Bool_val, Bool_val, Int_val, Unit)
-ML_4 (gtk_drag_get_data, GtkWidget_val, GdkDragContext_val, Int_val, Int_val, Unit)
-ML_1 (gtk_drag_get_source_widget, GdkDragContext_val, Val_GtkWidget)
-ML_1 (gtk_drag_highlight, GtkWidget_val, Unit)
-ML_1 (gtk_drag_unhighlight, GtkWidget_val, Unit)
-ML_4 (gtk_drag_set_icon_widget, GdkDragContext_val, GtkWidget_val,
-      Int_val, Int_val, Unit)
-ML_6 (gtk_drag_set_icon_pixmap, GdkDragContext_val, GdkColormap_val,
-      GdkPixmap_val, Option_val(arg4, GdkBitmap_val, NULL) Ignore,
-      Int_val, Int_val, Unit)
-ML_bc6 (ml_gtk_drag_set_icon_pixmap)
-ML_1 (gtk_drag_set_icon_default, GdkDragContext_val, Unit)
-ML_5 (gtk_drag_set_default_icon, GdkColormap_val,
-      GdkPixmap_val, Option_val(arg3, GdkBitmap_val, NULL) Ignore,
-      Int_val, Int_val, Unit)
-value ml_gtk_drag_source_set (value w, value m, value t, value a)
-{
-  GtkTargetEntry *targets = (GtkTargetEntry *)Val_unit;
-  int n_targets, i;
-  CAMLparam4 (w,m,t,a);
-  
-  n_targets = Wosize_val(t);
-  if (n_targets)
-      targets = (GtkTargetEntry *)
-         alloc (Wosize_asize(n_targets * sizeof(GtkTargetEntry)),
-                Abstract_tag);
-  for (i=0; i<n_targets; i++) {
-    targets[i].target = String_val(Field(Field(t, i), 0));
-    targets[i].flags = Flags_Target_flags_val(Field(Field(t, i), 1));
-    targets[i].info = Int_val(Field(Field(t, i), 2));
-  }
-  gtk_drag_source_set (GtkWidget_val(w), OptFlags_GdkModifier_val(m),
-                      targets, n_targets, Flags_GdkDragAction_val(a));
-  CAMLreturn(Val_unit);
-}
-ML_4 (gtk_drag_source_set_icon, GtkWidget_val, GdkColormap_val,
-      GdkPixmap_val, Option_val(arg4, GdkBitmap_val, NULL) Ignore, Unit)
-ML_1 (gtk_drag_source_unset, GtkWidget_val, Unit)
-
-/* gtkwidget.h / gtkselection.h */
-
-#define GtkSelectionData_val(val) ((GtkSelectionData *)Pointer_val(val))
-
-Make_Extractor (gtk_selection_data, GtkSelectionData_val, selection, Val_int)
-Make_Extractor (gtk_selection_data, GtkSelectionData_val, target, Val_int)
-Make_Extractor (gtk_selection_data, GtkSelectionData_val, type, Val_int)
-Make_Extractor (gtk_selection_data, GtkSelectionData_val, format, Val_int)
-value ml_gtk_selection_data_get_data (value val)
-{
-    value ret;
-    GtkSelectionData *data = GtkSelectionData_val(val);
-
-    if (data->length < 0) ml_raise_null_pointer();
-    ret = alloc_string (data->length);
-    if (data->length) memcpy ((void*)ret, data->data, data->length);
-    return ret;
-}
-
-ML_4 (gtk_selection_data_set, GtkSelectionData_val, Int_val, Int_val,
-      Insert((guchar*)String_option_val(arg4))
-      Option_val(arg4, string_length, -1) Ignore,
-      Unit)
-
-/* gtkcontainer.h */
-
-#define GtkContainer_val(val) check_cast(GTK_CONTAINER,val)
-ML_2 (gtk_container_set_border_width, GtkContainer_val, Int_val, Unit)
-ML_2 (gtk_container_set_resize_mode, GtkContainer_val, Resize_mode_val, Unit)
-ML_2 (gtk_container_add, GtkContainer_val, GtkWidget_val, Unit)
-ML_2 (gtk_container_remove, GtkContainer_val, GtkWidget_val, Unit)
-static void ml_gtk_simple_callback (GtkWidget *w, gpointer data)
-{
-    value val, *clos = (value*)data;
-    val = Val_GtkWidget(w);
-    callback (*clos, val);
-}
-value ml_gtk_container_foreach (value w, value clos)
-{
-    CAMLparam1(clos);
-    gtk_container_foreach (GtkContainer_val(w), ml_gtk_simple_callback,
-                          &clos);
-    CAMLreturn(Val_unit);
-}
-ML_1 (gtk_container_register_toplevel, GtkContainer_val, Unit)
-ML_1 (gtk_container_unregister_toplevel, GtkContainer_val, Unit)
-ML_2 (gtk_container_focus, GtkContainer_val, Direction_type_val, Val_bool)
-ML_2 (gtk_container_set_focus_child, GtkContainer_val, GtkWidget_val, Unit)
-ML_2 (gtk_container_set_focus_vadjustment, GtkContainer_val,
-      GtkAdjustment_val, Unit)
-ML_2 (gtk_container_set_focus_hadjustment, GtkContainer_val,
-      GtkAdjustment_val, Unit)
-
-/* gtkbin.h */
-
-/* gtkalignment.h */
-
-#define GtkAlignment_val(val) check_cast(GTK_ALIGNMENT,val)
-ML_4 (gtk_alignment_new, Float_val, Float_val, Float_val, Float_val,
-      Val_GtkWidget_sink)
-value ml_gtk_alignment_set (value x, value y,
-                          value xscale, value yscale, value val)
-{
-    GtkAlignment *alignment = GtkAlignment_val(val);
-    gtk_alignment_set (alignment,
-                      Option_val(x, Float_val, alignment->xalign),
-                      Option_val(y, Float_val, alignment->yalign),
-                      Option_val(xscale, Float_val, alignment->xscale),
-                      Option_val(yscale, Float_val, alignment->xscale));
-    return Val_unit;
-}
-
-/* gtkeventbox.h */
-
-ML_0 (gtk_event_box_new, Val_GtkWidget_sink)
-
-/* gtkframe.h */
-
-#define GtkFrame_val(val) check_cast(GTK_FRAME,val)
-ML_1 (gtk_frame_new, Optstring_val, Val_GtkWidget_sink)
-ML_2 (gtk_frame_set_label, GtkFrame_val, Optstring_val, Unit)
-ML_3 (gtk_frame_set_label_align, GtkFrame_val, Float_val, Float_val, Unit)
-ML_2 (gtk_frame_set_shadow_type, GtkFrame_val, Shadow_type_val, Unit)
-Make_Extractor (gtk_frame_get, GtkFrame_val, label_xalign, copy_double)
-Make_Extractor (gtk_frame_get, GtkFrame_val, label_yalign, copy_double)
-
-/* gtkaspectframe.h */
-
-#define GtkAspectFrame_val(val) check_cast(GTK_ASPECT_FRAME,val)
-ML_5 (gtk_aspect_frame_new, Optstring_val,
-      Float_val, Float_val, Float_val, Bool_val, Val_GtkWidget_sink)
-ML_5 (gtk_aspect_frame_set, GtkAspectFrame_val, Float_val, Float_val,
-      Float_val, Bool_val, Unit)
-Make_Extractor (gtk_aspect_frame_get, GtkAspectFrame_val, xalign, copy_double)
-Make_Extractor (gtk_aspect_frame_get, GtkAspectFrame_val, yalign, copy_double)
-Make_Extractor (gtk_aspect_frame_get, GtkAspectFrame_val, ratio, copy_double)
-Make_Extractor (gtk_aspect_frame_get, GtkAspectFrame_val, obey_child, Val_bool)
-
-/* gtkhandlebox.h */
-
-#define GtkHandleBox_val(val) check_cast(GTK_HANDLE_BOX,val)
-ML_0 (gtk_handle_box_new, Val_GtkWidget_sink)
-ML_2 (gtk_handle_box_set_shadow_type, GtkHandleBox_val, Shadow_type_val, Unit)
-ML_2 (gtk_handle_box_set_handle_position, GtkHandleBox_val, Position_val, Unit)
-ML_2 (gtk_handle_box_set_snap_edge, GtkHandleBox_val, Position_val, Unit)
-
-/* gtkinvisible.h */
-/* private class
-ML_0 (gtk_invisible_new, Val_GtkWidget_sink)
-*/
-
-/* gtkitem.h */
-
-#define GtkItem_val(val) check_cast(GTK_ITEM,val)
-ML_1 (gtk_item_select, GtkItem_val, Unit)
-ML_1 (gtk_item_deselect, GtkItem_val, Unit)
-ML_1 (gtk_item_toggle, GtkItem_val, Unit)
-
-/* gtklistitem.h */
-
-ML_0 (gtk_list_item_new, Val_GtkWidget_sink)
-ML_1 (gtk_list_item_new_with_label, String_val, Val_GtkWidget_sink)
-
-/* gtkmenuitem.h */
-
-#define GtkMenuItem_val(val) check_cast(GTK_MENU_ITEM,val)
-ML_0 (gtk_menu_item_new, Val_GtkWidget_sink)
-ML_0 (gtk_tearoff_menu_item_new, Val_GtkWidget_sink)
-ML_1 (gtk_menu_item_new_with_label, String_val, Val_GtkWidget_sink)
-ML_2 (gtk_menu_item_set_submenu, GtkMenuItem_val, GtkWidget_val, Unit)
-ML_1 (gtk_menu_item_remove_submenu, GtkMenuItem_val, Unit)
-ML_2 (gtk_menu_item_set_placement, GtkMenuItem_val,
-      Submenu_placement_val, Unit)
-ML_3 (gtk_menu_item_configure, GtkMenuItem_val, Bool_val, Bool_val, Unit)
-ML_1 (gtk_menu_item_activate, GtkMenuItem_val, Unit)
-ML_1 (gtk_menu_item_right_justify, GtkMenuItem_val, Unit)
-
-/* gtkcheckmenuitem.h */
-
-#define GtkCheckMenuItem_val(val) check_cast(GTK_CHECK_MENU_ITEM,val)
-ML_0 (gtk_check_menu_item_new, Val_GtkWidget_sink)
-ML_1 (gtk_check_menu_item_new_with_label, String_val, Val_GtkWidget_sink)
-ML_2 (gtk_check_menu_item_set_active, GtkCheckMenuItem_val, Bool_val, Unit)
-ML_2 (gtk_check_menu_item_set_show_toggle, GtkCheckMenuItem_val,
-      Bool_val, Unit)
-ML_1 (gtk_check_menu_item_toggled, GtkCheckMenuItem_val, Unit)
-Make_Extractor (gtk_check_menu_item_get, GtkCheckMenuItem_val,
-               active, Val_bool)
-
-/* gtkradiomenuitem.h */
-
-#define GtkRadioMenuItem_val(val) check_cast(GTK_RADIO_MENU_ITEM,val)
-static GSList* item_group_val(value val)
-{
-    return (val == Val_unit ? NULL :
-            gtk_radio_menu_item_group(GtkRadioMenuItem_val(Field(val,0))));
-}
-ML_1 (gtk_radio_menu_item_new, item_group_val, Val_GtkWidget_sink)
-ML_2 (gtk_radio_menu_item_new_with_label, item_group_val,
-      String_val, Val_GtkWidget_sink)
-ML_2 (gtk_radio_menu_item_set_group, GtkRadioMenuItem_val,
-      item_group_val, Unit)
-
-/* gtktreeitem.h */
-
-#define GtkTreeItem_val(val) check_cast(GTK_TREE_ITEM,val)
-ML_0 (gtk_tree_item_new, Val_GtkWidget_sink)
-ML_1 (gtk_tree_item_new_with_label, String_val, Val_GtkWidget_sink)
-ML_2 (gtk_tree_item_set_subtree, GtkTreeItem_val, GtkWidget_val, Unit)
-ML_1 (gtk_tree_item_remove_subtree, GtkTreeItem_val, Unit)
-ML_1 (gtk_tree_item_expand, GtkTreeItem_val, Unit)
-ML_1 (gtk_tree_item_collapse, GtkTreeItem_val, Unit)
-ML_1 (GTK_TREE_ITEM_SUBTREE, GtkTreeItem_val, Val_GtkWidget)
-
-/* gtkviewport.h */
-
-#define GtkViewport_val(val) check_cast(GTK_VIEWPORT,val)
-ML_2 (gtk_viewport_new, GtkAdjustment_val, GtkAdjustment_val,
-      Val_GtkWidget_sink)
-ML_1 (gtk_viewport_get_hadjustment, GtkViewport_val, Val_GtkWidget_sink)
-ML_1 (gtk_viewport_get_vadjustment, GtkViewport_val, Val_GtkWidget)
-ML_2 (gtk_viewport_set_hadjustment, GtkViewport_val, GtkAdjustment_val, Unit)
-ML_2 (gtk_viewport_set_vadjustment, GtkViewport_val, GtkAdjustment_val, Unit)
-ML_2 (gtk_viewport_set_shadow_type, GtkViewport_val, Shadow_type_val, Unit)
-
-/* gtkdialog.h */
-
-static void window_unref (GtkObject *w)
-{
-    /* If the window exists and is still not visible, then unreference twice.
-       This should be enough to destroy it. */
-    if (!GTK_OBJECT_DESTROYED(w) && !GTK_WIDGET_VISIBLE(w))
-       gtk_object_unref (w);
-    gtk_object_unref (w);
-}
-Make_Val_final_pointer_ext (GtkObject, _window, gtk_object_ref, window_unref,
-                            20)
-#define Val_GtkWidget_window(w) Val_GtkObject_window((GtkObject*)w)
-
-#define GtkDialog_val(val) check_cast(GTK_DIALOG,val)
-ML_0 (gtk_dialog_new, Val_GtkWidget_window)
-Make_Extractor (GtkDialog, GtkDialog_val, action_area, Val_GtkWidget)
-Make_Extractor (GtkDialog, GtkDialog_val, vbox, Val_GtkWidget)
-
-/* gtkinputdialog.h */
-
-ML_0 (gtk_input_dialog_new, Val_GtkWidget_window)
-
-/* gtkfileselection.h */
-
-#define GtkFileSelection_val(val) check_cast(GTK_FILE_SELECTION,val)
-ML_1 (gtk_file_selection_new, String_val, Val_GtkWidget_window)
-ML_2 (gtk_file_selection_set_filename, GtkFileSelection_val, String_val, Unit)
-ML_1 (gtk_file_selection_get_filename, GtkFileSelection_val, Val_string)
-ML_1 (gtk_file_selection_show_fileop_buttons, GtkFileSelection_val, Unit)
-ML_1 (gtk_file_selection_hide_fileop_buttons, GtkFileSelection_val, Unit)
-Make_Extractor (gtk_file_selection_get, GtkFileSelection_val, ok_button,
-               Val_GtkWidget)
-Make_Extractor (gtk_file_selection_get, GtkFileSelection_val, cancel_button,
-               Val_GtkWidget)
-Make_Extractor (gtk_file_selection_get, GtkFileSelection_val, help_button,
-               Val_GtkWidget)
-
-/* gtkwindow.h */
-
-#define GtkWindow_val(val) check_cast(GTK_WINDOW,val)
-ML_1 (gtk_window_new, Window_type_val, Val_GtkWidget_window)
-ML_2 (gtk_window_set_title, GtkWindow_val, String_val, Unit)
-ML_3 (gtk_window_set_wmclass, GtkWindow_val, String_val, String_val, Unit)
-Make_Extractor (gtk_window_get, GtkWindow_val, wmclass_name, Val_optstring)
-Make_Extractor (gtk_window_get, GtkWindow_val, wmclass_class, Val_optstring)
-ML_2 (gtk_window_set_focus, GtkWindow_val, GtkWidget_val, Unit)
-ML_2 (gtk_window_set_default, GtkWindow_val, GtkWidget_val, Unit)
-ML_4 (gtk_window_set_policy, GtkWindow_val, Bool_val, Bool_val, Bool_val, Unit)
-Make_Extractor (gtk_window_get, GtkWindow_val, allow_shrink, Val_bool)
-Make_Extractor (gtk_window_get, GtkWindow_val, allow_grow, Val_bool)
-Make_Extractor (gtk_window_get, GtkWindow_val, auto_shrink, Val_bool)
-ML_2 (gtk_window_add_accel_group, GtkWindow_val,
-      GtkAccelGroup_val, Unit)
-ML_2 (gtk_window_remove_accel_group, GtkWindow_val,
-      GtkAccelGroup_val, Unit)
-ML_1 (gtk_window_activate_focus, GtkWindow_val, Val_bool)
-ML_1 (gtk_window_activate_default, GtkWindow_val, Val_bool)
-ML_2 (gtk_window_set_modal, GtkWindow_val, Bool_val, Unit)
-ML_3 (gtk_window_set_default_size, GtkWindow_val, Int_val, Int_val, Unit)
-ML_2 (gtk_window_set_position, GtkWindow_val, Window_position_val, Unit)
-ML_2 (gtk_window_set_transient_for, GtkWindow_val, GtkWindow_val, Unit)
-
-/* gtkcolorsel.h */
-
-#define GtkColorSelection_val(val) check_cast(GTK_COLOR_SELECTION,val)
-#define GtkColorSelectionDialog_val(val) check_cast(GTK_COLOR_SELECTION_DIALOG,val)
-ML_0 (gtk_color_selection_new, Val_GtkWidget_sink)
-ML_2 (gtk_color_selection_set_update_policy, GtkColorSelection_val,
-      Update_type_val, Unit)
-ML_2 (gtk_color_selection_set_opacity, GtkColorSelection_val,
-      Bool_val, Unit)
-value ml_gtk_color_selection_set_color (value w, value red, value green,
-                                       value blue, value opacity)
-{
-    double color[4];
-    color[0] = Double_val(red);
-    color[1] = Double_val(green);
-    color[2] = Double_val(blue);
-    color[3] = Option_val(opacity,Double_val,0.0);
-    gtk_color_selection_set_color (GtkColorSelection_val(w), color);
-    return Val_unit;
-}
-value ml_gtk_color_selection_get_color (value w)
-{
-    value ret;
-    double color[4];
-    color[3] = 0.0;
-    gtk_color_selection_get_color (GtkColorSelection_val(w), color);
-    ret = alloc (4*Double_wosize, Double_array_tag);
-    Store_double_field (ret, 0, color[0]);
-    Store_double_field (ret, 1, color[1]);
-    Store_double_field (ret, 2, color[2]);
-    Store_double_field (ret, 3, color[3]);
-    return ret;
-}
-ML_1 (gtk_color_selection_dialog_new, String_val, Val_GtkWidget_window)
-Make_Extractor (gtk_color_selection_dialog, GtkColorSelectionDialog_val, ok_button, Val_GtkWidget)
-Make_Extractor (gtk_color_selection_dialog, GtkColorSelectionDialog_val, cancel_button, Val_GtkWidget)
-Make_Extractor (gtk_color_selection_dialog, GtkColorSelectionDialog_val, help_button, Val_GtkWidget)
-Make_Extractor (gtk_color_selection_dialog, GtkColorSelectionDialog_val, colorsel, Val_GtkWidget)
-
-/* gtkfontsel.h */
-
-#define GtkFontSelection_val(val) \
-   check_cast(GTK_FONT_SELECTION,val)
-ML_0 (gtk_font_selection_new, Val_GtkWidget_sink)
-ML_1 (gtk_font_selection_get_font, GtkFontSelection_val,
-      Val_GdkFont)
-ML_1 (gtk_font_selection_get_font_name, GtkFontSelection_val,
-      copy_string_check)
-ML_2 (gtk_font_selection_set_font_name, GtkFontSelection_val,
-      String_val, Val_bool)
-ML_9 (gtk_font_selection_set_filter, GtkFontSelection_val,
-      Font_filter_type_val, Flags_Font_type_val,
-      (gchar**), (gchar**), (gchar**),
-      (gchar**), (gchar**), (gchar**), Unit)
-ML_bc9 (ml_gtk_font_selection_set_filter)
-ML_1 (gtk_font_selection_get_preview_text, GtkFontSelection_val,
-      copy_string)
-ML_2 (gtk_font_selection_set_preview_text, GtkFontSelection_val,
-      String_val, Unit)
-
-#define GtkFontSelectionDialog_val(val) \
-   check_cast(GTK_FONT_SELECTION_DIALOG,val)
-ML_1 (gtk_font_selection_dialog_new, String_option_val, Val_GtkWidget_window)
-/*
-ML_1 (gtk_font_selection_dialog_get_font, GtkFontSelectionDialog_val,
-      Val_GdkFont)
-ML_1 (gtk_font_selection_dialog_get_font_name, GtkFontSelectionDialog_val,
-      copy_string_check)
-ML_2 (gtk_font_selection_dialog_set_font_name, GtkFontSelectionDialog_val,
-      String_val, Val_bool)
-ML_9 (gtk_font_selection_dialog_set_filter, GtkFontSelectionDialog_val,
-      Font_filter_type_val, Flags_Font_type_val,
-      (gchar**), (gchar**), (gchar**),
-      (gchar**), (gchar**), (gchar**), Unit)
-ML_bc9 (ml_gtk_font_selection_dialog_set_filter)
-ML_1 (gtk_font_selection_dialog_get_preview_text, GtkFontSelectionDialog_val,
-      copy_string)
-ML_2 (gtk_font_selection_dialog_set_preview_text, GtkFontSelectionDialog_val,
-      String_val, Unit)
-*/
-Make_Extractor (gtk_font_selection_dialog, GtkFontSelectionDialog_val,
-                fontsel, Val_GtkWidget)
-Make_Extractor (gtk_font_selection_dialog, GtkFontSelectionDialog_val,
-               ok_button, Val_GtkWidget)
-Make_Extractor (gtk_font_selection_dialog, GtkFontSelectionDialog_val,
-               apply_button, Val_GtkWidget)
-Make_Extractor (gtk_font_selection_dialog, GtkFontSelectionDialog_val,
-               cancel_button, Val_GtkWidget)
-
-/* gtkplug.h */
-
-ML_1 (gtk_plug_new, XID_val, Val_GtkWidget_window)
-
-/* gtkbox.h */
-
-#define GtkBox_val(val) check_cast(GTK_BOX,val)
-ML_5 (gtk_box_pack_start, GtkBox_val, GtkWidget_val, Bool_val, Bool_val,
-      Int_val, Unit)
-ML_5 (gtk_box_pack_end, GtkBox_val, GtkWidget_val, Bool_val, Bool_val,
-      Int_val, Unit)
-ML_2 (gtk_box_set_homogeneous, GtkBox_val, Bool_val, Unit)
-ML_2 (gtk_box_set_spacing, GtkBox_val, Int_val, Unit)
-ML_3 (gtk_box_reorder_child, GtkBox_val, GtkWidget_val, Int_val, Unit)
-value ml_gtk_box_query_child_packing (value box, value child)
-{
-    int expand, fill;
-    unsigned int padding;
-    GtkPackType pack_type;
-    value ret;
-    gtk_box_query_child_packing (GtkBox_val(box), GtkWidget_val(child),
-                                &expand, &fill, &padding, &pack_type);
-    ret = alloc_small(4,0);
-    Field(ret,0) = Val_bool(expand);
-    Field(ret,1) = Val_bool(fill);
-    Field(ret,2) = Val_int(padding);
-    Field(ret,3) = Val_pack_type(pack_type);
-    return ret;
-}
-value ml_gtk_box_set_child_packing (value vbox, value vchild, value vexpand,
-                                   value vfill, value vpadding, value vpack)
-{
-    GtkBox *box = GtkBox_val(vbox);
-    GtkWidget *child = GtkWidget_val(vchild);
-    int expand, fill;
-    unsigned int padding;
-    GtkPackType pack;
-    gtk_box_query_child_packing (box, child, &expand, &fill, &padding, &pack);
-    gtk_box_set_child_packing (box, child,
-                              Option_val(vexpand, Bool_val, expand),
-                              Option_val(vfill, Bool_val, fill),
-                              Option_val(vpadding, Int_val, padding),
-                              Option_val(vpack, Pack_type_val, pack));
-    return Val_unit;
-}
-ML_bc6 (ml_gtk_box_set_child_packing)
-
-ML_2 (gtk_hbox_new, Bool_val, Int_val, Val_GtkWidget_sink)
-ML_2 (gtk_vbox_new, Bool_val, Int_val, Val_GtkWidget_sink)
-
-/* gtkbbox.h */
-    
-#define GtkButtonBox_val(val) check_cast(GTK_BUTTON_BOX,val)
-Make_Extractor (gtk_button_box_get, GtkButtonBox_val, spacing, Val_int)
-Make_Extractor (gtk_button_box_get, GtkButtonBox_val, child_min_width, Val_int)
-Make_Extractor (gtk_button_box_get, GtkButtonBox_val, child_min_height,
-               Val_int)
-Make_Extractor (gtk_button_box_get, GtkButtonBox_val, child_ipad_x, Val_int)
-Make_Extractor (gtk_button_box_get, GtkButtonBox_val, child_ipad_y, Val_int)
-Make_Extractor (gtk_button_box_get, GtkButtonBox_val, layout_style,
-               Val_button_box_style)
-ML_2 (gtk_button_box_set_spacing, GtkButtonBox_val, Int_val, Unit)
-ML_3 (gtk_button_box_set_child_size, GtkButtonBox_val,
-      Int_val, Int_val, Unit)
-ML_3 (gtk_button_box_set_child_ipadding, GtkButtonBox_val,
-      Int_val, Int_val, Unit)
-ML_2 (gtk_button_box_set_layout, GtkButtonBox_val, Button_box_style_val, Unit)
-ML_2 (gtk_button_box_set_child_size_default, Int_val, Int_val, Unit)
-ML_2 (gtk_button_box_set_child_ipadding_default, Int_val, Int_val, Unit)
-
-ML_0 (gtk_hbutton_box_new, Val_GtkWidget_sink)
-ML_0 (gtk_vbutton_box_new, Val_GtkWidget_sink)
-
-/* gtklist.h */
-
-#define GtkList_val(val) check_cast(GTK_LIST,val)
-ML_0 (gtk_list_new, Val_GtkWidget_sink)
-value ml_gtk_list_insert_item (value list, value item, value pos)
-{
-    GList *tmp_list = g_list_alloc ();
-    tmp_list->data = GtkWidget_val(item);
-    tmp_list->next = NULL;
-    tmp_list->prev = NULL;
-    gtk_list_insert_items (GtkList_val(list), tmp_list, Int_val(pos));
-    return Val_unit;
-}
-ML_3 (gtk_list_clear_items, GtkList_val, Int_val, Int_val, Unit)
-ML_2 (gtk_list_select_item, GtkList_val, Int_val, Unit)
-ML_2 (gtk_list_unselect_item, GtkList_val, Int_val, Unit)
-ML_2 (gtk_list_select_child, GtkList_val, GtkWidget_val, Unit)
-ML_2 (gtk_list_unselect_child, GtkList_val, GtkWidget_val, Unit)
-ML_2 (gtk_list_child_position, GtkList_val, GtkWidget_val, Val_int)
-ML_2 (gtk_list_set_selection_mode, GtkList_val, Selection_mode_val, Unit)
-
-/* gtkcombo.h */
-
-#define GtkCombo_val(val) check_cast(GTK_COMBO,val)
-ML_0 (gtk_combo_new, Val_GtkWidget_sink)
-ML_3 (gtk_combo_set_value_in_list, GtkCombo_val,
-      Option_val(arg2, Bool_val, GtkCombo_val(arg1)->value_in_list) Ignore,
-      Option_val(arg3, Bool_val, GtkCombo_val(arg1)->ok_if_empty) Ignore,
-      Unit)
-ML_2 (gtk_combo_set_use_arrows, GtkCombo_val, Bool_val, Unit)
-ML_2 (gtk_combo_set_use_arrows_always, GtkCombo_val, Bool_val, Unit)
-ML_2 (gtk_combo_set_case_sensitive, GtkCombo_val, Bool_val, Unit)
-ML_3 (gtk_combo_set_item_string, GtkCombo_val, GtkItem_val, String_val, Unit)
-ML_1 (gtk_combo_disable_activate, GtkCombo_val, Unit)
-Make_Extractor (gtk_combo, GtkCombo_val, entry, Val_GtkWidget)
-Make_Extractor (gtk_combo, GtkCombo_val, list, Val_GtkWidget)
-
-/* gtkstatusbar.h */
-
-#define GtkStatusbar_val(val) check_cast(GTK_STATUSBAR,val)
-ML_0 (gtk_statusbar_new, Val_GtkWidget_sink)
-ML_2 (gtk_statusbar_get_context_id, GtkStatusbar_val, String_val, Val_int)
-ML_3 (gtk_statusbar_push, GtkStatusbar_val, Int_val, String_val, Val_int)
-ML_2 (gtk_statusbar_pop, GtkStatusbar_val, Int_val, Unit)
-ML_3 (gtk_statusbar_remove, GtkStatusbar_val, Int_val, Int_val, Unit)
-
-/* gtkgamma.h */
-
-#define GtkGammaCurve_val(val) check_cast(GTK_GAMMA_CURVE,val)
-ML_0 (gtk_gamma_curve_new, Val_GtkWidget_sink)
-Make_Extractor (gtk_gamma_curve_get, GtkGammaCurve_val, gamma, copy_double)
-
-/* gtkbutton.h */
-
-#define GtkButton_val(val) check_cast(GTK_BUTTON,val)
-ML_0 (gtk_button_new, Val_GtkWidget_sink)
-ML_1 (gtk_button_new_with_label, String_val, Val_GtkWidget_sink)
-ML_1 (gtk_button_pressed, GtkButton_val, Unit)
-ML_1 (gtk_button_released, GtkButton_val, Unit)
-ML_1 (gtk_button_clicked, GtkButton_val, Unit)
-ML_1 (gtk_button_enter, GtkButton_val, Unit)
-ML_1 (gtk_button_leave, GtkButton_val, Unit)
-
-/* gtkoptionmenu.h */
-
-#define GtkOptionMenu_val(val) check_cast(GTK_OPTION_MENU,val)
-ML_0 (gtk_option_menu_new, Val_GtkWidget_sink)
-ML_1 (gtk_option_menu_get_menu, GtkOptionMenu_val, Val_GtkWidget_sink)
-ML_2 (gtk_option_menu_set_menu, GtkOptionMenu_val, GtkWidget_val, Unit)
-ML_1 (gtk_option_menu_remove_menu, GtkOptionMenu_val, Unit)
-ML_2 (gtk_option_menu_set_history, GtkOptionMenu_val, Int_val, Unit)
-
-/* gtktogglebutton.h */
-
-#define GtkToggleButton_val(val) check_cast(GTK_TOGGLE_BUTTON,val)
-ML_0 (gtk_toggle_button_new, Val_GtkWidget_sink)
-ML_1 (gtk_toggle_button_new_with_label, String_val, Val_GtkWidget_sink)
-ML_2 (gtk_toggle_button_set_mode, GtkToggleButton_val, Bool_val, Unit)
-ML_2 (gtk_toggle_button_set_active, GtkToggleButton_val, Bool_val, Unit)
-ML_1 (gtk_toggle_button_toggled, GtkToggleButton_val, Unit)
-Make_Extractor (gtk_toggle_button_get, GtkToggleButton_val, active, Val_bool)
-
-/* gtkcheckbutton.h */
-
-#define GtkCheckButton_val(val) check_cast(GTK_CHECK_BUTTON,val)
-ML_0 (gtk_check_button_new, Val_GtkWidget_sink)
-ML_1 (gtk_check_button_new_with_label, String_val, Val_GtkWidget_sink)
-
-/* gtkradiobutton.h */
-
-#define GtkRadioButton_val(val) check_cast(GTK_RADIO_BUTTON,val)
-static GSList* button_group_val(value val)
-{
-    return (val == Val_unit ? NULL :
-            gtk_radio_button_group(GtkRadioButton_val(Field(val,0))));
-}
-ML_1 (gtk_radio_button_new, button_group_val,
-      Val_GtkWidget_sink)
-ML_2 (gtk_radio_button_new_with_label, button_group_val,
-      String_val, Val_GtkWidget_sink)
-ML_2 (gtk_radio_button_set_group, GtkRadioButton_val, button_group_val, Unit)
-
-/* gtkclist.h */
-
-#define GtkCList_val(val) check_cast(GTK_CLIST,val)
-ML_1 (gtk_clist_new, Int_val, Val_GtkWidget_sink)
-ML_1 (gtk_clist_new_with_titles, Insert(Wosize_val(arg1)) (char **),
-      Val_GtkWidget_sink)
-Make_Extractor (gtk_clist_get, GtkCList_val, rows, Val_int)
-Make_Extractor (gtk_clist_get, GtkCList_val, columns, Val_int)
-Make_Extractor (gtk_clist_get, GtkCList_val, focus_row, Val_int)
-ML_2 (gtk_clist_set_hadjustment, GtkCList_val, GtkAdjustment_val, Unit)
-ML_2 (gtk_clist_set_vadjustment, GtkCList_val, GtkAdjustment_val, Unit)
-ML_1 (gtk_clist_get_hadjustment, GtkCList_val, Val_GtkAny)
-ML_1 (gtk_clist_get_vadjustment, GtkCList_val, Val_GtkAny)
-ML_2 (gtk_clist_set_shadow_type, GtkCList_val, Shadow_type_val, Unit)
-ML_2 (gtk_clist_set_selection_mode, GtkCList_val, Selection_mode_val, Unit)
-ML_2 (gtk_clist_set_reorderable, GtkCList_val, Bool_val, Unit)
-ML_2 (gtk_clist_set_use_drag_icons, GtkCList_val, Bool_val, Unit)
-ML_3 (gtk_clist_set_button_actions, GtkCList_val, Int_val,
-      (guint8)Flags_Button_action_val, Unit)
-ML_1 (gtk_clist_freeze, GtkCList_val, Unit)
-ML_1 (gtk_clist_thaw, GtkCList_val, Unit)
-ML_1 (gtk_clist_column_titles_show, GtkCList_val, Unit)
-ML_1 (gtk_clist_column_titles_hide, GtkCList_val, Unit)
-ML_2 (gtk_clist_column_title_active, GtkCList_val, Int_val, Unit)
-ML_2 (gtk_clist_column_title_passive, GtkCList_val, Int_val, Unit)
-ML_1 (gtk_clist_column_titles_active, GtkCList_val, Unit)
-ML_1 (gtk_clist_column_titles_passive, GtkCList_val, Unit)
-ML_3 (gtk_clist_set_column_title, GtkCList_val, Int_val, String_val, Unit)
-ML_2 (gtk_clist_get_column_title, GtkCList_val, Int_val, Val_string)
-ML_3 (gtk_clist_set_column_widget, GtkCList_val, Int_val, GtkWidget_val, Unit)
-ML_2 (gtk_clist_get_column_widget, GtkCList_val, Int_val, Val_GtkWidget)
-ML_3 (gtk_clist_set_column_justification, GtkCList_val, Int_val,
-      Justification_val, Unit)
-ML_3 (gtk_clist_set_column_visibility, GtkCList_val, Int_val, Bool_val, Unit)
-ML_3 (gtk_clist_set_column_resizeable, GtkCList_val, Int_val, Bool_val, Unit)
-ML_3 (gtk_clist_set_column_auto_resize, GtkCList_val, Int_val, Bool_val, Unit)
-ML_1 (gtk_clist_columns_autosize, GtkCList_val, Unit)
-ML_2 (gtk_clist_optimal_column_width, GtkCList_val, Int_val, Val_int)
-ML_3 (gtk_clist_set_column_width, GtkCList_val, Int_val, Int_val, Unit)
-ML_3 (gtk_clist_set_column_min_width, GtkCList_val, Int_val, Int_val, Unit)
-ML_3 (gtk_clist_set_column_max_width, GtkCList_val, Int_val, Int_val, Unit)
-ML_2 (gtk_clist_set_row_height, GtkCList_val, Int_val, Unit)
-ML_5 (gtk_clist_moveto, GtkCList_val, Int_val, Int_val,
-      Double_val, Double_val, Unit)
-ML_2 (gtk_clist_row_is_visible, GtkCList_val, Int_val, Val_visibility)
-ML_3 (gtk_clist_get_cell_type, GtkCList_val, Int_val, Int_val, Val_cell_type)
-ML_4 (gtk_clist_set_text, GtkCList_val, Int_val, Int_val, Optstring_val, Unit)
-value ml_gtk_clist_get_text (value clist, value row, value column)
-{
-    char *text;
-    if (!gtk_clist_get_text (GtkCList_val(clist), Int_val(row),
-                            Int_val(column), &text))
-       invalid_argument ("Gtk.Clist.get_text");
-    return Val_optstring(text);
-}
-ML_5 (gtk_clist_set_pixmap, GtkCList_val, Int_val, Int_val, GdkPixmap_val,
-      GdkBitmap_val, Unit)
-value ml_gtk_clist_get_pixmap (value clist, value row, value column)
-{
-    CAMLparam0 ();
-    GdkPixmap *pixmap;
-    GdkBitmap *bitmap;
-    CAMLlocal2 (vpixmap,vbitmap);
-    value ret;
-
-    if (!gtk_clist_get_pixmap (GtkCList_val(clist), Int_val(row),
-                              Int_val(column), &pixmap, &bitmap))
-       invalid_argument ("Gtk.Clist.get_pixmap");
-    vpixmap = Val_option (pixmap, Val_GdkPixmap);
-    vbitmap = Val_option (bitmap, Val_GdkBitmap);
-
-    ret = alloc_small (2,0);
-    Field(ret,0) = vpixmap;
-    Field(ret,1) = vbitmap;
-    CAMLreturn(ret);
-}
-ML_7 (gtk_clist_set_pixtext, GtkCList_val, Int_val, Int_val, String_val,
-      (guint8)Long_val, GdkPixmap_val, GdkBitmap_val, Unit)
-ML_bc7 (ml_gtk_clist_set_pixtext)
-ML_3 (gtk_clist_set_foreground, GtkCList_val, Int_val, GdkColor_val, Unit)
-ML_3 (gtk_clist_set_background, GtkCList_val, Int_val, GdkColor_val, Unit)
-ML_3 (gtk_clist_get_cell_style, GtkCList_val, Int_val, Int_val, Val_GtkStyle)
-ML_4 (gtk_clist_set_cell_style, GtkCList_val, Int_val, Int_val, GtkStyle_val,
-      Unit)
-ML_2 (gtk_clist_get_row_style, GtkCList_val, Int_val, Val_GtkStyle)
-ML_3 (gtk_clist_set_row_style, GtkCList_val, Int_val, GtkStyle_val, Unit)
-ML_3 (gtk_clist_set_selectable, GtkCList_val, Int_val, Bool_val, Unit)
-ML_2 (gtk_clist_get_selectable, GtkCList_val, Int_val, Val_bool)
-ML_5 (gtk_clist_set_shift, GtkCList_val, Int_val, Int_val, Int_val, Int_val,
-      Unit)
-/* ML_2 (gtk_clist_append, GtkCList_val, (char **), Val_int) */
-ML_3 (gtk_clist_insert, GtkCList_val, Int_val, (char **), Val_int)
-ML_2 (gtk_clist_remove, GtkCList_val, Int_val, Unit)
-value ml_gtk_clist_set_row_data (value w, value row, value data)
-{
-     value *data_p = ml_gtk_root_new (data);
-     gtk_clist_set_row_data_full (GtkCList_val(w), Int_val(row),
-                                 data_p, ml_gtk_root_destroy);
-     return Val_unit;
-}
-ML_2 (gtk_clist_get_row_data, GtkCList_val, Int_val, *(value*)Check_null)
-ML_3 (gtk_clist_select_row, GtkCList_val, Int_val, Int_val, Unit)
-ML_3 (gtk_clist_unselect_row, GtkCList_val, Int_val, Int_val, Unit)
-ML_1 (gtk_clist_clear, GtkCList_val, Unit)
-value ml_gtk_clist_get_selection_info (value clist, value x, value y)
-{
-    int row, column;
-    value ret;
-    if (!gtk_clist_get_selection_info (GtkCList_val(clist), Int_val(x),
-                            Int_val(y), &row, &column))
-       invalid_argument ("Gtk.Clist.get_selection_info");
-    ret = alloc_small (2,0);
-    Field(ret,0) = row;
-    Field(ret,1) = column;
-    return ret;
-}
-ML_1 (gtk_clist_select_all, GtkCList_val, Unit)
-ML_1 (gtk_clist_unselect_all, GtkCList_val, Unit)
-ML_3 (gtk_clist_swap_rows, GtkCList_val, Int_val, Int_val, Unit)
-ML_3 (gtk_clist_row_move, GtkCList_val, Int_val, Int_val, Unit)
-ML_2 (gtk_clist_set_sort_column, GtkCList_val, Int_val, Unit)
-ML_2 (gtk_clist_set_sort_type, GtkCList_val, Sort_type_val, Unit)
-ML_1 (gtk_clist_sort, GtkCList_val, Unit)
-ML_2 (gtk_clist_set_auto_sort, GtkCList_val, Bool_val, Unit)
-
-/* gtkctree.h */
-#define GtkCTree_val(val) check_cast(GTK_CTREE,val)
-/* Beware: this definition axpects arg1 to be a GtkCTree */
-/*
-#define GtkCTreeNode_val(val) \
-     (gtk_ctree_find(GtkCTree_val(arg1),NULL,(GtkCTreeNode*)(val-1)) \
-     ? (GtkCTreeNode*)(val-1) : (ml_raise_gtk ("Bad GtkCTreeNode"), NULL))
-#define Val_GtkCTreeNode Val_addr
-ML_2 (gtk_ctree_new, Int_val, Int_val, Val_GtkWidget_sink)
-ML_3 (gtk_ctree_new_with_titles, Int_val, Int_val, (char **),
-      Val_GtkWidget_sink)
-ML_11 (gtk_ctree_insert_node, GtkCTree_val, GtkCTreeNode_val,
-       GtkCTreeNode_val, (char**), Int_val, GdkPixmap_val, GdkBitmap_val,
-       GdkPixmap_val, GdkBitmap_val, Bool_val, Bool_val,
-       Val_GtkCTreeNode)
-ML_2 (gtk_ctree_remove_node, GtkCTree_val, GtkCTreeNode_val, Unit)
-ML_2 (gtk_ctree_is_viewable, GtkCTree_val, GtkCTreeNode_val, Val_bool)
-*/
-
-/* gtkfixed.h */
-
-#define GtkFixed_val(val) check_cast(GTK_FIXED,val)
-ML_0 (gtk_fixed_new, Val_GtkWidget_sink)
-ML_4 (gtk_fixed_put, GtkFixed_val, GtkWidget_val, (gint16)Long_val, (gint16)Long_val, Unit)
-ML_4 (gtk_fixed_move, GtkFixed_val, GtkWidget_val, (gint16)Long_val, (gint16)Long_val, Unit)
-
-/* gtklayout.h */
-
-#define GtkLayout_val(val) check_cast(GTK_LAYOUT,val)
-ML_2 (gtk_layout_new, GtkAdjustment_val, GtkAdjustment_val, Val_GtkWidget_sink)
-ML_4 (gtk_layout_put, GtkLayout_val, GtkWidget_val, Int_val, Int_val, Unit)
-ML_4 (gtk_layout_move, GtkLayout_val, GtkWidget_val, Int_val, Int_val, Unit)
-ML_3 (gtk_layout_set_size, GtkLayout_val, Int_val, Int_val, Unit)
-ML_1 (gtk_layout_get_hadjustment, GtkLayout_val, Val_GtkAny)
-ML_1 (gtk_layout_get_vadjustment, GtkLayout_val, Val_GtkAny)
-ML_2 (gtk_layout_set_hadjustment, GtkLayout_val, GtkAdjustment_val, Unit)
-ML_2 (gtk_layout_set_vadjustment, GtkLayout_val, GtkAdjustment_val, Unit)
-ML_1 (gtk_layout_freeze, GtkLayout_val, Unit)
-ML_1 (gtk_layout_thaw, GtkLayout_val, Unit)
-Make_Extractor (gtk_layout_get, GtkLayout_val, width, Val_int)
-Make_Extractor (gtk_layout_get, GtkLayout_val, height, Val_int)
-
-/* gtkmenushell.h */
-
-#define GtkMenuShell_val(val) check_cast(GTK_MENU_SHELL,val)
-ML_2 (gtk_menu_shell_append, GtkMenuShell_val, GtkWidget_val, Unit)
-ML_2 (gtk_menu_shell_prepend, GtkMenuShell_val, GtkWidget_val, Unit)
-ML_3 (gtk_menu_shell_insert, GtkMenuShell_val, GtkWidget_val, Int_val, Unit)
-ML_1 (gtk_menu_shell_deactivate, GtkMenuShell_val, Unit)
-
-/* gtkmenu.h */
-
-#define GtkMenu_val(val) check_cast(GTK_MENU,val)
-ML_0 (gtk_menu_new, Val_GtkWidget_sink)
-ML_5 (gtk_menu_popup, GtkMenu_val, GtkWidget_val, GtkWidget_val,
-      Insert(NULL) Insert(NULL) Int_val, Int_val, Unit)
-ML_1 (gtk_menu_popdown, GtkMenu_val, Unit)
-ML_1 (gtk_menu_get_active, GtkMenu_val, Val_GtkWidget)
-ML_2 (gtk_menu_set_active, GtkMenu_val, Int_val, Unit)
-ML_2 (gtk_menu_set_accel_group, GtkMenu_val, GtkAccelGroup_val, Unit)
-ML_1 (gtk_menu_get_accel_group, GtkMenu_val, Val_GtkAccelGroup)
-ML_1 (gtk_menu_ensure_uline_accel_group, GtkMenu_val, Val_GtkAccelGroup)
-value ml_gtk_menu_attach_to_widget (value menu, value widget)
-{
-    gtk_menu_attach_to_widget (GtkMenu_val(menu), GtkWidget_val(widget), NULL);
-    return Val_unit;
-}
-ML_1 (gtk_menu_get_attach_widget, GtkMenu_val, Val_GtkWidget)
-ML_1 (gtk_menu_detach, GtkMenu_val, Unit)
-
-/* gtkmenubar.h */
-
-#define GtkMenuBar_val(val) check_cast(GTK_MENU_BAR,val)
-ML_0 (gtk_menu_bar_new, Val_GtkWidget_sink)
-
-/* gtknotebook.h */
-
-#define GtkNotebook_val(val) check_cast(GTK_NOTEBOOK,val)
-ML_0 (gtk_notebook_new, Val_GtkWidget_sink)
-
-ML_5 (gtk_notebook_insert_page_menu, GtkNotebook_val, GtkWidget_val,
-      GtkWidget_val, GtkWidget_val, Int_val, Unit)
-ML_2 (gtk_notebook_remove_page, GtkNotebook_val, Int_val, Unit)
-
-ML_2 (gtk_notebook_set_tab_pos, GtkNotebook_val, Position_val, Unit)
-ML_2 (gtk_notebook_set_homogeneous_tabs, GtkNotebook_val, Bool_val, Unit)
-ML_2 (gtk_notebook_set_show_tabs, GtkNotebook_val, Bool_val, Unit)
-ML_2 (gtk_notebook_set_show_border, GtkNotebook_val, Bool_val, Unit)
-ML_2 (gtk_notebook_set_scrollable, GtkNotebook_val, Bool_val, Unit)
-ML_2 (gtk_notebook_set_tab_border, GtkNotebook_val, Int_val, Unit)
-ML_1 (gtk_notebook_popup_enable, GtkNotebook_val, Unit)
-ML_1 (gtk_notebook_popup_disable, GtkNotebook_val, Unit)
-
-ML_1 (gtk_notebook_get_current_page, GtkNotebook_val, Val_int)
-ML_2 (gtk_notebook_set_page, GtkNotebook_val, Int_val, Unit)
-ML_2 (gtk_notebook_get_nth_page, GtkNotebook_val, Int_val, Val_GtkWidget)
-ML_2 (gtk_notebook_page_num, GtkNotebook_val, GtkWidget_val, Val_int)
-ML_1 (gtk_notebook_next_page, GtkNotebook_val, Unit)
-ML_1 (gtk_notebook_prev_page, GtkNotebook_val, Unit)
-
-ML_2 (gtk_notebook_get_tab_label, GtkNotebook_val, GtkWidget_val,
-      Val_GtkWidget)
-ML_3 (gtk_notebook_set_tab_label, GtkNotebook_val, GtkWidget_val,
-      GtkWidget_val, Unit)
-ML_2 (gtk_notebook_get_menu_label, GtkNotebook_val, GtkWidget_val,
-      Val_GtkWidget)
-ML_3 (gtk_notebook_set_menu_label, GtkNotebook_val, GtkWidget_val,
-      GtkWidget_val, Unit)
-ML_3 (gtk_notebook_reorder_child, GtkNotebook_val, GtkWidget_val,
-      Int_val, Unit)
-
-
-/* gtkpacker.h */
-
-Make_OptFlags_val(Packer_options_val)
-
-#define GtkPacker_val(val) check_cast(GTK_PACKER,val)
-ML_0 (gtk_packer_new, Val_GtkWidget_sink)
-ML_10 (gtk_packer_add, GtkPacker_val, GtkWidget_val,
-       Option_val(arg3,Side_type_val,GTK_SIDE_TOP) Ignore,
-       Option_val(arg4,Anchor_type_val,GTK_ANCHOR_CENTER) Ignore,
-       OptFlags_Packer_options_val,
-       Option_val(arg6,Int_val,GtkPacker_val(arg1)->default_border_width) Ignore,
-       Option_val(arg7,Int_val,GtkPacker_val(arg1)->default_pad_x) Ignore,
-       Option_val(arg8,Int_val,GtkPacker_val(arg1)->default_pad_y) Ignore,
-       Option_val(arg9,Int_val,GtkPacker_val(arg1)->default_i_pad_x) Ignore,
-       Option_val(arg10,Int_val,GtkPacker_val(arg1)->default_i_pad_y) Ignore,
-       Unit)
-ML_bc10 (ml_gtk_packer_add)
-ML_5 (gtk_packer_add_defaults, GtkPacker_val, GtkWidget_val,
-       Option_val(arg3,Side_type_val,GTK_SIDE_TOP) Ignore,
-       Option_val(arg4,Anchor_type_val,GTK_ANCHOR_CENTER) Ignore,
-       OptFlags_Packer_options_val, Unit)
-ML_10 (gtk_packer_set_child_packing, GtkPacker_val, GtkWidget_val,
-       Option_val(arg3,Side_type_val,GTK_SIDE_TOP) Ignore,
-       Option_val(arg4,Anchor_type_val,GTK_ANCHOR_CENTER) Ignore,
-       OptFlags_Packer_options_val,
-       Option_val(arg6,Int_val,GtkPacker_val(arg1)->default_border_width) Ignore,
-       Option_val(arg7,Int_val,GtkPacker_val(arg1)->default_pad_x) Ignore,
-       Option_val(arg8,Int_val,GtkPacker_val(arg1)->default_pad_y) Ignore,
-       Option_val(arg9,Int_val,GtkPacker_val(arg1)->default_i_pad_x) Ignore,
-       Option_val(arg10,Int_val,GtkPacker_val(arg1)->default_i_pad_y) Ignore,
-       Unit)
-ML_bc10 (ml_gtk_packer_set_child_packing)
-ML_3 (gtk_packer_reorder_child, GtkPacker_val, GtkWidget_val,
-      Int_val, Unit)
-ML_2 (gtk_packer_set_spacing, GtkPacker_val, Int_val, Unit)
-value ml_gtk_packer_set_defaults (value w, value border_width,
-                                 value pad_x, value pad_y,
-                                 value i_pad_x, value i_pad_y)
-{
-    GtkPacker *p = GtkPacker_val(w);
-    if (Is_block(border_width))
-       gtk_packer_set_default_border_width (p,Int_val(Field(border_width,0)));
-    if (Is_block(pad_x) || Is_block(pad_y))
-       gtk_packer_set_default_pad
-           (p, Option_val(pad_x,Int_val,p->default_pad_x),
-               Option_val(pad_y,Int_val,p->default_pad_y));
-    if (Is_block(i_pad_x) || Is_block(i_pad_y))
-       gtk_packer_set_default_ipad
-           (p, Option_val(pad_x,Int_val,p->default_i_pad_x),
-               Option_val(pad_y,Int_val,p->default_i_pad_y));
-    return Val_unit;
-}
-ML_bc6 (ml_gtk_packer_set_defaults)
-
-/* gtkpaned.h */
-
-#define GtkPaned_val(val) check_cast(GTK_PANED,val)
-ML_0 (gtk_hpaned_new, Val_GtkWidget_sink)
-ML_0 (gtk_vpaned_new, Val_GtkWidget_sink)
-ML_2 (gtk_paned_add1, GtkPaned_val, GtkWidget_val, Unit)
-ML_2 (gtk_paned_add2, GtkPaned_val, GtkWidget_val, Unit)
-ML_2 (gtk_paned_set_handle_size, GtkPaned_val, (gint16)Int_val, Unit)
-ML_2 (gtk_paned_set_gutter_size, GtkPaned_val, (gint16)Int_val, Unit)
-Make_Extractor (gtk_paned, GtkPaned_val, child1, Val_GtkWidget)
-Make_Extractor (gtk_paned, GtkPaned_val, child2, Val_GtkWidget)
-Make_Extractor (gtk_paned, GtkPaned_val, handle_size, Val_int)
-Make_Extractor (gtk_paned, GtkPaned_val, gutter_size, Val_int)
-
-/* gtkscrolledwindow.h */
-
-#define GtkScrolledWindow_val(val) check_cast(GTK_SCROLLED_WINDOW,val)
-ML_2 (gtk_scrolled_window_new, GtkAdjustment_val ,GtkAdjustment_val,
-      Val_GtkWidget_sink)
-ML_2 (gtk_scrolled_window_set_hadjustment, GtkScrolledWindow_val ,
-      GtkAdjustment_val, Unit)
-ML_2 (gtk_scrolled_window_set_vadjustment, GtkScrolledWindow_val ,
-      GtkAdjustment_val, Unit)
-ML_1 (gtk_scrolled_window_get_hadjustment, GtkScrolledWindow_val,
-      Val_GtkWidget)
-ML_1 (gtk_scrolled_window_get_vadjustment, GtkScrolledWindow_val,
-      Val_GtkWidget)
-ML_3 (gtk_scrolled_window_set_policy, GtkScrolledWindow_val,
-      Policy_type_val, Policy_type_val, Unit)
-Make_Extractor (gtk_scrolled_window_get, GtkScrolledWindow_val,
-               hscrollbar_policy, Val_policy_type)
-Make_Extractor (gtk_scrolled_window_get, GtkScrolledWindow_val,
-               vscrollbar_policy, Val_policy_type)
-ML_2 (gtk_scrolled_window_set_placement, GtkScrolledWindow_val,
-      Corner_type_val, Unit)
-ML_2 (gtk_scrolled_window_add_with_viewport, GtkScrolledWindow_val,
-      GtkWidget_val, Unit)
-
-/* gtksocket.h */
-
-#define GtkSocket_val(val) check_cast(GTK_SOCKET,val)
-ML_0 (gtk_socket_new, Val_GtkWidget_sink)
-ML_2 (gtk_socket_steal, GtkSocket_val, XID_val, Unit)
-
-/* gtktable.h */
-
-#define GtkTable_val(val) check_cast(GTK_TABLE,val)
-ML_3 (gtk_table_new, Int_val, Int_val, Int_val, Val_GtkWidget_sink)
-ML_10 (gtk_table_attach, GtkTable_val, GtkWidget_val,
-       Int_val, Int_val, Int_val, Int_val,
-       Flags_Attach_options_val, Flags_Attach_options_val,
-       Int_val, Int_val, Unit)
-ML_bc10 (ml_gtk_table_attach)
-ML_3 (gtk_table_set_row_spacing, GtkTable_val, Int_val, Int_val, Unit)
-ML_3 (gtk_table_set_col_spacing, GtkTable_val, Int_val, Int_val, Unit)
-ML_2 (gtk_table_set_row_spacings, GtkTable_val, Int_val, Unit)
-ML_2 (gtk_table_set_col_spacings, GtkTable_val, Int_val, Unit)
-ML_2 (gtk_table_set_homogeneous, GtkTable_val, Bool_val, Unit)
-
-/* gtktoolbar.h */
-
-#define GtkToolbar_val(val) check_cast(GTK_TOOLBAR,val)
-ML_2 (gtk_toolbar_new, Orientation_val, Toolbar_style_val, Val_GtkWidget_sink)
-ML_2 (gtk_toolbar_insert_space, GtkToolbar_val, Int_val, Unit)
-ML_7 (gtk_toolbar_insert_element, GtkToolbar_val, Toolbar_child_val,
-      Insert(NULL) Optstring_val, Optstring_val, Optstring_val, GtkWidget_val,
-      Insert(NULL) Insert(NULL) Int_val, Val_GtkWidget)
-ML_bc7 (ml_gtk_toolbar_insert_element)
-ML_5 (gtk_toolbar_insert_widget, GtkToolbar_val, GtkWidget_val,
-      Optstring_val, Optstring_val, Int_val, Unit)
-ML_2 (gtk_toolbar_set_orientation, GtkToolbar_val, Orientation_val, Unit)
-ML_2 (gtk_toolbar_set_style, GtkToolbar_val, Toolbar_style_val, Unit)
-ML_2 (gtk_toolbar_set_space_size, GtkToolbar_val, Int_val, Unit)
-ML_2 (gtk_toolbar_set_space_style, GtkToolbar_val, Toolbar_space_style_val, Unit)
-ML_2 (gtk_toolbar_set_tooltips, GtkToolbar_val, Bool_val, Unit)
-ML_2 (gtk_toolbar_set_button_relief, GtkToolbar_val, Relief_style_val, Unit)
-ML_1 (gtk_toolbar_get_button_relief, GtkToolbar_val, Val_relief_style)
-
-/* gtktree.h */
-
-#define GtkTree_val(val) check_cast(GTK_TREE,val)
-ML_0 (gtk_tree_new, Val_GtkWidget_sink)
-ML_3 (gtk_tree_insert, GtkTree_val, GtkWidget_val, Int_val, Unit)
-ML_3 (gtk_tree_clear_items, GtkTree_val, Int_val, Int_val, Unit)
-ML_2 (gtk_tree_select_item, GtkTree_val, Int_val, Unit)
-ML_2 (gtk_tree_unselect_item, GtkTree_val, Int_val, Unit)
-ML_2 (gtk_tree_child_position, GtkTree_val, GtkWidget_val, Val_int)
-ML_2 (gtk_tree_set_selection_mode, GtkTree_val, Selection_mode_val, Unit)
-ML_2 (gtk_tree_set_view_mode, GtkTree_val, Tree_view_mode_val, Unit)
-ML_2 (gtk_tree_set_view_lines, GtkTree_val, Bool_val, Unit)
-
-static value val_gtkany (gpointer p) { return Val_GtkAny(p); }
-value ml_gtk_tree_selection (value tree)
-{
-  GList *selection = GTK_TREE_SELECTION(GtkTree_val(tree));
-  return Val_GList(selection, val_gtkany);
-}
-static gpointer gtkobject_val (value val) { return GtkObject_val(val); }
-value ml_gtk_tree_remove_items (value tree, value items)
-{
-  GList *items_list = GList_val (items, gtkobject_val);
-  gtk_tree_remove_items (GtkTree_val(tree), items_list);
-  return Val_unit;
-}
-
-/* gtkcalendar.h */
-
-#define GtkCalendar_val(val) check_cast(GTK_CALENDAR,val)
-ML_0 (gtk_calendar_new, Val_GtkWidget_sink)
-ML_3 (gtk_calendar_select_month, GtkCalendar_val, Int_val, Int_val, Unit)
-ML_2 (gtk_calendar_select_day, GtkCalendar_val, Int_val, Unit)
-ML_2 (gtk_calendar_mark_day, GtkCalendar_val, Int_val, Unit)
-ML_2 (gtk_calendar_unmark_day, GtkCalendar_val, Int_val, Unit)
-ML_1 (gtk_calendar_clear_marks, GtkCalendar_val, Unit)
-Make_Flags_val (Calendar_display_options_val)
-ML_2 (gtk_calendar_display_options, GtkCalendar_val,
-      Flags_Calendar_display_options_val, Unit)
-value ml_gtk_calendar_get_date (value w)
-{
-    guint year, month, day;
-    value ret;
-
-    gtk_calendar_get_date (GtkCalendar_val(w), &year, &month, &day);
-    ret = alloc_small (3, 0);
-    Field(ret,0) = Val_int(year);
-    Field(ret,1) = Val_int(month);
-    Field(ret,2) = Val_int(day);
-    return ret;
-}
-ML_1 (gtk_calendar_freeze, GtkCalendar_val, Unit)
-ML_1 (gtk_calendar_thaw, GtkCalendar_val, Unit)
-
-/* gtkdrawingarea.h */
-
-#define GtkDrawingArea_val(val) check_cast(GTK_DRAWING_AREA,val)
-ML_0 (gtk_drawing_area_new, Val_GtkWidget_sink)
-ML_3 (gtk_drawing_area_size, GtkDrawingArea_val, Int_val, Int_val, Unit)
-
-/* gtkeditable.h */
-
-#define GtkEditable_val(val) check_cast(GTK_EDITABLE,val)
-ML_3 (gtk_editable_select_region, GtkEditable_val, Int_val, Int_val, Unit)
-value ml_gtk_editable_insert_text (value w, value s, value pos)
-{
-    int position = Int_val(pos);
-    gtk_editable_insert_text (GtkEditable_val(w), String_val(s),
-                             string_length(s), &position);
-    return Val_int(position);
-}
-ML_3 (gtk_editable_delete_text, GtkEditable_val, Int_val, Int_val, Unit)
-ML_3 (gtk_editable_get_chars, GtkEditable_val, Int_val, Int_val,
-      copy_string_and_free)
-ML_1 (gtk_editable_cut_clipboard, GtkEditable_val, Unit)
-ML_1 (gtk_editable_copy_clipboard, GtkEditable_val, Unit)
-ML_1 (gtk_editable_paste_clipboard, GtkEditable_val, Unit)
-ML_3 (gtk_editable_claim_selection, GtkEditable_val, Bool_val, Int_val, Unit)
-ML_1 (gtk_editable_delete_selection, GtkEditable_val, Unit)
-ML_1 (gtk_editable_changed, GtkEditable_val, Unit)
-ML_2 (gtk_editable_set_position, GtkEditable_val, Int_val, Unit)
-ML_1 (gtk_editable_get_position, GtkEditable_val, Val_int)
-ML_2 (gtk_editable_set_editable, GtkEditable_val, Bool_val, Unit)
-Make_Extractor (gtk_editable, GtkEditable_val, selection_start_pos, Val_int)
-Make_Extractor (gtk_editable, GtkEditable_val, selection_end_pos, Val_int)
-Make_Extractor (gtk_editable, GtkEditable_val, has_selection, Val_bool)
-
-/* gtkentry.h */
-
-#define GtkEntry_val(val) check_cast(GTK_ENTRY,val)
-ML_0 (gtk_entry_new, Val_GtkWidget_sink)
-ML_1 (gtk_entry_new_with_max_length, (gint16)Long_val, Val_GtkWidget_sink)
-ML_2 (gtk_entry_set_text, GtkEntry_val, String_val, Unit)
-ML_2 (gtk_entry_append_text, GtkEntry_val, String_val, Unit)
-ML_2 (gtk_entry_prepend_text, GtkEntry_val, String_val, Unit)
-ML_1 (gtk_entry_get_text, GtkEntry_val, Val_string)
-ML_3 (gtk_entry_select_region, GtkEntry_val, Int_val, Int_val, Unit)
-ML_2 (gtk_entry_set_visibility, GtkEntry_val, Bool_val, Unit)
-ML_2 (gtk_entry_set_max_length, GtkEntry_val, (gint16)Long_val, Unit)
-Make_Extractor (GtkEntry, GtkEntry_val, text_length, Val_int)
-
-/* gtkspinbutton.h */
-
-#define GtkSpinButton_val(val) check_cast(GTK_SPIN_BUTTON,val)
-ML_3 (gtk_spin_button_new, GtkAdjustment_val,
-      Float_val, Int_val, Val_GtkWidget_sink)
-ML_2 (gtk_spin_button_set_adjustment, GtkSpinButton_val, GtkAdjustment_val,
-      Unit)
-ML_1 (gtk_spin_button_get_adjustment, GtkSpinButton_val, Val_GtkAny)
-ML_2 (gtk_spin_button_set_digits, GtkSpinButton_val, Int_val, Unit)
-ML_1 (gtk_spin_button_get_value_as_float, GtkSpinButton_val, copy_double)
-ML_2 (gtk_spin_button_set_value, GtkSpinButton_val, Float_val, Unit)
-ML_2 (gtk_spin_button_set_update_policy, GtkSpinButton_val,
-      Update_type_val, Unit)
-ML_2 (gtk_spin_button_set_numeric, GtkSpinButton_val, Bool_val, Unit)
-ML_2 (gtk_spin_button_spin, GtkSpinButton_val,
-      Insert (Is_long(arg2) ? Spin_type_val(arg2) : GTK_SPIN_USER_DEFINED)
-      (Is_long(arg2) ? 0.0 : Float_val(Field(arg2,1))) Ignore, Unit)
-ML_2 (gtk_spin_button_set_wrap, GtkSpinButton_val, Bool_val, Unit)
-ML_2 (gtk_spin_button_set_shadow_type, GtkSpinButton_val, Shadow_type_val, Unit)
-ML_2 (gtk_spin_button_set_snap_to_ticks, GtkSpinButton_val, Bool_val, Unit)
-ML_4 (gtk_spin_button_configure, GtkSpinButton_val, GtkAdjustment_val,
-      Float_val, Int_val, Unit)
-ML_1 (gtk_spin_button_update, GtkSpinButton_val, Unit)
-
-/* gtktext.h */
-
-#define GtkText_val(val) check_cast(GTK_TEXT,val)
-ML_2 (gtk_text_new, GtkAdjustment_val, GtkAdjustment_val, Val_GtkWidget_sink)
-ML_2 (gtk_text_set_word_wrap, GtkText_val, Bool_val, Unit)
-ML_2 (gtk_text_set_line_wrap, GtkText_val, Bool_val, Unit)
-ML_3 (gtk_text_set_adjustments, GtkText_val,
-      Option_val(arg2,GtkAdjustment_val,GtkText_val(arg1)->hadj) Ignore,
-      Option_val(arg3,GtkAdjustment_val,GtkText_val(arg1)->vadj) Ignore,
-      Unit)
-Make_Extractor (gtk_text_get, GtkText_val, hadj, Val_GtkWidget)
-Make_Extractor (gtk_text_get, GtkText_val, vadj, Val_GtkWidget)
-ML_2 (gtk_text_set_point, GtkText_val, Int_val, Unit)
-ML_1 (gtk_text_get_point, GtkText_val, Val_int)
-ML_1 (gtk_text_get_length, GtkText_val, Val_int)
-ML_1 (gtk_text_freeze, GtkText_val, Unit)
-ML_1 (gtk_text_thaw, GtkText_val, Unit)
-value ml_gtk_text_insert (value text, value font, value fore, value back,
-                         value str)
-{
-    gtk_text_insert (GtkText_val(text),
-                    Option_val(font,GdkFont_val,NULL),
-                    Option_val(fore,GdkColor_val,NULL),
-                    Option_val(back,GdkColor_val,NULL),
-                    String_val(str), string_length(str));
-    return Val_unit;
-}
-ML_2 (gtk_text_forward_delete, GtkText_val, Int_val, Val_int)
-ML_2 (gtk_text_backward_delete, GtkText_val, Int_val, Val_int)
-
-/* gtkmisc.h */
-
-#define GtkMisc_val(val) check_cast(GTK_MISC,val)
-ML_3 (gtk_misc_set_alignment, GtkMisc_val, Double_val, Double_val, Unit)
-ML_3 (gtk_misc_set_padding, GtkMisc_val, Int_val, Int_val, Unit)
-Make_Extractor (gtk_misc_get, GtkMisc_val, xalign, copy_double)
-Make_Extractor (gtk_misc_get, GtkMisc_val, yalign, copy_double)
-Make_Extractor (gtk_misc_get, GtkMisc_val, xpad, Val_int)
-Make_Extractor (gtk_misc_get, GtkMisc_val, ypad, Val_int)
-
-/* gtkarrow.h */
-
-#define GtkArrow_val(val) check_cast(GTK_ARROW,val)
-ML_2 (gtk_arrow_new, Arrow_type_val, Shadow_type_val, Val_GtkWidget_sink)
-ML_3 (gtk_arrow_set, GtkArrow_val, Arrow_type_val, Shadow_type_val, Unit)
-
-/* gtkimage.h */
-
-#define GtkImage_val(val) check_cast(GTK_IMAGE,val)
-ML_2 (gtk_image_new, GdkImage_val,
-      Option_val (arg2, GdkBitmap_val, NULL) Ignore, Val_GtkWidget_sink)
-ML_3 (gtk_image_set, GtkImage_val, GdkImage_val,
-      Option_val (arg2, GdkBitmap_val, NULL) Ignore, Unit)
-
-/* gtklabel.h */
-
-#define GtkLabel_val(val) check_cast(GTK_LABEL,val)
-ML_1 (gtk_label_new, String_val, Val_GtkWidget_sink)
-ML_2 (gtk_label_set_text, GtkLabel_val, String_val, Unit)
-ML_2 (gtk_label_set_pattern, GtkLabel_val, String_val, Unit)
-ML_2 (gtk_label_set_justify, GtkLabel_val, Justification_val, Unit)
-ML_2 (gtk_label_set_line_wrap, GtkLabel_val, Bool_val, Unit)
-Make_Extractor (gtk_label_get, GtkLabel_val, label, Val_string)
-
-/* gtktipsquery.h */
-
-#define GtkTipsQuery_val(val) check_cast(GTK_TIPS_QUERY,val)
-ML_0 (gtk_tips_query_new, Val_GtkWidget_sink)
-ML_1 (gtk_tips_query_start_query, GtkTipsQuery_val, Unit)
-ML_1 (gtk_tips_query_stop_query, GtkTipsQuery_val, Unit)
-ML_2 (gtk_tips_query_set_caller, GtkTipsQuery_val, GtkWidget_val, Unit)
-ML_3 (gtk_tips_query_set_labels, GtkTipsQuery_val,
-      String_val, String_val, Unit)
-value ml_gtk_tips_query_set_emit_always (value w, value arg)
-{
-    GtkTipsQuery_val(w)->emit_always = Bool_val(arg);
-    return Val_unit;
-}
-Make_Extractor (gtk_tips_query_get, GtkTipsQuery_val, emit_always, Val_bool)
-Make_Extractor (gtk_tips_query_get, GtkTipsQuery_val, caller, Val_GtkWidget)
-Make_Extractor (gtk_tips_query_get, GtkTipsQuery_val, label_inactive,
-               Val_string)
-Make_Extractor (gtk_tips_query_get, GtkTipsQuery_val, label_no_tip,
-               Val_string)
-
-/* gtkpixmap.h */
-
-#define GtkPixmap_val(val) check_cast(GTK_PIXMAP,val)
-ML_2 (gtk_pixmap_new, GdkPixmap_val,
-      Option_val (arg2, GdkBitmap_val, NULL) Ignore,
-      Val_GtkWidget_sink)
-value ml_gtk_pixmap_set (value val, value pixmap, value mask)
-{
-    GtkPixmap *w = GtkPixmap_val(val);
-    gtk_pixmap_set (w, Option_val(pixmap,GdkPixmap_val,w->pixmap),
-                   Option_val(mask,GdkBitmap_val,w->mask));
-    return Val_unit;
-}
-Make_Extractor (GtkPixmap, GtkPixmap_val, pixmap, Val_GdkPixmap)
-Make_Extractor (GtkPixmap, GtkPixmap_val, mask, Val_GdkBitmap)
-
-/* gtkpreview.h */
-/*
-#define GtkPreview_val(val) GTK_PREVIEW(Pointer_val(val))
-ML_1 (gtk_preview_new, Preview_val, Val_GtkWidget_sink)
-ML_3 (gtk_preview_size, GtkPreview_val, Int_val, Int_val, Unit)
-ML_9 (gtk_preview_put, GtkPreview_val, GdkWindow_val, GdkGC_val,
-      Int_val, Int_val, Int_val, Int_val, Int_val, Int_val, Unit)
-ML_bc9 (ml_gtk_preview_put)
-*/
-
-/* gtkprogress.h */
-
-#define GtkProgress_val(val) check_cast(GTK_PROGRESS,val)
-ML_2 (gtk_progress_set_show_text, GtkProgress_val, Bool_val, Unit)
-ML_3 (gtk_progress_set_text_alignment, GtkProgress_val,
-      Option_val(arg2,Float_val,(GtkProgress_val(arg1))->x_align) Ignore,
-      Option_val(arg3,Float_val,(GtkProgress_val(arg1))->y_align) Ignore, Unit)
-ML_2 (gtk_progress_set_format_string, GtkProgress_val, String_val, Unit)
-ML_2 (gtk_progress_set_adjustment, GtkProgress_val, GtkAdjustment_val, Unit)
-ML_4 (gtk_progress_configure, GtkProgress_val,
-      Float_val, Float_val, Float_val, Unit)
-ML_2 (gtk_progress_set_percentage, GtkProgress_val, Float_val, Unit)
-ML_2 (gtk_progress_set_value, GtkProgress_val, Float_val, Unit)
-ML_1 (gtk_progress_get_value, GtkProgress_val, copy_double)
-ML_1 (gtk_progress_get_current_percentage, GtkProgress_val, copy_double)
-ML_2 (gtk_progress_set_activity_mode, GtkProgress_val, Bool_val, Unit)
-ML_1 (gtk_progress_get_current_text, GtkProgress_val, Val_string)
-Make_Extractor (gtk_progress_get, GtkProgress_val, adjustment,
-               Val_GtkAny)
-
-/* gtkprogressbar.h */
-
-#define GtkProgressBar_val(val) check_cast(GTK_PROGRESS_BAR,val)
-ML_0 (gtk_progress_bar_new, Val_GtkWidget_sink)
-ML_1 (gtk_progress_bar_new_with_adjustment, GtkAdjustment_val,
-      Val_GtkWidget_sink)
-ML_2 (gtk_progress_bar_set_bar_style, GtkProgressBar_val,
-      Progress_bar_style_val, Unit)
-ML_2 (gtk_progress_bar_set_discrete_blocks, GtkProgressBar_val, Int_val, Unit)
-ML_2 (gtk_progress_bar_set_activity_step, GtkProgressBar_val, Int_val, Unit)
-ML_2 (gtk_progress_bar_set_activity_blocks, GtkProgressBar_val, Int_val, Unit)
-ML_2 (gtk_progress_bar_set_orientation, GtkProgressBar_val,
-      Progress_bar_orientation_val, Unit)
-/* ML_2 (gtk_progress_bar_update, GtkProgressBar_val, Float_val, Unit) */
-
-/* gtkrange.h */
-
-#define GtkRange_val(val) check_cast(GTK_RANGE,val)
-ML_1 (gtk_range_get_adjustment, GtkRange_val, Val_GtkAny)
-ML_2 (gtk_range_set_adjustment, GtkRange_val, GtkAdjustment_val, Unit)
-ML_2 (gtk_range_set_update_policy, GtkRange_val, Update_type_val, Unit)
-
-/* gtkscale.h */
-
-#define GtkScale_val(val) check_cast(GTK_SCALE,val)
-ML_2 (gtk_scale_set_digits, GtkScale_val, Int_val, Unit)
-ML_2 (gtk_scale_set_draw_value, GtkScale_val, Bool_val, Unit)
-ML_2 (gtk_scale_set_value_pos, GtkScale_val, Position_val, Unit)
-ML_1 (gtk_scale_get_value_width, GtkScale_val, Val_int)
-ML_1 (gtk_scale_draw_value, GtkScale_val, Unit)
-ML_1 (gtk_hscale_new, GtkAdjustment_val, Val_GtkWidget_sink)
-ML_1 (gtk_vscale_new, GtkAdjustment_val, Val_GtkWidget_sink)
-
-/* gtkscrollbar.h */
-
-ML_1 (gtk_hscrollbar_new, GtkAdjustment_val, Val_GtkWidget_sink)
-ML_1 (gtk_vscrollbar_new, GtkAdjustment_val, Val_GtkWidget_sink)
-
-/* gtkruler.h */
-
-#define GtkRuler_val(val) check_cast(GTK_RULER,val)
-ML_2 (gtk_ruler_set_metric, GtkRuler_val, Metric_type_val, Unit)
-ML_5 (gtk_ruler_set_range, GtkRuler_val, Float_val,
-      Float_val, Float_val, Float_val, Unit)
-Make_Extractor (gtk_ruler_get, GtkRuler_val, lower, copy_double)
-Make_Extractor (gtk_ruler_get, GtkRuler_val, upper, copy_double)
-Make_Extractor (gtk_ruler_get, GtkRuler_val, position, copy_double)
-Make_Extractor (gtk_ruler_get, GtkRuler_val, max_size, copy_double)
-ML_1 (gtk_ruler_draw_ticks, GtkRuler_val, Unit)
-ML_1 (gtk_ruler_draw_pos, GtkRuler_val, Unit)
-ML_0 (gtk_hruler_new, Val_GtkWidget_sink)
-ML_0 (gtk_vruler_new, Val_GtkWidget_sink)
-
-/* gtk[hv]separator.h */
-
-ML_0 (gtk_hseparator_new, Val_GtkWidget_sink)
-ML_0 (gtk_vseparator_new, Val_GtkWidget_sink)
-
-/* gtkmain.h */
-
-value ml_gtk_init (value argv)
-{
-    CAMLparam1 (argv);
-    int argc = Wosize_val(argv), i;
-    CAMLlocal1 (copy);
-
-    copy = (argc ? alloc (argc, Abstract_tag) : Atom(0));
-    for (i = 0; i < argc; i++) Field(copy,i) = Field(argv,i);
-    gtk_init (&argc, (char ***)&copy);
-
-    argv = (argc ? alloc (argc, 0) : Atom(0));
-    for (i = 0; i < argc; i++) modify(&Field(argv,i), Field(copy,i));
-    CAMLreturn (argv);
-}
-ML_1 (gtk_exit, Int_val, Unit)
-ML_0 (gtk_set_locale, Val_string)
-ML_0 (gtk_main, Unit)
-ML_1 (gtk_main_iteration_do, Bool_val, Val_bool)
-ML_0 (gtk_main_quit, Unit)
-ML_1 (gtk_grab_add, GtkWidget_val, Unit)
-ML_1 (gtk_grab_remove, GtkWidget_val, Unit)
-ML_0 (gtk_grab_get_current, Val_GtkWidget)
-value ml_gtk_get_version (value unit)
-{
-    value ret = alloc_small(3,0);
-    Field(ret,0) = Val_int(gtk_major_version);
-    Field(ret,1) = Val_int(gtk_minor_version);
-    Field(ret,2) = Val_int(gtk_micro_version);
-    return ret;
-}
-
-/* Marshalling */
-
-void ml_gtk_callback_marshal (GtkObject *object, gpointer data,
-                              guint nargs, GtkArg *args)
-{
-    value vargs = alloc_small(3,0);
-
-    CAMLparam1 (vargs);
-    Field(vargs,0) = (value) object;
-    Field(vargs,1) = Val_int(nargs);
-    Field(vargs,2) = (value) args;
-
-    callback (*(value*)data, vargs);
-
-    Field(vargs,0) = Val_int(-1);
-    Field(vargs,1) = Val_int(-1);
-    CAMLreturn0;
-}
-
-value ml_gtk_arg_shift (GtkArg *args, value index)
-{
-    return (value) (&args[Int_val(index)]);
-}
-
-value ml_gtk_arg_get_type (GtkArg *arg)
-{
-    return Val_int (arg->type);
-}
-
-value ml_gtk_arg_get (GtkArg *arg)
-{
-    CAMLparam0();
-    CAMLlocal1(tmp);
-    value ret;
-    GtkFundamentalType type = GTK_FUNDAMENTAL_TYPE(arg->type);
-    int tag;
-
-    switch (type) {
-    case GTK_TYPE_CHAR:
-        tag = 0;
-        tmp = Int_val(GTK_VALUE_CHAR(*arg));
-        break;
-    case GTK_TYPE_BOOL:
-        tag = 1;
-        tmp = Val_bool(GTK_VALUE_BOOL(*arg));
-        break;
-    case GTK_TYPE_INT:
-    case GTK_TYPE_ENUM:
-    case GTK_TYPE_UINT:
-    case GTK_TYPE_FLAGS:
-        tag = 2;
-        tmp = Val_int (GTK_VALUE_INT(*arg)); break;
-    case GTK_TYPE_LONG:
-    case GTK_TYPE_ULONG:
-        tag = 2;
-        tmp = Val_int (GTK_VALUE_LONG(*arg)); break;
-    case GTK_TYPE_FLOAT:
-        tag = 3;
-        tmp = copy_double ((double)GTK_VALUE_FLOAT(*arg)); break;
-    case GTK_TYPE_DOUBLE:
-        tag = 3;
-        tmp = copy_double (GTK_VALUE_DOUBLE(*arg)); break;
-    case GTK_TYPE_STRING:
-        tag = 4;
-        tmp = Val_option (GTK_VALUE_STRING(*arg), copy_string); break;
-    case GTK_TYPE_OBJECT:
-        tag = 5;
-        tmp = Val_option (GTK_VALUE_OBJECT(*arg), Val_GtkObject); break;
-    case GTK_TYPE_BOXED:
-    case GTK_TYPE_POINTER:
-        tag = 6;
-        tmp = Val_option (GTK_VALUE_POINTER(*arg), Val_pointer); break;
-    default:
-        tag = -1; ret = Val_unit;
-    }
-    if (tag != -1) {
-        ret = alloc_small(1,tag);
-        Field(ret,0) = tmp;
-    }
-    CAMLreturn(ret);
-}
-
-value ml_gtk_arg_set_retloc (GtkArg *arg, value val)
-{
-    value type = Fundamental_type_val(Is_block(val) ? Field(val,0) : val);
-    value data = (Is_block(val) ? Field(val,1) : 0);
-    if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_POINTER
-        && GTK_FUNDAMENTAL_TYPE(arg->type) != type)
-       ml_raise_gtk ("GtkArgv.Arg.set : argument type mismatch");
-    switch (type) {
-    case GTK_TYPE_CHAR:   *GTK_RETLOC_CHAR(*arg) = Int_val(data); break;
-    case GTK_TYPE_BOOL:   *GTK_RETLOC_BOOL(*arg) = Int_val(data); break;
-    case GTK_TYPE_INT:
-    case GTK_TYPE_ENUM:   *GTK_RETLOC_INT(*arg) = Int_val(data); break;
-    case GTK_TYPE_UINT:
-    case GTK_TYPE_FLAGS:  *GTK_RETLOC_UINT(*arg) = Int32_val(data); break;
-    case GTK_TYPE_LONG:
-    case GTK_TYPE_ULONG:  *GTK_RETLOC_LONG(*arg) = Nativeint_val(data); break;
-    case GTK_TYPE_FLOAT:  *GTK_RETLOC_FLOAT(*arg) = Float_val(data); break;
-    case GTK_TYPE_DOUBLE: *GTK_RETLOC_DOUBLE(*arg) = Double_val(data); break;
-    case GTK_TYPE_STRING:
-         *GTK_RETLOC_STRING(*arg) = Option_val(data, String_val, NULL);
-         break;
-    case GTK_TYPE_BOXED:
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_OBJECT:
-         *GTK_RETLOC_POINTER(*arg) = Option_val(data, Pointer_val, NULL);
-         break;
-    }
-    return Val_unit;
-}
-
-/*
-value ml_gtk_arg_get_char (GtkArg *arg)
-{
-    if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_CHAR)
-       ml_raise_gtk ("argument type mismatch");
-    return Val_char (GTK_VALUE_CHAR(*arg));
-}
-
-value ml_gtk_arg_get_bool (GtkArg *arg)
-{
-    if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_BOOL)
-       ml_raise_gtk ("argument type mismatch");
-    return Val_bool (GTK_VALUE_BOOL(*arg));
-}
-
-value ml_gtk_arg_get_int (GtkArg *arg)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_INT:
-    case GTK_TYPE_UINT:
-       return Val_int (GTK_VALUE_INT(*arg));
-    case GTK_TYPE_LONG:
-    case GTK_TYPE_ULONG:
-       return Val_long (GTK_VALUE_LONG(*arg));
-    case GTK_TYPE_ENUM:
-       return Val_int (GTK_VALUE_ENUM(*arg));
-    case GTK_TYPE_FLAGS:
-       return Val_int (GTK_VALUE_FLAGS(*arg));
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-*/
-value ml_gtk_arg_get_nativeint(GtkArg *arg) {
-
-     switch(GTK_FUNDAMENTAL_TYPE(arg->type)) {
-     case GTK_TYPE_INT:
-     case GTK_TYPE_UINT:
-          return copy_nativeint (GTK_VALUE_INT(*arg));
-     case GTK_TYPE_LONG:
-     case GTK_TYPE_ULONG:
-          return copy_nativeint (GTK_VALUE_LONG(*arg));
-     case GTK_TYPE_ENUM:
-          return copy_nativeint (GTK_VALUE_ENUM(*arg));
-     case GTK_TYPE_FLAGS:
-          return copy_nativeint (GTK_VALUE_FLAGS(*arg));
-     default:
-          ml_raise_gtk ("argument type mismatch");
-     }
-     return Val_unit;
-}
-/*
-value ml_gtk_arg_get_float (GtkArg *arg)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_FLOAT:
-       return copy_double ((double)GTK_VALUE_FLOAT(*arg));
-    case GTK_TYPE_DOUBLE:
-       return copy_double (GTK_VALUE_DOUBLE(*arg));
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_get_string (GtkArg *arg)
-{
-    char *p;
-    if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_STRING)
-       ml_raise_gtk ("argument type mismatch");
-    p = GTK_VALUE_STRING(*arg);
-    return Val_option (p, copy_string);
-}
-*/
-value ml_gtk_arg_get_pointer (GtkArg *arg)
-{
-    gpointer p = NULL;
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_STRING:
-    case GTK_TYPE_BOXED:
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_OBJECT:
-        p = GTK_VALUE_POINTER(*arg); break;
-    default:
-       ml_raise_gtk ("GtkArgv.get_pointer : argument type mismatch");
-    }
-    return Val_pointer(p);
-}
-/*
-value ml_gtk_arg_get_object (GtkArg *arg)
-{
-    GtkObject *p;
-    if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_OBJECT)
-       ml_raise_gtk ("argument type mismatch");
-    p = GTK_VALUE_OBJECT(*arg);
-    return Val_option (p, Val_GtkObject);
-}
-*/
-
-value ml_string_at_pointer (value ofs, value len, value ptr)
-{
-    char *start = ((char*)Pointer_val(ptr)) + Option_val(ofs, Int_val, 0);
-    int length = Option_val(len, Int_val, strlen(start));
-    value ret = alloc_string(length);
-    memcpy ((char*)ret, start, length);
-    return ret;
-}
-
-value ml_int_at_pointer (value ptr)
-{
-    return Val_int(*(int*)Pointer_val(ptr));
-}
-
-/*
-value ml_gtk_arg_set_char (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_CHAR:
-         *GTK_RETLOC_CHAR(*arg) = Char_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_bool (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_BOOL:
-         *GTK_RETLOC_BOOL(*arg) = Bool_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_int (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_INT:
-    case GTK_TYPE_UINT:
-       *GTK_RETLOC_INT(*arg) = Int_val(val); break;
-    case GTK_TYPE_LONG:
-    case GTK_TYPE_ULONG:
-       *GTK_RETLOC_LONG(*arg) = Long_val(val); break;
-    case GTK_TYPE_ENUM:
-       *GTK_RETLOC_ENUM(*arg) = Int_val(val); break;
-    case GTK_TYPE_FLAGS:
-       *GTK_RETLOC_FLAGS(*arg) = Int_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_nativeint (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_INT:
-    case GTK_TYPE_UINT:
-       *GTK_RETLOC_INT(*arg) = Nativeint_val(val); break;
-    case GTK_TYPE_LONG:
-    case GTK_TYPE_ULONG:
-       *GTK_RETLOC_LONG(*arg) = Nativeint_val(val); break;
-    case GTK_TYPE_ENUM:
-       *GTK_RETLOC_ENUM(*arg) = Nativeint_val(val); break;
-    case GTK_TYPE_FLAGS:
-       *GTK_RETLOC_FLAGS(*arg) = Nativeint_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_float (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_FLOAT:
-       *GTK_RETLOC_FLOAT(*arg) = (float) Double_val(val); break;
-    case GTK_TYPE_DOUBLE:
-       *GTK_RETLOC_DOUBLE(*arg) = Double_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_string (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_STRING:
-         *GTK_RETLOC_STRING(*arg) = String_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_pointer (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_BOXED:
-       *GTK_RETLOC_BOXED(*arg) = Pointer_val(val); break;
-    case GTK_TYPE_POINTER:
-       *GTK_RETLOC_POINTER(*arg) = Pointer_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_object (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_OBJECT:
-         *GTK_RETLOC_OBJECT(*arg) = GtkObject_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-*/
-
-/* gtksignal.h */
-
-value ml_gtk_signal_connect (value object, value name, value clos, value after)
-{
-    value *clos_p = ml_gtk_root_new (clos);
-    return Val_int (gtk_signal_connect_full
-                   (GtkObject_val(object), String_val(name), NULL,
-                    ml_gtk_callback_marshal, clos_p,
-                    ml_gtk_root_destroy, FALSE, Bool_val(after)));
-}
-
-ML_2 (gtk_signal_disconnect, GtkObject_val, Int_val, Unit)
-ML_2 (gtk_signal_emit_stop_by_name, GtkObject_val, String_val, Unit)
-ML_2 (gtk_signal_handler_block, GtkObject_val, Int_val, Unit)
-ML_2 (gtk_signal_handler_unblock, GtkObject_val, Int_val, Unit)
-ML_2_name (ml_gtk_signal_emit_none, gtk_signal_emit_by_name,
-           GtkObject_val, String_val, Unit)
-ML_3_name (ml_gtk_signal_emit_int, gtk_signal_emit_by_name,
-           GtkObject_val, String_val, Int_val, Unit)
-ML_4_name (ml_gtk_signal_emit_scroll, gtk_signal_emit_by_name,
-           GtkObject_val, String_val, Scroll_type_val, Double_val, Unit)
-
-/* gtkmain.h (again) */
-
-value ml_gtk_timeout_add (value interval, value clos)
-{
-    value *clos_p = ml_gtk_root_new (clos);
-    return Val_int (gtk_timeout_add_full
-                   (Int_val(interval), NULL, ml_gtk_callback_marshal, clos_p,
-                    ml_gtk_root_destroy));
-}
-ML_1 (gtk_timeout_remove, Int_val, Unit)
-
-/*
-#include "ml_gtkcaller.h"
-ML_0 (gtk_caller_new, Val_GtkWidget)
-*/
-
-static value ml_class_init=0;
-
-static void class_init (value class)
-{
-  callback(ml_class_init, class);
-}
-
-
-value set_ml_class_init (value class_func)
-{
-  if (!ml_class_init) register_global_root (&ml_class_init);
-  ml_class_init = class_func;
-  return Val_unit;
-}
-
-value ml_gtk_type_new (value type)
-{
-  return Val_GtkWidget_sink(gtk_type_new(Int_val(type)));
-}
-
-
-struct widget_info {
-  guint size;
-  guint class_size;
-  guint (*get_type_func)(void);
-}
-widget_info_array[] = {
-  { sizeof(GtkObject), sizeof(GtkObjectClass), gtk_object_get_type },
-  { sizeof(GtkWidget), sizeof(GtkWidgetClass), gtk_widget_get_type },
-  { sizeof(GtkMisc), sizeof(GtkMiscClass), gtk_misc_get_type },
-  { sizeof(GtkLabel), sizeof(GtkLabelClass), gtk_label_get_type },
-  { sizeof(GtkAccelLabel), sizeof(GtkAccelLabelClass), gtk_accel_label_get_type },
-  { sizeof(GtkTipsQuery), sizeof(GtkTipsQueryClass), gtk_tips_query_get_type },
-  { sizeof(GtkArrow), sizeof(GtkArrowClass), gtk_arrow_get_type },
-  { sizeof(GtkImage), sizeof(GtkImageClass), gtk_image_get_type },
-  { sizeof(GtkPixmap), sizeof(GtkPixmapClass), gtk_pixmap_get_type },
-  { sizeof(GtkContainer), sizeof(GtkContainerClass), gtk_container_get_type },
-  { sizeof(GtkBin), sizeof(GtkBinClass), gtk_bin_get_type },
-  { sizeof(GtkAlignment), sizeof(GtkAlignmentClass), gtk_alignment_get_type },
-  { sizeof(GtkFrame), sizeof(GtkFrameClass), gtk_frame_get_type },
-  { sizeof(GtkAspectFrame), sizeof(GtkAspectFrameClass), gtk_aspect_frame_get_type },
-  { sizeof(GtkButton), sizeof(GtkButtonClass), gtk_button_get_type },
-  { sizeof(GtkToggleButton), sizeof(GtkToggleButtonClass), gtk_toggle_button_get_type },
-  { sizeof(GtkCheckButton), sizeof(GtkCheckButtonClass), gtk_check_button_get_type },
-  { sizeof(GtkRadioButton), sizeof(GtkRadioButtonClass), gtk_radio_button_get_type },
-  { sizeof(GtkOptionMenu), sizeof(GtkOptionMenuClass), gtk_option_menu_get_type },
-  { sizeof(GtkItem), sizeof(GtkItemClass), gtk_item_get_type },
-  { sizeof(GtkMenuItem), sizeof(GtkMenuItemClass), gtk_menu_item_get_type },
-  { sizeof(GtkCheckMenuItem), sizeof(GtkCheckMenuItemClass), gtk_check_menu_item_get_type },
-  { sizeof(GtkRadioMenuItem), sizeof(GtkRadioMenuItemClass), gtk_radio_menu_item_get_type },
-  { sizeof(GtkTearoffMenuItem), sizeof(GtkTearoffMenuItemClass), gtk_tearoff_menu_item_get_type },
-  { sizeof(GtkListItem), sizeof(GtkListItemClass), gtk_list_item_get_type },
-  { sizeof(GtkTreeItem), sizeof(GtkTreeItemClass), gtk_tree_item_get_type },
-  { sizeof(GtkWindow), sizeof(GtkWindowClass), gtk_window_get_type },
-  { sizeof(GtkColorSelectionDialog), sizeof(GtkColorSelectionDialogClass), gtk_color_selection_dialog_get_type },
-  { sizeof(GtkDialog), sizeof(GtkDialogClass), gtk_dialog_get_type },
-  { sizeof(GtkInputDialog), sizeof(GtkInputDialogClass), gtk_input_dialog_get_type },
-  { sizeof(GtkFileSelection), sizeof(GtkFileSelectionClass), gtk_file_selection_get_type },
-  { sizeof(GtkFontSelectionDialog), sizeof(GtkFontSelectionDialogClass), gtk_font_selection_dialog_get_type },
-  { sizeof(GtkPlug), sizeof(GtkPlugClass), gtk_plug_get_type },
-  { sizeof(GtkEventBox), sizeof(GtkEventBoxClass), gtk_event_box_get_type },
-  { sizeof(GtkHandleBox), sizeof(GtkHandleBoxClass), gtk_handle_box_get_type },
-  { sizeof(GtkScrolledWindow), sizeof(GtkScrolledWindowClass), gtk_scrolled_window_get_type },
-  { sizeof(GtkViewport), sizeof(GtkViewportClass), gtk_viewport_get_type },
-  { sizeof(GtkBox), sizeof(GtkBoxClass), gtk_box_get_type },
-  { sizeof(GtkButtonBox), sizeof(GtkButtonBoxClass), gtk_button_box_get_type },
-  { sizeof(GtkHButtonBox), sizeof(GtkHButtonBoxClass), gtk_hbutton_box_get_type },
-  { sizeof(GtkVButtonBox), sizeof(GtkVButtonBoxClass), gtk_vbutton_box_get_type },
-  { sizeof(GtkVBox), sizeof(GtkVBoxClass), gtk_vbox_get_type },
-  { sizeof(GtkColorSelection), sizeof(GtkColorSelectionClass), gtk_color_selection_get_type },
-  { sizeof(GtkGammaCurve), sizeof(GtkGammaCurveClass), gtk_gamma_curve_get_type },
-  { sizeof(GtkHBox), sizeof(GtkHBoxClass), gtk_hbox_get_type },
-  { sizeof(GtkCombo), sizeof(GtkComboClass), gtk_combo_get_type },
-  { sizeof(GtkStatusbar), sizeof(GtkStatusbarClass), gtk_statusbar_get_type },
-  { sizeof(GtkCList), sizeof(GtkCListClass), gtk_clist_get_type },
-  { sizeof(GtkCTree), sizeof(GtkCTreeClass), gtk_ctree_get_type },
-  { sizeof(GtkFixed), sizeof(GtkFixedClass), gtk_fixed_get_type },
-  { sizeof(GtkNotebook), sizeof(GtkNotebookClass), gtk_notebook_get_type },
-  { sizeof(GtkFontSelection), sizeof(GtkFontSelectionClass), gtk_font_selection_get_type },
-  { sizeof(GtkPaned), sizeof(GtkPanedClass), gtk_paned_get_type },
-  { sizeof(GtkHPaned), sizeof(GtkHPanedClass), gtk_hpaned_get_type },
-  { sizeof(GtkVPaned), sizeof(GtkVPanedClass), gtk_vpaned_get_type },
-  { sizeof(GtkLayout), sizeof(GtkLayoutClass), gtk_layout_get_type },
-  { sizeof(GtkList), sizeof(GtkListClass), gtk_list_get_type },
-  { sizeof(GtkMenuShell), sizeof(GtkMenuShellClass), gtk_menu_shell_get_type },
-  { sizeof(GtkMenuBar), sizeof(GtkMenuBarClass), gtk_menu_bar_get_type },
-  { sizeof(GtkMenu), sizeof(GtkMenuClass), gtk_menu_get_type },
-  { sizeof(GtkPacker), sizeof(GtkPackerClass), gtk_packer_get_type },
-  { sizeof(GtkSocket), sizeof(GtkSocketClass), gtk_socket_get_type },
-  { sizeof(GtkTable), sizeof(GtkTableClass), gtk_table_get_type },
-  { sizeof(GtkToolbar), sizeof(GtkToolbarClass), gtk_toolbar_get_type },
-  { sizeof(GtkTree), sizeof(GtkTreeClass), gtk_tree_get_type },
-  { sizeof(GtkCalendar), sizeof(GtkCalendarClass), gtk_calendar_get_type },
-  { sizeof(GtkDrawingArea), sizeof(GtkDrawingAreaClass), gtk_drawing_area_get_type },
-  { sizeof(GtkCurve), sizeof(GtkCurveClass), gtk_curve_get_type },
-  { sizeof(GtkEditable), sizeof(GtkEditableClass), gtk_editable_get_type },
-  { sizeof(GtkEntry), sizeof(GtkEntryClass), gtk_entry_get_type },
-  { sizeof(GtkSpinButton), sizeof(GtkSpinButtonClass), gtk_spin_button_get_type },
-  { sizeof(GtkText), sizeof(GtkTextClass), gtk_text_get_type },
-  { sizeof(GtkRuler), sizeof(GtkRulerClass), gtk_ruler_get_type },
-  { sizeof(GtkHRuler), sizeof(GtkHRulerClass), gtk_hruler_get_type },
-  { sizeof(GtkVRuler), sizeof(GtkVRulerClass), gtk_vruler_get_type },
-  { sizeof(GtkRange), sizeof(GtkRangeClass), gtk_range_get_type },
-  { sizeof(GtkScale), sizeof(GtkScaleClass), gtk_scale_get_type },
-  { sizeof(GtkHScale), sizeof(GtkHScaleClass), gtk_hscale_get_type },
-  { sizeof(GtkVScale), sizeof(GtkVScaleClass), gtk_vscale_get_type },
-  { sizeof(GtkScrollbar), sizeof(GtkScrollbarClass), gtk_scrollbar_get_type },
-  { sizeof(GtkHScrollbar), sizeof(GtkHScrollbarClass), gtk_hscrollbar_get_type },
-  { sizeof(GtkVScrollbar), sizeof(GtkVScrollbarClass), gtk_vscrollbar_get_type },
-  { sizeof(GtkSeparator), sizeof(GtkSeparatorClass), gtk_separator_get_type },
-  { sizeof(GtkHSeparator), sizeof(GtkHSeparatorClass), gtk_hseparator_get_type },
-  { sizeof(GtkVSeparator), sizeof(GtkVSeparatorClass), gtk_vseparator_get_type },
-  { sizeof(GtkPreview), sizeof(GtkPreviewClass), gtk_preview_get_type },
-  { sizeof(GtkProgress), sizeof(GtkProgressClass), gtk_progress_get_type },
-  { sizeof(GtkProgressBar), sizeof(GtkProgressBarClass), gtk_progress_bar_get_type },
-  { sizeof(GtkData), sizeof(GtkDataClass), gtk_data_get_type },
-  { sizeof(GtkAdjustment), sizeof(GtkAdjustmentClass), gtk_adjustment_get_type },
-  { sizeof(GtkTooltips), sizeof(GtkTooltipsClass), gtk_tooltips_get_type },
-  { sizeof(GtkItemFactory), sizeof(GtkItemFactoryClass), gtk_item_factory_get_type }
-};
-
-
-value ml_gtk_type_unique (value name, value parent, value nsignals)
-{
-  struct widget_info * wi;
-  GtkTypeInfo ttt_info;
-
-  wi = widget_info_array + Int_val(parent);
-  ttt_info.type_name = String_val(name);
-  ttt_info.object_size = wi->size;
-  ttt_info.class_size = wi->class_size + Int_val(nsignals)*sizeof(void *);
-  ttt_info.class_init_func = (GtkClassInitFunc) class_init;
-  ttt_info.object_init_func = (GtkObjectInitFunc) NULL;
-  ttt_info.reserved_1 = NULL;
-  ttt_info.reserved_2 = NULL;
-  ttt_info.base_class_init_func = (GtkClassInitFunc) NULL;
-
-  return Val_int(gtk_type_unique(wi->get_type_func (), &ttt_info));
-}
-
-static guint sig[100];
-
-value ml_gtk_object_class_add_signals (value class, value signals,
-                                      value nsignals)
-{
-  int i;
-  for (i=0; i<nsignals; i++)
-    sig[i] = Int_val(Field(signals, i));
-  gtk_object_class_add_signals ((GtkObjectClass *)class,
-              sig, Int_val(nsignals));
-  return Val_unit;
-}
-
-value ml_gtk_signal_new (value name, value run_type, value classe,
-                        value parent, value num)
-{
-  struct widget_info * wi;
-  int offset;
-
-  wi = widget_info_array + Int_val(parent);
-  offset = wi->class_size+Int_val(num)*sizeof(void *);
-  return Val_int(gtk_signal_new (String_val(name), Int_val(run_type),
-                  ((GtkObjectClass *)classe)->type, offset,
-                  gtk_signal_default_marshaller, GTK_TYPE_NONE, 0));
-  *(((int *)classe)+offset) = 0;
-}
-
-ML_1 (gtk_rc_add_default_file, String_val, Unit)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gtk.h b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gtk.h
deleted file mode 100644 (file)
index 29c2da5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/* $Id$ */
-
-#define GtkObject_val(obj) ((GtkObject*)Field(obj,1))
-value Val_GtkObject (GtkObject *w);
-value Val_GtkObject_sink (GtkObject *w);
-#define Val_GtkAny(w) Val_GtkObject((GtkObject*)w)
-#define Val_GtkAny_sink(w) Val_GtkObject_sink((GtkObject*)w)
-#define Val_GtkWidget Val_GtkAny
-#define Val_GtkWidget_sink Val_GtkAny_sink
-
-#ifdef GTK_NO_CHECK_CASTS
-#define check_cast(f,v) f(Pointer_val(v))
-#else
-#define check_cast(f,v) (Pointer_val(v) == NULL ? NULL : f(Pointer_val(v)))
-#endif
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gtkgl.c b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gtkgl.c
deleted file mode 100644 (file)
index 5e0efd7..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* $Id$ */
-
-#include <gtk/gtk.h>
-#include <gtkgl/gtkglarea.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtkgl_tags.h"
-
-/* Conversion functions */
-#include "gtkgl_tags.c"
-
-#define GtkGLArea_val(val) ((GtkGLArea*)GtkObject_val(val))
-
-value ml_gtk_gl_area_new (value list, value share)
-{
-    value cursor, res;
-    int len, i;
-    int *attrs;
-
-    for (len = 0, cursor = list; cursor != Val_unit; cursor = Field(cursor,1))
-    {
-       if (Is_block(Field(cursor,0))) len += 2;
-       else len++;
-    }
-
-    attrs = (int*) stat_alloc ((len+1)*sizeof(int));
-    
-    for (i = 0, cursor = list; cursor != Val_unit; cursor = Field(cursor,1))
-    {
-       value option = Field(cursor,0);
-       if (Is_block(option)) {
-           attrs[i++] = Visual_options_val(Field(option,0));
-           attrs[i++] = Int_val(Field(option,1));
-       }
-       else attrs[i++] = Visual_options_val(option);
-    }
-    attrs[i] = GDK_GL_NONE;
-
-    res = Val_GtkObject
-       ((GtkObject*)gtk_gl_area_share_new(attrs,GtkGLArea_val(share)));
-    stat_free(attrs);
-    return res;
-}
-
-ML_1 (gtk_gl_area_make_current, GtkGLArea_val, Val_bool)
-ML_1 (gtk_gl_area_swapbuffers, GtkGLArea_val, Unit)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gtkxmhtml.c b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/ml_gtkxmhtml.c
deleted file mode 100644 (file)
index 3f9c3c6..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <gtk-xmhtml/gtk-xmhtml.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtkxmhtml_tags.h"
-
-/* conversion functions */
-
-#include "gtkxmhtml_tags.c"
-
-Make_Flags_val (Line_type_val)
-
-#define GtkXmHTML_val(val) ((GtkXmHTML*)GtkObject_val(val))
-
-ML_0 (gtk_xmhtml_new, Val_GtkAny_sink)
-ML_1 (gtk_xmhtml_freeze, GtkXmHTML_val, Unit)
-ML_1 (gtk_xmhtml_thaw, GtkXmHTML_val, Unit)
-ML_2 (gtk_xmhtml_source, GtkXmHTML_val, String_val, Unit)
-ML_2 (gtk_xmhtml_set_string_direction, GtkXmHTML_val, String_direction_val,
-      Unit)
-ML_2 (gtk_xmhtml_set_alignment, GtkXmHTML_val, Position_val, Unit)
-/* ML_2 (gtk_xmhtml_outline, GtkXmHTML_val, Bool_val, Unit) */
-ML_3 (gtk_xmhtml_set_font_familty, GtkXmHTML_val, String_val, String_val, Unit)
-ML_3 (gtk_xmhtml_set_font_familty_fixed, GtkXmHTML_val, String_val, String_val,
-      Unit)
-ML_2 (gtk_xmhtml_set_font_charset, GtkXmHTML_val, String_val, Unit)
-ML_2 (gtk_xmhtml_set_allow_body_colors, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_hilight_on_enter, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_anchor_underline_type, GtkXmHTML_val, Flags_Line_type_val,
-      Unit)
-ML_2 (gtk_xmhtml_set_anchor_visited_underline_type, GtkXmHTML_val,
-      Flags_Line_type_val, Unit)
-ML_2 (gtk_xmhtml_set_anchor_target_underline_type, GtkXmHTML_val,
-      Flags_Line_type_val, Unit)
-ML_2 (gtk_xmhtml_set_allow_color_switching, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_dithering, GtkXmHTML_val, Dither_type_val, Unit)
-ML_2 (gtk_xmhtml_set_allow_font_switching, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_max_image_colors, GtkXmHTML_val, Int_val, Unit)
-ML_2 (gtk_xmhtml_set_allow_images, GtkXmHTML_val, Bool_val, Unit)
-ML_4 (gtk_xmhtml_set_plc_intervals, GtkXmHTML_val, Int_val, Int_val, Int_val,
-      Unit)
-/* ML_2 (gtk_xmhtml_set_def_body_image_url, GtkXmHTML_val, String_val, Unit) */
-ML_2 (gtk_xmhtml_set_anchor_buttons, GtkXmHTML_val, Bool_val, Unit)
-value ml_gtk_xmhtml_set_anchor_cursor(value html, value cursor)
-{
-     gtk_xmhtml_set_anchor_cursor
-          (GtkXmHTML_val(html), Option_val(cursor, GdkCursor_val, NULL),
-           Bool_val(cursor));
-     return Val_unit;
-}
-ML_2 (gtk_xmhtml_set_topline, GtkXmHTML_val, Int_val, Unit)
-ML_1 (gtk_xmhtml_get_topline, GtkXmHTML_val, Val_int)
-ML_2 (gtk_xmhtml_set_freeze_animations, GtkXmHTML_val, Bool_val, Unit)
-/* ML_1 (gtk_xmhtml_get_source, GtkXmHTML_val, copy_string) */
-ML_2 (gtk_xmhtml_set_screen_gamma, GtkXmHTML_val, Float_val, Unit)
-/* ML_2 (gtk_xmhtml_set_event_proc, GtkXmHTML_val, ???, Unit) */
-ML_2 (gtk_xmhtml_set_perfect_colors, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_uncompress_command, GtkXmHTML_val, String_val, Unit)
-ML_2 (gtk_xmhtml_set_strict_checking, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_bad_html_warnings, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_allow_form_coloring, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_imagemap_draw, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_mime_type, GtkXmHTML_val, String_val, Unit)
-ML_2 (gtk_xmhtml_set_alpha_processing, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_rgb_conv_mode, GtkXmHTML_val, Dither_type_val, Unit)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/var2conv.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/var2conv.ml
deleted file mode 100644 (file)
index 6730d14..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-(* $Id$ *)
-
-(* Compile a list of variant tags into CPP defines *) 
-
-(* hash_variant, from ctype.ml *)
-
-let hash_variant s =
-  let accu = ref 0 in
-  for i = 0 to String.length s - 1 do
-    accu := 223 * !accu + Char.code s.[i]
-  done;
-  (* reduce to 31 bits *)
-  accu := !accu land (1 lsl 31 - 1);
-  (* make it signed for 64 bits architectures *)
-  if !accu > 0x3FFFFFFF then !accu - (1 lsl 31) else !accu
-
-open Genlex
-
-let lexer = make_lexer ["type"; "public"; "exception"; "="; "["; "]"; "`"; "|"]
-
-let exn_name = ref "invalid_argument"
-
-let may_string = parser
-    [< ' String s >] -> s
-  | [< >] -> ""
-
-let may_bar = parser
-    [< ' Kwd "|" >] -> ()
-  | [< >] -> ()
-
-let rec ident_list = parser
-    [< ' Kwd "`"; ' Ident x; trans = may_string; _ = may_bar; s >] ->
-      (x, trans) :: ident_list s
-  | [< >] -> []
-
-let may_public = parser
-    [< ' Kwd "public" >] -> true
-  | [< >] -> false
-
-open Printf
-
-let declaration = parser
-    [< ' Kwd "type"; public = may_public; ' Ident name; ' Kwd "=";
-       prefix = may_string; ' Kwd "["; _ = may_bar;
-       tags = ident_list; ' Kwd "]"; suffix = may_string >] ->
-    let ctag tag trans =
-      if trans <> "" then trans else
-      let tag =
-       if tag.[0] = '_' then
-         String.sub tag ~pos:1 ~len:(String.length tag -1)
-       else tag
-      in
-      match
-       if prefix = "" then None, ""
-       else
-         Some (prefix.[String.length prefix - 1]), 
-         String.sub prefix ~pos:0 ~len:(String.length prefix - 1)
-      with
-       Some '#', prefix ->
-         prefix ^ String.uncapitalize tag ^ suffix
-      |        Some '^', prefix ->
-         prefix ^ String.uppercase tag ^ suffix
-      |        _ ->
-         prefix ^ tag ^ suffix
-    and cname =
-      String.capitalize name
-    in
-    let tags =
-      Sort.list tags
-       ~order:(fun (tag1,_) (tag2,_) -> hash_variant tag1 < hash_variant tag2)
-    in
-    printf "/* %s : conversion table */\n" name;
-    if not public then printf "static ";
-    printf "lookup_info ml_table_%s[] = {\n" name;
-    printf "  { 0, %d },\n" (List.length tags);
-    List.iter tags ~f:
-      begin fun (tag,trans) ->
-       printf "  { MLTAG_%s, %s },\n" tag (ctag tag trans)
-      end;
-    printf "};\n\n";
-    printf "#define Val_%s(data) ml_lookup_from_c (ml_table_%s, data)\n"
-      name name;
-    printf "#define %s_val(key) ml_lookup_to_c (ml_table_%s, key)\n\n"
-      cname name;
-  | [< 'Kwd"exception"; 'Ident name >] ->
-      exn_name := name
-  | [< >] -> raise End_of_file
-
-let main () =
-  let chars = Stream.of_channel stdin in
-  let s = lexer chars in
-  try
-    while true do declaration s done
-  with End_of_file -> ()
-  | Stream.Error err ->
-      Printf.eprintf "Parsing error \"%s\" at character %d on input stream"
-        err (Stream.count chars)
-
-let _ = Printexc.print main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/var2def.ml b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/var2def.ml
deleted file mode 100644 (file)
index 617c4c6..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-(* $Id$ *)
-
-(* Compile a list of variant tags into CPP defines *) 
-
-(* hash_variant, from ctype.ml *)
-
-let hash_variant s =
-  let accu = ref 0 in
-  for i = 0 to String.length s - 1 do
-    accu := 223 * !accu + Char.code s.[i]
-  done;
-  (* reduce to 31 bits *)
-  accu := !accu land (1 lsl 31 - 1);
-  (* make it signed for 64 bits architectures *)
-  if !accu > 0x3FFFFFFF then !accu - (1 lsl 31) else !accu
-
-open Genlex
-
-let lexer = make_lexer ["`"; "["; "]"; "|"]
-
-let main () =
-  let s = lexer (Stream.of_channel stdin) in
-  let tags = Hashtbl.create 57 in
-  while match s with parser
-    [< ' Kwd "`"; ' Ident tag >] ->
-      let hash = hash_variant tag in
-      begin try
-       let tag' = Hashtbl.find tags hash in
-       if tag <> tag' then
-         failwith (String.concat ~sep:" " ["Doublon tag:";tag;"and";tag'])
-      with Not_found ->
-       Hashtbl.add ~key:hash ~data:tag tags;
-       print_string "#define MLTAG_";
-       print_string tag;
-       print_string "\tVal_int(";
-       print_int hash;
-       print_string ")\n"
-      end;
-      true
-  | [< ' _ >] -> true
-  | [< >] -> false
-  do () done
-
-let _ = Printexc.print main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/wrappers.c b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/wrappers.c
deleted file mode 100644 (file)
index 7e83aa9..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-
-value copy_memblock_indirected (void *src, asize_t size)
-{
-    value ret = alloc (Wosize_asize(size)+2, Abstract_tag);
-    if (!src) ml_raise_null_pointer ();
-    
-    Field(ret,1) = 2;
-    memcpy (&Field(ret,2), src, size);
-    return ret;
-}
-
-value ml_some (value v)
-{
-     CAMLparam1(v);
-     value ret = alloc_small(1,0);
-     Field(ret,0) = v;
-     CAMLreturn(ret);
-}
-
-void ml_raise_null_pointer ()
-{
-  static value * exn = NULL;
-  if (exn == NULL)
-      exn = caml_named_value ("null_pointer");
-  raise_constant (*exn);
-}   
-
-value Val_pointer (void *ptr)
-{
-    value ret = alloc_small (2, Abstract_tag);
-    if (!ptr) ml_raise_null_pointer ();
-    Field(ret,1) = (value)ptr;
-    return ret;
-}
-
-value copy_string_check (const char*str)
-{
-    if (!str) ml_raise_null_pointer ();
-    return copy_string ((char*) str);
-}
-
-value copy_string_or_null (const char*str)
-{
-    return copy_string (str ? (char*) str : "");
-}
-
-value ml_lookup_from_c (lookup_info *table, int data)
-{
-    int i;
-    for (i = table[0].data; i > 0; i--)
-       if (table[i].data == data) return table[i].key;
-    invalid_argument ("ml_lookup_from_c");
-}
-    
-int ml_lookup_to_c (lookup_info *table, value key)
-{
-    int first = 1, last = table[0].data, current;
-
-    while (first < last) {
-       current = (first+last)/2;
-       if (table[current].key >= key) last = current;
-       else first = current + 1;
-    }
-    if (table[first].key == key) return table[first].data;
-    invalid_argument ("ml_lookup_to_c");
-}
diff --git a/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/wrappers.h b/helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/wrappers.h
deleted file mode 100644 (file)
index 1fcffcf..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/* $Id$ */
-
-#ifndef _wrappers_
-#define _wrappers_
-
-#include <caml/mlvalues.h>
-#include <caml/fail.h>
-
-value copy_memblock_indirected (void *src, asize_t size);
-value ml_some (value);
-void ml_raise_null_pointer (void) Noreturn;
-value Val_pointer (void *);
-value copy_string_check (const char*);
-value copy_string_or_null (const char *);
-
-typedef struct { value key; int data; } lookup_info;
-value ml_lookup_from_c (lookup_info *table, int data);
-int ml_lookup_to_c (lookup_info *table, value key);
-
-/* Wrapper generators */
-
-#define ML_0(cname, conv) \
-value ml_##cname (value unit) { return conv (cname ()); }
-#define ML_1(cname, conv1, conv) \
-value ml_##cname (value arg1) { return conv (cname (conv1 (arg1))); }
-#define ML_1_post(cname, conv1, conv, post) \
-value ml_##cname (value arg1) \
-{ value ret = conv (cname (conv1(arg1))); post; return ret; }
-#define ML_2(cname, conv1, conv2, conv) \
-value ml_##cname (value arg1, value arg2) \
-{ return conv (cname (conv1(arg1), conv2(arg2))); }
-#define ML_2_name(mlname, cname, conv1, conv2, conv) \
-value mlname (value arg1, value arg2) \
-{ return conv (cname (conv1(arg1), conv2(arg2))); }
-#define ML_3(cname, conv1, conv2, conv3, conv) \
-value ml_##cname (value arg1, value arg2, value arg3) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3))); }
-#define ML_3_name(mlname, cname, conv1, conv2, conv3, conv) \
-value mlname (value arg1, value arg2, value arg3) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3))); }
-#define ML_4(cname, conv1, conv2, conv3, conv4, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4))); }
-#define ML_4_name(mlname, cname, conv1, conv2, conv3, conv4, conv) \
-value mlname (value arg1, value arg2, value arg3, value arg4) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4))); }
-#define ML_5(cname, conv1, conv2, conv3, conv4, conv5, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5))); }
-#define ML_6(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6))); }
-#define ML_7(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6, value arg7) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6), conv7(arg7))); }
-#define ML_8(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \
-            conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6, value arg7, value arg8) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8))); }
-#define ML_9(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \
-             conv9, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6, value arg7, value arg8, value arg9) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8), \
-                     conv9(arg9))); }
-#define ML_10(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \
-             conv9, conv10, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6, value arg7, value arg8, value arg9, value arg10)\
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8), \
-                     conv9(arg9), conv10(arg10))); }
-#define ML_11(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \
-             conv9, conv10, conv11, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6, value arg7, value arg8, value arg9, value arg10,\
-                 value arg11) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8), \
-                     conv9(arg9), conv10(arg10), conv11(arg11))); }
-#define ML_12(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \
-             conv9, conv10, conv11, conv12, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6, value arg7, value arg8, value arg9, value arg10,\
-                 value arg11, value arg12) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8), \
-                     conv9(arg9), conv10(arg10), conv11(arg11), \
-                     conv12(arg12))); }
-
-/* Use with care: needs the argument index */
-#define Ignore(x)
-#define Insert(x) (x),
-#define Split(x,f,g) f(x), g(x) Ignore
-#define Split3(x,f,g,h) f(x), g(x), h(x) Ignore
-#define Pair(x,f,g) f(Field(x,0)), g(Field(x,1)) Ignore
-#define Triple(x,f,g,h) f(Field(x,0)), g(Field(x,1)), h(Field(x,2)) Ignore
-
-/* For more than 5 arguments */
-#define ML_bc6(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5]); }
-#define ML_bc7(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6]); }
-#define ML_bc8(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \
-              argv[7]); }
-#define ML_bc9(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \
-              argv[7],argv[8]); }
-#define ML_bc10(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \
-              argv[7],argv[8],argv[9]); }
-#define ML_bc11(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \
-              argv[7],argv[8],argv[9],argv[10]); }
-#define ML_bc12(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \
-              argv[7],argv[8],argv[9],argv[10],argv[11]); }
-
-/* result conversion */
-#define Unit(x) ((x), Val_unit)
-#define Id(x) x
-#define Val_char Val_int
-
-/* parameter conversion */
-#define Bool_ptr(x) ((long) x - 1)
-#define Char_val Int_val
-#define Float_val(x) ((float)Double_val(x))
-
-#define Option_val(val,unwrap,default) \
-((long)val-1 ? unwrap(Field(val,0)) : default)
-#define String_option_val(s) Option_val(s,String_val,NULL)
-
-/* Utility */
-
-#define Copy_array(ret,l,src,conv) \
- if (!l) ret = Atom(0); \
- else if (l <= Max_young_wosize) { int i; ret = alloc_tuple(l); \
-   for(i=0;i<l;i++) Field(ret,i) = conv(src[i]); } \
- else { int i; ret = alloc_shr(l,0); \
-   for(i=0;i<l;i++) initialize (&Field(ret,i), conv(src[i])); }
-
-#define Make_Val_final_pointer(type, init, final, adv) \
-static void ml_final_##type (value val) \
-{ if (Field(val,1)) final ((type*)Field(val,1)); } \
-value Val_##type (type *p) \
-{ value ret; if (!p) ml_raise_null_pointer(); \
-  ret = alloc_final (2, ml_final_##type, adv, 1000); \
-  initialize (&Field(ret,1), (value) p); init(p); return ret; }
-
-#define Make_Val_final_pointer_ext(type, ext, init, final, adv) \
-static void ml_final_##type##ext (value val) \
-{ if (Field(val,1)) final ((type*)Field(val,1)); } \
-value Val_##type##ext (type *p) \
-{ value ret; if (!p) ml_raise_null_pointer(); \
-  ret = alloc_final (2, ml_final_##type##ext, adv, 1000); \
-  initialize (&Field(ret,1), (value) p); init(p); return ret; }
-
-#define Pointer_val(val) ((void*)Field(val,1))
-#define MLPointer_val(val) (Field(val,1) == 2 ? &Field(val,2) : (void*)Field(val,1))
-
-#define Val_addr(ptr) (1+(value)ptr)
-#define Addr_val(val) ((void*)(val-1))
-
-#define Wosize_asize(x) ((x-1)/sizeof(value)+1)
-#define Wosizeof(x) Wosize_asize(sizeof(x))
-
-#define Make_Extractor(name,conv1,field,conv2) \
-value ml_##name##_##field (value val) \
-{ return conv2 ((conv1(val))->field); }
-
-#define Make_Setter(name,conv1,conv2,field) \
-value ml_##name##_##field (value val, value new) \
-{ (conv1(val))->field = conv2(new); return Val_unit; }
-
-#define Make_Array_Extractor(name,conv1,conv2,field,conv) \
-value ml_##name##_##field (value val, value index) \
-{ return conv ((conv1(val))->field[conv2(index)]); }
-
-#define Make_Array_Setter(name,conv1,conv2,conv3,field) \
-value ml_##name##_##field (value val, value index, value new) \
-{ (conv1(val))->field[conv2(index)] = conv3(new); return Val_unit; }
-
-/* ML value is [flag list] */
-#define Make_Flags_val(conv) \
-int Flags_##conv (value list) \
-{ int flags = 0L; \
-  while Is_block(list) { flags |= conv(Field(list,0)); list = Field(list,1); }\
-  return flags; }
-
-/* ML value is [flag list option] */
-#define Make_OptFlags_val(conv) \
-int OptFlags_##conv (value list) \
-{ int flags = 0L; \
-  if Is_block(list) list = Field(list,0); \
-  while Is_block(list) { flags |= conv(Field(list,0)); list = Field(list,1); }\
-  return flags; }
-
-#define Val_copy(val) copy_memblock_indirected (&val, sizeof(val))
-#define Val_string copy_string_check
-#define Val_optstring copy_string_or_null
-#define Optstring_val(v) (string_length(v) ? String_val(v) : (char*)NULL)
-#define Val_option(v,f) (v ? ml_some(f(v)) : Val_unit)
-
-#define Check_null(v) (v ? v : (ml_raise_null_pointer (), v))
-
-#endif /* _wrappers_ */
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0-1.spec b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0-1.spec
deleted file mode 100644 (file)
index 8ab9a22..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-Summary: LablGTK : an interface to the GIMP Tool Kit for OCaml
-Name: lablgtk_20001129
-Version: 0.1.0
-Release: 1
-Copyright: LGPL
-Group: Development/Libraries
-Source: ftp://ftp.kurims.kyoto-u.ac.jp/pub/lang/olabl/lablgtk_20001129-0.1.0.tar.gz
-%description
-LablGTK is an interface to the GIMP Tool Kit for OCaml.
-
-%prep
-%setup
-
-%build
-make configure
-make
-make opt
-
-%install
-make install
-
-%files
-%doc CHANGES COPYING README doc
-
-/usr/lib/ocaml/lablgtk/gBin.cmi
-/usr/lib/ocaml/lablgtk/gBin.ml
-/usr/lib/ocaml/lablgtk/gBin.mli
-/usr/lib/ocaml/lablgtk/gButton.cmi
-/usr/lib/ocaml/lablgtk/gButton.ml
-/usr/lib/ocaml/lablgtk/gButton.mli
-/usr/lib/ocaml/lablgtk/gContainer.cmi
-/usr/lib/ocaml/lablgtk/gContainer.ml
-/usr/lib/ocaml/lablgtk/gContainer.mli
-/usr/lib/ocaml/lablgtk/gData.cmi
-/usr/lib/ocaml/lablgtk/gData.ml
-/usr/lib/ocaml/lablgtk/gData.mli
-/usr/lib/ocaml/lablgtk/gDraw.cmi
-/usr/lib/ocaml/lablgtk/gDraw.ml
-/usr/lib/ocaml/lablgtk/gDraw.mli
-/usr/lib/ocaml/lablgtk/gEdit.cmi
-/usr/lib/ocaml/lablgtk/gEdit.ml
-/usr/lib/ocaml/lablgtk/gEdit.mli
-/usr/lib/ocaml/lablgtk/gList.cmi
-/usr/lib/ocaml/lablgtk/gList.ml
-/usr/lib/ocaml/lablgtk/gList.mli
-/usr/lib/ocaml/lablgtk/gMain.cmi
-/usr/lib/ocaml/lablgtk/gMain.ml
-/usr/lib/ocaml/lablgtk/gMenu.cmi
-/usr/lib/ocaml/lablgtk/gMenu.ml
-/usr/lib/ocaml/lablgtk/gMenu.mli
-/usr/lib/ocaml/lablgtk/gMisc.cmi
-/usr/lib/ocaml/lablgtk/gMisc.ml
-/usr/lib/ocaml/lablgtk/gMisc.mli
-/usr/lib/ocaml/lablgtk/gObj.cmi
-/usr/lib/ocaml/lablgtk/gObj.ml
-/usr/lib/ocaml/lablgtk/gObj.mli
-/usr/lib/ocaml/lablgtk/gPack.cmi
-/usr/lib/ocaml/lablgtk/gPack.ml
-/usr/lib/ocaml/lablgtk/gPack.mli
-/usr/lib/ocaml/lablgtk/gRange.cmi
-/usr/lib/ocaml/lablgtk/gRange.ml
-/usr/lib/ocaml/lablgtk/gRange.mli
-/usr/lib/ocaml/lablgtk/gTree.cmi
-/usr/lib/ocaml/lablgtk/gTree.ml
-/usr/lib/ocaml/lablgtk/gTree.mli
-/usr/lib/ocaml/lablgtk/gUtil.cmi
-/usr/lib/ocaml/lablgtk/gUtil.ml
-/usr/lib/ocaml/lablgtk/gUtil.mli
-/usr/lib/ocaml/lablgtk/gWindow.cmi
-/usr/lib/ocaml/lablgtk/gWindow.ml
-/usr/lib/ocaml/lablgtk/gWindow.mli
-/usr/lib/ocaml/lablgtk/gaux.cmi
-/usr/lib/ocaml/lablgtk/gaux.ml
-/usr/lib/ocaml/lablgtk/gdk.cmi
-/usr/lib/ocaml/lablgtk/gdk.ml
-/usr/lib/ocaml/lablgtk/gdk.mli
-/usr/lib/ocaml/lablgtk/gdkEvent.cmi
-/usr/lib/ocaml/lablgtk/gdkEvent.ml
-/usr/lib/ocaml/lablgtk/gdkKeysyms.cmi
-/usr/lib/ocaml/lablgtk/gdkKeysyms.ml
-/usr/lib/ocaml/lablgtk/gdk_tags.h
-/usr/lib/ocaml/lablgtk/glGtk.mli
-/usr/lib/ocaml/lablgtk/glib.cmi
-/usr/lib/ocaml/lablgtk/glib.ml
-/usr/lib/ocaml/lablgtk/gpointer.cmi
-/usr/lib/ocaml/lablgtk/gpointer.ml
-/usr/lib/ocaml/lablgtk/gtk.cmi
-/usr/lib/ocaml/lablgtk/gtk.ml
-/usr/lib/ocaml/lablgtk/gtkArgv.cmi
-/usr/lib/ocaml/lablgtk/gtkArgv.ml
-/usr/lib/ocaml/lablgtk/gtkBase.cmi
-/usr/lib/ocaml/lablgtk/gtkBase.ml
-/usr/lib/ocaml/lablgtk/gtkBin.cmi
-/usr/lib/ocaml/lablgtk/gtkBin.ml
-/usr/lib/ocaml/lablgtk/gtkButton.cmi
-/usr/lib/ocaml/lablgtk/gtkButton.ml
-/usr/lib/ocaml/lablgtk/gtkData.cmi
-/usr/lib/ocaml/lablgtk/gtkData.ml
-/usr/lib/ocaml/lablgtk/gtkEdit.cmi
-/usr/lib/ocaml/lablgtk/gtkEdit.ml
-/usr/lib/ocaml/lablgtk/gtkInit.cmi
-/usr/lib/ocaml/lablgtk/gtkInit.cmo
-/usr/lib/ocaml/lablgtk/gtkInit.cmx
-/usr/lib/ocaml/lablgtk/gtkInit.ml
-/usr/lib/ocaml/lablgtk/gtkInit.o
-/usr/lib/ocaml/lablgtk/gtkList.cmi
-/usr/lib/ocaml/lablgtk/gtkList.ml
-/usr/lib/ocaml/lablgtk/gtkMain.cmi
-/usr/lib/ocaml/lablgtk/gtkMain.ml
-/usr/lib/ocaml/lablgtk/gtkMenu.cmi
-/usr/lib/ocaml/lablgtk/gtkMenu.ml
-/usr/lib/ocaml/lablgtk/gtkMisc.cmi
-/usr/lib/ocaml/lablgtk/gtkMisc.ml
-/usr/lib/ocaml/lablgtk/gtkNew.cmi
-/usr/lib/ocaml/lablgtk/gtkNew.ml
-/usr/lib/ocaml/lablgtk/gtkPack.cmi
-/usr/lib/ocaml/lablgtk/gtkPack.ml
-/usr/lib/ocaml/lablgtk/gtkRange.cmi
-/usr/lib/ocaml/lablgtk/gtkRange.ml
-/usr/lib/ocaml/lablgtk/gtkSignal.cmi
-/usr/lib/ocaml/lablgtk/gtkSignal.ml
-/usr/lib/ocaml/lablgtk/gtkSignal.mli
-/usr/lib/ocaml/lablgtk/gtkThInit.cmi
-/usr/lib/ocaml/lablgtk/gtkThInit.cmo
-/usr/lib/ocaml/lablgtk/gtkThInit.ml
-/usr/lib/ocaml/lablgtk/gtkThread.cmi
-/usr/lib/ocaml/lablgtk/gtkThread.cmo
-/usr/lib/ocaml/lablgtk/gtkThread.ml
-/usr/lib/ocaml/lablgtk/gtkTree.cmi
-/usr/lib/ocaml/lablgtk/gtkTree.ml
-/usr/lib/ocaml/lablgtk/gtkWindow.cmi
-/usr/lib/ocaml/lablgtk/gtkWindow.ml
-/usr/lib/ocaml/lablgtk/gtk_tags.h
-/usr/lib/ocaml/lablgtk/lablgtk.a
-/usr/lib/ocaml/lablgtk/lablgtk.cma
-/usr/lib/ocaml/lablgtk/lablgtk.cmxa
-/usr/lib/ocaml/lablgtk/lablgtktop
-/usr/lib/ocaml/lablgtk/lablgtktop_t
-/usr/lib/ocaml/lablgtk/liblablgtk.a
-/usr/lib/ocaml/lablgtk/ml_gdk.h
-/usr/lib/ocaml/lablgtk/ml_glib.h
-/usr/lib/ocaml/lablgtk/ml_gtk.h
-/usr/lib/ocaml/lablgtk/wrappers.h
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0.tar.gz b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0.tar.gz
deleted file mode 100644 (file)
index dbb907a..0000000
Binary files a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0.tar.gz and /dev/null differ
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/.cvsignore b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/.cvsignore
deleted file mode 100644 (file)
index 0ea779d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-.depend
-config.make
-varcc
-lablgtk
-lablgtktop
-lablgtktop_t
-lablgtkrun
-*_tags.c
-*_tags.h
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/CHANGES b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/CHANGES
deleted file mode 100644 (file)
index 5b6669c..0000000
+++ /dev/null
@@ -1,365 +0,0 @@
-$Id$
-
-2000.11.29
-  * remove unison port, since unison already works with this snapshot
-
-2000.11.16
-  * internal change: switch from var2def/var2conv to varcc,
-    and split ml_gtk.c in smaller files
-
-2000.8.29
-  * bugs in color selection reported by Nicolas George
-  * changed the license
-
-2000.8.21
-  * correct GtkStyle.set_font bug reported by Patrick Doane
-
-2000.7.27
-  * changed GUtil.signal and GUtil.variable for better usability
-  * suppressed obsolete color settings in tooltips
-
-2000.6.19
-  * patch by Michael Welsh for Gdk regions
-
-2000.6.15
-  * add CList.set_cell_style/set_row_style
-  * change set_usize/set_uposition into set_geometry
-  * return an option rather than raise an exception for null pointers
-  * map empty strings to NULL when meaningful
-  * Gdk.Font.get_type/ascent/descent
-
-2000.6.14
-  * add GDraw.optcolor for functions with a default (Jerome suggested)
-
-2000.6.8
-  * apply Jerome Vouillon's patch
-  * changes in GtkSignal and GtkArgv.ml
-
-2000.6.7
-  * create #misc#connect for widget generic signals
-
-2000.6.6
-  * move notebook from GMisc to GPack
-  * #connect#event, #add_event, #misc#event, #misc#set_events_extension
-    transferred to #event su-bobject.
-  * #connect#drag -> #drag#connect.
-  * #get_type, #connect#disconnect, #connect#stop_emit transferred to #misc.
-
-2000.5.25
-  * split misc.ml into gaux.ml and gpointer.ml
-
-2000.5.23
-  * add GMisc.notebook#get_{tab,menu}_label. Rename nth_page to get_nth_page.
-  * modified ML signals in GUtil, to allow signals without widget.
-
-2000.5.22
-  * Incompatible!: Change default for ~expand in Box.pack,
-    Pack.build_options, Table.build_options. Now defaults to false/`NONE.
-    This means that all options default to false/`NONE, except ~show
-    (true for all widgets except windows) and ~fill (always true but
-    effect controlled by ~expand).
-  * add GtkArgv.get_nativeint and GtkArgv.set_nativeint.
-  * make offset and length optional in GtkArgv.string_at_pointer.
-
-2000.5.10
-  * rename GtkFrame to GtkBin and GFrame to GBin
-  * move socket to GBin
-
-2000.5.9
-  * add arrow and image classes to GMisc
-  * add list and set_item_string methods to GEdit.combo
-  * add socket and plug classes to GContainer and GWindow
-  * two new examples: combo.ml and socket.ml
-
-2000.4.28
-  * add GUtil.variable
-
-2000.4.27
-  * add GtkXmHTML widget
-
-2000.4.26
-  * release 1.00
-
-2000.4.24
-  * merge in changes for ocaml 3.00: label and syntax changes, autolink
-  * added better visual and colormap handling to Gdk
-  * GdkObj renamed to GDraw, GtkPixmap moved to GMisc
-  * Initialize Gtk in gtkInit.cmo/cmx, start a thread in gtkInitThread.cmo.
-    These are only included in toplevels, link them explicitely or call
-    GMain.Main.init and GtkThread.start otherwise.
-  * install to caml standard library
-  * many other forgotten changes...
-
-2000.3.02
-  * move locale setting inside GtkMain.init, since it requires an
-    X display
-
-2000.2.24
-  * add checks in add methods, to avoid critical errors
-
-2000.2.23
-  * add dcalendar.ml (submitted by Ken Wakita) and csview.ml
-  * correct bug in GdkObj.pixmap#line
-
-1999.12.19
-  * release lablGTK beta2
-
-1999.12.16
-  * upgraded unison to version 1.169
-  * radio groups are of type {radio_menu_item,radio_button} obj option,
-    otherwise you could not use them several times
-
-1999.12.13
-  * added GtkEdit::{insert_text,delete_text} signals
-  * better syntax highlighting and ergonomy in the browser's shell
-
-1999.11...
-  * switched to Objective Caml 3
-  * constructors are no longer classes, but simple functions
-
-1999.10.29
-  * changed GtkArgv.get_{string,pointer,object} to return option types
-
-1999.10.27
-  * added radtest/CHANGES for cooperative editing on radtest
-
-1999.10.21
-  * added a UI for unison
-    (ask bcpierce@saul.cis.upenn.edu about how to get unison)
-
-1999.10.20
-  * corrected CList signals
-  * moved initialization out of the library, in gtkInit.cmo
-
-1999.10.15
-  * release lablGTK beta1
-
-1999.10.13
-  * improved gtkThread.ml (no timer)
-  * modify Sys.argv in place (gtkMain.ml)
-  * add set_row_data and get_row_data for GtkCList
-
-1999.10.11
-  * bugfixes in Makefile, radtest and lv
-
-1999.10.6
-  * added Gdk.X.flush and Gdk.X.beep 
-  * Gdk.X.flush is exported in GtkMain.Main
-
-1999.9.9
-  * added font selection dialog
-
-1999.8.25
-  * re-added connect#draw
-
-1999.8.10
-  * reduced the number of methods in widget
-  * moved disconnect and stop_emit to object_signals
-  * moved ?:after to each signal
-  * more functions in applications/browser
-
-1999.8.9
-  * Major change: created one set_param method by parameter,
-    rather than grouping them and using options.
-    You can get previous versions with tag "changing_set"
-  * corrected examples, radtest and browser for these changes
-  * a bit of clean-up in radtest (treew.ml and Makefile)
-
-1999.8.5
-  * corrected a bad bug with indirected pointers in caml heap
-
-1999.7.15
-  * add GdkKeysyms for exotic keysyms
-
-1999.7.14
-  * moved Truecolor inside Gdk
-  * added COPYING
-  * prepared for release
-
-1999.7.12
-  * clean up drag-and-drop
-
-1999.7.9
-  * corrected bug in Container.children
-  * added ML signal support in GUtil
-
-1999.7.6
-  * added DnD, improved radtest (Hubert)
-  * small corrections (Jacques)
-
-1999.7.1
-  * added some gdk functions related window and ximage
-  * also added applications/lv, "labl image viewer" with
-    the camlimage library.
-  (JPF)
-
-1999.7.1
-  * added applications/lablglade (Koji)
-
-1999.6.28
-  * added applications/radtest (Hubert)
-
-1999.6.23
-  * improved variant conversions for space.
-
-1999.6.22
-  * updated olabl.patch. With this new version you can access fields
-    of records without opening modules.  You can also use several times
-    the same label in one module.
-  * examples/GL/morph3d.ml uses it.
-
-1999.6.21
-  * moved event functions to GdkEvent
-
-1999.6.20
-  * new example: radtest.ml (Hubert)
-
-1999.6.18
-  * added GL extension
-
-1999.6.15
-  * grouped set methods into set_<keyword>
-  * added width and height option to all classes
-  * windows not shown are automatically destroyed by the GC
-
-1999.6.14
-  * added GPack.layout, GPack.packer, GPack.paned, GMisc.notebook,
-    GRange.scale, GMisc.calendar
-  * added 3 examples
-  * #add_events only available on windowed widgets
-
-1999.6.11
-  * added CList widget in GList module, and examples/clist.ml
-  * improved pixmap abstraction in GdkObj / GPix
-
-1999.6.10
-  * suppressed almost all raw pointers from the code. Pointers are now
-    either boxed (second field of an abstract block) or marked (lowest
-    bit set to 1).
-
-1999.6.9
-  * added GtkBase.Object.get_id and GObj.gtkobj#get_id to get an
-    unique identifier to gtk objects. Nice for hash-tables, etc...
-  * GUtil.memo is such an hash-table, allowing you to recover an
-    object's wrapper.
-  * added a show option to all classes, commanding whether the widget
-    should be shown immediately.  It is by default true on all widgets
-    except in module GWindow.
-  * moved non-OO examples to examples/old. Do "cvs update -d old" to
-    get them.
-  * changes in Gdk/GtkData/GObj about styles.
-
-1999.6.8
-  * updated olabl.patch
-
-1999.6.7
-  * split gtk.ml into gtk*.ml
-
-1999.6.5
-  * grouped Container focus operations in a "focus" subwidget
-
-1999.6.4
-  * slightly reorganized widget grouping
-
-1999.6.3
-  * disabled gtk_caller
-  * subtle hack to have GTree get the right interface
-  * switched completely to the new widget scheme (including examples)
-  * added olabl.patch to apply to olabl-2.02 to compile new sources
-
-1999.6.2
-  * integrated changes from Hubert in Gtk, GtkObj and testgtk.ml
-  * added G* modules to replace GtkObj. "make lablgtk2" for it
-
-1999.6.1
-  * added experimental GtkMenu for a cleaner approach to OO (Jacques)
-
-1999.5.31
-  * GtkObj: list, tree and menu_shell inherit from item_container (Jacques)
-  * Argv.get_{string,pointer,object} may raise Null_pointer (Jacques)
-  * Support for creating new widgets (Hubert)
-
-1999.5.28
-  * a few stylistic corrections
-  * added Packer in gtk.ml
-
-1999.5.27
-  * new Gtk.Main.main Gtk.Main.quit and GtkThread.main (for modal windows)
-  * added x: and y: to Window.setter
-  * new methods: object#get_type widget#misc#lock_accelerators
-    widget#misc#visible widget#misc#parent container#set_focus#vadjustment
-    container#set_focus#hadjustment (could be container#set_focus#adjustment with a dir param)
-    window#set_modal window#set_position window#set_default_size
-    window#set_transient_for
-    menu#set_accel_group
-  * new classes: handle_box_skel handle_box_signals handle_box
-    bbox color_selection color_selection_dialog toolbar
-    and the corresponding modules in gtk.ml
-    new class type: is_window and method as_window
-  * new param tearoff: in new_menu_item
-    new param x: and y: modal: in Window.setter
-  * Widget.event and Widget.activate return bool
-  * new example: examples/testgtk.ml and test.xpm
-  (Hubert)
-
-1999.5.25
-  * upgraded to gtk+-1.2.3 (all examples work)
-  * suppressed deprecated function calls and corrected examples
-  * added a patch to use toplevel threads in olabl-2.02
-
-1998.12.13
-  * upgraded to olabl-2.01
-
-1998.12.9
-  * replicated Main, Timeout and Grab to GtkObj (no need to open Gtk anymore)
-  * moved some non standard classes to GtkExt
-
-1998.12.8
-  * added the first application, xxaplay, Playstation audio track 
-    player for linux. (How architecture specific!) (Furuse)
-
-1998.12.8
-  * more widgets in GtkObj
-  * refined memory management
-  * all variants in upper case
-
-1998.12.7
-  * after deeper thought, re-introduced the connect sub-object
-  * simplified GtkObj: use simple inheritance and allow easy subtyping
-  * updated olabl.diffs for bugs in class functions parsing and printing
-  * add ThreadObj for concurrent object programming
-  (Jacques)
-
-1998.12.3
-  * pousse.ml is now a reversi game (idea for strategy ?)
-  * solved startup bug (a value checker for ocaml is now available)
-  (Jacques)
-
-1998.12.2
-  * added GdkObj for high level drawing primitives (Jacques)
-
-1998.11.30
-  * removed cast checking for NULL valued widgets (ml_gtk.[ch])
-  * module Arg is renamed as GtkArg because of the name corrision with
-       the module Arg in the standard library
-  * Makefile : native code compilation added
-  (Furuse)
-1998.11.29
-  * renamed widget_ops sub-object to misc
-  * various improvements of set functions
-  (Jacques)
-
-1998.11.28
-  * switched to object-oriented model. GtkObj is now the standard way
-    to access the library, but not all objects are ready (see README)
-  * removed inheritance in gtk.ml
-  (Jacques)
-
-1998.11.24
-  * added inheritance in gtk.ml
-
-1998.11.22
-  * added gtkObj.ml and examples/*_obj.ml
-  * various modifications in gtk.ml
-                                  
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/COPYING b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/COPYING
deleted file mode 100644 (file)
index d417b8b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-This library is made available under the LGPL.
-You should have got a copy of the LGPL with Objective Caml.
-The LGPL applies to all the files in this directory, but not in
-subdirectories.
-
-For the examples subdirectory, there is no specific licensing policy,
-but you may freely take inspiration from the code, and copy parts of
-it in your application.
-
-For the applications subdirectory, stricter rules apply:
-
-* You are free to do anything you want with this code as long as it is
-  for personal use.
-
-* Redistribution can only be "as is".  Binary distribution and bug
-  fixes are allowed, but you cannot extensively modify the code
-  without asking the authors.
-
-The authors may choose to remove any of the above restrictions on a
-per request basis.
-
-Authors:
-       Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
-       Hubert Fauque  <hubert.fauque@wanadoo.fr>
-       Jun Furuse     <Jun.Furuse@inria.fr>
-       Koji Kagawa    <kagawa@eng.kagawa-u.ac.jp>
-
-$Id$
\ No newline at end of file
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile
deleted file mode 100644 (file)
index a0ac04f..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-# $Id$
-# Makefile for lablgtk.
-
-TARGETS = varcc lablgtktop lablgtktop_t lablgtkrun lablgtk
-
-all: $(TARGETS)
-
-opt: lablgtkopt
-
-configure:
-       @rm -f config.make
-       @$(MAKE) --no-print-directory -f configure.mk
-
-depend:
-       @rm -f .depend
-       @$(MAKE) --no-print-directory -f configure.mk .depend
-
-.depend config.make:
-       @$(MAKE) --no-print-directory -f configure.mk
-
-COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-TOPLEVEL = ocamlmktop $(MLFLAGS)
-
-include config.make
-
-INSTALLDIR = $(LIBDIR)/lablgtk
-LABLGLDIR = $(LIBDIR)/lablGL
-
-MLLIBS = lablgtk.cma
-CLIBS = liblablgtk.a
-MLLINK = unix.cma str.cma
-
-ifdef DEBUG
-CFLAGS = -g $(GTKCFLAGS)
-MLLINK += -cclib -lcamlrund
-MLFLAGS = -g
-else
-CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS)
-endif
-
-THFLAGS = -thread
-THLINK = unix.cma threads.cma
-
-ifdef USE_CC
-CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS)
-else
-CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)"
-endif
-
-ifdef USE_GL
-MLFLAGS += -I $(LABLGLDIR)
-MLLINK += lablgl.cma
-MLLIBS += lablgtkgl.cma
-CLIBS += liblablgtkgl.a
-GLLINK = -cclib -llablgtkgl -cclib -lgtkgl
-GLMLOBJS = glGtk.cmo
-GLCOBJS = ml_gtkgl.o
-
-endif
-
-ifdef USE_GNOME
-MLLIBS += lablgnome.cma
-CLIBS += liblablgnome.a
-GNOMEMLOBJS = gtkXmHTML.cmo gHtml.cmo
-GNOMECOBJS = ml_gtkxmhtml.o
-endif
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def
-.c.o:
-       $(CCOMPILER) $<
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-.var.h:
-       ./varcc $<
-
-# Targets
-GTKOBJS = ml_gtk.o ml_gtkbin.o ml_gtkbutton.o ml_gtkedit.o ml_gtklist.o \
-       ml_gtkmenu.o ml_gtkmisc.o ml_gtknew.o ml_gtkpack.o ml_gtkrange.o \
-       ml_gtktree.o
-COBJS = ml_gdk.o ml_glib.o wrappers.o $(GTKOBJS)
-MLOBJS = gaux.cmo gpointer.cmo glib.cmo gdk.cmo gdkEvent.cmo gdkKeysyms.cmo \
-       gtk.cmo gtkArgv.cmo gtkSignal.cmo \
-       gtkData.cmo gtkBase.cmo gtkPack.cmo gtkButton.cmo \
-       gtkMenu.cmo gtkMisc.cmo gtkWindow.cmo gtkTree.cmo gtkList.cmo \
-       gtkBin.cmo gtkEdit.cmo gtkRange.cmo gtkMain.cmo gtkNew.cmo \
-       gDraw.cmo \
-       gObj.cmo gMain.cmo gData.cmo gContainer.cmo gPack.cmo gButton.cmo \
-       gMenu.cmo gMisc.cmo gWindow.cmo gTree.cmo gList.cmo gBin.cmo \
-       gEdit.cmo gRange.cmo gUtil.cmo
-THOBJS = gtkThread.cmo
-INITOBJS = gtkInit.cmo
-THINITOBJS = gtkThInit.cmo
-ALLOBJS = $(MLOBJS) $(GLMLOBJS) $(GNOMEMLOBJS) $(THOBJS) \
-       $(INITOBJS) $(THINITOBJS)
-
-lablgtktop: $(CLIBS) $(MLLIBS) $(INITOBJS)
-       $(TOPLEVEL) -o $@ $(MLLINK) -ccopt -L. $(MLLIBS) $(INITOBJS)
-
-lablgtktop_t: $(CLIBS) $(MLLIBS) $(THOBJS) $(INITOBJS) $(THINITOBJS)
-       $(TOPLEVEL) $(THFLAGS) -o $@ $(THLINK) $(MLLINK) \
-          -ccopt -L. $(MLLIBS) $(THOBJS) $(INITOBJS) $(THINITOBJS)
-
-lablgtk: Makefile config.make lablgtk.in
-       sed -e "s|@INSTALLDIR@|$(INSTALLDIR)|g" \
-           -e "s|@LABLGLDIR@|$(LABLGLDIR)|g" \
-           -e "s|@LIBDIR@|$(LIBDIR)|g" \
-           < lablgtk.in > $@
-       chmod 755 $@
-
-lablgtkrun: $(CLIBS) $(MLLIBS)
-       $(LINKER) -o $@ -make-runtime $(MLLINK) -ccopt -L. $(MLLIBS)
-
-lablgtkopt: $(CLIBS) $(MLLIBS:.cma=.cmxa) $(INITOBJS:.cmo=.cmx) \
-       $(THOBJS:.cmo=.cmx)
-
-install:
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       cp *.mli $(INSTALLDIR)
-       cp *.h $(INSTALLDIR)
-       cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR)
-       cp $(MLLIBS) $(THOBJS) $(INITOBJS) $(THINITOBJS) $(INSTALLDIR)
-       cp $(CLIBS) $(INSTALLDIR)
-       cp lablgtktop  lablgtktop_t $(INSTALLDIR)
-       cp lablgtk lablgtkrun $(BINDIR)
-       if test -f lablgtk.cmxa; then \
-          cp $(MLLIBS:.cma=.cmxa) $(MLLIBS:.cma=.a) \
-             $(INITOBJS:.cmo=.cmx) $(INITOBJS:.cmo=.o) $(INSTALLDIR); fi
-       if test -f gtkThread.cmx; then \
-          cp $(THOBJS:.cmo=.cmx) $(THOBJS:.cmo=.o) $(INSTALLDIR); fi
-
-liblablgtk.a: $(COBJS)
-       ar rc $@ $(COBJS)
-       $(RANLIB) $@
-lablgtk.cma: $(MLOBJS)
-       $(LINKER) -a -custom -o $@ $(MLOBJS) \
-         -cclib -llablgtk $(GTKLIBS)
-lablgtk.cmxa: $(MLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) \
-         -cclib -llablgtk $(GTKLIBS)
-
-liblablgtkgl.a: $(GLCOBJS)
-       ar rc $@ $(GLCOBJS)
-       $(RANLIB) $@
-lablgtkgl.cma: $(GLMLOBJS)
-       $(LINKER) -a -custom -o $@ $(GLLINK) $(GLMLOBJS)
-lablgtkgl.cmxa: $(GLMLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(GLLINK) $(GLMLOBJS:.cmo=.cmx)
-
-liblablgnome.a: $(GNOMECOBJS)
-       ar rc $@ $(GNOMECOBJS)
-       $(RANLIB) $@
-lablgnome.cma: $(GNOMEMLOBJS)
-       $(LINKER) -a -custom -o $@ $(GNOMEMLOBJS) \
-         -cclib -llablgnome $(GNOMELIBS)
-lablgnome.cmxa: $(GNOMEMLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(GNOMEMLOBJS:.cmo=.cmx) \
-         -cclib -llablgnome $(GNOMELIBS)
-
-gtkThread.cmo: gtkThread.ml
-       $(COMPILER) $(THFLAGS) gtkThread.ml
-
-gtkThread.cmx: gtkThread.ml
-       if test -f $(LIBDIR)/libthreadsnat.a; then \
-          $(COMPOPT) $(THFLAGS) gtkThread.ml; fi
-
-varcc: varcc.cmo
-       $(LINKER) -o $@ varcc.cmo
-       rm -f *_tags.h *_tags.c
-
-clean:
-       rm -f *.cm* *.o *.a *_tags.[ch] $(TARGETS)
-
-$(GTKOBJS): gtk_tags.h ml_gtk.h ml_gdk.h wrappers.h
-ml_gdk.o: gdk_tags.h ml_gdk.h wrappers.h
-ml_gtkgl.o: gtkgl_tags.h ml_gtk.h ml_gdk.h wrappers.h
-ml_gtkxmhtml.o: gtkxmhtml_tags.h ml_gtk.h ml_gdk.h wrappers.h
-
-include .depend
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile.nt b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/Makefile.nt
deleted file mode 100644 (file)
index bdf5b6c..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-# $Id$
-# Makefile for lablgtk.
-
-EXE = .exe
-TARGETS = var2conv var2def lablgtk$(EXE) lablgtk_t$(EXE) \
-       lablgtkrun$(EXE) config.make
-
-all: $(TARGETS)
-
-opt: lablgtkopt
-
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-
-TOPLEVEL = ocamlmktop $(MLFLAGS)
-### How to invoke the librarian
-MKLIB=lib /nologo /debugtype:CV /out:
-
-!include config.make.nt
-
-INSTALLDIR = $(LIBDIR:/=\)\lablgtk
-BINDIR = $(LIBDIR:/=\)\..\bin
-LABLGLDIR = $(LIBDIR)/lablGL
-
-CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS)
-LDFLAGS = $(GTKLIBS)
-
-THFLAGS = -thread
-THLIBS = unix.cma threads.cma
-
-!if $(USE_CC) == 1
-CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS)
-!else
-CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)"
-!endif
-
-!if $(USE_GL) == 1
-MLFLAGS = $(MLFLAGS) -I $(LIBDIR)/lablGL
-GLLINK = -I $(LABLGLDIR) lablgl.cma -cclib -lgtkgl
-GLMLOBJS = glGtk.cmo
-GLCOBJS = ml_gtkgl.o
-!endif
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .obj .var .h .opt .def
-.c.obj:
-       $(CCOMPILER) $<
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-.var.h:
-       ocamlrun ./var2def < $< > $@
-.var.c:
-       ocamlrun ./var2conv < $< > $@
-
-# Targets
-COBJS = ml_gtk.obj ml_gdk.obj ml_glib.obj wrappers.obj $(GLCOBJS)
-OLDMLOBJS = misc.cmo glib.cmo gdk.cmo gtk.cmo gdkObj.cmo gtkObj.cmo gtkExt.cmo
-MLOBJS = misc.cmo glib.cmo gdk.cmo gdkEvent.cmo gdkKeysyms.cmo \
-       gtk.cmo gtkArgv.cmo gtkSignal.cmo \
-       gtkData.cmo gtkBase.cmo gtkPack.cmo gtkButton.cmo \
-       gtkMenu.cmo gtkMisc.cmo gtkWindow.cmo gtkTree.cmo gtkList.cmo \
-       gtkFrame.cmo gtkEdit.cmo gtkRange.cmo gtkMain.cmo gtkNew.cmo \
-       gDraw.cmo \
-       gObj.cmo gMain.cmo gData.cmo gContainer.cmo gPack.cmo gButton.cmo \
-       gMenu.cmo gMisc.cmo gWindow.cmo gTree.cmo gList.cmo gFrame.cmo \
-       gEdit.cmo gRange.cmo gUtil.cmo $(GLMLOBJS)
-THOBJS = gtkThread.cmo threadObj.cmo
-INITOBJS = gtkInit.cmo
-THINITOBJS = gtkThInit.cmo
-ALLOBJS = $(MLOBJS) $(THOBJS) $(INITOBJS) $(THINITOBJS)
-
-lablgtk$(EXE): liblablgtk.lib lablgtk.cma $(INITOBJS)
-       $(TOPLEVEL) -custom -o $@ unix.cma str.cma $(GLLINK) \
-           lablgtk.cma $(INITOBJS)
-
-lablgtk_t$(EXE): liblablgtk.lib lablgtk.cma $(THOBJS) $(INITOBJS) $(THINITOBJS)
-       $(TOPLEVEL) -custom $(THFLAGS) -o $@ $(THLIBS) str.cma $(GLLINK) \
-           lablgtk.cma $(THOBJS) $(INITOBJS) $(THINITOBJS)
-
-lablgtkrun$(EXE): liblablgtk.lib lablgtk.cma
-       $(LINKER) -o $@ -make-runtime $(GLLINK) lablgtk.cma
-
-lablgtkopt: liblablgtk.lib lablgtk.cmxa gtkInit.cmx
-
-install:
-       if not exist $(INSTALLDIR) mkdir $(INSTALLDIR)
-       cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       cp *.mli $(INSTALLDIR)
-       cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR)
-       cp lablgtk.cma $(THOBJS) $(INITOBJS) $(THINITOBJS) $(INSTALLDIR)
-       cp liblablgtk.lib $(INSTALLDIR)
-       cp lablgtk$(EXE) lablgtk_t$(EXE) lablgtkrun$(EXE) $(BINDIR)
-       if exist lablgtk.cmxa cp lablgtk.cmxa lablgtk.lib gtkInit.cmx gtkInit.obj $(INSTALLDIR)
-
-liblablgtk.lib: $(COBJS)
-       $(MKLIB)$@ $(COBJS)
-
-lablgtk.cma: $(MLOBJS)
-       $(LINKER) -a -custom -o $@ $(MLOBJS) \
-         -cclib -llablgtk $(GTKLIBS)
-
-lablgtk.cmxa: $(MLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) \
-         -cclib -llablgtk $(GTKLIBS)
-
-gtkThread.cmo: gtkThread.ml
-       $(COMPILER) $(THFLAGS) gtkThread.ml
-
-threadObj.cmo: threadObj.ml
-       $(COMPILER) $(THFLAGS) threadObj.ml
-
-gtkThread.cmx: gtkThread.ml
-       $(COMPOPT) $(THFLAGS) gtkThread.ml
-
-threadObj.cmx: threadObj.ml
-       $(COMPOPT) $(THFLAGS) threadObj.ml
-
-var2conv: var2conv.cmo
-       $(LINKER) -o $@ var2conv.cmo
-       rm -f *_tags.c
-
-var2def: var2def.cmo
-       $(LINKER) -o $@ var2def.cmo
-       rm -f *_tags.h
-
-clean:
-       rm -f *.cm* *.obj *.lib *_tags.[ch] $(TARGETS)
-
-config.make: config.make.nt
-       cp config.make.nt config.make
-
-depend .depend:
-       ocamldep *.ml *.mli > .depend
-
-ml_gtk.obj: gtk_tags.c gtk_tags.h ml_gtk.h ml_gdk.h wrappers.h
-ml_gdk.obj: gdk_tags.c gdk_tags.h ml_gdk.h wrappers.h
-ml_gtkgl.obj: gtkgl_tags.c gtkgl_tags.h ml_gtk.h ml_gdk.h wrappers.h
-
-!include .depend
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/README b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/README
deleted file mode 100644 (file)
index 78c4ed3..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-
-               LablGTK : an interface to the GIMP Tool Kit
-
-
-Needed:
-       ocaml-3.00
-       gtk-1.2.x
-       gmake (there is no standard for conditionals)
-
-How to compile:
-
-       You should normally not need to modify Makefiles.
-       First type "make configure <options>".
-       Options are
-               USE_CC=1        to use $(CC) rather than gcc
-               USE_GL=1        to compile with OpenGL support (see lower)
-               USE_GNOME=1     to compile GtkXmHTML support (requires gnome)
-
-       Then just type "make" to build the library and toplevels.
-
-       On FreeBSD, you need to link with libxpg4.so for Japanese
-       output.
-
-Contents:
-
-       gdk.ml          low-level interface to the General Drawing Kit
-       gtk.ml          low-level interface to the GIMP Tool Kit
-       gtkThread.ml    main loop for threaded version
-       g[A-Z]*.ml      object-oriented interface to GTK
-       gdkObj.ml       object-oriented interface to GDK
-
-       lablgtk         toplevel
-
-       examples/*.ml   various examples
-       applications/*  applications using the library
-               radtest         a very experimental RAD for lablgtk
-                               (by Hubert Fauque)
-               browser         the begin of a port of OCamlBrowser
-                               (by Jacques Garrigue)
-                unison          a frontend for the Unison file synchronizer
-                                see the README for details.
-
-Upgrading from lablgtk-1.00:
-  There are a few incompatibilities between this version and the
-  previous release. We do not describe them all, since usually a type
-  error message will inform you.
-  * all signals are no longer under #connect. #connect#event changed
-    to #event#connect, and some signals are under #misc#connect or
-    #grab#connect. See lower for a description of the new widget
-    structure.
-  * some defaults changed. In particular GPack.box#pack have now all
-    its parameter defaulting to false rather than true. See lower for
-    the new default policy. Beware that this does not cause type
-    errors, just changes in the aspect.
-
-How to run the examples:
-  In the examples directory just type:
-       lablgtk -labels examples/???.ml
-
-  Before installing lablgtk you have to be more explicit:
-       ../lablgtktop -labels -w s -I .. ???.ml
-
-How to link them:
-  lablgtktop contains an extra module GtkInit, whose only contents is:
-        let locale = GtkMain.Main.init ()
-  You must either add this line, or add this module to your link,
-  before calling any Gtk function.
-  ocamlc -I CAMLLIB/lablgtk -labels -w s lablgtk.cma gtkInit.cmo ???.ml -o ???
-
-How to use the threaded toplevel:
-
-       % lablgtk -thread           (or lablgtktop_t before installing)
-               Objective Caml version 3.00
-       
-       # let w = GWindow.window ~show:true ();;
-
-  You should at once see a window appear.
-  The GTK main loop is running in a separate thread. Any command
-  is immediately reflected by the system.
-  Beware that you cannot switch threads within a callback, that is the
-  only thread related command you may use in a callback is
-  Thread.create. On the other hand, all newly created threads will be
-  run directly by the caml main loop, so they can use all thread
-  operations.
-
-Structure of the (raw) Gtk* modules:
-
-  These modules are composed of one submodule for each class.
-  Signals specific to a widget are in a Signals inner module.
-  A setter function is defined to give access to set_param functions.
-
-Structure of the G[A-Z]* modules:
-
-  These modules provide classes to wrap the raw function calls.
-  Here are the widget classes contained in each module:
-
-  GDraw         Gdk pixmaps, etc...
-  GObj         gtkobj, widget, style
-  GData                data, adjustment, tooltips
-  GContainer   container, item_container
-  GWindow      window, dialog, color_selection_dialog, file_selection, plug
-  GPack                box, button_box, table, fixed, layout, packer, paned, notebook
-  GBin         scrolled_window, event_box, handle_box, frame,
-               aspect_frame, viewport, socket
-  GButton      button, toggle_button, check_button, radio_button, toolbar
-  GMenu                menu_item, tearoff_item, check_menu_item, radio_menu_item,
-               menu_shell, menu, option_menu, menu_bar, factory
-  GMisc                separator, statusbar, calendar, drawing_area,
-               misc, arrow, image, pixmap, label, tips_query,
-                color_selection, font_selection
-  GTree                tree_item, tree
-  GList                list_item, liste, clist
-  GEdit                editable, entry, spin_button, combo, text
-  GRange       progress, progress_bar, range, scale, scrollbar
-
-  While subtyping follows the Gtk widget hierarchy, you cannot always
-  use width subtyping (i.e. #super is not unifiable with all the
-  subclasses of super). Still, it works for some classes, like
-  #widget and #container, and allows subtyping without coercion towards
-  these classes (cf. #container in pousse.ml for instance).
-
-  Practically, each widget class is composed of:
-  * a coerce method, returning the object coerced to the type widget.
-  * an as_widget method, returning the raw Gtk widget used for packing, etc...
-  * a connect sub-object, allowing one to widget specific
-    signals (this is what prevents width subtyping in subclasses.)
-  * a misc sub-object, giving access to miscellanous functionality of
-    the basic gtkwidget class, and a misc#connect sub-object.
-  * an event sub-object, for Xevent related functions (only if the widget
-    has an Xwindow), and an event#connect sub-object.
-  * a grab sub-object, containing drag and drop functions,
-    and a grab#connect sub-object.
-  * widget specific methods.
-
-  Here is a diagram of the structure (- for methods, + for sub-objects)
-        - coerce : widget
-        - as_widget : Gtk.widget obj
-        - destroy : unit -> unit
-        - ...
-        + connect : mywidget_signals
-        |   - after
-        |   - signal_name : callback:(... -> ...) -> GtkSignal.id
-        + misc : misc_ops
-        |   - show, hide, disconnect, ...
-        |   + connect : misc_signals
-        + event : event_ops
-        |   - add, ...
-        |   + connect : event_signals
-        + grab : grab_ops
-        |   - ...
-        |   + connect : grab_signals
-
-  You create a widget by [<Module>.<widget name> options ... ()].
-  Many optional arguments are admitted. The last two of them, packing:
-  and show:, allow you respectively to call a function on your newly
-  created widget, and to decide wether to show it immediately or not.
-  By default all widgets except toplevel windows (GWindow module) are
-  shown immediately.
-
-Default arguments:
-  For many constructor or method arguments, default values are provided.
-  Generally, this default value is defined by GTK, and you must refer
-  to GTK's documentation.
-  For ML defined defaults, usually default values are either false, 0, None
-  or `NONE, according to the expected type.
-  Important exceptions are ~show, which default to true in all widgets
-  except those in GWindow, and ~fill, which defaults to true or `BOTH.
-
-Note about unit as method argument:
-
-  O'Caml introduces no distinction between methods having side-effects
-  and methods simply returning a value. In practice, this is
-  confusing, and awkward when used as callbacks. For this reason all
-  methods having noticeable side-effects should take arguments, and
-  unit if they have no argument.
-
-Memory management:
-
-  Important efforts have been dedicated to cooperate with Gtk's
-  reference counting mechanism. As a result you should generally be
-  able to use Gdk/Gtk data structures without caring about memory
-  management. They will be freed when nobody points to them any more.
-  This also means that you do not need to pay too much attention to
-  whether a data structure is still alive or not. If it is not, you
-  should get an error rather than a core dump.
-  The case of Gtk objects deserves special care. Since they are
-  interactive, we cannot just destroy them when they are no longer
-  referenced. They have to be explicitely destroyed. If a widget was
-  added to a container widget, it will automatically be destroyed when
-  its last container is destroyed. For this reason you need only
-  destroy toplevel widgets.
-
-GL extension
-
-  You can use lablgtk in combination with LablGL
-
-  * get and install lablGL 0.94 from
-    http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgl.html
-  * get and install gtkglarea-1.2.x.tar.gz from
-    http://www.student.oulu.fi/~jlof/gtkglarea/index.html
-  * reconfigure: "make configure USE_GL=1"
-
-  You can then use the widget GlGtk.gl_area as an OpenGL window.
-  Some examples are in examples/GL, but basically any LablGL example
-  can be easily ported.
-
-Windows port
-
-  A Win32 port is provided. In order to compile it, you will need to
-  get and unpack glib-dev-????.zip and gtk+-dev-????.zip from
-        http://www.gimp.org/~tml/gimp/win32/
-  Do not forget to get also extralibs-dev-????.zip, since you will
-  need some of the DLLs.
-
-  Edit config.make.nt, then, using Visual C++,
-        nmake -f Makefile.nt
-        nmake -f Makefile.nt opt        (if you have an MS Assembler)
-  Then install with
-        nmake -f Makefile.nt install
-
-  Since the link is dynamic you will also need to have in your path:
-  gnu-intl.dll (extralibs), glib-1.3.dll, module-1.3.dll and
-  gthread-1.3.dll (glib), gdk-1.3.dll and gtk-1.3.dll (gtk+).
-
-  I checked with the 2000-02-02 version of these libraries.
-  Currently threads do not seem to work, but otherwise everything
-  seems OK. In particular, you can run all examples, and build
-  applications\unison as usual.
-
-Authors:
-       Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
-       Hubert Fauque  <hubert.fauque@wanadoo.fr>
-       Jun Furuse     <Jun.Furuse@inria.fr>
-       Koji Kagawa    <kagawa@eng.kagawa-u.ac.jp>
-                                  
-Bug reports:
-       Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
-
-$Id$
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/.cvsignore b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/.cvsignore
deleted file mode 100644 (file)
index bc09d74..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-olabl-src
-browser
-.depend
\ No newline at end of file
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/Makefile b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/Makefile
deleted file mode 100644 (file)
index 8822e47..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# $Id$
-# Makefile for lablgtk.
-
-all: browser
-
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-COMPILER = $(CAMLC) $(MLFLAGS) -labels -w s -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -labels -w s -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-
-RANLIB = ranlib
-
-include ../../config.make
-
-MLFLAGS = -I ../.. -I ocaml-src/utils -I ocaml-src/parsing
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-
-# Targets
-MLOBJS = text.cmo file.cmo lexical.cmo shell.cmo editor.cmo
-
-browser: $(MLOBJS)
-       $(LINKER) -o $@ toplevellib.cma str.cma unix.cma \
-           lablgtk.cma $(MLOBJS) 
-
-clean:
-       rm -f *.cm* browser
-
-.depend:
-       ocamldep *.ml *.mli > .depend
-
-include .depend
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/README b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/README
deleted file mode 100644 (file)
index f2ed1ec..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-       Browser: the beginning of a port of the OCamlBrowser
-
-Installation:
-
-* make a link from a directory where the O'Caml distribution is
-  compiled to ocaml-src
-       ln -s /path/to/ocaml-3.00 ocaml-src
-  (actually only the directory parsing needs to be compiled)
-
-* just type "make"
-
-Use:
-
-When you run browser, you just get a customized editor with lexical
-coloring. Nothing very fancy.
-In the file menu you can open a shell, running olabl as subprocess.
-
-Jacques Garrigue
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/TODO b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/TODO
deleted file mode 100644 (file)
index 0c8bb53..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-* lexical coloring (done)
-* hyperlinks (call signal with position)
-* keyboard popup
-* protection
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/editor.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/editor.ml
deleted file mode 100644 (file)
index d4adbfb..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-class editor ?packing ?show () =
-  let text = GEdit.text ~editable:true ?packing ?show () in
-object (self)
-  inherit GObj.widget text#as_widget
-
-  val mutable filename = None
-
-  method text = text
-
-  method load_file name =
-    try
-      let ic = open_in name in
-      filename <- Some name;
-      text#freeze ();
-      text#delete_text ~start:0 ~stop:text#length;
-      let buf = String.create 1024 and len = ref 0 in
-      while len := input ic ~buf ~pos:0 ~len:1024; !len > 0 do
-       if !len = 1024 then text#insert buf
-       else text#insert (String.sub buf ~pos:0 ~len:!len)
-      done;
-      text#set_point 0;
-      text#thaw ();
-      close_in ic
-    with _ -> ()
-
-  method open_file () = File.dialog ~title:"Open" ~callback:self#load_file ()
-
-  method save_file () =
-    File.dialog ~title:"Save" ?filename () ~callback:
-      begin fun name ->
-       try
-         if Sys.file_exists name then Sys.rename ~src:name ~dst:(name ^ "~");
-         let oc = open_out name in
-         output_string oc (text#get_chars ~start:0 ~stop:text#length);
-         close_out oc
-       with _ -> prerr_endline "Save failed"
-      end
-end
-
-open GdkKeysyms
-
-class editor_window ?(show=false) () =
-  let window = GWindow.window ~width:500 ~height:300
-      ~title:"Program Editor" () in
-  let vbox = GPack.vbox ~packing:window#add () in
-
-  let menubar = GMenu.menu_bar ~packing:vbox#pack () in
-  let factory = new GMenu.factory menubar in
-  let accel_group = factory#accel_group
-  and file_menu = factory#add_submenu "File"
-  and edit_menu = factory#add_submenu "Edit"
-  and comp_menu = factory#add_submenu "Compiler" in
-
-  let hbox = GPack.hbox ~packing:vbox#add () in
-  let scrollbar =
-    GRange.scrollbar `VERTICAL ~packing:(hbox#pack ~from:`END) ()
-  and editor = new editor ~packing:hbox#add () in
-object (self)
-  inherit GObj.widget window#as_widget
-
-  method window = window
-  method editor = editor
-  method show = window#show
-
-  initializer
-    window#connect#destroy ~callback:Main.quit;
-    let factory = new GMenu.factory file_menu ~accel_group in
-    factory#add_item "Open..." ~key:_O ~callback:editor#open_file;
-    factory#add_item "Save..." ~key:_S ~callback:editor#save_file;
-    factory#add_item "Shell"
-      ~callback:(fun () -> Shell.f ~prog:"ocaml" ~title:"Objective Caml Shell");
-    factory#add_separator ();
-    factory#add_item "Quit" ~key:_Q ~callback:window#destroy;
-    let factory = new GMenu.factory edit_menu ~accel_group in
-    factory#add_item "Copy" ~key:_C ~callback:editor#text#copy_clipboard;
-    factory#add_item "Cut" ~key:_X ~callback:editor#text#cut_clipboard;
-    factory#add_item "Paste" ~key:_V ~callback:editor#text#paste_clipboard;
-    factory#add_separator ();
-    factory#add_check_item "Word wrap" ~active:false
-      ~callback:editor#text#set_word_wrap;
-    factory#add_check_item "Read only" ~active:false
-      ~callback:(fun b -> editor#text#set_editable (not b));
-    let factory = new GMenu.factory comp_menu ~accel_group in
-    factory#add_item "Lex" ~key:_L
-      ~callback:(fun () -> Lexical.tag editor#text);
-    window#add_accel_group accel_group;
-    editor#text#set_vadjustment scrollbar#adjustment;
-    if show then self#show ()
-end
-
-let _ =
-  Main.init ();
-  if Array.length Sys.argv >= 2 && Sys.argv.(1) = "-shell" then
-    Shell.f ~prog:"ocaml" ~title:"Objective Caml Shell"
-  else
-    ignore (new editor_window ~show:true ());
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/file.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/file.ml
deleted file mode 100644 (file)
index e9c0cf3..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-(* $Id$ *)
-
-let dialog ~title ~callback ?filename () =
-  let sel =
-    GWindow.file_selection ~title ~modal:true ?filename () in
-  sel#cancel_button#connect#clicked ~callback:sel#destroy;
-  sel#ok_button#connect#clicked ~callback:
-    begin fun () ->
-      let name = sel#get_filename in
-      sel#destroy ();
-      callback name
-    end;
-  sel#show ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/lexical.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/lexical.ml
deleted file mode 100644 (file)
index 9acb9c0..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-(* $Id$ *)
-
-open Parser
-
-type tags = [`none|`control|`define|`structure|`char|`infix|`label|`uident]
-
-let colors : (tags * GDraw.color) list Lazy.t =
-  lazy
-    (List.map ~f:(fun (tag,col) -> tag, `COLOR (GDraw.color (`NAME col)))
-       [ `control, "blue";
-        `define, "forestgreen";
-        `structure, "purple";
-        `char, "gray40";
-        `infix, "indianred4";
-        `label, "brown";
-        `uident, "midnightblue";
-         `none, "black" ])
-
-let tag ?(start=0) ?stop:pend (tw : GEdit.text) =
-  let pend = Gaux.default tw#length ~opt:pend in
-  let colors = Lazy.force colors in
-  tw#freeze ();
-  let position = tw#position
-  and text = tw#get_chars ~start ~stop:pend in
-  let replace ~start:pstart ~stop:pend ~tag =
-    if pend > pstart then begin
-      tw#delete_text ~start:(start+pstart) ~stop:(start+pend);
-      tw#set_point (start+pstart);
-      tw#insert ~foreground:(List.assoc tag colors)
-       (String.sub text ~pos:pstart ~len:(pend-pstart));
-    end
-  and next_lf = ref (-1) in
-  let colorize ~start:rstart ~stop:rend ~tag =
-    let rstart = ref rstart in
-    while !rstart < rend do
-      if !next_lf < !rstart then begin
-       try next_lf := String.index_from text !rstart '\n'
-       with Not_found -> next_lf := pend-start
-      end;
-      replace ~start:!rstart ~stop:(min !next_lf rend) ~tag;
-      rstart := !next_lf + 1
-    done
-  in
-  let buffer = Lexing.from_string text
-  and last = ref (EOF, 0, 0)
-  and last_pos = ref 0 in
-  try
-    while true do
-    let token = Lexer.token buffer
-    and start = Lexing.lexeme_start buffer
-    and stop = Lexing.lexeme_end buffer in
-    let tag =
-      match token with
-        AMPERAMPER
-      | AMPERSAND
-      | BARBAR
-      | DO | DONE
-      | DOWNTO
-      | ELSE
-      | FOR
-      | IF
-      | LAZY
-      | MATCH
-      | OR
-      | THEN
-      | TO
-      | TRY
-      | WHEN
-      | WHILE
-      | WITH
-          -> `control
-      | AND
-      | AS
-      | BAR
-      | CLASS
-      | CONSTRAINT
-      | EXCEPTION
-      | EXTERNAL
-      | FUN
-      | FUNCTION
-      | FUNCTOR
-      | IN
-      | INHERIT
-      | INITIALIZER
-      | LET
-      | METHOD
-      | MODULE
-      | MUTABLE
-      | NEW
-      | OF
-      | PARSER
-      | PRIVATE
-      | REC
-      | TYPE
-      | VAL
-      | VIRTUAL
-          -> `define
-      | BEGIN
-      | END
-      | INCLUDE
-      | OBJECT
-      | OPEN
-      | SIG
-      | STRUCT
-          -> `structure
-      | CHAR _
-      | STRING _
-          -> `char
-      | BACKQUOTE
-      | INFIXOP1 _
-      | INFIXOP2 _
-      | INFIXOP3 _
-      | INFIXOP4 _
-      | PREFIXOP _
-      | QUESTION2
-      | SHARP
-          -> `infix
-      | LABEL _
-      | OPTLABEL _
-      | QUESTION
-      | TILDE
-          -> `label
-      | UIDENT _ -> `uident
-      | LIDENT _ ->
-          begin match !last with
-            (QUESTION | TILDE), _, _ -> `label
-          | _ -> `none
-          end
-      | COLON ->
-          begin match !last with
-            LIDENT _, lstart, lstop when lstop = start ->
-              colorize ~tag:`none ~start:!last_pos ~stop:lstart;
-              colorize ~tag:`label ~start:lstart ~stop;
-              last_pos := stop;
-              `none
-          | _ -> `none
-          end
-      | EOF -> raise End_of_file
-      | _ -> `none
-    in
-    if tag <> `none then begin
-      colorize ~tag:`none ~start:!last_pos ~stop:start;
-      colorize ~tag ~start ~stop;
-      last_pos := stop
-    end;
-    last := (token, start, stop)
-    done
-  with exn ->
-    colorize ~tag:`none ~start:!last_pos ~stop:(pend-start);
-    tw#thaw ();
-    tw#set_position position;
-    tw#set_point position;
-    match exn with
-      End_of_file | Lexer.Error _ -> ()
-    | _ -> raise exn
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/list2.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/list2.ml
deleted file mode 100644 (file)
index 0d7798a..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(* $Id$ *)
-
-let rec cut l ~len =
-  if len <= 0 then [], l else
-  match l with
-    a::l ->
-      let l1, l2 = cut l ~len:(len-1) in
-      a::l1, l2
-  | [] ->
-      invalid_arg "cut_list"
-
-let rec chop l ~len =
-  if l = [] then [] else
-  let l1, l2 =
-    try cut_list l ~len
-    with Invalid_argument _ -> l, []
-  in
-  l1 :: chop l2 ~len
-
-
-let rec iteri_aux ~f:f ~i = function
-    [] -> ()
-  | a::l -> f ~i a; iteri_aux ~f:f ~i:(i+1) l
-
-let iteri = iteri_aux ~i:0
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/shell.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/shell.ml
deleted file mode 100644 (file)
index fbe0f92..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-(* $Id$ *)
-
-open GdkKeysyms
-open Printf
-
-(* Nice history class. May reuse *)
-
-class ['a] history () = object
-  val mutable history = ([] : 'a list)
-  val mutable count = 0
-  method empty = history = []
-  method add s = count <- 0; history <- s :: history
-  method previous =
-    let s = List.nth history count in
-    count <- (count + 1) mod List.length history;
-    s
-  method next =
-    let l = List.length history in
-    count <- (l + count - 1) mod l;
-    List.nth history ((l + count - 1) mod l)
-end
-
-(* The shell class. Now encapsulated *)
-
-let protect f x = try f x with _ -> ()
-
-class shell ~prog ~args ~env ?packing ?show () =
-  let (in2,out1) = Unix.pipe ()
-  and (in1,out2) = Unix.pipe ()
-  and (err1,err2) = Unix.pipe () in
-  let _ = List.iter ~f:Unix.set_nonblock [out1;in1;err1] in
-object (self)
-  val textw = GEdit.text ~editable:true ?packing ?show ()
-  val pid = Unix.create_process_env
-      ~prog ~args ~env ~stdin:in2 ~stdout:out2 ~stderr:err2
-  val out = Unix.out_channel_of_descr out1
-  val h = new history ()
-  val mutable alive = true
-  val mutable reading = false
-  val mutable input_start = 0
-  method text = textw
-  method alive = alive
-  method kill () =
-    textw#set_editable false;
-    if alive then begin
-      alive <- false;
-      protect close_out out;
-      List.iter ~f:(protect Unix.close) [in1; err1; in2; out2; err2];
-      try
-       Unix.kill ~pid ~signal:Sys.sigkill;
-       Unix.waitpid pid ~mode:[]; ()
-      with _ -> ()
-    end
-  method interrupt () =
-    if alive then try
-      reading <- false;
-      Unix.kill ~pid ~signal:Sys.sigint
-    with Unix.Unix_error _ -> ()
-  method send s =
-    if alive then try
-      output_string out s;
-      flush out
-    with Sys_error _ -> ()
-  method private read ~fd ~len =
-    try
-      let buf = String.create len in
-      let len = Unix.read fd ~buf ~pos:0 ~len in
-      if len > 0 then begin
-       textw#set_position textw#length;
-       self#insert (String.sub buf ~pos:0 ~len);
-       input_start <- textw#position;
-      end;
-      len
-    with Unix.Unix_error _ -> 0
-  method history (dir : [`next|`previous]) =
-    if not h#empty then begin
-      if reading then begin
-       textw#delete_text ~start:input_start ~stop:textw#position;
-      end else begin
-       reading <- true;
-       input_start <- textw#position
-      end;
-      self#insert (if dir = `previous then h#previous else h#next);
-    end
-  val mutable lexing = false
-  method private lex ~start ~stop:e =
-    if not lexing && start < e then begin
-      lexing <- true;
-      Lexical.tag textw ~start ~stop:e;
-      lexing <- false
-    end
-  method insert ?(lex=true) text =
-    let start = Text.line_start textw in
-    textw#insert text;
-    if lex then self#lex ~start ~stop:(Text.line_end textw)
-  method private keypress c =
-    if not reading & c > " " then begin
-      reading <- true;
-      input_start <- textw#position
-    end
-  method private return () =
-    if reading then reading <- false
-    else input_start <- textw#position;
-    textw#set_position (Text.line_end textw);
-    let s = textw#get_chars ~start:input_start ~stop:textw#position in
-    h#add s;
-    self#send s;
-    self#send "\n"
-  method private paste () =
-    if not reading then begin
-      reading <- true;
-      input_start <- textw#position;
-    end
-  initializer
-    textw#event#connect#key_press ~callback:
-      begin fun ev ->
-       if GdkEvent.Key.keyval ev = _Return && GdkEvent.Key.state ev = []
-       then self#return ()
-       else self#keypress (GdkEvent.Key.string ev);
-        false
-      end;
-    textw#connect#after#insert_text ~callback:
-      begin fun s ~pos ->
-        if not lexing then
-          self#lex ~start:(Text.line_start textw ~pos:(pos - String.length s))
-            ~stop:(Text.line_end textw ~pos)
-      end;
-    textw#connect#after#delete_text ~callback:
-      begin fun ~start:pos ~stop ->
-        if not lexing then
-          self#lex ~start:(Text.line_start textw ~pos)
-            ~stop:(Text.line_end textw ~pos)
-      end;
-    textw#event#connect#button_press ~callback:
-      begin fun ev ->
-       if GdkEvent.Button.button ev = 2 then self#paste ();
-       false
-      end;
-    textw#connect#destroy ~callback:self#kill;
-    GMain.Timeout.add ~ms:100 ~callback:
-      begin fun () ->
-       if alive then begin
-         List.iter [err1;in1]
-           ~f:(fun fd -> while self#read ~fd ~len:1024 = 1024 do () done);
-         true
-       end else false
-      end;
-    ()
-end
-
-(* Specific use of shell, for LablBrowser *)
-
-let shells : (string * shell) list ref = ref []
-
-(* Called before exiting *)
-let kill_all () =
-  List.iter !shells ~f:(fun (_,sh) -> if sh#alive then sh#kill ());
-  shells := []
-let _ = at_exit kill_all
-
-let get_all () =
-  let all = List.filter !shells ~f:(fun (_,sh) -> sh#alive) in
-  shells := all;
-  all
-
-let may_exec prog =
-  try Unix.access prog ~perm:[Unix.X_OK]; true
-  with Unix.Unix_error _ -> false
-
-let f ~prog ~title =
-  let progargs =
-    List.filter ~f:((<>) "") (Str.split ~sep:(Str.regexp " ") prog) in
-  if progargs = [] then () else
-  let prog = List.hd progargs in
-  let path = try Sys.getenv "PATH" with Not_found -> "/bin:/usr/bin" in
-  let exec_path = Str.split ~sep:(Str.regexp":") path in
-  let prog =
-    if not (Filename.is_implicit prog) then
-      if may_exec prog then prog else ""
-    else
-      List.fold_left exec_path ~init:"" ~f:
-       begin fun acc dir ->
-         if acc <> "" then acc else
-         let prog = Filename.concat dir prog in
-         if may_exec prog then prog else acc
-       end
-  in
-  if prog = "" then () else
-  let reg = Str.regexp "TERM=" in
-  let env = Array.map (Unix.environment ()) ~f:
-      begin fun s ->
-       if Str.string_match ~pat:reg s ~pos:0 then "TERM=dumb" else s
-      end in
-  let load_path =
-    List.flatten (List.map !Config.load_path ~f:(fun dir -> ["-I"; dir])) in
-  let args = Array.of_list (progargs @ load_path) in
-  let current_dir = ref (Unix.getcwd ()) in
-
-  let tl = GWindow.window ~title ~width:500 ~height:300 () in
-  let vbox = GPack.vbox ~packing:tl#add () in
-  let menus = GMenu.menu_bar ~packing:vbox#pack () in
-  let f = new GMenu.factory menus in
-  let accel_group = f#accel_group in
-  let file_menu = f#add_submenu "File"
-  and history_menu = f#add_submenu "History"
-  and signal_menu = f#add_submenu "Signal" in
-
-  let hbox = GPack.hbox ~packing:vbox#add () in
-  let sh = new shell ~prog ~env ~args ~packing:hbox#add () in
-  let sb =
-    GRange.scrollbar `VERTICAL ~adjustment:sh#text#vadjustment
-      ~packing:hbox#pack ()
-  in
-
-  let f = new GMenu.factory file_menu ~accel_group in
-  f#add_item "Use..." ~callback:
-    begin fun () ->
-      File.dialog ~title:"Use File" ~filename:(!current_dir ^ "/") () ~callback:
-       begin fun name ->
-         current_dir := Filename.dirname name;
-         if Filename.check_suffix name ".ml" then
-           let cmd = "#use \"" ^ name ^ "\";;\n" in
-           sh#insert cmd;
-           sh#send cmd
-       end
-    end;
-  f#add_item "Load..." ~callback:
-    begin fun () ->
-      File.dialog ~title:"Load File" ~filename:(!current_dir ^ "/") () ~callback:
-       begin fun name ->
-         current_dir := Filename.dirname name;
-         if Filename.check_suffix name ".cmo" or
-           Filename.check_suffix name ".cma"
-         then
-           let cmd = Printf.sprintf "#load \"%s\";;\n" name in
-           sh#insert cmd;
-           sh#send cmd
-       end
-    end;
-  f#add_item "Import path" ~callback:
-    begin fun () ->
-      List.iter (List.rev !Config.load_path)
-       ~f:(fun dir -> sh#send (sprintf "#directory \"%s\";;\n" dir))
-    end;
-  f#add_item "Close" ~key:_W ~callback:tl#destroy;
-
-  let h = new GMenu.factory history_menu ~accel_group ~accel_modi:[`MOD1] in
-  h#add_item "Previous" ~key:_P ~callback:(fun () -> sh#history `previous);
-  h#add_item "Next" ~key:_N ~callback:(fun () -> sh#history `next);
-  let s = new GMenu.factory signal_menu ~accel_group in
-  s#add_item "Interrupt" ~key:_G ~callback:sh#interrupt;
-  s#add_item "Kill" ~callback:sh#kill;
-  shells := (title, sh) :: !shells;
-  tl#add_accel_group accel_group;
-  tl#show ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/text.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/text.ml
deleted file mode 100644 (file)
index 729f310..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-(* $Id$ *)
-
-open GEdit
-
-let line_start ?pos (text : GEdit.text) =
-  let pos = Gaux.default text#position ~opt:pos in
-  if pos = 0 then 0 else
-  let start = max 0 (pos-256) in
-  let buffer = text#get_chars ~start ~stop:pos in
-  try start + String.rindex buffer '\n' with Not_found -> 0
-
-let line_end ?pos (text : GEdit.text) =
-  let pos = Gaux.default text#position ~opt:pos in
-  if pos = text#length then text#length else
-  let buffer = text#get_chars ~start:pos ~stop:(min text#length (pos+256)) in
-  try pos + String.index buffer '\n' with Not_found -> text#length
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/useunix.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/useunix.ml
deleted file mode 100644 (file)
index c4860a8..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-(* $Id$ *)
-
-open Unix
-
-let get_files_in_directory dir =
-  try
-  let dirh = opendir dir in
-  let rec get_them () =
-    try
-      let x = readdir dirh in
-      x :: get_them ()
-    with
-      _ -> closedir dirh; [] 
-  in
-    Sort.list ~order:(<) (get_them ())
-  with Unix_error _ -> []
-
-let is_directory name =
-  try
-    (stat name).st_kind = S_DIR
-  with _ -> false
-
-let get_directories_in_files ~path =
-  List.filter ~pred:(fun x -> is_directory  (path ^ "/" ^ x))
-
-(************************************************** Subshell call *)
-let subshell ~cmd =
-  let rc = open_process_in ~cmd in
-  let rec it () =
-    try 
-      let x = input_line rc in x :: it ()
-    with _ -> []
-  in 
-  let answer = it () in
-  close_process_in rc;
-  answer
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/widgets.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/browser/widgets.ml
deleted file mode 100644 (file)
index c27ca9f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-(* $Id$ *)
-
-open GObj
-
-class multibox ~rows ~columns ?(row_view = rows) ?(col_view = columns)
-    ?packing ?show () =
-  let sw =
-    GBin.scrolled_window ~hpolicy:`AUTOMATIC ~vpolicy:`AUTOMATIC
-      ?show ?packing () in
-  let vp = GBin.viewport ~shadow_type:`NONE ~packing:sw#add in
-  let table =
-    GPack.table ~columns ~rows ~homogeneous:true ~packing:vp#add () in
-  let buttons =
-    Array.init ~len:columns
-      ~f:(fun left -> Array.init ~len:rows
-         ~f:(fun top -> GButton.button
-              ~packing:(table#attach ~top ~left ~expand:`BOTH)))
-  in
-  object (self)
-    inherit widget sw#as_widget
-    method cell ~col ~row = buttons.(col).(row)
-    initializer
-      let id = ref None in
-      id := Some
-         (sw#event#connect#expose ~after:true ~callback:
-            begin fun _ ->
-              may !id ~f:sw#connect#disconnect;
-              let height = table#misc#allocation.height * row_view / rows
-              and width = table#misc#allocation.width * col_view / columns in
-              vp#misc#set_size ~height ~width;
-              false
-            end);
-      table#focus#set_vadjustment vp#vadjustment
-  end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/.cvsignore b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/.cvsignore
deleted file mode 100644 (file)
index a2d75da..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-.depend radtest
-*_parser.ml *_parser.mli
-*_lexer.ml
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/CHANGES b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/CHANGES
deleted file mode 100644 (file)
index e87fc0a..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-$Id$
-
-2000.05.15
-  * suppressed treew.ml; replaced by ti*.ml
-  * new widgets
-  * less known bugs  (Hubert)
-1999.10.28
-  * re-objectified property.ml
-  * split it into common.mli/property.ml/propwin.ml
-  * undo is back
-  * restructure menu code in main.ml
-
-1999.10.27
-  * simplified property.ml, and corrected treew.ml accordingly.
-    undo is temporarily disabled.
-    (Jacques)
\ No newline at end of file
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/Makefile b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/Makefile
deleted file mode 100644 (file)
index 175eca9..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# $Id$
-# Makefile for lablgtk.
-
-all: radtest
-
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-COMPILER = $(CAMLC) $(MLFLAGS) -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-
-RANLIB = ranlib
-
-include ../../config.make
-
-MLFLAGS = -I ../.. -w s -labels
-
-ifdef DEBUG
-CFLAGS = -g $(GTKCFLAGS)
-MLFLAGS += -g
-else
-CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS)
-endif
-
-ifdef USE_CC
-CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS)
-else
-CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)"
-endif
-
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def
-.c.o:
-       $(CCOMPILER) $<
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-
-# Targets
-MLOBJS = utils.cmo property.cmo propwin.cmo \
-       load_parser.cmo load_lexer.cmo tiBase.cmo tiContainer.cmo tiBin.cmo \
-       tiButton.cmo tiEdit.cmo tiList.cmo tiMisc.cmo tiPack.cmo tiWindow.cmo \
-       tiWidget.cmo main.cmo
-
-MLSRC = common.mli utils.ml property.mli property.ml propwin.mli \
-       propwin.ml \
-       load_parser.ml load_lexer.ml tiBase.ml tiContainer.ml tiBin.ml \
-       tiButton.ml tiEdit.ml tiList.ml tiMisc.ml tiPack.ml tiWindow.ml \
-       tiWidget.ml main.ml
-
-radtest: $(MLOBJS)  libgtk2.a gtk2.cma
-       $(LINKER) -o $@ lablgtk.cma gtkInit.cmo -I . gtk2.cma \
-           $(MLOBJS)
-
-radtestopt: $(MLOBJS:.cmo=.cmx) libgtk2.a gtk2.cmxa
-       $(LINKOPT) -o $@ lablgtk.cmxa gtkInit.cmx -I . gtk2.cmxa \
-           $(MLOBJS:.cmo=.cmx)
-
-%.mli %.ml: %.mly
-       ocamlyacc $<
-
-%.ml: %.mll
-       ocamllex $<
-
-libgtk2.a: gtktree2.o gtktreeitem2.o ml_gtk2.o
-       ar rc $@ gtktree2.o gtktreeitem2.o ml_gtk2.o
-       $(RANLIB) $@
-
-gtk2.cma: gtkTree2.cmo gTree2.cmo gToolbar2.cmo libgtk2.a
-       $(LINKER) -a -o $@ gtkTree2.cmo gTree2.cmo gToolbar2.cmo -cclib -lgtk2
-
-gtk2.cmxa: gtkTree2.cmx gTree2.cmx gToolbar2.cmx libgtk2.a
-       $(LINKOPT) -a -o $@ gtkTree2.cmx gTree2.cmx gToolbar2.cmx -cclib -lgtk2
-
-clean:
-       rm -f *.cm* *.o *.a radtest *_parser.ml *_parser.mli *_lexer.ml
-
-.depend: $(MLSRC) load_parser.ml load_lexer.ml
-       ocamldep $(MLSRC) load_parser.ml* load_lexer.ml* > .depend
-
-include .depend
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/README b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/README
deleted file mode 100644 (file)
index aedd81f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-       Lablgtk RADTEST
-
-Author: Hubert Fauque, hubert.fauque@inria.fr
-
-This is an experimental R.A.D. for Lablgtk.
-You can compile it simply by make.
-
-
-When radtest starts a new empty project is open;
-you can add new windows to this project by clicking on
-the window icon at the top of the icons window;
-
-by clicking on an item in the tree window with the third button
-you can add or remove widgets;
-you can also drag widgets from the icons window and drop them
-on the tree;
-
-when a widget is selected (click on it in the tree) you can
-move it up or down (if its parent is a box) with CTRL-up_arrow
-or CTRL-down_arrow; with up_arrow and down_arrow you select
-the widget which is above or below the currently selected widget;
-
-Save the project by Project->Save, and load an already existing
-project by Project->Open.
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/aspectframe.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/aspectframe.xpm
deleted file mode 100644 (file)
index 66b9ca1..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *aspectframe_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++   + +++++++++++",
-"+...X X X   X......O+",
-"+.OOX   X X XOOOOO.O+",
-"+.OXX X X   XXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXX.XXXXXXX.O+",
-"+.OXXXXXX...XXXXXX.O+",
-"+.OXXXXX.X.X.XXXXX.O+",
-"+.OXXXXXXX.XXXXXXX.O+",
-"+.OXX.XXXX.XXXX.XX.O+",
-"+.OX.XXXXX.XXXXX.X.O+",
-"+.O................O+",
-"+.OX.XXXXX.XXXXX.X.O+",
-"+.OXX.XXXX.XXXX.XX.O+",
-"+.OXXXXX.X.X.XXXXX.O+",
-"+.OXXXXXX...XXXXXX.O+",
-"+.OXXXXXXX.XXXXXXX.O+",
-"+..................O+",
-"+OOOOOOOOOOOOOOOOOOO+",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/button.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/button.xpm
deleted file mode 100644 (file)
index 62ebc30..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *button_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+OOOOOOOOOOOOOOOOOO +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXX   XXX XXX XX. +",
-"+OXX XXX XX XX XXX. +",
-"+OXX XXX XX X XXXX. +",
-"+OXX XXX XX  XXXXX. +",
-"+OXX XXX XX X XXXX. +",
-"+OXX XXX XX XX XXX. +",
-"+OXXX   XXX XXX XX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+O................. +",
-"+                   +",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/checkbutton.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/checkbutton.xpm
deleted file mode 100644 (file)
index 314ba97..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *checkbutton_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++OOOOOOOOOOO+++++",
-"+++++OXXXXXXXXX +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OXXXXXXXX. +++++",
-"+++++OX........ +++++",
-"+++++O          +++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/clist.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/clist.xpm
deleted file mode 100644 (file)
index 2dd61e7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* XPM */
-static char *clist_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 3 1",
-"  c Gray0",
-". c Gray87",
-"X c Gray100",
-/* pixels */
-"                     ",
-" ...... ...... ..... ",
-" ...... ...... ..... ",
-" ...... ...... ..... ",
-"                     ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-"                     ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-"                     ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-"                     ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-" XXXXXX XXXXXX XXXXX ",
-"                     "
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/colorselection.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/colorselection.xpm
deleted file mode 100644 (file)
index 0bb0914..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/* XPM */
-static char *colorselection_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 8 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c Blue",
-"o c Green",
-"O c Red",
-"+ c #b3cece",
-"@ c Gray100",
-"# c None",
-/* pixels */
-"#####################",
-"#####################",
-"#####################",
-"#####################",
-"#####################",
-"##................###",
-"##.@@@@@@@@@@@@@@. ##",
-"##.@@@@@@@@@@@@@@. ##",
-"##.@@@@@@@@@@@@@@. ##",
-"##.@@OOOoooXXX@@@. ##",
-"##.@@OOOoooXXX@@@. ##",
-"##.@@OOOoooXXX@@@. ##",
-"##.@@OOOoooXXX@@@. ##",
-"##.@@@@@@@@@@@@@@. ##",
-"##.@@@@@@@@@@@@@@. ##",
-"##.@@@@@@@@@@@@@@. ##",
-"##................ ##",
-"###                ##",
-"#####################",
-"#####################",
-"#####################"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/combo.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/combo.xpm
deleted file mode 100644 (file)
index 3b4055b..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* XPM */
-static char *combo_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 7 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray87",
-"+ c Gray100",
-"@ c None",
-/* pixels */
-"@@@@@@@@@@@@@@@@@@@@@",
-"                     ",
-" +++++++++++++ OOOOO ",
-" +++++++++++++  OOO  ",
-" +++++++++++++   O   ",
-"                     ",
-" +++++++++++++ ++++++",
-" +++++++++++++ XXXXX ",
-" +.........+++ XX XX ",
-" +++++++++++++ X   X ",
-" +++++++++++++ XXXXX ",
-" +...........+       ",
-" +++++++++++++ +++++ ",
-" +++++++++++++ +XXXX ",
-" +..........++ ..... ",
-" +++++++++++++ +++++ ",
-" +++++++++++++ XXXXX ",
-" +...........+ X   X ",
-" +++++++++++++ XX XX ",
-" +++++++++++++ XXXXX ",
-"                     "
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/common.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/common.mli
deleted file mode 100644 (file)
index 7050f9f..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-(* $Id$ *)
-
-type range =
-  |  String
-  | Int
-  | Float of float * float
-  | Enum of string list
-  | Enum_string of string list
-  | Adjust
-  | CList_titles
-  | File
-
-class type prop =
-  object
-    method name : string       (* name of the property *)
-    method range : range       (* range of its values *)
-    method get : string                (* current value *)
-    method set : string -> unit        (* change value *)
-    method modified : bool     (* value differs from default *)
-    method code : string       (* encoded value for the ml code *)
-    method save_code : string   (* encoded value for saving *)
-  end
-
-class type tiwidget_base = object
-  method name : string
-  method proplist : (string * prop) list
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/entry.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/entry.xpm
deleted file mode 100644 (file)
index cb90041..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *entry_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"....................O",
-".                  XO",
-". OOOOOOOOOOOOOOOOOXO",
-". OOOOOOOOOOOOOOO OXO",
-". OOOOOOOO OOOOOO OXO",
-". OOOOOOOO OOOOOO OXO",
-". OOO   OO X  OOO OXO",
-". OO XOX O  O. OO OXO",
-". OOOOOO O OOO OO OXO",
-". OOO    O OOO OO OXO",
-". OO XOO O OOO OO OXO",
-". OO XOO O OO. OO OXO",
-". OOO    O    OOO OXO",
-". OOOOOOOOOOOOOOO OXO",
-". OOOOOOOOOOOOOOOOOXO",
-".XXXXXXXXXXXXXXXXXXXO",
-"OOOOOOOOOOOOOOOOOOOOO",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/eventbox.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/eventbox.xpm
deleted file mode 100644 (file)
index 73da445..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* XPM */
-static char *eventbox_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 7 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c Blue",
-"o c #d6d6d6",
-"O c #b3cece",
-"+ c Gray100",
-"@ c None",
-/* pixels */
-"@@@@@@@@@@X+@@@@@@@@@",
-"@@@@@@@@@XX+@@@@@@@@@",
-"@@@@@@@@XX+@@@@@@@@@@",
-"@@@@@@@XX+@@@@@@@@@@@",
-"@@@@@@@@XX+@@@@@@@@@@",
-"@@@@@@@@@XX+@@@@@@@@@",
-"@@@@@@@@@@XX+@@@@@@@@",
-"@@@++++++XX++++++ @@@",
-"@@@+ooooXX+ooooo. @@@",
-"@@@+oooXX+oooooo. @@@",
-"@@@+ooooXX+ooooo. @@@",
-"@@@+oooooXX+oooo. @@@",
-"@@@+ooooooXX+ooo. @@@",
-"@@@+oooooooooooo. @@@",
-"@@@+oooooooooooo. @@@",
-"@@@+oooooooooooo. @@@",
-"@@@+............. @@@",
-"@@@               @@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/fixed.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/fixed.xpm
deleted file mode 100644 (file)
index 2e04815..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* XPM */
-static char *fixed_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 4 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c Gray100",
-/* pixels */
-"oooooooooooooooooooo ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXooooo XXXXXXXXXXX. ",
-"oXoXXX. XXXXXXXXXXX. ",
-"oXoXXX. XXXXooooo X. ",
-"oXo.... XXXXoXXX. X. ",
-"oX      XXXXoXXX. X. ",
-"oXXXXXXXXXXXo.... X. ",
-"oXXXXXXXXXXX      X. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXooooo XXXXXXXX. ",
-"oXXXXoXXX. XXXXXXXX. ",
-"oXXXXoXXX. XXXXXXXX. ",
-"oXXXXo.... XXXXXXXX. ",
-"oXXXX      XXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"o................... ",
-"                     "
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/frame.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/frame.xpm
deleted file mode 100644 (file)
index c8c8b57..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *frame_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++   + +++++++++++",
-"+...X X X   X......O+",
-"+.OOX   X X XOOOOO.O+",
-"+.OXX X X   XXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+.OXXXXXXXXXXXXXXX.O+",
-"+..................O+",
-"+OOOOOOOOOOOOOOOOOOO+",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gToolbar2.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gToolbar2.ml
deleted file mode 100644 (file)
index c2ad0a8..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkButton
-open GObj
-open GContainer
-open GButton
-
-module Toolbar2 = struct
-  external set_text : [>`toolbar] obj -> string -> int -> unit =
-    "ml_gtk_toolbar2_set_text"
-  external set_icon : [>`toolbar] obj -> [>`widget] obj -> int -> unit =
-    "ml_gtk_toolbar2_set_icon"
-end
-
-class toolbar2 obj = object
-  inherit container_full (obj : Gtk.toolbar obj)
-  method insert_widget ?tooltip ?tooltip_private ?pos w =
-    Toolbar.insert_widget obj (as_widget w) ?tooltip ?tooltip_private ?pos
-
-  method insert_button ?text ?tooltip ?tooltip_private ?icon
-      ?pos ?callback () =
-    let icon = may_map icon ~f:as_widget in
-    new button
-      (Toolbar.insert_button obj ~kind:`BUTTON ?icon ?text
-        ?tooltip ?tooltip_private ?pos ?callback ())
-
-  method insert_toggle_button ?text ?tooltip ?tooltip_private ?icon
-      ?pos ?callback () =
-    let icon = may_map icon ~f:as_widget in
-    new toggle_button
-      (ToggleButton.cast
-        (Toolbar.insert_button obj ~kind:`TOGGLEBUTTON ?icon ?text
-           ?tooltip ?tooltip_private ?pos ?callback ()))
-
-  method insert_radio_button ?text ?tooltip ?tooltip_private ?icon
-      ?pos ?callback () =
-    let icon = may_map icon ~f:as_widget in
-    new radio_button
-      (RadioButton.cast
-        (Toolbar.insert_button obj ~kind:`RADIOBUTTON ?icon ?text
-           ?tooltip ?tooltip_private ?pos ?callback ()))
-
-  method insert_space = Toolbar.insert_space obj
-
-  method set_orientation = Toolbar.set_orientation obj
-  method set_style = Toolbar.set_style obj
-  method set_space_size = Toolbar.set_space_size obj
-  method set_space_style = Toolbar.set_space_style obj
-  method set_tooltips = Toolbar.set_tooltips obj
-  method set_button_relief = Toolbar.set_button_relief obj
-  method button_relief = Toolbar.get_button_relief obj
-  method set_text = Toolbar2.set_text obj
-  method set_icon (icon : widget) = Toolbar2.set_icon obj icon#as_widget
-end
-
-let toolbar2 ?(orientation=`HORIZONTAL) ?style
-    ?space_size ?space_style ?tooltips ?button_relief
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Toolbar.create orientation ?style () in
-  Toolbar.set w ?space_size ?space_style ?tooltips ?button_relief;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new toolbar2 w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gTree2.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gTree2.ml
deleted file mode 100644 (file)
index 62c38ac..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkTree2
-open GObj
-open GContainer
-
-class tree_item_signals obj = object
-  inherit item_signals obj
-  method expand = GtkSignal.connect obj ~sgn:TreeItem.Signals.expand ~after
-  method collapse = GtkSignal.connect obj ~sgn:TreeItem.Signals.collapse ~after
-end
-
-class tree_item obj = object
-  inherit container obj
-  method event = new GObj.event_ops obj
-  method as_item : Gtk.tree_item obj = obj
-  method connect = new tree_item_signals obj
-  method set_subtree (w : tree) = TreeItem.set_subtree obj w#as_tree
-  method remove_subtree () = TreeItem.remove_subtree obj
-  method expand () = TreeItem.expand obj
-  method collapse () = TreeItem.collapse obj
-  method subtree =
-    try Some(new tree (TreeItem.subtree obj)) with Gpointer.Null -> None
-end
-
-and tree_signals obj = object
-  inherit container_signals obj
-  method selection_changed =
-    GtkSignal.connect obj ~sgn:Tree.Signals.selection_changed ~after
-  method select_child ~callback =
-    GtkSignal.connect obj ~sgn:Tree.Signals.select_child ~after
-      ~callback:(fun w -> callback (new tree_item (TreeItem.cast w))) 
-  method unselect_child ~callback =
-    GtkSignal.connect obj ~sgn:Tree.Signals.unselect_child ~after
-      ~callback:(fun w -> callback (new tree_item (TreeItem.cast w))) 
-end
-
-and tree obj = object (self)
-  inherit [tree_item] item_container obj
-  method event = new GObj.event_ops obj
-  method as_tree = Tree.coerce obj
-  method insert w ~pos = Tree.insert obj w#as_item ~pos
-  method connect = new tree_signals obj
-  method clear_items = Tree.clear_items obj
-  method select_item = Tree.select_item obj
-  method unselect_item = Tree.unselect_item obj
-  method child_position (w : tree_item) = Tree.child_position obj w#as_item
-  method remove_items items =
-    Tree.remove_items obj
-      (List.map ~f:(fun (t : tree_item) -> t#as_item) items)
-(*  method set_selection_mode = Tree.set_selection_mode obj
-  method set_view_mode = Tree.set_view_mode obj *)
-  method set_view_lines = Tree.set_view_lines obj
-  method selection =
-    List.map ~f:(fun w -> self#wrap (Widget.coerce w)) (Tree.selection obj)
-  method item_up ~pos =
-    Tree.item_up obj pos
-  method private wrap w =
-    new tree_item (TreeItem.cast w)
-end
-
-let tree_item ?label ?border_width ?width ?height ?packing ?show () =
-  let w = TreeItem.create ?label () in
-  Container.set w ?border_width ?width ?height;
-  let self = new tree_item w in
-  may packing ~f:(fun f -> (f self : unit));
-  if show <> Some false then self#misc#show ();
-  self
-
-let tree ?selection_mode ?view_mode ?view_lines
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Tree.create () in
-  Tree.set w ?selection_mode ?view_mode ?view_lines;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new tree w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gTree2.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gTree2.mli
deleted file mode 100644 (file)
index c288e15..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class tree_item_signals : 'a obj ->
-  object
-    inherit item_signals
-    constraint 'a = [>`treeitem|`container|`item|`widget]
-    val obj : 'a obj
-    method collapse : callback:(unit -> unit) -> GtkSignal.id
-    method expand : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class tree_item : Gtk.tree_item obj ->
-  object
-    inherit GContainer.container
-    val obj : Gtk.tree_item obj
-    method event : event_ops
-    method as_item : Gtk.tree_item obj
-    method collapse : unit -> unit
-    method connect : tree_item_signals
-    method expand : unit -> unit
-    method remove_subtree : unit -> unit
-    method set_subtree : tree -> unit
-    method subtree : tree option
-  end
-
-and tree_signals : Gtk.tree obj ->
-  object
-    inherit container_signals
-    val obj : Gtk.tree obj
-    method select_child : callback:(tree_item -> unit) -> GtkSignal.id
-    method selection_changed : callback:(unit -> unit) -> GtkSignal.id
-    method unselect_child : callback:(tree_item -> unit) -> GtkSignal.id
-  end
-
-and tree : Gtk.tree obj ->
-  object
-    inherit [tree_item] item_container
-    val obj : Gtk.tree obj
-    method event : event_ops
-    method as_tree : Gtk.tree obj
-    method child_position : tree_item -> int
-    method clear_items : start:int -> stop:int -> unit
-    method connect : tree_signals
-    method insert : tree_item -> pos:int -> unit
-    method item_up : pos:int -> unit
-    method remove_items : tree_item list -> unit
-    method select_item : pos:int -> unit
-    method selection : tree_item list
-(*    method set_selection_mode : Tags.selection_mode -> unit *)
-    method set_view_lines : bool -> unit
-(*    method set_view_mode : [`LINE|`ITEM] -> unit *)
-    method unselect_item : pos:int -> unit
-    method private wrap : Gtk.widget obj -> tree_item
-  end
-
-val tree_item :
-  ?label:string ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(tree_item -> unit) -> ?show:bool -> unit -> tree_item
-
-val tree :
-  ?selection_mode:Tags.selection_mode ->
-  ?view_mode:[`LINE|`ITEM] ->
-  ?view_lines:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int -> ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> tree
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtkTree2.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtkTree2.ml
deleted file mode 100644 (file)
index 46d1e02..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module TreeItem = struct
-  let cast w : tree_item obj =
-    if Object.is_a w "GtkTreeItem" then Obj.magic w
-    else invalid_arg "Gtk.TreeItem.cast"
-  external create : unit -> tree_item obj = "ml_gtk_tree_item2_new"
-  external create_with_label : string -> tree_item obj
-      = "ml_gtk_tree_item2_new_with_label"
-  let create ?label () =
-    match label with None -> create ()
-    | Some label -> create_with_label label
-  external set_subtree : [>`treeitem] obj -> [>`widget] obj -> unit
-      = "ml_gtk_tree_item2_set_subtree"
-  external remove_subtree : [>`treeitem] obj -> unit
-      = "ml_gtk_tree_item2_remove_subtree"
-  external expand : [>`treeitem] obj -> unit
-      = "ml_gtk_tree_item2_expand"
-  external collapse : [>`treeitem] obj -> unit
-      = "ml_gtk_tree_item2_collapse"
-  external subtree : [>`treeitem] obj -> tree obj
-      = "ml_GTK_TREE_ITEM2_SUBTREE"
-  let subtree t = try subtree t with Gpointer.Null -> raise Not_found
-  module Signals = struct
-    open GtkSignal
-    let expand : ([>`treeitem],_) t =
-      { name = "expand"; marshaller = marshal_unit }
-    let collapse : ([>`treeitem],_) t =
-      { name = "collapse"; marshaller = marshal_unit }
-  end
-end
-
-module Tree = struct
-  let cast w : tree obj =
-    if Object.is_a w "GtkTree" then Obj.magic w
-    else invalid_arg "Gtk.Tree.cast"
-  external coerce : [>`tree] obj -> tree obj = "%identity"
-  external create : unit -> tree obj = "ml_gtk_tree2_new"
-  external insert : [>`tree] obj -> [>`treeitem] obj -> pos:int -> unit
-      = "ml_gtk_tree2_insert"
-  external remove_items : [>`tree] obj -> [>`treeitem] obj list -> unit
-      = "ml_gtk_tree2_remove_items"
-  external clear_items : [>`tree] obj -> start:int -> stop:int -> unit
-      = "ml_gtk_tree2_clear_items"
-  external select_item : [>`tree] obj -> pos:int -> unit
-      = "ml_gtk_tree2_select_item"
-  external unselect_item : [>`tree] obj -> pos:int -> unit
-      = "ml_gtk_tree2_unselect_item"
-  external child_position : [>`tree] obj -> [>`treeitem] obj -> int
-      = "ml_gtk_tree2_child_position"
-(*  external set_selection_mode : [>`tree] obj -> selection_mode -> unit
-      = "ml_gtk_tree2_set_selection_mode"
-  external set_view_mode : [>`tree] obj -> [`LINE|`ITEM] -> unit
-      = "ml_gtk_tree2_set_view_mode"
-*)
-  external set_view_lines : [>`tree] obj -> bool -> unit
-      = "ml_gtk_tree2_set_view_lines"
-  external selection : [>`tree] obj -> tree_item obj list =
-    "ml_gtk_tree2_selection"
-  external item_up : [>`tree] obj -> int -> unit =
-    "ml_gtk_tree2_item_up"
-
-  let set ?selection_mode ?view_mode ?view_lines w =
-    let may_set f = may ~f:(f w) in
-(*    may_set set_selection_mode selection_mode;
-    may_set set_view_mode view_mode; *)
-    may_set set_view_lines view_lines
-  module Signals = struct
-    open GtkSignal
-    let selection_changed : ([>`tree],_) t =
-      { name = "selection_changed"; marshaller = marshal_unit }
-    let select_child : ([>`tree],_) t =
-      { name = "select_child"; marshaller = Widget.Signals.marshal }
-    let unselect_child : ([>`tree],_) t =
-      { name = "unselect_child"; marshaller = Widget.Signals.marshal }
-  end
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtktree2.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtktree2.c
deleted file mode 100644 (file)
index db37a1f..0000000
+++ /dev/null
@@ -1,1385 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "gtktree2.h"
-#include "gtktreeitem2.h"
-
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtklist.h>
-
-enum {
-  SELECTION_CHANGED,
-  SELECT_CHILD,
-  UNSELECT_CHILD,
-  LAST_SIGNAL
-};
-
-static void gtk_tree2_class_init      (GtkTree2Class   *klass);
-static void gtk_tree2_init            (GtkTree2        *tree);
-static void gtk_tree2_destroy         (GtkObject      *object);
-static void gtk_tree2_map             (GtkWidget      *widget);
-static void gtk_tree2_unmap           (GtkWidget      *widget);
-static void gtk_tree2_realize         (GtkWidget      *widget);
-static void gtk_tree2_draw            (GtkWidget      *widget,
-                                     GdkRectangle   *area);
-static gint gtk_tree2_expose          (GtkWidget      *widget,
-                                     GdkEventExpose *event);
-static gint gtk_tree2_motion_notify   (GtkWidget      *widget,
-                                     GdkEventMotion *event);
-static gint gtk_tree2_button_press    (GtkWidget      *widget,
-                                     GdkEventButton *event);
-static gint gtk_tree2_button_release  (GtkWidget      *widget,
-                                     GdkEventButton *event);
-static void gtk_tree2_size_request    (GtkWidget      *widget,
-                                     GtkRequisition *requisition);
-static void gtk_tree2_size_allocate   (GtkWidget      *widget,
-                                     GtkAllocation  *allocation);
-static void gtk_tree2_add             (GtkContainer   *container,
-                                     GtkWidget      *widget);
-static void gtk_tree2_forall          (GtkContainer   *container,
-                                     gboolean        include_internals,
-                                     GtkCallback     callback,
-                                     gpointer        callback_data);
-
-static void gtk_real_tree2_select_child   (GtkTree2       *tree,
-                                         GtkWidget     *child);
-static void gtk_real_tree2_unselect_child (GtkTree2       *tree,
-                                         GtkWidget     *child);
-
-static GtkType gtk_tree2_child_type  (GtkContainer   *container);
-
-static GtkContainerClass *parent_class = NULL;
-static guint tree_signals[LAST_SIGNAL] = { 0 };
-
-GtkType
-gtk_tree2_get_type (void)
-{
-  static GtkType tree_type = 0;
-  
-  if (!tree_type)
-    {
-      static const GtkTypeInfo tree_info =
-      {
-       "GtkTree2",
-       sizeof (GtkTree2),
-       sizeof (GtkTree2Class),
-       (GtkClassInitFunc) gtk_tree2_class_init,
-       (GtkObjectInitFunc) gtk_tree2_init,
-       /* reserved_1 */ NULL,
-        /* reserved_2 */ NULL,
-        (GtkClassInitFunc) NULL,
-      };
-      
-      tree_type = gtk_type_unique (gtk_container_get_type (), &tree_info);
-    }
-  
-  return tree_type;
-}
-
-static void
-gtk_tree2_class_init (GtkTree2Class *class)
-{
-  GtkObjectClass *object_class;
-  GtkWidgetClass *widget_class;
-  GtkContainerClass *container_class;
-  
-  object_class = (GtkObjectClass*) class;
-  widget_class = (GtkWidgetClass*) class;
-  container_class = (GtkContainerClass*) class;
-  
-  parent_class = gtk_type_class (gtk_container_get_type ());
-  
-  tree_signals[SELECTION_CHANGED] =
-    gtk_signal_new ("selection_changed",
-                   GTK_RUN_FIRST,
-                   object_class->type,
-                   GTK_SIGNAL_OFFSET (GtkTree2Class, selection_changed),
-                   gtk_marshal_NONE__NONE,
-                   GTK_TYPE_NONE, 0);
-  tree_signals[SELECT_CHILD] =
-    gtk_signal_new ("select_child",
-                   GTK_RUN_FIRST,
-                   object_class->type,
-                   GTK_SIGNAL_OFFSET (GtkTree2Class, select_child),
-                   gtk_marshal_NONE__POINTER,
-                   GTK_TYPE_NONE, 1,
-                   GTK_TYPE_WIDGET);
-  tree_signals[UNSELECT_CHILD] =
-    gtk_signal_new ("unselect_child",
-                   GTK_RUN_FIRST,
-                   object_class->type,
-                   GTK_SIGNAL_OFFSET (GtkTree2Class, unselect_child),
-                   gtk_marshal_NONE__POINTER,
-                   GTK_TYPE_NONE, 1,
-                   GTK_TYPE_WIDGET);
-  
-  gtk_object_class_add_signals (object_class, tree_signals, LAST_SIGNAL);
-  
-  object_class->destroy = gtk_tree2_destroy;
-  
-  widget_class->map = gtk_tree2_map;
-  widget_class->unmap = gtk_tree2_unmap;
-  widget_class->realize = gtk_tree2_realize;
-  widget_class->draw = gtk_tree2_draw;
-  widget_class->expose_event = gtk_tree2_expose;
-  widget_class->motion_notify_event = gtk_tree2_motion_notify;
-  widget_class->button_press_event = gtk_tree2_button_press;
-  widget_class->button_release_event = gtk_tree2_button_release;
-  widget_class->size_request = gtk_tree2_size_request;
-  widget_class->size_allocate = gtk_tree2_size_allocate;
-  
-  container_class->add = gtk_tree2_add;
-  container_class->remove = 
-    (void (*)(GtkContainer *, GtkWidget *)) gtk_tree2_remove_item;
-  container_class->forall = gtk_tree2_forall;
-  container_class->child_type = gtk_tree2_child_type;
-  
-  class->selection_changed = NULL;
-  class->select_child = gtk_real_tree2_select_child;
-  class->unselect_child = gtk_real_tree2_unselect_child;
-}
-
-static GtkType
-gtk_tree2_child_type (GtkContainer     *container)
-{
-  return GTK_TYPE_TREE_ITEM2;
-}
-
-static void
-gtk_tree2_init (GtkTree2 *tree)
-{
-  tree->children = NULL;
-  tree->root_tree = NULL;
-  tree->selection = NULL;
-  tree->tree_owner = NULL;
-  tree->selection_mode = GTK_SELECTION_SINGLE;
-  tree->indent_value = 9;
-  tree->current_indent = 0;
-  tree->level = 0;
-  tree->view_mode = GTK_TREE2_VIEW_LINE;
-  tree->view_line = 1;
-}
-
-GtkWidget*
-gtk_tree2_new (void)
-{
-  return GTK_WIDGET (gtk_type_new (gtk_tree2_get_type ()));
-}
-
-void
-gtk_tree2_append (GtkTree2   *tree,
-                GtkWidget *tree_item)
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  gtk_tree2_insert (tree, tree_item, -1);
-}
-
-void
-gtk_tree2_prepend (GtkTree2   *tree,
-                 GtkWidget *tree_item)
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  gtk_tree2_insert (tree, tree_item, 0);
-}
-
-void
-gtk_tree2_insert (GtkTree2   *tree,
-                GtkWidget *tree_item,
-                gint       position)
-{
-  gint nchildren;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  nchildren = g_list_length (tree->children);
-  
-  if ((position < 0) || (position > nchildren))
-    position = nchildren;
-  
-  if (position == nchildren)
-    tree->children = g_list_append (tree->children, tree_item);
-  else
-    tree->children = g_list_insert (tree->children, tree_item, position);
-  
-  gtk_widget_set_parent (tree_item, GTK_WIDGET (tree));
-  
-  if (GTK_WIDGET_REALIZED (tree_item->parent))
-    gtk_widget_realize (tree_item);
-
-  if (GTK_WIDGET_VISIBLE (tree_item->parent) && GTK_WIDGET_VISIBLE (tree_item))
-    {
-      if (GTK_WIDGET_MAPPED (tree_item->parent))
-       gtk_widget_map (tree_item);
-
-      gtk_widget_queue_resize (tree_item);
-    }
-}
-
-/* moves the pos child up in the tree */
-void
-gtk_tree2_item_up (GtkTree2   *tree,
-                gint       position)
-{
-  gint nchildren, i;
-  GList *children, *tmp;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  children = (tree->children);
-  nchildren = g_list_length (tree->children);
-  
-  if ((position < 1) || (position >= nchildren))
-    return;
-  
-  for (i=1; i < position; i++)
-    children = (children->next);
-
-  tmp = children->next;
-  if (position == 1)
-    {
-      tree->children = children->next;
-      children->next->prev = NULL;
-    }
-  else
-    {
-      children->prev->next = children->next;
-      children->next->prev = children->prev;
-    }
-  children->next = tmp->next;
-  children->prev = tmp;
-  if (tmp->next)
-      tmp->next->prev = children;
-  tmp->next = children;
-  
-  if (GTK_WIDGET_VISIBLE (tree))
-    {
-/*      if (GTK_WIDGET_VISIBLE (GTK_WIDGET(children->data)))
-       gtk_widget_queue_resize (GTK_WIDGET(children->data));
-      if (GTK_WIDGET_VISIBLE (GTK_WIDGET(tmp->data)))
-       gtk_widget_queue_resize (GTK_WIDGET(tmp->data));
-*/
-      gtk_widget_queue_resize (GTK_WIDGET(tree));
-    }
-}
-
-static void
-gtk_tree2_add (GtkContainer *container,
-             GtkWidget    *child)
-{
-  GtkTree2 *tree;
-  
-  g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (container));
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (child));
-  
-  tree = GTK_TREE2 (container);
-  
-  tree->children = g_list_append (tree->children, child);
-  
-  gtk_widget_set_parent (child, GTK_WIDGET (container));
-  
-  if (GTK_WIDGET_REALIZED (child->parent))
-    gtk_widget_realize (child);
-
-  if (GTK_WIDGET_VISIBLE (child->parent) && GTK_WIDGET_VISIBLE (child))
-    {
-      if (GTK_WIDGET_MAPPED (child->parent))
-       gtk_widget_map (child);
-
-      gtk_widget_queue_resize (child);
-    }
-  
-  if (!tree->selection && (tree->selection_mode == GTK_SELECTION_BROWSE))
-    gtk_tree2_select_child (tree, child);
-}
-
-static gint
-gtk_tree2_button_press (GtkWidget      *widget,
-                      GdkEventButton *event)
-{
-  GtkTree2 *tree;
-  GtkWidget *item;
-  
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-  
-  tree = GTK_TREE2 (widget);
-  item = gtk_get_event_widget ((GdkEvent*) event);
-  
-  while (item && !GTK_IS_TREE_ITEM2 (item))
-    item = item->parent;
-  
-  if (!item || (item->parent != widget))
-    return FALSE;
-  
-  switch(event->button) 
-    {
-    case 1:
-      gtk_tree2_select_child (tree, item);
-      break;
-    case 2:
-      if(GTK_TREE_ITEM2(item)->subtree) gtk_tree_item2_expand(GTK_TREE_ITEM2(item));
-      break;
-    case 3:
-      if(GTK_TREE_ITEM2(item)->subtree) gtk_tree_item2_collapse(GTK_TREE_ITEM2(item));
-      break;
-    }
-  
-  return TRUE;
-}
-
-static gint
-gtk_tree2_button_release (GtkWidget      *widget,
-                        GdkEventButton *event)
-{
-  GtkTree2 *tree;
-  GtkWidget *item;
-  
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-  
-  tree = GTK_TREE2 (widget);
-  item = gtk_get_event_widget ((GdkEvent*) event);
-  
-  return TRUE;
-}
-
-gint
-gtk_tree2_child_position (GtkTree2   *tree,
-                        GtkWidget *child)
-{
-  GList *children;
-  gint pos;
-  
-  
-  g_return_val_if_fail (tree != NULL, -1);
-  g_return_val_if_fail (GTK_IS_TREE2 (tree), -1);
-  g_return_val_if_fail (child != NULL, -1);
-  
-  pos = 0;
-  children = tree->children;
-  
-  while (children)
-    {
-      if (child == GTK_WIDGET (children->data)) 
-       return pos;
-      
-      pos += 1;
-      children = children->next;
-    }
-  
-  
-  return -1;
-}
-
-void
-gtk_tree2_clear_items (GtkTree2 *tree,
-                     gint     start,
-                     gint     end)
-{
-  GtkWidget *widget;
-  GList *clear_list;
-  GList *tmp_list;
-  guint nchildren;
-  guint index;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  nchildren = g_list_length (tree->children);
-  
-  if (nchildren > 0)
-    {
-      if ((end < 0) || (end > nchildren))
-       end = nchildren;
-      
-      if (start >= end)
-       return;
-      
-      tmp_list = g_list_nth (tree->children, start);
-      clear_list = NULL;
-      index = start;
-      while (tmp_list && index <= end)
-       {
-         widget = tmp_list->data;
-         tmp_list = tmp_list->next;
-         index++;
-         
-         clear_list = g_list_prepend (clear_list, widget);
-       }
-      
-      gtk_tree2_remove_items (tree, clear_list);
-    }
-}
-
-static void
-gtk_tree2_destroy (GtkObject *object)
-{
-  GtkTree2 *tree;
-  GtkWidget *child;
-  GList *children;
-  
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (object));
-  
-  tree = GTK_TREE2 (object);
-  
-  children = tree->children;
-  while (children)
-    {
-      child = children->data;
-      children = children->next;
-      
-      gtk_widget_ref (child);
-      gtk_widget_unparent (child);
-      gtk_widget_destroy (child);
-      gtk_widget_unref (child);
-    }
-  
-  g_list_free (tree->children);
-  tree->children = NULL;
-  
-  if (tree->root_tree == tree)
-    {
-      GList *node;
-      for (node = tree->selection; node; node = node->next)
-       gtk_widget_unref ((GtkWidget *)node->data);
-      g_list_free (tree->selection);
-      tree->selection = NULL;
-    }
-  
-  if (GTK_OBJECT_CLASS (parent_class)->destroy)
-    (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-static void
-gtk_tree2_draw (GtkWidget    *widget,
-              GdkRectangle *area)
-{
-  GtkTree2 *tree;
-  GtkWidget *subtree;
-  GtkWidget *child;
-  GdkRectangle child_area;
-  GList *children;
-  
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (widget));
-  g_return_if_fail (area != NULL);
-  
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      tree = GTK_TREE2 (widget);
-      
-      children = tree->children;
-      while (children)
-       {
-         child = children->data;
-         children = children->next;
-         
-         if (gtk_widget_intersect (child, area, &child_area))
-           gtk_widget_draw (child, &child_area);
-         
-         if((subtree = GTK_TREE_ITEM2(child)->subtree) &&
-            GTK_WIDGET_VISIBLE(subtree) &&
-            gtk_widget_intersect (subtree, area, &child_area))
-           gtk_widget_draw (subtree, &child_area);
-       }
-    }
-  
-}
-
-static gint
-gtk_tree2_expose (GtkWidget      *widget,
-                GdkEventExpose *event)
-{
-  GtkTree2 *tree;
-  GtkWidget *child;
-  GdkEventExpose child_event;
-  GList *children;
-  
-  
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-  
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      tree = GTK_TREE2 (widget);
-      
-      child_event = *event;
-      
-      children = tree->children;
-      while (children)
-       {
-         child = children->data;
-         children = children->next;
-         
-         if (GTK_WIDGET_NO_WINDOW (child) &&
-             gtk_widget_intersect (child, &event->area, &child_event.area))
-           gtk_widget_event (child, (GdkEvent*) &child_event);
-       }
-    }
-  
-  
-  return FALSE;
-}
-
-static void
-gtk_tree2_forall (GtkContainer *container,
-                gboolean      include_internals,
-                GtkCallback   callback,
-                gpointer      callback_data)
-{
-  GtkTree2 *tree;
-  GtkWidget *child;
-  GList *children;
-  
-  
-  g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (container));
-  g_return_if_fail (callback != NULL);
-  
-  tree = GTK_TREE2 (container);
-  children = tree->children;
-  
-  while (children)
-    {
-      child = children->data;
-      children = children->next;
-
-      (* callback) (child, callback_data);
-
-      if (include_internals && GTK_TREE_ITEM2(child)->subtree)
-      (* callback) (GTK_TREE_ITEM2(child)->subtree, callback_data);
-    }
-}
-
-static void
-gtk_tree2_map (GtkWidget *widget)
-{
-  GtkTree2 *tree;
-  GtkWidget *child;
-  GList *children;
-  
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (widget));
-  
-  GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
-  tree = GTK_TREE2 (widget);
-  
-  if(GTK_IS_TREE2(widget->parent)) 
-    {
-      /* set root tree for this tree */
-      tree->root_tree = GTK_TREE2(widget->parent)->root_tree;
-      
-      tree->level = GTK_TREE2(GTK_WIDGET(tree)->parent)->level+1;
-      tree->indent_value = GTK_TREE2(GTK_WIDGET(tree)->parent)->indent_value;
-      tree->current_indent = GTK_TREE2(GTK_WIDGET(tree)->parent)->current_indent + 
-       tree->indent_value;
-      tree->view_mode = GTK_TREE2(GTK_WIDGET(tree)->parent)->view_mode;
-      tree->view_line = GTK_TREE2(GTK_WIDGET(tree)->parent)->view_line;
-    } 
-  else
-    tree->root_tree = tree;
-  
-  children = tree->children;
-  while (children)
-    {
-      child = children->data;
-      children = children->next;
-      
-      if (GTK_WIDGET_VISIBLE (child) &&
-         !GTK_WIDGET_MAPPED (child))
-       gtk_widget_map (child);
-      
-      if (GTK_TREE_ITEM2 (child)->subtree)
-       {
-         child = GTK_WIDGET (GTK_TREE_ITEM2 (child)->subtree);
-         
-         if (GTK_WIDGET_VISIBLE (child) && !GTK_WIDGET_MAPPED (child))
-           gtk_widget_map (child);
-       }
-    }
-
-  gdk_window_show (widget->window);
-}
-
-static gint
-gtk_tree2_motion_notify (GtkWidget      *widget,
-                       GdkEventMotion *event)
-{
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-  
-#ifdef TREE_DEBUG
-  g_message("gtk_tree2_motion_notify\n");
-#endif /* TREE_DEBUG */
-  
-  return FALSE;
-}
-
-static void
-gtk_tree2_realize (GtkWidget *widget)
-{
-  GdkWindowAttr attributes;
-  gint attributes_mask;
-  
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (widget));
-  
-  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
-  
-  attributes.window_type = GDK_WINDOW_CHILD;
-  attributes.x = widget->allocation.x;
-  attributes.y = widget->allocation.y;
-  attributes.width = widget->allocation.width;
-  attributes.height = widget->allocation.height;
-  attributes.wclass = GDK_INPUT_OUTPUT;
-  attributes.visual = gtk_widget_get_visual (widget);
-  attributes.colormap = gtk_widget_get_colormap (widget);
-  attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK;
-  
-  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-  
-  widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask);
-  gdk_window_set_user_data (widget->window, widget);
-  
-  widget->style = gtk_style_attach (widget->style, widget->window);
-  gdk_window_set_background (widget->window, 
-                            &widget->style->base[GTK_STATE_NORMAL]);
-}
-
-void
-gtk_tree2_remove_item (GtkTree2      *container,
-                     GtkWidget    *widget)
-{
-  GList *item_list;
-  
-  g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (container));
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (container == GTK_TREE2 (widget->parent));
-  
-  item_list = g_list_append (NULL, widget);
-  
-  gtk_tree2_remove_items (GTK_TREE2 (container), item_list);
-  
-  g_list_free (item_list);
-}
-
-/* used by gtk_tree2_remove_items to make the function independant of
-   order in list of items to remove.
-   Sort item bu depth in tree */
-static gint 
-gtk_tree2_sort_item_by_depth(GtkWidget* a, GtkWidget* b)
-{
-  if((GTK_TREE2(a->parent)->level) < (GTK_TREE2(b->parent)->level))
-    return 1;
-  if((GTK_TREE2(a->parent)->level) > (GTK_TREE2(b->parent)->level))
-    return -1;
-  
-  return 0;
-}
-
-void
-gtk_tree2_remove_items (GtkTree2 *tree,
-                      GList   *items)
-{
-  GtkWidget *widget;
-  GList *selected_widgets;
-  GList *tmp_list;
-  GList *sorted_list;
-  GtkTree2 *real_tree;
-  GtkTree2 *root_tree;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-#ifdef TREE_DEBUG
-  g_message("+ gtk_tree2_remove_items [ tree %#x items list %#x ]\n", (int)tree, (int)items);
-#endif /* TREE_DEBUG */
-  
-  /* We may not yet be mapped, so we actively have to find our
-   * root tree
-   */
-  if (tree->root_tree)
-    root_tree = tree->root_tree;
-  else
-    {
-      GtkWidget *tmp = GTK_WIDGET (tree);
-      while (tmp->parent && GTK_IS_TREE2 (tmp->parent))
-       tmp = tmp->parent;
-      
-      root_tree = GTK_TREE2 (tmp);
-    }
-  
-  tmp_list = items;
-  selected_widgets = NULL;
-  sorted_list = NULL;
-  widget = NULL;
-  
-#ifdef TREE_DEBUG
-  g_message("* sort list by depth\n");
-#endif /* TREE_DEBUG */
-  
-  while (tmp_list)
-    {
-      
-#ifdef TREE_DEBUG
-      g_message ("* item [%#x] depth [%d]\n", 
-                (int)tmp_list->data,
-                (int)GTK_TREE2(GTK_WIDGET(tmp_list->data)->parent)->level);
-#endif /* TREE_DEBUG */
-      
-      sorted_list = g_list_insert_sorted(sorted_list,
-                                        tmp_list->data,
-                                        (GCompareFunc)gtk_tree2_sort_item_by_depth);
-      tmp_list = g_list_next(tmp_list);
-    }
-  
-#ifdef TREE_DEBUG
-  /* print sorted list */
-  g_message("* sorted list result\n");
-  tmp_list = sorted_list;
-  while(tmp_list)
-    {
-      g_message("* item [%#x] depth [%d]\n", 
-               (int)tmp_list->data,
-               (int)GTK_TREE2(GTK_WIDGET(tmp_list->data)->parent)->level);
-      tmp_list = g_list_next(tmp_list);
-    }
-#endif /* TREE_DEBUG */
-  
-#ifdef TREE_DEBUG
-  g_message("* scan sorted list\n");
-#endif /* TREE_DEBUG */
-  
-  tmp_list = sorted_list;
-  while (tmp_list)
-    {
-      widget = tmp_list->data;
-      tmp_list = tmp_list->next;
-      
-#ifdef TREE_DEBUG
-      g_message("* item [%#x] subtree [%#x]\n", 
-               (int)widget, (int)GTK_TREE_ITEM2_SUBTREE(widget));
-#endif /* TREE_DEBUG */
-      
-      /* get real owner of this widget */
-      real_tree = GTK_TREE2(widget->parent);
-#ifdef TREE_DEBUG
-      g_message("* subtree having this widget [%#x]\n", (int)real_tree);
-#endif /* TREE_DEBUG */
-      
-      
-      if (widget->state == GTK_STATE_SELECTED)
-       {
-         selected_widgets = g_list_prepend (selected_widgets, widget);
-#ifdef TREE_DEBUG
-         g_message("* selected widget - adding it in selected list [%#x]\n",
-                   (int)selected_widgets);
-#endif /* TREE_DEBUG */
-       }
-      
-      /* remove this item from its real parent */
-#ifdef TREE_DEBUG
-      g_message("* remove widget from its owner tree\n");
-#endif /* TREE_DEBUG */
-      real_tree->children = g_list_remove (real_tree->children, widget);
-      
-      /* remove subtree associate at this item if it exist */      
-      if(GTK_TREE_ITEM2(widget)->subtree) 
-       {
-#ifdef TREE_DEBUG
-         g_message("* remove subtree associate at this item [%#x]\n",
-                   (int) GTK_TREE_ITEM2(widget)->subtree);
-#endif /* TREE_DEBUG */
-         if (GTK_WIDGET_MAPPED (GTK_TREE_ITEM2(widget)->subtree))
-           gtk_widget_unmap (GTK_TREE_ITEM2(widget)->subtree);
-         
-         gtk_widget_unparent (GTK_TREE_ITEM2(widget)->subtree);
-         GTK_TREE_ITEM2(widget)->subtree = NULL;
-       }
-      
-      /* really remove widget for this item */
-#ifdef TREE_DEBUG
-      g_message("* unmap and unparent widget [%#x]\n", (int)widget);
-#endif /* TREE_DEBUG */
-      if (GTK_WIDGET_MAPPED (widget))
-       gtk_widget_unmap (widget);
-      
-      gtk_widget_unparent (widget);
-      
-      /* delete subtree if there is no children in it */
-/* HF supprime */
-/*       if(real_tree->children == NULL && 
-        real_tree != root_tree)
-       {
-*/
-#ifdef TREE_DEBUG
-         g_message("* owner tree don't have children ... destroy it\n");
-#endif /* TREE_DEBUG */
-/*
-         gtk_tree_item2_remove_subtree(GTK_TREE_ITEM2(real_tree->tree_owner));
-       }
-*/      
-#ifdef TREE_DEBUG
-      g_message("* next item in list\n");
-#endif /* TREE_DEBUG */
-    }
-  
-  if (selected_widgets)
-    {
-#ifdef TREE_DEBUG
-      g_message("* scan selected item list\n");
-#endif /* TREE_DEBUG */
-      tmp_list = selected_widgets;
-      while (tmp_list)
-       {
-         widget = tmp_list->data;
-         tmp_list = tmp_list->next;
-         
-#ifdef TREE_DEBUG
-         g_message("* widget [%#x] subtree [%#x]\n", 
-                   (int)widget, (int)GTK_TREE_ITEM2_SUBTREE(widget));
-#endif /* TREE_DEBUG */
-         
-         /* remove widget of selection */
-         root_tree->selection = g_list_remove (root_tree->selection, widget);
-         
-         /* unref it to authorize is destruction */
-         gtk_widget_unref (widget);
-       }
-      
-      /* emit only one selection_changed signal */
-      gtk_signal_emit (GTK_OBJECT (root_tree), 
-                      tree_signals[SELECTION_CHANGED]);
-    }
-  
-#ifdef TREE_DEBUG
-  g_message("* free selected_widgets list\n");
-#endif /* TREE_DEBUG */
-  g_list_free (selected_widgets);
-  g_list_free (sorted_list);
-  
-  if (root_tree->children && !root_tree->selection &&
-      (root_tree->selection_mode == GTK_SELECTION_BROWSE))
-    {
-#ifdef TREE_DEBUG
-      g_message("* BROWSE mode, select another item\n");
-#endif /* TREE_DEBUG */
-      widget = root_tree->children->data;
-      gtk_tree2_select_child (root_tree, widget);
-    }
-  
-  if (GTK_WIDGET_VISIBLE (root_tree))
-    {
-#ifdef TREE_DEBUG
-      g_message("* query queue resizing for root_tree\n");
-#endif /* TREE_DEBUG */      
-      gtk_widget_queue_resize (GTK_WIDGET (root_tree));
-    }
-}
-
-void
-gtk_tree2_select_child (GtkTree2   *tree,
-                      GtkWidget *tree_item)
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  gtk_signal_emit (GTK_OBJECT (tree), tree_signals[SELECT_CHILD], tree_item);
-}
-
-void
-gtk_tree2_select_next_child (GtkTree2   *tree,
-                      GtkWidget *tree_item, gboolean descend)
-{
-  GList *children;
-
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  if (descend && GTK_TREE2(GTK_TREE_ITEM2(tree_item)->subtree)->children)
-    {
-      gtk_signal_emit (GTK_OBJECT (GTK_TREE_ITEM2(tree_item)->subtree), tree_signals[SELECT_CHILD], GTK_TREE2(GTK_TREE_ITEM2(tree_item)->subtree)->children->data);
-      return;
-    }
-
-  children = tree->children;
-  while (children)
-    {
-      if (tree_item == GTK_WIDGET (children->data)) 
-       break;
-      
-      children = children->next;
-    }
-  if (!children) return;
-  
-  if (children->next)
-    gtk_signal_emit (GTK_OBJECT (tree), tree_signals[SELECT_CHILD], children->next->data);
-  else if (tree != tree->root_tree)
-    {
-      children = GTK_TREE2(GTK_WIDGET(tree)->parent)->children;
-       gtk_tree2_select_next_child (GTK_TREE2(GTK_WIDGET(tree)->parent), tree->tree_owner, FALSE);
-    }
-
-}
-
-/* we know that tree is not the roor_tree and that
-   tree_items always have subtrees */
-void
-gtk_tree2_select_prev_child (GtkTree2   *tree,
-                      GtkWidget *tree_item)
-{
-  GList *children;
-  GtkTreeItem2 *tree_item2;
-
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-
-  children = tree->children;
-  while (children)
-    {
-      if (tree_item == GTK_WIDGET (children->data)) 
-       break;
-      
-      children = children->next;
-    }
-  if (!children) return;
-  
-  if (children = children->prev)
-    {
-      tree_item2 = GTK_TREE_ITEM2(children->data);
-      while (GTK_TREE2(tree_item2->subtree)->children)
-       {
-         children = GTK_TREE2(tree_item2->subtree)->children;
-         while (children->next)
-           children = children->next;
-         tree_item2 = GTK_TREE_ITEM2(children->data);
-       }
-    gtk_signal_emit (GTK_OBJECT (GTK_WIDGET(tree_item2)->parent), tree_signals[SELECT_CHILD], tree_item2);
-    }
-  else
-    {
-      gtk_signal_emit (GTK_OBJECT (GTK_WIDGET(tree)->parent), tree_signals[SELECT_CHILD], tree->tree_owner);
-    }
-
-}
-
-void
-gtk_tree2_select_item (GtkTree2   *tree,
-                     gint       item)
-{
-  GList *tmp_list;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  tmp_list = g_list_nth (tree->children, item);
-  if (tmp_list)
-    gtk_tree2_select_child (tree, GTK_WIDGET (tmp_list->data));
-  
-}
-
-static void
-gtk_tree2_size_allocate (GtkWidget     *widget,
-                       GtkAllocation *allocation)
-{
-  GtkTree2 *tree;
-  GtkWidget *child, *subtree;
-  GtkAllocation child_allocation;
-  GList *children;
-  
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (widget));
-  g_return_if_fail (allocation != NULL);
-  
-  tree = GTK_TREE2 (widget);
-  
-  widget->allocation = *allocation;
-  if (GTK_WIDGET_REALIZED (widget))
-    gdk_window_move_resize (widget->window,
-                           allocation->x, allocation->y,
-                           allocation->width, allocation->height);
-  
-  if (tree->children)
-    {
-      child_allocation.x = GTK_CONTAINER (tree)->border_width;
-      child_allocation.y = GTK_CONTAINER (tree)->border_width;
-      child_allocation.width = MAX (1, (gint)allocation->width - child_allocation.x * 2);
-      
-      children = tree->children;
-      
-      while (children)
-       {
-         child = children->data;
-         children = children->next;
-         
-         if (GTK_WIDGET_VISIBLE (child))
-           {
-             GtkRequisition child_requisition;
-             gtk_widget_get_child_requisition (child, &child_requisition);
-             
-             child_allocation.height = child_requisition.height;
-             
-             gtk_widget_size_allocate (child, &child_allocation);
-             
-             child_allocation.y += child_allocation.height;
-             
-             if((subtree = GTK_TREE_ITEM2(child)->subtree))
-               if(GTK_WIDGET_VISIBLE (subtree))
-                 {
-                   child_allocation.height = subtree->requisition.height;
-                   gtk_widget_size_allocate (subtree, &child_allocation);
-                   child_allocation.y += child_allocation.height;
-                 }
-           }
-       }
-    }
-  
-}
-
-static void
-gtk_tree2_size_request (GtkWidget      *widget,
-                      GtkRequisition *requisition)
-{
-  GtkTree2 *tree;
-  GtkWidget *child, *subtree;
-  GList *children;
-  GtkRequisition child_requisition;
-  
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (widget));
-  g_return_if_fail (requisition != NULL);
-  
-  tree = GTK_TREE2 (widget);
-  requisition->width = 0;
-  requisition->height = 0;
-  
-  children = tree->children;
-  while (children)
-    {
-      child = children->data;
-      children = children->next;
-      
-      if (GTK_WIDGET_VISIBLE (child))
-       {
-         gtk_widget_size_request (child, &child_requisition);
-         
-         requisition->width = MAX (requisition->width, child_requisition.width);
-         requisition->height += child_requisition.height;
-         
-         if((subtree = GTK_TREE_ITEM2(child)->subtree) &&
-            GTK_WIDGET_VISIBLE (subtree))
-           {
-             gtk_widget_size_request (subtree, &child_requisition);
-             
-             requisition->width = MAX (requisition->width, 
-                                       child_requisition.width);
-             
-             requisition->height += child_requisition.height;
-           }
-       }
-    }
-  
-  requisition->width += GTK_CONTAINER (tree)->border_width * 2;
-  requisition->height += GTK_CONTAINER (tree)->border_width * 2;
-  
-  requisition->width = MAX (requisition->width, 1);
-  requisition->height = MAX (requisition->height, 1);
-  
-}
-
-static void
-gtk_tree2_unmap (GtkWidget *widget)
-{
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (widget));
-  
-  GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
-  gdk_window_hide (widget->window);
-  
-}
-
-void
-gtk_tree2_unselect_child (GtkTree2   *tree,
-                        GtkWidget *tree_item)
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  gtk_signal_emit (GTK_OBJECT (tree), tree_signals[UNSELECT_CHILD], tree_item);
-}
-
-void
-gtk_tree2_unselect_item (GtkTree2 *tree,
-                       gint     item)
-{
-  GList *tmp_list;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  tmp_list = g_list_nth (tree->children, item);
-  if (tmp_list)
-    gtk_tree2_unselect_child (tree, GTK_WIDGET (tmp_list->data));
-  
-}
-
-static void
-gtk_real_tree2_select_child (GtkTree2   *tree,
-                           GtkWidget *child)
-{
-  GList *selection, *root_selection;
-  GList *tmp_list;
-  GtkWidget *tmp_item;
-  
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (child != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (child));
-  
-  root_selection = tree->root_tree->selection;
-  
-  switch (tree->root_tree->selection_mode)
-    {
-    case GTK_SELECTION_SINGLE:
-      
-      selection = root_selection;
-      
-      /* remove old selection list */
-      while (selection)
-       {
-         tmp_item = selection->data;
-         
-         if (tmp_item != child)
-           {
-             gtk_tree_item2_deselect (GTK_TREE_ITEM2 (tmp_item));
-             
-             tmp_list = selection;
-             selection = selection->next;
-             
-             root_selection = g_list_remove_link (root_selection, tmp_list);
-             gtk_widget_unref (tmp_item);
-             
-             g_list_free (tmp_list);
-           }
-         else
-           selection = selection->next;
-       }
-      
-      if (child->state == GTK_STATE_NORMAL)
-       {
-         gtk_tree_item2_select (GTK_TREE_ITEM2 (child));
-         root_selection = g_list_prepend (root_selection, child);
-         gtk_widget_ref (child);
-       }
-      else if (child->state == GTK_STATE_SELECTED)
-       {
-         gtk_tree_item2_deselect (GTK_TREE_ITEM2 (child));
-         root_selection = g_list_remove (root_selection, child);
-         gtk_widget_unref (child);
-       }
-      
-      tree->root_tree->selection = root_selection;
-      
-      gtk_signal_emit (GTK_OBJECT (tree->root_tree), 
-                      tree_signals[SELECTION_CHANGED]);
-      break;
-      
-      
-    case GTK_SELECTION_BROWSE:
-      selection = root_selection;
-      
-      while (selection)
-       {
-         tmp_item = selection->data;
-         
-         if (tmp_item != child)
-           {
-             gtk_tree_item2_deselect (GTK_TREE_ITEM2 (tmp_item));
-             
-             tmp_list = selection;
-             selection = selection->next;
-             
-             root_selection = g_list_remove_link (root_selection, tmp_list);
-             gtk_widget_unref (tmp_item);
-             
-             g_list_free (tmp_list);
-           }
-         else
-           selection = selection->next;
-       }
-      
-      tree->root_tree->selection = root_selection;
-      
-      if (child->state == GTK_STATE_NORMAL)
-       {
-         gtk_tree_item2_select (GTK_TREE_ITEM2 (child));
-         root_selection = g_list_prepend (root_selection, child);
-         gtk_widget_ref (child);
-         tree->root_tree->selection = root_selection;
-         gtk_signal_emit (GTK_OBJECT (tree->root_tree), 
-                          tree_signals[SELECTION_CHANGED]);
-       }
-      break;
-      
-    case GTK_SELECTION_MULTIPLE:
-      if (child->state == GTK_STATE_NORMAL)
-       {
-         gtk_tree_item2_select (GTK_TREE_ITEM2 (child));
-         root_selection = g_list_prepend (root_selection, child);
-         gtk_widget_ref (child);
-         tree->root_tree->selection = root_selection;
-         gtk_signal_emit (GTK_OBJECT (tree->root_tree), 
-                          tree_signals[SELECTION_CHANGED]);
-       }
-      else if (child->state == GTK_STATE_SELECTED)
-       {
-         gtk_tree_item2_deselect (GTK_TREE_ITEM2 (child));
-         root_selection = g_list_remove (root_selection, child);
-         gtk_widget_unref (child);
-         tree->root_tree->selection = root_selection;
-         gtk_signal_emit (GTK_OBJECT (tree->root_tree), 
-                          tree_signals[SELECTION_CHANGED]);
-       }
-      break;
-      
-    case GTK_SELECTION_EXTENDED:
-      break;
-    }
-}
-
-static void
-gtk_real_tree2_unselect_child (GtkTree2   *tree,
-                             GtkWidget *child)
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  g_return_if_fail (child != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (child));
-  
-  switch (tree->selection_mode)
-    {
-    case GTK_SELECTION_SINGLE:
-    case GTK_SELECTION_MULTIPLE:
-    case GTK_SELECTION_BROWSE:
-      if (child->state == GTK_STATE_SELECTED)
-       {
-         GtkTree2* root_tree = GTK_TREE2_ROOT_TREE(tree);
-         gtk_tree_item2_deselect (GTK_TREE_ITEM2 (child));
-         root_tree->selection = g_list_remove (root_tree->selection, child);
-         gtk_widget_unref (child);
-         gtk_signal_emit (GTK_OBJECT (tree->root_tree), 
-                          tree_signals[SELECTION_CHANGED]);
-       }
-      break;
-      
-    case GTK_SELECTION_EXTENDED:
-      break;
-    }
-}
-
-void
-gtk_tree2_set_selection_mode (GtkTree2       *tree,
-                            GtkSelectionMode mode) 
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  tree->selection_mode = mode;
-}
-
-void
-gtk_tree2_set_view_mode (GtkTree2       *tree,
-                       GtkTree2ViewMode mode) 
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  tree->view_mode = mode;
-}
-
-void
-gtk_tree2_set_view_lines (GtkTree2       *tree,
-                        guint          flag) 
-{
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  tree->view_line = flag;
-}
-
-void 
-gtk_tree2_item_up_1 (GtkTree2       *tree,
-                  guint pos)
-{
-  GList *tmp;
-  guint length;
-  gpointer data;
-
-  g_return_if_fail (tree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (tree));
-  
-  tmp = tree->children;
-  length = g_list_length (tmp);
-  if (pos <= 0 || pos >= length) { return; }
-  data = g_list_nth_data (tree->children, pos);
-  g_list_remove (tree->children, data);
-  tree->children = g_list_insert (tree->children, data, pos-1);
-}
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtktree2.h b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtktree2.h
deleted file mode 100644 (file)
index 291a1d1..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#ifndef __GTK_TREE2_H__
-#define __GTK_TREE2_H__
-
-/* set this flag to enable tree debugging output */
-/* #define TREE_DEBUG */
-
-#include <gdk/gdk.h>
-#include <gtk/gtkcontainer.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
-#define GTK_TYPE_TREE2                  (gtk_tree2_get_type ())
-#define GTK_TREE2(obj)                  (GTK_CHECK_CAST ((obj), GTK_TYPE_TREE2, GtkTree2))
-#define GTK_TREE2_CLASS(klass)          (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_TREE2, GtkTree2Class))
-#define GTK_IS_TREE2(obj)               (GTK_CHECK_TYPE ((obj), GTK_TYPE_TREE2))
-#define GTK_IS_TREE2_CLASS(klass)       (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TREE2))
-
-#define GTK_IS_ROOT_TREE2(obj)   ((GtkObject*) GTK_TREE2(obj)->root_tree == (GtkObject*)obj)
-#define GTK_TREE2_ROOT_TREE(obj) (GTK_TREE2(obj)->root_tree ? GTK_TREE2(obj)->root_tree : GTK_TREE2(obj))
-#define GTK_TREE2_SELECTION(obj) (GTK_TREE2_ROOT_TREE(obj)->selection)
-
-typedef enum 
-{
-  GTK_TREE2_VIEW_LINE,  /* default view mode */
-  GTK_TREE2_VIEW_ITEM
-} GtkTree2ViewMode;
-
-typedef struct _GtkTree2       GtkTree2;
-typedef struct _GtkTree2Class  GtkTree2Class;
-
-struct _GtkTree2
-{
-  GtkContainer container;
-  
-  GList *children;
-  
-  GtkTree2* root_tree; /* owner of selection list */
-  GtkWidget* tree_owner;
-  GList *selection;
-  guint level;
-  guint indent_value;
-  guint current_indent;
-  guint selection_mode : 2;
-  guint view_mode : 1;
-  guint view_line : 1;
-};
-
-struct _GtkTree2Class
-{
-  GtkContainerClass parent_class;
-  
-  void (* selection_changed) (GtkTree2   *tree);
-  void (* select_child)      (GtkTree2   *tree,
-                             GtkWidget *child);
-  void (* unselect_child)    (GtkTree2   *tree,
-                             GtkWidget *child);
-};
-
-
-GtkType    gtk_tree2_get_type           (void);
-GtkWidget* gtk_tree2_new                (void);
-void       gtk_tree2_append             (GtkTree2          *tree,
-                                       GtkWidget        *tree_item);
-void       gtk_tree2_prepend            (GtkTree2          *tree,
-                                       GtkWidget        *tree_item);
-void       gtk_tree2_insert             (GtkTree2          *tree,
-                                       GtkWidget        *tree_item,
-                                       gint              position);
-void       gtk_tree2_remove_items       (GtkTree2          *tree,
-                                       GList            *items);
-void       gtk_tree2_clear_items        (GtkTree2          *tree,
-                                       gint              start,
-                                       gint              end);
-void       gtk_tree2_select_item        (GtkTree2          *tree,
-                                       gint              item);
-void       gtk_tree2_unselect_item      (GtkTree2          *tree,
-                                       gint              item);
-void       gtk_tree2_select_child       (GtkTree2          *tree,
-                                       GtkWidget        *tree_item);
-void       gtk_tree2_unselect_child     (GtkTree2          *tree,
-                                       GtkWidget        *tree_item);
-gint       gtk_tree2_child_position     (GtkTree2          *tree,
-                                       GtkWidget        *child);
-void       gtk_tree2_set_selection_mode (GtkTree2          *tree,
-                                       GtkSelectionMode  mode);
-void       gtk_tree2_set_view_mode      (GtkTree2          *tree,
-                                       GtkTree2ViewMode   mode); 
-void       gtk_tree2_set_view_lines     (GtkTree2          *tree,
-                                       guint            flag);
-
-/* deprecated function, use gtk_container_remove instead.
- */
-void       gtk_tree2_remove_item        (GtkTree2          *tree,
-                                       GtkWidget        *child);
-void       gtk_tree2_item_up             (GtkTree2   *tree,
-                                        gint       position);
-
-void gtk_tree2_select_next_child (GtkTree2   *tree,
-                                 GtkWidget *tree_item, gboolean descend);
-
-void gtk_tree2_select_prev_child (GtkTree2   *tree,
-                                 GtkWidget *tree_item);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GTK_TREE2_H__ */
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtktreeitem2.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtktreeitem2.c
deleted file mode 100644 (file)
index 7e6f811..0000000
+++ /dev/null
@@ -1,1110 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <gtk/gtklabel.h>
-#include "gtktree2.h"
-#include "gtktreeitem2.h"
-#include <gtk/gtkeventbox.h>
-#include <gtk/gtkpixmap.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
-
-#include "tree_plus.xpm"
-#include "tree_minus.xpm"
-
-#define DEFAULT_DELTA 9
-
-enum {
-  COLLAPSE_TREE,
-  EXPAND_TREE,
-  LAST_SIGNAL
-};
-
-typedef struct _GtkTree2Pixmaps GtkTree2Pixmaps;
-
-struct _GtkTree2Pixmaps {
-  gint refcount;
-  GdkColormap *colormap;
-  
-  GdkPixmap *pixmap_plus;
-  GdkPixmap *pixmap_minus;
-  GdkBitmap *mask_plus;
-  GdkBitmap *mask_minus;
-};
-
-static GList *pixmaps = NULL;
-
-static void gtk_tree_item2_class_init (GtkTreeItem2Class *klass);
-static void gtk_tree_item2_init       (GtkTreeItem2      *tree_item);
-static void gtk_tree_item2_realize       (GtkWidget        *widget);
-static void gtk_tree_item2_size_request  (GtkWidget        *widget,
-                                        GtkRequisition   *requisition);
-static void gtk_tree_item2_size_allocate (GtkWidget        *widget,
-                                        GtkAllocation    *allocation);
-static void gtk_tree_item2_draw          (GtkWidget        *widget,
-                                        GdkRectangle     *area);
-static void gtk_tree_item2_draw_focus    (GtkWidget        *widget);
-static void gtk_tree_item2_paint         (GtkWidget        *widget,
-                                        GdkRectangle     *area);
-static gint gtk_tree_item2_button_press  (GtkWidget        *widget,
-                                        GdkEventButton   *event);
-static gint gtk_tree_item2_expose        (GtkWidget        *widget,
-                                        GdkEventExpose   *event);
-static gint gtk_tree_item2_focus_in      (GtkWidget        *widget,
-                                        GdkEventFocus    *event);
-static gint gtk_tree_item2_focus_out     (GtkWidget        *widget,
-                                        GdkEventFocus    *event);
-static void gtk_tree_item2_forall        (GtkContainer    *container,
-                                        gboolean         include_internals,
-                                        GtkCallback      callback,
-                                        gpointer         callback_data);
-
-static void gtk_real_tree_item2_select   (GtkItem          *item);
-static void gtk_real_tree_item2_deselect (GtkItem          *item);
-static void gtk_real_tree_item2_toggle   (GtkItem          *item);
-static void gtk_real_tree_item2_expand   (GtkTreeItem2      *item);
-static void gtk_real_tree_item2_collapse (GtkTreeItem2      *item);
-static void gtk_real_tree_item2_expand   (GtkTreeItem2      *item);
-static void gtk_real_tree_item2_collapse (GtkTreeItem2      *item);
-static void gtk_tree_item2_destroy        (GtkObject *object);
-static void gtk_tree_item2_subtree_button_click (GtkWidget *widget);
-static void gtk_tree_item2_subtree_button_changed_state (GtkWidget *widget);
-
-static void gtk_tree_item2_map(GtkWidget*);
-static void gtk_tree_item2_unmap(GtkWidget*);
-
-static void gtk_tree_item2_add_pixmaps    (GtkTreeItem2       *tree_item);
-static void gtk_tree_item2_remove_pixmaps (GtkTreeItem2       *tree_item);
-
-static GtkItemClass *parent_class = NULL;
-static guint tree_item_signals[LAST_SIGNAL] = { 0 };
-
-GtkType
-gtk_tree_item2_get_type (void)
-{
-  static GtkType tree_item_type = 0;
-
-  if (!tree_item_type)
-    {
-      static const GtkTypeInfo tree_item_info =
-      {
-       "GtkTreeItem",
-       sizeof (GtkTreeItem2),
-       sizeof (GtkTreeItem2Class),
-       (GtkClassInitFunc) gtk_tree_item2_class_init,
-       (GtkObjectInitFunc) gtk_tree_item2_init,
-       /* reserved_1 */ NULL,
-        /* reserved_2 */ NULL,
-        (GtkClassInitFunc) NULL,
-      };
-
-      tree_item_type = gtk_type_unique (gtk_item_get_type (), &tree_item_info);
-    }
-
-  return tree_item_type;
-}
-
-static void
-gtk_tree_item2_class_init (GtkTreeItem2Class *class)
-{
-  GtkObjectClass *object_class;
-  GtkWidgetClass *widget_class;
-  GtkContainerClass *container_class;
-  GtkItemClass *item_class;
-
-  object_class = (GtkObjectClass*) class;
-  widget_class = (GtkWidgetClass*) class;
-  item_class = (GtkItemClass*) class;
-  container_class = (GtkContainerClass*) class;
-
-  parent_class = gtk_type_class (gtk_item_get_type ());
-  
-  tree_item_signals[EXPAND_TREE] =
-    gtk_signal_new ("expand",
-                   GTK_RUN_FIRST,
-                   object_class->type,
-                   GTK_SIGNAL_OFFSET (GtkTreeItem2Class, expand),
-                   gtk_marshal_NONE__NONE,
-                   GTK_TYPE_NONE, 0);
-  tree_item_signals[COLLAPSE_TREE] =
-    gtk_signal_new ("collapse",
-                   GTK_RUN_FIRST,
-                   object_class->type,
-                   GTK_SIGNAL_OFFSET (GtkTreeItem2Class, collapse),
-                   gtk_marshal_NONE__NONE,
-                   GTK_TYPE_NONE, 0);
-
-  gtk_object_class_add_signals (object_class, tree_item_signals, LAST_SIGNAL);
-
-  object_class->destroy = gtk_tree_item2_destroy;
-
-  widget_class->realize = gtk_tree_item2_realize;
-  widget_class->size_request = gtk_tree_item2_size_request;
-  widget_class->size_allocate = gtk_tree_item2_size_allocate;
-  widget_class->draw = gtk_tree_item2_draw;
-  widget_class->draw_focus = gtk_tree_item2_draw_focus;
-  widget_class->button_press_event = gtk_tree_item2_button_press;
-  widget_class->expose_event = gtk_tree_item2_expose;
-  widget_class->focus_in_event = gtk_tree_item2_focus_in;
-  widget_class->focus_out_event = gtk_tree_item2_focus_out;
-  widget_class->map = gtk_tree_item2_map;
-  widget_class->unmap = gtk_tree_item2_unmap;
-
-  container_class->forall = gtk_tree_item2_forall;
-
-  item_class->select = gtk_real_tree_item2_select;
-  item_class->deselect = gtk_real_tree_item2_deselect;
-  item_class->toggle = gtk_real_tree_item2_toggle;
-
-  class->expand = gtk_real_tree_item2_expand;
-  class->collapse = gtk_real_tree_item2_collapse;
-}
-
-/* callback for event box mouse event */
-static void 
-gtk_tree_item2_subtree_button_click (GtkWidget *widget)
-{
-  GtkTreeItem2* item;
-  
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_EVENT_BOX (widget));
-  
-  item = (GtkTreeItem2*) gtk_object_get_user_data (GTK_OBJECT (widget));
-  if (!GTK_WIDGET_IS_SENSITIVE (item))
-    return;
-  
-  if (item->expanded)
-    gtk_tree_item2_collapse (item);
-  else
-    gtk_tree_item2_expand (item);
-}
-
-/* callback for event box state changed */
-static void
-gtk_tree_item2_subtree_button_changed_state (GtkWidget *widget)
-{
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_EVENT_BOX (widget));
-  
-  if (GTK_WIDGET_VISIBLE (widget))
-    {
-      
-      if (widget->state == GTK_STATE_NORMAL)
-       gdk_window_set_background (widget->window, &widget->style->base[widget->state]);
-      else
-       gdk_window_set_background (widget->window, &widget->style->bg[widget->state]);
-      
-      if (GTK_WIDGET_DRAWABLE (widget))
-       gdk_window_clear_area (widget->window, 0, 0, 
-                              widget->allocation.width, widget->allocation.height);
-    }
-}
-
-static void
-gtk_tree_item2_init (GtkTreeItem2 *tree_item)
-{
-  GtkWidget *eventbox, *pixmapwid;
-  
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  tree_item->expanded = FALSE;
-  tree_item->subtree = NULL;
-  GTK_WIDGET_SET_FLAGS (tree_item, GTK_CAN_FOCUS);
-  
-  /* create an event box containing one pixmaps */
-  eventbox = gtk_event_box_new();
-  gtk_widget_set_events (eventbox, GDK_BUTTON_PRESS_MASK);
-  gtk_signal_connect(GTK_OBJECT(eventbox), "state_changed",
-                    (GtkSignalFunc)gtk_tree_item2_subtree_button_changed_state, 
-                    (gpointer)NULL);
-  gtk_signal_connect(GTK_OBJECT(eventbox), "realize",
-                    (GtkSignalFunc)gtk_tree_item2_subtree_button_changed_state, 
-                    (gpointer)NULL);
-/* HF inutile
-  gtk_signal_connect(GTK_OBJECT(eventbox), "button_press_event",
-                    (GtkSignalFunc)gtk_tree_item2_subtree_button_click,
-                    (gpointer)NULL);
-*/
-  gtk_object_set_user_data(GTK_OBJECT(eventbox), tree_item);
-  tree_item->pixmaps_box = eventbox;
-
-  /* create pixmap for button '+' */
-  pixmapwid = gtk_type_new (gtk_pixmap_get_type ());
-  if (!tree_item->expanded) 
-    gtk_container_add (GTK_CONTAINER (eventbox), pixmapwid);
-  gtk_widget_show (pixmapwid);
-  tree_item->plus_pix_widget = pixmapwid;
-  gtk_widget_ref (tree_item->plus_pix_widget);
-  gtk_object_sink (GTK_OBJECT (tree_item->plus_pix_widget));
-  
-  /* create pixmap for button '-' */
-  pixmapwid = gtk_type_new (gtk_pixmap_get_type ());
-  if (tree_item->expanded) 
-    gtk_container_add (GTK_CONTAINER (eventbox), pixmapwid);
-  gtk_widget_show (pixmapwid);
-  tree_item->minus_pix_widget = pixmapwid;
-  gtk_widget_ref (tree_item->minus_pix_widget);
-  gtk_object_sink (GTK_OBJECT (tree_item->minus_pix_widget));
-  
-  gtk_widget_set_parent (eventbox, GTK_WIDGET (tree_item));
-}
-
-
-GtkWidget*
-gtk_tree_item2_new (void)
-{
-  GtkWidget *tree_item;
-
-  tree_item = GTK_WIDGET (gtk_type_new (gtk_tree_item2_get_type ()));
-
-  return tree_item;
-}
-
-GtkWidget*
-gtk_tree_item2_new_with_label (gchar *label)
-{
-  GtkWidget *tree_item;
-  GtkWidget *label_widget;
-
-  tree_item = gtk_tree_item2_new ();
-  label_widget = gtk_label_new (label);
-  gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5);
-
-  gtk_container_add (GTK_CONTAINER (tree_item), label_widget);
-  gtk_widget_show (label_widget);
-
-
-  return tree_item;
-}
-
-void
-gtk_tree_item2_set_subtree (GtkTreeItem2 *tree_item,
-                          GtkWidget   *subtree)
-{
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  g_return_if_fail (subtree != NULL);
-  g_return_if_fail (GTK_IS_TREE2 (subtree));
-
-  if (tree_item->subtree)
-    {
-      g_warning("there is already a subtree for this tree item\n");
-      return;
-    }
-
-  tree_item->subtree = subtree; 
-  GTK_TREE2 (subtree)->tree_owner = GTK_WIDGET (tree_item);
-
-  /* show subtree button */
-  if (tree_item->pixmaps_box)
-    gtk_widget_show (tree_item->pixmaps_box);
-
-  if (tree_item->expanded)
-    gtk_widget_show (subtree);
-  else
-    gtk_widget_hide (subtree);
-
-  gtk_widget_set_parent (subtree, GTK_WIDGET (tree_item)->parent);
-
-  if (GTK_WIDGET_REALIZED (subtree->parent))
-    gtk_widget_realize (subtree);
-
-  if (GTK_WIDGET_VISIBLE (subtree->parent) && GTK_WIDGET_VISIBLE (subtree))
-    {
-      if (GTK_WIDGET_MAPPED (subtree->parent))
-       gtk_widget_map (subtree);
-
-      gtk_widget_queue_resize (subtree);
-    }
-}
-
-void
-gtk_tree_item2_select (GtkTreeItem2 *tree_item)
-{
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  gtk_item_select (GTK_ITEM (tree_item));
-}
-
-void
-gtk_tree_item2_deselect (GtkTreeItem2 *tree_item)
-{
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  gtk_item_deselect (GTK_ITEM (tree_item));
-}
-
-void
-gtk_tree_item2_expand (GtkTreeItem2 *tree_item)
-{
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  gtk_signal_emit (GTK_OBJECT (tree_item), tree_item_signals[EXPAND_TREE], NULL);
-}
-
-void
-gtk_tree_item2_collapse (GtkTreeItem2 *tree_item)
-{
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  gtk_signal_emit (GTK_OBJECT (tree_item), tree_item_signals[COLLAPSE_TREE], NULL);
-}
-
-static void
-gtk_tree_item2_add_pixmaps (GtkTreeItem2 *tree_item)
-{
-  GList *tmp_list;
-  GdkColormap *colormap;
-  GtkTree2Pixmaps *pixmap_node = NULL;
-
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  if (tree_item->pixmaps)
-    return;
-
-  colormap = gtk_widget_get_colormap (GTK_WIDGET (tree_item));
-
-  tmp_list = pixmaps;
-  while (tmp_list)
-    {
-      pixmap_node = (GtkTree2Pixmaps *)tmp_list->data;
-
-      if (pixmap_node->colormap == colormap)
-       break;
-      
-      tmp_list = tmp_list->next;
-    }
-
-  if (tmp_list)
-    {
-      pixmap_node->refcount++;
-      tree_item->pixmaps = tmp_list;
-    }
-  else
-    {
-      pixmap_node = g_new (GtkTree2Pixmaps, 1);
-
-      pixmap_node->colormap = colormap;
-      gdk_colormap_ref (colormap);
-
-      pixmap_node->refcount = 1;
-
-      /* create pixmaps for plus icon */
-      pixmap_node->pixmap_plus = 
-       gdk_pixmap_create_from_xpm_d (GTK_WIDGET (tree_item)->window,
-                                     &pixmap_node->mask_plus,
-                                     NULL,
-                                     tree_plus);
-      
-      /* create pixmaps for minus icon */
-      pixmap_node->pixmap_minus = 
-       gdk_pixmap_create_from_xpm_d (GTK_WIDGET (tree_item)->window,
-                                     &pixmap_node->mask_minus,
-                                     NULL,
-                                     tree_minus);
-
-      tree_item->pixmaps = pixmaps = g_list_prepend (pixmaps, pixmap_node);
-    }
-  
-  gtk_pixmap_set (GTK_PIXMAP (tree_item->plus_pix_widget), 
-                 pixmap_node->pixmap_plus, pixmap_node->mask_plus);
-  gtk_pixmap_set (GTK_PIXMAP (tree_item->minus_pix_widget), 
-                 pixmap_node->pixmap_minus, pixmap_node->mask_minus);
-}
-
-static void
-gtk_tree_item2_remove_pixmaps (GtkTreeItem2 *tree_item)
-{
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-
-  if (tree_item->pixmaps)
-    {
-      GtkTree2Pixmaps *pixmap_node = (GtkTree2Pixmaps *)tree_item->pixmaps->data;
-      
-      g_assert (pixmap_node->refcount > 0);
-      
-      if (--pixmap_node->refcount == 0)
-       {
-         gdk_colormap_unref (pixmap_node->colormap);
-         gdk_pixmap_unref (pixmap_node->pixmap_plus);
-         gdk_bitmap_unref (pixmap_node->mask_plus);
-         gdk_pixmap_unref (pixmap_node->pixmap_minus);
-         gdk_bitmap_unref (pixmap_node->mask_minus);
-         
-         pixmaps = g_list_remove_link (pixmaps, tree_item->pixmaps);
-         g_list_free_1 (tree_item->pixmaps);
-         g_free (pixmap_node);
-       }
-
-      tree_item->pixmaps = NULL;
-    }
-}
-
-static void
-gtk_tree_item2_realize (GtkWidget *widget)
-{    
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-
-  if (GTK_WIDGET_CLASS (parent_class)->realize)
-    (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
-  
-  gdk_window_set_background (widget->window, 
-                            &widget->style->base[GTK_STATE_NORMAL]);
-
-  gtk_tree_item2_add_pixmaps (GTK_TREE_ITEM2 (widget));
-}
-
-static void
-gtk_tree_item2_size_request (GtkWidget      *widget,
-                           GtkRequisition *requisition)
-{
-  GtkBin *bin;
-  GtkTreeItem2* item;
-  GtkRequisition child_requisition;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-  g_return_if_fail (requisition != NULL);
-
-  bin = GTK_BIN (widget);
-  item = GTK_TREE_ITEM2(widget);
-
-  requisition->width = (GTK_CONTAINER (widget)->border_width +
-                       widget->style->klass->xthickness) * 2;
-  requisition->height = GTK_CONTAINER (widget)->border_width * 2;
-
-  if (bin->child && GTK_WIDGET_VISIBLE (bin->child))
-    {
-      GtkRequisition pix_requisition;
-      
-      gtk_widget_size_request (bin->child, &child_requisition);
-
-      requisition->width += child_requisition.width;
-
-      gtk_widget_size_request (item->pixmaps_box, 
-                              &pix_requisition);
-      requisition->width += pix_requisition.width + DEFAULT_DELTA + 
-       GTK_TREE2 (widget->parent)->current_indent;
-
-      requisition->height += MAX (child_requisition.height,
-                                 pix_requisition.height);
-    }
-}
-
-static void
-gtk_tree_item2_size_allocate (GtkWidget     *widget,
-                            GtkAllocation *allocation)
-{
-  GtkBin *bin;
-  GtkTreeItem2* item;
-  GtkAllocation child_allocation;
-  guint border_width;
-  int temp;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-  g_return_if_fail (allocation != NULL);
-
-  widget->allocation = *allocation;
-  if (GTK_WIDGET_REALIZED (widget))
-    gdk_window_move_resize (widget->window,
-                           allocation->x, allocation->y,
-                           allocation->width, allocation->height);
-
-  bin = GTK_BIN (widget);
-  item = GTK_TREE_ITEM2(widget);
-
-  if (bin->child)
-    {
-      border_width = (GTK_CONTAINER (widget)->border_width +
-                     widget->style->klass->xthickness);
-
-      child_allocation.x = border_width + GTK_TREE2(widget->parent)->current_indent;
-      child_allocation.y = GTK_CONTAINER (widget)->border_width;
-
-      child_allocation.width = item->pixmaps_box->requisition.width;
-      child_allocation.height = item->pixmaps_box->requisition.height;
-      
-      temp = allocation->height - child_allocation.height;
-      child_allocation.y += ( temp / 2 ) + ( temp % 2 );
-
-      gtk_widget_size_allocate (item->pixmaps_box, &child_allocation);
-
-      child_allocation.y = GTK_CONTAINER (widget)->border_width;
-      child_allocation.height = MAX (1, (gint)allocation->height - child_allocation.y * 2);
-      child_allocation.x += item->pixmaps_box->requisition.width+DEFAULT_DELTA;
-
-      child_allocation.width = 
-       MAX (1, (gint)allocation->width - ((gint)child_allocation.x + border_width));
-
-      gtk_widget_size_allocate (bin->child, &child_allocation);
-    }
-}
-
-static void 
-gtk_tree_item2_draw_lines (GtkWidget *widget) 
-{
-  GtkTreeItem2* item;
-  GtkTree2* tree;
-  guint lx1, ly1, lx2, ly2;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-
-  item = GTK_TREE_ITEM2(widget);
-  tree = GTK_TREE2(widget->parent);
-
-  /* draw vertical line */
-  lx1 = item->pixmaps_box->allocation.width;
-  lx1 = lx2 = ((lx1 / 2) + (lx1 % 2) + 
-              GTK_CONTAINER (widget)->border_width + 1 + tree->current_indent);
-  ly1 = 0;
-  ly2 = widget->allocation.height;
-
-  if (g_list_last (tree->children)->data == widget)
-    ly2 = (ly2 / 2) + (ly2 % 2);
-
-  if (tree != tree->root_tree)
-    gdk_draw_line (widget->window, widget->style->black_gc, lx1, ly1, lx2, ly2);
-
-  /* draw vertical line for subtree connecting */
-  if(g_list_last(tree->children)->data != (gpointer)widget)
-    ly2 = (ly2 / 2) + (ly2 % 2);
-  
-  lx2 += DEFAULT_DELTA;
-
-  if (item->subtree && item->expanded)
-    gdk_draw_line (widget->window, widget->style->black_gc,
-                  lx2, ly2, lx2, widget->allocation.height);
-
-  /* draw horizontal line */
-  ly1 = ly2;
-  lx2 += 2;
-
-  gdk_draw_line (widget->window, widget->style->black_gc,
-                lx1, ly1, lx2, ly2);
-
-  lx2 -= DEFAULT_DELTA+2;
-  ly1 = 0;
-  ly2 = widget->allocation.height;
-
-  if (tree != tree->root_tree)
-    {
-      item = GTK_TREE_ITEM2 (tree->tree_owner);
-      tree = GTK_TREE2 (GTK_WIDGET (tree)->parent);
-      while (tree != tree->root_tree)
-       {
-         lx1 = lx2 -= tree->indent_value;
-         
-         if (g_list_last (tree->children)->data != item)
-           gdk_draw_line (widget->window, widget->style->black_gc, lx1, ly1, lx2, ly2);
-         item = GTK_TREE_ITEM2 (tree->tree_owner);
-         tree = GTK_TREE2 (GTK_WIDGET (tree)->parent);
-       } 
-    }
-}
-
-static void
-gtk_tree_item2_paint (GtkWidget    *widget,
-                    GdkRectangle *area)
-{
-  GtkBin *bin;
-  GdkRectangle child_area, item_area;
-  GtkTreeItem2* tree_item;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-  g_return_if_fail (area != NULL);
-
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      bin = GTK_BIN (widget);
-      tree_item = GTK_TREE_ITEM2(widget);
-
-      if (widget->state == GTK_STATE_NORMAL)
-       {
-         gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
-         gdk_window_clear_area (widget->window, area->x, area->y, area->width, area->height);
-       }
-      else 
-       {
-         if (!GTK_WIDGET_IS_SENSITIVE (widget)) 
-           gtk_paint_flat_box(widget->style, widget->window,
-                              widget->state, GTK_STATE_INSENSITIVE,
-                              area, widget, "treeitem",
-                              0, 0, -1, -1);
-         else
-           gtk_paint_flat_box(widget->style, widget->window,
-                              widget->state, GTK_SHADOW_ETCHED_OUT,
-                              area, widget, "treeitem",
-                              0, 0, -1, -1);
-       }
-
-      /* draw left size of tree item */
-      item_area.x = 0;
-      item_area.y = 0;
-      item_area.width = (tree_item->pixmaps_box->allocation.width + DEFAULT_DELTA +
-                        GTK_TREE2 (widget->parent)->current_indent + 2);
-      item_area.height = widget->allocation.height;
-
-
-      if (gdk_rectangle_intersect(&item_area, area, &child_area)) 
-       {
-         
-         gtk_tree_item2_draw_lines(widget);
-
-         if (tree_item->pixmaps_box && 
-             GTK_WIDGET_VISIBLE(tree_item->pixmaps_box) &&
-             gtk_widget_intersect (tree_item->pixmaps_box, area, &child_area))
-           gtk_widget_draw (tree_item->pixmaps_box, &child_area);
-       }
-
-      if (GTK_WIDGET_HAS_FOCUS (widget))
-       gtk_paint_focus (widget->style, widget->window,
-                        NULL, widget, "treeitem",
-                        0, 0,
-                        widget->allocation.width - 1,
-                        widget->allocation.height - 1);
-      
-    }
-}
-
-static void
-gtk_tree_item2_draw (GtkWidget    *widget,
-                   GdkRectangle *area)
-{
-  GtkBin *bin;
-  GdkRectangle child_area;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-  g_return_if_fail (area != NULL);
-
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      bin = GTK_BIN (widget);
-
-      gtk_tree_item2_paint (widget, area);
-     
-      if (bin->child && 
-         gtk_widget_intersect (bin->child, area, &child_area))
-       gtk_widget_draw (bin->child, &child_area);
-
-    }
-}
-
-static void
-gtk_tree_item2_draw_focus (GtkWidget *widget)
-{
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-
-  gtk_widget_draw(widget, NULL);
-}
-
-static gint
-gtk_tree_item2_button_press (GtkWidget      *widget,
-                           GdkEventButton *event)
-{
-/* HF
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE_ITEM2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  if (event->type == GDK_BUTTON_PRESS
-       && GTK_WIDGET_IS_SENSITIVE(widget)
-       && !GTK_WIDGET_HAS_FOCUS (widget))
-      gtk_widget_grab_focus (widget);
-
-  return FALSE;
-
-*/
-}
-
-static gint
-gtk_tree_item2_expose (GtkWidget      *widget,
-                     GdkEventExpose *event)
-{
-  GdkEventExpose child_event;
-  GtkBin *bin;
-
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE_ITEM2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      bin = GTK_BIN (widget);
-      
-      gtk_tree_item2_paint (widget, &event->area);
-
-      child_event = *event;
-      if (bin->child && GTK_WIDGET_NO_WINDOW (bin->child) &&
-         gtk_widget_intersect (bin->child, &event->area, &child_event.area))
-       gtk_widget_event (bin->child, (GdkEvent*) &child_event);
-   }
-
-  return FALSE;
-}
-
-static gint
-gtk_tree_item2_focus_in (GtkWidget     *widget,
-                       GdkEventFocus *event)
-{
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE_ITEM2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);
-  gtk_widget_draw_focus (widget);
-
-
-  return FALSE;
-}
-
-static gint
-gtk_tree_item2_focus_out (GtkWidget     *widget,
-                        GdkEventFocus *event)
-{
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE_ITEM2 (widget), FALSE);
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
-  gtk_widget_draw_focus (widget);
-
-
-  return FALSE;
-}
-
-static void
-gtk_real_tree_item2_select (GtkItem *item)
-{    
-  GtkTreeItem2 *tree_item;
-  GtkWidget *widget;
-
-  g_return_if_fail (item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (item));
-
-  tree_item = GTK_TREE_ITEM2 (item);
-  widget = GTK_WIDGET (item);
-
-  gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_SELECTED);
-
-  if (!widget->parent || GTK_TREE2 (widget->parent)->view_mode == GTK_TREE2_VIEW_LINE)
-    gtk_widget_set_state (GTK_TREE_ITEM2 (item)->pixmaps_box, GTK_STATE_SELECTED);
-}
-
-static void
-gtk_real_tree_item2_deselect (GtkItem *item)
-{
-  GtkTreeItem2 *tree_item;
-  GtkWidget *widget;
-
-  g_return_if_fail (item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (item));
-
-  tree_item = GTK_TREE_ITEM2 (item);
-  widget = GTK_WIDGET (item);
-
-  gtk_widget_set_state (widget, GTK_STATE_NORMAL);
-
-  if (!widget->parent || GTK_TREE2 (widget->parent)->view_mode == GTK_TREE2_VIEW_LINE)
-    gtk_widget_set_state (tree_item->pixmaps_box, GTK_STATE_NORMAL);
-}
-
-static void
-gtk_real_tree_item2_toggle (GtkItem *item)
-{
-  g_return_if_fail (item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (item));
-
-  if(!GTK_WIDGET_IS_SENSITIVE(item))
-    return;
-
-  if (GTK_WIDGET (item)->parent && GTK_IS_TREE2 (GTK_WIDGET (item)->parent))
-    gtk_tree2_select_child (GTK_TREE2 (GTK_WIDGET (item)->parent),
-                          GTK_WIDGET (item));
-  else
-    {
-      /* Should we really bother with this bit? A listitem not in a list?
-       * -Johannes Keukelaar
-       * yes, always be on the safe side!
-       * -timj
-       */
-      if (GTK_WIDGET (item)->state == GTK_STATE_SELECTED)
-       gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_NORMAL);
-      else
-       gtk_widget_set_state (GTK_WIDGET (item), GTK_STATE_SELECTED);
-    }
-}
-
-static void
-gtk_real_tree_item2_expand (GtkTreeItem2 *tree_item)
-{
-  GtkTree2* tree;
-  
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  if (tree_item->subtree && !tree_item->expanded)
-    {
-      tree = GTK_TREE2 (GTK_WIDGET (tree_item)->parent); 
-      
-      /* hide subtree widget */
-      gtk_widget_show (tree_item->subtree);
-      
-      /* hide button '+' and show button '-' */
-      if (tree_item->pixmaps_box)
-       {
-         gtk_container_remove (GTK_CONTAINER (tree_item->pixmaps_box), 
-                               tree_item->plus_pix_widget);
-         gtk_container_add (GTK_CONTAINER (tree_item->pixmaps_box), 
-                            tree_item->minus_pix_widget);
-       }
-      if (tree->root_tree)
-       gtk_widget_queue_resize (GTK_WIDGET (tree->root_tree));
-      tree_item->expanded = TRUE;
-    }
-}
-
-static void
-gtk_real_tree_item2_collapse (GtkTreeItem2 *tree_item)
-{
-  GtkTree2* tree;
-  
-  g_return_if_fail (tree_item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (tree_item));
-  
-  if (tree_item->subtree && tree_item->expanded) 
-    {
-      tree = GTK_TREE2 (GTK_WIDGET (tree_item)->parent);
-      
-      /* hide subtree widget */
-      gtk_widget_hide (tree_item->subtree);
-      
-      /* hide button '-' and show button '+' */
-      if (tree_item->pixmaps_box)
-       {
-         gtk_container_remove (GTK_CONTAINER (tree_item->pixmaps_box), 
-                               tree_item->minus_pix_widget);
-         gtk_container_add (GTK_CONTAINER (tree_item->pixmaps_box), 
-                            tree_item->plus_pix_widget);
-       }
-      if (tree->root_tree)
-       gtk_widget_queue_resize (GTK_WIDGET (tree->root_tree));
-      tree_item->expanded = FALSE;
-    }
-}
-
-static void
-gtk_tree_item2_destroy (GtkObject *object)
-{
-  GtkTreeItem2* item;
-  GtkWidget* child;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (object));
-
-#ifdef TREE_DEBUG
-  g_message("+ gtk_tree_item2_destroy [object %#x]\n", (int)object);
-#endif /* TREE_DEBUG */
-
-  item = GTK_TREE_ITEM2(object);
-
-  /* free sub tree if it exist */
-  child = item->subtree;
-  if (child)
-    {
-      gtk_widget_ref (child);
-      gtk_widget_unparent (child);
-      gtk_widget_destroy (child);
-      gtk_widget_unref (child);
-      item->subtree = NULL;
-    }
-  
-  /* free pixmaps box */
-  child = item->pixmaps_box;
-  if (child)
-    {
-      gtk_widget_ref (child);
-      gtk_widget_unparent (child);
-      gtk_widget_destroy (child);
-      gtk_widget_unref (child);
-      item->pixmaps_box = NULL;
-    }
-  
-  
-  /* destroy plus pixmap */
-  if (item->plus_pix_widget)
-    {
-      gtk_widget_destroy (item->plus_pix_widget);
-      gtk_widget_unref (item->plus_pix_widget);
-      item->plus_pix_widget = NULL;
-    }
-  
-  /* destroy minus pixmap */
-  if (item->minus_pix_widget)
-    {
-      gtk_widget_destroy (item->minus_pix_widget);
-      gtk_widget_unref (item->minus_pix_widget);
-      item->minus_pix_widget = NULL;
-    }
-  
-  /* By removing the pixmaps here, and not in unrealize, we depend on
-   * the fact that a widget can never change colormap or visual.
-   */
-  gtk_tree_item2_remove_pixmaps (item);
-  
-  GTK_OBJECT_CLASS (parent_class)->destroy (object);
-  
-#ifdef TREE_DEBUG
-  g_message("- gtk_tree_item2_destroy\n");
-#endif /* TREE_DEBUG */
-}
-
-void
-gtk_tree_item2_remove_subtree (GtkTreeItem2* item) 
-{
-  g_return_if_fail (item != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2(item));
-  g_return_if_fail (item->subtree != NULL);
-  
-  if (GTK_TREE2 (item->subtree)->children)
-    {
-      /* The following call will remove the children and call
-       * gtk_tree_item2_remove_subtree() again. So we are done.
-       */
-      gtk_tree2_remove_items (GTK_TREE2 (item->subtree), 
-                            GTK_TREE2 (item->subtree)->children);
-      return;
-    }
-
-  if (GTK_WIDGET_MAPPED (item->subtree))
-    gtk_widget_unmap (item->subtree);
-      
-  gtk_widget_unparent (item->subtree);
-  
-  if (item->pixmaps_box)
-    gtk_widget_hide (item->pixmaps_box);
-  
-  item->subtree = NULL;
-
-  if (item->expanded)
-    {
-      item->expanded = FALSE;
-      if (item->pixmaps_box)
-       {
-         gtk_container_remove (GTK_CONTAINER (item->pixmaps_box), 
-                               item->minus_pix_widget);
-         gtk_container_add (GTK_CONTAINER (item->pixmaps_box), 
-                            item->plus_pix_widget);
-       }
-    }
-}
-
-static void
-gtk_tree_item2_map (GtkWidget *widget)
-{
-  GtkBin *bin;
-  GtkTreeItem2* item;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-
-  bin = GTK_BIN (widget);
-  item = GTK_TREE_ITEM2(widget);
-
-  GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
-
-  if(item->pixmaps_box &&
-     GTK_WIDGET_VISIBLE (item->pixmaps_box) &&
-     !GTK_WIDGET_MAPPED (item->pixmaps_box))
-    gtk_widget_map (item->pixmaps_box);
-
-  if (bin->child &&
-      GTK_WIDGET_VISIBLE (bin->child) &&
-      !GTK_WIDGET_MAPPED (bin->child))
-    gtk_widget_map (bin->child);
-
-  gdk_window_show (widget->window);
-}
-
-static void
-gtk_tree_item2_unmap (GtkWidget *widget)
-{
-  GtkBin *bin;
-  GtkTreeItem2* item;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (widget));
-
-  GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
-  bin = GTK_BIN (widget);
-  item = GTK_TREE_ITEM2(widget);
-
-  gdk_window_hide (widget->window);
-
-  if(item->pixmaps_box &&
-     GTK_WIDGET_VISIBLE (item->pixmaps_box) &&
-     GTK_WIDGET_MAPPED (item->pixmaps_box))
-    gtk_widget_unmap (bin->child);
-
-  if (bin->child &&
-      GTK_WIDGET_VISIBLE (bin->child) &&
-      GTK_WIDGET_MAPPED (bin->child))
-    gtk_widget_unmap (bin->child);
-}
-
-static void
-gtk_tree_item2_forall (GtkContainer *container,
-                     gboolean      include_internals,
-                     GtkCallback   callback,
-                     gpointer      callback_data)
-{
-  GtkBin *bin;
-  GtkTreeItem2 *tree_item;
-
-  g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_TREE_ITEM2 (container));
-  g_return_if_fail (callback != NULL);
-
-  bin = GTK_BIN (container);
-  tree_item = GTK_TREE_ITEM2 (container);
-
-  if (bin->child)
-    (* callback) (bin->child, callback_data);
-/*  if (include_internals && tree_item->subtree)
-    (* callback) (tree_item->subtree, callback_data); */
-}
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtktreeitem2.h b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/gtktreeitem2.h
deleted file mode 100644 (file)
index bbbb364..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#ifndef __GTK_TREE_ITEM2_H__
-#define __GTK_TREE_ITEM2_H__
-
-
-#include <gdk/gdk.h>
-#include <gtk/gtkitem.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
-#define GTK_TYPE_TREE_ITEM2              (gtk_tree_item2_get_type ())
-#define GTK_TREE_ITEM2(obj)              (GTK_CHECK_CAST ((obj), GTK_TYPE_TREE_ITEM2, GtkTreeItem2))
-#define GTK_TREE_ITEM2_CLASS(klass)      (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_TREE_ITEM2, GtkTreeItem2Class))
-#define GTK_IS_TREE_ITEM2(obj)           (GTK_CHECK_TYPE ((obj), GTK_TYPE_TREE_ITEM2))
-#define GTK_IS_TREE_ITEM2_CLASS(klass)   (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TREE_ITEM2))
-
-#define GTK_TREE_ITEM2_SUBTREE(obj)      (GTK_TREE_ITEM2(obj)->subtree)
-
-
-typedef struct _GtkTreeItem2       GtkTreeItem2;
-typedef struct _GtkTreeItem2Class  GtkTreeItem2Class;
-
-struct _GtkTreeItem2
-{
-  GtkItem item;
-
-  GtkWidget *subtree;
-  GtkWidget *pixmaps_box;
-  GtkWidget *plus_pix_widget, *minus_pix_widget;
-
-  GList *pixmaps;              /* pixmap node for this items color depth */
-
-  guint expanded : 1;
-};
-
-struct _GtkTreeItem2Class
-{
-  GtkItemClass parent_class;
-
-  void (* expand)   (GtkTreeItem2 *tree_item);
-  void (* collapse) (GtkTreeItem2 *tree_item);
-};
-
-
-GtkType    gtk_tree_item2_get_type       (void);
-GtkWidget* gtk_tree_item2_new            (void);
-GtkWidget* gtk_tree_item2_new_with_label (gchar       *label);
-void       gtk_tree_item2_set_subtree    (GtkTreeItem2 *tree_item,
-                                        GtkWidget   *subtree);
-void       gtk_tree_item2_remove_subtree (GtkTreeItem2 *tree_item);
-void       gtk_tree_item2_select         (GtkTreeItem2 *tree_item);
-void       gtk_tree_item2_deselect       (GtkTreeItem2 *tree_item);
-void       gtk_tree_item2_expand         (GtkTreeItem2 *tree_item);
-void       gtk_tree_item2_collapse       (GtkTreeItem2 *tree_item);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GTK_TREE_ITEM2_H__ */
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/handlebox.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/handlebox.xpm
deleted file mode 100644 (file)
index e4d792c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* XPM */
-static char *handlebox_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 7 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray87",
-"+ c Gray100",
-"@ c None",
-/* pixels */
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@++++++++++++++++++ @",
-"@+OOOO.XXXXXXXXXXX. @",
-"@++OOO.XXXXXXXXXXX. @",
-"@+O.+O.XXXXXXXXXXX. @",
-"@+OOO..XXXXXXXXXXX. @",
-"@++OOO.XXXXXXXXXXX. @",
-"@+O.+O.XXXXXXXXXXX. @",
-"@+OOO..XXXXXXXXXXX. @",
-"@++OOO.XXXXXXXXXXX. @",
-"@+O.+O.XXXXXXXXXXX. @",
-"@+OOO..XXXXXXXXXXX. @",
-"@+................. @",
-"@                   @",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/hbox.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/hbox.xpm
deleted file mode 100644 (file)
index 7363317..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* XPM */
-static char *hbox_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 4 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c Gray100",
-/* pixels */
-"oooooo oooooo oooooo ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"oXXXX. oXXXX. oXXXX. ",
-"o..... o..... o..... ",
-"                     "
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/hbuttonbox.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/hbuttonbox.xpm
deleted file mode 100644 (file)
index 77d73dc..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *hbuttonbox_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+OOOOO +OOOOO +OOOOO ",
-"+OXXX. +OXXX. +OXXX. ",
-"+OXXX. +OXXX. +OXXX. ",
-"+O.... +O.... +O.... ",
-"+      +      +      ",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/hseparator.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/hseparator.xpm
deleted file mode 100644 (file)
index 41ad8aa..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* XPM */
-static char *hseparator_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 4 1",
-"  c #7b7b7b",
-". c #b3cece",
-"X c Gray100",
-"o c None",
-/* pixels */
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"o                   o",
-"oXXXXXXXXXXXXXXXXXXXo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo",
-"ooooooooooooooooooooo"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/label.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/label.xpm
deleted file mode 100644 (file)
index 013e13a..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* XPM */
-static char *label_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 3 1",
-"  c Gray0",
-". c #b3cece",
-"X c None",
-/* pixels */
-"XXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXX  XXXXXXXXX",
-"XXXXXXXXX   XXXXXXXXX",
-"XXXXXXXXX   XXXXXXXXX",
-"XXXXXXXX     XXXXXXXX",
-"XXXXXXXX     XXXXXXXX",
-"XXXXXXXX      XXXXXXX",
-"XXXXXXX  X    XXXXXXX",
-"XXXXXXX  X     XXXXXX",
-"XXXXXX  XX     XXXXXX",
-"XXXXXX          XXXXX",
-"XXXXX           XXXXX",
-"XXXXX  XXXXX    XXXXX",
-"XXXX   XXXXX     XXXX",
-"XXX    XXXXX      XXX",
-"XXX     XXX       XXX",
-"XXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXX"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/load_lexer.mll b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/load_lexer.mll
deleted file mode 100644 (file)
index 46aa5ac..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-open Load_parser
-} 
-
-rule token = parse
-  [ ' ' '\t' '\n']+     { token lexbuf }
-| "<window"             { WINDOW_START }
-| "</window>"           { WINDOW_END }
-| "name"                { NAME }
-|  '='                  { EQUAL }
-|  '>'                  { SUP }
-
-| "<" ['A'-'Z' 'a'-'z' '0'-'9' '_']+
-  {
-    let l = Lexing.lexeme lexbuf in
-    let s = String.sub l ~pos:1 ~len:(String.length l - 1) in
-    WIDGET_START s
-  }
-
-| "</" ['A'-'Z' 'a'-'z' '0'-'9' '_']+ '>'
-  {
-    let l = Lexing.lexeme lexbuf in
-    let s = String.sub l ~pos:2 ~len:(String.length l - 3) in
-    WIDGET_END s
-  }
-
-| '"' [^ '"']* '"'
-  {
-    let l = Lexing.lexeme lexbuf in
-    let s = String.sub l ~pos:1 ~len:(String.length l - 2) in
-    IDENT s
-  }
-
-| '\'' [^ '\'']* '\''
-  {
-    let l = Lexing.lexeme lexbuf in
-    let s = String.sub l ~pos:1 ~len:(String.length l - 2) in
-    IDENT s
-  }
-
-| ['A'-'Z' 'a'-'z' '0'-'9' '_' '.']+
-  {
-    let s = Lexing.lexeme lexbuf in IDENT s
-  }
-
-| eof               { EOF }
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/load_parser.mly b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/load_parser.mly
deleted file mode 100644 (file)
index 09c7b7b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-%{
-open Utils
-%}
-
-%token EOF NAME EQUAL SUP WINDOW_START WINDOW_END
-%token <string> WIDGET_START WIDGET_END IDENT
-
-%type <string> window_start
-%type <string * string> property widget_start
-%type <(string * string) list> property_list
-%type <Utils.yywidget_tree> widget window
-%type <Utils.yywidget_tree list> children window_list project
-
-%start project
-%start window
-%start widget
-
-%%
-
-project : window_list EOF        { List.rev $1 }
-
-window_list :                    { [] }
-            | window_list window { $2 :: $1 }
-; 
-
-window : window_start property_list children WINDOW_END 
-  { 
-    Node (("window", $1, List.rev $2), $3)
-  } 
-;
-
-window_start : WINDOW_START NAME EQUAL IDENT SUP   { $4 }
-;
-
-children  :                  { [] }
-         | children widget   { $2 :: $1 }
-;
-
-widget : widget_start property_list children WIDGET_END
-  { 
-    let classe, name = $1 in
-    if classe <> $4 then raise Parsing.Parse_error;
-    Node ((classe, name, List.rev $2), $3)
-  } 
-;
-
-widget_start  : WIDGET_START NAME EQUAL IDENT SUP   { $1, $4 }
-;
-
-property_list :                         { [] }
-              | property_list property  { $2 :: $1 }
-;
-
-property      : IDENT EQUAL IDENT       { $1, $3 }
-;
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/main.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/main.ml
deleted file mode 100644 (file)
index cb150e0..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-(* $Id$ *)
-
-open GdkKeysyms
-open Gtk
-open GObj
-
-open Utils
-open TiBase
-
-let main_project_modify = ref false
-
-let main_window  = GWindow.window ~title:"ZOOM" ~x:10 ~y:10 ()
-let main_vbox    = GPack.vbox ~packing:main_window#add ()
-let main_menu    = GMenu.menu_bar ~packing:(main_vbox#pack ~expand:false) ()
-
-let can_copy = ref (fun _ -> assert false)
-let can_paste = ref (fun _ -> assert false)
-
-class project () =
-  let project_box = GPack.vbox ~packing:main_vbox#pack () in
-  let project_tree = GTree2.tree ~packing:project_box#pack () in
-  object(self)
-    val mutable window_list = []
-
-(* the selected window *)
-    val mutable selected = (None : window_and_tree option)
-
-    method change_selected sel =
-      match selected with
-      |        None ->
-         selected <- Some sel;
-         sel#project_tree_item#misc#set_state `SELECTED;
-         !can_copy true
-      |        Some old_sel ->
-         if sel = old_sel then begin
-           selected <- None;
-           sel#project_tree_item#misc#set_state `NORMAL;
-           !can_copy false
-         end else begin
-           old_sel#project_tree_item#misc#set_state `NORMAL;
-           selected <- Some sel;
-           sel#project_tree_item#misc#set_state `SELECTED;
-           !can_copy true
-         end
-
-    val mutable filename = ""
-    val mutable dirname = ""
-
-    method set_filename f =
-      let dir, file = split_filename f ~ext:".rad" in
-      filename <- file;
-      dirname <- dir
-
-    method get_filename () =
-      get_filename ~callback:self#set_filename ~dir:dirname ()
-
-    method dirname = dirname
-
-(*    method set_dirname f = dirname <- f *)
-
-    method add_window ~name ?tree:wt () =
-      let wt = match wt with
-      |        None -> new window_and_tree ~name
-      |        Some wt -> wt in
-      let tiwin = wt#tiwin and tw=wt#tree_window in
-      let project_tree_item = wt#project_tree_item in
-      project_tree#append project_tree_item;
-      let show = ref true in
-      project_tree_item#event#connect#button_press ~callback:
-       (fun ev ->
-       match GdkEvent.get_type ev with
-       | `BUTTON_PRESS ->
-           if GdkEvent.Button.button ev = 1 then begin
-             self#change_selected wt
-           end else
-           if GdkEvent.Button.button ev = 3 then begin
-             let menu = GMenu.menu () in
-             let name = wt#tiwin#name in
-             let mi_remove = GMenu.menu_item ~label:("delete " ^ name)
-                 ~packing:menu#append ()
-             and mi_copy = GMenu.menu_item ~label:("copy " ^ name)
-                 ~packing:menu#append ()      
-             and mi_cut = GMenu.menu_item ~label:("cut " ^ name)
-                 ~packing:menu#append () in
-             mi_remove#connect#activate
-               ~callback:(fun () -> self#delete_window wt);
-             mi_copy#connect#activate
-               ~callback:(fun () -> self#copy_wt wt);
-             mi_cut#connect#activate
-               ~callback:(fun () -> self#cut_wt wt);
-             menu#popup ~button:3 ~time:(GdkEvent.Button.time ev)
-           end;
-            GtkSignal.stop_emit ();
-            true
-       | `TWO_BUTTON_PRESS ->
-           if GdkEvent.Button.button ev = 1 then begin
-             if !show then begin
-               show := false;
-               tiwin#widget#misc#hide ();
-               tw#misc#hide ()
-             end
-             else begin
-               show := true;
-               tiwin#widget#misc#show ();
-               tw#misc#show ()
-             end
-           end;
-           true
-       | _ -> false);
-      tiwin#connect_event#delete ~callback:
-       (fun _ -> show := false; tiwin#widget#misc#hide (); true);
-      tw#event#connect#delete ~callback:
-       (fun _ -> show := false; tw#misc#hide (); true);
-      window_list <- wt :: window_list;
-      add_undo (Remove_window name);
-      main_window#misc#set_can_focus false;
-      main_window#misc#grab_focus ()
-
-      
-    method add_window_by_node
-       (Node ((classe, name, proplist), children)) =
-      if classe <> "window"
-      then failwith "add_window_by_node: class <> \"window\"";
-      let name = change_name name in  (* for paste *)
-      let wt = new window_and_tree ~name in
-      let tiwin = wt#tiwin in
-      List.iter proplist ~f:(fun (n,v) -> tiwin#set_property n v);
-      begin match children with
-      | [] -> ()
-      | [ ch ] -> tiwin#add_children_wo_undo ch; ()
-      | _ -> failwith "add_window_by_node: more than one child"
-      end;
-      self#add_window ~name ~tree:wt ()
-
-    method delete_window (wt : window_and_tree) =
-      let tiwin = wt#tiwin in
-      project_tree#remove wt#project_tree_item;
-      tiwin#remove_me ();
-      wt#tree_window#destroy ();
-      window_list <- list_remove ~f:(fun w -> w = wt) window_list
-
-    method delete_window_by_name ~name =
-      let wt = List.find window_list ~f:(fun wt -> wt#tiwin#name = name) in
-      self#delete_window wt
-      
-    method delete () =
-      List.iter window_list
-       ~f:(fun wt -> self#delete_window wt);
-      main_vbox#remove project_box#coerce;
-(* remove after test *)
-      if !name_list <> [] then failwith "name_list not empty"
-
-    method save_as () = if self#get_filename () then self#save ()
-
-    method save () =
-      if filename = "" then self#save_as ()
-      else begin
-       let outch = open_out (dirname ^ filename ^ ".rad") in
-       let f = Format.formatter_of_out_channel outch in
-       List.iter window_list ~f:(fun wt -> wt#tiwin#save f);
-       close_out outch;
-       main_project_modify := false
-      end
-
-    method copy_wt (wt : window_and_tree) =
-      wt#tiwin#copy ();
-      !can_paste true
-
-    method cut_wt (wt : window_and_tree) =
-      self#copy_wt wt;
-      self#delete_window wt
-
-    method copy () =
-      match selected with
-      |        None -> failwith "main_project copy"
-      |        Some sel -> self#copy_wt sel
-
-    method cut () =
-      match selected with
-      |        None -> failwith "main_project cut"
-      |        Some sel -> self#cut_wt sel
-
-    method paste () =
-      let lexbuf = Lexing.from_string !window_selection in
-      let node = Load_parser.window Load_lexer.token lexbuf in
-      self#add_window_by_node node
-
-    method emit () =
-      let outc = open_out (dirname ^ filename ^ ".ml") in
-      let f = Format.formatter_of_out_channel outc in
-      List.iter window_list ~f:(fun wt -> wt#emit f);
-      Format.fprintf f "let main () =@\n";
-(* this is just for demo *)
-      List.iter window_list ~f:
-       begin fun wt ->
-         let name = wt#tiwin#name in
-         Format.fprintf f "  let %s = new %s () in %s#show ();@\n"
-           name name name
-       end;
-      Format.fprintf f
-       "  GMain.Main.main ()@\n@\nlet _ = main ()@\n";
-      close_out outc
-
-  end
-
-
-let main_project = ref (new project ())
-
-let load () =
-  let filename = ref "" in
-  get_filename ~callback:(fun f -> filename := f) ~dir:!main_project#dirname ();
-  if !filename <> "" then begin
-    !main_project#delete ();
-    main_project := new project ();
-    let inch = open_in !filename in
-    let lexbuf = Lexing.from_channel inch in
-    let project_list = Load_parser.project Load_lexer.token lexbuf in
-    close_in inch;
-    List.iter project_list
-      ~f:(fun node -> !main_project#add_window_by_node node);
-    !main_project#set_filename !filename
-  end
-
-
-let interpret_undo = function
-  | Add (parent_name, node, pos) ->
-      let parent = Hashtbl.find widget_map parent_name in
-      parent#add_children node ~pos
-  | Remove child_name ->
-      let child  = Hashtbl.find widget_map child_name in
-      child#remove_me ()
-  | Property (property, value_string) ->
-      property#set value_string
-  | Add_window node -> !main_project#add_window_by_node node
-  | Remove_window name -> !main_project#delete_window_by_name ~name
-
-let undo () =
-  if !last_action_was_undo then begin
-    match !next_undo_info with
-    | hd :: tl -> interpret_undo hd; next_undo_info := tl
-    | [] -> message "no more undo info"
-  end
-  else begin
-    match !undo_info with
-    | hd :: tl -> interpret_undo hd; next_undo_info := tl
-    | [] -> message "no undo info"
-  end;
-  last_action_was_undo := true
-
-
-let targets = [  { target = "STRING"; flags = []; info = 0}  ]
-
-let xpm_window () =
-  let source_drag_data_get classe _ (data : selection_data) ~info ~time =
-    data#set ~typ:data#target ~format:0 ~data:classe in
-  let window = GWindow.window ~title:"icons" ~x:250 ~y:10 () in
-  window#misc#realize ();
-  let vbox = GPack.vbox ~packing:window#add () in
-  let table = GPack.table ~rows:1 ~columns:5 ~border_width:20
-      ~packing:vbox#pack () in
-  let tooltips = GData.tooltips () in
-  let add_xpm ~file ~left ~top ~tip =
-    let gdk_pix = GDraw.pixmap_from_xpm ~file ~window () in
-    let ev = GBin.event_box ~packing:(table#attach ~left ~top) () in
-    let pix = GMisc.pixmap gdk_pix ~packing:ev#add () in
-    ev#event#connect#button_press ~callback:
-      (fun ev -> match GdkEvent.get_type ev with
-       | `BUTTON_PRESS ->
-           if GdkEvent.Button.button ev = 1 then begin
-             !main_project#add_window ~name:(make_new_name "window") ()
-           end;
-           true
-       | _ -> false);
-    tooltips#set_tip ev#coerce ~text:tip
-  in
-  add_xpm ~file:"window.xpm" ~left:0 ~top:0 ~tip:"window";
-  GMisc.separator `HORIZONTAL ~packing:vbox#pack ();
-  let table = GPack.table ~rows:6 ~columns:6 ~packing:vbox#pack
-      ~row_spacings:20 ~col_spacings:20 ~border_width:20 () in
-  let add_xpm file ~left ~top ~classe =
-    let gdk_pix = GDraw.pixmap_from_xpm ~file ~window () in
-    let ev = GBin.event_box ~packing:(table#attach ~left ~top) () in
-    let pix = GMisc.pixmap gdk_pix ~packing:ev#add () in
-    ev#drag#source_set ~modi:[`BUTTON1] targets ~actions:[`COPY];
-    ev#drag#source_set_icon ~colormap:window#misc#style#colormap 
-      gdk_pix; 
-    ev#drag#connect#data_get ~callback:(source_drag_data_get classe);
-    tooltips#set_tip ev#coerce ~text:classe
-  in
-  
-  add_xpm "button.xpm"         ~left:0 ~top:0 ~classe:"button";
-  add_xpm "togglebutton.xpm"   ~left:1 ~top:0 ~classe:"toggle_button";
-  add_xpm "checkbutton.xpm"    ~left:2 ~top:0 ~classe:"check_button";
-  add_xpm "radiobutton.xpm"    ~left:3 ~top:0 ~classe:"radio_button";
-  add_xpm "toolbar.xpm"        ~left:4 ~top:0 ~classe:"toolbar";
-  add_xpm "hbox.xpm"           ~left:0 ~top:1 ~classe:"hbox";
-  add_xpm "vbox.xpm"           ~left:1 ~top:1 ~classe:"vbox";
-  add_xpm "hbuttonbox.xpm"     ~left:2 ~top:1 ~classe:"hbutton_box";
-  add_xpm "vbuttonbox.xpm"     ~left:3 ~top:1 ~classe:"vbutton_box";
-  add_xpm "fixed.xpm"          ~left:4 ~top:1 ~classe:"fixed";
-  add_xpm "frame.xpm"          ~left:0 ~top:2 ~classe:"frame";
-  add_xpm "aspectframe.xpm"    ~left:1 ~top:2 ~classe:"aspect_frame";
-  add_xpm "scrolledwindow.xpm" ~left:2 ~top:2 ~classe:"scrolled_window";
-  add_xpm "eventbox.xpm"       ~left:3 ~top:2 ~classe:"event_box";
-  add_xpm "handlebox.xpm"      ~left:4 ~top:2 ~classe:"handle_box";
-  add_xpm "viewport.xpm"       ~left:5 ~top:2 ~classe:"viewport";
-  add_xpm "hseparator.xpm"     ~left:0 ~top:3 ~classe:"hseparator";
-  add_xpm "vseparator.xpm"     ~left:1 ~top:3 ~classe:"vseparator";
-  add_xpm "clist.xpm"          ~left:2 ~top:3 ~classe:"clist";
-  add_xpm "label.xpm"          ~left:0 ~top:4 ~classe:"label";
-  add_xpm "statusbar.xpm"      ~left:1 ~top:4 ~classe:"statusbar";
-  add_xpm "notebook.xpm"       ~left:2 ~top:4 ~classe:"notebook";
-  add_xpm "colorselection.xpm" ~left:3 ~top:4 ~classe:"color_selection";
-  add_xpm "pixmap.xpm"         ~left:4 ~top:4 ~classe:"pixmap";
-  add_xpm "entry.xpm"          ~left:0 ~top:5 ~classe:"entry";
-  add_xpm "spinbutton.xpm"     ~left:1 ~top:5 ~classe:"spin_button";
-  add_xpm "combo.xpm"          ~left:2 ~top:5 ~classe:"combo";
-
-  window#show ();
-  window
-
-
-let main () =
-  let _ = GMain.Main.init () in
-  let prop_win = Propwin.init () in
-  let palette = xpm_window () in
-  main_window#show ();
-  main_window#connect#destroy ~callback:GMain.Main.quit;
-
-  let mp = main_project in
-  let f = new GMenu.factory main_menu in
-  let accel_group  = f#accel_group in
-  main_window#add_accel_group accel_group;
-  prop_win#add_accel_group accel_group;
-  palette#add_accel_group accel_group;
-
-  let file_menu    = new GMenu.factory (f#add_submenu "File") ~accel_group
-  and edit_menu    = new GMenu.factory (f#add_submenu "Edit") ~accel_group
-  and view_menu    = new GMenu.factory (f#add_submenu "View") ~accel_group
-  and project_menu = new GMenu.factory (f#add_submenu "Project") ~accel_group
-  in
-
-  file_menu#add_item "Quit" ~key:_Q ~callback:GMain.Main.quit;
-
-  project_menu#add_item "New" ~key:_N
-    ~callback:(fun () -> !mp#delete (); mp := new project ());
-  project_menu#add_item "Open..." ~key:_O ~callback:load;
-  project_menu#add_item "Save" ~key:_S ~callback:(fun () -> !mp#save ());
-  project_menu#add_item "Save as..." ~callback:(fun () -> !mp#save_as ());
-  project_menu#add_separator ();
-  project_menu#add_item "Emit code" ~callback:(fun () -> !mp#emit ());
-
-  let copy_item =
-    edit_menu#add_item "Copy" ~key:_C ~callback:(fun () -> !mp#copy ())
-  and cut_item =
-    edit_menu#add_item "Cut" ~key:_X ~callback:(fun () -> !mp#cut ())
-  and paste_item =
-    edit_menu#add_item "Paste" ~key:_V ~callback:(fun () -> !mp#paste ())
-  in
-  can_copy :=
-    (fun b -> copy_item#misc#set_sensitive b; cut_item#misc#set_sensitive b);
-  can_paste := paste_item#misc#set_sensitive;
-  !can_copy false; !can_paste false;
-  edit_menu#add_item "Undo" ~key:_Z ~callback:undo;
-
-  let palette_visible = ref true in
-  palette#event#connect#delete ~callback:
-    (fun _ -> palette_visible := false; palette#misc#hide (); true);
-  view_menu#add_item "Palette"
-    ~callback:(fun () ->
-      if !palette_visible then begin
-       palette#misc#hide ();
-       palette_visible := false
-      end else begin
-       palette#misc#show ();
-       palette_visible := true
-      end);
-  let prop_win_visible = ref true in
-  prop_win#event#connect#delete ~callback:
-    (fun _ -> prop_win_visible := false; prop_win#misc#hide (); true);
-  view_menu#add_item "Properties window"
-    ~callback:(fun () ->
-      if !prop_win_visible then begin
-       prop_win#misc#hide ();
-       prop_win_visible := false
-      end else begin
-       prop_win#misc#show ();
-       prop_win_visible := true
-      end);
-
-  GMain.Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/ml_gtk2.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/ml_gtk2.c
deleted file mode 100644 (file)
index 49ce27b..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/* $Id$ */
-
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "../../wrappers.h"
-#include "../../ml_glib.h"
-#include "../../ml_gdk.h"
-#include "../../ml_gtk.h"
-#include "../../gtk_tags.h"
-
-#include "gtktree2.h"
-#include "gtktreeitem2.h"
-
-#include <stdio.h>
-
-value Val_GtkObject_sink (GtkObject *);
-
-#define Val_GtkAny(w) Val_GtkObject((GtkObject*)w)
-#define Val_GtkAny_sink(w) Val_GtkObject_sink((GtkObject*)w)
-
-#define GtkWidget_val(val) check_cast(GTK_WIDGET,val)
-
-/* gtkwidget.h */
-
-
-#define Val_GtkWidget Val_GtkAny
-#define Val_GtkWidget_sink Val_GtkAny_sink
-
-
-/* gtktreeitem2.h */
-
-#define GtkTreeItem2_val(val) check_cast(GTK_TREE_ITEM2,val)
-ML_0 (gtk_tree_item2_new, Val_GtkWidget_sink)
-ML_1 (gtk_tree_item2_new_with_label, String_val, Val_GtkWidget_sink)
-ML_2 (gtk_tree_item2_set_subtree, GtkTreeItem2_val, GtkWidget_val, Unit)
-ML_1 (gtk_tree_item2_remove_subtree, GtkTreeItem2_val, Unit)
-ML_1 (gtk_tree_item2_expand, GtkTreeItem2_val, Unit)
-ML_1 (gtk_tree_item2_collapse, GtkTreeItem2_val, Unit)
-ML_1 (GTK_TREE_ITEM2_SUBTREE, GtkTreeItem2_val, Val_GtkWidget)
-
-/* gtktree2.h */
-
-#define GtkTree2_val(val) check_cast(GTK_TREE2,val)
-ML_0 (gtk_tree2_new, Val_GtkWidget_sink)
-ML_3 (gtk_tree2_insert, GtkTree2_val, GtkWidget_val, Int_val, Unit)
-ML_3 (gtk_tree2_clear_items, GtkTree2_val, Int_val, Int_val, Unit)
-ML_2 (gtk_tree2_select_item, GtkTree2_val, Int_val, Unit)
-ML_2 (gtk_tree2_unselect_item, GtkTree2_val, Int_val, Unit)
-ML_2 (gtk_tree2_select_child, GtkTree2_val, GtkWidget_val, Unit)
-ML_2 (gtk_tree2_unselect_child, GtkTree2_val, GtkWidget_val, Unit)
-ML_2 (gtk_tree2_child_position, GtkTree2_val, GtkWidget_val, Val_int)
-
-/*
-ML_2 (gtk_tree2_set_selection_mode, GtkTree2_val, Selection_mode_val, Unit)
-ML_2 (gtk_tree2_set_view_mode, GtkTree2_val, Tree_view_mode_val, Unit)
-*/
-
-ML_2 (gtk_tree2_set_view_lines, GtkTree2_val, Bool_val, Unit)
-ML_2 (gtk_tree2_item_up, GtkTree2_val, Int_val, Unit)
-ML_3 (gtk_tree2_select_next_child, GtkTree2_val, GtkWidget_val, Bool_val, Unit)
-ML_2 (gtk_tree2_select_prev_child, GtkTree2_val, GtkWidget_val, Unit)
-
-static value val_gtkany (gpointer p) { return Val_GtkAny(p); }
-value ml_gtk_tree2_selection (value tree)
-{
-  GList *selection = GTK_TREE2_SELECTION(GtkTree2_val(tree));
-  return Val_GList(selection, val_gtkany);
-}
-static gpointer gtkobject_val (value val) { return GtkObject_val(val); }
-value ml_gtk_tree2_remove_items (value tree, value items)
-{
-  GList *items_list = GList_val (items, gtkobject_val);
-  gtk_tree2_remove_items (GtkTree2_val(tree), items_list);
-  return Val_unit;
-}
-
-value ml_gtk_tree2_children (value tree)
-{
-  GList *children = (GtkTree2_val(tree))->children;
-  return Val_GList(children, val_gtkany);
-}
-
-
-
-#define GtkToolbar_val(val) check_cast(GTK_TOOLBAR,val)
-/* sets the text of the label of a button; creates the label
-   if necessary */
-value ml_gtk_toolbar2_set_text (value toolbar, value text, value pos)
-{
-  GtkToolbar *t = GtkToolbar_val(toolbar);
-  GtkToolbarChild *ch = (GtkToolbarChild *)g_list_nth_data (t->children, Int_val(pos));
-  GtkWidget *label = ch->label;
-
-  if (label)
-    gtk_label_set_text (GTK_LABEL(label), String_val(text));
-  else {
-    label = ch->label = gtk_label_new (String_val(text));
-    gtk_box_pack_end (GTK_BOX (GTK_BIN(ch->widget)->child), label, FALSE, FALSE, 0);
-    if (t->style != GTK_TOOLBAR_ICONS)
-      gtk_widget_show (label);
-  }
-
-  return Val_unit;
-}
-
-value ml_gtk_toolbar2_set_icon (value toolbar, value icon, value pos)
-{
-  GtkToolbar *t = GtkToolbar_val(toolbar);
-  GtkToolbarChild * ch =
-    (GtkToolbarChild *)g_list_nth_data (t->children, Int_val(pos));
-  GtkWidget *vbox = GTK_BIN(ch->widget)->child;
-  gtk_container_remove (GTK_CONTAINER(vbox), ch->icon);
-  ch->icon = GtkWidget_val(icon);
-  gtk_box_pack_end (GTK_BOX (vbox), ch->icon, FALSE, FALSE, 0);
-  if (t->style != GTK_TOOLBAR_TEXT)
-    gtk_widget_show (ch->icon);
-  
-  return Val_unit;
-}
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/notebook.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/notebook.xpm
deleted file mode 100644 (file)
index 77ac20d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *notebook_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+OOOOOO.OOOO.OOOO.+++",
-"+OXXXXX.X.X..X.X..+++",
-"+OXXXXX..X.X..X.X.+++",
-"+OXXXXX.X.X..X.X..+++",
-"+OXXXXX.OOOOOOOOOOO +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+OXXXXXXXXXXXXXXXX. +",
-"+O................. +",
-"+                   +",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/pixmap.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/pixmap.xpm
deleted file mode 100644 (file)
index d76a5ec..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char *pixmap_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 12 1",
-"  c Gray0",
-". c #007b00",
-"X c #7b7b7b",
-"o c Blue",
-"O c Green",
-"+ c Cyan",
-"@ c Yellow",
-"# c #d6d6d6",
-"$ c #b3cece",
-"% c Gray87",
-"& c Gray100",
-"* c None",
-/* pixels */
-"*********************",
-"*********************",
-"*********************",
-"*                    ",
-"* +++++%%%&+++++++++ ",
-"* +&&&++%%++&+++XX++ ",
-"* +++++++%+++++X@@X+ ",
-"* ++&&++++XX+++X@@X+ ",
-"* +++++++ XXX&++XX++ ",
-"* &+++++XXXXXX++++&+ ",
-"* +++++        +++++ ",
-"* +++++ ###### +++++ ",
-"* +++++ #o##o# +++++ ",
-"* ..... ###### ..... ",
-"* OOOOO ##oo## OOOOO ",
-"* OOOOO ##oo## OOOOO ",
-"* OOOOO        OOOOO ",
-"* OOOOOOOOOOOOOOOOOO ",
-"*                    ",
-"*********************",
-"*********************"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/property.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/property.ml
deleted file mode 100644 (file)
index 829e40b..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GEdit
-open GData
-open GPack
-open GMisc
-open GWindow
-
-open Common
-open Utils
-
-(* external id : 'a -> 'a = "%identity" *)
-
-class virtual vprop ~name ~init ~set =
-  object (self)
-    val mutable s : string = init
-    val name : string = name
-    method private virtual parse : string -> 'a
-    method get = s
-    method set s' =
-      if s' <> s then begin
-       let v = self#parse s' in
-       if (set v) then begin
-         add_undo (Property ((self :> prop), s));
-         s <- s'
-       end
-      end
-    method modified = s <> init
-    method name = name
-    method code = s
-    method virtual range : range
-    method save_code = self#code
-  end
-
-let invalid_prop kind name s =
-  invalid_arg (Printf.sprintf "Property.%s(%s) <- %s" kind name s)
-
-class prop_enum ~values ~name ~init ~set =
-  object (self)
-    inherit vprop ~name ~init ~set
-    method private parse s =
-      try List.assoc s values
-      with Not_found -> invalid_prop "enum" name s
-    method range = Enum (List.map ~f:fst values)
-  end
-
-(* used for radio_button groups; there is nothing to do
-  in radtest when setting a radio_button group, only when writing
-  code or saving *)
-class prop_enum_dyn ~values ~name ~init ~set =
-  object (self)
-    inherit vprop ~name ~init ~set
-    method private parse s = ()
-    method range = Enum (values ())
-  end
-
-let bool_values =
-  [ "true", true; "false", false ]
-
-let shadow_type_values : (string * Tags.shadow_type) list =
-  [ "NONE", `NONE; "IN", `IN; "OUT", `OUT;
-    "ETCHED_IN", `ETCHED_IN; "ETCHED_OUT", `ETCHED_OUT ]
-
-let policy_type_values : (string * Tags.policy_type) list =
-  [ "ALWAYS", `ALWAYS; "AUTOMATIC", `AUTOMATIC ]
-
-let orientation_values : (string * Tags.orientation) list =
-  [ "HORIZONTAL", `HORIZONTAL; "VERTICAL", `VERTICAL ]
-
-let toolbar_style_values : (string * Tags.toolbar_style) list =
-  [ "ICONS", `ICONS; "TEXT", `TEXT; "BOTH", `BOTH ]
-
-let toolbar_space_style_values : (string * [`EMPTY | `LINE]) list =
-  [ "EMPTY", `EMPTY; "LINE", `LINE ]
-
-let relief_style_values : (string * Tags.relief_style) list =
-  [ "NORMAL", `NORMAL; "HALF", `HALF; "NONE", `NONE ]
-
-let position_values : (string * Tags.position) list =
-  [ "LEFT", `LEFT; "RIGHT", `RIGHT; "TOP", `TOP; "BOTTOM", `BOTTOM ]
-
-let combo_use_arrows_values : (string * [ `NEVER | `DEFAULT | `ALWAYS ]) list =
-[ "NEVER", `NEVER; "DEFAULT", `DEFAULT; "ALWAYS", `ALWAYS ] 
-
-let spin_button_update_policy_values :
-    (string * Tags. spin_button_update_policy) list =
-  [ "ALWAYS", `ALWAYS; "IF_VALID", `IF_VALID ]
-
-let button_box_style_values : (string * Tags.button_box_style) list =
-  [ "DEFAULT_STYLE", `DEFAULT_STYLE; "SPREAD", `SPREAD; "EDGE", `EDGE;
-    "START", `START; "END", `END ]
-
-let update_type_values : (string * Tags.update_type) list =
-  [ "CONTINUOUS", `CONTINUOUS; "DISCONTINUOUS", `DISCONTINUOUS;
-    "DELAYED", `DELAYED ]
-
-
-class prop_bool = prop_enum ~values:bool_values
-
-(*
-class prop_variant ~values ~name ~init ~set : prop =
-  object
-    inherit prop_enum ~values ~name ~init ~set
-    method code = "`" ^ s
-  end
-*)
-
-class prop_shadow = prop_enum ~values:shadow_type_values
-class prop_policy = prop_enum ~values:policy_type_values
-class prop_orientation = prop_enum ~values:orientation_values
-class prop_toolbar_style = prop_enum ~values:toolbar_style_values
-class prop_toolbar_space_style = prop_enum ~values:toolbar_space_style_values
-class prop_relief_style = prop_enum ~values:relief_style_values
-class prop_position = prop_enum ~values:position_values
-class prop_combo_use_arrows = prop_enum ~values:combo_use_arrows_values
-class prop_spin_button_update_policy = prop_enum
-    ~values:spin_button_update_policy_values
-class prop_button_box_style = prop_enum ~values:button_box_style_values
-class prop_update_type = prop_enum ~values:update_type_values
-
-class prop_int ~name ~init ~set : prop =
-  object
-    inherit vprop ~name ~init ~set
-    method private parse s =
-      try int_of_string s with _ -> invalid_prop "int" name s
-    method range = Int
-  end
-
-(* NB: float_of_string doesn't raise an exception in case of error *)
-class prop_float ~name ~init ~min ~max ~set : prop =
-  object
-    inherit vprop ~name ~init ~set
-    method private parse s =
-      try float_of_string s with _ -> invalid_prop "float" name s
-    method code =
-      if String.contains s '.' || String.contains s 'e' then s
-      else s ^ ".0"
-    method range = Float(min,max)
-  end
-
-class prop_string ~name ~init ~set : prop =
-  object
-    inherit vprop ~name ~init ~set
-    method private parse s = s
-    method range = String
-    method code = "\"" ^ String.escaped s ^ "\""
-  end
-
-class prop_adjustment ~name ~init ~set : prop =
-  object
-    inherit vprop ~name ~init ~set
-    method private parse = get5floats_from_string
-    method range = Adjust
-  end
-
-class prop_clist_titles ~name ~init ~set : prop =
-  object
-    inherit vprop ~name ~init ~set
-    method private parse = split_string ~sep:' '
-    method range = CList_titles
-    method code = "[ \"" ^
-      String.concat ~sep:"\"; \"" (split_string ~sep:' ' s) ^ "\" ]"
-    method save_code = "\"" ^ s ^ "\""
-  end
-
-class prop_file ~name ~init ~set : prop =
-  object
-    inherit vprop ~name ~init ~set
-    method private parse s = s
-    method range = File
-    method code = "\"" ^ String.escaped s ^ "\""
-  end
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/property.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/property.mli
deleted file mode 100644 (file)
index ccf2650..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-(* $Id$ *)
-
-open Gtk.Tags
-open Common
-
-class virtual vprop :
-  name:string ->               (* property's name *)
-  init:string ->               (* default value *)
-  set:('a -> bool) ->
-  object
-    val name : string
-    val mutable s : string
-    method code : string       (* encoded value *)
-    method get : string
-    method modified : bool
-    method name : string
-    method private virtual parse : string -> 'a
-    method virtual range : range
-    method save_code : string
-    method set : string -> unit
-  end
-
-class prop_int :
-  name:string -> init:string -> set:(int -> bool) -> prop
-
-class prop_float :
-  name:string ->
-  init:string -> min:float -> max:float -> set:(float -> bool) -> prop
-
-class prop_string :
-  name:string -> init:string -> set:(string -> bool) -> prop
-
-class prop_bool :
-  name:string -> init:string -> set:(bool -> bool) -> prop
-(*
-class prop_variant :
-  values:(string * 'a) list ->
-  name:string -> init:string -> set:('a -> bool) -> prop
-*)
-class prop_shadow :
-  name:string -> init:string -> set:(shadow_type -> bool) -> prop
-
-class prop_policy :
-  name:string -> init:string -> set:(policy_type -> bool) -> prop
-
-class prop_orientation :
-  name:string ->
-  init:string -> set:(Gtk.Tags.orientation -> bool) -> prop
-
-class prop_toolbar_style :
-  name:string ->
-  init:string -> set:(Gtk.Tags.toolbar_style -> bool) -> prop
-
-class prop_toolbar_space_style :
-  name:string -> init:string -> set:([ `EMPTY | `LINE] -> bool) -> prop
-
-class prop_relief_style :
-  name:string ->
-  init:string -> set:(Gtk.Tags.relief_style -> bool) -> prop
-
-class prop_position :
-  name:string ->
-  init:string -> set:(Gtk.Tags.position -> bool) -> prop
-
-class prop_combo_use_arrows :
-  name:string ->
-  init:string -> set:([ `NEVER | `DEFAULT | `ALWAYS] -> bool) -> prop
-
-class prop_spin_button_update_policy :
-  name:string ->
-  init:string -> set:(Gtk.Tags.spin_button_update_policy -> bool) -> prop
-
-class prop_button_box_style :
-  name:string ->
-  init:string -> set:(Gtk.Tags.button_box_style -> bool) -> prop
-
-class prop_update_type :
-  name:string ->
-  init:string -> set:(Gtk.Tags.update_type -> bool) -> prop
-
-class prop_enum_dyn :
-  values:(unit -> string list) -> name:string ->
-  init:string -> set:(unit -> bool) -> prop
-
-class prop_adjustment :
-  name:string -> init:string ->
-    set:(float * float * float * float * float -> bool) -> prop
-
-class prop_clist_titles :
-  name:string -> init:string ->
-    set:(string list -> bool) -> prop
-
-class prop_file :
-  name:string -> init:string -> set:(string -> bool) -> prop
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/propwin.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/propwin.ml
deleted file mode 100644 (file)
index 2f8b291..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-(* $Id$ *)
-
-open GObj
-
-open Common
-open Utils
-
-class type tiwidget_base = object
-  method name : string
-  method proplist : (string * prop) list
-end
-
-let prop_widget (prop : prop) =
-  match prop#range with
-    Enum l ->
-      let w = GEdit.combo ~popdown_strings:l ~use_arrows:`ALWAYS () in
-      w#entry#connect#changed ~callback:(fun () -> prop#set w#entry#text);
-      w#entry#set_editable false;
-      w#entry#set_text prop#get;
-      w#coerce
-  | String ->
-      let w = GEdit.entry ~text:prop#get () in
-      w#connect#activate ~callback:(fun () -> prop#set w#text);
-      w#coerce
-  | File ->
-      let w = GPack.hbox () in
-      let e = GEdit.entry ~text:prop#get ~editable:false ~packing:w#pack () in
-      let b = GButton.button ~label:"..." ~packing:w#pack () in
-      b#connect#clicked
-       ~callback:(fun () -> get_filename
-           ~callback:(fun name -> e#set_text name; prop#set name) (); ());
-      w#coerce
-  | Int ->
-      let adjustment =
-       GData.adjustment ~value:(float_of_string prop#get)
-         ~lower:(-2.) ~upper:5000. ~step_incr:1. ~page_incr:10. ~page_size:0. ()
-      in
-      let w = GEdit.spin_button ~rate:0.5 ~digits:0 ~adjustment () in
-      w#connect#activate
-       ~callback:(fun () -> prop#set (string_of_int w#value_as_int));
-      w#coerce
-  | Float (lower, upper) ->
-(*      let adjustment =
-       GData.adjustment ~value:(float_of_string prop#get)
-         ~lower ~upper ~step_incr:((upper-.lower)/.100.)
-         ~page_incr:((upper-.lower)/.10.) ~page_size:0. ()
-      in
-      let w = GEdit.spin_button ~rate:0.5 ~digits:2 ~adjustment () in
-      w#connect#activate
-       ~callback:(fun () -> prop#set (string_of_float w#value));
-      w#coerce
-*)
-      let w = entry_float ~init:(float_of_string prop#get) () in
-      w#connect#activate
-       ~callback:(fun () -> prop#set (string_of_float w#value));
-      w#coerce
-(*  | Adjust ->
-      let wpop = GWindow.window ~title:"Adjustment values" () in
-      let vb = GPack.vbox ~packing:wpop#add()  in
-      let hb1 = GPack.hbox ~packing:vb#pack () in
-      let l1 = GMisc.label ~text:"lower" ~packing:hb1#pack () in
-      let e1 = entry_float ~packing:hb1#pack
-         ~init:(float_of_string prop#get) ~set:prop#set in
-*)    
-  | CList_titles ->
-      let wpop = GWindow.window ~title:"titles of the columns" () in
-      let vb = GPack.vbox ~packing:wpop#add () in
-      let titles = split_string prop#get ~sep:' ' in
-      let n = List.length titles in
-      let rtitles = ref titles in
-      let rget = ref [] and rset = ref [] in
-      for i = 1 to n do
-       match !rtitles with
-       | hd::tl ->
-           let hb = GPack.hbox ~packing:vb#pack () in
-           let _ = GMisc.label ~text:("column" ^ (string_of_int i))
-               ~packing:hb#pack () in
-           let e = GEdit.entry ~text:hd ~packing:hb#pack () in
-           rtitles := tl;
-           rget := (fun () -> e#text) :: !rget;
-           rset := e#set_text :: !rset;
-       | _ -> failwith "CList_titles: this cannot happen!!"
-      done;
-      rtitles := titles;
-      rget := List.rev !rget;
-      rset := List.rev !rset;
-      let hb = GPack.hbox ~packing:vb#pack () in
-      let ok = GButton.button ~label:"OK" ~packing:hb#pack () in
-      let cancel = GButton.button ~label:"Cancel" ~packing:hb#pack () in
-      ok#connect#pressed
-       ~callback:(fun () ->
-         let tit = List.map ~f:(fun f -> f ()) !rget in
-         prop#set (String.concat ~sep:" " tit);
-         rtitles := tit;
-         wpop#misc#hide ());
-      cancel#connect#pressed
-       ~callback:(fun () ->
-         wpop#misc#hide ();
-         List.iter2 ~f:(fun f v -> f v) !rset !rtitles);
-      let e = GEdit.entry ~text:"double click here" ~editable:false () in
-      e#event#connect#button_press ~callback:
-       (fun ev -> 
-          GdkEvent.get_type ev = `TWO_BUTTON_PRESS &&
-         GdkEvent.Button.button ev = 1 &&
-          begin
-           wpop#misc#show ();
-            GtkSignal.stop_emit ();
-            true
-         end);
-      e#coerce
-
-let prop_box list =
-  let vbox = GPack.vbox () in
-  List.iter list ~f:
-    begin fun (name, prop) ->
-      let hbox =
-       GPack.hbox ~homogeneous:true ~packing:(vbox#pack ~expand:false) () in
-      GMisc.label ~text:name ~packing:hbox#pack ();
-      hbox#pack ~fill:true (prop_widget prop);
-      GMisc.separator `HORIZONTAL ~packing:(vbox#pack ~expand:false) ();
-      ()
-    end;
-  vbox
-
-class ['a] frozen lz = object
-  method get : 'a = Lazy.force lz
-end
-
-let vbox =
-  new frozen (lazy (GWindow.window ~show:true ~title:"Properties" ()))
-
-let init () = vbox#get
-
-let widget_pool = Hashtbl.create 7
-
-let boxref = ref None
-let shown_widget = ref ""
-
-let show_prop_box vb =
-  Gaux.may !boxref ~f:vbox#get#remove;
-  vbox#get#add vb#coerce;
-  boxref := Some vb#coerce
-
-let show (w : #tiwidget_base) =
-  let name = w#name in
-  let vb =
-    try
-      Hashtbl.find widget_pool name
-    with Not_found ->
-      let vb = prop_box w#proplist in
-      Hashtbl.add widget_pool ~key:name ~data:vb;
-      vb
-  in
-  show_prop_box vb;
-  shown_widget := name
-
-let add (w : #tiwidget_base) =
-  let vb = prop_box w#proplist in
-  Hashtbl.add widget_pool ~key:w#name ~data:vb
-
-
-let remove name =
-  Hashtbl.remove widget_pool name;
-  if !shown_widget = name then begin
-    shown_widget := "";
-    show_prop_box (GMisc.label ~text:"No widget selected" ())
-  end
-
-(*
-let change_name oldname newname =
-  let vb = Hashtbl.find widget_pool oldname in
-  Hashtbl.remove widget_pool oldname;
-  Hashtbl.add widget_pool ~key:newname ~data:vb
-*)
-
-let update (w : #tiwidget_base) show_modif =
-  let vb = prop_box w#proplist in
-  Hashtbl.remove widget_pool w#name;
-  Hashtbl.add widget_pool ~key:w#name ~data:vb;
-  if show_modif && !shown_widget = w#name then show_prop_box vb
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/propwin.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/propwin.mli
deleted file mode 100644 (file)
index 6636a4f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-(* $Id$ *)
-
-open Common
-
-val init : unit -> GWindow.window
-val show : #tiwidget_base -> unit
-val add : #tiwidget_base -> unit
-val remove : string -> unit
-(* val change_name : string -> string -> unit *)
-val update : #tiwidget_base -> bool -> unit
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/radiobutton.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/radiobutton.xpm
deleted file mode 100644 (file)
index 0f5fbbd..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *radiobutton_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"++++++++++.++++++++++",
-"+++++++++...+++++++++",
-"++++++++.. ..++++++++",
-"+++++++.. X ..+++++++",
-"++++++.. XXX ..++++++",
-"+++++.. XXXXX ..+++++",
-"++++++OOXXXXXOO++++++",
-"+++++++OOXXXOO+++++++",
-"++++++++OOXOO++++++++",
-"+++++++++OOO+++++++++",
-"++++++++++O++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/scrolledwindow.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/scrolledwindow.xpm
deleted file mode 100644 (file)
index 44e59f6..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* XPM */
-static char *scrolledwindow_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 3 1",
-"  c Gray0",
-". c #d6d6d6",
-"X c Gray100",
-/* pixels */
-"XXXXXXXXXXXXXXXXXXXXX",
-"X.............X..... ",
-"X.............X.. .. ",
-"X.............X.   . ",
-"X.............X..... ",
-"X.............X      ",
-"X.............XXXXXX ",
-"X.............XX.... ",
-"X.............XX.... ",
-"X.............XXXXXX ",
-"X.............X..... ",
-"X.............X.   . ",
-"X.............X.. .. ",
-"X.............X..... ",
-"XXXXXXXXXXXXXXX      ",
-"X.... XXX .... ......",
-"X.. . X.. . .. ......",
-"X.  . X.. .  . ......",
-"X.. . X.. . .. ......",
-"X.... X.. .... ......",
-"X              ......"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/spinbutton.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/spinbutton.xpm
deleted file mode 100644 (file)
index f3a313b..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *spinbutton_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+                   +",
-"+ OOOOOOOOOOO OOOOO +",
-"+ OOOOOOOOOOO OX X. +",
-"+ OOOOOOOOOOO O   . +",
-"+ OOOOOOOOOOO OOOOO +",
-"+ OOOOOOOOOOO O   . +",
-"+ OOOOOOOOOOO OX X. +",
-"+ OOOOOOOOOOO ..... +",
-"+                   +",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/statusbar.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/statusbar.xpm
deleted file mode 100644 (file)
index 8576d88..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* XPM */
-static char *statusbar_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 7 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray87",
-"+ c Gray100",
-"@ c None",
-/* pixels */
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@+XX.@@@@@@@@@@@@@@",
-"@@@+XX.@@@@@@@@@@@@@@",
-"@@@+XX.@@@@@@@@@@@@@@",
-"@@@+XX.@@@@@@@@@@@@@@",
-"@@@+XX++++++++++++@@@",
-"@@@+XXXXXXXXXXXXXX@@@",
-"@@@+XXXXXXXXXXXXXX@@@",
-"@@@+XX............@@@",
-"@@@+XX.OOOOOOOOOOO@@@",
-"@@@+XX.OOOOOOOOOOO@@@",
-"@@@+XX.OOOOOOOOOOO@@@",
-"@@@+XX++++++++++++@@@",
-"@@@+XXXXXXXXXXXXXX@@@",
-"@@@+XXXXXXXXXXXXXX@@@",
-"@@@               @@@",
-"@@@@@@@@@@@@@@@@@@@@@",
-"@@@@@@@@@@@@@@@@@@@@@"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiBase.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiBase.ml
deleted file mode 100644 (file)
index 3907493..0000000
+++ /dev/null
@@ -1,671 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GObj
-open GContainer
-
-open Utils
-open Common
-open Property
-
-(* possible children; used to make the menus *)
-let widget_add_list =
-  [ "vbox"; "hbox"; "vbutton_box"; "hbutton_box"; "fixed";
-    "frame"; "aspect_frame"; "handle_box"; "event_box";
-    "hseparator"; "vseparator"; "statusbar"; "label"; "notebook";
-    "color_selection";
-    "button";
-    "toggle_button"; "check_button"; "radio_button"; "scrolled_window";
-
-    "entry"; "spin_button"; "combo"; "clist"; "toolbar"]
-
-
-(*********** selection ***********)
-
-let selection = ref ""
-let window_selection = ref ""
-
-
-(**************** signals class ***************)
-
-class tiwidget_signals ~signals =
-  let name_changed : string signal = signals in
-  object
-    val after = false
-    method after = {< after = true >}
-    method name_changed = name_changed#connect ~after
-  end
-
-
-(************* class type ***************)
-(* the ti<gtkwidget> classes encapsulate the corresponding gtk
-   widget which will be in the gtk-window and a tree item
-   labelled with the name of the widget which will be in the
-   tree-window.
-   all these classes have the same following interface *)
-
-class virtual tiwidget0 = object
-  method virtual widget : GObj.widget
-  method virtual connect_event : GObj.event_signals
-  method virtual parent : tiwidget0 option
-  method virtual set_parent : tiwidget0 -> unit
-  method virtual base : GObj.widget
-  method virtual tree_item : GTree2.tree_item
-  method virtual tree : GTree2.tree
-  method virtual children : (tiwidget0 * Gtk.Tags.pack_type) list
-  method virtual name : string
-  method virtual proplist : (string * prop) list
-  method virtual add_to_proplist : (string * prop) list -> unit
-  method virtual change_name_in_proplist : string -> string -> unit
-  method virtual set_property : string -> string -> unit
-  method virtual forall :  callback:(tiwidget0 -> unit) -> unit
-  method virtual remove : tiwidget0 -> unit
-(*  method virtual add_child_with_name : string -> string -> pos:int -> tiwidget0 *)
-  method virtual add_children : ?pos:int -> yywidget_tree -> unit
-  method virtual add_children_wo_undo : ?pos:int -> yywidget_tree -> string
-  method virtual remove_me  : unit -> unit
-  method virtual remove_me_without_undo  : unit -> unit
-  method virtual emit_code : Format.formatter -> char list -> unit
-  method virtual emit_init_code : Format.formatter -> packing:string -> unit
-  method virtual emit_method_code : Format.formatter -> unit
-  method virtual emit_initializer_code : Format.formatter -> unit
-  method virtual save : Format.formatter -> unit
-  method virtual copy : unit -> unit
-  method virtual connect : tiwidget_signals
-  method virtual disconnect : GtkSignal.id -> bool
-  method virtual child_up : tiwidget0 -> unit
-  method virtual up : unit -> unit
-  method virtual child_down : tiwidget0 -> unit
-  method virtual down : unit -> unit
-  method virtual next : tiwidget0
-  method virtual next_child : tiwidget0 -> tiwidget0
-  method virtual last : tiwidget0
-  method virtual prev : tiwidget0
-  method virtual set_full_menu : bool -> unit
-end
-
-class virtual window_and_tree0 = object
-  method virtual tiwin : tiwidget0
-(*  method virtual tree_window : window *)
-  method virtual change_selected : tiwidget0 -> unit
-  method virtual remove_sel : tiwidget0 -> unit
-  method virtual add_param : char
-  method virtual remove_param : char -> unit
-(*  method virtual emit : unit -> unit *)
-end
-
-(* forward declaration of function new_widget *)
-let new_tiwidget :
-    (classe:string -> ?pos:int -> name:string ->parent_tree:GTree2.tree ->
-      ?insert_evbox:bool -> ?listprop:(string * string) list -> window_and_tree0 -> tiwidget0) ref =
-  ref (fun ~classe ?pos ~name ~parent_tree ?insert_evbox ?listprop w -> failwith "new_tiwidget")
-
-
-let widget_map = Hashtbl.create 17
-
-(* list of names of radio_buttons (for groups) *)
-let radio_button_pool = ref []
-
-
-(************* window creation class *************)
-(* an instance of this class is created for each window opened
-   in radtest. It contains the tree window and the gtk window (tiwin) *)
-
-class window_and_tree ~name =
-  let tree_window = GWindow.window ~show:true ~title:(name ^ "-Tree") () in
-  let vbox = GPack.vbox ~spacing:2 ~packing:tree_window#add () in
-  let root_tree = GTree2.tree ~packing:vbox#pack ~selection_mode:`EXTENDED () in
-  let project_tree_item = GTree2.tree_item () in
-  let label = GMisc.label ~text:name ~xalign:0. ~yalign:0.5
-      ~packing:project_tree_item#add () in
-
-  object(self)
-
-    inherit window_and_tree0
-
-(* the params of the window class; because the class clist needs a param
-   I suppose there will be no more than 26 clists in a single window    *)
-    val param_list = Array.create 26 false
-
-    method add_param =
-      let i = ref 0 in
-      while param_list.(!i) do incr i done;
-      param_list.(!i) <- true;
-      char_of_int (97 + !i)
-
-    method remove_param c =
-      param_list.(int_of_char c - 97) <- false
-
-    method private param_list =
-      let r = ref [] in
-      for i = 25 downto 0 do
-       if Array.unsafe_get param_list i then r := (char_of_int (i+97)) :: !r
-      done;
-      !r
-
-(* I use magic here because the real initialization is done
-   below in the initializer part. It can't be done here because
-   of the call to self *)
-    val mutable tiwin = (Obj.magic 0 : tiwidget0)
-
-    method tiwin = tiwin
-    method tree_window = tree_window
-
-    method project_tree_item = project_tree_item
-
-(* the selected item in this window *)
-    val mutable selected = (None : tiwidget0 option)
-
-(* what to do when a new item is selected.
-   this method is passed to all the tiwidgets (by the select_fun
-   parameter) and they will call it when they are clicked on;
-   she is also called when changing the selection the arrow keys
-   (see in the initializer part) *)
-    method change_selected sel =
-      match selected with
-      |        None ->
-         selected <- Some sel;
-         sel#tree_item#misc#set_state `SELECTED;
-         sel#base#misc#set_state `SELECTED;
-         Propwin.show sel
-      |        Some old_sel ->
-         if sel = old_sel then begin
-           selected <- None;
-           sel#base#misc#set_state `NORMAL;
-           sel#tree_item#misc#set_state `NORMAL
-         end else begin
-           old_sel#tree_item#misc#set_state `NORMAL;
-           old_sel#base#misc#set_state `NORMAL;
-           selected <- Some sel;
-           sel#tree_item#misc#set_state `SELECTED;
-           sel#base#misc#set_state `SELECTED;
-           Propwin.show sel
-         end
-
-(* the tiwidget tiw is being removed; if it was selected,
-   put the selection to None *)
-    method remove_sel tiw =
-      match selected with
-      |        Some sel when sel = tiw -> selected <- None
-      |        _ -> ()
-
-(* emits the code corresponding to this window *)
-    method emit c = tiwin#emit_code c self#param_list;
-
-    method delete () =
-      tiwin#remove_me_without_undo ();
-      tree_window#destroy ();
-
-    initializer
-      tiwin <- !new_tiwidget ~classe:"window" ~name ~parent_tree:root_tree
-         (self : #window_and_tree0 :> window_and_tree0);
-
-      tiwin#connect#name_changed ~callback:
-         (fun n -> label#set_text n; tree_window#set_title (n ^ "-Tree"));
-
-      Propwin.show tiwin;
-
-      tree_window#event#connect#key_press ~callback:
-       begin fun ev ->
-         let state = GdkEvent.Key.state ev in
-         let keyval = GdkEvent.Key.keyval ev in
-         if keyval = GdkKeysyms._Up then begin
-           match selected with
-           | None -> ()
-           | Some t -> 
-               if List.mem `CONTROL state then t#up ()
-               else try
-                 self#change_selected t#prev
-               with Not_found -> ()
-         end
-         else if keyval = GdkKeysyms._Down then begin
-           match selected with
-           | None -> ()
-           | Some t -> 
-               if List.mem `CONTROL state then t#down ()
-               else try
-                 self#change_selected t#next
-               with Not_found -> ()
-         end;
-         GtkSignal.stop_emit ();
-          true
-       end;
-      ()
-  end
-
-
-
-(***************** class implementation *****************)
-(* this is the base class of the ti<gtkwidget> hierarchy.
-   all these classes will inherit from tiwidget, but without
-   adding new methods. In this way all the classes have the
-   same interface and we can use them in lists, pass them to
-   functions without caring on the type.
-   All methods needed by any of the classes are defined in
-   tiwidget but if a method is not pertinent in tiwidget
-   it has for implementation:
-      failwith "<name of the method>"
-   the real implementation of the method is done in the
-   class (or classes) in which it is needed (or sometimes
-   in tiwidget anyway).
-   Additionally, to workaround some problem with recursive types
-   the type of the (public) methods of tiwidget is defined in
-   tiwidget0 of which tiwidget inherits.
-   The parent_tree parameter is the tree in which the
-   tiwidget#tree_item will be inserted at position :pos.
-*)
-
-class virtual tiwidget ~name ~parent_tree:(parent_tree : GTree2.tree) ~pos
-    ~widget ?(insert_evbox=true) (parent_window : window_and_tree0) =
-object(self)
-
-  inherit tiwidget0
-  inherit has_ml_signals
-
-  val evbox =
-    if insert_evbox then
-      let ev = GBin.event_box () in ev#add widget#coerce; Some ev
-    else None
-
-(* used only for windows delete_event *)
-  method connect_event = failwith "tiwidget::connect_event"
-
-  val widget = widget#coerce
-  method widget = widget
-
-  val mutable parent = None
-  method set_parent p = parent <- Some p
-  method parent =  parent
-  method private sure_parent =
-    match parent with
-    | None -> failwith "sure_parent"
-    | Some p -> p
-
-  method base =
-    match evbox with
-    | None -> widget#coerce
-    | Some ev -> ev#coerce
-
-(* this is the name used in new_tiwidget for the creation
-   of an object of this class *)
-  val mutable classe = ""
-
-  val tree_item = GTree2.tree_item ()
-  method tree_item = tree_item
-
-  val mutable stree = GTree2.tree ()
-  method tree = stree
-
-  val label = GMisc.label ~text:name ~xalign:0. ~yalign:0.5 ()
-
-  val mutable name : string = name
-  method name = name
-
-(* this is the complete name for the creation of the widget
-   in lablgtk e.g. GPack.vbox; used in emit_init_code *)
-  method private class_name = ""
-
-  val mutable proplist : (string * prop) list = []
-  method proplist = proplist
-  method private get_mandatory_props = []
-
-  method add_to_proplist plist = proplist <- proplist @ plist
-
-(* for children of a box *)
-  method change_name_in_proplist : string -> string -> unit =
-    fun _ _ -> ()
-  method set_property name value_string = try
-    (List.assoc name proplist)#set value_string
-  with Not_found -> Printf.printf "Property not_found %s, %s\n" name value_string;
-    flush stdout
-
-  method private get_property name =
-    (List.assoc name proplist)#get
-
-
-(* the proplist with some items removed e.g. the expand... in a box
-   used for saving and emitting code *)
-  method private emit_clean_proplist =
-    List.fold_left ~f:(fun l p -> List.remove_assoc p l)
-      ~init:proplist
-      ([ "name"; "expand"; "fill"; "padding" ] @ self#get_mandatory_props)
-(*  method private emit_clean_proplist plist =
-    List.fold_left ~init:plist ~f:
-      (fun pl propname -> List.remove_assoc propname pl)
-       [ "name"; "expand"; "fill"; "padding" ]
-*)
-
-  method private save_clean_proplist =
-    List.fold_left ~f:(fun l p -> List.remove_assoc p l)
-      ~init:proplist ("name" :: self#get_mandatory_props)
-(*  method private save_clean_proplist =
-    List.remove_assoc "name" proplist *)
-
-  val mutable children : (tiwidget0 * Gtk.Tags.pack_type) list = []
-  method children = children
-  method forall =
-    fun ~callback -> List.iter (List.map children ~f:fst) ~f:callback
-
-(* encapsulate container#add and container#remove 
-   they are here because they depend on the type of the widget:
-   e.g.: gtkbin->add scrolled_window->add_with_viewport box->pack *)
-  method private add = failwith (name ^ "::add")
-  method remove = failwith (name ^ "::remove")
-
-
-(* removes self from his parent;
-   will be different for a window *)
-  method remove_me () =
-    let sref = ref "" in
-    self#save_to_string sref;
-    let pos = list_pos ~item:(self : #tiwidget0 :> tiwidget0)
-       (List.map self#sure_parent#children ~f:fst) in
-    let lexbuf = Lexing.from_string !sref in
-    let node = Load_parser.widget Load_lexer.token lexbuf in
-    add_undo (Add (self#sure_parent#name, node, pos));
-    self#remove_me_without_undo ()
-
-  method remove_me_without_undo () =
-(* it should be enough to only recursively remove the children from the
-   name_list and do the tip#remove and tip#tree#remove
-   only for self *)
-    self#forall ~callback:(fun tiw -> tiw#remove_me_without_undo ());
-    parent_window#remove_sel (self : #tiwidget0 :> tiwidget0);
-    match parent with
-    | None -> failwith "remove without parent"
-    | Some (tip : #tiwidget0) ->
-       tip#tree#remove tree_item;
-       tip#remove (self : #tiwidget0 :> tiwidget0);
-       name_list := list_remove !name_list ~f:(fun n -> n=name);
-       Hashtbl.remove widget_map name;
-       Propwin.remove name
-
-(* used for undo *)
-  method private remove_child_by_name name () =
-    let child = fst (List.find children
-       ~f:(fun (ch, _) -> ch#name = name)) in
-    child#remove_me ()
-
-(* for most widgets we make a child with new_tiwidget and then add it
-   to self; for toolbars we use toolbar#insert_button...     *)
-      method private make_child = !new_tiwidget
-
-(* adds a child and shows his properties;
-   used when adding a child by the menu or DnD *)
-  method private add_child classe ?name ?(undo = true) ?(affich = true) ?(pos = -1) ?(listprop = []) () =
-    let name = match name with
-    | None -> make_new_name classe
-    | Some n -> n in
-    let child = self#make_child ~classe ~name ~parent_tree:stree parent_window ~pos ~listprop in
-    child#set_parent (self : #tiwidget0 :> tiwidget0);
-    self#add child ~pos;
-    if affich then Propwin.show child;
-    if undo then add_undo (Remove name);
-    child
-
-
-(* adds the subtree saved in the Node *)
-  method add_children ?(pos = -1) node =
-    let child_name = self#add_children_wo_undo node ~pos in
-    add_undo (Remove child_name)
-
-  method add_children_wo_undo ?(pos = -1) (Node (child, children)) =
-    let classe, name, property_list = child in
-    let rname = change_name name in
-    let tc = self#add_child classe ~name:rname ~undo:false ~affich:false ~pos ~listprop:property_list () in
-    List.iter (List.rev children)
-      ~f:(fun c -> tc#add_children_wo_undo c; ());
-    List.iter property_list ~f:(fun (n,v) -> tc#set_property n v);
-    rname
-
-(* only a tiwindow can emit code *)
-  method emit_code = failwith "emit_code"
-
-(* some methods for emitting code *)
-(* this one calculates the expand, fill and padding parameters
-   of a box child *)
-  method private get_packing packing =
-    let aux name =
-      let prop  = List.assoc name proplist in
-      if prop#modified then " ~" ^ name ^ ":" ^ prop#code else ""
-    in
-    let efp = try
-      (aux "expand") ^ (aux "fill") ^ (aux "padding")
-    with Not_found -> "" in
-    if efp = "" then ("~packing:" ^ packing)
-    else ("~packing:(" ^ packing ^ efp ^ ")")
-
-(* this one emits the declaration code of the widget *)
-  method emit_init_code formatter ~packing =
-    Format.fprintf formatter "@ @[<hv 2>let %s =@ @[<hov 2>%s"
-      name self#class_name;
-    List.iter self#get_mandatory_props
-      ~f:begin fun name ->
-       Format.fprintf formatter "@ ~%s:%s" name
-         (List.assoc name proplist)#code
-      end;
-    let packing = self#get_packing packing in
-    if packing <> "" then Format.fprintf formatter "@ %s" packing;
-    self#emit_prop_code formatter;
-    Format.fprintf formatter "@ ()@ in@]@]"
-
-(* this one emits the properties which do not have their
-   default value; used by emit_init_code *)
-  method private emit_prop_code formatter =
-    let mandatory = self#get_mandatory_props in
-    List.iter self#emit_clean_proplist ~f:
-      begin  fun (name, prop) ->
-       if List.mem name mandatory then () else
-       if prop#modified then
-         Format.fprintf formatter "@ ~%s:%s" prop#name prop#code
-      end
-
-(* this one emits the method returning this widget *)
-  method emit_method_code formatter =
-    Format.fprintf formatter "@ method %s = %s" name name;
-
-(* emits the code in the initializer part for this widget *)
-  method emit_initializer_code _ = ()
-
-(* for saving the project to a file. Used also by copy and cut *)
-  method private save_start formatter =
-    Format.fprintf formatter "@\n@[<2><%s name=%s>" classe name;
-    List.iter
-      ~f:(fun p -> Format.fprintf formatter 
-         "@\n%s=\"%s\"" p (List.assoc p proplist)#get)
-      self#get_mandatory_props
-      
-
-  method private save_end formatter =
-    Format.fprintf formatter "@]@\n</%s>" classe
-
-  method save formatter =
-    self#save_start formatter;
-    List.iter self#save_clean_proplist ~f:
-      (fun (name, prop) ->
-       if prop#modified then
-         Format.fprintf formatter "@\n%s=%s" name prop#save_code);
-    self#forall ~callback:(fun w -> w#save formatter);
-    self#save_end formatter
-
-
-  method private save_to_string string_ref =
-    let b = Buffer.create 80 in
-    let f = Format.formatter_of_buffer b in
-    self#save f;
-    Format.pp_print_flush f ();
-    string_ref := Buffer.contents b
-
-  method private copy_to_sel selection = self#save_to_string selection
-
-  method copy () = self#copy_to_sel selection
-
-  method private cut () =
-    self#copy ();
-    self#remove_me ()
-
-  method private paste () =
-    let lexbuf = Lexing.from_string !selection in
-    let node = Load_parser.widget Load_lexer.token lexbuf in
-    self#add_children node
-    
-
-(* ML signal used when the name of the widget is changed *)
-  val name_changed : string signal = new signal
-  method connect = new tiwidget_signals ~signals:name_changed
-  method private call_name_changed = name_changed#call
-
-
-(* this is necessary because gtk_tree#remove deletes the tree
-   when removing the last item  *)
-(* suppressed this in gtktree2 
-  method new_tree () =
-    stree <- GTree2.tree;
-    tree_item#set_subtree stree;
-    tree_item#expand ()
-*)
-
-(* when full_menu is true we use the menu else the restricted menu *)
-  val mutable full_menu  = true
-  method set_full_menu b = full_menu <- b
-
-(* the menu for this widget 
-   This menu is recalculated when one clicks on the 3rd button.
-   There is nothing to do e.g. when the name of the widget changes,
-   it will change in the menu the next time. *)
-  method private menu ~time = self#restricted_menu ~time
-
-(* the restricted menu for this widget 
-   used for containers when they are full *)
-  method private restricted_menu ~time =
-    let menu = GMenu.menu () in
-    let mi_remove = GMenu.menu_item ~packing:menu#append       ~label:"remove" ()
-    and mi_cut  = GMenu.menu_item ~packing:menu#append ~label:"Cut" ()
-    and mi_copy = GMenu.menu_item ~packing:menu#append ~label:"Copy" () in
-    mi_remove#connect#activate ~callback:self#remove_me;
-    mi_copy#connect#activate ~callback:self#copy;
-    mi_cut#connect#activate ~callback:self#cut;
-    menu#popup ~button:3 ~time
-
-(* changes all that depends on the name *)
-  method private set_new_name new_name =
-    if test_unique new_name then begin
-      Hashtbl.remove widget_map name;
-      Hashtbl.add widget_map ~key:new_name
-       ~data:(self : #tiwidget0 :> tiwidget0);
-      if (classe = "radio_button") then begin
-       radio_button_pool := new_name ::
-         (list_remove !radio_button_pool ~f:(fun x -> x = name));
-       List.iter
-         ~f:(fun x -> Propwin.update (Hashtbl.find widget_map x) false)
-         !radio_button_pool
-      end;
-      label#set_text new_name;
-      let old_name = name in
-      name <- new_name;
-(*      Propwin.change_name old_name new_name; *)
-      name_list :=
-       new_name :: (list_remove !name_list ~f:(fun n -> n=old_name));
-      begin match self#parent with
-      | None -> ()
-      | Some p -> p#change_name_in_proplist old_name new_name
-      end;
-      self#call_name_changed new_name;
-      true
-    end
-    else begin
-      message_name ();
-      Propwin.update self true;
-      false
-    end
-
-
-(* moves the present tiw up in his parents' children list *)
-(* does something only when the parent is a box *)
-  method child_up = fun _ -> ()
-
-  method up () = match parent with
-  | None -> ()
-  | Some t -> t#child_up (self : #tiwidget0 :> tiwidget0)
-
-  method child_down = fun _ -> ()
-
-  method down () = match parent with
-  | None -> ()
-  | Some t -> t#child_down (self : #tiwidget0 :> tiwidget0)
-
-
-(* get the next tiwidget in the tree (used with Down arrow) *)
-  method next =
-    if children <> [] then fst (List.hd children)
-    else begin
-      match parent with
-      |        None -> raise Not_found
-      |        Some p -> p#next_child (self : #tiwidget0 :> tiwidget0)
-    end
-
-  method next_child child =
-    let _, tl = cut_list ~item:child (List.map ~f:fst children) in
-    match tl with
-    | ch :: next :: _ -> next
-    | ch :: [] -> begin
-       match parent with
-       | None -> raise Not_found
-       | Some p -> p#next_child (self : #tiwidget0 :> tiwidget0)
-    end
-    | _ -> failwith "next_child"
-
-(* get the last child of the last child ... of our last child.
-   Used by prev. *)
-  method last =
-    if children = [] then (self : #tiwidget0 :> tiwidget0)
-    else (fst (List.hd (List.rev children)))#last
-
-(* get the previous tiwidget in the tree (used with Up arrow) *)
-  method prev =
-    match parent with
-    | None -> raise Not_found
-    | Some p ->
-       let hd, _ = cut_list ~item:(self : #tiwidget0 :> tiwidget0)
-           (List.map ~f:fst p#children) in
-       match hd with
-       | [] -> p
-       | h :: _ -> h#last
-
-  initializer
-    Hashtbl.add widget_map ~key:name ~data:(self : #tiwidget0 :> tiwidget0);
-    name_list := name :: !name_list;
-    parent_tree#insert tree_item ~pos;
-    tree_item#set_subtree stree;
-    tree_item#add label#coerce;
-    tree_item#expand ();
-
-    proplist <-  proplist @
-      [ "name",
-        new prop_string ~name:"name" ~init:name ~set:self#set_new_name; 
-        "width", new prop_int ~name:"width" ~init:"-2"
-         ~set:(fun v -> widget#misc#set_geometry ~width:v (); true);
-        "height", new prop_int ~name:"height" ~init:"-2"
-         ~set:(fun v -> widget#misc#set_geometry ~height:v (); true) ];
-
-    self#add_signal name_changed;
-
-    tree_item#event#connect#button_press ~callback:
-      (fun ev -> match GdkEvent.get_type ev with
-      | `BUTTON_PRESS ->
-         if GdkEvent.Button.button ev = 1 then begin
-           parent_window#change_selected
-             (self : #tiwidget0 :> tiwidget0);
-         end
-         else if GdkEvent.Button.button ev = 3 then begin
-           if full_menu
-           then self#menu ~time:(GdkEvent.Button.time ev)
-           else self#restricted_menu ~time:(GdkEvent.Button.time ev);
-         end;
-         GtkSignal.stop_emit ();
-          true
-      | _ -> false);
-    ()
-end
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiBin.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiBin.ml
deleted file mode 100644 (file)
index 5ebcb3e..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-open Gtk
-
-open Utils
-open Property
-
-open TiContainer
-
-class tiframe ~(widget : GBin.frame) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val frame = widget
-  inherit ticontainer ~name ~widget ~parent_tree ~pos
-      ~insert_evbox parent_window as container
-
-  method private class_name = "GBin.frame"
-
-  method private get_mandatory_props = [ "label" ]
-
-  initializer
-    classe <- "frame";
-    frame#set_label name;
-    proplist <- proplist @
-      [ "label",
-       new prop_string ~name:"label" ~init:name ~set:(ftrue frame#set_label);
-       "label_xalign",
-       new prop_float ~name:"label_xalign" ~init:"0.0" ~min:0. ~max:1.
-            ~set:(fun x -> frame#set_label_align ~x (); true);
-       "shadow_type",
-       new prop_shadow ~name:"shadow_type" ~init:"ETCHED_IN"
-         ~set:(ftrue frame#set_shadow_type) ]
-end
-
-let new_tiframe ~name ?(listprop = []) =
-  new tiframe ~widget:(GBin.frame ()) ~name
-
-
-
-
-class tiaspect_frame ~(widget : GBin.aspect_frame) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val aspect_frame = widget
-  inherit tiframe ~name ~widget:(widget :> GBin.frame) ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GBin.aspect_frame"
-
-  initializer
-    classe <- "aspect_frame";
-    frame#set_label name;
-    proplist <- proplist @
-      [ "obey_child",
-       new prop_bool ~name:"obey_child" ~init:"true"
-         ~set:(ftrue aspect_frame#set_obey_child);
-       "ratio",
-       new prop_float ~name:"ratio" ~init:"1.0" ~min:0. ~max:1.
-            ~set:(ftrue aspect_frame#set_ratio)
-      ]        
-end
-
-let new_tiaspect_frame ~name ?(listprop = []) =
-  new tiaspect_frame ~widget:(GBin.aspect_frame ()) ~name
-
-
-
-
-class tievent_box ~(widget : GBin.event_box) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val event_box = widget
-  inherit ticontainer ~name ~widget ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GBin.event_box"
-  initializer
-    classe <- "event_box"
-end
-
-let new_event_box ~name ?(listprop = []) =
-  new tievent_box ~widget:(GBin.event_box ()) ~name
-
-
-
-
-class tihandle_box ~(widget : GBin.handle_box) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val handle_box = widget
-  inherit ticontainer ~name ~widget ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GBin.handle_box"
-
-  initializer
-    classe <- "handle_box";
-    proplist <- proplist @
-      [ "shadow_type",
-       new prop_shadow ~name:"shadow_type" ~init:"OUT"
-         ~set:(ftrue handle_box#set_shadow_type);
-       "handle_position",
-       new prop_position ~name:"handle_position" ~init:"LEFT"
-         ~set:(ftrue handle_box#set_handle_position);
-       "snap_edge",
-       new prop_position ~name:"snap_edge" ~init:"TOP"
-         ~set:(ftrue handle_box#set_snap_edge)
-      ]
-end
-
-let new_handle_box ~name ?(listprop = []) =
-  new tihandle_box ~widget:(GBin.handle_box ()) ~name
-
-
-
-
-
-class tiviewport ~(widget : GBin.handle_box) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val viewport = widget
-  inherit ticontainer ~name ~widget ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GBin.viewport"
-
-  initializer
-    classe <- "viewport";
-    proplist <- proplist @
-      [ "shadow_type",
-       new prop_shadow ~name:"shadow_type" ~init:"OUT"
-         ~set:(ftrue viewport#set_shadow_type)
-      ]
-end
-
-let new_viewport ~name ?(listprop = []) =
-  new tiviewport ~widget:(GBin.handle_box ()) ~name
-
-
-
-
-
-class tiscrolled_window ~(widget : GBin.scrolled_window)
-    ~name ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-  object(self)
-    val scrolled_window = widget
-    inherit ticontainer ~name ~insert_evbox
-       ~parent_tree ~pos ~widget parent_window
-
-    method private class_name = "GBin.scrolled_window"
-    method private name_of_add_method = "#add_with_viewport"
-
-    method private add rw ~pos =
-      scrolled_window#add_with_viewport (rw#base);
-      children <- [ rw, `START];
-      self#set_full_menu false;
-      tree_item#drag#dest_unset ()
-
-(* we must remove the child from the viewport,
-   not from the scrolled_window;
-   it is not mandatory to remove the viewport
-   from the scrolled_window *)
-    method remove child =
-      let viewport = (new GContainer.container (GtkBase.Container.cast (List.hd scrolled_window#children)#as_widget)) in
-      viewport#remove child#base;
-(*      scrolled_window#remove (List.hd scrolled_window#children); *)
-      children <- [ ];
-      self#set_full_menu true;
-      tree_item#drag#dest_set ~actions:[`COPY]
-       [ { target = "STRING"; flags = []; info = 0} ]
-
-
-    initializer
-      classe <- "scrolled_window";
-      proplist <- proplist @
-       [ "hscrollbar_policy",
-         new prop_policy ~name:"hscrollbar_policy" ~init:"ALWAYS"
-           ~set:(ftrue scrolled_window#set_hpolicy);
-         "vscrollbar_policy",
-         new prop_policy ~name:"vscrollbar_policy" ~init:"ALWAYS"
-           ~set:(ftrue scrolled_window#set_vpolicy) ]
-end
-
-let new_tiscrolled_window ~name ?(listprop = []) =
-  new tiscrolled_window ~widget:(GBin.scrolled_window ()) ~name
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiButton.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiButton.ml
deleted file mode 100644 (file)
index 174c6eb..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-open Utils
-open Property
-
-open TiBase
-open TiContainer
-
-(* the button inherits from widget because it can't accept
-   a child; 
-   needs to add the border_width property *)
-class tibutton ~(widget : #GButton.button) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val button = widget
-  inherit tiwidget ~name ~widget ~parent_tree ~pos ~insert_evbox
-       parent_window as widget
-
-  method private class_name = "GButton.button"
-
-  method private get_mandatory_props = [ "label" ]
-
-  initializer
-    classe <- "button";
-    proplist <-  proplist @
-      [ "border_width",        new prop_int ~name:"border_width" ~init:"0"
-                         ~set:(ftrue button#set_border_width);
-       "label",
-       new prop_string ~name:"label" ~init:name ~set:
-         begin fun v ->
-           button#remove (List.hd button#children)#coerce;
-           GMisc.label ~text:v ~xalign:0.5 ~yalign:0.5 ~packing:button#add ();
-           true
-         end ]
-end
-
-let new_tibutton ~name ?(listprop = []) =
-  let b = GButton.button ~label:name () in
-  b#event#connect#enter_notify
-    ~callback:(fun _ -> GtkSignal.stop_emit (); true);
-  b#event#connect#leave_notify
-    ~callback:(fun _ -> GtkSignal.stop_emit (); true);
-  new tibutton ~widget:b ~name
-
-
-class ticheck_button ~(widget : #GButton.toggle_button) ~name
-    ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-object(self)
-  val button = widget
-  inherit tiwidget ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-
-  method private class_name = "GButton.check_button"
-
-  method private get_mandatory_props = [ "label" ]
-
-  initializer
-    classe <- "check_button";
-    proplist <-  proplist @
-      [ "border_width",        new prop_int ~name:"border_width" ~init:"0"
-                        ~set:(ftrue button#set_border_width);
-       "label",
-       new prop_string ~name:"label" ~init:name ~set:
-         begin fun v ->
-           button#remove (List.hd button#children)#coerce;
-           GMisc.label ~text:v ~xalign:0.5 ~yalign:0.5 ~packing:button#add ();
-           true
-         end
-      ]
-end
-
-let new_ticheck_button ~name ?(listprop = []) =
-  new ticheck_button ~widget:(GButton.check_button ~label:name ()) ~name
-
-
-
-class titoggle_button ~(widget : #GButton.toggle_button) ~name
-    ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-object(self)
-  val button = widget
-  inherit tiwidget ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GButton.toggle_button"
-
-  method private get_mandatory_props = [ "label" ]
-
-  initializer
-    classe <- "toggle_button";
-    proplist <-  proplist @
-      [ "border width",        new prop_int ~name:"border_width" ~init:"0"
-                         ~set:(ftrue button#set_border_width);
-       "label",
-       new prop_string ~name:"label" ~init:name ~set:
-         begin fun v ->
-           button#remove (List.hd button#children)#coerce;
-           GMisc.label ~text:v ~xalign:0.5 ~yalign:0.5 ~packing:button#add ();
-           true
-         end ]
-end
-
-let new_titoggle_button ~name ?(listprop = []) =
-  let b = GButton.toggle_button ~label:name () in
-(*  b#connect#event#enter_notify
-    ~callback:(fun _ -> GtkSignal.stop_emit ());
-  b#connect#event#leave_notify
-    ~callback:(fun _ -> GtkSignal.stop_emit ());
-*)
-  new titoggle_button ~name ~widget:b
-
-
-class tiradio_button ~(widget : #GButton.radio_button) ~name:nname
-    ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-object(self)
-  val button = widget
-  inherit tiwidget ~name:nname ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  val group_prop =
-    new prop_enum_dyn ~values:(fun () -> !radio_button_pool) ~name:"group"
-      ~set:(fun () -> true) ~init:nname
-
-
-  method private class_name = "GButton.radio_button"
-
-  method remove_me_without_undo () =
-    radio_button_pool := list_remove !radio_button_pool
-       ~f:(fun x -> x = name);
-    widget#remove_me_without_undo ()
-
-  method private get_mandatory_props = [ "label" ]
-
-  method private emit_clean_proplist =
-    List.remove_assoc "group" widget#emit_clean_proplist
-
-  method emit_initializer_code formatter =
-    let groupname = group_prop#get in
-    if name <> groupname then
-      Format.fprintf formatter "@ %s#set_group %s#group;" name groupname
-
-  initializer
-    classe <- "radio_button";
-    radio_button_pool := name :: !radio_button_pool;
-    List.iter
-      ~f:(fun x -> Propwin.update (Hashtbl.find widget_map x) true)
-      (List.tl !radio_button_pool);
-
-    proplist <-  proplist @
-      [ "border_width",        new prop_int ~name:"border_width" ~init:"0"
-                         ~set:(ftrue button#set_border_width);
-       "label",
-       new prop_string ~name:"label" ~init:name ~set:
-         begin fun v ->
-           button#remove (List.hd button#children)#coerce;
-           GMisc.label ~text:v ~xalign:0.5 ~yalign:0.5 ~packing:button#add ();
-           true
-         end ;
-       "group", group_prop
-      ]
-end
-
-let new_tiradio_button ~name ?(listprop = []) =
-  let b = GButton.radio_button ~label:name () in
-  (*
-  b#event#connect#enter_notify
-    ~callback:(fun _ -> b#misc#stop_emit ~name:"enter_notify_event"; true);
-  b#event#connect#leave_notify
-    ~callback:(fun _ -> b#misc#stop_emit ~name:"leave_notify_event"; true);
-  *)
-  new tiradio_button ~name ~widget:b
-
-
-
-
-class tibutton_toolbar ~(widget : #GButton.button) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window ~toolbar =
-object(self)
-  val button = widget
-  inherit tibutton ~name ~widget ~parent_tree ~pos ~insert_evbox
-       parent_window as button
-
-  method private get_mandatory_props =
-    [ "text"; "tooltip"; "tooltip_private" ]
-
-  method emit_init_code formatter ~packing =
-    Format.fprintf formatter "@ @[<hv 2>let %s =@ @[<hov 2>%s#insert_button"
-      name toolbar#name;
-    List.iter self#get_mandatory_props ~f:
-      begin fun name ->
-       Format.fprintf formatter "@ ~%s:%s" name
-         (List.assoc name proplist)#code
-      end;
-    Format.fprintf formatter "@ ()@ in@]@]"
-
-  initializer
-    proplist <- List.remove_assoc "label" proplist
-end
-
-
-class titoggle_button_toolbar ~(widget : #GButton.toggle_button) ~name
-    ~parent_tree ~pos ?(insert_evbox=true) parent_window ~toolbar =
-object(self)
-  val button = widget
-  inherit titoggle_button ~name ~widget ~parent_tree ~pos ~insert_evbox
-       parent_window as button
-
-  method private get_mandatory_props =
-    [ "text"; "tooltip"; "tooltip_private" ]
-
-  method emit_init_code formatter ~packing =
-    Format.fprintf formatter
-      "@ @[<hv 2>let %s =@ @[<hov 2>%s#insert_toggle_button"
-      name toolbar#name;
-    List.iter self#get_mandatory_props ~f:
-      begin fun name ->
-       Format.fprintf formatter "@ ~%s:%s" name
-         (List.assoc name proplist)#code
-      end;
-    Format.fprintf formatter "@ ()@ in@]@]"
-
-  initializer
-    proplist <- List.remove_assoc "label" proplist
-end
-
-
-class tiradio_button_toolbar ~(widget : #GButton.radio_button) ~name
-    ~parent_tree ~pos ?(insert_evbox=true) parent_window ~toolbar =
-object(self)
-  val button = widget
-  inherit tiradio_button ~name ~widget ~parent_tree ~pos ~insert_evbox
-       parent_window as button
-
-  method private get_mandatory_props =
-    [ "text"; "tooltip"; "tooltip_private" ]
-
-  method emit_init_code formatter ~packing =
-    Format.fprintf formatter
-      "@ @[<hv 2>let %s =@ @[<hov 2>%s#insert_radio_button"
-      name toolbar#name;
-    List.iter self#get_mandatory_props ~f:
-      begin fun name ->
-       Format.fprintf formatter "@ ~%s:%s" name
-         (List.assoc name proplist)#code
-      end;
-    Format.fprintf formatter "@ ()@ in@]@]"
-
-  initializer
-    proplist <- List.remove_assoc "label" proplist
-end
-
-
-
-
-class titoolbar ~(widget : GToolbar2.toolbar2) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val toolbar = widget
-  inherit ticontainer ~name ~widget ~parent_tree ~pos
-    ~insert_evbox parent_window
-
-  method private class_name = "GButton.toolbar"
-
-  method private add child ~pos =
-    children <- children @ [child, `START]
-
-  method private get_pos child =
-    let rec aux n = function
-      |        [] -> failwith "toolbar::get_pos"
-      |        (hd, _)::tl -> if hd = child then n else aux (n+1) tl in
-    aux 0 children
-
-  method private make_child ~classe ?(pos = -1) ~name ~parent_tree
-      ?(insert_evbox = true) ?(listprop = []) parent_window =
-    match classe with
-    | "button" ->
-       let t = try List.assoc "text" listprop with Not_found -> "" in
-       let tt = try List.assoc "tooltip" listprop with Not_found -> "" in
-       let ptt = try List.assoc "tooltip_private" listprop
-       with Not_found -> "" in
-       let listp = List.fold_left ~f:(fun l p -> List.remove_assoc p l)
-           ~init:listprop
-           [ "text"; "tooltip"; "tooltip_private" ] in
-       let b = toolbar#insert_button ~text:t ~tooltip:tt
-           ~tooltip_private:ptt () in
-       let child = new tibutton_toolbar ~name ~widget:b ~pos:(-1)
-             ~insert_evbox:false ~parent_tree:stree parent_window ~toolbar:self in
-       let tp = new prop_string ~name:"text" ~init:t
-           ~set:(fun v -> 
-             toolbar#set_text v (self#get_pos child); true)
-       and ttp = new prop_string ~name:"tooltip" ~init:tt
-           ~set:(fun _ -> true)
-       and pttp = new prop_string ~name:"tooltip_private" ~init:ptt
-           ~set:(fun _ -> true) in
-       child#add_to_proplist
-         [ "text", tp; "tooltip", ttp; "tooltip_private", pttp ];
-       child
-    | "toggle_button" ->
-       let t = try List.assoc "text" listprop with Not_found -> "" in
-       let tt = try List.assoc "tooltip" listprop with Not_found -> "" in
-       let ptt = try List.assoc "tooltip_private" listprop
-       with Not_found -> "" in
-       let listp = List.fold_left ~f:(fun l p -> List.remove_assoc p l)
-           ~init:listprop
-           [ "text"; "tooltip"; "tooltip_private" ] in
-       let b = toolbar#insert_toggle_button ~text:t ~tooltip:tt
-           ~tooltip_private:ptt () in
-       let child = new titoggle_button_toolbar ~name ~widget:b ~pos:(-1)
-             ~insert_evbox:false ~parent_tree:stree parent_window ~toolbar:self in
-       let tp = new prop_string ~name:"text" ~init:t
-           ~set:(fun v -> toolbar#set_text v (self#get_pos child); true)
-       and ttp = new prop_string ~name:"tooltip" ~init:tt
-           ~set:(fun _ -> true)
-       and pttp = new prop_string ~name:"tooltip_private" ~init:ptt
-           ~set:(fun _ -> true) in
-       child#add_to_proplist
-         [ "text", tp; "tooltip", ttp; "tooltip_private", pttp ];
-       child
-    | "radio_button" ->
-       let t = try List.assoc "text" listprop with Not_found -> "" in
-       let tt = try List.assoc "tooltip" listprop with Not_found -> "" in
-       let ptt = try List.assoc "tooltip_private" listprop
-       with Not_found -> "" in
-       let listp = List.fold_left ~f:(fun l p -> List.remove_assoc p l)
-           ~init:listprop
-           [ "text"; "tooltip"; "tooltip_private" ] in
-       let b = toolbar#insert_radio_button ~text:t ~tooltip:tt
-           ~tooltip_private:ptt () in
-       let child = new tiradio_button_toolbar ~name ~widget:b ~pos:(-1)
-             ~insert_evbox:false ~parent_tree:stree parent_window ~toolbar:self in
-       let tp = new prop_string ~name:"text" ~init:t
-           ~set:(fun v -> toolbar#set_text v (self#get_pos child); true)
-       and ttp = new prop_string ~name:"tooltip" ~init:tt
-           ~set:(fun _ -> true)
-       and pttp = new prop_string ~name:"tooltip_private" ~init:ptt
-           ~set:(fun _ -> true) in
-       child#add_to_proplist
-         [ "text", tp; "tooltip", ttp; "tooltip_private", pttp ];
-       child
-    | _ -> failwith "toolbar"
-
-
-
-  method remove child =
-    toolbar#remove (child#base);
-    children <- list_remove ~f:(fun (ch, _) -> ch = child) children;
-
-  initializer
-    classe <- "toolbar";
-    proplist <- proplist @
-      [ "orientation",
-       new prop_orientation ~name:"orientation" ~init:"HORIZONTAL"
-         ~set:(ftrue toolbar#set_orientation);
-       "style",
-       new prop_toolbar_style ~name:"style" ~init:"BOTH"
-         ~set:(ftrue toolbar#set_style);
-       "space_size",
-       new prop_int ~name:"space_size" ~init:"5"
-         ~set:(ftrue toolbar#set_space_size);
-       "space_style",
-       new prop_toolbar_space_style ~name:"space_style" ~init:"EMPTY"
-         ~set:(ftrue toolbar#set_space_style);
-       "tooltips",
-       new prop_bool ~name:"tooltips" ~init:"true"
-         ~set:(ftrue toolbar#set_tooltips);
-       "button_relief",
-       new prop_relief_style ~name:"button_relief" ~init:"NORMAL"
-         ~set:(ftrue toolbar#set_button_relief)
-      ]
-end
-
-let new_toolbar ~name ?(listprop = []) =
-  new titoolbar ~name ~widget:(GToolbar2.toolbar2 ())
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiContainer.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiContainer.ml
deleted file mode 100644 (file)
index ddf04d3..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-
-open Gtk
-open GObj
-open GContainer
-
-open Utils
-open Property
-
-open TiBase
-
-(* for containers being able to have at least one child;
-   not for buttons (can't have children) *)
-
-class virtual ticontainer ~widget ~name
-    ?(insert_evbox=true) ~parent_tree ~pos parent_window =
-object(self)
-
-  val container = (widget : #container :> container)
-
-  inherit tiwidget ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-(* name of the add method: add for most bin widgets,
-   pack for boxes, add_with_viewport for scrolled windows... *)
-  method private name_of_add_method = "#add"
-
-  method private add child ~pos =
-    container#add child#base;
-    children <- [child, `START];
-    self#set_full_menu false;
-    tree_item#drag#dest_unset ()
-
-  method remove child =
-    container#remove child#base;
-    children <- [];
-    self#set_full_menu true;
-    tree_item#drag#dest_set ~actions:[`COPY]
-      [ { target = "STRING"; flags = []; info = 0} ]
-
-  method private menu ~time =
-    let menu = GMenu.menu () and menu_add = GMenu.menu () in
-    List.iter
-      ~f:(fun n ->
-       let mi = GMenu.menu_item ~packing:menu_add#append ~label:n ()
-       in mi#connect#activate
-         ~callback:(fun () -> self#add_child n ();()); ())
-      widget_add_list;      
-    let mi_add = GMenu.menu_item ~packing:menu#append
-       ~label:("add to " ^ name) ()
-    and mi_remove = GMenu.menu_item ~packing:menu#append
-       ~label:("remove " ^ name) ()
-    and mi_cut  = GMenu.menu_item ~packing:menu#append ~label:"Cut" ()
-    and mi_copy = GMenu.menu_item ~packing:menu#append ~label:"Copy" ()
-    and mi_paste = GMenu.menu_item ~packing:menu#append ~label:"Paste" () in
-    mi_remove#connect#activate ~callback:self#remove_me;
-    mi_add#set_submenu menu_add;
-    mi_copy#connect#activate ~callback:self#copy;
-    mi_cut#connect#activate ~callback:self#cut;
-    if !selection <> ""
-    then begin mi_paste#connect#activate ~callback:self#paste; () end
-    else mi_paste#misc#set_sensitive false;
-    menu#popup ~button:3 ~time
-
-  method emit_init_code c ~packing =
-    widget#emit_init_code c ~packing;
-    self#forall ~callback:(fun child -> child#emit_init_code c
-       ~packing:(name ^ self#name_of_add_method))
-
-  method emit_method_code c =
-    widget#emit_method_code c;
-    self#forall ~callback:(fun child -> child#emit_method_code c)
-
-  method emit_initializer_code c =
-    widget#emit_initializer_code c;
-    self#forall ~callback:(fun child -> child#emit_initializer_code c)
-
-
-  initializer
-    proplist <-  proplist @
-      [ "border_width",        new prop_int ~name:"border_width" ~init:"0"
-                         ~set:(ftrue container#set_border_width) ];
-
-    tree_item#drag#dest_set ~actions:[`COPY]
-      [ { target = "STRING"; flags = []; info = 0} ];
-    tree_item#drag#connect#data_received ~callback:
-      begin fun (context : drag_context) ~x ~y
-         (data : selection_data) ~info ~time ->
-           self#add_child data#data ();
-           context#finish ~success:true ~del:false ~time
-      end;()
-end
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiEdit.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiEdit.ml
deleted file mode 100644 (file)
index 4b0977b..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-open Utils
-open Property
-
-open TiBase
-
-
-
-class tientry ~(widget : GEdit.entry) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val entry = widget
-  inherit tiwidget ~name ~widget ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GEdit.entry"
-  initializer
-    classe <- "entry";
-      proplist <- proplist @
-      [ "visibility",
-       new prop_bool ~name:"visibility" ~init:"true"
-                    ~set:(ftrue entry#set_visibility);
-       "editable",
-       new prop_bool ~name:"editable" ~init:"true"
-                    ~set:(ftrue entry#set_editable)
-      ]
-end
-
-let new_tientry ~name ?(listprop = []) =
-  new tientry ~name ~widget:(GEdit.entry ())
-
-
-class tispin_button ~(widget : GEdit.spin_button) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-    val spin_button = widget
-  inherit tientry ~widget:(widget :> GEdit.entry) ~name ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GEdit.spin_button"
-  initializer
-    classe <- "spin_button";
-      proplist <- proplist @
-      [ "digits",
-       new prop_int ~name:"digits" ~init:"0"
-                    ~set:(ftrue spin_button#set_digits);
-       "update_policy",
-       new prop_spin_button_update_policy ~name:"update_policy"
-         ~init:"ALWAYS"
-         ~set:(ftrue spin_button#set_update_policy);
-       "numeric",
-       new prop_bool ~name:"numeric" ~init:"false"
-         ~set:(ftrue spin_button#set_numeric);
-       "wrap",
-       new prop_bool ~name:"wrap" ~init:"false"
-         ~set:(ftrue spin_button#set_wrap);
-       "shadow_type",
-       new prop_shadow ~name:"shadow_type" ~init:"NONE"
-         ~set:(ftrue spin_button#set_shadow_type);
-       "snap_to_ticks",
-       new prop_bool ~name:"snap_to_ticks" ~init:"false"
-         ~set:(ftrue spin_button#set_snap_to_ticks)
-      ]
-    
-end
-
-
-let get_adjustment () =
-  let rv = ref 0. and rl = ref 0. and ru = ref 100. and rsi = ref 1.
-      and rpi = ref 10. and rps = ref 10. in
-  let w  = GWindow.window ~modal:true () in
-  let v  = GPack.vbox  ~packing:w#add () in
-  let l  = GMisc.label ~text:"adjustment properties" ~packing:v#pack () in
-  let h1 = GPack.hbox ~packing:v#pack () in
-  let l1 = GMisc.label ~text:"value" ~packing:h1#pack () in
-  let e1 = GEdit.entry ~text:"0." ~packing:h1#pack () in
-  let h2 = GPack.hbox ~packing:v#pack () in
-  let l2 = GMisc.label ~text:"lower" ~packing:h2#pack () in
-  let e2 = GEdit.entry ~text:"0." ~packing:h2#pack () in
-  let h3 = GPack.hbox ~packing:v#pack () in
-  let l3 = GMisc.label ~text:"upper" ~packing:h3#pack () in
-  let e3 = GEdit.entry ~text:"100." ~packing:h3#pack () in
-  let h4 = GPack.hbox ~packing:v#pack () in
-  let l4 = GMisc.label ~text:"step_incr" ~packing:h4#pack () in
-  let e4 = GEdit.entry ~text:"1." ~packing:h4#pack () in
-  let h5 = GPack.hbox ~packing:v#pack () in
-  let l5 = GMisc.label ~text:"page_incr" ~packing:h5#pack () in
-  let e5 = GEdit.entry ~text:"10." ~packing:h5#pack () in
-  let h6 = GPack.hbox ~packing:v#pack () in
-  let l6 = GMisc.label ~text:"page_size" ~packing:h6#pack () in
-  let e6 = GEdit.entry ~text:"10." ~packing:h6#pack () in
-  let h7 = GPack.hbox ~packing:v#pack () in
-  let b1 = GButton.button ~label:"OK" ~packing:h7#pack () in
-  let b2 = GButton.button ~label:"Cancel" ~packing:h7#pack () in
-  w#show ();
-  b1#connect#clicked
-    ~callback:(fun () ->
-      begin
-       try rv  := float_of_string e1#text with _ ->
-       try rv  := float_of_int (int_of_string e1#text) with _ -> () end;
-      begin
-       try rl  := float_of_string e2#text with _ ->
-       try rl  := float_of_int (int_of_string e2#text) with _ -> () end;
-      begin
-       try ru  := float_of_string e3#text with _ ->
-       try ru  := float_of_int (int_of_string e3#text) with _ -> () end;
-      begin
-       try rsi := float_of_string e4#text with _ ->
-       try rsi := float_of_int (int_of_string e4#text) with _ -> () end;
-      begin
-       try rpi := float_of_string e5#text with _ ->
-       try rpi := float_of_int (int_of_string e5#text) with _ -> () end;
-      begin
-       try rps := float_of_string e6#text with _ ->
-       try rps := float_of_int (int_of_string e6#text) with _ -> () end;
-      w#destroy ());
-  b2#connect#clicked ~callback:w#destroy;
-  w#connect#destroy ~callback:GMain.Main.quit;
-  GMain.Main.main ();
-  !rv, !rl, !ru, !rsi, !rpi, !rps
-
-let new_tispin_button ~name ?(listprop = []) =
-  let v, l, u, si, pi, ps = get_adjustment () in
-  new tispin_button ~name
-    ~widget:(GEdit.spin_button ~adjustment:
-              (GData.adjustment ~value:v ~lower:l ~upper:u
-                 ~step_incr:si ~page_incr:pi ~page_size:ps ()) ())
-
-
-class ticombo ~(widget : GEdit.combo) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object
-  val combo = widget
-  inherit tiwidget ~name ~widget ~parent_tree ~pos
-      ~insert_evbox parent_window
-
-  method private class_name = "GEdit.combo"
-  initializer
-    classe <- "combo";
-      proplist <- proplist @
-      [ "use_arrows",
-       new prop_combo_use_arrows ~name:"use_arrows" ~init:"true"
-                    ~set:(ftrue combo#set_use_arrows);
-       "case_sensitive",
-       new prop_bool ~name:"case_sensitive" ~init:"false"
-                    ~set:(ftrue combo#set_case_sensitive)
-      ]
-end
-
-let new_ticombo ~name ?(listprop = []) =
-  new ticombo ~name ~widget:(GEdit.combo ())
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiList.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiList.ml
deleted file mode 100644 (file)
index 770e19b..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-
-open Utils
-open Property
-
-open TiBase
-
-class ticlist ~(widget : 'a GList.clist) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window ~columns ~titles =
-  object(self)
-    val clist = widget
-    inherit tiwidget ~name ~widget ~parent_tree ~pos
-       ~insert_evbox parent_window as widget
-
-    val param = parent_window#add_param
-
-    method private class_name = "GList.clist"
-
-    method private get_mandatory_props = [ "columns" ]
-
-    method remove_me_without_undo () =
-      parent_window#remove_param param;
-      widget#remove_me_without_undo ()
-
-    method emit_init_code formatter ~packing =
-      Format.fprintf formatter 
-       "@ @[<hv 2>let (%s : '%c GList.clist) =@ @[<hov 2>GList.clist"
-       name param;
-      List.iter self#get_mandatory_props ~f:
-       begin fun name ->
-         Format.fprintf formatter "@ ~%s:%s" name
-           (List.assoc name proplist)#code
-       end;
-      let packing = self#get_packing packing in
-      if packing <> "" then Format.fprintf formatter "@ %s" packing;
-      self#emit_prop_code formatter;
-      Format.fprintf formatter "@ ()@ in@]@]"
-
-
-    initializer
-      classe <- "clist";
-      proplist <- proplist @
-      [ "columns",
-       new prop_int ~name:"columns" ~init:(string_of_int columns)
-         ~set:(fun _ -> true);
-       "titles",
-       new prop_clist_titles ~name:"titles" ~init:(String.concat ~sep:" " titles)
-         ~set:(fun v ->
-           let v = Array.of_list v in
-           for i = 0 to Array.length v - 1 do
-             clist#set_column i ~title:v.(i)
-           done;
-           true)
-      ]
-end
-
-let new_clist ~name ?(listprop = []) =
-  let c, lp = match listprop with
-  | [] -> (get_a_number "number of columns" 3), []
-  | ("columns", n)::tl -> (int_of_string n), tl
-  | _ -> failwith "new_clist"
-  in
-  let rtitles = ref [] in
-  for i = c downto 1 do rtitles := ("column" ^(string_of_int i)):: !rtitles done;
-  new ticlist ~name ~widget:(GList.clist ~columns:c ~titles: !rtitles ()) ~columns:c ~titles: !rtitles
-    
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiMisc.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiMisc.ml
deleted file mode 100644 (file)
index f4f435a..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-
-open Utils
-open Property
-
-open TiBase
-open TiContainer
-
-
-class tiseparator ~(dir : Gtk.Tags.orientation) ~(widget : GObj.widget_full)
-    ~name ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-object
-  val separator = widget
-  inherit tiwidget ~name ~widget ~parent_tree ~pos parent_window ~insert_evbox
-
-  method private class_name =
-    match dir with `VERTICAL -> "GMisc.separator `VERTICAL"
-    | `HORIZONTAL -> "GMisc.separator `HORIZONTAL"
-  initializer
-    classe <-
-    (match dir with `VERTICAL -> "vseparator" | `HORIZONTAL -> "hseparator")
-
-end
-
-let new_tihseparator ~name ?(listprop = []) =
-  new tiseparator ~dir: `HORIZONTAL ~name
-    ~widget:(GMisc.separator `HORIZONTAL ())
-let new_tivseparator ~name ?(listprop = []) = 
-  new tiseparator ~dir: `VERTICAL ~name
-    ~widget:(GMisc.separator `VERTICAL ())
-
-
-
-
-class tistatusbar ~(widget : GMisc.statusbar) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val statusbar = widget
-  inherit ticontainer ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GMisc.statusbar"
-
-  initializer
-    classe <- "statusbar"
-end
-
-let new_tistatusbar ~name ?(listprop = []) =
-  new tistatusbar ~widget:(GMisc.statusbar ()) ~name
-
-
-
-class timisc ~(widget : GMisc.misc) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val misc = widget
-  inherit tiwidget ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = failwith "timisc::class_name"
-
-  initializer
-    proplist <- proplist @
-      [ "x_alignment",
-       new prop_float ~name:"x alignment" ~init:"0.5" ~min:0. ~max:1.
-         ~set:(fun v -> misc#set_alignment ~x:v (); true);
-       "y_alignment",
-       new prop_float ~name:"y alignment" ~init:"0.5" ~min:0. ~max:1.
-         ~set:(fun v -> misc#set_alignment ~y:v (); true);
-       "x_padding",
-       new prop_int ~name:"x padding" ~init:"0.5"
-         ~set:(fun v -> misc#set_padding ~x:v (); true);
-       "y_padding",
-       new prop_int ~name:"y padding" ~init:"0.5"
-         ~set:(fun v -> misc#set_padding ~y:v (); true)
-
-      ]
-end
-
-
-class tiarrow ~(widget : GMisc.arrow) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val arrow = widget
-  inherit timisc ~name ~widget:(widget :> GMisc.misc) ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GMisc.arrow"
-  initializer
-    classe <- "arrow";
-end
-
-
-(* TODO   fenetre demandant kind et shadow 
-let new_tiarrow ~name = new tiarrow ~widget:(GMisc.arrow ()) ~name
-*)
-
-
-class tilabel ~(widget : GMisc.label) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val labelw = widget
-  inherit timisc ~name ~widget:(widget :> GMisc.misc) ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GMisc.label"
-
-  method private get_mandatory_props = [ "text" ]
-
-  initializer
-    classe <- "label";
-    proplist <-  proplist @
-      [ "text",
-       new prop_string ~name:"text" ~init:name ~set:(ftrue labelw#set_text);
-       "line_wrap",
-       new prop_bool ~name:"line_wrap" ~init:"true"
-         ~set:(ftrue labelw#set_line_wrap)
-      ]
-end
-
-let new_tilabel ~name ?(listprop = []) =
-  new tilabel ~widget:(GMisc.label ~text:name ()) ~name
-
-
-
-
-
-class ticolor_selection ~(widget : GMisc.color_selection) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val color_selection = widget
-  inherit tiwidget ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GMisc.color_selection"
-
-  initializer
-    classe <- "color_selection";
-    proplist <-  proplist @
-      [ "use_opacity",
-       new prop_bool ~name:"use_opacity" ~init:"false"
-         ~set:(ftrue color_selection#set_opacity);
-       "update_policy",
-       new prop_update_type ~name:"update_policy" ~init:"CONTINUOUS"
-         ~set:(ftrue color_selection#set_update_policy)
-      ]
-end
-
-let new_ticolor_selection ~name ?(listprop = []) =
-  new ticolor_selection ~widget:(GMisc.color_selection ()) ~name
-
-
-class tipixmap ~(widget : GMisc.pixmap) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val pixmap = widget
-  inherit timisc ~name ~widget:(widget :> GMisc.misc) ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GMisc.pixmap"
-  initializer
-    classe <- "pixmap";
-    proplist <- proplist @
-      [ "file",
-       new prop_file ~name:"file" ~init:""
-         ~set:(fun v ->
-           pixmap#set_pixmap
-             (GDraw.pixmap_from_xpm ~window:parent_window#tiwin#widget
-                ~file:v ());
-           true)
-      ]
-end
-
-let new_tipixmap ~name ?(listprop = []) ~parent_tree ~pos ?(insert_evbox=true) (parent_window : window_and_tree0) =
-  new tipixmap ~widget:(GMisc.pixmap (GDraw.pixmap_from_xpm 
-   ~window:parent_window#tiwin#widget ~file:"pixmap.xpm" ()) ()) ~name
-    ~parent_tree ~pos ~insert_evbox parent_window
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiPack.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiPack.ml
deleted file mode 100644 (file)
index 291eec9..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-
-open Utils
-open Property
-
-open TiContainer
-
-class tibox ~(dir : Gtk.Tags.orientation) ~(widget : GPack.box)
-    ~name ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-  let class_name =
-    match dir with `VERTICAL -> "GPack.vbox" | _ -> "GPack.hbox" in
-object(self)
-  val box = widget
-  inherit ticontainer ~name ~widget ~parent_tree ~pos ~insert_evbox
-      parent_window as container
-
-  method private class_name = class_name
-
-  method private name_of_add_method = "#pack"
-
-(* removes the ::expand ::fill ::padding in the proplist of a box
-   assumes that these are the only properties with a :: in the name *)
-  method private save_clean_proplist =
-    List.filter container#save_clean_proplist
-      ~f:(fun (n,p) ->
-       try
-         let i = String.index n ':' in
-         i = String.length n || n.[i+1] <> ':'
-       with Not_found -> true)
-
-  method private emit_clean_proplist =
-    List.filter container#emit_clean_proplist
-      ~f:(fun (n,p) ->
-       try
-         let i = String.index n ':' in
-         i = String.length n || n.[i+1] <> ':'
-       with Not_found -> true)
-
-  method change_name_in_proplist oldn newn =
-    proplist <- List.fold_left ~init:proplist ~f:
-       (fun pl propname ->
-         change_property_name (oldn ^ propname) (newn ^ propname) pl)
-       [ "::expand"; "::fill"; "::padding" ];
-    Propwin.update self false
-
-  method child_up child =
-    let pos = list_pos ~item:child (List.map ~f:fst children) in
-    if pos > 0 then begin
-      box#reorder_child child#base ~pos:(pos-1);
-      children <- list_reorder_up children ~pos;
-      stree#item_up ~pos
-    end
-           
-  method child_down child =
-    let pos = list_pos ~item:child (List.map ~f:fst children) in
-    if pos < (List.length children - 1) then begin
-      box#reorder_child child#base ~pos:(pos+1);
-      children <- list_reorder_down children ~pos;
-      stree#item_up ~pos:(pos+1)
-    end
-           
-  method private add child ~pos =
-    box#pack  child#base;
-    if pos < 0 then begin
-      children <-  children @ [(child, `START)]
-    end
-    else begin
-      children <- list_insert ~item:(child, `START) children ~pos;
-      box#reorder_child child#base ~pos
-    end;
-    let n = child#name in
-    let expand =
-      new prop_bool ~name:"expand" ~init:"false" ~set:
-       begin fun v ->
-         box#set_child_packing (child#base) ~expand:v;
-         Propwin.update child false;
-         Propwin.update self false; true
-       end
-    and fill =
-      new prop_bool ~name:"fill" ~init:"true" ~set:
-       begin fun v ->
-         box#set_child_packing (child#base) ~fill:v;
-         Propwin.update child false;
-         Propwin.update self false; true
-       end
-    and padding =
-      new prop_int ~name:"padding" ~init:"0" ~set:
-       begin fun v ->
-         box#set_child_packing (child#base) ~padding:v;
-         Propwin.update child false;
-         Propwin.update self false; true
-       end
-    in
-    proplist <-  proplist @ 
-      [ (n ^ "::expand"),  expand;
-       (n ^ "::fill"),    fill;
-        (n ^ "::padding"), padding ];
-    child#add_to_proplist
-      [ "expand", expand; "fill", fill; "padding", padding ];
-    Propwin.update self true
-         
-
-  method remove child =
-    box#remove (child#base);
-    children <- list_remove ~f:(fun (ch, _) -> ch = child) children;
-    let n = child#name in
-    proplist <-  List.fold_left ~init:proplist
-       ~f:(fun acc n -> List.remove_assoc n acc)
-       [ (n ^ "::expand"); (n ^ "::fill"); (n ^ "::padding") ];
-    Propwin.update self true
-
-  initializer
-    classe <- (match dir with `VERTICAL -> "vbox" | _ -> "hbox");
-    proplist <-  proplist @
-      [ "homogeneous",
-       new prop_bool ~name:"homogeneous" ~init:"false"
-         ~set:(ftrue box#set_homogeneous);
-       "spacing",
-       new prop_int ~name:"spacing" ~init:"0"
-         ~set:(ftrue box#set_spacing)
-      ]
-end
-
-class tihbox = tibox ~dir:`HORIZONTAL
-class tivbox = tibox ~dir:`VERTICAL
-
-let new_tihbox ~name ?(listprop = []) = new tihbox ~widget:(GPack.hbox ()) ~name
-let new_tivbox ~name ?(listprop = []) = new tivbox ~widget:(GPack.vbox ()) ~name
-
-
-
-
-class tibbox ~(dir : Gtk.Tags.orientation) ~(widget : GPack.button_box)
-    ~name ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-  let class_name =
-    match dir with `VERTICAL -> "GPack.button_box `VERTICAL"
-    | _ -> "GPack.button_box `HORIZONTAL" in
-object(self)
-  val bbox = widget
-  inherit tibox ~dir ~widget:(widget :> GPack.box)
-    ~name ~parent_tree ~pos ~insert_evbox parent_window
-
-  method private class_name = class_name
-
-initializer
-    classe <- (match dir with `VERTICAL -> "vbutton_box" | _ -> "hbutton_box");
-    proplist <-  proplist @
-      [ "layout",
-       new prop_button_box_style ~name:"layout" ~init:"DEFAULT_STYLE"
-         ~set:(ftrue bbox#set_layout);
-       "spacing",
-       new prop_int ~name:"spacing"
-         ~init:(match dir with `VERTICAL -> "10" | _ -> "30")
-(*  donne -1 (defaut)  
-(GtkPack.BBox.get_spacing bbox#as_button_box) *)
-         ~set:(fun v -> bbox#set_spacing v;
-           GtkBase.Widget.queue_resize bbox#as_widget; true);
-       "child_width",
-       new prop_int ~name:"child_width" ~init:"85"
-         ~set:(fun v ->
-           bbox#set_child_size ~width:v
-             ~height:(int_of_string (self#get_property "child_height")) ();
-           GtkBase.Widget.queue_resize bbox#as_widget; true);
-       "child_height",
-       new prop_int ~name:"child_height" ~init:"27"
-         ~set:(fun v ->
-           bbox#set_child_size ~height:v
-             ~width:(int_of_string (self#get_property "child_width")) (); 
-           GtkBase.Widget.queue_resize bbox#as_widget; true);
-       "child_ipad_x",
-       new prop_int ~name:"child_ipad_x" ~init:"7"
-         ~set:(fun v ->
-           bbox#set_child_ipadding ~x:v
-             ~y:(int_of_string (self#get_property "child_ipad_y")) ();
-           GtkBase.Widget.queue_resize bbox#as_widget; true);
-       "child_ipad_y",
-       new prop_int ~name:"child_ipad_y" ~init:"0"
-         ~set:(fun v ->
-           bbox#set_child_ipadding ~y:v
-             ~x:(int_of_string (self#get_property "child_ipad_x")) (); 
-           GtkBase.Widget.queue_resize bbox#as_widget; true);
-      ]
-end
-
-
-(* TODO:  pour proplist/spacing il faudrait implementer
-          les fonctions get_spacing ... (voir dans gtkPack) *)
-
-class tihbutton_box = tibbox ~dir:`HORIZONTAL
-class tivbutton_box = tibbox ~dir:`VERTICAL
-
-let new_tihbutton_box ~name ?(listprop = []) =
-  new tihbutton_box ~widget:(GPack.button_box `HORIZONTAL ()) ~name
-
-let new_tivbutton_box ~name ?(listprop = []) =
-  new tivbutton_box ~widget:(GPack.button_box `VERTICAL ()) ~name
-
-
-
-
-let get_fixed_pos () =
-  let rx = ref 0 and ry = ref 0 in
-  let w  = GWindow.window ~modal:true () in
-  let v  = GPack.vbox  ~packing:w#add () in
-  let l  = GMisc.label ~text:"Enter position for child" ~packing:v#pack () in
-  let h1 = GPack.hbox ~packing:v#pack () in
-  let l1 = GMisc.label ~text:"x:" ~packing:h1#pack () in
-  let e1 = GEdit.entry ~text:"0" ~packing:h1#pack () in
-  let h2 = GPack.hbox ~packing:v#pack () in
-  let l2 = GMisc.label ~text:"y" ~packing:h2#pack () in
-  let e2 = GEdit.entry ~text:"0" ~packing:h2#pack () in
-  let h7 = GPack.hbox ~packing:v#pack () in
-  let b1 = GButton.button ~label:"OK" ~packing:h7#pack () in
-  let b2 = GButton.button ~label:"Cancel" ~packing:h7#pack () in
-  w#show ();
-  b1#connect#clicked
-    ~callback:(fun () ->
-      begin
-       try rx  := int_of_string e1#text with _ -> () end;
-      begin
-       try ry  := int_of_string e2#text with _ -> () end;
-      w#destroy ());
-  b2#connect#clicked ~callback:w#destroy;
-  w#connect#destroy ~callback:GMain.Main.quit;
-  GMain.Main.main ();
-  !rx, !ry
-
-
-class tifixed ~(widget : GPack.fixed)
-    ~name ~parent_tree ~pos ?(insert_evbox=true) parent_window =
-object(self)
-  val fixed = widget
-  inherit ticontainer ~widget
-    ~name ~parent_tree ~pos ~insert_evbox parent_window
-
-  method private class_name = "GPack.fixed"
-
-  method private add child ~pos =
-    let x, y = get_fixed_pos () in
-    fixed#put child#base ~x ~y;
-    children <-  children @ [(child, `START)]
-  initializer
-    classe <- "fixed"
-end
-
-let new_tifixed ~name ?(listprop = []) =
-  new tifixed ~widget:(GPack.fixed ()) ~name
-
-
-
-
-
-class tinotebook ~(widget : GPack.notebook) ~name ~parent_tree ~pos
-    ?(insert_evbox=true) parent_window =
-object(self)
-  val notebook = widget
-  inherit ticontainer ~name ~widget ~insert_evbox
-      ~parent_tree ~pos parent_window as widget
-
-  method private class_name = "GPack.notebook"
-
-  method private add child ~pos =
-    children <- children @ [child, `START];
-    notebook#insert_page child#base ~pos;
-    child#add_to_proplist
-      [ "tab_label",
-       new prop_string ~name:"tab_label" ~init:""
-         ~set:(fun v -> notebook#set_page
-             ~tab_label:((GMisc.label ~text:v())#coerce) child#base; true)
-      ]
-
-
-  initializer
-    classe <- "notebook";
-    proplist <-  proplist @
-      [ "tab_pos",
-       new prop_position ~name:"tab_ pos" ~init:"TOP"
-         ~set:(ftrue notebook#set_tab_pos);
-       "show_tabs",
-       new prop_bool ~name:"show_tabs" ~init:"true"
-         ~set:(ftrue notebook#set_show_tabs);
-       "homogeneous_tabs",
-       new prop_bool ~name:"homogeneous_tabs" ~init:"true"
-         ~set:(ftrue notebook#set_homogeneous_tabs);
-       "show_border",
-       new prop_bool ~name:"show_border" ~init:"true"
-         ~set:(ftrue notebook#set_show_border);
-       "scrollable",
-       new prop_bool ~name:"scrollable" ~init:"false"
-         ~set:(ftrue notebook#set_scrollable);
-       "tab_border",
-       new prop_int ~name:"tab_border" ~init:"2"
-         ~set:(ftrue notebook#set_tab_border);
-       "popup_enable",
-       new prop_bool ~name:"popup_enable" ~init:"false"
-         ~set:(ftrue notebook#set_popup)
-      ]
-end
-
-let new_tinotebook ~name ?(listprop = []) =
-  new tinotebook ~widget:(GPack.notebook ()) ~name
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiWidget.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiWidget.ml
deleted file mode 100644 (file)
index 5a6e3ac..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-
-let new_class_list (* :
-  (string *
-  (name:string -> ?listprop:string list ->
-   parent_tree:GTree2.tree -> pos:int ->
-   ?insert_evbox:bool ->
-   
-   TiBase.window_and_tree0 -> TiBase.tiwidget0)) list *)
-= [
-  "window",          TiWindow.new_tiwindow;
-  "hbox",            TiPack.new_tihbox;
-  "vbox",            TiPack.new_tivbox;
-  "hbutton_box",     TiPack.new_tihbutton_box;
-  "vbutton_box",     TiPack.new_tivbutton_box;
-  "fixed",           TiPack.new_tifixed;
-  "notebook",        TiPack.new_tinotebook;
-  "button",          TiButton.new_tibutton;
-  "check_button",    TiButton.new_ticheck_button;
-  "toggle_button",   TiButton.new_titoggle_button;
-  "radio_button",    TiButton.new_tiradio_button;
-  "toolbar",         TiButton.new_toolbar;
-  "hseparator",      TiMisc.new_tihseparator;
-  "vseparator",      TiMisc.new_tivseparator;
-  "statusbar",       TiMisc.new_tistatusbar;
-  "label",           TiMisc.new_tilabel;
-  "color_selection", TiMisc.new_ticolor_selection;
-  "pixmap",          TiMisc.new_tipixmap;
-  "frame",           TiBin.new_tiframe;
-  "aspect_frame",    TiBin.new_tiaspect_frame;
-  "handle_box",      TiBin.new_handle_box;
-  "viewport",        TiBin.new_viewport;
-  "event_box",       TiBin.new_event_box;
-  "scrolled_window", TiBin.new_tiscrolled_window;
-  "entry",           TiEdit.new_tientry;
-  "spin_button",     TiEdit.new_tispin_button;
-  "combo",           TiEdit.new_ticombo;
-  "clist",           TiList.new_clist
-]
-
-let _ =
-  TiBase.new_tiwidget :=
-    (fun ~classe ?(pos = -1) ~name ~parent_tree ?insert_evbox ?(listprop = []) -> (List.assoc classe new_class_list) ~pos ~name ~parent_tree ?insert_evbox ~listprop)
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiWindow.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tiWindow.ml
deleted file mode 100644 (file)
index b44b4d4..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-
-open Utils
-open Property
-
-open TiBase
-open TiContainer
-
-
-class tiwindow ~widget ~name ~parent_tree ~pos ?(insert_evbox=true)
-    parent_window =
-object(self)
-  val window = widget
-  inherit ticontainer ~name ~widget
-      ~insert_evbox:false ~parent_tree ~pos parent_window as container
-
-  method connect_event = window#event#connect
-
-  method private class_name = "GWindow.window"
-
-  method private get_mandatory_props = [ "title" ]
-
-(*  method private save_clean_proplist =
-    List.remove_assoc "title" container#save_clean_proplist
-
-  method private emit_clean_proplist plist =
-    List.remove_assoc "title" (container#emit_clean_proplist plist)
-*)
-  method remove_me () =
-    let sref = ref "" in
-    self#save_to_string sref;
-    let lexbuf = Lexing.from_string !sref in
-    let node = Load_parser.window Load_lexer.token lexbuf in
-    add_undo (Add_window node);
-    self#remove_me_without_undo ()
-
-  method copy () = self#copy_to_sel window_selection
-
-  method remove_me_without_undo () =
-    self#forall ~callback:(fun tiw -> tiw#remove_me_without_undo ());
-    parent_window#remove_sel (self : #tiwidget0 :> tiwidget0);
-    name_list := list_remove !name_list ~f:(fun n -> n=name);
-    Hashtbl.remove widget_map name;
-    Propwin.remove name;
-    widget#destroy ()
-
-  method private get_packing packing = ""
-
-  method emit_code f param_list =
-    let param_string =
-      match param_list with
-      |         [] -> ""
-      |        _ -> "['" ^
-         (String.concat ~sep:", '"
-            (List.map ~f:(fun c -> (String.make 1 c)) param_list)) ^
-         "] " in
-    Format.fprintf f "(* Code for %s *)@\n@\n@[<hv 2>class %s%s () ="
-      name param_string name;
-    self#emit_init_code f ~packing:"";
-    Format.fprintf f "@]@\n@[<hv 2>object (self)";
-    self#emit_method_code f;
-    Format.fprintf f "@ method show () = %s#show ()" name;
-    Format.fprintf f "@ @[<v 2>initializer";
-    self#emit_initializer_code f;
-    Format.fprintf f "@ ()@]@]@ end@\n@\n"
-
-(*  method private save_start formatter =
-    Format.fprintf formatter "@[<0>@\n@[<2><window name=%s>" name;
-    Format.fprintf formatter "@\ntitle=\"%s\""
-      (List.assoc "title" proplist)#get
-*)
-  method private save_end formatter =
-    Format.fprintf formatter "@]@\n</window>@\n@]"
-
-  method private menu ~time =
-    let menu = GMenu.menu () and menu_add = GMenu.menu () in
-    List.iter
-      ~f:(fun n ->
-       let mi = GMenu.menu_item ~packing:menu_add#append ~label:n ()
-       in mi#connect#activate
-         ~callback:(fun () -> self#add_child n (); ()); ())
-      widget_add_list;      
-    let mi_add = GMenu.menu_item ~packing:menu#append ~label:("add to "^ name) ()
-    and mi_paste = GMenu.menu_item ~packing:menu#append ~label:"Paste" ()
-    in
-    mi_add#set_submenu menu_add;
-    if !selection <> ""
-    then begin mi_paste#connect#activate ~callback:self#paste; () end
-    else mi_paste#misc#set_sensitive false;
-    menu#popup ~button:3 ~time
-
-
-  initializer
-    classe <- "window";
-    window#set_title name;
-    proplist <-        proplist @
-      [ "title",
-       new prop_string ~name:"title" ~init:name ~set:(ftrue window#set_title);
-       "allow_shrink", new prop_bool ~name:"allow_shrink" ~init:"false"
-                         ~set:(ftrue window#set_allow_shrink);
-       "allow_grow", new prop_bool ~name:"allow_grow" ~init:"true"
-                       ~set:(ftrue window#set_allow_grow);
-       "auto_shrink", new prop_bool ~name:"auto_shrink" ~init:"false"
-                        ~set:(ftrue window#set_auto_shrink);
-       "x position", new prop_int ~name:"x" ~init:"-2"
-         ~set:(fun x -> window#misc#set_geometry ~x (); true);
-       "y position", new prop_int ~name:"y" ~init:"-2"
-         ~set:(fun y -> window#misc#set_geometry ~y (); true) ]
-end
-
-let new_tiwindow ~name ?(listprop = []) =
-  let w = GWindow.window ~show:true () in
-  w#misc#set_can_focus false;
-  w#misc#set_can_default false;
-  new tiwindow ~widget:w ~name
-
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/togglebutton.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/togglebutton.xpm
deleted file mode 100644 (file)
index f29d769..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *togglebutton_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+..................O+",
-"+.                 O+",
-"+. XXXXXXXXXXXXXXXXO+",
-"+. XXXXXXXXXXXXXXXXO+",
-"+. XXX   XXX XXX XXO+",
-"+. XX XXX XX  XX XXO+",
-"+. XX XXX XX  XX XXO+",
-"+. XX XXX XX X X XXO+",
-"+. XX XXX XX XX  XXO+",
-"+. XX XXX XX XX  XXO+",
-"+. XXX   XXX XXX XXO+",
-"+. XXXXXXXXXXXXXXXXO+",
-"+. XXXXXXXXXXXXXXXXO+",
-"+. XXXXXXXXXXXXXXXXO+",
-"+OOOOOOOOOOOOOOOOOOO+",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/toolbar.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/toolbar.xpm
deleted file mode 100644 (file)
index d9a5217..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *toolbar_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+OOOOOOOOOOOOOOOOOOO ",
-"+OXXXXXXXXXXXXXXXXX. ",
-"+OXOOOO OOOO OOOO X. ",
-"+OXOXXX OXXX OXXX X. ",
-"+OXOXXX OXXX OXXX X. ",
-"+OXO    O    O    X. ",
-"+OXXXXXXXXXXXXXXXXX. ",
-"+O.................. ",
-"+                    ",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tree_minus.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tree_minus.xpm
deleted file mode 100644 (file)
index cce0679..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/* XPM */
-static char *tree_minus[] = {
-/* width height num_colors chars_per_pixel */
-"     9     9        2            1",
-/* colors */
-". c #000000",
-"# c #f8fcf8",
-/* pixels */
-".........",
-".#######.",
-".#######.",
-".#######.",
-".#.....#.",
-".#######.",
-".#######.",
-".#######.",
-"........."
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tree_plus.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/tree_plus.xpm
deleted file mode 100644 (file)
index d0ba80c..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/* XPM */
-static char *tree_plus[] = {
-/* width height num_colors chars_per_pixel */
-"     9     9        2            1",
-/* colors */
-". c #000000",
-"# c #f8fcf8",
-/* pixels */
-".........",
-".#######.",
-".###.###.",
-".###.###.",
-".#.....#.",
-".###.###.",
-".###.###.",
-".#######.",
-"........."
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/utils.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/utils.ml
deleted file mode 100644 (file)
index 0b37975..0000000
+++ /dev/null
@@ -1,353 +0,0 @@
-(* $Id$ *)
-
-open GObj
-
-open Common
-
-external test_modifier : Gdk.Tags.modifier -> int -> bool
-    = "ml_test_GdkModifier_val"
-
-
-(************* types *************)
-(* used in the load_parser and for the selection *)
-
-(* widget: class * name * property list
-   where property = name * value_string *)
-type yywidget = string * string * (string * string) list
-type yywidget_tree = Node of yywidget * yywidget_tree list
-
-
-(*********** some utility functions **************)
-let rec list_remove ~f = function
-  | [] -> []
-  | hd :: tl -> if f hd then tl else hd :: (list_remove ~f tl)
-
-
-(* cut the list at the element elt; elt stays in tail;
-   hd stays in reverse order *)
-let cut_list ~item l =
-  let rec aux h t = match t with
-  | hd :: tl -> if hd = item then h, t
-       else aux (hd :: h) tl
-  | [] -> failwith "cut_list"
-  in aux [] l
-
-let list_pos ~item l =
-  let rec aux pos = function
-    | [] -> raise Not_found
-    | hd :: tl -> if hd = item then pos else aux (pos+1) tl
-  in aux 0 l
-
-(* moves the pos element up; pos is >= 1;
-   the first element is numbered 0 *)
-let rec list_reorder_up ~pos = function
-    | hd1 :: hd2 :: tl when pos = 1 -> hd2 :: hd1 :: tl
-    | hd :: tl when pos > 1 -> hd :: (list_reorder_up ~pos:(pos-1) tl)
-    | _ -> failwith "list_reorder"
-
-(* moves the pos element down; pos is < length of l - 1;
-   the first element is numbered 0 *)
-let rec list_reorder_down ~pos = 
-  list_reorder_up ~pos:(pos+1)
-
-
-let rec list_insert ~item l ~pos =
-  if pos=0 then item :: l
-  else
-    match l with
-    | [] ->  failwith "list_insert"
-    | hd :: tl -> hd :: (list_insert ~item tl ~pos:(pos-1))
-
-
-let rec change_property_name oldname newname = function
-  | (n, p) :: tl when oldname = n -> (newname, p) :: tl
-  | (n, p) :: tl -> (n, p) :: change_property_name oldname newname tl
-  | [] -> failwith "change_property_name: name not found"
-
-
-
-(* contains the list of names of widgets in the current project;
-   used to test if a name is already used;
-   a name is added to the list when a tiwrapper is created (in
-   the initilizer part of tiwrapper,
-   it is removed when the widget is removed from his parent,
-   in method remove_me of tiwrapper *)
-let name_list = ref ([] : string list)
-
-let split name =
-  let l = String.length name in
-  let i = ref (l-1) in
-  while !i >= 0 && name.[!i] >= '0' && name.[!i] <= '9' do decr i done;
-  if !i = l-1 then
-    name, (-1)
-  else
-    (String.sub name ~pos:0 ~len:(!i+1)),
-    int_of_string (String.sub name ~pos:(!i+1) ~len:(l- !i-1))
-
-let test_unique name = not (List.mem name !name_list)
-
-let make_new_name ?(index=1) base =
-  let index, name =
-    if index = -1 then ref 1, ref base
-    else ref index, ref (base ^ (string_of_int index)) in
-  while not (test_unique !name) do
-    incr index;
-    name := base ^ (string_of_int !index)
-  done;
-  !name
-
-let change_name name =
-  let base, index = split name in make_new_name base ~index
-
-let message s =
-  let w = GWindow.window ~show:true ~modal:true () in
-  let v = GPack.vbox ~packing:w#add () in
-  let l = GMisc.label ~text:s ~packing:v#add () in
-  let b = GButton. button ~label:"OK" ~packing:v#add () in
-  b#connect#clicked ~callback:w#destroy;
-  w#connect#destroy ~callback:GMain.Main.quit;
-  GMain.Main.main ()
-
-let message_name () = message "name already in use\npick a new name"
-
-(* better: use a spin button *)
-let get_a_number s default=
-  let res = ref default in
-  let w = GWindow.window ~show:true ~modal:true () in
-  let v = GPack.vbox ~packing:w#add () in
-  let l = GMisc.label ~text:s ~packing:v#add () in
-  let e = GEdit.entry ~text:(string_of_int default) ~packing:v#add () in
-  let b = GButton. button ~label:"OK" ~packing:v#add () in
-  b#connect#clicked ~callback:(fun () ->
-    begin try res := int_of_string e#text with Failure _ -> () end;
-    w#destroy ());
-  w#connect#destroy ~callback:GMain.Main.quit;
-  GMain.Main.main ();
-  !res
-
-
-(*************** file selection *****************)
-
-let get_filename ~callback:set_filename ?(dir="") () =
-  let res = ref false in
-  let file_selection = GWindow.file_selection ~modal:true () in
-  if dir <> "" then file_selection#set_filename dir;
-  file_selection#show ();
-  file_selection#ok_button#connect#clicked
-    ~callback:(fun () -> set_filename file_selection#get_filename;
-      res := true;
-      file_selection#destroy ());
-  file_selection#cancel_button#connect#clicked
-    ~callback:file_selection#destroy;
-  file_selection#connect#destroy ~callback:GMain.Main.quit;
-  GMain.Main.main ();
-  !res
-
-(* returns the directory and the file name (without the extension) *)
-let split_filename filename ~ext =
-  let lext = String.length ext in
-  let l = String.length filename in
-  let filename, l =
-    if (l > lext) && (String.sub filename ~pos:(l - lext) ~len:lext = ext)
-    then (String.sub filename ~pos:0 ~len:(l-lext)), l-lext
-    else filename, l in
-  let i = 1 + (String.rindex filename '/') in
-  String.sub filename ~pos:0 ~len:i,
-  String.sub filename ~pos:i ~len:(l-i)
-
-
-(******************  ML signals *****************)
-let signal_id = ref 0
-
-let next_callback_id () : GtkSignal.id =
-  decr signal_id; Obj.magic (!signal_id : int)
-
-class ['a] signal = object
-  val mutable callbacks : (GtkSignal.id * ('a -> unit)) list = []
-  method connect ~callback ~after =
-    let id = next_callback_id () in
-    callbacks <-
-      if after then callbacks @ [id,callback] else (id,callback)::callbacks;
-    id
-  method call arg =
-    List.iter callbacks ~f:(fun (_,f) -> f arg)
-  method disconnect id =
-    List.mem_assoc id callbacks &&
-    (callbacks <- List.remove_assoc id callbacks; true)
-  method reset () = callbacks <- []
-end
-
-class type disconnector =
-  object
-    method disconnect : GtkSignal.id -> bool
-    method reset : unit -> unit
-  end
-
-class has_ml_signals = object
-  val mutable disconnectors = []
-  method private add_signal (sgn : 'a signal) =
-    disconnectors <- (sgn :> disconnector) :: disconnectors
-
-  method disconnect id =
-    List.exists disconnectors ~f:(fun d -> d#disconnect id)
-end
-
-
-(****************** undo information ********************)
-
-type undo_action =
-  | Add of string * yywidget_tree * int
-  | Remove of string
-  | Property of prop * string
-  | Add_window of yywidget_tree
-  | Remove_window of string
-
-let undo_info = ref ([] : undo_action list)
-let next_undo_info = ref ([] : undo_action list)
-let last_action_was_undo = ref false
-
-let add_undo f =
-  undo_info := f :: !undo_info;
-  last_action_was_undo := false
-
-
-(**********************************************************)
-let ftrue f = fun x -> f x; true
-
-
-(**********************************************************)
-
-let toolbar_child_prop kind =
-  let rt = ref "" and rtt = ref "" and rptt = ref "" and ok = ref false in
-  let w  = GWindow.window ~modal:true () in
-  let v  = GPack.vbox ~packing:w#add () in
-  let h1 = GPack.hbox ~packing:v#pack () in
-  let h2 = GPack.hbox ~packing:v#pack () in
-  let h3 = GPack.hbox ~packing:v#pack () in
-  let h4 = GPack.hbox ~packing:v#pack () in
-  let l1 = GMisc.label ~text:"text" ~packing:h1#pack () in
-  let e1 = GEdit.entry ~packing:h1#pack () in
-  let l2 = GMisc.label ~text:"tooltip_text" ~packing:h2#pack () in
-  let e2 = GEdit.entry ~packing:h2#pack () in
-  let l3 = GMisc.label ~text:"private_text" ~packing:h3#pack () in
-  let e3 = GEdit.entry ~packing:h3#pack () in
-  let b1 = GButton.button ~label:"OK" ~packing:h4#pack () in
-  let b2 = GButton.button ~label:"Cancel" ~packing:h4#pack () in
-  w#show ();
-  b1#connect#clicked
-    ~callback:(fun () -> rt := e1#text; rtt := e2#text;
-      rptt := e3#text; ok := true;
-      w#destroy ());
-  b2#connect#clicked ~callback:w#destroy;
-  w#connect#destroy ~callback:GMain.Main.quit;
-  GMain.Main.main ();
-  !ok, !rt, !rtt, !rptt
-
-
-
-(**********************************************************)
-
-let get5floats_from_string s =
-  try
-    let n1 = String.index s ' ' in
-    let f1 = float_of_string (String.sub s ~pos:0 ~len:(n1-1)) in
-    let n2 = String.index_from s (n1+1) ' ' in
-    let f2 = float_of_string (String.sub s ~pos:(n1+1) ~len:(n2-1)) in
-    let n3 = String.index_from s (n2+1) ' ' in
-    let f3 = float_of_string (String.sub s ~pos:(n2+1) ~len:(n3-1)) in
-    let n4 = String.index_from s (n3+1) ' ' in
-    let f4 = float_of_string (String.sub s ~pos:(n3+1) ~len:(n4-1)) in
-    let f5 = float_of_string (String.sub s ~pos:(n4+1) ~len:
-                               ((String.length s) -1)) in
-    f1, f2, f3, f4, f5
-  with _ -> failwith "get5floats_of_string"
-
-
-
-(**********************************************************)
-
-exception Float_of_string
-let my_float_of_string s =
-  let l = String.length s in
-  if l=0 then raise Float_of_string;
-  let sign, d = match s.[0] with
-  | '+' ->  1, 1
-  | '-' -> -1, 1
-  | _   ->  1, 0 in
-  let m, p =
-    let p = 
-      try
-       String.index s '.'
-      with Not_found -> l in
-    if p=d then 0, p
-    else
-      try int_of_string (String.sub s ~pos:d ~len:(p-d)), p
-      with Failure "int_of_string" -> raise Float_of_string
-  in
-  if p=l then float_of_int m
-  else begin
-    let f = ref 0. and r = ref 0.1 in
-    for i = p+1 to l-1 do
-      let k = (int_of_char s.[i]) - 48 in
-      if k > 9 || k < 0 then raise Float_of_string;
-      f := !f +. (float_of_int k) *. !r;
-      r := !r *. 0.1
-    done;
-    !f +. (float_of_int m)
-  end
-
-    
-  
-
-class entry_float obj ~init = let rv = ref init in
-object
-  inherit GEdit.entry obj as entry
-  method value =
-    try 
-      let v = my_float_of_string entry#text in
-      rv := v;
-      v
-    with Float_of_string ->
-      let pop = GWindow.window ~title:"error" ~modal:true () in
-      let vb = GPack.vbox ~packing:pop#add () in
-      let l = GMisc.label ~text:"value must be a float" ~packing:vb#pack () in
-      let b = GButton.button ~label:"OK" ~packing:vb#pack () in
-      b#connect#clicked ~callback:pop#destroy;
-      pop#event#connect#delete ~callback:(fun _ -> pop#destroy (); true);
-      pop#connect#destroy ~callback:GtkMain.Main.quit;
-      pop#show ();
-      GtkMain.Main.main ();
-      entry#set_text (string_of_float !rv);
-      !rv
-end
-
-
-let set_editable ?editable ?(width = -2) ?(height = -2) w =
-  Gaux.may editable ~f:(GtkEdit.Editable.set_editable w);
-  if width <> -2 || height <> -2 then GtkBase.Widget.set_usize w ~width ~height
-
-
-let entry_float ~init ?max_length ?visibility ?editable
-    ?width ?height ?packing ?show () = 
-  let w = GtkEdit.Entry.create ?max_length () in
-  GtkEdit.Entry.set w ~text:(string_of_float init) ?visibility;
-  set_editable w ?editable ?width ?height;
-  pack_return (new entry_float w ~init) ~packing ~show
-
-
-(*************************************************************)
-
-
-let split_string s ~sep =
-  let l = String.length s in
-  let r = ref [] in
-  let j = ref 0 in
-  for i = 0 to l-1 do
-    if String.unsafe_get s i = sep then begin
-      r := (String.sub s ~pos:!j ~len:(i - !j)) :: !r;
-      j := i + 1
-    end
-  done;
-  List.rev ((String.sub s ~pos:!j ~len:(l - !j)) :: !r)
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/vbox.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/vbox.xpm
deleted file mode 100644 (file)
index 1c557b0..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* XPM */
-static char *vbox_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 4 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c Gray100",
-/* pixels */
-"oooooooooooooooooooo ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"o................... ",
-"                     ",
-"oooooooooooooooooooo ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"o................... ",
-"                     ",
-"oooooooooooooooooooo ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"oXXXXXXXXXXXXXXXXXX. ",
-"o................... ",
-"                     "
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/vbuttonbox.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/vbuttonbox.xpm
deleted file mode 100644 (file)
index 0c2bc95..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* XPM */
-static char *vbuttonbox_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 6 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray100",
-"+ c None",
-/* pixels */
-"+++++++++++++++++++++",
-"+++++++++++++++++++++",
-"++++++++OOOOO +++++++",
-"++++++++OXXX. +++++++",
-"++++++++OXXX. +++++++",
-"++++++++O.... +++++++",
-"++++++++      +++++++",
-"+++++++++++++++++++++",
-"++++++++OOOOO +++++++",
-"++++++++OXXX. +++++++",
-"++++++++OXXX. +++++++",
-"++++++++O.... +++++++",
-"++++++++      +++++++",
-"+++++++++++++++++++++",
-"++++++++OOOOO +++++++",
-"++++++++OXXX. +++++++",
-"++++++++OXXX. +++++++",
-"++++++++O.... +++++++",
-"++++++++      +++++++",
-"+++++++++++++++++++++",
-"+++++++++++++++++++++"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/viewport.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/viewport.xpm
deleted file mode 100644 (file)
index 71e5e80..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* XPM */
-static char *viewport_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 7 1",
-"  c Gray0",
-". c #7b7b7b",
-"X c #d6d6d6",
-"o c #b3cece",
-"O c Gray87",
-"+ c Gray100",
-"@ c None",
-/* pixels */
-"@@@@@@@@@@@@@@@@@@@@@",
-"@...................@",
-"@.                +O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@. XXXXXXXXXXXXXXX+O@",
-"@.+++++++++++++++++O@",
-"@.OOOOOOOOOOOOOOOOOO@",
-"@@@@@@@@@@@@@@@@@@@@@"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/vseparator.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/vseparator.xpm
deleted file mode 100644 (file)
index 3455f74..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* XPM */
-static char *vseparator_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 4 1",
-"  c #7b7b7b",
-". c #b3cece",
-"X c Gray100",
-"o c None",
-/* pixels */
-"ooooooooooooooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"oooooooooo Xooooooooo",
-"ooooooooooooooooooooo"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/window.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/radtest/window.xpm
deleted file mode 100644 (file)
index 8407e28..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char *window_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"21 21 11 1",
-"  c Gray0",
-". c #00007b",
-"X c #7b7b7b",
-"o c Green",
-"O c Cyan",
-"+ c Red",
-"@ c Yellow",
-"# c #d6d6d6",
-"$ c #b3cece",
-"% c Gray100",
-"& c None",
-/* pixels */
-"&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&",
-"XXXXXXXXXXXXXXXXXXXX&",
-"X.+@...............X ",
-"X.Oo.%%%.%%.....# #X ",
-"XXXXXXXXXXXXXXXXXXXX ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"X#%%%%%%%%%%%%%%%%%X ",
-"XXXXXXXXXXXXXXXXXXXX ",
-"&                    ",
-"&&&&&&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&&&&&&"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/unison/.cvsignore b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/unison/.cvsignore
deleted file mode 100644 (file)
index 31706ab..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unison-*
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/unison/README b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/applications/unison/README
deleted file mode 100644 (file)
index e98697a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-       A GUI for Unison
-
-As of version 2.6.1, unison works with LablGTK snapshots.
-You may just compile it after having installed lablgtk.
-
-       http://www.cis.upenn.edu/~bcpierce/unison/
-
-Jacques Garrigue
-
-$Id$
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/config.make.nt b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/config.make.nt
deleted file mode 100644 (file)
index 3fe6b56..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-LIBDIR=c:/Home/garrigue/ocaml/lib
-GTKCFLAGS=-I../glib -I../gtk+
-GTKSRC=c:\Home\garrigue
-GTKLIBS=$(GTKSRC)/glib/gmodule-1.3.lib $(GTKSRC)/glib/glib-1.3.lib $(GTKSRC)/gtk+/gdk/gdk-1.3.lib $(GTKSRC)/gtk+/gtk/gtk-1.3.lib
-USE_GL=0
-USE_CC=0
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/configure.mk b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/configure.mk
deleted file mode 100644 (file)
index 49b3d70..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# makefile for configuring lablGTK
-
-# Default compilers
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-
-# Default installation directories
-BINDIR = `$(GETBINDIR)`
-INSTALLDIR = $(LIBDIR)/lablgtk
-
-# Autoconf
-GETLIBDIR = ocamlc -v | grep "^Standard" | sed 's/^.*: *//'
-LIBDIR = `$(GETLIBDIR)`
-GETBINDIR = $(GETLIBDIR) | sed -e 's|/lib/[^/]*$$|/bin|' -e 's|/lib$$|/bin|'
-GETRANLIB = which ranlib 2>/dev/null | sed -e 's|.*/ranlib$$|!|' -e 's/^[^!]*$$/:/' -e 's/!/ranlib/'
-
-ifdef USE_GNOME
-GTKGETCFLAGS = gtk-config --cflags`" -I"`gnome-config --includedir
-GNOMELIBS = `gnome-config --libs gtkxmhtml`
-else
-GTKGETCFLAGS = gtk-config --cflags
-endif
-
-GTKGETLIBS = gtk-config --libs
-
-configure: .depend config.make
-
-.depend:
-       ocamldep *.ml *.mli > .depend
-
-config.make:
-       @echo CAMLC=$(CAMLC) > config.make
-       @echo CAMLOPT=$(CAMLOPT) >> config.make
-       @echo USE_GL=$(USE_GL) >> config.make
-       @echo USE_GNOME=$(USE_GNOME) >> config.make
-       @echo USE_CC=$(USE_CC) >> config.make
-       @echo DEBUG=$(DEBUG) >> config.make
-       @echo CC=$(CC) >> config.make
-       @echo RANLIB=`$(GETRANLIB)` >> config.make
-       @echo LIBDIR=$(LIBDIR) >> config.make
-       @echo BINDIR=`$(GETBINDIR)` >> config.make
-       @echo INSTALLDIR=$(INSTALLDIR) >> config.make
-       @echo GTKCFLAGS=`$(GTKGETCFLAGS)` >> config.make
-       @echo GTKLIBS=`$(GTKGETLIBS)` | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-       @echo GNOMELIBS=$(GNOMELIBS) | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-       cat config.make
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/doc/formula.eps b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/doc/formula.eps
deleted file mode 100644 (file)
index 31ddafc..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Creator: dvipsk 5.78 p1.4c Copyright 1996-99 ASCII Corp.(www-ptex@ascii.co.jp)
-%%dvipsk 5.78 Copyright 1998 Radical Eye Software (www.radicaleye.com)
-%%Title: formula.dvi
-%%BoundingBox: 71 318 395 524
-%%DocumentFonts: Symbol Times-Italic Times-Roman Helvetica
-%%EndComments
-%DVIPSCommandLine: dvips -E -o formula.eps formula
-%DVIPSParameters: dpi=300, compressed
-%DVIPSSource:  TeX output 1999.08.19:0906
-%%BeginProcSet: texc.pro
-%!
-/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
-/X{S N}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{dup dup 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 /IE 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 IE N
-end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /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 dup definefont setfont}B /ch-width{ch-data dup
-length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
-128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
-get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
-dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
-/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
-/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
-0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
-setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
-.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
-/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
-gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
-add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
-/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
-dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
-adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
-idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
-putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
-adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
-{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
-adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
-chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
-}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
-length 1 sub dup 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 dup 1 get dup mul exch 0 get dup 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
-/IE 256 array N 2 string 0 1 255{IE S dup 360 add 36 4 index cvrs cvn
-put}for pop 65781.76 div /vsize X 65781.76 div /hsize X}N /dir 0 def
-/dyy{/dir 0 def}B /dyt{/dir 1 def}B /dty{/dir 2 def}B /dtt{/dir 3 def}B
-/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90
-rotate}{show}ifelse}ifelse}B /RMat[1 0 0 -1 0 0]N /BDot 260 string N
-/rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V{}B /RV statusdict
-begin /product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{dup
-length product length le{dup 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 rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR
--.1 .1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}
-ifelse B /QV{gsave newpath transform round exch round exch itransform
-moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto fill
-grestore}B /a{moveto}B /delta 0 N /tail{dup /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
-% @@psencodingfile@{
-%   author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
-%   version = "0.6",
-%   date = "22 June 1996",
-%   filename = "8r.enc",
-%   email = "kb@@mail.tug.org",
-%   address = "135 Center Hill Rd. // Plymouth, MA 02360",
-%   codetable = "ISO/ASCII",
-%   checksum = "119     662    4424",
-%   docstring = "Encoding for TrueType or Type 1 fonts to be used with TeX."
-% @}
-% 
-% 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 + 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.
-% 
-% (4) Remaining positions left undefined are for use in (hopefully)
-% upward-compatible revisions, if someday more characters are generally
-% available.
-% 
-% (5) hyphen appears twice for compatibility with both ASCII and Windows.
-% 
-/TeXBase1Encoding [
-% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
-  /.notdef /dotaccent /fi /fl
-  /fraction /hungarumlaut /Lslash /lslash
-  /ogonek /ring /.notdef
-  /breve /minus /.notdef 
-% These are the only two remaining unencoded characters, so may as
-% well include them.
-  /Zcaron /zcaron 
-% 0x10
- /caron /dotlessi 
-% (unusual TeX characters available in, e.g., Lucida Bright)
- /dotlessj /ff /ffi /ffl 
- /.notdef /.notdef /.notdef /.notdef
- /.notdef /.notdef /.notdef /.notdef
- % very contentious; it's so painful not having quoteleft and quoteright
- % at 96 and 145 that we move the things normally found there down to here.
- /grave /quotesingle 
-% 0x20 (ASCII begins)
- /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 % rubout; ASCII ends
-% 0x80
- /.notdef /.notdef /quotesinglbase /florin
- /quotedblbase /ellipsis /dagger /daggerdbl
- /circumflex /perthousand /Scaron /guilsinglleft
- /OE /.notdef /.notdef /.notdef
-% 0x90
- /.notdef /.notdef /.notdef /quotedblleft
- /quotedblright /bullet /endash /emdash
- /tilde /trademark /scaron /guilsinglright
- /oe /.notdef /.notdef /Ydieresis
-% 0xA0
- /.notdef % nobreakspace
- /exclamdown /cent /sterling
- /currency /yen /brokenbar /section
- /dieresis /copyright /ordfeminine /guillemotleft
- /logicalnot
- /hyphen % Y&Y (also at 45); Windows' softhyphen
- /registered
- /macron
-% 0xD0
- /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
-%!
-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]/Metrics
-exch def dict begin 0 1 255{exch dup type /integertype ne{pop pop 1 sub
-dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
-ifelse}for Metrics /Metrics currentdict end def[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{/Encoding exch def}def end
-
-%%EndProcSet
-%%BeginProcSet: special.pro
-%!
-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 /copypage{}N /p 3 def @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 /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
-%!
-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
-TeXDict begin 40258437 52099154 1000 300 300 (formula.dvi)
-@start /Fa 134[ 41 5[ 41 3[ 46 46 1[ 18 6[ 46 15[ 60
-4[ 55 14[ 55 23[ 28 28 40[{  TeXBase1Encoding ReEncodeFont } 11
-82.6359 /Helvetica rf /Fb 205[ 34 34 49[{
- TeXBase1Encoding ReEncodeFont } 2 68.8667 /Times-Roman
-rf /Fc 154[ 30 101[{ } 1 68.8667 /Symbol rf
-%DVIPSBitmapFont: Fd cmr10 19.907 4
-/Fd 4 94 df<146014E0EB01C0EB0380EB0700130E5B133C13385B13F05B1201485AA248
-5AA348C7FCA25A121EA2123EA2123CA2127CA5127812F8B01278127CA5123CA2123EA212
-1EA2121F7EA26C7EA36C7EA26C7E12007F13707F133C131C7F7FEB0380EB01C0EB00E014
-60135278BD20> 40 D<7E7E7E12707E7E7E120F7E6C7E7F12017F6C7EA21378A37FA213
-3E131EA2131FA27FA21480A5130714C0B01480130FA51400A25BA2131EA2133E133CA25B
-A35BA2485A5B12035B48C7FC5A120E5A5A5A5A5A5A12527BBD20> I<EAFFF8A4EAF000B3
-B3B3B3A3EAFFF8A40D5378BD17> 91 D<EAFFF8A4EA0078B3B3B3B3A3EAFFF8A40D537F
-BD17> 93 D E
-%EndDVIPSBitmapFont
-/Fe 197[ 23 58[{  TeXBase1Encoding ReEncodeFont } 1 82.6359
-/Times-Roman rf
-%DVIPSBitmapFont: Ff cmsy10 19.907 4
-/Ff 4 106 df<0060161800F0163CA26C167C00781678007C16F8003C16F0A2003E1501
-001E16E0A2001F15036C16C06D140700071680A26D140F000316006D5C6CB612FEA36C5D
-01F8C7127C01781478A2017C14F8013C5CA2013E1301011E5C011F13036D5CA2EC800701
-075CECC00F010391C7FCA26E5A0101131EECF03E0100133CA2ECF87CEC7878A2EC7CF8EC
-3CF0143F6E5AA36E5AA26E5AA26EC8FC2E3A80B82F> 56 D<126012F0B3A7B8FC1780A3
-00F0CAFCB3A8126029397CB832> 96 D<14C0EB01E0A2130314C013071480A2130F1400
-A25B131E133E133CA2137C137813F85BA212015BA212035B12075BA2120F90C7FC5A121E
-A2123E123CA2127C127812F85AA27E1278127C123CA2123E121EA2121F7E7F1207A27F12
-037F1201A27F1200A27F1378137C133CA2133E131E131F7FA214801307A214C0130314E0
-1301A2EB00C0135278BD20> 104 D<126012F0A27E1278127C123CA2123E121EA2121F7E
-7F1207A27F12037F1201A27F1200A27F1378137C133CA2133E131E131F7FA214801307A2
-14C0130314E01301A2130314C013071480A2130F1400A25B131E133E133CA2137C137813
-F85BA212015BA212035B12075BA2120F90C7FC5A121EA2123E123CA2127C127812F85AA2
-126013527CBD20> I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg cmmi10 19.907 1
-/Fg 1 59 df<121C123E127FEAFF80A3EA7F00123E121C0909798817> 58
-D E
-%EndDVIPSBitmapFont
-/Fh 158[ 41 31[ 50 65[{  TeXBase1Encoding ReEncodeFont } 2
-82.6359 /Times-Italic rf /Fi 139[ 36 50 13[ 36 101[{ } 3
-82.6359 /Symbol rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 300dpi
-TeXDict begin
-
-%%EndSetup
-0 0 bop Black Black 0 0.7 0 TeXcolorrgb Fh 567 883 a(A) p
-Ff 636 883 a(`) p Fh 705 883 a(a) p Fe 765 883 a(:) p
-0 0 1 TeXcolorrgb Fi 806 883 a(t) p Fb 842 900 a(1) p
-0 0.7 0 TeXcolorrgb Fd 948 883 a(\() p 0 0 1 TeXcolorrgb
-Fi(t) p Fb 1016 900 a(1) p 0 0.7 0 TeXcolorrgb Fe 1071
-883 a(:) p 0 0 1 TeXcolorrgb Fi 1112 883 a(t) p 0 0.7 0
-TeXcolorrgb Fe 1167 883 a(:) p 0 0 1 TeXcolorrgb Fi 1208
-883 a(t) p Fb 1244 900 a(2) p 0 0.7 0 TeXcolorrgb Fd
-1281 883 a(\)) p 567 920 746 4 v Fh 704 995 a(A) p Ff
-773 995 a(`) p Fd 842 995 a(\() p Fh(a) p Fe 934 995
-a(:) p 0 0 1 TeXcolorrgb Fi 975 995 a(t) p 0 0.7 0 TeXcolorrgb
-Fd(\)) p Fe 1062 995 a(:) p 0 0 1 TeXcolorrgb Fi 1103
-995 a(t) p Fb 1139 1012 a(2) p 0 0.7 0 TeXcolorrgb Black
-Fa 2 939 a(\(Ann\)) p 0 0.7 0 TeXcolorrgb Black 0 0.7 0
-TeXcolorrgb Fh 540 1208 a(A) p Ff 609 1208 a(`) p Fh
-678 1208 a(a) p Fe 738 1208 a(:) p 0 0 1 TeXcolorrgb
-Fi 779 1208 a(s) p Fb 829 1225 a(1) p 0 0.7 0 TeXcolorrgb
-Fd 934 1208 a(\() p 0 0 1 TeXcolorrgb Fi(s) p Fb 1016
-1225 a(1) p 0 0.7 0 TeXcolorrgb Fe 1071 1208 a(:) p 0 0 1
-TeXcolorrgb Fi 1112 1208 a(s) p 0 0.7 0 TeXcolorrgb Fe
-1180 1208 a(:) p 0 0 1 TeXcolorrgb Fi 1222 1208 a(s) p
-Fb 1272 1225 a(2) p 0 0.7 0 TeXcolorrgb Fd 1308 1208
-a(\)) p 540 1245 801 4 v Fh 661 1321 a(A) p Ff 730 1321
-a(`) p Fd 799 1321 a([) p Fh(a) p Fe 881 1321 a(:) p
-0 0 1 TeXcolorrgb Fi 923 1321 a(s) p 0 0.7 0 TeXcolorrgb
-Fd 972 1321 a(]) p Fe 1014 1321 a(:) p 0 0 1 TeXcolorrgb
-Fd 1055 1321 a([) p Fi(s) p Fb 1128 1338 a(2) p Fd 1164
-1321 a(]) p Fc 1187 1297 a(e) p 0 0.7 0 TeXcolorrgb Black
-Fa 2 1264 a(\(P) l(oly\)) p 0 0.7 0 TeXcolorrgb Black
-0 0.7 0 TeXcolorrgb Fh 704 1537 a(A) p Ff 773 1537 a(`) p
-Fh 842 1537 a(a) p Fe 902 1537 a(:) p 0 0 1 TeXcolorrgb
-Ff 943 1537 a(8) p Fi(e) p Fg(:) p Fd([) p Fi(s) p Fd(]) p
-Fc 1145 1507 a(e) p 0 0.7 0 TeXcolorrgb 704 1573 472
-4 v Fh 764 1649 a(A) p Ff 833 1649 a(`) p 902 1649 a(h) p
-Fh(a) p Ff(i) p Fe 1025 1649 a(:) p 0 0 1 TeXcolorrgb
-Fi 1067 1649 a(s) p 0 0.7 0 TeXcolorrgb Black Fa 2 1592
-a(\(Use\)) p 0 0.7 0 TeXcolorrgb Black Black Black 90 rotate
-dyy eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/doc/lablgtk.mgp b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/doc/lablgtk.mgp
deleted file mode 100644 (file)
index 3eac793..0000000
+++ /dev/null
@@ -1,558 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%deffont "code" xfont "itc avant garde gothic-demi-r", tfont "verdana.ttf"
-%deffont "code-bold" xfont "terminal-bold-r", tfont "verdanab.ttf"
-%deffont "sans" xfont "helvetica-medium-r", tfont "comic.ttf"
-%deffont "sans-bold" xfont "helvetica-bold-r", tfont "comicbd.ttf"
-%deffont "sansit" xfont "helvetica-medium-i", tfont "marlett.ttf"
-%deffont "title" xfont "times-medium-r", tfont "times.ttf"
-%deffont "title-bold" xfont "times-bold-r", tfont "timesbd.ttf"
-%default 1 right, size 2, fore "white", bgrad
-%default 1 vfont "goth", font "sans-bold", vgap 100
-%default 2 leftfill, size 8, vgap 60, prefix " ", font "sans"
-%default 3 size 4, bar "beige", vgap 10
-%default 4 size 5, fore "white", vgap 20, prefix " "
-%tab 1 size 5, vgap 40, prefix "  ", icon box "green" 50
-%tab 2 size 5, vgap 40, prefix "      ", icon arc "yellow" 50
-%tab 3 size 5, vgap 40, prefix "            ", icon arc "white" 40
-%tab com1      size 4, prefix "     "
-%tab com2      size 4, prefix "          "
-%tab com3      size 4, prefix "             "
-%tab txt       font "sans", size 5, fore "white", prefix " "
-%tab vspace    size 2
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-%nodefault
-%size 9, font "title-bold"
-%fore "beige", back "navyblue", vgap 20
-%center
-
-
-A Type System in Action:
-
-the LablGTK Interface
-
-
-%size 7, font "title"
-Jacques Garrigue
-Kyoto University
-%size 6, font "code"
-garrigue@kurims.kyoto-u.ac.jp
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-2
-Synopsis
-
-       Objective Label introduction
-%size 2
-
-       Why GTK+?
-       GTK+/LablGTK structure
-%size 2
-
-       Low Level
-               Type encoding with variants
-               Labeled parameters
-%size 2
-
-       High Level
-               Object-orientation
-               Optional arguments
-               Polymorphic methods
-%size 2
-
-       Conclusion
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-3
-Objective Label
-
-       Based on Objective Caml
-               ML syntax and type inference
-               Class-based object system
-
-       Several extensions
-               Labeled and optional parameters
-               Polymorphic variants
-               Polymorphic methods
-
-       Tools
-               Type-based browser
-               GUI and 3D graphics
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-4
-Labels and optionals
-
-%font "code", size 4, prefix "    ", fore "yellow"
-let rec map fun:f = function
-    [] -> []
-  | x :: l -> f x :: map fun:f l
-%fore "lightpink"
-val map : fun:('a -> 'b) -> 'a list -> 'b list
-
-%pause, fore "yellow", font "code"
-let f = map [1;2;3]
-%fore "lightpink"
-val f : fun:(int -> 'a) -> 'a list
-%fore "yellow"
-f fun:(fun x -> 2*x)
-%fore "lightpink"
-- : int list = [2; 3; 4]
-
-%pause, fore "yellow", font "code"
-let f x ?incr:y [< 1 >] = x + y
-%fore "lightpink"
-val f : int -> ?incr:int -> int
-%fore "yellow"
-f 1
-%fore "lightpink"
-- : int = 2
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-5
-Polymorphic variants
-
-
-%font "code", size 4, prefix "    ", fore "yellow"
-[`on; `off]
-%fore "lightpink"
-- : [> off on] list = [`on; `off]
-
-%pause, fore "yellow", font "code"
-`number 1;;
-%fore "lightpink"
-- : [> number(int)] = `number 1
-
-%pause, fore "yellow", font "code"
-let f = function `on -> 1 | `off -> 0 | `number n -> n
-%fore "lightpink"
-val f : [< number(int) off on] -> int
-
-%pause, fore "yellow", font "code"
-type t = [on off number(int)]
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-6
-Polymorphic methods
-
-Not allowed in Objective Caml
-%size 2
-
-%font "code", size 4, prefix "    ", fore "yellow"
-class c = object method m x = x end
-%fore "red"
-Some type variables are unbound in this type:
-  class c : object method m : 'a -> 'a end
-The method m has type 'a -> 'a where 'a is unbound
-
-%pause, font "sans", size 5, prefix " ", fore "white"
-Need explicit annotation in O'Labl
-%size 2
-
-%font "code", size 4, prefix "    ", fore "yellow"
-class c = object
-    method m : 'a. 'a -> 'a = fun x -> x
-end
-%fore "lightpink"
-class c : object method m : 'a -> 'a end
-%fore "yellow"
-let o = new c
-%fore "lightpink"
-val o : c = <obj>
-%fore "yellow"
-o#m 1, o#m true
-%fore "lightpink"
-- : int * bool = 1, true
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-7
-Why GTK+ ?
-
-Why use the GIMP Tool Kit?
-%size 3
-
-       Widely used in free software
-
-       Easy to interface
-               Written in C (QT uses C++)
-               Memory management
-
-Drawbacks
-%size 3
-
-       Design lacks uniformity
-       Extensive use of dynamic typing
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-8
-GTK+ Structure
-
-Class hierarchy based on GtkObject
-%size 2
-
-       Single inheritance
-&com1 New widgets may redefine methods
-%size 2
-
-       Dynamically checked
-&com1 Casting necessay both up and down
-%size 2
-
-       Developper-side hierarchy
-&com1 Inheritance is not always meaningful to the user
-%size 2
-
-%size 5
-Signal-based callback mechanism
-%size 2
-
-       May use multiple callbacks
-%size 2
-
-       Signals are polymorphic
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-9
-LablGTK structure
-
-Typed at all levels
-
-       Low-level interface
-%size 2
-
-               C stub functions -- typechecked by C
-
-               ML type declarations -- ML abstract types
-
-       High-level interface
-%size 2
-
-               ML class wrappers -- ML concrete types
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-10
-Low Level Interface
-
-Goals
-
-       Strongly typed interface
-&com1 heavy use of advanced typing techniques
-
-       Very little ML code
-&com1 C-stubs and external declarations
-
-       Safe memory management
-&com1 have the library cooperate with the GC
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-11
-Low level encoding (I)
-
-
-How to represent widget subtyping in ML?
-
-       Example: buttons' hierarchy
-%size 2
-
-%font "code", size 5, prefix "      ", fore "yellow"
-GtkObject
-    GtkWidget
-        GtkContainer
-            GtkButton
-                GtkToggleButton
-                    GtkRadioButton
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-12
-Variants as set constraints
-
-
-Variants can be seen as sets of possible values:
-
-       [tag1 ... tagn] = {tag1,...,tagn}
-
-
-Polymorphic variants introduce constraints
-
-       \e$B&A\e(B[> tag1 ... tagn] \e$B"N\e(B \e$B&A\e(B \e$B"?\e(B {tag1,...,tagn}
-       \e$B&A\e(B[< tag1 ... tagn] \e$B"N\e(B \e$B&A\e(B \e$B">\e(B {tag1,...,tagn}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-13
-Encoding hierarchies
-
-Define an abstract type
-&vspace
-%font "code", fore "yellow", size 5
-      type 'a obj
-
-&txt Use tags to represent properties
-&vspace
-%font "code", fore "yellow", size 5
-      type t = [class1 ... classn] obj
-
-&txt Functions check properties
-&vspace
-%font "code", fore "yellow", size 5
-      val f : [> class1 ... classn] obj -> ...
-&txt
-       Subsumes Haskell type classes
-&vspace
-       Allows multiple inheritance
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-14
-Low level encoding (II)
-
-Example: buttons' hierarchy
-%size 2
-
-%font "code", size 4, prefix "    ", fore "yellow"
-type 'a obj
-type widget = [widget] obj
-type container = [widget container] obj
-type button = [widget container button] obj
-type toggle_button = [widget ... togglebutton] obj
-type radio_button = [widget ... radiobutton] obj
-type state_type = [ NORMAL
-     ACTIVE PRELIGHT SELECTED INSENSITIVE ] 
-val set_state : [> widget] obj -> state_type -> unit
-val children : [> container] obj -> [widget] obj list
-val clicked : [> button] obj -> unit
-val set_group : [> radiobutton] obj -> group -> unit
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-15
-Alternate encoding
-
-Use only standard ML features
-%size 2
-
-%font "code", size 4, prefix "  ", fore "yellow", vgap 50
-type 'a obj
-type 'a widget
-...
-type 'a radio
-type state_type = NORMAL | ACTIVE | ... | INSENSITIVE
-val set_state : 'a widget obj -> state_type -> unit
-val children :
-    'a container widget obj -> unit widget obj list
-val clicked : 'a button container widget obj -> unit
-
-&txt Weaknesses
-       No multiple inheritance
-       Not very intuitive for the user
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-16
-Low level encoding (III)
-
-Use of labeled parameters
-%size 2
-
-%font "code", size 4, prefix "  ", fore "yellow", vgap 50
-val adjustment_new :
-    value:float -> lower:float -> upper:float ->
-    step_incr:float -> page_incr:float ->
-    page_size:float -> adjustment obj
-
-&txt Signals
-%size 2
-
-%font "code", size 4, prefix "  ", fore "yellow", vgap 50
-type ('a,'b) signal =
-    { name: string; marshaller: 'b -> GtkArgv.t -> unit }
-val connect : 'a obj -> sig:('a,'b) signal ->
-               callback:'b -> ?after:bool -> id
-val button_clicked : ([> button], unit -> unit) signal
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-17
-High-Level Interface
-
-Problems with GTK+
-%size 2
-
-       Name space is scattered
-&com1 One has to know in which superclass a function is defined
-       Developper oriented design
-&com1 There is no clear distinction between public and private definitions
-
-&txt LablGTK design
-%size 2
-
-       OCaml classes to reunify name space
-       Omit developper-oriented methods
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-18
-High-level classes
-
-%font "code", size 4, prefix "  ", fore "yellow"
-class button :
-%fore "lightgreen"
-  ?label:string ->
-%fore "lightpink"
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-%fore "lightgray"
-  ?packing:(GButton.button -> unit) ->
-  ?show:bool ->
-%fore "yellow"
-  object
-%fore "lightgray"
-    method destroy : unit -> unit
-    method as_widget : Gtk.widget obj
-    method misc : GObj.widget_misc
-%fore "lightpink"
-    method add : #is_widget -> unit
-    method set_border_width : int -> unit
-%fore "lightgreen"
-    method clicked : unit -> unit
-    method connect : GButton.button_signals
-    method grab_default : unit -> unit
-%fore "yellow"
-  end
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-19
-High-level features
-
-       Objective Caml classes
-&com1 allow collecting methods from different modules
-
-       Use optionals in class constructors
-&com1 makes widget creation much easier
-
-       Polymorphic methods
-&com1 needed for container widgets
-%size 2
-
-%font "code", size 4, fore "yellow", vgap 50
-        method add : 'a. (#is_widget as 'a) -> unit
-
-%fore "white", font "sans"
-       Polymorphic variants
-&com1 for C-style enumeration types, avoid name-space dependancies
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-20
-Polymorphic methods (I)
-
-       Instance of first-class polymorphism
-%size 2
-
-               first-class polytypes cannot be inferred
-               they are propagated by the definition flow
-
-       Technically
-%size 2
-
-               use polymorphism to track available information
-               type system excludes derivations based on "guessed" information
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-21
-First class polymorphism
-
-%prefix "            "
-%image "formula.eps" 512x384
-%size 2
-
-%prefix " ", size 5, fore "lightblue"
-  (\e$B&R\e(B1 : \e$B&R\e(B : \e$B&R\e(B2) \e$B"N\e(B \e$B&R\e(B1 = \e$B&H\e(B(\e$B&Q\e(B1(\e$B&R\e(B)) \e$B"J\e(B \e$B&R\e(B2 = \e$B&H\e(B(\e$B&Q\e(B2(\e$B&R\e(B))
-%fore "white"
-where \e$B&H\e(B instantiates free variables, and \e$B&Q\e(B1,\e$B&Q\e(B2 rename free labels of \e$B&R\e(B.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-22
-Polymorphic methods (II)
-
-Definitions
-%size 2
-
-%font "code", size 4, prefix "    ", fore "yellow", vgap 50
-type is_widget = < as_widget : widget obj >
-type #is_widget = < as_widget : widget obj; .. >
-type container =
-    < ... ; add : 'a. (#as_widget as 'a) -> unit; ... >
-
-%pause
-&txt Propagation
-%size 2
-
-%font "code", size 4, prefix "    ", fore "lightgreen", vgap 50
-fun (cont : container) -> cont#add widget
-
-%pause
-let button = new button in button#add widget
-
-%pause, fore "red"
-fun cont -> cont#add widget
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-23
-Programming example
-
-Hello World
-%size 2
-
-%font "code", size 4, prefix "    ", fore "yellow"
-open GMain
-
-let window =
-    new GWindow.window border_width: 10
-
-let button =
-    new GButton.button
-        label: "Hello World" packing: window#add
-
-let _ =
-  window#connect#destroy callback: Main.quit;
-  button#connect#clicked callback: window#destroy;
-  window#show ();
-  Main.main ()
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%page
-24
-Conclusion
-
-       Results
-%size 2
-
-               Could build a strongly typed interface
-
-               It is easier to use than the C API
-
-               Makes effective use of extensions to the type system
-
-       Comments
-%size 2
-
-               Still difficulties with the Caml object system 
-&com2 class recursion, method type refinement, etc...
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/GL/morph3d.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/GL/morph3d.ml
deleted file mode 100644 (file)
index a08726e..0000000
+++ /dev/null
@@ -1,607 +0,0 @@
-(* $Id$ *)
-
-(*-
- * morph3d.c - Shows 3D morphing objects (TK Version)
- *
- * This program was inspired on a WindowsNT(R)'s screen saver. It was written 
- * from scratch and it was not based on any other source code. 
- * 
- * Porting it to xlock (the final objective of this code since the moment I
- * decided to create it) was possible by comparing the original Mesa's gear
- * demo with it's ported version, so thanks for Danny Sung for his indirect
- * help (look at gear.c in xlock source tree). NOTE: At the moment this code
- * was sent to Brian Paul for package inclusion, the XLock Version was not
- * available. In fact, I'll wait it to appear on the next Mesa release (If you
- * are reading this, it means THIS release) to send it for xlock package 
- * inclusion). It will probably there be a GLUT version too.
- *
- * Thanks goes also to Brian Paul for making it possible and inexpensive
- * to use OpenGL at home.
- *
- * Since I'm not a native english speaker, my apologies for any gramatical
- * mistake.
- *
- * My e-mail addresses are
- *
- * vianna@cat.cbpf.br 
- *         and
- * marcelo@venus.rdc.puc-rio.br
- *
- * Marcelo F. Vianna (Feb-13-1997)
- *)
-
-(*
-This document is VERY incomplete, but tries to describe the mathematics used
-in the program. At this moment it just describes how the polyhedra are 
-generated. On futhurer versions, this document will be probabbly improved.
-
-Since I'm not a native english speaker, my apologies for any gramatical
-mistake.
-
-Marcelo Fernandes Vianna 
-- Undergraduate in Computer Engeneering at Catholic Pontifical University
-- of Rio de Janeiro (PUC-Rio) Brasil.
-- e-mail: vianna@cat.cbpf.br or marcelo@venus.rdc.puc-rio.br
-- Feb-13-1997
-
-POLYHEDRA GENERATION
-
-For the purpose of this program it's not sufficient to know the polyhedra
-vertexes coordinates. Since the morphing algorithm applies a nonlinear 
-transformation over the surfaces (faces) of the polyhedron, each face has
-to be divided into smaller ones. The morphing algorithm needs to transform 
-each vertex of these smaller faces individually. It's a very time consoming
-task.
-
-In order to reduce calculation overload, and since all the macro faces of
-the polyhedron are transformed by the same way, the generation is made by 
-creating only one face of the polyhedron, morphing it and then rotating it
-around the polyhedron center. 
-
-What we need to know is the face radius of the polyhedron (the radius of 
-the inscribed sphere) and the angle between the center of two adjacent 
-faces using the center of the sphere as the angle's vertex.
-
-The face radius of the regular polyhedra are known values which I decided
-to not waste my time calculating. Following is a table of face radius for
-the regular polyhedra with edge length = 1:
-
-    TETRAHEDRON  : 1/(2*sqrt(2))/sqrt(3)
-    CUBE        : 1/2
-    OCTAHEDRON   : 1/sqrt(6)
-    DODECAHEDRON : T^2 * sqrt((T+2)/5) / 2     -> where T=(sqrt(5)+1)/2
-    ICOSAHEDRON  : (3*sqrt(3)+sqrt(15))/12
-
-I've not found any reference about the mentioned angles, so I needed to
-calculate them, not a trivial task until I figured out how :)
-Curiously these angles are the same for the tetrahedron and octahedron.
-A way to obtain this value is inscribing the tetrahedron inside the cube
-by matching their vertexes. So you'll notice that the remaining unmatched
-vertexes are in the same straight line starting in the cube/tetrahedron
-center and crossing the center of each tetrahedron's face. At this point
-it's easy to obtain the bigger angle of the isosceles triangle formed by
-the center of the cube and two opposite vertexes on the same cube face.
-The edges of this triangle have the following lenghts: sqrt(2) for the base
-and sqrt(3)/2 for the other two other edges. So the angle we want is:
-     +-----------------------------------------------------------+
-     | 2*ARCSIN(sqrt(2)/sqrt(3)) = 109.47122063449069174 degrees |
-     +-----------------------------------------------------------+
-For the cube this angle is obvious, but just for formality it can be
-easily obtained because we also know it's isosceles edge lenghts:
-sqrt(2)/2 for the base and 1/2 for the other two edges. So the angle we 
-want is:
-     +-----------------------------------------------------------+
-     | 2*ARCSIN((sqrt(2)/2)/1)   = 90.000000000000000000 degrees |
-     +-----------------------------------------------------------+
-For the octahedron we use the same idea used for the tetrahedron, but now
-we inscribe the cube inside the octahedron so that all cubes's vertexes
-matches excatly the center of each octahedron's face. It's now clear that
-this angle is the same of the thetrahedron one:
-     +-----------------------------------------------------------+
-     | 2*ARCSIN(sqrt(2)/sqrt(3)) = 109.47122063449069174 degrees |
-     +-----------------------------------------------------------+
-For the dodecahedron it's a little bit harder because it's only relationship
-with the cube is useless to us. So we need to solve the problem by another
-way. The concept of Face radius also exists on 2D polygons with the name
-Edge radius:
-  Edge Radius For Pentagon (ERp)
-  ERp = (1/2)/TAN(36 degrees) * VRp = 0.6881909602355867905
-  (VRp is the pentagon's vertex radio).
-  Face Radius For Dodecahedron
-  FRd = T^2 * sqrt((T+2)/5) / 2 = 1.1135163644116068404
-Why we need ERp? Well, ERp and FRd segments forms a 90 degrees angle, 
-completing this triangle, the lesser angle is a half of the angle we are 
-looking for, so this angle is:
-     +-----------------------------------------------------------+
-     | 2*ARCTAN(ERp/FRd)        = 63.434948822922009981 degrees |
-     +-----------------------------------------------------------+
-For the icosahedron we can use the same method used for dodecahedron (well
-the method used for dodecahedron may be used for all regular polyhedra)
-  Edge Radius For Triangle (this one is well known: 1/3 of the triangle height)
-  ERt = sin(60)/3 = sqrt(3)/6 = 0.2886751345948128655
-  Face Radius For Icosahedron
-  FRi= (3*sqrt(3)+sqrt(15))/12 = 0.7557613140761707538
-So the angle is:
-     +-----------------------------------------------------------+
-     | 2*ARCTAN(ERt/FRi)        = 41.810314895778596167 degrees |
-     +-----------------------------------------------------------+
-
-*)
-
-
-let scale = 0.3
-
-let vect_mul (x1,y1,z1) (x2,y2,z2) =
-  (y1 *. z2 -. z1 *. y2, z1 *. x2 -. x1 *. z2, x1 *. y2 -. y1 *. x2)
-
-let sqr a = a *. a
-
-(* Increasing this values produces better image quality, the price is speed. *)
-(* Very low values produces erroneous/incorrect plotting *)
-let tetradivisions =            23
-let cubedivisions =             20
-let octadivisions =             21
-let dodecadivisions =           10
-let icodivisions =              15
-
-let tetraangle =                109.47122063449069174
-let cubeangle =                 90.000000000000000000
-let octaangle =                 109.47122063449069174
-let dodecaangle =               63.434948822922009981
-let icoangle =                  41.810314895778596167
-
-let pi = acos (-1.)
-let sqrt2 = sqrt 2.
-let sqrt3 = sqrt 3.
-let sqrt5 = sqrt 5.
-let sqrt6 = sqrt 6.
-let sqrt15 = sqrt 15.
-let cossec36_2 = 0.8506508083520399322
-let cosd x =  cos (float x /. 180. *. pi)
-let sind x =  sin (float x /. 180. *. pi)
-let cos72 = cosd 72
-let sin72 = sind 72
-let cos36 = cosd 36
-let sin36 = sind 36
-
-(*************************************************************************)
-
-let front_shininess =   60.0
-let front_specular  =   0.7, 0.7, 0.7, 1.0
-let ambient         =   0.0, 0.0, 0.0, 1.0
-let diffuse         =   1.0, 1.0, 1.0, 1.0
-let position0       =   1.0, 1.0, 1.0, 0.0
-let position1       =   -1.0,-1.0, 1.0, 0.0
-let lmodel_ambient  =   0.5, 0.5, 0.5, 1.0
-let lmodel_twoside  =   true
-
-let materialRed     =   0.7, 0.0, 0.0, 1.0
-let materialGreen   =   0.1, 0.5, 0.2, 1.0
-let materialBlue    =   0.0, 0.0, 0.7, 1.0
-let materialCyan    =   0.2, 0.5, 0.7, 1.0
-let materialYellow  =   0.7, 0.7, 0.0, 1.0
-let materialMagenta =   0.6, 0.2, 0.5, 1.0
-let materialWhite   =   0.7, 0.7, 0.7, 1.0
-let materialGray    =   0.2, 0.2, 0.2, 1.0
-let all_gray = Array.create 20 materialGray
-
-let vertex ~xf ~yf ~zf ~ampvr2 =
-  let xa = xf +. 0.01 and yb = yf +. 0.01 in
-  let xf2 = sqr xf and yf2 = sqr yf in
-  let factor = 1. -. (xf2 +. yf2) *. ampvr2
-  and factor1 = 1. -. (sqr xa +. yf2) *. ampvr2
-  and factor2 = 1. -. (xf2 +. sqr yb) *. ampvr2 in
-  let vertx = factor *. xf and verty = factor *. yf
-  and vertz = factor *. zf in
-  let neiax = factor1 *. xa -. vertx and neiay = factor1 *. yf -. verty
-  and neiaz = factor1 *. zf -. vertz and neibx = factor2 *. xf -. vertx
-  and neiby = factor2 *. yb -. verty and neibz = factor2 *. zf -. vertz in
-  GlDraw.normal3 (vect_mul (neiax, neiay, neiaz) (neibx, neiby, neibz));
-  GlDraw.vertex3 (vertx, verty, vertz)
-
-let triangle ~edge ~amp ~divisions ~z =
-  let divi = float divisions in
-  let vr = edge *. sqrt3 /. 3. in
-  let ampvr2 = amp /. sqr vr
-  and zf = edge *. z in
-  let ax = edge *. (0.5 /. divi)
-  and ay = edge *. (-0.5 *. sqrt3 /. divi)
-  and bx = edge *. (-0.5 /. divi) in
-  for ri = 1 to divisions do
-    GlDraw.begins `triangle_strip;
-    for ti = 0 to ri - 1 do
-      vertex ~zf ~ampvr2
-       ~xf:(float (ri-ti) *. ax +. float ti *. bx)
-       ~yf:(vr +. float (ri-ti) *. ay +. float ti *. ay);
-      vertex ~zf ~ampvr2
-       ~xf:(float (ri-ti-1) *. ax +. float ti *. bx)
-       ~yf:(vr +. float (ri-ti-1) *. ay +. float ti *. ay)
-    done;
-    vertex ~xf:(float ri *. bx) ~yf:(vr +. float ri *. ay) ~zf ~ampvr2;
-    GlDraw.ends ()
-  done
-
-let square ~edge ~amp ~divisions ~z =
-  let divi = float divisions in
-  let zf = edge *. z
-  and ampvr2 = amp /. sqr (edge *. sqrt2 /. 2.) in
-  for yi = 0 to divisions - 1 do
-    let yf = edge *. (-0.5 +. float yi /. divi) in
-    let yf2 = sqr yf in
-    let y = yf +. 1.0 /. divi *. edge in
-    let y2 = sqr y in
-    GlDraw.begins `quad_strip;
-    for xi = 0 to divisions do
-      let xf = edge *. (-0.5 +. float xi /. divi) in
-      vertex ~xf ~yf:y ~zf ~ampvr2;
-      vertex ~xf ~yf ~zf ~ampvr2
-    done;
-    GlDraw.ends ()
-  done
-
-let pentagon ~edge ~amp ~divisions ~z =
-  let divi = float divisions in
-  let zf = edge *. z
-  and ampvr2 = amp /. sqr(edge *. cossec36_2) in
-  let x =
-    Array.init 6
-      ~f:(fun fi -> -. cos (float fi *. 2. *. pi /. 5. +. pi /. 10.)
-                    /. divi *. cossec36_2 *. edge)
-  and y =
-    Array.init 6
-      ~f:(fun fi -> sin (float fi *. 2. *. pi /. 5. +. pi /. 10.)
-                    /. divi *. cossec36_2 *. edge)
-  in
-  for ri = 1 to divisions do
-    for fi = 0 to 4 do
-      GlDraw.begins `triangle_strip;
-      for ti = 0 to ri-1 do
-       vertex ~zf ~ampvr2
-         ~xf:(float(ri-ti) *. x.(fi) +. float ti *. x.(fi+1))
-         ~yf:(float(ri-ti) *. y.(fi) +. float ti *. y.(fi+1));
-       vertex ~zf ~ampvr2
-         ~xf:(float(ri-ti-1) *. x.(fi) +. float ti *. x.(fi+1))
-         ~yf:(float(ri-ti-1) *. y.(fi) +. float ti *. y.(fi+1))
-      done;
-      vertex ~xf:(float ri *. x.(fi+1)) ~yf:(float ri *. y.(fi+1)) ~zf ~ampvr2;
-      GlDraw.ends ()
-    done
-  done
-
-let call_list list color =
-  GlLight.material ~face:`both (`diffuse color);
-  GlList.call list
-
-let draw_tetra ~amp ~divisions ~color =
-  let list = GlList.create `compile in
-  triangle ~edge:2.0 ~amp ~divisions ~z:(0.5 /. sqrt6);
-  GlList.ends();
-
-  call_list list color.(0);
-  GlMat.push();
-  GlMat.rotate ~angle:180.0 ~z:1.0 ();
-  GlMat.rotate ~angle:(-.tetraangle) ~x:1.0 ();
-  call_list list color.(1);
-  GlMat.pop();
-  GlMat.push();
-  GlMat.rotate ~angle:180.0 ~y:1.0 ();
-  GlMat.rotate ~angle:(-180.0 +. tetraangle) ~x:0.5 ~y:(sqrt3 /. 2.) ();
-  call_list list color.(2);
-  GlMat.pop();
-  GlMat.rotate ~angle:180.0 ~y:1.0 ();
-  GlMat.rotate ~angle:(-180.0 +. tetraangle) ~x:0.5 ~y:(-.sqrt3 /. 2.) ();
-  call_list list color.(3);
-
-  GlList.delete list
-
-let draw_cube ~amp ~divisions ~color =
-  let list = GlList.create `compile in
-  square ~edge:2.0 ~amp ~divisions ~z:0.5;
-  GlList.ends ();
-
-  call_list list color.(0);
-  for i = 1 to 3 do
-    GlMat.rotate ~angle:cubeangle ~x:1.0 ();
-    call_list list color.(i)
-  done;
-  GlMat.rotate ~angle:cubeangle ~y:1.0 ();
-  call_list list color.(4);
-  GlMat.rotate ~angle:(2.0 *. cubeangle) ~y:1.0 ();
-  call_list list color.(5);
-
-  GlList.delete list
-
-let draw_octa ~amp ~divisions ~color =
-  let list = GlList.create `compile in
-  triangle ~edge:2.0 ~amp ~divisions ~z:(1.0 /. sqrt6);
-  GlList.ends ();
-
-  let do_list (i,y) =
-    GlMat.push();
-    GlMat.rotate ~angle:180.0 ~y:1.0 ();
-    GlMat.rotate ~angle:(-.octaangle) ~x:0.5 ~y ();
-    call_list list color.(i);
-    GlMat.pop()
-  in
-  call_list list color.(0);
-  GlMat.push();
-  GlMat.rotate ~angle:180.0 ~z:1.0 ();
-  GlMat.rotate ~angle:(-180.0 +. octaangle) ~x:1.0 ();
-  call_list list color.(1);
-  GlMat.pop();
-  List.iter [2, sqrt3 /. 2.0; 3, -.sqrt3 /. 2.0] ~f:do_list;
-  GlMat.rotate ~angle:180.0 ~x:1.0 ();
-  GlLight.material ~face:`both (`diffuse color.(4));
-  GlList.call list;
-  GlMat.push();
-  GlMat.rotate ~angle:180.0 ~z:1.0 ();
-  GlMat.rotate ~angle:(-180.0 +. octaangle) ~x:1.0 ();
-  GlLight.material ~face:`both (`diffuse color.(5));
-  GlList.call list;
-  GlMat.pop();
-  List.iter [6, sqrt3 /. 2.0; 7, -.sqrt3 /. 2.0] ~f:do_list;
-
-  GlList.delete list
-
-let draw_dodeca ~amp ~divisions ~color =
-  let tau = (sqrt5 +. 1.0) /. 2.0 in
-  let list = GlList.create `compile in
-  pentagon ~edge:2.0 ~amp ~divisions
-    ~z:(sqr(tau) *. sqrt ((tau+.2.0)/.5.0) /. 2.0);
-  GlList.ends ();
-
-  let do_list (i,angle,x,y) =
-    GlMat.push();
-    GlMat.rotate ~angle:angle ~x ~y ();
-    call_list list color.(i);
-    GlMat.pop();
-  in
-  GlMat.push ();
-  call_list list color.(0);
-  GlMat.rotate ~angle:180.0 ~z:1.0 ();
-  List.iter ~f:do_list
-    [ 1, -.dodecaangle, 1.0, 0.0;
-      2, -.dodecaangle, cos72, sin72;
-      3, -.dodecaangle, cos72, -.sin72;
-      4, dodecaangle, cos36, -.sin36;
-      5, dodecaangle, cos36, sin36 ];
-  GlMat.pop ();
-  GlMat.rotate ~angle:180.0 ~x:1.0 ();
-  call_list list color.(6);
-  GlMat.rotate ~angle:180.0 ~z:1.0 ();
-  List.iter ~f:do_list
-    [ 7, -.dodecaangle, 1.0, 0.0;
-      8, -.dodecaangle, cos72, sin72;
-      9, -.dodecaangle, cos72, -.sin72;
-      10, dodecaangle, cos36, -.sin36 ];
-  GlMat.rotate ~angle:dodecaangle ~x:cos36 ~y:sin36 ();
-  call_list list color.(11);
-
-  GlList.delete list
-
-let draw_ico ~amp ~divisions ~color =
-  let list = GlList.create `compile in
-  triangle ~edge:1.5 ~amp ~divisions
-    ~z:((3.0 *. sqrt3 +. sqrt15) /. 12.0);
-  GlList.ends ();
-
-  let do_list1 i =
-    GlMat.rotate ~angle:180.0 ~y:1.0 ();
-    GlMat.rotate ~angle:(-180.0 +. icoangle) ~x:0.5 ~y:(sqrt3/.2.0) ();
-    call_list list color.(i)
-  and do_list2 i =
-    GlMat.rotate ~angle:180.0 ~y:1.0 ();
-    GlMat.rotate ~angle:(-180.0 +. icoangle) ~x:0.5 ~y:(-.sqrt3/.2.0) ();
-    call_list list color.(i)
-  and do_list3 i =
-    GlMat.rotate ~angle:180.0 ~z:1.0 ();
-    GlMat.rotate ~angle:(-.icoangle) ~x:1.0 ();
-    call_list list color.(i)
-  in
-  GlMat.push ();
-  call_list list color.(0);
-  GlMat.push ();
-  do_list3 1;
-  GlMat.push ();
-  do_list1 2;
-  GlMat.pop ();
-  do_list2 3;
-  GlMat.pop ();
-  GlMat.push ();
-  do_list1 4;
-  GlMat.push ();
-  do_list1 5;
-  GlMat.pop();
-  do_list3 6;
-  GlMat.pop ();
-  do_list2 7;
-  GlMat.push ();
-  do_list2 8;
-  GlMat.pop ();
-  do_list3 9;
-  GlMat.pop ();
-  GlMat.rotate ~angle:180.0 ~x:1.0 ();
-  call_list list color.(10);
-  GlMat.push ();
-  do_list3 11;
-  GlMat.push ();
-  do_list1 12;
-  GlMat.pop ();
-  do_list2 13;
-  GlMat.pop ();
-  GlMat.push ();
-  do_list1 14;
-  GlMat.push ();
-  do_list1 15;
-  GlMat.pop ();
-  do_list3 16;
-  GlMat.pop ();
-  do_list2 17;
-  GlMat.push ();
-  do_list2 18;
-  GlMat.pop ();
-  do_list3 19;
-
-  GlList.delete list
-
-class view area = object (self)
-  val area : GlGtk.area = area
-  val mutable smooth = true
-  val mutable step = 0.
-  val mutable obj = 1
-  val mutable draw_object = fun ~amp -> ()
-  val mutable magnitude = 0.
-
-  method width =  area#misc#allocation.Gtk.width
-  method height = area#misc#allocation.Gtk.height
-
-  method draw () =
-    let ratio = float self#height /. float self#width in
-    GlClear.clear [`color;`depth];
-    GlMat.push();
-    GlMat.translate ~z:(-10.0) ();
-    GlMat.scale ~x:(scale *. ratio) ~y:scale ~z:scale ();
-    GlMat.translate ()
-      ~x:(2.5 *. ratio *. sin (step *. 1.11))
-      ~y:(2.5 *. cos (step *. 1.25 *. 1.11));
-    GlMat.rotate ~angle:(step *. 100.) ~x:1.0 ();
-    GlMat.rotate ~angle:(step *. 95.) ~y:1.0 ();
-    GlMat.rotate ~angle:(step *. 90.) ~z:1.0 ();
-    draw_object ~amp:((sin step +. 1.0/.3.0) *. (4.0/.5.0) *. magnitude);
-    GlMat.pop();
-    Gl.flush();
-    area#swap_buffers ();
-    step <- step +. 0.05
-
-  method reshape ~width ~height =
-    GlDraw.viewport ~x:0 ~y:0 ~w:width ~h:height;
-    GlMat.mode `projection;
-    GlMat.load_identity();
-    GlMat.frustum ~x:(-1.0, 1.0) ~y:(-1.0, 1.0) ~z:(5.0, 15.0);
-    GlMat.mode `modelview
-
-  method key sym =
-    begin match sym with
-      "1" -> obj <- 1
-    | "2" -> obj <- 2
-    | "3" -> obj <- 3
-    | "4" -> obj <- 4
-    | "5" -> obj <- 5
-    | "\r" -> smooth <- not smooth
-    | "\027" -> area#misc#toplevel#destroy (); exit 0
-    | _ -> ()
-    end;
-    self#pinit
-
-  method pinit =
-    begin match obj with
-      1 ->
-       draw_object <- draw_tetra
-            ~divisions:tetradivisions
-            ~color:[|materialRed;  materialGreen;
-                    materialBlue; materialWhite|];
-       magnitude <- 2.5
-    | 2 ->
-       draw_object <- draw_cube
-            ~divisions:cubedivisions
-            ~color:[|materialRed; materialGreen; materialCyan;
-                    materialMagenta; materialYellow; materialBlue|];
-       magnitude <- 2.0
-    | 3 ->
-       draw_object <- draw_octa
-            ~divisions:octadivisions
-            ~color:[|materialRed; materialGreen; materialBlue;
-                    materialWhite; materialCyan; materialMagenta;
-                    materialGray; materialYellow|];
-       magnitude <- 2.5
-    | 4 ->
-      draw_object <- draw_dodeca
-          ~divisions:dodecadivisions
-          ~color:[|materialRed; materialGreen; materialCyan;
-                  materialBlue; materialMagenta; materialYellow;
-                  materialGreen; materialCyan; materialRed;
-                  materialMagenta; materialBlue; materialYellow|];
-      magnitude <- 2.0
-    | 5 ->
-       draw_object <- draw_ico
-            ~divisions:icodivisions
-            ~color:[|materialRed; materialGreen; materialBlue;
-                    materialCyan; materialYellow; materialMagenta;
-                    materialRed; materialGreen; materialBlue;
-                    materialWhite; materialCyan; materialYellow;
-                    materialMagenta; materialRed; materialGreen;
-                    materialBlue; materialCyan; materialYellow;
-                    materialMagenta; materialGray|];
-       magnitude <- 3.5
-    | _ -> ()
-    end;
-    GlDraw.shade_model (if smooth then `smooth else `flat)
-  initializer
-    area#connect#display ~callback:self#draw;
-    area#connect#reshape ~callback:self#reshape;
-    ()
-end
-
-open GMain
-
-let main () =
-  List.iter ~f:print_string
-    [ "Morph 3D - Shows morphing platonic polyhedra\n";
-      "Author: Marcelo Fernandes Vianna (vianna@cat.cbpf.br)\n";
-      "Ported to LablGL by Jacques Garrigue\n\n";
-      "  [1]    - Tetrahedron\n";
-      "  [2]    - Hexahedron (Cube)\n";
-      "  [3]    - Octahedron\n";
-      "  [4]    - Dodecahedron\n";
-      "  [5]    - Icosahedron\n";
-      "[RETURN] - Toggle smooth/flat shading\n";
-      " [ESC]   - Quit\n" ];
-  flush stdout;
-
-  let window =
-    GWindow.window ~title:"Morph 3D - Shows morphing platonic polyhedra" ()
-  in
-  window#connect#destroy ~callback:Main.quit;
-  window#set_resize_mode `IMMEDIATE;
-
-  let area = GlGtk.area [`DEPTH_SIZE 1;`RGBA;`DOUBLEBUFFER]
-      ~width:640 ~height:480 ~packing:window#add () in
-
-  let view = new view area in
-
-  area#connect#realize ~callback:
-    begin fun () ->
-      view#pinit;
-      GlClear.depth 1.0;
-      GlClear.color (0.0, 0.0, 0.0);
-      GlDraw.color (1.0, 1.0, 1.0);
-
-      GlClear.clear [`color;`depth];
-      Gl.flush();
-
-      List.iter ~f:(GlLight.light ~num:0)
-       [`ambient ambient; `diffuse diffuse; `position position0];
-      List.iter ~f:(GlLight.light ~num:1)
-       [`ambient ambient; `diffuse diffuse; `position position1];
-      GlLight.light_model (`ambient lmodel_ambient);
-      GlLight.light_model (`two_side lmodel_twoside);
-      List.iter ~f:Gl.enable
-       [`lighting;`light0;`light1;`depth_test;`normalize];
-
-      GlLight.material ~face:`both (`shininess front_shininess);
-      GlLight.material ~face:`both (`specular front_specular);
-
-      GlMisc.hint `fog `fastest;
-      GlMisc.hint `perspective_correction `fastest;
-      GlMisc.hint `polygon_smooth `fastest
-    end;
-
-  window#event#connect#key_press
-    ~callback:(fun ev -> view#key (GdkEvent.Key.string ev); true);
-
-  Timeout.add ~ms:20
-    ~callback:(fun _ -> if area#misc#visible then view#draw (); true);
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/GL/planet.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/GL/planet.ml
deleted file mode 100644 (file)
index 51f947c..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-(* $Id$ *)
-
-class planet area = object (self)
-  val area : GlGtk.area = area
-  val mutable year = 0.0
-  val mutable day = 0.0
-  val mutable eye = 0.0
-  val mutable time = 0.0
-
-  method tick new_time =
-    if time = 0. then time <- new_time else
-    let diff = new_time -. time in
-    time <- new_time;
-    day <- mod_float (day +. diff *. 200.) 360.0;
-    year <- mod_float (year +. diff *. 20.) 360.0
-  method day_add () =
-    day <- mod_float (day +. 10.0) 360.0
-  method day_subtract () =
-    day <- mod_float (day -. 10.0) 360.0
-  method year_add () =
-    year <- mod_float (year +. 5.0) 360.0
-  method year_subtract () =
-    year <- mod_float (year -. 5.0) 360.0
-  method eye x =
-    eye <- x; self#display ()
-
-  method display () =
-    GlClear.clear [`color;`depth];
-
-    GlDraw.color (1.0, 1.0, 1.0);
-    GlMat.push();
-    GlMat.rotate ~angle:eye ~x:1. ();
-(*     draw sun        *)
-    GlLight.material ~face:`front (`specular (1.0,1.0,0.0,1.0));
-    GlLight.material ~face:`front (`shininess 5.0);
-    GluQuadric.sphere ~radius:1.0 ~slices:32 ~stacks:32 ();
-(*     draw smaller planet     *)
-    GlMat.rotate ~angle:year ~y:1.0 ();
-    GlMat.translate ~x:3.0 ();
-    GlMat.rotate ~angle:day ~y:1.0 ();
-    GlDraw.color (0.0, 1.0, 1.0);
-    GlDraw.shade_model `flat;
-    GlLight.material ~face:`front(`shininess 128.0);
-    GluQuadric.sphere ~radius:0.2 ~slices:10 ~stacks:10 ();
-    GlDraw.shade_model `smooth;
-    GlMat.pop ();
-    Gl.flush ();
-    area#swap_buffers ()
-end
-
-let myinit () =
-  let light_ambient = 0.5, 0.5, 0.5, 1.0
-  and light_diffuse = 1.0, 0.8, 0.2, 1.0
-  and light_specular = 1.0, 1.0, 1.0, 1.0
-  (*  light_position is NOT default value      *)
-  and light_position = 1.0, 1.0, 1.0, 0.0
-  in
-  List.iter ~f:(GlLight.light ~num:0)
-    [ `ambient light_ambient; `diffuse light_diffuse;
-      `specular light_specular; `position light_position ];
-  GlFunc.depth_func `less;
-  List.iter ~f:Gl.enable [`lighting; `light0; `depth_test];
-  GlDraw.shade_model `smooth
-
-
-let my_reshape ~width:w ~height:h =
-  GlDraw.viewport ~x:0 ~y:0 ~w ~h;
-  GlMat.mode `projection;
-  GlMat.load_identity();
-  GluMat.perspective ~fovy:60.0 ~aspect:(float w /. float h) ~z:(1.0,20.0);
-  GlMat.mode `modelview;
-  GlMat.load_identity();
-  GlMat.translate ~z:(-5.0) ()
-
-(*  Main Loop
- *  Open window with initial window size, title bar, 
- *  RGBA display mode, and handle input events.
- *)
-open GMain
-open GdkKeysyms
-
-let main () =
-  let w = GWindow.window ~title:"Planet" () in
-  w#connect#destroy ~callback:(fun () -> Main.quit (); exit 0);
-  w#set_resize_mode `IMMEDIATE;
-  let hb = GPack.hbox ~packing:w#add () in
-  let area = GlGtk.area [`DOUBLEBUFFER;`RGBA;`DEPTH_SIZE 1]
-      ~width:700 ~height:500 ~packing:hb#add () in
-  area#event#add [`KEY_PRESS];
-
-  let planet = new planet area in
-  let adjustment = GData.adjustment ~value:0. ~lower:(-90.) ~upper:90.
-      ~step_incr:1. ~page_incr:5. ~page_size:5. () in
-  let scale = GRange.scale `VERTICAL ~adjustment ~draw_value:false
-      ~packing:hb#pack () in
-  adjustment#connect#value_changed
-    ~callback:(fun () -> planet#eye adjustment#value);
-  w#event#connect#key_press ~callback:
-    begin fun ev ->
-      let key = GdkEvent.Key.keyval ev in
-      if key = _Left then planet#year_subtract () else
-      if key = _Right then planet#year_add () else
-      if key = _Up then planet#day_add () else
-      if key = _Down then planet#day_subtract () else
-      if key = _Escape then w#destroy ();
-      planet#display ();
-      true
-    end;
-  
-  Timeout.add ~ms:20 ~callback:
-    begin fun () ->
-      planet#tick (Sys.time ()); planet#display (); true
-    end;
-  area#connect#display ~callback:planet#display;
-  area#connect#reshape ~callback:my_reshape;
-
-  area#connect#realize ~callback:
-    begin fun () ->
-      myinit ();
-      my_reshape ~width:700 ~height:500
-    end;
-  w#show ();
-  Main.main ()
-
-let _ = Printexc.print main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/GL/simple.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/GL/simple.ml
deleted file mode 100644 (file)
index ea6ebde..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-  let w = GWindow.window ~title:"LablGL/Gtk" () in
-  w#connect#destroy ~callback:Main.quit;
-  let area =
-    GlGtk.area [`RGBA;`DEPTH_SIZE 1] ~width:500 ~height:500 ~packing:w#add () in
-  area#connect#realize ~callback:
-    begin fun () ->
-      GlMat.mode `projection;
-      GlMat.load_identity ();
-      GlMat.ortho ~x:(-1.0,1.0) ~y:(-1.0,1.0) ~z:(-1.0,1.0);
-    end;
-  area#connect#display ~callback:
-    begin fun () ->
-      GlClear.color (0.0, 0.0, 0.0);
-      GlClear.clear [`color];
-      GlDraw.color (1.0, 1.0, 1.0);
-      GlDraw.begins `polygon;
-      GlDraw.vertex ~x:(-0.5) ~y:(-0.5) ();
-      GlDraw.vertex ~x:(-0.5) ~y:(0.5) ();
-      GlDraw.vertex ~x:(0.5) ~y:(0.5) ();
-      GlDraw.vertex ~x:(0.5) ~y:(-0.5) ();
-      GlDraw.ends ();
-      Gl.flush ()
-    end;
-  Timeout.add ~ms:10000 ~callback:(fun () -> w#destroy ();false);
-  w#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/README b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/README
deleted file mode 100644 (file)
index 6cbb5b6..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Since this library was written in commuting label mode, examples were
-also written in this mode.
-Still, the following examples also compile in classic mode without
-any modification.
-
-* calendar.ml
-* clist.ml
-* drawing.ml
-* entry.ml
-* events.ml
-* fifteen.ml
-* hello.ml
-* image.ml
-* radiobuttons.ml
-* rpn.ml
-* scrolledwin.ml
-* testinput.ml
\ No newline at end of file
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/buttons.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/buttons.ml
deleted file mode 100644 (file)
index 78eebb0..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let xpm_label_box ~(window : #GContainer.container)
-    ~file ~text ?packing ?(show=true) () =
-  if not (Sys.file_exists file) then failwith (file ^ " does not exist");
-  let box = GPack.hbox ~border_width: 2 ?packing ~show:false () in
-  let pixmap = GDraw.pixmap_from_xpm ~file ~window () in
-  GMisc.pixmap pixmap ~packing:(box#pack ~padding:3) ();
-  GMisc.label ~text ~packing:(box#pack ~padding:3) ();
-  if show then box#misc#show ();
-  new GObj.widget_full box#as_widget
-
-let main () =
-  let window = GWindow.window ~title:"Pixmap'd Buttons!" ~border_width:10 () in
-  window#connect#destroy ~callback:Main.quit;
-  let button = GButton.button ~packing:window#add () in
-  button#connect#clicked ~callback:
-    (fun () -> prerr_endline "Hello again - cool button was pressed");
-  xpm_label_box ~window ~file:"test.xpm" ~text:"cool button"
-    ~packing:button#add ();
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/calc.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/calc.ml
deleted file mode 100644 (file)
index 405d1bf..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-(* $Id$ *)
-
-(* A simple calculator ported from LablTk to LablGtk *)
-
-let mem_string ~char s =
-  try
-    for i = 0 to String.length s -1 do
-      if s.[i] = char then raise Exit
-    done; false
-  with Exit -> true
-
-let ops = ['+',(+.); '-',(-.); '*',( *.); '/',(/.)]
-
-(* The abstract calculator class. Does not use Gtk *)
-
-class virtual calc = object (calc)
-  val mutable x = 0.0
-  val mutable op = None
-  val mutable displaying = true
-
-  method virtual set : string -> unit
-  method virtual get : string
-  method virtual quit : unit -> unit
-  method insert s = calc#set (calc#get ^ s)
-  method get_float = float_of_string (calc#get)
-
-  initializer calc#set "0"
-
-  method command s =
-    if s <> "" then match s.[0] with
-      '0'..'9' ->
-       if displaying then (calc#set ""; displaying <- false);
-       calc#insert s
-    | '.' ->
-       if displaying then
-         (calc#set "0."; displaying <- false)
-       else
-         if not (mem_string ~char:'.' calc#get) then calc#insert s
-    | '+'|'-'|'*'|'/' as c ->
-       displaying <- true;
-       begin match op with
-         None ->
-           x <- calc#get_float;
-           op <- Some (List.assoc c ops)
-       | Some f ->
-           x <- f x (calc#get_float);
-           op <- Some (List.assoc c ops);
-           calc#set (string_of_float x)
-       end
-    | '='|'\n'|'\r' ->
-       displaying <- true;
-       begin match op with
-         None -> ()
-       | Some f ->
-           x <- f x (calc#get_float);
-           op <- None;
-           calc#set (string_of_float x)
-       end
-    | 'q' -> calc#quit ()
-    | _ -> ()
-end
-
-(* Buttons for the calculator *)
-
-let m =
-  [|[|"7";"8";"9";"+"|];
-    [|"4";"5";"6";"-"|];
-    [|"1";"2";"3";"*"|];
-    [|"0";".";"=";"/"|]|]
-
-(* The physical calculator. Inherits from the abstract one *)
-
-open GMain
-
-class calculator ?packing ?show () =
-  let table = GPack.table ~rows:5 ~columns:4 ~homogeneous:true ~show:false () in
-  object (calc)
-    inherit calc
-
-    val label =
-      let frame = GBin.frame ~shadow_type:`IN ()
-       ~packing:(table#attach ~left:0 ~top:0 ~right:4 ~expand:`BOTH) in
-      let evbox = GBin.event_box ~packing:frame#add () in
-      evbox#misc#set_style evbox#misc#style#copy;
-      evbox#misc#style#set_bg [`NORMAL,`WHITE];
-      GMisc.label ~justify:`RIGHT ~xalign:0.95 ~packing:evbox#add ()
-    val table = table
-
-    method set = label#set_text
-    method get = label#text
-    method quit = Main.quit
-
-    initializer
-      for i = 0 to 3 do for j = 0 to 3 do
-       let button =
-         GButton.button ~label:("  " ^ m.(i).(j) ^ "  ")
-           ~packing:(table#attach ~top:(i+1) ~left:j ~expand:`BOTH) () in
-       button#connect#clicked ~callback:(fun () -> calc#command m.(i).(j));
-      done done;
-      ignore (GObj.pack_return table ~packing ~show)
-  end
-
-(* Finally start everything *)
-
-let w = GWindow.window ~auto_shrink:true ()
-
-let applet = new calculator ~packing: w#add ()
-
-let _ =
-  w#connect#destroy ~callback: Main.quit;
-  w#event#connect#key_press
-    ~callback:(fun ev -> applet#command (GdkEvent.Key.string ev); true);
-  w#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/calendar.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/calendar.ml
deleted file mode 100644 (file)
index 233c744..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-  let window = GWindow.window () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let calendar = GMisc.calendar ~packing:window#add () in
-  calendar#connect#day_selected ~callback:
-    begin fun () ->
-      let (year,month,day) = calendar#date in
-      Printf.printf "You selected %d/%d/%02d.\n"
-       day (month+1) (year mod 100);
-      flush stdout
-    end;
-
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/clist.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/clist.ml
deleted file mode 100644 (file)
index f900f17..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-  let window = GWindow.window ~title:"CList example" ~width:300 ~height:150 () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let vbox = GPack.vbox ~border_width:5 ~packing:window#add () in
-
-  let hbox = GPack.hbox ~packing:vbox#add () in
-  let sb =
-    GRange.scrollbar `VERTICAL ~packing:(hbox#pack ~from:`END) () in
-  let clist =
-    GList.clist ~titles:["Ingredients";"Amount"] ~shadow_type:`OUT
-      ~packing:hbox#add ~vadjustment:sb#adjustment () in
-  clist#connect#select_row ~callback:
-    begin fun ~row ~column ~event ->
-      let text = clist#cell_text row column in
-      Printf.printf "You selected row %d. More specifically you clicked in column %d, and the text in this cell is %s\n\n" row column text;
-      flush stdout
-    end;
-
-  let hbox = GPack.hbox ~packing:vbox#pack () in
-
-  let button_add = GButton.button ~label:"Add List" ~packing:hbox#add () in
-  button_add#connect#clicked ~callback:
-    begin fun () ->
-      List.iter ~f:(fun t -> ignore (clist#append t))
-       [ ["Milk"; "3 Oz"];
-         ["Water"; "6 l"];
-         ["Carrots"; "2"];
-         ["Snakes"; "55"] ]
-    end;
-
-  let button_clear = GButton.button ~label:"Clear List" ~packing:hbox#add () in
-  button_clear#connect#clicked ~callback:clist#clear;
-
-  let button_hide_show =
-    GButton.button ~label:"Hide/Show titles" ~packing:hbox#add () in
-  let flag = ref false in
-  button_hide_show#connect#clicked ~callback:
-    begin fun () ->
-      clist#set_titles_show !flag;
-      flag := not !flag
-    end;
-
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/combo.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/combo.ml
deleted file mode 100644 (file)
index 9aff1b3..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let make_arrow_label combo ~label ~string =
-  let item = GList.list_item () in (* no packing here, it blocks GTK *)
-  let hbox = GPack.hbox ~spacing:3 ~packing:item#add () in
-  GMisc.arrow ~kind:`RIGHT ~shadow:`OUT ~packing:hbox#pack ();
-  GMisc.label ~text:label ~packing:hbox#pack ();
-  combo#set_item_string item string;
-  combo#list#add item;
-  item
-
-let main () =
-  let window = GWindow.window ~border_width:10 () in
-  window#connect#destroy ~callback:Main.quit;
-  let combo = GEdit.combo ~packing:window#add () in
-  make_arrow_label combo ~label:"First item" ~string:"1st item";
-  make_arrow_label combo ~label:"Second item" ~string:"2nd item";
-  window#show ();
-  Main.main ()
-  
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/csview.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/csview.ml
deleted file mode 100644 (file)
index eaf8de1..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-(* $Id$ *)
-
-(* A simple CSV data viewer *)
-
-type data =
-    { fields : string list;
-      titles : string list;
-      data : string list list }
-
-let mem_string ~char s =
-  try
-    for i = 0 to String.length s - 1 do
-      if s.[i] = char then raise Exit
-    done;
-    false
-  with Exit -> true
-
-let rec until ~chars ?(escapes="") ?(buf = Buffer.create 80) s =
-  match Stream.peek s with
-    Some c ->
-      if mem_string ~char:c escapes then begin
-        Stream.junk s;
-        Buffer.add_char buf (Stream.next s);
-        until ~chars ~escapes ~buf s
-      end else if mem_string ~char:c chars then
-        Buffer.contents buf
-      else begin
-        Buffer.add_char buf c;
-        Stream.junk s;
-        until ~chars ~escapes ~buf s
-      end
-  | None ->
-      if Buffer.length buf > 0 then raise (Stream.Error "until")
-      else raise Stream.Failure
-
-let rec ignores ?(chars = " \t") s =
-  match Stream.peek s with
-    Some c when mem_string ~char:c chars ->
-      Stream.junk s; ignores ~chars s
-  | _ -> ()
-
-let parse_field = parser
-    [< ''"'; f = until ~chars:"\"" ~escapes:"\\"; ''"'; _ = ignores >] ->
-      for i = 0 to String.length f - 1 do
-        if f.[i] = '\031' then f.[i] <- '\n'
-      done;
-      f
-  | [< f = until ~chars:",\n\r" >] -> f
-  | [< >] -> ""
-
-let comma = parser [< '','; _ = ignores >] -> ()
-
-let rec parse_list ~item ~sep = parser
-    [< i = item; s >] ->
-      begin match s with parser
-        [< _ = sep; l = parse_list ~item ~sep >] -> i :: l
-      | [< >] -> [i]
-      end
-  | [< >] -> []
-
-let parse_one = parse_list ~item:parse_field ~sep:comma
-
-let lf = parser [< ''\n'|'\r'; _ = ignores ~chars:"\n\r"; _ = ignores >] -> ()
-
-let parse_all = parse_list ~item:parse_one ~sep:lf
-
-let read_file file =
-  let ic = open_in file in
-  let s = Stream.of_channel ic in
-  let data = parse_all s in
-  close_in ic;
-  match data with
-    ("i"::fields) :: ("T"::titles) :: data ->
-      {fields=fields; titles=titles; data=List.map ~f:List.tl data}
-  | titles :: data ->
-      {fields=titles; titles=titles; data=data}
-  | _ -> failwith "Insufficient data"
-
-let print_string s =
-  Format.print_char '"';
-  for i = 0 to String.length s - 1 do
-    match s.[i] with
-      '\'' -> Format.print_char '\''
-    | '"' -> Format.print_string "\\\""
-    | '\160'..'\255' as c -> Format.print_char c
-    | c -> Format.print_string (Char.escaped c)
-  done;
-  Format.print_char '"'  
-
-(*
-#install_printer print_string;;
-*)
-
-open GMain
-
-let field_widths =
-  [ "i", 0;
-    "ATTR", 0;
-    "NAME", 17;
-    "NAPR", 8;
-    "TEL1", 14;
-    "ZIPC", 12;
-    "ADR1", 40;
-    "BRTH", 10;
-    "RMRK", 20;
-    "CHK1", 0;
-    "CHK2", 0;
-    "CHK3", 0;
-    "CHK4", 0;
-    "TIM1", 16;
-    "TIM2", 16;
-    "ALRM", 0;
-    "ATTM", 0;
-  ]
-
-let main argv =
-  if Array.length argv <> 2 then begin
-    prerr_endline "Usage: csview <csv file>";
-    exit 2
-  end;
-  let data = read_file argv.(1) in
-  let w = GWindow.window () in
-  w#misc#realize ();
-  let style = w#misc#style in
-  let font = Gdk.Font.load_fontset "-schumacher-clean-medium-r-normal--13-*-*-*-c-60-*,-mnkaname-fixed-*--12-*" in
-  let w0 = Gdk.Font.char_width font '0' in
-  style#set_font font;
-  w#connect#destroy ~callback:Main.quit;
-  let sw = GBin.scrolled_window ~width:600 ~height:300 ~packing:w#add () in
-  let cl = GList.clist ~titles:data.titles ~packing:sw#add () in
-  List.fold_left data.fields ~init:0 ~f:
-    begin fun acc f ->
-      let width = try List.assoc f field_widths with Not_found -> -1 in
-      if width = 0 then
-        cl#set_column ~visibility:false acc
-      else begin
-        if width > 0 then cl#set_column ~width:(width * w0) acc
-        else cl#set_column ~auto_resize:true acc;
-        if f = "NAPR" || f = "TIM1" || f = "CLAS" then
-          cl#set_sort ~auto:true ~column:acc ();
-        try
-          let ali = GBin.alignment_cast (cl#column_widget acc) in
-          let lbl = GMisc.label_cast (List.hd ali#children) in
-          lbl#set_alignment ~x:0. ()
-        with _ ->
-          prerr_endline ("No column widget for field " ^ f)
-      end;
-      succ acc
-    end;
-  List.iter data.data
-    ~f:(fun l -> if List.length l > 1 then ignore (cl#append l));
-  w#show ();
-  Main.main ()
-
-let _ = main Sys.argv
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/dcalendar.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/dcalendar.ml
deleted file mode 100644 (file)
index 6128506..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-(* $Id$ *)
-
-(* A small calendar *)
-(* Needs Unix module, so use with lablgtk_t *)
-
-open Printf
-
-type date = { mutable year: int; mutable mon: int; mutable mday: int }
-
-    (* Load the schedule data *)
-let calendar_file = Filename.concat (Sys.getenv "HOME") ".camlendar"
-
-let schedule =
-  try
-    let ichan = open_in calendar_file in
-    let (s : (int * int * int, string) Hashtbl.t) =
-      Marshal.from_channel ichan in
-    close_in ichan;
-    s
-  with Sys_error msg ->
-    prerr_endline msg; flush stderr;
-    Hashtbl.create 13;;
-
-    (* Saves the schedule data when the application terminates *)
-at_exit (fun () ->
-  let ochan = open_out calendar_file in
-  Marshal.to_channel ochan schedule ~mode: [];
-  close_out ochan);;
-
-    (* date: Current date initialized to "today" *)
-let date =
-  let tm = Unix.localtime (Unix.time ()) in
-  { year = 1900 + tm.Unix.tm_year; mon = tm.Unix.tm_mon; mday = 1 }
-
-
-    (* previous_month, next_month: change application status *)
-let previous_month () =
-  date.mday <- 1;
-  if date.mon = 0 then
-    (date.year <- date.year - 1; date.mon <- 11)
-  else date.mon <- date.mon - 1
-
-let next_month () =
-  date.mday <- 1;
-  if date.mon = 11 then (date.year <- date.year + 1; date.mon <- 0)
-  else date.mon <- date.mon + 1
-
-    (* leap, mon_name, wday_name: Calendar related function and data *)
-let leap year =
-  (year mod 400 = 0) or
-  (year mod 4 = 0) & (year mod 100 <> 0)
-
-let mdays_in_month = [|31; 28; 31; 30; 31; 30; 31; 31; 30; 31; 30; 31|]
-
-let mon_name =
-  [|"Jan"; "Feb"; "Mar"; "Apr"; "May"; "Jun";
-    "Jul"; "Aug"; "Sep"; "Oct"; "Nov"; "Dec"|]
-
-let wday_name =
-  [|"Sun"; "Mon"; "Tue"; "Wed"; "Thu"; "Fri"; "Sat"|]
-
-let s_normal = 0 and s_focused = 1 and s_planned = 2
-let styles =
-  let default = (Obj.magic () : GObj.style) in
-  [| default; default; default |]
-
-   (* class date_button: one button for each day in the month *)
-class date_button i (calendar : GPack.table) =
-  let mday = i + 1 in
-
-  object (self)
-    val widget = GButton.button ~label: (string_of_int mday) ~show: false ()
-    val mday = mday
-    val mutable show = false
-    val mutable have_plan = false
-
-    method widget = widget
-    method focus_on =
-      date.mday <- mday;
-      widget#misc#set_style styles.(s_focused)
-    method focus_off =
-      widget#misc#set_style styles.(if have_plan then s_planned else s_normal)
-    method set_plan =
-      have_plan <- true;
-      widget#misc#set_style styles.(s_planned)
-    method unset_plan =
-      have_plan <- false;
-      widget#misc#set_style styles.(s_normal)
-       
-    method show wday0 =
-      if not show then
-       let top = (mday + wday0) / 7 + 1
-       and left = (mday + wday0) mod 7 in
-       calendar#attach ~left ~top ~expand:`BOTH widget#coerce;
-       widget#misc#show ();
-       show <- true
-           
-    method hide =
-      if show then
-       (widget#misc#hide ();
-        calendar#remove widget#coerce;
-        show <- false)
-  end
-
-let update_calendar (calendar : GPack.table) (buttons : date_button array) =
-  let now = Unix.localtime (Unix.gettimeofday ()) in
-  let _, first = Unix.mktime { now with 
-                              Unix.tm_mday = 1;
-                              Unix.tm_mon = date.mon;
-                              Unix.tm_year = date.year - 1900 } in
-
-  (* wday0: day of the week of the zero'th day in the month *)
-  let wday0 = (first.Unix.tm_wday - 1 + 7) mod 7 in
-  
-  let ndays =
-    if date.mon = 1 & leap date.year then mdays_in_month.(date.mon) + 1
-    else mdays_in_month.(date.mon) in
-
-  Array.iter ~f: (fun button -> button#hide)
-    buttons;
-
-  for i = 0 to ndays - 1 do buttons.(i)#show wday0 done
-
-let create_GUI () =
-  
-  (* views part *)
-
-  let win =
-    GWindow.window ~title: "Camlendar" ~show: true
-      ~allow_shrink: false ~allow_grow: false () in
-  win#event#connect#delete
-    ~callback: (fun _ -> GMain.Main.quit (); exit 0; false);
-
-  let style = win#misc#style#copy in
-  styles.(s_normal) <- style;
-  
-  let style = style#copy in
-  style#set_bg [`NORMAL, `NAME "light green";
-               `PRELIGHT, `NAME "light green"];
-  styles.(s_focused) <- style;
-
-  styles.(s_focused) <- style;
-  let style = style#copy in
-  style#set_bg [`NORMAL, `NAME "sky blue";
-               `PRELIGHT, `NAME "sky blue"];
-  styles.(s_planned) <- style;
-
-  let vbox = GPack.vbox ~packing: win#add () in
-  let packing = vbox#add in
-  let toolbar = GButton.toolbar ~style: `TEXT ~packing () in
-
-  let prev =
-    toolbar#insert_button ~text: "Prev" ~tooltip: "Show previous month" () in
-  let next =
-    toolbar#insert_button ~text: "Next" ~tooltip: "Show next month" () in
-  
-  let calendar =
-    GPack.table ~homogeneous: true ~rows: 7 ~columns: 7
-      ~border_width: 10 ~row_spacings: 2 ~col_spacings: 2 ~packing () in
-
-  Array.iteri
-    ~f: (fun i wday ->
-      ignore (GButton.button ~label: wday
-               ~packing:(calendar#attach ~top: 0 ~left: i ~expand:`BOTH) ()))
-    wday_name;
-
-  let buttons =
-    Array.init 31 ~f: (fun i -> new date_button i calendar) in
-
-  let date_view = GMisc.label ~justify: `CENTER ~packing () in
-
-  let text = GEdit.text ~editable: true ~width: 70 ~height: 50 ~packing () in
-
-  (* Controls part *)
-
-  let save_text () =
-    let data = text#get_chars ~start: 0 ~stop: text#length in
-    let key = (date.year, date.mon, date.mday) in
-    Hashtbl.remove schedule key;
-    if data <> "" then
-      (Hashtbl.add schedule ~key ~data;
-       buttons.(date.mday - 1)#set_plan)
-    else buttons.(date.mday - 1)#unset_plan in
-
-  let restore_text () =
-    text#delete_text ~start: 0 ~stop: text#length;
-    try
-      text#insert_text ~pos: 0
-       (Hashtbl.find schedule (date.year, date.mon, date.mday));
-      ()
-    with Not_found -> () in
-
-  let update_date_view () =
-    date_view#set_text (sprintf "%d %s, %d\n"
-                         date.mday mon_name.(date.mon) date.year) in
-  
-  let update_view () =
-    update_calendar calendar buttons;
-    update_date_view ();
-    Array.iteri ~f: (fun i button ->
-      (try
-       Hashtbl.find schedule (date.year, date.mon, i + 1);
-       button#set_plan
-      with Not_found -> button#unset_plan);
-      button#focus_off) buttons;
-    win#set_title (sprintf "Camlendar: %s, %d"
-                    mon_name.(date.mon) date.year) in
-
-  prev#connect#clicked
-    ~callback: (fun () ->
-      save_text ();
-      previous_month ();
-      
-      update_view ();
-      restore_text ();
-      buttons.(0)#focus_on);
-  
-  next#connect#clicked
-    ~callback: (fun () ->
-      save_text ();
-      next_month ();
-      
-      update_view ();
-      restore_text ();
-      buttons.(0)#focus_on);
-  
-  Array.iteri
-    ~f: (fun i button ->
-      button#widget#connect#clicked
-       ~callback: (fun () ->
-         save_text ();
-         buttons.(date.mday - 1)#focus_off;
-
-         button#focus_on;
-         restore_text ();
-         update_date_view ());
-      ())
-    buttons;
-
-  update_view ();
-  buttons.(0)#focus_on;;
-
-GMain.Main.init ();
-print_endline (GtkMain.Main.set_locale ());
-flush stdout;
-create_GUI ();
-GMain.Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/drawing.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/drawing.ml
deleted file mode 100644 (file)
index a4623ba..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let window = GWindow.window ~show:true ()
-
-let w = window#misc#window
-let drawing = new GDraw.drawable w
-
-let redraw _ =
-  drawing#polygon ~filled:true
-    [ 10,100; 35,35; 100,10; 165,35; 190,100;
-      165,165; 100,190; 35,165; 10,100 ];
-  false
-
-let _ =
-  window#connect#destroy ~callback:Main.quit;
-  window#event#connect#after#configure ~callback:redraw;
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/editor.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/editor.ml
deleted file mode 100644 (file)
index 5e3da80..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let file_dialog ~title ~callback ?filename () =
-  let sel =
-    GWindow.file_selection ~title ~modal:true ?filename () in
-  sel#cancel_button#connect#clicked ~callback:sel#destroy;
-  sel#ok_button#connect#clicked ~callback:
-    begin fun () ->
-      let name = sel#get_filename in
-      sel#destroy ();
-      callback name
-    end;
-  sel#show ()
-
-class editor ?packing ?show () = object (self)
-  val text = GEdit.text ~editable:true ?packing ?show ()
-  val mutable filename = None
-
-  method text = text
-
-  method load_file name =
-    try
-      let ic = open_in name in
-      filename <- Some name;
-      text#freeze ();
-      text#delete_text ~start:0 ~stop:text#length;
-      let buf = String.create 1024 and len = ref 0 in
-      while len := input ic ~buf ~pos:0 ~len:1024; !len > 0 do
-       if !len = 1024 then text#insert buf
-       else text#insert (String.sub buf ~pos:0 ~len:!len)
-      done;
-      text#set_point 0;
-      text#thaw ();
-      close_in ic
-    with _ -> ()
-
-  method open_file () = file_dialog ~title:"Open" ~callback:self#load_file ()
-
-  method save_dialog () =
-    file_dialog ~title:"Save" ?filename
-      ~callback:(fun file -> self#output ~file) ()
-
-  method save_file () =
-    match filename with
-      Some file -> self#output ~file
-    | None -> self#save_dialog ()
-
-  method output ~file =
-    try
-      if Sys.file_exists file then Sys.rename ~src:file ~dst:(file ^ "~");
-      let oc = open_out file in
-      output_string oc (text#get_chars ~start:0 ~stop:text#length);
-      close_out oc;
-      filename <- Some file
-    with _ -> prerr_endline "Save failed"
-end
-
-let window = GWindow.window ~width:500 ~height:300 ~title:"editor" ()
-let vbox = GPack.vbox ~packing:window#add ()
-
-let menubar = GMenu.menu_bar ~packing:vbox#pack ()
-let factory = new GMenu.factory menubar
-let accel_group = factory#accel_group
-let file_menu = factory#add_submenu "File"
-let edit_menu = factory#add_submenu "Edit"
-
-let hbox = GPack.hbox ~packing:vbox#add ()
-let editor = new editor ~packing:hbox#add ()
-let scrollbar = GRange.scrollbar `VERTICAL ~packing:hbox#pack ()
-
-open GdkKeysyms
-
-let _ =
-  window#connect#destroy ~callback:Main.quit;
-  let factory = new GMenu.factory file_menu ~accel_group in
-  factory#add_item "Open..." ~key:_O ~callback:editor#open_file;
-  factory#add_item "Save" ~key:_S ~callback:editor#save_file;
-  factory#add_item "Save as..." ~callback:editor#save_dialog;
-  factory#add_separator ();
-  factory#add_item "Quit" ~key:_Q ~callback:window#destroy;
-  let factory = new GMenu.factory edit_menu ~accel_group in
-  factory#add_item "Copy" ~key:_C ~callback:editor#text#copy_clipboard;
-  factory#add_item "Cut" ~key:_X ~callback:editor#text#cut_clipboard;
-  factory#add_item "Paste" ~key:_V ~callback:editor#text#paste_clipboard;
-  factory#add_separator ();
-  factory#add_check_item "Word wrap" ~active:false
-    ~callback:editor#text#set_word_wrap;
-  factory#add_check_item "Read only" ~active:false
-    ~callback:(fun b -> editor#text#set_editable (not b));
-  window#add_accel_group accel_group;
-  editor#text#event#connect#button_press
-    ~callback:(fun ev ->
-      let button = GdkEvent.Button.button ev in
-      if button = 3 then begin
-       file_menu#popup ~button ~time:(GdkEvent.Button.time ev); true
-      end else false);
-  editor#text#set_vadjustment scrollbar#adjustment;
-  window#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/entry.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/entry.ml
deleted file mode 100644 (file)
index 30f3c3d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-(* $Id$ *)
-
-open Printf
-open GMain
-
-let enter_callback entry =
-  printf "Entry contents: %s\n" entry#text;
-  flush stdout
-
-let entry_toggle_editable button entry =
-  entry#set_editable button#active
-
-let entry_toggle_visibility button entry =
-  entry#set_visibility button#active
-
-let main () =
-
-  let window = GWindow.window ~title: "GTK Entry" ~width: 200 ~height: 100 () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let vbox = GPack.vbox ~packing: window#add () in
-
-  let entry = GEdit.entry ~max_length: 50 ~packing: vbox#add () in
-  entry#connect#activate ~callback:(fun () -> enter_callback entry);
-  entry#set_text "Hello";
-  entry#append_text " world";
-  entry#select_region ~start:0 ~stop:entry#text_length;
-
-  let hbox = GPack.hbox ~packing: vbox#add () in
-
-  let check = GButton.check_button ~label: "Editable" ~active: true
-      ~packing: hbox#add () in
-  check#connect#toggled ~callback:(fun () -> entry_toggle_editable check entry);
-
-  let check =
-    GButton.check_button ~label:"Visible" ~active:true ~packing:hbox#add () in
-  check#connect#toggled
-    ~callback:(fun () -> entry_toggle_visibility check entry);
-
-  let button = GButton.button ~label: "Close" ~packing: vbox#add () in
-  button#connect#clicked ~callback:window#destroy;
-  button#grab_default ();
-
-  window#show ();
-
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/events.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/events.ml
deleted file mode 100644 (file)
index 91a9872..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let _ =
-  let window = GWindow.window () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let text = GEdit.text ~editable:true ~packing:window#add () in
-  text#event#connect#button_press ~callback:
-    begin fun ev ->
-      GdkEvent.Button.button ev = 3 &&
-      GdkEvent.get_type ev = `BUTTON_PRESS &&
-      begin
-       let pos = text#position in
-       GdkEvent.Button.set_button ev 1;
-       text#event#send (GdkEvent.coerce ev);
-       Printf.printf "Position is %d.\n" text#position;
-       flush stdout;
-       text#set_position pos;
-       true
-      end
-    end;
-  window#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/fifteen.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/fifteen.ml
deleted file mode 100644 (file)
index efdf51f..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GObj
-open GMain
-
-class position ~init_x ~init_y ~min_x ~min_y ~max_x ~max_y = object
-  val mutable x = init_x
-  val mutable y = init_y
-  method current = (x, y)
-  method up ()    = if y > min_y then y <- y-1 else (); (x, y)
-  method down ()  = if y < max_y then y <- y+1 else (); (x, y)
-  method left ()  = if x > min_x then x <- x-1 else (); (x, y)
-  method right () = if x < max_x then x <- x+1 else (); (x, y)
-end
-
-let game_init () = (* generate initial puzzle state *)
-  let rec game_aux acc rest n_invert =
-    let len = List.length rest in
-    if len=0 then
-      if n_invert mod 2 = 0 then
-       acc (* to be solvable, n_invert must be even *)
-      else
-       (List.hd (List.tl acc))::(List.hd acc)::(List.tl (List.tl acc))
-    else begin
-      let rec extract n xs =
-       if (n=0) then (List.hd xs, List.tl xs)
-       else
-         let (ans, ys) = extract (n-1) (List.tl xs) in
-          (ans, List.hd xs :: ys) in
-      let ran = Random.int len in
-      let (elm, rest1) = extract ran rest in
-      let rec count p xs = match xs with
-       [] -> 0
-      |        y :: ys -> let acc = count p ys in
-                if p y then 1+acc else acc
-      in
-      let new_n_invert = count (fun x -> elm > x) acc in
-      game_aux (elm :: acc) rest1 (n_invert+new_n_invert)
-    end in
-  let rec from n = if n=0 then [] else n :: from (n-1) in
-  game_aux [] (from 15) 0
-      
-let _ = Random.init (int_of_float (Sys.time () *. 1000.))
-let window = GWindow.window ()
-let _ = window#connect#destroy ~callback:GMain.Main.quit
-
-let tbl = GPack.table ~rows:4 ~columns:4 ~homogeneous:true ~packing:window#add ()
-let dummy = GMisc.label ~text:"" ~packing:(tbl#attach ~left:3 ~top:3) ()
-let arr = Array.create_matrix ~dimx:4 ~dimy:4 dummy
-let init = game_init ()
-let _ =
-  for i = 0 to 15 do
-    let j = i mod 4  in
-    let k = i/4 in
-    let frame =
-      GBin.frame ~shadow_type:`OUT ~width:32 ~height:32
-       ~packing:(tbl#attach ~left:j ~top:k) () in
-    if i < 15 then
-      arr.(j).(k) <-
-       GMisc.label ~text:(string_of_int (List.nth init i))
-         ~packing:frame#add ()
-  done
-let pos = new position ~init_x:3 ~init_y:3 ~min_x:0 ~min_y:0 ~max_x:3 ~max_y:3
-    
-open GdkKeysyms
-
-let _ =
-  window#event#connect#key_press ~callback:
-    begin fun ev ->
-      let (x0, y0) = pos#current in
-      let wid0 = arr.(x0).(y0) in
-      let key = GdkEvent.Key.keyval ev in
-      if key = _q || key = _Escape then (Main.quit (); exit 0) else
-      let (x1, y1) =
-       if key = _h || key = _Left then 
-          pos#right ()
-       else if key = _j || key = _Down then
-         pos#up ()
-       else if key = _k || key = _Up then
-         pos#down ()
-       else if key = _l || key = _Right then
-         pos#left ()
-       else (x0, y0)
-      in
-      let wid1 = arr.(x1).(y1) in
-      wid0#set_text (wid1#text);
-      wid1#set_text "";
-      true
-    end
-             
-let main () = 
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/fixed_editor.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/fixed_editor.ml
deleted file mode 100644 (file)
index 1cde124..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-open Gdk  
-open Gtk
-open GObj
-open GMain
-
-let dnd_source_window () =
-  let window = GWindow.window ~position:`MOUSE () in
-  let vbx = GPack.vbox ~border_width:10 ~packing:window#add ()
-  in   
-  let evb = GBin.event_box ~border_width:0 ~packing:vbx#add () in
-  let frm = GBin.frame ~shadow_type:`OUT ~packing:evb#add () in
-  let lbl = GMisc.label ~text:"hello" ~packing:frm#add () in
-  let lbl2 = GMisc.label ~text:"drag from here!" ~packing:vbx#add () in
-  let targets = [ { target = "STRING"; flags = []; info = 0} ] in
-  begin
-    window#show ();
-    evb#drag#source_set targets ~modi:[`BUTTON1] ~actions:[`COPY];
-    evb#drag#connect#data_get ~callback: begin
-      fun _ data ~info ~time:_ ->
-       data#set ~typ:data#target ~format:0 ~data:"hello! "
-    end
-  end
-
-let corner_width  = 7  
-let corner_height = 7
-
-type drag_action_type =
-    GB_DRAG_NONE
-  | GB_MIDDLE
-  | GB_TOP
-  | GB_BOTTOM
-  | GB_LEFT
-  | GB_RIGHT
-  | GB_TOP_LEFT
-  | GB_TOP_RIGHT
-  | GB_BOTTOM_LEFT
-  | GB_BOTTOM_RIGHT
-
-let get_position_in_widget w ~x ~y ~width ~height =
-  if (x <= corner_width) then
-    if (y <= corner_height) then
-      GB_TOP_LEFT
-    else if (y >= height-corner_width) then
-      GB_BOTTOM_LEFT
-    else GB_LEFT
-  else if (x >= width-corner_width) then
-    if (y <= corner_height) then
-      GB_TOP_RIGHT
-    else if (y >= height-corner_width) then
-      GB_BOTTOM_RIGHT
-    else GB_RIGHT
-  else if (y <= corner_height) then
-      GB_TOP
-    else if (y >= height-corner_width) then
-      GB_BOTTOM
-    else GB_MIDDLE
-    
-class drag_info = object
-  val mutable drag_action = GB_DRAG_NONE
-  val mutable drag_offset = (0, 0)
-  val mutable toimen      = (0, 0)
-  val mutable drag_widget = None
-  method drag_action = drag_action
-  method drag_offset = drag_offset
-  method toimen = toimen (* coord. of opposite corner *)
-  method set_drag_widget (w : GObj.widget) = begin
-    match drag_widget with
-      None -> begin
-       GMain.Grab.add w;
-       drag_widget <- Some w;
-       ()
-      end
-    | Some w -> ()
-  end
-  method unset_drag_widget () = begin
-    match drag_widget with
-      Some w -> begin
-       GMain.Grab.remove w;
-       drag_widget <- None;
-       ()
-      end
-    | None -> ()
-  end
-  method set_drag_offset ~x ~y = drag_offset <- (x, y)
-  method set_drag_action (w : Gdk.window) ~x ~y =
-    begin
-      let (x0, y0) = Window.get_position w in
-      let (width, height) = Window.get_size w in
-      drag_action <- get_position_in_widget w ~x ~y ~width ~height;
-      let (x1, y1) = (x0+width, y0+height) in
-      toimen <-
-       match drag_action with
-         GB_TOP_LEFT     -> (x1, y1)
-       | GB_BOTTOM_LEFT  -> (x1, y0)
-       | GB_TOP_RIGHT    -> (x0, y1)
-       | GB_BOTTOM_RIGHT -> (x0, y0)
-       | GB_TOP          -> (x0, y1)
-       | GB_BOTTOM       -> (x0, y0)
-       | GB_LEFT         -> (x1, y0)
-       | GB_RIGHT        -> (x0, y0)
-       |  _              -> (-1, -1) 
-    end
-  method unset_drag_action () = drag_action <- GB_DRAG_NONE
-end
-
-    
-let to_grid g x = x - (x mod g)
-  
-let to_grid2 g (x, y) = (to_grid g x, to_grid g y)
-
-class fix_editor ~width ~height ~packing =
-  let info = new drag_info in
-  let fix = GPack.fixed ~width ~height ~packing () in
-  let _ = fix#misc#realize () in
-  let fix_window = fix#misc#window in
-  let fix_drawing = new GDraw.drawable fix_window in
-
-  object (self)
-    inherit GObj.widget fix#as_widget
-    val mutable grid = 1
-    method set_grid g =
-      if (grid != g) then begin
-       let pix =
-          GDraw.pixmap ~window:fix ~width:g ~height:g ~mask:true () in
-       let c = fix#misc#style#bg `NORMAL in
-       pix#set_foreground (`COLOR c);
-       pix#rectangle ~filled:true ~x:0 ~y:0 ~width:g ~height:g ();
-       pix#set_foreground `BLACK;
-       pix#point ~x:0 ~y:0;
-       Gdk.Window.set_back_pixmap (fix#misc#window) (`PIXMAP pix#pixmap)
-      end;
-      grid <- g
-
-    method new_child ~name ~x ~y ~width ~height ~callback =
-      let evb = GBin.event_box ~border_width:0 ~packing:fix#add () in
-      let lbl = GMisc.label ~text:name ~width ~height ~packing:evb#add () in
-      evb#misc#realize ();
-      evb#misc#set_geometry ~x ~y ();
-      self#connect_signals ~ebox:evb ~widget:lbl#coerce ~callback;
-      ()
-
-    method private connect_signals
-      ~ebox:(ebox : GBin.event_box) ~widget:(widget : widget) ~callback:cbfun =
-      let drawing = new GDraw.drawable (ebox#misc#window) in
-      let draw_id = ref None in
-      let exps_id = ref None in
-      let on_paint _ =
-       let (width, height) = Window.get_size (ebox#misc#window) in begin
-         drawing#set_foreground `BLACK;
-         drawing#rectangle ~filled:true ~x:0 ~y:0
-           ~width:corner_width ~height:corner_height ();
-         drawing#rectangle ~filled:true ~x:(width-corner_width) ~y:0
-           ~width:corner_width ~height:corner_height ();
-         drawing#rectangle ~filled:true
-           ~x:(width-corner_width)
-           ~y:(height-corner_height)
-           ~width:corner_width ~height:corner_height ();
-         drawing#rectangle ~filled:true
-           ~x:0
-           ~y:(height-corner_height)
-           ~width:corner_width ~height:corner_height ();
-         drawing#rectangle ~filled:false
-           ~x:0 ~y:0 ~width:(width-1) ~height:(height-1) ();
-       end
-      in
-      ebox#event#connect#button_press ~callback:
-       begin fun ev -> 
-         let bx = int_of_float (GdkEvent.Button.x ev) in
-         let by = int_of_float (GdkEvent.Button.y ev) in
-         info#set_drag_action (ebox#misc#window) ~x:bx ~y:by;
-         info#set_drag_offset ~x:bx ~y:by;
-         true
-       end;
-      ebox#event#connect#motion_notify ~callback:
-       begin fun ev ->
-         info#set_drag_widget ebox#coerce;
-         let action = info#drag_action in
-         let (mx, my) = fix#misc#pointer in
-         let (ox, oy) = info#drag_offset in
-         begin match action with
-           GB_MIDDLE ->
-             let (nx, ny) = to_grid2 grid (mx-ox, my-oy) in
-             ebox#misc#set_geometry ~x:nx ~y:ny ();
-             if cbfun ~x:nx ~y:ny ~width:(-2) ~height:(-2) then
-               ()
-             else (* should we undo ? *) ()
-         | GB_DRAG_NONE -> () (* do nothing *)
-         | GB_TOP_LEFT | GB_BOTTOM_LEFT
-         | GB_TOP_RIGHT | GB_BOTTOM_RIGHT ->
-             let (toi_x, toi_y) =  info#toimen in
-             let (mx, my) = to_grid2 grid (mx, my) in
-             let (lx, rx) =
-               if mx<toi_x then (mx, toi_x) else (toi_x, mx) in
-             let (ty, by) =
-               if my<toi_y then (my, toi_y) else (toi_y, my) in
-             let (w, h) = (rx-lx, by-ty) in
-             ebox#misc#set_geometry ~x:lx ~y:ty ~width:w ~height:h ();
-             if cbfun ~x:lx ~y:ty ~width:w ~height:h then
-               ()
-             else (* should we undo ? *) ()
-         | GB_TOP | GB_BOTTOM ->
-             let (lx, toi_y) = info#toimen in
-             let my = to_grid grid my in
-             let (ty, by) = if my<toi_y then (my, toi_y) else (toi_y, my) in
-             let h = by-ty in
-             ebox#misc#set_geometry ~y:ty ~height:h ();
-             if cbfun ~x:lx ~y:ty ~width:(-2) ~height:h then
-               ()
-             else (* should we undo ? *) ()
-         | GB_LEFT | GB_RIGHT ->
-             let (toi_x, ty) = info#toimen in
-             let mx = to_grid grid mx in
-             let (lx, rx) = if mx<toi_x then (mx, toi_x) else (toi_x, mx) in
-             let w = rx-lx in 
-             ebox#misc#set_geometry ~x:lx ~width:w ();
-             if cbfun ~x:lx ~y:ty ~width:w ~height:(-2) then
-               ()
-             else (* should we undo ? *) ()
-         end;
-         true
-       end;
-      ebox#event#connect#button_release ~callback:
-       begin fun ev -> 
-         info#unset_drag_action ();
-         info#unset_drag_widget ();
-         true
-       end;
-      exps_id := Some (ebox#event#connect#after#expose
-                         ~callback:(fun _ -> on_paint(); false));
-      draw_id := Some (ebox#misc#connect#draw ~callback:on_paint);
-      ()
-    initializer
-      fix#drag#dest_set ~actions:[`COPY]
-       [ { target = "STRING"; flags = []; info = 0} ];
-      fix#drag#connect#data_received ~callback: begin
-       fun context ~x ~y data ~info ~time ->
-         let name = data#data in
-         let _ = self#new_child ~name ~x ~y ~width:32 ~height:32
-             ~callback:(fun ~x ~y ~width ~height -> true) in
-(*               Printf.printf "%s %d %d\n" (data#data) x y;
-                 flush stdout; *)
-         context#finish ~success:true ~del:false ~time;
-      end;
-      ()
-  end
-    
-(* the following is for test only *)
-let window1 () =    
-  let window = GWindow.window () in
-  let _ = window#connect#destroy ~callback: Main.quit in
-  let fix = new fix_editor ~width:640 ~height:480 ~packing:window#add in
-  fix#set_grid 5;
-  let setter = fix#new_child ~name:"hello" ~x:100 ~y:200 ~width:32 ~height:32
-      ~callback:begin fun ~x ~y ~width ~height ->
-       (* Printf.printf "name=%s, x=%d, y=%d, width=%d, height=%d\n"
-                     "hello" x y width height;
-       flush stdout; *)
-       true
-      end in
-   window#show ();
-  ()
-
-
-    
-let main () =
-  window1 ();
-  dnd_source_window ();
-  Main.main ()
-  
-let _ = main ()
-
-(* Todo
-   
-   change mouse cursor
-   resize fixed itself
-   remove_child
-   (drag and) drop
-   
-*)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/fixpoint.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/fixpoint.ml
deleted file mode 100644 (file)
index c33b74d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let rec fix ~f ~eq x =
-  let x' = f x in
-  if eq x x' then x
-  else fix ~f ~eq x'
-
-let eq_float x y = abs_float (x -. y) < 1e-13
-
-let _ =
-  let top = GWindow.window () in
-  top#connect#destroy ~callback:Main.quit;
-  let vbox = GPack.vbox ~packing: top#add () in
-  let entry = GEdit.entry ~max_length: 20 ~packing: vbox#add () in
-  let tips = GData.tooltips () in
-  tips#set_tip entry#coerce ~text:"Initial value for fix-point";
-  let result =
-    GEdit.entry ~max_length: 20 ~editable: false ~packing: vbox#add () in
-
-  entry#connect#activate ~callback:
-    begin fun () ->
-      let x = try float_of_string entry#text with _ -> 0.0 in
-      entry#set_text (string_of_float (cos x));
-      let res = fix ~f:cos ~eq:eq_float x in
-      result#set_text (string_of_float res)
-    end;
-  top#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/hello.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/hello.ml
deleted file mode 100644 (file)
index 15ede9a..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let window = GWindow.window ~border_width: 10 ()
-
-let button = GButton.button ~label:"Hello World" ~packing: window#add ()
-
-let main () =
-  window#event#connect#delete 
-    ~callback:(fun _ -> prerr_endline "Delete event occured"; true);
-  window#connect#destroy ~callback:Main.quit;
-  button#connect#clicked ~callback:(fun () -> prerr_endline "Hello World");
-  button#connect#clicked ~callback:window#destroy;
-  window#show ();
-  Main.main ()
-
-let _ = Printexc.print main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/image.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/image.ml
deleted file mode 100644 (file)
index faf82cf..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-(* $Id$ *)
-
-open GMain
-open Gdk
-
-(* load image *)
-let buf = String.create (256*256*3)
-let ic = open_in_bin "image256x256.rgb"
-let _ = 
-  really_input ic ~buf:buf ~pos:0 ~len:(256*256*3);
-  close_in ic
-
-let rgb_at x y =
-  let offset = (y * 256 + x) * 3 in
-  (int_of_char buf.[offset  ],
-   int_of_char buf.[offset+1],
-   int_of_char buf.[offset+2])
-
-(* let id = Thread.create GtkThread.main () *)
-
-(* Choose a visual appropriate for RGB *)
-let _ =
-  Gdk.Rgb.init ();
-  GtkBase.Widget.set_default_visual (Gdk.Rgb.get_visual ());
-  GtkBase.Widget.set_default_colormap (Gdk.Rgb.get_cmap ())
-
-(* We need show: true because of the need of visual *)
-let window = GWindow.window ~show:true ~width: 256 ~height: 256 ()
-
-let visual = window#misc#visual
-
-let color_create = Truecolor.color_creator visual
-
-let w = window#misc#window
-let drawing = new GDraw.drawable w
-
-let _ =
-  window#connect#destroy ~callback:Main.quit;
-
-  let image =
-    Image.create ~kind: `FASTEST ~visual: visual ~width: 256 ~height: 256
-  in
-
-  let draw () =
-    for x = 0 to 255 do
-      for y = 0 to 255 do
-        let r,g,b = rgb_at x y in
-        Image.put_pixel image ~x: x ~y: y 
-          ~pixel: (color_create ~red: (r * 256) ~green: (g * 256) ~blue: (b * 256))
-      done
-    done 
-  in
-  let display () =
-    drawing#image image ~xsrc:0 ~ysrc:0 ~xdest:0 ~ydest:0 ~width:256 ~height:256
-  in
-
-  draw (); 
-
-  window#event#connect#after#expose ~callback:
-    begin fun _ ->
-      display (); false
-    end;
-  (* Thread.join id *)
-
-  window#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/image256x256.rgb b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/image256x256.rgb
deleted file mode 100644 (file)
index 25d4995..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-\94·â\95ºÃ\9b±Ã\93­Ã\8f\9fÃ’\9f¤Ã\9f¦Î¤¦Ûª¤ÎªªÚ¯\9eפ\95á\99Ô±¬â­©Þ®§ç\9e®Ã\9a¶É\94¸Ë¡¶¼¥®Å¢³Ó ´Îª½Æ¨¼Ó¬·Ó¶´ÃµÀÆ´°¼¬¾À·³ÄÄö¾½ÂÇÀ¼¿½·ÆĹÑÆÃÂ÷ÃÌÅÃÉÙ¼ÃÓ¿ÊÃÆÃÇÄãÃÕßÃØÕÃÎÜÌÇãÑÑâÙÔ×ÚÈâÈÔÜÄÌØÈÒÒÇÃ×ÃÅÛÃÃáÇËàÊËêËÚð½×ïÅáíËÞõ¼ñø¿âã·Úæ¾ÜÙÈáâÅÜÙÃÖ×®Ö̳ÞȱØÉ·ÃÔ²ÑØ«ÑÑ¡ÎÃ\8eÃ’Ãœ\97ÔØ\8càÃ\91ÖÊ\8fü\83ɼ\88μ\88ÃÃ\90ÔËzãÇwØÉ\80ÚÆ{âÎ\7fçÓ\89Ã×\85á×\82ÖÜ\7fÓÞ\8aÙÔ\93ØØ\8cÓØ\82Îá\86ÃŽÃ’|ÛàsÓÛzÞ×ráÙyàÔs×Üi×ØgäÆkåÑoÃœÃ_áÃdàÈR߸C׸?Ö´GÙ°WÚ°Kç¸EÚ·YÜÊ]ÞÂOÕ¿;Ù½@ÞÃHâË9íÇ<éË@ðÇ8éÉAè´@æ·AòÌ9ÃÄ7é´@ܲ?Þ½Eä¯CÙ²RάLïPÒ¡Ré]̨RÀ¿UÀ²XÉ©FÌ´JñPŹFËÃJÄ¿FÆÄQȼDÒ°OÔ­DدHÒ³PѵPɶYÃÄ^Ë¿WÙ¬PÃŽ\9e[ѧWتOˬWèYÃ\98ZÃŽ\9ddØ£ZÌ·XðEŹPε\îN½»T½³Y´ÃY¶¸N¹¶D°³S±¨YǬMª¬U¦¬[§®@ª®T ¯M¥¢M£\9eZ \9cG¬\91E£\91KÂ¥\8fY¢\8cK·\8f[¨\85S¦\97E\9e\90N§\90`¡\96R\9d\98X\9f\83[\91\86Q\9a\82S\9a\91R\99\87U§\80W©\80T\9c\87J¢~Q\9c~C\96tO\94iL\95rS\94tN©lPªoJ¢zT¯pBÂ¥qI\9e[M lC«gC¤lD±cC³YTÃSI¸OQ´IBÀIE»ZK»OE¸QH°WU¬TK«QG¹VK®TGºV?¬MD¶Z[¾MGÂUK»ZK²QO½NX¸JZÃHP³KV½J[¼ESÀF]Ä@WÆ;VÆ;\\8f·à\9a´Ù\97«Ò\94¬Õ\99 Î£¥Ê¥±Ë¡­Ø¤«Ñª«Ù¬¤Ò¦\9bѯ\9aì ×«¦×¦§Û\9b«Ê\9e¸Å\97®Æ ²À§¾Èª¹Î±¾ÅªÀÆ£Æ˨Ãø¹Ç½¼½¾·¸®²¼½µ»½Â²¼È³ÄÄÀ÷ÂÌ»ÀǽÀÂË¿ÃÀÃÃÃÑÌÃÃÃ…ÃÉÈÞËËÞÀÓßËÃØÌÇäοáÔÄÕÖÒÚÑÃÃÎÑÓËËÑËÃÑÒÆÖÇÄØËÓÙÄÑÞÊÙèÉÛò½á÷ÃÛîÄãö½ëõ¶èé´ÚáÃåøáá¾ÜØ»ÞׯÓ˳ÒƸÊɳÃÑ°Ã飂Ã\9dÆÖ\99È×\8fÎÆ\96ÙÅ\8cÔÂ\95ÌÅ\8fÃÊ\96þ\8fÌÈ\8aÚÃ\83äÉ~ÃÆxÃÆzè×\83ãÖ~ßà\85ÙÜ\81Ùß\88ÑÛ\8cÑË\8eÎ×\91Ã×\85ÎÕxÓØyÙÃ\7fÙÔzÞØnßÚmÔânÙØmÙÑfèÓpÚÕmÃÉjèÂ_ã¾Oç·Oä¹IزUÓ¯VÙºQâ»Kß½MÖÈVÓÃP×À@àÃ>ä¾=ðÀ;ñÌEîÒ8íÌ4êË@ïºDêÀCëÄ4íÄ9ÃÀ8ܹ?æ´BëRçPѲIË®SØ®QÔ¤\õQõUïLëPβDĵDƶ?ηHÒ±RɺKDZR÷K̼GïHÒ¶HÌ®V׿\ÖÀRÛ±XѨUÃ\9f[Æ OÀ¤YɬTÃ’\9dSÖ\9fSÛ§PÕ®ZÔ´WƱIʺLβZÉ»bÅ´Z»¸^±¹U¹ªHº¬D±ªAª¨I±­U°®Q­©Q \9cG¨¡Q¦¤J¤\97G\9d\98N£\8bO¦\8bQ£\8eO \8aP°\84W®\8cQ¬\99Y¦\95O¨\92N¦\94\\9a\96Z\9b\94P \8dR\99\80S\9c\81Y\9b\83U¢\80XÂ¥\87R\9bzL zW¤x\¡\7fP\9cqY\9amR\9boP\9brS©oN©lI\9fvG¦oL\9faW\99]T¨fL©jD³n=¶bD²\C»^I´OR½HJ¸HH¿RFÆJG¼EV²SI«XH©TL´LO¾MBºU9ÀU@·VO¿MAÄUAÃVI·ML¼LV³H\³GZ·PTÂKZ¼IUÈMTÈ@Y½ARº9V\93°Ù¤ºÙ\91«Õ\8b©×\99\9dÃ\9f¤Ã\9f¦Ñ®´Õ²¦Î¨¤Ã´¤Ô£¥Ã«£Ø©«Ø±¢Û¯¨Ã¬¹Ô¢·É¢»Å«³Ã\9bºÃ¡·Ã¦ÂÌ©ÄĨ½À©ÉðÈɶ»¸³¼¸½º³³¼°¶Ã²¼Â¸¸Î»ËÇÿĺÃÅÄÃÎÃÂÀËÈÇÃÒÃÈÌÌÄÔ×¾ÇÑÀÓÛÌÊ×ÔÃÃÑ¿ÙÑÀàÓÊÙÎ×ÒÊÔÖÎÃÚÎÑÔÜÈÃÉÃÓÓÔÕÔ×èÈàæÃáêÉßô»ÚóÂÞî¶êõµçñ¸åëÅÚé´àáÀáóÛÛ©äÙ«ÒÇ´Ôη×ĹÉ΢ÃÃ…\9eÓÑ\94ØÎ\93ÃÑ\95àÃ\8cÔÂ\8aÒÂ\88ÓÆ\82ÔÀ\87ÙÄ\82ßÈzÞÉ|äÌnÛØwíàuèÚuÕêzÜâ\86ßÒ\86×Ñ\83Ñ×\91ÙÓ\89ÃÃŽ\8aÓÃ\87ÓÖ\83ÜÔsåÚ\80ßÃzÚÞjàÃqæâ}êÛlèÃuéÊqÃÈ[áÅ^àÊLÞÄIÞÂLÕ¿Tà­RÔ»RæÉXØ¿X×ÄIãÀFåÃJÃ¥ÃJíÈIíËDփHõÈ:ëÕ9ôÂ9ö¿Fä½7îÇ7á·2áÆ?ç¾FæªKàªWÞ TÒ­VÒ­LÃŽ\9e]Ö\9d^Ò¨Pö^çO̳TöKôMʼBѼIÖ»Kʱ?̯JÕ¯?Ë­FÚ¨Kׯ?Ú¦BÜ´NòSß°K΢IÃÂ¥NêNÆ®OÒ¯JÕ¦LÙ¨IíNѱRŶT·RÄ´O¾º^ǺSòZµ»Q¯²O·©@¿¡G¼¯9°¤?¨ª<²­F¯¥A² E«\96B¢ E®\95@¨\9aQ¨\89R\9d\8bN©\95G¡\91KÂ¥\87Q®\92P°\8aD­\8fN¨\90KÂ¥\8fX\99\8cU \97N\9b\93Y\97\8a^ \89`£\8f_ \90X\9c\86\\9f\81Y\9c\87Z£\83M\93zV\99}U\9cwZ\98iM\92jR¢lU dJ qV¡kP£]L\93W_£`W iLª\M´YT³\O´PQ²RSÂJJ¹DEÂGD·MT·EI²FU¦[O¤GR­BN±MHºJCºZ<°_CÄ]<ÊNBÇKEÃTK¿O[¶N\ÃLMÂGOÃGPÃDWÇJLË:YÄ8Pº4\\98²Þ\9d³Ã\99²Ô\92¢Ã\9aªÙ¡ Ûª¯Ã­±Øµ©Ì³£Ã·«Ñ®¦Ó¶¥Ù´©Ô±ºÈ±¹Ë®¸É±¶Å¨¯Ã¦¹Ë\9d¶Ã\9eÃÅ¡ºÆ¢»Ä¬ÂħÇÆ«Ì»¸¿¶½»¼½¾³º½³´Â³µÌ¹»ÈµÂÑÀ¿Ì¹ÃÀ·ÎĹüÃÓÅÃ×ÅÃÔËÌÒÃÃÃÈÄËÃÔÂÌÖÄËÖÅÛ×ÌÙÃÃŽÃÑÃÙÌÉÑÃÃÚÛÃ××ÃÃËÈÒÃÃ×ÔÛçÃÖðÂÃéÃáîÃáñ·Úì·áëµìè¾ìè½ãæ¸ãÛ´ÞÔµáÛ¯ÃﻆïØȵÖÆ°ÎÀ´ÒȨá̦ÞÄ\92ÃÃŽ\8b×Ê\8bÃÃ\92ÃË\8aÖÅ\85ÕÇ\7fÃÃ’sØÒpæØqä×tåÑtá×vßäuÙâuÕÚnßÕwÒÚ\81ÔÑ\86Ã’ÃŒ\8bàÌ\80ä×\82ÜÑ\80Ã¥Ã\81àÓwæÃ{âÕvâÃ|ìÚ{ïßyéÛoÞÜbâÔYêË\àÅWá¿TÛÀUöSÞ»NÜÃHÞÆS×ÉVÚÃIáÂPê¹EåÆ@ëÆHõÈNցBíËHòÃCêÓ?íÆCéÊ=å¼9æ¹5ã»Bæ°IÞ®NÔ«\Ó¤YÚ \Ó§UÌ®YΣQÒ¡^ɪ]ά_ëXŲPÉ·J÷@úDÖ³HÒ¸DÌ­>̬Aî:׫AÓ­7æ;ÚµGÙ³JÜ®RØ­IìRÇ­RÒ«JÕ²HÒ²SÔ¨NëKÖ«MѸWÄ·P¼ÃV¼ÄY·ÇO¾¾PĽN¸µF³­<³¡?­©:·¦9·¡:±\9e=µ\98Aº¢7µ\936¯\929´\93B§\8aH¢\8aG \8cE§\87> \92E¦\94Iª\94@¦\92=¬\90C¡\94Q\9e\94X\92\8cW\94\93W\95\8fT\99\84_¤\8e]¤\91b£\8bd\9e\8bW£\88O \89O\9e\8aS\93zP\96\83P\93zQ\94sS\97jJ\8fsS\93lV\9bhW\9c\Y\97b\\9bWY\95SY\9d]R¨RT¯RU®PT´MM¶KN½DJ½GMÄFL¶MN®HFÂ¥KOªMU¯DG§EI¤GG®NCµMI·Y=´S@¾QD¼QNÉTUÃ…NZÃ…SUÀTXÀCJÀ>IÉCPÊIYÊAQÃ4\¿.X\9e·Û ¶à\92³à\97ªÎ¡¤Ö¥¦Ó¢²Ô±¦Ó¯©Õ©°Ã¢­Ô©®Õ¥£Ó§¦Õ«±Ì¯¸Ã¯»Å°ÀǬ»Ä¥®¿¦¶½¬À¾¥´É¨º½¡½Â¬Éƶ¾½ÄË®¼º­ºÊ¶»Ã´µ¿²¾¸°¹Æ·¿Ê¬¼Ë¶ÄȮøÓü˾ÇÔÃÌÜÅÅÊÊÂÃÃÆÇÃÊÃÆÒËËÒÊÃØÂØÌËÖÒÃÛÒÀÛËÊÃÃÂÈÕÎÚÑÎÞÃÃÛÌÞâÌÃçÊÙèËØñ¿ãï®ãò³àë½äá¿Þí¿ßß·äÙ±ßÙµéβÃÒ³ê̲ÞÄ­ÒíÑË\9fÙÃ¥ØÆ\9fÙÄ\92ÞÂ\95ÃÃ’\8bÜÓ\88ÃÃ\90ÖÆ\89ÑÊ}ÃÖ\7fÜàqÕßtÞÙsèà|àä|åÙtÃè}àár×âvÑÚ}Ú×~ÓÔ\83àÖ\81ÞÓ}Üà\88ÔÖ}â×qá×oßÓpíâ{èãzêáwïÛlçÓaÜÖaÚÓWÒÊdÞÃ`Ó¾_áÅRãºKÖ·Kæ·UÛµGéÇGæ´Hã¹Iä¿CãÂLîÃIéÊEçÉMíÑCéÂ@èÈJí½AÃÃ…DâÃ<ç±JåºBÚ©DÖ²OÚ­PÞ¬[Þ«OæSɱQÌ°Z¿¨gˤUDzYDzRɲKʹPÑ¿?×·?ر7ø?á@ÃÂ¥?ëAÕ\9e@Ôª4Õ­Iß­HÖ·CÌ´LæQÆ®[ȪVƪFÃ\9cGʧIÓ\9eAèHõM¿¸K˦NɳMŶQȀB÷?²µB¬­=ª¨<² ;µ£2°¤<¢:¼¥=¼\9dA³\9c;§\97F°\8dC³\96N \87L©\95D\9e\8bE¡\8aF«\96;´\915©\92G¦\97OÂ¥\98K\97\8dU\94\94W\97\93R\90\92`\97\83[\98\8f_\9e\91b\8f\93]\9a\99M\9c\86W\9f\8aT\91\88U\91yW\9dtM\90yP¡rK\9cmN£aR¡^Q\96fV `Y\9aZW\94Z]¤]Q©cL¨TU´QL·MW°QT³OF²OS³UK¿OX¼ET°JU¸HZ®JW´FY¬<S«BR­KI·F<½RJ²YHÀRQ´KOÇOV¼KKÃŽSTÉLN½>NÃ=FÃ:TÃBTÃŒ;ZÃ6[Ê4Y\91Â×\98¼Þ\9d±ä\98¦Û\97«ß\9a°Ö¢´Õ£©Û¡µÙ¢µÒ£´Ã¥¨Ë«³Ñ¡°Ó¬¸Ó·¼Ç¯·Ä¡¼Ì\9b²È\9d´Ä©±¿¨¿¹°·º©³Æ³¼º«Æµ»Å­Ãȱ»Ê«¼Æ«½ºµ³¸¶¼Ã²´½³Ä®ȿ¬¾Ê±ÄƷú¹É¾ÌÖÊÒ×ÃÆËØ¿ÉÎÄØÃÅÕÅÎÕÆØÌÌÑÃÃØÆÙÃÄÞÆÇÕÂÑÌÅÃÊÕÌ×ÎÃÜÀÔß¾ÔàÌÙëÃÒíÉÜî¹Úã±âç¸Ãíµåä´àã¸êá¬èß«ïÖªéÌ«àѧçéäʨÙÆ\9bÚÄ\98çË¡àààÉ\91ãÎ\92ÙÃ\94ÓÔ\9bÃË\91ÃÑ\8dÓÒ\83Òá\83ÕÞ\7fÛæ\87ÞÜ\7fØá\80ÚázÞßpßìv×ëwÙÃ\85Üá\87ÓÕ~Õ×\80ÒÕ{ÔÛ\88Öç\87ÜîyÖç{åé\82æàxàäyàÞyçãyïÚqìÕnßÔlÔÈdѾcÕ¶hÔ»^Û»XÖ»SÙ¾XܱLä²Jë¿Lì´Eå¹HàºMâÌMäËQçÃIñÃPìÑHäÄMìÃAæÃ>ãÂAàÄMà¸Hå­LÙ­?à´RÕ¯XÓ®UÙ¬VÛ¦cî_˹`õc̳`ѨKʪDøIÔ·DǵIʳIö:³C¢JÅ¡RÒ£IÕ¦Eʨ=ʬLÖ¯QѪCÆ®FÆ­DѧRÄ¥IÄ\9fLÄ\99KÂ\9a<̧CÆ­;êAɯ9ʨ7ƲF¾·MþE˼?¶µ4º°3±§1±\9f7±\9c.·\91/Â\972´\9f<¶\9d:±\9a=°\8cF¯\95J´\95D¤\9a:¤\90<¦\93?£\8a?¦\883®\856µ\85Eª\91I©\98G\9d\8eN\96\94X\99\8cU\95\84P\9b\88Z\93\8dY\91\83S\8f\8fK\8a\95O\8e\94F\9b\8fM\96\84L\91zY\92yZ\9dyU\9eoW\9feW¤ZR\9f]M\9aiF\94dI\99TR\99Q[\9bRZ¦XP®^LªXM§[TµTJ±MS²UR¯\XµYW±Mb½H\¸O^µMW°?\­?R´CM¹EG¸DD¸OH¾QW´JW±PO·KWÆHNÈLNÃŒHH¾FSÇJWÇ@OÃ1`¼/`Â6UÃŒ,P\92Æá\95Èà ¿×\9a¸Ù¡¸Ú\99´ä¥²Ã¡©Ú©³Î¢¼Ò\9b³Ã\9e¨Ã¡¯Ã¬´Ã¦½Ç®À˧ºÊ\9d°¿£µ¹ µ¼\9d¼½©¾½ª»Å³¯»°Æ²¬À¸À¿©»¿´Ã¿®¿À©¯¼±ªµ©³Ä¤¹Ã©¶»ªÈĢ¹¯¿½§Ì¿²Æ½¼ÖÉÊÜÃÃ…ÃÓÆÎùÃÅÃÞÎÃËÌÈÉÃÎÇÌÉÅÇÃÉÈÓÓÒ¿ÇØÌÒÃÃÒØÃÇÃÄÔÙÇÚÖÉÛãÀÙâÀÕÙÂØà½×è¾ßë½êõÃÒ¹äÛ´ëà®éÓªäÄ°ìɱèȲáѧéÃ\99àÈ£îÇ\98åÖ\9eæÖ\8eæ×\93ÓÒ\90ÃÓ\93ÉÑ\8bÔË\8bÒØ\8fäÃ\8açÚ\85Ã×\82êç\83çâyëç{äé\7fäæuäã|ÙÛ\82Þâ~ÃÞz×ã\89ÑáwÃÃ\84Õå}ÒæwÕçsÛêuãåxâàpÜæsÞÖnîÕjç×màÎfáÑ_˾cÔ¼eÙ·^ܳ`Ô³Qã¶QܶNæµTÃ¥ÃRè½Uõ½FëÃJêÒLðÉKòÖTòÌAáËLãÈDèÄJéÆHãÄ@àÇKÞ´Kè²Hâ´CÖªIðPصTß­VõZÉ©dö`Ĺ`̳^˦SħTβN³NÀ©JÊ®D̸EâHÆ\9f>É«>É«Lç@¾ @ëAÖ«DÔ·HøOÊ­@Ò£KáD˨EÇ\969Ä\9b7Ǫ?­8ÃÂ¥>Dz1ǵ:ô;º¼Cº¹>ò@²¾,µµ5·´'·¤/Ã\9d4¼\9b8 /µ\97,´\983°\9cA¶\88Eº\94K¹\9a;µ\97E¦\949¨\89BÂ¥\87;¤\83>²\847¨\90;¯\91Qª\89E\9d\99PÂ¥\92W£\8aV\99\83T\99\8bV\8f\87V\94|Y\88\91X\87\8eW\8f\91Y\92\89L\97\8dY\98wb\9at\\92uS\95jW§mW\95eT¢dS\8fXU\99cA\91aF\9bSHÂ¥VV¨JM£LM³WN¯XNµK\µJKªRU¨WN»_T±]O¸LY·GVµSK½JP±HD·AH¼?E·@H¯MV°JO»TR¿JYºFN·GYËKVÇ?WÂ:ZÇFNÊ@\ÃŒ>ZÃ/ZÉ4TÑ4Q\90ÄÞ\90Âã\90Ȏ\9e¿ã«ÄÚ©¾à©¬Ö§ªÃ§¦Ô ²Ö\9e©Ó£°Ó¤­Êª³Â­®Â¬´Ã¡µÄ¤±¶¨«¼©³»«¾Å¥ÃÀ©Å´­»´®½¹¸È­·Å§ºÄª±Ì¢²Ê\9e´¼\9a²½§³Ä¡°¼¡ºÃ\9fþ§¿½­Ç¿¦Æ½®Ã¾¸ÃdzÙʾÃÑÀÕøÃËÃÖÉÈÙÒÅÎÉÉÑÈÕÒÃÃËÃÌÔÎÉÙÑËÒÃÃÃÑÅËÓÈÑÛÀØÜÃÞã¸Ùà½àØÀÚÖÃáâ¶ßÞºáÓ½éÒºìÓ±ìÑ®èÔ®ìǦöÊ®ðÒ®õΩíÉ¡öâðÃ\92öË\99î×\99ãÃ\99ØÒ\8eÎË\90ÓÕ\90ÜØ\99ÛÃ\93ìç\90íá\81çè\87ìâ\80ðå|ôä\83èá\7féè~àézÃßyÕØ}Îà\87Çë\82ÃÃ¥\80Ãæ|Øëzæå}åàoâèqìãsíápáßoéÜgêÃiâËfãÄZßÃUÖÊ_ÜÂbÔ¿]Û½\ÞºXå»ZßÃRê·[ð·Xí¼Q÷¾QóÉNîÃWêÈTôÃQåÚAçÓBåÑDðÌLïÃLíÃHç¿?êÃDù<à¯?å²<æ°Dè·N÷Yà¶YÓ§`ʲcƬa̵R­QůLƲGéDÊ©F¼²K»©D½¨9Ȣ;º­D§CÈ¥Dˬ@Ã…Â¥AñFó>Ò´FÑ·BÈ©Cë>Ǥ5ʦ8Ä\9e<º¦@¼®7©5Ç­7õ,¿®0¸¸5¸°6º¯.²¹-¶µ/¼°+¹ª/Ã…\9c,¾\9f'Ã\9b2¿ 6¸\982°\98A·\90B¼\95=¹\92>¬\945¯\8a;«\8f6¨\8bB©\85Bµ\86A´\8cE´\8dH°\8dG¨\9aR¢\99RÂ¥\91N¡\8dH\9f\89N\99\82R\8f\86Z\84\8aS\88\8dW\90\95b\99\8f[\9f\91U\99\85Y\94{\\93zW\9fnN\9dhT\9di[\95_T\92`G\97\I\9b]G\99VF\9bSG§MR¬P\³K[¯EX¬I\¯DV¦HS°M`µZ[½RM³[J­NPµINµLD¾AF²@E³BOµ=O¬>Z¨L^²L[±DX½JQºNTÃHUÃ@P¼>ZÃE`ÆC`È=^Ã4ZÊ)`ÃŽ+[\9d¹å\94ÃÃ\92¸Ø\9e´â\99¹ß«·Ã§­Ã­¬Õ©­Ã\9c®Î\99·Ú¦¬Ã\9d«Î£¯Ã¡²É´µÄ¬­º©¸½¥¬Ä©»µ ¿À\9e¶²§²® »´±Ã±±Ä³³¼¦¼½«´Ä¤²Ã\99¨½¤«¿¦¨Ã­²Ã¡¿Ä£¼¾£º³¶Î·®Å»»Ò¾ÂÕ»»ÚÉÀÃȾÃíÓÌÀÛÃÈÑÆ»ËÀÈÕÊÊÃÿÊÿ×ÙÃÑÃÎÈ×ÎÒÊÉÃÙÄÅÙ¸Ñ߸Ëå½Ûà¸Ãá¼ÔàÈÕÖµÔî¶àÙµëÉ»ä÷ïÌ«åðîëòѦ÷θëË®ñÉ\9fðÆ\99÷À\98éÃ\99çÜ\8cÞÃ\8eÖÒ\8dÞÃ\88ÑÕ\87ÖÌ\84ÞÜ\85ÞÒ\8bêÞ\80àÚwæè{äê\86ñî\86ææ|ÞÙ\84ÛÙxåæ\88ÜÜ\82Ãæ\85×é\87Çâ\86Ùè{Óò{Þéx×ãvÞâjîáiéånÙÛiÛØeßØoæËkßÊ]ÖÒ[ÚÅgÛÈcѶW×¼WÕ»`ã¶Ué¾Rì¾NéµTì¾UðÃMúÇ^ïÃ`öÆSïÑMìÆBóËKóÃ@îÎCôÉEë¿Gç¾Må¸EÞÃ@ܳ>ä°Háµ<Ù®EÙº\Ó±`Ô­YÔ«^È¥eÉ¡aàSƦQ»·C¬HÇ\9eG½«G°£<·¡D¿\9d?¾¤9­C¾¬H»¤E»­<ŪJŬ>ų=Ê©KȬC¯A¸¢2¾ <Ç\996¾¥5Ŷ5ñ:Ť8˧1È­2½¤:¯§9´«0³´*÷$¸¸&¹¤.Â\9a)É£1Ê\998»\9f=·\96<¿\9cD¹\9aH­\8b@ª\8eC«\82>¯\84H¢\829«\8a>«\89I¯}F®\91H³\8eL¤\96F­\9bU\9d\9aP¢\8bN\92\90U\99\84H\8f\8dR\8b\85\\8f\92Q\86\8fO\90\93Y\93\87\\9a\80e\93\7fd\9c}W\9cpU\9dnb¨t_\9bo_\9cZX\97[[\98`P\9bUI\99PI¤KQ¦HZ¦U_¬Dd¨JY¦IS¦U`£UU¦W^©S[³YV°XH¯\F¨HJ¯CC¶@@°:H·?L±@PµJS­EO¯KYµH_³ATÄB]ºLZÀDZ³>VÄ:ZÀB\Ã1UÇ3SÑ(SÃ2Y\90¯Ò\95¹Ã\92·Ã\9fµÞ¥±à\9f¯Ñ¢¯Ø£´Ö¨«Ø\9c«Ô¦±Ã¥­Ñ¡³É¦»Ê¨·Ñ«´È¦½Ã¡´È\9b²·¤¼·\9f·»¦°³¡½µ¤º¨«¶²¨²­¶»«½Ä¯½¾\9e·¹\9e³Ãª§º¤©¼±µ¼²¶Ä¯²º­Ã¾ºË°»Ã²ÈÒ½ÄÌǺӿ³ÛëÓɲÊǯҺ¼Ô¼ÊÇ»Ñ̳ØüÒÒÉÊÔÄÅÃËÎÔÈÌØÆÈÒºÃÔ¶Ìã»Èß®Ñ×®Ëá¹ÃÚ¾Ûç¶Øí¾ÛÚ·ßðÜÖ©èÕ­äòäÒ§äØ©ôÔ´ïÕ¤ñÊ¥íÌ¢ðÄ\9dåÄ\93åÒ\89âÃ\92âÄ\89àÅ\84à×\81âÖw×É}ãÊzâÖwäÜ|àÃzáß\83âì}Ã¥Ã|äÚ\7fßß\86Ûâ\8aÑà~Ãá{Îè\85Ñð\86àô\88Ãê\84ÞïzÚãréäxæäpÞäsâÓqáÔpÛÙjÃÞ\ÖÓ^ÃÃdÎË]ËÃ`×½WѵSؽ`á²]ïµ[ï­Xð²Mý·MøºOó½YðÃaðÉYãÌDçÔHñËBðÎCïÎHäÃKê»Páµ@æ¼=è·7ã½=Þ¸Dä¬CÙ­QÒ¯Uί^×¹_Ô³l˦hΪ`Ǥ^¸©O·®L¹¨H· N¸ C¯©C¶ H¾¡?´§Bº«E¹®B¼£B¿±DůE»°F·¤>³­<½¦IÀ®9·¦7¹«=Â¥A¸±7¿¬9½¤.ë1¿ª8Ħ-½§6µ¨6º£2ˬ5ʪ$ð"ɨ+¾§5»\9e2Ã…\90\962Ä\98=¸\969³\92>¨\915§\8b;¦\86E£\82D \8bF¦\85?¯~C³\85C±\85N¨\90O¬\95ZÂ¥\97S\93\9dY\91\95V\97\83S\94~G\8d\8eT\97\8cX\97\92V\95\96Q\8c\86[\90\84[\8ez[\87wa\97pb\9eta\9dq`¡wa¨wf\9ff^¦bW£gQ\99V\\9aS[\9cQ^®SX¬Qe«Id©K_\9eS[Â¥][°ZW©a]¬Z[¬^U·XQ°ZF¦UE­HI¤FBÂ¥=E²BL³;S²DL¹DK³LS±MX·BZ½FQ¿DT»4X¹5Rº?[Ç9`É.fÃ0\È-^É*Z\96¼Ã\95·Ô¦ªÕ¡­Ù\9b¦Ó¡±Ë¤±Ó\9f²Ù£°Ñ\94±Ë\9f±Ã\9c³¿£±Æ§¼Ã¬³Ç¯ÂË­¾Ã§ÂÕ£³Ë£½·¦¹´¨±· µ±£¾³¥¼¥\9dº¤®µ¤²·¤·Ã\9d¶¾©¶º§§Â\9a¬´¢½²¥¶°¶½¹³Ãµ»Æ±¿É½Åʶ¿Ë²¶Ö¸°Ã¾°Î¸ѹ®Ó°ÃÚ¶³Ì»ÀÊÅÃÇƺÎÖ¿ÃÑÉÌßËÑâÃËÖÅÃáÂÑÛµÃá¼ÑÖ·ÌÜ®ÃîÞÓ¿Ùç±ÙêºãéµçܨâاÜÒ«àÙ­ëïãÎ¥èزôÕ¤äΠçÒ\9fíΣéÃ\8fêÆ\8bèÅ\81æ¾\86ÃÉ\7fæËzÜËwÜÅtæÓ|ØØtÛÜxäÃsàà\7fàâ\82äà\85äÙ\86×á\82ÑàwßáxÌé\7fÓç\81×éwâå}æð\88êá\7fæÜläâpêßjáãpÞÛlÖÓhÙàjÚÃdÒÑYÑÌhÉËZÖÃeØÃ[æ½Và±að»_ø½U÷´Rè»Uù»V÷ÃRù¼OïÆ[éÃTáÎ?åÌ<èÑ>éÎDáÃGçÄ>æ¿Bâ»FÛ¶BêºEܼ?ë´Dá®B׫DÙ«SÓ¹OØÄXì`ħjëfÇ£bÀ¦Z³¢L´©Qª\95W©§Dª¦L¬\9bA°¢D½©G¼«KèM¡<ű<Ç©7µ­G°§<À£I·¬O½§?®°6¸¨1´¦B´\9f2â4½¥.¾«2²§0±³-·±:°«:¯«:µ\9f3¼¨1Ç£ Ã„­&¿¤5Ä\951Â\96?½\90CÇ\8dA¼\92Bº\8b=²\91A¡\912¬\83B©\8aE©\89I«\87G°\8b?­\89?¨\84G­\92T¤\97L\9b\94Q\90\8dQ\8c\8dN\8e\89V\8f~G\92\8aL\8b\89W\8f\8dP\95\90S\94\8bI\8f\8eM\8cy[\91\80[\8at^£rdÂ¥te¤w_§z`\9fe^¨b\\9b^aÂ¥W_­Sa²Nd­O^Â¥Wd¡Vh¦V] [_Â¥RV\9fO^®Vb­[\±PL£RH°SO¢YD£G@¨GA²HG´QPµDF±GJ¯DQµAR¶JSÂ;V¶=QÃGPÄ<X½*TÃ…9W·6a»*U¸'^Ã…-PÃ,Y\98­Ü¡²Ó¥§Ö¤©È¦¨Ç¨«Åª¯Ã\9e²Ì\9a¯Ã\95µÅ¢ªÄ ­½\9c»¿\9d¾Ì¢¸ÕªÃѬÉÌ«ÂÓ´¿È¬ºÂ¤½¼­¸¯ªº¶¢·±\97µ¬\9d¹©¡¼\9f­¹£§·¨±·¦¬¿¨°¸\9f¼¹¥¶¯£¿´´¸®·À«Æ˯ÄÆ»ÃÌ·½Õ¬Âά·Ë°²Ã¶³Óº®Ø¶ºÃÀ¼Ã»½Î¿ºÇʼÅÊÄÊÙÇÎáËËáÇÆäÌÒßÀßä·ÚÞµÑìÓÓ²ÔÓµßÖ±äâ­Ùè±åä§äߧÛÞ³ÜñÃÔ®éÚ®ãÔ´ëÔªåÑ¥àÒªÞãåãéˤàÃ\96×Æ\88ÃÃ…\80æÂzàÃqåÆråÉvßÈuÃÓsßãmãèvÃëxâÞ\82íã\84èÚ\7fèátØØt×åpØè}àè\7fÛáyÃÃœ~ãè\80áâ\82ëÛtñâuÃ¥Ãr×åeÖãbÓçbØÞ^Êà^ÃÑ^ÔÖcÓÓdßË\â¾[â±båµ`åÃVñÄYô¿PðÀWðÃTò½PíºZîÀ[îÆQíËIçÃBçÃAäÃ;àÆ9éÀ7é»Dß³@ß·Lå¶Dæ·Bï²@ë¯<ë¶@ܲHÙ°GÕ½SØÂX̵^ɸ`ʬ[²`¸¦Y­¨S«\9bY§¦Q¯¥H³¨A«\9dH«\9eH¸\9fEº©>¸¢GȻ=¸®5¹­Dµ¨F±¯@¶­E®¨9±®9º«?³\9b5¹£7¿©)¶©)·­.®°9®¹2°¶4µ³1¹«+µ¢1¹ 5Æ¥)¾ª-½\9d3¿\9e1É\92=Æ\97<½\8b\89;¸\87=°\906¬\8e:¨\8bB§\89@Â¥\89H³\8aG­\88L°\8bC¨\88E¦\84Q§\8fI\98\8eN\8d\96P\8a\94F\90\93M\88\86S\91\86N\8e\8cX\8f\97I\91\98J\8c\94H\8e\86N\84\89S\8a~Z\8c}X\9bv`¤zd\9c{cÂ¥sZ©t^¢sf£eb£df®`d°Zh¯Ta¤Oj¢Wf¦^b£\a\9cWZ\9dS`¡QY©TW§HP\9eHO§JF¢PKÂ¥IF¤KCÂ¥UH¯OGªUO¢SN¤SR§E^¸He¼;aÃ…<TÃBUÆ<[½-aÂ2_¸+]º/X½$SË"\ÃŒ#Y\95¯Î\9e¹×¢®Ã¡ªÎ\9d¤Î¦«Ã µÀ\99²È\95¶Ì\99¼É¤±È\9a±º©ÃÄ©¹Î¨·Ã£Äç¼Ë¦¿Ò¤¾Ô¦µÃ¢³Ã²´º¥½­«¹»\9fº±\99º¢¨®®²½\9f£µ\9d©¶ ¨®\9eº½¡¯½§»ª¬½«³³¶®Å²ºÈ·½¾¿µÈ¸²Ê±·Ã°ÂǬºÈ®³Öµ»Ë¾¿ËÀÃѽ»Ä»´ÎÇ·ÃȺÈÃÅÕÖËÒÛÃ×ÜÃÔÞµÌâ´ÒÒ¶ÙéßÑ¥ØÛ´Ãß´âè¨ÃèªÛì©äåªàÓ­åÞ©ïÓ¤èÓ°éÒ¥åѬäؤåÕ\9fæÙ\99àÙ£ëÔ\99ÃÃ\95ÛÅ\89ëÃ\8cëÃ\82ëÇ~äÀ~óÅsßÌ|âàzæÕvÛâyãÞ\81êèyàãvìávÃÃ¥yÚä~ÚÃ\85Üæ\81ÜäyâÞwØä{Þê\8däê|çÜuéäuÙÚpÙåpÑã]ÕÖ_Ãä_ÌÕ^×ÉeÒØ[ÓÕ^ÃœÃfß¼\ê¹bë»Rî½PÃÃVð¿\ò½aíÂYâÃVîÉXíº^é¾RçÉEðÉBâÉEàÌ:ìµ?à¿Jä¿Oà²>ä·@æ¾Jí¼Bã¹=Þ¹JܱBÙ´EìOÖµQɯU˲aÓ´bË·[¿´Z¼ªW±¥`¼¡_±©H¯¤=±\9fI¦\96J¯\94@¿\95M¼\96H®¤A·¦=½«;¯©5³¡7°¡A®±=¹¬@¹­E­¨9º\9a-Â\9d2î(º¨.·°2½¸&µ3±²/¯³-µ§+²£3¼¦0Ǥ)¿¢2Ê\934Ê\903È\96;Ã\91<º\899º\80:»\80:µ\80<²\88A°\818§\8aG°\8dB³\80D¨\8dI¡\8dK§\89O£\8bB\99\87B\94\8cG\8d\94M\81\98C\8a\87J\87\85U\84\91X\8f\92T\8f\99R\90\99>\8d\94K\90\87E\8c\87I\91z^\90|\\8dv\\93\84l\97\82hÂ¥|bÂ¥{]£tc©i^Â¥aj\9e\o§Tc¯^g®Yc§[b¦[Y®^a \c\9c]]©YP£[L¤RN£CL\9bAZ\9bD\ªNO¤OP¬XI HM¢FM\99CS\9fDX§EY¯HV«Ea¾GRÃ>c¿:S¾)U¹.S»(]¶3^³)S½-aÃŒ$Y\9f¶Õ\9fµÑ£¦Ñ §×¦¦Æ¥­Å¡²Ç\99¿É¨À»§¼½§À¸\9e½¾¤µÀ¦¼Èª·Ä©·Ç¥¿Ê­·Ã§¬È\9e±Ê\9e´È¨·»¨®´¦¯´¦ª·¤³¨¡»¬¦±¢¦³£¦­\9c²¯\94¶¹\9c²·¦·¶­²­¶¼µ­²Âµ³½·¶¼¼»»²»±ºÄ­»Ã²¶Ã¶³Ë½µÆĹĿÂó¾Èµ»Å½¹Ó¿¾ÃÈÄÌÒË×ÃÃÖÕÃÃÖ³ÃܶÕѹÚÛ³àÓ¤×Ö¦ÃÙ³ßé«åéªÚé¨ßÜ¥ëå§èÜ\9bòؤðÖ°íÃ¥àÒ¡æÖ\94ëÃ\94îÎ\90ì×\93âÃ\8déË\94ñÎ\88é¿\8aç¹\8fë½\85îÈtðÌtâ×zÞÛyÔã\80ÚÃwàèpáèxÜë|èâ~Ùí\7fÔéwÑî\83ßå\8aãè\80åã\81Ùì\81Ûå\88Öñ\89Ùí{ÓêtÞètßÃc×ÓaÚàfÃÃœ^ØÔ`ÕÃcÙÇ]âÉeëÃhâÅZâ¶Wé·TéÃSØÃRâÂZê»`åÂ_ÚÅ]àÂ[ÿXá¾OæËFëÈ@ëÓAåÃGèµMê±Câ²Hç®CÞ¬@å¸Dè»JØ¿R׺LÒ¸IηQØ®UÖ­LÃÂ¥R̪YË·YǹR«_¾¥\¿ªT¿¤UÀ©F¹\9dBº¤N­ J¹ J·\90I°\9aK¬ >·\9f;³\9f9´\9c,µ©0²¨<¶¦9¯°8±¨A½\9e0¹£+Ƥ3Â¥.è2¯0¸°+²²%²¯!¯«)¯ª)»¡9¸\998º\981¾\98/È\90<Ë\94BÄ\8bAº\85@½\864¸{:½}CÃyK¶\7fD¸\8f@©\8dA¯\82<µ\80<­\7fC¡\81G\9a{<\9e\84?\96\88>\99\8fL\8c\85G\85\8aL\83\86Q\88\8dR\8a\96E\8e\93I\8d\97C\8b\94B\8d\9cA\8b\95F\95\95F\98\85R\99\86\\8f\80`\8dwn\96~j\9c~a yf¨vd©lg£gf\9a\j­\l±Xp±Xm§\f©YY¨`W¦cUª][°[O©VL«WS LU\99?W\9dA^\9eC`¨SWªYV¡PQ\9bC]\9e@[\9dEV­CZ¯>]«=V´AZ¾F`Ã>d¿2X´9Yµ1Z´&V´)^³(a¼%e\9b¯Ú¡ªË\9c²Ù\9a®Û¡µ×\9e¨Ã¤½Ì©ÃÉ\9f¸É¨´Ã¤±¿¡ÃÉ\9fÃÂ\9cÄë±Ä °Ã\9f´Ì¢²É\97¶Ã\9dȮ\9c·Ã ²¼ ²¶¤«¸ª·«¡¸¢\9d½«ª±\9e©³¢¨¶ª²¹¥·¼\98»«©²²¨¹¹\9e»·¦¯´±º¸¼°¼²¾²°¸»¶Â¼±Ã¿´¿¿ºÃ¼·Àº´Êijù°Ã´¶ÈǾÌɺÓÅÄÜƸÞ˵ÜÖ²ÃÔµÛ׶çß°ÜÖªåÙ ÃÎ¥àÕ¸ä×®îë¨àá¢èÜ«äá\9eâÛ\94æß õØ ç׫ëÕ\9dçÓ¦ìß\9dúÕ\96óÛ\94ìÈ\8dùÃ\85ë¾\83êÂ\8aïÄ~ü¼{ð¾\7fïÇ{ã×uïÚoæß|ÔÞu×ÞzÜè\81ÛÜ\82çëxÚê}ÃÃ\8bàæ\88áã\8eÙê\8bÜá\83ßâ\8féé\8eÙç\85ØãrÔè~ßãpÜâd×ÖYÃÓeÖÊiÜÓdãÊYæÃhçÇbÛÎcäÃ^Þ¼ZþZßÃWÃÃ…OÔ¾Tæ¸^ØÀVÙÆeÖÆVÞ½SÖÄKÃÆRÃËPåÒPèÄCܬRܬFÚ²NׯCâªDÙºMæ¾Jç¾CÛÀAÒ¸TѼRÙºEß½HÒ©MÕ§TÔ±MƽXªQʯOÈ\9fIº«BĨ@½¤>·¢E¯¦Dº\99;¯\8b<»\975°\9e<¹\9a3©£?µ\990º\9e1´¢+²®4ºªA¸¥;°°:½ª3¶\9a$¶\9a(¿§.Ê£0¸£$ȴ/±«)´©'³\9b6¼\9f4¹ >Ã…\9b/Ã\947À\8e<È\8e3Ä\91B½\8e=¸\888Æ\83<µ|<À\89>­~F¹\8c>­\84G¦\8c7²\869²\86>¦\86J\9b\8c<\96\84G\97\91N\91\8eQ\87\94S\85\90W\8a\90O\84\9bN\82\8cK\8d\8fQ\8f\98H\8d\8cG\94\92F\86\8dD\8c\93N\94\83X\92\89P \81`\9e}k\9d\80h\91vd¤zd§vl\9cjs\9afk\90Xs\9cai [i£Qe¬]]¢][¢cR ]a«Ze¢X_©XH\97XM\9cVV\9fCV\98@h¢@Z\9fJb¦N^Â¥DX£>Q¤;[\9f>Y¬I]±BU±?R¬B[­?b±?n¶9`­1Z²,Y­6k±0nµ/d»,m\92©É\98«Õ¢«Ò\9c´Ã¥³Ú\9d´×\9d½Î©¿Ì£´Ê¡´¾¤¶Ã\99¹Â\9e²¿\9f»É¡ÀÃ\9f¶É\94¯Ç\96¸Ñ\9eµÔ\9d¼Ë\9f»Ê\9f°Ã¦«Æ\9fµ¼¦¯®\9d·«¢¼«£·¨£º²°°«·­¤»´¤°²\99®¬\9d®¶\99³µ¤­°¦°¯²»·°¸³¹®¾À´º¸·¿¹½¾·Æ®ǾªÊIJ½½±ÃöÃĺÈȲÕ´ÃÀ°ØñØÚ­àÛ¬èÙ´éá®åÔ³ïÔ©èÙ±áÕ®ßקæáªãÜ­ßå¥íã¨ëë\9aõè\91îÜ\97ìÞ\99êá£üà\9fþá\9fûá\93þÒ\87ÿÇ\84ÿÆ\7fÿÃ|úÉ\83õ¾zýÄzóÄzïÃ}òÃqðÒtâÛxßÖxâàzÃáxãÃ}×â}Øé\8cÖÞ\8eÚê\86Ûí\8cÛê\89Ãì\8bÜç\92åê\8aÛá\86ÞÚxåáyÞßqåÛeÛÒ`âÉ]ØÉb×Ç]å¾[âÂ`âÄ\äÆgßÆbÖ¿[ÚÅ[ßÌNÒÂRÃÀWܼ[Ú»YÔÀbÚÃ`Ã’Ã…WÃ’ÃŒOÔÎWÖÃVáÄNá¶X×°PÙ°\á°Vé³Mß´Mâ²Iâ²Iä±JܹFÕ±EѺMÜ¿SÞ¾KܱQÙ²UÙ´M˺VʵWίPÇ©B½§?í7·¡>¶¥1¿\9d2¹\91.³\94;±\8d;µ\915²\957­\9e4¼\9a(¹ ,°«3±«4®­8¶¯5·¡.º¤0¾ª1»\9f#¼£$¨"¨!½\9c0¹\9c/¶ ,½¥8µ\9b<´£<À\9d<Ç\95?¾\935¿\91=À\8c5À|8¿}DÃ\82H½\81@º\80<µ\8aF¹\82<°\84<¤\84G©\89@\9f\888Â¥\88?\9c\95@\99\90E\8f\96P\91\93M\8c\99P\8e\97Y\91¢P\82\9bS\7f\98S\89\94K\86\8dM\8c\90F\92\8aM\91\94F\9d\8dO\99\89M\9a\8f`\9f\89d\9bzo\97vi\92x_\9awe¤ta\9dim\9e\n\94_s\97Ur\9fOn£Pr¦\d¬^]§[[¦VeªL^¡FS\9ePT LJ\95NQ\90AR\94Ca\9e@b\9bBa\9aAb HW§F_©BV¬E`ªA]±7e¦>_£9g­El©>h¬>s³@t°8f¹;o´5q±.mº#l\9a¢Ë\8e³Ì\8fªÃ\98µÃ\9a­Ü\96»Ù¨±Ã¦­Î\9f¸»\9b§¹\9f¸Ã£¾»\97µÆ\9e®É£­Ã¢­Ã¡ªÃ\99¶É\9f°¾\9b¶Ë\99¸È\99¶Ã\99¯¸\99´°§²»¢½±­¹¦¦º§³°§±®­¸¦²¹© º¶\9c¬¬¨³±\9f²±³±±°«¦¹²§¬Ãµ¶»­µÀ®¼¸·±Ä¿²Éµ·¾½¯»Ã·Ã娦ðÃʳÖ̲àʹÚóÜÓ´âѱÛܬÙß­çðäÕ¯êÜ©öß«æçàÖ¢íØ£êØ\9dèÙ\9fëÜ\9açæ\9cäâ\90çÃ\9dèà£ëè£íæ\9cëÛ\9c÷Û\90øÃ\8bòÇ\8aÿ¿~ø¼\83ù¿\81óÊ\80öË\7föË{ûÆyèËwàÖxâËqçÃvãÖsßÖsâáxÜâ\8bàé\88âì\7fßé|äó\80èò\81Üé\80äé\87àå\7fáäxäÙ{æÙkçÃfáÜgØÓcÖÃkÙÕlÜÌ[èÃUíÇZáÃUØÇT×ÉV×Ã^Õ¿]Úº]Õ¸^ã¹\Ù¹XܾVÃÃdÃÃ…TÒÂZÜÀZ×ÌUÙÊKÜ¿UÙ¸Jå­RÞ¸Nè¬Nê¬Rì¹Ië²Mç»Iå·OÔÀMÒÃUÙ·YýOõJÒ¬KÉ®YɧWôYɶVÅ®IÊ®CȢE´¬D¼\9e<²¤:¾\9d(·\93.²\97C©\9aB·\989­\9b8°\9a@³¤6«\9d/®¥0¸¬)²§2°\9d'²¤4¼¡3¶¬1¹\9d\1fº¤$¹¤"´\9e,º\9a2½\9e6²\9f7¾ 9¿¢>Ã\9b4¼\97\94@º\968¶\8a5µ\8d8°\83>Ä\85@´\8d8³\7fF½\86H«\84@·\7fB¤\7f5¢}@\9f\84D¯\90;§\85C¤\95D\8d\88C\95\93O\95\8fR\8e\95[\92\8eQ\86\96V\86\99J\8f\96M\93\97U\82\8bH\8f\8bN\91\90T\95\8eM\95\89I\88\8dO\95\91[\9e\85Y\96\84V\9doZ\94th\96hc\90bm\95gr\97ar\8eOe\9eYl\97Hl\9fMu®fj«cf¤Rf¢Tf¬]g¢T[ªSV£T]\90O[\93Fa\9aQg Jf\99Ha¨DW CW¤BM¤HZ¨Cf©NW­?a®?[³<n¯Gv§=u³Ai¹Af°5b½8mº:k¿,f²%v\91¬Ú\90¯Ã\91³Ã\95¬Ì\97¯Å\9bµÃ\9d¸Ñ«©Å¦¬¿\9e§½ «Ä\9b·º\98µÉ\9f­Ç¡³½\95¨¼\9e¢¹\97¬À\96¹º\98µ¾\94¶¾\9f¯·¤¬©\99¤«¥µ­®¹º­¶®¨««©¥§¹§°³¦¥´¨ª¸¢©®­£¸°¬¶¨°°¨²·§¯¶©¸À¥²µ©¶»¯·º»ÃÀ¿¾È½¼¾°µ¿·ª·Â«¼Ã¯ÂË­ÉóàʬÃÒ´ÞÒ¯æÖµÞÚ®ÃѳáË«âÕ¬óâ¡öÕ­ôÔ©èàèØ\98ãÓ¡ãÖ\98îÓ¡ðá\9dèÚ\93çÕ\93ÜÛ¡Üâ\9dÃÙ\8cáÜ\8cæÞ\96êÑ\91õÇ\90ÿÂ\83ÿ·\81ý½\81íÂ\83ìË\84ð½\82÷¾\81òÊ}áÓpìÒrëÉvâÃ}çÃsëÓzÃÛ\87ßÚwçêxãëväî\7fÛî{ãìxÛé\83Ãê|ÞïyëæmèåræÜlÕÙqÃ’ÃiÕÚmáÕháÇhçÅVâÅUäÄXéÃXÞÃUåÎZáÃP߶`׸^Õ¹XäÅUæ½Qç»Yßµ_ÕµTÙÂX×ÄOÛµVܳOêµDæ»Hé·Cá°Eç¸>ê±Dê²Lç¼NÛÃLؼVÞ¹_Ú¼VÒ·QëGÔ\9eDÉ¢QÃ¥OȪXÆ¢UɨH·¬I´®B½ 8¶\999²\980¶\95+µ\8d*©\91:°\967¯\9e@µ¢8¯¢>ª\9e7Â¥\9c2²¨3µ¨,±ª)·\9c$ê,½«.¾¬*¸ &±\97\1d¸\98 Â´Â¢*ȴ*¸¢,½¢4·¡2¼\995Â\8e?Ã\90@·\87B·\8c9²\860®\83/º\86,·\948·\939¶\8c=¬\87>°\87>¬\885¦{6­\7f5Â¥\8a6¨\8eE¨\91F\9a\8eD\92\8c<\8c\9bO\8d\98R\92\93L\91\91Q\8d\9aX\87\9bO\8f\95U\8b\8cP\8d\85V\8b\8eN\94\9aI\92\97S\86\9aU\87\93L\8c\8eF\8c\81P\94sO\93p\\8fpX\91aa\90`]\98\g\9c_k\97Pa\9cO`\9cMp¡]r¨`o¡_d£Ui\9fab£`bª[aÂ¥TV\9fTT\9aU[\92Ud\98P[¢OS¢N[©PKÂ¥LG£OP\9cNb¡Kc\9fIa£LV«E\¯>f«Hn²Cn¸>l·@`µ6dº=j¸2d½%dº!p\90¤É\86¥Ë\89¬Ã\86«Ã\97¨¾ ­Ã\9c¯À\9c¢¾\9b«·¤ª³\97¨Ã¥¬º ¦Ä\9d¤Ä\9d­¿\91­»\9f±µ\99¶¾£¨Ã ¬» «¿\9a¤¶¢¥«¢¡¤\9e©®²¯´±¥¶°£¶¹±±Ã¬»¶ ©½\9b¨¹«©µ¨¤³§¬´\9b®·¦¬¿£©Ã\9e¶·\9e°Ç£ºÆ¬´¹µ´Ê¹ÂÆ»Àƹ¼¼³¼µÈ·ÇɳÈƪ×ήæ̬ÛÔ³ÞÊ£èÖ²ßôìÚ²îÑ\9fåÒ¦øÞ\9eéá¡õÃ¥éÃ\9cçÞ\94íÖ\92èØ\96ֆ\94úÜ\9dõÃ\92ðÕ\91åÓ\9açÞ\9báÒ\9dãÔ\8dêÎ\8dëÆ\97òÄ\94òÃ\92ÿÂ\7fúÈ\87ÿÀ~íÀ\81ë½\89óÃ\7fèÌ\7fèÓxéÅlëÃpêÔwÙÕkéÑtßÞ\80ßÛ|êð|æéxâìsÞæzÜê|çé{âìsâçxÞífáÞjëâbâápÃëfÓÚdÜ×pÛÃ_áÊdãÃ]ãÀUßÂLÜÒWßÄFäÃHç·NæÂPúTéÅQê¾Zå¹\æ½Wå®TØ®YÚ¬SÜ°Hà®KÞµEé¶Qì®?Þ±Eê©=î±;é¾JæºRä³QàÃQã´OسWÒ»KγKÒ¦RæOƧT¹±R¯K¹©Rº¯L¸¦:º©0³\98-¶\9f.¯\9b+¨\9b%ª\9a0ª\9f=¢\98A\9f\9cG¦¡H­¤7±\95?¨¢3¨¤0´\98)¼\9e*¸¢-²¦-½¦/±£!¶\94-³\9a\1e²¥\1c·¬(®§'¾¦+¹\9f3½\980´\99<¹\91?¹\90B¯\8e3¯\818µ\85%©\96.«\97-¶\99/­\96=´\861º\8a:¦\854¢\841£\8f3«\96,\9a\97CÂ¥\8aD\95\91C\92\8a=\8e\8eL\96\96W\8e\93G\8e¡H\92¡H\90\94O\85\91N\8b\8aT\89\8eK\91\93N\89\8cK\95\88J\88\89K\8c\93Q\83\87Y\88\86Z\93v\\91eX\88aY\99WY\95ab ]j\98Xe\9aW\\9aJl Pl\98]j©ed©dp\99Zj¤Vf£XZ¢MU®V]ªQP¡ZZ\9eNZ\94Nh\9fS^§I^¬KX«PK¡FM¨O\\98Mf\9dBm¨E]«HY°OZ©Fo¶Pf¾>e´?]·4j¿2b»7f»#l»&s~«Ê\82¢Ã|§Ã\85¡Ã\96\9fÃ…\99¥¸¢«¶\9a¡À\9f\9c¹ \9e¶¨\9eº£¬¾£¤Æ\97«¾\8c¦È\90¯Ã\93®·¤¶·©®½¨¬¾¬«°¢ª«¦¢¨¤§­¤®µ¤§±®¢µ³¬´¾°¹·¥¶·\9d±º\9b¬¾\97®³\9e¥·\98¯¸\9eª´\9cª¹\9d²Ã¥´» »½ ·Ç¨³Î¥±Å®·¼³¹Ãµ¾¸¾µ»¾²ÄìÌçÕΫÞðÜïÞʦðÒ­ððëÑ\9f÷Þ\9fêä\9bëÜ\99ëÃ\93ëÃ\9bèÓ\95òÓ\99÷Þ\9cøÛ\9aïÕ\8cõÜ\8eïÃ\8fïÒ\94íÎ\96áÒ\94êÎ\9bêÈ\94âÌ\8cæÄ\92éÈ\9aõ»\94ù»\8eÿÃ\88ÿÇ\7fûÃ\87ûÉ\82ïÈyñËxãÌqÜÇuæÃuß×{ÛÙoæÜoäÔ}éÙrïäqìÞyêáwâÛ\82àä|éÞtæàxÛìnáèoãéiåæcáíbÜédÖênÖÃfÞ×háØcâÕYåËXÃÖVßÃJÞÀKãÀHí¼?éÃGêÈVìÂUïºMê´Tæ»Vã°\ê¤Væ¥Xå¬WÙ¯L×°MÞ¬Kî«PìµEì¹Dä±@ê´K߸Eã¸EýOá¿QÞ¹ZعTÛ¶NɧSƧJŤM´®L·¦I¶©M±«E¶¦6¶ +»\98,³£!¨\9d#¢\95-¨\92/©\9e6\9a\9fA\97\9a9¡ A¨\99?­\9d;§\9d.§\9b1°£-°\9b+´\98!µ #¯¡)¯\96&±\98"«\97&©\94*±¡#µ\98'²\9e3®\9f2·\96<¾\8c>µ\8d7»\8f-°\894°\8a)°\8e"¸\93\1c¯\94#¹\99%±\95,¸\8f4·\8c5²\867ª\857 \861Â¥\923 \989\9a\93=\9c\9aB\9b\8fLÂ¥\94E\9d\9aL\9a\9dD\91\9fM\96\9fR\8e\99K\93\93U\8d\97U\8e\8fY\87\94T\85\93R\8b\88R\8c\8dO\89\8bT\8b\81R\85\83Z\81{]\88jb\90ij\90^b\97^f\98Wk\8fX`\94Nd\92[n\9fWg ag\9e`i\97`s\9d]m\9e^^¬M\­W`°RU³ZO±SX\9fSf\9eTd S`\9fLU§QI¯WK¬ULªEY\9d@g\9eAk¦BgÂ¥G_²D[²QbµIa½I]·C]½<jÃ2lµ-m´1a¿$e~\9aÃ’\85§É\88\9dÄ\8a¥º\88\9a·\93§·\89\9b¶\92\9f´\95¦¸¡£¾\95¡¿\98\9cÀ\98¦\8e«·\8b¯´\9b³Â¡¨»\9b¦»¬¦´ª§¾£«¾¢\9f®©ª¨¡£´\9d«´¬ªª®¤µ©°»¯¨¼­§»®£ª´\94¨³¢¬Ã\98¡º\99°¼\97±Ã\9e¯Ã ¼¹¢°Âª¼Ë«¾È¯¸Ã¦½¼­½È¸µÀ¹¬Â»²¼µ³ÆÈ­ÌʯÜŬä˵æÊ£ÜçëÓ¤êÒ¨úѦ÷Ú\9bæÛ¥îÓ\9cîÎ\99ðÚ\96êÃ\95èË\97óÔ\9añÑ\91ֆ\97üÙ\95ôÑ\88ð×\95æÊ\87ëÖ\8eçË\8fíÉ\8dã¿\8bì½\82ì»\81ñº\8böÆ\8dõÈ\87úÄ\8aü¿\84ý¾vö½~ëÎ}×Ì\80ãÓxåÓ{ÛÔ|ßÖlìÞyêÑ{íà\7féäsóéyíìyäèrÃ×wçÞkÖâqåámÛÜqâábÖçgãÞeÃç^âä]á×[ÛÒ]ÛÊVÚÊ^çÈZåÆMçÈTÙËTâÈMä»Dç·Hí¹Jê»Qê»MòµWì¸Oä«`å³Të¦]Ù«RÙªKëPß­Vç°BܵIܳ=Þ¨Dã¶Jå±>ÔºGÃÃ…IλJÞ²RÙ©TôJɱ>¿ªJ¾ªF±¤J­¯C¶§G¶\9eF·¢@±¥,­\93.·\96*¨\9d/­\90.³\927¨\97C\9a\98G\9fÂ¥:¥¥C ¡5«£:ǻ;\96©6\9c\993®\92)²\9c(¯¤(²\96)¦\97+§\97* \90+­\9a%°\92!­\9f#¬\9e3¯\997®\9b0¬\98.µ\8f6ª\86*ª\91$°\8a+°\91-¸\920­\8e%ª\96!ª\95,·\8b4²\823©\88=©\8f5£\864 \93:©\8b@ \8fC\9f\95;\9c\97D\9f\8cP¨\96J¢\9fO \96Q\8b\97T\95\91J\90\8fI\8a\98V\8b\98I\88\91Q\82\8aW\8c\8bR\81\8c\\8e\82L\8e\82S\93uZ\8du\\8fih\95o`\8b`o\95\j\8dQu\98Ww\92]i\91Zm\94]k\92`e¦]m\9f^l¢Oc\9eTi¨Od¬Q\­R^²PU¬Oa£QX\9eY^ ZaÂ¥QS¤]U©SI«RV±Q^£Hc\9aDfÂ¥Bh¬Fj¯Ie¹Fh´?fÄAbÃGcÀDl·.h±$mÃ%hÆ$dx¦Î}¡Ã\80\95¼\90\98¶\84£·\81§¾\86¢»\93\92µ\9b\94µ\92£Ã\85£¿\89\9cÃ\8a\98»\94\9b´\8d¬»\94«½ ¦¿\9f¡¶£©½¤¡È\9b¢¾\9e¤²¤¥¹¤¡·¨£´«\9e«¦ µ°¯¶¤¢·¨ ´©¥´¸\9d¯¼\9c©À\95§Ê\93¢È\98§Î\96ªÆ\9d¸Ã¦³½¬½½³²Ê²·Æ¸»¹®¸Ê¶¯É·ª½Âº»½º¹¼»Å½¯Ã̸áÌ´áèÃÇ¥ëæôΰçÃ¥ëÓ¤éÒ æÊ\9díÕ\9dîÔ\96éÉ\98êÇ\8eå×\8aìÖ\8eփ\91òÌ\93ôÈ\93ëÑ\8fÃ¥Ã\8dîÑ\83éÆ\80óÊ\8bõÊ|é¿}ôÀ\7fó»\82ùÇ|ւ\80ð¼\85ùÂ\7fó¾wõ½råÌyÛÊ}ÚÔtÃÔ{çØríÖzáÔ\80áÖzäÕxðÓyîÚvóêmíåfåÔnÃÃ’fÖÚfàßlØÕnÛÔhÔ×bÔØiÜã^åÖbáÖZ×Ö^ÙÃYäÊ^äÈYæÓ^áÌYÙËKßÄHá¼Fí·EçºVéµWæ±Mè½Tå¶WíµXí°SÞµRè´Mä¶Të¯SìµRâµTÃÂ¥Dã£CÙ«Hå¨Lã¯FÚ°LÓ¼TÒ¼SήKÉ´LÊ©Eɧ>¸£=²©H²¢B¬\9bE®£M½«A¨9¾\91(°\8b#»\8b%·\8c-¾\93=´ <¦\999\9b\9dA\99\96D \995¡\9e=¢¥9\97«4\95©0\99\9d2\9d\99,£\9e)¢\9f1\9c\94/\9f\99$\9c\99# \8f1\9c\94$Â¥\90(ª\992§\922\9e\8c/¦\8f#²\87!º\8e#¹\95\1f©\8b"µ\82'µ\88-²\86-¯\8c+¤\8f'ª\8f%±\8c%§\88+\9e\811¦\88> \93?§\8fAÂ¥\94E¡\93>¤\9cD¦\99D§\8bC¡\8eMÂ¥\90V£\92R\9a\99P\8d\90U\86\8cX\8a\8fJ\8d\89V\89\83R\87\89P\87\80]\85zU\83zO\83sT\91rd\90il\93of\94dl\92go\8aau\92Rs\95Qx\94_w\97ar\8bYd\9cdm\9f]g\9bR`\9bQf\9eQe \l\9bQd§VY°OU®O[­\^\9faZ£eX¨`X§WS®SO­ST¯Pa¦Ba¦Bc²Ea±Hg¯Ol´Fc¾>eº;nÂ9e¸;j²6v·)sµ'o d\85\9cÆ\83\9d½\8d¦½\95¤¾\85\9aµ\81¡¼\87\99¼\83\9b°\90\96½\8c£À\83¡À\80\9eµ\8e\97¶\91\96À\9a¤Â\90¦·\95¡À¡¤¹\9e ¿¦¬Ë\95£Å\9d¨\9a®­\9c­±¬¡¶¥\9f±­\9d«¥ª°\9e§¥\9c\97³¯\94­±\9eǦ\97£»£¨¿\9d§Ê\9c¦Ã\97®Î\97¶Ë¢³»¥¶½¯¾Ã«±É§´Â¶´¾¬´Æ´®Ë¶®Ã¾·¾¼¶ÄŹĮ̀ÞˬáâçÌ\9aáÇ õÔ¬ôË éÒ§éÃ\97꾦àÑ£ðÊ\9fâÉ\9aôË\8cñÃ\95éÓ\93åÂ\8fñÃ\92ðÃ\97ãÔ\8cìÊ\88òÑ}åÌ\85ôÎ\86ùÎ\88ìÅ\7fñÂsùÄvó¹\81ÿÈtù¼\80ù¼qè»zւzéÉ}ÃÃxÓÒ\80ÜÛxÚÚsï×nâÕpìØyêÃyíÜnôåvçßjìâsáÚjâÞ`ÒÚaÃÃkÕÜ^ÖÒjÚÎgÒÕ^ÞÜ]åÓVêÚ[äÃXäÃTäËNÃ¥Ã[çËLÃÃŒUæÆSÙ¼IåÀPàÃJîºLî°Tè¿Hò¼JçÀSðÃVï¹\ä¨Vâ®Kë¨LߪVã´Lì´Fæ§Jà¡Jß²P×·Uç³GÚ¯VþXÇ´XƯKƵAƪCÄ´=º´@®­J¸¬@®¤?¯ªR³§>Ç£3³\935º\8b%ª\97)ª\8b6®\98=ª¡1¨\9a;¡\99A ¢5¤ 4\96§7\94ª5\92®2\8e¤5\8eª.\9e 0\9b£(¢£0\9f£$\9b\99#\98\923¡\91,¢\9b3\9d\95%¬\92.­\94-¯\8d(¢\93\19®\85'·\8e\1d¬\8b#³\89 Â¦\8b0§\8f/²\95(£\97!«\90'®\89)¤\8e2¤\85)Â¥\89-ª\886¢\8a<£\9b5°\9aE¤\9a@¨\99I©\96L£\94A§\8aM£\8aR¢\84D\9a\8cQ\8a\90N\87\8fK\8e\83P\90\8aT\8d\88T\88{R\8e}Z\8a\7f\\8esO\8apb\97qe\93oa\98xc\93mi\93dl\93_o\8bYz\90_y\88Rl\8fZn\8d\h\8aas\95[g\9bR`\95Xa\9bTg\9eYg¡So¬W[²X]°Id¦Z[¯`R¬aY§gP±QK«TQ³XP²RT«KU§DZ©I[©Yg³K_¸NlÀCp»Ae¸8m¿Gb»4i³)uµ%i¿!e\8b\9aÀ\85¢º\8c ¶\8a¡¹\82¦Â\86¥À\8b¦¶~\97³\82¢¹\7f\9d½\8a\93¼\84\98´\93\9cº\94¢À\8f »\9a\9f¸¢¨¾¡ªµ\99³·\98ªÀ\95­¼\94­º\92¥¯\9e©³¤\9b±¦\9c´¦¢©¡¢¥¥\97©\9f\9a¨«\9f£¯\98­½\9e«Ã¥¤Ã§®Æ\9e°À\9b±Ë\9b¬Ã£±Æ¤´¿§»Â©±Ä¶¸À±µÄº»Ã±¸Å»±Ãõν½Ìǵʼ®Ø½¦ÜÄ¡êÌ çÑ¥éÈ\9cêÅ çÆ\99ܾ\9dßÃ\9eü\9cçàäÈ\9aìÂ\8fìÅ\95ÞÄ\92ê¼\89äÂ\8dëÀ\8fãÊ\8eè¿\86ëÃ~éÀ}éÃ\83òÃ\80ûËuÿÇrÿ¼oûºvý½xö¼pëÇqñÃwçÄ}ßÄ\82ÙÊuÕÛtÚÚwßÕiåØißÒfêÛiðßoèÚgèävêàtßßläÙnØÒoÛÃ`Ã’ÃŽX×Ô_ÛÚgÖÖcÔÃ^ÚÃ`äÚ^â×TÞÛSëÙVãÎTãÃMÞÑNàÎMÛËPÛÀQÙÈTâÅNí¾Rè»Jê¿Rñ»NíÂXç¼Xè¯_ìªYí©Tæ«Oã´Nå±Sé¨Qá¤Má¬MÙ­TÚ°YõYÓ®UÓ¸ZηZɸIÄÀPöG»®A»³E¹ºM±³J¶´FȻFÀ¦@À¤;Â\9d.µ\93/ª\9b8«\947´\98:¯\9e5¡£2¡¡0 £5\9d\9f9\91Â¥4\91¤2\9c¤9\95©7\94­,\8f¤,\98¦+\9e£-\98Â¥*£\9f/\9e\9d2\9c\9a*\98\9b0Â¥\95&¦\92\1f¨\94)°\86)­\89\1d«\90$­\8e Â¯\91*¬\91*­\96#§\8b'¬\8f"\9f\93(\9c\87,Â¥\8b)\9f\8d&¨\88.¤\937¨\95?¦\9a9­\999«\91?ª\90A°\96F§\8eI¦\86E©\8fG¢\8a>\9d\83C\99\87F\94\84K\8a\86H\89\84J\88\83T\8d\87O\8dzI\8bvS\85qR\8ct_\98t_\95qg\9aqb\91qf\85ai\88bj\87dl\8car\81bq\85Vj\81^t\89Yr\93\x\97Yl\99Pe\9fTb Na¢Xk®Tq«Qh¯T_±T\³aU°_SµdR¯]O®]Z©WT¤\NÂ¥\X¯R\«U[¬ZY§X]¦S^´Gl±Fo¾<b½>dÂAeÄ;m½9w¿-rÃ.w\88\99Ã\80£¶\7f\9e·\85¤º|\9b¼\8c\94°\85¢¸t\9b¾\7f¡³z\9fµ\7f ¸\89\94¯\92¢¾\8f\99Ã\94\9e¼\92¡µ\94¤¾§\9fÀ\96\9e³\95©¿\99¢Ã\8e´¾\99´­¢­ª\97¦¤\9c ¨\99¨©\9a \9c\9b\99«\9c\9c§¥\96§«\98¥­¤¥¹¨­¸\97­É\99­Ä©¨Ñ\9d§Ç£´¿«½Ä¨µÌ³©Ç®¬Ç«¾Ä«¶¿¸»Ñ±´ÌůÌúÒƮú¨×½«ê¼¥êÅ\9bíÃ\98ðÂ\9eìÈ\92îÃ\91Û¾\95æÎ\8fçÅ\93å·\97ì»\8bìµ\84åÇ\8eãË\92éÆ\7fïÄ\80äÄ\82çË\86âÂzãÃuðÆrðÃqû¾xÿ¼vö¹{ÿ»zÿ¾tÿÀoðÆpïÉxæÀ{è¸xåÌyãÓzØØoãÓxÃÃhÞÎeáÖkÞÃvâÃoêÖqèÔuççmìÃtãÃcÞÊeáÉbØ×^×ËeáÃeÖÕ\áÃcÜÒ`ÃÃVãÓUâÃNêØYëÃWìÓSãÈVâÅUé¿VåÆUá·Jí¸MíÀVä²Gç¼Gò»Sé²RÞ°Rè¸Vê¤`ä¡Uä§KÞ¬Læ±IÛ±Hà¡FÞ­H̬XÛ«V߯QùQغVÕºTȶJÌ¿TÄ®N¸ª@µ°=º¹K«¬>²®@´£@¸\94;º\9bA¶\8f2­\936¬\95;­\9b6³\9f2¶\9e2£¤+¦ 7\99\950\98\9e0\99¢;\9f /\96¤7\90£6\9c\9a+\91¡1££.¨\9d6¡\9a%®\99+©\9f& \96$©\93"§\95+£\8c-ª\970¤\8f"¡\90'Â¥\8b#³\96\1e«\97.¯\98.¦\8f,\9f\88# \95(§\97#¡\91)¦\8b&§\8b'\9f\94+Â¥\93<¢¢@£\959ª\95@¯\99Aª\88@£\86E¦\92?®\87F£~O\9a\80@\98\7f=\99\8aN\91\7fL\97\85P\8b\8bL\90\80P\8c\84Q\84\87U\82{X\85ub\88nZ\8dpj\88wX\8ah^\95c^\88f`\87fm\91lr\93_w\87dq\81]o\92Um\92Pg\91Tj\98Oo\96Zl\9a`a\9cVmÂ¥^g\9c[g¬Ug¯_`Â¥T]§bZ²gT¨XV¢_Q£aQ°RZ§TW¦XN°^b \g©]dªVg­K`­Hf®Gkµ=p½Bd½9j¾6l¼9}¹/xÊ+m\8a\93³\7f\9aµy\9c·\7f¥¯~£ª\85\94¯\7f\92®y\97¼~\9d¬w\98ªu ±\80\99­\90\9a¹\8f\95·\8e\9aµ\93¢À\90¢»\9c\9d¼\94¥¹\93£¾\9d ´\96©·\94¦­\9d²¦¥°§\9e¬¡\9f©\9a£\9f\9e©\9dÂ¥\9d¥¨¨®°©¥«²¡´¶\9c®³¤³À\9eª¿©¦Å«³Å©´Â³¶Æ·¯Æ¶®Å²¸Ä©¼Â±À¹´Ã½¶Ó¹·ÃµªÛ¶«Ö¾ Ú´¢ßº§ëàçÃ\95åÃ\94àÀ\8cãÃ\95íÆ\8dæË\8dïÇ\83ó¸\89ñ³\87è·|à»{æÈ\85æÂzé¾wôÀyï¾\81â¾ußÄrçÇné¼pò½|ÿ½xÿ¹wÿ¾sÿÂpþ¾i÷Ãpñ¹\82ä¿\81ç¹\81àÃ\82ÜÒvÃÖuÞÛpãÓgäÓháÒvâÑrëÔmêÕmîÖmëänòáríÛgÜÉkÚÇeÛÃ]ØÃ]ÖË[ãÃ^àÕ_çËfàÉXêÉQæÇPêÃKäÖFïÎRôÉRçÉOßÉUåÀWð·QîºLó«Wí«Qê¼Uê¾JíºHæ²Lå¤UÞ¥VÞ\9e\Þ¤X×­TØ®Nã¥Xà¦PÙ¢SíR׫VóYɺOÔ¸J÷N˼V¾²S¿¯G±®@°³E«®D®­C®\9b8»\963·\8c2²\8d:­\90:¯\998¶\8d2±\919´\97:­£1¡ /\9d\9b6\98¡6£\961\9d 5¢\995 \9e5\92\9c:\9e\95:\9b\97-§£)§\9f-Â¥\9d-©\95(©\8a'¦\8f(¢\911£\89.Â¥\93-¨\8c*¦\92&¡\91'©\950°\9d)®\9d"­\98#¨\98&\9b\91*\9d\87*\9d\8c\e®\94)­\93*­\91/\9c\913\9b\94.  4\9c\9b1\9e\9e8Â¥\96>§\8a4¨\93B©\8dF©\8eD¡~M\9c\8aC\95\8aE\95}S\96~X\8b~R\8e\81J\93\84O\90\84T\8f\7fY\89\81M\7f\81_\84yf\89\7fg\8c|Z\8awb\94fX\85`V\87je\81qu\89ks\8fho\8e[o\91[f\8dWe\96Zc\93Oo\96Wd\9e^g\9e`f\96R`\9aJdªRi§^f¤a]°fgµde´[f¢RY X]ª]Z¦]V¨VQ¨[b¦^c²[a²Tl¦Qg«Jh®LxºGwÂGuÂ8kÉ6hÃ…2vÇ)xÃ*o\84\9e¹y\9bµ|¨·\88\9e±|\9e®\81\9d°\7f\9b³}\94·x\97·r\9b«{\97¬\86\96£~\95®\8d\95«\86¢¹\88¤½\9aª´¢\9c²\9b£±\92¨­\92¤­\97£­\98§¥\97°¤¡©¬\9d¢£\9b ¤\9a¡\9c\9b\9a¯\9f\9fª¦ ¤¨¦®´\9fª®\99¦« ©²\97®±\9c­À¨®Â©²É°©Ç²¬Å³«Ë¯©Ë³®Ë¸°Ä¾«Ç´­Ã¸²Ñµ¬çº±Û­¨Ø¯\9dæ¾\9bà´\9aßµ\8fà¾\94ܾ\93áÂ\8aßÈ\8fðÃ~ã¼\85åµ{òµyñ±\80ò´|ë¿tê¾qâÃxßÆtæÃwãÂjèÅjë½tá¼\7fö½sòº\83ñ¾\7fÿÄwցpÿÃeøÇzïºxè½\80çÃzì¼\80çÄrÞÃxÔÞgØÃdÞÙdå×dÃÃfêÒlàÖfâÚoïðpéÚeçàgàÒsàÅfÞÇhØÔ`ßÖeâÊhÃÑcëÉaæÃbáÃOæÃNÜÈVìÇRðÅZñÄMïËOíÇKç¾WäµSòµRä²Jí©Nê°LéÄSæ´Nå±KߪSß²Và¦Ká\9ePÛªVâ¡UÞ£^à©XѱVÙ·QîTÈ©S̯OƲIι[Ì®XùQöFÀ«Mµ:«­@¤¢8² ?±\9a0ª\942§\924¯\927®\8e5´\9b4¯\9b?´\9a;¯¡0¤¤3\99¤=\9d\9e3¤\9f4\9e\993\9a\975\9c\92=\95\96:\98\94+\97¢'¤\95.¤\980 \93!¬\8b+¢\89\1f­\90"ª\852§\81.£\8d0²\8c*¡\930¦\87#°\950´£(§¢ Â¯\96&\9e\9a$ \8b/¦\8d"\9b\87\1a\9d\94"§\97"\9c\99.¢\9f*¢\9e7\98¦0¢\9f;¤\9e=¯\8b9­\86<§\84?ª\81E¤\83A\9d\87D\9e\85M\9e\80H\9a\84M\90\84Z\95\82O\92~R\8a}K\89\85O\8e\8cO\85\8aP\85\80^\8f\83Z\8f\80a\87|P\8coK lS\98q^\86ug\82rm\7fet\89fm\8eYo\87aa\92\l\8cRj\92[r\96Qo\97eq\95\o\95Qj£Rc¡SiªZk¦\g§ae§as X`¡QR\9a^T¡[\¡Xb§L[\9e]`¬Tb²Qo¨HiªPl²Rl¾RiÃG}¿Mwº;zÇ;wÃ…?\82ÃŒ)tÃ…!p\83\9bÀ\81\9aº\85\9b¿\83¤µ\7f\99®s\9bªn\93³s\96±}\8eº}\95²\7f\9a¶\82\94¨\8a\96¬\85\9c«\86£¬\88©º\98©«\97\9dª\95\95§\9a\9c¬¡\9c¬\97§®\9c©´\9aªª¨§¯¤¦ª\9a££\9b\98¢\9d\97¬¥¡²­¢¶¯¡¯¯\9d¯­\9d£¬\96¤§\9bª³\9b\9e²\9d\9eµ­ Å¯¥Ì²¬Ä¹¦À¸¤Ç°±Ò¹ªÑ´¨Ñ¶¬Ñ³§Ø±¨á±¦Ù«¤áµ\9dܸ\9bÚ°\95Ö¬\8dâ¶\8bßÃ\87äÀ\8bâÌ\81êÆ}ðÅtåµzî¶~õ¶yï¾ué½jéÇhåÂnè»oÙ¾cÃÄkâËmàËwéÅ~ï»|ð´}ì¾\86ö½~ùÂvùÄoíº{î¾zðÃwíÀ~éÉzéÃ\7fßÒ|×ØoØÓpÚÓdèÖ`Ã¥ÃgâÃaßÞaçÞeèêeòÜcêÖjæËjèÃsêÉuãÓsâÃoåÑbèÕ]ã×_àÃSæÉWã»`Þ»Zá¼PêÂVíÈOåÂYâÅJì¹Jñ»Xä¶Uë¬Uâ®Oà¯Hß»KöEøJÛ¶Ié­Ið\9eYê\9eXñ `ì\9fZÛ¡dÚ«\ô[Ñ°[Ñ¥KΧL΢S¢W£TʱUùUÅ´L»«K¯©>²­3¥¢4¦\9a6§\942¤\912¬\95=°\8bH¨\8eB¦\93Eª¡@§\9f7¬¡9¥§< ¦<¦¨;\9d\9d8\96\954\96\945¡\96.¢\93-¢\940\9f\9d-\9c\9d(¦\94%¡\88\1e\9f\87&ª\8e+¬\89(®\86$¨\86,²\8c#«\87'°\87"¨\8a-­\92.§\9b(±\9e$­\99\1f¦\91\1f¢\8c#§\8f)ª\89&­\92%£\9b$¦\9e(\9b "\96\98-\99\9f4\9a\8e-©\8c2²\8b0¬\8d6Â¥\919£\85<\9e\88G¤\7f@\9d\829\99\80C£wO\9bzV\97zV\97\81Y\91\87N\87\83O\86\81P\8f\87L\95\81S\91\82Y\91}Y\8dlK\90pJ\9dhR\8fjW\8apa\87h^\86ne\90ln\8fYi\8f\i\86Vg\8fXg\8a\s\90Wy\9fZs\9e[s ]s¡Xg\95\l\94Uf¤Yk¯Ul¨Xo Yn\9c^\¤TT Z[§W]¢RaÂ¥Ve¤Vd«Vi¯Ij¯RmµNj¹Kh¼Ot¾Ky´D\81ºHzÆ>}ÃŒ/\82Ó$u\89\9dµ|\98¶\81\99»\80¬¸v\9c³r¤¶w\9a´j\92ªt\9dµx\95«z\97¯\7f\8b­|\90 \84\97¡}\99¬\8c§»\8a\9e­\97§°\91¤ª\94¥¥\8a©ª\98 ¦\92««\93­­\98¨¦\99\9d¨¥\96ª\96\98\9f\9a\9d¥¡¦¨ \96®«§®£\9c°¦\9e¢¦\98®¨\95 ¬¢¥¶\9f¡´£¤¼¦®Ä¨¥¸¶«½´¦Ç­¨Ñ±§Ã´ Ô²¡Ù²¦Ã³\98Ò­\9fá®\97è¹\9eá³\96â¯\90ä°\92é³\81é»\84Þ¶\80åÈ\80ìÅ|ð¾~í¶wö±sòÃkñ·nå³rèÂvèÌgç¾eÖÃiáºaâÆqïÃfìÃuçµpåµ\82ò½zñÊkù½kð·n÷½mñÈvïÃwæÂ{ñÂpðÑsåÒkÞßnáØjâÑcéÕoïÒdãÕgÛÖfÚçdáðnêájàÙhæÃvíÃwêÌsåÒsñÃläÛcäÔg×Ó]åÔ_àÒLáÆRäµYãÃXñ¿LâÅLåºMà¼Zð¶Oêµ]â·T×»RÙ¬QÙ·PÔ»EáµUׯJà­Qà·Fá®OÞ¡Yã©]ß\9bSå¦_äPܨZîLѪTÃŽÂ¥MÓ\9cEÇ\9ePÒ«VÑ®RÌ¡VÃÂ¥G¼®9´°3­ ?­\9b:ª¡<­\90<Â¥\9b4¡\92>\9e\91F±\91C¡\8a?¤\91=³\9e7±£D²ª@ª\9bA¨§7\9d\987\9c¡,\98\974\9d\9c,¯\97.\9a\91+¢\97"¦ ) \93$\9b\89\1d\9c\87$«\87/§\8b.¯\91*¦\8f'¦\8c\1fµ\8b&­\8d Â¨\8e#­\8e*\9f\9a(\9d\910¦\99$\9b\91*\9b\97%\9d\8b)®\8a3¦\98-§\9f/\9a\95#\91\93 \90\9a0\9f\944¤\8e6£\9a1Â¥\8d/¨\9b,¯\92> }Cª\84G§yE¦|<\9cwD\91vF\9c}P\92vW\8e\8bL\84}M\8d\85Q\8a\86I\95\8aW\90\86O\8b\84Z\96\80^\8bsP\8cpP\9ecS\95hW\97v\\91sc\8egj\91mb\95[l\8e[j\7f]p\85[x\91Vr\93Yy\9fUp\9e[v¡Ms\95\u\8b^m\96Wc\99To\9d\tÂ¥Nh¡[o¨^]§Xa\9fQeÂ¥P\ªLl\9cJ`¡JX®Nm«Di´Rd·Gs®RtÃJr²MqµAy½F\80À;{Ê8\82Ã$|\83\93¼}\9c·\84¦À\86­¸\82¬´x¦´uª¯k\9e«i¢­o¢®j\99 t\92¡~¢ }¡¢\86\9f«~\9cµ\80«­\93«©\93¬¤\86¬«\85°¦\94¨§\8d«¥\96« \93ª \9dÂ¥\9f\96¡\98\94\93\9c\99\9c\9b\9c\99\9a¦¡®¢\9b²« ¯¢\97¨ª\96«©\92§¬\94§¯\9d£©\99«´£§±¤ ½´¨½¬¤Ç¨©Ç² Ã¬\9bĪ Ã­ Ëµ\9eÑ·\93Ú¯\97å³\9dï­\93ê¯\86ç°}ß©\80ظ\84ܵ\86îÄ\83ïÃ\80ñ·yù²|û´nöºiò°jæ²uõ·móÇpë¸hä¹eéÆpéÂiè¿hè¶fëµiå­zéµlñÆhó¼n÷¹fï¼pôÂiöËlîÆtëÈpêÒnÃÕrÖÕsÛØjÞÔiâÕpçÃeéËjàÔpâÙiÛèsÜçtßÚnäßuãØoäÞlìÚbëÔ`îÖ[êÖaÜÄcãÆTëÊMò¾Hè½KáºNæÀMêºTâÃKÛ¿Räº\ñXÞ±Y߯TØ·`à·WתMÛ©QÞ§Qß©GÜ°NÛ°Uã«SצUÜ¡\Ö¡[Õ\9bUß\96Wà\9cMÚ¤JÙ\9bJË\99Q΢FÃ\99SÓ\9aWÓ\9eEÈ\9aBè7º¥3³©,®\9d4¥¤5¨\995¡\9b=\9d\8e<£\84;ª\8b@­\87<§\8f9®\975¯©>¯¬B±\9e>®\9e7®\9f/®£:¨\9d3£\942¯\954§\99%\99\99"\9f\95\1e\9d\99$¤\94'\9a\91(ª\92%¬\91.²\8b#®\8f&¨\89'³\8a Â¯\8e(¤\8b!\9d\8d+\9e\981\9b\925Â¥\8a+¡\96"\95\98*\9d\96*£\911Â¥\98*\9f\96- \92-\96\94-\9f\9b.\98\97'  $Â¥\99-²\946°\981¬\8c3¦\838¡\88=Â¥\7fD\9a\82G\94xM\9cuN\9dyS\96wI\88\84J\8e\83K\8e\85U\84\8aZ\8b\81W\8ezQ\91\81W\8cw`\8euZ\8cn_\92gW\8amT\93j\\91rb\8cme\8bcd\91gn\94[r\88Zr\84\r\8dNu\90Xt\9e[|\94S\82\9bMz\9bIj\8ePk\8bUq\95_l¢Xg To¨_k£]a§[e¨J^¡AeÂ¥Fm¡H\¨O[¨Oc¤Pp­Wf©Ok´Li¼Mt¿No¼>zµ9~¿<\80Ã0tÇ!u\7f\96¼\88\95·\7f\9b·\82­¶\80¥ªw\9e°n£¢p¢ªh¤\9en¥£u\9c\9an\9a¢\83\98\9d\82\9d\9d\81¤°\80\9a±\82£ \8f­¨\86°©\83¨¨\8c¥ª\99« \95\9e\9d\8e¤\97¨\97\9f\99£¡\93\97\9c\8c¦\93\90¤\9e\9bÂ¥\9d\93¢«¡¥¬\9d¦¢\91¯¨\96¬¤\9a¤´¡¯´\9e¤³\98ª¹§¦¹±\9c·®¥·ª\9cõ\9fÀ¨¡Ê¨\96Ó²¡Óµ\96Ó«\9fܸ\98Úµ\95è¯\99äµ\94è§\81ä³\8dà§|Þ¨{ä°\82ä¸\82öÃ\86îµ~ö·rþºoú´nù½oò·kë¹gùºgô¾qð­gôÀmìÄfë½cé´oè²oé¶tôºjëÃgõ¹níÄo÷ÈhúÌiøÃcéÅkçÔtæØmëÕqàÌmßÔißÕfãÓkáÜqÛÒoÃÔg×ànÃëpÚ×j×àpßÓpá×hçÔeìÃ]àÃcîÒbÃÃŽVßÃ]ÜÉ]ãÃJá»Tî·Ræ¾QÃÄGßÇSÙ¿TÕ¹Tè¿YÙ»bÓ¼[Ó·aÒ¸_ض^Ó²SÓ²QÖ§YÚ«VرFÞ¡Pä¦[Û\99[æ\9bVà¤ZÒ¡YÚ£QØ\9aRÙ\9dNÛ\9aWÕ\91\9b\9aWØ\98WÓ\97HÃ…\97\9f4À\9d3º\9c;¶\986ª\983®\8a@\9f\939¢\90G£\8b6§\979¬\8aE®\89G¤£<ª\9e>¦ 5¨\9f9¤¦)²\9e/¦¡)Ǭ/·\9b4³\98/\9f\95*¢\9f\1eÂ¥\93#\9d\8b"\9b\95,\95\98.¡\8b2Â¥\93.¢\902«\87+¤\8d"©\88#¬\8e%£\87-\9d\93%Â¥\95*¡\900\96\8e/\9c\931\90\931\99\9a&\96\9e(\97\936\9f\8f*\94\8f)\96\9a'\9a\9a5 \981¢\9a* \9a%\9f\9a8£\98=«\94<©\8b9¨\898Â¥\7f:\99\7f<\95\82E\93|S\90\7fJ\8b~R\91{Y\97\83Z\91\85c\96wV\8e{e\8b\89U\92}Q\90z\\8bq[\8eyT\92sT\8fwO\92mV\9bf]\90k`\91j]\96ql\88ia\84\t\85Sw\89Wx\92K\7f\90]\7f\95Os\9aUy\99Uu\97Is\9eYv\97W{¡Uz¤Pi¢\i¦P`\9eRl§Da¡Ae¡En§Hc¬K[«La®Lp§Nt©Jg±DmÂF{Ã…Br»=yÇ3~Ä6|Ã1zÃ.|\82\9a°\83\91²\84\93ºv£¸y«¯~¢¥r¡¥u\9c£n¢¢m\97\97q\96¢v\9a\9dx¢\9c\83¥©\86£«\85£¤\81§¡\82\9e\9d\81¢\99\85­\9e\8f¢¡\95\9d§\93\9b£\96¡¤\9d¢\99\9c\95\9c\92\92\9f\95\90\9e\97\89ª\92\8cÂ¥\98\89«¤\97¥ \98\9fª\8e¦¬\8b¡­\95ª¤\9d±ª\9c¨¬ ¥®§\99¶¢\95®¤\94º®\9c¾´\94Ë­\8eÒ¯\94Óµ\93×·\9cà¼\94Ü°\8fæ³\8bäº\8bñ»\82íª\8aã¦\8bãª\86Ú¢}éwã±\7fë»zðµyùÀrø¹lô´jó½eó¾ló¶eôºjú®nô±oø¯gí¼jï½iíÂkç¶tì¸kî®iì²uñ¿wîÀlîÃcðÑdóÚkõÑfñÎkóÔtéÔmêÎpàÎtßÃpÙÛqÛÜnÓÖfÕÖm×ÞoßÞnåÖaÃœÃdÚØ_ßÚaÚØaàØaàÑ\åÈXéÈRãÃSÃœÃOãÃUêÀ[èÂRè¾SÞÃQàÃUÓ¸Vþ^ÜÄ]Ü»ZÙµUâ°`Ü·aâ¬[Û±Tã«^Ú¤Wß\9fPߣOâ©Tã¤Rç\96NÃ¥\97Yå [Ø\9fQÚ\9b^á ZÕ£VØ\9cSÛ\9aNÚ\8c\93\91NÈ\8cBÃ…\8aDÇ\90C¸\94:Â\964º\893´\87;©\8b>§\97G«\95@¯\98=¦\9b?« B°\94E¨¡E©\9dA§ 7¤¨-¬ 3Ǥ,µ«1¶©-¯¥)­\9e(¦\9d Â©\99'Â¥\97&\9a\8d \96\88,¡\90'\98\94,\9c\97*Â¥\952 \890\9d\84)¨\8d*­\80$«\83,\9d\89/\9c\84&\9e\89/\95\94.\9d\8f-\9b\92.\91\9f&\98\9b)\9c\9f(£\970\97\94,\99\8e2\9e\8c7¡\92+¦\861§\89+£\90. \907\9b\89*¢\87. \83;\9d\889¡{D¡{@\93\85A\94\83N\9a\80U\8e|Y\8d\84[\96{`\8etg\8e~a\98\88f\98\82[\94\7f]\95v[\97pW\95uW t\\9cuR\95pX\97nW\97hZ\8bkZ\86[h\8eZm\89X~\87T}\94M~\91S|\8fG}\8bLv\93Is\97S{\9cT\80\9dO}\9eWr\9aTn\9bWh\9eHm¨Hs£Gm©Ge¤;iÂ¥>f\9eDg§@k¨:k´>l°Ct´@q¼Gy¼DzÀ<uÈ@wË5uÓ*~Ã/\89{\87²{\8c³v\97»\81\9e¸r\9f«~\9e¤~\9d¤u\94\9fv\8d\9be\8a£p¡\94p¦\9cy¤\9c\89«¡\8aª\9e\84\9a\99\81\9f¤|\9d\96|¨\9d\88 \9f\8c¦\99\8c£«\98ª\9c\97©¢\8c ¢\95\95\95\93\97\97\9c\92¢\9b\94\9d\93\9b \9c¡¥¨¥£¯\98¨«\96¯°\8d«µ\94Ǥ\91««\94\9e±¢§®ª¡µ­\9a¨¥\91±¦\96Ŷ\94é\91Ω\91ò\9a榢ì\9cÖ¯\8bÙ±\91ß»\85æµ\82ê®\8aæ\88è´\84Ú¬\83æ´vòµtõÀ{ø¸tô¹bñ»jþ¾hð¿põÃiù¸aöÂbôÃcí¼hë¼dç²kò¼oöÃdò´mñ½rð³líÀkíÃfâÄlòÊ^éÂZóÕaïÔfòÚgùÕgòËiîÃtäÔuáÒyÒànÛÖk×ÑlÚÑnØØqÖßrßßpß×bØÕjÓÑYàØWãÔbéÃVáÂVàÈYîËRèÂXà½SâÂOçÈXßÇIýJÙ»PدUÔ·X×Ãdѽ]äµOÙ²Zß½aìcâ¶VߦMÛ£YÃ¥\9aJàTè Và\99IÛ\9eGÞ\90OÃ¥\95TÓ\9fLäYé WÔ\9cHÔ\96WØ\97PÞ\85LÃŽ\8fRÈ\90QÃ’\8cBÈ\8c=µ\90:´\916°\8f9À\8b>«\886¯\83B¤\8c4´\99B±\9aA¢¥>°¥=£\9eLª\92C\9e\94F\9f\996\9b\97.£\9e*­\99'­¥(©¥"«\95$©¡%¤\93"©\94(©\96-\95\8c\1e\96\850\9e\91+\9c\93 \99\8b)¡\8d(\9f\8f/¬\95+¦\8e,¢\96)¯\8d\1e\9f\92/\99\88%¢\90#\96\9b$\9c\912\9a\9e(\9c\8e4\8f\9a4\9f\97)ª\96)¦\92)\99\89, \8d(\9e\95(\99\97)ª\95.\9e\98/\9c\8f:\92\867\9e\811\9d\821\96\85:\98{B\9ex>\8a|I\87\8bR\96~X\8bt[\99\82R yV\8d\84b\8e}b\95tQ\9a\7fT\98oW\8eka\90k]\95r\\9dp[¡sc\92iV\98sR\90fV\87b^\95hp\97fx\8cSm\81Ls\95W}\91Yz\8aV{\85U\80\8cMr\92Ku\8fM\82\95K\7f\99I{ Rx£Xj\95Tp\94Nu\94Rj\96Lf\9fCl§Gf¤Qu\9dNq¦Cy¦Ir®A\80¦M\83·C\7fºG{¹6\7f¼AuÆ8\8aÉ4\80Ñ6\8am\89«w\8d¯x\88¬}\94µq\8b³r\90ª\82\96ª\80\95«t\92©m\8d§x\97\9ay£\94} \99\84©\99\83¡ \87¡\9d\8b¢¤\82§\9a\83£\98\88\9c\9b\90£¥\87  \86ª\96\8f¨\9d\8c£\9e\92\9f\9e\8b \9c\94\92\96\9e\95\9e\9b\9b\9e¡£ª¦¢«¬¤¥§\96ª¤\8f¡±\95\9e¬\9d¥³\9a\9a³\9b\9c¸¤ ¬¤\9b±ª\91±¥\98è\8f¿­\90À³\98¿´ Î©¡Ì±\9aÛ´\93Ö·\91Ôª\86Ú±~Ù¨\85Þ³\8cî\82â¬~ì¶ró¾nô½uòÃjæ½bë¹Zù¹]ÿ»e֦jú½k÷½còÅgë½dàµb߶oá½sî¼eñµoó¹wïÂrâÀoÜÄqßÉcèÃ]ò¿_æÄgãÃ^ìÊhñÓdôÑgïÇtëÂ}ÛÎwÚÑ{ÑÙq×ÃgÜÛgØÚdÙárÔápÃÃœhÚÎfÖÎXÖÆ_çÂ\êÀXßÅJß¿KìÆOîÈUíÇVë¹VؼNÕÆKÃÇIÓÆLóZÔ¶aÌ´`Þ¼Sà²RÒ­R÷`Ô±bç²Tá¤PãVß\9aLæ\9ePä\99Oà\94Mà\92IÙ\99GÛ\9cGçV× NߨEΪSÃŽ\9cOÕ\97\8cAÃ’\91\8dCÓ\98@Ã…\93F¶\8eJ´\92?¼\91G»\8cH²\91C±\8b5®\8b5«\978¯\96>ª F\9f£<\9fÂ¥A¦\9fF\9f\939©\8d-¢\95,Â¥\9b(¨\9c,Â¥\9a#­\91&³\93!¯ )­¥*©\99,Â¥\8a0\9d\80+£\7f5£\8e/\9e\8e)¢\90$Â¥\8d%\9e\97"¨\8e#©\96+¦\90(ª\91 Â¥\8e,\96\935¡\91.£\97'\9c\9d(\9d\9c)\97\94-\91\8d. \994§\9b*\99\8e$\99\92 \99\8f!\96\92,\95\9c2 \9a1\97\930\98\94:\95\8e:\8e\84?\93\8a7\99\849\91{D\8b}B\87yH\86\82U\93xQ\91z[\8fyW\9ayX\92z\\95{R\8d}^\8dxX\8cr`\90kX\9apZ¢qe£f_\9akf\9cu`\91rZ\97kd\8fjh\95ip\92cy\8dUv\88Rq\94Yv\95Tz\8cL{\89Oz\88R\7f\8aNw\89Pp\90Qw\9eL\80\9fNy\99Ip\97Uv\94Op\93Ug\97Dg\9dDb¦Jh¡Ou£J{\9aHy\9eF\7fÂ¥L\7f¡J\87«M\84·K\82½9zÉ9\86Ã>\8dÇ=\84Ã’<\83n|²|\8c¶x\88ª\81\9d´x\98²r\96¬\82\8a§w\92¬u\93£o\88¦p\9d\95p¢\94z¢\97}©¡{¤\9b\88©¤\7f§\97\87Â¥\9a\85\97\92\8e\9c\96\8b\92\9e\92¢£\88¡\96\93«¥\8e¢\95\92\9d\9e\9b\96¢\94\96\9d\92\9e£¡\93\9b\99¥©£¬ \9c§­£\9d§¥\9a\9e«£¡®\9d¨­ ©¬\9f¤³±¦±¦\9a´¸\99¹¶\8a±\93ê\8aµ±\92À±¢Ñ \9bƤ\94Ì¥\99Ú³\85Ö¦\88â\8bÙ°\8cà¤~ܳ\80û~óÃzî½gø¿rö¶bæ½bôº^óÀZìÂ]ú½iô»kñ¸aï³föÄmà¼fÚ¿iéÃgé·oñÃrò°vé³oãÄiêÃeàÎbëÆgîÀhãÀlàÎZßÓhß×véÔmæËußÃxÚÊjØÕtÙÙv×ÓkÜÖoØåkÃ’Ã¥wÓÒsÃÛoÖÃjÓÑdÙËWÜÆXèÇUÞÃMæ»GéÀKã¼[èÄ`ãÇYÖ·SÒ½LËÂFÆÄNȶ^ɶ`Ô«a×»WÓ®ZÔ©QÙªbã°Zè\9fQâ\9c^á¦Sé¦TÛ\95[Ã¥\96Pæ\8fIß\98BÚ\9eNè¤Nè®PÃ¥\9bLÓ\9c>Ô\96@ÃŒ\98NÔ\96@Ú\94;Ô\8eIÃŒ\93C¾\8a\8aK¿\8e>»\89\84?µ\93Eº\8fF©\8f>«\85@¡\8aA¥¡B\9f >£ 7\95\9a0\96\974\9b\92-\9c\9f/¬\9a4°¢0°\963º\94+¶\971¹\93-®\984¬\9c.µ\8d$¢\8d/ª},\9c\832\9f\89-¡\8d5°\8c1©\8f,Â¥\9b-¦\9b&´\92$¯\94%®\9e\19\9f\920£\9f:\93\934\9c\8e6\9c\9d6\94\94.\9c\95&\93\9c-\98\98(¬\90'\97\91"\94\90'\90\95'\96\9d&\9b\900\9f\9c*\8d\9b1\95\95>\95\88:\8ax.\9a\85=\93\7f=\9a\8dC\87\83D\88\8bH\90\81Q\94\85U\92\82S\8fyT\90vQ\96yT\98yT\8buY\8by[\95kT\98mZ\98ma\9eu_\95o`\9arW\8akg\93n]\8dhf\82hj\8a`w\8eex\90Wt\83Py\8fX~\92\q\87U\81\82Vr\84Xz\94Hx\96S{\90L\83\8cNx\9dKm\92Mx\93Vh\9aTq\8f[e\9bUc\98Ue\9fKg\9dKo\9fU\82\97H\81\9cS\82¢E\8e¬J\85´D\8b·E\7fµ<\7fÃ…9\8cÃ<\8dÃŒ=\86Ã8~{\84¯z\82®q\91°y\97¯x\8f·\83\95²\86\8d²|\85Â¥u\85¦s\8d\98z\9b¢w\9e\9cz\95\98}\98\97}\97\9e\7f¤§\80«¤\80¢\99\89\9f£\8e\93\9c\87\92\93\8c\9c\98\8a\9b\95\92ª\9b\9fª\9a ¤\92\9f§\91\9e\9a\9e\93\97¢\97\96¨\93\9d¥ ¤¦\9f¢\99¢¡\9c\9f¡ª£¥§\9e«¯¦³¨¢®©®­ ¥®\96§¹\93®¼\89µ±\89½¹\96¸²\94»©\94Ƥ\9fâ\99Ê\9f\8dÇ©\93ѯ\8fÛ­\94Þ§\87å¥\8fß´\89è´\83î¼që´ní±gî¹aô½\øÆXñÃYúÃXñ¸aõ±iù²gú¼kó¾læ²qå·tã½xä¿xë»m÷·sý¿yó·näµhàÂjÔ¾vÙ¼rûjàÆgàÃuÙÃzØÔvàËzÞÎkÑÆmÔÃmÖÊt×ËrÊÛoÒÕuÃ’ÃœtÙÎuÙÃjØÉcÃÇbÑÊfß¿XÃÉKéÄJïÃNå»Rê¶Zç½\ì¹Nâ½MßÃLÃÃRùRòY×·XòXȱWôZÚ¯]تTקTÃ¥\99Uà\99Pè\9d\é\9f_á\9dZäVä\99Hî\96@é\9aGߧAã£LÜ¡HÑ\97CÃŒ\97GÑ @Ó\9dFÃ’\8cCÃ\86\8d\95FÀ\8b?Ã…\88AÂ\8bKº\8cG´\8b@±\90@Â¥\88<ª\8bJ¦\8dI­\9cN¥£E\99\9a>\99\990\97\930\9f\9a-§\9c1§\9a7¯\9c8º\9b>µ¤A¼\9d:º\91;³\90.¶\93*°\87"®\89,§\83+°\7f3§\833®\915°\90/§\99&­\99+©\9e%¯\9b\18©\9d\18¢\9f!¥¤2¡\9e1\96¡7\8f\925\92\9b8\90\976\88\98,\8f\9a'\93\97. \90+\9f\912\9a\94+\8d\91&\91\9e%\92\984\97\991\93\8f6\89\852\86\844\92z*\94\851\9b\846\9e\90:\93\8cA\8c\8fP\8a\82S\8a\84O\8f{M\92zZ\8cqY\8drN\95wR\8cqS\8dmZ\9cnU\9boY¡j]\9bmc\98jZ\91sY\8cia\8cpa\87qc\85hs\8d_x\89cy\86Zz\8cV\81\8e]}\95Tu\95Vz\8bVx\8eR~\91S\83\97[y\8dU\7f\96Sw\92Rp\9c]r\9b\h\9fbk\98Xj\9dWg\97\t\99Yt£PtÂ¥O|\9fW\86©P\89£O\8b«M\90ºG\8f¶F\8d¾I\8d´L\91»A\88·;\8fÀ<\8av\89«~~³|\8a®x\86¦\80\97²{\91¨\80\85³\80\8a¨v\8d\9ds\8e ~\90¤{\97\9bx¢\98\7f¤\9d\85\9c¢\81\9b¨\86¦¥\83¤¡\85\9b\92\93\9d\9d\8e\95\8e\88£\8f\8c¨\94\97¬\94\94\9a\96\9e¢\8f\9d\9a\92\9d\97\9d\97¡\9f\92£ \9e£¢\9e¯®¢\9d\9d¡\9b\9e¢¨\9eÂ¥\9f§²°¢¦ª£µ©£® \9d¨¨\98£³\8cµ¦\93¸­\86´«\93º¬\92¾¥\9cÄ\9b\9aé\90Â¥\95Òµ\92í\91Ôµ\84å±\89ç­\8dð\8cæ²yî½tã½uá­qí¾]ð±jé¾Zô½[ê¿_ë¹gö¸bó¨]æ³dç¼dî²të¾kçµtîÃqó¯oç´dó¾uô¿läÊiÛÄdåÀeÕ»nÞÌqÚËsâÆnÙÃs×Ó~àÖnØ×jÃÊt×ÌhÎÓoÑÖrÓØrÌÞlÓÜmÌØfÖËcÑÉjȼaØÆVÞ¾TÃÃIèºJâ¹UìµSÞ¸^ß³[â¯NØ·ZθNËÄIÌ·UѼP̲Y×®^Ú»]Ò¬PÕ­[îWÖ£XÛ\97Rê\9fRô\9fIè\9fOâ¥Uê\9bNÚ\8dLè\94CÛ\92HØ£HÕ\9aIäNÒ£?Ù\9dIË¢<Õ\93CÉ\8c\85H½\83F½\84=¾\89\90\89L¹\8c>¾\8f>¯\84:³\915 \8d>ª\8eB©\9b@\9e\9c9©\91D\9c\8d@­ ;¢\930ª =¯\99?µ\93;¼\98@¹\97@¹\999·\9c,«\8b)²\90.·\89*¨\85.³\8d,²\84-·\87:³\8a(±\89!®\990©\9e.ª\90%¨\8e Â¥\9e\e\99 !\96\94 \9d¡5\9c\97;\8f\8e=\90\9a3\94\933\91\947\96Â¥'\9d\8d,\9b\97$\9b\8c\1f\96\8b\1f\9b\9d'\94Â¥\18\96\9c-\97\95+\91\870\8e\81,\95~+\86x-\8f\88+\94\8a8\8axA\8e~@\92uP\8e\84Q\8e\81M\83zL\8cxY\97x[\91mX\92zc\91yZ\95wb\91t[\96dc\92r^\9fhe\99la\9bmh\98lY\8bkc\88ll\86`l\92fo\91ps\94bu\91Z\88\97_s\8bPu\87bo\8a_m\8cX}\98\\86\8dPy\8eX\80\91Y|\8dWs\97bj fc\9b_o\9dbu\98Xt¢Yp\9e^|\9cTt\97]z\9fT\85¢U\88¯O\88¶L\8b«J\92ºI\94»O\97·A\85°I\82µE\7fÃŒB\8er\87§v\84«v\80¤w\86¬x\83±w\88®t|±y~²{\82®~\95Â¥\81\98«|\91¦z \9f\81\9e\9b\88\96­\7f\97­\8a\9c£\84\99§\81\96\9b\88\9c\8d\91 \97\8dÂ¥\8f\89¯\98\8b§\97\98\99\92\9a\96\99\9c\99\92©\9d\93¢\9e¢\9e\9f©¥¨££¨¥¥¢ª\9f\9b¢¦¡¡®\9d\9e¦£\94®®\9a´ \98¯ \94µ\9f\88®¡\8dµ¨\8d¸£\92¾¤\9aã\92Ã\9d\99É\99\96Â\9a\93¼ª\94Ê®\8aÓ¼\83Ü·\84Þ©\8aÞ¦\87ç±\80ä©vá±oÚ½fä·lç¯hâ¯gëµeë¾QíÆZðÂbì³fè¬cí¶cçºeßÀmæ´në¶hì¸lð¶hã°féºuíÅ{ìÅ{äÇnÃÇmßÈjÕÃrÜÄxÕËtØÄwÃÉwãÚrÃáiÖ×oÔÖcÒ×hÃÖbÊÔhÃÃg×ÙqØÎcÈÔeÉÈ\Ò¹[ξVÔ¾WÃÀOí¿Hä¿Hã½Xç±Xâ³XÕ¸SÔ¯WóKÃŒÃNÕÈCÑÀI×»YÔ¸\Óº_à¬WÚ®RÕ­Nß©NÚ¡Pá¦Hî\9eGÃ¥\97JÃ¥\9eNä\9fDá\8eHÙ\8aGÛ\96QØ\9c\9dBË\95KÕ\9eJÜ£CÑ IÕ\93FÈ\8e\8e>Ç\86@½\8b@·\95CÀ\95@Æ\83JÊ\83M¿\8dA¾\8b3¯\8d6­\87<\9d\8e<\9b\88>¤\91>­\92F¬\92C·\913°\992§\95:­\95G¦\8eL­\98@·\96@½ 3°\927´\8a.«\83,­\89;ª\8a-±\8e)´\8a-¹\802º\7f0¾\8d#²\8c+©\95)¢\90+©\92"¢\8b\1d\9b\90 \9c\99#\96\920\9b\98=\96\928\8f\9c1\96\9f9\91Â¥4\98\9e&\98\93(\9b\8d\18\99\8f\1c\93\93!\98\9f%\8e\9c\19\88\9a\1e\8b\91'\8e\8d&\8cy0\91~;\8b\857\97\862\93\7f4\92|7\8at>\83p<\82tK~\80P\88\80O\89\82T\9avd\97zf\97sc\9d{[\92yY\91u\\8fih\9agh£ma\9bqc\9ehf\98ad\98i^\8ahe\8dej\88s{\8ep}\8aqz\97g\7f\8bf{\8f[t\93_{\89aq\96^\80\99X}\89\x\86O{\88Sz\86Yp\8daf\98_l\8fbr\97`u\9aTl¨VnªWx\9cW\80\96Y{\9fX\85§X\83°Y\90¨L\85©N\8a¯C\97±H\97°O\95³E\81¾>\86ÊB\86p|¯j{²s\85²pz³oz½z\83Àr|º||°\85\87±\87\96³z\93¨}\8c¨x\8f\9f|\95\98\82\96\9f\82\9c\9f\7f\91\9d\87\92¨\80\9c\9b\8b\92\98\92\9e\90\92\9d\94\8c\96\95\95\9d\9c\98¢\96Â¥\95\95£\93\8fª£\9b\9e  ©\97\9fÂ¥\95®§§¬¤\97¡¬\9d\9c­¤£¨\9d§³¥\97´¢\97Ȭ\97« \97º \8aµ£\87¹ª\95¹¨\8b²®\94¯¤\90º¨\95¼\97\93¼ \91¸«\9a˵\8cǶ\7fÖ¶\81Ó²~à¸yê­xä¶nà¾gã»så¯nëlåªdä¸Té¼XêºUò´_å¹Sâ¬\íºWâ»YèÂdâ¾rå¯hð°jâºké¼mç¹mæ»mê¼pçÃxßÃ\7fåÊpåÉ{ÚËrÞÎrÙ×uâÖráÙuÖÜnÖÃ}Ã’ÃxÃÃœdÒÔcÊÃrÒÕiÊàeÖØnÔÕqÃÆ]ÑÄXÒ»TÚÃPãÀ[ïÄJÚ½KèµTä¬Lç¬Ná±UÕ³VײQѹSÔ¶UÃÃJÙ±MÔ±NÑ«[× L×°TÙ¢FÖ®RÞªSæ\98Hç\9cEê\9e\91MÕ\9aWÛ\93VÖ\9fWÓ\99GÙ\90QÉ\90>Ê\9eLÖ£OÙ¥LÃœ\9aAË\95JÇ\8d\8aBÆ\8eGÀ\87NÆ\8f@È\8bEÀ\81@Æ\84I¾\8d@½\87:¶\939¦\909\9f\961¨\911£\8f2©\948¯\8c>´\99E¼\9c=®\8e<¶\8eB°\95B¸¡Bº\966¶¥1¾\92/°\98;«\8e<¹\94<¯\8f6¸\915½\91$¾\851°\81)µ\8b$¸\94 Âª\93\1d±\8d#¤\9b\e\9c\96"\98\97- \8c"\9a\8f(\93\958\93\929\8f\90;\9c¢:\8d\97.\93\9f0\8b\99\1e\8b\96\e\96\95\12\89\9a\17\8b\9e\19\7f\9d\e\88\99!\8d\8e#\82\83$\86\80/\92z8\8axA\92\82=\8ft6\86\81:\92u:\8ds@\8duJ\8buL\90xK\96yZ\98{f\9c}\ nc\9dra\92wg\9ejj\99poÂ¥al¤cX¤ng\9dbd¦md\94j[\98^i\9agb\96nz\8fpy\8en\83\97q|\8agr\8d^n\95i\7f\8em{\98a}\8fc{\8dPz\8a\z\94Yy\8cVu\89Xq\92X|\95^l\9eax [w\9bV{\9dN{¡N\82¨Z\8aÂ¥K\88©S\81²\\91³O\8bÂ¥B\8f®P\8c¸N\94µ>\8d±G\81¼I\8d¾9\90h\83°jy¿s{Ãr}½wyÉ}yÃ}\88Â}\86·~\8e±\82\8d¯x\8a·v\8a´w\8b¨\86\96Â¥\8d\96©\86\92¡\84\91¢}\9b\98\84\98\8d\84\97\93\91\96\93\92\91\95\98\9c\91\98\9b\99\99¤\96§ \90¡ \93£\9d\99\9f\91¡£\93¡³\92¥²\9a¨¶§¤·¢£®£ª±\9a©¹\96\9f¹\97\98´¢\94³¥\96ȣ\99¹©\8eȻ\89²¦\8f«¤\96»\8cº­\90»¡\8c¹²\86õ\8f̶\8eɵ\7fï\84Ô·|Û·uôtúlÛºlà³må³méªbë¯^ä¯Vî¿Zè·Lð·Oò°Yä¶Yà´Vç¿Uï»déºfî®cê²lé¼oß¹kêÀqïÃkè½sëÆ}îÆ{ãÈ\85îÒ\83éÌ|ÞØ}áÙoÔÜkÔÕwÕÛrÊÓ|ÖÒzÕÃqÓÙm×ÙjÓÃeÌÕiÊÛnÕÃoßÅcܾcØ¿]â»XèÀWà»UåµIÜ­Hå®KÞ²KóMܾSܾTøTÚ²UÖ¹YÖ´XÒ±QÕ¥KÖ¤Ká®Iá¨Lå§WâPá\9cLà\95EÙ\99MÃœ\8dTß\99OÕ\96TÃ’\97\9eLÃ’\99MÃŒ\92AÔ\99@ÃŒ\9dEÃŽ\9a=Ø\9d\946È\9b=Ã…\9eGÄ\92JÆ\8fJÄ\90NÈ\95H½\8fGÃ\8a>¾\88B¿\8b7±\939¦\90.¢\902\9c\919¢\935\9b\8b5Â¥\87C­\90=¶\8eD»\93L´\8dB­\96<´\9cG¼\99<´\9e<»\9a;²\98=µ\98>¹\999µ\8f1¸\8a1¯\8f.³\8c\1e±\8c\eº\8e Â°\96%¯\9a Âª\92#§\93\1dÂ¥\9b&\99\96(\8f\90)\95\940\9d\8b.\97\8e5\99\948\96\98,\96\8d+\87\93-\81\93+\89\9c\1a\8a\91\11\89\95\14\89\91\10\81\9d\1a\82\94%\89\8b+\8b\8c-\89\7f1\8f\833\84v@\8a|F\8cz;\95wE\8euB\90vO\8czN\8f{K\8fsS\9cwT\9bta\9d}k¡ug¢|_\9etg ke¦ekªf[\9fc\\9f^g¤geÂ¥[c\9e_a\9eii\9agf\8cso\88qx\82ut\86ww\82w\80\8foy\8at~\91n{\99mv\91^|\93[q\99Wl\9b]s\8d[o\8bZw\9aS|\97U}¢Yw\97]\86\9aT\83 Z\7f¦S\8a¢J\85¤M\85±L\90®O\8b§M\93¦C\8a´J\8f²F\8d·K\87µC\92¸9\90Â7\8ce\81±iv®s\85¶n\8a»}~½\83\7f°zx²x{µ\85\89º\7f\88²~\8b«t\90§r\93ª\7f\9a\9by\99 \86\8c\9b\8b\97 \8c\9d\96\85\96\9f\89¤\98\90\99\96\92\91\97\8d¡\9b\99\9d\8f¡ \93\9f¤\98«\99\9f\9f¤\96\99¡\98\9d\97\9c®\94\9f¬\8c¦³£¨²\99\9f´\98¤¯\9e¢¦\9b¢¬¢ ²¢\9d¤\9a\91µ \8d´\9f~°¥\92« \95¨ \89ª£\87¾\9b\87¹£\8d¹¨\8dÄ­\81̳\84ïwÖ®\81ùt׸wâ´sÔ¬uå³lè®lã»eð½Zö°YêÀVí¶Pð´SçÀ]áÂRä³Uâ¼^çºeâÃeÃœÃpà´fá¯cé±aÙ¶kè´ièÀgãÉvã¿zÞÄxý~×ÃzÃœÃ\83ÛÓ\7fäÃyÑÌw××kÓÃ}ÆÈ{ÆÜl×änØàtÖÓmÎÙdØÙlÃÃŽeÒÙ_ÖÎbÖÂeãÆWåÆMÚÅUÙ½LÖ¾SØ®V׺Mß»C×ÂIöVÃŒÃPDZLÕ¸[Ùµ]ïPÒ·RÒ­FÓ\9bOÃ’\9fDÕ\9ePß\9fMä\9bMâ\94EÛ\95Oß\9cFÖ\95NÓ\9cMÖ\95_ÃŽ\97[Ë VÆ\94AÃ…\94\9b@Û\9cKס=Ã\97BÙ\9eLÆ\9eHÇ\9bDÆ\92GÄ\90MË\93G¿\91L½\90I¾\8e<¸\95:±\89:®\965ª\8f=¨\9d;¢\9e0¨\95< \8e:\9d\90>©\8aF¨\96>µ\90H©\8cJ­\98D® ?·\9cA±\9a>©\8e6²\8a@¨\96A°\93>©\8b0¯\86.·\85%·\93,­\8c#­\8f%ª\8f'«\9a\1f«\92\16³\99\e§\93# \94!£\9a-\92\8e4\8d\97/\96\92)\8b\9a4\96\98/\8e $\89\90#\8f\99-\83\95\1f\8e\90%\86\91\16\90\9d\1f\88¢%\8e\9a%\8c\83%\87\8e*\82\8e/\86v/\87\7f9\91r4\8azE\93\81C\8d\82E\8ezL\87rG\89sM\99\80\\95{X§yZ©oh wl {d¨yt¤oo du\9bgf¤uW¦a_ kn¢\g¤e`\9bnn\9fin\8aio\90xv\90z\81\96rt\8eu{\8cjk\8cn~\90n{\94b\84\94cy\8b\u\9ebs\8deq\90gq\96^s§Q\82¦aw¡PqÂ¥Sw\9cUv£S\7f®M\8a®X\8d¤N\90«H\8dºC\86Â¥N\8a¤I\82³O\8c­Q\95±B\8e¶F\8d»D\91»1\8ab~¤h~ªc\83¯o\89¶n\81®x\83­n}´o\80½\81\7f±\84\8c§v\92©r\89¡s\8a\9cu\99\9bz\93¡~\8f\9f\86\93§\8b\8e£}\9e¢\7f\9f\90\87\97\8f\88\97\97\8f¨\8f¢¬\94¦­\94¤\9c\9f£§\98\9d¡\9a\9a¦§£¤¥²\9f£³\8c\9b«\9d\9b± \9fª\9c\9b«\97\99¦\96\9e¤¦ ¦\96\98¡\96\8f\9d\9b\8e£\97\7f\9b\9e\83£¥\93©§\8c³\98\88¸\9e\8eÃ\9a\94Ç¢\86½¢{¾¦|ȲzιuÒ¶qÔ·{Öºwß®så¦aî]á³bâ°Zó»[ôÃVæ¶Wíº[éÀcìÃbæ¼_é¾cçºiÞ¸uÞ½që»géµjè¿fÙ¼cÛ¸pé½rëÃ\7fæ½|ÛÇxÛÃ\7fÔÎ\86ÔÎ\80ÙÅzØÆwÃÃ’lÃØmÃ×qÓÌvÖÃsÇÃn×ÃhÙÎhÖÃrÖÜmØÔiÓÃWÃËUÃÄcÃÊ`ÜÃOÃÈKÕÂTÚ·RÞ¶R×ÂHßÀIÛÃJÜ»MËÀJ÷OȸUÕ³TÛ­U×­RάGÔ\9bJÑ\97HØ\9bFß\92Cà\9aIÞ\94LØ\93JÛ¤EÔ¦MÃŽ\9bSÃŒ\96ZÉ¢ŢQàDÈ\9bG×\91GÙ\94JÒ¢GØ\9eH×\9dTÑ\97OÄ\8fF¸\93FÀ\99DÈ\95@Ê\99I»\90A¼\907·\9b=²\96>´\883¶\8f<¯\9a6§¡7\9f\9c1£\925£\8cH¦\8aI£\96E­\9eA®\96J¹£Nµ¢Aµ\91<­\8f=¢\8aB§\8b:Â¥\8dA¦\86@°~=ª\81-«\88'ª\911²\8f+±\91 Â¹\8d\18±\92\1a¯\9d\1c²\99!«\94\1d«\9e$£\9c/\98\91)\9b\8e&\90\91.\88 0\90\9e.\96¡"\97\97$\8a\93(\8a\8c)\90\8e.\88\91)\81\9a+\8b\99#\8b\92"\89\8c\1e\8f\951\8a\8c6\86\89/\84x5\84s5\92uB\91\82O\8a\88P\89yO\90zG\91uG\9d|Tªz_©wa¨{g\9c|i§pqÂ¥mq£ru¡sn\99qh\9dv[\9aw\\97hi\9ejk¨cc\9cmq\9coq\93mw\8apw\8at}\95|~\95pu\8fln\88l{\8ah~\85m\83\91f\85\8cj\8a\94d\86\8d\\81\8ae}\9de\86¤^~¢Vv¡Wp¬QtÂ¥Rs±Pv«N\81±O\89³V\8a²G\88´E\80·Oz©K\80¤S\8e¨L\91®J\96ÀG\8bÈ<\8b¾<\7ff\80ª`{±b\80°c\82¨q~§w\80«w\85µs\84°\82\84µ\85\80¦\83\94 v\8d\9b~\89\9cs\8a¦\84\88¦|\90\9b}\8b§\82\9b¢\8c\98\95~¢\98\82\9b\95\93\97\94\96\9b\96¨ª\98\99§\96 \99\9fª\9a¥¤­\97ª¨\98¯\99\9c²\9c\9d©\91\95±\9e\95¢\9d®\9a\9b¤\9d\96¤\99\9c \98\92\9e\9b\93Â¥\9a\8f«\93\86¢\9a\81­\9f\83\9e\9e\8f°«\8f³¡|À\9c\88º£\8a¾\99\84¿¡\84È©wÒ²xˬrÕ±uܸqÕ·mÜ®kå®`ܧhá¶aêµ\ó´Vçµbð¶\ìÀ\æÀaá¹`ãÄVàÅeî·eæÃtÞ¼nç¶jß¼pؽlÓ´\õpê¸vèÄqßÅuéÇ\82ÔÄtÙÃ\7fÙÉrÖÒpÇÓqÓÃnØÔjÃÑiÚÛqÃÖxÃâkÓÕlÓ×_ÃÃœcØÛaÖÃ`ãÃQÓÃUÃÀbÚÀTâËUá¾OÙ¹[׿QÛ´VÖ»IܺKþJ×¼QÔ®X̼NêWשPѦ[ܯ^Ù¤WÃ\96IÓ\91FÔ AÃ\93D×\96DÞ\91SàFÚ£QâDâNÈ\98^äVˤPÒªUÃ…\9aNË\9cHÚ¤D×\96\9dEÕ\9dIÃŒ\90FÆ\91A¿ DÃ\9eK»\97D½ G´\9e@·\91Eº\94Aµ\8a6±\835­\90@¨\94@¤\966¦\96<¤¡A©\8fJ¨\9cF\9e\93J\9e\9dR°\9fT§£R¶\9dE·\95K¯\92?©\88:©\8e:®\90:±\85C­\90<®\881«\89)¬\9e*²\9d!¨\9b#µ\98'¯\98!²¢\15¹£\1aª\9d$¡£$Â¥\99&\91\9b&\9c\923\93\9b0\90\9d6\8f\94'\92\943\96\98&\86\8a$\80\912\8c\89'\8c\8b!\8c\96*\90\97\1a\8f\90#\82\93+\87\93'\82\931\88\8c2\92\81A\8d\87F\97}:\97\81E\86\8fE\87{F\8c\80I\99\86V¡z]\9dw\¤wc§uk\9bmp£yi§rt\9fkr­nh¬wp\9em[ xo¦lr£hn¦ej§sq\92uq\97mp\93r{\92pr\9anx\93s{\90kn\94hr\92ky\97g\8b\9a`\88\98k\87\94h\8b\8cl\85\9bf}\92\\88¬U\88Â¥W\7f¡Os\9f^o\9e\{©Uv­S~¬O\82©I\84­P}²C\83µF}·A~¬H\86¬A\96»<\8aÄ<\81Ç6\8dÇ4\89[\8f\9f\\88¬h\89©f\82ªl\84©w\85¬y\88©t|°{{³\82\82¬\80\85\9b\81\96\9b|\8c\96\82\88¡\85\8a¦z\8f¢~\94¢\81\9a¢\82\9e\94\86¢\96\8f\99\94\93¡\96\93¦\90 ©\95\98\9e\96¡¤\9f\9c«£¢¨¡¡¥\9a«\99\96®\9d\98§\92\93©\93\9b¦\9f ¥§\9b§¥\9d¤\99\99\99\99\88\9c\9f\86\9e\94\7f« \83©\9c~£\99\89§§\83º«x»«{¨z¾\9b\88¼\98\91¾\95\88Π\83Σ\82Ø«uÕ«wÃŽÂ¥zÕ¯qÕ£jקcÞª]ë­]è¨eñ³^í³Sî·Yé½\è²`êÃgÞÂ\à¼dä½hãÅjâ½tÛ¹sã½pä¾sûfâ¾ué¿uè¸\82ç»\7fÛÊ{ÚËtÃ’ÃoÓÇrÔÊyÇÃqÃÖnÃÑwÇ×qÃÃmÆØjÃÖmÑÔfØÛ`ãÕYÜÒ^çÃXáÃXãÇ^Ù¿VáÅVßÂKصNÕ·RÒ¶NʲJÖ¸QÑÃUòTÑ´R÷Xʱ^ΫRǬT΢_Ó¢^Ö\96XÃ’\94RÖ\93SÃœ\9aLÓ\92QÃŒ\94KÆ\96KÑ\9dNêDȪKÅ¢PÊ©XÊ©QצXÛªYÒ¨XéTäMÇ SÃ\97\93GÆ\96IÃ\9fNäF¸¡E´¥E´\9cN¸\9fI»\9bI¿\94Fµ\87;³\89@±\8b?¦\95D§\8f@¢\9a@¢¡E  >¤\9eJ \98F\9c\96O¤\99R³\92U·\98Pµ\91C§\8c<°\8d<«\879Â¥\923­\907°\8c;¬\8a3ª\98.®\9a0§\9b0«\9a%¨\92\18¯\9b\e©§\16²¦!¤ª"\9b¦)\95¡'\98¢0\9a¤-\95\983\9a\8e3\96\91.\8c\8b(\8a\87-~\87'\82\90.\83\94.\84\94"~\9a(\83\93"\85\97\1c\89\8f'\8d\90(\84\88.\92\8d5\8e\8c<\92\8dF\98\84B\8b\81?\8e\84@\95\7fE\8c\87Q\92~X¡\83T\9c\82b§t_¤j]Â¥jj¨se\9eri¢w`ªvg±~l¦ul\9fzi¤rt«kv¢op xr\99pg\99xm\9fxr or£l}\9brt\94tx\98f\81\94f\82\9c`\88\97\\89\93a\83\92d\8c\9b`\87\9bg\87£`}£Z\84¡\\7f«Tt©PvÂ¥W\7f\9fZ{\9eSzÂ¥EwªGy«@\82»I\85¸A\86·@\8c¾:\8c³E\89¶>\88¼8\88À?\8fÃ…=\87c\8e¯`\8d¦g\88¡l\8cÂ¥e~ªh~·ey°p{µm\8d«z\8a°s\8f\9cv\97 r\90§\80\92©s\90\9e~\8f\9c~\8d¨}\90\99\85\99\92\8b®\97\8f \8f\8a \9e\99¤\93\97\9f\97\9e\9d\94 °\97 ¡\9b\98\9b\9f« \9f©\9b\96¦¡\93²\98\96¤\9f¡¦\9f¥­\9e\95\9f \98\9b\9b\94§\9a\89¡\94\88¨\96\85\9d\9d\7f¦\92\8a\9d\99\86©|®¤\7fº«\86¬\9d\82³\98\84¸\9a\87½\9c\83º\9a\87Ã\9esǨ{ظnìoÚ§vѤsà±`ã²aåµ^â·hàÃWéÀ[öÀVä²\í®fã´[á¼[àÃcÚ·nÚ¸yÞÀnæ´v×»m׸iسrçÀeçÃpâ»uä½\7fåºzÒÇ}ÛÃnØÄqÖÊjÉÇpÑÒwÕÒjÚÔmÔ×kÑÒfÃŽÃ’vÓØ`ÃÃgÓÌ_ÞÆSÔÂRäÅVÖÉLÛÀN×½PÚ¾P̾TÉÄXÊÃNÑ»PÃÄOÊÉKÛºUñ]Ƶ`èWìZô]Ö§\Ã\9e\95QÃŒ\9bMÃœ\95JâMʤFÓ\9dRÃ’\9cPÉ£WÓ¡XɧEÃŒ\9fUÇ¢MɬNÒ¬QÈ°WÖ¦^áWÃ\9d\99JÃ\93MÈ E¼\99IË\9dQ¬AëOÂ\9cP¿\99L³ Mº J¬\93I¶\98J¤\91>¬\92;³\968®\988Â¥\8aC¤\929£\92?\9f\95>\98\8b?\9c\96A¡\9fHª\98H­¢F§\97H\9f\97C£\857¤\876«\93;¦\893¤\956£\924®\871¯\8f0®\912¯\96/³\9d"¯\9a\15¥ª"«®%¤\1f¨\98%¡\97%\95 0\99¡;\8e\9e/\87\993\89\94,\85\8c5\88\99'{\95*y\8d)\80\99*\84\96\1cz\97 }\96\1d\91\8f(\91\8f+\91\97*\8a\945\91\938\89\8e2\87\90@\98\87<\99\8fF\8f\867\91\83C\8a\92T\99\7fQª~O«wV¨tg§rl¯plªl^¢{`¡}f¤}m°to©liªugªzp¬ll¢w~\9clm¨~r\99~v\9czt\99wz\95du\99fm\98qu\99tr\9bl}\97a\88\9cf\85\92i\90\8e]\81\9eb\86\9b`\8d\9e^y\9bWv\9eW~¯_u§Z\80£U\83¤OzÂ¥R\82¤J\7f®L}±J}´R\90´A\86»>\92¹?\82º@\89µB\87µ:\8eËB\92Ê;\86^\88\9fS\80Â¥a\81¡f\89Â¥n\87¤ez²]}ªd\82³g\94­e\95¨h\91\9cp\91\9f|\8c§x\8d\9fu\8c y\96¡t\93\9ct\94\98y¤\8e~«\8a\82¬\97\90¦\95\96\9c\98\96¡\8e\95¨\89\9cª\92£¤\92\9b\9c\8e\9a\98\91©£\9e¦\99\9e¯\98\98ª\90¡ \99\99\9b©\8e¤¬\92¥¨\93ª£\89±¦\80©\9ez\9c\97x\9e\94\84§\98|¦¦\82­\9c\86§\99\80ª\9b\83´\92}½\9b\83¹ª\84Ų\7fƨr˵mʶpëtÜ­sçpÚ¯hà¯eÃÀlâ¹`ßÂZâÅSôÃWïÆbá¹`ßÃfæ¿dÞÅiá¾påÀs߸vâ±wÖ¸qôzØ´tüjâÈiâÅgáÅqØÀxØ¿uÚÀyÃÇlÖÆqÑÃtÃœÃsÖÃlÞËhÚÊnÞØpÃØoÓÚnÌÕ_ÒÉQÃÃPÓ·]×¼XÕËTÜÈKßÉPûIÄ¿MÈÃXÄÆK̽LþRÔÉPÙ¼]Ù¸`Ù®eȯZÙ¨YêbÚ\98eØ\96dÓ\93ZÔ\92QÖ\9c\9aQÆ\9bOʦOÄ¢NÈ\9a\9eWÔ¬LÓ¨GÃ’\9fPÒ¬YʯPÄ´U˪bȤV¾\99P¿\9bQÃ…\95FÃ…\9dQÃ\9cLÉ£GĬF¼®D¾\9eIÀ O¼ Eª\9fK¦\95B\9c\95D \8eB¯\96C¯\957¯\8b:¡\8bB\9d\8fA\99\8f@\98\8c?\9c\8aB\9c\93;Â¥\97<¬\9bF¦\9aH«\9eC¢\92C¦\936Â¥\840¤\925¯\921­\8e+«\8a+²\8a/­\88&©\8e1¬\9d,¤¨*¦¦ Â¡Â©(§¬%§¤!ª\97.© 7¡\9a/\9d\942\8c\926\83\9b.\84\97+\87\97(} 1y\945u\99(p¢#w \1e{\9c\1c\87\91\1d\8c\97\18\8e\9e \8c\9f-\89\98+\85\91.\89\935\8a\8b;\8f\84F\8e\85>\96\8f<\94\8fD\99\8bN\9c}W¤zO®v^ªpf®q^¨m^\9bod\9asd\9dzr§vnÂ¥zj¨og¢tp¤\7fk\9e|u¤nz©|u­|~Â¥rt\97wm\9fhy\97jv\94sn\8cqk\89s\80\95k\86\9fg\89\98e\87\9f]\81\99\\86\96Z\7f\9d_\83\94j{\9ceu bt£Xk©Y~¤X\82\9aP\8b\9dD\83¦G\88¬K\80¤B\83­J\8d´C\87Ã@\8a»:\8dÄ=\8a½5\86½:\93Æ>\94ÃŒ7\8bR\82ªZ\82§]\8c¨\\8bª\\81³a\7f®[\88°k\85±a\8c­e\8c¯m\97«k\96\97o\90\94f\89\91m\9a z\95\9fv\94\9b\82¡\93\85\9c\8f\86£\89\87¤\83\97\9f\91\98¨\89\9b£\91\9e¦\8a\97­\8f\98\9c\8e\9e \88«\96\8d£\98 ª\95\9cÂ¥\9a\95¡¡\91¬\9c\9b\9c\9d\98¨«\92¬¯\85¡\9d\83ª¨\80\9f\96x\9e\93\83¡\90\8d¨\95\85© \8c¢\93{¦\95}¤\92\86§\8e\82µ\94\80À\9du¾ª|Æ£kÄ´hðpÓ¹nøtÜ®wÛ¸kÙ´nâºmÖ¾lÙÅcäÈ`ëÃ^ç¹Yß¼cá¸XïÂeÃÀcõrØÀj×´oÙ°nѹmÞ¿hÙ¶mßÊjäÌcêÃhÃÃjÙ»tܺuÙÅf×ÃjÛÃyÙÇvÖÌiÞÓiØÇoâÎpÑÃjÜØlÕÒbÃÊVÑÃVÖ½QÖÂ[ÓÄPÔÅGâÃLÃÈF×ÄP×ÄJÓÆ\˽XÄÃRÓÄQÖÌPà·bܲcÚ±fÙ±_Ù¯_اiâ\9fcÖ\9cdÚ\9b_ÃŒ\9a\9b\9cXÕ\9a\Ô®QѦVÖ\9aOÛ¬PÖ¤ZÓªJÑ\99Vؤ^˧YÈ®a΢`Ã\9e\97XǤJº\9fNÆ\9cHº¢T£SãE¶¤B¿£Kã@¶\998¨\936¬\8d9\9e\94D\98\84=¤\875¢\924©\93<¢\8a:\98\8c9¡\85A£\91A¤\8e6\9d\94;©\91H\9e\9cC§\91G¨\8cH¨\90H\9d\8d?ª\8e-¤\899§\8a9«\8b'§\8c1­\880ª\8b,§\99#¤¡ Â¬\9b*ª¨$\9e\9e#§¡)§¥%¬\9f$¬\98. \986\98\99/\87\8e+\8f\93*\81¤3\82\9d*wÂ¥*|¡*t¡/\82¦\1f\84\9a\1e\84 \e\81\94%\85\91\1c\90\96\1d\91\94\1f\86\9e"\8b\98'\92\9a.\95\97/\98\87D \8f;\97\97;\9c\8fL¡\91R\95\84L\9d~J¨|U©kb¦ma\9eka i^\94jf\9a~jÂ¥|mÂ¥qg©vo¡\81i¨~p¢~uªnsÂ¥tx«xt¨u}\95ty\95pu\97fu\95dz\98kt\99ky\97_\7f\9ea\82\96b\8a\99b~¢hz\9be\84£\z\9b^~\9b\s©Vo\9f^x¡P~ªR\7f\9fP\86Â¥I\8d¦M\8b¦T\80µF\86¸>\90®I\97¿D\8b¿D\8c½H\8d¼<\85¾;\90ËG\97Õ;\8cZ\8fªU\90«Q\85Â¥R\86¨^{³Y~°c\84«c\85¯^\86²]\85ªc\92¤e\98\9ck\9c\98e\90\91k\92\8cu\99\90\81\9e\8d~\9d\89\7fª\83\86ª\87\90«\88\8eÂ¥\85\90¤\81\9d¨\8e¥ª\9a\9e \94¡¤\98§¤\90©¦\8c©\97\99°\9f\8d¨\9e\8f¬\9d\89¨¤\94¥¤\92\9cÂ¥\86¢¬\83¤¤} ¥x¢\9b\80©\98| \8f\87£\99\8a¡\91\85 \91\83Â¥\94{\9f\8e\87ª\98\83µ\97y»\9fuº¤m¹­j¾·fƵrógôjÔ¾hÿvÒÀ~áÃuÃ¥ÃrÞÈdâºoê¼hä½jíÃ\ê½]ê¾cûmÜ·kÜ´dÛ´n÷jÛ´fß´kÛ¾qÜÅoèËmàÂyäÇsÃÃ…qÚ¿kÔÃsÒÊpýpØÃtàÃx×Ãj×ÊpÚ×dÕÙ\ÖÃ]ÕÌTÌÌNÚÄIÖÂPÜÇSÑËQÖÂOÖÀDÓ¼GÓÈJÉËGÿOŵZʸ[ѵcØÃ[âÃcÛ¹[á·\Ú±aâ¤Zâ\9d^Ú\9adÙ\9b\94dÓ\96YÒ cÃ’\9b\9aaÌ¥bïdÒ©TÓ¬XÞ­Yâ§[Ö¤WäUÕ©cÈ«ZÆ£^É\99VÉ\9bS¾\9cM¾£S²¤U¶ªX®¬V³¥Lº\98C°\9b>±\968·\9a6³\99:ª\8e:Â¥\930¡\891¦\8a-\99\869\9d\926£\908¦\867\9d\888 \92.¡\8f5 \96<¡\92BÂ¥\8fH¦\89H\9f\87J\9e\86A\9e\86C¨\869¬z4°}3°\7f9­\89.®\8c+¬\91)Â¥\96%¬\97$±\98'¦\98+®¤.¨¡%Ǥ$§¢$¨\95"¢\94,\98\8b$\91\90+\86\960\86\9f,{Â¥"{\9a'\7fÂ¥.z§(\83® \84Â¥(\82\9e%}\9c!~\98\1f\83\97)\90\90$\94\99!\8f\92&\8e\92)\93\948\9b\967\97\96:\9e\938\95\86@\9a\89M\93\8eF\97\83O£\80Z\9fvf\9ams£un\99|f\9brh sj§}b±yo©{m®}j³xm®uv¯xz±x~¬qy wu\9exu\92vy\94ix\95ho\98`s\9eet\95b|\94[\83\98_\84 ]}\9dd|\95\u\98`x\9eVo\9cWt\9e[s¨VvÂ¥N}©G\8a¦?\94­G\8e¯I\93¬K\91¸M\8e³=\8f´F\97µL\97ÃR\93ÆJ\8cÉK\8dÃL\88ÄB\91ÃŽC\93T\86¶`\8a¤[\89®Y\85£Z}£^}±`~¬g\80¬c\87¢d\90¤^\8f\9ba\96\9e]\97\97q\8f\96d\93\8cp\9b\8bu¢\8fz¡\89\88¡\85\89ª\87\90Â¥\90\98£\97\9b \93¢¥\97\99Â¥\90\95¤\89 \9d\8d¨ \94\9d\9d\8e \99\91\99\9e\97\9c\99\89Â¥\9b\8e©£\84£\9f\7f¢¥\86§¢\87©¡\86­\9f\84¨\94\8b¡\9d\85\9c\99\88¦\8d\83¤\89\81¦\86\84\9d\8e\88­\96\8b¦\9c\85³\9cv²\9c\9bg¹©mȴfÀ¯v¿³mÌ®pδyÕ¾rÕÆoÕÈmÕÌnàÆløoß»jßÃ\ôÅeå»^â¶lçÀmÒ·gÖ´`îcÖ³hâºdÓ¼qÛÀuÞ¾ráÊrãÑfãÊrã»qؼjÃÇpÇÃtÃŒÃqáÃ}ÚÃláÔiÙÒqáÃ_ÃÃkÊÊ]ËÒSÎÉNÒÉVþHÔÊMÃÓQÃÃŒIÔ¾=×ÆOǺRÃÃG˲SκXü_ι]ܳaرVÛ°Vá¬_à¸\Û²]Û¥]Ü©^ì_Ú\9a\90fÓ\9e\9aSÕ Z̨`À VÒªHõQ߬SÖ¯Wæ[×\9eSʬXê]¹\9ag¼©aƤLãM²¨\³\9fMº¢V¸\9dX°\9fC·¦@²\98L´\96>³\9b>¯\937¶\939 \8b5§\87/¨\85/¤~: \90B£\96=\9f\891 \8c<¦\861 \841\96\83?\9c\86H\9d\8cN«~N \85K\9f\86<\9b\8a?Â¥\8aB¨}3Â¥\88-\9d|,ª\82+¤\896©\8d2§\8f.§\9c, \980¢\9d+¨\94#²¡!©§\1f¢\9f* ¤"« *\94\98'\8a\9b+\84£"y¢*~ª0|¢"\84\9f.~¦'x£+\84\9f&\81\9d\1fu\9c&~\93&\8e\8e0\95\99-\9e  \8d\9f+\8b\918\9b\9c>£\8d5\9c\97=\9e\92<\9f\98=¡\94L\90\8fW¡\91M\95\8aS\9b{j xm£sc\95um ke\9ezf§|k­\7fi©sqÂ¥zt²vs°wt¯v}°|q®ts\9dyp®~o¢km\93fw\92fu¤e}\92`y\90g\89\9bb\85\9d`}\9a^\7f\9fb\85\9e`\81\96[v ]| Tv§U\80´L}¨T\81¯J\8a±L\8aµR\83­L\89°@\88¶C\89·I\95¼E\8d¼D\8bÃO\87ÉX\97ÄF\84ÈF\93ÑL\95ÑE\9dSt°[{¨Y\83£V\88¨V\84£]\81¯`\7f¤`\84§^\95°Y\94¨U\88¢\\8b\9da\88\92o\8d\93r\8e\8ce\9a\90u\9b\8ft\9b\8c\84¤\91\87\9d\94\8d¨\8e\94§\98\92«\9c\96¡\99\9a\9e\93\99¤\8f\9d¡\8a¦¥\89\9b¡\92\9f\97\91\98\96\8f\95\9a\94\91\92\87\98\94}£\96v ¦}¢\9d~«\92}°\90\87¨\9d\86ª\96\7f©\94\84¨\8e\82¡\8b{©\84\88¤\8b\86Â¥\91\8eª\8f\86­\99\82°\9ar³ iÄ\9djÇ\9doȣj¬iìtίvÚ¾xÓÌjÖÈhÔÅdØÂpÖ½dàµeæ¼]é½dë¼jùhÖ½h׳`η^Ò¹gà¿jß¼hÞÃkÃÃ…mÈÃsÒÊpÓÅnäÌfßÀhá¼gÃŽÃ…`ÉÃfËÃtÞÅvåÔxàÙqÖÖqÚÅh×ÃgÄÓbÇÊ^ÑÈLÛÆRÃÃKÕÄUÇÊMÇÄPÃÂCËÂ@˳MÊ»O̶MÔ³WÕ¯RÛ»RÓµ_Ù·_Ø°Z×±Yå²^ë°eß±`Ù¨cÙ°]Ó§ZÙ\99\9dbÕ£TŨVáU¾«K±JDzJÒ¬L΢LÉ\9b\9dUȦQ¾\9cU·¢dçYŨOº­V¶¡S¹\99L¯¡O³£R¶\9cK°\98Jª\9eM§\97F®\9fG±\9eF±\93:¢\8f.£\8d1\9e\86<£\82:\9d\8e8¡\96B©\967¡\84/¤}1\9a\832\99\83B\99\89I¦\85I¦\7fQ\9e\84M¤zF \83:£\85:\97\821\9b\878\9f\8d7\98\83.\9c\831\98\932\9e\9c)\9e\9a*\9c¡&ª\97(«¡&¬\9d\1f¬¡ Â¨\9f+\9e\9f#£§( °)\93ª(\8a®0y¬+\82§*\82©&\7f¬&\83\9e2\7f\9b'|\9b&{\9b\1et\95\1f\84\98 \8a\95(\8e\9a(\96\99+\98\9e.\8a\9c=\89\96C\99\8f8\97\96E\93\97A\95\93D\96\97L\98\92N\9d\93Q\9d\89`\9f\89^\98z_\95xc\99mf\9bopÂ¥zk¦\83i£ti«se nk¦oy¨y{­xv¨}}\9fxz\9f\82|®\7fm\9dsq\9bgw\99s\7f\9eo~\9ak\83\97j\84\9bc{ g{¦Z\82 Z\88\9ec}\9c\y¤_{®b}«]\85µS\81¸X\81«[\8c»]\81»P\83¶H\92°D\8f¶Q\93²P\91´M\95ÂB\8b¾R\8dÆU\90¾N\90ÆM\8dÄL\89ÃN\95W}©X\80ªN\85­Z\85­[\89¦\\83­[\83«b\87§^\91©]\8d\9fW\91\9e_\87\9ce\8f¡q\93 d\93\8do\8a\98p\8a\92s\97\87{\9c\91\84\91\8f\91¢\8e\92¤\9c\8f©\9a\92°\9a\9d¡\92¡\9f\8f£\9a\94ª\9d\92\9c\8e\94\9d\94\8e\94\96\8e\95\9d\9a\9d\91\8e\94\9bx\9a\94|\9c¦v\9c£z¯\9a{«\90\84©\9d\86²\8f\81§\97~­\91\85¨\8eyª\95\84§\8f\87Â¥\91\89©\88\87°\8f|§\9aiÀ\9cn½¡iÂ\9dhº©h¼¦sðzùwÔ·mߺhÖÂnÕºnè¼füdå´gå¹Yâ´eÖµ_Ú·jÙ¯]Ó«bÛ±bõiÃÀbãÇ`ØÃaØÃgØÅ`ÑÊfÞ»`ÜÊYÛÌiügØÃ^ÈÌpËÄkÎÄvÛ×}ÞÜjÙÒhÃÃgÎÇ\¿ÃWþTÒºSÓÆTÔÂIÓÀDÃÄNŽCĹCúLÉ«NÊ»K̯HÒ·XÉ«Wض[Õ²TέRѹYáµaÚ¬^׸aá´fÓ«e×°`Ú¤hÕ\98cØ\98S×¢TÂ\9cTãO·«SÈ©D½¨F½\9fA½¢QÉ\92GÉ\99PÈ\9eX¸£]¾\9bf¶¡SÆ©QÇ\9aL·\99Q³\99U¾\9bL¶\97F¨\9eB¤D±\9eJ¯\9fAº\94J­\8aJ«\89C®\913\98\8b6\94\843\9d\81;\94\93?¡\9a9\97\877\9a\896\9b\83<\9b\8a4£\82;\95~G¤\80K\9d|R\98vP \86J\93\859¤\88:\90~0\93z.\9az,\91}6\8f\830\9a\8b4\93\9a-\9a\97$\9d\93+\9f\9c(«\96) \9f\1c\9a\9d.\9e\99#\9c /\9b¢$\91Â¥4\90£&\81¡'y ){¢5\8c¨3\8e\9d-\88\997\88§,{\9b"\85 \1c\80¢\e\82\9d \89\953\90\94-\91\97/\89\8eB\8b\92C\8d\94<\99\8eD\97\8cA\98\98O\9b\9bR\9b\98\Â¥\9eX\9d\95`©\8de£\92_Â¥\8fd\95}^¤tb\9cxr¨zj\9e|e«rbª|iµqj¬\7fx®\80~Â¥w{«\81|\9c\84}­\7f{°zr«q{\9bg\85Â¥sz£pw\99n~\94v\80\99i\85£j~¨\|¢g\80\9d^}\9e`xÂ¥e\85¨f\83³W\84¯a\83·T\82¸Z\8e°W\88³M\82·H\83´E\93½G\85¹I\90ºK\89ËH\83ÀI\83ÄT\8c¿R\94¾M\8dÃS\94ÃR\94A\86¦J\83¯Q\88°U\88°T\8b¡Q\92£K\90¤U\8c¡R\8c¤\\86\96e}\96`\82 _\87\97k\8a\9er\85\98g\88\94e\8a\87o\8f\8a\7f\96\95\88\95\90\87\98\90\8e\9f\99\88\9e \8f­\9b\98Â¥\8f\99\95\8e\99\97\8d¤\92\90¦\87\8a\99\8b\8e\93\95\96\94\90\8f\9d\90\7f\95\91}\9a\98s ¡z\9c\9f|§\92w«\8fu²\91}´\97t©\94y©\8fy«\93\81³\92\8bª\97\87¨\96\82ª\91\81«\8cx¬\95o½\95tÃ\9foÇ£kÀ\9fsÉ£tÅ­uɬyÛ¬nå²dß»dà·aèµ^Þ¸Uà¹]׳^Þ·_ß¼dÖº]ú]Ô³b׺gÓ¶fÓ·]ÛÆcÔÀcÑÄ]ÔÃVÕ»_Ù½aÙ½]ûZÎÊ_ÖÔlÓÎlÑÌsÃÃŒuÚ×rÙ×tÃÓbÊÇZýZÃÃTǸQƽSÃÉPÃÇDÃÈCÌÇBýEľOɯZƱVɹK˹JÒ¯JʲSǪTÒ§QΦUØ´\ß²cõbÞ²`Õ­gصh×´i̳aæ[Æ\97]É\97XË\92Y¿\96M¾¥H½¨M´¬Qµ G¶£MÂ\94FÄ\9aMÇ\94X¼ Y¸£[À¦_ŧYȦMÂ\9a\9bM¼\99Q°\9cR¦¦H \9eA¨¡?­\97<µ\93H­\83M«\84@¤\82H\97\84@\95\83<\91\8e<\91\947\90\8eA\90\8fI\9f\8d@\99\90<\9f\877¨\815¢}>¦\83C¤|M¡wG\92\82<\8fy0\94}5\98z2\8b}3\91\89<\93\83:\97\808\96\86)\9e\8a$\96\96*\92\92'\99\9c\1d\9b\98 \9f\94$\94\96.\96£,\92­0\97ª/\8f¤7\84¬.\8a 1\7fÂ¥3\80 0\8b¡1\84\9d*\88\9f+\84ª(\80Â¥\1f\80¦\1c\80¡"\7f\9a'\83\996\83 @\87\99?\85\8e=\90\86K\9c\87O\96\88M\98\96J\9e\98P\99¡[\9d\98]\9e\9a]ª\9bg±\99c¦\93^ª\98b \8b] \83g \81e£{m ~l¯rq°vo©{y¯\7fy¤|l¦|pÂ¥\84x¡\81|¤\80|«tw\9ey\81¢r\81¦r{¨j\81\9fr\80 pv¦b|ªd\7f³^y±c{¶^\80«]~§iy±g\81·d\89³`\83´U\7f´V\8cÀX\8f»K\8b¾C\8cÃI\90¹I\83·Q\83·S~ÈK\85Ã…P\89ÈR\8c¾X\93Ä]\8eÈZ\9cÑU L\81\98L|\9dZ}\9cX\8c U\83\9fS\98£K\8c¤S\82\9e]\83\9bX\84\9bg\8b\96h\85¢`\89\9aa\87\94l\8f\8ea\8a\8ei\8d\92x\86\8b\7f\8a\92\81\9a\9e\86\97\95\97\9b\92\8e§ \86ª\9d\90\9c\94\8f\9f\92\9d\92\8e\9f\8d\83\99\8a\85\97\8c\89\9b\89\83\94\8c\84\9b\8e\82\96\8b}\9d\92z\9d¤y¢\9ds¯\99s©\96s´\90\88±\93\7f¨\8e{¨\88\81\9a\92w­\8a\82²\88z§\92\81­\97t´\9bzª\9bg´\95w¼\9dqŬx¸£n¾¨qȸz̲uá­lß´dÓµ_Ú·hà©fã¿eعYÙ¿gÛ·]×±]Ô·S̬fÔ±_Æ»eÔ°fÕ¶]ÉÆ]ζQÃ…Ã]úPÃÆ\Ò·Q׶]ʽeÉÅdÇÃ]ÇÃjÃÔuÃÃrÒÑqÃÓ{ÕËgÃÖaÇÒ^¾Â[ÎÃQżSÃÊLËÎDÆÎGÕÃQÃÀI¼ÄPξWŹ^Ê¿WúTñYÊ£ZŧLÃÂ¥Jò\Ò¯aêcض\ï[Ù¯eØ­iÔ®bÒ¬Yó_É\9cRÃ…\9eZÃŒ\99]Ã\9fH¾¨N¼§IÄ¢Q±\9fP¶¤EÃ\92DÆ\8fE¼\91T¿\9cU´XÃ\9dRË P¡RãV¶\9dT²§W²¢G\9f\9fF¨¤Cµ\96C´\9b?¸\98O«\87C¯\8dF¢\92>\95\8cK\9f\8c9\98\895\9a\8eE\90\8eG\8c\87?\97\8bB\90~<\90\8eG\9d\86:\9dvA§\7fA\9eyI\9dvH\94yB\88\83:\88\80B\96}7\89\82;\98\8c6\9a\91D\8e\91.\93\81*\9e\88&\9c\8f/\94\94.¤\9f!\98\9b\1a¢\99\e\9a\9d'\91¤'\8f\9f$\92¡-\8e¦.\84\9f-\7f£&\8a¤(z\998|\9b:\86\9a4\89\9b4|Â¥&\8c¯%y§\1c\82\98!\88\991\83 9\89\9d8\83\92B\85\90L\8f\93N\8b\94@\9f\92D\9e\94J\9c\90L\9c\9aU\99\90_Â¥\96f§\9bh¡\93^²\9df¢\8c_\9c\8ff \8eX\9e\8d^Â¥{f¨wj¯\7fv´\82x²zs«\87tÂ¥\80t³\85s \85s\9ct\82±|\80¯h\7f£ky\9f~\8b¢~\82®v\89²p}¨n{¬qv°dz«p\88µk|¬i\81·`\82·a\7fÂc|³^|½f\87¿g\86Ãe\86¶T\8d²R\89Ã…T\94»E\89¿M\85¶_\83¿R\8fÃR\88ÄU\95ÃŽU\95ÃŽ[\92Ã`\97ÇW\98ÔSªOw\8cZ|\93Z\82\94M\82\9cQ\83\9cL\8d\9dO\85Â¥[\89¢U\8e\9f^\89\8fb\8b\90_\82\9cU}\99Y\89\8d[\94\8dd\8f\8bm\87\97u\8a\96~\97\92z\9b\9a\87\9a\8d\8fÂ¥\8b\90\9f\97\89Â¥\9e\93¦\98\91\99\89\9b\9d\81Â¥\96\85¡\9c\88\9b\90\91\93\8a\8b\9c\92{ \92v\96\92\82\9d\9b{¦\9ap¡\8ek©\92s°\8b\85¶\8f\88µ\93\82§\94z\98\86~\9a\87x\9c\8a\80¨\87~«\85t«\8du­\8ds´\95k²¤t¸ªw´¯f¿¯eÉ©p̳wçzÙ¨pÜ¥nîhØ©fß®bà½fÛ¿a×ÆdÕ½^ÕµZÜ´ZÉ«`Ƴaø[ðT¿­VǵRεXȱSÈÀVÃÃP÷XξWÔÅ^ÃÆ]ÃÃ]ÌÅlÃÃŒnÃŽÃŽqÃÊsËÖsÒÛ^ÕÕYÒËaÈÊaÃ…Ã…ZǾVÃÈJÃÈLËÃSÃÆRÑÅOļLÃÄJÌÃTǽPƾOĪQÄ¥W»¬S¾¬Tî\̦bÖ¬[κd˵k̺bʸgÆ´hˬ]À´VÃ…Â¥X¿\9a[èRȬPîUÃ\9fN·\96J¹\9dG·\9dAÃ…\9e@¼\9cI¸\91J½¢H±¦IÂ\9fPÂ\9cVÃ…\94PÀ\9bY¶\9fW©§S±\9fS¨\98Dª\94@°\8fA¯\8dD¬\8dLª\90L£\90@Â¥\8dL\98\8eJ\9c\8fF\9d\867\98\85A\8c|G\88\82;\8e{<\94\87>\90\88K\95}Q\96\80J¤\87L¤\81Q\93sJ\90qA\8a|H\8b~@\8c\82E\8f\83=\96\81A\95\8fB\94\946\98\8b.\9d\8c*\9d\88-\9a\88*\9d\93)©\9f(¨\9b\1a\9a \1e\9b (\9e\9b$\90§#\98 #\90\9e)\86¦.\87\9e.~\9a8u\9c9|\9d7\83\98:\85\9b.\89©+\88\9c'u\9a&\7f\92&\8a\9a/\82\947\8b\8fI\89\8dG\8b\9b@\91\96N\9a\97K\94\97R\92\8aV\9c\99U\9a\96V\9d\91Y\9e\8b\¦\8c\°\98h¨\93g©\93]¯\90WÂ¥\91]²\7fe¯zfÂ¥\7fnª\80x­\8bvª\86s°\85q·\87{©|\87£v\82ªsz²k\82¦s\8a¡~\85¡\81\8d­|\90ºx\84¸g}»d\86»o\7f­x\7f°u\85¾j\86¾n|¾o\86Äa~Àa\84Çi\85Ã`\8aÉb\8a½Y\90¹M\8e·G\96ÀR\90½[\8d¯_\86¾^\82»^\8cÉf\99Éb\97Äg\8eË]\96ÊQ\96ÑQÂ¥T~\98P\81\94K{\9dM\8b\97V\91\98K\93\94W\84\9fZ\90\95V}\9bU\87\89X\82\8a^\81\91X\81\92`\87\90_\83\91l\85\85j\93\92u\95\97|\9c\9er\9b\92\82\9c\9d\84¤\9a\82Â¥\93\83\9f\95\87£\90\97\98\9a\94\90\94§\97\8e¤\8b\80 \85\8f\99\85\89£\94{¢\93s\90\87v\9b\92x\9c\93sª\91q¦\84y­\8b\80®\9a\85®\91\8c¦\8e\85£\91{\93\92u\9b\84w\9f\93zÂ¥\8ct®\83w¬\87n©\8ah¸\9av´ j·±m·±kË«kælÒ¤hÓ¨dÖ®kέb׬_Ù§eÖ±]à´Y×®TÛ¹_Ò°[ïVΧdȪ]Ê®]È«TɺMýMűXÆ·M¾¼Y̳\¿»ZúRý^Æ·]˽húfÃÂkÃÃnÉÃeÓÎrÇÕgÔÚ[ÑÃ\ÕÈXÇÃUÃÊ]È¿PÇÃQÊÄWȽNýKøIÒ·]ѲS˲\ȺRȨOïYˤU¹£YÇ«SäaædÓ®jô\¼°fŹZ¾¼ZĺaíT¸¤\ìfíTÀ¬UǨTƦW½\96Hµ\9cK½£Iº¢H¼ D­ H¸\9fC¼¥S½\99PÄ\9eN¸¢T¸ N®\9bVÂ¥\9bV¦¤Eª\8e=¨\8cA§\92F\9e\89O\9f\94T§\94Q\97\8eP¢\8bK¡\8cI\9f\81F\93\89;\95\84B\93\839\93vC\90\80<\86\7fG\92\84H\9a\84I\9cvP\9d\84K\97\88S\92wI\93qB\97qD\87\82E\8a\80<\90\80>\97\86;\99\8fB\99\874 \895\93\8b0\9e\82.©\861¬\8b& \8b\1d¤\91%\9c\91%¡\99#\92\98+\90\97.\91 %\90\94%\89Â¥'\8c\99*\82\9d&x 4x\9c9x\94:\84\9e<\84¤&z\9c0\80\97)\85Â¥4\81¤9\82\9b:\83\9aI\89\92G\81\9d;\8b\9aH \92Q\9b\92R\97\97_\94\99b\93\97] \90a\9e\93\±\9ceµ\98k±\97i³\98]´\8d`¬\93f±\95h¯\90g´\7fnª\8ax«\87{®\87{©\8dw±\81|­\80\87¤z\86ª\81\7f®p\82\9fr\86£~\87¡\84\91°\81\8b®\82\92µx\8b±t}Â}}¹}\90·t\8c¹s\8bÀr|¹n\88Ãf\84Àd}ÃnvÇ`\84Ãc\8c½a\85¹M\89Æ]\88ÀS\8d½_\8e¸_\89·d\8a»\\86·`\90Ã…k\94¿h\95ÃZ\8eÈY¢ÃW\9bL\8a\95S\86\95P\80\8eS\87\91U\82\96K\8d\89V\91\92O\85\95S\81\93J{\87X|\8eT\82\87X\8a\82e\80\8dr\7f\83r\89\84q\90\82v\98\90|\9c\8fy\94\96w\97\91\86\9c\9d\8b\9f\93\8e¡\94\8a\98\99\8c\9c\9a\8b\93\9b\9a\92\8c\9d\85\8f\9d\89\80\9f\8a\80\99\8cw \80y\9a\83s\99~x\9d\85w \87\7f\99\85uª\94\80ª\93\86¯\97\8b­\8b\85\9e\89\84\9d\8f~¡\96\81£\93w¢\92x \88v«\86t¤\8ds¨\9du²£m³ t¾¬kË´cΪiÒ¦fË­cÔ¨hÒ¤_Ú£XÓ¤bܱ\à²Zصaá§VÒ¯YΨ`É¥aÓ®Yȱ_Å°Wù[ɵOÆ°Zº²TñOǵXξSÄ¿^È·[ó_Å¿l˺nÙÂoÕ¿dÃÉhÃŽÃlÃØeÆÔhÉÃcÒÈ[ÔÌWÉÊXÂÅUÀËL¿ÆQ˾YƼUξW×·WÕ±\̨`É°\ǤPÀ©QÄ­P½©V»¤RÇ©WΩYȯfìi½±_ƹT¿µY´·W¹¨b´±g¾¬añ`¿ªYÄ¢SÃ…\9fN¼ TÀ\94Q¼\9aR·\9aEµ\97H°¢@¶§H¸\9bL¸\9aX¸\98R¼\9aO¶¥S¶ MÂ¥\9dO\9a\91B\9f\95F\9b\95H\9f\8bT\9c\8fV \96N¢\92W\98\97P \92V\9c\8dL\9a\82E\93\82A\94\89=\95~9\98\85;\8b~K\96~K\92yM\96{C\90{I\97\85I\90~S\96\84P\90yJ\90qO\8fyM\9c\84L\97\8bG\8c\8f;\92\8a?\9c\85.\96\90-\9b\962\9e\8d- \87+ª\8b/ª\91,£\95$¢\92&\9c\8b&\91\87(\8e\92+\84\90*\81\9a%}\97\1f\81£)|¦/|§*s«1v¡9~©1\80«/\85¬+\7f¤6v\9dCz§E\83\9bN\87\98E\8c\8dK\88\92G\96\94I\96\93P\90\9aO\91\98[\8f\99h\99\8ad\9f\8bl§\9ae¦\98e®\98f³\95a±\9cZ³\9ad»\97cÀ\9e`µ\95l¸\85s±\83y«\88\86²\81\88³\8d\8c´\88\89º\90\81°\89\80¬\80\88¦v\83¦v}¡z\80«u\91®\81\90±|\94±\83\90²\87\91¾y\8b½u\8fÊt\8fÃŒs\84Ây\85Àg\7f»e\80º\\83ÉaxÇb\89ÃZ\8aÑ[\8aÆZ\89¾V\8b¶X\8b·`\89¸j\8aÃ^\85¼b\8dÂf\86ºm\8eºn\97Ã…c\96Ô_\90Ñ_\97T\85\9bO\81\97R\89\8bG\86\9aJ\8b\8cG\90\89S\7f\91R\81\90I{\92N\7f\8cV\7f\8dO}\8cY\88\8b`\88\97g\88\84~\91\83p\89\8cq\91\8b~\9d\8f{\97\8fu\9b\9f\86\98\9c\8b\9e\93\8d\95\98\86\9c\9a\81\97\9a\91\95\91\8f\91|\9d\89\8a\95\8b\84\9e\87\80\92\87y\91\84r\99\8cv\95}j\99\84o\97\87o\97\95{\98\89u«\96\83\9c\8f\86¨\93\81©\8by\97\95\7f\95\86z¦\86w\9d\92w\9d\91x \8dy£\90k®\97j«\9cm®\9fp³¬sŤdË°eÓ³bôVʪ_ΣSÕ«aÙ©bã¨Tå¨Ræ¨`à®Yó\ɪ[űZõQ¸X¼°Y̺KýUűUƸS¾®MÂÀV·¶TĺZÉÀ`òZÆ»hücβjɳfÆÃiÓÈtÊÒaÈÕhÈÃbžeÆÄSÇÃZÉÃKÂÃIÃÄN½ÃVÄÊ[ȹZ˸QÔÀd̹Uʵ[ïUÀ¬\·¥\ĪW©XÇ¢Uò`çX»´Vò\Ä¥S¼¶Y¿°_¶¯Uº©`çZ³^îT»\9cPÃ\9fK¹\93A²\8eD¶\9c?½\9dF·\9e=«¦;²£C»\9eJ­\98S¸ F»\98O¶\98Fª\9aG¤£O£\94G\9b\96>§\8aD\96\92[ \91X\97\90M\96\92U¤\92G \95I\9b\8cG\91\8aF\93|A\90~5\95\829\94\87F\8a\88B\8dvB\95\7f@\8c\82M\97zO\8brH\9a~S\94tQ\8d\7fI\88\81R\8d\81O\8a\82J\94\80H\98\7fH\8e\84I\94\8a@\95\95=\9b\92.\98\994\9e\8e2¢\906\93\89&\96\8a)\94\96 \9a\8f'\95\92(\95\97/\8a\9d+\83 %\8a¦0~¬0\83©0w£&\80Â¥/r¤:|­.zª5tª-\80Â¥/\82\9c=z\97C\81\95=\7f\92I\84\9fF\84\99I\90¤G\9c\9bP\9e\91X\94\9bU\98\9fX¡\90h\9e\98i©\97\¤\99]±\9bh° `¨¡b¼\91h½\9dfµ\91d¬\92l·\89y¬yt·\85{©\7f\80­\8f\84°\95\86·\8b\8a´\8c~´}\84¤~\86¨\80~Â¥~\8d´{\95±z\92ª|\8aº|\8f°s\8a»u\93Éq\94Àj\95Àp\8fÃ…}\96Æs\8fÀj\80Çn\82Ãj\81ËczÊd\8bÃ\\80Ã\\89È[\8cÀ`\83°f\8cÃf\8cÂf\8d¼o\84¹`\89¼m\8fºb\8f¿a\8eÃŒ_\96ÆZ\8eR\84\93H{\94?\82\9bGy\94N\81\91R\87\8fG\86\8eDs\94Av\91Nu\8fN|\8eSv\97c\81\98j\8c\92x\93\90{\8d\84u\8c\8b{\98\86m\9d\88n\93\96m\93\9d}\95\99\8e\91¡\8d\8d\9b\84\8f\92\85\8c\8c\8e\8d\81\95\95}\98\96\82\9a\90|\97\94s\93\8bu\9b\8dh\9b\83l¨yj£|q\9d\8cw\9e\97oÂ¥\94x\9d\98\83\96\91}\9a\94\84¢\8dy\9d\8dz¢\8bn\99\85n\94\8co\9d\97n\9b\90y \93s¦\94l¤¤eª\98b²\9dj½ iȦcɲ^È®UÈ´OάLß³JߪVîTä¦ZÞ¨NÜ°SÊ®Pȱ[˵OƬHĹQĽXÊ¿MüM»µKÅ°WżX´¼T¼ÅQ»½U¶¶WÀ®]ʱWÅ´`ï`»µ_ȼkÊÃj¾¿lÂÅ_ËÆgŹ_ý[ÀÃUÉÌXÀÃNÂÈT»Ã]¶¿^¸ÀYÃÃRǾ[¾_¾·_ûgÅ·_¿¹Z¼©Vº\9fMÆ¡TË\9fOĬRƪ_¶¤\¶­[ê\Æ¡XˬSDz\¿®[©S¹¨U¼¤P¾\9bA¿\91?µ\95G±\99G³\929´\99:²\9c8±£<²¡O«\99Pµ\9eJ¼\9eB¼\98G¾\9bB® E§\9dN \92G£\9bM\9d\9aQ \90J\9a\92T\9f\94W¨\98O\9b\93I\92\96L\94\8dK\9f\84=¡\8d:\9b\86=\94\87C\9a\82C£xH\9c{>\97sK\93yS\9d\81Q\9bzI\95\86K\8a\83U\8c}W\89yI\8b~M\88{F\91\80E\9b\8fD\98\8cE\8f\90@\92\9c=\9a\99A\98\91@\8c\926\90\940\97\8e)\94\93(\89\9c1\8b\92<\8a\995\87\9d5\86¢(\8c­%\86¦0\88«(x /y\9e-u¦9m«8n¢0lª:xª6\83¨7\80\95A\86\949\86\96<\86¦D\85¨M\92¨S\99 O\9a¡V\94\9bY£\94_§\9db£\97d\9f\91Y¨\92^±\95fª\92g­\94q°\9fn·\9a[¬\96a°\8dt±\80g°wk®|n¬\84w¨\8b\80°\93\80²\8d\8b¯\7f\87µ\86\89°|~¬|\85²~\91®}\9c¯s\96²|\8a²v\86¶q\8d¿t\90¹m\94ºi\8dÃ…u\96¿v\95Çu\8aÃp\8aÊp\82Ëc\83Âh{Çh~Ãd\88Êi\83Àa\85¸j\82»s\8cºk\89Éo\87Çj\85ÃŒh\89Ê]\86Ê]\80¾\\88ÇV\8dÄX\96N~\94Mz\8fIy\94Ms\88M|\8aIy\8bL\7f\91Fo\86J\7f\90J|\8dW{\88Ku\99W\80\8ce\90\89r\87\7fq\8b\82|\8d\86w\90\8aj\9b\88r\9c\91q\95\9a{\94\8f\86\97\95\87\8c\9f\92\84\8e\8b\81\89\97\8e\85\94\9cw\92\92{\98\9b\7f\90\90v\8b\8br\99\92m\9a\8di\95\8fu§\7fn¡\8de\99\88k¦\8ep¤\98|\9b\9b\81\9b\8f\80\94\94\83\9c\89y¤\95z\94\8ak\98\90s\92\9asÂ¥\90p§\97w©\97k¦\9e_²\9dfµ¥cÃ\9fV̧UÃÂ¥R¼¬QÒ¦QÙªMÒ¡Nå¤Tß¡Nç­Lè¦KÙ¸GðGÒªXƳGË»QαFÀ¼MÇÃVÇ»P˦\ı_·¯[³¹Yµ°T°¶O¶µa²¨[´¬g¸ºb´²i±Ã`¿Ãiú[ÀËVÈÃa˺dǹaÃÃV»ÈZÂÃS¿ÔM·Ã[ÀÆ\¼ÃY¶ÊV»¹`úZ˼i¹¼e˦Y¸±_»±e¶\9fe¾£cÄ\9eRŬW»®P·®L«¥X±\9eU¼£R³\9fR¶\9aP¿\9bTȣZ¶¬O²£UÀ¥P¸\99G¹\99B·\92B¹\8e8®\8f5´\99<¶\9fHÂ¥\99;Â¥\97O¯¢Fµ\98K´\95@µ¡A¯\9aK¬\9fJª\92N\9e\8cQ\9a\91Iª\9fV \92J¨\94Q«\8eQ§\9aU\99\94H\94\8fI\91\89@\9d\8c8\9c|>\9a\89C\97\82?\99\84;\99\83A\99xE\90\84I\9f|H\9arN¦xP\91\80L\95\83G\95\81N\87{B\89\81G\86y@\8c\87A\9b\88B\92\8dI\8a\89A\85\92J\90\94L\89\91G\88\95@\86\89>\8f\92,\8f\8b/\92\9cA\8f\970\80\990\82\9e3\84­)\87¤0\85¢6}\9f&~£0}¬.}³,w¢,o %v¡)z¡0}\9c-v\9d;{\9d<\84Â¥>\84\9fB\8a§H\8b°J\91£S\9eªX\92 T\9f\9aW¤ Z\9e¦d\9e\97`Â¥\9be¬\91hª\8dj\9f\92i«\97c³\92h§\96e©\8dh²\86t²tt²uk§\82u±\81}®\98\83®\8a{´\8a\87´\82\83±~\8b©~\8c©t\87µ\81\8e­y\97«z\85´x\81½m\84¹g\88Äu\88¶o\94Âx\93Æl\94Ãt\8cÆu\92Ãj~Ãl\84ÃŽk\8bÂc\88Ç`\84Ée\85¾i}Âg\80»n\86ºm\90¾e\8eÔh\8aÉk\8eÃY\93Â[\89Ç\\84Ë]\94ÀS\9a?}\8aFt\8d@|\87Hx\86Ny\83Eu~@u|Cv\81E\82~E\7f\84L\82\93T~\95d\84\8ff\8f\84r\99\8av\92\83u\8e\86n\95\82p\99\81r\96\90{\99\93r\92\93u\86\90\83\88\91\85\8f\84\91\87\84\93\8f|\8e\94\80\90\9e\83\8b\99w\92\99i\91\96h\8d\92k\93\97m\92\8bh\9c\88g¢\86j\9a\88f\9b\98m¤\9bx\99¢w\99\97z \94v\9b\8bw\9e\8ay\9e\94w\9c\9fm\98\9at\95¤r\9e\9dm¢£b«\9fe³\97^´\9eT¾ªUˬW¤KÀ©O¢OÓ£LÛ\9cGß Dá£Bà®Fé­Eà¶?Þ°<ñHűIżIÑ¿LÌ»LõY¿¾YÆÄ`ǾYð\¼³`½©W®­T³§Tª­]¶­e±·e¸¿g³À_À¿dŽZ»¹]ÂÅSÇÉZ½aÆÃ]ÇÃYÂÃPÀÃV¼É^¸Ä_ºÈbªÃX­Äg¶¶g¼Àc»g½³k³·a³¨`¹£e¸\9f[µ£aµ¬]¶¦L´©N±¤G¨¤N¯\98W­\9dT»\95VÃÂ¥V¾¥W· T»\9dPÀ\9bD¿\9fH·\97B»\9b;¸\99:·\8a8¸\86=¨\90F£\9fC§\9cB«\9bC¯\93A«\9a@±\9cH§\92K£\96W©\95V¢\96R®\9aP«\98K² R§\96I§\9fQ¡\98N\9a\8fG\96\92D\94\928\97\898\9c\86:\95\809\8ew>\8a|=\91\7f9\94~B\95\80J\9d|B\98\81L {J\9esI\91wA\8ev@\91\80I\87\86M\89\81A\93}N\95\85M\8b\8aC\85\8aE\8e\93A\8a\92E\8b\8e>\83\93F\8c\98@\8d\92<\94\8eF\90\91A\8a\937\84\967\80¢0\83¨*{¢'y§.t§2|¨)|¤'}¯0oª&q\9c$f\9b$k\9e-uÂ¥)y«3\85°=\8e¤C\8e¯P\97³P\8c¬U\8d®_\8e²_\9c©Q¢¯X¢©U\9e\9fd¥£f®\95q§\90p\9f\96e\9a\8ch\98\9bg\9f\98g¡\91iª\8bi¬\84m²\7fl·yl±~l¬\8cz²\8e|­\8b\88®\8e\85°\8f\8d²\81\88·\83\81ª{\81´v\85®t\8a·q\8e¾s\83¶p\81½g\81µm\8bºt\91Âh\8b»m\91Èd\95Æj\8c¿k\83Èv\82ÃŒk~ÃŒm\8aÃŒq\88Âd\87Âi\81Àl\87Ät\82Ä|\86Ãn\8cÓd\86Õg\91Ã^\8eÃ_\8cÃd\8fÈi\94½^\90By\90Ks\8cHj\86Bs\8cFp\89;i\83LjvMqvK~~Ux\8dVu\95[u\9bV\81\89k\87\88i\84\83x\93\7ff\88\85o\94\84k\94\81y\94~q\8d\88v\90\8e\80\88\92\84\84\88\82\8a\8e\8d\89\90\91\93\8b\8f\8e{\8b\94x\8e\9am\92\8av\8f\8e_\98\8fo\97\95e\9d\86k\94\82^\97\88m\93\96j\94\93w©\9d{£¡\7f\92\98z\92\93w\90\87}\96\91s\93\95u\98\93u\99\9fn\99\94f©\9d`³¥^²¢X¶¤a¬\99K· Tº\98ZæVÉ\9eLíMëGɱQÒ¯OÞ¬BØ­JÖ·HײOÕ»LÇ·VıK±NDZB¿OÎÃJÈÀUÆÃ^½­Uí`µ²b±¶a«·]®±V§¸R§«^®¶`¯³_»¸\¼ÂQº¾_þOÀÃWÃÂVĹ[¾ÀZË¿YÉÆ]ÂÈ\¿¼\µ½c´Ãd¨¾`¦¿^·Â^µ­W¸¬]®«Y¸±f°£a»\9fV¹\9fUª\9c\±§O­¡G°§P¬ A´\9eGµ\95S¼\96]µ\9bV´¦[Ã¥ZÀ¥U¸\97S¹\9bM· E±\9fD²\94D½\88;¸\89Fµ\8c8³\8aD®\97:¢\9b;±\96K©\95G²\9aJ­\9bB¤\9bJ\99\90F\9d\9eF¤\95Rª\92F®\8eK§\99I\9b\8dN¢\99F\9f\8f?\96\9dA\94\91H£\96@¡\83A\93\8a;\99\8d9 }>\96\807\91\80:\91\858\98\84D\93z9\95yG¤sD\9dyI\8dwL\87\80L\92vH\85{?\82y?\92~L\9a}U\84~Q\85\86M~}H\81\91C\86\89C\7f\93H\8c\8aI\83\8b;\85\88:\8d\8a=\83\99:\82\9b6\80\9b1\87\9d,}«9xÂ¥>wª0\81§$u¬4p¦8o¢5k¬$i¨.a©6s\9e0u¬6\7f©B\82\9eA\8aÂ¥R\95³\\96¶`\88¹c\8f­_\96§Y\9e£P\9f«R¥¡_ª¡b¨\93c\9b\9bo\9d\9bf \9cf \91c\9d d¯\8f_¬\81c¹\84`»~d´\82h±\81sµ\87n½\8as«\88s¶\92\83­\7f|·z\85¶\80\8aªz{¨w\80²q\93­n}´lx¬c\87±b\87¹s\8dÂn\84¿n\8a¹o\99Ëk\99Âl\88Ãk\92Ã…|\80Âk\81Ãw|ÃŒj\87Ãm}¸o\8b¶o\8bÆu\94½u\96ÃŽs\85Êk\8eÃŒk\8cËg\8bÊa\94Ã…b\8fÃŒe\84À[\93Qt\8dGq\8bEb\81Ba\86D[{;c|GntMuyPu\89Tv\8f[y\91Qw\97b\81\9cc\87\94j\81\87s\84~g\8e\86e\8a\7fj\85yy\84}r\8f\83t\8d\82z\8a\7f\83~\85\85\8b\8f\83\91\8d\87\8d\8f\84\87\85\8a\8at\91\8at\8b\8ah\88\88e\88\91i\99\8db\95\8a_\9b~_\98\8ek\8d\97n\9e\93p¢\9cx\90\99\82\8d\93z\8c\95r\93\85y\9c\94x\99\98g\9e\96t¢\9bt§\99t®¡d¯\9f]µ\9f\¯¢M­\95Lº\9e\96XŤYÇ RĤJîOÆ©F˲MÒ¸I̹?Ç·CνPʶSòSûRÄ´MÀ²QÄ»HʶJȽRÊ®OÀ¬ZȣY¶ª^¯©_¯¯d¦«a¤´W£»`­¸e¸ÃX¸¾X»¼V½¯S¿³T·¸VÀ¿a¼¹dÀÅm¿ÉeûY¾¾T³Ã]¯¶^±¹R«½W©ÅXª¼Q©¼P¯«_®ªf³¦^ª©\¯\9eV¶\9cO­\99Q« G£¤G§¤E±£F¶¨J®\9dZ©Qµ£O²¥[¶\9eX¹\9bLȢDèAȤ@­\9bL«\99L´\86L³\81D´\84>µ\8c;­\95?®\8fD±\99Dª\9fE¬\99Aª\9aC¤\9c@ \96=©\91> \9bG¢\8cL¨\8cPª\95H\9d\8fM \95F\93\93?\95\8eF¡\96@Â¥\8e:\9c\89B¨\887£\898\9a\835\9b\845\97\856\96|6\98{1\96\898¢x8£sI\9b{O\95~K\87tJ\83oD\81lP\85uL\87rM\94\7fR\87\81V~wR|{G\84\83?\88\83B\84\8dM\87\8bE\87\86?\86\859\80\8c8~\87A~\91=u\9b>|\998k¬8g®=j®-w¤.p\9e+r©/h°0o²3qª7g«<n¨5o£7z£?x E\87\9aR\84¢\\8e¨a\8dºV\8e±\\98±S\9cÂ¥Z ª]¤¨V¡ ]¦\9bc\9c\9cp\9a¤b§\9be°\92]¨\98e¬\88e²\87b¯\81j·\86fº\8cg­\88m­\88p¶\8bj°\80u¯\86q¯{\81±|\89³\80\8aª|\7f¯\7f\81©p\8a¨o}©k{«f\80¬_\80´q\85Ã…s\85Ãg\97Ã…k\9bÃŒo\9dÉi\90Èp\87Ã…~\8bÃn\84Ëo\7fÃŽm\88Ãy\83Àu\8a½n\91¸{\8b¿v\94Ã…y\8f¾u\94Än\8aÇc\8c¾k\86Ãk\86Èo\80¾a\88Kd\89Al\8bJ[\86:X\7f:h\8aEe|IpxBj\84Qp\80Jn\82Sr\92Nu\96Xt\96Z\81\87_y\8cl\8b\8ae\8d\85\\84{g\89ywxvq\89\80w\92uu\8dyx|\8bw\8a~\88\82z\85\8a\84\83\8b~\8c\7fy\80\8ay\8a\86k\95\82h\8d\82k\96\89l\8d\81_\9b\8ah\8b\8fn\96\92s\94\96g\8f\99y\8f\9bv\87\9dy\8e\90z\8c\93}\94\8al \8fk¡\9ae¢\9fq¡¡_§\97T¬\97Uª\9a^¨\9dS¯ IÀ\92YÃ\9dL¼¤GÃŒ\9fE¾£EóKʯCó@ôCÅÀBʺKÊ´P˼KðQýU¼³G̺QËÃNʹM̽OººQ·®QíY²¶Wµªf¯¹b©³c©¹V±±V¢®_±¶S¹ÂR¸·Pº³V¹°]¸±f²º\·¿g¸»hµºb»Âa²·Q¥¿T§®V¥µa¡µO\9dµP£°X¡§]°¬Z®¡a¦¡Y¢¥^®\99RÂ¥\9bM¯\9fU£S££I«¥P±\9bT©\9eI±\95O´\9cPª¥K±¥Q®¦L¯\95I©\9eO­\98I­«K¥¡B¬\93I®\86Lª\89<µ\88K¸\85G³\90:®\89C\9f\8bE¨\8dH\9c\93A¦\94>\9e\9aC§\9cE\9f\9cI¢\97J\9f\99O¦\93P\9c\91P\91\92T\94\89L\98\89G \8fD\9a\8f7\9d\846¦\8d6\9f\886¡\7f;\9cz6\9e\88?§\88>£\84=\9c\884\95\836Â¥\82D\9dzD\97~C\98{?\95{>|h;\8bpH\8csO\84\7fR\87\82H\88\80M\8asT\87pJ\80\82<~~F\81\8bN\8f{M\89~:\88\80H\8c\89A\88\925|\8c8t\9a6m\98Ct\9e8`§Ij¤Cv¨6k¦<j¨3pª<c§>d¦0b©>w¬=m­1q©>}ªD\83£T\8a«_\88¨W\8e·T\9b»P\9b°\\97£Z\90©_\97\9ca¡\98f¨ d\99\98o\9a kÂ¥\9bg\9e\91h±\96g¬\95a©\8bm·\91m¬\8fq´\8dkª\96fµ\89d·\85c¯\8fiµ|l­\80y·\85\8b´\81\88§\81x°\82\8a°{\8d¡p\83¢{~±p\87§b\85­q\89¾u\8f¹e\97Çq ¼k\93ÃŒr\9aÈp\93Çu\8cÃv\88Ãt\8dÃt\87Ç|\8fÀ\84\91Ãy\8dÇy\88Ã…v\94Èo\8aÈt\94Èl\87Ãn\87Ã…m\8c½q\8e¿e\8dÀ^\85FW\9dA^\94Ac\94;]\846g\88Ae\82Gh\7fHf\82Lm}Jo}Hj~Ok\87To\80Pu\86`|\7fc\84\89l\8czd\82{n\85|uy\7fr\86~\7f\86v{\85\80x\87\81~\84~\81\81w|\89~\83\89\7f\7f\82v\80\85w\8e\82r\91\8ak\94\8ak\87\8ad\8c\8a^\91\88_\87\8bn\8d\97m\87\8ep\8c\94h\87\8e`\8d\98f\92\99q\93\94o\9d\8bp\9e\8dg\9e\99l¦\94j¨\94W°\93S±\8eO­\90P®\90Z´\9eSÆ\99UÈ\99LÌ¡> AÇ¡GŨJƨIÅ©>Ì´<ʼGκEùNõR¿·UŹOþIÊÃKƹM¼B¿³EÇ°Q¾¬Lº«Z¹°X¯µU«³`©¼a«¸U¨¹[¨­\£¶Z©´S¶¹R·±[¯¬Y¬¯d¦¯]¯¿b³Ã_´¹e´¹]©Ã[¦²[\9b±Z\9a­R\9d®R§´Z¥¨Y\9c­_¤¯_¨°d\9eÂ¥_\9d\9bQ¡\9aS§\9bO¦\9dR\9e\9eW\9b\9aK¤\9aK©\9dT¨\95R©\92O®\91JÂ¥\9eQ¦\9bDª\9eG±\92L¦\96O¯\9bK¨\9dJ£\9dF¨\8dP§\84D®\8bC«\8bF¯\8cH®\87I­\8e>§\85D\99\85:\9c\8eA\99\90=¡ D¡\9eD\9b\9bF\9f\9d>\9c¢E\9c\99J\99\91K\96\93I\95\96H\98\90A\9f\8c4 \893¬\8e.¬\867§}?¦\7f6£\859§}A¢\87=«\87>\9f\8b>¢\8b:\97\85A\99~A\8ey@\93z6\8es2\85r;\8cz;\88pH\7fwD\80zM\8a|Q\84oT}nTwrJ\86sM\88wH\8ey=\86\83B\81|J\8a\85F\81\95F~\96=m\93Fj\9fAe\9cEj£CiªJf\9fDg\9a5cÂ¥7d\9d8_¦9m©4m¯9m´4y¬;vÂ¥Gw©Q|¯R\81¨[\82´V\94´Y\97®U\9a±[\8e²N\90¢Q\90¤]\9f\9ea§\9ff¡¡bÂ¥\98`\9e\99f\9e\8dj«\8c]´\89\­\90k«\97l©\90l§\8dd´\99h·\95p«\8eh¸\89e´\80i°\88u¬\81|µ~v¯\85}°\85\87ª|\84Â¥~x¤y{¢v~¯l\86±r\91¶o\95Ãb\90Ã…f\94Êi\99Àq\95Ât\91ÃŒt\8eÃm\88Ât\8dÊ\83\86Ã\81\8cÄ~\8eÀ\86\89¾z\87Ãx\8eÇ\81\90Éz\83ÃŒy\8c¿k\88Ã…p~Êg\84Ãf\82Â_\84<W\94=b\99DW\87DZ\91?c\8dAZ\86H^\89FjxUn\80On\84QfyVl\7fVu\8bNu\90c\80\90\\82\86_\83\87ev{mx\83k\84ur||pxwpvxn\86\85\84\88}\83xq\88\87|{\88w\80\7f{\82\81\80~\87w\8a\8dj\8d\83m\87\8ck\88\8ad\8b\90[\93\93a\8a\8bk\89\9cf\97\8c`\8f\8ca\90\92o\99\86s\9e\86j \8cs¦\8ep\97\94i \94k¨\99d©\97`±\9bU¬\8fO¨\9f\´\9bZáR¿ªMÄ\9eOÅ KÆ\9fRȬDÈ¥DÀ¤BȬCÌ´K÷HÇÃLÆ·MþPº½EöN¾´I¹·MÆ»Wº²I¹­VȪZµ´]¶°Z°·T¶¬[¤¬[ǻ[ª¸V¦°_¢¹Z¦ºZ®ªO¬­]³¶]¦³a©¿kº¼]«·d¯Àc§º_\9eµS\9f¿Z¢¹U£¹Q¦¹[\9b«Y¦°S¥³b¤®Y\9d¯\\9f¤T\99§Z£¢O¦¤N¢§L¤\9dR\96\99N¤¤Q¥¢L¤\91Q\9c\93P\9b\96K¢\95Q©\99G³\9b=©¤E¬\98@Â¥\99F¤¢E¢¢Q©\9aV«\88B¬\87F´\90?´\8d>¨\92Fª\919¬\8e?\97\8dH \98=£\9b8¨\9f= \9f@§\96H\99\988Â¥\98:\95\99B\90\8fE\9b\8dJ\90\8fA\99\89<\97\8e=\9b\8c=Â¥|0§\834¦x-©u8§{1\9e~6\9f\7fC\9d\87F\94\7f<¢\91>\9f\86F\9a}>\92\82?\9ct=\8f}0\89x7\8bo>\91{A\80rF\7fsMvyL}nIt}J{|L\89tB\8dy>\8e~?\88\8eF\8d\83@\87\93F|\92G\7f\8c:s\9bA{Â¥8l\9fBj¢FgÂ¥Lp§Pe£Af©<g¢6d¬Aa¬:aº7u¹?m¬>s©Hk¬O|ªU\82³Z\86´T\9d¿J\93¬S\96¬]\8f®P\8e¯T\98«_\93«c\9d\9c`\94¡g\9e£e\9b\9ec\9b\8fa\9c\94]\9a\8f`¡\97fÂ¥\8ds\9f\9bd§\90t© r£\8e`¦\92^ª\92b³\8dv¯\80w¨\81t§~\82¬\7f\81µ|~µ}\87³\85\89¤|}Â¥z\85¬r\93©n\96¯w\92¼l\97½s\98¾w\90·u\88¼l\8eÃ’o\8c¾j\84Âx\83¹r\85¸~\86»z\87Â\82\85ÃŒ~\89Ê\80\8aÃw\88Ãk\87Æh\87¶o\90¸b\8bÃ…i\83Ç[\82Ãe\86>Y\94@`\8f;c\89Dd\92>]\93I`\87Lc\85SozSa\82Mc}M]xKf{Pr\86W\7f\8ce\82\91a\8d\93h\88\84cxvbsqf\7f{f|\82kswo}xqx\85u~z\83}x\8b\81n\82\8aq\82|w\81\7fx\89\84n\88\7fl\88\82a\8a\94e\94\99e\91\98b\83\9b^\85\8cW\86\89^\98\95e\94\8di\97\88g \84p\97\87o¡\85t¢\83l\9b\89g\99\8em\9b\99h­\94^«\9b`¦\98\´£Q²¡Vº\9fL·©F³¥O¸¦S»±GȪKÃÂ¥K¦N˻Oê>ʲF˹RƹK¾³SľR¹·FùL½¹N»»T½·YÅ©ZäWÄ¥\ºµY¼©b¯§_¨¢a­¦Z³©d­³c³°`§®T©¹J°´PµµR¨°`«À\´Àe­½V²·V©±O¤·W§¯H\9b°J\9a«T\9e·W¦·_ ­Z\9c¨[\9aªU\9d±^\9c§W\98§K¥ E\9f¨P¢¥K\99¡K\9d\9eB\9d\98>\99\99K\97\9aN\98\96J\9b\9aB\9b\90Aª\8e5­\9b5¥¥2Â¥\9f;\9f\9cI¤¤J¦\9fN¤\97P®\89F´\83=ª\80:±\8cB´\8aB«\8dA¡\97D\9d\99I¨¡K©\9cD¨\98L\99\92I\9e\9b@¤\94@\9c\99E\99\98@\98 Q\90\97V\9c\96N\9d\8eG\9f\83;\96\806\97\820¡\816£|:¦y/\9dv1\9e}6\95~:\8f\80B\8d\81:\96\85>\98\846\91\85>\92x:\98y<\98r3\94|7\90\81G\8avJ}sAqyHnuMt|J|yE|\84C\80}:\90\86;\91\8dM\92\89M\95\87K\8c\91<\84\978{\91?v\8f7\82\99<\81¨Hy©JnÂ¥Jh©Lf¤;]©:c¤E[­>_¸Gcµ>`ºFm·=h¯Mn³Q\7f¿X\7fºQ\83»H\94¸I\98¯K\8c°T\89«V\8e¯Q\91¨Z\96¬[\93©b\90\9fd\93\9c]\90¡^\91\9eP\95\8bR\9d\97Z\9d\9bd\93£j\98\9dm\95¡i£\9bm¬\96n¬\92`­\97p¤\8ew\9b\7fv¢vv©\82~¬\86y¨\8a|°\86\87¨\86\8e­~\8b\9fv\90¢p\91©|\8f·x\96µ\81\96»y\8aµx\91µr\8a¹p\86Ék\8bÀn\85¼p\82¼s\88·~\7f½s\85Ät\8bÀ\80\8bÃ…{\81¾y}·e\80¸m\8f·k\8d²m\8a´j\89¸d~º_|Ha¡=o\92Hl\93Qj\8dKd\8aOp\84OoyWfxYjwT_vQl\85Sn\88Mk}cr\90b~\93\\88\8b_\84\82fu}ns\80es|d{t`sqpq\80t{|u\82s|\88p}\83w~\8bq\8c~o\88\86s\84\84o\86\88g\8f\93m\81\98f\84\95d\97\97a\8a\9a\\90\95Y\92\8fb\9d\8fd\9a\94k\8c\83c\97\85k\98\8ek\9e\8ar\9e\88i\93\8ae\8e\90z¤\88cÂ¥\9b]§\95g¨\8db¯\9c\º¦Y¼©W¹§E¯«Mº¬OÃ…\9fVˤJèQ½\9eU̬LçGéI˾Sº¯M¾¶UÇ´WÅ·IÆ´J¼¬KÇ®T»µZ½¦]¼¡[À©^³°S³¦S°ªX¯¡W·°a±¥f­³`§³Y\9f¶^£­X¨±W®­Q²¦_±¶^¶Ãd«¿W´®Wª³\§»N\99¾P\9fµH\9b³R¡µT\97¼M ¶P\9e­Y\9d«Y¥§T¢¤W§¦Rª£>¨\9eF\9d£H\98¢>\9d G\9c\9fM\98¡=\96\95A\8f\94=¡\8d<\9c\933\9d\9b7ª 8¬\95?\9f D \96D\9a\9cK©\97H¦\8dTª\91Qª~E³\81B²\8cJ¨\81I£\91KÂ¥\9c@\9a¡B¢\99I©¡J£\90@\94\96K\9a\93F£\8fJ\9c\95I\93\9fB\96\94H\9a\88U\96\87S\99\8fF\97\8a=\97~C\97\8a8¤\84:Â¥\83@\9e~8\95\84,\97\863\96\861\90z=\95\80C\8a\85:\98\87@\8d\8bA\8f\87>\8a\7fI\99\84C\98\8bB\92\81F\91vJ}vMw\86@yyO\7f\86J\80\8dF\86\8a<\86\8bH\89\91F\94\87I\93\94M\9a\90L\90\8cL\8a\97J\84\94E\86\95;\81¦I\80¦?q£Os¢Ik ?c¨Df¢:f®7_¨C^¶BX«C^¾?b´>g¸Go·L}·D\83®R|¹M\85±I\92°U\8f´S\8dªN\88·Y\95«b\93§\\8a§V\86ªc\96\9dg\8e£_\98£R\96\94U\8d\93U\90\9a_\98¢h\91\97d\95\99d\9a\9ag\9c\9dc¦\94b§\90i¬\92~«\88m\9dzm\9e\81m¡~\7f¤\8d\87¨\85}®\86\8d¦\86\8e±\84\89¨y\8f°\85\92¶\84\90·\83\96±z\89·{\8b¿y\96Æp\93¼r\89´x\8b¹rzµt\88¹|}»y\8aºq\82Ày\81µs\87Âu\8b½h\8dÃm\91¶b\90½^\8c¹e\90¾c\84·_\838l£Bx\9eQ\81\96Rx\96Tx\8cYo\88Yh\82Wl~crz]jy\hwTj\83Sq\8c^r\8d[r\8bh\83\89j\7f\85kt\80n}ybxrhpwfomsny}zzt\83z{\82mx\82b\83\81h\8a\80q\88|j\89|i\86\85h\82\93^\85\93e\87\96f\91\94^\8c\8ac\91\8fd\8a\9ae\91\97a\8d\97l\90\8di\91\92c\94\88n\8b\85r\8a\88h\90\83o\93\85u\9f\8an \91f²\93h´\93e¹\99^²¢S´­Y´¦U¹\9eX¸¢LÀ«J¿¢SÀ£TÈ\9b\9fJÄ©B¸¶J¼³J˦KðOìQδXóQÈ°PÉ®VÄ®M˻Sº®W±¨X®®U­´\¢ª^¡¢T¯«Y¦¶b«²^Ǧ`¥´a©©U¥©P¨¦L¬¤T«­T¶±U¨®K¨¶M§¹KµT\9b³R\99ÀO\9f½L\9a¾O¥¾W¡¸O °S¥£[\9f\9dY\9e§T¢£R \9bD \9d>\9e§; ¬D\9d G ¥:\93\9f<\90\9f8\96\97>¤\94;¦\903¤\982¢\948\9d\8dK \8fL¨\99T¡\99L²\98V³\8aPµ\82S±\85K¬\84A´\7fA·\82@ª\8eG£\99L£\9aJ«\9e<­\9d>¦\94G\9a\8eI\9f\97E\99\92D\99\9b@\97\98F\93\93D\99\8aP\9c\85A\9a\89>¡\84G\9a\87> \8dA\9e\85D\9e|D\9c\829\89~;\86\881\88\7f=\85\807\89|E\89\84E\89\8e<\94\8e?\94\8cI\8a\95L\8a\88M\8f\8aF\83|P\87~O{\84At\83Dy\82>\83\8bH\88\8e=\90\93B\89\98?\8f\8fL\89\8bD\92\96G\8f\8eJ\95\8eQ\87\97V\8a\9bK\7f\97Bx£E|£Au\9cNn\9aHn\95>k\97=j¡C[¤@Z²>^¸H]°Ba½=`º7m³5p½?l³Ey³AyµF\86¸L\8f²O\87²S\8c»[\90²_\95³]\8c§]\92®\\87Â¥^\90©`\94£Y\8f¤P\91\9bU\8c\92]\8e\94T\8c¢_\96\9e_\98\9dl\9d k\9d\99i£\9cj\9d\96kÂ¥\85v«\84yÂ¥\7fp¡|}§\81x¤\85\7f±\8d\82´\8d\8f­\80\8c£\8b\89ª\88\90µ\81\91¶\83\94¯\86\91·\89\8f·\86\95¿\89\9a·\81\95·v\92±m\82µt\82Ão\87Àu\86½~\82´z\86®~\8d°w\84»o\92»n\91´f\94·\\8f³^\93´]\86´Z\80´d~Ih£Jl\9fOl\9cWo\94\m\93\i\86Zf\88Um\81So\81\j\82Tn\86]k\7fYp\82ao\89iy\85c\87\82p{\8berzg\80\81[ylhykozrwwv}ps\83{s}\81e\88}o\8a\7fa\80\7fk\8dne\8b{b\8ft[\8c}a\8a\93a\87\8bg\88\95b\86\8fc\94\98d\97\8d^\99\99d\8e\93r\8d\89p\8d\85s\8b\8ez\88\87s\88\8bf\8f\82d\92\87s\94\85o\9f\87s©\98sµ\90d¶\97X¶\9cYª¥N²\9eK²\9cF¶\9fI½¤E¹¥EÀ¦DáPÉ®AÊ«FÆ«CÊ©KħGãSîRÇ­MƨIÄ­RÌ­S©Q¢R¿¯Z¶®U´³T¥¯S\97°V«­S³¯^¤µUª·X­«^¢²f¤¥[®¢P­­L³\9dX®§Q­´P±°Y¥¹L«±X\9f­\¢¯S¡·G\98ÀL\9bµM¢·U­±F¢©V§£M¤¢O\98£N\9d\9e?§«E¡\9bE¤ª@\99£J ¦C\9b\9e?\93£4\97\94C\9d\98C¢\935\9d\986\97\9b9\97\909¦\95:°\86K\9b\92M \9cN¡\8eD¬\82K¯\86G´\8aJ­\8a<³\845¬\877­\8f;¦\94E¨\96J¦¦C¬\9b@¦\95<¡\8fI¡\93N\9a\9bQ\96\9eI \94O\99\99A\99\87K\9f\90K \91=\91\84C\91\85>\9d\89E¤\81K\8f\8a=\8cv;\8d\866\93\8f>\8a\89A\8c\84B\84}D\85\7fJ\84\85?\8c\8eL\82\91H\8b\88A\81\87E\91\87K\81\8a>\7f\82Gw\8aHv\80Fy\86L\8c\8bI\8a\92E\8f\98H\87\92B\84\8d@\85\93J\8b\92L\88\94B\8f\91S\8b\9fK|¤Cw\9bH\80\9dA\82©@\81§Cs\98Jk\9f;rÂ¥Aj¨@`§FT 2X¦?g±:]­@nµ2h°;p¶8r¸:o°Eu½>\83ÂG~½F\89¶L}±S\80¹_\87¯[\7f\9fQ\81ªa\8c­_\8c£a\84ªW\84£V\84\99T\97¢K\90¡P\8b£_\8e\96[\94\9aj\95 g\9a¡k\99¨l¦\9cj\9e\8do\99\8as\99\86l\9d\82n\9e\86y£\8d\86¶\8e\89Â¥\87\8a®\8e~¢\84\89©\96\91ª\92\90«\7f\8eµ\8a\8f¹\86\91Ã\85\9a¾\83\8dÂz\99Ãr\8f¹v\89µ\7f\83Æ|\92Äp\82Ã\7f\8e²z\8a²\80\89¹y\80¹l\87¶]\86¬b\87³^\87¶`\84¶\\8c¯V~£i\89<p\9aJo\9bQk\9bUu [k\93Tn\8fQm\89KkyLfy^r}Xr\87[e\8cXp\85dn\85l\80\8bd\82\8b`\84\80fz\81js\81cwrjpuvvxsqq}syz{m\81yj\86{h\80\80k\8bya\88pg\88p]\8ar^\88\81_\88\85c\88\88Z\8b\85Z\8e\97V\86\99a\8b\92c\9d\91q\9e\95r\96\89s\94\89l\8c\95t\92\86h\94\83k\8d\83g\8f\7fk\9e\8fj\9d\8dr¢\97q¯\93l¯\98b±\98Y±¥K°¡G´§Q´©I¯ªC²®Bµ³BÇ«EĬ@Ä­LæNÆ\9dEΠUÓ£XÃŒ\9cQË¢EÃ\9eOêXέ\Ç Y¬a¾®ZȻY°¯Qª®M\9cµY\98·Q¥±X­³P¦³L¥µY¥«Z©®X¬U²¨ZǤMª¥[³¯\·ªQ²±U¥¬W¡±_\9cµZ£³N\99¯I\99µN ­H§®N¢«F¬¦E¬«@\9e§I\9d¨A£«5¦«E\9b H¨¢P¤\9aH\9a E\9c\96:\9a\8d7\9f\93=\9f\9c@\95¡7\9a\9d=\9a\972§\8f5®\88C¨\99J \99Bª\8bL£\88I¡\86H®\84N¹\88M¾\90:±\8a4³\8a>¹\92B® A® ;¥¡B©\95G­\96H\9e\92C\9d\98O\9d\93I\9c\95P¦\96M\9e\95?\93\9b?\96\91C\99\92I\93\8eB\8f\95L\98\8dM\91~A\8a{8\8a\88B\8f\85F\87\8eM\8a\8cK\8a\87M\87\86B\88\95L\8c\92I}\94P~\86F\83\87@\82\91F}\82=\84\84@{\8dBw\84B\83\86A\89\88M\86\8b?\8e\96@\87\8d:\85\8e@\8e\9fE\8a\9eE\86\9aL\91\99K\81\9dN|¦I\83\9dHx£G\80©<\82¢>zÂ¥=i¤A_\9dHd¤@^Â¥9^\9c7]¨Da©CaÂ¥Ek¨5p«:u¹4m»Au®C}±N\81ÃG\87»D\85½Qw½Mz¹Pz²Wx¨Qz¨Q\85«V\8a£Y\85«Y\8d Q\85¡R\94\9bL\97¢Q\97 V\8c\9bd\99\96h\9b\97Z\9d a\9b¦\\9c\9ce \99c\98\9ck\9e\8fuÂ¥\8cr \86z©\96z¯\98\85°\8b\87\9f\8e|¬\8c\86¶\94\90¯\8d\91ª\8c\84¸\91\96À\85\98¾z\93¼|\8f¾w\86¿z\89¼\7f\8eÂ\82\94Ç\83\9aÂy\8e¸\81\7f¯}~°\82\86´}\8b²e\8e°]\8c³`\8e«e\8b´T\90«R\89\9eX\87¢b\83?n\9fKn\8fTu\9eV}\9eVu\90Qy\92Vp\85Ln\87Qq~Qk~]k\80Wq\88`r\8eWy\90_z\82]\82\82c\80\82hv\8brz\83s~\7fo\7f|t{py\7fzylvvku}iqt{osutwxu\7fqs\82qc\83n^{\80\\88\87a\8d\85]\8b\7fb\89\8ba\8e\9bc\91\97m\97\98h\9a\90v\93\86t\8b\93w\8c\92s\97\8bq\92{i\8f\84q\95\86n\97\88t\95\95p£\97p«\96p²\9e[­\99]©¦Y¯§Cµ­B¿µK°§M©²F±³@ôJÅ­L̪FǨAÃ’\9eLçRÃŒ\9cPÙ¨KÖ¤MÊ P̱OÇ¥YÀ©O¸¡P¼±Z°¶Y¯¯O¢¹O\97´Q¤±M\9c³W\97­V\97ªN\9f£O\97§S¢¨Z®®V¤¥W­¥J§­M¬°`³ºX§½M¤´R¬¿d§±`£·O¢«M\9e§I\98¯M\98¢S\9e°@£ I\9cªI¥§= ©9§©2§°8\99¢;¨¤K\9c\9dAÂ¥\9b9\9f\9b5\94\92>\9d\9f5¡¤@\98 5\9c\9b@\9b\8c7Â¥\96:¨\8dD­\8d3£\93<¨\8fD¯\85K·\86L¼\87>´\8d<½\8eA¶\92Cº\95?¹\9d7©¥>« F§¢L­\9bBª\98J§\8cP\9f\8dH\9f\99S©\92M\9c\9bL¡\88B\9c\8b<\94\91H\92\84?\98\88A\8a\90F\96\92M\8a\80@\88}9\8d\8cD\91\84@\90\8eM\83\89I\89\8bI\8a\91K\80\98B\7f\9cHx\95H}\84C\7f\8bB\80\8fF{\8cB{\8b?\7f\86;\80\80E|\8dN\86\86K\87\8b<\87\93:\87\99:\88\9a>\82\99@\84¦B\89§F\8c§E{©J\81°D\83\9bC\81¡Az¢?\89¤A}¦:f¦>l\98Hr¡:c 6]¡0e 6c¯EY¬:_£:k¬:hµ7jª=i§Iq¶?uÀNxÂFp½Do²Hp²En»Jl»Ft²L\7f¯T\89±V\7f²Q\86¯M~\9fV\8c«L\92¯L\8b¬S\8f£`\9a\9d_\98\99[\9d V\9c«b\95\99g¤\8eh\95\8bq\9e\8cs\9b\8eq\9f\85}©\88\85§\94\87¨\9e\85¬\9a\82«\9c\85»\95\8e°\95\8a«\8d\8bº\86\91º\83\8d¾\80\95¹\8c\8f³~\8cÃ\89\91¸\88\93¼\86\94º|\91¾{\81³\82\8a±zx²\82\81­o\8c°e\88­j\85®[\8d¨a\8c¢U\84§Y\88¨]\88¡d\8bA|\91Eu\94Jv\97H\7f\98T{\90Ts\97Jr\97Q{\86X|\93Ss\8fU|\86^s\88Uu\8dX}\8a^~\8dgu\80e\82}i~\85ku}u{\80n\84{k\80mlzlrunwfishjypjtmwug{xdr\83om}ph~uc~ye\89\83l\82\7fd\95\88k\97\8bf\9c\8cq\9a\94n\9c\8bm\99\88o\99\95p\8a\91n\8e\8dh\92\82h\8e~b\93\83m\90\90k\98\99c\99\99Z§\9dbª\9c\°¤\¸¡Y°©I¶ªN¹µB½°H±²D¨°;°­C¤JÃ¥FÃ\9fFÓ\9eJÑ\9fGÑ\9cQË\9d[Ó¤WÖ¬XÈ©N´QÆ­N¿¨D°¤J¤¥M ¶V¤¹P µV\98´N\95¨H\9e¤E\98Â¥O\94°_\98«]\9a¢[§ªW±ªL±Q¤²X©¸X¡Ä\ ¿V¦º_¨Ã[§²P\96°V\96±F\97ªB\91\9f?\97¢I¡£D\9f§A¤¢?\9e¤8\9d¤5¨¨8´7¨©5§°?\9f¨G\9a\9fC\9a\9e:\96Â¥<\97¤>¡¥<\9c\9f5\9e\969Â¥\90A¦\915¤\885¨\898¨\8a5­\96:¯\93=®\96Dº\8e>Â\86GÄ\8eHÃ…\98E¾\99>¼\9bD´¦?¬­J°¢D¢\93R¡\91O©\97J¡\8eJ¢\98G©\93P£\8fEÂ¥\8cB¨\90A \8aF\9d\8fC\90\87K\95\89@\8c\8eC\93\81P\8a\81K\8c\88B\85\8fD\88\96I\7f\8fP\84\98V\83\95N\86\9aP|\98Ax\8dOs\89Kw\86G}\89Mu\8fCy\8fC\80\92P\7f\86K\81\81K\85\81=~\88@\84\89=\8c\92?\88\9b:\8d\9e8\8d\9f?\7f¦>\81¨C~­I\81¨>\83\99G\87\9aD\7f\9a?~\9aAy\96Dt\9d?y\95Fr\9eAs£:i®6c©.Zª6d¯8aª=jª5l°>c®Ab°E`±Gm¼Md¸Jj¹Hg¸Lq·Hj½Cn¼DyµA}­N}±N\85©W\8f±S\88ªR\97¯M\94«W\93¢^\95¤_\93£b\9b¦U\9aªR\9dÂ¥_\95\99i\9d\94h¢\8dw\9d\8et\9f\8f~¦\8f\82\9e\8f\84\9d\95\7f«\9e~©\9e|«\92\80°\96\88³\8b}º\88\81µ\91\84¸\88\8d®\85\90³\90\91®\86\8a·\8b\8eÀ\8d\87¾\86\85¾\8c\82¸\88\84º|\89µ|\83µ|\7f§o\81¢l~®f\86¬d\89©]\84¡]\82\99`\81\9b\\8b\9dT\8bI}\90Mz\96Ow\8bMx\89M\7f\94Pt\8eH{\91Mq\8cQ{\88U~\8cTr\89Uw\80cx\81^{~[~\83fw\86`}\88i~\84jx\86mwyt\81{z}mmrmprdnqbybdmjuwlrnessnr\84rk\84yhyrf~{a}tc{{a\87\80b\90\7fv\96\8bm\95\90t\90\8ev\96\7fn\89\86n\85\94t\92\8an\8b\89g\94zm\94~h\9e\8ag\97\88b¨\97b©\9cd­\9d\§§Z©\9bE©©?®¡J·²B¾°O²§K¸¦H¸©G·±OÉ¥>ȦJÃ\9dKÃ’\97OÑ¢HÉ£FïNâMÇ°VëKɬP¸¨L°­C­°N§¯]\9d±Z£·S£¨P\9e©J\9a¡K ¢O\9d¦[¡«V¢±_§®]©¨U§§Xª¶Z¬ÀRª½W¨µO¥¾V ¶T ¸Q£²R\9e­O¥¯C¢¦A¢©H¨¤G£¢K£¢;\9a\9c:©°D¤­D ®6§¤>\9d¡;\9c\9bJ¢ D\95\9dC\95£E¦«5\9e\9bC\9d\99C\9b\9fD¬\98A¢\90B§\900©\842«\907¦\8a=®\9a>»\8b3º\9a@¾\90CÄ\89B¾\98:À\9f:¢A½\9b<ºªH¸ª9¥¢N©\90I\9b\94D§\8dI­\90C¤\9bM¢\8fD£\858¡\8f?\98\87D\92\8cB\9a\85C\94\92A\8d\90>\88\8dP\90}O\92\88K\89\8bE{\95?w\84>z\90=\87\91>\84\9dC\82\96Ez\92>~\8aKw\92Sx\84I|\93Dv\8b=\81\93M}\8a@\83\85A\81\7f=v\83@{\8fA\84\97B\8c\91?\87\9a7\8c©>\7f«8~ª<\84¯?\80°4y\9c=x\93Eu\9b>r\908w\992u\9e5q 6n¡B^ª2d£8W§Agª:\²8`¶6]³Gd·Gf¶@m³Al¸@n³Ej¾@k¼Bo¯Jm·Mq¸Qt²EoªKt¯Bx¨J\8bªQ\7f«W}§M\8a±Y\99³R\97­Y\9c§W\91¤]\90¤X\95©_\91 k\95£g\9d\94o\9d\96w\9a\94u¤\8f}£\85\84\9a\89z¦\93\82 \95}©¢{£\9e}µ\9fy¸\8d\81±\86x°\85\85º\8e\92³\87\84²\8a~²\93\84²\90\89º\86~¸\82\88«\86\87³|\81¬\87\85©x\88¬s{¤q}Â¥f\7f«r\82¨^\8b¨\\81\97V{\99XyÂ¥^\8a¢R\89Ly\8bL{\8cT\81\85M}}BpzDo\84Fk\81Px\86Rq\8bUw\7fXqxRtoSxucw{atz_z}a\85\88e\80\84ay\82ewpykm{p{yrsppblvmnlkuvwstr{qq|ne}pj\80th\80ug\82xk\88sc\83yl\8f}s\8eyt\8exp\9b\85n\92\84x\88\83p\8c\89e\81\90h\83\8fe\8d\82g\8ex`\97xj\93\80]\95\88_¦\9b`¬ X¤£O¢¡I¯\9dD«¡;±¦E¾§Jº®I³«O·±P¾®N¬FΩDÉ¢=¾ BʦDÓ DáM¬LɯSÊ°QƬXº³M´¥U²¤L¹±L°²R¤­W\9f°U\9fªM ­Q\9e¬S¢\9eP£¥N¦³R¨¯W¸¸T·³`²®Z¯¼Zµ¾QµºV¬´X§½Q¨»N¤ÃM¦¿L«¾J¤·O¦´Q\9c²Mª\9fP®\9dG¢£>\9c¡<\9e£@¤±F¡±>\9a«;\97¨@\9d\9dN\95\9dO\9c¡?¥­F©¨;\9c\96?\9f\94A¦\9fIÂ¥\99N \98=¢\928«\8a;¢\8c7¨\8f@³\937³\9a9»\970¾\8e0³\95?º >Ã\9f?À\99H´\96C¬¡9®§<¤§@£ I¤¤D¨\99F¡\99C§\9aG\9d\95>\9a\857\9b\82A\99\85K\99\8aO\95\8fG\94\86O\99\89J\98\81Q\8a\81R\85\7fH\8c\89J\88\89:w\89;\82\92?\83\96<}\937v\93Bt\96D~\8eMq\89Nm\8cHm\96Gr\92F|\95Hz\87Dw\89N|\84L|\7fFu\86H~\86E\88\94@\88\9dE\82­>\86ª1\89ª0y£/z¨3\81£:w\97:u\924u\932p\99:v 4p£:\¢5W\9f6X\9c>e\9cCd¤9`ªB\±9f¶:d¯Fe´Ij³Ce»>j¸@m»Bf³Dd»El»Lw½Os­Jt®Bv±G{ºQ\7f¶S~³W\83³V\82²P\8fªY\92´[\98¯[\9aªb\95¡f\8f¢i\8c\9eg\92\92g\98\94j\9c\8ek\9c\8eu\9b\95o£\8bt¢\91\7f\9f\97\85\9b\9fx¢¥w¬\9c\7f® x°¢wª\93\80­\8c\88¯\94\89¦\92\85¬\88|²\8ew®\93x­\85u©~\83«\83\85°\7f\7fª\88|¡\80\80\9b\80\85£p}£n\86\9fm\86\9ed\86\98c\82\97V~ V}\99]\80\9bY|@x\8d?\82\8aPtwFsrPi|@g~Dy}I|zEv|HiwWqjUtg\kq`pvTp{av|ay\85bp~_\80|bxkrousq}|iewd]uljpcvuqqt|y\7fkm{qfwqk||g\85|c\8ezb\85}p\94|m\96ql\90~i\98yn\93\85f\99\8dr\89\84z\8f\84g\89\87j\8b\86k\93\8bo\9a\82f\94qp\99\82l\95\8ci¨\92]´\9dZ°\9aR\9e\9aR¦\9eN©§A±¢AÅ¢Q»¦QæXʲKǶEά@Ë©?é<Ç©>ÃŒ\9b=É\99GÂ¥I¸±KúIÀ°UùXººU°¦N®±B°°S©¸W©«R¤®Y\9d²U¯®V©®L®¦Q£ªS¤°Z±²RÀ´RùO¿°O¶¸W¸²J­ÀO¼¶\¥ÅO¥ÀOǦN¢¹L¦´Rª´WªµU\97¬R¦±H«¢N£¥J\9c¤A©ª<°²I¡±<£¦@¤\9d<\9fÂ¥C\9a§L¤\9f?ª¡I§¥6¤¨8\9b\9bK\9b\9cC¡\95Q¤\97E¡\98G\9e\9aA«\8f?¢\9dB´\93=³¢=¹ 1±\9c5³¦>¹\94@½ =¼ ;¼\99C°\98G´¥=©«A¡«K±\9aD¡§CÂ¥\92DÂ¥\96I¡\8bA\95\8b2£\8dG\9b\8fR\91\8eJ\95\95N\9c\92O\93\8bP\97\83J\89\86I\85\8dB\8e\90G{\94A~\93<\82\8bC\8a\9a5{\919t\9cD{\90I}\8dOw\8aCo\8fHp\92Lo\90At\8dB}\85D\84\90Kz\82Ry\86E{\8cD\85\99D\7f¦>\80 <\84¬2\89®<|¤.x¯.v¤;n\9f;r\98>f\9a:i\991f\99.o¤0i¨2\ ;^¢>U\99;\«7dÂ¥3_°7b¦6e§9a²K[­@Y°>\¬Gj»?b¬>m½Io±Hu¹Nl¼Tk¹Gm´Bi¬C|µO\81¬F\8a­U\86µT\90µR\88¦W\8f¶\\9a®Z\8b±b\94±e\84¯a\85\9fa\8b\96f\91\92k\8e\9am\91\95s \96i§\92w¤\93u\94\92\83©\9fu¤§z¬ v\9d«s¯\98y¯\8d\80°\8e|²\97\87¨\8e\83·\8ez®\93\83¯\96{¨\90s¨}\86«w\82§\7f\85 ~\81£\81\83Â¥p{«i\80\9fq\80\9ew\8e\9eg\80\94h\84\97X\8b\93R\8b\98Sz\96]v;\86\85>y\7fE{\80HpwDtuHi}Ivu=vsCmjKhhTfnPohRsrOhtTfv[t{ds\84_m}Z{te{svwwvmowigyghxkouiozxprwqspfwtft{k}yk\7f\80a\92wd\93oc\95si\96~`\91~e\9b\81d\93\89o\98\8dq\90\81t\8b\8cn\8b\87o\8e\88c\99\88e\91\84k\99zi\97\89j\98\89e\9e\95Zª\98Z¡\9cW§£T°£P«\9c=°£G¾«JȧOƯSóFαJˤMÆ¥@à9˪9Ë©9áGȱB¿µH¿MÀ·V°°K¬·O«¸B«­A¦¯H¡³M¤¼O«´T«®W®¦T´\9dC´£@¹¯M¦V¹ºV¹µY¶µLîL¼¹G¼²R¼¹OºÂT¹ÅS¨ÂM±¹Y¦T°¹\©¸Z\9d²N¢²G§§G«¡I©\9bD¦¥A­°Dª´C­­<©«@¤ @ \9cH\9c\9aO¥¨Mª«Hª­A¦©H¥«D\96\9cH\97\97K\99\8dS \92S¢\8cOÂ¥\94G­\98G®¢=±¢;ȴ5¶ª5·¥2¼¤.´\9a2²¢<¾\98=Ã…\979»\9f>²¥:°©BÂ¥\9fEª£H¤\94R\9c\8fJ¦\8a@\9e\8d9\97\96I\9a\92L\96\8cN\94\8bK\9b\89O\94\92M\95\96F\90\8cH\8c\99E\86\9c@\8a\93<}\98;\89\9f5\84\97=\86\9d;w\96@\81\8eKy\90Ep\99Hr\9eEu\91Ir\91F\80\8aE\80\8dO\81\8bR~\91V\80\95Vw\96M|\9eA\83¦6\8aÂ¥.\8a­4\88\9f:\7f¢4p¬6m¨2nª7b\9b4h\997i\985m\972_¡=ZÂ¥4Z¤3Y­5bÂ¥:g§,a©-d©6c\9f5a\9d3]§BR¯BV³DZ¯Nd®Fe»Mg»If¶HvºKt¶Vo¹Qj¬Ij«Fx¦E\7f§F\82¦M\85°Z\82¨[\85©c\8bµ^\90·Y\83¾[\82¶Z\8c¯\\87¨h\85¢r\91¡p\99\9eq\93\9dl\90\96j\9c m¡¤q\9a\96z\9b\9fy¥¤q¨¥w\9c«u \9cw§\95\82«\9b\84¤\94\84¢\96\8a±\89\82·\83|­\89w¤\83x¬\83} {{\9f~z£\81z¤v{¡w\81¬sv®w\81ªs\84Â¥f\8b\94b\8e\96\\91\8cT\8f\96V\8a\8eU|C~{Fv\86?y|Lyq<ip5av5jx=msExuLnoHykPygSllHnpOvsWsnVonev{^mqlpsm}f}nkrrdshgvqbqevpuntxpisc|}py{p}pj\7frf\92~^\94uh\8cwo\94ym\98{n\8c\8am\93\82o\92\82u\8d\80h\97\87t\91\83q\91\84g\9a\85_\92wl\9fqi\95\85^\95\88]¦\8aV¯\98Z­\9eR\9f¡S©¢J·¡?±§>¼µ>êC¾«OÆ´CêQɬK¿¯HÆ°>Ó°7À\9c=Ì£EɯJ¾½KÆ¿LȦL°ºO®´N³®L´·F°²J®¦=¤³B¦¶U²¸V©¶G³®A¸­?¹²D±®O¼®XôböZ¸²V¼µ[¶´Zºº]ƾW±¸TµºZ¥ÄM¦¿H´¼U¯Ã\­µT´¹E²´N®®E¯°Fª¤>¤®E¡¦> ®CÂ¥\9cA¨¤;¡\9a?Â¥\9d>¢£@§¨C«¦C®©EǤ?Â¥\9c?\98£E\92¡O¦\91C\9e\91F¤\94F«\94J®¤H¨\9e>®¡'ª¢*´+±£3¯\9b1ª\97@³§>¼\9f<³©=¹¤>¬¬9¨«:¢¥@®¢@¬\9eA\9d\917\9e\992 \8a<\98\9a:\9b\99E\9f\90< \8fD\98\99G\94\95H\8f\89>\86\8cF\91\95>\85\90B|\9bA\8a\986\81\956y\9a;z\9eIx\9c8\81\978s\94Bm\98Fy\93G\84\98?\81\9cH\88\9eM{\95D\87\98L{\9fB}\94M\80¨G\87¦7\80¤2\85ª>\8a±:\84¦)q¨/z«9h\9b2c\988f£=n\9c<iª:j©-^¨2Tª@Y\9e1i­4]®.[µ*_¡3[¡7[­1\¢:^¦9Y¦9f¤Arµ?gµOfµLx¹Rt±FsµCjµOg¹Pq¨Hl­Jp°Cr­K\81¼Zx§O\88±_\8dµW\95¼P\82²W\84±V\86°f\8aÂ¥r\89\9dj\8f\9fj\9dÂ¥l\90ªf\9f\9cn\95©u\94¦s\90¢q\9c¡l\9b\9fp¡\9fp\9c«o§©s­\9f|\9e\9dv\9e\96{§\92\83Â¥\8f{¶\8bt²\8bw«\86rª\82}Â¥\8ar\9e\81\7f\98\80\80\9fuz¨|\7f§stÂ¥s\88\9co| h\7f\95e\87\99a\89\92[\88\95Y\83\97Tu9h\80Ar\7f=u}@yv5st3jq>q};ryF{mFziGwoOvnX|iO|ePrp\oif}d`~glvkqoe{vktyhmhjqeawaholouygizklzrsyj}tc\7fpf\88\7fm\8d}h\8bua\8a}i\95wd\95{e\9b\86l\94\82t\9c\89k\93\8bg\8f\86g\99\8fv\9f\84l\94\85`\99wb\95td\8c{a\92\83c\94\91]¢\90P£\8fM¡\92D¯\98Gµ¢?³«;¿°AêF¿²L˹AÈ®FÇ´OèFìMΧBÄ\9aLÆ\9bRÀ¦PÄ´R¶ÃN¹ÃP·¸G¶µE¶ÃH´»D±³;µ©<¬²A°°H©¯F²´H¾°C¿§<ȤMĪUÃÂ¥[Ȩ\¿¯S¸«P¾¨R¶°\įbóY·½`±¿\«½T©·M¯²F·¸M¹»Gµ¹JªºD¬«E±¯I§¬F¤¦J¨¨D\9a\9f>\9b\9eD\9a§GÂ¥\9f<£«>¥®/Ǥ2°°<³¯A¥¤; ¬H\95¤N\9c\9bB\9a\99?\9a\96@©\9d>¯\94C¨\99D£=®­(±\9d4¬\9d/¦\997§ 7¢\9d@®§@²\9eC®¡?®\9fFµ£=°\9c:«\9f;²ª4£:°¡>®\98:ª\949¡\930ª\8f4£\959\9d\8eA\9c\94<\99\92H\97\90E\8a\98@\8c\98I\82\99N\84\8dD{\95G\7f\8f8\87\9bG~\98G\82\988\82¢7w¨Hs¡H\83\95E\87\97?~\9dB\7f£L\80¨E\82\9fAv\98?z D{¢J\81§B}µ7\88¸=\8d¸-\80¨-{Â¥,u /h§=k¡9a¢3c¦9i°8cª)U¬.Xª;YÂ¥<c¤;W©:V¯,Z´*W®4W¬:\­5Zª?b\9f?b­In®Al²Ir¹Pq°Dx¬Ci´Dd¶Og°El«=q¢Bn¨Ny¬Yy¶W\7f³W\80®I\85³Y\88²W\82ªU\82©S\86«e\8d¨n\90¨h\9b¦a\9f°i\9dªg\95®l\99Â¥t\96\9ax\91\9fr\99\98n\96\9fl\9c¡m£§v¬¤w©©k®¨j¨\96y®\89\7fª\8dwµ\8cz±\81}£\8e|¡\8bv«\85z£\81z©{|\9d}{\9d}|®{~\9ex}\9fg\85£b\81\99`\81\98\}\9cb\82\97h~\90_}9w\841g\82;o\812uw6ny+u{5rk:y|;xs6yjD\82hGubH\7fiPvfU}ePwbdoa^qe_u^ulmwu]w}a}y^uj^wuasqto}dr\81mi\82fw{n}yb\7fid\8bqp\89\7fo\8a\84k\86\89m\87\86i\96vj\8dvo\8a\83r\8d\84v\96\89k\96\85r\8e\8em\8d\8de\94yg\8c{_\8dzf\9a\80d\8a\89^\99\92P\9b\8aR\9d\98F\9e\8bAª\9eJ«¡A»\9dCɧHʲH°PÅ»Iέ=άMŬBˬBéMÄ©GÄ«VβKÀ®EðJýKÀ¾I½¹EĶG¼´G²²;ò6´¸Cª¨E·³Aµ¥B³§D¾¡FïBȨU˶RʱSéJóW¸¶V³»S½µ`½µU¹·V½·^ȁ\¯¼V¯³IÄ»H¹µI¼¿M²²K±«?¨¯@¬¯K°±=§¥C¥®8£\9e;¡¥@¦«9\9e§.¦´5¦¨;»/©\9e2¬«;\9d¤D\95£G\96 @\92\9b9\9f\9f;¬¡8«\9f@¢\9aF¦ 4¨­'¤©&®\9e0¤¥2\9f©5¦¡-²¨0°¥A¦¨;²£6²²D­°B«¤5ª©=°©<¶\987±\9a5¬\991°\943¦\9e-¥ -© 3\99\96=\9d\979\96\9bM\91\9dK\8a\99A\89\8eL\85\97P}\8f>~\968w\94<y\98A\7f¤9~\9bE\81\9d7\80Â¥9\81£9\7f¤9\87\9dJ\81©A\88¦I\84Â¥G\83­E\87\9dEv¦7\82®7t¦?\81½3y®?|­2w¤2{\9d4n 7t±>`±1Y­4a¬8Y­-R¨/X¦6Y­9`¢8b¯7\±)c¯7Rª?_«7gª7d¬A_¬Fr§Gv­KrÂ¥Ju±LvªEo´Km»Ni´No¼Bv­<pªGy²Kq¹Uv²MrªR\82°N\7f¸G\88³R{°U{¯V\90°]\8a¢k\95Â¥a\96§b\95¦i\97 r¡­r¡¡r\9e\9bs\92\9cy\9f\97r£ p¦\9fm\9e«q¦¤g£§b©ªk­\9fy\9f\9ax¬\95t¯\93l¨\8fx®\85y¨}hÂ¥zm\9cvz¢\80~\98m\87£u}£{\83¨o\84¢d~\96b\88\9cm\88\8fi\84\91W\82\9cV\80\8f_z\1ei\7f%m}$wx-w\7f5\83s-~v*{r8un?|t5ti5|cD\81bJw]HzZLxbQx^]|j`oilubksdyyXwuX~oXvqasw^n\7fkw\7fou{kzxpv|ey~f\84sr\82{o\91}q\94\87s\8b\83r\86}h\87zh\94ze\91|s\96\85x\93\84q\95\81w\93\86m\94\83p\8e{e\8fyh\8c\83\\8c\83`\91\85R\8e\94Q\9c\91N\9d\8cL«\93N¦\98Q±£H²\9eDáLɪKÈ´D÷DιAÕ°IέIæIêMîQÉ©JôCůAøIÀ¼LÅ´RÊ°IìGøB¸¾:¾¾7²À;°°;¸²:½¤D¼¨I¸¤LÅ«FòK˱CÇ°KþR˼QúR¾½YÅÃUùY¿¿[¾¿W¼·N¿½VÄÄMÀÃQ·ÂO¸µR¸±P±G©´F¥µ?\9f¦@ª¥5££1ǻ-\9d¢/\9f©2\9aÂ¥9\9a©6\9dª2Â¥\9f,\9f /¦¥1 ª0\99¤? ¤A\98\99C\95 A¢\99@\9d\98;¨¥=®¡3«¦/©§*§¯5\9d¦1£©2¢\9f+¯¢+´¥6®«8­¶A¥°@ª­A­¬@±°:´¨:±¥?¬\974­\927®\912Â¥\926  1«\959¤\96A\9a <\9e\9bE\9a¢H\94\9c>\87\96C\88\96K\8d\99Q\81¢E\82\9fI}\9b=\87\98?\85\9cB\8d¡F\87Â¥;\80³=~¯>{¬F\82§G\87²E\86°@\81²C\84Â¥9\83Â¥6s¤7z¯0t´5k¯4i·:g®2pª+l¶2m³5_³)[¨,[§9T¦=a ?\ª<Y©<]¦5W®6_¬7]£A\¦<f¡3e¨5j¤9m§>p¬Lm¨Lj¡>m¤@l²Dj³Gh¼Eq¸As¯Kp¶C|±By»F|¶It¯Hw±DrµB|µJ\7f´P\87°Z\80´a\85¦Y\93¡`\91¦f\96\9bn\90¡q\9b¦k\9b°h\97«j\9d©k\99\9du\9a¨n¡¡k¦ q ªn£©h¡±j¡²f£¥p\9e\98jÂ¥\96f \8cg¢\8eq§\80n©wj¡ut\9eus\9axy\94n\82\9ep~\9fo}\9aky¢q\86\95f|\98h\82\8fZ\81\8eY\82\90Z\84\96W\80/iw8eu8l\818ts6l|?t|3muCgf9giAsa5qbDycE}gG\83eFnZJp^Vr^_pZeidqldkw_ynOitWjehom_usp|utuwk\81|l{}n}|t\87qx\8d\83r\89\83i\82\82n\88\7ft\8f|c\8byd\8ayl\97ol\99wv\88~p\91}f\8f\89n\8f\80n\89}f\8f\83`\8c\8f[\8f\83Z\96\8eH\91\8bV\9c\97I§\8bI\9d\86H©\94>¨©Gª\9a>¸«KêLDz>ºAó4ŸEÊ®RçDÇ\9fL¬BįKÀ²HÀ°AøL½¶I¸¬OðKɪH´»6º¿C¿¼:ºµ>¯­:³¨B´«DÀ\9fIÃÂ¥Mà>µ§=¼­@ªS½¼G»ÃB·ÃO¹ÄVĸZ¼·^¼QƶPIJVøIÿJ´ÀO­¾G¶µG§°K«°R\9f°H£¥:­£?´£;¡¨5\9f *¦\9e.¥ 2\99Â¥,\9bÂ¥7\9fª:³¡,®¡-¥¤:\9bª9¡­: \996¨\9f9¢\9b?¢\9fA¨£9£°<  <ª£1°©1°ª>\9f¤9¦§8¡ 7¨¨-¥©-¦¯4\9e¯3ª´3§ª:ª¦C¶¬5¹¬>·\9e<«\98;¶\9a5°\9e9¦\994¥¡6©\9f5¤\9f>¢¨B£¤@\93\9a?\94\98C\87\99K\8b\9aG\7f¦D\85©H\87¦M~¦?\8e\9b?\8f\9e6\87 =\8e D}§>\80ªC\85®@\82Â¥Q{¨B\83²;\8a¦<}©9x¯8\81«At¹@t¹<p¶1d«+n¶'h®/t³'i´+m±2e¢3c®-`µA_¦<a«6V§>Y±9c¶<a³Ae²?V·;c¶@X¯>]¦:jÂ¥9i°Lw¦Ph¤Jg­Dj§@cºId¸Ls¸?i²HlÀEsÄ;s½Fp´Jz¶Ex»Ow¨@w«J\81³P\80®V\85§R\8e±[\8b°[\8d¤X\9c¤\\99®`£¤n\93°_\94«m\8d­i\95§}\97 n\97ªj\9a§e\95Â¥t\9d¦k\96ªk\9fªl¢\99l¨\95eÂ¥\94m¦\8fi£\94u\9d\83t\99zi\97\82h\9d|r wz\97}|\92tp\9crs¡pr\90dp\90b{\91`t\90aw\8e_\84\9c`|\94S}1mt;ct4cs6bu:p~?ru<mhBckBjb<r\<{^6ya>sfMz`KkQRfMPoIRtVanTeeVlo]ovUegchfbgsjmxm|xo\80ur~\82m\87\80n\86\80f\88}n\86\84p~\82pxyo{od\89yb\8e{a\8bxe\94rk\90vj\8b\81m\89xl\93~k\99\83]\94\85Z\9a\89e\8f\8bc\93\8b\\9a\91O\91\8dQ\98\8fU¢\87W\9f\8aG©\9aH¨¡9¡¦:«¦H©¦M´¥C¼³C¾´8¾©=»®IȬQŤHäIìAˬIȢHðO¹°H·¨?¿©D¾´@¸¶:º³>¶²>¾¹Dµ°E¦L´®G¼°;»¡<¿¡@¶¨>±±J¶ªLµºBµ½DÀÄSººY²³Nµ¶T¹´PõWľI¼·Jº¹M²ÃH´ÃKª¸C¢¯Q¥§Pª£A¤¡9­¬5¯¨B­\9a@¡\9b5¨ -¡§4¦¡0ª 2±\9a:¯¡2¤©A©¦B¢®:¢¥6¬¦?¯¡? \9e=\9e\9b4\9bª(¥­,¬³4§«9«®8ª­6¦²>§¥5°¥5ª«9\9f®>\9d¦:\9f§2£¦7§§6µ\9d?¯\9c7³§6´\95-®\924«\95;°§1Ǭ5®§=¥¬>\9c¬@\94§?\9d«E\96¢G\99\94G\8d\9cE\84\9fN\8bÂ¥L\84¢F\7f\9eN\8a\9fI\93\995\8d\992\89\9c7\84\9eB~\9fI}±?\83©N\84\9dO~°E\83±@}¯B\80²D\87¶>~¸;\83»?~¶:v¬2n¬,f¯'f¯(k§(p®&k°)_ª(_®1[³7cµ4b°AY²2\³0f·;bº=[º0^·3T±6Z±<c»;l´@z´>v«Dv¤KhÂ¥Sc¬Fc¶Ir¯Ht­Et²<iÃ…;dÆ:lºElÃMv½J\83¹B\80ªK\80´K~®J{£K|¤M\81¬X\89¯R\8b²V\92¤Y\9f²a¢²`\9d²e\8eÂ¥j\90\9fp\91Â¥u\9d¤n\9c§n\94«n\98 h\9b«d\8f­m\9c¡p\9a\9co\9a\97p£\9aq\9f\9dj\9e\98g\94\93k\96\8cl\96\87z\9fty\91sv\93~w\91{y\9csl\8ehq\8egk\8fji\93io\9aj~\9c\~\9c_\81\92]\850fo7Zo@ek4jwEaxJcp<fg9_n@iZGj^6nT6w^Hi\PoVCeRGaLPcSWlLc`Z`jVp`YugTcgVnlfmvbcphwpe\82xk\81sd\89}i\88v`\8c\7fi{vn\87\80d\84ypxgn\83rc\89yf\8fn\\92pf\95vd\87\81c\8bwi\88\86[\92\88h\92\87]\89\84g\86\90g\8f\87Q\99\96T\9e\97T\9e\88K¬\8cJ¯\95<°\979«\991­\9e<³\9c;¬¡?¹\9d;»¤5´±=º²D³¥K¾¡MÀ¬D¹­NÀ¢L¹¦I¼¥SȢH²³B¼¢=âFȻ@¸¦9¼¬=¼¥@»«<¿ªK¾§:°´=¶³;¶«Cµ¤;¼°BçL·¦C½¬M¸·J³ÃU¸¾N½¯X»­G½®RÇ´ZÄ°V½±T¾«D³ºP°®M¦©? ¨B®¬I ¢G§\98?¡\9d?ª¤C§£?\97§6\9f 8¦¦3¡£7 ¦7 £:¯¡<¡\9cG ¢C¤\9eD¢¤<§¬B´¥A±¨4¤©+°¡%³«/´³7¦´>ª¯9¨ª7\9fª8ª®2¤°>¤¤C¨\9e?¨«/©\9f-¥¡1­¡<±\9f7²¡5Â¥;°\96?¯\8d3¬\973´£6ª­8§¡=\9e¯G¥²E ¨=\9c©?\9f¢J\91\92B\95\9eL\80\9cF\87\96@{\97B\89\96;\82\9dH\81\9b8\80£2\86Â¥>}¬B|¡8\7f 9\86¬<\80¤Q\89£E}­J\80­F{¸A|¼F~´Gx³G\80²>s¿2u¶+p­,d¶8h¯4f¨/e¨5k«/Z«4gÂ=b¼2l²<Z±7]À-QÀ@`³:\¶7[À6T«C\³;h»>t²Ep¯Co¤Cg£Sb¤Jl¯Hb©Am¯Fh·>lÃDlÃBv»DmÄ>nÃ…?r¿Hs²Ly¸I\82ªR\80°R\7f©O\88¦Sz³Q\7f¨M\8f¬Q\92ª]\96´W\9e·c\92¶c\89¯q\95«i\93 v\94¡l\91¤l\8d¬r\94¦i\96¡q\8a®c\8c£k\9b\99e\92\9dgÂ¥\91n¢\9cr\91\93e\98\8do\8c\92i\9f\84j£\7ft\95yt\98zy\96rl\91yq\91wi\90me\90ut\9bkq\95bw\94e\80\95Yt\93`|3ct7]n5Ys>`t?UhGYbCai?cb;gXGlS:s\<nYIaODeUJlO?dPLdQYZMZbPa_Zbbcie`do\ip\jm_jvbxpk}qfvsh}|_\84}Z\80~\\7f\82\\82uc\86wi\80mj\81dk\82k]\90p^\8fwa\92\7fV\84wZ\86\86Y\83\83W\8b\81e\8c}a\92\8bZ\88\88_\88\93R\8c\96R\9d\99T¤\92Q­\96K´\92>µ\8eB°\8e:§\9a>©¡3ª¬:­¥8«\9e1·¡6À«?¼¤GÄ©>À¬@êE¼§MÂ\9fW¼¢Pº©J´¦D¶¨E´¢;¯\996²¡8µ¡:À\9f9· ;¿¢B·¨>±«5¹µ>µ²:³¨A½¬?ȤBº±D´»Q¸·R¹¼L··Q¸«FëK¾°F¾²Qº±S¿§R°¦R°®F£¦?£¨Iª¨Mª¥F©£H¨\9cC©¡F¤¨>¡£1\98©4\91­9\99¡8\95§0\9d\9c9ª\9f@§\99B©\9fI¢\9dK¡¨A±©A«¥8°¦1³¦1ª¨)ª¤ Â¶Â¨$¼­3³°2±¨,¥«.ª¦>©¬<­¨7­¨@ª«3¡ 1¡\95;©\963¹ 0¸\9b=¾\9eEÀ\97>´\9fD¹\96Cµ\96?¢:«\9e?®§8 ª9£§E¦£F\9a©>\92¡=\8c\9dE\85\96@\88\9cE\89\9bF\82\99<\82\92D\8a\99A\89\9f:\83£=}Â¥?\83«8\86Â¥A\87\9f=\91ªD\8a¨F\84´L~±Ds±Cv²J{·Sv²L\80¾L{½?pÆ@m¾5tÄ8k¾8k¶;f®8f·2n²3`¸/bÀ5b·:i»:^¼3VÃ5Xº<S½?QµIR¹J`«Da®Bp®>r¶Ao¨JvªPe¯Ie¬Je¬OeªIm»Ii»Geº=rÃ7uÈEsÃGrÉKm½Em½M|¼P\89µT\84«H\83¯G\8a¬W\80¨N}­U\8a®S\8d¸_\8e³X\9dµ^\9d±Z\8b¹f\86´^\89ªg\7f¡b\7f¢n\86§a\87ªb\83¨f\8e­j\89Â¥h\90Â¥^\8e¢h\98\98i\9d\93b\94\8el\96\84e\8f\86c\91\83f\9b\86k\90|q\92yq\8btu\95\7fh\9c~f\95|h\9atq\94in\9b]{\94bv\95g{\86[z3jl+nc.bk3buAZh@T_B]V:Y\BfYGaTAe[@h[E[R?bJ:`SCVQN[^GcVM^\[VSecXriZajTal[eiejqajsmnthtvb\7fn]~\81f\86\7fbzuY\86y[|wY|te\85jb\8bbd\91wi\86s\\92t^\80s[\8c\83_\84\80N\8cxU\80|V\90\87\\90\85^\84\91^\8e\97P\8f\96T\9b\9aL¡\8dR§\94=©\97;·\9b?´\9a<¨\979©©5²ª.¸¥,¼¦9±§:¯\99N¹§9°¥?Ã\9f=´¨E¹\9c@µ\9cBµ£H·¨B®¨Kº¨D®\9b:­\9a3¼\985¿¢7À\9eBà7Ã¥Aá7¹±6³­3´¬7¹«?»¦<ȤK¼§N¶¯L·®N²µK¿¸V½ªG¾®DñN»©Iµ¨X¶¯HºªC¸®D´«C¸§Aº£E« I¤\9b>¨­>¬­9£´9«³2\99\9e;¡¤5Â¥\9bB¨©;\9e¡A£\9f4­¤>®¡J® 9µ¥4´\9e:º©4­¥1£©3­©'´¡/¬².¶«<£¨6\9fª5\9e¦:¦­A¨¬?·©:­\9e=Â¥\9e8¬\989±\8d6º\9a<µ\96@·\9bA°\95G°\99@¼\9b<³\99B§¢A¥¨6¯©;¤¦4¦¬7\98¬5¡¨8\9c¨G\9a\98I\8d\98L\8d¦@\8e\9aH\89\9d?\84£;\92\9eB\8a\97E\7f¡;\84®>\8a­2\7f§=}«@\89¤=~¯F\80´P~³G\85¹F}²L\81ªP\80µA\84»=vµB{½An´8yÃ4pÂ8wº5n»<wº<h»2o²4]³9g¸:f½:gÀ/ZÃŒ0NÃ=L¾<U¸DQÆC]¿?i¹>o°=t´Gt¸Gw¦Pq¦Oo¬Nm¨Bn¬Dp¬Ij¶Bs³@o»;n·6t»MkºOi»Bu¼R|¿V\82¬O\86´K\81°F{©\\81­Z\84¬M\89µO\87»O\8b¾R\95«W\8e´Z\92¼h\8b»e\94¸n\91©k\89¡e\8d¤h\82©g\82­_\80¬e\8f£k\8e\9e]\94\9dn\96\90m\98\8aq\96\93m\91\86h\8f\8cd\92|l\8f\87a\95\80c\91|q\92\81g\96ym\99\83g\90\81p\8dzk\8aoq\8dru\8b`z\91a{\86]\81.td/md7mg.\n+\]2\X8RT<VSG^WFcX:_];abB_RGXO>[UAR[GTdEZ\LVRS]PdiLjfTrt^iq]ordijhkpakvapiapl`\80{\\80\81_\89re\84nY\86k_\7fn\\8cs`\90g`\85p`\8bue\90uh\8bs`\8au]\8d~K\82\83I\81~T\87\85_\89\88b\88\7fc\94\87\\90\92M\98\94L\94\91I\9c\8aIª\88?­\97E°\9b;§\9e?¦\9f0­¡/´¡6¹\9c5¯¥B²\9dCª\98B°\9b=° @· >»\9cI·¦Eª£;ª¦B®\9d@½\9dJ¾\94K¯\96=²\9eG¶\9cE³\9a;ȴ9¹¨3Ĥ<¿£8³¦8¶\9e>â<ƬFÄ¥GàE½ªI·§M°ªV·ªJ¼´M¿¨Q¾¢J¶\9bQ¯¤L®°J²²;¶¬C¼¯DÀ¥B»\9e:±ª<§¥?±©J³´C©³=¯¬A\9f¡;\9d\9a8¤>²¥=®\9d0¦¤4¬\96B­\99B¤¢6§\9e4­¥-»­*¹¹/¨µ.°¦-®§5¬­6®©7¨©9¥¡>¡¬<¨°E¨¨3°¦/§\9c1Â¥\996°\9dA°\92Bµ\98:¶\99B®\9c<ª\96D¼\95<¿\9c=¤9³\9f?µ°<ª´;¡ª8¦¥7¦¯3\96´:\9d£E\9a¡G\8f¡M\86¢I\87¦D\96\9fA\8f\9f@\8e¢F\84©8\89\9f5\8b­8\82®3z§C\81°B\88«E}¯My´I\86ªJw®Rv¶T\85²J\84¨=}©B|¶D|¿:v¸<\84·?\80Æ4\84»-x½/p¿0q»<r·2g·6b»,`ÃŒ2cÄ-`ÃŒ1ZÊ/NÃŒ0IÆ.NÂ<\¸3a³9p­Km¬Nt®Uq±Rj¢Uj¤Pe§Jn³<i­Gp±Dqµ=t¶6v¹;jÀBr¾Dj²My·Sw°M\83²D\82­H\80­Ru©P|©R\88£V\83®U\8b¼O\93¯U\8d²_\94¯j\96¸d\99¾k\8e´e\95²`\8f e\8a§h\8a\9eZ\89\9cZ}\9df\8f\99k\91\9di\8e\9dh\94\96m\95\8fn\8d\8do\86\92q\85\85n\89\87c\91}a\89\80h\8a}_\8fx^\8a\82`\96~j\92\80j\90ym\86xe\89if\86cq\8ago\88]x;q`;te3m^1Z^.ab6WW<WO2[W;b[L`OHaT;S`E`TAaQ@WTIK^CTUGZMRZX^aVaYUgab^mW`hhejjcr\eubhvcsy_pj[{sV\7fvR\80m`\7fpV\83hb|k\\82th\8dm[\8fw]\88v]\8agY\8bfh\86sR\88xN\80mX\83uU\8a\81`\8d\84[\8e\89]\93\85S\9a\87H\97\88Q\90\8dA\99\8fB\9d\8cD­\96G« @\9d\9e8©\981°¢,·\92<®\96:º\9cG¶\8eF¸\929ª\8c9·\9a5« @°¢;­¦E¤\99K¥¦@»©L·¤P´\96<µ¡Bµ\94BÃ…\9eB·\9cAŦD¿\9b8Ä >Ä G´\9d:Ä\986á@À\99;ìC¾¨G»©KðW©ªMº®Mµ¯Mº¢I½\9eI¯ªNº§L­±F³§?¶«1·²8º\9e3µ\9d3·¡=¬\9f>®µ=¸«=¬«Eª­I¦¤Fª\9dG²\98>±\9f@±§4®\99+¦\9b/ª\958§\94:«£6¨¥-¯²2¯¨,¯®5²¨,²¯1´«0·µ9®®:¬¤4¬¤1©®G¥ 4°«<¨\9f8 £3\9e\98<ª\9f=¨\9c@ª\9bAª\8cB­\8a=ª\9b=¿\99<²\9c:¶¨B¦ªB¬¬7£¤?\9f£6\98¢6\98¨2\9c¦B\90³P\89©Q\90Â¥P\89ªF\9e«E\98©I\87 E\8a¤G\89\9c7\81¤7\8a²:\8bµE\82¼Oy®C\85¬G\83²Ky´G\80§F\86·N\86µQ\89°;\89·A\8b¶>\87¼8|ºDv¸<\86È7\7fÃ…5}Ä9{½Ax¿>~ÊEjÉ6mÄ>kÕ)`Æ(\È7`Ó0XÃ4WÊ,YË.aÉ:b·;\»?jºKkºNqµUmºIk§Nt·Er±;n³Do©:j°6e¼?oÂ6oÀ=hº<e¬Om±Go®Yw«Tt«M\80­V{²M}ªH\8e¨L\90¶I\86ÂO\8c°N\8b»\\8a²Z\95»Y\97®U\89®X\8f©X\8eªZ\8b¢_\89\9ee\83¢b\88\9c`\7f£c\93\9cl\8e\9ec\90\92i\87\8ce\91\8dh\83\83e{\92c\80\7f_\8f~b\85~S\93\84R\8b\80`\8azd\83\85g\90\80m\87\80g\8buh\82ee\8bab\8e[l\8aUtBgo>nc0pY.a^4\];VS@XP8\Q4USA^MJZWBSW@UX?YP;[ZFSXINSWZOXeSZ^Ud^c]]gh\_cifjeanmZmt[ktTluS{mS\7fuW{qUul[zmW\7fz]\7fy_\83z]\88wg\96yc\92i`\8aj\\91f_\85jT\85iT\8ah^\82s_\8asX\83wZ\82yO\89zP\94\7fG\93\88J\8c\8aJ\96\95?Â¥\8aG¤\90Bª\98H£\97@£\96=°\94:³\99F¬\8dC°\84I­\89?©\82=³\894¬\8c2Â¥\97:«\9eH \9fE\9f\99E­\9cE±¦=¾¥Eµ¤H½\9dF½\909Ã\91:Ã…\9d7Ã\9aA¿\91CÈ\93K¿\96B½\9aF¸\9eK¹\97@¹ LĦMÀ²T¯U¿¯P±ªQ¬ L± I¬¡K±¦?¶¡7³¢@·¬6¶ª9º«4µ£,µ©+¼«4¾¡@³¨>»¦A¹¯G­¡N¨¢E® L¬\9cD¸\9b;¼\9eC·¥>¹\9c2¶ +¯\9f5®¥;²\9d5²¬0¬¯8«²,»¯1±¸4¸·)¸­2³°-²¶2±­*±¢6ª¡:®¬9­¦@¦¥?¦\9b6\9c£>\9f\9d9\9a\99< \93F¯\8bE­\8f@³\98K²\9fDªªG­°Cª´E¤­>§¯?\9c¤5\9f¡1\92¬;\93¸=\8b¶J\8b·F\90­H\8f®B\94²D\8f°B\8e¨?\8e©H\8d¦C\96§E\8d¯;\8a±<\7f¶L\87­P\85³K\81µG|·B\8b¨C\88©K~­R~¯G\88·B\88³;\88¶5~¶=|¸2\83Ã…3\89Æ>\81ÆD|ÃL\81ÃŒD\80×I|ÖBxÔ3hÃ-f×5[Ñ/R×4WË/aÔ.aË+V¾4XÂ8XÄCV¹FW±Pi·Jv·=sº>h¼4j±;d¬<m²?a½@b¾6l·1nÀ5i»HfµI`©Hc§Vo«]r¨Rw¦J}®P\86³S\87«F\8e³D\88¸G\90¹F\89»Q\8b¼L\91¼X\98¾W\8e¯R\95²S\8cÂ¥]\85\9cZ\81£d\80§f\82¢a\8b\9ea\85\9b`\89\9ef\87\9dj\83\8fh\8a\8df\84\8bc\81\8f]\86\84\\82\84\\8d\8b]\8b\8aT\81\7f[\83\81]\87\85_|\83d\81wb\89zd\8epf\87bb\90\q\88]p7rb:d\-eW6^h3Z\-YL7SV9bQ4UM=^S<QG6QO9WXGYQNKPMS^VLLXOKR[\^Q`a\cVZ]_jhWjdjq]gi]fp]osbpqTukPthOzkM~jW\7fpW\7fr]\8dlW\8el^\86t^\8aqh\90e\\8dpU\90rQ\8bfM\86sY\8atY~q`\87n_\83xR\80\7fH\8a\83V\97\81C\97\8aJ\90\8e@\98\909¦\8aDª\96E¢\88D \8fH \8a>¦\9d5¡\92C\9f\8e9§\85<£\813©\8a1­\901¦\93;¨\8b=©\91=\9b\97>\9e\9f8¯\98C´\9fA¸¢Eµ\9c@Ã…\9a@Ã\9eB¹\94:Ã\957Â\8eBÇ\98F¼\92EÈ\99JÃ¥B¼\98KÀ L¶\95;¹£I¼ C¸\9fI·\9bT¶¤J«\99I±\9eM¸\9fM¸¢F³\99C®¦D¶£7½\9e:º\9e6­¢2¿ª2´²9¸¨3¯¬>¹±B¼§Fº¯<®¬F³ H­¡B¹\94D¯£F¸§@¿¡2°¡3§\96(®\91/©¢3µ\98-¶¢9¹¤'í2ij2º±*¼«*¼°%º³)¸«:´­6©\9a6©\9b<¬\9e:­\95D¦\9d?­\9e: \9a?¡\94@Â¥\88H¦\91Fµ\91J©\9f?¨\9d= §>ª®<£²D¥¦D¦¨? £4\9e¤<\98·=\98¦=\98©K\94¬F\96¢L\97±:\9b´C\94©?\86 K\8bÂ¥=\8f¨D\9a¬B\8a­9\88¨K\8f½B\8c²L\88¸D\80µD|ºC\87¶K\8c¯F\7f©B|©A\8a¬E~¸={·@{³1|¼?|Ê:zÉ@|Ã’>\83ÆCsÉFrÃ…>zÚ@pÚ9gÑ7^ÃŽ6dÖ.cË,SÃŒ5ZÃŒ3fÃŽ3^Â3ZÀ3a¿BUÃAj´Dl½KlµAhÀ>f´7[³=^»Bi¹5fÂ6iµ8lÃ7p¿;q¸Ek½Kk©N_¢Un¨Lu¡Vv§Gz¨R\86«H\84¦G\87®E\8b»I\85±Q\91µH\8b¸W\85ÃO\80»I\83·U\8e³M\8e¤V\86\9fc~§Y\81¦^\83«R\84\99V\83£d}\98]\86\9cf\91\96h\8f\8d\\84\89Y|\93]\83\8e`\91\8ba\85\87U\83\86Yw\87Uz\89a\80\85V\85\81e\8e\86X\94zj\8bl]\84f[\89cp\8amm;kZ0gW/f\3ad/bP+bK4bR.ZW3UM*[G+OS0TS@OR@ULGTWTJWXLUZSRZPb\Sd`O_]W^^g^Qj^]hYkf[npaqjdsqYphKobOxfP\84fK\7fuJ\84nZ\8bfY\8dea\95hc\8bmb\8bpa\95mc\8epS\88oN\83zN|sH\84lR~kS\84sO\8eoV\89{K\93}@\95}E\9dy?\9f\81B\9c\90=¦\948£\916£\88>¤\88D¬\94A¬\97;\9c\905\9d\903\9e\807¡\81< \8c4¡\874°\8a0¯\91-¤\898\9d\94D§\9c?«\9fD®\96:¡@Ê\9cB½\9b@º\95AÀ\9bA¼\8f<¸\9e7¿\9d=Ê©FȧEÆ¥G¶\9fG»\96;¹\97:¼\94:¹\97@µ\9eL·\99T³\9cW±£Iº\9cNº\95B²\9b7®¢<®¢.²\9e,¹\9d)°©7²°4»±3¾¸1¶¯?°¨<²©6·±?²§:±¡>µ\96@­\95C¯\9a;¾\99=À©1À¥%®\94'µ\9c(¯\97(¶\97\9e1Ȧ3È¥$ï Â·Â¶-¾©/­(¾©6´ª8¢=±\9d:³¢A¯ 9©\93E¤\8e@©\965±\93;§\8bG©\8eO­\97N°¢L­\9b?¤\92>©\91;¡¡D\9c\9c?¨¨A\9b±?\96¬A\9fªF\9c±>\9c²J\9a©P\97®L\8bÂ¥A\99¬7\97ª>\89ª;\8c\9bF\95\9eH\98¨D\8eªN\95§G\8f¬A\8f¶?\81±D~¶;\8bºA\88¹L\8d²P\86¸C\7f¬<\84±C~»E\85µ<|¹A~µ4vÂA|Ë=\84Ã:zÃŒ6oÄFsÉJtÑ<lÃ>o×6gÕ<\Ã2^Ö.UÃŽ:ZÃ…?\Ë0ZÃ/]½.V¹;b¼>`Ã4pÃ…8y¿Fn·Ci¾<gÈA[Ã?]É3]¿7^½3d¹3mÃ.o»4f»7k»Hh¸Sc£Od¦Oh£Ns©IwÂ¥Dx¤H\88¤K{«N\7f¯Q\8a¯U\92¸N\8dºL|ºQ|¹V\7f¼I~¯H\81­Vy­R|¤Q\84°K\7f¬Nx¡Y{\9d]\88¡W\90\9d\\84Â¥Z\88\9d[\8e\8fR\82\86U\86\8cV\8f\8da\8f\7f[}~^s|\t\87]u\8ea\84\85\\81|U\8e|^\90u`\80w]\84ta\8bnn,aO3_X,[_/c`)[O,VS3c[3\R(ZX!PO2SP/RM4EMHNLCUJYTVSOSRQURW[]O]Y[ZW\eR^XYZc_Whgahpgehn]r\[{gK\82lO\7foI}oG~fO\8a^S\88gO\8em]\9ae^\9aw]\95rb\96le\99x\\90|X\87tF\8a\81L\8dtN\87wU\8arO\95tJ\86uN\98\80D\98{E\95|;\97\8e;\9d\85=ª\8c8\9e\8d6©\8cH¡\88B\9f\85L¢\86<\9c\88@\96\83?\9ey?Â¥\82?¡\866¯\85.¬\939 \840©\85.¢\901©\968¸\9f5¸\92,Å :Ä\9d@Ç\9dEÃ\9bE»\94BÇ\91A¶\9a:½\9e7º«>Ã\9eN½\9d;²\9c7´\9b=º\9c2¼\8f\9dIÀ\99J¶¡Mº\9fQÀ¥N»\95D¿\9aD¯\911µ\9d.±¢/­\98(´\9d.²ª8µ©:¶³1·«>¾°9¯§0«©;§\9c7«®;­¤=©\97@±\9cC¯\95:¾£5½¦/±£0¬\9e/ª\92!¨\96.À\920Ä\9c,½§#ñ,¾².ij/ì-Ä­"·²,¿«+©¨8¯¤3³¨3©©=¨\95C¦\93A¯\9aA³\9b6©\9aF«\90C°\98N³\98P¢\93N\9c\93K\9a\9d@¢¡9\9b¦H\9f°;\99¯G\9bªB\97­E¡¶I\9e­G\9d¦Q\93¨J\8f£H\9a¦F\9eªN\8bÂ¥J\8b\97>\89 J\92\9fB\9a¯B\97¬G\8c¶E\94²:\86¸>\82±8\80¸>|·?\80¾E\82¼F\92¹J\84¸B\88Ã?\93°A\84·:~¼7x¿9\84Ã…>tÃŽD~ÉE{ÊDqÇFnÃ’;xÃFtÉGsÃœClÃŒAiÃ.^É?_Ë@\È1_Ã/fÉ;[Ä<\Æ,h¾3o·5\83Â?w½Co·E`Ã…9VÃ<_Ã0`¾=`·9e¹0k¼8h¿5c´Co°Jc°Oj¨Pi¨LoÂ¥Ik\9fL\7f¢B~ª@\84®E\85®Q\7f¸L\7f¬N\8b¿S\8a²V\84µH\81·Gy±HuºT\85«KwµNq©Yu§N|®J~°X\87¡M\80¨Y\84 P\83\9eR\84\97`\88\8eY\8d\9a_\8b\8aX\8b\8e^\87\8ae{\80ay\89hs\84ax\8chy\86^\8c\85g\8e\83[\85vg|}e}}c\80wd0T_,aU7YN7`V1Y_+TZ"XQ'\N$RX%OR%MX1CP??IDBQKQNRQU]XTYNSXP`WWeXSeQZZUSSRY]UPb^Wib`ckaav`[~aL}_M\83mL\8alQ\82^H\8aaF\88aQ\98nW\98oT\97qV\94ta\9duf\9brb\9d\7fP\96\7fO\96{P\97\7fW\8dyN\93pP\95qU\93{K\98};\9a\82<\93\80:\97\8dA\9a\904¡\8a6\99\8aC\9d\81G \7fB\98\87E\9c}J\9a}D\9fwG¤w9\9b\86?¢\8d=®\8b=«\8f;®\8c<¤\874±\872¬\8b1®\8e*¿\9c-¿\9b.Æ\9b\91\90BÇ\97FÀ\99E¶¡9º¡=»¡;ĦFº\9bD¼\9e7µ\989¸\929´\9bD¿\9dEÆ\95M½\9aG¾\9eL¾\9aC³\94>³\98:¸\96=º\98.´\96)´ 3´\9c/¯£5½ 8¼­<¼«0· 4³\998©\9f7©¥0³¤4ª\9c.¬\9a6­\97;¸ :¸¥7¾¨4µ¥2¶¦(µ\9d+²\94+»\93 Ã„\9c$Ä£-ì,ȱ.É®.ì*²(µ#¸¦.¨©7¤ª<ª¦3ª¢;¯¢:®\93<¨\96:®\97=±\8f=¬\98H²\93E®\90Q£\96R\9c\98L\97ªH\9c¬?¢¯F\9e°>§·F\9e®H ¦K\98ªL\98±V\94§R\95©Q\99\9eO\9b\97O\99\9aL\95\95P\8e\9fC\8e¨E\95Â¥9\98®<\91³B\95¼9\87»9{»5~²:v­D|¹<\82Ã6\8bÄA\8bÃ?\92Ã…J\98½H\91¶D\88Ã=\84ÉE\84Ë?{ÃŒ<pËJtÃIpÆDyÇGuÊ>wÔ@jÃŽ@mÃ’AsÓ=kÃŒ9gÈ7]ÈAcÆ@iÈ4lÉ0e¿5dÄ3hº0r·;{À8xº5i¸=]¸3_Ã9WÂ5_Ç2k¾(h¼/k¼6]·=_²<d±:pÂ¥Ap¦Qu\9cUm\9cTr\9cMv¡FtÂ¥Mv²Lx¯My°K\81µS\87´R\81±T\7f¿M\84¿Xy¶R}­Z}®Pn¯Im¶Ri¶Ev±G{¹H\83°M\80¤X~©T\8e§M\8c\9bT\89Â¥N\8d\9eW\8e\94`\8a\91g\88\8ei\85\8e`z\8egt\83hv\8ab{\89^\8c\8ai\8e\81g\92zd\87~c{wl\7fsd-UU&[[3`R.VM9RF/VU&RN4WG&HE0LE)AT1>P<EO>JTLK[WIZWDTUFXTUi^Tp^[iTTdWNT]PUUSVd`an_coX_mbTsZQxaLylI\80fK{hF\88^O\8c^O\8abT\94f]\8dgV\91q]\8cnb\95o`\97\82R\96\87P\9avS\90uN\92wJ\8fqI\9awH\8d\81;\98\7f>\98\86?\8d~D\92\90M\9c\8d8Â¥\8f0¡\8aB\99}A\9d\89@\9a\8e@\9f\87<\96sH\9c\82F­}C z=\9c\91Aª\8d?¯\90C«\8a<­\811·\8d,±\880½\8c6Â\959Â\924¿\9a,Ë\8a\90<Ã\98HÂ\95F¾\9b<¸¡D¼£@¿¡;¶\99CÀ\985´\96A¼\97/¿\92EÃ\96:¡;¿¢:º\9c?º\98C±\9e1´\8f0¼\914¾\96.²\94/» ,º\9e:¬«5¯¡?¸²?²¦Bº\9c:·\9d2¯¢;¤¤?ª¬5« <® 6¹¡9¼§=Ä¥/Å¢6´­4º¬.¯\9f)º\91*·\9b)Ä¢*Å©&Ī/ä/¿³6ǵ3õ(¾¯%é.¬\9d3¬¦6«\9d9·\99=±\97F \8b@¦\9bK\9c\94A\9c\9b<«\91M©\9bB§\8dR\9f\98Q\9a¨S\92¡K\9f¦F\9d°?\9b°I\98³J\9c®F\9b§H\9c±O\9e°J\98²P\93«N\9bÂ¥Y\8f¨J\92Â¥H\8a¡R\94\9dB\88¬G\8a¨>\93²A\91°A\95µE\89¯I\82¹:\81¾>{¼B\81²;\81·D\82¿?\92Ã@\83Â?\85½M\8d¶N\88¹D\80ÇC\89Ç@\80Ú=tÑ>nÉBoÃŒG\80Ã’J{Æ<\80Ã’;uØCtÃGpÔHcÈB`Ã’7]ÃG^À:aÈ3f¾7gÃ0bÇ9qÄ6hÃ=rÃŽ0xÃ6a·8b»;eÊ4i»5cÆ/e¸,r°1k¸9`´0g¶0]³9l¨Go£Mh\9aNj\99Mo\9e?j§Ez®?i¤Ly¯Qs¬Dy­L\8a¸G\89²L\83ÆL|¿Fl»Ix«Bz¶Sh°Fg·Rs±FqªG|±P\8f¯Nz´I{²M\8a­I\84\9fM\91\9a^\86\9cR\8d\91c\81\8c_\80\90a\8d\90_x\85`{\8df\7f\8eb{\89c\80\86j\8d\7fm\8b\88l\88\81_\83wl{\7f`.[_)JW4SP2[F9VH6QC-IN/JM+IM4IC-HA6JK7DM>O]RNWZI[`HZWHbYNoeKnaOhWO_VRW[WU\PXfYUcOdjVguZYw^X\80`L~dMykK~nO\8cpZ\88jS\8ajX\7ffT\82kT\91sV\8dmR\93xW\8e{Q\95\7fV\99xR\95yM\98\85L\97\7fB\96\848\98\85<\96\83B\90\87D\8b\8a@\90\81G\99\85A\9e\888¦yD\9ex>\9f\87D \85E\96\81L\9dwC£\80?§y>£\853¤\886£\914¯\89>­\83?»\84/À\8d/¼\882»\875´\884½\93-Ã…\8c.Ä\979»\92B¹ BÄ DʦDÂ\9a9Ä\9d5º\946Ã\96?¼\91>¼\8d7Â\906¼\9e?À\9c>¹¨4¸¢;¹£>·\9e8·\9b4¸\912²\93/´\9a;¼\9c;¹\9b3«¡1®¬:»¬9¾§?æC»\9b6º\9a2©¨6\9fªB¦¦<¡\9d4¦\9a=Ǭ3¸©0¶¤-ã8²ª.´¤(µ\9f(³\99,µ\9d-³£+¼¥(È\99$Ǥ)·©-²¬-¾·4½³,» -½¤/±\9d=¹\95=²\9dE«\9fH¢\94M¢\9cI\9b\9eJ \9a=\9f\93@\9d\8e?\9c\96N\95\9fP\97§N\97¦F\97©H\9b«O °J¥£F¢¢H\9d®O\98²L\94²B\96®H\9c¤W\96£Z\8f¬W\8d­J\86§L\8a¨L\89­F\86ªO\86­P\95¬?\96§I\8c¬J\7f±J{¿G\85²H~¶?\80¼E\85Ã?\8cÇD\83É;\84Ç>\88¸M\8dÀL\80Æ<\8aÊ8\84Ù=\80ÛEuÕ?xÃ;wÃŒ<{Ã5\80Ã;\84×D{ÃIoÊKdÃFfÈ=kÃ=_Ã5\Ê=\ÃŒ:aË:`ÆBkÇCfË9qÊ7sÆ5g¼-k½%hÈ.bÃ…,^µ5dº/kµ/e¬3Z³3SÃ4]½0f®8j¬?p¨Gp\9dDm¡Bn«=g¡Jk¤Nv Pr¤C{´E\84³M\82µIw½Jl¹Fn¯Av½KlºHi³Qm¸Jq¯Rn¯Pt²Q\89Â¥J\86ªE~®K\89²P\83¨P\8a¢U\89\95[\8a\92Z\81\91X\83\95[\87\8bb\85\94bs\96mx\95e\84\82c\7f\84g|~q\89~m\84\80f\89\86m~\7fc&MJ%QW2VD4XC1PI.HD)MF+CK(GG/ED=HM1CV:CONMeUOZRCaXETP@ZYIedKlXT_ZQgRSY_[abK\VV^h_hh\mi]it[dphZ|fWyeSylWz`W~_]}k]vnT\8cg^\85{[\90vR\8fqT\90qZ\9ayI\91uF\99p=\8dy@\9e~E\94\80G\8f\83H\99\8aM\9c\81J\95{E\8c\85K\9a|I\93\8aB\9c\849\99u3\9d\83:\9c\80B¡\83B£z>¨|9¤}D±\850¨\89.§{+±\821®\824¹{0¿z)»~:¶\83/¸\924µ\8a0Ê\91/¼\8e0³\97;Ä\96AÀ\97DÄ\93?Â\91>½\955²\92.²\954°\91=µ\8f3»\87\986º\95;¯¥C³ 8¸ C¸\9c:µ\9b=µ\9b(¹¢:¾ .®\9d5´\981³«8¸ªC» 6½¥6µ\9aAº\9bG¨¥=§¨EªªF¦¥?¤§G±¢?ǬD¸¬4ºªBÀ\9d9¼\9b1´\9d,³\99)½\973»\9f(³¤/´\9f'º\91)Æ\9b2ª3á5¶µ8¸ >µ\9b3°\969³\9f9»\9fC¼¨E±£R«\98S\9a\91J\92\9dP\93¡@¦\9aD¡\95E \98H\9a\9eS \9eU ¦Q\94¤N\9c£P\9d¨F\9bªU\95¢R\9fªJ\98²S\92¬R\9d±R\9d®X\93°R\8b±W\89²[\80°R\8a£Y\87§Z\7f§W\86¤L\99±M\95²C\86®M\7f­F\7fÄ=\8e·?\85¸A\84¾9\8fÃC\8fÃI\8bÇA\85É?\88ÃP\8dÃŒ>\86Ã;\8eÃŒ9\8dÃ’G\82Ã’?{ÃŒ:{ÕDsÄ=\7fÃŒ6\84Ù<vÔ:\82ÖEnÖAbÃœHeÕJoÆEhÈ:b×LeÉFkÃ8hÑIqÆ?uÆ9qÃ?p¾6l¿1gÉ)gÈ4mº0^¾=lº5o±6l´=i³6a½/S¼8[¹7\ª9_³>s¡Ca\9c>a©Ap\9fJj¢NsÂ¥Ak¡=w´Ou«N~°Nn²Ep¶Js¸?m°Hj­KjºCuÃJq»O}®W\85¨T\8aÂ¥Ry°T{³T}¢S\89¤\\8e\9b[\8d\8eZ\82\94b\80\9b^\89\90T\8e\90Zz\93i\7f\9fkx\98]\85\91h\81\81a~}iz\81j\81w^\85wd\84\83`.OF*NN&FK-GF7JK5HE-LA+EI4MN0EI2@T:GQ=MYMH^KGWNDZECdL>\V=f_KeXSj`JeYHZXQ^YPkPMf_S]]^cn_^qfbs^R{]RueUze_}mbte]|iZ}tU\85rW\86sX\84lQ\90vZ\99wZ\94oJ\95fE\8fn=\93xF\93\80?\97\87?\91\85G\92\81K\96\7fK\90yS\8byI\8c\81L\95|?\95\820\95\802¢z1 }5®\83;¬\86<£\84B©~:ª\7f-®}+µy.³|.´w)³y*µ\81\802º\89*¸\8c*¾\904¾\92.Â\9e/¸\999À\975Â\9d7Ã\97;¶\954°\8a8·\8b+µ\92-µ\874À\849¹\8e7±\8dAª\99?´\97?® :º\9aD·¡<À¥;»\9e.µ\9f2¼«0¿«*±¦/¶§1²§=±¤>¯\9c;¯¦:¯¤G­\9a?°¡E¤¥K¨\9bF£¢E¬\9f;²ªBµ¬F¼©E·¦>º\9a9Ã\9d)ɧ+¿ )¶\99*º\9b.¹\9f+½\990Æ\9d*Æ\9a(è/Ȼ5´\9b@·\99?°\9a>¸\9d@³\9aF´£G«\97G¢\99M¦\97L\99\97M\92\93O\9b\9bC\9dÂ¥M\9d\9dH\9b§R\9cÂ¥K¡¨R\97\9dX\8c©N\90¤R\99«K\94±R\93µK\9a±N\9b°R\9aºJ\93¶P\8a´R\86©P\83¦^\81¤b\83§Z\83«Y\80 X\8c¨U\92«K\91¯D\8c¯B\90®D\8cºB\94¶F\95¼:\90·C\8cÀ?\8d¾J\90ËG\89ÃI\87ËD\82ÕK\88ÃA\82ÕA\8aÃ’F\84ÃŽE}ÉD\81Æ<}Ë:\81×A\80Ñ8\81ÙE{×FqÚ=lÛCqÛEkÃŒ?pÃCpÖIqËAgÃGsÃFmÈCkÊBxÃ’=sÇ:f¾5c»3i¿/k»0k»3q¸,g¹3iºAiµ?e¾?Z¶9b¼>Y·4\ª?e¨@l¡<b\9cBh¨Eg£?j«Gp­H{³Nu°Nr¯Eo·Cu·Gk³@n©@v¯?u°?pºEq»N\80ªS}ªU|«Vu°S\7f¨[\89¡R\89¨Y\88§X\87\97b\81\97X\7f\97X{\91T\85\92a\83\93`y\98`\80\99[\7f\9adt\8dht\8cg\84{`\86ye~q^\86xZ$NH\1eKH%LF+HB6IM6B@)PM1NE.BO5>K3LG7RNADV@?PT9RL>HS:WR>OVNd[H`VLYWV[TOcWP]PRdTO\OYec\encefa]sVQo]TnXW{^]nadpeayq_\84hQ\80jP\85x\\8cv\\8du^\99oS\99yI\8bqN\8anB\8f~=\9b\84E\8e\86@\91~N\9a\8aI¤\87Q\94\81O\90|9\94u@\96s;\9dw1\9d\81.§x7¨\8a5¬}8«\83;«\812¢\827­\83/§\8a9¶}.¬v&¸z-¶\810º~'Ç~0¿\7f)Â\8c)·\87*¿\93(º\8f0½¡:¸\999Ä¡=º\97+º\8c5¯\8d/¯\92'µ\8d4·\8e0²\953¬\89@°\919¬\94C´\9cB§¡?ª Aº\97\9a6¾¤4»\9c1­\9d7¶¤4°®.¬¯1±­9³\9a>ª\9bFº¢Fµ¯N°\9dE¶©E´\96G¤\97I¤¤Gº\9f8¸\9fH²´Q·ªHÀ°9¸«;¿\9b3Â\970á)¼\9d6¶\982Ä\985Â\9f4É\9a+¾\9d4¼­6ǬB·©7±¦GÀ¦J¿¨=º§Gº¢A¤£E\9e\9cU\99\91M\97\9aR\9a\9aD\99\97D££J¢\97L\9b¨Q\95£C\98¤Q¡ªV\9a£N\9a²S\95©R\9b²K\98­Q¡´I\96¶Y\91ªP\8bµL\89±M\8a©Y\91­^\87Â¥V\86Â¥Y\8e¦]\86¬W\87¯\\8cµO\8e°P\88²J\83µD\93±F\86¸I\92Ç@\8eº=\8dÉ5\88ÈB\8aÃH\87ÇD\89Æ@\92ÊA\89Ñ?\80ÃK\82ÑT|ËB\7fÄK|ÊK\89ØG\83Ã’;vÕ@}Ú@\80ÃLyÃGjØGsÃ’FpÃ…>jÃGrÃ’FdÃ’HgËHnÆNdÂEqÆEzÓ:uÃŽ>fÃ>lÃ6`Ã0j´-j±+e³/_µ9g³4`±7b¶D`¼8[°8\´<b²7eªCoªMh¤Eq©An¯Ig¡Po«IxÂ¥OoµEsµJx²Kp¤Fp¬Nt¯Iq´Bn½Fz¶<w·D\89ªUw­P\84¦^\87ªT{«[\8c\9ca\85ªY\82\96W\85¡a\83\9fXu¤U|\96a\83\90X\86\9bU{\9ce\85\96f\84\9d_u\8bZw\8d[w\84]~{Z\7f\7f_\87{P\1e>>\1cAA\1d@G$>L&JM1MK&HI*SD8JH5BUCDSBOJ8?A?@GG=BU;GWJPMGOVFPWE^XI`MRVQIPbH[\NUT[YP`d[Z]d[`lTZfR`hUYvfTrf_sdglm]no]~iP\8cdS\89oN\95uM\97xP\98yO\90yR\96}E\8cr=\8dy;\9b|D\9e\88M\90\84G¡\8eJ¡\8fM¤\89=\9e\82:£\847\9exA\9b\80:\9d|,¬\886©\86;«\828\9b|1\9a\7f9¡u=ªy:¢\87;±\822µ\81.­y"¯~%±}0¿s+¿\84/Â\8e9ÃŒ\863Æ\8d3Ç\96-¿\9a5È\9c<Ê\965Ê\99:Ã…\91/À\874ª\8b.­\8c&®\8a,¯\8f3°\95A¾\94?»\9c@µ\9b3Â¥\985¨\9b;µ\9e<¹¡1¼¤1¼£;¬\9c3²§0´>´®?»6¸ªD³\9bAº¤E·«E·°:®£7¤¥C§\9aFµ¤A·§=¼«L³­K¼«D½°:·¢0¾\962¾\9f/º\978Â\8f/½\97*¿¦*Æ¥/¿¢6Æ©1ó5˵=¼·?¶¬@²\9fE¾£I¹£Q³§Kª\98S¢\98P\9f\97P\99\9bP\93\94M\9b\9aQ¥¡O\9e\9eG\96¦Q\95«I\93®K¡­G£§M\98®K\98©K\9b±M\9e¯L¡¯U\91´Q\8e¨V\80ªW\80¦H\85§O\8d­O\87²R\89²_\94·Y\91±]\8a¼Z\8d¸L\82°M\87®V\83µM\8a¯L\8f¯L\8eÀE\86Ç;\8eÄ<\90½I\82ÄG\88ÈA\8eÃŒ=\84ÆI\89ÊG\87ÃI}Ã…R\86ÉM\81ÇB|ÃŒQ\84ÔO\80ßNxßF\81Ô>{ÕEvÃEnÃŒFuÉ>kÄ?lÃ;eÆ;]ÃŽDeÑFiËKgÈFhÔCjÃ=tÉ=nÃŽBmÑBbÄ?Zº?`¶3_À8g¼5^´<c°=^³:]¾7b»<c¬;s·Hr±Lk§Aq¤Bu¨Ji®EvªMtªRn­Ps­F~®H{¤C~Â¥Kv¤JpÂ¥Ct³Bu¼={¸7|²<\84¯R{¬Y~¡W\7f¦\\80¡W\7fÂ¥\\87\9a`\81\94c\89\9f\}\9e^w¡Tu\9cR\83\96W\8c [\85\9f`\82\98_\80\97_t\8fXt\8f\q\8aT}\8c\\84\88T\86~Q I?\18MC)<B%EG#CD3ML0NR%]E8LN3QL;DGHUHE?IGGKG8FUGJQ:JGHRM@LKN\MK^JH[]S[bC_TW[dR`\`OcYRj]`n\Xdb[b]Zm`Yr`Xtk[qfY~kQ\80t]\8euQ\8fgT\8djJ\98mW\8blP\8doN\93rQ\8fnD\95vF\9b\82<\96\80:\8b\81J¡\87L \8d@¡\85A \865§\80=£}?\96{0\91\85&¢w)­\861¤\848£}9«t7¬t>¤~C\9f\83?Â¥\8a+©\81-³\841¨\84.¬|+°r*µ\80(´\89/¹\8f;¾\93AÉ\99<è/Ë\9e1Ã…\99/Ê\9a6·\95=½\874·\90<´\8a7³\972¶\8b<µ\98@»\90A±\93;®\946¬\91=ª\9bEº¢D±§;»®0´¤-³«5»\9c<·ª;µ\9b=²ª?²«;¨¢K¯ªE±£Bµ£8¹­8²¢@´¦G³ K®¤G­®J±«D¸¬C®¶B¹¥4·\98<¼\9bC¶\97BÂ\98?À\997Æ£*»\9a5é/Æ®9Ò§0Ê©6Ì´=¼ :À­F¹£B¯¡Eµ\98Q¨\97N£\98S¦\94J¨¥O£¡R\9b\9eI\9e¢K\99©R\95­Q\9eÂ¥M\9e§O\9c£O\9d´G °V\99´J\9d¼Lª°Z£ªM\9f¤S\8d¢W\87©J\87¦H\8f¶H\87·Z\93¶W\95¯b\89¯Z\95¹^\8fµR\90Ã…N\97³R\96¯I\8c¹Q\87±J\89ÃF\8fÀO\94¸>\89ÈI\8bÆE\88ÆJ\86Ä@\83Ã…@\89Ã…J\89ÃK\83ÈNvÃŒL\85ÃŒE\86ÃL\8aÃN\8dÚOwØK}â@yØF|ÓKyØGmÃŽAlÉChÃ>uÃ’>gÓAiÑDeÃFlÃ=mÊ>fÃ=pÆJrÈHkÃ?_ÃŽGaÇChÄ:a¼8`¾5fÂ6nµ>sº>a®Aa´?c½8t­Au¯Is¶Lz¬Co¤@n¨Gy­Ns²M}µN~¦M{¨R\83ªQs¨Q|¦G\81£Hw\9d=o­>}¨@u²3w®@~²S}­R}\99Q\89©R\82¢S\82Â¥\\94\9a`\8e\9b[\8a¡bx\9cV{¨[{©T\87\99]}\9a`\86¡k\87\9ehz h}\8efx\95Z}\89az\83`\82\83`\8b\82O\19U?"I@%=?$BO*RI#PI+RC.VM3YK@RNJXHCNM<DWF?OOBSIEI@9HE=DL>FDIRHP]KOYPJSYMZaIRcNXfW\m\OgTSj]Xb\Rj_UnbYmaTsjZudR|ga\85q^\87iX\8cpY\88sO\89sU\85wT\8eoR\9bvP\99rH\9czG\93\8a?\98\887\95\81>¢\85E\9f\8bC¡\8f=§\87?¤~>\9d\844\96\887\94\7f.\9e\868 ~3¤w/­r/³o6¨x@©\86A­\83:¢~.¨\82+¨\83+Â¥{'¢v(°z&ª\85*¬\8a'±\940»\99=Ä¢8Ȥ6ê.È¡0·\9c:·\919¹\8c6²\8e;¾\8cG¿\95B¸\989º\99=¯¡<³\99;º\9c;±\8eB«\8e7°\9e=°\9b7º©-¸¤+À©:¶ Aµ\9eG¯\9cK§\9aC³¤F®ªJ²£Eµ¨I¿£K»­=°­:³®>°©?®¥Mº\9eMµ¢Cº¢M¯«G«¡@¨\9aA¶\90;µ\93C½\8d=º\93>´\9c1¿\9f5¦5ʨ4Õ©5Ñ­6É£8Ë¡D¿\9bA»¦I¯¡S«\97Tª\91^©\9aZª\99S§\9fN¦\92K©\96R¤¦U\9f§Q\9b¡L\9e¦U\9e«J\99¤M\9f®R¡±Uª¯\ª¶U¢²K£ªM\98\9eT\8f¡J\84«G\8a«N\85¸N\83·[\88¼f\91¯b\8a·e\8c¿a\89»f\91ÄY\8cÃ…Q\94µK\99¶N\8c´O\8f·G\95ÃI\91¹M\92»E\88ÃO\81ÄK{Ã@\84ÃŽE\89Æ?\82ÇB~ÈLwÉT\82ÆN\85ÃŽJ\8fÃœJ\88ÙQ\82Ã¥FxáJrâBtÙ@wÔAhËMiÃŒOqÃŒKoÈArÓCh×FoÃ;mÈ7kÃŒ;tÔ@nÊHsÃ?hÉ<_Ã’8_Ë@^¼9b¹6f¶6o¹:z¿>t¹1lº3l²;u´Jt¼Kw¼Ey´Gs³R|­Kz­S~´Q\81´Zv³X\81º[\83¯O|¨K{¦Ow\9dH\84£M\84¢Gy\9b<\83¨<}¨=\7f¡E{Â¥Gy©U\85\9eX\86Â¥U\87¦_\8c£S\93\9dS\90\9cQ\7f\9fX\80§Vuª\\7f¬\~\9f\w \\7f¢g\88\9bb\7f\9ej\86\93d}\8fat\8eis\8ab\81\89`~\80\$L>!IC.PG"AT\1fEE+QF$NG:TL1GEAUO<HEFLJ<GOBA=INB?EG;HG>>FDAOPJLOUPKPNPHN]QSbJ[]ITePOcMMd\RhYFi^IicYikKriSo_ZrdQ\83gR\83hb\81aR\83dX\81lM\80jQ\85fG\8bkF\99gM\94wK\94tN\9e|:\91\86E\8b\92=\8c\90:\97\8d8\97\86>Â¥\83A¤\8b1\93\8d8\9e\8b<\98\851\9a\84=£{.\9et-¯{7§w@Â¥wIµ\856Â¥z@¯{2¡}2­\7f-´{8³x#²\7f%ª\871´\813ª\94.¸\8d;Ã…\9cCÈ\9b5Ã…\99/ɦ6Ǥ.¶\9f1¸\94/«\9c7µ\96EÂ\96D·\90JÀ\9cCº 9³\95C±\9b;ª\96J«\929º\950´\998¸£6¿«4¾£9Ȭ<µ¤<® J®¨D¹­O¿°E»¬J¿¤I³®MȤDÀ¦B¶°D´ªQª²Pµ­E¿©G¼±N½¤Oª\9dL«\9dI°\96EÂ\95M·\8fIÄ\8fB½£9Ã\9d8½¦7À¬:̪4È©8çGÌ¥LĪD¾\9eD´¦J§¥V¦£Z®\9cW§¤]¨\9eSª\98HÂ¥\9aVÂ¥\9cO¨¯X\97¬Q\9a§T¥¡N\9e\9eG¥©J\9d§V °O¨ªU\9f¯U\98®K¤¥Q\93£E\8b¯T\88²H\88´N\8b¼O\8e´V\99µa\9bÀW\8e¾U\9b¿_\90ÃU\9a¸N\93¼J\8b¸T\7f½N\8aÃM\8f·I\96¾L\8dÃJ\85»F\7fÉE\8fÃC\8cÊE\81É>\86ÂH\85ËC~ÃYwËV\81ÉD\86ÃŽY\84Û_\82ÞW\81ÃœUr×ShÚ?pÓAfÑTqÊFxÃJsÈNvÃ@mÃ…=qÃŽ?g¿>tÇFlÂChÆGjÊEh¿3bÇA`Ã?aÃ;d¶2k±3tµ;p¸;k·1j·?oº9o¾Bn³A{¶@\80¹A\86¸Qy»M~®Q\80°Z\81®[\83®P\85²O\87«F~®K\86 Q\80¡U\8b§L|¨K\7f§E\82«?~©Lu\9dFtÂ¥J\84\97J|\96X\87\9eU\92\9fS\91\98^\95 P\81\97\w\9eMt­S|­dx©X\80¨X\80ªX~«d\85¡_\89\9bh}\8e[\82\98g\83\97]\81\93cv\88Y\81\84P\1dHN'DE,F>0OG%QL)KJ2LN4KM>LA=IFDME9NAAP=8M<>I:?Q@DJK?BG=AHKPDON>QNFISJQQVRUV`IMZQVcNNjHPdQBc^DkaSfeYklTz[Vz[S{ZP{[[x\Y~bM}gG~dH~fK\8dfK\8fpN\8foO\8ezJ\98}A\96\8fC\8c\91@\87\94B\90\87<\88\8c:\91\8eA\90\8d>\9a\8d0\9e\8c3\94z?\9fz9\9cz4£o<¡u8±r9³|A³\82<¨{6­}9¤}8¨\84<³\848ª\84-±\89*²\825ª\811°\87A®\8e?´\97<¿\93<½ 9­8Ã…\9e7¹\9c/¸\9d;°\998¹\8b:·\8dA³\99A¶ L­\92Mµ\92@¬\8fJ®\9cD·\9a<º\984¼\990á5Ä\9b+À\9c2¹¦1¾§Aµ­Iº¯C¼¨AˤO½«G·«P¸¬PÀ\9dSµ¤M°£S©©Yª°U¶®V¹¯I¸§O»¤V®¤N°\9bE¼\9bEÃ\9fSÀ\99\96NÂ\9fAÇ£=Å HÅ CΤBÊ®?É«EÅ­C½¯?¾¡<­¨?¢M®\9bS´\«\99V \94O\9e\92G£\92H\9e\9aV£ªT¡£K\9c\9dF¡\9cF¦¥O\9e V¥¢V£®U­¬N£¨F\99¢I¢«J¡¦Q\93¬Q\91±O\98´R\8d½M\99ÃW\99·T\94ÇO\93Ã…U\9cÃŽ\\9eÆW\9aÈZ\90ÀM\8a¼Z\80½W\8f¶R\96¹E\9aÀL\93ÀL\8dËB\89ÄG\84Ñ@\8eÑI\88ÑO\88ÃIwÆSsÈLyÇQ\87ÃM\8aÃX\8bà]~Ãœa{ÛWrØKiÃJnØKqÔNtÔIsËFlÊIu¾Gn¿Mk¾Bu¾<vÃ…@{ÃŽNoÃKpÃK_¾:XË>XÈ;Z¼<c¹;`Ã8g¼?o¶Bq¸=cµ<b»9k¹6w»D\85´H\86·J\89±K\86¼R\8c­S\8b®S\89¶S\85¯X\82ªN\87¯L\8b°Q\86¤G\8c\9eE\84§O\90 O\8aªA|Â¥Ey\9cK\7f\9eNz\9fJx\9dO}\9aX\87\93_\90\94T\93¡O\8c\9fW\8a\9cQ~¡K\87­Q~§[|¬Uw\9f_zªZ\80§_\88\9a_\87\98`\85\96_\88\96]\85\92Z\8b\91V\84\8bJ~\87N\16I@\19GB'IC4II4P>0NG7LB6IA;V?<PFCJC@H87EA4N>8L@9EDJE@>E=C@JUHFRJOHOQLGVYGOUCUZ?RkAHeMKlQO`SIaaLfeKh_StfR}_[{[KvZL\7f\Q|_Iw^K\83TF\80YH\80aH\87hM\8ekN\92wL\95{N\9d\80?\89\908\8f\97?\8e\87<\94\8d3\88\89>\8b\89B\91\8e8\97\84>\9a\8d:\99\848\99{;£\84F r<Â¥nG¯{A¯vC¨u>£\82<ª\82?¤\837Â¥y8¦\820³\880­\7f*Â¥\8b0¦\8a-°\8e:®\875±\96B½\9b6æ0˱<¿\9c;½\95-³\984·\91F®\95C´\8a=¼\9dM»\92E²\95A¼\94@¬\92@³\94I» :º @¶\9a1¼¡:È 3Ì«>¾¨:æF¶©F®;¼§HÀ²QƦM¾¬Y¼­XÃ…\9fYº R¦¥I­¨K®¨Y®¤O¼©T²ªT¾¬O´§N¬\9dH·¤RȤMÉ\96WË\92HÃ…\9b\98?ÃŽ\9f?΢CäIð7Â¥EɯBÌ¡CɦB¢G¶©Nµ\9dW®¬^¤\96R®\95J¯\9aL«\9aM\9e\9dW¦«J «Q\99«N\9a«K \9eN¦¤W©¦R¤¨O§ T\9cªH\9d\9bJ¢¢H§ªY\99­W\94¹J\8d´R\96³S\94µP\8fÀ]\93ÀS\92ÂW¡¼V\94·Z\9e¾[\96ÄZ\8b¾Q\87º\\8e·T\86¾B\8fÂS\94¹[\91ÃO\84ÆQ\81ÉV\93ÄK\8fÊK\85ÃŽH\8bÇNuËV|ËH\84ÑJ\80Ã’\\8cÚV}Ã’VrÃ’YrÉRlÊUsÑXpØSdÃCiËLr¿Dh¿;eºBuÀNnÃ<v¹Ai¿IrÃIgÃHZÂFZÄBd»:[»;eÀ:k°@i¶8c¶>w´5q¸BhÂBkµ=r³Ku¸M\80»E\87´O~½L\82¸W\88«X\88ºU\8b½Y\8b¶O~ºF\86°I\8f¬;\8b­J}±I\88°B\85¡D~\9fH\82\9fK\83\9fL|\9aNw\92F\80\92T\83\96U\88\9eW\92\97T\8f«Y\8aÂ¥Ux£L\7f«[~«^s¢X} dw\99a\81¦XwÂ¥a\81Â¥X\8d\9a_\84\98_\8f\8cc\8e\94S\80\88S}\8fW\1a[?\eRI PA+IF5LF>T<>XE?ODDOC:VCAVG9K@7MCAC<BN<CIFAOIHKDI@;XC@\JLPER^MSZCP^<HY>I]FBlKDkUIcbJl^GihGy`G|^S{`R~fSveXyVKu^N\80XJ\84VJxUCz^C\85gA\87o@\83xE\8cxE\92\81B\86\90:\82\8e5\8c\90?\86\877\87\8a6\88~5\92\7f5\93\89@\97\86;\9f\8f@¬\85J©\83F°}K©vM«yG¯}@®\80?«\80@¤\7fB®|:«\85>¦\8a8 \80:©\853£\84*®\911¨\8f/§\89<·\8e5¸\9a0º£-º¥0¾\9c6´\9e9¹\9d=­\95F®\8fP·\94J´\8eR¸\95H·\9cH¿\94D³\97:²\9a=³¤Aº\9c=º\99CŦ;Ì¢>È«:É£:¾¬> ?À£=È£BîM˵S°[½¦W¸¡V¸ S«¦J±£T­­Pª¯W®\9fQ¸¦R¸¢UµªY·©LºªK¾\9dP»\9aUÇ\99LÆ\92FÆ\9bNáGÉ¡HÄ\9fIê9βBůFÄ¥FÈ¥AîE²¬M·¦G­¢R¯¡V²\9dP®\98X¬\9fS¬P¢©K¢¯E\9c¨K\9a¯M¥¨Y¯\9cU¨\9bW¨¡W¢\99O£\95S¢¢T¦²P\9c²O\92»J\92³R\92µY\94µ\\8eÄS\93ÂV\9cÉQ\9cÀS\9d·T\97·Y\95·O\96ÄV\8aÉJ\85¿O{¿R\81ÇP\8cÊ[\8eÃX\80¸`\80»`\89Ã…\\87Ã[\89Ã…S\8eËL\8bÉG\82ÖQxßZ\7fÙS|âL\7fÙVwØXuÃ[{ÃVrÃUtÃ^eÃ’UdÇGcÃ…GeºIc¸@a¿Jo¸Ip³Jj»Fh·<fÂ?dËG\ÄAaÇDc¸;^²;j¸@e´5c±4g¾3l»1gÃ…:h½?m¸7z¹@\83®@\80±N\8a½P\85¹J\8c¶S\8b°T\88µW\8d¼W\82ÀN\85¶O\81³G\89¸@\88¸D\84¬B\8c¨M\83§N\80\9aH\88\99M~\94H\82\8eB\82\90D\86\96D\82\9fF\8e\9fH\8a¤R\8f©S\85®K\81£T}£W\81©V|¢Rs£]r\98ev\98[u¤Y~ a\82¢[\85\96[\8c\88X\90\8b_\94\83b\89\8bS\1fIG\ePJ'BA0BL4JA<NJ9KCEHMCHF;JB9RB;G>9OEFD<AELDOGIGJEG:UL>U>DNJGTAL[:OW;IWGA\FCiM<iI=dX>i_Jc`=d`OghFijLufI\81aEu\FnQ9rW9\82SD\80aI~SB\86WF\86^I~b<\80u7\81wF\88\88H\83\8c8\83\82:\85\893\8fx;\82};\85{/\8b\7f;\8e~9 \7fF\96\81H\9f\80D¦\8bL§\87J´vJ©\83?­\84Cª|=±\7f6¯\848²\87E°\86<ª\8c3²\8a8«\87>¦\8d0±\92@¨\92Cª\8cB«\968«\9b.¼\99)¹¦-­¡7© B± I¨\97F²\91Q±\9aI¯\9cE±\8dJÀ\94KÀ¡D½\97=º\9dA»\9d7½\939´©C¿®8¢>È©@«@´¤I¾¨?Ĥ=Ä©L¼¤Ié]ɪ^­N·§P¶¦G®¥H°«P¶¢O¯ M±\95I¸\9cZ¸ U¹ Nµ¢Nº\9bT²\97ZÃ\8eNÈ\9cRÃ…\9fHÇ¢VÇ¡VÄ¢NʤCã@â:Å«DîD̨7µ­J°¬M³¦Sµ¤Sµ©Q¬¬B¦«N«¥C¦©I\9f\9fA\9c¤F\9a¦M\9c¢K©¢T\9fÂ¥Z°\9fU¤¤_\9d¨]¢¢R\9f¨[¨ª\¥¹[\9c»W\9b´P\97·N\97½S\9bÀY\98´`\93½[\96ËQ\9fÀ[\98´\\8fÀN\8b¸X\8a¹]\8a´Y\81Ã\\82Ã’T\8dÃS\92º_\82ÀV\8a¹_\81»U}ÄR\8bÓX\8cÑO\7fÃœW\86ÛI\82ÃœR~ÃŽW{Û^wß[tÔ[\7fÔZwØ\lÕOkÃœU]ÃŒUeÃ’Ra¿@]ÄKj·Gr²Ck»Jg¼;iÄ9e»HcÈ>^Ã…Kd´;e²@^¸9eÀ3k¹=o¼6d³Cr³1q°2uÂ5bÃ…EvÂGpÃC\80¾Oy±O\85´I\83¸F\82³L\88·S\86ªP\8bºV\8c­J~µH\87¶K\8cµC\81±G\89¯7\81§?\84\9eH\8d\99G\8a¢=\85\91H\90\95E~\9eK\87\97B\83¨?\8eÂ¥O\93ªQ\8f³P\86§Hz¢W\80ªR\8a\9dU~¨\\80«a{\9eet [\80£b\82\99c\85\9a]y\93Y\87\8c^\8e\95^\86\96R\90\94T\1cG>&L>2M?0?I/KM3JN3KJ<GL>>H9DL4BE5NI<HB?JHAMAPMETQKGN@VK<VD>XKN\CLaFP]:H`<AlMEtM?kKAr_Dla>jdI^[IZgAgdAf_>tfBug=l\8~X8\7f\3v^>wZDy\J\81^F\7f_8\8ae:\81wJ\85\80H\8e}F\8e~A\87n<\88o;\85\7f:\8c\82.\9c\80/\9aq5\96s>\9buI¯zJ²\89G°\838´\7f7¸\81@±\86>¹}A±x4ª\87C®\8aGµ\85>³\88?Â¥\81D£\81?°\7f;¬\89?£\8fA¡\87>©\95@Â¥\936±\980¹\99$»\979®¡=¯£B±\98K±\9eH¬¡F¨¢G®\95R°\99DÀ£<¼\973²\924º\9dC³\99F¿¢Cí>ɯ;ĬB¸¤;ȬCŪFìBÉ¡DáMƧYÃ\9c[½¦Lµ§F»©B²\9dK¸\9aL¸¤N·¨I´\9cR¹¡W²¡Y²§OÃ\9bK´\92Nµ\92U´\97FÄ\92GÃŒ\96IÈ£S̪UË\9fLÃÂ¥GÒ¡9Ø­4Ò©6È¢CÅ >¾®>¹¬E´£Q»¡M½«H­­B£®<¡ D\9e¡J¬¡F¤\9fL\99©U\9bÂ¥]\9eÂ¥U¬¬Y¨§_¨¨X¢¦`¡§^­¡T¨¤Z\9e³]\98²T\98·O\96½Q\8c¿T\9cÃR\9bµX\9eÀ[\90Ã…V\96¶R\98µT\91ÀU\8d¹V\90¼Z\8bº_\8c½^\94Ã[\89Ãb\8eÀZ\90Âb\83½`\7fÉ]xÃŒZ\87Ö[\84×P\85ÛSyÃœNrÕ[{ÃY\82Ã]{ÕWwÓ]\7fÖQ|Ã’QuÞLtÃœNcÕL`ÉEbÉBkÃBnÃHf½Bm¸?r·Fl»<b»HhÄKhÄ@i²D_¯Df²9o´7gº3p²@h±Ag²Eu³At³AkÃ;tÃ…ClºDn¹@y²M\83±U{­M\88²P\84³T\8f³I\8c¨F\87«F|§I\85\9fS\80¤P\8c£M\8e¯:\94¤>\88\997~\98.\84\9a6\83¡9\8f\9aI\90Â¥N\82£D\8f£Q\8f¦N\8aªG\84®F| Mz\9dT\86£[\89\9bb\85Â¥e\85Â¥b\81\9ab\81\98aw¡\|\9c_\81\8e]~\8fd\85\98^\8b\97U\85¡V\8b\9f\*N=&U>(L91?J1II2BP:AD4CF@CQAAQ<DO<DIDOSHQECJRUIKLR@QI@YK9X9<WE;ZBLd;HW8@`AKiD<fGDfVCsO:q^?j]Fa[KhY8oU7iWCehHhk@tdCt^8~T7|\6iVFp\Bx]I|\J\7fg>\80hA\84zJ\8b~?\89t;\8dw2\81l>\8fl.\83{0\96u9\99h>\99o3£oBÂ¥\84I¯\7f?¯y6¾z?­\861±\87A«\80;¨z=Â¥~6³\83<¤\93:©\909¤\89?£\86D¨\8e5¯\867«\87;¦\86?Â¥\966£\9d3¬\91/ª\9f\1f­\947´©?¶\99>·\99Jº\9e=®\9e@³¤K´ T²\98H»\97>±\9f?¾\9c@½\8e9µ\99E»\99J¸®Fµ\9eL»¬H¿\9e@¼¬CÆ\9bAÒ¦RÄ£OàSÄ NÈ¢Z¼¦U·­Hº\9cNº\9aN½¦S¢U¼\9bV°\9aM¿\9bXµ«J·¢FÇ¡O»\97H¼\98K»\99IÇ\9e@ȧ?èMÃ\9bTÂ\9dMÆ\9eMË\98;ɨ>Ë¡CéBÒ©7ǧH˻KîH¹§L¸ H®£F´¡CǻJ§\9f=¯\9b?¢©P\98±N¢­[\9c°R\9d©R±«_£^¢®[¥«c§ªS§±_¥¯T¨¼Q¢¯K\95¾X\93¾W\99³M\92±U\8aºO\97Ê[\92¸Y\93´W\92»P\96ºM\8cÆa\89Èc\8dÃW\91ÄN\90ÀP\85ÃŒT}ÂV\86¾V{ÃU\81ËU\83ÉP\8aÃS\84ÖX\82ÑVuË\\7fÃ’S\7fÑbtÃa{Ô`|ÃW}ÞOuãIcáM_Ã’XXÇLcÃ…AjÉKqÇTnÀBmÃ?nÀBeÀA]´C_ºNlÂ=jºDa³Aj±De¶AbÉ7nÃ7d¾@tºDp°PsÂBq¹KrÃD}º;\80±Nv­Iz­M\85¶N\87ºU\85·R\85©C\82\9c>y¡Ly¢M~£G\87\9eJ\8b­E\89±<\97«6\8e >\8f\9b@\7f\996\83\9f:\93\94B\82\9eH{©E\7f³I\92³I\88®C\86­C\84¨N\7f¢\\81\9cU\8d\9ad\8a¨[\93Â¥X\80©\\83£]~\98Z\80¨_u\96X{\90Z{\97P\91\94U\92¦M\95\9eX%I3-M4,O6'IH$GS-DL+HL5?H5CE8MI@KGDJQLBNBJNLSRMLJRA?T?9W43Z:<c::c=Ca=?ZD?\H6aI=`W>oY=oV=rZ3m`8dW;l\7gS>`Q8c`=nk9sf<l]1pZ1j]4kaAogBzbGt\F|aN\88sK\8dtC\89x7\81p1|n5\83k2\83k/\8ah=\89i5\8dm8\97x?\9aw:£x9¬|A®uD¸{<²y?¹\866¹\85:§\888¡\8b4ª\8cA¤\8b<¡\8f5«\8f/¦\8d:±\897­\862²\907©\919©\8f9¤\962«\9d5«\96*¼¤'»¡/»¤7¹§E¹¨A²\9c?³\9aL²\9dN­\99K°\97\9e\9b?Ã…\9a>¾\94CȣHµ U°\9eR¼\9bOÇ\99JÆ¡DÃ\93NÇ\92\9cUÊ\97Z¼§P½©KƲNîJ¸§X¶¢X½ ^¿ YÄ\98O½ J¹ªDȣL´\97C¾\95G´\8aE¶\8fN¶ H¹¢B¶­F¹¦D½¤IÀ¤PÆ\9fPÉ KÀ¡?âCÃŽÂ¥=è=Ó¥KÌ¥GƱD¾¬NàS»\9eO®\9aK©¤>¡ªG¨ C§°A\9f±L¥©R¥©T£°\­§[¦´Zª¶b¥±g¦´c¤¹^¨®U\9e¼Q¢¸W ·Y¤ºQ¤ÃO\93»Q\99¶V\8eÀQ\99ÃY\99Ã[\9b¾V\9e¾R\99¿R\90É\\90¾[\8eÂM\8cÃŒI\8aÆQ~ÃY}ÈZ\82Ã…X|Ã_\7fÚZ\81×U{ÛX}ÃS\82ÃŽ]uÃŒVo×WrÑf\7fÃŒf{×a|ÕXuÃœQbÚ[`ÔW[Ê[^ÂNaÇOiÆNqÃMqÈJb¼LcºGa¿@aºCf¾CiÃ8l¼7_¼=dÃ…9nÇ;vÃDqÄHmÉSw¾QuÈOtÂK}ÃH}·B~¹K|²J|¹F\81³L{´R~³H~¡M\80 E\84\99H\7f¢F\84¤E\82§N\8e¢D\91«D\98©C\95¤A\87¡2\85\9b4\81\9e8\87\9fA\8c§?\85¬L\8c§M\86³F\86®=\80§B|\9dE\86\9dT~\9d\\84\9b[\88\97Z\90£V\88¢O\8dªU\82¡P\80¤N}\9dZy\95Z\8b\9c]\8b\9dP\8b\98Z\8d¢S"<3&I<\1c@8\1d>I\1fKE*C;)HD2A=.F>1::@G>8=I<ARKISE@FIDIQ??JF:ZC<]<4W6=WJ<fJA[F>cDCcG=]U=aV7q^2kd4d^6gL?dTC_ODc]@`hAh[<j^=ob3mR7uY:qT;tc6o\8\7f_E\80h?\80nH\8ff?\8fm9\80o>\84m?\8bx<\89r9\8fkB\8ea1\92c.\9ax-¤r;£m5ªt9·u>º|8¿\895¿\87A¹~8®\89=¯\8b4§\95;\9f\8a9«\853£\939«\8a6\9f\888 \97/ª\89>´\96:°\8f0\9c\8a;Â¥\9b,ª\8e%«\9a&½¡.»¦0»¡;¸\97:´\96F¸\97:µ\9dF´\99?µ§B½\99HÀ\90F¾\9c@¯\97>¿§Cµ§S¼\9a\98M»¦UÂ\9bTÀ\9fNÄ\99PÄ\9cOÇ\99ZÃÂ¥S¹¦V»¦NçD¹ S±\9eK¾ª[Ä­S½©VǤRáSêP¼ J¿\9cO·\93Oµ\97R¸\97Cµ\98O¼¤Oµ©G¾­@Ç¢N¼ªJÀ\95EΣKȤ=âIÊ\9f9Ò¬BÃ\9eCɱ<¿±CëPº¥R°¯C¸±8®¤=°£E¯§F±±Q\9d®K«°LµVµ°e®¬d\9eµV¥­Y¨ÀZ£¸_\9b½Yªµa¤Ãg ºY£ÅJ\9a¿W\94ÄY\8cºQ\8eÃ…V\94¸[\97½V\95Ê]\99¼S\8dÃU\88Ç[\8dÃŒa\8dÃW\88É]\8aÓT\85Ã^~ÓW\81Õ`\89Ä]\86ÃŒ]\85Ã[\85Ód\85ÇTtÔasÃŽZrÉXrÕotÖdzÃ’^rÞirÙafÑ]iÓO_ÃN\¿UaÈReÃFiÆFjÃKeÄBrÃF]³K^¿Q^·>`»;gÃ…@cÂAgÂ>iÂIfÂCwÀDzµQ\80µRw¿L|¼M\83½H\7f·Ez´I|´Px®N\89²G\81µAx·J\7f³@\80ªK\86ªE|§?\83§<\80¦N\84©N\89³C\8c§H\91Â¥=\95£;\8b\9d,\91¤3\8e¨?\86Â¥I\85Â¥O\8a³F\88´@\81¨Ku¯G\83¨B\7f\99P~\9eU\81Â¥^\87¦U\8b¬Y\94«Y\93Â¥X\8b±Oz«Yu\9ca\84\9db\87Â¥W\81\9dF\81\9eX\82®V\103/\1d:9\1f<9\1c@D+<>.@8)E@.:C+=8-3<-=:77B=EOJCLNJHJ?IL@JNGLI9IO5;UE6RF>YK@eLAdO5^N7gU<dZ1cW0d];]_:dR7l]@hXAde<ac:k\4k]0rP7lO8mQ8tV=pX2s^5\85_;\88h8\93e:\91h7\8dsA\8ewC\8br<\84v4\8aq0\90g=\91g8\94e+\96g/¡w6¤x>³j8¸pA®\829¹z;¼\7f=·\85A°\885¨\8a3\9f\8e6\9f\94:§\89?\9e\91@¢\934¦\926¡\97:§ >¯\97=«\94A¤\8b4§\96*¡\92.\9f\95'­\980³¡4²\98?¶\9a:«\96?® C³\9d?·\9bLȬK²\9dK¶\93B¶\9fI¬¦J®\9cE¾¢Lº\9fI¿¢Rº§Zº\9fU¿ O¸\9fY´\9eT¿ SÆ\9f\9aU¹\9cQ¿¨IÅ­O¼©JÄ°Y¾­\º¬VƦP»¯F½ªLÆ\9eIÆ\95EÄ\94?´\9cG¬\9cH²\98Jµ¤O¶¨HÆ¥Kŧ?¼\9cBÃ\9bDÊ @Ѥ<Õ¨:È¡EÈ«?Ǧ9ñDɪ=Æ¥C¾°L¼±F³@¶¨9·®=»«Q±¬U¥®W ±R«¯d¯°e©«e\9b°V\9d½`£ºb¡¶^\9d½W¢¶_ª¸g\9aÃd\91Ã…O\96ÃJ\8dÆU\8bÃY\8d½N\92ÆX\97ÄY\8aÆR\8aÈ\\91Ã_\91Êa\89Æf\8aÃŽb\8cÊW\81Ã’[\86Ã’Z\82ÖX\82ÃW\89È[\8cÆe\86Õb\86Ã^\80Ãd|Ãg|ÃŽZvÃ’_rÙfvÃŽmvÃ’gqÕ`mÃœioÃœ_sÃRtÃŒWgÃ[hÆWpÆOmÃŽPfÓJmÄNo¼G_³R]¹Q`ºH\½K_ÄE`Ã…Bc¹F_·Jk»Lp¼E|½D|¶L{°H~²D\7f©G\85°?{¯F{¬N}¤K\82­:~³A}±?v«D}®A\86®=\89¦=\90§@\89 C\91£M\92ªI\8d¨H\97\9a5\8b¦7\90Â¥-\99«;\90¡@\95¦:\94ªB\84£?\84«Hy³Jz¬;{©<x¦I\82¨O\80ªd\80¤U\8c¨Q\94¦R\92¨W\87®a}ª`\84Â¥a\80\9fct\9fUx¨J\81¡V}ªS\18;4#41%<>\1e:D 0C1351.D.=@24>+0:46G66DA9B>BHMBKD4RT:KJEFVF;I:FZG;ZJ0cB8jP2mP4mH8kQ8kV5b_;iaBaU8lQ/^W@_Z<\VGbd;`c/a\/dW5mV6iW;lV>v]9t]3ua<\8c_:\8cc4\8en;\8en>\91fJ\87i;\85{8\91q?\89k4\92h1\91^&¢k,¡i0«q3®e>¸l9·w7¹\86>±|@²\8b2¬\8f;§\960¢\962\9c\8c3°\8a@©\939\9b\95/¤\97A¢\87?®\8fA¤\998Â¥\8b7ª\8c5¦\8e1\9e\8f'\9f\8d+«\96,©\973­\99;\9c\984\9c\98@¬\96:©©<¶\99M»¡V­\97E¸¡V¯\99U©¡G·\9eP³\9c[¶¢Rµ\90U¶\94\µ\99S°\9e\¿\91Z¶\9dTâ`º\93WÉ\95Y¼ X»®JéUñUĦQ»¯LÆ©ZãXÃ…Â¥Tº¦Q·\97EÆ\9cJº\99E¿\99Tµ\9dJ¯\99N±\98I·¡BĨ<¼\9eEÊ\99@É\9e@È\9e@Õ\9d?Ì¢FÕ¢DêA̵:Ô°=̶7îF¼·;˲BÇ»EÀ°J¯¶?±¨G·¸Mµ´Q²¹P¥³[\9f»_\9eÀ]\99¼b\98¿^\9a½[¢¹`\98Ã…U\98·a ½b¢»Z\98È[\9bÇY\8a½W\93»L\85ÂJ\8bË[\8fÆU\90ÃŒT\94Éb\94È]\93Ã`\85Ño\84ÃŒ_\87Ãh\8aÃX\81Ù_\85Ö\\90×\\8aÊ[\85Ú_~Ód\81ÚauÕjuÃ’brÃfpÚ[oäjnàj}Ã’`nÛqfÚetÃhtÕ_kÉ\lÉ[mÃS`¿^eÉZbÕLiÃ…Yk»P_ÃNZÃ…WeÄQ\ÊNg¿FZÉGcÉFdÃDc¹MzºNz¶@z¿I\86¼D\8bº<\83¬7\91·>\8eªC\82¬M{¹L\84ªD\80¶Au®9\83«4|±A\84¤>\83¤3\8e\9e6\82¢B\8a\9bA\99\9cD\8fÂ¥;\99¢;\8d\9d2\97­-\9a¤-\94£:\93ª9\94µ>\8d®H\93¬;\82¦G\85¡<s®I{§Ou¬N~«d\86§P\7f£R\83¤X\88®N\8b²Xw­c\82¦]}¬f|¤Vq­Uw¬J\84©Q\197"#2%\1d05".7 ,7():)0<)0B*,B6,G2-K;7=56>>@>E;?N9MP8RR7EW7FTD?ZC;g@2e;4gG4bH0kF4bK)aT-jN3iV:lT=gU8]S6]_D]T@_X=b`;[W7\Q1lU+t`.oY2kU7uX0\80X>\85_:~j6\81g8\84bF\88dD\85hH\89n>\87p=\90p:\8eq/\98g,Â¥i*£].¬h-°h2³s*ºs2½\81=´\80>±\897«\93;©\987¡\92:®\88;ª\8dA¯\887¢\8d;£\81D«\83<\9e\8eA¢\8e?ª\92F©\92@¤\96:\9d\98.\9d\9b*\97\942\9c\9a,\97\95-\92\9a2\98¡7\9b\9c?©£@¥¢K¬\97S±\9bR²\9dX­¡Z®\99T¸\9cU´\9bX´\96X­\8e]¬\88_±\8eW±\94Q·\91Q¾\9d\97]¾\9eUÃ…\9d\˦ZȦXÄ«YÆ©UʨIæL¼\9cPÃ\9dT½\96SÂ\9fPµ\9dGµ\9cM´\9eM½\9aQ¶\9dY¹\96R·£D¢?Ç\99:½\9b<½¢<Å©EÅ©PÉ¡MÉ£GÒ©KرDÙµ<Ö±6û:ÆÅ<ÊÀ7ȶ7ʲE¿¸H·°C·ºH¹·M¿ÃP³¹X©º_\9dÃ_\96Ãj\9aÃd\9aÃ]\98Éa\96ÆW\92Ã\\9b¹h ¼c¢»n Ãh\9aÇd\93ÀZ\8e¾U\8aÃU\81ÓY\87Ë[\8aÃ_\8dÃŽ^\85Êb\8eÆh\8eÃŽq\82Óm\7fÔn\87Ã’`\88Êa\8cÃj\8eËc\86Ö`|Ó`yÛmyÃœuzÃl}ÖbqÚ`m×]kÞiqÛorÙgkÃllÖmlÚbhÃŽcrÈekÇ_bÄ\`ÇejÃ^jË^i¿`lÄVhÇReÈWnÄSlÉYpÀQeÃRhÇOeÆIpÀArÂJt¹;\82»9\81¸4\89µ:\83³1\8b»9\85¹;\8aµ@\8a®K\87³E\8b¯@~µ9\7f´0\8c¨/\92\9e:\89\9f5\8e\92>\88\95>\8e\90>\93\9b=\96¡3\93¢0\96£4\95­2\97­2\97­/\96ª0\97°A\93³F\90Â¥>\8c¬K\81¡It§Ox­N{©V\82¦Z|¬O\80¯R\8b³L\8c¬U\84¨]~°b\89­\\83¯[\82¬Uz´W|¶Q|ªJ\19>.$4)*1:#.<032/(<3/9+4J7.E,/@8.C1?@24:9<HN7GJ<LHANP@@X@CSF>cC.gL.^P8eB1_K5lP4eQ4hb9]_+aa7eX;qWDrN@d_4dS?]R3]`1VR/fZ.l`$fT+p_,uZ'xW/xX9\85e>}_:\82r5\82hD\80cC\83u;\81m9\85m7\99s>\99t=\95p.\9fq2®_+³i1¯n6®q6¼v:ºs7§}E°\8b=²\7fJ­\889\9d\879 \84@¨\87<£\8f8¤\91F\9f\85G®\88I\9c\84H£\86:©\8f5¬\978¢\920£\986\92\9c(\9c\8f/\9d\99(\8f\925¤\969 ¨?¦\9d4\9b¦@ \9fD\9f\9aV©¡U¶\9bS«\9bW«\96Qµ¤M¸¢`²\97Y´\92Y¶\96P¬\90Z¸\8fT·\9cO³ SÃ\98[¹\97aÇ\9aVÅ©^¾£XÅ«]ºµ\À©R¹°MÄ¡NÅ¡OÀ\98Y²£P¹«WÀ¡V¹\9dT½£_¿©Rµ\9fN¶¢C¼\9a=Ä©8¶\9b=Â¥=À­Mɤ@˦?ɯHÖ­DÕ®?û:Ǻ?Ì»?ÿBαDòOôLÆ°Q¼¨J´¶H°·P³·\²»[¡¿Y¦Çb\9dÄ`\92Éc\9eË]\9aÃ’\\93ÃT\9aÃ…c¢»f¡¶]\94¼d\9eÃj\94¶Z\8c»T\90ÂV\8b¿\\89ÃŽP\91Æb\8aÃ…\\8fÊ_\97Éf\9cÂk\88Är\82Äk\81Ó_\86ÃŒa\85Êf\97Ôc\88Ãe\8bÞZ\87Óm\82Úo\86Ã’j\85Ã’k\81Ó`v×arÔ`e×dnÞoqÞmhÕimÃœhmÊhmÚ_iÖioÖc`ÉibÇZ]¿gbÃŽfc¿ahÃVeÉZ_½\mÊ`nÉ_e¾Lm¸Nk¸Up»FmÃBoÄE|³:w³F~¹9~±?\81²7\90¯>\84»F\90²C\84²7\7f´Bz´4\84¬7\87¨/\83­3\84®)\83\9d4\8f .\85\9b7\87¤;\91 F\94¦<\95©8\98¦4\8d¶<\9b°4\94©,\8f§=\9c¶7\8a­G\8c«D\8c A\8d\9cEx°O|®Hr°P} \\81®Y\7f«W\87²Y\89¯\\7f·U\7f©a\80·X}ºT{µ_w´[\84µH\82±I\1f7+&52\1f+4(-:-57*-0$&>.)B53?.399.D65F/9J92FK0DQ1LP5NKE>SHBXM:WE7[M0cD-hK2lH(bN+dX9]`7bb:f\2oR;rK>mL=qS/gR-e\8`R1`X*]b&h])o\(t[.uU6wZ.{c8z^4x_@\83k:\88s<\83r;\80j6\8al@\89gG\91m@\91h;\9ds2\9fm/ªr0¶{2°w@·u?°s3§u?©zK¦\84B±|H®\82:\9e\884\9f\884¢\856©\8c4\9e\90@\9c\93M\9f\92Iª\86H¦\86=§\8d> \98;¢\94>¢\954\94\99+\93\99+\90\8c6\96\8d4§ <©¡8¢¤F\9e¡B\9f«J\9f§G¢\9bSµ\93N³\95J¬\9aKµ§^»©`³«]¯\9c`± N³\94Lº\99Vµ Uº¥`À¡YÃ\9f_·\99W°¡Y¹©TñP·°XÀ·S¸¯DÀ£G·£M¶\9dO°¡W¿£]¿¯W¶ªQ¹¨[¹¤Y¹¯M²¦L¼\9cD¹¤@¶¬CÄ°MÅ®IÒ¢Cä<ƯEï?Õ´:ѳ=®=ôEùMÒ­JĵUïT¼­Q»«T±®S·¬Z¸³O³´S­³V£¼Y\9fÀN\96ÈQ\9bÔR¤ÃR\9bÃŽ[ Ê[¡Ã] ½g\9d¶j\8cº`\87½d\87¼\\8eÃZ\89½Z\85Ã…R\8eÃ’W\9aÂ_\9bÃi\91Æk\98Äe\94Àh\93Æj\95ÃŽW\8aÆR\89ÑR\95Ö`\9b×[\94×_\8cØb\93Ã’p\89ßc\89ÃcxÕZuÃœbzÖ`mÑiiÃnm×cuÑbpÑpw×gsÕ^oÃkoÓipÃjfÂ^eÉ]gÃ…anÃcnÇYdÀ\\ÀbYÈbgÃ…Th¹Vx¾T}·Pu¼PlÀAj·ChÃBuºBt¶Ezº@\84»C\83²D\85¨C\8a¯E}²:~¸3}²1\82¬=\82©6\8a±,\83µ4\83¨-\84§5\8c\998\8d\9aG\80¤L\87\9f=\88\9f>\93¡B\91´5\98«4\8f¦5\98¨<\97±<\95¹G\8c´B\86«=\8c¨E\80§Kt²El°EsªPt³I{´K\84®M~±[y±Y\81²So¶[n¸\sÀWv¶T\83ÀQ\86¸J%,8%;*\1c73)71$7-!6+*5=/*F38@27J4:H2:@78J7><F;FL3IE7>VI7TG4UI5QF<VK0\I9bU9aO9dX3l^3eX>l^5gQ*kL9hC9uC7iE9bL/kR4gM/tU4pY+kY'mY,if2ya,nY/q[7ka@oh8}`9yiByk?\8bkB\8caF\95pI\96pK\8d{;\9e|2¦x;©i3ªyD²w@§q<­~F¤|Gµ\81J­\83H­\7f@´\897\9b\8a9£\8c6 \888¢\83;Â¥\97L\9d\8f>­\93J®\88=¨\86?¬\86>§\9a5\9b\92/\98\90>\99\94:\95 +\9e\92-¡\8e:\9b\9b5©\99B\9cªI\95\9fD¡\9aEÂ¥\98D³\94B²\9dLµ\9cT­\99Y½¢[¸¯Y±¦`ª\96S·\9a[²\9fH²\9dRº\9aQº\9aOÃ…\9aO¿¦Jº¨L®£Q½±P·°Uµ­P°³M¹±Q·«M·´M±T°®Y°¤P³µTÀ³U³´`±±\¹²I¼¯N¹¨F°ªE·¢Qµ³JÇ®C̬C̦6ø:ζ<øFÒ®?ʱ=Æ©HíNÔ¸DÒ´JÂ¥O¹¨Z¹¦V¼­\´¤`¹²_¶®W®±K\9dÂM¨ÃK\9eÈQ\9fÃ]\99ËQ\9aÂa\94Æ^\9bÊZ\99¾a\94¹]\8d¼W\8a³`\8cÃS\84¾X\91ºU\91Èd\92È\\93ÃŒ[\92Ãi\99½g\9bÃdÂ¥Ãa\95¾k\96ËX\97ÈT\98É_\95Ã^\92Ã’c\99Úk\99Öj\97Ãp\8dÃh\87Û`\87Ú\nØckÓeqØ]m×^gÃŽ^wÖjtÄ`uËczÃlzÃ’erÃnoÇ^sÃ]iËboÑ^eÄZhÊScÊ]YÃZ^Â\aÆNgÃ…VvÃŽMqÃ…Tq¶Aq´Nj±Mi¹Ln·DxÀ>z¶C|º@z·?u³=\80±D|®9q«5~¨?zµ7\88²2\8b§5\80«3\7fÂ¥7\89¡,\8d\9d@\87©;\85¨D\80\9e@\89\9e@\84§:\92²6\97«8\93´9\89¨2\96°:\83®F\8bÂ¥@\82«M\83§F\82±Bs¹GnªPk®Us¯W~¸Lt±U}°[\7f©N\83´Jw³Mvµ^r¸b}¸Zx¶K\81´J\1d,2\1f1/\e62\1a7-\19=)\1e53#1;-4C57K90I1:M4:F8;B?=;J3:D4;G10S=2P:3ND4U=-\E2dU7eY>aUFkW<mT6iY9eY3kN3pG9nIBsN5fB7mA6jO0jW9vU3q\5v`,t`,oh:wd?qh=sk?ieFegCqf=oaB{_F\80bD\8cg;\93l<\91qG\98|I\95xA\9eoJ mAªiF°s=Â¥|D¦|JªzR±|H³zCµ\84D°\80=©}:¦|C¡\84E¤\8fH¦\91O®\8eIª\87<¢\8aC«\919³\921«\8d2\9e\8d6\9e\9c=§\9d5£\964¡\8b:Â¥\905­\9eE£\9fF¤\9fL\98©W\9c§T¤\9aO¦\95P²\98C«\9aT¯\9eUµ\9aUȴ]³\9fS³\9eW¬¡P¯ªL±«E¶\9aDáEÄ\9dJ½¨Fµ¯K´·N³¯V°§Y²°Mº¯H¸³PµÀV¹½M²¹O­³\¶©S±¯Y¬²`¶³^¶«Y°¨S¨«^®«X¸¡\±¦Pº¬S·­Gų>Ǹ9ƽD˺?Ô¬DÑ©GÌ­GǬGóAòHȲKĪPÇ®Oé^Ç©c¼¦_ª·[§·N¨ÂJ¤ÀM\9e»K¥ÅX¡¿_\9fÃV\9eÃŒZ\99ÃŒ`\9aÃ[\99Ã…W\9a»L\97ÃO\91ÂJ\89µU\8e¯[\8cº\\94¿c\93Êb\8bÉc\94Ã`\95Ãa£Ên\9fÊk¤½e\9b¾b\9aÃ…Y\9eÃ[¡Õ^¡åg\9cãn\97âc\98Úg\8fÃo\88Ãœg\84ßXxÃYyØdrÃ’_hÉZnÑZsÃŽasÆ_nÄftÃ…hpÆdrÃ’imÔgpÑgrÃŒfuÃ_mÑYfÃRb×TdÃŒYoÆQiÃŽOuÓQwÃŽJwÇLt»BlÀKb¹Gcº@e¼FpºCo¾Iw¸GsµHz¤<v¡;m®=p©AyÂ¥:x²8\84Â¥7\89©,\83\9d2\8c\9d2\90­5\8f®8\89°=\81«H\85®G\8b«P\8e£P\8c«H\87§D\8d±<\8f°>\87ª<\80«?\84¦L\82¦E\83·L\8a´O\83®Eq­Jo´Pw³Lw³U{±Vo£MpªQu­Kp³Zm³]{®Zy·Yv±O|µG\18',$-3\1977$;+$?<-8=*0:9>=64;:6C/6?93DA<8BA;FA2F.1C.7C22K?6BB8EE.UB:_T<bY5^]:cW>lV5rV6`H._O6_E<hF<hF7_A;mP._V5qX7r`5kY0oX8sj7}k6|iCrk=gbCdo=mnFwtH\85jD\81\H\8ecA\82^7\87g9\8dj@\9dn;\90\7f:\94n<§n=©k;°o@¦vFÂ¥q;¸uH³yD¸sM°}H·yB´\80>®\87@¨~GÂ¥\8bD \91S¨\92O²\85=­\82C¡\88>¨\89=\9f\93?\9f\99=\9a\925\9b\992\9a\93<¤\8e9 \8e;\9f\989¡ K\9f¨G\95\9fW¤\9bP\9c¡Q­\92B¹\8b<µ\93P¾¢K¶ªQ»\9fTÀ\9fY±ªL¯¢S­±J°\9eB± F±\9aK¸\99W² I¼\9eE¼ \¿±]·°T·«W¸¹W·µE¿¹J·¿]°µR¡´]«®W«¯\­·T·¯bº±Q±¦V´¯Y²¨\¬­O±ªR¶®L°¥=²µB¸¹>Ë¿IÉÄNÅ°EÖ®OĵSβO¿¸O¾µLãN·¦Xµ²^¶²^ðc½§Y·©Z²¼I§ÃK¥¶J¡ÅT§¾^¤Ã\\9e»\ Ä^\9eÇd£ÃV\91ºa\95Ã…U\93Ê]\93»[\83µP\85¼V\86º\\8eÃ…[\95Â[\96Â`\98Ê^¡Ël¤Àj\9bÃi£Æo¥Äe¤ÉZ§Ãe\9eÖn\97Ã¥g\97ëg\98Þm\93àg\93Ã’j\85×d\89Þ]\8aà[\84Ø^wÃaxÉbkÉZ|ÇXsÃ_oÃg\83Ã…hnÇboÊbsÕjmÛqjÚexÙ]wÉZlÓYsÖXoÊTgËTnÕYlÈF{ÕGtÃItÈCk¾>n³Gm°Kk°@u¯BkÂBk¼Ei´Nm¨Hl¡5y\9d2u®<u²:}´6\83Â¥7\84Â¥8\8dª<\88ªA\81¡?\85¬<y¡Hv§Bx°Kv¬Q\8e®H\8f»M\85«K{±9\82§C\91·7~«=\8c­J\86«I~®Iz¶Ou®E}³Kk­Ss­Vp¨Of¬Ju Jp§Ql Mi¬Rh¸`pªOv­\w´Rq±Q'-)\1a('\18+6\1f79#04-887>369;-C>/<@./?=3B@78DB7J:/P17N=3C76GF<BO8EP7KN3RG-WM7fV>fS4rU3lP8nG9bH8^M4c@AfD@eF3_X:e[4nf4l_;f\@o`4|c9~\9xdDpjIrqJkg:nrDzqG\82jO\8bhH\89aG\88c?\88p9\92p@\96o:\99{?\9ezA\9ck9¯i;±jE·nE²k7«i;´pK¸yR²tI®y>¯{Aª\83F¶\88@±\8cE§\93M«\97I¨\8fK¢\8a<§\83<\9d\89F\96\90@\96\92;\99\8d3¤\8d: \927 \915\95\8e=\8b\96<\92\99C\9f K\9e\9d^¨\9dQ¢ J®\96A¯\8fF¯\99I½¦N¼¦Pº©Sµ¥T¶¤L°§M³«Mµ­F±ªJº\9fF»\9bSº£N´\9eO¶©[¿£b·¢U¹²R¸´V±®K´¸T·µ\¨®]¦®a°ªV²«R©¦W¯±V»°Q·³X¾¶\¶ªW»¯O²§E°\9eH®£B·ªO¸²L½»LνKùEίJƱIĹUǵJ¸¬O·¥X³£W¯±T°®Q´£Sµ¤d©¹Y¬¼L¤¶F¡ºM\9aµW£¼V\9f¾Q »W§¾^¢Â]\97¾]\98½a\95½b\97ÃZ\8f¼R\8a»S\92»V\88Ã]\8a¿]\92À] Âe ¿l¦Ài\9dÃ…q\9bÃ…r\98Êg\9e¼a¡¼a\9eËl\9cØm\9cÃœg âm\9cÚp\99Ùr\96Öv\89Ún\92Ûh\8aáY\84ÃŽZ\82ËXtÑbwÇa{ÊetÉ`zÃŽg\82Éo~ÔnnÑfkÃŒcwÔi{Þin×ikÑlxË^xØ_o×QhÃœPrÑToÖLvÃNuÈCjÃ…@pÊHm½Lp²Eq¬=l®Fl¶Dk­=l±Ex£?r 5vª:w¢0{¬2\83©8\84«1\82\9d3\7f\9c;\81©?|Â¥Ez\9fLsÂ¥J{©H}ª?r´Ex¿J\8c¼M~¸Mx¨B\85³:\89¹=\8d°=\82®:\80ª>|µJqªRn­Sv¨Xq¯Mq¬J`¢Jc¢Tj®Rh¦Vf¤Yq ak­[q¯SoªNs¯Hi¬S\1c"*#"3'.-\1c,<!72,6=*/?4=.>;7287?4HB=<KB9N6BR65V><O?6D;ACE?NRDNVACT4JI=OQ2f[<dZ=rY2rU8lS@eD0pJ>eN?mM2fE2sY<g]2eb=r`?ma;q[6{a7|YEuaC~dFydKgn>osOvvA\82kH\88rF\88p;\85_B\98_8\92d<\9ci=\9bpC qD\93s?©lF¬nF«v?³h6©r9±j@¯uL¼tP´uQ¼pE°t>¿\84H´\87L«\8eVª\90N«\8bDª\826°\8c; \897\95\91@\94\854\94\95/\9b\966\8f\93@\9b\8b<\9c\8a@\90\8aC¢\9dF\97¢M \97Z¬\9dS££H¦\97N¶\97E¯\9bRµ§CˤE²¢V¶¢E³¥E±±U¾³Kº¥L®´G¾\9fF³ W·«O°\9eJ¿¡W¹£d´¨e³¯X½¶Qª¬X¸¨Qµ·X²ªZ²¶V±­Q®µN®¸M©±Q³¯N¶¹N¦L³´T¸¨M­¤C¹°@µ§G¶£Q³²M¸°UÊ¿JË°YδZǬW¾»_ŸM»³M½«T²¤P´­O¨­J«³[³¡f´µ\§°V\9dÀI\98ºG\9eÃT\97ÆN\97½[\9dÄ[\95ÊU Ë]¢ÃZ\98Èb\92Ç`¢Ì\\8fÂQ\8d¿`\8bµP\99¶b\96Â^\8f¾b\9b¹d\97¹`\9d½h¢¾q\9dËl\95Âf\9dÆZ¥Ég¦Ìj¨Õc\9d×n§Úi¡áf\94ßm\92Ã’n\87ãs\8aÞ_\8dãZ\87ÑQ\83ÃL\82Ô^\8eÈf\86Ãg\84Ã_\81Ã`\8bÂmyÉjvÔhyÓo~×`qÃœnpØjxÛcxÃW}Ô`pÑ]sÙWvÃŽRsËLyÈSs¼Hb¹DcÃJdº@i±>w°6y·8k²8uªIr®Am D~¡5\7f¬0~²-|­2\85±=}°2{ª3~©B~­Hw\99@~\9fNy§Mv¡P|ªK{®Qx¿R\7f¶R\85®Ds®?}¸?\81Ã<x³Is²Fq®L\7f¾Ot¬Tw´Ls¯Hs¦Oa¢FX©Pfª][­W]µTh¯dd¨fh°^`²PgªXc£Oe³Q!-6#-4\1e,6#'7++9,852:1560>8>=D<C=8M>BW89Q3?H>DO;AHB<RJHQTHKTCOPCKP:OU>XV2ba0i\7i_<mX;tY4rK4kO1jK9fM0oQ8rZDr]>o`:m^5q`2qe;tZEwZD\80ZO~dMrrNrnOwtNvpH}kF\87nG\93iE\92f>\99dD\9de=\98i?\99sE\97r@\98kI«u=¬v@¨wG©v?¹kF·l?¹lC¼kG¹rEºlOµzR¾~J¿|J¯\82Q³\82K¦\82;®\8b<ª\866¨\857\9f\867\92\86>\8e\8e4\94\8b4\8f\87E\93\82J\98\8dL\9b\8eN¡\96P\9c¢K\9e\9fVÂ¥\99L°\9dPº\9dU³\97M±\9fF³¤D¹\9aD¹ M¿¡G»¤KƯDñLõQ´­K¸®P¼­J²TȤLµ°L¼¨]¯Y¹°c¾©d³°Y±³U°±W¶­U¬²W£²L©®R§¯O¦X¬¬L§²P¨K´»P¶ºI²ªF©¬Q¯«O³§N¹¤SÀ®UÀ²Y¼­Wƶ]¿²eÀ²`º°SúSÅ·Z·±R±®Q°´O­©M²­Z¹°^®¬[\9d°N\9b¾K\93¾I\93ÃP\9eÊX\98ÈR\96ÃS\94ÃU\97¼X\96ÂY\91Ã…V\9cÆR\93ÂV\93À]\9a¿V\99¹U\91¾a\96·^\99¶\\97Â]\95Àb¢Æg\9aÉf\97½X\9eÊ` È\¥ÃZ¤Ê]§Ã[¥ài¢Ö`\9cÖc\94àm\91àf\99à`\99Ö[\94ØM\92ÕO\8eËX\96Èc\8bÇg\86Ãi\86Ãm\88Êa\81Éa{Ãk\83Ñg}ÃœfuÛhvÃœauàg\7fØ]vÖ^tÃXiÊOlÉRf½PqÀJd¼Of²Cj©Bj±En¸As¼=tÀ?w´9w§@q¤@\7f§F{¦<\84²B\81°8w¨4zª6w£@r­Dx£Iy¡Cz\9cBx\9aKj\98Mm¢Lx¬O}¹SwÀNz¼L\82¹SyºJ\80µNy·@sµMq­Nq¬Qp¸HnµBy°Mn©Io§Gm°I_²W]²YY­^^®c]²g[«b^£^[®^W«\f²cd¬Z+47(%<**9,.7.(8#7;)28+)749>C<<C;EN89T4EJ;=G>FC>6P=HKI;TL6KQ?MW=CM;KO8_W1XL7lT=j\?iQ>jO6rJ6mD;eB?rN7eQ9q[=s_Erd=oh-nV<{f<mb>ycI\80\Fxf>zgE{lFudG\81jE{iC\83iI\87qH\8cr<\8fu;\9fnH\94sC\9euC\98rH\96rH\9bkJ£~>®m6\9fmBÂ¥b7¸lH½o>¶jMÂtB½qI¾tE´xK¹vSµ\82N©\8cN¤\8eG©\82D­{8¦\80C\9d\8eC\9d\918\91\961\8d\8b8\9f\81I\9b\85@¡\8aU\9b\91Q£\9cQ©\95U\97 \¨£]§\9cL§\99S­\9cU¼\95K¼\9bE±¥N¸\9bR´£L²¤N¹¡NɧE»«B¿µO¶²D¿£M®«Y´¤N² ^¸ `¾°U¹®]¯µa¶¤\¯²TȤT©´R£´\­¹]±Q®®_¯½[¬Ã[­ÀI®»Jº¿Y·ºX¼µT³«W²ºL­µK´°Wµ¶Q¸®Q¾³S¿³W½½[½¬fîVµ½`´´Sµ®Xº±W«´]µ¼T¥»R³°X¯¶b¬°X£ÀG¡³T\8dºL\93Ã…V\95ËK\98Æ[\9bÉS\91ÉV£¾[\9eÂ^\97ÇS\9e¼c\91È_\9dÃX\8fµX\98¾]\93±c\94¾Z¢Î_\9bÆm\98Ëd¢¾i\9cÇb\9eÃ’f\9fÈU¥Ì_ ÌU Üc§á`¦×j¤ác\9cÙ^\97Ãc\98ÃX\8cÕM\98ÕZ\8fØW\8eÕ[\8fÓY\8dÓ]{Ã’e\81Ãg\8bÃ_\7fÃŽr~ÓpuÉfpÃczÙj\80Ù\tÃ’T\7fÃ’^qÃ\sÖXeÔWuËSl¾Ls¹Op¾Ad¶5p³;g¦Au¹9s´@\80·Bx³<|³>}©>\7f©4\86«6}´>\81§3v®,z\9d0vª=r¶@r­@w¯Ar£Hu\99Fp Eo¨Ds¸Lv¸X\7f¶Rq¶Rr´Kv¸P|ºBs¾Gr¶Br³Mh¾Db¸Gu¹Ql¯Hi¬EmÂ¥Ob²Ka¨a^¨SY´XU¨\ZµhT°cV¡aeª]Vªfa¯ak¡T%/7\1f,9)'2$&<(-3('0(28.-05/??-A@'AO13G6?H?@M69E98D:4SB<GM=JX2AY?IP:MI/YO,fN.fN5mU7bX;jXBdF8bA=gG?bL0eT/gT>kcEzhDza6~b)sU-{ZAvfCv\A\83X?~WA\81^G\84kI}hB\86j9\85h?\86o5\84x<\8fxG\93oK\93qB\9bmB£v;\99nBÂ¥vI¤w>\9foB¢c8³[<´`F¬pD´tJ°lNºkJ¶n@¯{@²yC²|V©\85V£\8cK±\86D­x@°\88@¢\8b?¡\91C\90\95<\98\89F \87D\9f\8f@ \8fL§\88P¦\92Q¦\95N  ZÂ¥\9c^©¡Y¥¢U®\9cN¶\98X½\99V·\9fN³\9bRȴHº¦JÀ¦D˻N¹µR¼°D¿\9eO³\9bQ¬\9e\°ª\µ¤Q¹¢V¾¥b¸¯_¾«V²¥X®­Pµ¬Vµµ\£»T­º`¶³\¹ÃR­ÅT°»T®¼Q®¹S±¶W¼±_º²X¶¶X´·X¶µY¼¼N··O¹ºW³»`·º\½¯`»²f±¬f³°^³¸[¸±b¹½[³¹Yª°T¤·R¦³S¨±[¬´W¥¸O\9d»M\94·J\95µS\9f¾O\96¿W\98Äa\93ÃU\9fÇW\9aÇS\98½\\92¾b\97Éb\94À^\95¿[\8f¼h\99¶h¡Åa\9fËi\9fÃ_\97¾c\9aÃŽa\97Ãi ÉY¡ÓYªÓ[¨Ã[ªãeªçb­ÜW¤Ü]¡Ú_\9fÖj\97ÃŒU\8bÃO\86ÖV\8dßN\83àR\83×\yÓezÊh~Õe\84Ãm|ÃŽq~ÈmqÃŽnoÃjsÇZyÃ’[x×WsÖPqÔVhÖKjÃUnÈRx¹Cu¹Dl¾Fs¹8w²<n£<x°I}²G{·Ju­=p©7{§>\84¬B\87¸8}³/v¯5u¦/\85\9f/\85¢4\7f±<o¯;l°Gx´J{§Ns£EpÂ¥Jp²Nv½N|ºYsµZr¾\x¸Qw½Eq¾CnÇHgÂHc¿Sd¿Ld¶Lg­Om®Pc¯Hc´WW­[V´SY±RT´^Y®cW­d_«XY¤adÂ¥el£\c§Z-+4,1(*&8'.7.1)51+1+42,.9-69)><19K08G?=C8=M>8G??FC4XL=JR4N]6FX1SK<MP*]P5eM7cL._O;bN7[S2ZL-^G;aK6cZ;cQ2l\@wd=wZ:\81b3}Y'}](|\7y\;vU7z^F~`>\7faEzfE~kG\8al?\8cjC\8btC\8e\7fF\89hB\91pO\9bcJ\90kP\91`N\9ehH¦t;«jB§fD\9bk9¬iD¨dH­iL£hJ®xA±vE²uK¡yE¯xI¨\7fN\9f\90E£\91F¯\8aIÂ¥\80I¤}F§\83>\99\99K\8e\95K\9e\8dI¨\89D¡\87GÂ¥\83MÂ¥\86F¯\94T¨\97Q¢\96Z¦\9cXª\9e]¹¥L·\9cG³\95Oº¡Z±\9aK¹¤R½¤JÃÂ¥NÄ\9eT·«O´¯P¹§V¿\9dP®\92L¯\99U³\9dP³¤U´¦W¹¡O«®T¶§U²¢Y·¥T³ªb¥±R\9e³P³³Y®°R¼ÂY²¿V¶¾Zµ¸Uº°`«¹c¯¹`±°]±¬V¼¶[¸À^´Ã`¯ÅT»Â\ȮQ·ÇR¹Å\À·cµºf´¹e±±e¸®i­º^°¸R³²W®»Uª·[\9f¬W\9d±R¡±M¢½R\8eºJ\9e´U\9e¿^\9c¾Q\96¹S\9dÈ\\96ÂM¢ÌQ¢ÀW\9dÃŽ^\9fÃŽ\\9cÃŽb Å] ¼hªµl\9eÈp¨Ì^¤Êl\96¾j¢Çh¡ÓaªÃ_\9fÖ^«Ãi­Ãa£ã\¨âl§Þ\£ç\¥Ód§Ãm\9cÃ’\\86ÕN\87×J\89ÚU|ÓX\84ØX\80Öa\86Èg\81Ç]\86Ãe|Ã…_\86ÆkqËbeÓggÉfzÓWwÉQsÃœVmÃHeÙDeÃPeÆLq½Nq·JpÂ?k¶:w«;zª=u£7x´Cz«KoÂ¥@}¡B}®6\89©/\88·6|¬:\84©2{¨0\85\9c+\8a©3z¦B{¬FuªAo¦@|¤Fx­Ho¤Ez¶Er´Su¾V{¸Uv¶Ul»Yq¶OgµJnÃ…Rp¿Kb¾TeÊKb¸U`¸I`¸He·N`«WW·UZ°Zd¾]W°aYµad¸WVª_`ªaf\9fha c^£a+\e,(%(,/'150*/21+*/,45)5:)::.::6>F/6C<6H:6P@;HD9FB4RI6TE<IR6MX:MS9NX:ZU-^P/bI,eO1aI/_D0^C1ZC6aO7]TCj^?if3wc8|\4wV-y["zV#u`2~]2\80a2{]A\80dA{cI\81eF\82lF\7fmB\84yB\81uJ\8axI\90mV\8eeT\96\T\8dcT\8biU\93`L£hD¨j>¨i9¡e?\9ckCÂ¥cF¡jF¢jB±yA±y<«x? wE£\85M¤\88G«\86B§\8cM­\8bN§~I¦\8dP \8bF£\8eB\97\96I\9c\96N¦\8aB\9f\90H§\88B«\8dO¶\89T»\8dN³\9dV¿\9aQº\9fY´©V²¤Qª¨U±\9dQ«¡R³¢O¹¤T¿\98SÂ\9cS»¡O¼\9eN¶§V³\9bW¹\99L¸\9cJ¾\9bR¾¢\°¬X³²]¥ªS§£U­ a´¤`¬¬a®­X¨µN¥¸U«¼T±¹X¾Ç_µËZ¼À_¶²g«°_­´W©ªYª¶\´µU¹¾]²Ãb±¾[±Ã[¹ÉS´ÆX»½d¸Äa°Ëa·Âj¼¾d¸­`¶ª]µ\³®Xª²[£¹_\9b³R\9b¼V\9dºT\90¶W\93¿X\9c²Y\9d¶_¥¶\¤¶T\9bÆU\9cËR\9eÉP£È_ ÃX¤ÇZ\9dË^\9dÃc§ÄgªÅj©Ãj¬Êd«Åc\9aÉi¥ÕgªØd­Úk¨Öc«×g¤ào°ân«ág‡f£äZ\9dàd£Ô_ äV\8câZ\80ä\\82ÃœN\8aÞZ\81ØU\82×\\81ÊW{ÆVvÇb|ÃŒc}Äc|ÃŒdjÃcnÄYlÃ`wÊOqÑOmÕEoËJrÃ…MkÇFfºBh¾DpÂ4m¸4t¸>z©7|Â¥<\7f°@u«:t¦E~©A\86­5\88²8\88¸3\89¯.\83«+\8b¯2\81£3y\9d5\81¨@\7f°8t®9z°6o¨BjµNk°Mm·Mt¼RzÇTxÀ^xÃ]pÀ^d¿Rd½OmÄLrÇTuÃ…RmÆOj¸Pa¸O[¹Q^±M]¸Wh°Yl»__»[c¿_^´Zb·YW¶bZ®gW§]X©RR§W(\18)((+50+31444*,-\1f.(,3+)?/.>)1D24D47;.+E@+@@:BH*I>:PB8EU,IT2NL+P\<WT*QV0QO.`U4WF5ZL+^G5[W(bY6[V2\M8kO1x`.vd,n`1|_1r[!uX)\86['ye6\81bB}\>\80XE\87eF\8bmE|s=\8aqA\7fyC\88kF\86v;\88mM\8feN\84aI\91aX\8b`F\97mC\9d^I¨a8¡k9\9bp<\9dh>¢cG§kC\9dqG¬p<³wC±v>¤\86;°\87;²\82?©\8cC°\84I­\81L \83Q¤\90O\98\8aP\91\89B\92\92P\95\8eH§\91V\9e\82C©\83?ª\8eQ±\95Wµ\94S´\8fO¾\93U±\9d]¶¤Z¸\99P²\97Xµ\92X¹\96^ª¢Tµ\98X¶\92S¼\95UÃ\99Pº\9fL¬\97V¶ O®¢N¶¤LÀ\9eT¯®Y¬¦^³¡]©\9aV¨\9dX´b«­W¯©Q£µQª³G¨ÃV€O¬ÀYÂÆa¸Ãd»V¹µY©ªT±±X®®e¯¹Uª¶V­ÈU¸ÃXªËVµÇ^¸ÇQ·Ã\½ÌXÃÃ…c«»j©¸n¦¿h¦i¯»^ ¹U¦¬X£ÀU¦¸T\9e¸Z\98³V\97®S\9f¸Y\98½W\93°b\9d´]\99¼W\99ÇT¤ÃR\9dËZ¤ËY\99Óf£ÑeªÊj£Ç`\9aÓk¡Ìn³Ës±Ëb¯Äf¥¾` Îu\9fÊf¯f¤Ãa¢Ãf®Ö`¢Öd¨Ù^¶æg­×W\9açT\95ØO¡Ã_\8dßY\85äQ\83ÖY\83àN\84ßV\85ÓN\82ÔR\84ÈW\81Ô_\80Èa\82ÃŽ_yËi{ÃŒ^uÊZjÃbrºarËOl¿FlÊDnÃ…KlÄ?p¾Eg¹Kkµ<j·A|´4z°8\81³4y©6v¨>\81´=yªJ}«4\84²:\80¬-\81¼8\8cµ*~§&} ,\86©<\87Â¥?\86­7u­Bo¤=vÂ¥Am±DnµSr»Wv´XtµOhÃ^xÃir¾fmÇTm¿\qÃŽSjÃŽNgËMdÃVaÄXXÀKT½VcÃLU³Tb¸Zf¬Qb¶V_µ`W½\S°Y]ºXX°ZW©bS±`R§WK\9fS.";2\1c4(\e8-'-.5-71%30*4.&A0#>'/=13?,&C0+<8/:=3;?*@=6?I9LP/HQ.F[2QZ0Jb/J\4IN8XQ+YW&JQ*[[%`[0dR/`T2ZK7cN/iV1xU*sV%sZ+vR,~O#\7fW1\80^:\83c8\82cB\84iF\8b^C\89kF\82kE\82pN\82iM\87gF\8eb<\95_?\90hE\86]M\88`O\91^I\8emJ\91c?\9ee:\97c6\97m;\9ckD©gF±rB©l?¯v4©t:®z7«\845©}:®\809´}:¨~@¬\86D¤\8bM\9c\8eL\9b\8dI\92\90C\94\93K\93\98K \8cX­\8aM¨\8cC±\95@­\91H¹\89Aµ\8dI´\89T·\92X¾\98X¸\9fL®\95^±\90_°£V°¨]¯©]¯\99T²\93WÄ\9cQ¼\96J³\95N¹\9eT²\9cM³¨H±¦Rµ©P¶¬Z¹ªN°\9aS«¥W­¨cª¬R²©P©¶M£½NǦM«»Y²Å\¾ÀU¼¿U¹¹Z«¹U®°L¯±T·¼_­À^€P¦Î\ƒX®ÊY´ÌY¸ÒS´ÃS¿ÃQ¹Ä]ª¶V§²`ª¹a¡¼g\9d²Z¡«^¨®Z¬¼T¢³T\96¬Y\92­Y\91ªa\8c¬a\97½`\9c°V\96°W\91¿M\93ÇR\9eÃU\9cÃb¤Ò^\9aÃŽa­Ãn±Ói¨Ãs¢Ìm¯Ìk¯Îo¯Èf¤»`\9fÀg Åp Ãn\9eÉ\¢Ãg¨Õb¤Éb¬Ë]ªÚ\²ß]¡ØV\9cØS\98×M\94ÃŒS\87ÔO\89×S\80×H\87äM\7f×T{ÚI{ÛF\81Ã’NyË\\81ÕYyÊX~Ã]pÕVpÃ`mÇXsÂ`xÇYm¾KnÃ…DmÃ…Mr·Pr·Bhº@l°=sº=zµ6x¿6\81¹4w¸4~§5t²>{¼B\81±<\83¬2\82²3\81À7~µ;\82­.\7f£/z¨8\7f\9f/\85¦7\82§;vªAw¯Gq®En²Pt¶Vm­Yh´[fºfjÀbm¼YmÂVoÂToÃafË`lÄTgÊY`ËWb½XR½Z]Ã…\[¼Vb»SY¶PP³TR´U\³aU®^P¨]X³TQ²RH¶`MªXL¦_4\1c(0!2= )3(&/'\1e9/\1f01 ?%(C5.831@;/44#72\eAC$ED\1fDJ/>D09O*IJ6CL.FL,BX+BT3@\;NV1WQ3TW.HS-RQ&[W\1eaY'dS*jV&kS+hU'z\*tW-}c"|b\1f~P!\85]2\85W1~_5\8d`9~Y<\88f>\85nK~oA\87nC\87hB~a@\8c^A~`C\8efG\8a_Q\86\Q\8fnJ\93iC\96n@ k5\9er9\9em; jE©tE©l? f<£t=°w3¯x:­\8a=²{?¨\7f9¨\7f:Â¥\86;¡\83J\98\97M\94\88H\9d\89@\9c\95K\91\92X\96\93U \8dY \8fI£\87U¨\89Qµ\91D­\88I¸\8bS½\8bT«\93T·\94O¾\9eWµ\94Vº\8af·\97d²ªb·¤T¹\99^Ä `Ã…\99]·\9aV»\99W®\94O¸\93W·\9bY°¢c´\9c\²¢_¨§]«¡cǬW°ª_¥ [««^ª¹P¥ºT´²[¸²P·Ã_¼ºNÂÃR˵Y·¿O¸¾H¾¾Z°º\¹¿_³¿P¯Ãa®Ì\®Ã_¯ÄR®ËR¬×T®ÄT«ËX¨ÀY\99¸]¤´e\9bºj¡·`£µi¦¿e¦µY\9a¸\ §]\9c´T\8c±d\9fºe\9f²c\98°V\9b·`\97·^\97¹N¤Ë\§Ée£Ëa§Ô^¦Øc·Ùj¨Éb¤Ën®Ãm¯Éu€cª³k¦½b¡»d¢Ãm§Ña Ê[§Ò[¡ÎX°×YµÙ_¤ÙT¢ÛW\99Ô\\9fÃR\89Ã`\85àY\92ÕQ\87ØM\8dÃœR}âW\84Ãœ[}âJ\84ÞR\83ØT\84ÙXwÙ`\81Ã’UpÖWuØTtËN{ÂO~»Vt»HoÇGwËLvÄ@q³Di·;p¸8jº4t¯<\80±7u´@\86´=w´8\80µ2\7fÃC\83³:\88·:}À7}¿4\82¿1\80²6}¸-y±2\83°<|¢9\84Â¥:~¶I\7f²EpºAo´Js¼\m¹Pu´VrÃ]sÃatÃŒ`rÇ[sÇYnÃ’bbÑi`ÃŒ\[Ã\WËe\ÂVL¾^OÃOZ¾\L¿YT¹NU¹UL·T\µ^U§^N¹RR¬LT¯RN¿ZQ®[Qª\;%)<\1c,5 %7\1d\1f<$\188\1e\1a?.!<-&E;\1fA9(C@\e8>\1c9B#=A\1a5@\1e>C)E?)AI+IW2BU7=V=CJ3FK0GT0L^)J`/La&H`%NU\1eUQ\1cWV\1c_V\1djK nL\1fpY\1ajV%qS y_%~V){]"t`-yU9\86S9\86Z<\7f`;\82]C\89iG\8anB\87qC\83lA\88hB\7f^@\87`F~jF\8djA\8beK\8bgF\8aeK\96]E\97b9\9eiF¢rF\9ez;¡s@£tB£mA«z4¨x8§v8¦\853ª\89@©\80@¬\88@©\85B£\939\9c\96@\99\8aH\92\8eH\9a\91T\9d\97Y\9e\95\¤\9aTÂ¥\93P¯\8cU¸\8bS¸\8bN¼\8aO¶\8cN¹\8dQ¯\92U¯\8d`³\8bZ¶\86e½\8f`µ\96`º\9aa¾\96fÇ\99aÈ\9diÀ£c¶¥a·\9eZ¾\95SÀ\98[º\99e¯¢d°\99k­\9ab°\96d­\9ed´\9fcǬZ©¨_¨«[®­M§¸O¬¯[¸µX¹¾OºÀS¸ºT·ÃPµ¹S¾½N³ÅQ¸¿_¯ÃZ±Å^«Ñd®Ã`¶Ç_¸É\±ÃP°ÑP®ÊL§ËS§ÉX\9aÇY\9b¼Z\99·[\9eÄe\9aÀe\96¼Z\9f·[\95²X\98­U\9b¯b\98¬]¤º] ¸_\97²`\96·\\9f¸b\9cºX\9c¼d¢ÃaÂ¥ÃhªÃg©Êf¬Îf¨Éd§Æcƒm£Çk\9cÂu\9e¹q\9fÄg¤¿i\9bÉk\9fÃc¨Ãg§ÃYªØS¬ÒN£ÃM¦ËU£Âa\9fÈ[\9dÕ_\8bÙ\\92ÛY\8aàZ\8eÃT\87ØS\8eÃ¥`\8bâ[\85Ãœ\}ÃœWzàU{ßV\80Ã’W{ÃW\80ÔWuÃN}ÊU|ÀMz¿Nz¼A\7fºJsÇGqÄBwµ<z½8l³<r²Aj¸Ap´;zµ:|®5|¶0\7f»1\84¾5\8a»:\8dÀ6\92Ã5\85º0x´+x¾,\80»<}·=\83ª=\83­>\81¯J{±E{»E\80½K{ºOuºWoÃXr¶RlÃTkÇ^sÃdoÓjmÑghÃŒf`Ã’f\Ñg_Æ^RÃ…aSÉ\TÀRP»WH¶SE°RE»SMÃSUºU\°SX°UZ°[K²UG¼NQ¼VW¶ZRµ`5 $9\19'=\172:%0: !/,\1c12.A)465'2;\1e15&CB'4F\1c;A\1cH@%ID.JP%BE/AV19O@>Z;BQ8JN.FK)AV2D[+N]6A`.GZ.MJ\19bZ\1eiW+kV*qN#iY'de%g_%vf+nU(rd0uY+y`1~ZE\88\D~YA\84g?\8b^:~aE|f@\86iL}mI\7f^<~fF\80aA\8c[K\8cgK\8c`?\95dJ\8af<\98_>\93jI\9fpD\9fk? l>§l<¦\80D£|6®q? w3ª{?¤{G²\84E²|I¡zP\9a\8eH\9d\89H\96\8fN\9b\8dT\9a\99P¢\8feÂ¥\91\¡\9dY\9e\8cY²\91O³\93Z¹\8dV¶\87Mµ\8fJÀ\94F¸\8fM»\92]²\96b¾\91Y¹¡^°\99f³\95fº\9c_Ã…\97c¤aÄ\9a\9bi² d¸¢]¶\93_¶\9fQ· S±¢b°\99`¯\9d_²¨d§®W¦¢a ®]§ªS©´[ ·[¸ÃN°°V¸ÂS¶Ã`º½QÀ´XÃÀN¶¶O³¶Yµ¸S¯ÈYªÃV°ËWºËk³ÃY„X³ÎW¤ÌQ¬ÓG\9cÂK¡Ã\\9eÀZ\96µc\98¼Z\91³b\97Ã]\9fÃ…W\98Ã^\99º]\9f»L\93§X\9a±R\98¸X\96²^\98¼\\8e³]\91µa\91´a\97½`\9dÃŒk\9bÆ\«ÀY¡Èk§Çi¡Ë`±¿d¦Çj¨ºm\9f¾f©¾m¤ºk¢Åf§¸Z©¼`¥¾T§¿V¨ÃY¨ÌP§ÃR¦ÄS\9bÃ\\9aÉZ\9eÖT\91×U\92ÕT\8fÙU\85ÛZ\92ÃY\8fÖY\8açN\83Ö\\83ÕZ|ÕXvÃœ[t×M\81Ã^~ÃN~ÈLzÃMv½PpºOxÂG{ÂLpÃ@p½E{¹@vª3uªBf¹Gj»Jo±=\86¹F\82¹;\86´7\8cµ2\8cÀ:\7f¿5~Ã8\84´3wÃ7\7f².\7f¹.v³2\87²J\86´L\8d³Mz¨J\80©?x­Fz²P\85´Z{ºP}¼Xu´OhºYj»lb»aeÊkfÃgsÃ’[iÃ_`Ã’kSÂjWÃŒcM¸`Q¹RF½]N²]O±`H¸bXº`Uµ]_³SY°PQ©TM©KR²ZE¶aV®cN°_;'2<"*1\1d35%1</053,90)4371-%20!<=%<? CF#@B(:B/BC:DF)MM%LU8?U9KM+LU.DO5MJ/QS6G]7GQ.JR3UY0UQ%X\$hV*qT n^&rg&kb$u^0n^,lf,x^1z`0\81Z8\80e;z^Jue?\80_7|k;\83eB\80c>|hEwjK}i@\88`?\87]>\91_?\8dZE\94]<\99b>\92n@\8emL\9arA¡t?«jEÂ¥pA§z@¤\81;¡{<¤{C\9a\838\9d\81>­\7fG°yM¯tR£|O¤\84K\9d\88Q\99\8cP¡\96U\9b\91W \93b§\89e\9e\8f_\9d\86\«\8bX²\93O­\8fR¾\91\8bDº\8aM¸\9a\99\¹\91a³\95[´¡c¼\9cg²\96\µ\97X½\9e`¹¦e»\9ed·\92j¼\97b´\97`¼\9aW¿\98N±\97M¸\96S¶ `©\9cU¦¤X¤ ^¥¬e\9f·Y£µX®¼_¨¹X®¶aµ¼\¿¿_¸Ãaµ¼W»²[¹²^²½W«¹S¥¼UªÈ`´Ç[³Ëa´Éf±Ã[±ÈN«ÃK¤ÅI¡ÄO\98ÊM\9aÀQ¡½Z\98³`\92¶a\96Ãd\91ÀY\96»U\94¾Y\95½V\9f¸T\93³T\8e©O\8d©W\8b¸R\92¹P\91¬W\97´W\97³c\8fºp\98Äk¢¿^ªº[­Ç\¢ÎdªÂ\Ǽb¨¹f¨·m¬Ãt©Ãpªºd®Ã]ª¶\¤³\¯´Oª¸R£½U\9e¼M§¼O¢ÅP\9bÊK£ÑN\9aÈT\8cÃV\84ÚX\85ÚU\88ÑK\8cÑO\84ÛV~ÚQ\82ÃK\85ÃK\86×UvÃN\7fÉX{Ã’[vÃ\{ÀQuÃ…Hs¼Il¿NoÃŒBlÆLrÀGs²8}°7x®4r«?z¨9s±Du¬=\83¬@\87¯@\85¾@\8d¾D\88·6xÀ1uÃ<m¶>t¹9t½.{»4\80±;\86¯H\88·N\86¶U\7f²P\84¤I\8b¦T\81ªT\85µY{²Uv¶Q{°Xw¹ec¶hd²ijºmp»]mÊ]\ÈbWÃ…jUËeNÉaR·bJ¶SBµWE®dL³_Lª_U¬]b±WY²QY­UN«SR¬MH«UD²_HµYN­V8(/F)12'.:#103-11&229:8?.851'$?-&9B*@9"@="GG4G=?H>+OA-B@'DE9PM4PV/GM.TM3II5NU3IS/PH3RG(_O(fP(qR'eO5hW'uT/ph1jb)pb(kY'ya-{e2yZ@\80d;{lE\86j:\84g8\86n=\7f`I\87fH\88u8\7fh<\7fsC\8al=\89lM\87fC\86eR\8ekN\8eo?\98iE\92tE\95lF\9arA\9dj@¡nD vF¦sF§\81<\96yF£{K \85D­}R®~O¢x[Â¥\83O\9e\89X\9c\8bW \8fX\9d\91O¤\9c`£\9cY«\8eXª\96Z°\84]§\94O­\8d\¯\8cS±\88M·\85<Ã\96HÇ\97UÃ\97Y¸\96V´\9e_±¤b«¤f²\9ej­¥^«¡`²\98h±\95a± `±\98a°\9eYµ\92M»\97I²\9cI«\91\²\94^®\9fW­¢P§ªb\9a§g\9c±W¢µY¢º^°»SµÀa·Àb¼º]±Å]·¿h¦¯[¯­`«¼d«»`¢ºS¯¿_³Ãg²Åe¸Éd©Åa³¾N¦¿TªÃG\99ÂI\9a¼P\9c¸N\95Ã…M\9f¶Z\9a¾S\9aÇW\98ÃY\99Ã…U\91¾`\9aºQ\8e³R\97´K\8dµM\91¯X\8a¼N\8f¶S\8d¬N\88¬P\8d»b\8f¹]\95ºi\97Àa£Ä^\9eÈZÂ¥Ã^¤Ëa°¼`¨Ãe¬¿r£¼v«´n«¸`­·f¤±^®¶Y¤¶P¬­P¥²M\9f·R ¶O\96»H¨ÈO\9cÔU¥ÄO\9eÔ\\8eÃX\8aÙY\81ÛS\85ÙY\84ÛZ\7fÛZ\7fÙJ\89ÃŽCyÄLrÃP\82ÃŒZsÑ_\85É`\86ÃOuÊWx½SvÉD}Ã:t¿GzÃGy¸7\7f´7\80³:o¨AzÂ¥Cn²Gv¨;\81°G\82ª=\83®K\81µ8{¶CxÀ>pÀBpÀ9{º>}¹:t¾9\7f·E\81¾G\8d¶N\8d´[\84±S{Â¥Y~¯_{±W\84¬Zw½Qy¸V{·Yf±hg³pd¯ajº_g½\cÃfWÇdY¼_LÉ\VÇ\F¾^GÂVC¼`D­dN±_R¡^\¦Zb±P`°X^¸]P§JM¯JU²ZN¬aS±ZS«bB%6>+7@+>:)5..92-+6-,576/103,%77%B5%<< G7'LD,R?7WF.O>,N@0JD(SH)UH.QF2LQ5RG+VM0RN2RM5YJ1\M+dR-jL0kM(hP1kS/sa,nf0t_&|^&s`5x_=ncGlj@xhE\85n;\83f?\83h@\89l@\82jC\84q9\81g:\80k?}mL\89pN\87pH\88bQ\86kM\8eoQ\91vN\99lK\9aiF jI¢mD¢lH§lD\9esJ\9ezN\97\85F\96\83MÂ¥\8aV¢~Y£\7fX\99}U\9f\84]\96\84c\9e\7fa§\94S¦\97V\9e P£\9cW°\95P®\8bWÂ¥\93\¨\8dU¸\82Q¶\85Q³\86S»\8fDÆ\94FÃ…\8dOÆ\90T¿\9cZÃ\9f]¶\9bh¯\9dp®£gª\9fc§£j¦ i«\94f¬\90`¬\9aS®\9cT¼\90O¶\8aN®\8fN±\92V±\99Q°\97O¥¥Q©©P ¢]\9c¨[©°bªºb©¸\¬¼V¶½^µ¶c±º]¨¾e\9eºc\9c»_\9f«b\9e¨\ª¶Yª»^ªÄb¶¿W´ÈZ¹¿S­ÂT¯¸J¦±P\9c«G\97µM\9b¼F\8fÀH\99ÃM\9bÈV\9cÃ…P\9aÀR\94¾U\9c¶a\9b¼Z\8d¹Q\89³T\8b¹O\87·T\8d¼Q\89¾R\8e°Q\8c¯V\8dºU\8a½b\96³l\9e¿m¢Â`¥¾c¦Äa°¾b«Ã_\9e¸n¡ºn¯¼h«­l²¹o³µaµµW¯¶U¯²O\9f¯W\9c·Y\9d½L\96»O\99½D\9dÈP¦ÇV\9cÉ_ ÉY\98Ç\\87ÑT\89ØQ}ØQ\88ÖY\85ÃW\87Ã’I|ÃL{ÇMxÃ…OrÑV|Ã^zÃY\81Ã]tÃŒ[rÇOxÄM|¾=\7fº9\83Â=\7f³:\82±2\83«.|¨;}ª;x²>\7f¶8x¯=tª:\80®Du¸Ez³D\7f¶EvÆ:lÃ;rÆ=xÆ?qÉD\80ÃR\82»Q\82¬O\84­]y©f{¨]|±]\81ªa~»X{ºRy¹Vl¬edµdi±lp¶^n¼_o¸af¼f]¿bV¸WZ¾PLÄWIÃ…XMÀYQ²]I­fF­XQ¦Y_­Oa³TW²SV¶SZ¬UN¦TW¦ON£YIªcH®_585A%2968D52?:26<0=;+A2895+>-8;.(A0)I@.I76R@,R@2R@+TB6ZI)YD#L>1OD&ZK7XV:\X:XW9WR7NU<WJ5cK7bE7xP<tS7lG9rO3ye/je9sW6t`*e]0olGzl>x_C\82gP\84mF\85b@\84eA\85gG\8apG\81s@~w9\82iD{i<ziC\81bI\8c]R\91jV\91`L\98sN¡oT\9apO\9bsO§tD¦jB¨xQ\9duBÂ¥|M\9f\83P§\89Uª\83UªzT¡uZ\9azQ¦~\\97\88T\93\7fZ\9e\86d\9f\9cS \97Y¤¡\¦\9dV·\9aY¦\8bV\9d\8aM«\8dT¸\82J¶\95O´\91K¿\97Q¼\94K¶\8fPÀ\9b]¶ d´\9ec³¦j³\97o«¥^­\9dk©\9a_ª¦]³\99Z³\95X»\95N²\85Z²\92R¸\8cPª\9fX¨£Zª\9fS£¢Z \9c`\9d\9bh\9a\9ag£ª[§¶g¥³_¨¯g³²[°ºWª¬f¡·b£»Y\99°Y¥¬f£±Y§±\¯¯S°¿^©Âb®ÊO¡¿_\9a±]\98´J¡¬V\99¬O\97³G\94¿K\8e½O\9dÉR\94Ê^\9cÃR\97Æ\\97Àe¡¹`\9a·^\96ÀJ\95·U\8c¹Q\93·Q\95º[\97¼Z\8d¯Z\8c°P\91®`\99²Z\9a±d\97À`\9d³f£½d\9cÃŒj­Èg§Ìj¯´n¤²t¤±k´­m·«b®¶]¸®Y´¹T§®O\9d²U¥²G¥ÅL\98´A\9d´E\94ÆL¢ËR£ÊY¡ÃW\8aËP}ÕW\84Ø[xÔQ\81ÇK\81½J\87ÆL~ÃOxÃŒH}¿X\7fÃ…Q~Ó]}Ë^\8cÆ^{¼Rz¼FwÂCz¿?~½G|»=\85ºA\83Â¥7\7f£Bs§;s­I\7f­>|¤D\88¤8\80Â¥@z±>|°L\89»>}ÀJn¿F{¼Bn¹HzÃIyË={¸P\8a¼_\7f©W\7f­_r\9eU{£Q|\9dby¤W\7f³Yy¼Sk§ai¯Zm¢dp©wj²sn±ak¶_g½`_±fT³aYµWG¾LGµULÃXJµ\H³eS¬gL£^bÂ¥XXµVVµZ^¸XV­VW [O«SH©\L¦TK¡W=399/.=0&G9)P>)HB,DB*=67816D9<S-8P13J;6PC8Y?.TE-O<-ZD/_C5W@*Z=4RG.YI<UP=`T9\P9]O<X[?eR=kL;mO2vH8|D=tM7tM7x[AiZ@iZ5c`7fh9ok8vhE\83hW\83_W\82fO\85mE}sG\81iEynJ\80kD\7fn<\7frEzg;yj@za>\8bdI\88eM\89`T\91fX\9dmY\95qU\97qW¡iZ§iKªtO¡|I\9f\7fN \86P \85T¡\82X\9e\7fT¡tU\98tR\9d}X\9e\83X\94\80^\92\90c\9b\91^\9f S¬ S°\9dZ®\9cS­\97W\9e\91T\9f\95S¬\89P«\8dJ³\98Hª\94F°\97O±\93\¾\98Y¬¡R« Z¨\9d\®\9cg§\92b®\98Z¥ ^§¦Pº U»\96S°\98P°\8aY±\91b±\93]ª\98V¬¤U¯£S¨\9c`©\99f\9d\99f¢ j\9d d\9f ^\9a®c£²_§¯a\9e¨h\9c­a\98ªd£¬`§®T£±Y§¶\ ¬W¬·X©¹X\9e¿^£¼R\9c·Z\97±X\95·\\91¶O\90³H\9bªK\9b¼R\96¾Z\96¼^\97ÇW\8cÉS\91¾_\9c¼a\96Èf\98ËZ\93ÈR\91ÇJ\88ÂL\94ÈY\92¾T\93«U\90©^\8e®a\90­^\99³]\9e¶^¥²`¨³eªÃa£Çc¥Ãm¯Åo¨¸p­³q¨³r¯­h­¬f¶µY³¬T´´Q§¨Mª­T¤­S¥¾A\9cÃF\9d¸C\9e¸B\94ÂN\91ÀE\97ÃI\89ÊE\83ÃLyÃ…YzÆY\7f»M\85¾E\87ÀD\85ÇLxÉO|ÊP\87Ã…^\8bË^\8f¿_\85¿S\82ºMzÃG{¾Q~ÂK\88ÀI\84´:\87§E\85©>\87®C{§Cx±F}±H\8cªD\89 ={¢>xªF\83ª>\8b¶G\86²Hu¯Cw¬@t¸G{ÄG}ÂE{¼M\84²^\7f´doÂ¥Zh\9eOn Tg£SkÂ¥Zu±Uy¬XwÂ¥[l§Wr¬iv¡rkÂ¥lg­nh°n[°^V¾fXºgS»USµQNºZJ½UU°eO°eX¦cX¦VX©L\¬OS¦U[¬]Q©ZX¨UO®ZG´PW§YW¤P780A019@/F=&=K!EE)<K'=5.L58@;4K?>V11P38G<:NG4JL1P=4TL1WE/ZB8[A2]C3^F4`N8YJ@^S>YV:aS3oR3pWBvV:uG5sFEpPCnV?sXIoYJpP@bU9jd?sdJwdLr`Q\89`P\88]W\87bK\86nV\87lVyeG{qV|rGw|L\85tM{nC~eI\80rK\8ceQ\91_L\99_K\9esT\93x_\9ayT\96p`\9auK\9b{T§\80P\9c\85R­\80T\9e\84c¤za§\82e£o_\9d\80W\9f\7fU\94zS\98\86T\99\8dY\98\8dQ«\97`°\9d[ \99P«\8fR¦\98Q\9b\8aP \87W©\87Sµ\97M¹¡N¼\96RȢI²\96Nµ\97_¹§Q«\9d`¬¡Z¶\9af´\9fc²\96Zµ V¬¬K´¢R¶\94I©\97Y­\91V¶\9bO±\98S©\99S­ _¡\99f¦\92a\93¡n\9d\9be\98\97f\94\98`\94­^\99°c\94«b§¨f\9f¨a\9dµb¡¥c ¥R\9c­S¨¶_£µO\9b©Y¦³Pª¯W¥¹T\9b°P\97©Y\8d¦^\8f²[\93¬Y\8e£N\91§L\8d¸T\88¶[\94¿Y\95½\\86ÃO\8aÃT\93ÄV\91Ãg\8eÇa\92ÃR\81¿W\85ÈK\81ÂV\8b¹Y\92°c\98²c\91¸V\9c¯T\96®\\99µ[¨µ_¨¶^\9c¿m¦Äa«Èl§Âi³²k²­q¯¬c¬«a©¼e»¿U±¸]µ¶KǦT¦¬J²¼C§¹F\9e»J¡ºJ\98¶F\93¿T\93ÊI\8a½A\8dÃŒA\83ÂI\82ÊS\82ÈO\8aÃL\8eµC}ºS~ÇG\88ÂD\8aÂG\85¸P\8eÄQ\83¼Y\81ÀJ\83·D|»J\7fºE\84¹O\85«H\82ªD\84´F\7f³:\82°Cx¯I}¨K\83µH\88£H\8eª>\7f«F\85Â¥L\8d«M\93¬?\84¹9\84³Eu»;m²<r»K{µG\83¹Wu­Uu¯bw¢bi¨br\9f`t\9f\s¦`g\9f^s£cu¤YqÂ¥`o¦`}\9clmªpk©g\Â¥j\³`a¬j_½eS¸^O³XZ»a]¸`[ºaX¬XR¢T]°VS¯T]­XZ©ZUÂ¥SX¤SW©QZ¬XF¯WW¡QO O69%8>&DI,FG)=F+@N'II,GE3E?/J96U9?T:=H;:H>8R?/QA6SI<ZC9Y=7Y>;SGB\K;XS3_N:o[;m[4iT:gW8qV4o[;jPCtP<zGHtOHiVBnZHiXEhUJn\Dl_JxTKrVIrWU}`V\80cd{``}^V\82fW~oS\7fgX\7fiM\7fvF\85yK\84yJ\84mO\84nD\94sA\94hH\94`J\95g[¡l\¡xb\9bpb\9by\\94x_\9c\85\Â¥\81h©\82e \86^¤~eÂ¥\81[\9f{`¦|h¡}^\96\8cR\95\89V\9c\92R\9f\91O\99\98Z¤\9c] \94c\99\90]\97\89Q£\92S¬\94Mª\94K±\9eG¸\9cQ±¦Mµ\9eO¶¥\°¢Y¶¥Pª U³©U¯¦Z«\9cP¬\9cP«©H¶¤O©©S¬\9fK°\9cN°\98X±\97T®¡R¤\9aY©\9b\\9c\97e\99\96l\8d¤h\8d¤h\8e¤g\86¡e\8f£h\91§Y\99¤`\99 _\9f¦b\97¬\\9c³_\95«P\9d§W\9b±T\93±L\9a¶M ·Q¢«Q¢°V\9dÂ¥T\95­N\8c§V\8a¨N\94\9eW\93¬Q\8b©X\8d­S\7f´R|ÃO\82¼O\85ÉJ{ÈV|È_\89ÈY\8dÃT\89Ë^\89ËU\83ÉT{¸a\83¶^\8a´]\94´Y\9bµ^\9a½[\98½f¡¸`\95µk\9a´f©¸o§½n¤Âi£»h«¸r©·j®Ãf²¹Z­³U°¸Z®²\ª¼P°´E©»H®¯U®³P©°T¡®L\92·I\93ÃO\97¼C\8bÂE\94ËG\8fÄL\88½V\84ÂS\8e¸Q\87¹I{²M\7f¸P\8c±M\8dµF\94¶P\8bµO\93¼T\8a¸L\86¶N\86²L\8b¨H\81£P{Â¥K}Â¥Ez´Cx±>~³=v±I\86®J\87´K\8c²@\88Â¥=\90¡;\87§G\82¬@\8b­>\8d¬@\82¹:}´=v½?x±A~±Ay©Hs²X{§^x¦fm¡cl¤`i«ak£]e¢\p¦]{¨eu¡hz«gu£jo¡ad¦ef­f\§id«q`´j[¸iYº`c±[a³a]©`WªUXª_P©^V¯YU¤\S\9aUS RO§UV°ZW¦[V Q^¡JTÂ¥R:591B&EE/DD)EI+E="EB%OA4L;6N;+X:1T@FY<7KE<MA4PF6\N0NN<T?2^>0RE3VP<SI7dS=`P>]^@cb@pa4vZ;zV<oR>o]Ay]Bf\MpU=mOCkVIbTBq]Jk`SqaQtdT}XQ{dTtb]\82me|f_|iV{hVslU{uQ~uP\81tQ|qU|iL\84xQ\87rE\94mQ\96dL\97aY\90kW\8e\7fd\9dxV\9e\80^\9b\85c\97zV\9a{X¦\84g\9e\82b¢\82h¦xc¢nd\95\83Z\92\85X\93}M\93\88T\94\8cM\98\8fF£\9aL©\99[¢\8c\\99\96]¨\99O¤¡Y«\90P© U²\9eP´\9b_­¢O¨\9cN©\96W²\9aR¨\9cV§\99]¶©`±\9dY§\9ec«\9eV±\9dP­©Zº¤M«\96L¯\9dO»\95\²\9f`Â¥\9bYª\94V¢\9d^\9a\9f_\98\9c_\99ª\\8c£n\8b¢a\8b\97e\8a\9c[\99Â¥P\8f\9eR\92\96Q\96¨R\9d¨d\92²R\9c²V\9d®W¢¬K\94±X¥³Y¥¢H\9c±G¨§R¥²S\91®P\93­L\8f\9dK\8f\9fV\91¨P\82Â¥`\7f¶Z\85ºS\85²O\88¼O\80·K\8b¼S\80ÇQ\83¿T\83Ñ`\89Õ_\8dÃN\8fÉL\80¾Z~µX\89ºV\92½b\91¿V\9dÀg\96²i¢ºi ´_\99ºf\9b¾h¦Äq¢¼k\9b²`\9c¼i ¬k¦½_¨²`\9d¿R¡º\¥³P­¼R­ºN¯¹Lª¯H\9bµV¤­I\9f¶J\96°G\88¼U\8bÀE\90¼F\90¼M\8eÉT\94ÉL\86ÊU\88ÄU\84½O\89¼F\8e³K\84»C\81±C\89»R\84µZ\89¯L\8a¾@\85ºO\8b±H}´K~¤F\82©L}©>\80Â¥Is«Kz«J\82²Q\83²?}©@\81¨G\86¦E\86\9dC\85¦K\80§B\85¯;\82¯B{¼D{ºB\80ºBw´H|°Fp±Tm«Zo°[|©cv¤WqªXp£dl\9bes\9cgyªez¬fr¦`s°dk¯np£iiÂ¥cXªmd\9ekZ©dW±fY¿`[±gb³]a°V^¨Ua±aT«XL\9fdU¡XXÂ¥fS£^S\99YZ­OOªUV¨N\ W^©WO§`>;,7D*5B\1eAE#>;+@=%KB-FD.OI4MF/IJ0TC>V=:U;5Z<3XN.YQ)NI1LD2XJ2TE1MH/T[)Y]0Xa7\X@meGmg>k_CuT6~[GuZKmZMiXAaMB`Q=ZR=daBg]LkbNieLpdMunZ|iZvkYyjYug`|tdrySpuLplSmnJslG\7fhQ\82vY|vO\87vO\94gO\91^]\8e`a\94r^\8czU\8exf\96ye\9cy_\93yW\8b\80\\94\88i\98\91g\9e\89k¡\81b qX\9d\84[\93\8aX\92\8eR\9c\84I\93\91N\9b\93L\9c\9dVÂ¥\95P \8cQ\9f\92Sª\9cZ§\9eQ¬\9dV¡\9dY®\9ac¯£]ª\9aWª¢Q³£Z·\96V´\9bQ²¢Sµ\9b]ª£c¨¢b²¬]¯ [° V°\9a^²\9c]»\94W·\9dZ®\97Zª\97`¦\95XÂ¥\9e[\9f¨T\99¡Z\9c­]\8d­c\83¬h\85\9c]\93¤_\97§W\92\9b^\96\99S\99¡^\92¯]\8c¤]\94¨\\9f«S\9b°O\97«T\9e¤S¥¬K£¥B\9d©D¢¯F\93¢?\8a¢H\87ª@\8d¤E\8e¬L\87¯V~´J~´L\8b©H\8e¬T\87­J\89¶M\8c¼T\7fÃ…R}ÃO\85ÑS\8bÃ…I\8fÂN\83Ç]\84»a\8b¿c\8c¶Z\90¿[\94¼b\99ºm¬°o¨±f¥µg­·t©»v ¹h\9b®_\9f¨b¥±g\99²X\97¹Z\95¶S\99¹V\9c¯]\9f¬\\9e®N¦³M£µL\98¨S\9a³R\9b·K\92µJ\86­I\94¶@\95¶B\95¼J\90ÀQ\97Ã…K\8cÇQ\80ÆS\83»L\80½H\8c³D\89¶K\84·N\90­I\8c®S\93¹U\95¶E\89­E\80«F\81±K\8b°M\8b¦I\81\9cG\84\9dMu My¬D\82¶J\84§C{¡<xÂ¥?\85\98;{\9eI\81­E\81º;\81µ=zºE\84ÃG\7fÃIy³Ay­Pq¯Ok°Zu²[~¨^v¯Yx¬er\9f_o\9aXo¤by¤as¢aw¢Xo±_q®fr©le³ka³qX³u_¡ma¦oSµjP¶q[¸hT´XT¶VZ°_`§eV\9ceK\96`P\97WZ¤_]Â¥bY\9b]Y©]Y±RY·P[«UY¨^U\98`.93<?;5:*@3#>;,:D\1eH:"LE"B>0P?.X<3W@BTC4\=>UG/ZT1[P,XS%NV'SM0JH2TW-NQ.Rf6\d5YX?faCj_Ioa7u\=fY@xcKu\?jUAdKBfM;jV<m[Hu`@ljHzhL~fG\80oSr_[ri[qk_{iWqufujZrzTysKthQqlNrs]\83lW}qM\87xY\9crO\9ak\\96n^\98x^\98wQ\88zf\8a\80\\90{_\90{c\93\89f\8f\8cm\9c\87l\92\90^ \84W\9dp`\90\89T\9a\8fP£\90R\9e\85C\9c\86J\98\90N¨\8eI\9f\8e[£\98M¢\8dW¡\99[®\9c[ª\9cT¡\9f\¦¥WÂ¥\9b_­\9eO¦\99H¨\9aR¸\8cYµ\9dT°¢K©©U«®Y­¨[´¯Y«¬c« Y¯­Q°§Y¶¤U°£bÂ¥\99V¦\95f«\95^¨\95V\9a\96]\95\9f^\8a\9bh\8c¨l\82¦c\8a¢k\95£^ \96`\95\98^\9a\9bV\9b£Z\98§\\9a°U£¥P\9a¢N\94§R\9e°S¡\9fU\9c¨K¢¡D\9f°G\97ªG\9c®M\96®N\8e¤O\8aÂ¥C\91Â¥P~³J\89·M\85¶E\90ºU\97ªT\8f¹R\87½L|¼L|ÈM\87ÉO\8dÄO\95ÊM\99ÉR\94ºU\86º]\8cºZ\83¾f\96³Z\8f¸h\9d¹o¥ªh¨²n\9f®k ¬k¯ªs\9d¹g\9cºj¡²`\9b¶e\9b»a\92ª[\93«R\9dµ\\94°\¡°T¢¶\¢°R\99¸J\9a­N\98¬J\95³@\8b¨=\86¯L\87­C\8c¼O\8b´G\97¶J\94Ã…O\99ÂO\95¶P\8c¼P\90¹F\90ªE\94¬J\91»U\92­J\91Â¥K\94µD\96¬G\8d·?\80­E\90§C\93µA\80¦L}\94Jx\98Pp\9aNs¡E\83¸K}«K\88 I\88\98=\84\93;\83¤F\89¦D\84®D\8bµ={Â<z»<z³D\82´6}·Hy´Cy²Mr¬^y¨Xp¨Xp¯[j\9fck¤fs Y{ªYm«[m¢dq¦_x±nq³jo¦uhµoaªa^¡bX¬mY²bZ¹dZ³iT´`K±d[ agÂ¥`W cV\99cI\9f`Z¢^Y\9ecW `V¡TT­IZ¡RQ\9bNa\9f`V\93]24627>25691*<//;:$B;$AF%HL,JB+J;6WB;\EA_O7WW4UQ7_R6ZN(YH#NS+XU6X_6\\4Rb8cf9bc9hh:rfGe^DdeAch=j\FmSFoONkWHgWDk\LidEpm@xqL\83sU\80pR\81rUxf^vgavma}kgtp^shdzqbmmTonTmsZrl]sn_\82sY\91iO\92oS\96nY\91j_\99{d\92{\\86{]\8a\7f`\8d|a\93\80f\88\87a\88\89d\90\89]\93\88X\8b|W\93z`\97\7f`\9a\8bRÂ¥\84Q¢\8aN¤\92S£\94M\9d\8fS\9b\8aT\92\87N\9a\94V\9d\9e]Â¥\99T«\93K§\9dQ¡\9da§\99_¯\96^ª\96O°\94J±\90T¨\9cU¯ Q³¢_±©[´­\¶²`°°d´ªYª¤V­ªX¥«_®¨[°\96Y§\94\ª\91^Â¥\94U\9c\8cY\94\94e\8f d\87Â¥d\8b¨j\88\9bi\99\99b\99\95^\9c\9d]\97\94c ¢l\9a£c\9d\9f^¢«R\9cÂ¥Y\9b§S\9b W\9b¦R¥²H\9e­F\98¨?\95§@\9c­?\96±E\96¨F\92¦J\86¨L\81°C\8e¹L\8c·K\8f³M\8e°X\8a»F\84¼E~ËM\86ÃŽF\8fÃŽ?\8cÃD\88ÀR\93¾N\91µ`\97¶a\97¾b\88ºg\94¾d\92¾d\9d±b¦¯m¢´f¤³k¨²m¨¨n¥¯r\97·h\8f¼h\97¹Y\94©\\8b¨S\91§V\93«\\8e£a\91¬Y\8dµc\91´[\91°V\8e¸H\8b²@\8a­<~±E\81«?\86·G\8b¶N\86±I\92¶R\8e»G\9a¹K\8b±M\8d·C\91»@\8a®?\8e°=\97µL¡µK\9e¬H\92¬I\8e¬9\8c©3\8e¯>\87·=\89­C{¡Ou\9cQ}\9aHt£Hv¦M\84ªF\8e£@\92§D\8cªG\8f\9eG\8b¦<\83£<\86¶:\84º<|µ?\80¸@}µ>~¾<rÆHq¾Fi´Jj¬XiªVt«Xl¬fn¯ix©itÂ¥_o¨it¦dq£mw£kz¯g|¯lwÂ¥en©jj¢ha¬`X®\Z³\P´dP°jQ®iM\9epZ¦m\ eR\9acU\9fZQ\98`L\94ZY\90SX\9dSZ¦U[¡N_¡NX\9cPY\98Y_\9c\75B37A7=8C+"4@"5I(AA&BN+GL0TJ%YG5YH;YM9SV4TQA[J4UI/SW+\T*\Y*]Y,PW5Z\<\f8`l9dg;sc<jdPfbKc\Fo[HmXLtWNoOOtYMd\BqbHucIskNvqM|pX|mJ}jav^Z\7fsUzrSxfenuaztaxjW}hQpnNoc]niazri\84jg|ze\8bnh\91x`\92oh\90{`\94~b\86t_\84~l\8c\87e\95}h\8e\80[\81\88f\92\89h\94\8bZ\90~f\90u\\99\84d£\90a£\91M£\90M\9c\8cS\9a\92O\95\96G\9e\82Q\96\84Y©\92W¡\8b^\9b\9cS¨£Y¨\9eK\9d\9b`\9d\9fc«\97P¡\9d]®\95U¸\9dQ²\9bS«£WǬ]®±Zµ¥_¸«X¸¬c¶²[¬«P¤¯[ª¤Y·«W©¥Y \9cT\9d U©\9bU¢\9f\\99\96g\97¡e\88¨k\91\98l\90\8fa\9a\90h\9d\99c\98\99[\97£a\93\9eg\9e\99\\95ªW\94ªS\91©U\8d¬H\8f P\9c®F\9c\9fH\97§@\98©A\91Â¥>\92¡; «9\98Â¥:\92¨>\8f¨H\85·A\89¯?\8d«U\8eªS\95¯H\89®R\85µH\81¿?\88ËC|Ç>~Ã=\88½P\98ÀT\98»Z\92·a\82ÀV\89»c\95¾d\93Æi\93³r§²m\9d¶d¡·q¬¯h\9e§q§«o\9d³c¢µc\92ºX\9d§]\95¦T\93Â¥a\97´f\95 `\97 b\8e§U\98²`\8a»P\91®K\86»?\8b²2\86Â¥A\8e¨<\89¬G\94°J\8a«@ ²E\94·E\9f°A\96µD\8f«F\95«;\8f¨;\8e£E\9c§=¢¢B« =¢ªE\97¢=\8fÂ¥B\95´D\96¬8\8b¯K\85¡D|¤Bs¦M\86¤>\81§H\87ªI\92ªM\8b«@\8e­C\91\9cA\81\9e@\86¤G\89¹A\83¶:\84¾8\81ÂE\84Â7\7f¶Bt²Bn»El¸OyªZu¤\t«QsÂ¥ZzÂ¥gq£ns«]n²[t¨\{¢j{¢`{«f~ªgo¦qx¨cq£kh¦ff±dU§nY«lW°rQ¨lLÂ¥lP\9df^\9aaW¢[\\93]O¡^J\9d^N\9fP\\9dX^\9dSX\9cHa¡MaªUe\99QW\99WA:;86:?<$A5\1f:6!>H/:Q2;I)A@"O@([=8YHAPR6NO7PO8[O<WUBZX6^R4\[6\S9PX8Zi7Yj9dc<fa?g_AohIrfOiaHxhNuaPm[Jt]BrfJodMh_RpfPrqOyoVtfWvnStj`\7fac\82i\}tUwfephcrr[vr[yoPxiUvb^ngdymqvno\84\7fx\82~o}qs\87qe\8cyg\90vc\8c\85a\8d\82h\91\81b\8e\8a]\93\8bc\8a\8ag\83\88n\8b\8cg\8b\84e\95\80c\9c\84i\9c\87_\9c\88RÂ¥\90O\98\97N\94\91U\9d\8aS\99\8aG¨\88T¨\84Y\9d\98]\9f\9cU\9e£T\97\99T\93\92U\99\9bZ¡\94ZÂ¥\9a\²\9cOµ\9aS­\9dZ¯\94Q¨\9caǻcº­`·¯T¹±b¯¯_«¦T¢§T¯­`¯¬_¤ªU§§S«\99X\9f\9aU\95\95`\8e\9fi\8f\98k\90\9fo\8e\9fg\96\92_\9d\90k \8be\99\97f\94¦g\98¢c\9a\9e\\96 T\8d¢Q\94¬G\8eªB\92£I\98¦C\8aÂ¥M\8c\9fJ\8b¦O\98¦L\9c¡<\98¢8\90¨6\85°;\84¸5\89°7\8a²L\90¬Q\8f·N\90´I\93±P\89¶N\82ºC\85ÆB\82ÆD}¹E\87»N\8d²W\8c­N\85¶T\7f·V\87º\\8fÄ^\98½e\9bÄe\9d¼sªºk«¬h\9f\9fj\9e h ¥`«©i¡²`\96°Y¡­V\9b\9da\9c­a\97­e\9b¦W\9a Z\99±c\8e²c\8d¬]\84²O\80µ>\8b³4\89¬7\90¬:\8a¶?\92¯G\92¨9\9c§;¡«7\99­@\93¬A\97¡; \9f8\9d¦8\98¢6\91¤4¢¨9¨\9f9¥£:\95\9e7\98Â¥<\92³;\8c®B\91¡G\88¤Nx«C\7f©@\86\9cE\92Â¥;\8f«>\88«C\85¦H\8d©J\91¨I\8cÂ¥B\84¨@\89·J\7f¾D\87ÃA\81Ã9|¼=t¶=k¸Dn¯Mw®Xw§Ul²Zn°Zq²^{£o|¬st«er·`}±_uªXz­b\82±l\81¨k\83§bu­it©ca§eeÂ¥o[ s^¢rS\9eqM\9biXÂ¥cY\99[T\9ccN\90aU\95Y\\93VQ\9cVR¡QP¡UV£[U¡OR£H`¦MY\9bV_\9fY5;.54,:?":8\1fEI$EG.>N1EM%DD&PK*GO;MN>\N:Z[2XU8]T0aX1eK3a\9dR?dV>\b2Wh?]f:ekDgY?pi>naCqg?nj9ugEyiLyiKxdHljFrfO{aTo^VrqTwnStwZyqV~p^za\vj`|tTomWrc`roitp_ycg|fdyglssdtogp|q}os\81smy\80f\87\80u\8ard\8e\82g\84\80d\8bza\92\8cb\80\8cY\83\8d^\84\8dg\89\88f\83\8e_\83\80f\91\83d\8e\89c\99\8bY\95\90\ \8f\\99\97X¡\8fV\96\8eT\9c\8dA§~N\9b\84\£\93^\98\90V\9c\91V\95\99V\9d\95a\9d\9cX \94U§\92^Â¥\95\°\98U¶\95`´\9bW§\9eU¢¨Y¬¬X»U²¨[³©b°´`¢¡\\9c®`­±a¡¤^¦§Z\9c\9eU\96\99V\9c\98f\8a¡n\95\93p\88\90q\97\95h\94\90m\8f\92j\9d\90k\96\93_\99\96^\92¦f\93©^\9d¬U\91§W\8c®F\8b°M\8b§F\99¢F\8aÂ¥K\88©L\89¨G\8f§A\8f¦G\90\9d;\87¡8\96©7\8e£=\82µ@\89²9\8b¨L\87¯D\8eµL\8b´E{µR{µO|ÃD\80ÂJ|¾J|³S\81ºY\83¶`\88®c\83½U\90Ãg\90¸]\9c³o\95·j¡Ãk§ºn ©h§­l¦¡kª£c©¡[ §d\95ªa\93 W\91¡d\98\9cg\9b\9ea\99\9fW\8c\96Y\9a©[\93°^\89³L\88¯D\91¦=\8dµ;\8c±?\8f§:\95°8\93©>\98±G\9e\9d;\93­4\9e¨8\9e¤<\97\9fE\9f\9a1\99®>¢ª=¦\986\9c\9d8©\9e5\9c\9c<\9b\9d@\96­H\97®:\96\9f=\97¨O\82\9e@\84Â¥K\85¯G\83£P\86¤@\96¤?\82Â¥I\88²I\81®N\8e¢M\8d°L\81­E\7f²H|½G\80³Cu¹FvµGq²Nh¹Pr«Tm²V}¬\s¯Tw­Y\82«dv¬et¯oz©qp«`\84®[\7f´hx­h\7f«l\7f¯py­kw³me d`£ti\9bp[\9ep\\97zZ\9fmY£kYªbO¦l[¢nN\96aV¢aU\98bT\91TN£]JÂ¥ZI\98ITÂ¥Q_£T`«K[¬OW£PG3)94(;9*@B'7H#:C#9@\1eGK)GX&BT1GS6MY8TX4\^1WY,ZR1eU9^J@_TDgV<`XB[Z=X^8^j5gl:f]Ce]Eg^BdbGna;neBniIpjRunL}sDumKupE|gMzoT\81r_\82sZzi\zl_xpTxybtu`rhZvfYpagqfkkqkpmiore{trr}srxqrtizvmzzq\80\80u\8a|o\88\81o\88\83s\8c|i\86\8bk}\8c\\80\8cb\7f\8b^\88\92W\84\89Z\86\93Z\8a\8eZ\94\95Y\8c\8cQ\8b\87P\98\93W \95N¡\8cU«\80N¤\83K\9b\8bR\93\85Q\9b\8bT\97\8bZ\9c\88Y\9e\8a] \92Z\9b\91Z\9d\96[¡\98`©\9bd®\9db¤\9dc©¤h¬\9f_ª \\9f¨]¤¨Q°ª_¯®[¯§_ «\¢§[\9fÂ¥S\9eÂ¥_ \9da\9e\97g\99\9cd\96\9bj\8a\95k\8a\93i\8b\8fh\8c\90j\8b\88l\8f\8cd\94\96b¢\9bb¡\95`¤\97V\9cÂ¥Y\90«X\91¨M\8a§K\8eÂ¥F\8f¡C\96\9bH\97\9eA\8e¦G\88­@\85¨D\88\9dE\8d\9d9\95¢/\95\9f3\8b£<\8c«>\84«8|³?\86¹A\81±Ly·G~ºM{ÄR~¿Lw´Ky±V\82¯W~µ^\81µ[\83±a\80®h\8eºe\8fÀo\9c¸j¨¸j¦·j«¬g¥©q«¢n¨§g¤£i  [\9b¢W\9e\98W\9b¡b\90 a\95§e\8e\9e]\88\9eb\8e\96c\91¤Y\95 Z\96¤H\8dÂ¥C\8a¯B\88«@\96­A\93²9\94¬7\9b±=\96¤7¢ 9\99£4\98\9f9¥¤;¡\9d=¨\9f2¤¨8°¨2«\975£\9a8\9e\9a7\9b¨@ ¨D\9d§B\9a§I\8e¡Q\90¡I\8b¢D\84¬H\81§I\8d­O\85¬N\8b©I\8c³@\89­G\84³E\83¬G~±=\84ªD|¯>{³By¼Ev¶AwÀFu¹Nv°Wm®PoªVx¶R\85·\\82¹V\84°bz©frªcp­my«m{«d}¦[{¨_vªfsªlm§cj¨gd\9bxn\97wk\8f}f\92v[\94w]\91lW\99aR\9ecX¡`Y\9dkO\9fnO¡eU\97aU\92cV\94UK\9cQM\9bJS¢O[¦Na§Zb­]^¢T;'&52$J9/D?0;I"HQ DG5RM6KT)RS2RT3VW;XS:\S.\N7RU2RT7VX-dZ7]T5fP7`YAXa:av.bm6b^CnSBmW9m_?lZAna7vuJod?ufG{jKilWstKzr\~iS\8alYyn^uwa\83sZ{uWmm^quhoeeqdTxdiqjuwotniunuxw}rrmr~mzykj{nx{\82rt\89u\85\84p\82\83y\8e\7fo\93|f\82}pv\8c_\80\8e\\80\83i\84\87e}\83Z\8b\8di\91\82_\8e\88`\9a\8b]\9e\8f]Â¥\83X¡\90[¤\8e\\97\8dM\96\8bD\9b\82M\99\88O\9b\80T\93\8dY\9f\86P\94\95W\93\91[\94\88]¢\89Q£\96Y¡\97`´£[µ\98`«\9db¦\99^¯\99Xª¥]¦\9dWª\9c`°¯^ª W\99¨]\9b£d\90\9fQ¡¢_\9c£j\97\95b\9b\8cg\88\93c\8a\8dg\83\96a\91\8fk\94\8fj\8a\94\\98\8fl\8c\8fa\9b\99g¡\9de\9a¢g\93¢Y\93Â¥W\85¨R\86\9fM\8f¦Q\90©H\8f£K\8b\97>\8d¤?\8e\9eF\93©>\8b§G\85\9d4\8c 6\8e¤@\8a¬6\84¡>\85±@\81²Ju¹B|½Kw¹M\85µD\7f´IwµN\86±G\86®Sy¬V\8a´d\80©T\8a²`\84·f\8e¿^\8d³b\9f´k£ºm¤¾o\9a±l\9c©f©ªe\9f¤i¨©jÂ¥\94b\9a\9bS \96U\9f\9b]\8dª`\92Â¥X\8f¡S\8b\9cX\93\9cZ\8b\9aR\91\9cP\8b\9eL\91§>\8a\9fI\81ªF\8c«A\95­<\8b³9\93ª:\8d¦- £2\97Â¥;\90\9c6\93\98:\97¦8\9c¢.\9b¢8¡\9e4¨\97+«\9e,§\92:©\97@ ¥O\95\9dK\9b\9b?\91£L\90§E\8fªN\90¦E\90§J\98\9bR\8f\9fD\8e¨?\8a¬A\8e¨G\86Â¥=\84\9f:\80¦>\80¬>\81­H\80£D\7f©A{®Nx¹Rw»Tt´Ls¨Nu«Rv¹Y{´X\80°d\83´]u«a\83¤mzµe\81­`t³dx«Zw\9ddx\9ebz§hj§oq¯gj¡lj mg uh\8euW\8ara\95cT\95d]\9c^a\9fkZ\96t\\90kK\91cT\93bU\91\V\95XP\9c^X§U_\9cL[\9aN^¢Xh\9cSl ZJ/3B)/A**K6)BK2DP-KN-LT9JK1XH/QL8SJ9[D4TF/U>5SG0MP(T\*WO1^N.T\6WY9em6ep2i]?g[<^]7fZ=o`5n_=rj4lo<kcFwgGwmIkt\qn[suZuh^\88ga\80pcvwe{pY\81pWyc[idhqkdth^jcnjgnea{mdvljpmtlrvx\80nu\86lvzpv\81tly\88p{\88n\88{x\8czl\8d\84h\82\85u{\81r~\80u\7f\83f{|h\85\86i\87\8el\87\87j\99\8fd\99\90b\9c\80g¢\81b©\81f¤\86Y\97\92L\96\90M\9a\85K\9c\80F¢\82D\9e\86O\97\91W\96\97X\8d\90S\92\90W\95\8eV£\8dP¬\8c\°\9aV·\99Q´\9bM´\97Nª\9f\¡\9af¤\9e_ \99e¡\9f`¨«i\9e«f\96©l\90\9f`\98Â¥`\93¡d\9b\97o\99\8dh\8e\8ff\82\95i\85\90i\90\94k\92\8dj\8d\8fY\93\93d\93\98k\94\9bd\9a\9b^\98\97`\92\93j\95\93\\89\99P\8a£O\8d§T\8b©G\8e\9c=\8a\9aJ\97¢E\9b\9eE\93¤D\89¨?~¨9|¬7\89\9eC\86¤I\84¦@\83©Fw³T~½Lw¹H\80ÀG\85¹G|±H{·M\80±M\89¶K\8a®Z\86¬]\86©a\7f¬U\8b±X\90¹`\96³g\97³g\95­c\9f¶f\9d¼b\97°h\9a¬g¤®l\9a\9ac\9a\96Y\9f\8bS\9e\91Q\9b\9fT\95¤R\94\9b^\86\92X\90\97P\93\95Y\93¢Q\96¡N\8d\9b@\87\9eB\83¦G\83¨A\86¯=\8e­1\8f«-\8d£.\8a«1\8d¦0\95\9b8\92\9d5\93Â¥0\94\9e)\91¦&\9f .¡¢*§\9a+¬\974¦\907ª\88D\9d\90H\9f\9dL\9a\98C\92¤H\8bÂ¥H\94¦O\96¬D\9d G\93\99J\90§L\92¨C\87¤L\87¤G\81¨E\89£>\84 D\8b¡E\89\9bM\82¢Mw§Pw©R\82µa\83´^\81²O~­O\87Â¥V\81ªcy°j}®d\84²b\81¤_\89§i\81°lt­av©eq¢bx¡az\9fku¦nm¨pt¨`h¤ek ra\99kc\93md\97bV\8bdP\8b_[\91cc\8dn^\8fl^\8acT\91^V\9f[X\9b_P¦_S eY\9ba`\9cQY\9dWX\90\e\96Oi\98R?*0=$7K18M60JA/QE6RU;NSA^V2^Z8WQ1JP:ML,WK-PG,^H5\N4\\#ZK&QK%SR*d\>b\:fl.m]:cb5oc9p`;q^>lbCwj;qvAoh?urBysMvu_wp]vkd~cZ\84db\84cnrkl\81k`{niqhiifcgl[lmdkdhqcvhiqkZvzekolt\80po\8bdq}nu\80|wz|uw\84wx\85ot{p\85\86|\85\82q|\8at~\81j}\81r{|o\81\83l\82wd}\83g\81\83a\8c~f\9b\8e\¤~g§\7fZ¡\85\ \86^\95\8c[\94\8aG\97\8eR\95\89?\9b\91Q¢\8fT\95\91P\95\91P\9c\96X\90\93L\95\8eQ \95IÂ¥\91L¬\90V´\9bX¤\9cT¦\98Y£\9c[®\9dV«\99S§¨Yª¤[¥ a\9f\9di\93\9ff\95\97]\98\99g\8a\90m\8c\8eh\96\89h\89\8c^\81\91`\8a\93g\87\88b\89\8bb\8f\95V\8e\8cj\98\91b\9c\97j\93\9da\8e\94n\95\8bh\95\9bi\8f£[\94\9fO\8a£U\91\9cG\90\9dF\95¬;\99¢I\8dÂ¥G\8d¢?\80¬I\7f£D\87Â¥D\88§J\86¦F\82\9eO{¤K~«Mw­Q}°N\89µ?\84¶K\8a­?\7f¯J\80ºK\87³R\85®Z\88±c\85³P}¯X\8d­S\8cµ[\95¼i\8f¹d\9e¶e£­h\9a°a\9cªn\9e¯a\9d¨i\9f©c\98\90\\97\9aS¢\97O\9f\97P\99¤T\91\97Y\8f\94`\8b\9dR\8e\94V\8f\97N\90\98P\87¡=\83¦:\83¯={«8|¤4\8c¤,\88©1\8d\984\92¤7\95\95,\8f¢8\95\930\99\9a+\93\94*\9a\9e3 \931§\955¨ -£\97:£\8b9¤\89>¤\96;\99\95M\99\95B\8c\8eN\89\99F\8e¡>\94\9eJ\8f\9cH\86 F\97\9dA\91ªG\89¨N\88£@~\9aG\82¨@\88 N\91\9cL\88¦I\92\99M\86«X~¯b|®b}¶\\82´^\81¨Xy«^\88²^\7fÂ¥ht²b\7f­f\82ªg\7f±d\82§o} ut\9cpxÂ¥n~ mo¬mo§ek®cj¬je£_m¤_j\9fmf\8akW\97_Y\85d`\90b`\8fl[\95jb\87ha\8ecQ\94k[\9bk[\98bT\9cbd\98Zf\9a]d\9bT^\9d]k\98\c\98Jk\8eN90<F.<A:@D84IF;VK=XO9ZTAWQ2VZ3[N+NL*OQ$SM%`O$_L-UN&ZQ+VV)UU)\d1eb6gf;ce6dj>gc7nc:heBhe<roAmrGxoCyhD\80rH{lKtoZruezi_zqa\81jivoqsgkvihymisd`yb`l\[habcgmmell[hq`ppe|zgy\89ot\86in\8aqi\83ynt\82zt\85~y\8c\82p\86vr\81w\7f\8cx\82\80s{\83l\81\7fnyxf\85oc\7fw`~\7fl\86}f\95}f\9bz]\96va\9e{[\95\7fQ\93\80S\97\85O\98\8dO\9f\94J\98\8cF\99\8aC¤\8eK¦\8aL\9b\96L  U\9c\98Pª\9cJ§\99M«\9bNª\97J«\8eSÂ¥\96U£¥]ǬS¶\9eW³ W¦\9ce§¤d¨£b\9a\9ak\9a\95e\93\93e\91\94l\92\8dk\98\86d\8d\8cb\8a\90c\82\91Xz\8c`\82\85]\87\89\\85\94^\88\9be\90\90e\89\8ep\90\90j\9a\8er\93\93k\90\95q\90\9de\8d\94W\92\97T\98¤J\8d§B\97¨<\9a¬?\92¤<\8c§E\85­H\7f«?\80´L~®Sv³O~§U\88¦Z\82ªSwÂ¥U}®Jz¢B\88§C\8f¯B\8a´D\84ºN\8f®P\8f¨^\86¯\\7f¾Y\82»U\86µV\93µ[\8a®k\91°j\90±i\97£l\9a\9dp\9e¤h¤¦b\9e£_ \9c\\9c\9bV\93 O\9b\9aU\96£c\9a\9bc\8b\95b\8b\9ad\87\95Y\8b\93M\85\9bI\8f\9bG\89¨J\8a©A\80¦@}®;~¦5{©1\89¦;\8e\954\8d\8e>\94\8f7\8b\8c,\8b\95)\8b\98+\9a\8d. \8b)\97\950\9f\934Â¥\9e5¬\924¨\953¡\8a0 \8f>\90\88=\8d\90I\8e\91F\8b\8dB\96\96@\96\99B\88¤=\87¢D\8a\9cK\8d\9eK\81\93O\84\95G\8b\92N\83\9eH\89¡J\8f¨K\93¦N\92 [\89ª\\83¬f\85¨g\86¬`~¦i\84£i~¤f\85ªg\81®fzªb\85³j\7f±h\80¶kw©o{\9duv\9bpz\9bsz\9fx{\9dtp«lh£dm¢ce\9ef]\9d[^\9b]`\8eca\96cZ\8ek_\91fg\87fa\84le\8cnc\89oT\8bq\\88kV\92hc\88bg\8b]c\96am\97Xu\94Nm\8fKd\90Sj\8fOH68=49;?;>G7KBBU?DSTEaTBN]DVR+JQ*UH!VS.RQ"SP.VN1PR VZ&Y[1WN)`W:_[9`e>k\*_i=n`7le9cnCpmAuk<pfE}dCycGzqA\85oNtm`~eTzdV\81dg|f_vljn_ovgd\82h]yf`rbbneeo^\obgxY`jerv]p{kmtgt\89pr\83gu\81ik\88zpzv~~\90\82y\8czl\82qr\91sy\8e\7f\7f\8cuv~ozwm\82uo}ya}~h\8arl\89va\8a{^\98~b\91~X¢ye\9c\82]\9d\84W\9f\86I\9c\93W\96\90R \8eO£\90P\9e\97R\9c\8fH \93P\99\94F ¢@¤ L¤\8fI«\95I\9d\98C\9e\98T¤\9aI¢ªO±¨P²\9bVª\9b\«\9cf¤©mÂ¥\9bg¤¢k¡\92i\9a\9ce\8f\85r\8d\83s\95\8ai\87\8bm\84\8fa~\8dW\8a\92a\81\8b[|\8bh\89\91f\8e\89\\97\87f\8c\97l\93\92j\85\96o\94\91_\85\92`\8f\92k\8d\97]\88\9bI\8bªL\93¬Q\8eª@\99¬C\8c¯H\90¦H\88¡H{£@z¨O\82¨W~Â¥W~£Jy¨W|®P\88¨U\88\9fQ\87­M\84ªS}°@\89¯;\86¨D\8bª^\86®Q\88·d\8d¬T\82®R\91®Y\96±^\90Â¥a\85°e\8eÂ¥i\9c\9fl\94\9cc\98\9c] ¥b\92¡`\95¡Y\99\97Z¢¤^¤\9aV\91\9fb\88¦c\83\9bX\88\92]\89\9cM\85\9aG\92\9dS\93ªD\97¦@\84§C\81¨<\84±3\83ª5y¨/}£5\88\9c4\8b\99<\92\92/\86\91(\80\89-\8b\88!¢\85$\97\8f*\8f\9f)\96¢0\9b¤0¤\974¢\96+¦\8f:¤\94B\92\95@\8c\8bI\99\89;\94\91:\92\93C\98\90;\93\97@\88¡>\8d\93C\83\8fK\8a\97E\94\97C\8d\98D\80\9f<\8c¢H\89\98R\89\9bQ\95\9b\\8f\9aY\8d\9dk\8e¡m\8b j\8d§a~\9cn}¡d\85£b\82¨l{Â¥k\83¦g{°s~³b}¯ls«o~\9alq\98hw¢lr¢ju _j¡ie\99[m\9c__\9c]^\9baX\8d]Z\88``\91ic\8ddd\89^d\8ff\\87nY\95pQ\8asZ\8di\\89\Z\98an\99cl\9b^f\9b\p\95[q\8bXj\8dSb\8fQD44?<7<:2GI5OA3TD@]M?XRKRRCKW2QX(US)^V.YX&O\\1fMV#MX)\a$S\/RX.__2[b:ja7gc/bb5i^5hlCchBf`Ey`Gxc@sa>\7fmK\81hFy`H}_X\80_S\87_S\90d]\88]a\81iiuhm{ccy]\w]RnbYqV_gU\j``w^_lXgmZryelvhp\82fk\8bsp~iu}ot\83~qy\8d}}\87|u\8fxz\8cww\87~t\81o\81\80n}mjzki\88rf\88uo\8d}d\89u^\91\84U\96\84Z\93{e\98}a\9b}[\98\86K\99\8aW \98U¡\95H\9b\88J \94Q\9e\99R\9f\90N \90L\96\95E\97¡A§\9f@Â¥\96D¤\96<\9d\9aE¯¥C¯¦J®§U¬¦P¤ªO  V\9c\98e\9e¡h\9a¤^¢\9ab\9a\99g\97\96h\93\85j\8f\82o\8f}s\91\88h\93\8c[\83\86^\80\84i\87\8eg}\8fm\81\8eg\7f\88b\8c\89]\8c\88f\8d\96b\93\8eZ\87\8cb\83\8dd\8d\98`\8f\9bQ\8f¤K\8f\9cN\9a£P\8f§C\8f§C\88¦>\8a¡;\8b§G\80«K}§Hx¦Ut£Lw¤Pr¬S|Â¥]\7f¬Z\83¡Y\89©W\7f¯TyµI}³C\87§I\82¦[z£b\80­_\86®V\8aªU\90¢P\92£T\88\9c^\89¢]\96\9di\9c¤g\9e§i\9c¤[\9a\9d_\96\9b`\97¡Y¤\9eZ\9d¢T¡\99[\96\9a`\87¡Z\82¦[~\9aW~\9cT\8b¢O\92£O\93ªG\95¤E\8f«M\91¬<\81­<{¤:}¨<\83\9c9\86\928~\93@\86\8f6}\923\84\88!\94\87+\9b\8a*\98\8e%\94\9a%\98\9a1 \9b3§\9d,«\9d2ª\909\99\94?\96\8eB\91\8b>\92\945\9a\8f9\94\958\95\8f?\8d\8bA\86\98A\8d\93E\88\8eT\90\8fS\92\8eA\85\8eF\80\91@\82\8fQ\92\96[\8c\90^\88\99c\81 X\8a\9f^\8f©c\88¢l\81\9fq\87\9ae\83\9ad\86Â¥l\8b®p\8aªo\82¢j\83¤m\80¬kz°b}¤`x\9bbp\9c[t«\y¡fz _o\9b[g\92^r\96dm\94bj\99``\8eae\8aae\83hX\8b[Z\83_Z\8bhc\8d`g\8be^\92ne\90_g\8d^c\96Ue\9a\^\95[h\9cNk\95Od\96]a\97Wi\86\>1FG;BFA>EBDRQFNGJ^NA\YCPLCHK3K]4SU5X](RW&M[ RT/[U4`c,P^6Te2X]8]cFan@ja:dd6q_=f]=mZCf\Fx^BoiA\7f]@\84fF\8bgI\7f[S\8aYT\8eWU\89Za\84da\87]i\86imr]mt_dq`[kZVhXcsYZkYWjOckYgzZnsTu}ahyhv\8buu\91wg~wh\7f\82q\7f\87x{\8e\81q\92x|\8b\86s\8a||\86\89p\89\81\83wr}prwnj\83ys\7f{m\7fzd\8fqb\87\81^\8e\81Y\8c\84_\8a\85]\9b\89V\9f\89S\96\87N\97\9bOÂ¥\8bI\9f\92Q£\99W¦\9fQ¤\8fV¤\8dA¡\8fG\9c\97C\96\93FÂ¥\9dG\98\96D \97O¡¦M§£Qµ§F²¤W¢\9cM¡¢U¤\9bX¦¨k\9e\99l£¤h\9e\9co\9d\8ca\97\88o\9b\82p\97\89d\8a\81n\8a\87i\8d\85l\87\8cc\84\86i\8c\88]\82\8cb\89\88d\7f\89f\85\8eaw\8fa\88\8de\81\86a\84\8dZ\90 ^\8a¤R\8a¦Q\8c¨J\9a\98R\97«O\8e¦A\93­<\8d§9\81¦B\81¦D}¤Q|³]x°Qw Jz\9eW~­\\83§Y}\9bUy§\}¹O\82ªTv°J\84­R\80¯U|¤U\8c´Z\8e¬V\81§Y\8f£[\86¤V\8b\98\\93¤V\94¤b\94£f\91\97c\94\92Y\9c\96h\98\8fe \92j\9a\9ci\9f\9d[\9c\9b_\91ªS\8d\9eX\7f¦]\81\9a[\85¨M\8e\9dL\86²O\85´L\91²B\8d©>\86Â¥G\86ªA\87¬=\88¤F\7f\962\84\96+\8e\8f9\81\8d(\80\95$\88\8d'\9d\85* \92!\9b\90*\9b\9a$\98\9c'\9d\9b'¤\9a6©\910¨\943¤\8f<\95\897\9f\8e>\95\88D\99\93@\95\8cC\9b\90?\8b\8aO\82\91O\89\97J\8e\8bK\8b\93G\8b\8fN\88\97D\87\94A\92\95K\90\99]\83\9dW\8a\9bk\92\90d\83¢h\92\92g\8b\97q\8e\99r\87\96q\85\9fh\8b\9er\83¢p\86 l\8d§w\85©j}Â¥nv­fu¡hz«Y\7f£Y|°b}\9e]}£by\9fTq\95Yl\94^l\96br\8a\d\90fZ\8ccb\84mj\80\j\83h^\8e[i\8cf`\89bd\8dn`\98_j\96\b\93ac\94_b\93Sg\9aWp\9cMd\9aae\9bQj\8fVM9?K:HM:IHJAGRMSOMNWDYUKPRCPPBSU@KZ=Le1Ub,M]1M[,P^6Xd:Za<Qa4Xc?alAer>bg<dgAj^<lV5kY:ue<ne3ml8}bA~`J\8aaC\8eYK\8bbQ\91Z\\85Y^\7fY^\82d`\89\b\7fZhu\_l[dvQ_pTcr_XiX]t]`pPnn[gwXoyar\86ls\85hp\88qk\82vi|\83i\80\88u}\84yv\8czv\85\82o|\84u\84\83yx\8aty\7fxn}xss\87po\86yl\8ato\86zc\8byW\81{[\8a\80X\8a\8eT\8c\8bQ\98\8fS\98\8fH\9d\92L¤\8cR\9f\94P\99\98Y\9e\9eR\9c\9eNÂ¥\95D\9c\91E\9f\99G\9b\9eL\9d\95C\9a\90P\9d\99T\9e\9dW®\9cN¬\9aJ®\9fR¦\96X¢\95S\9e\9ccª\9edª£c¡\9fj\98\9bp\98\8dk \92n\9a\86h\8c\82g\89\82d\8a\81o\96\8aj\9a\8em\92\88e\8e\94d\7f\93_\80\99cy\90_|\9c]q\96hw\99hx\90hz\9ac\8b\9aO\87¤N\8dÂ¥K\99\9fM\95\9dC\92¦H\8f©G\94³J\8d«@\85®F\7f®C\83§M\81®UuÂ¥Wy¤Ux¤Ly¦Ou§V~¦Yq­St±Rs²T~­O|§Sz­N~¸M\87³V\86°a\86§]|\9eR\80£T\80¢[\8d\99V\8e\9eN\95\97V\90\90V\9a\8eZ\9c\91e\9c\94h\97\9dm\9f\9eg¢§\\94£]\85«b\82©V\80¢Wzª\~©]\88Â¥V\85¨V\87µG\90µD\8f®=\8f°F\86¨F\87\9dA\8d£B\85\9e>\89\93+\82\9a0\8a\9a+\84\90.\8f\90(\90\890¢\8e(¢\8f*Â¥\98+¢\9b&ª\8f+¨\89%¦\93+ \97/\9f\8b8\99\92<\9f\872\9e\896\90\94H\8d\8aQ\90\90M\8b\8bK\89\93V\94\91M\8e\8bO\96\93E\91\95I\96\9cM\8f\95C\8b\90O\89\8fX\91\8fY\88\92c\88\8c_\8a\95e\88\99n\93\90n\8f\95y\90\89w\8b\89y\85\94y\88\9cu\87 w\82§k}Â¥nq«erÂ¥bp©Y{«`y«ey§av¤ew\9c]p\93bt\99Xt\91Ov\90Vm\98_a\90]_\88h_\8caf\8eZi\85ac\82ke\90gk\96iq\91\i\95]m\98cp\91Wg\91Zo\92^s\94Qr\92Qf\9cTm\9dMl\92W9>B=CJK<K:HIKMARXQ\PN[[IXYKRR;MN<Pa<Tc7P_<QS4TU6Jb/^b>Yc6Yf0Y]7]gB^bGZd:a]9k_:j_:q]2y]>ri0\80fC\85gD\80gF\87dG\8aiJ\92_[\89\N\8e\`\8cd^yaezkZ{Zc{aXhZhxa`nXXhOSsTVoO]uSep]hrihu]l\84qi}mn\8b{j\8c{i\82}iy\83nw\82voz\81x\82\7fsz\89t\86\7fx\83}v\7f|y}~\80mt\7f~z\88\82k\7f\82r\8aql\82zZ\8a\80U\8d\88`\8a\86Y\94\8dS\8d\8cM\9b\8eX \9aH\9e\94G\9c\8eL¡\93O\9b\99S\98¡XÂ¥\97JÂ¥\9aN\9f\92M\9c\9eR\94\97M\97\95T\95\9dV®\9bU°\9cO®\94J°\9fY±\94K­\8eV®\95T¨£ZÂ¥\9bh© d\9b\95b\8d\94e\9d\94j\9b\85b\8d~d\8b\81c\8f\84]\9c\8ck\9b\80`\95\80k\95\84^\81\90W~\92a\80\88ds\87dv\8eb~\8fgy\93p\7f `\8b\9dP\84\99M\8e\97M\86\9cE\97¢B\8a­P\85°S\85®E\86£J~­G|¯Lp£I\7f¦SyÂ¥X}©W}¦_r\9e\w¦V\83°[x¦TlºPy§Zx«L\82¢Lz®JxµR\87®Z\81°]\8b±[y«[}©[\85£V\81 X\85\9bX\97\98Q\97\9cW\98\9c\\9a\93c\98\96j\9a\9bc\95\9de \9dU\97¢R\8d\9f[\8e¤N\84¨\~£U\89®]\82¦I\7fªU\84¯G\86²B\8c¦A\87¨=\83ªH\8c :\8b\9d9\8d\972\8c\96)\8c\97.\85\8a(\97\94+\9a\942\9a\8d*\95\87/£\95*±\93-­\95&¤\94&«\953©\93$ª\877¤\944 \8f1¢\8e0\8f\8bA\91\8eK\8b\8bG\8d\8fQ\88\86X\8c\8aR\86\95K\80\8b@\90\88E\94\90G\99\90B\91\83I\8b\86S\8e\8eT\8f\90\\8b\96c\81\90m\88\92k\8c\87g\8e\92k\88\90m\87\89p\85\8bn|\8er\80\9fq\81¦m\88\98mvÂ¥x}\99sl\9few c|®jx fz£pz\98j\81\9dUw\94Tx\94Qs\99Vw\91`v\8bba\8cQ]\86T]\8c]Y\83_[\83ia\7f^c\8eih\8cal\8fff\89Ym\9a[l\96`l\93Yn\8baw\8cMt\93Qg\97Ud\93ag\8fV@=T;AK=CF;?K;LCKPFUPD`RDTWCXUA[]CTZ;OT6IX?HZ0JM.NO-T_1XY5`Y/\Z=c`Gb^BZg=aoGogHsj>q`;\80`8\7fb<zgG|ZNwiL{fB\87kH\8fkT\8e_T\89^T\7fjR~l_w^c\81`YweXj[_iX]vWWwRNmVVrTdo\mihtojo\80cf\81hh\83ir\87vk\8ctp\85\80oz\81twwxxvys~\83gs|gx\85sn\86xt~yp\7fyry\80{v{}v\86xj\83we\84~e\89\8aU\81~Y\87\82a\8a\83W\89\89W\9b\95Q\9d\99R\98\9aM\91\94Q\9b\98L\99\9cT\98\9dU\93\99Y\96\99b \9bZ\96\91X\9c\94O\9c\8bW\9d\91W§\8aT²\8eU¸\92U·\9bT«¢N®\98R§\95S¡\98Z \94Z\9f\9e]\95\9ac\92\8ek\8f\94i\99\8bb \87f\9b|Z\9fzV\94\89`\9b\90i\98\89a\94\93d\90\8f^\87\84Sx\84Xv\90c~\93a\83\9af\80\9bi\83\9cW\82\9fP\8b£I\88\97N\87¡L\8d§E\84²U\8a¬T\8c«V\8a¤L\84\9eIr©En¡Go¨Ln¯^x¦akÂ¥eo£ax V~®\q±Ttµ]p¨Q|£Vx¦\z¬S\81¤\\80ª[\86¶X\82¶Qv°Xv¨Q{¤Q\85¡R\80¤[\88\9bR\84\9ec\84 b\8f\9d^\92\8df\97\90m\96\98d\94Â¥b\98 P\93ªT\93§W\88¦U{¤Y\7f£P\89«F\8c´N\83¹U\8eºP\87¯E\8b³C\8d¬>\89\9bB\86\95?\93\933\92\9b+\89\8f7\8e\8a4\92\8f0\9e\89*¡\815\98\848\9f\89*®\8c*¡\8e0\9e\8c.ª\822ª\83%«\8c$¦\8b4\9d\8d1\99\8b9\8d\95C\90\92H\83\87L\87\86V\93\85Y\92\8bJ\93\89=\83\90A\92\86B\90\89R\95~J\91\7fK\93{H\94\86I\89\8eP\89\90a\87\86m\8a\8ch\8c\8fn\8d\8cv\83\94v\82\8fkz\86s\80\86m\89\8as\82\9eq\81§z~\9eyz\99qs\98s{¡tt¦mw\9fo\82£m\82\97f\87\96\~\99_r\92Rt\8bWx\8ebr\8b]i\93Qi\8eP\\7fV\\84U[\84eZyce|[i\85_a\8fb`\8dbn\8abj\90[d\8b_k\93\n\92Xn\87Wp\87dg\88`g\88f5@K>GR=FS9HO>LCCLJVOEYG@RZ=MW=NOAPXAMNA=Z9HS6AJ:AQ4V]+[S0U\9`b<i[O^aHegEkYLt`GsdHn[A\7fYE~\P\84gN\84_G\88`M}c?\83lN\90gK\88kR\83fV\87fZxe_\85`_yZ[xd^lS]}Tf}R\wUZm[[{\fsfkzlh{nu\81nj\7frj\81ooyvzxwr\83~|\83~q\7f{\80{p~vo\85p}\7fos\8fht\84z\85\8cq|\89oz}z\85\84q\7f{szk{wjz\83Y~\83R\7f~U\8bzd\7f\88]\91\82U\8a\93P\8e\90M\9c\90M\8a\8eQ\8a\93X\93\8ec\98\9cb\99\90X\99\94a\9f\93]Â¥\8fW\9b\92X\9e\8eWÂ¥\93L±\92M·\92Tª\8fP®\9fO±\98P\9e\9dU¦\92d\94\9eZ\96\9f_\9d\97]\9e\9db\95\94q\8e\8b`\9b\94Z\9b\8bV¢yR\98\83Y\91\8fd\9f\86f\9b\87h\92\93^\91\91m\85\8fk\81~Z|\81g\84\93a\82\99c\83\9ah\83\92Ux£T\88\9cQ{\9cP\82¡I\86\9cW\89¨V\8eªS\8c Y\8c©M\81®Rm¨Tr¢Vo L{\9dW\80\9feu¡coÂ¥\r¬Yu¯dr¨Uv¬Wl­Tz¢Zx§Tq±Vw³Mo¶Nw´On·\|©\r±]s ^\85«Z\83¦N\86£M\84¢]\81\99X\8b\96f\90\98d\8c\9cc\8b\95d\8e\9d^\9c¤X\92«O\90«M\81 J}¡S\7fªV{©J{¶Lyº[t²H\81·;\80¸5\90¬5\88¢7\90\9a?\91\9b9\90\997\9b\8f7\8f\812\93\8e<\93\8a)£\874¢\81A\9a\8c9³\916ª\8d/\9c|3Â¥\88.Â¥w#­\81)§\88/\9e\8b:\91\8eC\8e\86H\88\8aD\91\8cR\92\89O\92\8eW\89\93U\94\87M\8c\93G\83\88L\86\82S\95|Q\8e{T\9cyQ\9d\8fI\97\8cS\91\91T\8b\93h\8f\8ea\92\94j\93\83q\8c\93r\8d\89m|\92s\87\85p\84\92r{\9dz{\9fy}\98|z\99up¡ol\95lp¢x\81\9ei\85\9ct{\94`\8a\92dv\99[y\92Wr\8bWj\89gq\8eZe\8bXd\8a^_\85\b\85ag\85e[\86]ft__\87ed|[i~ce\84\p\7f[b\7fZo\89ac\88Qp\91fm\93]k\88_j\8abH8JE<GJHG?GLEKGH@MNOPVMLQWCOW9K\8OP8IU0@W9EN4AK@@F>GI5IO;[S:\N@bZLb\NbVLhQSv]Py^TvbKtbNycS{XY\89^P\8c[G\85fH\85rG\84oI\8atD\88kJ\80sN{oYtb_}bhvgm{Zc{a^}WizZeyi^na`sfhpltxsqsty}\80v\80wpy{xzx\7fzl\80{g\7fzr{xvu{n~kx\81h~\87k\8b\8en\87\8cw|\8es\81\88o\87\88n\8c\81p\85up\83hq{e\80\84`\87wc\87y]\8e\7fV\87\86^\8d\8dT\8d\93M\8a\88P\91\8bO\8c\86Q\8a\91b\89\95Z\8e\8fV\98\97X\90\99_\93\99^§\95P§\99R¬\92M¬\96Eª\88JÂ¥\92L¬\93W¦\95X\9b\98b\93\9df\98\99`\9b\93c\9d\8fi\97\93h\98\9ae\96\95Y\96\93\\92\85Q\9e\85V\98\86b\9f\89h\98\92k\93\93l\86\8df\82\8bo\8d\88h\86\86f\7f\88f\87\84\}\93\\7f\94^}\95^|\96`y\90Px\92Nq\95Mx¡\\80ªW\83ªV\8d¦Z\86¨]~¯Sx§Q\82¤V~\9bY\7f\9dWv\9e[z¦Ut§S}«Uv³[i²\m¨[qÂ¥Ws©[n®Wh²SfºYi±QhÂ¥_h©\k­at¯[\80«VzÂ¥ax¨a\7f\9eS\86\9bR\82\9dP\8c\98S\84\95a\7f\96T\89\99T\85¡L\8e«N\8c­T\90ªK\95®H\89¤O\89 Ox©Vs­Tt­Qm¹Ju¶<\82¸9\85­4\86¯1\90£/\90\9b/\94\948\8d\89?\97\83<\99\811\99\832\9a\8e/\9c\8c9£\929¦\8b7ª\857¨{(¦{\1e y\1e\9e\87&¢\891\9e\843\97\87>\99\8d@\8c\86O\98\89M\92\90O\90\96M\8c\93R\84\88S\8c\8aH\88\8aG\87~D\96~S\95|Q\94\8a^\9e\86Z\97\80W\99\88T\97\90b\90\8ah\92\8dh\96\8am\8c\86r\8a\8fu\8b\82t\85\86l{\92t}\91{x\95}z yn\9b\7fq\9cst\94|w\8dz{\8dxz\99iy\94g\87\9b_y\8da|\8dXp\95Zi\8baq\86Vh\87Zg\82^[\83WY\80PdxVayaY|[_\80Z[x`c\7fil\84dq\7fZf|^b\7fde\82Zi\8c`n\8d`x\8flp\90j@<CH>EE@PDANHKRJLWRNTQJN[FMLQ>\V?VDCJL5DS7JR=CILNTACR;UOA[X6eSEZ^Ig[FXJWdUIm]GpdJqaO|_L\83YK\86cO\80]L\83gU\8dfV\8deK\8ahO~sZylS~sRmg`u_]zch\81Z[y^Z}U`yWl{ek\80i^rij|gpwqp\83tp\7fpm\83|q~\80p||qymv\7foxxp\80vp\80\85qz\82w|py}sy\90j\84\8dx|\80rz\87iq\83l\88\8cr\89\86k\8bzmzlv\88eozgw\83k\89rg|}c\8a\86c\8d\92\\88\91V\80\8aZ\8d\8dW\84\8cX\92\91b\93\93j\8a\8dX\8d\95X\97\96\ \9cU\9d\9c[¡\98S©\9bM°\8eO¨\98O©\92U´\99M§\91\\9f\8dd\9d\93Y\9d\9eV\9d\8ae\97\88[£\97_\95\96Y\94\96X\99\90V\92\88Z\91\7fQ¡\86a\91\98h\8d\93m\91\8cf\86\94o\87\8fn\85\8d`\91\8cd\8e\8eT\87\94]\8f\91b~\93_}\99\\87\92S\83\96]o\91K|\9cJq\9bR\81Â¥R\80£b\88¬W\82¦\\88¬[}\9eP|\9c\\88£_y\97]p§^t\9dcz¨Zs°]nµPt§_h©[g¢bk¨fq²\q®So¸Zq­Qn«Yp§cjªSr³b{«ct©kwª`\83\9d[\7f\9aM\84 L\83\8f[~\9a]\7f\96^\86\93W\87Â¥U\8f­P\8d¡O\8eªL\90§O\82 Q\8aÂ¥Qy«F\7f®Q}¯@~­Kz­Hz´@~¤1\83¦9\8f\9e6\94\9e9\96\8e+\97\8d8\98\93<\95\819\9b\851\92\840\9d\8e6 }3\99\85@ª},«\830£v)©l"\98z" \8c/\8f\83:\93yA\96\80C\9a\8aS\89\83Q\97\92E\95\97K\92\8dR\8c\85Y\90\83N\85\88M~\80J\8a\83Z\8asO\96\81]¢}b\95\87V\95\83^\90\82a\8b\83[\8e\7fh\9c\83^\9a\8dt\91\90x\8a\7fo\95|n\85\8dy|\83v\85\95}~\9a~r\9ert\8dxw\8f{w\86~}\88m{\92i\8d\92c\84\8fiy\93h~\8c^n\88[c\95`r\8f]c\83[\\83ZZ~`ZzTh\7f[f|Q]\80aX\80Zg}_g\80e^\82f\w]_xc`{\^\7fZfvdc\8alq\85bo\8bv=KN@KQ?=J9@TF<VMGOMIYMHVQLOWNMWG<\@<WB:IQ7CUGHJF?NEESFFS=QK=aSCcXJ]OIWLP_WJiVHeZRpfOxXR\84YL\7faP\85ZM\8aWQ\8cbS\91cZ\8dlW|bbzf[taWpi\xja\81``w^e~bb\81`ly\lue^}f_|jbvif{hu~mv|hryrj{vi\81yo\89\7fv\84v}\80x\81\80qv|k\83|p\86os\8ds\81\8bm\87\83t\80\84ru\90ir\8ed\80\8ah\80\88u\80vq\81mo\80wn|tsyl{zj\88|h\88\8b`\80\88`\7f\94S\85\95Y\82\91[\88\90\\8d\93h\8a\94d\90\90k\90\94g\92\98X\99\98U£\91V\9c\94S¦\95R¦\90K¬\98S±\98Q¬\8eT \89Z\9a\89T§\8bX¦\93\\9f\87T¢\89Q\9e\90U¢\95N\9d\96]\9d\99^\98\92V\91\87W\93\94W\94\96b\90\8fg\8c\91e\8c\8ef\94\8bc\97\95T\94\95U\88\96a\8b\97\\84\95\\8a\90Q\82\9cV\88\96T\7f\9fJv\97Nt\97Jx\9cQ\80¢S{©^x±X\84¬T\84¨T{\9eI\7f\9cK\80\9f^~ Zt\9fZo\99by fz®Wo¯Uv¤al¢bv¨eo¬jt«li¬caµah¶Qr®Tp²Yf§cl§[i¦go it\9fX}¡W~\97R\80\95W\80\96]\88\97X\84\9bU\7f\9d]\86\9bQ\8b¢T\83\99N\7f\9bS\8b\9fS\85§M\83°P\83©G\84®K|°=pÂ¥@r«C~¦=\82¡1\84\9f5\89¡6\84¢:\86\98.\97\973\97\92;\92\84:\99\81<\9c{A\95\828\93\85:\99\7f@ w2¢z1ªw& l!\9dr*\94}*\91s)\8cz5\97\7f8\97\84H\93\8dE\8a\8cK\92\88P\91\8bW\96\8dN\90\8aV\82|\\7fw[|tb\87y[\8btT\97u[\98w^\91\83V\8c}[\8c\7fX\93\80a\98\7f^\9d\89f\93\89o\8c\8ct\96\80s\94\86v\85~{{\8f}|\96~{\8doz\87py{y\80~}~|w\84\82u\8f\81x\8d\8dk|\92ls\92jv\89bm\91gn\8den\8bZg\8dTa\87Xa|[j\7fRdvX[vXesWdsVY|c]{abr^es_^t^[ric\7fm`{oq~ls\8bp@EJDJMDKP>9W:JRJIVIJUMANLLOWIQ\JLcEGKN5HS2OFCMTETIINJISOC\G7WX?aZIVUHaDRiKFnSQjSMn[R{cWpYSwdT\88[O\8d`P\8dZW\86_T\8ea]}rZ\80tawj]qg]zj]ol[|b[yrb\7f\_\7fat\82eazbe}hd|eguet}w{\80xt\8ath\8arf\84|o\80\82u\86r|\87u\81\82\81w|}\82~y\92\7f~\8dj~\93{y\91t|\92xt\86kl\99mo\8bes\8eks\80puvv\7frqy\7frym\81~x{\84o\83\8fez\8dc\82\8b[z\92Y~\93a\82\8e[\87\93c\88\8ek\8d\96q\95\94a\96\8cf\93\8d`£\96c¢\9b\®\92X­\91Y±\98b°\93Y¯\8eP¦\86X\9a\88I¦\82Y«\8dU©\90M«\88H«\88Oª\91G\9f\8eU¡\9f^\98\9cS\91\8bU\93\98V\9a\92Y\97\99a\95\92f\8d\88a\9b\91U\90\8bP\8f\91\\93\90]\85 T\88\91N\91\97V\88\8aP\8a\8eX|\93H\81\99Fu\97U\7f\9dSo§Uw R|¤Vy Ux\9fSx O{\9dUuÂ¥Xy bx«clÂ¥cpÂ¥hq¡htÂ¥Vw¤^r©fr©le§sk£j^¡[m­Xj¯^q©bg·\o¤Wr©dl¡hn¨cqªarª\~\9a_\82\97Z\82\96c~ S\82¦Zy\9aS\86¦I\81¢G\85\98N\84\96N\81\9bD\8fªC\8c£L}Â¥A}ª<w¤B~Â¥9x 4u\9c0\7f\9c-\84\952\86\984x\99<\80\954\87\994\94\956\96\927\98\858 \81>\9e\83=\92\86?\91\816¡\830¡~+\9bv$¡j(¤{'\94s%\90p.\87x2\8dvD\9c}E\98zG\89\82?\94\84P\92\84M\87\88V\88}_\82xR\85yT\87}T\81vc\8dl^\8eiP\99{Q\97tZ\94\82b\84qe\8e{e\8f\81Y\97\89e\8c\81d\95\84q\97xt\92wl\8bz|\8b\84~\82\89w~\8cu\85\80p~\81v\84|z\8a\81y\8b\83r\80\83q\89\89q\7f\83gk\8din\8fjh\87ts\95ii\8bhf\8b\d~[q~_hsWeuQa\7f\cr]es^gpWVxdYn\euqaujXnoUox`usivuu\82mCDV7KQBGX>=YI9ZDENAFKOAOIGDNBDZHGYEASIFOO;UM8MNBLE;ZHAaA8VI@^IM\QHfSFaKMdPKiMWkXMj\ToSNmYU~\W\82gU}i_\82aW|e`\82c_\82sf\80rf\86ogzn_ty[lu[mr`oqcnih|enwfcwdf\80_g\84hxykp}xv{|s\8a{l\8dpk\83vr\86|s\82\7fw\7fxz{\81yu\85\89{\82\8c\7fw\87ry\90zx\93r{\8ftv\90ol\92qk\8bok\82no\86jt\7fpl\83uty\7fx\80w\86x}\84z\80\8dw\7f\89g\81\86g\85\7fl\89\87a\86\85l\85\89i\8c\82q\8f\8bg\92\91^\93\90f\9a\97q\9f\9ck£\9c]¤\95_¡\9ad©\90`Â¥\8bX¡\87M\9e\88D\9e\8aJ¡\88H¬\84O¯\89D«\87E¯\86Eª\94J¢\99H¡\98P\99\9cH\96\98M\8c\93T\92\9aY\90\90V\93\8ad\8c\90U\92\98Q\98\9cK\95\95Q\93\90O\8f\99R\90\9bL\8e\91V\85\8eK\89\8eK\81\8dI\82\9bMy\98Tw Pt¢Yr\9dSp\97Pt\97X\82\99P~¤Vy§_o°\t°mr±nr°mkÂ¥po\9fjt¨do­bkÂ¥^g ad©kc¨`\Â¥`h¬gh±fn®cm¬cj©dm¨h|£jyÂ¥a\80ªlw«hu°e\80¤b}\9d_| [\80\9fP\80¤Kx\9fNw\99Fz\98G\85\9bL\81\9fA\89«G\83«={\9d:x¡9y¤<}\9a2\7f\9b/\80\997z\9b4y\9d=t\969s\8e4~\891|\957\81\928\88\8e8\99\8c<\99\8aC\95\84A\9b~<\9a\838\95\81:\9c\83/\97s5¡p)\99s$\99v.\98z;\91t@\96{C\98zE\93{I\8f\81C\94yC\8d\7fM\90\82Y\81\81\z\81_|}[\86x]\84r]\8awU\91mV\93oV\94v^\95w]\8atd\8e}]\92\7fa\8c~d\8b\7fj\94xu\97vr\93xx\8c}o\8d\85|\8b\84x\88\83}\85\86|\8a\80~\88\80|\8c\8cz\80\8er|\92|\83\8by{\8dqr\81mj\7fkk\8auj\84le\8blc\8bfl\80amtdlu[es^k|]i\80ek|[`\7f^`q``vgZkranuYmsgo|djymqng|o?BV6DWDIW?FYO>UHFRCAQD>UQ>DMB>PCDUKJ[KKLREWGFJCKLTFWJGTHNYAKRPF]^Qd]UaXMZY[bUZmc]hfRvdVyY]uWV\85bU\82Z\v\dv]eu_^wfn}hs}ngva_{gbuudyjmzqnvikycg~al}nrwgrzilurx}~xuxp~~i\7furztdw|n~\87s\84\83o\7f\8dt|\8c\8d\80{\97\80\81\8byq\9dt\81\93p\85\97nr\8enz\99`y\8bnu\89cq\88k{\86eo\81kqv{}os\83{y}yv\8azy~j\7f\8cd{\8f^y\81a}\82mw\86i\90\83c\8d\8bi\8f\95h\86\91o\9a\9as\99\9ds\9f\96n¡\87d¡\88c ~h¤\8aS®\89[¦\83S\98\83C¦\87Q´\89L£\82P±\8cF\9d\84L¨\89I\9d\92T\9a\8cX\99\97K\96\8aM\8f\91\\98\93a\85\95_\83\91Z\86\8bS\86\91L\87\8bR\91\90Y\92\97\\8f\95]\88\8fQ\8b\90X\85\93X\91\92B\84\8bR\80\92G|\8eCv\97It\96Hp ]x\9eRp\9e`t¤LxÂ¥Q\7f\9dRp©et£lt¯ht¬kp\9crv\9fcz±cp¬Xa®W`¬\]¦qa«`d\9ejb°ep¨ti¬ok£hpª`h¤lt¡ip\9fft¦cgÂ¥d{«k}§hs\98Zy\98O\82¤Z}\9cU\7f\97Uw\91P}\98F{\9cK\86ªE\85Â¥K\89ªB}¤K\81¡=x¤Fx\9cGy\95;\87\987\84¡0z\9c?{ ?r\862\87\810\83\847\84\86B\96\93@\9c\89>\97\93<\8c\8dF\97|=\98\893\9cx0 \81+§v$¨t\1c£q-\90q%\9eu/\92q;\9dy?\92{6\9bx<\8c{D\8b~;\8b\85C\84\82Oyr[\81w]\88rd\85rT\8dyS\8fnU\87rR\94qY\8e{a\8bzY\8c\7f]\94\83l\99vj\92~g\8e{n\89ro\8f|u\8est\90\85h\91|n\90\8b}\8e\7f\84\96z\82\88\82\80\8by|\87\86~\8f\8a}\8c\89{\87\88{\83~q}~l{yq{\86vi\82mf\8cio\8cok\8bih}[sx`dyghveqq`p{W_n^c\80W_xn[epZhpbsklo{c|\82syri\83p=MY<MR@RMLHNV>IQ>LE4VI;QQ=DY?H`GS^GP[FOWIKMLAJHCTHE]VRXUOXFIYKTY[NVe\\cXYZbb_]`h`ie]m]U\80ZV\84UV\86\T\82b_yhhqjjw\ekcbn^nuemtdhuj`vlermm{gu{nmqoprjvthpyqisjmvsn}x}wxxm\80rv{n|~ep}`t\89l{\8cw}\8f}q\81\8fv{\92xw\9a\82y \85{¡y\84\93sz\94b~\95cz\8fdr\7fay{fr\85c|\82k{ws|uz\83p{\7fvwytz|x\89\8fl}\90az\84f\81}`z\80i\8b\83n\8f\8ds\8e\8fq\87\97k\8b\93s\94\90l\9b\89o\9d\8ae |hÂ¥{a¢\7fV©zZ\9dxK \87I­\8dD¯\8fO£\92S§\8aW¤\8dM\9a\80H\9a\88P\9f\83X\8e\87S\8d\87T\87\92S\8c\93]\8f\94f\84\87]\8e\90\\89\96V\82\8bS\89\89X\88\88T\8e\87V\97\83V\94\8cd\89\8dT\8a\94J\7f\8bM|\89C|\88L}\92G~\9bGv\97Xs\9f_x\95Ws\96\{¢O~\9fUx\9e`k¡ek\9bij¢hg iq¦a~¨Ws®Th«]i§fa´g_¦rn§nv£un¦sx\9brr¡or§ga§ci\99Zh\96`o\9aff£fu\9dg\7fÂ¥_\81Â¥Ru\98N~\98Xy\93Yy\95T\81\8fPx\92Ax¢=\81¡C\87¨?\80©N\83ªL|\9cD\7f\9fH\80\91B\82\91H\82\95I\7f\9c8}\939w\98<\84\8dF\80\82?\88\835\92\84;\99\8b?\91\8e>\95\8a<\8d\8b;\92\885¢~9¨q5\9ep(\9fm$\9eo\e\9cp&\97l&\9en)\9dl8\94t7\90{4\8cu8\92y6\98q6\95zD\88sQ|oZ\84nX\8awb\90s[\86wY\83wa\87z^\94qS\92xW\97{f\8a\7fe\92}n\98wg\91tj\8e\81u\87sp\8drr\9avl\98\84j\97\8ek\92\8d}\9a\89\83\98\7f}\87~z\84sq\84zy\92\87x\8e\88~\81\88\80yz\7fzxq~\84x\83\84p}\85jq~mw\8fry\8egq\90dn\84_nxbjtehmXdpV^pY`~WiwYcnljlt`zpd\80wr}yo\81wv\87k<MdBPUBKURNWZIH[CJP>OK<VWBSXEQaCVUGRTL\aKPKTSOQHVRGdYTbONVSF`PQ]PT\`R[_`^e`lU\fgUqfXnfSza\\84W\\86^Xx^Z|[ey^a}Wpz[jxbqv`wvkqu]or]tubtu_v|`myey}pluczvij|vvwhvwwtrnpx\80oo\81ou\86`p\7fiu\87l{\89t}\87\88m\88\82z\81\8eu}\92\89\85\99x\82\9dz\83\90s\86\98c\82\93m\87\7fn\85\81`~yi{\84mu{u|\84q~s~sxx}o\88\83m\8c\82t\80\85t\84\91r}\83t\87\89dx\84m\8b\82n\8b\8e{\81\88h\89\8cp\84\95m\92\8eb\93\8bm\90\87p\9e}k©qf\9bx]­tR¡xK\9a\83Gª\83N¬\89O\9f\8fS¨\82V\99\80H\8e~H\95\81K\99zU\95}`\90\87e\8f\8b`\84\88i\82\8b^\8c\89R\81\84S\84\95c\8f\89X\8a\88U\8b\82W\83\83]\87\95[\95\8e\\95\92V\8a\9fL\87\8aH\88\82@x\92M\7f\90@|\8cUs\97Un\98Ov\8fYo\94Vt\92Mt\93Px\97To\91kb\9ane\9ake [x\9ee}«[q§Tiªdp®ja¸[h²fo§bw«mr­hn£fq rk\97pb\9bg^\8ffe\89n]\9cig\9b`g\9e`|\9dey\94]y\9aOt\9dQ{\8aZt\8aTy\96O\87\90Kz¢A\89\9a:\89\9fF\8b\9fE\7f\9fJy«G\81¦Q\84\91I\87\8e=\83\8e8y\98?v\99>m\8e?|\83B|\88B\83\84?\8a\838\94\804\8b\87A\8e\93=\89\880\9d~2\9cu1§~/¢z,£o"¦k\e\9co"©m. r5\97o0\92m5\98z-\9ay<\99v.\90~F\8e}L\8ayL~h_\82x\\82xX\83vW\91q]\8dvV\8fyf\90\84`\89zV\8bz\\92wa\91sg\98vs\95xf\8f\80r\8b\7ft\8flk\97yk\93\87n\9e\88v\95\8a\81\90~v\98x}\99~n\87xu\8f\81m\92\87q\89\7fv|~~\81\84}\8dxw\83zv\8e\80n\81vu\83\82n\83\88bx\8fet\7fgs\87bm}gvpnjqWry`iwQcvTgu]ithr|ae\85nkzo{\85q\80\88||\84p=EiDBhQIiRSXVUUYONPM\WHYSLR\BYcJX[Ja]Mh]S^\W\ONLTIKdJNkZLeXS^]RaUYg_Ueg\scNqYNvTJw\TucZp\en[m|XdnS^p[^pXly_lrWrw_mrbxj`yrSypWsqWp\80`s{ay\87bw\8ahw{ht{h{yprtt|mqtxrkurplspr}gl|pv||{~~t\89\83o\7f\86p\84\8f{\80\9d~\88 q\89Â¥m\8e\99i\81\8di\82\86p\7f\85l\88\81n\83\83mz~ut\81zm\82uq\82wsw\82{u\88\82p\8c\88o\87\8bz\8b\82z\84\83r\80}j\83\85g\81zg\83\80q|\85h\86\90p\87\97e\88\91i\87\81d\90\7fn\94}h\9bt]\9c|T¢sSÂ¥~L\9b\80Q\97\81P\9e\8bY£\8dR \8bI\93\86I\8f~M\8d\86O\94}Q\97\89Y\92\8be\89\90^\8d\84c\84\8c[\8a\8dW\92\8b^\88\86_\80\80V\89\84]\87\84[\89\90^\8a\99f\8d\9a`\87\9da\8f\98X\91\99L\83\8bMy\8aP|\91G{\96Ow\96Qv\9dSr\93Vl\91Lt\8fQu\90Ml\8aWp\96`e\96jk\9bhe£^d¡ct¬Yo¨Xo¯dmµhj«^t®eu°[|±bs¨lu«ao¢cs\93be\93n_\8bt]\8bnj\99ei\98^g\96ei\95\r\9day\97Tx\94Y|\8fZ{\97P~\96O\85\96N\8b\91N\86\96K\87\9eB\83\9bB\81¡D\81¦Hx¢L\80\92?z\8d:x\8e:v\8c<y\87;t\852|\86/\82\8e9~\91>\84\8c?\88\8bB\8b\85;\99\8b<\95\8a5\93\8a/¡|4¢y5«{.¯\7f)ªs\1f§k'«s4¤u/\9dg5\96i-\96u/\98u9\9d\816\8eyJ\8a}P\8dzO\86qW\8erZ\85t]\91ma\8cn\\85{[\86\7f^\87z_\87}d\82{h\8cv`\8d\80c\93\81p\8cuc\8eqg\8ctn\8bvm\8exp\94\7f{\8fyx\99\82|£\81\82\9bv}\92wt\94wm\91wj\87\82m\88}n\83}t\81\80y\8f\7fs\89\81r\8azs\90\83t\86{q\83\8bhz\8e\\81\8cY~}fzth}xgv~iov]k~^p{\q\81]r}Zz\88gr\8acv\81l\7f\81s\82\8es\84\8dz:EqMDlGQaWVV`VUZJ[[O`PQXMD_YM_SQ[cWc^NY]UU]QX\S\VRXb\P[X]g\XcfUeYTc_SfmdvicifS{\Y\84\Nti`pelzf\\89\`\80YfmV\uVdl[qkbun\}o^|rX{kUpv]s|cq\84aoub|~c}\80pk~pj|mrskktqompmjopvu|k\80zh\7fvv\81|yx\80rz{u\83\88p\90\89q\84\9cp\8a\9e~\8c\9f{\8f\94o\84\95m\93\8dj\88\91m\82\7fdy\81ixwtr~st\88yi\80}hwvpq\85wv\91{x\87\81|\8e\92v\8b\8ap\80{~v\8bi\82\89r}\84h~\7fp\80\8dr\80\84s\87\8bv|\82k\84\85q\93~o\8ath\96zf\95s[\98u[\95y\\96\83V\91\81\\98\7fc\89\83Y\93\81E\93~D\8cuO\84|Q\8a\85M\81\81c\8b\8bk\82}Y\92\81a\84\8f]\8d\8d]\80\8c`\88\89]\90\84^\8d\86P\86\85a\82\86V\8e\8eV\96\93b\8d\8eQ\8e\8dV\90\89O\87\85Hx\8eCy\98@{\99Ev\9dL{\90Lz\91Lx\87O\80\8dNw\8cOu\92Q_\93dh\9d^d\9ajf¡Yx©Wr°[{«b~©_u±Zo£bs°R}Â¥\n¤\{\9ddp¡m{\9chk\9bkm\93lh\8clg\86bn\8fhf\97bb\92Sm\89Os\86Uv\93Ip\8cJ\7f\8e\t\96U\7f\8eP\85\8cN\8c\90R\8f\8fC\8e\9cM\88\96K\83 @u\9dE\7f\94N~\8dJx\839|\88Aw\8fBu\85:}{/}\87=\8a\82=\8b\85@\90\86J\85~?\8c\828\91{C\93y2\9fv8¤j0 o.®p7ªl Â´w\1cÂ¥d\1e®g&­`(\9fl3\93g4\9ft9\9bt1\9a\857\9bzJ\90tM\8fyR\94nN\8bnV\81zW\89~`\83pS\8du]\8b{W\96\80R\93\82\\8bud\95yX\89ri\90~c\85xd\83on\8exg\8bml\94so\9f\88{\94\86s\8d\8cq\9az{¢{o\92tw¤tj\97tv\8bqp\81ss\83sp\82ux\81qq\83rt\90\82l\86|m\8cul~\82_u\90g}\90c|\87m|\7fg\83|govirwal\85jx\8aanzfuzdu\8b`s\8b^{}b}\8bm|\87r\8e\86\7f<QaGG^VGf[W_dMV\K]WT_PWbZRaRRa[[_]S\\STPJ]XHaZObZRT[`Va`T[hcnoYohXqvTsv]vkfmkczsf\81kWtk[vcfzeb\89^cx^^w[gmZpj\soW\7fvU|qR~iZ}mW}qex{ewv[osbmupumuxtumrslxpjkzqlrlhwtk\86xr\8bsh\89wp~|w\7f~y\84\8cy\81\8dz\84\8do\8f\98m\92\90|\85\99p\88\9fs\8b\96p\8f\8cs\8e\8bs\85~h{|gz}tx~w~|mv\81vxx|jl}hu\8as}\8b\85t\8f\8cr\7f\83o{\83x~\85pv\84w}}ow\81k\80\82r\89\88u\81\81w~\7fs\82|i\86xh\8ezh\97}d\92\85c\9c}]\8e\7fc\90\82_\93\82W\84y^\8arT\85tK\87jUypRvuVx|P~\84Uy\89c}\81_\85~Z\84\85b\7f\8cb\88\8e^\89\83U\92\8cL\8e\88R\8d\83[\7f\8a^\8d\91b\8e\95U\89\93Z\8f\88X\8f\8aR\88\84J\7f\8bJy\90Bs\93C}\9f@\84\8d?y\8bN}\8aM}\86Ir\86Lm\91R^\8bT`\95]k\9dgv£c{¬b\7f°Ry¦R{¬az¦^t¬[q­^z«Wx\9d[z\96fy\9f`v\9d^r\9bmt\9ckj\94pp\90gl\9cdl\96bj\88Xm\84Rk\8eVu\89Ky\91Wp\93S\82\90U\82\82T\8b\83V\86\8dS\82\9cG\88\9dI|\9b=t\9c;\80\9a=~\89Fu\88As\88Hw\7fA}\817\7fy/\80z4\88\86C\8f\80E\87tG\8brE\91qD\93\81A\9bp<\93k?\92d<\9ai-¢_/¤f.²h#±j#±j\1e±a\1cÂ¥\(¡b-\97c/\98n3\96rC\96xD\98\7fH\8dy@\92xL\95lL\90pI\8b\80O\83zO\88xY\90vM\97nQ\9dwS\91}V\8etR\95m_\96t\\85yf\8fqc\89yl\96wv\92qq\94|w\9c\86q\93\8bq\92\8bt\8f\84p\97|r\96}t¤\7fu\97s\7f\90py\8ezr\8csm\80ot\83sj\84rt\8c}o\8bxb\81}\\86\91g\81\93dy\8ef|\80f~xb\82\7f[~\86`q\84gq\8bn~\87mw\86ur\80lr}t{\83j}\86pw\85f{\8bv\8e\86zJEnJQZOR_]YgPY_SOeY^eU]i_[q[YqPSmZUg^]kNQiYOgSQkRbfQd_cekZicnhgop^xy]|nYwmcyoe{j[wk^\82idxjg\82_`\8a[r\84Wnv_pqYypetgWymY\7fqU\84j[yy\v{`\86tgrtbro_m~mzuxgwsrwsps\82pw{cfrfg\7for\8aoq\8c{r\81ym{xn\88{t{\8d|\89\93t\89\93o\88\9cs\86\9dr\8b\97y\82\95y\7f\87p\84\8fu\85\84e\89zj\86}h}{sqvnovryy|qy\87qo}l|\7fqw\83\87x\93\82{\84\84\80{\8dr\84\8ew\81\82uw\85{x\8c~\84\8fo\81\86sz\8bsvzpy\86n}wq\89\81`\90\80d\95~^ \7fX\89wg\83v_\8a~^\83tP}uZ\84nO{oSyk]|~`\80\83S{zV{w]v|U~\80\w\87\\81\83ex\8cU\82\7f`\85\90_\8a\89]}\8bU\87\97W\88\94R\88\94N\85\8aZ\93\90I\8a\91R\80\87I\83\89K\85\98K\85\9aI\87 D\85\8fFq\86J\81\8eN\83\87>\83\91Mt\8bMk\86Oj\95Te\97Qy\9cVu«Z\82¬Q\83\9d]}¦Zz¢ay¢Zn£\u\9c\v\9agy\8fap\95ct¢Z{\9af{\9fov\97iq\8fbp\96\v\92gx\94aw\8bZw\8a^p\8cMu\8dIq\84Rp\81St\83V\7f\83[z\8dT\85\97Jz\98D|\9c;q\9d2n\906u\83>u\81Ex\85O~\84I\82\838\89\844\81x7\8f{B\8epI\94oF\8fwG\87jJ\8bw>\8c{>\96r6\99l9¦o(\9fl4®e6­r/±a$¸d\1e½g\1d²m\1e¨Y$¦[4\96],¢iA\97{B\92xD\92wF\91sB\95pG\9bwS\90}M\90yT\86\80L\94~J\99\81R\8auM\8euT\8diV\8ekX\88s^\8cl_\87ua\96tf\89}j\95xk\90\80u\9b\86|\8e\7fp\99\89q\9f\84p\9d\88q\9d~m£sx\98\82o¢zt\96nl\99tg\8ayf\87\7fe\8axj\88\80f\8ezj\93\85h\80\8a\\85\8ad\89\8e`\8cz^|\86b\89|c\81\82jw\8cc}\86e\81\8dfv\8bjs\8bpu\86mv\89r\81\87l~\8fa\80\89j\8d\81zYH`XJgSVpWUjQ`bV[k_il^fuYpoZis_gvS[lRcbY]iT^rUZiXWqVen^rn`neotgpxaoz_~q`}gYzcV}hU}fa}d^\86_b\83Xf\83^s~SvzXqtasob|ubzq]zsVxo\{rY\82we\82lZ{l`yy`{zio{mj}wmsznv\82mq\89iq\80iz\8cir\86rz\88up\86ur\87\82t\82\83t\81\90~\83\8c|\84\88r\87\95u\8f\92w\85\9c}}\89y}\86~z~s\87\85r\84\8aj\84\80`\84\80gu\7fpjyinpysv\80rq{kz\82ts\8fyw\8f\88|\8e\88{\84\8dv\84\82~}\88~\83\8a\87y\8a\80p\8e\85x\89x{\8bxv}z\81z~z\82p\82zk~\82^\91|f\93x^\8cx^\85ka\86ia\7fsS\83wWxpQttPvs]\81r^zx^}vSsuWxo_vt]wzh{\88as\81_y\87[\82\90X\81\8dW\81\88J\89\94L\8c\8dY\84\8dT\8b\89I\88\8eF\83\8eD\86\8d?\8e\97:\87\91F\8c\91<\84\96?}\89Mz\8dI\7f\89C\81\8dA\86\8eP}\88Ot\83Mf\8bNl\8fMr\98Zq\9fZv¡Yy\9dVy\9acs\9bhp§[u\99W}\94c\80\8f[x\93az\9aZ{\95d~\98_s\96il\93at\92^}\8a`z\8bgz\95k|\8dis\82_{\80Wu\7fT\7f\84Pw|Ms\82Z|\8dRw\95Nr\9cIy\98Ko\8dJu\939s\85Au\85<svFwxE\87\84L\8a\80C\8b\80B\91\7f;\8ds:\90oA\85mD\89lG\8dtJ\8emF\87jF\90r5¡n/¤h.¢d1§q,¬o"´h Â¸e\1a¸l$±b#ªa%¦W\1f\9c\*\9ak=\9al?\99q:\8f|B\97\7fL\94{D¡tB\9cvO\9a{T\95\83N\99\89R\91\84K\98rQ\8fq[\9arV\94f^\8bhf\8coi\97lb\97th\97}p\90\81n\8c\87p\8e\88}\96\84{\9f\82|\98\80}\99\86r£\88~§x{¢xn§\7fg\99~i\9bwh\9azf\98|g\8cuf\8a\7f\\88\82h\94\86b\8d\8e]\8b\84d\8b\7fm\8b\80d\82\83_\86\81]\8e\87d\89\8bn\8a\88tz\8cmx\84_z\88bz\82b\7f\81j\84\87b\8b\8fc\8f\88f\91\89pZKrV[hW_j`_v`flXejamrcd}Xp\7fYlwXWx]_i]XiTe`S_eU]l_^raoi^urgmdowbxxhzx_utoxpb\7fbW\83e^~uo\8ano\8bei\8cWf~Zq}ZqqSyoT\7fjT}t[\80ya\82nh|r^pof}wb\87k]{ij}zezrruvqpt}v\7f\84gp\85w~\8cer\88jp\88mo\89vm\91nj\94~o\8f}u\8d{k\8c\8dw\87\8am\7f\89~\86\8ct\7f\95p\8f\91t\86\8au\86\91{\86\89j\83\85u\8d}k\81\89s\85\81fozht\82sozuwryuz\81zy\8buv\90\81y\93\85~\8d\8d\80~\91xz\8a\81{}\7fx\88\82u\8c~q\83\80\81|po~zv}mx~p\80\85ruyo{uX\86w[\89i[\8fyX\86m]vkZvzR~qP}xTpwRvx\t{Y~\81]t}a|zUsqPmnYp\81Yt\7fZt\8f`\80\8f]{\91T\89\83Q\85\91P\80\8aE\82\8bU|\8b[z\90H\7f\81N\85\8fF\83~G\82\85<\91\93:\8b\95:z\888\82\87Ev\8fH\7f\87Cz\8eG\80\92E\7f\8cHt\84Hk\87Tm\8aXr\98Nu\90\p\8f_v¡c|¡Zu¡Sr¢]z\9eYx¤]\82¡]v\97Uw\9c\\80\90`\84\89`v\92gu\8bhu\8abt\8cgr\91a\82\91b\83\85n\83{_\83vd\83x]~\83b\80\8bWs\8a]\7f\93O|\91Ty\97Lo\90Gu\98Dt\959v\89D~y9q}IzuF\85wI\8eyP\82\85>\92\82K\94v:\95x:\94vA\88oJ\85kE\8fyB\97v;\9bf6\9em*¢h- k+£v,Â¥f&·g*°n"µi\1f²h#Â¥`*\9fd%¬\+¢\;\9dg<\9at:\8dr;\8eqI\90oD\91tA\9f}F\9a\83F\91\87I\8bzI\8axK\98sY\91pW\98gg\9es`\93tq\93wv\8brt\8bnf\9b\7fl\9fwi\9b\83z\9c{q\9e|u¢\83|¢\81m¢\87u¢\85o¢{~²~s°tl£|j\9azh\99\82p\9c\7fe\9azj\8f\82]\93x[\9e|`\93\7f^\94\8c^\88\81j\89uh\85\81m\90~]\92\81h\92\88i\87\86l\8b\84k\86\86n\87\8cf\80|j\80\89l\8d\8c`\8c\8bk\96\82h\8b\8dwTV~Q]wQ^uZfzekwafthd|_n\84fcwdfoeUv^TtU^kVacQjdOhgbhrgmmloq_ske|`n|fjsqsknremtii\82rs\83xu~hi\85dl\87_i\87Yn\80V|yX|pSznSzt`~xg\7frhpwcovdvz[\81n]\84pk{up\7fvqqz|jv\80p~\84my\88r\84\8en}\8flk\93gj\85ru\91lr\91uu\8b}j\8e\81s\88\89o\82\88s\81\8ex|\8cj\85\8di\8d\8bq\90\8cw\86\8al\88\8bi\85\82n\82\7fk\85\87p\83\80oz\7fvp\7f~vyuuuwywz|\83\85v\87\83\7f\7f\92\81}\87~\83w\84\8bpx\84vx\80x\87|y\85\7f}}xx\80uv\82ow\8aor\8fzz\82}|ukxp`um\\82kd}le\82~Zs|NqoOvoFs}M~nI|pPzsZr~Vrw]vmWwpRnyXw\83Qy\82Pw\8cW\80\89W\83\83T\80\87Lr\89Eu\8cJq\90Mm\92Rx\8aPv\81Rz|R\86\80K\85\92E\8b\939y\98<x\8b={\92>y\8aA\81\93Dx\8cGs\86Fx\91Cm\89Br\8cKm\8dKr\96Px\89Uy\8a[w\9cdt\9f^u¡[y\9bT}¢St¢Ov\95R{\99Sy\8d[\80\8ba\81\94c\83\90o~\8cg\82\92p{\8dft\89j}\90`\81\87a\88}h~nc\87|i\84\85b}\87^q\87Y}\8fN\80\90Rx\88Sr\8aPz\92Q|\8dC~\7fE\81u?{x>y\81Hy~T\85\83T\82\81S\82\84I\8d\83?\89r@\84w?\8d{J\93rI\8ezB\98y@\99k:\94x7\94w&\9dl*¨l\1e¢s+¨i*¬e#¯`!®^#¯_1¤^9ªj2\9fg8¢`A\97d<\9coA\92vI\99oF\94|?\97~H\98\82R\91\86M\94\7fR\90tZ\91p\\9ar]\9bkh\9dni\9dtv\91mt\8fli\8eso\97qh\9dyq\9cuv\9cxr\97~|¢\7fx¦\83|\9d\8bp©yq«xoÂ¥qf­ue£pi¨qq¡tn\9a\82r\9d\84f¡xb£rd\9bzf¡\86b\9c\84[\93\85_\88{i\91tc\8cqf\8b|h\8e\85e\92\81c\90\88o\8d{p\85~l~zl\84\81c\91\82p\92\80n\88|q\8c\88rQI\81Y[\7f[a}Zc\89Zl~Zs\80`ez`d\81^l\7f\coZ^yi[nbfifcsQdhLkfSer_htkrvfylcwml|tqxlxko\80xf|xg\7fss\84\80}\87m|\81qp\81cu|aysRuxU\84qT\80nZxqV\7fp[|}ZtoglsXt\80a{wh\86pw\7ftm~lsttrry~tm~jj\8euu\92t|\8fwt\86kx\83~g\88tj\8fwq\92\7fi\89{g\87\83iy~d{\85t\84\8ar\8f\8bk\8a\84d\8b\81m\88\8dq\8d\80j\8b\87m\8f\85c\88}q\81{u|}\7ft\82\7f\80w\85w\80~\83}\81r\85\7f{\84\8b}\82\8d\85\81\80{\85\81}\85z}\8foz\8f{p\90y~\88ow\83zwyoxst\88w|x\83w\83~ttm~v^|oc\88n^tsZtpX}~]ryLrrRwwHmvJ~mMutVj}UopUy|]wkYhxYz~Tt\80Wv\80Ow\7fIz\82Jz~Tv}Dp\8aDo\84Ro\91\l\89Lt\8bG}\88Ez{F\8b\80<\84\92@\87\94A\82\8f7r\8cCx\8b@w\88Nw\97Fp\87Pk\93Is\8dIr\8eQv\91Ps\91Pm\90Sq\83\j\8e`l\8eUq\9dPv\9fU|\9eJu¢O\82\94J\88\95O\7f\8a`~\88c{\8fe\8b\9bi|\98r\84\8diz\8f_q\85gy\88[x\83i|pf\8api\8cvc\86\83l~\83Xt\86Sz\8f`\82\83\|\90Yq\8eTv\8cY\84\8fP\83\82G\86w=\88w@\85\7fH\81yL\83\82L{\85U~\90O\8byP\8dyN\84vJ\90\84T\8bwO\9c\7fD\9fs=\92n-\9fz/\9ao*\97j,ªt(\9fi-¬f'¦k.¡j)°]1«c9ªn:°l6\9f^;£[H\9bjE\97o;\99eK\93tK\93nU¡zG \7fH¢\7fN\9d\82L\8esM\9br[\91pe\94wo\95mg\98mr\9aqq\9esj\99{w\9but\95vo£v\7f\9f}z§\86\83 \7f\81\9e\8br¢\82yª\83p¤}w°tc¦\80m¨qj§mq¡yk¡\8czª}q |k§wc¦\80k\9e\82f\95\82g\94ye\8a|i\8cwh\8bre\96yf\8f\81_\8f\89k\8e\88k\91xg\85}r\8e\80s\8c~n\90wm\8c\85h\9a\85x\8a\7fo\X}eO\84ja\87jh\86lg~do\84ao\80\g\83]]\82[Z}eaxdbsljwheqbmhXigZugZptfk|ksrtwuu~qrxu{ysy\7fn\88zl\88\83s\83{y~x~tu\7f\80cwzawuV}pS\84nS\89zX\84x\{w_ux[poaup[v}d}|duws~ss\7fkltcpgkzkk\86qj\8bpv\83p}\8ax~\81|w\85xx\8epj\92jd\97va\8c|]\8c{f\80\84^~\86b\8b\81b\8f~j\94\87d\8e\86h\93\82l\95\82h\8b\8am\89\83c\88~k{\7fnx||x\81\82\83\81\8a\85\83\82{\8c}\85\83|\80\84y\7f}\87\89\86|\85\8dzv\90vy\8fsv\8dto\90oq\92wq\88x|\85vq}yt\86uy{\7fzy\84{v\81qk\87s\|mYnl^mq_wvasxUl|TsyHpqOupHojKsrVyy^oy\ezcio]sq^xtPxvRs}Gy{Mw{Pr\84Vg\80J^\89Wf\8aUo\93Yk\8cLn\86D\7f~I\8c\87M\87\88B\82\838}\8d>y\8dCz\95Iu\97Rn\94Mf\88Nl\8cSo\88Mj\84Ot\80Mu|Iw~Pm\84Pb\8fWh\89Sp\8eKs\95Tt¢Yt\9eLv\99S\84\95T}\90b~\91b\8b\96q\87\99n\88\96c~\8dg}\82`s\80]ruX\7fwa\8axf\88n]\84kh\82sf\80xj\84\8a\}\8d^w\87_u\82]|\8dd\80\86e\85\86\\8b}S\8atE\8bnN\89wS\85\81N}\82Tz\8bJ\86\8aM\8f\82S\87\81O\8a}V\94\84O\95\82S\9bzE p6\96r0\9du)\96t0\91o4\9ck)Â¥r%¦p"¨l$\9ep0\9en.¨h0£fB¯mB§lB£aE\9ea@\9d_A\9fbB\9biP\9coZ\9cmT\9boM¢zDÂ¥\82C\9cxQ\91w^\96|i\9btl\8fwr\98pn\9dst\99\7fj\9d~n\94}s\9c~}\95\89\82\9a\88\81\98\8f\8bÂ¥\8a\83¢\8ey¡\84}£\8fy§\89m¢\83n§{g¨\7fgÂ¥xo¨\87n¨\84v¤\87m¦\80n¡\81m«\83a¢\82k\9fzg\92wk\96n`\91rX\9bq_¤v[\9b\7fg\9e~l\97}j\9c\84w\90~r\8dwm\8dsl\8b\7fs\93{r\90\84v\97\83v^T}kS\85qU}qbz^a\8b[j\84dp\86hk\86ae\85[\}cathrvohnfmkbnoghq]qkipwmvxjz}fyyry\80y|\83xv\80y\81}~\84}z~z}|w\7fy\81to\83xe\82yd\84{c\85{\\82v\\84{c\87}ayx[xpZmxkvya{\81b}\81oyznx~krlpqwqnm\80nv\81ss\80wy\81x{\94nv\8et{\8dws\95ei\8cgg\86to\91xo\84zf\87\80e\8b\83j\83v_\93\89^\88~c\89\81l\91\8cf\83\8an\81\91i\88\83c\90yb\84yo{\86t\7f|x\83\89}~\8a\81y\8b\88\82|u\87\86{\7f\8e{\83\8f\86z\89}p\90r{\8bpy\81ur\8dvu\88m~\88w}ztt\80}q\81pi\84|k\81zro\82dg~ijtoWgq_fpPp|WxyNn\84Nq~LhyOihDooKukVjoXou\jn[j{Tq{IytFj|RnuLyvI|{Pr~EfuQ]\83QZ\87Kf\84Hl~To\85N\89\80Ay\82G\80\88My\86Hp\8dEx\96Ip\89Lx\8fQm\92Um\93Om\93Xb~Iq\7fHn\86RrtHs\81Ro\84Qh\84Pv\8eWo\91To\98My\9fKr\91Oz\91X\90\87Z\81\8db\8a\94g\8e\9ed\89\92h\80\9cm\88\92g\85\86d|v[\81\83b\85te\8dti\83{f\86miws`}\83V\83\84Q\84\84]x\82j\7f~fy\82\\7f\88[\82\84Z\84\81L\87tD\89}R\85s\{{M|yP\7f\86N\86\89K\86\88O\91\82G\86~R\88\83Q\94}H \81F\99oA\91y;\8fl-\9fu*\97t&\9ft&©h&±s)¤y%¢z'£v.«a6¡m4°aH¦m>\9cb<\9eeB\95h9£nJ£kS\9alO\9crP\9btD\9etK\9c\7fL\96~P\94~[\97xi\95\80f\8cpk\8c|f\9erx\90\7fi\91~o\95\81oÂ¥\81u\9f\83\84\94\8b\87¤\87\86­\88\90¢\86\8b«~\82£\82t£\8cs«\87n£rf¡\81j\99vi¢\82o¯|g©|p¬\83`¤\87`Â¥\8a` uk§tp\9f{i¡h\\96ih¨s[©{cÂ¥wn¢xq\8fzv\90wg\8c\87m\8e\80r\93tp\93\83h\98\85x\8e}w\93zvm`\83l^\8aj^\8dgY\7f`f\83cl\83bk~eh\88f_\8ece\82ee|qt{jl{mrkaxgdlpantkwx^xz`\7f|a\88\7fl\84\87h\81\89pu}|~\87~\84\85u}\83w\86{x\85\82qy\7fkk\86td\83{b~to\8ark\88ub~ld~s\z}Zrvft\7fl\82xi\80|r\83yivvyszyr{yykuzos}zzp}\7fk\84\90js\8ckn\91in\94pj\8dfm\91qm\90{u\88zk\87xw\8a|q\86zj\8e\87a\8a\85f\8d\90^\85\8dm\82\98s\7f\92q\85\84i\89\80i\80{kq~j\81\82j\81\7fr\84{\81y{}}\82\7f\7f\82\7f\86\8d|\85\8awz\8dxx\80\81\7f{z~}{s\82ps\7fno\83pu~|n}{g{qexkmzwnsthkyidqhefsXe|QpuVu}Uv\83Nl\82JfySkmKkpKnp[ryVt{\rwNtvJo\80Gh{Jj|OtnM}xFxtBkvNbwKhwN_\86Ji\7fMiqWz{I\82w>t\81<uyGo\7fFo\92Es\8d?i\83Al\90Bl\95Qd\95Uh\8bTn\8dVk}M{\85S}{W\80zMqyBj\87Rt\85Tz\8bPs\93Nu\97R|\95]\82\88T\8c\88T\86\8eT\84\92_\88\98h\8e\9bp\8d\98n\81\8bl\80\88q\88|i|{c\7fze\8e\80a\8dwj\81yh{r[y~\\81\85Wy|cv\81e\7f\82e~\85`y\87]\83\81R~}K\81kH~zV\88\7fT\86\87Nu\7fJy|F\85{L\8c\82S\96\82J\90\85@\88wD\93zF¢vH¡oF\95y7\9b~;\96s4\9cs+¤p(­i+³p2­l+¤u+\9fx/¡j:¬\B®_D¯`C¤gA\9eb>\98h?\94fH\9feD\98q>\9csI\9etI¦pG\9bzN\9azR\9cwb\96\7fd\98\80Z\93y`\90re\93ur\90\7fv\96\86m\9f\84p\9f\80v\98x}\98|~¤\8c\8b§\8c\8e¬\86\8f¦\88\84©}\80\9e}w¢\83z£ztÂ¥\87{\9a\85p¨ym§~b \80j¨\82a«\84[©\81dª|n\9dsj x]£s[¤wY¤id¬wp¨tmÂ¥lo\98ls\93mq\93\7fg\99~q\92\80p\90\88u\98\83t\95v~\98x|cS}g`~sc\7fjV\8bmZ\8ckc~bd\84lp\84ld\82imwlo\81nm\81vrss\82vd}piqspxr`\89~d\7f\85_\87\8c[\81\80g\83\92j\8b\82m{\88q}\80n\91\8bm\89\86q~\7f|\7fyrs\81}n}|f}so\83wn\89ug\81uo\83lh\84uj\85tb\84k_vyb|ui}xlzyftvm}tw}qlvfyyyy{sux|\8ah\82\8dfw\8buv\92sm\87mo\92rl\89lo\96ym\94\81s\91|p\92zw\95\80c\90\84\\8f\89c\8e\8eb\89\8bh\83\91g\88\95u\83\8dk\8d{n\80\83cryo}w_~}i\7fwwt\80~wz\81~\81}{\85\82{\88\82\83\8c~t|\81{}~w\80vr\86ro\86oo{vx~we\81vp\7fgrtqephdimkgotfrvjixYd\7fXr\7fVq\81]e\86Ll\84Op\81RnvDlmKqv]uoSvyYxxOpyPq|VdqGpsKnkSo{Srv=ouA`rFg\81FgwWetLhiLloS|~A~~;q\80Iu\8bCo\8cAo\86Cw\90Cv\86Cd\94Ek\8cIr\88Xp\84Mk\82Ru{Qt\88Tz\86Pv\84J\80~Mv~O\7f\83Sy\8fS\88\90V\81\91\\8d\84T\8b\8dS\8c\90^\92\90Y\91\8e_\94\96b\92\86g\86\80c\90\81f\85qe\91{j\81ss\80{b\8f{n\88pdxukszWx~_u\83d{{d~}ezzb\84t^\85v\\87xUzrM\88oJxwM\85\81V~rM\81tK\89xS\8fxE\94sM\8dp@\8emD\96lH\9dsC\9c}K\9cu@\9ewA¢t1¢x5±m(¶s-·i:¯g1§u4§q4§j:¢`?­hI§gF¤mB jC\9efB\9boA\9ffE\94qM¢tN\9b|F¨~P¢wU¡|W\93xY\94\80c\95\80[\95\82]\90\86o\96\80w\91\81k\8d\84r\99\90y\92\83s\8fzv\96\84s\98~\89¤\82\81\9f\7f\82\9d\80\81Â¥\86\83£ztª|}¦{v \8cn\98\83q\9a~c \83[ª\89Y¦\83i¤}i©\89c¯tp¤ro®\80^²\80]®}]§ij\9dni¡kk¤jn£nq\95}m\9f\83h\9e\82q\9fwh \87q\97}w\95\82\81\96z\87lS\83mZ\80oZ~oZ\85kV\83m^\89uj\88ri\82um\82yjzym\80xrzn}|o\80ul\84rr\83{n~|_\89}Y\83}a\8a\8cj\8d\90b\90\94d\8b\8ei\85\89b\85\81l\8f\81o\88~t\85\81q\82\7ftswvxywn}\82v\81|x~tw\84np\89lo\88mg\84nd\8aph\83jj\83l_|wc\85sd\7f|dysf}sh}psxmqo{xtsyh|\86l\83\89r\7f\8dv\80\84mx\89qq\93tm\93\80p\8f\82k\96\80l\96xl\96\80h\93\83c\8f\89_\95\88^\91\91l\8d\8bl\86\87r\81\88n\83\86g\81~h|\7fhs\88bt\7ffw\85ps~~r}\83v\84\88\7f\85\85z\93\84x\8cwv\89\82q\83~z~}s\83}i\7fqc\87ti\82mt\83poreiyjcnsnjnrplwmgs_j~ej\80^_\82Wc\80\`\8aRi\84Qj}Lt~KqzStzPk~LowVvq\ryTk}VasPeoYdwSguSe|Hf~E^vM_tM]pTkiQqpOmlRutFps<{x=}\84Av\8aG~\93Eu\92Ir\87?k\88Bp\87F{\90N~\85Gx\88Ou\86Iu\86Ss\88W\82~I|\80D\85\88C|\81Q\81\87P\90\82`\8e\7fb\91\8cf\89\88`\84\8fd\90\8e]\98\88e\8f\8ae\8d}h\8axg\8aye\93to\8auv\88lr\8cnj\81seyt_|ni\81ydxzbwyj\82|m{}e|qhuxfvp[th_\80oR{rPymV\80tP\82uQ|{T\84vS\95|T\94uE\9ezE\99n>\92yG\96vH\9dsM\95nC£o:£p8°n>±y6¬r>°p4¬u:¢h<©l8¤e2©c?«f<Â¥^E¦gD¬lD¤h;§p:\99iD\94mA\96zJ \82N\9b{K sR\9dyX\98}X\8d\8cY\90\90a\93\87c\91\82g\96\88t\91\8dk\8b\8fl\8c\87l\91\8ay\8b\7fw\8d\81w\92\8a\86\9a\85\85\92\83\85\99\85\84ª\84}©\80v\9d\85|\9b\81r\95\91q \90l¨\84a\9f\88b\9a\87j\9d\85b¬\85^ª\84fÂ¥}b©{j­xm³\80j©vl©v`¡j[ n[\9ah[\9dmh\99|h¦}mªxq\9f}n§yjÂ¥zt§z|\9e}\80lW\82gN\85pT\8cjc\7ftd\80n_\8dgl\81gg\8bkr\8bxn\88lx\7fvxsw{\81u\7fzh\85\80k~\82a\89\82k\8f\86g\87\8eq\91\89l\86\93j}\98b\80\86h~\91q\8d\85i\91\8fw~\80l\82xz\85\82tvysw\7ftm\87~x\8au~{kw|qu\85nk{zcxmr\82mk\84lnzfswmc\81idrsdzsq{{v\7fvn\7frsoulpt{qs~n\81\80i|}uu~q\81\83ks\86{{\8f\81e\95\87g\91\85n\91|c\9a\87k\91\8dh\93\8cf\8a\8b]\8c\83b\86\8bw\82\8dl\88\8er\88\8ap|\8c_\87|c\81\7flx\87iq\85h\83tzu\83\88\83\8f\88~\8f\84\7f\95\82t\97nt\92vq\8fzv{~o\87wj\86yr|md\81wdtylmbilbiteinjsnpr^fmeivai}S[x[`\88Sg~^_zNlqZi}Kj\81P~qDk{Kp|^evRk{Pd\7fMbwPexOfqPgpJh|?^w@[qHcwR[oMbqMlnSnzNi~?o|CxzLnvExzRn\82Ds\8fEi\82Me}Mp\80E|\8aIu\85Jv\7fRv\83Tp\84Sr{T\81zG|\87N}\81J}\7fO~\82N\88~T\92{i\8c\8bW\85\82a\92\84X\88\83_\94~g\8b\88l\8d\7f_\89}_\93mr\8fve\93gr\8fjo\8anh}ro~{f}lb\81p_o{U{ob\8bsj\84sa~k]\80s^zia\87s\\82eQ\86uO~rJ\8cqI\8dmC\8asQ|lK\8dsN\9aoF\97kO p<\90pA\95{B\9dtA\9fo= hF¡j4¡p1«s*«p:°k?¬h4³d;Â¥e@\9bi0¦f/§d>¦e7¬iC¨b:§iG£nE\9fiB£kF\98\7f@\95{BÂ¥qV£zN£~T\9atW\94\88W\95\82_\9b|a \86t\91\7fq\96\80{\9d\84~\98\83y\95\84\7f\8a\85r\88vq\9a\88\82\9a~{\91\87\83¦\7fu¤\83v\9f{\80\9f\87m¢\80i\95\88eÂ¥\8a^\9b\80m£\8dg¡\89a\95{g§\82m¦\80aÂ¥vl­vq£taÂ¥|h³v[°}Yªq^¡qi¡ej¦ma\99nc«ye\9fqg£\81v\98rq\99p}£{\80\9dv\86kO\8deQ\92oV\90je\84sg}qh\7ftf\82lr\89jt\81hx\88hw\7fnw{x\81\80r\86zu\88\7fg\86\84i\84\7ff\86\88f\89\83q\88\88r\88\8em{\8epx\95p\80\8es\7f\91p\88\8b{\81~ty\80t|\87x\81\89\7f\80\8awp\87o|\83nv\86mwxjmvtg~vn}vo~wn\8drj\8bgu\7fjv\83euvhzv{qyuk\80xtvyltuqu}rxx\84jw\86gv|fx\88sz\85uq\85vw\8d\83q\98|b\9a\83^\96\8ek\97\8co\98\8ek\97\94a\8f\83e\8e\81i\87\82p\8a\91q\88\91k\82\83g\8e\8bd\88\88q\83\89py\8fo~\8cn\82{m\81\8c}\82\93\84v\99yz\99s\80\9dtu\93xz\94|y\83{o\80km\89okwfeurmsrltlgk_npdkx^woivcqv\dwRaqWX\7fR]\82V[tRaqV_s\krYiyUvvIzmUpqWmoVfwG]rJYyV`~Z`vPkt?ms?`z>]zF^hG_cKfgU^{XdwTjvHd~UozTzvQwyT\80zVx\83Ox}Np\7fXm\80Zx\85O\80yR|wNsyRtwV\7fvMy\84H}\88B\80\83MqtKquM}\85S\88\83`~\7fS\84\88T\84\8bO\89\82U\84wb\8dth\83lo\89pe\8ejf\91il\92j^\8bu`\87na\87wm}nn{tazl^vrU\85pX\82rZrnbsvc~w]\80l^\81dW\8beT\88oH\8arG\94xI\91uD\88oI\85iJ\8dbP\92jW\93bM\9afF\98kN\9auI\9fv@\98q;\99c9\9ce?¬]/®d-®h4¶i=¾g4µo8°l9\9eh7®k;®a6£i7¡d6\9ek7\9dfC\97pC\9fmM\97mC\9ftD¨mR eQ§lR§vZ¯pbÂ¥u]Â¥~e\99xb\93|q\9d\83z¦z{¤u\83\9ez\8b\9dz\82\8fwv\90{w\8b{\7f\8d\80\82¡\7f\81¤\80sÂ¥\81w£{}¢\8aw\9b\8fe¡\8bc\9f\80a©\8ac¬\85l\9d}h\9c~o\98wo\9czdªrl¯nj¦y^\9exa±zf³w]§jl\9clo¦qt¡ok\9etf¤hm\9djo¢tw qw\9dt{\92z\81\8e{}mX\8enY\94fX\8fif\90rh\87mo\84ft\86or\84ft\8b`z\8fi~\89mozsy\88dw\8cp\82}r\84}j\86\84e\82}j}\8az\7f\80uu\8exr\88lt\97t}\9cp\7f\93d\88\8ery\86hw~mu\82|\81\87xs\88qm~jv\88jq\82wx\7fhstpjquexpu\83vo\8cpw\89pz\7fkq\80m~{pqvurz}wsrr|{sly|jw}pyxlv\83rz\80u~\81vv\8cm\7f\88vy\82\86u\96\88i\93~`\8f\89h\9a\93f\9a\91g\97\8dk\99\8bf\9c\7ff\8e\92o\90\8cf\96\90o\84\82g\88\8fg\90\8ch\81\91u\83\91|\83\83{~\87\81\83\91~{\9c\83q\9a\80y\97zx\9dmn\95pr\91l~\8cml\80nj~^fw`pqerzitl`ojktlf|z_xxiwjq\81ck|gk\82\]~^f|Wj\83Vf\81[fuaryXm~Mx}UqxTf|QdoRYrE[yM_{NXuUk|DkxHtmH_uJh\81FelVigTZrPQ~KY\82Mj{LauPl\7fVysR\7ftItrWluVo\80Ovx`r|Mx\83S\7f\82IzzU\86xZ\84|X\7ft[{\85Tv\81N~\86RtpXyzX~rNw\80Q|\85V\8avZ\8a}Z\81sb\83mZ\88i]\84rWyxU\86ui\8aoa\8cri\87t]\81v[\84nq\84~l|l_}{^\7f~^{rP\88}R\80pOzu]}kY{nP\89nW\8f]O\96cS\8eeE\89vM\8asM\94kD\8cjI\8ajL\90cW\9fgRÂ¥iO¢cH§l<£d9\9cf2©n4¬q9«b6­n7¯g7¸i<¶lAµo9²a4£c:Â¥_/¨]@¢a=¯[:¦b4\9deA\9fbJ¢_K¨gN«nG£fJ¦fY«qV¯mN¨u`«h\Â¥kdÂ¥p`ª~w¡w\82¢w\82\9dt\88£s\80 ~\81\9dzz\9a||\92xx\96y\80\9ez\82\9e}x£\80\81\9e\84s \8c} \8ci§\7fi\9d~`\9dylÂ¥\8an¤ym¦xm\9asd\9emd©pe­mm£u]\9dgb¤ig²xi«vj\9blj§er\9flk¤rq\9cqz wq¨x\7f\9bs|\96w|\97\84w\8c\80\82_c\98ea\9fv`\98u]\94gj\9cie\98us\90ox\8ag\82\90d\7f\89n}\88lr\87ao\8afv\8eh\85\90o\8c\86s\8c\83k\81}gx\83r|\85w}\84tt\87n\82\94q\80\9art\94ex\89h|\85m\80\84k\84ysy}o~\89px\85vs\89pv\83xlrsoqll~ug{qm|po\8bh{\8aqx\81tszj{tm{wrnvnsxwrqyrr\81~pxwy{vq\80\81{w|wv\8avr\8aos\89|v\87\83y\98\7fl\99\89a\98\95^\8c\8f^\98\8f`\94\8cg\95\92\\9a\89[£\91c \94n\9c\90g\96\8fm\94\91m\86\98n\8d\88y\87\87\7f|\8e}\82\8bx{\99\7fr\9c\84t |r\9fwt\9arv\94f|\8aks\89lq\84gs|`w\82dn|mrwersljvequd}|czvpukm\7fk`|]d\86]`|]azYc\84cj\7fbmsfru[u\80Nq\7fOg\7fIgvQZzP[yIWoK[uMYwKdwBoxEjoKbpMcwVhrOakQ[oMTvK^yJ\\81Rk}TpsLtzK}qMruPowLfq\k{ZxvXz\80T}wT\7fyL\82~O\87}Y|\83S\82yZz\7f^~|Ty|PvoTulLrrMrmY\7fuZ\7fh^\7fk]vlb~nY\84iPzqT\8atY\88la|kX\7fj_\84njzvcwxd~s\\87qW\88zZ\89~N\88{O\86|M|tQ\85oT\7fiL\86`G\91aK\8e_M\94iB\9adI\94pG\99eR\95]U\98ZX\92]X\91\U\9e[JÂ¥[I¤g:¦f0©b-¢f,ªm5°j5°s7»v-µk4¶j9¬b:§_:¨Y0ªd>£e;­h4¯`2¯d;§Y8\9fYB§bI²bU±lT©mZ¬cO§iR²cS¨__¯j`µtg­po¦x~¢r\7f\9cn\84\9bz\84£~\84¡v|\97}\7f\93}z\96us\92y{\9e\80v\9fwy£\82r£\84zª\88x®\82x¦\87q©\83b \82b¡\7fo§uw¤os¦jd¤mf¢tf¦ll¦dc«e^´l`«re¬ri«`eªbb `m\9aor\9anw\9bhr¤pv\9c\80}\94~y\90|s\8f\80}gd\9fr]¨mh\9ar\\9bq_\9a`j\8bqo\93hz\86ip\92nt\8dmo\8dlo\87hu\82q{\88u\8d\84x\87\8ed\88\81m\87\81q\80\81g\8a\80m\84\8d}v\8euw\94m\7f\9af\83\9bl\84\87a\81\83c~ynw\85hy~nz{ts\82ou\82ss\8asq~nvvyq|nawnkzjk\91du\8eqx\80itycqubvxiw\7fvxvwqqwwk{xqy|vxqyjx\80o\85\83r\8bop\8ali\8bqo\93\7fq\9a\8ag\8e\89j\94\8bV\92\8b^\9a\89Y\98\8a_\99\89`\8f\90^\96\8da\9c\91f\99\94k\96\96h\8b\9fs\8a§l\85\90o\93\88|\83\87{\7f\90z\7f\99\7fu\94}\7f\96qs\9az| h\7f\91lp\8db\80\8fgx\87a}}hvynp~_wokzjemtgl\80c}nnqhp}fk\80nd\80di\8bkb\80gd\80Xn|gr|gjqbwz`t\80Nh~KgxI_oJhpPYuUVzOasSWjN_u?jsMjqIhjJgkRYiQdvN]nHUvLY\81M]vJ_|ThmSmnJ}lHyxHmvJz~St|Y}~N\83zUsxN}vS{\7fW\84sV|tS\82rYwnY}t\yf]~v^ygU\7fn]~ocxndzqf\82cd\83kc\85iUxr[vqX{aa\81lb\7fgd\7fm\\82{auvp|u^tja\80zQ\88rS\8a}S\84|L\8axE\7fmU\89jV\80_N\83^T\8bYQ\90]H\95h@\94m>\90qF\95_H\8biJ\8fWU\8eXP\9d_F\9eTJ\9f[BÂ¥oF«e7 a1¦^5¬b-°c,¹d8³j0¬b-°Z7¨X+¤S'§_,ªU.«W9°[2¶Y1§`7°^0®]=\9ciCªeS¯bGÂ¥eL¢eP¯bQ«nV²nU­l]£qa©di\9fe{¤kt¢v}\9co\80 u\80\9au{\98y|\9dt|\95u\83\95w~\97us\9epxÂ¥s{\9ew{\9b\86{¤wiª\85l¤\84a sp©\80p­vv­ez©nl©pi¢j`£de£bl®`e§pm®ah¯hpÂ¥]l«\y\9edr\99^~\9ecz§fz©ct\96yv\9c~}\8fyt\92v\84ma­v`¡k_§oa£hn\9dhn\8fdz\90ot\92ov\97rt\8fvl\91hr\88h\82\87s\82\89o\8e\88r\8c\8do\84\93h\86\94f\82\97g\8b\89h\8a\8et\81\95j\85\95j|\9da}\93g\7f\96d|\8dfx|j|\7f_~\84i\7fxrrytw\7fuu\7fqq\80nlztesliskmwmh\8cnp\8b`}\85h\7f\83dq\7flv\80gr|nwx{~pnzrlo~rz\80jvsm\84rg\84\82k\88\81w~qo\8b{i\92wr\97{o\93\8e]\97\8c[\98\8bc\93\8a^\9b\91^\92\95f\94\98g\95\95j \91s\9f\9ao\92\93m\9a¢s\94¤z\8e\93q\8f\93p\95\9bx\8c\99t\8a¡z\7f\9d~u\9crv\9bkr\96fw\9ee}\93`\83\8dg}\85_\81\8aes\8aft}du\7fmtrpr}huyp}piyegxmp\84jl|qc\80gfvda}[bw]qnctndo\7fYqt`kmVnmUfuIc{FbqP]oPbnI`iK[cH]hTmmTccOafG^mNZzJdtP^vNd\7fUcyNa~IdsKyvP}xT}uP|}PuzOs\7fU\7f\81Q~\81S\81yYvySs|\wr^qo^{o^tmX|f`\84d_\80k`zie\84me{bg\80eg|f\\81_^\87k[\84fb\83ei\81cd\81jn|fkwkk|ujupnpwnwk`vi_}eQ~qR\81~S\80}P\8buL\8ajH\82_X\84dZ\8biS\91_O\87]G\89fM\91jQ\8deC\8d_D\8eeJ\88ZI\8d[H\9caO\99^D\9ajD§iB¤n?¦c/ª_1£U+¯`2²^/®Z/²b(¹T(®Q,·X(¯_&§\*Â¥T'·V)ºU.·Z)®a1¨d> iE kP§cK°fL§eF§eG®nWµh^ªid®gi¦bi©kp¨nx«w\83£q\82 s\81\9fv\7f¡sq\96ls\95hw\95q\85¢kx£qs¢zw\95{v\97\82s\9dyf\9f|k¢yf\9e~e¦rk®otªho¨bq\9eci¤`d¨\c°cn¦hr¢mc®ae¨hs¯`}´Z\80¬X~­_}¡i\81¨`\7f¬cvÂ¥jx\93p{\94pw\98s\80ie h^\9fim¨io¤uk\9cm~\93v\80\94yy\8f{r\99vo\8eum\98ar\89p}\98hu\96v\82\8d{\8e\91u\8a\97o\88\8d_\87\92b\92\94`\95\90i\8e\8do\7f\91o}\9fd\80\94c\83\90h\80\82_u\83er\88_{\85^s|qw~ov|go~cnzgjqslyirzro\83ql\8a]}\8bbv\87ao\85joyju\7f`x\82esum\84\7fjt\86o\83\86`wwlv\81n\8b\82o\8d\7fk\85\86{}yt\87\7fx\91us\8c\85n\8b\87f\8f\83W\95\86[\9f\8af¢\8ab¡\94f\90\94b\9c\8ei\98\95r\97\91y\9a\91m\9b\98z\9d©y\91Â¥|\8e£p\96\95}\85\9b}\8d§s}\9cv{\9bwr\97k\7f\9eh\87\9bj\8c\92m\82\97[\7f\8a^\80\89gy\82bw\87h\80|mzxs}zjvyh{fb\86lq~dsz`rzeqzcon\orfoifeuV`kdp~`en]ewakx\\rWcnWbdN]gJeeRhcNfcWicLefNgsWapSYkQUrIdySfqTexUkk]mtTdwKmnKnvLyzIk}MztHs\87T|~Kt\89Rq\8aQn\82Sx{_l{a|mR\80pW}lZ\83X`\88ha\82a[ylf\85d_\81`av\avY_\83cZ\89X`~Za{[h\87_f\7fiarnfyugvlb~wjnnitq_|d\~m_xnU~sZ\81{Q\88jF\93tP\8flV\82kW\8bfO\97dQ\97_V\8bfQ\98bJ\8fcI\8a]G\9c]N\94WT\91^F\9e_E\9f`D\96f@¨i;¦fA Z:­W5¨W4¨P'´Q*ªX$²Q/¶R*¬V Â°Q*¸\*¶]\1f­V#¸V(»K2¾^6·d8³_;«]:§\?§`J¶kP·jD¨mZ©vRÂ¥o[§ob¯jh¨boªdl¹ey²op¢k}£jy zu¡nr\97tz\9bv~\9bz\8a\98s\86§s}\93ju\98sz wg¤xq\9cve\9evq\9eqo¨hm\9efh§elÂ¥pf©`f¡Ye¨\l¯ho¢gl°ku¬dr©ar²a\86°Y\7f¤\\87¢f\82¦f~\9db\84­b\88¤h\7f r~¡n\80\9fo\81hh¯kbªwm¡rv\9fz\80£t\86\97p\80\94v\82\93v\84 wz\9brv\97ju\92c}\92mt\9bq~\9dt~\95r\81\90h\8f\8ea\8c\8bd\90\8d_\8f\91a\95\89o\96\94k\8d\93s\82\8bm\81\8ec{\8ce{\89kv\81al\85dsyfqwmw}cr}dh{dmxlp\82ni\84st}ht\80]v\86ax\86bw\83ay\81hr|bt|a|\82my\83b|\83b\86\8ad\8a\8ci\86\85f\8c\8bq\8d\86r\83\7fo\81\85qzzv\81~j\8e\81j\8d\82f\8eyd\94~c§}]«\8dk§\85h\97\85m\94\8el\97\92n¡\8cu\9e\97|\96\9as\9b£p\91\9fu\98¢|\8bÂ¥r\8d©n\89\9fo\8b¡oz¨nz¤r\8a£h\88\9bi\8e\9aj\8b\96h\8b\8c`\80\8cb~\8dd\86\86g}~o|xw\7fmmzkg\83ok\81op}lgw`esdqpbot\on`ir_bkZilTbv_f\80Z_yaho]_vTbeOYdX[dYggSalQkdTjiW]iT[tKdsPYnO^uVep\fyUqk[qj]zl\rqMpfIokMvmPkvQp{Vy\80I~\8cUw\89Zo\81\o\81\i\7f\qyT}lVwhX\84bf\83Zc|Y_\82`f\84ikzfarf\xXdyQ[\7f[`\84Vd\83_d\86dc\85_cubovgklnksserxfynjvm\vh_\7fj[|nZ\85kQ\84jN\8feG\93pP\93oJ\8dcO\8cjW\90aV\9acP\9a`M\97TK\97YT\9bYQ\9aSQ\98QS\9b]K\9a[F\9cfO¤fM\9b[D¨bH§[>±N@¬P1´V7­J-¬V-±Q(½R,»R\1f¸Q\19²Q$¶R!¹Y%¼U1·O1¹Q7¹X;¸^?®_5­i5´dC·kMµbM°gX©p]¯o_°oa·nb´jq¯iy¹hs³n{±cs®jmªrt¦yq£ru¦u\88\9fr\8a\9em\8a\9bi{\97wt\96ut\9dxt ol\95ni\9bsk\9cgg\99go¢nb¡oa i\Â¥bg¢Wa§[d©ae¨fhÂ¥av±^w¯X\87¶V\87©X\81§Z\8a [\80¨b\80«k\8b f\8a\9ch\83¢v\82¦y\83\98x\84sg¤gl­vl\9crq¨{t\96pv\90nz\96y~\96n\7f\9cv}\8fp{\96`q\91h}\99o\81\99wu\9fuy\9cl\8f\98m\94\98h\95\8fh\91\98d\99\8ea\86\8fo\8b\9au\96\9fs\8e\99f{\95jx\8bqy\89ku\89lw\82it\7fdl~anxdv\83cq~jstnw\81di\7fkuxeyvjt\7ffxybx\86]}\86ft\8b]u\81gy\91fp\8fu\82\8cp\89\93t\8c\8eq\86\8dp\84\88j\8c\8ao\89\88p\8c\82d\89\90l\8a\84f\85\84m\90\90f\9d\87c\94\88h£}f¤\92b \8bg¦\87qÂ¥\97fÂ¥\97w\95\9dr\9b\9e|\97\9bx§¨w ¢s\98\9bl\99¤s\8a¬o\8b§s\92§q\89\9fg\82ªo\88\9da\87Â¥`\89\98_\8b\97^\8e\96Z\89\89e\8a\88l\87\80k{\86k\81sg{w_\80ma\85xZ\84iaom\xi\wjdofaw_qzcfqmio`jsifthajmWwc]rajyTgoOl\Wb_TbsLfaUaeUYaXYePUf\YnQXiWSqUZlPamTpm`qf]ueYrfLiuLltPvkVuwKntMz{Ev\82Qz\8dOk\86Sj|To\7f]wwO}oU{eV\82X`|aczZ\\7fck\85acxa[wae\80c[\80\WxNX\83__\7f^p\86db\8fed\81[j{hnstnzxl\84gb|ig\7fig{dZ\85cc\82kR\8abV\8dgI\83oM\95n]\8elY\86lO\90`R\8a[Z\92\T\96aV\9fcX\99_T\9dVX ]M§]W¤_T\97fJ\9ehM\99gI\9f\C«XD§N>«X:ªG,«C1¡R)©T,§R&°O(¹K+ºS%±G\1c½O Â¬M'­N2µM2ºN5½T@°R=¬b2¬ZB³^<»ZG½fM±aY­mU°]f®ed±ik­ge²pjÀohºesµ]u¶_|¹s~¤dr¡l\80\9avx¡j\8a\9bg\8a\9dmv\95j{\98nv\9coy¢oo¤gr¦mk©mt\9e]r­gq¯b`¦b\±Th§]l³\m°Uq±Vg©Vk®Yy©S\80Â¥Z\82¨Q\81®X\89¢^\89¤Y\8a\98k\86\9di\8b\9bs\8f\9ee\80\9b{\86¢p\8ahg°ll¦rq§vzÂ¥ww§tw\98uq\94uz\8fiq\88iq\8fkw¡gv¡my¤k|¤v{¡z\81\9dk\87\9cd\8d\97c\8f\9df\9c\94j\93\95i\88\98h\95¢r\90\9do\84\93o\82\8dn|\86lw\8cl\80\89k\83zfv\83dr}ho\81ouwl}|h\82sgt|ipyaqvZw}fy\85l}}r\82|j|}f\82\8e\y\90^x\91or\92{x\99u~\97n\85\8ax\97\86u\8d\8fq\7f\96e\85\91h\87\8cg\89\92f\94\94i\98\8cc\94\8cj\9e\8bi \80d¤\88hª\8ce®\8bc­\8em°\9bm¦\99l\9b\9cr\9b\98u\9a¢u¡§f\93©c\91¤k\8e\9et\8b¤r\8e\9eo\91¨i\95§m\87 p\86§j\7f j\8e\9aY\8f\89c\94\88c\90\8cd\86\7fd\88\7fc\88\84g~}i\85~_\82~U\83yWynbuibnj_hkYnmaxrkwosrtlnnqiermkbvi_nehplmlbnm^nePpnXioRgfQaeVaa\UkQXkZZd\Vf^VfTYmRejYew_srWkrU`kObkUmkSsgMzjPtwQ~wQz{Mr\7fQvv[ryZysMtnOu]T\81]]rZ`sbQzgV\81^a~V]\83Z\\88af\82]^zO\yP\\81[_~`k\87\e\8bY]\82\Ztghyrd\7flcy^h\82`\\84a]xqa|dW\89aV\92jY\8fgN\93mP\89h[\8dpO\8dgN\90VQ\8eU[\8a^M\8ebO\95^O\9bd_¢Z_¡`WÂ¥VK¦XK\9eZH\9eaH¡^G¬]DªW=¡QFªQ@¡C2¤C.¢R*«Q(®V#µN,²K0°C&¹D Â±@)®I6ºG1¹D=®@E´HCªV:ªX9¶O8²OE·RC¹^P¹^J´YO»dW·^k·_g·lb¿inºji¼luÀ^|µa\83·f~±]u¤d{¦c\84¦q\86 a\80\98b}\95bx\95o{\93iz\99lsÂ¥kk¨qiÂ¥og«`oÂ¥Tf°WfµOb®Ua¸Sbµ[l¶[xªQv®Rs Qq¨Uv¤Xt©azµ^\88®^\84\9eV\82\9bh\89\96j\8b\98f\8e£d\88¤q\89¡y\8dqe«is¦oh°~r²rxªst\99wy\96w\85\90vq\9cwp\9avp\99kv\9bs\83ªi\87 n\80¡}\88\9dn\86\9de\91\9dm\98\90g\92\9ce\8f\8d^\89\8ek\92\94g\8c¢m\84\9bd\7f\93^z\8df\82\8cp\80\7fkx}at\80`v\7fis~s}ym{pr\7f\7fh\7frl}w_\82\80\|z\\81xj\8b\7fl|ylx\85hy\8a`z\8e\{\99dz\91s\86\94j\8f\92v\87\89{\98\8bo\88\8dy\85\90p~\9bi\8e\95i\90\91]\8e\8d_\92\98d\92\91_\94\85e\9f\83p­\8cd¦\88b³\89aÂ¥\8c`¦ a­¢q §p\9e\9ah\9f­g\9d©k£\9dj\8f¦d\8b\9cx\95¢q\88\9fi\94¢f\94©m\8a¨d\89\9a_\87\96d\8b\90S\8a\81P\84\90]\81\90T\83\83f\82}X\87\83\|\86`\86\80]\80yS{yQwnWvg_bsUeoZjobjmfk{gwofizldhkshpmr_slcrhhvmpi`liTmjL^nO_eQc_TTdSY]Y`]^QlXOh[VgYbaUfpUacJsoVinH[ePneEelOmgH}gDreLrfXwrYw\7fQl}R}z^rs]|vRvh^xkVu[PjaPyWW\84T^\83Oa\88U]~T^\8cO`\8aR[\87Vc}Zh\8c\i\85[b\89Na\82^h\83ZqvZbx^h\83^W\89j^~gX\83b`\84i^\80a]\8ekU\8fn]\90gU\8elY\8fm\\90_O\9bbT O\\92RU\97_[\99^R\8fiV\99]Y¢iZ¢\K¦SCÂ¥SNÂ¥\P«eHªZHÂ¥\H QP\9bJB¤FB R/¢L1¦V/´^"ªN%¬U(»J+µA/²K3°L<´L1·K@¾EG¸OC»T?®W<®J8²N>¶QG´UH²IU²R[²S[¿ah¾Zn·lcÃoaÃkfÂ]r·[\7fÃWyÂf\85¶ct¦k\82®o}£f\8a£gzÂ¥h\84¨h\83\9dj\80¡qr\9cps¢gk oh®cl¹jn®ao­Zf²Qg³^p³_k¹^p°Wm¨Kv®I{©PwªVo¤_q§[u¬X} \\84Â¥Sy¤f\84\95l\85\9cb\89\97_\83\9bh\8f t\91ds¦mq©kq²ym­~oÂ¥z}¦z\85¨w\82\9e}s©}t§~y¡ot¢h~\9br\88£n\87¬n\8f£u\8b¢j\89\92a\96\8b]\94\94\\94\8fZ\93\92]\91\97h\8f\9bh\86\8e\\81\8b]\8d\92b\88\8fm\82\93g}\86b\81\8adt\82g}\85q\83zh\80tl\89zl\82uj\85xb\82r]~{a\86}_\89\7f`\82\89d\83\88g\81\90^~\97g\86\9dh|\9ao\80\90g\92\92h\97\8ft\94\94t\8f\94o\88\99u\85¡n\8b\9ef\8f\9f[\8b\97^\87\88[\92\89[ ~c \83a¬\82i±\8d^­\97^©\9b_±\9cd¯¡i®¤]ǻhª«e\9f¬`¤¥d\97\9ef\92\99j\8d¤d\92§k\93Â¥\\99Â¥\\8fÂ¥\\94\98S\8e\9aZ\86\95V\87\89M\8a\8aN\83\85S\80\8d[\84\8bN\7f\84R~\88X\83\80Uz\82Nw\7fRorOjyRdpM`tM`yMi}XpxSk{^g{nlvponhqweqrmwtmrntn^qvZmkNcfS[_HWcNVdZ^^[[^\RgMTiTWfOXaPViRekUbkGlr<dp@ftLijGnnDr`Io\Vpc_um]tmWxl\vtQyuZ~v\|qcwgXnfLr\O\7fUV\81PYzUg\7fSj\8aOe\88Nj\8aJn\89Sg\8aUn\8c^d\94Yj\91Sm\90Ve\85[i\8c[e\81\g\87\_\81gRz_O\7f]O}`Z\83]W\82YS\88e]\8c[[\8fbV\8egP\92cS\98`_¡U`Â¥Y]\9eUW\8f_a\91^\\97cY¢bKªTI¬WE²TJ¦^K©bJ­]@ªOB\9fQL¤SLÂ¥GD°R9°L?¦V7¨Y/¦L,­O%µG'»@/¹J1¼D2Ã…@B¿ICºQ>¸RC±IG³M<§KD¬@D®=E³FM·HP¹Ja¾Pb½[e¾XjÇfoÑ\rÊ_jÉWrºRz¿Z~¿Z|¶`y®f|«b\82®g\87²d\88³i}±_\87¤e\80¢r\80\9emv\9dmlÂ¥jn²fkµdnµak´Ov¿Tw¼]r¶Up¶^p¯]g­Vm®Qo£G{°H\80¬Ux®S\80°Q{¡]t ]|\9d]\8b\9b_\89\94f\80\92`\83\9cn\86\99r\8bkq°cq²lk²pwÂ¥npªvq­zs\9fs{\9co}©\81m¯wn d\83§r\81¤r\83ªn\88¤q\97\9dk\88¤l\84\9f_\8e\99a\8a\9dX\93\9eT\92\90c\8c\93q\90Â¥b\92\9cV\82\98`\84\9b\z\8f^}\92j\83\93aw\83Zt\8fj\83}o\88\86^}uh\80ui\8c\86d\80\81b|yW\80\7fWx\87Q\82\84b\81\91`\88\8baz\8bg\8b\91^\83\9a_\87\8fh\8c¡d\87 m\8e\95{\8b\99{\88\94j\85£i\8a§n\9b b\8c¡j\8b\91e\97\8dc\96\9aa \91c\9c\8ca¤\94f¸\8fl±\92_ª\95X·\98^¸¥]®¨`©¥a\9f¢_\9f°g\9dÂ¥Y¡­f\94¤a\96¨X\8e¢W\92¨b\84¬Y\8e\9eY\87 Y\98\9b]\91\97_\89\94[\87\87[\83\8bQ\82\84T\88\8cR\87\8cRq\8bZs\7fKo\8cIj\81JomLlnUlvShrMgnYbu_j\82T^yYa\81chygjjalm`mflsmkobll]qhVppXjlNgbPO]\VaVRcaLfU[sTWkRcgRVoXYeJanTecDafDlnMjiCmg@l^OgeTofYqeZkiXnbQsl]tkUniTrs[qkVxgXuXUvbR\86]`\8cSd}V`uT[\82U`\81Xq\7fXm\8dXq\84U^\87\e\8cUk\8dUj\87Re\91Z\\86\d\85Xg~eT\81dF\87_S}YV\88WP\82R^\88Rb\93X_\94^_\9abS\91\`\97Y`¢`[\9aKc\9aYW£[R c\\8bZS\95_V\9fbJ§RG­OH®MI±ZF¤UB¶SJ®[F­GB­JM HB¬DC¸H5§H>¢O;§U1¶K4°O-¶N5¹@5¿H9¾IHÈJ=¼@C¾D=¹K=ÀB>½G<¸HD¯MA¹LG¯PQ®@[ÀPb¼]eºTfÃa`ÆXcÂ^k¹_rÇJpµY}¾S\82¸]v´Z{´g|´]\8c¹e\80¼_~´[\88°l\8c°j\85¢m} f}®Yz³[m±]x¹Xv´Mu­Vn²Ww¼Ws³Ws°Ss®Uy±Uv\9dM\84 J\85¸[\82¯S{¸O\82Â¥]w¬f}¤^\8e\95^\87 U\83¡e~\96h\8e«i\93ju©fh±mtªf{¤lm©km©el¬m|¦s|¢uq«hy¢c\82ªi\86Â¥e\8a«g\93®m\96Â¥j\8e\9ch\87£`\87®U\91¨O\93\9fW\96\9dg\9c\98j\97¤`\8cª[\83¤d\81\9e]}\9f\\87\97g\89\91`\82\8cZw\8fb\85\83_\82\84W\85y_\84~[~\83X|\87R\83\8a]z\80W{\85S\7f\8a[~\8aY{\94]}\94b\89\89b\8b\8e`\81\92Y|\9dc\84£u\84¢w\8e\98x\8e r\93 j\9bÂ¥a\9b¡f\9e\9eo\9b\93p©\98l¦\99p¤\95b£\97`Â¥\94h­\8ee°\98`µ\97T¹¢Y¶©b°¡e ¨d®\9fb®¢d¢§U\9bªO££X ¨U\9a¢Q\8a©_\86¡`\88¢Y\8f\98W\91\93^\89\8cV\8c\8fU\85\83Y\8d\83]\8f\8aV\8b\95R\86\89Kp\84Lp\8eRp\87Qv\85JoxQu~WjxSt|LoqSp}\_\80Sg\87[_\82]Ypg^ohWpjajn_nmjco`[kdafkTifU^_VV[ZY\\Q\bZfVSmVVqV_jW^nUcgO`eTldJp`FbiSffIksFfoIk_Zn_biaXs]YtZ[ud[|mVkfKk^Qs`Tm\_tYW\80\\\80^Y\85Pb\84MfvJZuRa|Th\84Hf\84Mm\89Zg~YcxX`\82\i\8dYc\8dR\\87Xa\81b]\87eT\86_K\8dWN\89^P\89U^\8aNZ\88K]\94XY\98]_\97VZ\9eWi \f\9fM[£L`\9fX[¨ZT\99dW\96^S\9eWQ RS\9eLI¨IMªIQ¯IG°US°WP¯GI°FE£=E\9f>H­FAµA0«B2Â¥H8²U;±Q3ÀW@¿LA¼VC¼QI¼F;Ã…A>Ã…=C»?B¸DF½>IÉJBÃGIÂAK¸GK·?]´F]»I\¼NiÈSlÆKaºMh¼YgÆZiÄQw¸L\82´Q}·VxÀX{®c\7f«]\88µ[\86»W\86À]\86³c\87°b\81³ez®`u«W{®Q\7fªJv¦Jr®Co¬Gm«XxµX\81²Z~ºPx·Ry¯Su\9eD\81¨Kz³T\84½O\7f¹J~³^\83­`\86 X\8b\9bW\95\9fR\86\9fZ\86¢]\8c¬b\96et¨ev§_}¡\}©cx\9fhj´ps¬nx£r{­s{³fy³c\84¨\\8c¯g\93Â¥d\85¯k\92ª`\90¯_\8f°_\93«U\9b¶O\95¡U\9b­W\9f£k\94\9cb\8c\9cZ\87\9cc\7f¨f\8a¤[~\9dn\86\8bX\8c\8ea\85\94a\85\89]\92\8b\\85\86i\8b\83b\88\84^~\90Z\85\8aT\8a\8c_}\89[\85\8eQ\81\8aX\88\95e\81\8bg\84\8ec\8f\98c\82\9ca\8e e\8e\9fm\8d r\8d¢k\91¡j\9e\9b`\97©e\9e\9ek\9a\9dm\9b m«¢o¤\91iª\95j­\94f¡\92n§\9be±\96c´\9fe¢\´²Vª¦Q³§\¨ W©©P¨©R¦®Uª­R¥°O\90\9cL\8dÂ¥Q\8d\9eU\90\9aW\8e\9f\\94\92S\8a\96U\83\8bW~\88Z\8a\89M\81\8dZ\85\8aN\82\8cSo\92Sw\92Sn\8bCl\8aPo\80MdxYhtSpuR_~W_\83f^\89W]\8bbe\7f^_~mYqi^r_hwekitnhike^nbdbgn`]bcTacbV[XYk`^kcaeV\kSZ]_X`Y_]LggMmeIj_KjqRgoMbeIq_OjgWt\PnaXq^WtUYx[Uw[SocRpVOqPOsOSsZ\tZU}SY|T[\86U[yISwP\\7fTeuJlzFm|Gk\82SgyZg{a[\8f\\\84Zb\89Ua\8di`\85^T\8a]U\82`L\8aOT\83U[\8eVb\8b[X\94S`\96Q`¡JeªPb©Z_§I\®IX¢PV\9cYUÂ¥RU\98QS§ZY£TO¬KF¨SU¨ES¶PI±WH¯QV¬KR²BC±DN¢C@©?;­J5©I7³A7©S8³O7ºJCÃK9¿K@ÃNGÃQD¹IB¸?F¶EBÆHR»;P¸GM½DBÇAB²AN¾AN¯K]¿CYÂE[ÃŒIkÑDf¼J`ÆOcÃUjÈUw½Wu¹Zm´NqÇSy´Q\85²W\8a»[~¼a\7f·\\8e¾\\88¿f\85µ_}ÂWx¾Uu¹V{§SsÂ¥Lr¨>i·Iz¯Lv©Lx±T|°L|²Tp§Kt¦Ls°N\7f¬MtºJt¸Q|«M\86³[\8e¬a\8e\9b]\94©a\8e\9fV\8b¦^\8a²Y\96q\81«oz¨o{§by¤iuÂ¥dp®d{·kw®czµl|¶]z½\\81³\\89§W\8d¬V\94¦X\8a®]\8e¦\\96­R\94µY\99´V ¸Y¡¬`\93¨Z\95Â¥b\86Â¥`\87¢Y\81¡b\87¡\\89\98c\8d\8fg\8d\96_\8d\8di\8b\83b\90\89\\85\88a\89\83c\81\89Y\82\8aT\88\88W\89\89X\8e\80U\86\84O\87\90T\88\8cb\84\85d\88\88f\8f\93i\8b\99`\8e\9ag\89\98e\89Â¥r\99 o \9fa§\9fg¬\98c¤¢c¡¢m¨§n©¢n¯\99n«\9da«\9ei­\9ad© f¤ªc©«_¤¤W®«N´Kµ\9dTµ\9fS©¤M­¢O§¢W¦¤Q¥¦Q\93\9eX\91\9da\8e£X\90\99Y\8d\8b]\86\8cT\8d\87V\82\88Q|\88V}\8eP\82\92Q\81\90[\82\93Vy\98In\94Kk\8dMt\91Ep\83Gd\84Si}Tgz__~\V\84_Y\86Xb\80_`\81bd\7fkb\7fmhyaeznaijeildaakdfmdf`ckg[eca[djWlg]nWa`We_Q^`YY]V[bYhiXffQddSdgJjhHjhOf]OlbMp[Mr`Ys\Xh\Zm[WpYXgP]fSPbRXkMWhJYkK^uQ_{Pb\81Tc\82R]{DZ|F^wKU{K]\83TX\81Mb\83Zh\83W]\83b_\8a\Z\8feR\8beR\85hL\88`R\89[L\8fNO\89TL\8bQZ\8cS^\8dW[\97OW¤L_¨F_¯NV«Cd­Ia¦Ec\9eK_¢VV£ORÂ¥NU¯QJ¸SH¯KM®J[¸NW±UO³LN¶HMµLIµIF®EC¹D;´L8´L9±I5­JD­FBµH@¸SAÄK>ÃPIÇTN¾FM½?U½CSÉFQÃ=Gº<KÀH=¹ID½CHÀLT¸KQ¾?WÂA\ÄB`ÊMg¿IgÃReÇP_ÄRj»Jc½QmÄGqÀM}½O\81´\~ªa\8b°]\88±[\8a¾Y\83¾T\81Ã…X\84ÃŒS~ÂPy¼Os¯Mv±B{°Bq¹Js¹Eq´@~±L|ºRx³Vw®Lo¬Nu¬OqªMpÂ¥Jv¯M~®M\8b©]\8e¨[\93¢`\92£`\93¨a\96±Y\95¬`\91g|°k\80¨j\80«[yÂ¥lwªbv¢n}ªc\81\9ek\7f¨m~¬k\85±g\80Â¥U\85µO\8e¯R\86¯U\95±L\8b­^\92­S\93´Z\8e­Y\92ªd ³e\9a«d¢£\\90¦[\86©g\86Â¥d\8b\9dj\88¢X\8e\93[\8b\93`\8e\8bX\90\91Y\92\90]\83\87d\8c\86f\8e\82[\84\82R\89\86V\83\8eP\8d\91]\84\8bR\87\92Y\88\8cS\86\8b_\83\85b\80\87e\85\92]\94\9e^\95\93m\92¤m\9c\94f§\96h\9f\9e_£\98d©\9cm±\9a_ª\9b_« m§\9b\«\99b¡\96c­£p¬\9bj¯\99d£«_°\9d\¹¨W°\9aXµ¥Q¨¤P§\9cU\9e\9eJ£\9aP\9c\9eU \9fL\9a\9eY\99 Q\92\97U\97\9bX\94\9c_\82\9dV\87\88Z\83\89b\8a\8aS|\8cY\7f\90S\7f\89Xz\88Ut\97Pl\86Bq\8dCn\87>h\89Hh}Lf\85N^\83Rf\7f^\\8a\S\82d_~c[zc^\86i]\86\\zc\id`fbjYhc`_ejeg\Zc^`ZVbdW^jWTjcTka`bUfcM^aQa^[icRa\PciZ\gVe^BefBmbHs\UnYRmfVv`_u^Sj^VuZ^l_Vga^jVTjU\\7fAUvI[mAcoKV\87Zf|La\88S\zGb|KY\87Ni\89Hi\88Uk\7fMa\87L[\8eUT\86^P\8biZ\87cP\88ZZ\85`]}[Z\81[L\90WP\8c\S\88K\\8aWQ\88]]\8fVb\9eP\¢GUªUU\9eQV¬DZ\9fOg\98Lb\96LQ¡RI©TH§KQ²LH®JF©@U«JI­ET²ILºGJ°GF¬?L±C<«K?­B8Â¥Q;±E0´K>³K8·D;¿T?Ã…ENÃCQÈRRºLL¼MGÆHUÇ@KÂDBÊDB¸AE·F>¼DNÃ:F½FT¾IW¼<^Ã…HbÃ…GX¾T\ÀQg¶MfºIj³Mo¸Rs¸Nt¹Yv¼\r·S\80¨\y³Z\81®[\80²S\83¼Y\87Æ]\81¾Lt¶X|¶Wp¸So¼Lj²Cs±=zÃLt°Ds¹Rz¸S\7f·GuµV\7fªS}¬NzªSu¯T\81³N\85²L\82©S\84£Y\90\98[\88§d\88ª^\92§g\95¢i\95oz«s~£o\83§b|¦c\7f\9fou¢t\7f¤k\81\9fe\83¡iy¨h\7f¨a~§]\84¯R\89°L\88§G\90­L\8f§Y\98¦V\9b¯]\8e¦g\9c©e\9f«o\9cÂ¥k\9e¯j\9a¨`\95\9fj\94\9ai\82\9ag|¡Y\7f\9cS\82\99^\93\93]\85\93]\82\95^\85\91_\8d\89g\89\8ee\89\83`\8d\89S\84\95_\82\97Z\82\87O\8b\8fN\86\98P\82\8cS\83\8b_\84\88Z\80\8b[\90\90`\9a\9ce¡\9fe\9d\98`\9f\9bf\9e\9dl¨\9ce¯\9dZ®\95_°\9cZ§\9ed¤gÂ¥\9e`¨\9eh¬\98nÂ¥\9fh¨\98h©\9c_¥§]²¢\«£_±¡T¢\94U¢\95Qª\8fQ¦\95Z¢\96V\9e\97N\99\9fQ\96\97W\97\94U\9b\96Y\97\93W\8f\9eT\88\8fa\89\8eX\8b\8b]\81\8a[\83\91Uw\91[p\86Ou\87Fs\84Dy\80>n~Hi\8aJ`\88V^\86Qc\8aMl\86Ui\8cb[\82`f\80`exb`}]Z}dZph_gbX_k]XedVX`daagYY^[NZeTQ[YL]mXYlWX_Tca\edS`cOkW[d^Vi`WgWQ]^J][BlZHlWLz_X~bbz]_qbZp[ThUTk`Pw]TvW_wVU\81FPsE^uB[xP^\82R\\86SW\88J^~SZ\80Lc\82Ga\8bKf\8fVo\87Qf\8fZc\8aRX\84WU\8adT\8aYVy]\xbT\7fcT\83jR\82`T\8aXR\8fQO\90J[\8aRX\8cJ[\9fJX¡LZ\95Xa\98Sc\9eJc\9aGY\98L\\8fO]\95LO\9bOK¡CF¡DH§>J\9d7L¢@J«HX¹MU²JGµ:@³C;§>D£F:ªH@\9fB8¢E8±D2±F7·O:¾FIÆLFÃBM½NR¼LI¹BIÂFLÈGOÄHDÂMM¾JI·<F½8Nº<VÃ>PÈCXÃ=T¼JV¹GZ»J`±Q_ºGf±Jk¨En­Pv¶Pl´SoªTm­Y{®Ut­T}¬Ry²S}ÀV\7f¿Y{ºMq³Qu¹Kq½LvµQn³In²G\7f¸B\83¼F~ºM\7f¬Nx­By´Qp­OsªHo¶Rv©PuÂ¥O\7f¨M\83ªZ\83\9eX\84\9bY\89\9cT\90¤W\90\9fT\96©b\95u\89±m\89¤k\85¬`{«b\7f¬ms\9eb\86£d\84\9ap\84¤f{¦]\82¦f{²V\82²V~±K\8a¬A\8bªN\8f©^\95Â¥Y\90Â¥Y\9a°e\90«c¨¬j\9b¢n\9f«k\9b­]\91 b\95Â¥f\8a\9db\7f\93_\87\93g\85\9aa\88\8ee\84\88m\87\95k~\97\\84\85]\8b\92^\8e\92\\82\99R\83\94R\8b\8eQ|\81L\81\8eM\88\98L\81\95O\80\92S\88\90]\8a\89^\97\92i£\9fi\98\9fa¢\9ac¨¥]°¢d¬\97b§\97`´¥`±¦^¥¡Z ®h\9dªd§\97k¦\9at©\93m\9e\91hª¡b±\97`ª¡bµ¥X¤\9a^\9e\94c£\97Qª\96M\9d\8eK£\91M¤\99W\95\95X\9b\99Z\93\9f\\92\96V\97\97X\99\99Z\8a\9ei\8a\91Z\87\85L\84\8aH{\8bL{\92P\7f\84Sy\80L\80\81Gn|VvyWmzQb\82TZ~Nb\82Jl\88Na\7f`e|ahvS`yX\r\]v[Unlb_c\ejYV`Y]QZR_WSTPZRYS]NSeYXcdQZeQg`VagYflUlb[bUSc\_h_SiaG`WRiUTnULqXXpa[\81XTy\X~Q\t\W{^[va^nP[qT[~EW\80NU\82?X\81I`zK`}G^|U^\8aTh\84JY\8dTk\83Wa\8eSj\84Ho\8eFn\8aKc\8dMP\8f]Z\80cW\81[X\81aZ\7fX[\80\Z~XS\82^a}P[\84XY\8cYR\86P[\99\U\9dY[\94MX\93Tc\9fHd\94Qj Q\\92RP\94MT\91TP\95NI\9aML¨HJ\9fFG\9fIH¡IN£=VµMR´=Hµ4R¨>G³7I¦:L¨>P ME¨DJ¨PF°R@»IL´KM´DQÂ@Q½AJ¶NUÄEBËFG¼HAÃPDÆKOÂLQ¸=QÇ@Jº:TÃ…JQÂHMÀ<UÂ<Z¼HZµFd¯Od®Jn¼Rg³Ku°Zw§Oz«Tm¬Xv¦`\85«Yz­[{­Y\88¯Ry¾Sz¹P\82²X\80¯W\82¼Tu²\u½U\80½Rq´E\81Ã;\8d¼I\8b´I\8c´A\84²G\82¨D~§Qw¶G{²W}¯Kz¦X\86°H\86µT\87°P\82¡T}\9bX\90¤_\93«^\8a¦c n\8e¸i\84¶b\89¼k\80³ny±i\80¨c\81 d\86Â¥d\8f±j\86«g\83­_\80¬d\84®Y\7f¡X\7f¤K\86¨J\97\9dW\97 O\95®U\94¬X£®j ¨oª¨k¢¥k¤¥c\9c¦g\8c¢g\86\95p\8b\92g~\8a\\85\8e_\86\8em\86\90l\80\8dn\87\97h~\91b~\93\\8b\99U\95\90S\8e\91W\8f\8bL\83\8bU~\8fU\84\94W\84\94U}\8c]|\8e_\89\8bb\96\91d\9e\92c§\9aY¢¢X§¢X³\9ej©¢j° j¯¬j¨«^£¤`\9cª\¤\9d_\9b¡l \9bi \93i¤\98b¤\94X¦\92X« ]ª\9dW¢\9eZ\99\98_ \93[ª\95W¢\8dT\98\92Q\99\93Z\99\97R\9b\9fe\9c\97g\99\9fc\9eÂ¥d\94\9fb\87\9e_}\99S|\98I\81\86Av\87Gx\87F\80\91L\80\89Ny\80QtzUksYfu]e\7fVd\83Ne\86PexSd}Wm\81[rxTeu[bmYXh[\m^TcY[e_eYW`LROJ\UQWLPOUNRYNWaQacV`b_if_ggUbhYgbWic\m`UeUL\TPbWMn\VkUOy[Uw]PuXYzVWwQZ\80RP|[QwX]\7fIOwJQuGN\84IV\87AW\82BS\83Oa~K^xO]\83Zd\8cWc\8bVc\8aLh\89Ni\91Hh\8bJe\93FZ\8aIT\81HY|XP|SS{ZS}YXx[RwP[yR^\81Ya\87RW\92[K\8b]O\93^]\90]\\94X^\95QU\9aO_\9bN_\97N_\99RU\9fTU\9cJK\97QY\9bHW\9f<K\99=P¢;J©GO£JI«AI§@N©<U¤6O¯?M²BK£DU\9dNX¨PM§KC­MIºRN¹KC®QH´MOºHP½FP¹DJÂIE¾LK´RGµTSÄHN¿DOÃBIÈ=ZÂGY½>T¼EYÃFV¿JYºR[³Hk®Dk¹Nj¶[t¬Ww­TyÂ¥Qz§_\82¯^~¨R\85­T\82²N|·K\83½HzµL{¬H\80²P\86­[\8b¶[\84¸^~ÂR}ÄT}¼D\8dÆF\84¾D\8c¾E\88®;\8a­<\86°G{²At¯Lx´N\84¬P\80²Q|¯I\7f¤X}¨W\81\9f^\86¤g\86¡d\9a¤i\9ec\8a±p\8f«`\88«p|¬n\8d¬n\88¨b\86\9eh\8c\9e_\92\9e[\84¦c\8a¬X\86«R|¢[\8a­Y\83©M\8fÂ¥[\89 Q\97\94S\94\9cQ\8e«e\9b l\95¬i\9fÂ¥e\9b\9fd\9a­g\96Â¥d\8a\9de\84¢py\8fow\9ag\83\9dV\82\8fay\9bf~\96b\81\8ba\7f\97h\80\8e[\86\9e`\92\95[\84 Y\82\9cX\83\8eK\80\97]\8c\8cR\87\96Wz\86Y\83\87e\84\8e`\8f\9bX\8f\9fZ\99\91U\96\9eX¥§S©\9fe¬ t¨ªb¢h¦\9d[¥«b\9d¤_¢©\§\99h\9d\93h\9d\91l\9f\97i°\8fV©\94W´\9cT\9f\9d]\9b\9aa\9e\9a^¨\99_\9e\9bK\9b\94P\9a\89J\94\94[ \9dO\9b\9b_\9c k\95\9dg\90\97b\97 b\80¡`\80\91T\87\97T\86\92D{\8dJ~\8ePx|F\83\81Nv\84Wq\7fUm}`hxUf{`_\8fZ\~Q`\81T]\83V`|Ri{UfiR[fUedXUbQUbSTed[]b[^aLQQTQTJUOGK`OGd^Sc]S]ZU`iO]iTbfZ`gXhjLhWLrSEh^LcVVjTXaZTg_YrZXn`UxWTy[MrUSw\Xq]X|P_xEW{GS}TM\80JL\80HJ\84GU\8dS`\84M`\8aTd\92Wk\8dJ_\8cV`\8eCh\8cU^\95U[\92RS\90PP\8cZV\7fVY\86cJyXH~YT}XO~]Z~P[\80U]\89U^\86__\93dI\95f]\8aj_\95_Z\9cRV\9aN\¢YY¡PR\99MI\9bMM\98HS LT\989M IE\97BN§AN¨<Y¦DQ§AC®CQ\9d6O¦6O°=N©HI¨OL\9cKL¢IR®GK¨RQ»ME¼FL¼KQ°@W²CS¼G[Ã@W¾>E±GS¹KP¼ES»QYºATÀAP¾HF¼PT½H[¶URºSWÃHbÂH\¹Pn°Hs­Hp¯Hj«JoªNu§Jw±S}°X\86 M\88¨S\8d§K\88¯M\87¬O\80¨C\85®M}»M\87¯V\82¹Y\7f¶L{Ã[\81ÆI~¿E\8eµH\87¿F\95°G\88°?\8aºA\86³K|¬P\88±Sx¨Z\81µ`\83¯Q\89¬R\81±W\8b·f\89µh\8b¬h\92±`\9a\9co£e\9a¢h\98£a\89­e\88¬h\8aªm\96£r\94§g\95¦[\8d¡W\8e¦\\81¨Z|¬]z¨O\85«[\8c\9eV\86\9c[\8c\9fT\97\94R\90¡Y\95¢]\95 q\90 l\90Â¥d\9f¨r\9a¤t\89¤q} iz\9ed\80\9ejx\9bh\80¡\\83¡d~\94\}\91Sy\96Z\84\9bd\8d\92g\8b\93`\8d\95Y\81 ^\81\9aS~\98S\80\95U\92\90S\8f\92[\87\8bX}\8dc\82\91]\84\91X\91\9bZ\99\9aQ\92\98V\96\9c]¢¥k\9d§n£¬q\9c b¢\98_\9d\95]¥¢a¡§Xª¡^¤\96` \95d¤\9de¯\9bV®\95V¯\8eV®\90\£\96ZÂ¥\8fS¢\98J\9c\8dO\99\92T \8fT \8e\ \9dX\9f\9a]\9f\98l\96\90e\9a\99[\92\95m\8b\97m{\9a_\80\98Z\80\94Pz\90C|\88>{\85Hy{Vo\80Zqz[l~_cz^T|aV\89PV{P_zT\vT_zSbqSfg`[o]alY`nNb_Q]cYYWaPWaJ\SGUUHMcOIbOO_SU`XVb_YZZPYfVWdKihToeMv]St[Hh^HfXPb`Yg\[vW_tcUn^QndQpdSsdMvlYoc[tbO\84OO\82HS\82NO\86VL\8bYR\94\R\8bMR\88V[\8cNc\84Ih\8cM^\8dDY\89HY\97VP\96RV\91WS\8dW\\84VX\85aS}VQ\86[K\84bI\85_S}]N\82US\86]`\8b^c\90X`\8b[Q\92eR\8de`\8fW[\96VZ¢QW\9fU[Â¥LT\9bFK\9aAH\9dHI\9bGO£9O\9aFC\9cFB DHªAQ©9T¤6G£7O¢8M¤GI¤HP\99KK\9eJF\96RJ\9bLK\9bKU¬PS´CM¼?Q¾F]¹C^¶@T»MW·BP²>T¯CN­IN­MN´LU´DV¾DN»KFÄKJÄHQ½SZºU_¹Md·Ki¼Na½Aj­Ds¬?k´IhµKn¦R\7f¬P\8e¨K\8d\9fK\86\9dG\8d¨N\90¤G\88 B~§I\83²K{·J}¶C\87¹I\82Ã…Y\82ÇZ{ÃPzÇR\80¿V\8d·J\93¸E\8f½C\83¹P\88¶M\8a¸R\82³Q\82¯Y\81±d\85¯b\95¶W\94Ã]\94»e\8bºj\8e¶f\90§^\9d¤d\99^\93\9dm\9d\9cl\96­i\8f®d\95«q\9e¨l\9b c\94¤k\92­b\9b¬Q\86°]\8aªM\88°L\88ªQ\83£Z\87£Y\8a\90\\97\91U\9b\9e_\89\95a\87\9fp\84\9dd\8e¢d£\98g\90\9de\8f¡c\84§j\81\9dm\82\9boy©b\7f¢kx§e{\98b\80\93Z\86\9dY\84\9fX\86\95c\81\8da{¢`\86\9aU\86¢Lv\9a^\87\92X\93\8dX\95\8bT\93~b\8d\88a\85\95Y\89\8fZ\8e\94N\8e\9aX\8b\9d_\9e¢Z\99¡[\9a j\9f¤a¦¦gÂ¥\94i¦\9e]£¡S \9ea°\9aZ¨\92d¨\91]¡\95b°\8da©\92U¯\87^«\93d¦\8eS¡\95X©\8eX¢\95S¤\92Z\9c\83VÂ¥\8cV\9e\8b\\99\99_\96\8bm\95\8dj\89\91h\95\96n\86\94nv\8f\}\99dr\98Nu\88Gn\87Th\8bWt\7fXe\8d\o\88Vn~Y[~]U\83i[\84TY\7fJb}X[\80S_pNghKfcV_kb]aRhaVeXT[bRLZ]OPZE\Z@KWJNfPO`KMcQPbOVgPSiSV]]K[eQ]fMt`Fs_Vs[WjZUcaQmUSn^XwhPg^Pk^SsgOlbRwaOp_KsaZycSwdN\84]R\85QJ\84_F\91[R\8aMQ\87GN\91NY\96GX\92T[\93R\\92L[\85UO\8dWW\99VX\99^N\96bQ\89^P\90kO\83fZ\85WQ|YKzeZ\86eU|bT\89b_\85^]\8a]`\97ZK\94]V\96^T\98VV\89P[\93PUÂ¥V^£NK£IJ\95ND\98BM¡GJ¡4G¨@@¡HE£AL¤8W\9f@Q\9b>R£<J\9e3I\9d?T\9d?O\9dLL\9fNV DR\98KO\9fBNªOW«BU¶C_¹=fºE\°Kc¹DZ´I\­HPµIM·IP´JP«?T·LQÃ…BYÇHH¿LHÄGW¸O[¬I_­G`¼OW½Ei°Mmª<p²Fg²Oc¡T{¢Lz\9bS\8c£Q\8a\9f@\92 A\87\94F\8f¢>\90¡E\82­E\89³S\87±T~½U\89½M\86ÃU\8bÉO\82Ã…X{Ã…N\83ÆO\8a°K\8d½Q\82¼P\80¸S\85¶P\91ÃT\8c±d\95·`\91²b\8bºf\8dµg\92Ã^\97¼h\8dµj\9aµh\92±c\9c±Z\94]\9f\99h\9d¢n «p\9a©r\97°h¡¯f\97²p\99§i\94¡b\98¤Y\94§S\8b«[\8a©W\91 K\9b¤N\94\98P\9d\97V\98\90_\89\96k\89\8fp\82\98e\86\97r\94\94q\97\99k\95\9cb\8d¡\\8c¨g|¦c\84 c\82«^\81­iy gu£h~\9ac\81\92a\81\95]\89\9cV\81\95_\7f\97Y\82£\|\9bU}\95a\86\95\\8c\8bR\89\8fQ\8e\81[\88\7fY\8b\8b^\92\83Z\95\8a[\9c\8aY\91\91Y\9b\8dS\94\99Y\9f¨_«¦a¯©g©\9e]©\97]§\96_°\95]¬\94U®\8fV¤\90[´\8fT²\8b^¨\84`¯\8ef«\8ee«\95a¨\91Xª\8eQ \92[\9e\89^\9b~[£\84a\9d\89a¤\91a\9c\89f\93\8fd\91\89e\89\93_\8a\8eg|\88kz\87dr\8a^w\82Ql\85Zn\8bba\90a^\90_i\8e`f\8dcY\92lT\84gZ\87fT\87UY|MWrTTvNXySblZllVg\^b[]W[ZZ_VKX_NV[KTYQR^GOjFNeSQnOKeOMaNSiORhYH_[LkUSgZLqdRs\Vi^QjZVnSWrXXsgSkfNmgYucYogNniRjmStaRseUvjY~gV\8d_Q\8a`I\90UH\8fIU\90JP\92EQ\96PT\94X]\93OZ\8bZ]\8fVR\92VR\95[T\98\T\8dlQ\91nR\90jZ\84]V\7f]Q|_Q\7fe[\8a`b\85jY\8ea`\85hb\91lV\92aT\8f]T\93_V\8dWM\8dYO\9aTU\99JS£IV¢DL¦FM\9eCHÂ¥CD\9a<D¦@M§?I¤@G¬6V«3[¢;P¨8J¡?H\9a;P\9c=QÂ¥<[\9dDZ\9e?Q GTÂ¥GO«>T©6\«;g´>]¶9d²A^µGdº>c´CY¬CYµATµCP³?MºBKºHR¾MK½NQ»KS¯MR©SM©RX±KVµGb¬>a¬El£=g©Fl£Mm P}Â¥D}\9cI\89\9cF\8d\93G\82\91E\8f\9e@\8f¬>\8a«L\8a¯R\80±L\80½M\7f¿S\8f¿Y\8d¾N\8a¿R\8fÄN\89¶L\90·J\88¼V\7fÃ[\86»V\8fÂ]\89Âb\8eºf\98±_\95·f\93³d\90¿j\9d¼j\99¾m\98µk\9c¯d\9d±b\92¯a\95b¡\9dc\9a©m\9aªu\9a¯l\9a°n££w\9c¦p\9dªv\8c§`\97\9fe\91¨_\8a¢[\88©P\91¤W\98\98C\97\97[\95\94`£\97Z\8d\90o\88\92_\8d\8ek\97\99n\9e\9eq\9d¤g\95\9bb\94§e\81\9eot\9bo\83©r\7f¢a{¨ds\95l\83\9f`{\8fa\7f\96b\82¦d\89¡Y\7f¡_\82©Z\82¤X\88¦Uw\9eX\7f\96W\82\9a^\84\8eX\8c~_\7f\89W\82\93V\83\92N\98\97Y\91\96P\98\9c]\8d\99T\92Â¥V¢\9cT¥¢d³\9cf²\98X¬\93U¶\9eP§\92T­\87X®\8dT«\90N¢\91I¶\8dV¯\82]´\8eh©\95]§\90R©\96Y©\8bU©\8dZ\9f\85b \91d¨\82_§\8fZ\91\8cf\92\88^\8c\8fZ\96\8ff\82\8bY}\8d_\83\86ix\8fds\7fUv\86QqwT_\84fW\8fY^\8dc^\83eg\90``\87bP\8fj`\84aW\88YMu`]wV[mXapZ]i_\gZgUYbTTNSPU][IYQHOYTDaGOWGGZNJlQPbPVcSIdUJ_NSfNSbXOn_KkUQrdUsh[u]UgYVvRNnXV|[OpVS|aVx\_tXUq[Vm^WnaXvj[}jS\89[R\83fD\86TT\96HE\93LI\84MT\95QO\89SL\85ZR\86ZR\8f_U\8e`K\92dK\8fWL\98cY\99cQ\8ega\90nT\92l]\8cg\\8b^S\89[]\8a]d~h\{ad\8cqb\81[V\84]O\90]T\8b^]\8d_]\96^X\8dXS\95OU\8fJQ\93BL\9cKE\9aAF\96=@\927N\946D\97>D¢2W©?K¦DJ¨<P¦>W\9d1L\9f5P\9d;U\9cCZ\9fEe\98Hb\92=b¦IZª7T§9[Â¥K^´I\µ8i±D^­Ec³Bgº>^¹9S®EU¹GZ¯JP±CL·CS¾EYÃ>[¨BT«N]©E`©Nc²S^­HX©<g­?m¢=g¡Be¦Gu\9dF\8a\92O\8e\9dC\95\97M\8f\95@\85\9aL\94¦;\94 I\89´W\83µS\8d©T\89»L\88»P\8a¼G\80ÃP\89ÄY\84¼O\8cÂP\8f²Z\84¹\\8c¼[\88¸\\92³T\8e±\\9d»a\9c·a\9f¸o\97¯e\92¸h\8f¸j\9dÂh¡±_\97¦^£¦Z\93¶\\93`\99¦`¡¤n\9aªn\9b²t¢¦n\9a§q\92®t\92¤z\96\9en\8b\9fk\88§_\8a£]\97\9eN\95¤T\9b«I\8f Q\9a\9c`\9f\95^\9f\99f\8f\99e\93\9ch \9bh\99\9ap\9f£d\9d¡f\91¤_\87¡e} qt¤st¤p}¤hv\97ot\98g\7f\93k\84¡h\8a¦k\86£c\8c£Z\8a®U\8d¨W\84Â¥Y\80\9e[\84\9fV\85\97[\89\95]\7f\8aW\84\8a^}\8dS\82\8cQ\89\96N\8c\95U\95 M\95 T\9a¢[¡¬Q¬«P¶¡Y²\95Z²\8dX³\95M°\93M¬\8bV§\92M£\87K±\85O²\87Qª\8dcª\8a]±\97V®\94]²\98R¬\8bX£\8cf¡\92m«\86c©\89X£\86X\8e\83^\93\90a\96\95b\95\93X\8c\8cS\88\88Y\85\91^|\8a^t\85^k\82XgzVb\81X\\82WZ\86a]\82cd\83c[~fQ\81hU\84hXucQvVVvZTjXXg`[l^QZXUMX[JSUOZ^N\U[XQRRTC_PG`RCdGGeHSaUUYTPYYMdNEnMEjPHlPMoZZs\]ybRscTmXJxcVx^YwW^yTZxWX\7f\cwY`tZWv`OmcSvXS\83YX\80fN\80fF\90^C\8eLO\8aNX\89JR\88WS\87TE\89QG\86WX\89^O\97dF\9f_?\98\G\9bgT\96`Y\97iY\95d_\87__\87kU\8b]U\8bZa\83hf}l`\81sW\88h_\8c`P\84^R\8bZT\8d[[\9cXS\9d\Z\94XW\8fIM\90RO\8dKJ\98I=\95H?\95CI\90CO\94=P\979P\9d<I\95>Q\98KJ\9fHO¨;U£3W\99<X\94?`\99@X\99?_\8fC^\93?b\8dD[\98>Z¤?b I\¤Cc¯EgµEm´Ge²F]¯9Y­Cb®@Zº=R¶KX¯>T¯@V¼?\·<e¨7f Cb¤Bi¯Jd²Je±K_°<`¨;f¬=o\9e@n\9e<y\9b@\85\93D\90\90J\94¤F\9b¦C\97¬>\8eªE\93²S\93¯Q\82«K\8c°K\8d­J\8c­M\82­O\83»Q\82ÂL\8e¼W\91°V\8eµY~³X\8c»]\88¸]\94²U\98±[¢¹b\9c³n\98³h\9d¶p\97¯p\91­f¤µe¥¶h ¦i¢«^ ®\\8fX¨\9eU\9d c¦©e\98µa\93«l\93Â¥m\97\9dv\92 j\92Â¥l\95\9dc\95\9e_\95¨\\95¬`\91ªO\92¢P\90\9e^¤¤\©\99c¦\99b\99\9b_¢\96f¢\9bp¡\99k\9c¢r\8c\99o\8e¦k\82£i\80 o|\96vs\9eg|\9ae\7f\90bt\9ba\83\93g\87Â¥n\84 j\86\9ek\8e\9eg\82¢^\88«_\85\9eY}¢X\86\94a\88\91_\81\9cc\8c\88i\80\96f\86\8d\\88\90S\88\95R\89¡T\9c\9dQ\95\9bH\9b«Q­¬Xµ\9fT¯\96W±\8dRª\94T±\93N¯\89L¯\97P´\85A²\82HÂ¥\8aJ¯\92U¬\93Y«\93S¯\8b`­\95a¯\95Q¦\8aWª\8c`¢\84b©\90[Â¥\8fc\95\8ce\8d\88[\8c\82f\97\92[\95\84[\94\82_\8f\93R}\93]v\88Vo\89Qf\86X`\84Zf\86\Y\89hS\80iU\86[T\7f\^\84_P\87iS\87eS{l_uXVlaSk[de\VkbYVSQQTRMZXHPOP^PSULTK[@VZN^OJaO?jHJgPL`WObWHoKJlZDuMJj]Ujb`vaXo`NoXUkWSr\[v\Rn`_\80QZsUS\7fMV~YUy[ZwRZ|_P\82YR\86NK\87`C\84^A\82ZI\8fHU\8cFT\8cQK\8aKO\86OA\88_I|YL\8d^N\87mR\91_J\9abE\9fbU\96cQ\94pW\91fX\88aP\91m[\88[Z\90S^\8b^Y{ga\83g[\92jX\8acQ~aR\8fTa\95V]\8fSR\8fYM\94MJ\8bVF\8fSM\8bJ?\90KI\8dJE\93JG\91HM\8d<H\98AL\91@M\94FT\94CU\97>W\987[\9b:S 6V\959Y\9fG`\9d=Z\8dC]\8dC_\8fIV\94EU\98Hb\9cLX¤JbÂ¥Ae¦>aªD^«<`µ<Y±:^¤<YÂ¥@\©EY²;c«Cb»;Zº9]²H\§Cj£Gi©K^¬Mc²Hn²<gµAw¦9jÂ¥9u\9fLz¡F\89£M\8c\98H\97\95@\95Â¥F\90¨E\91­G\96´J\86±R\82¬K\83©J\98ªL\89¨I}»S\8c½V\8bºV\8e­U\92µT\86§S\87±T\87­e\96¶Z\99¹Q¢·T\99±[\99ªh\9d³l¢­h¢¬j\99¯a\9f¦b\9f­^\9f§a¦´d\93¯W\99T©\99Wª¦cª¬]£®_\96 _\95¢n\92Â¥k\9c©h¡£k\9e«k\91¯h\95¦g\91¡h\99\9f]\94 U\9d¡Z\9f W©\99U¦\94V¢\9ea\9b¤Z\9f¡d\9c\9em\9a\9ev\94\98n\84\9ds\85\9ch~ rz\92k{\94t\7f\9am}\94m\7f\9ef\81 p\87\9bj\7f¤i\85¦l\7f\99l\8e\9b[\8d\9cQ\90¢X\88\98d\89\99`\87\9bh\8e\96f\87\93d~\98c\82\95^\86\9dT\8c\94L\8e\96T\9a\9fU§§M¨¤R³¤N± J¯\96W®\91\¯\90Y´\93U³\94O¿\92Q´\84D¶\7fD°\8fK©\8fZ­\8fY£\97Z©\98]Â¥\8f^ \87_«\88bª\86h¤\83]¨\8da\9e\87i\99~j\91\83h\92~b\8e\8aX\8e\88V\8c\81_\88\81Z\85\8bR\7f\83[{\87Wk\8aPc\84Z^\81X`~eS|lV\82d^\8f][\8ebY\84bM\86[^\7fdaz[^o`cm_]_W\YTZM\UN]OG_TPYQHVPLNTOORK]R?YMCZVG_PD`YI^YO`TSnVJk]JrRW{R^u_UzcTm`Qj_Mf_Xa^\j`SkRYwSS|I^\80MY\81ITzMQwPV{SNxKK\81OE\83Y@\84YL|[M\80PQ\88MU\90LK\85UB\84MC\86ZC\82bI\83eM\83eP\90cF\99nK\9ftF\9drN\97iP\8doS\89l`\92_[\94Te\8bXd\8a[X\89VP\8bcJ\8afP\80aR\87b]\8e^S\94OX\8dQM\8fOO\92XF\8dXH\8cQ=\88WA\87N?\8cTH\8aSC\93OK\98GM\8b=U\88FJ\8cFJ\96BH\93BS\88>X\8e@O\92EV\9a>[\99CW\93Cc\98C]\8c>_\9aAe\98FY\91MX\98Qa\92J`\9cI\©Kg¦<d¡C_«;i°;`§B^®?a©;a®3e¸;i¹Cd¸<e©=\Â¥Bc§G_£Af®Ci²AnªGo°>y­Fy¦B|¨H}§J~\9aL\7f\98B\8b\95<\82\9b?\88 J\95­P\91²L\8d·S\8c¹^\92®Y\93ªX\8b®K\84¶M\83¶P\89°R\8d¨]\8a«W\8aÂ¥[\85§g\87ªa\93¯f\95´Y\9dª]¢«`¥¦f\9c£b\9c\9eZ\99\9dc\9d©fª¥e¥¢c ¯d¤­`\99¬P\94X¤¢V\9e«V\99\9e[\9a­a\98¬k\9a¦b£«p§±s ­p\97 m\91Â¥]\99¯d\8f\9fe¡©c\9e¢^ \9eX\9e£W\9b\95P\9d¡R¡«V©¦]£\9a\¢\9al\9f\96q\8d\99m\92\9ef\83¢h}\9cuy\9cjt\93g~\93i\86\95c\83\96hx¨n\86©l~ªq\84\9brz£l\89\9cg\94\9de\83\9be\8b§g\88Â¥h\92 h\8c\98\\80\8eW\80\96i\81£d\87\9aN\94\99[\92\98R\9a\93U\9d\98V¡\9eP­\97Hµ\9cL±\9bRµ\8dL¼\88X°\9aX¯\90O¸\8aK®\85C·\85E´\88J \98W£\8dSÂ¥\90^­\8bN¨\91S¤\86R¦\86]ª\8d_©\80d£\7fW¡~h\96\80^\8b\82h\94\85Z\97\7fd\92\8fZ\80\90\\81\92[\82\85X{\85bz\8e]o\87\b\83Td\88_f\85`Z\82pUzhN\87eO}cR\81]V\7f]^zgWybci]]qd]f\fRaZT\]U]UTjTP`WL\QMbSMZQO_QGQM=_PAhQI_RDhNU`YNmNSbPLlMNq[ZlOMvTOl]Tg\QrfWf`TbeOiQR|YH~MG\8aUK}MUyKN\83VN{SG\82NN\87YM\81X@\8fRK|ZR\89XI\90PN\93FO\89U@\90PE\93^B\82d?\8flG\80kF\87cA\93tP\8fvP\98fM\96gW\8biQ\8beU\90ZO\94]]\8eWX\87aX\90UX\86eW\99ZI\8aVW\8aTY\92UR\98W_\86XL\8dQS\90ZB\86T>\85]K\84^H\8aW>\90UC\8aYC\8dOF\89KE\90>Q\8aEG\8dJP\8cHY\9aCW\98>O\9eF_\94F_\9eFW\9e<i\92Ag\86Cc\89<]\8b:_\9c=j\8f?e\9bVk\95Mb¦B^£<i ;r¬De§;f¢9`´<c£FX @e²9a´?c¨2g¯?dªCb¤As«Df\9fAs¡=d°Am§:p¨8z«=w\9fEn§Ht©Fw£E{\98B\8e\95?\84Â¥B\93¦@\8e¯Z\87´M\8dªL\85§[\94§U\90®P\8e©A\94¦L\91±R\89«R\82¬O\90¢]\82\9ca\84Â¥X\96±_\95°`\98¯a\9a®Y\9e\9eZ\9f®g\9b¬n¤¦f¤\9dj\96\9b`¤\9eY£¡a£¬cª²Q\94¸[\8fX¤ªa ¥h\9e\9f_\9a\9fh\9b§o¦¬i¥«p¦§q\9aÂ¥l\99£]\92¢_\98§f\97«d\99¦Z\9f\98V\9a\99U\94\99P\9b\9fP\9a\9b\¢§U¡ª[¢¢g ¡a\95\91c\8f\92o\90\9bg\88¢my\9asx\8fuy\92l~¡p} sz\98i|\9eivÂ¥v}¢g\86\9di\81§`\81¦a\89§h\84£b}Â¥i\82§_\8b\9ed\82\9dX\82\94a\8f\9f_\8a e\8a\99Y\99\9bO\98\90I\9a\8fV\93\8dQ\9d\97F¤\93Eª\9b>·\90H²\88E®\93Nº\90V¹\8cO±\85W²\87N­\88P¦\89C¤\8fN§\91S«\93I£\8eO«\8bT­\90S²\8bS·\84a®\7fc |Z }X\9c\80^\8f\81a\94\89c\94\84]\83\94X\83\96\v\96\t\86Zk\8eah\92es\88Wm}[j~]_\82kQwtQqmKoeQ|eVz]W\80c[zcWmb`c_febcZnd\ic^^`X^`UjTTdVCeMBgP?hRBgIDVOCaNFeRL_JJcOT\QV`PW]Y[iTUkVNnLLrNYlSVxZQvcZvdZgYRlWKzXK\88\C\89RG\90DG\85GJwHFzVL\8aSI\89_E\84\@\89X@~OI\82PM\86LH\95HB\8dG=\94RA\91a?\91f?\89]@\86a>\90gD\94oF\96jM\93iS\8cba\8ae`\91^T\87WR\93`Y\8dd]\95[`\8c`V\8bdU\97WF\8aSE\86WR\90QQ\91WU\8d]V\81\Q\88SA\81NB\82Y9\91X>\97WK\8fYJ\90TJ\90PA\88?G\88>I\89?M\97EU\8bGU\8fGY\90GV\9fLd\96Q^\96L`\96E_\97Gf\8cG_\858i\956o\93=l\8f<k\8fKs\9b<w\9f>k\99Fo =o¨8nÂ¥Ch¬>^¯;e±FZ¢I]©8]¢4c§?d\9f;hª?t©Hq°DtªAr§>i¦3m¤>n\9fCo§Cs\9dFl\9b;w¡8v\939z\95@\87\94>\8e\9f@\8e©L\94±S\8e¨L\93Â¥U\8e¡S\87¡P\8b©M\91¤H\95¨O\91¤X\82¤T\81£P\8e\9bR\85\9dX\8b\9fY\9a­[\97ª_\92§j\8e `\8c\9eb\95§f\95ªo¢«b\99\9da\97\97d¤\9fX®¤T¬¤V ¯^\98´W\99d\99¨d¤©i\98¢h\94\9ag« n«°q¡®r «n £q¡ªh¡°d¥ªh£ [¡¥U¥¤a«\9fO\9d\99I¤ U¦\9aP©¥X¢£b\9a\9ce\97\99[\8c\91k\88\9an\92¢f\83\92nx\92i{\9apx\96js\9bmr£r\85¦t{\95o\81£wy\9bh\83\9be\84¦c\84\9eb\8f£d\8dª]|¨`|¤b\85\9e`\7f\91d\86\8c_\88\91a\92¦U\94\97Z\9c\91S\98\98E\96\8bR\9b\87A£\98D£\96M¦\8e=¬\8c<½\84I´\83H·\8f@º\82B¸\87K¸\7fI­~K´\83B­\8c@Â¥\8aS±\8eC¦\85I·\86F°\92Q±\8cQ®\86]·\8cY¨\87W\9e\87g\91\89X\98\8a\\94\8db\94\90d\81\92_\87\91`\82\85g|\88dl\94Ul\96_r\83Wf|[l\7f_hxd\tsUufTslZ~oX\7f\_th[ke[ggUnjkflbbhjYpZQbfTfdYdTWpRVoZNh[ClNH^PI_MF^LQhKPiRQcSPgLQdVZmU[h\XlVGvVKjWUjHZwPXveSj[YnQJqTDoXCzQK\8eKK~LK\89PK\83KS}\I\85QH\87g@\90SB\87\:~^M\86MK\90TF\90RG\8aV?\8fP9\98P@\90[F\8efH\8ei=\87a@\89hK\99oJ\92i\\98`^\8ea\\85c[\87SM\87dY\86hZ\87^Z\92WX\8dSK\9eRG\93QG\8cXH\91OK\8c]R\89RP\80TA\88ZF\88O;\87S?\8fT@\89[A\8eTO\89VO\92KH\87FE\8eFM\8fPU\91IU\90TU\89P\\94GX\9aK`\97Ee\9dR_\9dDq\9fAl\93Dn\91=s\94@i\8cIg\87Ky\8fAp\97Ai£Ic\98Dv\9bJu¨Lt\9cEc >^©5h¢=`\9dKb«Ah @r\9fCk\98:g\9eKyÂ¥=l©7x£?r\9d2m¦/m\9b1s\99Ce\9cEu\9d=v§9t\9b9s¦:|\959\8c\9e7\7f«=\8b§A\90±O\91£P\94­V\8e\9fU\92\9cU\92¢M\87¦J\8d\9eW\86¡T\7f¡R\82¦W\8e\9f`\8c \\91°[\90²k\8e¬d\95¬l\86Â¥j\9b¤h\90§e\9e¤i\9fªr\9a\9cp\91¡g¢¥T´[­¡a¢©[¨´N©m\92Â¥`\99ªj\98®c\9f£g¯¢b­¨c®©m¨°p\9c°p\9c¬s\98©d£­]«¡^®¡W±\9a[ª U°\97S±\9aQ­\9dS¨£N¥¥X¢ W\97Â¥c\91\98c\96\9cf\8a\9b^\89\9ee|\98]v\9eau\92p\7f\9crx\9bwv\9dt\80\9dt{¨qx¡rz\9dk\86\9dg~¢_\87¤d\87\99a\84\9be\8a d\81\98g{\9fi\80\95h\82\98_\91\9c`\98\9eU\92\8eY\8c\84P\93\88H\9b\88B\9d\8fF¬\8bH¬\85B¶\8b<¼\857´\80B¹\86D²\80D¼\80L»}Gµ\84?¨\90D©\8aF«\7fJ«~P¨\89D±\8eQ·\85Q¯\8cY¬\89V²\87^ª\80d¦\86a\9f\82_\93\85a\8f\8de\90\8e^\8e\87g\80\85_\80\8fau\90at\91Xj\96dg\88`h\88ng\81nhxw_xn^rgSkoRur]vkXqiXpvSml__rcUq_`ga[ifYoZRu]WkbWlgIs[KkNFiRKaLIdKFiUEaNNfGNiNQrPQlSKuZKrVQjaGpZNjVWqNZwZVxUMvOJuYP{ORrNFxE@\81LF\8aDD\85GC\8bJF\86ST\8caK\90]D\84`=\88WC\89RK\7fXE\85OJ\87WA\94W>\93O@\94V=\90ZF\84Z=\89j@\82pG\8biD\8cbR\93gT\98[V\8d[Z\92^]\89UV\8e^_\8dc]\8fXP\97XO\8dOV\94WN\95SP\88^A\8bU>\84TD\85TJ\8eO@\8aM=\85QE\8fW8\91X<\8d^I\8fSH\8bJQ\8eNK\94HM\96PD\91[L\8fUW\95R[\91OY\92Dc\96E\\9f@h\99Gg\928m\95:t\9b5p\8f?n\89@k\88Es\92;j\92<q\94Jm\9aIl\99Ii£Hp\96Oe\9aGf\97:iÂ¥>c\9dJc¦Dg£Lh\9eBo\9dAz\9bEw©Ao§Ax\9f@\81¤2~§7|\9d1q\9f,p\944h\931g\99:o\98Ao¢<n¤An :\7f¯7\83¯E|¦L\88«G\84­J\8d§U\8d£T\8f§O\8eÂ¥U\81\9cJ~\95N|\9eN\83\99R\8bÂ¥`\8b£]\8f§a\8d§k\87®l\8dªj\88§m\8e¦g\95\9cq\9b p\9c\9dh\9d\9cb\9f¦m\97«h§¨`¦£a¨¨b°©W¦¨V©i¦µf\99©f¢¬s ¨p¨\9ei¦­l®µy¦®l¤·l\9d¨n\9e¶k\95©`\9b¯n\9f¯`³¡Z­¬WµªT¯©\° ^\9d­e¥¤c\98©j\91¤a\8d\9ci\8b\97^\8e\8fi\83\95_v¡i\85\8ees\99k\80\9fm\82\9alv¢v\81Â¥j\86\9do\86¤e\88«h\87 [\8a©g\89¦[\8f©f\8b\9bjz¡g{\9bk}\99b\82\92g\88 l\93\9e[\97\8fW\90\90_\92\8fP\8b\8cH \8cO\9b\8dN\9e\8bK§\8dP³\88I´\85L°\89<±yEÀz?½\85A¶~C¾zB¶\8bE¬\85D¬\80F¬\83JÂ¥\84E¨\81K­\86RÂ¥\85X°\8b^¤\83S\9e\80^\9c\8ck\90\8d]\95\81f\8c\93[\8d\88]\86\92d\81\92et\8a_n\92bm\8fXh\8fXc\92ai\83_e\7frd}q_ukh{oXtbZ|oYjnRejUes]js_lvWZd]U`Y\gQPt[Lh\QmbXiVUn[JpYEmMJaEB`JFhHRdIRrBQrFFiWKkNUpLNo\MqOJmYQgKXtGbwMTr]VoYUjXVyQNs\DwZF\8aLD\87Q@\82J;\84VD\80PU\83OR\92QC\89P<\8eUD\8dXE\86fG\86V<\8e`8\92]7\8eW9\87UJ\88PM\8deD\8chR\82iI\87_B\88`K\88gS\93cY\90gV\8fdV\8cY\\86a[\8eiV\8fcY\8abW\8d_T\8bUW\89_O\8b`R\8b]O\87VA\85SE\80[G\86\C\85XB\89S<\85[?\8aUI\8fLR\8cGK\91JL\8dQC\95EJ\84MN\85IZ\83OR\89T[\98Gd\8fAe\8fA^\97Mm\9aKj\96Ci\96Hm\92Kh\95Er\8cNz\8a;r\97=m\90Jq\97Js\9eKoÂ¥Qq\96Ff¤Iq\9c=`§@e\9d:g\93?d Al\9a?p @v Gq¨?p­=o¨6v¢*xÂ¥/v\9c7q¡)w\9e4z£?q\9f>m\987h\9c2m\9dBx C\82¨@\82³It±H{¢O{ªJ~°G\8d\9eG\92§A\90\9fP\8e\95V\85\9dI\80ªY\81¦U\87ªU\8c\9cd\87\9cZ\8d«e\88³h\90­`\97§c\8f­d\9d¦h\93\9dk\9d§l\94ªd\9a®h\93§a ªY®§Z¯©eª³Z¨¨P¬o¨ªo\9e©m\9c¤t¦\9bq«¬g©¯m¥¨y§°k­­d£¯b\96ªp\98¯q\99´n¡°iª§c·ªa¸¥\´¦]®«c\9e°k\9d±d\91¤a\85 o\85\99a\85\95Y\85\8d^\81\95e\81\9ddz\9ff~\95fz\90^{\9bmw\99j|¡c\87¤j\83¬k\86¯Z\86¬e\8aµe\92¯d\8f¨j\87¤a~\9ad\7f\95^\83\97]\88\9dd\8f£j\9d\98d\9c\93d\9e\97]\95\88Y\91\89N\94\86L¢\8cR¬\89Gª\86T¦\8bR°\7fT±\84G¶xM¶\7fC·\8aM¿|M¸|L¯\84G¨\8cC¨\8fB¤\86;\9d~C\9a\80@\97\86I£\85R£\81U\9e\86S\93\84_\97\8el\97\8fg\91\8cX\84\88Z\88\93X\7f\92c\83\90f}\91Zq\8bTk\95Za\92bk\8e[l\8f[b\86lX~qf\84qb~o^{^WvcUknZeg`jkVlsPdsRcnMYePNcYPgYNtUJsUOqWSr^QkOChI?_ICVQBgONpERtCDuIEyFKlONmLKyZXmYKhPMoIPoNYxWZyUU|QTpSYl]Zw[IzNG\83PB\8cS@\8fP?\94QQ\87VY\8cSP\82K>\83S>\85`7\80]F\87bE\8aj>\84c=\91W>\93[@\8dQB\82QF\85VT\8bgR\84cO\7fcD\82gR\88[O\8aaU\89eL\84mV\80hV\89`N\8ecT\92l`\8ahZ\92eU\8eaP\86]Q\8a^T\83aP{XBx];\80`E\83V:\80S;{IG\80MR\80FV\8aMJ\81SH\83HH\80DT\88IR\7fLQ\80F[\7fSS\84PZ\89Ng\98Eb\9aF_\98Id\9eLa\99Bb\9aNe\97Mr\93Fq\8dGs\93Oo\9eHi\9eDn\91>~\90<z\9dHr\9aCz\9eNp\9dAs¦?f\9dDo\91Fj\87Ov\8cFu\9aLu¡Mm¤Fs¨<t\9e5z\9f-\81\99.z\9c/|\992\81 -\81¡2s\9d?o§3k¤4s\9fA\7f\9c@\81\9cEy§Dy\9eNq£Mx¡S\7f¬I\87®?\83¡B\85\9bR\8b\9cW\90©P\96§U\8c¢\\88¤U\8b¢_\89\9eX\8cªb\8f¨h\8d³`\91¬Y\95¬X\90¨c\95«e\99©b\8d­^\93¦X\99Â¥Y\9c¯b®³]¢ªX¡­Z\9f®Y®q\9a­qª«zªª{¥¦j¢ qª¦o¢¨\7f ®t¥±o¥«m§±k\94«v¢¯i¦¦j®¯i¹¬d½¬b²°i¦­]¤­a¡«_\99¦o\91\9bg\81\9b^\8f\9a[\94\97U\8c\94d\85\92Y\8b\99e\82\8ca\82\8cV\85\9ad\83Â¥Wx\9f_\86¤d\85­e\8b¦b\82¢a\89±j\98«j\96°i\92§d\90\9d`\85¤U\8d£Y\93\9bY\96 i¢\9ek\97\8fg\95\90^\99\8aY\94\84W¦\85P¦\8dI¨\87M«\82K«\83T³\83V±\80Q¶zM±|L­\82I²\88V«\83O°\81Lª\86@¡\86B¢\81H\97\81?\95\88H \8aS\9d\8aV\97\90`\91\8f]\9c\8ea\96\84c\8d\90b\83\8bb\8b\8baz\91ay\86a\86\8aau\92Vv\8cZu\93bf\8adb\8a_`\89kk\81sZ\83dZ\84o\\83a\\7fcXpmYpaYerUaq_ejNklYilW[oNLoOJcRPi]ApWRt]LsZSmKDjPNaSGURFcO?wCHsNP\80JLlOPwFQzLTtZLqRXgNOsPYjTRsKVzJNvYRrJYz[R\83]N~^E\85X;\86TF\8cSG\8aWG\88RX\8aKD\83VC\7fTA\8bY2~W>\85kG\8dZA\89Z?\8e]@\8ab;\81^?{OO{RS\83fX\80aS\7f]F\83YI\82iJ\85ZEzfH\8afR\88nL\85fR\8ffK\8cgY\8ep_\8egX\8ae]\88b]\8c\U|^J\81ZI\81eC\7ffN\87aL\84\F\7fO=~LK\84SH{PK\81VK\81ZP\85RS\85AI\82IQ\82HQ\83O[\81PT\80UV\87Sf\95P^\95Rl\9bFd\8cG^\9aPk\8dSo\97Mz\91Km\99Rg\95Hr\94Ap\8e:\84\92E\84¡E}\99Lx\98Ks\98Np¢Lm\9dJo\95Io\89Ru\85Lp\9cNo\9bKz\97Ep\9c0u\9d3|\95<}§:\84\9d(\82¨'\86¦'\81\9a0x\90=t\91:{\9aE\7f¡4wÂ¥5{¡5|©;\83¤<y¬@\81 M\89¦D\82§C\83¦@\92\9eB\89\9fU\8e¤R\86\9dP\96£S\8b N\85¤Z\8c£f\81\99Y\84«Z\8f©^\91®_\8e£`\93Â¥]\95°e\94¬^\86±S\90¦P\92²S\9c±\£ªX©ªT²¬T­£aµ{¤·v©¸n²©u©§m¦¡r£ r\9c¦w\9c«z¥°r¨©o¡­l §i§¨t±¡r¹ªk·®f±±g¯¯g­·g¡²e\9cÂ¥a\9e\9eg\9c\95j\8e\99i\90Â¥_\96\9f\\92\9cY\91\94U\84\8bW\81\8c_|\90^\81\97Qz§T\83¨Y~®Y\85¬Z\8a¦Z\85¤h\96¦d\97¬j\8c¯b\8b«Y\92¦Y\90£b\95 Z\93\9eX¡\9ed£\9dbÂ¥\97Y\9d\91\\9a\8fX¢\87Q\9f\80R \83O\9f\88K©\8bJ¢\8dN¦\84W­\87O§{T°\7fY¯\84W¯\8aV­\85S¤\8dU©\88I\9e\8cF¤\82@§}C\9a\81G\93\82R\95\88[\9a\90`\90\90c\95\8bb\98\8b]\89\87Y\86\90V{\92cy\85g{\7fb\7f\83`x\7f^u\8ack\87_n\86Vk\86]^\8cZd\8fhg\87ae\81efxmdmoYpcaoe`ejUkjVilP`oRdlN`kRPaSAaXAeQIhRDrNEuRJkPM`QLdQL]H=aIAtG<yE@zONuNEsIK{GJxRKrIRoKQnOZnURlOIsNMqJGoKQsXE\80VJ\84WD\87\<\8eb@\84VH\80JD\8aMM\8d[F\80Y:\82Z4\86Z;\85[=\89cG\86hH\93^E\97^K\8c\D\8ccL~]Rz\XzUV\7fQV\87YL\80ZB\80gH\83mQ|aHwe@\7fmG\7fnG\88wS\88tR\80zW~zX\8ao]\84cW\8df]\84g]|mN\88^O\87_R\86`B\89SC~XLxVDsTH|\T\85TP\85[X~MV\7fINxIT~STwRQ\80TZ\89M_\84Wd\86Of\93Ti\95Pd\8cNd\8dKl\8cWq\8a\k\8eQp\96Kw\96Hs\91Mz\93C\82\90@{\94C~\9fOu\99Rr\9cMk\95Oo\92S{\98V{\98N\7f\8fUz\8cK}\91K}\99Hw\955t\944\80\9a9~\9c8\7f«0\84¯3\80Â¥.y¡1\82\93=|\91J~\94E|\9c=\81¢:\82¤6\8eÂ¥8\8a\9f@\8c©?\80©<\89¨J\89¡C\8b¦B\90¦D\88«J\8f\9fW\8f£[\8f£Z\91\9dV\86£[\83\9bd\83\99e\7f\9dY\85©\\86¨S\93Â¥Z\85©U\87Â¥^\8a¨\\8f¨Z\8d¯S\9c®]\98¯V¢¦^² Z³\9fe®¦a±sª°f¦³p®³s¥§o¡\9fp¯©x§©s\9a£l\9b¨w\9b²m¢¥j\9f±k««o®\9ej««c½¸m¬³eª±^§¹b\9c¹d\98²l\9bª_\94 p\87\97d\8b\9eU\8f¢[\95¦[\88\97S\7f\93^\80\99c\83\97^\89\90U\82Â¥Q\84\9aX\84¡b\85¬T\91£S\90¯Y\8b§`\94£f\8b®j\8d°Z\94§h\9c\9d\\93Â¥O ¡^\9c§g§\9bc£¢`\9c\91R\94\8aZ\9d\8bZ\9c\83Q\9a\88X\9f\90Q¨\84V\9f\80N¢\80V¨{Q¬~Y±\85V«\82`ª\8bU±\83W¯\8dP°\8cE­\8aM§\88C¤|R\99{N\98xJ\96xY\8az\\8f\88Y\91\8aY\9b\86[\83\90X\87\89]\82\85m\7f\8agq\85]{\7fko\84p}\84os\8ecf\8a`g\82Zd\90f[\83h`|\^\80hhwbexpgm_]kakdYdf\WZ`OWgRS^X^lKT_T?nP<kP8hWGoTJvOCcUH]IAcTFiA:mG?lK5tKCvQ>{AA{@G\81>N\83@QsIXkKToSQoLPuPYmPOxVPnGIxM>w]B\84\K\84_G|RA}TC\83MJ\8cGF}QG\84R9|\A\82^=\83d@\8ad=\8a\G\92kK\85hC\86`G\89YI\7fXOzcQv`SxZUx]E\85ZR\84gK\86kD}`SwkMydK\84nW\8bzT\87|M\81{X\81vN\8bu`\82c`\82d]\85sK\84kP{kO\84cV\8feQ\91`F|RL}VAp\K\7f`K}]M\88[_|YS\85SW\82NM~[R\85NY\89T[\8bNe\89Wj\91ah\92T`\88`^\84Xh\92Xh\94Zt\8fNk\8eTl\8eUz\9a?|\9bHw\9eIx\9a9\8a\8bD{\9b@z¢Hp\91En\9bUt\96Sl\8b[u\93Yu\90R\7f\92I\80\91Ep\96Cw\98B}\8e5v\93B\81\98?\81¤>\80\9d9\85Â¥/\80\9b7\84\9d8{\9b8\82\93=\89\96C\8b¤6\8c¡7\87\9e;\89\9c8\83§9\83 :~§=\8d\9bB\8e§A\97ªG\89¬L\83\9fR\89¡Y\83¢\\91«X\90Â¥a\84¤`\7f\9d\\86\97b\8a\9aX\94¤X\91­Q\99§]\93«`\90¤\\87ªV\95°]\9b«X\95£_\9c§^¤\9f\¸\9d[§¦d¨n ¬d§©qª¤o§¥u ¬jª«r\99\9eu\98¡w\94Â¥m\9a°t¥«q¥¯j©j¥¤k·®a»·a«²fµb«°X\9b®e\9f²g\96±e\8d¨l\91\9b^\8e¦Z\88¤`\7f¨[\85§]}Â¥S\85\9bd\86\9cd\88\99]\88\99W\89\9c]\8b«Z\8e®T\88¨T\93±]\96Â¥[\91¤j\8b¢h\96£i\9eÂ¥e\98¡W¡\9aT\9c£V§\9f^Â¥\9e[§¥U\9a\9aU\95\8bR\96\81O\93\81M \85O\9c\84[§\8eX\9b\80V\9e\83K\9c\82Q¦\81P«zT¨{^Â¥\82Y­\89L¨\8dI°\8f@µ\8fD¨\8dF©\8dR\9b~S\9a\80D\8cxP\8d\7f^\99{\\92\88U\8f\90]\88\8ch\82\92kv\8cg{\90do\96hp\8ch|\88pz\8emk\8bni\89_a\85[Y\8fe_}b\ta`j]anb\xcgt\fm\k]S`e[U\[T\\SSbQWcUScLMlO9gG;nJ>gB:eDEhGFhK;qG;oI6yH2tA6zL2oG;yE;w=K\7f9T\83=P\84HWwKSvQWvORnQ]sQVvKKzJB\81N8}V<\83WF\85RF|QD{OD}NB\86JH\8bJH\82T;\8a\F\87[D\8d_<\89Y?\84dK\8aiK\8diK\81iD~^O\8c\R\86WS\7f\Q}aQyeN|kW|cO|bM\80hO}dD\83dE\8fuQ\89}^\82s\zwOtkL|kVyeR\7flV\87qW}xK}uO\89`V\8bZL\88`P\80]OrZKn_JpVNr^N|XWzXOzOQ~LX{QO{U]\88JZ\93X]\8c[e\93`j\8d\`\89de\80^a~ca\8dYe\92Ym\96Xq\95Ou\9fAv\99Hs\9cA\7f\9a>{\90=\87\92H\87\9cHw£Il\9aOo\96[u\8bUn\92Zy\96W}\91Mp\99Lj\96Dl\95Iu\8d?o\92<s\9d4wÂ¥;\88\9a8\83\976\86¤Ey¦B|ª8\85\9d.\90\972\8f\9e?\85\94:}\9a<\86¤5\90¨<\8c\9c6\81¡:\84\9d7\8b¡=\91¦>\95£A\88£K\82¦W\88«T\8e©Y\8e¢Z\91\9fT\8c¦T\96\9c_\92\9f^\96\9eV\9b¤S¢¯`\9c´^\98­d\8b§f\8aªc\94¨f\95\9e^\94¤X§ªT¬\9eaµ\9b\¬g\9f­j­¤g¥¨k±°b©£c««o¡¥o\97¬j¡£r ¬i«¤t¯¢m¥°e®¬a²¸]º®f¶¶g¯·c¦«Z\9f«^\9b¨n\9b«n\94©n\95£b\91¨N\92±X\8e§S|¯]\89¤N\88Â¥^\82\9e]\85\94a\8f\99U\90£Q\90«^\9a©S\98¬S\91¨`\8e²`\9d­`\9b¢p\94 _\99\9cb¤\9eZ§ U§ªX\9e\9f_¯\96`§\9cW¢\95\\94\8aV¢\82_\9c\82U¨\92^\9c\8bb\9a\91\\97\8a_\9a~M¦\86K¢zS°\87W¬~Q³\86a¦\89]©\90W²\8dO£\92P\9e\8cG \8e\\9b~T\9azN\94tP\8f\7fU\89\82X\83\82Q\8e\8b]\81\93h\88\91i\7f\8e[{\8a^z\8a_j\95gk\86qv\8aui\8dlh\84ob\7f\_\8agg}c]ud^o[nrcpqVoxWerangVfWOQaUIXZSMWMHUIV]MAiFEoD<rJEoQ8fJ>a?=^I9lJ=lD1i?1m>1n=4l?8~B?v;M\84:K|@PzDMyNMzRN|FEzHHwMZvTM\80DJ{RJ\81Z:\86LC\82JMzH?\88RE\87R;\83J?\84U7\8aTF\87Y?\88ZC\82]A\90g?\8ajF\83aH\87lG~gB\8ciC\90dI\80fI\84`NzjN\83bV~dH\81kQz^V~mNxpJwhOzqO\82\81YtqMzqR\7flHxmJrfU\80gXznK\85~N~sQ\81pV}iV\89jW{]Gz]GzYRtPFpVGxYTzMXnNV\80[TsRYzX`\7fK]\86QZ\8eOa\88Ne\91Rd\8b]b~Ve\8a\b\83]o\88Vo\93Rz\9bUm£Pv\9fE|\92Rt\9aC|\9c>\84\909|\99Kz\9dJk\90Fl\97Ir\99Zl\95Px\9a^v\9eXw\9bNi\9cGw\91Hv\95Bs\98@}¤B|¨;\8b¡A\84\989\82\9d?z\9fA\87§0\89\9f7\94\9e-\88\930\98\90>\88\98:\86 8\92\9c<\8f\9eB\8e\9aE\86\9e@\87¨6\80£7\87 D\8b¢C\87©M\85\9eL\8b§X\91\98[\95\9dU\90\9f]\94¢S\91 W\95¢[\95¤W\9f§`\96³c\9f§_\99­_\90ª^\97¯X\9c¨\\98§T\96®Vª\9f\¡\9ec¨h°±j®«n³³eǻ`´¨i®£p«¬w¤¦x«¤j¡¬u\9e¯qª£qª§d­´e·²c³³[¥¬Y¦°a¦­\\99©X\98§e\8f«\\8f®a\90®X\86¸O\8b´Y\83­R\84¦U\83®T\7f¦U\88 X\82\9dU\8e\98Q\8d J\90\9fT\96©S\93 U\99¦Z\94¢_\9b©^\9d¡g\98\9bb¢\9b`§\98c«\96[¡¥]¨ \­\9eg¨¤b¢\9cdÂ¥\97X\9f\8eZÂ¥\91b£\8ej\9c\86a\9d\82X\9e|W\98\81X\9c\80S¢\83J­\80M¬\86X¬\8c[¯\8f[¶\95T­\8aR©\92Q¤\8eS\9f\93W\97\8bM\97zJ\8bzU\83~R\81\83V\84\84W\85\81Z\84\88\\7f\87]v\84`v\8feq\93du\91cj\89op\8dkp}qn}wo\7fmg~pi}cazd^}VixYb\80VlxNovTgfRdbOQVYLLVLPTOVXMKiCKiJDpP9iM;iI5dF<^=>d@/l?5nE7gMAkK;nB;rB8|=;\7f=D|BH\849O\88EQ\83DK\8dOE\86HIwJTtNOuIKvFE}JH~QB~QD\84NH\81H?\86J9{K9\7fW3\87Y8\81X?\88cA\88]@\88fM\8bjN\93aK\89gJ\8dlF\89k=\82n>\87fE\84kF\81kO\7f`X\7f^PyjU|jMrdRseNvmNuwI\7f\82Jy|WouLvvHptCtkN|rHziP~jU\86rW~rZ\7fwMwxU{jMqhPrYOpQTsVNwNLtTKpVIs\V|V_yXWxM`\83R^\84W_\8dOj\83In\87Rb\81Rd\82M^\8aYg\83Xm\8bRu\92Vx\8bUr\95Mv\90Js\93Qx\9eR{\99A|\91;y\90=o\8d=g\93Kl¡Lj\9dMl\96Xu\95Ym bi\9b\h\8eLs\92Mx\99Fw\99Iz\9e>z¡5\82¬;\88©B}¯7\8b¨;\8c£8\98\99/\93\949\9e\971\9b\98:\92\8f7\8e\97C\8b\9a>\96\9fH\94\9fA\93\99G\88¡;\7f H\83\9dE\8f\9cA\96§I\91¢P\8a\9eT\92Â¥L\97\9eT\91\9f_\98£X\97¤Z\8e\9f`\96\9fc¢¨b\9c¶Z\9c²]\99¬^\96³\\92«Q\90¢W\95«[\9cªU\9fÂ¥_£ f¡`®·m©°h§°`¤ªh§ªl¥¬j\9f¢u\9d©v£¦g¨¢m¨¦r¬l¬²k³²kǻ]°¼` ¸Z\98­V\9a¶S\92®b\8c«d\8e¨a\8a²]\8bµP\83ªT\90¢\\83ª_~¤O\8d¤R|¨V\8c\9fX\82¦^\87£]\92¯R\8e¬^\89¤T\91®\\93\9c\\95­c\95¬c\99®\\99\9af ¥^\9f\9b]ª¦b£«c¡\9ef³¨c§\97g£\9cd¡\8d[\9e\8cWª\8fc\9c\93_Â¥\8cU£\94RÂ¥\89SÂ¥\8d]Â¥\7fZ°\8eKÂ¥\8bS£\8cN°\95_¹\98O³\93O¨\8dR«\89G\9f\86X \89L£\88H\9a\82Q\92tV\8bwZ\82\89S\82~T\81\8a[}\8dU\83\7fX\84\8bc\7f\90Y~\8dhu\8apn\96xf\93sd\88ch\87un\7fsg|m_zdYr^[}[iuTjyOdvP^rXbi[X^X^QYLTbGQXNUh\PqHBnM<sA;qEHpF=gA6gF6tB<rJ0nD>vI/z<8uN:sEA\84CFzAD\83@@\871E\8e@I\7fJ>\89IH\84JH\84CBvAKtEJm@4~S:vQ<xOD{GFxS:\80I-\83R1\8aX)\80R9\85XB{_>\8dX3\7fgC\85rI\8dcF\8c_K\89nA\8c^D\8ca={Z8\80cI~iD\83mK\83bW{`IviOtfCzhSplB\82sK\7ftM\85\86KtrHrvRvvIniXwoYtmN|xRzyN\7fvTwmLtoNtlTodVvZNzZNv[Jy_XpVSzVKyaWrbQzW]wVc\7fRg\8a]e\80Id\80Ln\85Zq\86Ka\86P^\85Yr\83Tp\8a]u\84K{\92Nr\94J~\93S|\8aH|\92Ky\98E\80\92Gw\8d?{\9e?y\90Kg\98Uq\9bTu\96Yi\8cUp\91Ql\99Xh\97Ow\94Ks\8fJ\81\95B}\92E\85\96<\86£A\89«H\7fªA\8b¡7\92\910\91\9d%\96\92(\8e\9e.\97\927\8b\9a8\90\9c7\88\99C\8e =\94\9a;\89 5\8b\9d>~\9bC\7f¨>\92¢@\8c¤E\95\9cW\94\9eS\8d\96O\97¢[\91¨P\8e¦T\99¢T\92­X\99©a\95Â¥[§\9fU\9eªe\97®c\95º[\99¤`\8f®]\96£`\95§Xª V¡¦d¨]±Äd³Ãj¬¾c¦¯m¢²o¨¦q¬\9f|¥©z\9e§t¥£|¦£{¦¥l©«b±®b¥´a¦³[¦ºe\99·a\97²X\92²]\97¶_\8c¬V\81ª^\85¯W\87¯V\83 V\7f\9e]\89£]\85 V\87\99U\8c\96Y\85¤\\94§W\91¬\\86¤\\88¬Z\89\9eZ\90\9fb\94°Y\95±U¤¬R¡ [¦\9e[\9e ]\9c\9da¥ l¨ªe«¢j­\9bc¬\96Z¢\96[¢\93Z \91[¦\90S«\8bS®\94PÂ¥\8e[£\87[­\87S¯\88X´\94Xª\91X¯\91[³\95Q®\94R¬\8bWÂ¥\88Lª\81Q \8bN\9f\88H¡\82F\92xV\8e{\\8c}V\82|_~\8cUy\90V}\85Tu\8a_~\94]\83\88`z\8cem\91pk\8djl\8bdf\85cg\82oonlqr`arifu`crWVcTZdTYldcpa_aU]]cNfcP^bQ^iZVnMKxD@j<@mCDkO=jJ?qOAuH9\7fK4yJ5w=;}>8}ME~KG{=F\818F~5@\858B\8f>8\8cC;\8276\81;;}E>\81A@x?7mH1rI4~JB{M?}LB\83P<wR0}V*\87Z*\82b0x_9xc:\86^2\84_>\85hJ\8b`L\8afQ\8cmL\8abO\87_C}X8wZ8|k@wdQylRsfF~^B}_Dy_J\84tH\80zE{{?\80\84D\86uI}qOtnQpuQywNzj[w{Tv|N~{XzlSvtP|lL{qXufXqiWpaTm[PuXTwX\o_SmaexVe\80Xg{]_y[[\82S\{S`xZs{Lm}Mm\80Mr\80Ww\81Tl\82Lo\85Lw\90Lx\8bLw\8dCy\96Hz\9dGz\99D\80\99A|\968p\99@p\8fQu\8e\z\8aZs\8c`t\94Um\97On\97Ql\98Oy\95E\82\97J\83\93P\80\98G\81£M\85£B\86\956\91\939\95\92+\9d\92*\94\9d-\91\97/\8f\9d-\8d\990\97\9a1\8d\8e?\87\92?\81\9c@\85\95:z\9f:\7f\9e@~¬@\83\9cE\89\9dI\88\9bV\93\9bS\98\9cI\99\9fP\88¦G\83 J\8bªY\89©[\92 Z\9d\9fS §X¥¡b¦«_\9a¯W\9e¯a\92¬f\8e¢^\94 Z£¬W ­d¨e§ºb®»k²²aǼb³³q°²p·´y´¨t«¦z°®v«·{³¶m¦·[£®[§²X\9b¿`§¹d\9e²Y\97±S\90µb\8f¸l\8c¦l\8d±j\84Â¥V\82¢V{\9dU~¨\\85§R\7fÂ¥P\89Â¥`\80\9bZ\92«b\83ªb\94°S\86 [\8c¢U\91§U\8e\9aL\91Â¥^\9f¶[\9b®X¡¤V©¥T©¡X¯¥_©\9dZµ­a¶\9eY©¦\³¦c¢\9eZ¢\96a¢\89Y \96_¨\94O±\93Y­\8f[ª\8fRª\83W®\8cQÂ¥\8ea§\8cX±\92R²\94^©\92Q­\88V\9e\7fK£\88KÂ¥|R\92\89H\93\80S\8fzL\86y[\84\87^~\82Zt\83]y\89Os\85S}\82Uu\95_~\8bbw\83fv\88rn\7ffk\83guynvqglmfhs[hdccbe`obhbWdf[iki`lcblbZc\b`_][fWTm[WjYO\7fHK}N=qAN|L<p>AqJEw@>\83I:z@=yM5\82B:}DE}A?\8aBN\825A\8b6H\8c99\8963\90>0\89<5}57\81??\80<8qE/r9*tA-t?<{?A\7fJD}?:lF+sM+~`-}W+\80_4\7fX-\85d=\84Z3\82l:\82gJ\85eN\81`H}hEwgJvS>t]8~aC|eDtmKwlFx^H}`BndD\80nK\84w;\83uFw\85D\83z=\84|A\81lGvn[{o\{oV{x[p\80Or~SzsJpjO|lWu^Tw]Zn^VuVRp_O|eSj^\hYWv]as`]|Y_t]_vY[nV^yKmuR|tYm|Uhs\o\88Wz\86Yv\85Vy\87Mu\93U\86\9aSv\8dIp\8fJs\99Ju\91:s\95E\82\91>x\9f>y\91J}\8b[s\96`u\95d{\96Uj\97Lq\96Ns\93Pt\8cK\84\98F\7f\9dCv\98E\88\9fH\8c§?\81\9dC\90\900\9b\94-\91\91(\95\97+\99\89'\87\903\95\8b.\88\898\86\8eG\92\9b<\8a\99C\90\9b8\89\9e:\8f§A\7f©?~\9fA\88¡P\83\9fS\91¨I\98\9bN\96¡P\92¦R\91¬Q\85­O\84¨U\85©S\9a\9cT\9a¢T\9a¡_ª§U¡§Z¢¬_\92¨l\94¤i\96¦f\9b f¨¨b¦r¶Âk¯Äa·¹h³¶r·²nº·pµ·\82¶±\7f«·{«¹u¤»w®»p¨¸e£¿a\9f¼]\9fÂ\\9cÈS¢½R£»Z\9b¯e\94¬h\8a°e\84£m\83¡\\87¢[}¢]{\9fV\88\9c\\86§R\82Â¥X\90©]\8f¨^\95¦]\89ª^\8fªS\8d\9cU\94\94M\98\9aH\98\9eS\9d©X§\9cO¡\9d[\9e£Y¨¤R¬¤U¶¦Z¸¡\´¨b¨®d¨¤Z¦¢Z\9e\8e]¤\87b§\8ab²\8fY­\99a«\9aW¨\89T³\91V³\89\§\83^¦\8e]¯\8cVª\94R\9d\8bT¡\8dW\9e\86V\9e\80X\9auI\93yK\98\86P\8d\84P\80\81\}\86[t\7f[z\86av~Uo\86Ot\90Xx\8afw\87fx\83kp\84gq\7flp\81j|v`sjbtfWwh\kck^dk]bpaahhjiimcdjedfdffcldkeYnmJjcL{UCzSG\86TO\81HKz<Au?B\80=D\85;G}DG\84GF\88E:\82N?\81R<\89GD\87DD\87>F\8cH=\91@;\8fA6\92<0\8c@6\8a?6\8462v9=~8:w:1r>7n>3xB8x:5pE2qD*tL,~U+wS'zO'\81\1\84^7\80b<\81g9\89ZD\85]L\85gJ\80eKxaLx^;zeJyeHnp>rjCvf;qkDwpErnJr~>}|Aw\7fF|{B\83xJ}vB\7fvQzrW\84qZ|tN\7f\83Mz\81Um~HltLkhSphPqaVj\Lp_SuYV~UUva]sabrZcr`]qf_te`idad_`ePfdXonPwv[wnZp\81\z\82]x~dy\88a~\87e~\91W\83\9bU\83\9dSr\95Lz\96Es\95Au\93=\7f\8c@\83\95H\85\99O\80\8e[w\92V{\91]r\86Yr\85Qm\87Iq\8aGz\91Du\8aIw\94J\83\99F\80\93I\85\9bB\8d\8f8\90\912\97\8f)\9e\85'\97\843\9a\8c-\8e\8d)\92\8a.\86\875\83\8d>\8c\8fF\96\99B\90¡A\94£:\92\9bA\86\9c8\84\98?\8d¢J\8b«V\93©P\8e\9fL\94 I\8d§L\84§H\86¯E\86¦G\88ªV\8e\9cT\9a\96P¡\9dY¤\9aZ\9a§d\96¨]\97Â¥f\94¢h\99¨p\9b©p¢¬p\9etµÅp¿Âj¼Çr´¶tȼe¸»r¶¸|½|¶¹z«»\7f°·{­Åe§Ài\9e»g\9fÆi\9d¿[\9e½U¡¶Z\91°e\93«^\8a³f\8d¬j\8c¨p\88­e\89¨d\82\98Z\88\9cf\86\95]~¦]\8f£\\8b©a\89­e\8b®^\93«V\91\9fN\99©J\8f¡R\97¡J\9a©X\98¨W¤«]\98¡M¨¥`¤¢Y¤¨Qµ¥T±¤_¯\9eX«\9f`¨\9eX®\90h¡\96g¤\97h±\94d¶\97\´\90U±\94P°\8fP©\8eJ¬\8fN©\91O®\85X¤\90S¯\8bOª\92W¡\82_¢\82]¢\85O¡\87T\9b}U\89\8a[\84\88a\83\85gwvbu\81bs\87U\81{\q\88S|\8bOz~Sv\84W\7f\82bpslv\83eixkmf[wieocgqjdrdk\WiWUkd^Y_khg^ggahZbh^eqafrebsiRxcOq^KsWLtWG\81KFtCEyBNy7E}3E\846L\7f<J\7fI8~?5\83?5\8e?@\8e79\8c>A\82A;\9077\91;6\9371\85</\9790\80>8}77s@0\817.rA-}B-{A5\85C9\82<&x9*tF!\87M)\83T zO'tZ-~V5\85XA\85XE\88cJ\87b=\8ddI}gC\80cA\80l?{eD{g<piGrdOtlLuoG|k<tiLsy@t{FwuE\83zNqrLvs?}zU}\7f[}\82Xx\82Oy}H|{Tf}Rn}OilQbcTjfKafMl_NmhSggYfcUnh_miofhjmec_kbZfi_VcgSgjNrkUnpSuv\nzSv\84\x\80`\86\85c\8b\8dY\8a\8d[\89\8dW\85\91W\84\8cM}\8bCy\8eCz\8eCs\89:y\8fF}\96Ey\98Oz\8dSn\98Wn\94R~\80Lq\83K~\83M{\83F\8a\8aF\86\94S}\96R\7f\8aL\85\9a@\8f\95:\90\905\91\904\8e\90/\93\85-\94\82*\95\91.\88\8f@\8a\8b6\8c\95@\92\97B\96\98N\8b ?\8eÂ¥2¡\9a9\93\9c@\93\9cD\87¨C\87ªE\88ªU\88\9eG\86Â¥J\95§C\89¡?\87¡C\8b¦T\90¦J\8c\97R\8e\99\¡\94S¬\9bYÂ¥\9fb\9e©c\8f ^\97ªj\99¬h ¢p\97ªv\9bt¹Ét½Ås¶Âp¸Æf³¼m¸½q¶ºvþp·ÅzºÇo²Ën¨¿l¬Èc\9e¿]\9fÇg\9a¾d\94¶b\9a¹Z\8a«a\8b«]\8c³f\92«b\86­i\80§e\81ª_\89\9bf\81\99g\86\99c\8f¤f\8b\9dg\8c\9f[\8dªY\94¢c\8e£d\90\9bY\93¤M\90£L\98¨\\9f©\\95±_¢´Z\9f¨[\98ªU\9f Q¡«[¬°]ª `¹¡T¹¤W°\98X´\92e«\94jµ\9e^¶\99XÀ\95U¸\92R¶\92R´\98T®\94O§\91G¤\93L­\89P¸\8eVµ\86\¨\81Z\9e\85V\98\88\¢\87[ \82\\92~X\8e{]\88\89^\86~`\82tc\84w`y~j\86\83b\83\82W\82\80W}\80YwzVtoipzmm}dmo`hgYxp`wjhqZjjZoeUj`Yf``Yg^]iV\eZlYUoX`y^izZazb_|_V~_Z}SVyMPpSKqONw:Q{:O\849J\88EK{?E\819A\8997\8905\8873\8a0)\883.\8c8<\8a19\81A7\87A:\88C4\94B7\8193\7f=7\847,\83:'\845,\81=4\8858\84:5\834'|;"w?(\83J%|T&vS+uQ'{\2\80X1\81RA\90QB\8da?\8c\3\80^8veA|l>wpCzc7p]HvfJzgP{nDtjHqs>m}>rzH}wHx\7fLywMvqJ~yX}\7fU~\81Hv\82Lj~FnsHkwOgwTfrWdjIkgNhjZicZmhYf`Yb^Rf]]`jj]kga\ncip\qehcqdVkjZwnOsuNwnMu{aovcx|[~\84_\87\85]\85\8aX\83\87N\85\8dJ\86\8eJu\82@t\8cIo\85Dw\80Gw\80?\84\82F\88\91K}\90T~\8das\87Sw\8cS\84\85W\8e\8dP\8a\83J\92\87J\8e\88T\88\89V\83\8bQ\8f\89@\96\8c?\93\957\9b\8e/\93\923\8f\8c(\96\89,\8b\95:\8a\96A\90\91F\8e\8e<\8c\99C\87\9cI\8f§D\9d¢8\9e©=\94¤<\96¦@\97 L\86Â¥N\8dªK\8e§K\8b\99J\8d£Q\85¨G\82¦S\8a¦P\8f\9fK\95 S\8f\9aX\90\8fQ¢\99T\95£^\96\98`\8f\97b\97\9fg\90¨o\94°y\8d®q\90tÊÄ\7f¿ÂvÄÂo½Ãl½½v¾ÇvºÆp¼¿z½Ã{ÀÃ}®Æm³Ìq¤Êm¨Ìc\98Ãc\9e¼r\9fÂv\97Äj\9e½c\88³l\8d´j\87®c\82Â¥b\84¡l\8b¡`\8a¨h\86\98o\87¡g\92\97k\87\98j\91¡^\88±V\82¦T\88Â¥S\93\9b`\9c¦R\91£Y\96§S\91®\\9b©U\97±d\9cª_\9d¤bª°Uª©e«©Y¬«\®\9f`²\9bZ©\98W³ ]³\9cY¶\92a²\95T³\92U±\96H»\9aW»\9aK±\90PÂ¥\8cU°\91S¬\97N¯\8dV«\8dT¡\85`\9c\82X\9d\89]¦\80R\94\89`\89\80d\90|\\97\80^\84\84\\83yV\83y`wx\xxV|sbt~S~wZ{uYmxctxbopendet]cqfjydcgbgkSjo^hhY^fbUacX^`T[^l\cl\gzZbz`e\84e_}^U|_\\80LX\80ONuKF\80PR{:V\809N\849E\82A?\84>?}@A\8083~5.|73\8c*-\8b*-\8f7*\8e,:\8847\8a/.\8e25\90;=\8a:*\8685\8cB/\846*\88?1\8559}06\7f8/v4,w@+zA\1e\80J/|H/vI#\82P2\83[:tZ>\81YB|S<\87g>\82^B\83d:vm5sk@xp7tp6qlEyj@ql@\82j?wo:qvAy}@{|@r\84@psNnwPwoTt\81Nn\80QoxPr\83KgqGl{E]}V[lW[v\kmRcpZki[jkTclZacU\_Xahg\hd\lhj[tipw\li\aha^fm_nkWomWxo[uxY\81|T|t\\85\82Q\8f\8b_~\90b|\91Rz\88O\87\88J|\86Ay\80@w\80Jt\84=wwD~\83I\7f\8bJ|\89[y\8cTy\83K\89\7fK\8b\85J\91\80L\8a\88J\85\94V\8d\88L\92\8dX\8e\86R\94\8eF¡\85@\92\98?\9f\978¢\8d;\94\93?\8f\8e3\98\88C\99\93@\8b\97@\90\92L\90\9bP\92\9dG\92\97H ¦:\97¢9\98©>\94©M\88Â¥E\8c¢W\86¤X\88\9fF\8a\9aC\8a¨?\82©H\94¨S\91 U\9b©Y\8d©N\94\9aV£\93V\9d\97O\9c\8f[¤\95\\96\99^\97¡f\9d¦q\9b\9do\99¢t\8dsȼzƽ}ÃÆxÂËpÊÅtÂÀpȁx¿ÅxÅÇ\7f¼ÄrÃÑu·Îw©Óz¤Ñq\9bÃk\9eÇw¤Éx\9fÃ|\9aÄr\90¼k\94­q\8cªn\89¤a\8c©m\92«g\97©f\99¨i\91\9fm\85\99m\85\9fe\8b\9c]\8aªW\86\9cS\85\9fO\92\9eX\95\9e^\9b\96]\8f\9eb\90¦Y\90«_\90¯e\9b§e\99°_§®i«²b°©Z¯¥^­\9e`¦¡\ª\9f\´\9a\¹\92R´\90Y¶\99P¯\94O´\9eS¼\9dL³\90Y³\93[®\91V«\8fX°\94M²\86P®\89P«\7fZ\9c\82W¤\83S\9e\86W wa\91yj\98ze\94}^\8ezV\8c{P\83}[\83tR{rW|r_vq^tudqxaet`cubiibnhgp]lj[lo^ja[_d\`ic`keSbdW_[b^_[a[^dYrV^pZ[v[btaa\80_`\81a`|UW~\YxQK|IV\7f?S\83:Jw9Lw<H\82>=\80=8}=,u<4}2/\8822\8b01\9013\8e4)\914/\89.&\935(\9071\942+\87=%\86<"\83:*\85+2z-2\82,,\7f3,\7f80x9$u9/zD(\7fF)\85F*\88E.|N5\82N3|R9~b@\88c9\86g6\82a:ze:zp1wi1}sA\81u?wwB~tA{v@z\80?|y?\80wE\7f\7fFw\84HqxEw\82Iv~NuzKl\83MdxEhvA`\80EdyIfoK[pY`wUesWZpW`qVZfTcdUa`\ZkaUq\alajimbdsj`}blzcdnn^ppb|i\vrb\84pb\83tc\89{V\81}R\87yR\85\88Q\89\89]\7f\92T\84\8dK~\8aUw\82N{\81Iw\88Cw~Hu\7fJs\82Km\85Tu\7fZ}}R\84{N\86|I\89|P\89\83O\8e\92K\8b\8fQ\8a\88Z\8e\8aR\95\89S\93\84S\9c\83G¢\90G\9d\93O\9d\8fG\9d\8c@\9c\8a=\97\84K\96\8dM\96\92H\90\91K\92\8dG\90\99R\9d\95U¤\9eF\9a§B\9a¢B\8c\9cQ\97Â¥O\92\99W\8e\9cT\91\9bJ\8d\9fH\84£L\89 D\94\9aJ\8e T\95¡U\94£R\9c\96P\9c\92P\9b\94O¤\8c_¢\9c]\97\9bh\9d\9ce£\9da\9f\9c^¤£j\97}ÃÃ{ÃÃŽy¾ÃxÈÂyƽuÃÄzÇÂmÉË{¿Êp¿ÈwÃÄnµÆx¶×s±Ëh\9fÃŒi­Ép­Ët¦Ês\9aÃ…j\9bÃm\93·h\97ºd\97¶g\8e·h\97µf\92®e\8eÂ¥m\93©e\8d¤g\86®m\8c«m\8c£e\82 _\8bÂ¥[\8eÂ¥b\98\99[\92 X\88\95c\87\9cX\98¤_\9a¡`\92\9fa¥§a¨£U°ªT­\9bV°\9a\§¨W£¤Y§\9a[º\9b^²\9eW½\95a²¢U³\95U¼\93M¹\95Z¸\8d^¸\92]¸\87c°\97Y­\8bS¯\8cG¨\91\¨\89Z\9b\87\©yX®\81X\95{[\8awh\8a{g\9a\81`\94u_\83x\\8cwc\8do\~lVzmWzv_wtYdm]jp\ht[^d\k_aigjoVusammdiu\ji[Xo^[p^^nOakUUfKjYOzXUw[YuV^|`drb[q`Ur`QrVWsPVyBMx@TsJKrB=xBAyDA\83;2z;-\81>1\7f4>\894:\8775\859#\8b7)\86>#\8c94\8e1+\91B*\90?*\839+\809"\8a71\8569y5;\80+9\81=,sC5\7fB's=.xD!}O.|G$zT.{R>~N5y[>\86Z.\86f<\8ee>~_-\82g4\84s3\80y9rs<nr?|z;vk<yq;ot?sr7zxJ\83tJouFktDpyIm|Eb\80G^yTbvOkwEauMX\7fNXoJ[|XcpRhmV`rQ[wXeq\`jYXf^[o\\`fWlm]cdghm_hoUl{g_xe\lp_lj`|f]tqa\85vV\80\80_\86\7f[\80~^\83\81\\82xO\81|Vx\82M}\83K\83\88N{\81C|\85M\80\80Bz\84SutHyzR{zN\80tS\80\83L\82~T\84\87R\86\85O\90~X\89\81Y\97\8dK\90\81R\93\81U\93{R¤\81J¢\91@\97\8d?\95\8dB\92\8f:\99\8b=\99\8cI\8c}D\90\81D\8e\87K\91\85@\8c\87H\94\91?\92\9dK¦ L\8e¡Q\8f«P\94¤N\98\98R\99\95N\96¡O\86¡Uy\94I\83\94U\8e\9bR\8e\9f_\97\99K\8c¢H\9d\9cP \9bJ\9c\9bT\99\9bT \9ch\98\91f\97\9fa\93\99`¡\9ak\9a®k\97\84¶Ì{½Î\83¾Å\89ÈÄ\82½Æx¿ÅtÌÀpοjÉÅmÈÈlÈÄm¶Îl²Ãh®Òb¬Ôm«Æh²È`©Ãl¡Åo\98¾r\99¸j\98Àp\8f»u\94¸p\9d±t\98®y\99­o\91ªr\84±n\88µj\85§l\84£b\87¡g\92«`\8b¢h\8f \\8b\9fW\85\96a\8a a\96¡T\9a§W\99\9f`\9f¦a­¢S¹¡Vµ\97Rª\9b]©¥^¤\9ba¯\92d¶\95d¶\9bb°\9c[±\9f]¶\9aQ¼\98Y»\99`¬\98`º\91a¶\8bZ·\89`­\8eNÂ¥\8aK¨\89RÂ¥\7fZ¡}S­{]®xd¤nd\93uW\96oY\91tZ\90nf\81m\\81q^\8aoY}heuncuuVqmXgm]eccedaclfla`i`qs`qu^kw[lvch}k^rbclTamQ\bJZfJllRpbMk_Ow\bmYWobUgdVm[Rq\YmOQsQE{GHzB8rG7m;8y:3\847/\82:.z@:uE=w90\8a8'\7fA,\80I\1f\87>"\8344\8cB+\8cD/\8d<3\857)\85;3\8b?3\8a=8{35y27\8299\80E6vC*zE!sH\1evJ vN&xT1yT;|]=\84[2\80U+\85Z3\83Z3\87j0\81p5\7fn6tq@ws>v|Dpu?soDmkFvj8zh8\80n9ufHmr@op;ksK_kL[vL]{NexN]rEb{HYyH[}J[|QcrVhvRdoMaxTkr[gjTbiVYcYUlfUjiYmp\`gQafUcvbjwddobSmdRviWxt\zq[v{_\80{Y\86~[\83zP\85vKvsIw\7fUu\82P\80|R\7f\80G\85|I}|J{zMy\80LyvQ\84xR~qcvtc\84\85R\81\85X\85{M\85\83G\8f\82P\92\88X\98\89N\8d\8aN\8f}L\9f\88A\9f\83C\9f\86?\98\83G\96\80=\93~=\8dx;\96~;\98zD\8a\83I\8a~<\8b\86>\92\8dH\94\92D¡\91P\98\9fQ\93\9aT\8f¤J\96\9dO\99\95V\8d\99N\8f\9dS\7f\9b[\88\96T\89\9eP\8d\99Z\88¦P\94¡H\96¤I\95\9aP \9bQ\9d¤X\97£Z\94\95`\90\9aZ\90\99Z\97©j\9c§m\9dv½ÊuÈÃxÇÊ\86ÅÈ\85ËÃ|ÄÃmÿuËÈkÂÊvÇÆh¹ÅqµÆo²Ãg²Ôi¥Îr³Êm¨Óf«Ìf¤»f\9b¸u¡Ål\96¹u\95µv¥·u¤®q£°q\96±i\9b·m\9a¬b\8a´s\87ªl\90ªw\8dªq\88£j\88§m\88£_\8e\99`\8b\9ca\91\9b]\95\9ff\9a\99Z¡\91f\9a\9ai¦¢_­ W¯\99f¯¦a²\9dX¶\98\¸\96X¾\92d®\9d^»\99^ª\94R°\96ZÃ\98T²\90Vº\92g²\8d\·\85b¸\80Y³\81T³\81J£{V |Z¡sV«zT²zX¡ue\93rY\98wT\90we\85om{dg\8eqf\8diZ\82gczndulOok[ql[maZf^big[`fdhc`gai|\jkcptSmqT_g^\rVaeTd`IYeIaYQwfFhdKng_uYPhVMn`ThZJhSUjSSlKEsXIrICqE<sH=y=;z73\7f7;\84HApD;vI9\82D.\84H-\83C\1f\86>*\87I*\87G)\8a>+\83C3\899!\83D+\83=1}E4\827.w;6\8a@=\8242u>2yD#oM\1cvR/vO5\83P-{\CzT8z`AyY6zXAzh/\85k8xq3\80rB{n=rz>px=i{Gqr;rv@tbCpg;yhLnlAmm:kg9on?jhA[t?U|FduH[zR^|FcqE\{UTtPXySgvTg}W^tXpm^aqVkk\^\Zde_Sad^`ldSgQZqZ`|aVufZwa`re\sgb\80u]xwc\81|p\7fx\}p\~pYtrH\82vGulUsvW\84tM\80rR\7foH|tP\84zH\85|Q\83|X\8clSvvinz[y\83S\82\82W\80{Z\8f~H\8e~R\90\86L\8b\89R\87\88L\8d\80F\9bv@\94}D\98{@¢wD\99\87A\9d\81=\88}<\94yB\8f\83J\95\84C\95u8\95\823\95\8fD\98\8c8\9a\9c@\9d\94I\9a\9dU\91¤T\98¡S\88\9aV\85\92N\85\91L~\8fN\83\9dX\87\98N~\97_\81\93S\95 K\9e O £T©¥O  ^\9a\9fU\9c\97b\8f£^\8c\9a[\90\9ck\93§a \85ÃÈzÈÄ|ÑÄ\86ÃÃyÖÙqÑÒtÚÆqÑÆmÇËxÃÆyµÂqºÅp¹Çu­Êg°Ôe®Óo±Óh­ÃqÂ¥Ãi¨¼m­¸s£Âp\9cÇx¤»u¥¹z¦³v\98³m\99¶b\97®f\98´s\9dµo\92®j\8b\9fv\8e\9cn\93\9fm\87\9ek\85¤b\89\98]\91 e\93\9ah\8e\99n\99\8ce¡\87f§\93d¢\9dgª\9aa¨\96[´ f¿\9e_º\9dX³\91^µ\95W¶\8cV±\90^®\90Y¸\91\93X½\8aXÂ\84aµ~^²{W¬\7fX²\81S«|M¨rX¬q[µwT¯sU§uc\95sX\9bj^\90jb\88bf\85_j\84ah\85i\\86^_~d^uiSgfWh`Mh\QhbWh^_c`_iYfxdiv_doXilTrsQilR`oMafP^^KcYKpdLoeIimSmdTf^QoZJr^AqdIcYBf]Ki[AnZ>~M<|N9sD0zI4{L;\83=:\87:4zE=zE>|N/\85D$\80K)vF"zN#zF1~D1\8aK'\8aD&\80D.\82D0\83G.\80;4x@0\8194wB7}>+\82K1vQ)tS2vZ2\86T9\89[:}U@{\?ydB{bA}l<|o6yr9}i>vsAmoDpsAoz=}w9|sAtpHufDmc>skHrqIpf<ff5gq7dy:ZvG]|HZ{U]~N`sS^qW]zNU}O^tXczVlr[mm[koVfdReaZ_e`Z\cTX[\Wb\ct[]v_[v_UzgXwp]ztg}ldx|jq}oqraqpbtsQunM|fH\82iKxvB{xG\86tF\8fmI\88tE\8crP\8fzL\90qW\85r[\7fz`wyXx{[\85}d\83|[\90\87Y\8d\87H\91\81C\89\86J\90\83I\96|N\93yR\9e}D\9b~H\9fxA¡\81@\95\826\94\89;\9e~>\97\80D\9duD\92tE\90y7\9a\7f?¦\8b<¢\93E\99\98N\95\94Y\88\96R\8c\9eQ\87\95Z\83\92]\84\88U\80\8eX\87\96J\81\95F\86\94S\85\90N\93\99V\9b\9aR\97¤M£¯U\9f©\¢£S\95\9bY\92\98\\8a c\90\9eZ\98\9e`¢\84ÃÕ\80ÎÕ\85Ã×{ÌÔqÓÔrÈËvÊÃzÑÇiÃÉm·Ãv·ÉpÃÂ}¿Êw´Ôm³Ùb­ÃkªÃ`ªÔm Îq¢Ãw­º{¡¿w®Ç}¥Ã\85¦¿w\99­u\93®i\98½h\92¿o\98¹h\8e¹l\98«s\90ªo\88\9as\8c\98y\82\98f\8a\95j\8f\8e[\8c\8f\\9b\9ad\9a\94h\99\98_¦\98jª\90n¤\98oÂ¥\9fcÂ¥\9ab«\9ce°\98hº¡f­\92q¬\97f®\8fl°\87Y¶\92^ª\94_¶\95fµ\8c]·}kµ\80`­\86X±\84Yµ\85W«uP«pV¯uM®hVÂ¥zYªvb r_\9aeY\90c^\91dl\87h^\8cfd\8andxp\\7fbcjj[k__lYVcdbhaThZXlZZpbde`mkUom__tNcuZcsOkiNgeZb]DjbCc_DjcKu[JqjMrfGlkCf`OgeOpcEj]QmX<j`>zP:\7fN>zO7sF.pM1}H;yF5vRBtQ6\81V4\84O1\82L)~T+}G!\80Q2|C9yA6|N,\82D4\87;,\8cA-\8eG4~B:x3-t4+s3.\82J$\81P.\80V3\80^'\84T5\8aa3|g6\80Z;wm?t`>wgAqg1\83kBuqGlxKekNiwAp\817pzGt{;pgCllGshEddEon9sb0lk1jy:XsFO|QRtST\80L`lUijPcyJZoZfyTex_jve[l\`hUseXjlUddUf]`iVcgSi`]gcUhg[yaau`[\7fnSso`|t^\80uh{zfzplknnrnZ|hWvwGymRxqP\83vN{}K\84kG~qL\81yM\8a|P\90|Y\92\82Z}uV|rXv\83U\85\83Q\86\85a\81\89]\87\81Y\90\7fL\92\86M\95\7fF\92\80P\89\7fP\96qI\93\80A\8fvJ\9a{J\9dw6\90w-\8at<\8eq>\97yH\9cq=\9cr<\91\84@\91~7\97|;\9d\87F\94\89L\97\94U\8e\93Z\8a\91O\8d\8a_\87\85X\84\85Wy\92U\7f\9aT\8c\92\~\92Sy\9a[\8b\9d[\94\99L£\9fT\97 S\9aªV¡ªV\9b¢R\9c\9dY\9a©[\8b¢\ ¢i©\85ÇÕ\87Ê×}ÉÃ}ÑÒ\80ÔÇsÃÈl×ÊqÑÃoÃÑn¾Ã\7fÃÃŽ~ÂÂpµÃq²Îq®Õ`¯Ã\¨Ùh¥ÕmªËw£Ãq­Ìv©¿~±Ç\81¨Â\8a\98·\84\96±z ¾u\9a¼m\97Âs\92·{\95±u\91¬k\90\9eo\8e¡l\84ªt\8b£l\93\95b\98\91\\9d\90^\9c\90i\9a\99g\98\9dk\97\97aÂ¥\98f¡\97j§\9ag£\90m©\96a«\99c·\94rµ\97r±\8ay»\8fpµ\85l¯\90d«\92g´\95c®\8b`´\80l½wfµ{Pº\82JÀ~I¼{G¯mS²kS°nQ¬tW¬sU¤nZ\91bY\8fg[\89rh\8dwe\85\7fe\87we|bdx^fm[`_eek^cn\fj``gfff[be[kjaid\\tR`rXZjU_oXZcYc\S_cAca>pbKmYSeaNk`GrhHnmGkjOabI_SRkTIyTDwU;qJDuB=yO2nK*uH.kN:jNHqPFkQ1tU-tU.\80J/vM0{N-\80Q2\83L6\87H2zH7zJ2\82</\8eG3\8aA-|69y36v/&z9&|A)}E0\85B7{P-~b6\87i6}b7\84iD\82m;xm<\80p3wp;\7fx@|rCyuDntGksEp};p\80:dqBbqGhgDcgJdk?^cAfh1nn9is:gmMSvQSnOZvTgkWcnRUiMUpXerWgzeXtaZrZjdUr_Zded_]^f`WjY_j\[[]gh`yhb{k[{_c\82oU\81mSys[swg|tf~tjolhtj_\81pQ\7frJ}xG\7fqQ\87kI\89vQ\85s[{n[\81\81^\90\82R\8d\7f^\88\82\\86\81c\88z`\82\85Uz\86Sz\88Q\7f\86[\85\8b^\89\84S\90\81T\88\83L\8axI\8bxH\88xG\8fv@\8e\80K\8fzD\99z>\94s2\8cp1\8dn;\95kD\9fhG\9br;\91\7f@\91x@\96w;\9d~E\92\80O\8c\88U\84\8ba\83\8b`\89}S\7f\8b[~\8aY|\94[z\90^\85\96Yy\8e_~\97Z\88\9eU\99¨V£«L\9b¢U\9a¡\\96¦^\92¨P\98°Q\99¦V\8dÂ¥V\9a\9bbÂ¥\89ÉÃ\87ÈÞ\81ÆÖ\81ÑÑyÕÈzÑÊtËÌpÉÃyÀÃsÀÃ\82½¿}ȀmºÃl©Ëb«Ãj¢Ún±Ãl®Þw¨Îw\9dÊ|¥Óz¦Ã}¨Ã\81¬Ã\83 ¿\80\9b®\85\95¶\81\90³v\93¯q\8a©\80\87\9fs\84«o\83\9cl\95\98h\8d¤s\85\95e\8e\9fa\9f\90b¢\9aW \95f\9c\9eiª\99d®\9aY¨\8ch¦\9cm©\8cl£\92l©\8em¨\92b±\93q­\83x¬\8aq±\7fu´\8cn·\80c´\8eg¦\86c±\80aº\83c¹\82[»y[Ã}TµsN¾xS¸wQ°uU¯|Q¯qN±tZ tX\95gW\96if\99rb\98{`\82}f\89tc|qf\7fhehehglZej^gc^nn_ok`nahja[afZcbWrfZe\[e]^`^`^ShYU\`KdfI_hHeiYqiKfhHi\DkgN_^>`aFaZ;q]@eWFtT?wK8lC5wL)qA/sG+zL2tM5wKJnO=vP7wZ7\87U8{L3zV9~G+\80O+\8bL+\81L2\85D-\8b::\8272\8aI1xB+x:7\7f=)z3.\81=&\80D)\85E-\84U+~_;\7f`0}f?\83fE\88q?\83e7}rC\7fkB\80p>xnMth>hl>tzGfnDck;heEjl9fe=kj@bd5Z`>jd5^o9]h;anNSyKRyFZsL[mN[uLbjXNiZbr_jybjnXXhUcbdm`bahg\U]ie[gVjback^fp_rp\{_^sXhzbYufPwpc}yevv_r}fym`qnayx]\80qWzrW\82eO\92lY\86vL\8ajP\8dyR\91tU\86\83_\8e\89d\88{`~yc\88\7fe}\86U\88\90V|\92^\85\8ea\85\8eU\94\85R\99\8fN\93\82D\8a\82B\8ewL\86q?\86p=\83xG\85\80;\8el4\91r,\89n2\91g>\9br=\8fiM\9crO\93}L\90w?\98rD\9a{>\92mT\8cqP\87ye\88\83V~y[\84\87\\89\80Z\80\8aX\86\8dY\8f\83e\84\8dY\88\96S\95\96[\97\98S\97ªQ\93«N\9c\9cW\94¡^\94¯Z\94¬Z\9a§S\99Â¥c\94\9c]¢\87×Ü\87ÃÔ\81Ã×\83ËÜ\82ÃÃyÉÊyÃÄzÑÆ\85ÊÄ~ÄÆuËÌ|ÀÈq°ÈjªÓq¤Õm¦Öo¦Øh«Ûi¥ßs\9eÔ\83\9eÃ\81\9fÇ\7f\9eÄ\83¤Ã\86©¹\86\9c»\80\93Ã\82\8f·\83\98­{\92£\82\8a\96z\83\9am\80\9di\8d\94a\88\93h\8d\98a\99\8db\98\91X\9c\90_\9f\9a`\9c\94cª\97^µ\9d[®\91Y²\95_«\8eg©\95p§\92m«\81rª\80r±\8ax·\83q·|s´\85q±}p¯\82v°|r±\83k¹\81e³\81d³~U¼vX»nP¹qS³}Q¸wK¼tS±wa«v_©w[¡pb\93pZ\9cl`\93ra\89xj\83rk\85k_}nbzcagadhagelbokbrf]robii[mkXfk\`f^imako[`d_Zffe^chUahFbbGjjNplJiaIgZMcZJ`hK`g@`_:iU5nN7lJ;rD4lB+iC1iD0xR6wS0uP:yU<\81[2}Y4xM4\82N=~S;\80T;\8eQ;\8dK/\94G/\90I+\92D9\87;7}G:}A7xB2\83<,\868.\7f='\84@1\87H3\81J>\8aX7\89\;}e;\82j:\83k@\7fe5~l7ti3zj;ycIukGue>npBruAlp?sb:l^@hW7d_9]]:bd;fd=_d;d_AY`GcmN]mJcnF`vBcwQ\lO`m[TrbVve^rbfl^feamgkicnjXjj^hi_jmdfxjru`ln\mmWvbZq`^nd\}fX{dR\85rZ\80qlwwpz|kwqdwwa{qW\85qX\86gZ\8bdO\84mO\8ctQ\89sZ\92xW\92\86c\87\8ad\86\7fa\83\87]z\88_\82\87a\83\92_\8a\96_\88\89W\86\88R\8c\90P\94\95F\92\88<\91\889\8ey>\8c{J\92vD\87u9\8cu5\88k1\88l7\95k>\94i>\92cD\9alD\9eoE\93oM\97tA\9csE\9ahL\97iJ\8eoP\8bs\\8dxV\8dwX\84~R\83~[\89w_\88}c\8c\80W\92\8bW\89\8aW\8b\8fS\9a\9fX\97¡R\97Â¥Y\9e ^\98¤\\90¯V\92¦_\90¤[\96¢^\8fª_\97\8aÛâ\81ÙÎ\89ÃÃ|ÓÜ{ÃŽÃŒpÊÌzÆÑsÃŽÃ\82ÊÄvÃÃ|ÃÈ\85ËÓv»Ös´Øx³ÜnªÛt®Ôl¯×y£Ú}\9aÃ\84ªÓ\82\9eÃ\8d\9e¿\82§¿\84\95¸\93\94º\87\9aª\7f\97¬\80\91¯\8a\8b¤\81\90¨\86\90\9br\88 n\8f\8cx\90\95i\8b\94j\95\8cq\98\85d \9bl\9d\9di¤\97b©\9ak¬\90l®\8eh¦\8cb \83l¡\89w®\93t²\90u¯\83m¯\88o­\88pª}o©{q¶|o´\80s­\7fq¨um®pl­qd´|c¹|X¯v[®nO»sU°}S»rV¸|c¦ybÂ¥yf\97sd\8coi\96od\97ej\82pf\83kd\84d`~ekochnfadc\kmbge[sfgpiad`\igW`dbfnW^pUjf_bddbciiS]gJ`nDadNclJ]_OddN\YBX`BZ_JanH`^>kWFbZCpF8mD2uR;f?6fK+jP)~K8qO3vP9zK0\82X,zR3\83U7\86I?\81L.\83O%\8fL(\8fB2\8cI/\8a=/\81;4\7f47}39\8aD/\8a9(\83@ yJ%|P$\83L3\89O5\7fX(\88V*\84`9u[?~_9\83d1\83u.{p=zl?wp@moHloEoe9uj;snImt6_d5fh4]h5ca5[`6\_1a`9YlBVe?ZcOSsEbjM^vC]pHakYckQ[h^[kWloWorXkg_chggeflineffrZjcdieimz[rm_nk]~qU{sYurUti]xqc\7fnW|mexvmyoet~^smi\85he\89o_\8bjY\8cm\\8atQ\86lR\86i]\93xW\85\89f\87\85V}vd\8a}W\82\8ea\81\84T\8c\89^\8d\82M\8b\8eY\81\90E\89\88A\90\88A\89\81A\89}@\8c\83F\82w?\86qDzsC\89q:\86f7\96o,\92k4\9ck<\8do;\9fr7\9cwJ\8fwD\8dvM\94m?\9dwB\8dxG\91mN\8fsa\95yR\8c|S\8d~V\90vQ\8d~Z\95\84\\8c\8d\\90\92S\94\89S\91\8dN\94\9fH¢\9bW\9d\97O\96ª_¡\9e_\98ªZ\8d§W\9b V¡¥V\9b X¦sÛÒxÃÕ\82ÙÃ\7fÊÃ\81ÃÃvÌÌzÚÃvÖÉwÑÃzÃØwÑÓ\81ÊÔwÈÃw½Îy¶Òn«Õx­Ìq©Ër¬Ö|¡×{«Ê\84ªÈ\8c£¿\89\9eµ\88¢¸\8e\95´\94\95¨\88\92¦\85\86°\89\7f¬\83\89ª\8d\8c \88\89\91w\96\93y\97\91y\98\91\7f\99\95v\90\8ap¢\93r¦\98s²\94i¬\90k¢\8bn§\8eo§\8es\9f\86v«\86u¨\92w·\91g´\85t·}o­\82m¶zl­\7fi§~v¨yw¡|p¨mpÂ¥hb«ohµli®u[¸dY±bg¸kc®ub¹xa´vb£ta\9em]\8cod\85sg\86jh\8ebs\8a\nwfj\80llyjl{oivcdviXk]emRblXbkYbd^Z]ecblbgtU`nVabhe[iq]bmR`lZ_oQ[pM]_LT_J\]A]i6Wf<Yj?_j?[j=^\E`\NiLEsG>oS9jB2rA#vM0uR.uO)|O1\86U.\80Q+zP.yP=\82U6}N'|M-\8aG&\8bD'\88=2\8bE;\89?6\884)\836-\8dB.\8d?+\8bC,|K$vL$|R)yZ\1d\80S!\81P-~\2}Z-v`+\80c+yl2}p<su<he;fb>cd5mh6rj=ntAbo?`l;Y`.Y`0\f1[].[X0b`4cf9_iG`fOZoJ_nFckJmsMfqUci]gd_ieUrk\ig_pqdpummggkgtlessgphadkgjmenw]qtZ~xZ}uWynW{kX\80tUzr`xii|mf\87ym\83{bzp]\8clf\8fs]\90i^\7fq]zqL\85nW\83pP\83{Z\84|Y\81}U\81xU\84wU\81\85T\8b\81\\81|R\82\80P\86\85K\89\8b@\87\87B|\828\80\898}\87>\85\84F\82vB~uH|u;xj0\83d0\8bi'\97j;\94hA\94r=\8fu;\99y@\98t@\8evE\86p@\8euN\8cxO\8at\\93xZ\8cxS\93\80P\9a\82F¢}M\99\8cL\92\8d\\98\92Q\91\8eV\93\8bM\9a\97M\9d\94U\94\91P\9a\92T\96£N ¨S\9a\9f`\97¡Z\9b§Z ¤^¢\99\¤\86ÒÙ\85ØØ\82ÖÒzËÕsÃÃ’pÃ’ÃŽqÎË{ØÃ\80Ã’ÃŽy×à\82Òß\88ÃÃŽzÊÙ|ÉÃo³Ëxƒx¬×o±ÆzµÆx±É~¨Ì\8c¨¹\80¨¾\87\99³\8f¢¸\8e\90²\88\94¨~\94Â¥\80\89¤\83~®\81\8f¡\89\8fÂ¥\80\91\95\80\98\96|\9d\8bv\91\95v\97\96y\8d\87s\93\8er¤\8czª\95o±\96w¯\82i«\8ct\9d\85}£\82s¨\88x®\8by°\8dh»\85r³\88f¢\81k¯\83tªvj¬tq¤vlªjp\9brt§hg©onªke©jc«mZªhY¤jk\9fq_¡hl³y_ f`\98gj\93pg\8ekh\84m]\83hf\8ads\82gpzdqvceyfb{a^u]Sg]S]PYh\a[]\e^cdml_sXjgbpahhabs\asYXoJXsGXfNVfN`lPZh=U`GTeEZcET\CSh=]g<]X@^\GfYHoM?j[=qW4vD(lB/rI1rP$~Q3sL6\7fL)\7fR6|R=xO1|R.\8aE(\8fC'\84N/\8b@*\9284\88=2~C+\82:5\8c:,\90F1\8c\83W#\89L#~U\1e|Y*\82U\1d\7f[+\83]0\7fZ#{a/sd-ps9vk5s}3cu5``0nl*ln.pk-`s9]p>er=bd5ba([m.dd,gk+hf:ar<Xt>XrKZiO_oHbnLduDooLmr]ig]xbcnqalhiqnjn]ivdfqcstmnv]nj`hgWjee{q\vuM\81vR\7fuave[|qg\7foa}vb\7foi\88ik\84qh\83qgykj\81yg\83m\\92ej\88oY\82mV\90cM\7foL\7fkP\85}_\82\7fQ\89yP\8d\7fX\83~Y\88\86^\90uW\86\80U\84\82G\83\81BzwA\83\88I\82\83Auz?yxE\7fr?yqJ\87n:{t+{j(\84s#\99b2\96k;\89f>\93w5\92zC\88zH\91pI\93tH\87jS\8as[\8cyL\96qZ\8f~M\96uN\94zZ\93|F¡\8bL¤\86[\9f\8eK\99~H\9b\8bO\9a\92D¢\8cJ\9c\8bT\99\94J¤\98D\9e\8fY£\9dV\94£^\98\9aXÂ¥\99^\99\9dc¤\80ÃÃœ\80×Ò\82Ã×yÓÔyÕÖzÜÕwÖÚtÕÞtÛÕyÑÜtÃŽÃ\80ÃÔ{ÊÓoÈÊo¹Òs´Ìp³Õt½Î|½Ò\83¶É\7f¹Ã\8b±\88§«\8b\9d®~\9f®~\97³|\8a­\81\89©~\91 \86\8c¤\88\8c\9d\8c\8b¡\87\86\98~\91\9c{\8d\99z\9a\88\7f\93\8c\83\95\93\87\9c\9b|£\91s¢\89vª\8cm¤\84m¢\80p\9d\86w¦\8bxª\91y­\8an­\7ft±\84i¤\7fb§\84eªtp©qp«ij\9ejr\98ro\9foo¦to¦ps\98cj\9a`m¡be¢^lÂ¥ae\9b`d¨op¤tf¦k`\9cci\8dm`\8bgb\8ab^\88gl\82hh\80kpydf|g`|bbrg[a^X^UZbU\]VdY__Yjgbtd^oifgendim]aobed^YgO`cQUkM[eDUlCRdGS`ET[IQXGWZNQbLJgIT]<a`AaV?eS<p\3pS(mN+uK.mJ#qJ%zK(pJ+vS6zZ6rT4w[/~T6\84V3\84K'\84O\1d\8fG$\86>*\87>&\81?/\82@,\80D.\87N*\8bI\1f\8bU\e\8eJ\14\85M\1euL&tS)w`&v_$qi'pf*zj0rj/fk.ku)`s,dm)jr,br#bl1_u1hp3_g5`k1[g,\d1\q$]k-cp/hv<`m=[oGfoFdqLngJtqGioIlhKukX|oSrn^qbg~^ruapv_sv^uzhwvfoubwsb\85lX\83tW\82tP\7fvY{i^vdhwgjw`brjewmf\8akq\8cqz\8eos\81jd\8cuc\87qh\93hf\91h]\88dV\8abV\82bV\83eW\84saype\81xW\88\84a\81\80Z\8ave\85|^\8avX\86wS\83rG\8bsK\81v@~\80Cu~=|z?\85~:\8cs=\83o7\88q0\83k0\8dm+\94n:\8eh;\8ac=\86o=\8co:\93pH\8bmO\8frH\8cgR\8bmV\93oL\9cnR\97zO\9e{Z\97x\\9c\85O¢\85Iª{M¢\81I\9f\7fK\95\8aP\9e\90J\95\8cF \8fK\9b\87O\9c\8bI\9c\92T\96\90W\9b\97Y\9f\95b¡\9bc¢\9d[\9e\89ÃØ\86âÞ{ÃÙ\7fÃ’Ã’}ÃÚzÛàsÃäzÃçvÎä{ÃßyÃÑ~ÒÙzÃÃŽvÌÅoÄÎxµÖs³ÊxÃÃ~­Â\93­¾\8a¶´\89¨·\80£«\85¦­|\98¨\84\96¯\86\89¯|\8d\9f\7f\85\9c}\87©\8c\94\9c\90\8b\99\7f\89\9a{\8a\9c\82\8e\86s\9e}\83\99\83}\9b\86\81\9c\8f\84\9f\91t\9e\94}°\92q¦\88r¨\83kÂ¥\89oª\8bk¬\8au±\85i°\86o²\82i¤\8bc¦\83j\9fqs£rq\9boh\93og£ja\98kk\98qy¤oc¡hb¡i[£Zh\9aY^¦cd\9dgn\9eqg\9eoo¡uf\97lc\88h^\84ec~gc\8c^e\89jr\89ik\86mkuqjmeelnXod\`NPhUPXRZbYU`lYal^lmbjfbncXbeWn^`jQYgQ\vHKnQQnJPh>Xq?JiSQeO[aCVdHVkHT\GPe>`[CZ`CiX@mb1gY,l[#oV"sV"iH\1dzG\1fqN0vV-qK)uU3uQ6\86P*\87P)\89V/\81K%\86Q!\87B!\87=*\8f?/\8bI)\81C&\86P+\86P"\8eQ\1c\81Q\1d\87R\17\86K'~Y-uW)xa$qa+ej"l_+qm8od)me1ip-_r&_k"cq0[m,]m-Vh2dh>Vl&[]0Rf'Qd&Zl+dv4cp@]jDek:fhGadCfnJjfL\rJsjUll_liYyha{do}mh{e}u`up[xrdn}curczzU\81lP\88xU\85}K{wW\86g_\80neufspeg~okwok\82ju\89cm\8fsk\90fi\80tc\83pb\8epk\8ccY\8c`R\8fb\\88dO\7flX\83o_xjU\88pT\90{V\89\86Z\8a|X\84xZ\7fuM\85lL\82}QxxMwsBss?|vC~tE~rE\81tC\84p<\81v9\87e+\80v%\83j5\8fqB\84mJ\91qH\87kL\92vH\80qC\89sB\81uQ\8eyK\9d}T\9a~V\97r[\9ap`¡\84M\9a\87R®\81WÂ¥vG\9b\83I \8aQ\90\81V\91\89J\9d\88K¢\83W\93\8aW\9d\8dV\9e\8aQ\9d\92a\9f\96a§\91c£\90]¡©W\94\8aÃé|ÛÛzÛÃyØÃxÖÒ|ÃãyÙêwÕä\86ØÓ\87ÉÑ\86ÆË\82ÉÌ\7fÃÔ\81Ã’ÃwÆÒw¼Õz½Ãx¸É\8cºÃ\91ªÀ\94§¼\85®º\82¥¬\7fǬ\8b\99£\88\91Â¥\86\83ª}\83£\88\8b\9a\84\8a\9f\84\87\90\8b\93\8e\86\94\90\89\94\96|\8d\87y\97\80w¤}\84¢\88\8a¤\8d\81¡\90z\9b\8dr¤\8dy§\84r£\85t§\7fq¤\86i \88n¬\88l¤\8ai©\89f®\8aq«~p\9cvh\95il\94sm\95ti\9dna\9dib\99pq¡fc\9ag`\9egc¡\`\99Ud\9eXe jpªnnÂ¥md\9aei\99l`\8eld\7fnozmm\7fbt\82iw\87qyzlrtmdrrgkg]l]^nXQiQQ\YXe_[kebea^hldcoXhdScd]fYXpYYpYUrUIvEMpH[qFMrOMtOUdOY]@RdCUfISeH]`:Tg@Z]9Vb6Xb:g^4p`#nU+jT$kS*jM\1erU$yM'\81Q2zL-~V&}[+za.\81\-\80\'\8a\93?(\8d=*\8eD-\8bI,\84D1\8dN*\8eH#\85R'\8cK#\86N\14\7fO\19\81P${R\1cuQ\1fi\&i]*j_._h/fk(^e'di*ai(Tc/Ra0Pf5Vc4Ql<Ze5`g3U`&O`*Vc.]e-^n8_l5Wv9]n=^h<im:dkIegU_tR^lQmgWvYcq\_qibukmqrzvg\81}Z|zVsu_{l^\83va\80|T\84~V\8byM\82kU\8ahZ\86hc\83ilwil|qc\80ftyaw\82dm\8cki\90di\86hm~ka\86g`\87k_\86`]\89nY}lM|iYxjT}sO\83jQ\8bsa\87\83f\8exc\83oT}nI}oKq{Kh{ToyJ{lHyuB\7fp>|l?ys>um?~l@}p2xm(\83t2\80sA\8euE\85nN\8atH\89zK\86|K\89zJ\82\81B\90}G\9bxK\98\83Y\95\84[\96uY\9bxT\9e|S©yJ£xL\9f\82L\98\87V\98\84N\9e\8eM¤\84Q\9d\86U\9b\81U \89V¨\92b©\91\§\96_¬\89S¢\96K\95£S\99\80Þá~Öæ{Ãß~Ã’ÃŒxÊÖ\86ÖØ\80ËêxÚê}Ôç\81ÈÙ\89ÃÃ\80Ã’ÃŽ|ÇÇ\88ÆÇzÇÃwÄØ\81·Ì\89³Ò\87²Â\86¯¾\8c©µ\7f¼\8c±­|¦¥\7f©«\7f\97\9bz\8d£x\8b\96\81\92\90\84\86\91\84\94\8a\8c\96\8f\8f\89\8b\89\94\99\88\98\88\85\9a\84\84\94\7f\85\9a\86w \8e\84¤\8b\83\98\86u\9b\82t \83t \81x¤\88y\97yn§\84x¬\83u\99\81u\96\84u¢tw\9e|l\9epe\96nf\9bii\94mn\9dbk\9dak\99i`ªadÂ¥`d¨`^\9bYg§bc¢[k§pv\9bfo\98er\94mn\92oh\85pi~px\81pzvus}kxzu{~qo{bjqfkec\maas]W`aJ[UPa]VidYh`XfaV`^VbY^jV\laTdXPp]LvFFsKF~IRrCYyLUvPUq=^_8TlAS]CN]IWhGM^4_c;Ma0Sb9X`&f[*m^*n\&iS'jL\1csU\1aoV\1eyQ)vX"\7f\84`\1e{^"zd/z\*\8aS\1d\88G(\88K#\86I+\96R#\92L(\8eU%\83Z)\89N(}U'\89R\19\87P#wT\15\7fU\1f|Z\19pW+fZ&`j0]l)X[$U`)Um.ed2_c<Zb=Mc1Vb2Ok1Yf0Pi2[]-]a"b\/Un2]n?[j3^gHag6Zj8Wu:TpJgjO[nI_jRnleb`]ibhkZgx^tuc{xm}vZ}rTmkY\80kW\81zV\88uZvqU~vU\84v[yqT\84i^~ljxrg{up\81ql\86lq\83dm\82\d\8ekq}eo\8akn~gf\85h\\85h`\8bd[}`O\81gQ{hZzc\\8an_\81wU|yc\8dn]\89yTzwKwsTswLh~UiwHmaVscLn`@pcIkp=zqBmk?}i0th+|u=\8amD\88yF\92xR\90vP\8apQ\8bsE\8auK\87\82S\94~M\92\83V\9a\87[\9dv[\98}X\98\80S\9evY§}P£vT\9ez[\9f\81P\93\88N©\8bJ£\8dT­~Q¦\89U¢\8dTª\84Y \89Q­\8eNÂ¥\88F©\97R\9e\95O¦\80äâ}ØàvÃäyÖÖ\86Ãß\81ÃŽÃœ\84Ãç~Ãá\87Îã\88Óä\8aÔÞ\82ÖÔ\85ÕÓ\8cÈÌ\85ÊÕ\83ÉÃ\85ÄÊ\90µÒ\93·Ç\8c¬Ã\8aµ·\84°ª\83µ¬\85¨¤\88¨§\83\9d\9e}\94 }\90\94s\8a\97z\8c\8e\83\86\8c\8a\89\90\83\92\87\8b\89\8a\8a\93\87\85\8f\86w\94\8ez\9e\89~Â¥\89\81¡}x\9eyz\9a\7fu\9a~w\97\82r\94{s\90wx\9c\83q\9d\80r tv\94tx\95nr\9dup\96os\9bks\9agf\91jj\8eal\9b]j¨a_£db jg¢cm¢Zm¤]u\9ahn jy¤et\9afm\97fr\8ckl\87kt\83m~\80l|vw~sur~nmzkup\rj[dn_[lcVle[mbTj_OpWVh_S_dZg]ZcbS_XJi`Qj\YeWWfPLsGLwMO~EK\80AZ\82C[yIYjM_f?blLXeJUePLfEOlERj5Tp3Rg)\k1c`,of,lb(b]!bQ)oO rN\18s[\11zV\e\80U\18\82a\1etW#v]&\7fR\1d~K%\81E&\85L$\8dX\1e\8fT$\8eM/\8dL*\95N#\8bY&\8d`)\7fa\1cz_\esS\15vM\1cuW\1eo`!ed&\`'Yc&aa%Y_&V\2Yf7Yi?Z]>[i>Uf2Uh/Qd.Yg-`\)h^&bf&Zf*Vh5]c@XfETn;SsARgFUl;bo=hfJhb]_kaXk^b^drWmtasuc\80sj|hi~kWtiT\81rX\7frS\83wPwwV{z\}{\|s^yjevqf\80zg\89rk\8cth\93lj\88dc\83^i\7fec\82bh\86kl\84ja\83eT}fW\81d[\85[Q\80_I\82`P\85pYwp]yme}s`~lV{qO{|PmuPlwTltOrfNy`YrXYm_NghMri=qb3tc3qg2\81h7\81s?\89pJ\8dsP\8evK\8etG\95oE\95tR\8a}Q\88zH\98\80H\98}N\91\84O\9b\7fL\99\7fN \83Q¤v\£v`©wZ\9dzP\9d\88N\9d\92E¢\8bF«\8cF®\85N­\88UÂ¥\83P£\7fM£\88O¡\93H¤\98J¡\9fO\9e\98V§\80éÃxàè\85Ü×}ÜÞxÙÞ}Öã\80Ôà|Ãà{×Ü\83Ñß\7fÞÑ~ÒÇ\81ØÔ\88ÑÓ}ÓÓ}ÑÌ\81¾Å\84¼¿\84®È\94§À\89¨¹\83««x«\9e~¤¤}¦¥\86\9e£|\9e\9a\81\8b\9b\83\96\96\87\90\92\83\95\86\84\84\8c\7f\82\93}\86\90\8c\86\88\8a\96\8f~\99\80\81\93{}\99\81\81\9d\83\80\99\80v\96\7f|\98\82{ \83s\91zt\99uu¡\80w¢\80l\91pq\94sy\95po\91|o vd\9fdg\98_i\95_e\9ehs\97Zb\9a_e\98fj\9af`¢\h\97_e\98Ve£hj dr\95Zv\99[z\98aq\85gs\84cqznpxnxrukztx}rhymkmVllVjj[Zh_a`\Xla]g_Rq[VqaRfa_c`[lZ^oNOjPZ`KYaNVsCWrELxNQtNE}@PyEbn:]c<biHa^:Z^BXhIMl9Mk;Nl*Ri%Tg$_[)a_,kV\1fmb+jX \R(aO'oW\17{M\17}N\1cyY\1f{P\1fxY\1d|Z2\83V\1f\81U$\81C"~B,\81M#\8bJ\1d\89S)~T)|M%~[%ug\1avg\1dnT\1azU\1dnQ\1dmZ\18i`%mb\17aj"Pk4Yi3[\1^k4VhD_b:h[5[e6Yo7Uf;Vg+da-fk2`o3Wi4at/`eDWt@foNQw=NsCSs:WbGafRpoW`eRZbgY^e]Wjmmfsoxnj\80om{iqvhfuj_~|eupX~sWtxZs{g}~Z\80s]\84{a\80t_\8bwm\8btd\87mq\7fnl\88fo\89fl\88ap\80`l\8fif\80h_\89qZ\7fbU\90jN\8b]G\7f_Vx_X\83gXyo_{k[~q^\81vZ\83lV|qQ~tMypQs{\jpXlcYpmPugNr_?yh>|`<qa9\7fd;}d9zjB\85xQ\83iG\92pO\8czH\98tW\90sT\95|Q\8cxT\96}N\99~F\9b\88O\94\84P\9b\84]¡yb«w^£vg§}]\9c}T\9e\83W\9b|S\9f\89V£\80MÂ¥\83J¶\84S®\87T£\86X¢\88P \8dQ®\88W¦\93J§\92[ uÃÚzæà\88Üä\84Ùâ\83ßÚ\82ØÞ{ÓßtÛÙqàÜ}ÕÜyàÊ{ÙÇ\7fÓÌ\89ÓÔ\86ÃËvÉÃrÅ¿\7f·½\8b·Ã\96­¹\94­®\81¦¬\84¯©x±\9a}«\9d~ \9b\83\97\96\8b\92\99\8c\8f\98\8a\95\8c\8a\89\89\87\8d\87\85\8c\8f\7f\8a\89\85\8d\80\87\96\88\89\91\86\84\93x\80¡}|§\85}£\86}\95v\83\99\85\7f¦\88\8bÂ¥\7f\86\99tx\9as{\9fs}\9dqm\95zl\97sv\94ui\98ha£fe\9agj\9c_n£Zh\9bfd\9b`i\9ace\91dj\94Ub\91Qa\9c^h¡bj\9aZi Wq\9baz\95Ur\89Zv\84^l\7fklrmlvclyft~hlx^bsa`nfimZkqc`e\]gRahOWlTWqaVjXTnTWuK[rJadGYbD\l<QtESqMMyDE\81AMyMQk@[e;]^<^aJ^]HSW8Zc;Pj:Pk1Il(Uk)eX$^X#hV$c]%`[#fS#dP\1daL&kW!j^\16vW\ f\83\84P\1f\83`-s^0\80U,\89M$\82G\1ezG'xC\1e\86M%|N-xN,}R#pY\17pe\1ekf"jc\13wW\14iX\11iS\18kZ\15cd\19_j(Nd4Wf9Qe-ae5bj@f`@db<egC]rAbk9V_8fd=fr:Ys7]o0_j8YpH]hEbqISsHTq@]kCXhNggRfgR]]Sd`]Z\Y]`d\kgdtvrr|{xzvvykovvft|axtazzWw}exva\84ti\80{c~\85^\85\7f]\8cui\8cxf\89ml\8bdl\80_s{dm\85ib\7fhd\86i^\81nY\85qU\8fiI\91jH\83gN~nM\87dN\7fiO}iS\87rX}ob\80y^\85uX\88xY\7fpUzqZ{v]or^ln[xc[~eXrhPsb=}]B\7fhA\87`?\89e>|gDysI\81vB\8djI\8byN\91~Y\93yW\9ewM\99\82V\8d\80N\89\81J\87\8eT\8c\8c\\97~_¡|`¢\83h¤\8ag¢\86[¦\84]\98|Y\98zS\9b\80[ \89K¡\8fK°\80R­\81P\9e\7fU£\8aV¬\8c\¤\85S¨\89L¨\8eV\9b\84Þé\87æì\83Úí\84Ùâ\86Ùè\80åâ\7fâãqÙãvÛÓ\84Ñ×uÓÓ\82ÚÃ\81ÃÇ\8eÓÃ{ØÌoÈÃwÂÃ}¿¹\8d°¶\90¯º\8e³±\8e\9f­y«©\7f³\99zǤz\9f¢\81\9a\9c\83\8b\99\8c\8a\9a\8a\9d\97\8b\91\92\8a\93\86\7f\84\8c\85\94\86\82\98|\8d\93\81\82\99|\8a\8f|\80\98u\88\9d\86\89Â¥\7fz\9b}\88\9f~\81¡\83~\9f\80\8b\9dp\85£z|£lv¡rl\8exs\92hz¡pl\99``\9eXhÂ¥Xo£bo¡_u\98Uh\95dg\9aYf\8fQm\95Rc\98Rf§Pg\98Rm¡Ji\95Ty\8dav\8dS\80\80Vkvct|auyjtpjjp\u~Vkrbjlgke`mk]paer[ZbcVhhOZeNczVapZWlN\wKgkRYpCcgJVpLZj?]q=OzAWnGL}CUg@W_8bg;Sf@\]CXX?He=Qe;Kh3Vl1Z[+aU&eV&_d\16_X\17\_\ecW\17bY\14qS\1ezO\1a\7fW\1d\7f^\16yS\11}P\1d\87S\1auX-z\\1e\85K%zO\18\85C"\83R&|Z yN\1f~W'oT&uR\1ffY"fg\19lc\17x]\1diS\12lZ\16he\17hg\18Wc+Jg)Oe9`Y1eb2Zd?a`=jjC_s7amFZh8cm;^m3k|3Yv4]|0Xn7VrIYmLcfB\pDad:TlM_^CZhG]cS_dYgfPgf^]kmalrhxzuwo{xvxttqm}pf\84xc\84wfxvV|x\xya\83pg\8awd\88yd\82\80W\89\7fk\93lj\88ci\92kg\8beo\80bt\8din\90\j\8dh_\96db\93cQ\88dD\88bP\8bfH|eR\86gKzmS~p]\8cxc\8ag`\88kX\8dr[\8ct[\80sX\86mR~mWzncthYud_waRvkGrgA~nJxm=\86m;\88m7\82mC\88tC\84gO\87mI\8doP\8etV\9bsL\92\80W\9c{K\93\87]\9a\82X\8e\82S\87\8a[\8f\84[\98\86`Â¥\85^©\89a«\7fZ©z^¢\89`\99\84T \83T \81Wª\8dF­\8cR¢\80P¤\8bV¯\89X±\89Z\9f\8aZ\9d\8aZ\9f\90Y\96\8eëì\8eâî\96êä\8fçç\8aëÞ\86åÛ\82ÜÚxÃÃtàÚ|×ÃzÓÓ\84ÙÇ\8bÓÃ\81ÃÊ\86ÚÇyÃ’ÃŽ\86ÇÃ\86ÈÂ\85ÇÅ\8c¸¿\83¸Ã\89©±\85ª§z©¤\83 ¯\83\92­\89\89§\8c\8f¢\8a\96ª\93\94¢\96\8a\9a\87\88\8e\86\8a\8c\7f\91\7f\80\92x\85 }{¢{\82\9c|\87¤\7f\88£}\7f¬~\83ª{\8d¢\7f\8e£{\86ªn\88­p{«w~£v\83\98f|\98fs\97_l\9fdk£`c [k\99cf [l\98Op\9fSt\99Nm\8aSu\93Ln\94Mp\98Lg¡P^\98Cf\9bGv\90Rx\8aS|\86W|\84Svt\uobnsawpckqcfvUilSombti]uidokes`_he_ihMllKdsSfq^]sYh|NdsM`hM_f?baAbeJcuKZwD\nBRrBRp:Wa>Ue;V]9IY=MV:HSBN_>VY<T]0U]$TX#b_"e`\16d^\11i\\1dq]\19oS\1cpU\12|O\16\80S\15}`\10\82b\17\85X\11}_\15\7fX'wP'|M!\88\82O\17\85X\15~]\15y[\18s[!vc\19kZ\17i_!d_\1eff$o[#hY%g[\1d]](db(Yi0Vb/Vd5e]:jbCa`<cb@bnAfq9ap@iq6bk:`t9du:_q?Vy=`wK\iI\lK`dI\d>dcD]e=Z`AYkLagGmtJoqQkpgksmluoi|wftutuurtzqv\83vm\84xg\81|c\7f|c}sg\89qc\84{j\8bye\85{k\89|a\8d{`\8bmg\95bc\93ak\8adg\92ik\8dnq\95al\93fa\93a^\9a_\\91kN\90bS\86hN\86tM\87rS\86wZ\81x[\8b|_\95pg\91nm\87ya\7f~_\81uT\82tZunbwxf\82q^\80lR|iU~qK\82lR{qJxuH~v8\80k9\89r>\8fiJ\8crP\86jQ\8cpL\88vQ\92{V\8f{S\98\85T\9f}\\99xd\8d\84Z\92z_\8d~g\94vj¡}e\9e\83a\9b\82aÂ¥|bª\85\\9d\8c\«\85Oª\8cM£\8bQª\85Qª~Vª\85T±\84_§\8ccÂ¥\85[\9f\88[Â¥\86Q\9f\8dêó\8fêî\85çà\8aÜâ\88åç\8aÃ¥Ã\8bçå{âÙ\82ÔÛzÃ’Ã\88ÎÊ\88ÔÆ\89ÓÓ}ÃÃtÙÃzÑÀwÇÆyËÎ\81Ȃ\88µµ\8c­¶\89µ®\82«°r«®\83¦°\81\95¤\82\9b£}\8d\9d\87\8aÂ¥\8c\98\9b\8e\93\9b\83\93\8e\7f\8c\93\91\9c\87\81\98\86\8a¤\81\8e\96\85\8e¤y\84¤\82\8a¤\84\8aÂ¥\80\80£x\85¨q\8c\9e|\81¨p\80\9e~z\99zu¢ws\96pr\97qx\97b\7f¢ei\97hr Xl\9dRt¤Th\9eR{¤W{\9cQp\90Nf\8dNl\9aGb\97Vm¡Mf\9fLc\8cPb\93Si\85KkxJt{RnsUiuYtwMhz]tnZby\tzWjwYvgXq_eze_tmWzhOftGivMk~WXnU[{K`kSWpC]q9__?__I[dCWpMYm9Sr;Qo?[a@Q\:Pc@TV8O]6YN1H[8Ld:S]1Sc.OX(P[*SU%fZ\1efZ\19nb\11rT\1esN\1dnY\13zR\19\7fZ\ ey]\vsS\12\81Z\1duM\19xQ\1d~Y*qO)\7fK!\7fV\1c\81O\15vO\14|S\1cl]\1csV\18cV\10nY\17eQ"jV)hd*YV\1ddU+dX*gc%Rb'[`.\b2]a2Xb7cj7]l5Zw=_gEfhHeo@lmI`m9bs9c\80BV\7fI^z9Uv<]aGe`Nc`A\bFbeJY]JbhHcgRaaSmeTuoXpspo|pn|fn|itwppuxpnt\7frw\82h\84wmt|cv|[\85pf\87nd\82tb{yq\7fps\8a~m\89vf\8egd\8fim\8cmq\93bl\99ir\93Yn\9c[]\8e_[ j[\8fyT\90rL\81gQ\83j]\8fmS\8ep_\8dw[\94mb\94ti\8du_\8exU\85zQzwW{sS\80je\80h\\88ma\83gV}hJxcMxoR{pR\86tE\81iK{vE\81lH\80tO\82pK\8fmW\87tQ\96nO\93yV\94}a\90sX\9f\7fY\9f\85O\9b{O\9c\85a\8fxk\93{d\9f\8b]\9c}i \84i\9b}m¤\84e\9f\81f¢\7f[­\8d^\9e\88T©\80`¡\83^\9e\7fU«\89S¢{\¨\82SÂ¥\82\¢\83R\98\7fÃñ~ãí{äì\83áÚ\8eßß\89ëÃ\85ßÛ\84×á\7fÜÓ\82ØÃ\83ÕÈ\82ÔÒ\89ÃÃŒ\84ÃŒÃ\84ÖÆtÕÃ\7fÇÃyÂÈ~ÈÀ\84½³|±±|²¸v²·{¨±\84\9b®\80\9bÂ¥\88\92«~\8c£\7f\87\9a|\8c\95\85\95\91\83\91\8e\8f\9d\96\92\9c\92\88 \92\86\9f\8c\86 \81\90\9c{\8c\9bv\90£y\90\9cw\8aÂ¥p\87\9fn\83\94z\87\9a~| }\81\9fvy\98ry\9bwv\9ak\83\9fa\84\94c\83\9e]r¢^k\9eYq¨Sw Wx\9dLp\94Tt\92Of\88Fb\8fNj\91Um\94Ul\8aOh\8eQe\83Pc\7fReqEvtEvpAmnJdsKisIgzZo{Zqt[poSxadw_cxc_wvTz{SrqEp}J`xQ[vTZzGSuGReFWj9Te4Qh?UgIchG`k?\oGWp=X`6U^3Vd4J[3OV7SP0OW2MY5RX(Ph#J]-Ma%]W!fW\16ob\fk[\10lR\11qU\16lY
-pa\10xf\10v\\ f{Q
-pQ\1cqV!xW |J(sN'xQ&\81V rN\elJ\1enI\14pU\13m[\1chY\1ac[\edQ!\N#Q\"]\)]Q'`Z&Z\-P\.Rb3Xd/Ob+Qb6Th9Tm=[q:co5ag>mfKglGgt9Zs:bxG]{Cb{IZt>\o9_eEUe@YlGgiNciLdfJedPn]Sid`piiutdsomlvfxpbrsgyoisqlyfk\7fey\84nvzirx^\80s\\82s`\7fxi{uj\87us\8czg\90xi\8ckt\98`n\92\q\93hr\93`j\90^j\9a^k\9emZ\94oN\91vJ\85p[\87w[\86s[\90uT\93vR\8enY\8cud\88x]\91vR\85\7fT\82|M\86\7fS\81xayn]\7fl]\88uY\89gL}cNxkJ\7fkP\83qT\85mP\84iFxoI}pG\84rV\87kU\8af[\8bqS\94qQ\91q^\9as]\92}T\8fzQ\9d\80K\95\80O\9d\84\\9ey^\98\83^¡\88f \89f\9d~k\95{t\99{k¢\7fh \82_¡\80X\9d\8f_\9f\96\\9c\8b]¡\82Z§\80X yY§{W¨\8bI\9d\8dJ¢\92åß\87èé\82èä\7fîã\87íÛ\80àß\7fÚÒ~ÙÒ\7fäÕ\82ØÎ\81âÕ\80ÙÎ\85ÙÊ\85Ã’ÃvØÃsÑÃ\7fÇÃ~ÉÂ\85¾À{º¹z¸Ã~µ¿\81¶°~\9f·{\9e®\84\97ª\87\97\9f\84\8f§x\95¤\89\95\96|\89\8d\85\89\93\8d\91\90\8a\8d\96\86\9a\86\8f\95\92\95\93\87\9c\97\87\98§w\8dÂ¥s\90ªl\87\9ex\84\9a|\80\9cs\84\97o\84\9cu\85\97z}\97x\88\96j{\9dl\8b\9fc\81\9c^\86\9cZ{¡bz©cu Z| Tv\97Lo\90U|\9aXl\8cMl\87Sl\92Kj\91Rj\88[`\88TixW`pMgnBlvIuy?sqDszL|nBztT|vZwxWolStmZva]ziLtiTpxIlwJe{QdyIe~NVs?_mEWlCPp>Ik7MeELkDWl9ao9``6O^<T]6Nj9Pf+G\0FX8HS+U^-EX8FW%El\17Qh\1aUX$\`\1caU\12cR\18fN\16fZ\1enX\1ckT\17bU\18t[\bmW\17tP\16qM"pK\17jO\1czK!qL\eoP&xR\17iV\efW\17lN\12_N\17^[\13`W\1e\H\1feH$[L*XL&PQ$]E+SG0^T(VX,SX0R^&NY%^i1Zk>Tq<bq>an6gl=dnDhg=fsEWy@Y\81?f\85Ii\81KbwI]jLatL\nA`fLakGZdP[]Hd`Njd\gdeoebsj[pgelqkiwiordnulvilljux_qqdx{hmlesvhv~kvslq\81i\7fn|\8d{l\85yi\89gu\8bal\99an\90hg\96hl\99Yi¡l_\90iY\89iS\95vU\87rS\87wa\8eqb\8b}[\95~Z\92w^\90oW\94rc\8f~]\94zR\8e}Z\88~M\89|SxvR{nVymV\86mV}kK\83bS\7faK\8cmK\8d_W\85rV\82oK}jP\80v[\81f_\90m_\89uV\87vI\91oY\94p[\9do\\99~W\94}V¢\86X\96{a\95yg\9c\7fj\9d\91a\90\8ck\93yr yc£\84n§\86o\9c\83h§\8dh\9a\90`¢\89_\9f\8di\97\85f\98\88Z\9avV\9erQ©\84P\9e\8dI\9c\94âÜ\93äÞ\8fåØ\85ïà\89ìå\86áØ\87æÛ\88äÔ\87ãÈxçÊtÙÆvÙÉwÎÈxÑÃ}ÙÃ}Ã’Ã…qÔ¾uÒ¼\80ÃÂ\80ȼ~Ȯ\86µ¾\82¨µ\83§¶\86\9e±\8b\98®\8a\92 \81\92\9d\7f\9c\9c\86\99\97\89\91\92\81\8e\8e\87\8c\94\8a\8c\91\94\8b\86\96\9a\88\91\9c\88\9a\97\83\9d \81\93¢w\89¦r\8d¤p\80\9er\82\9ar\86\9bj\8e\9cn\88\9cx\88¡x\8d\9cs\8a\96g\83\9ce\89\9ea\8f\9d^\86£_x\9aVx\9dXy\9dSv\91]w\8c_x\90Oq\8dHs\84Ld\8bSe\87Y[\83T\\86V`{HcqHfxGgsBjoHotArvG}zBsuFxnPwlGxiHllFqhRssNplHsmVjyRj~RbwCUs=XzE\\81@YzJQlIKk=I^CN_7Wh3Uf@[^<W\2P].Ef2=]2Aa0AX,N\7GR/HV-Kd+Hd\1cQf\eTY\14MU\12SU\12bN\1e`P\1eXQ\1eaU\1edS\1a_M\ ffN\14lV\15lP\13mK jQ$mF!vE\1cnM\18nR\emN\1ccT"fW\18jY \P\19XI\19\L\1fTI\18ZI"[K%MB,OE6KF1PC3VF(RN1RS*P]3^]/Sk1Vi7Sf=a`C`bD_k>[o@WlCYl;^v<l|<i}DiqCauFnuMivFhiB_dEUhDYeIR[LU]Zd_Zacdh_Ynd[ll^skmwwuvwmrqbjnfvepsdqvlykdpzh~wb{wjq}nvup\81xs~rn\81wo\86xs\8fiy\95ls\8d`i\95gn\9cai\99fd\95dg\8fpd\8fmY\8dta\91~Y\97\81a\99|d\9b\83d\92xb\98x`\8d{a\91\84X\93}T\8e\83Q\91wN\8atX\85uRzuUymO~pJ\82oF}kS\87cQ\83`H\87bO\8bpI\81nO\81cW\83hZ\85q^\8au^\87u`\96uP\99}X\93uW\98o`\9ar^\96wZ\9f{Y\9dwa\9c}k \8cl\92\8am\91\82t\98\81j\9b\86j\9b\80o\9c\8aj§\8fh¡\8ck\9c\8d`\9b\93e\8e\88f\90|l\97~`\95\80X\99x[\9b\82Y\9d\85P¡\86ìß\92éã\91îé\7fõè\8aï×\81êÚ\88èÖ\85áßzæÃwòÉ}ãÃvÃÀyÜÂ\7fÚÎ\8bÃÉ\87×¼\7fÊÉzÑ»yõz»{¸¹\81»½\7f°¶\7f±®| ¬\82\98ª{\98­\86\9b\9b\83\98¡~ \93\86\9c\8f\82\93\8e\82\95\94\91\9c\96\90\96\8e\94 \8b\92\9b\80\8e\9ev\92\99w\95§\80\92«t\87¡q\89\99o\84\9dr\8e\90s\83\92o\8b\98x\94£v\8f\91u\95\8fh\97\94f\97\9e_\89\97_z\9fe\7f\9eYu\97S\7f\9f[m Qu\90Ju\8eYp\8cPu\8dOi\82O]\84bk\87]_zMj~ShrGkxGglAdmFpmHrs>o\80M{mLynUqoEpnDpcI|nKucMirKk|Cc\80MlxEeyDRpDSw=SnHUl=TqHMg5Vi>Ii9Yl?UfEPo9F_7Hi+Dh0Kd3Bh*Ng5F]2GU0DP*QT\1cBb\1dUY
-PP\13\R\1aYO\f]J\12bS\18iI\1egQ cK\ f_F\10bX
-uY\17dM\elL#gG\erR$kL\18jL!`N%gJ%^O\1e^N&fC\1fRD WN!]I+VQ(PI#TP!SB/GH7QL-[D/MA/OS&OP#SU&\b6bV5\a.[l;`i3f`BaiBYn=Zm>QsCXpBil:esIjgBcl>kgB_r;ggC`l?\iHSeTVh\WbXY\Zgfnol[ykexpjxue}sqrqovmbqodenft[ml^xdbzw^xt_\89op~}hwvw\86tr\85orzeh\7fhv\87hm\97ad m^\92l]\9e_^\97e^\8bnh\90l[\95ja\8bmV\8f}V\91qW\9c\81c\92se\9ev\\91vf\97uc\89~Z\89uZ\8e~R\86yP\8dzR\83vOypR\86xV\83yS\80jF\82iT\82[E{gO\8bmP\80nX\8cq[\92jT\80eT\89hc\81tW\88r^\97z[\92}P\8dzQ\92wS\8dyV\95w^\8e|W\98\87Y\9b\7fb\99\85l\8f\95i\99\86r\96}u\96\80u\96\84u\99\88e¡\89h\98\8dc\9b\8aT\9d\90d\91\86T\9e|a\9axU\93{S\97~S\98\7fR£\87R§\8aóð\88õë\83ýß\89öã\8eðØ\8bôÙ\84ëà\83èÜ\83åã\82ðØ\85èÃ\82ì¿\82äÅ\89âÃ\86ßË\8eÿ\87̼~ÃÄ|ʾ}Æ´uǽz¾Â\88¸¼\84«³\83©­\82\9e±\82¢§~\9eÂ¥}\97\9c\87\97 \81\9b\95\88\90\99\84\99\8c\86¢\90\96Â¥\8a\98\99~\95\97\82\8e y\8d¤u\87¦{\8eªx\8f¤s\87\9ds\84\96o|\9cf\84\94h\86\91m\93\99u\8d\98r\93\91c\94\90j\95\99a\88\9dc|\9cat\97Wz\8d[p\9bWr\9dHw\9aKm\8dSt\94Rs\89No\83Tb\8bbk\8ccl}UpzKe\80Ql\81XguQvzCsv>j{Lg{Mt|HqqKgp?ej>uc8{f;rsHiqNbwHlzBh}AbwEPq?Kz3Mz>Oj=Rp9\h:On@Nh9Om6Vo8Jk;Cm3Mc#J_"TX,Na(Mc7Kc9NU)QV)PS%DW\14IT\ fPM\11NV\18ZM\ fUW\f`R\ ecI\1cgL\1c^F\18ZE\17_N\14nW\14oL\19_M#nT\1dkW$k]#cS gJ dP ^P#`>%`B(YG\1e^I\1dRS%TI1NE+SE(GS)SN+WJ6]B2QJ,WS%T\+bb4`Y4QT-SW+[c4Wn4`m6_j>[sDVsAPp<Zm<]c@aj?fl;[d>bd;fb@f`DbiC\`TTgSWlQUh_Qmb]jfac[ui^trctneuqc\7fukxmfjffe\rqamlh|jk{jg\80n\\8doa\8dxp\86wu\80x}\80gz|`i\83ef\95dj\9aa_\9cmc\9am_\9fda\96da\8cqb\90o]\96h]\92a^\8dj^\98oZ\9axa\99t[\93oa\8dxb\89vZ\8fq`\97sU\8eu_\87|Z\80sV|iL\80uY\82vW\87uQytMyfK\81bH\83eM\89nQ\85{S\8cvW\92sV\93j\\89ob\86t]\8awT\93pV\92tO\8f\82X\89\8aS\8f\81U\8c\80]\8d\81[\98\7fe\99\88g\91\94e\94\90q\8f\8an\8e~o\98xk\97~s\92\83q\9b\8ah\97\86g\99\91X\9c\81L\9b~Q\9b\80U\91\80P\8c\83\\9d~Y\9e\85Z¬\8c[¨\8bõð\80ðí\8dõè\8bóæ\89òå\91ôâ\85úÙ\8díæ\89îá\85ìÒ\85çÄ\81ðÅ\8bßÃ~ÚÊ\8bÚÃ\96ÑÈ\83ž~¾Ç\81½Ä|ɺ{¿µ~ƽ\80´Ä\8c°¿\8d¦²\85ª®\8d«©\8e\9c£\83\98\9c\8b\94\92\87\94\94\81\9c \86\9e\9b{¨\8e\90§}\90\9b~\91\9cp\86¡t\8a\9av\86\9c}\82\9fv\92ªo\93¤t\8e\99f\88\99p\8b\9fh\8c\94v\93\94q\98\8dq\9d\95f\90\99c\93\9ei\8d\95U\80\91T\8b\89X\89\90L\84\95Tv\95Tz\9aIu\93Uf\89Lu\85Ze\87[g\92]k\8c_i{Zly[mxPbwUj\81Qw~LxuIlrJf~@pnEliDnv8noFyp7vl8np=elFoj:l{3as:fz=Yo/Pn7Nn6Xg0Ug>^h3No1NfAJn.Hk,Gh/Ri7Pb/SZ%T^([d$UZ-O[4Pf4R[$W_$IX\11IM\13LZ\vVJ\ 1NM\ fXU\ 4VK\ 6gQ\16dR\18`N\19]M\vgW
-mY\1afQ\1ebG$`R"eW#dQ\1aZ\&^R(_D\19g@#b>,\;\1e[;\1cYD&TL&]Q\1dGR,KT"HR4HV8]L9SN+^W<R_6^g(UY3ZQ6aW8YP/Vb.^n:]r@^b=_oGWh;]f=\i@Td?[^C_m<^hDhm>`]:iaHUeM`n\SjV_ifced_pb]pkmolseXxr`{gk\80f_~ljto`gijghpa`liiymg\84hc\8dtb\91og\8cso\8ekz\8ctuz`z\8d`o\88fl\98gn\8eme\9ede\9ehY\94i[\96h[\8fm`\89qb\8bef\98h_\8bmT\91r\\8btZ\88mW\94qX\85rQ\91}W\96kX\98kZ\97te\90x^\84n\\88hG\83iJ\82h[\87qO|fD\82iE{hP\80nK\8drL\8bw]\96yS\8eq`\8fhg\8bob\95}g\86yZ\89\84a\8f\86[\87x`\82\86_\8d\87`\95~Y\8c\87_\9a\8cc\8f}c\91\8eg\93\93i\90\84z\8a\81s\91\81k\94\83w\97zj\97\85\\97\81U\93\8cU\96\86Y \87M\8f\90G\8e\87N\99\83W\9e\8bV\9a\86Jª\91W©\8dîæ\89ïæ\80öí\85ðå\86ñè\87ûÞ\83։\85։\80üà\80ð×\81÷Ã\87íÃ\84ßÉ\7fÕÌ\84ÃÓ\8cÃÃŽ\8dÊÌ\80ľ\85õ\81ü}¿¸{ÀÂ~¼À\83º½\87÷\8a¸¹\89©©\8f¨¤\93«\93\96¢\93\8a \8d\89¤\95~Â¥\8c}«\8e\82§\7f\86«z\8c\9b|\8d\97q\8b\9em\83\98p\84\9cg\83¢c\86\9ed\97\9fh\92\9ce\98\9ak\92\8ck\8b\8em\8a\85t\97\87r\9b\87m\8f\91c\9a\88V\94\8bM\8c\84N\8c\8bK\84\92S}\9aVr\9aMq\96Qk\9b^f\8e]c\8cRe\87Xb\88Q_\82Vc\87Pg|Tn}Oq{Gz}KuuMmzAmrBon7co:frDpk<lb;se9va4jh.`j)gq5fm/eq/_d&Qf+Vh1_l(^o1^x:Qp<Ii;Ni:He0MW*QW-\X'U\$ag*^b0_g&Za)[h!Xa%S`\1aRZ\13QZ\ 4XZ\ 3]\\0SM\ 4WV\ 4PQ\ 6UR\13bI\13dJ\10bR
-fK\11_L\10SW\1aXR\13TU\18aT\1f_\,[V'bK(`E\1cbC\18d>%aD\1cg>#hB\1caQ\19^Y\1fPT#SP3QR1WS/QF0YP8\]:Tg5V`6^T2bS1eN.]Z,a_3]f.fi9`f=VmF[gEYgKQlD]h8_b:^h@]h;gc;ah>YjGXfVWea`ea_jbgfb`iajtjqpeno^skYyf_pk^xj_tqnkik_ajafm\kral\85lh\82v`\8dkm\97hq\91^r\85dv\85\y\87_l\8f[m\95al\91c]\9el\\9cuZ\9bm`\93f]\92fT\92rR\9bl]\92fU\85qS\82yR\82t[\86pU\88uS\8b{Y\96tZ\9fkY¢pb\99th\89sb\7fxZ\8cvO\87kG\8dkO\86gS\8bfL\87oQ}tJ\82xJ\83zT\8euS\89l[\92sj\90mg\8fta\98\81`\8f\84_\9a\87^\96\85i\9a}b\8c\87_\8d\85Z\94\7fW\97\85U\95\86_\9c\81k\9c\8be\95\91p\95\96r\8b\90v\89\86q\94\82l\91\88i\99~[\9a~T\9c\8a\\9d\90O\95\94N\94\92M\94\8cL\95\8fM\95\89F£\8eF\9f\85R xùã\88êã\86çÛ\80èæ}úÃ\7fóØ{úà\83ôÔ\8aóã\85ðÛ\84ñÊ\93Ã¥Ã\8fáÃ\8dàÆ\82ÑÇ\95ØÙ\8dÕÀ\8b̽\8aõ\8bż\85ľ\86¼´\83´¸|°»\8c²·\89µª\8d¼§\8e©\98\89ª\90\9a¯\95\8e¨\91\94«\98\86°\8f\88§\90\8a¬|\88§y\87¨\83\8c\9es\8c\98o\8e\9ep\7fÂ¥q\8c¦o\8e h\94\99b\91¢m\97 g\99\8fh\89\93h\95\87a\8b\93e\92\96m\93\8d[\8a\95S\9b\85P\96\88S\90\91J\8b\87[\8b\8fN\81\8dQq\9cXd\8fMd\83Nc\8cRk\85Lf\86Wa\85[m~JtyVpzPguItpIyvMszCim8rwEck6ie6jh@dp=lh0so4sh;mm7bk6fq-Wp!Rq&Lk\eVe)Zi \y-X\829Ro.Ok,Ic,Hq(Wd'PZ-R^*J_\17Ni\1dY_,Wk\1cgk\1fZj\1eOc#Q\\11N^\fXV
-_X\0OR\ 5RM\ 1UU\ 5OO
-_J\10aT\ e[U\12hZ\f_N\14_F\12eO\11VX\1fUU"]S\19UK\1fcL+bG&g@\12`@\14e5%^9&h>!fI\19bE\ fQW\15F[\17OO#HL%TJ2M>-ZQ)\Z*d^,Yf;dY4dP5XU9Ma8V_<W\5^_1`h@ZnA_i>ZsLNn>Si8Yb9dj9dd;[_G`lNa_N`qW\aYap_\fbXnb_j]kzgcvhoz\rnkuwbofmtkgpbpmog`jl[iebjqfg\80oo\8dwa\98gb\91dv\8e_t\87ov\86jn\88\w\87cl\8b[e\8f_d\9aqc\97uh mk¡tb\9bgf\93m\\8euh\8fn`\85d\\86d`\8eic\8bmd\89w]\91pQ\94lW\9exU\97sY tg\92|n\8cmY\8coX\87kN\81gN\86hK\8bsP\8coF\88xP\87yQ\80zL\8axN\92yd\87uX\8dvf\8e\80U\8a}Y\86\89\\89\81b\86\85i\8a\86^\86\83i\85vW\90\83U\93\8aX\93\8ad\91\8f\\9e\89p\91\90r\97\8ee\8a\97f\90\89q\86\85f\91|c\91uk¢\89_\98\91a\9e\88U\9b\8bP¥\94Y\91\8fV\8d\89G\99\95T\9c\84R \81^©sóävìã~éå\7fîßxíÖvíÜzðÒ\81úÖ\88ñá\8cíÛ\95æÕ\93äÑ\98îÄ\92çÄ\88àÈ\8cØÔ\86ÙÉ\8cÎÃ\85Ⱥ\8c¿º\83ƽ\83¾¶\81²¶\82´°\8c°¨\88½¨\86¦\86·\97\8a¸\91\96²\8f\95©\8a\8f¯\8e\93¨\8a\8b¥\84\87¦\8a\83¤\7f\88\9d~\8a§\7f\88¢x\8c\97t\84£i\83¥n\8b\9ec\98\90h\90\9ed\99\9ei\95\90g\93\8ba\95\89\\8c\93h\8e\93i\8a\8d[\97\8a[\96\8f]\8f\8ec\91\8cX\8a\8fW\8c\81P}\8fTo\94\h\96Yn\86Gb\85Nf\85LcyXm}Up}LwxKjvRlkLuoGzqNrs>jv9ug;nd?ot5ar9av2co2pu3qq6ev5iu.Zu(Vp#Sv\16Wj\19cs\17_t&]|-S{&Ju$Jg+Qs1Sp-Pf$[h'Qc\1cOh\ fKj\11Wj\18cp\16cf!Wf$Mc\16Kf\12P]
-YZ\ 2XG\ 3YE\0]O\0YJ\ 4\O\b`J\10^U        ZT\ eeP\18jQ\18bH\1cZR$a[\1f]P#[V\1e[P$_N ]E\1c]9\16\A\1fd9\19b6\1aY="YK"[J\14JL\11GQ\18OF\19KH'GB!NE\1dTP\1a_L'ZY0\a2Xb.[\2Yg8Nc=JaANc?Z[7W]9akHamFVrGYqGXmI^a;_]Aih;]`CVfOXnN]jW]fLcoMfiaZse`k^endol\nvcwv`qvmuvhkkknktnfmrldedhemmplzmn\8bja\91bl\88fp\86mk\92mo\8edi\94br\90et\91_n\8dgr\87ms\8erv\92tr op¢hj\92js\8dto\8af`\83f`\8bke\8add\88sX\94p]\94rb\92rX\95nX\96qY\9dye\97vi\8eqb\86v_\8ffX\93eO\86sS\7fpL\86rJ\90uK\89lO\8apJ\81mQ\8at[\89uY\90xX\93\80X\90\85T\8b\83V\92\82g\87\8bo\87\86i\83\82]\88xa\86y[\90\86Y\90\8fY\89\8cY\93\87_\94\8ep\92\8fc\93\8da\93\82^\90\81d\8d|_\91|i¢\84`©\89[§\8cS\9f\81TÂ¥\91S¡\93V\96\9bY\97\92R\9b\95`ª\8d^©uöõ~ïã\81֊\7fîãrîéwõå{ùØ\84òÖ\85ëÓ\8cîÔ\98íÕ\8fãÃ\92çÔ\98äÌ\8aÙÃ\93×Ë\90ÖÌ\8fËÂ\8bÈÇ\94ø\8f°\7f·½}²°\85¸¬~²¨\85æ\8b´ª\83¼\94\8e®\92\97¶\89\8c°\89\8d¦\87\92§\85\8e\9e\84\80\9f\84\88¯\8b\8bª\85\8b¤w\8fÂ¥r\8c\96u\91¢{\87\9bt\8e\9av\9a\91n\94\93n\9b\94q\9c\97]\95\8aZ\99\93[\97\95]\95\90a\8e\97_\87\84b\9a\93_\97\8bT\96\8cQ\92\8bQ\8eyZy\87Rt\8cSw\84PwwI|yGl\82Bl\89HuuMr\80GpoNpsPjmIvsQvgDwn=jo1et?gm5ao/dc4cc,Zh%ds*ko"kg&eg#jh+`d"cp\19Yl\14Xs\1c\i$`h*Rn$Xg\1aYi!Yp*Ko\1cMt!Tj\17Rk\11[m\ 4``\ f`h\16Xl\12ea\1dYa\19^Z\16SV\vUW\ eYP      XG\ 3_D\ fYM
-XM\ 4VV\0VS\ 3[R\ 5^T
-f`\1aYP\1efN\15\J\16ZU\11ZS\1eRM\16`T\18TN\12UD\10W7\15W9\ f]B\va@\16_8\1cXK\17YH\11JR\14NQ\11EG\15KG$OG#^K\19]F\1c^R2]T%_^6_`:be3Lc5O[>Rk@Um8Uk8ObESh<TcHTpBbsA^fLbiBZm?lgIWaH[pSdpL^fNavQlsA[tK]vae}h]sa`\7fojrbguckzermommmgfo_memjljisib{fn{pi\8ebp\88ds\85fs\86]q\96bf\8dey\92br\94gk\96]l\96gy\8euu\8ctn\92yz om\9eqa\92of\99of\8frm\93g]\89^d\8d_f\93fd\96w`\9apY\9blX\9dyT\99}X§mb\9ake\9axg\86o^\89jZ\87gY\8coN\87gR\86rG\86sE\88vM\8bkR}hL\84xW\87vZ\89oN\98wR\8d\8eU\83\80T\8b\91d\92\91Y\8d\8dg\81\86\\86\80U\8b\86Y\8a{U\90\85X\8d\8aS\8e\86h\96\93e\95\88i\99\90h\8f\8cf\8e\89n\90\85^\95ua\9b\84Y¬\82^¨|U\9fyU­\8d^\9a\97S\97\99U\9d\95R¡\8a_\9f\94_©|úñwùítÿêwÿßxøèrÿç}ÿã\82ôÛ\84ôÞ\92ðÔ\9aëÃ\91áÔ\8fçÇ\90æÇ\93ãÃ\8aÃÈ\84ÕÉ\88ÃÆ\8bɺ\8cȵ\86ɽ\83¿´\81ø\84¹µ\81¼²\85˱\8d³©\88·\9a\90·\90\98µ\8c\93²\8a\94¨\8a\99¦\8b\94Â¥\89\91ª\88\82©\87\82¨\87\82¯|\86³t\88Â¥q\8c\9bw\90\95y\93\90n\8a\94m\90\97c\99\95j\98\8eh\9b\91`\9a\98d\99\99]\99\9ba\8e\91_\90\85f\90\86a\90\88^\96\86S\92\8bX\83\81R\82\82P\80\85U\88z[\83yXxxSy\82IsyJ~~G~uBvpFvs?olDtjA|jBzl7jp3ll>gf9a^6e`(bl$_o%_q'kn\1ebq$df!`d\1adb\16ig\15^f\1c_c\e`h$Yo\1aVl\e]f\1d\i\17]k Ol\19Hg\13Kj\ 6Rf\ 6Yq\bUo\10`_\10Vh\10[b
-``\11`W\ f^P\17UN\ eTQ\bSI
-QK
-`Q\ eX[\aT^\ 6U\\v[W\vaX\14W_\11P^\17ZX\18VR\ e^N\fUU
-XL\12[M\10SM\f_B\ 6]A\11V=
-XG
-XN
-^C\12]=\15TB\17SN\16QI\eTL\19QO\16WJ\16\G\1f[D)`N0aP2Z^.^b,W^:V_?Qa<Rg4Th8WmDOfEMgGWcI]iK_fDRlAViMTnBamGWkCYiL\hRfiFcnCirEd{Pa{UZvgb\80il}phyjmujk{ib\7fmcsjXto\pm]iqghvhfxji}op|ep\8cXh\95\h\8efs\8dgm\9aip\99rw\9ekp\98jr\91py\98kt\93rl\98tq\99rr\98xh\94wg\98qm\91gn\9bjf\95nh\94el\95cb\9aqf\8fqj\90o`\9bzi\99za t`£qh\94si\84xh\82\7fa\83t`\84u]\8ciV\90rN\88mL\8akP\83uO\83vL\90jQ\8bmX\91sP\92\84O\83\85Y\85\83[\91\90S\8d\94S\87\89\\86\87Y\91|U\90x]\95~b\93\85`\97\80]\8c\82^\84\8cd\8d\88\\90\88e\96\8bh\91\82g\96\83g\96{Y£|^¥\7fU¦}] z\¤\83]\9e\8a_\9e\86S¦\93S¢\97]\98\8aW\9f
\ No newline at end of file
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/kaimono.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/kaimono.ml
deleted file mode 100644 (file)
index e524156..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-(* $Id$ *)
-
-open GMain
-open Printf
-
-let file_dialog ~title ~callback ?filename () =
-  let sel = GWindow.file_selection ~title ~modal:true ?filename () in
-  sel#cancel_button#connect#clicked ~callback:sel#destroy;
-  sel#ok_button#connect#clicked ~callback:
-    begin fun () ->
-      let name = sel#get_filename in
-      sel#destroy ();
-      callback name
-    end;
-  sel#show ()
-
-let w = GWindow.window ~title:"Okaimono" ()
-let vb = GPack.vbox ~packing:w#add ()
-
-let menubar = GMenu.menu_bar ~packing:vb#pack ()
-let factory = new GMenu.factory menubar
-let file_menu = factory#add_submenu "File"
-let edit_menu = factory#add_submenu "Edit"
-
-let sw = GBin.scrolled_window ~height:200 ~packing:vb#add
-    ~hpolicy:`AUTOMATIC ~vpolicy:`AUTOMATIC ()
-let vp = GBin.viewport ~width:340 ~shadow_type:`NONE ~packing:sw#add ()
-let table = GPack.table ~columns:4 ~rows:256 ~packing:vp#add ()
-let _ =
-  table#focus#set_vadjustment (Some vp#vadjustment)
-
-let top = ref 0
-and left = ref 0
-let add_to_table  w =
-  table#attach ~left:!left ~top:!top ~expand:`X w;
-  incr left;
-  if !left >= 4 then (incr top; left := 0)
-
-let entry_list = ref []
-
-let add_entry () =
-  let entry =
-    List.map [40;200;40;60]
-      ~f:(fun width -> GEdit.entry ~packing:add_to_table ~width ())
-  in entry_list := entry :: !entry_list
-
-let _ =
-  List.iter2 ["Number";"Name";"Count";"Price"] [40;200;40;60] ~f:
-    begin fun text width ->
-      ignore (GButton.button ~label:text ~width ~packing:add_to_table ())
-    end;
-  for i = 1 to 9 do add_entry () done
-
-let split ~sep s =
-  let len = String.length s in
-  let rec loop pos =
-    let next =
-      try String.index_from s pos sep with Not_found -> len
-    in
-    let sub = String.sub s ~pos ~len:(next-pos) in
-    if next = len then [sub] else sub::loop (next+1)
-  in loop 0
-
-let load name =
-  try
-    let ic = open_in name in
-    List.iter !entry_list
-      ~f:(fun l -> List.iter l ~f:(fun e -> e#set_text ""));
-    let entries = Stack.create () in
-    List.iter !entry_list ~f:(fun x -> Stack.push x entries);
-    try while true do
-      let line = input_line ic in
-      let fields = split ~sep:'\t' line in
-      let entry =
-       try Stack.pop entries
-       with Stack.Empty ->
-         add_entry (); List.hd !entry_list
-      in
-      List.fold_left fields ~init:entry ~f:
-       begin fun acc field ->
-         (List.hd acc)#set_text field;
-         List.tl acc
-       end
-    done
-    with End_of_file -> close_in ic
-  with Sys_error _ -> ()
-    
-
-let save name =
-  try
-    let oc = open_out name in
-    List.iter (List.rev !entry_list) ~f:
-      begin fun entry ->
-       let l = List.map entry ~f:(fun e -> e#text) in
-       if List.exists l ~f:((<>) "") then
-         let rec loop = function
-             [] -> ()
-           | [x] -> fprintf oc "%s\n" x
-           | x::l -> fprintf oc "%s\t" x; loop l
-         in loop l
-      end;
-    close_out oc
-  with Sys_error _ -> ()
-
-open GdkKeysyms
-
-let _ =
-  w#connect#destroy ~callback:Main.quit;
-  w#event#connect#key_press ~callback:
-    begin fun ev ->
-      let key = GdkEvent.Key.keyval ev and adj = vp#vadjustment in
-      if key = _Page_Up then
-       adj#set_value (adj#value -. adj#page_increment)
-      else if key = _Page_Down then
-       adj#set_value (min (adj#value +. adj#page_increment)
-                        (adj#upper -. adj#page_size));
-      false
-    end;
-  w#add_accel_group factory#accel_group;
-  let ff = new GMenu.factory file_menu ~accel_group:factory#accel_group in
-  ff#add_item ~key:_O "Open..."
-    ~callback:(file_dialog ~title:"Open data file" ~callback:load);
-  ff#add_item ~key:_S "Save..."
-    ~callback:(file_dialog ~title:"Save data" ~callback:save);
-  ff#add_separator ();
-  ff#add_item ~key:_Q "Quit" ~callback:w#destroy;
-  let ef = new GMenu.factory edit_menu ~accel_group:factory#accel_group in
-  ef#add_item ~key:_A "Add line" ~callback:add_entry;
-  w#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/label.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/label.ml
deleted file mode 100644 (file)
index b9829fb..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-(* $Id$ *)
-
-(* Embedding xpm data into an ML file *)
-
-let openfile = [|
-(* width height num_colors chars_per_pixel *)
-"    20    19       5            1";
-(* colors *)
-". c None";
-"# c #000000";
-"i c #ffffff";
-"s c #7f7f00";
-"y c #ffff00";
-(* pixels *)
-"....................";
-"....................";
-"....................";
-"...........###......";
-"..........#...#.#...";
-"...............##...";
-"...###........###...";
-"..#yiy#######.......";
-"..#iyiyiyiyi#.......";
-"..#yiyiyiyiy#.......";
-"..#iyiy###########..";
-"..#yiy#sssssssss#...";
-"..#iy#sssssssss#....";
-"..#y#sssssssss#.....";
-"..##sssssssss#......";
-"..###########.......";
-"....................";
-"....................";
-"...................." |]
-
-open GMain
-
-let main () =
-  let w = GWindow.window ~border_width:2 () in
-  w#misc#realize ();
-  let hbox = GPack.hbox ~spacing:10 ~packing:w#add () in
-  let pm = GDraw.pixmap_from_xpm_d ~data:openfile ~window:w () in
-  GMisc.pixmap pm ~packing:hbox#add ();
-  GMisc.label ~text:"Embedded xpm" ~packing:hbox#add ();
-  w#show ();
-  w#connect#destroy ~callback:Main.quit;
-  Main.main ()
-
-let () = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/lissajous.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/lissajous.ml
deleted file mode 100644 (file)
index 9d6cf3b..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-(* $Id$ *)
-(* Lissajous \e$B?^7A\e(B *)
-
-open GMain
-
-
-let main () =
-  let window = GWindow.window ~border_width: 10 () in
-  window#event#connect#delete
-     ~callback:(fun _ -> prerr_endline "Delete event occured"; true);
-  window#connect#destroy ~callback:Main.quit;
-  let vbx = GPack.vbox ~packing:window#add () in
-  let quit = GButton.button ~label:"Quit" ~packing:vbx#add () in
-  quit#connect#clicked ~callback:window#destroy;
-  let area = GMisc.drawing_area ~width:200 ~height:200 ~packing:vbx#add () in
-  let drawing = area#misc#realize (); new GDraw.drawable (area#misc#window) in
-  let m_pi = acos (-1.) in
-  let c = ref 0. in
-  let expose_event _ =
-    drawing#set_foreground `WHITE;
-    drawing#rectangle ~filled:true ~x:0 ~y:0 ~width:200 ~height:200 ();
-    drawing#set_foreground `BLACK;
-(*    drawing#line x:0 y:0 x:150 y:150; 
-      drawing#polygon filled:true [10,100; 35,35; 100,10; 10, 100];
-*)
-    let n = 200 in
-    let r = 100. in
-    let a = 3 in let b = 5 in 
-    for i=0 to n do
-      let theta0 = 2.*.m_pi*.(float (i-1))/. (float n) in
-      let x0 = 100 + (truncate (r*.sin ((float a)*.theta0))) in
-      let y0 = 100 - (truncate (r*.cos ((float b)*.(theta0+. !c)))) in
-      let theta1 = 2.*.m_pi*.(float i)/.(float n) in
-      let x1 = 100 + (truncate (r*.sin((float a)*.theta1))) in
-      let y1 = 100 - (truncate (r*.cos((float b)*.(theta1+. !c)))) in
-      drawing#line ~x:x0 ~y:y0 ~x:x1 ~y:y1
-    done;  
-    false
-  in 
-  area#event#connect#expose ~callback:expose_event;
-  let timeout _ = c := !c +. 0.01*.m_pi;
-                  expose_event ();
-                 true in 
-  Timeout.add ~ms:500 ~callback:timeout;
-  window#show ();
-  Main.main ()
-
-let _ = Printexc.print main()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/nihongo.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/nihongo.ml
deleted file mode 100644 (file)
index 48f7d8c..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(* $Id$ *)
-
-(* Â¤Â³Â¤Ã¬Â¤Ã²Â¼Ã‚¹Ô¤¹¤ëð¤ËLC_CTYPE=ja_JP.EUC¤Ê¤É¤È»ØÄꤷ¤Ê¤±¤ì¤Ã¤Ê¤é¤Ê¤¤ *)
-
-(* cut-and-paste Â¤Ã¢Ã‚ñþ¤·¤Æ¤¤¤Þ¤¹¤¬¡¢edit¤Ã¤¦¤Þ¤¯¤¤¤­¤Þ¤»¤ó *)
-
-open GMain
-
-let window = GWindow.window ()
-let box = GPack.vbox ~packing: window#add ()
-let text = GEdit.text ~editable: true ~packing: box#add ()
-let font = Gdk.Font.load_fontset
-    "-*-fixed-medium-r-normal--24-*-c-120-iso8859-1, \
-     -*-fixed-medium-r-normal--24-*-jisx0208.1983-0, \
-     -*-fixed-medium-r-normal--24-*-jisx0201.1976-0"
-let button = GButton.button ~label: "½ªÎ»" ~packing: box#add ()
-let label = GMisc.label ~text:"¤³¤ì¤Ë¤Ã±Æ¶Ã¤·¤Ê¤¤" ~packing: box#add ()
-
-let _ =
-  window#connect#destroy ~callback:Main.quit;
-  text#misc#realize ();
-  text#insert "¤³¤ó¤Ë¤Ã¤Ã" ~font;
-  let style = button#misc#style#copy in
-  button#misc#set_style style;
-  style#set_font font;
-  style#set_bg [`NORMAL,`NAME "green"; `PRELIGHT,`NAME "red"];
-  button#connect#clicked ~callback:Main.quit
-
-let _ =
-  window#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/pousse.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/pousse.ml
deleted file mode 100644 (file)
index ecf0dff..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-(* $Id$ *)
-
-(* The game logic *)
-
-type color = [`none|`white|`black]
-
-module type BoardSpec = sig
-  type t
-  val size : int
-  val get : t -> x:int -> y:int -> color
-  val set : t -> x:int -> y:int -> color:color -> unit
-end
-
-module Board (Spec : BoardSpec) = struct
-  open Spec
-  let size = size
-
-  let on_board x y =
-    x >= 0 && x < size && y >= 0 && y < size
-
-  let rec string board ~x ~y ~dx ~dy ~color l =
-    let x = x+dx and y = y+dy in
-    if on_board x y then
-      let col = get board ~x ~y in 
-      if col = (color : [`white|`black] :> color) then l else
-      if col = `none then [] else
-      string board ~x ~y ~dx ~dy ~color ((x,y)::l)
-    else []
-
-  let find_swaps board ~x ~y ~color =
-    if get board ~x ~y <> `none then [] else
-    List.fold_left [-1,-1; -1,0; -1,1; 0,-1; 0,1; 1,-1; 1,0; 1,1]
-      ~init:[]
-      ~f:(fun acc (dx,dy) -> string board ~x ~y ~dx ~dy ~color [] @ acc)
-
-  let action board ~x ~y ~color =
-    let swaps = find_swaps board ~x ~y ~color in
-    if swaps = [] then false else begin
-      List.iter ((x,y)::swaps)
-       ~f:(fun (x,y) -> set board ~x ~y ~color:(color :> color));
-      true
-    end
-
-  let check_impossible board ~color =
-    try
-      for x = 0 to size - 1 do for y = 0 to size - 1 do
-       if find_swaps board ~x ~y ~color <> [] then raise Exit
-      done done;
-      true
-    with Exit -> false
-
-  let count_cells board =
-    let w = ref 0 and b = ref 0 in
-    for x = 0 to size - 1 do for y = 0 to size - 1 do
-      match get board ~x ~y with
-       `white -> incr w
-      | `black -> incr b
-      | `none -> ()
-    done done;
-    (!w,!b)
-end
-
-(* GUI *)
-
-open GMain
-
-(* Toplevel window *)
-
-let window = GWindow.window ~title:"pousse" ()
-
-(* Create pixmaps *)
-
-let pixdraw =
-  GDraw.pixmap ~window ~width:40 ~height:40 ~mask:true ()
-let pixdraw1 =
-  GDraw.pixmap ~window ~width:40 ~height:40 ~mask:true ()
-let pixdraw2 =
-  GDraw.pixmap ~window ~width:40 ~height:40 ~mask:true ()
-
-let _ =
-  pixdraw1#set_foreground `BLACK;
-  pixdraw1#arc ~x:3 ~y:3 ~width:34 ~height:34 ~filled:true ();
-  pixdraw2#set_foreground `WHITE;
-  pixdraw2#arc ~x:3 ~y:3 ~width:34 ~height:34 ~filled:true ();
-  pixdraw2#set_foreground `BLACK;
-  pixdraw2#arc ~x:3 ~y:3 ~width:34 ~height:34 ()
-
-(* The cell class: a button with a pixmap on it *)
-
-class cell ?packing ?show () =
-  let button = GButton.button ?packing ?show () in
-object (self)
-  inherit GObj.widget button#as_widget
-  method connect = button#connect
-  val mutable color : color = `none
-  val pm = GMisc.pixmap pixdraw ~packing:button#add ()
-  method color = color
-  method set_color col =
-    if col <> color then begin
-      color <- col;
-      pm#set_pixmap
-       (match col with `none -> pixdraw
-       | `black -> pixdraw1
-       | `white -> pixdraw2)
-    end
-end
-
-module RealBoard = Board (
-  struct
-    type t = cell array array
-    let size = 8
-    let get (board : t) ~x ~y = board.(x).(y)#color
-    let set (board : t) ~x ~y ~color = board.(x).(y)#set_color color
-  end
-)
-
-(* Conducting a game *)
-
-open RealBoard
-
-class game ~(frame : #GContainer.container) ~(label : #GMisc.label)
-    ~(statusbar : #GMisc.statusbar) =
-  let table = GPack.table ~columns:size ~rows:size ~packing:frame#add () in
-object (self)
-  val cells =
-    Array.init size
-      ~f:(fun i -> Array.init size
-         ~f:(fun j -> new cell ~packing:(table#attach ~top:i ~left:j) ()))
-  val label = label
-  val turn = statusbar#new_context ~name:"turn"
-  val messages = statusbar#new_context ~name:"messages"
-  val mutable current_color = `black
-  method board = cells
-  method table = table
-  method player = current_color
-
-  method swap_players () =
-    current_color <-
-      match current_color with
-       `white -> turn#pop (); turn#push "Player is black"; `black
-      | `black -> turn#pop (); turn#push "Player is white"; `white
-
-  method finish () =
-    turn#pop ();
-    let w, b = count_cells cells in
-    turn#push
-      (if w > b then "White wins" else
-       if w < b then "Black wins" else
-       "Game is a draw");
-    ()
-
-  method update_label () =
-    let w, b = count_cells cells in
-    label#set_text (Printf.sprintf "White: %d Black: %d " w b)
-
-  method play x y =
-    if action cells ~x ~y ~color:current_color then begin
-      self#update_label ();
-      self#swap_players ();
-      if check_impossible cells ~color:current_color then begin
-       self#swap_players ();
-       if check_impossible cells ~color:current_color then self#finish ()
-      end
-    end else
-      messages#flash "You cannot play there"
-
-  initializer
-    for i = 0 to size-1 do for j = 0 to size-1 do
-      let cell = cells.(i).(j) in
-      cell#connect#enter ~callback:cell#misc#grab_focus;
-      cell#connect#clicked ~callback:(fun () -> self#play i j)
-    done done;
-    List.iter ~f:(fun (x,y,col) -> cells.(x).(y)#set_color col)
-      [ 3,3,`black; 4,4,`black; 3,4,`white; 4,3,`white ];
-    self#update_label ();
-    turn#push "Player is black";
-    ()
-end
-
-(* Graphical elements *)
-
-let vbox = GPack.vbox ~packing:window#add ()
-let frame = GBin.frame ~shadow_type:`IN ~packing:vbox#add ()
-let hbox = GPack.hbox ~packing:vbox#pack ()
-
-let bar = GMisc.statusbar ~packing:hbox#add ()
-
-let frame2 = GBin.frame ~shadow_type:`IN ~packing:hbox#pack ()
-let label =
-  GMisc.label ~justify:`LEFT ~xpad:5 ~xalign:0.0 ~packing:frame2#add ()
-
-let game = new game ~frame ~label ~statusbar:bar
-
-(* Start *)
-
-let _ =
-  window#connect#destroy ~callback:Main.quit;
-  window#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/progressbar.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/progressbar.ml
deleted file mode 100644 (file)
index b614f08..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-class bar bar = object
-  val bar : #GRange.progress = bar
-  val mutable pstat = true
-  method progress () =
-    let pvalue = bar#percentage in
-    let pvalue =
-      if pvalue > 0.99 || not pstat then (pstat <- true; 0.0)
-      else pvalue +. 0.01
-    in
-    bar#set_percentage pvalue;
-    true
-  method reset () =
-    pstat <- false
-end
-
-let main () =
-
-  let window = GWindow.window ~border_width: 10 () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let table = GPack.table ~rows:3 ~columns:2 ~packing: window#add () in
-  
-  GMisc.label ~text:"Progress Bar Example" ()
-    ~packing:(table#attach ~left:0 ~right:2 ~top:0 ~expand:`X ~shrink:`BOTH);
-  
-  let pbar =
-    GRange.progress_bar ~bar_style:`DISCRETE ~discrete_blocks:20 ()
-      ~packing:(table#attach ~left:0 ~right:2 ~top:1
-                  ~expand:`BOTH ~fill:`X ~shrink:`BOTH) in
-
-  let bar = new bar pbar in
-  let ptimer = Timeout.add ~ms:50 ~callback:bar#progress in
-
-  let button = GButton.button ~label:"Reset" ()
-      ~packing:(table#attach ~left:0 ~top:2
-                  ~expand:`NONE ~fill:`X ~shrink:`BOTH) in
-  button#connect#clicked ~callback:bar#reset;
-
-  let button = GButton.button ~label:"Cancel" ()
-      ~packing:(table#attach ~left:1 ~top:2
-                  ~expand:`NONE ~fill:`X ~shrink:`BOTH) in
-  button#connect#clicked ~callback:Main.quit;
-
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/radiobuttons.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/radiobuttons.ml
deleted file mode 100644 (file)
index 5743ee2..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-
-  let window = GWindow.window ~title: "radio buttons" ~border_width: 0 () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let box1 = GPack.vbox ~packing: window#add () in
-
-  let box2 = GPack.vbox ~spacing:10 ~border_width: 10 ~packing: box1#add () in
-
-  let button1 = GButton.radio_button ~label:"button1" ~packing: box2#add () in
-  button1#connect#clicked ~callback:(fun () -> prerr_endline "button1");
-
-  let button2 = GButton.radio_button ~group:button1#group ~label:"button2"
-      ~active:true ~packing: box2#add () in
-  button2#connect#clicked ~callback:(fun () -> prerr_endline "button2");
-
-  let button3 = GButton.radio_button
-      ~group:button1#group ~label:"button3" ~packing: box2#add () in
-  button3#connect#clicked ~callback:(fun () -> prerr_endline "button3");
-
-  let separator =
-    GMisc.separator `HORIZONTAL ~packing: box1#pack () in
-
-  let box3 = GPack.vbox ~spacing: 10 ~border_width: 10
-      ~packing: box1#pack () in
-
-  let button = GButton.button ~label: "close" ~packing: box3#add () in
-  button#connect#clicked ~callback:Main.quit;
-  button#grab_default ();
-
-  window#show ();
-
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/rpn.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/rpn.ml
deleted file mode 100644 (file)
index e701f18..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-(* $Id$ *)
-
-(* reverse polish calculator *)
-
-open GMain
-
-let wow _ = prerr_endline "Wow!"; ()
-let main () =
-  let stack = Stack.create () in       
-
-  (* toplevel window *)
-  let window =
-    GWindow.window ~border_width: 10 ~title:"Reverse Polish Calculator" () in
-  window#connect#destroy ~callback:Main.quit;
-
-
-  (* vbox *)
-  let vbx = GPack.vbox ~packing:window#add () in
-
-  (* entry *)
-  let entry =
-    GEdit.entry ~text:"0" ~editable:false ~max_length: 20 ~packing: vbx#add () in
-
-  (* BackSpace, Clear, All Clear, Quit *) 
-  let table0 = GPack.table ~rows:1 ~columns:4 ~packing:vbx#add () in
-  let bs_clicked _ = begin
-    let txt = entry#text in
-    let len = String.length txt in 
-    if len <= 1 then
-      entry#set_text "0"
-    else entry#set_text (String.sub txt ~pos:0 ~len:(len-1))
-  end in
-  let c_clicked _ = entry#set_text("0") in
-  let ac_clicked _ = Stack.clear stack; entry#set_text("0") in
-  let labels0 = [("BS", bs_clicked) ; ("C", c_clicked);
-                ("AC", ac_clicked); ("Quit", window#destroy)] in
-  let rec loop0 labels n =
-    match labels 
-    with  [] -> ()
-        | (lbl, cb) :: t  ->
-    let button =
-      GButton.button ~label:lbl
-        ~packing:(table0#attach ~left:n ~top:1 ~expand:`BOTH) () in
-    button#connect#clicked ~callback:cb;
-    loop0 t (n+1) in
-  loop0 labels0 1;
-
-  (* Numerals *)
-  let table1 = GPack.table ~rows:4 ~columns:5 ~packing:vbx#add () in
-  let labels1 = ["7"; "8"; "9"; "4"; "5"; "6"; "1"; "2"; "3"; "0"] in
-  let numClicked n _ =
-     let txt = entry#text in
-     if (txt = "0") then
-       entry#set_text n
-     else begin
-       entry#append_text n
-     end in
-  let rec loop1 labels n =
-    match labels with [] -> ()
-    | lbl :: lbls ->
-        let button = GButton.button ~label:(" "^lbl^" ")
-           ~packing:(table1#attach ~left:(n mod 3) ~top:(n/3) ~expand:`BOTH)
-            () in
-        button#connect#clicked ~callback:(numClicked lbl);
-        loop1 lbls (n+1) in
-  loop1 labels1 0; 
-
-  (* Period *)
-  let periodClicked _ = 
-     let txt = entry#text in
-     if (String.contains txt '.') then begin
-       Printf.printf "\a";
-        flush stdout;
-     end
-     else
-       entry#append_text "." in
-  (GButton.button ~label:" . "
-     ~packing:(table1#attach ~left:1 ~top:3 ~expand:`BOTH) ())
-    #connect#clicked ~callback:periodClicked;
-
-  (* Enter (Push) *)
-  let enterClicked _ =
-     let txt = entry#text in
-     let n = float_of_string txt in begin
-       Stack.push n stack;
-       entry#set_text "0"
-     end in
-  (GButton.button ~label:"Ent"
-     ~packing:(table1#attach ~left:2 ~top:3 ~expand:`BOTH) ())
-    #connect#clicked ~callback:enterClicked;
-
-  (* Operators *)
-  let op2Clicked op _ =
-    let n1 = float_of_string (entry#text) in
-    let n2 = Stack.pop stack in
-    entry#set_text (string_of_float (op n2 n1)) 
-  in
-  let op1Clicked op _ =
-    let n1 = float_of_string (entry#text) in
-    entry#set_text (string_of_float (op n1)) 
-  in
-  let modClicked _ =
-    let n1 = int_of_string (entry#text) in
-    let n2 = truncate (Stack.pop stack) in
-    entry#set_text (string_of_int (n2 mod n1))
-  in
-  let labels2 = [(" / ", op2Clicked (/.)); (" * ", op2Clicked ( *. ));
-                (" - ", op2Clicked (-.)); (" + ", op2Clicked (+.));
-                ("mod", modClicked); (" ^ ", op2Clicked ( ** ));
-                ("+/-", op1Clicked (~-.));
-                 ("1/x", op1Clicked (fun x -> 1.0/.x))] in
-  let rec loop2 labels n =
-    match labels
-    with [] -> ()
-    | (lbl, cb) :: t ->
-       let button = GButton.button ~label:lbl
-            ~packing:(table1#attach ~left:(3 + n/4) ~top: (n mod 4)
-                        ~expand:`BOTH)
-            () in
-       button#connect#clicked ~callback:cb;
-       loop2 t (n+1)
-  in
-  loop2 labels2 0;
-
-  (* show all and enter event loop *)
-  window#show ();
-  Main.main ()
-
-let _ = Printexc.print main()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/scrolledwin.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/scrolledwin.ml
deleted file mode 100644 (file)
index 8f4bee2..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-  let window = GWindow.dialog ~title: "dialog"
-      ~border_width: 10 ~width: 300 ~height: 300 () in
-  window#connect#destroy ~callback:Main.quit;
-
-  let scrolled_window = GBin.scrolled_window
-      ~border_width: 10 ~hpolicy: `AUTOMATIC ~packing: window#vbox#add ()
-  in
-
-  let table = GPack.table ~rows:10 ~columns:10
-      ~row_spacings: 10 ~col_spacings: 10
-      ~packing: scrolled_window#add_with_viewport ()
-  in
-
-  for i = 0 to 9 do
-    for j = 0 to 9 do
-      let label = Printf.sprintf "button (%d,%d)\n" i j in
-      GButton.toggle_button ~label
-        ~packing:(table#attach ~left: i ~top: j ~expand: `BOTH) ()
-    done
-  done;
-
-  let button =
-    GButton.button ~label: "close" ~packing: window#action_area#add () in
-  button#connect#clicked ~callback: Main.quit;
-  button#grab_default ();
-  window#show ();
-  Main.main ()
-
-let _ = main ()
-    
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/socket.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/socket.ml
deleted file mode 100644 (file)
index 687389c..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-  let w = GWindow.window ~title:"Socket example" () in
-  w#connect#destroy ~callback:Main.quit;
-  let vbox = GPack.vbox ~packing:w#add () in
-  let label = GMisc.label ~packing:vbox#pack () in
-  let socket = GBin.socket ~packing:vbox#add ~height:40 () in
-  label#set_text ("XID to plug into this socket: 0x" ^ 
-                  Int32.format "%x" socket#xwindow);
-  w#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/test.xpm b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/test.xpm
deleted file mode 100644 (file)
index 9b0d2ef..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/* XPM */
-static char *openfile[] = {
-/* width height num_colors chars_per_pixel */
-"    20    19       66            2",
-/* colors */
-".. c None",
-".# c #000000",
-".a c #dfdfdf",
-".b c #7f7f7f",
-".c c #006f6f",
-".d c #00efef",
-".e c #009f9f",
-".f c #004040",
-".g c #00bfbf",
-".h c #ff0000",
-".i c #ffffff",
-".j c #7f0000",
-".k c #007070",
-".l c #00ffff",
-".m c #00a0a0",
-".n c #004f4f",
-".o c #00cfcf",
-".p c #8f8f8f",
-".q c #6f6f6f",
-".r c #a0a0a0",
-".s c #7f7f00",
-".t c #007f7f",
-".u c #5f5f5f",
-".v c #707070",
-".w c #00f0f0",
-".x c #009090",
-".y c #ffff00",
-".z c #0000ff",
-".A c #00afaf",
-".B c #00d0d0",
-".C c #00dfdf",
-".D c #005f5f",
-".E c #00b0b0",
-".F c #001010",
-".G c #00c0c0",
-".H c #000f0f",
-".I c #00007f",
-".J c #005050",
-".K c #002f2f",
-".L c #dfcfcf",
-".M c #dfd0d0",
-".N c #006060",
-".O c #00e0e0",
-".P c #00ff00",
-".Q c #002020",
-".R c #dfc0c0",
-".S c #008080",
-".T c #001f1f",
-".U c #003f3f",
-".V c #007f00",
-".W c #00000f",
-".X c #000010",
-".Y c #00001f",
-".Z c #000020",
-".0 c #00002f",
-".1 c #000030",
-".2 c #00003f",
-".3 c #000040",
-".4 c #00004f",
-".5 c #000050",
-".6 c #00005f",
-".7 c #000060",
-".8 c #00006f",
-".9 c #000070",
-"#. c #7f7f80",
-"## c #9f9f9f",
-/* pixels */
-"........................................",
-"........................................",
-"........................................",
-".......................#.#.#............",
-".....................#.......#...#......",
-"...............................#.#......",
-".......#.#.#.................#.#.#......",
-".....#.y.i.y.#.#.#.#.#.#.#..............",
-".....#.i.y.i.y.i.y.i.y.i.#..............",
-".....#.y.i.y.i.y.i.y.i.y.#..............",
-".....#.i.y.i.y.#.#.#.#.#.#.#.#.#.#.#....",
-".....#.y.i.y.#.s.s.s.s.s.s.s.s.s.#......",
-".....#.i.y.#.s.s.s.s.s.s.s.s.s.#........",
-".....#.y.#.s.s.s.s.s.s.s.s.s.#..........",
-".....#.#.s.s.s.s.s.s.s.s.s.#............",
-".....#.#.#.#.#.#.#.#.#.#.#..............",
-"........................................",
-"........................................",
-"........................................"
-};
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/testdnd.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/testdnd.ml
deleted file mode 100644 (file)
index 8c10f7b..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-(* this is a translation in Caml of the gtk+ example testdnd.c  *)
-
-
-open Gaux
-open Gtk
-open GObj
-open GMain
-
-(* GtkThread.start() *)
-
-let drag_icon_xpm = [|
-"36 48 9 1";
-"      c None";
-".     c #020204";
-"+     c #8F8F90";
-"@     c #D3D3D2";
-"#     c #AEAEAC";
-"$     c #ECECEC";
-"%     c #A2A2A4";
-"&     c #FEFEFC";
-"*     c #BEBEBC";
-"               .....................";
-"              ..&&&&&&&&&&&&&&&&&&&.";
-"             ...&&&&&&&&&&&&&&&&&&&.";
-"            ..&.&&&&&&&&&&&&&&&&&&&.";
-"           ..&&.&&&&&&&&&&&&&&&&&&&.";
-"          ..&&&.&&&&&&&&&&&&&&&&&&&.";
-"         ..&&&&.&&&&&&&&&&&&&&&&&&&.";
-"        ..&&&&&.&&&@&&&&&&&&&&&&&&&.";
-"       ..&&&&&&.*$%$+$&&&&&&&&&&&&&.";
-"      ..&&&&&&&.%$%$+&&&&&&&&&&&&&&.";
-"     ..&&&&&&&&.#&#@$&&&&&&&&&&&&&&.";
-"    ..&&&&&&&&&.#$**#$&&&&&&&&&&&&&.";
-"   ..&&&&&&&&&&.&@%&%$&&&&&&&&&&&&&.";
-"  ..&&&&&&&&&&&.&&&&&&&&&&&&&&&&&&&.";
-" ..&&&&&&&&&&&&.&&&&&&&&&&&&&&&&&&&.";
-"................&$@&&&@&&&&&&&&&&&&.";
-".&&&&&&&+&&#@%#+@#@*$%$+$&&&&&&&&&&.";
-".&&&&&&&+&&#@#@&&@*%$%$+&&&&&&&&&&&.";
-".&&&&&&&+&$%&#@&#@@#&#@$&&&&&&&&&&&.";
-".&&&&&&@#@@$&*@&@#@#$**#$&&&&&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&@%&%$&&&&&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.";
-".&&&&&&&&$#@@$&&&&&&&&&&&&&&&&&&&&&.";
-".&&&&&&&&&+&$+&$&@&$@&&$@&&&&&&&&&&.";
-".&&&&&&&&&+&&#@%#+@#@*$%&+$&&&&&&&&.";
-".&&&&&&&&&+&&#@#@&&@*%$%$+&&&&&&&&&.";
-".&&&&&&&&&+&$%&#@&#@@#&#@$&&&&&&&&&.";
-".&&&&&&&&@#@@$&*@&@#@#$#*#$&&&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&&&$%&%$&&&&&&&&.";
-".&&&&&&&&&&$#@@$&&&&&&&&&&&&&&&&&&&.";
-".&&&&&&&&&&&+&$%&$$@&$@&&$@&&&&&&&&.";
-".&&&&&&&&&&&+&&#@%#+@#@*$%$+$&&&&&&.";
-".&&&&&&&&&&&+&&#@#@&&@*#$%$+&&&&&&&.";
-".&&&&&&&&&&&+&$+&*@&#@@#&#@$&&&&&&&.";
-".&&&&&&&&&&$%@@&&*@&@#@#$#*#&&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&$%&%$&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.";
-".&&&&&&&&&&&&&&$#@@$&&&&&&&&&&&&&&&.";
-".&&&&&&&&&&&&&&&+&$%&$$@&$@&&$@&&&&.";
-".&&&&&&&&&&&&&&&+&&#@%#+@#@*$%$+$&&.";
-".&&&&&&&&&&&&&&&+&&#@#@&&@*#$%$+&&&.";
-".&&&&&&&&&&&&&&&+&$+&*@&#@@#&#@$&&&.";
-".&&&&&&&&&&&&&&$%@@&&*@&@#@#$#*#&&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&&&&&$%&%$&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.";
-".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.";
-"...................................." |]
-
-
-
-let trashcan_closed_xpm = [|
-"64 80 17 1";
-"      c None";
-".     c #030304";
-"+     c #5A5A5C";
-"@     c #323231";
-"#     c #888888";
-"$     c #1E1E1F";
-"%     c #767677";
-"&     c #494949";
-"*     c #9E9E9C";
-"=     c #111111";
-"-     c #3C3C3D";
-";     c #6B6B6B";
-">     c #949494";
-",     c #282828";
-"'     c #808080";
-")     c #545454";
-"!     c #AEAEAC";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                       ==......=$$...===                        ";
-"                 ..$------)+++++++++++++@$$...                  ";
-"             ..=@@-------&+++++++++++++++++++-....              ";
-"          =.$$@@@-&&)++++)-,$$$$=@@&+++++++++++++,..$           ";
-"         .$$$$@@&+++++++&$$$@@@@-&,$,-++++++++++;;;&..          ";
-"        $$$$,@--&++++++&$$)++++++++-,$&++++++;%%'%%;;$@         ";
-"       .-@@-@-&++++++++-@++++++++++++,-++++++;''%;;;%*-$        ";
-"       +------++++++++++++++++++++++++++++++;;%%%;;##*!.        ";
-"        =+----+++++++++++++++++++++++;;;;;;;;;;;;%'>>).         ";
-"         .=)&+++++++++++++++++;;;;;;;;;;;;;;%''>>#>#@.          ";
-"          =..=&++++++++++++;;;;;;;;;;;;;%###>>###+%==           ";
-"           .&....=-+++++%;;####''''''''''##'%%%)..#.            ";
-"           .+-++@....=,+%#####'%%%%%%%%%;@$-@-@*++!.            ";
-"           .+-++-+++-&-@$$=$=......$,,,@;&)+!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           =+-++-+++-+++++++++!++++!++++!+++!++!+++=            ";
-"            $.++-+++-+++++++++!++++!++++!+++!++!+.$             ";
-"              =.++++++++++++++!++++!++++!+++!++.=               ";
-"                 $..+++++++++++++++!++++++...$                  ";
-"                      $$=.............=$$                       ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                "  |]
-
-let trashcan_open_xpm = [|
-"64 80 17 1";
-"      c None";
-".     c #030304";
-"+     c #5A5A5C";
-"@     c #323231";
-"#     c #888888";
-"$     c #1E1E1F";
-"%     c #767677";
-"&     c #494949";
-"*     c #9E9E9C";
-"=     c #111111";
-"-     c #3C3C3D";
-";     c #6B6B6B";
-">     c #949494";
-",     c #282828";
-"'     c #808080";
-")     c #545454";
-"!     c #AEAEAC";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                      .=.==.,@                  ";
-"                                   ==.,@-&&&)-=                 ";
-"                                 .$@,&++;;;%>*-                 ";
-"                               $,-+)+++%%;;'#+.                 ";
-"                            =---+++++;%%%;%##@.                 ";
-"                           @)++++++++;%%%%'#%$                  ";
-"                         $&++++++++++;%%;%##@=                  ";
-"                       ,-++++)+++++++;;;'#%)                    ";
-"                      @+++&&--&)++++;;%'#'-.                    ";
-"                    ,&++-@@,,,,-)++;;;'>'+,                     ";
-"                  =-++&@$@&&&&-&+;;;%##%+@                      ";
-"                =,)+)-,@@&+++++;;;;%##%&@                       ";
-"               @--&&,,@&)++++++;;;;'#)@                         ";
-"              ---&)-,@)+++++++;;;%''+,                          ";
-"            $--&)+&$-+++++++;;;%%'';-                           ";
-"           .,-&+++-$&++++++;;;%''%&=                            ";
-"          $,-&)++)-@++++++;;%''%),                              ";
-"         =,@&)++++&&+++++;%'''+$@&++++++                        ";
-"        .$@-++++++++++++;'#';,........=$@&++++                  ";
-"       =$@@&)+++++++++++'##-.................=&++               ";
-"      .$$@-&)+++++++++;%#+$.....................=)+             ";
-"      $$,@-)+++++++++;%;@=........................,+            ";
-"     .$$@@-++++++++)-)@=............................            ";
-"     $,@---)++++&)@===............................,.            ";
-"    $-@---&)))-$$=..............................=)!.            ";
-"     --&-&&,,$=,==...........................=&+++!.            ";
-"      =,=$..=$+)+++++&@$=.............=$@&+++++!++!.            ";
-"           .)-++-+++++++++++++++++++++++++++!++!++!.            ";
-"           .+-++-+++++++++++++++++++++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!+++!!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ";
-"           =+-++-+++-+++++++++!++++!++++!+++!++!+++=            ";
-"            $.++-+++-+++++++++!++++!++++!+++!++!+.$             ";
-"              =.++++++++++++++!++++!++++!+++!++.=               ";
-"                 $..+++++++++++++++!++++++...$                  ";
-"                      $$==...........==$$                       ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                ";
-"                                                                "  |]
-
-let window = GWindow.window ~title:"DnD Test" ()
-let _ = window#misc#realize ()
-
-let drag_icon =
-  GDraw.pixmap_from_xpm_d ~data:drag_icon_xpm ~window ()
-
-let trashcan_open =
-  GDraw.pixmap_from_xpm_d ~data:trashcan_open_xpm ~window ()
-
-let trashcan_closed =
-  GDraw.pixmap_from_xpm_d ~data:trashcan_closed_xpm ~window ()
-
-let targets = [
-  { target = "STRING"; flags = []; info = 0};
-  { target = "text/plain"; flags = []; info = 0};
-  { target = "text/uri-list"; flags = []; info = 2};
-  { target = "application/x-rootwin-drop"; flags = []; info = 1}
-]
-
-class drag_handler = object
-  method private beginning (_ : drag_context) = ()
-  method private data_delete (_ : drag_context) = ()
-  method private data_get (_ : drag_context) (_ : selection_data)
-      ~info:(_ : int) ~time:(_ : int) = ()
-  method private data_received (_ : drag_context) ~x:(_ : int) ~y:(_ : int)
-      (_ : selection_data) ~info:(_ : int) ~time:(_ : int) = ()
-  method private drop (_ : drag_context) ~x:(_ : int) ~y:(_ : int)
-      ~time:(_ : int) = false
-  method private ending (_ : drag_context) = ()
-  method private leave (_ : drag_context) ~time:(_ : int) = ()
-  method private motion (_ : drag_context) ~x:(_ : int) ~y:(_ : int)
-      ~time:(_ : int) = false
-end
-
-
-class target_drag ?packing ?show () =
-  let pixmap = GMisc.pixmap trashcan_closed ?packing ?show () in
-object (self)
-  inherit widget pixmap#as_widget
-  inherit drag_handler
-  val mutable have_drag = false
-
-  method leave _ ~time =
-    print_endline "leave"; flush stdout;
-    have_drag <- false;
-    pixmap#set_pixmap trashcan_closed
-
-  method motion context ~x ~y ~time =
-    if not have_drag then begin
-      have_drag <- true;
-      pixmap#set_pixmap trashcan_open
-    end;
-    let source_typename =
-      try
-       context#source_widget#misc#get_type
-      with Gpointer.Null -> "unknown"
-    in
-    Printf.printf "motion, source %s\n" source_typename; flush stdout;
-    context#status [context#suggested_action] ~time;
-    true
-
-  method drop context ~x ~y ~time =
-    prerr_endline "drop"; flush stdout;
-    have_drag <- false;
-    pixmap#set_pixmap trashcan_closed;
-    match context#targets with
-    | [] -> false
-    | d :: _ -> pixmap#drag#get_data d ~context ~time; true
-
-  method data_received context ~x ~y data ~info ~time =
-    if data#format = 8 then begin
-      Printf.printf "Received \"%s\" in trashcan\n" data#data;
-      flush stdout;
-      context#finish ~success:true ~del:false ~time
-    end
-    else context#finish ~success:false ~del:false ~time
-
-  initializer
-    pixmap#drag#dest_set targets ~actions:[`COPY;`MOVE];
-    pixmap#drag#connect#leave ~callback:self#leave;
-    pixmap#drag#connect#motion ~callback:self#motion;
-    pixmap#drag#connect#drop ~callback:self#drop;
-    pixmap#drag#connect#data_received ~callback:self#data_received;
-    ()
-end
-
-class label_drag ?packing ?show () =
-  let label = GMisc.label ~text:"Drop Here\n" ?packing ?show () in
-object (self)
-  inherit widget label#as_widget
-  inherit drag_handler
-  method data_received context ~x ~y data ~info ~time =
-    if data#format = 8 then  begin
-      Printf.printf "Received \"%s\" in label\n" data#data;
-      flush stdout;
-      context#finish ~success:true ~del:false ~time
-    end
-    else context#finish ~success:false ~del:false ~time
-
-  initializer
-    label#drag#dest_set targets ~actions:[`COPY; `MOVE ];
-    label#drag#connect#data_received ~callback:self#data_received;
-    ()
-end
-
-class source_drag ?packing ?show () =
-  let button = GButton.button ~label:"Drag Here\n" ?packing ?show () in
-object (self)
-  inherit widget button#as_widget
-  inherit drag_handler
-  method data_get _ data ~info ~time =
-    if info = 1 then begin
-      print_endline "I was dropped on the rootwin"; flush stdout
-    end
-    else if info = 2 then
-      data#set ~typ:data#target ~format:8
-       ~data:"file:///home/otaylor/images/weave.png"
-    else
-      data#set ~typ:data#target ~format:8 ~data:"I'm Data!"
-
-  method data_delete _ =
-    print_endline "Delete the data!"; flush stdout
-
-  initializer
-    button#drag#source_set targets
-      ~modi:[`BUTTON1; `BUTTON3 ] ~actions:[`COPY; `MOVE ];
-    button#drag#source_set_icon drag_icon;
-    button#drag#connect#data_get ~callback:self#data_get;
-    button#drag#connect#data_delete ~callback:self#data_delete;
-    ()
-end
-
-class popup () = object (self)
-  inherit drag_handler
-  val mutable popup_window = (None : GWindow.window option)
-  val mutable popped_up = false
-  val mutable in_popup = false
-  val mutable popdown_timer = None
-  val mutable popup_timer = None
-
-  method timer = popup_timer
-  method remove_timer () =
-    may popup_timer
-      ~f:(fun pdt -> Timeout.remove pdt; popup_timer <- None)
-  method add_timer time ~callback =
-    popup_timer <- Some (Timeout.add ~ms:time ~callback)
-
-  method popdown () =
-    popdown_timer <- None;
-    may popup_window ~f:(fun w -> w#misc#hide ());
-    popped_up <- false;
-    false
-
-  method motion (_ : drag_context) ~x ~y ~time =
-    if not in_popup then begin
-      in_popup <- true;
-      may popdown_timer ~f:
-       begin fun pdt ->
-         print_endline "removed popdown"; flush stdout;
-         Timeout.remove pdt;
-         popdown_timer <- None
-       end
-    end;
-    true
-
-  method leave (_ : drag_context) ~time =
-    if in_popup then begin
-      in_popup <- false;
-      if popdown_timer = None then begin
-       print_endline "added popdown"; flush stdout;
-       popdown_timer <- Some (Timeout.add ~ms:500 ~callback:self#popdown)
-      end
-    end
-
-  method popup () =
-    if not popped_up then begin
-      if popup_window = None then begin
-       let w = GWindow.window ~kind:`POPUP ~position:`MOUSE () in
-       popup_window <- Some w;
-       let table = GPack.table ~rows:3 ~columns:3 ~packing:w#add () in
-       for i = 0 to 2 do
-         for j = 0 to 2 do
-           let button =
-             GButton.button ~label:(string_of_int i ^ "," ^ string_of_int j)
-               ~packing:(table#attach ~left:i ~top:j ~expand:`BOTH) ()
-           in
-           button#drag#dest_set targets ~actions:[`COPY; `MOVE ];
-           button#drag#connect#motion ~callback:self#motion;
-           button#drag#connect#leave ~callback:self#leave;
-         done
-       done
-      end;
-      may popup_window ~f:(fun w -> w#show ());
-      popped_up <- true
-    end;
-    popdown_timer <- Some (Timeout.add ~ms:500 ~callback:self#popdown);
-    print_endline "added popdown"; flush stdout;
-    self#remove_timer ();
-    false
-end
-
-class popsite ?packing ?show () =
-  let label = GMisc.label ~text:"Popup\n" ?packing ?show ()
-  and popup = new popup () in
-object (self)
-  inherit widget label#as_widget
-  inherit drag_handler
-  method motion _ ~x ~y ~time =
-    if popup#timer = None then begin
-      print_endline "added popdown"; flush stdout;
-      popup#add_timer 500 ~callback:popup#popup
-    end;
-    true
-
-  method leave _ ~time =
-    popup#remove_timer ()
-
-  initializer
-    label#drag#dest_set targets ~actions:[`COPY; `MOVE ];
-    label#drag#connect#motion ~callback:self#motion;
-    label#drag#connect#leave ~callback:self#leave;
-    ()
-end
-
-let main () =
-  window#connect#destroy ~callback: Main.quit;
-  let table = GPack.table ~rows:2 ~columns:2 ~packing:window#add () in
-  let attach = table#attach ~expand:`BOTH in
-  new label_drag ~packing:(attach ~left:0 ~top:0) ();
-  new target_drag ~packing:(attach ~left:1 ~top:0) ();
-  new source_drag ~packing:(attach ~left:0 ~top:1) ();
-  new popsite ~packing:(attach ~left:1 ~top:1) ();
-
-  window#show ();
-  Main.main ()
-
-let _ =
-  main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/testgtk.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/testgtk.ml
deleted file mode 100644 (file)
index 6c937f5..0000000
+++ /dev/null
@@ -1,1140 +0,0 @@
-(* $Id$ *)
-
-open GdkKeysyms
-open GMain
-open GObj
-
-let create_bbox direction title spacing child_w child_h layout =
-  let frame = GBin.frame ~label: title () in
-  let bbox = GPack.button_box direction ~border_width: 5 ~packing: frame#add 
-      ~layout: layout ~child_height: child_h ~child_width: child_w
-      ~spacing: spacing () in
-  GButton.button ~label: "OK"     ~packing: bbox#add ();
-  GButton.button ~label: "Cancel" ~packing: bbox#add ();
-  GButton.button ~label: "Help"   ~packing: bbox#add ();
-  frame#coerce
-
-let create_button_box =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "Button Boxes" ~border_width: 0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let main_vbox = GPack.vbox ~packing: (window#add) () in
-
-       let frame_horz = GBin.frame ~label: "Horizontal Button Boxes"
-           ~packing:(main_vbox#pack ~expand:true ~fill:true ~padding:10) () in
-       
-       let vbox = GPack.vbox ~border_width: 10 ~packing: frame_horz#add () in
-       
-       vbox#add  (create_bbox `HORIZONTAL "Spread" 40 85 20 `SPREAD);
-       vbox#pack (create_bbox `HORIZONTAL "Edge"   40 85 20 `EDGE) 
-          ~expand: true ~fill: true ~padding: 5;
-       vbox#pack (create_bbox `HORIZONTAL "Start"  40 85 20 `START)
-          ~expand: true ~fill: true ~padding: 5;
-       vbox#pack (create_bbox `HORIZONTAL "End"    40 85 20 `END)
-          ~expand: true ~fill: true ~padding: 5;
-
-       let frame_vert = GBin.frame ~label: "Vertical Button Boxes"
-           ~packing:(main_vbox#pack ~expand:true ~fill:true ~padding:10) () in
-       
-       let hbox = GPack.hbox ~border_width: 10 ~packing: frame_vert#add () in
-       hbox#add  (create_bbox `VERTICAL "Spread" 30 85 20 `SPREAD);
-       hbox#pack (create_bbox `VERTICAL "Edge"   30 85 20 `EDGE)
-          ~expand: true ~fill: true ~padding: 5;
-       hbox#pack (create_bbox `VERTICAL "Start"  30 85 20 `START)
-          ~expand: true ~fill: true ~padding: 5;
-       hbox#pack (create_bbox `VERTICAL "End"    30 85 20 `END)
-          ~expand: true ~fill: true ~padding: 5;
-       window #show () 
-
-    | Some window -> window #destroy ()
-in aux
-
-
-let button_window button _ =
-  if button #misc#visible then
-    button #misc#hide ()
-  else
-    button #misc#show ()
-
-let create_buttons =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "GtkButton" ~border_width: 0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let box1 = GPack.vbox ~packing:window#add () in
-       
-       let table = GPack.table ~rows:3 ~columns:3 ~homogeneous:false 
-           ~row_spacings:3 ~col_spacings:3 ~border_width:10
-           ~packing:box1#add () in
-
-       let button = Array.create 9 (GButton.button ~label:"button1" ()) in
-       for i = 2 to 9 do
-         button.(i-1) <- GButton.button ~label:("button" ^ string_of_int i) ();
-       done;
-
-       let f i l r t b =
-         button.(i) #connect#clicked ~callback:(button_window button.(i+1));
-         table #attach button.(i)#coerce ~left:l ~right:r ~top:t ~bottom:b
-           ~xpadding:0 ~ypadding:0 ~expand:`BOTH
-       in
-       f 0 0 1 0 1;
-       f 1 1 2 1 2;
-       f 2 2 3 2 3;
-       f 3 0 1 2 3;
-       f 4 2 3 0 1;
-       f 5 1 2 2 3;
-       f 6 1 2 0 1;
-       f 7 2 3 1 2;
-       button.(8) #connect#clicked ~callback:(button_window button.(0)); 
-       table #attach button.(8)#coerce ~left:0 ~right:1 ~top:1 ~bottom:2
-         ~xpadding:0 ~ypadding:0 ~expand:`BOTH;
-
-       GMisc.separator `HORIZONTAL ~packing:box1#pack ();
-       
-       let box2 = GPack.vbox ~spacing: 10 ~border_width: 10
-            ~packing: box1#pack () in
-
-       let button = GButton.button ~label: "close" ~packing: box2#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-       window #show ()
-
-    | Some window -> window #destroy ()
-in aux
-
-
-
-let create_check_buttons =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "GtkCheckButton"
-           ~border_width: 0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let box1 = GPack.vbox ~packing:window#add () in
-       let box2 = GPack.vbox ~spacing: 10 ~border_width: 10
-           ~packing: box1#pack () in
-       
-       for i = 1 to 3 do
-         GButton.check_button ~label:("button" ^ (string_of_int i))
-           ~packing: box2#add ();
-       done;
-
-       GMisc.separator `HORIZONTAL ~packing: box1#pack ();
-       
-       let box2 = GPack.vbox ~spacing:10 ~border_width:10
-           ~packing: box1#pack () in
-
-       let button = GButton.button ~label: "close" ~packing:box2#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-       window #show ()
-       
-    | Some window ->  window #destroy ()
-in aux
-
-
-let create_radio_buttons =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "radio buttons"
-           ~border_width: 0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let box1 = GPack.vbox ~packing:window#add () in
-       
-       let box2 = GPack.vbox ~spacing:10 ~border_width:10 
-           ~packing: box1#pack () in
-       
-       let button = GButton.radio_button ~label:"button1"
-           ~packing: box2#add () in
-
-       let button = GButton.radio_button ~label:"button2" ~group:button#group
-           ~packing: box2#add ~active:true () in
-       
-       let button = GButton.radio_button ~label:"button3" ~group:button#group
-           ~packing: box2#add () in
-
-       GMisc.separator `HORIZONTAL ~packing: box1#pack ();
-       
-       let box2 = GPack.vbox ~spacing:10 ~border_width:10
-            ~packing: box1#pack () in
-
-       let button = GButton.button ~label: "close" ~packing: box2#add () in
-       button #connect#clicked ~callback: window #destroy;
-       button #grab_default ();
-       window #show ()
-       
-    | Some window -> window #destroy ()
-in aux
-
-
-let create_toggle_buttons =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "GtkToggleButton"
-           ~border_width: 0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let box1 = GPack.vbox ~packing: window#add () in
-       
-       let box2 = GPack.vbox ~spacing: 10 ~border_width: 10
-           ~packing: box1#pack () in
-       
-       for i = 1 to 3 do
-         GButton.toggle_button ~label:("button" ^ (string_of_int i))
-           ~packing: box2#add ()
-       done;
-
-       GMisc.separator `HORIZONTAL ~packing: box1#pack ();
-       
-       let box2 = GPack.vbox ~spacing: 10 ~border_width: 10
-           ~packing: box1#pack () in
-
-       let button = GButton.button ~label: "close" ~packing:box2#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-       window #show ()
-       
-    | Some window -> window #destroy ()
-in aux
-
-
-(* Menus *)
-
-let create_menu depth tearoff =
-  let rec aux depth tearoff =
-    let menu = GMenu.menu () and group = ref None in
-    if tearoff then ignore (GMenu.tearoff_item ~packing: menu#append ());
-    for i = 0 to 4 do
-      let menuitem = GMenu.radio_menu_item ?group:!group
-         ~label:("item " ^ string_of_int depth ^ " - " ^ string_of_int (i+1))
-         ~packing:menu#append ~show_toggle:(depth mod 2 <> 0)
-         () in
-      group := Some (menuitem #group);
-      if i = 3 then menuitem #misc#set_sensitive false;
-      if depth > 1 then
-       menuitem #set_submenu (aux (depth-1) true)
-    done;
-
-    menu
-  in aux depth tearoff
-
-
-let create_menus =
-  let rw = ref None in
-  fun () ->
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "menus"
-           ~border_width: 0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-       window #event#connect#delete ~callback:(fun _ -> true);
-
-       let accel_group = GtkData.AccelGroup.create () in
-       window #add_accel_group accel_group  ;
-
-       let box1 = GPack.vbox ~packing:window#add () in
-
-       let menubar = GMenu.menu_bar ~packing: box1#pack () in
-
-       let menuitem = GMenu.menu_item ~label:"test\nline2"
-           ~packing: menubar#append () in
-       menuitem #set_submenu (create_menu 2 true);
-
-       let menuitem = GMenu.menu_item ~label:"foo"
-           ~packing: menubar#append () in
-       menuitem #set_submenu (create_menu 3 true);
-       menuitem #right_justify ();
-
-       let box2 = GPack.vbox ~spacing: 10 ~packing: box1#add
-           ~border_width: 10 () in
-
-       let menu = create_menu 1 false in
-       menu #set_accel_group accel_group;
-
-       let menuitem = GMenu.check_menu_item ~label:"Accelerate Me"
-           ~packing:menu#append () in
-       menuitem #add_accelerator ~group:accel_group _M
-         ~flags:[`VISIBLE; `SIGNAL_VISIBLE];
-
-       let menuitem = GMenu.check_menu_item ~label:"Accelerator Locked"
-           ~packing:menu#append () in
-       menuitem #add_accelerator ~group:accel_group _L
-         ~flags:[`VISIBLE; `LOCKED];
-
-       let menuitem = GMenu.check_menu_item ~label:"Accelerators Frozen"
-           ~packing:menu#append () in
-       menuitem #add_accelerator ~group:accel_group _F
-         ~flags:[`VISIBLE];
-       menuitem #misc#lock_accelerators ();
-
-       let optionmenu = GMenu.option_menu ~packing: box2#add () in
-       optionmenu #set_menu menu;
-       optionmenu #set_history 3;
-
-       GMisc.separator `HORIZONTAL ~packing: box1#pack ();
-
-       let box2 = GPack.vbox ~spacing:10 ~border_width:10
-           ~packing: box1#pack () in
-
-       let button = GButton.button ~label: "close" ~packing: box2#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-       window #show ()
-
-    | Some window -> window #destroy ()
-
-
-
-(* Modal windows *)
-
-let cmw_destroy_cb _ =
-  Main.quit ()
-
-let cmw_color parent _ =
-  let csd = GWindow.color_selection_dialog ~modal:true
-      ~title:"This is a modal color selection dialog" () in
-  csd # set_transient_for parent;
-  csd # connect#destroy ~callback:cmw_destroy_cb;
-  csd # ok_button # connect#clicked ~callback:csd#destroy;
-  csd # cancel_button # connect#clicked ~callback:csd#destroy;
-  csd # show ();
-  Main.main ()
-
-let cmw_file parent _ =
-  let fs = GWindow.file_selection ~modal:true
-      ~title:"This is a modal file selection dialog" () in
-  fs # set_transient_for parent;
-  fs # connect#destroy ~callback:cmw_destroy_cb;
-  fs # ok_button # connect#clicked ~callback:fs#destroy;
-  fs # cancel_button # connect#clicked ~callback:fs#destroy;
-  fs # show ();
-  Main.main ()
-
-let create_modal_window () =
-  let window = GWindow.window ~modal:true ~title:"This window is modal" () in
-  let box1 = GPack.vbox ~spacing:5 ~border_width:3 ~packing:window#add () in
-  let frame1 = GBin.frame ~label:"Standard dialogs in modal form"
-      ~packing:(box1#pack ~expand:true ~padding:4) () in
-  let box2 = GPack.vbox ~homogeneous:true ~spacing:5 ~packing:frame1#add () in
-  let btnColor = GButton.button ~label:"Color" 
-      ~packing:(box2#pack ~padding:4) ()
-  and btnFile = GButton.button ~label:"File selection" 
-      ~packing:(box2#pack ~padding:4) ()
-  and btnClose = GButton.button ~label:"Close" 
-      ~packing:(box2#pack ~padding:4) () in
-  GMisc.separator `HORIZONTAL
-    ~packing:(box1#pack ~padding:4) ();
-  
-  btnClose #connect#clicked ~callback:(fun _ -> window #destroy ());
-  window #connect#destroy ~callback:cmw_destroy_cb;
-  btnColor #connect#clicked ~callback: (cmw_color window);
-  btnFile #connect#clicked ~callback: (cmw_file window);
-  window # show ();
-  Main.main ()
-
-
-(* corrected bug in testgtk.c *)
-let scrolled_windows_remove, scrolled_windows_clean =
-  let parent = ref None and float_parent = ref None in
-  let remove (scrollwin : GBin.scrolled_window) () =
-    match !parent with
-    | None ->
-       parent := scrollwin#misc#parent;
-       let f = GWindow.window ~title:"new parent" () in
-       float_parent := Some f#coerce;
-       f #set_default_size ~width:200 ~height:200;
-       scrollwin #misc#reparent f#coerce;
-       f #show ()
-    | Some p ->
-       scrollwin #misc#reparent p;
-       match !float_parent with
-       | None -> ()
-       | Some f ->
-         f #destroy ();
-       float_parent := None;
-       parent := None
-  and clean () =
-    match !float_parent with
-    | None -> ()
-    | Some p -> p #destroy (); parent := None; float_parent := None
-  in remove, clean
-
-
-(* scrolled windows *)
-
-let create_scrolled_windows =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.dialog ~title:"dialog" ~border_width:0 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun  _ -> rw := None);
-       window #connect#destroy ~callback:scrolled_windows_clean;
-
-       let scrolled_window = GBin.scrolled_window ~border_width:10
-           ~hpolicy: `AUTOMATIC ~vpolicy:`AUTOMATIC
-           ~packing: window#vbox#add () in
-
-       let table = GPack.table ~rows:20 ~columns:20 ~row_spacings:10
-           ~col_spacings:10 ~packing:scrolled_window#add_with_viewport () in
-       table #focus#set_hadjustment (Some scrolled_window # hadjustment);
-       table #focus#set_vadjustment (Some scrolled_window # vadjustment);
-
-       for i = 0 to 19 do
-         for j=0 to 19 do
-           GButton.toggle_button
-             ~label:("button ("^ string_of_int i ^","^ string_of_int j ^")\n")
-             ~packing:(table #attach ~left:i ~top:j ~expand:`BOTH) ()
-         done
-       done;
-
-       let button = GButton.button ~label:"close"
-           ~packing:window#action_area#add () in
-       button #connect#clicked ~callback:(window #destroy);
-       button #grab_default ();
-
-       let button = GButton.button ~label:"remove"
-           ~packing:window#action_area#add () in
-       button #connect#clicked
-         ~callback:(scrolled_windows_remove scrolled_window);
-       button #grab_default ();
-       
-       window #set_default_size ~width:300 ~height:300;
-       window #show ()
-
-    | Some window -> window #destroy ()
-  in aux
-
-
-(* Toolbar *)
-
-let make_toolbar (toolbar : GButton.toolbar) window =
-  let icon =
-    let info = GDraw.pixmap_from_xpm ~file:"test.xpm" ~window () in
-    fun () -> (GMisc.pixmap info ())#coerce
-  in
-
-  toolbar #insert_button ~text:"Horizontal"
-    ~tooltip:"Horizontal toolbar layout"
-    ~tooltip_private:"Toolbar/Horizontal"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_orientation `HORIZONTAL) ();
-  
-  toolbar #insert_button ~text:"Vertical"
-    ~tooltip:"Vertical toolbar layout"
-    ~tooltip_private:"Toolbar/Vertical"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_orientation `VERTICAL) ();
-  
-  toolbar #insert_space ();
-  
-  toolbar #insert_button ~text:"Icons"
-    ~tooltip: "Only show toolbar icons"
-    ~tooltip_private:"Toolbar/IconsOnly"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_style `ICONS) ();
-  
-  toolbar #insert_button ~text:"Text"
-    ~tooltip: "Only show toolbar text"
-    ~tooltip_private:"Toolbar/TextOnly"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_style `TEXT) ();
-  
-  toolbar #insert_button ~text:"Both"
-    ~tooltip: "Show toolbar icons and text"
-    ~tooltip_private:"Toolbar/Both"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_style `BOTH) ();
-  
-  toolbar #insert_space ();
-  
-  GEdit.entry ~packing:(toolbar #insert_widget
-                        ~tooltip:"This is an unusable GtkEntry"
-                        ~tooltip_private: "Hey don't click me!!!") ();
-  
-  toolbar #insert_button ~text:"Small"
-    ~tooltip:"Use small spaces"
-    ~tooltip_private:"Toolbar/Small"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_space_size 5) ();
-  
-  toolbar #insert_button ~text:"Big"
-    ~tooltip:"Use big spaces"
-    ~tooltip_private:"Toolbar/Big"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_space_size 10) ();
-  
-  toolbar #insert_space ();
-  
-  toolbar #insert_button ~text:"Enable"
-    ~tooltip:"Enable tooltips"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_tooltips true) ();
-  
-  toolbar #insert_button ~text:"Disable"
-    ~tooltip:"Disable tooltips"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_tooltips false) ();
-  
-  toolbar #insert_space ();
-  
-  toolbar #insert_button ~text:"Borders"
-    ~tooltip:"Show borders"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_button_relief `NORMAL) ();
-  
-  toolbar #insert_button ~text:"Borderless"
-    ~tooltip:"Hide borders"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_button_relief `NONE) ();
-  
-  toolbar #insert_space ();
-  
-  toolbar #insert_button ~text:"Empty"
-    ~tooltip:"Empty spaces"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_space_style `EMPTY) ();
-  
-  toolbar #insert_button ~text:"Lines"
-    ~tooltip:"Lines in spaces"
-    ~icon:(icon ())
-    ~callback:(fun _ -> toolbar #set_space_style `LINE) ();
-  ()
-let create_toolbar =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "Toolbar test"
-           ~border_width: 0 ~allow_shrink: false ~allow_grow: true
-           ~auto_shrink: true () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-       window #misc #realize ();
-       
-       let toolbar = GButton.toolbar ~packing: window#add () in
-       make_toolbar toolbar window;
-       
-       window #show ()
-         
-    | Some window -> window #destroy ()
-  in aux
-
-
-(* Handlebox *)
-
-let handle_box_child_signal action (hb : GBin.handle_box) child =
-  Printf.printf "%s: child <%s> %s\n" hb#misc#get_type child#misc#get_type action
-
-let create_handle_box =
-  let rw = ref None in
-  let aux () =
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title: "Handle box test"
-           ~border_width: 20 ~allow_shrink: false ~allow_grow: true
-           ~auto_shrink: true () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-       window #misc #realize ();
-
-       let vbox = GPack.vbox ~packing:window#add () in
-
-       GMisc.label ~text:"Above" ~packing:vbox#add ();
-       GMisc.separator `HORIZONTAL ~packing:vbox#add ();
-
-       let hbox = GPack.hbox ~spacing:10 ~packing:vbox#add () in
-       GMisc.separator `HORIZONTAL ~packing:vbox#add ();
-
-       GMisc.label ~text:"Below" ~packing:vbox#add ();
-       let handle_box = GBin.handle_box ~packing:hbox#pack () in
-       handle_box #connect#child_attached
-         ~callback:(handle_box_child_signal "attached" handle_box);
-       handle_box #connect#child_detached
-         ~callback:(handle_box_child_signal "detached" handle_box);
-
-       let toolbar = GButton.toolbar ~packing:handle_box#add () in
-       make_toolbar toolbar window;
-       toolbar #set_button_relief `NORMAL;
-
-       let handle_box = GBin.handle_box ~packing:hbox#pack () in
-       handle_box #connect#child_attached
-         ~callback:(handle_box_child_signal "attached" handle_box);
-       handle_box #connect#child_detached
-         ~callback:(handle_box_child_signal "detached" handle_box);
-
-       let handle_box2 = GBin.handle_box ~packing:handle_box#add () in
-       handle_box2 #connect#child_attached
-         ~callback:(handle_box_child_signal "attached" handle_box);
-       handle_box2 #connect#child_detached
-         ~callback:(handle_box_child_signal "detached" handle_box);
-
-       GMisc.label ~text:"Fooo!" ~packing:handle_box2#add ();
-       window #show ()
-         
-    | Some window -> window #destroy ()
-  in aux
-
-
-
-(* Tree *)
-
-class tree_and_buttons () =
-object
-  val tree = GTree.tree ()
-  val add_button = GButton.button ~label: "Add Item" ()
-  val remove_button = GButton.button ~label:"Remove Item(s)" ()
-  val subtree_button = GButton.button ~label:"Remove Subtree" ()
-  val mutable nb_item_add = 0
-
-  method tree = tree
-  method add_button = add_button
-  method remove_button = remove_button
-  method subtree_button = subtree_button
-  method nb_item_add = nb_item_add
-  method incr_nb_item_add = nb_item_add <- nb_item_add + 1
-end
-
-let cb_tree_destroy_event w = ()
-
-let cb_add_new_item (treeb : tree_and_buttons) _ =
-  let subtree =
-    match treeb#tree#selection with
-    | []  -> treeb#tree
-    | selected_item :: _ ->
-       match selected_item#subtree with Some t -> t
-       | None ->
-          let t = GTree.tree () in
-          selected_item#set_subtree t;
-          t
-  in
-  let item_new = GTree.tree_item ~packing:(subtree#insert ~pos:0)
-      ~label:("item add " ^ string_of_int treeb # nb_item_add) () in
-  treeb #incr_nb_item_add
-
-
-let cb_remove_item (treeb : tree_and_buttons) _  = 
-  let tree = treeb#tree in
-  match tree #selection with
-  | [] -> ()
-  |  selected -> tree #remove_items selected
-
-
-let cb_remove_subtree (treeb : tree_and_buttons) _ =
-  match treeb#tree #selection with
-  | [] -> ()
-  | selected_item :: _ ->
-    try selected_item#subtree; selected_item#remove_subtree ()
-    with Not_found -> ()
-
-let cb_tree_changed (treeb : tree_and_buttons) _ =
-  let tree = treeb#tree in
-  let nb_selected = List.length (tree#selection) in
-  if nb_selected = 0 then begin
-    treeb # remove_button #misc#set_sensitive false;
-    treeb # subtree_button #misc#set_sensitive false;
-  end else begin
-    treeb # remove_button #misc#set_sensitive true;
-    treeb # subtree_button #misc#set_sensitive (nb_selected = 1);
-    treeb # add_button #misc#set_sensitive (nb_selected = 1);
-  end
-  
-  
-let rec create_subtree (item : GTree.tree_item) level nb_item_max
-    recursion_level_max =
-  if level = recursion_level_max then ()
-  else begin
-    let item_subtree = GTree.tree () in
-    for nb_item = 1 to nb_item_max do
-      let item_new = GTree.tree_item ~packing:(item_subtree#insert ~pos:0)
-         ~label:("item" ^ string_of_int level ^ "-" ^ string_of_int nb_item) ()
-      in
-      create_subtree item_new (level + 1) nb_item_max recursion_level_max;
-    done;
-    item # set_subtree item_subtree
-  end
-
-
-let create_tree_sample selection_mode draw_line view_line no_root_item
-    nb_item_max recursion_level_max =
-  let window = GWindow.window ~title:"Tree Sample" () in
-  let box1 = GPack.vbox ~packing:window#add () in
-  let box2 = GPack.vbox ~packing:box1#add ~border_width:5 () in
-  let scrolled_win = GBin.scrolled_window ~packing:box2#add
-      ~hpolicy: `AUTOMATIC ~vpolicy:`AUTOMATIC
-      ~width:200 ~height:200 () in
-
-  let root_treeb = new tree_and_buttons () in
-  let root_tree = root_treeb#tree in
-  root_tree #connect#selection_changed ~callback:(cb_tree_changed root_treeb);
-  scrolled_win #add_with_viewport root_tree#coerce;
-  root_tree #set_selection_mode selection_mode;
-  root_tree #set_view_lines draw_line;
-  root_tree #set_view_mode
-    (match view_line with `LINE -> `ITEM | `ITEM -> `LINE);
-
-  if no_root_item then
-    for nb_item = 1 to nb_item_max do
-      let item_new = GTree.tree_item ~label:("item0-" ^ string_of_int nb_item)
-         ~packing:(root_tree#insert ~pos:0) () in
-      create_subtree item_new 1 nb_item_max recursion_level_max;
-    done
-  else begin
-    let root_item = GTree.tree_item ~label:"root item"
-       ~packing:(root_tree #insert ~pos:0) () in
-    create_subtree root_item 0 nb_item_max recursion_level_max
-  end;
-
-  let box2 = GPack.vbox ~border_width:5 ~packing:box1#pack () in
-
-  let button = root_treeb #add_button in
-  button #misc#set_sensitive false;
-  button #connect#clicked ~callback:(cb_add_new_item root_treeb);
-  box2 #add button#coerce;
-
-  let button = root_treeb #remove_button in
-  button #misc#set_sensitive false;
-  button #connect#clicked ~callback:(cb_remove_item root_treeb);
-  box2 #add button#coerce;
-
-  let button = root_treeb #subtree_button in
-  button #misc#set_sensitive false;
-  button #connect#clicked ~callback:(cb_remove_subtree root_treeb);
-  box2 #add button#coerce;
-
-  GMisc.separator `HORIZONTAL ~packing:box1#pack ();
-
-  let button = GButton.button ~label:"Close" ~packing:box2#add () in
-  button #connect#clicked ~callback:window#destroy;
-
-  window #show ()
-
-
-let create_tree_mode_window =
-  let rw = ref None in
-  let aux () =
-    let default_number_of_item = 3.0 in
-    let default_recursion_level = 3.0 in
-    let single_button = GButton.radio_button ~label:"SINGLE" () in
-    let browse_button = GButton.radio_button
-       ~group:single_button#group ~label:"BROWSE" () in
-    let multiple_button = GButton.radio_button
-       ~group:browse_button#group ~label:"MULTIPLE" () in
-    let draw_line_button = GButton.check_button ~label:"Draw line" () in
-    let view_line_button = GButton.check_button ~label:"View line mode" () in
-    let no_root_item_button = GButton.check_button
-       ~label:"Without Root item" () in
-    let nb_item_spinner = GEdit.spin_button
-       ~adjustment:(GData.adjustment ~value:default_number_of_item
-          ~lower:1.0 ~upper:255.0 ~step_incr:1.0 ~page_incr:5.0
-          ~page_size:0.0 ()) ~rate:0. ~digits:0 () in
-    let recursion_spinner = GEdit.spin_button
-       ~adjustment:(GData.adjustment ~value:default_recursion_level
-          ~lower:0.0 ~upper:255.0 ~step_incr:1.0 ~page_incr:5.0
-          ~page_size:0.0 ()) ~rate:0. ~digits:0 () in
-    let cb_create_tree _ =
-      let selection_mode =
-       if single_button #active then `SINGLE
-       else if browse_button #active then `BROWSE
-       else `MULTIPLE in
-      let nb_item = nb_item_spinner#value_as_int  in
-      let recursion_level = recursion_spinner#value_as_int in
-      create_tree_sample selection_mode (draw_line_button #active)
-       (if (view_line_button #active) then `ITEM else `LINE)
-       (no_root_item_button #active)
-       nb_item recursion_level
-    in
-    match !rw with
-    | None ->
-       let window = GWindow.window ~title:"Set Tree Parameters" () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let box1 = GPack.vbox ~packing:window#add () in
-
-       let box2 = GPack.vbox ~spacing:5 ~packing:box1#add
-           ~border_width:5 () in
-
-       let box3 = GPack.hbox ~spacing:5 ~packing:box2#add () in
-
-       let frame = GBin.frame ~label:"Selection Mode" ~packing:box3#add ()
-       in
-       
-       let box4 = GPack.vbox ~packing:frame#add ~border_width:5 () in
-
-       box4 #add single_button#coerce;
-       box4 #add browse_button#coerce;
-       box4 #add multiple_button#coerce;
-
-       let frame = GBin.frame ~label:"Options" ~packing:box3#add () in
-       
-       let box4 = GPack.vbox ~packing:frame#add ~border_width:5 () in
-       box4 #add draw_line_button#coerce;
-       draw_line_button #set_active true;
-       
-       box4 #add view_line_button#coerce;
-       view_line_button #set_active true;
-       
-       box4 #add no_root_item_button#coerce;
-
-       let frame = GBin.frame ~label:"Size Parameters" ~packing:box2#add ()
-       in
-
-       let box4 = GPack.hbox ~spacing:5 ~packing:frame#add ~border_width:5 () in
-
-       let box5 = GPack.hbox ~spacing:5 ~packing:box4#add () in
-       let label = GMisc.label ~text:"Number of items : "
-            ~xalign:0. ~yalign:0.5 ~packing:box5#pack () in
-       box5 #pack nb_item_spinner#coerce;
-       
-       let label = GMisc.label ~text:"Depth : " ~xalign:0. ~yalign:0.5
-           ~packing:box5#pack () in
-       box5 #pack recursion_spinner#coerce;
-       
-       GMisc.separator `HORIZONTAL ~packing:box1#pack ();
-
-       let box2 = GPack.hbox ~homogeneous:true ~spacing:10 ~border_width:5
-           ~packing:box1#pack () in
-
-       let button = GButton.button ~label:"Create Tree"
-            ~packing:box2#add () in
-       button #connect#clicked ~callback:cb_create_tree;
-
-       let button = GButton.button ~label: "close" ~packing:box2#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-       window #show ()
-       
-    | Some window -> window #destroy ()
-  in aux
-
-
-
-(* Tooltips *)
-
-let tips_query_widget_entered (toggle : GButton.toggle_button)
-    (tq : GMisc.tips_query) _ ~text ~privat:_  =
-  if toggle #active then begin
-    tq #set_text
-      (match text with
-      | None -> "There is no tip!" | Some _ -> "There is a tip!");
-    GtkSignal.stop_emit ()
-  end
-
-let tips_query_widget_selected (w : #widget option) ~text ~privat:tp _ =
-  (match w with
-  | None -> ()
-  | Some w -> 
-    Printf.printf "Help \"%s\" requested for <%s>\n"
-       (match tp with None -> "None" | Some t -> t)
-       (w #misc#get_type));
-   true
-
-
-let create_tooltips =
-  let rw = ref None in
-  let aux () =
-     match !rw with
-    | None ->
-
-       let window = GWindow.window ~title:"Tooltips"
-           ~border_width:0 ~allow_shrink:false ~allow_grow:false
-           ~auto_shrink:true () in
-       rw := Some window;
-       let tooltips = GData.tooltips () in
-       window #connect#destroy 
-         ~callback:(fun _ -> tooltips #destroy ();  rw := None);
-
-       let box1 = GPack.vbox ~packing:window#add () in
-
-       let box2 = GPack.vbox ~spacing:10 ~border_width:10
-           ~packing:box1#add () in
-
-       let button = GButton.toggle_button ~label:"button1"
-            ~packing:box2#add ()
-       in
-       tooltips #set_tip button#coerce ~text:"This is button1"
-         ~privat:"ContextHelp/buttons/1";
-       
-       let button = GButton.toggle_button ~label:"button2"
-            ~packing:box2#add ()
-       in
-       tooltips #set_tip button#coerce
-         ~text:"This is button 2. This is also a really long tooltip which probably won't fit on a single line and will therefore need to be wrapped. Hopefully the wrapping will work correctly."
-         ~privat:"ContextHelp/buttons/2_long";
-
-       let toggle = GButton.toggle_button ~label:"Override TipsQuery Label" 
-           ~packing:box2#add () in
-       tooltips #set_tip toggle#coerce ~text:"Toggle TipsQuery view."
-         ~privat:"Hi msw! ;)";
-
-       let box3 = GPack.vbox ~spacing:5 ~border_width:5 () in
-
-       let button = GButton.button ~label:"[?]" 
-           ~packing:box3#pack () in
-
-       let tips_query = GMisc.tips_query ~packing:box3#add () in
-       button #connect#clicked ~callback:(tips_query #start);
-
-       tooltips #set_tip button#coerce ~text:"Start the Tooltips Inspector"
-         ~privat:"ContextHelp/buttons/?";
-
-       tips_query #set_caller button#coerce;
-       tips_query #connect#widget_entered
-         ~callback:(tips_query_widget_entered toggle tips_query);
-       tips_query #connect#widget_selected ~callback:tips_query_widget_selected;
-
-       let frame = GBin.frame ~label:"Tooltips Inspector"
-           ~border_width:0 ~packing:(box2#pack ~expand:true ~padding:10) 
-           ~label_xalign:0.5 ~label_yalign:0.0 () in
-       frame #add box3#coerce;
-
-       GMisc.separator `HORIZONTAL ~packing:box1#pack ();
-
-       let box2 = GPack.vbox ~spacing: 10 ~border_width: 10
-           ~packing: box1#pack () in
-
-       let button = GButton.button ~label: "close" ~packing: box2#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-       tooltips #set_tip button#coerce ~text:"Push this button to close window"
-         ~privat:"ContextHelp/buttons/Close";
-
-       window #show ();
-
-    | Some window -> window #destroy ()
-  in aux
-
-
-(* Labels *)
-let create_labels =
-  let rw = ref None in
-  let aux () =
-     match !rw with
-    | None ->
-
-       let window = GWindow.window ~title:"Labels" ~border_width:5 () in
-       rw := Some window;
-       window #connect#destroy 
-         ~callback:(fun _ -> rw := None);
-
-       let hbox = GPack.hbox ~spacing:5 ~packing:window#add () in
-       let vbox = GPack.vbox ~spacing:5 ~packing:hbox#add () in
-
-       let frame = GBin.frame ~label:"Normal Label"
-           ~packing:vbox#pack () in
-       GMisc.label ~text:"This is a normal label" ~packing:frame#add ();
-
-       let frame = GBin.frame ~label:"Multi_line Label"
-           ~packing:vbox#pack () in
-       GMisc.label ~packing:frame#add
-         ~text:"This is a multi-line label.\nSecond line\nThird line" ();
-
-       let frame = GBin.frame ~label:"Left Justified Label"
-           ~packing:vbox#pack () in
-       GMisc.label ~packing:frame#add ~justify:`LEFT
-         ~text:"This is a left justified\nmulti_line label\nThird line" ();
-
-       let frame = GBin.frame ~label:"Right Justified Label"
-           ~packing:vbox#pack () in
-       GMisc.label ~packing:frame#add ~justify:`RIGHT
-         ~text:"This is a right justified\nmulti_line label\nThird line" ();
-
-       let vbox = GPack.vbox ~spacing:5 ~packing:hbox#add () in
-
-       let frame = GBin.frame ~label:"Line wrapped Label"
-           ~packing:vbox#pack () in
-       GMisc.label ~packing:frame#add ~line_wrap:true
-         ~text:"This is an example of a line-wrapped label.  It should not be taking up the entire             width allocated to it, but automatically wraps the words to fit.  The time has come, for all good men, to come to the aid of their party.  The sixth sheik's six sheep's sick.\n     It supports multiple paragraphs correctly, and  correctly   adds many          extra  spaces. " ();
-
-       let frame = GBin.frame ~label:"Underlined Label"
-           ~packing:vbox#pack () in
-       GMisc.label ~text:"This label is underlined!\nThis one is underlined in a quite a funky fashion" ~packing:frame#add
-         ~justify:`LEFT ~pattern:"_________________________ _ _________ _ _____ _ __ __  ___ ____ _____" ();
-
-       window #show ();
-
-    | Some window -> window #destroy ()
-  in aux
-
-
-(* reparent *)
-
-
-let set_parent child old_parent =
-  let name_opt = function
-    | None -> "(NULL)"
-    | Some w -> w#misc#get_type in
-  Printf.printf
-    "set parent for \"%s\": new parent: \"%s\", old parent: \"%s\"\n" 
-    child#misc#get_type
-    (match child#misc#parent with Some p -> p#misc#get_type | None -> "(NULL)")
-    (name_opt old_parent)
-
-let reparent_label (label : GMisc.label) new_parent _ =
-  label #misc#reparent new_parent
-
-
-
-let create_reparent =
-  let rw = ref None in
-  let aux () =
-     match !rw with
-    | None ->
-
-       let window = GWindow.window ~title:"Reparent" ~border_width:5 () in
-       rw := Some window;
-       window #connect#destroy ~callback:(fun _ -> rw := None);
-
-       let vbox = GPack.vbox ~packing:window#add () in
-       let hbox = GPack.hbox ~spacing:5 ~border_width:10
-            ~packing:vbox#add () in
-
-       let frame = GBin.frame ~label:"Frame1"  ~packing:hbox#add () in
-       let vbox2 = GPack.vbox ~spacing:5 ~border_width:5
-            ~packing:frame#add () in
-       let label = GMisc.label ~text:"Hello world"
-           ~packing:vbox2#pack () in
-       label #misc#connect#parent_set ~callback:(set_parent label);
-       let button = GButton.button ~label:"switch"
-           ~packing:vbox2#pack () in
-       button #connect#clicked ~callback:(reparent_label label vbox2#coerce);
-
-       let frame = GBin.frame ~label:"Frame2"  ~packing:hbox#add () in
-       let vbox2 = GPack.vbox ~spacing:5 ~packing:frame#add ~border_width:5 () in
-       let button = GButton.button ~label:"switch"
-           ~packing:vbox2#pack () in
-       button #connect#clicked ~callback:(reparent_label label vbox2#coerce);
-
-       GMisc.separator `HORIZONTAL ~packing:vbox#pack ();
-
-       let vbox = GPack.vbox ~spacing:10 ~border_width:10
-           ~packing:vbox#pack () in
-
-       let button = GButton.button ~label: "close" ~packing:vbox#add () in
-       button #connect#clicked ~callback: window#destroy;
-       button #grab_default ();
-
-       window #show ();
-
-    | Some window -> window #destroy ()
-  in aux
-
-
-
-
-let create_main_window () =
-  let buttons = [
-    "button box", Some create_button_box;
-    "buttons", Some create_buttons;
-    "check buttons", Some create_check_buttons;
-    "clist", None;
-    "color selection", None;
-    "ctree", None;
-    "cursors", None;
-    "dialog", None;
-    "entry", None;
-    "event watcher", None;
-    "file selection", None;
-    "font selection", None;
-    "gamma curve", None;
-    "handle box", Some create_handle_box;
-    "item factory", None;
-    "labels", Some create_labels;
-    "layout", None;
-    "list", None;
-    "menus", Some create_menus;
-    "modal windows", Some create_modal_window;
-    "notebooks", None;
-    "panes", None;
-    "pixmap", None;
-    "preview color", None;
-    "preview gray", None;
-    "progress bar", None;
-    "radio buttons", Some create_radio_buttons;
-    "range controls", None;
-    "rc file", None;
-    "reparent", Some create_reparent;
-    "rulers", None;
-    "saved position", None;
-    "scrolled windows", Some create_scrolled_windows;
-    "shapes", None;
-    "spinbutton", None;
-    "statusbar", None;
-    "test idle", None;
-    "test mainloop", None;
-    "test scrolling", None;
-    "test selection", None;
-    "test timeout", None;
-    "text", None;
-    "toggle buttons", Some create_toggle_buttons;
-    "toolbar", Some create_toolbar;
-    "tooltips", Some create_tooltips;
-    "tree", Some create_tree_mode_window;
-    "WM hints", None
-  ] in
-
-  let window = GWindow.window ~title:"main window" ~allow_shrink:false
-      ~allow_grow:false ~auto_shrink:false ~width:200 ~height:400 ~x:20 ~y:20 () in
-
-  window #connect#destroy ~callback: Main.quit;
-
-  let box1 = GPack.vbox ~packing: window#add () in
-
-  GMisc.label ~text: "Gtk+ v1.2" ~packing:box1#pack ();
-
-  let scrolled_window = GBin.scrolled_window ~border_width: 10
-      ~hpolicy: `AUTOMATIC ~vpolicy: `AUTOMATIC
-      ~packing:box1#add () in
-
-  let box2 = GPack.vbox ~border_width: 10
-      ~packing:scrolled_window#add_with_viewport () in
-  box2 #focus#set_vadjustment (Some scrolled_window#vadjustment);
-
-  let rec aux = function
-    | [] -> ()
-    | (_,     None) :: tl -> aux tl
-    | (label, Some func) :: tl ->
-       let button = GButton.button ~label: label ~packing: box2#add () in
-       button #connect#clicked ~callback: func;
-       aux tl
-  in aux buttons;
-
-  GMisc.separator `HORIZONTAL ~packing: box1#pack ();
-
-  let box2 = GPack.vbox ~spacing: 10 ~border_width: 10
-      ~packing: box1#pack () in
-
-  let button = GButton.button ~label: "close"  ~packing: box2#add () in
-  button #connect#clicked ~callback: window#destroy;
-  button #grab_default ();
-
-  window #show ();
-
-  Main.main ()
-
-let _ = create_main_window ()
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/testinput.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/testinput.ml
deleted file mode 100644 (file)
index a6aceb8..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-(* $Id$ *)
-
-open GMain
-
-let main () =
-  let window = GWindow.window () in
-  window#misc#set_name "Test input";
-  window#connect#destroy ~callback:Main.quit;
-
-  let vbox = GPack.vbox ~packing:window#add () in
-
-  let drawing_area =
-    GMisc.drawing_area ~width:200 ~height:200 ~packing:vbox#add () in
-
-  drawing_area#event#connect#key_press ~callback:
-    begin fun ev ->
-      let key = GdkEvent.Key.keyval ev in
-      if key >= 32 && key < 256 then
-       Printf.printf "I got a %c\n" (Char.chr key)
-      else
-       print_string "I got another key\n";
-      flush stdout;
-      true
-    end;
-
-  drawing_area#event#add
-    [`EXPOSURE;`LEAVE_NOTIFY;`BUTTON_PRESS;
-     `POINTER_MOTION;`POINTER_MOTION_HINT;`PROXIMITY_OUT];
-  drawing_area#event#set_extensions `ALL;
-  drawing_area#misc#set_can_focus true;
-  drawing_area#misc#grab_focus ();
-
-  GButton.button ~label:"Input Dialog" ~packing:vbox#pack ();
-
-  let button =
-    GButton.button ~label:"Quit" ~packing:vbox#pack () in
-
-  button#connect#clicked ~callback:window#destroy;
-
-  window#show ();
-  Main.main ()
-
-let _ = main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/tictactoe.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/tictactoe.ml
deleted file mode 100644 (file)
index be01e19..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-(* $Id$ *)
-
-open GtkNew
-open GtkBase
-
-(* To create a new widget:
-   create an array sig_array containing the signals defined by
-   the new widget;
-   call:
-      make_new_widget name parent:parent signal_array:sig_array
-   where name is the name of the new widget (a string)
-   parent is the type of the parent: of type Gtk.New.object_type
-   This call returns a triple:
-     (get_type_func, new_func, sig_array_num)
-   where get_type_func is the new widget get_type function,
-   new_func is the function returning a new widget of the new type
-   sig_array_num is an array containing the Gtk id of the signals
-   of the new widget.
-*)
-
-module Tictactoe = struct
-  type t = [`widget|`container|`box|`tictactoe]
-  module Signals = struct
-    open GtkSignal
-    let tictactoe : ([>`tictactoe],_) t =
-      { name = "tictactoe"; marshaller = marshal_unit }
-    let emit_tictactoe = emit_unit ~sgn:tictactoe
-  end
-  let create : unit -> t Gtk.obj =
-    let _,tictactoe_new = make_new_widget
-       ~name:"Tictactoe" ~parent:VBOX ~signals:[Signals.tictactoe]
-    in fun () -> Object.try_cast (tictactoe_new ()) "Tictactoe"
-end
-
-open GMain
-
-class tictactoe_signals obj = object
-  inherit GContainer.container_signals obj
-  method tictactoe =
-    GtkSignal.connect ~sgn:Tictactoe.Signals.tictactoe obj ~after
-end
-
-exception Trouve
-
-class tictactoe ?packing ?show () =
-  let obj : Tictactoe.t Gtk.obj = Tictactoe.create () in
-  let box = new GPack.box_skel obj in
-object (self)
-  inherit GObj.widget obj
-  val mutable buttons = [||]
-  val mutable buttons_handlers = [||]
-  val label = GMisc.label ~text:"Go on!" ~packing:box#add ()
-  method clear () =
-    for i = 0 to 2 do
-      for j = 0 to 2 do
-       let button = buttons.(i).(j)
-       and handler = buttons_handlers.(i).(j) in
-       button#misc#handler_block handler;
-       button#set_active false;
-       button#misc#handler_unblock handler
-      done
-    done
-  method connect = new tictactoe_signals obj
-  method emit_tictactoe () =
-    GtkSignal.emit_unit obj ~sgn:Tictactoe.Signals.tictactoe
-  method toggle () =
-    let rwins = [| [| 0; 0; 0 |]; [| 1; 1; 1 |]; [| 2; 2; 2 |];
-                   [| 0; 1; 2 |]; [| 0; 1; 2 |]; [| 0; 1; 2 |];
-                   [| 0; 1; 2 |]; [| 0; 1; 2 |] |]
-    and cwins = [| [| 0; 1; 2 |]; [| 0; 1; 2 |]; [| 0; 1; 2 |];
-                   [| 0; 0; 0 |]; [| 1; 1; 1 |]; [| 2; 2; 2 |];
-                   [| 0; 1; 2 |]; [| 2; 1; 0 |] |] in
-    label#set_text"Go on!";
-    try
-      for k = 0 to 7 do
-       let rec aux i =
-         (i = 3) ||
-         (buttons.(rwins.(k).(i)).(cwins.(k).(i))#active) && (aux (i+1)) in
-       if aux 0 then raise Trouve
-      done
-    with Trouve -> label#set_text "Win!!"; self#emit_tictactoe ()
-       
-  initializer
-    let table =
-      GPack.table ~rows:3 ~columns:3 ~homogeneous:true ~packing:box#add () in
-    buttons <-
-      Array.init 3 ~f:
-       (fun i -> Array.init 3 ~f:
-           (fun j ->
-             GButton.toggle_button ~width:20 ~height:20
-               ~packing:(table#attach ~left:i ~top:j ~expand:`BOTH) ()));
-    buttons_handlers <-
-      Array.mapi buttons ~f:
-       (fun i -> Array.mapi ~f:
-         (fun j button -> button #connect#toggled ~callback:self#toggle));
-    GObj.pack_return self ~packing ~show;
-    ()
-end
-
-let win (ttt : tictactoe)  _ =
-  Printf.printf "Gagne!!\n" ;
-  ttt #clear ()
-
-let essai () =
-  let window = GWindow.window ~title:"Tictactoe" ~border_width:10 () in
-  window #connect#destroy ~callback:Main.quit;
-  let ttt = new tictactoe ~packing:window#add () in
-  ttt #connect#tictactoe ~callback:(win ttt);
-  window #show ();
-  Main.main ()
-
-let _ = essai ()
-  
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/tron.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/tron.ml
deleted file mode 100644 (file)
index eced44a..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-(* $Id$ *)
-
-(* Tron? Game *)
-open GMain
-
-let m_pi = acos (-1.)
-let clRed   = `NAME "red"  (* `BLACK *)
-let clBlue  = `NAME "blue" (* `WHITE *)
-let clBlack = `BLACK
-
-type point = {mutable x: int; mutable y: int}
-
-let main () =
-(* Game State *)
-  let gameSize = 64 in
-  let gameState =
-    Array.create_matrix ~dimx:(gameSize+2) ~dimy:(gameSize+2) 0 in
-  let gameInit _ = 
-    for i=1 to gameSize do
-      for j=1 to gameSize do
-        gameState.(i).(j) <- 0;
-      done
-    done;
-    for i=0 to gameSize do
-      gameState.(0).(i) <- 3;            (* left wall *)
-      gameState.(i).(gameSize+1) <- 3;   (* floor *) 
-      gameState.(gameSize+1).(i+1) <- 3; (* right wall *)
-      gameState.(i+1).(0) <- 3           (* ceiling *)
-    done in
-  gameInit ();
-  let lpos = {x=4; y=4} in
-  let lspeed = {x=0; y=1} in
-  let rpos = {x=gameSize-3; y=gameSize-3} in
-  let rspeed = {x=0; y= -1} in
-  let keys = "asdfhjkl" in
-  let keyMapL = [|(-1, 0); (0, -1); (0, 1); (1, 0)|] in
-  let keyMapR = [|(-1, 0); (0, 1); (0, -1); (1, 0)|] in
-
-(* User Interface *)
-  let window = GWindow.window ~border_width:10 ~title:"tron(?)" () in
-  window#event#connect#delete
-     ~callback:(fun _ -> prerr_endline "Delete event occured"; false);
-  window#connect#destroy ~callback:Main.quit;
-  let vbx = GPack.vbox ~packing:window#add () in
-  let area = GMisc.drawing_area ~width:((gameSize+2)*4) ~height:((gameSize+2)*4)
-      ~packing:vbx#add () in
-  let drawing = area#misc#realize (); new GDraw.drawable (area#misc#window) in
-  let style = area#misc#style#copy in
-  style#set_bg [`NORMAL,`WHITE];
-  area#misc#set_style style;
-  drawing#set_background `WHITE;
-  let area_expose _ =
-    for i=0 to gameSize+1 do
-      for j=0 to gameSize+1 do
-        if gameState.(i).(j) = 1 then begin
-          drawing#set_foreground clRed;
-          drawing#rectangle ~filled:true ~x:(i*4) ~y:(j*4) ~width:4 ~height:4 ()
-        end
-        else if gameState.(i).(j) = 2 then begin
-          drawing#set_foreground clBlue;
-          drawing#rectangle ~filled:true ~x:(i*4) ~y:(j*4) ~width:4 ~height:4 ()
-        end
-        else if gameState.(i).(j) = 3 then begin
-          drawing#set_foreground clBlack;
-          drawing#rectangle ~filled:true ~x:(i*4) ~y:(j*4) ~width:4 ~height:4 ()
-        end 
-      done
-    done;
-    false
-  in
-  area#event#connect#expose ~callback:area_expose;
-  let control = GPack.table ~rows:3 ~columns:7 ~packing:vbx#pack () in
-
-  let abuttonClicked num (lbl : GMisc.label) _ = begin
-    let dialog =
-      GWindow.window ~kind:`DIALOG ~border_width:10 ~title:"Key remap" () in
-    let dvbx = GPack.box `VERTICAL ~packing:dialog#add () in
-    let entry  = GEdit.entry ~max_length:1 ~packing: dvbx#add () in
-    let txt = String.make 1 keys.[num] in
-    entry#set_text txt;
-    let dquit = GButton.button ~label:"OK" ~packing: dvbx#add () in 
-    dquit#connect#clicked ~callback:
-      begin fun _ ->
-       let chr = entry#text.[0] in
-        let txt2 = String.make 1 chr in
-        lbl#set_text txt2;
-        keys.[num]<-chr; 
-        dialog#destroy ()
-      end;
-    dialog#show ()
-  end in
-  let attach = control#attach ~expand:`BOTH in
-  let new_my_button ~label:label ~left:left ~top:top =
-      let str = String.make 1 keys.[label] in
-      let btn = GButton.button ~packing:(attach ~left:left ~top:top) () in
-      let lbl = GMisc.label ~text:str ~packing:(btn#add) () in
-      btn#connect#clicked ~callback:(abuttonClicked label lbl);
-      btn
-  in
-  new_my_button ~label:0 ~left:1 ~top:2;
-  new_my_button ~label:1 ~left:2 ~top:1;
-  new_my_button ~label:2 ~left:2 ~top:3;
-  new_my_button ~label:3 ~left:3 ~top:2;
-  new_my_button ~label:4 ~left:5 ~top:2;
-  new_my_button ~label:5 ~left:6 ~top:3;
-  new_my_button ~label:6 ~left:6 ~top:1;
-  new_my_button ~label:7 ~left:7 ~top:2;
-  let quit =
-    GButton.button ~label:"Quit" ~packing:(attach ~left:4 ~top:2) () in
-  quit#connect#clicked ~callback:window#destroy;
-  let message = GMisc.label ~text:"tron(?) game" ~packing:vbx#pack () in
-
-  let game_step () =
-        let lx = lpos.x in let ly = lpos.y in
-        gameState.(lx).(ly) <- 1;
-        drawing#set_foreground clRed;
-        drawing#rectangle ~filled:true ~x:(lx*4) ~y:(ly*4) ~width:4 ~height:4 ();
-        let rx = rpos.x in let ry = rpos.y in
-        gameState.(rx).(ry) <- 2;
-        drawing#set_foreground clBlue;
-        drawing#rectangle ~filled:true ~x:(rx*4) ~y:(ry*4) ~width:4 ~height:4 ()
-  in
-  game_step ();
-  let keyDown ev = begin
-    let key = GdkEvent.Key.keyval ev in
-    for i=0 to (Array.length keyMapL)-1 do
-       let (x, y) = keyMapL.(i) in
-       let k = keys.[i] in
-       if key = Char.code k then begin
-         lspeed.x <- x;
-         lspeed.y <- y 
-       end;
-       let (x, y) = keyMapR.(i) in
-       let k = keys.[i+4] in
-       if key = Char.code k then begin
-         rspeed.x <- x;
-         rspeed.y <- y 
-       end
-    done;       
-    false end in
-  window#event#connect#key_press ~callback:keyDown;
-  let safe_check _ = 
-    if lpos.x == rpos.x && lpos.y == rpos.y then
-      3
-    else
-      (* player 1 *)
-      (if gameState.(lpos.x).(lpos.y) != 0  then 2 else 0)
-      +
-      (* player 2 *)
-      (if gameState.(rpos.x).(rpos.y) != 0  then 1 else 0)
-      in
-  let timerID = ref (* dummy *) (Timeout.add ~ms:100 ~callback:(fun _ -> true)) in
-  let timerTimer _ = begin
-     lpos.x <- lpos.x+lspeed.x;
-     lpos.y <- lpos.y+lspeed.y;
-     rpos.x <- rpos.x+rspeed.x;
-     rpos.y <- rpos.y+rspeed.y;
-     let result = safe_check() in
-     if result!=0 then begin
-        Timeout.remove (!timerID);
-        message#set_text ("player "^string_of_int result^" won.")
-     end
-     else begin
-       game_step()
-     end;
-     true
-  end in
-  let count = ref 3 in
-  let timerTimer2 _ = begin
-(*    message#set_label (string_of_int (!count)); *)
-    if (!count==0) then begin
-      Timeout.remove (!timerID);
-      timerID := Timeout.add ~ms:100 ~callback:timerTimer
-    end
-    else begin
-      count := !count-1;
-    end;
-    true
-  end in
-  let restartClicked () =
-    Timeout.remove !timerID;
-    gameInit();
-    lpos.x <- 4; lpos.y <- 4;
-    lspeed.x <- 0; lspeed.y <- 1;
-    rpos.x <- gameSize-3; rpos.y <- gameSize-3;
-    rspeed.x <- 0; rspeed.y <- -1;
-    drawing#set_foreground `WHITE;
-    drawing#rectangle ~filled:true ~x:0 ~y:0
-      ~width:((gameSize+2)*4) ~height:((gameSize+2)*4) ();
-    area_expose();
-    count := 3;
-    timerID := Timeout.add ~ms:300 ~callback:timerTimer2;
-  in
-  let restart =
-    GButton.button ~label: "Restart" ~packing:(attach ~left:4 ~top:3) () in
-  restart#connect#clicked ~callback:restartClicked;
-  restartClicked ();
-
-  window#show ();
-  Main.main ()
-
-let _ = Printexc.print main ()
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/xmhtml/test.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/examples/xmhtml/test.ml
deleted file mode 100644 (file)
index 6c9d371..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-(* $Id$ *)
-
-let test_string2 = String.concat ~sep:"" [
-  "<html>\n";
-  "<head><title>The Gtk/XmHTML test</title></head>\n";
-  "This is the Gtk/XmHTML test program<p>\n";
-  "You can invoke this program with a command line argument, like this:\n";
-  "<hr>";
-  "<tt>./xtest filename.html</tt>";
-  "<hr>";
-  "Click here to load a different <a href=\"nothing\">test message</a>";
-  "</html>";
-]
-
-let read_file file =
-  let ic = open_in file in
-  let b = Buffer.create 16384 and s = String.create 1024 and len = ref 0 in
-  while len := input ic ~buf:s ~pos:0 ~len:1024; !len > 0 do
-    Buffer.add_substring b s ~pos:0 ~len:!len
-  done;
-  Buffer.contents b
-
-open GMain
-
-let _ =
-  let w = GWindow.window ~width:600 ~height:500 () in
-  w#connect#destroy ~callback:Main.quit;
-  let source =
-    if Array.length Sys.argv > 1 then begin
-      Sys.chdir (Filename.dirname Sys.argv.(1));
-      read_file (Filename.basename Sys.argv.(1))
-    end
-    else test_string2 in
-  let html = GHtml.xmhtml ~source ~packing:w#add () in
-  html#set_anchor_buttons false;
-  html#set_anchor_underline [`SINGLE;`DASHED];
-  w#show ();
-  Main.main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.ml
deleted file mode 100644 (file)
index f248ba0..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkBin
-open GObj
-open GContainer
-
-class scrolled_window obj = object
-  inherit container_full (obj : Gtk.scrolled_window obj)
-  method hadjustment =
-    new GData.adjustment (ScrolledWindow.get_hadjustment obj)
-  method vadjustment =
-    new GData.adjustment (ScrolledWindow.get_vadjustment obj)
-  method set_hadjustment adj =
-    ScrolledWindow.set_hadjustment obj (GData.as_adjustment adj)
-  method set_vadjustment adj =
-    ScrolledWindow.set_vadjustment obj (GData.as_adjustment adj)
-  method set_hpolicy hpolicy = ScrolledWindow.set_policy' obj ~hpolicy
-  method set_vpolicy vpolicy = ScrolledWindow.set_policy' obj ~vpolicy
-  method set_placement = ScrolledWindow.set_placement obj
-  method add_with_viewport w =
-    ScrolledWindow.add_with_viewport obj (as_widget w)
-end
-
-let scrolled_window ?hadjustment ?vadjustment ?hpolicy ?vpolicy
-    ?placement ?border_width ?width ?height ?packing ?show () =
-  let w =
-    ScrolledWindow.create ()
-      ?hadjustment:(may_map ~f:GData.as_adjustment hadjustment)
-      ?vadjustment:(may_map ~f:GData.as_adjustment vadjustment) in
-  ScrolledWindow.set w ?hpolicy ?vpolicy ?placement;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new scrolled_window w) ~packing ~show
-
-class event_box obj = object
-  inherit container_full (obj : Gtk.event_box obj)
-  method event = new GObj.event_ops obj
-end
-
-let event_box ?border_width ?width ?height ?packing ?show () =
-  let w = EventBox.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new event_box w) ~packing ~show
-
-class handle_box_signals obj = object
-  inherit container_signals obj
-  method child_attached ~callback =
-    GtkSignal.connect ~sgn:HandleBox.Signals.child_attached obj ~after
-      ~callback:(fun obj -> callback (new widget obj))
-  method child_detached ~callback =
-    GtkSignal.connect ~sgn:HandleBox.Signals.child_detached obj ~after
-      ~callback:(fun obj -> callback (new widget obj))
-end
-
-class handle_box obj = object
-  inherit container (obj : Gtk.handle_box obj)
-  method set_shadow_type     = HandleBox.set_shadow_type     obj
-  method set_handle_position = HandleBox.set_handle_position obj
-  method set_snap_edge       = HandleBox.set_snap_edge       obj
-  method connect = new handle_box_signals obj
-  method event = new GObj.event_ops obj
-end
-
-let handle_box ?border_width ?width ?height ?packing ?show () =
-  let w = HandleBox.create () in
-  let () = Container.set w ?border_width ?width ?height in
-  pack_return (new handle_box w) ~packing ~show
-
-class frame_skel obj = object
-  inherit container obj
-  method set_label = Frame.set_label obj
-  method set_label_align ?x ?y () = Frame.set_label_align' obj ?x ?y
-  method set_shadow_type = Frame.set_shadow_type obj
-end
-
-class frame obj = object
-  inherit frame_skel (Frame.coerce obj)
-  method connect = new container_signals obj
-end
-
-let frame ?(label="") ?label_xalign ?label_yalign ?shadow_type
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Frame.create label in
-  Frame.set w ?label_xalign ?label_yalign ?shadow_type;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new frame w) ~packing ~show
-
-class aspect_frame obj = object
-  inherit frame_skel (obj : Gtk.aspect_frame obj)
-  method connect = new container_signals obj
-  method set_alignment ?x ?y () = AspectFrame.set obj ?xalign:x ?yalign:y
-  method set_ratio ratio = AspectFrame.set obj ~ratio
-  method set_obey_child obey_child = AspectFrame.set obj ~obey_child
-end
-
-let aspect_frame ?label ?xalign ?yalign ?ratio ?obey_child
-    ?label_xalign ?label_yalign ?shadow_type
-    ?border_width ?width ?height ?packing ?show () =
-  let w =
-    AspectFrame.create ?label ?xalign ?yalign ?ratio ?obey_child () in
-  Frame.set w ?label_xalign ?label_yalign ?shadow_type;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new aspect_frame w) ~packing ~show
-
-class viewport obj = object
-  inherit container_full (obj : Gtk.viewport obj)
-  method event = new event_ops obj
-  method set_hadjustment adj =
-    Viewport.set_hadjustment obj (GData.as_adjustment adj)
-  method set_vadjustment adj =
-    Viewport.set_vadjustment obj (GData.as_adjustment adj)
-  method set_shadow_type = Viewport.set_shadow_type obj
-  method hadjustment = new GData.adjustment (Viewport.get_hadjustment obj)
-  method vadjustment = new GData.adjustment (Viewport.get_vadjustment obj)
-end
-
-let viewport ?hadjustment ?vadjustment ?shadow_type
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Viewport.create ()
-      ?hadjustment:(may_map ~f:GData.as_adjustment hadjustment)
-      ?vadjustment:(may_map ~f:GData.as_adjustment vadjustment) in
-  may shadow_type ~f:(Viewport.set_shadow_type w);
-  Container.set w ?border_width ?width ?height;
-  pack_return (new viewport w) ~packing ~show
-
-class alignment obj = object
-  inherit container_full (obj : Gtk.alignment obj)
-  method set_alignment ?x ?y () = Alignment.set ?x ?y obj
-  method set_scale ?x ?y () = Alignment.set ?xscale:x ?yscale:y obj
-end
-
-let alignment ?x ?y ?xscale ?yscale
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Alignment.create ?x ?y ?xscale ?yscale () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new alignment w) ~packing ~show
-  
-let alignment_cast w = new alignment (Alignment.cast w#as_widget)
-
-class socket obj = object (self)
-  inherit container_full (obj : Gtk.socket obj)
-  method steal = Socket.steal obj
-  method xwindow =
-    self#misc#realize ();
-    Gdk.Window.get_xwindow self#misc#window
-end
-
-let socket ?border_width ?width ?height ?packing ?show () =
-  let w = Socket.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new socket w) ?packing ?show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gBin.mli
deleted file mode 100644 (file)
index 9593650..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class scrolled_window : Gtk.scrolled_window obj ->
-  object
-    inherit container_full
-    val obj : Gtk.scrolled_window obj
-    method add_with_viewport : widget -> unit
-    method hadjustment : GData.adjustment
-    method set_hadjustment : GData.adjustment -> unit
-    method set_hpolicy : Tags.policy_type -> unit
-    method set_placement : Tags.corner_type -> unit
-    method set_vadjustment : GData.adjustment -> unit
-    method set_vpolicy : Tags.policy_type -> unit
-    method vadjustment : GData.adjustment
-  end
-val scrolled_window :
-  ?hadjustment:GData.adjustment ->
-  ?vadjustment:GData.adjustment ->
-  ?hpolicy:Tags.policy_type ->
-  ?vpolicy:Tags.policy_type ->
-  ?placement:Tags.corner_type ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> scrolled_window
-
-class event_box : Gtk.event_box obj ->
-  object
-    inherit container_full
-    val obj : Gtk.event_box obj
-    method event : event_ops
-  end
-val event_box :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> event_box
-
-class handle_box_signals : 'a obj ->
-  object
-    inherit container_signals
-    constraint 'a = [>`handlebox|`container|`widget]
-    val obj : 'a obj
-    method child_attached : callback:(widget -> unit) -> GtkSignal.id
-    method child_detached : callback:(widget -> unit) -> GtkSignal.id
-  end
-
-class handle_box : Gtk.handle_box obj ->
-  object
-    inherit container
-    val obj : Gtk.handle_box obj
-    method event : event_ops
-    method connect : handle_box_signals
-    method set_handle_position : Tags.position -> unit
-    method set_shadow_type : Tags.shadow_type -> unit
-    method set_snap_edge : Tags.position -> unit
-  end
-val handle_box :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> handle_box
-
-class frame_skel : 'a obj ->
-  object
-    inherit container
-    constraint 'a = [>`frame|`container|`widget]
-    val obj : 'a obj
-    method set_label : string -> unit
-    method set_label_align : ?x:clampf -> ?y:clampf -> unit -> unit
-    method set_shadow_type : Tags.shadow_type -> unit
-  end
-class frame : [>`frame] obj ->
-  object
-    inherit frame_skel
-    val obj : Gtk.frame obj
-    method connect : GContainer.container_signals
-  end
-val frame :
-  ?label:string ->
-  ?label_xalign:clampf ->
-  ?label_yalign:clampf ->
-  ?shadow_type:Tags.shadow_type ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> frame
-
-class aspect_frame : Gtk.aspect_frame obj ->
-  object
-    inherit frame
-    val obj : Gtk.aspect_frame obj
-    method set_alignment : ?x:clampf -> ?y:clampf -> unit -> unit
-    method set_obey_child : bool -> unit
-    method set_ratio : clampf -> unit
-  end
-val aspect_frame :
-  ?label:string ->
-  ?xalign:clampf ->
-  ?yalign:clampf ->
-  ?ratio:float ->
-  ?obey_child:bool ->
-  ?label_xalign:clampf ->
-  ?label_yalign:clampf ->
-  ?shadow_type:Tags.shadow_type ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> aspect_frame
-
-class viewport : Gtk.viewport obj ->
-  object
-    inherit container_full
-    val obj : Gtk.viewport obj
-    method event : event_ops
-    method hadjustment : GData.adjustment
-    method set_hadjustment : GData.adjustment -> unit
-    method set_shadow_type : Gtk.Tags.shadow_type -> unit
-    method set_vadjustment : GData.adjustment -> unit
-    method vadjustment : GData.adjustment
-  end
-val viewport :
-  ?hadjustment:GData.adjustment ->
-  ?vadjustment:GData.adjustment ->
-  ?shadow_type:Tags.shadow_type ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> viewport
-
-class alignment : Gtk.alignment obj ->
-  object
-    inherit container_full
-    val obj : Gtk.alignment obj
-    method set_alignment : ?x:Gtk.clampf -> ?y:Gtk.clampf -> unit -> unit
-    method set_scale : ?x:Gtk.clampf -> ?y:Gtk.clampf -> unit -> unit
-  end
-val alignment :
-  ?x:Gtk.clampf ->
-  ?y:Gtk.clampf ->
-  ?xscale:Gtk.clampf ->
-  ?yscale:Gtk.clampf ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> alignment
-val alignment_cast : < as_widget : 'a obj; .. > -> alignment
-
-class socket : Gtk.socket obj ->
-  object
-    inherit container_full
-    val obj : Gtk.socket obj
-    method steal : Gdk.xid -> unit
-    method xwindow : Gdk.xid
-  end
-
-val socket :
-  ?border_width:int -> ?width:int -> ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> socket
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.ml
deleted file mode 100644 (file)
index 08ac704..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkButton
-open GObj
-open GContainer
-
-class button_skel obj = object (self)
-  inherit container obj
-  method clicked () = Button.clicked obj
-  method grab_default () =
-    Widget.set_can_default obj true;
-    Widget.grab_default obj
-end
-
-class button_signals obj = object
-  inherit container_signals obj
-  method clicked = GtkSignal.connect ~sgn:Button.Signals.clicked ~after obj
-  method pressed = GtkSignal.connect ~sgn:Button.Signals.pressed ~after obj
-  method released = GtkSignal.connect ~sgn:Button.Signals.released ~after obj
-  method enter = GtkSignal.connect ~sgn:Button.Signals.enter ~after obj
-  method leave = GtkSignal.connect ~sgn:Button.Signals.leave ~after obj
-end
-
-class button obj = object
-  inherit button_skel (Button.coerce obj)
-  method connect = new button_signals obj
-  method event = new GObj.event_ops obj
-end
-
-let button ?label ?border_width ?width ?height ?packing ?show () =
-  let w = Button.create ?label () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new button w) ~packing ~show
-
-class toggle_button_signals obj = object
-  inherit button_signals obj
-  method toggled =
-    GtkSignal.connect ~sgn:ToggleButton.Signals.toggled obj ~after
-end
-
-class toggle_button obj = object
-  inherit button_skel obj
-  method connect = new toggle_button_signals obj
-  method active = ToggleButton.get_active obj
-  method set_active = ToggleButton.set_active obj
-  method set_draw_indicator = ToggleButton.set_mode obj
-end
-
-let toggle_button ?label ?active ?draw_indicator
-    ?border_width ?width ?height ?packing ?show () =
-  let w = ToggleButton.create_toggle ?label () in
-  ToggleButton.set w ?active ?draw_indicator;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new toggle_button w) ~packing ~show
-
-let check_button ?label ?active ?draw_indicator
-    ?border_width ?width ?height ?packing ?show () =
-  let w = ToggleButton.create_check ?label () in
-  ToggleButton.set w ?active ?draw_indicator;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new toggle_button w) ~packing ~show
-
-class radio_button obj = object
-  inherit toggle_button (obj : Gtk.radio_button obj)
-  method set_group = RadioButton.set_group obj
-  method group = Some obj
-end
-
-let radio_button ?group ?label ?active ?draw_indicator
-    ?border_width ?width ?height ?packing ?show () =
-  let w = RadioButton.create ?group ?label () in
-  ToggleButton.set w ?active ?draw_indicator;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new radio_button w) ~packing ~show
-
-class toolbar obj = object
-  inherit container_full (obj : Gtk.toolbar obj)
-  method insert_widget ?tooltip ?tooltip_private ?pos w =
-    Toolbar.insert_widget obj (as_widget w) ?tooltip ?tooltip_private ?pos
-
-  method insert_button ?text ?tooltip ?tooltip_private ?icon
-      ?pos ?callback () =
-    let icon = may_map icon ~f:as_widget in
-    new button
-      (Toolbar.insert_button obj ~kind:`BUTTON ?icon ?text
-        ?tooltip ?tooltip_private ?pos ?callback ())
-
-  method insert_toggle_button ?text ?tooltip ?tooltip_private ?icon
-      ?pos ?callback () =
-    let icon = may_map icon ~f:as_widget in
-    new toggle_button
-      (ToggleButton.cast
-        (Toolbar.insert_button obj ~kind:`TOGGLEBUTTON ?icon ?text
-           ?tooltip ?tooltip_private ?pos ?callback ()))
-
-  method insert_radio_button ?text ?tooltip ?tooltip_private ?icon
-      ?pos ?callback () =
-    let icon = may_map icon ~f:as_widget in
-    new radio_button
-      (RadioButton.cast
-        (Toolbar.insert_button obj ~kind:`RADIOBUTTON ?icon ?text
-           ?tooltip ?tooltip_private ?pos ?callback ()))
-
-  method insert_space = Toolbar.insert_space obj
-
-  method set_orientation = Toolbar.set_orientation obj
-  method set_style = Toolbar.set_style obj
-  method set_space_size = Toolbar.set_space_size obj
-  method set_space_style = Toolbar.set_space_style obj
-  method set_tooltips = Toolbar.set_tooltips obj
-  method set_button_relief = Toolbar.set_button_relief obj
-  method button_relief = Toolbar.get_button_relief obj
-end
-
-let toolbar ?(orientation=`HORIZONTAL) ?style
-    ?space_size ?space_style ?tooltips ?button_relief
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Toolbar.create orientation ?style () in
-  Toolbar.set w ?space_size ?space_style ?tooltips ?button_relief;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new toolbar w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gButton.mli
deleted file mode 100644 (file)
index ee2653d..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class button_skel :
-  'a obj ->
-  object
-    inherit container
-    constraint 'a = [>`widget|`button|`container]
-    val obj : 'a obj
-    method clicked : unit -> unit
-    method grab_default : unit -> unit
-  end
-class button_signals :
-  'b obj ->
-  object ('a)
-    inherit container_signals
-    constraint 'b = [>`button|`container|`widget]
-    val obj : 'b obj
-    method clicked : callback:(unit -> unit) -> GtkSignal.id
-    method enter : callback:(unit -> unit) -> GtkSignal.id
-    method leave : callback:(unit -> unit) -> GtkSignal.id
-    method pressed : callback:(unit -> unit) -> GtkSignal.id
-    method released : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class button :
-  [>`button] obj ->
-  object
-    inherit button_skel
-    val obj : Gtk.button obj
-    method event : event_ops
-    method connect : button_signals
-  end
-val button :
-  ?label:string ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> button
-
-class toggle_button_signals :
-  'b obj ->
-  object ('a)
-    inherit button_signals
-    constraint 'b = [>`toggle|`button|`container|`widget]
-    val obj : 'b obj
-    method toggled : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class toggle_button :
-  'a obj ->
-  object
-    inherit button_skel
-    constraint 'a = [>`toggle|`button|`container|`widget]
-    val obj : 'a obj
-    method active : bool
-    method connect : toggle_button_signals
-    method set_active : bool -> unit
-    method set_draw_indicator : bool -> unit
-  end
-val toggle_button :
-  ?label:string ->
-  ?active:bool ->
-  ?draw_indicator:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> toggle_button
-val check_button :
-  ?label:string ->
-  ?active:bool ->
-  ?draw_indicator:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> toggle_button
-
-class radio_button :
-  Gtk.radio_button obj ->
-  object
-    inherit toggle_button
-    val obj : Gtk.radio_button obj
-    method group : Gtk.radio_button group
-    method set_group : Gtk.radio_button group -> unit
-  end
-val radio_button :
-  ?group:Gtk.radio_button group ->
-  ?label:string ->
-  ?active:bool ->
-  ?draw_indicator:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> radio_button
-
-class toolbar :
-  Gtk.toolbar obj ->
-  object
-    inherit container_full
-    val obj : Gtk.toolbar obj
-    method button_relief : Tags.relief_style
-    method insert_button :
-      ?text:string ->
-      ?tooltip:string ->
-      ?tooltip_private:string ->
-      ?icon:widget ->
-      ?pos:int -> ?callback:(unit -> unit) -> unit -> button
-    method insert_radio_button :
-      ?text:string ->
-      ?tooltip:string ->
-      ?tooltip_private:string ->
-      ?icon:widget ->
-      ?pos:int -> ?callback:(unit -> unit) -> unit -> radio_button
-    method insert_space : ?pos:int -> unit -> unit
-    method insert_toggle_button :
-      ?text:string ->
-      ?tooltip:string ->
-      ?tooltip_private:string ->
-      ?icon:widget ->
-      ?pos:int -> ?callback:(unit -> unit) -> unit -> toggle_button
-    method insert_widget :
-      ?tooltip:string ->
-      ?tooltip_private:string -> ?pos:int -> widget -> unit
-    method set_button_relief : Tags.relief_style -> unit
-    method set_orientation : Tags.orientation -> unit
-    method set_space_size : int -> unit
-    method set_space_style : [`EMPTY|`LINE] -> unit
-    method set_style : Tags.toolbar_style -> unit
-    method set_tooltips : bool -> unit
-  end
-val toolbar :
-  ?orientation:Tags.orientation ->
-  ?style:Tags.toolbar_style ->
-  ?space_size:int ->
-  ?space_style:[`EMPTY|`LINE] ->
-  ?tooltips:bool ->
-  ?button_relief:Tags.relief_style ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> toolbar
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.ml
deleted file mode 100644 (file)
index 2ea765e..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GObj
-open GData
-
-class focus obj = object
-  val obj = obj
-  method circulate = Container.focus obj
-  method set (child : widget option) =
-    let child = may_map child ~f:(fun x -> x#as_widget) in
-    Container.set_focus_child obj (Gpointer.optboxed child)
-  method set_hadjustment adj =
-    Container.set_focus_hadjustment obj
-      (Gpointer.optboxed (may_map adj ~f:as_adjustment))
-  method set_vadjustment adj =
-    Container.set_focus_vadjustment obj
-      (Gpointer.optboxed (may_map adj ~f:as_adjustment))
-end
-
-class container obj = object (self)
-  inherit widget obj
-  method add w =
-    (* Hack to avoid creating a bin class *)
-    if GtkBase.Object.is_a obj "GtkBin" && Container.children obj <> [] then
-      raise (Gtk.Error "GContainer.container#add: already full");
-    Container.add obj (as_widget w)
-  method remove w = Container.remove obj (as_widget w)
-  method children = List.map ~f:(new widget) (Container.children obj)
-  method set_border_width = Container.set_border_width obj
-  method focus = new focus obj
-end
-
-class container_signals obj = object
-  inherit widget_signals obj
-  method add ~callback =
-    GtkSignal.connect ~sgn:Container.Signals.add obj ~after
-      ~callback:(fun w -> callback (new widget w))
-  method remove ~callback =
-    GtkSignal.connect ~sgn:Container.Signals.remove obj ~after
-      ~callback:(fun w -> callback (new widget w))
-end
-
-class container_full obj = object
-  inherit container obj
-  method connect = new container_signals obj
-end
-
-let cast_container (w : widget) =
-  new container_full (GtkBase.Container.cast w#as_widget)
-
-class virtual ['a] item_container obj = object (self)
-  inherit widget obj
-  method add (w : 'a) =
-    Container.add obj w#as_item
-  method remove (w : 'a) =
-    Container.remove obj w#as_item
-  method private virtual wrap : Gtk.widget obj -> 'a
-  method children : 'a list =
-    List.map ~f:self#wrap (Container.children obj)
-  method set_border_width = Container.set_border_width obj
-  method focus = new focus obj
-  method virtual insert : 'a -> pos:int -> unit
-  method append (w : 'a) = self#insert w ~pos:(-1)
-  method prepend (w : 'a) = self#insert w ~pos:0
-end
-
-class item_signals obj = object
-  inherit container_signals obj
-  method select = GtkSignal.connect ~sgn:Item.Signals.select obj ~after
-  method deselect = GtkSignal.connect ~sgn:Item.Signals.deselect obj ~after
-  method toggle = GtkSignal.connect ~sgn:Item.Signals.toggle obj ~after
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gContainer.mli
deleted file mode 100644 (file)
index 2909829..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-
-class focus :
-  'a obj ->
-  object
-    constraint 'a = [>`container]
-    val obj : 'a obj
-    method circulate : Tags.direction_type -> bool
-    method set : widget option -> unit
-    method set_hadjustment : GData.adjustment option -> unit
-    method set_vadjustment : GData.adjustment option -> unit
-  end
-
-class container :
-  'a obj ->
-  object
-    inherit widget
-    constraint 'a = [>`container|`widget]
-    val obj : 'a obj
-    method add : widget -> unit
-    method children : widget list
-    method remove : widget -> unit
-    method focus : focus
-    method set_border_width : int -> unit
-  end
-
-class container_signals :
-  'a obj ->
-  object
-    inherit widget_signals
-    constraint 'a = [>`container|`widget]
-    val obj : 'a obj
-    method add : callback:(widget -> unit) -> GtkSignal.id
-    method remove : callback:(widget -> unit) -> GtkSignal.id
-  end
-
-class container_full :
-  'a obj ->
-  object
-    inherit container
-    constraint 'a = [>`container|`widget]
-    val obj : 'a obj
-    method connect : container_signals
-  end
-
-val cast_container : widget -> container_full
-(* may raise [Gtk.Cannot_cast "GtkContainer"] *)
-
-class virtual ['a] item_container :
-  'c obj ->
-  object
-    constraint 'a = < as_item : [>`widget] obj; .. >
-    constraint 'c = [>`container|`widget]
-    inherit widget
-    val obj : 'c obj
-    method add : 'a -> unit
-    method append : 'a -> unit
-    method children : 'a list
-    method virtual insert : 'a -> pos:int -> unit
-    method prepend : 'a -> unit
-    method remove : 'a -> unit
-    method focus : focus
-    method set_border_width : int -> unit
-    method private virtual wrap : Gtk.widget obj -> 'a
-  end
-
-class item_signals :
-  'a obj ->
-  object
-    inherit container_signals
-    constraint 'a = [>`container|`item|`widget]
-    val obj : 'a obj
-    method deselect : callback:(unit -> unit) -> GtkSignal.id
-    method select : callback:(unit -> unit) -> GtkSignal.id
-    method toggle : callback:(unit -> unit) -> GtkSignal.id
-  end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.ml
deleted file mode 100644 (file)
index 52aa3f1..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkData
-open GObj
-
-class data_signals obj = object
-  inherit gtkobj_signals obj
-  method disconnect_data =
-    GtkSignal.connect ~sgn:Data.Signals.disconnect obj ~after
-end
-
-class adjustment_signals obj = object
-  inherit data_signals obj
-  method changed = GtkSignal.connect ~sgn:Adjustment.Signals.changed obj ~after
-  method value_changed =
-    GtkSignal.connect ~sgn:Adjustment.Signals.value_changed obj ~after
-end
-
-class adjustment obj = object
-  inherit gtkobj obj
-  method as_adjustment : Gtk.adjustment obj = obj
-  method connect = new adjustment_signals obj
-  method set_value = Adjustment.set_value obj
-  method clamp_page = Adjustment.clamp_page obj
-  method lower = Adjustment.get_lower obj
-  method upper = Adjustment.get_upper obj
-  method value = Adjustment.get_value obj
-  method step_increment = Adjustment.get_step_increment obj
-  method page_increment = Adjustment.get_page_increment obj
-  method page_size = Adjustment.get_page_size obj
-end
-
-let adjustment ?(value=0.) ?(lower=0.) ?(upper=100.)
-    ?(step_incr=1.) ?(page_incr=10.) ?(page_size=10.) () =
-  let w =
-    Adjustment.create ~value ~lower ~upper ~step_incr ~page_incr ~page_size in
-  new adjustment w
-
-let as_adjustment (adj : adjustment) = adj#as_adjustment
-
-class tooltips obj = object
-  inherit gtkobj (obj : Gtk.tooltips obj)
-  method as_tooltips = obj
-  method connect = new data_signals obj
-  method enable () = Tooltips.enable obj
-  method disable () = Tooltips.disable obj
-  method set_tip ?text ?privat w =
-    Tooltips.set_tip obj (as_widget w) ?text ?privat
-  method set_delay = Tooltips.set_delay obj
-end
-
-let tooltips ?delay () =
-  let tt = Tooltips.create () in
-  Tooltips.set tt ?delay;
-  new tooltips tt
-
-
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gData.mli
deleted file mode 100644 (file)
index ae7b29e..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-class data_signals :
-  'a obj ->
-  object
-    inherit GObj.gtkobj_signals
-    constraint 'a = [>`data]
-    val obj : 'a obj
-    method disconnect_data : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class adjustment_signals :
-  'a obj ->
-  object
-    inherit data_signals
-    constraint 'a = [>`adjustment|`data]
-    val obj : 'a obj
-    method changed : callback:(unit -> unit) -> GtkSignal.id
-    method value_changed : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class adjustment : Gtk.adjustment obj ->
-  object
-    inherit GObj.gtkobj
-    val obj : Gtk.adjustment obj
-    method as_adjustment : Gtk.adjustment obj
-    method clamp_page : lower:float -> upper:float -> unit
-    method connect : adjustment_signals
-    method set_value : float -> unit
-    method lower : float
-    method upper : float
-    method value : float
-    method step_increment : float
-    method page_increment : float
-    method page_size : float
-  end
-val adjustment :
-  ?value:float ->
-  ?lower:float ->
-  ?upper:float ->
-  ?step_incr:float ->
-  ?page_incr:float -> ?page_size:float -> unit -> adjustment
-
-val as_adjustment : adjustment -> Gtk.adjustment obj
-
-class tooltips :
-  Gtk.tooltips obj ->
-  object
-    inherit GObj.gtkobj
-    val obj : Gtk.tooltips obj
-    method as_tooltips : Gtk.tooltips obj
-    method connect : data_signals
-    method disable : unit -> unit
-    method enable : unit -> unit
-    method set_delay : int -> unit
-    method set_tip : ?text:string -> ?privat:string -> GObj.widget -> unit
-  end
-val tooltips : ?delay:int -> unit -> tooltips
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.ml
deleted file mode 100644 (file)
index 5782079..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gdk
-
-type color = [
-  | `COLOR of Color.t
-  | `WHITE
-  | `BLACK
-  | `NAME of string
-  | `RGB of int * int * int
-]
-
-let default_colormap = GtkBase.Widget.get_default_colormap
-
-let color ?(colormap = default_colormap ()) (c : color) =
-  match c with
-  | `COLOR col -> col
-  | #Gdk.Color.spec as def -> Color.alloc ~colormap def
-
-type optcolor = [
-  | `COLOR of Color.t
-  | `WHITE
-  | `BLACK
-  | `NAME of string
-  | `RGB of int * int * int
-  | `DEFAULT
-]
-
-let optcolor ?colormap (c : optcolor) =
-  match c with
-  | `DEFAULT -> None
-  | #color as c -> Some (color ?colormap c)
-
-class ['a] drawable ?(colormap = default_colormap ()) w =
-object (self)
-  val colormap = colormap
-  val gc = GC.create w
-  val w : 'a Gdk.drawable = w
-  method color = color ~colormap
-  method set_foreground col = GC.set_foreground gc (self#color col)
-  method set_background col = GC.set_background gc (self#color col)
-  method gc_values = GC.get_values gc
-  method set_clip_region region = GC.set_clip_region gc region
-  method set_line_attributes ?width ?style ?cap ?join () =
-    let v = GC.get_values gc in
-    GC.set_line_attributes gc
-      ~width:(default v.GC.line_width ~opt:width)
-      ~style:(default v.GC.line_style ~opt:style)
-      ~cap:(default v.GC.cap_style ~opt:cap)
-      ~join:(default v.GC.join_style ~opt:join)
-  method point = Draw.point w gc
-  method line = Draw.line w gc
-  method rectangle = Draw.rectangle w gc
-  method arc = Draw.arc w gc
-  method polygon ?filled l = Draw.polygon w gc ?filled l
-  method string s = Draw.string w gc ~string:s
-  method image ~width ~height ?(xsrc=0) ?(ysrc=0) ?(xdest=0) ?(ydest=0) image =
-    Draw.image w gc ~image ~width ~height ~xsrc ~ysrc ~xdest ~ydest
-end
-
-class pixmap ?colormap ?mask pm = object
-  inherit [[`pixmap]] drawable ?colormap pm as pixmap
-  val bitmap = may_map mask ~f:
-      begin fun x ->
-        let mask = new drawable x in
-        mask#set_foreground `WHITE;
-        mask
-      end
-  val mask : Gdk.bitmap option = mask
-  method pixmap = w
-  method mask = mask
-  method set_line_attributes ?width ?style ?cap ?join () =
-    pixmap#set_line_attributes ?width ?style ?cap ?join ();
-    may bitmap ~f:(fun m -> m#set_line_attributes ?width ?style ?cap ?join ())
-  method point ~x ~y =
-    pixmap#point ~x ~y;
-    may bitmap ~f:(fun m -> m#point ~x ~y)
-  method line ~x ~y ~x:x' ~y:y' =
-    pixmap#line ~x ~y ~x:x' ~y:y';
-    may bitmap ~f:(fun m -> m#line ~x ~y ~x:x' ~y:y')
-  method rectangle ~x ~y ~width ~height ?filled () =
-    pixmap#rectangle ~x ~y ~width ~height ?filled ();
-    may bitmap ~f:(fun m -> m#rectangle ~x ~y ~width ~height ?filled ())
-  method arc ~x ~y ~width ~height ?filled ?start ?angle () =
-    pixmap#arc ~x ~y ~width ~height ?filled ?start ?angle ();
-    may bitmap
-      ~f:(fun m -> m#arc ~x ~y ~width ~height ?filled ?start ?angle ());
-  method polygon ?filled l =
-    pixmap#polygon ?filled l;
-    may bitmap ~f:(fun m -> m#polygon ?filled l)
-  method string s ~font ~x ~y =
-    pixmap#string s ~font ~x ~y;
-    may bitmap ~f:(fun m -> m#string s ~font ~x ~y)
-end
-
-class type misc_ops = object
-  method allocation : Gtk.rectangle
-  method colormap : colormap
-  method draw : Rectangle.t option -> unit
-  method hide : unit -> unit
-  method hide_all : unit -> unit
-  method intersect : Rectangle.t -> Rectangle.t option
-  method pointer : int * int
-  method realize : unit -> unit
-  method set_app_paintable : bool -> unit
-  method set_geometry :
-    ?x:int -> ?y:int -> ?width:int -> ?height:int -> unit -> unit
-  method show : unit -> unit
-  method unmap : unit -> unit
-  method unparent : unit -> unit
-  method unrealize : unit -> unit
-  method visible : bool
-  method visual : visual
-  method visual_depth : int
-  method window : window
-end
-
-let pixmap ~(window : < misc : #misc_ops; .. >)
-    ~width ~height ?(mask=false) () =
-  window#misc#realize ();
-  let window =
-    try window#misc#window
-    with Gpointer.Null -> failwith "GDraw.pixmap : no window"
-  and depth = window#misc#visual_depth
-  and colormap = window#misc#colormap in
-  let mask =
-    if not mask then None else
-    let bm = Bitmap.create window ~width ~height in
-    let mask = new drawable bm in
-    mask#set_foreground `BLACK;
-    mask#rectangle ~x:0 ~y:0 ~width ~height ~filled:true ();
-    Some bm
-  in
-  new pixmap (Pixmap.create window ~width ~height ~depth) ~colormap ?mask
-
-let pixmap_from_xpm ~window ~file ?colormap ?transparent () =
-  window#misc#realize ();
-  let window =
-    try window#misc#window
-    with Gpointer.Null -> failwith "GDraw.pixmap_from_xpm : no window" in
-  let pm, mask =
-    try Pixmap.create_from_xpm window ~file ?colormap
-       ?transparent:(may_map transparent ~f:(fun c -> color c))
-    with Gpointer.Null -> invalid_arg ("GDraw.pixmap_from_xpm : " ^ file) in
-  new pixmap pm ?colormap ~mask
-
-let pixmap_from_xpm_d ~window ~data ?colormap ?transparent () =
-  window#misc#realize ();
-  let window =
-    try window#misc#window
-    with Gpointer.Null -> failwith "GDraw.pixmap_from_xpm_d : no window" in
-  let pm, mask =
-    Pixmap.create_from_xpm_d window ~data ?colormap
-      ?transparent:(may_map transparent ~f:(fun c -> color c)) in
-  new pixmap pm ?colormap ~mask
-
-class drag_context context = object
-  val context = context
-  method status ?(time=0) act = DnD.drag_status context act ~time
-  method suggested_action = DnD.drag_context_suggested_action context
-  method targets = DnD.drag_context_targets context
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gDraw.mli
deleted file mode 100644 (file)
index 2b5fc86..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-(* $Id$ *)
-
-open Gdk
-
-type color =
-  [ `COLOR of Color.t
-  | `WHITE
-  | `BLACK
-  | `NAME of string
-  | `RGB of int * int * int]
-
-val color : ?colormap:colormap -> color -> Color.t
-
-type optcolor =
-  [ `COLOR of Color.t
-  | `WHITE
-  | `BLACK
-  | `NAME of string
-  | `RGB of int * int * int
-  | `DEFAULT ]
-
-val optcolor : ?colormap:colormap -> optcolor -> Color.t option
-
-class ['a] drawable : ?colormap:colormap -> 'a Gdk.drawable ->
-  object
-    val gc : gc
-    val w : 'a Gdk.drawable
-    method arc :
-      x:int ->
-      y:int ->
-      width:int ->
-      height:int ->
-      ?filled:bool -> ?start:float -> ?angle:float -> unit -> unit
-    method color : color -> Color.t
-    method gc_values : GC.values
-    method image :
-      width:int ->
-      height:int ->
-      ?xsrc:int -> ?ysrc:int -> ?xdest:int -> ?ydest:int -> image -> unit
-    method line : x:int -> y:int -> x:int -> y:int -> unit
-    method point : x:int -> y:int -> unit
-    method polygon : ?filled:bool -> (int * int) list -> unit
-    method rectangle :
-      x:int ->
-      y:int -> width:int -> height:int -> ?filled:bool -> unit -> unit
-    method set_background : color -> unit
-    method set_foreground : color -> unit
-    method set_clip_region : region -> unit
-    method set_line_attributes :
-      ?width:int ->
-      ?style:GC.gdkLineStyle ->
-      ?cap:GC.gdkCapStyle -> ?join:GC.gdkJoinStyle -> unit -> unit
-    method string : string -> font:font -> x:int -> y:int -> unit
-  end
-
-class pixmap :
-  ?colormap:colormap -> ?mask:bitmap -> [ `pixmap] Gdk.drawable ->
-  object
-    inherit [[`pixmap]] drawable
-    val bitmap : [ `bitmap] drawable option
-    val mask : bitmap option
-    method mask : bitmap option
-    method pixmap : Gdk.pixmap
-  end
-
-class type misc_ops =
-  object
-    method allocation : Gtk.rectangle
-    method colormap : colormap
-    method draw : Rectangle.t option -> unit
-    method hide : unit -> unit
-    method hide_all : unit -> unit
-    method intersect : Rectangle.t -> Rectangle.t option
-    method pointer : int * int
-    method realize : unit -> unit
-    method set_app_paintable : bool -> unit
-    method set_geometry :
-      ?x:int -> ?y:int -> ?width:int -> ?height:int -> unit -> unit
-    method show : unit -> unit
-    method unmap : unit -> unit
-    method unparent : unit -> unit
-    method unrealize : unit -> unit
-    method visible : bool
-    method visual : visual
-    method visual_depth : int
-    method window : window
-  end
-
-val pixmap :
-  window:< misc : #misc_ops; .. > ->
-  width:int -> height:int -> ?mask:bool -> unit -> pixmap
-val pixmap_from_xpm :
-  window:< misc : #misc_ops; .. > ->
-  file:string ->
-  ?colormap:colormap -> ?transparent:color -> unit -> pixmap
-val pixmap_from_xpm_d :
-  window:< misc : #misc_ops; .. > ->
-  data:string array ->
-  ?colormap:colormap -> ?transparent:color -> unit -> pixmap
-
-class drag_context : Gdk.drag_context ->
-  object
-    val context : Gdk.drag_context
-    method status : ?time:int -> Tags.drag_action list -> unit
-    method suggested_action : Tags.drag_action
-    method targets : atom list
-  end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.ml
deleted file mode 100644 (file)
index 467ee45..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkEdit
-open GObj
-
-class editable_signals obj = object
-  inherit widget_signals obj
-  method activate = GtkSignal.connect ~sgn:Editable.Signals.activate obj ~after
-  method changed = GtkSignal.connect ~sgn:Editable.Signals.changed obj ~after
-  method insert_text =
-    GtkSignal.connect ~sgn:Editable.Signals.insert_text obj ~after
-  method delete_text =
-    GtkSignal.connect ~sgn:Editable.Signals.delete_text obj ~after
-end
-
-class editable obj = object
-  inherit widget obj
-  method connect = new editable_signals obj
-  method select_region = Editable.select_region obj
-  method insert_text = Editable.insert_text obj
-  method delete_text = Editable.delete_text obj
-  method get_chars = Editable.get_chars obj
-  method cut_clipboard () = Editable.cut_clipboard obj
-  method copy_clipboard () = Editable.copy_clipboard obj
-  method paste_clipboard () = Editable.paste_clipboard obj
-  method delete_selection () = Editable.delete_selection obj
-  method set_position = Editable.set_position obj
-  method position = Editable.get_position obj
-  method set_editable = Editable.set_editable obj
-  method selection =
-    if Editable.has_selection obj then
-      Some (Editable.selection_start_pos obj, Editable.selection_end_pos obj)
-    else None
-end
-
-class entry obj = object
-  inherit editable obj
-  method event = new GObj.event_ops obj
-  method set_text = Entry.set_text obj
-  method append_text = Entry.append_text obj
-  method prepend_text = Entry.prepend_text obj
-  method set_visibility = Entry.set_visibility obj
-  method set_max_length = Entry.set_max_length obj
-  method text = Entry.get_text obj
-  method text_length = Entry.text_length obj
-end
-
-let set_editable ?editable ?(width = -2) ?(height = -2) w =
-  may editable ~f:(Editable.set_editable w);
-  if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height
-
-let entry ?max_length ?text ?visibility ?editable
-    ?width ?height ?packing ?show () =
-  let w = Entry.create ?max_length () in
-  Entry.set w ?text ?visibility;
-  set_editable w ?editable ?width ?height;
-  pack_return (new entry w) ~packing ~show
-
-class spin_button obj = object
-  inherit entry (obj : Gtk.spin_button obj)
-  method adjustment =  new GData.adjustment (SpinButton.get_adjustment obj)
-  method value = SpinButton.get_value obj
-  method value_as_int = SpinButton.get_value_as_int obj
-  method spin = SpinButton.spin obj
-  method update = SpinButton.update obj
-  method set_adjustment adj =
-    SpinButton.set_adjustment obj (GData.as_adjustment adj)
-  method set_digits = SpinButton.set_digits obj
-  method set_value = SpinButton.set_value obj
-  method set_update_policy = SpinButton.set_update_policy obj
-  method set_numeric = SpinButton.set_numeric obj
-  method set_wrap = SpinButton.set_wrap obj
-  method set_shadow_type = SpinButton.set_shadow_type obj
-  method set_snap_to_ticks = SpinButton.set_snap_to_ticks obj
-end
-
-let spin_button ?adjustment ?rate ?digits ?value ?update_policy
-    ?numeric ?wrap ?shadow_type ?snap_to_ticks
-    ?width ?height ?packing ?show () =
-  let w = SpinButton.create ?rate ?digits
-      ?adjustment:(may_map ~f:GData.as_adjustment adjustment) () in
-  SpinButton.set w ?value ?update_policy
-    ?numeric ?wrap ?shadow_type ?snap_to_ticks;
-  set_editable w ?width ?height;
-  pack_return (new spin_button w) ~packing ~show
-
-class combo obj = object
-  inherit GObj.widget (obj : Gtk.combo obj)
-  method entry = new entry (Combo.entry obj)
-  method list = new GList.liste (Combo.list obj)
-  method set_popdown_strings = Combo.set_popdown_strings obj
-  method set_use_arrows = Combo.set_use_arrows' obj
-  method set_case_sensitive = Combo.set_case_sensitive obj
-  method set_value_in_list = Combo.set_value_in_list obj
-  method disable_activate () = Combo.disable_activate obj
-  method set_item_string (item : GList.list_item) =
-    Combo.set_item_string obj item#as_item
-end
-
-let combo ?popdown_strings ?use_arrows
-    ?case_sensitive ?value_in_list ?ok_if_empty
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Combo.create () in
-  Combo.set w ?popdown_strings ?use_arrows
-    ?case_sensitive ?value_in_list ?ok_if_empty;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new combo w) ~packing ~show
-
-class text obj = object (self)
-  inherit editable (obj : Gtk.text obj) as super
-  method get_chars ~start ~stop:e =
-    if start < 0 || e > Text.get_length obj || e < start then
-      invalid_arg "GEdit.text#get_chars";
-    super#get_chars ~start ~stop:e
-  method event = new GObj.event_ops obj
-  method set_point = Text.set_point obj
-  method set_hadjustment adj =
-    Text.set_adjustment obj ~horizontal:(GData.as_adjustment adj) ()
-  method set_vadjustment adj =
-    Text.set_adjustment obj ~vertical:(GData.as_adjustment adj) ()
-  method set_word_wrap = Text.set_word_wrap obj
-  method set_line_wrap = Text.set_line_wrap obj
-  method hadjustment = new GData.adjustment (Text.get_hadjustment obj)
-  method vadjustment = new GData.adjustment (Text.get_vadjustment obj)
-  method point = Text.get_point obj
-  method length = Text.get_length obj
-  method freeze () = Text.freeze obj
-  method thaw () = Text.thaw obj
-  method insert ?font ?foreground ?background text =
-    let colormap = try Some self#misc#colormap with _ -> None in
-    Text.insert obj text ?font
-      ?foreground:(may_map foreground ~f:(GDraw.color ?colormap))
-      ?background:(may_map background ~f:(GDraw.color ?colormap))
-end
-
-let text ?hadjustment ?vadjustment ?editable
-    ?word_wrap ?line_wrap ?width ?height ?packing ?show () =
-  let w = Text.create ()
-      ?hadjustment:(may_map ~f:GData.as_adjustment hadjustment)
-      ?vadjustment:(may_map ~f:GData.as_adjustment vadjustment) in
-  may word_wrap ~f:(Text.set_word_wrap w);
-  may line_wrap ~f:(Text.set_line_wrap w);
-  set_editable w ?editable ?width ?height;
-  pack_return (new text w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gEdit.mli
deleted file mode 100644 (file)
index 3b2c286..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-
-class editable_signals : 'a obj ->
-  object
-    inherit widget_signals
-    constraint 'a = [>`editable|`widget]
-    val obj : 'a obj
-    method activate : callback:(unit -> unit) -> GtkSignal.id
-    method changed : callback:(unit -> unit) -> GtkSignal.id
-    method delete_text :
-      callback:(start:int -> stop:int -> unit) -> GtkSignal.id
-    method insert_text :
-      callback:(string -> pos:int -> unit) -> GtkSignal.id
-  end
-
-class editable : 'a obj ->
-  object
-    inherit widget
-    constraint 'a = [>`editable|`widget]
-    val obj : 'a obj
-    method connect : editable_signals
-    method copy_clipboard : unit -> unit
-    method cut_clipboard : unit -> unit
-    method delete_selection : unit -> unit
-    method delete_text : start:int -> stop:int -> unit
-    method get_chars : start:int -> stop:int -> string
-    method insert_text : string -> pos:int -> int
-    method paste_clipboard : unit -> unit
-    method position : int
-    method select_region : start:int -> stop:int -> unit
-    method selection : (int * int) option
-    method set_editable : bool -> unit
-    method set_position : int -> unit
-  end
-
-class entry : 'a obj ->
-  object
-    inherit editable
-    constraint 'a = [>`entry|`editable|`widget]
-    val obj : 'a obj
-    method event : event_ops
-    method append_text : string -> unit
-    method prepend_text : string -> unit
-    method set_max_length : int -> unit
-    method set_text : string -> unit
-    method set_visibility : bool -> unit
-    method text : string
-    method text_length : int
-  end
-val entry :
-  ?max_length:int ->
-  ?text:string ->
-  ?visibility:bool ->
-  ?editable:bool ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> entry
-
-class spin_button : Gtk.spin_button obj ->
-  object
-    inherit entry
-    val obj : Gtk.spin_button obj
-    method adjustment : GData.adjustment
-    method set_adjustment : GData.adjustment -> unit
-    method set_digits : int -> unit
-    method set_numeric : bool -> unit
-    method set_shadow_type : Tags.shadow_type -> unit
-    method set_snap_to_ticks : bool -> unit
-    method set_update_policy : [`ALWAYS|`IF_VALID] -> unit
-    method set_value : float -> unit
-    method set_wrap : bool -> unit
-    method spin : Tags.spin_type -> unit
-    method update : unit
-    method value : float
-    method value_as_int : int
-  end
-val spin_button :
-  ?adjustment:GData.adjustment ->
-  ?rate:float ->
-  ?digits:int ->
-  ?value:float ->
-  ?update_policy:[`ALWAYS|`IF_VALID] ->
-  ?numeric:bool ->
-  ?wrap:bool ->
-  ?shadow_type:Tags.shadow_type ->
-  ?snap_to_ticks:bool ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> spin_button
-
-class combo : Gtk.combo obj ->
-  object
-    inherit widget
-    val obj : Gtk.combo obj
-    method disable_activate : unit -> unit
-    method entry : entry
-    method list : GList.liste
-    method set_case_sensitive : bool -> unit
-    method set_item_string : GList.list_item -> string -> unit
-    method set_popdown_strings : string list -> unit
-    method set_use_arrows : [`NEVER|`DEFAULT|`ALWAYS] -> unit
-    method set_value_in_list :
-      ?required:bool -> ?ok_if_empty:bool -> unit -> unit
-  end
-val combo :
-  ?popdown_strings:string list ->
-  ?use_arrows:[`NEVER|`DEFAULT|`ALWAYS] ->
-  ?case_sensitive:bool ->
-  ?value_in_list:bool ->
-  ?ok_if_empty:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> combo
-
-class text : Gtk.text obj ->
-  object
-    inherit editable
-    val obj : Gtk.text obj
-    method event : event_ops
-    method freeze : unit -> unit
-    method hadjustment : GData.adjustment
-    method insert :
-      ?font:Gdk.font ->
-      ?foreground:GDraw.color -> ?background:GDraw.color -> string -> unit
-    method length : int
-    method point : int
-    method set_hadjustment : GData.adjustment -> unit
-    method set_point : int -> unit
-    method set_vadjustment : GData.adjustment -> unit
-    method set_word_wrap : bool -> unit
-    method set_line_wrap : bool -> unit
-    method thaw : unit -> unit
-    method vadjustment : GData.adjustment
-  end
-val text :
-  ?hadjustment:GData.adjustment ->
-  ?vadjustment:GData.adjustment ->
-  ?editable:bool ->
-  ?word_wrap:bool ->
-  ?line_wrap:bool ->
-  ?width:int ->
-  ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> text
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gHtml.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gHtml.ml
deleted file mode 100644 (file)
index 1150790..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GObj
-open GtkXmHTML
-
-class xmhtml obj = object (self)
-  inherit widget_full (obj : GtkXmHTML.xmhtml obj)
-  method event = new GObj.event_ops obj
-  method freeze = freeze obj
-  method thaw = thaw obj
-  method source = source obj
-  method set_fonts = set_font_familty obj
-  method set_fonts_fixed = set_font_familty_fixed obj
-  method set_anchor_buttons = set_anchor_buttons obj
-  method set_anchor_cursor = set_anchor_cursor obj
-  method set_anchor_underline = set_anchor_underline_type obj
-  method set_anchor_visited_underline = set_anchor_visited_underline_type obj
-  method set_anchor_target_underline = set_anchor_target_underline_type obj
-  method set_topline = set_topline obj
-  method topline = get_topline obj
-  method set_strict_checking = set_strict_checking obj
-  method set_bad_html_warnings = set_bad_html_warnings obj
-  method set_imagemap_draw = set_imagemap_draw obj
-end
-
-let xmhtml ?source ?border_width ?width ?height ?packing ?show () =
-  let w = create () in
-  Container.set w ?border_width ?width ?height;
-  may source ~f:(GtkXmHTML.source w);
-  pack_return (new xmhtml w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.ml
deleted file mode 100644 (file)
index 3b1abe4..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkList
-open GObj
-open GContainer
-
-class list_item obj = object
-  inherit container (obj : Gtk.list_item obj)
-  method event = new GObj.event_ops obj
-  method as_item = obj
-  method select () = Item.select obj
-  method deselect () = Item.deselect obj
-  method toggle () = Item.toggle obj
-  method connect = new item_signals obj
-end
-
-let list_item ?label ?border_width ?width ?height ?packing ?(show=true) () =
-  let w = ListItem.create ?label () in
-  Container.set w ?border_width ?width ?height;
-  let item = new list_item w in
-  may packing ~f:(fun f -> (f item : unit));
-  if show then item#misc#show ();
-  item
-
-class liste obj = object
-  inherit [list_item] item_container (obj : Gtk.liste obj)
-  method private wrap w = new list_item (ListItem.cast w)
-  method insert w = Liste.insert_item obj w#as_item
-  method clear_items = Liste.clear_items obj
-  method select_item = Liste.select_item obj
-  method unselect_item = Liste.unselect_item obj
-  method child_position (w : list_item) = Liste.child_position obj w#as_item
-end
-
-let liste ?selection_mode ?border_width ?width ?height
-    ?packing ?show () =
-  let w = Liste.create () in
-  may selection_mode ~f:(Liste.set_selection_mode w);
-  Container.set w ?border_width ?width ?height;
-  pack_return (new liste w) ~packing ~show
-
-(* Cell lists *)
-
-class clist_signals obj = object
-  inherit container_signals obj
-  method click_column =
-    GtkSignal.connect ~sgn:CList.Signals.click_column obj ~after
-  method select_row =
-    GtkSignal.connect ~sgn:CList.Signals.select_row obj ~after
-  method unselect_row =
-    GtkSignal.connect ~sgn:CList.Signals.unselect_row obj ~after
-  method scroll_vertical =
-    GtkSignal.connect ~sgn:CList.Signals.scroll_vertical obj ~after
-  method scroll_horizontal =
-    GtkSignal.connect ~sgn:CList.Signals.scroll_horizontal obj ~after
-end
-
-class ['a] clist obj = object (self)
-  inherit widget (obj : Gtk.clist obj)
-  method set_border_width = Container.set_border_width obj
-  method event = new GObj.event_ops obj
-  method connect = new clist_signals obj
-  method rows = CList.get_rows obj
-  method columns = CList.get_columns obj
-  method focus_row = CList.get_focus_row obj
-  method hadjustment = new GData.adjustment (CList.get_hadjustment obj)
-  method vadjustment = new GData.adjustment (CList.get_vadjustment obj)
-  method set_button_actions = CList.set_button_actions obj
-  method freeze () = CList.freeze obj
-  method thaw () = CList.thaw obj
-  method column_title = CList.get_column_title obj
-  method column_widget col =
-    new widget (CList.get_column_widget obj col)
-  method columns_autosize () = CList.columns_autosize obj
-  method optimal_column_width = CList.optimal_column_width obj
-  method moveto ?(row_align=0.) ?(col_align=0.) row col =
-    CList.moveto obj row col ~row_align ~col_align
-  method row_is_visible = CList.row_is_visible obj
-  method cell_type = CList.get_cell_type obj
-  method cell_text = CList.get_text obj
-  method cell_pixmap row col =
-    let pm, mask = CList.get_pixmap obj row col in
-    may_map pm ~f:(fun x -> new GDraw.pixmap ?mask x)
-  method cell_style  row col =
-    try Some (new style (CList.get_cell_style obj row col))
-    with Gpointer.Null -> None
-  method row_selectable row = CList.get_selectable obj ~row
-  method row_style row =
-    try Some (new style (CList.get_row_style obj ~row))
-    with Gpointer.Null -> None
-  method set_shift = CList.set_shift obj
-  method insert ~row texts =
-    let texts = List.map texts ~f:(fun x -> Some x) in
-    CList.insert obj ~row texts
-  method append = self#insert ~row:self#rows
-  method prepend = self#insert ~row:0
-  method remove = CList.remove obj
-  method select = CList.select obj
-  method unselect = CList.unselect obj
-  method clear () = CList.clear obj
-  method get_row_column = CList.get_row_column obj
-  method select_all () = CList.select_all obj
-  method unselect_all () = CList.unselect_all obj
-  method swap_rows = CList.swap_rows obj
-  method row_move = CList.row_move obj
-  method sort () = CList.sort obj
-  method set_hadjustment adj =
-    CList.set_hadjustment obj (GData.as_adjustment adj)
-  method set_vadjustment adj =
-    CList.set_vadjustment obj (GData.as_adjustment adj)
-  method set_shadow_type = CList.set_shadow_type obj
-  method set_button_actions = CList.set_button_actions obj
-  method set_selection_mode = CList.set_selection_mode obj
-  method set_reorderable = CList.set_reorderable obj
-  method set_use_drag_icons = CList.set_use_drag_icons obj
-  method set_row_height = CList.set_row_height obj
-  method set_titles_show = CList.set_titles_show obj
-  method set_titles_active = CList.set_titles_active obj
-  method set_sort = CList.set_sort obj
-  method set_column ?widget =
-    CList.set_column obj ?widget:(may_map widget ~f:as_widget)
-  method set_row ?foreground ?background ?selectable ?style =
-    let color = may_map ~f:(fun c -> Gpointer.optboxed (GDraw.optcolor c))
-    and style = may_map ~f:(fun (st : style) -> st#as_style) style in
-    CList.set_row obj
-      ?foreground:(color foreground) ?background:(color background)
-      ?selectable ?style
-  method set_cell ?text ?pixmap ?spacing ?style =
-    let pixmap, mask =
-      match pixmap with None -> None, None
-      | Some (pm : GDraw.pixmap) -> Some pm#pixmap, pm#mask
-    and style = may_map ~f:(fun (st : style) -> st#as_style) style in
-    CList.set_cell obj ?text ?pixmap ?mask ?spacing ?style
-  method set_row_data n ~data =
-    CList.set_row_data obj ~row:n (Obj.repr (data : 'a))
-  method get_row_data n : 'a = Obj.obj (CList.get_row_data obj ~row:n)
-  method scroll_vertical =
-    CList.Signals.emit_scroll obj ~sgn:CList.Signals.scroll_vertical
-  method scroll_horizontal =
-    CList.Signals.emit_scroll obj ~sgn:CList.Signals.scroll_horizontal
-end
-
-let clist ?(columns=1) ?titles ?hadjustment ?vadjustment
-    ?shadow_type ?button_actions ?selection_mode
-    ?reorderable ?use_drag_icons ?row_height
-    ?titles_show ?titles_active ?auto_sort ?sort_column ?sort_type
-    ?border_width ?width ?height ?packing ?show () =
-  let w =
-    match titles with None -> CList.create ~cols:columns
-    | Some titles -> CList.create_with_titles (Array.of_list titles)
-  in
-  CList.set w 
-    ?hadjustment:(may_map ~f:GData.as_adjustment hadjustment)
-    ?vadjustment:(may_map ~f:GData.as_adjustment vadjustment)
-    ?shadow_type ?button_actions ?selection_mode ?reorderable
-    ?use_drag_icons ?row_height ?titles_show ?titles_active;
-  CList.set_sort w ?auto:auto_sort ?column:sort_column ?dir:sort_type ();
-  Container.set w ?border_width ?width ?height;
-  pack_return (new clist w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gList.mli
deleted file mode 100644 (file)
index 17f4cef..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class list_item : Gtk.list_item obj ->
-  object
-    inherit container
-    val obj : Gtk.list_item obj
-    method event : event_ops
-    method as_item : Gtk.list_item obj
-    method connect : item_signals
-    method deselect : unit -> unit
-    method select : unit -> unit
-    method toggle : unit -> unit
-  end
-val list_item :
-  ?label:string ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(list_item -> unit) -> ?show:bool -> unit -> list_item
-
-class liste : Gtk.liste obj ->
-  object
-    inherit [list_item] item_container
-    val obj : Gtk.liste obj
-    method child_position : list_item -> int
-    method clear_items : start:int -> stop:int -> unit
-    method insert : list_item -> pos:int -> unit
-    method select_item : pos:int -> unit
-    method unselect_item : pos:int -> unit
-    method private wrap : Gtk.widget obj -> list_item
-  end
-val liste :
-  ?selection_mode:Tags.selection_mode ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> liste
-
-class clist_signals : 'a obj ->
-  object
-    inherit container_signals
-    constraint 'a = [>`clist|`container|`widget]
-    val obj : 'a obj
-    method click_column : callback:(int -> unit) -> GtkSignal.id
-    method select_row :
-      callback:(row:int ->
-                column:int -> event:GdkEvent.Button.t option -> unit) ->
-      GtkSignal.id
-    method unselect_row :
-      callback:(row:int ->
-                column:int -> event:GdkEvent.Button.t option -> unit) ->
-      GtkSignal.id
-    method scroll_horizontal :
-      callback:(Tags.scroll_type -> pos:clampf -> unit) -> GtkSignal.id
-    method scroll_vertical :
-      callback:(Tags.scroll_type -> pos:clampf -> unit) -> GtkSignal.id
-  end
-
-class ['a] clist : Gtk.clist obj ->
-  object
-    inherit widget
-    val obj : Gtk.clist obj
-    method event : event_ops
-    method append : string list -> int
-    method cell_pixmap : int -> int -> GDraw.pixmap option
-    method cell_style : int -> int -> style option
-    method cell_text : int -> int -> string
-    method cell_type : int -> int -> Tags.cell_type
-    method clear : unit -> unit
-    method column_title : int -> string
-    method column_widget : int -> widget
-    method columns : int
-    method columns_autosize : unit -> unit
-    method connect : clist_signals
-    method focus_row : int
-    method freeze : unit -> unit
-    method get_row_column : x:int -> y:int -> int * int
-    method get_row_data : int -> 'a
-    method hadjustment : GData.adjustment
-    method insert : row:int -> string list -> int
-    method moveto :
-      ?row_align:clampf -> ?col_align:clampf -> int -> int -> unit
-    method optimal_column_width : int -> int
-    method prepend : string list -> int
-    method remove : row:int -> unit
-    method row_is_visible : int -> Tags.visibility
-    method row_move : int -> dst:int -> unit
-    method row_selectable : int -> bool
-    method row_style : int -> style option
-    method rows : int
-    method scroll_vertical : Tags.scroll_type -> pos:clampf -> unit
-    method scroll_horizontal : Tags.scroll_type -> pos:clampf -> unit
-    method select : int -> int -> unit
-    method select_all : unit -> unit
-    method set_border_width : int -> unit
-    method set_button_actions : int -> Tags.button_action list -> unit
-    method set_cell :
-      ?text:string ->
-      ?pixmap:GDraw.pixmap ->
-      ?spacing:int -> ?style:style -> int -> int -> unit
-    method set_column :
-      ?widget:widget ->
-      ?title:string ->
-      ?title_active:bool ->
-      ?justification:Tags.justification ->
-      ?visibility:bool ->
-      ?resizeable:bool ->
-      ?auto_resize:bool ->
-      ?width:int -> ?min_width:int -> ?max_width:int -> int -> unit
-    method set_hadjustment : GData.adjustment -> unit
-    method set_reorderable : bool -> unit
-    method set_row :
-      ?foreground:GDraw.optcolor ->
-      ?background:GDraw.optcolor ->
-      ?selectable:bool ->
-      ?style:style -> int -> unit
-    method set_row_data : int -> data:'a -> unit
-    method set_row_height : int -> unit
-    method set_selection_mode : Tags.selection_mode -> unit
-    method set_shadow_type : Tags.shadow_type -> unit
-    method set_shift : int -> int -> vertical:int -> horizontal:int -> unit
-    method set_sort :
-      ?auto:bool -> ?column:int -> ?dir:Tags.sort_type -> unit -> unit
-    method set_titles_active : bool -> unit
-    method set_titles_show : bool -> unit
-    method set_use_drag_icons : bool -> unit
-    method set_vadjustment : GData.adjustment -> unit
-    method sort : unit -> unit
-    method swap_rows : int -> int -> unit
-    method thaw : unit -> unit
-    method unselect : int -> int -> unit
-    method unselect_all : unit -> unit
-    method vadjustment : GData.adjustment
-  end
-val clist :
-  ?columns:int ->
-  ?titles:string list ->
-  ?hadjustment:GData.adjustment ->
-  ?vadjustment:GData.adjustment ->
-  ?shadow_type:Tags.shadow_type ->
-  ?button_actions:(int * Tags.button_action list) list ->
-  ?selection_mode:Tags.selection_mode ->
-  ?reorderable:bool ->
-  ?use_drag_icons:bool ->
-  ?row_height:int ->
-  ?titles_show:bool ->
-  ?titles_active:bool ->
-  ?auto_sort:bool ->
-  ?sort_column:int ->
-  ?sort_type:Tags.sort_type ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> 'a clist
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMain.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMain.ml
deleted file mode 100644 (file)
index 811f490..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GtkMain
-open GObj
-
-module Main : sig
-  val init : unit -> string (* returns the locale name *)
-  val main : unit -> unit
-  val quit : unit -> unit
-  val version : int * int * int
-  val flush : unit -> unit
-end = Main
-
-module Grab = struct
-  open Grab
-  let add (w : #widget) = add w#as_widget
-  let remove (w : #widget) = remove w#as_widget
-  let get_current () = new widget (get_current ())
-end
-
-module Timeout : sig
-  type id
-  val add : ms:int -> callback:(unit -> bool) -> id
-  val remove : id -> unit
-end = Timeout
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.ml
deleted file mode 100644 (file)
index 52f05a4..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkData
-open GtkBase
-open GtkMenu
-open GObj
-open GContainer
-
-(* Menu type *)
-
-class menu_shell_signals obj = object
-  inherit container_signals obj
-  method deactivate =
-    GtkSignal.connect ~sgn:MenuShell.Signals.deactivate obj ~after
-end
-
-class type virtual ['a] pre_menu = object
-  inherit ['a] item_container
-  method as_menu : Gtk.menu Gtk.obj
-  method deactivate : unit -> unit
-  method connect : menu_shell_signals
-  method event : event_ops
-  method popup : button:int -> time:int -> unit
-  method popdown : unit -> unit
-  method set_accel_group : accel_group -> unit
-end
-
-(* Menu items *)
-
-class menu_item_signals obj = object
-  inherit item_signals obj
-  method activate = GtkSignal.connect ~sgn:MenuItem.Signals.activate obj
-end
-
-
-class ['a] pre_menu_item_skel obj = object
-  inherit container obj
-  method as_item = MenuItem.coerce obj
-  method set_submenu (w : 'a pre_menu) = MenuItem.set_submenu obj w#as_menu
-  method remove_submenu () = MenuItem.remove_submenu obj
-  method configure = MenuItem.configure obj
-  method activate () = MenuItem.activate obj
-  method right_justify () = MenuItem.right_justify obj
-  method add_accelerator ~group ?modi:m ?flags key=
-    Widget.add_accelerator obj ~sgn:MenuItem.Signals.activate group ?flags
-      ?modi:m ~key
-end
-
-class menu_item obj = object
-  inherit [menu_item] pre_menu_item_skel obj
-  method connect = new menu_item_signals obj
-  method event = new GObj.event_ops obj
-end
-
-class menu_item_skel = [menu_item] pre_menu_item_skel
-
-let pack_item self ~packing ~show =
-  may packing ~f:(fun f -> (f (self :> menu_item) : unit));
-  if show <> Some false then self#misc#show ();
-  self
-
-let menu_item ?label ?border_width ?width ?height ?packing ?show () =
-  let w = MenuItem.create ?label () in
-  Container.set w ?border_width ?width ?height;
-  pack_item (new menu_item w) ?packing ?show
-
-let tearoff_item ?border_width ?width ?height ?packing ?show () =
-  let w = MenuItem.tearoff_create () in
-  Container.set w ?border_width ?width ?height;
-  pack_item (new menu_item w) ?packing ?show
-
-class check_menu_item_signals obj = object
-  inherit menu_item_signals obj
-  method toggled =
-    GtkSignal.connect ~sgn:CheckMenuItem.Signals.toggled obj ~after
-end
-
-class check_menu_item obj = object
-  inherit menu_item_skel obj
-  method set_active = CheckMenuItem.set_active obj
-  method set_show_toggle = CheckMenuItem.set_show_toggle obj
-  method active = CheckMenuItem.get_active obj
-  method toggled () = CheckMenuItem.toggled obj
-  method connect = new check_menu_item_signals obj
-  method event = new GObj.event_ops obj
-end
-
-let check_menu_item ?label ?active ?show_toggle
-    ?border_width ?width ?height ?packing ?show () =
-  let w = CheckMenuItem.create ?label () in
-  CheckMenuItem.set w ?active ?show_toggle;
-  Container.set w ?border_width ?width ?height;
-  pack_item (new check_menu_item w) ?packing ?show
-
-class radio_menu_item obj = object
-  inherit check_menu_item (obj : Gtk.radio_menu_item obj)
-  method group = Some obj
-  method set_group = RadioMenuItem.set_group obj
-end
-
-let radio_menu_item ?group ?label ?active ?show_toggle
-    ?border_width ?width ?height ?packing ?show () =
-  let w = RadioMenuItem.create ?group ?label () in
-  CheckMenuItem.set w ?active ?show_toggle;
-  Container.set w ?border_width ?width ?height;
-  pack_item (new radio_menu_item w) ?packing ?show
-
-(* Menus *)
-
-class menu_shell obj = object
-  inherit [menu_item] item_container obj
-  method private wrap w = new menu_item (MenuItem.cast w)
-  method insert w = MenuShell.insert obj w#as_item
-  method deactivate () = MenuShell.deactivate obj
-  method connect = new menu_shell_signals obj
-  method event = new GObj.event_ops obj
-end
-
-class menu obj = object
-  inherit menu_shell obj
-  method popup = Menu.popup obj
-  method popdown () = Menu.popdown obj
-  method as_menu : Gtk.menu obj = obj
-  method set_accel_group = Menu.set_accel_group obj
-end
-
-let menu ?border_width ?packing ?show () =
-  let w = Menu.create () in
-  may border_width ~f:(Container.set_border_width w);
-  let self = new menu w in
-  may packing ~f:(fun f -> (f (self :> menu) : unit));
-  if show <> Some false then self#misc#show ();
-  self
-
-(* Option Menu (GtkButton?) *)
-
-class option_menu obj = object
-  inherit GButton.button_skel obj
-  method connect = new GButton.button_signals obj
-  method event = new GObj.event_ops obj
-  method set_menu (menu : menu) = OptionMenu.set_menu obj menu#as_menu
-  method get_menu = new menu (OptionMenu.get_menu obj)
-  method remove_menu () = OptionMenu.remove_menu obj
-  method set_history = OptionMenu.set_history obj
-end
-
-let option_menu ?border_width ?width ?height ?packing ?show () =
-  let w = OptionMenu.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new option_menu w) ~packing ~show
-
-(* Menu Bar *)
-
-let menu_bar ?border_width ?width ?height ?packing ?show () =
-  let w = MenuBar.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new menu_shell w) ~packing ~show
-
-(* Menu Factory *)
-
-class ['a] factory
-    ?(accel_group=AccelGroup.create ())
-    ?(accel_modi=[`CONTROL])
-    ?(accel_flags=[`VISIBLE]) (menu_shell : 'a) =
-  object (self)
-    val menu_shell : #menu_shell = menu_shell
-    val group = accel_group
-    val m = accel_modi
-    val flags = accel_flags
-    method menu = menu_shell
-    method accel_group = group
-    method private bind ?key ?callback (item : menu_item) =
-      menu_shell#append item;
-      may key ~f:(item#add_accelerator ~group ~modi:m ~flags);
-      may callback ~f:(fun callback -> item#connect#activate ~callback)
-    method add_item ?key ?callback ?submenu label =
-      let item = menu_item ~label () in
-      self#bind item ?key ?callback;
-      may (submenu : menu option) ~f:item#set_submenu;
-      item
-    method add_check_item ?active ?key ?callback label =
-      let item = check_menu_item ~label ?active () in
-      self#bind (item :> menu_item) ?key
-       ?callback:(may_map callback ~f:(fun f () -> f item#active));
-      item
-    method add_radio_item ?group ?active ?key ?callback label =
-      let item = radio_menu_item ~label ?group ?active () in
-      self#bind (item :> menu_item) ?key
-       ?callback:(may_map callback ~f:(fun f () -> f item#active));
-      item
-    method add_separator () = menu_item ~packing:menu_shell#append ()
-    method add_submenu ?key label =
-      let item = menu_item ~label () in
-      self#bind item ?key;
-      menu ~packing:item#set_submenu ();
-    method add_tearoff () = tearoff_item ~packing:menu_shell#append ()
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMenu.mli
deleted file mode 100644 (file)
index 505249b..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class menu_shell_signals : 'b obj ->
-  object ('a)
-    inherit container_signals
-    constraint 'b = [>`menushell|`container|`widget]
-    val obj : 'b obj
-    method deactivate : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class menu_item_signals : 'b obj ->
-  object ('a)
-    inherit item_signals
-    constraint 'b = [>`menuitem|`container|`item|`widget]
-    val obj : 'b obj
-    method activate : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class menu_item_skel :
-  'a obj ->
-  object
-    inherit container
-    constraint 'a = [>`widget|`container|`menuitem]
-    val obj : 'a obj
-    method activate : unit -> unit
-    method add_accelerator :
-      group:accel_group ->
-      ?modi:Gdk.Tags.modifier list ->
-      ?flags:Tags.accel_flag list -> Gdk.keysym -> unit
-    method as_item : Gtk.menu_item obj
-    method configure : show_toggle:bool -> show_indicator:bool -> unit
-    method remove_submenu : unit -> unit
-    method right_justify : unit -> unit
-    method set_submenu : menu -> unit
-  end
-and menu_item : 'a obj ->
-  object
-    inherit menu_item_skel
-    constraint 'a = [>`widget|`container|`item|`menuitem]
-    val obj : 'a obj
-    method event : event_ops
-    method connect : menu_item_signals
-  end
-and menu : Gtk.menu obj ->
-  object
-    inherit [menu_item] item_container
-    val obj : Gtk.menu obj
-    method add : menu_item -> unit
-    method event : event_ops
-    method append : menu_item -> unit
-    method as_menu : Gtk.menu obj
-    method children : menu_item list
-    method connect : menu_shell_signals
-    method deactivate : unit -> unit
-    method insert : menu_item -> pos:int -> unit
-    method popdown : unit -> unit
-    method popup : button:int -> time:int -> unit
-    method prepend : menu_item -> unit
-    method remove : menu_item -> unit
-    method set_accel_group : accel_group -> unit
-    method set_border_width : int -> unit
-    method private wrap : Gtk.widget obj -> menu_item
-  end
-
-val menu :
-  ?border_width:int -> ?packing:(menu -> unit) -> ?show:bool -> unit -> menu
-val menu_item :
-  ?label:string ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(menu_item -> unit) -> ?show:bool -> unit -> menu_item
-val tearoff_item :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(menu_item -> unit) -> ?show:bool -> unit -> menu_item
-
-class check_menu_item_signals : 'a obj ->
-  object
-    inherit menu_item_signals
-    constraint 'a = [>`checkmenuitem|`container|`item|`menuitem|`widget]
-    val obj : 'a obj
-    method toggled : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class check_menu_item : 'a obj ->
-  object
-    inherit menu_item_skel
-    constraint 'a = [>`widget|`checkmenuitem|`container|`item|`menuitem]
-    val obj : 'a obj
-    method active : bool
-    method event : event_ops
-    method connect : check_menu_item_signals
-    method set_active : bool -> unit
-    method set_show_toggle : bool -> unit
-    method toggled : unit -> unit
-  end
-val check_menu_item :
-  ?label:string ->
-  ?active:bool ->
-  ?show_toggle:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(menu_item -> unit) -> ?show:bool -> unit -> check_menu_item
-
-class radio_menu_item : Gtk.radio_menu_item obj ->
-  object
-    inherit check_menu_item
-    val obj : Gtk.radio_menu_item obj
-    method group : Gtk.radio_menu_item group
-    method set_group : Gtk.radio_menu_item group -> unit
-  end
-val radio_menu_item :
-  ?group:Gtk.radio_menu_item group ->
-  ?label:string ->
-  ?active:bool ->
-  ?show_toggle:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(menu_item -> unit) -> ?show:bool -> unit -> radio_menu_item
-
-class menu_shell : 'a obj ->
-  object
-    inherit [menu_item] item_container
-    constraint 'a = [>`widget|`container|`menushell]
-    val obj : 'a obj
-    method event : event_ops
-    method deactivate : unit -> unit
-    method connect : menu_shell_signals
-    method insert : menu_item -> pos:int -> unit
-    method private wrap : Gtk.widget obj -> menu_item
-  end
-
-val menu_bar :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> menu_shell
-
-class option_menu : 'a obj ->
-  object
-    inherit GButton.button_skel
-    constraint 'a = [>`optionmenu|`button|`container|`widget]
-    val obj : 'a obj
-    method event : event_ops
-    method connect : GButton.button_signals
-    method get_menu : menu
-    method remove_menu : unit -> unit
-    method set_history : int -> unit
-    method set_menu : menu -> unit
-  end
-val option_menu :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> option_menu
-
-class ['a] factory :
-  ?accel_group:accel_group ->
-  ?accel_modi:Gdk.Tags.modifier list ->
-  ?accel_flags:Tags.accel_flag list ->
-  'a ->
-  object
-    constraint 'a = #menu_shell
-    val flags : Tags.accel_flag list
-    val group : accel_group
-    val m : Gdk.Tags.modifier list
-    val menu_shell : 'a
-    method accel_group : accel_group
-    method add_check_item :
-      ?active:bool ->
-      ?key:Gdk.keysym ->
-      ?callback:(bool -> unit) -> string -> check_menu_item
-    method add_item :
-      ?key:Gdk.keysym ->
-      ?callback:(unit -> unit) ->
-      ?submenu:menu -> string -> menu_item
-    method add_radio_item :
-      ?group:Gtk.radio_menu_item group ->
-      ?active:bool ->
-      ?key:Gdk.keysym ->
-      ?callback:(bool -> unit) -> string -> radio_menu_item
-    method add_separator : unit -> menu_item
-    method add_submenu : ?key:Gdk.keysym -> string -> menu
-    method add_tearoff : unit -> menu_item
-    method private bind :
-      ?key:Gdk.keysym -> ?callback:(unit -> unit) -> menu_item -> unit
-    method menu : 'a
-  end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.ml
deleted file mode 100644 (file)
index 13fd7b4..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkMisc
-open GObj
-
-let separator dir ?(width = -2) ?(height = -2) ?packing ?show () =
-  let w = Separator.create dir in
-  if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height;
-  pack_return (new widget_full w) ~packing ~show
-
-class statusbar_context obj ctx = object (self)
-  val obj : statusbar obj = obj
-  val context : Gtk.statusbar_context = ctx
-  method context = context
-  method push text = Statusbar.push obj context ~text
-  method pop () = Statusbar.pop obj context
-  method remove = Statusbar.remove obj context
-  method flash ?(delay=1000) text =
-    let msg = self#push text in
-    GtkMain.Timeout.add ~ms:delay ~callback:(fun () -> self#remove msg; false);
-    ()
-end
-
-class statusbar obj = object
-  inherit GContainer.container_full (obj : Gtk.statusbar obj)
-  method new_context ~name =
-    new statusbar_context obj (Statusbar.get_context obj name)
-end
-
-let statusbar ?border_width ?width ?height ?packing ?show () =
-  let w = Statusbar.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new statusbar w) ~packing ~show
-
-class calendar_signals obj = object
-  inherit widget_signals obj
-  method month_changed =
-    GtkSignal.connect obj ~sgn:Calendar.Signals.month_changed ~after
-  method day_selected =
-    GtkSignal.connect obj ~sgn:Calendar.Signals.day_selected ~after
-  method day_selected_double_click =
-    GtkSignal.connect obj
-      ~sgn:Calendar.Signals.day_selected_double_click ~after
-  method prev_month =
-    GtkSignal.connect obj ~sgn:Calendar.Signals.prev_month ~after
-  method next_month =
-    GtkSignal.connect obj ~sgn:Calendar.Signals.next_month ~after
-  method prev_year =
-    GtkSignal.connect obj ~sgn:Calendar.Signals.prev_year ~after
-  method next_year =
-    GtkSignal.connect obj ~sgn:Calendar.Signals.next_year ~after
-end
-
-class calendar obj = object
-  inherit widget (obj : Gtk.calendar obj)
-  method event = new GObj.event_ops obj
-  method connect = new calendar_signals obj
-  method select_month = Calendar.select_month obj
-  method select_day = Calendar.select_day obj
-  method mark_day = Calendar.mark_day obj
-  method unmark_day = Calendar.unmark_day obj
-  method clear_marks = Calendar.clear_marks obj
-  method display_options = Calendar.display_options obj
-  method date = Calendar.get_date obj
-  method freeze () = Calendar.freeze obj
-  method thaw () = Calendar.thaw obj
-end
-
-let calendar ?options ?(width = -2) ?(height = -2) ?packing ?show () =
-  let w = Calendar.create () in
-  if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height;
-  may options ~f:(Calendar.display_options w);
-  pack_return (new calendar w) ~packing ~show
-
-class drawing_area obj = object
-  inherit widget_full (obj : Gtk.drawing_area obj)
-  method event = new GObj.event_ops obj
-  method set_size = DrawingArea.size obj
-end
-
-let drawing_area ?(width=0) ?(height=0) ?packing ?show () =
-  let w = DrawingArea.create () in
-  if width <> 0 || height <> 0 then DrawingArea.size w ~width ~height;
-  pack_return (new drawing_area w) ~packing ~show
-
-class misc obj = object
-  inherit widget obj
-  method set_alignment = Misc.set_alignment obj
-  method set_padding = Misc.set_padding obj
-end
-
-class arrow obj = object
-  inherit misc obj
-  method set_arrow kind ~shadow = Arrow.set obj ~kind ~shadow
-end
-
-let arrow ~kind ~shadow
-    ?xalign ?yalign ?xpad ?ypad ?width ?height ?packing ?show () =
-  let w = Arrow.create ~kind ~shadow in
-  Misc.set w ?xalign ?yalign ?xpad ?ypad ?width ?height;
-  pack_return (new arrow w) ~packing ~show
-
-class image obj = object
-  inherit misc obj
-  method set_image ?mask image = Image.set obj image ?mask
-end
-
-let image image ?mask
-    ?xalign ?yalign ?xpad ?ypad ?width ?height ?packing ?show () =
-  let w = Image.create image ?mask in
-  Misc.set w ?xalign ?yalign ?xpad ?ypad ?width ?height;
-  pack_return (new image w) ~packing ~show
-
-class label_skel obj = object
-  inherit misc obj
-  method set_text = Label.set_text obj
-  method set_justify = Label.set_justify obj
-  method set_pattern = Label.set_pattern obj
-  method set_line_wrap = Label.set_line_wrap obj
-  method text = Label.get_text obj
-end
-
-class label obj = object
-  inherit label_skel (Label.coerce obj)
-  method connect = new widget_signals obj
-end
-
-let label ?(text="") ?justify ?line_wrap ?pattern
-    ?xalign ?yalign ?xpad ?ypad ?width ?height ?packing ?show () =
-  let w = Label.create text in
-  Label.set w ?justify ?line_wrap ?pattern;
-  Misc.set w ?xalign ?yalign ?xpad ?ypad ?width ?height;
-  pack_return (new label w) ~packing ~show
-
-let label_cast w = new label (Label.cast w#as_widget)
-
-class tips_query_signals obj = object
-  inherit widget_signals obj
-  method widget_entered ~callback = 
-    GtkSignal.connect ~sgn:TipsQuery.Signals.widget_entered obj ~after
-      ~callback:(function None -> callback None
-       | Some w -> callback (Some (new widget w)))
-  method widget_selected ~callback = 
-    GtkSignal.connect ~sgn:TipsQuery.Signals.widget_selected obj ~after
-      ~callback:(function None -> callback None
-       | Some w -> callback (Some (new widget w)))
-end
-
-class tips_query obj = object
-  inherit label_skel (obj : Gtk.tips_query obj)
-  method start () = TipsQuery.start obj
-  method stop () = TipsQuery.stop obj
-  method set_caller (w : widget) = TipsQuery.set_caller obj w#as_widget
-  method set_emit_always = TipsQuery.set_emit_always obj
-  method set_label_inactive inactive = TipsQuery.set_labels obj ~inactive
-  method set_label_no_tip no_tip = TipsQuery.set_labels obj ~no_tip
-  method connect = new tips_query_signals obj
-end
-
-let tips_query ?caller ?emit_always ?label_inactive ?label_no_tip
-    ?xalign ?yalign ?xpad ?ypad ?width ?height ?packing ?show () =
-  let w = TipsQuery.create () in
-  let caller = may_map caller ~f:(fun (w : #widget) -> w#as_widget) in
-  TipsQuery.set w ?caller ?emit_always ?label_inactive ?label_no_tip;
-  Misc.set w ?xalign ?yalign ?xpad ?ypad ?width ?height;
-  pack_return (new tips_query w) ~packing ~show
-
-class color_selection obj = object
-  inherit GObj.widget_full (obj : Gtk.color_selection obj)
-  method set_update_policy = ColorSelection.set_update_policy obj
-  method set_opacity = ColorSelection.set_opacity obj
-  method set_color ~red ~green ~blue ?opacity () =
-    ColorSelection.set_color obj ~red ~green ~blue ?opacity
-  method get_color = ColorSelection.get_color obj
-end
-
-let color_selection ?border_width ?width ?height ?packing ?show () =
-  let w = ColorSelection.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new color_selection w) ~packing ~show
-
-class pixmap obj = object
-  inherit misc (obj : Gtk.pixmap obj)
-  method connect = new widget_signals obj
-  method set_pixmap (pm : GDraw.pixmap) =
-    Pixmap.set obj ~pixmap:pm#pixmap ?mask:pm#mask
-  method pixmap =
-    new GDraw.pixmap (Pixmap.pixmap obj)
-      ?mask:(try Some(Pixmap.mask obj) with Gpointer.Null -> None)
-end
-
-let pixmap (pm : #GDraw.pixmap) ?xalign ?yalign ?xpad ?ypad
-    ?(width = -2) ?(height = -2) ?packing ?show () =
-  let w = Pixmap.create pm#pixmap ?mask:pm#mask in
-  Misc.set w ?xalign ?yalign ?xpad ?ypad;
-  if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height;
-  pack_return (new pixmap w) ~packing ~show
-
-class font_selection obj = object
-  inherit widget_full (obj : Gtk.font_selection obj)
-  method notebook = new GPack.notebook obj
-  method event = new event_ops obj
-  method font = FontSelection.get_font obj
-  method font_name = FontSelection.get_font_name obj
-  method set_font_name = FontSelection.set_font_name obj
-  method preview_text = FontSelection.get_preview_text obj
-  method set_preview_text = FontSelection.set_preview_text obj
-  method set_filter = FontSelection.set_filter obj
-end
-
-let font_selection ?border_width ?width ?height ?packing ?show () =
-  let w = FontSelection.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new font_selection w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gMisc.mli
deleted file mode 100644 (file)
index 7008369..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-val separator :
-  Tags.orientation ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> widget_full
-
-class statusbar_context :
-  Gtk.statusbar obj -> Gtk.statusbar_context ->
-  object
-    val context : Gtk.statusbar_context
-    val obj : Gtk.statusbar obj
-    method context : Gtk.statusbar_context
-    method flash : ?delay:int -> string -> unit
-    method pop : unit -> unit
-    method push : string -> statusbar_message
-    method remove : statusbar_message -> unit
-  end
-
-class statusbar : Gtk.statusbar obj ->
-  object
-    inherit container_full
-    val obj : Gtk.statusbar obj
-    method new_context : name:string -> statusbar_context
-  end
-val statusbar :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> statusbar
-
-class calendar_signals : 'a obj ->
-  object
-    inherit widget_signals
-    constraint 'a = [>`calendar|`widget]
-    val obj : 'a obj
-    method day_selected : callback:(unit -> unit) -> GtkSignal.id
-    method day_selected_double_click :
-      callback:(unit -> unit) -> GtkSignal.id
-    method month_changed : callback:(unit -> unit) -> GtkSignal.id
-    method next_month : callback:(unit -> unit) -> GtkSignal.id
-    method next_year : callback:(unit -> unit) -> GtkSignal.id
-    method prev_month : callback:(unit -> unit) -> GtkSignal.id
-    method prev_year : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class calendar : Gtk.calendar obj ->
-  object
-    inherit widget
-    val obj : Gtk.calendar obj
-    method event : event_ops
-    method clear_marks : unit
-    method connect : calendar_signals
-    method date : int * int * int
-    method display_options : Tags.calendar_display_options list -> unit
-    method freeze : unit -> unit
-    method mark_day : int -> unit
-    method select_day : int -> unit
-    method select_month : month:int -> year:int -> unit
-    method thaw : unit -> unit
-    method unmark_day : int -> unit
-  end
-val calendar :
-  ?options:Tags.calendar_display_options list ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> calendar
-
-class drawing_area : Gtk.drawing_area obj ->
-  object
-    inherit widget_full
-    val obj : Gtk.drawing_area obj
-    method event : event_ops
-    method set_size : width:int -> height:int -> unit
-  end
-val drawing_area :
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> drawing_area
-
-class misc : 'a obj ->
-  object
-    inherit widget
-    constraint 'a = [>`misc|`widget]
-    val obj : 'a obj
-    method set_alignment : ?x:float -> ?y:float -> unit -> unit
-    method set_padding : ?x:int -> ?y:int -> unit -> unit
-  end
-
-class arrow : 'a obj ->
-  object
-    inherit misc
-    constraint 'a = [>`arrow|`misc|`widget]
-    val obj : 'a obj
-    method set_arrow : Tags.arrow_type -> shadow:Tags.shadow_type -> unit
-  end
-
-val arrow :
-  kind:Tags.arrow_type ->
-  shadow:Tags.shadow_type ->
-  ?xalign:float ->
-  ?yalign:float ->
-  ?xpad:int ->
-  ?ypad:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> arrow
-
-class image : 'a obj ->
-  object
-    inherit misc
-    constraint 'a = [>`image|`misc|`widget]
-    val obj : 'a obj
-    method set_image : ?mask:Gdk.bitmap -> Gdk.image -> unit
-  end
-
-val image :
-  Gdk.image ->
-  ?mask:Gdk.bitmap ->
-  ?xalign:float ->
-  ?yalign:float ->
-  ?xpad:int ->
-  ?ypad:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> image
-
-class label_skel : 'a obj ->
-  object
-    inherit misc
-    constraint 'a = [>`label|`misc|`widget]
-    val obj : 'a obj
-    method set_justify : Tags.justification -> unit
-    method set_line_wrap : bool -> unit
-    method set_pattern : string -> unit
-    method set_text : string -> unit
-    method text : string
-  end
-
-class label : [>`label] obj ->
-  object
-    inherit label_skel
-    val obj : Gtk.label obj
-    method connect : widget_signals
-  end
-val label :
-  ?text:string ->
-  ?justify:Tags.justification ->
-  ?line_wrap:bool ->
-  ?pattern:string ->
-  ?xalign:float ->
-  ?yalign:float ->
-  ?xpad:int ->
-  ?ypad:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> label
-val label_cast : < as_widget : 'a obj ; .. > -> label
-
-class tips_query_signals : 'a obj ->
-  object
-    inherit widget_signals
-    constraint 'a = [>`tipsquery|`widget]
-    val obj : 'a obj
-    method widget_entered :
-      callback:(widget option ->
-                text:string option -> privat:string option -> unit) ->
-      GtkSignal.id
-    method widget_selected :
-      callback:(widget option -> text:string option ->
-                privat:string option -> GdkEvent.Button.t option -> bool) ->
-      GtkSignal.id
-  end
-
-class tips_query : Gtk.tips_query obj ->
-  object
-    inherit label_skel
-    val obj : Gtk.tips_query obj
-    method connect : tips_query_signals
-    method set_caller : widget -> unit
-    method set_emit_always : bool -> unit
-    method set_label_inactive : string -> unit
-    method set_label_no_tip : string -> unit
-    method start : unit -> unit
-    method stop : unit -> unit
-  end
-val tips_query :
-  ?caller:#widget ->
-  ?emit_always:bool ->
-  ?label_inactive:string ->
-  ?label_no_tip:string ->
-  ?xalign:float ->
-  ?yalign:float ->
-  ?xpad:int ->
-  ?ypad:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> tips_query
-
-class pixmap : Gtk.pixmap Gtk.obj ->
-  object
-    inherit misc
-    val obj : Gtk.pixmap Gtk.obj
-    method connect : GObj.widget_signals
-    method pixmap : GDraw.pixmap
-    method set_pixmap : GDraw.pixmap -> unit
-  end
-val pixmap :
-  #GDraw.pixmap ->
-  ?xalign:float ->
-  ?yalign:float ->
-  ?xpad:int ->
-  ?ypad:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> pixmap
-
-class color_selection : Gtk.color_selection obj ->
-  object
-    inherit widget_full
-    val obj : Gtk.color_selection obj
-    method get_color : Gtk.color
-    method set_color :
-      red:float -> green:float -> blue:float -> ?opacity:float -> unit -> unit
-    method set_opacity : bool -> unit
-    method set_update_policy : Tags.update_type -> unit
-  end
-val color_selection :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> color_selection
-
-class font_selection : Gtk.font_selection obj ->
-  object
-    inherit widget_full
-    val obj : Gtk.font_selection obj
-    method event : event_ops
-    method notebook : GPack.notebook
-    method font : Gdk.font option
-    method font_name : string option
-    method preview_text : string
-    method set_filter :
-      ?kind:Tags.font_type list ->
-      ?foundry:string list ->
-      ?weight:string list ->
-      ?slant:string list ->
-      ?setwidth:string list ->
-      ?spacing:string list ->
-      ?charset:string list -> Tags.font_filter_type -> unit
-    method set_font_name : string -> unit
-    method set_preview_text : string -> unit
-  end
-val font_selection :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> font_selection
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.ml
deleted file mode 100644 (file)
index 5c4819f..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkData
-open GtkBase
-
-(* Object *)
-
-class gtkobj obj = object
-  val obj = obj
-  method destroy () = Object.destroy obj
-  method get_id = Object.get_id obj
-end
-
-class gtkobj_misc obj = object
-  val obj = obj
-  method get_type = Type.name (Object.get_type obj)
-  method disconnect = GtkSignal.disconnect obj
-  method handler_block = GtkSignal.handler_block obj
-  method handler_unblock = GtkSignal.handler_unblock obj
-end
-
-class gtkobj_signals ?(after=false) obj = object
-  val obj = obj
-  val after = after
-  method after = {< after = true >}
-  method destroy = GtkSignal.connect ~sgn:Object.Signals.destroy obj
-end
-
-(* Widget *)
-
-class event_signals ?(after=false) obj = object
-  val obj = Widget.coerce obj
-  val after = after
-  method after = {< after = true >}
-  method any = GtkSignal.connect ~sgn:Widget.Signals.Event.any ~after obj
-  method button_press =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.button_press ~after obj
-  method button_release =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.button_release ~after obj
-  method configure =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.configure ~after obj
-  method delete =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.delete ~after obj
-  method destroy =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.destroy ~after obj
-  method enter_notify =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.enter_notify ~after obj
-  method expose =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.expose ~after obj
-  method focus_in =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.focus_in ~after obj
-  method focus_out =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.focus_out ~after obj
-  method key_press =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.key_press ~after obj
-  method key_release =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.key_release ~after obj
-  method leave_notify =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.leave_notify ~after obj
-  method map = GtkSignal.connect ~sgn:Widget.Signals.Event.map ~after obj
-  method motion_notify =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.motion_notify ~after obj
-  method property_notify =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.property_notify ~after obj
-  method proximity_in =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.proximity_in ~after obj
-  method proximity_out =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.proximity_out ~after obj
-  method selection_clear =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.selection_clear ~after obj
-  method selection_notify =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.selection_notify ~after obj
-  method selection_request =
-    GtkSignal.connect ~sgn:Widget.Signals.Event.selection_request ~after obj
-  method unmap = GtkSignal.connect ~sgn:Widget.Signals.Event.unmap ~after obj
-end
-
-class event_ops obj = object
-  val obj = Widget.coerce obj
-  method add = Widget.add_events obj
-  method connect = new event_signals obj
-  method send : Gdk.Tags.event_type Gdk.event -> bool = Widget.event obj
-  method set_extensions = Widget.set_extension_events obj
-end
-
-class style st = object
-  val style = st
-  method as_style = style
-  method copy = {< style = Style.copy style >}
-  method bg state = Style.get_bg style ~state
-  method colormap = Style.get_colormap style
-  method font = Style.get_font style
-  method set_bg =
-    List.iter ~f:
-      (fun (state,c) -> Style.set_bg style ~state ~color:(GDraw.color c))
-  method set_font = Style.set_font style
-  method set_background = Style.set_background style
-end
-
-class selection_data (sel : Selection.t) = object
-  val sel = sel
-  method selection = Selection.selection sel
-  method target = Selection.target sel
-  method seltype = Selection.seltype sel
-  method format = Selection.format sel
-  method data = Selection.get_data sel
-  method set = Selection.set sel
-end
-
-class drag_signals ?(after=false) obj = object
-  val obj =  Widget.coerce obj
-  val after = after
-  method after = {< after = true >}
-  method beginning ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_begin ~after obj
-      ~callback:(fun context -> callback (new drag_context context))
-  method ending ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_end ~after obj
-      ~callback:(fun context -> callback (new drag_context context))
-  method data_delete ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_data_delete ~after obj
-      ~callback:(fun context -> callback (new drag_context context))
-  method leave ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_leave ~after obj
-      ~callback:(fun context -> callback (new drag_context context))
-  method motion ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_motion ~after obj
-      ~callback:(fun context -> callback (new drag_context context))
-  method drop ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_drop ~after obj
-      ~callback:(fun context -> callback (new drag_context context))
-  method data_get ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_data_get ~after obj
-      ~callback:(fun context data -> callback (new drag_context context)
-              (new selection_data data))
-  method data_received ~callback =
-    GtkSignal.connect ~sgn:Widget.Signals.drag_data_received ~after obj
-      ~callback:(fun context ~x ~y data -> callback (new drag_context context)
-              ~x ~y (new selection_data data))
-
-end
-
-and drag_ops obj = object
-  val obj = Widget.coerce obj
-  method connect = new drag_signals obj
-  method dest_set ?(flags=[`ALL]) ?(actions=[]) targets =
-    DnD.dest_set obj ~flags ~actions ~targets:(Array.of_list targets)
-  method dest_unset () = DnD.dest_unset obj
-  method get_data ?(time=0) ~context:(context : drag_context) target =
-    DnD.get_data obj (context : < context : Gdk.drag_context; .. >)#context
-      ~target ~time
-  method highlight () = DnD.highlight obj
-  method unhighlight () = DnD.unhighlight obj
-  method source_set ?modi:m ?(actions=[]) targets =
-    DnD.source_set obj ?modi:m ~actions ~targets:(Array.of_list targets)
-  method source_set_icon ?(colormap = Gdk.Color.get_system_colormap ())
-      (pix : GDraw.pixmap) =
-    DnD.source_set_icon obj ~colormap pix#pixmap ?mask:pix#mask
-  method source_unset () = DnD.source_unset obj
-end
-
-and drag_context context = object
-  inherit GDraw.drag_context context
-  method context = context
-  method finish = DnD.finish context
-  method source_widget =
-    new widget (Object.unsafe_cast (DnD.get_source_widget context))
-  method set_icon_widget (w : widget) =
-    DnD.set_icon_widget context (w#as_widget)
-  method set_icon_pixmap ?(colormap = Gdk.Color.get_system_colormap ())
-      (pix : GDraw.pixmap) =
-    DnD.set_icon_pixmap context ~colormap pix#pixmap ?mask:pix#mask
-end
-
-and misc_signals ?after obj = object
-  inherit gtkobj_signals ?after obj
-  method draw ~callback =
-    GtkSignal.connect obj ~sgn:Widget.Signals.draw ~after ~callback:
-      begin fun rect ->
-       callback
-         { x = Gdk.Rectangle.x rect ; y = Gdk.Rectangle.y rect;
-           width = Gdk.Rectangle.width rect;
-           height = Gdk.Rectangle.height rect }
-      end
-  method show = GtkSignal.connect ~sgn:Widget.Signals.show ~after obj
-  method hide = GtkSignal.connect ~sgn:Widget.Signals.hide ~after obj
-  method map = GtkSignal.connect ~sgn:Widget.Signals.map ~after obj
-  method unmap = GtkSignal.connect ~sgn:Widget.Signals.unmap ~after obj
-  method realize = GtkSignal.connect ~sgn:Widget.Signals.realize ~after obj
-  method state_changed =
-    GtkSignal.connect ~sgn:Widget.Signals.state_changed ~after obj
-  method parent_set ~callback =
-    GtkSignal.connect obj ~sgn:Widget.Signals.parent_set ~after ~callback:
-      begin function
-         None   -> callback None
-       | Some w -> callback (Some (new widget (Object.unsafe_cast w)))
-      end
-  method style_set ~callback =
-    GtkSignal.connect obj ~sgn:Widget.Signals.style_set ~after ~callback:
-      (fun opt -> callback (may opt ~f:(new style)))
-end
-
-and misc_ops obj = object
-  inherit gtkobj_misc (Widget.coerce obj)
-  method connect = new misc_signals obj
-  method show () = Widget.show obj
-  method unparent () = Widget.unparent obj
-  method show_all () = Widget.show_all obj
-  method hide () = Widget.hide obj
-  method hide_all () = Widget.hide_all obj
-  method map () = Widget.map obj
-  method unmap () = Widget.unmap obj
-  method realize () = Widget.realize obj
-  method unrealize () = Widget.unrealize obj
-  method draw = Widget.draw obj
-  method activate () = Widget.activate obj
-  method reparent (w : widget) =  Widget.reparent obj w#as_widget
-  method popup = Widget.popup obj
-  method intersect = Widget.intersect obj
-  method grab_focus () = Widget.grab_focus obj
-  method grab_default () = Widget.grab_default obj
-  method is_ancestor (w : widget) = Widget.is_ancestor obj w#as_widget
-  method add_accelerator ~sgn:sg ~group ?modi ?flags key =
-    Widget.add_accelerator obj ~sgn:sg group ~key ?modi ?flags
-  method remove_accelerator ~group ?modi key =
-    Widget.remove_accelerator obj group ~key ?modi
-  method lock_accelerators () = Widget.lock_accelerators obj
-  method set_name = Widget.set_name obj
-  method set_state = Widget.set_state obj
-  method set_sensitive = Widget.set_sensitive obj
-  method set_can_default = Widget.set_can_default obj
-  method set_can_focus = Widget.set_can_focus obj
-  method set_geometry ?(x = -2) ?(y = -2) ?(width = -2) ?(height = -2)  () =
-    if x+y <> -4 then Widget.set_uposition obj ~x ~y;
-    if width+height <> -4 then Widget.set_usize obj ~width ~height
-  method set_style (style : style) = Widget.set_style obj style#as_style
-  (* get functions *)
-  method name = Widget.get_name obj
-  method toplevel =
-    try Some (new widget (Object.unsafe_cast (Widget.get_toplevel obj)))
-    with Gpointer.Null -> None
-  method window = Widget.window obj
-  method colormap = Widget.get_colormap obj
-  method visual = Widget.get_visual obj
-  method visual_depth = Gdk.Window.visual_depth (Widget.get_visual obj)
-  method pointer = Widget.get_pointer obj
-  method style = new style (Widget.get_style obj)
-  method visible = Widget.visible obj
-  method has_focus = Widget.has_focus obj
-  method parent =
-    try Some (new widget (Object.unsafe_cast (Widget.parent obj)))
-    with Gpointer.Null -> None
-  method set_app_paintable = Widget.set_app_paintable obj
-  method allocation = Widget.allocation obj
-end
-
-and widget obj = object (self)
-  inherit gtkobj obj
-  method as_widget = Widget.coerce obj
-  method misc = new misc_ops obj
-  method drag = new drag_ops (Object.unsafe_cast obj)
-  method coerce =
-    (self :> < destroy : _; get_id : _; as_widget : _; misc : _;
-               drag : _; coerce : _ >)
-end
-
-(* just to check that GDraw.misc_ops is compatible with misc_ops *)
-let _ = fun (x : #GDraw.misc_ops) -> (x : misc_ops)
-
-class widget_signals ?after (obj : [> `widget] obj) =
-  gtkobj_signals ?after obj
-
-(*
-class widget_coerce obj = object
-  inherit widget obj
-  method coerce = (self :> widget)
-end
-*)
-
-class widget_full obj = object
-  inherit widget obj
-  method connect = new widget_signals obj
-end
-
-let as_widget (w : widget) = w#as_widget
-
-let pack_return self ~packing ~show =
-  may packing ~f:(fun f -> (f (self :> widget) : unit));
-  if show <> Some false then self#misc#show ();
-  self
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gObj.mli
deleted file mode 100644 (file)
index 7c37cf1..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-(* Object *)
-
-class gtkobj :
-  'a obj ->
-  object
-    val obj : 'a obj
-    method destroy : unit -> unit
-    method get_id : int
-  end
-
-class gtkobj_signals :
-  ?after:bool -> 'a obj ->
-  object ('b)
-    val obj : 'a obj
-    val after : bool
-    method after : 'b
-    method destroy : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class gtkobj_misc : 'a obj ->
-  object
-    method get_type : string
-    method disconnect : GtkSignal.id -> unit
-    method handler_block : GtkSignal.id -> unit
-    method handler_unblock : GtkSignal.id -> unit
-  end
-
-(* Widget *)
-
-class event_signals :
-  ?after:bool -> [>`widget] obj ->
-  object ('a)
-    method after : 'a
-    method any :
-       callback:(Gdk.Tags.event_type Gdk.event -> bool) -> GtkSignal.id
-    method button_press : callback:(GdkEvent.Button.t -> bool) -> GtkSignal.id
-    method button_release :
-       callback:(GdkEvent.Button.t -> bool) -> GtkSignal.id
-    method configure : callback:(GdkEvent.Configure.t -> bool) -> GtkSignal.id
-    method delete : callback:([`DELETE] Gdk.event -> bool) -> GtkSignal.id
-    method destroy : callback:([`DESTROY] Gdk.event -> bool) -> GtkSignal.id
-    method enter_notify :
-       callback:(GdkEvent.Crossing.t -> bool) -> GtkSignal.id
-    method expose : callback:(GdkEvent.Expose.t -> bool) -> GtkSignal.id
-    method focus_in : callback:(GdkEvent.Focus.t -> bool) -> GtkSignal.id
-    method focus_out : callback:(GdkEvent.Focus.t -> bool) -> GtkSignal.id
-    method key_press : callback:(GdkEvent.Key.t -> bool) -> GtkSignal.id
-    method key_release : callback:(GdkEvent.Key.t -> bool) -> GtkSignal.id
-    method leave_notify :
-       callback:(GdkEvent.Crossing.t -> bool) -> GtkSignal.id
-    method map : callback:([`MAP] Gdk.event -> bool) -> GtkSignal.id
-    method motion_notify :
-       callback:(GdkEvent.Motion.t -> bool) -> GtkSignal.id
-    method property_notify :
-       callback:(GdkEvent.Property.t -> bool) -> GtkSignal.id
-    method proximity_in :
-       callback:(GdkEvent.Proximity.t -> bool) -> GtkSignal.id
-    method proximity_out :
-       callback:(GdkEvent.Proximity.t -> bool) -> GtkSignal.id
-    method selection_clear :
-       callback:(GdkEvent.Selection.t -> bool) -> GtkSignal.id
-    method selection_notify :
-       callback:(GdkEvent.Selection.t -> bool) -> GtkSignal.id
-    method selection_request :
-       callback:(GdkEvent.Selection.t -> bool) -> GtkSignal.id
-    method unmap : callback:([`UNMAP] Gdk.event -> bool) -> GtkSignal.id
-  end
-
-class event_ops : [>`widget] obj ->
-  object
-    method add : Gdk.Tags.event_mask list -> unit
-    method connect : event_signals
-    method send : Gdk.Tags.event_type Gdk.event -> bool
-    method set_extensions : Gdk.Tags.extension_events -> unit
-  end
-
-class style : Gtk.style ->
-  object ('a)
-    val style : Gtk.style
-    method as_style : Gtk.style
-    method bg : Tags.state_type -> Gdk.Color.t
-    method colormap : Gdk.colormap
-    method copy : 'a
-    method font : Gdk.font
-    method set_background : Gdk.window -> Tags.state_type -> unit
-    method set_bg : (Tags.state_type * GDraw.color) list -> unit
-    method set_font : Gdk.font -> unit
-  end
-
-class selection_data :
-  GtkData.Selection.t ->
-  object
-    val sel : GtkData.Selection.t
-    method data : string       (* May raise Null_pointer *)
-    method format : int
-    method selection : Gdk.atom
-    method seltype : Gdk.atom
-    method target : Gdk.atom
-    method set : typ:Gdk.atom -> format:int -> ?data:string -> unit
-  end
-
-class drag_ops : [>`widget] obj ->
-  object
-    method connect : drag_signals
-    method dest_set :
-      ?flags:Tags.dest_defaults list ->
-      ?actions:Gdk.Tags.drag_action list -> target_entry list -> unit
-    method dest_unset : unit -> unit
-    method get_data : ?time:int -> context:drag_context -> Gdk.atom ->unit
-    method highlight : unit -> unit
-    method source_set :
-      ?modi:Gdk.Tags.modifier list ->
-      ?actions:Gdk.Tags.drag_action list -> target_entry list -> unit
-    method source_set_icon : ?colormap:Gdk.colormap -> GDraw.pixmap -> unit
-    method source_unset : unit -> unit
-    method unhighlight : unit -> unit
-  end
-
-and misc_ops :
-  [>`widget] obj ->
-  object
-    inherit gtkobj_misc
-    val obj : Gtk.widget obj
-    method activate : unit -> bool
-    method add_accelerator :
-      sgn:(Gtk.widget, unit -> unit) GtkSignal.t ->
-      group:accel_group -> ?modi:Gdk.Tags.modifier list ->
-      ?flags:Tags.accel_flag list -> Gdk.keysym -> unit
-    method allocation : rectangle
-    method colormap : Gdk.colormap
-    method connect : misc_signals
-    method draw : Gdk.Rectangle.t option -> unit
-    method grab_default : unit -> unit
-    method grab_focus : unit -> unit
-    method has_focus : bool
-    method hide : unit -> unit
-    method hide_all : unit -> unit
-    method intersect : Gdk.Rectangle.t -> Gdk.Rectangle.t option
-    method is_ancestor : widget -> bool
-    method lock_accelerators : unit -> unit
-    method map : unit -> unit
-    method name : string
-    method parent : widget option
-    method pointer : int * int
-    method popup : x:int -> y:int -> unit
-    method realize : unit -> unit
-    method remove_accelerator :
-      group:accel_group -> ?modi:Gdk.Tags.modifier list -> Gdk.keysym -> unit
-    method reparent : widget -> unit
-    method set_app_paintable : bool -> unit
-    method set_can_default : bool -> unit
-    method set_can_focus : bool -> unit
-    method set_name : string -> unit
-    method set_sensitive : bool -> unit
-    method set_state : Tags.state_type -> unit
-    method set_style : style -> unit
-    method set_geometry :
-      ?x:int -> ?y:int -> ?width:int -> ?height:int -> unit -> unit
-    method show : unit -> unit
-    method show_all : unit -> unit
-    method style : style
-    method toplevel : widget option
-    method unmap : unit -> unit
-    method unparent : unit -> unit
-    method unrealize : unit -> unit
-    method visible : bool
-    method visual : Gdk.visual
-    method visual_depth : int
-    method window : Gdk.window
-  end
-
-and widget :
-  'a obj ->
-  object
-    inherit gtkobj
-    constraint 'a = [>`widget]
-    val obj : 'a obj
-    method as_widget : Gtk.widget obj
-    method coerce : widget
-    method drag : drag_ops
-    method misc : misc_ops
-  end
-
-and misc_signals :
-  ?after:bool -> Gtk.widget obj ->
-  object ('b)
-    inherit gtkobj_signals 
-    val obj : Gtk.widget obj
-    method after : 'b
-    method draw : callback:(Gtk.rectangle -> unit) -> GtkSignal.id
-    method hide : callback:(unit -> unit) -> GtkSignal.id
-    method map : callback:(unit -> unit) -> GtkSignal.id
-    method parent_set : callback:(widget option -> unit) -> GtkSignal.id
-    method realize : callback:(unit -> unit) -> GtkSignal.id
-    method show : callback:(unit -> unit) -> GtkSignal.id
-    method state_changed :
-      callback:(Gtk.Tags.state_type -> unit) -> GtkSignal.id
-    method style_set : callback:(unit -> unit) -> GtkSignal.id
-    method unmap : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-and drag_context :
-  Gdk.drag_context ->
-  object
-    val context : Gdk.drag_context
-    method context : Gdk.drag_context
-    method finish : success:bool -> del:bool -> time:int -> unit
-    method source_widget : widget 
-    method set_icon_pixmap :
-      ?colormap:Gdk.colormap -> GDraw.pixmap -> hot_x:int -> hot_y:int -> unit
-    method set_icon_widget : widget -> hot_x:int -> hot_y:int -> unit
-    method status : ?time:int -> Gdk.Tags.drag_action list -> unit
-    method suggested_action : Gdk.Tags.drag_action
-    method targets : Gdk.atom list
-  end
-
-and drag_signals :
-  ?after:bool -> Gtk.widget obj ->
-  object ('a)
-    method after : 'a
-    method beginning :
-      callback:(drag_context -> unit) -> GtkSignal.id
-    method data_delete :
-      callback:(drag_context -> unit) -> GtkSignal.id
-    method data_get :
-      callback:(drag_context -> selection_data -> info:int -> time:int -> unit)
-      -> GtkSignal.id
-    method data_received :
-      callback:(drag_context -> x:int -> y:int ->
-               selection_data -> info:int -> time:int -> unit) -> GtkSignal.id
-    method drop :
-      callback:(drag_context -> x:int -> y:int -> time:int -> bool) ->
-      GtkSignal.id
-    method ending :
-      callback:(drag_context -> unit) -> GtkSignal.id
-    method leave :
-      callback:(drag_context -> time:int -> unit) -> GtkSignal.id
-    method motion :
-      callback:(drag_context -> x:int -> y:int -> time:int -> bool) ->
-      GtkSignal.id
-  end
-
-class widget_signals : ?after:bool -> 'a obj ->
-  object
-    inherit gtkobj_signals
-    constraint 'a = [>`widget]
-    val obj : 'a obj
-  end
-
-class widget_full : 'a obj ->
-  object
-    inherit widget
-    constraint 'a = [>`widget]
-    val obj : 'a obj
-    method connect : widget_signals
-  end
-
-val as_widget : widget -> Gtk.widget obj
-
-val pack_return :
-    (#widget as 'a) ->
-    packing:(widget -> unit) option -> show:bool option -> 'a
-    (* To use in initializers to provide a ?packing: option *)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.ml
deleted file mode 100644 (file)
index 3641349..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkPack
-open GObj
-open GContainer
-
-class box_skel obj = object
-  inherit container obj
-  method pack ?from:f ?expand ?fill ?padding w =
-    Box.pack obj (as_widget w) ?from:f ?expand ?fill ?padding
-  method set_homogeneous = Box.set_homogeneous obj
-  method set_spacing = Box.set_spacing obj
-  method set_child_packing ?from:f ?expand ?fill ?padding w =
-    Box.set_child_packing obj (as_widget w) ?from:f ?expand ?fill ?padding
-  method reorder_child w = Box.reorder_child obj (as_widget w)
-end
-
-class box obj = object
-  inherit box_skel obj
-  method connect = new container_signals obj
-end
-  
-let box dir ?homogeneous ?spacing ?border_width ?width ?height
-    ?packing ?show () =
-  let w = Box.create dir ?homogeneous ?spacing () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new box w) ~packing ~show
-
-let vbox = box `VERTICAL
-let hbox = box `HORIZONTAL
-
-class button_box obj = object
-  inherit box_skel (obj : Gtk.button_box obj)
-  method connect = new container_signals obj
-  method set_layout  = BBox.set_layout  obj
-  method set_spacing = BBox.set_spacing obj
-  method set_child_size = BBox.set_child_size obj
-  method set_child_ipadding = BBox.set_child_ipadding obj
-end
-
-let button_box dir ?spacing ?child_width ?child_height ?child_ipadx
-    ?child_ipady ?layout ?border_width ?width ?height ?packing ?show ()=
-  let w = BBox.create dir in
-  BBox.set w ?spacing ?child_width ?child_height ?child_ipadx
-    ?child_ipady ?layout;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new button_box w) ~packing ~show
-
-class table obj = object
-  inherit container_full (obj : Gtk.table obj)
-  method attach ~left ~top ?right ?bottom ?expand ?fill ?shrink
-      ?xpadding ?ypadding w =
-    Table.attach obj (as_widget w) ~left ~top ?right ?bottom ?expand
-      ?fill ?shrink ?xpadding ?ypadding
-  method set_row_spacing = Table.set_row_spacing obj
-  method set_col_spacing = Table.set_col_spacing obj
-  method set_row_spacings = Table.set_row_spacings obj
-  method set_col_spacings = Table.set_col_spacings obj
-  method set_homogeneous = Table.set_homogeneous obj
-end
-
-let table ~rows ~columns ?homogeneous ?row_spacings ?col_spacings
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Table.create ~rows ~columns ?homogeneous () in
-  Table.set w ?row_spacings ?col_spacings;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new table w) ~packing ~show
-
-class fixed obj = object
-  inherit container_full (obj : Gtk.fixed obj)
-  method event = new GObj.event_ops obj
-  method put w = Fixed.put obj (as_widget w)
-  method move w = Fixed.move obj (as_widget w)
-end
-
-let fixed ?border_width ?width ?height ?packing ?show () =
-  let w = Fixed.create () in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new fixed w) ~packing ~show
-
-class layout obj = object
-  inherit container_full (obj : Gtk.layout obj)
-  method event = new GObj.event_ops obj
-  method put w = Layout.put obj (as_widget w)
-  method move w = Layout.move obj (as_widget w)
-  method set_hadjustment adj =
-    Layout.set_hadjustment obj (GData.as_adjustment adj)
-  method set_vadjustment adj =
-    Layout.set_vadjustment obj (GData.as_adjustment adj)
-  method set_width width = Layout.set_size obj ~width
-  method set_height height = Layout.set_size obj ~height
-  method hadjustment = new GData.adjustment (Layout.get_hadjustment obj)
-  method vadjustment = new GData.adjustment (Layout.get_vadjustment obj)
-  method freeze () = Layout.freeze obj
-  method thaw () = Layout.thaw obj
-  method width = Layout.get_width obj
-  method height = Layout.get_height obj
-end
-
-let layout ?hadjustment ?vadjustment ?layout_width ?layout_height
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Layout.create
-      (Gpointer.optboxed (may_map ~f:GData.as_adjustment hadjustment))
-      (Gpointer.optboxed (may_map ~f:GData.as_adjustment vadjustment)) in
-  if layout_width <> None || layout_height <> None then
-    Layout.set_size w ?width:layout_width ?height:layout_height;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new layout w) ~packing ~show
-
-
-class packer obj = object
-  inherit container_full (obj : Gtk.packer obj)
-  method pack ?side ?anchor ?expand ?fill
-      ?border_width ?pad_x ?pad_y ?i_pad_x ?i_pad_y w =
-    let options = Packer.build_options ?expand ?fill () in
-    if border_width == None && pad_x == None && pad_y == None &&
-      i_pad_x == None && i_pad_y == None
-      then Packer.add_defaults obj (as_widget w) ?side ?anchor ~options
-      else Packer.add obj (as_widget w) ?side ?anchor ~options
-         ?border_width ?pad_x ?pad_y ?i_pad_x ?i_pad_y
-  method set_child_packing ?side ?anchor ?expand ?fill
-      ?border_width ?pad_x ?pad_y ?i_pad_x ?i_pad_y w =
-    Packer.set_child_packing obj (as_widget w) ?side ?anchor
-      ~options:(Packer.build_options ?expand ?fill ())
-      ?border_width ?pad_x ?pad_y ?i_pad_x ?i_pad_y
-  method reorder_child w = Packer.reorder_child obj (as_widget w)
-  method set_spacing = Packer.set_spacing obj
-  method set_defaults = Packer.set_defaults obj
-end
-
-let packer ?spacing ?border_width ?width ?height ?packing ?show () =
-  let w = Packer.create () in
-  may spacing ~f:(Packer.set_spacing w);
-  Container.set w ?border_width ?width ?height;
-  pack_return (new packer w) ~packing ~show
-
-class paned obj = object
-  inherit container_full (obj : Gtk.paned obj)
-  method event = new GObj.event_ops obj
-  method add w =
-    if List.length (Container.children obj) = 2 then
-      raise(Error "Gpack.paned#add: already full");
-    Container.add obj (as_widget w)
-  method add1 w =
-    try ignore(Paned.child1 obj); raise(Error "GPack.paned#add1: already full")
-    with _ -> Paned.add1 obj (as_widget w)
-  method add2 w =
-    try ignore(Paned.child2 obj); raise(Error "GPack.paned#add2: already full")
-    with _ -> Paned.add2 obj (as_widget w)
-  method set_handle_size = Paned.set_handle_size obj
-  method set_gutter_size = Paned.set_gutter_size obj
-  method child1 = new widget (Paned.child1 obj)
-  method child2 = new widget (Paned.child2 obj)
-  method handle_size = Paned.handle_size obj
-  method gutter_size = Paned.gutter_size obj
-end
-
-let paned dir ?handle_size ?gutter_size
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Paned.create dir in
-  Paned.set w ?handle_size ?gutter_size;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new paned w) ~packing ~show
-
-class notebook_signals obj = object
-  inherit GContainer.container_signals obj
-  method switch_page =
-    GtkSignal.connect obj ~sgn:Notebook.Signals.switch_page ~after
-end
-
-class notebook obj = object (self)
-  inherit GContainer.container obj
-  method event = new GObj.event_ops obj
-  method connect = new notebook_signals obj
-  method insert_page ?tab_label ?menu_label ~pos child =
-      Notebook.insert_page obj (as_widget child) ~pos
-       ~tab_label:(Gpointer.may_box tab_label ~f:as_widget)
-       ~menu_label:(Gpointer.may_box menu_label ~f:as_widget)
-  method append_page = self#insert_page ~pos:(-1)
-  method prepend_page = self#insert_page ~pos:0
-  method remove_page = Notebook.remove_page obj
-  method current_page = Notebook.get_current_page obj
-  method goto_page = Notebook.set_page obj
-  method previous_page () = Notebook.prev_page obj
-  method next_page () = Notebook.next_page obj
-  method set_tab_pos = Notebook.set_tab_pos obj
-  method set_show_tabs = Notebook.set_show_tabs obj
-  method set_homogeneous_tabs = Notebook.set_homogeneous_tabs obj
-  method set_show_border = Notebook.set_show_border obj
-  method set_scrollable = Notebook.set_scrollable obj
-  method set_tab_border = Notebook.set_tab_border obj
-  method set_popup = Notebook.set_popup obj
-  method page_num w = Notebook.page_num obj (as_widget w)
-  method get_nth_page n = new widget (Notebook.get_nth_page obj n)
-  method get_tab_label w =
-    new widget (Notebook.get_tab_label obj (as_widget w))
-  method get_menu_label w =
-    new widget (Notebook.get_tab_label obj (as_widget w))
-  method set_page ?tab_label ?menu_label page =
-    let child = as_widget page in
-    may tab_label
-      ~f:(fun lbl -> Notebook.set_tab_label obj child (as_widget lbl));
-    may menu_label
-      ~f:(fun lbl -> Notebook.set_menu_label obj child (as_widget lbl))
-end
-
-let notebook ?tab_pos ?tab_border ?show_tabs ?homogeneous_tabs
-    ?show_border ?scrollable ?popup
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Notebook.create () in
-  Notebook.set w ?tab_pos ?tab_border ?show_tabs
-    ?homogeneous_tabs ?show_border ?scrollable ?popup;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new notebook w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gPack.mli
deleted file mode 100644 (file)
index 994c8b8..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class box_skel :
-  'a obj ->
-  object
-    inherit container
-    constraint 'a = [>`box|`container|`widget]
-    val obj : 'a obj
-    method pack :
-      ?from:Tags.pack_type ->
-      ?expand:bool -> ?fill:bool -> ?padding:int -> widget -> unit
-    method reorder_child : widget -> pos:int -> unit
-    method set_child_packing :
-      ?from:Tags.pack_type ->
-      ?expand:bool -> ?fill:bool -> ?padding:int -> widget -> unit
-    method set_homogeneous : bool -> unit
-    method set_spacing : int -> unit
-  end
-class box :
-  'a obj ->
-  object
-    inherit box_skel
-    constraint 'a = [>`box|`container|`widget]
-    val obj : 'a obj
-    method connect : GContainer.container_signals
-  end
-
-val box :
-  Tags.orientation ->
-  ?homogeneous:bool ->
-  ?spacing:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> box
-val vbox :
-  ?homogeneous:bool ->
-  ?spacing:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> box
-val hbox :
-  ?homogeneous:bool ->
-  ?spacing:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> box
-
-class button_box :
-  Gtk.button_box obj ->
-  object
-    inherit container_full
-    val obj : Gtk.button_box obj
-    method pack :
-      ?from:Tags.pack_type ->
-      ?expand:bool -> ?fill:bool -> ?padding:int -> widget -> unit
-    method reorder_child : widget -> pos:int -> unit
-    method set_child_ipadding : ?x:int -> ?y:int -> unit -> unit
-    method set_child_packing :
-      ?from:Tags.pack_type ->
-      ?expand:bool -> ?fill:bool -> ?padding:int -> widget -> unit
-    method set_child_size : ?width:int -> ?height:int -> unit -> unit
-    method set_homogeneous : bool -> unit
-    method set_layout : GtkPack.BBox.bbox_style -> unit
-    method set_spacing : int -> unit
-  end
-val button_box :
-  Tags.orientation ->
-  ?spacing:int ->
-  ?child_width:int ->
-  ?child_height:int ->
-  ?child_ipadx:int ->
-  ?child_ipady:int ->
-  ?layout:GtkPack.BBox.bbox_style ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> button_box
-
-class table :
-  Gtk.table obj ->
-  object
-    inherit container_full
-    val obj : Gtk.table obj
-    method attach :
-      left:int ->
-      top:int ->
-      ?right:int ->
-      ?bottom:int ->
-      ?expand:Tags.expand_type ->
-      ?fill:Tags.expand_type ->
-      ?shrink:Tags.expand_type ->
-      ?xpadding:int -> ?ypadding:int -> widget -> unit
-    method set_col_spacing : int -> int -> unit
-    method set_col_spacings : int -> unit
-    method set_homogeneous : bool -> unit
-    method set_row_spacing : int -> int -> unit
-    method set_row_spacings : int -> unit
-  end
-val table :
-  rows:int ->
-  columns:int ->
-  ?homogeneous:bool ->
-  ?row_spacings:int ->
-  ?col_spacings:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> table
-
-class fixed :
-  Gtk.fixed obj ->
-  object
-    inherit container_full
-    val obj : Gtk.fixed obj
-    method event : event_ops
-    method move : widget -> x:int -> y:int -> unit
-    method put : widget -> x:int -> y:int -> unit
-  end
-val fixed :
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> fixed
-
-class layout :
-  Gtk.layout obj ->
-  object
-    inherit container_full
-    val obj : Gtk.layout obj
-    method event : event_ops
-    method freeze : unit -> unit
-    method hadjustment : GData.adjustment
-    method height : int
-    method move : widget -> x:int -> y:int -> unit
-    method put : widget -> x:int -> y:int -> unit
-    method set_hadjustment : GData.adjustment -> unit
-    method set_height : int -> unit
-    method set_vadjustment : GData.adjustment -> unit
-    method set_width : int -> unit
-    method thaw : unit -> unit
-    method vadjustment : GData.adjustment
-    method width : int
-  end
-val layout :
-  ?hadjustment:GData.adjustment ->
-  ?vadjustment:GData.adjustment ->
-  ?layout_width:int ->
-  ?layout_height:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> layout
-
-class notebook_signals : 'a obj ->
-  object
-    inherit container_signals
-    constraint 'a = [>`notebook|`container|`widget]
-    val obj : 'a obj
-    method switch_page : callback:(int -> unit) -> GtkSignal.id
-  end
-
-class notebook : ([> `widget | `container | `notebook] as 'a) obj ->
-  object
-    inherit container
-    val obj : 'a obj
-    method event : event_ops
-    method append_page :
-      ?tab_label:widget -> ?menu_label:widget -> widget -> unit
-    method connect : notebook_signals
-    method current_page : int
-    method get_menu_label : widget -> widget
-    method get_nth_page : int -> widget
-    method get_tab_label : widget -> widget
-    method goto_page : int -> unit
-    method insert_page :
-      ?tab_label:widget -> ?menu_label:widget -> pos:int -> widget -> unit
-    method next_page : unit -> unit
-    method page_num : widget -> int
-    method prepend_page :
-      ?tab_label:widget -> ?menu_label:widget -> widget -> unit
-    method previous_page : unit -> unit
-    method remove_page : int -> unit
-    method set_homogeneous_tabs : bool -> unit
-    method set_page :
-      ?tab_label:widget -> ?menu_label:widget -> widget -> unit
-    method set_popup : bool -> unit
-    method set_scrollable : bool -> unit
-    method set_show_border : bool -> unit
-    method set_show_tabs : bool -> unit
-    method set_tab_border : int -> unit
-    method set_tab_pos : Tags.position -> unit
-  end
-val notebook :
-  ?tab_pos:Tags.position ->
-  ?tab_border:int ->
-  ?show_tabs:bool ->
-  ?homogeneous_tabs:bool ->
-  ?show_border:bool ->
-  ?scrollable:bool ->
-  ?popup:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> notebook
-
-class packer :
-  Gtk.packer obj ->
-  object
-    inherit container_full
-    val obj : Gtk.packer obj
-    method pack :
-      ?side:Tags.side_type ->
-      ?anchor:Tags.anchor_type ->
-      ?expand:bool ->
-      ?fill:Tags.expand_type ->
-      ?border_width:int ->
-      ?pad_x:int ->
-      ?pad_y:int -> ?i_pad_x:int -> ?i_pad_y:int -> widget -> unit
-    method reorder_child : widget -> pos:int -> unit
-    method set_child_packing :
-      ?side:Tags.side_type ->
-      ?anchor:Tags.anchor_type ->
-      ?expand:bool ->
-      ?fill:Tags.expand_type ->
-      ?border_width:int ->
-      ?pad_x:int ->
-      ?pad_y:int -> ?i_pad_x:int -> ?i_pad_y:int -> widget -> unit
-    method set_defaults :
-      ?border_width:int ->
-      ?pad_x:int ->
-      ?pad_y:int -> ?i_pad_x:int -> ?i_pad_y:int -> unit -> unit
-    method set_spacing : int -> unit
-  end
-val packer :
-  ?spacing:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> packer
-
-class paned :
-  Gtk.paned obj ->
-  object
-    inherit container_full
-    val obj : Gtk.paned obj
-    method add1 : widget -> unit
-    method add2 : widget -> unit
-    method event : event_ops
-    method child1 : widget
-    method child2 : widget
-    method gutter_size : int
-    method handle_size : int
-    method set_gutter_size : int -> unit
-    method set_handle_size : int -> unit
-  end
-val paned :
-  Tags.orientation ->
-  ?handle_size:int ->
-  ?gutter_size:int ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> paned
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.ml
deleted file mode 100644 (file)
index 7df53ce..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkRange
-open GObj
-
-class progress obj = object
-  inherit widget_full obj
-  method set_adjustment adj =
-    Progress.set_adjustment obj (GData.as_adjustment adj)
-  method set_show_text = Progress.set_show_text obj
-  method set_format_string = Progress.set_format_string obj
-  method set_text_alignment = Progress.set_text_alignment obj
-  method set_activity_mode = Progress.set_activity_mode obj
-  method set_value = Progress.set_value obj
-  method set_percentage = Progress.set_percentage obj
-  method configure = Progress.configure obj
-  method value = Progress.get_value obj
-  method percentage = Progress.get_percentage obj
-  method current_text = Progress.get_current_text obj
-  method adjustment = new GData.adjustment (Progress.get_adjustment obj)
-end
-
-class progress_bar obj = object
-  inherit progress (obj : Gtk.progress_bar obj)
-  method event = new GObj.event_ops obj
-  method set_bar_style = ProgressBar.set_bar_style obj
-  method set_discrete_blocks = ProgressBar.set_discrete_blocks obj
-  method set_activity_step = ProgressBar.set_activity_step obj
-  method set_activity_blocks = ProgressBar.set_activity_blocks obj
-  method set_orientation = ProgressBar.set_orientation obj
-end
-
-let progress_bar ?adjustment ?bar_style ?discrete_blocks
-    ?activity_step ?activity_blocks ?value ?percentage ?activity_mode
-    ?show_text ?format_string ?text_xalign ?text_yalign
-    ?packing ?show () =
-  let w =
-    match adjustment with None -> ProgressBar.create ()
-    | Some adj ->
-       ProgressBar.create_with_adjustment (GData.as_adjustment adj)
-  in
-  ProgressBar.set w ?bar_style ?discrete_blocks
-    ?activity_step ?activity_blocks;
-  Progress.set w ?value ?percentage ?activity_mode
-    ?show_text ?format_string ?text_xalign ?text_yalign;
-  pack_return (new progress_bar w) ~packing ~show
-
-class range obj = object
-  inherit widget_full obj
-  method adjustment = new GData.adjustment (Range.get_adjustment obj)
-  method set_adjustment adj =
-    Range.set_adjustment obj (GData.as_adjustment adj)
-  method set_update_policy = Range.set_update_policy obj
-end
-
-class scale obj = object
-  inherit range (obj : Gtk.scale obj)
-  method set_digits = Scale.set_digits obj
-  method set_draw_value = Scale.set_draw_value obj
-  method set_value_pos = Scale.set_value_pos obj
-end
-
-let scale dir ?adjustment ?digits ?draw_value ?value_pos
-    ?packing ?show () =
-  let w =
-    Scale.create dir ?adjustment:(may_map ~f:GData.as_adjustment adjustment)
-  in
-  let () = Scale.set w ?digits ?draw_value ?value_pos in
-  pack_return (new scale w) ~packing ~show
-
-class scrollbar obj = object
-  inherit range (obj : Gtk.scrollbar obj)
-  method event = new GObj.event_ops obj
-end
-
-let scrollbar dir ?adjustment ?update_policy ?packing ?show () =
-  let w = Scrollbar.create dir
-      ?adjustment:(may_map ~f:GData.as_adjustment adjustment) in
-  let () = may update_policy ~f:(Range.set_update_policy w) in
-  pack_return (new scrollbar w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gRange.mli
deleted file mode 100644 (file)
index ac9b38c..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-
-class progress : 'a obj ->
-  object
-    inherit widget_full
-    constraint 'a = [>`progress|`widget]
-    val obj : 'a obj
-    method adjustment : GData.adjustment
-    method configure : current:float -> min:float -> max:float -> unit
-    method current_text : string
-    method percentage : float
-    method set_activity_mode : bool -> unit
-    method set_adjustment : GData.adjustment -> unit
-    method set_format_string : string -> unit
-    method set_percentage : float -> unit
-    method set_show_text : bool -> unit
-    method set_text_alignment : ?x:float -> ?y:float -> unit -> unit
-    method set_value : float -> unit
-    method value : float
-  end
-
-class progress_bar : Gtk.progress_bar obj ->
-  object
-    inherit progress
-    val obj : Gtk.progress_bar obj
-    method event : event_ops
-    method set_activity_blocks : int -> unit
-    method set_activity_step : int -> unit
-    method set_bar_style : [`CONTINUOUS|`DISCRETE] -> unit
-    method set_discrete_blocks : int -> unit
-    method set_orientation : Tags.progress_bar_orientation -> unit
-  end
-val progress_bar :
-  ?adjustment:GData.adjustment ->
-  ?bar_style:[`CONTINUOUS|`DISCRETE] ->
-  ?discrete_blocks:int ->
-  ?activity_step:int ->
-  ?activity_blocks:int ->
-  ?value:float ->
-  ?percentage:float ->
-  ?activity_mode:bool ->
-  ?show_text:bool ->
-  ?format_string:string ->
-  ?text_xalign:float ->
-  ?text_yalign:float ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> progress_bar
-
-class range : 'a obj ->
-  object
-    inherit widget_full
-    constraint 'a = [>`range|`widget]
-    val obj : 'a obj
-    method adjustment : GData.adjustment
-    method set_adjustment : GData.adjustment -> unit
-    method set_update_policy : Tags.update_type -> unit
-  end
-
-class scale : Gtk.scale obj ->
-  object
-    inherit range
-    val obj : Gtk.scale obj
-    method set_digits : int -> unit
-    method set_draw_value : bool -> unit
-    method set_value_pos : Tags.position -> unit
-  end
-val scale :
-  Tags.orientation ->
-  ?adjustment:GData.adjustment ->
-  ?digits:int ->
-  ?draw_value:bool ->
-  ?value_pos:Tags.position ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> scale
-
-class scrollbar : Gtk.scrollbar obj ->
-  object
-    inherit range
-    val obj : Gtk.scrollbar obj
-    method event : event_ops
-  end
-val scrollbar :
-  Tags.orientation ->
-  ?adjustment:GData.adjustment ->
-  ?update_policy:Tags.update_type ->
-  ?packing:(widget -> unit) -> ?show:bool -> unit -> scrollbar
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.ml
deleted file mode 100644 (file)
index 80dab7b..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkTree
-open GObj
-open GContainer
-
-class tree_item_signals obj = object
-  inherit item_signals obj
-  method expand = GtkSignal.connect obj ~sgn:TreeItem.Signals.expand ~after
-  method collapse = GtkSignal.connect obj ~sgn:TreeItem.Signals.collapse ~after
-end
-
-class tree_item obj = object
-  inherit container obj
-  method event = new GObj.event_ops obj
-  method as_item : Gtk.tree_item obj = obj
-  method connect = new tree_item_signals obj
-  method set_subtree (w : tree) = TreeItem.set_subtree obj w#as_tree
-  method remove_subtree () = TreeItem.remove_subtree obj
-  method expand () = TreeItem.expand obj
-  method collapse () = TreeItem.collapse obj
-  method subtree =
-    try Some(new tree (TreeItem.subtree obj)) with Gpointer.Null -> None
-end
-
-and tree_signals obj = object
-  inherit container_signals obj
-  method selection_changed =
-    GtkSignal.connect obj ~sgn:Tree.Signals.selection_changed ~after
-  method select_child ~callback =
-    GtkSignal.connect obj ~sgn:Tree.Signals.select_child ~after
-      ~callback:(fun w -> callback (new tree_item (TreeItem.cast w))) 
-  method unselect_child ~callback =
-    GtkSignal.connect obj ~sgn:Tree.Signals.unselect_child ~after
-      ~callback:(fun w -> callback (new tree_item (TreeItem.cast w))) 
-end
-
-and tree obj = object (self)
-  inherit [tree_item] item_container obj
-  method event = new GObj.event_ops obj
-  method as_tree = Tree.coerce obj
-  method insert w ~pos = Tree.insert obj w#as_item ~pos
-  method connect = new tree_signals obj
-  method clear_items = Tree.clear_items obj
-  method select_item = Tree.select_item obj
-  method unselect_item = Tree.unselect_item obj
-  method child_position (w : tree_item) = Tree.child_position obj w#as_item
-  method remove_items items =
-    Tree.remove_items obj
-      (List.map ~f:(fun (t : tree_item) -> t#as_item) items)
-  method set_selection_mode = Tree.set_selection_mode obj
-  method set_view_mode = Tree.set_view_mode obj
-  method set_view_lines = Tree.set_view_lines obj
-  method selection =
-    List.map ~f:(fun w -> self#wrap (Widget.coerce w)) (Tree.selection obj)
-  method private wrap w =
-    new tree_item (TreeItem.cast w)
-end
-
-let tree_item ?label ?border_width ?width ?height ?packing ?show () =
-  let w = TreeItem.create ?label () in
-  Container.set w ?border_width ?width ?height;
-  let self = new tree_item w in
-  may packing ~f:(fun f -> (f self : unit));
-  if show <> Some false then self#misc#show ();
-  self
-
-let tree ?selection_mode ?view_mode ?view_lines
-    ?border_width ?width ?height ?packing ?show () =
-  let w = Tree.create () in
-  Tree.set w ?selection_mode ?view_mode ?view_lines;
-  Container.set w ?border_width ?width ?height;
-  pack_return (new tree w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gTree.mli
deleted file mode 100644 (file)
index d48e09b..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-open GContainer
-
-class tree_item_signals : 'a obj ->
-  object
-    inherit item_signals
-    constraint 'a = [>`treeitem|`container|`item|`widget]
-    val obj : 'a obj
-    method collapse : callback:(unit -> unit) -> GtkSignal.id
-    method expand : callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class tree_item : Gtk.tree_item obj ->
-  object
-    inherit GContainer.container
-    val obj : Gtk.tree_item obj
-    method event : event_ops
-    method as_item : Gtk.tree_item obj
-    method collapse : unit -> unit
-    method connect : tree_item_signals
-    method expand : unit -> unit
-    method remove_subtree : unit -> unit
-    method set_subtree : tree -> unit
-    method subtree : tree option
-  end
-
-and tree_signals : Gtk.tree obj ->
-  object
-    inherit container_signals
-    val obj : Gtk.tree obj
-    method select_child : callback:(tree_item -> unit) -> GtkSignal.id
-    method selection_changed : callback:(unit -> unit) -> GtkSignal.id
-    method unselect_child : callback:(tree_item -> unit) -> GtkSignal.id
-  end
-
-and tree : Gtk.tree obj ->
-  object
-    inherit [tree_item] item_container
-    val obj : Gtk.tree obj
-    method event : event_ops
-    method as_tree : Gtk.tree obj
-    method child_position : tree_item -> int
-    method clear_items : start:int -> stop:int -> unit
-    method connect : tree_signals
-    method insert : tree_item -> pos:int -> unit
-    method remove_items : tree_item list -> unit
-    method select_item : pos:int -> unit
-    method selection : tree_item list
-    method set_selection_mode : Tags.selection_mode -> unit
-    method set_view_lines : bool -> unit
-    method set_view_mode : [`LINE|`ITEM] -> unit
-    method unselect_item : pos:int -> unit
-    method private wrap : Gtk.widget obj -> tree_item
-  end
-
-val tree_item :
-  ?label:string ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(tree_item -> unit) -> ?show:bool -> unit -> tree_item
-
-val tree :
-  ?selection_mode:Tags.selection_mode ->
-  ?view_mode:[`LINE|`ITEM] ->
-  ?view_lines:bool ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int -> ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> tree
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.ml
deleted file mode 100644 (file)
index 260c2ac..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-(* $Id$ *)
-
-open GObj
-
-class ['a] memo () = object
-  constraint 'a = #widget
-  val tbl = Hashtbl.create 7
-  method add (obj : 'a) =
-    Hashtbl.add tbl ~key:obj#get_id ~data:obj
-  method find (obj : widget) = Hashtbl.find tbl obj#get_id
-  method remove (obj : widget) = Hashtbl.remove tbl obj#get_id
-end
-
-let signal_id = ref 0
-
-let next_callback_id () : GtkSignal.id =
-  decr signal_id; Obj.magic (!signal_id : int)
-
-class ['a] signal () = object (self)
-  val mutable callbacks : (GtkSignal.id * ('a -> unit)) list = []
-  method callbacks = callbacks
-  method connect ~after ~callback =
-    let id = next_callback_id () in
-    callbacks <-
-      if after then callbacks @ [id,callback] else (id,callback)::callbacks;
-    id
-  method call arg =
-    List.exists callbacks ~f:
-      begin fun (_,f) ->
-        let old = GtkSignal.push_callback () in
-        try f arg; GtkSignal.pop_callback old
-        with exn -> GtkSignal.pop_callback old; raise exn
-      end;
-    ()
-  method disconnect key =
-    List.mem_assoc key callbacks &&
-    (callbacks <- List.remove_assoc key callbacks; true)
-end
-
-class virtual ml_signals disconnectors =
-  object (self)
-    val after = false
-    method after = {< after = true >}
-    val mutable disconnectors : (GtkSignal.id -> bool) list = disconnectors
-    method disconnect key =
-      ignore (List.exists disconnectors ~f:(fun f -> f key))
-  end
-
-class virtual add_ml_signals obj disconnectors =
-  object (self)
-    val mutable disconnectors : (GtkSignal.id -> bool) list = disconnectors
-    method disconnect key =
-      if List.exists disconnectors ~f:(fun f -> f key) then ()
-      else GtkSignal.disconnect obj key
-  end
-
-class ['a] variable_signals ~(set : 'a signal) ~(changed : 'a signal) =
-  object
-    inherit ml_signals [changed#disconnect; set#disconnect]
-    method changed = changed#connect ~after
-    method set = set#connect ~after
-  end
-
-class ['a] variable x =
-  object (self)
-    val changed = new signal ()
-    val set = new signal ()
-    method connect = new variable_signals ~set ~changed
-    val mutable x : 'a = x
-    method get = x
-    method set = set#call
-    method private equal : 'a -> 'a -> bool = (=)
-    method private real_set y =
-      let x0 = x in x <- y;
-      if changed#callbacks <> [] && not (self#equal x x0)
-      then changed#call y
-    initializer
-      ignore (set#connect ~after:false ~callback:self#real_set)
-  end
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gUtil.mli
deleted file mode 100644 (file)
index cd88d86..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-(* $Id$ *)
-
-open GObj
-
-(* The memo class provides an easy way to remember the real class of
-   a widget.
-   Insert all widgets of class in one single t memo, and you can then
-   recover their original ML object with #find.
-*)
-
-class ['a] memo : unit ->
-  object
-    constraint 'a = #widget
-    val tbl : (int, 'a) Hashtbl.t
-    method add : 'a -> unit
-    method find : widget -> 'a
-    method remove : widget -> unit
-  end
-
-(* The ML signal mechanism allows one to add GTK-like signals to
-   arbitrary objects.
-*)
-
-val next_callback_id : unit -> GtkSignal.id
-
-class ['a] signal :
-  unit ->
-  object
-    val mutable callbacks : (GtkSignal.id * ('a -> unit)) list
-    method callbacks : (GtkSignal.id * ('a -> unit)) list
-    method call : 'a -> unit
-    method connect : after:bool -> callback:('a -> unit) -> GtkSignal.id
-    method disconnect : GtkSignal.id -> bool
-  end
-(* As with GTK signals, you can use [GtkSignal.stop_emit] inside a
-   callback to prevent other callbacks from being called. *)
-
-class virtual ml_signals : (GtkSignal.id -> bool) list ->
-  object ('a)
-    val after : bool
-    method after : 'a
-    method disconnect : GtkSignal.id -> unit
-    val mutable disconnectors : (GtkSignal.id -> bool) list
-  end
-class virtual add_ml_signals :
-  'a Gtk.obj -> (GtkSignal.id -> bool) list ->
-  object
-    method disconnect : GtkSignal.id -> unit
-    val mutable disconnectors : (GtkSignal.id -> bool) list
-  end
-
-(* To add ML signals to a LablGTK object:
-
-   class mywidget_signals obj ~mysignal1 ~mysignal2 = object
-     inherit somewidget_signals obj
-     inherit add_ml_signals obj [mysignal1#disconnect; mysignal2#disconnect]
-     method mysignal1 = mysignal1#connect ~after
-     method mysignal2 = mysignal2#connect ~after
-   end
-
-   class mywidget obj = object (self)
-     inherit somewidget obj
-     val mysignal1 = new signal obj
-     val mysignal2 = new signal obj
-     method connect = new mywidget_signals obj ~mysignal1 ~mysignal2
-     method call1 = mysignal1#call
-     method call2 = mysignal2#call
-   end
-
-   You can also add ML signals to an arbitrary object; just inherit
-   from [ml_signals] in place of [widget_signals]+[add_ml_signals].
-
-   class mysignals ~mysignal1 ~mysignal2 = object
-     inherit ml_signals [mysignal1#disconnect; mysignal2#disconnect]
-     method mysignal1 = mysignal1#connect ~after
-     method mysignal2 = mysignal2#connect ~after
-   end
-*)
-
-(* The variable class provides an easy way to propagate state modifications.
-   A new variable is created by [new variable init]. The [#set] method just
-   calls the [set] signal, which by default only calls [real_set].
-   [real_set] sets the variable and calls [changed] when needed.
-   Deep equality is used to compare values, but check is only done if
-   there are callbacks for [changed].
-*)
-
-class ['a] variable_signals :
-  set:'a signal -> changed:'a signal ->
-  object ('b)
-    val after : bool
-    method after : 'b
-    method set : callback:('a -> unit) -> GtkSignal.id
-    method changed : callback:('a -> unit) -> GtkSignal.id
-    method disconnect : GtkSignal.id -> unit
-    val mutable disconnectors : (GtkSignal.id -> bool) list
-  end
-
-class ['a] variable : 'a ->
-  object
-    val set : 'a signal
-    val changed : 'a signal
-    val mutable x : 'a
-    method connect : 'a variable_signals
-    method get : 'a
-    method set : 'a -> unit
-    method private equal : 'a -> 'a -> bool
-    method private real_set : 'a -> unit
-  end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.ml
deleted file mode 100644 (file)
index 9ee3136..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-open GtkWindow
-open GtkMisc
-open GObj
-open GContainer
-
-class ['a] window_skel obj = object
-  constraint 'a = _ #window_skel
-  inherit container obj
-  method event = new GObj.event_ops obj
-  method as_window = Window.coerce obj
-  method activate_focus () = Window.activate_focus obj
-  method activate_default () = Window.activate_default obj
-  method add_accel_group = Window.add_accel_group obj
-  method set_modal = Window.set_modal obj
-  method set_default_size = Window.set_default_size obj
-  method set_position = Window.set_position obj
-  method set_resize_mode = Container.set_resize_mode obj
-  method set_transient_for (w : 'a) =
-    Window.set_transient_for obj w#as_window
-  method set_title = Window.set_title obj
-  method set_wm_name name = Window.set_wmclass obj ~name
-  method set_wm_class cls = Window.set_wmclass obj ~clas:cls
-  method set_allow_shrink allow_shrink = Window.set_policy obj ~allow_shrink
-  method set_allow_grow allow_grow = Window.set_policy obj ~allow_grow
-  method set_auto_shrink auto_shrink = Window.set_policy obj ~auto_shrink
-  method show () = Widget.show obj
-end
-
-class window obj = object
-  inherit [window] window_skel (Window.coerce obj)
-  method connect = new container_signals obj
-end
-
-let window ?kind:(t=`TOPLEVEL) ?title ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y
-    ?border_width ?width ?height ?(show=false) () =
-  let w = Window.create t in
-  Window.set w ?title ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y;
-  Container.set w ?border_width ?width ?height;
-  if show then Widget.show w;
-  new window w
-
-class dialog obj = object
-  inherit [window] window_skel (Dialog.coerce obj)
-  method connect = new container_signals obj
-  method action_area = new GPack.box (Dialog.action_area obj)
-  method vbox = new GPack.box (Dialog.vbox obj)
-end
-
-let dialog ?title ?wm_name ?wm_class ?position ?allow_shrink
-    ?allow_grow ?auto_shrink ?modal ?x ?y ?border_width ?width ?height
-    ?(show=false) () =
-  let w = Dialog.create () in
-  Window.set w ?title ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y;
-  Container.set w ?border_width ?width ?height;
-  if show then Widget.show w;
-  new dialog w
-
-class color_selection_dialog obj = object
-  inherit [window] window_skel (obj : Gtk.color_selection_dialog obj)
-  method connect = new container_signals obj
-  method ok_button =
-    new GButton.button (ColorSelection.ok_button obj)
-  method cancel_button =
-    new GButton.button (ColorSelection.cancel_button obj)
-  method help_button =
-    new GButton.button (ColorSelection.help_button obj)
-  method colorsel =
-    new GMisc.color_selection (ColorSelection.colorsel obj)
-end
-
-let color_selection_dialog ?(title="Pick a color")
-    ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y
-    ?border_width ?width ?height ?(show=false) () =
-  let w = ColorSelection.create_dialog title in
-  Window.set w ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y;
-  Container.set w ?border_width ?width ?height;
-  if show then Widget.show w;
-  new color_selection_dialog w
-
-class file_selection obj = object
-  inherit [window] window_skel (obj : Gtk.file_selection obj)
-  method connect = new container_signals obj
-  method set_filename = FileSelection.set_filename obj
-  method get_filename = FileSelection.get_filename obj
-  method set_fileop_buttons = FileSelection.set_fileop_buttons obj
-  method ok_button = new GButton.button (FileSelection.get_ok_button obj)
-  method cancel_button =
-    new GButton.button (FileSelection.get_cancel_button obj)
-  method help_button = new GButton.button (FileSelection.get_help_button obj)
-end
-
-let file_selection ?(title="Choose a file") ?filename
-    ?(fileop_buttons=false)
-    ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y
-    ?border_width ?width ?height ?(show=false) () =
-  let w = FileSelection.create title in
-  FileSelection.set w ?filename ~fileop_buttons;
-  Window.set w ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y;
-  Container.set w ?border_width ?width ?height;
-  if show then Widget.show w;
-  new file_selection w
-
-class font_selection_dialog obj = object
-  inherit [window] window_skel (obj : Gtk.font_selection_dialog obj)
-  method connect = new container_signals obj
-(*
-  method font = FontSelectionDialog.get_font obj
-  method font_name = FontSelectionDialog.get_font_name obj
-  method set_font_name = FontSelectionDialog.set_font_name obj
-  method preview_text = FontSelectionDialog.get_preview_text obj
-  method set_preview_text = FontSelectionDialog.set_preview_text obj
-  method set_filter = FontSelectionDialog.set_filter obj
-*)
-  method selection =
-    new GMisc.font_selection (FontSelectionDialog.font_selection obj)
-  method ok_button =  new GButton.button (FontSelectionDialog.ok_button obj)
-  method apply_button =
-    new GButton.button (FontSelectionDialog.apply_button obj)
-  method cancel_button =
-    new GButton.button (FontSelectionDialog.cancel_button obj)
-end
-
-let font_selection_dialog ?title ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y
-    ?border_width ?width ?height ?(show=false) () =
-  let w = FontSelectionDialog.create ?title () in
-  Window.set w ?wm_name ?wm_class ?position
-    ?allow_shrink ?allow_grow ?auto_shrink ?modal ?x ?y;
-  Container.set w ?border_width ?width ?height;
-  if show then Widget.show w;
-  new font_selection_dialog w
-
-class plug (obj : Gtk.plug obj) = window obj
-
-let plug ~window:xid ?border_width ?width ?height ?(show=false) () =
-  let w = Plug.create xid in
-  Container.set w ?border_width ?width ?height;
-  if show then Widget.show w;
-  new plug w
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gWindow.mli
deleted file mode 100644 (file)
index 4c89a76..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-
-class ['a] window_skel : 'b obj ->
-  object
-    inherit GContainer.container
-    constraint 'a = 'a #window_skel
-    constraint 'b = [>`widget|`container|`window]
-    val obj : 'b obj
-    method activate_default : unit -> unit
-    method activate_focus : unit -> unit
-    method add_accel_group : accel_group -> unit
-    method event : event_ops
-    method as_window : Gtk.window obj
-    method set_allow_grow : bool -> unit
-    method set_allow_shrink : bool -> unit
-    method set_auto_shrink : bool -> unit
-    method set_default_size : width:int -> height:int -> unit
-    method set_modal : bool -> unit
-    method set_position : Tags.window_position -> unit
-    method set_resize_mode : Tags.resize_mode -> unit
-    method set_title : string -> unit
-    method set_transient_for : 'a -> unit
-    method set_wm_class : string -> unit
-    method set_wm_name : string -> unit
-    method show : unit -> unit
-  end
-
-class window : [>`window] obj ->
-  object
-    inherit [window] window_skel
-    val obj : Gtk.window obj
-    method connect : GContainer.container_signals
-  end
-val window :
-  ?kind:Tags.window_type ->
-  ?title:string ->
-  ?wm_name:string ->
-  ?wm_class:string ->
-  ?position:Tags.window_position ->
-  ?allow_shrink:bool ->
-  ?allow_grow:bool ->
-  ?auto_shrink:bool ->
-  ?modal:bool ->
-  ?x:int ->
-  ?y:int ->
-  ?border_width:int ->
-  ?width:int -> ?height:int -> ?show:bool -> unit -> window
-
-class dialog : [>`dialog] obj ->
-  object
-    inherit [window] window_skel
-    val obj : Gtk.dialog obj
-    method action_area : GPack.box
-    method connect : GContainer.container_signals
-    method event : event_ops
-    method vbox : GPack.box
-  end
-val dialog :
-  ?title:string ->
-  ?wm_name:string ->
-  ?wm_class:string ->
-  ?position:Tags.window_position ->
-  ?allow_shrink:bool ->
-  ?allow_grow:bool ->
-  ?auto_shrink:bool ->
-  ?modal:bool ->
-  ?x:int ->
-  ?y:int ->
-  ?border_width:int ->
-  ?width:int -> ?height:int -> ?show:bool -> unit -> dialog
-
-class color_selection_dialog : Gtk.color_selection_dialog obj ->
-  object
-    inherit [window] window_skel
-    val obj : Gtk.color_selection_dialog obj
-    method cancel_button : GButton.button
-    method colorsel : GMisc.color_selection
-    method connect : GContainer.container_signals
-    method help_button : GButton.button
-    method ok_button : GButton.button
-  end
-val color_selection_dialog :
-  ?title:string ->
-  ?wm_name:string ->
-  ?wm_class:string ->
-  ?position:Tags.window_position ->
-  ?allow_shrink:bool ->
-  ?allow_grow:bool ->
-  ?auto_shrink:bool ->
-  ?modal:bool ->
-  ?x:int ->
-  ?y:int ->
-  ?border_width:int ->
-  ?width:int -> ?height:int -> ?show:bool -> unit -> color_selection_dialog
-
-class file_selection : Gtk.file_selection obj ->
-  object
-    inherit [window] window_skel
-    val obj : Gtk.file_selection obj
-    method cancel_button : GButton.button
-    method connect : GContainer.container_signals
-    method get_filename : string
-    method help_button : GButton.button
-    method ok_button : GButton.button
-    method set_filename : string -> unit
-    method set_fileop_buttons : bool -> unit
-  end
-val file_selection :
-  ?title:string ->
-  ?filename:string ->
-  ?fileop_buttons:bool ->
-  ?wm_name:string ->
-  ?wm_class:string ->
-  ?position:Tags.window_position ->
-  ?allow_shrink:bool ->
-  ?allow_grow:bool ->
-  ?auto_shrink:bool ->
-  ?modal:bool ->
-  ?x:int ->
-  ?y:int ->
-  ?border_width:int ->
-  ?width:int -> ?height:int -> ?show:bool -> unit -> file_selection
-
-class font_selection_dialog : Gtk.font_selection_dialog obj ->
-  object
-    inherit [window] window_skel
-    val obj : Gtk.font_selection_dialog obj
-    method apply_button : GButton.button
-    method cancel_button : GButton.button
-    method connect : GContainer.container_signals
-    method selection : GMisc.font_selection
-    method ok_button : GButton.button
-  end
-val font_selection_dialog :
-  ?title:string ->
-  ?wm_name:string ->
-  ?wm_class:string ->
-  ?position:Tags.window_position ->
-  ?allow_shrink:bool ->
-  ?allow_grow:bool ->
-  ?auto_shrink:bool ->
-  ?modal:bool ->
-  ?x:int ->
-  ?y:int ->
-  ?border_width:int ->
-  ?width:int -> ?height:int -> ?show:bool -> unit -> font_selection_dialog
-
-class plug : Gtk.plug obj -> window
-
-val plug :
-  window:Gdk.xid ->
-  ?border_width:int ->
-  ?width:int -> ?height:int -> ?show:bool -> unit -> plug
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gaux.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gaux.ml
deleted file mode 100644 (file)
index a117291..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-(* $Id$ *)
-
-(* Option handling *)
-
-let may ~f x =
-  match x with None -> ()
-  | Some x -> let _ = f x in ()
-
-let may_map ~f x =
-  match x with None -> None
-  | Some x -> Some (f x)
-
-let default x ~opt =
-  match opt with None -> x | Some y -> y
-
-let may_default f x ~opt =
-  match opt with None -> f x | Some y -> y
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.ml
deleted file mode 100644 (file)
index c22c4b5..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-
-type colormap
-type visual
-type region
-type gc
-type 'a drawable
-type window = [`window] drawable
-type pixmap = [`pixmap] drawable
-type bitmap = [`bitmap] drawable
-type font
-type image
-type atom = int
-type keysym = int
-type 'a event
-type drag_context
-type cursor
-type xid = int32
-
-exception Error of string
-let _ = Callback.register_exception "gdkerror" (Error"")
-
-module Tags = struct
-  type event_type =
-    [ `NOTHING|`DELETE|`DESTROY|`EXPOSE|`MOTION_NOTIFY|`BUTTON_PRESS
-     |`TWO_BUTTON_PRESS|`THREE_BUTTON_PRESS
-     |`BUTTON_RELEASE|`KEY_PRESS
-     |`KEY_RELEASE|`ENTER_NOTIFY|`LEAVE_NOTIFY|`FOCUS_CHANGE
-     |`CONFIGURE|`MAP|`UNMAP|`PROPERTY_NOTIFY|`SELECTION_CLEAR
-     |`SELECTION_REQUEST|`SELECTION_NOTIFY|`PROXIMITY_IN
-     |`PROXIMITY_OUT|`DRAG_ENTER|`DRAG_LEAVE|`DRAG_MOTION|`DRAG_STATUS
-     |`DROP_START|`DROP_FINISHED|`CLIENT_EVENT|`VISIBILITY_NOTIFY
-     |`NO_EXPOSE ]
-
-  type event_mask =
-    [ `EXPOSURE
-     |`POINTER_MOTION|`POINTER_MOTION_HINT
-     |`BUTTON_MOTION|`BUTTON1_MOTION|`BUTTON2_MOTION|`BUTTON3_MOTION
-     |`BUTTON_PRESS|`BUTTON_RELEASE
-     |`KEY_PRESS|`KEY_RELEASE
-     |`ENTER_NOTIFY|`LEAVE_NOTIFY|`FOCUS_CHANGE
-     |`STRUCTURE|`PROPERTY_CHANGE|`VISIBILITY_NOTIFY
-     |`PROXIMITY_IN|`PROXIMITY_OUT|`SUBSTRUCTURE
-     |`ALL_EVENTS ]
-
-  type extension_events =
-    [ `NONE|`ALL|`CURSOR ]
-
-  type visibility_state =
-    [ `UNOBSCURED|`PARTIAL|`FULLY_OBSCURED ]
-
-  type input_source =
-    [ `MOUSE|`PEN|`ERASER|`CURSOR ]
-
-  type notify_type =
-    [ `ANCESTOR|`VIRTUAL|`INFERIOR|`NONLINEAR|`NONLINEAR_VIRTUAL|`UNKNOWN ] 
-
-  type crossing_mode =
-    [ `NORMAL|`GRAB|`UNGRAB ]
-
-  type modifier =
-    [ `SHIFT|`LOCK|`CONTROL|`MOD1|`MOD2|`MOD3|`MOD4|`MOD5|`BUTTON1
-     |`BUTTON2|`BUTTON3|`BUTTON4|`BUTTON5 ]
-
-  type drag_action =
-    [ `DEFAULT|`COPY|`MOVE|`LINK|`PRIVATE|`ASK ]
-
-end
-open Tags
-
-module Convert = struct
-  external test_modifier : modifier -> int -> bool
-      = "ml_test_GdkModifier_val"
-  let modifier i =
-    List.filter [`SHIFT;`LOCK;`CONTROL;`MOD1;`MOD2;`MOD3;`MOD4;`MOD5;
-                `BUTTON1;`BUTTON2;`BUTTON3;`BUTTON4;`BUTTON5]
-      ~f:(fun m -> test_modifier m i)
-end
-
-module Screen = struct
-  external width : unit -> int = "ml_gdk_screen_width"
-  external height : unit -> int = "ml_gdk_screen_height"
-end
-
-module Visual = struct
-  type visual_type =
-    [ `STATIC_GRAY|`GRAYSCALE|`STATIC_COLOR
-     |`PSEUDO_COLOR|`TRUE_COLOR|`DIRECT_COLOR ]
-
-  external get_best : ?depth:int -> ?kind:visual_type -> unit -> visual
-      = "ml_gdk_visual_get_best"
-  external get_type : visual -> visual_type = "ml_GdkVisual_type"
-  external depth : visual -> int = "ml_GdkVisual_depth"
-  external red_mask : visual -> int = "ml_GdkVisual_red_mask"
-  external red_shift : visual -> int = "ml_GdkVisual_red_shift"
-  external red_prec : visual -> int = "ml_GdkVisual_red_prec"
-  external green_mask : visual -> int = "ml_GdkVisual_green_mask"
-  external green_shift : visual -> int = "ml_GdkVisual_green_shift"
-  external green_prec : visual -> int = "ml_GdkVisual_green_prec"
-  external blue_mask : visual -> int = "ml_GdkVisual_blue_mask"
-  external blue_shift : visual -> int = "ml_GdkVisual_blue_shift"
-  external blue_prec : visual -> int = "ml_GdkVisual_blue_prec"
-end
-
-module Image = struct
-  type image_type =
-    [ `NORMAL|`SHARED|`FASTEST ] 
-
-  external create_bitmap : visual: visual -> data: string -> 
-    width: int -> height: int -> image 
-      = "ml_gdk_image_new_bitmap"
-  external create : kind: image_type -> visual: visual -> 
-    width: int -> height: int -> image
-      = "ml_gdk_image_new"
-  external get :
-      'a drawable -> x: int -> y: int -> width: int -> height: int -> image
-      = "ml_gdk_image_get"
-  external put_pixel : image -> x: int -> y: int -> pixel: int -> unit
-    = "ml_gdk_image_put_pixel"
-  external get_pixel : image -> x: int -> y: int -> int
-    = "ml_gdk_image_get_pixel"
-  external destroy : image -> unit
-    = "ml_gdk_image_destroy"
-end
-
-module Color = struct
-  type t
-
-  external color_white : colormap -> t = "ml_gdk_color_white"
-  external color_black : colormap -> t = "ml_gdk_color_black"
-  external color_parse : string -> t = "ml_gdk_color_parse"
-  external color_alloc : colormap -> t -> bool = "ml_gdk_color_alloc"
-  external color_create : red:int -> green:int -> blue:int -> t
-      = "ml_GdkColor"
-
-  external get_system_colormap : unit -> colormap
-      = "ml_gdk_colormap_get_system"
-  external colormap_new : visual -> privat:bool -> colormap
-      = "ml_gdk_colormap_new"
-  let get_colormap ?(privat=false) vis = colormap_new vis ~privat
-
-  type spec = [ `BLACK | `NAME of string | `RGB of int * int * int | `WHITE]
-  let color_alloc ~colormap color =
-    if not (color_alloc colormap color) then raise (Error"Color.alloc");
-    color
-  let alloc ~colormap color =
-    match color with
-      `WHITE -> color_white colormap
-    | `BLACK -> color_black colormap
-    | `NAME s -> color_alloc ~colormap (color_parse s)
-    | `RGB (red,green,blue) ->
-       color_alloc ~colormap (color_create ~red ~green ~blue)
-
-  external red : t -> int = "ml_GdkColor_red"
-  external blue : t -> int = "ml_GdkColor_blue"
-  external green : t -> int = "ml_GdkColor_green"
-  external pixel : t -> int = "ml_GdkColor_pixel"
-end
-
-module Rectangle = struct
-  type t
-  external create : x:int -> y:int -> width:int -> height:int -> t
-      = "ml_GdkRectangle"
-  external x : t -> int = "ml_GdkRectangle_x"
-  external y : t -> int = "ml_GdkRectangle_y"
-  external width : t -> int = "ml_GdkRectangle_width"
-  external height : t -> int = "ml_GdkRectangle_height"
-end
-
-module Window = struct
-  type background_pixmap = [ `NONE | `PARENT_RELATIVE | `PIXMAP of pixmap]
-  external visual_depth : visual -> int = "ml_gdk_visual_get_depth"
-  external get_visual : window -> visual = "ml_gdk_window_get_visual"
-  external get_parent : window -> window = "ml_gdk_window_get_parent"
-  external get_size : window -> int * int = "ml_gdk_window_get_size"
-  external get_position : window -> int * int =
-    "ml_gdk_window_get_position"
-  external root_parent : unit -> window = "ml_GDK_ROOT_PARENT"
-  external set_back_pixmap : window -> pixmap -> int -> unit = 
-    "ml_gdk_window_set_back_pixmap"
-  external clear : window -> unit = "ml_gdk_window_clear"
-  external get_xwindow : window -> xid = "ml_GDK_WINDOW_XWINDOW"
-
-  let set_back_pixmap w pix = 
-    let null_pixmap = (Obj.magic Gpointer.boxed_null : pixmap) in
-    match pix with
-      `NONE -> set_back_pixmap w null_pixmap 0
-    | `PARENT_RELATIVE -> set_back_pixmap w null_pixmap 1
-    | `PIXMAP(pixmap) -> set_back_pixmap w pixmap 0 
-       (* anything OK, Maybe... *) 
-end
-
-module PointArray = struct
-  type t = { len: int}
-  external create : len:int -> t = "ml_point_array_new"
-  external set : t -> pos:int -> x:int -> y:int -> unit = "ml_point_array_set"
-  let set arr ~pos =
-    if pos < 0 || pos >= arr.len then invalid_arg "PointArray.set";
-    set arr ~pos
-end
-
-module Region = struct
-  type gdkFillRule = [ `EVEN_ODD_RULE|`WINDING_RULE ]
-  type gdkOverlapType = [ `IN|`OUT|`PART ]
-  external create : unit -> region = "ml_gdk_region_new"
-  external destroy : region -> unit = "ml_gdk_region_destroy"
-  external polygon : PointArray.t -> gdkFillRule -> region 
-      = "ml_gdk_region_polygon"
-  let polygon l =
-    let len = List.length l in
-    let arr = PointArray.create ~len in
-    List.fold_left l ~init:0
-      ~f:(fun pos (x,y) -> PointArray.set arr ~pos ~x ~y; pos+1);
-    polygon arr    
-  external intersect : region -> region -> region
-      = "ml_gdk_regions_intersect"
-  external union : region -> region -> region 
-      = "ml_gdk_regions_union"
-  external subtract : region -> region -> region 
-      = "ml_gdk_regions_subtract"
-  external xor : region -> region -> region 
-      = "ml_gdk_regions_xor"
-  external union_with_rect : region -> Rectangle.t -> region
-      = "ml_gdk_region_union_with_rect"
-  external offset : region -> x:int -> y:int -> unit = "ml_gdk_region_offset"
-  external shrink : region -> x:int -> y:int -> unit = "ml_gdk_region_shrink"
-  external empty : region -> bool = "ml_gdk_region_empty"
-  external equal : region -> region -> bool = "ml_gdk_region_equal"
-  external point_in : region -> x:int -> y:int -> bool 
-      = "ml_gdk_region_point_in"
-  external rect_in : region -> Rectangle.t -> gdkOverlapType
-      = "ml_gdk_region_rect_in"
-  external get_clipbox : region -> Rectangle.t -> unit
-      = "ml_gdk_region_get_clipbox"
-end
-      
-
-module GC = struct
-  type gdkFunction = [ `COPY|`INVERT|`XOR ]
-  type gdkFill = [ `SOLID|`TILED|`STIPPLED|`OPAQUE_STIPPLED ]
-  type gdkSubwindowMode = [ `CLIP_BY_CHILDREN|`INCLUDE_INFERIORS ]
-  type gdkLineStyle = [ `SOLID|`ON_OFF_DASH|`DOUBLE_DASH ]
-  type gdkCapStyle = [ `NOT_LAST|`BUTT|`ROUND|`PROJECTING ]
-  type gdkJoinStyle = [ `MITER|`ROUND|`BEVEL ]
-  external create : 'a drawable -> gc = "ml_gdk_gc_new"
-  external set_foreground : gc -> Color.t -> unit = "ml_gdk_gc_set_foreground"
-  external set_background : gc -> Color.t -> unit = "ml_gdk_gc_set_background"
-  external set_font : gc -> font -> unit = "ml_gdk_gc_set_font"
-  external set_function : gc -> gdkFunction -> unit = "ml_gdk_gc_set_function"
-  external set_fill : gc -> gdkFill -> unit = "ml_gdk_gc_set_fill"
-  external set_tile : gc -> pixmap -> unit = "ml_gdk_gc_set_tile"
-  external set_stipple : gc -> pixmap -> unit = "ml_gdk_gc_set_stipple"
-  external set_ts_origin : gc -> x:int -> y:int -> unit
-      = "ml_gdk_gc_set_ts_origin"
-  external set_clip_origin : gc -> x:int -> y:int -> unit
-      = "ml_gdk_gc_set_clip_origin"
-  external set_clip_mask : gc -> bitmap -> unit = "ml_gdk_gc_set_clip_mask"
-  external set_clip_rectangle : gc -> Rectangle.t -> unit
-      = "ml_gdk_gc_set_clip_rectangle"
-  external set_clip_region : gc -> region -> unit = "ml_gdk_gc_set_clip_region"
-  external set_subwindow : gc -> gdkSubwindowMode -> unit
-      = "ml_gdk_gc_set_subwindow"
-  external set_exposures : gc -> bool -> unit = "ml_gdk_gc_set_exposures"
-  external set_line_attributes :
-      gc -> width:int -> style:gdkLineStyle -> cap:gdkCapStyle ->
-      join:gdkJoinStyle -> unit
-      = "ml_gdk_gc_set_line_attributes"
-  external copy : dst:gc -> gc -> unit = "ml_gdk_gc_copy"
-  type values = {
-      foreground : Color.t;
-      background : Color.t;
-      font : font option;
-      fonction : gdkFunction;
-      fill : gdkFill;
-      tile : pixmap option;
-      stipple : pixmap option;
-      clip_mask : bitmap option;
-      subwindow_mode : gdkSubwindowMode;
-      ts_x_origin : int;
-      ts_y_origin : int;
-      clip_x_origin : int;
-      clip_y_origin : int;
-      graphics_exposures : bool;
-      line_width : int;
-      line_style : gdkLineStyle;
-      cap_style : gdkCapStyle;
-      join_style : gdkJoinStyle;
-    }
-  external get_values : gc -> values = "ml_gdk_gc_get_values"
-end
-
-module Pixmap = struct
-  external create : window -> width:int -> height:int -> depth:int -> pixmap
-      = "ml_gdk_pixmap_new"
-  external create_from_data :
-      window -> string -> width:int -> height:int -> depth:int ->
-      fg:Color.t -> bg:Color.t -> pixmap
-      = "ml_gdk_pixmap_create_from_data_bc" "ml_gk_pixmap_create_from_data"
-  external create_from_xpm :
-      window -> ?colormap:colormap -> ?transparent:Color.t ->
-      file:string -> pixmap * bitmap
-      = "ml_gdk_pixmap_colormap_create_from_xpm"
-  external create_from_xpm_d :
-      window -> ?colormap:colormap -> ?transparent:Color.t ->
-      data:string array -> pixmap * bitmap
-      = "ml_gdk_pixmap_colormap_create_from_xpm_d"
-end
-
-module Bitmap = struct
-  let create : window -> width:int -> height:int -> bitmap =
-    Obj.magic (Pixmap.create ~depth:1)
-  external create_from_data :
-      window -> string -> width:int -> height:int -> bitmap
-      = "ml_gdk_bitmap_create_from_data"
-end
-
-module Font = struct
-  external load : string -> font = "ml_gdk_font_load"
-  external load_fontset : string -> font = "ml_gdk_fontset_load"
-  external string_width : font -> string -> int = "ml_gdk_string_width"
-  external char_width : font -> char -> int = "ml_gdk_char_width"
-  external string_height : font -> string -> int = "ml_gdk_string_height"
-  external char_height : font -> char -> int = "ml_gdk_char_height"
-  external string_measure : font -> string -> int = "ml_gdk_string_measure"
-  external char_measure : font -> char -> int = "ml_gdk_char_measure"
-  external get_type : font -> [`FONT | `FONTSET] = "ml_GdkFont_type"
-  external ascent : font -> int = "ml_GdkFont_ascent"
-  external descent : font -> int = "ml_GdkFont_descent"
-end
-
-module Draw = struct
-  external point : 'a drawable -> gc -> x:int -> y:int -> unit
-      = "ml_gdk_draw_point"
-  external line : 'a drawable -> gc -> x:int -> y:int -> x:int -> y:int -> unit
-      = "ml_gdk_draw_line_bc" "ml_gdk_draw_line"
-  external rectangle :
-      'a drawable -> gc ->
-      filled:bool -> x:int -> y:int -> width:int -> height:int -> unit
-      = "ml_gdk_draw_rectangle_bc" "ml_gdk_draw_rectangle"
-  let rectangle w gc ~x ~y ~width ~height ?(filled=false) () =
-    rectangle w gc ~x ~y ~width ~height ~filled
-  external arc :
-      'a drawable -> gc -> filled:bool -> x:int -> y:int ->
-      width:int -> height:int -> start:int -> angle:int -> unit
-      = "ml_gdk_draw_arc_bc" "ml_gdk_draw_arc"
-  let arc w gc ~x ~y ~width ~height ?(filled=false) ?(start=0.)
-      ?(angle=360.) () =
-    arc w gc ~x ~y ~width ~height ~filled
-      ~start:(truncate(start *. 64.))
-      ~angle:(truncate(angle *. 64.))
-  external polygon : 'a drawable -> gc -> filled:bool -> PointArray.t -> unit
-      = "ml_gdk_draw_polygon"
-  let polygon w gc ?(filled=false) l =
-    let len = List.length l in
-    let arr = PointArray.create ~len in
-    List.fold_left l ~init:0
-      ~f:(fun pos (x,y) -> PointArray.set arr ~pos ~x ~y; pos+1);
-    polygon w gc ~filled arr
-  external string : 'a drawable -> font: font -> gc -> x: int -> y: int ->
-    string: string -> unit
-      = "ml_gdk_draw_string_bc" "ml_gdk_draw_string"   
-  external image : 'a drawable -> gc -> image: image -> 
-    xsrc: int -> ysrc: int -> xdest: int -> ydest: int -> 
-    width: int -> height: int -> unit
-      = "ml_gdk_draw_image_bc" "ml_gdk_draw_image"
-end
-
-module Rgb = struct
-  external init : unit -> unit = "ml_gdk_rgb_init"
-  external get_visual : unit -> visual = "ml_gdk_rgb_get_visual"
-  external get_cmap : unit -> colormap = "ml_gdk_rgb_get_cmap"
-end
-
-module DnD = struct
-  external drag_status : drag_context -> drag_action list -> time:int -> unit
-      = "ml_gdk_drag_status"
-  external drag_context_suggested_action : drag_context -> drag_action
-      = "ml_GdkDragContext_suggested_action"
-  external drag_context_targets : drag_context -> atom list
-      = "ml_GdkDragContext_targets"
-end
-
-module Truecolor = struct
-  (* Truecolor quick color query *) 
-
-  type visual_shift_prec = {
-      red_shift : int;
-      red_prec : int;
-      green_shift : int;
-      green_prec : int;
-      blue_shift : int;
-      blue_prec : int
-    }
-  let shift_prec visual = {
-    red_shift = Visual.red_shift visual;
-    red_prec = Visual.red_prec visual;
-    green_shift = Visual.green_shift visual;
-    green_prec = Visual.green_prec visual;
-    blue_shift = Visual.blue_shift visual;
-    blue_prec = Visual.blue_prec visual;
-  }
-
-  let color_creator visual =
-    match Visual.get_type visual with
-      `TRUE_COLOR | `DIRECT_COLOR ->
-       let shift_prec = shift_prec visual in
-       Format.eprintf "red : %d %d, "
-         shift_prec.red_shift shift_prec.red_prec;
-       Format.eprintf "green : %d %d, "
-         shift_prec.green_shift shift_prec.green_prec;
-       Format.eprintf "blue : %d %d"
-         shift_prec.blue_shift shift_prec.blue_prec;
-       Format.pp_print_newline Format.err_formatter ();
-       let red_lsr = 16 - shift_prec.red_prec
-       and green_lsr = 16 - shift_prec.green_prec
-       and blue_lsr = 16 - shift_prec.blue_prec in
-       fun ~red: red ~green: green ~blue: blue ->
-         (((red lsr red_lsr) lsl shift_prec.red_shift) lor 
-          ((green lsr green_lsr) lsl shift_prec.green_shift) lor
-          ((blue lsr blue_lsr) lsl shift_prec.blue_shift))
-    | _ -> raise (Invalid_argument "Gdk.Truecolor.color_creator")
-
-  let color_parser visual =
-    match Visual.get_type visual with
-      `TRUE_COLOR | `DIRECT_COLOR ->
-       let shift_prec = shift_prec visual in
-       let red_lsr = 16 - shift_prec.red_prec
-       and green_lsr = 16 - shift_prec.green_prec
-       and blue_lsr = 16 - shift_prec.blue_prec in
-       let mask = 1 lsl 16 - 1 in
-       fun pixel ->
-         ((pixel lsr shift_prec.red_shift) lsl red_lsr) land mask,
-         ((pixel lsr shift_prec.green_shift) lsl green_lsr) land mask,
-         ((pixel lsr shift_prec.blue_shift) lsl blue_lsr) land mask
-    | _ -> raise (Invalid_argument "Gdk.Truecolor.color_parser")
-end
-
-module X = struct
-  (* X related functions *)
-  external flush : unit -> unit
-      = "ml_gdk_flush"
-  external beep : unit -> unit
-      = "ml_gdk_beep"
-end
-
-module Cursor = struct
-  type cursor_type = [
-    | `X_CURSOR
-    | `ARROW
-    | `BASED_ARROW_DOWN
-    | `BASED_ARROW_UP
-    | `BOAT
-    | `BOGOSITY
-    | `BOTTOM_LEFT_CORNER
-    | `BOTTOM_RIGHT_CORNER
-    | `BOTTOM_SIDE
-    | `BOTTOM_TEE
-    | `BOX_SPIRAL
-    | `CENTER_PTR
-    | `CIRCLE
-    | `CLOCK
-    | `COFFEE_MUG
-    | `CROSS
-    | `CROSS_REVERSE
-    | `CROSSHAIR
-    | `DIAMOND_CROSS
-    | `DOT
-    | `DOTBOX
-    | `DOUBLE_ARROW
-    | `DRAFT_LARGE
-    | `DRAFT_SMALL
-    | `DRAPED_BOX
-    | `EXCHANGE
-    | `FLEUR
-    | `GOBBLER
-    | `GUMBY
-    | `HAND1
-    | `HAND2
-    | `HEART
-    | `ICON
-    | `IRON_CROSS
-    | `LEFT_PTR
-    | `LEFT_SIDE
-    | `LEFT_TEE
-    | `LEFTBUTTON
-    | `LL_ANGLE
-    | `LR_ANGLE
-    | `MAN
-    | `MIDDLEBUTTON
-    | `MOUSE
-    | `PENCIL
-    | `PIRATE
-    | `PLUS
-    | `QUESTION_ARROW
-    | `RIGHT_PTR
-    | `RIGHT_SIDE
-    | `RIGHT_TEE
-    | `RIGHTBUTTON
-    | `RTL_LOGO
-    | `SAILBOAT
-    | `SB_DOWN_ARROW
-    | `SB_H_DOUBLE_ARROW
-    | `SB_LEFT_ARROW
-    | `SB_RIGHT_ARROW
-    | `SB_UP_ARROW
-    | `SB_V_DOUBLE_ARROW
-    | `SHUTTLE
-    | `SIZING
-    | `SPIDER
-    | `SPRAYCAN
-    | `STAR
-    | `TARGET
-    | `TCROSS
-    | `TOP_LEFT_ARROW
-    | `TOP_LEFT_CORNER
-    | `TOP_RIGHT_CORNER
-    | `TOP_SIDE
-    | `TOP_TEE
-    | `TREK
-    | `UL_ANGLE
-    | `UMBRELLA
-    | `UR_ANGLE
-    | `WATCH
-    | `XTERM
-  ]
-  external create : cursor_type -> cursor = "ml_gdk_cursor_new"
-  external create_from_pixmap :
-    pixmap -> mask:bitmap ->
-    fg:Color.t -> bg:Color.t -> x:int -> y:int -> cursor
-    = "ml_gdk_cursor_new_from_pixmap_bc" "ml_gdk_cursor_new_from_pixmap"
-  external destroy : cursor -> unit = "ml_gdk_cursor_destroy"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk.mli
deleted file mode 100644 (file)
index 2914b60..0000000
+++ /dev/null
@@ -1,447 +0,0 @@
-(* $Id$ *)
-
-type colormap
-type visual
-type region
-type gc
-type 'a drawable
-type window = [`window] drawable
-type pixmap = [`pixmap] drawable
-type bitmap = [`bitmap] drawable
-type font
-type image
-type atom = int
-type keysym = int
-type 'a event
-type drag_context
-type cursor
-type xid = int32
-
-exception Error of string
-
-module Tags : sig
-  type event_type =
-    [ `NOTHING|`DELETE|`DESTROY|`EXPOSE|`MOTION_NOTIFY|`BUTTON_PRESS
-     |`TWO_BUTTON_PRESS|`THREE_BUTTON_PRESS
-     |`BUTTON_RELEASE|`KEY_PRESS
-     |`KEY_RELEASE|`ENTER_NOTIFY|`LEAVE_NOTIFY|`FOCUS_CHANGE
-     |`CONFIGURE|`MAP|`UNMAP|`PROPERTY_NOTIFY|`SELECTION_CLEAR
-     |`SELECTION_REQUEST|`SELECTION_NOTIFY|`PROXIMITY_IN
-     |`PROXIMITY_OUT|`DRAG_ENTER|`DRAG_LEAVE|`DRAG_MOTION|`DRAG_STATUS
-     |`DROP_START|`DROP_FINISHED|`CLIENT_EVENT|`VISIBILITY_NOTIFY
-     |`NO_EXPOSE ]
-  type event_mask =
-    [ `EXPOSURE
-     |`POINTER_MOTION|`POINTER_MOTION_HINT
-     |`BUTTON_MOTION|`BUTTON1_MOTION|`BUTTON2_MOTION|`BUTTON3_MOTION
-     |`BUTTON_PRESS|`BUTTON_RELEASE
-     |`KEY_PRESS|`KEY_RELEASE
-     |`ENTER_NOTIFY|`LEAVE_NOTIFY|`FOCUS_CHANGE
-     |`STRUCTURE|`PROPERTY_CHANGE|`VISIBILITY_NOTIFY
-     |`PROXIMITY_IN|`PROXIMITY_OUT|`SUBSTRUCTURE
-     |`ALL_EVENTS ]
-  type extension_events = [ `NONE|`ALL|`CURSOR ]
-  type visibility_state = [ `UNOBSCURED|`PARTIAL|`FULLY_OBSCURED ]
-  type input_source = [ `MOUSE|`PEN|`ERASER|`CURSOR ]
-  type notify_type =
-    [ `ANCESTOR|`VIRTUAL|`INFERIOR|`NONLINEAR|`NONLINEAR_VIRTUAL|`UNKNOWN ] 
-  type crossing_mode = [ `NORMAL|`GRAB|`UNGRAB ]
-  type modifier =
-    [ `SHIFT|`LOCK|`CONTROL|`MOD1|`MOD2|`MOD3|`MOD4|`MOD5|`BUTTON1
-     |`BUTTON2|`BUTTON3|`BUTTON4|`BUTTON5 ]
-  type drag_action = [ `DEFAULT|`COPY|`MOVE|`LINK|`PRIVATE|`ASK ]
-end
-
-module Convert :
-  sig
-    val modifier : int -> Tags.modifier list
-  end
-
-module Screen :
-  sig
-    external width : unit -> int = "ml_gdk_screen_width"
-    external height : unit -> int = "ml_gdk_screen_height"
-  end
-
-module Visual :
-  sig
-    type visual_type =
-      [ `STATIC_GRAY|`GRAYSCALE|`STATIC_COLOR
-       |`PSEUDO_COLOR|`TRUE_COLOR|`DIRECT_COLOR ]
-    external get_best : ?depth:int -> ?kind:visual_type -> unit -> visual
-        = "ml_gdk_visual_get_best"
-    external get_type : visual -> visual_type = "ml_GdkVisual_type"
-    external depth : visual -> int = "ml_GdkVisual_depth"
-    external red_mask : visual -> int = "ml_GdkVisual_red_mask"
-    external red_shift : visual -> int = "ml_GdkVisual_red_shift"
-    external red_prec : visual -> int = "ml_GdkVisual_red_prec"
-    external green_mask : visual -> int = "ml_GdkVisual_green_mask"
-    external green_shift : visual -> int = "ml_GdkVisual_green_shift"
-    external green_prec : visual -> int = "ml_GdkVisual_green_prec"
-    external blue_mask : visual -> int = "ml_GdkVisual_blue_mask"
-    external blue_shift : visual -> int = "ml_GdkVisual_blue_shift"
-    external blue_prec : visual -> int = "ml_GdkVisual_blue_prec"
-  end
-
-module Image :
-  sig
-    type image_type = [ `FASTEST|`NORMAL|`SHARED ]
-    external create_bitmap :
-      visual:visual -> data:string -> width:int -> height:int -> image
-      = "ml_gdk_image_new_bitmap"
-    external create :
-      kind:image_type ->
-      visual:visual -> width:int -> height:int -> image = "ml_gdk_image_new"
-    external get :
-      'a drawable -> x:int -> y:int -> width:int -> height:int -> image
-      = "ml_gdk_image_get"
-    external put_pixel : image -> x:int -> y:int -> pixel:int -> unit
-      = "ml_gdk_image_put_pixel"
-    external get_pixel : image -> x:int -> y:int -> int
-      = "ml_gdk_image_get_pixel"
-    external destroy : image -> unit = "ml_gdk_image_destroy"
-  end
-
-module Color :
-  sig
-    external get_system_colormap : unit -> colormap
-       = "ml_gdk_colormap_get_system"
-    val get_colormap : ?privat:bool -> visual -> colormap
-
-    type t
-    type spec = [
-      | `BLACK
-      | `NAME of string
-      | `RGB of int * int * int
-      | `WHITE
-    ]
-    val alloc : colormap:colormap -> spec -> t
-    external red : t -> int = "ml_GdkColor_red"
-    external blue : t -> int = "ml_GdkColor_blue"
-    external green : t -> int = "ml_GdkColor_green"
-    external pixel : t -> int = "ml_GdkColor_pixel"
-  end
-
-module Rectangle :
-  sig
-    type t
-    external create : x:int -> y:int -> width:int -> height:int -> t
-      = "ml_GdkRectangle"
-    external x : t -> int = "ml_GdkRectangle_x"
-    external y : t -> int = "ml_GdkRectangle_y"
-    external width : t -> int = "ml_GdkRectangle_width"
-    external height : t -> int = "ml_GdkRectangle_height"
-  end
-
-module Window :
-  sig
-    type background_pixmap = [ `NONE|`PARENT_RELATIVE|`PIXMAP of pixmap ]
-    external visual_depth : visual -> int = "ml_gdk_visual_get_depth"
-    external get_visual : window -> visual = "ml_gdk_window_get_visual"
-    external get_parent : window -> window = "ml_gdk_window_get_parent"
-    external get_size : window -> int * int = "ml_gdk_window_get_size"
-    external get_position : window -> int * int
-      = "ml_gdk_window_get_position"
-    external root_parent : unit -> window = "ml_GDK_ROOT_PARENT"
-    external clear : window -> unit = "ml_gdk_window_clear"
-    external get_xwindow : window -> xid = "ml_GDK_WINDOW_XWINDOW"
-    val set_back_pixmap : window -> background_pixmap -> unit
-  end
-
-module PointArray :
-  sig
-    type t = { len: int }
-    external create : len:int -> t = "ml_point_array_new"
-    val set : t -> pos:int -> x:int -> y:int -> unit
-  end
-
-module Region :
-  sig
-    type gdkFillRule = [ `EVEN_ODD_RULE|`WINDING_RULE ]
-    type gdkOverlapType = [ `IN|`OUT|`PART ]
-    external create : unit -> region = "ml_gdk_region_new"
-    external destroy : region -> unit = "ml_gdk_region_destroy"
-    val polygon : (int * int) list -> gdkFillRule -> region 
-    external intersect : region -> region -> region
-      = "ml_gdk_regions_intersect"
-    external union : region -> region -> region 
-      = "ml_gdk_regions_union"
-    external subtract : region -> region -> region 
-      = "ml_gdk_regions_subtract"
-    external xor : region -> region -> region 
-      = "ml_gdk_regions_xor"
-    external union_with_rect : region -> Rectangle.t -> region
-      = "ml_gdk_region_union_with_rect"
-    external offset : region -> x:int -> y:int -> unit = "ml_gdk_region_offset"
-    external shrink : region -> x:int -> y:int -> unit = "ml_gdk_region_shrink"
-    external empty : region -> bool = "ml_gdk_region_empty"
-    external equal : region -> region -> bool = "ml_gdk_region_equal"
-    external point_in : region -> x:int -> y:int -> bool 
-      = "ml_gdk_region_point_in"
-    external rect_in : region -> Rectangle.t -> gdkOverlapType
-      = "ml_gdk_region_rect_in"
-    external get_clipbox : region -> Rectangle.t -> unit
-      = "ml_gdk_region_get_clipbox"
-  end
-
-module GC :
-  sig
-    type gdkFunction = [ `COPY|`INVERT|`XOR ]
-    type gdkFill = [ `SOLID|`TILED|`STIPPLED|`OPAQUE_STIPPLED ]
-    type gdkSubwindowMode = [ `CLIP_BY_CHILDREN|`INCLUDE_INFERIORS ]
-    type gdkLineStyle = [ `SOLID|`ON_OFF_DASH|`DOUBLE_DASH ]
-    type gdkCapStyle = [ `NOT_LAST|`BUTT|`ROUND|`PROJECTING ]
-    type gdkJoinStyle = [ `MITER|`ROUND|`BEVEL ]
-    external create : 'a drawable -> gc = "ml_gdk_gc_new"
-    external set_foreground : gc -> Color.t -> unit
-      = "ml_gdk_gc_set_foreground"
-    external set_background : gc -> Color.t -> unit
-      = "ml_gdk_gc_set_background"
-    external set_font : gc -> font -> unit = "ml_gdk_gc_set_font"
-    external set_function : gc -> gdkFunction -> unit
-      = "ml_gdk_gc_set_function"
-    external set_fill : gc -> gdkFill -> unit = "ml_gdk_gc_set_fill"
-    external set_tile : gc -> pixmap -> unit = "ml_gdk_gc_set_tile"
-    external set_stipple : gc -> pixmap -> unit = "ml_gdk_gc_set_stipple"
-    external set_ts_origin : gc -> x:int -> y:int -> unit
-      = "ml_gdk_gc_set_ts_origin"
-    external set_clip_origin : gc -> x:int -> y:int -> unit
-      = "ml_gdk_gc_set_clip_origin"
-    external set_clip_mask : gc -> bitmap -> unit = "ml_gdk_gc_set_clip_mask"
-    external set_clip_rectangle : gc -> Rectangle.t -> unit
-      = "ml_gdk_gc_set_clip_rectangle"
-    external set_clip_region : gc -> region -> unit
-       = "ml_gdk_gc_set_clip_region"
-    external set_subwindow : gc -> gdkSubwindowMode -> unit
-      = "ml_gdk_gc_set_subwindow"
-    external set_exposures : gc -> bool -> unit = "ml_gdk_gc_set_exposures"
-    external set_line_attributes :
-      gc ->
-      width:int ->
-      style:gdkLineStyle -> cap:gdkCapStyle -> join:gdkJoinStyle -> unit
-      = "ml_gdk_gc_set_line_attributes"
-    external copy : dst:gc -> gc -> unit = "ml_gdk_gc_copy"
-    type values = {
-        foreground : Color.t;
-        background : Color.t;
-        font : font option;
-        fonction : gdkFunction;
-        fill : gdkFill;
-        tile : pixmap option;
-        stipple : pixmap option;
-        clip_mask : bitmap option;
-        subwindow_mode : gdkSubwindowMode;
-        ts_x_origin : int;
-        ts_y_origin : int;
-        clip_x_origin : int;
-        clip_y_origin : int;
-        graphics_exposures : bool;
-        line_width : int;
-        line_style : gdkLineStyle;
-        cap_style : gdkCapStyle;
-        join_style : gdkJoinStyle;
-      }
-    external get_values : gc -> values = "ml_gdk_gc_get_values"
-  end
-
-module Pixmap :
-  sig
-    external create :
-      window -> width:int -> height:int -> depth:int -> pixmap
-      = "ml_gdk_pixmap_new"
-    external create_from_data :
-      window ->
-      string ->
-      width:int ->
-      height:int -> depth:int -> fg:Color.t -> bg:Color.t -> pixmap
-      = "ml_gdk_pixmap_create_from_data_bc" "ml_gk_pixmap_create_from_data"
-    external create_from_xpm :
-      window ->
-      ?colormap:colormap ->
-      ?transparent:Color.t -> file:string -> pixmap * bitmap
-      = "ml_gdk_pixmap_colormap_create_from_xpm"
-    external create_from_xpm_d :
-      window ->
-      ?colormap:colormap ->
-      ?transparent:Color.t -> data:string array -> pixmap * bitmap
-      = "ml_gdk_pixmap_colormap_create_from_xpm_d"
-  end
-
-module Bitmap :
-  sig
-    val create : window -> width:int -> height:int -> bitmap
-    external create_from_data :
-      window -> string -> width:int -> height:int -> bitmap
-      = "ml_gdk_bitmap_create_from_data"
-  end
-
-module Font :
-  sig
-    external load : string -> font = "ml_gdk_font_load"
-    external load_fontset : string -> font = "ml_gdk_fontset_load"
-    external string_width : font -> string -> int = "ml_gdk_string_width"
-    external char_width : font -> char -> int = "ml_gdk_char_width"
-    external string_height : font -> string -> int = "ml_gdk_string_height"
-    external char_height : font -> char -> int = "ml_gdk_char_height"
-    external string_measure : font -> string -> int = "ml_gdk_string_measure"
-    external char_measure : font -> char -> int = "ml_gdk_char_measure"
-    external get_type : font -> [`FONT | `FONTSET] = "ml_GdkFont_type"
-    external ascent : font -> int = "ml_GdkFont_ascent"
-    external descent : font -> int = "ml_GdkFont_descent"
-  end
-
-module Draw :
-  sig
-    external point : 'a drawable -> gc -> x:int -> y:int -> unit
-      = "ml_gdk_draw_point"
-    external line :
-      'a drawable -> gc -> x:int -> y:int -> x:int -> y:int -> unit
-      = "ml_gdk_draw_line_bc" "ml_gdk_draw_line"
-    val rectangle :
-      'a drawable -> gc ->
-      x:int -> y:int -> width:int -> height:int -> ?filled:bool -> unit -> unit
-    val arc :
-      'a drawable -> gc ->
-      x:int -> y:int -> width:int -> height:int ->
-      ?filled:bool -> ?start:float -> ?angle:float -> unit -> unit
-    val polygon :
-      'a drawable -> gc -> ?filled:bool ->(int * int) list -> unit
-    external string :
-      'a drawable ->
-      font:font -> gc -> x:int -> y:int -> string:string -> unit
-      = "ml_gdk_draw_string_bc" "ml_gdk_draw_string"
-    external image :
-      'a drawable ->
-      gc ->
-      image:image ->
-      xsrc:int ->
-      ysrc:int -> xdest:int -> ydest:int -> width:int -> height:int -> unit
-      = "ml_gdk_draw_image_bc" "ml_gdk_draw_image"
-  end
-
-module Rgb :
-  sig
-    external init : unit -> unit = "ml_gdk_rgb_init"
-    external get_visual : unit -> visual = "ml_gdk_rgb_get_visual"
-    external get_cmap : unit -> colormap = "ml_gdk_rgb_get_cmap"
-  end
-
-module DnD :
-  sig
-    external drag_status :
-      drag_context -> Tags.drag_action list -> time:int -> unit
-      = "ml_gdk_drag_status"
-    external drag_context_suggested_action : drag_context -> Tags.drag_action
-      = "ml_GdkDragContext_suggested_action"
-    external drag_context_targets : drag_context -> atom list
-      = "ml_GdkDragContext_targets"
-  end
-
-module Truecolor :
-  sig
-    val color_creator : visual -> (red: int -> green: int -> blue: int -> int)
-       (* [color_creator visual] creates a function to calculate 
-          the pixel color id for given red, green and blue component 
-          value ([0..65535]) at the client side. [visual] must have 
-           `TRUE_COLOR or `DIRECT_COLOR type. This function improves
-           the speed of the color query of true color visual greatly. *)
-       (* WARN: this approach is not theoretically correct for true color
-          visual, because we need gamma correction. *)
-
-    val color_parser : visual -> int -> int * int * int
-  end
-
-module X :
-  (* X related functions *)
-  sig
-    val flush : unit -> unit (* also in GtkMain *)
-    val beep : unit -> unit
-  end
-
-module Cursor : sig
-  type cursor_type = [
-    | `X_CURSOR
-    | `ARROW
-    | `BASED_ARROW_DOWN
-    | `BASED_ARROW_UP
-    | `BOAT
-    | `BOGOSITY
-    | `BOTTOM_LEFT_CORNER
-    | `BOTTOM_RIGHT_CORNER
-    | `BOTTOM_SIDE
-    | `BOTTOM_TEE
-    | `BOX_SPIRAL
-    | `CENTER_PTR
-    | `CIRCLE
-    | `CLOCK
-    | `COFFEE_MUG
-    | `CROSS
-    | `CROSS_REVERSE
-    | `CROSSHAIR
-    | `DIAMOND_CROSS
-    | `DOT
-    | `DOTBOX
-    | `DOUBLE_ARROW
-    | `DRAFT_LARGE
-    | `DRAFT_SMALL
-    | `DRAPED_BOX
-    | `EXCHANGE
-    | `FLEUR
-    | `GOBBLER
-    | `GUMBY
-    | `HAND1
-    | `HAND2
-    | `HEART
-    | `ICON
-    | `IRON_CROSS
-    | `LEFT_PTR
-    | `LEFT_SIDE
-    | `LEFT_TEE
-    | `LEFTBUTTON
-    | `LL_ANGLE
-    | `LR_ANGLE
-    | `MAN
-    | `MIDDLEBUTTON
-    | `MOUSE
-    | `PENCIL
-    | `PIRATE
-    | `PLUS
-    | `QUESTION_ARROW
-    | `RIGHT_PTR
-    | `RIGHT_SIDE
-    | `RIGHT_TEE
-    | `RIGHTBUTTON
-    | `RTL_LOGO
-    | `SAILBOAT
-    | `SB_DOWN_ARROW
-    | `SB_H_DOUBLE_ARROW
-    | `SB_LEFT_ARROW
-    | `SB_RIGHT_ARROW
-    | `SB_UP_ARROW
-    | `SB_V_DOUBLE_ARROW
-    | `SHUTTLE
-    | `SIZING
-    | `SPIDER
-    | `SPRAYCAN
-    | `STAR
-    | `TARGET
-    | `TCROSS
-    | `TOP_LEFT_ARROW
-    | `TOP_LEFT_CORNER
-    | `TOP_RIGHT_CORNER
-    | `TOP_SIDE
-    | `TOP_TEE
-    | `TREK
-    | `UL_ANGLE
-    | `UMBRELLA
-    | `UR_ANGLE
-    | `WATCH
-    | `XTERM
-  ]
-  external create : cursor_type -> cursor = "ml_gdk_cursor_new"
-  external create_from_pixmap :
-    pixmap -> mask:bitmap ->
-    fg:Color.t -> bg:Color.t -> x:int -> y:int -> cursor
-    = "ml_gdk_cursor_new_from_pixmap_bc" "ml_gdk_cursor_new_from_pixmap"
-  external destroy : cursor -> unit = "ml_gdk_cursor_destroy"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkEvent.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkEvent.ml
deleted file mode 100644 (file)
index 87c0e88..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gdk
-open Tags
-
-external coerce : 'a event -> event_type event = "%identity"
-external unsafe_copy : Gpointer.boxed -> #event_type event
-    = "ml_gdk_event_copy"
-external copy : (#event_type as 'a) event -> 'a event
-    = "ml_gdk_event_copy"
-external get_type : 'a event -> 'a = "ml_GdkEventAny_type"
-external get_window : 'a event -> window = "ml_GdkEventAny_window"
-external get_send_event : 'a event -> bool = "ml_GdkEventAny_send_event"
-
-external create : (#event_type as 'a) -> 'a event
-    = "ml_gdk_event_new"
-external set_window : 'a event -> window -> unit
-    = "ml_gdk_event_set_window"
-
-module Expose = struct
-  type t = [ `EXPOSE ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with `EXPOSE -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Expose.cast"
-  external area : t -> Rectangle.t = "ml_GdkEventExpose_area"
-  external count : t -> int = "ml_GdkEventExpose_count"
-end
-
-module Visibility = struct
-  type t = [ `VISIBILITY_NOTIFY ] event
-  let cast (ev :  event_type event) : t =
-    match get_type ev with `VISIBILITY_NOTIFY -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Visibility.cast"
-  external visibility : t -> visibility_state
-      = "ml_GdkEventVisibility_state"
-end
-
-module Motion = struct
-  type t = [ `MOTION_NOTIFY ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with `MOTION_NOTIFY -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Motion.cast"
-  external time : t -> int = "ml_GdkEventMotion_time"
-  external x : t -> float = "ml_GdkEventMotion_x"
-  external y : t -> float = "ml_GdkEventMotion_y"
-  external pressure : t -> float = "ml_GdkEventMotion_pressure"
-  external xtilt : t -> float = "ml_GdkEventMotion_xtilt"
-  external ytilt : t -> float = "ml_GdkEventMotion_ytilt"
-  external state : t -> int = "ml_GdkEventMotion_state"
-  external is_hint : t -> bool = "ml_GdkEventMotion_is_hint"
-  external source : t -> input_source = "ml_GdkEventMotion_source"
-  external deviceid : t -> int = "ml_GdkEventMotion_deviceid"
-  external x_root : t -> float = "ml_GdkEventMotion_x_root"
-  external y_root : t -> float = "ml_GdkEventMotion_y_root"
-end
-
-module Button = struct
-  type types =
-      [ `BUTTON_PRESS|`TWO_BUTTON_PRESS|`THREE_BUTTON_PRESS|`BUTTON_RELEASE ]
-  type t = types event
-  let cast (ev : event_type event) : t =
-    match get_type ev with
-      `BUTTON_PRESS|`TWO_BUTTON_PRESS|`THREE_BUTTON_PRESS|`BUTTON_RELEASE
-      -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Button.cast"
-  external time : t -> int = "ml_GdkEventButton_time"
-  external x : t -> float = "ml_GdkEventButton_x"
-  external y : t -> float = "ml_GdkEventButton_y"
-  external pressure : t -> float = "ml_GdkEventButton_pressure"
-  external xtilt : t -> float = "ml_GdkEventButton_xtilt"
-  external ytilt : t -> float = "ml_GdkEventButton_ytilt"
-  external state : t -> int = "ml_GdkEventButton_state"
-  external button : t -> int = "ml_GdkEventButton_button"
-  external source : t -> input_source = "ml_GdkEventButton_source"
-  external deviceid : t -> int = "ml_GdkEventButton_deviceid"
-  external x_root : t -> float = "ml_GdkEventButton_x_root"
-  external y_root : t -> float = "ml_GdkEventButton_y_root"
-  external set_type : t -> #types -> unit
-      = "ml_gdk_event_set_type"
-  external set_button : t -> int -> unit
-      = "ml_gdk_event_button_set_button"
-end
-
-module Key = struct
-  type t = [ `KEY_PRESS|`KEY_RELEASE ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with
-      `KEY_PRESS|`KEY_RELEASE -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Key.cast"
-  external time : t -> int = "ml_GdkEventKey_time"
-  external state : t -> int = "ml_GdkEventKey_state"
-  external keyval : t -> keysym = "ml_GdkEventKey_keyval"
-  external string : t -> string = "ml_GdkEventKey_string"
-  let state ev = Convert.modifier (state ev)
-end
-
-module Crossing = struct
-  type t = [ `ENTER_NOTIFY|`LEAVE_NOTIFY ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with
-      `ENTER_NOTIFY|`LEAVE_NOTIFY -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Crossing.cast"
-  external subwindow : t -> window = "ml_GdkEventCrossing_subwindow"
-  external detail : t -> notify_type = "ml_GdkEventCrossing_detail"
-end
-
-module Focus = struct
-  type t = [ `FOCUS_CHANGE ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with `FOCUS_CHANGE -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Focus.cast"
-  external focus_in : t -> bool = "ml_GdkEventFocus_in"
-end
-
-module Configure = struct
-  type t = [ `CONFIGURE ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with `CONFIGURE -> Obj.magic ev
-    |  _ -> invalid_arg "GdkEvent.Configure.cast"
-  external x : t -> int = "ml_GdkEventConfigure_x"
-  external y : t -> int = "ml_GdkEventConfigure_y"
-  external width : t -> int = "ml_GdkEventConfigure_width"
-  external height : t -> int = "ml_GdkEventConfigure_height"
-end
-
-module Property = struct
-  type t = [ `PROPERTY_NOTIFY ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with `PROPERTY_NOTIFY -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Property.cast"
-  external atom : t -> atom = "ml_GdkEventProperty_atom"
-  external time : t -> int = "ml_GdkEventProperty_time"
-  external state : t -> int = "ml_GdkEventProperty_state"
-end
-
-module Selection = struct
-  type t = [ `SELECTION_CLEAR|`SELECTION_REQUEST|`SELECTION_NOTIFY ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with
-      `SELECTION_CLEAR|`SELECTION_REQUEST|`SELECTION_NOTIFY -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Selection.cast"
-  external selection : t -> atom = "ml_GdkEventSelection_selection"
-  external target : t -> atom = "ml_GdkEventSelection_target"
-  external property : t -> atom = "ml_GdkEventSelection_property"
-  external requestor : t -> int = "ml_GdkEventSelection_requestor"
-  external time : t -> int = "ml_GdkEventSelection_time"
-end
-
-module Proximity = struct
-  type t = [ `PROXIMITY_IN|`PROXIMITY_OUT ] event
-  let cast (ev : event_type event) : t =
-    match get_type ev with
-      `PROXIMITY_IN|`PROXIMITY_OUT -> Obj.magic ev
-    | _ -> invalid_arg "GdkEvent.Proximity.cast"
-  external time : t -> int = "ml_GdkEventProximity_time"
-  external source : t -> input_source = "ml_GdkEventProximity_source"
-  external deviceid : t -> int = "ml_GdkEventProximity_deviceid"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkKeysyms.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdkKeysyms.ml
deleted file mode 100644 (file)
index b0257b4..0000000
+++ /dev/null
@@ -1,1320 +0,0 @@
-(* $Id$ *)
-
-open Gdk
-let _VoidSymbol : keysym = 0xFFFFFF
-let _BackSpace : keysym = 0xFF08
-let _Tab : keysym = 0xFF09
-let _Linefeed : keysym = 0xFF0A
-let _Clear : keysym = 0xFF0B
-let _Return : keysym = 0xFF0D
-let _Pause : keysym = 0xFF13
-let _Scroll_Lock : keysym = 0xFF14
-let _Sys_Req : keysym = 0xFF15
-let _Escape : keysym = 0xFF1B
-let _Delete : keysym = 0xFFFF
-let _Multi_key : keysym = 0xFF20
-let _SingleCandidate : keysym = 0xFF3C
-let _MultipleCandidate : keysym = 0xFF3D
-let _PreviousCandidate : keysym = 0xFF3E
-let _Kanji : keysym = 0xFF21
-let _Muhenkan : keysym = 0xFF22
-let _Henkan_Mode : keysym = 0xFF23
-let _Henkan : keysym = 0xFF23
-let _Romaji : keysym = 0xFF24
-let _Hiragana : keysym = 0xFF25
-let _Katakana : keysym = 0xFF26
-let _Hiragana_Katakana : keysym = 0xFF27
-let _Zenkaku : keysym = 0xFF28
-let _Hankaku : keysym = 0xFF29
-let _Zenkaku_Hankaku : keysym = 0xFF2A
-let _Touroku : keysym = 0xFF2B
-let _Massyo : keysym = 0xFF2C
-let _Kana_Lock : keysym = 0xFF2D
-let _Kana_Shift : keysym = 0xFF2E
-let _Eisu_Shift : keysym = 0xFF2F
-let _Eisu_toggle : keysym = 0xFF30
-let _Zen_Koho : keysym = 0xFF3D
-let _Mae_Koho : keysym = 0xFF3E
-let _Home : keysym = 0xFF50
-let _Left : keysym = 0xFF51
-let _Up : keysym = 0xFF52
-let _Right : keysym = 0xFF53
-let _Down : keysym = 0xFF54
-let _Prior : keysym = 0xFF55
-let _Page_Up : keysym = 0xFF55
-let _Next : keysym = 0xFF56
-let _Page_Down : keysym = 0xFF56
-let _End : keysym = 0xFF57
-let _Begin : keysym = 0xFF58
-let _Select : keysym = 0xFF60
-let _Print : keysym = 0xFF61
-let _Execute : keysym = 0xFF62
-let _Insert : keysym = 0xFF63
-let _Undo : keysym = 0xFF65
-let _Redo : keysym = 0xFF66
-let _Menu : keysym = 0xFF67
-let _Find : keysym = 0xFF68
-let _Cancel : keysym = 0xFF69
-let _Help : keysym = 0xFF6A
-let _Break : keysym = 0xFF6B
-let _Mode_switch : keysym = 0xFF7E
-let _script_switch : keysym = 0xFF7E
-let _Num_Lock : keysym = 0xFF7F
-let _KP_Space : keysym = 0xFF80
-let _KP_Tab : keysym = 0xFF89
-let _KP_Enter : keysym = 0xFF8D
-let _KP_F1 : keysym = 0xFF91
-let _KP_F2 : keysym = 0xFF92
-let _KP_F3 : keysym = 0xFF93
-let _KP_F4 : keysym = 0xFF94
-let _KP_Home : keysym = 0xFF95
-let _KP_Left : keysym = 0xFF96
-let _KP_Up : keysym = 0xFF97
-let _KP_Right : keysym = 0xFF98
-let _KP_Down : keysym = 0xFF99
-let _KP_Prior : keysym = 0xFF9A
-let _KP_Page_Up : keysym = 0xFF9A
-let _KP_Next : keysym = 0xFF9B
-let _KP_Page_Down : keysym = 0xFF9B
-let _KP_End : keysym = 0xFF9C
-let _KP_Begin : keysym = 0xFF9D
-let _KP_Insert : keysym = 0xFF9E
-let _KP_Delete : keysym = 0xFF9F
-let _KP_Equal : keysym = 0xFFBD
-let _KP_Multiply : keysym = 0xFFAA
-let _KP_Add : keysym = 0xFFAB
-let _KP_Separator : keysym = 0xFFAC
-let _KP_Subtract : keysym = 0xFFAD
-let _KP_Decimal : keysym = 0xFFAE
-let _KP_Divide : keysym = 0xFFAF
-let _KP_0 : keysym = 0xFFB0
-let _KP_1 : keysym = 0xFFB1
-let _KP_2 : keysym = 0xFFB2
-let _KP_3 : keysym = 0xFFB3
-let _KP_4 : keysym = 0xFFB4
-let _KP_5 : keysym = 0xFFB5
-let _KP_6 : keysym = 0xFFB6
-let _KP_7 : keysym = 0xFFB7
-let _KP_8 : keysym = 0xFFB8
-let _KP_9 : keysym = 0xFFB9
-let _F1 : keysym = 0xFFBE
-let _F2 : keysym = 0xFFBF
-let _F3 : keysym = 0xFFC0
-let _F4 : keysym = 0xFFC1
-let _F5 : keysym = 0xFFC2
-let _F6 : keysym = 0xFFC3
-let _F7 : keysym = 0xFFC4
-let _F8 : keysym = 0xFFC5
-let _F9 : keysym = 0xFFC6
-let _F10 : keysym = 0xFFC7
-let _F11 : keysym = 0xFFC8
-let _L1 : keysym = 0xFFC8
-let _F12 : keysym = 0xFFC9
-let _L2 : keysym = 0xFFC9
-let _F13 : keysym = 0xFFCA
-let _L3 : keysym = 0xFFCA
-let _F14 : keysym = 0xFFCB
-let _L4 : keysym = 0xFFCB
-let _F15 : keysym = 0xFFCC
-let _L5 : keysym = 0xFFCC
-let _F16 : keysym = 0xFFCD
-let _L6 : keysym = 0xFFCD
-let _F17 : keysym = 0xFFCE
-let _L7 : keysym = 0xFFCE
-let _F18 : keysym = 0xFFCF
-let _L8 : keysym = 0xFFCF
-let _F19 : keysym = 0xFFD0
-let _L9 : keysym = 0xFFD0
-let _F20 : keysym = 0xFFD1
-let _L10 : keysym = 0xFFD1
-let _F21 : keysym = 0xFFD2
-let _R1 : keysym = 0xFFD2
-let _F22 : keysym = 0xFFD3
-let _R2 : keysym = 0xFFD3
-let _F23 : keysym = 0xFFD4
-let _R3 : keysym = 0xFFD4
-let _F24 : keysym = 0xFFD5
-let _R4 : keysym = 0xFFD5
-let _F25 : keysym = 0xFFD6
-let _R5 : keysym = 0xFFD6
-let _F26 : keysym = 0xFFD7
-let _R6 : keysym = 0xFFD7
-let _F27 : keysym = 0xFFD8
-let _R7 : keysym = 0xFFD8
-let _F28 : keysym = 0xFFD9
-let _R8 : keysym = 0xFFD9
-let _F29 : keysym = 0xFFDA
-let _R9 : keysym = 0xFFDA
-let _F30 : keysym = 0xFFDB
-let _R10 : keysym = 0xFFDB
-let _F31 : keysym = 0xFFDC
-let _R11 : keysym = 0xFFDC
-let _F32 : keysym = 0xFFDD
-let _R12 : keysym = 0xFFDD
-let _F33 : keysym = 0xFFDE
-let _R13 : keysym = 0xFFDE
-let _F34 : keysym = 0xFFDF
-let _R14 : keysym = 0xFFDF
-let _F35 : keysym = 0xFFE0
-let _R15 : keysym = 0xFFE0
-let _Shift_L : keysym = 0xFFE1
-let _Shift_R : keysym = 0xFFE2
-let _Control_L : keysym = 0xFFE3
-let _Control_R : keysym = 0xFFE4
-let _Caps_Lock : keysym = 0xFFE5
-let _Shift_Lock : keysym = 0xFFE6
-let _Meta_L : keysym = 0xFFE7
-let _Meta_R : keysym = 0xFFE8
-let _Alt_L : keysym = 0xFFE9
-let _Alt_R : keysym = 0xFFEA
-let _Super_L : keysym = 0xFFEB
-let _Super_R : keysym = 0xFFEC
-let _Hyper_L : keysym = 0xFFED
-let _Hyper_R : keysym = 0xFFEE
-let _ISO_Lock : keysym = 0xFE01
-let _ISO_Level2_Latch : keysym = 0xFE02
-let _ISO_Level3_Shift : keysym = 0xFE03
-let _ISO_Level3_Latch : keysym = 0xFE04
-let _ISO_Level3_Lock : keysym = 0xFE05
-let _ISO_Group_Shift : keysym = 0xFF7E
-let _ISO_Group_Latch : keysym = 0xFE06
-let _ISO_Group_Lock : keysym = 0xFE07
-let _ISO_Next_Group : keysym = 0xFE08
-let _ISO_Next_Group_Lock : keysym = 0xFE09
-let _ISO_Prev_Group : keysym = 0xFE0A
-let _ISO_Prev_Group_Lock : keysym = 0xFE0B
-let _ISO_First_Group : keysym = 0xFE0C
-let _ISO_First_Group_Lock : keysym = 0xFE0D
-let _ISO_Last_Group : keysym = 0xFE0E
-let _ISO_Last_Group_Lock : keysym = 0xFE0F
-let _ISO_Left_Tab : keysym = 0xFE20
-let _ISO_Move_Line_Up : keysym = 0xFE21
-let _ISO_Move_Line_Down : keysym = 0xFE22
-let _ISO_Partial_Line_Up : keysym = 0xFE23
-let _ISO_Partial_Line_Down : keysym = 0xFE24
-let _ISO_Partial_Space_Left : keysym = 0xFE25
-let _ISO_Partial_Space_Right : keysym = 0xFE26
-let _ISO_Set_Margin_Left : keysym = 0xFE27
-let _ISO_Set_Margin_Right : keysym = 0xFE28
-let _ISO_Release_Margin_Left : keysym = 0xFE29
-let _ISO_Release_Margin_Right : keysym = 0xFE2A
-let _ISO_Release_Both_Margins : keysym = 0xFE2B
-let _ISO_Fast_Cursor_Left : keysym = 0xFE2C
-let _ISO_Fast_Cursor_Right : keysym = 0xFE2D
-let _ISO_Fast_Cursor_Up : keysym = 0xFE2E
-let _ISO_Fast_Cursor_Down : keysym = 0xFE2F
-let _ISO_Continuous_Underline : keysym = 0xFE30
-let _ISO_Discontinuous_Underline : keysym = 0xFE31
-let _ISO_Emphasize : keysym = 0xFE32
-let _ISO_Center_Object : keysym = 0xFE33
-let _ISO_Enter : keysym = 0xFE34
-let _dead_grave : keysym = 0xFE50
-let _dead_acute : keysym = 0xFE51
-let _dead_circumflex : keysym = 0xFE52
-let _dead_tilde : keysym = 0xFE53
-let _dead_macron : keysym = 0xFE54
-let _dead_breve : keysym = 0xFE55
-let _dead_abovedot : keysym = 0xFE56
-let _dead_diaeresis : keysym = 0xFE57
-let _dead_abovering : keysym = 0xFE58
-let _dead_doubleacute : keysym = 0xFE59
-let _dead_caron : keysym = 0xFE5A
-let _dead_cedilla : keysym = 0xFE5B
-let _dead_ogonek : keysym = 0xFE5C
-let _dead_iota : keysym = 0xFE5D
-let _dead_voiced_sound : keysym = 0xFE5E
-let _dead_semivoiced_sound : keysym = 0xFE5F
-let _dead_belowdot : keysym = 0xFE60
-let _First_Virtual_Screen : keysym = 0xFED0
-let _Prev_Virtual_Screen : keysym = 0xFED1
-let _Next_Virtual_Screen : keysym = 0xFED2
-let _Last_Virtual_Screen : keysym = 0xFED4
-let _Terminate_Server : keysym = 0xFED5
-let _AccessX_Enable : keysym = 0xFE70
-let _AccessX_Feedback_Enable : keysym = 0xFE71
-let _RepeatKeys_Enable : keysym = 0xFE72
-let _SlowKeys_Enable : keysym = 0xFE73
-let _BounceKeys_Enable : keysym = 0xFE74
-let _StickyKeys_Enable : keysym = 0xFE75
-let _MouseKeys_Enable : keysym = 0xFE76
-let _MouseKeys_Accel_Enable : keysym = 0xFE77
-let _Overlay1_Enable : keysym = 0xFE78
-let _Overlay2_Enable : keysym = 0xFE79
-let _AudibleBell_Enable : keysym = 0xFE7A
-let _Pointer_Left : keysym = 0xFEE0
-let _Pointer_Right : keysym = 0xFEE1
-let _Pointer_Up : keysym = 0xFEE2
-let _Pointer_Down : keysym = 0xFEE3
-let _Pointer_UpLeft : keysym = 0xFEE4
-let _Pointer_UpRight : keysym = 0xFEE5
-let _Pointer_DownLeft : keysym = 0xFEE6
-let _Pointer_DownRight : keysym = 0xFEE7
-let _Pointer_Button_Dflt : keysym = 0xFEE8
-let _Pointer_Button1 : keysym = 0xFEE9
-let _Pointer_Button2 : keysym = 0xFEEA
-let _Pointer_Button3 : keysym = 0xFEEB
-let _Pointer_Button4 : keysym = 0xFEEC
-let _Pointer_Button5 : keysym = 0xFEED
-let _Pointer_DblClick_Dflt : keysym = 0xFEEE
-let _Pointer_DblClick1 : keysym = 0xFEEF
-let _Pointer_DblClick2 : keysym = 0xFEF0
-let _Pointer_DblClick3 : keysym = 0xFEF1
-let _Pointer_DblClick4 : keysym = 0xFEF2
-let _Pointer_DblClick5 : keysym = 0xFEF3
-let _Pointer_Drag_Dflt : keysym = 0xFEF4
-let _Pointer_Drag1 : keysym = 0xFEF5
-let _Pointer_Drag2 : keysym = 0xFEF6
-let _Pointer_Drag3 : keysym = 0xFEF7
-let _Pointer_Drag4 : keysym = 0xFEF8
-let _Pointer_Drag5 : keysym = 0xFEFD
-let _Pointer_EnableKeys : keysym = 0xFEF9
-let _Pointer_Accelerate : keysym = 0xFEFA
-let _Pointer_DfltBtnNext : keysym = 0xFEFB
-let _Pointer_DfltBtnPrev : keysym = 0xFEFC
-let _3270_Duplicate : keysym = 0xFD01
-let _3270_FieldMark : keysym = 0xFD02
-let _3270_Right2 : keysym = 0xFD03
-let _3270_Left2 : keysym = 0xFD04
-let _3270_BackTab : keysym = 0xFD05
-let _3270_EraseEOF : keysym = 0xFD06
-let _3270_EraseInput : keysym = 0xFD07
-let _3270_Reset : keysym = 0xFD08
-let _3270_Quit : keysym = 0xFD09
-let _3270_PA1 : keysym = 0xFD0A
-let _3270_PA2 : keysym = 0xFD0B
-let _3270_PA3 : keysym = 0xFD0C
-let _3270_Test : keysym = 0xFD0D
-let _3270_Attn : keysym = 0xFD0E
-let _3270_CursorBlink : keysym = 0xFD0F
-let _3270_AltCursor : keysym = 0xFD10
-let _3270_KeyClick : keysym = 0xFD11
-let _3270_Jump : keysym = 0xFD12
-let _3270_Ident : keysym = 0xFD13
-let _3270_Rule : keysym = 0xFD14
-let _3270_Copy : keysym = 0xFD15
-let _3270_Play : keysym = 0xFD16
-let _3270_Setup : keysym = 0xFD17
-let _3270_Record : keysym = 0xFD18
-let _3270_ChangeScreen : keysym = 0xFD19
-let _3270_DeleteWord : keysym = 0xFD1A
-let _3270_ExSelect : keysym = 0xFD1B
-let _3270_CursorSelect : keysym = 0xFD1C
-let _3270_PrintScreen : keysym = 0xFD1D
-let _3270_Enter : keysym = 0xFD1E
-let _space : keysym = 0x020
-let _exclam : keysym = 0x021
-let _quotedbl : keysym = 0x022
-let _numbersign : keysym = 0x023
-let _dollar : keysym = 0x024
-let _percent : keysym = 0x025
-let _ampersand : keysym = 0x026
-let _apostrophe : keysym = 0x027
-let _quoteright : keysym = 0x027
-let _parenleft : keysym = 0x028
-let _parenright : keysym = 0x029
-let _asterisk : keysym = 0x02a
-let _plus : keysym = 0x02b
-let _comma : keysym = 0x02c
-let _minus : keysym = 0x02d
-let _period : keysym = 0x02e
-let _slash : keysym = 0x02f
-let _0 : keysym = 0x030
-let _1 : keysym = 0x031
-let _2 : keysym = 0x032
-let _3 : keysym = 0x033
-let _4 : keysym = 0x034
-let _5 : keysym = 0x035
-let _6 : keysym = 0x036
-let _7 : keysym = 0x037
-let _8 : keysym = 0x038
-let _9 : keysym = 0x039
-let _colon : keysym = 0x03a
-let _semicolon : keysym = 0x03b
-let _less : keysym = 0x03c
-let _equal : keysym = 0x03d
-let _greater : keysym = 0x03e
-let _question : keysym = 0x03f
-let _at : keysym = 0x040
-let _A : keysym = 0x041
-let _B : keysym = 0x042
-let _C : keysym = 0x043
-let _D : keysym = 0x044
-let _E : keysym = 0x045
-let _F : keysym = 0x046
-let _G : keysym = 0x047
-let _H : keysym = 0x048
-let _I : keysym = 0x049
-let _J : keysym = 0x04a
-let _K : keysym = 0x04b
-let _L : keysym = 0x04c
-let _M : keysym = 0x04d
-let _N : keysym = 0x04e
-let _O : keysym = 0x04f
-let _P : keysym = 0x050
-let _Q : keysym = 0x051
-let _R : keysym = 0x052
-let _S : keysym = 0x053
-let _T : keysym = 0x054
-let _U : keysym = 0x055
-let _V : keysym = 0x056
-let _W : keysym = 0x057
-let _X : keysym = 0x058
-let _Y : keysym = 0x059
-let _Z : keysym = 0x05a
-let _bracketleft : keysym = 0x05b
-let _backslash : keysym = 0x05c
-let _bracketright : keysym = 0x05d
-let _asciicircum : keysym = 0x05e
-let _underscore : keysym = 0x05f
-let _grave : keysym = 0x060
-let _quoteleft : keysym = 0x060
-let _a : keysym = 0x061
-let _b : keysym = 0x062
-let _c : keysym = 0x063
-let _d : keysym = 0x064
-let _e : keysym = 0x065
-let _f : keysym = 0x066
-let _g : keysym = 0x067
-let _h : keysym = 0x068
-let _i : keysym = 0x069
-let _j : keysym = 0x06a
-let _k : keysym = 0x06b
-let _l : keysym = 0x06c
-let _m : keysym = 0x06d
-let _n : keysym = 0x06e
-let _o : keysym = 0x06f
-let _p : keysym = 0x070
-let _q : keysym = 0x071
-let _r : keysym = 0x072
-let _s : keysym = 0x073
-let _t : keysym = 0x074
-let _u : keysym = 0x075
-let _v : keysym = 0x076
-let _w : keysym = 0x077
-let _x : keysym = 0x078
-let _y : keysym = 0x079
-let _z : keysym = 0x07a
-let _braceleft : keysym = 0x07b
-let _bar : keysym = 0x07c
-let _braceright : keysym = 0x07d
-let _asciitilde : keysym = 0x07e
-let _nobreakspace : keysym = 0x0a0
-let _exclamdown : keysym = 0x0a1
-let _cent : keysym = 0x0a2
-let _sterling : keysym = 0x0a3
-let _currency : keysym = 0x0a4
-let _yen : keysym = 0x0a5
-let _brokenbar : keysym = 0x0a6
-let _section : keysym = 0x0a7
-let _diaeresis : keysym = 0x0a8
-let _copyright : keysym = 0x0a9
-let _ordfeminine : keysym = 0x0aa
-let _guillemotleft : keysym = 0x0ab
-let _notsign : keysym = 0x0ac
-let _hyphen : keysym = 0x0ad
-let _registered : keysym = 0x0ae
-let _macron : keysym = 0x0af
-let _degree : keysym = 0x0b0
-let _plusminus : keysym = 0x0b1
-let _twosuperior : keysym = 0x0b2
-let _threesuperior : keysym = 0x0b3
-let _acute : keysym = 0x0b4
-let _mu : keysym = 0x0b5
-let _paragraph : keysym = 0x0b6
-let _periodcentered : keysym = 0x0b7
-let _cedilla : keysym = 0x0b8
-let _onesuperior : keysym = 0x0b9
-let _masculine : keysym = 0x0ba
-let _guillemotright : keysym = 0x0bb
-let _onequarter : keysym = 0x0bc
-let _onehalf : keysym = 0x0bd
-let _threequarters : keysym = 0x0be
-let _questiondown : keysym = 0x0bf
-let _Agrave : keysym = 0x0c0
-let _Aacute : keysym = 0x0c1
-let _Acircumflex : keysym = 0x0c2
-let _Atilde : keysym = 0x0c3
-let _Adiaeresis : keysym = 0x0c4
-let _Aring : keysym = 0x0c5
-let _AE : keysym = 0x0c6
-let _Ccedilla : keysym = 0x0c7
-let _Egrave : keysym = 0x0c8
-let _Eacute : keysym = 0x0c9
-let _Ecircumflex : keysym = 0x0ca
-let _Ediaeresis : keysym = 0x0cb
-let _Igrave : keysym = 0x0cc
-let _Iacute : keysym = 0x0cd
-let _Icircumflex : keysym = 0x0ce
-let _Idiaeresis : keysym = 0x0cf
-let _ETH : keysym = 0x0d0
-let _Eth : keysym = 0x0d0
-let _Ntilde : keysym = 0x0d1
-let _Ograve : keysym = 0x0d2
-let _Oacute : keysym = 0x0d3
-let _Ocircumflex : keysym = 0x0d4
-let _Otilde : keysym = 0x0d5
-let _Odiaeresis : keysym = 0x0d6
-let _multiply : keysym = 0x0d7
-let _Ooblique : keysym = 0x0d8
-let _Ugrave : keysym = 0x0d9
-let _Uacute : keysym = 0x0da
-let _Ucircumflex : keysym = 0x0db
-let _Udiaeresis : keysym = 0x0dc
-let _Yacute : keysym = 0x0dd
-let _THORN : keysym = 0x0de
-let _Thorn : keysym = 0x0de
-let _ssharp : keysym = 0x0df
-let _agrave : keysym = 0x0e0
-let _aacute : keysym = 0x0e1
-let _acircumflex : keysym = 0x0e2
-let _atilde : keysym = 0x0e3
-let _adiaeresis : keysym = 0x0e4
-let _aring : keysym = 0x0e5
-let _ae : keysym = 0x0e6
-let _ccedilla : keysym = 0x0e7
-let _egrave : keysym = 0x0e8
-let _eacute : keysym = 0x0e9
-let _ecircumflex : keysym = 0x0ea
-let _ediaeresis : keysym = 0x0eb
-let _igrave : keysym = 0x0ec
-let _iacute : keysym = 0x0ed
-let _icircumflex : keysym = 0x0ee
-let _idiaeresis : keysym = 0x0ef
-let _eth : keysym = 0x0f0
-let _ntilde : keysym = 0x0f1
-let _ograve : keysym = 0x0f2
-let _oacute : keysym = 0x0f3
-let _ocircumflex : keysym = 0x0f4
-let _otilde : keysym = 0x0f5
-let _odiaeresis : keysym = 0x0f6
-let _division : keysym = 0x0f7
-let _oslash : keysym = 0x0f8
-let _ugrave : keysym = 0x0f9
-let _uacute : keysym = 0x0fa
-let _ucircumflex : keysym = 0x0fb
-let _udiaeresis : keysym = 0x0fc
-let _yacute : keysym = 0x0fd
-let _thorn : keysym = 0x0fe
-let _ydiaeresis : keysym = 0x0ff
-let _Aogonek : keysym = 0x1a1
-let _breve : keysym = 0x1a2
-let _Lstroke : keysym = 0x1a3
-let _Lcaron : keysym = 0x1a5
-let _Sacute : keysym = 0x1a6
-let _Scaron : keysym = 0x1a9
-let _Scedilla : keysym = 0x1aa
-let _Tcaron : keysym = 0x1ab
-let _Zacute : keysym = 0x1ac
-let _Zcaron : keysym = 0x1ae
-let _Zabovedot : keysym = 0x1af
-let _aogonek : keysym = 0x1b1
-let _ogonek : keysym = 0x1b2
-let _lstroke : keysym = 0x1b3
-let _lcaron : keysym = 0x1b5
-let _sacute : keysym = 0x1b6
-let _caron : keysym = 0x1b7
-let _scaron : keysym = 0x1b9
-let _scedilla : keysym = 0x1ba
-let _tcaron : keysym = 0x1bb
-let _zacute : keysym = 0x1bc
-let _doubleacute : keysym = 0x1bd
-let _zcaron : keysym = 0x1be
-let _zabovedot : keysym = 0x1bf
-let _Racute : keysym = 0x1c0
-let _Abreve : keysym = 0x1c3
-let _Lacute : keysym = 0x1c5
-let _Cacute : keysym = 0x1c6
-let _Ccaron : keysym = 0x1c8
-let _Eogonek : keysym = 0x1ca
-let _Ecaron : keysym = 0x1cc
-let _Dcaron : keysym = 0x1cf
-let _Dstroke : keysym = 0x1d0
-let _Nacute : keysym = 0x1d1
-let _Ncaron : keysym = 0x1d2
-let _Odoubleacute : keysym = 0x1d5
-let _Rcaron : keysym = 0x1d8
-let _Uring : keysym = 0x1d9
-let _Udoubleacute : keysym = 0x1db
-let _Tcedilla : keysym = 0x1de
-let _racute : keysym = 0x1e0
-let _abreve : keysym = 0x1e3
-let _lacute : keysym = 0x1e5
-let _cacute : keysym = 0x1e6
-let _ccaron : keysym = 0x1e8
-let _eogonek : keysym = 0x1ea
-let _ecaron : keysym = 0x1ec
-let _dcaron : keysym = 0x1ef
-let _dstroke : keysym = 0x1f0
-let _nacute : keysym = 0x1f1
-let _ncaron : keysym = 0x1f2
-let _odoubleacute : keysym = 0x1f5
-let _udoubleacute : keysym = 0x1fb
-let _rcaron : keysym = 0x1f8
-let _uring : keysym = 0x1f9
-let _tcedilla : keysym = 0x1fe
-let _abovedot : keysym = 0x1ff
-let _Hstroke : keysym = 0x2a1
-let _Hcircumflex : keysym = 0x2a6
-let _Iabovedot : keysym = 0x2a9
-let _Gbreve : keysym = 0x2ab
-let _Jcircumflex : keysym = 0x2ac
-let _hstroke : keysym = 0x2b1
-let _hcircumflex : keysym = 0x2b6
-let _idotless : keysym = 0x2b9
-let _gbreve : keysym = 0x2bb
-let _jcircumflex : keysym = 0x2bc
-let _Cabovedot : keysym = 0x2c5
-let _Ccircumflex : keysym = 0x2c6
-let _Gabovedot : keysym = 0x2d5
-let _Gcircumflex : keysym = 0x2d8
-let _Ubreve : keysym = 0x2dd
-let _Scircumflex : keysym = 0x2de
-let _cabovedot : keysym = 0x2e5
-let _ccircumflex : keysym = 0x2e6
-let _gabovedot : keysym = 0x2f5
-let _gcircumflex : keysym = 0x2f8
-let _ubreve : keysym = 0x2fd
-let _scircumflex : keysym = 0x2fe
-let _kra : keysym = 0x3a2
-let _kappa : keysym = 0x3a2
-let _Rcedilla : keysym = 0x3a3
-let _Itilde : keysym = 0x3a5
-let _Lcedilla : keysym = 0x3a6
-let _Emacron : keysym = 0x3aa
-let _Gcedilla : keysym = 0x3ab
-let _Tslash : keysym = 0x3ac
-let _rcedilla : keysym = 0x3b3
-let _itilde : keysym = 0x3b5
-let _lcedilla : keysym = 0x3b6
-let _emacron : keysym = 0x3ba
-let _gcedilla : keysym = 0x3bb
-let _tslash : keysym = 0x3bc
-let _ENG : keysym = 0x3bd
-let _eng : keysym = 0x3bf
-let _Amacron : keysym = 0x3c0
-let _Iogonek : keysym = 0x3c7
-let _Eabovedot : keysym = 0x3cc
-let _Imacron : keysym = 0x3cf
-let _Ncedilla : keysym = 0x3d1
-let _Omacron : keysym = 0x3d2
-let _Kcedilla : keysym = 0x3d3
-let _Uogonek : keysym = 0x3d9
-let _Utilde : keysym = 0x3dd
-let _Umacron : keysym = 0x3de
-let _amacron : keysym = 0x3e0
-let _iogonek : keysym = 0x3e7
-let _eabovedot : keysym = 0x3ec
-let _imacron : keysym = 0x3ef
-let _ncedilla : keysym = 0x3f1
-let _omacron : keysym = 0x3f2
-let _kcedilla : keysym = 0x3f3
-let _uogonek : keysym = 0x3f9
-let _utilde : keysym = 0x3fd
-let _umacron : keysym = 0x3fe
-let _overline : keysym = 0x47e
-let _kana_fullstop : keysym = 0x4a1
-let _kana_openingbracket : keysym = 0x4a2
-let _kana_closingbracket : keysym = 0x4a3
-let _kana_comma : keysym = 0x4a4
-let _kana_conjunctive : keysym = 0x4a5
-let _kana_middledot : keysym = 0x4a5
-let _kana_WO : keysym = 0x4a6
-let _kana_a : keysym = 0x4a7
-let _kana_i : keysym = 0x4a8
-let _kana_u : keysym = 0x4a9
-let _kana_e : keysym = 0x4aa
-let _kana_o : keysym = 0x4ab
-let _kana_ya : keysym = 0x4ac
-let _kana_yu : keysym = 0x4ad
-let _kana_yo : keysym = 0x4ae
-let _kana_tsu : keysym = 0x4af
-let _kana_tu : keysym = 0x4af
-let _prolongedsound : keysym = 0x4b0
-let _kana_A : keysym = 0x4b1
-let _kana_I : keysym = 0x4b2
-let _kana_U : keysym = 0x4b3
-let _kana_E : keysym = 0x4b4
-let _kana_O : keysym = 0x4b5
-let _kana_KA : keysym = 0x4b6
-let _kana_KI : keysym = 0x4b7
-let _kana_KU : keysym = 0x4b8
-let _kana_KE : keysym = 0x4b9
-let _kana_KO : keysym = 0x4ba
-let _kana_SA : keysym = 0x4bb
-let _kana_SHI : keysym = 0x4bc
-let _kana_SU : keysym = 0x4bd
-let _kana_SE : keysym = 0x4be
-let _kana_SO : keysym = 0x4bf
-let _kana_TA : keysym = 0x4c0
-let _kana_CHI : keysym = 0x4c1
-let _kana_TI : keysym = 0x4c1
-let _kana_TSU : keysym = 0x4c2
-let _kana_TU : keysym = 0x4c2
-let _kana_TE : keysym = 0x4c3
-let _kana_TO : keysym = 0x4c4
-let _kana_NA : keysym = 0x4c5
-let _kana_NI : keysym = 0x4c6
-let _kana_NU : keysym = 0x4c7
-let _kana_NE : keysym = 0x4c8
-let _kana_NO : keysym = 0x4c9
-let _kana_HA : keysym = 0x4ca
-let _kana_HI : keysym = 0x4cb
-let _kana_FU : keysym = 0x4cc
-let _kana_HU : keysym = 0x4cc
-let _kana_HE : keysym = 0x4cd
-let _kana_HO : keysym = 0x4ce
-let _kana_MA : keysym = 0x4cf
-let _kana_MI : keysym = 0x4d0
-let _kana_MU : keysym = 0x4d1
-let _kana_ME : keysym = 0x4d2
-let _kana_MO : keysym = 0x4d3
-let _kana_YA : keysym = 0x4d4
-let _kana_YU : keysym = 0x4d5
-let _kana_YO : keysym = 0x4d6
-let _kana_RA : keysym = 0x4d7
-let _kana_RI : keysym = 0x4d8
-let _kana_RU : keysym = 0x4d9
-let _kana_RE : keysym = 0x4da
-let _kana_RO : keysym = 0x4db
-let _kana_WA : keysym = 0x4dc
-let _kana_N : keysym = 0x4dd
-let _voicedsound : keysym = 0x4de
-let _semivoicedsound : keysym = 0x4df
-let _kana_switch : keysym = 0xFF7E
-let _Arabic_comma : keysym = 0x5ac
-let _Arabic_semicolon : keysym = 0x5bb
-let _Arabic_question_mark : keysym = 0x5bf
-let _Arabic_hamza : keysym = 0x5c1
-let _Arabic_maddaonalef : keysym = 0x5c2
-let _Arabic_hamzaonalef : keysym = 0x5c3
-let _Arabic_hamzaonwaw : keysym = 0x5c4
-let _Arabic_hamzaunderalef : keysym = 0x5c5
-let _Arabic_hamzaonyeh : keysym = 0x5c6
-let _Arabic_alef : keysym = 0x5c7
-let _Arabic_beh : keysym = 0x5c8
-let _Arabic_tehmarbuta : keysym = 0x5c9
-let _Arabic_teh : keysym = 0x5ca
-let _Arabic_theh : keysym = 0x5cb
-let _Arabic_jeem : keysym = 0x5cc
-let _Arabic_hah : keysym = 0x5cd
-let _Arabic_khah : keysym = 0x5ce
-let _Arabic_dal : keysym = 0x5cf
-let _Arabic_thal : keysym = 0x5d0
-let _Arabic_ra : keysym = 0x5d1
-let _Arabic_zain : keysym = 0x5d2
-let _Arabic_seen : keysym = 0x5d3
-let _Arabic_sheen : keysym = 0x5d4
-let _Arabic_sad : keysym = 0x5d5
-let _Arabic_dad : keysym = 0x5d6
-let _Arabic_tah : keysym = 0x5d7
-let _Arabic_zah : keysym = 0x5d8
-let _Arabic_ain : keysym = 0x5d9
-let _Arabic_ghain : keysym = 0x5da
-let _Arabic_tatweel : keysym = 0x5e0
-let _Arabic_feh : keysym = 0x5e1
-let _Arabic_qaf : keysym = 0x5e2
-let _Arabic_kaf : keysym = 0x5e3
-let _Arabic_lam : keysym = 0x5e4
-let _Arabic_meem : keysym = 0x5e5
-let _Arabic_noon : keysym = 0x5e6
-let _Arabic_ha : keysym = 0x5e7
-let _Arabic_heh : keysym = 0x5e7
-let _Arabic_waw : keysym = 0x5e8
-let _Arabic_alefmaksura : keysym = 0x5e9
-let _Arabic_yeh : keysym = 0x5ea
-let _Arabic_fathatan : keysym = 0x5eb
-let _Arabic_dammatan : keysym = 0x5ec
-let _Arabic_kasratan : keysym = 0x5ed
-let _Arabic_fatha : keysym = 0x5ee
-let _Arabic_damma : keysym = 0x5ef
-let _Arabic_kasra : keysym = 0x5f0
-let _Arabic_shadda : keysym = 0x5f1
-let _Arabic_sukun : keysym = 0x5f2
-let _Arabic_switch : keysym = 0xFF7E
-let _Serbian_dje : keysym = 0x6a1
-let _Macedonia_gje : keysym = 0x6a2
-let _Cyrillic_io : keysym = 0x6a3
-let _Ukrainian_ie : keysym = 0x6a4
-let _Ukranian_je : keysym = 0x6a4
-let _Macedonia_dse : keysym = 0x6a5
-let _Ukrainian_i : keysym = 0x6a6
-let _Ukranian_i : keysym = 0x6a6
-let _Ukrainian_yi : keysym = 0x6a7
-let _Ukranian_yi : keysym = 0x6a7
-let _Cyrillic_je : keysym = 0x6a8
-let _Serbian_je : keysym = 0x6a8
-let _Cyrillic_lje : keysym = 0x6a9
-let _Serbian_lje : keysym = 0x6a9
-let _Cyrillic_nje : keysym = 0x6aa
-let _Serbian_nje : keysym = 0x6aa
-let _Serbian_tshe : keysym = 0x6ab
-let _Macedonia_kje : keysym = 0x6ac
-let _Byelorussian_shortu : keysym = 0x6ae
-let _Cyrillic_dzhe : keysym = 0x6af
-let _Serbian_dze : keysym = 0x6af
-let _numerosign : keysym = 0x6b0
-let _Serbian_DJE : keysym = 0x6b1
-let _Macedonia_GJE : keysym = 0x6b2
-let _Cyrillic_IO : keysym = 0x6b3
-let _Ukrainian_IE : keysym = 0x6b4
-let _Ukranian_JE : keysym = 0x6b4
-let _Macedonia_DSE : keysym = 0x6b5
-let _Ukrainian_I : keysym = 0x6b6
-let _Ukranian_I : keysym = 0x6b6
-let _Ukrainian_YI : keysym = 0x6b7
-let _Ukranian_YI : keysym = 0x6b7
-let _Cyrillic_JE : keysym = 0x6b8
-let _Serbian_JE : keysym = 0x6b8
-let _Cyrillic_LJE : keysym = 0x6b9
-let _Serbian_LJE : keysym = 0x6b9
-let _Cyrillic_NJE : keysym = 0x6ba
-let _Serbian_NJE : keysym = 0x6ba
-let _Serbian_TSHE : keysym = 0x6bb
-let _Macedonia_KJE : keysym = 0x6bc
-let _Byelorussian_SHORTU : keysym = 0x6be
-let _Cyrillic_DZHE : keysym = 0x6bf
-let _Serbian_DZE : keysym = 0x6bf
-let _Cyrillic_yu : keysym = 0x6c0
-let _Cyrillic_a : keysym = 0x6c1
-let _Cyrillic_be : keysym = 0x6c2
-let _Cyrillic_tse : keysym = 0x6c3
-let _Cyrillic_de : keysym = 0x6c4
-let _Cyrillic_ie : keysym = 0x6c5
-let _Cyrillic_ef : keysym = 0x6c6
-let _Cyrillic_ghe : keysym = 0x6c7
-let _Cyrillic_ha : keysym = 0x6c8
-let _Cyrillic_i : keysym = 0x6c9
-let _Cyrillic_shorti : keysym = 0x6ca
-let _Cyrillic_ka : keysym = 0x6cb
-let _Cyrillic_el : keysym = 0x6cc
-let _Cyrillic_em : keysym = 0x6cd
-let _Cyrillic_en : keysym = 0x6ce
-let _Cyrillic_o : keysym = 0x6cf
-let _Cyrillic_pe : keysym = 0x6d0
-let _Cyrillic_ya : keysym = 0x6d1
-let _Cyrillic_er : keysym = 0x6d2
-let _Cyrillic_es : keysym = 0x6d3
-let _Cyrillic_te : keysym = 0x6d4
-let _Cyrillic_u : keysym = 0x6d5
-let _Cyrillic_zhe : keysym = 0x6d6
-let _Cyrillic_ve : keysym = 0x6d7
-let _Cyrillic_softsign : keysym = 0x6d8
-let _Cyrillic_yeru : keysym = 0x6d9
-let _Cyrillic_ze : keysym = 0x6da
-let _Cyrillic_sha : keysym = 0x6db
-let _Cyrillic_e : keysym = 0x6dc
-let _Cyrillic_shcha : keysym = 0x6dd
-let _Cyrillic_che : keysym = 0x6de
-let _Cyrillic_hardsign : keysym = 0x6df
-let _Cyrillic_YU : keysym = 0x6e0
-let _Cyrillic_A : keysym = 0x6e1
-let _Cyrillic_BE : keysym = 0x6e2
-let _Cyrillic_TSE : keysym = 0x6e3
-let _Cyrillic_DE : keysym = 0x6e4
-let _Cyrillic_IE : keysym = 0x6e5
-let _Cyrillic_EF : keysym = 0x6e6
-let _Cyrillic_GHE : keysym = 0x6e7
-let _Cyrillic_HA : keysym = 0x6e8
-let _Cyrillic_I : keysym = 0x6e9
-let _Cyrillic_SHORTI : keysym = 0x6ea
-let _Cyrillic_KA : keysym = 0x6eb
-let _Cyrillic_EL : keysym = 0x6ec
-let _Cyrillic_EM : keysym = 0x6ed
-let _Cyrillic_EN : keysym = 0x6ee
-let _Cyrillic_O : keysym = 0x6ef
-let _Cyrillic_PE : keysym = 0x6f0
-let _Cyrillic_YA : keysym = 0x6f1
-let _Cyrillic_ER : keysym = 0x6f2
-let _Cyrillic_ES : keysym = 0x6f3
-let _Cyrillic_TE : keysym = 0x6f4
-let _Cyrillic_U : keysym = 0x6f5
-let _Cyrillic_ZHE : keysym = 0x6f6
-let _Cyrillic_VE : keysym = 0x6f7
-let _Cyrillic_SOFTSIGN : keysym = 0x6f8
-let _Cyrillic_YERU : keysym = 0x6f9
-let _Cyrillic_ZE : keysym = 0x6fa
-let _Cyrillic_SHA : keysym = 0x6fb
-let _Cyrillic_E : keysym = 0x6fc
-let _Cyrillic_SHCHA : keysym = 0x6fd
-let _Cyrillic_CHE : keysym = 0x6fe
-let _Cyrillic_HARDSIGN : keysym = 0x6ff
-let _Greek_ALPHAaccent : keysym = 0x7a1
-let _Greek_EPSILONaccent : keysym = 0x7a2
-let _Greek_ETAaccent : keysym = 0x7a3
-let _Greek_IOTAaccent : keysym = 0x7a4
-let _Greek_IOTAdiaeresis : keysym = 0x7a5
-let _Greek_OMICRONaccent : keysym = 0x7a7
-let _Greek_UPSILONaccent : keysym = 0x7a8
-let _Greek_UPSILONdieresis : keysym = 0x7a9
-let _Greek_OMEGAaccent : keysym = 0x7ab
-let _Greek_accentdieresis : keysym = 0x7ae
-let _Greek_horizbar : keysym = 0x7af
-let _Greek_alphaaccent : keysym = 0x7b1
-let _Greek_epsilonaccent : keysym = 0x7b2
-let _Greek_etaaccent : keysym = 0x7b3
-let _Greek_iotaaccent : keysym = 0x7b4
-let _Greek_iotadieresis : keysym = 0x7b5
-let _Greek_iotaaccentdieresis : keysym = 0x7b6
-let _Greek_omicronaccent : keysym = 0x7b7
-let _Greek_upsilonaccent : keysym = 0x7b8
-let _Greek_upsilondieresis : keysym = 0x7b9
-let _Greek_upsilonaccentdieresis : keysym = 0x7ba
-let _Greek_omegaaccent : keysym = 0x7bb
-let _Greek_ALPHA : keysym = 0x7c1
-let _Greek_BETA : keysym = 0x7c2
-let _Greek_GAMMA : keysym = 0x7c3
-let _Greek_DELTA : keysym = 0x7c4
-let _Greek_EPSILON : keysym = 0x7c5
-let _Greek_ZETA : keysym = 0x7c6
-let _Greek_ETA : keysym = 0x7c7
-let _Greek_THETA : keysym = 0x7c8
-let _Greek_IOTA : keysym = 0x7c9
-let _Greek_KAPPA : keysym = 0x7ca
-let _Greek_LAMDA : keysym = 0x7cb
-let _Greek_LAMBDA : keysym = 0x7cb
-let _Greek_MU : keysym = 0x7cc
-let _Greek_NU : keysym = 0x7cd
-let _Greek_XI : keysym = 0x7ce
-let _Greek_OMICRON : keysym = 0x7cf
-let _Greek_PI : keysym = 0x7d0
-let _Greek_RHO : keysym = 0x7d1
-let _Greek_SIGMA : keysym = 0x7d2
-let _Greek_TAU : keysym = 0x7d4
-let _Greek_UPSILON : keysym = 0x7d5
-let _Greek_PHI : keysym = 0x7d6
-let _Greek_CHI : keysym = 0x7d7
-let _Greek_PSI : keysym = 0x7d8
-let _Greek_OMEGA : keysym = 0x7d9
-let _Greek_alpha : keysym = 0x7e1
-let _Greek_beta : keysym = 0x7e2
-let _Greek_gamma : keysym = 0x7e3
-let _Greek_delta : keysym = 0x7e4
-let _Greek_epsilon : keysym = 0x7e5
-let _Greek_zeta : keysym = 0x7e6
-let _Greek_eta : keysym = 0x7e7
-let _Greek_theta : keysym = 0x7e8
-let _Greek_iota : keysym = 0x7e9
-let _Greek_kappa : keysym = 0x7ea
-let _Greek_lamda : keysym = 0x7eb
-let _Greek_lambda : keysym = 0x7eb
-let _Greek_mu : keysym = 0x7ec
-let _Greek_nu : keysym = 0x7ed
-let _Greek_xi : keysym = 0x7ee
-let _Greek_omicron : keysym = 0x7ef
-let _Greek_pi : keysym = 0x7f0
-let _Greek_rho : keysym = 0x7f1
-let _Greek_sigma : keysym = 0x7f2
-let _Greek_finalsmallsigma : keysym = 0x7f3
-let _Greek_tau : keysym = 0x7f4
-let _Greek_upsilon : keysym = 0x7f5
-let _Greek_phi : keysym = 0x7f6
-let _Greek_chi : keysym = 0x7f7
-let _Greek_psi : keysym = 0x7f8
-let _Greek_omega : keysym = 0x7f9
-let _Greek_switch : keysym = 0xFF7E
-let _leftradical : keysym = 0x8a1
-let _topleftradical : keysym = 0x8a2
-let _horizconnector : keysym = 0x8a3
-let _topintegral : keysym = 0x8a4
-let _botintegral : keysym = 0x8a5
-let _vertconnector : keysym = 0x8a6
-let _topleftsqbracket : keysym = 0x8a7
-let _botleftsqbracket : keysym = 0x8a8
-let _toprightsqbracket : keysym = 0x8a9
-let _botrightsqbracket : keysym = 0x8aa
-let _topleftparens : keysym = 0x8ab
-let _botleftparens : keysym = 0x8ac
-let _toprightparens : keysym = 0x8ad
-let _botrightparens : keysym = 0x8ae
-let _leftmiddlecurlybrace : keysym = 0x8af
-let _rightmiddlecurlybrace : keysym = 0x8b0
-let _topleftsummation : keysym = 0x8b1
-let _botleftsummation : keysym = 0x8b2
-let _topvertsummationconnector : keysym = 0x8b3
-let _botvertsummationconnector : keysym = 0x8b4
-let _toprightsummation : keysym = 0x8b5
-let _botrightsummation : keysym = 0x8b6
-let _rightmiddlesummation : keysym = 0x8b7
-let _lessthanequal : keysym = 0x8bc
-let _notequal : keysym = 0x8bd
-let _greaterthanequal : keysym = 0x8be
-let _integral : keysym = 0x8bf
-let _therefore : keysym = 0x8c0
-let _variation : keysym = 0x8c1
-let _infinity : keysym = 0x8c2
-let _nabla : keysym = 0x8c5
-let _approximate : keysym = 0x8c8
-let _similarequal : keysym = 0x8c9
-let _ifonlyif : keysym = 0x8cd
-let _implies : keysym = 0x8ce
-let _identical : keysym = 0x8cf
-let _radical : keysym = 0x8d6
-let _includedin : keysym = 0x8da
-let _includes : keysym = 0x8db
-let _intersection : keysym = 0x8dc
-let _union : keysym = 0x8dd
-let _logicaland : keysym = 0x8de
-let _logicalor : keysym = 0x8df
-let _partialderivative : keysym = 0x8ef
-let _function : keysym = 0x8f6
-let _leftarrow : keysym = 0x8fb
-let _uparrow : keysym = 0x8fc
-let _rightarrow : keysym = 0x8fd
-let _downarrow : keysym = 0x8fe
-let _blank : keysym = 0x9df
-let _soliddiamond : keysym = 0x9e0
-let _checkerboard : keysym = 0x9e1
-let _ht : keysym = 0x9e2
-let _ff : keysym = 0x9e3
-let _cr : keysym = 0x9e4
-let _lf : keysym = 0x9e5
-let _nl : keysym = 0x9e8
-let _vt : keysym = 0x9e9
-let _lowrightcorner : keysym = 0x9ea
-let _uprightcorner : keysym = 0x9eb
-let _upleftcorner : keysym = 0x9ec
-let _lowleftcorner : keysym = 0x9ed
-let _crossinglines : keysym = 0x9ee
-let _horizlinescan1 : keysym = 0x9ef
-let _horizlinescan3 : keysym = 0x9f0
-let _horizlinescan5 : keysym = 0x9f1
-let _horizlinescan7 : keysym = 0x9f2
-let _horizlinescan9 : keysym = 0x9f3
-let _leftt : keysym = 0x9f4
-let _rightt : keysym = 0x9f5
-let _bott : keysym = 0x9f6
-let _topt : keysym = 0x9f7
-let _vertbar : keysym = 0x9f8
-let _emspace : keysym = 0xaa1
-let _enspace : keysym = 0xaa2
-let _em3space : keysym = 0xaa3
-let _em4space : keysym = 0xaa4
-let _digitspace : keysym = 0xaa5
-let _punctspace : keysym = 0xaa6
-let _thinspace : keysym = 0xaa7
-let _hairspace : keysym = 0xaa8
-let _emdash : keysym = 0xaa9
-let _endash : keysym = 0xaaa
-let _signifblank : keysym = 0xaac
-let _ellipsis : keysym = 0xaae
-let _doubbaselinedot : keysym = 0xaaf
-let _onethird : keysym = 0xab0
-let _twothirds : keysym = 0xab1
-let _onefifth : keysym = 0xab2
-let _twofifths : keysym = 0xab3
-let _threefifths : keysym = 0xab4
-let _fourfifths : keysym = 0xab5
-let _onesixth : keysym = 0xab6
-let _fivesixths : keysym = 0xab7
-let _careof : keysym = 0xab8
-let _figdash : keysym = 0xabb
-let _leftanglebracket : keysym = 0xabc
-let _decimalpoint : keysym = 0xabd
-let _rightanglebracket : keysym = 0xabe
-let _marker : keysym = 0xabf
-let _oneeighth : keysym = 0xac3
-let _threeeighths : keysym = 0xac4
-let _fiveeighths : keysym = 0xac5
-let _seveneighths : keysym = 0xac6
-let _trademark : keysym = 0xac9
-let _signaturemark : keysym = 0xaca
-let _trademarkincircle : keysym = 0xacb
-let _leftopentriangle : keysym = 0xacc
-let _rightopentriangle : keysym = 0xacd
-let _emopencircle : keysym = 0xace
-let _emopenrectangle : keysym = 0xacf
-let _leftsinglequotemark : keysym = 0xad0
-let _rightsinglequotemark : keysym = 0xad1
-let _leftdoublequotemark : keysym = 0xad2
-let _rightdoublequotemark : keysym = 0xad3
-let _prescription : keysym = 0xad4
-let _minutes : keysym = 0xad6
-let _seconds : keysym = 0xad7
-let _latincross : keysym = 0xad9
-let _hexagram : keysym = 0xada
-let _filledrectbullet : keysym = 0xadb
-let _filledlefttribullet : keysym = 0xadc
-let _filledrighttribullet : keysym = 0xadd
-let _emfilledcircle : keysym = 0xade
-let _emfilledrect : keysym = 0xadf
-let _enopencircbullet : keysym = 0xae0
-let _enopensquarebullet : keysym = 0xae1
-let _openrectbullet : keysym = 0xae2
-let _opentribulletup : keysym = 0xae3
-let _opentribulletdown : keysym = 0xae4
-let _openstar : keysym = 0xae5
-let _enfilledcircbullet : keysym = 0xae6
-let _enfilledsqbullet : keysym = 0xae7
-let _filledtribulletup : keysym = 0xae8
-let _filledtribulletdown : keysym = 0xae9
-let _leftpointer : keysym = 0xaea
-let _rightpointer : keysym = 0xaeb
-let _club : keysym = 0xaec
-let _diamond : keysym = 0xaed
-let _heart : keysym = 0xaee
-let _maltesecross : keysym = 0xaf0
-let _dagger : keysym = 0xaf1
-let _doubledagger : keysym = 0xaf2
-let _checkmark : keysym = 0xaf3
-let _ballotcross : keysym = 0xaf4
-let _musicalsharp : keysym = 0xaf5
-let _musicalflat : keysym = 0xaf6
-let _malesymbol : keysym = 0xaf7
-let _femalesymbol : keysym = 0xaf8
-let _telephone : keysym = 0xaf9
-let _telephonerecorder : keysym = 0xafa
-let _phonographcopyright : keysym = 0xafb
-let _caret : keysym = 0xafc
-let _singlelowquotemark : keysym = 0xafd
-let _doublelowquotemark : keysym = 0xafe
-let _cursor : keysym = 0xaff
-let _leftcaret : keysym = 0xba3
-let _rightcaret : keysym = 0xba6
-let _downcaret : keysym = 0xba8
-let _upcaret : keysym = 0xba9
-let _overbar : keysym = 0xbc0
-let _downtack : keysym = 0xbc2
-let _upshoe : keysym = 0xbc3
-let _downstile : keysym = 0xbc4
-let _underbar : keysym = 0xbc6
-let _jot : keysym = 0xbca
-let _quad : keysym = 0xbcc
-let _uptack : keysym = 0xbce
-let _circle : keysym = 0xbcf
-let _upstile : keysym = 0xbd3
-let _downshoe : keysym = 0xbd6
-let _rightshoe : keysym = 0xbd8
-let _leftshoe : keysym = 0xbda
-let _lefttack : keysym = 0xbdc
-let _righttack : keysym = 0xbfc
-let _hebrew_doublelowline : keysym = 0xcdf
-let _hebrew_aleph : keysym = 0xce0
-let _hebrew_bet : keysym = 0xce1
-let _hebrew_beth : keysym = 0xce1
-let _hebrew_gimel : keysym = 0xce2
-let _hebrew_gimmel : keysym = 0xce2
-let _hebrew_dalet : keysym = 0xce3
-let _hebrew_daleth : keysym = 0xce3
-let _hebrew_he : keysym = 0xce4
-let _hebrew_waw : keysym = 0xce5
-let _hebrew_zain : keysym = 0xce6
-let _hebrew_zayin : keysym = 0xce6
-let _hebrew_chet : keysym = 0xce7
-let _hebrew_het : keysym = 0xce7
-let _hebrew_tet : keysym = 0xce8
-let _hebrew_teth : keysym = 0xce8
-let _hebrew_yod : keysym = 0xce9
-let _hebrew_finalkaph : keysym = 0xcea
-let _hebrew_kaph : keysym = 0xceb
-let _hebrew_lamed : keysym = 0xcec
-let _hebrew_finalmem : keysym = 0xced
-let _hebrew_mem : keysym = 0xcee
-let _hebrew_finalnun : keysym = 0xcef
-let _hebrew_nun : keysym = 0xcf0
-let _hebrew_samech : keysym = 0xcf1
-let _hebrew_samekh : keysym = 0xcf1
-let _hebrew_ayin : keysym = 0xcf2
-let _hebrew_finalpe : keysym = 0xcf3
-let _hebrew_pe : keysym = 0xcf4
-let _hebrew_finalzade : keysym = 0xcf5
-let _hebrew_finalzadi : keysym = 0xcf5
-let _hebrew_zade : keysym = 0xcf6
-let _hebrew_zadi : keysym = 0xcf6
-let _hebrew_qoph : keysym = 0xcf7
-let _hebrew_kuf : keysym = 0xcf7
-let _hebrew_resh : keysym = 0xcf8
-let _hebrew_shin : keysym = 0xcf9
-let _hebrew_taw : keysym = 0xcfa
-let _hebrew_taf : keysym = 0xcfa
-let _Hebrew_switch : keysym = 0xFF7E
-let _Thai_kokai : keysym = 0xda1
-let _Thai_khokhai : keysym = 0xda2
-let _Thai_khokhuat : keysym = 0xda3
-let _Thai_khokhwai : keysym = 0xda4
-let _Thai_khokhon : keysym = 0xda5
-let _Thai_khorakhang : keysym = 0xda6
-let _Thai_ngongu : keysym = 0xda7
-let _Thai_chochan : keysym = 0xda8
-let _Thai_choching : keysym = 0xda9
-let _Thai_chochang : keysym = 0xdaa
-let _Thai_soso : keysym = 0xdab
-let _Thai_chochoe : keysym = 0xdac
-let _Thai_yoying : keysym = 0xdad
-let _Thai_dochada : keysym = 0xdae
-let _Thai_topatak : keysym = 0xdaf
-let _Thai_thothan : keysym = 0xdb0
-let _Thai_thonangmontho : keysym = 0xdb1
-let _Thai_thophuthao : keysym = 0xdb2
-let _Thai_nonen : keysym = 0xdb3
-let _Thai_dodek : keysym = 0xdb4
-let _Thai_totao : keysym = 0xdb5
-let _Thai_thothung : keysym = 0xdb6
-let _Thai_thothahan : keysym = 0xdb7
-let _Thai_thothong : keysym = 0xdb8
-let _Thai_nonu : keysym = 0xdb9
-let _Thai_bobaimai : keysym = 0xdba
-let _Thai_popla : keysym = 0xdbb
-let _Thai_phophung : keysym = 0xdbc
-let _Thai_fofa : keysym = 0xdbd
-let _Thai_phophan : keysym = 0xdbe
-let _Thai_fofan : keysym = 0xdbf
-let _Thai_phosamphao : keysym = 0xdc0
-let _Thai_moma : keysym = 0xdc1
-let _Thai_yoyak : keysym = 0xdc2
-let _Thai_rorua : keysym = 0xdc3
-let _Thai_ru : keysym = 0xdc4
-let _Thai_loling : keysym = 0xdc5
-let _Thai_lu : keysym = 0xdc6
-let _Thai_wowaen : keysym = 0xdc7
-let _Thai_sosala : keysym = 0xdc8
-let _Thai_sorusi : keysym = 0xdc9
-let _Thai_sosua : keysym = 0xdca
-let _Thai_hohip : keysym = 0xdcb
-let _Thai_lochula : keysym = 0xdcc
-let _Thai_oang : keysym = 0xdcd
-let _Thai_honokhuk : keysym = 0xdce
-let _Thai_paiyannoi : keysym = 0xdcf
-let _Thai_saraa : keysym = 0xdd0
-let _Thai_maihanakat : keysym = 0xdd1
-let _Thai_saraaa : keysym = 0xdd2
-let _Thai_saraam : keysym = 0xdd3
-let _Thai_sarai : keysym = 0xdd4
-let _Thai_saraii : keysym = 0xdd5
-let _Thai_saraue : keysym = 0xdd6
-let _Thai_sarauee : keysym = 0xdd7
-let _Thai_sarau : keysym = 0xdd8
-let _Thai_sarauu : keysym = 0xdd9
-let _Thai_phinthu : keysym = 0xdda
-let _Thai_maihanakat_maitho : keysym = 0xdde
-let _Thai_baht : keysym = 0xddf
-let _Thai_sarae : keysym = 0xde0
-let _Thai_saraae : keysym = 0xde1
-let _Thai_sarao : keysym = 0xde2
-let _Thai_saraaimaimuan : keysym = 0xde3
-let _Thai_saraaimaimalai : keysym = 0xde4
-let _Thai_lakkhangyao : keysym = 0xde5
-let _Thai_maiyamok : keysym = 0xde6
-let _Thai_maitaikhu : keysym = 0xde7
-let _Thai_maiek : keysym = 0xde8
-let _Thai_maitho : keysym = 0xde9
-let _Thai_maitri : keysym = 0xdea
-let _Thai_maichattawa : keysym = 0xdeb
-let _Thai_thanthakhat : keysym = 0xdec
-let _Thai_nikhahit : keysym = 0xded
-let _Thai_leksun : keysym = 0xdf0
-let _Thai_leknung : keysym = 0xdf1
-let _Thai_leksong : keysym = 0xdf2
-let _Thai_leksam : keysym = 0xdf3
-let _Thai_leksi : keysym = 0xdf4
-let _Thai_lekha : keysym = 0xdf5
-let _Thai_lekhok : keysym = 0xdf6
-let _Thai_lekchet : keysym = 0xdf7
-let _Thai_lekpaet : keysym = 0xdf8
-let _Thai_lekkao : keysym = 0xdf9
-let _Hangul : keysym = 0xff31
-let _Hangul_Start : keysym = 0xff32
-let _Hangul_End : keysym = 0xff33
-let _Hangul_Hanja : keysym = 0xff34
-let _Hangul_Jamo : keysym = 0xff35
-let _Hangul_Romaja : keysym = 0xff36
-let _Hangul_Codeinput : keysym = 0xff37
-let _Hangul_Jeonja : keysym = 0xff38
-let _Hangul_Banja : keysym = 0xff39
-let _Hangul_PreHanja : keysym = 0xff3a
-let _Hangul_PostHanja : keysym = 0xff3b
-let _Hangul_SingleCandidate : keysym = 0xff3c
-let _Hangul_MultipleCandidate : keysym = 0xff3d
-let _Hangul_PreviousCandidate : keysym = 0xff3e
-let _Hangul_Special : keysym = 0xff3f
-let _Hangul_switch : keysym = 0xFF7E
-let _Hangul_Kiyeog : keysym = 0xea1
-let _Hangul_SsangKiyeog : keysym = 0xea2
-let _Hangul_KiyeogSios : keysym = 0xea3
-let _Hangul_Nieun : keysym = 0xea4
-let _Hangul_NieunJieuj : keysym = 0xea5
-let _Hangul_NieunHieuh : keysym = 0xea6
-let _Hangul_Dikeud : keysym = 0xea7
-let _Hangul_SsangDikeud : keysym = 0xea8
-let _Hangul_Rieul : keysym = 0xea9
-let _Hangul_RieulKiyeog : keysym = 0xeaa
-let _Hangul_RieulMieum : keysym = 0xeab
-let _Hangul_RieulPieub : keysym = 0xeac
-let _Hangul_RieulSios : keysym = 0xead
-let _Hangul_RieulTieut : keysym = 0xeae
-let _Hangul_RieulPhieuf : keysym = 0xeaf
-let _Hangul_RieulHieuh : keysym = 0xeb0
-let _Hangul_Mieum : keysym = 0xeb1
-let _Hangul_Pieub : keysym = 0xeb2
-let _Hangul_SsangPieub : keysym = 0xeb3
-let _Hangul_PieubSios : keysym = 0xeb4
-let _Hangul_Sios : keysym = 0xeb5
-let _Hangul_SsangSios : keysym = 0xeb6
-let _Hangul_Ieung : keysym = 0xeb7
-let _Hangul_Jieuj : keysym = 0xeb8
-let _Hangul_SsangJieuj : keysym = 0xeb9
-let _Hangul_Cieuc : keysym = 0xeba
-let _Hangul_Khieuq : keysym = 0xebb
-let _Hangul_Tieut : keysym = 0xebc
-let _Hangul_Phieuf : keysym = 0xebd
-let _Hangul_Hieuh : keysym = 0xebe
-let _Hangul_A : keysym = 0xebf
-let _Hangul_AE : keysym = 0xec0
-let _Hangul_YA : keysym = 0xec1
-let _Hangul_YAE : keysym = 0xec2
-let _Hangul_EO : keysym = 0xec3
-let _Hangul_E : keysym = 0xec4
-let _Hangul_YEO : keysym = 0xec5
-let _Hangul_YE : keysym = 0xec6
-let _Hangul_O : keysym = 0xec7
-let _Hangul_WA : keysym = 0xec8
-let _Hangul_WAE : keysym = 0xec9
-let _Hangul_OE : keysym = 0xeca
-let _Hangul_YO : keysym = 0xecb
-let _Hangul_U : keysym = 0xecc
-let _Hangul_WEO : keysym = 0xecd
-let _Hangul_WE : keysym = 0xece
-let _Hangul_WI : keysym = 0xecf
-let _Hangul_YU : keysym = 0xed0
-let _Hangul_EU : keysym = 0xed1
-let _Hangul_YI : keysym = 0xed2
-let _Hangul_I : keysym = 0xed3
-let _Hangul_J_Kiyeog : keysym = 0xed4
-let _Hangul_J_SsangKiyeog : keysym = 0xed5
-let _Hangul_J_KiyeogSios : keysym = 0xed6
-let _Hangul_J_Nieun : keysym = 0xed7
-let _Hangul_J_NieunJieuj : keysym = 0xed8
-let _Hangul_J_NieunHieuh : keysym = 0xed9
-let _Hangul_J_Dikeud : keysym = 0xeda
-let _Hangul_J_Rieul : keysym = 0xedb
-let _Hangul_J_RieulKiyeog : keysym = 0xedc
-let _Hangul_J_RieulMieum : keysym = 0xedd
-let _Hangul_J_RieulPieub : keysym = 0xede
-let _Hangul_J_RieulSios : keysym = 0xedf
-let _Hangul_J_RieulTieut : keysym = 0xee0
-let _Hangul_J_RieulPhieuf : keysym = 0xee1
-let _Hangul_J_RieulHieuh : keysym = 0xee2
-let _Hangul_J_Mieum : keysym = 0xee3
-let _Hangul_J_Pieub : keysym = 0xee4
-let _Hangul_J_PieubSios : keysym = 0xee5
-let _Hangul_J_Sios : keysym = 0xee6
-let _Hangul_J_SsangSios : keysym = 0xee7
-let _Hangul_J_Ieung : keysym = 0xee8
-let _Hangul_J_Jieuj : keysym = 0xee9
-let _Hangul_J_Cieuc : keysym = 0xeea
-let _Hangul_J_Khieuq : keysym = 0xeeb
-let _Hangul_J_Tieut : keysym = 0xeec
-let _Hangul_J_Phieuf : keysym = 0xeed
-let _Hangul_J_Hieuh : keysym = 0xeee
-let _Hangul_RieulYeorinHieuh : keysym = 0xeef
-let _Hangul_SunkyeongeumMieum : keysym = 0xef0
-let _Hangul_SunkyeongeumPieub : keysym = 0xef1
-let _Hangul_PanSios : keysym = 0xef2
-let _Hangul_KkogjiDalrinIeung : keysym = 0xef3
-let _Hangul_SunkyeongeumPhieuf : keysym = 0xef4
-let _Hangul_YeorinHieuh : keysym = 0xef5
-let _Hangul_AraeA : keysym = 0xef6
-let _Hangul_AraeAE : keysym = 0xef7
-let _Hangul_J_PanSios : keysym = 0xef8
-let _Hangul_J_KkogjiDalrinIeung : keysym = 0xef9
-let _Hangul_J_YeorinHieuh : keysym = 0xefa
-let _Korean_Won : keysym = 0xeff
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk_tags.var b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gdk_tags.var
deleted file mode 100644 (file)
index 2c244a7..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-(* $Id$ *)
-
-type gdkEventType = "GDK_"
-  [ `NOTHING | `DELETE | `DESTROY | `EXPOSE | `MOTION_NOTIFY | `BUTTON_PRESS
-  | `TWO_BUTTON_PRESS "GDK_2BUTTON_PRESS"
-  | `THREE_BUTTON_PRESS "GDK_3BUTTON_PRESS"
-  | `BUTTON_RELEASE | `KEY_PRESS
-  | `KEY_RELEASE | `ENTER_NOTIFY | `LEAVE_NOTIFY | `FOCUS_CHANGE
-  | `CONFIGURE | `MAP | `UNMAP | `PROPERTY_NOTIFY | `SELECTION_CLEAR
-  | `SELECTION_REQUEST | `SELECTION_NOTIFY | `PROXIMITY_IN
-  | `PROXIMITY_OUT
-  | `DRAG_ENTER | `DRAG_LEAVE | `DRAG_MOTION | `DRAG_STATUS
-  | `DROP_START | `DROP_FINISHED | `CLIENT_EVENT | `VISIBILITY_NOTIFY
-  | `NO_EXPOSE ]
-
-type event_mask = "GDK_"
-  [ `EXPOSURE
-  | `POINTER_MOTION | `POINTER_MOTION_HINT
-  | `BUTTON_MOTION | `BUTTON1_MOTION | `BUTTON2_MOTION | `BUTTON3_MOTION
-  | `BUTTON_PRESS | `BUTTON_RELEASE
-  | `KEY_PRESS | `KEY_RELEASE
-  | `ENTER_NOTIFY | `LEAVE_NOTIFY | `FOCUS_CHANGE
-  | `STRUCTURE | `PROPERTY_CHANGE | `VISIBILITY_NOTIFY
-  | `PROXIMITY_IN | `PROXIMITY_OUT | `SUBSTRUCTURE
-  | `ALL_EVENTS ] "_MASK"
-
-type extension_events = "GDK_EXTENSION_EVENTS_"
-  [ `NONE | `ALL | `CURSOR ]
-
-type gdkVisibilityState = "GDK_VISIBILITY_"
-  [ `UNOBSCURED | `PARTIAL | `FULLY_OBSCURED ]
-
-type gdkInputSource = "GDK_SOURCE_"
-  [ `MOUSE | `PEN | `ERASER | `CURSOR ]
-
-type gdkCrossingMode = "GDK_CROSSING_"
-  [ `NORMAL | `GRAB | `UNGRAB ]
-
-type gdkNotifyType = "GDK_NOTIFY_"
-  [ `ANCESTOR | `VIRTUAL | `INFERIOR | `NONLINEAR | `NONLINEAR_VIRTUAL
-  | `UNKNOWN ] 
-
-type gdkFillRule = "GDK_"
-  [ `EVEN_ODD_RULE | `WINDING_RULE ]
-
-type gdkOverlapType = "GDK_OVERLAP_RECTANGLE_"
-  [ `IN | `OUT | `PART ]
-
-type gdkFunction = "GDK_"
-  [ `COPY | `INVERT | `XOR ]
-
-type gdkFill = "GDK_"
-  [ `SOLID | `TILED | `STIPPLED | `OPAQUE_STIPPLED ]
-
-type gdkSubwindowMode = "GDK_"
-  [ `CLIP_BY_CHILDREN | `INCLUDE_INFERIORS ]
-
-type gdkLineStyle = "GDK_LINE_"
-  [ `SOLID | `ON_OFF_DASH | `DOUBLE_DASH ]
-
-type gdkCapStyle = "GDK_CAP_"
-  [ `NOT_LAST | `BUTT | `ROUND | `PROJECTING ]
-
-type gdkJoinStyle = "GDK_JOIN_"
-  [ `MITER | `ROUND | `BEVEL ]
-
-type gdkModifier = "GDK_"
-  [ `SHIFT | `LOCK | `CONTROL | `MOD1 | `MOD2 | `MOD3 | `MOD4 | `MOD5
-  | `BUTTON1 | `BUTTON2 | `BUTTON3 | `BUTTON4 | `BUTTON5 ] "_MASK"
-
-type gdkImageType = "GDK_IMAGE_"
-  [ `NORMAL | `SHARED | `FASTEST ]
-
-type gdkVisualType = "GDK_VISUAL_"
-  [ `STATIC_GRAY | `GRAYSCALE | `STATIC_COLOR | `PSEUDO_COLOR
-  | `TRUE_COLOR | `DIRECT_COLOR ]
-
-type gdkFontType = "GDK_FONT_"
-  [ `FONT | `FONTSET ]
-
-type gdkDragAction = "GDK_ACTION_"
-  [ `DEFAULT | `COPY | `MOVE | `LINK | `PRIVATE | `ASK ]
-
-type gdkCursorType = "GDK_" [
-  | `NUM_GLYPHS
-  | `X_CURSOR
-  | `ARROW
-  | `BASED_ARROW_DOWN
-  | `BASED_ARROW_UP
-  | `BOAT
-  | `BOGOSITY
-  | `BOTTOM_LEFT_CORNER
-  | `BOTTOM_RIGHT_CORNER
-  | `BOTTOM_SIDE
-  | `BOTTOM_TEE
-  | `BOX_SPIRAL
-  | `CENTER_PTR
-  | `CIRCLE
-  | `CLOCK
-  | `COFFEE_MUG
-  | `CROSS
-  | `CROSS_REVERSE
-  | `CROSSHAIR
-  | `DIAMOND_CROSS
-  | `DOT
-  | `DOTBOX
-  | `DOUBLE_ARROW
-  | `DRAFT_LARGE
-  | `DRAFT_SMALL
-  | `DRAPED_BOX
-  | `EXCHANGE
-  | `FLEUR
-  | `GOBBLER
-  | `GUMBY
-  | `HAND1
-  | `HAND2
-  | `HEART
-  | `ICON
-  | `IRON_CROSS
-  | `LEFT_PTR
-  | `LEFT_SIDE
-  | `LEFT_TEE
-  | `LEFTBUTTON
-  | `LL_ANGLE
-  | `LR_ANGLE
-  | `MAN
-  | `MIDDLEBUTTON
-  | `MOUSE
-  | `PENCIL
-  | `PIRATE
-  | `PLUS
-  | `QUESTION_ARROW
-  | `RIGHT_PTR
-  | `RIGHT_SIDE
-  | `RIGHT_TEE
-  | `RIGHTBUTTON
-  | `RTL_LOGO
-  | `SAILBOAT
-  | `SB_DOWN_ARROW
-  | `SB_H_DOUBLE_ARROW
-  | `SB_LEFT_ARROW
-  | `SB_RIGHT_ARROW
-  | `SB_UP_ARROW
-  | `SB_V_DOUBLE_ARROW
-  | `SHUTTLE
-  | `SIZING
-  | `SPIDER
-  | `SPRAYCAN
-  | `STAR
-  | `TARGET
-  | `TCROSS
-  | `TOP_LEFT_ARROW
-  | `TOP_LEFT_CORNER
-  | `TOP_RIGHT_CORNER
-  | `TOP_SIDE
-  | `TOP_TEE
-  | `TREK
-  | `UL_ANGLE
-  | `UMBRELLA
-  | `UR_ANGLE
-  | `WATCH
-  | `XTERM
-  ]
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.ml
deleted file mode 100644 (file)
index c7020a4..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-
-type visual_options = [
-  | `USE_GL
-  | `BUFFER_SIZE of int
-  | `LEVEL of int
-  | `RGBA
-  | `DOUBLEBUFFER
-  | `STEREO
-  | `AUX_BUFFERS of int
-  | `RED_SIZE of int
-  | `GREEN_SIZE of int
-  | `BLUE_SIZE of int
-  | `ALPHA_SIZE of int
-  | `DEPTH_SIZE of int
-  | `STENCIL_SIZE of int
-  | `ACCUM_GREEN_SIZE of int
-  | `ACCUM_ALPHA_SIZE of int
-]
-
-type gl_area = [`widget|`drawing|`glarea]
-
-module Raw = struct
-  external create :
-    visual_options list -> share:[>`glarea] optobj -> gl_area obj
-    = "ml_gtk_gl_area_new"
-
-  external swap_buffers : [>`glarea] obj -> unit
-    = "ml_gtk_gl_area_swapbuffers"
-
-  external make_current : [>`glarea] obj -> bool
-    = "ml_gtk_gl_area_make_current"
-end
-
-class area_signals obj =
-object (connect)
-  inherit GObj.widget_signals obj
-  method display ~callback =
-    (new GObj.event_signals ~after obj)#expose ~callback:
-      begin fun ev ->
-       if GdkEvent.Expose.count ev = 0 then
-         if Raw.make_current obj then callback ()
-         else prerr_endline "GlGtk-WARNING **: could not make current";
-       true
-      end
-  method reshape ~callback =
-    (new GObj.event_signals ~after obj)#configure ~callback:
-      begin fun ev ->
-       if Raw.make_current obj then begin
-         callback ~width:(GdkEvent.Configure.width ev)
-           ~height:(GdkEvent.Configure.height ev)
-       end
-       else prerr_endline "GlGtk-WARNING **: could not make current";
-       true
-      end
-  method realize ~callback =
-    let connect = new GObj.misc_signals ~after (GtkBase.Widget.coerce obj) in
-    connect#realize ~callback:
-      begin fun ev ->
-       if Raw.make_current obj then callback ()
-       else prerr_endline "GlGtk-WARNING **: could not make current"
-      end
-end
-
-class area obj = object (self)
-  inherit GObj.widget (obj : gl_area obj)
-  method as_area = obj
-  method event = new GObj.event_ops obj
-  method connect = new area_signals obj
-  method set_size = GtkMisc.DrawingArea.size obj
-  method swap_buffers () = Raw.swap_buffers obj
-  method make_current () =
-    if not (Raw.make_current obj) then
-      raise (Gl.GLerror "make_current")
-end
-
-let area options ?share ?(width=0) ?(height=0) ?packing ?show () =
-  let share =
-    match share with Some (x : area) -> Some x#as_area | None -> None in
-  let w = Raw.create options ~share:(Gpointer.optboxed share) in
-  if width <> 0 || height <> 0 then GtkMisc.DrawingArea.size w ~width ~height;
-  GtkBase.Widget.add_events w [`EXPOSURE];
-  GObj.pack_return (new area w) ~packing ~show
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glGtk.mli
deleted file mode 100644 (file)
index 599f24a..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-open GObj
-
-type visual_options = [
-    `USE_GL
-  | `BUFFER_SIZE of int
-  | `LEVEL of int
-  | `RGBA
-  | `DOUBLEBUFFER
-  | `STEREO
-  | `AUX_BUFFERS of int
-  | `RED_SIZE of int
-  | `GREEN_SIZE of int
-  | `BLUE_SIZE of int
-  | `ALPHA_SIZE of int
-  | `DEPTH_SIZE of int
-  | `STENCIL_SIZE of int
-  | `ACCUM_GREEN_SIZE of int
-  | `ACCUM_ALPHA_SIZE of int
-]
-type gl_area = [`widget|`drawing|`glarea]
-
-module Raw :
-  sig
-    external create :
-      visual_options list -> share:[>`glarea] optobj -> gl_area obj
-      = "ml_gtk_gl_area_new"
-    external swap_buffers : [>`glarea] obj -> unit
-      = "ml_gtk_gl_area_swapbuffers"
-    external make_current : [>`glarea] obj -> bool
-      = "ml_gtk_gl_area_make_current"
-  end
-
-class area_signals : 'a obj ->
-  object
-    inherit widget_signals
-    constraint 'a = [>`glarea|`widget]
-    val obj : 'a obj
-    method display : callback:(unit -> unit) -> GtkSignal.id
-    method realize : callback:(unit -> unit) -> GtkSignal.id
-    method reshape :
-      callback:(width:int -> height:int -> unit) -> GtkSignal.id
-  end
-
-class area : gl_area obj ->
-  object
-    inherit widget
-    val obj : gl_area obj
-    method event : event_ops
-    method as_area : gl_area obj
-    method connect : area_signals
-    method make_current : unit -> unit
-    method set_size : width:int -> height:int -> unit
-    method swap_buffers : unit -> unit
-  end
-
-val area :
-  visual_options list ->
-  ?share:area ->
-  ?width:int ->
-  ?height:int -> ?packing:(widget -> unit) -> ?show:bool -> unit -> area
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glib.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/glib.ml
deleted file mode 100644 (file)
index 2fd0140..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-(* $Id$ *)
-
-type warning_func = string -> unit
-
-external set_warning_handler : (string -> unit) -> warning_func
-    = "ml_g_set_warning_handler"
-
-type print_func = string -> unit
-
-external set_print_handler : (string -> unit) -> print_func
-    = "ml_g_set_print_handler"
-
-module Main = struct
-  type t
-  external create : bool -> t = "ml_g_main_new"
-  external iteration : bool -> bool = "ml_g_main_iteration"
-  external pending : unit -> bool = "ml_g_main_pending"
-  external is_running : t -> bool = "ml_g_main_is_running"
-  external quit : t -> unit = "ml_g_main_quit"
-  external destroy : t -> unit = "ml_g_main_destroy"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gpointer.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gpointer.ml
deleted file mode 100644 (file)
index 7d28a1f..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-(* $Id$ *)
-
-(* marked pointers *)
-type 'a optaddr
-
-let optaddr : 'a option -> 'a optaddr =
-  function
-      None -> Obj.magic 0
-    | Some x -> Obj.magic x
-
-(* naked pointers *)
-type optstring
-
-external get_null : unit -> optstring = "ml_get_null"
-let raw_null = get_null ()
-
-let optstring : string option -> optstring =
-  function
-      None -> raw_null
-    | Some x -> Obj.magic x
-
-(* boxed pointers *)
-type boxed
-let boxed_null : boxed = Obj.magic (0, raw_null)
-
-type 'a optboxed
-
-let optboxed : 'a option -> 'a optboxed =
-  function
-      None -> Obj.magic boxed_null
-    | Some obj -> Obj.magic obj
-
-let may_box ~f obj : 'a optboxed =
-  match obj with
-    None -> Obj.magic boxed_null
-  | Some obj -> Obj.magic (f obj : 'a)
-
-(* Exceptions *)
-
-exception Null
-let _ =  Callback.register_exception "null_pointer" Null
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk.ml
deleted file mode 100644 (file)
index 0c7892e..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-(* $Id$ *)
-
-exception Error of string
-exception Warning of string
-exception Cannot_cast of string * string
-type 'a obj
-type 'a optobj = 'a obj Gpointer.optboxed
-type clampf = float
-
-module Tags = struct
-  type arrow_type = [ `UP|`DOWN|`LEFT|`RIGHT ]
-  type attach_options = [ `EXPAND|`SHRINK|`FILL ]
-  type direction_type = [ `TAB_FORWARD|`TAB_BACKWARD|`UP|`DOWN|`LEFT|`RIGHT ]
-  type justification = [ `LEFT|`RIGHT|`CENTER|`FILL ]
-  type match_type = [ `ALL|`ALL_TAIL|`HEAD|`TAIL|`EXACT|`LAST ]
-  type metric_type = [ `PIXELS|`INCHES|`CENTIMETERS ]
-  type orientation = [ `HORIZONTAL|`VERTICAL ]
-  type corner_type = [ `TOP_LEFT|`BOTTOM_LEFT|`TOP_RIGHT|`BOTTOM_RIGHT ]
-  type pack_type = [ `START|`END ]
-  type path_type = [ `WIDGET|`WIDGET_CLASS|`CLASS ]
-  type policy_type = [ `ALWAYS|`AUTOMATIC|`NEVER ]
-  type position = [ `LEFT|`RIGHT|`TOP|`BOTTOM ]
-  type preview_type = [ `COLOR|`GRAYSCALE ]
-  type relief_style = [ `NORMAL|`HALF|`NONE ]
-  type resize_mode = [ `PARENT|`QUEUE|`IMMEDIATE ]
-  type signal_run_type = [ `FIRST|`LAST|`BOTH|`NO_RECURSE|`ACTION|`NO_HOOKS ]
-  type scroll_type =
-      [ `NONE|`STEP_FORWARD|`STEP_BACKWARD|`PAGE_BACKWARD|`PAGE_FORWARD|`JUMP ]
-  type selection_mode = [ `SINGLE|`BROWSE|`MULTIPLE|`EXTENDED ]
-  type shadow_type = [ `NONE|`IN|`OUT|`ETCHED_IN|`ETCHED_OUT ]
-  type state_type = [ `NORMAL|`ACTIVE|`PRELIGHT|`SELECTED|`INSENSITIVE ] 
-  type submenu_direction = [ `LEFT|`RIGHT ]
-  type submenu_placement = [ `TOP_BOTTOM|`LEFT_RIGHT ]
-  type toolbar_style = [ `ICONS|`TEXT|`BOTH ]
-  type trough_type = [ `NONE|`START|`END|`JUMP ]
-  type update_type = [ `CONTINUOUS|`DISCONTINUOUS|`DELAYED ]
-  type visibility = [ `NONE|`PARTIAL|`FULL ]
-  type window_position = [ `NONE|`CENTER|`MOUSE|`CENTER_ALWAYS ]
-  type window_type = [ `TOPLEVEL|`DIALOG|`POPUP ]
-  type sort_type = [ `ASCENDING|`DESCENDING ]
-  type fundamental_type =
-    [ `INVALID|`NONE|`CHAR|`BOOL|`INT|`UINT|`LONG|`ULONG|`FLOAT|`DOUBLE
-     |`STRING|`ENUM|`FLAGS|`BOXED|`FOREIGN|`CALLBACK|`ARGS|`POINTER
-     |`SIGNAL|`C_CALLBACK|`OBJECT ]
-
-  type accel_flag = [ `VISIBLE|`SIGNAL_VISIBLE|`LOCKED ]
-  type button_box_style = [ `DEFAULT_STYLE|`SPREAD|`EDGE|`START|`END ]
-  type expand_type = [ `X|`Y|`BOTH|`NONE ]
-  type packer_options = [ `PACK_EXPAND|`FILL_X|`FILL_Y ]
-  type side_type = [ `TOP|`BOTTOM|`LEFT|`RIGHT ]
-  type anchor_type = [ `CENTER|`NORTH|`NW|`NE|`SOUTH|`SW|`SE|`WEST|`EAST ]
-  type update_policy = [ `ALWAYS|`IF_VALID|`SNAP_TO_TICKS ]
-  type cell_type = [ `EMPTY|`TEXT|`PIXMAP|`PIXTEXT|`WIDGET ]
-  type button_action = [ `SELECTS|`DRAGS|`EXPANDS ]
-  type calendar_display_options =
-    [ `SHOW_HEADING|`SHOW_DAY_NAMES|`NO_MONTH_CHANGE|`SHOW_WEEK_NUMBERS
-     |`WEEK_START_MONDAY ]
-  type spin_button_update_policy = [ `ALWAYS|`IF_VALID ]
-  type spin_type =
-    [ `STEP_FORWARD|`STEP_BACKWARD|`PAGE_FORWARD|`PAGE_BACKWARD
-     |`HOME|`END|`USER_DEFINED of float ]
-  type progress_bar_style = [ `CONTINUOUS|`DISCRETE ]
-  type progress_bar_orientation =
-    [ `LEFT_TO_RIGHT|`RIGHT_TO_LEFT|`BOTTOM_TO_TOP|`TOP_TO_BOTTOM ]
-  type dest_defaults = [ `MOTION|`HIGHLIGHT|`DROP|`ALL ]
-  type target_flags = [ `SAME_APP|`SAME_WIDGET ]
-  type font_metric_type = [ `PIXELS|`POINTS ]
-  type font_type = [ `BITMAP|`SCALABLE|`SCALABLE_BITMAP|`ALL ]
-  type font_filter_type = [ `BASE|`USER ]
-end
-open Tags
-
-type gtk_type
-type gtk_class
-
-type accel_group
-
-type style
-type 'a group = 'a obj option
-
-type statusbar_message
-type statusbar_context
-
-type color = { red: float; green: float; blue: float; opacity: float }
-type rectangle  = { x: int; y: int; width: int; height: int }
-type target_entry = { target: string; flags: target_flags list; info: int }
-
-type data = [`data]
-type adjustment = [`data|`adjustment]
-type tooltips = [`data|`tooltips]
-type widget = [`widget]
-type container = [`widget|`container]
-type alignment = [`widget|`container|`bin|`alignment]
-type event_box = [`widget|`container|`bin|`eventbox]
-type frame = [`widget|`container|`bin|`frame]
-type aspect_frame = [`widget|`container|`bin|`frame|`aspect]
-type handle_box = [`widget|`container|`bin|`handlebox]
-type invisible = [`widget|`container|`bin|`invisible]
-type item = [`widget|`container|`bin|`item]
-type list_item = [`widget|`container|`bin|`item|`listitem]
-type menu_item = [`widget|`container|`bin|`item|`menuitem]
-type check_menu_item = [`widget|`container|`bin|`item|`menuitem|`checkmenuitem]
-type radio_menu_item =
-    [`widget|`container|`bin|`item|`menuitem|`checkmenuitem|`radiomenuitem]
-type tree_item = [`widget|`container|`bin|`item|`treeitem]
-type viewport = [`widget|`container|`bin|`viewport]
-type window = [`widget|`container|`bin|`window]
-type color_selection_dialog = [`widget|`container|`window|`colorseldialog]
-type dialog = [`widget|`container|`bin|`window|`dialog]
-type input_dialog = [`widget|`container|`bin|`window|`dialog|`inputdialog]
-type file_selection = [`widget|`container|`bin|`window|`filesel]
-type font_selection_dialog = [`widget|`container|`bin|`window|`fontseldialog]
-type plug = [`widget|`container|`bin|`window|`plug]
-type box = [`widget|`container|`box]
-type button_box = [`widget|`container|`box|`bbox]
-type gamma_curve = [`widget|`container|`bbox|`gamma]
-type color_selection = [`widget|`container|`box|`colorsel]
-type combo = [`widget|`container|`box|`combo]
-type statusbar = [`widget|`container|`box|`statusbar]
-type button = [`widget|`container|`button]
-type toggle_button = [`widget|`container|`button|`toggle]
-type radio_button = [`widget|`container|`button|`toggle|`radio]
-type option_menu = [`widget|`container|`button|`optionmenu]
-type clist = [`widget|`container|`clist]
-type fixed = [`widget|`container|`fixed]
-type layout = [`widget|`container|`layout]
-type liste = [`widget|`container|`list]
-type menu_shell = [`widget|`container|`menushell]
-type menu = [`widget|`container|`menushell|`menu]
-type menu_bar = [`widget|`container|`menushell|`menubar]
-type notebook = [`widget|`container|`notebook]
-type font_selection = [`widget|`container|`notebook|`fontsel]
-type packer = [`widget|`container|`packer]
-type paned = [`widget|`container|`paned]
-type scrolled_window = [`widget|`container|`scrolled]
-type socket = [`widget|`container|`socket]
-type table = [`widget|`container|`table]
-type toolbar = [`widget|`container|`toolbar]
-type tree = [`widget|`container|`tree]
-type calendar = [`widget|`calendar]
-type drawing_area = [`widget|`drawing]
-type editable = [`widget|`editable]
-type entry = [`widget|`editable|`entry]
-type spin_button = [`widget|`editable|`entry|`spinbutton]
-type text = [`widget|`editable|`text]
-type misc = [`widget|`misc]
-type arrow = [`widget|`misc|`arrow]
-type image = [`widget|`misc|`image]
-type label = [`widget|`misc|`label]
-type tips_query = [`widget|`misc|`label|`tipsquery]
-type pixmap = [`widget|`misc|`pixmap]
-type progress = [`widget|`progress]
-type progress_bar = [`widget|`progress|`progressbar]
-type range = [`widget|`range]
-type scale = [`widget|`range|`scale]
-type scrollbar = [`widget|`range|`scrollbar]
-type ruler = [`widget|`ruler]
-type separator = [`widget|`separator]
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkArgv.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkArgv.ml
deleted file mode 100644 (file)
index 5e60c8d..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-
-type data =
-  | NONE
-  | CHAR of char
-  | BOOL of bool
-  | INT of int
-  | FLOAT of float
-  | STRING of string option
-  | OBJECT of unit obj option
-  | POINTER of Gpointer.boxed option
-
-type 'a result =
-  [ `NONE
-  | `CHAR of char | `BOOL of bool | `INT of int
-  | `UINT of int32 | `LONG of nativeint | `ULONG of nativeint
-  | `FLOAT of float | `DOUBLE of float
-  | `STRING of string option | `ENUM of int | `FLAGS of int32
-  | `BOXED of Gpointer.boxed option
-  | `POINTER of Gpointer.boxed option
-  | `OBJECT of 'a obj option ]
-
-module Arg = struct
-  type t
-  external shift : t -> pos:int -> t = "ml_gtk_arg_shift"
-  external get_type : t -> gtk_type = "ml_gtk_arg_get_type"
-  external get : t -> data = "ml_gtk_arg_get"
-  external set_retloc : t -> 'a result -> unit = "ml_gtk_arg_set_retloc"
-  external get_pointer : t -> Gpointer.boxed = "ml_gtk_arg_get_pointer"
-  external get_nativeint : t -> nativeint = "ml_gtk_arg_get_nativeint"
-
-  (* Safely get an argument *)
-  (*
-  external get_char : t -> char = "ml_gtk_arg_get_char"
-  external get_bool : t -> bool = "ml_gtk_arg_get_bool"
-  external get_int : t -> int = "ml_gtk_arg_get_int"
-  external get_float : t -> float = "ml_gtk_arg_get_float"
-  external get_string : t -> string option = "ml_gtk_arg_get_string"
-  external get_object : t -> unit obj option = "ml_gtk_arg_get_object"
-  *)
-  (* Safely set a result
-     Beware: this is not the opposite of get, arguments and results
-     are two different ways to use GtkArg. *)
-  (*
-  external set_char : t -> char -> unit = "ml_gtk_arg_set_char"
-  external set_bool : t -> bool -> unit = "ml_gtk_arg_set_bool"
-  external set_int : t -> int -> unit = "ml_gtk_arg_set_int"
-  external set_nativeint : t -> nativeint -> unit = "ml_gtk_arg_set_nativeint"
-  external set_float : t -> float -> unit = "ml_gtk_arg_set_float"
-  external set_string : t -> string -> unit = "ml_gtk_arg_set_string"
-  external set_pointer : t -> Gpointer.boxed -> unit = "ml_gtk_arg_set_pointer"
-  external set_object : t -> 'a obj -> unit = "ml_gtk_arg_set_object"
-  *)
-end
-
-open Arg
-type raw_obj
-type t = { referent: raw_obj; nargs: int; args: Arg.t }
-let nth arg ~pos =
-  if pos < 0 || pos >= arg.nargs then invalid_arg "GtkArg.Vect.nth";
-  shift arg.args ~pos
-let result arg =
-  if arg.nargs < 0 then invalid_arg "GtkArgv.result";
-  shift arg.args ~pos:arg.nargs
-external wrap_object : raw_obj -> unit obj = "Val_GtkObject"
-let referent arg =
-  if arg.referent == Obj.magic (-1) then invalid_arg "GtkArgv.referent";
-  wrap_object arg.referent
-let get_result_type arg = get_type (result arg)
-let get_type arg ~pos = get_type (nth arg ~pos)
-let get arg ~pos = get (nth arg ~pos)
-let set_result arg = set_retloc (result arg)
-
-let get_args arg =
-  let rec loop args ~pos =
-    if pos < 0 then args
-    else loop (get arg ~pos :: args) ~pos:(pos-1)
-  in loop [] ~pos:(arg.nargs - 1)
-
-let get_pointer arg ~pos = get_pointer (nth arg ~pos)
-let get_nativeint arg ~pos = get_nativeint (nth arg ~pos)
-
-(*
-let get_char arg ~pos = get_char (nth arg ~pos)
-let get_bool arg ~pos = get_bool (nth arg ~pos)
-let get_int arg ~pos = get_int (nth arg ~pos)
-let get_float arg ~pos = get_float (nth arg ~pos)
-let get_string arg ~pos = get_string (nth arg ~pos)
-let get_object arg ~pos = get_object (nth arg ~pos)
-let set_result_char arg = set_char (result arg)
-let set_result_bool arg = set_bool (result arg)
-let set_result_int arg = set_int (result arg)
-let set_result_nativeint arg = set_nativeint (result arg)
-let set_result_float arg = set_float (result arg)
-let set_result_string arg = set_string (result arg)
-let set_result_pointer arg = set_pointer (result arg)
-let set_result_object arg = set_object (result arg)
-*)
-
-external string_at_pointer : ?pos:int -> ?len:int -> Gpointer.boxed -> string
-    = "ml_string_at_pointer"
-external int_at_pointer : Gpointer.boxed -> int
-    = "ml_int_at_pointer"
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBase.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBase.ml
deleted file mode 100644 (file)
index 3b1a00f..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-
-module Type = struct
-  external name : gtk_type -> string = "ml_gtk_type_name"
-  external from_name : string -> gtk_type = "ml_gtk_type_from_name"
-  external parent : gtk_type -> gtk_type = "ml_gtk_type_parent"
-  external get_class : gtk_type -> gtk_class = "ml_gtk_type_class"
-  external parent_class : gtk_type -> gtk_class = "ml_gtk_type_parent_class"
-  external is_a : gtk_type -> gtk_type -> bool = "ml_gtk_type_is_a"
-  external fundamental : gtk_type -> fundamental_type
-      = "ml_gtk_type_fundamental"
-end
-
-module Object = struct
-  external get_type : 'a obj -> gtk_type = "ml_gtk_object_type"
-  let is_a obj name =
-    Type.is_a (get_type obj) (Type.from_name name)
-  external destroy : 'a obj -> unit = "ml_gtk_object_destroy"
-  external coerce : 'a obj -> unit obj = "%identity"
-  external unsafe_cast : 'a obj -> 'b obj = "%identity"
-  let try_cast w name =
-    if is_a w name then unsafe_cast w
-    else raise (Cannot_cast(Type.name(get_type w), name))
-  let get_id (obj : 'a obj) : int = (snd (Obj.magic obj) lor 0)
-  module Signals = struct
-    open GtkSignal
-    let destroy : (_,_) t =
-      { name = "destroy"; marshaller = marshal_unit }
-  end
-end
-
-module Widget = struct
-  let cast w : widget obj = Object.try_cast w "GtkWidget"
-  external coerce : [>`widget] obj -> widget obj = "%identity"
-  external unparent : [>`widget] obj -> unit = "ml_gtk_widget_unparent"
-  external show : [>`widget] obj -> unit = "ml_gtk_widget_show"
-  external show_now : [>`widget] obj -> unit = "ml_gtk_widget_show_now"
-  external show_all : [>`widget] obj -> unit = "ml_gtk_widget_show_all"
-  external hide : [>`widget] obj -> unit = "ml_gtk_widget_hide"
-  external hide_all : [>`widget] obj -> unit = "ml_gtk_widget_hide_all"
-  external map : [>`widget] obj -> unit = "ml_gtk_widget_map"
-  external unmap : [>`widget] obj -> unit = "ml_gtk_widget_unmap"
-  external realize : [>`widget] obj -> unit = "ml_gtk_widget_realize"
-  external unrealize : [>`widget] obj -> unit = "ml_gtk_widget_unrealize"
-  external queue_draw : [>`widget] obj -> unit = "ml_gtk_widget_queue_draw"
-  external queue_resize : [>`widget] obj -> unit = "ml_gtk_widget_queue_resize"
-  external draw : [>`widget] obj -> Gdk.Rectangle.t option -> unit
-      = "ml_gtk_widget_draw"
-  external draw_focus : [>`widget] obj -> unit
-      = "ml_gtk_widget_draw_focus"
-  external draw_default : [>`widget] obj -> unit
-      = "ml_gtk_widget_draw_default"
-  external event : [>`widget] obj -> 'a Gdk.event -> bool
-      = "ml_gtk_widget_event"
-  external activate : [>`widget] obj -> bool
-      = "ml_gtk_widget_activate"
-  external reparent : [>`widget] obj -> [>`widget] obj -> unit
-      = "ml_gtk_widget_reparent"
-  external popup : [>`widget] obj -> x:int -> y:int -> unit
-      = "ml_gtk_widget_popup"
-  external intersect :
-      [>`widget] obj -> Gdk.Rectangle.t -> Gdk.Rectangle.t option
-      = "ml_gtk_widget_intersect"
-  external set_can_default : [>`widget] obj -> bool -> unit
-      = "ml_gtk_widget_set_can_default"
-  external set_can_focus : [>`widget] obj -> bool -> unit
-      = "ml_gtk_widget_set_can_focus"
-  external grab_focus : [>`widget] obj -> unit
-      = "ml_gtk_widget_grab_focus"
-  external grab_default : [>`widget] obj -> unit
-      = "ml_gtk_widget_grab_default"
-  external set_name : [>`widget] obj -> string -> unit
-      = "ml_gtk_widget_set_name"
-  external get_name : [>`widget] obj -> string
-      = "ml_gtk_widget_get_name"
-  external set_state : [>`widget] obj -> state_type -> unit
-      = "ml_gtk_widget_set_state"
-  external set_sensitive : [>`widget] obj -> bool -> unit
-      = "ml_gtk_widget_set_sensitive"
-  external set_uposition : [>`widget] obj -> x:int -> y:int -> unit
-      = "ml_gtk_widget_set_uposition"
-  external set_usize : [>`widget] obj -> width:int -> height:int -> unit
-      = "ml_gtk_widget_set_usize"
-  external add_events : [>`widget] obj -> Gdk.Tags.event_mask list -> unit
-      = "ml_gtk_widget_add_events"
-  external set_events : [>`widget] obj -> Gdk.Tags.event_mask list -> unit
-      = "ml_gtk_widget_set_events"
-  external set_extension_events :
-      [>`widget] obj -> Gdk.Tags.extension_events -> unit
-      = "ml_gtk_widget_set_extension_events"
-  external get_toplevel : [>`widget] obj -> widget obj
-      = "ml_gtk_widget_get_toplevel"
-  external get_ancestor : [>`widget] obj -> gtk_type -> widget obj
-      = "ml_gtk_widget_get_ancestor"
-  external get_colormap : [>`widget] obj -> Gdk.colormap
-      = "ml_gtk_widget_get_colormap"
-  external get_visual : [>`widget] obj -> Gdk.visual
-      = "ml_gtk_widget_get_visual"
-  external get_pointer : [>`widget] obj -> int * int
-      = "ml_gtk_widget_get_pointer"
-  external is_ancestor : [>`widget] obj -> [>`widget] obj -> bool
-      = "ml_gtk_widget_is_ancestor"
-  external set_style : [>`widget] obj -> style -> unit
-      = "ml_gtk_widget_set_style"
-  external set_rc_style : [>`widget] obj -> unit
-      = "ml_gtk_widget_set_rc_style"
-  external ensure_style : [>`widget] obj -> unit
-      = "ml_gtk_widget_ensure_style"
-  external get_style : [>`widget] obj -> style
-      = "ml_gtk_widget_get_style"
-  external restore_default_style : [>`widget] obj -> unit
-      = "ml_gtk_widget_restore_default_style"
-  external add_accelerator :
-      ([>`widget] as 'a) obj -> sgn:('a,unit->unit) GtkSignal.t ->
-      accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list ->
-      ?flags:accel_flag list -> unit
-      = "ml_gtk_widget_add_accelerator_bc" "ml_gtk_widget_add_accelerator"
-  external remove_accelerator :
-      [>`widget] obj -> accel_group ->
-      key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> unit
-      = "ml_gtk_widget_remove_accelerator"
-  external lock_accelerators : [>`widget] obj -> unit
-      = "ml_gtk_widget_lock_accelerators"
-  external unlock_accelerators : [>`widget] obj -> unit
-      = "ml_gtk_widget_unlock_accelerators"
-  external accelerators_locked : [>`widget] obj -> bool
-      = "ml_gtk_widget_accelerators_locked"
-  external window : [>`widget] obj -> Gdk.window
-      = "ml_GtkWidget_window"
-  external visible : [>`widget] obj -> bool
-      = "ml_GTK_WIDGET_VISIBLE"
-  external has_focus : [>`widget] obj -> bool
-      = "ml_GTK_WIDGET_HAS_FOCUS"
-  external parent : [>`widget] obj -> widget obj
-      = "ml_gtk_widget_parent"
-  external set_app_paintable : [>`widget] obj -> bool -> unit
-      = "ml_gtk_widget_set_app_paintable"
-  external allocation : [>`widget] obj -> rectangle
-      = "ml_gtk_widget_allocation"
-  external set_colormap : [>`widget] obj -> Gdk.colormap -> unit
-      = "ml_gtk_widget_set_colormap"
-  external set_visual : [>`widget] obj -> Gdk.visual -> unit
-      = "ml_gtk_widget_set_visual"
-  external set_default_colormap : Gdk.colormap -> unit
-      = "ml_gtk_widget_set_default_colormap"
-  external set_default_visual : Gdk.visual -> unit
-      = "ml_gtk_widget_set_default_visual"
-  external get_default_colormap : unit -> Gdk.colormap
-      = "ml_gtk_widget_get_default_colormap"
-  external get_default_visual : unit -> Gdk.visual
-      = "ml_gtk_widget_get_default_visual"
-  external push_colormap : Gdk.colormap -> unit
-      = "ml_gtk_widget_push_colormap"
-  external push_visual : Gdk.visual -> unit
-      = "ml_gtk_widget_push_visual"
-  external pop_colormap : unit -> unit
-      = "ml_gtk_widget_pop_colormap"
-  external pop_visual : unit -> unit
-      = "ml_gtk_widget_pop_visual"
-  module Signals = struct
-    open GtkArgv
-    open GtkSignal
-    let marshal f _ = function
-      | OBJECT(Some p) :: _ -> f (cast p)
-      |        _ -> invalid_arg "GtkBase.Widget.Signals.marshal"
-    let marshal_opt f _ = function
-      | OBJECT(Some obj) :: _ -> f (Some (cast obj))
-      | OBJECT None :: _ -> f None
-      | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_opt"
-    let marshal_style f _ = function
-      | POINTER p :: _ -> f (Obj.magic p : Gtk.style option)
-      | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_opt"
-    let marshal_drag1 f _ = function
-      | POINTER(Some p) :: _ -> f (Obj.magic p : Gdk.drag_context)
-      |        _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag1"
-    let marshal_drag2 f _ = function
-      | POINTER(Some p) :: INT time :: _ ->
-         f (Obj.magic p : Gdk.drag_context) ~time
-      |        _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag2"
-    let marshal_drag3 f argv = function
-      | POINTER(Some p) :: INT x :: INT y :: INT time :: _ ->
-         let res = f (Obj.magic p : Gdk.drag_context) ~x ~y ~time
-         in GtkArgv.set_result argv (`BOOL res)
-      |        _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag3"
-    let show : ([>`widget],_) t =
-      { name = "show"; marshaller = marshal_unit }
-    let hide : ([>`widget],_) t =
-      { name = "hide"; marshaller = marshal_unit }
-    let map : ([>`widget],_) t =
-      { name = "map"; marshaller = marshal_unit }
-    let unmap : ([>`widget],_) t =
-      { name = "unmap"; marshaller = marshal_unit }
-    let realize : ([>`widget],_) t =
-      { name = "realize"; marshaller = marshal_unit }
-    let draw : ([>`widget],_) t =
-      let marshal f _ = function
-       | POINTER(Some p) :: _ -> f (Obj.magic p : Gdk.Rectangle.t)
-       | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_draw"
-      in { name = "draw"; marshaller = marshal }
-    let draw_focus : ([>`widget],_) t =
-      { name = "draw_focus"; marshaller = marshal_unit }
-    let draw_default : ([>`widget],_) t =
-      { name = "draw_default"; marshaller = marshal_unit }
-    external val_state : int -> state_type = "ml_Val_state_type"
-    let state_changed : ([>`widget],_) t =
-      let marshal f = marshal_int (fun x -> f (val_state x)) in
-      { name = "state_changed"; marshaller = marshal }
-    let parent_set : ([>`widget],_) t =
-      { name = "parent_set"; marshaller = marshal_opt }
-    let style_set : ([>`widget],_) t =
-      { name = "style_set"; marshaller = marshal_style }
-    let drag_begin : ([>`widget],_) t =
-      { name = "drag_begin"; marshaller = marshal_drag1 }
-    let drag_end : ([>`widget],_) t =
-      { name = "drag_end"; marshaller = marshal_drag1 }
-    let drag_data_delete : ([>`widget],_) t =
-      { name = "drag_data_delete"; marshaller = marshal_drag1 }
-    let drag_leave : ([>`widget],_) t =
-      { name = "drag_leave"; marshaller = marshal_drag2 }
-    let drag_motion : ([>`widget],_) t =
-      { name = "drag_motion"; marshaller = marshal_drag3 }
-    let drag_drop : ([>`widget],_) t =
-      { name = "drag_drop"; marshaller = marshal_drag3 }
-    let drag_data_get : ([>`widget],_) t =
-      let marshal f argv = function
-        | POINTER(Some p) :: POINTER(Some q) :: INT info :: INT time :: _ ->
-           f (Obj.magic p : Gdk.drag_context)
-             (Obj.magic q : GtkData.Selection.t) 
-             ~info
-             ~time
-       | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag_data_get"
-      in
-      { name = "drag_data_get"; marshaller = marshal }
-    let drag_data_received : ([>`widget],_) t =
-      let marshal f _ = function
-        | POINTER(Some p) :: INT x :: INT y :: POINTER(Some q) ::
-          INT info :: INT time :: _ ->
-           f (Obj.magic p : Gdk.drag_context) ~x ~y
-              (Obj.magic q : GtkData.Selection.t)
-             ~info ~time
-       | _ -> invalid_arg "GtkBase.Widget.Signals.marshal_drag_data_received"
-      in
-      { name = "drag_data_received"; marshaller = marshal }
-
-    module Event = struct
-      let marshal f argv = function
-        | [POINTER(Some p)] ->
-           let ev = GdkEvent.unsafe_copy p in
-            GtkArgv.set_result argv (`BOOL(f ev))
-       | _ -> invalid_arg "GtkBase.Widget.Event.marshal"
-      let any : ([>`widget], Gdk.Tags.event_type Gdk.event -> bool) t =
-       { name = "event"; marshaller = marshal }
-      let button_press : ([>`widget], GdkEvent.Button.t -> bool) t =
-       { name = "button_press_event"; marshaller = marshal }
-      let button_release : ([>`widget], GdkEvent.Button.t -> bool) t =
-       { name = "button_release_event"; marshaller = marshal }
-      let motion_notify : ([>`widget], GdkEvent.Motion.t -> bool) t =
-       { name = "motion_notify_event"; marshaller = marshal }
-      let delete : ([>`widget], [`DELETE] Gdk.event -> bool) t =
-       { name = "delete_event"; marshaller = marshal }
-      let destroy : ([>`widget], [`DESTROY] Gdk.event -> bool) t =
-       { name = "destroy_event"; marshaller = marshal }
-      let expose : ([>`widget], GdkEvent.Expose.t -> bool) t =
-       { name = "expose_event"; marshaller = marshal }
-      let key_press : ([>`widget], GdkEvent.Key.t -> bool) t =
-       { name = "key_press_event"; marshaller = marshal }
-      let key_release : ([>`widget], GdkEvent.Key.t -> bool) t =
-       { name = "key_release_event"; marshaller = marshal }
-      let enter_notify : ([>`widget], GdkEvent.Crossing.t -> bool) t =
-       { name = "enter_notify_event"; marshaller = marshal }
-      let leave_notify : ([>`widget], GdkEvent.Crossing.t -> bool) t =
-       { name = "leave_notify_event"; marshaller = marshal }
-      let configure : ([>`widget], GdkEvent.Configure.t -> bool) t =
-       { name = "configure_event"; marshaller = marshal }
-      let focus_in : ([>`widget], GdkEvent.Focus.t -> bool) t =
-       { name = "focus_in_event"; marshaller = marshal }
-      let focus_out : ([>`widget], GdkEvent.Focus.t -> bool) t =
-       { name = "focus_out_event"; marshaller = marshal }
-      let map : ([>`widget], [`MAP] Gdk.event -> bool) t =
-       { name = "map_event"; marshaller = marshal }
-      let unmap : ([>`widget], [`UNMAP] Gdk.event -> bool) t =
-       { name = "unmap_event"; marshaller = marshal }
-      let property_notify : ([>`widget], GdkEvent.Property.t -> bool) t =
-       { name = "property_notify_event"; marshaller = marshal }
-      let selection_clear : ([>`widget], GdkEvent.Selection.t -> bool) t =
-       { name = "selection_clear_event"; marshaller = marshal }
-      let selection_request : ([>`widget], GdkEvent.Selection.t -> bool) t =
-       { name = "selection_request_event"; marshaller = marshal }
-      let selection_notify : ([>`widget], GdkEvent.Selection.t -> bool) t =
-       { name = "selection_notify_event"; marshaller = marshal }
-      let proximity_in : ([>`widget], GdkEvent.Proximity.t -> bool) t =
-       { name = "proximity_in_event"; marshaller = marshal }
-      let proximity_out : ([>`widget], GdkEvent.Proximity.t -> bool) t =
-       { name = "proximity_out_event"; marshaller = marshal }
-    end
-  end
-end
-
-module Container = struct
-  let cast w : container obj = Object.try_cast w "GtkContainer"
-  external coerce : [>`container] obj -> container obj = "%identity"
-  external set_border_width : [>`container] obj -> int -> unit
-      = "ml_gtk_container_set_border_width"
-  external set_resize_mode : [>`container] obj -> resize_mode -> unit
-      = "ml_gtk_container_set_resize_mode"
-  external add : [>`container] obj -> [>`widget] obj -> unit
-      = "ml_gtk_container_add"
-  external remove : [>`container] obj -> [>`widget] obj -> unit
-      = "ml_gtk_container_remove"
-  let set ?border_width ?(width = -2) ?(height = -2) w =
-    may border_width ~f:(set_border_width w);
-    if width <> -2 || height <> -2 then
-      Widget.set_usize w ?width ?height
-  external foreach : [>`container] obj -> f:(widget obj-> unit) -> unit
-      = "ml_gtk_container_foreach"
-  let children w =
-    let l = ref [] in
-    foreach w ~f:(fun c -> l := c :: !l);
-    List.rev !l
-  external focus : [>`container] obj -> direction_type -> bool
-      = "ml_gtk_container_focus"
-  (* Called by Widget.grab_focus *)
-  external set_focus_child : [>`container] obj -> [>`widget] optobj -> unit
-      = "ml_gtk_container_set_focus_child"
-  external set_focus_vadjustment :
-      [>`container] obj -> [>`adjustment] optobj -> unit
-      = "ml_gtk_container_set_focus_vadjustment"
-  external set_focus_hadjustment :
-      [>`container] obj -> [>`adjustment] optobj -> unit
-      = "ml_gtk_container_set_focus_hadjustment"
-  module Signals = struct
-    open GtkSignal
-    let add : ([>`container],_) t =
-      { name = "add"; marshaller = Widget.Signals.marshal }
-    let remove : ([>`container],_) t =
-      { name = "remove"; marshaller = Widget.Signals.marshal }
-    let need_resize : ([>`container],_) t =
-      let marshal f argv _ = GtkArgv.set_result argv (`BOOL(f ())) in
-      { name = "need_resize"; marshaller = marshal }
-    external val_direction : int -> direction_type = "ml_Val_direction_type"
-    let focus : ([>`container],_) t =
-      let marshal f argv = function
-        | GtkArgv.INT dir :: _ ->
-            GtkArgv.set_result argv (`BOOL(f (val_direction dir)))
-        | _ -> invalid_arg "GtkBase.Container.Signals.marshal_focus"
-      in { name = "focus"; marshaller = marshal }
-  end
-end
-
-module Item = struct
-  let cast w : item obj = Object.try_cast w "GtkItem"
-  external coerce : [>`item] obj -> item obj = "%identity"
-  external select : [>`item] obj -> unit = "ml_gtk_item_select"
-  external deselect : [>`item] obj -> unit = "ml_gtk_item_deselect"
-  external toggle : [>`item] obj -> unit = "ml_gtk_item_toggle"
-  module Signals = struct
-    open GtkSignal
-    let select : ([>`item],_) t =
-      { name = "select"; marshaller = marshal_unit }
-    let deselect : ([>`item],_) t =
-      { name = "deselect"; marshaller = marshal_unit }
-    let toggle : ([>`item],_) t =
-      { name = "toggle"; marshaller = marshal_unit }
-  end
-end
-
-
-module DnD = struct
-  external dest_set :
-      [>`widget] obj -> flags:dest_defaults list ->
-      targets:target_entry array -> actions:Gdk.Tags.drag_action list -> unit 
-    = "ml_gtk_drag_dest_set"
-  external dest_unset : [>`widget] obj -> unit
-      = "ml_gtk_drag_dest_unset"
-  external finish :
-      Gdk.drag_context -> success:bool -> del:bool -> time:int -> unit
-      = "ml_gtk_drag_finish"
-  external get_data :
-      [>`widget] obj -> Gdk.drag_context -> target:Gdk.atom -> time:int -> unit
-      = "ml_gtk_drag_get_data"
-  external get_source_widget : Gdk.drag_context -> widget obj
-      = "ml_gtk_drag_get_source_widget"
-  external highlight : [>`widget] obj -> unit = "ml_gtk_drag_highlight"
-  external unhighlight : [>`widget] obj -> unit = "ml_gtk_drag_unhighlight"
-  external set_icon_widget :
-      Gdk.drag_context -> [>`widget] obj -> hot_x:int -> hot_y:int -> unit
-      = "ml_gtk_drag_set_icon_widget"
-  external set_icon_pixmap :
-      Gdk.drag_context -> colormap:Gdk.colormap ->
-      Gdk.pixmap -> ?mask:Gdk.bitmap -> hot_x:int -> hot_y:int -> unit
-      = "ml_gtk_drag_set_icon_pixmap_bc" "ml_gtk_drag_set_icon_pixmap"
-  external set_icon_default : Gdk.drag_context -> unit
-      = "ml_gtk_drag_set_icon_default"
-  external set_default_icon :
-      colormap:Gdk.colormap -> Gdk.pixmap ->
-      ?mask:Gdk.bitmap -> hot_x:int -> hot_y:int -> unit
-      = "ml_gtk_drag_set_default_icon"
-  external source_set :
-      [>`widget] obj -> ?modi:Gdk.Tags.modifier list ->
-      targets:target_entry array -> actions:Gdk.Tags.drag_action list -> unit
-      = "ml_gtk_drag_source_set"
-  external source_set_icon :
-      [>`widget] obj -> colormap:Gdk.colormap ->
-      Gdk.pixmap -> ?mask:Gdk.bitmap -> unit
-      = "ml_gtk_drag_source_set_icon"
-  external source_unset : [>`widget] obj -> unit
-      = "ml_gtk_drag_source_unset"
-(*  external dest_handle_event : [>`widget] -> *)
-end
-
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBin.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkBin.ml
deleted file mode 100644 (file)
index ab4cc7e..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module Alignment = struct
-  let cast w : alignment obj = Object.try_cast w "GtkAlignment"
-  external create :
-      x:clampf -> y:clampf -> xscale:clampf -> yscale:clampf -> alignment obj
-      = "ml_gtk_alignment_new"
-  let create ?(x=0.5) ?(y=0.5) ?(xscale=1.) ?(yscale=1.) () =
-    create ~x ~y ~xscale ~yscale
-  external set :
-      ?x:clampf -> ?y:clampf -> ?xscale:clampf -> ?yscale:clampf ->
-      [>`alignment] obj -> unit
-      = "ml_gtk_alignment_set"
-end
-
-module EventBox = struct
-  let cast w : event_box obj = Object.try_cast w "GtkEventBox"
-  external create : unit -> event_box obj = "ml_gtk_event_box_new"
-end
-
-module Frame = struct
-  let cast w : frame obj = Object.try_cast w "GtkFrame"
-  external coerce : [>`frame] obj -> frame obj = "%identity"
-  external create : string -> frame obj = "ml_gtk_frame_new"
-  external set_label : [>`frame] obj -> string -> unit
-      = "ml_gtk_frame_set_label"
-  external set_label_align : [>`frame] obj -> x:clampf -> y:clampf -> unit
-      = "ml_gtk_frame_set_label_align"
-  external set_shadow_type : [>`frame] obj -> shadow_type -> unit
-      = "ml_gtk_frame_set_shadow_type"
-  external get_label_xalign : [>`frame] obj -> float
-      = "ml_gtk_frame_get_label_xalign"
-  external get_label_yalign : [>`frame] obj -> float
-      = "ml_gtk_frame_get_label_yalign"
-  let set_label_align' ?x ?y w =
-    set_label_align w
-      ~x:(may_default get_label_xalign w ~opt:x)
-      ~y:(may_default get_label_yalign w ~opt:y)
-  let set ?label ?label_xalign ?label_yalign ?shadow_type w =
-    may label ~f:(set_label w);
-    if label_xalign <> None || label_yalign <> None then
-      set_label_align' w ?x:label_xalign ?y:label_yalign;
-    may shadow_type ~f:(set_shadow_type w)
-end
-
-module AspectFrame = struct
-  let cast w : aspect_frame obj = Object.try_cast w "GtkAspectFrame"
-  external create :
-      label:string -> xalign:clampf ->
-      yalign:clampf -> ratio:float -> obey_child:bool -> aspect_frame obj
-      = "ml_gtk_aspect_frame_new"
-  let create ?(label="") ?(xalign=0.5) ?(yalign=0.5)
-      ?(ratio=1.0) ?(obey_child=true) () =
-    create ~label ~xalign ~yalign ~ratio ~obey_child
-  external set :
-      [>`aspect] obj ->
-      xalign:clampf -> yalign:clampf -> ratio:float -> obey_child:bool -> unit
-      = "ml_gtk_aspect_frame_set"
-  external get_xalign : [>`aspect] obj -> clampf
-      = "ml_gtk_aspect_frame_get_xalign"
-  external get_yalign : [>`aspect] obj -> clampf
-      = "ml_gtk_aspect_frame_get_yalign"
-  external get_ratio : [>`aspect] obj -> clampf
-      = "ml_gtk_aspect_frame_get_ratio"
-  external get_obey_child : [>`aspect] obj -> bool
-      = "ml_gtk_aspect_frame_get_obey_child"
-  let set ?xalign ?yalign ?ratio ?obey_child w =
-    if xalign <> None || yalign <> None || ratio <> None || obey_child <> None
-    then set w
-       ~xalign:(may_default get_xalign w ~opt:xalign)
-       ~yalign:(may_default get_yalign w ~opt:yalign)
-       ~ratio:(may_default get_ratio w ~opt:ratio)
-       ~obey_child:(may_default get_obey_child w ~opt:obey_child)
-end
-
-module HandleBox = struct
-  let cast w : handle_box obj = Object.try_cast w "GtkHandleBox"
-  external create : unit -> handle_box obj = "ml_gtk_handle_box_new"
-  external set_shadow_type : [>`handlebox] obj -> shadow_type -> unit =
-   "ml_gtk_handle_box_set_shadow_type"
-  external set_handle_position : [>`handlebox] obj -> position -> unit =
-   "ml_gtk_handle_box_set_handle_position"
-  external set_snap_edge : [>`handlebox] obj -> position -> unit =
-   "ml_gtk_handle_box_set_snap_edge"
-  module Signals = struct
-    open GtkSignal
-    let child_attached : ([>`handlebox],_) t =
-      { name = "child_attached"; marshaller = Widget.Signals.marshal }
-    let child_detached : ([>`handlebox],_) t =
-      { name = "child_detached"; marshaller = Widget.Signals.marshal }
-  end
-end
-
-module Viewport = struct
-  let cast w : viewport obj = Object.try_cast w "GtkViewport"
-  external create :
-      [>`adjustment] optobj -> [>`adjustment] optobj -> viewport obj
-      = "ml_gtk_viewport_new"
-  let create ?hadjustment ?vadjustment () =
-    create (Gpointer.optboxed hadjustment) (Gpointer.optboxed vadjustment)
-  external get_hadjustment : [>`viewport] obj -> adjustment obj
-      = "ml_gtk_viewport_get_hadjustment"
-  external get_vadjustment : [>`viewport] obj -> adjustment obj
-      = "ml_gtk_viewport_get_vadjustment"
-  external set_hadjustment : [>`viewport] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_viewport_set_hadjustment"
-  external set_vadjustment : [>`viewport] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_viewport_set_vadjustment"
-  external set_shadow_type : [>`viewport] obj -> shadow_type -> unit
-      = "ml_gtk_viewport_set_shadow_type"
-  let set ?hadjustment ?vadjustment ?shadow_type w =
-    may hadjustment ~f:(set_hadjustment w);
-    may vadjustment ~f:(set_vadjustment w);
-    may shadow_type ~f:(set_shadow_type w)
-end
-
-module ScrolledWindow = struct
-  let cast w : scrolled_window obj = Object.try_cast w "GtkScrolledWindow"
-  external create :
-      [>`adjustment] optobj -> [>`adjustment] optobj -> scrolled_window obj
-      = "ml_gtk_scrolled_window_new"
-  let create ?hadjustment ?vadjustment () =
-    create (Gpointer.optboxed hadjustment) (Gpointer.optboxed vadjustment)
-  external set_hadjustment : [>`scrolled] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_scrolled_window_set_hadjustment"
-  external set_vadjustment : [>`scrolled] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_scrolled_window_set_vadjustment"
-  external get_hadjustment : [>`scrolled] obj -> adjustment obj
-      = "ml_gtk_scrolled_window_get_hadjustment"
-  external get_vadjustment : [>`scrolled] obj -> adjustment obj
-      = "ml_gtk_scrolled_window_get_vadjustment"
-  external set_policy : [>`scrolled] obj -> policy_type -> policy_type -> unit
-      = "ml_gtk_scrolled_window_set_policy"
-  external add_with_viewport : [>`scrolled] obj -> [>`widget] obj -> unit
-      = "ml_gtk_scrolled_window_add_with_viewport"
-  external get_hscrollbar_policy : [>`scrolled] obj -> policy_type
-      = "ml_gtk_scrolled_window_get_hscrollbar_policy"
-  external get_vscrollbar_policy : [>`scrolled] obj -> policy_type
-      = "ml_gtk_scrolled_window_get_vscrollbar_policy"
-  external set_placement : [>`scrolled] obj -> corner_type -> unit
-      = "ml_gtk_scrolled_window_set_placement"
-  let set_policy' ?hpolicy ?vpolicy w =
-    set_policy w
-      (may_default get_hscrollbar_policy w ~opt:hpolicy)
-      (may_default get_vscrollbar_policy w ~opt:vpolicy)
-  let set ?hpolicy ?vpolicy ?placement w =
-    if hpolicy <> None || vpolicy <> None then
-      set_policy' w ?hpolicy ?vpolicy;
-    may placement ~f:(set_placement w)
-end
-
-module Socket = struct
-  let cast w : socket obj = Object.try_cast w "GtkSocket"
-  external coerce : [>`socket] obj -> socket obj = "%identity"
-  external create : unit -> socket obj = "ml_gtk_socket_new"
-  external steal : [>`socket] obj -> Gdk.xid -> unit = "ml_gtk_socket_steal"
-end
-
-(*
-module Invisible = struct
-  let cast w : socket obj = Object.try_cast w "GtkInvisible"
-  external coerce : [>`invisible] obj -> invisible obj = "%identity"
-  external create : unit -> invisible obj = "ml_gtk_invisible_new"
-end
-*)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkButton.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkButton.ml
deleted file mode 100644 (file)
index 6d9ddf5..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module Button = struct
-  let cast w : button obj = Object.try_cast w "GtkButton"
-  external coerce : [>`button] obj -> button obj = "%identity"
-  external create : unit -> button obj = "ml_gtk_button_new"
-  external create_with_label : string -> button obj
-      = "ml_gtk_button_new_with_label"
-  let create ?label () =
-    match label with None -> create ()
-    | Some x -> create_with_label x
-  external pressed : [>`button] obj -> unit = "ml_gtk_button_pressed"
-  external released : [>`button] obj -> unit = "ml_gtk_button_released"
-  external clicked : [>`button] obj -> unit = "ml_gtk_button_clicked"
-  external enter : [>`button] obj -> unit = "ml_gtk_button_enter"
-  external leave : [>`button] obj -> unit = "ml_gtk_button_leave"
-  module Signals = struct
-    open GtkSignal
-    let pressed : ([>`button],_) t =
-      { name = "pressed"; marshaller = marshal_unit }
-    let released : ([>`button],_) t =
-      { name = "released"; marshaller = marshal_unit }
-    let clicked : ([>`button],_) t =
-      { name = "clicked"; marshaller = marshal_unit }
-    let enter : ([>`button],_) t =
-      { name = "enter"; marshaller = marshal_unit }
-    let leave : ([>`button],_) t =
-      { name = "leave"; marshaller = marshal_unit }
-  end
-end
-
-module ToggleButton = struct
-  let cast w : toggle_button obj = Object.try_cast w "GtkToggleButton"
-  external coerce : [>`toggle] obj -> toggle_button obj = "%identity"
-  external toggle_button_create : unit -> toggle_button obj
-      = "ml_gtk_toggle_button_new"
-  external toggle_button_create_with_label : string -> toggle_button obj
-      = "ml_gtk_toggle_button_new_with_label"
-  external check_button_create : unit -> toggle_button obj
-      = "ml_gtk_check_button_new"
-  external check_button_create_with_label : string -> toggle_button obj
-      = "ml_gtk_check_button_new_with_label"
-  let create_toggle ?label () =
-    match label with None -> toggle_button_create ()
-    | Some label -> toggle_button_create_with_label label
-  let create_check ?label () =
-    match label with None -> check_button_create ()
-    | Some label -> check_button_create_with_label label
-  external set_mode : [>`toggle] obj -> bool -> unit
-      = "ml_gtk_toggle_button_set_mode"
-  external set_active : [>`toggle] obj -> bool -> unit
-      = "ml_gtk_toggle_button_set_active"
-  let set ?active ?draw_indicator w =
-    may ~f:(set_mode w) draw_indicator;
-    may ~f:(set_active w) active
-  external get_active : [>`toggle] obj -> bool
-      = "ml_gtk_toggle_button_get_active"
-  external toggled : [>`toggle] obj -> unit
-      = "ml_gtk_toggle_button_toggled"
-  module Signals = struct
-    open GtkSignal
-    let toggled : ([>`toggle],_) t =
-      { name = "toggled"; marshaller = marshal_unit }
-  end
-end
-
-module RadioButton = struct
-  let cast w : radio_button obj = Object.try_cast w "GtkRadioButton"
-  external create : radio_button group -> radio_button obj
-      = "ml_gtk_radio_button_new"
-  external create_with_label : radio_button group -> string -> radio_button obj
-      = "ml_gtk_radio_button_new_with_label"
-  external set_group : [>`radio] obj -> radio_button group -> unit
-      = "ml_gtk_radio_button_set_group"
-  let create ?(group = None) ?label () =
-    match label with None -> create group
-    | Some label -> create_with_label group label
-end
-
-module Toolbar = struct
-  let cast w : toolbar obj = Object.try_cast w "GtkToolbar"
-  external create : orientation -> style:toolbar_style -> toolbar obj
-      = "ml_gtk_toolbar_new"
-  let create dir ?(style=`BOTH) () = create dir ~style
-  external insert_space : [>`toolbar] obj -> pos:int -> unit
-      = "ml_gtk_toolbar_insert_space"
-  let insert_space w ?(pos = -1) () = insert_space w ~pos
-  external insert_button :
-      [>`toolbar] obj -> kind:[`BUTTON|`TOGGLEBUTTON|`RADIOBUTTON] ->
-      text:string -> tooltip:string ->
-      tooltip_private:string ->
-      icon:[>`widget] optobj -> pos:int -> button obj
-      = "ml_gtk_toolbar_insert_element_bc" "ml_gtk_toolbar_insert_element"
-  let insert_button w ?(kind=`BUTTON) ?(text="") ?(tooltip="")
-      ?(tooltip_private="") ?icon ?(pos = -1) ?callback () =
-    let b =insert_button w ~kind ~text ~tooltip ~tooltip_private ~pos
-        ~icon:(Gpointer.optboxed icon)
-    in
-    match callback with
-    | None   -> b
-    | Some c -> GtkSignal.connect b ~sgn:Button.Signals.clicked
-         ~callback: c; b
-  external insert_widget :
-      [>`toolbar] obj -> [>`widget] obj ->
-      tooltip:string -> tooltip_private:string -> pos:int -> unit
-      = "ml_gtk_toolbar_insert_widget"
-  let insert_widget w ?(tooltip="") ?(tooltip_private="") ?(pos = -1) w' =
-    insert_widget w w' ~tooltip ~tooltip_private ~pos
-  external set_orientation : [>`toolbar] obj -> orientation -> unit =
-    "ml_gtk_toolbar_set_orientation"
-  external set_style : [>`toolbar] obj -> toolbar_style -> unit =
-    "ml_gtk_toolbar_set_style"
-  external set_space_size : [>`toolbar] obj -> int -> unit =
-    "ml_gtk_toolbar_set_space_size"
-  external set_space_style : [>`toolbar] obj -> [ `EMPTY|`LINE ] -> unit =
-    "ml_gtk_toolbar_set_space_style"
-  external set_tooltips : [>`toolbar] obj -> bool -> unit =
-    "ml_gtk_toolbar_set_tooltips"
-  external set_button_relief : [>`toolbar] obj -> relief_style -> unit =
-    "ml_gtk_toolbar_set_button_relief"
-  external get_button_relief : [>`toolbar] obj -> relief_style =
-    "ml_gtk_toolbar_get_button_relief"
-  let set ?orientation ?style ?space_size
-      ?space_style ?tooltips ?button_relief w =
-    may orientation ~f:(set_orientation w);
-    may style ~f:(set_style w);
-    may space_size ~f:(set_space_size w);
-    may space_style ~f:(set_space_style w);
-    may tooltips ~f:(set_tooltips w);
-    may button_relief ~f:(set_button_relief w)
-  module Signals = struct
-    open GtkSignal
-    external val_orientation : int -> orientation = "ml_Val_orientation"
-    external val_toolbar_style : int -> toolbar_style
-       = "ml_Val_toolbar_style"
-    let orientation_changed : ([>`toolbar],_) t =
-      let marshal f = marshal_int (fun x -> f (val_orientation x)) in
-      { name = "orientation_changed"; marshaller = marshal }
-    let style_changed : ([>`toolbar],_) t =
-      let marshal f = marshal_int (fun x -> f (val_toolbar_style x)) in
-      { name = "style_changed"; marshaller = marshal }
-  end
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkData.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkData.ml
deleted file mode 100644 (file)
index 5b7f90e..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-
-module AccelGroup = struct
-  external create : unit -> accel_group = "ml_gtk_accel_group_new"
-  external activate :
-      accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> bool
-      = "ml_gtk_accel_group_activate"
-  external groups_activate :
-      'a obj -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> bool
-      = "ml_gtk_accel_groups_activate"
-  external attach : accel_group -> 'a obj -> unit
-      = "ml_gtk_accel_group_attach"
-  external detach : accel_group -> 'a obj -> unit
-      = "ml_gtk_accel_group_detach"
-  external lock : accel_group -> unit
-      = "ml_gtk_accel_group_lock"
-  external unlock : accel_group -> unit
-      = "ml_gtk_accel_group_unlock"
-  external lock_entry :
-      accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> bool
-      = "ml_gtk_accel_group_lock_entry"
-  external add :
-      accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list ->
-      ?flags:accel_flag list ->
-      call:'a obj -> sgn:('a,unit->unit) GtkSignal.t -> unit
-      = "ml_gtk_accel_group_add_bc" "ml_gtk_accel_group_add"
-  external remove :
-      accel_group ->
-      key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> call:'a obj -> unit
-      = "ml_gtk_accel_group_remove"
-  external valid : key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> bool
-      = "ml_gtk_accelerator_valid"
-  external set_default_mod_mask : Gdk.Tags.modifier list option -> unit
-      = "ml_gtk_accelerator_set_default_mod_mask"
-end
-
-module Style = struct
-  external create : unit -> style = "ml_gtk_style_new"
-  external copy : style -> style = "ml_gtk_style_copy"
-  external attach : style -> Gdk.window -> style = "ml_gtk_style_attach"
-  external detach : style -> unit = "ml_gtk_style_detach"
-  external set_background : style -> Gdk.window -> state_type -> unit
-      = "ml_gtk_style_set_background"
-  external draw_hline :
-      style -> Gdk.window -> state_type -> x:int -> x:int -> y:int -> unit
-      = "ml_gtk_draw_hline_bc" "ml_gtk_draw_hline"
-  external draw_vline :
-      style -> Gdk.window -> state_type -> y:int -> y:int -> x:int -> unit
-      = "ml_gtk_draw_vline_bc" "ml_gtk_draw_vline"
-  external get_bg : style -> state:state_type -> Gdk.Color.t
-      = "ml_gtk_style_get_bg"
-  external set_bg : style -> state:state_type -> color:Gdk.Color.t -> unit
-      = "ml_gtk_style_set_bg"
-  external get_dark_gc : style -> state:state_type -> Gdk.gc
-      = "ml_gtk_style_get_dark_gc"
-  external get_light_gc : style -> state:state_type -> Gdk.gc
-      = "ml_gtk_style_get_light_gc"
-  external get_colormap : style -> Gdk.colormap = "ml_gtk_style_get_colormap"
-  external get_font : style -> Gdk.font = "ml_gtk_style_get_font"
-  external set_font : style -> Gdk.font -> unit = "ml_gtk_style_set_font"
-(*
-  let set st ?:background ?:font =
-    let may_set f = may fun:(f st) in
-    may_set set_background background;
-    may_set set_font font
-*)
-end
-
-module Data = struct
-  module Signals = struct
-    open GtkSignal
-    let disconnect : ([>`data],_) t =
-      { name = "disconnect"; marshaller = marshal_unit }
-  end
-end
-
-module Adjustment = struct
-  external create :
-      value:float -> lower:float -> upper:float ->
-      step_incr:float -> page_incr:float -> page_size:float -> adjustment obj
-      = "ml_gtk_adjustment_new_bc" "ml_gtk_adjustment_new"
-  external set_value : [>`adjustment] obj -> float -> unit
-      = "ml_gtk_adjustment_set_value"
-  external clamp_page :
-      [>`adjustment] obj -> lower:float -> upper:float -> unit
-      = "ml_gtk_adjustment_clamp_page"
-  external get_lower : [>`adjustment] obj -> float
-      = "ml_gtk_adjustment_get_lower"
-  external get_upper : [>`adjustment] obj -> float
-      = "ml_gtk_adjustment_get_upper"
-  external get_value : [>`adjustment] obj -> float
-      = "ml_gtk_adjustment_get_value"
-  external get_step_increment : [>`adjustment] obj -> float
-      = "ml_gtk_adjustment_get_step_increment"
-  external get_page_increment : [>`adjustment] obj -> float
-      = "ml_gtk_adjustment_get_page_increment"
-  external get_page_size : [>`adjustment] obj -> float
-      = "ml_gtk_adjustment_get_page_size"
-  module Signals = struct
-    open GtkSignal
-    let changed : ([>`adjustment],_) t =
-      { name = "changed"; marshaller = marshal_unit }
-    let value_changed : ([>`adjustment],_) t =
-      { name = "value_changed"; marshaller = marshal_unit }
-  end
-end
-
-module Tooltips = struct
-  external create : unit -> tooltips obj = "ml_gtk_tooltips_new"
-  external enable : [>`tooltips] obj -> unit = "ml_gtk_tooltips_enable"
-  external disable : [>`tooltips] obj -> unit = "ml_gtk_tooltips_disable"
-  external set_delay : [>`tooltips] obj -> int -> unit
-      = "ml_gtk_tooltips_set_delay"
-  external set_tip :
-      [>`tooltips] obj ->
-      [>`widget] obj -> ?text:string -> ?privat:string -> unit
-      = "ml_gtk_tooltips_set_tip"
-  external set_colors :
-      [>`tooltips] obj ->
-      ?foreground:Gdk.Color.t -> ?background:Gdk.Color.t -> unit -> unit
-      = "ml_gtk_tooltips_set_colors"
-  let set ?delay ?foreground ?background tt =
-    may ~f:(set_delay tt) delay;
-    if foreground <> None || background <> None then
-      set_colors tt ?foreground ?background ()
-end
-
-
-module Selection = struct
-  type t
-  external selection : t -> Gdk.atom
-      = "ml_gtk_selection_data_selection"
-  external target : t -> Gdk.atom
-      = "ml_gtk_selection_data_target"
-  external seltype : t -> Gdk.atom
-      = "ml_gtk_selection_data_type"
-  external format : t -> int
-      = "ml_gtk_selection_data_format"
-  external get_data : t -> string
-      = "ml_gtk_selection_data_get_data"       (* May raise Gpointer.null *)
-  external set :
-      t -> typ:Gdk.atom -> format:int -> ?data:string -> unit
-      = "ml_gtk_selection_data_set"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkEdit.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkEdit.ml
deleted file mode 100644 (file)
index bef2fed..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module Editable = struct
-  let cast w : editable obj = Object.try_cast w "GtkEditable"
-  external coerce : [>`editable] obj -> editable obj = "%identity"
-  external select_region : [>`editable] obj -> start:int -> stop:int -> unit
-      = "ml_gtk_editable_select_region"
-  external insert_text : [>`editable] obj -> string -> pos:int -> int
-      = "ml_gtk_editable_insert_text"
-  external delete_text : [>`editable] obj -> start:int -> stop:int -> unit
-      = "ml_gtk_editable_delete_text"
-  external get_chars : [>`editable] obj -> start:int -> stop:int -> string
-      = "ml_gtk_editable_get_chars"
-  external cut_clipboard : [>`editable] obj -> unit
-      = "ml_gtk_editable_cut_clipboard"
-  external copy_clipboard : [>`editable] obj -> unit
-      = "ml_gtk_editable_copy_clipboard"
-  external paste_clipboard : [>`editable] obj -> unit
-      = "ml_gtk_editable_paste_clipboard"
-  external claim_selection :
-      [>`editable] obj -> claim:bool -> time:int -> unit
-      = "ml_gtk_editable_claim_selection"
-  external delete_selection : [>`editable] obj -> unit
-      = "ml_gtk_editable_delete_selection"
-  external changed : [>`editable] obj -> unit = "ml_gtk_editable_changed"
-  external set_position : [>`editable] obj -> int -> unit
-      = "ml_gtk_editable_set_position"
-  external get_position : [>`editable] obj -> int
-      = "ml_gtk_editable_get_position"
-  external set_editable : [>`editable] obj -> bool -> unit
-      = "ml_gtk_editable_set_editable"
-  external selection_start_pos : [>`editable] obj -> int
-      = "ml_gtk_editable_selection_start_pos"
-  external selection_end_pos : [>`editable] obj -> int
-      = "ml_gtk_editable_selection_end_pos"
-  external has_selection : [>`editable] obj -> bool
-      = "ml_gtk_editable_has_selection"
-  module Signals = struct
-    open GtkArgv
-    open GtkSignal
-    let activate : ([>`editable],_) t =
-      { name = "activate"; marshaller = marshal_unit }
-    let changed : ([>`editable],_) t =
-      { name = "changed"; marshaller = marshal_unit }
-    let marshal_insert f argv = function
-      | STRING _ :: INT len :: POINTER(Some pos) :: _ ->
-          (* XXX These two accesses are implementation-dependent *)
-          let s = string_at_pointer (get_pointer argv ~pos:0) ~len
-          and pos = int_at_pointer pos in
-          f s ~pos
-      | _ -> invalid_arg "GtkEdit.Editable.Signals.marshal_insert"
-    let insert_text : ([>`editable],_) t =
-      { name = "insert_text"; marshaller = marshal_insert }
-    let marshal_delete f _ = function
-      | INT start :: INT stop :: _ ->
-          f ~start ~stop
-      | _ -> invalid_arg "GtkEdit.Editable.Signals.marshal_delete"
-    let delete_text : ([>`editable],_) t =
-      { name = "delete_text"; marshaller = marshal_delete }
-  end
-end
-
-module Entry = struct
-  let cast w : entry obj = Object.try_cast w "GtkEntry"
-  external coerce : [>`entry] obj -> entry obj = "%identity"
-  external create : unit -> entry obj = "ml_gtk_entry_new"
-  external create_with_max_length : int -> entry obj
-      = "ml_gtk_entry_new_with_max_length"
-  let create ?max_length () =
-    match max_length with None -> create ()
-    | Some len -> create_with_max_length len
-  external set_text : [>`entry] obj -> string -> unit
-      = "ml_gtk_entry_set_text"
-  external append_text : [>`entry] obj -> string -> unit
-      = "ml_gtk_entry_append_text"
-  external prepend_text : [>`entry] obj -> string -> unit
-      = "ml_gtk_entry_prepend_text"
-  external get_text : [>`entry] obj -> string = "ml_gtk_entry_get_text"
-  external set_visibility : [>`entry] obj -> bool -> unit
-      = "ml_gtk_entry_set_visibility"
-  external set_max_length : [>`entry] obj -> int -> unit
-      = "ml_gtk_entry_set_max_length"
-  let set ?text ?visibility ?max_length w =
-    let may_set f = may ~f:(f w) in
-    may_set set_text text;
-    may_set set_visibility visibility;
-    may_set set_max_length max_length
-  external text_length : [>`entry] obj -> int
-      = "ml_GtkEntry_text_length"
-end
-
-module SpinButton = struct
-  let cast w : spin_button obj = Object.try_cast w "GtkSpinButton"
-  external create :
-      [>`adjustment] optobj -> rate:float -> digits:int -> spin_button obj
-      = "ml_gtk_spin_button_new"
-  let create ?adjustment ?(rate=0.5) ?(digits=0) () =
-    create (Gpointer.optboxed adjustment) ~rate ~digits
-  external configure :
-    [>`spinbutton] obj -> adjustment:[>`adjustment] obj ->
-    rate:float -> digits:int -> unit
-    = "ml_gtk_spin_button_configure"
-  external set_adjustment : [>`spinbutton] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_spin_button_set_adjustment"
-  external get_adjustment : [>`spinbutton] obj -> adjustment obj
-      = "ml_gtk_spin_button_get_adjustment"
-  external set_digits : [>`spinbutton] obj -> int -> unit
-      = "ml_gtk_spin_button_set_digits"
-  external get_value : [>`spinbutton] obj -> float
-      = "ml_gtk_spin_button_get_value_as_float"
-  let get_value_as_int w = truncate (get_value w +. 0.5)
-  external set_value : [>`spinbutton] obj -> float -> unit
-      = "ml_gtk_spin_button_set_value"
-  external set_update_policy :
-      [>`spinbutton] obj -> [`ALWAYS|`IF_VALID] -> unit
-      = "ml_gtk_spin_button_set_update_policy"
-  external set_numeric : [>`spinbutton] obj -> bool -> unit
-      = "ml_gtk_spin_button_set_numeric"
-  external spin : [>`spinbutton] obj -> spin_type -> unit
-      = "ml_gtk_spin_button_spin"
-  external set_wrap : [>`spinbutton] obj -> bool -> unit
-      = "ml_gtk_spin_button_set_wrap"
-  external set_shadow_type : [>`spinbutton] obj -> shadow_type -> unit
-      = "ml_gtk_spin_button_set_shadow_type"
-  external set_snap_to_ticks : [>`spinbutton] obj -> bool -> unit
-      = "ml_gtk_spin_button_set_snap_to_ticks"
-  external update : [>`spinbutton] obj -> unit
-      = "ml_gtk_spin_button_update"
-  let set ?adjustment ?digits ?value ?update_policy
-      ?numeric ?wrap ?shadow_type ?snap_to_ticks w =
-    let may_set f = may ~f:(f w) in
-    may_set set_adjustment adjustment;
-    may_set set_digits digits;
-    may_set set_value value;
-    may_set set_update_policy update_policy;
-    may_set set_numeric numeric;
-    may_set set_wrap wrap;
-    may_set set_shadow_type shadow_type;
-    may_set set_snap_to_ticks snap_to_ticks
-end
-
-module Text = struct
-  let cast w : text obj = Object.try_cast w "GtkText"
-  external create : [>`adjustment] optobj -> [>`adjustment] optobj -> text obj
-      = "ml_gtk_text_new"
-  let create ?hadjustment ?vadjustment () =
-    create (Gpointer.optboxed hadjustment) (Gpointer.optboxed vadjustment)
-  external set_word_wrap : [>`text] obj -> bool -> unit
-      = "ml_gtk_text_set_word_wrap"
-  external set_line_wrap : [>`text] obj -> bool -> unit
-      = "ml_gtk_text_set_line_wrap"
-  external set_adjustment :
-      [>`text] obj -> ?horizontal:[>`adjustment] obj ->
-      ?vertical:[>`adjustment] obj -> unit -> unit
-      = "ml_gtk_text_set_adjustments"
-  external get_hadjustment : [>`text] obj -> adjustment obj
-      = "ml_gtk_text_get_hadj"
-  external get_vadjustment : [>`text] obj -> adjustment obj
-      = "ml_gtk_text_get_vadj"
-  external set_point : [>`text] obj -> int -> unit
-      = "ml_gtk_text_set_point"
-  external get_point : [>`text] obj -> int = "ml_gtk_text_get_point"
-  external get_length : [>`text] obj -> int = "ml_gtk_text_get_length"
-  external freeze : [>`text] obj -> unit = "ml_gtk_text_freeze"
-  external thaw : [>`text] obj -> unit = "ml_gtk_text_thaw"
-  external insert :
-      [>`text] obj -> ?font:Gdk.font -> ?foreground:Gdk.Color.t ->
-      ?background:Gdk.Color.t -> string -> unit
-      = "ml_gtk_text_insert"
-  let set ?hadjustment ?vadjustment ?word_wrap w =
-    if hadjustment <> None || vadjustment <> None then
-      set_adjustment w ?horizontal: hadjustment ?vertical: vadjustment ();
-    may word_wrap ~f:(set_word_wrap w)
-end
-
-module Combo = struct
-  let cast w : combo obj = Object.try_cast w "GtkCombo"
-  external create : unit -> combo obj = "ml_gtk_combo_new"
-  external set_value_in_list :
-      [>`combo] obj -> ?required:bool -> ?ok_if_empty:bool -> unit -> unit
-      = "ml_gtk_combo_set_value_in_list"
-  external set_use_arrows : [>`combo] obj -> bool -> unit
-      = "ml_gtk_combo_set_use_arrows"
-  external set_use_arrows_always : [>`combo] obj -> bool -> unit
-      = "ml_gtk_combo_set_use_arrows_always"
-  external set_case_sensitive : [>`combo] obj -> bool -> unit
-      = "ml_gtk_combo_set_case_sensitive"
-  external set_item_string : [>`combo] obj -> [>`item] obj -> string -> unit
-      = "ml_gtk_combo_set_item_string"
-  external entry : [>`combo] obj -> entry obj= "ml_gtk_combo_entry"
-  external list : [>`combo] obj -> liste obj= "ml_gtk_combo_list"
-  let set_popdown_strings combo strings =
-    GtkList.Liste.clear_items (list combo) ~start:0 ~stop:(-1);
-    List.iter strings ~f:
-      begin fun s ->
-       let li = GtkList.ListItem.create_with_label s in
-       Widget.show li;
-       Container.add (list combo) li
-      end
-  let set_use_arrows' w (mode : [`NEVER|`DEFAULT|`ALWAYS]) =
-    let def,always =
-      match mode with
-       `NEVER -> false, false
-      |        `DEFAULT -> true, false
-      |        `ALWAYS -> true, true
-    in
-    set_use_arrows w def;
-    set_use_arrows_always w always
-  let set ?popdown_strings ?use_arrows
-      ?case_sensitive ?value_in_list ?ok_if_empty w =
-    may popdown_strings ~f:(set_popdown_strings w);
-    may use_arrows ~f:(set_use_arrows' w);
-    may case_sensitive ~f:(set_case_sensitive w);
-    if value_in_list <> None || ok_if_empty <> None then
-      set_value_in_list w ?required:value_in_list ?ok_if_empty ()
-  external disable_activate : [>`combo] obj -> unit
-      = "ml_gtk_combo_disable_activate"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkInit.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkInit.ml
deleted file mode 100644 (file)
index 5ce40db..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-(* $Id$ *)
-
-(* Does the initialization for toplevels *)
-
-let locale = GtkMain.Main.init ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkList.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkList.ml
deleted file mode 100644 (file)
index 4d2ae09..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module ListItem = struct
-  let cast w : list_item obj = Object.try_cast w "GtkListItem"
-  external create : unit -> list_item obj = "ml_gtk_list_item_new"
-  external create_with_label : string -> list_item obj
-      = "ml_gtk_list_item_new_with_label"
-  let create ?label () =
-    match label with None -> create ()
-    | Some label -> create_with_label label
-end
-
-module Liste = struct
-  let cast w : liste obj = Object.try_cast w "GtkList"
-  external create : unit -> liste obj = "ml_gtk_list_new"
-  external insert_item :
-      [>`list] obj -> [>`listitem] obj -> pos:int -> unit
-      = "ml_gtk_list_insert_item"
-  let insert_items l wl ~pos =
-    let wl = if pos < 0 then wl else List.rev wl in
-    List.iter wl ~f:(insert_item l ~pos)
-  let append_items l = insert_items l ~pos:(-1)
-  let prepend_items l = insert_items l ~pos:0
-  external clear_items : [>`list] obj -> start:int -> stop:int -> unit =
-    "ml_gtk_list_clear_items"
-  external select_item : [>`list] obj -> pos:int -> unit
-      = "ml_gtk_list_select_item"
-  external unselect_item : [>`list] obj -> pos:int -> unit
-      = "ml_gtk_list_unselect_item"
-  external select_child : [>`list] obj -> [>`listitem] obj -> unit
-      = "ml_gtk_list_select_child"
-  external unselect_child : [>`list] obj -> [>`listitem] obj -> unit
-      = "ml_gtk_list_unselect_child"
-  external child_position : [>`list] obj -> [>`listitem] obj -> int
-      = "ml_gtk_list_child_position"
-  external set_selection_mode : [>`list] obj -> selection_mode -> unit
-      = "ml_gtk_list_set_selection_mode"
-  module Signals = struct
-    open GtkSignal
-    let selection_changed : ([>`list],_) t =
-      { name = "selection_changed"; marshaller = marshal_unit }
-    let select_child : ([>`list],_) t =
-      { name = "select_child"; marshaller = Widget.Signals.marshal }
-    let unselect_child : ([>`list],_) t =
-      { name = "unselect_child"; marshaller = Widget.Signals.marshal }
-  end
-end
-
-module CList = struct
-  let cast w : clist obj = Object.try_cast w "GtkCList"
-  external create : cols:int -> clist obj = "ml_gtk_clist_new"
-  external create_with_titles : string array -> clist obj
-      = "ml_gtk_clist_new_with_titles"
-  external get_rows : [>`clist] obj -> int = "ml_gtk_clist_get_rows"
-  external get_columns : [>`clist] obj -> int = "ml_gtk_clist_get_columns"
-  external get_focus_row : [>`clist] obj -> int
-      = "ml_gtk_clist_get_focus_row"
-  external set_hadjustment : [>`clist] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_clist_set_hadjustment"
-  external set_vadjustment : [>`clist] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_clist_set_vadjustment"
-  external get_hadjustment : [>`clist] obj -> adjustment obj
-      = "ml_gtk_clist_get_hadjustment"
-  external get_vadjustment : [>`clist] obj -> adjustment obj
-      = "ml_gtk_clist_get_vadjustment"
-  external set_shadow_type : [>`clist] obj -> shadow_type -> unit
-      = "ml_gtk_clist_set_shadow_type"
-  external set_selection_mode : [>`clist] obj -> selection_mode -> unit
-      = "ml_gtk_clist_set_selection_mode"
-  external set_reorderable : [>`clist] obj -> bool -> unit
-      = "ml_gtk_clist_set_reorderable"
-  external set_use_drag_icons : [>`clist] obj -> bool -> unit
-      = "ml_gtk_clist_set_use_drag_icons"
-  external set_button_actions :
-      [>`clist] obj -> int -> button_action list -> unit
-      = "ml_gtk_clist_set_button_actions"
-  external freeze : [>`clist] obj -> unit = "ml_gtk_clist_freeze"
-  external thaw : [>`clist] obj -> unit = "ml_gtk_clist_thaw"
-  external column_titles_show : [>`clist] obj -> unit
-      = "ml_gtk_clist_column_titles_show"
-  external column_titles_hide : [>`clist] obj -> unit
-      = "ml_gtk_clist_column_titles_hide"
-  external column_title_active : [>`clist] obj -> int -> unit
-      = "ml_gtk_clist_column_title_active"
-  external column_title_passive : [>`clist] obj -> int -> unit
-      = "ml_gtk_clist_column_title_passive"
-  external column_titles_active : [>`clist] obj -> unit
-      = "ml_gtk_clist_column_titles_active"
-  external column_titles_passive : [>`clist] obj -> unit
-      = "ml_gtk_clist_column_titles_passive"
-  external set_column_title : [>`clist] obj -> int -> string -> unit
-      = "ml_gtk_clist_set_column_title"
-  external get_column_title : [>`clist] obj -> int -> string
-      = "ml_gtk_clist_get_column_title"
-  external set_column_widget : [>`clist] obj -> int -> [>`widget] obj -> unit
-      = "ml_gtk_clist_set_column_widget"
-  external get_column_widget : [>`clist] obj -> int -> widget obj
-      = "ml_gtk_clist_get_column_widget"
-  external set_column_justification :
-      [>`clist] obj -> int -> justification -> unit
-      = "ml_gtk_clist_set_column_justification"
-  external set_column_visibility : [>`clist] obj -> int -> bool -> unit
-      = "ml_gtk_clist_set_column_visibility"
-  external set_column_resizeable : [>`clist] obj -> int -> bool -> unit
-      = "ml_gtk_clist_set_column_resizeable"
-  external set_column_auto_resize : [>`clist] obj -> int -> bool -> unit
-      = "ml_gtk_clist_set_column_auto_resize"
-  external columns_autosize : [>`clist] obj -> unit
-      = "ml_gtk_clist_columns_autosize"
-  external optimal_column_width : [>`clist] obj -> int -> int
-      = "ml_gtk_clist_optimal_column_width"
-  external set_column_width : [>`clist] obj -> int -> int -> unit
-      = "ml_gtk_clist_set_column_width"
-  external set_column_min_width : [>`clist] obj -> int -> int -> unit
-      = "ml_gtk_clist_set_column_min_width"
-  external set_column_max_width : [>`clist] obj -> int -> int -> unit
-      = "ml_gtk_clist_set_column_max_width"
-  external set_row_height : [>`clist] obj -> int -> unit
-      = "ml_gtk_clist_set_row_height"
-  external moveto :
-      [>`clist] obj ->
-      int -> int -> row_align:clampf -> col_align:clampf -> unit
-      = "ml_gtk_clist_moveto"
-  external row_is_visible : [>`clist] obj -> int -> visibility
-      = "ml_gtk_clist_row_is_visible"
-  external get_cell_type : [>`clist] obj -> int -> int -> cell_type
-      = "ml_gtk_clist_get_cell_type"
-  external set_text : [>`clist] obj -> int -> int -> string -> unit
-      = "ml_gtk_clist_set_text"
-  external get_text : [>`clist] obj -> int -> int -> string
-      = "ml_gtk_clist_get_text"
-  external set_pixmap :
-      [>`clist] obj ->
-      int -> int -> Gdk.pixmap -> Gdk.bitmap Gpointer.optboxed -> unit
-      = "ml_gtk_clist_set_pixmap"
-  external get_pixmap :
-      [>`clist] obj -> int -> int -> Gdk.pixmap option * Gdk.bitmap option
-      = "ml_gtk_clist_get_pixmap"
-  external set_pixtext :
-      [>`clist] obj -> int -> int ->
-      string -> int -> Gdk.pixmap -> Gdk.bitmap Gpointer.optboxed -> unit
-      = "ml_gtk_clist_set_pixtext_bc" "ml_gtk_clist_set_pixtext"
-  external set_foreground :
-      [>`clist] obj -> row:int -> Gdk.Color.t Gpointer.optboxed -> unit
-      = "ml_gtk_clist_set_foreground"
-  external set_background :
-      [>`clist] obj -> row:int -> Gdk.Color.t Gpointer.optboxed -> unit
-      = "ml_gtk_clist_set_background"
-  external get_cell_style : [>`clist] obj -> int -> int -> Gtk.style
-      = "ml_gtk_clist_get_cell_style"
-  external set_cell_style : [>`clist] obj -> int -> int -> Gtk.style -> unit
-      = "ml_gtk_clist_set_cell_style"
-  external get_row_style : [>`clist] obj -> row:int -> Gtk.style
-      = "ml_gtk_clist_get_row_style"
-  external set_row_style : [>`clist] obj -> row:int -> Gtk.style -> unit
-      = "ml_gtk_clist_set_row_style"
-  external set_selectable : [>`clist] obj -> row:int -> bool -> unit
-      = "ml_gtk_clist_set_selectable"
-  external get_selectable : [>`clist] obj -> row:int -> bool
-      = "ml_gtk_clist_get_selectable"
-  external set_shift :
-      [>`clist] obj -> int -> int -> vertical:int -> horizontal:int -> unit
-      = "ml_gtk_clist_set_shift"
-  external insert : [>`clist] obj -> row:int -> Gpointer.optstring array -> int
-      = "ml_gtk_clist_insert"
-  let insert w ~row texts =
-    let len = get_columns w in
-    if List.length texts > len then invalid_arg "CList.insert";
-    let arr = Array.create (get_columns w) None in
-    List.fold_left texts ~init:0
-      ~f:(fun pos text -> arr.(pos) <- text; pos+1);
-    let r = insert w ~row (Array.map ~f:Gpointer.optstring arr) in
-    if r = -1 then invalid_arg "GtkCList::insert";
-    r
-  external remove : [>`clist] obj -> row:int -> unit
-      = "ml_gtk_clist_remove"
-  external set_row_data : [>`clist] obj -> row:int -> Obj.t -> unit
-      = "ml_gtk_clist_set_row_data"
-  external get_row_data : [>`clist] obj -> row:int -> Obj.t
-      = "ml_gtk_clist_get_row_data"
-  external select : [>`clist] obj -> int -> int -> unit
-      = "ml_gtk_clist_select_row"
-  external unselect : [>`clist] obj -> int -> int -> unit
-      = "ml_gtk_clist_unselect_row"
-  external clear : [>`clist] obj -> unit = "ml_gtk_clist_clear"
-  external get_row_column : [>`clist] obj -> x:int -> y:int -> int * int
-      = "ml_gtk_clist_get_selection_info"
-  external select_all : [>`clist] obj -> unit = "ml_gtk_clist_select_all"
-  external unselect_all : [>`clist] obj -> unit = "ml_gtk_clist_unselect_all"
-  external swap_rows : [>`clist] obj -> int -> int -> unit
-      = "ml_gtk_clist_swap_rows"
-  external row_move : [>`clist] obj -> int -> dst:int -> unit
-      = "ml_gtk_clist_row_move"
-  external set_sort_column : [>`clist] obj -> int -> unit
-      = "ml_gtk_clist_set_sort_column"
-  external set_sort_type : [>`clist] obj -> sort_type -> unit
-      = "ml_gtk_clist_set_sort_type"
-  external sort : [>`clist] obj -> unit
-      = "ml_gtk_clist_sort"
-  external set_auto_sort : [>`clist] obj -> bool -> unit
-      = "ml_gtk_clist_set_auto_sort"
-  let set_titles_show w = function
-      true -> column_titles_show w
-    | false -> column_titles_hide w
-  let set_titles_active w = function
-      true -> column_titles_active w
-    | false -> column_titles_passive w
-  let set ?hadjustment ?vadjustment ?shadow_type
-      ?(button_actions=[]) ?selection_mode ?reorderable
-      ?use_drag_icons ?row_height ?titles_show ?titles_active w =
-    let may_set f param = may param ~f:(f w) in
-    may_set set_hadjustment hadjustment;
-    may_set set_vadjustment vadjustment;
-    may_set set_shadow_type shadow_type;
-    List.iter button_actions ~f:(fun (n,act) -> set_button_actions w n act);
-    may_set set_selection_mode selection_mode;
-    may_set set_reorderable reorderable;
-    may_set set_use_drag_icons use_drag_icons;
-    may_set set_row_height row_height;
-    may_set set_titles_show titles_show;
-    may_set set_titles_active titles_active
-  let set_sort w ?auto ?column ?dir:sort_type () =
-    may auto ~f:(set_auto_sort w);
-    may column ~f:(set_sort_column w);
-    may sort_type ~f:(set_sort_type w)
-  let set_cell w ?text ?pixmap ?mask ?(spacing=0) ?style row col =
-    begin match text, pixmap with
-    | Some text, None ->
-        set_text w row col text
-    | None, Some pm ->
-        set_pixmap w row col pm (Gpointer.optboxed mask)
-    | Some text, Some pm ->
-        set_pixtext w row col text spacing pm (Gpointer.optboxed mask)
-    | _ -> ()
-    end;
-    may style ~f:(set_cell_style w row col)
-  let set_column w ?widget ?title ?title_active ?justification
-      ?visibility ?resizeable ?auto_resize ?width ?min_width ?max_width
-      col =
-    let may_set f param = may param ~f:(f w col) in
-    may_set set_column_widget widget;
-    may_set set_column_title title;
-    may title_active
-      ~f:(fun active -> if active then column_title_active w col
-                                   else column_title_passive w col);
-    may_set set_column_justification justification;
-    may_set set_column_visibility visibility;
-    may_set set_column_resizeable resizeable;
-    may_set set_column_auto_resize auto_resize;
-    may_set set_column_width width;
-    may_set set_column_min_width min_width;
-    may_set set_column_max_width max_width
-  let set_row w ?foreground ?background ?selectable ?style row =
-    let may_set f = may ~f:(f w ~row) in
-    may_set set_foreground foreground;
-    may_set set_background  background;
-    may_set set_selectable  selectable;
-    may_set set_row_style style
-  module Signals = struct
-    open GtkArgv
-    open GtkSignal
-    let marshal_select f argv = function
-      | INT row :: INT column :: POINTER p :: _ ->
-          let event : GdkEvent.Button.t option =
-           may_map ~f:GdkEvent.unsafe_copy p
-          in
-          f ~row ~column ~event
-      | _ -> invalid_arg "GtkList.CList.Signals.marshal_select"
-    let select_row : ([>`clist],_) t =
-      { name = "select_row"; marshaller = marshal_select }
-    let unselect_row : ([>`clist],_) t =
-      { name = "unselect_row"; marshaller = marshal_select }
-    let click_column : ([>`clist],_) t =
-      { name = "click_column"; marshaller = marshal_int }
-    external val_scroll_type : int -> scroll_type = "ml_Val_scroll_type"
-    let marshal_scroll f argv = function
-      | INT st :: FLOAT (pos : clampf) :: _ ->
-          f (val_scroll_type st) ~pos
-      | _ -> invalid_arg "GtkList.CList.Signals.marshal_scroll"
-    let scroll_horizontal : ([>`clist],_) t =
-      { name = "scroll_horizontal"; marshaller = marshal_scroll }
-    let scroll_vertical : ([>`clist],_) t =
-      { name = "scroll_vertical"; marshaller = marshal_scroll }
-    external emit_scroll :
-        'a obj -> name:string -> Tags.scroll_type -> pos:clampf -> unit
-        = "ml_gtk_signal_emit_scroll"
-    let emit_scroll = emit ~emitter:emit_scroll
-  end
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMain.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMain.ml
deleted file mode 100644 (file)
index 3c45614..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-let _ = Callback.register_exception "gtkerror" (Error"")
-
-module Timeout = struct
-  type id
-  external add : ms:int -> callback:(GtkArgv.t -> unit) -> id
-      = "ml_gtk_timeout_add"
-  let add ~ms ~callback =
-    add ~ms ~callback:(fun arg -> GtkArgv.set_result arg (`BOOL(callback ())))
-  external remove : id -> unit = "ml_gtk_timeout_remove"
-end
-
-module Main = struct
-  external init : string array -> string array = "ml_gtk_init"
-  (* external exit : int -> unit = "ml_gtk_exit" *)
-  external set_locale : unit -> string = "ml_gtk_set_locale"
-  (* external main : unit -> unit = "ml_gtk_main" *)
-  let init () =
-    let locale = set_locale () in
-    let argv = init Sys.argv in
-    Array.blit ~src:argv ~dst:Sys.argv ~len:(Array.length argv)
-      ~src_pos:0 ~dst_pos:0;
-    Obj.truncate (Obj.repr Sys.argv) ~len:(Array.length argv);
-    locale
-  open Glib
-  let loops = ref [] 
-  let main () =
-    let loop = (Main.create true) in
-    loops := loop :: !loops;
-    while Main.is_running loop do Main.iteration true done;
-    loops := List.tl !loops
-  and quit () = Main.quit (List.hd !loops)
-  external get_version : unit -> int * int * int = "ml_gtk_get_version"
-  let version = get_version ()
-
-  let flush = Gdk.X.flush
-end
-
-module Grab = struct
-  external add : [>`widget] obj -> unit = "ml_gtk_grab_add"
-  external remove : [>`widget] obj -> unit = "ml_gtk_grab_remove"
-  external get_current : unit -> widget obj= "ml_gtk_grab_get_current"
-end
-
-let _ = Glib.set_warning_handler (fun msg -> raise (Warning msg))
-let _ = Glib.set_print_handler (fun msg -> print_string msg)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMenu.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMenu.ml
deleted file mode 100644 (file)
index 2f1eb30..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open GtkBase
-
-module MenuItem = struct
-  let cast w : menu_item obj = Object.try_cast w "GtkMenuItem"
-  external coerce : [>`menuitem] obj -> menu_item obj = "%identity"
-  external create : unit -> menu_item obj = "ml_gtk_menu_item_new"
-  external create_with_label : string -> menu_item obj
-      = "ml_gtk_menu_item_new_with_label"
-  external tearoff_create : unit -> menu_item obj
-      = "ml_gtk_tearoff_menu_item_new"
-  let create ?label () =
-    match label with None -> create ()
-    | Some label -> create_with_label label
-  external set_submenu : [>`menuitem] obj -> [>`menu] obj -> unit
-      = "ml_gtk_menu_item_set_submenu"
-  external remove_submenu : [>`menuitem] obj -> unit
-      = "ml_gtk_menu_item_remove_submenu"
-  external configure :
-      [>`menuitem] obj -> show_toggle:bool -> show_indicator:bool -> unit
-      = "ml_gtk_menu_item_configure"
-  external activate : [>`menuitem] obj -> unit
-      = "ml_gtk_menu_item_activate"
-  external right_justify : [>`menuitem] obj -> unit
-      = "ml_gtk_menu_item_right_justify"
-  module Signals = struct
-    open GtkSignal
-    let activate : ([>`menuitem],_) t =
-      { name = "activate"; marshaller = marshal_unit }
-    let activate_item : ([>`menuitem],_) t =
-      { name = "activate_item"; marshaller = marshal_unit }
-  end
-end
-
-module CheckMenuItem = struct
-  let cast w : check_menu_item obj = Object.try_cast w "GtkCheckMenuItem"
-  external coerce : [>`checkmenuitem] obj -> check_menu_item obj = "%identity"
-  external create : unit -> check_menu_item obj = "ml_gtk_check_menu_item_new"
-  external create_with_label : string -> check_menu_item obj
-      = "ml_gtk_check_menu_item_new_with_label"
-  let create ?label () =
-    match label with None -> create ()
-    | Some label -> create_with_label label
-  external set_active : [>`checkmenuitem] obj -> bool -> unit
-      = "ml_gtk_check_menu_item_set_active"
-  external get_active : [>`checkmenuitem] obj -> bool
-      = "ml_gtk_check_menu_item_get_active"
-  external set_show_toggle : [>`checkmenuitem] obj -> bool -> unit
-      = "ml_gtk_check_menu_item_set_show_toggle"
-  let set ?active ?show_toggle w =
-    may active ~f:(set_active w);
-    may show_toggle ~f:(set_show_toggle w)
-  external toggled : [>`checkmenuitem] obj -> unit
-      = "ml_gtk_check_menu_item_toggled"
-  module Signals = struct
-    open GtkSignal
-    let toggled : ([>`checkmenuitem],_) t =
-      { name = "toggled"; marshaller = marshal_unit }
-  end
-end
-
-module RadioMenuItem = struct
-  let cast w : radio_menu_item obj = Object.try_cast w "GtkRadioMenuItem"
-  external create : radio_menu_item group -> radio_menu_item obj
-      = "ml_gtk_radio_menu_item_new"
-  external create_with_label :
-      radio_menu_item group -> string -> radio_menu_item obj
-      = "ml_gtk_radio_menu_item_new_with_label"
-  let create ?(group = None) ?label () =
-    match label with None -> create group
-    | Some label -> create_with_label group label
-  external set_group : [>`radiomenuitem] obj -> radio_menu_item group -> unit
-      = "ml_gtk_radio_menu_item_set_group"
-end
-
-module OptionMenu = struct
-  let cast w : option_menu obj = Object.try_cast w "GtkOptionMenu"
-  external create : unit -> option_menu obj = "ml_gtk_option_menu_new"
-  external get_menu : [>`optionmenu] obj -> menu obj
-      = "ml_gtk_option_menu_get_menu"
-  external set_menu : [>`optionmenu] obj -> [>`menu] obj -> unit
-      = "ml_gtk_option_menu_set_menu"
-  external remove_menu : [>`optionmenu] obj -> unit
-      = "ml_gtk_option_menu_remove_menu"
-  external set_history : [>`optionmenu] obj -> int -> unit
-      = "ml_gtk_option_menu_set_history"
-  let set ?menu ?history w =
-    may menu ~f:(set_menu w);
-    may history ~f:(set_history w)
-end
-
-module MenuShell = struct
-  let cast w : menu_shell obj = Object.try_cast w "GtkMenuShell"
-  external coerce : [>`menushell] obj -> menu_shell obj = "%identity"
-  external append : [>`menushell] obj -> [>`widget] obj -> unit
-      = "ml_gtk_menu_shell_append"
-  external prepend : [>`menushell] obj -> [>`widget] obj -> unit
-      = "ml_gtk_menu_shell_prepend"
-  external insert : [>`menushell] obj -> [>`widget] obj -> pos:int -> unit
-      = "ml_gtk_menu_shell_insert"
-  external deactivate : [>`menushell] obj -> unit
-      = "ml_gtk_menu_shell_deactivate"
-  module Signals = struct
-    open GtkSignal
-    let deactivate : ([>`menushell],_) t =
-      { name = "deactivate"; marshaller = marshal_unit }
-  end
-end
-
-module Menu = struct
-  let cast w : menu obj = Object.try_cast w "GtkMenu"
-  external create : unit -> menu obj = "ml_gtk_menu_new"
-  external popup :
-      [>`menu] obj -> [>`menushell] optobj ->
-      [>`menuitem] optobj -> button:int -> time:int -> unit
-      = "ml_gtk_menu_popup"
-  let popup ?parent_menu ?parent_item w =
-    popup w (Gpointer.optboxed parent_menu) (Gpointer.optboxed parent_item)
-  external popdown : [>`menu] obj -> unit = "ml_gtk_menu_popdown"
-  external get_active : [>`menu] obj -> widget obj= "ml_gtk_menu_get_active"
-  external set_active : [>`menu] obj -> int -> unit = "ml_gtk_menu_set_active"
-  external set_accel_group : [>`menu] obj -> accel_group -> unit
-      = "ml_gtk_menu_set_accel_group"
-  external get_accel_group : [>`menu] obj -> accel_group
-      = "ml_gtk_menu_get_accel_group"
-  external ensure_uline_accel_group : [>`menu] obj -> accel_group
-      = "ml_gtk_menu_ensure_uline_accel_group"
-  external attach_to_widget : [>`menu] obj -> [>`widget] obj -> unit
-      = "ml_gtk_menu_attach_to_widget"
-  external get_attach_widget : [>`menu] obj -> widget obj
-      = "ml_gtk_menu_get_attach_widget"
-  external detach : [>`menu] obj -> unit = "ml_gtk_menu_detach"
-  let set ?active ?accel_group w =
-    may active ~f:(set_active w);
-    may accel_group ~f:(set_accel_group w)
-end
-
-module MenuBar = struct
-  let cast w : menu_bar obj = Object.try_cast w "GtkMenuBar"
-  external create : unit -> menu_bar obj = "ml_gtk_menu_bar_new"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMisc.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkMisc.ml
deleted file mode 100644 (file)
index ded7f48..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module GammaCurve = struct
-  let cast w : gamma_curve obj = Object.try_cast w "GtkGammaCurve"
-  external create : unit -> gamma_curve obj = "ml_gtk_gamma_curve_new"
-  external get_gamma : [>`gamma] obj -> float = "ml_gtk_gamma_curve_get_gamma"
-end
-
-module ColorSelection = struct
-  let cast w : color_selection obj = Object.try_cast w "GtkColorSelection"
-  external create : unit -> color_selection obj = "ml_gtk_color_selection_new"
-  external create_dialog : string -> color_selection_dialog obj
-      = "ml_gtk_color_selection_dialog_new"
-  external set_update_policy : [>`colorsel] obj -> update_type -> unit
-      = "ml_gtk_color_selection_set_update_policy"
-  external set_opacity : [>`colorsel] obj -> bool -> unit
-      = "ml_gtk_color_selection_set_opacity"
-  let set ?update_policy ?opacity w =
-    may update_policy ~f:(set_update_policy w);
-    may opacity ~f:(set_opacity w)
-  external set_color :
-      [>`colorsel] obj ->
-      red:float -> green:float -> blue:float -> ?opacity:float -> unit
-      = "ml_gtk_color_selection_set_color"
-  external get_color : [>`colorsel] obj -> color
-      = "ml_gtk_color_selection_get_color"
-
-  external ok_button : [>`colorseldialog] obj -> button obj =
-    "ml_gtk_color_selection_dialog_ok_button"
-  external cancel_button : [>`colorseldialog] obj -> button obj =
-    "ml_gtk_color_selection_dialog_cancel_button"
-  external help_button : [>`colorseldialog] obj -> button obj =
-    "ml_gtk_color_selection_dialog_help_button"
-  external colorsel : [>`colorseldialog] obj -> color_selection obj =
-    "ml_gtk_color_selection_dialog_colorsel"
-  module Signals = struct
-    open GtkSignal
-    let color_changed : ([>`colorsel],_) t =
-      { name = "color_changed"; marshaller = marshal_unit }
-  end
-end
-
-module Statusbar = struct
-  let cast w : statusbar obj = Object.try_cast w "GtkStatusbar"
-  external create : unit -> statusbar obj = "ml_gtk_statusbar_new"
-  external get_context : [>`statusbar] obj -> string -> statusbar_context
-      = "ml_gtk_statusbar_get_context_id"
-  external push :
-      [>`statusbar] obj ->
-      statusbar_context -> text:string -> statusbar_message
-      = "ml_gtk_statusbar_push"
-  external pop : [>`statusbar] obj -> statusbar_context ->  unit
-      = "ml_gtk_statusbar_pop"
-  external remove :
-      [>`statusbar] obj -> statusbar_context -> statusbar_message -> unit
-      = "ml_gtk_statusbar_remove"
-  module Signals = struct
-    open GtkSignal
-    let text_pushed : ([>`statusbar],_) t =
-      let marshal f _ = function
-        | GtkArgv.INT ctx :: GtkArgv.STRING s :: _ ->
-           f (Obj.magic ctx : statusbar_context) s
-        | _ -> invalid_arg "GtkMisc.Statusbar.Signals.marshal_text"
-      in
-      { name = "text_pushed"; marshaller = marshal }
-  end
-end
-
-module Calendar = struct
-  let cast w : calendar obj = Object.try_cast w "GtkCalendar"
-  external create : unit -> calendar obj = "ml_gtk_calendar_new"
-  external select_month : [>`calendar] obj -> month:int -> year:int -> unit
-      = "ml_gtk_calendar_select_month"
-  external select_day : [>`calendar] obj -> int -> unit
-      = "ml_gtk_calendar_select_day"
-  external mark_day : [>`calendar] obj -> int -> unit
-      = "ml_gtk_calendar_mark_day"
-  external unmark_day : [>`calendar] obj -> int -> unit
-      = "ml_gtk_calendar_unmark_day"
-  external clear_marks : [>`calendar] obj -> unit
-      = "ml_gtk_calendar_clear_marks"
-  external display_options :
-      [>`calendar] obj -> Tags.calendar_display_options list -> unit
-      = "ml_gtk_calendar_display_options"
-  external get_date : [>`calendar] obj -> int * int * int
-      = "ml_gtk_calendar_get_date"   (* year * month * day *)
-  external freeze : [>`calendar] obj -> unit
-      = "ml_gtk_calendar_freeze"
-  external thaw : [>`calendar] obj -> unit
-      = "ml_gtk_calendar_thaw"
-  module Signals = struct
-    open GtkSignal
-    let month_changed : ([>`calendar],_) t =
-      { name = "month_changed"; marshaller = marshal_unit }
-    let day_selected : ([>`calendar],_) t =
-      { name = "day_selected"; marshaller = marshal_unit }
-    let day_selected_double_click : ([>`calendar],_) t =
-      { name = "day_selected_double_click"; marshaller = marshal_unit }
-    let prev_month : ([>`calendar],_) t =
-      { name = "prev_month"; marshaller = marshal_unit }
-    let next_month : ([>`calendar],_) t =
-      { name = "next_month"; marshaller = marshal_unit }
-    let prev_year : ([>`calendar],_) t =
-      { name = "prev_year"; marshaller = marshal_unit }
-    let next_year : ([>`calendar],_) t =
-      { name = "next_year"; marshaller = marshal_unit }
-  end
-end
-
-module DrawingArea = struct
-  let cast w : drawing_area obj = Object.try_cast w "GtkDrawingArea"
-  external create : unit -> drawing_area obj = "ml_gtk_drawing_area_new"
-  external size : [>`drawing] obj -> width:int -> height:int -> unit
-      = "ml_gtk_drawing_area_size"
-end
-
-(* Does not seem very useful ...
-module Curve = struct
-  type t = [widget drawing curve] obj
-  let cast w : t = Object.try_cast w "GtkCurve"
-  external create : unit -> t = "ml_gtk_curve_new"
-  external reset : [>`curve] obj -> unit = "ml_gtk_curve_reset"
-  external set_gamma : [>`curve] obj -> float -> unit
-      = "ml_gtk_curve_set_gamma"
-  external set_range :
-      [>`curve] obj -> min_x:float -> max_x:float ->
-      min_y:float -> max_y:float -> unit
-      = "ml_gtk_curve_set_gamma"
-end
-*)
-
-module Misc = struct
-  let cast w : misc obj = Object.try_cast w "GtkMisc"
-  external coerce : [>`misc] obj -> misc obj = "%identity"
-  external set_alignment : [>`misc] obj -> x:float -> y:float -> unit
-      = "ml_gtk_misc_set_alignment"
-  external set_padding : [>`misc] obj -> x:int -> y:int -> unit
-      = "ml_gtk_misc_set_padding"
-  external get_xalign : [>`misc] obj -> float = "ml_gtk_misc_get_xalign"
-  external get_yalign : [>`misc] obj -> float = "ml_gtk_misc_get_yalign"
-  external get_xpad : [>`misc] obj -> int = "ml_gtk_misc_get_xpad"
-  external get_ypad : [>`misc] obj -> int = "ml_gtk_misc_get_ypad"
-  let set_alignment w ?x ?y () =
-    set_alignment w ~x:(may_default get_xalign w ~opt:x)
-      ~y:(may_default get_yalign w ~opt:y)
-  let set_padding w ?x ?y () =
-    set_padding w ~x:(may_default get_xpad w ~opt:x)
-      ~y:(may_default get_ypad w ~opt:y)
-  let set ?xalign ?yalign ?xpad ?ypad ?(width = -2) ?(height = -2) w =
-    if xalign <> None || yalign <> None then
-      set_alignment w ?x:xalign ?y:yalign ();
-    if xpad <> None || ypad <> None then
-      set_padding w ?x:xpad ?y:ypad ();
-    if width <> -2 || height <> -2 then Widget.set_usize w ~width ~height
-end
-
-module Arrow = struct
-  let cast w : arrow obj = Object.try_cast w "GtkArrow"
-  external create : kind:arrow_type -> shadow:shadow_type -> arrow obj
-      = "ml_gtk_arrow_new"
-  external set : [>`arrow] obj -> kind:arrow_type -> shadow:shadow_type -> unit
-      = "ml_gtk_arrow_set"
-end
-
-module Image = struct
-  let cast w : image obj = Object.try_cast w "GtkImage"
-  external create : Gdk.image -> ?mask:Gdk.bitmap -> image obj
-      = "ml_gtk_image_new"
-  let create ?mask img = create img ?mask
-  external set : [>`image] obj -> Gdk.image -> ?mask:Gdk.bitmap -> unit
-      = "ml_gtk_image_set"
-end
-
-module Label = struct
-  let cast w : label obj = Object.try_cast w "GtkLabel"
-  external coerce : [>`label] obj -> label obj = "%identity"
-  external create : string -> label obj = "ml_gtk_label_new"
-  external set_text : [>`label] obj -> string -> unit = "ml_gtk_label_set_text"
-  external set_justify : [>`label] obj -> justification -> unit
-      = "ml_gtk_label_set_justify"
-  external set_pattern : [>`label] obj -> string -> unit
-      = "ml_gtk_label_set_pattern"
-  external set_line_wrap : [>`label] obj -> bool -> unit
-      = "ml_gtk_label_set_line_wrap"
-  let set ?text ?justify ?line_wrap ?pattern w =
-    may ~f:(set_text w) text;
-    may ~f:(set_justify w) justify;
-    may ~f:(set_line_wrap w) line_wrap;
-    may ~f:(set_pattern w) pattern
-  external get_text : [>`label] obj -> string = "ml_gtk_label_get_label"
-end
-
-module TipsQuery = struct
-  let cast w : tips_query obj = Object.try_cast w "GtkTipsQuery"
-  external create : unit -> tips_query obj = "ml_gtk_tips_query_new"
-  external start : [>`tipsquery] obj -> unit = "ml_gtk_tips_query_start_query"
-  external stop : [>`tipsquery] obj -> unit = "ml_gtk_tips_query_stop_query"
-  external set_caller : [>`tipsquery] obj -> [>`widget] obj -> unit
-      = "ml_gtk_tips_query_set_caller"
-  external set_labels :
-      [>`tipsquery] obj -> inactive:string -> no_tip:string -> unit
-      = "ml_gtk_tips_query_set_labels"
-  external set_emit_always : [>`tipsquery] obj -> bool -> unit
-      = "ml_gtk_tips_query_set_emit_always"
-  external get_caller : [>`tipsquery] obj -> widget obj
-      = "ml_gtk_tips_query_get_caller"
-  external get_label_inactive : [>`tipsquery] obj -> string
-      = "ml_gtk_tips_query_get_label_inactive"
-  external get_label_no_tip : [>`tipsquery] obj -> string
-      = "ml_gtk_tips_query_get_label_no_tip"
-  external get_emit_always : [>`tipsquery] obj -> bool
-      = "ml_gtk_tips_query_get_emit_always"
-  let set_labels ?inactive ?no_tip w =
-    set_labels w
-      ~inactive:(may_default get_label_inactive w ~opt:inactive)
-      ~no_tip:(may_default get_label_no_tip w ~opt:no_tip)
-  let set ?caller ?emit_always ?label_inactive ?label_no_tip w =
-    may caller ~f:(set_caller w);
-    may emit_always ~f:(set_emit_always w);
-    if label_inactive <> None || label_no_tip <> None then
-      set_labels w ?inactive:label_inactive ?no_tip:label_no_tip
-  module Signals = struct
-    open GtkArgv
-    open GtkSignal
-    let start_query : ([>`tipsquery],_) t =
-      { name = "start_query"; marshaller = marshal_unit }
-    let stop_query : ([>`tipsquery],_) t =
-      { name = "stop_query"; marshaller = marshal_unit }
-    let widget_entered :
-       ([>`tipsquery],
-        widget obj option ->
-        text:string option -> privat:string option -> unit) t =
-      let marshal f _ = function
-        | OBJECT opt :: STRING text :: STRING privat :: _ ->
-           f (may_map ~f:Widget.cast opt) ~text ~privat
-        | _ -> invalid_arg "GtkMisc.TipsQuery.Signals.marshal_entered"
-      in
-      { name = "widget_entered"; marshaller = marshal }
-    let widget_selected :
-       ([>`tipsquery],
-        widget obj option ->
-        text:string option ->
-        privat:string option -> GdkEvent.Button.t option -> bool) t =
-      let marshal f argv = function
-        | OBJECT obj :: STRING text :: STRING privat :: POINTER p :: _ ->
-           let stop = 
-             f (may_map ~f:Widget.cast obj) ~text ~privat
-               (may_map ~f:GdkEvent.unsafe_copy p)
-            in set_result argv (`BOOL stop)
-        | _ -> invalid_arg "GtkMisc.TipsQuery.Signals.marshal_selected"
-      in
-      { name = "widget_selected"; marshaller = marshal }
-  end
-end
-
-module Pixmap = struct
-  let cast w : pixmap obj = Object.try_cast w "GtkPixmap"
-  external create : Gdk.pixmap -> ?mask:Gdk.bitmap -> pixmap obj
-      = "ml_gtk_pixmap_new"
-  let create ?mask img = create img ?mask
-  external set :
-      [>`pixmap] obj -> ?pixmap:Gdk.pixmap -> ?mask:Gdk.bitmap -> unit
-      = "ml_gtk_pixmap_set"
-  external pixmap : [>`pixmap] obj -> Gdk.pixmap = "ml_GtkPixmap_pixmap"
-  external mask : [>`pixmap] obj -> Gdk.bitmap = "ml_GtkPixmap_mask"
-end
-
-module Separator = struct
-  let cast w : separator obj = Object.try_cast w "GtkSeparator"
-  external hseparator_new : unit -> separator obj = "ml_gtk_hseparator_new"
-  external vseparator_new : unit -> separator obj = "ml_gtk_vseparator_new"
-  let create (dir : Tags.orientation) =
-    if dir = `HORIZONTAL then hseparator_new () else vseparator_new ()
-end
-
-module FontSelection = struct
-  type null_terminated
-  let null_terminated arg : null_terminated =
-    match arg with None -> Obj.magic Gpointer.raw_null
-    | Some l ->
-       let len = List.length l in
-       let arr = Array.create (len + 1) "" in
-       let rec loop i = function
-           [] -> arr.(i) <- Obj.magic Gpointer.raw_null
-         | s::l -> arr.(i) <- s; loop (i+1) l
-       in loop 0 l;
-       Obj.magic (arr : string array)
-  let cast w : font_selection obj =
-    Object.try_cast w "GtkFontSelection"
-  external create : unit -> font_selection obj
-      = "ml_gtk_font_selection_new"
-  external get_font : [>`fontsel] obj -> Gdk.font
-      = "ml_gtk_font_selection_get_font"
-  let get_font w =
-    try Some (get_font w) with Gpointer.Null -> None
-  external get_font_name : [>`fontsel] obj -> string
-      = "ml_gtk_font_selection_get_font_name"
-  let get_font_name w =
-    try Some (get_font_name w) with Gpointer.Null -> None
-  external set_font_name : [>`fontsel] obj -> string -> unit
-      = "ml_gtk_font_selection_set_font_name"
-  external set_filter :
-    [>`fontsel] obj -> font_filter_type -> font_type list ->
-    null_terminated -> null_terminated -> null_terminated ->
-    null_terminated -> null_terminated -> null_terminated -> unit
-    = "ml_gtk_font_selection_set_filter_bc"
-      "ml_gtk_font_selection_set_filter"
-  let set_filter w ?kind:(tl=[`ALL]) ?foundry
-      ?weight ?slant ?setwidth ?spacing ?charset filter =
-    set_filter w filter tl (null_terminated foundry)
-      (null_terminated weight) (null_terminated slant)
-      (null_terminated setwidth) (null_terminated spacing)
-      (null_terminated charset)
-  external get_preview_text : [>`fontsel] obj -> string
-      = "ml_gtk_font_selection_get_preview_text"
-  external set_preview_text : [>`fontsel] obj -> string -> unit
-      = "ml_gtk_font_selection_set_preview_text"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkNew.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkNew.ml
deleted file mode 100644 (file)
index 532a709..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-type t
-
-(* if you modify this type modify widget_info_array 
-   in ml_gtk.c in accordance *)
-type object_type =
-  | OBJECT  | WIDGET  | MISC  | LABEL  | ACCELLABEL  | TIPSQUERY  | ARROW
-  | IMAGE   | PIXMAP  | CONTAINER  | BIN  | ALIGNMENT  | FRAME  | ASPECTFRAME
-  | BUTTON  | TOGGLEBUTTON  | CHECKBUTTON  | RADIOBUTTON  | OPTIONMENU
-  | ITEM  | MENUITEM  | CHECKMENUITEM  | RADIOMENUITEM  | TEAROFFMENUITEM
-  | LISTITEM  | TREEITEM  | WINDOW  | COLORSELECTIONDIALOG  | DIALOG
-  | INPUTDIALOG  | FILESELECTION  | FONTSELECTIONDIALOG  | PLUG
-  | EVENTBOX  | HANDLEBOX  | SCROLLEDWINDOW  | VIEWPORT  | BOX
-  | BUTTONBOX  | HBUTTONBOX  | VBUTTONBOX  | VBOX  | COLORSELECTION
-  | GAMMACURVE  | HBOX  | COMBO  | STATUSBAR  | CLIST  | CTREE  | FIXED
-  | NOTEBOOK  | FONTSELECTION  | PANED  | HPANED  | VPANED  | LAYOUT
-  | LIST  | MENUSHELL  | MENUBAR  | MENU  | PACKER  | SOCKET  | TABLE
-  | TOOLBAR  | TREE  | CALENDAR  | DRAWINGAREA  | CURVE  | EDITABLE
-  | ENTRY  | SPINBUTTON  | TEXT  | RULER  | HRULER  | VRULER  | RANGE
-  | SCALE  | HSCALE  | VSCALE  | SCROLLBAR  | HSCROLLBAR  | VSCROLLBAR
-  | SEPARATOR  | HSEPARATOR  | VSEPARATOR  | PREVIEW  | PROGRESS
-  | PROGRESSBAR  | DATA  | ADJUSTMENT  | TOOLTIPS  | ITEMFACTORY
-
-external set_ml_class_init  : (t -> unit) -> unit = "set_ml_class_init"
-external signal_new : string -> int -> t -> object_type -> int  -> int
-    = "ml_gtk_signal_new"
-external object_class_add_signals : t -> int array -> int -> unit
-    = "ml_gtk_object_class_add_signals"
-external type_unique :
-    name:string -> parent:object_type -> nsignals:int -> gtk_type
-    = "ml_gtk_type_unique"
-external type_new : gtk_type -> unit obj
-    = "ml_gtk_type_new"
-
-open GtkSignal
-
-let make_new_widget ~name ~parent
-    ~(signals : ('a, unit -> unit) GtkSignal.t list) =
-  let nsignals = List.length signals in
-  let new_type = type_unique ~name ~parent ~nsignals in
-  let signal_num_array = Array.create nsignals 0 in
-  let class_init_func classe =
-    List.fold_left signals ~init:0 ~f:
-      (fun i signal ->
-       signal_num_array.(i) <- signal_new signal.name 1 classe parent i;
-       i+1);
-    object_class_add_signals classe signal_num_array nsignals
-  in
-  new_type,
-  (fun () ->
-    set_ml_class_init class_init_func;
-    type_new new_type)
-  (* , signal_num_array *)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkPack.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkPack.ml
deleted file mode 100644 (file)
index 20adb05..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module Box = struct
-  let cast w : box obj = Object.try_cast w "GtkBox"
-  external coerce : [>`box] obj -> box obj = "%identity"
-  external pack_start :
-      [>`box] obj -> [>`widget] obj ->
-      expand:bool -> fill:bool -> padding:int -> unit
-      = "ml_gtk_box_pack_start"
-  external pack_end :
-      [>`box] obj -> [>`widget] obj ->
-      expand:bool -> fill:bool -> padding:int -> unit
-      = "ml_gtk_box_pack_end"
-  let pack box ?from:( dir = (`START : pack_type))
-      ?(expand=false) ?(fill=true) ?(padding=0) child =
-    (match dir with `START -> pack_start | `END -> pack_end)
-      box child ~expand ~fill ~padding
-  external reorder_child : [>`box] obj -> [>`widget] obj -> pos:int -> unit
-      = "ml_gtk_box_reorder_child"
-  external set_homogeneous : [>`box] obj -> bool -> unit
-      = "ml_gtk_box_set_homogeneous"
-  external set_spacing : [>`box] obj -> int -> unit
-      = "ml_gtk_box_set_spacing"
-  let set ?homogeneous ?spacing w =
-    may homogeneous ~f:(set_homogeneous w);
-    may spacing ~f:(set_spacing w)
-  type packing =
-      { expand: bool; fill: bool; padding: int; pack_type: pack_type }
-  external query_child_packing : [>`box] obj -> [>`widget] obj -> packing
-      = "ml_gtk_box_query_child_packing"
-  external set_child_packing :
-      [>`box] obj -> [>`widget] obj ->
-      ?expand:bool -> ?fill:bool -> ?padding:int -> ?from:pack_type -> unit
-      = "ml_gtk_box_set_child_packing_bc" "ml_gtk_box_set_child_packing"
-  external hbox_new : homogeneous:bool -> spacing:int -> box obj
-      = "ml_gtk_hbox_new"
-  external vbox_new : homogeneous:bool -> spacing:int -> box obj
-      = "ml_gtk_vbox_new"
-  let create (dir : orientation) ?(homogeneous=false) ?(spacing=0) () =
-    (match dir with `HORIZONTAL -> hbox_new | `VERTICAL -> vbox_new)
-      ~homogeneous ~spacing
-end
-
-module BBox = struct
-  (* Omitted defaults setting *)
-  let cast w : button_box obj = Object.try_cast w "GtkBBox"
-  external coerce : [>`bbox] obj -> button_box obj = "%identity"
-  type bbox_style = [ `DEFAULT_STYLE|`SPREAD|`EDGE|`START|`END ]
-  external get_spacing : [>`bbox] obj -> int = "ml_gtk_button_box_get_spacing"
-  external get_child_width : [>`bbox] obj -> int
-      = "ml_gtk_button_box_get_child_min_width"
-  external get_child_height : [>`bbox] obj -> int
-      = "ml_gtk_button_box_get_child_min_height"
-  external get_child_ipadx : [>`bbox] obj -> int
-      = "ml_gtk_button_box_get_child_ipad_x"
-  external get_child_ipady : [>`bbox] obj -> int
-      = "ml_gtk_button_box_get_child_ipad_y"
-  external get_layout : [>`bbox] obj -> bbox_style
-      = "ml_gtk_button_box_get_layout_style"
-  external set_spacing : [>`bbox] obj -> int -> unit
-      = "ml_gtk_button_box_set_spacing"
-  external set_child_size : [>`bbox] obj -> width:int -> height:int -> unit
-      = "ml_gtk_button_box_set_child_size"
-  external set_child_ipadding : [>`bbox] obj -> x:int -> y:int -> unit
-      = "ml_gtk_button_box_set_child_ipadding"
-  external set_layout : [>`bbox] obj -> bbox_style -> unit
-      = "ml_gtk_button_box_set_layout"
-  let set_child_size w ?width ?height () =
-    set_child_size w ~width:(may_default get_child_width w ~opt:width)
-      ~height:(may_default get_child_height w ~opt:height)
-  let set_child_ipadding w ?x ?y () =
-    set_child_ipadding w
-      ~x:(may_default get_child_ipadx w ~opt:x)
-      ~y:(may_default get_child_ipady w ~opt:y)
-  let set ?spacing ?child_width ?child_height ?child_ipadx
-      ?child_ipady ?layout w =
-    may spacing ~f:(set_spacing w);
-    if child_width <> None || child_height <> None then
-      set_child_size w ?width:child_width ?height:child_height ();
-    if child_ipadx <> None || child_ipady <> None then
-      set_child_ipadding w ?x:child_ipadx ?y:child_ipady ();
-    may layout ~f:(set_layout w)
-  external set_child_size_default : width:int -> height:int -> unit
-      = "ml_gtk_button_box_set_child_size_default"
-  external set_child_ipadding_default : x:int -> y:int -> unit
-      = "ml_gtk_button_box_set_child_ipadding_default"
-  external create_hbbox : unit -> button_box obj = "ml_gtk_hbutton_box_new"
-  external create_vbbox : unit -> button_box obj = "ml_gtk_vbutton_box_new"
-  let create (dir : orientation) =
-    if dir = `HORIZONTAL then create_hbbox () else create_vbbox ()
-end
-
-module Fixed = struct
-  let cast w : fixed obj = Object.try_cast w "GtkFixed"
-  external create : unit -> fixed obj = "ml_gtk_fixed_new"
-  external put : [>`fixed] obj -> [>`widget] obj -> x:int -> y:int -> unit
-      = "ml_gtk_fixed_put"
-  external move : [>`fixed] obj -> [>`widget] obj -> x:int -> y:int -> unit
-      = "ml_gtk_fixed_move"
-end
-
-module Layout = struct
-  let cast w : layout obj = Object.try_cast w "GtkLayout"
-  external create :
-      [>`adjustment] optobj -> [>`adjustment] optobj -> layout obj
-      = "ml_gtk_layout_new"
-  external put : [>`layout] obj -> [>`widget] obj -> x:int -> y:int -> unit
-      = "ml_gtk_layout_put"
-  external move : [>`layout] obj -> [>`widget] obj -> x:int -> y:int -> unit
-      = "ml_gtk_layout_move"
-  external set_size : [>`layout] obj -> width:int -> height:int -> unit
-      = "ml_gtk_layout_set_size"
-  external get_hadjustment : [>`layout] obj -> adjustment obj
-      = "ml_gtk_layout_get_hadjustment"
-  external get_vadjustment : [>`layout] obj -> adjustment obj
-      = "ml_gtk_layout_get_vadjustment"
-  external set_hadjustment : [>`layout] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_layout_set_hadjustment"
-  external set_vadjustment : [>`layout] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_layout_set_vadjustment"
-  external freeze : [>`layout] obj -> unit
-      = "ml_gtk_layout_freeze"
-  external thaw : [>`layout] obj -> unit
-      = "ml_gtk_layout_thaw"
-  external get_height : [>`layout] obj -> int
-      = "ml_gtk_layout_get_height"
-  external get_width : [>`layout] obj -> int
-      = "ml_gtk_layout_get_width"
-  let set_size ?width ?height w =
-    set_size w ~width:(may_default get_width w ~opt:width)
-      ~height:(may_default get_height w ~opt:height)
-end
-
-
-module Packer = struct
-  let cast w : packer obj = Object.try_cast w "GtkPacker"
-  external create : unit -> packer obj = "ml_gtk_packer_new"
-  external add :
-      [>`packer] obj -> [>`widget] obj ->
-      ?side:side_type -> ?anchor:anchor_type ->
-      ?options:packer_options list ->
-      ?border_width:int -> ?pad_x:int -> ?pad_y:int ->
-      ?i_pad_x:int -> ?i_pad_y:int -> unit
-      = "ml_gtk_packer_add_bc" "ml_gtk_packer_add"
-  external add_defaults :
-      [>`packer] obj -> [>`widget] obj ->
-      ?side:side_type -> ?anchor:anchor_type ->
-      ?options:packer_options list -> unit
-      = "ml_gtk_packer_add_defaults"
-  external set_child_packing :
-      [>`packer] obj -> [>`widget] obj ->
-      ?side:side_type -> ?anchor:anchor_type ->
-      ?options:packer_options list ->
-      ?border_width:int -> ?pad_x:int -> ?pad_y:int ->
-      ?i_pad_x:int -> ?i_pad_y:int -> unit
-      = "ml_gtk_packer_set_child_packing_bc" "ml_gtk_packer_set_child_packing"
-  external reorder_child : [>`packer] obj -> [>`widget] obj -> pos:int -> unit
-      = "ml_gtk_packer_reorder_child"
-  external set_spacing : [>`packer] obj -> int -> unit
-      = "ml_gtk_packer_set_spacing"
-  external set_defaults :
-      [>`packer] obj -> ?border_width:int -> ?pad_x:int -> ?pad_y:int ->
-      ?i_pad_x:int -> ?i_pad_y:int -> unit -> unit
-      = "ml_gtk_packer_set_defaults_bc" "ml_gtk_packer_set_defaults"
-
-  let build_options ?(expand=false) ?(fill=`BOTH) () =
-    (if expand then [`PACK_EXPAND] else []) @
-    (match (fill : expand_type) with `NONE -> []
-    | `X -> [`FILL_X]
-    | `Y -> [`FILL_Y]
-    | `BOTH -> [`FILL_X;`FILL_Y])
-end
-
-module Paned = struct
-  let cast w : paned obj = Object.try_cast w "GtkPaned"
-  external add1 : [>`paned] obj -> [>`widget] obj -> unit
-      = "ml_gtk_paned_add1"
-  external add2 : [>`paned] obj -> [>`widget] obj -> unit
-      = "ml_gtk_paned_add2"
-  external set_handle_size : [>`paned] obj -> int -> unit
-      = "ml_gtk_paned_set_handle_size"
-  external set_gutter_size : [>`paned] obj -> int -> unit
-      = "ml_gtk_paned_set_gutter_size"
-  let set ?handle_size ?gutter_size w =
-    may ~f:(set_handle_size w) handle_size;
-    may ~f:(set_gutter_size w) gutter_size
-  external child1 : [>`paned] obj -> widget obj = "ml_gtk_paned_child1"
-  external child2 : [>`paned] obj -> widget obj = "ml_gtk_paned_child2"
-  external handle_size : [>`paned] obj -> int = "ml_gtk_paned_handle_size"
-  external gutter_size : [>`paned] obj -> int = "ml_gtk_paned_handle_size"
-  external hpaned_new : unit -> paned obj = "ml_gtk_hpaned_new"
-  external vpaned_new : unit -> paned obj = "ml_gtk_vpaned_new"
-  let create (dir : orientation) =
-    if dir = `HORIZONTAL then hpaned_new () else vpaned_new ()
-end
-
-module Table = struct
-  let cast w : table obj = Object.try_cast w "GtkTable"
-  external create : int -> int -> homogeneous:bool -> table obj
-      = "ml_gtk_table_new"
-  let create ~rows:r ~columns:c ?(homogeneous=false) () =
-    create r c ~homogeneous
-  external attach :
-      [>`table] obj -> [>`widget] obj -> left:int -> right:int ->
-      top:int -> bottom:int -> xoptions:attach_options list ->
-      yoptions:attach_options list -> xpadding:int -> ypadding:int -> unit
-      = "ml_gtk_table_attach_bc" "ml_gtk_table_attach"
-  let has_x : expand_type -> bool =
-    function `X|`BOTH -> true | `Y|`NONE -> false
-  let has_y : expand_type -> bool =
-    function `Y|`BOTH -> true | `X|`NONE -> false
-  let attach t ~left ~top ?(right=left+1) ?(bottom=top+1)
-      ?(expand=`NONE) ?(fill=`BOTH) ?(shrink=`NONE)
-      ?(xpadding=0) ?(ypadding=0) w =
-    let xoptions = if has_x shrink then [`SHRINK] else [] in
-    let xoptions = if has_x fill then `FILL::xoptions else xoptions in
-    let xoptions = if has_x expand then `EXPAND::xoptions else xoptions in
-    let yoptions = if has_y shrink then [`SHRINK] else [] in
-    let yoptions = if has_y fill then `FILL::yoptions else yoptions in
-    let yoptions = if has_y expand then `EXPAND::yoptions else yoptions in
-    attach t w ~left ~top ~right ~bottom ~xoptions ~yoptions
-      ~xpadding ~ypadding
-  external set_row_spacing : [>`table] obj -> int -> int -> unit
-      = "ml_gtk_table_set_row_spacing"
-  external set_col_spacing : [>`table] obj -> int -> int -> unit
-      = "ml_gtk_table_set_col_spacing"
-  external set_row_spacings : [>`table] obj -> int -> unit
-      = "ml_gtk_table_set_row_spacings"
-  external set_col_spacings : [>`table] obj -> int -> unit
-      = "ml_gtk_table_set_col_spacings"
-  external set_homogeneous : [>`table] obj -> bool -> unit
-      = "ml_gtk_table_set_homogeneous"
-  let set ?homogeneous ?row_spacings ?col_spacings w =
-    may row_spacings ~f:(set_row_spacings w);
-    may col_spacings ~f:(set_col_spacings w);
-    may homogeneous ~f:(set_homogeneous w)
-end
-
-module Notebook = struct
-  let cast w : notebook obj = Object.try_cast w "GtkNotebook"
-  external create : unit -> notebook obj = "ml_gtk_notebook_new"
-  external insert_page :
-      [>`notebook] obj -> [>`widget] obj -> tab_label:[>`widget] optobj ->
-      menu_label:[>`widget] optobj -> pos:int -> unit
-      = "ml_gtk_notebook_insert_page_menu"
-      (* default is append to end *)
-  external remove_page : [>`notebook] obj -> int -> unit
-      = "ml_gtk_notebook_remove_page"
-  external get_current_page : [>`notebook] obj -> int
-      = "ml_gtk_notebook_get_current_page"
-  external set_page : [>`notebook] obj -> int -> unit
-      = "ml_gtk_notebook_set_page"
-  external set_tab_pos : [>`notebook] obj -> position -> unit
-      = "ml_gtk_notebook_set_tab_pos"
-  external set_homogeneous_tabs : [>`notebook] obj -> bool -> unit
-      = "ml_gtk_notebook_set_homogeneous_tabs"
-  external set_show_tabs : [>`notebook] obj -> bool -> unit
-      = "ml_gtk_notebook_set_show_tabs"
-  external set_show_border : [>`notebook] obj -> bool -> unit
-      = "ml_gtk_notebook_set_show_border"
-  external set_scrollable : [>`notebook] obj -> bool -> unit
-      = "ml_gtk_notebook_set_scrollable"
-  external set_tab_border : [>`notebook] obj -> int -> unit
-      = "ml_gtk_notebook_set_tab_border"
-  external popup_enable : [>`notebook] obj -> unit
-      = "ml_gtk_notebook_popup_enable"
-  external popup_disable : [>`notebook] obj -> unit
-      = "ml_gtk_notebook_popup_disable"
-  external get_nth_page : [>`notebook] obj -> int -> widget obj
-      = "ml_gtk_notebook_get_nth_page"
-  external page_num : [>`notebook] obj -> [>`widget] obj -> int
-      = "ml_gtk_notebook_page_num"
-  external next_page : [>`notebook] obj -> unit
-      = "ml_gtk_notebook_next_page"
-  external prev_page : [>`notebook] obj -> unit
-      = "ml_gtk_notebook_prev_page"
-  external get_tab_label : [>`notebook] obj -> [>`widget] obj -> widget obj
-      = "ml_gtk_notebook_get_tab_label"
-  external set_tab_label :
-      [>`notebook] obj -> [>`widget] obj -> [>`widget] obj -> unit
-      = "ml_gtk_notebook_set_tab_label"
-  external get_menu_label : [>`notebook] obj -> [>`widget] obj -> widget obj
-      = "ml_gtk_notebook_get_menu_label"
-  external set_menu_label :
-      [>`notebook] obj -> [>`widget] obj -> [>`widget] obj -> unit
-      = "ml_gtk_notebook_set_menu_label"
-  external reorder_child : [>`notebook] obj -> [>`widget] obj -> int -> unit
-      = "ml_gtk_notebook_reorder_child"
-
-  let set_popup w = function
-      true -> popup_enable w
-    | false -> popup_disable w
-  let set ?page ?tab_pos ?show_tabs ?homogeneous_tabs
-      ?show_border ?scrollable ?tab_border ?popup w =
-    let may_set f = may ~f:(f w) in
-    may_set set_page page;
-    may_set set_tab_pos tab_pos;
-    may_set set_show_tabs show_tabs;
-    may_set set_homogeneous_tabs homogeneous_tabs;
-    may_set set_show_border show_border;
-    may_set set_scrollable scrollable;
-    may_set set_tab_border tab_border;
-    may_set set_popup popup
-  module Signals = struct
-    open GtkArgv
-    open GtkSignal
-    let marshal_page f argv = function
-      |        _ :: INT page :: _ -> f page
-      |        _ -> invalid_arg "GtkPack.Notebook.Signals.marshal_page"
-    let switch_page : ([>`notebook],_) t =
-      { name = "switch_page"; marshaller = marshal_page }
-  end
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkRange.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkRange.ml
deleted file mode 100644 (file)
index b67e49b..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module Progress = struct
-  let cast w : progress obj = Object.try_cast w "GtkProgress"
-  external set_show_text : [>`progress] obj -> bool -> unit
-      = "ml_gtk_progress_set_show_text"
-  external set_text_alignment :
-      [>`progress] obj -> ?x:float -> ?y:float -> unit -> unit
-      = "ml_gtk_progress_set_show_text"
-  external set_format_string : [>`progress] obj -> string -> unit
-      = "ml_gtk_progress_set_format_string"
-  external set_adjustment : [>`progress] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_progress_set_adjustment"
-  external configure :
-      [>`progress] obj -> current:float -> min:float -> max:float -> unit
-      = "ml_gtk_progress_configure"
-  external set_percentage : [>`progress] obj -> float -> unit
-      = "ml_gtk_progress_set_percentage"
-  external set_value : [>`progress] obj -> float -> unit
-      = "ml_gtk_progress_set_value"
-  external get_value : [>`progress] obj -> float
-      = "ml_gtk_progress_get_value"
-  external get_percentage : [>`progress] obj -> float
-      = "ml_gtk_progress_get_current_percentage"
-  external set_activity_mode : [>`progress] obj -> bool -> unit
-      = "ml_gtk_progress_set_activity_mode"
-  external get_current_text : [>`progress] obj -> string
-      = "ml_gtk_progress_get_current_text"
-  external get_adjustment : [>`progress] obj -> adjustment obj
-      = "ml_gtk_progress_get_adjustment"
-  let set ?value ?percentage ?activity_mode
-      ?show_text ?format_string ?text_xalign ?text_yalign w =
-    may value ~f:(set_value w);
-    may percentage ~f:(set_percentage w);
-    may activity_mode ~f:(set_activity_mode w);
-    may show_text ~f:(set_show_text w);
-    may format_string ~f:(set_format_string w);
-    if text_xalign <> None || text_yalign <> None then
-      set_text_alignment w ?x:text_xalign ?y:text_yalign ()
-end
-
-module ProgressBar = struct
-  let cast w : progress_bar obj = Object.try_cast w "GtkProgressBar"
-  external create : unit -> progress_bar obj = "ml_gtk_progress_bar_new"
-  external create_with_adjustment : [>`adjustment] obj -> progress_bar obj
-      = "ml_gtk_progress_bar_new_with_adjustment"
-  external set_bar_style :
-      [>`progressbar] obj -> [`CONTINUOUS|`DISCRETE] -> unit
-      = "ml_gtk_progress_bar_set_bar_style"
-  external set_discrete_blocks : [>`progressbar] obj -> int -> unit
-      = "ml_gtk_progress_bar_set_discrete_blocks"
-  external set_activity_step : [>`progressbar] obj -> int -> unit
-      = "ml_gtk_progress_bar_set_activity_step"
-  external set_activity_blocks : [>`progressbar] obj -> int -> unit
-      = "ml_gtk_progress_bar_set_activity_blocks"
-  external set_orientation :
-      [>`progressbar] obj -> Tags.progress_bar_orientation -> unit
-      = "ml_gtk_progress_bar_set_orientation"
-  let set ?bar_style ?discrete_blocks ?activity_step ?activity_blocks w =
-    let may_set f opt = may opt ~f:(f w) in
-    may_set set_bar_style bar_style;
-    may_set set_discrete_blocks discrete_blocks;
-    may_set set_activity_step activity_step;
-    may_set set_activity_blocks activity_blocks
-end
-
-module Range = struct
-  let cast w : range obj = Object.try_cast w "GtkRange"
-  external coerce : [>`range] obj -> range obj = "%identity"
-  external get_adjustment : [>`range] obj -> adjustment obj
-      = "ml_gtk_range_get_adjustment"
-  external set_adjustment : [>`range] obj -> [>`adjustment] obj -> unit
-      = "ml_gtk_range_set_adjustment"
-  external set_update_policy : [>`range] obj -> update_type -> unit
-      = "ml_gtk_range_set_update_policy"
-  let set ?adjustment ?update_policy w =
-    may adjustment ~f:(set_adjustment w);
-    may update_policy ~f:(set_update_policy w)
-end
-
-module Scale = struct
-  let cast w : scale obj = Object.try_cast w "GtkScale"
-  external hscale_new : [>`adjustment] optobj -> scale obj
-      = "ml_gtk_hscale_new"
-  external vscale_new : [>`adjustment] optobj -> scale obj
-      = "ml_gtk_vscale_new"
-  let create ?adjustment (dir : orientation) =
-    let create = if dir = `HORIZONTAL then hscale_new else vscale_new  in
-    create (Gpointer.optboxed adjustment)
-  external set_digits : [>`scale] obj -> int -> unit
-      = "ml_gtk_scale_set_digits"
-  external set_draw_value : [>`scale] obj -> bool -> unit
-      = "ml_gtk_scale_set_draw_value"
-  external set_value_pos : [>`scale] obj -> position -> unit
-      = "ml_gtk_scale_set_value_pos"
-  external get_value_width : [>`scale] obj -> int
-      = "ml_gtk_scale_get_value_width"
-  external draw_value : [>`scale] obj -> unit
-      = "ml_gtk_scale_draw_value"
-  let set ?digits ?draw_value ?value_pos w =
-    may digits ~f:(set_digits w);
-    may draw_value ~f:(set_draw_value w);
-    may value_pos ~f:(set_value_pos w)
-end
-
-module Scrollbar = struct
-  let cast w : scrollbar obj = Object.try_cast w "GtkScrollbar"
-  external hscrollbar_new : [>`adjustment] optobj -> scrollbar obj
-      = "ml_gtk_hscrollbar_new"
-  external vscrollbar_new : [>`adjustment] optobj -> scrollbar obj
-      = "ml_gtk_vscrollbar_new"
-  let create ?adjustment (dir : orientation) =
-    let create = if dir = `HORIZONTAL then hscrollbar_new else vscrollbar_new
-    in create (Gpointer.optboxed adjustment)
-end
-
-module Ruler = struct
-  let cast w : ruler obj = Object.try_cast w "GtkRuler"
-  external hruler_new : unit -> ruler obj = "ml_gtk_hruler_new"
-  external vruler_new : unit -> ruler obj = "ml_gtk_vruler_new"
-  let create (dir : orientation) =
-    if dir = `HORIZONTAL then hruler_new () else vruler_new ()
-  external set_metric : [>`ruler] obj -> metric_type -> unit
-      = "ml_gtk_ruler_set_metric"
-  external set_range :
-      [>`ruler] obj ->
-      lower:float -> upper:float -> position:float -> max_size:float -> unit
-      = "ml_gtk_ruler_set_range"
-  external get_lower : [>`ruler] obj -> float = "ml_gtk_ruler_get_lower"
-  external get_upper : [>`ruler] obj -> float = "ml_gtk_ruler_get_upper"
-  external get_position : [>`ruler] obj -> float = "ml_gtk_ruler_get_position"
-  external get_max_size : [>`ruler] obj -> float = "ml_gtk_ruler_get_max_size"
-  let set_range ?lower ?upper ?position ?max_size w =
-    set_range w ~lower:(may_default get_lower w ~opt:lower)
-      ~upper:(may_default get_upper w ~opt:upper)
-      ~position:(may_default get_position w ~opt:position)
-      ~max_size:(may_default get_max_size w ~opt:max_size)
-  let set ?metric ?lower ?upper ?position ?max_size w =
-    may metric ~f:(set_metric w);
-    if lower <> None || upper <> None || position <> None || max_size <> None
-    then set_range w ?lower ?upper ?position ?max_size
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.ml
deleted file mode 100644 (file)
index 8fa4602..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-type id
-type ('a,'b) t =
- { name: string;
-   marshaller: ('b -> GtkArgv.t -> GtkArgv.data list -> unit) }
-
-let enter_callback = ref (fun () -> ())
-and exit_callback = ref (fun () -> ())
-
-let stop_emit_ref = ref false
-let stop_emit () = stop_emit_ref := true
-
-type saved_state = State of bool
-let push_callback () =
-  !enter_callback ();
-  let old = !stop_emit_ref in
-  stop_emit_ref := false;
-  State old
-
-let pop_callback (State old) =
-  let res = !stop_emit_ref in
-  stop_emit_ref := old;
-  !exit_callback ();
-  res
-
-external connect :
-  'a obj -> name:string -> callback:(GtkArgv.t -> unit) -> after:bool -> id
-  = "ml_gtk_signal_connect"
-external emit_stop_by_name : 'a obj -> name:string -> unit
-  = "ml_gtk_signal_emit_stop_by_name"
-let connect  ~(sgn : ('a, _) t) ~callback ?(after=false) (obj : 'a obj) =
-  let callback argv =
-    let old = push_callback () in
-    let exn =
-      try sgn.marshaller callback argv (GtkArgv.get_args argv); None
-      with exn -> Some exn
-    in
-    if pop_callback old then emit_stop_by_name obj ~name:sgn.name;
-    Gaux.may ~f:raise exn
-  in
-  connect obj ~name:sgn.name ~callback ~after
-external disconnect : 'a obj -> id -> unit
-  = "ml_gtk_signal_disconnect"
-external handler_block : 'a obj -> id -> unit
-  = "ml_gtk_signal_handler_block"
-external handler_unblock : 'a obj -> id -> unit
-  = "ml_gtk_signal_handler_unblock"
-
-let marshal_unit f _ _ = f ()
-let marshal_int f _ = function
-  | GtkArgv.INT n :: _ -> f n
-  | _ -> invalid_arg "GtkSignal.marshal_int"
-
-let emit (obj : 'a obj) ~(sgn : ('a, 'b) t)
-    ~(emitter : 'a obj -> name:string -> 'b) =
-  emitter obj ~name:sgn.name
-external emit_none : 'a obj -> name:string -> unit -> unit
-    = "ml_gtk_signal_emit_none"
-let emit_unit obj ~sgn = emit obj ~emitter:emit_none ~sgn ()
-external emit_int : 'a obj -> name:string -> int -> unit
-    = "ml_gtk_signal_emit_int"
-let emit_int = emit ~emitter:emit_int
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.mli b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkSignal.mli
deleted file mode 100644 (file)
index 0ef2ab2..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-type id
-type ('a,'b) t =
- { name: string;
-   marshaller: ('b -> GtkArgv.t -> GtkArgv.data list -> unit) }
-
-val stop_emit : unit -> unit
-    (* Call [stop_emit ()] in a callback to prohibit further handling
-       of the current signal invocation, by calling [emit_stop_by_name].
-       Be careful about where you use it, since the concept of current
-       signal may be tricky. *)
-
-val connect :
-  sgn:('a, 'b) t -> callback:'b -> ?after:bool -> 'a obj -> id
-    (* You may use [stop_emit] inside the callback *)
-
-external disconnect : 'a obj -> id -> unit
-  = "ml_gtk_signal_disconnect"
-external emit_stop_by_name : 'a obj -> name:string -> unit
-  = "ml_gtk_signal_emit_stop_by_name"
-    (* Unsafe: use [stop_emit] instead. *)
-external handler_block : 'a obj -> id -> unit
-  = "ml_gtk_signal_handler_block"
-external handler_unblock : 'a obj -> id -> unit
-  = "ml_gtk_signal_handler_unblock"
-
-(* Some marshaller functions, to build signals *)
-val marshal_unit : (unit -> unit) -> GtkArgv.t -> GtkArgv.data list -> unit
-val marshal_int : (int -> unit) -> GtkArgv.t -> GtkArgv.data list -> unit
-
-(* Emitter functions *)
-val emit :
-  'a obj -> sgn:('a, 'b) t -> emitter:('a obj -> name:string -> 'b) -> 'b
-val emit_unit : 'a obj -> sgn:('a, unit -> unit) t -> unit
-val emit_int : 'a obj -> sgn:('a, int -> unit) t -> int -> unit
-
-(* Internal functions. *)
-val enter_callback : (unit -> unit) ref
-val exit_callback : (unit -> unit) ref
-type saved_state
-val push_callback : unit -> saved_state
-val pop_callback : saved_state -> bool
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThInit.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThInit.ml
deleted file mode 100644 (file)
index 517f80b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-(* $Id$ *)
-
-(* Start the main thread in a threaded toplevel *)
-
-let thread = GtkThread.start ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThread.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkThread.ml
deleted file mode 100644 (file)
index 3ab577e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(* $Id$ *)
-
-open GtkMain
-
-(* We check first whether there are some event pending, and run
-   some iterations. We then need to delay, thus focing a thread switch. *)
-
-let main () =
-  try
-    let loop = (Glib.Main.create true) in
-    Main.loops := loop :: !Main.loops;
-    while Glib.Main.is_running loop do
-      let i = ref 0 in
-      while !i < 100 && Glib.Main.pending () do
-       Glib.Main.iteration true;
-       incr i
-      done;
-      Thread.delay 0.001
-    done;
-    Main.loops := List.tl !Main.loops
-  with exn ->
-    Main.loops := List.tl !Main.loops;
-    raise exn
-      
-let start = Thread.create main
-
-let _ =
-  let mutex = Mutex.create () in
-  let depth = ref 0 in
-  GtkSignal.enter_callback :=
-    (fun () -> if !depth = 0 then Mutex.lock mutex; incr depth);
-  GtkSignal.exit_callback :=
-    (fun () -> decr depth; if !depth = 0 then Mutex.unlock mutex)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkTree.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkTree.ml
deleted file mode 100644 (file)
index 9260741..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module TreeItem = struct
-  let cast w : tree_item obj = Object.try_cast w "GtkTreeItem"
-  external create : unit -> tree_item obj = "ml_gtk_tree_item_new"
-  external create_with_label : string -> tree_item obj
-      = "ml_gtk_tree_item_new_with_label"
-  let create ?label () =
-    match label with None -> create ()
-    | Some label -> create_with_label label
-  external set_subtree : [>`treeitem] obj -> [>`widget] obj -> unit
-      = "ml_gtk_tree_item_set_subtree"
-  external remove_subtree : [>`treeitem] obj -> unit
-      = "ml_gtk_tree_item_remove_subtree"
-  external expand : [>`treeitem] obj -> unit
-      = "ml_gtk_tree_item_expand"
-  external collapse : [>`treeitem] obj -> unit
-      = "ml_gtk_tree_item_collapse"
-  external subtree : [>`treeitem] obj -> tree obj
-      = "ml_GTK_TREE_ITEM_SUBTREE"
-  module Signals = struct
-    open GtkSignal
-    let expand : ([>`treeitem],_) t =
-      { name = "expand"; marshaller = marshal_unit }
-    let collapse : ([>`treeitem],_) t =
-      { name = "collapse"; marshaller = marshal_unit }
-  end
-end
-
-module Tree = struct
-  let cast w : tree obj = Object.try_cast w "GtkTree"
-  external coerce : [>`tree] obj -> tree obj = "%identity"
-  external create : unit -> tree obj = "ml_gtk_tree_new"
-  external insert : [>`tree] obj -> [>`treeitem] obj -> pos:int -> unit
-      = "ml_gtk_tree_insert"
-  external remove_items : [>`tree] obj -> [>`treeitem] obj list -> unit
-      = "ml_gtk_tree_remove_items"
-  external clear_items : [>`tree] obj -> start:int -> stop:int -> unit
-      = "ml_gtk_tree_clear_items"
-  external select_item : [>`tree] obj -> pos:int -> unit
-      = "ml_gtk_tree_select_item"
-  external unselect_item : [>`tree] obj -> pos:int -> unit
-      = "ml_gtk_tree_unselect_item"
-  external child_position : [>`tree] obj -> [>`treeitem] obj -> int
-      = "ml_gtk_tree_child_position"
-  external set_selection_mode : [>`tree] obj -> selection_mode -> unit
-      = "ml_gtk_tree_set_selection_mode"
-  external set_view_mode : [>`tree] obj -> [`LINE|`ITEM] -> unit
-      = "ml_gtk_tree_set_view_mode"
-  external set_view_lines : [>`tree] obj -> bool -> unit
-      = "ml_gtk_tree_set_view_lines"
-  external selection : [>`tree] obj -> tree_item obj list =
-    "ml_gtk_tree_selection"
-  let set ?selection_mode ?view_mode ?view_lines w =
-    let may_set f = may ~f:(f w) in
-    may_set set_selection_mode selection_mode;
-    may_set set_view_mode view_mode;
-    may_set set_view_lines view_lines
-  module Signals = struct
-    open GtkSignal
-    let selection_changed : ([>`tree],_) t =
-      { name = "selection_changed"; marshaller = marshal_unit }
-    let select_child : ([>`tree],_) t =
-      { name = "select_child"; marshaller = Widget.Signals.marshal }
-    let unselect_child : ([>`tree],_) t =
-      { name = "unselect_child"; marshaller = Widget.Signals.marshal }
-  end
-end
-(*
-module CTree = struct
-  type t
-  type node =  [`ctree] obj * t
-  let cast w : ctree obj = Object.try_cast w "GtkCTree"
-  external create : cols:int -> treecol:int -> ctree obj = "ml_gtk_ctree_new"
-  external insert_node :
-      [>`ctree] obj -> ?parent:node -> ?sibling:node ->
-      titles:optstring array ->
-      spacing:int -> ?pclosed:Gdk.pixmap -> ?mclosed:Gdk.bitmap obj ->
-      ?popened:Gdk.pixmap -> ?mopened:Gdk.bitmap obj ->
-      is_leaf:bool -> expanded:bool -> node
-      = "ml_gtk_ctree_insert_node_bc" "ml_gtk_ctree_insert_node"
-  let insert_node'
-      w ?parent ?sibling ?(spacing = 0) ?(is_leaf = true)
-      ?(expanded = false)
-      ?pclosed ?mclosed ?popened ?mopened titles =
-    let len = GtkList.CList.get_columns w in
-    if List.length titles > len then invalid_arg "CTree.insert_node";
-    let arr = Array.create ~len None in
-    List.fold_left titles ~acc:0
-      ~f:(fun ~acc text -> arr.(acc) <- Some text; acc+1);
-    insert_node w
-      ?parent ?sibling ~titles:(Array.map ~f:optstring arr)
-      ~spacing ~is_leaf ~expanded
-      ?pclosed ?mclosed ?popened ?mopened 
-  external node_set_row_data : [>`ctree] obj -> node:node -> Obj.t -> unit
-      = "ml_gtk_ctree_node_set_row_data"
-  external node_get_row_data : [>`ctree] obj -> node:node -> Obj.t
-      = "ml_gtk_ctree_node_get_row_data"
-  external set_indent : [>`ctree] obj -> int -> unit
-      = "ml_gtk_ctree_set_indent"
-  module Signals = struct
-    open GtkSignal
-    let marshal_select f argv =
-      let node : node =
-        match GtkArgv.get_pointer argv ~pos:0 with
-          Some p -> Obj.magic p
-        | None -> invalid_arg "GtkTree.CTree.Signals.marshal_select"
-      in
-      f ~node ~column:(GtkArgv.get_int argv ~pos:1)
-
-    let tree_select_row : ([>`ctree],_) t =
-      { name = "tree_select_row"; marshaller = marshal_select }
-    let tree_unselect_row : ([>`ctree],_) t =
-      { name = "tree_unselect_row"; marshaller = marshal_select }
-  end
-end
-*)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkWindow.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkWindow.ml
deleted file mode 100644 (file)
index ffe00e9..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-(* $Id$ *)
-
-open Gaux
-open Gtk
-open Tags
-open GtkBase
-
-module Window = struct
-  let cast w : window obj = Object.try_cast w "GtkWindow"
-  external coerce : [>`window] obj -> window obj = "%identity"
-  external create : window_type -> window obj = "ml_gtk_window_new"
-  external set_title : [>`window] obj -> string -> unit
-      = "ml_gtk_window_set_title"
-  external set_wmclass : [>`window] obj -> name:string -> clas:string -> unit
-      = "ml_gtk_window_set_title"
-  external get_wmclass_name : [>`window] obj -> string
-      = "ml_gtk_window_get_wmclass_name"
-  external get_wmclass_class : [>`window] obj -> string
-      = "ml_gtk_window_get_wmclass_class"
-  (* set_focus/default are called by Widget.grab_focus/default *)
-  external set_focus : [>`window] obj -> [>`widget] obj -> unit
-      = "ml_gtk_window_set_focus"
-  external set_default : [>`window] obj -> [>`widget] obj -> unit
-      = "ml_gtk_window_set_default"
-  external set_policy :
-      [>`window] obj ->
-      allow_shrink:bool -> allow_grow:bool -> auto_shrink:bool -> unit
-      = "ml_gtk_window_set_policy"
-  external get_allow_shrink : [>`window] obj -> bool
-      = "ml_gtk_window_get_allow_shrink"
-  external get_allow_grow : [>`window] obj -> bool
-      = "ml_gtk_window_get_allow_grow"
-  external get_auto_shrink : [>`window] obj -> bool
-      = "ml_gtk_window_get_auto_shrink"
-  external activate_focus : [>`window] obj -> bool
-      = "ml_gtk_window_activate_focus"
-  external activate_default : [>`window] obj -> bool
-      = "ml_gtk_window_activate_default"
-  external set_modal : [>`window] obj -> bool -> unit
-      = "ml_gtk_window_set_modal"
-  external set_default_size :
-      [>`window] obj -> width:int -> height:int -> unit
-      = "ml_gtk_window_set_default_size"
-  external set_position : [>`window] obj -> window_position -> unit
-      = "ml_gtk_window_set_position"
-  external set_transient_for : [>`window] obj ->[>`window] obj -> unit
-      = "ml_gtk_window_set_transient_for"
-
-  let set_wmclass ?name ?clas:wm_class w =
-    set_wmclass w ~name:(may_default get_wmclass_name w ~opt:name)
-      ~clas:(may_default get_wmclass_class w ~opt:wm_class)
-  let set_policy ?allow_shrink ?allow_grow ?auto_shrink w =
-    set_policy w
-      ~allow_shrink:(may_default get_allow_shrink w ~opt:allow_shrink)
-      ~allow_grow:(may_default get_allow_grow w ~opt:allow_grow)
-      ~auto_shrink:(may_default get_auto_shrink w ~opt:auto_shrink)
-  let set ?title ?wm_name ?wm_class ?position ?allow_shrink ?allow_grow
-      ?auto_shrink ?modal ?(x = -2) ?(y = -2) w =
-    may title ~f:(set_title w);
-    if wm_name <> None || wm_class <> None then
-      set_wmclass w ?name:wm_name ?clas:wm_class;
-    may position ~f:(set_position w);
-    if allow_shrink <> None || allow_grow <> None || auto_shrink <> None then
-      set_policy w ?allow_shrink ?allow_grow ?auto_shrink;
-    may ~f:(set_modal w) modal;
-    if x <> -2 || y <> -2 then Widget.set_uposition w ~x ~y
-  external add_accel_group : [>`window] obj -> accel_group -> unit
-      = "ml_gtk_window_add_accel_group"
-  external remove_accel_group :
-      [>`window] obj -> accel_group -> unit
-      = "ml_gtk_window_remove_accel_group"
-  external activate_focus : [>`window] obj -> unit
-      = "ml_gtk_window_activate_focus"
-  external activate_default : [>`window] obj -> unit
-      = "ml_gtk_window_activate_default"
-  module Signals = struct
-    open GtkSignal
-    let move_resize : ([>`window],_) t =
-      { name = "move_resize"; marshaller = marshal_unit }
-    let set_focus : ([>`window],_) t =
-      { name = "set_focus"; marshaller = Widget.Signals.marshal_opt }
-  end
-end
-
-module Dialog = struct
-  let cast w : dialog obj = Object.try_cast w "GtkDialog"
-  external coerce : [>`dialog] obj -> dialog obj = "%identity"
-  external create : unit -> dialog obj = "ml_gtk_dialog_new"
-  external action_area : [>`dialog] obj -> box obj
-      = "ml_GtkDialog_action_area"
-  external vbox : [>`dialog] obj -> box obj
-      = "ml_GtkDialog_vbox"
-end
-
-module InputDialog = struct
-  let cast w : input_dialog obj = Object.try_cast w "GtkInputDialog"
-  external create : unit -> input_dialog obj = "ml_gtk_input_dialog_new"
-  module Signals = struct
-    open GtkSignal
-    let enable_device : ([>`inputdialog],_) t =
-      { name = "enable_device"; marshaller = marshal_int }
-    let disable_device : ([>`inputdialog],_) t =
-      { name = "disable_device"; marshaller = marshal_int }
-  end
-end
-
-module FileSelection = struct
-  let cast w : file_selection obj = Object.try_cast w "GtkFileSelection"
-  external create : string -> file_selection obj = "ml_gtk_file_selection_new"
-  external set_filename : [>`filesel] obj -> string -> unit
-      = "ml_gtk_file_selection_set_filename"
-  external get_filename : [>`filesel] obj -> string
-      = "ml_gtk_file_selection_get_filename"
-  external show_fileop_buttons : [>`filesel] obj -> unit
-      = "ml_gtk_file_selection_show_fileop_buttons"
-  external hide_fileop_buttons : [>`filesel] obj -> unit
-      = "ml_gtk_file_selection_hide_fileop_buttons"
-  external get_ok_button : [>`filesel] obj -> button obj
-      = "ml_gtk_file_selection_get_ok_button"
-  external get_cancel_button : [>`filesel] obj -> button obj
-      = "ml_gtk_file_selection_get_cancel_button"
-  external get_help_button : [>`filesel] obj -> button obj
-      = "ml_gtk_file_selection_get_help_button"
-  let set_fileop_buttons w = function
-      true -> show_fileop_buttons w
-    | false -> hide_fileop_buttons w
-  let set ?filename ?fileop_buttons w =
-    may filename ~f:(set_filename w);
-    may fileop_buttons ~f:(set_fileop_buttons w)
-end
-
-module FontSelectionDialog = struct
-  let cast w : font_selection_dialog obj =
-    Object.try_cast w "GtkFontSelectionDialog"
-  external create : ?title:string -> unit -> font_selection_dialog obj
-      = "ml_gtk_font_selection_dialog_new"
-  external font_selection : [>`fontseldialog] obj -> font_selection obj
-      = "ml_gtk_font_selection_dialog_fontsel"
-  external ok_button : [>`fontseldialog] obj -> button obj
-      = "ml_gtk_font_selection_dialog_ok_button"
-  external apply_button : [>`fontseldialog] obj -> button obj
-      = "ml_gtk_font_selection_dialog_apply_button"
-  external cancel_button : [>`fontseldialog] obj -> button obj
-      = "ml_gtk_font_selection_dialog_cancel_button"
-(*
-  type null_terminated
-  let null_terminated arg : null_terminated =
-    match arg with None -> Obj.magic Gpointer.raw_null
-    | Some l ->
-       let len = List.length l in
-       let arr = Array.create (len + 1) "" in
-       let rec loop i = function
-           [] -> arr.(i) <- Obj.magic Gpointer.raw_null
-         | s::l -> arr.(i) <- s; loop (i+1) l
-       in loop 0 l;
-       Obj.magic (arr : string array)
-  external get_font : [>`fontseldialog] obj -> Gdk.font
-      = "ml_gtk_font_selection_dialog_get_font"
-  let get_font w =
-    try Some (get_font w) with Gpointer.Null -> None
-  external get_font_name : [>`fontseldialog] obj -> string
-      = "ml_gtk_font_selection_dialog_get_font_name"
-  let get_font_name w =
-    try Some (get_font_name w) with Gpointer.Null -> None
-  external set_font_name : [>`fontseldialog] obj -> string -> unit
-      = "ml_gtk_font_selection_dialog_set_font_name"
-  external set_filter :
-    [>`fontseldialog] obj -> font_filter_type -> font_type list ->
-    null_terminated -> null_terminated -> null_terminated ->
-    null_terminated -> null_terminated -> null_terminated -> unit
-    = "ml_gtk_font_selection_dialog_set_filter_bc"
-      "ml_gtk_font_selection_dialog_set_filter"
-  let set_filter w ?kind:(tl=[`ALL]) ?foundry
-      ?weight ?slant ?setwidth ?spacing ?charset filter =
-    set_filter w filter tl (null_terminated foundry)
-      (null_terminated weight) (null_terminated slant)
-      (null_terminated setwidth) (null_terminated spacing)
-      (null_terminated charset)
-  external get_preview_text : [>`fontseldialog] obj -> string
-      = "ml_gtk_font_selection_dialog_get_preview_text"
-  external set_preview_text : [>`fontseldialog] obj -> string -> unit
-      = "ml_gtk_font_selection_dialog_set_preview_text"
-*)
-end
-
-module Plug = struct
-  let cast w : plug obj = Object.try_cast w "GtkPlug"
-  external create : Gdk.xid -> plug obj = "ml_gtk_plug_new"
-end
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkXmHTML.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkXmHTML.ml
deleted file mode 100644 (file)
index 3bf5791..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-(* $Id$ *)
-
-open Gtk
-
-type string_direction = [
-  | `R_TO_L
-  | `L_TO_R
-]
-
-type position = [
-  | `END
-  | `CENTER
-  | `BEGINNING
-]
-
-type line_type = [
-  | `SOLID
-  | `DASHED
-  | `SINGLE
-  | `DOUBLE
-  | `STRIKE
-  | `UNDER
-  | `NONE
-]
-
-type dither_type = [
-  | `QUICK
-  | `BEST
-  | `FAST
-  | `SLOW
-  | `DISABLED
-]
-
-type xmhtml = [`widget|`container|`xmhtml]
-
-external create : unit -> xmhtml obj = "ml_gtk_xmhtml_new"
-external freeze : [> `xmhtml] obj -> unit = "ml_gtk_xmhtml_freeze"
-external thaw : [> `xmhtml] obj -> unit = "ml_gtk_xmhtml_thaw"
-external source : [> `xmhtml] obj -> string -> unit = "ml_gtk_xmhtml_source"
-(* external get_source : [> `xmhtml] obj -> string = "ml_gtk_xmhtml_get_source" *)
-external set_string_direction : [> `xmhtml] obj -> string_direction -> unit
-  = "ml_gtk_xmhtml_set_string_direction"
-external set_alignment : [> `xmhtml] obj -> position -> unit
-  = "ml_gtk_xmhtml_set_alignment"
-(* external set_outline : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_outline" *)
-external set_font_familty :
-  [> `xmhtml] obj -> family:string -> sizes:string -> unit
-  = "ml_gtk_xmhtml_set_font_familty"
-external set_font_familty_fixed :
-  [> `xmhtml] obj -> family:string -> sizes:string -> unit
-  = "ml_gtk_xmhtml_set_font_familty_fixed"
-external set_font_charset : [> `xmhtml] obj -> string -> unit
-  = "ml_gtk_xmhtml_set_font_charset"
-external set_allow_body_colors : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_allow_body_colors"
-external set_hilight_on_enter : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_hilight_on_enter"
-external set_anchor_underline_type : [> `xmhtml] obj -> line_type list -> unit
-  = "ml_gtk_xmhtml_set_anchor_underline_type"
-external set_anchor_visited_underline_type :
-  [> `xmhtml] obj -> line_type list -> unit
-  = "ml_gtk_xmhtml_set_anchor_visited_underline_type"
-external set_anchor_target_underline_type :
-  [> `xmhtml] obj -> line_type list -> unit
-  = "ml_gtk_xmhtml_set_anchor_target_underline_type"
-external set_allow_color_switching : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_allow_color_switching"
-external set_dithering : [> `xmhtml] obj -> dither_type -> unit
-  = "ml_gtk_xmhtml_set_dithering"
-external set_allow_font_switching : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_allow_font_switching"
-external set_max_image_colors : [> `xmhtml] obj -> int -> unit
-  = "ml_gtk_xmhtml_set_max_image_colors"
-external set_allow_images : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_allow_images"
-external set_plc_intervals :
-  [> `xmhtml] obj -> min:int -> max:int -> default:int -> unit
-  = "ml_gtk_xmhtml_set_plc_intervals"
-(*
-external set_def_body_image_url : [> `xmhtml] obj -> string -> unit
-  = "ml_gtk_xmhtml_set_def_body_image_url"
-*)
-external set_anchor_buttons : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_anchor_buttons"
-external set_anchor_cursor : [> `xmhtml] obj -> Gdk.cursor option -> unit
-  = "ml_gtk_xmhtml_set_anchor_cursor"
-external set_topline : [> `xmhtml] obj -> int -> unit
-  = "ml_gtk_xmhtml_set_topline"
-external get_topline : [> `xmhtml] obj -> int
-  = "ml_gtk_xmhtml_get_topline"
-external set_freeze_animations : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_freeze_animations"
-external set_screen_gamma : [> `xmhtml] obj -> float -> unit
-  = "ml_gtk_xmhtml_set_screen_gamma"
-external set_perfect_colors : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_perfect_colors"
-external set_uncompress_command : [> `xmhtml] obj -> string -> unit
-  = "ml_gtk_xmhtml_set_uncompress_command"
-external set_strict_checking : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_strict_checking"
-external set_bad_html_warnings : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_bad_html_warnings"
-external set_allow_form_coloring : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_allow_form_coloring"
-external set_imagemap_draw : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_imagemap_draw"
-external set_alpha_processing : [> `xmhtml] obj -> bool -> unit
-  = "ml_gtk_xmhtml_set_alpha_processing"
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk_tags.var b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtk_tags.var
deleted file mode 100644 (file)
index b2a7d2a..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-(* $Id$ *)
-
-type arrow_type = "GTK_ARROW_"
-  [ `UP | `DOWN | `LEFT | `RIGHT ]
-
-type attach_options = "GTK_"
-  [ `EXPAND | `SHRINK | `FILL ]
-
-type button_box_style = "GTK_BUTTONBOX_"
-  [ `DEFAULT_STYLE | `SPREAD | `EDGE | `START | `END ]
-
-type direction_type = "GTK_DIR_"
-  [ `TAB_FORWARD | `TAB_BACKWARD | `UP | `DOWN | `LEFT | `RIGHT ]
-
-type justification = "GTK_JUSTIFY_"
-  [ `LEFT | `RIGHT | `CENTER | `FILL ]
-
-type match_type = "GTK_MATCH_"
-  [ `ALL | `ALL_TAIL | `HEAD | `TAIL | `EXACT | `LAST ]
-
-type metric_type = "GTK_"
-  [ `PIXELS | `INCHES | `CENTIMETERS ]
-
-type orientation = "GTK_ORIENTATION_"
-  [ `HORIZONTAL | `VERTICAL ]
-
-type corner_type = "GTK_CORNER_"
-  [ `TOP_LEFT | `BOTTOM_LEFT | `TOP_RIGHT | `BOTTOM_RIGHT ]
-
-type pack_type = "GTK_PACK_"
-  [ `START | `END ]
-
-type path_type = "GTK_PATH_"
-  [ `WIDGET | `WIDGET_CLASS | `CLASS ]
-
-type policy_type = "GTK_POLICY_"
-  [ `ALWAYS | `AUTOMATIC | `NEVER ]
-
-type position = "GTK_POS_"
-  [ `LEFT | `RIGHT | `TOP | `BOTTOM ]
-
-type preview_type = "GTK_PREVIEW_"
-  [ `COLOR | `GRAYSCALE ]
-
-type relief_style = "GTK_RELIEF_"
-  [ `NORMAL | `HALF | `NONE ]
-
-type resize_mode = "GTK_RESIZE_"
-  [ `PARENT | `QUEUE | `IMMEDIATE ]
-
-type signal_run_type = "GTK_RUN_"
-  [ `FIRST | `LAST | `BOTH | `NO_RECURSE | `ACTION | `NO_HOOKS ]
-
-type scroll_type = "GTK_SCROLL_"
-  [ `NONE | `STEP_FORWARD | `STEP_BACKWARD | `PAGE_BACKWARD
-  | `PAGE_FORWARD | `JUMP ]
-
-type selection_mode = "GTK_SELECTION_"
-  [ `SINGLE | `BROWSE | `MULTIPLE | `EXTENDED ]
-
-type shadow_type = "GTK_SHADOW_"
-  [ `NONE | `IN | `OUT | `ETCHED_IN | `ETCHED_OUT ]
-
-type state_type = "GTK_STATE_"
-  [ `NORMAL | `ACTIVE | `PRELIGHT | `SELECTED | `INSENSITIVE ] 
-
-type submenu_direction = "GTK_DIRECTION_"
-  [ `LEFT | `RIGHT ]
-
-type submenu_placement = "GTK_"
-  [ `TOP_BOTTOM | `LEFT_RIGHT ]
-
-type toolbar_style = "GTK_TOOLBAR_"
-  [ `ICONS | `TEXT | `BOTH ]
-
-type trough_type = "GTK_TROUGH_"
-  [ `NONE | `START | `END | `JUMP ]
-
-type update_type = "GTK_UPDATE_"
-  [ `CONTINUOUS | `DISCONTINUOUS | `DELAYED ]
-
-type visibility = "GTK_VISIBILITY_"
-  [ `NONE | `PARTIAL | `FULL ]
-
-type window_position = "GTK_WIN_POS_"
-  [ `NONE | `CENTER | `MOUSE | `CENTER_ALWAYS ]
-
-type window_type = "GTK_WINDOW_"
-  [ `TOPLEVEL | `DIALOG | `POPUP ]
-
-type sort_type = "GTK_SORT_"
-  [ `ASCENDING | `DESCENDING ]
-
-
-type fundamental_type = "GTK_TYPE_"
-  [ `INVALID | `NONE | `CHAR | `BOOL | `INT | `UINT | `LONG | `ULONG
-  | `FLOAT | `DOUBLE | `STRING | `ENUM | `FLAGS | `BOXED | `FOREIGN
-  | `CALLBACK | `ARGS | `POINTER | `SIGNAL | `C_CALLBACK | `OBJECT ]
-
-type cell_type = "GTK_CELL_"
-  [ `EMPTY | `TEXT | `PIXMAP | `PIXTEXT | `WIDGET ]
-
-type toolbar_child = "GTK_TOOLBAR_CHILD_"
-  [ `SPACE | `BUTTON | `TOGGLEBUTTON | `RADIOBUTTON | `WIDGET ]
-
-type toolbar_space_style = "GTK_TOOLBAR_SPACE_"
-  [ `EMPTY | `LINE ]
-
-type tree_view_mode = "GTK_TREE_VIEW_"
-  [ `LINE | `ITEM ]
-
-type spin_type = "GTK_SPIN_"
-  [ `STEP_FORWARD | `STEP_BACKWARD | `PAGE_FORWARD | `PAGE_BACKWARD
-  | `HOME | `END | `USER_DEFINED ]
-
-type accel_flag = "GTK_ACCEL_"
-  [ `VISIBLE | `SIGNAL_VISIBLE | `LOCKED ]
-
-type packer_options = "GTK_"
-  [ `PACK_EXPAND | `FILL_X | `FILL_Y ]
-
-type side_type = "GTK_SIDE_"
-  [ `TOP | `BOTTOM | `LEFT | `RIGHT ]
-
-type anchor_type = "GTK_ANCHOR_"
-  [ `CENTER | `NORTH | `NW | `NE | `SOUTH | `SW | `SE | `WEST | `EAST ]
-
-type button_action = "GTK_BUTTON_"
-  [ `SELECTS | `DRAGS | `EXPANDS ]
-
-type calendar_display_options = "GTK_CALENDAR_"
-  [ `SHOW_HEADING | `SHOW_DAY_NAMES | `NO_MONTH_CHANGE | `SHOW_WEEK_NUMBERS
-  | `WEEK_START_MONDAY ]
-
-type progress_bar_style = "GTK_PROGRESS_"
-  [ `CONTINUOUS | `DISCRETE ]
-
-type progress_bar_orientation = "GTK_PROGRESS_"
-  [ `LEFT_TO_RIGHT | `RIGHT_TO_LEFT | `BOTTOM_TO_TOP | `TOP_TO_BOTTOM ]
-
-type dest_defaults = "GTK_DEST_DEFAULT_"
-  [ `MOTION | `HIGHLIGHT | `DROP | `ALL ]
-
-type target_flags = "GTK_TARGET_"
-  [ `SAME_APP | `SAME_WIDGET ]
-
-type font_metric_type = "GTK_FONT_METRIC_"
-  [ `PIXELS | `POINTS ]
-
-type font_type = "GTK_FONT_"
-  [ `BITMAP | `SCALABLE | `SCALABLE_BITMAP | `ALL ]
-
-type font_filter_type = "GTK_FONT_FILTER_"
-  [ `BASE | `USER ]
-
-(*
-type tree_pos = "GTK_CTREE_POS_"
-  [ `BEFORE | `AS_CHILD | `AFTER ]
-
-type tree_line_style = "GTK_CTREE_LINES_"
-  [ `NONE | `SOLID | `DOTTED | `TABBED ]
-
-type tree_expander_style = "GTK_CTREE_EXPANDER_"
-  [ `NONE | `SQUARE | `TRIANGLE | `CIRCULAR ]
-
-type tree_expansion_type = "GTK_CTREE_EXPANSION_"
-  [ `EXPAND | `EXPAND_RECURSIVE | `COLLAPSE | `COLLAPSE_RECURSIVE
-  | `TOGGLE | `TOGGLE_RECURSIVE ]
-*)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkgl_tags.var b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkgl_tags.var
deleted file mode 100644 (file)
index 57a9f73..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(* $Id$ *)
-
-type visual_options = "GDK_GL_" [
-  | `USE_GL
-  | `BUFFER_SIZE
-  | `LEVEL
-  | `RGBA
-  | `DOUBLEBUFFER
-  | `STEREO
-  | `AUX_BUFFERS
-  | `RED_SIZE
-  | `GREEN_SIZE
-  | `BLUE_SIZE
-  | `ALPHA_SIZE
-  | `DEPTH_SIZE
-  | `STENCIL_SIZE
-  | `ACCUM_GREEN_SIZE
-  | `ACCUM_ALPHA_SIZE
-]
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkxmhtml_tags.var b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/gtkxmhtml_tags.var
deleted file mode 100644 (file)
index f26206e..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-(* $Id$ *)
-
-type string_direction = "TSTRING_DIRECTION_" [
-  | `R_TO_L
-  | `L_TO_R
-]
-
-type alignment = "TALIGNMENT_" [
-  | `END
-  | `CENTER
-  | `BEGINNING
-]
-
-type line_type = "LINE_" [
-  | `SOLID
-  | `DASHED
-  | `SINGLE
-  | `DOUBLE
-  | `STRIKE
-  | `UNDER
-  | `NONE "NO_LINE"
-]
-
-type dither_type = "Xm" [
-  | `QUICK
-  | `BEST
-  | `FAST
-  | `SLOW
-  | `DISABLED
-]
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/lablgl.patch b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/lablgl.patch
deleted file mode 100644 (file)
index c48de24..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-Index: Makefile
-===================================================================
-RCS file: /staff2/garrigue/repos/lablGL/Makefile,v
-retrieving revision 1.33
-retrieving revision 1.34
-diff -c -r1.33 -r1.34
-*** Makefile   1998/09/17 03:16:06     1.33
---- Makefile   1999/06/18 07:39:08     1.34
-***************
-*** 12,22 ****
-  OTHERLIBS=-L$(LABLTKDIR) -llabltk41 $(LIBS)
-  
-  # Files
-! MLOBJS =     raw.cmo         togl.cmo \
-               gl.cmo          glLight.cmo     glList.cmo      glMap.cmo \
-               glMat.cmo       glMisc.cmo      glPix.cmo       glClear.cmo \
-               glTex.cmo       glDraw.cmo      glFunc.cmo      gluMisc.cmo \
-               gluNurbs.cmo    gluQuadric.cmo  gluTess.cmo     gluMat.cmo
-  OPTOBJS = $(MLOBJS:.cmo=.cmx)
-  COBJS =              ml_gl.o         ml_glu.o        ml_togl.o       ml_raw.o \
-               $(TOGLDIR)/togl.o
---- 12,23 ----
-  OTHERLIBS=-L$(LABLTKDIR) -llabltk41 $(LIBS)
-  
-  # Files
-! LIBOBJS =    raw.cmo \
-               gl.cmo          glLight.cmo     glList.cmo      glMap.cmo \
-               glMat.cmo       glMisc.cmo      glPix.cmo       glClear.cmo \
-               glTex.cmo       glDraw.cmo      glFunc.cmo      gluMisc.cmo \
-               gluNurbs.cmo    gluQuadric.cmo  gluTess.cmo     gluMat.cmo
-+ MLOBJS = $(LIBOBJS)  togl.cmo
-  OPTOBJS = $(MLOBJS:.cmo=.cmx)
-  COBJS =              ml_gl.o         ml_glu.o        ml_togl.o       ml_raw.o \
-               $(TOGLDIR)/togl.o
-***************
-*** 53,60 ****
-  var2switch: var2switch.cmo
-       $(LINKER) var2switch.cmo -o $@
-  
-! lablgl.cma: $(MLOBJS)
-!      $(LIBRARIAN) -o lablgl.cma $(MLOBJS)
-  
-  lablgl.cmxa: $(OPTOBJS)
-       $(OPTLIB) -o lablgl.cmxa $(OPTOBJS)
---- 54,61 ----
-  var2switch: var2switch.cmo
-       $(LINKER) var2switch.cmo -o $@
-  
-! lablgl.cma: $(LIBOBJS)
-!      $(LIBRARIAN) -o lablgl.cma $(LIBOBJS)
-  
-  lablgl.cmxa: $(OPTOBJS)
-       $(OPTLIB) -o lablgl.cmxa $(OPTOBJS)
-***************
-*** 66,74 ****
-  $(TOGLDIR)/togl.o:
-       cd $(TOGLDIR) && $(MAKE) togl.o
-  
-! lablgltop: lablgl.cma liblablgl.a
-       olablmktop $(OLABLINC) -custom -o lablgltop \
-!              unix.cma tk41.cma lablgl.cma \
-               -cclib "-L. -llablgl -lunix $(OTHERLIBS)"
-  
-  lablgl: lablgl.in Makefile.config
---- 67,75 ----
-  $(TOGLDIR)/togl.o:
-       cd $(TOGLDIR) && $(MAKE) togl.o
-  
-! lablgltop: lablgl.cma togl.cmo liblablgl.a
-       olablmktop $(OLABLINC) -custom -o lablgltop \
-!              unix.cma tk41.cma lablgl.cma togl.cmo \
-               -cclib "-L. -llablgl -lunix $(OTHERLIBS)"
-  
-  lablgl: lablgl.in Makefile.config
-***************
-*** 107,113 ****
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(MLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       cp $(MLOBJS:.cmo=.mli) $(INSTALLDIR)
-!      cp lablgl.cma liblablgl.a $(INSTALLDIR)
-       cp lablgltop $(INSTALLDIR)
-       cp lablgl lablgllink $(BINDIR)
-       if test -f lablgl.cmxa; then : ; \
---- 108,114 ----
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(MLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       cp $(MLOBJS:.cmo=.mli) $(INSTALLDIR)
-!      cp lablgl.cma togl.cmo liblablgl.a $(INSTALLDIR)
-       cp lablgltop $(INSTALLDIR)
-       cp lablgl lablgllink $(BINDIR)
-       if test -f lablgl.cmxa; then : ; \
-Index: lablgllink.in
-===================================================================
-RCS file: /staff2/garrigue/repos/lablGL/lablgllink.in,v
-retrieving revision 1.2
-retrieving revision 1.3
-diff -c -r1.2 -r1.3
-*** lablgllink.in      1998/09/16 10:26:17     1.2
---- lablgllink.in      1999/06/18 07:39:09     1.3
-***************
-*** 1,5 ****
-  #!/bin/sh
-  
-  exec olablc -custom @INCLUDES@ -I @INSTALLDIR@ \
-!      tk41.cma lablgl.cma $* -cclib "-L@INSTALLDIR@ -llablgl" \
-       -cclib "@OTHERLIBS@"
---- 1,5 ----
-  #!/bin/sh
-  
-  exec olablc -custom @INCLUDES@ -I @INSTALLDIR@ \
-!      tk41.cma lablgl.cma togl.cmo $* -cclib "-L@INSTALLDIR@ -llablgl" \
-       -cclib "@OTHERLIBS@"
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/lablgtk.in b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/lablgtk.in
deleted file mode 100644 (file)
index 9801514..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-thread="no"
-
-case $1 in
--help)
-    echo "Usage: lablgtk [-thread] <options> [script-file]"
-    echo "  -thread  use the threaded version of the toplevel"
-    ;;
--thread)
-    thread=yes
-    shift
-    ;;
-esac
-
-if test $thread = yes; then
-    toplevel="@INSTALLDIR@/lablgtktop_t -I @LIBDIR@/threads"
-else
-    toplevel=@INSTALLDIR@/lablgtktop
-fi
-
-exec $toplevel -w s \
-               -I @LABLGLDIR@ \
-               -I @INSTALLDIR@ $*
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.c
deleted file mode 100644 (file)
index 0526258..0000000
+++ /dev/null
@@ -1,522 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gdk/gdk.h>
-#ifdef _WIN32
-#include <gdk/win32/gdkwin32.h>
-#else
-#include <gdk/gdkx.h>
-#endif
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "gdk_tags.h"
-
-void ml_raise_gdk (const char *errmsg)
-{
-  static value * exn = NULL;
-  if (exn == NULL)
-      exn = caml_named_value ("gdkerror");
-  raise_with_string (*exn, (char*)errmsg);
-}
-
-#include "gdk_tags.c"
-
-Make_OptFlags_val (GdkModifier_val)
-Make_Flags_val (Event_mask_val)
-
-#define Make_test(conv) \
-value ml_test_##conv (value mask, value test) \
-{ return Val_bool (conv(mask) & Int_val(test)); }
-
-Make_test(GdkModifier_val)
-
-/* Colormap */
-
-Make_Val_final_pointer (GdkColormap, gdk_colormap_ref, gdk_colormap_unref, 0)
-ML_0 (gdk_colormap_get_system, Val_GdkColormap)
-
-/* Screen geometry */
-ML_0 (gdk_screen_width, Val_int)
-ML_0 (gdk_screen_height, Val_int)
-
-/* Visual */
-value ml_gdk_visual_get_best (value depth, value type)
-{
-     GdkVisual *vis;
-     if (type == Val_unit)
-          if (depth == Val_unit) vis = gdk_visual_get_best ();
-          else vis = gdk_visual_get_best_with_depth (Int_val(Field(depth,0)));
-     else
-          if (depth == Val_unit)
-               vis = gdk_visual_get_best_with_type
-                    (GdkVisualType_val(Field(type,0)));
-          else vis = gdk_visual_get_best_with_both
-                    (Int_val(Field(depth,0)),GdkVisualType_val(Field(type,0)));
-     if (!vis) ml_raise_gdk("Gdk.Visual.get_best");
-     return Val_GdkVisual(vis);
-}
-
-Make_Extractor (GdkVisual,GdkVisual_val,type,Val_gdkVisualType)
-Make_Extractor (GdkVisual,GdkVisual_val,depth,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,red_mask,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,red_shift,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,red_prec,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,green_mask,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,green_shift,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,green_prec,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,blue_mask,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,blue_shift,Val_int)
-Make_Extractor (GdkVisual,GdkVisual_val,blue_prec,Val_int)
-
-/* Image */
-
-Make_Val_final_pointer (GdkImage, Ignore, gdk_image_destroy, 0)
-GdkImage *GdkImage_val(value val)
-{
-    if (!Field(val,1)) ml_raise_gdk ("attempt to use destroyed GdkImage");
-    return (GdkImage*)(Field(val,1));
-}
-value ml_gdk_image_destroy (value val)
-{
-    if (Field(val,1)) gdk_image_destroy((GdkImage*)(Field(val,1)));
-    Field(val,1) = 0;
-    return Val_unit;
-}
-ML_4 (gdk_image_new_bitmap, GdkVisual_val, String_val, Int_val, Int_val,
-      Val_GdkImage)
-ML_4 (gdk_image_new, GdkImageType_val, GdkVisual_val, Int_val, Int_val,
-      Val_GdkImage)
-ML_5 (gdk_image_get, GdkWindow_val, Int_val, Int_val, Int_val, Int_val,
-      Val_GdkImage)
-ML_4 (gdk_image_put_pixel, GdkImage_val, Int_val, Int_val, Int_val, Unit)
-ML_3 (gdk_image_get_pixel, GdkImage_val, Int_val, Int_val, Val_int)
-
-/* Color */
-
-ML_2 (gdk_colormap_new, GdkVisual_val, Bool_val, Val_GdkColormap)
-
-value ml_gdk_color_white (value cmap)
-{
-    GdkColor color;
-    gdk_color_white (GdkColormap_val(cmap), &color);
-    return Val_copy(color);
-}
-    
-value ml_gdk_color_black (value cmap)
-{
-    GdkColor color;
-    gdk_color_black (GdkColormap_val(cmap), &color);
-    return Val_copy(color);
-}
-
-value ml_gdk_color_parse (char *spec)
-{
-    GdkColor color;
-    if (!gdk_color_parse (spec, &color))
-       ml_raise_gdk ("color_parse");
-    return Val_copy(color);
-}
-
-ML_2 (gdk_color_alloc, GdkColormap_val, GdkColor_val, Val_bool)
-
-value ml_GdkColor (value red, value green, value blue)
-{
-    GdkColor color;
-    color.red = Int_val(red);
-    color.green = Int_val(green);
-    color.blue = Int_val(blue);
-    color.pixel = 0;
-    return Val_copy(color);
-}
-
-Make_Extractor (GdkColor, GdkColor_val, red, Val_int)
-Make_Extractor (GdkColor, GdkColor_val, green, Val_int)
-Make_Extractor (GdkColor, GdkColor_val, blue, Val_int)
-Make_Extractor (GdkColor, GdkColor_val, pixel, Val_int)
-
-/* Rectangle */
-
-value ml_GdkRectangle (value x, value y, value width, value height)
-{
-    GdkRectangle rectangle;
-    rectangle.x = Int_val(x);
-    rectangle.y = Int_val(y);
-    rectangle.width = Int_val(width);
-    rectangle.height = Int_val(height);
-    return Val_copy(rectangle);
-}
-
-Make_Extractor (GdkRectangle, GdkRectangle_val, x, Val_int)
-Make_Extractor (GdkRectangle, GdkRectangle_val, y, Val_int)
-Make_Extractor (GdkRectangle, GdkRectangle_val, width, Val_int)
-Make_Extractor (GdkRectangle, GdkRectangle_val, height, Val_int)
-
-/* Window */
-
-Make_Val_final_pointer (GdkWindow, gdk_window_ref, gdk_window_unref, 0)
-Make_Extractor (gdk_visual_get, GdkVisual_val, depth, Val_int)
-ML_1 (gdk_window_get_visual, GdkWindow_val, Val_GdkVisual)
-ML_3 (gdk_window_set_back_pixmap, GdkWindow_val, GdkPixmap_val, Int_val, Unit)
-ML_1 (gdk_window_clear, GdkWindow_val, Unit)
-ML_0 (GDK_ROOT_PARENT, Val_GdkWindow)
-ML_1 (gdk_window_get_parent, GdkWindow_val, Val_GdkWindow)
-ML_1 (GDK_WINDOW_XWINDOW, GdkWindow_val, Val_XID)
-value ml_gdk_window_get_position (value window)
-{
-  int x, y;
-  value ret;
-
-  gdk_window_get_position (GdkWindow_val(window), &x, &y);
-  
-  ret = alloc_small (2,0);
-  Field(ret,0) = Val_int(x);
-  Field(ret,1) = Val_int(y);
-  return ret;
-}
-
-value ml_gdk_window_get_size (value window)
-{
-  int x, y;
-  value ret;
-
-  gdk_window_get_size (GdkWindow_val(window), &x, &y);
-  
-  ret = alloc_small (2,0);
-  Field(ret,0) = Val_int(x);
-  Field(ret,1) = Val_int(y);
-  return ret;
-}
-
-/* Cursor */
-
-ML_1 (gdk_cursor_new, GdkCursorType_val, Val_GdkCursor)
-ML_6 (gdk_cursor_new_from_pixmap, GdkPixmap_val, GdkPixmap_val,
-      GdkColor_val, GdkColor_val, Int_val, Int_val, Val_GdkCursor)
-ML_bc6 (ml_gdk_cursor_new_from_pixmap)
-ML_1 (gdk_cursor_destroy, GdkCursor_val, Unit)
-
-/* Pixmap */
-
-Make_Val_final_pointer (GdkPixmap, gdk_pixmap_ref, gdk_pixmap_unref, 0)
-Make_Val_final_pointer (GdkBitmap, gdk_bitmap_ref, gdk_bitmap_unref, 0)
-Make_Val_final_pointer_ext (GdkPixmap, _no_ref, Ignore, gdk_pixmap_unref, 20)
-Make_Val_final_pointer_ext (GdkBitmap, _no_ref, Ignore, gdk_bitmap_unref, 20)
-ML_4 (gdk_pixmap_new, GdkWindow_val, Int_val, Int_val, Int_val,
-      Val_GdkPixmap_no_ref)
-ML_4 (gdk_bitmap_create_from_data, GdkWindow_val,
-      String_val, Int_val, Int_val, Val_GdkBitmap_no_ref)
-ML_7 (gdk_pixmap_create_from_data, GdkWindow_val, String_val,
-      Int_val, Int_val, Int_val, GdkColor_val, GdkColor_val,
-      Val_GdkPixmap_no_ref)
-ML_bc7 (ml_gdk_pixmap_create_from_data)
-
-value ml_gdk_pixmap_colormap_create_from_xpm
-       (value window, value colormap, value transparent, char *filename)
-{
-    CAMLparam0();
-    GdkBitmap *mask;
-    CAMLlocal2(vpixmap, vmask);
-    value ret;
-
-    vpixmap = Val_GdkPixmap_no_ref
-       (gdk_pixmap_colormap_create_from_xpm
-        (GdkWindow_val(window), Option_val(colormap,GdkColormap_val,NULL),
-         &mask, Option_val(transparent,GdkColor_val,NULL), filename));
-    vmask = Val_GdkBitmap_no_ref (mask);
-
-    ret = alloc_small (2,0);
-    Field(ret,0) = vpixmap;
-    Field(ret,1) = vmask;
-    CAMLreturn(ret);
-}
-
-value ml_gdk_pixmap_colormap_create_from_xpm_d
-       (value window, value colormap, value transparent, char **data)
-{
-    CAMLparam0();
-    GdkBitmap *mask;
-    CAMLlocal2(vpixmap, vmask);
-    value ret;
-
-    vpixmap = Val_GdkPixmap_no_ref
-       (gdk_pixmap_colormap_create_from_xpm_d
-        (GdkWindow_val(window), Option_val(colormap,GdkColormap_val,NULL),
-         &mask, Option_val(transparent,GdkColor_val,NULL), data));
-    vmask = Val_GdkBitmap_no_ref (mask);
-
-    ret = alloc_small (2, 0);
-    Field(ret,0) = vpixmap;
-    Field(ret,1) = vmask;
-    CAMLreturn(ret);
-}
-
-/* Font */
-
-Make_Val_final_pointer (GdkFont, gdk_font_ref, gdk_font_unref, 0)
-Make_Val_final_pointer_ext (GdkFont, _no_ref, Ignore, gdk_font_unref, 20)
-ML_1 (gdk_font_load, String_val, Val_GdkFont_no_ref)
-ML_1 (gdk_fontset_load, String_val, Val_GdkFont_no_ref)
-ML_2 (gdk_string_width, GdkFont_val, String_val, Val_int)
-ML_2 (gdk_char_width, GdkFont_val, (gchar)Long_val, Val_int)
-ML_2 (gdk_string_height, GdkFont_val, String_val, Val_int)
-ML_2 (gdk_char_height, GdkFont_val, (gchar)Long_val, Val_int)
-ML_2 (gdk_string_measure, GdkFont_val, String_val, Val_int)
-ML_2 (gdk_char_measure, GdkFont_val, (char)Long_val, Val_int)
-Make_Extractor (GdkFont, GdkFont_val, type, Val_gdkFontType)
-Make_Extractor (GdkFont, GdkFont_val, ascent, Val_int)
-Make_Extractor (GdkFont, GdkFont_val, descent, Val_int)
-
-/* Region */
-
-#define PointArray_val(val) ((GdkPoint*)&Field(val,1))
-#define PointArrayLen_val(val) Int_val(Field(val,0))
-Make_Val_final_pointer (GdkRegion, Ignore, gdk_region_destroy, 0)
-GdkRegion *GdkRegion_val(value val)
-{
-    if (!Field(val,1)) ml_raise_gdk ("attempt to use destroyed GdkRegion");
-    return (GdkRegion*)(Field(val,1));
-}
-value ml_gdk_region_destroy (value val)
-{
-    if (Field(val,1)) gdk_region_destroy((GdkRegion*)(Field(val,1)));
-    Field(val,1) = 0;
-    return Val_unit;
-}
-ML_0 (gdk_region_new, Val_GdkRegion)
-ML_2 (gdk_region_polygon, Insert(PointArray_val(arg1)) PointArrayLen_val,
-      GdkFillRule_val, Val_GdkRegion)
-ML_2 (gdk_regions_intersect, GdkRegion_val, GdkRegion_val, Val_GdkRegion)
-ML_2 (gdk_regions_union, GdkRegion_val, GdkRegion_val, Val_GdkRegion)
-ML_2 (gdk_regions_subtract, GdkRegion_val, GdkRegion_val, Val_GdkRegion)
-ML_2 (gdk_regions_xor, GdkRegion_val, GdkRegion_val, Val_GdkRegion)
-ML_2 (gdk_region_union_with_rect, GdkRegion_val, GdkRectangle_val,
-      Val_GdkRegion)
-ML_3 (gdk_region_offset, GdkRegion_val, Int_val, Int_val, Unit)
-ML_3 (gdk_region_shrink, GdkRegion_val, Int_val, Int_val, Unit)
-ML_1 (gdk_region_empty, GdkRegion_val, Val_bool)
-ML_2 (gdk_region_equal, GdkRegion_val, GdkRegion_val, Val_bool)
-ML_3 (gdk_region_point_in, GdkRegion_val, Int_val, Int_val, Val_bool)
-ML_2 (gdk_region_rect_in, GdkRegion_val, GdkRectangle_val, Val_gdkOverlapType)
-ML_2 (gdk_region_get_clipbox, GdkRegion_val, GdkRectangle_val, Unit)
-
-
-/* GC */
-
-Make_Val_final_pointer (GdkGC, gdk_gc_ref, gdk_gc_unref, 0)
-Make_Val_final_pointer_ext (GdkGC, _no_ref, Ignore, gdk_gc_unref, 20)
-ML_1 (gdk_gc_new, GdkWindow_val, Val_GdkGC_no_ref)
-ML_2 (gdk_gc_set_foreground, GdkGC_val, GdkColor_val, Unit)
-ML_2 (gdk_gc_set_background, GdkGC_val, GdkColor_val, Unit)
-ML_2 (gdk_gc_set_font, GdkGC_val, GdkFont_val, Unit)
-ML_2 (gdk_gc_set_function, GdkGC_val, GdkFunction_val, Unit)
-ML_2 (gdk_gc_set_fill, GdkGC_val, GdkFill_val, Unit)
-ML_2 (gdk_gc_set_tile, GdkGC_val, GdkPixmap_val, Unit)
-ML_2 (gdk_gc_set_stipple, GdkGC_val, GdkPixmap_val, Unit)
-ML_3 (gdk_gc_set_ts_origin, GdkGC_val, Int_val, Int_val, Unit)
-ML_3 (gdk_gc_set_clip_origin, GdkGC_val, Int_val, Int_val, Unit)
-ML_2 (gdk_gc_set_clip_mask, GdkGC_val, GdkBitmap_val, Unit)
-ML_2 (gdk_gc_set_clip_rectangle, GdkGC_val, GdkRectangle_val, Unit)
-ML_2 (gdk_gc_set_clip_region, GdkGC_val, GdkRegion_val, Unit)
-ML_2 (gdk_gc_set_subwindow, GdkGC_val, GdkSubwindowMode_val, Unit)
-ML_2 (gdk_gc_set_exposures, GdkGC_val, Bool_val, Unit)
-ML_5 (gdk_gc_set_line_attributes, GdkGC_val, Int_val, GdkLineStyle_val,
-      GdkCapStyle_val, GdkJoinStyle_val, Unit)
-ML_2 (gdk_gc_copy, GdkGC_val, GdkGC_val, Unit)
-value ml_gdk_gc_get_values (value gc)
-{
-    CAMLparam0();
-    GdkGCValues values;
-    int i;
-    CAMLlocal2(ret, tmp);
-
-    gdk_gc_get_values (GdkGC_val(gc), &values);
-    ret = alloc (18, 0);
-    tmp = Val_copy(values.foreground); Store_field(ret, 0, tmp);
-    tmp = Val_copy(values.background); Store_field(ret, 1, tmp);
-    if (values.font) {
-        tmp = ml_some(Val_GdkFont(values.font));
-        Store_field(ret, 2, tmp);
-    }
-    Field(ret,3) = Val_gdkFunction(values.function);
-    Field(ret,4) = Val_gdkFill(values.fill);
-    if (values.tile) {
-        tmp = ml_some(Val_GdkPixmap(values.tile));
-        Store_field(ret, 5, tmp);
-    }
-    if (values.tile) {
-        tmp = ml_some(Val_GdkPixmap(values.stipple));
-        Store_field(ret, 6, tmp);
-    }
-    if (values.tile) {
-        tmp = ml_some(Val_GdkPixmap(values.clip_mask));
-        Store_field(ret, 7, tmp);
-    }
-    Field(ret,8) = Val_gdkSubwindowMode(values.subwindow_mode);
-    Field(ret,9) = Val_int(values.ts_x_origin);
-    Field(ret,10) = Val_int(values.ts_y_origin);
-    Field(ret,11) = Val_int(values.clip_x_origin);
-    Field(ret,12) = Val_int(values.clip_y_origin);
-    Field(ret,13) = Val_bool(values.graphics_exposures);
-    Field(ret,14) = Val_int(values.line_width);
-    Field(ret,15) = Val_gdkLineStyle(values.line_style);
-    Field(ret,16) = Val_gdkCapStyle(values.cap_style);
-    Field(ret,17) = Val_gdkJoinStyle(values.join_style);
-    CAMLreturn(ret);
-}
-
-/* Draw */
-
-value ml_point_array_new (value len)
-{
-    value ret = alloc (1 + Wosize_asize(Int_val(len)*sizeof(GdkPoint)),
-                      Abstract_tag);
-    Field(ret,0) = len;
-    return ret;
-}
-value ml_point_array_set (value arr, value pos, value x, value y)
-{
-    GdkPoint *pt = PointArray_val(arr) + Int_val(pos);
-    pt->x = Int_val(x);
-    pt->y = Int_val(y);
-    return Val_unit;
-}
-
-ML_4 (gdk_draw_point, GdkDrawable_val, GdkGC_val, Int_val, Int_val, Unit)
-ML_6 (gdk_draw_line, GdkDrawable_val, GdkGC_val, Int_val, Int_val,
-      Int_val, Int_val, Unit)
-ML_bc6 (ml_gdk_draw_line)
-ML_7 (gdk_draw_rectangle, GdkDrawable_val, GdkGC_val, Bool_val,
-      Int_val, Int_val, Int_val, Int_val, Unit)
-ML_bc7 (ml_gdk_draw_rectangle)
-ML_9 (gdk_draw_arc, GdkDrawable_val, GdkGC_val, Bool_val, Int_val, Int_val,
-      Int_val, Int_val, Int_val, Int_val, Unit)
-ML_bc9 (ml_gdk_draw_arc)
-ML_4 (gdk_draw_polygon, GdkDrawable_val, GdkGC_val, Bool_val,
-      Insert(PointArray_val(arg4)) PointArrayLen_val, Unit)
-ML_6 (gdk_draw_string, GdkDrawable_val, GdkFont_val, GdkGC_val, Int_val, Int_val, String_val, Unit)
-ML_bc6 (ml_gdk_draw_string)
-
-ML_9 (gdk_draw_image, GdkDrawable_val, GdkGC_val, GdkImage_val, Int_val, Int_val, Int_val, Int_val, Int_val, Int_val, Unit)
-ML_bc9 (ml_gdk_draw_image)
-
-/* RGB */
-
-ML_0 (gdk_rgb_init, Unit)
-ML_0 (gdk_rgb_get_visual, Val_GdkVisual)
-ML_0 (gdk_rgb_get_cmap, Val_GdkColormap)
-
-/* Events */
-
-/* Have a major collection every 1000 events */
-Make_Val_final_pointer (GdkEvent, Ignore, gdk_event_free, 1)
-ML_1 (gdk_event_copy, GdkEvent_val, Val_GdkEvent)
-
-value ml_gdk_event_new (value event_type)
-{
-    GdkEvent event;
-    memset (&event, 0, sizeof(GdkEvent));
-    event.type = GdkEventType_val(event_type);
-    event.any.send_event = TRUE;
-    return Val_copy(event);
-}
-
-#define GdkEvent_arg(type) (GdkEvent##type*)GdkEvent_val
-
-Make_Extractor (GdkEventAny, GdkEvent_arg(Any), type, Val_gdkEventType)
-Make_Extractor (GdkEventAny, GdkEvent_arg(Any), window, Val_GdkWindow)
-Make_Extractor (GdkEventAny, GdkEvent_arg(Any), send_event, Val_bool)
-Make_Setter (gdk_event_set, GdkEvent_arg(Any), GdkEventType_val, type)
-Make_Setter (gdk_event_set, GdkEvent_arg(Any), GdkWindow_val, window)
-
-Make_Extractor (GdkEventExpose, GdkEvent_arg(Expose), area, Val_copy)
-Make_Extractor (GdkEventExpose, GdkEvent_arg(Expose), count, Val_int)
-
-Make_Extractor (GdkEventVisibility, GdkEvent_arg(Visibility), state,
-               Val_gdkVisibilityState)
-
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), time, Val_int)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), x, copy_double)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), y, copy_double)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), pressure, copy_double)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), xtilt, copy_double)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), ytilt, copy_double)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), state, Val_int)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), is_hint, Val_int)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), source, Val_gdkInputSource)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), deviceid, Val_int)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), x_root, copy_double)
-Make_Extractor (GdkEventMotion, GdkEvent_arg(Motion), y_root, copy_double)
-
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), time, Val_int)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), x, copy_double)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), y, copy_double)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), pressure, copy_double)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), xtilt, copy_double)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), ytilt, copy_double)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), state, Val_int)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), button, Val_int)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), source, Val_gdkInputSource)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), deviceid, Val_int)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), x_root, copy_double)
-Make_Extractor (GdkEventButton, GdkEvent_arg(Button), y_root, copy_double)
-
-Make_Setter (gdk_event_button_set, GdkEvent_arg(Button), Int_val, button)
-
-Make_Extractor (GdkEventKey, GdkEvent_arg(Key), time, Val_int)
-Make_Extractor (GdkEventKey, GdkEvent_arg(Key), state, Val_int)
-Make_Extractor (GdkEventKey, GdkEvent_arg(Key), keyval, Val_int)
-Make_Extractor (GdkEventKey, GdkEvent_arg(Key), string, Val_string)
-
-Make_Extractor (GdkEventCrossing, GdkEvent_arg(Crossing), subwindow,
-               Val_GdkWindow)
-Make_Extractor (GdkEventCrossing, GdkEvent_arg(Crossing), detail,
-               Val_gdkNotifyType)
-
-Make_Extractor (GdkEventFocus, GdkEvent_arg(Focus), in, Val_int)
-
-Make_Extractor (GdkEventConfigure, GdkEvent_arg(Configure), x, Val_int)
-Make_Extractor (GdkEventConfigure, GdkEvent_arg(Configure), y, Val_int)
-Make_Extractor (GdkEventConfigure, GdkEvent_arg(Configure), width, Val_int)
-Make_Extractor (GdkEventConfigure, GdkEvent_arg(Configure), height, Val_int)
-
-Make_Extractor (GdkEventProperty, GdkEvent_arg(Property), atom, Val_int)
-Make_Extractor (GdkEventProperty, GdkEvent_arg(Property), time, Val_int)
-Make_Extractor (GdkEventProperty, GdkEvent_arg(Property), state, Val_int)
-
-Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), selection, Val_int)
-Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), target, Val_int)
-Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), property, Val_int)
-Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), requestor, Val_int)
-Make_Extractor (GdkEventSelection, GdkEvent_arg(Selection), time, Val_int)
-
-Make_Extractor (GdkEventProximity, GdkEvent_arg(Proximity), time, Val_int)
-Make_Extractor (GdkEventProximity, GdkEvent_arg(Proximity), source,
-               Val_gdkInputSource)
-Make_Extractor (GdkEventProximity, GdkEvent_arg(Proximity), deviceid, Val_int)
-
-/* DnD */
-Make_Val_final_pointer (GdkDragContext, gdk_drag_context_ref, gdk_drag_context_unref, 0)
-Make_Flags_val (GdkDragAction_val)
-ML_3 (gdk_drag_status, GdkDragContext_val, Flags_GdkDragAction_val, Int_val, Unit)
-Make_Extractor (GdkDragContext, GdkDragContext_val, suggested_action, Val_gdkDragAction)
-value val_int(gpointer i)
-{
-  return Val_int (GPOINTER_TO_INT(i));
-}
-value ml_GdkDragContext_targets (value c)
-{
-  GList *t;
-
-  t = (GdkDragContext_val(c))->targets;
-  return Val_GList (t, val_int);
-}
-
-/* Misc */
-ML_0 (gdk_flush, Unit)
-ML_0 (gdk_beep, Unit)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.h b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gdk.h
deleted file mode 100644 (file)
index 5d699ac..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $Id$ */
-
-#define GdkColormap_val(val) ((GdkColormap*)Pointer_val(val))
-extern value Val_GdkColormap (GdkColormap *);
-
-#define GdkColor_val(val) ((GdkColor*)MLPointer_val(val))
-#define Val_GdkColor Val_pointer
-
-#define GdkRectangle_val(val) ((GdkRectangle*)MLPointer_val(val))
-#define Val_GdkRectangle Val_pointer
-
-#define GdkDrawable_val(val) ((GdkDrawable*)Pointer_val(val))
-
-#define GdkWindow_val(val) ((GdkWindow*)Pointer_val(val))
-extern value Val_GdkWindow (GdkWindow *);
-
-#define GdkCursor_val(val) ((GdkCursor*)Pointer_val(val))
-#define Val_GdkCursor Val_pointer
-
-#define GdkPixmap_val(val) ((GdkPixmap*)Pointer_val(val))
-extern value Val_GdkPixmap (GdkPixmap *);
-
-#define GdkBitmap_val(val) ((GdkBitmap*)Pointer_val(val))
-extern value Val_GdkBitmap (GdkBitmap *);
-
-extern GdkImage *GdkImage_val (value); /* check argument */
-extern value Val_GdkImage (GdkImage *); /* finalizer is destroy! */
-
-#define GdkFont_val(val) ((GdkFont*)Pointer_val(val))
-extern value Val_GdkFont (GdkFont *);
-
-extern GdkRegion *GdkRegion_val (value); /* check argument */
-extern value Val_GdkRegion (GdkRegion *); /* finalizer is destroy! */
-
-#define GdkGC_val(val) ((GdkGC*)Pointer_val(val))
-extern value Val_GdkGC (GdkGC *);
-
-#define GdkEvent_val (GdkEvent*)MLPointer_val
-
-#define GdkVisual_val(val) ((GdkVisual*) val)
-#define Val_GdkVisual(visual) ((value) visual)
-
-#define Val_XID copy_int32
-#define XID_val Int32_val
-
-extern int OptFlags_GdkModifier_val (value);
-extern int Flags_Event_mask_val (value);
-extern lookup_info ml_table_extension_events[];
-#define Extension_events_val(key) ml_lookup_to_c (ml_table_extension_events, key)
-
-#define GdkDragContext_val(val) ((GdkDragContext*)Pointer_val(val))
-extern value Val_GdkDragContext (GdkDragContext *);
-extern int Flags_GdkDragAction_val (value);
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.c
deleted file mode 100644 (file)
index a93bb58..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/* $Id$ */
-
-#include <glib.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-
-value copy_string_and_free (char *str)
-{
-    value res;
-    res = copy_string_check (str);
-    g_free (str);
-    return res;
-}
-
-value Val_GList (GList *list, value (*func)(gpointer))
-{
-    value new_cell, result, last_cell, cell;
-
-    if (list == NULL) return Val_unit;
-
-    last_cell = cell = Val_unit;
-    result = func(list->data);
-    Begin_roots3 (last_cell, cell, result);
-    cell = last_cell = alloc_small(2,0);
-    Field(cell,0) = result;
-    Field(cell,1) = Val_unit;
-    list = list->next;
-    while (list != NULL) {
-       result = func(list->data);
-       new_cell = alloc_small(2,0);
-       Field(new_cell,0) = result;
-       Field(new_cell,1) = Val_unit;
-       modify(&Field(last_cell,1), new_cell);
-       last_cell = new_cell;
-       list = list->next;
-    }
-    End_roots ();
-    return cell;
-}
-
-GList *GList_val (value list, gpointer (*func)(value))
-{
-    CAMLparam1(list);
-    GList *res = NULL;
-    if (list == Val_unit) CAMLreturn (res);
-    for (; Is_block(list); list = Field(list,1))
-      res = g_list_append (res, func(Field(list,0)));
-    CAMLreturn (res);
-}
-
-static value ml_warning_handler = 0L;
-
-static void ml_warning_wrapper (const gchar *msg)
-{
-    value arg = copy_string ((char*)msg);
-    callback (ml_warning_handler, arg);
-}
-    
-value ml_g_set_warning_handler (value clos)
-{
-    value old_handler = ml_warning_handler ? ml_warning_handler : clos;
-    if (!ml_warning_handler) register_global_root (&ml_warning_handler);
-    g_set_warning_handler (ml_warning_wrapper);
-    ml_warning_handler = clos;
-    return old_handler;
-}
-
-static value ml_print_handler = 0L;
-
-static void ml_print_wrapper (const gchar *msg)
-{
-    value arg = copy_string ((char*)msg);
-    callback (ml_print_handler, arg);
-}
-    
-value ml_g_set_print_handler (value clos)
-{
-    value old_handler = ml_print_handler ? ml_print_handler : clos;
-    if (!ml_print_handler) register_global_root (&ml_print_handler);
-    g_set_print_handler (ml_print_wrapper);
-    ml_print_handler = clos;
-    return old_handler;
-}
-
-value ml_get_null (value unit) { return 0L; }
-
-#define GMainLoop_val(val) ((GMainLoop*)Addr_val(val))
-ML_1 (g_main_new, Bool_val, Val_addr)
-ML_1 (g_main_iteration, Bool_val, Val_bool)
-ML_0 (g_main_pending, Val_bool)
-ML_1 (g_main_is_running, GMainLoop_val, Val_bool)
-ML_1 (g_main_quit, GMainLoop_val, Unit)
-ML_1 (g_main_destroy, GMainLoop_val, Unit)
-
-/*
-value Val_GSList (GSList *list, value (*func)(gpointer))
-{
-    value new_cell, result, last_cell, cell;
-
-    if (list == NULL) return Val_unit;
-
-    last_cell = cell = Val_unit;
-    result = func(list->data);
-    Begin_roots3 (last_cell, cell, result);
-    cell = last_cell = alloc_tuple (2);
-    Field(cell,0) = result;
-    Field(cell,1) = Val_unit;
-    list = list->next;
-    while (list != NULL) {
-       result = func(list->data);
-       new_cell = alloc_tuple(2);
-       Field(new_cell,0) = result;
-       Field(new_cell,1) = Val_unit;
-       modify(&Field(last_cell,1), new_cell);
-       last_cell = new_cell;
-       list = list->next;
-    }
-    End_roots ();
-    return cell;
-}
-
-GSList *GSList_val (value list, gpointer (*func)(value))
-{
-    GSList *res = NULL;
-    GSList **current = &res;
-    value cell = list;
-    if (list == Val_unit) return res;
-    Begin_root (cell);
-    while (cell != Val_unit) {
-       *current = g_slist_alloc ();
-       (*current)->data = func(Field(cell,0));
-       cell = Field(cell,1);
-       current = &(*current)->next;
-    }
-    End_roots ();
-    return res;
-}
-*/
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.h b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_glib.h
deleted file mode 100644 (file)
index 10f31ca..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-/* $Id$ */
-
-value copy_string_and_free (char *str); /* for g_strings only */
-value Val_GList (GList *list, value (*func)(gpointer));
-GList *GList_val (value list, gpointer (*func)(value));
-
-/*
-value Val_GSList (GSList *list, value (*func)(gpointer));
-GSList *GSList_val (value list, gpointer (*func)(value));
-*/
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.c
deleted file mode 100644 (file)
index 271f094..0000000
+++ /dev/null
@@ -1,1013 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtk_tags.h"
-
-void ml_raise_gtk (const char *errmsg)
-{
-  static value * exn = NULL;
-  if (exn == NULL)
-      exn = caml_named_value ("gtkerror");
-  raise_with_string (*exn, (char*)errmsg);
-}
-
-/* conversion functions */
-
-#include "gtk_tags.c"
-
-ML_1 (Val_direction_type, Int_val, Id)
-ML_1 (Val_orientation, Int_val, Id)
-ML_1 (Val_toolbar_style, Int_val, Id)
-ML_1 (Val_state_type, Int_val, Id)
-ML_1 (Val_scroll_type, Int_val, Id)
-
-static Make_Flags_val (Dest_defaults_val)
-static Make_Flags_val (Target_flags_val)
-static Make_Flags_val (Font_type_val)
-
-/* gtkobject.h */
-
-Make_Val_final_pointer(GtkObject, gtk_object_ref, gtk_object_unref, 0)
-
-#define gtk_object_ref_and_sink(w) (gtk_object_ref(w), gtk_object_sink(w))
-Make_Val_final_pointer_ext(GtkObject, _sink , gtk_object_ref_and_sink,
-                           gtk_object_unref, 20)
-
-/* gtkaccelgroup.h */
-
-Make_Val_final_pointer (GtkAccelGroup, gtk_accel_group_ref,
-                       gtk_accel_group_unref, 0)
-Make_Val_final_pointer_ext (GtkAccelGroup, _no_ref, Ignore,
-                            gtk_accel_group_unref, 20)
-Make_OptFlags_val (Accel_flag_val)
-
-#define Signal_name_val(val) String_val(Field(val,0))
-
-ML_0 (gtk_accel_group_new, Val_GtkAccelGroup_no_ref)
-ML_0 (gtk_accel_group_get_default, Val_GtkAccelGroup)
-ML_3 (gtk_accel_group_activate, GtkAccelGroup_val, Int_val,
-      OptFlags_GdkModifier_val, Val_bool)
-ML_3 (gtk_accel_groups_activate, GtkObject_val, Int_val,
-      OptFlags_GdkModifier_val, Val_bool)
-ML_2 (gtk_accel_group_attach, GtkAccelGroup_val, GtkObject_val, Unit)
-ML_2 (gtk_accel_group_detach, GtkAccelGroup_val, GtkObject_val, Unit)
-ML_1 (gtk_accel_group_lock, GtkAccelGroup_val, Unit)
-ML_1 (gtk_accel_group_unlock, GtkAccelGroup_val, Unit)
-ML_3 (gtk_accel_group_lock_entry, GtkAccelGroup_val, Int_val,
-      OptFlags_GdkModifier_val, Unit)
-ML_3 (gtk_accel_group_unlock_entry, GtkAccelGroup_val, Int_val,
-      OptFlags_GdkModifier_val, Unit)
-ML_6 (gtk_accel_group_add, GtkAccelGroup_val, Int_val,
-      OptFlags_GdkModifier_val, OptFlags_Accel_flag_val,
-      GtkObject_val, Signal_name_val, Unit)
-ML_bc6 (ml_gtk_accel_group_add)
-ML_4 (gtk_accel_group_remove, GtkAccelGroup_val, Int_val,
-      OptFlags_GdkModifier_val, GtkObject_val, Unit)
-ML_2 (gtk_accelerator_valid, Int_val, OptFlags_GdkModifier_val, Val_bool)
-ML_1 (gtk_accelerator_set_default_mod_mask, OptFlags_GdkModifier_val, Unit)
-
-/* gtkstyle.h */
-
-Make_Val_final_pointer (GtkStyle, gtk_style_ref, gtk_style_unref, 0)
-Make_Val_final_pointer_ext (GtkStyle, _no_ref, Ignore, gtk_style_unref, 20)
-ML_0 (gtk_style_new, Val_GtkStyle_no_ref)
-ML_1 (gtk_style_copy, GtkStyle_val, Val_GtkStyle_no_ref)
-ML_2 (gtk_style_attach, GtkStyle_val, GdkWindow_val, Val_GtkStyle)
-ML_1 (gtk_style_detach, GtkStyle_val, Unit)
-ML_3 (gtk_style_set_background, GtkStyle_val, GdkWindow_val, State_type_val, Unit)
-ML_6 (gtk_draw_hline, GtkStyle_val, GdkWindow_val, State_type_val,
-      Int_val, Int_val, Int_val, Unit)
-ML_bc6 (ml_gtk_draw_hline)
-ML_6 (gtk_draw_vline, GtkStyle_val, GdkWindow_val, State_type_val,
-      Int_val, Int_val, Int_val, Unit)
-ML_bc6 (ml_gtk_draw_vline)
-Make_Array_Extractor (gtk_style_get, GtkStyle_val, State_type_val,  bg, Val_copy)
-Make_Array_Setter (gtk_style_set, GtkStyle_val, State_type_val, *GdkColor_val, bg)
-Make_Extractor (gtk_style_get, GtkStyle_val, colormap, Val_GdkColormap)
-Make_Extractor (gtk_style_get, GtkStyle_val, depth, Val_int)
-Make_Extractor (gtk_style_get, GtkStyle_val, font, Val_GdkFont)
-/* Make_Setter (gtk_style_set, GtkStyle_val, GdkFont_val, font) */
-value ml_gtk_style_set_font (value st, value font)
-{
-    GtkStyle *style = GtkStyle_val(st);
-    if (style->font) gdk_font_unref(style->font);
-    style->font = GdkFont_val(font);
-    gdk_font_ref(style->font);
-    return Val_unit;
-}   
-Make_Array_Extractor (gtk_style_get, GtkStyle_val, State_type_val,  dark_gc, Val_GdkGC)
-Make_Array_Extractor (gtk_style_get, GtkStyle_val, State_type_val,  light_gc, Val_GdkGC)
-
-/* gtktypeutils.h */
-
-ML_1 (gtk_type_name, Int_val, Val_string)
-ML_1 (gtk_type_from_name, String_val, Val_int)
-ML_1 (gtk_type_parent, Int_val, Val_int)
-ML_1 (gtk_type_class, Int_val, (value))
-ML_1 (gtk_type_parent_class, Int_val, (value))
-ML_2 (gtk_type_is_a, Int_val, Int_val, Val_bool)
-value ml_gtk_type_fundamental (value type)
-{
-    return Val_fundamental_type (GTK_FUNDAMENTAL_TYPE (Int_val(type)));
-}
-
-/* gtkobject.h */
-
-/* ML_1 (GTK_OBJECT_TYPE, GtkObject_val, Val_int) */
-value ml_gtk_object_type (value val)
-{
-    return Val_int (GtkObject_val(val)->klass->type);
-}
-
-ML_1 (gtk_object_destroy, GtkObject_val, Unit)
-ML_1 (gtk_object_ref, GtkObject_val, Unit)
-ML_1 (gtk_object_unref, GtkObject_val, Unit)
-ML_1 (gtk_object_sink, GtkObject_val, Unit)
-
-Make_Extractor (gtk_class,(GtkObjectClass *),type,Val_int)
-
-/* gtkdata.h */
-
-/* gtkadjustment.h */
-
-ML_6 (gtk_adjustment_new, Float_val, Float_val, Float_val, Float_val,
-      Float_val, Float_val, Val_GtkObject_sink)
-ML_bc6 (ml_gtk_adjustment_new)
-ML_2 (gtk_adjustment_set_value, GtkAdjustment_val, Float_val, Unit)
-ML_3 (gtk_adjustment_clamp_page, GtkAdjustment_val,
-      Float_val, Float_val, Unit)
-Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, lower, copy_double)
-Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, upper, copy_double)
-Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, value, copy_double)
-Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, step_increment,
-               copy_double)
-Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, page_increment,
-               copy_double)
-Make_Extractor (gtk_adjustment_get, GtkAdjustment_val, page_size, copy_double)
-
-/* gtktooltips.h */
-
-#define GtkTooltips_val(val) check_cast(GTK_TOOLTIPS,val)
-ML_0 (gtk_tooltips_new, Val_GtkAny)
-ML_1 (gtk_tooltips_enable, GtkTooltips_val, Unit)
-ML_1 (gtk_tooltips_disable, GtkTooltips_val, Unit)
-ML_2 (gtk_tooltips_set_delay, GtkTooltips_val, Int_val, Unit)
-ML_4 (gtk_tooltips_set_tip, GtkTooltips_val, GtkWidget_val,
-      String_option_val, String_option_val, Unit)
-ML_3 (gtk_tooltips_set_colors, GtkTooltips_val,
-      Option_val(arg2, GdkColor_val, NULL) Ignore,
-      Option_val(arg3, GdkColor_val, NULL) Ignore,
-      Unit)
-
-/* gtkwidget.h */
-
-value ml_gtk_widget_set_can_default (value val, value bool)
-{
-    GtkWidget *w = GtkWidget_val(val);
-    guint32 saved_flags = GTK_WIDGET_FLAGS(w);
-    if (Bool_val(bool)) GTK_WIDGET_SET_FLAGS(w, GTK_CAN_DEFAULT);
-    else GTK_WIDGET_UNSET_FLAGS(w, GTK_CAN_DEFAULT);
-    if (saved_flags != GTK_WIDGET_FLAGS(w))
-       gtk_widget_queue_resize (w);
-    return Val_unit;
-}
-value ml_gtk_widget_set_can_focus (value val, value bool)
-{
-    GtkWidget *w = GtkWidget_val(val);
-    guint32 saved_flags = GTK_WIDGET_FLAGS(w);
-    if (Bool_val(bool)) GTK_WIDGET_SET_FLAGS(w, GTK_CAN_FOCUS);
-    else GTK_WIDGET_UNSET_FLAGS(w, GTK_CAN_FOCUS);
-    if (saved_flags != GTK_WIDGET_FLAGS(w))
-       gtk_widget_queue_resize (w);
-    return Val_unit;
-}
-ML_1 (gtk_widget_unparent, GtkWidget_val, Unit)
-ML_1 (gtk_widget_show, GtkWidget_val, Unit)
-ML_1 (gtk_widget_show_now, GtkWidget_val, Unit)
-ML_1 (gtk_widget_show_all, GtkWidget_val, Unit)
-ML_1 (gtk_widget_hide, GtkWidget_val, Unit)
-ML_1 (gtk_widget_hide_all, GtkWidget_val, Unit)
-ML_1 (gtk_widget_map, GtkWidget_val, Unit)
-ML_1 (gtk_widget_unmap, GtkWidget_val, Unit)
-ML_1 (gtk_widget_realize, GtkWidget_val, Unit)
-ML_1 (gtk_widget_unrealize, GtkWidget_val, Unit)
-ML_1 (gtk_widget_queue_draw, GtkWidget_val, Unit)
-ML_1 (gtk_widget_queue_resize, GtkWidget_val, Unit)
-ML_2 (gtk_widget_draw, GtkWidget_val,
-      Option_val(arg2,GdkRectangle_val,NULL) Ignore, Unit)
-ML_1 (gtk_widget_draw_focus, GtkWidget_val, Unit)
-ML_1 (gtk_widget_draw_default, GtkWidget_val, Unit)
-/* ML_1 (gtk_widget_draw_children, GtkWidget_val, Unit) */
-ML_2 (gtk_widget_event, GtkWidget_val, GdkEvent_val, Val_bool)
-ML_1 (gtk_widget_activate, GtkWidget_val, Val_bool)
-ML_2 (gtk_widget_reparent, GtkWidget_val, GtkWidget_val, Unit)
-ML_3 (gtk_widget_popup, GtkWidget_val, Int_val, Int_val, Unit)
-value ml_gtk_widget_intersect (value w, value area)
-{
-    GdkRectangle inter;
-    if (gtk_widget_intersect(GtkWidget_val(w), GdkRectangle_val(area), &inter))
-       return ml_some (Val_copy (inter));
-    return Val_unit;
-}
-/* ML_1 (gtk_widget_basic, GtkWidget_val, Val_bool) */
-ML_1 (gtk_widget_grab_focus, GtkWidget_val, Unit)
-ML_1 (gtk_widget_grab_default, GtkWidget_val, Unit)
-ML_2 (gtk_widget_set_name, GtkWidget_val, String_val, Unit)
-ML_1 (gtk_widget_get_name, GtkWidget_val, Val_string)
-ML_2 (gtk_widget_set_state, GtkWidget_val, State_type_val, Unit)
-ML_2 (gtk_widget_set_sensitive, GtkWidget_val, Bool_val, Unit)
-ML_3 (gtk_widget_set_uposition, GtkWidget_val, Int_val, Int_val, Unit)
-ML_3 (gtk_widget_set_usize, GtkWidget_val, Int_val, Int_val, Unit)
-ML_2 (gtk_widget_add_events, GtkWidget_val, Flags_Event_mask_val, Unit)
-ML_2 (gtk_widget_set_events, GtkWidget_val, Flags_Event_mask_val, Unit)
-ML_2 (gtk_widget_set_extension_events, GtkWidget_val, Extension_events_val,
-      Unit)
-ML_1 (gtk_widget_get_toplevel, GtkWidget_val, Val_GtkWidget)
-ML_2 (gtk_widget_get_ancestor, GtkWidget_val, Int_val, Val_GtkWidget)
-ML_1 (gtk_widget_get_colormap, GtkWidget_val, Val_GdkColormap)
-ML_1 (gtk_widget_get_visual, GtkWidget_val, (value))
-value ml_gtk_widget_get_pointer (value w)
-{
-    int x,y;
-    value ret;
-    gtk_widget_get_pointer (GtkWidget_val(w), &x, &y);
-    ret = alloc_small (2,0);
-    Field(ret,0) = Val_int(x);
-    Field(ret,1) = Val_int(y);
-    return ret;
-}
-ML_2 (gtk_widget_is_ancestor, GtkWidget_val, GtkWidget_val, Val_bool)
-/* ML_2 (gtk_widget_is_child, GtkWidget_val, GtkWidget_val, Val_bool) */
-ML_2 (gtk_widget_set_style, GtkWidget_val, GtkStyle_val, Unit)
-ML_1 (gtk_widget_set_rc_style, GtkWidget_val, Unit)
-ML_1 (gtk_widget_ensure_style, GtkWidget_val, Unit)
-ML_1 (gtk_widget_get_style, GtkWidget_val, Val_GtkStyle)
-ML_1 (gtk_widget_restore_default_style, GtkWidget_val, Unit)
-
-ML_6 (gtk_widget_add_accelerator, GtkWidget_val, Signal_name_val,
-      GtkAccelGroup_val, Char_val, OptFlags_GdkModifier_val,
-      OptFlags_Accel_flag_val, Unit)
-ML_bc6 (ml_gtk_widget_add_accelerator)
-ML_4 (gtk_widget_remove_accelerator, GtkWidget_val, GtkAccelGroup_val,
-      Char_val, OptFlags_GdkModifier_val, Unit)
-ML_1 (gtk_widget_lock_accelerators, GtkWidget_val, Unit)
-ML_1 (gtk_widget_unlock_accelerators, GtkWidget_val, Unit)
-ML_1 (gtk_widget_accelerators_locked, GtkWidget_val, Val_bool)
-
-ML_1 (GTK_WIDGET_VISIBLE, GtkWidget_val, Val_bool)
-ML_1 (GTK_WIDGET_HAS_FOCUS, GtkWidget_val, Val_bool)
-
-Make_Extractor (GtkWidget, GtkWidget_val, window, Val_GdkWindow)
-Make_Extractor (gtk_widget, GtkWidget_val, parent, Val_GtkWidget)
-static value Val_GtkAllocation (GtkAllocation allocation)
-{
-    value ret = alloc_small (4, 0);
-    Field(ret,0) = Val_int(allocation.x);
-    Field(ret,1) = Val_int(allocation.y);
-    Field(ret,2) = Val_int(allocation.width);
-    Field(ret,3) = Val_int(allocation.height);
-    return ret;
-}
-Make_Extractor (gtk_widget, GtkWidget_val, allocation, Val_GtkAllocation)
-/*
-#define GtkAllocation_val(val) ((GtkAllocation*)Pointer_val(val))
-Make_Extractor (gtk_allocation, GtkAllocation_val, x, Val_int)
-Make_Extractor (gtk_allocation, GtkAllocation_val, y, Val_int)
-Make_Extractor (gtk_allocation, GtkAllocation_val, width, Val_int)
-Make_Extractor (gtk_allocation, GtkAllocation_val, height, Val_int)
-*/
-
-ML_2 (gtk_widget_set_app_paintable, GtkWidget_val, Bool_val, Unit)
-
-ML_2 (gtk_widget_set_visual, GtkWidget_val, GdkVisual_val, Unit)
-ML_2 (gtk_widget_set_colormap, GtkWidget_val, GdkColormap_val, Unit)
-ML_1 (gtk_widget_set_default_visual, GdkVisual_val, Unit)
-ML_1 (gtk_widget_set_default_colormap, GdkColormap_val, Unit)
-ML_0 (gtk_widget_get_default_visual, Val_GdkVisual)
-ML_0 (gtk_widget_get_default_colormap, Val_GdkColormap)
-ML_1 (gtk_widget_push_visual, GdkVisual_val, Unit)
-ML_1 (gtk_widget_push_colormap, GdkColormap_val, Unit)
-ML_0 (gtk_widget_pop_visual, Unit)
-ML_0 (gtk_widget_pop_colormap, Unit)
-
-/* gtkdnd.h */
-
-value ml_gtk_drag_dest_set (value w, value f, value t, value a)
-{
-  GtkTargetEntry *targets = (GtkTargetEntry *)Val_unit;
-  int n_targets, i;
-  
-  CAMLparam4 (w,f,t,a);
-  n_targets = Wosize_val(t);
-  if (n_targets)
-      targets = (GtkTargetEntry *)
-         alloc (Wosize_asize(n_targets * sizeof(GtkTargetEntry)),
-                Abstract_tag);
-  for (i=0; i<n_targets; i++) {
-    targets[i].target = String_val(Field(Field(t, i), 0));
-    targets[i].flags = Flags_Target_flags_val(Field(Field(t, i), 1));
-    targets[i].info = Int_val(Field(Field(t, i), 2));
-  }
-  gtk_drag_dest_set (GtkWidget_val(w), Flags_Dest_defaults_val(f),
-                    targets, n_targets, Flags_GdkDragAction_val(a));
-  CAMLreturn(Val_unit);
-}
-ML_1 (gtk_drag_dest_unset, GtkWidget_val, Unit)
-ML_4 (gtk_drag_finish, GdkDragContext_val, Bool_val, Bool_val, Int_val, Unit)
-ML_4 (gtk_drag_get_data, GtkWidget_val, GdkDragContext_val, Int_val, Int_val, Unit)
-ML_1 (gtk_drag_get_source_widget, GdkDragContext_val, Val_GtkWidget)
-ML_1 (gtk_drag_highlight, GtkWidget_val, Unit)
-ML_1 (gtk_drag_unhighlight, GtkWidget_val, Unit)
-ML_4 (gtk_drag_set_icon_widget, GdkDragContext_val, GtkWidget_val,
-      Int_val, Int_val, Unit)
-ML_6 (gtk_drag_set_icon_pixmap, GdkDragContext_val, GdkColormap_val,
-      GdkPixmap_val, Option_val(arg4, GdkBitmap_val, NULL) Ignore,
-      Int_val, Int_val, Unit)
-ML_bc6 (ml_gtk_drag_set_icon_pixmap)
-ML_1 (gtk_drag_set_icon_default, GdkDragContext_val, Unit)
-ML_5 (gtk_drag_set_default_icon, GdkColormap_val,
-      GdkPixmap_val, Option_val(arg3, GdkBitmap_val, NULL) Ignore,
-      Int_val, Int_val, Unit)
-value ml_gtk_drag_source_set (value w, value m, value t, value a)
-{
-  GtkTargetEntry *targets = (GtkTargetEntry *)Val_unit;
-  int n_targets, i;
-  CAMLparam4 (w,m,t,a);
-  
-  n_targets = Wosize_val(t);
-  if (n_targets)
-      targets = (GtkTargetEntry *)
-         alloc (Wosize_asize(n_targets * sizeof(GtkTargetEntry)),
-                Abstract_tag);
-  for (i=0; i<n_targets; i++) {
-    targets[i].target = String_val(Field(Field(t, i), 0));
-    targets[i].flags = Flags_Target_flags_val(Field(Field(t, i), 1));
-    targets[i].info = Int_val(Field(Field(t, i), 2));
-  }
-  gtk_drag_source_set (GtkWidget_val(w), OptFlags_GdkModifier_val(m),
-                      targets, n_targets, Flags_GdkDragAction_val(a));
-  CAMLreturn(Val_unit);
-}
-ML_4 (gtk_drag_source_set_icon, GtkWidget_val, GdkColormap_val,
-      GdkPixmap_val, Option_val(arg4, GdkBitmap_val, NULL) Ignore, Unit)
-ML_1 (gtk_drag_source_unset, GtkWidget_val, Unit)
-
-/* gtkwidget.h / gtkselection.h */
-
-#define GtkSelectionData_val(val) ((GtkSelectionData *)Pointer_val(val))
-
-Make_Extractor (gtk_selection_data, GtkSelectionData_val, selection, Val_int)
-Make_Extractor (gtk_selection_data, GtkSelectionData_val, target, Val_int)
-Make_Extractor (gtk_selection_data, GtkSelectionData_val, type, Val_int)
-Make_Extractor (gtk_selection_data, GtkSelectionData_val, format, Val_int)
-value ml_gtk_selection_data_get_data (value val)
-{
-    value ret;
-    GtkSelectionData *data = GtkSelectionData_val(val);
-
-    if (data->length < 0) ml_raise_null_pointer();
-    ret = alloc_string (data->length);
-    if (data->length) memcpy ((void*)ret, data->data, data->length);
-    return ret;
-}
-
-ML_4 (gtk_selection_data_set, GtkSelectionData_val, Int_val, Int_val,
-      Insert((guchar*)String_option_val(arg4))
-      Option_val(arg4, string_length, -1) Ignore,
-      Unit)
-
-/* gtkcontainer.h */
-
-#define GtkContainer_val(val) check_cast(GTK_CONTAINER,val)
-ML_2 (gtk_container_set_border_width, GtkContainer_val, Int_val, Unit)
-ML_2 (gtk_container_set_resize_mode, GtkContainer_val, Resize_mode_val, Unit)
-ML_2 (gtk_container_add, GtkContainer_val, GtkWidget_val, Unit)
-ML_2 (gtk_container_remove, GtkContainer_val, GtkWidget_val, Unit)
-static void ml_gtk_simple_callback (GtkWidget *w, gpointer data)
-{
-    value val, *clos = (value*)data;
-    val = Val_GtkWidget(w);
-    callback (*clos, val);
-}
-value ml_gtk_container_foreach (value w, value clos)
-{
-    CAMLparam1(clos);
-    gtk_container_foreach (GtkContainer_val(w), ml_gtk_simple_callback,
-                          &clos);
-    CAMLreturn(Val_unit);
-}
-ML_1 (gtk_container_register_toplevel, GtkContainer_val, Unit)
-ML_1 (gtk_container_unregister_toplevel, GtkContainer_val, Unit)
-ML_2 (gtk_container_focus, GtkContainer_val, Direction_type_val, Val_bool)
-ML_2 (gtk_container_set_focus_child, GtkContainer_val, GtkWidget_val, Unit)
-ML_2 (gtk_container_set_focus_vadjustment, GtkContainer_val,
-      GtkAdjustment_val, Unit)
-ML_2 (gtk_container_set_focus_hadjustment, GtkContainer_val,
-      GtkAdjustment_val, Unit)
-
-/* gtkdialog.h */
-
-static void window_unref (GtkObject *w)
-{
-    /* If the window exists and is still not visible, then unreference twice.
-       This should be enough to destroy it. */
-    if (!GTK_OBJECT_DESTROYED(w) && !GTK_WIDGET_VISIBLE(w))
-       gtk_object_unref (w);
-    gtk_object_unref (w);
-}
-Make_Val_final_pointer_ext (GtkObject, _window, gtk_object_ref, window_unref,
-                            20)
-#define Val_GtkWidget_window(w) Val_GtkObject_window((GtkObject*)w)
-
-#define GtkDialog_val(val) check_cast(GTK_DIALOG,val)
-ML_0 (gtk_dialog_new, Val_GtkWidget_window)
-Make_Extractor (GtkDialog, GtkDialog_val, action_area, Val_GtkWidget)
-Make_Extractor (GtkDialog, GtkDialog_val, vbox, Val_GtkWidget)
-
-/* gtkinputdialog.h */
-
-ML_0 (gtk_input_dialog_new, Val_GtkWidget_window)
-
-/* gtkfileselection.h */
-
-#define GtkFileSelection_val(val) check_cast(GTK_FILE_SELECTION,val)
-ML_1 (gtk_file_selection_new, String_val, Val_GtkWidget_window)
-ML_2 (gtk_file_selection_set_filename, GtkFileSelection_val, String_val, Unit)
-ML_1 (gtk_file_selection_get_filename, GtkFileSelection_val, Val_string)
-ML_1 (gtk_file_selection_show_fileop_buttons, GtkFileSelection_val, Unit)
-ML_1 (gtk_file_selection_hide_fileop_buttons, GtkFileSelection_val, Unit)
-Make_Extractor (gtk_file_selection_get, GtkFileSelection_val, ok_button,
-               Val_GtkWidget)
-Make_Extractor (gtk_file_selection_get, GtkFileSelection_val, cancel_button,
-               Val_GtkWidget)
-Make_Extractor (gtk_file_selection_get, GtkFileSelection_val, help_button,
-               Val_GtkWidget)
-
-/* gtkwindow.h */
-
-#define GtkWindow_val(val) check_cast(GTK_WINDOW,val)
-ML_1 (gtk_window_new, Window_type_val, Val_GtkWidget_window)
-ML_2 (gtk_window_set_title, GtkWindow_val, String_val, Unit)
-ML_3 (gtk_window_set_wmclass, GtkWindow_val, String_val, String_val, Unit)
-Make_Extractor (gtk_window_get, GtkWindow_val, wmclass_name, Val_optstring)
-Make_Extractor (gtk_window_get, GtkWindow_val, wmclass_class, Val_optstring)
-ML_2 (gtk_window_set_focus, GtkWindow_val, GtkWidget_val, Unit)
-ML_2 (gtk_window_set_default, GtkWindow_val, GtkWidget_val, Unit)
-ML_4 (gtk_window_set_policy, GtkWindow_val, Bool_val, Bool_val, Bool_val, Unit)
-Make_Extractor (gtk_window_get, GtkWindow_val, allow_shrink, Val_bool)
-Make_Extractor (gtk_window_get, GtkWindow_val, allow_grow, Val_bool)
-Make_Extractor (gtk_window_get, GtkWindow_val, auto_shrink, Val_bool)
-ML_2 (gtk_window_add_accel_group, GtkWindow_val,
-      GtkAccelGroup_val, Unit)
-ML_2 (gtk_window_remove_accel_group, GtkWindow_val,
-      GtkAccelGroup_val, Unit)
-ML_1 (gtk_window_activate_focus, GtkWindow_val, Val_bool)
-ML_1 (gtk_window_activate_default, GtkWindow_val, Val_bool)
-ML_2 (gtk_window_set_modal, GtkWindow_val, Bool_val, Unit)
-ML_3 (gtk_window_set_default_size, GtkWindow_val, Int_val, Int_val, Unit)
-ML_2 (gtk_window_set_position, GtkWindow_val, Window_position_val, Unit)
-ML_2 (gtk_window_set_transient_for, GtkWindow_val, GtkWindow_val, Unit)
-
-/* gtkcolorsel.h */
-
-#define GtkColorSelection_val(val) check_cast(GTK_COLOR_SELECTION,val)
-#define GtkColorSelectionDialog_val(val) check_cast(GTK_COLOR_SELECTION_DIALOG,val)
-ML_0 (gtk_color_selection_new, Val_GtkWidget_sink)
-ML_2 (gtk_color_selection_set_update_policy, GtkColorSelection_val,
-      Update_type_val, Unit)
-ML_2 (gtk_color_selection_set_opacity, GtkColorSelection_val,
-      Bool_val, Unit)
-value ml_gtk_color_selection_set_color (value w, value red, value green,
-                                       value blue, value opacity)
-{
-    double color[4];
-    color[0] = Double_val(red);
-    color[1] = Double_val(green);
-    color[2] = Double_val(blue);
-    color[3] = Option_val(opacity,Double_val,0.0);
-    gtk_color_selection_set_color (GtkColorSelection_val(w), color);
-    return Val_unit;
-}
-value ml_gtk_color_selection_get_color (value w)
-{
-    value ret;
-    double color[4];
-    color[3] = 0.0;
-    gtk_color_selection_get_color (GtkColorSelection_val(w), color);
-    ret = alloc (4*Double_wosize, Double_array_tag);
-    Store_double_field (ret, 0, color[0]);
-    Store_double_field (ret, 1, color[1]);
-    Store_double_field (ret, 2, color[2]);
-    Store_double_field (ret, 3, color[3]);
-    return ret;
-}
-ML_1 (gtk_color_selection_dialog_new, String_val, Val_GtkWidget_window)
-Make_Extractor (gtk_color_selection_dialog, GtkColorSelectionDialog_val, ok_button, Val_GtkWidget)
-Make_Extractor (gtk_color_selection_dialog, GtkColorSelectionDialog_val, cancel_button, Val_GtkWidget)
-Make_Extractor (gtk_color_selection_dialog, GtkColorSelectionDialog_val, help_button, Val_GtkWidget)
-Make_Extractor (gtk_color_selection_dialog, GtkColorSelectionDialog_val, colorsel, Val_GtkWidget)
-
-/* gtkfontsel.h */
-
-#define GtkFontSelection_val(val) \
-   check_cast(GTK_FONT_SELECTION,val)
-ML_0 (gtk_font_selection_new, Val_GtkWidget_sink)
-ML_1 (gtk_font_selection_get_font, GtkFontSelection_val,
-      Val_GdkFont)
-ML_1 (gtk_font_selection_get_font_name, GtkFontSelection_val,
-      copy_string_check)
-ML_2 (gtk_font_selection_set_font_name, GtkFontSelection_val,
-      String_val, Val_bool)
-ML_9 (gtk_font_selection_set_filter, GtkFontSelection_val,
-      Font_filter_type_val, Flags_Font_type_val,
-      (gchar**), (gchar**), (gchar**),
-      (gchar**), (gchar**), (gchar**), Unit)
-ML_bc9 (ml_gtk_font_selection_set_filter)
-ML_1 (gtk_font_selection_get_preview_text, GtkFontSelection_val,
-      copy_string)
-ML_2 (gtk_font_selection_set_preview_text, GtkFontSelection_val,
-      String_val, Unit)
-
-#define GtkFontSelectionDialog_val(val) \
-   check_cast(GTK_FONT_SELECTION_DIALOG,val)
-ML_1 (gtk_font_selection_dialog_new, String_option_val, Val_GtkWidget_window)
-/*
-ML_1 (gtk_font_selection_dialog_get_font, GtkFontSelectionDialog_val,
-      Val_GdkFont)
-ML_1 (gtk_font_selection_dialog_get_font_name, GtkFontSelectionDialog_val,
-      copy_string_check)
-ML_2 (gtk_font_selection_dialog_set_font_name, GtkFontSelectionDialog_val,
-      String_val, Val_bool)
-ML_9 (gtk_font_selection_dialog_set_filter, GtkFontSelectionDialog_val,
-      Font_filter_type_val, Flags_Font_type_val,
-      (gchar**), (gchar**), (gchar**),
-      (gchar**), (gchar**), (gchar**), Unit)
-ML_bc9 (ml_gtk_font_selection_dialog_set_filter)
-ML_1 (gtk_font_selection_dialog_get_preview_text, GtkFontSelectionDialog_val,
-      copy_string)
-ML_2 (gtk_font_selection_dialog_set_preview_text, GtkFontSelectionDialog_val,
-      String_val, Unit)
-*/
-Make_Extractor (gtk_font_selection_dialog, GtkFontSelectionDialog_val,
-                fontsel, Val_GtkWidget)
-Make_Extractor (gtk_font_selection_dialog, GtkFontSelectionDialog_val,
-               ok_button, Val_GtkWidget)
-Make_Extractor (gtk_font_selection_dialog, GtkFontSelectionDialog_val,
-               apply_button, Val_GtkWidget)
-Make_Extractor (gtk_font_selection_dialog, GtkFontSelectionDialog_val,
-               cancel_button, Val_GtkWidget)
-
-/* gtkplug.h */
-
-ML_1 (gtk_plug_new, XID_val, Val_GtkWidget_window)
-
-/* gtkctree.h */
-#define GtkCTree_val(val) check_cast(GTK_CTREE,val)
-/* Beware: this definition axpects arg1 to be a GtkCTree */
-/*
-#define GtkCTreeNode_val(val) \
-     (gtk_ctree_find(GtkCTree_val(arg1),NULL,(GtkCTreeNode*)(val-1)) \
-     ? (GtkCTreeNode*)(val-1) : (ml_raise_gtk ("Bad GtkCTreeNode"), NULL))
-#define Val_GtkCTreeNode Val_addr
-ML_2 (gtk_ctree_new, Int_val, Int_val, Val_GtkWidget_sink)
-ML_3 (gtk_ctree_new_with_titles, Int_val, Int_val, (char **),
-      Val_GtkWidget_sink)
-ML_11 (gtk_ctree_insert_node, GtkCTree_val, GtkCTreeNode_val,
-       GtkCTreeNode_val, (char**), Int_val, GdkPixmap_val, GdkBitmap_val,
-       GdkPixmap_val, GdkBitmap_val, Bool_val, Bool_val,
-       Val_GtkCTreeNode)
-ML_2 (gtk_ctree_remove_node, GtkCTree_val, GtkCTreeNode_val, Unit)
-ML_2 (gtk_ctree_is_viewable, GtkCTree_val, GtkCTreeNode_val, Val_bool)
-*/
-
-/* gtkpreview.h */
-/*
-#define GtkPreview_val(val) GTK_PREVIEW(Pointer_val(val))
-ML_1 (gtk_preview_new, Preview_val, Val_GtkWidget_sink)
-ML_3 (gtk_preview_size, GtkPreview_val, Int_val, Int_val, Unit)
-ML_9 (gtk_preview_put, GtkPreview_val, GdkWindow_val, GdkGC_val,
-      Int_val, Int_val, Int_val, Int_val, Int_val, Int_val, Unit)
-ML_bc9 (ml_gtk_preview_put)
-*/
-
-/* gtkmain.h */
-
-value ml_gtk_init (value argv)
-{
-    CAMLparam1 (argv);
-    int argc = Wosize_val(argv), i;
-    CAMLlocal1 (copy);
-
-    copy = (argc ? alloc (argc, Abstract_tag) : Atom(0));
-    for (i = 0; i < argc; i++) Field(copy,i) = Field(argv,i);
-    gtk_init (&argc, (char ***)&copy);
-
-    argv = (argc ? alloc (argc, 0) : Atom(0));
-    for (i = 0; i < argc; i++) modify(&Field(argv,i), Field(copy,i));
-    CAMLreturn (argv);
-}
-ML_1 (gtk_exit, Int_val, Unit)
-ML_0 (gtk_set_locale, Val_string)
-ML_0 (gtk_main, Unit)
-ML_1 (gtk_main_iteration_do, Bool_val, Val_bool)
-ML_0 (gtk_main_quit, Unit)
-ML_1 (gtk_grab_add, GtkWidget_val, Unit)
-ML_1 (gtk_grab_remove, GtkWidget_val, Unit)
-ML_0 (gtk_grab_get_current, Val_GtkWidget)
-value ml_gtk_get_version (value unit)
-{
-    value ret = alloc_small(3,0);
-    Field(ret,0) = Val_int(gtk_major_version);
-    Field(ret,1) = Val_int(gtk_minor_version);
-    Field(ret,2) = Val_int(gtk_micro_version);
-    return ret;
-}
-
-/* Marshalling */
-
-void ml_gtk_callback_marshal (GtkObject *object, gpointer data,
-                              guint nargs, GtkArg *args)
-{
-    value vargs = alloc_small(3,0);
-
-    CAMLparam1 (vargs);
-    Field(vargs,0) = (value) object;
-    Field(vargs,1) = Val_int(nargs);
-    Field(vargs,2) = (value) args;
-
-    callback (*(value*)data, vargs);
-
-    Field(vargs,0) = Val_int(-1);
-    Field(vargs,1) = Val_int(-1);
-    CAMLreturn0;
-}
-
-value ml_gtk_arg_shift (GtkArg *args, value index)
-{
-    return (value) (&args[Int_val(index)]);
-}
-
-value ml_gtk_arg_get_type (GtkArg *arg)
-{
-    return Val_int (arg->type);
-}
-
-value ml_gtk_arg_get (GtkArg *arg)
-{
-    CAMLparam0();
-    CAMLlocal1(tmp);
-    value ret = Val_unit;
-    GtkFundamentalType type = GTK_FUNDAMENTAL_TYPE(arg->type);
-    int tag;
-
-    switch (type) {
-    case GTK_TYPE_CHAR:
-        tag = 0;
-        tmp = Int_val(GTK_VALUE_CHAR(*arg));
-        break;
-    case GTK_TYPE_BOOL:
-        tag = 1;
-        tmp = Val_bool(GTK_VALUE_BOOL(*arg));
-        break;
-    case GTK_TYPE_INT:
-    case GTK_TYPE_ENUM:
-    case GTK_TYPE_UINT:
-    case GTK_TYPE_FLAGS:
-        tag = 2;
-        tmp = Val_int (GTK_VALUE_INT(*arg)); break;
-    case GTK_TYPE_LONG:
-    case GTK_TYPE_ULONG:
-        tag = 2;
-        tmp = Val_int (GTK_VALUE_LONG(*arg)); break;
-    case GTK_TYPE_FLOAT:
-        tag = 3;
-        tmp = copy_double ((double)GTK_VALUE_FLOAT(*arg)); break;
-    case GTK_TYPE_DOUBLE:
-        tag = 3;
-        tmp = copy_double (GTK_VALUE_DOUBLE(*arg)); break;
-    case GTK_TYPE_STRING:
-        tag = 4;
-        tmp = Val_option (GTK_VALUE_STRING(*arg), copy_string); break;
-    case GTK_TYPE_OBJECT:
-        tag = 5;
-        tmp = Val_option (GTK_VALUE_OBJECT(*arg), Val_GtkObject); break;
-    case GTK_TYPE_BOXED:
-    case GTK_TYPE_POINTER:
-        tag = 6;
-        tmp = Val_option (GTK_VALUE_POINTER(*arg), Val_pointer); break;
-    default:
-        tag = -1;
-    }
-    if (tag != -1) {
-        ret = alloc_small(1,tag);
-        Field(ret,0) = tmp;
-    }
-    CAMLreturn(ret);
-}
-
-value ml_gtk_arg_set_retloc (GtkArg *arg, value val)
-{
-    value type = Fundamental_type_val(Is_block(val) ? Field(val,0) : val);
-    value data = (Is_block(val) ? Field(val,1) : 0);
-    if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_POINTER
-        && GTK_FUNDAMENTAL_TYPE(arg->type) != type)
-       ml_raise_gtk ("GtkArgv.Arg.set : argument type mismatch");
-    switch (type) {
-    case GTK_TYPE_CHAR:   *GTK_RETLOC_CHAR(*arg) = Int_val(data); break;
-    case GTK_TYPE_BOOL:   *GTK_RETLOC_BOOL(*arg) = Int_val(data); break;
-    case GTK_TYPE_INT:
-    case GTK_TYPE_ENUM:   *GTK_RETLOC_INT(*arg) = Int_val(data); break;
-    case GTK_TYPE_UINT:
-    case GTK_TYPE_FLAGS:  *GTK_RETLOC_UINT(*arg) = Int32_val(data); break;
-    case GTK_TYPE_LONG:
-    case GTK_TYPE_ULONG:  *GTK_RETLOC_LONG(*arg) = Nativeint_val(data); break;
-    case GTK_TYPE_FLOAT:  *GTK_RETLOC_FLOAT(*arg) = Float_val(data); break;
-    case GTK_TYPE_DOUBLE: *GTK_RETLOC_DOUBLE(*arg) = Double_val(data); break;
-    case GTK_TYPE_STRING:
-         *GTK_RETLOC_STRING(*arg) = Option_val(data, String_val, NULL);
-         break;
-    case GTK_TYPE_BOXED:
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_OBJECT:
-         *GTK_RETLOC_POINTER(*arg) = Option_val(data, Pointer_val, NULL);
-         break;
-    }
-    return Val_unit;
-}
-
-/*
-value ml_gtk_arg_get_char (GtkArg *arg)
-{
-    if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_CHAR)
-       ml_raise_gtk ("argument type mismatch");
-    return Val_char (GTK_VALUE_CHAR(*arg));
-}
-
-value ml_gtk_arg_get_bool (GtkArg *arg)
-{
-    if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_BOOL)
-       ml_raise_gtk ("argument type mismatch");
-    return Val_bool (GTK_VALUE_BOOL(*arg));
-}
-
-value ml_gtk_arg_get_int (GtkArg *arg)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_INT:
-    case GTK_TYPE_UINT:
-       return Val_int (GTK_VALUE_INT(*arg));
-    case GTK_TYPE_LONG:
-    case GTK_TYPE_ULONG:
-       return Val_long (GTK_VALUE_LONG(*arg));
-    case GTK_TYPE_ENUM:
-       return Val_int (GTK_VALUE_ENUM(*arg));
-    case GTK_TYPE_FLAGS:
-       return Val_int (GTK_VALUE_FLAGS(*arg));
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-*/
-value ml_gtk_arg_get_nativeint(GtkArg *arg) {
-
-     switch(GTK_FUNDAMENTAL_TYPE(arg->type)) {
-     case GTK_TYPE_INT:
-     case GTK_TYPE_UINT:
-          return copy_nativeint (GTK_VALUE_INT(*arg));
-     case GTK_TYPE_LONG:
-     case GTK_TYPE_ULONG:
-          return copy_nativeint (GTK_VALUE_LONG(*arg));
-     case GTK_TYPE_ENUM:
-          return copy_nativeint (GTK_VALUE_ENUM(*arg));
-     case GTK_TYPE_FLAGS:
-          return copy_nativeint (GTK_VALUE_FLAGS(*arg));
-     default:
-          ml_raise_gtk ("argument type mismatch");
-     }
-     return Val_unit;
-}
-/*
-value ml_gtk_arg_get_float (GtkArg *arg)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_FLOAT:
-       return copy_double ((double)GTK_VALUE_FLOAT(*arg));
-    case GTK_TYPE_DOUBLE:
-       return copy_double (GTK_VALUE_DOUBLE(*arg));
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_get_string (GtkArg *arg)
-{
-    char *p;
-    if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_STRING)
-       ml_raise_gtk ("argument type mismatch");
-    p = GTK_VALUE_STRING(*arg);
-    return Val_option (p, copy_string);
-}
-*/
-value ml_gtk_arg_get_pointer (GtkArg *arg)
-{
-    gpointer p = NULL;
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_STRING:
-    case GTK_TYPE_BOXED:
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_OBJECT:
-        p = GTK_VALUE_POINTER(*arg); break;
-    default:
-       ml_raise_gtk ("GtkArgv.get_pointer : argument type mismatch");
-    }
-    return Val_pointer(p);
-}
-/*
-value ml_gtk_arg_get_object (GtkArg *arg)
-{
-    GtkObject *p;
-    if (GTK_FUNDAMENTAL_TYPE(arg->type) != GTK_TYPE_OBJECT)
-       ml_raise_gtk ("argument type mismatch");
-    p = GTK_VALUE_OBJECT(*arg);
-    return Val_option (p, Val_GtkObject);
-}
-*/
-
-value ml_string_at_pointer (value ofs, value len, value ptr)
-{
-    char *start = ((char*)Pointer_val(ptr)) + Option_val(ofs, Int_val, 0);
-    int length = Option_val(len, Int_val, strlen(start));
-    value ret = alloc_string(length);
-    memcpy ((char*)ret, start, length);
-    return ret;
-}
-
-value ml_int_at_pointer (value ptr)
-{
-    return Val_int(*(int*)Pointer_val(ptr));
-}
-
-/*
-value ml_gtk_arg_set_char (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_CHAR:
-         *GTK_RETLOC_CHAR(*arg) = Char_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_bool (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_BOOL:
-         *GTK_RETLOC_BOOL(*arg) = Bool_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_int (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_INT:
-    case GTK_TYPE_UINT:
-       *GTK_RETLOC_INT(*arg) = Int_val(val); break;
-    case GTK_TYPE_LONG:
-    case GTK_TYPE_ULONG:
-       *GTK_RETLOC_LONG(*arg) = Long_val(val); break;
-    case GTK_TYPE_ENUM:
-       *GTK_RETLOC_ENUM(*arg) = Int_val(val); break;
-    case GTK_TYPE_FLAGS:
-       *GTK_RETLOC_FLAGS(*arg) = Int_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_nativeint (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_INT:
-    case GTK_TYPE_UINT:
-       *GTK_RETLOC_INT(*arg) = Nativeint_val(val); break;
-    case GTK_TYPE_LONG:
-    case GTK_TYPE_ULONG:
-       *GTK_RETLOC_LONG(*arg) = Nativeint_val(val); break;
-    case GTK_TYPE_ENUM:
-       *GTK_RETLOC_ENUM(*arg) = Nativeint_val(val); break;
-    case GTK_TYPE_FLAGS:
-       *GTK_RETLOC_FLAGS(*arg) = Nativeint_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_float (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_FLOAT:
-       *GTK_RETLOC_FLOAT(*arg) = (float) Double_val(val); break;
-    case GTK_TYPE_DOUBLE:
-       *GTK_RETLOC_DOUBLE(*arg) = Double_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_string (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_STRING:
-         *GTK_RETLOC_STRING(*arg) = String_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_pointer (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_BOXED:
-       *GTK_RETLOC_BOXED(*arg) = Pointer_val(val); break;
-    case GTK_TYPE_POINTER:
-       *GTK_RETLOC_POINTER(*arg) = Pointer_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-
-value ml_gtk_arg_set_object (GtkArg *arg, value val)
-{
-    switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
-    case GTK_TYPE_POINTER:
-    case GTK_TYPE_OBJECT:
-         *GTK_RETLOC_OBJECT(*arg) = GtkObject_val(val); break;
-    default:
-       ml_raise_gtk ("argument type mismatch");
-    }
-    return Val_unit;
-}
-*/
-
-/* gtksignal.h */
-
-value ml_gtk_signal_connect (value object, value name, value clos, value after)
-{
-    value *clos_p = ml_global_root_new (clos);
-    return Val_int (gtk_signal_connect_full
-                   (GtkObject_val(object), String_val(name), NULL,
-                    ml_gtk_callback_marshal, clos_p,
-                    ml_global_root_destroy, FALSE, Bool_val(after)));
-}
-
-ML_2 (gtk_signal_disconnect, GtkObject_val, Int_val, Unit)
-ML_2 (gtk_signal_emit_stop_by_name, GtkObject_val, String_val, Unit)
-ML_2 (gtk_signal_handler_block, GtkObject_val, Int_val, Unit)
-ML_2 (gtk_signal_handler_unblock, GtkObject_val, Int_val, Unit)
-ML_2_name (ml_gtk_signal_emit_none, gtk_signal_emit_by_name,
-           GtkObject_val, String_val, Unit)
-ML_3_name (ml_gtk_signal_emit_int, gtk_signal_emit_by_name,
-           GtkObject_val, String_val, Int_val, Unit)
-ML_4_name (ml_gtk_signal_emit_scroll, gtk_signal_emit_by_name,
-           GtkObject_val, String_val, Scroll_type_val, Double_val, Unit)
-
-/* gtkmain.h (again) */
-
-value ml_gtk_timeout_add (value interval, value clos)
-{
-    value *clos_p = ml_global_root_new (clos);
-    return Val_int (gtk_timeout_add_full
-                   (Int_val(interval), NULL, ml_gtk_callback_marshal, clos_p,
-                    ml_global_root_destroy));
-}
-ML_1 (gtk_timeout_remove, Int_val, Unit)
-
-ML_1 (gtk_rc_add_default_file, String_val, Unit)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.h b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtk.h
deleted file mode 100644 (file)
index eac3f6e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* $Id$ */
-
-#define GtkObject_val(obj) ((GtkObject*)Field(obj,1))
-value Val_GtkObject (GtkObject *w);
-value Val_GtkObject_sink (GtkObject *w);
-#define GtkAccelGroup_val(val) ((GtkAccelGroup*)Pointer_val(val))
-value Val_GtkAccelGroup (GtkAccelGroup *);
-#define GtkStyle_val(val) ((GtkStyle*)Pointer_val(val))
-value Val_GtkStyle (GtkStyle *);
-
-#define Val_GtkAny(w) Val_GtkObject((GtkObject*)w)
-#define Val_GtkAny_sink(w) Val_GtkObject_sink((GtkObject*)w)
-#define Val_GtkWidget Val_GtkAny
-#define Val_GtkWidget_sink Val_GtkAny_sink
-
-#ifdef GTK_NO_CHECK_CASTS
-#define check_cast(f,v) f(Pointer_val(v))
-#else
-#define check_cast(f,v) (Pointer_val(v) == NULL ? NULL : f(Pointer_val(v)))
-#endif
-
-#define GtkWidget_val(val) check_cast(GTK_WIDGET,val)
-#define GtkAdjustment_val(val) check_cast(GTK_ADJUSTMENT,val)
-#define GtkItem_val(val) check_cast(GTK_ITEM,val)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbin.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbin.c
deleted file mode 100644 (file)
index 9b797a6..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtk_tags.h"
-
-/* gtkalignment.h */
-
-#define GtkAlignment_val(val) check_cast(GTK_ALIGNMENT,val)
-ML_4 (gtk_alignment_new, Float_val, Float_val, Float_val, Float_val,
-      Val_GtkWidget_sink)
-value ml_gtk_alignment_set (value x, value y,
-                          value xscale, value yscale, value val)
-{
-    GtkAlignment *alignment = GtkAlignment_val(val);
-    gtk_alignment_set (alignment,
-                      Option_val(x, Float_val, alignment->xalign),
-                      Option_val(y, Float_val, alignment->yalign),
-                      Option_val(xscale, Float_val, alignment->xscale),
-                      Option_val(yscale, Float_val, alignment->xscale));
-    return Val_unit;
-}
-
-/* gtkeventbox.h */
-
-ML_0 (gtk_event_box_new, Val_GtkWidget_sink)
-
-/* gtkframe.h */
-
-#define GtkFrame_val(val) check_cast(GTK_FRAME,val)
-ML_1 (gtk_frame_new, Optstring_val, Val_GtkWidget_sink)
-ML_2 (gtk_frame_set_label, GtkFrame_val, Optstring_val, Unit)
-ML_3 (gtk_frame_set_label_align, GtkFrame_val, Float_val, Float_val, Unit)
-ML_2 (gtk_frame_set_shadow_type, GtkFrame_val, Shadow_type_val, Unit)
-Make_Extractor (gtk_frame_get, GtkFrame_val, label_xalign, copy_double)
-Make_Extractor (gtk_frame_get, GtkFrame_val, label_yalign, copy_double)
-
-/* gtkaspectframe.h */
-
-#define GtkAspectFrame_val(val) check_cast(GTK_ASPECT_FRAME,val)
-ML_5 (gtk_aspect_frame_new, Optstring_val,
-      Float_val, Float_val, Float_val, Bool_val, Val_GtkWidget_sink)
-ML_5 (gtk_aspect_frame_set, GtkAspectFrame_val, Float_val, Float_val,
-      Float_val, Bool_val, Unit)
-Make_Extractor (gtk_aspect_frame_get, GtkAspectFrame_val, xalign, copy_double)
-Make_Extractor (gtk_aspect_frame_get, GtkAspectFrame_val, yalign, copy_double)
-Make_Extractor (gtk_aspect_frame_get, GtkAspectFrame_val, ratio, copy_double)
-Make_Extractor (gtk_aspect_frame_get, GtkAspectFrame_val, obey_child, Val_bool)
-
-/* gtkhandlebox.h */
-
-#define GtkHandleBox_val(val) check_cast(GTK_HANDLE_BOX,val)
-ML_0 (gtk_handle_box_new, Val_GtkWidget_sink)
-ML_2 (gtk_handle_box_set_shadow_type, GtkHandleBox_val, Shadow_type_val, Unit)
-ML_2 (gtk_handle_box_set_handle_position, GtkHandleBox_val, Position_val, Unit)
-ML_2 (gtk_handle_box_set_snap_edge, GtkHandleBox_val, Position_val, Unit)
-
-/* gtkinvisible.h */
-/* private class
-ML_0 (gtk_invisible_new, Val_GtkWidget_sink)
-*/
-
-/* gtkitem.h */
-
-ML_1 (gtk_item_select, GtkItem_val, Unit)
-ML_1 (gtk_item_deselect, GtkItem_val, Unit)
-ML_1 (gtk_item_toggle, GtkItem_val, Unit)
-
-/* gtkviewport.h */
-
-#define GtkViewport_val(val) check_cast(GTK_VIEWPORT,val)
-ML_2 (gtk_viewport_new, GtkAdjustment_val, GtkAdjustment_val,
-      Val_GtkWidget_sink)
-ML_1 (gtk_viewport_get_hadjustment, GtkViewport_val, Val_GtkWidget_sink)
-ML_1 (gtk_viewport_get_vadjustment, GtkViewport_val, Val_GtkWidget)
-ML_2 (gtk_viewport_set_hadjustment, GtkViewport_val, GtkAdjustment_val, Unit)
-ML_2 (gtk_viewport_set_vadjustment, GtkViewport_val, GtkAdjustment_val, Unit)
-ML_2 (gtk_viewport_set_shadow_type, GtkViewport_val, Shadow_type_val, Unit)
-
-/* gtkscrolledwindow.h */
-
-#define GtkScrolledWindow_val(val) check_cast(GTK_SCROLLED_WINDOW,val)
-ML_2 (gtk_scrolled_window_new, GtkAdjustment_val ,GtkAdjustment_val,
-      Val_GtkWidget_sink)
-ML_2 (gtk_scrolled_window_set_hadjustment, GtkScrolledWindow_val ,
-      GtkAdjustment_val, Unit)
-ML_2 (gtk_scrolled_window_set_vadjustment, GtkScrolledWindow_val ,
-      GtkAdjustment_val, Unit)
-ML_1 (gtk_scrolled_window_get_hadjustment, GtkScrolledWindow_val,
-      Val_GtkWidget)
-ML_1 (gtk_scrolled_window_get_vadjustment, GtkScrolledWindow_val,
-      Val_GtkWidget)
-ML_3 (gtk_scrolled_window_set_policy, GtkScrolledWindow_val,
-      Policy_type_val, Policy_type_val, Unit)
-Make_Extractor (gtk_scrolled_window_get, GtkScrolledWindow_val,
-               hscrollbar_policy, Val_policy_type)
-Make_Extractor (gtk_scrolled_window_get, GtkScrolledWindow_val,
-               vscrollbar_policy, Val_policy_type)
-ML_2 (gtk_scrolled_window_set_placement, GtkScrolledWindow_val,
-      Corner_type_val, Unit)
-ML_2 (gtk_scrolled_window_add_with_viewport, GtkScrolledWindow_val,
-      GtkWidget_val, Unit)
-
-/* gtksocket.h */
-
-#define GtkSocket_val(val) check_cast(GTK_SOCKET,val)
-ML_0 (gtk_socket_new, Val_GtkWidget_sink)
-ML_2 (gtk_socket_steal, GtkSocket_val, XID_val, Unit)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbutton.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkbutton.c
deleted file mode 100644 (file)
index a718305..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtk_tags.h"
-
-/* gtkbutton.h */
-
-#define GtkButton_val(val) check_cast(GTK_BUTTON,val)
-ML_0 (gtk_button_new, Val_GtkWidget_sink)
-ML_1 (gtk_button_new_with_label, String_val, Val_GtkWidget_sink)
-ML_1 (gtk_button_pressed, GtkButton_val, Unit)
-ML_1 (gtk_button_released, GtkButton_val, Unit)
-ML_1 (gtk_button_clicked, GtkButton_val, Unit)
-ML_1 (gtk_button_enter, GtkButton_val, Unit)
-ML_1 (gtk_button_leave, GtkButton_val, Unit)
-
-/* gtktogglebutton.h */
-
-#define GtkToggleButton_val(val) check_cast(GTK_TOGGLE_BUTTON,val)
-ML_0 (gtk_toggle_button_new, Val_GtkWidget_sink)
-ML_1 (gtk_toggle_button_new_with_label, String_val, Val_GtkWidget_sink)
-ML_2 (gtk_toggle_button_set_mode, GtkToggleButton_val, Bool_val, Unit)
-ML_2 (gtk_toggle_button_set_active, GtkToggleButton_val, Bool_val, Unit)
-ML_1 (gtk_toggle_button_toggled, GtkToggleButton_val, Unit)
-Make_Extractor (gtk_toggle_button_get, GtkToggleButton_val, active, Val_bool)
-
-/* gtkcheckbutton.h */
-
-#define GtkCheckButton_val(val) check_cast(GTK_CHECK_BUTTON,val)
-ML_0 (gtk_check_button_new, Val_GtkWidget_sink)
-ML_1 (gtk_check_button_new_with_label, String_val, Val_GtkWidget_sink)
-
-/* gtkradiobutton.h */
-
-#define GtkRadioButton_val(val) check_cast(GTK_RADIO_BUTTON,val)
-static GSList* button_group_val(value val)
-{
-    return (val == Val_unit ? NULL :
-            gtk_radio_button_group(GtkRadioButton_val(Field(val,0))));
-}
-ML_1 (gtk_radio_button_new, button_group_val,
-      Val_GtkWidget_sink)
-ML_2 (gtk_radio_button_new_with_label, button_group_val,
-      String_val, Val_GtkWidget_sink)
-ML_2 (gtk_radio_button_set_group, GtkRadioButton_val, button_group_val, Unit)
-
-/* gtktoolbar.h */
-
-#define GtkToolbar_val(val) check_cast(GTK_TOOLBAR,val)
-ML_2 (gtk_toolbar_new, Orientation_val, Toolbar_style_val, Val_GtkWidget_sink)
-ML_2 (gtk_toolbar_insert_space, GtkToolbar_val, Int_val, Unit)
-ML_7 (gtk_toolbar_insert_element, GtkToolbar_val, Toolbar_child_val,
-      Insert(NULL) Optstring_val, Optstring_val, Optstring_val, GtkWidget_val,
-      Insert(NULL) Insert(NULL) Int_val, Val_GtkWidget)
-ML_bc7 (ml_gtk_toolbar_insert_element)
-ML_5 (gtk_toolbar_insert_widget, GtkToolbar_val, GtkWidget_val,
-      Optstring_val, Optstring_val, Int_val, Unit)
-ML_2 (gtk_toolbar_set_orientation, GtkToolbar_val, Orientation_val, Unit)
-ML_2 (gtk_toolbar_set_style, GtkToolbar_val, Toolbar_style_val, Unit)
-ML_2 (gtk_toolbar_set_space_size, GtkToolbar_val, Int_val, Unit)
-ML_2 (gtk_toolbar_set_space_style, GtkToolbar_val, Toolbar_space_style_val, Unit)
-ML_2 (gtk_toolbar_set_tooltips, GtkToolbar_val, Bool_val, Unit)
-ML_2 (gtk_toolbar_set_button_relief, GtkToolbar_val, Relief_style_val, Unit)
-ML_1 (gtk_toolbar_get_button_relief, GtkToolbar_val, Val_relief_style)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkedit.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkedit.c
deleted file mode 100644 (file)
index 1c64ec2..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtk_tags.h"
-
-/* gtkeditable.h */
-
-#define GtkEditable_val(val) check_cast(GTK_EDITABLE,val)
-ML_3 (gtk_editable_select_region, GtkEditable_val, Int_val, Int_val, Unit)
-value ml_gtk_editable_insert_text (value w, value s, value pos)
-{
-    int position = Int_val(pos);
-    gtk_editable_insert_text (GtkEditable_val(w), String_val(s),
-                             string_length(s), &position);
-    return Val_int(position);
-}
-ML_3 (gtk_editable_delete_text, GtkEditable_val, Int_val, Int_val, Unit)
-ML_3 (gtk_editable_get_chars, GtkEditable_val, Int_val, Int_val,
-      copy_string_and_free)
-ML_1 (gtk_editable_cut_clipboard, GtkEditable_val, Unit)
-ML_1 (gtk_editable_copy_clipboard, GtkEditable_val, Unit)
-ML_1 (gtk_editable_paste_clipboard, GtkEditable_val, Unit)
-ML_3 (gtk_editable_claim_selection, GtkEditable_val, Bool_val, Int_val, Unit)
-ML_1 (gtk_editable_delete_selection, GtkEditable_val, Unit)
-ML_1 (gtk_editable_changed, GtkEditable_val, Unit)
-ML_2 (gtk_editable_set_position, GtkEditable_val, Int_val, Unit)
-ML_1 (gtk_editable_get_position, GtkEditable_val, Val_int)
-ML_2 (gtk_editable_set_editable, GtkEditable_val, Bool_val, Unit)
-Make_Extractor (gtk_editable, GtkEditable_val, selection_start_pos, Val_int)
-Make_Extractor (gtk_editable, GtkEditable_val, selection_end_pos, Val_int)
-Make_Extractor (gtk_editable, GtkEditable_val, has_selection, Val_bool)
-
-/* gtkentry.h */
-
-#define GtkEntry_val(val) check_cast(GTK_ENTRY,val)
-ML_0 (gtk_entry_new, Val_GtkWidget_sink)
-ML_1 (gtk_entry_new_with_max_length, (gint16)Long_val, Val_GtkWidget_sink)
-ML_2 (gtk_entry_set_text, GtkEntry_val, String_val, Unit)
-ML_2 (gtk_entry_append_text, GtkEntry_val, String_val, Unit)
-ML_2 (gtk_entry_prepend_text, GtkEntry_val, String_val, Unit)
-ML_1 (gtk_entry_get_text, GtkEntry_val, Val_string)
-ML_3 (gtk_entry_select_region, GtkEntry_val, Int_val, Int_val, Unit)
-ML_2 (gtk_entry_set_visibility, GtkEntry_val, Bool_val, Unit)
-ML_2 (gtk_entry_set_max_length, GtkEntry_val, (gint16)Long_val, Unit)
-Make_Extractor (GtkEntry, GtkEntry_val, text_length, Val_int)
-
-/* gtkspinbutton.h */
-
-#define GtkSpinButton_val(val) check_cast(GTK_SPIN_BUTTON,val)
-ML_3 (gtk_spin_button_new, GtkAdjustment_val,
-      Float_val, Int_val, Val_GtkWidget_sink)
-ML_2 (gtk_spin_button_set_adjustment, GtkSpinButton_val, GtkAdjustment_val,
-      Unit)
-ML_1 (gtk_spin_button_get_adjustment, GtkSpinButton_val, Val_GtkAny)
-ML_2 (gtk_spin_button_set_digits, GtkSpinButton_val, Int_val, Unit)
-ML_1 (gtk_spin_button_get_value_as_float, GtkSpinButton_val, copy_double)
-ML_2 (gtk_spin_button_set_value, GtkSpinButton_val, Float_val, Unit)
-ML_2 (gtk_spin_button_set_update_policy, GtkSpinButton_val,
-      Update_type_val, Unit)
-ML_2 (gtk_spin_button_set_numeric, GtkSpinButton_val, Bool_val, Unit)
-ML_2 (gtk_spin_button_spin, GtkSpinButton_val,
-      Insert (Is_long(arg2) ? Spin_type_val(arg2) : GTK_SPIN_USER_DEFINED)
-      (Is_long(arg2) ? 0.0 : Float_val(Field(arg2,1))) Ignore, Unit)
-ML_2 (gtk_spin_button_set_wrap, GtkSpinButton_val, Bool_val, Unit)
-ML_2 (gtk_spin_button_set_shadow_type, GtkSpinButton_val, Shadow_type_val, Unit)
-ML_2 (gtk_spin_button_set_snap_to_ticks, GtkSpinButton_val, Bool_val, Unit)
-ML_4 (gtk_spin_button_configure, GtkSpinButton_val, GtkAdjustment_val,
-      Float_val, Int_val, Unit)
-ML_1 (gtk_spin_button_update, GtkSpinButton_val, Unit)
-
-/* gtktext.h */
-
-#define GtkText_val(val) check_cast(GTK_TEXT,val)
-ML_2 (gtk_text_new, GtkAdjustment_val, GtkAdjustment_val, Val_GtkWidget_sink)
-ML_2 (gtk_text_set_word_wrap, GtkText_val, Bool_val, Unit)
-ML_2 (gtk_text_set_line_wrap, GtkText_val, Bool_val, Unit)
-ML_3 (gtk_text_set_adjustments, GtkText_val,
-      Option_val(arg2,GtkAdjustment_val,GtkText_val(arg1)->hadj) Ignore,
-      Option_val(arg3,GtkAdjustment_val,GtkText_val(arg1)->vadj) Ignore,
-      Unit)
-Make_Extractor (gtk_text_get, GtkText_val, hadj, Val_GtkWidget)
-Make_Extractor (gtk_text_get, GtkText_val, vadj, Val_GtkWidget)
-ML_2 (gtk_text_set_point, GtkText_val, Int_val, Unit)
-ML_1 (gtk_text_get_point, GtkText_val, Val_int)
-ML_1 (gtk_text_get_length, GtkText_val, Val_int)
-ML_1 (gtk_text_freeze, GtkText_val, Unit)
-ML_1 (gtk_text_thaw, GtkText_val, Unit)
-value ml_gtk_text_insert (value text, value font, value fore, value back,
-                         value str)
-{
-    gtk_text_insert (GtkText_val(text),
-                    Option_val(font,GdkFont_val,NULL),
-                    Option_val(fore,GdkColor_val,NULL),
-                    Option_val(back,GdkColor_val,NULL),
-                    String_val(str), string_length(str));
-    return Val_unit;
-}
-ML_2 (gtk_text_forward_delete, GtkText_val, Int_val, Val_int)
-ML_2 (gtk_text_backward_delete, GtkText_val, Int_val, Val_int)
-
-/* gtkcombo.h */
-
-#define GtkCombo_val(val) check_cast(GTK_COMBO,val)
-ML_0 (gtk_combo_new, Val_GtkWidget_sink)
-ML_3 (gtk_combo_set_value_in_list, GtkCombo_val,
-      Option_val(arg2, Bool_val, GtkCombo_val(arg1)->value_in_list) Ignore,
-      Option_val(arg3, Bool_val, GtkCombo_val(arg1)->ok_if_empty) Ignore,
-      Unit)
-ML_2 (gtk_combo_set_use_arrows, GtkCombo_val, Bool_val, Unit)
-ML_2 (gtk_combo_set_use_arrows_always, GtkCombo_val, Bool_val, Unit)
-ML_2 (gtk_combo_set_case_sensitive, GtkCombo_val, Bool_val, Unit)
-ML_3 (gtk_combo_set_item_string, GtkCombo_val, GtkItem_val, String_val, Unit)
-ML_1 (gtk_combo_disable_activate, GtkCombo_val, Unit)
-Make_Extractor (gtk_combo, GtkCombo_val, entry, Val_GtkWidget)
-Make_Extractor (gtk_combo, GtkCombo_val, list, Val_GtkWidget)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkgl.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkgl.c
deleted file mode 100644 (file)
index 5e0efd7..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* $Id$ */
-
-#include <gtk/gtk.h>
-#include <gtkgl/gtkglarea.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtkgl_tags.h"
-
-/* Conversion functions */
-#include "gtkgl_tags.c"
-
-#define GtkGLArea_val(val) ((GtkGLArea*)GtkObject_val(val))
-
-value ml_gtk_gl_area_new (value list, value share)
-{
-    value cursor, res;
-    int len, i;
-    int *attrs;
-
-    for (len = 0, cursor = list; cursor != Val_unit; cursor = Field(cursor,1))
-    {
-       if (Is_block(Field(cursor,0))) len += 2;
-       else len++;
-    }
-
-    attrs = (int*) stat_alloc ((len+1)*sizeof(int));
-    
-    for (i = 0, cursor = list; cursor != Val_unit; cursor = Field(cursor,1))
-    {
-       value option = Field(cursor,0);
-       if (Is_block(option)) {
-           attrs[i++] = Visual_options_val(Field(option,0));
-           attrs[i++] = Int_val(Field(option,1));
-       }
-       else attrs[i++] = Visual_options_val(option);
-    }
-    attrs[i] = GDK_GL_NONE;
-
-    res = Val_GtkObject
-       ((GtkObject*)gtk_gl_area_share_new(attrs,GtkGLArea_val(share)));
-    stat_free(attrs);
-    return res;
-}
-
-ML_1 (gtk_gl_area_make_current, GtkGLArea_val, Val_bool)
-ML_1 (gtk_gl_area_swapbuffers, GtkGLArea_val, Unit)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtklist.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtklist.c
deleted file mode 100644 (file)
index d651ca3..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtk_tags.h"
-
-static Make_Flags_val (Button_action_val)
-
-/* gtklistitem.h */
-
-ML_0 (gtk_list_item_new, Val_GtkWidget_sink)
-ML_1 (gtk_list_item_new_with_label, String_val, Val_GtkWidget_sink)
-
-/* gtklist.h */
-
-#define GtkList_val(val) check_cast(GTK_LIST,val)
-ML_0 (gtk_list_new, Val_GtkWidget_sink)
-value ml_gtk_list_insert_item (value list, value item, value pos)
-{
-    GList *tmp_list = g_list_alloc ();
-    tmp_list->data = GtkWidget_val(item);
-    tmp_list->next = NULL;
-    tmp_list->prev = NULL;
-    gtk_list_insert_items (GtkList_val(list), tmp_list, Int_val(pos));
-    return Val_unit;
-}
-ML_3 (gtk_list_clear_items, GtkList_val, Int_val, Int_val, Unit)
-ML_2 (gtk_list_select_item, GtkList_val, Int_val, Unit)
-ML_2 (gtk_list_unselect_item, GtkList_val, Int_val, Unit)
-ML_2 (gtk_list_select_child, GtkList_val, GtkWidget_val, Unit)
-ML_2 (gtk_list_unselect_child, GtkList_val, GtkWidget_val, Unit)
-ML_2 (gtk_list_child_position, GtkList_val, GtkWidget_val, Val_int)
-ML_2 (gtk_list_set_selection_mode, GtkList_val, Selection_mode_val, Unit)
-
-/* gtkclist.h */
-
-#define GtkCList_val(val) check_cast(GTK_CLIST,val)
-ML_1 (gtk_clist_new, Int_val, Val_GtkWidget_sink)
-ML_1 (gtk_clist_new_with_titles, Insert(Wosize_val(arg1)) (char **),
-      Val_GtkWidget_sink)
-Make_Extractor (gtk_clist_get, GtkCList_val, rows, Val_int)
-Make_Extractor (gtk_clist_get, GtkCList_val, columns, Val_int)
-Make_Extractor (gtk_clist_get, GtkCList_val, focus_row, Val_int)
-ML_2 (gtk_clist_set_hadjustment, GtkCList_val, GtkAdjustment_val, Unit)
-ML_2 (gtk_clist_set_vadjustment, GtkCList_val, GtkAdjustment_val, Unit)
-ML_1 (gtk_clist_get_hadjustment, GtkCList_val, Val_GtkAny)
-ML_1 (gtk_clist_get_vadjustment, GtkCList_val, Val_GtkAny)
-ML_2 (gtk_clist_set_shadow_type, GtkCList_val, Shadow_type_val, Unit)
-ML_2 (gtk_clist_set_selection_mode, GtkCList_val, Selection_mode_val, Unit)
-ML_2 (gtk_clist_set_reorderable, GtkCList_val, Bool_val, Unit)
-ML_2 (gtk_clist_set_use_drag_icons, GtkCList_val, Bool_val, Unit)
-ML_3 (gtk_clist_set_button_actions, GtkCList_val, Int_val,
-      (guint8)Flags_Button_action_val, Unit)
-ML_1 (gtk_clist_freeze, GtkCList_val, Unit)
-ML_1 (gtk_clist_thaw, GtkCList_val, Unit)
-ML_1 (gtk_clist_column_titles_show, GtkCList_val, Unit)
-ML_1 (gtk_clist_column_titles_hide, GtkCList_val, Unit)
-ML_2 (gtk_clist_column_title_active, GtkCList_val, Int_val, Unit)
-ML_2 (gtk_clist_column_title_passive, GtkCList_val, Int_val, Unit)
-ML_1 (gtk_clist_column_titles_active, GtkCList_val, Unit)
-ML_1 (gtk_clist_column_titles_passive, GtkCList_val, Unit)
-ML_3 (gtk_clist_set_column_title, GtkCList_val, Int_val, String_val, Unit)
-ML_2 (gtk_clist_get_column_title, GtkCList_val, Int_val, Val_string)
-ML_3 (gtk_clist_set_column_widget, GtkCList_val, Int_val, GtkWidget_val, Unit)
-ML_2 (gtk_clist_get_column_widget, GtkCList_val, Int_val, Val_GtkWidget)
-ML_3 (gtk_clist_set_column_justification, GtkCList_val, Int_val,
-      Justification_val, Unit)
-ML_3 (gtk_clist_set_column_visibility, GtkCList_val, Int_val, Bool_val, Unit)
-ML_3 (gtk_clist_set_column_resizeable, GtkCList_val, Int_val, Bool_val, Unit)
-ML_3 (gtk_clist_set_column_auto_resize, GtkCList_val, Int_val, Bool_val, Unit)
-ML_1 (gtk_clist_columns_autosize, GtkCList_val, Unit)
-ML_2 (gtk_clist_optimal_column_width, GtkCList_val, Int_val, Val_int)
-ML_3 (gtk_clist_set_column_width, GtkCList_val, Int_val, Int_val, Unit)
-ML_3 (gtk_clist_set_column_min_width, GtkCList_val, Int_val, Int_val, Unit)
-ML_3 (gtk_clist_set_column_max_width, GtkCList_val, Int_val, Int_val, Unit)
-ML_2 (gtk_clist_set_row_height, GtkCList_val, Int_val, Unit)
-ML_5 (gtk_clist_moveto, GtkCList_val, Int_val, Int_val,
-      Double_val, Double_val, Unit)
-ML_2 (gtk_clist_row_is_visible, GtkCList_val, Int_val, Val_visibility)
-ML_3 (gtk_clist_get_cell_type, GtkCList_val, Int_val, Int_val, Val_cell_type)
-ML_4 (gtk_clist_set_text, GtkCList_val, Int_val, Int_val, Optstring_val, Unit)
-value ml_gtk_clist_get_text (value clist, value row, value column)
-{
-    char *text;
-    if (!gtk_clist_get_text (GtkCList_val(clist), Int_val(row),
-                            Int_val(column), &text))
-       invalid_argument ("Gtk.Clist.get_text");
-    return Val_optstring(text);
-}
-ML_5 (gtk_clist_set_pixmap, GtkCList_val, Int_val, Int_val, GdkPixmap_val,
-      GdkBitmap_val, Unit)
-value ml_gtk_clist_get_pixmap (value clist, value row, value column)
-{
-    CAMLparam0 ();
-    GdkPixmap *pixmap;
-    GdkBitmap *bitmap;
-    CAMLlocal2 (vpixmap,vbitmap);
-    value ret;
-
-    if (!gtk_clist_get_pixmap (GtkCList_val(clist), Int_val(row),
-                              Int_val(column), &pixmap, &bitmap))
-       invalid_argument ("Gtk.Clist.get_pixmap");
-    vpixmap = Val_option (pixmap, Val_GdkPixmap);
-    vbitmap = Val_option (bitmap, Val_GdkBitmap);
-
-    ret = alloc_small (2,0);
-    Field(ret,0) = vpixmap;
-    Field(ret,1) = vbitmap;
-    CAMLreturn(ret);
-}
-ML_7 (gtk_clist_set_pixtext, GtkCList_val, Int_val, Int_val, String_val,
-      (guint8)Long_val, GdkPixmap_val, GdkBitmap_val, Unit)
-ML_bc7 (ml_gtk_clist_set_pixtext)
-ML_3 (gtk_clist_set_foreground, GtkCList_val, Int_val, GdkColor_val, Unit)
-ML_3 (gtk_clist_set_background, GtkCList_val, Int_val, GdkColor_val, Unit)
-ML_3 (gtk_clist_get_cell_style, GtkCList_val, Int_val, Int_val, Val_GtkStyle)
-ML_4 (gtk_clist_set_cell_style, GtkCList_val, Int_val, Int_val, GtkStyle_val,
-      Unit)
-ML_2 (gtk_clist_get_row_style, GtkCList_val, Int_val, Val_GtkStyle)
-ML_3 (gtk_clist_set_row_style, GtkCList_val, Int_val, GtkStyle_val, Unit)
-ML_3 (gtk_clist_set_selectable, GtkCList_val, Int_val, Bool_val, Unit)
-ML_2 (gtk_clist_get_selectable, GtkCList_val, Int_val, Val_bool)
-ML_5 (gtk_clist_set_shift, GtkCList_val, Int_val, Int_val, Int_val, Int_val,
-      Unit)
-/* ML_2 (gtk_clist_append, GtkCList_val, (char **), Val_int) */
-ML_3 (gtk_clist_insert, GtkCList_val, Int_val, (char **), Val_int)
-ML_2 (gtk_clist_remove, GtkCList_val, Int_val, Unit)
-value ml_gtk_clist_set_row_data (value w, value row, value data)
-{
-     value *data_p = ml_global_root_new (data);
-     gtk_clist_set_row_data_full (GtkCList_val(w), Int_val(row),
-                                 data_p, ml_global_root_destroy);
-     return Val_unit;
-}
-ML_2 (gtk_clist_get_row_data, GtkCList_val, Int_val, *(value*)Check_null)
-ML_3 (gtk_clist_select_row, GtkCList_val, Int_val, Int_val, Unit)
-ML_3 (gtk_clist_unselect_row, GtkCList_val, Int_val, Int_val, Unit)
-ML_1 (gtk_clist_clear, GtkCList_val, Unit)
-value ml_gtk_clist_get_selection_info (value clist, value x, value y)
-{
-    int row, column;
-    value ret;
-    if (!gtk_clist_get_selection_info (GtkCList_val(clist), Int_val(x),
-                            Int_val(y), &row, &column))
-       invalid_argument ("Gtk.Clist.get_selection_info");
-    ret = alloc_small (2,0);
-    Field(ret,0) = row;
-    Field(ret,1) = column;
-    return ret;
-}
-ML_1 (gtk_clist_select_all, GtkCList_val, Unit)
-ML_1 (gtk_clist_unselect_all, GtkCList_val, Unit)
-ML_3 (gtk_clist_swap_rows, GtkCList_val, Int_val, Int_val, Unit)
-ML_3 (gtk_clist_row_move, GtkCList_val, Int_val, Int_val, Unit)
-ML_2 (gtk_clist_set_sort_column, GtkCList_val, Int_val, Unit)
-ML_2 (gtk_clist_set_sort_type, GtkCList_val, Sort_type_val, Unit)
-ML_1 (gtk_clist_sort, GtkCList_val, Unit)
-ML_2 (gtk_clist_set_auto_sort, GtkCList_val, Bool_val, Unit)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmenu.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmenu.c
deleted file mode 100644 (file)
index 355b9fe..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtk_tags.h"
-
-/* gtkmenuitem.h */
-
-#define GtkMenuItem_val(val) check_cast(GTK_MENU_ITEM,val)
-ML_0 (gtk_menu_item_new, Val_GtkWidget_sink)
-ML_0 (gtk_tearoff_menu_item_new, Val_GtkWidget_sink)
-ML_1 (gtk_menu_item_new_with_label, String_val, Val_GtkWidget_sink)
-ML_2 (gtk_menu_item_set_submenu, GtkMenuItem_val, GtkWidget_val, Unit)
-ML_1 (gtk_menu_item_remove_submenu, GtkMenuItem_val, Unit)
-ML_2 (gtk_menu_item_set_placement, GtkMenuItem_val,
-      Submenu_placement_val, Unit)
-ML_3 (gtk_menu_item_configure, GtkMenuItem_val, Bool_val, Bool_val, Unit)
-ML_1 (gtk_menu_item_activate, GtkMenuItem_val, Unit)
-ML_1 (gtk_menu_item_right_justify, GtkMenuItem_val, Unit)
-
-/* gtkcheckmenuitem.h */
-
-#define GtkCheckMenuItem_val(val) check_cast(GTK_CHECK_MENU_ITEM,val)
-ML_0 (gtk_check_menu_item_new, Val_GtkWidget_sink)
-ML_1 (gtk_check_menu_item_new_with_label, String_val, Val_GtkWidget_sink)
-ML_2 (gtk_check_menu_item_set_active, GtkCheckMenuItem_val, Bool_val, Unit)
-ML_2 (gtk_check_menu_item_set_show_toggle, GtkCheckMenuItem_val,
-      Bool_val, Unit)
-ML_1 (gtk_check_menu_item_toggled, GtkCheckMenuItem_val, Unit)
-Make_Extractor (gtk_check_menu_item_get, GtkCheckMenuItem_val,
-               active, Val_bool)
-
-/* gtkradiomenuitem.h */
-
-#define GtkRadioMenuItem_val(val) check_cast(GTK_RADIO_MENU_ITEM,val)
-static GSList* item_group_val(value val)
-{
-    return (val == Val_unit ? NULL :
-            gtk_radio_menu_item_group(GtkRadioMenuItem_val(Field(val,0))));
-}
-ML_1 (gtk_radio_menu_item_new, item_group_val, Val_GtkWidget_sink)
-ML_2 (gtk_radio_menu_item_new_with_label, item_group_val,
-      String_val, Val_GtkWidget_sink)
-ML_2 (gtk_radio_menu_item_set_group, GtkRadioMenuItem_val,
-      item_group_val, Unit)
-
-/* gtkoptionmenu.h */
-
-#define GtkOptionMenu_val(val) check_cast(GTK_OPTION_MENU,val)
-ML_0 (gtk_option_menu_new, Val_GtkWidget_sink)
-ML_1 (gtk_option_menu_get_menu, GtkOptionMenu_val, Val_GtkWidget_sink)
-ML_2 (gtk_option_menu_set_menu, GtkOptionMenu_val, GtkWidget_val, Unit)
-ML_1 (gtk_option_menu_remove_menu, GtkOptionMenu_val, Unit)
-ML_2 (gtk_option_menu_set_history, GtkOptionMenu_val, Int_val, Unit)
-
-/* gtkmenushell.h */
-
-#define GtkMenuShell_val(val) check_cast(GTK_MENU_SHELL,val)
-ML_2 (gtk_menu_shell_append, GtkMenuShell_val, GtkWidget_val, Unit)
-ML_2 (gtk_menu_shell_prepend, GtkMenuShell_val, GtkWidget_val, Unit)
-ML_3 (gtk_menu_shell_insert, GtkMenuShell_val, GtkWidget_val, Int_val, Unit)
-ML_1 (gtk_menu_shell_deactivate, GtkMenuShell_val, Unit)
-
-/* gtkmenu.h */
-
-#define GtkMenu_val(val) check_cast(GTK_MENU,val)
-ML_0 (gtk_menu_new, Val_GtkWidget_sink)
-ML_5 (gtk_menu_popup, GtkMenu_val, GtkWidget_val, GtkWidget_val,
-      Insert(NULL) Insert(NULL) Int_val, Int_val, Unit)
-ML_1 (gtk_menu_popdown, GtkMenu_val, Unit)
-ML_1 (gtk_menu_get_active, GtkMenu_val, Val_GtkWidget)
-ML_2 (gtk_menu_set_active, GtkMenu_val, Int_val, Unit)
-ML_2 (gtk_menu_set_accel_group, GtkMenu_val, GtkAccelGroup_val, Unit)
-ML_1 (gtk_menu_get_accel_group, GtkMenu_val, Val_GtkAccelGroup)
-ML_1 (gtk_menu_ensure_uline_accel_group, GtkMenu_val, Val_GtkAccelGroup)
-value ml_gtk_menu_attach_to_widget (value menu, value widget)
-{
-    gtk_menu_attach_to_widget (GtkMenu_val(menu), GtkWidget_val(widget), NULL);
-    return Val_unit;
-}
-ML_1 (gtk_menu_get_attach_widget, GtkMenu_val, Val_GtkWidget)
-ML_1 (gtk_menu_detach, GtkMenu_val, Unit)
-
-/* gtkmenubar.h */
-
-#define GtkMenuBar_val(val) check_cast(GTK_MENU_BAR,val)
-ML_0 (gtk_menu_bar_new, Val_GtkWidget_sink)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmisc.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkmisc.c
deleted file mode 100644 (file)
index f69f343..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtk_tags.h"
-
-/* gtkgamma.h */
-
-#define GtkGammaCurve_val(val) check_cast(GTK_GAMMA_CURVE,val)
-ML_0 (gtk_gamma_curve_new, Val_GtkWidget_sink)
-Make_Extractor (gtk_gamma_curve_get, GtkGammaCurve_val, gamma, copy_double)
-
-/* gtkstatusbar.h */
-
-#define GtkStatusbar_val(val) check_cast(GTK_STATUSBAR,val)
-ML_0 (gtk_statusbar_new, Val_GtkWidget_sink)
-ML_2 (gtk_statusbar_get_context_id, GtkStatusbar_val, String_val, Val_int)
-ML_3 (gtk_statusbar_push, GtkStatusbar_val, Int_val, String_val, Val_int)
-ML_2 (gtk_statusbar_pop, GtkStatusbar_val, Int_val, Unit)
-ML_3 (gtk_statusbar_remove, GtkStatusbar_val, Int_val, Int_val, Unit)
-
-/* gtkcalendar.h */
-
-#define GtkCalendar_val(val) check_cast(GTK_CALENDAR,val)
-ML_0 (gtk_calendar_new, Val_GtkWidget_sink)
-ML_3 (gtk_calendar_select_month, GtkCalendar_val, Int_val, Int_val, Unit)
-ML_2 (gtk_calendar_select_day, GtkCalendar_val, Int_val, Unit)
-ML_2 (gtk_calendar_mark_day, GtkCalendar_val, Int_val, Unit)
-ML_2 (gtk_calendar_unmark_day, GtkCalendar_val, Int_val, Unit)
-ML_1 (gtk_calendar_clear_marks, GtkCalendar_val, Unit)
-Make_Flags_val (Calendar_display_options_val)
-ML_2 (gtk_calendar_display_options, GtkCalendar_val,
-      Flags_Calendar_display_options_val, Unit)
-value ml_gtk_calendar_get_date (value w)
-{
-    guint year, month, day;
-    value ret;
-
-    gtk_calendar_get_date (GtkCalendar_val(w), &year, &month, &day);
-    ret = alloc_small (3, 0);
-    Field(ret,0) = Val_int(year);
-    Field(ret,1) = Val_int(month);
-    Field(ret,2) = Val_int(day);
-    return ret;
-}
-ML_1 (gtk_calendar_freeze, GtkCalendar_val, Unit)
-ML_1 (gtk_calendar_thaw, GtkCalendar_val, Unit)
-
-/* gtkdrawingarea.h */
-
-#define GtkDrawingArea_val(val) check_cast(GTK_DRAWING_AREA,val)
-ML_0 (gtk_drawing_area_new, Val_GtkWidget_sink)
-ML_3 (gtk_drawing_area_size, GtkDrawingArea_val, Int_val, Int_val, Unit)
-
-/* gtkmisc.h */
-
-#define GtkMisc_val(val) check_cast(GTK_MISC,val)
-ML_3 (gtk_misc_set_alignment, GtkMisc_val, Double_val, Double_val, Unit)
-ML_3 (gtk_misc_set_padding, GtkMisc_val, Int_val, Int_val, Unit)
-Make_Extractor (gtk_misc_get, GtkMisc_val, xalign, copy_double)
-Make_Extractor (gtk_misc_get, GtkMisc_val, yalign, copy_double)
-Make_Extractor (gtk_misc_get, GtkMisc_val, xpad, Val_int)
-Make_Extractor (gtk_misc_get, GtkMisc_val, ypad, Val_int)
-
-/* gtkarrow.h */
-
-#define GtkArrow_val(val) check_cast(GTK_ARROW,val)
-ML_2 (gtk_arrow_new, Arrow_type_val, Shadow_type_val, Val_GtkWidget_sink)
-ML_3 (gtk_arrow_set, GtkArrow_val, Arrow_type_val, Shadow_type_val, Unit)
-
-/* gtkimage.h */
-
-#define GtkImage_val(val) check_cast(GTK_IMAGE,val)
-ML_2 (gtk_image_new, GdkImage_val,
-      Option_val (arg2, GdkBitmap_val, NULL) Ignore, Val_GtkWidget_sink)
-ML_3 (gtk_image_set, GtkImage_val, GdkImage_val,
-      Option_val (arg2, GdkBitmap_val, NULL) Ignore, Unit)
-
-/* gtklabel.h */
-
-#define GtkLabel_val(val) check_cast(GTK_LABEL,val)
-ML_1 (gtk_label_new, String_val, Val_GtkWidget_sink)
-ML_2 (gtk_label_set_text, GtkLabel_val, String_val, Unit)
-ML_2 (gtk_label_set_pattern, GtkLabel_val, String_val, Unit)
-ML_2 (gtk_label_set_justify, GtkLabel_val, Justification_val, Unit)
-ML_2 (gtk_label_set_line_wrap, GtkLabel_val, Bool_val, Unit)
-Make_Extractor (gtk_label_get, GtkLabel_val, label, Val_string)
-
-/* gtktipsquery.h */
-
-#define GtkTipsQuery_val(val) check_cast(GTK_TIPS_QUERY,val)
-ML_0 (gtk_tips_query_new, Val_GtkWidget_sink)
-ML_1 (gtk_tips_query_start_query, GtkTipsQuery_val, Unit)
-ML_1 (gtk_tips_query_stop_query, GtkTipsQuery_val, Unit)
-ML_2 (gtk_tips_query_set_caller, GtkTipsQuery_val, GtkWidget_val, Unit)
-ML_3 (gtk_tips_query_set_labels, GtkTipsQuery_val,
-      String_val, String_val, Unit)
-value ml_gtk_tips_query_set_emit_always (value w, value arg)
-{
-    GtkTipsQuery_val(w)->emit_always = Bool_val(arg);
-    return Val_unit;
-}
-Make_Extractor (gtk_tips_query_get, GtkTipsQuery_val, emit_always, Val_bool)
-Make_Extractor (gtk_tips_query_get, GtkTipsQuery_val, caller, Val_GtkWidget)
-Make_Extractor (gtk_tips_query_get, GtkTipsQuery_val, label_inactive,
-               Val_string)
-Make_Extractor (gtk_tips_query_get, GtkTipsQuery_val, label_no_tip,
-               Val_string)
-
-/* gtkpixmap.h */
-
-#define GtkPixmap_val(val) check_cast(GTK_PIXMAP,val)
-ML_2 (gtk_pixmap_new, GdkPixmap_val,
-      Option_val (arg2, GdkBitmap_val, NULL) Ignore,
-      Val_GtkWidget_sink)
-value ml_gtk_pixmap_set (value val, value pixmap, value mask)
-{
-    GtkPixmap *w = GtkPixmap_val(val);
-    gtk_pixmap_set (w, Option_val(pixmap,GdkPixmap_val,w->pixmap),
-                   Option_val(mask,GdkBitmap_val,w->mask));
-    return Val_unit;
-}
-Make_Extractor (GtkPixmap, GtkPixmap_val, pixmap, Val_GdkPixmap)
-Make_Extractor (GtkPixmap, GtkPixmap_val, mask, Val_GdkBitmap)
-
-/* gtk[hv]separator.h */
-
-ML_0 (gtk_hseparator_new, Val_GtkWidget_sink)
-ML_0 (gtk_vseparator_new, Val_GtkWidget_sink)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtknew.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtknew.c
deleted file mode 100644 (file)
index a75c1fb..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/* $Id$ */
-
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-
-static value ml_class_init=0;
-
-static void class_init (value class)
-{
-  callback(ml_class_init, class);
-}
-
-
-value set_ml_class_init (value class_func)
-{
-  if (!ml_class_init) register_global_root (&ml_class_init);
-  ml_class_init = class_func;
-  return Val_unit;
-}
-
-value ml_gtk_type_new (value type)
-{
-  return Val_GtkWidget_sink(gtk_type_new(Int_val(type)));
-}
-
-
-struct widget_info {
-  guint size;
-  guint class_size;
-  guint (*get_type_func)(void);
-}
-widget_info_array[] = {
-  { sizeof(GtkObject), sizeof(GtkObjectClass), gtk_object_get_type },
-  { sizeof(GtkWidget), sizeof(GtkWidgetClass), gtk_widget_get_type },
-  { sizeof(GtkMisc), sizeof(GtkMiscClass), gtk_misc_get_type },
-  { sizeof(GtkLabel), sizeof(GtkLabelClass), gtk_label_get_type },
-  { sizeof(GtkAccelLabel), sizeof(GtkAccelLabelClass), gtk_accel_label_get_type },
-  { sizeof(GtkTipsQuery), sizeof(GtkTipsQueryClass), gtk_tips_query_get_type },
-  { sizeof(GtkArrow), sizeof(GtkArrowClass), gtk_arrow_get_type },
-  { sizeof(GtkImage), sizeof(GtkImageClass), gtk_image_get_type },
-  { sizeof(GtkPixmap), sizeof(GtkPixmapClass), gtk_pixmap_get_type },
-  { sizeof(GtkContainer), sizeof(GtkContainerClass), gtk_container_get_type },
-  { sizeof(GtkBin), sizeof(GtkBinClass), gtk_bin_get_type },
-  { sizeof(GtkAlignment), sizeof(GtkAlignmentClass), gtk_alignment_get_type },
-  { sizeof(GtkFrame), sizeof(GtkFrameClass), gtk_frame_get_type },
-  { sizeof(GtkAspectFrame), sizeof(GtkAspectFrameClass), gtk_aspect_frame_get_type },
-  { sizeof(GtkButton), sizeof(GtkButtonClass), gtk_button_get_type },
-  { sizeof(GtkToggleButton), sizeof(GtkToggleButtonClass), gtk_toggle_button_get_type },
-  { sizeof(GtkCheckButton), sizeof(GtkCheckButtonClass), gtk_check_button_get_type },
-  { sizeof(GtkRadioButton), sizeof(GtkRadioButtonClass), gtk_radio_button_get_type },
-  { sizeof(GtkOptionMenu), sizeof(GtkOptionMenuClass), gtk_option_menu_get_type },
-  { sizeof(GtkItem), sizeof(GtkItemClass), gtk_item_get_type },
-  { sizeof(GtkMenuItem), sizeof(GtkMenuItemClass), gtk_menu_item_get_type },
-  { sizeof(GtkCheckMenuItem), sizeof(GtkCheckMenuItemClass), gtk_check_menu_item_get_type },
-  { sizeof(GtkRadioMenuItem), sizeof(GtkRadioMenuItemClass), gtk_radio_menu_item_get_type },
-  { sizeof(GtkTearoffMenuItem), sizeof(GtkTearoffMenuItemClass), gtk_tearoff_menu_item_get_type },
-  { sizeof(GtkListItem), sizeof(GtkListItemClass), gtk_list_item_get_type },
-  { sizeof(GtkTreeItem), sizeof(GtkTreeItemClass), gtk_tree_item_get_type },
-  { sizeof(GtkWindow), sizeof(GtkWindowClass), gtk_window_get_type },
-  { sizeof(GtkColorSelectionDialog), sizeof(GtkColorSelectionDialogClass), gtk_color_selection_dialog_get_type },
-  { sizeof(GtkDialog), sizeof(GtkDialogClass), gtk_dialog_get_type },
-  { sizeof(GtkInputDialog), sizeof(GtkInputDialogClass), gtk_input_dialog_get_type },
-  { sizeof(GtkFileSelection), sizeof(GtkFileSelectionClass), gtk_file_selection_get_type },
-  { sizeof(GtkFontSelectionDialog), sizeof(GtkFontSelectionDialogClass), gtk_font_selection_dialog_get_type },
-  { sizeof(GtkPlug), sizeof(GtkPlugClass), gtk_plug_get_type },
-  { sizeof(GtkEventBox), sizeof(GtkEventBoxClass), gtk_event_box_get_type },
-  { sizeof(GtkHandleBox), sizeof(GtkHandleBoxClass), gtk_handle_box_get_type },
-  { sizeof(GtkScrolledWindow), sizeof(GtkScrolledWindowClass), gtk_scrolled_window_get_type },
-  { sizeof(GtkViewport), sizeof(GtkViewportClass), gtk_viewport_get_type },
-  { sizeof(GtkBox), sizeof(GtkBoxClass), gtk_box_get_type },
-  { sizeof(GtkButtonBox), sizeof(GtkButtonBoxClass), gtk_button_box_get_type },
-  { sizeof(GtkHButtonBox), sizeof(GtkHButtonBoxClass), gtk_hbutton_box_get_type },
-  { sizeof(GtkVButtonBox), sizeof(GtkVButtonBoxClass), gtk_vbutton_box_get_type },
-  { sizeof(GtkVBox), sizeof(GtkVBoxClass), gtk_vbox_get_type },
-  { sizeof(GtkColorSelection), sizeof(GtkColorSelectionClass), gtk_color_selection_get_type },
-  { sizeof(GtkGammaCurve), sizeof(GtkGammaCurveClass), gtk_gamma_curve_get_type },
-  { sizeof(GtkHBox), sizeof(GtkHBoxClass), gtk_hbox_get_type },
-  { sizeof(GtkCombo), sizeof(GtkComboClass), gtk_combo_get_type },
-  { sizeof(GtkStatusbar), sizeof(GtkStatusbarClass), gtk_statusbar_get_type },
-  { sizeof(GtkCList), sizeof(GtkCListClass), gtk_clist_get_type },
-  { sizeof(GtkCTree), sizeof(GtkCTreeClass), gtk_ctree_get_type },
-  { sizeof(GtkFixed), sizeof(GtkFixedClass), gtk_fixed_get_type },
-  { sizeof(GtkNotebook), sizeof(GtkNotebookClass), gtk_notebook_get_type },
-  { sizeof(GtkFontSelection), sizeof(GtkFontSelectionClass), gtk_font_selection_get_type },
-  { sizeof(GtkPaned), sizeof(GtkPanedClass), gtk_paned_get_type },
-  { sizeof(GtkHPaned), sizeof(GtkHPanedClass), gtk_hpaned_get_type },
-  { sizeof(GtkVPaned), sizeof(GtkVPanedClass), gtk_vpaned_get_type },
-  { sizeof(GtkLayout), sizeof(GtkLayoutClass), gtk_layout_get_type },
-  { sizeof(GtkList), sizeof(GtkListClass), gtk_list_get_type },
-  { sizeof(GtkMenuShell), sizeof(GtkMenuShellClass), gtk_menu_shell_get_type },
-  { sizeof(GtkMenuBar), sizeof(GtkMenuBarClass), gtk_menu_bar_get_type },
-  { sizeof(GtkMenu), sizeof(GtkMenuClass), gtk_menu_get_type },
-  { sizeof(GtkPacker), sizeof(GtkPackerClass), gtk_packer_get_type },
-  { sizeof(GtkSocket), sizeof(GtkSocketClass), gtk_socket_get_type },
-  { sizeof(GtkTable), sizeof(GtkTableClass), gtk_table_get_type },
-  { sizeof(GtkToolbar), sizeof(GtkToolbarClass), gtk_toolbar_get_type },
-  { sizeof(GtkTree), sizeof(GtkTreeClass), gtk_tree_get_type },
-  { sizeof(GtkCalendar), sizeof(GtkCalendarClass), gtk_calendar_get_type },
-  { sizeof(GtkDrawingArea), sizeof(GtkDrawingAreaClass), gtk_drawing_area_get_type },
-  { sizeof(GtkCurve), sizeof(GtkCurveClass), gtk_curve_get_type },
-  { sizeof(GtkEditable), sizeof(GtkEditableClass), gtk_editable_get_type },
-  { sizeof(GtkEntry), sizeof(GtkEntryClass), gtk_entry_get_type },
-  { sizeof(GtkSpinButton), sizeof(GtkSpinButtonClass), gtk_spin_button_get_type },
-  { sizeof(GtkText), sizeof(GtkTextClass), gtk_text_get_type },
-  { sizeof(GtkRuler), sizeof(GtkRulerClass), gtk_ruler_get_type },
-  { sizeof(GtkHRuler), sizeof(GtkHRulerClass), gtk_hruler_get_type },
-  { sizeof(GtkVRuler), sizeof(GtkVRulerClass), gtk_vruler_get_type },
-  { sizeof(GtkRange), sizeof(GtkRangeClass), gtk_range_get_type },
-  { sizeof(GtkScale), sizeof(GtkScaleClass), gtk_scale_get_type },
-  { sizeof(GtkHScale), sizeof(GtkHScaleClass), gtk_hscale_get_type },
-  { sizeof(GtkVScale), sizeof(GtkVScaleClass), gtk_vscale_get_type },
-  { sizeof(GtkScrollbar), sizeof(GtkScrollbarClass), gtk_scrollbar_get_type },
-  { sizeof(GtkHScrollbar), sizeof(GtkHScrollbarClass), gtk_hscrollbar_get_type },
-  { sizeof(GtkVScrollbar), sizeof(GtkVScrollbarClass), gtk_vscrollbar_get_type },
-  { sizeof(GtkSeparator), sizeof(GtkSeparatorClass), gtk_separator_get_type },
-  { sizeof(GtkHSeparator), sizeof(GtkHSeparatorClass), gtk_hseparator_get_type },
-  { sizeof(GtkVSeparator), sizeof(GtkVSeparatorClass), gtk_vseparator_get_type },
-  { sizeof(GtkPreview), sizeof(GtkPreviewClass), gtk_preview_get_type },
-  { sizeof(GtkProgress), sizeof(GtkProgressClass), gtk_progress_get_type },
-  { sizeof(GtkProgressBar), sizeof(GtkProgressBarClass), gtk_progress_bar_get_type },
-  { sizeof(GtkData), sizeof(GtkDataClass), gtk_data_get_type },
-  { sizeof(GtkAdjustment), sizeof(GtkAdjustmentClass), gtk_adjustment_get_type },
-  { sizeof(GtkTooltips), sizeof(GtkTooltipsClass), gtk_tooltips_get_type },
-  { sizeof(GtkItemFactory), sizeof(GtkItemFactoryClass), gtk_item_factory_get_type }
-};
-
-
-value ml_gtk_type_unique (value name, value parent, value nsignals)
-{
-  struct widget_info * wi;
-  GtkTypeInfo ttt_info;
-
-  wi = widget_info_array + Int_val(parent);
-  ttt_info.type_name = String_val(name);
-  ttt_info.object_size = wi->size;
-  ttt_info.class_size = wi->class_size + Int_val(nsignals)*sizeof(void *);
-  ttt_info.class_init_func = (GtkClassInitFunc) class_init;
-  ttt_info.object_init_func = (GtkObjectInitFunc) NULL;
-  ttt_info.reserved_1 = NULL;
-  ttt_info.reserved_2 = NULL;
-  ttt_info.base_class_init_func = (GtkClassInitFunc) NULL;
-
-  return Val_int(gtk_type_unique(wi->get_type_func (), &ttt_info));
-}
-
-static guint sig[100];
-
-value ml_gtk_object_class_add_signals (value class, value signals,
-                                      value nsignals)
-{
-  int i;
-  for (i=0; i<nsignals; i++)
-    sig[i] = Int_val(Field(signals, i));
-  gtk_object_class_add_signals ((GtkObjectClass *)class,
-              sig, Int_val(nsignals));
-  return Val_unit;
-}
-
-value ml_gtk_signal_new (value name, value run_type, value classe,
-                        value parent, value num)
-{
-  struct widget_info * wi;
-  int offset;
-
-  wi = widget_info_array + Int_val(parent);
-  offset = wi->class_size+Int_val(num)*sizeof(void *);
-  return Val_int(gtk_signal_new (String_val(name), Int_val(run_type),
-                  ((GtkObjectClass *)classe)->type, offset,
-                  gtk_signal_default_marshaller, GTK_TYPE_NONE, 0));
-  *(((int *)classe)+offset) = 0;
-}
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkpack.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkpack.c
deleted file mode 100644 (file)
index b089b88..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtk_tags.h"
-
-static Make_Flags_val (Attach_options_val)
-
-/* gtkbox.h */
-
-#define GtkBox_val(val) check_cast(GTK_BOX,val)
-ML_5 (gtk_box_pack_start, GtkBox_val, GtkWidget_val, Bool_val, Bool_val,
-      Int_val, Unit)
-ML_5 (gtk_box_pack_end, GtkBox_val, GtkWidget_val, Bool_val, Bool_val,
-      Int_val, Unit)
-ML_2 (gtk_box_set_homogeneous, GtkBox_val, Bool_val, Unit)
-ML_2 (gtk_box_set_spacing, GtkBox_val, Int_val, Unit)
-ML_3 (gtk_box_reorder_child, GtkBox_val, GtkWidget_val, Int_val, Unit)
-value ml_gtk_box_query_child_packing (value box, value child)
-{
-    int expand, fill;
-    unsigned int padding;
-    GtkPackType pack_type;
-    value ret;
-    gtk_box_query_child_packing (GtkBox_val(box), GtkWidget_val(child),
-                                &expand, &fill, &padding, &pack_type);
-    ret = alloc_small(4,0);
-    Field(ret,0) = Val_bool(expand);
-    Field(ret,1) = Val_bool(fill);
-    Field(ret,2) = Val_int(padding);
-    Field(ret,3) = Val_pack_type(pack_type);
-    return ret;
-}
-value ml_gtk_box_set_child_packing (value vbox, value vchild, value vexpand,
-                                   value vfill, value vpadding, value vpack)
-{
-    GtkBox *box = GtkBox_val(vbox);
-    GtkWidget *child = GtkWidget_val(vchild);
-    int expand, fill;
-    unsigned int padding;
-    GtkPackType pack;
-    gtk_box_query_child_packing (box, child, &expand, &fill, &padding, &pack);
-    gtk_box_set_child_packing (box, child,
-                              Option_val(vexpand, Bool_val, expand),
-                              Option_val(vfill, Bool_val, fill),
-                              Option_val(vpadding, Int_val, padding),
-                              Option_val(vpack, Pack_type_val, pack));
-    return Val_unit;
-}
-ML_bc6 (ml_gtk_box_set_child_packing)
-
-ML_2 (gtk_hbox_new, Bool_val, Int_val, Val_GtkWidget_sink)
-ML_2 (gtk_vbox_new, Bool_val, Int_val, Val_GtkWidget_sink)
-
-/* gtkbbox.h */
-    
-#define GtkButtonBox_val(val) check_cast(GTK_BUTTON_BOX,val)
-Make_Extractor (gtk_button_box_get, GtkButtonBox_val, spacing, Val_int)
-Make_Extractor (gtk_button_box_get, GtkButtonBox_val, child_min_width, Val_int)
-Make_Extractor (gtk_button_box_get, GtkButtonBox_val, child_min_height,
-               Val_int)
-Make_Extractor (gtk_button_box_get, GtkButtonBox_val, child_ipad_x, Val_int)
-Make_Extractor (gtk_button_box_get, GtkButtonBox_val, child_ipad_y, Val_int)
-Make_Extractor (gtk_button_box_get, GtkButtonBox_val, layout_style,
-               Val_button_box_style)
-ML_2 (gtk_button_box_set_spacing, GtkButtonBox_val, Int_val, Unit)
-ML_3 (gtk_button_box_set_child_size, GtkButtonBox_val,
-      Int_val, Int_val, Unit)
-ML_3 (gtk_button_box_set_child_ipadding, GtkButtonBox_val,
-      Int_val, Int_val, Unit)
-ML_2 (gtk_button_box_set_layout, GtkButtonBox_val, Button_box_style_val, Unit)
-ML_2 (gtk_button_box_set_child_size_default, Int_val, Int_val, Unit)
-ML_2 (gtk_button_box_set_child_ipadding_default, Int_val, Int_val, Unit)
-
-ML_0 (gtk_hbutton_box_new, Val_GtkWidget_sink)
-ML_0 (gtk_vbutton_box_new, Val_GtkWidget_sink)
-
-/* gtkfixed.h */
-
-#define GtkFixed_val(val) check_cast(GTK_FIXED,val)
-ML_0 (gtk_fixed_new, Val_GtkWidget_sink)
-ML_4 (gtk_fixed_put, GtkFixed_val, GtkWidget_val, (gint16)Long_val, (gint16)Long_val, Unit)
-ML_4 (gtk_fixed_move, GtkFixed_val, GtkWidget_val, (gint16)Long_val, (gint16)Long_val, Unit)
-
-/* gtklayout.h */
-
-#define GtkLayout_val(val) check_cast(GTK_LAYOUT,val)
-ML_2 (gtk_layout_new, GtkAdjustment_val, GtkAdjustment_val, Val_GtkWidget_sink)
-ML_4 (gtk_layout_put, GtkLayout_val, GtkWidget_val, Int_val, Int_val, Unit)
-ML_4 (gtk_layout_move, GtkLayout_val, GtkWidget_val, Int_val, Int_val, Unit)
-ML_3 (gtk_layout_set_size, GtkLayout_val, Int_val, Int_val, Unit)
-ML_1 (gtk_layout_get_hadjustment, GtkLayout_val, Val_GtkAny)
-ML_1 (gtk_layout_get_vadjustment, GtkLayout_val, Val_GtkAny)
-ML_2 (gtk_layout_set_hadjustment, GtkLayout_val, GtkAdjustment_val, Unit)
-ML_2 (gtk_layout_set_vadjustment, GtkLayout_val, GtkAdjustment_val, Unit)
-ML_1 (gtk_layout_freeze, GtkLayout_val, Unit)
-ML_1 (gtk_layout_thaw, GtkLayout_val, Unit)
-Make_Extractor (gtk_layout_get, GtkLayout_val, width, Val_int)
-Make_Extractor (gtk_layout_get, GtkLayout_val, height, Val_int)
-
-/* gtknotebook.h */
-
-#define GtkNotebook_val(val) check_cast(GTK_NOTEBOOK,val)
-ML_0 (gtk_notebook_new, Val_GtkWidget_sink)
-
-ML_5 (gtk_notebook_insert_page_menu, GtkNotebook_val, GtkWidget_val,
-      GtkWidget_val, GtkWidget_val, Int_val, Unit)
-ML_2 (gtk_notebook_remove_page, GtkNotebook_val, Int_val, Unit)
-
-ML_2 (gtk_notebook_set_tab_pos, GtkNotebook_val, Position_val, Unit)
-ML_2 (gtk_notebook_set_homogeneous_tabs, GtkNotebook_val, Bool_val, Unit)
-ML_2 (gtk_notebook_set_show_tabs, GtkNotebook_val, Bool_val, Unit)
-ML_2 (gtk_notebook_set_show_border, GtkNotebook_val, Bool_val, Unit)
-ML_2 (gtk_notebook_set_scrollable, GtkNotebook_val, Bool_val, Unit)
-ML_2 (gtk_notebook_set_tab_border, GtkNotebook_val, Int_val, Unit)
-ML_1 (gtk_notebook_popup_enable, GtkNotebook_val, Unit)
-ML_1 (gtk_notebook_popup_disable, GtkNotebook_val, Unit)
-
-ML_1 (gtk_notebook_get_current_page, GtkNotebook_val, Val_int)
-ML_2 (gtk_notebook_set_page, GtkNotebook_val, Int_val, Unit)
-ML_2 (gtk_notebook_get_nth_page, GtkNotebook_val, Int_val, Val_GtkWidget)
-ML_2 (gtk_notebook_page_num, GtkNotebook_val, GtkWidget_val, Val_int)
-ML_1 (gtk_notebook_next_page, GtkNotebook_val, Unit)
-ML_1 (gtk_notebook_prev_page, GtkNotebook_val, Unit)
-
-ML_2 (gtk_notebook_get_tab_label, GtkNotebook_val, GtkWidget_val,
-      Val_GtkWidget)
-ML_3 (gtk_notebook_set_tab_label, GtkNotebook_val, GtkWidget_val,
-      GtkWidget_val, Unit)
-ML_2 (gtk_notebook_get_menu_label, GtkNotebook_val, GtkWidget_val,
-      Val_GtkWidget)
-ML_3 (gtk_notebook_set_menu_label, GtkNotebook_val, GtkWidget_val,
-      GtkWidget_val, Unit)
-ML_3 (gtk_notebook_reorder_child, GtkNotebook_val, GtkWidget_val,
-      Int_val, Unit)
-
-
-/* gtkpacker.h */
-
-Make_OptFlags_val(Packer_options_val)
-
-#define GtkPacker_val(val) check_cast(GTK_PACKER,val)
-ML_0 (gtk_packer_new, Val_GtkWidget_sink)
-ML_10 (gtk_packer_add, GtkPacker_val, GtkWidget_val,
-       Option_val(arg3,Side_type_val,GTK_SIDE_TOP) Ignore,
-       Option_val(arg4,Anchor_type_val,GTK_ANCHOR_CENTER) Ignore,
-       OptFlags_Packer_options_val,
-       Option_val(arg6,Int_val,GtkPacker_val(arg1)->default_border_width) Ignore,
-       Option_val(arg7,Int_val,GtkPacker_val(arg1)->default_pad_x) Ignore,
-       Option_val(arg8,Int_val,GtkPacker_val(arg1)->default_pad_y) Ignore,
-       Option_val(arg9,Int_val,GtkPacker_val(arg1)->default_i_pad_x) Ignore,
-       Option_val(arg10,Int_val,GtkPacker_val(arg1)->default_i_pad_y) Ignore,
-       Unit)
-ML_bc10 (ml_gtk_packer_add)
-ML_5 (gtk_packer_add_defaults, GtkPacker_val, GtkWidget_val,
-       Option_val(arg3,Side_type_val,GTK_SIDE_TOP) Ignore,
-       Option_val(arg4,Anchor_type_val,GTK_ANCHOR_CENTER) Ignore,
-       OptFlags_Packer_options_val, Unit)
-ML_10 (gtk_packer_set_child_packing, GtkPacker_val, GtkWidget_val,
-       Option_val(arg3,Side_type_val,GTK_SIDE_TOP) Ignore,
-       Option_val(arg4,Anchor_type_val,GTK_ANCHOR_CENTER) Ignore,
-       OptFlags_Packer_options_val,
-       Option_val(arg6,Int_val,GtkPacker_val(arg1)->default_border_width) Ignore,
-       Option_val(arg7,Int_val,GtkPacker_val(arg1)->default_pad_x) Ignore,
-       Option_val(arg8,Int_val,GtkPacker_val(arg1)->default_pad_y) Ignore,
-       Option_val(arg9,Int_val,GtkPacker_val(arg1)->default_i_pad_x) Ignore,
-       Option_val(arg10,Int_val,GtkPacker_val(arg1)->default_i_pad_y) Ignore,
-       Unit)
-ML_bc10 (ml_gtk_packer_set_child_packing)
-ML_3 (gtk_packer_reorder_child, GtkPacker_val, GtkWidget_val,
-      Int_val, Unit)
-ML_2 (gtk_packer_set_spacing, GtkPacker_val, Int_val, Unit)
-value ml_gtk_packer_set_defaults (value w, value border_width,
-                                 value pad_x, value pad_y,
-                                 value i_pad_x, value i_pad_y)
-{
-    GtkPacker *p = GtkPacker_val(w);
-    if (Is_block(border_width))
-       gtk_packer_set_default_border_width (p,Int_val(Field(border_width,0)));
-    if (Is_block(pad_x) || Is_block(pad_y))
-       gtk_packer_set_default_pad
-           (p, Option_val(pad_x,Int_val,p->default_pad_x),
-               Option_val(pad_y,Int_val,p->default_pad_y));
-    if (Is_block(i_pad_x) || Is_block(i_pad_y))
-       gtk_packer_set_default_ipad
-           (p, Option_val(pad_x,Int_val,p->default_i_pad_x),
-               Option_val(pad_y,Int_val,p->default_i_pad_y));
-    return Val_unit;
-}
-ML_bc6 (ml_gtk_packer_set_defaults)
-
-/* gtkpaned.h */
-
-#define GtkPaned_val(val) check_cast(GTK_PANED,val)
-ML_0 (gtk_hpaned_new, Val_GtkWidget_sink)
-ML_0 (gtk_vpaned_new, Val_GtkWidget_sink)
-ML_2 (gtk_paned_add1, GtkPaned_val, GtkWidget_val, Unit)
-ML_2 (gtk_paned_add2, GtkPaned_val, GtkWidget_val, Unit)
-ML_2 (gtk_paned_set_handle_size, GtkPaned_val, (gint16)Int_val, Unit)
-ML_2 (gtk_paned_set_gutter_size, GtkPaned_val, (gint16)Int_val, Unit)
-Make_Extractor (gtk_paned, GtkPaned_val, child1, Val_GtkWidget)
-Make_Extractor (gtk_paned, GtkPaned_val, child2, Val_GtkWidget)
-Make_Extractor (gtk_paned, GtkPaned_val, handle_size, Val_int)
-Make_Extractor (gtk_paned, GtkPaned_val, gutter_size, Val_int)
-
-/* gtktable.h */
-
-#define GtkTable_val(val) check_cast(GTK_TABLE,val)
-ML_3 (gtk_table_new, Int_val, Int_val, Int_val, Val_GtkWidget_sink)
-ML_10 (gtk_table_attach, GtkTable_val, GtkWidget_val,
-       Int_val, Int_val, Int_val, Int_val,
-       Flags_Attach_options_val, Flags_Attach_options_val,
-       Int_val, Int_val, Unit)
-ML_bc10 (ml_gtk_table_attach)
-ML_3 (gtk_table_set_row_spacing, GtkTable_val, Int_val, Int_val, Unit)
-ML_3 (gtk_table_set_col_spacing, GtkTable_val, Int_val, Int_val, Unit)
-ML_2 (gtk_table_set_row_spacings, GtkTable_val, Int_val, Unit)
-ML_2 (gtk_table_set_col_spacings, GtkTable_val, Int_val, Unit)
-ML_2 (gtk_table_set_homogeneous, GtkTable_val, Bool_val, Unit)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkrange.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkrange.c
deleted file mode 100644 (file)
index 642d269..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtk_tags.h"
-
-/* gtkprogress.h */
-
-#define GtkProgress_val(val) check_cast(GTK_PROGRESS,val)
-ML_2 (gtk_progress_set_show_text, GtkProgress_val, Bool_val, Unit)
-ML_3 (gtk_progress_set_text_alignment, GtkProgress_val,
-      Option_val(arg2,Float_val,(GtkProgress_val(arg1))->x_align) Ignore,
-      Option_val(arg3,Float_val,(GtkProgress_val(arg1))->y_align) Ignore, Unit)
-ML_2 (gtk_progress_set_format_string, GtkProgress_val, String_val, Unit)
-ML_2 (gtk_progress_set_adjustment, GtkProgress_val, GtkAdjustment_val, Unit)
-ML_4 (gtk_progress_configure, GtkProgress_val,
-      Float_val, Float_val, Float_val, Unit)
-ML_2 (gtk_progress_set_percentage, GtkProgress_val, Float_val, Unit)
-ML_2 (gtk_progress_set_value, GtkProgress_val, Float_val, Unit)
-ML_1 (gtk_progress_get_value, GtkProgress_val, copy_double)
-ML_1 (gtk_progress_get_current_percentage, GtkProgress_val, copy_double)
-ML_2 (gtk_progress_set_activity_mode, GtkProgress_val, Bool_val, Unit)
-ML_1 (gtk_progress_get_current_text, GtkProgress_val, Val_string)
-Make_Extractor (gtk_progress_get, GtkProgress_val, adjustment,
-               Val_GtkAny)
-
-/* gtkprogressbar.h */
-
-#define GtkProgressBar_val(val) check_cast(GTK_PROGRESS_BAR,val)
-ML_0 (gtk_progress_bar_new, Val_GtkWidget_sink)
-ML_1 (gtk_progress_bar_new_with_adjustment, GtkAdjustment_val,
-      Val_GtkWidget_sink)
-ML_2 (gtk_progress_bar_set_bar_style, GtkProgressBar_val,
-      Progress_bar_style_val, Unit)
-ML_2 (gtk_progress_bar_set_discrete_blocks, GtkProgressBar_val, Int_val, Unit)
-ML_2 (gtk_progress_bar_set_activity_step, GtkProgressBar_val, Int_val, Unit)
-ML_2 (gtk_progress_bar_set_activity_blocks, GtkProgressBar_val, Int_val, Unit)
-ML_2 (gtk_progress_bar_set_orientation, GtkProgressBar_val,
-      Progress_bar_orientation_val, Unit)
-/* ML_2 (gtk_progress_bar_update, GtkProgressBar_val, Float_val, Unit) */
-
-/* gtkrange.h */
-
-#define GtkRange_val(val) check_cast(GTK_RANGE,val)
-ML_1 (gtk_range_get_adjustment, GtkRange_val, Val_GtkAny)
-ML_2 (gtk_range_set_adjustment, GtkRange_val, GtkAdjustment_val, Unit)
-ML_2 (gtk_range_set_update_policy, GtkRange_val, Update_type_val, Unit)
-
-/* gtkscale.h */
-
-#define GtkScale_val(val) check_cast(GTK_SCALE,val)
-ML_2 (gtk_scale_set_digits, GtkScale_val, Int_val, Unit)
-ML_2 (gtk_scale_set_draw_value, GtkScale_val, Bool_val, Unit)
-ML_2 (gtk_scale_set_value_pos, GtkScale_val, Position_val, Unit)
-ML_1 (gtk_scale_get_value_width, GtkScale_val, Val_int)
-ML_1 (gtk_scale_draw_value, GtkScale_val, Unit)
-ML_1 (gtk_hscale_new, GtkAdjustment_val, Val_GtkWidget_sink)
-ML_1 (gtk_vscale_new, GtkAdjustment_val, Val_GtkWidget_sink)
-
-/* gtkscrollbar.h */
-
-ML_1 (gtk_hscrollbar_new, GtkAdjustment_val, Val_GtkWidget_sink)
-ML_1 (gtk_vscrollbar_new, GtkAdjustment_val, Val_GtkWidget_sink)
-
-/* gtkruler.h */
-
-#define GtkRuler_val(val) check_cast(GTK_RULER,val)
-ML_2 (gtk_ruler_set_metric, GtkRuler_val, Metric_type_val, Unit)
-ML_5 (gtk_ruler_set_range, GtkRuler_val, Float_val,
-      Float_val, Float_val, Float_val, Unit)
-Make_Extractor (gtk_ruler_get, GtkRuler_val, lower, copy_double)
-Make_Extractor (gtk_ruler_get, GtkRuler_val, upper, copy_double)
-Make_Extractor (gtk_ruler_get, GtkRuler_val, position, copy_double)
-Make_Extractor (gtk_ruler_get, GtkRuler_val, max_size, copy_double)
-ML_1 (gtk_ruler_draw_ticks, GtkRuler_val, Unit)
-ML_1 (gtk_ruler_draw_pos, GtkRuler_val, Unit)
-ML_0 (gtk_hruler_new, Val_GtkWidget_sink)
-ML_0 (gtk_vruler_new, Val_GtkWidget_sink)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtktree.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtktree.c
deleted file mode 100644 (file)
index a1239c2..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtk_tags.h"
-
-/* gtktreeitem.h */
-
-#define GtkTreeItem_val(val) check_cast(GTK_TREE_ITEM,val)
-ML_0 (gtk_tree_item_new, Val_GtkWidget_sink)
-ML_1 (gtk_tree_item_new_with_label, String_val, Val_GtkWidget_sink)
-ML_2 (gtk_tree_item_set_subtree, GtkTreeItem_val, GtkWidget_val, Unit)
-ML_1 (gtk_tree_item_remove_subtree, GtkTreeItem_val, Unit)
-ML_1 (gtk_tree_item_expand, GtkTreeItem_val, Unit)
-ML_1 (gtk_tree_item_collapse, GtkTreeItem_val, Unit)
-ML_1 (GTK_TREE_ITEM_SUBTREE, GtkTreeItem_val, Val_GtkWidget)
-
-/* gtktree.h */
-
-#define GtkTree_val(val) check_cast(GTK_TREE,val)
-ML_0 (gtk_tree_new, Val_GtkWidget_sink)
-ML_3 (gtk_tree_insert, GtkTree_val, GtkWidget_val, Int_val, Unit)
-ML_3 (gtk_tree_clear_items, GtkTree_val, Int_val, Int_val, Unit)
-ML_2 (gtk_tree_select_item, GtkTree_val, Int_val, Unit)
-ML_2 (gtk_tree_unselect_item, GtkTree_val, Int_val, Unit)
-ML_2 (gtk_tree_child_position, GtkTree_val, GtkWidget_val, Val_int)
-ML_2 (gtk_tree_set_selection_mode, GtkTree_val, Selection_mode_val, Unit)
-ML_2 (gtk_tree_set_view_mode, GtkTree_val, Tree_view_mode_val, Unit)
-ML_2 (gtk_tree_set_view_lines, GtkTree_val, Bool_val, Unit)
-
-static value val_gtkany (gpointer p) { return Val_GtkAny(p); }
-value ml_gtk_tree_selection (value tree)
-{
-  GList *selection = GTK_TREE_SELECTION(GtkTree_val(tree));
-  return Val_GList(selection, val_gtkany);
-}
-static gpointer gtkobject_val (value val) { return GtkObject_val(val); }
-value ml_gtk_tree_remove_items (value tree, value items)
-{
-  GList *items_list = GList_val (items, gtkobject_val);
-  gtk_tree_remove_items (GtkTree_val(tree), items_list);
-  return Val_unit;
-}
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkxmhtml.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/ml_gtkxmhtml.c
deleted file mode 100644 (file)
index 54bd51e..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <gtk-xmhtml/gtk-xmhtml.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-#include "ml_glib.h"
-#include "ml_gdk.h"
-#include "ml_gtk.h"
-#include "gtkxmhtml_tags.h"
-
-/* conversion functions */
-
-#include "gtkxmhtml_tags.c"
-
-Make_Flags_val (Line_type_val)
-
-#define GtkXmHTML_val(val) ((GtkXmHTML*)GtkObject_val(val))
-
-ML_0 (gtk_xmhtml_new, Val_GtkAny_sink)
-ML_1 (gtk_xmhtml_freeze, GtkXmHTML_val, Unit)
-ML_1 (gtk_xmhtml_thaw, GtkXmHTML_val, Unit)
-ML_2 (gtk_xmhtml_source, GtkXmHTML_val, String_val, Unit)
-ML_2 (gtk_xmhtml_set_string_direction, GtkXmHTML_val, String_direction_val,
-      Unit)
-ML_2 (gtk_xmhtml_set_alignment, GtkXmHTML_val, Alignment_val, Unit)
-/* ML_2 (gtk_xmhtml_outline, GtkXmHTML_val, Bool_val, Unit) */
-ML_3 (gtk_xmhtml_set_font_familty, GtkXmHTML_val, String_val, String_val, Unit)
-ML_3 (gtk_xmhtml_set_font_familty_fixed, GtkXmHTML_val, String_val, String_val,
-      Unit)
-ML_2 (gtk_xmhtml_set_font_charset, GtkXmHTML_val, String_val, Unit)
-ML_2 (gtk_xmhtml_set_allow_body_colors, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_hilight_on_enter, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_anchor_underline_type, GtkXmHTML_val, Flags_Line_type_val,
-      Unit)
-ML_2 (gtk_xmhtml_set_anchor_visited_underline_type, GtkXmHTML_val,
-      Flags_Line_type_val, Unit)
-ML_2 (gtk_xmhtml_set_anchor_target_underline_type, GtkXmHTML_val,
-      Flags_Line_type_val, Unit)
-ML_2 (gtk_xmhtml_set_allow_color_switching, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_dithering, GtkXmHTML_val, Dither_type_val, Unit)
-ML_2 (gtk_xmhtml_set_allow_font_switching, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_max_image_colors, GtkXmHTML_val, Int_val, Unit)
-ML_2 (gtk_xmhtml_set_allow_images, GtkXmHTML_val, Bool_val, Unit)
-ML_4 (gtk_xmhtml_set_plc_intervals, GtkXmHTML_val, Int_val, Int_val, Int_val,
-      Unit)
-/* ML_2 (gtk_xmhtml_set_def_body_image_url, GtkXmHTML_val, String_val, Unit) */
-ML_2 (gtk_xmhtml_set_anchor_buttons, GtkXmHTML_val, Bool_val, Unit)
-value ml_gtk_xmhtml_set_anchor_cursor(value html, value cursor)
-{
-     gtk_xmhtml_set_anchor_cursor
-          (GtkXmHTML_val(html), Option_val(cursor, GdkCursor_val, NULL),
-           Bool_val(cursor));
-     return Val_unit;
-}
-ML_2 (gtk_xmhtml_set_topline, GtkXmHTML_val, Int_val, Unit)
-ML_1 (gtk_xmhtml_get_topline, GtkXmHTML_val, Val_int)
-ML_2 (gtk_xmhtml_set_freeze_animations, GtkXmHTML_val, Bool_val, Unit)
-/* ML_1 (gtk_xmhtml_get_source, GtkXmHTML_val, copy_string) */
-ML_2 (gtk_xmhtml_set_screen_gamma, GtkXmHTML_val, Float_val, Unit)
-/* ML_2 (gtk_xmhtml_set_event_proc, GtkXmHTML_val, ???, Unit) */
-ML_2 (gtk_xmhtml_set_perfect_colors, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_uncompress_command, GtkXmHTML_val, String_val, Unit)
-ML_2 (gtk_xmhtml_set_strict_checking, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_bad_html_warnings, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_allow_form_coloring, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_imagemap_draw, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_mime_type, GtkXmHTML_val, String_val, Unit)
-ML_2 (gtk_xmhtml_set_alpha_processing, GtkXmHTML_val, Bool_val, Unit)
-ML_2 (gtk_xmhtml_set_rgb_conv_mode, GtkXmHTML_val, Dither_type_val, Unit)
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/varcc.ml b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/varcc.ml
deleted file mode 100644 (file)
index 100bee3..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-(* $Id$ *)
-
-(* Compile a list of variant tags into CPP defines *) 
-
-(* hash_variant, from ctype.ml *)
-
-let hash_variant s =
-  let accu = ref 0 in
-  for i = 0 to String.length s - 1 do
-    accu := 223 * !accu + Char.code s.[i]
-  done;
-  (* reduce to 31 bits *)
-  accu := !accu land (1 lsl 31 - 1);
-  (* make it signed for 64 bits architectures *)
-  if !accu > 0x3FFFFFFF then !accu - (1 lsl 31) else !accu
-
-open Genlex
-
-let lexer = make_lexer ["type"; "public"; "="; "["; "]"; "`"; "|"]
-
-let may_string = parser
-    [< ' String s >] -> s
-  | [< >] -> ""
-
-let may_bar = parser
-    [< ' Kwd "|" >] -> ()
-  | [< >] -> ()
-
-let rec ident_list = parser
-    [< ' Kwd "`"; ' Ident x; trans = may_string; _ = may_bar; s >] ->
-      (x, trans) :: ident_list s
-  | [< >] -> []
-
-let static = ref false
-let may_public = parser
-    [< ' Kwd "public" >] -> true
-  | [< ' Kwd "private" >] -> false
-  | [< >] -> not !static
-
-open Printf
-
-let hashes = Hashtbl.create 57
-
-let declaration ~hc ~cc = parser
-    [< ' Kwd "type"; public = may_public; ' Ident name; ' Kwd "=";
-       prefix = may_string; ' Kwd "["; _ = may_bar;
-       tags = ident_list; ' Kwd "]"; suffix = may_string >] ->
-    let oh x = fprintf hc x and oc x = fprintf cc x in
-    (* Output tag values to headers *)
-    let first = ref true in
-    List.iter tags ~f:
-      begin fun (tag, _) ->
-        let hash = hash_variant tag in
-        try
-         let tag' = Hashtbl.find hashes hash in
-         if tag <> tag' then
-           failwith (String.concat ~sep:" " ["Doublon tag:";tag;"and";tag'])
-        with Not_found ->
-         Hashtbl.add ~key:hash ~data:tag hashes;
-          if !first then begin
-            oh "/* %s : tags and macros */\n" name; first := false
-          end;
-         oh "#define MLTAG_%s\tVal_int(%d)\n" tag hash;
-      end;
-    (* compute C name *)
-    let ctag tag trans =
-      if trans <> "" then trans else
-      let tag =
-       if tag.[0] = '_' then
-         String.sub tag ~pos:1 ~len:(String.length tag -1)
-       else tag
-      in
-      match
-       if prefix = "" then None, ""
-       else
-         Some (prefix.[String.length prefix - 1]), 
-         String.sub prefix ~pos:0 ~len:(String.length prefix - 1)
-      with
-       Some '#', prefix ->
-         prefix ^ String.uncapitalize tag ^ suffix
-      |        Some '^', prefix ->
-         prefix ^ String.uppercase tag ^ suffix
-      |        _ ->
-         prefix ^ tag ^ suffix
-    and cname =
-      String.capitalize name
-    in
-    let tags =
-      Sort.list tags
-       ~order:(fun (tag1,_) (tag2,_) -> hash_variant tag1 < hash_variant tag2)
-    in
-    (* Output table to code file *)
-    oc "/* %s : conversion table */\n" name;
-    let static = if not public then "static " else "" in
-    oc "%slookup_info ml_table_%s[] = {\n" static name;
-    oc "  { 0, %d },\n" (List.length tags);
-    List.iter tags ~f:
-      begin fun (tag,trans) ->
-       oc "  { MLTAG_%s, %s },\n" tag (ctag tag trans)
-      end;
-    oc "};\n\n";
-    (* Output macros to headers *)
-    if not !first then oh "\n";
-    if public then oh "extern lookup_info ml_table_%s[];\n" name;
-    oh "#define Val_%s(data) ml_lookup_from_c (ml_table_%s, data)\n"
-      name name;
-    oh "#define %s_val(key) ml_lookup_to_c (ml_table_%s, key)\n\n"
-      cname name;
-  | [< >] -> raise End_of_file
-
-
-let process ic ~hc ~cc =  
-  let chars = Stream.of_channel ic in
-  let s = lexer chars in
-  try
-    while true do declaration s ~hc ~cc done
-  with End_of_file -> ()
-  | Stream.Error err ->
-      failwith
-        (Printf.sprintf "Parsing error \"%s\" at character %d on input stream"
-           err (Stream.count chars))
-
-let main () =
-  let inputs = ref [] in
-  let header = ref "" in
-  let code = ref "" in
-  Arg.parse ~errmsg:"usage: varcc [options] file.var" ~keywords:
-    [ "-h", Arg.String ((:=) header), "file to output macros (file.h)";
-      "-c", Arg.String ((:=) code),
-      "file to output conversion tables (file.c)";
-      "-static", Arg.Set static, "do not export conversion tables" ]
-    ~others:(fun s -> inputs := s :: !inputs);
-  let inputs = List.rev !inputs in
-  begin match inputs with
-  | [] ->
-      if !header = "" then header := "a.h";
-      if !code = "" then code := "a.c"
-  | ip :: _ ->
-      let rad =
-        if Filename.check_suffix ip ".var" then Filename.chop_extension ip
-        else ip in
-      if !header = "" then header := rad ^ ".h";
-      if !code = "" then code := rad ^ ".c"
-  end;
-  let hc = open_out !header and cc = open_out !code in
-  let chars = Stream.of_channel stdin in
-  if inputs = [] then process stdin ~hc ~cc else begin
-    List.iter inputs ~f:
-      begin fun file ->
-        let ic = open_in file in
-        try process ic ~hc ~cc; close_in ic
-        with exn -> close_in ic; prerr_endline ("Error in " ^ file); raise exn
-      end
-  end;
-  close_out hc; close_out cc
-
-let _ = Printexc.print main ()
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.c b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.c
deleted file mode 100644 (file)
index ee0f567..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* $Id$ */
-
-#include <string.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include "wrappers.h"
-
-value copy_memblock_indirected (void *src, asize_t size)
-{
-    value ret = alloc (Wosize_asize(size)+2, Abstract_tag);
-    if (!src) ml_raise_null_pointer ();
-    
-    Field(ret,1) = 2;
-    memcpy (&Field(ret,2), src, size);
-    return ret;
-}
-
-value ml_some (value v)
-{
-     CAMLparam1(v);
-     value ret = alloc_small(1,0);
-     Field(ret,0) = v;
-     CAMLreturn(ret);
-}
-
-void ml_raise_null_pointer ()
-{
-  static value * exn = NULL;
-  if (exn == NULL)
-      exn = caml_named_value ("null_pointer");
-  raise_constant (*exn);
-}   
-
-value Val_pointer (void *ptr)
-{
-    value ret = alloc_small (2, Abstract_tag);
-    if (!ptr) ml_raise_null_pointer ();
-    Field(ret,1) = (value)ptr;
-    return ret;
-}
-
-value copy_string_check (const char*str)
-{
-    if (!str) ml_raise_null_pointer ();
-    return copy_string ((char*) str);
-}
-
-value copy_string_or_null (const char*str)
-{
-    return copy_string (str ? (char*) str : "");
-}
-
-value *ml_global_root_new (value v)
-{
-    value *p = stat_alloc(sizeof(value));
-    *p = v;
-    register_global_root (p);
-    return p;
-}
-
-void ml_global_root_destroy (void *data)
-{
-    remove_global_root ((value *)data);
-    stat_free (data);
-}
-
-value ml_lookup_from_c (lookup_info *table, int data)
-{
-    int i;
-    for (i = table[0].data; i > 0; i--)
-       if (table[i].data == data) return table[i].key;
-    invalid_argument ("ml_lookup_from_c");
-}
-    
-int ml_lookup_to_c (lookup_info *table, value key)
-{
-    int first = 1, last = table[0].data, current;
-
-    while (first < last) {
-       current = (first+last)/2;
-       if (table[current].key >= key) last = current;
-       else first = current + 1;
-    }
-    if (table[first].key == key) return table[first].data;
-    invalid_argument ("ml_lookup_to_c");
-}
diff --git a/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.h b/helm/DEVEL/lablgtk/lablgtk_20001129-0.1.0/wrappers.h
deleted file mode 100644 (file)
index 2006bcb..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/* $Id$ */
-
-#ifndef _wrappers_
-#define _wrappers_
-
-#include <caml/mlvalues.h>
-#include <caml/fail.h>
-
-value copy_memblock_indirected (void *src, asize_t size);
-value ml_some (value);
-void ml_raise_null_pointer (void) Noreturn;
-value Val_pointer (void *);
-value copy_string_check (const char*);
-value copy_string_or_null (const char *);
-
-value *ml_global_root_new (value v);
-void ml_global_root_destroy (void *data);
-
-typedef struct { value key; int data; } lookup_info;
-value ml_lookup_from_c (lookup_info *table, int data);
-int ml_lookup_to_c (lookup_info *table, value key);
-
-/* Wrapper generators */
-
-#define ML_0(cname, conv) \
-value ml_##cname (value unit) { return conv (cname ()); }
-#define ML_1(cname, conv1, conv) \
-value ml_##cname (value arg1) { return conv (cname (conv1 (arg1))); }
-#define ML_1_post(cname, conv1, conv, post) \
-value ml_##cname (value arg1) \
-{ value ret = conv (cname (conv1(arg1))); post; return ret; }
-#define ML_2(cname, conv1, conv2, conv) \
-value ml_##cname (value arg1, value arg2) \
-{ return conv (cname (conv1(arg1), conv2(arg2))); }
-#define ML_2_name(mlname, cname, conv1, conv2, conv) \
-value mlname (value arg1, value arg2) \
-{ return conv (cname (conv1(arg1), conv2(arg2))); }
-#define ML_3(cname, conv1, conv2, conv3, conv) \
-value ml_##cname (value arg1, value arg2, value arg3) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3))); }
-#define ML_3_name(mlname, cname, conv1, conv2, conv3, conv) \
-value mlname (value arg1, value arg2, value arg3) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3))); }
-#define ML_4(cname, conv1, conv2, conv3, conv4, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4))); }
-#define ML_4_name(mlname, cname, conv1, conv2, conv3, conv4, conv) \
-value mlname (value arg1, value arg2, value arg3, value arg4) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4))); }
-#define ML_5(cname, conv1, conv2, conv3, conv4, conv5, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5))); }
-#define ML_6(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6))); }
-#define ML_7(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6, value arg7) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6), conv7(arg7))); }
-#define ML_8(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \
-            conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6, value arg7, value arg8) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8))); }
-#define ML_9(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \
-             conv9, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6, value arg7, value arg8, value arg9) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8), \
-                     conv9(arg9))); }
-#define ML_10(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \
-             conv9, conv10, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6, value arg7, value arg8, value arg9, value arg10)\
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8), \
-                     conv9(arg9), conv10(arg10))); }
-#define ML_11(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \
-             conv9, conv10, conv11, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6, value arg7, value arg8, value arg9, value arg10,\
-                 value arg11) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8), \
-                     conv9(arg9), conv10(arg10), conv11(arg11))); }
-#define ML_12(cname, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, \
-             conv9, conv10, conv11, conv12, conv) \
-value ml_##cname (value arg1, value arg2, value arg3, value arg4, value arg5, \
-                 value arg6, value arg7, value arg8, value arg9, value arg10,\
-                 value arg11, value arg12) \
-{ return conv (cname (conv1(arg1), conv2(arg2), conv3(arg3), conv4(arg4), \
-                     conv5(arg5), conv6(arg6), conv7(arg7), conv8(arg8), \
-                     conv9(arg9), conv10(arg10), conv11(arg11), \
-                     conv12(arg12))); }
-
-/* Use with care: needs the argument index */
-#define Ignore(x)
-#define Insert(x) (x),
-#define Split(x,f,g) f(x), g(x) Ignore
-#define Split3(x,f,g,h) f(x), g(x), h(x) Ignore
-#define Pair(x,f,g) f(Field(x,0)), g(Field(x,1)) Ignore
-#define Triple(x,f,g,h) f(Field(x,0)), g(Field(x,1)), h(Field(x,2)) Ignore
-
-/* For more than 5 arguments */
-#define ML_bc6(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5]); }
-#define ML_bc7(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6]); }
-#define ML_bc8(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \
-              argv[7]); }
-#define ML_bc9(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \
-              argv[7],argv[8]); }
-#define ML_bc10(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \
-              argv[7],argv[8],argv[9]); }
-#define ML_bc11(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \
-              argv[7],argv[8],argv[9],argv[10]); }
-#define ML_bc12(cname) \
-value cname##_bc (value *argv, int argn) \
-{ return cname(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5],argv[6], \
-              argv[7],argv[8],argv[9],argv[10],argv[11]); }
-
-/* result conversion */
-#define Unit(x) ((x), Val_unit)
-#define Id(x) x
-#define Val_char Val_int
-
-/* parameter conversion */
-#define Bool_ptr(x) ((long) x - 1)
-#define Char_val Int_val
-#define Float_val(x) ((float)Double_val(x))
-
-#define Option_val(val,unwrap,default) \
-((long)val-1 ? unwrap(Field(val,0)) : default)
-#define String_option_val(s) Option_val(s,String_val,NULL)
-
-/* Utility */
-
-#define Copy_array(ret,l,src,conv) \
- if (!l) ret = Atom(0); \
- else if (l <= Max_young_wosize) { int i; ret = alloc_tuple(l); \
-   for(i=0;i<l;i++) Field(ret,i) = conv(src[i]); } \
- else { int i; ret = alloc_shr(l,0); \
-   for(i=0;i<l;i++) initialize (&Field(ret,i), conv(src[i])); }
-
-#define Make_Val_final_pointer(type, init, final, adv) \
-static void ml_final_##type (value val) \
-{ if (Field(val,1)) final ((type*)Field(val,1)); } \
-value Val_##type (type *p) \
-{ value ret; if (!p) ml_raise_null_pointer(); \
-  ret = alloc_final (2, ml_final_##type, adv, 1000); \
-  initialize (&Field(ret,1), (value) p); init(p); return ret; }
-
-#define Make_Val_final_pointer_ext(type, ext, init, final, adv) \
-static void ml_final_##type##ext (value val) \
-{ if (Field(val,1)) final ((type*)Field(val,1)); } \
-value Val_##type##ext (type *p) \
-{ value ret; if (!p) ml_raise_null_pointer(); \
-  ret = alloc_final (2, ml_final_##type##ext, adv, 1000); \
-  initialize (&Field(ret,1), (value) p); init(p); return ret; }
-
-#define Pointer_val(val) ((void*)Field(val,1))
-#define MLPointer_val(val) (Field(val,1) == 2 ? &Field(val,2) : (void*)Field(val,1))
-
-#define Val_addr(ptr) (1+(value)ptr)
-#define Addr_val(val) ((void*)(val-1))
-
-#define Wosize_asize(x) ((x-1)/sizeof(value)+1)
-#define Wosizeof(x) Wosize_asize(sizeof(x))
-
-#define Make_Extractor(name,conv1,field,conv2) \
-value ml_##name##_##field (value val) \
-{ return conv2 ((conv1(val))->field); }
-
-#define Make_Setter(name,conv1,conv2,field) \
-value ml_##name##_##field (value val, value new) \
-{ (conv1(val))->field = conv2(new); return Val_unit; }
-
-#define Make_Array_Extractor(name,conv1,conv2,field,conv) \
-value ml_##name##_##field (value val, value index) \
-{ return conv ((conv1(val))->field[conv2(index)]); }
-
-#define Make_Array_Setter(name,conv1,conv2,conv3,field) \
-value ml_##name##_##field (value val, value index, value new) \
-{ (conv1(val))->field[conv2(index)] = conv3(new); return Val_unit; }
-
-/* ML value is [flag list] */
-#define Make_Flags_val(conv) \
-int Flags_##conv (value list) \
-{ int flags = 0L; \
-  while Is_block(list) { flags |= conv(Field(list,0)); list = Field(list,1); }\
-  return flags; }
-
-/* ML value is [flag list option] */
-#define Make_OptFlags_val(conv) \
-int OptFlags_##conv (value list) \
-{ int flags = 0L; \
-  if Is_block(list) list = Field(list,0); \
-  while Is_block(list) { flags |= conv(Field(list,0)); list = Field(list,1); }\
-  return flags; }
-
-#define Val_copy(val) copy_memblock_indirected (&val, sizeof(val))
-#define Val_string copy_string_check
-#define Val_optstring copy_string_or_null
-#define Optstring_val(v) (string_length(v) ? String_val(v) : (char*)NULL)
-#define Val_option(v,f) (v ? ml_some(f(v)) : Val_unit)
-
-#define Check_null(v) (v ? v : (ml_raise_null_pointer (), v))
-
-#endif /* _wrappers_ */
diff --git a/helm/DEVEL/lablgtk_gtkmathview/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/.cvsignore
deleted file mode 100644 (file)
index 8e6f4f9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.cmx *.cma *.cmxa test test.opt
diff --git a/helm/DEVEL/lablgtk_gtkmathview/.depend b/helm/DEVEL/lablgtk_gtkmathview/.depend
deleted file mode 100644 (file)
index 600449b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-gMathView.cmo: gtkMathView.cmo gtk_mathview.cmo 
-gMathView.cmx: gtkMathView.cmx gtk_mathview.cmx 
-gtkMathView.cmo: gtk_mathview.cmo 
-gtkMathView.cmx: gtk_mathview.cmx 
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.i386.rpm b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.i386.rpm
deleted file mode 100644 (file)
index e759a66..0000000
Binary files a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.i386.rpm and /dev/null differ
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.spec b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.spec
deleted file mode 100644 (file)
index 63b197d..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-Summary: GtkMathView : the binding for lablgtk of the GtkMathView widget
-Name: lablgtk-20000829_gtkmathview
-Version: 0.1.0
-Release: 1
-Copyright: LGPL
-Group: Development/Libraries
-Requires: lablgtk_20000829 gtkmathview
-Source: www.cs.unibo.it:/~lpadovan/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0.tar.gz
-%description
-GtkMathView is the binding for lablgtk of the GtkMathView widget.
-
-%prep
-%setup
-
-%build
-make
-make opt
-
-%install
-make install
-
-%files
-%doc COPYING
-
-/usr/lib/ocaml/lablgtk/mathview
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.src.rpm b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.src.rpm
deleted file mode 100644 (file)
index 3377d3c..0000000
Binary files a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0-1.src.rpm and /dev/null differ
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0.tar.gz b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0.tar.gz
deleted file mode 100644 (file)
index 73f44b3..0000000
Binary files a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0.tar.gz and /dev/null differ
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/.depend b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/.depend
deleted file mode 100644 (file)
index 600449b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-gMathView.cmo: gtkMathView.cmo gtk_mathview.cmo 
-gMathView.cmx: gtkMathView.cmx gtk_mathview.cmx 
-gtkMathView.cmo: gtk_mathview.cmo 
-gtkMathView.cmx: gtk_mathview.cmx 
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/COPYING b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/COPYING
deleted file mode 100644 (file)
index 20b480a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-This library is made available under the LGPL.
-You should have got a copy of the LGPL with Objective Caml.
-The LGPL applies to all the files in this directory, but not in
-subdirectories.
-
-For the test subdirectory, there is no specific licensing policy,
-but you may freely take inspiration from the code, and copy parts of
-it in your application.
-
-Author:
-       Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/Makefile
deleted file mode 100644 (file)
index 1195de5..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-# Makefile for lablgtk_mathview.
-
-LABLGTKDIR = /usr/local/lib/ocaml/lablgtk
-MLFLAGS += -I $(LABLGTKDIR)
-
-TARGETS = ml_gtk_mathview.o lablgtkmathview.cma
-
-all: $(TARGETS)
-
-opt: lablgtkmathviewopt
-
-configure:
-       @rm -f config.make
-       @$(MAKE) --no-print-directory -f configure.mk
-
-depend:
-       @rm -f .depend
-       @$(MAKE) --no-print-directory -f configure.mk .depend
-
-.depend config.make:
-       @$(MAKE) --no-print-directory -f configure.mk
-
-COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-
-include config.make
-
-INSTALLDIR = $(LIBDIR)/lablgtk/mathview
-
-MLLIBS = lablgtkmathview.cma
-CLIBS = 
-MLLINK = unix.cma str.cma
-
-ifdef DEBUG
-CFLAGS = -g $(GTKCFLAGS)
-MLLINK += -cclib -lcamlrund
-MLFLAGS += -g
-else
-CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS)
-endif
-
-THFLAGS = -thread
-THLINK = unix.cma threads.cma
-
-ifdef USE_CC
-CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS)
-else
-CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)"
-endif
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def
-.c.o:
-       $(CCOMPILER) $<
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-.var.h:
-       ./var2def < $< > $@
-.var.c:
-       ./var2conv < $< > $@
-
-# Targets
-COBJS = ml_gtk_mathview.o
-MLOBJS = gtk_mathview.cmo gtkMathView.cmo gMathView.cmo
-ALLOBJS = $(MLOBJS)
-
-lablgtkmathviewopt: $(CLIBS) $(MLLIBS:.cma=.cmxa)
-
-install:
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       if test -f *.mli ; then cp *.mli $(INSTALLDIR) ; fi
-       cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR)
-       cp $(MLLIBS) $(INSTALLDIR)
-       cp $(COBJS) $(INSTALLDIR)
-       if test ! -z "$(CLIBS)" ; then cp $(CLIBS) $(INSTALLDIR) ; fi
-       if test -f lablgtkmathview.cmxa; then \
-          cp $(MLLIBS:.cma=.cmxa) $(MLLIBS:.cma=.a) \
-             $(INSTALLDIR); fi
-
-lablgtkmathview.cma: $(MLOBJS)
-       $(LINKER) -a -custom -o $@ $(MLOBJS) $(GTKLIBS) $(GTKMATHVIEWLIBS)
-lablgtkmathview.cmxa: $(MLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) $(GTKLIBS) $(GTKMATHVIEWLIBS)
-
-ml_gtk.o: $(LABLGTKDIR)/gtk_tags.c $(LABLGTKDIR)/gtk_tags.h \
-          $(LABLGTKDIR)/ml_gtk.h $(LABLGTKDIR)/ml_gdk.h $(LABLGTKDIR)/wrappers.h
-
-clean:
-       rm -f *.cm* *.o *.a *_tags.[ch] $(TARGETS)
-
-include .depend
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/config.make b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/config.make
deleted file mode 100644 (file)
index d50ffb5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-CAMLC=ocamlc
-CAMLOPT=ocamlopt
-USE_GL=
-USE_GNOME=
-USE_CC=
-DEBUG=
-CC=cc
-RANLIB=ranlib
-LIBDIR=/usr/lib/ocaml
-BINDIR=/usr/bin
-INSTALLDIR=/usr/lib/ocaml/lablgtk/mathview
-GTKCFLAGS=-I/usr/lib/glib/include -I/usr/X11R6/include -I/usr/lib/ocaml/lablgtk
-GTKLIBS=-ccopt -L/usr/lib -ccopt -L/usr/X11R6/lib -cclib -lgtk -cclib -lgdk -ccopt -rdynamic -cclib -lgmodule -cclib -lglib -cclib -ldl -cclib -lXi -cclib -lXext -cclib -lX11 -cclib -lm
-GTKMATHVIEWLIBS=-ccopt -L/usr/local/lib/gtkmathview -cclib -lgtkmathview 
-GNOMELIBS=
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/configure.mk b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/configure.mk
deleted file mode 100644 (file)
index 73cfc3d..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# makefile for configuring lablGTK_mathview
-
-# Default compilers
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-
-# Default installation directories
-BINDIR = `$(GETBINDIR)`
-INSTALLDIR = $(LIBDIR)/lablgtk/mathview
-
-# Autoconf
-GETLIBDIR = ocamlc -v | grep "^Standard" | sed 's/^.*: *//'
-LIBDIR = `$(GETLIBDIR)`
-GETBINDIR = $(GETLIBDIR) | sed -e 's|/lib/[^/]*$$|/bin|' -e 's|/lib$$|/bin|'
-GETRANLIB = which ranlib 2>/dev/null | sed -e 's|.*/ranlib$$|!|' -e 's/^[^!]*$$/:/' -e 's/!/ranlib/'
-
-ifdef USE_GNOME
-GTKGETCFLAGS = gtk-config --cflags`" -I"`gnome-config --includedir
-GNOMELIBS = `gnome-config --libs gtkxmhtml`
-else
-GTKGETCFLAGS = gtk-config --cflags
-endif
-
-GTKGETLIBS = gtk-config --libs
-
-configure: .depend config.make
-
-.depend:
-       ocamldep *.ml *.mli > .depend
-
-config.make:
-       @echo CAMLC=$(CAMLC) > config.make
-       @echo CAMLOPT=$(CAMLOPT) >> config.make
-       @echo USE_GL=$(USE_GL) >> config.make
-       @echo USE_GNOME=$(USE_GNOME) >> config.make
-       @echo USE_CC=$(USE_CC) >> config.make
-       @echo DEBUG=$(DEBUG) >> config.make
-       @echo CC=$(CC) >> config.make
-       @echo RANLIB=`$(GETRANLIB)` >> config.make
-       @echo LIBDIR=$(LIBDIR) >> config.make
-       @echo BINDIR=`$(GETBINDIR)` >> config.make
-       @echo INSTALLDIR=$(INSTALLDIR) >> config.make
-       @echo GTKCFLAGS=`$(GTKGETCFLAGS)` -I/usr/lib/ocaml/lablgtk >> config.make
-       @echo GTKLIBS=`$(GTKGETLIBS)` | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-       #<CSC>
-       echo GTKMATHVIEWLIBS="-ccopt -L/usr/local/lib/gtkmathview -cclib -lgtkmathview " >> config.make
-       #</CSC>
-       @echo GNOMELIBS=$(GNOMELIBS) | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-       cat config.make
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gMathView.ml
deleted file mode 100644 (file)
index b79c812..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-open Gaux
-open Gtk
-open Gtk_mathview
-open GtkBase
-open GtkMathView
-open GObj
-
-exception ErrorLoadingFile of string;;
-
-class math_view_signals obj = object
-  inherit GContainer.container_signals obj
-  method jump = GtkSignal.connect ~sgn:MathView.Signals.jump obj ~after
-  method clicked = GtkSignal.connect ~sgn:MathView.Signals.clicked obj ~after
-end
-
-class math_view obj = object
- inherit GContainer.container (obj : Gtk_mathview.math_view obj)
- method connect = new math_view_signals obj
- method load ~filename =
-  if not (MathView.load obj ~filename) then raise (ErrorLoadingFile filename)
- method get_selection = MathView.get_selection obj
- method unload = MathView.unload obj
- method dump = MathView.dump obj
- method get_width = MathView.get_width obj
- method get_height = MathView.get_height obj
- method set_adjustments =
-  fun adj1 adj2 ->
-   MathView.set_adjustments obj (GData.as_adjustment adj1)
-   (GData.as_adjustment adj2)
- method get_hadjustment = new GData.adjustment (MathView.get_hadjustment obj)
- method get_vadjustment = new GData.adjustment (MathView.get_vadjustment obj)
- method get_buffer = MathView.get_buffer obj
- method get_frame = new GBin.frame (MathView.get_frame obj)
- method set_font_size = MathView.set_font_size obj
- (*method get_top = MathView.get_top obj
- method set_top = MathView.set_top obj*)
-end
-
-let math_view ?adjustmenth ?adjustmentv ?border_width ?width ?height
- ?packing ?show ()
-=
- let w =
-   MathView.create
-    ?adjustmenth:(may_map ~f:GData.as_adjustment adjustmenth)
-    ?adjustmentv:(may_map ~f:GData.as_adjustment adjustmentv)
-    ()
- in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new math_view w) ~packing ~show
-;;
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtkMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtkMathView.ml
deleted file mode 100644 (file)
index 9ed42b8..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-open Gtk
-open Gtk_mathview
-open Tags
-open GtkBase
-open Gpointer
-
-module MathView = struct
-  let cast w : math_view obj = Object.try_cast w "GtkMathView"
-  external create : Gtk.adjustment optobj -> Gtk.adjustment optobj ->
-   math_view obj = "ml_gtk_math_view_new"
-  let create ~adjustmenth ~adjustmentv () =
-   create (optboxed adjustmenth) (optboxed adjustmentv)
-  external load : [>`math_view] obj -> filename:string -> bool =
-   "ml_gtk_math_view_load"
-  external get_selection : [>`math_view] obj -> string option =
-   "ml_gtk_math_view_get_selection"
-  external unload : [>`math_view] obj -> unit =
-   "ml_gtk_math_view_unload"
-  external dump : [>`math_view] obj -> unit =
-   "ml_gtk_math_view_dump"
-  external get_width : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_width"
-  external get_height : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_height"
-  external set_adjustments : [>`math_view] obj -> Gtk.adjustment obj -> Gtk.adjustment obj -> unit =
-   "ml_gtk_math_view_set_adjustments"
-  external get_hadjustment : [>`math_view] obj -> Gtk.adjustment obj =
-   "ml_gtk_math_view_get_hadjustment"
-  external get_vadjustment : [>`math_view] obj -> Gtk.adjustment obj =
-   "ml_gtk_math_view_get_vadjustment"
-  external get_buffer : [>`math_view] obj -> Gdk.pixmap =
-   "ml_gtk_math_view_get_buffer"
-  external get_frame : [>`math_view] obj -> [`frame] obj =
-   "ml_gtk_math_view_get_frame"
-  external set_font_size : [>`math_view] obj -> int -> unit =
-   "ml_gtk_math_view_set_font_size"
-  (*external get_top : [>`math_view] obj -> (int * int) =
-   "ml_gtk_math_view_get_top"
-  external set_top : [>`math_view] obj -> int -> int -> unit =
-   "ml_gtk_math_view_set_top"*)
-
-  module Signals = struct
-    open GtkSignal
-
-    let jump : ([>`math_view],_) t =
-     let marshal_jump f _ =
-      function
-         [GtkArgv.STRING (Some str)] -> f str
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_jump"
-     in
-      { name = "jump"; marshaller = marshal_jump }
-
-    let clicked : ([>`math_view],_) t =
-     let marshal_clicked f _ =
-      function
-         [] -> f ()
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_clicked"
-     in
-      { name = "clicked"; marshaller = marshal_clicked }
-  end
-end
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtk_mathview.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/gtk_mathview.ml
deleted file mode 100644 (file)
index 745a1ba..0000000
+++ /dev/null
@@ -1 +0,0 @@
-type math_view = [`widget|`container|`bin|`eventbox|`math_view]
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/ml_gtk_mathview.c b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/ml_gtk_mathview.c
deleted file mode 100644 (file)
index b16f68e..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <string.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include <gtkmathview/gtkmathview.h>
-#include <ml_gtk.h>
-
-#include <wrappers.h>
-#include <ml_glib.h>
-#include <ml_gdk.h>
-#include <ml_gtk.h>
-#include <gtk_tags.h>
-
-/* <CSC/>: Next row should be put in a .h of lablgtk. */
-#define GtkAdjustment_val(val) check_cast(GTK_ADJUSTMENT,val)
-
-#define GtkMathView_val(val) check_cast(GTK_MATH_VIEW,val)
-ML_2 (gtk_math_view_new,GtkAdjustment_val, GtkAdjustment_val,Val_GtkWidget_sink)
-ML_2 (gtk_math_view_load, GtkMathView_val, String_val, Val_bool)
-ML_1 (gtk_math_view_unload, GtkMathView_val, Unit)
-ML_1 (gtk_math_view_dump, GtkMathView_val, Unit)
-ML_1 (gtk_math_view_get_width, GtkMathView_val, Val_int)
-ML_1 (gtk_math_view_get_height, GtkMathView_val, Val_int)
-//ML_3 (gtk_math_view_set_top, GtkMathView_val, Int_val, Int_val, Unit)
-ML_3 (gtk_math_view_set_adjustments, GtkMathView_val, GtkAdjustment_val, GtkAdjustment_val, Unit)
-ML_1 (gtk_math_view_get_hadjustment, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_vadjustment, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_buffer, GtkMathView_val, Val_GdkPixmap)
-ML_1 (gtk_math_view_get_frame, GtkMathView_val, Val_GtkWidget)
-ML_2 (gtk_math_view_set_font_size, GtkMathView_val, Int_val, Unit)
-
-/*
-value ml_gtk_math_view_get_top (value arg1)
-{
-   CAMLparam1(arg1);
-   CAMLlocal1 (result);
-   int x, y;
-   gtk_math_view_get_top(GtkMathView_val (arg1), &x, &y);
-   result = alloc(2, 0);
-   Store_field(result, 0, Val_int(x));
-   Store_field(result, 0, Val_int(y));
-   CAMLreturn (result);
-}
-*/
-
-value ml_gtk_math_view_get_selection (value arg1)
-{
-   const char *stringa;
-   stringa = gtk_math_view_get_selection (GtkMathView_val (arg1));
-   return Val_option (stringa, Val_string);
-}
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/Makefile
deleted file mode 100644 (file)
index cc5bd50..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-LABLGTK_DIR = ../../lablgtk-20000829
-LABLGTK_MATHVIEW_DIR = ..
-OCAMLC = ocamlc -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) -I mlmathview
-OCAMLOPT = ocamlopt -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) -I mlmathview
-
-all: test
-opt: test.opt
-
-test: test.cmo
-       $(OCAMLC) -custom -o test lablgtk.cma gtkInit.cmo \
-                  $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cma \
-                  test.cmo \
-                  -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-                  -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
-                  -L/usr/local/lib/gtkmathview -lgtkmathview \
-                  $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o"
-
-test.opt: test.cmx
-       $(OCAMLOPT) -o test.opt lablgtk.cmxa gtkInit.cmx \
-                  $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cmxa \
-                  test.cmx \
-                  -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-                  -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
-                  -L/usr/local/lib/gtkmathview -lgtkmathview \
-                  $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o"
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo:
-       $(OCAMLC) -c $<
-.mli.cmi:
-       $(OCAMLC) -c $<
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o test test.opt
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.ml
deleted file mode 100644 (file)
index e914f4d..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-(******************************************************************************)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 25/09/2000                                 *)
-(*                                                                            *)
-(*     This is a simple test for the OCaml (LablGtk indeed) binding of the    *)
-(*                             MathView widget                                *)
-(******************************************************************************)
-
-(* Callbacks *)
-let jump s =
- print_string ("jump: " ^ s ^ "\n") ;
- flush stdout
-;;
-
-let clicked () =
- print_string "clicked: IT WORKS\n" ;
- flush stdout
-;;
-
-let load mathview () =
- mathview#load "test.xml" ;
- print_string "load: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-exception Ok;;
-let get_selection mathview () =
- let selection =
-  match mathview#get_selection with
-     None -> "NO SELECTION"
-   | Some s -> s
- in
-  print_string ("get_selection: " ^ selection ^ "\n") ;
-  flush stdout
-;;
-
-let unload mathview () =
- mathview#unload ;
- print_string "unload: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let dump mathview () =
- mathview#dump ;
- print_string "dump: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let get_width mathview () =
- print_string ("get_width: " ^ string_of_int (mathview#get_width) ^ "\n") ;
- flush stdout
-;;
-
-let get_height mathview () =
- print_string ("get_height: " ^ string_of_int (mathview#get_height) ^ "\n") ;
- flush stdout
-;;
-
-let set_adjustments mathview () =
- let adj1 = GData.adjustment () in
- let adj2 = GData.adjustment () in
-  mathview#set_adjustments adj1 adj2 ;
-  adj1#set_value ((adj1#lower +. adj1#upper) /. 2.0) ;
-  adj2#set_value ((adj2#lower +. adj2#upper) /. 2.0) ;
-  print_string "set_adjustments: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_hadjustment mathview () =
- let adj = mathview#get_hadjustment in
-  adj#set_value ((adj#lower +. adj#upper) /. 2.0) ;
-  print_string "get_hadjustment: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_vadjustment mathview () =
- let adj = mathview#get_vadjustment in
-  adj#set_value ((adj#lower +. adj#upper) /. 2.0) ;
-  print_string "get_vadjustment: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_buffer mathview () =
- let buffer = mathview#get_buffer in
-  Gdk.Draw.rectangle buffer (Gdk.GC.create buffer) ~x:0 ~y:0
-   ~width:50 ~height:50 ~filled:true () ;
-  print_string "get_buffer: SEEMS TO WORK (hint: force the widget redrawing)\n";
-  flush stdout
-;;
-
-let get_frame mathview () =
- let frame = mathview#get_frame in
-  frame#set_shadow_type `NONE ;
-  print_string "get_frame: SEEMS TO WORK\n" ;
-  flush stdout
-;;
-
-let set_font_size mathview () =
- mathview#set_font_size 24 ;
- print_string "set_font_size: FONT IS NOW 24\n" ;
- flush stdout
-;;
-(* Widget creation *)
-let main_window = GWindow.window ~title:"GtkMathView test" () in
-let vbox = GPack.vbox ~packing:main_window#add () in
-let sw = GBin.scrolled_window ~width:50 ~height:50 ~packing:vbox#pack () in
-(*let mathview = GMathView.math_view ~packing:sw#add_with_viewport ~width:50 ~height:50 () in*)
-let mathview = GMathView.math_view ~packing:sw#add ~width:50 ~height:50 () in
-let hbox = GPack.hbox ~packing:vbox#pack () in
-let button_load = GButton.button ~label:"load" ~packing:hbox#pack () in
-let button_get_selection = GButton.button ~label:"get_selection" ~packing:hbox#pack () in
-let button_unload = GButton.button ~label:"unload" ~packing:hbox#pack () in
-let button_dump = GButton.button ~label:"dump" ~packing:hbox#pack () in
-let button_get_width = GButton.button ~label:"get_width" ~packing:hbox#pack () in
-let button_get_height = GButton.button ~label:"get_height" ~packing:hbox#pack () in
-let button_set_adjustments = GButton.button ~label:"set_adjustments" ~packing:hbox#pack () in
-let button_get_hadjustment = GButton.button ~label:"get_hadjustment" ~packing:hbox#pack () in
-let button_get_vadjustment = GButton.button ~label:"get_vadjustment" ~packing:hbox#pack () in
-let button_get_buffer = GButton.button ~label:"get_buffer" ~packing:hbox#pack () in
-let button_get_frame = GButton.button ~label:"get_frame" ~packing:hbox#pack () in
-let button_set_font_size = GButton.button ~label:"set_font_size" ~packing:hbox#pack () in
-(* Signals connection *)
-ignore(button_load#connect#clicked (load mathview)) ;
-ignore(button_get_selection#connect#clicked (get_selection mathview)) ;
-ignore(button_unload#connect#clicked (unload mathview)) ;
-ignore(button_dump#connect#clicked (dump mathview)) ;
-ignore(button_get_width#connect#clicked (get_width mathview)) ;
-ignore(button_get_height#connect#clicked (get_height mathview)) ;
-ignore(button_set_adjustments#connect#clicked (set_adjustments mathview)) ;
-ignore(button_get_hadjustment#connect#clicked (get_hadjustment mathview)) ;
-ignore(button_get_vadjustment#connect#clicked (get_vadjustment mathview)) ;
-ignore(button_get_buffer#connect#clicked (get_buffer mathview)) ;
-ignore(button_get_frame#connect#clicked (get_frame mathview)) ;
-ignore(button_set_font_size#connect#clicked (set_font_size mathview)) ;
-ignore(mathview#connect#jump jump) ;
-ignore(mathview#connect#clicked clicked) ;
-(* Main Loop *)
-main_window#show () ;
-GMain.Main.main ()
-;;
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.xml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0/test/test.xml
deleted file mode 100644 (file)
index b0f8c15..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-<math display="block">
-  <mrow helm:xref="SELECTION OK">
-    <mo>&int;</mo>
-    <mo>&ApplyFunction;</mo>
-    <mfrac>
-      <mrow>
-        <mrow>
-          <mi>a</mi>
-         <mo>&InvisibleTimes;</mo>
-         <mi>x</mi>
-       </mrow>
-       <mo>+</mo>
-       <mi>b</mi>
-      </mrow>
-      <mrow>
-        <msup>
-         <mi>x</mi>
-         <mn>2</mn>
-       </msup>
-       <mo>+</mo>
-       <mrow>
-         <mi>p</mi>
-         <mo>&InvisibleTimes;</mo>
-         <mi>x</mi>
-       </mrow>
-       <mo>+</mo>
-       <mi>q</mi>
-      </mrow>
-    </mfrac>
-  </mrow>
-  <mo fontstyle="italic">d</mo>
-  <mi>x</mi>
-  <mo>=</mo>
-  <mrow>
-    <mrow>
-      <mfrac><mi>a</mi><mn>2</mn></mfrac>
-      <mo>&InvisibleTimes;</mo>
-      <mrow>
-        <mi>ln</mi>
-       <mo>&ApplyFunction;</mo>
-       <mrow>
-         <mo>(</mo>
-         <mrow>
-           <msup><mi>x</mi><mn>2</mn></msup>
-           <mo>+</mo>
-           <mrow>
-             <mi>p</mi>
-             <mo>&InvisibleTimes;</mo>
-             <mi>x</mi>
-           </mrow>
-           <mo>+</mo>
-           <mi>q</mi>
-         </mrow>
-         <mo>)</mo>
-       </mrow>
-      </mrow>
-    </mrow>
-    <mo>+</mo>
-    <mrow>
-      <mfrac>
-        <mrow>
-         <mrow>
-           <mn>2</mn>
-           <mo>&InvisibleTimes;</mo>
-           <mi>b</mi>
-         </mrow>
-         <mo>-</mo>
-         <mrow>
-           <mi>a</mi>
-           <mo>&InvisibleTimes;</mo>
-           <mi>p</mi>
-         </mrow>
-       </mrow>
-       <msqrt>
-         <mrow>
-           <mrow>
-             <mn>4</mn>
-             <mo>&InvisibleTimes;</mo>
-             <mi>q</mi>
-           </mrow>
-           <mo>-</mo>
-           <msup>
-             <mi>p</mi>
-             <mn>2</mn>
-           </msup>
-         </mrow>
-       </msqrt>
-      </mfrac>
-      <mo>&InvisibleTimes;</mo>
-      <mrow>
-        <mi xlink:href="JUMPS WORK">arctg</mi>
-       <mo>&ApplyFunction;</mo>
-       <mfrac>
-         <mrow>
-           <mrow>
-             <mn>2</mn>
-             <mo>&InvisibleTimes;</mo>
-             <mi>x</mi>
-           </mrow>
-           <mo>+</mo>
-           <mi>p</mi>
-         </mrow>
-         <msqrt>
-           <mrow>
-             <mrow>
-               <mn>4</mn>
-               <mo>&InvisibleTimes;</mo>
-               <mi>q</mi>
-             </mrow>
-             <mo>-</mo>
-             <msup>
-               <mi>p</mi>
-               <mn>2</mn>
-             </msup>
-           </mrow>
-         </msqrt>
-       </mfrac>
-      </mrow>
-    </mrow>
-    <mo>+</mo>
-    <mi>c</mi>
-  </mrow>  
-</math>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0-1.spec b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0-1.spec
deleted file mode 100644 (file)
index 59a3298..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-Summary: GtkMathView : the binding for lablgtk of the GtkMathView widget
-Name: lablgtk-20000829_gtkmathview
-Version: 0.2.0
-Release: 1
-Copyright: LGPL
-Group: Development/Libraries
-Requires: lablgtk_20000829 gtkmathview
-Source: www.cs.unibo.it:/~lpadovan/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.1.0.tar.gz
-%description
-GtkMathView is the binding for lablgtk of the GtkMathView widget.
-
-%prep
-%setup
-
-%build
-make
-make opt
-
-%install
-make install
-
-%files
-%doc COPYING
-
-/usr/lib/ocaml/lablgtk/mathview
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0.tar.gz b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0.tar.gz
deleted file mode 100644 (file)
index 489f3c7..0000000
Binary files a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0.tar.gz and /dev/null differ
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/.cvsignore
deleted file mode 100644 (file)
index cd9e250..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.cmx *.cma *.cmxa config.make
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/.depend b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/.depend
deleted file mode 100644 (file)
index 600449b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-gMathView.cmo: gtkMathView.cmo gtk_mathview.cmo 
-gMathView.cmx: gtkMathView.cmx gtk_mathview.cmx 
-gtkMathView.cmo: gtk_mathview.cmo 
-gtkMathView.cmx: gtk_mathview.cmx 
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/COPYING b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/COPYING
deleted file mode 100644 (file)
index 20b480a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-This library is made available under the LGPL.
-You should have got a copy of the LGPL with Objective Caml.
-The LGPL applies to all the files in this directory, but not in
-subdirectories.
-
-For the test subdirectory, there is no specific licensing policy,
-but you may freely take inspiration from the code, and copy parts of
-it in your application.
-
-Author:
-       Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/Makefile
deleted file mode 100644 (file)
index d5a1685..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-# Makefile for lablgtk_mathview.
-
-LABLGTKDIR = /usr/lib/ocaml/lablgtk
-MINIDOMDIR = ./minidom
-MLFLAGS += -I $(LABLGTKDIR) -I $(MINIDOMDIR)
-
-TARGETS = ml_gtk_mathview.o lablgtkmathview.cma
-
-all: Minidom $(TARGETS)
-
-opt: Minidom.opt lablgtkmathviewopt
-
-Minidom:
-       cd minidom ; make
-
-Minidom.opt:
-       cd minidom ; make opt
-
-configure:
-       @rm -f config.make
-       @$(MAKE) --no-print-directory -f configure.mk
-
-depend:
-       @rm -f .depend
-       @$(MAKE) --no-print-directory -f configure.mk .depend
-
-.depend config.make:
-       @$(MAKE) --no-print-directory -f configure.mk
-
-COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-
-include config.make
-
-INSTALLDIR = $(LIBDIR)/lablgtk/mathview
-
-MLLIBS = lablgtkmathview.cma
-CLIBS = 
-MLLINK = unix.cma str.cma
-
-ifdef DEBUG
-CFLAGS = -g $(GTKCFLAGS)
-MLLINK += -cclib -lcamlrund
-MLFLAGS += -g
-else
-CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS)
-endif
-
-THFLAGS = -thread
-THLINK = unix.cma threads.cma
-
-ifdef USE_CC
-CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS)
-else
-CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)"
-endif
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def
-.c.o:
-       $(CCOMPILER) $<
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-.var.h:
-       ./var2def < $< > $@
-.var.c:
-       ./var2conv < $< > $@
-
-# Targets
-COBJS = ml_gtk_mathview.o
-MLOBJS = gtk_mathview.cmo gtkMathView.cmo gMathView.cmo
-ALLOBJS = $(MLOBJS)
-
-lablgtkmathviewopt: $(CLIBS) $(MLLIBS:.cma=.cmxa)
-
-install:
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       if test -f *.mli ; then cp *.mli $(INSTALLDIR) ; fi
-       cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR)
-       cp $(MLLIBS) $(INSTALLDIR)
-       cp $(COBJS) $(INSTALLDIR)
-       if test ! -z "$(CLIBS)" ; then cp $(CLIBS) $(INSTALLDIR) ; fi
-       if test -f lablgtkmathview.cmxa; then \
-          cp $(MLLIBS:.cma=.cmxa) $(MLLIBS:.cma=.a) \
-             $(INSTALLDIR); fi
-       cd minidom ; make install
-
-lablgtkmathview.cma: $(MLOBJS)
-       $(LINKER) -a -custom -o $@ $(MLOBJS) $(GTKLIBS) $(GTKMATHVIEWLIBS)
-lablgtkmathview.cmxa: $(MLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) $(GTKLIBS) $(GTKMATHVIEWLIBS)
-
-ml_gtk.o: $(LABLGTKDIR)/gtk_tags.c $(LABLGTKDIR)/gtk_tags.h \
-          $(LABLGTKDIR)/ml_gtk.h $(LABLGTKDIR)/ml_gdk.h $(LABLGTKDIR)/wrappers.h
-
-clean:
-       rm -f *.cm* *.o *.a *_tags.[ch] $(TARGETS)
-       cd minidom ; make clean
-
-include .depend
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/configure.mk b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/configure.mk
deleted file mode 100644 (file)
index c5fd711..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# makefile for configuring lablGTK_mathview
-
-# Default compilers
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-
-# Default installation directories
-BINDIR = `$(GETBINDIR)`
-INSTALLDIR = $(LIBDIR)/lablgtk/mathview
-
-# Autoconf
-GETLIBDIR = ocamlc -v | grep "^Standard" | sed 's/^.*: *//'
-LIBDIR = `$(GETLIBDIR)`
-GETBINDIR = $(GETLIBDIR) | sed -e 's|/lib/[^/]*$$|/bin|' -e 's|/lib$$|/bin|'
-GETRANLIB = which ranlib 2>/dev/null | sed -e 's|.*/ranlib$$|!|' -e 's/^[^!]*$$/:/' -e 's/!/ranlib/'
-
-ifdef USE_GNOME
-GTKGETCFLAGS = gtk-config --cflags`" -I"`gnome-config --includedir" "`xml-config --cflags`" "`gtkmathview-config --cflags
-GNOMELIBS = `gnome-config --libs gtkxmhtml`
-else
-GTKGETCFLAGS = gtk-config --cflags`" "`xml-config --cflags`" "`gtkmathview-config --cflags
-endif
-
-GTKGETLIBS = gtk-config --libs
-
-configure: .depend config.make
-
-.depend:
-       ocamldep *.ml *.mli > .depend
-
-config.make:
-       @echo CAMLC=$(CAMLC) > config.make
-       @echo CAMLOPT=$(CAMLOPT) >> config.make
-       @echo USE_GL=$(USE_GL) >> config.make
-       @echo USE_GNOME=$(USE_GNOME) >> config.make
-       @echo USE_CC=$(USE_CC) >> config.make
-       @echo DEBUG=$(DEBUG) >> config.make
-       @echo CC=$(CC) >> config.make
-       @echo RANLIB=`$(GETRANLIB)` >> config.make
-       @echo LIBDIR=$(LIBDIR) >> config.make
-       @echo BINDIR=`$(GETBINDIR)` >> config.make
-       @echo INSTALLDIR=$(INSTALLDIR) >> config.make
-       @echo GTKCFLAGS=`$(GTKGETCFLAGS)` -I/usr/lib/ocaml/lablgtk >> config.make
-       @echo GTKLIBS=`$(GTKGETLIBS)` | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-       #<CSC>
-       echo GTKMATHVIEWLIBS="-ccopt \""`gtkmathview-config --libs`"\"" >> config.make
-       #</CSC>
-       @echo GNOMELIBS=$(GNOMELIBS) | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-       cat config.make
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/gMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/gMathView.ml
deleted file mode 100644 (file)
index 87f0d50..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-open Gaux
-open Gtk
-open Gtk_mathview
-open GtkBase
-open GtkMathView
-open GObj
-
-exception ErrorLoadingFile of string;;
-exception ErrorWritingFile of string;;
-
-class math_view_signals obj = object
-  inherit GContainer.container_signals obj
-  method clicked = GtkSignal.connect ~sgn:MathView.Signals.clicked obj ~after
-  method jump = GtkSignal.connect ~sgn:MathView.Signals.jump obj ~after
-  method selection_changed =
-  GtkSignal.connect ~sgn:MathView.Signals.selection_changed obj ~after
-end
-
-class math_view obj = object
- inherit GContainer.container (obj : Gtk_mathview.math_view obj)
- method connect = new math_view_signals obj
- method load ~filename =
-  if not (MathView.load obj ~filename) then raise (ErrorLoadingFile filename)
- method unload = MathView.unload obj
- method get_selection = MathView.get_selection obj
- method set_selection = MathView.set_selection obj
- method get_width = MathView.get_width obj
- method get_height = MathView.get_height obj
- method get_top = MathView.get_top obj
- method set_top = MathView.set_top obj
- method set_adjustments =
-  fun adj1 adj2 ->
-   MathView.set_adjustments obj (GData.as_adjustment adj1)
-   (GData.as_adjustment adj2)
- method get_hadjustment = new GData.adjustment (MathView.get_hadjustment obj)
- method get_vadjustment = new GData.adjustment (MathView.get_vadjustment obj)
- method get_buffer = MathView.get_buffer obj
- method get_frame = new GBin.frame (MathView.get_frame obj)
- method set_font_size = MathView.set_font_size obj
- method get_font_size = MathView.get_font_size obj
- method set_anti_aliasing = MathView.set_anti_aliasing obj
- method get_anti_aliasing = MathView.get_anti_aliasing obj
- method set_kerning = MathView.set_kerning obj
- method get_kerning = MathView.get_kerning obj
- method set_log_verbosity = MathView.set_log_verbosity obj
- method get_log_verbosity = MathView.get_log_verbosity obj
- method export_to_postscript ~filename =
-  if not (MathView.export_to_postscript obj ~filename) then
-   raise (ErrorWritingFile filename)
-end
-
-let math_view ?adjustmenth ?adjustmentv ?(use_t1_lib=false) ?border_width
- ?width ?height ?packing ?show ()
-=
- let w =
-   MathView.create
-    ?adjustmenth:(may_map ~f:GData.as_adjustment adjustmenth)
-    ?adjustmentv:(may_map ~f:GData.as_adjustment adjustmentv)
-    ?use_t1_lib
-    ()
- in
-  Container.set w ?border_width ?width ?height;
-  pack_return (new math_view w) ~packing ~show
-;;
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/gtkMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/gtkMathView.ml
deleted file mode 100644 (file)
index 97ae38e..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-open Gtk
-open Gtk_mathview
-open Tags
-open GtkBase
-open Gpointer
-
-external mDOMNode_of_boxed_option :
- Gpointer.boxed option -> Minidom.mDOMNode =
-  "ml_gtk_math_view_mDOMNode_of_bodex_option"
-
-external mDOMNode_option_of_boxed_option :
- Gpointer.boxed option -> Minidom.mDOMNode option =
-  "ml_gtk_math_view_mDOMNode_option_of_bodex_option"
-
-module MathView = struct
-  let cast w : math_view obj = Object.try_cast w "GtkMathView"
-  external create : Gtk.adjustment optobj -> Gtk.adjustment optobj -> bool ->
-   math_view obj = "ml_gtk_math_view_new"
-  let create ~adjustmenth ~adjustmentv ~use_t1_lib () =
-   create (optboxed adjustmenth) (optboxed adjustmentv) use_t1_lib
-  external load : [>`math_view] obj -> filename:string -> bool =
-   "ml_gtk_math_view_load"
-  external unload : [>`math_view] obj -> unit =
-   "ml_gtk_math_view_unload"
-  external get_selection : [>`math_view] obj -> Minidom.mDOMNode option =
-   "ml_gtk_math_view_get_selection"
-  external set_selection : [>`math_view] obj -> Minidom.mDOMNode option -> unit=
-   "ml_gtk_math_view_set_selection"
-  external get_width : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_width"
-  external get_height : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_height"
-  external get_top : [>`math_view] obj -> (int * int) =
-   "ml_gtk_math_view_get_top"
-  external set_top : [>`math_view] obj -> int -> int -> unit =
-   "ml_gtk_math_view_set_top"
-  external set_adjustments : [>`math_view] obj -> Gtk.adjustment obj -> Gtk.adjustment obj -> unit =
-   "ml_gtk_math_view_set_adjustments"
-  external get_hadjustment : [>`math_view] obj -> Gtk.adjustment obj =
-   "ml_gtk_math_view_get_hadjustment"
-  external get_vadjustment : [>`math_view] obj -> Gtk.adjustment obj =
-   "ml_gtk_math_view_get_vadjustment"
-  external get_buffer : [>`math_view] obj -> Gdk.pixmap =
-   "ml_gtk_math_view_get_buffer"
-  external get_frame : [>`math_view] obj -> [`frame] obj =
-   "ml_gtk_math_view_get_frame"
-  external set_font_size : [>`math_view] obj -> int -> unit =
-   "ml_gtk_math_view_set_font_size"
-  external get_font_size : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_font_size"
-  external set_anti_aliasing : [>`math_view] obj -> bool -> unit =
-   "ml_gtk_math_view_set_anti_aliasing"
-  external get_anti_aliasing : [>`math_view] obj -> bool =
-   "ml_gtk_math_view_get_anti_aliasing"
-  external set_kerning : [>`math_view] obj -> bool -> unit =
-   "ml_gtk_math_view_set_kerning"
-  external get_kerning : [>`math_view] obj -> bool =
-   "ml_gtk_math_view_get_kerning"
-  external set_log_verbosity : [>`math_view] obj -> int -> unit =
-   "ml_gtk_math_view_set_log_verbosity"
-  external get_log_verbosity : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_log_verbosity"
-  external export_to_postscript : [>`math_view] obj -> filename:string -> bool =
-   "ml_gtk_math_view_export_to_postscript"
-
-  module Signals = struct
-    open GtkSignal
-
-    let clicked : ([>`math_view],_) t =
-     let marshal_clicked f _ =
-      function
-         [GtkArgv.POINTER node] -> f (mDOMNode_of_boxed_option node)
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_clicked"
-     in
-      { name = "clicked"; marshaller = marshal_clicked }
-
-    let jump : ([>`math_view],_) t =
-     let marshal_jump f _ =
-      function
-         [GtkArgv.POINTER node] -> f (mDOMNode_of_boxed_option node)
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_jump"
-     in
-      { name = "jump"; marshaller = marshal_jump }
-
-    let selection_changed : ([>`math_view],_) t =
-     let marshal_selection_changed f _ =
-      function
-         [GtkArgv.POINTER node] -> f (mDOMNode_option_of_boxed_option node)
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_selection_changed"
-     in
-      { name = "selection_changed"; marshaller = marshal_selection_changed }
-  end
-end
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/gtk_mathview.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/gtk_mathview.ml
deleted file mode 100644 (file)
index 745a1ba..0000000
+++ /dev/null
@@ -1 +0,0 @@
-type math_view = [`widget|`container|`bin|`eventbox|`math_view]
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/.cvsignore
deleted file mode 100644 (file)
index 84bdd8e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.cmx test test.opt
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/Makefile
deleted file mode 100644 (file)
index 7463870..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-LIBDIR = /usr/lib/ocaml
-INSTALLDIR = $(LIBDIR)/lablgtk/mathview/minidom
-OBJECTS = minidom.cmi minidom.cmo minidom.cmx minidom.mli ml_minidom.h \
-          ml_minidom.o minidom.o
-
-all: test
-
-opt: test.opt
-
-ml_minidom.o: ml_minidom.c
-       gcc -c -I/usr/lib/ocaml/caml/ `glib-config --cflags` `xml-config --cflags` `gtkmathview-config --cflags` $<
-
-minidom.cmi: minidom.mli
-       ocamlc -c $<
-
-minidom.cmo: minidom.ml minidom.cmi
-       ocamlc -c $<
-
-minidom.cmx: minidom.ml minidom.cmi
-       ocamlopt -c $<
-
-test.cmo: test.ml minidom.cmo
-       ocamlc -c test.ml
-
-test.cmx: test.ml minidom.cmx
-       ocamlopt -c test.ml
-
-test: test.cmo minidom.cmo ml_minidom.o
-       ocamlc -custom -o test minidom.cmo test.cmo ml_minidom.o \
-        -cclib "`xml-config --libs`" -cclib "`glib-config --libs`" \
-        -cclib "`gtkmathview-config --libs`"
-
-test.opt: test.cmx minidom.cmx ml_minidom.o
-       ocamlopt -o test.opt minidom.cmx test.cmx ml_minidom.o \
-        -cclib "`xml-config --libs`" -cclib "`glib-config --libs`" \
-        -cclib "`gtkmathview-config --libs`"
-
-install:
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(OBJECTS) $(INSTALLDIR)
-
-clean:
-       rm -f *.o *.cm? test test.opt
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/minidom.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/minidom.ml
deleted file mode 100644 (file)
index 31e677b..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-
-type mDOMString
-type mDOMDoc
-type mDOMNode
-type mDOMAttr
-type mDOMEntity
-
-external string_of_mDOMString : mDOMString -> string = "ml_string_of_mDOMString"
-external mDOMString_of_string : string -> mDOMString = "ml_mDOMString_of_string"
-external mDOMString_eq : string -> string -> bool = "ml_mDOMString_eq"
-
-external doc_load : string -> mDOMDoc = "ml_doc_load"
-external doc_unload : mDOMDoc -> unit = "ml_doc_unload"
-
-external doc_new : mDOMString -> mDOMDoc = "ml_doc_new"
-external doc_get_root_node : mDOMDoc -> mDOMNode = "ml_doc_get_root_node"
-
-external doc_add_entity : mDOMDoc -> mDOMString -> mDOMString -> mDOMEntity = "ml_doc_add_entity"
-external doc_get_entity : mDOMDoc -> mDOMString -> mDOMEntity option = "ml_doc_get_entity"
-external doc_get_predefined_entity : mDOMDoc -> mDOMString -> mDOMEntity option = "ml_doc_get_predefined_entity"
-external entity_get_content : mDOMEntity -> mDOMString = "ml_entity_get_content"
-
-external node_is_text  : mDOMNode -> bool = "ml_node_is_text"
-external node_is_element : mDOMNode -> bool = "ml_node_is_element"
-external node_is_blank : mDOMNode -> bool = "ml_node_is_blank"
-external node_is_entity_ref : mDOMNode -> bool = "ml_node_is_entity_ref"
-external node_get_type : mDOMNode -> int = "ml_node_get_type"
-external node_get_name : mDOMNode -> mDOMString option = "ml_node_get_name"
-external node_get_ns_uri : mDOMNode -> mDOMString option = "ml_node_get_ns_uri"
-external node_get_attribute : mDOMNode -> mDOMString -> mDOMString option = "ml_node_get_attribute"
-external node_get_attribute_ns : mDOMNode -> mDOMString -> mDOMString -> mDOMString option = "ml_node_get_attribute_ns"
-external node_get_content : mDOMNode -> mDOMString option = "ml_node_get_content"
-external node_get_parent : mDOMNode -> mDOMNode option = "ml_node_get_parent"
-external node_get_prev_sibling : mDOMNode -> mDOMNode option = "ml_node_get_prev_sibling"
-external node_get_next_sibling : mDOMNode -> mDOMNode option = "ml_node_get_next_sibling"
-external node_get_first_child : mDOMNode -> mDOMNode option = "ml_node_get_first_child"
-external node_get_first_attribute : mDOMNode -> mDOMAttr option = "ml_node_get_first_attribute"
-external node_is_first : mDOMNode -> bool = "ml_node_is_first"
-external node_is_last : mDOMNode -> bool = "ml_node_is_last"
-
-external attr_get_name : mDOMAttr -> mDOMString option = "ml_attr_get_name"
-external attr_get_ns_uri : mDOMAttr -> mDOMString option = "ml_attr_get_ns_uri"
-external attr_get_value : mDOMAttr -> mDOMString option = "ml_attr_get_value"
-external attr_get_prev_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_prev_sibling"
-external attr_get_next_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_next_sibling"
-external attr_get_parent : mDOMAttr -> mDOMNode option = "ml_attr_get_parent"
-
-let rec node_list_of_node_first =
-  function None -> []
-  |        Some node -> node :: (node_list_of_node_first (node_get_next_sibling node))
-
-let rec attr_list_of_attr_first =
-  function None -> []
-  |        Some attr -> attr :: (attr_list_of_attr_first (attr_get_next_sibling attr))
-  
-let node_get_children node =
-  (node_list_of_node_first (node_get_first_child node))
-
-let node_get_attributes node =
-  (attr_list_of_attr_first (node_get_first_attribute node))
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/minidom.mli b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/minidom.mli
deleted file mode 100644 (file)
index 0b65595..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-
-type mDOMString
-type mDOMDoc
-type mDOMNode
-type mDOMAttr
-type mDOMEntity
-
-external string_of_mDOMString : mDOMString -> string = "ml_string_of_mDOMString"
-external mDOMString_of_string : string -> mDOMString = "ml_mDOMString_of_string"
-external mDOMString_eq : string -> string -> bool = "ml_mDOMString_eq"
-
-external doc_load : string -> mDOMDoc = "ml_doc_load"
-external doc_unload : mDOMDoc -> unit = "ml_doc_unload"
-
-external doc_new : mDOMString -> mDOMDoc = "ml_doc_new"
-external doc_get_root_node : mDOMDoc -> mDOMNode = "ml_doc_get_root_node"
-
-external doc_add_entity : doc:mDOMDoc -> name:mDOMString -> content:mDOMString -> mDOMEntity = "ml_doc_add_entity"
-external doc_get_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_entity"
-external doc_get_predefined_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_predefined_entity"
-external entity_get_content : mDOMEntity -> mDOMString = "ml_entity_get_content"
-
-external node_is_text  : mDOMNode -> bool = "ml_node_is_text"
-external node_is_element : mDOMNode -> bool = "ml_node_is_element"
-external node_is_blank : mDOMNode -> bool = "ml_node_is_blank"
-external node_is_entity_ref : mDOMNode -> bool = "ml_node_is_entity_ref"
-external node_get_type : mDOMNode -> int = "ml_node_get_type"
-external node_get_name : mDOMNode -> mDOMString option = "ml_node_get_name"
-external node_get_ns_uri : mDOMNode -> mDOMString option = "ml_node_get_ns_uri"
-external node_get_attribute : node:mDOMNode -> name:mDOMString -> mDOMString option = "ml_node_get_attribute"
-external node_get_attribute_ns : node:mDOMNode -> name:mDOMString -> ns_uri:mDOMString -> mDOMString option = "ml_node_get_attribute_ns"
-external node_get_content : mDOMNode -> mDOMString option = "ml_node_get_content"
-external node_get_parent : mDOMNode -> mDOMNode option = "ml_node_get_parent"
-external node_get_prev_sibling : mDOMNode -> mDOMNode option = "ml_node_get_prev_sibling"
-external node_get_next_sibling : mDOMNode -> mDOMNode option = "ml_node_get_next_sibling"
-external node_get_first_child : mDOMNode -> mDOMNode option = "ml_node_get_first_child"
-external node_get_first_attribute : mDOMNode -> mDOMAttr option = "ml_node_get_first_attribute"
-external node_is_first : mDOMNode -> bool = "ml_node_is_first"
-external node_is_last : mDOMNode -> bool = "ml_node_is_last"
-
-external attr_get_name : mDOMAttr -> mDOMString option = "ml_attr_get_name"
-external attr_get_ns_uri : mDOMAttr -> mDOMString option = "ml_attr_get_ns_uri"
-external attr_get_value : mDOMAttr -> mDOMString option = "ml_attr_get_value"
-external attr_get_prev_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_prev_sibling"
-external attr_get_next_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_next_sibling"
-external attr_get_parent : mDOMAttr -> mDOMNode option = "ml_attr_get_parent"
-
-val node_get_children : mDOMNode -> mDOMNode list
-val node_get_attributes : mDOMNode -> mDOMAttr list
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/ml_minidom.c b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/ml_minidom.c
deleted file mode 100644 (file)
index 1062614..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-
-#include <assert.h>
-#include <mlvalues.h>
-#include <memory.h>
-
-#include "minidom.h"
-
-#define Val_ptr(p)        ((value) (p))
-#define Val_option(p,f)   ((p != NULL) ? ml_some(f(p)) : Val_unit)
-#define Val_mDOMString(s) (copy_string((char*) (s)))
-#define mDOMString_val(v) ((mDOMStringRef) String_val(v))
-
-static value
-ml_some(value v)
-{
-  CAMLparam1(v);
-  value ret = alloc_small(1,0);
-  Field(ret,0) = v;
-  CAMLreturn(ret);
-}
-
-value
-ml_string_of_mDOMString(value s)
-{
-  CAMLparam1(s);
-  CAMLreturn(s);
-}
-
-value
-ml_mDOMString_of_string(value s)
-{
-  CAMLparam1(s);
-  CAMLreturn(s);
-}
-
-value
-ml_doc_load(value file_name)
-{
-  mDOMDocRef doc_ref;
-
-  CAMLparam1(file_name);
-
-  doc_ref = mdom_load(String_val(file_name), FALSE, NULL);
-  if (doc_ref == NULL) failwith("minidom: could not load document");
-
-  CAMLreturn((value) doc_ref);
-}
-
-value
-ml_doc_unload(value doc)
-{
-  CAMLparam1(doc);
-
-  mdom_unload((mDOMDocRef) doc);
-
-  CAMLreturn(Val_unit);
-}
-
-value
-ml_doc_new(value s)
-{
-  mDOMDocRef doc_ref;
-
-  CAMLparam1(s);
-
-  doc_ref = mdom_doc_new(mDOMString_val(s));
-  if (doc_ref == NULL) failwith("minidom: could not create new document");
-
-  CAMLreturn((value) doc_ref);
-}
-
-
-value
-ml_doc_get_root_node(value doc)
-{
-  mDOMNodeRef root;
-
-  CAMLparam1(doc);
-  root = mdom_doc_get_root_node((mDOMDocRef) doc);
-  if (root == NULL) failwith("minidom: document has no root node!");
-
-  CAMLreturn((value) root);
-}
-
-value
-ml_doc_add_entity(value doc, value name, value content)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam3(doc, name, content);
-  ent = mdom_doc_add_entity((mDOMDocRef) doc, mDOMString_val(name), mDOMString_val(content));
-  if (ent == NULL) failwith("minidom: could not add entity");
-
-  CAMLreturn((value) ent);
-}
-
-value
-ml_doc_get_entity(value doc, value name)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam2(doc, name);
-  ent = mdom_doc_get_entity((mDOMDocRef) doc, mDOMString_val(name));
-
-  CAMLreturn(Val_option(ent, Val_ptr));
-}
-
-value
-ml_doc_get_predefined_entity(value name)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam1(name);
-  ent = mdom_get_predefined_entity(mDOMString_val(name));
-
-  CAMLreturn(Val_option(ent, Val_ptr));
-}
-
-value
-ml_entity_get_content(value ent)
-{
-  CAMLparam1(ent);
-  CAMLreturn(Val_mDOMString(mdom_entity_get_content((mDOMEntityRef) ent)));
-}
-
-value
-ml_node_is_text(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_text((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_element(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_element((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_blank(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_blank((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_entity_ref(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_entity_ref((mDOMNodeRef) node)));
-}
-
-value
-ml_node_get_type(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_int(mdom_node_get_type((mDOMNodeRef) node)));
-}
-
-value
-ml_node_get_name(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_name((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_content(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_content((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_ns_uri(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_ns_uri((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_attribute(value node, value name)
-{
-  CAMLparam2(node,name);
-  CAMLreturn(Val_option(mdom_node_get_attribute((mDOMNodeRef) node, String_val(name)), Val_mDOMString));
-}
-
-value
-ml_node_get_attribute_ns(value node, value name, value ns_uri)
-{
-  CAMLparam2(node,name);
-  CAMLreturn(Val_option(mdom_node_get_attribute_ns((mDOMNodeRef) node,
-                                                  String_val(name),
-                                                  String_val(ns_uri)), Val_mDOMString));
-}
-
-value
-ml_node_get_parent(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_parent((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_prev_sibling(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_prev_sibling((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_next_sibling(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_next_sibling((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_first_child(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_first_child((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_first_attribute(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_first_attribute((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_is_first(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_first((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_last(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_last((mDOMNodeRef) node)));
-}
-
-value
-ml_attr_get_name(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_name((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_ns_uri(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_ns_uri((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_value(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_value((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_prev_sibling(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_prev_sibling((mDOMAttrRef) attr), Val_ptr));
-}
-
-value
-ml_attr_get_next_sibling(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_next_sibling((mDOMAttrRef) attr), Val_ptr));
-}
-
-value
-ml_attr_get_parent(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_parent((mDOMAttrRef) attr), Val_ptr));
-}
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/ml_minidom.h b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/ml_minidom.h
deleted file mode 100644 (file)
index cf1be3a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#define Val_ptr(p)        ((value) (p))
-#define Val_option(p,f)   ((p != NULL) ? ml_some(f(p)) : Val_unit)
-#define Val_mDOMString(s) (copy_string((char*) (s)))
-#define mDOMString_val(v) ((mDOMStringRef) String_val(v))
-#define mDOMNode_val(v) ((mDOMNodeRef) v)
-
-#define mDOMNode_option_mDOMNodeRef(p) (((p) != NULL) ? ml_some((value) (p)) : Val_unit)
-#define mDOMNodeRef_mDOMNode_option(v) ((v == Val_unit) ? NULL : (mDOMNodeRef)Field((v),0))
-#define Val_mDOMNodeRef(p)             (mDOMNode_option_mDOMNodeRef(p))
-#define mDOMNodeRef_val(v)             (mDOMNodeRef_mDOMNode_option(v))
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/test.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/test.ml
deleted file mode 100644 (file)
index 3c7a092..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-
-let doc = Minidom.doc_load "test.xml"
-
-let root = Minidom.doc_get_root_node doc
-
-let check_attribute_ns attr =
-  Printf.printf "\n\n";
-  let ns_uri = Minidom.attr_get_ns_uri attr
-  and attr_name = Minidom.attr_get_name attr
-  and attr_value = Minidom.attr_get_value attr
-  and parent = Minidom.attr_get_parent attr
-  in
-  match parent,ns_uri,attr_name,attr_value with
-    Some parent_node,Some uri,Some attribute_name,Some attribute_value ->
-      let attr_value = Minidom.node_get_attribute_ns parent_node attribute_name uri
-      in begin
-        match attr_value with
-          Some attr1 ->
-           Printf.printf "found the attribute with ns %s (was %s)\n"
-              (Minidom.string_of_mDOMString attr1) (Minidom.string_of_mDOMString attribute_value)
-        | None ->
-           Printf.printf "attribute not found (uri was %s)!!!!\n" (Minidom.string_of_mDOMString uri)
-      end
-  | _ ->
-      Printf.printf "parent_node == NULL || uri == NULL || attribute_name == NULL || attribute_value == NULL\n"
-;;
-    
-let print_attribute attr =
-  check_attribute_ns attr;
-  let ns_uri = Minidom.attr_get_ns_uri attr
-  in
-  begin
-    match ns_uri with
-      Some uri -> Printf.printf " %s:" (Minidom.string_of_mDOMString uri);
-    | None -> ()
-  end;
-  match ((Minidom.attr_get_name attr), (Minidom.attr_get_value attr)) with
-    (Some attr_name, Some attr_value) ->
-      Printf.printf " %s=\"%s\"" (Minidom.string_of_mDOMString attr_name) (Minidom.string_of_mDOMString attr_value) 
-  | (Some attr_name, _) ->
-      Printf.printf " ??? attribute %s has no value !!!" (Minidom.string_of_mDOMString attr_name)
-  | (_,_) ->
-      Printf.printf " ??? very strange attribute !!!"
-;;
-
-let rec print_node n node =
-  if Minidom.node_is_blank node then ()
-  else if Minidom.node_is_element node then begin
-    match Minidom.node_get_name node with
-      Some node_name -> 
-        begin
-          let children = Minidom.node_get_children node
-          and attributes = Minidom.node_get_attributes node
-          and ns_uri = Minidom.node_get_ns_uri node
-          and is_first,is_last = (Minidom.node_is_first node), (Minidom.node_is_last node)
-          in
-          for i = 1 to n do print_char ' ' done;
-          Printf.printf "<";
-          begin
-            match ns_uri with
-              Some uri -> Printf.printf "%s:" (Minidom.string_of_mDOMString uri)
-            | None     -> ()
-          end;
-          Printf.printf "%s" (Minidom.string_of_mDOMString node_name);
-          List.iter print_attribute attributes;
-          Printf.printf ">\n";
-          List.iter (print_node (n + 2)) children;
-          for i = 1 to n do print_char ' ' done;
-          Printf.printf "</%s>\n" (Minidom.string_of_mDOMString node_name)
-        end
-    | None -> Printf.printf "??? this node has no name !!!\n"
-  end else if Minidom.node_is_text node then begin
-    match Minidom.node_get_content node with
-      Some node_content ->
-        for i = 1 to n do print_char ' ' done;
-        Printf.printf "%s\n" (Minidom.string_of_mDOMString node_content)
-    | None -> Printf.printf "??? this node has no content !!!\n"
-  end else begin
-    Printf.printf "don't know how to manage a node with type %d\n" (Minidom.node_get_type node)
-  end
-;;
-  
-print_node 0 root;;
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/test.xml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/minidom/test.xml
deleted file mode 100644 (file)
index 83d2eef..0000000
+++ /dev/null
@@ -1,505 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<?cocoon-format type="text/xhtml"?>
-<m:math xmlns:helm="http://www.cs.unibo.it/helm" xmlns:m="http://www.w3.org/1998/Math/MathML">
-    <m:mtable helm:xref="i0" columnalign="left" equalrows="false" align="baseline 1">
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mtext>DEFINITION and_ind() OF TYPE</m:mtext>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mphantom>
-                        <m:mtext>__</m:mtext>
-                    </m:mphantom>
-                    <m:semantics xmlns:xlink="http://www.w3.org/1999/xlink">
-                        <m:mrow helm:xref="i22">
-                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo stretchy="false">(</m:mo>
-                                            <m:mrow helm:xref="i23">
-                                                <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mo color="Blue">&#928;</m:mo>
-                                                            <m:mi>A</m:mi>
-                                                            <m:mo>:</m:mo>
-                                                            <m:mrow helm:xref="i24">
-                                                                <m:mo>Prop</m:mo>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mrow>
-                                                                <m:mo>.</m:mo>
-                                                                <m:mrow helm:xref="i25">
-                                                                    <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mo color="Blue">&#928;</m:mo>
-                                                                                <m:mi>B</m:mi>
-                                                                                <m:mo>:</m:mo>
-                                                                                <m:mrow helm:xref="i26">
-                                                                                    <m:mo>Prop</m:mo>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mrow>
-                                                                                    <m:mo>.</m:mo>
-                                                                                    <m:mrow helm:xref="i27">
-                                                                                        <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mo color="Blue">&#928;</m:mo>
-                                                                                                    <m:mi>P</m:mi>
-                                                                                                    <m:mo>:</m:mo>
-                                                                                                    <m:mrow helm:xref="i28">
-                                                                                                        <m:mo>Prop</m:mo>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mrow>
-                                                                                                        <m:mo>.</m:mo>
-                                                                                                        <m:mrow helm:xref="i29">
-                                                                                                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mo color="Blue">&#928;</m:mo>
-                                                                                                                        <m:mi>f</m:mi>
-                                                                                                                        <m:mo>:</m:mo>
-                                                                                                                        <m:mrow helm:xref="i30">
-                                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                                            <m:mi helm:xref="i31">A</m:mi>
-                                                                                                                            <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                                            <m:mrow helm:xref="i32">
-                                                                                                                                <m:mo stretchy="false">(</m:mo>
-                                                                                                                                <m:mi helm:xref="i33">B</m:mi>
-                                                                                                                                <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                                                <m:mi helm:xref="i34">P</m:mi>
-                                                                                                                                <m:mo stretchy="false">)</m:mo>
-                                                                                                                            </m:mrow>
-                                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mrow>
-                                                                                                                            <m:mo>.</m:mo>
-                                                                                                                            <m:mrow helm:xref="i35">
-                                                                                                                                <m:mo color="Blue">&#928;</m:mo>
-                                                                                                                                <m:mi>a</m:mi>
-                                                                                                                                <m:mo>:</m:mo>
-                                                                                                                                <m:mrow helm:xref="i36">
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi xlink:href="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i37">and</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi helm:xref="i38">A</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi helm:xref="i39">B</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mo>.</m:mo>
-                                                                                                                                <m:mi helm:xref="i40">P</m:mi>
-                                                                                                                            </m:mrow>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                            </m:mtable>
-                                                                                                        </m:mrow>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                        </m:mtable>
-                                                                                    </m:mrow>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                    </m:mtable>
-                                                                </m:mrow>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                </m:mtable>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo color="#b03060">:&gt;</m:mo>
-                                            <m:mrow helm:xref="i41">
-                                                <m:mo>Prop</m:mo>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo stretchy="false">)</m:mo>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                            </m:mtable>
-                        </m:mrow>
-                        <m:annotation-xml encoding="MathML">
-                            <m:apply helm:xref="i22">
-                                <m:csymbol>cast</m:csymbol>
-                                <m:apply helm:xref="i23">
-                                    <m:csymbol>prod</m:csymbol>
-                                    <m:bvar>
-                                        <m:ci>A</m:ci>
-                                        <m:type>
-                                            <m:apply helm:xref="i24">
-                                                <m:csymbol>Prop</m:csymbol>
-                                            </m:apply>
-                                        </m:type>
-                                    </m:bvar>
-                                    <m:apply helm:xref="i25">
-                                        <m:csymbol>prod</m:csymbol>
-                                        <m:bvar>
-                                            <m:ci>B</m:ci>
-                                            <m:type>
-                                                <m:apply helm:xref="i26">
-                                                    <m:csymbol>Prop</m:csymbol>
-                                                </m:apply>
-                                            </m:type>
-                                        </m:bvar>
-                                        <m:apply helm:xref="i27">
-                                            <m:csymbol>prod</m:csymbol>
-                                            <m:bvar>
-                                                <m:ci>P</m:ci>
-                                                <m:type>
-                                                    <m:apply helm:xref="i28">
-                                                        <m:csymbol>Prop</m:csymbol>
-                                                    </m:apply>
-                                                </m:type>
-                                            </m:bvar>
-                                            <m:apply helm:xref="i29">
-                                                <m:csymbol>prod</m:csymbol>
-                                                <m:bvar>
-                                                    <m:ci>f</m:ci>
-                                                    <m:type>
-                                                        <m:apply helm:xref="i30">
-                                                            <m:csymbol>arrow</m:csymbol>
-                                                            <m:ci helm:xref="i31">A</m:ci>
-                                                            <m:apply helm:xref="i32">
-                                                                <m:csymbol>arrow</m:csymbol>
-                                                                <m:ci helm:xref="i33">B</m:ci>
-                                                                <m:ci helm:xref="i34">P</m:ci>
-                                                            </m:apply>
-                                                        </m:apply>
-                                                    </m:type>
-                                                </m:bvar>
-                                                <m:apply helm:xref="i35">
-                                                    <m:csymbol>prod</m:csymbol>
-                                                    <m:bvar>
-                                                        <m:ci>a</m:ci>
-                                                        <m:type>
-                                                            <m:apply helm:xref="i36">
-                                                                <m:csymbol>app</m:csymbol>
-                                                                <m:ci definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i37">and</m:ci>
-                                                                <m:ci helm:xref="i38">A</m:ci>
-                                                                <m:ci helm:xref="i39">B</m:ci>
-                                                            </m:apply>
-                                                        </m:type>
-                                                    </m:bvar>
-                                                    <m:ci helm:xref="i40">P</m:ci>
-                                                </m:apply>
-                                            </m:apply>
-                                        </m:apply>
-                                    </m:apply>
-                                </m:apply>
-                                <m:apply helm:xref="i41">
-                                    <m:csymbol>Prop</m:csymbol>
-                                </m:apply>
-                            </m:apply>
-                        </m:annotation-xml>
-                    </m:semantics>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mtext>AS</m:mtext>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mphantom>
-                        <m:mtext>__</m:mtext>
-                    </m:mphantom>
-                    <m:semantics xmlns:xlink="http://www.w3.org/1999/xlink">
-                        <m:mrow helm:xref="i1">
-                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mo color="Red">&#955;</m:mo>
-                                        <m:mi>A</m:mi>
-                                        <m:mo>:</m:mo>
-                                        <m:mrow helm:xref="i2">
-                                            <m:mo>Prop</m:mo>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo>.</m:mo>
-                                            <m:mrow helm:xref="i3">
-                                                <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mo color="Red">&#955;</m:mo>
-                                                            <m:mi>B</m:mi>
-                                                            <m:mo>:</m:mo>
-                                                            <m:mrow helm:xref="i4">
-                                                                <m:mo>Prop</m:mo>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mrow>
-                                                                <m:mo>.</m:mo>
-                                                                <m:mrow helm:xref="i5">
-                                                                    <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mo color="Red">&#955;</m:mo>
-                                                                                <m:mi>P</m:mi>
-                                                                                <m:mo>:</m:mo>
-                                                                                <m:mrow helm:xref="i6">
-                                                                                    <m:mo>Prop</m:mo>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mrow>
-                                                                                    <m:mo>.</m:mo>
-                                                                                    <m:mrow helm:xref="i7">
-                                                                                        <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mo color="Red">&#955;</m:mo>
-                                                                                                    <m:mi>f</m:mi>
-                                                                                                    <m:mo>:</m:mo>
-                                                                                                    <m:mrow helm:xref="i8">
-                                                                                                        <m:mo stretchy="false">(</m:mo>
-                                                                                                        <m:mi helm:xref="i9">A</m:mi>
-                                                                                                        <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                        <m:mrow helm:xref="i10">
-                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                            <m:mi helm:xref="i11">B</m:mi>
-                                                                                                            <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                            <m:mi helm:xref="i12">P</m:mi>
-                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                        </m:mrow>
-                                                                                                        <m:mo stretchy="false">)</m:mo>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mrow>
-                                                                                                        <m:mo>.</m:mo>
-                                                                                                        <m:mrow helm:xref="i13">
-                                                                                                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mo color="Red">&#955;</m:mo>
-                                                                                                                        <m:mi>a</m:mi>
-                                                                                                                        <m:mo>:</m:mo>
-                                                                                                                        <m:mrow helm:xref="i14">
-                                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                                            <m:mi xlink:href="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i15">and</m:mi>
-                                                                                                                            <m:mphantom>
-                                                                                                                                <m:mtext>_</m:mtext>
-                                                                                                                            </m:mphantom>
-                                                                                                                            <m:mi helm:xref="i16">A</m:mi>
-                                                                                                                            <m:mphantom>
-                                                                                                                                <m:mtext>_</m:mtext>
-                                                                                                                            </m:mphantom>
-                                                                                                                            <m:mi helm:xref="i17">B</m:mi>
-                                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mrow>
-                                                                                                                            <m:mo>.</m:mo>
-                                                                                                                            <m:mrow helm:xref="i18">
-                                                                                                                                <m:mo>&lt;</m:mo>
-                                                                                                                                <m:mi helm:xref="i19">P</m:mi>
-                                                                                                                                <m:mo>&gt;</m:mo>
-                                                                                                                                <m:mo>CASES</m:mo>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mi helm:xref="i20">a</m:mi>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mo>OF</m:mo>
-                                                                                                                                <m:mrow>
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi>conj</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$1</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$2</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mo color="Green">&#8658;</m:mo>
-                                                                                                                                <m:mrow>
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi helm:xref="i21">f</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$1</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$2</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mo>END</m:mo>
-                                                                                                                            </m:mrow>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                            </m:mtable>
-                                                                                                        </m:mrow>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                        </m:mtable>
-                                                                                    </m:mrow>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                    </m:mtable>
-                                                                </m:mrow>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                </m:mtable>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                            </m:mtable>
-                        </m:mrow>
-                        <m:annotation-xml encoding="MathML">
-                            <m:lambda helm:xref="i1">
-                                <m:bvar>
-                                    <m:ci>A</m:ci>
-                                    <m:type>
-                                        <m:apply helm:xref="i2">
-                                            <m:csymbol>Prop</m:csymbol>
-                                        </m:apply>
-                                    </m:type>
-                                </m:bvar>
-                                <m:lambda helm:xref="i3">
-                                    <m:bvar>
-                                        <m:ci>B</m:ci>
-                                        <m:type>
-                                            <m:apply helm:xref="i4">
-                                                <m:csymbol>Prop</m:csymbol>
-                                            </m:apply>
-                                        </m:type>
-                                    </m:bvar>
-                                    <m:lambda helm:xref="i5">
-                                        <m:bvar>
-                                            <m:ci>P</m:ci>
-                                            <m:type>
-                                                <m:apply helm:xref="i6">
-                                                    <m:csymbol>Prop</m:csymbol>
-                                                </m:apply>
-                                            </m:type>
-                                        </m:bvar>
-                                        <m:lambda helm:xref="i7">
-                                            <m:bvar>
-                                                <m:ci>f</m:ci>
-                                                <m:type>
-                                                    <m:apply helm:xref="i8">
-                                                        <m:csymbol>arrow</m:csymbol>
-                                                        <m:ci helm:xref="i9">A</m:ci>
-                                                        <m:apply helm:xref="i10">
-                                                            <m:csymbol>arrow</m:csymbol>
-                                                            <m:ci helm:xref="i11">B</m:ci>
-                                                            <m:ci helm:xref="i12">P</m:ci>
-                                                        </m:apply>
-                                                    </m:apply>
-                                                </m:type>
-                                            </m:bvar>
-                                            <m:lambda helm:xref="i13">
-                                                <m:bvar>
-                                                    <m:ci>a</m:ci>
-                                                    <m:type>
-                                                        <m:apply helm:xref="i14">
-                                                            <m:csymbol>app</m:csymbol>
-                                                            <m:ci definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i15">and</m:ci>
-                                                            <m:ci helm:xref="i16">A</m:ci>
-                                                            <m:ci helm:xref="i17">B</m:ci>
-                                                        </m:apply>
-                                                    </m:type>
-                                                </m:bvar>
-                                                <m:apply helm:xref="i18">
-                                                    <m:csymbol>mutcase</m:csymbol>
-                                                    <m:ci helm:xref="i19">P</m:ci>
-                                                    <m:ci helm:xref="i20">a</m:ci>
-                                                    <m:apply>
-                                                        <m:csymbol>app</m:csymbol>
-                                                        <m:ci>conj</m:ci>
-                                                        <m:ci>$1</m:ci>
-                                                        <m:ci>$2</m:ci>
-                                                    </m:apply>
-                                                    <m:apply>
-                                                        <m:csymbol>app</m:csymbol>
-                                                        <m:ci helm:xref="i21">f</m:ci>
-                                                        <m:ci>$1</m:ci>
-                                                        <m:ci>$2</m:ci>
-                                                    </m:apply>
-                                                </m:apply>
-                                            </m:lambda>
-                                        </m:lambda>
-                                    </m:lambda>
-                                </m:lambda>
-                            </m:lambda>
-                        </m:annotation-xml>
-                    </m:semantics>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-    </m:mtable>
-</m:math>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/ml_gtk_mathview.c b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/ml_gtk_mathview.c
deleted file mode 100644 (file)
index 39f3d74..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-#include <string.h>
-#include <assert.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include <gtkmathview/gtkmathview.h>
-#include <ml_gtk.h>
-
-#include <wrappers.h>
-#include <ml_glib.h>
-#include <ml_gdk.h>
-#include <ml_gtk.h>
-#include <gtk_tags.h>
-
-#include "minidom/ml_minidom.h"
-
-/* <CSC/>: Next row should be put in a .h of lablgtk. */
-#define GtkAdjustment_val(val) check_cast(GTK_ADJUSTMENT,val)
-
-#define GtkMathView_val(val) check_cast(GTK_MATH_VIEW,val)
-ML_3 (gtk_math_view_new,GtkAdjustment_val, GtkAdjustment_val, Bool_val, Val_GtkWidget_sink)
-ML_2 (gtk_math_view_load, GtkMathView_val, String_val, Val_bool)
-ML_1 (gtk_math_view_unload, GtkMathView_val, Unit)
-/*ML_1 (gtk_math_view_dump, GtkMathView_val, Unit)*/
-ML_1 (gtk_math_view_get_selection, GtkMathView_val, Val_mDOMNodeRef)
-ML_2 (gtk_math_view_set_selection, GtkMathView_val, mDOMNodeRef_val, Unit)
-ML_1 (gtk_math_view_get_width, GtkMathView_val, Val_int)
-ML_1 (gtk_math_view_get_height, GtkMathView_val, Val_int)
-ML_3 (gtk_math_view_set_top, GtkMathView_val, Int_val, Int_val, Unit)
-ML_3 (gtk_math_view_set_adjustments, GtkMathView_val, GtkAdjustment_val, GtkAdjustment_val, Unit)
-ML_1 (gtk_math_view_get_hadjustment, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_vadjustment, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_buffer, GtkMathView_val, Val_GdkPixmap)
-ML_1 (gtk_math_view_get_frame, GtkMathView_val, Val_GtkWidget)
-ML_2 (gtk_math_view_set_font_size, GtkMathView_val, Int_val, Unit)
-ML_1 (gtk_math_view_get_font_size, GtkMathView_val, Val_int)
-ML_2 (gtk_math_view_set_anti_aliasing, GtkMathView_val, Bool_val, Unit)
-ML_1 (gtk_math_view_get_anti_aliasing, GtkMathView_val, Val_bool)
-ML_2 (gtk_math_view_set_kerning, GtkMathView_val, Bool_val, Unit)
-ML_1 (gtk_math_view_get_kerning, GtkMathView_val, Val_bool)
-ML_2 (gtk_math_view_set_log_verbosity, GtkMathView_val, Int_val, Unit)
-ML_1 (gtk_math_view_get_log_verbosity, GtkMathView_val, Val_int)
-
-
-value ml_gtk_math_view_export_to_postscript (value arg1, value arg2)
-{
-   CAMLparam1(arg1);
-   char *filename;
-   FILE *fd;
-   int res;
-   filename = String_val (arg2);
-   if ((fd = fopen(filename, "w"))) {
-      gtk_math_view_export_to_postscript (GtkMathView_val (arg1), fd);
-      fclose (fd);
-      res = 1;
-   } else {
-      fprintf(stderr, "Error opening file %s for writing\n", filename);
-      res = 0;
-   }
-   CAMLreturn (Val_bool(res));
-}
-
-value ml_gtk_math_view_get_top (value arg1)
-{
-   CAMLparam1(arg1);
-   CAMLlocal1 (result);
-   int x, y;
-   gtk_math_view_get_top(GtkMathView_val (arg1), &x, &y);
-   result = alloc(2, 0);
-   Store_field(result, 0, Val_int(x));
-   Store_field(result, 0, Val_int(y));
-   CAMLreturn (result);
-}
-
-
-value ml_gtk_math_view_mDOMNode_of_bodex_option (value arg1)
-{
-   CAMLparam1(arg1);
-
-   mDOMNodeRef nr;
-   CAMLlocal1 (tmp);
-   CAMLlocal1 (optval);
-   CAMLlocal1 (res);
-
-   if (arg1==Val_int(0)) {
-      assert(0);
-   } else {
-      tmp = Field(arg1, 0);
-      nr = (mDOMNodeRef) Field(tmp, 1);
-   }
-   optval = Val_mDOMNodeRef(nr);
-   if (optval==Val_int(0)) {
-      assert(0);
-   } else {
-      res = Field(optval, 0);
-   }
-
-  CAMLreturn(res);
-}
-
-value ml_gtk_math_view_mDOMNode_option_of_bodex_option (value arg1)
-{
-   CAMLparam1(arg1);
-
-   mDOMNodeRef nr;
-   CAMLlocal1 (tmp);
-
-   if (arg1==Val_int(0)) {
-      nr=NULL;
-   } else {
-      tmp = Field(arg1, 0);
-      nr = (mDOMNodeRef) Field(tmp, 1);
-   }
-
-  CAMLreturn(Val_mDOMNodeRef(nr));
-}
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/.cvsignore
deleted file mode 100644 (file)
index 1968614..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmo *.cmi *.cmx t1lib.log test test.opt test.ps test.o
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/Makefile
deleted file mode 100644 (file)
index 1d5f5e1..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-LABLGTK_DIR = /usr/lib/ocaml/lablgtk
-LABLGTK_MATHVIEW_DIR = ..
-MINIDOM_DIR = ../minidom
-OCAMLC = ocamlc -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) \
- -I $(MINIDOM_DIR) -I mlmathview
-OCAMLOPT = ocamlopt -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) \
- -I $(MINIDOM_DIR) -I mlmathview
-
-all: test
-opt: test.opt
-
-test: test.cmo
-       $(OCAMLC) -custom -o test lablgtk.cma gtkInit.cmo \
-                  $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cma \
-                  $(MINIDOM_DIR)/minidom.cmo \
-                  -cclib "$(MINIDOM_DIR)/ml_minidom.o" \
-                  test.cmo \
-                  -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-                  -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
-                  -L/usr/local/lib/gtkmathview -lgtkmathview \
-                  $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o"
-
-test.opt: test.cmx
-       $(OCAMLOPT) -o test.opt lablgtk.cmxa gtkInit.cmx \
-                  $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cmxa \
-                  $(MINIDOM_DIR)/minidom.cmx \
-                  -cclib "$(MINIDOM_DIR)/ml_minidom.o" \
-                  test.cmx \
-                  -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-                  -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
-                  -L/usr/local/lib/gtkmathview -lgtkmathview \
-                  $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o"
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo:
-       $(OCAMLC) -c $<
-.mli.cmi:
-       $(OCAMLC) -c $<
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o test test.opt t1lib.log
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/t1.config b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/t1.config
deleted file mode 100644 (file)
index afb669e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-ENCODING=.
-AFM=/usr/share/texmf/fonts/afm/
-TYPE1=/usr/share/texmf/fonts/type1/bluesky/cm/:/usr/X11R6/lib/X11/fonts/Type1/:.
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/test.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/test.ml
deleted file mode 100644 (file)
index af65d74..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-(******************************************************************************)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 25/09/2000                                 *)
-(*                                                                            *)
-(*     This is a simple test for the OCaml (LablGtk indeed) binding of the    *)
-(*                             MathView widget                                *)
-(******************************************************************************)
-
-(* Callbacks *)
-let jump node =
- let module M = Minidom in
-  print_string ("jump: " ^
-   (match
-     M.node_get_attribute node
-      (M.mDOMString_of_string "href")
-    with
-       None   -> "DOES NOT WORKS (if you have clicked on the hyperlink)!!!!!" 
-     | Some s -> M.string_of_mDOMString s
-   ) ^ "\n");
-  flush stdout
-;;
-
-let selection_changed node =
- let module M = Minidom in
-  print_string ("selection_changed: " ^
-   (match node with
-       None -> "selection_changed on nothing"
-     | Some node ->
-        match M.node_get_name node with
-           None   -> "selection_changed on a node without name" 
-         | Some s -> "selection changed on " ^ M.string_of_mDOMString s
-   ) ^ "\n");
-  flush stdout
-;;
-
-
-let clicked node =
- let module M = Minidom in
-  print_string ("clicked: " ^
-   (match M.node_get_name node with
-       None   -> "Nothing clicked (???)" 
-     | Some s -> M.string_of_mDOMString s ^ " clicked"
-   ) ^ "\n");
-  flush stdout
-;;
-
-
-let activate_t1 mathview sw () =
- sw#remove !mathview#coerce ;
- mathview :=
- (GMathView.math_view ~packing:sw#add ~width:50 ~height:50
-  ~use_t1_lib:true ()) ;
- ignore(!mathview#connect#jump jump) ;
- ignore(!mathview#connect#clicked clicked) ;
- ignore(!mathview#connect#selection_changed selection_changed) ;
- print_string "WIDGET RECREATED WITH T1 FONTS ACTIVATED\n" ;
-;;
-
-let load mathview () =
- !mathview#load "test.xml" ;
- print_string "load: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let get_selection mathview () =
- let selection =
-  match !mathview#get_selection with
-     None -> "NO SELECTION"
-   | Some node ->
-      match Minidom.node_get_name node with
-        None   -> "selection is on nothing" 
-      | Some s -> "selection is on " ^ Minidom.string_of_mDOMString s
- in
-  print_string ("get_selection: " ^ selection ^ "\n") ;
-  flush stdout
-;;
-
-let set_selection mathview () =
- begin
-  try
-   match !mathview#get_selection with
-      None -> raise Not_found
-    | Some node ->
-       match Minidom.node_get_parent node with
-          None -> raise Not_found
-        | Some node ->
-           !mathview#set_selection (Some node) ;
-           print_string "set_selection: SEEMS TO WORK\n"
-  with
-   Not_found ->
-    print_string "set_selection: YOU MUST PREVIOUSLY SELECT A NON-ROOT NODE" 
- end ;
- flush stdout
-;;
-
-let unload mathview () =
- !mathview#unload ;
- print_string "unload: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let get_width mathview () =
- print_string ("get_width: " ^ string_of_int (!mathview#get_width) ^ "\n") ;
- flush stdout
-;;
-
-let get_height mathview () =
- print_string ("get_height: " ^ string_of_int (!mathview#get_height) ^ "\n") ;
- flush stdout
-;;
-
-let get_top mathview () =
- let (x,y) = !mathview#get_top in
-  print_string ("get_top: ("^ string_of_int x ^ "," ^ string_of_int y ^ ")\n") ;
-  flush stdout
-;;
-
-let set_top mathview () =
- !mathview#set_top 0 0;
- print_string "set_top: SEEM TO WORK\n" ;
- flush stdout
-;;
-
-let set_adjustments mathview () =
- let adj1 = GData.adjustment () in
- let adj2 = GData.adjustment () in
-  !mathview#set_adjustments adj1 adj2 ;
-  adj1#set_value ((adj1#lower +. adj1#upper) /. 2.0) ;
-  adj2#set_value ((adj2#lower +. adj2#upper) /. 2.0) ;
-  print_string "set_adjustments: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_hadjustment mathview () =
- let adj = !mathview#get_hadjustment in
-  adj#set_value ((adj#lower +. adj#upper) /. 2.0) ;
-  print_string "get_hadjustment: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_vadjustment mathview () =
- let adj = !mathview#get_vadjustment in
-  adj#set_value ((adj#lower +. adj#upper) /. 2.0) ;
-  print_string "get_vadjustment: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_buffer mathview () =
- let buffer = !mathview#get_buffer in
-  Gdk.Draw.rectangle buffer (Gdk.GC.create buffer) ~x:0 ~y:0
-   ~width:50 ~height:50 ~filled:true () ;
-  print_string "get_buffer: SEEMS TO WORK (hint: force the widget redrawing)\n";
-  flush stdout
-;;
-
-let get_frame mathview () =
- let frame = !mathview#get_frame in
-  frame#set_shadow_type `NONE ;
-  print_string "get_frame: SEEMS TO WORK\n" ;
-  flush stdout
-;;
-
-let set_font_size mathview () =
- !mathview#set_font_size 24 ;
- print_string "set_font_size: FONT IS NOW 24\n" ;
- flush stdout
-;;
-let get_font_size mathview () =
- print_string ("get_font_size: " ^ string_of_int (!mathview#get_font_size) ^ "\n") ;
- flush stdout
-;;
-let set_anti_aliasing mathview () =
- !mathview#set_anti_aliasing true ;
- print_string "set_anti_aliasing: ON\n" ;
- flush stdout
-;;
-let get_anti_aliasing mathview () =
- print_string ("get_anti_aliasing: " ^
-  (match !mathview#get_anti_aliasing with true -> "ON" | false -> "OFF") ^
-  "\n") ;
- flush stdout
-;;
-let set_kerning mathview () =
- !mathview#set_kerning true ;
- print_string "set_kerning: ON\n" ;
- flush stdout
-;;
-let get_kerning mathview () =
- print_string ("get_kerning: " ^
-  (match !mathview#get_kerning with true -> "ON" | false -> "OFF") ^
-  "\n") ;
- flush stdout
-;;
-
-let set_log_verbosity mathview () =
- !mathview#set_log_verbosity 3 ;
- print_string "set_log_verbosity: NOW IS 3\n" ;
- flush stdout
-;;
-let get_log_verbosity mathview () =
- print_string ("get_log_verbosity: " ^
-  string_of_int !mathview#get_log_verbosity ^
-  "\n") ;
- flush stdout
-;;
-
-let export_to_postscript mathview () =
- !mathview#export_to_postscript "test.ps" ;
- print_string "expor_to_postscript: SEEMS TO WORK (hint: look at test.ps)\n";
- flush stdout
-;;
-(* Widget creation *)
-let main_window = GWindow.window ~title:"GtkMathView test" () in
-let vbox = GPack.vbox ~packing:main_window#add () in
-let sw = GBin.scrolled_window ~width:50 ~height:50 ~packing:vbox#pack () in
-let mathview= ref (GMathView.math_view ~packing:sw#add ~width:50 ~height:50 ()) in
-let table = GPack.table ~rows:5 ~columns:5 ~packing:vbox#pack () in
-let button_t1=GButton.button ~label:"activate t1 fonts" ~packing:(table#attach ~left:0 ~top:0) () in
-let button_load = GButton.button ~label:"load" ~packing:(table#attach ~left:1 ~top:0) () in
-let button_unload = GButton.button ~label:"unload" ~packing:(table#attach ~left:2 ~top:0) () in
-let button_get_selection = GButton.button ~label:"get_selection" ~packing:(table#attach ~left:3 ~top:0) () in
-let button_set_selection = GButton.button ~label:"set_selection" ~packing:(table#attach ~left:4 ~top:0) () in
-let button_get_width = GButton.button ~label:"get_width" ~packing:(table#attach ~left:0 ~top:1) () in
-let button_get_height = GButton.button ~label:"get_height" ~packing:(table#attach ~left:1 ~top:1) () in
-let button_get_top = GButton.button ~label:"get_top" ~packing:(table#attach ~left:2 ~top:1) () in
-let button_set_top = GButton.button ~label:"set_top" ~packing:(table#attach ~left:3 ~top:1) () in
-let button_set_adjustments = GButton.button ~label:"set_adjustments" ~packing:(table#attach ~left:4 ~top:1) () in
-let button_get_hadjustment = GButton.button ~label:"get_hadjustment" ~packing:(table#attach ~left:0 ~top:2) () in
-let button_get_vadjustment = GButton.button ~label:"get_vadjustment" ~packing:(table#attach ~left:1 ~top:2) () in
-let button_get_buffer = GButton.button ~label:"get_buffer" ~packing:(table#attach ~left:2 ~top:2) () in
-let button_get_frame = GButton.button ~label:"get_frame" ~packing:(table#attach ~left:3 ~top:2) () in
-let button_set_font_size = GButton.button ~label:"set_font_size" ~packing:(table#attach ~left:4 ~top:2) () in
-let button_get_font_size = GButton.button ~label:"get_font_size" ~packing:(table#attach ~left:0 ~top:3) () in
-let button_set_anti_aliasing = GButton.button ~label:"set_anti_aliasing" ~packing:(table#attach ~left:1 ~top:3) () in
-let button_get_anti_aliasing = GButton.button ~label:"get_anti_aliasing" ~packing:(table#attach ~left:2 ~top:3) () in
-let button_set_kerning = GButton.button ~label:"set_kerning" ~packing:(table#attach ~left:3 ~top:3) () in
-let button_get_kerning = GButton.button ~label:"get_kerning" ~packing:(table#attach ~left:4 ~top:3) () in
-let button_set_log_verbosity = GButton.button ~label:"set_log_verbosity" ~packing:(table#attach ~left:0 ~top:4) () in
-let button_get_log_verbosity = GButton.button ~label:"get_log_verbosity" ~packing:(table#attach ~left:1 ~top:4) () in
-let button_export_to_postscript = GButton.button ~label:"export_to_postscript" ~packing:(table#attach ~left:2 ~top:4) () in
-(* Signals connection *)
-ignore(button_t1#connect#clicked (activate_t1 mathview sw)) ;
-ignore(button_load#connect#clicked (load mathview)) ;
-ignore(button_unload#connect#clicked (unload mathview)) ;
-ignore(button_get_selection#connect#clicked (get_selection mathview)) ;
-ignore(button_set_selection#connect#clicked (set_selection mathview)) ;
-ignore(button_get_width#connect#clicked (get_width mathview)) ;
-ignore(button_get_height#connect#clicked (get_height mathview)) ;
-ignore(button_get_top#connect#clicked (get_top mathview)) ;
-ignore(button_set_top#connect#clicked (set_top mathview)) ;
-ignore(button_set_adjustments#connect#clicked (set_adjustments mathview)) ;
-ignore(button_get_hadjustment#connect#clicked (get_hadjustment mathview)) ;
-ignore(button_get_vadjustment#connect#clicked (get_vadjustment mathview)) ;
-ignore(button_get_buffer#connect#clicked (get_buffer mathview)) ;
-ignore(button_get_frame#connect#clicked (get_frame mathview)) ;
-ignore(button_set_font_size#connect#clicked (set_font_size mathview)) ;
-ignore(button_get_font_size#connect#clicked (get_font_size mathview)) ;
-ignore(button_set_anti_aliasing#connect#clicked (set_anti_aliasing mathview)) ;
-ignore(button_get_anti_aliasing#connect#clicked (get_anti_aliasing mathview)) ;
-ignore(button_set_kerning#connect#clicked (set_kerning mathview)) ;
-ignore(button_get_kerning#connect#clicked (get_kerning mathview)) ;
-ignore(button_set_log_verbosity#connect#clicked (set_log_verbosity mathview)) ;
-ignore(button_get_log_verbosity#connect#clicked (get_log_verbosity mathview)) ;
-ignore(button_export_to_postscript#connect#clicked (export_to_postscript mathview)) ;
-ignore(!mathview#connect#jump jump) ;
-ignore(!mathview#connect#clicked clicked) ;
-ignore(!mathview#connect#selection_changed selection_changed) ;
-(* Main Loop *)
-main_window#show () ;
-GMain.Main.main ()
-;;
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/test.xml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.0/test/test.xml
deleted file mode 100644 (file)
index b0f8c15..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-<math display="block">
-  <mrow helm:xref="SELECTION OK">
-    <mo>&int;</mo>
-    <mo>&ApplyFunction;</mo>
-    <mfrac>
-      <mrow>
-        <mrow>
-          <mi>a</mi>
-         <mo>&InvisibleTimes;</mo>
-         <mi>x</mi>
-       </mrow>
-       <mo>+</mo>
-       <mi>b</mi>
-      </mrow>
-      <mrow>
-        <msup>
-         <mi>x</mi>
-         <mn>2</mn>
-       </msup>
-       <mo>+</mo>
-       <mrow>
-         <mi>p</mi>
-         <mo>&InvisibleTimes;</mo>
-         <mi>x</mi>
-       </mrow>
-       <mo>+</mo>
-       <mi>q</mi>
-      </mrow>
-    </mfrac>
-  </mrow>
-  <mo fontstyle="italic">d</mo>
-  <mi>x</mi>
-  <mo>=</mo>
-  <mrow>
-    <mrow>
-      <mfrac><mi>a</mi><mn>2</mn></mfrac>
-      <mo>&InvisibleTimes;</mo>
-      <mrow>
-        <mi>ln</mi>
-       <mo>&ApplyFunction;</mo>
-       <mrow>
-         <mo>(</mo>
-         <mrow>
-           <msup><mi>x</mi><mn>2</mn></msup>
-           <mo>+</mo>
-           <mrow>
-             <mi>p</mi>
-             <mo>&InvisibleTimes;</mo>
-             <mi>x</mi>
-           </mrow>
-           <mo>+</mo>
-           <mi>q</mi>
-         </mrow>
-         <mo>)</mo>
-       </mrow>
-      </mrow>
-    </mrow>
-    <mo>+</mo>
-    <mrow>
-      <mfrac>
-        <mrow>
-         <mrow>
-           <mn>2</mn>
-           <mo>&InvisibleTimes;</mo>
-           <mi>b</mi>
-         </mrow>
-         <mo>-</mo>
-         <mrow>
-           <mi>a</mi>
-           <mo>&InvisibleTimes;</mo>
-           <mi>p</mi>
-         </mrow>
-       </mrow>
-       <msqrt>
-         <mrow>
-           <mrow>
-             <mn>4</mn>
-             <mo>&InvisibleTimes;</mo>
-             <mi>q</mi>
-           </mrow>
-           <mo>-</mo>
-           <msup>
-             <mi>p</mi>
-             <mn>2</mn>
-           </msup>
-         </mrow>
-       </msqrt>
-      </mfrac>
-      <mo>&InvisibleTimes;</mo>
-      <mrow>
-        <mi xlink:href="JUMPS WORK">arctg</mi>
-       <mo>&ApplyFunction;</mo>
-       <mfrac>
-         <mrow>
-           <mrow>
-             <mn>2</mn>
-             <mo>&InvisibleTimes;</mo>
-             <mi>x</mi>
-           </mrow>
-           <mo>+</mo>
-           <mi>p</mi>
-         </mrow>
-         <msqrt>
-           <mrow>
-             <mrow>
-               <mn>4</mn>
-               <mo>&InvisibleTimes;</mo>
-               <mi>q</mi>
-             </mrow>
-             <mo>-</mo>
-             <msup>
-               <mi>p</mi>
-               <mn>2</mn>
-             </msup>
-           </mrow>
-         </msqrt>
-       </mfrac>
-      </mrow>
-    </mrow>
-    <mo>+</mo>
-    <mi>c</mi>
-  </mrow>  
-</math>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1-1.spec b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1-1.spec
deleted file mode 100644 (file)
index f6381e9..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-Summary: GtkMathView : the binding for lablgtk of the GtkMathView widget
-Name: lablgtk-20000829_gtkmathview
-Version: 0.2.1
-Release: 1
-Copyright: LGPL
-Group: Development/Libraries
-Requires: lablgtk_20000829 gtkmathview
-Source: www.cs.unibo.it:/~lpadovan/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1.tar.gz
-%description
-GtkMathView is the binding for lablgtk of the GtkMathView widget.
-
-%prep
-%setup
-
-%build
-make
-make opt
-
-%install
-make install
-
-%files
-%doc COPYING
-
-/usr/lib/ocaml/lablgtk/mathview
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/.cvsignore
deleted file mode 100644 (file)
index cd9e250..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.cmx *.cma *.cmxa config.make
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/.depend b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/.depend
deleted file mode 100644 (file)
index 600449b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-gMathView.cmo: gtkMathView.cmo gtk_mathview.cmo 
-gMathView.cmx: gtkMathView.cmx gtk_mathview.cmx 
-gtkMathView.cmo: gtk_mathview.cmo 
-gtkMathView.cmx: gtk_mathview.cmx 
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/COPYING b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/COPYING
deleted file mode 100644 (file)
index 20b480a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-This library is made available under the LGPL.
-You should have got a copy of the LGPL with Objective Caml.
-The LGPL applies to all the files in this directory, but not in
-subdirectories.
-
-For the test subdirectory, there is no specific licensing policy,
-but you may freely take inspiration from the code, and copy parts of
-it in your application.
-
-Author:
-       Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/Makefile
deleted file mode 100644 (file)
index b8adbb4..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-# Makefile for lablgtk_mathview.
-
-LABLGTKDIR = /usr/lib/ocaml/lablgtk
-MINIDOMDIR = ./minidom
-TESTDIR = ./test
-MLFLAGS += -I $(LABLGTKDIR) -I $(MINIDOMDIR)
-
-TARGETS = ml_gtk_mathview.o lablgtkmathview.cma
-
-all: Minidom $(TARGETS)
-
-opt: Minidom.opt lablgtkmathviewopt
-
-Minidom:
-       cd $(MINIDOMDIR); make
-
-Minidom.opt:
-       cd $(MINIDOMDIR); make opt
-
-configure:
-       @rm -f config.make
-       @$(MAKE) --no-print-directory -f configure.mk
-
-depend:
-       @rm -f .depend
-       @$(MAKE) --no-print-directory -f configure.mk .depend
-
-.depend config.make:
-       @$(MAKE) --no-print-directory -f configure.mk
-
-COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-
-include config.make
-
-INSTALLDIR = $(LIBDIR)/lablgtk/mathview
-
-MLLIBS = lablgtkmathview.cma
-CLIBS = 
-MLLINK = unix.cma str.cma
-
-ifdef DEBUG
-CFLAGS = -g $(GTKCFLAGS)
-MLLINK += -cclib -lcamlrund
-MLFLAGS += -g
-else
-CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS)
-endif
-CFLAGS += $(MINIDOMCFLAGS) $(GTKMATHVIEWCFLAGS)
-
-THFLAGS = -thread
-THLINK = unix.cma threads.cma
-
-ifdef USE_CC
-CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS)
-else
-CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)"
-endif
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def
-.c.o:
-       $(CCOMPILER) $<
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-.var.h:
-       ./var2def < $< > $@
-.var.c:
-       ./var2conv < $< > $@
-
-# Targets
-COBJS = ml_gtk_mathview.o
-MLOBJS = gtk_mathview.cmo gtkMathView.cmo gMathView.cmo
-ALLOBJS = $(MLOBJS)
-
-lablgtkmathviewopt: $(CLIBS) $(MLLIBS:.cma=.cmxa)
-
-install:
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       if test -f *.mli ; then cp *.mli $(INSTALLDIR) ; fi
-       cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR)
-       cp $(MLLIBS) $(INSTALLDIR)
-       cp $(COBJS) $(INSTALLDIR)
-       if test ! -z "$(CLIBS)" ; then cp $(CLIBS) $(INSTALLDIR) ; fi
-       if test -f lablgtkmathview.cmxa; then \
-          cp $(MLLIBS:.cma=.cmxa) $(MLLIBS:.cma=.a) \
-             $(INSTALLDIR); fi
-
-lablgtkmathview.cma: $(MLOBJS)
-       $(LINKER) -a -custom -o $@ $(MLOBJS) $(GTKLIBS) -cclib "$(GTKMATHVIEWLIBS)" -cclib "$(MINIDOMLIBS)"
-lablgtkmathview.cmxa: $(MLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) $(GTKLIBS) -cclib "$(GTKMATHVIEWLIBS)" -cclib "$(MINIDOMLIBS)"
-
-ml_gtk.o: $(LABLGTKDIR)/gtk_tags.c $(LABLGTKDIR)/gtk_tags.h \
-          $(LABLGTKDIR)/ml_gtk.h $(LABLGTKDIR)/ml_gdk.h $(LABLGTKDIR)/wrappers.h
-
-clean:
-       rm -f *.cm* *.o *.a *_tags.[ch] $(TARGETS)
-       cd $(MINIDOMDIR); make clean
-       cd $(TESTDIR); make clean
-
-include .depend
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/configure.mk b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/configure.mk
deleted file mode 100644 (file)
index 8982371..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-# makefile for configuring lablGTK_mathview
-
-# Default compilers
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-
-# Default installation directories
-BINDIR = `$(GETBINDIR)`
-INSTALLDIR = $(LIBDIR)/lablgtk/mathview
-
-# Autoconf
-GETLIBDIR = ocamlc -v | grep "^Standard" | sed 's/^.*: *//'
-LIBDIR = `$(GETLIBDIR)`
-GETBINDIR = $(GETLIBDIR) | sed -e 's|/lib/[^/]*$$|/bin|' -e 's|/lib$$|/bin|'
-GETRANLIB = which ranlib 2>/dev/null | sed -e 's|.*/ranlib$$|!|' -e 's/^[^!]*$$/:/' -e 's/!/ranlib/'
-
-ifdef USE_GNOME
-GTKGETCFLAGS = gtk-config --cflags`" -I"`gnome-config --includedir
-GNOMELIBS = `gnome-config --libs gtkxmhtml`
-else
-GTKGETCFLAGS = gtk-config --cflags
-endif
-
-GTKGETLIBS = gtk-config --libs
-
-configure: .depend config.make
-
-.depend:
-       ocamldep *.ml *.mli > .depend
-
-config.make:
-       @echo CAMLC=$(CAMLC) > config.make
-       @echo CAMLOPT=$(CAMLOPT) >> config.make
-       @echo USE_GL=$(USE_GL) >> config.make
-       @echo USE_GNOME=$(USE_GNOME) >> config.make
-       @echo USE_CC=$(USE_CC) >> config.make
-       @echo DEBUG=$(DEBUG) >> config.make
-       @echo CC=$(CC) >> config.make
-       @echo RANLIB=`$(GETRANLIB)` >> config.make
-       @echo LIBDIR=$(LIBDIR) >> config.make
-       @echo BINDIR=`$(GETBINDIR)` >> config.make
-       @echo INSTALLDIR=$(INSTALLDIR) >> config.make
-# Luca: was
-#      @echo GTKCFLAGS=`$(GTKGETCFLAGS)` -I/usr/lib/ocaml/lablgtk >> config.make
-# Luca: now
-       @echo GTKCFLAGS=`$(GTKGETCFLAGS)` -I$(LIBDIR)/lablgtk >> config.make
-       @echo GTKLIBS=`$(GTKGETLIBS)` | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-# Luca: GtkMathView configuration
-       @echo GTKMATHVIEWCFLAGS=`gtkmathview-config --cflags` >> config.make
-       @echo MINIDOMCFLAGS=`minidom-config --cflags` >> config.make
-       @echo GTKMATHVIEWLIBS=`gtkmathview-config --libs` >> config.make
-       @echo MINIDOMLIBS=`minidom-config --libs` >> config.make
-# Luca: end of GtkMathView configuration
-       @echo GNOMELIBS=$(GNOMELIBS) | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-       cat config.make
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/gMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/gMathView.ml
deleted file mode 100644 (file)
index 951b8d4..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-open Gaux
-open Gtk
-open Gtk_mathview
-open GtkBase
-open GtkMathView
-open GObj
-
-exception ErrorLoadingFile of string;;
-exception ErrorWritingFile of string;;
-exception NoSelection;;
-
-class math_view_signals obj = object
-  inherit GContainer.container_signals obj
-  method clicked = GtkSignal.connect ~sgn:MathView.Signals.clicked obj ~after
-  method jump = GtkSignal.connect ~sgn:MathView.Signals.jump obj ~after
-  method selection_changed =
-  GtkSignal.connect ~sgn:MathView.Signals.selection_changed obj ~after
-end
-
-class math_view obj = object
- inherit GContainer.container (obj : Gtk_mathview.math_view obj)
- method connect = new math_view_signals obj
- method load ~filename =
-  if not (MathView.load obj ~filename) then raise (ErrorLoadingFile filename)
- method unload = MathView.unload obj
- method get_selection = MathView.get_selection obj
- method set_selection (node : Ominidom.o_mDOMNode option) = MathView.set_selection obj node
- method get_width = MathView.get_width obj
- method get_height = MathView.get_height obj
- method get_top = MathView.get_top obj
- method set_top = MathView.set_top obj
- method set_adjustments =
-  fun adj1 adj2 ->
-   MathView.set_adjustments obj (GData.as_adjustment adj1)
-   (GData.as_adjustment adj2)
- method get_hadjustment = new GData.adjustment (MathView.get_hadjustment obj)
- method get_vadjustment = new GData.adjustment (MathView.get_vadjustment obj)
- method get_buffer = MathView.get_buffer obj
- method get_frame = new GBin.frame (MathView.get_frame obj)
- method set_font_size = MathView.set_font_size obj
- method get_font_size = MathView.get_font_size obj
- method set_anti_aliasing = MathView.set_anti_aliasing obj
- method get_anti_aliasing = MathView.get_anti_aliasing obj
- method set_kerning = MathView.set_kerning obj
- method get_kerning = MathView.get_kerning obj
- method set_log_verbosity = MathView.set_log_verbosity obj
- method get_log_verbosity = MathView.get_log_verbosity obj
- method export_to_postscript
-       ?(width = 595) ?(height = 822) ?(x_margin = 72) ?(y_margin = 72)
-       ?(disable_colors = false) ~filename () =
-  let result = MathView.export_to_postscript obj
-       ~width ~height ~x_margin ~y_margin ~disable_colors ~filename
-  in
-  if not result then raise (ErrorWritingFile filename)
- method get_font_manager_type = MathView.get_font_manager_type obj
- method set_font_manager_type ~fm_type = MathView.set_font_manager_type obj ~fm_type
-end
-
-let math_view ?adjustmenth ?adjustmentv ?font_size ?font_manager ?border_width
- ?width ?height ?packing ?show () =
- let w =
-   MathView.create
-    ?adjustmenth:(may_map ~f:GData.as_adjustment adjustmenth)
-    ?adjustmentv:(may_map ~f:GData.as_adjustment adjustmentv)
-    ()
- in
-  Container.set w ?border_width ?width ?height;
- let mathview = pack_return (new math_view w) ~packing ~show in
- begin
-    match font_size with
-    | Some size -> mathview#set_font_size size
-    | None      -> ()
-  end;
-  begin
-    match font_manager with
-    | Some manager -> mathview#set_font_manager_type ~fm_type:manager
-    | None         -> ()
-  end;
-;;
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/gtkMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/gtkMathView.ml
deleted file mode 100644 (file)
index 4c893fa..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-open Gtk
-open Gtk_mathview
-open Tags
-open GtkBase
-open Gpointer
-
-external mDOMNode_of_boxed_option :
- Gpointer.boxed option -> Minidom.mDOMNode =
-  "ml_gtk_math_view_mDOMNode_of_bodex_option"
-
-external mDOMNode_option_of_boxed_option :
- Gpointer.boxed option -> Minidom.mDOMNode option =
-  "ml_gtk_math_view_mDOMNode_option_of_bodex_option"
-
-let o_mDOMNode_of_mDOMNode node = new Ominidom.o_mDOMNode node
-
-let o_mDOMNode_option_of_mDOMNode_option =
-  function
-  | Some x -> Some (o_mDOMNode_of_mDOMNode x)
-  | None   -> None
-
-let mDOMNode_option_of_o_mDOMNode_option =
-  function
-  | Some x -> Some (x#get_dom_node)
-  | None   -> None
-
-module MathView = struct
-  exception NoSelection
-
-  let cast w : math_view obj = Object.try_cast w "GtkMathView"
-  external create : Gtk.adjustment optobj -> Gtk.adjustment optobj -> 
-   math_view obj = "ml_gtk_math_view_new"
-  let create ~adjustmenth ~adjustmentv () =
-   create (optboxed adjustmenth) (optboxed adjustmentv)
-  external load : [>`math_view] obj -> filename:string -> bool =
-   "ml_gtk_math_view_load"
-  external unload : [>`math_view] obj -> unit =
-   "ml_gtk_math_view_unload"
-  external raw_get_selection : [>`math_view] obj -> Minidom.mDOMNode option =
-   "ml_gtk_math_view_get_selection"
-  let get_selection obj =
-   o_mDOMNode_option_of_mDOMNode_option (raw_get_selection obj)
-  external raw_set_selection : [>`math_view] obj -> Minidom.mDOMNode option -> unit=
-   "ml_gtk_math_view_set_selection"
-  let set_selection obj node =
-   raw_set_selection obj (mDOMNode_option_of_o_mDOMNode_option node)
-  external get_width : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_width"
-  external get_height : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_height"
-  external get_top : [>`math_view] obj -> (int * int) =
-   "ml_gtk_math_view_get_top"
-  external set_top : [>`math_view] obj -> int -> int -> unit =
-   "ml_gtk_math_view_set_top"
-  external set_adjustments : [>`math_view] obj -> Gtk.adjustment obj -> Gtk.adjustment obj -> unit =
-   "ml_gtk_math_view_set_adjustments"
-  external get_hadjustment : [>`math_view] obj -> Gtk.adjustment obj =
-   "ml_gtk_math_view_get_hadjustment"
-  external get_vadjustment : [>`math_view] obj -> Gtk.adjustment obj =
-   "ml_gtk_math_view_get_vadjustment"
-  external get_buffer : [>`math_view] obj -> Gdk.pixmap =
-   "ml_gtk_math_view_get_buffer"
-  external get_frame : [>`math_view] obj -> [`frame] obj =
-   "ml_gtk_math_view_get_frame"
-  external set_font_size : [>`math_view] obj -> int -> unit =
-   "ml_gtk_math_view_set_font_size"
-  external get_font_size : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_font_size"
-  external set_anti_aliasing : [>`math_view] obj -> bool -> unit =
-   "ml_gtk_math_view_set_anti_aliasing"
-  external get_anti_aliasing : [>`math_view] obj -> bool =
-   "ml_gtk_math_view_get_anti_aliasing"
-  external set_kerning : [>`math_view] obj -> bool -> unit =
-   "ml_gtk_math_view_set_kerning"
-  external get_kerning : [>`math_view] obj -> bool =
-   "ml_gtk_math_view_get_kerning"
-  external set_log_verbosity : [>`math_view] obj -> int -> unit =
-   "ml_gtk_math_view_set_log_verbosity"
-  external get_log_verbosity : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_log_verbosity"
-  external export_to_postscript :
-   [>`math_view] obj -> width:int -> height:int -> x_margin:int -> y_margin:int -> disable_colors:bool -> filename:string -> bool =
-   "ml_gtk_math_view_export_to_postscript_bytecode" "ml_gtk_math_view_export_to_postscript_native"
-  external get_font_manager_type : [>`math_view] obj ->
-   [`font_manager_gtk | `font_manager_t1] =
-   "ml_gtk_math_view_get_font_manager_type"
-  external set_font_manager_type : [>`math_view] obj ->
-    fm_type:[`font_manager_gtk | `font_manager_t1] -> unit =
-   "ml_gtk_math_view_set_font_manager_type"
-  
-  module Signals = struct
-    open GtkSignal
-
-    let clicked : ([>`math_view],_) t =
-     let marshal_clicked f _ =
-      function
-         [GtkArgv.POINTER node] -> f (o_mDOMNode_of_mDOMNode (mDOMNode_of_boxed_option node))
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_clicked"
-     in
-      { name = "clicked"; marshaller = marshal_clicked }
-
-    let jump : ([>`math_view],_) t =
-     let marshal_jump f _ =
-      function
-         [GtkArgv.POINTER node] -> f (o_mDOMNode_of_mDOMNode (mDOMNode_of_boxed_option node))
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_jump"
-     in
-      { name = "jump"; marshaller = marshal_jump }
-
-    let selection_changed : ([>`math_view],_) t =
-     let marshal_selection_changed f _ =
-      function
-         [GtkArgv.POINTER node] -> f (o_mDOMNode_option_of_mDOMNode_option (mDOMNode_option_of_boxed_option node))
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_selection_changed"
-     in
-      { name = "selection_changed"; marshaller = marshal_selection_changed }
-  end
-end
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/gtk_mathview.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/gtk_mathview.ml
deleted file mode 100644 (file)
index 745a1ba..0000000
+++ /dev/null
@@ -1 +0,0 @@
-type math_view = [`widget|`container|`bin|`eventbox|`math_view]
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/.cvsignore
deleted file mode 100644 (file)
index 84bdd8e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.cmx test test.opt
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/Makefile
deleted file mode 100644 (file)
index 6fe73af..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-LIBDIR = /usr/lib/ocaml
-INSTALLDIR = $(LIBDIR)/minidom
-OBJECTS = minidom.cmi minidom.cmo ml_minidom.o ominidom.cmi ominidom.cmo
-OBJECTS_OPT = minidom.cmx ominidom.cmx
-INST = minidom.o ominidom.o ml_minidom.h minidom.mli
-
-all: $(OBJECTS) test
-
-opt: $(OBJECTS_OPT) test.opt
-
-ml_minidom.o: ml_minidom.c
-       gcc -c -I/usr/lib/ocaml/caml/ `glib-config --cflags` `minidom-config --cflags` $<
-
-minidom.cmi: minidom.mli
-       ocamlc -c $<
-
-minidom.cmo: minidom.ml minidom.cmi
-       ocamlc -c $<
-
-minidom.cmx: minidom.ml minidom.cmi
-       ocamlopt -c $<
-
-ominidom.cmi: ominidom.mli
-       ocamlc -c $<
-
-ominidom.cmo: ominidom.ml
-       ocamlc -c $<
-
-ominidom.cmx: ominidom.ml
-       ocamlopt -c $<
-
-test.cmo: test.ml minidom.cmo
-       ocamlc -c test.ml
-
-test.cmx: test.ml minidom.cmx
-       ocamlopt -c test.ml
-
-test: test.cmo minidom.cmo ml_minidom.o
-       ocamlc -custom -o test minidom.cmo test.cmo ml_minidom.o \
-        -cclib "`glib-config --libs` `minidom-config --libs`"
-
-test.opt: test.cmx minidom.cmx ml_minidom.o
-       ocamlopt -o test.opt minidom.cmx test.cmx ml_minidom.o \
-        -cclib "`glib-config --libs` `minidom-config --libs`"
-
-install:
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(OBJECTS) $(OBJECTS_OPT) $(INST) $(INSTALLDIR)
-
-clean:
-       rm -f *.o *.cm? test test.opt
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/minidom.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/minidom.ml
deleted file mode 100644 (file)
index 31e677b..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-
-type mDOMString
-type mDOMDoc
-type mDOMNode
-type mDOMAttr
-type mDOMEntity
-
-external string_of_mDOMString : mDOMString -> string = "ml_string_of_mDOMString"
-external mDOMString_of_string : string -> mDOMString = "ml_mDOMString_of_string"
-external mDOMString_eq : string -> string -> bool = "ml_mDOMString_eq"
-
-external doc_load : string -> mDOMDoc = "ml_doc_load"
-external doc_unload : mDOMDoc -> unit = "ml_doc_unload"
-
-external doc_new : mDOMString -> mDOMDoc = "ml_doc_new"
-external doc_get_root_node : mDOMDoc -> mDOMNode = "ml_doc_get_root_node"
-
-external doc_add_entity : mDOMDoc -> mDOMString -> mDOMString -> mDOMEntity = "ml_doc_add_entity"
-external doc_get_entity : mDOMDoc -> mDOMString -> mDOMEntity option = "ml_doc_get_entity"
-external doc_get_predefined_entity : mDOMDoc -> mDOMString -> mDOMEntity option = "ml_doc_get_predefined_entity"
-external entity_get_content : mDOMEntity -> mDOMString = "ml_entity_get_content"
-
-external node_is_text  : mDOMNode -> bool = "ml_node_is_text"
-external node_is_element : mDOMNode -> bool = "ml_node_is_element"
-external node_is_blank : mDOMNode -> bool = "ml_node_is_blank"
-external node_is_entity_ref : mDOMNode -> bool = "ml_node_is_entity_ref"
-external node_get_type : mDOMNode -> int = "ml_node_get_type"
-external node_get_name : mDOMNode -> mDOMString option = "ml_node_get_name"
-external node_get_ns_uri : mDOMNode -> mDOMString option = "ml_node_get_ns_uri"
-external node_get_attribute : mDOMNode -> mDOMString -> mDOMString option = "ml_node_get_attribute"
-external node_get_attribute_ns : mDOMNode -> mDOMString -> mDOMString -> mDOMString option = "ml_node_get_attribute_ns"
-external node_get_content : mDOMNode -> mDOMString option = "ml_node_get_content"
-external node_get_parent : mDOMNode -> mDOMNode option = "ml_node_get_parent"
-external node_get_prev_sibling : mDOMNode -> mDOMNode option = "ml_node_get_prev_sibling"
-external node_get_next_sibling : mDOMNode -> mDOMNode option = "ml_node_get_next_sibling"
-external node_get_first_child : mDOMNode -> mDOMNode option = "ml_node_get_first_child"
-external node_get_first_attribute : mDOMNode -> mDOMAttr option = "ml_node_get_first_attribute"
-external node_is_first : mDOMNode -> bool = "ml_node_is_first"
-external node_is_last : mDOMNode -> bool = "ml_node_is_last"
-
-external attr_get_name : mDOMAttr -> mDOMString option = "ml_attr_get_name"
-external attr_get_ns_uri : mDOMAttr -> mDOMString option = "ml_attr_get_ns_uri"
-external attr_get_value : mDOMAttr -> mDOMString option = "ml_attr_get_value"
-external attr_get_prev_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_prev_sibling"
-external attr_get_next_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_next_sibling"
-external attr_get_parent : mDOMAttr -> mDOMNode option = "ml_attr_get_parent"
-
-let rec node_list_of_node_first =
-  function None -> []
-  |        Some node -> node :: (node_list_of_node_first (node_get_next_sibling node))
-
-let rec attr_list_of_attr_first =
-  function None -> []
-  |        Some attr -> attr :: (attr_list_of_attr_first (attr_get_next_sibling attr))
-  
-let node_get_children node =
-  (node_list_of_node_first (node_get_first_child node))
-
-let node_get_attributes node =
-  (attr_list_of_attr_first (node_get_first_attribute node))
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/minidom.mli b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/minidom.mli
deleted file mode 100644 (file)
index 0b65595..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-
-type mDOMString
-type mDOMDoc
-type mDOMNode
-type mDOMAttr
-type mDOMEntity
-
-external string_of_mDOMString : mDOMString -> string = "ml_string_of_mDOMString"
-external mDOMString_of_string : string -> mDOMString = "ml_mDOMString_of_string"
-external mDOMString_eq : string -> string -> bool = "ml_mDOMString_eq"
-
-external doc_load : string -> mDOMDoc = "ml_doc_load"
-external doc_unload : mDOMDoc -> unit = "ml_doc_unload"
-
-external doc_new : mDOMString -> mDOMDoc = "ml_doc_new"
-external doc_get_root_node : mDOMDoc -> mDOMNode = "ml_doc_get_root_node"
-
-external doc_add_entity : doc:mDOMDoc -> name:mDOMString -> content:mDOMString -> mDOMEntity = "ml_doc_add_entity"
-external doc_get_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_entity"
-external doc_get_predefined_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_predefined_entity"
-external entity_get_content : mDOMEntity -> mDOMString = "ml_entity_get_content"
-
-external node_is_text  : mDOMNode -> bool = "ml_node_is_text"
-external node_is_element : mDOMNode -> bool = "ml_node_is_element"
-external node_is_blank : mDOMNode -> bool = "ml_node_is_blank"
-external node_is_entity_ref : mDOMNode -> bool = "ml_node_is_entity_ref"
-external node_get_type : mDOMNode -> int = "ml_node_get_type"
-external node_get_name : mDOMNode -> mDOMString option = "ml_node_get_name"
-external node_get_ns_uri : mDOMNode -> mDOMString option = "ml_node_get_ns_uri"
-external node_get_attribute : node:mDOMNode -> name:mDOMString -> mDOMString option = "ml_node_get_attribute"
-external node_get_attribute_ns : node:mDOMNode -> name:mDOMString -> ns_uri:mDOMString -> mDOMString option = "ml_node_get_attribute_ns"
-external node_get_content : mDOMNode -> mDOMString option = "ml_node_get_content"
-external node_get_parent : mDOMNode -> mDOMNode option = "ml_node_get_parent"
-external node_get_prev_sibling : mDOMNode -> mDOMNode option = "ml_node_get_prev_sibling"
-external node_get_next_sibling : mDOMNode -> mDOMNode option = "ml_node_get_next_sibling"
-external node_get_first_child : mDOMNode -> mDOMNode option = "ml_node_get_first_child"
-external node_get_first_attribute : mDOMNode -> mDOMAttr option = "ml_node_get_first_attribute"
-external node_is_first : mDOMNode -> bool = "ml_node_is_first"
-external node_is_last : mDOMNode -> bool = "ml_node_is_last"
-
-external attr_get_name : mDOMAttr -> mDOMString option = "ml_attr_get_name"
-external attr_get_ns_uri : mDOMAttr -> mDOMString option = "ml_attr_get_ns_uri"
-external attr_get_value : mDOMAttr -> mDOMString option = "ml_attr_get_value"
-external attr_get_prev_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_prev_sibling"
-external attr_get_next_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_next_sibling"
-external attr_get_parent : mDOMAttr -> mDOMNode option = "ml_attr_get_parent"
-
-val node_get_children : mDOMNode -> mDOMNode list
-val node_get_attributes : mDOMNode -> mDOMAttr list
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/ml_minidom.c b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/ml_minidom.c
deleted file mode 100644 (file)
index 1062614..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-
-#include <assert.h>
-#include <mlvalues.h>
-#include <memory.h>
-
-#include "minidom.h"
-
-#define Val_ptr(p)        ((value) (p))
-#define Val_option(p,f)   ((p != NULL) ? ml_some(f(p)) : Val_unit)
-#define Val_mDOMString(s) (copy_string((char*) (s)))
-#define mDOMString_val(v) ((mDOMStringRef) String_val(v))
-
-static value
-ml_some(value v)
-{
-  CAMLparam1(v);
-  value ret = alloc_small(1,0);
-  Field(ret,0) = v;
-  CAMLreturn(ret);
-}
-
-value
-ml_string_of_mDOMString(value s)
-{
-  CAMLparam1(s);
-  CAMLreturn(s);
-}
-
-value
-ml_mDOMString_of_string(value s)
-{
-  CAMLparam1(s);
-  CAMLreturn(s);
-}
-
-value
-ml_doc_load(value file_name)
-{
-  mDOMDocRef doc_ref;
-
-  CAMLparam1(file_name);
-
-  doc_ref = mdom_load(String_val(file_name), FALSE, NULL);
-  if (doc_ref == NULL) failwith("minidom: could not load document");
-
-  CAMLreturn((value) doc_ref);
-}
-
-value
-ml_doc_unload(value doc)
-{
-  CAMLparam1(doc);
-
-  mdom_unload((mDOMDocRef) doc);
-
-  CAMLreturn(Val_unit);
-}
-
-value
-ml_doc_new(value s)
-{
-  mDOMDocRef doc_ref;
-
-  CAMLparam1(s);
-
-  doc_ref = mdom_doc_new(mDOMString_val(s));
-  if (doc_ref == NULL) failwith("minidom: could not create new document");
-
-  CAMLreturn((value) doc_ref);
-}
-
-
-value
-ml_doc_get_root_node(value doc)
-{
-  mDOMNodeRef root;
-
-  CAMLparam1(doc);
-  root = mdom_doc_get_root_node((mDOMDocRef) doc);
-  if (root == NULL) failwith("minidom: document has no root node!");
-
-  CAMLreturn((value) root);
-}
-
-value
-ml_doc_add_entity(value doc, value name, value content)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam3(doc, name, content);
-  ent = mdom_doc_add_entity((mDOMDocRef) doc, mDOMString_val(name), mDOMString_val(content));
-  if (ent == NULL) failwith("minidom: could not add entity");
-
-  CAMLreturn((value) ent);
-}
-
-value
-ml_doc_get_entity(value doc, value name)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam2(doc, name);
-  ent = mdom_doc_get_entity((mDOMDocRef) doc, mDOMString_val(name));
-
-  CAMLreturn(Val_option(ent, Val_ptr));
-}
-
-value
-ml_doc_get_predefined_entity(value name)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam1(name);
-  ent = mdom_get_predefined_entity(mDOMString_val(name));
-
-  CAMLreturn(Val_option(ent, Val_ptr));
-}
-
-value
-ml_entity_get_content(value ent)
-{
-  CAMLparam1(ent);
-  CAMLreturn(Val_mDOMString(mdom_entity_get_content((mDOMEntityRef) ent)));
-}
-
-value
-ml_node_is_text(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_text((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_element(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_element((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_blank(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_blank((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_entity_ref(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_entity_ref((mDOMNodeRef) node)));
-}
-
-value
-ml_node_get_type(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_int(mdom_node_get_type((mDOMNodeRef) node)));
-}
-
-value
-ml_node_get_name(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_name((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_content(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_content((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_ns_uri(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_ns_uri((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_attribute(value node, value name)
-{
-  CAMLparam2(node,name);
-  CAMLreturn(Val_option(mdom_node_get_attribute((mDOMNodeRef) node, String_val(name)), Val_mDOMString));
-}
-
-value
-ml_node_get_attribute_ns(value node, value name, value ns_uri)
-{
-  CAMLparam2(node,name);
-  CAMLreturn(Val_option(mdom_node_get_attribute_ns((mDOMNodeRef) node,
-                                                  String_val(name),
-                                                  String_val(ns_uri)), Val_mDOMString));
-}
-
-value
-ml_node_get_parent(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_parent((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_prev_sibling(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_prev_sibling((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_next_sibling(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_next_sibling((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_first_child(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_first_child((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_first_attribute(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_first_attribute((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_is_first(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_first((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_last(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_last((mDOMNodeRef) node)));
-}
-
-value
-ml_attr_get_name(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_name((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_ns_uri(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_ns_uri((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_value(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_value((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_prev_sibling(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_prev_sibling((mDOMAttrRef) attr), Val_ptr));
-}
-
-value
-ml_attr_get_next_sibling(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_next_sibling((mDOMAttrRef) attr), Val_ptr));
-}
-
-value
-ml_attr_get_parent(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_parent((mDOMAttrRef) attr), Val_ptr));
-}
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/ml_minidom.h b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/ml_minidom.h
deleted file mode 100644 (file)
index d224799..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#ifndef ml_minidom_h
-#define ml_minidom_h
-
-#define Val_ptr(p)        ((value) (p))
-#ifndef Val_option
-#define Val_option(p,f)   ((p != NULL) ? ml_some(f(p)) : Val_unit)
-#endif /* Val_option */
-#define Val_mDOMString(s) (copy_string((char*) (s)))
-#define mDOMString_val(v) ((mDOMStringRef) String_val(v))
-#define mDOMNode_val(v) ((mDOMNodeRef) v)
-
-#define mDOMNode_option_mDOMNodeRef(p) (((p) != NULL) ? ml_some((value) (p)) : Val_unit)
-#define mDOMNodeRef_mDOMNode_option(v) ((v == Val_unit) ? NULL : (mDOMNodeRef)Field((v),0))
-#define Val_mDOMNodeRef(p)             (mDOMNode_option_mDOMNodeRef(p))
-#define mDOMNodeRef_val(v)             (mDOMNodeRef_mDOMNode_option(v))
-
-#endif /* ml_minidom_h */
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/ominidom.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/ominidom.ml
deleted file mode 100644 (file)
index 85ad2e4..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-
-exception Node_has_no_parent;;
-exception Node_has_no_sibling of string;;
-exception Node_has_no_children;;
-exception Node_has_no_attributes;;
-exception Attribute_has_no_sibling of string;;
-exception Attribute_has_no_parent;;
-exception Undefined_entity;;
-
-let option_to_exception v e =
-  match v with
-    Some x -> x
-  | None   -> raise e
-;;
-
-class o_mDOMString (str: Minidom.mDOMString) =
-  object
-    method get_dom_string = str
-    method get_string = Minidom.string_of_mDOMString str
-  end;;
-  
-let o_mDOMString_of_string str =
-  new o_mDOMString (Minidom.mDOMString_of_string str)
-
-class o_mDOMEntity (ent : Minidom.mDOMEntity) =
-  object
-    method get_dom_entity = ent
-    method get_content =
-      new o_mDOMString (Minidom.entity_get_content ent)
-  end
-;;
-
-class o_mDOMDoc (doc : Minidom.mDOMDoc) =
-  object
-    method get_dom_doc = doc
-
-    method get_root_node =
-      new o_mDOMNode (Minidom.doc_get_root_node doc)
-    method add_entity (name : o_mDOMString) (value : o_mDOMString) =
-      new o_mDOMEntity
-        (Minidom.doc_add_entity doc
-         (name#get_dom_string) (value#get_dom_string)
-       )
-    method get_entity (name : o_mDOMString) =
-      match Minidom.doc_get_entity doc (name#get_dom_string) with
-      | Some x -> new o_mDOMEntity x
-      | None -> raise Undefined_entity
-    method get_predefined_entity (name : o_mDOMString) =
-      match Minidom.doc_get_predefined_entity doc (name#get_dom_string) with
-      | Some x -> new o_mDOMEntity x
-      | None -> raise Undefined_entity
-  end
-and o_mDOMNode (node : Minidom.mDOMNode) =
-  object
-    method get_dom_node = node
-
-    method is_text = Minidom.node_is_text node
-    method is_element = Minidom.node_is_element node
-    method is_blank = Minidom.node_is_blank node
-    method is_entity_ref = Minidom.node_is_entity_ref node
-
-    method get_type = Minidom.node_get_type node
-    method get_name = 
-      match Minidom.node_get_name node with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_ns_uri =
-      match Minidom.node_get_ns_uri node with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_attribute (name : o_mDOMString) =
-      match Minidom.node_get_attribute node (name#get_dom_string) with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_attribute_ns (name : o_mDOMString) (uri : o_mDOMString) =
-      match 
-        Minidom.node_get_attribute_ns node
-         (name#get_dom_string) (uri#get_dom_string)
-      with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_content =
-      match Minidom.node_get_content node with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_parent =
-      new o_mDOMNode
-       (option_to_exception (Minidom.node_get_parent node) Node_has_no_parent)
-    method get_prev_sibling =
-      new o_mDOMNode
-       (option_to_exception
-        (Minidom.node_get_prev_sibling node)
-        (Node_has_no_sibling "left")
-       )
-    method get_next_sibling =
-      new o_mDOMNode
-       (option_to_exception
-        (Minidom.node_get_next_sibling node)
-        (Node_has_no_sibling "right")
-       )
-    method get_first_child =
-      new o_mDOMNode
-       (option_to_exception
-        (Minidom.node_get_first_child node)
-        (Node_has_no_children)
-       )
-    method get_first_attribute =
-      new o_mDOMAttr
-       (option_to_exception
-         (Minidom.node_get_first_attribute node)
-         (Node_has_no_attributes)
-       )
-    method is_first = Minidom.node_is_first node
-    method is_last = Minidom.node_is_last node
-
-    method get_children =
-      List.map (function x -> new o_mDOMNode x) (Minidom.node_get_children node)
-    method get_attributes = List.map
-      (function x -> new o_mDOMAttr x) (Minidom.node_get_attributes node)
-  end
-and o_mDOMAttr (attr : Minidom.mDOMAttr) =
-  object
-    method get_dom_attr = attr
-
-    method get_name =
-      match Minidom.attr_get_name attr with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_ns_uri =
-      match Minidom.attr_get_ns_uri attr with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_value =
-      match Minidom.attr_get_value attr with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_prev_sibling =
-      new o_mDOMAttr
-        (option_to_exception
-         (Minidom.attr_get_prev_sibling attr)
-         (Attribute_has_no_sibling "left")
-       )
-    method get_next_sibling =
-      new o_mDOMAttr
-        (option_to_exception
-         (Minidom.attr_get_next_sibling attr)
-         (Attribute_has_no_sibling "right")
-       )
-    method get_parent =
-      new o_mDOMNode
-        (option_to_exception
-         (Minidom.attr_get_parent attr) Attribute_has_no_parent
-       )
-  end
-;;
-    
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/test.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/test.ml
deleted file mode 100644 (file)
index 3c7a092..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-
-let doc = Minidom.doc_load "test.xml"
-
-let root = Minidom.doc_get_root_node doc
-
-let check_attribute_ns attr =
-  Printf.printf "\n\n";
-  let ns_uri = Minidom.attr_get_ns_uri attr
-  and attr_name = Minidom.attr_get_name attr
-  and attr_value = Minidom.attr_get_value attr
-  and parent = Minidom.attr_get_parent attr
-  in
-  match parent,ns_uri,attr_name,attr_value with
-    Some parent_node,Some uri,Some attribute_name,Some attribute_value ->
-      let attr_value = Minidom.node_get_attribute_ns parent_node attribute_name uri
-      in begin
-        match attr_value with
-          Some attr1 ->
-           Printf.printf "found the attribute with ns %s (was %s)\n"
-              (Minidom.string_of_mDOMString attr1) (Minidom.string_of_mDOMString attribute_value)
-        | None ->
-           Printf.printf "attribute not found (uri was %s)!!!!\n" (Minidom.string_of_mDOMString uri)
-      end
-  | _ ->
-      Printf.printf "parent_node == NULL || uri == NULL || attribute_name == NULL || attribute_value == NULL\n"
-;;
-    
-let print_attribute attr =
-  check_attribute_ns attr;
-  let ns_uri = Minidom.attr_get_ns_uri attr
-  in
-  begin
-    match ns_uri with
-      Some uri -> Printf.printf " %s:" (Minidom.string_of_mDOMString uri);
-    | None -> ()
-  end;
-  match ((Minidom.attr_get_name attr), (Minidom.attr_get_value attr)) with
-    (Some attr_name, Some attr_value) ->
-      Printf.printf " %s=\"%s\"" (Minidom.string_of_mDOMString attr_name) (Minidom.string_of_mDOMString attr_value) 
-  | (Some attr_name, _) ->
-      Printf.printf " ??? attribute %s has no value !!!" (Minidom.string_of_mDOMString attr_name)
-  | (_,_) ->
-      Printf.printf " ??? very strange attribute !!!"
-;;
-
-let rec print_node n node =
-  if Minidom.node_is_blank node then ()
-  else if Minidom.node_is_element node then begin
-    match Minidom.node_get_name node with
-      Some node_name -> 
-        begin
-          let children = Minidom.node_get_children node
-          and attributes = Minidom.node_get_attributes node
-          and ns_uri = Minidom.node_get_ns_uri node
-          and is_first,is_last = (Minidom.node_is_first node), (Minidom.node_is_last node)
-          in
-          for i = 1 to n do print_char ' ' done;
-          Printf.printf "<";
-          begin
-            match ns_uri with
-              Some uri -> Printf.printf "%s:" (Minidom.string_of_mDOMString uri)
-            | None     -> ()
-          end;
-          Printf.printf "%s" (Minidom.string_of_mDOMString node_name);
-          List.iter print_attribute attributes;
-          Printf.printf ">\n";
-          List.iter (print_node (n + 2)) children;
-          for i = 1 to n do print_char ' ' done;
-          Printf.printf "</%s>\n" (Minidom.string_of_mDOMString node_name)
-        end
-    | None -> Printf.printf "??? this node has no name !!!\n"
-  end else if Minidom.node_is_text node then begin
-    match Minidom.node_get_content node with
-      Some node_content ->
-        for i = 1 to n do print_char ' ' done;
-        Printf.printf "%s\n" (Minidom.string_of_mDOMString node_content)
-    | None -> Printf.printf "??? this node has no content !!!\n"
-  end else begin
-    Printf.printf "don't know how to manage a node with type %d\n" (Minidom.node_get_type node)
-  end
-;;
-  
-print_node 0 root;;
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/test.xml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/minidom/test.xml
deleted file mode 100644 (file)
index 83d2eef..0000000
+++ /dev/null
@@ -1,505 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<?cocoon-format type="text/xhtml"?>
-<m:math xmlns:helm="http://www.cs.unibo.it/helm" xmlns:m="http://www.w3.org/1998/Math/MathML">
-    <m:mtable helm:xref="i0" columnalign="left" equalrows="false" align="baseline 1">
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mtext>DEFINITION and_ind() OF TYPE</m:mtext>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mphantom>
-                        <m:mtext>__</m:mtext>
-                    </m:mphantom>
-                    <m:semantics xmlns:xlink="http://www.w3.org/1999/xlink">
-                        <m:mrow helm:xref="i22">
-                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo stretchy="false">(</m:mo>
-                                            <m:mrow helm:xref="i23">
-                                                <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mo color="Blue">&#928;</m:mo>
-                                                            <m:mi>A</m:mi>
-                                                            <m:mo>:</m:mo>
-                                                            <m:mrow helm:xref="i24">
-                                                                <m:mo>Prop</m:mo>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mrow>
-                                                                <m:mo>.</m:mo>
-                                                                <m:mrow helm:xref="i25">
-                                                                    <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mo color="Blue">&#928;</m:mo>
-                                                                                <m:mi>B</m:mi>
-                                                                                <m:mo>:</m:mo>
-                                                                                <m:mrow helm:xref="i26">
-                                                                                    <m:mo>Prop</m:mo>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mrow>
-                                                                                    <m:mo>.</m:mo>
-                                                                                    <m:mrow helm:xref="i27">
-                                                                                        <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mo color="Blue">&#928;</m:mo>
-                                                                                                    <m:mi>P</m:mi>
-                                                                                                    <m:mo>:</m:mo>
-                                                                                                    <m:mrow helm:xref="i28">
-                                                                                                        <m:mo>Prop</m:mo>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mrow>
-                                                                                                        <m:mo>.</m:mo>
-                                                                                                        <m:mrow helm:xref="i29">
-                                                                                                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mo color="Blue">&#928;</m:mo>
-                                                                                                                        <m:mi>f</m:mi>
-                                                                                                                        <m:mo>:</m:mo>
-                                                                                                                        <m:mrow helm:xref="i30">
-                                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                                            <m:mi helm:xref="i31">A</m:mi>
-                                                                                                                            <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                                            <m:mrow helm:xref="i32">
-                                                                                                                                <m:mo stretchy="false">(</m:mo>
-                                                                                                                                <m:mi helm:xref="i33">B</m:mi>
-                                                                                                                                <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                                                <m:mi helm:xref="i34">P</m:mi>
-                                                                                                                                <m:mo stretchy="false">)</m:mo>
-                                                                                                                            </m:mrow>
-                                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mrow>
-                                                                                                                            <m:mo>.</m:mo>
-                                                                                                                            <m:mrow helm:xref="i35">
-                                                                                                                                <m:mo color="Blue">&#928;</m:mo>
-                                                                                                                                <m:mi>a</m:mi>
-                                                                                                                                <m:mo>:</m:mo>
-                                                                                                                                <m:mrow helm:xref="i36">
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi xlink:href="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i37">and</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi helm:xref="i38">A</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi helm:xref="i39">B</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mo>.</m:mo>
-                                                                                                                                <m:mi helm:xref="i40">P</m:mi>
-                                                                                                                            </m:mrow>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                            </m:mtable>
-                                                                                                        </m:mrow>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                        </m:mtable>
-                                                                                    </m:mrow>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                    </m:mtable>
-                                                                </m:mrow>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                </m:mtable>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo color="#b03060">:&gt;</m:mo>
-                                            <m:mrow helm:xref="i41">
-                                                <m:mo>Prop</m:mo>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo stretchy="false">)</m:mo>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                            </m:mtable>
-                        </m:mrow>
-                        <m:annotation-xml encoding="MathML">
-                            <m:apply helm:xref="i22">
-                                <m:csymbol>cast</m:csymbol>
-                                <m:apply helm:xref="i23">
-                                    <m:csymbol>prod</m:csymbol>
-                                    <m:bvar>
-                                        <m:ci>A</m:ci>
-                                        <m:type>
-                                            <m:apply helm:xref="i24">
-                                                <m:csymbol>Prop</m:csymbol>
-                                            </m:apply>
-                                        </m:type>
-                                    </m:bvar>
-                                    <m:apply helm:xref="i25">
-                                        <m:csymbol>prod</m:csymbol>
-                                        <m:bvar>
-                                            <m:ci>B</m:ci>
-                                            <m:type>
-                                                <m:apply helm:xref="i26">
-                                                    <m:csymbol>Prop</m:csymbol>
-                                                </m:apply>
-                                            </m:type>
-                                        </m:bvar>
-                                        <m:apply helm:xref="i27">
-                                            <m:csymbol>prod</m:csymbol>
-                                            <m:bvar>
-                                                <m:ci>P</m:ci>
-                                                <m:type>
-                                                    <m:apply helm:xref="i28">
-                                                        <m:csymbol>Prop</m:csymbol>
-                                                    </m:apply>
-                                                </m:type>
-                                            </m:bvar>
-                                            <m:apply helm:xref="i29">
-                                                <m:csymbol>prod</m:csymbol>
-                                                <m:bvar>
-                                                    <m:ci>f</m:ci>
-                                                    <m:type>
-                                                        <m:apply helm:xref="i30">
-                                                            <m:csymbol>arrow</m:csymbol>
-                                                            <m:ci helm:xref="i31">A</m:ci>
-                                                            <m:apply helm:xref="i32">
-                                                                <m:csymbol>arrow</m:csymbol>
-                                                                <m:ci helm:xref="i33">B</m:ci>
-                                                                <m:ci helm:xref="i34">P</m:ci>
-                                                            </m:apply>
-                                                        </m:apply>
-                                                    </m:type>
-                                                </m:bvar>
-                                                <m:apply helm:xref="i35">
-                                                    <m:csymbol>prod</m:csymbol>
-                                                    <m:bvar>
-                                                        <m:ci>a</m:ci>
-                                                        <m:type>
-                                                            <m:apply helm:xref="i36">
-                                                                <m:csymbol>app</m:csymbol>
-                                                                <m:ci definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i37">and</m:ci>
-                                                                <m:ci helm:xref="i38">A</m:ci>
-                                                                <m:ci helm:xref="i39">B</m:ci>
-                                                            </m:apply>
-                                                        </m:type>
-                                                    </m:bvar>
-                                                    <m:ci helm:xref="i40">P</m:ci>
-                                                </m:apply>
-                                            </m:apply>
-                                        </m:apply>
-                                    </m:apply>
-                                </m:apply>
-                                <m:apply helm:xref="i41">
-                                    <m:csymbol>Prop</m:csymbol>
-                                </m:apply>
-                            </m:apply>
-                        </m:annotation-xml>
-                    </m:semantics>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mtext>AS</m:mtext>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mphantom>
-                        <m:mtext>__</m:mtext>
-                    </m:mphantom>
-                    <m:semantics xmlns:xlink="http://www.w3.org/1999/xlink">
-                        <m:mrow helm:xref="i1">
-                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mo color="Red">&#955;</m:mo>
-                                        <m:mi>A</m:mi>
-                                        <m:mo>:</m:mo>
-                                        <m:mrow helm:xref="i2">
-                                            <m:mo>Prop</m:mo>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo>.</m:mo>
-                                            <m:mrow helm:xref="i3">
-                                                <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mo color="Red">&#955;</m:mo>
-                                                            <m:mi>B</m:mi>
-                                                            <m:mo>:</m:mo>
-                                                            <m:mrow helm:xref="i4">
-                                                                <m:mo>Prop</m:mo>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mrow>
-                                                                <m:mo>.</m:mo>
-                                                                <m:mrow helm:xref="i5">
-                                                                    <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mo color="Red">&#955;</m:mo>
-                                                                                <m:mi>P</m:mi>
-                                                                                <m:mo>:</m:mo>
-                                                                                <m:mrow helm:xref="i6">
-                                                                                    <m:mo>Prop</m:mo>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mrow>
-                                                                                    <m:mo>.</m:mo>
-                                                                                    <m:mrow helm:xref="i7">
-                                                                                        <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mo color="Red">&#955;</m:mo>
-                                                                                                    <m:mi>f</m:mi>
-                                                                                                    <m:mo>:</m:mo>
-                                                                                                    <m:mrow helm:xref="i8">
-                                                                                                        <m:mo stretchy="false">(</m:mo>
-                                                                                                        <m:mi helm:xref="i9">A</m:mi>
-                                                                                                        <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                        <m:mrow helm:xref="i10">
-                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                            <m:mi helm:xref="i11">B</m:mi>
-                                                                                                            <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                            <m:mi helm:xref="i12">P</m:mi>
-                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                        </m:mrow>
-                                                                                                        <m:mo stretchy="false">)</m:mo>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mrow>
-                                                                                                        <m:mo>.</m:mo>
-                                                                                                        <m:mrow helm:xref="i13">
-                                                                                                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mo color="Red">&#955;</m:mo>
-                                                                                                                        <m:mi>a</m:mi>
-                                                                                                                        <m:mo>:</m:mo>
-                                                                                                                        <m:mrow helm:xref="i14">
-                                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                                            <m:mi xlink:href="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i15">and</m:mi>
-                                                                                                                            <m:mphantom>
-                                                                                                                                <m:mtext>_</m:mtext>
-                                                                                                                            </m:mphantom>
-                                                                                                                            <m:mi helm:xref="i16">A</m:mi>
-                                                                                                                            <m:mphantom>
-                                                                                                                                <m:mtext>_</m:mtext>
-                                                                                                                            </m:mphantom>
-                                                                                                                            <m:mi helm:xref="i17">B</m:mi>
-                                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mrow>
-                                                                                                                            <m:mo>.</m:mo>
-                                                                                                                            <m:mrow helm:xref="i18">
-                                                                                                                                <m:mo>&lt;</m:mo>
-                                                                                                                                <m:mi helm:xref="i19">P</m:mi>
-                                                                                                                                <m:mo>&gt;</m:mo>
-                                                                                                                                <m:mo>CASES</m:mo>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mi helm:xref="i20">a</m:mi>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mo>OF</m:mo>
-                                                                                                                                <m:mrow>
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi>conj</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$1</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$2</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mo color="Green">&#8658;</m:mo>
-                                                                                                                                <m:mrow>
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi helm:xref="i21">f</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$1</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$2</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mo>END</m:mo>
-                                                                                                                            </m:mrow>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                            </m:mtable>
-                                                                                                        </m:mrow>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                        </m:mtable>
-                                                                                    </m:mrow>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                    </m:mtable>
-                                                                </m:mrow>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                </m:mtable>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                            </m:mtable>
-                        </m:mrow>
-                        <m:annotation-xml encoding="MathML">
-                            <m:lambda helm:xref="i1">
-                                <m:bvar>
-                                    <m:ci>A</m:ci>
-                                    <m:type>
-                                        <m:apply helm:xref="i2">
-                                            <m:csymbol>Prop</m:csymbol>
-                                        </m:apply>
-                                    </m:type>
-                                </m:bvar>
-                                <m:lambda helm:xref="i3">
-                                    <m:bvar>
-                                        <m:ci>B</m:ci>
-                                        <m:type>
-                                            <m:apply helm:xref="i4">
-                                                <m:csymbol>Prop</m:csymbol>
-                                            </m:apply>
-                                        </m:type>
-                                    </m:bvar>
-                                    <m:lambda helm:xref="i5">
-                                        <m:bvar>
-                                            <m:ci>P</m:ci>
-                                            <m:type>
-                                                <m:apply helm:xref="i6">
-                                                    <m:csymbol>Prop</m:csymbol>
-                                                </m:apply>
-                                            </m:type>
-                                        </m:bvar>
-                                        <m:lambda helm:xref="i7">
-                                            <m:bvar>
-                                                <m:ci>f</m:ci>
-                                                <m:type>
-                                                    <m:apply helm:xref="i8">
-                                                        <m:csymbol>arrow</m:csymbol>
-                                                        <m:ci helm:xref="i9">A</m:ci>
-                                                        <m:apply helm:xref="i10">
-                                                            <m:csymbol>arrow</m:csymbol>
-                                                            <m:ci helm:xref="i11">B</m:ci>
-                                                            <m:ci helm:xref="i12">P</m:ci>
-                                                        </m:apply>
-                                                    </m:apply>
-                                                </m:type>
-                                            </m:bvar>
-                                            <m:lambda helm:xref="i13">
-                                                <m:bvar>
-                                                    <m:ci>a</m:ci>
-                                                    <m:type>
-                                                        <m:apply helm:xref="i14">
-                                                            <m:csymbol>app</m:csymbol>
-                                                            <m:ci definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i15">and</m:ci>
-                                                            <m:ci helm:xref="i16">A</m:ci>
-                                                            <m:ci helm:xref="i17">B</m:ci>
-                                                        </m:apply>
-                                                    </m:type>
-                                                </m:bvar>
-                                                <m:apply helm:xref="i18">
-                                                    <m:csymbol>mutcase</m:csymbol>
-                                                    <m:ci helm:xref="i19">P</m:ci>
-                                                    <m:ci helm:xref="i20">a</m:ci>
-                                                    <m:apply>
-                                                        <m:csymbol>app</m:csymbol>
-                                                        <m:ci>conj</m:ci>
-                                                        <m:ci>$1</m:ci>
-                                                        <m:ci>$2</m:ci>
-                                                    </m:apply>
-                                                    <m:apply>
-                                                        <m:csymbol>app</m:csymbol>
-                                                        <m:ci helm:xref="i21">f</m:ci>
-                                                        <m:ci>$1</m:ci>
-                                                        <m:ci>$2</m:ci>
-                                                    </m:apply>
-                                                </m:apply>
-                                            </m:lambda>
-                                        </m:lambda>
-                                    </m:lambda>
-                                </m:lambda>
-                            </m:lambda>
-                        </m:annotation-xml>
-                    </m:semantics>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-    </m:mtable>
-</m:math>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/ml_gtk_mathview.c b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/ml_gtk_mathview.c
deleted file mode 100644 (file)
index 3c86f00..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-#include <assert.h>
-#include <string.h>
-#include <assert.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include <gtkmathview/gtkmathview.h>
-#include <ml_gtk.h>
-
-#include <wrappers.h>
-#include <ml_glib.h>
-#include <ml_gdk.h>
-#include <ml_gtk.h>
-#include <gtk_tags.h>
-
-#include <minidom.h>
-#include "minidom/ml_minidom.h"
-
-/* <CSC/>: Next row should be put in a .h of lablgtk. */
-#define GtkAdjustment_val(val) check_cast(GTK_ADJUSTMENT,val)
-
-#define GtkMathView_val(val) check_cast(GTK_MATH_VIEW,val)
-
-#define FontManagerId_val(val) Int_val(val)
-#define Val_FontManagerId(val) Val_int(val)
-
-FontManagerId
-font_manager_id_of_value(value v)
-{
-  if (v == hash_variant("font_manager_gtk")) return FONT_MANAGER_GTK;
-  else if (v == hash_variant("font_manager_t1")) return FONT_MANAGER_T1;
-  else assert(0);
-}
-
-value
-value_of_font_manager_id(FontManagerId id)
-{
-  switch (id) {
-  case FONT_MANAGER_GTK:
-    return hash_variant("font_manager_gtk");
-  case FONT_MANAGER_T1:
-    return hash_variant("font_manager_t1");
-  default:
-    assert(0);
-    break;
-  }
-}
-
-ML_2 (gtk_math_view_new,GtkAdjustment_val, GtkAdjustment_val, Val_GtkWidget_sink)
-ML_2 (gtk_math_view_load, GtkMathView_val, String_val, Val_bool)
-ML_1 (gtk_math_view_unload, GtkMathView_val, Unit)
-/*ML_1 (gtk_math_view_dump, GtkMathView_val, Unit)*/
-ML_1 (gtk_math_view_get_selection, GtkMathView_val, Val_mDOMNodeRef)
-ML_2 (gtk_math_view_set_selection, GtkMathView_val, mDOMNodeRef_val, Unit)
-ML_1 (gtk_math_view_get_width, GtkMathView_val, Val_int)
-ML_1 (gtk_math_view_get_height, GtkMathView_val, Val_int)
-ML_3 (gtk_math_view_set_top, GtkMathView_val, Int_val, Int_val, Unit)
-ML_3 (gtk_math_view_set_adjustments, GtkMathView_val, GtkAdjustment_val, GtkAdjustment_val, Unit)
-ML_1 (gtk_math_view_get_hadjustment, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_vadjustment, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_buffer, GtkMathView_val, Val_GdkPixmap)
-ML_1 (gtk_math_view_get_frame, GtkMathView_val, Val_GtkWidget)
-ML_2 (gtk_math_view_set_font_size, GtkMathView_val, Int_val, Unit)
-ML_1 (gtk_math_view_get_font_size, GtkMathView_val, Val_int)
-ML_2 (gtk_math_view_set_anti_aliasing, GtkMathView_val, Bool_val, Unit)
-ML_1 (gtk_math_view_get_anti_aliasing, GtkMathView_val, Val_bool)
-ML_2 (gtk_math_view_set_kerning, GtkMathView_val, Bool_val, Unit)
-ML_1 (gtk_math_view_get_kerning, GtkMathView_val, Val_bool)
-ML_2 (gtk_math_view_set_log_verbosity, GtkMathView_val, Int_val, Unit)
-ML_1 (gtk_math_view_get_log_verbosity, GtkMathView_val, Val_int)
-ML_2 (gtk_math_view_set_font_manager_type, GtkMathView_val, font_manager_id_of_value, Unit)
-ML_1 (gtk_math_view_get_font_manager_type, GtkMathView_val, value_of_font_manager_id)
-
-value
-ml_gtk_math_view_export_to_postscript_native(value arg1,
-               value w, value h, value x0, value y0, value disable_colors, value arg2)
-{
-   CAMLparam5(arg1,w,h,x0,y0);
-   CAMLxparam2(disable_colors, arg2);
-
-   char *filename;
-   FILE *fd;
-   int res;
-   filename = String_val (arg2);
-   if ((fd = fopen(filename, "w"))) {
-      gtk_math_view_export_to_postscript(GtkMathView_val (arg1),
-                     Int_val(w), Int_val(h), Int_val(x0), Int_val(y0), Bool_val(disable_colors), fd);
-      fclose (fd);
-      res = 1;
-   } else {
-      fprintf(stderr, "Error opening file %s for writing\n", filename);
-      res = 0;
-   }
-   CAMLreturn (Val_bool(res));
-}
-
-value ml_gtk_math_view_export_to_postscript_bytecode (value* arg, int argn)
-{
-   return ml_gtk_math_view_export_to_postscript_native(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6]);
-}
-
-value ml_gtk_math_view_get_top (value arg1)
-{
-   CAMLparam1(arg1);
-   CAMLlocal1 (result);
-   int x, y;
-   gtk_math_view_get_top(GtkMathView_val (arg1), &x, &y);
-   result = alloc(2, 0);
-   Store_field(result, 0, Val_int(x));
-   Store_field(result, 0, Val_int(y));
-   CAMLreturn (result);
-}
-
-
-value ml_gtk_math_view_mDOMNode_of_bodex_option (value arg1)
-{
-   CAMLparam1(arg1);
-
-   mDOMNodeRef nr;
-   CAMLlocal1 (tmp);
-   CAMLlocal1 (optval);
-   CAMLlocal1 (res);
-
-   if (arg1==Val_int(0)) {
-      assert(0);
-   } else {
-      tmp = Field(arg1, 0);
-      nr = (mDOMNodeRef) Field(tmp, 1);
-   }
-   optval = Val_mDOMNodeRef(nr);
-   if (optval==Val_int(0)) {
-      assert(0);
-   } else {
-      res = Field(optval, 0);
-   }
-
-  CAMLreturn(res);
-}
-
-value ml_gtk_math_view_mDOMNode_option_of_bodex_option (value arg1)
-{
-   CAMLparam1(arg1);
-
-   mDOMNodeRef nr;
-   CAMLlocal1 (tmp);
-
-   if (arg1==Val_int(0)) {
-      nr=NULL;
-   } else {
-      tmp = Field(arg1, 0);
-      nr = (mDOMNodeRef) Field(tmp, 1);
-   }
-
-  CAMLreturn(Val_mDOMNodeRef(nr));
-}
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/.cvsignore
deleted file mode 100644 (file)
index 1968614..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmo *.cmi *.cmx t1lib.log test test.opt test.ps test.o
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/Makefile
deleted file mode 100644 (file)
index d631d23..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-LABLGTK_DIR = /usr/lib/ocaml/lablgtk
-LABLGTK_MATHVIEW_DIR = ..
-MINIDOM_DIR = ../minidom
-OCAMLC = ocamlc -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) \
- -I $(MINIDOM_DIR) -I mlmathview
-OCAMLOPT = ocamlopt -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) \
- -I $(MINIDOM_DIR) -I mlmathview
-
-all: test
-opt: test.opt
-
-test: test.cmo
-       $(OCAMLC) -custom -o test lablgtk.cma gtkInit.cmo \
-                  $(MINIDOM_DIR)/minidom.cmo \
-                  $(MINIDOM_DIR)/ominidom.cmo \
-                  $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cma \
-                  -cclib "$(MINIDOM_DIR)/ml_minidom.o" \
-                  test.cmo \
-                  -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-                  -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
-                  -L/usr/local/lib/gtkmathview -lgtkmathview \
-                  $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o"
-
-test.opt: test.cmx
-       $(OCAMLOPT) -o test.opt lablgtk.cmxa gtkInit.cmx \
-                  $(MINIDOM_DIR)/minidom.cmx \
-                  $(MINIDOM_DIR)/ominidom.cmx \
-                  $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cmxa \
-                  -cclib "$(MINIDOM_DIR)/ml_minidom.o" \
-                  test.cmx \
-                  -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-                  -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
-                  -L/usr/local/lib/gtkmathview -lgtkmathview \
-                  $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o"
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo:
-       $(OCAMLC) -c $<
-.mli.cmi:
-       $(OCAMLC) -c $<
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o test test.opt t1lib.log test.ps
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/t1.config b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/t1.config
deleted file mode 100644 (file)
index afb669e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-ENCODING=.
-AFM=/usr/share/texmf/fonts/afm/
-TYPE1=/usr/share/texmf/fonts/type1/bluesky/cm/:/usr/X11R6/lib/X11/fonts/Type1/:.
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/test.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/test.ml
deleted file mode 100644 (file)
index dd66d38..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-(******************************************************************************)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 25/09/2000                                 *)
-(*                                                                            *)
-(*     This is a simple test for the OCaml (LablGtk indeed) binding of the    *)
-(*                             MathView widget                                *)
-(******************************************************************************)
-
-(* Callbacks *)
-let jump (node : Ominidom.o_mDOMNode) =
- let module O = Ominidom in
-  print_string ("jump: " ^
-   (match node#get_attribute (O.o_mDOMString_of_string "href") with
-    | Some x -> x#get_string
-    | None   -> "NO HREF FOR THIS NODE"
-   ) ^ "\n");
-  flush stdout
-;;
-
-let selection_changed mathview (node : Ominidom.o_mDOMNode option) =
- let module O = Ominidom in
-  print_string ("selection_changed: " ^
-   (match node with
-       None -> "selection_changed on nothing"
-     | Some node ->
-       match node#get_name with
-       | Some x -> x#get_string
-       | None   -> "on element without name"
-   ) ^ "\n");
-  mathview#set_selection node;
-  flush stdout
-;;
-
-
-let clicked (node : Ominidom.o_mDOMNode) =
- let module O = Ominidom in
-  print_string ("clicked: " ^
-   (match node#get_name with
-    | Some x -> x#get_string
-    | None   -> "no name"
-   ) ^ "\n");
-  flush stdout
-;;
-
-
-let activate_t1 mathview () =
- mathview#set_font_manager_type `font_manager_t1;
- print_string "WIDGET SET WITH T1 FONTS\n" ;
- flush stdout
-;;
-
-let activate_gtk mathview () =
- mathview#set_font_manager_type `font_manager_gtk;
- print_string "WIDGET SET WITH GTK FONTS\n" ;
- flush stdout
-;;
-
-let get_font_manager_type mathview () =
- print_string "CURRENT FONT MANAGER TYPE: ";
- begin
-  match mathview#get_font_manager_type with
-  | `font_manager_t1 -> print_string "T1"
-  | `font_manager_gtk -> print_string "GTK"
- end;
- print_newline();
- flush stdout
-;;
-
-let load mathview () =
- mathview#load "test.xml" ;
- print_string "load: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let get_selection mathview () =
- let module O = Ominidom in
-  let selection =
-    match mathview#get_selection with
-    | Some node ->
-      begin
-        match node#get_name with
-       | Some name -> name#get_string
-       | None      -> "element with no name!"
-      end
-    | None      -> "no selection!"
-  in
-   print_string ("get_selection: " ^ selection ^ "\n") ;
-   flush stdout
-;;
-
-let set_selection mathview () =
- let module O = Ominidom in
-  begin
-    match mathview#get_selection with
-    | Some node -> 
-      begin
-        try 
-          let parent_node = node#get_parent in
-          mathview#set_selection (Some parent_node);
-          print_string "set selection: SEEMS TO WORK\n"
-       with
-         _ -> print_string "EXCEPTION: no parent\n"
-      end
-    | None ->
-      mathview#set_selection None;
-      print_string "no selection\n"
-  end ;
-  flush stdout
-;;
-
-let unload mathview () =
- mathview#unload ;
- print_string "unload: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let get_width mathview () =
- print_string ("get_width: " ^ string_of_int (mathview#get_width) ^ "\n") ;
- flush stdout
-;;
-
-let get_height mathview () =
- print_string ("get_height: " ^ string_of_int (mathview#get_height) ^ "\n") ;
- flush stdout
-;;
-
-let get_top mathview () =
- let (x,y) = mathview#get_top in
-  print_string ("get_top: ("^ string_of_int x ^ "," ^ string_of_int y ^ ")\n") ;
-  flush stdout
-;;
-
-let set_top mathview () =
- mathview#set_top 0 0;
- print_string "set_top: SEEM TO WORK\n" ;
- flush stdout
-;;
-
-let set_adjustments mathview () =
- let adj1 = GData.adjustment () in
- let adj2 = GData.adjustment () in
-  mathview#set_adjustments adj1 adj2 ;
-  adj1#set_value ((adj1#lower +. adj1#upper) /. 2.0) ;
-  adj2#set_value ((adj2#lower +. adj2#upper) /. 2.0) ;
-  print_string "set_adjustments: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_hadjustment mathview () =
- let adj = mathview#get_hadjustment in
-  adj#set_value ((adj#lower +. adj#upper) /. 2.0) ;
-  print_string "get_hadjustment: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_vadjustment mathview () =
- let adj = mathview#get_vadjustment in
-  adj#set_value ((adj#lower +. adj#upper) /. 2.0) ;
-  print_string "get_vadjustment: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_buffer mathview () =
- let buffer = mathview#get_buffer in
-  Gdk.Draw.rectangle buffer (Gdk.GC.create buffer) ~x:0 ~y:0
-   ~width:50 ~height:50 ~filled:true () ;
-  print_string "get_buffer: SEEMS TO WORK (hint: force the widget redrawing)\n";
-  flush stdout
-;;
-
-let get_frame mathview () =
- let frame = mathview#get_frame in
-  frame#set_shadow_type `NONE ;
-  print_string "get_frame: SEEMS TO WORK\n" ;
-  flush stdout
-;;
-
-let set_font_size mathview () =
- mathview#set_font_size 24 ;
- print_string "set_font_size: FONT IS NOW 24\n" ;
- flush stdout
-;;
-let get_font_size mathview () =
- print_string ("get_font_size: " ^ string_of_int (mathview#get_font_size) ^ "\n") ;
- flush stdout
-;;
-let set_anti_aliasing mathview () =
- mathview#set_anti_aliasing true ;
- print_string "set_anti_aliasing: ON\n" ;
- flush stdout
-;;
-let get_anti_aliasing mathview () =
- print_string ("get_anti_aliasing: " ^
-  (match mathview#get_anti_aliasing with true -> "ON" | false -> "OFF") ^
-  "\n") ;
- flush stdout
-;;
-let set_kerning mathview () =
- mathview#set_kerning true ;
- print_string "set_kerning: ON\n" ;
- flush stdout
-;;
-let get_kerning mathview () =
- print_string ("get_kerning: " ^
-  (match mathview#get_kerning with true -> "ON" | false -> "OFF") ^
-  "\n") ;
- flush stdout
-;;
-
-let set_log_verbosity mathview () =
- mathview#set_log_verbosity 3 ;
- print_string "set_log_verbosity: NOW IS 3\n" ;
- flush stdout
-;;
-let get_log_verbosity mathview () =
- print_string ("get_log_verbosity: " ^
-  string_of_int mathview#get_log_verbosity ^
-  "\n") ;
- flush stdout
-;;
-
-let export_to_postscript (mathview : GMathView.math_view) () =
- mathview#export_to_postscript ~filename:"test.ps" ();
- print_string "expor_to_postscript: SEEMS TO WORK (hint: look at test.ps)\n";
- flush stdout
-;;
-(* Widget creation *)
-let main_window = GWindow.window ~title:"GtkMathView test" () in
-let vbox = GPack.vbox ~packing:main_window#add () in
-let sw = GBin.scrolled_window ~width:50 ~height:50 ~packing:vbox#pack () in
-let mathview= GMathView.math_view ~packing:sw#add ~width:50 ~height:50 () in
-let table = GPack.table ~rows:6 ~columns:5 ~packing:vbox#pack () in
-let button_gtk=GButton.button ~label:"activate Gtk fonts" ~packing:(table#attach ~left:0 ~top:0) () in
-let button_load = GButton.button ~label:"load" ~packing:(table#attach ~left:1 ~top:0) () in
-let button_unload = GButton.button ~label:"unload" ~packing:(table#attach ~left:2 ~top:0) () in
-let button_get_selection = GButton.button ~label:"get_selection" ~packing:(table#attach ~left:3 ~top:0) () in
-let button_set_selection = GButton.button ~label:"set_selection" ~packing:(table#attach ~left:4 ~top:0) () in
-let button_get_width = GButton.button ~label:"get_width" ~packing:(table#attach ~left:0 ~top:1) () in
-let button_get_height = GButton.button ~label:"get_height" ~packing:(table#attach ~left:1 ~top:1) () in
-let button_get_top = GButton.button ~label:"get_top" ~packing:(table#attach ~left:2 ~top:1) () in
-let button_set_top = GButton.button ~label:"set_top" ~packing:(table#attach ~left:3 ~top:1) () in
-let button_set_adjustments = GButton.button ~label:"set_adjustments" ~packing:(table#attach ~left:4 ~top:1) () in
-let button_get_hadjustment = GButton.button ~label:"get_hadjustment" ~packing:(table#attach ~left:0 ~top:2) () in
-let button_get_vadjustment = GButton.button ~label:"get_vadjustment" ~packing:(table#attach ~left:1 ~top:2) () in
-let button_get_buffer = GButton.button ~label:"get_buffer" ~packing:(table#attach ~left:2 ~top:2) () in
-let button_get_frame = GButton.button ~label:"get_frame" ~packing:(table#attach ~left:3 ~top:2) () in
-let button_set_font_size = GButton.button ~label:"set_font_size" ~packing:(table#attach ~left:4 ~top:2) () in
-let button_get_font_size = GButton.button ~label:"get_font_size" ~packing:(table#attach ~left:0 ~top:3) () in
-let button_set_anti_aliasing = GButton.button ~label:"set_anti_aliasing" ~packing:(table#attach ~left:1 ~top:3) () in
-let button_get_anti_aliasing = GButton.button ~label:"get_anti_aliasing" ~packing:(table#attach ~left:2 ~top:3) () in
-let button_set_kerning = GButton.button ~label:"set_kerning" ~packing:(table#attach ~left:3 ~top:3) () in
-let button_get_kerning = GButton.button ~label:"get_kerning" ~packing:(table#attach ~left:4 ~top:3) () in
-let button_set_log_verbosity = GButton.button ~label:"set_log_verbosity" ~packing:(table#attach ~left:0 ~top:4) () in
-let button_get_log_verbosity = GButton.button ~label:"get_log_verbosity" ~packing:(table#attach ~left:1 ~top:4) () in
-let button_export_to_postscript = GButton.button ~label:"export_to_postscript" ~packing:(table#attach ~left:2 ~top:4) () in
-let button_t1 = GButton.button ~label:"activate T1 fonts" ~packing:(table#attach ~left:3 ~top:4) () in
-let button_get_font_manager_type = GButton.button ~label:"get_font_manager" ~packing:(table#attach ~left:4 ~top:4) () in
-(* Signals connection *)
-ignore(button_gtk#connect#clicked (activate_gtk mathview)) ;
-ignore(button_load#connect#clicked (load mathview)) ;
-ignore(button_unload#connect#clicked (unload mathview)) ;
-ignore(button_get_selection#connect#clicked (get_selection mathview)) ;
-ignore(button_set_selection#connect#clicked (set_selection mathview)) ;
-ignore(button_get_width#connect#clicked (get_width mathview)) ;
-ignore(button_get_height#connect#clicked (get_height mathview)) ;
-ignore(button_get_top#connect#clicked (get_top mathview)) ;
-ignore(button_set_top#connect#clicked (set_top mathview)) ;
-ignore(button_set_adjustments#connect#clicked (set_adjustments mathview)) ;
-ignore(button_get_hadjustment#connect#clicked (get_hadjustment mathview)) ;
-ignore(button_get_vadjustment#connect#clicked (get_vadjustment mathview)) ;
-ignore(button_get_buffer#connect#clicked (get_buffer mathview)) ;
-ignore(button_get_frame#connect#clicked (get_frame mathview)) ;
-ignore(button_set_font_size#connect#clicked (set_font_size mathview)) ;
-ignore(button_get_font_size#connect#clicked (get_font_size mathview)) ;
-ignore(button_set_anti_aliasing#connect#clicked (set_anti_aliasing mathview)) ;
-ignore(button_get_anti_aliasing#connect#clicked (get_anti_aliasing mathview)) ;
-ignore(button_set_kerning#connect#clicked (set_kerning mathview)) ;
-ignore(button_get_kerning#connect#clicked (get_kerning mathview)) ;
-ignore(button_set_log_verbosity#connect#clicked (set_log_verbosity mathview)) ;
-ignore(button_get_log_verbosity#connect#clicked (get_log_verbosity mathview)) ;
-ignore(button_export_to_postscript#connect#clicked (export_to_postscript mathview)) ;
-ignore(button_t1#connect#clicked (activate_t1 mathview)) ;
-ignore(button_get_font_manager_type#connect#clicked (get_font_manager_type mathview)) ;
-ignore(mathview#connect#jump jump) ;
-ignore(mathview#connect#clicked clicked) ;
-ignore(mathview#connect#selection_changed (selection_changed mathview)) ;
-(* Main Loop *)
-main_window#show () ;
-GMain.Main.main ()
-;;
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/test.xml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20000829_gtkmathview-0.2.1/test/test.xml
deleted file mode 100644 (file)
index b0f8c15..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-<math display="block">
-  <mrow helm:xref="SELECTION OK">
-    <mo>&int;</mo>
-    <mo>&ApplyFunction;</mo>
-    <mfrac>
-      <mrow>
-        <mrow>
-          <mi>a</mi>
-         <mo>&InvisibleTimes;</mo>
-         <mi>x</mi>
-       </mrow>
-       <mo>+</mo>
-       <mi>b</mi>
-      </mrow>
-      <mrow>
-        <msup>
-         <mi>x</mi>
-         <mn>2</mn>
-       </msup>
-       <mo>+</mo>
-       <mrow>
-         <mi>p</mi>
-         <mo>&InvisibleTimes;</mo>
-         <mi>x</mi>
-       </mrow>
-       <mo>+</mo>
-       <mi>q</mi>
-      </mrow>
-    </mfrac>
-  </mrow>
-  <mo fontstyle="italic">d</mo>
-  <mi>x</mi>
-  <mo>=</mo>
-  <mrow>
-    <mrow>
-      <mfrac><mi>a</mi><mn>2</mn></mfrac>
-      <mo>&InvisibleTimes;</mo>
-      <mrow>
-        <mi>ln</mi>
-       <mo>&ApplyFunction;</mo>
-       <mrow>
-         <mo>(</mo>
-         <mrow>
-           <msup><mi>x</mi><mn>2</mn></msup>
-           <mo>+</mo>
-           <mrow>
-             <mi>p</mi>
-             <mo>&InvisibleTimes;</mo>
-             <mi>x</mi>
-           </mrow>
-           <mo>+</mo>
-           <mi>q</mi>
-         </mrow>
-         <mo>)</mo>
-       </mrow>
-      </mrow>
-    </mrow>
-    <mo>+</mo>
-    <mrow>
-      <mfrac>
-        <mrow>
-         <mrow>
-           <mn>2</mn>
-           <mo>&InvisibleTimes;</mo>
-           <mi>b</mi>
-         </mrow>
-         <mo>-</mo>
-         <mrow>
-           <mi>a</mi>
-           <mo>&InvisibleTimes;</mo>
-           <mi>p</mi>
-         </mrow>
-       </mrow>
-       <msqrt>
-         <mrow>
-           <mrow>
-             <mn>4</mn>
-             <mo>&InvisibleTimes;</mo>
-             <mi>q</mi>
-           </mrow>
-           <mo>-</mo>
-           <msup>
-             <mi>p</mi>
-             <mn>2</mn>
-           </msup>
-         </mrow>
-       </msqrt>
-      </mfrac>
-      <mo>&InvisibleTimes;</mo>
-      <mrow>
-        <mi xlink:href="JUMPS WORK">arctg</mi>
-       <mo>&ApplyFunction;</mo>
-       <mfrac>
-         <mrow>
-           <mrow>
-             <mn>2</mn>
-             <mo>&InvisibleTimes;</mo>
-             <mi>x</mi>
-           </mrow>
-           <mo>+</mo>
-           <mi>p</mi>
-         </mrow>
-         <msqrt>
-           <mrow>
-             <mrow>
-               <mn>4</mn>
-               <mo>&InvisibleTimes;</mo>
-               <mi>q</mi>
-             </mrow>
-             <mo>-</mo>
-             <msup>
-               <mi>p</mi>
-               <mn>2</mn>
-             </msup>
-           </mrow>
-         </msqrt>
-       </mfrac>
-      </mrow>
-    </mrow>
-    <mo>+</mo>
-    <mi>c</mi>
-  </mrow>  
-</math>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1-1.spec b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1-1.spec
deleted file mode 100644 (file)
index ed7e492..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-Summary: GtkMathView : the binding for lablgtk of the GtkMathView widget
-Name: lablgtk-20001129_gtkmathview
-Version: 0.2.1
-Release: 1
-Copyright: LGPL
-Group: Development/Libraries
-Requires: lablgtk_20001129 gtkmathview
-Source: www.cs.unibo.it:/~lpadovan/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1.tar.gz
-%description
-GtkMathView is the binding for lablgtk of the GtkMathView widget.
-
-%prep
-%setup
-
-%build
-make
-make opt
-
-%install
-make install
-
-%files
-%doc COPYING
-
-/usr/lib/ocaml/lablgtk/mathview
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/.cvsignore
deleted file mode 100644 (file)
index cd9e250..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.cmx *.cma *.cmxa config.make
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/.depend b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/.depend
deleted file mode 100644 (file)
index 600449b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-gMathView.cmo: gtkMathView.cmo gtk_mathview.cmo 
-gMathView.cmx: gtkMathView.cmx gtk_mathview.cmx 
-gtkMathView.cmo: gtk_mathview.cmo 
-gtkMathView.cmx: gtk_mathview.cmx 
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/COPYING b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/COPYING
deleted file mode 100644 (file)
index 20b480a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-This library is made available under the LGPL.
-You should have got a copy of the LGPL with Objective Caml.
-The LGPL applies to all the files in this directory, but not in
-subdirectories.
-
-For the test subdirectory, there is no specific licensing policy,
-but you may freely take inspiration from the code, and copy parts of
-it in your application.
-
-Author:
-       Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/Makefile
deleted file mode 100644 (file)
index 0bdfed0..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-# Makefile for lablgtk_mathview.
-
-MINIDOMDIR = ./minidom
-TESTDIR = ./test
-MLFLAGS += -I $(LABLGTKDIR) -I $(MINIDOMDIR)
-
-TARGETS = ml_gtk_mathview.o lablgtkmathview.cma
-
-all: Minidom $(TARGETS)
-
-opt: Minidom.opt lablgtkmathviewopt
-
-Minidom:
-       cd $(MINIDOMDIR); make
-
-Minidom.opt:
-       cd $(MINIDOMDIR); make opt
-
-configure:
-       @rm -f config.make
-       @$(MAKE) --no-print-directory -f configure.mk
-
-depend:
-       @rm -f .depend
-       @$(MAKE) --no-print-directory -f configure.mk .depend
-
-.depend config.make:
-       @$(MAKE) --no-print-directory -f configure.mk
-
-COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-
-include config.make
-
-INSTALLDIR = $(LIBDIR)/lablgtk/mathview
-
-MLLIBS = lablgtkmathview.cma
-CLIBS = 
-MLLINK = unix.cma str.cma
-
-ifdef DEBUG
-CFLAGS = -g $(GTKCFLAGS)
-MLLINK += -cclib -lcamlrund
-MLFLAGS += -g
-else
-CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS)
-endif
-CFLAGS += $(MINIDOMCFLAGS) $(GTKMATHVIEWCFLAGS)
-
-THFLAGS = -thread
-THLINK = unix.cma threads.cma
-
-ifdef USE_CC
-CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS)
-else
-CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)"
-endif
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def
-.c.o:
-       $(CCOMPILER) $<
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-.var.h:
-       ./var2def < $< > $@
-.var.c:
-       ./var2conv < $< > $@
-
-# Targets
-COBJS = ml_gtk_mathview.o
-MLOBJS = gtk_mathview.cmo gtkMathView.cmo gMathView.cmo
-ALLOBJS = $(MLOBJS)
-
-lablgtkmathviewopt: $(CLIBS) $(MLLIBS:.cma=.cmxa)
-
-install:
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       if test -f *.mli ; then cp *.mli $(INSTALLDIR) ; fi
-       cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR)
-       cp $(MLLIBS) $(INSTALLDIR)
-       cp $(COBJS) $(INSTALLDIR)
-       if test ! -z "$(CLIBS)" ; then cp $(CLIBS) $(INSTALLDIR) ; fi
-       if test -f lablgtkmathview.cmxa; then \
-          cp $(MLLIBS:.cma=.cmxa) $(MLLIBS:.cma=.a) \
-             $(INSTALLDIR); fi
-
-lablgtkmathview.cma: $(MLOBJS)
-       $(LINKER) -a -custom -o $@ $(MLOBJS) $(GTKLIBS) -cclib "$(GTKMATHVIEWLIBS)" -cclib "$(MINIDOMLIBS)"
-lablgtkmathview.cmxa: $(MLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) $(GTKLIBS) -cclib "$(GTKMATHVIEWLIBS)" -cclib "$(MINIDOMLIBS)"
-
-ml_gtk.o: $(LABLGTKDIR)/gtk_tags.c $(LABLGTKDIR)/gtk_tags.h \
-          $(LABLGTKDIR)/ml_gtk.h $(LABLGTKDIR)/ml_gdk.h $(LABLGTKDIR)/wrappers.h
-
-clean:
-       rm -f *.cm* *.o *.a *_tags.[ch] $(TARGETS)
-       cd $(MINIDOMDIR); make clean
-       cd $(TESTDIR); make clean
-
-include .depend
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/configure.mk b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/configure.mk
deleted file mode 100644 (file)
index 15e2c37..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-# makefile for configuring lablGTK_mathview
-
-# Default compilers
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-
-# Default installation directories
-BINDIR = `$(GETBINDIR)`
-INSTALLDIR = $(LIBDIR)/lablgtk/mathview
-
-# Autoconf
-GETLIBDIR = ocamlc -v | grep "^Standard" | sed 's/^.*: *//'
-LIBDIR = `$(GETLIBDIR)`
-GETBINDIR = $(GETLIBDIR) | sed -e 's|/lib/[^/]*$$|/bin|' -e 's|/lib$$|/bin|'
-GETRANLIB = which ranlib 2>/dev/null | sed -e 's|.*/ranlib$$|!|' -e 's/^[^!]*$$/:/' -e 's/!/ranlib/'
-
-LABLGTKDIR = $(LIBDIR)/lablgtk
-
-ifdef USE_GNOME
-GTKGETCFLAGS = gtk-config --cflags`" -I"`gnome-config --includedir
-GNOMELIBS = `gnome-config --libs gtkxmhtml`
-else
-GTKGETCFLAGS = gtk-config --cflags
-endif
-
-GTKGETLIBS = gtk-config --libs
-
-configure: .depend config.make
-
-.depend:
-       ocamldep *.ml *.mli > .depend
-
-config.make:
-       @echo CAMLC=$(CAMLC) > config.make
-       @echo CAMLOPT=$(CAMLOPT) >> config.make
-       @echo USE_GL=$(USE_GL) >> config.make
-       @echo USE_GNOME=$(USE_GNOME) >> config.make
-       @echo USE_CC=$(USE_CC) >> config.make
-       @echo DEBUG=$(DEBUG) >> config.make
-       @echo CC=$(CC) >> config.make
-       @echo RANLIB=`$(GETRANLIB)` >> config.make
-       @echo LIBDIR=$(LIBDIR) >> config.make
-       @echo BINDIR=`$(GETBINDIR)` >> config.make
-       @echo INSTALLDIR=$(INSTALLDIR) >> config.make
-       @echo LABLGTKDIR=$(LABLGTKDIR) >> config.make
-# Luca: was
-#      @echo GTKCFLAGS=`$(GTKGETCFLAGS)` -I/usr/lib/ocaml/lablgtk >> config.make
-# Luca: now
-       @echo GTKCFLAGS=`$(GTKGETCFLAGS)` -I$(LIBDIR)/lablgtk >> config.make
-       @echo GTKLIBS=`$(GTKGETLIBS)` | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-# Luca: GtkMathView configuration
-       @echo GTKMATHVIEWCFLAGS=`gtkmathview-config --cflags` >> config.make
-       @echo MINIDOMCFLAGS=`minidom-config --cflags` >> config.make
-       @echo GTKMATHVIEWLIBS=`gtkmathview-config --libs` >> config.make
-       @echo MINIDOMLIBS=`minidom-config --libs` >> config.make
-# Luca: end of GtkMathView configuration
-       @echo GNOMELIBS=$(GNOMELIBS) | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-       cat config.make
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/gMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/gMathView.ml
deleted file mode 100644 (file)
index e897ccf..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-open Gaux
-open Gtk
-open Gtk_mathview
-open GtkBase
-open GtkMathView
-open GObj
-
-exception ErrorLoadingFile of string;;
-exception ErrorWritingFile of string;;
-exception NoSelection;;
-
-class math_view_signals obj = object
-  inherit GContainer.container_signals obj
-  method clicked = GtkSignal.connect ~sgn:MathView.Signals.clicked obj ~after
-  method jump = GtkSignal.connect ~sgn:MathView.Signals.jump obj ~after
-  method selection_changed =
-  GtkSignal.connect ~sgn:MathView.Signals.selection_changed obj ~after
-end
-
-class math_view obj = object
- inherit GContainer.container (obj : Gtk_mathview.math_view obj)
- method connect = new math_view_signals obj
- method load ~filename =
-  if not (MathView.load obj ~filename) then raise (ErrorLoadingFile filename)
- method unload = MathView.unload obj
- method get_selection = MathView.get_selection obj
- method set_selection (node : Ominidom.o_mDOMNode option) = MathView.set_selection obj node
- method get_width = MathView.get_width obj
- method get_height = MathView.get_height obj
- method get_top = MathView.get_top obj
- method set_top = MathView.set_top obj
- method set_adjustments =
-  fun adj1 adj2 ->
-   MathView.set_adjustments obj (GData.as_adjustment adj1)
-   (GData.as_adjustment adj2)
- method get_hadjustment = new GData.adjustment (MathView.get_hadjustment obj)
- method get_vadjustment = new GData.adjustment (MathView.get_vadjustment obj)
- method get_buffer = MathView.get_buffer obj
- method get_frame = new GBin.frame (MathView.get_frame obj)
- method set_font_size = MathView.set_font_size obj
- method get_font_size = MathView.get_font_size obj
- method set_anti_aliasing = MathView.set_anti_aliasing obj
- method get_anti_aliasing = MathView.get_anti_aliasing obj
- method set_kerning = MathView.set_kerning obj
- method get_kerning = MathView.get_kerning obj
- method set_log_verbosity = MathView.set_log_verbosity obj
- method get_log_verbosity = MathView.get_log_verbosity obj
- method export_to_postscript
-       ?(width = 595) ?(height = 822) ?(x_margin = 72) ?(y_margin = 72)
-       ?(disable_colors = false) ~filename () =
-  let result = MathView.export_to_postscript obj
-       ~width ~height ~x_margin ~y_margin ~disable_colors ~filename
-  in
-  if not result then raise (ErrorWritingFile filename)
- method get_font_manager_type = MathView.get_font_manager_type obj
- method set_font_manager_type ~fm_type = MathView.set_font_manager_type obj ~fm_type
-end
-
-let math_view ?adjustmenth ?adjustmentv ?font_size ?font_manager ?border_width
- ?width ?height ?packing ?show () =
- let w =
-   MathView.create
-    ?adjustmenth:(may_map ~f:GData.as_adjustment adjustmenth)
-    ?adjustmentv:(may_map ~f:GData.as_adjustment adjustmentv)
-    ()
- in
-  Container.set w ?border_width ?width ?height;
- let mathview = pack_return (new math_view w) ~packing ~show in
- begin
-    match font_size with
-    | Some size -> mathview#set_font_size size
-    | None      -> ()
-  end;
-  begin
-    match font_manager with
-    | Some manager -> mathview#set_font_manager_type ~fm_type:manager
-    | None         -> ()
-  end;
-  mathview
-;;
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/gtkMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/gtkMathView.ml
deleted file mode 100644 (file)
index 4c893fa..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-open Gtk
-open Gtk_mathview
-open Tags
-open GtkBase
-open Gpointer
-
-external mDOMNode_of_boxed_option :
- Gpointer.boxed option -> Minidom.mDOMNode =
-  "ml_gtk_math_view_mDOMNode_of_bodex_option"
-
-external mDOMNode_option_of_boxed_option :
- Gpointer.boxed option -> Minidom.mDOMNode option =
-  "ml_gtk_math_view_mDOMNode_option_of_bodex_option"
-
-let o_mDOMNode_of_mDOMNode node = new Ominidom.o_mDOMNode node
-
-let o_mDOMNode_option_of_mDOMNode_option =
-  function
-  | Some x -> Some (o_mDOMNode_of_mDOMNode x)
-  | None   -> None
-
-let mDOMNode_option_of_o_mDOMNode_option =
-  function
-  | Some x -> Some (x#get_dom_node)
-  | None   -> None
-
-module MathView = struct
-  exception NoSelection
-
-  let cast w : math_view obj = Object.try_cast w "GtkMathView"
-  external create : Gtk.adjustment optobj -> Gtk.adjustment optobj -> 
-   math_view obj = "ml_gtk_math_view_new"
-  let create ~adjustmenth ~adjustmentv () =
-   create (optboxed adjustmenth) (optboxed adjustmentv)
-  external load : [>`math_view] obj -> filename:string -> bool =
-   "ml_gtk_math_view_load"
-  external unload : [>`math_view] obj -> unit =
-   "ml_gtk_math_view_unload"
-  external raw_get_selection : [>`math_view] obj -> Minidom.mDOMNode option =
-   "ml_gtk_math_view_get_selection"
-  let get_selection obj =
-   o_mDOMNode_option_of_mDOMNode_option (raw_get_selection obj)
-  external raw_set_selection : [>`math_view] obj -> Minidom.mDOMNode option -> unit=
-   "ml_gtk_math_view_set_selection"
-  let set_selection obj node =
-   raw_set_selection obj (mDOMNode_option_of_o_mDOMNode_option node)
-  external get_width : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_width"
-  external get_height : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_height"
-  external get_top : [>`math_view] obj -> (int * int) =
-   "ml_gtk_math_view_get_top"
-  external set_top : [>`math_view] obj -> int -> int -> unit =
-   "ml_gtk_math_view_set_top"
-  external set_adjustments : [>`math_view] obj -> Gtk.adjustment obj -> Gtk.adjustment obj -> unit =
-   "ml_gtk_math_view_set_adjustments"
-  external get_hadjustment : [>`math_view] obj -> Gtk.adjustment obj =
-   "ml_gtk_math_view_get_hadjustment"
-  external get_vadjustment : [>`math_view] obj -> Gtk.adjustment obj =
-   "ml_gtk_math_view_get_vadjustment"
-  external get_buffer : [>`math_view] obj -> Gdk.pixmap =
-   "ml_gtk_math_view_get_buffer"
-  external get_frame : [>`math_view] obj -> [`frame] obj =
-   "ml_gtk_math_view_get_frame"
-  external set_font_size : [>`math_view] obj -> int -> unit =
-   "ml_gtk_math_view_set_font_size"
-  external get_font_size : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_font_size"
-  external set_anti_aliasing : [>`math_view] obj -> bool -> unit =
-   "ml_gtk_math_view_set_anti_aliasing"
-  external get_anti_aliasing : [>`math_view] obj -> bool =
-   "ml_gtk_math_view_get_anti_aliasing"
-  external set_kerning : [>`math_view] obj -> bool -> unit =
-   "ml_gtk_math_view_set_kerning"
-  external get_kerning : [>`math_view] obj -> bool =
-   "ml_gtk_math_view_get_kerning"
-  external set_log_verbosity : [>`math_view] obj -> int -> unit =
-   "ml_gtk_math_view_set_log_verbosity"
-  external get_log_verbosity : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_log_verbosity"
-  external export_to_postscript :
-   [>`math_view] obj -> width:int -> height:int -> x_margin:int -> y_margin:int -> disable_colors:bool -> filename:string -> bool =
-   "ml_gtk_math_view_export_to_postscript_bytecode" "ml_gtk_math_view_export_to_postscript_native"
-  external get_font_manager_type : [>`math_view] obj ->
-   [`font_manager_gtk | `font_manager_t1] =
-   "ml_gtk_math_view_get_font_manager_type"
-  external set_font_manager_type : [>`math_view] obj ->
-    fm_type:[`font_manager_gtk | `font_manager_t1] -> unit =
-   "ml_gtk_math_view_set_font_manager_type"
-  
-  module Signals = struct
-    open GtkSignal
-
-    let clicked : ([>`math_view],_) t =
-     let marshal_clicked f _ =
-      function
-         [GtkArgv.POINTER node] -> f (o_mDOMNode_of_mDOMNode (mDOMNode_of_boxed_option node))
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_clicked"
-     in
-      { name = "clicked"; marshaller = marshal_clicked }
-
-    let jump : ([>`math_view],_) t =
-     let marshal_jump f _ =
-      function
-         [GtkArgv.POINTER node] -> f (o_mDOMNode_of_mDOMNode (mDOMNode_of_boxed_option node))
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_jump"
-     in
-      { name = "jump"; marshaller = marshal_jump }
-
-    let selection_changed : ([>`math_view],_) t =
-     let marshal_selection_changed f _ =
-      function
-         [GtkArgv.POINTER node] -> f (o_mDOMNode_option_of_mDOMNode_option (mDOMNode_option_of_boxed_option node))
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_selection_changed"
-     in
-      { name = "selection_changed"; marshaller = marshal_selection_changed }
-  end
-end
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/gtk_mathview.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/gtk_mathview.ml
deleted file mode 100644 (file)
index 745a1ba..0000000
+++ /dev/null
@@ -1 +0,0 @@
-type math_view = [`widget|`container|`bin|`eventbox|`math_view]
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/.cvsignore
deleted file mode 100644 (file)
index 84bdd8e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.cmx test test.opt
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/Makefile
deleted file mode 100644 (file)
index cacfcca..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-GETLIBDIR = ocamlc -v | grep "^Standard" | sed 's/^.*: *//'
-LIBDIR = `$(GETLIBDIR)`
-INSTALLDIR = $(LIBDIR)/minidom
-OBJECTS = minidom.cmi minidom.cmo ml_minidom.o ominidom.cmi ominidom.cmo
-OBJECTS_OPT = minidom.cmx ominidom.cmx
-INST = minidom.o ominidom.o ml_minidom.h minidom.mli
-
-all: $(OBJECTS) test
-
-opt: $(OBJECTS_OPT) test.opt
-
-ml_minidom.o: ml_minidom.c
-       gcc -c -I$(LIBDIR)/caml/ `glib-config --cflags` `minidom-config --cflags` $<
-
-minidom.cmi: minidom.mli
-       ocamlc -c $<
-
-minidom.cmo: minidom.ml minidom.cmi
-       ocamlc -c $<
-
-minidom.cmx: minidom.ml minidom.cmi
-       ocamlopt -c $<
-
-ominidom.cmi: ominidom.mli
-       ocamlc -c $<
-
-ominidom.cmo: ominidom.ml
-       ocamlc -c $<
-
-ominidom.cmx: ominidom.ml
-       ocamlopt -c $<
-
-test.cmo: test.ml minidom.cmo
-       ocamlc -c test.ml
-
-test.cmx: test.ml minidom.cmx
-       ocamlopt -c test.ml
-
-test: test.cmo minidom.cmo ml_minidom.o
-       ocamlc -custom -o test minidom.cmo test.cmo ml_minidom.o \
-        -cclib "`glib-config --libs` `minidom-config --libs`"
-
-test.opt: test.cmx minidom.cmx ml_minidom.o
-       ocamlopt -o test.opt minidom.cmx test.cmx ml_minidom.o \
-        -cclib "`glib-config --libs` `minidom-config --libs`"
-
-install:
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(OBJECTS) $(OBJECTS_OPT) $(INST) $(INSTALLDIR)
-
-clean:
-       rm -f *.o *.cm? test test.opt
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/minidom.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/minidom.ml
deleted file mode 100644 (file)
index 31e677b..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-
-type mDOMString
-type mDOMDoc
-type mDOMNode
-type mDOMAttr
-type mDOMEntity
-
-external string_of_mDOMString : mDOMString -> string = "ml_string_of_mDOMString"
-external mDOMString_of_string : string -> mDOMString = "ml_mDOMString_of_string"
-external mDOMString_eq : string -> string -> bool = "ml_mDOMString_eq"
-
-external doc_load : string -> mDOMDoc = "ml_doc_load"
-external doc_unload : mDOMDoc -> unit = "ml_doc_unload"
-
-external doc_new : mDOMString -> mDOMDoc = "ml_doc_new"
-external doc_get_root_node : mDOMDoc -> mDOMNode = "ml_doc_get_root_node"
-
-external doc_add_entity : mDOMDoc -> mDOMString -> mDOMString -> mDOMEntity = "ml_doc_add_entity"
-external doc_get_entity : mDOMDoc -> mDOMString -> mDOMEntity option = "ml_doc_get_entity"
-external doc_get_predefined_entity : mDOMDoc -> mDOMString -> mDOMEntity option = "ml_doc_get_predefined_entity"
-external entity_get_content : mDOMEntity -> mDOMString = "ml_entity_get_content"
-
-external node_is_text  : mDOMNode -> bool = "ml_node_is_text"
-external node_is_element : mDOMNode -> bool = "ml_node_is_element"
-external node_is_blank : mDOMNode -> bool = "ml_node_is_blank"
-external node_is_entity_ref : mDOMNode -> bool = "ml_node_is_entity_ref"
-external node_get_type : mDOMNode -> int = "ml_node_get_type"
-external node_get_name : mDOMNode -> mDOMString option = "ml_node_get_name"
-external node_get_ns_uri : mDOMNode -> mDOMString option = "ml_node_get_ns_uri"
-external node_get_attribute : mDOMNode -> mDOMString -> mDOMString option = "ml_node_get_attribute"
-external node_get_attribute_ns : mDOMNode -> mDOMString -> mDOMString -> mDOMString option = "ml_node_get_attribute_ns"
-external node_get_content : mDOMNode -> mDOMString option = "ml_node_get_content"
-external node_get_parent : mDOMNode -> mDOMNode option = "ml_node_get_parent"
-external node_get_prev_sibling : mDOMNode -> mDOMNode option = "ml_node_get_prev_sibling"
-external node_get_next_sibling : mDOMNode -> mDOMNode option = "ml_node_get_next_sibling"
-external node_get_first_child : mDOMNode -> mDOMNode option = "ml_node_get_first_child"
-external node_get_first_attribute : mDOMNode -> mDOMAttr option = "ml_node_get_first_attribute"
-external node_is_first : mDOMNode -> bool = "ml_node_is_first"
-external node_is_last : mDOMNode -> bool = "ml_node_is_last"
-
-external attr_get_name : mDOMAttr -> mDOMString option = "ml_attr_get_name"
-external attr_get_ns_uri : mDOMAttr -> mDOMString option = "ml_attr_get_ns_uri"
-external attr_get_value : mDOMAttr -> mDOMString option = "ml_attr_get_value"
-external attr_get_prev_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_prev_sibling"
-external attr_get_next_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_next_sibling"
-external attr_get_parent : mDOMAttr -> mDOMNode option = "ml_attr_get_parent"
-
-let rec node_list_of_node_first =
-  function None -> []
-  |        Some node -> node :: (node_list_of_node_first (node_get_next_sibling node))
-
-let rec attr_list_of_attr_first =
-  function None -> []
-  |        Some attr -> attr :: (attr_list_of_attr_first (attr_get_next_sibling attr))
-  
-let node_get_children node =
-  (node_list_of_node_first (node_get_first_child node))
-
-let node_get_attributes node =
-  (attr_list_of_attr_first (node_get_first_attribute node))
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/minidom.mli b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/minidom.mli
deleted file mode 100644 (file)
index 0b65595..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-
-type mDOMString
-type mDOMDoc
-type mDOMNode
-type mDOMAttr
-type mDOMEntity
-
-external string_of_mDOMString : mDOMString -> string = "ml_string_of_mDOMString"
-external mDOMString_of_string : string -> mDOMString = "ml_mDOMString_of_string"
-external mDOMString_eq : string -> string -> bool = "ml_mDOMString_eq"
-
-external doc_load : string -> mDOMDoc = "ml_doc_load"
-external doc_unload : mDOMDoc -> unit = "ml_doc_unload"
-
-external doc_new : mDOMString -> mDOMDoc = "ml_doc_new"
-external doc_get_root_node : mDOMDoc -> mDOMNode = "ml_doc_get_root_node"
-
-external doc_add_entity : doc:mDOMDoc -> name:mDOMString -> content:mDOMString -> mDOMEntity = "ml_doc_add_entity"
-external doc_get_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_entity"
-external doc_get_predefined_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_predefined_entity"
-external entity_get_content : mDOMEntity -> mDOMString = "ml_entity_get_content"
-
-external node_is_text  : mDOMNode -> bool = "ml_node_is_text"
-external node_is_element : mDOMNode -> bool = "ml_node_is_element"
-external node_is_blank : mDOMNode -> bool = "ml_node_is_blank"
-external node_is_entity_ref : mDOMNode -> bool = "ml_node_is_entity_ref"
-external node_get_type : mDOMNode -> int = "ml_node_get_type"
-external node_get_name : mDOMNode -> mDOMString option = "ml_node_get_name"
-external node_get_ns_uri : mDOMNode -> mDOMString option = "ml_node_get_ns_uri"
-external node_get_attribute : node:mDOMNode -> name:mDOMString -> mDOMString option = "ml_node_get_attribute"
-external node_get_attribute_ns : node:mDOMNode -> name:mDOMString -> ns_uri:mDOMString -> mDOMString option = "ml_node_get_attribute_ns"
-external node_get_content : mDOMNode -> mDOMString option = "ml_node_get_content"
-external node_get_parent : mDOMNode -> mDOMNode option = "ml_node_get_parent"
-external node_get_prev_sibling : mDOMNode -> mDOMNode option = "ml_node_get_prev_sibling"
-external node_get_next_sibling : mDOMNode -> mDOMNode option = "ml_node_get_next_sibling"
-external node_get_first_child : mDOMNode -> mDOMNode option = "ml_node_get_first_child"
-external node_get_first_attribute : mDOMNode -> mDOMAttr option = "ml_node_get_first_attribute"
-external node_is_first : mDOMNode -> bool = "ml_node_is_first"
-external node_is_last : mDOMNode -> bool = "ml_node_is_last"
-
-external attr_get_name : mDOMAttr -> mDOMString option = "ml_attr_get_name"
-external attr_get_ns_uri : mDOMAttr -> mDOMString option = "ml_attr_get_ns_uri"
-external attr_get_value : mDOMAttr -> mDOMString option = "ml_attr_get_value"
-external attr_get_prev_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_prev_sibling"
-external attr_get_next_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_next_sibling"
-external attr_get_parent : mDOMAttr -> mDOMNode option = "ml_attr_get_parent"
-
-val node_get_children : mDOMNode -> mDOMNode list
-val node_get_attributes : mDOMNode -> mDOMAttr list
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/ml_minidom.c b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/ml_minidom.c
deleted file mode 100644 (file)
index 1062614..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-
-#include <assert.h>
-#include <mlvalues.h>
-#include <memory.h>
-
-#include "minidom.h"
-
-#define Val_ptr(p)        ((value) (p))
-#define Val_option(p,f)   ((p != NULL) ? ml_some(f(p)) : Val_unit)
-#define Val_mDOMString(s) (copy_string((char*) (s)))
-#define mDOMString_val(v) ((mDOMStringRef) String_val(v))
-
-static value
-ml_some(value v)
-{
-  CAMLparam1(v);
-  value ret = alloc_small(1,0);
-  Field(ret,0) = v;
-  CAMLreturn(ret);
-}
-
-value
-ml_string_of_mDOMString(value s)
-{
-  CAMLparam1(s);
-  CAMLreturn(s);
-}
-
-value
-ml_mDOMString_of_string(value s)
-{
-  CAMLparam1(s);
-  CAMLreturn(s);
-}
-
-value
-ml_doc_load(value file_name)
-{
-  mDOMDocRef doc_ref;
-
-  CAMLparam1(file_name);
-
-  doc_ref = mdom_load(String_val(file_name), FALSE, NULL);
-  if (doc_ref == NULL) failwith("minidom: could not load document");
-
-  CAMLreturn((value) doc_ref);
-}
-
-value
-ml_doc_unload(value doc)
-{
-  CAMLparam1(doc);
-
-  mdom_unload((mDOMDocRef) doc);
-
-  CAMLreturn(Val_unit);
-}
-
-value
-ml_doc_new(value s)
-{
-  mDOMDocRef doc_ref;
-
-  CAMLparam1(s);
-
-  doc_ref = mdom_doc_new(mDOMString_val(s));
-  if (doc_ref == NULL) failwith("minidom: could not create new document");
-
-  CAMLreturn((value) doc_ref);
-}
-
-
-value
-ml_doc_get_root_node(value doc)
-{
-  mDOMNodeRef root;
-
-  CAMLparam1(doc);
-  root = mdom_doc_get_root_node((mDOMDocRef) doc);
-  if (root == NULL) failwith("minidom: document has no root node!");
-
-  CAMLreturn((value) root);
-}
-
-value
-ml_doc_add_entity(value doc, value name, value content)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam3(doc, name, content);
-  ent = mdom_doc_add_entity((mDOMDocRef) doc, mDOMString_val(name), mDOMString_val(content));
-  if (ent == NULL) failwith("minidom: could not add entity");
-
-  CAMLreturn((value) ent);
-}
-
-value
-ml_doc_get_entity(value doc, value name)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam2(doc, name);
-  ent = mdom_doc_get_entity((mDOMDocRef) doc, mDOMString_val(name));
-
-  CAMLreturn(Val_option(ent, Val_ptr));
-}
-
-value
-ml_doc_get_predefined_entity(value name)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam1(name);
-  ent = mdom_get_predefined_entity(mDOMString_val(name));
-
-  CAMLreturn(Val_option(ent, Val_ptr));
-}
-
-value
-ml_entity_get_content(value ent)
-{
-  CAMLparam1(ent);
-  CAMLreturn(Val_mDOMString(mdom_entity_get_content((mDOMEntityRef) ent)));
-}
-
-value
-ml_node_is_text(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_text((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_element(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_element((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_blank(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_blank((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_entity_ref(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_entity_ref((mDOMNodeRef) node)));
-}
-
-value
-ml_node_get_type(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_int(mdom_node_get_type((mDOMNodeRef) node)));
-}
-
-value
-ml_node_get_name(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_name((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_content(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_content((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_ns_uri(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_ns_uri((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_attribute(value node, value name)
-{
-  CAMLparam2(node,name);
-  CAMLreturn(Val_option(mdom_node_get_attribute((mDOMNodeRef) node, String_val(name)), Val_mDOMString));
-}
-
-value
-ml_node_get_attribute_ns(value node, value name, value ns_uri)
-{
-  CAMLparam2(node,name);
-  CAMLreturn(Val_option(mdom_node_get_attribute_ns((mDOMNodeRef) node,
-                                                  String_val(name),
-                                                  String_val(ns_uri)), Val_mDOMString));
-}
-
-value
-ml_node_get_parent(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_parent((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_prev_sibling(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_prev_sibling((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_next_sibling(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_next_sibling((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_first_child(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_first_child((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_first_attribute(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_first_attribute((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_is_first(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_first((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_last(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_last((mDOMNodeRef) node)));
-}
-
-value
-ml_attr_get_name(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_name((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_ns_uri(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_ns_uri((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_value(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_value((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_prev_sibling(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_prev_sibling((mDOMAttrRef) attr), Val_ptr));
-}
-
-value
-ml_attr_get_next_sibling(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_next_sibling((mDOMAttrRef) attr), Val_ptr));
-}
-
-value
-ml_attr_get_parent(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_parent((mDOMAttrRef) attr), Val_ptr));
-}
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/ml_minidom.h b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/ml_minidom.h
deleted file mode 100644 (file)
index d224799..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#ifndef ml_minidom_h
-#define ml_minidom_h
-
-#define Val_ptr(p)        ((value) (p))
-#ifndef Val_option
-#define Val_option(p,f)   ((p != NULL) ? ml_some(f(p)) : Val_unit)
-#endif /* Val_option */
-#define Val_mDOMString(s) (copy_string((char*) (s)))
-#define mDOMString_val(v) ((mDOMStringRef) String_val(v))
-#define mDOMNode_val(v) ((mDOMNodeRef) v)
-
-#define mDOMNode_option_mDOMNodeRef(p) (((p) != NULL) ? ml_some((value) (p)) : Val_unit)
-#define mDOMNodeRef_mDOMNode_option(v) ((v == Val_unit) ? NULL : (mDOMNodeRef)Field((v),0))
-#define Val_mDOMNodeRef(p)             (mDOMNode_option_mDOMNodeRef(p))
-#define mDOMNodeRef_val(v)             (mDOMNodeRef_mDOMNode_option(v))
-
-#endif /* ml_minidom_h */
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/ominidom.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/ominidom.ml
deleted file mode 100644 (file)
index 85ad2e4..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-
-exception Node_has_no_parent;;
-exception Node_has_no_sibling of string;;
-exception Node_has_no_children;;
-exception Node_has_no_attributes;;
-exception Attribute_has_no_sibling of string;;
-exception Attribute_has_no_parent;;
-exception Undefined_entity;;
-
-let option_to_exception v e =
-  match v with
-    Some x -> x
-  | None   -> raise e
-;;
-
-class o_mDOMString (str: Minidom.mDOMString) =
-  object
-    method get_dom_string = str
-    method get_string = Minidom.string_of_mDOMString str
-  end;;
-  
-let o_mDOMString_of_string str =
-  new o_mDOMString (Minidom.mDOMString_of_string str)
-
-class o_mDOMEntity (ent : Minidom.mDOMEntity) =
-  object
-    method get_dom_entity = ent
-    method get_content =
-      new o_mDOMString (Minidom.entity_get_content ent)
-  end
-;;
-
-class o_mDOMDoc (doc : Minidom.mDOMDoc) =
-  object
-    method get_dom_doc = doc
-
-    method get_root_node =
-      new o_mDOMNode (Minidom.doc_get_root_node doc)
-    method add_entity (name : o_mDOMString) (value : o_mDOMString) =
-      new o_mDOMEntity
-        (Minidom.doc_add_entity doc
-         (name#get_dom_string) (value#get_dom_string)
-       )
-    method get_entity (name : o_mDOMString) =
-      match Minidom.doc_get_entity doc (name#get_dom_string) with
-      | Some x -> new o_mDOMEntity x
-      | None -> raise Undefined_entity
-    method get_predefined_entity (name : o_mDOMString) =
-      match Minidom.doc_get_predefined_entity doc (name#get_dom_string) with
-      | Some x -> new o_mDOMEntity x
-      | None -> raise Undefined_entity
-  end
-and o_mDOMNode (node : Minidom.mDOMNode) =
-  object
-    method get_dom_node = node
-
-    method is_text = Minidom.node_is_text node
-    method is_element = Minidom.node_is_element node
-    method is_blank = Minidom.node_is_blank node
-    method is_entity_ref = Minidom.node_is_entity_ref node
-
-    method get_type = Minidom.node_get_type node
-    method get_name = 
-      match Minidom.node_get_name node with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_ns_uri =
-      match Minidom.node_get_ns_uri node with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_attribute (name : o_mDOMString) =
-      match Minidom.node_get_attribute node (name#get_dom_string) with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_attribute_ns (name : o_mDOMString) (uri : o_mDOMString) =
-      match 
-        Minidom.node_get_attribute_ns node
-         (name#get_dom_string) (uri#get_dom_string)
-      with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_content =
-      match Minidom.node_get_content node with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_parent =
-      new o_mDOMNode
-       (option_to_exception (Minidom.node_get_parent node) Node_has_no_parent)
-    method get_prev_sibling =
-      new o_mDOMNode
-       (option_to_exception
-        (Minidom.node_get_prev_sibling node)
-        (Node_has_no_sibling "left")
-       )
-    method get_next_sibling =
-      new o_mDOMNode
-       (option_to_exception
-        (Minidom.node_get_next_sibling node)
-        (Node_has_no_sibling "right")
-       )
-    method get_first_child =
-      new o_mDOMNode
-       (option_to_exception
-        (Minidom.node_get_first_child node)
-        (Node_has_no_children)
-       )
-    method get_first_attribute =
-      new o_mDOMAttr
-       (option_to_exception
-         (Minidom.node_get_first_attribute node)
-         (Node_has_no_attributes)
-       )
-    method is_first = Minidom.node_is_first node
-    method is_last = Minidom.node_is_last node
-
-    method get_children =
-      List.map (function x -> new o_mDOMNode x) (Minidom.node_get_children node)
-    method get_attributes = List.map
-      (function x -> new o_mDOMAttr x) (Minidom.node_get_attributes node)
-  end
-and o_mDOMAttr (attr : Minidom.mDOMAttr) =
-  object
-    method get_dom_attr = attr
-
-    method get_name =
-      match Minidom.attr_get_name attr with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_ns_uri =
-      match Minidom.attr_get_ns_uri attr with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_value =
-      match Minidom.attr_get_value attr with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_prev_sibling =
-      new o_mDOMAttr
-        (option_to_exception
-         (Minidom.attr_get_prev_sibling attr)
-         (Attribute_has_no_sibling "left")
-       )
-    method get_next_sibling =
-      new o_mDOMAttr
-        (option_to_exception
-         (Minidom.attr_get_next_sibling attr)
-         (Attribute_has_no_sibling "right")
-       )
-    method get_parent =
-      new o_mDOMNode
-        (option_to_exception
-         (Minidom.attr_get_parent attr) Attribute_has_no_parent
-       )
-  end
-;;
-    
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/ominidom.mli b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/ominidom.mli
deleted file mode 100644 (file)
index 2432954..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-exception Node_has_no_parent
-exception Node_has_no_sibling of string
-exception Node_has_no_children
-exception Node_has_no_attributes
-exception Attribute_has_no_sibling of string
-exception Attribute_has_no_parent
-exception Undefined_entity
-
-class o_mDOMString : Minidom.mDOMString ->
-  object
-    method get_dom_string : Minidom.mDOMString
-    method get_string : string
-  end
-
-val o_mDOMString_of_string : string -> o_mDOMString
-
-class o_mDOMEntity : Minidom.mDOMEntity ->
-  object
-    method get_content : o_mDOMString
-    method get_dom_entity : Minidom.mDOMEntity
-  end
-
-class o_mDOMDoc : Minidom.mDOMDoc ->
-  object
-    method add_entity : o_mDOMString -> o_mDOMString -> o_mDOMEntity
-    method get_dom_doc : Minidom.mDOMDoc
-    method get_entity : o_mDOMString -> o_mDOMEntity
-    method get_predefined_entity : o_mDOMString -> o_mDOMEntity
-    method get_root_node : o_mDOMNode
-  end
-and o_mDOMNode : Minidom.mDOMNode ->
-  object
-    method get_attribute : o_mDOMString -> o_mDOMString option
-    method get_attribute_ns :
-      o_mDOMString -> o_mDOMString -> o_mDOMString option
-    method get_attributes : o_mDOMAttr list
-    method get_children : o_mDOMNode list
-    method get_content : o_mDOMString option
-    method get_dom_node : Minidom.mDOMNode
-    method get_first_attribute : o_mDOMAttr
-    method get_first_child : o_mDOMNode
-    method get_name : o_mDOMString option
-    method get_next_sibling : o_mDOMNode
-    method get_ns_uri : o_mDOMString option
-    method get_parent : o_mDOMNode
-    method get_prev_sibling : o_mDOMNode
-    method get_type : int
-    method is_blank : bool
-    method is_element : bool
-    method is_entity_ref : bool
-    method is_first : bool
-    method is_last : bool
-    method is_text : bool
-  end
-and o_mDOMAttr : Minidom.mDOMAttr ->
-  object
-    method get_dom_attr : Minidom.mDOMAttr
-    method get_name : o_mDOMString option
-    method get_next_sibling : o_mDOMAttr
-    method get_ns_uri : o_mDOMString option
-    method get_parent : o_mDOMNode
-    method get_prev_sibling : o_mDOMAttr
-    method get_value : o_mDOMString option
-  end
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/test.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/test.ml
deleted file mode 100644 (file)
index 3c7a092..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-
-let doc = Minidom.doc_load "test.xml"
-
-let root = Minidom.doc_get_root_node doc
-
-let check_attribute_ns attr =
-  Printf.printf "\n\n";
-  let ns_uri = Minidom.attr_get_ns_uri attr
-  and attr_name = Minidom.attr_get_name attr
-  and attr_value = Minidom.attr_get_value attr
-  and parent = Minidom.attr_get_parent attr
-  in
-  match parent,ns_uri,attr_name,attr_value with
-    Some parent_node,Some uri,Some attribute_name,Some attribute_value ->
-      let attr_value = Minidom.node_get_attribute_ns parent_node attribute_name uri
-      in begin
-        match attr_value with
-          Some attr1 ->
-           Printf.printf "found the attribute with ns %s (was %s)\n"
-              (Minidom.string_of_mDOMString attr1) (Minidom.string_of_mDOMString attribute_value)
-        | None ->
-           Printf.printf "attribute not found (uri was %s)!!!!\n" (Minidom.string_of_mDOMString uri)
-      end
-  | _ ->
-      Printf.printf "parent_node == NULL || uri == NULL || attribute_name == NULL || attribute_value == NULL\n"
-;;
-    
-let print_attribute attr =
-  check_attribute_ns attr;
-  let ns_uri = Minidom.attr_get_ns_uri attr
-  in
-  begin
-    match ns_uri with
-      Some uri -> Printf.printf " %s:" (Minidom.string_of_mDOMString uri);
-    | None -> ()
-  end;
-  match ((Minidom.attr_get_name attr), (Minidom.attr_get_value attr)) with
-    (Some attr_name, Some attr_value) ->
-      Printf.printf " %s=\"%s\"" (Minidom.string_of_mDOMString attr_name) (Minidom.string_of_mDOMString attr_value) 
-  | (Some attr_name, _) ->
-      Printf.printf " ??? attribute %s has no value !!!" (Minidom.string_of_mDOMString attr_name)
-  | (_,_) ->
-      Printf.printf " ??? very strange attribute !!!"
-;;
-
-let rec print_node n node =
-  if Minidom.node_is_blank node then ()
-  else if Minidom.node_is_element node then begin
-    match Minidom.node_get_name node with
-      Some node_name -> 
-        begin
-          let children = Minidom.node_get_children node
-          and attributes = Minidom.node_get_attributes node
-          and ns_uri = Minidom.node_get_ns_uri node
-          and is_first,is_last = (Minidom.node_is_first node), (Minidom.node_is_last node)
-          in
-          for i = 1 to n do print_char ' ' done;
-          Printf.printf "<";
-          begin
-            match ns_uri with
-              Some uri -> Printf.printf "%s:" (Minidom.string_of_mDOMString uri)
-            | None     -> ()
-          end;
-          Printf.printf "%s" (Minidom.string_of_mDOMString node_name);
-          List.iter print_attribute attributes;
-          Printf.printf ">\n";
-          List.iter (print_node (n + 2)) children;
-          for i = 1 to n do print_char ' ' done;
-          Printf.printf "</%s>\n" (Minidom.string_of_mDOMString node_name)
-        end
-    | None -> Printf.printf "??? this node has no name !!!\n"
-  end else if Minidom.node_is_text node then begin
-    match Minidom.node_get_content node with
-      Some node_content ->
-        for i = 1 to n do print_char ' ' done;
-        Printf.printf "%s\n" (Minidom.string_of_mDOMString node_content)
-    | None -> Printf.printf "??? this node has no content !!!\n"
-  end else begin
-    Printf.printf "don't know how to manage a node with type %d\n" (Minidom.node_get_type node)
-  end
-;;
-  
-print_node 0 root;;
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/test.xml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/minidom/test.xml
deleted file mode 100644 (file)
index 83d2eef..0000000
+++ /dev/null
@@ -1,505 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<?cocoon-format type="text/xhtml"?>
-<m:math xmlns:helm="http://www.cs.unibo.it/helm" xmlns:m="http://www.w3.org/1998/Math/MathML">
-    <m:mtable helm:xref="i0" columnalign="left" equalrows="false" align="baseline 1">
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mtext>DEFINITION and_ind() OF TYPE</m:mtext>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mphantom>
-                        <m:mtext>__</m:mtext>
-                    </m:mphantom>
-                    <m:semantics xmlns:xlink="http://www.w3.org/1999/xlink">
-                        <m:mrow helm:xref="i22">
-                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo stretchy="false">(</m:mo>
-                                            <m:mrow helm:xref="i23">
-                                                <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mo color="Blue">&#928;</m:mo>
-                                                            <m:mi>A</m:mi>
-                                                            <m:mo>:</m:mo>
-                                                            <m:mrow helm:xref="i24">
-                                                                <m:mo>Prop</m:mo>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mrow>
-                                                                <m:mo>.</m:mo>
-                                                                <m:mrow helm:xref="i25">
-                                                                    <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mo color="Blue">&#928;</m:mo>
-                                                                                <m:mi>B</m:mi>
-                                                                                <m:mo>:</m:mo>
-                                                                                <m:mrow helm:xref="i26">
-                                                                                    <m:mo>Prop</m:mo>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mrow>
-                                                                                    <m:mo>.</m:mo>
-                                                                                    <m:mrow helm:xref="i27">
-                                                                                        <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mo color="Blue">&#928;</m:mo>
-                                                                                                    <m:mi>P</m:mi>
-                                                                                                    <m:mo>:</m:mo>
-                                                                                                    <m:mrow helm:xref="i28">
-                                                                                                        <m:mo>Prop</m:mo>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mrow>
-                                                                                                        <m:mo>.</m:mo>
-                                                                                                        <m:mrow helm:xref="i29">
-                                                                                                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mo color="Blue">&#928;</m:mo>
-                                                                                                                        <m:mi>f</m:mi>
-                                                                                                                        <m:mo>:</m:mo>
-                                                                                                                        <m:mrow helm:xref="i30">
-                                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                                            <m:mi helm:xref="i31">A</m:mi>
-                                                                                                                            <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                                            <m:mrow helm:xref="i32">
-                                                                                                                                <m:mo stretchy="false">(</m:mo>
-                                                                                                                                <m:mi helm:xref="i33">B</m:mi>
-                                                                                                                                <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                                                <m:mi helm:xref="i34">P</m:mi>
-                                                                                                                                <m:mo stretchy="false">)</m:mo>
-                                                                                                                            </m:mrow>
-                                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mrow>
-                                                                                                                            <m:mo>.</m:mo>
-                                                                                                                            <m:mrow helm:xref="i35">
-                                                                                                                                <m:mo color="Blue">&#928;</m:mo>
-                                                                                                                                <m:mi>a</m:mi>
-                                                                                                                                <m:mo>:</m:mo>
-                                                                                                                                <m:mrow helm:xref="i36">
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi xlink:href="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i37">and</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi helm:xref="i38">A</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi helm:xref="i39">B</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mo>.</m:mo>
-                                                                                                                                <m:mi helm:xref="i40">P</m:mi>
-                                                                                                                            </m:mrow>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                            </m:mtable>
-                                                                                                        </m:mrow>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                        </m:mtable>
-                                                                                    </m:mrow>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                    </m:mtable>
-                                                                </m:mrow>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                </m:mtable>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo color="#b03060">:&gt;</m:mo>
-                                            <m:mrow helm:xref="i41">
-                                                <m:mo>Prop</m:mo>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo stretchy="false">)</m:mo>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                            </m:mtable>
-                        </m:mrow>
-                        <m:annotation-xml encoding="MathML">
-                            <m:apply helm:xref="i22">
-                                <m:csymbol>cast</m:csymbol>
-                                <m:apply helm:xref="i23">
-                                    <m:csymbol>prod</m:csymbol>
-                                    <m:bvar>
-                                        <m:ci>A</m:ci>
-                                        <m:type>
-                                            <m:apply helm:xref="i24">
-                                                <m:csymbol>Prop</m:csymbol>
-                                            </m:apply>
-                                        </m:type>
-                                    </m:bvar>
-                                    <m:apply helm:xref="i25">
-                                        <m:csymbol>prod</m:csymbol>
-                                        <m:bvar>
-                                            <m:ci>B</m:ci>
-                                            <m:type>
-                                                <m:apply helm:xref="i26">
-                                                    <m:csymbol>Prop</m:csymbol>
-                                                </m:apply>
-                                            </m:type>
-                                        </m:bvar>
-                                        <m:apply helm:xref="i27">
-                                            <m:csymbol>prod</m:csymbol>
-                                            <m:bvar>
-                                                <m:ci>P</m:ci>
-                                                <m:type>
-                                                    <m:apply helm:xref="i28">
-                                                        <m:csymbol>Prop</m:csymbol>
-                                                    </m:apply>
-                                                </m:type>
-                                            </m:bvar>
-                                            <m:apply helm:xref="i29">
-                                                <m:csymbol>prod</m:csymbol>
-                                                <m:bvar>
-                                                    <m:ci>f</m:ci>
-                                                    <m:type>
-                                                        <m:apply helm:xref="i30">
-                                                            <m:csymbol>arrow</m:csymbol>
-                                                            <m:ci helm:xref="i31">A</m:ci>
-                                                            <m:apply helm:xref="i32">
-                                                                <m:csymbol>arrow</m:csymbol>
-                                                                <m:ci helm:xref="i33">B</m:ci>
-                                                                <m:ci helm:xref="i34">P</m:ci>
-                                                            </m:apply>
-                                                        </m:apply>
-                                                    </m:type>
-                                                </m:bvar>
-                                                <m:apply helm:xref="i35">
-                                                    <m:csymbol>prod</m:csymbol>
-                                                    <m:bvar>
-                                                        <m:ci>a</m:ci>
-                                                        <m:type>
-                                                            <m:apply helm:xref="i36">
-                                                                <m:csymbol>app</m:csymbol>
-                                                                <m:ci definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i37">and</m:ci>
-                                                                <m:ci helm:xref="i38">A</m:ci>
-                                                                <m:ci helm:xref="i39">B</m:ci>
-                                                            </m:apply>
-                                                        </m:type>
-                                                    </m:bvar>
-                                                    <m:ci helm:xref="i40">P</m:ci>
-                                                </m:apply>
-                                            </m:apply>
-                                        </m:apply>
-                                    </m:apply>
-                                </m:apply>
-                                <m:apply helm:xref="i41">
-                                    <m:csymbol>Prop</m:csymbol>
-                                </m:apply>
-                            </m:apply>
-                        </m:annotation-xml>
-                    </m:semantics>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mtext>AS</m:mtext>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mphantom>
-                        <m:mtext>__</m:mtext>
-                    </m:mphantom>
-                    <m:semantics xmlns:xlink="http://www.w3.org/1999/xlink">
-                        <m:mrow helm:xref="i1">
-                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mo color="Red">&#955;</m:mo>
-                                        <m:mi>A</m:mi>
-                                        <m:mo>:</m:mo>
-                                        <m:mrow helm:xref="i2">
-                                            <m:mo>Prop</m:mo>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo>.</m:mo>
-                                            <m:mrow helm:xref="i3">
-                                                <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mo color="Red">&#955;</m:mo>
-                                                            <m:mi>B</m:mi>
-                                                            <m:mo>:</m:mo>
-                                                            <m:mrow helm:xref="i4">
-                                                                <m:mo>Prop</m:mo>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mrow>
-                                                                <m:mo>.</m:mo>
-                                                                <m:mrow helm:xref="i5">
-                                                                    <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mo color="Red">&#955;</m:mo>
-                                                                                <m:mi>P</m:mi>
-                                                                                <m:mo>:</m:mo>
-                                                                                <m:mrow helm:xref="i6">
-                                                                                    <m:mo>Prop</m:mo>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mrow>
-                                                                                    <m:mo>.</m:mo>
-                                                                                    <m:mrow helm:xref="i7">
-                                                                                        <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mo color="Red">&#955;</m:mo>
-                                                                                                    <m:mi>f</m:mi>
-                                                                                                    <m:mo>:</m:mo>
-                                                                                                    <m:mrow helm:xref="i8">
-                                                                                                        <m:mo stretchy="false">(</m:mo>
-                                                                                                        <m:mi helm:xref="i9">A</m:mi>
-                                                                                                        <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                        <m:mrow helm:xref="i10">
-                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                            <m:mi helm:xref="i11">B</m:mi>
-                                                                                                            <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                            <m:mi helm:xref="i12">P</m:mi>
-                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                        </m:mrow>
-                                                                                                        <m:mo stretchy="false">)</m:mo>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mrow>
-                                                                                                        <m:mo>.</m:mo>
-                                                                                                        <m:mrow helm:xref="i13">
-                                                                                                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mo color="Red">&#955;</m:mo>
-                                                                                                                        <m:mi>a</m:mi>
-                                                                                                                        <m:mo>:</m:mo>
-                                                                                                                        <m:mrow helm:xref="i14">
-                                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                                            <m:mi xlink:href="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i15">and</m:mi>
-                                                                                                                            <m:mphantom>
-                                                                                                                                <m:mtext>_</m:mtext>
-                                                                                                                            </m:mphantom>
-                                                                                                                            <m:mi helm:xref="i16">A</m:mi>
-                                                                                                                            <m:mphantom>
-                                                                                                                                <m:mtext>_</m:mtext>
-                                                                                                                            </m:mphantom>
-                                                                                                                            <m:mi helm:xref="i17">B</m:mi>
-                                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mrow>
-                                                                                                                            <m:mo>.</m:mo>
-                                                                                                                            <m:mrow helm:xref="i18">
-                                                                                                                                <m:mo>&lt;</m:mo>
-                                                                                                                                <m:mi helm:xref="i19">P</m:mi>
-                                                                                                                                <m:mo>&gt;</m:mo>
-                                                                                                                                <m:mo>CASES</m:mo>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mi helm:xref="i20">a</m:mi>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mo>OF</m:mo>
-                                                                                                                                <m:mrow>
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi>conj</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$1</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$2</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mo color="Green">&#8658;</m:mo>
-                                                                                                                                <m:mrow>
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi helm:xref="i21">f</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$1</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$2</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mo>END</m:mo>
-                                                                                                                            </m:mrow>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                            </m:mtable>
-                                                                                                        </m:mrow>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                        </m:mtable>
-                                                                                    </m:mrow>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                    </m:mtable>
-                                                                </m:mrow>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                </m:mtable>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                            </m:mtable>
-                        </m:mrow>
-                        <m:annotation-xml encoding="MathML">
-                            <m:lambda helm:xref="i1">
-                                <m:bvar>
-                                    <m:ci>A</m:ci>
-                                    <m:type>
-                                        <m:apply helm:xref="i2">
-                                            <m:csymbol>Prop</m:csymbol>
-                                        </m:apply>
-                                    </m:type>
-                                </m:bvar>
-                                <m:lambda helm:xref="i3">
-                                    <m:bvar>
-                                        <m:ci>B</m:ci>
-                                        <m:type>
-                                            <m:apply helm:xref="i4">
-                                                <m:csymbol>Prop</m:csymbol>
-                                            </m:apply>
-                                        </m:type>
-                                    </m:bvar>
-                                    <m:lambda helm:xref="i5">
-                                        <m:bvar>
-                                            <m:ci>P</m:ci>
-                                            <m:type>
-                                                <m:apply helm:xref="i6">
-                                                    <m:csymbol>Prop</m:csymbol>
-                                                </m:apply>
-                                            </m:type>
-                                        </m:bvar>
-                                        <m:lambda helm:xref="i7">
-                                            <m:bvar>
-                                                <m:ci>f</m:ci>
-                                                <m:type>
-                                                    <m:apply helm:xref="i8">
-                                                        <m:csymbol>arrow</m:csymbol>
-                                                        <m:ci helm:xref="i9">A</m:ci>
-                                                        <m:apply helm:xref="i10">
-                                                            <m:csymbol>arrow</m:csymbol>
-                                                            <m:ci helm:xref="i11">B</m:ci>
-                                                            <m:ci helm:xref="i12">P</m:ci>
-                                                        </m:apply>
-                                                    </m:apply>
-                                                </m:type>
-                                            </m:bvar>
-                                            <m:lambda helm:xref="i13">
-                                                <m:bvar>
-                                                    <m:ci>a</m:ci>
-                                                    <m:type>
-                                                        <m:apply helm:xref="i14">
-                                                            <m:csymbol>app</m:csymbol>
-                                                            <m:ci definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i15">and</m:ci>
-                                                            <m:ci helm:xref="i16">A</m:ci>
-                                                            <m:ci helm:xref="i17">B</m:ci>
-                                                        </m:apply>
-                                                    </m:type>
-                                                </m:bvar>
-                                                <m:apply helm:xref="i18">
-                                                    <m:csymbol>mutcase</m:csymbol>
-                                                    <m:ci helm:xref="i19">P</m:ci>
-                                                    <m:ci helm:xref="i20">a</m:ci>
-                                                    <m:apply>
-                                                        <m:csymbol>app</m:csymbol>
-                                                        <m:ci>conj</m:ci>
-                                                        <m:ci>$1</m:ci>
-                                                        <m:ci>$2</m:ci>
-                                                    </m:apply>
-                                                    <m:apply>
-                                                        <m:csymbol>app</m:csymbol>
-                                                        <m:ci helm:xref="i21">f</m:ci>
-                                                        <m:ci>$1</m:ci>
-                                                        <m:ci>$2</m:ci>
-                                                    </m:apply>
-                                                </m:apply>
-                                            </m:lambda>
-                                        </m:lambda>
-                                    </m:lambda>
-                                </m:lambda>
-                            </m:lambda>
-                        </m:annotation-xml>
-                    </m:semantics>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-    </m:mtable>
-</m:math>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/ml_gtk_mathview.c b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/ml_gtk_mathview.c
deleted file mode 100644 (file)
index 185d9f0..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-#include <assert.h>
-#include <string.h>
-#include <assert.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include <gtkmathview.h>
-#include <ml_gtk.h>
-
-#include <wrappers.h>
-#include <ml_glib.h>
-#include <ml_gdk.h>
-#include <ml_gtk.h>
-#include <gtk_tags.h>
-
-#include <minidom.h>
-#include "minidom/ml_minidom.h"
-
-/* <CSC/>: Next row should be put in a .h of lablgtk. */
-#define GtkAdjustment_val(val) check_cast(GTK_ADJUSTMENT,val)
-
-#define GtkMathView_val(val) check_cast(GTK_MATH_VIEW,val)
-
-#define FontManagerId_val(val) Int_val(val)
-#define Val_FontManagerId(val) Val_int(val)
-
-FontManagerId
-font_manager_id_of_value(value v)
-{
-  if (v == hash_variant("font_manager_gtk")) return FONT_MANAGER_GTK;
-  else if (v == hash_variant("font_manager_t1")) return FONT_MANAGER_T1;
-  else assert(0);
-}
-
-value
-value_of_font_manager_id(FontManagerId id)
-{
-  switch (id) {
-  case FONT_MANAGER_GTK:
-    return hash_variant("font_manager_gtk");
-  case FONT_MANAGER_T1:
-    return hash_variant("font_manager_t1");
-  default:
-    assert(0);
-    break;
-  }
-}
-
-ML_2 (gtk_math_view_new,GtkAdjustment_val, GtkAdjustment_val, Val_GtkWidget_sink)
-ML_2 (gtk_math_view_load, GtkMathView_val, String_val, Val_bool)
-ML_1 (gtk_math_view_unload, GtkMathView_val, Unit)
-/*ML_1 (gtk_math_view_dump, GtkMathView_val, Unit)*/
-ML_1 (gtk_math_view_get_selection, GtkMathView_val, Val_mDOMNodeRef)
-ML_2 (gtk_math_view_set_selection, GtkMathView_val, mDOMNodeRef_val, Unit)
-ML_1 (gtk_math_view_get_width, GtkMathView_val, Val_int)
-ML_1 (gtk_math_view_get_height, GtkMathView_val, Val_int)
-ML_3 (gtk_math_view_set_top, GtkMathView_val, Int_val, Int_val, Unit)
-ML_3 (gtk_math_view_set_adjustments, GtkMathView_val, GtkAdjustment_val, GtkAdjustment_val, Unit)
-ML_1 (gtk_math_view_get_hadjustment, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_vadjustment, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_buffer, GtkMathView_val, Val_GdkPixmap)
-ML_1 (gtk_math_view_get_frame, GtkMathView_val, Val_GtkWidget)
-ML_2 (gtk_math_view_set_font_size, GtkMathView_val, Int_val, Unit)
-ML_1 (gtk_math_view_get_font_size, GtkMathView_val, Val_int)
-ML_2 (gtk_math_view_set_anti_aliasing, GtkMathView_val, Bool_val, Unit)
-ML_1 (gtk_math_view_get_anti_aliasing, GtkMathView_val, Val_bool)
-ML_2 (gtk_math_view_set_kerning, GtkMathView_val, Bool_val, Unit)
-ML_1 (gtk_math_view_get_kerning, GtkMathView_val, Val_bool)
-ML_2 (gtk_math_view_set_log_verbosity, GtkMathView_val, Int_val, Unit)
-ML_1 (gtk_math_view_get_log_verbosity, GtkMathView_val, Val_int)
-ML_2 (gtk_math_view_set_font_manager_type, GtkMathView_val, font_manager_id_of_value, Unit)
-ML_1 (gtk_math_view_get_font_manager_type, GtkMathView_val, value_of_font_manager_id)
-
-value
-ml_gtk_math_view_export_to_postscript_native(value arg1,
-               value w, value h, value x0, value y0, value disable_colors, value arg2)
-{
-   CAMLparam5(arg1,w,h,x0,y0);
-   CAMLxparam2(disable_colors, arg2);
-
-   char *filename;
-   FILE *fd;
-   int res;
-   filename = String_val (arg2);
-   if ((fd = fopen(filename, "w"))) {
-      gtk_math_view_export_to_postscript(GtkMathView_val (arg1),
-                     Int_val(w), Int_val(h), Int_val(x0), Int_val(y0), Bool_val(disable_colors), fd);
-      fclose (fd);
-      res = 1;
-   } else {
-      fprintf(stderr, "Error opening file %s for writing\n", filename);
-      res = 0;
-   }
-   CAMLreturn (Val_bool(res));
-}
-
-value ml_gtk_math_view_export_to_postscript_bytecode (value* arg, int argn)
-{
-   return ml_gtk_math_view_export_to_postscript_native(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6]);
-}
-
-value ml_gtk_math_view_get_top (value arg1)
-{
-   CAMLparam1(arg1);
-   CAMLlocal1 (result);
-   int x, y;
-   gtk_math_view_get_top(GtkMathView_val (arg1), &x, &y);
-   result = alloc(2, 0);
-   Store_field(result, 0, Val_int(x));
-   Store_field(result, 0, Val_int(y));
-   CAMLreturn (result);
-}
-
-
-value ml_gtk_math_view_mDOMNode_of_bodex_option (value arg1)
-{
-   CAMLparam1(arg1);
-
-   mDOMNodeRef nr;
-   CAMLlocal1 (tmp);
-   CAMLlocal1 (optval);
-   CAMLlocal1 (res);
-
-   if (arg1==Val_int(0)) {
-      assert(0);
-   } else {
-      tmp = Field(arg1, 0);
-      nr = (mDOMNodeRef) Field(tmp, 1);
-   }
-   optval = Val_mDOMNodeRef(nr);
-   if (optval==Val_int(0)) {
-      assert(0);
-   } else {
-      res = Field(optval, 0);
-   }
-
-  CAMLreturn(res);
-}
-
-value ml_gtk_math_view_mDOMNode_option_of_bodex_option (value arg1)
-{
-   CAMLparam1(arg1);
-
-   mDOMNodeRef nr;
-   CAMLlocal1 (tmp);
-
-   if (arg1==Val_int(0)) {
-      nr=NULL;
-   } else {
-      tmp = Field(arg1, 0);
-      nr = (mDOMNodeRef) Field(tmp, 1);
-   }
-
-  CAMLreturn(Val_mDOMNodeRef(nr));
-}
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/.cvsignore
deleted file mode 100644 (file)
index 1968614..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmo *.cmi *.cmx t1lib.log test test.opt test.ps test.o
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/Makefile
deleted file mode 100644 (file)
index d631d23..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-LABLGTK_DIR = /usr/lib/ocaml/lablgtk
-LABLGTK_MATHVIEW_DIR = ..
-MINIDOM_DIR = ../minidom
-OCAMLC = ocamlc -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) \
- -I $(MINIDOM_DIR) -I mlmathview
-OCAMLOPT = ocamlopt -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) \
- -I $(MINIDOM_DIR) -I mlmathview
-
-all: test
-opt: test.opt
-
-test: test.cmo
-       $(OCAMLC) -custom -o test lablgtk.cma gtkInit.cmo \
-                  $(MINIDOM_DIR)/minidom.cmo \
-                  $(MINIDOM_DIR)/ominidom.cmo \
-                  $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cma \
-                  -cclib "$(MINIDOM_DIR)/ml_minidom.o" \
-                  test.cmo \
-                  -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-                  -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
-                  -L/usr/local/lib/gtkmathview -lgtkmathview \
-                  $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o"
-
-test.opt: test.cmx
-       $(OCAMLOPT) -o test.opt lablgtk.cmxa gtkInit.cmx \
-                  $(MINIDOM_DIR)/minidom.cmx \
-                  $(MINIDOM_DIR)/ominidom.cmx \
-                  $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cmxa \
-                  -cclib "$(MINIDOM_DIR)/ml_minidom.o" \
-                  test.cmx \
-                  -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-                  -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
-                  -L/usr/local/lib/gtkmathview -lgtkmathview \
-                  $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o"
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo:
-       $(OCAMLC) -c $<
-.mli.cmi:
-       $(OCAMLC) -c $<
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o test test.opt t1lib.log test.ps
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/t1.config b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/t1.config
deleted file mode 100644 (file)
index afb669e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-ENCODING=.
-AFM=/usr/share/texmf/fonts/afm/
-TYPE1=/usr/share/texmf/fonts/type1/bluesky/cm/:/usr/X11R6/lib/X11/fonts/Type1/:.
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/test.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/test.ml
deleted file mode 100644 (file)
index dd66d38..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-(******************************************************************************)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 25/09/2000                                 *)
-(*                                                                            *)
-(*     This is a simple test for the OCaml (LablGtk indeed) binding of the    *)
-(*                             MathView widget                                *)
-(******************************************************************************)
-
-(* Callbacks *)
-let jump (node : Ominidom.o_mDOMNode) =
- let module O = Ominidom in
-  print_string ("jump: " ^
-   (match node#get_attribute (O.o_mDOMString_of_string "href") with
-    | Some x -> x#get_string
-    | None   -> "NO HREF FOR THIS NODE"
-   ) ^ "\n");
-  flush stdout
-;;
-
-let selection_changed mathview (node : Ominidom.o_mDOMNode option) =
- let module O = Ominidom in
-  print_string ("selection_changed: " ^
-   (match node with
-       None -> "selection_changed on nothing"
-     | Some node ->
-       match node#get_name with
-       | Some x -> x#get_string
-       | None   -> "on element without name"
-   ) ^ "\n");
-  mathview#set_selection node;
-  flush stdout
-;;
-
-
-let clicked (node : Ominidom.o_mDOMNode) =
- let module O = Ominidom in
-  print_string ("clicked: " ^
-   (match node#get_name with
-    | Some x -> x#get_string
-    | None   -> "no name"
-   ) ^ "\n");
-  flush stdout
-;;
-
-
-let activate_t1 mathview () =
- mathview#set_font_manager_type `font_manager_t1;
- print_string "WIDGET SET WITH T1 FONTS\n" ;
- flush stdout
-;;
-
-let activate_gtk mathview () =
- mathview#set_font_manager_type `font_manager_gtk;
- print_string "WIDGET SET WITH GTK FONTS\n" ;
- flush stdout
-;;
-
-let get_font_manager_type mathview () =
- print_string "CURRENT FONT MANAGER TYPE: ";
- begin
-  match mathview#get_font_manager_type with
-  | `font_manager_t1 -> print_string "T1"
-  | `font_manager_gtk -> print_string "GTK"
- end;
- print_newline();
- flush stdout
-;;
-
-let load mathview () =
- mathview#load "test.xml" ;
- print_string "load: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let get_selection mathview () =
- let module O = Ominidom in
-  let selection =
-    match mathview#get_selection with
-    | Some node ->
-      begin
-        match node#get_name with
-       | Some name -> name#get_string
-       | None      -> "element with no name!"
-      end
-    | None      -> "no selection!"
-  in
-   print_string ("get_selection: " ^ selection ^ "\n") ;
-   flush stdout
-;;
-
-let set_selection mathview () =
- let module O = Ominidom in
-  begin
-    match mathview#get_selection with
-    | Some node -> 
-      begin
-        try 
-          let parent_node = node#get_parent in
-          mathview#set_selection (Some parent_node);
-          print_string "set selection: SEEMS TO WORK\n"
-       with
-         _ -> print_string "EXCEPTION: no parent\n"
-      end
-    | None ->
-      mathview#set_selection None;
-      print_string "no selection\n"
-  end ;
-  flush stdout
-;;
-
-let unload mathview () =
- mathview#unload ;
- print_string "unload: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let get_width mathview () =
- print_string ("get_width: " ^ string_of_int (mathview#get_width) ^ "\n") ;
- flush stdout
-;;
-
-let get_height mathview () =
- print_string ("get_height: " ^ string_of_int (mathview#get_height) ^ "\n") ;
- flush stdout
-;;
-
-let get_top mathview () =
- let (x,y) = mathview#get_top in
-  print_string ("get_top: ("^ string_of_int x ^ "," ^ string_of_int y ^ ")\n") ;
-  flush stdout
-;;
-
-let set_top mathview () =
- mathview#set_top 0 0;
- print_string "set_top: SEEM TO WORK\n" ;
- flush stdout
-;;
-
-let set_adjustments mathview () =
- let adj1 = GData.adjustment () in
- let adj2 = GData.adjustment () in
-  mathview#set_adjustments adj1 adj2 ;
-  adj1#set_value ((adj1#lower +. adj1#upper) /. 2.0) ;
-  adj2#set_value ((adj2#lower +. adj2#upper) /. 2.0) ;
-  print_string "set_adjustments: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_hadjustment mathview () =
- let adj = mathview#get_hadjustment in
-  adj#set_value ((adj#lower +. adj#upper) /. 2.0) ;
-  print_string "get_hadjustment: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_vadjustment mathview () =
- let adj = mathview#get_vadjustment in
-  adj#set_value ((adj#lower +. adj#upper) /. 2.0) ;
-  print_string "get_vadjustment: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_buffer mathview () =
- let buffer = mathview#get_buffer in
-  Gdk.Draw.rectangle buffer (Gdk.GC.create buffer) ~x:0 ~y:0
-   ~width:50 ~height:50 ~filled:true () ;
-  print_string "get_buffer: SEEMS TO WORK (hint: force the widget redrawing)\n";
-  flush stdout
-;;
-
-let get_frame mathview () =
- let frame = mathview#get_frame in
-  frame#set_shadow_type `NONE ;
-  print_string "get_frame: SEEMS TO WORK\n" ;
-  flush stdout
-;;
-
-let set_font_size mathview () =
- mathview#set_font_size 24 ;
- print_string "set_font_size: FONT IS NOW 24\n" ;
- flush stdout
-;;
-let get_font_size mathview () =
- print_string ("get_font_size: " ^ string_of_int (mathview#get_font_size) ^ "\n") ;
- flush stdout
-;;
-let set_anti_aliasing mathview () =
- mathview#set_anti_aliasing true ;
- print_string "set_anti_aliasing: ON\n" ;
- flush stdout
-;;
-let get_anti_aliasing mathview () =
- print_string ("get_anti_aliasing: " ^
-  (match mathview#get_anti_aliasing with true -> "ON" | false -> "OFF") ^
-  "\n") ;
- flush stdout
-;;
-let set_kerning mathview () =
- mathview#set_kerning true ;
- print_string "set_kerning: ON\n" ;
- flush stdout
-;;
-let get_kerning mathview () =
- print_string ("get_kerning: " ^
-  (match mathview#get_kerning with true -> "ON" | false -> "OFF") ^
-  "\n") ;
- flush stdout
-;;
-
-let set_log_verbosity mathview () =
- mathview#set_log_verbosity 3 ;
- print_string "set_log_verbosity: NOW IS 3\n" ;
- flush stdout
-;;
-let get_log_verbosity mathview () =
- print_string ("get_log_verbosity: " ^
-  string_of_int mathview#get_log_verbosity ^
-  "\n") ;
- flush stdout
-;;
-
-let export_to_postscript (mathview : GMathView.math_view) () =
- mathview#export_to_postscript ~filename:"test.ps" ();
- print_string "expor_to_postscript: SEEMS TO WORK (hint: look at test.ps)\n";
- flush stdout
-;;
-(* Widget creation *)
-let main_window = GWindow.window ~title:"GtkMathView test" () in
-let vbox = GPack.vbox ~packing:main_window#add () in
-let sw = GBin.scrolled_window ~width:50 ~height:50 ~packing:vbox#pack () in
-let mathview= GMathView.math_view ~packing:sw#add ~width:50 ~height:50 () in
-let table = GPack.table ~rows:6 ~columns:5 ~packing:vbox#pack () in
-let button_gtk=GButton.button ~label:"activate Gtk fonts" ~packing:(table#attach ~left:0 ~top:0) () in
-let button_load = GButton.button ~label:"load" ~packing:(table#attach ~left:1 ~top:0) () in
-let button_unload = GButton.button ~label:"unload" ~packing:(table#attach ~left:2 ~top:0) () in
-let button_get_selection = GButton.button ~label:"get_selection" ~packing:(table#attach ~left:3 ~top:0) () in
-let button_set_selection = GButton.button ~label:"set_selection" ~packing:(table#attach ~left:4 ~top:0) () in
-let button_get_width = GButton.button ~label:"get_width" ~packing:(table#attach ~left:0 ~top:1) () in
-let button_get_height = GButton.button ~label:"get_height" ~packing:(table#attach ~left:1 ~top:1) () in
-let button_get_top = GButton.button ~label:"get_top" ~packing:(table#attach ~left:2 ~top:1) () in
-let button_set_top = GButton.button ~label:"set_top" ~packing:(table#attach ~left:3 ~top:1) () in
-let button_set_adjustments = GButton.button ~label:"set_adjustments" ~packing:(table#attach ~left:4 ~top:1) () in
-let button_get_hadjustment = GButton.button ~label:"get_hadjustment" ~packing:(table#attach ~left:0 ~top:2) () in
-let button_get_vadjustment = GButton.button ~label:"get_vadjustment" ~packing:(table#attach ~left:1 ~top:2) () in
-let button_get_buffer = GButton.button ~label:"get_buffer" ~packing:(table#attach ~left:2 ~top:2) () in
-let button_get_frame = GButton.button ~label:"get_frame" ~packing:(table#attach ~left:3 ~top:2) () in
-let button_set_font_size = GButton.button ~label:"set_font_size" ~packing:(table#attach ~left:4 ~top:2) () in
-let button_get_font_size = GButton.button ~label:"get_font_size" ~packing:(table#attach ~left:0 ~top:3) () in
-let button_set_anti_aliasing = GButton.button ~label:"set_anti_aliasing" ~packing:(table#attach ~left:1 ~top:3) () in
-let button_get_anti_aliasing = GButton.button ~label:"get_anti_aliasing" ~packing:(table#attach ~left:2 ~top:3) () in
-let button_set_kerning = GButton.button ~label:"set_kerning" ~packing:(table#attach ~left:3 ~top:3) () in
-let button_get_kerning = GButton.button ~label:"get_kerning" ~packing:(table#attach ~left:4 ~top:3) () in
-let button_set_log_verbosity = GButton.button ~label:"set_log_verbosity" ~packing:(table#attach ~left:0 ~top:4) () in
-let button_get_log_verbosity = GButton.button ~label:"get_log_verbosity" ~packing:(table#attach ~left:1 ~top:4) () in
-let button_export_to_postscript = GButton.button ~label:"export_to_postscript" ~packing:(table#attach ~left:2 ~top:4) () in
-let button_t1 = GButton.button ~label:"activate T1 fonts" ~packing:(table#attach ~left:3 ~top:4) () in
-let button_get_font_manager_type = GButton.button ~label:"get_font_manager" ~packing:(table#attach ~left:4 ~top:4) () in
-(* Signals connection *)
-ignore(button_gtk#connect#clicked (activate_gtk mathview)) ;
-ignore(button_load#connect#clicked (load mathview)) ;
-ignore(button_unload#connect#clicked (unload mathview)) ;
-ignore(button_get_selection#connect#clicked (get_selection mathview)) ;
-ignore(button_set_selection#connect#clicked (set_selection mathview)) ;
-ignore(button_get_width#connect#clicked (get_width mathview)) ;
-ignore(button_get_height#connect#clicked (get_height mathview)) ;
-ignore(button_get_top#connect#clicked (get_top mathview)) ;
-ignore(button_set_top#connect#clicked (set_top mathview)) ;
-ignore(button_set_adjustments#connect#clicked (set_adjustments mathview)) ;
-ignore(button_get_hadjustment#connect#clicked (get_hadjustment mathview)) ;
-ignore(button_get_vadjustment#connect#clicked (get_vadjustment mathview)) ;
-ignore(button_get_buffer#connect#clicked (get_buffer mathview)) ;
-ignore(button_get_frame#connect#clicked (get_frame mathview)) ;
-ignore(button_set_font_size#connect#clicked (set_font_size mathview)) ;
-ignore(button_get_font_size#connect#clicked (get_font_size mathview)) ;
-ignore(button_set_anti_aliasing#connect#clicked (set_anti_aliasing mathview)) ;
-ignore(button_get_anti_aliasing#connect#clicked (get_anti_aliasing mathview)) ;
-ignore(button_set_kerning#connect#clicked (set_kerning mathview)) ;
-ignore(button_get_kerning#connect#clicked (get_kerning mathview)) ;
-ignore(button_set_log_verbosity#connect#clicked (set_log_verbosity mathview)) ;
-ignore(button_get_log_verbosity#connect#clicked (get_log_verbosity mathview)) ;
-ignore(button_export_to_postscript#connect#clicked (export_to_postscript mathview)) ;
-ignore(button_t1#connect#clicked (activate_t1 mathview)) ;
-ignore(button_get_font_manager_type#connect#clicked (get_font_manager_type mathview)) ;
-ignore(mathview#connect#jump jump) ;
-ignore(mathview#connect#clicked clicked) ;
-ignore(mathview#connect#selection_changed (selection_changed mathview)) ;
-(* Main Loop *)
-main_window#show () ;
-GMain.Main.main ()
-;;
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/test.xml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.1/test/test.xml
deleted file mode 100644 (file)
index b0f8c15..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-<math display="block">
-  <mrow helm:xref="SELECTION OK">
-    <mo>&int;</mo>
-    <mo>&ApplyFunction;</mo>
-    <mfrac>
-      <mrow>
-        <mrow>
-          <mi>a</mi>
-         <mo>&InvisibleTimes;</mo>
-         <mi>x</mi>
-       </mrow>
-       <mo>+</mo>
-       <mi>b</mi>
-      </mrow>
-      <mrow>
-        <msup>
-         <mi>x</mi>
-         <mn>2</mn>
-       </msup>
-       <mo>+</mo>
-       <mrow>
-         <mi>p</mi>
-         <mo>&InvisibleTimes;</mo>
-         <mi>x</mi>
-       </mrow>
-       <mo>+</mo>
-       <mi>q</mi>
-      </mrow>
-    </mfrac>
-  </mrow>
-  <mo fontstyle="italic">d</mo>
-  <mi>x</mi>
-  <mo>=</mo>
-  <mrow>
-    <mrow>
-      <mfrac><mi>a</mi><mn>2</mn></mfrac>
-      <mo>&InvisibleTimes;</mo>
-      <mrow>
-        <mi>ln</mi>
-       <mo>&ApplyFunction;</mo>
-       <mrow>
-         <mo>(</mo>
-         <mrow>
-           <msup><mi>x</mi><mn>2</mn></msup>
-           <mo>+</mo>
-           <mrow>
-             <mi>p</mi>
-             <mo>&InvisibleTimes;</mo>
-             <mi>x</mi>
-           </mrow>
-           <mo>+</mo>
-           <mi>q</mi>
-         </mrow>
-         <mo>)</mo>
-       </mrow>
-      </mrow>
-    </mrow>
-    <mo>+</mo>
-    <mrow>
-      <mfrac>
-        <mrow>
-         <mrow>
-           <mn>2</mn>
-           <mo>&InvisibleTimes;</mo>
-           <mi>b</mi>
-         </mrow>
-         <mo>-</mo>
-         <mrow>
-           <mi>a</mi>
-           <mo>&InvisibleTimes;</mo>
-           <mi>p</mi>
-         </mrow>
-       </mrow>
-       <msqrt>
-         <mrow>
-           <mrow>
-             <mn>4</mn>
-             <mo>&InvisibleTimes;</mo>
-             <mi>q</mi>
-           </mrow>
-           <mo>-</mo>
-           <msup>
-             <mi>p</mi>
-             <mn>2</mn>
-           </msup>
-         </mrow>
-       </msqrt>
-      </mfrac>
-      <mo>&InvisibleTimes;</mo>
-      <mrow>
-        <mi xlink:href="JUMPS WORK">arctg</mi>
-       <mo>&ApplyFunction;</mo>
-       <mfrac>
-         <mrow>
-           <mrow>
-             <mn>2</mn>
-             <mo>&InvisibleTimes;</mo>
-             <mi>x</mi>
-           </mrow>
-           <mo>+</mo>
-           <mi>p</mi>
-         </mrow>
-         <msqrt>
-           <mrow>
-             <mrow>
-               <mn>4</mn>
-               <mo>&InvisibleTimes;</mo>
-               <mi>q</mi>
-             </mrow>
-             <mo>-</mo>
-             <msup>
-               <mi>p</mi>
-               <mn>2</mn>
-             </msup>
-           </mrow>
-         </msqrt>
-       </mfrac>
-      </mrow>
-    </mrow>
-    <mo>+</mo>
-    <mi>c</mi>
-  </mrow>  
-</math>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2-1.spec b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2-1.spec
deleted file mode 100644 (file)
index cad3d06..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-Summary: GtkMathView : the binding for lablgtk of the GtkMathView widget
-Name: lablgtk-20001129_gtkmathview
-Version: 0.2.2
-Release: 1
-Copyright: LGPL
-Group: Development/Libraries
-Requires: lablgtk_20001129 gtkmathview
-Source: www.cs.unibo.it:/~lpadovan/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2.tar.gz
-%description
-GtkMathView is the binding for lablgtk of the GtkMathView widget.
-
-%prep
-%setup
-
-%build
-make
-make opt
-
-%install
-make install
-
-%files
-%doc COPYING
-
-/usr/lib/ocaml/lablgtk/mathview
-/usr/lib/ocaml/minidom
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2.tar.gz b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2.tar.gz
deleted file mode 100644 (file)
index 96d8630..0000000
Binary files a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2.tar.gz and /dev/null differ
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.cvsignore
deleted file mode 100644 (file)
index cd9e250..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.cmx *.cma *.cmxa config.make
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.depend b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/.depend
deleted file mode 100644 (file)
index 600449b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-gMathView.cmo: gtkMathView.cmo gtk_mathview.cmo 
-gMathView.cmx: gtkMathView.cmx gtk_mathview.cmx 
-gtkMathView.cmo: gtk_mathview.cmo 
-gtkMathView.cmx: gtk_mathview.cmx 
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/COPYING b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/COPYING
deleted file mode 100644 (file)
index 20b480a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-This library is made available under the LGPL.
-You should have got a copy of the LGPL with Objective Caml.
-The LGPL applies to all the files in this directory, but not in
-subdirectories.
-
-For the test subdirectory, there is no specific licensing policy,
-but you may freely take inspiration from the code, and copy parts of
-it in your application.
-
-Author:
-       Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/Makefile
deleted file mode 100644 (file)
index b8adbb4..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-# Makefile for lablgtk_mathview.
-
-LABLGTKDIR = /usr/lib/ocaml/lablgtk
-MINIDOMDIR = ./minidom
-TESTDIR = ./test
-MLFLAGS += -I $(LABLGTKDIR) -I $(MINIDOMDIR)
-
-TARGETS = ml_gtk_mathview.o lablgtkmathview.cma
-
-all: Minidom $(TARGETS)
-
-opt: Minidom.opt lablgtkmathviewopt
-
-Minidom:
-       cd $(MINIDOMDIR); make
-
-Minidom.opt:
-       cd $(MINIDOMDIR); make opt
-
-configure:
-       @rm -f config.make
-       @$(MAKE) --no-print-directory -f configure.mk
-
-depend:
-       @rm -f .depend
-       @$(MAKE) --no-print-directory -f configure.mk .depend
-
-.depend config.make:
-       @$(MAKE) --no-print-directory -f configure.mk
-
-COMPILER = $(CAMLC) $(MLFLAGS) -w s -labels -c
-LINKER = $(CAMLC) $(MLFLAGS)
-COMPOPT = $(CAMLOPT) $(MLFLAGS) -w s -labels -c
-LINKOPT = $(CAMLOPT) $(MLFLAGS)
-
-include config.make
-
-INSTALLDIR = $(LIBDIR)/lablgtk/mathview
-
-MLLIBS = lablgtkmathview.cma
-CLIBS = 
-MLLINK = unix.cma str.cma
-
-ifdef DEBUG
-CFLAGS = -g $(GTKCFLAGS)
-MLLINK += -cclib -lcamlrund
-MLFLAGS += -g
-else
-CFLAGS = -O -DGTK_NO_CHECK_CASTS -DGTK_DISABLE_COMPAT_H $(GTKCFLAGS)
-endif
-CFLAGS += $(MINIDOMCFLAGS) $(GTKMATHVIEWCFLAGS)
-
-THFLAGS = -thread
-THLINK = unix.cma threads.cma
-
-ifdef USE_CC
-CCOMPILER = $(CC) -c -I$(LIBDIR) $(CFLAGS)
-else
-CCOMPILER = ocamlc -c -ccopt "$(CFLAGS)"
-endif
-
-# Rules
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .c .o .var .h .opt .def
-.c.o:
-       $(CCOMPILER) $<
-.ml.cmo:
-       $(COMPILER) $<
-.mli.cmi:
-       $(COMPILER) $<
-.ml.cmx:
-       $(COMPOPT) $<
-.var.h:
-       ./var2def < $< > $@
-.var.c:
-       ./var2conv < $< > $@
-
-# Targets
-COBJS = ml_gtk_mathview.o
-MLOBJS = gtk_mathview.cmo gtkMathView.cmo gMathView.cmo
-ALLOBJS = $(MLOBJS)
-
-lablgtkmathviewopt: $(CLIBS) $(MLLIBS:.cma=.cmxa)
-
-install:
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(ALLOBJS:.cmo=.cmi) $(INSTALLDIR)
-       if test -f *.mli ; then cp *.mli $(INSTALLDIR) ; fi
-       cp $(ALLOBJS:.cmo=.ml) $(INSTALLDIR)
-       cp $(MLLIBS) $(INSTALLDIR)
-       cp $(COBJS) $(INSTALLDIR)
-       if test ! -z "$(CLIBS)" ; then cp $(CLIBS) $(INSTALLDIR) ; fi
-       if test -f lablgtkmathview.cmxa; then \
-          cp $(MLLIBS:.cma=.cmxa) $(MLLIBS:.cma=.a) \
-             $(INSTALLDIR); fi
-
-lablgtkmathview.cma: $(MLOBJS)
-       $(LINKER) -a -custom -o $@ $(MLOBJS) $(GTKLIBS) -cclib "$(GTKMATHVIEWLIBS)" -cclib "$(MINIDOMLIBS)"
-lablgtkmathview.cmxa: $(MLOBJS:.cmo=.cmx)
-       $(LINKOPT) -a -o $@ $(MLOBJS:.cmo=.cmx) $(GTKLIBS) -cclib "$(GTKMATHVIEWLIBS)" -cclib "$(MINIDOMLIBS)"
-
-ml_gtk.o: $(LABLGTKDIR)/gtk_tags.c $(LABLGTKDIR)/gtk_tags.h \
-          $(LABLGTKDIR)/ml_gtk.h $(LABLGTKDIR)/ml_gdk.h $(LABLGTKDIR)/wrappers.h
-
-clean:
-       rm -f *.cm* *.o *.a *_tags.[ch] $(TARGETS)
-       cd $(MINIDOMDIR); make clean
-       cd $(TESTDIR); make clean
-
-include .depend
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/configure.mk b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/configure.mk
deleted file mode 100644 (file)
index 8982371..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-# makefile for configuring lablGTK_mathview
-
-# Default compilers
-CAMLC = ocamlc
-CAMLOPT = ocamlopt
-
-# Default installation directories
-BINDIR = `$(GETBINDIR)`
-INSTALLDIR = $(LIBDIR)/lablgtk/mathview
-
-# Autoconf
-GETLIBDIR = ocamlc -v | grep "^Standard" | sed 's/^.*: *//'
-LIBDIR = `$(GETLIBDIR)`
-GETBINDIR = $(GETLIBDIR) | sed -e 's|/lib/[^/]*$$|/bin|' -e 's|/lib$$|/bin|'
-GETRANLIB = which ranlib 2>/dev/null | sed -e 's|.*/ranlib$$|!|' -e 's/^[^!]*$$/:/' -e 's/!/ranlib/'
-
-ifdef USE_GNOME
-GTKGETCFLAGS = gtk-config --cflags`" -I"`gnome-config --includedir
-GNOMELIBS = `gnome-config --libs gtkxmhtml`
-else
-GTKGETCFLAGS = gtk-config --cflags
-endif
-
-GTKGETLIBS = gtk-config --libs
-
-configure: .depend config.make
-
-.depend:
-       ocamldep *.ml *.mli > .depend
-
-config.make:
-       @echo CAMLC=$(CAMLC) > config.make
-       @echo CAMLOPT=$(CAMLOPT) >> config.make
-       @echo USE_GL=$(USE_GL) >> config.make
-       @echo USE_GNOME=$(USE_GNOME) >> config.make
-       @echo USE_CC=$(USE_CC) >> config.make
-       @echo DEBUG=$(DEBUG) >> config.make
-       @echo CC=$(CC) >> config.make
-       @echo RANLIB=`$(GETRANLIB)` >> config.make
-       @echo LIBDIR=$(LIBDIR) >> config.make
-       @echo BINDIR=`$(GETBINDIR)` >> config.make
-       @echo INSTALLDIR=$(INSTALLDIR) >> config.make
-# Luca: was
-#      @echo GTKCFLAGS=`$(GTKGETCFLAGS)` -I/usr/lib/ocaml/lablgtk >> config.make
-# Luca: now
-       @echo GTKCFLAGS=`$(GTKGETCFLAGS)` -I$(LIBDIR)/lablgtk >> config.make
-       @echo GTKLIBS=`$(GTKGETLIBS)` | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-# Luca: GtkMathView configuration
-       @echo GTKMATHVIEWCFLAGS=`gtkmathview-config --cflags` >> config.make
-       @echo MINIDOMCFLAGS=`minidom-config --cflags` >> config.make
-       @echo GTKMATHVIEWLIBS=`gtkmathview-config --libs` >> config.make
-       @echo MINIDOMLIBS=`minidom-config --libs` >> config.make
-# Luca: end of GtkMathView configuration
-       @echo GNOMELIBS=$(GNOMELIBS) | \
-         sed -e 's/-l/-cclib &/g' -e 's/-[LRWr][^ ]*/-ccopt &/g' \
-         >> config.make
-       cat config.make
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gMathView.ml
deleted file mode 100644 (file)
index e897ccf..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-open Gaux
-open Gtk
-open Gtk_mathview
-open GtkBase
-open GtkMathView
-open GObj
-
-exception ErrorLoadingFile of string;;
-exception ErrorWritingFile of string;;
-exception NoSelection;;
-
-class math_view_signals obj = object
-  inherit GContainer.container_signals obj
-  method clicked = GtkSignal.connect ~sgn:MathView.Signals.clicked obj ~after
-  method jump = GtkSignal.connect ~sgn:MathView.Signals.jump obj ~after
-  method selection_changed =
-  GtkSignal.connect ~sgn:MathView.Signals.selection_changed obj ~after
-end
-
-class math_view obj = object
- inherit GContainer.container (obj : Gtk_mathview.math_view obj)
- method connect = new math_view_signals obj
- method load ~filename =
-  if not (MathView.load obj ~filename) then raise (ErrorLoadingFile filename)
- method unload = MathView.unload obj
- method get_selection = MathView.get_selection obj
- method set_selection (node : Ominidom.o_mDOMNode option) = MathView.set_selection obj node
- method get_width = MathView.get_width obj
- method get_height = MathView.get_height obj
- method get_top = MathView.get_top obj
- method set_top = MathView.set_top obj
- method set_adjustments =
-  fun adj1 adj2 ->
-   MathView.set_adjustments obj (GData.as_adjustment adj1)
-   (GData.as_adjustment adj2)
- method get_hadjustment = new GData.adjustment (MathView.get_hadjustment obj)
- method get_vadjustment = new GData.adjustment (MathView.get_vadjustment obj)
- method get_buffer = MathView.get_buffer obj
- method get_frame = new GBin.frame (MathView.get_frame obj)
- method set_font_size = MathView.set_font_size obj
- method get_font_size = MathView.get_font_size obj
- method set_anti_aliasing = MathView.set_anti_aliasing obj
- method get_anti_aliasing = MathView.get_anti_aliasing obj
- method set_kerning = MathView.set_kerning obj
- method get_kerning = MathView.get_kerning obj
- method set_log_verbosity = MathView.set_log_verbosity obj
- method get_log_verbosity = MathView.get_log_verbosity obj
- method export_to_postscript
-       ?(width = 595) ?(height = 822) ?(x_margin = 72) ?(y_margin = 72)
-       ?(disable_colors = false) ~filename () =
-  let result = MathView.export_to_postscript obj
-       ~width ~height ~x_margin ~y_margin ~disable_colors ~filename
-  in
-  if not result then raise (ErrorWritingFile filename)
- method get_font_manager_type = MathView.get_font_manager_type obj
- method set_font_manager_type ~fm_type = MathView.set_font_manager_type obj ~fm_type
-end
-
-let math_view ?adjustmenth ?adjustmentv ?font_size ?font_manager ?border_width
- ?width ?height ?packing ?show () =
- let w =
-   MathView.create
-    ?adjustmenth:(may_map ~f:GData.as_adjustment adjustmenth)
-    ?adjustmentv:(may_map ~f:GData.as_adjustment adjustmentv)
-    ()
- in
-  Container.set w ?border_width ?width ?height;
- let mathview = pack_return (new math_view w) ~packing ~show in
- begin
-    match font_size with
-    | Some size -> mathview#set_font_size size
-    | None      -> ()
-  end;
-  begin
-    match font_manager with
-    | Some manager -> mathview#set_font_manager_type ~fm_type:manager
-    | None         -> ()
-  end;
-  mathview
-;;
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtkMathView.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtkMathView.ml
deleted file mode 100644 (file)
index 4c893fa..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-open Gtk
-open Gtk_mathview
-open Tags
-open GtkBase
-open Gpointer
-
-external mDOMNode_of_boxed_option :
- Gpointer.boxed option -> Minidom.mDOMNode =
-  "ml_gtk_math_view_mDOMNode_of_bodex_option"
-
-external mDOMNode_option_of_boxed_option :
- Gpointer.boxed option -> Minidom.mDOMNode option =
-  "ml_gtk_math_view_mDOMNode_option_of_bodex_option"
-
-let o_mDOMNode_of_mDOMNode node = new Ominidom.o_mDOMNode node
-
-let o_mDOMNode_option_of_mDOMNode_option =
-  function
-  | Some x -> Some (o_mDOMNode_of_mDOMNode x)
-  | None   -> None
-
-let mDOMNode_option_of_o_mDOMNode_option =
-  function
-  | Some x -> Some (x#get_dom_node)
-  | None   -> None
-
-module MathView = struct
-  exception NoSelection
-
-  let cast w : math_view obj = Object.try_cast w "GtkMathView"
-  external create : Gtk.adjustment optobj -> Gtk.adjustment optobj -> 
-   math_view obj = "ml_gtk_math_view_new"
-  let create ~adjustmenth ~adjustmentv () =
-   create (optboxed adjustmenth) (optboxed adjustmentv)
-  external load : [>`math_view] obj -> filename:string -> bool =
-   "ml_gtk_math_view_load"
-  external unload : [>`math_view] obj -> unit =
-   "ml_gtk_math_view_unload"
-  external raw_get_selection : [>`math_view] obj -> Minidom.mDOMNode option =
-   "ml_gtk_math_view_get_selection"
-  let get_selection obj =
-   o_mDOMNode_option_of_mDOMNode_option (raw_get_selection obj)
-  external raw_set_selection : [>`math_view] obj -> Minidom.mDOMNode option -> unit=
-   "ml_gtk_math_view_set_selection"
-  let set_selection obj node =
-   raw_set_selection obj (mDOMNode_option_of_o_mDOMNode_option node)
-  external get_width : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_width"
-  external get_height : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_height"
-  external get_top : [>`math_view] obj -> (int * int) =
-   "ml_gtk_math_view_get_top"
-  external set_top : [>`math_view] obj -> int -> int -> unit =
-   "ml_gtk_math_view_set_top"
-  external set_adjustments : [>`math_view] obj -> Gtk.adjustment obj -> Gtk.adjustment obj -> unit =
-   "ml_gtk_math_view_set_adjustments"
-  external get_hadjustment : [>`math_view] obj -> Gtk.adjustment obj =
-   "ml_gtk_math_view_get_hadjustment"
-  external get_vadjustment : [>`math_view] obj -> Gtk.adjustment obj =
-   "ml_gtk_math_view_get_vadjustment"
-  external get_buffer : [>`math_view] obj -> Gdk.pixmap =
-   "ml_gtk_math_view_get_buffer"
-  external get_frame : [>`math_view] obj -> [`frame] obj =
-   "ml_gtk_math_view_get_frame"
-  external set_font_size : [>`math_view] obj -> int -> unit =
-   "ml_gtk_math_view_set_font_size"
-  external get_font_size : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_font_size"
-  external set_anti_aliasing : [>`math_view] obj -> bool -> unit =
-   "ml_gtk_math_view_set_anti_aliasing"
-  external get_anti_aliasing : [>`math_view] obj -> bool =
-   "ml_gtk_math_view_get_anti_aliasing"
-  external set_kerning : [>`math_view] obj -> bool -> unit =
-   "ml_gtk_math_view_set_kerning"
-  external get_kerning : [>`math_view] obj -> bool =
-   "ml_gtk_math_view_get_kerning"
-  external set_log_verbosity : [>`math_view] obj -> int -> unit =
-   "ml_gtk_math_view_set_log_verbosity"
-  external get_log_verbosity : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_log_verbosity"
-  external export_to_postscript :
-   [>`math_view] obj -> width:int -> height:int -> x_margin:int -> y_margin:int -> disable_colors:bool -> filename:string -> bool =
-   "ml_gtk_math_view_export_to_postscript_bytecode" "ml_gtk_math_view_export_to_postscript_native"
-  external get_font_manager_type : [>`math_view] obj ->
-   [`font_manager_gtk | `font_manager_t1] =
-   "ml_gtk_math_view_get_font_manager_type"
-  external set_font_manager_type : [>`math_view] obj ->
-    fm_type:[`font_manager_gtk | `font_manager_t1] -> unit =
-   "ml_gtk_math_view_set_font_manager_type"
-  
-  module Signals = struct
-    open GtkSignal
-
-    let clicked : ([>`math_view],_) t =
-     let marshal_clicked f _ =
-      function
-         [GtkArgv.POINTER node] -> f (o_mDOMNode_of_mDOMNode (mDOMNode_of_boxed_option node))
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_clicked"
-     in
-      { name = "clicked"; marshaller = marshal_clicked }
-
-    let jump : ([>`math_view],_) t =
-     let marshal_jump f _ =
-      function
-         [GtkArgv.POINTER node] -> f (o_mDOMNode_of_mDOMNode (mDOMNode_of_boxed_option node))
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_jump"
-     in
-      { name = "jump"; marshaller = marshal_jump }
-
-    let selection_changed : ([>`math_view],_) t =
-     let marshal_selection_changed f _ =
-      function
-         [GtkArgv.POINTER node] -> f (o_mDOMNode_option_of_mDOMNode_option (mDOMNode_option_of_boxed_option node))
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_selection_changed"
-     in
-      { name = "selection_changed"; marshaller = marshal_selection_changed }
-  end
-end
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtk_mathview.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/gtk_mathview.ml
deleted file mode 100644 (file)
index 745a1ba..0000000
+++ /dev/null
@@ -1 +0,0 @@
-type math_view = [`widget|`container|`bin|`eventbox|`math_view]
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/.cvsignore
deleted file mode 100644 (file)
index 84bdd8e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.cmx test test.opt
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/Makefile
deleted file mode 100644 (file)
index 6fe73af..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-LIBDIR = /usr/lib/ocaml
-INSTALLDIR = $(LIBDIR)/minidom
-OBJECTS = minidom.cmi minidom.cmo ml_minidom.o ominidom.cmi ominidom.cmo
-OBJECTS_OPT = minidom.cmx ominidom.cmx
-INST = minidom.o ominidom.o ml_minidom.h minidom.mli
-
-all: $(OBJECTS) test
-
-opt: $(OBJECTS_OPT) test.opt
-
-ml_minidom.o: ml_minidom.c
-       gcc -c -I/usr/lib/ocaml/caml/ `glib-config --cflags` `minidom-config --cflags` $<
-
-minidom.cmi: minidom.mli
-       ocamlc -c $<
-
-minidom.cmo: minidom.ml minidom.cmi
-       ocamlc -c $<
-
-minidom.cmx: minidom.ml minidom.cmi
-       ocamlopt -c $<
-
-ominidom.cmi: ominidom.mli
-       ocamlc -c $<
-
-ominidom.cmo: ominidom.ml
-       ocamlc -c $<
-
-ominidom.cmx: ominidom.ml
-       ocamlopt -c $<
-
-test.cmo: test.ml minidom.cmo
-       ocamlc -c test.ml
-
-test.cmx: test.ml minidom.cmx
-       ocamlopt -c test.ml
-
-test: test.cmo minidom.cmo ml_minidom.o
-       ocamlc -custom -o test minidom.cmo test.cmo ml_minidom.o \
-        -cclib "`glib-config --libs` `minidom-config --libs`"
-
-test.opt: test.cmx minidom.cmx ml_minidom.o
-       ocamlopt -o test.opt minidom.cmx test.cmx ml_minidom.o \
-        -cclib "`glib-config --libs` `minidom-config --libs`"
-
-install:
-       if test -d $(INSTALLDIR); then : ; else mkdir -p $(INSTALLDIR); fi
-       cp $(OBJECTS) $(OBJECTS_OPT) $(INST) $(INSTALLDIR)
-
-clean:
-       rm -f *.o *.cm? test test.opt
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.ml
deleted file mode 100644 (file)
index 31e677b..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-
-type mDOMString
-type mDOMDoc
-type mDOMNode
-type mDOMAttr
-type mDOMEntity
-
-external string_of_mDOMString : mDOMString -> string = "ml_string_of_mDOMString"
-external mDOMString_of_string : string -> mDOMString = "ml_mDOMString_of_string"
-external mDOMString_eq : string -> string -> bool = "ml_mDOMString_eq"
-
-external doc_load : string -> mDOMDoc = "ml_doc_load"
-external doc_unload : mDOMDoc -> unit = "ml_doc_unload"
-
-external doc_new : mDOMString -> mDOMDoc = "ml_doc_new"
-external doc_get_root_node : mDOMDoc -> mDOMNode = "ml_doc_get_root_node"
-
-external doc_add_entity : mDOMDoc -> mDOMString -> mDOMString -> mDOMEntity = "ml_doc_add_entity"
-external doc_get_entity : mDOMDoc -> mDOMString -> mDOMEntity option = "ml_doc_get_entity"
-external doc_get_predefined_entity : mDOMDoc -> mDOMString -> mDOMEntity option = "ml_doc_get_predefined_entity"
-external entity_get_content : mDOMEntity -> mDOMString = "ml_entity_get_content"
-
-external node_is_text  : mDOMNode -> bool = "ml_node_is_text"
-external node_is_element : mDOMNode -> bool = "ml_node_is_element"
-external node_is_blank : mDOMNode -> bool = "ml_node_is_blank"
-external node_is_entity_ref : mDOMNode -> bool = "ml_node_is_entity_ref"
-external node_get_type : mDOMNode -> int = "ml_node_get_type"
-external node_get_name : mDOMNode -> mDOMString option = "ml_node_get_name"
-external node_get_ns_uri : mDOMNode -> mDOMString option = "ml_node_get_ns_uri"
-external node_get_attribute : mDOMNode -> mDOMString -> mDOMString option = "ml_node_get_attribute"
-external node_get_attribute_ns : mDOMNode -> mDOMString -> mDOMString -> mDOMString option = "ml_node_get_attribute_ns"
-external node_get_content : mDOMNode -> mDOMString option = "ml_node_get_content"
-external node_get_parent : mDOMNode -> mDOMNode option = "ml_node_get_parent"
-external node_get_prev_sibling : mDOMNode -> mDOMNode option = "ml_node_get_prev_sibling"
-external node_get_next_sibling : mDOMNode -> mDOMNode option = "ml_node_get_next_sibling"
-external node_get_first_child : mDOMNode -> mDOMNode option = "ml_node_get_first_child"
-external node_get_first_attribute : mDOMNode -> mDOMAttr option = "ml_node_get_first_attribute"
-external node_is_first : mDOMNode -> bool = "ml_node_is_first"
-external node_is_last : mDOMNode -> bool = "ml_node_is_last"
-
-external attr_get_name : mDOMAttr -> mDOMString option = "ml_attr_get_name"
-external attr_get_ns_uri : mDOMAttr -> mDOMString option = "ml_attr_get_ns_uri"
-external attr_get_value : mDOMAttr -> mDOMString option = "ml_attr_get_value"
-external attr_get_prev_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_prev_sibling"
-external attr_get_next_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_next_sibling"
-external attr_get_parent : mDOMAttr -> mDOMNode option = "ml_attr_get_parent"
-
-let rec node_list_of_node_first =
-  function None -> []
-  |        Some node -> node :: (node_list_of_node_first (node_get_next_sibling node))
-
-let rec attr_list_of_attr_first =
-  function None -> []
-  |        Some attr -> attr :: (attr_list_of_attr_first (attr_get_next_sibling attr))
-  
-let node_get_children node =
-  (node_list_of_node_first (node_get_first_child node))
-
-let node_get_attributes node =
-  (attr_list_of_attr_first (node_get_first_attribute node))
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.mli b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/minidom.mli
deleted file mode 100644 (file)
index 0b65595..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-
-type mDOMString
-type mDOMDoc
-type mDOMNode
-type mDOMAttr
-type mDOMEntity
-
-external string_of_mDOMString : mDOMString -> string = "ml_string_of_mDOMString"
-external mDOMString_of_string : string -> mDOMString = "ml_mDOMString_of_string"
-external mDOMString_eq : string -> string -> bool = "ml_mDOMString_eq"
-
-external doc_load : string -> mDOMDoc = "ml_doc_load"
-external doc_unload : mDOMDoc -> unit = "ml_doc_unload"
-
-external doc_new : mDOMString -> mDOMDoc = "ml_doc_new"
-external doc_get_root_node : mDOMDoc -> mDOMNode = "ml_doc_get_root_node"
-
-external doc_add_entity : doc:mDOMDoc -> name:mDOMString -> content:mDOMString -> mDOMEntity = "ml_doc_add_entity"
-external doc_get_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_entity"
-external doc_get_predefined_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_predefined_entity"
-external entity_get_content : mDOMEntity -> mDOMString = "ml_entity_get_content"
-
-external node_is_text  : mDOMNode -> bool = "ml_node_is_text"
-external node_is_element : mDOMNode -> bool = "ml_node_is_element"
-external node_is_blank : mDOMNode -> bool = "ml_node_is_blank"
-external node_is_entity_ref : mDOMNode -> bool = "ml_node_is_entity_ref"
-external node_get_type : mDOMNode -> int = "ml_node_get_type"
-external node_get_name : mDOMNode -> mDOMString option = "ml_node_get_name"
-external node_get_ns_uri : mDOMNode -> mDOMString option = "ml_node_get_ns_uri"
-external node_get_attribute : node:mDOMNode -> name:mDOMString -> mDOMString option = "ml_node_get_attribute"
-external node_get_attribute_ns : node:mDOMNode -> name:mDOMString -> ns_uri:mDOMString -> mDOMString option = "ml_node_get_attribute_ns"
-external node_get_content : mDOMNode -> mDOMString option = "ml_node_get_content"
-external node_get_parent : mDOMNode -> mDOMNode option = "ml_node_get_parent"
-external node_get_prev_sibling : mDOMNode -> mDOMNode option = "ml_node_get_prev_sibling"
-external node_get_next_sibling : mDOMNode -> mDOMNode option = "ml_node_get_next_sibling"
-external node_get_first_child : mDOMNode -> mDOMNode option = "ml_node_get_first_child"
-external node_get_first_attribute : mDOMNode -> mDOMAttr option = "ml_node_get_first_attribute"
-external node_is_first : mDOMNode -> bool = "ml_node_is_first"
-external node_is_last : mDOMNode -> bool = "ml_node_is_last"
-
-external attr_get_name : mDOMAttr -> mDOMString option = "ml_attr_get_name"
-external attr_get_ns_uri : mDOMAttr -> mDOMString option = "ml_attr_get_ns_uri"
-external attr_get_value : mDOMAttr -> mDOMString option = "ml_attr_get_value"
-external attr_get_prev_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_prev_sibling"
-external attr_get_next_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_next_sibling"
-external attr_get_parent : mDOMAttr -> mDOMNode option = "ml_attr_get_parent"
-
-val node_get_children : mDOMNode -> mDOMNode list
-val node_get_attributes : mDOMNode -> mDOMAttr list
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.c b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.c
deleted file mode 100644 (file)
index 1062614..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-
-#include <assert.h>
-#include <mlvalues.h>
-#include <memory.h>
-
-#include "minidom.h"
-
-#define Val_ptr(p)        ((value) (p))
-#define Val_option(p,f)   ((p != NULL) ? ml_some(f(p)) : Val_unit)
-#define Val_mDOMString(s) (copy_string((char*) (s)))
-#define mDOMString_val(v) ((mDOMStringRef) String_val(v))
-
-static value
-ml_some(value v)
-{
-  CAMLparam1(v);
-  value ret = alloc_small(1,0);
-  Field(ret,0) = v;
-  CAMLreturn(ret);
-}
-
-value
-ml_string_of_mDOMString(value s)
-{
-  CAMLparam1(s);
-  CAMLreturn(s);
-}
-
-value
-ml_mDOMString_of_string(value s)
-{
-  CAMLparam1(s);
-  CAMLreturn(s);
-}
-
-value
-ml_doc_load(value file_name)
-{
-  mDOMDocRef doc_ref;
-
-  CAMLparam1(file_name);
-
-  doc_ref = mdom_load(String_val(file_name), FALSE, NULL);
-  if (doc_ref == NULL) failwith("minidom: could not load document");
-
-  CAMLreturn((value) doc_ref);
-}
-
-value
-ml_doc_unload(value doc)
-{
-  CAMLparam1(doc);
-
-  mdom_unload((mDOMDocRef) doc);
-
-  CAMLreturn(Val_unit);
-}
-
-value
-ml_doc_new(value s)
-{
-  mDOMDocRef doc_ref;
-
-  CAMLparam1(s);
-
-  doc_ref = mdom_doc_new(mDOMString_val(s));
-  if (doc_ref == NULL) failwith("minidom: could not create new document");
-
-  CAMLreturn((value) doc_ref);
-}
-
-
-value
-ml_doc_get_root_node(value doc)
-{
-  mDOMNodeRef root;
-
-  CAMLparam1(doc);
-  root = mdom_doc_get_root_node((mDOMDocRef) doc);
-  if (root == NULL) failwith("minidom: document has no root node!");
-
-  CAMLreturn((value) root);
-}
-
-value
-ml_doc_add_entity(value doc, value name, value content)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam3(doc, name, content);
-  ent = mdom_doc_add_entity((mDOMDocRef) doc, mDOMString_val(name), mDOMString_val(content));
-  if (ent == NULL) failwith("minidom: could not add entity");
-
-  CAMLreturn((value) ent);
-}
-
-value
-ml_doc_get_entity(value doc, value name)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam2(doc, name);
-  ent = mdom_doc_get_entity((mDOMDocRef) doc, mDOMString_val(name));
-
-  CAMLreturn(Val_option(ent, Val_ptr));
-}
-
-value
-ml_doc_get_predefined_entity(value name)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam1(name);
-  ent = mdom_get_predefined_entity(mDOMString_val(name));
-
-  CAMLreturn(Val_option(ent, Val_ptr));
-}
-
-value
-ml_entity_get_content(value ent)
-{
-  CAMLparam1(ent);
-  CAMLreturn(Val_mDOMString(mdom_entity_get_content((mDOMEntityRef) ent)));
-}
-
-value
-ml_node_is_text(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_text((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_element(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_element((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_blank(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_blank((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_entity_ref(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_entity_ref((mDOMNodeRef) node)));
-}
-
-value
-ml_node_get_type(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_int(mdom_node_get_type((mDOMNodeRef) node)));
-}
-
-value
-ml_node_get_name(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_name((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_content(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_content((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_ns_uri(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_ns_uri((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_attribute(value node, value name)
-{
-  CAMLparam2(node,name);
-  CAMLreturn(Val_option(mdom_node_get_attribute((mDOMNodeRef) node, String_val(name)), Val_mDOMString));
-}
-
-value
-ml_node_get_attribute_ns(value node, value name, value ns_uri)
-{
-  CAMLparam2(node,name);
-  CAMLreturn(Val_option(mdom_node_get_attribute_ns((mDOMNodeRef) node,
-                                                  String_val(name),
-                                                  String_val(ns_uri)), Val_mDOMString));
-}
-
-value
-ml_node_get_parent(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_parent((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_prev_sibling(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_prev_sibling((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_next_sibling(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_next_sibling((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_first_child(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_first_child((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_first_attribute(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_first_attribute((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_is_first(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_first((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_last(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_last((mDOMNodeRef) node)));
-}
-
-value
-ml_attr_get_name(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_name((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_ns_uri(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_ns_uri((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_value(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_value((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_prev_sibling(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_prev_sibling((mDOMAttrRef) attr), Val_ptr));
-}
-
-value
-ml_attr_get_next_sibling(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_next_sibling((mDOMAttrRef) attr), Val_ptr));
-}
-
-value
-ml_attr_get_parent(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_parent((mDOMAttrRef) attr), Val_ptr));
-}
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.h b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ml_minidom.h
deleted file mode 100644 (file)
index d224799..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#ifndef ml_minidom_h
-#define ml_minidom_h
-
-#define Val_ptr(p)        ((value) (p))
-#ifndef Val_option
-#define Val_option(p,f)   ((p != NULL) ? ml_some(f(p)) : Val_unit)
-#endif /* Val_option */
-#define Val_mDOMString(s) (copy_string((char*) (s)))
-#define mDOMString_val(v) ((mDOMStringRef) String_val(v))
-#define mDOMNode_val(v) ((mDOMNodeRef) v)
-
-#define mDOMNode_option_mDOMNodeRef(p) (((p) != NULL) ? ml_some((value) (p)) : Val_unit)
-#define mDOMNodeRef_mDOMNode_option(v) ((v == Val_unit) ? NULL : (mDOMNodeRef)Field((v),0))
-#define Val_mDOMNodeRef(p)             (mDOMNode_option_mDOMNodeRef(p))
-#define mDOMNodeRef_val(v)             (mDOMNodeRef_mDOMNode_option(v))
-
-#endif /* ml_minidom_h */
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.ml
deleted file mode 100644 (file)
index 85ad2e4..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-
-exception Node_has_no_parent;;
-exception Node_has_no_sibling of string;;
-exception Node_has_no_children;;
-exception Node_has_no_attributes;;
-exception Attribute_has_no_sibling of string;;
-exception Attribute_has_no_parent;;
-exception Undefined_entity;;
-
-let option_to_exception v e =
-  match v with
-    Some x -> x
-  | None   -> raise e
-;;
-
-class o_mDOMString (str: Minidom.mDOMString) =
-  object
-    method get_dom_string = str
-    method get_string = Minidom.string_of_mDOMString str
-  end;;
-  
-let o_mDOMString_of_string str =
-  new o_mDOMString (Minidom.mDOMString_of_string str)
-
-class o_mDOMEntity (ent : Minidom.mDOMEntity) =
-  object
-    method get_dom_entity = ent
-    method get_content =
-      new o_mDOMString (Minidom.entity_get_content ent)
-  end
-;;
-
-class o_mDOMDoc (doc : Minidom.mDOMDoc) =
-  object
-    method get_dom_doc = doc
-
-    method get_root_node =
-      new o_mDOMNode (Minidom.doc_get_root_node doc)
-    method add_entity (name : o_mDOMString) (value : o_mDOMString) =
-      new o_mDOMEntity
-        (Minidom.doc_add_entity doc
-         (name#get_dom_string) (value#get_dom_string)
-       )
-    method get_entity (name : o_mDOMString) =
-      match Minidom.doc_get_entity doc (name#get_dom_string) with
-      | Some x -> new o_mDOMEntity x
-      | None -> raise Undefined_entity
-    method get_predefined_entity (name : o_mDOMString) =
-      match Minidom.doc_get_predefined_entity doc (name#get_dom_string) with
-      | Some x -> new o_mDOMEntity x
-      | None -> raise Undefined_entity
-  end
-and o_mDOMNode (node : Minidom.mDOMNode) =
-  object
-    method get_dom_node = node
-
-    method is_text = Minidom.node_is_text node
-    method is_element = Minidom.node_is_element node
-    method is_blank = Minidom.node_is_blank node
-    method is_entity_ref = Minidom.node_is_entity_ref node
-
-    method get_type = Minidom.node_get_type node
-    method get_name = 
-      match Minidom.node_get_name node with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_ns_uri =
-      match Minidom.node_get_ns_uri node with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_attribute (name : o_mDOMString) =
-      match Minidom.node_get_attribute node (name#get_dom_string) with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_attribute_ns (name : o_mDOMString) (uri : o_mDOMString) =
-      match 
-        Minidom.node_get_attribute_ns node
-         (name#get_dom_string) (uri#get_dom_string)
-      with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_content =
-      match Minidom.node_get_content node with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_parent =
-      new o_mDOMNode
-       (option_to_exception (Minidom.node_get_parent node) Node_has_no_parent)
-    method get_prev_sibling =
-      new o_mDOMNode
-       (option_to_exception
-        (Minidom.node_get_prev_sibling node)
-        (Node_has_no_sibling "left")
-       )
-    method get_next_sibling =
-      new o_mDOMNode
-       (option_to_exception
-        (Minidom.node_get_next_sibling node)
-        (Node_has_no_sibling "right")
-       )
-    method get_first_child =
-      new o_mDOMNode
-       (option_to_exception
-        (Minidom.node_get_first_child node)
-        (Node_has_no_children)
-       )
-    method get_first_attribute =
-      new o_mDOMAttr
-       (option_to_exception
-         (Minidom.node_get_first_attribute node)
-         (Node_has_no_attributes)
-       )
-    method is_first = Minidom.node_is_first node
-    method is_last = Minidom.node_is_last node
-
-    method get_children =
-      List.map (function x -> new o_mDOMNode x) (Minidom.node_get_children node)
-    method get_attributes = List.map
-      (function x -> new o_mDOMAttr x) (Minidom.node_get_attributes node)
-  end
-and o_mDOMAttr (attr : Minidom.mDOMAttr) =
-  object
-    method get_dom_attr = attr
-
-    method get_name =
-      match Minidom.attr_get_name attr with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_ns_uri =
-      match Minidom.attr_get_ns_uri attr with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_value =
-      match Minidom.attr_get_value attr with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_prev_sibling =
-      new o_mDOMAttr
-        (option_to_exception
-         (Minidom.attr_get_prev_sibling attr)
-         (Attribute_has_no_sibling "left")
-       )
-    method get_next_sibling =
-      new o_mDOMAttr
-        (option_to_exception
-         (Minidom.attr_get_next_sibling attr)
-         (Attribute_has_no_sibling "right")
-       )
-    method get_parent =
-      new o_mDOMNode
-        (option_to_exception
-         (Minidom.attr_get_parent attr) Attribute_has_no_parent
-       )
-  end
-;;
-    
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.mli b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/ominidom.mli
deleted file mode 100644 (file)
index 2432954..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-exception Node_has_no_parent
-exception Node_has_no_sibling of string
-exception Node_has_no_children
-exception Node_has_no_attributes
-exception Attribute_has_no_sibling of string
-exception Attribute_has_no_parent
-exception Undefined_entity
-
-class o_mDOMString : Minidom.mDOMString ->
-  object
-    method get_dom_string : Minidom.mDOMString
-    method get_string : string
-  end
-
-val o_mDOMString_of_string : string -> o_mDOMString
-
-class o_mDOMEntity : Minidom.mDOMEntity ->
-  object
-    method get_content : o_mDOMString
-    method get_dom_entity : Minidom.mDOMEntity
-  end
-
-class o_mDOMDoc : Minidom.mDOMDoc ->
-  object
-    method add_entity : o_mDOMString -> o_mDOMString -> o_mDOMEntity
-    method get_dom_doc : Minidom.mDOMDoc
-    method get_entity : o_mDOMString -> o_mDOMEntity
-    method get_predefined_entity : o_mDOMString -> o_mDOMEntity
-    method get_root_node : o_mDOMNode
-  end
-and o_mDOMNode : Minidom.mDOMNode ->
-  object
-    method get_attribute : o_mDOMString -> o_mDOMString option
-    method get_attribute_ns :
-      o_mDOMString -> o_mDOMString -> o_mDOMString option
-    method get_attributes : o_mDOMAttr list
-    method get_children : o_mDOMNode list
-    method get_content : o_mDOMString option
-    method get_dom_node : Minidom.mDOMNode
-    method get_first_attribute : o_mDOMAttr
-    method get_first_child : o_mDOMNode
-    method get_name : o_mDOMString option
-    method get_next_sibling : o_mDOMNode
-    method get_ns_uri : o_mDOMString option
-    method get_parent : o_mDOMNode
-    method get_prev_sibling : o_mDOMNode
-    method get_type : int
-    method is_blank : bool
-    method is_element : bool
-    method is_entity_ref : bool
-    method is_first : bool
-    method is_last : bool
-    method is_text : bool
-  end
-and o_mDOMAttr : Minidom.mDOMAttr ->
-  object
-    method get_dom_attr : Minidom.mDOMAttr
-    method get_name : o_mDOMString option
-    method get_next_sibling : o_mDOMAttr
-    method get_ns_uri : o_mDOMString option
-    method get_parent : o_mDOMNode
-    method get_prev_sibling : o_mDOMAttr
-    method get_value : o_mDOMString option
-  end
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.ml
deleted file mode 100644 (file)
index 3c7a092..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-
-let doc = Minidom.doc_load "test.xml"
-
-let root = Minidom.doc_get_root_node doc
-
-let check_attribute_ns attr =
-  Printf.printf "\n\n";
-  let ns_uri = Minidom.attr_get_ns_uri attr
-  and attr_name = Minidom.attr_get_name attr
-  and attr_value = Minidom.attr_get_value attr
-  and parent = Minidom.attr_get_parent attr
-  in
-  match parent,ns_uri,attr_name,attr_value with
-    Some parent_node,Some uri,Some attribute_name,Some attribute_value ->
-      let attr_value = Minidom.node_get_attribute_ns parent_node attribute_name uri
-      in begin
-        match attr_value with
-          Some attr1 ->
-           Printf.printf "found the attribute with ns %s (was %s)\n"
-              (Minidom.string_of_mDOMString attr1) (Minidom.string_of_mDOMString attribute_value)
-        | None ->
-           Printf.printf "attribute not found (uri was %s)!!!!\n" (Minidom.string_of_mDOMString uri)
-      end
-  | _ ->
-      Printf.printf "parent_node == NULL || uri == NULL || attribute_name == NULL || attribute_value == NULL\n"
-;;
-    
-let print_attribute attr =
-  check_attribute_ns attr;
-  let ns_uri = Minidom.attr_get_ns_uri attr
-  in
-  begin
-    match ns_uri with
-      Some uri -> Printf.printf " %s:" (Minidom.string_of_mDOMString uri);
-    | None -> ()
-  end;
-  match ((Minidom.attr_get_name attr), (Minidom.attr_get_value attr)) with
-    (Some attr_name, Some attr_value) ->
-      Printf.printf " %s=\"%s\"" (Minidom.string_of_mDOMString attr_name) (Minidom.string_of_mDOMString attr_value) 
-  | (Some attr_name, _) ->
-      Printf.printf " ??? attribute %s has no value !!!" (Minidom.string_of_mDOMString attr_name)
-  | (_,_) ->
-      Printf.printf " ??? very strange attribute !!!"
-;;
-
-let rec print_node n node =
-  if Minidom.node_is_blank node then ()
-  else if Minidom.node_is_element node then begin
-    match Minidom.node_get_name node with
-      Some node_name -> 
-        begin
-          let children = Minidom.node_get_children node
-          and attributes = Minidom.node_get_attributes node
-          and ns_uri = Minidom.node_get_ns_uri node
-          and is_first,is_last = (Minidom.node_is_first node), (Minidom.node_is_last node)
-          in
-          for i = 1 to n do print_char ' ' done;
-          Printf.printf "<";
-          begin
-            match ns_uri with
-              Some uri -> Printf.printf "%s:" (Minidom.string_of_mDOMString uri)
-            | None     -> ()
-          end;
-          Printf.printf "%s" (Minidom.string_of_mDOMString node_name);
-          List.iter print_attribute attributes;
-          Printf.printf ">\n";
-          List.iter (print_node (n + 2)) children;
-          for i = 1 to n do print_char ' ' done;
-          Printf.printf "</%s>\n" (Minidom.string_of_mDOMString node_name)
-        end
-    | None -> Printf.printf "??? this node has no name !!!\n"
-  end else if Minidom.node_is_text node then begin
-    match Minidom.node_get_content node with
-      Some node_content ->
-        for i = 1 to n do print_char ' ' done;
-        Printf.printf "%s\n" (Minidom.string_of_mDOMString node_content)
-    | None -> Printf.printf "??? this node has no content !!!\n"
-  end else begin
-    Printf.printf "don't know how to manage a node with type %d\n" (Minidom.node_get_type node)
-  end
-;;
-  
-print_node 0 root;;
-
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.xml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/minidom/test.xml
deleted file mode 100644 (file)
index 83d2eef..0000000
+++ /dev/null
@@ -1,505 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<?cocoon-format type="text/xhtml"?>
-<m:math xmlns:helm="http://www.cs.unibo.it/helm" xmlns:m="http://www.w3.org/1998/Math/MathML">
-    <m:mtable helm:xref="i0" columnalign="left" equalrows="false" align="baseline 1">
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mtext>DEFINITION and_ind() OF TYPE</m:mtext>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mphantom>
-                        <m:mtext>__</m:mtext>
-                    </m:mphantom>
-                    <m:semantics xmlns:xlink="http://www.w3.org/1999/xlink">
-                        <m:mrow helm:xref="i22">
-                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo stretchy="false">(</m:mo>
-                                            <m:mrow helm:xref="i23">
-                                                <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mo color="Blue">&#928;</m:mo>
-                                                            <m:mi>A</m:mi>
-                                                            <m:mo>:</m:mo>
-                                                            <m:mrow helm:xref="i24">
-                                                                <m:mo>Prop</m:mo>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mrow>
-                                                                <m:mo>.</m:mo>
-                                                                <m:mrow helm:xref="i25">
-                                                                    <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mo color="Blue">&#928;</m:mo>
-                                                                                <m:mi>B</m:mi>
-                                                                                <m:mo>:</m:mo>
-                                                                                <m:mrow helm:xref="i26">
-                                                                                    <m:mo>Prop</m:mo>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mrow>
-                                                                                    <m:mo>.</m:mo>
-                                                                                    <m:mrow helm:xref="i27">
-                                                                                        <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mo color="Blue">&#928;</m:mo>
-                                                                                                    <m:mi>P</m:mi>
-                                                                                                    <m:mo>:</m:mo>
-                                                                                                    <m:mrow helm:xref="i28">
-                                                                                                        <m:mo>Prop</m:mo>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mrow>
-                                                                                                        <m:mo>.</m:mo>
-                                                                                                        <m:mrow helm:xref="i29">
-                                                                                                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mo color="Blue">&#928;</m:mo>
-                                                                                                                        <m:mi>f</m:mi>
-                                                                                                                        <m:mo>:</m:mo>
-                                                                                                                        <m:mrow helm:xref="i30">
-                                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                                            <m:mi helm:xref="i31">A</m:mi>
-                                                                                                                            <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                                            <m:mrow helm:xref="i32">
-                                                                                                                                <m:mo stretchy="false">(</m:mo>
-                                                                                                                                <m:mi helm:xref="i33">B</m:mi>
-                                                                                                                                <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                                                <m:mi helm:xref="i34">P</m:mi>
-                                                                                                                                <m:mo stretchy="false">)</m:mo>
-                                                                                                                            </m:mrow>
-                                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mrow>
-                                                                                                                            <m:mo>.</m:mo>
-                                                                                                                            <m:mrow helm:xref="i35">
-                                                                                                                                <m:mo color="Blue">&#928;</m:mo>
-                                                                                                                                <m:mi>a</m:mi>
-                                                                                                                                <m:mo>:</m:mo>
-                                                                                                                                <m:mrow helm:xref="i36">
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi xlink:href="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i37">and</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi helm:xref="i38">A</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi helm:xref="i39">B</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mo>.</m:mo>
-                                                                                                                                <m:mi helm:xref="i40">P</m:mi>
-                                                                                                                            </m:mrow>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                            </m:mtable>
-                                                                                                        </m:mrow>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                        </m:mtable>
-                                                                                    </m:mrow>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                    </m:mtable>
-                                                                </m:mrow>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                </m:mtable>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo color="#b03060">:&gt;</m:mo>
-                                            <m:mrow helm:xref="i41">
-                                                <m:mo>Prop</m:mo>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo stretchy="false">)</m:mo>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                            </m:mtable>
-                        </m:mrow>
-                        <m:annotation-xml encoding="MathML">
-                            <m:apply helm:xref="i22">
-                                <m:csymbol>cast</m:csymbol>
-                                <m:apply helm:xref="i23">
-                                    <m:csymbol>prod</m:csymbol>
-                                    <m:bvar>
-                                        <m:ci>A</m:ci>
-                                        <m:type>
-                                            <m:apply helm:xref="i24">
-                                                <m:csymbol>Prop</m:csymbol>
-                                            </m:apply>
-                                        </m:type>
-                                    </m:bvar>
-                                    <m:apply helm:xref="i25">
-                                        <m:csymbol>prod</m:csymbol>
-                                        <m:bvar>
-                                            <m:ci>B</m:ci>
-                                            <m:type>
-                                                <m:apply helm:xref="i26">
-                                                    <m:csymbol>Prop</m:csymbol>
-                                                </m:apply>
-                                            </m:type>
-                                        </m:bvar>
-                                        <m:apply helm:xref="i27">
-                                            <m:csymbol>prod</m:csymbol>
-                                            <m:bvar>
-                                                <m:ci>P</m:ci>
-                                                <m:type>
-                                                    <m:apply helm:xref="i28">
-                                                        <m:csymbol>Prop</m:csymbol>
-                                                    </m:apply>
-                                                </m:type>
-                                            </m:bvar>
-                                            <m:apply helm:xref="i29">
-                                                <m:csymbol>prod</m:csymbol>
-                                                <m:bvar>
-                                                    <m:ci>f</m:ci>
-                                                    <m:type>
-                                                        <m:apply helm:xref="i30">
-                                                            <m:csymbol>arrow</m:csymbol>
-                                                            <m:ci helm:xref="i31">A</m:ci>
-                                                            <m:apply helm:xref="i32">
-                                                                <m:csymbol>arrow</m:csymbol>
-                                                                <m:ci helm:xref="i33">B</m:ci>
-                                                                <m:ci helm:xref="i34">P</m:ci>
-                                                            </m:apply>
-                                                        </m:apply>
-                                                    </m:type>
-                                                </m:bvar>
-                                                <m:apply helm:xref="i35">
-                                                    <m:csymbol>prod</m:csymbol>
-                                                    <m:bvar>
-                                                        <m:ci>a</m:ci>
-                                                        <m:type>
-                                                            <m:apply helm:xref="i36">
-                                                                <m:csymbol>app</m:csymbol>
-                                                                <m:ci definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i37">and</m:ci>
-                                                                <m:ci helm:xref="i38">A</m:ci>
-                                                                <m:ci helm:xref="i39">B</m:ci>
-                                                            </m:apply>
-                                                        </m:type>
-                                                    </m:bvar>
-                                                    <m:ci helm:xref="i40">P</m:ci>
-                                                </m:apply>
-                                            </m:apply>
-                                        </m:apply>
-                                    </m:apply>
-                                </m:apply>
-                                <m:apply helm:xref="i41">
-                                    <m:csymbol>Prop</m:csymbol>
-                                </m:apply>
-                            </m:apply>
-                        </m:annotation-xml>
-                    </m:semantics>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mtext>AS</m:mtext>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mphantom>
-                        <m:mtext>__</m:mtext>
-                    </m:mphantom>
-                    <m:semantics xmlns:xlink="http://www.w3.org/1999/xlink">
-                        <m:mrow helm:xref="i1">
-                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mo color="Red">&#955;</m:mo>
-                                        <m:mi>A</m:mi>
-                                        <m:mo>:</m:mo>
-                                        <m:mrow helm:xref="i2">
-                                            <m:mo>Prop</m:mo>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo>.</m:mo>
-                                            <m:mrow helm:xref="i3">
-                                                <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mo color="Red">&#955;</m:mo>
-                                                            <m:mi>B</m:mi>
-                                                            <m:mo>:</m:mo>
-                                                            <m:mrow helm:xref="i4">
-                                                                <m:mo>Prop</m:mo>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mrow>
-                                                                <m:mo>.</m:mo>
-                                                                <m:mrow helm:xref="i5">
-                                                                    <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mo color="Red">&#955;</m:mo>
-                                                                                <m:mi>P</m:mi>
-                                                                                <m:mo>:</m:mo>
-                                                                                <m:mrow helm:xref="i6">
-                                                                                    <m:mo>Prop</m:mo>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mrow>
-                                                                                    <m:mo>.</m:mo>
-                                                                                    <m:mrow helm:xref="i7">
-                                                                                        <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mo color="Red">&#955;</m:mo>
-                                                                                                    <m:mi>f</m:mi>
-                                                                                                    <m:mo>:</m:mo>
-                                                                                                    <m:mrow helm:xref="i8">
-                                                                                                        <m:mo stretchy="false">(</m:mo>
-                                                                                                        <m:mi helm:xref="i9">A</m:mi>
-                                                                                                        <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                        <m:mrow helm:xref="i10">
-                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                            <m:mi helm:xref="i11">B</m:mi>
-                                                                                                            <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                            <m:mi helm:xref="i12">P</m:mi>
-                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                        </m:mrow>
-                                                                                                        <m:mo stretchy="false">)</m:mo>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mrow>
-                                                                                                        <m:mo>.</m:mo>
-                                                                                                        <m:mrow helm:xref="i13">
-                                                                                                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mo color="Red">&#955;</m:mo>
-                                                                                                                        <m:mi>a</m:mi>
-                                                                                                                        <m:mo>:</m:mo>
-                                                                                                                        <m:mrow helm:xref="i14">
-                                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                                            <m:mi xlink:href="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i15">and</m:mi>
-                                                                                                                            <m:mphantom>
-                                                                                                                                <m:mtext>_</m:mtext>
-                                                                                                                            </m:mphantom>
-                                                                                                                            <m:mi helm:xref="i16">A</m:mi>
-                                                                                                                            <m:mphantom>
-                                                                                                                                <m:mtext>_</m:mtext>
-                                                                                                                            </m:mphantom>
-                                                                                                                            <m:mi helm:xref="i17">B</m:mi>
-                                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mrow>
-                                                                                                                            <m:mo>.</m:mo>
-                                                                                                                            <m:mrow helm:xref="i18">
-                                                                                                                                <m:mo>&lt;</m:mo>
-                                                                                                                                <m:mi helm:xref="i19">P</m:mi>
-                                                                                                                                <m:mo>&gt;</m:mo>
-                                                                                                                                <m:mo>CASES</m:mo>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mi helm:xref="i20">a</m:mi>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mo>OF</m:mo>
-                                                                                                                                <m:mrow>
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi>conj</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$1</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$2</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mo color="Green">&#8658;</m:mo>
-                                                                                                                                <m:mrow>
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi helm:xref="i21">f</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$1</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$2</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mo>END</m:mo>
-                                                                                                                            </m:mrow>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                            </m:mtable>
-                                                                                                        </m:mrow>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                        </m:mtable>
-                                                                                    </m:mrow>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                    </m:mtable>
-                                                                </m:mrow>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                </m:mtable>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                            </m:mtable>
-                        </m:mrow>
-                        <m:annotation-xml encoding="MathML">
-                            <m:lambda helm:xref="i1">
-                                <m:bvar>
-                                    <m:ci>A</m:ci>
-                                    <m:type>
-                                        <m:apply helm:xref="i2">
-                                            <m:csymbol>Prop</m:csymbol>
-                                        </m:apply>
-                                    </m:type>
-                                </m:bvar>
-                                <m:lambda helm:xref="i3">
-                                    <m:bvar>
-                                        <m:ci>B</m:ci>
-                                        <m:type>
-                                            <m:apply helm:xref="i4">
-                                                <m:csymbol>Prop</m:csymbol>
-                                            </m:apply>
-                                        </m:type>
-                                    </m:bvar>
-                                    <m:lambda helm:xref="i5">
-                                        <m:bvar>
-                                            <m:ci>P</m:ci>
-                                            <m:type>
-                                                <m:apply helm:xref="i6">
-                                                    <m:csymbol>Prop</m:csymbol>
-                                                </m:apply>
-                                            </m:type>
-                                        </m:bvar>
-                                        <m:lambda helm:xref="i7">
-                                            <m:bvar>
-                                                <m:ci>f</m:ci>
-                                                <m:type>
-                                                    <m:apply helm:xref="i8">
-                                                        <m:csymbol>arrow</m:csymbol>
-                                                        <m:ci helm:xref="i9">A</m:ci>
-                                                        <m:apply helm:xref="i10">
-                                                            <m:csymbol>arrow</m:csymbol>
-                                                            <m:ci helm:xref="i11">B</m:ci>
-                                                            <m:ci helm:xref="i12">P</m:ci>
-                                                        </m:apply>
-                                                    </m:apply>
-                                                </m:type>
-                                            </m:bvar>
-                                            <m:lambda helm:xref="i13">
-                                                <m:bvar>
-                                                    <m:ci>a</m:ci>
-                                                    <m:type>
-                                                        <m:apply helm:xref="i14">
-                                                            <m:csymbol>app</m:csymbol>
-                                                            <m:ci definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i15">and</m:ci>
-                                                            <m:ci helm:xref="i16">A</m:ci>
-                                                            <m:ci helm:xref="i17">B</m:ci>
-                                                        </m:apply>
-                                                    </m:type>
-                                                </m:bvar>
-                                                <m:apply helm:xref="i18">
-                                                    <m:csymbol>mutcase</m:csymbol>
-                                                    <m:ci helm:xref="i19">P</m:ci>
-                                                    <m:ci helm:xref="i20">a</m:ci>
-                                                    <m:apply>
-                                                        <m:csymbol>app</m:csymbol>
-                                                        <m:ci>conj</m:ci>
-                                                        <m:ci>$1</m:ci>
-                                                        <m:ci>$2</m:ci>
-                                                    </m:apply>
-                                                    <m:apply>
-                                                        <m:csymbol>app</m:csymbol>
-                                                        <m:ci helm:xref="i21">f</m:ci>
-                                                        <m:ci>$1</m:ci>
-                                                        <m:ci>$2</m:ci>
-                                                    </m:apply>
-                                                </m:apply>
-                                            </m:lambda>
-                                        </m:lambda>
-                                    </m:lambda>
-                                </m:lambda>
-                            </m:lambda>
-                        </m:annotation-xml>
-                    </m:semantics>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-    </m:mtable>
-</m:math>
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/ml_gtk_mathview.c b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/ml_gtk_mathview.c
deleted file mode 100644 (file)
index 3c86f00..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-#include <assert.h>
-#include <string.h>
-#include <assert.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include <gtkmathview/gtkmathview.h>
-#include <ml_gtk.h>
-
-#include <wrappers.h>
-#include <ml_glib.h>
-#include <ml_gdk.h>
-#include <ml_gtk.h>
-#include <gtk_tags.h>
-
-#include <minidom.h>
-#include "minidom/ml_minidom.h"
-
-/* <CSC/>: Next row should be put in a .h of lablgtk. */
-#define GtkAdjustment_val(val) check_cast(GTK_ADJUSTMENT,val)
-
-#define GtkMathView_val(val) check_cast(GTK_MATH_VIEW,val)
-
-#define FontManagerId_val(val) Int_val(val)
-#define Val_FontManagerId(val) Val_int(val)
-
-FontManagerId
-font_manager_id_of_value(value v)
-{
-  if (v == hash_variant("font_manager_gtk")) return FONT_MANAGER_GTK;
-  else if (v == hash_variant("font_manager_t1")) return FONT_MANAGER_T1;
-  else assert(0);
-}
-
-value
-value_of_font_manager_id(FontManagerId id)
-{
-  switch (id) {
-  case FONT_MANAGER_GTK:
-    return hash_variant("font_manager_gtk");
-  case FONT_MANAGER_T1:
-    return hash_variant("font_manager_t1");
-  default:
-    assert(0);
-    break;
-  }
-}
-
-ML_2 (gtk_math_view_new,GtkAdjustment_val, GtkAdjustment_val, Val_GtkWidget_sink)
-ML_2 (gtk_math_view_load, GtkMathView_val, String_val, Val_bool)
-ML_1 (gtk_math_view_unload, GtkMathView_val, Unit)
-/*ML_1 (gtk_math_view_dump, GtkMathView_val, Unit)*/
-ML_1 (gtk_math_view_get_selection, GtkMathView_val, Val_mDOMNodeRef)
-ML_2 (gtk_math_view_set_selection, GtkMathView_val, mDOMNodeRef_val, Unit)
-ML_1 (gtk_math_view_get_width, GtkMathView_val, Val_int)
-ML_1 (gtk_math_view_get_height, GtkMathView_val, Val_int)
-ML_3 (gtk_math_view_set_top, GtkMathView_val, Int_val, Int_val, Unit)
-ML_3 (gtk_math_view_set_adjustments, GtkMathView_val, GtkAdjustment_val, GtkAdjustment_val, Unit)
-ML_1 (gtk_math_view_get_hadjustment, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_vadjustment, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_buffer, GtkMathView_val, Val_GdkPixmap)
-ML_1 (gtk_math_view_get_frame, GtkMathView_val, Val_GtkWidget)
-ML_2 (gtk_math_view_set_font_size, GtkMathView_val, Int_val, Unit)
-ML_1 (gtk_math_view_get_font_size, GtkMathView_val, Val_int)
-ML_2 (gtk_math_view_set_anti_aliasing, GtkMathView_val, Bool_val, Unit)
-ML_1 (gtk_math_view_get_anti_aliasing, GtkMathView_val, Val_bool)
-ML_2 (gtk_math_view_set_kerning, GtkMathView_val, Bool_val, Unit)
-ML_1 (gtk_math_view_get_kerning, GtkMathView_val, Val_bool)
-ML_2 (gtk_math_view_set_log_verbosity, GtkMathView_val, Int_val, Unit)
-ML_1 (gtk_math_view_get_log_verbosity, GtkMathView_val, Val_int)
-ML_2 (gtk_math_view_set_font_manager_type, GtkMathView_val, font_manager_id_of_value, Unit)
-ML_1 (gtk_math_view_get_font_manager_type, GtkMathView_val, value_of_font_manager_id)
-
-value
-ml_gtk_math_view_export_to_postscript_native(value arg1,
-               value w, value h, value x0, value y0, value disable_colors, value arg2)
-{
-   CAMLparam5(arg1,w,h,x0,y0);
-   CAMLxparam2(disable_colors, arg2);
-
-   char *filename;
-   FILE *fd;
-   int res;
-   filename = String_val (arg2);
-   if ((fd = fopen(filename, "w"))) {
-      gtk_math_view_export_to_postscript(GtkMathView_val (arg1),
-                     Int_val(w), Int_val(h), Int_val(x0), Int_val(y0), Bool_val(disable_colors), fd);
-      fclose (fd);
-      res = 1;
-   } else {
-      fprintf(stderr, "Error opening file %s for writing\n", filename);
-      res = 0;
-   }
-   CAMLreturn (Val_bool(res));
-}
-
-value ml_gtk_math_view_export_to_postscript_bytecode (value* arg, int argn)
-{
-   return ml_gtk_math_view_export_to_postscript_native(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6]);
-}
-
-value ml_gtk_math_view_get_top (value arg1)
-{
-   CAMLparam1(arg1);
-   CAMLlocal1 (result);
-   int x, y;
-   gtk_math_view_get_top(GtkMathView_val (arg1), &x, &y);
-   result = alloc(2, 0);
-   Store_field(result, 0, Val_int(x));
-   Store_field(result, 0, Val_int(y));
-   CAMLreturn (result);
-}
-
-
-value ml_gtk_math_view_mDOMNode_of_bodex_option (value arg1)
-{
-   CAMLparam1(arg1);
-
-   mDOMNodeRef nr;
-   CAMLlocal1 (tmp);
-   CAMLlocal1 (optval);
-   CAMLlocal1 (res);
-
-   if (arg1==Val_int(0)) {
-      assert(0);
-   } else {
-      tmp = Field(arg1, 0);
-      nr = (mDOMNodeRef) Field(tmp, 1);
-   }
-   optval = Val_mDOMNodeRef(nr);
-   if (optval==Val_int(0)) {
-      assert(0);
-   } else {
-      res = Field(optval, 0);
-   }
-
-  CAMLreturn(res);
-}
-
-value ml_gtk_math_view_mDOMNode_option_of_bodex_option (value arg1)
-{
-   CAMLparam1(arg1);
-
-   mDOMNodeRef nr;
-   CAMLlocal1 (tmp);
-
-   if (arg1==Val_int(0)) {
-      nr=NULL;
-   } else {
-      tmp = Field(arg1, 0);
-      nr = (mDOMNodeRef) Field(tmp, 1);
-   }
-
-  CAMLreturn(Val_mDOMNodeRef(nr));
-}
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/.cvsignore b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/.cvsignore
deleted file mode 100644 (file)
index 1968614..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmo *.cmi *.cmx t1lib.log test test.opt test.ps test.o
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/Makefile b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/Makefile
deleted file mode 100644 (file)
index d631d23..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-LABLGTK_DIR = /usr/lib/ocaml/lablgtk
-LABLGTK_MATHVIEW_DIR = ..
-MINIDOM_DIR = ../minidom
-OCAMLC = ocamlc -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) \
- -I $(MINIDOM_DIR) -I mlmathview
-OCAMLOPT = ocamlopt -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) \
- -I $(MINIDOM_DIR) -I mlmathview
-
-all: test
-opt: test.opt
-
-test: test.cmo
-       $(OCAMLC) -custom -o test lablgtk.cma gtkInit.cmo \
-                  $(MINIDOM_DIR)/minidom.cmo \
-                  $(MINIDOM_DIR)/ominidom.cmo \
-                  $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cma \
-                  -cclib "$(MINIDOM_DIR)/ml_minidom.o" \
-                  test.cmo \
-                  -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-                  -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
-                  -L/usr/local/lib/gtkmathview -lgtkmathview \
-                  $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o"
-
-test.opt: test.cmx
-       $(OCAMLOPT) -o test.opt lablgtk.cmxa gtkInit.cmx \
-                  $(MINIDOM_DIR)/minidom.cmx \
-                  $(MINIDOM_DIR)/ominidom.cmx \
-                  $(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cmxa \
-                  -cclib "$(MINIDOM_DIR)/ml_minidom.o" \
-                  test.cmx \
-                  -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-                  -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
-                  -L/usr/local/lib/gtkmathview -lgtkmathview \
-                  $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o"
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo:
-       $(OCAMLC) -c $<
-.mli.cmi:
-       $(OCAMLC) -c $<
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o test test.opt t1lib.log test.ps
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/t1.config b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/t1.config
deleted file mode 100644 (file)
index afb669e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-ENCODING=.
-AFM=/usr/share/texmf/fonts/afm/
-TYPE1=/usr/share/texmf/fonts/type1/bluesky/cm/:/usr/X11R6/lib/X11/fonts/Type1/:.
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.ml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.ml
deleted file mode 100644 (file)
index dd66d38..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-(******************************************************************************)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 25/09/2000                                 *)
-(*                                                                            *)
-(*     This is a simple test for the OCaml (LablGtk indeed) binding of the    *)
-(*                             MathView widget                                *)
-(******************************************************************************)
-
-(* Callbacks *)
-let jump (node : Ominidom.o_mDOMNode) =
- let module O = Ominidom in
-  print_string ("jump: " ^
-   (match node#get_attribute (O.o_mDOMString_of_string "href") with
-    | Some x -> x#get_string
-    | None   -> "NO HREF FOR THIS NODE"
-   ) ^ "\n");
-  flush stdout
-;;
-
-let selection_changed mathview (node : Ominidom.o_mDOMNode option) =
- let module O = Ominidom in
-  print_string ("selection_changed: " ^
-   (match node with
-       None -> "selection_changed on nothing"
-     | Some node ->
-       match node#get_name with
-       | Some x -> x#get_string
-       | None   -> "on element without name"
-   ) ^ "\n");
-  mathview#set_selection node;
-  flush stdout
-;;
-
-
-let clicked (node : Ominidom.o_mDOMNode) =
- let module O = Ominidom in
-  print_string ("clicked: " ^
-   (match node#get_name with
-    | Some x -> x#get_string
-    | None   -> "no name"
-   ) ^ "\n");
-  flush stdout
-;;
-
-
-let activate_t1 mathview () =
- mathview#set_font_manager_type `font_manager_t1;
- print_string "WIDGET SET WITH T1 FONTS\n" ;
- flush stdout
-;;
-
-let activate_gtk mathview () =
- mathview#set_font_manager_type `font_manager_gtk;
- print_string "WIDGET SET WITH GTK FONTS\n" ;
- flush stdout
-;;
-
-let get_font_manager_type mathview () =
- print_string "CURRENT FONT MANAGER TYPE: ";
- begin
-  match mathview#get_font_manager_type with
-  | `font_manager_t1 -> print_string "T1"
-  | `font_manager_gtk -> print_string "GTK"
- end;
- print_newline();
- flush stdout
-;;
-
-let load mathview () =
- mathview#load "test.xml" ;
- print_string "load: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let get_selection mathview () =
- let module O = Ominidom in
-  let selection =
-    match mathview#get_selection with
-    | Some node ->
-      begin
-        match node#get_name with
-       | Some name -> name#get_string
-       | None      -> "element with no name!"
-      end
-    | None      -> "no selection!"
-  in
-   print_string ("get_selection: " ^ selection ^ "\n") ;
-   flush stdout
-;;
-
-let set_selection mathview () =
- let module O = Ominidom in
-  begin
-    match mathview#get_selection with
-    | Some node -> 
-      begin
-        try 
-          let parent_node = node#get_parent in
-          mathview#set_selection (Some parent_node);
-          print_string "set selection: SEEMS TO WORK\n"
-       with
-         _ -> print_string "EXCEPTION: no parent\n"
-      end
-    | None ->
-      mathview#set_selection None;
-      print_string "no selection\n"
-  end ;
-  flush stdout
-;;
-
-let unload mathview () =
- mathview#unload ;
- print_string "unload: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let get_width mathview () =
- print_string ("get_width: " ^ string_of_int (mathview#get_width) ^ "\n") ;
- flush stdout
-;;
-
-let get_height mathview () =
- print_string ("get_height: " ^ string_of_int (mathview#get_height) ^ "\n") ;
- flush stdout
-;;
-
-let get_top mathview () =
- let (x,y) = mathview#get_top in
-  print_string ("get_top: ("^ string_of_int x ^ "," ^ string_of_int y ^ ")\n") ;
-  flush stdout
-;;
-
-let set_top mathview () =
- mathview#set_top 0 0;
- print_string "set_top: SEEM TO WORK\n" ;
- flush stdout
-;;
-
-let set_adjustments mathview () =
- let adj1 = GData.adjustment () in
- let adj2 = GData.adjustment () in
-  mathview#set_adjustments adj1 adj2 ;
-  adj1#set_value ((adj1#lower +. adj1#upper) /. 2.0) ;
-  adj2#set_value ((adj2#lower +. adj2#upper) /. 2.0) ;
-  print_string "set_adjustments: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_hadjustment mathview () =
- let adj = mathview#get_hadjustment in
-  adj#set_value ((adj#lower +. adj#upper) /. 2.0) ;
-  print_string "get_hadjustment: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_vadjustment mathview () =
- let adj = mathview#get_vadjustment in
-  adj#set_value ((adj#lower +. adj#upper) /. 2.0) ;
-  print_string "get_vadjustment: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_buffer mathview () =
- let buffer = mathview#get_buffer in
-  Gdk.Draw.rectangle buffer (Gdk.GC.create buffer) ~x:0 ~y:0
-   ~width:50 ~height:50 ~filled:true () ;
-  print_string "get_buffer: SEEMS TO WORK (hint: force the widget redrawing)\n";
-  flush stdout
-;;
-
-let get_frame mathview () =
- let frame = mathview#get_frame in
-  frame#set_shadow_type `NONE ;
-  print_string "get_frame: SEEMS TO WORK\n" ;
-  flush stdout
-;;
-
-let set_font_size mathview () =
- mathview#set_font_size 24 ;
- print_string "set_font_size: FONT IS NOW 24\n" ;
- flush stdout
-;;
-let get_font_size mathview () =
- print_string ("get_font_size: " ^ string_of_int (mathview#get_font_size) ^ "\n") ;
- flush stdout
-;;
-let set_anti_aliasing mathview () =
- mathview#set_anti_aliasing true ;
- print_string "set_anti_aliasing: ON\n" ;
- flush stdout
-;;
-let get_anti_aliasing mathview () =
- print_string ("get_anti_aliasing: " ^
-  (match mathview#get_anti_aliasing with true -> "ON" | false -> "OFF") ^
-  "\n") ;
- flush stdout
-;;
-let set_kerning mathview () =
- mathview#set_kerning true ;
- print_string "set_kerning: ON\n" ;
- flush stdout
-;;
-let get_kerning mathview () =
- print_string ("get_kerning: " ^
-  (match mathview#get_kerning with true -> "ON" | false -> "OFF") ^
-  "\n") ;
- flush stdout
-;;
-
-let set_log_verbosity mathview () =
- mathview#set_log_verbosity 3 ;
- print_string "set_log_verbosity: NOW IS 3\n" ;
- flush stdout
-;;
-let get_log_verbosity mathview () =
- print_string ("get_log_verbosity: " ^
-  string_of_int mathview#get_log_verbosity ^
-  "\n") ;
- flush stdout
-;;
-
-let export_to_postscript (mathview : GMathView.math_view) () =
- mathview#export_to_postscript ~filename:"test.ps" ();
- print_string "expor_to_postscript: SEEMS TO WORK (hint: look at test.ps)\n";
- flush stdout
-;;
-(* Widget creation *)
-let main_window = GWindow.window ~title:"GtkMathView test" () in
-let vbox = GPack.vbox ~packing:main_window#add () in
-let sw = GBin.scrolled_window ~width:50 ~height:50 ~packing:vbox#pack () in
-let mathview= GMathView.math_view ~packing:sw#add ~width:50 ~height:50 () in
-let table = GPack.table ~rows:6 ~columns:5 ~packing:vbox#pack () in
-let button_gtk=GButton.button ~label:"activate Gtk fonts" ~packing:(table#attach ~left:0 ~top:0) () in
-let button_load = GButton.button ~label:"load" ~packing:(table#attach ~left:1 ~top:0) () in
-let button_unload = GButton.button ~label:"unload" ~packing:(table#attach ~left:2 ~top:0) () in
-let button_get_selection = GButton.button ~label:"get_selection" ~packing:(table#attach ~left:3 ~top:0) () in
-let button_set_selection = GButton.button ~label:"set_selection" ~packing:(table#attach ~left:4 ~top:0) () in
-let button_get_width = GButton.button ~label:"get_width" ~packing:(table#attach ~left:0 ~top:1) () in
-let button_get_height = GButton.button ~label:"get_height" ~packing:(table#attach ~left:1 ~top:1) () in
-let button_get_top = GButton.button ~label:"get_top" ~packing:(table#attach ~left:2 ~top:1) () in
-let button_set_top = GButton.button ~label:"set_top" ~packing:(table#attach ~left:3 ~top:1) () in
-let button_set_adjustments = GButton.button ~label:"set_adjustments" ~packing:(table#attach ~left:4 ~top:1) () in
-let button_get_hadjustment = GButton.button ~label:"get_hadjustment" ~packing:(table#attach ~left:0 ~top:2) () in
-let button_get_vadjustment = GButton.button ~label:"get_vadjustment" ~packing:(table#attach ~left:1 ~top:2) () in
-let button_get_buffer = GButton.button ~label:"get_buffer" ~packing:(table#attach ~left:2 ~top:2) () in
-let button_get_frame = GButton.button ~label:"get_frame" ~packing:(table#attach ~left:3 ~top:2) () in
-let button_set_font_size = GButton.button ~label:"set_font_size" ~packing:(table#attach ~left:4 ~top:2) () in
-let button_get_font_size = GButton.button ~label:"get_font_size" ~packing:(table#attach ~left:0 ~top:3) () in
-let button_set_anti_aliasing = GButton.button ~label:"set_anti_aliasing" ~packing:(table#attach ~left:1 ~top:3) () in
-let button_get_anti_aliasing = GButton.button ~label:"get_anti_aliasing" ~packing:(table#attach ~left:2 ~top:3) () in
-let button_set_kerning = GButton.button ~label:"set_kerning" ~packing:(table#attach ~left:3 ~top:3) () in
-let button_get_kerning = GButton.button ~label:"get_kerning" ~packing:(table#attach ~left:4 ~top:3) () in
-let button_set_log_verbosity = GButton.button ~label:"set_log_verbosity" ~packing:(table#attach ~left:0 ~top:4) () in
-let button_get_log_verbosity = GButton.button ~label:"get_log_verbosity" ~packing:(table#attach ~left:1 ~top:4) () in
-let button_export_to_postscript = GButton.button ~label:"export_to_postscript" ~packing:(table#attach ~left:2 ~top:4) () in
-let button_t1 = GButton.button ~label:"activate T1 fonts" ~packing:(table#attach ~left:3 ~top:4) () in
-let button_get_font_manager_type = GButton.button ~label:"get_font_manager" ~packing:(table#attach ~left:4 ~top:4) () in
-(* Signals connection *)
-ignore(button_gtk#connect#clicked (activate_gtk mathview)) ;
-ignore(button_load#connect#clicked (load mathview)) ;
-ignore(button_unload#connect#clicked (unload mathview)) ;
-ignore(button_get_selection#connect#clicked (get_selection mathview)) ;
-ignore(button_set_selection#connect#clicked (set_selection mathview)) ;
-ignore(button_get_width#connect#clicked (get_width mathview)) ;
-ignore(button_get_height#connect#clicked (get_height mathview)) ;
-ignore(button_get_top#connect#clicked (get_top mathview)) ;
-ignore(button_set_top#connect#clicked (set_top mathview)) ;
-ignore(button_set_adjustments#connect#clicked (set_adjustments mathview)) ;
-ignore(button_get_hadjustment#connect#clicked (get_hadjustment mathview)) ;
-ignore(button_get_vadjustment#connect#clicked (get_vadjustment mathview)) ;
-ignore(button_get_buffer#connect#clicked (get_buffer mathview)) ;
-ignore(button_get_frame#connect#clicked (get_frame mathview)) ;
-ignore(button_set_font_size#connect#clicked (set_font_size mathview)) ;
-ignore(button_get_font_size#connect#clicked (get_font_size mathview)) ;
-ignore(button_set_anti_aliasing#connect#clicked (set_anti_aliasing mathview)) ;
-ignore(button_get_anti_aliasing#connect#clicked (get_anti_aliasing mathview)) ;
-ignore(button_set_kerning#connect#clicked (set_kerning mathview)) ;
-ignore(button_get_kerning#connect#clicked (get_kerning mathview)) ;
-ignore(button_set_log_verbosity#connect#clicked (set_log_verbosity mathview)) ;
-ignore(button_get_log_verbosity#connect#clicked (get_log_verbosity mathview)) ;
-ignore(button_export_to_postscript#connect#clicked (export_to_postscript mathview)) ;
-ignore(button_t1#connect#clicked (activate_t1 mathview)) ;
-ignore(button_get_font_manager_type#connect#clicked (get_font_manager_type mathview)) ;
-ignore(mathview#connect#jump jump) ;
-ignore(mathview#connect#clicked clicked) ;
-ignore(mathview#connect#selection_changed (selection_changed mathview)) ;
-(* Main Loop *)
-main_window#show () ;
-GMain.Main.main ()
-;;
diff --git a/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.xml b/helm/DEVEL/lablgtk_gtkmathview/lablgtk-20001129_gtkmathview-0.2.2/test/test.xml
deleted file mode 100644 (file)
index b0f8c15..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-<math display="block">
-  <mrow helm:xref="SELECTION OK">
-    <mo>&int;</mo>
-    <mo>&ApplyFunction;</mo>
-    <mfrac>
-      <mrow>
-        <mrow>
-          <mi>a</mi>
-         <mo>&InvisibleTimes;</mo>
-         <mi>x</mi>
-       </mrow>
-       <mo>+</mo>
-       <mi>b</mi>
-      </mrow>
-      <mrow>
-        <msup>
-         <mi>x</mi>
-         <mn>2</mn>
-       </msup>
-       <mo>+</mo>
-       <mrow>
-         <mi>p</mi>
-         <mo>&InvisibleTimes;</mo>
-         <mi>x</mi>
-       </mrow>
-       <mo>+</mo>
-       <mi>q</mi>
-      </mrow>
-    </mfrac>
-  </mrow>
-  <mo fontstyle="italic">d</mo>
-  <mi>x</mi>
-  <mo>=</mo>
-  <mrow>
-    <mrow>
-      <mfrac><mi>a</mi><mn>2</mn></mfrac>
-      <mo>&InvisibleTimes;</mo>
-      <mrow>
-        <mi>ln</mi>
-       <mo>&ApplyFunction;</mo>
-       <mrow>
-         <mo>(</mo>
-         <mrow>
-           <msup><mi>x</mi><mn>2</mn></msup>
-           <mo>+</mo>
-           <mrow>
-             <mi>p</mi>
-             <mo>&InvisibleTimes;</mo>
-             <mi>x</mi>
-           </mrow>
-           <mo>+</mo>
-           <mi>q</mi>
-         </mrow>
-         <mo>)</mo>
-       </mrow>
-      </mrow>
-    </mrow>
-    <mo>+</mo>
-    <mrow>
-      <mfrac>
-        <mrow>
-         <mrow>
-           <mn>2</mn>
-           <mo>&InvisibleTimes;</mo>
-           <mi>b</mi>
-         </mrow>
-         <mo>-</mo>
-         <mrow>
-           <mi>a</mi>
-           <mo>&InvisibleTimes;</mo>
-           <mi>p</mi>
-         </mrow>
-       </mrow>
-       <msqrt>
-         <mrow>
-           <mrow>
-             <mn>4</mn>
-             <mo>&InvisibleTimes;</mo>
-             <mi>q</mi>
-           </mrow>
-           <mo>-</mo>
-           <msup>
-             <mi>p</mi>
-             <mn>2</mn>
-           </msup>
-         </mrow>
-       </msqrt>
-      </mfrac>
-      <mo>&InvisibleTimes;</mo>
-      <mrow>
-        <mi xlink:href="JUMPS WORK">arctg</mi>
-       <mo>&ApplyFunction;</mo>
-       <mfrac>
-         <mrow>
-           <mrow>
-             <mn>2</mn>
-             <mo>&InvisibleTimes;</mo>
-             <mi>x</mi>
-           </mrow>
-           <mo>+</mo>
-           <mi>p</mi>
-         </mrow>
-         <msqrt>
-           <mrow>
-             <mrow>
-               <mn>4</mn>
-               <mo>&InvisibleTimes;</mo>
-               <mi>q</mi>
-             </mrow>
-             <mo>-</mo>
-             <msup>
-               <mi>p</mi>
-               <mn>2</mn>
-             </msup>
-           </mrow>
-         </msqrt>
-       </mfrac>
-      </mrow>
-    </mrow>
-    <mo>+</mo>
-    <mi>c</mi>
-  </mrow>  
-</math>
diff --git a/helm/DEVEL/lablgtkmathview/.cvsignore b/helm/DEVEL/lablgtkmathview/.cvsignore
deleted file mode 100644 (file)
index b684a8b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-*.cmi *.cmo *.cmx *.cma *.cmxa config.make config.cache config.log configure
-Makefile
-config.status
-META
-lablgtkmathview.spec
diff --git a/helm/DEVEL/lablgtkmathview/.depend b/helm/DEVEL/lablgtkmathview/.depend
deleted file mode 100644 (file)
index 9d1c6ed..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-gMathView.cmo: gtkMathView.cmo gtk_mathview.cmo gMathView.cmi 
-gMathView.cmx: gtkMathView.cmx gtk_mathview.cmx gMathView.cmi 
-gMathViewAux.cmo: gMathView.cmi gtkMathView.cmo gtk_mathview.cmo \
-    gMathViewAux.cmi 
-gMathViewAux.cmx: gMathView.cmx gtkMathView.cmx gtk_mathview.cmx \
-    gMathViewAux.cmi 
-gtkMathView.cmo: gtk_mathview.cmo 
-gtkMathView.cmx: gtk_mathview.cmx 
-gMathView.cmi: gtk_mathview.cmo 
-gMathViewAux.cmi: gMathView.cmi 
diff --git a/helm/DEVEL/lablgtkmathview/AUTHORS b/helm/DEVEL/lablgtkmathview/AUTHORS
deleted file mode 100644 (file)
index 3598094..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Luca Padovani <luca.padovani@cs.unibo.it>
-Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
diff --git a/helm/DEVEL/lablgtkmathview/COPYING b/helm/DEVEL/lablgtkmathview/COPYING
deleted file mode 100644 (file)
index d60c31a..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   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.
-\f
-                   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.)
-\f
-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.
-\f
-  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.
-\f
-  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
-\f
-           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
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <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 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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/helm/DEVEL/lablgtkmathview/ChangeLog b/helm/DEVEL/lablgtkmathview/ChangeLog
deleted file mode 100644 (file)
index 19ce760..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-* 0.4.1
- - Upgraded to GtkMathView 0.4.[0,1]
-* 0.3.0
- - Upgraded to GtkMathView 0.3.0
- - Now based on the gmetadom (alias gdome2) binding to GDOMe Level 2
diff --git a/helm/DEVEL/lablgtkmathview/LICENSE b/helm/DEVEL/lablgtkmathview/LICENSE
deleted file mode 100644 (file)
index 691e4e0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-(* Copyright (C) 2000-2003, Luca Padovani <luca.padovani@cs.unibo.it>,
- *                          Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>.
- *
- * This file is part of lablgtkmathview, the Ocaml binding
- * for the GtkMathView widget.
- * 
- * lablgtkmathview 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.
- *
- * lablgtkmathview 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 lablgtkmathview; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
diff --git a/helm/DEVEL/lablgtkmathview/META.in b/helm/DEVEL/lablgtkmathview/META.in
deleted file mode 100644 (file)
index 84d671a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="gdome2 lablgtk"
-version="@VERSION@"
-archive(byte)="lablgtkmathview.cma"
-archive(native)="lablgtkmathview.cmxa"
-linkopts=""
diff --git a/helm/DEVEL/lablgtkmathview/Makefile.in b/helm/DEVEL/lablgtkmathview/Makefile.in
deleted file mode 100644 (file)
index 8607be8..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-PACKAGE = @PACKAGE@
-VERSION = @VERSION@
-INCLUDEDIR = @OCAML_INCLUDE_DIR@
-PREFIX = 
-OBJECTS_C = ml_gtk_mathview.o
-OBJECTS =  gtk_mathview.cmo gtkMathView.cmo gMathView.cmo gMathViewAux.cmo
-OBJECTS_OPT = gtkMathView.cmx gtk_mathview.cmx gMathView.cmx gMathViewAux.cmx
-INST = \
-       META gMathView.mli gMathView.cmi gtkMathView.cmi gtk_mathview.cmi       \
-       gMathViewAux.cmi gMathViewAux.mli
-DIST_FILES = \
-  Makefile.in configure.in gMathView.ml gMathView.mli  \
-  gMathViewAux.ml gMathViewAux.mli gtkMathView.ml \
-  gtk_mathview.ml ml_gtk_mathview.c META.in .depend debian/ test/ \
-  configure lablgtkmathview.spec lablgtkmathview.spec.in
-DIST_DIR = $(PACKAGE)-$(VERSION)
-DOC_FILES = AUTHORS COPYING ChangeLog NEWS README LICENSE
-REQUIRES = gdome2 lablgtk
-PREDICATES =
-SHARED_LIBS = @GDOME_LIBS@ @GTKMATHVIEW_LIBS@ -lmlgdome
-
-OCAMLFIND = ocamlfind
-OCAMLC = $(OCAMLFIND) ocamlc
-OCAMLOPT = $(OCAMLFIND) ocamlopt
-OCAMLDEP = ocamldep
-OCAMLMKLIB = ocamlmklib
-OCAML_STUB_DIR = @OCAML_STUB_DIR@
-
-ARCHIVE = $(PACKAGE)
-DLL = dll$(ARCHIVE).so
-
-TESTDIR = ./test
-TMPDIR = .test
-TMPPKGDIR = $(TMPDIR)/$(PACKAGE)
-
-all: $(ARCHIVE).cma
-opt: $(ARCHIVE).cmxa
-test: $(TESTDIR)/test
-test.opt: $(TESTDIR)/test.opt
-world: all opt
-
-dist:
-       rm -rf $(DIST_DIR)/
-       mkdir $(DIST_DIR)/
-       cp -a $(DIST_FILES) $(DOC_FILES) $(DIST_DIR)/
-       -find $(DIST_DIR) -name CVS -type d -exec rm -rf {} \;
-       -find $(DIST_DIR) -name .cvsignore -type f -exec rm {} \;
-       tar cvfz $(DIST_DIR).tar.gz $(DIST_DIR)/
-       rm -rf $(DIST_DIR)/
-
-deb: dist
-       if [ -d $(DIST_DIR)/ ]; then rm -rf $(DIST_DIR); else true; fi
-       tar xvzf $(DIST_DIR).tar.gz
-       (cd $(DIST_DIR)/ && debuild)
-       rm -rf $(DIST_DIR)
-
-ml_gtk_mathview.o: ml_gtk_mathview.c
-       gcc -c -I$(INCLUDEDIR) -fPIC `ocamlfind query -i-format lablgtk` @GTKMATHVIEW_CFLAGS@ @GDOME_CFLAGS@ `ocamlfind query -i-format gdome2` $<
-
-.SUFFIXES: .cmo .cmi .cmx .ml .mli
-
-.ml.cmo:
-       $(OCAMLC) -package "$(REQUIRES)" -predicates "$(PREDICATES)" -c $<
-.mli.cmi:
-       $(OCAMLC) -package "$(REQUIRES)" -predicates "$(PREDICATES)" -c $<
-.ml.cmx:
-       $(OCAMLOPT) -package "$(REQUIRES)" -predicates "$(PREDICATES)" -c $<
-
-depend: *.ml *.mli
-       $(OCAMLDEP) *.ml *.mli >.depend
-include .depend
-
-$(ARCHIVE).cma $(DLL): $(OBJECTS) $(OBJECTS_C)
-       $(OCAMLMKLIB) -o $(ARCHIVE) -L$(OCAML_STUB_DIR) $^ $(SHARED_LIBS)
-$(ARCHIVE).cmxa $(ARCHIVE).a: $(OBJECTS_OPT)
-       $(OCAMLMKLIB) -o $(ARCHIVE) -L$(OCAML_STUB_DIR) $^ $(OBJECTS_C) $(SHARED_LIBS)
-
-$(TESTDIR)/test: $(OBJECTS_C) $(ARCHIVE).cma $(TESTDIR)/test.ml
-       mkdir -p $(TMPPKGDIR)
-       cp $(OBJECTS_C) $(DLL) $(ARCHIVE).cma $(INST) $(TMPPKGDIR)
-       cd $(TESTDIR) ; export OCAMLPATH=../$(TMPDIR):$$OCAMLPATH ; make
-       rm -r $(TMPDIR)
-
-$(TESTDIR)/test.opt: $(OBJECTS_C) $(ARCHIVE).a $(ARCHIVE).cmxa $(TESTDIR)/test.ml
-       mkdir -p $(TMPPKGDIR)
-       cp $(OBJECTS_C) $(ARCHIVE).a $(ARCHIVE).cmxa $(INST) $(TMPPKGDIR)
-       cd $(TESTDIR) ; export OCAMLPATH=../$(TMPDIR):$$OCAMLPATH ; make opt
-       rm -r $(TMPDIR)
-
-install:
-       test ! -f $(ARCHIVE).cmxa || extra="$(ARCHIVE).a $(ARCHIVE).cmxa" ; \
-       if [ "$(PREFIX)" = "" ]; then \
-               $(OCAMLFIND) install    \
-                       $(PACKAGE) $(OBJECTS_C) $(ARCHIVE).cma $(DLL) $(INST) $$extra;  \
-               ln -fs $(DLL) $(shell $(OCAMLFIND) printconf destdir)/stublibs/lib$(ARCHIVE).so;        \
-       else \
-               $(OCAMLFIND) install -destdir $(PREFIX) \
-                       $(PACKAGE) $(OBJECTS_C) $(ARCHIVE).cma $(DLL) $(INST) $$extra; \
-               ln -fs $(DLL) $(PREFIX)/stublibs/lib$(ARCHIVE).so;      \
-       fi
-
-uninstall:
-       if [ "$(PREFIX)" = "" ]; then \
-               ocamlfind remove $(PACKAGE); \
-       else \
-               ocamlfind remove -destdir $(PREFIX) $(PACKAGE); \
-       fi
-
-clean:
-       rm -f *.[ao] *.cm[iaxo] *.cmxa *.so
-       cd $(TESTDIR) ; make clean
-       rm -rf $(TMPDIR)
-
-distclean: clean
-       rm -f config.log config.cache config.status Makefile META lablgtkmathview.spec
-       cd $(TESTDIR) ; make distclean
diff --git a/helm/DEVEL/lablgtkmathview/NEWS b/helm/DEVEL/lablgtkmathview/NEWS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/lablgtkmathview/README b/helm/DEVEL/lablgtkmathview/README
deleted file mode 100644 (file)
index 61c34d4..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-This is the Ocaml binding for the GtkMathView widget.
-
-To compile and install:
-
-       ./configure
-       make
-       make opt
-       make install
-
diff --git a/helm/DEVEL/lablgtkmathview/configure.in b/helm/DEVEL/lablgtkmathview/configure.in
deleted file mode 100644 (file)
index dd11f14..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-AC_INIT(gMathView.ml)
-
-PACKAGE=lablgtkmathview
-
-LABLGTKMATHVIEW_MAJOR_VERSION=0
-LABLGTKMATHVIEW_MINOR_VERSION=4
-LABLGTKMATHVIEW_MICRO_VERSION=3
-LABLGTKMATHVIEW_VERSION=$LABLGTKMATHVIEW_MAJOR_VERSION.$LABLGTKMATHVIEW_MINOR_VERSION.$LABLGTKMATHVIEW_MICRO_VERSION
-VERSION=$LABLGTKMATHVIEW_VERSION
-
-PKG_CHECK_MODULES(GDOME, gdome2 >= 0.7.0,, AC_MSG_ERROR(could not find Gdome2))
-AC_SUBST(GDOME_CFLAGS)
-AC_SUBST(GDOME_LIBS)
-
-PKG_CHECK_MODULES(GTKMATHVIEW, gtkmathview,, AC_MSG_ERROR(could not find gtkmathview))
-AC_SUBST(GTKMATHVIEW_CFLAGS)
-AC_SUBST(GTKMATHVIEW_LIBS)
-
-AC_CHECK_PROG(HAVE_OCAMLC, ocamlc, yes, no)
-if test $HAVE_OCAMLC = "no"; then
-  AC_MSG_ERROR(could not find ocamlc in PATH, please make sure ocaml is installed)
-fi
-
-AC_CHECK_PROG(HAVE_OCAMLFIND, ocamlfind, yes, no)
-if test $HAVE_OCAMLFIND = "no"; then
-  AC_MSG_ERROR(could not find ocamlfind in PATH, please make sure findlib is installed)
-fi
-
-AC_MSG_CHECKING("for gdome2")
-ocamlfind query gdome2 ||
-  AC_MSG_ERROR(gdome2 not installed (according to findlib))
-
-AC_MSG_CHECKING("for lablgtk")
-ocamlfind query lablgtk ||
-  AC_MSG_ERROR(lablgtk not installed (according to findlib))
-
-AC_MSG_CHECKING("for the ocaml library dir")
-OCAML_LIB_DIR=`ocamlc -where`
-OCAML_STUB_DIR="$OCAML_LIB_DIR/stublibs"
-AC_MSG_RESULT($OCAML_LIB_DIR)
-
-AC_CHECK_FILE(/usr/include/caml/mlvalues.h,
-       OCAML_INCLUDE_DIR=/usr/include/caml,
-       OCAML_INCLUDE_DIR=$OCAML_LIB_DIR/caml
-)
-
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-AC_SUBST(OCAML_INCLUDE_DIR)
-AC_SUBST(OCAML_LIB_DIR)
-AC_SUBST(OCAML_STUB_DIR)
-
-AC_OUTPUT([
-  test/Makefile
-  Makefile
-  lablgtkmathview.spec
-  META
-])
diff --git a/helm/DEVEL/lablgtkmathview/debian/changelog b/helm/DEVEL/lablgtkmathview/debian/changelog
deleted file mode 100644 (file)
index 1212d63..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-lablgtkmathview (0.4.3-3) unstable; urgency=low
-
-  * rebuilt against gmetadom 0.1.10-3
-  * debian/control
-    - strictly depends on gmetadom >= 0.1.10-3 (older version are buggy
-      on mips)
-
- -- Stefano Zacchiroli <zack@debian.org>  Sat, 12 Jul 2003 14:14:31 +0200
-
-lablgtkmathview (0.4.3-2) unstable; urgency=low
-
-  * upstream changes
-    - fixed Makefile.in that still looked for gtkmathview-config
-    - selection flickering got rid of (by means of freeze/thaw)
-    - structural selection is no longer activated just before
-      semantic selection for single_selection_math_view
-  * debian/control
-    - bumped gmetadom dependencies to >= 0.1.10-2 (to ensure that .pc
-      file is available)
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue,  1 Jul 2003 11:25:48 +0200
-
-lablgtkmathview (0.4.3-1) unstable; urgency=low
-
-  * Rebuild against gtkmathview 0.4.3
-  * debian/control
-    - bumped standards version to 3.5.10
-    - bumped dependencies on gtkmathview to 0.4.3
-    - bumped dependencies on gmetadom to 0.1.9
-    - added ${misc:Depends}
-    - changed section of -dev package to "libdevel"
-    - better short description
-    - added built-dep to pkg-config
-  * debian/rules
-    - removed DH_COMPAT in favour of debian/compat
-    - comsetic changes
-    - removed useless binary-indep target
-    - removed dh_movefiles in favour of dh_install
-
- -- Stefano Zacchiroli <zack@debian.org>  Thu, 19 Jun 2003 14:52:54 +0200
-
-lablgtkmathview (0.4.1-1) unstable; urgency=low
-
-  * Bugfix in some OCaml value allocations
-  * Binding for gtkmathview 0.4.1
-  * Bumped dependencies to gtkmathview 0.4.1
-  * Dropped << dependencies for ocaml libraries
-  * Bumped gmetadom dependencies to >= 0.1.6
-  * Bumped gdome2 dependencies to >= 0.7.4
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue, 11 Mar 2003 21:18:29 +0100
-
-lablgtkmathview (0.3.99-2) unstable; urgency=low
-
-  * Bugfix: added dep on t1lib-dev from liblablgtkmathview-ocaml-dev
-  * Bugfix: added dep on libgtkmathview-dev (>= 0.4.0) from
-    liblablgtkmathview-ocaml-dev
-
- -- Stefano Zacchiroli <zack@debian.org>  Sat, 25 Jan 2003 10:24:53 +0100
-
-lablgtkmathview (0.3.99-1) unstable; urgency=low
-
-  * Binding to gtkmathview 0.4.0 (pre-release)
-  * Added module GMathViewAux which contains backward compatible
-    "single_selection_math_view" class
-  * Reverted to >=/<< dependencies for ocaml libraries
-  * Bumped dependencies on gmetadom to 0.1.5
-  * Bumped dependencies on gtkmathview to 0.4.0
-  * Added missing dependencies from liblablgtkmathview-ocaml-dev to
-    libgdome2-ocaml-dev
-  * Versioned dependencies on liblablgtk-ocaml-dev
-
- -- Stefano Zacchiroli <zack@debian.org>  Wed, 22 Jan 2003 14:23:30 +0100
-
-lablgtkmathview (0.3.1-1) unstable; urgency=low
-
-  * Binding to gtkmathview 0.3.1
-  * debian/control
-    - bumped Standards Version to 3.5.8
-    - deps and build deps to ocaml{,-base}-3.06-1
-  * Moved lib stuff to /usr/lib/ocaml/3.06
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue,  7 Jan 2003 12:57:47 +0100
-
-lablgtkmathview (0.3.0-10) unstable; urgency=low
-
-  * Added dep on liblablgtk-ocaml{,-dev} respectively in
-    liblablgtkmathview-ocaml{,-dev}
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue, 17 Sep 2002 11:58:14 +0200
-
-lablgtkmathview (0.3.0-9) unstable; urgency=low
-
-  * Removed useless dh_ocamlld invocation
-  * Fixed native code compilation shared object path (now looks for .so
-    in /usr/lib/ocaml/stublibs instead of
-    /usr/lib/ocaml/lablgtkmathview)
-
- -- Stefano Zacchiroli <zack@debian.org>  Thu, 29 Aug 2002 15:02:21 +0200
-
-lablgtkmathview (0.3.0-8) unstable; urgency=low
-
-  * Switched to debhelper 4
-  * Added build dep on findlib (>= 0.7.1)
-  * Rebuilt against ocaml 3.06 (Closes: Bug#158256, Bug#158266)
-  * Changed deps and build-deps to ocaml-3.06 and ocaml-base-3.06 as
-    mandated by the new ocaml packaging policy
-  * Removed mention of lablgtkmathview from debian/control
-  * Added dep on ocaml-findlib
-  * Moved shared objects to /usr/lib/ocaml/stublibs
-
- -- Stefano Zacchiroli <zack@debian.org>  Sun,  7 Jul 2002 13:50:52 +0200
-
-lablgtkmathview (0.3.0-7) unstable; urgency=low
-
-  * Added -fPIC when compiling some .o in order to build on HPPA
-    (Closes: #142462)
-
- -- Stefano Zacchiroli <zack@debian.org>  Fri, 12 Apr 2002 14:31:47 +0200
-
-lablgtkmathview (0.3.0-6) unstable; urgency=low
-
-  * Added Build-Depends on t1lib-dev (Closes: Bug#140835).
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue,  2 Apr 2002 10:11:25 +0200
-
-lablgtkmathview (0.3.0-5) unstable; urgency=low
-
-  * Added Build-Depends on libgdome2-cpp-smart-dev (Closes: Bug#140720).
-
- -- Stefano Zacchiroli <zack@debian.org>  Mon,  1 Apr 2002 09:00:03 +0200
-
-lablgtkmathview (0.3.0-4) unstable; urgency=low
-
-  * Added some .mli and .ml files that document the library interface.
-  * Added Depends: on libgdome2-ocaml, we haven't yet estabilished how to
-    interact with shlibs system for ocaml shared library that are installed in
-    /usr/lib/ocaml
-
- -- Stefano Zacchiroli <zack@debian.org>  Mon,  1 Apr 2002 00:17:41 +0200
-
-lablgtkmathview (0.3.0-3) unstable; urgency=low
-
-  * Rebuilt against gmetadom 0.3.0-4 and gtkmathview 0.3.0-2.
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue, 26 Mar 2002 19:17:56 +0100
-
-lablgtkmathview (0.3.0-2) unstable; urgency=low
-
-  * Added build dep on libgdome2-dev
-  * Removed CVS stuff from source tarball
-
- -- Stefano Zacchiroli <zack@debian.org>  Fri, 15 Mar 2002 13:23:53 +0100
-
-lablgtkmathview (0.3.0-1) unstable; urgency=low
-
-  * New upstream release
-  * Renamed resulting package to liblablgtkmathview-ocaml-dev
-  * Changed build-depends to adhere to the new ocaml packages naming schema
-    (e.g. lablgtk -> liblablgtk-ocaml-dev) (Closes: Bug#138116)
-  * Split away shared library in liblablgtkmathview-ocaml package
-
- -- Stefano Zacchiroli <zack@debian.org>  Wed, 13 Mar 2002 18:53:50 +0100
-
-lablgtkmathview (0.2.8-1) unstable; urgency=low
-
-  * New upstream release
-  * Built with ocaml 3.04 and lablgtk 1.2.3
-  * Removed useless build depends
-
- -- Stefano Zacchiroli <zack@debian.org>  Mon, 25 Feb 2002 18:18:25 +0100
-
-lablgtkmathview (0.2.4-4) unstable; urgency=low
-
-  * Rebuilt with libgtkmathview 0.2.7
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue,  4 Sep 2001 22:16:35 +0200
-
-lablgtkmathview (0.2.4-3) unstable; urgency=low
-
-  *  Rebuilt with ocaml 3.02 and lablgtk 1.2.1
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue, 21 Aug 2001 15:20:05 +0200
-
-lablgtkmathview (0.2.4-2) unstable; urgency=low
-
-  * Added build-dep on libxml2-dev (closes: Bug#102715).
-
- -- Stefano Zacchiroli <zack@debian.org>  Fri, 29 Jun 2001 12:39:57 +0200
-
-lablgtkmathview (0.2.4-1) unstable; urgency=low
-
-  * Initial Release (closes: Bug#93105).
-
- -- Stefano Zacchiroli <zack@debian.org>  Wed,  4 Apr 2001 23:27:07 +0200
-
-Local variables:
-mode: debian-changelog
-End:
diff --git a/helm/DEVEL/lablgtkmathview/debian/compat b/helm/DEVEL/lablgtkmathview/debian/compat
deleted file mode 100644 (file)
index b8626c4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-4
diff --git a/helm/DEVEL/lablgtkmathview/debian/control b/helm/DEVEL/lablgtkmathview/debian/control
deleted file mode 100644 (file)
index d67f6dd..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Source: lablgtkmathview
-Section: devel
-Priority: optional
-Maintainer: Stefano Zacchiroli <zack@debian.org>
-Build-Depends: debhelper (>> 4.0.0), ocaml-3.06-1, ocaml-findlib, liblablgtk-ocaml-dev (>= 1.2.5), libgdome2-ocaml-dev (>= 0.1.10-3), libgtkmathview-dev (>= 0.4.3), libxml2-dev, libgdome2-dev (>= 0.7.4), libgdome2-cpp-smart-dev (>= 0.1.10-3), t1lib-dev (>= 1.3), pkg-config
-Standards-Version: 3.5.10
-
-Package: liblablgtkmathview-ocaml
-Architecture: any
-Section: libs
-Depends: ocaml-base-3.06-1, liblablgtk-ocaml (>= 1.2.5), libgdome2-ocaml (>= 0.1.10-3), ${shlibs:Depends}, ${misc:Depends}
-Description: OCaml bindings for libgtkmathview, a GTK widget to render MathML
- This is the Ocaml binding for the GtkMathView widget, that is
- currently available in the libgtkmathview0 package.
- .
- This package contains only the shared runtime stub libraries.
-
-Package: liblablgtkmathview-ocaml-dev
-Architecture: any
-Section: libdevel
-Depends: ocaml-3.06-1, liblablgtk-ocaml-dev (>= 1.2.5), libgtkmathview0 (>= 0.4.3), liblablgtkmathview-ocaml (= ${Source-Version}), ocaml-findlib, libgdome2-ocaml-dev (>= 0.1.10-3), t1lib-dev, libgtkmathview-dev (>= 0.4.3), ${misc:Depends}
-Description: OCaml bindings for libgtkmathview, a GTK widget to render MathML
- These are the Ocaml bindings for the GtkMathView widget, that is
- currently available in the libgtkmathview0 package.
- .
- This package contains the development part of the lablgtkmathview package.
-
diff --git a/helm/DEVEL/lablgtkmathview/debian/copyright b/helm/DEVEL/lablgtkmathview/debian/copyright
deleted file mode 100644 (file)
index 7ac39e1..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-This package was debianized by Stefano Zacchiroli <zack@debian.org> on
-Wed,  4 Apr 2001 23:27:07 +0200.
-
-It was packed from source obtained via cvs, with this CVSROOT:
- :pserver:anonymous@phd.cs.unibo.it:/home/lpadovan/PHELM/
-
-Authors:
- Luca Padovani <luca.padovani@cs.unibo.it>
- Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
-
-Copyright:
-
- Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- This file is part of lablgtkmathview, the Ocaml binding
- for the GtkMathView widget.
- lablgtkmathview is free software, you can redistribute it and/or modify
- it under the terms of the GNU General Public License.  You can find a
- copy of the license in /usr/share/common-licenses/GPL.
-
diff --git a/helm/DEVEL/lablgtkmathview/debian/docs b/helm/DEVEL/lablgtkmathview/debian/docs
deleted file mode 100644 (file)
index e845566..0000000
+++ /dev/null
@@ -1 +0,0 @@
-README
diff --git a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml-dev.dirs b/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml-dev.dirs
deleted file mode 100644 (file)
index dd36853..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/lib/ocaml/3.06
-usr/lib/ocaml/3.06/stublibs
diff --git a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml.dirs b/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml.dirs
deleted file mode 100644 (file)
index 8fd9995..0000000
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/ocaml/3.06
diff --git a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml.install b/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml.install
deleted file mode 100644 (file)
index cd2f92f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/lib/ocaml/3.06/lablgtkmathview/*.so
-usr/lib/ocaml/3.06/stublibs/*
diff --git a/helm/DEVEL/lablgtkmathview/debian/rules b/helm/DEVEL/lablgtkmathview/debian/rules
deleted file mode 100755 (executable)
index 3057fad..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/make -f
-# Sample debian/rules that uses debhelper.
-# GNU copyright 1997 to 1999 by Joey Hess.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-TARGETDIR = debian/liblablgtkmathview-ocaml-dev
-
-configure: configure-stamp
-configure-stamp:
-       dh_testdir
-       ./configure
-
-       touch configure-stamp
-
-build: configure-stamp build-stamp
-build-stamp:
-       dh_testdir
-
-       $(MAKE)
-       if [ -x /usr/bin/ocamlopt ]; then $(MAKE) opt; else true; fi
-
-       touch build-stamp
-
-clean:
-       dh_testdir
-       dh_testroot
-       rm -f build-stamp configure-stamp
-
-       -$(MAKE) distclean
-
-       dh_clean
-
-install: build
-       dh_testdir
-       dh_testroot
-       dh_clean -k
-       dh_installdirs -s
-
-       $(MAKE) install PREFIX=$(TARGETDIR)/usr/lib/ocaml/3.06
-
-movefiles: install
-       dh_install -p liblablgtkmathview-ocaml --sourcedir=$(TARGETDIR)
-
-binary-arch: build install
-       dh_testdir
-       dh_testroot
-       dh_installdocs -s
-       dh_installexamples -s
-       dh_installmanpages -s
-       dh_installinfo -s
-       dh_installchangelogs -s ChangeLog
-       dh_link -s
-       dh_strip -s
-       dh_compress -s
-       dh_fixperms -s
-       dh_installdeb -s
-       dh_shlibdeps -s
-       dh_gencontrol -s
-       dh_md5sums -s
-       dh_builddeb -s
-
-binary: binary-arch
-.PHONY: build clean binary-arch binary install configure
diff --git a/helm/DEVEL/lablgtkmathview/gMathView.ml b/helm/DEVEL/lablgtkmathview/gMathView.ml
deleted file mode 100644 (file)
index 3687c04..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-(* Copyright (C) 2000-2003, Luca Padovani <luca.padovani@cs.unibo.it>,
- *                          Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>.
- *
- * This file is part of lablgtkmathview, the Ocaml binding
- * for the GtkMathView widget.
- * 
- * lablgtkmathview 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.
- *
- * lablgtkmathview 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 lablgtkmathview; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
-
-open Gaux
-open Gtk
-open Gtk_mathview
-open GtkBase
-open GtkMathView
-open GObj
-
-exception ErrorLoadingFile of string;;
-exception ErrorWritingFile of string;;
-exception ErrorLoadingDOM;;
-exception NoSelection;;
-
-let option_element_of_option =
- function
-    None -> None
-  | Some v -> Some (new Gdome.element v)
-
-class math_view_signals obj = object
-  inherit GContainer.container_signals obj
-  method click =
-   let module S = GtkSignal in
-    let new_click =
-     let new_marshaller f x y =
-      MathView.Signals.click.S.marshaller
-       (fun e s -> f (option_element_of_option e) s) x y
-     in
-      { S.name = "click"; S.classe = `math_view;
-        S.marshaller = new_marshaller }
-    in
-     GtkSignal.connect ~sgn:new_click obj ~after
-  method select_begin =
-   let module S = GtkSignal in
-    let new_select_begin =
-     let new_marshaller f x y =
-      MathView.Signals.select_begin.S.marshaller
-       (fun e s -> f (option_element_of_option e) s) x y
-     in
-      { S.name = "select_begin"; S.classe = `math_view;
-        S.marshaller = new_marshaller }
-    in
-     GtkSignal.connect ~sgn:new_select_begin obj ~after
-   method select_over =
-   let module S = GtkSignal in
-    let new_select_over =
-     let new_marshaller f x y =
-      MathView.Signals.select_over.S.marshaller
-       (fun e s -> f (option_element_of_option e) s) x y
-     in
-      { S.name = "select_over"; S.classe = `math_view;
-        S.marshaller = new_marshaller }
-    in
-     GtkSignal.connect ~sgn:new_select_over obj ~after
-   method select_end =
-   let module S = GtkSignal in
-    let new_select_end =
-     let new_marshaller f x y =
-      MathView.Signals.select_end.S.marshaller
-       (fun e s -> f (option_element_of_option e) s) x y
-     in
-      { S.name = "select_end"; S.classe = `math_view;
-        S.marshaller = new_marshaller }
-    in
-     GtkSignal.connect ~sgn:new_select_end obj ~after
-   method select_abort =
-   let module S = GtkSignal in
-    let new_select_abort =
-     let new_marshaller f x y =
-      MathView.Signals.select_abort.S.marshaller
-       (fun () -> f ()) x y
-     in
-      { S.name = "select_abort"; S.classe = `math_view;
-        S.marshaller = new_marshaller }
-    in
-     GtkSignal.connect ~sgn:new_select_abort obj ~after
-  method element_over =
-   let module S = GtkSignal in
-    let new_element_over =
-     let new_marshaller f x y =
-      MathView.Signals.element_over.S.marshaller
-       (fun e s -> f (option_element_of_option e) s) x y
-     in
-      { S.name = "element_over"; S.classe = `math_view;
-        S.marshaller = new_marshaller }
-    in
-     GtkSignal.connect ~sgn:new_element_over obj ~after
-end
-
-class math_view_skel obj = object
- inherit GContainer.container (obj : Gtk_mathview.math_view obj)
- method freeze = MathView.freeze obj
- method thaw = MathView.thaw obj
- method load_uri ~filename =
-  if not (MathView.load_uri obj ~filename) then raise (ErrorLoadingFile filename)
- method load_doc ~dom =
-  if not (MathView.load_doc obj ~dom:((dom : Gdome.document)#as_Document)) then
-   raise ErrorLoadingDOM
- method unload = MathView.unload obj
- method select element = MathView.select obj ((element : Gdome.element)#as_Element)
- method unselect element = MathView.unselect obj ((element : Gdome.element)#as_Element)
- method is_selected element = MathView.is_selected obj ((element : Gdome.element)#as_Element)
- method get_element_at x y = option_element_of_option (MathView.get_element_at obj x y)
- method get_width = MathView.get_width obj
- method get_height = MathView.get_height obj
- method get_top = MathView.get_top obj
- method set_top = MathView.set_top obj
- method set_adjustments =
-  fun adj1 adj2 ->
-   MathView.set_adjustments obj (GData.as_adjustment adj1)
-   (GData.as_adjustment adj2)
- method get_hadjustment = new GData.adjustment (MathView.get_hadjustment obj)
- method get_vadjustment = new GData.adjustment (MathView.get_vadjustment obj)
- method get_buffer = MathView.get_buffer obj
- method get_frame = new GBin.frame (MathView.get_frame obj)
- method get_drawing_area = new GMisc.drawing_area (MathView.get_drawing_area obj)
- method set_font_size = MathView.set_font_size obj
- method get_font_size = MathView.get_font_size obj
- method set_anti_aliasing = MathView.set_anti_aliasing obj
- method get_anti_aliasing = MathView.get_anti_aliasing obj
- method set_transparency = MathView.set_transparency obj
- method get_transparency = MathView.get_transparency obj
- method set_log_verbosity = MathView.set_log_verbosity obj
- method get_log_verbosity = MathView.get_log_verbosity obj
- method export_to_postscript
-       ?(width = 595) ?(height = 822) ?(x_margin = 72) ?(y_margin = 72)
-       ?(disable_colors = false) ~filename () =
-  let result = MathView.export_to_postscript obj
-       ~width ~height ~x_margin ~y_margin ~disable_colors ~filename
-  in
-  if not result then raise (ErrorWritingFile filename)
- method get_font_manager_type = MathView.get_font_manager_type obj
- method set_font_manager_type ~fm_type = MathView.set_font_manager_type obj ~fm_type
-end
-
-class math_view obj = object
- inherit math_view_skel (obj : Gtk_mathview.math_view obj)
- method connect = new math_view_signals obj
-end
-
-let math_view ?adjustmenth ?adjustmentv ?font_size ?font_manager ?border_width
- ?width ?height ?packing ?show () =
- let w =
-   MathView.create
-    ?adjustmenth:(may_map ~f:GData.as_adjustment adjustmenth)
-    ?adjustmentv:(may_map ~f:GData.as_adjustment adjustmentv)
-    ()
- in
-  Container.set w ?border_width ?width ?height;
- let mathview = pack_return (new math_view w) ~packing ~show in
- begin
-    match font_size with
-    | Some size -> mathview#set_font_size size
-    | None      -> ()
-  end;
-  begin
-    match font_manager with
-    | Some manager -> mathview#set_font_manager_type ~fm_type:manager
-    | None         -> ()
-  end;
-  mathview
-;;
diff --git a/helm/DEVEL/lablgtkmathview/gMathView.mli b/helm/DEVEL/lablgtkmathview/gMathView.mli
deleted file mode 100644 (file)
index 5ffffa4..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-(* Copyright (C) 2000-2003, Luca Padovani <luca.padovani@cs.unibo.it>,
- *                          Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>.
- *
- * This file is part of lablgtkmathview, the Ocaml binding
- * for the GtkMathView widget.
- * 
- * lablgtkmathview 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.
- *
- * lablgtkmathview 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 lablgtkmathview; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
-
-exception ErrorLoadingFile of string
-exception ErrorWritingFile of string
-exception ErrorLoadingDOM
-exception NoSelection
-
-class math_view_signals :
-  ([> `container | `widget | `base | `math_view] as 'b) Gtk.obj ->
-  object ('a)
-    inherit GContainer.container_signals
-    val obj: 'b Gtk.obj
-    method click :
-      callback:(Gdome.element option -> int -> unit) -> GtkSignal.id
-    method element_over :
-      callback:(Gdome.element option -> int -> unit) -> GtkSignal.id
-    method select_begin :
-      callback:(Gdome.element option -> int -> unit) -> GtkSignal.id
-    method select_over :
-      callback:(Gdome.element option -> int -> unit) -> GtkSignal.id
-    method select_end :
-      callback:(Gdome.element option -> int -> unit) -> GtkSignal.id
-    method select_abort :
-      callback:(unit -> unit) -> GtkSignal.id
-  end
-
-class math_view_skel :
-  (Gtk_mathview.math_view Gtk.obj as 'a)->
-  object
-    inherit GContainer.container
-    method freeze : unit
-    method thaw : unit
-    method export_to_postscript :
-      ?width:int ->
-      ?height:int ->
-      ?x_margin:int ->
-      ?y_margin:int ->
-      ?disable_colors:bool -> filename:string -> unit -> unit
-    method get_anti_aliasing : bool
-    method get_buffer : Gdk.pixmap
-    method get_font_manager_type : [ `font_manager_gtk | `font_manager_t1]
-    method get_font_size : int
-    method get_frame : GBin.frame
-    method get_drawing_area : GMisc.drawing_area
-    method get_hadjustment : GData.adjustment
-    method get_height : int
-    method get_log_verbosity : int
-    method get_top : int * int
-    method get_transparency : bool
-    method get_vadjustment : GData.adjustment
-    method get_width : int
-    method load_uri : filename:string -> unit
-    method load_doc : dom:Gdome.document -> unit
-    method set_adjustments : GData.adjustment -> GData.adjustment -> unit
-    method set_anti_aliasing : bool -> unit
-    method set_font_manager_type :
-      fm_type:[ `font_manager_gtk | `font_manager_t1] -> unit
-    method set_font_size : int -> unit
-    method set_log_verbosity : int -> unit
-    method select : Gdome.element -> unit
-    method unselect : Gdome.element -> unit
-    method get_element_at : int -> int -> Gdome.element option
-    method is_selected : Gdome.element -> bool
-    method set_top : int -> int -> unit
-    method set_transparency : bool -> unit
-    method unload : unit
-    val obj : 'a
-  end
-
-class math_view :
-  Gtk_mathview.math_view Gtk.obj ->
-  object
-    inherit math_view_skel
-    method connect : math_view_signals
-  end
-
-val math_view :
-  ?adjustmenth:GData.adjustment ->
-  ?adjustmentv:GData.adjustment ->
-  ?font_size:int ->
-  ?font_manager:[ `font_manager_gtk | `font_manager_t1] ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> math_view
diff --git a/helm/DEVEL/lablgtkmathview/gMathViewAux.ml b/helm/DEVEL/lablgtkmathview/gMathViewAux.ml
deleted file mode 100644 (file)
index 928e219..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-(* Copyright (C) 2000-2003, Luca Padovani <luca.padovani@cs.unibo.it>,
- *                          Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>.
- *
- * This file is part of lablgtkmathview, the Ocaml binding
- * for the GtkMathView widget.
- * 
- * lablgtkmathview 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.
- *
- * lablgtkmathview 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 lablgtkmathview; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
-
-(* finds the common node ancestor of two nodes *)
-let common_ancestor (first : Gdome.node) (last : Gdome.node) =
- let rec path n =
-  match n#get_parentNode with
-     None -> [n]
-   | Some p -> n::(path p)
- in
-  let rec last_common =
-   function
-      _, hd1::tl1, hd2::tl2 when hd1#isSameNode hd2 -> (last_common ((Some hd1),tl1,tl2))
-    | Some e, _, _ -> e
-    | _,_,_ -> assert false
-  in
-   (last_common (None,(List.rev (path first)),(List.rev (path last))))
-let same_element (e1 : Gdome.element option) (e2 : Gdome.element option) =
- match e1, e2 with
-    None, None -> true
-  | Some e1, Some e2 when (e1 :> Gdome.node)#isSameNode (e2 :> Gdome.node) -> true
-  | _ -> false
-        
-(* true if n1 is n2 or one of n2's descendants *)
-let rec descendant_of (n1 : Gdome.node) (n2 : Gdome.node) =
- if n1#isSameNode n2 then true
- else
-  match n1#get_parentNode with
-     None -> false
-   | Some n1' -> descendant_of n1' n2
-
-let remove_descendants_of (el : Gdome.element) =
- let rec aux =
-  function
-     [] -> []
-   | hd::tl when descendant_of (hd :> Gdome.node) (el :> Gdome.node) -> aux tl
-   | hd::tl -> hd::(aux tl)
- in
-  aux
-
-(* mem el l = true if the node n is stored in the list l *)
-let mem (el : Gdome.element) =
- let rec mem_aux =
-  function
-     hd::_ when (hd :> Gdome.node)#isSameNode (el :> Gdome.node) -> true
-   | _::tl -> mem_aux tl
-   | _ -> false
- in
-  mem_aux
-
-(* remove el l = l' where l' has the same nodes as l except that all
- * the occurrences of n have been removed *)
-let remove (el : Gdome.element) =
- let rec remove_aux =
-  function
-     hd::tl when (hd :> Gdome.node)#isSameNode (el :> Gdome.node) ->
-      remove_aux tl
-   | hd::tl -> hd::(remove_aux tl)
-   | [] -> []
- in
-  remove_aux
-
-class single_selection_math_view_signals obj (set_selection_changed : (Gdome.element option -> unit) -> unit) =
- object
-  inherit GMathView.math_view_signals obj
-  method selection_changed = set_selection_changed
- end
-;;
-
-class single_selection_math_view obj =
-  object(self)
-   inherit GMathView.math_view_skel obj
-   val mutable first_selected = None
-   val mutable root_selected = None
-   val mutable selection_changed = (fun _ -> ())
-
-   method set_selection elem =
-    self#freeze ;
-    begin
-     match root_selected with
-        None -> ()
-      | Some e -> self#unselect e
-    end;
-    root_selected <- elem ;
-    begin
-     match elem with
-        None -> ()
-      | Some e -> self#select e
-    end ;
-    self#thaw
-
-   method get_selection = root_selected
-
-   method connect =
-    new
-     single_selection_math_view_signals obj
-      (function f -> selection_changed <- f)
-
-   method action_toggle (elem : Gdome.element) =
-    match elem#get_namespaceURI, elem#get_localName with
-       Some ns, Some ln
-        when ns#to_string = "http://www.w3.org/1998/Math/MathML" &&
-         ln#to_string = "maction"
-       ->
-        begin
-         let selection_attr = Gdome.domString "selection" in
-         let selection =
-          if elem#hasAttribute ~name:selection_attr then
-           int_of_string (elem#getAttribute ~name:selection_attr)#to_string
-          else
-           1
-         in
-          self#freeze ;
-          (* the widget will cast the index back into a valid range *)
-          elem#setAttribute ~name:selection_attr
-           ~value:(Gdome.domString (string_of_int (selection + 1))) ;
-          self#thaw ;
-          true
-        end
-     | _ ->
-        begin
-         match elem#get_parentNode with
-            Some p ->
-             begin
-              try
-               self#action_toggle (new Gdome.element_of_node p)
-              with
-               GdomeInit.DOMCastException _ -> false
-             end
-          | None -> assert false (* every element has a parent *)
-        end
-     
-   initializer
-    selection_changed <- self#set_selection ;
-
-    ignore
-     (self#connect#select_begin
-       (fun (elem : Gdome.element option) _ ->
-         if not (same_element root_selected elem) then selection_changed elem ;
-         first_selected <- elem)) ;
-
-    ignore
-     (self#connect#select_over
-       (fun (elem : Gdome.element option) _ ->
-         let new_selected =
-          match first_selected, elem with
-             Some first', Some last' ->
-              (Some
-               (new Gdome.element_of_node
-                (common_ancestor (first' :> Gdome.node) (last' :> Gdome.node))))
-           | _ -> None
-         in
-          if not (same_element root_selected new_selected) then
-            selection_changed new_selected)) ;
-             
-    ignore
-     (self#connect#select_end
-       (fun (elem : Gdome.element option) _ -> first_selected <- None)) ;
-
-    ignore
-     (self#connect#select_abort
-       (fun () ->
-         first_selected <- None ;
-         selection_changed None)) ;
-
-    ignore (self#connect#click (fun _ _ -> self#set_selection None))
-  end
-;;
-
-let single_selection_math_view ?adjustmenth ?adjustmentv ?font_size ?font_manager ?border_width
- ?width ?height ?packing ?show () =
- let w =
-   GtkMathView.MathView.create
-    ?adjustmenth:(Gaux.may_map ~f:GData.as_adjustment adjustmenth)
-    ?adjustmentv:(Gaux.may_map ~f:GData.as_adjustment adjustmentv)
-    ()
- in
-  GtkBase.Container.set w ?border_width ?width ?height;
-  let mathview =
-   GObj.pack_return (new single_selection_math_view w) ~packing ~show
-  in
-   begin
-     match font_size with
-     | Some size -> mathview#set_font_size size
-     | None      -> () 
-   end;
-   begin
-     match font_manager with
-     | Some manager -> mathview#set_font_manager_type ~fm_type:manager
-     | None         -> () 
-   end;
-   mathview
-;;
-
-class multi_selection_math_view_signals obj
- (set_selection_changed : (Gdome.element option -> unit) -> unit)
-=
- object
-  inherit GMathView.math_view_signals obj
-  method selection_changed = set_selection_changed
- end
-;;
-
-class multi_selection_math_view obj =
-  object(self)
-   inherit single_selection_math_view obj
-   val mutable selected : Gdome.element list = []
-
-   method remove_selection (elem : Gdome.element) =
-    if mem elem selected then
-     selected <- remove elem selected ;
-     self#unselect elem
-
-   method remove_selections =
-    self#freeze ;
-    List.iter (fun e -> self#unselect e) selected ;
-    selected <- [] ;
-    begin
-     match self#get_selection with
-        None -> ()
-      | Some e -> self#select e
-    end ;
-    self#thaw
-
-   method add_selection (elem : Gdome.element) =
-    selected <- elem::(remove_descendants_of elem selected) ;
-    self#select elem
-
-   method get_selections = selected
-
-   method set_selection elem =
-    self#freeze ;
-    begin
-     match root_selected with
-        None -> ()
-      | Some e -> self#unselect e ; List.iter (fun e -> self#select e) selected
-    end;
-    root_selected <- elem;
-    begin
-     match elem with
-        None -> ()
-      | Some e -> self#select e
-    end ;
-    self#thaw
-
-   initializer
-    ignore
-     (self#connect#select_begin
-       (fun _ state ->
-         if not (List.mem `CONTROL (Gdk.Convert.modifier state)) then
-          self#remove_selections)) ;
-
-    ignore
-     (self#connect#select_over
-       (fun _ state ->
-         Printf.printf "stable selections: %d\n" (List.length selected) ;
-         Printf.printf "select_over with state: " ;
-         let c = 
-          function
-             `SHIFT -> "shift "
-           | `LOCK -> "lock "
-           | `CONTROL -> "control "
-           | `MOD1 -> "mod1 "
-           | _ -> ""
-         in
-          List.iter (fun x -> print_string (c x)) (Gdk.Convert.modifier state) ;
-          print_char '\n' ;
-          flush stdout)) ;
-
-    ignore
-     (self#connect#select_end
-       (fun _ state ->
-         Printf.printf "select_end\n" ; flush stdout ;
-         if not (List.mem `CONTROL (Gdk.Convert.modifier state)) then
-          self#remove_selections ;
-         match root_selected with
-            None -> ()
-         | Some e -> self#set_selection None ; self#add_selection e)) ;
-
-    ignore
-     (self#connect#click
-       (fun _ _ -> self#remove_selections))
-   end
- ;;
-
-let multi_selection_math_view ?adjustmenth ?adjustmentv ?font_size ?font_manager ?border_width
- ?width ?height ?packing ?show () =
- let w =
-   GtkMathView.MathView.create
-    ?adjustmenth:(Gaux.may_map ~f:GData.as_adjustment adjustmenth)
-    ?adjustmentv:(Gaux.may_map ~f:GData.as_adjustment adjustmentv)
-    ()
- in
-  GtkBase.Container.set w ?border_width ?width ?height;
- let mathview = GObj.pack_return (new multi_selection_math_view w) ~packing ~show in
- begin
-    match font_size with
-    | Some size -> mathview#set_font_size size
-    | None      -> () 
-  end;
-  begin
-    match font_manager with
-    | Some manager -> mathview#set_font_manager_type ~fm_type:manager
-    | None         -> () 
-  end;
-  mathview
-;;
-
diff --git a/helm/DEVEL/lablgtkmathview/gMathViewAux.mli b/helm/DEVEL/lablgtkmathview/gMathViewAux.mli
deleted file mode 100644 (file)
index edcf156..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-(* Copyright (C) 2000-2003, Luca Padovani <luca.padovani@cs.unibo.it>,
- *                          Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>.
- *
- * This file is part of lablgtkmathview, the Ocaml binding
- * for the GtkMathView widget.
- * 
- * lablgtkmathview 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.
- *
- * lablgtkmathview 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 lablgtkmathview; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
-
-class single_selection_math_view_signals :
-  ([> `container | `widget | `base | `math_view] as 'b) Gtk.obj ->
-  ((Gdome.element option -> unit) -> unit) ->
- object
-  inherit GMathView.math_view_signals
-  method selection_changed : (Gdome.element_of_node option -> unit) -> unit
- end
-
-class single_selection_math_view :
-  Gtk_mathview.math_view Gtk.obj ->
-  object
-    inherit GMathView.math_view_skel
-    method connect : single_selection_math_view_signals
-    method get_selection : Gdome.element option
-    method set_selection : Gdome.element option -> unit
-    method action_toggle : Gdome.element -> bool
-  end
-
-val single_selection_math_view :
-  ?adjustmenth:GData.adjustment ->
-  ?adjustmentv:GData.adjustment ->
-  ?font_size:int ->
-  ?font_manager:[ `font_manager_gtk | `font_manager_t1] ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(GObj.widget -> unit) ->
-  ?show:bool ->
-  unit -> single_selection_math_view
-
-  (** EXPERIMENTAL STUFF from now on: use with care and at your own risk! *)
-
-class multi_selection_math_view :
-  Gtk_mathview.math_view Gtk.obj ->
-  object
-    inherit single_selection_math_view
-    method remove_selection : Gdome.element -> unit
-    method remove_selections : unit
-    method add_selection : Gdome.element -> unit
-    method get_selections : Gdome.element list
-  end
-
-val multi_selection_math_view :
-  ?adjustmenth:GData.adjustment ->
-  ?adjustmentv:GData.adjustment ->
-  ?font_size:int ->
-  ?font_manager:[ `font_manager_gtk | `font_manager_t1] ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(GObj.widget -> unit) ->
-  ?show:bool ->
-  unit -> multi_selection_math_view
-
-
diff --git a/helm/DEVEL/lablgtkmathview/gtkMathView.ml b/helm/DEVEL/lablgtkmathview/gtkMathView.ml
deleted file mode 100644 (file)
index 2420c94..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-(* Copyright (C) 2000-2003, Luca Padovani <luca.padovani@cs.unibo.it>,
- *                          Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>.
- *
- * This file is part of lablgtkmathview, the Ocaml binding
- * for the GtkMathView widget.
- * 
- * lablgtkmathview 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.
- *
- * lablgtkmathview 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 lablgtkmathview; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
-
-open Gtk
-open Gtk_mathview
-open Tags
-open GtkBase
-open Gpointer
-
-external gdome_element_of_boxed_option :
- Gpointer.boxed option -> TElement.t =
-  "ml_gtk_math_view_gdome_element_of_boxed_option"
-
-external gdome_element_option_of_boxed_option :
- Gpointer.boxed option -> TElement.t option =
-  "ml_gtk_math_view_gdome_element_option_of_boxed_option"
-
-module MathView = struct
-  exception NoSelection
-
-  let cast w : math_view obj = Object.try_cast w "GtkMathView"
-  external create : Gtk.adjustment optobj -> Gtk.adjustment optobj -> 
-   math_view obj = "ml_gtk_math_view_new"
-  let create ~adjustmenth ~adjustmentv () =
-   create (optboxed adjustmenth) (optboxed adjustmentv)
-  external freeze : [>`math_view] obj -> unit =
-   "ml_gtk_math_view_freeze"
-  external thaw : [>`math_view] obj -> unit =
-   "ml_gtk_math_view_thaw"
-  external load_uri : [>`math_view] obj -> filename:string -> bool =
-   "ml_gtk_math_view_load_uri"
-  external load_doc : [>`math_view] obj -> dom:[> `Document] GdomeT.t -> bool =
-   "ml_gtk_math_view_load_doc"
-  external unload : [>`math_view] obj -> unit =
-   "ml_gtk_math_view_unload"
-  external select :
-   [>`math_view] obj -> [> `Element] GdomeT.t -> unit =
-   "ml_gtk_math_view_select"
-  external unselect :
-   [>`math_view] obj -> [> `Element] GdomeT.t -> unit =
-   "ml_gtk_math_view_unselect"
-  external is_selected :
-   [>`math_view] obj -> [> `Element] GdomeT.t -> bool =
-   "ml_gtk_math_view_is_selected"
-  external get_element_at :
-   [> `math_view] obj -> int -> int -> TElement.t option =
-   "ml_gtk_math_view_get_element_at"
-  external get_width : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_width"
-  external get_height : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_height"
-  external get_top : [>`math_view] obj -> (int * int) =
-   "ml_gtk_math_view_get_top"
-  external set_top : [>`math_view] obj -> int -> int -> unit =
-   "ml_gtk_math_view_set_top"
-  external set_adjustments : [>`math_view] obj -> Gtk.adjustment obj -> Gtk.adjustment obj -> unit =
-   "ml_gtk_math_view_set_adjustments"
-  external get_hadjustment : [>`math_view] obj -> Gtk.adjustment obj =
-   "ml_gtk_math_view_get_hadjustment"
-  external get_vadjustment : [>`math_view] obj -> Gtk.adjustment obj =
-   "ml_gtk_math_view_get_vadjustment"
-  external get_buffer : [>`math_view] obj -> Gdk.pixmap =
-   "ml_gtk_math_view_get_buffer"
-  external get_frame : [>`math_view] obj -> Gtk.frame obj =
-   "ml_gtk_math_view_get_frame"
-  external get_drawing_area : [>`math_view] obj -> Gtk.drawing_area obj =
-   "ml_gtk_math_view_get_drawing_area"
-  external set_font_size : [>`math_view] obj -> int -> unit =
-   "ml_gtk_math_view_set_font_size"
-  external get_font_size : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_font_size"
-  external set_anti_aliasing : [>`math_view] obj -> bool -> unit =
-   "ml_gtk_math_view_set_anti_aliasing"
-  external get_anti_aliasing : [>`math_view] obj -> bool =
-   "ml_gtk_math_view_get_anti_aliasing"
-  external set_transparency : [>`math_view] obj -> bool -> unit =
-   "ml_gtk_math_view_set_transparency"
-  external get_transparency : [>`math_view] obj -> bool =
-   "ml_gtk_math_view_get_transparency"
-  external set_log_verbosity : [>`math_view] obj -> int -> unit =
-   "ml_gtk_math_view_set_log_verbosity"
-  external get_log_verbosity : [>`math_view] obj -> int =
-   "ml_gtk_math_view_get_log_verbosity"
-  external export_to_postscript :
-   [>`math_view] obj -> width:int -> height:int -> x_margin:int -> y_margin:int -> disable_colors:bool -> filename:string -> bool =
-   "ml_gtk_math_view_export_to_postscript_bytecode" "ml_gtk_math_view_export_to_postscript_native"
-  external get_font_manager_type : [>`math_view] obj ->
-   [`font_manager_gtk | `font_manager_t1] =
-   "ml_gtk_math_view_get_font_manager_type"
-  external set_font_manager_type : [>`math_view] obj ->
-    fm_type:[`font_manager_gtk | `font_manager_t1] -> unit =
-   "ml_gtk_math_view_set_font_manager_type"
-  
-  module Signals = struct
-    open GtkSignal
-
-    let click : ([>`math_view],_) t =
-     let marshal_click f _ =
-      function
-         [GtkArgv.POINTER element; GtkArgv.INT state] ->
-          f (gdome_element_option_of_boxed_option element) state
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_click"
-     in
-      { name = "click"; classe = `math_view; marshaller = marshal_click }
-
-    let element_over : ([>`math_view],_) t =
-     let marshal_element_over f _ =
-      function
-         [GtkArgv.POINTER element; GtkArgv.INT state] ->
-          f (gdome_element_option_of_boxed_option element) state
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_element_over"
-     in
-      { name = "element_over"; classe = `math_view;
-        marshaller = marshal_element_over }
-
-    let select_begin : ([>`math_view],_) t =
-     let marshal_select_begin f _ =
-      function
-         [GtkArgv.POINTER element; GtkArgv.INT state] ->
-          f (gdome_element_option_of_boxed_option element) state
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_select_begin"
-     in
-      { name = "select_begin"; classe = `math_view;
-        marshaller = marshal_select_begin }
-
-    let select_over : ([>`math_view],_) t =
-     let marshal_select_over f _ =
-      function
-         [GtkArgv.POINTER element; GtkArgv.INT state] ->
-          f (gdome_element_option_of_boxed_option element) state
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_select_over"
-     in
-      { name = "select_over"; classe = `math_view;
-        marshaller = marshal_select_over }
-
-    let select_end : ([>`math_view],_) t =
-     let marshal_select_end f _ =
-      function
-         [GtkArgv.POINTER element; GtkArgv.INT state] ->
-          f (gdome_element_option_of_boxed_option element) state
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_select_end"
-     in
-      { name = "select_end"; classe = `math_view;
-        marshaller = marshal_select_end }
-
-    let select_abort : ([>`math_view],_) t =
-     let marshal_select_abort f _ =
-      function
-         [] -> f ()
-       | _ -> invalid_arg "GtkMathView.MathView.Signals.marshal_select_abort"
-     in
-      { name = "select_abort"; classe = `math_view;
-        marshaller = marshal_select_abort }
-  end
-end
diff --git a/helm/DEVEL/lablgtkmathview/gtk_mathview.ml b/helm/DEVEL/lablgtkmathview/gtk_mathview.ml
deleted file mode 100644 (file)
index 5472acb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-(* Copyright (C) 2000-2003, Luca Padovani <luca.padovani@cs.unibo.it>,
- *                          Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>.
- *
- * This file is part of lablgtkmathview, the Ocaml binding
- * for the GtkMathView widget.
- * 
- * lablgtkmathview 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.
- *
- * lablgtkmathview 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 lablgtkmathview; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
-
-type math_view = [`widget|`container|`bin|`eventbox|`math_view|`base]
diff --git a/helm/DEVEL/lablgtkmathview/lablgtk/META.lablgtk b/helm/DEVEL/lablgtkmathview/lablgtk/META.lablgtk
deleted file mode 100644 (file)
index f70c5be..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-requires=""
-version="1.2.0"
-archive(byte)="lablgtk.cma lablgnome.cma gtkInit.cmo"
-archive(native)="lablgtk.cmxa lablgnome.cmxa gtkInit.cmx"
-linkopts=""
-directory="+lablgtk"
diff --git a/helm/DEVEL/lablgtkmathview/lablgtkmathview.spec.in b/helm/DEVEL/lablgtkmathview/lablgtkmathview.spec.in
deleted file mode 100644 (file)
index 8e7e6fd..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-Summary: The LablGTK binding for the GtkMathView widget
-Name: @PACKAGE@
-Version: @VERSION@
-Release: 1
-Copyright: GPL
-URL: http://www.cs.unibo.it/helm
-Packager: Luca Padovani <luca.padovani@cs.unibo.it>
-Requires: gtkmathview >= 0.2.2 ocaml >= 3.00 lablgtk
-Group: Applications/Publishing
-Source: www.cs.unibo.it:/~lpadovan/mml-widget/@PACKAGE@-@VERSION@.tar.gz
-%description
-The LablGTK binding for the GtkMathView widget
-
-%prep
-%setup
-
-%build
-./configure
-make configure
-
-%install
-make
-make opt
-make install
-
-%files
-%doc AUTHORS COPYING ChangeLog NEWS README
-/usr/lib/ocaml/lablgtkmathview
diff --git a/helm/DEVEL/lablgtkmathview/ml_gtk_mathview.c b/helm/DEVEL/lablgtkmathview/ml_gtk_mathview.c
deleted file mode 100644 (file)
index 9a7f98f..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/* Copyright (C) 2000-2003, Luca Padovani <luca.padovani@cs.unibo.it>,
- *                          Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>.
- *
- * This file is part of lablgtkmathview, the Ocaml binding
- * for the GtkMathView widget.
- * 
- * lablgtkmathview 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.
- *
- * lablgtkmathview 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 lablgtkmathview; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- */
-
-#include <assert.h>
-#include <string.h>
-#include <assert.h>
-#include <gtk/gtk.h>
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-#include <caml/callback.h>
-#include <caml/fail.h>
-
-#include <gtkmathview/gtkmathview.h>
-#include <ml_gtk.h>
-
-#include <wrappers.h>
-#include <ml_glib.h>
-#include <ml_gdk.h>
-#include <ml_gtk.h>
-#include <gtk_tags.h>
-
-#include <mlgdomevalue.h>
-
-#define GtkMathView_val(val) check_cast(GTK_MATH_VIEW,val)
-
-#define FontManagerId_val(val) Int_val(val)
-#define Val_FontManagerId(val) Val_int(val)
-
-/* As ML_1, but the result is optional */
-#define OML_1(cname, conv1, conv) \
-value ml_##cname (value arg1) { return Val_option_ptr((cname (conv1 (arg1))),conv); }
-/* As ML_3, but the result is optional */
-#define OML_3(cname, conv1, conv2, conv3, conv) \
-value ml_##cname (value arg1, value arg2, value arg3) { return Val_option_ptr((cname (conv1 (arg1), conv2 (arg2), conv3 (arg3))),conv); }
-/* As ML_2, but the second argument is optional */
-#define ML_2O(cname, conv1, conv2, conv) \
-value ml_##cname (value arg1, value arg2) \
-{ return conv (cname (conv1(arg1), ptr_val_option(arg2,conv2))); }
-
-FontManagerId
-font_manager_id_of_value(value v)
-{
-  if (v == hash_variant("font_manager_gtk")) return FONT_MANAGER_GTK;
-  else if (v == hash_variant("font_manager_t1")) return FONT_MANAGER_T1;
-  else assert(0);
-}
-
-value
-value_of_font_manager_id(FontManagerId id)
-{
-  switch (id) {
-  case FONT_MANAGER_GTK:
-    return hash_variant("font_manager_gtk");
-  case FONT_MANAGER_T1:
-    return hash_variant("font_manager_t1");
-  default:
-    assert(0);
-    break;
-  }
-}
-
-value Val_Element_ref(GdomeElement* elem)
-{
-  if (elem != NULL)
-    {
-      GdomeException exc = 0;
-      gdome_el_ref(elem, &exc);
-      g_assert(exc == 0);
-    }
-  return Val_Element(elem);
-}
-
-ML_2 (gtk_math_view_new,GtkAdjustment_val, GtkAdjustment_val, Val_GtkWidget_sink)
-ML_1 (gtk_math_view_freeze, GtkMathView_val, Unit)
-ML_1 (gtk_math_view_thaw, GtkMathView_val, Unit)
-ML_2 (gtk_math_view_load_uri, GtkMathView_val, String_val, Val_bool)
-ML_2 (gtk_math_view_load_doc, GtkMathView_val, Document_val, Val_bool)
-ML_1 (gtk_math_view_unload, GtkMathView_val, Unit)
-ML_2 (gtk_math_view_select, GtkMathView_val, Element_val, Unit)
-ML_2 (gtk_math_view_unselect, GtkMathView_val, Element_val, Unit)
-ML_2 (gtk_math_view_is_selected, GtkMathView_val, Element_val, Val_bool)
-OML_3 (gtk_math_view_get_element_at, GtkMathView_val, Int_val, Int_val, Val_Element)
-ML_1 (gtk_math_view_get_width, GtkMathView_val, Val_int)
-ML_1 (gtk_math_view_get_height, GtkMathView_val, Val_int)
-ML_3 (gtk_math_view_set_top, GtkMathView_val, Int_val, Int_val, Unit)
-ML_3 (gtk_math_view_set_adjustments, GtkMathView_val, GtkAdjustment_val, GtkAdjustment_val, Unit)
-ML_1 (gtk_math_view_get_hadjustment, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_vadjustment, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_buffer, GtkMathView_val, Val_GdkPixmap)
-ML_1 (gtk_math_view_get_frame, GtkMathView_val, Val_GtkWidget)
-ML_1 (gtk_math_view_get_drawing_area, GtkMathView_val, Val_GtkWidget)
-ML_2 (gtk_math_view_set_font_size, GtkMathView_val, Int_val, Unit)
-ML_1 (gtk_math_view_get_font_size, GtkMathView_val, Val_int)
-ML_2 (gtk_math_view_set_anti_aliasing, GtkMathView_val, Bool_val, Unit)
-ML_1 (gtk_math_view_get_anti_aliasing, GtkMathView_val, Val_bool)
-ML_2 (gtk_math_view_set_transparency, GtkMathView_val, Bool_val, Unit)
-ML_1 (gtk_math_view_get_transparency, GtkMathView_val, Val_bool)
-ML_2 (gtk_math_view_set_log_verbosity, GtkMathView_val, Int_val, Unit)
-ML_1 (gtk_math_view_get_log_verbosity, GtkMathView_val, Val_int)
-ML_2 (gtk_math_view_set_font_manager_type, GtkMathView_val, font_manager_id_of_value, Unit)
-ML_1 (gtk_math_view_get_font_manager_type, GtkMathView_val, value_of_font_manager_id)
-
-value
-ml_gtk_math_view_export_to_postscript_native(value arg1,
-               value w, value h, value x0, value y0, value disable_colors, value arg2)
-{
-   CAMLparam5(arg1,w,h,x0,y0);
-   CAMLxparam2(disable_colors, arg2);
-
-   char *filename;
-   FILE *fd;
-   int res;
-   filename = String_val (arg2);
-   if ((fd = fopen(filename, "w"))) {
-      gtk_math_view_export_to_postscript(GtkMathView_val (arg1),
-                     Int_val(w), Int_val(h), Int_val(x0), Int_val(y0), Bool_val(disable_colors), fd);
-      fclose (fd);
-      res = 1;
-   } else {
-      fprintf(stderr, "Error opening file %s for writing\n", filename);
-      res = 0;
-   }
-   CAMLreturn (Val_bool(res));
-}
-
-value ml_gtk_math_view_export_to_postscript_bytecode (value* arg, int argn)
-{
-   return ml_gtk_math_view_export_to_postscript_native(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6]);
-}
-
-value ml_gtk_math_view_get_top (value arg1)
-{
-   CAMLparam1(arg1);
-   CAMLlocal1 (result);
-   int x, y;
-   gtk_math_view_get_top(GtkMathView_val (arg1), &x, &y);
-   result = alloc(2, 0);
-   Store_field(result, 0, Val_int(x));
-   Store_field(result, 1, Val_int(y));
-   CAMLreturn (result);
-}
-
-/*
-value ml_gtk_math_view_get_element_coords (value arg1, value arg2)
-{
-  CAMLparam2(arg1, arg2);
-  CAMLlocal1 (result);
-  int x, y;
-  gtk_math_view_get_element_coords(GtkMathView_val (arg1), Element_val(arg2), &x, &y);
-  result = alloc(2, 0);
-  Store_field(result, 0, Val_int(x));
-  Store_field(result, 1, Val_int(y));
-  CAMLreturn (result);
-}
-*/
-
-value ml_gtk_math_view_gdome_element_of_boxed_option (value arg1)
-{
-   CAMLparam1(arg1);
-
-   GdomeException exc = 0;
-   GdomeElement* nr = NULL;
-   CAMLlocal1 (res);
-
-   if (arg1==Val_int(0)) {
-      assert(0);
-   } else {
-      nr = (GdomeElement*) Field(Field(arg1,0),1);
-   }
-
-   res = Val_Element_ref(nr);
-   if (res==Val_int(0)) {
-      assert(0);
-   }
-
-   CAMLreturn(res);
-}
-
-value ml_gtk_math_view_gdome_element_option_of_boxed_option (value arg1)
-{
-   CAMLparam1(arg1);
-
-   GdomeElement* nr;
-   CAMLlocal1 (valnr);
-   CAMLlocal1 (res);
-
-   if (arg1==Val_int(0)) {
-      res=Val_unit;
-   } else {
-      GdomeException exc = 0;
-      GdomeElement* elem = (GdomeElement*) Field(Field(arg1,0),1);
-      assert(elem != NULL);
-      res = Val_option_ptr(elem, Val_Element_ref);
-   }
-
-   CAMLreturn(res);
-}
-
diff --git a/helm/DEVEL/lablgtkmathview/test/.cvsignore b/helm/DEVEL/lablgtkmathview/test/.cvsignore
deleted file mode 100644 (file)
index b95eb22..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmo *.cmi *.cmx t1lib.log test test.opt test.ps test.o Makefile
diff --git a/helm/DEVEL/lablgtkmathview/test/Makefile.in b/helm/DEVEL/lablgtkmathview/test/Makefile.in
deleted file mode 100644 (file)
index 29ab71f..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-PACKAGE = @PACKAGE@
-MLFLAGS = -predicates "init"
-OCAMLC = ocamlfind ocamlc $(MLFLAGS)
-OCAMLOPT = ocamlfind ocamlopt $(MLFLAGS)
-TMPDIR = .test
-
-all: test
-opt: test.opt
-
-test: test.ml
-       $(OCAMLC) -package "$(PACKAGE)" -linkpkg -predicates "" -o $@ test.ml
-
-test.opt: test.ml
-       $(OCAMLOPT) -package "$(PACKAGE)" -linkpkg -predicates "" -o $@ test.ml
-
-clean:
-       rm -f *.cm[iox] *.o test test.opt t1lib.log test.ps
-
-distclean:
-       rm Makefile
diff --git a/helm/DEVEL/lablgtkmathview/test/t1.config b/helm/DEVEL/lablgtkmathview/test/t1.config
deleted file mode 100644 (file)
index afb669e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-ENCODING=.
-AFM=/usr/share/texmf/fonts/afm/
-TYPE1=/usr/share/texmf/fonts/type1/bluesky/cm/:/usr/X11R6/lib/X11/fonts/Type1/:.
diff --git a/helm/DEVEL/lablgtkmathview/test/test.ml b/helm/DEVEL/lablgtkmathview/test/test.ml
deleted file mode 100644 (file)
index 936f962..0000000
+++ /dev/null
@@ -1,479 +0,0 @@
-(* Copyright (C) 2000-2003, Luca Padovani <luca.padovani@cs.unibo.it>,
- *                          Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>.
- *
- * This file is part of lablgtkmathview, the Ocaml binding
- * for the GtkMathView widget.
- * 
- * lablgtkmathview 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.
- *
- * lablgtkmathview 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 lablgtkmathview; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
-
-(******************************************************************************)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 25/09/2000                                 *)
-(*                                                                            *)
-(*     This is a simple test for the OCaml (LablGtk indeed) binding of the    *)
-(*                             MathView widget                                *)
-(******************************************************************************)
-
-let helmns = Gdome.domString "http://www.cs.unibo.it/helm";;
-
-(*
-let choose_selection mmlwidget (element : Gdome.element option) =
- let module G = Gdome in
-  let rec aux element =
-   if element#hasAttributeNS
-       ~namespaceURI:Misc.helmns
-       ~localName:(G.domString "xref")
-   then
-     mmlwidget#set_selection (Some element)
-   else
-    try
-      match element#get_parentNode with
-         None -> assert false
-       (*CSC: OCAML DIVERGES!
-       | Some p -> aux (new G.element_of_node p)
-       *)
-       | Some p -> aux (new Gdome.element_of_node p)
-    with
-       GdomeInit.DOMCastException _ ->
-        prerr_endline
-         "******* trying to select above the document root ********"
-  in 
-   match element with
-     Some x -> aux x
-   | None   -> mmlwidget#set_selection None
-;;     
-*)
-
-(* Callbacks *)
-let selection_changed mathview (element : Gdome.element option) =
- let rec aux element =
-  if element#hasAttributeNS
-      ~namespaceURI:helmns
-      ~localName:(Gdome.domString "xref")
-  then
-   mathview#set_selection (Some element)
-  else
-   try
-     match element#get_parentNode with
-        None -> mathview#set_selection None
-      | Some p -> aux (new Gdome.element_of_node p)
-   with
-      GdomeInit.DOMCastException _ ->
-       prerr_endline "******* trying to select above the document root ********"
- in
- print_endline ("selection_changed: " ^
-  (match element with
-      None -> "selection_changed on nothing"
-    | Some element -> element#get_tagName#to_string
-  )
- ) ;
- match element with
-   None -> ()
- | Some el -> aux el;
- flush stdout
-;;
-
-let element_over mathview (element : Gdome.element option) _ =
- print_endline ("element_over: " ^
-  (match element with
-      None -> "element_over on nothing"
-    | Some element -> element#get_tagName#to_string
-  )
- ) ;
- flush stdout
-;;
-
-let rec jump (element : Gdome.element) =
- let module G = Gdome in
-  let attr = (element#getAttribute ~name:(G.domString "href"))#to_string in
-   if attr = "" then
-    match element#get_parentNode with
-       Some p ->
-        begin
-         try
-          jump (new Gdome.element_of_node p)
-         with
-          GdomeInit.DOMCastException _ ->
-           print_string "jump: NO HREF FOR THIS NODE\n" ;
-           flush stdout ;
-           false
-        end
-     | None -> assert false (* every element has a parent *)
-   else
-    begin
-     print_endline ("jump: " ^ attr) ;
-     flush stdout ;
-     true
-    end
-;;
-
-let rec action mathview (element : Gdome.element) =
- let module G = Gdome in
-  if element#get_tagName#to_string = "m:maction" then
-   let selection =
-    if element#hasAttribute ~name:(G.domString "selection") then
-     int_of_string (element#getAttribute ~name:(G.domString "selection"))#to_string
-    else
-     1
-   in
-    mathview#freeze ;
-    (* the widget will cast the index back into a reasonable range *)
-    element#setAttribute ~name:(G.domString "selection") ~value:(G.domString (string_of_int (selection + 1))) ;
-    mathview#thaw ;
-    true
-  else
-   match element#get_parentNode with
-      Some p ->
-       begin
-        try
-        action mathview (new Gdome.element_of_node p)
-       with
-        GdomeInit.DOMCastException _ ->
-         print_string "action: NO MACTION FOUND\n" ;
-         flush stdout ;
-         false
-       end
-     | None -> assert false (* every element has a parent *)
-
-let click mathview (element : Gdome.element option) _ =
- let module G = Gdome in
-  match element with
-     None -> print_string "CLICKED ON NOTHING\n" ; flush stdout
-   | Some element ->
-      if not (jump element) then
-      if not (mathview#action_toggle element) then
-       ()
-;;
-
-
-let activate_t1 mathview () =
- mathview#set_font_manager_type ~fm_type:`font_manager_t1;
- print_string "WIDGET SET WITH T1 FONTS\n" ;
- flush stdout
-;;
-
-let activate_gtk mathview () =
- mathview#set_font_manager_type ~fm_type:`font_manager_gtk ;
- print_string "WIDGET SET WITH GTK FONTS\n" ;
- flush stdout
-;;
-
-let get_font_manager_type mathview () =
- print_string "CURRENT FONT MANAGER TYPE: ";
- begin
-  match mathview#get_font_manager_type with
-  | `font_manager_t1 -> print_string "T1"
-  | `font_manager_gtk -> print_string "GTK"
- end;
- print_newline();
- flush stdout
-;;
-
-let get_transparency mathview () =
- print_string ("CURRENT TRANSPARENCY: " ^
-  (if mathview#get_transparency then "ON" else "OFF") ^ "\n") ;
- flush stdout
-;;
-
-let set_transparency mathview () =
- mathview#set_transparency (not mathview#get_transparency) ;
- print_string "TRANSPARENCY CHANGED\n" ;
- flush stdout
-;;
-
-
-let load_uri mathview () =
- mathview#load_uri ~filename:"test.xml" ;
- print_string "load: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let load_doc mathview () =
- mathview#load_doc ~dom:((Gdome.domImplementation ())#createDocumentFromURI ~uri:"test.xml" ()) ;
- print_string "load from DOM: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let test_get_selection mathview () =
- let selection =
-   match mathview#get_selection with
-      Some element -> element#get_tagName#to_string
-    | None -> "no selection!"
- in
-  print_string ("get_selection: " ^ selection ^ "\n") ;
-  flush stdout
-;;
-
-let test_set_selection mathview () =
- begin
-   match mathview#get_selection with
-      Some element -> 
-       begin
-        match element#get_parentNode with
-           Some p ->
-            begin
-             try
-              mathview#set_selection (Some (new Gdome.element_of_node p));
-              print_string "set selection: SEEMS TO WORK\n"
-             with
-              GdomeInit.DOMCastException _ ->
-               print_string "EXCEPTION: no parent\n"
-            end
-         | None -> assert false (* every element has a parent *)
-       end
-    | None ->
-       mathview#set_selection None;
-       print_string "no selection\n"
- end ;
- flush stdout
-;;
-
-let test_add_selection (mathview : GMathViewAux.multi_selection_math_view) () =
- match mathview#get_selection with
-    Some e -> mathview#add_selection e
-  | None ->
-     begin
-      print_string "no selection to add\n" ;
-      flush stdout
-     end
-;;
-
-let test_reset_selections (mathview : GMathViewAux.multi_selection_math_view) () =
- mathview#set_selection None ;
- mathview#remove_selections
-
-let unload mathview () =
- mathview#unload ;
- print_string "unload: SEEMS TO WORK\n" ;
- flush stdout
-;;
-
-let get_width mathview () =
- print_string ("get_width: " ^ string_of_int (mathview#get_width) ^ "\n") ;
- flush stdout
-;;
-
-let get_height mathview () =
- print_string ("get_height: " ^ string_of_int (mathview#get_height) ^ "\n") ;
- flush stdout
-;;
-
-let get_top mathview () =
- let (x,y) = mathview#get_top in
-  print_string ("get_top: ("^ string_of_int x ^ "," ^ string_of_int y ^ ")\n") ;
-  flush stdout
-;;
-
-let set_top mathview () =
- mathview#set_top 0 0;
- print_string "set_top: SEEM TO WORK\n" ;
- flush stdout
-;;
-
-let set_adjustments mathview () =
- let adj1 = GData.adjustment () in
- let adj2 = GData.adjustment () in
-  mathview#set_adjustments adj1 adj2 ;
-  adj1#set_value ((adj1#lower +. adj1#upper) /. 2.0) ;
-  adj2#set_value ((adj2#lower +. adj2#upper) /. 2.0) ;
-  print_string "set_adjustments: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_hadjustment mathview () =
- let adj = mathview#get_hadjustment in
-  adj#set_value ((adj#lower +. adj#upper) /. 2.0) ;
-  print_string "get_hadjustment: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_vadjustment mathview () =
- let adj = mathview#get_vadjustment in
-  adj#set_value ((adj#lower +. adj#upper) /. 2.0) ;
-  print_string "get_vadjustment: SEEM TO WORK\n" ;
-  flush stdout
-;;
-
-let get_buffer mathview () =
- let buffer = mathview#get_buffer in
-  Gdk.Draw.rectangle buffer (Gdk.GC.create buffer) ~x:0 ~y:0
-   ~width:50 ~height:50 ~filled:true () ;
-  print_string "get_buffer: SEEMS TO WORK (hint: force the widget redrawing)\n";
-  flush stdout
-;;
-
-let get_frame mathview () =
- let frame = mathview#get_frame in
-  frame#set_shadow_type `NONE ;
-  print_string "get_frame: SEEMS TO WORK\n" ;
-  flush stdout
-;;
-
-let set_font_size mathview () =
- mathview#set_font_size 24 ;
- print_string "set_font_size: FONT IS NOW 24\n" ;
- flush stdout
-;;
-let get_font_size mathview () =
- print_string ("get_font_size: " ^ string_of_int (mathview#get_font_size) ^ "\n") ;
- flush stdout
-;;
-let set_anti_aliasing mathview () =
- mathview#set_anti_aliasing true ;
- print_string "set_anti_aliasing: ON\n" ;
- flush stdout
-;;
-let get_anti_aliasing mathview () =
- print_string ("get_anti_aliasing: " ^
-  (match mathview#get_anti_aliasing with true -> "ON" | false -> "OFF") ^
-  "\n") ;
- flush stdout
-;;
- (*
-let set_kerning mathview () =
- mathview#set_kerning true ;
- print_string "set_kerning: ON\n" ;
- flush stdout
-;;
-let get_kerning mathview () =
- print_string ("get_kerning: " ^
-  (match mathview#get_kerning with true -> "ON" | false -> "OFF") ^
-  "\n") ;
- flush stdout
-;;
-*)
-
-let set_log_verbosity mathview () =
- mathview#set_log_verbosity 3 ;
- print_string "set_log_verbosity: NOW IS 3\n" ;
- flush stdout
-;;
-let get_log_verbosity mathview () =
- print_string ("get_log_verbosity: " ^
-  string_of_int mathview#get_log_verbosity ^
-  "\n") ;
- flush stdout
-;;
-
-let export_to_postscript (mathview : GMathViewAux.multi_selection_math_view) () =
- mathview#export_to_postscript ~filename:"test.ps" ();
- print_string "expor_to_postscript: SEEMS TO WORK (hint: look at test.ps)\n";
- flush stdout
-;;
-let x_coord = ref 0
-;;
-
-let get_element_at mathview () =
- begin
-  match mathview#get_element_at !x_coord 10 with
-     None -> print_string ("there is no element at " ^ (string_of_int !x_coord) ^ " 10\n")
-   | Some e -> print_string ("at " ^ (string_of_int !x_coord) ^ " 10 found element " ^ (e#get_nodeName#to_string) ^ "\n")
- end ;
- x_coord := !x_coord + 10 ;
- flush stdout
-;;
-
-let get_drawing_area mathview () =
- begin
-  let da = mathview#get_drawing_area in
-  print_string ("don't know what to do with the drawing area\n")
- end ;
- flush stdout
-;;
-
-(* Widget creation *)
-let main_window = GWindow.window ~title:"GtkMathView test" () in
-let vbox = GPack.vbox ~packing:main_window#add () in
-let sw = GBin.scrolled_window ~width:50 ~height:50 ~packing:vbox#pack () in
-let mathview= GMathViewAux.multi_selection_math_view ~packing:sw#add ~width:50 ~height:50 () in
-let table = GPack.table ~rows:6 ~columns:5 ~packing:vbox#pack () in
-let button_gtk=GButton.button ~label:"activate Gtk fonts" ~packing:(table#attach ~left:0 ~top:0) () in
-let button_load = GButton.button ~label:"load" ~packing:(table#attach ~left:1 ~top:0) () in
-let button_unload = GButton.button ~label:"unload" ~packing:(table#attach ~left:2 ~top:0) () in
-let button_get_selection = GButton.button ~label:"get_selection" ~packing:(table#attach ~left:3 ~top:0) () in
-let button_set_selection = GButton.button ~label:"set_selection" ~packing:(table#attach ~left:4 ~top:0) () in
-let button_add_selection = GButton.button ~label:"add_selection" ~packing:(table#attach ~left:3 ~top:3) () in
-let button_reset_selections = GButton.button ~label:"reset_selections" ~packing:(table#attach ~left:4 ~top:3) () in
-let button_get_width = GButton.button ~label:"get_width" ~packing:(table#attach ~left:0 ~top:1) () in
-let button_get_height = GButton.button ~label:"get_height" ~packing:(table#attach ~left:1 ~top:1) () in
-let button_get_top = GButton.button ~label:"get_top" ~packing:(table#attach ~left:2 ~top:1) () in
-let button_set_top = GButton.button ~label:"set_top" ~packing:(table#attach ~left:3 ~top:1) () in
-let button_set_adjustments = GButton.button ~label:"set_adjustments" ~packing:(table#attach ~left:4 ~top:1) () in
-let button_get_hadjustment = GButton.button ~label:"get_hadjustment" ~packing:(table#attach ~left:0 ~top:2) () in
-let button_get_vadjustment = GButton.button ~label:"get_vadjustment" ~packing:(table#attach ~left:1 ~top:2) () in
-let button_get_buffer = GButton.button ~label:"get_buffer" ~packing:(table#attach ~left:2 ~top:2) () in
-let button_get_frame = GButton.button ~label:"get_frame" ~packing:(table#attach ~left:3 ~top:2) () in
-let button_set_font_size = GButton.button ~label:"set_font_size" ~packing:(table#attach ~left:4 ~top:2) () in
-let button_get_font_size = GButton.button ~label:"get_font_size" ~packing:(table#attach ~left:0 ~top:3) () in
-let button_set_anti_aliasing = GButton.button ~label:"set_anti_aliasing" ~packing:(table#attach ~left:1 ~top:3) () in
-let button_get_anti_aliasing = GButton.button ~label:"get_anti_aliasing" ~packing:(table#attach ~left:2 ~top:3) () in
-let button_set_log_verbosity = GButton.button ~label:"set_log_verbosity" ~packing:(table#attach ~left:0 ~top:4) () in
-let button_get_log_verbosity = GButton.button ~label:"get_log_verbosity" ~packing:(table#attach ~left:1 ~top:4) () in
-let button_export_to_postscript = GButton.button ~label:"export_to_postscript" ~packing:(table#attach ~left:2 ~top:4) () in
-let button_t1 = GButton.button ~label:"activate T1 fonts" ~packing:(table#attach ~left:3 ~top:4) () in
-let button_get_font_manager_type = GButton.button ~label:"get_font_manager" ~packing:(table#attach ~left:4 ~top:4) () in
-let button_get_transparency = GButton.button ~label:"get_transparency" ~packing:(table#attach ~left:0 ~top:5) () in
-let button_set_transparency = GButton.button ~label:"set_transparency" ~packing:(table#attach ~left:1 ~top:5) () in
-let button_load_dom = GButton.button ~label:"load from DOM" ~packing:(table#attach ~left:2 ~top:5) () in
-let button_get_element_at = GButton.button ~label:"get_element_at" ~packing:(table#attach ~left:3 ~top:5) () in
-let button_get_drawing_area = GButton.button ~label:"get_drawing_area" ~packing:(table#attach ~left:4 ~top:5) () in
-(* Signals connection *)
-ignore(button_gtk#connect#clicked (activate_gtk mathview)) ;
-ignore(button_load#connect#clicked (load_uri mathview)) ;
-ignore(button_unload#connect#clicked (unload mathview)) ;
-ignore(button_get_selection#connect#clicked (test_get_selection mathview)) ;
-ignore(button_set_selection#connect#clicked (test_set_selection mathview)) ;
-ignore(button_add_selection#connect#clicked (test_add_selection mathview)) ;
-ignore(button_reset_selections#connect#clicked (test_reset_selections mathview)) ;
-ignore(button_get_width#connect#clicked (get_width mathview)) ;
-ignore(button_get_height#connect#clicked (get_height mathview)) ;
-ignore(button_get_top#connect#clicked (get_top mathview)) ;
-ignore(button_set_top#connect#clicked (set_top mathview)) ;
-ignore(button_set_adjustments#connect#clicked (set_adjustments mathview)) ;
-ignore(button_get_hadjustment#connect#clicked (get_hadjustment mathview)) ;
-ignore(button_get_vadjustment#connect#clicked (get_vadjustment mathview)) ;
-ignore(button_get_buffer#connect#clicked (get_buffer mathview)) ;
-ignore(button_get_frame#connect#clicked (get_frame mathview)) ;
-ignore(button_set_font_size#connect#clicked (set_font_size mathview)) ;
-ignore(button_get_font_size#connect#clicked (get_font_size mathview)) ;
-ignore(button_set_anti_aliasing#connect#clicked (set_anti_aliasing mathview)) ;
-ignore(button_get_anti_aliasing#connect#clicked (get_anti_aliasing mathview)) ;
-ignore(button_set_log_verbosity#connect#clicked (set_log_verbosity mathview)) ;
-ignore(button_get_log_verbosity#connect#clicked (get_log_verbosity mathview)) ;
-ignore(button_export_to_postscript#connect#clicked (export_to_postscript mathview)) ;
-ignore(button_t1#connect#clicked (activate_t1 mathview)) ;
-ignore(button_get_font_manager_type#connect#clicked (get_font_manager_type mathview)) ;
-ignore(button_get_transparency#connect#clicked (get_transparency mathview)) ;
-ignore(button_set_transparency#connect#clicked (set_transparency mathview)) ;
-ignore(mathview#connect#click (click mathview)) ;
-ignore(mathview#connect#selection_changed (selection_changed mathview));
-ignore(mathview#connect#element_over (element_over mathview)) ;
-ignore(button_load_dom#connect#clicked (load_doc mathview)) ;
-ignore(button_get_element_at#connect#clicked (get_element_at mathview)) ;
-ignore(button_get_drawing_area#connect#clicked (get_drawing_area mathview)) ;
-(* Main Loop *)
-main_window#show () ;
-GMain.Main.main ()
-;;
diff --git a/helm/DEVEL/lablgtkmathview/test/test.xml b/helm/DEVEL/lablgtkmathview/test/test.xml
deleted file mode 100644 (file)
index a29bcda..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE m:math [
- <!ENTITY InvisibleTimes "&#x02062;">
- <!ENTITY ApplyFunction "&#x02061;">
- <!ENTITY int "&#x0222B;">
-]>
-
-<m:math display="block" xmlns:helm="http://www.cs.unibo.it/helm" xmlns:m="http://www.w3.org/1998/Math/MathML">
-  <m:mrow helm:xref="SELECTION OK">
-    <m:mo>&int;</m:mo>
-    <m:mo>&ApplyFunction;</m:mo>
-    <m:mfrac>
-      <m:maction>
-       <m:mtext>It's a secret!</m:mtext>
-       <m:mrow>
-         <m:mrow>
-           <m:mi>a</m:mi>
-          <m:mo>&InvisibleTimes;</m:mo>
-          <m:mi>x</m:mi>
-        </m:mrow>
-        <m:mo>+</m:mo>
-        <m:mi>b</m:mi>
-       </m:mrow>
-      </m:maction>
-      <m:mrow>
-        <m:msup helm:xref="A">
-         <m:mi>x</m:mi>
-         <m:mn>2</m:mn>
-       </m:msup>
-       <m:mo>+</m:mo>
-       <m:mrow helm:xref="B">
-         <m:mi>p</m:mi>
-         <m:mo>&InvisibleTimes;</m:mo>
-         <m:mi>x</m:mi>
-       </m:mrow>
-       <m:mo>+</m:mo>
-       <m:mi>q</m:mi>
-      </m:mrow>
-    </m:mfrac>
-  </m:mrow>
-  <m:mo fontstyle="italic">d</m:mo>
-  <m:mi>x</m:mi>
-  <m:mo>=</m:mo>
-  <m:mrow>
-    <m:mrow>
-      <m:mfrac><m:mi>a</m:mi><m:mn>2</m:mn></m:mfrac>
-      <m:mo>&InvisibleTimes;</m:mo>
-      <m:mrow>
-        <m:mi>ln</m:mi>
-       <m:mo>&ApplyFunction;</m:mo>
-       <m:mrow>
-         <m:mo>(</m:mo>
-         <m:mrow>
-           <m:msup><m:mi>x</m:mi><m:mn>2</m:mn></m:msup>
-           <m:mo>+</m:mo>
-           <m:mrow>
-             <m:mi>p</m:mi>
-             <m:mo>&InvisibleTimes;</m:mo>
-             <m:mi>x</m:mi>
-           </m:mrow>
-           <m:mo>+</m:mo>
-           <m:mi>q</m:mi>
-         </m:mrow>
-         <m:mo>)</m:mo>
-       </m:mrow>
-      </m:mrow>
-    </m:mrow>
-    <m:mo>+</m:mo>
-    <m:mrow>
-      <m:mfrac>
-        <m:mrow>
-         <m:mrow>
-           <m:mn>2</m:mn>
-           <m:mo>&InvisibleTimes;</m:mo>
-           <m:mi>b</m:mi>
-         </m:mrow>
-         <m:mo>-</m:mo>
-         <m:mrow>
-           <m:mi>a</m:mi>
-           <m:mo>&InvisibleTimes;</m:mo>
-           <m:mi>p</m:mi>
-         </m:mrow>
-       </m:mrow>
-       <m:msqrt>
-         <m:mrow>
-           <m:mrow>
-             <m:mn>4</m:mn>
-             <m:mo>&InvisibleTimes;</m:mo>
-             <m:mi>q</m:mi>
-           </m:mrow>
-           <m:mo>-</m:mo>
-           <m:msup>
-             <m:mi>p</m:mi>
-             <m:mn>2</m:mn>
-           </m:msup>
-         </m:mrow>
-       </m:msqrt>
-      </m:mfrac>
-      <m:mo>&InvisibleTimes;</m:mo>
-      <m:mrow>
-        <m:mi xlink:href="JUMPS WORK">arctg</m:mi>
-       <m:mo>&ApplyFunction;</m:mo>
-       <m:mfrac>
-         <m:mrow>
-           <m:mrow>
-             <m:mn>2</m:mn>
-             <m:mo>&InvisibleTimes;</m:mo>
-             <m:mi>x</m:mi>
-           </m:mrow>
-           <m:mo>+</m:mo>
-           <m:mi>p</m:mi>
-         </m:mrow>
-         <m:msqrt>
-           <m:mrow>
-             <m:mrow>
-               <m:mn>4</m:mn>
-               <m:mo>&InvisibleTimes;</m:mo>
-               <m:mi>q</m:mi>
-             </m:mrow>
-             <m:mo>-</m:mo>
-             <m:msup>
-               <m:mi>p</m:mi>
-               <m:mn>2</m:mn>
-             </m:msup>
-           </m:mrow>
-         </m:msqrt>
-       </m:mfrac>
-      </m:mrow>
-    </m:mrow>
-    <m:mo>+</m:mo>
-    <m:mi>c</m:mi>
-  </m:mrow>  
-</m:math>
diff --git a/helm/DEVEL/mathml_editor/.cvsignore b/helm/DEVEL/mathml_editor/.cvsignore
deleted file mode 100644 (file)
index aa01254..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Makefile
-Makefile.in
-aclocal.m4
-autom4te.cache
-config.h
-config.h.in
-config.log
-config.status
-configure
-editex-config
-libtool
-result.xml
-stamp-h
-stamp-h.in
-t1lib.log
-editex.pc
diff --git a/helm/DEVEL/mathml_editor/.log b/helm/DEVEL/mathml_editor/.log
deleted file mode 100644 (file)
index 3971d5a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-This is TeX, Version 3.14159 (Web2C 7.3.7) (format=tex 2002.8.9)  23 NOV 2002 18:34
-**$$\root 3 \of x+1$$
-(/usr/share/texmf/tex/latex/tools/.tex File ignored)
-! Missing $ inserted.
-<inserted text> 
-                $
-<to be read again> 
-                   \mathchoice 
-\mathpalette #1#2->\mathchoice 
-                               {#1\displaystyle {#2}}{#1\textstyle {#2}}{#1\...
-<*> $$\root 3 \of x
-                   +1$$
-? 
-
-*
-! Emergency stop.
-<*> $$\root 3 \of x+1$$
-                       
-End of file on the terminal!
-
-No pages of output.
diff --git a/helm/DEVEL/mathml_editor/AUTHORS b/helm/DEVEL/mathml_editor/AUTHORS
deleted file mode 100644 (file)
index 7cec839..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Luca Padovani <lpadovan@cs.unibo.it>
-Paolo Marinelli <pmarinel@cs.unibo.it>
diff --git a/helm/DEVEL/mathml_editor/BROWSE b/helm/DEVEL/mathml_editor/BROWSE
deleted file mode 100644 (file)
index c14c1d2..0000000
+++ /dev/null
@@ -1,503 +0,0 @@
-[ebrowse-hs "ebrowse 5.0" " -x" () ()][ebrowse-ts [ebrowse-cs "APushParser" () 0"src/APushParser.hh" "class APushParser
-{" 75"src/APushParser.hh" ]
-([ebrowse-ts [ebrowse-cs "TPushParser" () 0"src/TPushParser.hh" "class TPushParser :" 226"src/TPushParser.hh" ]
-()([ebrowse-ms "buffer" () 0 () "  std::list<TToken> buffer;" 1306 2  () () 0]
-[ebrowse-ms "cursor" () 0 () "  TNode     cursor;" 1363 2  () () 0]
-[ebrowse-ms "doc" () 0 () "  TDocument doc;" 1343 2  () () 0]
-[ebrowse-ms "frames" () 0 () "  std::stack<Frame> frames;" 1278 2  () () 0]
-[ebrowse-ms "nextId" () 0 () "  unsigned  nextId;" 1326 2  () () 0]
-)
-([ebrowse-ms "PRIME" () 4 () "  std::string PRIME(void" 490 2  "src/TPushParser.cc" "TPushParser::PRIME()" 279]
-[ebrowse-ms "TPushParser" () 0 () () 0 0  "src/TPushParser.cc" "TPushParser::TPushParser(const TDictionary& d) :" 58]
-[ebrowse-ms "TPushParser" () 0 () "  TPushParser(const class TDictionary&);" 275 0  () () 0]
-[ebrowse-ms "advance" () 0 () "  void advance(const" 1065 2  "src/TPushParser.cc" "TPushParser::advance(const" 13192]
-[ebrowse-ms "do_active" () 0 () "  void do_active(const" 916 2  "src/TPushParser.cc" "TPushParser::do_active(const" 5602]
-[ebrowse-ms "do_align" () 0 () "  void do_align(void" 624 2  "src/TPushParser.cc" "TPushParser::do_align()" 1530]
-[ebrowse-ms "do_apostrophe" () 0 () "  void do_apostrophe(void" 1042 2  "src/TPushParser.cc" "TPushParser::do_apostrophe()" 4611]
-[ebrowse-ms "do_begin" () 0 () "  void do_begin(void" 557 2  "src/TPushParser.cc" "TPushParser::do_begin()" 461]
-[ebrowse-ms "do_comment" () 0 () "  void do_comment(void" 954 2  "src/TPushParser.cc" "TPushParser::do_comment()" 5668]
-[ebrowse-ms "do_control" () 0 () "  void do_control(const" 980 2  "src/TPushParser.cc" "TPushParser::do_control(const" 6337]
-[ebrowse-ms "do_cr" () 0 () "  void do_cr(void" 1014 2  "src/TPushParser.cc" "TPushParser::do_cr()" 5708]
-[ebrowse-ms "do_digit" () 0 () "  void do_digit(const" 841 2  "src/TPushParser.cc" "TPushParser::do_digit(const" 4072]
-[ebrowse-ms "do_end" () 0 () "  void do_end(void" 578 2  "src/TPushParser.cc" "TPushParser::do_end()" 910]
-[ebrowse-ms "do_eol" () 0 () "  void do_eol(void" 645 2  "src/TPushParser.cc" "TPushParser::do_eol()" 2464]
-[ebrowse-ms "do_letter" () 0 () "  void do_letter(const" 804 2  "src/TPushParser.cc" "TPushParser::do_letter(const" 3902]
-[ebrowse-ms "do_other" () 0 () "  void do_other(const" 878 2  "src/TPushParser.cc" "TPushParser::do_other(const" 5303]
-[ebrowse-ms "do_parameter" () 0 () "  void do_parameter(const" 673 2  "src/TPushParser.cc" "TPushParser::do_parameter(const" 2546]
-[ebrowse-ms "do_shift" () 0 () "  void do_shift(void" 601 2  "src/TPushParser.cc" "TPushParser::do_shift()" 1487]
-[ebrowse-ms "do_space" () 0 () "  void do_space(const" 766 2  "src/TPushParser.cc" "TPushParser::do_space(const" 3794]
-[ebrowse-ms "do_subscript" () 0 () "  void do_subscript(void" 742 2  "src/TPushParser.cc" "TPushParser::do_subscript()" 2609]
-[ebrowse-ms "do_superscript" () 0 () "  void do_superscript(void" 715 2  "src/TPushParser.cc" "TPushParser::do_superscript()" 3204]
-[ebrowse-ms "document" () 4 () "  TDocument document(void" 432 0  () "  TDocument document(void" 432]
-[ebrowse-ms "isPrimes" () 4 () "  bool isPrimes(const" 520 2  "src/TPushParser.cc" "TPushParser::isPrimes(const" 4445]
-[ebrowse-ms "process" () 0 () "  void process(const" 1096 2  "src/TPushParser.cc" "TPushParser::process(const" 8538]
-[ebrowse-ms "push" () 1 () "  virtual void push(const" 349 0  "src/TPushParser.cc" "TPushParser::push(const" 9379]
-[ebrowse-ms "setCursor" () 1 () "  virtual void setCursor(const" 390 0  "src/TPushParser.cc" "TPushParser::setCursor(const" 13865]
-[ebrowse-ms "~TPushParser" () 1 () "  virtual ~TPushParser()" 321 0  "src/TPushParser.cc" "TPushParser::~TPushParser()" 241]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TTokenizer" () 0"src/TTokenizer.hh" "class TTokenizer :" 173"src/TTokenizer.hh" ]
-()([ebrowse-ms "tokens" () 0 () "  std::list<TToken> tokens;" 405 2  () () 0]
-)
-([ebrowse-ms "TTokenizer" () 0 () "  TTokenizer(void) {" 221 0  () "  TTokenizer(void) {" 221]
-[ebrowse-ms "push" () 1 () "  virtual void push(const" 316 2  "src/TTokenizer.cc" "TTokenizer::push(const" 471]
-[ebrowse-ms "setCursor" () 1 () "  virtual void setCursor(const" 357 2  () "  virtual void setCursor(const" 357]
-[ebrowse-ms "tokenize" () 0 () "  std::vector<TToken> tokenize(const" 265 0  "src/TTokenizer.cc" "TTokenizer::tokenize(const" 120]
-)
-()
-()
-()
-()
-()()
-])()
-([ebrowse-ms "APushParser" () 0 () "  APushParser(void) {" 102 0  () "  APushParser(void) {" 102]
-[ebrowse-ms "push" () 9 () "  virtual void push(const" 164 0  () () 0]
-[ebrowse-ms "setCursor" () 9 () "  virtual void setCursor(const" 209 0  () () 0]
-[ebrowse-ms "~APushParser" () 1 () "  virtual ~APushParser()" 133 0  () "  virtual ~APushParser()" 133]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "EmptyBuffer" "TLexerPush" 0"src/TLexerPush.hh" "  class EmptyBuffer {" 271() ]
-()()
-()
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "unary_function" "std" 32() () 0() ]
-([ebrowse-ts [ebrowse-cs "StringHash" "TDictionary" 0"src/TDictionary.hh" "  struct StringHash :" 1160"src/TDictionary.hh" ]
-()()
-([ebrowse-ms "operator ()" () 4 () "  { size_t operator()(const" 1238 0  () "  { size_t operator()(const" 1238]
-)
-()
-()
-()
-()
-()()
-])()
-()
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TObject" () 0"src/TObject.hh" "class TObject
-{" 63"src/TObject.hh" ]
-()()
-([ebrowse-ms "TObject" () 0 () "  TObject(void) {" 89 1  () "  TObject(void) {" 89]
-[ebrowse-ms "ref" () 4 () "  void ref(coid" 162 0  () "  void ref(coid" 162]
-[ebrowse-ms "unref" () 4 () "  void unref(void" 206 0  () "  void unref(void" 206]
-[ebrowse-ms "~TObject" () 1 () "  virtual ~TObject()" 132 1  () "  virtual ~TObject()" 132]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "std" () 0() () 0() ]
-()()
-()
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TLexerPush" () 0"src/TLexerPush.hh" "class TLexerPush
-{" 59"src/TLexerPush.hh" ]
-()([ebrowse-ms "state" () 0 () "  State state;" 388 2  () () 0]
-[ebrowse-ms "tokens" () 0 () "  std::deque<TToken> tokens;" 417 2  () () 0]
-)
-([ebrowse-ms "TLexerPush" () 0 () "  TLexerPush(void);" 85 0  "src/TLexerPush.cc" "TLexerPush::TLexerPush()
-{" 51]
-[ebrowse-ms "ambiguous" () 4 () "  bool   ambiguous(void" 182 0  "src/TLexerPush.cc" "TLexerPush::ambiguous()" 576]
-[ebrowse-ms "empty" () 4 () "  bool   empty(void" 240 0  "src/TLexerPush.cc" "TLexerPush::empty()" 447]
-[ebrowse-ms "front" () 4 () "  TToken front(void" 150 0  "src/TLexerPush.cc" "TLexerPush::front()" 338]
-[ebrowse-ms "pending" () 4 () "  bool   pending(void" 212 0  "src/TLexerPush.cc" "TLexerPush::pending()" 510]
-[ebrowse-ms "pop" () 0 () "  TToken pop(void" 128 0  "src/TLexerPush.cc" "TLexerPush::pop()" 99]
-[ebrowse-ms "push" () 0 () "  void   push(TChar" 108 0  "src/TLexerPush.cc" "TLexerPush::push(TChar" 664]
-)
-()
-()
-()
-([ebrowse-ms "State" () 0 () "    {" 303 2  () "    {" 303]
-)
-()()
-][ebrowse-ts [ebrowse-cs "TLexerPull" () 0() () 0"src/TLexerPull.cc" ]
-()()
-([ebrowse-ms "pop" () 0 () () 0 0  () "TLexerPull::pop(TCharStream" 94]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TDictionary" () 0"src/TDictionary.hh" "class TDictionary
-{" 154"src/TDictionary.hh" ]
-()([ebrowse-ms "entries" () 0 () "  Dictionary entries;" 1560 2  () () 0]
-)
-([ebrowse-ms "TDictionary" () 0 () "  TDictionary(void) {" 181 0  () "  TDictionary(void) {" 181]
-[ebrowse-ms "find" () 4 () "  const Entry& find(const" 1107 0  "src/TDictionary.cc" "TDictionary::find(const" 3723]
-[ebrowse-ms "load" () 0 () "  void load(const" 1069 0  "src/TDictionary.cc" "TDictionary::load(const" 162]
-[ebrowse-ms "~TDictionary" () 0 () "  ~TDictionary()" 204 0  () "  ~TDictionary()" 204]
-)
-()
-()
-()
-([ebrowse-ms "Dictionary" () 0 () "ap< std::string, Entry, StringHash > Dictionary;" 1538 2  () () 0]
-[ebrowse-ms "EntryClass" () 0 () "    {" 301 0  () "    {" 301]
-[ebrowse-ms "Form" () 0 () "    {" 228 0  () "    {" 228]
-)
-()()
-][ebrowse-ts [ebrowse-cs "DOM" () 0() () 0() ]
-()()
-()
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "APushLexer" () 0"src/APushLexer.hh" "class APushLexer
-{" 72"src/APushLexer.hh" ]
-([ebrowse-ts [ebrowse-cs "TPushLexer" () 0"src/TPushLexer.hh" "class TPushLexer :" 117"src/TPushLexer.hh" ]
-()([ebrowse-ms "buffer" () 0 () "  std::string buffer;" 483 2  () () 0]
-[ebrowse-ms "state" () 0 () "  State state;" 461 2  () () 0]
-)
-([ebrowse-ms "TPushLexer" () 0 () () 0 0  "src/TPushLexer.cc" "TPushLexer::TPushLexer(APushParser& p) :" 108]
-[ebrowse-ms "TPushLexer" () 0 () "  TPushLexer(class APushParser&);" 164 0  () () 0]
-[ebrowse-ms "error" () 5 () "  virtual bool error(void" 290 0  "src/TPushLexer.cc" "TPushLexer::error()" 2463]
-[ebrowse-ms "push" () 1 () "  virtual void push(char" 234 0  "src/TPushLexer.cc" "TPushLexer::push(char" 1180]
-[ebrowse-ms "reset" () 1 () "  virtual void reset(void" 262 0  "src/TPushLexer.cc" "TPushLexer::reset()" 176]
-[ebrowse-ms "transaction" () 0 () "  void transaction(char" 436 2  "src/TPushLexer.cc" "TPushLexer::transaction(char" 251]
-[ebrowse-ms "~TPushLexer" () 1 () "  virtual ~TPushLexer()" 203 0  () "  virtual ~TPushLexer()" 203]
-)
-()
-()
-()
-([ebrowse-ms "State" () 0 () "    {" 327 2  () "    {" 327]
-)
-()()
-])()
-([ebrowse-ms "APushLexer" () 0 () "  APushLexer(class APushParser& p) :" 99 0  () "  APushLexer(class APushParser& p) :" 99]
-[ebrowse-ms "error" () 13 () "  virtual bool error(void" 251 0  () () 0]
-[ebrowse-ms "push" () 9 () "  virtual void push(char" 187 0  () () 0]
-[ebrowse-ms "reset" () 9 () "  virtual void reset(void" 219 0  () () 0]
-[ebrowse-ms "~APushLexer" () 1 () "  virtual ~APushLexer()" 156 0  () "  virtual ~APushLexer()" 156]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "Ptr" () 32"src/Ptr.hh" "class Ptr
-{" 1067"src/Ptr.hh" ]
-()([ebrowse-ms "ptr" () 0 () "  P* ptr;" 1797 2  () () 0]
-)
-([ebrowse-ms "P" () 4 () "  operator P*()" 1487 0  () "  operator P*()" 1487]
-[ebrowse-ms "Ptr" () 0 () "  Ptr(const Ptr& p) :" 1142 0  () "  Ptr(const Ptr& p) :" 1142]
-[ebrowse-ms "Ptr" () 0 () "  Ptr(P* p = 0) :" 1083 0  () "  Ptr(P* p = 0) :" 1083]
-[ebrowse-ms "Q" () 36 () "  template <class Q> operator Ptr<Q>()" 1747 0  () "  template <class Q> operator Ptr<Q>()" 1747]
-[ebrowse-ms "operator ->" () 4 () "  P* operator->()" 1253 0  () "  P* operator->()" 1253]
-[ebrowse-ms "operator =" () 0 () "  Ptr& operator=(const" 1316 0  () "  Ptr& operator=(const" 1316]
-[ebrowse-ms "~Ptr" () 0 () "  ~Ptr()" 1202 0  () "  ~Ptr()" 1202]
-)
-()
-()
-([ebrowse-ms "is_a" () 32 () "  template <class Q> friend bool is_a(const" 1659 0  () "  template <class Q> friend bool is_a(const" 1659]
-[ebrowse-ms "smart_cast" () 32 () "emplate <class Q> friend Ptr<Q> smart_cast(const" 1561 0  () "emplate <class Q> friend Ptr<Q> smart_cast(const" 1561]
-)
-()
-()()
-][ebrowse-ts [ebrowse-cs "TToken" () 0"src/TToken.hh" "struct TToken
-{" 80"src/TToken.hh" ]
-()([ebrowse-ms "category" () 0 () "  TCat        category;" 627 0  () () 0]
-[ebrowse-ms "value" () 0 () "  std::string value;" 648 0  () () 0]
-)
-([ebrowse-ms "TToken" () 0 () "  TToken(TCat c, const std::string& v) :" 438 0  () "  TToken(TCat c, const std::string& v) :" 438]
-[ebrowse-ms "TToken" () 0 () "  TToken(TCat c, char ch) :" 366 0  () "  TToken(TCat c, char ch) :" 366]
-[ebrowse-ms "TToken" () 0 () "  TToken(TCat c) :" 330 0  () "  TToken(TCat c) :" 330]
-[ebrowse-ms "operator ==" () 4 () "  bool operator==(const" 517 0  () "  bool operator==(const" 517]
-)
-()
-()
-()
-([ebrowse-ms "TCat" () 0 () "    {" 98 0  () "    {" 98]
-)
-()()
-][ebrowse-ts [ebrowse-cs "binary_function" "std" 32() () 0() ]
-([ebrowse-ts [ebrowse-cs "StringEq" "TDictionary" 0"src/TDictionary.hh" "  struct StringEq :" 1327() ]
-()()
-([ebrowse-ms "operator ()" () 4 () "  { bool operator()(const" 1415 0  () () 0]
-)
-()
-()
-()
-()
-()()
-])()
-()
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TNode" () 0"src/TNode.hh" "class TNode
-{" 124"src/TNode.hh" ]
-()([ebrowse-ms "node" () 0 () "  DOM::Element node;" 2444 2  () () 0]
-)
-([ebrowse-ms "TNode" () 0 () "  TNode(const TNode& n) :" 270 0  () "  TNode(const TNode& n) :" 270]
-[ebrowse-ms "TNode" () 0 () "  TNode(void) :" 145 0  () "  TNode(void) :" 145]
-[ebrowse-ms "append" () 4 () "  void  append(const" 1667 0  "src/TNode.cc" "TNode::append(const" 2450]
-[ebrowse-ms "append" () 4 () "  void  append(const" 1631 0  "src/TNode.cc" "TNode::append(const" 2348]
-[ebrowse-ms "child" () 4 () "  TNode child(unsigned" 592 0  "src/TNode.cc" "TNode::child(unsigned" 2874]
-[ebrowse-ms "core" () 4 () "  TNode core(void" 425 0  "src/TNode.cc" "TNode::core()" 1413]
-[ebrowse-ms "empty" () 4 () "  bool  empty(void" 648 0  () "  bool  empty(void" 648]
-[ebrowse-ms "first" () 4 () "  TNode first(void" 480 0  "src/TNode.cc" "TNode::first()" 1075]
-[ebrowse-ms "firstL" () 4 () "  TNode firstL(void" 508 0  "src/TNode.cc" "TNode::firstL()" 1259]
-[ebrowse-ms "get" () 4 () "  std::string get(const" 1758 0  "src/TNode.cc" "TNode::get(const" 3007]
-[ebrowse-ms "hasId" () 4 () "  bool  hasId(void" 1994 0  () "  bool  hasId(void" 1994]
-[ebrowse-ms "insert" () 4 () "  void  insert(const" 1595 0  "src/TNode.cc" "TNode::insert(const" 2193]
-[ebrowse-ms "is" () 4 () "  bool  is(const" 2055 0  () "  bool  is(const" 2055]
-[ebrowse-ms "isC" () 4 () "  bool  isC(const" 2303 0  () "  bool  isC(const" 2303]
-[ebrowse-ms "isC" () 4 () "  bool  isC(void" 2258 0  () "  bool  isC(void" 2258]
-[ebrowse-ms "isG" () 4 () "  bool  isG(void" 2119 0  () "  bool  isG(void" 2119]
-[ebrowse-ms "isSb" () 4 () "  bool  isSb(void" 2165 0  () "  bool  isSb(void" 2165]
-[ebrowse-ms "isSp" () 4 () "  bool  isSp(void" 2212 0  () "  bool  isSp(void" 2212]
-[ebrowse-ms "last" () 4 () "  TNode last(void" 534 0  "src/TNode.cc" "TNode::last()" 736]
-[ebrowse-ms "lastL" () 4 () "  TNode lastL(void" 561 0  "src/TNode.cc" "TNode::lastL()" 922]
-[ebrowse-ms "name" () 4 () "  std::string name(void" 1863 0  () "  std::string name(void" 1863]
-[ebrowse-ms "nameC" () 4 () "  std::string nameC(void" 1929 0  () "  std::string nameC(void" 1929]
-[ebrowse-ms "next" () 4 () "  TNode next(void" 319 0  "src/TNode.cc" "TNode::next()" 63]
-[ebrowse-ms "nextL" () 4 () "  TNode nextL(void" 346 0  "src/TNode.cc" "TNode::nextL()" 247]
-[ebrowse-ms "operator !=" () 4 () "  bool operator!=(const" 1295 0  () "  bool operator!=(const" 1295]
-[ebrowse-ms "operator ==" () 4 () "  bool operator==(const" 1227 0  () "  bool operator==(const" 1227]
-[ebrowse-ms "operator []" () 4 () "  ProxyAttr operator[](const" 1422 0  () "  ProxyAttr operator[](const" 1422]
-[ebrowse-ms "operator []" () 4 () "  TNode operator[](int" 1362 0  () "  TNode operator[](int" 1362]
-[ebrowse-ms "parent" () 4 () "  TNode parent(void" 453 0  "src/TNode.cc" "TNode::parent()" 1587]
-[ebrowse-ms "prepend" () 4 () "  void  prepend(const" 1718 0  "src/TNode.cc" "TNode::prepend(const" 2683]
-[ebrowse-ms "prev" () 4 () "  TNode prev(void" 372 0  "src/TNode.cc" "TNode::prev()" 396]
-[ebrowse-ms "prevL" () 4 () "  TNode prevL(void" 399 0  "src/TNode.cc" "TNode::prevL()" 588]
-[ebrowse-ms "remove" () 4 () "  void  remove(void" 1529 0  "src/TNode.cc" "TNode::remove()" 1913]
-[ebrowse-ms "replace" () 4 () "  void  replace(const" 1559 0  "src/TNode.cc" "TNode::replace(const" 2038]
-[ebrowse-ms "set" () 4 () "  void  set(const" 1797 0  "src/TNode.cc" "TNode::set(const" 3109]
-[ebrowse-ms "size" () 4 () "  unsigned size(void" 621 0  "src/TNode.cc" "TNode::size()" 1749]
-[ebrowse-ms "value" () 4 () "  std::string value(void" 707 0  () "  std::string value(void" 707]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "Entry" "TDictionary" 0"src/TDictionary.hh" "  struct Entry
-  {" 405"src/TDictionary.hh" ]
-()([ebrowse-ms "cls" () 0 () "    EntryClass cls;" 806 0  () () 0]
-[ebrowse-ms "delimiter" () 0 () "    unsigned delimiter : 1;" 909 0  () () 0]
-[ebrowse-ms "embellishment" () 0 () "    unsigned embellishment : 1;" 966 0  () () 0]
-[ebrowse-ms "infix" () 0 () "    unsigned infix : 8;" 830 0  () () 0]
-[ebrowse-ms "leftOpen" () 0 () "    unsigned leftOpen : 1;" 993 0  () () 0]
-[ebrowse-ms "limits" () 0 () "    unsigned limits : 1;" 934 0  () () 0]
-[ebrowse-ms "pattern" () 0 () "    std::vector<TToken> pattern;" 597 0  () () 0]
-[ebrowse-ms "postfix" () 0 () "    unsigned postfix : 8;" 881 0  () () 0]
-[ebrowse-ms "prefix" () 0 () "    unsigned prefix : 8;" 855 0  () () 0]
-[ebrowse-ms "rightOpen" () 0 () "    unsigned rightOpen : 1;" 1021 0  () () 0]
-[ebrowse-ms "table" () 0 () "    unsigned table : 1;" 1045 0  () () 0]
-[ebrowse-ms "value" () 0 () "    std::string value;" 620 0  () () 0]
-)
-([ebrowse-ms "Entry" () 0 () "    {" 420 0  () "    {" 420]
-[ebrowse-ms "defined" () 4 () "    bool defined(void" 643 0  () "    bool defined(void" 643]
-[ebrowse-ms "hasArguments" () 4 () "    bool hasArguments(void" 707 0  () "    bool hasArguments(void" 707]
-[ebrowse-ms "paramDelimited" () 4 () "    bool paramDelimited(unsigned" 777 0  "src/TDictionary.cc" "TDictionary::Entry::paramDelimited(unsigned" 4012]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "Frame" "TPushParser" 0"src/TPushParser.hh" "  struct Frame
-  {" 1126"src/TPushParser.hh" ]
-()([ebrowse-ms "entry" () 0 () "    const TDictionary::Entry& entry;" 1226 0  () () 0]
-[ebrowse-ms "pos" () 0 () "    unsigned pos;" 1244 0  () () 0]
-)
-([ebrowse-ms "Frame" () 0 () "    Frame(const TDictionary::Entry& e) :" 1142 0  () "    Frame(const TDictionary::Entry& e) :" 1142]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TCharStream" () 0"src/TCharStream.hh" "class TCharStream
-{" 94"src/TCharStream.hh" ]
-([ebrowse-ts [ebrowse-cs "TCharStreamString" () 0"src/TCharStreamString.hh" "class TCharStreamString :" 120"src/TCharStreamString.hh" ]
-()([ebrowse-ms "buffer" () 0 () "  TString buffer;" 555 2  () () 0]
-[ebrowse-ms "idx" () 0 () "  unsigned long idx;" 536 2  () () 0]
-)
-([ebrowse-ms "TCharStreamString" () 0 () "  TCharStreamString(const TString& s) :" 175 0  () "  TCharStreamString(const TString& s) :" 175]
-[ebrowse-ms "look" () 5 () "  virtual TChar look(void" 343 0  () "  virtual TChar look(void" 343]
-[ebrowse-ms "more" () 5 () "  virtual bool  more(void" 275 0  () "  virtual bool  more(void" 275]
-[ebrowse-ms "next" () 1 () "  virtual TChar next(void" 439 0  () "  virtual TChar next(void" 439]
-[ebrowse-ms "~TCharStreamString" () 1 () "  virtual ~TCharStreamString()" 243 0  () "  virtual ~TCharStreamString()" 243]
-)
-()
-()
-()
-()
-()()
-])()
-([ebrowse-ms "TCharStream" () 0 () "  TCharStream(void) {" 121 0  () "  TCharStream(void) {" 121]
-[ebrowse-ms "look" () 13 () "  virtual TChar look(void" 222 0  () () 0]
-[ebrowse-ms "more" () 13 () "  virtual bool  more(void" 184 0  () () 0]
-[ebrowse-ms "next" () 9 () "  virtual TChar next(void" 260 0  () () 0]
-[ebrowse-ms "~TCharStream" () 1 () "  virtual ~TCharStream()" 152 0  () "  virtual ~TCharStream()" 152]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "EmptyStream" "TCharStream" 0"src/TCharStream.hh" "  class EmptyStream {" 289() ]
-()()
-()
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "*Globals*" () 0() () 0"src/APushLexer.hh" ]
-()()
-([ebrowse-ms "dispatch" () 0 "src/special.cc" "dispatch(const" 1012 0  "src/special.cc" "dispatch(const" 1012]
-[ebrowse-ms "do_apostrophe" () 0 "src/special.cc" "do_apostrophe(const" 669 0  "src/special.cc" "do_apostrophe(const" 669]
-[ebrowse-ms "do_bgroup" () 0 "src/special.cc" "do_bgroup(const" 149 0  "src/special.cc" "do_bgroup(const" 149]
-[ebrowse-ms "do_control" () 0 "src/special.cc" "do_control(const" 711 0  "src/special.cc" "do_control(const" 711]
-[ebrowse-ms "do_other" () 0 "src/special.cc" "do_other(const" 776 0  "src/special.cc" "do_other(const" 776]
-[ebrowse-ms "finishG" () 0 "src/special.cc" "void finishG(const" 118 0  () () 0]
-[ebrowse-ms "getCore" () 0 "src/domnav.cc" "getCore(const" 629 0  "src/domnav.cc" "getCore(const" 629]
-[ebrowse-ms "getRightmostChild" () 0 "src/domnav.cc" "getRightmostChild(const" 37 0  "src/domnav.cc" "getRightmostChild(const" 37]
-[ebrowse-ms "isDelimiter" () 0 "src/domnav.cc" "isDelimiter(const" 1716 0  "src/domnav.cc" "isDelimiter(const" 1716]
-[ebrowse-ms "isFunction" () 0 "src/domnav.cc" "isFunction(const" 1879 0  "src/domnav.cc" "isFunction(const" 1879]
-[ebrowse-ms "isGroup" () 0 "src/domnav.cc" "isGroup(const" 1214 0  "src/domnav.cc" "isGroup(const" 1214]
-[ebrowse-ms "isInferred" () 0 "src/domnav.cc" "isInferred(const" 985 0  "src/domnav.cc" "isInferred(const" 985]
-[ebrowse-ms "isMacro" () 0 "src/domnav.cc" "isMacro(const" 1085 0  "src/domnav.cc" "isMacro(const" 1085]
-[ebrowse-ms "isOperator" () 0 "src/domnav.cc" "isOperator(const" 1553 0  "src/domnav.cc" "isOperator(const" 1553]
-[ebrowse-ms "isPrimes" () 0 "src/domnav.cc" "isPrimes(const" 1451 0  "src/domnav.cc" "isPrimes(const" 1451]
-[ebrowse-ms "isSb" () 0 "src/domnav.cc" "isSb(const" 1291 0  "src/domnav.cc" "isSb(const" 1291]
-[ebrowse-ms "isSp" () 0 "src/domnav.cc" "isSp(const" 1369 0  "src/domnav.cc" "isSp(const" 1369]
-[ebrowse-ms "isUnicodeAlpha" () 2 "src/dom.hh" "inline bool isUnicodeAlpha(TChar" 303 0  "src/dom.hh" "inline bool isUnicodeAlpha(TChar" 303]
-[ebrowse-ms "isUnicodeDigit" () 2 "src/dom.hh" "inline bool isUnicodeDigit(TChar" 408 0  "src/dom.hh" "inline bool isUnicodeDigit(TChar" 408]
-[ebrowse-ms "isUnicodeSpace" () 2 "src/dom.hh" "inline bool isUnicodeSpace(TChar" 198 0  "src/dom.hh" "inline bool isUnicodeSpace(TChar" 198]
-[ebrowse-ms "main" () 0 "src/texlexer.cc" "main()" 51 0  "src/texlexer.cc" "main()" 51]
-[ebrowse-ms "prevLinearSibling" () 0 "src/domnav.cc" "prevLinearSibling(const" 324 0  "src/domnav.cc" "prevLinearSibling(const" 324]
-[ebrowse-ms "replace" () 0 "src/domnav.cc" "replace(const" 834 0  "src/domnav.cc" "replace(const" 834]
-[ebrowse-ms "tokenize" () 0 "src/tokenizer.hh" "std::vector<TToken> tokenize(const" 123 0  () () 0]
-)
-([ebrowse-ms "undefinedEntry" () 0 () () 0 0  "src/TDictionary.cc" "static TDictionary::Entry undefinedEntry;" 132]
-)
-()
-([ebrowse-ms "Ptr_hh" () 512 () () 0 0  "src/Ptr.hh" "#define Ptr_hh
-" 1036]
-[ebrowse-ms "TML_NS_URI" () 512 () () 0 0  "src/globals.hh" "#define TML_NS_URI " 67]
-[ebrowse-ms "XMLNS_NS_URI" () 512 () () 0 0  "src/globals.hh" "#define XMLNS_NS_URI " 123]
-[ebrowse-ms "__APushLexer_hh__" () 512 () () 0 0  () "#define __APushLexer_hh__
-" 53]
-[ebrowse-ms "__APushParser_hh__" () 512 () () 0 0  "src/APushParser.hh" "#define __APushParser_hh__
-" 55]
-[ebrowse-ms "__TCharStreamString_hh__" () 512 () () 0 0  "src/TCharStreamString.hh" "#define __TCharStreamString_hh__
-" 67]
-[ebrowse-ms "__TCharStream_hh__" () 512 () () 0 0  "src/TCharStream.hh" "#define __TCharStream_hh__
-" 55]
-[ebrowse-ms "__TDictionary_hh__" () 512 () () 0 0  "src/TDictionary.hh" "#define __TDictionary_hh__
-" 55]
-[ebrowse-ms "__TDocument_hh__" () 512 () () 0 0  "src/TDocument.hh" "#define __TDocument_hh__
-" 51]
-[ebrowse-ms "__TNode_hh__" () 512 () () 0 0  "src/TNode.hh" "#define __TNode_hh__
-" 43]
-[ebrowse-ms "__TObject_hh__" () 512 () () 0 0  "src/TObject.hh" "#define __TObject_hh__
-" 47]
-[ebrowse-ms "__TPushLexer_hh__" () 512 () () 0 0  "src/TPushLexer.hh" "#define __TPushLexer_hh__
-" 53]
-[ebrowse-ms "__TPushParser_hh__" () 512 () () 0 0  "src/TPushParser.hh" "#define __TPushParser_hh__
-" 55]
-[ebrowse-ms "__TToken_hh__" () 512 () () 0 0  "src/TToken.hh" "#define __TToken_hh__
-" 45]
-[ebrowse-ms "__TTokenizer_hh__" () 512 () () 0 0  "src/TTokenizer.hh" "#define __TTokenizer_hh__
-" 53]
-[ebrowse-ms "__dom_hh__" () 512 () () 0 0  "src/dom.hh" "#define __dom_hh__
-" 39]
-[ebrowse-ms "__globals_hh__" () 512 () () 0 0  "src/globals.hh" "#define __globals_hh__
-" 47]
-[ebrowse-ms "__tokenzier_hh__" () 512 () () 0 0  "src/tokenizer.hh" "#define __tokenzier_hh__
-" 51]
-)
-([ebrowse-ms "TChar" () 0 () () 0 0  "src/dom.hh" "typedef DOM::Char32     TChar;" 131]
-[ebrowse-ms "TString" () 0 () () 0 0  "src/dom.hh" "typedef DOM::UCS4String TString;" 164]
-)
-()()
-][ebrowse-ts [ebrowse-cs "ProxyAttr" "TNode" 0"src/TNode.hh" "  class ProxyAttr
-  {" 765"src/TNode.hh" ]
-()([ebrowse-ms "name" () 0 () "    std::string  name;" 1155 2  () () 0]
-[ebrowse-ms "node" () 0 () "    DOM::Element node;" 1132 2  () () 0]
-)
-([ebrowse-ms "ProxyAttr" () 0 () "r(const DOM::Element& n, const std::string& s) :" 795 0  () "r(const DOM::Element& n, const std::string& s) :" 795]
-[ebrowse-ms "operator =" () 0 () "    ProxyAttr& operator=(const" 959 0  () "    ProxyAttr& operator=(const" 959]
-[ebrowse-ms "operator ==" () 0 () "    bool       operator==(const" 1040 0  () "    bool       operator==(const" 1040]
-[ebrowse-ms "string" () 4 () "    operator std::string()" 885 0  () "    operator std::string()" 885]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "EventListener" "DOM" 0() () 0() ]
-([ebrowse-ts [ebrowse-cs "DOMSubtreeModifiedListener" "TDocument" 0"src/TDocument.hh" "  class DOMSubtreeModifiedListener :" 1015"src/TDocument.hh" ]
-()([ebrowse-ms "doc" () 0 () "    TDocument doc;" 1247 2  () () 0]
-)
-([ebrowse-ms "DOMSubtreeModifiedListener" () 0 () "DOMSubtreeModifiedListener(const TDocument& d) :" 1092 0  () "DOMSubtreeModifiedListener(const TDocument& d) :" 1092]
-[ebrowse-ms "handleEvent" () 1 () "    virtual void handleEvent(const" 1202 0  () () 0]
-[ebrowse-ms "~DOMSubtreeModifiedListener" () 1 () "    virtual ~DOMSubtreeModifiedListener()" 1162 0  () "    virtual ~DOMSubtreeModifiedListener()" 1162]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TDocument" () 0"src/TDocument.hh" "class TDocument :" 108"src/TDocument.hh" ]
-()([ebrowse-ms "dirty" () 0 () "  DOM::Element dirty;" 971 2  () () 0]
-[ebrowse-ms "doc" () 0 () "  DOM::Document doc;" 949 2  () () 0]
-)
-([ebrowse-ms "TDocument" () 0 () "  TDocument(void);" 162 0  "src/TDocument.cc" "TDocument::TDocument()
-{" 108]
-[ebrowse-ms "create" () 4 () "  TNode create(const" 202 0  "src/TDocument.cc" "TDocument::create(const" 789]
-[ebrowse-ms "createC" () 4 () "  TNode createC(const" 327 0  "src/TDocument.cc" "TDocument::createC(const" 1062]
-[ebrowse-ms "createG" () 4 () "  TNode createG(unsigned" 262 0  () "  TNode createG(unsigned" 262]
-[ebrowse-ms "createI" () 4 () "  TNode createI(const" 461 0  () "  TNode createI(const" 461]
-[ebrowse-ms "createN" () 4 () "  TNode createN(const" 561 0  () "  TNode createN(const" 561]
-[ebrowse-ms "createO" () 4 () "  TNode createO(const" 661 0  () "  TNode createO(const" 661]
-[ebrowse-ms "createT" () 4 () "  TNode createT(const" 384 0  "src/TDocument.cc" "TDocument::createT(const" 1197]
-[ebrowse-ms "dirtyIdNode" () 4 () "  TNode dirtyIdNode(void" 872 0  "src/TDocument.cc" "TDocument::dirtyIdNode()" 2081]
-[ebrowse-ms "dirtyNode" () 4 () "  TNode dirtyNode(void" 821 0  () "  TNode dirtyNode(void" 821]
-[ebrowse-ms "handleEvent" () 1 () "  virtual void handleEvent(const" 1293 2  "src/TDocument.cc" "TDocument::handleEvent(const" 2348]
-[ebrowse-ms "root" () 0 () "  TNode root(void" 758 0  () "  TNode root(void" 758]
-[ebrowse-ms "serialize" () 4 () "  void serialize(const" 904 0  "src/TDocument.cc" "TDocument::serialize(const" 637]
-[ebrowse-ms "~TDocument" () 0 () "  ~TDocument()" 179 0  "src/TDocument.cc" "TDocument::~TDocument()" 460]
-)
-()
-([ebrowse-ms "findCommonAncestor" () 0 () "  static DOM::Node findCommonAncestor(const" 1398 2  "src/TDocument.cc" "TDocument::findCommonAncestor(const" 1560]
-[ebrowse-ms "nodeDepth" () 0 () "  static unsigned nodeDepth(const" 1341 2  "src/TDocument.cc" "TDocument::nodeDepth(const" 1362]
-)
-()
-()
-()()
-])()
-()
-()
-()
-()
-()
-()()
-]
\ No newline at end of file
diff --git a/helm/DEVEL/mathml_editor/BUGS b/helm/DEVEL/mathml_editor/BUGS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/mathml_editor/BUGS-GDOME2 b/helm/DEVEL/mathml_editor/BUGS-GDOME2
deleted file mode 100644 (file)
index 5f75635..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-* /usr/lib is given by gdome-config
-* should optimize event propagation, remember only those nodes with
-  listeners
diff --git a/helm/DEVEL/mathml_editor/ChangeLog b/helm/DEVEL/mathml_editor/ChangeLog
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/mathml_editor/LICENSE b/helm/DEVEL/mathml_editor/LICENSE
deleted file mode 100644 (file)
index 567f3dc..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
diff --git a/helm/DEVEL/mathml_editor/MODES b/helm/DEVEL/mathml_editor/MODES
deleted file mode 100644 (file)
index 39032e3..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-there are two basic syntactic modes:
-
-TeX mode:
-
-* any letter is an identifier by itself
-
-Program mode:
-
-* sequences of letters (and possibly other characters)
-  are collapsed into a single token. Id tokens are separated
-  by any other character not included in one of the collapsing
-  categories.
-
-The mode is a property of the parser.
-
-there are two basic semantic modes:
-
-math mode:
-
-* implicit operator is multiplication
-
-program mode:
-
-* implicit operator is function application
diff --git a/helm/DEVEL/mathml_editor/Makefile.am b/helm/DEVEL/mathml_editor/Makefile.am
deleted file mode 100644 (file)
index 01765d5..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-DISTDIR = @PACKAGE@-@VERSION@
-
-EXTRA_DIST = BUGS LICENSE BUGS-GDOME2 MODES PATTERNS aclocal.m4 debian/ editex.pc.in
-SUBDIRS = src test ocaml textomml xsl dict
-CLEANFILES = core
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = editex.pc
-
-backup:
-       cd ..; tar cvfz @PACKAGE@-@VERSION@-`date|tr ' ' '_'|tr ':' '_'`.tar.gz @PACKAGE@
-
-cleanbak:
-       -rm -f `find . -name "*~"`
-
-lc:
-       @( \
-       CFILES=`find . -name "*.c"`; \
-       HFILES=`find . -name "*.h"`; \
-       CCFILES=`find . -name "*.cc"`; \
-       HHFILES=`find . -name "*.hh"`; \
-       ICCFILES=`find . -name "*.icc"`; \
-       wc -l $$CFILES $$HFILES $$CCFILES $$HHFILES $$ICCFILES | tail -n 1 \
-       )
-
-deb: dist
-       if [ -d $(DISTDIR)/ ]; then rm -rf $(DISTDIR); else true; fi
-       tar xvzf $(DISTDIR).tar.gz
-       (cd $(DISTDIR)/ && debuild)
-       rm -rf $(DISTDIR)
-
diff --git a/helm/DEVEL/mathml_editor/Makefile.in b/helm/DEVEL/mathml_editor/Makefile.in
deleted file mode 100644 (file)
index b66feab..0000000
+++ /dev/null
@@ -1,438 +0,0 @@
-# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
-
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-SHELL = @SHELL@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = .
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-host_alias = @host_alias@
-host_triplet = @host@
-AS = @AS@
-CC = @CC@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-DLLTOOL = @DLLTOOL@
-ECHO = @ECHO@
-EDITEX_VERSION_INFO = @EDITEX_VERSION_INFO@
-EXEEXT = @EXEEXT@
-GDOMEXSLT_CFLAGS = @GDOMEXSLT_CFLAGS@
-GDOMEXSLT_LIBS = @GDOMEXSLT_LIBS@
-GMETADOM_CFLAGS = @GMETADOM_CFLAGS@
-GMETADOM_LIBS = @GMETADOM_LIBS@
-GTKMATHVIEW_CFLAGS = @GTKMATHVIEW_CFLAGS@
-GTKMATHVIEW_LIBS = @GTKMATHVIEW_LIBS@
-HAVE_OCAMLC = @HAVE_OCAMLC@
-HAVE_OCAMLDEP = @HAVE_OCAMLDEP@
-HAVE_OCAMLFIND = @HAVE_OCAMLFIND@
-HAVE_OCAMLMKLIB = @HAVE_OCAMLMKLIB@
-HAVE_OCAMLOPT = @HAVE_OCAMLOPT@
-LDFLAGS = @LDFLAGS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
-MLGDOME_CFLAGS = @MLGDOME_CFLAGS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OCAMLC = @OCAMLC@
-OCAMLDEP = @OCAMLDEP@
-OCAMLFIND = @OCAMLFIND@
-OCAMLMKLIB = @OCAMLMKLIB@
-OCAMLOPT = @OCAMLOPT@
-OCAMLSTDLIBDIR = @OCAMLSTDLIBDIR@
-OCAMLSTUBDIR = @OCAMLSTUBDIR@
-OCAML_INCLUDE_DIR = @OCAML_INCLUDE_DIR@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-STRIP = @STRIP@
-VERSION = @VERSION@
-
-EXTRA_DIST = BUGS LICENSE aclocal.m4
-SUBDIRS = src test ocaml textomml
-CLEANFILES = core
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = editex.pc
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES =  editex.pc
-DATA =  $(pkgconfig_DATA)
-
-DIST_COMMON =  README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
-Makefile.am Makefile.in NEWS TODO aclocal.m4 config.guess config.h.in \
-config.sub configure configure.ac editex.pc.in install-sh ltmain.sh \
-missing mkinstalldirs
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP_ENV = --best
-all: all-redirect
-.SUFFIXES:
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 
-       cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile
-
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
-       cd $(top_builddir) \
-         && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-$(ACLOCAL_M4):  configure.ac 
-       cd $(srcdir) && $(ACLOCAL)
-
-config.status: $(srcdir)/configure.ac $(CONFIG_STATUS_DEPENDENCIES)
-       $(SHELL) ./config.status --recheck
-$(srcdir)/configure: $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
-       cd $(srcdir) && $(AUTOCONF)
-
-config.h: stamp-h
-       @if test ! -f $@; then \
-               rm -f stamp-h; \
-               $(MAKE) stamp-h; \
-       else :; fi
-stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
-       cd $(top_builddir) \
-         && CONFIG_FILES= CONFIG_HEADERS=config.h \
-            $(SHELL) ./config.status
-       @echo timestamp > stamp-h 2> /dev/null
-$(srcdir)/config.h.in: $(srcdir)/stamp-h.in
-       @if test ! -f $@; then \
-               rm -f $(srcdir)/stamp-h.in; \
-               $(MAKE) $(srcdir)/stamp-h.in; \
-       else :; fi
-$(srcdir)/stamp-h.in: $(top_srcdir)/configure.ac $(ACLOCAL_M4) 
-       cd $(top_srcdir) && $(AUTOHEADER)
-       @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
-
-mostlyclean-hdr:
-
-clean-hdr:
-
-distclean-hdr:
-       -rm -f config.h
-
-maintainer-clean-hdr:
-editex.pc: $(top_builddir)/config.status editex.pc.in
-       cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-install-pkgconfigDATA: $(pkgconfig_DATA)
-       @$(NORMAL_INSTALL)
-       $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir)
-       @list='$(pkgconfig_DATA)'; for p in $$list; do \
-         if test -f $(srcdir)/$$p; then \
-           echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p"; \
-           $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p; \
-         else if test -f $$p; then \
-           echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p"; \
-           $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p; \
-         fi; fi; \
-       done
-
-uninstall-pkgconfigDATA:
-       @$(NORMAL_UNINSTALL)
-       list='$(pkgconfig_DATA)'; for p in $$list; do \
-         rm -f $(DESTDIR)$(pkgconfigdir)/$$p; \
-       done
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-
-@SET_MAKE@
-
-all-recursive install-data-recursive install-exec-recursive \
-installdirs-recursive install-recursive uninstall-recursive  \
-check-recursive installcheck-recursive info-recursive dvi-recursive:
-       @set fnord $(MAKEFLAGS); amf=$$2; \
-       dot_seen=no; \
-       target=`echo $@ | sed s/-recursive//`; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           dot_seen=yes; \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-          || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
-       done; \
-       if test "$$dot_seen" = "no"; then \
-         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-       fi; test -z "$$fail"
-
-mostlyclean-recursive clean-recursive distclean-recursive \
-maintainer-clean-recursive:
-       @set fnord $(MAKEFLAGS); amf=$$2; \
-       dot_seen=no; \
-       rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
-         rev="$$subdir $$rev"; \
-         test "$$subdir" = "." && dot_seen=yes; \
-       done; \
-       test "$$dot_seen" = "no" && rev=". $$rev"; \
-       target=`echo $@ | sed s/-recursive//`; \
-       for subdir in $$rev; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-          || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
-       done && test -z "$$fail"
-tags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-       done
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP)
-       list='$(SOURCES) $(HEADERS)'; \
-       unique=`for i in $$list; do echo $$i; done | \
-         awk '    { files[$$0] = 1; } \
-              END { for (i in files) print i; }'`; \
-       here=`pwd` && cd $(srcdir) \
-         && mkid -f$$here/ID $$unique $(LISP)
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
-       tags=; \
-       here=`pwd`; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-   if test "$$subdir" = .; then :; else \
-           test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
-   fi; \
-       done; \
-       list='$(SOURCES) $(HEADERS)'; \
-       unique=`for i in $$list; do echo $$i; done | \
-         awk '    { files[$$0] = 1; } \
-              END { for (i in files) print i; }'`; \
-       test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
-         || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
-
-mostlyclean-tags:
-
-clean-tags:
-
-distclean-tags:
-       -rm -f TAGS ID
-
-maintainer-clean-tags:
-
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-
-# This target untars the dist file and tries a VPATH configuration.  Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
-       -rm -rf $(distdir)
-       GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
-       mkdir $(distdir)/=build
-       mkdir $(distdir)/=inst
-       dc_install_base=`cd $(distdir)/=inst && pwd`; \
-       cd $(distdir)/=build \
-         && ../configure --srcdir=.. --prefix=$$dc_install_base \
-         && $(MAKE) $(AM_MAKEFLAGS) \
-         && $(MAKE) $(AM_MAKEFLAGS) dvi \
-         && $(MAKE) $(AM_MAKEFLAGS) check \
-         && $(MAKE) $(AM_MAKEFLAGS) install \
-         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-         && $(MAKE) $(AM_MAKEFLAGS) dist
-       -rm -rf $(distdir)
-       @banner="$(distdir).tar.gz is ready for distribution"; \
-       dashes=`echo "$$banner" | sed s/./=/g`; \
-       echo "$$dashes"; \
-       echo "$$banner"; \
-       echo "$$dashes"
-dist: distdir
-       -chmod -R a+r $(distdir)
-       GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
-       -rm -rf $(distdir)
-dist-all: distdir
-       -chmod -R a+r $(distdir)
-       GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
-       -rm -rf $(distdir)
-distdir: $(DISTFILES)
-       -rm -rf $(distdir)
-       mkdir $(distdir)
-       -chmod 777 $(distdir)
-       here=`cd $(top_builddir) && pwd`; \
-       top_distdir=`cd $(distdir) && pwd`; \
-       distdir=`cd $(distdir) && pwd`; \
-       cd $(top_srcdir) \
-         && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Makefile
-       @for file in $(DISTFILES); do \
-         d=$(srcdir); \
-         if test -d $$d/$$file; then \
-           cp -pr $$d/$$file $(distdir)/$$file; \
-         else \
-           test -f $(distdir)/$$file \
-           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
-           || cp -p $$d/$$file $(distdir)/$$file || :; \
-         fi; \
-       done
-       for subdir in $(SUBDIRS); do \
-         if test "$$subdir" = .; then :; else \
-           test -d $(distdir)/$$subdir \
-           || mkdir $(distdir)/$$subdir \
-           || exit 1; \
-           chmod 777 $(distdir)/$$subdir; \
-           (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
-             || exit 1; \
-         fi; \
-       done
-info-am:
-info: info-recursive
-dvi-am:
-dvi: dvi-recursive
-check-am: all-am
-check: check-recursive
-installcheck-am:
-installcheck: installcheck-recursive
-all-recursive-am: config.h
-       $(MAKE) $(AM_MAKEFLAGS) all-recursive
-
-install-exec-am:
-install-exec: install-exec-recursive
-
-install-data-am: install-pkgconfigDATA
-install-data: install-data-recursive
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-recursive
-uninstall-am: uninstall-pkgconfigDATA
-uninstall: uninstall-recursive
-all-am: Makefile $(DATA) config.h
-all-redirect: all-recursive-am
-install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs: installdirs-recursive
-installdirs-am:
-       $(mkinstalldirs)  $(DESTDIR)$(pkgconfigdir)
-
-
-mostlyclean-generic:
-
-clean-generic:
-       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-       -rm -f Makefile $(CONFIG_CLEAN_FILES)
-       -rm -f config.cache config.log stamp-h stamp-h[0-9]*
-
-maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-hdr mostlyclean-tags mostlyclean-generic
-
-mostlyclean: mostlyclean-recursive
-
-clean-am:  clean-hdr clean-tags clean-generic mostlyclean-am
-
-clean: clean-recursive
-
-distclean-am:  distclean-hdr distclean-tags distclean-generic clean-am
-       -rm -f libtool
-
-distclean: distclean-recursive
-       -rm -f config.status
-
-maintainer-clean-am:  maintainer-clean-hdr maintainer-clean-tags \
-               maintainer-clean-generic distclean-am
-       @echo "This command is intended for maintainers to use;"
-       @echo "it deletes files that may require special tools to rebuild."
-
-maintainer-clean: maintainer-clean-recursive
-       -rm -f config.status
-
-.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
-uninstall-pkgconfigDATA install-pkgconfigDATA install-data-recursive \
-uninstall-data-recursive install-exec-recursive \
-uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
-all-recursive check-recursive installcheck-recursive info-recursive \
-dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
-maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
-distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
-dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \
-install-exec-am install-exec install-data-am install-data install-am \
-install uninstall-am uninstall all-redirect all-am all installdirs-am \
-installdirs mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
-
-
-backup:
-       cd ..; tar cvfz @PACKAGE@-@VERSION@-`date|tr ' ' '_'|tr ':' '_'`.tar.gz @PACKAGE@
-
-cleanbak:
-       -rm -f `find . -name "*~"`
-
-lc:
-       @( \
-       CFILES=`find . -name "*.c"`; \
-       HFILES=`find . -name "*.h"`; \
-       CCFILES=`find . -name "*.cc"`; \
-       HHFILES=`find . -name "*.hh"`; \
-       ICCFILES=`find . -name "*.icc"`; \
-       wc -l $$CFILES $$HFILES $$CCFILES $$HHFILES $$ICCFILES | tail -n 1 \
-       )
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/helm/DEVEL/mathml_editor/NEWS b/helm/DEVEL/mathml_editor/NEWS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/mathml_editor/PATTERNS b/helm/DEVEL/mathml_editor/PATTERNS
deleted file mode 100644 (file)
index 0e5814d..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-
-identifier #
-
-       insert(<mi>#</mi>)
-
-number #
-
-       insert(<mi>#</mi>)
-
-\sqrt
-
-       replace($, <msqrt>$</msqrt>)
-
-\root
-
-       replace($, <mroot><mrow/><mrow>$</mrow></mroot>)
-
-\of
-
-       when (isa($.parent, "mrow") && isa($.parent.parent, "mroot"))
-       let mroot = $.parent.parent
-       if ($.prev and !$.prev.prev and !$.next) replace($.parent, $.prev)
-       replace(mroot.child[0], $)
-
-\underline
-
-       insert(<munder>[$, <mo>&UnderBar;</mo>]</munder>)
-
-\overline
-
-       insert(<mover>[$, <mo>&OverBar;</mo>]</mover>)
-
-\cases
-
-       replace($, <mrow><mo>{</mo><mtable>$</mtable></mrow>)
-
-\matrix
-
-       replace($, <mtable>$</mtable>)
-
-\over
-
-       if isa($.parent, "mrow")
-               replace($.parent, <mfrac>[$.parent, $]</mfrac>)
-
-
-_      if isa($.parent, "mrow")
-               if eq($.prev, null)
-                       replace($, new(mmultiscripts, [ new mrow, $, new none ]))
-               elseif (isa($.prev, msub))
-                       let base = $.prev.children[0]
-                       let script = $.prev.children[1]
-                       replace($.rev, new(mmultiscripts, [ base, script, new none, $, new none ]))
-               elseif (isa($.prev, msup))
-                       let base = $.prev.children[0]
-                       let script = $.prev.children[1]
-                       replace($.prev, new(msubsup, [ base, $, script ]))
-               elseif (isa($.prev, msubsup))
-                       let base = $.prev.children[0]
-                       let subscript = $.prev.children[1]
-                       let superscript = $.prev.children[2]
-                       replace($.prev, new(mmultiscripts, [ base, subscript, superscript, $, new none ]))
-               elseif isa($.prev, mmultiscripts)
-                       if ($.prev.children[$.prev.children.size - 2] = null)
-                               replace($.prev.children[$.prev.children.size - 2], $)
-                       else
-                               $.prev.children.append([$, new none])
-               else
-                       replace($.prev, new(msub, [ $.prev, $ ]))
-       else if isa($.parent, msub) and $.parent.children[1] = $
-               let base = $.parent.children[0]
-               replace($.parent, new(munder, [ base, $ ]))
-
-               
-_, \sb (subscript)
-
-       if parent.isa(mrow)
-               if cursor is first child then
-                       sub = new mmultiscripts
-                       parent.replace(cursor, sub);
-                       sub.set_base(new mrow);
-                       sub.set_subscript(cursor);
-               else
-                       elem = element prior to cursor in parent
-                       if elem.isa(msub) || elem.isa(msup) || elem.isa(mmultiscripts) then
-                               append script to multiscript and/or replace single script with
-                               multiscript
-                       else if elem.isa(munder) || elem.isa(mover) || elem.isa(munderover) then
-                               creates another munder
-                       else
-                               parent.replace(elem, sub);
-                               sub.set_base(elem);
-                               sub.set_subscript(cursor);
-       else if (parent.isa(msub) and cursor is subscript) or
-               change msub into a munder
-               cursor in same position
-       else
-               replace cursor with msub with empty base
-
-^, \sp (superscript)
-
-       symmetric to subscript
-
-', \prime (prime)
-
-       similar to superscript, but multiple prime superscripts should go
-       together in the same operator
-
-{      (group open)
-
-       replace cursor with mrow, put cursor inside mrow
-       if cursor is inside a table, create a new table row and a new table cell
-       and put the cursor inside the cell
-
-}      (group close)
-
-       remove cursor from mrow
-       mrow.parent.advance(cursor, mrow)
-       if cursor inside a table cell then close table
-       
-\over,\atop,\above (fraction)
-
-       if cursor.parent.isa(mrow) then
-               frac = new mfrac
-               cursor.parent.parent.replace(mrow, frac)
-               numerator is current content of cursor.parent except for the cursor
-               itself.
-               set denominator to cursor
-       else
-
-\choose
-
-       similar to fractions, but with stretchable parentheses around
-
-\sqrt
-
-       parent.replace(cursor, new msqrt)
-       set new msqrt.base to cursor
-
-\root
-
-       parent.replace(cursor, new mroot)
-       set empty base element
-       set root index to cursor
-
-\of
-
-       check if cursor.parent is mroot (or mrow inside mroot index)
-       or and cursor is in index position. move the cursor to the base element
-
-\underline
-
-       create munder element with stretchable horizontal line as underscript
-       substitute cursor with munder
-       move the cursor in the base element
-
-\overline
-
-       symmetric
-
-accents (\hat)
-
-       create an mover with accent=true and the operator has stretchy=false
-
-wide accents (\widehat)
-
-       as accents, but mover has accent=false and the operator has stretchy=true
-
-\scriptstyle, ...
-
-       create an appropriate mstyle, the cursor moves in. However, when the
-       subformula ends one has to skip the mstyle
-
-\cases
-
-       create mrow with stretchable brace and emtpy table, put cursor inside
-       table
-
-\matrix
-
-       create empty table, cursor inside table
-
-&
-
-       check that cursor is inside a table cell
-       create a new cell next to it
-
-\cr
-
-       check that cursor is inside a table cell inside a table row
-       create a new row
-
-\phantom
-
-       create a mphantom element, cursor inside
-
diff --git a/helm/DEVEL/mathml_editor/README b/helm/DEVEL/mathml_editor/README
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/mathml_editor/TML.dtd b/helm/DEVEL/mathml_editor/TML.dtd
deleted file mode 100644 (file)
index 74760bb..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-
-<!ENTITY % TML.node "i|n|o|s|sp|sb|g|c|row|cell|cursor">
-
-<!ENTITY % TML.common.attrib "
-  id         CDATA #IMPLIED
-  xref       CDATA #IMPLIED
-">
-
-<!ELEMENT tex (math|cursor)>
-
-<!ELEMENT math (g)>
-<!ATTLIST math
-  %TML.common.attrib;
-  display (0|1) true
->
-
-<!ELEMENT i EMPTY>
-<!ATTLIST i
-  %TML.common.attrib;
-  val     CDATA   #REQUIRED
-  name    NMTOKEN #IMPLIED>
-<!ELEMENT n EMPTY>
-<!ATTLIST n
-  %TML.common.attrib;
-  val     CDATA   #REQUIRED
-  name    NMTOKEN #IMPLIED>
-<!ELEMENT o EMPTY>
-<!ATTLIST o
-  %TML.common.attrib;
-  val     CDATA #REQUIRED
-  name    NMTOKEN #IMPLIED>
-<!ELEMENT s EMPTY>
-<!ATTLIST s
-  %TML.common.attrib;
-  val     CDATA #REQUIRED
-  name    NMTOKEN #IMPLIED>
-
-<!ELEMENT row (cell)+>
-<!ELEMENT cell (%TML.node;)>
-
-<!ELEMENT sb (%TML.node;,%TML.node;)>
-<!ATTLIST sb
-  %TML.common.attrib;
-  under   (0|1) #IMPLIED
->
-<!ELEMENT sp (%TML.node;,%TML.node;)>
-<!ATTLIST sp
-  %TML.common.attrib;
-  over    (0|1) #IMPLIED
->
-
-<!ELEMENT g (%TML.node;)+>
-<!ATTLIST g %TML.common.attrib;>
-
-<!ELEMENT c (%TML.node;)+>
-<!ATTLIST c
-  %TML.common.attrib;
-  name    NMTOKEN #REQUIRED
-  left-open (0|1) #IMPLIED>
-
-<!ELEMENT cursor EMPTY>
-<!ATTLIST
-  %TML.common.attrib;
-  val CDATA #REQUIRED
-  visible (0|1) #REQUIRED>
-
diff --git a/helm/DEVEL/mathml_editor/TODO b/helm/DEVEL/mathml_editor/TODO
deleted file mode 100644 (file)
index 701ec46..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-* add param node in the TML with the name of the parameter
-* add space node? active node?
-* add alt boolean to all deleting methods
-* implement a mechanism that allows the definition of new macros
-* add open-group close-group attributes in the dictionary and handle them
-* implement macro completion
-
-BUGS
-* $1\over{2}$ does not work
-
-* compare pure_subst/pure_diff/subst_diff performances
-
diff --git a/helm/DEVEL/mathml_editor/configure.ac b/helm/DEVEL/mathml_editor/configure.ac
deleted file mode 100644 (file)
index 49662e3..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_INIT(editex, [0.0.3])
-AC_CONFIG_SRCDIR(src/TToken.hh)
-AM_INIT_AUTOMAKE($AC_PACKAGE_NAME, $AC_PACKAGE_VERSION)
-
-PACKAGE=$PACKAGE_NAME
-VERSION=$PACKAGE_VERSION
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-
-EDITEX_VERSION_INFO=`echo $VERSION | awk -F. '{ printf "%d:%d:%d", $1+$2, $3, $2 }'`
-AC_SUBST(EDITEX_VERSION_INFO)
-
-AC_ARG_ENABLE(
-       profile,
-       [  --enable-profile[=ARG]  include profiling information [default=no]],
-       profile=$enableval,
-       profile=no
-)
-
-AC_ARG_ENABLE(
-       debug,
-       [  --enable-debug[=ARG]    include debugging debug [default=yes]],
-       enable_debug=$enableval,
-       enable_debug=yes
-)
-
-if test "x$enable_debug" = "xyes"; then
-   AC_DEFINE(ENABLE_DEBUG,,[Define to 1 if you want to enable validity checks while running])
-fi
-
-GMETADOM_PREFIX=""
-AC_ARG_WITH(gmetadom-prefix,
-        [  --with-gmetadom-prefix=[PFX]         Specify location of gmetadom],
-       GMETADOM_PREFIX=$withval
-)
-
-dnl AC_CONFIG_HEADERS([config.h])
-AM_CONFIG_HEADER(config.h)
-
-AH_TOP([
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef config_h
-#define config_h
-])
-
-AH_BOTTOM([
-#endif /* config_h */
-])
-
-AC_PROG_CC
-AC_PROG_CXX
-AC_PROG_INSTALL
-AC_HEADER_STDC([])
-
-AC_LANG_PUSH(C++)
-AC_CHECK_HEADERS(hash_map)
-AC_CHECK_HEADERS(ext/hash_map)
-AC_LANG_POP(C++)
-
-AC_SUBST(CFLAGS)
-AC_SUBST(CPPFLAGS)
-AC_SUBST(LDFLAGS)
-
-AM_PROG_LIBTOOL
-
-dnl PKG_CHECK_MODULES(GLIB2, glib-2.0)
-dnl AC_SUBST(GLIB2_CFLAGS)
-dnl AC_SUBST(GLIB2_LIBS)
-
-PKG_CHECK_MODULES(GMETADOM,gdome2-cpp-smart,,AC_MSG_ERROR(can not find gmetadom))
-AC_SUBST(GMETADOM_CFLAGS)
-AC_SUBST(GMETADOM_LIBS)
-
-PKG_CHECK_MODULES(GDOMEXSLT,gdome2-xslt-cpp-smart,,AC_MSG_ERROR(can not find gdome2-xslt))
-AC_SUBST(GDOMEXSLT_CFLAGS)
-AC_SUBST(GDOMEXSLT_LIBS)
-
-PKG_CHECK_MODULES(GTKMATHVIEW,gtkmathview,,AC_MSG_ERROR(can not find gtkmathview))
-AC_SUBST(GTKMATHVIEW_CFLAGS)
-AC_SUBST(GTKMATHVIEW_LIBS)
-
-AC_CHECK_PROG(HAVE_OCAMLC, ocamlc, yes, no)
-if test $HAVE_OCAMLC = "no"; then
-  AC_MSG_ERROR([could not find ocamlc in PATH, please make sure ocaml is installed])
-else
-  OCAMLC=ocamlc
-  OCAMLSTDLIBDIR="`ocamlc -where`"
-  OCAMLSTUBDIR="`ocamlc -where`/stublibs"
-  AC_SUBST(OCAMLC)
-  AC_SUBST(OCAMLSTDLIBDIR)
-  AC_SUBST(OCAMLSTUBDIR)
-fi
-
-AC_CHECK_PROG(HAVE_OCAMLOPT, ocamlopt, yes, no)
-if test $HAVE_OCAMLOPT = "no"; then
-       AC_MSG_WARN([ocaml native libraries won't be compiled since ocamlopt was not found])
-else
-  OCAMLOPT=ocamlopt
-  AC_SUBST(OCAMLOPT)
-fi
-AM_CONDITIONAL(HAVE_OCAMLOPT_COND, test x$HAVE_OCAMLOPT = xyes)
-
-AC_CHECK_PROG(HAVE_OCAMLFIND, ocamlfind, yes, no)
-if test $HAVE_OCAMLFIND = "no"; then
-  AC_MSG_ERROR([could not find ocamlfind in PATH, please make sure findlib is installed])
-else
-  OCAMLFIND=ocamlfind
-  AC_SUBST(OCAMLFIND)
-fi
-
-AC_CHECK_PROG(HAVE_OCAMLDEP, ocamldep, yes, no)
-if test $HAVE_OCAMLDEP = "yes"; then
-  OCAMLDEP=ocamldep
-  AC_SUBST(OCAMLDEP)
-fi
-
-AC_CHECK_PROG(HAVE_OCAMLMKLIB, ocamlmklib, yes, no)
-if test $HAVE_OCAMLMKLIB = "no"; then
-  AC_MSG_ERROR([could not find ocamlmklib in PATH, please make sure ocamlmklib is installed])
-else
-  OCAMLMKLIB=ocamlmklib
-  AC_SUBST(OCAMLMKLIB)
-fi
-AM_CONDITIONAL(HAVE_SHAREDLIBS_COND, test x$enable_shared = xyes)
-
-AC_MSG_CHECKING(for gdome2 ocaml binding)
-ocamlfind query gdome2 ||
-  AC_MSG_ERROR(gdome2 not installed (according to findlib))
-MLGDOME_CFLAGS="`$OCAMLFIND query -i-format gdome2`"
-AC_SUBST(MLGDOME_CFLAGS)
-
-AC_MSG_CHECKING(for the ocaml library dir)
-OCAML_LIB_DIR=`ocamlc -where`
-AC_MSG_RESULT($OCAML_LIB_DIR)
-
-AC_CHECK_FILE(/usr/include/caml/mlvalues.h,
-       OCAML_INCLUDE_DIR=/usr/include/caml,
-       OCAML_INCLUDE_DIR=$OCAML_LIB_DIR/caml
-)
-
-AC_SUBST(OCAML_INCLUDE_DIR)
-
-AC_CONFIG_FILES([
- Makefile 
- src/Makefile
- src/config.dirs
- test/Makefile
- textomml/Makefile
- textomml/config.dirs
- ocaml/Makefile
- ocaml/META
- editex.pc
- xsl/Makefile
- dict/Makefile
-])
-AC_OUTPUT
diff --git a/helm/DEVEL/mathml_editor/debian/changelog b/helm/DEVEL/mathml_editor/debian/changelog
deleted file mode 100644 (file)
index be3c32d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-editex (0.0.3-2) unstable; urgency=low
-
-  * Signed by me
-  * debian/control
-    - added ${misc:Depends}
-    - bumped standards-version to 3.5.10
-    - bumped dependencies on gmetadom to 0.1.9
-    - changed section of -dev package to libdevel
-
- -- Stefano Zacchiroli <zack@debian.org>  Wed, 25 Jun 2003 18:26:11 +0200
-
-editex (0.0.3-1) unstable; urgency=low
-
-  * New upstream release.
-  * Bug fix: tml-litex.xsl was not installed
-  * Bug fix: Makefile.ac did not use pkg-config to look for the existence
-    of the required packages (that, in the meantime, started using pkg-config)
-    As a result, the required packages were no longer detected by ./configure
-
- -- Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>  Thu, 19 Jun 2003 12:58:21 +0200
-
-editex (0.0.2-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>  Thu, 19 Jun 2003 12:58:21 +0200
-
-editex (0.0.1-1) unstable; urgency=low
-
-  * Initial Release.
-
- -- Stefano Zacchiroli <zack@debian.org>  Wed, 02 Apr 2003 15:53:25 +0200
-
diff --git a/helm/DEVEL/mathml_editor/debian/control b/helm/DEVEL/mathml_editor/debian/control
deleted file mode 100644 (file)
index 27c78ab..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-Source: editex
-Priority: optional
-Maintainer: Stefano Zacchiroli <zack@debian.org>
-Build-Depends: debhelper (>> 4.0.0), ocaml-3.06-1, libgdome2-cpp-smart-dev (>= 0.1.9), libgdome2-ocaml-dev (>= 0.1.9), libgdome2-xslt-dev (>= 0.0.4), libgdome2-xslt-ocaml-dev (>= 0.0.4), ocaml-findlib, libgtkmathview-dev (>= 0.4.1), libgtk1.2-dev, t1lib-dev
-Standards-Version: 3.5.10
-
-Package: libeditex0
-Section: libs
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: MathML editor based on TeX syntax
- EdiTeX is a C library implementing a MathML editor based on TeX syntax.
- .
- This package includes the shared runtime objects.
-
-Package: libeditex-dev
-Section: libdevel
-Architecture: any
-Depends: libeditex0 (= ${Source-Version}), libgdome2-cpp-smart-dev (>= 0.1.6), libgdome2-xslt-dev (>= 0.0.4), libgtk1.2-dev, t1lib-dev, ${misc:Depends}
-Description: MathML editor based on TeX syntax
- EdiTeX is a C library implementing a MathML editor based on TeX syntax.
- .
- This package includes the development files.
-
-Package: libeditex-ocaml
-Section: libs
-Architecture: any
-Depends: ocaml-base-3.06-1, libgdome2-ocaml (>= 0.1.6), libgdome2-xslt-ocaml (>= 0.0.4), liblablgtk-ocaml (>= 1.2.5), ${shlibs:Depends}, ${misc:Depends}
-Description: OCaml bindings to EdiTeX, a MathML editor based on TeX syntax
- EdiTeX is a C library implementing a MathML editor based on TeX syntax.
- .
- This are the Objective CAML bindings to EdiTeX.
- .
- This package includes the OCaml shared runtime objects.
-
-Package: libeditex-ocaml-dev
-Section: libdevel
-Architecture: any
-Depends: libeditex-ocaml (= ${Source-Version}), libgdome2-ocaml-dev (>= 0.1.6), libgdome2-xslt-ocaml-dev (>= 0.0.4), liblablgtk-ocaml-dev (>= 1.2.5), ${misc:Depends}
-Description: OCaml bindings to EdiTeX, a MathML editor based on TeX syntax
- EdiTeX is a C library implementing a MathML editor based on TeX syntax.
- .
- This are the Objective CAML bindings to EdiTeX.
- .
- This package includes the OCaml development files.
-
diff --git a/helm/DEVEL/mathml_editor/debian/copyright b/helm/DEVEL/mathml_editor/debian/copyright
deleted file mode 100644 (file)
index 310cde4..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-This package was debianized by Stefano Zacchiroli <zack@debian.org> on
-Thu, 20 Mar 2003 18:09:22 +0100.
-
-It was downloaded from:
-
-  http://www.cs.unibo.it/cgi-bin/cvsweb/helm/DEVEL/mathml_editor/
-
-Upstream Authors:
- Luca Padovani <lpadovan@cs.unibo.it>
- Paolo Marinelli <pmarinel@cs.unibo.it>
-
-Copyright:
-
-  This library is distributed under the term of the GNU Lesser General
-  Public License (LGPL).
-
-  This library 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
-  Lesser General Public License for more details.
-
-  On a Debian GNU/Linux system, the LGPL can be found as
-  /usr/share/common-licenses/LGPL-2.1.
diff --git a/helm/DEVEL/mathml_editor/debian/docs b/helm/DEVEL/mathml_editor/debian/docs
deleted file mode 100644 (file)
index 4a84a8c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-BUGS
-BUGS-GDOME2
-MODES
-NEWS
-PATTERNS
-README
-TODO
diff --git a/helm/DEVEL/mathml_editor/debian/libeditex-dev.files b/helm/DEVEL/mathml_editor/debian/libeditex-dev.files
deleted file mode 100644 (file)
index 1d5afcf..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-usr/lib/pkgconfig
-usr/include
-usr/lib/*.a
-usr/lib/*.la
-usr/lib/*.so
diff --git a/helm/DEVEL/mathml_editor/debian/libeditex-ocaml-dev.files b/helm/DEVEL/mathml_editor/debian/libeditex-ocaml-dev.files
deleted file mode 100644 (file)
index c0bf9c7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-usr/lib/ocaml/3.06/mathml-editor
-usr/lib/ocaml/3.06/stublibs/lib*.so
-usr/lib/ocaml/3.06/stublibs/dll*.so.owner
diff --git a/helm/DEVEL/mathml_editor/debian/libeditex-ocaml.files b/helm/DEVEL/mathml_editor/debian/libeditex-ocaml.files
deleted file mode 100644 (file)
index 2dd4e59..0000000
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/ocaml/3.06/stublibs/dll*.so
diff --git a/helm/DEVEL/mathml_editor/debian/libeditex0.files b/helm/DEVEL/mathml_editor/debian/libeditex0.files
deleted file mode 100644 (file)
index 213e11b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/lib/*.so.*
-usr/share
diff --git a/helm/DEVEL/mathml_editor/debian/rules b/helm/DEVEL/mathml_editor/debian/rules
deleted file mode 100755 (executable)
index 5a76802..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/make -f
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-export DH_COMPAT=4
-
-# These are used for cross-compiling and for saving the configure script
-# from having to guess our platform (since we know it already)
-DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
-DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
-       CFLAGS += -O0
-else
-       CFLAGS += -O2
-endif
-ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
-       INSTALL_PROGRAM += -s
-endif
-
-config.status: configure
-       dh_testdir
-       ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info
-
-build: build-stamp
-build-stamp:  config.status
-       dh_testdir
-
-       $(MAKE)
-
-       touch build-stamp
-
-clean:
-       dh_testdir
-       dh_testroot
-       rm -f build-stamp 
-
-       -$(MAKE) distclean
-# ifneq "$(wildcard /usr/share/misc/config.sub)" ""
-#      cp -f /usr/share/misc/config.sub config.sub
-# endif
-# ifneq "$(wildcard /usr/share/misc/config.guess)" ""
-#      cp -f /usr/share/misc/config.guess config.guess
-# endif
-
-       dh_clean
-
-install: build
-       dh_testdir
-       dh_testroot
-       dh_clean -k
-       dh_installdirs
-       $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp
-       dh_movefiles
-
-binary-arch: build install
-       dh_testdir -s
-       dh_testroot -s
-       dh_installchangelogs -s ChangeLog
-       dh_installdocs -s
-#      dh_installexamples -s
-#      dh_installinfo -s
-       dh_link -s
-       dh_strip -s
-       dh_compress -s
-       dh_fixperms -s
-       dh_makeshlibs -p libeditex0
-       dh_installdeb -s
-       dh_shlibdeps -s
-       dh_gencontrol -s
-       dh_md5sums -s
-       dh_builddeb -s
-
-binary: binary-arch
-.PHONY: build clean binary-arch binary install 
diff --git a/helm/DEVEL/mathml_editor/dict/.cvsignore b/helm/DEVEL/mathml_editor/dict/.cvsignore
deleted file mode 100644 (file)
index 282522d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/helm/DEVEL/mathml_editor/dict/Makefile.am b/helm/DEVEL/mathml_editor/dict/Makefile.am
deleted file mode 100644 (file)
index f4246e4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-pkgdata_DATA = dictionary-basic.xml dictionary-test.xml dictionary-tex.xml dictionary.dtd
-EXTRA_DIST   = dictionary-basic.xml dictionary-test.xml dictionary-tex.xml dictionary.dtd
diff --git a/helm/DEVEL/mathml_editor/dict/dictionary-basic.xml b/helm/DEVEL/mathml_editor/dict/dictionary-basic.xml
deleted file mode 100644 (file)
index ed2e264..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-
-<dictionary name="TeX">
-
-  <!-- MACRO for testing  -->
-  <entry name="cursor"     pattern=""/>
-  <entry name="error"      pattern="#1"/>
-
-</dictionary>
diff --git a/helm/DEVEL/mathml_editor/dict/dictionary-test.xml b/helm/DEVEL/mathml_editor/dict/dictionary-test.xml
deleted file mode 100644 (file)
index 3fcc056..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- This file is part of EdiTeX, an editor of mathematical
- expressions based on TeX syntax.
- Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
-                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
- For more information, please visit the project's home page
- http://helm.cs.unibo.it/editex/
- or send an email to <lpadovan@cs.unibo.it>
--->
-
-<dictionary name="TeX">
-
-  <include href="dictionary-tex.xml"/>
-
-  <!-- MACRO for testing  -->
-  <entry name="red"        pattern="{"/>
-  <entry name="green"      pattern="#1\over"/>
-  <entry name="duedelim"   pattern="#1\over\of#2"/>
-  <entry name="nodeside" pattern="#1#2\over"/>
-
-</dictionary>
diff --git a/helm/DEVEL/mathml_editor/dict/dictionary-tex.xml b/helm/DEVEL/mathml_editor/dict/dictionary-tex.xml
deleted file mode 100644 (file)
index 4799545..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- This file is part of EdiTeX, an editor of mathematical
- expressions based on TeX syntax.
- Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
-                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
- For more information, please visit the project's home page
- http://helm.cs.unibo.it/editex/
- or send an email to <lpadovan@cs.unibo.it>
--->
-
-<dictionary name="TeX">
-
-  <include href="dictionary-basic.xml"/>
-
-  <!-- Greek Letters (lower case) -->
-
-  <entry name="alpha"      class="i" val="&#x03b1;"/>
-  <entry name="beta"       class="i" val="&#x03b2;"/>
-  <entry name="gamma"      class="i" val="&#x03b3;"/>
-  <entry name="delta"      class="i" val="&#x03b4;"/>
-  <entry name="epsilon"    class="i" val="&#x03f5;"/>
-  <entry name="varepsilon" class="i" val="&#x03b5;"/>
-  <entry name="zeta"       class="i" val="&#x03b6;"/>
-  <entry name="eta"        class="i" val="&#x03b7;"/>
-  <entry name="theta"      class="i" val="&#x03b8;"/>
-  <entry name="vartheta"   class="i" val="&#x03d1;"/>
-  <entry name="iota"       class="i" val="&#x03b9;"/>
-  <entry name="kappa"      class="i" val="&#x03ba;"/>
-  <entry name="lambda"     class="i" val="&#x03bb;"/>
-  <entry name="mu"         class="i" val="&#x03bc;"/>
-  <entry name="nu"         class="i" val="&#x03bd;"/>
-  <entry name="xi"         class="i" val="&#x03be;"/>
-  <entry name="o"          class="i" val="&#x03bf;"/>
-  <entry name="pi"         class="i" val="&#x03c0;"/>
-  <entry name="varpi"      class="i" val="&#x03d6;"/>
-  <entry name="rho"        class="i" val="&#x03c1;"/>
-  <entry name="varrho"     class="i" val="&#x03f1;"/>
-  <entry name="sigma"      class="i" val="&#x03c3;"/>
-  <entry name="varsigma"   class="i" val="&#x03c2;"/>
-  <entry name="tau"        class="i" val="&#x03c4;"/>
-  <entry name="upsilon"    class="i" val="&#x03c5;"/>
-  <entry name="phi"        class="i" val="&#x03d5;"/>
-  <entry name="varphi"     class="i" val="&#x03c6;"/>
-  <entry name="chi"        class="i" val="&#x03c7;"/>
-  <entry name="psi"        class="i" val="&#x03c8;"/>
-  <entry name="omega"      class="i" val="&#x03c9;"/>
-
-  <!-- Greek Letters (upper case) -->
-
-  <entry name="Gamma"   class="i" val="&#x0393;"/>
-  <entry name="Delta"   class="i" val="&#x0394;"/>
-  <entry name="Theta"   class="i" val="&#x0398;"/>
-  <entry name="Lambda"  class="i" val="&#x039b;"/>
-  <entry name="Xi"      class="i" val="&#x039e;"/>
-  <entry name="Pi"      class="i" val="&#x03a0;"/>
-  <entry name="Sigma"   class="i" val="&#x03a3;"/>
-  <entry name="Upsilon" class="i" val="&#x03d2;"/>
-  <entry name="Phi"     class="i" val="&#x03a6;"/>
-  <entry name="Psi"     class="i" val="&#x03a8;"/>
-  <entry name="Omega"   class="i" val="&#x03a9;"/>
-
-  <!-- Symbols of Type Ord -->
-
-  <entry name="aleph"       class="i" val="&#x2135;"/>
-  <entry name="hbar"        class="i" val="&#x210f;&#xfe00;"/>
-  <entry name="imath"       class="i" val="&#x0131;"/>
-  <entry name="jmath"       class="i" val="&#x006a;&#xfe00;"/>
-  <entry name="ell"         class="i" val="&#x2113;"/>
-  <entry name="wp"          class="i" val="&#x2118;"/>
-  <entry name="Re"          class="o" val="&#x211c;"/>
-  <entry name="Im"          class="o" val="&#x2111;"/>
-  <entry name="partial"     class="o" val="&#x2202;"/>
-  <entry name="infty"       class="i" val="&#x221e;"/>
-  <entry name="prime"       class="o" val="&#x2032;"/>
-  <entry name="emptyset"    class="i" val="&#x2205;&#xfe00;"/>
-  <entry name="nabla"       class="o" val="&#x2207;"/>
-  <entry name="surd"        class="o" val="????"/>
-  <entry name="top"         class="i" val="&#x22a4;"/>
-  <entry name="bot"         class="i" val="&#x22a5;"/>
-  <entry name="|"           class="o" val="|" delimiter="1"/>
-  <entry name="angle"       class="o" val="&#x2220;"/>
-  <entry name="triangle"    class="o" val="&#x25b5;"/>
-  <entry name="backslash"   class="o" val="\"/>
-  <entry name="forall"      class="o" val="&#x2200;"/>
-  <entry name="exists"      class="o" val="&#x2203;"/>
-  <entry name="neg"         class="o" val="&#x00ac;"/>
-  <entry name="lnot"        class="o" val="&#x00ac;"/>
-  <entry name="flat"        class="i" val="&#x266d;"/>
-  <entry name="natural"     class="i" val="&#x266e;"/>
-  <entry name="sharp"       class="i" val="&#x266f;"/>
-  <entry name="clubsuit"    class="i" val="&#x2663;"/>
-  <entry name="diamondsuit" class="i" val="&#x2662;"/>
-  <entry name="heartsuit"   class="i" val="&#x2661;"/>
-  <entry name="spadesuit"   class="i" val="&#x2660;"/>
-
-  <!-- Large Operators -->
-
-  <entry name="sum"         class="o" val="&#x2211;" limits="1"/>
-  <entry name="prod"        class="o" val="&#x220f;" limits="1"/>
-  <entry name="coprod"      class="o" val="&#x2210;" limits="1"/>
-  <entry name="int"         class="o" val="&#x222b;" limits="1"/>
-  <entry name="oint"        class="o" val="&#x222e;" limits="1"/>
-  <entry name="bigcap"      class="o" val="&#x22c2;" limits="1"/>
-  <entry name="bigcup"      class="o" val="&#x22c3;" limits="1"/>
-  <entry name="bigsqcup"    class="o" val="&#x2294;" limits="1"/>
-  <entry name="bigvee"      class="o" val="&#x22c1;" limits="1"/>
-  <entry name="bigwedge"    class="o" val="&#x22c0;" limits="1"/>
-  <entry name="bigodot"     class="o" val="&#x2299;" limits="1"/>
-  <entry name="bigotimes"   class="o" val="&#x2297;" limits="1"/>
-  <entry name="bigoplus"    class="o" val="&#x2295;" limits="1"/>
-  <entry name="biguplus"    class="o" val="&#x228e;" limits="1"/>
-
-  <!-- Binary Operations -->
-
-  <entry name="pm"              class="o" val="&#x00b1;"/>
-  <entry name="mp"              class="o" val="&#x2213;"/>
-  <entry name="setminus"        class="o" val="&#x2216;"/>
-  <entry name="cdot"            class="o" val="&#x010b;"/>
-  <entry name="times"           class="o" val="&#x00d7;"/>
-  <entry name="ast"             class="o" val="&#x002a;"/>
-  <entry name="star"            class="o" val="&#x22c6;"/>
-  <entry name="diamond"         class="o" val="&#x22c4;"/>
-  <entry name="circ"            class="o" val="&#x005e;"/>
-  <entry name="bullet"          class="o" val="&#x2022;"/>
-  <entry name="div"             class="o" val="&#x00f7;"/>
-  <entry name="cap"             class="o" val="&#x2229;"/>
-  <entry name="cup"             class="o" val="&#x222a;"/>
-  <entry name="uplus"           class="o" val="&#x228e;"/>
-  <entry name="sqcap"           class="o" val="&#x2293;"/>
-  <entry name="sqcup"           class="o" val="&#x2294;"/>
-  <entry name="triangleleft"    class="o" val="&#x25c3;"/>
-  <entry name="triangleright"   class="o" val="&#x25b9;"/>
-  <entry name="wr"              class="o" val="&#x2240;"/>
-  <entry name="bigcirc"         class="o" val="&#x25ef;"/>
-  <entry name="bigtriangleup"   class="o" val="&#x25b3;"/>
-  <entry name="bigtriangledown" class="o" val="&#x25bd;"/>
-  <entry name="vee"             class="o" val="&#x2228;"/>
-  <entry name="lor"             class="o" val="&#x2228;"/>
-  <entry name="wedge"           class="o" val="&#x2227;"/>
-  <entry name="land"            class="o" val="&#x2227;"/>
-  <entry name="oplus"           class="o" val="&#x2295;"/>
-  <entry name="ominus"          class="o" val="&#x2296;"/>
-  <entry name="otimes"          class="o" val="&#x2297;"/>
-  <entry name="oslash"          class="o" val="&#x00f8;"/>
-  <entry name="odot"            class="o" val="&#x2299;"/>
-  <entry name="dagger"          class="o" val="&#x2020;"/>
-  <entry name="ddagger"         class="o" val="&#x2021;"/>
-  <entry name="amalg"           class="o" val="&#x2a3f;"/>
-
-  <!-- Relations -->
-
-  <entry name="leq"            class="o" val="&#x2264;"/>
-  <entry name="le"             class="o" val="&#x2264;"/>
-  <entry name="prec"           class="o" val="&#x227a;"/>
-  <entry name="preceq"         class="o" val="&#x2aaf;"/>
-  <entry name="ll"             class="o" val="&#x226a;"/>
-  <entry name="subset"         class="o" val="&#x2282;"/>
-  <entry name="subseteq"       class="o" val="&#x2286;"/>
-  <entry name="in"             class="o" val="&#x2208;"/>
-  <entry name="vdash"          class="o" val="&#x22a2;"/>
-  <entry name="smile"          class="o" val="&#x2323;"/>
-  <entry name="frown"          class="o" val="&#x2322;"/>
-  <entry name="propto"         class="o" val="&#x221d;"/>
-  <entry name="geq"            class="o" val="&#x2265;"/>
-  <entry name="ge"             class="o" val="&#x2265;"/>
-  <entry name="succ"           class="o" val="&#x227b;"/>
-  <entry name="succeq"         class="o" val="&#x227d;"/>
-  <entry name="gg"             class="o" val="&#x226b;"/>
-  <entry name="supset"         class="o" val="&#x2283;"/>
-  <entry name="supseteq"       class="o" val="&#x2287;"/>
-  <entry name="sqsupseteq"     class="o" val="&#x2292;"/>
-  <entry name="notin"          class="o" val="&#x2209;"/>
-  <entry name="dashv"          class="o" val="&#x22a3;"/>
-  <entry name="mid"            class="o" val="&#x2223;"/>
-  <entry name="parallet"       class="o" val="????"/>
-  <entry name="equiv"          class="o" val="&#x2261;"/>
-  <entry name="sim"            class="o" val="&#x223c;"/>
-  <entry name="simeq"          class="o" val="&#x2243;"/>
-  <entry name="asymp"          class="o" val="&#x224d;"/>
-  <entry name="approx"         class="o" val="&#x2248;"/>
-  <entry name="cong"           class="o" val="&#x2245;"/>
-  <entry name="bowtie"         class="o" val="&#x22c8;"/>
-  <entry name="ni"             class="o" val="&#x220b;"/>
-  <entry name="owns"           class="o" val="&#x220b;"/>
-  <entry name="models"         class="o" val="&#x22a7;"/>
-  <entry name="doteq"          class="o" val="&#x2250;"/>
-  <entry name="perp"           class="o" val="&#x22a5;"/>
-
-  <entry name="not"            pattern="#1" embellishment="1"/>
-  <entry name="ne"             class="o" val="&#x2260;"/>
-
-  <!-- Arrows -->
-
-  <entry name="leftarrow"                 class="o" val="&#x2190;"/>
-  <entry name="gets"                      class="o" val="&#x2190;"/>
-  <entry name="Leftarrow"                 class="o" val="&#x21d0;"/>
-  <entry name="rightarrow"                class="o" val="&#x2192;"/>
-  <entry name="to"                        class="o" val="&#x2192;"/>
-  <entry name="Rightarrow"                class="o" val="&#x21d2;"/>
-  <entry name="leftrightarrow"            class="o" val="&#x2194;"/>
-  <entry name="Leftrightarrow"            class="o" val="&#x21d4;"/>
-  <entry name="mapsto"                    class="o" val="&#x21a6;"/>
-  <entry name="hookleftarrow"             class="o" val="&#x21a9;"/>
-  <entry name="uparrow"                   class="o" val="&#x2191;"/>
-  <entry name="downarrow"                 class="o" val="&#x2193;"/>
-  <entry name="updownarrow"               class="o" val="&#x2195;"/>
-  <entry name="nearrow"                   class="o" val="&#x2197;"/>
-  <entry name="nwarrow"                   class="o" val="&#x2196;"/>
-  <entry name="longleftarrow"             class="o" val="????;"/>
-  <entry name="Longleftarrow"             class="o" val="????"/>
-  <entry name="longrightarrow"            class="o" val="????"/>
-  <entry name="Longrightarrow"            class="o" val="&#x21d2;"/>
-  <entry name="longleftrightarrow" class="o" val="????"/>
-  <entry name="Longleftrightarrow" class="o" val="????"/>
-  <entry name="longmapsto"                class="o" val="????"/>
-  <entry name="hookrightarrow"            class="o" val="&#x21aa;"/>
-  <entry name="Uparrow"                   class="o" val="&#x21d1;"/>
-  <entry name="Downarrow"                 class="o" val="&#x21d3;"/>
-  <entry name="searrow"                   class="o" val="&#x2198;"/>
-  <entry name="swarrow"                   class="o" val="&#x2199;"/>
-
-  <entry name="buildrel" pattern="#1\over#2" embellishment="1"/>
-
-  <!-- Delimiters -->
-
-  <entry name="lbrack"         class="o" val="[" delimiter="1"/>
-  <entry name="rbrack"         class="o" val="]" delimiter="1"/>
-  <entry name="vert"           class="o" val="|" delimiter="1"/>
-  <entry name="Vert"           class="o" val="&#x2016;" delimiter="1"/>
-  <entry name="lbrace"         class="o" val="{" delimiter="1"/>
-  <entry name="{"              class="o" val="{" delimiter="1"/>
-  <entry name="rbrace"         class="o" val="}" delimiter="1"/>
-  <entry name="}"              class="o" val="}" delimiter="1"/>
-  <entry name="lfloor"         class="o" val="&#x230a;" delimiter="1"/>
-  <entry name="rfloor"         class="o" val="&#x230b;" delimiter="1"/>
-  <entry name="langle"         class="o" val="&#x2329;" delimiter="1"/>
-  <entry name="rangle"         class="o" val="&#x232a;" delimiter="1"/>
-  <entry name="lceil"          class="o" val="&#x2308;" delimiter="1"/>
-  <entry name="rceil"          class="o" val="&#x2309;" delimiter="1"/>
-
-  <entry name="left"           pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="right"          pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="bigl"           pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="bigr"           pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="bigm"           pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="big"            pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="Bigl"           pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="Bigr"           pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="Bigm"           pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="biggl"          pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="biggr"          pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="biggm"          pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="Biggl"          pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="Biggr"          pattern="#1" embellishment="1" delimiter="1"/>
-  <entry name="Biggm"          pattern="#1" embellishment="1" delimiter="1"/>
-
-  <!-- Accents -->
-
-  <entry name="hat"       pattern="#1" embellishment="1"/>
-  <entry name="widehat"   pattern="#1" embellishment="1"/>
-  <entry name="check"     pattern="#1" embellishment="1"/>
-  <entry name="tilde"     pattern="#1" embellishment="1"/>
-  <entry name="widetilde" pattern="#1" embellishment="1"/>
-  <entry name="acute"     pattern="#1" embellishment="1"/>
-  <entry name="grave"     pattern="#1" embellishment="1"/>
-  <entry name="dot"       pattern="#1" embellishment="1"/>
-  <entry name="ddot"      pattern="#1" embellishment="1"/>
-  <entry name="breve"     pattern="#1" embellishment="1"/>
-  <entry name="bar"       pattern="#1" embellishment="1"/>
-  <entry name="vec"       pattern="#1" embellishment="1"/>
-
-  <!-- Elementary Math Control Sequences -->
-
-  <entry name="overline"  pattern="#1"/>
-  <entry name="underline" pattern="#1"/>
-  <entry name="sqrt"      pattern="#1"/>
-  <entry name="root"      pattern="#1\of#2"/>
-  <entry name="over"      pattern="{}"/>
-  <entry name="atop"      pattern="{}"/>
-  <entry name="choose"    pattern="{}"/>
-  <entry name="brace"     pattern="{}"/>
-  <entry name="brack"     pattern="{}"/>
-
-  <!-- Style -->
-
-  <entry name="displaystyle"      pattern="}"/>
-  <entry name="textstyle"         pattern="}"/>
-  <entry name="scriptstyle"       pattern="}"/>
-  <entry name="scriptscriptstyle" pattern="}"/>
-
-  <!-- Non-Italic Function Names -->
-
-  <entry name="arccos" class="i" val="arccos"/>
-  <entry name="arcsin" class="i" val="arcsin"/>
-  <entry name="arctan" class="i" val="arctan"/>
-  <entry name="arg"    class="i" val="arg"/>
-  <entry name="cos"    class="i" val="cos"/>
-  <entry name="cosh"   class="i" val="cosh"/>
-  <entry name="cot"    class="i" val="cot"/>
-  <entry name="coth"   class="i" val="coth"/>
-  <entry name="csc"    class="i" val="csc"/>
-  <entry name="exp"    class="i" val="exp"/>
-  <entry name="deg"    class="i" val="deg"/>
-  <entry name="det"    class="o" val="det" limits="1"/>
-  <entry name="dim"    class="i" val="dim"/>
-  <entry name="gcd"    class="o" val="gcd" limits="1"/>
-  <entry name="hom"    class="i" val="hom"/>
-  <entry name="inf"    class="o" val="inf" limits="1"/>
-  <entry name="ker"    class="i" val="ker"/>
-  <entry name="lg"     class="i" val="lg"/>
-  <entry name="lim"    class="o" val="lim" limits="1"/>
-  <entry name="liminf" class="o" val="liminf" limits="1"/>
-  <entry name="limsup" class="o" val="limsup" limits="1"/>
-  <entry name="ln"     class="i" val="ln"/>
-  <entry name="log"    class="i" val="log"/>
-  <entry name="max"    class="o" val="max" limits="1"/>
-  <entry name="min"    class="o" val="max" limits="1"/>
-  <entry name="Pr"     class="o" val="Pr" limits="1"/>
-  <entry name="sec"    class="i" val="sec"/>
-  <entry name="sin"    class="i" val="sin"/>
-  <entry name="sinh"   class="i" val="sinh"/>
-  <entry name="sup"    class="o" limits="1"/>
-  <entry name="tan"    class="i" val="tan"/>
-  <entry name="tanh"   class="i" val="tanh"/>
-  <entry name="pmod"   pattern="#1"/>
-  <entry name="bmod"   class="o" val="mod"/>
-
-  <!-- Ellipses -->
-
-  <entry name="dots"          class="i" val="&#x2026;"/>
-  <entry name="ldots"         class="i" val="&#x2026;"/>
-  <entry name="cdots"         class="i" val="&#x22ef;"/>
-  <entry name="vdots"         class="i" val="&#x22ee;"/>
-  <entry name="ddots"         class="i" val="&#x22f1;"/>
-
-  <!-- Fonts -->
-
-  <entry name="rm" pattern="}"/>
-  <entry name="bf" pattern="}"/>
-  <entry name="tt" pattern="}"/>
-  <entry name="sl" pattern="}"/>
-  <entry name="it" pattern="}"/>
-
-  <!-- Horizontal Spacing -->
-
-  <entry name=","/>
-  <entry name="&gt;"/>
-  <entry name=";"/>
-  <entry name="!"/>
-
-  <!-- Braces and Matrices -->
-
-  <entry name="matrix"       pattern="#1" table="1"/>
-  <entry name="pmatrix"      pattern="#1" table="1"/>
-  <entry name="bordermatrix" pattern="#1" table="1"/>
-  <entry name="overbrace"    pattern="#1" limits="1"/>
-  <entry name="underbrace"   pattern="#1" limits="1"/>
-  <entry name="cases"        pattern="#1" table="1"/>
-
-</dictionary>
diff --git a/helm/DEVEL/mathml_editor/dict/dictionary.dtd b/helm/DEVEL/mathml_editor/dict/dictionary.dtd
deleted file mode 100644 (file)
index 3fefc71..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-
-<!ELEMENT dictionary ((include)*,(entry*))>
-<!ATTLIST dictionary
-  name      CDATA   #REQUIRED
->
-
-<!ELEMENT include EMPTY>
-<!ATTLIST include href CDATA>
-
-<!ELEMENT entry EMPTY>
-<!ATTLIST entry
-  name      ID        #REQUIRED
-  pattern   CDATA     #IMPLIED
-  val       CDATA     #IMPLIED
-  class     (m|o|i|n) #IMPLIED
-  table     (0|1)     #IMPLIED
-  delimiter (0|1)     #IMPLIED 
-  limits    (0|1)     #IMPLIED
-  embellishment (0|1) #IMPLIED
-  infix     NMTOKEN   #IMPLIED
-  prefix    NMTOKEN   #IMPLIED
-  postfix   NMTOKEN   #IMPLIED
->
diff --git a/helm/DEVEL/mathml_editor/doc/.cvsignore b/helm/DEVEL/mathml_editor/doc/.cvsignore
deleted file mode 100644 (file)
index 44d7495..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-spec.aux
-spec.dvi
-spec.log
-spec.ps
-*~
diff --git a/helm/DEVEL/mathml_editor/doc/spec.tex b/helm/DEVEL/mathml_editor/doc/spec.tex
deleted file mode 100644 (file)
index a9ccdc2..0000000
+++ /dev/null
@@ -1,973 +0,0 @@
-\documentclass[10pt]{article}
-
-\usepackage{a4wide}
-\usepackage{palatino}
-\usepackage{euler}
-\usepackage{amssymb}
-\usepackage{stmaryrd}
-\usepackage{wasysym}
-
-\title{\EdiTeX: a MathML Editor Based on \TeX{} Syntax\\\small Description and Formal Specification}
-\author{Paolo Marinelli\\Luca Padovani\\\small\{{\tt pmarinel},{\tt lpadovan}\}{\tt @cs.unibo.it}\\\small Department of Computer Science\\\small University of Bologna}
-\date{}
-
-\newcommand{\EdiTeX}{Edi\TeX}
-
-\newcommand{\tmap}[1]{\llbracket#1\rrbracket}
-\newcommand{\tadvance}{\vartriangle}
-\newcommand{\tnext}{\rhd}
-\newcommand{\G}{\texttt{g}}
-\newcommand{\PNODE}{\texttt{p}}
-\newcommand{\SNODE}{\texttt{s}}
-\newcommand{\INODE}{\texttt{i}}
-\newcommand{\NNODE}{\texttt{n}}
-\newcommand{\ONODE}{\texttt{o}}
-\newcommand{\CNODE}{\texttt{c}}
-\newcommand{\TABLE}{\texttt{table}}
-\newcommand{\SP}{\texttt{sp}}
-\newcommand{\SB}{\texttt{sb}}
-\newcommand{\CELL}{\texttt{cell}}
-\newcommand{\ROW}{\texttt{row}}
-\newcommand{\SLDROP}{\blacktriangleleft}
-\newcommand{\NLDROP}{\vartriangleleft}
-\newcommand{\RDROP}{\vartriangleright}
-
-\begin{document}
-
-\maketitle
-
-\section{Introduction}
-
-MathML~\cite{MathML1,MathML2,MathML2E} is an XML application for the
-representation of mathematical expressions. As most XML applications,
-MathML is unsuitable to be hand-written, except for the simplest
-cases, because of its verbosity. In fact, the MathML specification
-explicitly states that
-\begin{quote}
-``While MathML is human-readable, it is anticipated that, in all but
-the simplest cases, authors will use equation editors, conversion
-programs, and other specialized software tools to generate MathML''
-\end{quote}
-
-The statement about human readability of MathML is already too strong,
-as the large number of mathematical symbols, operators, and
-diacritical marks that are used in mathematical notation cause MathML
-documents to make extensive use of Unicode characters that typically
-are not in the ``visible'' range of common text editors. Such
-characters may appear as entity references, whose name indicates
-somehow the kind of symbol used, or character references or they are
-directly encoded in the document encoding scheme (for instance,
-UTF-8).
-
-It is thus obvious that authoring MathML documents assumes the
-assistance of dedicated tools. As of today, such tools can be
-classified into two main categories:
-\begin{enumerate}
-  \item WYSIWYG (What You See Is What You Get) editors that allow the
-    author to see the formatted document on the screen as it is
-    composed;
-  \item conversion tools that generate MathML markup from different
-    sources, typically other markup languages for scientific
-    documents, such as \TeX.
-\end{enumerate}
-
-While the former tools are certainly more appealing, especially to the
-unexperienced user, as they give a direct visual feedback, the
-existance of tools in the second category takes into account the large
-availability of existing documents in \TeX{} format, and also the fact
-that experienced or ``lazy'' users may continue to prefer the use of a
-markup language other than MathML for editing, and generate MathML
-only as a final step of the authoring process. The ``laziness'' is not
-really intended as a way of being reluctant towards a new technology,
-but rather as a justified convincement that WYSIWYG editors are ``nice
-to look at'' but after all they may slow down the authoring process.
-WYSIWYG editors often involve the use of menus, palettes of symbols,
-and, in general, an extensive use of the pointing device (the mouse)
-for completing most operations. The use of shortcuts is of little
-help, as it implies very soon a challenging exercise for the fingers
-and the mind. Moreover, authors \emph{cannot improve} their authoring
-speed with time.  On the other side, the gap between the syntax of any
-markup language for mathematics and mathematical notation may be
-relevant, especially for large, non-trivial formulas and authoring is
-a re-iterated process in which the author repeadtedly types the markup
-in the editor, compiles, and looks at the result inside a pre-viewer.
-
-\EdiTeX{} tries to synthesize the ``best of both worlds'' in a single
-tool. The basic idea is that of creating a WYSIWYG editor in which
-editing is achieved by typing \TeX{} markup as the author would do in
-a text editor. The \TeX{} markup is tokenized and parsed on-the-fly
-and a corresponding MathML representation is created and
-displayed. This way, the author can see the rendered document as it
-changes. The advantages of this approach can be summarized as follows:
-\begin{itemize}
-  \item the document is rendered concurrently with the editing, the
-    user has an immediate feedback hence it is easier to spot errors;
-  \item the author types in a concrete (and likely familiar) syntax
-    improving the editing speed;
-  \item the usual WYSIWYG mechanisms are still available. In
-    particular, it is possible to select \emph{visually} a fragment of
-    the document that needs re-editing, or that was left behind for
-    subsequent editing.
-\end{itemize}
-
-\paragraph{The Name of the Game:} there is no reference to MathML in
-the name ``\EdiTeX.'' In fact, the architecture of the editor is not
-tied to MathML markup. Although we focus on MathML editing, by
-changing a completely modularized component of the editor it is
-virtually possible to generate any other markup language.
-
-\paragraph{Acknowledgments.} Stephen M. Watt and Igor Rodionov for
-their work on the \TeX{} to MathML conversion tool; Stan Devitt for an
-illuminating discussion about the architecture of \TeX{} to XML
-conversion tools; Claudio Sacerdoti Coen for the valuable feedback and
-uncountable bug reports.
-
-\section{Architecture}
-
-\section{Customization}
-
-\subsection{Short and Long Identifiers}
-
-\subsection{The Dictionary}
-
-\subsection{Stylesheets and Trasformations}
-
-\subsection{Rendering}
-
-\section{XML Representation of \TeX{} Markup}
-
-\section{Tokens}
-
-The following tokens are defined:
-
-\begin{tabular}{lllp{0.5\textwidth}}
-  \textbf{\TeX{}} & \textbf{Notation} & \textbf{Node} & \textbf{Description} \\
-\hline
-  \verb+{+ & $\mathrm{begin}$ & \texttt{g} & Beginning of a group \\
-  \verb+}+ & $\mathrm{end}$ & & End of a group \\
-  \verb+$+ & $\$$ & \texttt{math} & Math shift \\ %$ \\
-  & &  & End-of-line \\
-  \verb+#+$i$ & $p(i)$ & \texttt{p} & Parameter \\
-  \verb+^+ & $\uparrow$ & \texttt{sp} & Superscript \\
-  \verb+_+ & $\downarrow$ & \texttt{sb} & Subscript \\
-  & $\square$ & & Space-like character that can be ignored \\
-  & $s$ & \texttt{s} & Space-like character that may be significant \\
-  letter & $i(v)$ & \texttt{i} & Identifier $v$ \\
-  digit & $n(v)$ & \texttt{n} & Number $v$ \\
-  other & $o(v)$ & \texttt{o} & Other character or operator $v$ \\
-  \verb+~+ & $\sim$ & & Active character \\
-  \verb+%+ & $\%$ & & Comment \\
-  control & $c(v)\langle\alpha_1,\dots,\alpha_n\rangle$ & \texttt{c} & 
-    Control sequence $v$ that expects the $\alpha_1,\dots,\alpha_n$ sequence of tokens. \\
-  backspace & $\vartriangleleft$ & & \\
-  backspace & $\blacktriangleleft$ & & \\
-\end{tabular}
-
-%% Some tokens are mapped directly into nodes of the TML tree. The following functions shows
-%% the mapping:
-
-\begin{tabular}{r@{\quad$=$\quad}l}
-  $\tmap{\{}$ & \verb+g+ \\
-  $\tmap{p(i)}$ & \verb+p[@index=+$i$\verb+]+ \\
-  $\tmap{p_l(i)}$ & \verb+p[@index=+$i$\verb+][@left-open='1']+ \\
-  $\tmap{p_r(i)}$ & \verb+p[@index=+$i$\verb+][@right-open='1']+ \\
-  $\tmap{s}$ & \verb+s+ \\
-  $\tmap{\uparrow}$ & \verb+sp+ \\
-  $\tmap{\downarrow}$ & \verb+sb+ \\
-  $\tmap{i(v)}$ & \verb+i[@value=+$v$\verb+]+ \\
-  $\tmap{n(v)}$ & \verb+n[@value=+$v$\verb+]+ \\
-  $\tmap{o(v)}$ & \verb+o[@value=+$v$\verb+]+ \\
-  $\tmap{c(v)\langle\alpha_1,\dots,\alpha_n\rangle}$ & \verb+c[@name=+$v$\verb+][^+$\tmap{\alpha_1}\cdots\tmap{\alpha_n}$\verb+$]+\\
-\end{tabular}
-%$
-
-\section{Description and Semantics of the Pattern Language}
-
-%% \begin{eqnarray*}
-%%   \mathit{NodeTest} & ::= & \mathtt{*} \\
-%%   & | & \mathit{ElementType} \\
-%%   & | & \mathtt{<}~\mathit{ElementTypePattern}~\mathtt{>} \\[1ex]
-%%   \mathit{ElementTypePattern} & ::= & \mathtt{*} \\
-%%   & | & \mathit{ElementType}~(\mathtt{|}~\mathit{ElementType})^* \\
-%%   & | & \mathtt{!}\mathit{ElementType}~(\mathtt{|}~\mathit{ElementType})^*\\[1ex]
-%%   \mathit{NodePattern} & ::= & \mathit{NodeTest}~\mathit{AttributeQualifier}^*\\[1ex]
-%%   \mathit{AttributeQualifier} & ::= & \mathtt{[@}\mathit{AttributeTest}\mathtt{]}\\
-%%   & | & \mathtt{[!@}\mathit{AttributeTest}\mathtt{]}\\[1ex]
-%%   \mathit{AttributeTest} & ::= & \mathit{AttributeName} \\
-%%   & | & \mathit{AttributeName}\mathtt{='}\mathit{Text}\mathtt{'}
-%% \end{eqnarray*}
-
-\begin{table}
-\[
-\begin{array}{rcl@{\hspace{3em}}rcl@{\hspace{3em}}rcl}
-  C &::=& .               & Q &::=& \langle*\rangle                  & P &::=& P'\#P' \\
-  &|& ..                  & &|& \langle!*\rangle                     & &|& \cent P'\#P'\\
-  &|& /                   & &|& \langle n_1\mid\cdots\mid n_k\rangle & &|& P'\#P'\$\\%$
-  &|& Q                   & &|& \langle!n_1\mid\cdots\mid n_k\rangle & &|& \cent P'\#P'\$\\%$
-  &|& (C)                 & &|& Q[@n]                                & & &\\
-  &|& \{C:\Gamma\}        & &|& Q[!@n]                               & P' &::=& \\
-  &|& C\&C                & &|& Q[@n=v]                              & &|& C\;P'\\
-  &|& C\mid C             & &|& Q[!@n=v]                             & & &\\
-  &|& C+                  & &|& Q[P]                                 & & &\\
-  &|& C?                  & &|& Q[!P]                                & & &\\
-  &|& C*                  & & &                                      & & &\\ 
-  &|& C\;C                & & &                                      & & &\\
-  &|& !C                  & & &                                      & & &\\
-\end{array}
-\]
-\caption{Syntax of the regular context language. $n$, $n_i$ denote
-names, $v$ denotes a string enclosed in single or double quotes}
-\end{table}
-
-
-\section{Insert Rules}
-
-\paragraph{Begin Group:} $\{$
-
-\begin{description}
-  \item{\verb+table/cursor+}\\
-   create a \texttt{row} node, create a \texttt{cell} node, create a \texttt{g} node,
-    append the cursor to the \texttt{g} node, append the \texttt{g} node to the \texttt{cell} node,
-    append the \texttt{cell} node to the \texttt{row} node, append the \texttt{row} node to the
-    \texttt{c} node 
-  \item{\verb+cursor+} \\ create a \texttt{g} node, replace the cursor with the new \texttt{g} node,
-    append the cursor to the new \texttt{g} node
-\end{description}
-
-% CASE: c/g[!@id]/cursor
-
-% CASE: c/cursor
-
-% ELSE:
-
-% do_begin:
-% CASE: c[@table='1']/cursor
-% ELSE:
-%   create a g node with id, replace the cursor with the fresh g and append
-%   the cursor as only child of it
-
-\paragraph{End Group:} $\}$
-
-\begin{description}
-  \item{\verb+g[@id]/cursor+}\\
-  remove the cursor, put $\tadvance$ after the \texttt{g} node
-  \item{\verb+row/cell/g/cursor+}\\
-  remove the cursor, put $\tadvance$ after the \texttt{row} node
-  \item{\verb+math/g[!@id]/cursor+}\\
-  ?
-  \item{\verb+cursor+}\\
-  error ?
-\end{description}
-
-\paragraph{Math Shift:} $\$$
-
-\begin{description}
-  \item{\verb+tex/cursor+}\\
-  create a \texttt{math} node, create a \texttt{g} node, append the \texttt{g} node
-    as child of the \texttt{math} node, append the cursor as child of the \texttt{g} node
-  \item{\verb+math[@display='1']/g[!@id][*#]/cursor+}\\
-  append the cursor as last child of the \texttt{math} node
-  \item{\verb+math/g[!@id][*#]/cursor+}\\
-  remove the cursor
-  \item{\verb+math[!display='1']/g[!@id]/cursor+}\\
-  set \verb+display='1'+ in the \texttt{math} node
-  \item{\verb+math/g[!@id]+}\\
-  append the cursor after the \texttt{math} node
-  \item{\verb+math/cursor+}\\
-  remove the cursor
-  \item{\verb+cursor+} \\
-  error ?
-\end{description}
-
-% do_shift:
-% CASE: tex/cursor
-%   create a math node. create a g node. append g as child of math.
-%   append the cursor as child of g
-% CASE: math[@display='1']/g[!@id][*#]/cursor
-%   append the cursor as last child of math
-% CASE: math/g[!@id][*#]/cursor
-%   remove the cursor. Editing is done
-% CASE: math[!display='1']/g[!@id]/cursor
-%   set the display attribute to '1'
-% CASE: math/g[!@id]
-%   append the cursor after math (?)
-% CASE: math/cursor
-%   remove the cursor. Editing is done
-% ELSE:
-%   error
-
-\paragraph{Align:} $\&$
-
-\begin{description}
-  \item{\verb+g[@id]/cursor+}\\
-  create a \texttt{row} node, create a \texttt{cell} node, create a \texttt{g} node,
-    append the cursor to the new \texttt{g} node, append the \texttt{cell} node to the
-    the \texttt{row} node ?
-  \item{\verb+row/cell/g/cursor+}\\
-  create the \texttt{g} node, create the \texttt{cell} node, append the cursor
-    as child of the new \texttt{g} node, append the new \texttt{g} node to the new
-    \texttt{cell} node after the old \texttt{cell} node
-  \item{\verb+cursor+}\\
-  error
-\end{description}
-
-% do_align:
-% CASE: g[@id]/cursor
-%   create a row node. create a cell node. create a g node. append the
-%   cursor to g, append the g to cell, append the cell to row, ???
-% CASE: row/cell/g/cursor
-%   create a g node. create a cell node. appent the cursor to g,
-%   append the g to cell, insert the new cell after the existing cell
-% ELSE:
-%   error
-
-\paragraph{End-of-line:}
-
-% do_eol:
-%   ignored
-
-\paragraph{Parameter:} $p(i)$
-% do_parameter:
-%   ignored
-
-\paragraph{Superscript:} $\uparrow$
-
-\begin{description}
-  \item{\verb+<g|p>[^#]/cursor+}\\
-  create a \SP{} node, create a \G{} node, replace the cursor with the \SP{} node,
-    append the \G{} node as first child of the \SP{} node, append the cursor as last
-    child of the \SP{} node
-  \item{\verb+<g|p>[*#]/cursor+}\\
-  create a \SP{} node, replace \texttt{*} with the \SP{} node, append \texttt{*} to
-    the \SP{} node, append cursor to the \SP{} node
-  \item{\verb+sp[^*#$][!@over='1']/cursor+}\\ %$
-  set \verb+over='1'+ in the \SP{} node
-  \item{\verb+sp[^*#$][@over='1']/cursor+}\\ %$
-  error
-  \item{\verb+cursor+}\\
-  error ?
-\end{description}
-% do_superscript:
-% CASE: g[^#]/cursor
-%   create sp node. create g node, replace cursor with sp, append g to sp, append cursor to sp
-% CASE: g[*#]/cursor
-%   create sp node, replace * with sp, append * to sp, append cursor to sp
-% CASE: sp[^*#$][!@over='1']/cursor
-%   set over='1' in sp node
-% CASE: sp[^*#$][@over='1']/cursor
-%   error
-% ELSE:
-%   error ?
-
-\paragraph{Subscript:} $\downarrow$
-
-\begin{description}
-  \item{\verb+<g|p>[^#]/cursor+}\\
-  create a \SB{} node, create a \G{} node, replace the cursor with the \SB{} node,
-    append the \G{} node as first child of the \SB{} node, append the cursor as last
-    child of the \SB{} node
-  \item{\verb+<g|p>[*#]/cursor+}\\
-  create a \SB{} node, replace \texttt{*} with the \SB{} node, append \texttt{*} to
-    the \SB{} node, append cursor to the \SB{} node
-  \item{\verb+sb[^*#$][!@under='1']/cursor+}\\ %$
-  set \verb+under='1'+ in the \SB{} node
-  \item{\verb+sb[^*#$][@under='1']/cursor+}\\ %$
-  error
-  \item{\verb+cursor+}\\
-  error ?
-\end{description}
-% do_subscript:
-% CASE: g[^#]/cursor
-%   create sb node. create g node, replace cursor with sb, append g to sb, append cursor to sb
-% CASE: g[*#]/cursor
-%   create sb node, replace * with sb, append * to sb, append cursor to sb
-% CASE: sb[^*#$][!@under='1']/cursor
-%   set over='1' in sb node
-% CASE: sb[^*#$][@under='1']/cursor
-%   error
-% ELSE:
-%   error ?
-
-\paragraph{Ignorable space:} $\square$
-
-% do_ignorable_space:
-%   do nothing?
-
-\paragraph{Space:} $s$
-
-\begin{description}
-  \item{\verb+cursor+}\\
-  create \SNODE{} node, replace cursor with the \SNODE{} node, append
-  $\tadvance$ after \SNODE{} node
-\end{description}
-
-% do_space
-%   create s node, replace cursor with s, append \advance after s
-
-\paragraph{Identifier:} $i(v)$
-
-\begin{description}
-  \item{\verb+cursor+}\\
-  create an \INODE{}, set \verb+value=+$v$ in the \INODE{}, replace
-  cursor with \INODE{}, append $\tadvance$ after the \INODE{} node
-\end{description}
-
-% do_identifier
-%   create i node, replace cursor with i, append \advance after i
-
-\paragraph{Number:} $n(v)$
-
-\begin{description}
-  \item{\verb+cursor+}\\
-  create an \NNODE{}, set \verb+value=+$v$ in the \NNODE{}, replace
-  cursor with \NNODE{}, append $\tadvance$ after the \NNODE{} node
-\end{description}
-
-% do_number
-%   create n node, replace cursor with n, append \advance after n
-
-\paragraph{Apostrophe:} $o({}')$
-
-\begin{description}
-  \item{\verb+<g/p>[(sp[*#$]/g[o[@name='prime']$])#]/cursor+}\\
-  create a \ONODE{} node, set \verb+name='prime'+ in the \ONODE{},
-    append the \ONODE{} to the innermost \G{} node
-  \item{\verb+<g|p>[(sb[^sp[^*#$]/g[o[@name='prime']]$])#]/cursor+}\\
-  create a \ONODE{} node, set \verb+name='prime'+ in the \ONODE{},
-    append the \ONODE{} to the innermost \G{} node
-  \item{\verb+<g|p>[*#]/cursor+}\\
-  create a \ONODE{} node, set \verb+name='prime'+ in the \ONODE{},
-    create a \SP{} node, create a \G{} node, replace \texttt{*} with \SP{} node,
-    append the new \G{} node to the \SP{} node, append the \ONODE{}
-    node to the new \G{} node
-  \item{\verb+<g|p>[^#]/cursor+}\\
-  error?
-  \item{\verb+cursor+}\\
-  cursor is not in a group, error?
-\end{description}
-
-% do_apostrophe
-% CASE: g[(sp[^*#$]/g[o[@name='prime']$])#]/cursor
-%   append a new o[@name='prime'] node to the inner g node
-% CASE: g[(sb[^sp[^*#$]/g[o[@name='prime']]$])#]/cursor
-%   append a new o[@name='prime'] node to the inner g node
-% CASE: g[*#]/cursor
-%   create sp node, create g node, replace * with sp, append * to sp, append g to sp,
-%   append a new o[@name='prime'[ node to the new g node
-% CASE: g[^#]/cursor
-%   error?
-% ELSE:
-%   cursor is not in a group, error?
-
-\paragraph{Other:} $o(v)$
-
-create an \ONODE{}, set \verb+value=+$v$ in the \ONODE{}, replace
-cursor with \ONODE{}, append $\tadvance$ after the \ONODE{} node
-
-% do_other
-%   create o node, replace cursor with o, append \advance after o
-
-\paragraph{Active:} $\sim$
-
-% do_active:
-%   ignored ???
-
-\paragraph{Comment:} $\%$
-
-% do_comment:
-%   ignored ???
-
-\paragraph{Begin Environment:} $c(\mathtt{begin})\langle\alpha_1,\dots,\alpha_n\rangle$
-
-\paragraph{End Environment:} $c(\mathtt{end})\langle\rangle$
-
-\paragraph{Left Delimiter:} $c(\mathtt{left})\langle\alpha\rangle$
-
-\paragraph{Right Delimiter:} $c(\mathtt{right})\langle\alpha\rangle$
-
-\paragraph{Carriage-Return:} $c(\mathtt{cr})\langle\rangle$
-
-\begin{description}
-  \item{\verb+row/cell/g/cursor+}\\
-  create a \ROW{} node, create a \CELL{} node, create a \G{}
-    node, append the cursor to the new \G{} node, append the new \G{}
-    node to the new \CELL{} node, append the new \CELL{} node to the
-    new \ROW{} node, insert the new \ROW{} node after the old \ROW{} node
-  \item{\verb+cursor+}\\
-  ignored?
-\end{description}
-
-% do_cr:
-% CASE: row/cell/g/cursor
-%   create row node, create cell node, create g node,
-%   append cursor to g, append g to cell, append cell to row,
-%   insert new row after old row
-% ELSE:
-%   ignored ???
-
-\paragraph{Macro:} $c(v)\langle\alpha_1,\dots,\alpha_n\rangle$
-
-\begin{description}
-  \item{\verb+<p|g>/cursor+}\\
-  create a \CNODE{} node with the children corresponding to the pattern
-  $\tmap{\alpha_1}$,\dots,$\tmap{\alpha_n}$, replace the cursor with
-  the new \CNODE{} node. put $\tnext$ as the first child of the new
-  \CNODE{} node
-
-  \item{\verb+*/cursor+}\\
-  create a \CNODE{} node with the children corresponding to the pattern
-  $\tmap{\alpha_1}$,\dots,$\tmap{\alpha_n}$, replace the cursor with
-  the new \CNODE{} node, put $\tnext$ as the first child of the new
-  \CNODE{} node. If $n\ne0$ emit a warning (the macro has arguments but
-  but the context wouldn't normally allow them to be entered)
-\end{description}
-
-% do_macro:
-% CASE: g/cursor
-%   create a c node with children corresponding to the pattern of the macro
-%   append \nextparam as first child of the macro
-
-\section{Left Drop Rules}
-
-\paragraph{Normal Left Drop:} $\NLDROP$
-
-\begin{description}
-
-  \item{\verb+cursor+}\\
-  replace the cursor with the $\NLDROP$.
-
-\end{description}
-
-\paragraph{Special Left Drop:} $\SLDROP$
-
-\begin{description}
-
-  \item{\verb+cursor+}\\
-  replace the cursor with the $\SLDROP$.
-
-\end{description}
-
-\section{Right Drop Rules}
-
-\begin{description}
-
-  \item{\verb+cursor+}\\
-  replace the cursor with the $\RDROP$.
-
-\end{description}
-
-\section{$\varepsilon$-rules}
-
-\paragraph{Nromal Left Drop}
-
-\begin{description}
-
-  \item{\verb+math/g[^#]/+$\NLDROP$}\\
-  repalce the $\NLDROP$ with the cursor.
-
-  %**************************************************************************************
-  %****************************** epsilon-rules with \NLDROP ****************************
-  %**************************************************************************************
-
-  %**************  \NLDROP has neither preceding nor following nodes ********************
-
-  \item{\verb+math[^#$]/+$\NLDROP$}\\
-  replace the $\NLDROP$ with the cursor.
-
-  \item{\verb+g[^#$]/+$\NLDROP$}\\
-  replace the \G{} node with the $\NLDROP$.
-
-  % this rule is overridden by the two ones below
-  \item{\verb+c/p[^#$]/+$\NLDROP$}\\
-  remove the $\NLDROP$ and insert it before the \PNODE{} node.
-
-  \item{\verb+c[p[@left-open='1'][*]#$]/p[@right-open='1'][^#$]/+$\NLDROP$}\\
-  replace the \CNODE{} node with the content of the first \PNODE{} node and insert the $\NLDROP$ after this content
-
-  \item{\verb+c[p[@left-open='1'][!*]#$]/p[@right-open='1'][^#$]/+$\NLDROP$}\\
-  replace the \CNODE{} node with the $\NLDROP$.
-
-  \item{\verb+c[^#][!p(*)]/+$\NLDROP$}\\
-  replace the \CNODE{} node with the $\NLDROP$.
-
-  \item{\verb+cell[^#$]/+$\NLDROP$}\\
-  replace the cell with the $\NLDROP_n$.
-
-  \item{\verb+table[^#$]/+$\NLDROP$}\\
-  replace the \TABLE{} node with the $\NLDROP$.
-
-  %************************* \NLDROP has at least one preceding node *********************
-
-  % general rules
-
-  % this rule should also handles the case where the \NLDROP is the third (and last) child of a script.
-  \item{\verb+*[*#]/+$\NLDROP$}\\
-  remove the $\NLDROP$ and append it as the last child of its ex preceding brother.
-
-  % this rule overrides the one above
-  \item{\verb+*[(i|n|o|s|c[!*])#]/+$\NLDROP$}\\
-  remove the $\NLDROP$ and replace the token with the $\NLDROP_n$.
-
-  % special rules
-
-  \item{\verb+<sp|sb>[^*#$]+/$\NLDROP$}\\
-  replace the script node with its first child and insert the $\NLDROP$ after it.
-
-  % this rule overrides the one above.
-  \item{\verb+<sp|sb>[^g[!@id][!*]#$]/+$\NLDROP$}\\
-  replace the script with the cursor.
-
-  % this rule overrides the one above
-  \item{\verb+*[sp[!@id][^*g[!@id][^o[@name='prime']++\verb+o[@name='prime']$]]#]/+$\NLDROP$}\\
-  remove the last \ONODE{} node and replace the $\NLDROP$ with the cursor.%$\NLDROP_n$.
-
-  \item{\verb+*[sp[!@id][^*g[!@id][^o[@name='prime']$]]#]/+$\NLDROP$}\\
-  replace the script with its first child and replace the $\NLDROP$ with the cursor.%$\NLDROP_n$.
-
-  \item{\verb+c[(i|n|o|s|c[!*])#]/+$\NLDROP$}\\
-  move the $\NLDROP$ before the delimiter.
-
-  % this rule is true for both right-open and parameterized macros.
-  \item{\verb+c[p#]/+$\NLDROP$}\\
-  move the $\NLDROP$ into the \PNODE{} node.
-
-  %**************** \NLDROP has no preceding nodes, but has following nodes **************
-
-  % general rule
-  \item{\verb+*[^#*]/+$\NLDROP$}\\
-  remove the $\NLDROP$ and insert it before its parent.
-
-  % special rules
-
-  % this rule is applicable to all macros.
-  \item{\verb+c[^#][p[*]]/+$\NLDROP$}\\
-  remove the $\NLDROP$ and insert it before the \CNODE{} node.
-
-\end{description}
-
-\paragraph{Special Left Drop}
-
-\begin{description}
-
-  %********************************************************************************************************
-  %************************************ epsilon-rules with \SLDROP ****************************************
-  %********************************************************************************************************
-
-  \item{\verb+math/+$\SLDROP$}\\
-  replace the $\SLDROP$ with the cursor.
-
-  \item{\verb+math/g[^#]/+$\NLDROP$}\\
-  replace the $\NLDROP$ with the cursor.
-
-  %************************ \SLDROP has neither preceding nor following nodes *****************************
-
-  \item{\verb+g[^#$]/+$\SLDROP$}\\
-  replace the \G{} node with the cursor.
-
-  \item{\verb+c[p[@left-open='1'][*]#$]/p[@right-open='1'][^#$]/+$\SLDROP$}\\
-  replace the \CNODE{} node with the content of the first \PNODE{} node and insert the cursor after this content
-
-  \item{\verb+c[p[@left-open='1'][!*]#$]/p[@right-open='1'][^#$]/+$\SLDROP$}\\
-  replace the \CNODE{} node with the cursor.
-
-  \item{\verb+c/p[^#$]/+$\SLDROP$}\\
-  remove the $\SLDROP$ and insert it before the \PNODE{} node.
-
-  \item{\verb+c[^#][!p(*)]/+$\SLDROP$}\\
-  replace the \CNODE{} node with the cursor.
-
-  \item{\verb+cell[^#$]/+$\SLDROP$}\\
-  replace the cell with the $\NLDROP_n$.
-
-  \item{\verb+table[^#$]/+$\SLDROP$}\\
-  replace the \TABLE{} node with the cursor.
-
-  %*********************** \SLDROP has at least one preceding node ***********************************
-
-  \item{\verb+*[sp[!@id][^*g[!@id][^o[@name='prime']++\verb+o[@name='prime']$]]#]/+$\SLDROP$}\\
-  remove the last \ONODE{} node and replace the $\SLDROP$ with the cursor.
-
-  \item{\verb+*[sp[!@id][^*g[!@id][^o[@name='prime']$]]#]/+$\SLDROP$}\\
-  replace the script with its first child and replace the $\SLDROP$ with the cursor.%$\NLDROP_n$.
-
-  \item{\verb+<sp|sb>[^g[!@id][!*]#$]/+$\SLDROP$}\\
-  replace the script with the cursor.
-
-  % this rule is overridden by the three rules above.
-  \item{\verb+<sp|sb>[^*#$]+/$\SLDROP$}\\
-  replace the script node with its first child and insert the cursor after it.
-
-  \item{\verb+c[(i|n|o|s|c[!*])#]/+$\SLDROP$}\\
-  remove the $\SLDROP$ and insert the cursor before the delimiter.
-
-  \item{\verb+c[p#(i|n|o|s|c[!*])]/+$\SLDROP$}\\
-  remove the $\SLDROP$ and insert the cursor into the \PNODE{} node.
-
-  \item{\verb+c[p[@right-open='1']#]+}\\
-  remove the $\SLDROP$ and append the curor as last child of the \PNODE{} node.
-
-  % this rule is overridden by the two ones above.
-  \item{\verb+c[p#]/+$\SLDROP$}\\
-  move the $\SLDROP$ into the \PNODE{} node.
-
-  \item{\verb+*[(i|n|o|s|c[!*])#]/+$\SLDROP$}\\
-  remove the $\SLDROP$ and replace the token with the cursor.
-
-  \item{\verb+*[table#]/+$\SLDROP$}\\
-  remove the $\SLDROP$ and append the $\NLDROP_n$ as the last child of the \TABLE{} node.
-
-  \item{\verb+*[c#]/+$\SLDROP$}\\
-  move the $\SLDROP$ into the \CNODE{} node.
-
-  \item{\verb+*[g#]/+$\SLDROP$}\\
-  remove the $\SLDROP$ and append the cursor as the last child of the \G{} node.
-
-  %********** \SLDROP has no preceding node, but has following ones **************
-
-  \item{\verb+c[^#p][p(*)]/+$\SLDROP$}\\
-  remove the $\SLDROP$ and insert the cursor before the \CNODE{} node.
-
-  % general rule
-  \item{\verb+*[^#*]/+$\SLDROP$}\\
-  remove the $\SLDROP$ and insert the cursor before its parent.
-
-\end{description}
-
-\paragraph{Normalize Left Drop}
-
-\begin{description}
-
-  %****************************************************************************************
-  %***************************** epsilon-rules with \NLDROP_n *****************************
-  %****************************************************************************************
-
-  \item{\verb+*[*#]/+$\NLDROP_n$}\\
-  replace the $\NLDROP_n$ with the cursor.
-
-  \item{\verb+row[cell#]/+$\NLDROP_n$}\\
-  remove the $\NLDROP_n$ and append the cursor as the last child of the \CELL{} node.
-
-  \item{\verb+row[^#$]/+$\NLDROP_n$}\\
-  replace the \ROW{} node with the $\NLDROP_n$
-
-  \item{\verb+table[row#]/+$\NLDROP_n$}\\
-  remove the $\NLDROP_n$ and append it as last child of the \ROW{} node.
-
-  \item{\verb+table[^#$]/+$\NLDROP_n$}\\
-  replace the \TABLE{} with the cursor.%$\NLDROP_n$.
-
-  \item{\verb+g[@id][^#$]/+$\NLDROP_n$}\\
-  replace the \G{} node with the $\NLDROP_n$.
-
-  \item{$\NLDROP_n$}\\
-  replace the $\NLDROP_n$ with the cursor.
-
-\end{description}
-
-\paragraph{Right Drop}
-
-\begin{description}
-
-  %************************* \RDROP has at least a following node ****************************************
-
-  \item{\verb+c[#(i|n|o|s|c[!*])]/+$\RDROP$}\\
-  remove the $\RDROP$ and append it after the delimiter
-
-  \item{\verb+*[#(i|n|o|s|c[!*])]/+$\RDROP$}\\
-  remove the token and replace the $\RDROP$ with the cursor $\RDROP_n$.
-
-  % this rule is overridden by those ones above.
-  \item{\verb+*[#*]/+$\RDROP$}\\
-  remove the $\RDROP$ and append it as the first child of the following node.
-
-  %************************** \RDROP has neither following nor preceding nodes ******************************
-
-  \item{\verb+c[#$][!p[*]]/+$\RDROP$}\\
-  replace the \CNODE{} with the $\RDROP$.
-
-  \item{\verb+p[^#$]/+$\RDROP$}\\
-  move the $\RDROP$ after the \PNODE{} node.
-
-  \item{\verb+g[^#$]/+$\RDROP$}\\
-  replace the \G{} node with the $\RDROP$.
-
-\end{description}
-
-\paragraph{Normalize Right Drop}
-
-\begin{description}
-
-  % at the moment it's the only rule, defined for this symbol.
-  \item{\verb+g[@id][^#$]/+$\RDROP_n$}\\
-  replace the \G{} node with the $\RDROP_n$.
-
-  \item{$\RDROP_n$}\\
-  replace the $\RDROP$ with the cursor.
-
-\end{description}
-
-\paragraph{Advance}
-
-\begin{description}
-  \item{\verb+g/+$\tadvance$}\\
-  replace $\tadvance$ with the cursor
-
-  \item{\verb+p[#$]/+$\tadvance$}\\ %$
-  put $\tadvance$ after the \PNODE{} node
-
-  \item{\verb+c[#p]/+$\tadvance$} \\
-  remove $\tadvance$, put the cursor as first child of the \PNODE{} node
-
-  \item{\verb+c[#*]/+$\tadvance$} \\ %$
-  replace $\tadvance$ with the cursor 
-
-  \item{\verb+c[#$]/+$\tadvance$} \\ %$
-  move $\tadvance$ after the \CNODE{} node
-\end{description}
-
-\paragraph{Next Parameter}
-
-\paragraph{Next Token}
-
-%% \begin{description}
-%%   \item{\verb+c[#p]/+$\tnext$} \\
-%% \end{description}
-
-% g[@id]/(c[#$][@right-open]/g[!@id][#$]/)+cursor  }   let p = cursor.parent() in remove; advance(p)
-
-% c/g[!@id]/cursor
-% c/cursor 
-% */cursor  {   let g = new group in replace
-
-% g[@id][^#$]/cursor  <=   cursor.parent().replace(cursor)
-% g[@id][^#$]/cursor  <-   cursor
-% (!g[@id][^#$])[A#B]/(g[@id][^#$]/)+cursor  <-  (!g[@id][^#$])[A#B]/cursor  
-
-\clearpage
-\appendix
-\section{Semantics of the Regular Context Language}
-
-\newcommand{\CSEM}[2]{\mathcal{C}\llbracket#1\rrbracket#2}
-\newcommand{\QSEM}[2]{\mathcal{Q}\llbracket#1\rrbracket#2}
-\newcommand{\TSEMUP}[2]{\mathcal{T}^\uparrow\llbracket#1\rrbracket#2}
-\newcommand{\TSEMDOWN}[2]{\mathcal{T}_\downarrow\llbracket#1\rrbracket#2}
-\newcommand{\NSEM}[2]{\mathcal{N}\llbracket#1\rrbracket#2}
-\newcommand{\PSEM}[1]{\mathcal{P}\llbracket#1\rrbracket}
-\newcommand{\LSEM}[2]{\mathcal{L}\llbracket#1\rrbracket#2}
-\newcommand{\RSEM}[2]{\mathcal{R}\llbracket#1\rrbracket#2}
-\newcommand{\FSEM}[2]{\mathcal{F}\llbracket#1\rrbracket(#2)}
-\newcommand{\PARENT}[1]{\mathit{parent}(#1)}
-\newcommand{\CHILDREN}[1]{\mathit{children}(#1)}
-\newcommand{\CHILD}[1]{\mathit{child}(#1)}
-\newcommand{\ANCESTORS}[1]{\mathit{ancestors}(#1)}
-\newcommand{\DESCENDANTS}[1]{\mathit{descendants}(#1)}
-\newcommand{\HASATTRIBUTE}[2]{\mathit{hasAttribute}(#1,#2)}
-\newcommand{\HASNOATTRIBUTE}[2]{\mathit{hasNoAttribute}(#1,#2)}
-\newcommand{\ATTRIBUTE}[2]{\mathit{attribute}(#1,#2)}
-\newcommand{\ISELEMENT}[1]{\mathit{isElement}(#1)}
-\newcommand{\NAME}[1]{\mathit{name}(#1)}
-\newcommand{\PREV}[1]{\mathit{prev}(#1)}
-\newcommand{\NEXT}[1]{\mathit{next}(#1)}
-\newcommand{\PREDICATE}[1]{\mathit{predicate}(#1)}
-\newcommand{\IFV}[3]{\begin{array}[t]{@{}l}\mathbf{if}~#1~\mathbf{then}\\\quad#2\\\mathbf{else}\\\quad#3\end{array}}
-\newcommand{\IFH}[3]{\mathbf{if}~#1~\mathbf{then}~#2~\mathbf{else}~#3}
-\newcommand{\TRUE}{\mathbf{true}}
-\newcommand{\FALSE}{\mathbf{false}}
-\newcommand{\FUN}[2]{\lambda#1.#2}
-\newcommand{\LET}[3]{\mathbf{let}~#1=#2~\mathbf{in}~#3}
-\newcommand{\REC}[2]{\mathbf{rec}~#1=#2}
-\newcommand{\APPLY}[2]{(#1\;#2)}
-\newcommand{\APPLYX}[3]{(#1\;#2\;#3)}
-\newcommand{\AND}{\wedge}
-\newcommand{\OR}{\vee}
-\newcommand{\AAND}{\,\vec{\AND}\,}
-\newcommand{\AOR}{\,\vec{\OR}\,}
-\newcommand{\MATCH}[4]{\begin{array}[t]{@{}c@{~\to~}l@{}l@{}}\multicolumn{2}{@{}l@{}}{\mathbf{match}~#1~\mathbf{with}}\\\phantom{|}\quad\{#2\}&#3\\|\quad\emptyset&#4\end{array}}
-
-\[
-\begin{array}{rcl}
-  \CSEM{q}{x} &=& \{x_1\mid x_1\in\{x\} \wedge \QSEM{q}{x_1}\}\\
-  \CSEM{..}{x} &=& \PARENT{x}\\
-  \CSEM{/}{x} &=& \CHILDREN{x}\\
-  \CSEM{c_1\;c_2}{x} &=& \CSEM{c_2}{\CSEM{c_1}{x}}\\
-  \CSEM{(c)}{x} &=& \CSEM{c}{x}\\
-  \CSEM{\{c:\alpha\}}{x} &=& \alpha(x,\CSEM{c}{x})\\
-  \CSEM{c_1\&c_2}{x} &=& \CSEM{c_1}{x} \cap \CSEM{c_2}{x}\\
-  \CSEM{c_1\mid c_2}{x} &=& \CSEM{c_1}{x} \cup \CSEM{c_2}{x}\\
-  \CSEM{c+}{x} &=& \CSEM{c}{x} \cup \CSEM{c+}{\CSEM{c}{x}}\\
-  \CSEM{c?}{x} &=& \{x\}\cup\CSEM{c}{x}\\
-  \CSEM{c*}{x} &=& \CSEM{{c+}?}{x}\\[3ex]
-  \QSEM{c}{x} &=& \CSEM{c}{x}\ne\emptyset\\
-  \QSEM{!c}{x} &=& \CSEM{c}{x}=\emptyset\\
-  \QSEM{\langle*\rangle}{x} &=& \TRUE\\
-  \QSEM{\langle n\rangle}{x} &=& \NAME{x}=n\\
-  \QSEM{@n}{x} &=& \HASATTRIBUTE{x}{n}\\
-  \QSEM{@n=v}{x} &=& \ATTRIBUTE{x}{n}=v\\
-  \QSEM{[p_1\#p_2]}{x} &=& \LSEM{p_1}{\PREV{x}}\wedge\RSEM{p_2}{\NEXT{x}}\\[3ex]
-  \LSEM{}{\alpha} &=& \TRUE\\
-  \LSEM{\cent}{\alpha} &=& \alpha=\emptyset\\
-  \LSEM{p\;q}{\emptyset} &=& \FALSE\\
-  \LSEM{p\;q}{\{x\}} &=& \QSEM{q}{x}\wedge\LSEM{p}{\PREV{x}}\\[3ex]
-  \RSEM{}{\alpha} &=& \TRUE\\
-  \RSEM{\$}{\alpha} &=& \alpha=\emptyset\\
-  \RSEM{q\;p}{\emptyset} &=& \FALSE\\
-  \RSEM{q\;p}{\{x\}} &=& \QSEM{q}{x}\wedge\RSEM{p}{\NEXT{x}}\\[3ex]
-  \PREDICATE{q} &=& \TRUE\\
-  \PREDICATE{..} &=& \FALSE\\
-  \PREDICATE{/} &=& \FALSE\\
-  \PREDICATE{c_1\;c_2} &=& \PREDICATE{c_1}\wedge\PREDICATE{c_2}\\
-  \PREDICATE{(c)} &=& \PREDICATE{c}\\
-  \PREDICATE{c_1\&c_2} &=& \PREDICATE{c_1}\wedge\PREDICATE{c_2}\\
-  \PREDICATE{c_1\mid c_2} &=& \PREDICATE{c_1}\wedge\PREDICATE{c_2}\\
-  \PREDICATE{c+} &=& \PREDICATE{c}\\
-  \PREDICATE{c?} &=& \PREDICATE{c}\\
-  \PREDICATE{c*} &=& \PREDICATE{c}
-\end{array}
-\]
-
-\[
-\begin{array}{rcl}
-  \PSEM{q} &=& \FUN{x}{\APPLY{\QSEM{q}{}}{x}} \\
-  \PSEM{..} &=& \FUN{x}{\neg\APPLY{\mathit{null}}{\PARENT{x}}}\\
-  \PSEM{/} &=& \FUN{x}{\neg\APPLY{\mathit{null}}{\CHILD{x}}}\\
-  \PSEM{(c)} &=& \PSEM{c}\\
-  \PSEM{\{c:\alpha\}} &=& \FUN{x}{\APPLY{\PSEM{c}}{x}\AAND\APPLY{\alpha}{x}}\\
-  \PSEM{c_1\;c_2} &=& \IFV{\PREDICATE{c_1}}{\FUN{x}{(\PSEM{c_1}\;x)\wedge(\PSEM{c_2}\;x)}}{\FSEM{c_1}{\PSEM{c_2},\FUN{\_}{\FALSE}}}\\
-  \PSEM{c_1\&c_2} &=& \IFV{\PREDICATE{c_1}\wedge\PREDICATE{c_2}}{\FUN{x}{(\PSEM{c_1}\;x)\wedge(\PSEM{c_2}\;x)}}{\FSEM{c_1\&c_2}{\FUN{\_}{\TRUE},\FUN{\_}{\FALSE}}}\\
-  \PSEM{c_1\mid c_2} &=& \FUN{x}{(\PSEM{c_1}\;x)\vee(\PSEM{c_2}\;x)}\\
-  \PSEM{c+} &=& \PSEM{c}\\
-  \PSEM{c?} &=& \FUN{\_}{\TRUE}\\
-  \PSEM{c*} &=& \FUN{\_}{\TRUE}\\[3ex]
-  \FSEM{q}{t,f} &=& \FUN{x}{(\APPLY{\PSEM{q}}{x}\AAND\APPLY{t}{x})\AOR\APPLY{f}{x}}\\
-  \FSEM{..}{t,f} &=& \FUN{x}{\MATCH{\PARENT{x}}{y}{\APPLY{t}{y}}{\APPLY{f}{x}}}\\
-%  \FSEM{/}{t,f} &=& \FUN{x}{(\vee_{y\in\CHILDREN{x}} \APPLY{t}{y})\AOR\APPLY{f}{x}}\\
-  \FSEM{/}{t,f} &=& \FUN{x}{\APPLYX{\mathit{exists}}{t}{\CHILD{x}}\AOR\APPLY{f}{x}}\\
-  \FSEM{(c)}{t,f} &=& \FSEM{c}{t,f}\\
-  \FSEM{\{c:\alpha\}}{t,f} &=& \FSEM{c}{\FUN{x}{\PSEM{c}\AAND\APPLY{\alpha}{x}\AAND\APPLY{t}{x},f}}\\
-  \FSEM{c_1\;c_2}{t,f} &=& \FUN{x}{\APPLY{\FSEM{c_1}{\FSEM{c_2}{t,\FUN{\_}{\APPLY{f}{x}}},f}}{x}}\\
-  \FSEM{c_1\&c_2}{t,f} &=& \FUN{x}{\APPLY{\FSEM{c_1}{\FUN{y}{\APPLY{\FSEM{c_2}{\FUN{z}{(y=z)\AAND\APPLY{t}{z}},\FUN{\_}{\APPLY{f}{x}}}}{x}},f}}{x}}\\
-  \FSEM{c_1\mid c_2}{t,f} &=& \FSEM{c_1}{t,\FSEM{c_2}{t,f}}\\
-  \FSEM{c+}{t,f} &=& \FSEM{c}{\FSEM{c+}{t,t},f}\\
-  \FSEM{c?}{t,f} &=& \FSEM{c}{t,t}\\
-  \FSEM{c*}{t,f} &=& \FSEM{{c+}?}{t,f}\\[3ex]
-  \QSEM{c}{} &=& \PSEM{c}\\
-  \QSEM{!c}{} &=& \FUN{x}{\neg\APPLY{\PSEM{c}}{x}}\\
-  \QSEM{\langle*\rangle}{} &=& \FUN{\_}{\TRUE}\\
-  \QSEM{\langle n\rangle}{} &=& \FUN{x}{\NAME{x}=n}\\
-  \QSEM{@n}{} &=& \FUN{x}{\HASATTRIBUTE{x}{n}}\\
-  \QSEM{@n=v}{} &=& \FUN{x}{\ATTRIBUTE{x}{n}=v}\\
-  \QSEM{[p_1\#p_2]}{} &=& \FUN{x}{\APPLY{\LSEM{p_1}{}}{\PREV{x}}\wedge\APPLY{\RSEM{p_2}{}}{\NEXT{x}}}\\[3ex]
-  \LSEM{}{} &=& \FUN{\_}{\TRUE}\\
-  \LSEM{\cent}{} &=& \mathit{null}\\
-  \LSEM{p\;q}{} &=& \FUN{x}{\MATCH{x}{y}{\QSEM{q}{y}\AAND\APPLY{\LSEM{p}}{\PREV{y}}}{\FALSE}}\\
-  \RSEM{}{} &=& \FUN{\_}{\TRUE}\\
-  \RSEM{\$}{} &=& \mathit{null}\\
-  \RSEM{p\;q}{} &=& \FUN{x}{\MATCH{x}{y}{\QSEM{q}{y}\AAND\APPLY{\RSEM{p}}{\NEXT{y}}}{\FALSE}}\\
-  \mathit{null} &=& \FUN{x}{\MATCH{x}{\_}{\FALSE}{\TRUE}}\\
-  \mathit{exists} &=& \FUN{t}{\REC{a}{\FUN{x}{\MATCH{x}{y}{\APPLY{t}{y}\AOR\APPLY{a}{\NEXT{x}}}{\FALSE}}}}
-\end{array}
-\]
-
-
-
-\end{document}
diff --git a/helm/DEVEL/mathml_editor/editex.pc.in b/helm/DEVEL/mathml_editor/editex.pc.in
deleted file mode 100644 (file)
index 9e2c91b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# This is a comment
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-datadir=@datadir@
-
-pkgdatadir=${datadir}/editex
-default_dictionary=${pkgdatadir}/dictionary-tex.xml
-default_mathml_xsl=${pkgdatadir}/tml-mmlp.xsl
-default_tex_xsl=${pkgdatadir}/tml-tex.xsl
-
-Name: EdiTeX
-Description: An XML/MathML editor based on TeX/LaTeX syntax
-Version: @VERSION@
-Requires: glib
-Libs: -L${libdir} -leditex
-Cflags: -I${includedir}/editex
-
diff --git a/helm/DEVEL/mathml_editor/examples/.cvsignore b/helm/DEVEL/mathml_editor/examples/.cvsignore
deleted file mode 100644 (file)
index 282522d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/helm/DEVEL/mathml_editor/examples/Makefile.am b/helm/DEVEL/mathml_editor/examples/Makefile.am
deleted file mode 100644 (file)
index 8de82fb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-EXTRA_DIST = abs.tex big.tex
diff --git a/helm/DEVEL/mathml_editor/examples/abs.tex b/helm/DEVEL/mathml_editor/examples/abs.tex
deleted file mode 100644 (file)
index 6cd86a1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-$|x|=\matrix{1&0\cr0&1}$
diff --git a/helm/DEVEL/mathml_editor/examples/big.tex b/helm/DEVEL/mathml_editor/examples/big.tex
deleted file mode 100644 (file)
index 913a1a1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-$1+x+x^2+x^3+\cdots+x^n\over{\sqrt 1+y^{-1}+y^{-2}+y^{-3}+\cdots+y^{-m}}$
diff --git a/helm/DEVEL/mathml_editor/ocaml/.cvsignore b/helm/DEVEL/mathml_editor/ocaml/.cvsignore
deleted file mode 100644 (file)
index cf4c41a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-META Makefile Makefile.in *.cm[ioax] *.cmxa *.lo *.la .deps .libs
diff --git a/helm/DEVEL/mathml_editor/ocaml/.depend b/helm/DEVEL/mathml_editor/ocaml/.depend
deleted file mode 100644 (file)
index ceb7476..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-mathml_editor.cmo: i_mathml_editor.cmo mathml_editor.cmi 
-mathml_editor.cmx: i_mathml_editor.cmx mathml_editor.cmi 
-mathml_editor.cmi: i_mathml_editor.cmo 
diff --git a/helm/DEVEL/mathml_editor/ocaml/META.in b/helm/DEVEL/mathml_editor/ocaml/META.in
deleted file mode 100644 (file)
index f3fe789..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-requires="gdome2,gdome2-xslt"
-version="@VERSION@"
-archive(byte)="mlmathml-editor.cma"
-archive(native)="mlmathml-editor.cmxa"
-archive(byte,premethods)="i_mathml_editor.cmo mlmathml-editor.cma"
-archive(native,premethods)="i_mathml_editor.cmx mlmathml-editor.cmxa"
diff --git a/helm/DEVEL/mathml_editor/ocaml/Makefile.am b/helm/DEVEL/mathml_editor/ocaml/Makefile.am
deleted file mode 100644 (file)
index cd0b51f..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-PKGNAME = mathml-editor
-ARCHIVE = mlmathml-editor
-REQUIRES = gdome2 gdome2-xslt
-OCAMLFIND = @OCAMLFIND@
-OCAMLFLAGS = -I $(top_srcdir)/ocaml
-OCAMLC = $(OCAMLFIND) @OCAMLC@ $(OCAMLFLAGS) -package "$(REQUIRES)"
-OCAMLOPT = $(OCAMLFIND) @OCAMLOPT@ $(OCAMLFLAGS) -package "$(REQUIRES)"
-OCAMLDEP = $(OCAMLFIND) @OCAMLDEP@ $(OCAMLFLAGS) -package "$(REQUIRES)"
-if HAVE_SHAREDLIBS_COND
-OCAMLMKLIBFLAGS = 
-else
-OCAMLMKLIBFLAGS = -custom
-endif
-OCAMLMKLIB = @OCAMLMKLIB@ $(OCAMLMKLIBFLAGS)
-DLL = dll$(ARCHIVE).so
-OCAMLSTDLIBDIR = $(DESTDIR)/@OCAMLSTDLIBDIR@
-OCAMLSTUBDIR = $(DESTDIR)/@OCAMLSTUBDIR@
-OCAMLINSTALLDIR = $(OCAMLSTDLIBDIR)/$(PKGNAME)
-MODULES = i_mathml_editor mathml_editor
-INIT =
-CMI_S = $(MODULES:%=%.cmi)
-CMO_S = $(MODULES:%=%.cmo)
-CMX_S = $(MODULES:%=%.cmx)
-O_S = ml_mathml_editor.o c_mathml_editor.o
-LO_S = $(O_S:%.o=%.lo)
-SHARED_LIBS = $(GMETADOM_LIBS) $(GDOMEXSLT_LIBS) -lmlgdome2-xslt -lmlgdome -lstdc++ -L$(top_builddir)/src/.libs/ -leditex
-BYTE_STUFF = i_mathml_editor.cmi mathml_editor.cmi $(ARCHIVE).cma $(DLL) lib$(ARCHIVE).a
-NATIVE_STUFF = $(ARCHIVE).cmxa $(ARCHIVE).a
-BYTE_INSTALL_STUFF = $(BYTE_STUFF) META mathml_editor.mli
-NATIVE_INSTALL_STUFF = $(NATIVE_STUFF)
-
-EXTRA_DIST =   \
-       META.in mathml_editor.ml mathml_editor.mli i_mathml_editor.ml   \
-       c_mathml_editor.h .depend
-
-if HAVE_OCAMLOPT_COND
-noinst_DATA = $(BYTE_STUFF) $(NATIVE_STUFF)
-else
-noinst_DATA = $(BYTE_STUFF)
-endif
-
-noinst_LTLIBRARIES = libmlmathml-editor.la
-libmlmathml_editor_la_SOURCES = \
-  c_mathml_editor.cc \
-  ml_mathml_editor.c
-
-if HAVE_OCAMLOPT_COND
-install-data-local:    $(BYTE_INSTALL_STUFF) $(NATIVE_INSTALL_STUFF)
-else
-install-data-local:    $(BYTE_INSTALL_STUFF)
-endif
-       $(mkinstalldirs) $(OCAMLSTDLIBDIR) $(OCAMLSTUBDIR)
-       chmod -x $(DLL)
-       $(OCAMLFIND) install -destdir $(OCAMLSTDLIBDIR) $(PKGNAME) $^
-       ln -fs $(DLL) $(OCAMLSTUBDIR)/lib$(ARCHIVE).so
-
-CLEANFILES =   \
-       $(ARCHIVE).{cma,cmxa,a} $(CMI_S) $(CMO_S) $(CMX_S) ml_mathml_editor.o   \
-       $(DLL) $(INIT).cm[iox] libmlmathml-editor.a
-
-INCLUDES =     \
-       $(GDOME_CFLAGS) $(MLGDOME_CFLAGS) \
-       $(GMETADOM_CFLAGS) $(GDOMEXSLT_CFLAGS) \
-       -I$(top_srcdir)/src
-
-$(ARCHIVE).cma: $(CMO_S)
-       $(OCAMLMKLIB) -o $(ARCHIVE) -L@OCAMLSTUBDIR@ $(CMO_S) $(SHARED_LIBS)
-
-$(ARCHIVE).cmxa: $(CMX_S)
-       $(OCAMLMKLIB) -o $(ARCHIVE) -L@OCAMLSTUBDIR@ $(CMX_S) $(SHARED_LIBS)
-
-# use .lo for ocamlmklib
-$(DLL) $(ARCHIVE).a: $(LO_S)
-       for f in $(LO_S); do    \
-               cp $$f $$f.o;   \
-       done
-       $(OCAMLMKLIB) -o $(ARCHIVE) -L@OCAMLSTUBDIR@ $(SHARED_LIBS) $(LO_S:%=%.o)
-       for f in $(LO_S:%=%.o); do      \
-               rm $$f; \
-       done
-
-%.cmi: %.mli
-       $(OCAMLC) -c $<
-%.cmo %.cmi: %.ml
-       $(OCAMLC) -c $<
-%.cmx: %.ml %.cmi
-       $(OCAMLOPT) -c $<
-
-i_mathml_editor.cmo: i_mathml_editor.ml
-       $(OCAMLC) -c $<
-i_mathml_editor.cmx: i_mathml_editor.ml
-       $(OCAMLOPT) -c $<
-
-depend: *.ml
-       $(OCAMLDEP) *.ml *.mli >.depend
-include .depend
-
diff --git a/helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.cc b/helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.cc
deleted file mode 100644 (file)
index 2575982..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <GdomeSmartDOMXSLT.hh>
-#include <cassert>
-
-#include "ALogger.hh"
-#include "TDictionary.hh"
-#include "CMathMLFactoryXSLT.hh"
-#include "TPushLexer.hh"
-#include "LPushLexer.hh"
-#include "TPushParser.hh"
-
-class CCallbackLogger : public ALogger
-{
-public:
-  CCallbackLogger(void (*)(int, const char*, void*), void*);
-  virtual ~CCallbackLogger() { };
-
-protected:
-  virtual void message(Level, const std::string&);
-
-private:
-  void (*callback)(int, const char*, void*);
-  void* user_data;
-};
-
-CCallbackLogger::CCallbackLogger(void (*cb)(int, const char*, void*), void* data) : callback(cb), user_data(data)
-{
-  assert(callback);
-}
-
-void
-CCallbackLogger::message(Level l, const std::string& s)
-{
-  assert(callback);
-  callback(l, s.c_str(), user_data);
-}
-
-struct Editor
-{
-  Editor(const char*, const char*, const char*, void (*)(int, const char*, void*), void*, bool);
-  ~Editor();
-
-  ALogger*        logger;
-  TDictionary*    dictionary;
-  DOMX::XSLTStylesheet* tml_mml;
-  DOMX::XSLTStylesheet* tml_tex;
-  AMathMLFactory* factory;
-  TPushParser*    parser;
-  APushLexer*     lexer;
-};
-
-Editor::Editor(const char* dict_uri, const char* mml_uri, const char* tex_uri,
-              void (*cb)(int, const char*, void*), void* data, bool alt)
-{
-  assert(dict_uri);
-  assert(mml_uri);
-  assert(tex_uri);
-  assert(cb);
-  logger = new CCallbackLogger(cb, data);
-  dictionary = new TDictionary(*logger);
-  dictionary->load(dict_uri);
-  DOM::DOMImplementation di;
-  DOM::Document mml = di.createDocumentFromURI(mml_uri);
-  DOM::Document tex = di.createDocumentFromURI(tex_uri);
-  tml_mml = new DOMX::XSLTStylesheet(mml);
-  tml_tex = new DOMX::XSLTStylesheet(tex);
-  factory = new CMathMLFactoryXSLT(*logger, *tml_mml);
-  parser = new TPushParser(*logger, *factory, *dictionary);
-  if (alt) lexer = new LPushLexer(*logger, *parser);
-  else lexer = new TPushLexer(*logger, *parser);
-}
-
-Editor::~Editor()
-{
-  delete lexer;
-  delete parser;
-  delete factory;
-  delete tml_tex;
-  delete tml_mml;
-  delete dictionary;
-  delete logger;
-}
-
-extern "C" const char*
-c_mathml_editor_get_default_dictionary_path()
-{
-  return TDictionary::getDefaultDictionaryPath().c_str();
-}
-
-extern "C" const char*
-c_mathml_editor_get_default_mathml_stylesheet_path()
-{
-  return AMathMLFactory::getDefaultMathMLStylesheetPath().c_str();
-}
-
-extern "C" const char*
-c_mathml_editor_get_default_tex_stylesheet_path()
-{
-  return AMathMLFactory::getDefaultTeXStylesheetPath().c_str();
-}
-
-extern "C" Editor*
-c_mathml_editor_new(bool alt,
-                   const char* dictionary_uri,
-                   const char* tml_mml_uri,
-                   const char* tml_tex_uri,
-                   void (*log_message_cb)(int, const char*, void*),
-                   void* user_data)
-{
-  return new Editor(dictionary_uri, tml_mml_uri, tml_tex_uri, log_message_cb, user_data, alt);
-}
-
-extern "C" void
-c_mathml_editor_destroy(Editor* editor)
-{
-  assert(editor);
-  delete editor;
-}
-
-extern "C" int
-c_mathml_editor_freeze(Editor* editor)
-{
-  assert(editor);
-  return editor->parser->freeze();
-}
-
-extern "C" int
-c_mathml_editor_thaw(Editor* editor)
-{
-  assert(editor);
-  return editor->parser->thaw();
-}
-
-extern "C" void
-c_mathml_editor_push(Editor* editor, char ch)
-{
-  assert(editor);
-  editor->lexer->push(ch);
-}
-
-extern "C" void
-c_mathml_editor_drop(Editor* editor, int alt)
-{
-  assert(editor);
-  editor->lexer->drop(alt != 0);
-}
-
-extern "C" int
-c_mathml_editor_cursor_hide(Editor* editor)
-{
-  assert(editor);
-  return editor->parser->hideCursor();
-}
-
-extern "C" int
-c_mathml_editor_cursor_show(Editor* editor)
-{
-  assert(editor);
-  return editor->parser->showCursor();
-}
-
-extern "C" char*
-c_mathml_editor_get_tex(const Editor* editor)
-{
-  assert(editor);
-  DOM::Document res = editor->tml_tex->apply(editor->parser->document());
-  assert(res);
-  res.normalize();
-  assert(res.get_firstChild() && res.get_firstChild().get_nodeName() == "#text");
-  return strdup(std::string(res.get_firstChild().get_nodeValue()).c_str());
-}
-
-extern "C" void
-c_mathml_editor_reset(Editor* editor)
-{
-  assert(editor);
-  editor->lexer->reset();
-  editor->parser->reset();
-}
-
-extern "C" GdomeDocument*
-c_mathml_editor_get_tml(const Editor* editor)
-{
-  assert(editor);
-  GdomeNode* n = editor->parser->document().cloneNode(true).gdome_object();
-  GdomeDocument* doc = gdome_cast_doc(n);
-  assert(n && doc);
-  return doc;
-}
-
-extern "C" GdomeDocument*
-c_mathml_editor_get_mml(const Editor* editor)
-{
-  assert(editor);
-  GdomeNode* n = editor->factory->document().gdome_object();
-  GdomeDocument* doc = gdome_cast_doc(n);
-  assert(n && doc);
-  return doc;
-}
-
diff --git a/helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.h b/helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.h
deleted file mode 100644 (file)
index cb01155..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __c_mathml_editor_h__
-#define __c_mathml_editor_h__
-
-#include <gdome.h>
-
-typedef struct Editor Editor;
-
-const char*    c_mathml_editor_get_default_dictionary_path(void);
-const char*    c_mathml_editor_get_default_mathml_stylesheet_path(void);
-const char*    c_mathml_editor_get_default_tex_stylesheet_path(void);
-Editor*        c_mathml_editor_new(int, const char*, const char*, const char*, void (*)(int, const char*, void*), void*);
-void           c_mathml_editor_destroy(Editor*);
-int            c_mathml_editor_freeze(Editor*);
-int            c_mathml_editor_thaw(Editor*);
-void           c_mathml_editor_reset(Editor*);
-void           c_mathml_editor_push(Editor*, char);
-void           c_mathml_editor_drop(Editor*, int);
-int            c_mathml_editor_cursor_hide(Editor*);
-int            c_mathml_editor_cursor_show(Editor*);
-char*          c_mathml_editor_get_tex(const Editor*);
-GdomeDocument* c_mathml_editor_get_tml(const Editor*);
-GdomeDocument* c_mathml_editor_get_mml(const Editor*);
-
-#endif /* __c_mathml_editor_h__ */
diff --git a/helm/DEVEL/mathml_editor/ocaml/i_mathml_editor.ml b/helm/DEVEL/mathml_editor/ocaml/i_mathml_editor.ml
deleted file mode 100644 (file)
index d865898..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-(* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- *)
-
-type t
-
-external get_default_dictionary_path : unit -> string
-  = "ml_mathml_editor_get_default_dictionary_path"
-
-external get_default_mathml_stylesheet_path : unit -> string
-  = "ml_mathml_editor_get_default_mathml_stylesheet_path"
-
-external get_default_tex_stylesheet_path : unit -> string
-  = "ml_mathml_editor_get_default_tex_stylesheet_path"
-
-external raw_create : 
-  alt_lexer:bool ->
-  dictionary_uri: string ->
-  mml_uri: string -> 
-  tml_uri: string ->
-  log:(int -> string -> unit) ->
-  t
-  = "ml_mathml_editor_new"
-let create ?(alt_lexer=false) = raw_create ~alt_lexer
-
-external freeze : editor:t -> bool
-  = "ml_mathml_editor_freeze"
-
-external thaw : editor:t -> bool
-  = "ml_mathml_editor_thaw"
-
-external reset : editor:t -> unit
-  = "ml_mathml_editor_reset"
-
-external push : editor:t -> ch:char -> unit
-  = "ml_mathml_editor_push"
-
-external drop : editor:t -> alt:bool -> unit
-  = "ml_mathml_editor_drop"
-
-external cursor_hide : editor:t -> unit
-  = "ml_mathml_editor_cursor_hide"
-
-external cursor_show : editor:t -> unit
-  = "ml_mathml_editor_cursor_show"
-
-external get_tex : editor:t -> string
-  = "ml_mathml_editor_get_tex"
-
-external get_tml : editor:t -> TDocument.t
-  = "ml_mathml_editor_get_tml"
-
-external get_mml : editor:t -> TDocument.t
-  = "ml_mathml_editor_get_mml"
-
diff --git a/helm/DEVEL/mathml_editor/ocaml/mathml_editor.ml b/helm/DEVEL/mathml_editor/ocaml/mathml_editor.ml
deleted file mode 100644 (file)
index a49ea43..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-(* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- *)
-
-let default_dictionary_path = I_mathml_editor.get_default_dictionary_path ()
-;;
-
-let default_mathml_stylesheet_path = I_mathml_editor.get_default_mathml_stylesheet_path ()
-;;
-
-let default_tex_stylesheet_path = I_mathml_editor.get_default_tex_stylesheet_path ()
-;;
-
-let create ?(alt_lexer=false) ~dictionary_uri ~mml_uri ~tml_uri ~log =
-  I_mathml_editor.create ~alt_lexer ~dictionary_uri ~mml_uri ~tml_uri ~log
-;;
-
-let freeze = I_mathml_editor.freeze
-;;
-
-let thaw = I_mathml_editor.thaw
-;;
-
-let reset = I_mathml_editor.reset
-;;
-
-let push = I_mathml_editor.push
-;;
-
-let drop = I_mathml_editor.drop
-;;
-
-let cursor_hide = I_mathml_editor.cursor_hide
-;;
-
-let cursor_show = I_mathml_editor.cursor_show
-;;
-
-let get_tex = I_mathml_editor.get_tex
-;;
-
-let get_tml ~editor =
-  new Gdome.document (I_mathml_editor.get_tml ~editor)
-;;
-
-let get_mml ~editor =
-  new Gdome.document (I_mathml_editor.get_mml ~editor)
-;;
-
diff --git a/helm/DEVEL/mathml_editor/ocaml/mathml_editor.mli b/helm/DEVEL/mathml_editor/ocaml/mathml_editor.mli
deleted file mode 100644 (file)
index aa02785..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-(* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- *)
-
-val default_dictionary_path : string
-val default_mathml_stylesheet_path : string
-val default_tex_stylesheet_path : string
-
-val create :
-  ?alt_lexer:bool ->
-  dictionary_uri: string ->
-  mml_uri: string ->
-  tml_uri: string ->
-  log:(int -> string -> unit) -> I_mathml_editor.t
-
-val freeze : editor:I_mathml_editor.t -> bool
-val thaw : editor:I_mathml_editor.t -> bool
-
-val reset : editor:I_mathml_editor.t -> unit
-val push : editor:I_mathml_editor.t -> ch:char -> unit
-val drop : editor:I_mathml_editor.t -> alt:bool -> unit
-
-val cursor_hide : editor:I_mathml_editor.t -> unit
-val cursor_show : editor:I_mathml_editor.t -> unit
-
-val get_tex : editor:I_mathml_editor.t -> string
-val get_tml : editor:I_mathml_editor.t -> Gdome.document
-val get_mml : editor:I_mathml_editor.t -> Gdome.document
-
diff --git a/helm/DEVEL/mathml_editor/ocaml/ml_mathml_editor.c b/helm/DEVEL/mathml_editor/ocaml/ml_mathml_editor.c
deleted file mode 100644 (file)
index c74dfd0..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <assert.h>
-
-#include <caml/memory.h>
-#include <caml/custom.h>
-#include <caml/callback.h>
-
-#include "mlgdomevalue.h"
-
-#include "c_mathml_editor.h"
-
-typedef struct
-{
-  Editor* c_editor;
-  value   callback;
-} ml_Editor;
-
-ml_Editor*
-Editor_val(value v)
-{
-  ml_Editor* editor = *((ml_Editor**) Data_custom_val(v));
-  assert(editor != NULL);
-  return editor;
-}
-
-static void
-ml_mathml_editor_finalize(value v)
-{
-  ml_Editor* editor = Editor_val(v);
-  assert(editor);
-
-  remove_global_root(&editor->callback);
-  c_mathml_editor_destroy(editor->c_editor);
-  free(editor);
-}
-
-static void
-ml_mathml_editor_log_callback(int level, const char* msg, void* user_data)
-{
-  ml_Editor* ml_editor = (ml_Editor*) user_data;
-  assert(ml_editor);
-  callback2(ml_editor->callback, Val_int(level), copy_string(msg));
-}
-
-value
-ml_mathml_editor_get_default_dictionary_path(value unit)
-{
-  CAMLparam1(unit);
-  CAMLreturn(copy_string(c_mathml_editor_get_default_dictionary_path()));
-}
-
-value
-ml_mathml_editor_get_default_mathml_stylesheet_path(value unit)
-{
-  CAMLparam1(unit);
-  CAMLreturn(copy_string(c_mathml_editor_get_default_mathml_stylesheet_path()));
-}
-
-value
-ml_mathml_editor_get_default_tex_stylesheet_path(value unit)
-{
-  CAMLparam1(unit);
-  CAMLreturn(copy_string(c_mathml_editor_get_default_tex_stylesheet_path()));
-}
-
-value
-ml_mathml_editor_new(value alt,
-                    value dictionary_uri,
-                    value tml_mml_uri,
-                    value tml_tex_uri,
-                    value log_message_cb)
-{
-  static struct custom_operations ops =
-  {
-    "HELM/MathML Editor",
-    ml_mathml_editor_finalize,
-    custom_compare_default,
-    custom_hash_default,
-    custom_serialize_default,
-    custom_deserialize_default
-  };
-  
-  value v = alloc_custom(&ops, sizeof(ml_Editor*), 0, 1);
-  ml_Editor** ml_editor_ref = (ml_Editor**) Data_custom_val(v);
-  ml_Editor* ml_editor = *ml_editor_ref = malloc(sizeof(ml_Editor));
-  ml_editor->c_editor = c_mathml_editor_new(Bool_val(alt),
-                                           String_val(dictionary_uri),
-                                           String_val(tml_mml_uri),
-                                           String_val(tml_tex_uri),
-                                           ml_mathml_editor_log_callback,
-                                           (void*) ml_editor);
-  ml_editor->callback = log_message_cb;
-  register_global_root(&ml_editor->callback);
-
-  return v;
-}
-
-value
-ml_mathml_editor_freeze(value v)
-{
-  CAMLparam1(v);
-  ml_Editor* editor = Editor_val(v);
-  CAMLreturn(Val_bool(c_mathml_editor_freeze(editor->c_editor)));
-}
-
-value
-ml_mathml_editor_thaw(value v)
-{
-  CAMLparam1(v);
-  ml_Editor* editor = Editor_val(v);
-  CAMLreturn(Val_bool(c_mathml_editor_thaw(editor->c_editor)));
-}
-
-value
-ml_mathml_editor_push(value v, value ch)
-{
-  CAMLparam2(v, ch);
-  ml_Editor* editor = Editor_val(v);
-  c_mathml_editor_push(editor->c_editor, Int_val(ch));
-  CAMLreturn(Val_unit);
-}
-
-value
-ml_mathml_editor_drop(value v, value alt)
-{
-  CAMLparam2(v, alt);
-  ml_Editor* editor = Editor_val(v);
-  c_mathml_editor_drop(editor->c_editor, Bool_val(alt));
-  CAMLreturn(Val_unit);
-}
-
-value
-ml_mathml_editor_cursor_hide(value v)
-{
-  CAMLparam1(v);
-  ml_Editor* editor = Editor_val(v);
-  CAMLreturn(Val_bool(c_mathml_editor_cursor_hide(editor->c_editor)));
-}
-
-value
-ml_mathml_editor_cursor_show(value v)
-{
-  CAMLparam1(v);
-  ml_Editor* editor = Editor_val(v);
-  CAMLreturn(Val_bool(c_mathml_editor_cursor_show(editor->c_editor)));
-}
-
-value
-ml_mathml_editor_get_tex(value v)
-{
-  CAMLparam1(v);
-  ml_Editor* editor = Editor_val(v);
-  char* res = c_mathml_editor_get_tex(editor->c_editor);
-  CAMLlocal1(ml_res);
-  ml_res = copy_string(res);
-  free(res);
-  CAMLreturn(ml_res);
-}
-
-value
-ml_mathml_editor_reset(value v, value s)
-{
-  CAMLparam1(v);
-  ml_Editor* editor = Editor_val(v);
-  c_mathml_editor_reset(editor->c_editor);
-  CAMLreturn(Val_unit);
-}
-
-value
-ml_mathml_editor_get_tml(value v)
-{
-  CAMLparam1(v);
-  ml_Editor* editor = Editor_val(v);
-  GdomeDocument* doc = c_mathml_editor_get_tml(editor->c_editor);
-  CAMLreturn(Val_Document(doc));
-}
-
-value
-ml_mathml_editor_get_mml(value v)
-{
-  CAMLparam1(v);
-  ml_Editor* editor = Editor_val(v);
-  GdomeDocument* doc = c_mathml_editor_get_mml(editor->c_editor);
-  CAMLreturn(Val_Document(doc));
-}
-
diff --git a/helm/DEVEL/mathml_editor/src/.cvsignore b/helm/DEVEL/mathml_editor/src/.cvsignore
deleted file mode 100644 (file)
index 332956c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-*~
-*.lo
-*.o
-*.la
-.deps
-.libs
-Makefile
-Makefile.in
-config.dirs
diff --git a/helm/DEVEL/mathml_editor/src/ALogger.hh b/helm/DEVEL/mathml_editor/src/ALogger.hh
deleted file mode 100644 (file)
index 7843dbc..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __ALogger_hh__
-#define __ALogger_hh__
-
-#include <string>
-
-class ALogger
-{
-public:
-  enum Level { Error, Warning, Info, Debug };
-
-  ALogger(void) { level = Error; }
-  virtual ~ALogger() { }
-  void debug(const std::string& msg) { if (level >= Debug) message(Debug, msg); }
-  void info(const std::string& msg) { if (level >= Info) message(Info, msg); }
-  void warning(const std::string& msg) { if (level >= Warning) message(Warning, msg); }
-  void error(const std::string& msg) { if (level >= Error) message(Error, msg); }
-
-  Level verbosity(void) const { return level; }
-  void  verbosity(Level lvl) { level = lvl; }
-
-protected:
-  virtual void message(Level, const std::string&) = 0;
-
-private:
-  Level level;
-};
-
-#endif // __ALogger_hh__
diff --git a/helm/DEVEL/mathml_editor/src/AMathMLConsumer.hh b/helm/DEVEL/mathml_editor/src/AMathMLConsumer.hh
deleted file mode 100644 (file)
index ee5e126..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __AMathMLConsumer_hh__
-#define __AMathMLConsumer_hh__
-
-class AMathMLConsumer
-{
-public:
-  AMathMLConsumer(void) { };
-  virtual ~AMathMLConsumer() { };
-  virtual void documentModified(const DOM::Document&) = 0;
-};
-
-#endif // __AMathMLConsumer_hh__
diff --git a/helm/DEVEL/mathml_editor/src/AMathMLFactory.cc b/helm/DEVEL/mathml_editor/src/AMathMLFactory.cc
deleted file mode 100644 (file)
index b982635..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <string>
-
-#include "config.dirs"
-#include "AMathMLFactory.hh"
-
-std::string
-AMathMLFactory::getDefaultMathMLStylesheetPath()
-{
-  return PKGDATADIR"/tml-mmlp.xsl";
-}
-
-std::string
-AMathMLFactory::getDefaultTeXStylesheetPath()
-{
-  return PKGDATADIR"/tml-tex.xsl";
-}
-
diff --git a/helm/DEVEL/mathml_editor/src/AMathMLFactory.hh b/helm/DEVEL/mathml_editor/src/AMathMLFactory.hh
deleted file mode 100644 (file)
index f53b564..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __AMathMLFactory_hh__
-#define __AMathMLFactory_hh__
-
-#include "dom.hh"
-
-class AMathMLFactory
-{
-public:
-  AMathMLFactory(class ALogger& l) : logger(l) { };
-  virtual ~AMathMLFactory() { };
-
-  static std::string getDefaultMathMLStylesheetPath(void);
-  static std::string getDefaultTeXStylesheetPath(void);
-
-  virtual void documentModified(class TDocument&) = 0;
-  virtual DOM::Document document(void) const = 0;
-
-protected:
-  class ALogger& logger;
-};
-
-#endif // __AMathMLFactory_hh__
diff --git a/helm/DEVEL/mathml_editor/src/APushLexer.hh b/helm/DEVEL/mathml_editor/src/APushLexer.hh
deleted file mode 100644 (file)
index 4a2940b..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __APushLexer_hh__
-#define __APushLexer_hh__
-
-class APushLexer
-{
-public:
-  APushLexer(class ALogger& l, class APushParser& p) : logger(l), parser(p) { };
-  virtual ~APushLexer() { };
-
-  virtual void push(char) = 0;
-  virtual void drop(bool) = 0;
-  virtual bool complete(void) = 0;
-  virtual void reset(void) = 0;
-  virtual bool error(void) const = 0;
-
-protected:
-  class ALogger&     logger;
-  class APushParser& parser;
-};
-
-#endif // __APushLexer_hh__
diff --git a/helm/DEVEL/mathml_editor/src/APushParser.cc b/helm/DEVEL/mathml_editor/src/APushParser.cc
deleted file mode 100644 (file)
index 6f843d5..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include "APushParser.hh"
-#include "AMathMLFactory.hh"
-
-bool
-APushParser::freeze()
-{
-  return freeze_level++ == 0;
-}
-
-bool
-APushParser::thaw()
-{
-  if (freeze_level > 0)
-    return --freeze_level == 0;
-  else
-    return true;
-}
diff --git a/helm/DEVEL/mathml_editor/src/APushParser.hh b/helm/DEVEL/mathml_editor/src/APushParser.hh
deleted file mode 100644 (file)
index 74cb18e..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __APushParser_hh__
-#define __APushParser_hh__
-
-#include <string>
-
-class APushParser
-{
-public:
-  APushParser(class ALogger& l) : logger(l), factory(0), freeze_level(0) { };
-  APushParser(class ALogger& l, class AMathMLFactory& f) : logger(l), factory(&f), freeze_level(0) { };
-  virtual ~APushParser() { };
-
-  virtual void reset(void) = 0;
-  virtual void push(const class TToken&) = 0;
-  virtual std::string drop(bool) = 0;
-  virtual void setCursorHint(const std::string&) = 0;
-  virtual bool hideCursor(void) = 0;
-  virtual bool showCursor(void) = 0;
-
-  virtual bool freeze(void);
-  virtual bool thaw(void);
-  bool frozen(void) const { return freeze_level > 0; };
-
-protected:
-  class ALogger& logger;
-  class AMathMLFactory* factory;
-
-private:
-  unsigned freeze_level;
-};
-
-#endif // __APushParser_hh__
diff --git a/helm/DEVEL/mathml_editor/src/BROWSE b/helm/DEVEL/mathml_editor/src/BROWSE
deleted file mode 100644 (file)
index ddd9c44..0000000
+++ /dev/null
@@ -1,503 +0,0 @@
-[ebrowse-hs "ebrowse 5.0" " -x" () ()][ebrowse-ts [ebrowse-cs "APushParser" () 0"APushParser.hh" "class APushParser
-{" 75"APushParser.hh" ]
-([ebrowse-ts [ebrowse-cs "TPushParser" () 0"TPushParser.hh" "class TPushParser :" 226"TPushParser.hh" ]
-()([ebrowse-ms "buffer" () 0 () "  std::list<TToken> buffer;" 1306 2  () () 0]
-[ebrowse-ms "cursor" () 0 () "  TNode     cursor;" 1363 2  () () 0]
-[ebrowse-ms "doc" () 0 () "  TDocument doc;" 1343 2  () () 0]
-[ebrowse-ms "frames" () 0 () "  std::stack<Frame> frames;" 1278 2  () () 0]
-[ebrowse-ms "nextId" () 0 () "  unsigned  nextId;" 1326 2  () () 0]
-)
-([ebrowse-ms "PRIME" () 4 () "  std::string PRIME(void" 490 2  "TPushParser.cc" "TPushParser::PRIME()" 279]
-[ebrowse-ms "TPushParser" () 0 () () 0 0  "TPushParser.cc" "TPushParser::TPushParser(const TDictionary& d) :" 58]
-[ebrowse-ms "TPushParser" () 0 () "  TPushParser(const class TDictionary&);" 275 0  () () 0]
-[ebrowse-ms "advance" () 0 () "  void advance(const" 1065 2  "TPushParser.cc" "TPushParser::advance(const" 13192]
-[ebrowse-ms "do_active" () 0 () "  void do_active(const" 916 2  "TPushParser.cc" "TPushParser::do_active(const" 5602]
-[ebrowse-ms "do_align" () 0 () "  void do_align(void" 624 2  "TPushParser.cc" "TPushParser::do_align()" 1530]
-[ebrowse-ms "do_apostrophe" () 0 () "  void do_apostrophe(void" 1042 2  "TPushParser.cc" "TPushParser::do_apostrophe()" 4611]
-[ebrowse-ms "do_begin" () 0 () "  void do_begin(void" 557 2  "TPushParser.cc" "TPushParser::do_begin()" 461]
-[ebrowse-ms "do_comment" () 0 () "  void do_comment(void" 954 2  "TPushParser.cc" "TPushParser::do_comment()" 5668]
-[ebrowse-ms "do_control" () 0 () "  void do_control(const" 980 2  "TPushParser.cc" "TPushParser::do_control(const" 6337]
-[ebrowse-ms "do_cr" () 0 () "  void do_cr(void" 1014 2  "TPushParser.cc" "TPushParser::do_cr()" 5708]
-[ebrowse-ms "do_digit" () 0 () "  void do_digit(const" 841 2  "TPushParser.cc" "TPushParser::do_digit(const" 4072]
-[ebrowse-ms "do_end" () 0 () "  void do_end(void" 578 2  "TPushParser.cc" "TPushParser::do_end()" 910]
-[ebrowse-ms "do_eol" () 0 () "  void do_eol(void" 645 2  "TPushParser.cc" "TPushParser::do_eol()" 2464]
-[ebrowse-ms "do_letter" () 0 () "  void do_letter(const" 804 2  "TPushParser.cc" "TPushParser::do_letter(const" 3902]
-[ebrowse-ms "do_other" () 0 () "  void do_other(const" 878 2  "TPushParser.cc" "TPushParser::do_other(const" 5303]
-[ebrowse-ms "do_parameter" () 0 () "  void do_parameter(const" 673 2  "TPushParser.cc" "TPushParser::do_parameter(const" 2546]
-[ebrowse-ms "do_shift" () 0 () "  void do_shift(void" 601 2  "TPushParser.cc" "TPushParser::do_shift()" 1487]
-[ebrowse-ms "do_space" () 0 () "  void do_space(const" 766 2  "TPushParser.cc" "TPushParser::do_space(const" 3794]
-[ebrowse-ms "do_subscript" () 0 () "  void do_subscript(void" 742 2  "TPushParser.cc" "TPushParser::do_subscript()" 2609]
-[ebrowse-ms "do_superscript" () 0 () "  void do_superscript(void" 715 2  "TPushParser.cc" "TPushParser::do_superscript()" 3204]
-[ebrowse-ms "document" () 4 () "  TDocument document(void" 432 0  () "  TDocument document(void" 432]
-[ebrowse-ms "isPrimes" () 4 () "  bool isPrimes(const" 520 2  "TPushParser.cc" "TPushParser::isPrimes(const" 4445]
-[ebrowse-ms "process" () 0 () "  void process(const" 1096 2  "TPushParser.cc" "TPushParser::process(const" 8538]
-[ebrowse-ms "push" () 1 () "  virtual void push(const" 349 0  "TPushParser.cc" "TPushParser::push(const" 9379]
-[ebrowse-ms "setCursor" () 1 () "  virtual void setCursor(const" 390 0  "TPushParser.cc" "TPushParser::setCursor(const" 13865]
-[ebrowse-ms "~TPushParser" () 1 () "  virtual ~TPushParser()" 321 0  "TPushParser.cc" "TPushParser::~TPushParser()" 241]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TTokenizer" () 0"TTokenizer.hh" "class TTokenizer :" 173"TTokenizer.hh" ]
-()([ebrowse-ms "tokens" () 0 () "  std::list<TToken> tokens;" 405 2  () () 0]
-)
-([ebrowse-ms "TTokenizer" () 0 () "  TTokenizer(void) {" 221 0  () "  TTokenizer(void) {" 221]
-[ebrowse-ms "push" () 1 () "  virtual void push(const" 316 2  "TTokenizer.cc" "TTokenizer::push(const" 471]
-[ebrowse-ms "setCursor" () 1 () "  virtual void setCursor(const" 357 2  () "  virtual void setCursor(const" 357]
-[ebrowse-ms "tokenize" () 0 () "  std::vector<TToken> tokenize(const" 265 0  "TTokenizer.cc" "TTokenizer::tokenize(const" 120]
-)
-()
-()
-()
-()
-()()
-])()
-([ebrowse-ms "APushParser" () 0 () "  APushParser(void) {" 102 0  () "  APushParser(void) {" 102]
-[ebrowse-ms "push" () 9 () "  virtual void push(const" 164 0  () () 0]
-[ebrowse-ms "setCursor" () 9 () "  virtual void setCursor(const" 209 0  () () 0]
-[ebrowse-ms "~APushParser" () 1 () "  virtual ~APushParser()" 133 0  () "  virtual ~APushParser()" 133]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "EmptyBuffer" "TLexerPush" 0"TLexerPush.hh" "  class EmptyBuffer {" 271() ]
-()()
-()
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "unary_function" "std" 32() () 0() ]
-([ebrowse-ts [ebrowse-cs "StringHash" "TDictionary" 0"TDictionary.hh" "  struct StringHash :" 1160"TDictionary.hh" ]
-()()
-([ebrowse-ms "operator ()" () 4 () "  { size_t operator()(const" 1238 0  () "  { size_t operator()(const" 1238]
-)
-()
-()
-()
-()
-()()
-])()
-()
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TObject" () 0"TObject.hh" "class TObject
-{" 63"TObject.hh" ]
-()()
-([ebrowse-ms "TObject" () 0 () "  TObject(void) {" 89 1  () "  TObject(void) {" 89]
-[ebrowse-ms "ref" () 4 () "  void ref(coid" 162 0  () "  void ref(coid" 162]
-[ebrowse-ms "unref" () 4 () "  void unref(void" 206 0  () "  void unref(void" 206]
-[ebrowse-ms "~TObject" () 1 () "  virtual ~TObject()" 132 1  () "  virtual ~TObject()" 132]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "std" () 0() () 0() ]
-()()
-()
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TLexerPush" () 0"TLexerPush.hh" "class TLexerPush
-{" 59"TLexerPush.hh" ]
-()([ebrowse-ms "state" () 0 () "  State state;" 388 2  () () 0]
-[ebrowse-ms "tokens" () 0 () "  std::deque<TToken> tokens;" 417 2  () () 0]
-)
-([ebrowse-ms "TLexerPush" () 0 () "  TLexerPush(void);" 85 0  "TLexerPush.cc" "TLexerPush::TLexerPush()
-{" 51]
-[ebrowse-ms "ambiguous" () 4 () "  bool   ambiguous(void" 182 0  "TLexerPush.cc" "TLexerPush::ambiguous()" 576]
-[ebrowse-ms "empty" () 4 () "  bool   empty(void" 240 0  "TLexerPush.cc" "TLexerPush::empty()" 447]
-[ebrowse-ms "front" () 4 () "  TToken front(void" 150 0  "TLexerPush.cc" "TLexerPush::front()" 338]
-[ebrowse-ms "pending" () 4 () "  bool   pending(void" 212 0  "TLexerPush.cc" "TLexerPush::pending()" 510]
-[ebrowse-ms "pop" () 0 () "  TToken pop(void" 128 0  "TLexerPush.cc" "TLexerPush::pop()" 99]
-[ebrowse-ms "push" () 0 () "  void   push(TChar" 108 0  "TLexerPush.cc" "TLexerPush::push(TChar" 664]
-)
-()
-()
-()
-([ebrowse-ms "State" () 0 () "    {" 303 2  () "    {" 303]
-)
-()()
-][ebrowse-ts [ebrowse-cs "TLexerPull" () 0() () 0"TLexerPull.cc" ]
-()()
-([ebrowse-ms "pop" () 0 () () 0 0  () "TLexerPull::pop(TCharStream" 94]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TDictionary" () 0"TDictionary.hh" "class TDictionary
-{" 154"TDictionary.hh" ]
-()([ebrowse-ms "entries" () 0 () "  Dictionary entries;" 1560 2  () () 0]
-)
-([ebrowse-ms "TDictionary" () 0 () "  TDictionary(void) {" 181 0  () "  TDictionary(void) {" 181]
-[ebrowse-ms "find" () 4 () "  const Entry& find(const" 1107 0  "TDictionary.cc" "TDictionary::find(const" 3723]
-[ebrowse-ms "load" () 0 () "  void load(const" 1069 0  "TDictionary.cc" "TDictionary::load(const" 162]
-[ebrowse-ms "~TDictionary" () 0 () "  ~TDictionary()" 204 0  () "  ~TDictionary()" 204]
-)
-()
-()
-()
-([ebrowse-ms "Dictionary" () 0 () "ap< std::string, Entry, StringHash > Dictionary;" 1538 2  () () 0]
-[ebrowse-ms "EntryClass" () 0 () "    {" 301 0  () "    {" 301]
-[ebrowse-ms "Form" () 0 () "    {" 228 0  () "    {" 228]
-)
-()()
-][ebrowse-ts [ebrowse-cs "DOM" () 0() () 0() ]
-()()
-()
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "APushLexer" () 0"APushLexer.hh" "class APushLexer
-{" 72"APushLexer.hh" ]
-([ebrowse-ts [ebrowse-cs "TPushLexer" () 0"TPushLexer.hh" "class TPushLexer :" 117"TPushLexer.hh" ]
-()([ebrowse-ms "buffer" () 0 () "  std::string buffer;" 483 2  () () 0]
-[ebrowse-ms "state" () 0 () "  State state;" 461 2  () () 0]
-)
-([ebrowse-ms "TPushLexer" () 0 () () 0 0  "TPushLexer.cc" "TPushLexer::TPushLexer(APushParser& p) :" 108]
-[ebrowse-ms "TPushLexer" () 0 () "  TPushLexer(class APushParser&);" 164 0  () () 0]
-[ebrowse-ms "error" () 5 () "  virtual bool error(void" 290 0  "TPushLexer.cc" "TPushLexer::error()" 2463]
-[ebrowse-ms "push" () 1 () "  virtual void push(char" 234 0  "TPushLexer.cc" "TPushLexer::push(char" 1180]
-[ebrowse-ms "reset" () 1 () "  virtual void reset(void" 262 0  "TPushLexer.cc" "TPushLexer::reset()" 176]
-[ebrowse-ms "transaction" () 0 () "  void transaction(char" 436 2  "TPushLexer.cc" "TPushLexer::transaction(char" 251]
-[ebrowse-ms "~TPushLexer" () 1 () "  virtual ~TPushLexer()" 203 0  () "  virtual ~TPushLexer()" 203]
-)
-()
-()
-()
-([ebrowse-ms "State" () 0 () "    {" 327 2  () "    {" 327]
-)
-()()
-])()
-([ebrowse-ms "APushLexer" () 0 () "  APushLexer(class APushParser& p) :" 99 0  () "  APushLexer(class APushParser& p) :" 99]
-[ebrowse-ms "error" () 13 () "  virtual bool error(void" 251 0  () () 0]
-[ebrowse-ms "push" () 9 () "  virtual void push(char" 187 0  () () 0]
-[ebrowse-ms "reset" () 9 () "  virtual void reset(void" 219 0  () () 0]
-[ebrowse-ms "~APushLexer" () 1 () "  virtual ~APushLexer()" 156 0  () "  virtual ~APushLexer()" 156]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "Ptr" () 32"Ptr.hh" "class Ptr
-{" 1067"Ptr.hh" ]
-()([ebrowse-ms "ptr" () 0 () "  P* ptr;" 1797 2  () () 0]
-)
-([ebrowse-ms "P" () 4 () "  operator P*()" 1487 0  () "  operator P*()" 1487]
-[ebrowse-ms "Ptr" () 0 () "  Ptr(const Ptr& p) :" 1142 0  () "  Ptr(const Ptr& p) :" 1142]
-[ebrowse-ms "Ptr" () 0 () "  Ptr(P* p = 0) :" 1083 0  () "  Ptr(P* p = 0) :" 1083]
-[ebrowse-ms "Q" () 36 () "  template <class Q> operator Ptr<Q>()" 1747 0  () "  template <class Q> operator Ptr<Q>()" 1747]
-[ebrowse-ms "operator ->" () 4 () "  P* operator->()" 1253 0  () "  P* operator->()" 1253]
-[ebrowse-ms "operator =" () 0 () "  Ptr& operator=(const" 1316 0  () "  Ptr& operator=(const" 1316]
-[ebrowse-ms "~Ptr" () 0 () "  ~Ptr()" 1202 0  () "  ~Ptr()" 1202]
-)
-()
-()
-([ebrowse-ms "is_a" () 32 () "  template <class Q> friend bool is_a(const" 1659 0  () "  template <class Q> friend bool is_a(const" 1659]
-[ebrowse-ms "smart_cast" () 32 () "emplate <class Q> friend Ptr<Q> smart_cast(const" 1561 0  () "emplate <class Q> friend Ptr<Q> smart_cast(const" 1561]
-)
-()
-()()
-][ebrowse-ts [ebrowse-cs "TToken" () 0"TToken.hh" "struct TToken
-{" 80"TToken.hh" ]
-()([ebrowse-ms "category" () 0 () "  TCat        category;" 627 0  () () 0]
-[ebrowse-ms "value" () 0 () "  std::string value;" 648 0  () () 0]
-)
-([ebrowse-ms "TToken" () 0 () "  TToken(TCat c, const std::string& v) :" 438 0  () "  TToken(TCat c, const std::string& v) :" 438]
-[ebrowse-ms "TToken" () 0 () "  TToken(TCat c, char ch) :" 366 0  () "  TToken(TCat c, char ch) :" 366]
-[ebrowse-ms "TToken" () 0 () "  TToken(TCat c) :" 330 0  () "  TToken(TCat c) :" 330]
-[ebrowse-ms "operator ==" () 4 () "  bool operator==(const" 517 0  () "  bool operator==(const" 517]
-)
-()
-()
-()
-([ebrowse-ms "TCat" () 0 () "    {" 98 0  () "    {" 98]
-)
-()()
-][ebrowse-ts [ebrowse-cs "binary_function" "std" 32() () 0() ]
-([ebrowse-ts [ebrowse-cs "StringEq" "TDictionary" 0"TDictionary.hh" "  struct StringEq :" 1327() ]
-()()
-([ebrowse-ms "operator ()" () 4 () "  { bool operator()(const" 1415 0  () () 0]
-)
-()
-()
-()
-()
-()()
-])()
-()
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TNode" () 0"TNode.hh" "class TNode
-{" 124"TNode.hh" ]
-()([ebrowse-ms "node" () 0 () "  DOM::Element node;" 2444 2  () () 0]
-)
-([ebrowse-ms "TNode" () 0 () "  TNode(const TNode& n) :" 270 0  () "  TNode(const TNode& n) :" 270]
-[ebrowse-ms "TNode" () 0 () "  TNode(void) :" 145 0  () "  TNode(void) :" 145]
-[ebrowse-ms "append" () 4 () "  void  append(const" 1667 0  "TNode.cc" "TNode::append(const" 2450]
-[ebrowse-ms "append" () 4 () "  void  append(const" 1631 0  "TNode.cc" "TNode::append(const" 2348]
-[ebrowse-ms "child" () 4 () "  TNode child(unsigned" 592 0  "TNode.cc" "TNode::child(unsigned" 2874]
-[ebrowse-ms "core" () 4 () "  TNode core(void" 425 0  "TNode.cc" "TNode::core()" 1413]
-[ebrowse-ms "empty" () 4 () "  bool  empty(void" 648 0  () "  bool  empty(void" 648]
-[ebrowse-ms "first" () 4 () "  TNode first(void" 480 0  "TNode.cc" "TNode::first()" 1075]
-[ebrowse-ms "firstL" () 4 () "  TNode firstL(void" 508 0  "TNode.cc" "TNode::firstL()" 1259]
-[ebrowse-ms "get" () 4 () "  std::string get(const" 1758 0  "TNode.cc" "TNode::get(const" 3007]
-[ebrowse-ms "hasId" () 4 () "  bool  hasId(void" 1994 0  () "  bool  hasId(void" 1994]
-[ebrowse-ms "insert" () 4 () "  void  insert(const" 1595 0  "TNode.cc" "TNode::insert(const" 2193]
-[ebrowse-ms "is" () 4 () "  bool  is(const" 2055 0  () "  bool  is(const" 2055]
-[ebrowse-ms "isC" () 4 () "  bool  isC(const" 2303 0  () "  bool  isC(const" 2303]
-[ebrowse-ms "isC" () 4 () "  bool  isC(void" 2258 0  () "  bool  isC(void" 2258]
-[ebrowse-ms "isG" () 4 () "  bool  isG(void" 2119 0  () "  bool  isG(void" 2119]
-[ebrowse-ms "isSb" () 4 () "  bool  isSb(void" 2165 0  () "  bool  isSb(void" 2165]
-[ebrowse-ms "isSp" () 4 () "  bool  isSp(void" 2212 0  () "  bool  isSp(void" 2212]
-[ebrowse-ms "last" () 4 () "  TNode last(void" 534 0  "TNode.cc" "TNode::last()" 736]
-[ebrowse-ms "lastL" () 4 () "  TNode lastL(void" 561 0  "TNode.cc" "TNode::lastL()" 922]
-[ebrowse-ms "name" () 4 () "  std::string name(void" 1863 0  () "  std::string name(void" 1863]
-[ebrowse-ms "nameC" () 4 () "  std::string nameC(void" 1929 0  () "  std::string nameC(void" 1929]
-[ebrowse-ms "next" () 4 () "  TNode next(void" 319 0  "TNode.cc" "TNode::next()" 63]
-[ebrowse-ms "nextL" () 4 () "  TNode nextL(void" 346 0  "TNode.cc" "TNode::nextL()" 247]
-[ebrowse-ms "operator !=" () 4 () "  bool operator!=(const" 1295 0  () "  bool operator!=(const" 1295]
-[ebrowse-ms "operator ==" () 4 () "  bool operator==(const" 1227 0  () "  bool operator==(const" 1227]
-[ebrowse-ms "operator []" () 4 () "  ProxyAttr operator[](const" 1422 0  () "  ProxyAttr operator[](const" 1422]
-[ebrowse-ms "operator []" () 4 () "  TNode operator[](int" 1362 0  () "  TNode operator[](int" 1362]
-[ebrowse-ms "parent" () 4 () "  TNode parent(void" 453 0  "TNode.cc" "TNode::parent()" 1587]
-[ebrowse-ms "prepend" () 4 () "  void  prepend(const" 1718 0  "TNode.cc" "TNode::prepend(const" 2683]
-[ebrowse-ms "prev" () 4 () "  TNode prev(void" 372 0  "TNode.cc" "TNode::prev()" 396]
-[ebrowse-ms "prevL" () 4 () "  TNode prevL(void" 399 0  "TNode.cc" "TNode::prevL()" 588]
-[ebrowse-ms "remove" () 4 () "  void  remove(void" 1529 0  "TNode.cc" "TNode::remove()" 1913]
-[ebrowse-ms "replace" () 4 () "  void  replace(const" 1559 0  "TNode.cc" "TNode::replace(const" 2038]
-[ebrowse-ms "set" () 4 () "  void  set(const" 1797 0  "TNode.cc" "TNode::set(const" 3109]
-[ebrowse-ms "size" () 4 () "  unsigned size(void" 621 0  "TNode.cc" "TNode::size()" 1749]
-[ebrowse-ms "value" () 4 () "  std::string value(void" 707 0  () "  std::string value(void" 707]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "Entry" "TDictionary" 0"TDictionary.hh" "  struct Entry
-  {" 405"TDictionary.hh" ]
-()([ebrowse-ms "cls" () 0 () "    EntryClass cls;" 806 0  () () 0]
-[ebrowse-ms "delimiter" () 0 () "    unsigned delimiter : 1;" 909 0  () () 0]
-[ebrowse-ms "embellishment" () 0 () "    unsigned embellishment : 1;" 966 0  () () 0]
-[ebrowse-ms "infix" () 0 () "    unsigned infix : 8;" 830 0  () () 0]
-[ebrowse-ms "leftOpen" () 0 () "    unsigned leftOpen : 1;" 993 0  () () 0]
-[ebrowse-ms "limits" () 0 () "    unsigned limits : 1;" 934 0  () () 0]
-[ebrowse-ms "pattern" () 0 () "    std::vector<TToken> pattern;" 597 0  () () 0]
-[ebrowse-ms "postfix" () 0 () "    unsigned postfix : 8;" 881 0  () () 0]
-[ebrowse-ms "prefix" () 0 () "    unsigned prefix : 8;" 855 0  () () 0]
-[ebrowse-ms "rightOpen" () 0 () "    unsigned rightOpen : 1;" 1021 0  () () 0]
-[ebrowse-ms "table" () 0 () "    unsigned table : 1;" 1045 0  () () 0]
-[ebrowse-ms "value" () 0 () "    std::string value;" 620 0  () () 0]
-)
-([ebrowse-ms "Entry" () 0 () "    {" 420 0  () "    {" 420]
-[ebrowse-ms "defined" () 4 () "    bool defined(void" 643 0  () "    bool defined(void" 643]
-[ebrowse-ms "hasArguments" () 4 () "    bool hasArguments(void" 707 0  () "    bool hasArguments(void" 707]
-[ebrowse-ms "paramDelimited" () 4 () "    bool paramDelimited(unsigned" 777 0  "TDictionary.cc" "TDictionary::Entry::paramDelimited(unsigned" 4012]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "Frame" "TPushParser" 0"TPushParser.hh" "  struct Frame
-  {" 1126"TPushParser.hh" ]
-()([ebrowse-ms "entry" () 0 () "    const TDictionary::Entry& entry;" 1226 0  () () 0]
-[ebrowse-ms "pos" () 0 () "    unsigned pos;" 1244 0  () () 0]
-)
-([ebrowse-ms "Frame" () 0 () "    Frame(const TDictionary::Entry& e) :" 1142 0  () "    Frame(const TDictionary::Entry& e) :" 1142]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TCharStream" () 0"TCharStream.hh" "class TCharStream
-{" 94"TCharStream.hh" ]
-([ebrowse-ts [ebrowse-cs "TCharStreamString" () 0"TCharStreamString.hh" "class TCharStreamString :" 120"TCharStreamString.hh" ]
-()([ebrowse-ms "buffer" () 0 () "  TString buffer;" 555 2  () () 0]
-[ebrowse-ms "idx" () 0 () "  unsigned long idx;" 536 2  () () 0]
-)
-([ebrowse-ms "TCharStreamString" () 0 () "  TCharStreamString(const TString& s) :" 175 0  () "  TCharStreamString(const TString& s) :" 175]
-[ebrowse-ms "look" () 5 () "  virtual TChar look(void" 343 0  () "  virtual TChar look(void" 343]
-[ebrowse-ms "more" () 5 () "  virtual bool  more(void" 275 0  () "  virtual bool  more(void" 275]
-[ebrowse-ms "next" () 1 () "  virtual TChar next(void" 439 0  () "  virtual TChar next(void" 439]
-[ebrowse-ms "~TCharStreamString" () 1 () "  virtual ~TCharStreamString()" 243 0  () "  virtual ~TCharStreamString()" 243]
-)
-()
-()
-()
-()
-()()
-])()
-([ebrowse-ms "TCharStream" () 0 () "  TCharStream(void) {" 121 0  () "  TCharStream(void) {" 121]
-[ebrowse-ms "look" () 13 () "  virtual TChar look(void" 222 0  () () 0]
-[ebrowse-ms "more" () 13 () "  virtual bool  more(void" 184 0  () () 0]
-[ebrowse-ms "next" () 9 () "  virtual TChar next(void" 260 0  () () 0]
-[ebrowse-ms "~TCharStream" () 1 () "  virtual ~TCharStream()" 152 0  () "  virtual ~TCharStream()" 152]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "EmptyStream" "TCharStream" 0"TCharStream.hh" "  class EmptyStream {" 289() ]
-()()
-()
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "*Globals*" () 0() () 0"APushLexer.hh" ]
-()()
-([ebrowse-ms "dispatch" () 0 "special.cc" "dispatch(const" 1012 0  "special.cc" "dispatch(const" 1012]
-[ebrowse-ms "do_apostrophe" () 0 "special.cc" "do_apostrophe(const" 669 0  "special.cc" "do_apostrophe(const" 669]
-[ebrowse-ms "do_bgroup" () 0 "special.cc" "do_bgroup(const" 149 0  "special.cc" "do_bgroup(const" 149]
-[ebrowse-ms "do_control" () 0 "special.cc" "do_control(const" 711 0  "special.cc" "do_control(const" 711]
-[ebrowse-ms "do_other" () 0 "special.cc" "do_other(const" 776 0  "special.cc" "do_other(const" 776]
-[ebrowse-ms "finishG" () 0 "special.cc" "void finishG(const" 118 0  () () 0]
-[ebrowse-ms "getCore" () 0 "domnav.cc" "getCore(const" 629 0  "domnav.cc" "getCore(const" 629]
-[ebrowse-ms "getRightmostChild" () 0 "domnav.cc" "getRightmostChild(const" 37 0  "domnav.cc" "getRightmostChild(const" 37]
-[ebrowse-ms "isDelimiter" () 0 "domnav.cc" "isDelimiter(const" 1716 0  "domnav.cc" "isDelimiter(const" 1716]
-[ebrowse-ms "isFunction" () 0 "domnav.cc" "isFunction(const" 1879 0  "domnav.cc" "isFunction(const" 1879]
-[ebrowse-ms "isGroup" () 0 "domnav.cc" "isGroup(const" 1214 0  "domnav.cc" "isGroup(const" 1214]
-[ebrowse-ms "isInferred" () 0 "domnav.cc" "isInferred(const" 985 0  "domnav.cc" "isInferred(const" 985]
-[ebrowse-ms "isMacro" () 0 "domnav.cc" "isMacro(const" 1085 0  "domnav.cc" "isMacro(const" 1085]
-[ebrowse-ms "isOperator" () 0 "domnav.cc" "isOperator(const" 1553 0  "domnav.cc" "isOperator(const" 1553]
-[ebrowse-ms "isPrimes" () 0 "domnav.cc" "isPrimes(const" 1451 0  "domnav.cc" "isPrimes(const" 1451]
-[ebrowse-ms "isSb" () 0 "domnav.cc" "isSb(const" 1291 0  "domnav.cc" "isSb(const" 1291]
-[ebrowse-ms "isSp" () 0 "domnav.cc" "isSp(const" 1369 0  "domnav.cc" "isSp(const" 1369]
-[ebrowse-ms "isUnicodeAlpha" () 2 "dom.hh" "inline bool isUnicodeAlpha(TChar" 303 0  "dom.hh" "inline bool isUnicodeAlpha(TChar" 303]
-[ebrowse-ms "isUnicodeDigit" () 2 "dom.hh" "inline bool isUnicodeDigit(TChar" 408 0  "dom.hh" "inline bool isUnicodeDigit(TChar" 408]
-[ebrowse-ms "isUnicodeSpace" () 2 "dom.hh" "inline bool isUnicodeSpace(TChar" 198 0  "dom.hh" "inline bool isUnicodeSpace(TChar" 198]
-[ebrowse-ms "main" () 0 "texlexer.cc" "main()" 51 0  "texlexer.cc" "main()" 51]
-[ebrowse-ms "prevLinearSibling" () 0 "domnav.cc" "prevLinearSibling(const" 324 0  "domnav.cc" "prevLinearSibling(const" 324]
-[ebrowse-ms "replace" () 0 "domnav.cc" "replace(const" 834 0  "domnav.cc" "replace(const" 834]
-[ebrowse-ms "tokenize" () 0 "tokenizer.hh" "std::vector<TToken> tokenize(const" 123 0  () () 0]
-)
-([ebrowse-ms "undefinedEntry" () 0 () () 0 0  "TDictionary.cc" "static TDictionary::Entry undefinedEntry;" 132]
-)
-()
-([ebrowse-ms "Ptr_hh" () 512 () () 0 0  "Ptr.hh" "#define Ptr_hh
-" 1036]
-[ebrowse-ms "TML_NS_URI" () 512 () () 0 0  "globals.hh" "#define TML_NS_URI " 67]
-[ebrowse-ms "XMLNS_NS_URI" () 512 () () 0 0  "globals.hh" "#define XMLNS_NS_URI " 123]
-[ebrowse-ms "__APushLexer_hh__" () 512 () () 0 0  () "#define __APushLexer_hh__
-" 53]
-[ebrowse-ms "__APushParser_hh__" () 512 () () 0 0  "APushParser.hh" "#define __APushParser_hh__
-" 55]
-[ebrowse-ms "__TCharStreamString_hh__" () 512 () () 0 0  "TCharStreamString.hh" "#define __TCharStreamString_hh__
-" 67]
-[ebrowse-ms "__TCharStream_hh__" () 512 () () 0 0  "TCharStream.hh" "#define __TCharStream_hh__
-" 55]
-[ebrowse-ms "__TDictionary_hh__" () 512 () () 0 0  "TDictionary.hh" "#define __TDictionary_hh__
-" 55]
-[ebrowse-ms "__TDocument_hh__" () 512 () () 0 0  "TDocument.hh" "#define __TDocument_hh__
-" 51]
-[ebrowse-ms "__TNode_hh__" () 512 () () 0 0  "TNode.hh" "#define __TNode_hh__
-" 43]
-[ebrowse-ms "__TObject_hh__" () 512 () () 0 0  "TObject.hh" "#define __TObject_hh__
-" 47]
-[ebrowse-ms "__TPushLexer_hh__" () 512 () () 0 0  "TPushLexer.hh" "#define __TPushLexer_hh__
-" 53]
-[ebrowse-ms "__TPushParser_hh__" () 512 () () 0 0  "TPushParser.hh" "#define __TPushParser_hh__
-" 55]
-[ebrowse-ms "__TToken_hh__" () 512 () () 0 0  "TToken.hh" "#define __TToken_hh__
-" 45]
-[ebrowse-ms "__TTokenizer_hh__" () 512 () () 0 0  "TTokenizer.hh" "#define __TTokenizer_hh__
-" 53]
-[ebrowse-ms "__dom_hh__" () 512 () () 0 0  "dom.hh" "#define __dom_hh__
-" 39]
-[ebrowse-ms "__globals_hh__" () 512 () () 0 0  "globals.hh" "#define __globals_hh__
-" 47]
-[ebrowse-ms "__tokenzier_hh__" () 512 () () 0 0  "tokenizer.hh" "#define __tokenzier_hh__
-" 51]
-)
-([ebrowse-ms "TChar" () 0 () () 0 0  "dom.hh" "typedef DOM::Char32     TChar;" 131]
-[ebrowse-ms "TString" () 0 () () 0 0  "dom.hh" "typedef DOM::UCS4String TString;" 164]
-)
-()()
-][ebrowse-ts [ebrowse-cs "ProxyAttr" "TNode" 0"TNode.hh" "  class ProxyAttr
-  {" 765"TNode.hh" ]
-()([ebrowse-ms "name" () 0 () "    std::string  name;" 1155 2  () () 0]
-[ebrowse-ms "node" () 0 () "    DOM::Element node;" 1132 2  () () 0]
-)
-([ebrowse-ms "ProxyAttr" () 0 () "r(const DOM::Element& n, const std::string& s) :" 795 0  () "r(const DOM::Element& n, const std::string& s) :" 795]
-[ebrowse-ms "operator =" () 0 () "    ProxyAttr& operator=(const" 959 0  () "    ProxyAttr& operator=(const" 959]
-[ebrowse-ms "operator ==" () 0 () "    bool       operator==(const" 1040 0  () "    bool       operator==(const" 1040]
-[ebrowse-ms "string" () 4 () "    operator std::string()" 885 0  () "    operator std::string()" 885]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "EventListener" "DOM" 0() () 0() ]
-([ebrowse-ts [ebrowse-cs "DOMSubtreeModifiedListener" "TDocument" 0"TDocument.hh" "  class DOMSubtreeModifiedListener :" 1015"TDocument.hh" ]
-()([ebrowse-ms "doc" () 0 () "    TDocument doc;" 1247 2  () () 0]
-)
-([ebrowse-ms "DOMSubtreeModifiedListener" () 0 () "DOMSubtreeModifiedListener(const TDocument& d) :" 1092 0  () "DOMSubtreeModifiedListener(const TDocument& d) :" 1092]
-[ebrowse-ms "handleEvent" () 1 () "    virtual void handleEvent(const" 1202 0  () () 0]
-[ebrowse-ms "~DOMSubtreeModifiedListener" () 1 () "    virtual ~DOMSubtreeModifiedListener()" 1162 0  () "    virtual ~DOMSubtreeModifiedListener()" 1162]
-)
-()
-()
-()
-()
-()()
-][ebrowse-ts [ebrowse-cs "TDocument" () 0"TDocument.hh" "class TDocument :" 108"TDocument.hh" ]
-()([ebrowse-ms "dirty" () 0 () "  DOM::Element dirty;" 971 2  () () 0]
-[ebrowse-ms "doc" () 0 () "  DOM::Document doc;" 949 2  () () 0]
-)
-([ebrowse-ms "TDocument" () 0 () "  TDocument(void);" 162 0  "TDocument.cc" "TDocument::TDocument()
-{" 108]
-[ebrowse-ms "create" () 4 () "  TNode create(const" 202 0  "TDocument.cc" "TDocument::create(const" 789]
-[ebrowse-ms "createC" () 4 () "  TNode createC(const" 327 0  "TDocument.cc" "TDocument::createC(const" 1062]
-[ebrowse-ms "createG" () 4 () "  TNode createG(unsigned" 262 0  () "  TNode createG(unsigned" 262]
-[ebrowse-ms "createI" () 4 () "  TNode createI(const" 461 0  () "  TNode createI(const" 461]
-[ebrowse-ms "createN" () 4 () "  TNode createN(const" 561 0  () "  TNode createN(const" 561]
-[ebrowse-ms "createO" () 4 () "  TNode createO(const" 661 0  () "  TNode createO(const" 661]
-[ebrowse-ms "createT" () 4 () "  TNode createT(const" 384 0  "TDocument.cc" "TDocument::createT(const" 1197]
-[ebrowse-ms "dirtyIdNode" () 4 () "  TNode dirtyIdNode(void" 872 0  "TDocument.cc" "TDocument::dirtyIdNode()" 2081]
-[ebrowse-ms "dirtyNode" () 4 () "  TNode dirtyNode(void" 821 0  () "  TNode dirtyNode(void" 821]
-[ebrowse-ms "handleEvent" () 1 () "  virtual void handleEvent(const" 1293 2  "TDocument.cc" "TDocument::handleEvent(const" 2348]
-[ebrowse-ms "root" () 0 () "  TNode root(void" 758 0  () "  TNode root(void" 758]
-[ebrowse-ms "serialize" () 4 () "  void serialize(const" 904 0  "TDocument.cc" "TDocument::serialize(const" 637]
-[ebrowse-ms "~TDocument" () 0 () "  ~TDocument()" 179 0  "TDocument.cc" "TDocument::~TDocument()" 460]
-)
-()
-([ebrowse-ms "findCommonAncestor" () 0 () "  static DOM::Node findCommonAncestor(const" 1398 2  "TDocument.cc" "TDocument::findCommonAncestor(const" 1560]
-[ebrowse-ms "nodeDepth" () 0 () "  static unsigned nodeDepth(const" 1341 2  "TDocument.cc" "TDocument::nodeDepth(const" 1362]
-)
-()
-()
-()()
-])()
-()
-()
-()
-()
-()
-()()
-]
\ No newline at end of file
diff --git a/helm/DEVEL/mathml_editor/src/CLoggerConsole.cc b/helm/DEVEL/mathml_editor/src/CLoggerConsole.cc
deleted file mode 100644 (file)
index 0265f38..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <iostream>
-
-#include "CLoggerConsole.hh"
-
-void
-CLoggerConsole::message(Level l, const std::string& msg)
-{
-  const char* ls[] = { "Error", "Warning", "Info", "Debug" };
-  std::cerr << "*** " << ls[l] << ": " << msg << std::endl;
-}
diff --git a/helm/DEVEL/mathml_editor/src/CLoggerConsole.hh b/helm/DEVEL/mathml_editor/src/CLoggerConsole.hh
deleted file mode 100644 (file)
index 630f7cf..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __CLoggerConsole_hh__
-#define __CLoggerConsole_hh__
-
-#include "ALogger.hh"
-
-class CLoggerConsole : public ALogger
-{
-public:
-  CLoggerConsole(void) { };
-
-protected:
-  virtual void message(Level, const std::string&);
-};
-
-#endif // __CLoggerConsole_hh__
diff --git a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc b/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc
deleted file mode 100644 (file)
index fddb24a..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include "dom.hh"
-#include "TNode.hh"
-#include "ALogger.hh"
-#include "TDocument.hh"
-#include "CMathMLFactoryXSLT.hh"
-#include "AMathMLConsumer.hh"
-#include <cassert>
-
-CMathMLFactoryXSLT::CMathMLFactoryXSLT(ALogger& l, const DOMX::XSLTStylesheet& s)
-  : AMathMLFactory(l), style(s)
-{
-  DOM::DOMImplementation di;
-  DOM::DocumentType dt;
-  result = di.createDocument(MATHML_NS_URI, "m:math", dt);
-}
-
-void
-CMathMLFactoryXSLT::documentModified(TDocument& doc)
-{
-  std::vector< std::pair<DOM::GdomeString, DOM::GdomeString> > dirtyId;
-  if (TNode dirty = doc.dirtyNode())
-    if (result.get_documentElement().hasAttribute("xref"))
-      dirtyId.push_back(std::make_pair(DOM::GdomeString("id"),
-                                      DOM::GdomeString("'" + std::string(dirty["id"]) + "'")));
-  DOM::Document res = style.apply(doc.document(), dirtyId);
-  assert(res);
-  style.save(doc.document(), stdout);
-
-  if (DOM::Element root = res.get_documentElement())
-         {
-      if (result.get_documentElement().hasAttribute("xref"))
-        {
-          bool ok = subst(result.get_documentElement(), root.getAttribute("xref"), result.importNode(root, true));
-          assert(ok);
-          doc.clearDirty();
-        }
-      else
-        result.replaceChild(result.importNode(root, true), result.get_documentElement());
-         }
-       else
-               {
-                       // Something wrong happened while applying the stylesheet.
-                       DOM::Element root = result.get_documentElement();
-                       DOM::Node p = root.get_firstChild();
-                       while (p) {
-                               DOM::Node next = p.get_nextSibling();
-                               root.removeChild(p);
-                               p = next;
-                       }
-      logger.error("The stylesheet produced an empty document");
-    }
-
-  style.save(result, stdout);
-}
-
-bool
-CMathMLFactoryXSLT::subst(const DOM::Element& e1, const DOM::GdomeString& id, const DOM::Element& e2)
-{
-  assert(e1);
-  assert(e2);
-  if (e1.getAttribute("xref") == id)
-    {
-      DOM::Node parent = e1.get_parentNode();
-      assert(parent);
-      parent.replaceChild(e2, e1);
-      return true;
-    }
-  else
-    {
-      DOM::Node p = e1.get_firstChild();
-      while (p)
-       {
-         while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_nextSibling();
-         if (p)
-           if (subst(p, id, e2)) return true;
-           else p = p.get_nextSibling();
-       }
-      return false;
-    }
-}
-
diff --git a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.hh b/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.hh
deleted file mode 100644 (file)
index 34d8fa9..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __CMathMLFactoryXSLT_hh__
-#define __CMathMLFactoryXSLT_hh__
-
-#include <GdomeSmartDOM.hh>
-#include "AMathMLFactory.hh"
-
-class CMathMLFactoryXSLT : public AMathMLFactory
-{
-public:
-  CMathMLFactoryXSLT(class ALogger&, const class GdomeSmartDOMExt::XSLTStylesheet&);
-
-  virtual void documentModified(class TDocument&);
-  virtual GdomeSmartDOM::Document document(void) const { return result; };
-
-private:
-  static bool subst(const GdomeSmartDOM::Element&, const GdomeSmartDOM::GdomeString&, const GdomeSmartDOM::Element&);
-
-  const class GdomeSmartDOMExt::XSLTStylesheet& style;
-  GdomeSmartDOM::Document result;
-};
-
-#endif // __CMathMLFactoryXSLT_hh__
diff --git a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLTDiff.cc b/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLTDiff.cc
deleted file mode 100644 (file)
index 7893fcb..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include "dom.hh"
-#include "Diff.hh"
-#include "TNode.hh"
-#include "TDocument.hh"
-#include "CMathMLFactoryXSLTDiff.hh"
-#include "AMathMLConsumer.hh"
-#include <cassert>
-
-CMathMLFactoryXSLTDiff::CMathMLFactoryXSLTDiff(ALogger& l, const DOMX::XSLTStylesheet& s)
-  : AMathMLFactory(l), style(s)
-{
-  DOM::DOMImplementation di;
-  DOM::DocumentType dt;
-  result = di.createDocument(MATHML_NS_URI, "m:math", dt);
-}
-
-void
-CMathMLFactoryXSLTDiff::documentModified(TDocument& doc)
-{
-#if 0
-  std::vector< std::pair<DOM::GdomeString, DOM::GdomeString> > dirtyId;
-  if (TNode dirty = doc.dirtyNode()) 
-    if (false && result.get_documentElement().hasAttribute("xref"))
-      dirtyId.push_back(std::make_pair(DOM::GdomeString("id"),
-                                      DOM::GdomeString("'" + std::string(dirty["id"]) + "'")));
-#endif
-  DOM::Document res = style.apply(doc.document());
-  assert(res);
-  //cout << "*** THE TEX DOCUMENT" << endl;
-  //style.save(doc.document(), stdout);
-  std::cout << "*** THE CURRENT DOCUMENT:" << std::endl;
-  if (result) style.save(result, stdout);
-  std::cout << "*** THE NEW DOCUMENT:" << std::endl;
-  style.save(res, stdout);
-  std::cout << "*** THE DIFF:" << std::endl;
-  DOMX::Diff diff = DOMX::Diff::diff(result, res);
-  style.save(diff.document(), stdout);
-  diff.patch();
-
-  doc.clearDirty();
-}
-
-bool
-CMathMLFactoryXSLTDiff::subst(const DOM::Element& e1, const DOM::GdomeString& id, const DOM::Element& e2)
-{
-  assert(e1);
-  assert(e2);
-  if (e1.getAttribute("xref") == id)
-    {
-      DOMX::Diff diff = DOMX::Diff::diff(e1, e2);
-      style.save(diff.document(), stdout);
-      diff.patch();
-      return true;
-    }
-  else
-    {
-      DOM::Node p = e1.get_firstChild();
-      while (p)
-       {
-         while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_nextSibling();
-         if (p)
-           if (subst(p, id, e2)) return true;
-           else p = p.get_nextSibling();
-       }
-      return false;
-    }
-}
-
diff --git a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLTDiff.hh b/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLTDiff.hh
deleted file mode 100644 (file)
index 75ebfc2..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __CMathMLFactoryXSLTDiff_hh__
-#define __CMathMLFactoryXSLTDiff_hh__
-
-#include "AMathMLFactory.hh"
-
-class CMathMLFactoryXSLTDiff : public AMathMLFactory
-{
-public:
-  CMathMLFactoryXSLTDiff(class ALogger&, const DOMX::XSLTStylesheet&);
-
-  virtual void documentModified(class TDocument&);
-  virtual DOM::Document document(void) const { return result; };
-
-private:
-  bool subst(const DOM::Element& e1, const DOM::GdomeString& id, const DOM::Element& e2);
-
-  const DOMX::XSLTStylesheet& style;
-  DOM::Document result;
-};
-
-#endif // __CMathMLFactoryXSLT_hh__
diff --git a/helm/DEVEL/mathml_editor/src/Diff.cc b/helm/DEVEL/mathml_editor/src/Diff.cc
deleted file mode 100644 (file)
index d8df812..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <sstream>
-#include <functional>
-#include <vector>
-#include <algorithm>
-#include <cassert>
-
-#include "Diff.hh"
-
-namespace GdomeSmartDOMExt
-{
-
-  Diff
-  Diff::diff(const Document& dest, const Document& source, flatNodeEq flatEq)
-  {
-    assert(dest);
-    assert(source);
-    assert(flatEq);
-
-    return diff(dest.get_documentElement(), source.get_documentElement(), flatEq);
-  }
-  
-  Diff
-  Diff::diff(const Element& dest, const Element& source, flatNodeEq flatEq)
-  {
-    assert(dest);
-    assert(source);
-    assert(flatEq);
-
-    DOMImplementation di;
-    Document doc = di.createDocument(DDIFF_NS_URI, "diff:doc", DocumentType());
-    Element root = doc.get_documentElement();
-    root.setAttributeNS(XMLNS_NS_URI, "xmlns:diff", DDIFF_NS_URI);
-
-    Diff diff(dest, doc, flatEq);
-    if (Node d = diff.diffNodes(dest, source)) root.appendChild(d);
-    else root.appendChild(doc.createElementNS(DDIFF_NS_URI, "diff:same"));
-
-    return diff;
-  }
-
-  struct NodeEqPredicate : std::binary_function<Node,Node,bool>
-  {
-    NodeEqPredicate(Diff::flatNodeEq e) : eq(e) { };
-    bool operator()(const Node& n1, const Node& n2) const { return eq(n1, n2); };
-
-  private:
-    Diff::flatNodeEq eq;
-  };
-    
-  std::vector<Node>
-  collectProperAttributes(const Node& n)
-  {
-    assert(n);
-    NamedNodeMap map = n.get_attributes();
-    unsigned len = map.get_length();
-
-    std::vector<Node> res;
-    res.reserve(len);
-    for (unsigned i = 0; i < len; i++)
-      {
-       Node attr = map.item(i);
-       assert(attr);
-       if (attr.get_nodeName() != "xmlns" && attr.get_prefix() != "xmlns") res.push_back(attr);
-      }
-
-    return res;
-  }
-
-  bool
-  Diff::defaultFlatNodeEq(const Node& n1, const Node& n2)
-  {
-    assert(n1);
-    assert(n2);
-
-    unsigned nodeType = n1.get_nodeType();
-    if (nodeType != n2.get_nodeType()) return false;
-
-    GdomeString ns1 = n1.get_namespaceURI();
-    GdomeString ns2 = n2.get_namespaceURI();
-    if (ns1 != ns2) return false;
-
-    switch (nodeType)
-      {
-      case Node::ATTRIBUTE_NODE:
-       if (!ns1.null())
-         {
-           assert(!ns2.null());
-           if (n1.get_localName() != n2.get_localName()) return false;
-         }
-       else
-         {
-           assert(ns2.null());
-           if (n1.get_nodeName() != n2.get_nodeName()) return false;
-         }
-       // WARNING: fallback for checking node value
-      case Node::TEXT_NODE:
-      case Node::CDATA_SECTION_NODE:
-       if (n1.get_nodeValue() != n2.get_nodeValue()) return false;
-       return true;
-      case Node::ELEMENT_NODE:
-       {
-         //cout << "comparing: " << n1.get_nodeName() << " ? " << n2.get_nodeName() << endl;
-         if (!ns1.null())
-           {
-             assert(!ns2.null());
-             if (n1.get_localName() != n2.get_localName()) return false;
-           }
-         else
-           {
-             assert(ns2.null());
-             if (n1.get_nodeName() != n2.get_nodeName()) return false;
-           }
-#if 1
-         std::vector<Node> m1 = collectProperAttributes(n1);
-         std::vector<Node> m2 = collectProperAttributes(n2);
-         if (m1.size() != m2.size()) return false;
-
-         for (unsigned i = 0; i < m1.size(); i++)
-           {
-             std::vector<Node>::iterator p2 = std::find_if(m2.begin(), m2.end(), std::bind2nd(NodeEqPredicate(defaultFlatNodeEq), m1[i]));
-             if (p2 == m2.end()) return false;
-           }
-#endif
-       }
-       return true;
-      default:
-       return true;
-      }
-
-  }
-
-  void
-  Diff::sameChunk(const Node& res, unsigned long n) const
-  {
-    assert(n > 0);
-    Element s = doc.createElementNS(DDIFF_NS_URI, "diff:same");
-    if (n != 1)
-      {
-       std::ostringstream os;
-       os << n;
-       s.setAttribute("count", os.str());
-      }
-    res.appendChild(s);
-  }
-
-  Node
-  Diff::diffNodes(const Node& p1, const Node& p2) const
-  {
-    if (eq(p1, p2))
-      {
-       Element m = doc.createElementNS(DDIFF_NS_URI, "diff:merge");
-       if (diffChildren(p1, p2, m)) return m;
-       else return Node();
-      }
-    else
-      {
-       Element r = doc.createElementNS(DDIFF_NS_URI, "diff:replace");
-       r.appendChild(doc.importNode(p2, true));
-       return r;
-      }
-  }
-
-  bool
-  Diff::diffChildren(const Node& n1, const Node& n2, const Node& res) const
-  {
-    assert(n1);
-    assert(n2);
-    assert(res);
-
-    Node p1 = n1.get_firstChild();
-    Node p2 = n2.get_firstChild();
-    bool same = true;
-    unsigned nSame = 0;
-    while (p1 && p2)
-      {
-       if (Node d = diffNodes(p1, p2))
-         {
-           same = false;
-           if (nSame > 0)
-             {
-               sameChunk(res, nSame);
-               nSame = 0;
-             }
-           res.appendChild(d);
-         }
-       else
-         nSame++;
-
-       p1 = p1.get_nextSibling();
-       p2 = p2.get_nextSibling();
-      }
-
-    if (p1)
-      {
-       same = false;
-       if (nSame > 0)
-         {
-           sameChunk(res, nSame);
-           nSame = 0;
-         }
-
-       unsigned nRemoved = 0;
-       while (p1)
-         {
-           nRemoved++;
-           p1 = p1.get_nextSibling();
-         }
-
-       if (nRemoved > 0)
-         {
-           Element r = doc.createElementNS(DDIFF_NS_URI, "diff:remove");
-           if (nRemoved > 1)
-             {
-               std::ostringstream os;
-               os << nRemoved;
-               r.setAttribute("count", os.str());
-             }
-           res.appendChild(r);
-         }
-      }
-
-    if (p2)
-      {
-       same = false;
-       if (nSame > 0)
-         {
-           sameChunk(res, nSame);
-           nSame = 0;
-         }
-
-       Element i = doc.createElementNS(DDIFF_NS_URI, "diff:insert");
-       while (p2)
-         {
-           i.appendChild(doc.importNode(p2, true));
-           p2 = p2.get_nextSibling();
-         }
-       res.appendChild(i);
-      }
-
-    return !same;
-  }
-
-  static Node
-  getFirstElement(const Node& n)
-  {
-    Node p = n.get_firstChild();
-    while (p && p.get_nodeType() != Node::ELEMENT_NODE)
-      p = p.get_nextSibling();
-    return p;
-  }
-
-  static Node
-  getNextElement(const Node& n)
-  {
-    Node p = n.get_nextSibling();
-    while (p && p.get_nodeType() != Node::ELEMENT_NODE)
-      p = p.get_nextSibling();
-    return p;
-  }
-
-  void
-  Diff::patchRootNode(const Node& node, const Element& elem) const
-  {
-    GdomeString name = elem.get_localName();
-    if (name == "same")
-      {
-       if (elem.hasAttribute("count"))
-         {
-           unsigned count;
-           std::istringstream is(elem.getAttribute("count"));
-           is >> count;
-           assert(count == 1);
-         }
-      }
-    else if (name == "replace")
-      {
-       Document d1 = node.get_ownerDocument();
-       Node parent = node.get_parentNode();
-       assert(parent);
-#if 0
-       /* the following patch is because of gdome2 bug that prevents from
-        * replacing the root element of a document.
-        */
-       assert(!node.get_previousSibling());
-       assert(!node.get_nextSibling());
-       parent.removeChild(node);
-       parent.appendChild(d1.importNode(getFirstElement(elem), true));
-#endif
-       parent.replaceChild(d1.importNode(getFirstElement(elem), true), node);
-      }
-    else if (name == "merge")
-      patchChildren(node, elem);
-    else
-      assert(0);
-  }
-
-  void
-  Diff::patchChildren(const Node& n1, const Element& e2) const
-  {
-    Node p1 = n1.get_firstChild();
-    Element p2 = getFirstElement(e2);
-    while (p2)
-      {
-       GdomeString name = p2.get_localName();
-       if (name == "same")
-         {
-           unsigned count = 1;
-           if (p2.hasAttribute("count"))
-             {
-               std::istringstream is(p2.getAttribute("count"));
-               is >> count;
-             }
-           while (count-- > 0)
-             {
-               if (!p1) throw BADDiff("too few nodes in original document (same)");
-               p1 = p1.get_nextSibling();
-             }
-         }
-       else if (name == "replace")
-         {
-           Document d1 = n1.get_ownerDocument();
-           if (!p1) throw BADDiff("no node to replace in original document");
-           Node next = p1.get_nextSibling();
-           n1.replaceChild(d1.importNode(p2.get_firstChild(), true), p1);
-           p1 = next;
-         }
-       else if (name == "insert")
-         {
-           Document d1 = n1.get_ownerDocument();
-           for (Node i = p2.get_firstChild(); i; i = i.get_nextSibling())
-             n1.insertBefore(d1.importNode(i, true), p1);
-         }
-       else if (name == "merge")
-         {
-           if (!p1) throw BADDiff("no node to merge in original document");
-           patchChildren(p1, p2);
-           p1 = p1.get_nextSibling();
-         }
-       else if (name == "remove")
-         {
-           unsigned count = 1;
-           if (p2.hasAttribute("count"))
-             {
-               std::istringstream is(p2.getAttribute("count"));
-               is >> count;
-             }
-           while (count-- > 0)
-             {
-               if (!p1) throw BADDiff("too few nodes in original document (remove)");
-               Node next = p1.get_nextSibling();
-               n1.removeChild(p1);
-               p1 = next;
-             }
-         }
-       else
-         assert(0);
-
-       p2 = getNextElement(p2);
-      }
-  }
-
-  void
-  Diff::patch() const
-  {
-    patchRootNode(dest, getFirstElement(doc.get_documentElement()));
-  }
-
-}
diff --git a/helm/DEVEL/mathml_editor/src/Diff.hh b/helm/DEVEL/mathml_editor/src/Diff.hh
deleted file mode 100644 (file)
index a047d6b..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __Diff_hh__
-#define __Diff_hh__
-
-#include <GdomeSmartDOM.hh>
-
-#define XMLNS_NS_URI "http://www.w3.org/2000/xmlns/"
-#define DDIFF_NS_URI "http://helm.cs.unibo.it/2002/DDIFF"
-
-namespace GdomeSmartDOMExt
-{
-  using namespace GdomeSmartDOM;
-
-  class Diff
-  {
-  public:
-    typedef bool (*flatNodeEq)(const Node&, const Node&);
-    static bool defaultFlatNodeEq(const Node&, const Node&);
-
-  private:
-    Diff(const Node& n, const Document& d, flatNodeEq e) : dest(n), doc(d), eq(e) { };
-
-  public:
-    static Diff diff(const Document&, const Document&, flatNodeEq = defaultFlatNodeEq);
-    static Diff diff(const Element&, const Element&, flatNodeEq = defaultFlatNodeEq);
-
-    Document document(void) const { return doc; };
-    Node     node(void) const { return dest; };
-
-    void patch(void) const;
-
-    struct BADDiff
-    {
-      BADDiff(const std::string& s) : msg(s) { };
-      const std::string msg;
-    };
-
-  private:
-    Node diffNodes(const Node&, const Node&) const;
-    bool diffChildren(const Node&, const Node&, const Node&) const;
-    void sameChunk(const Node&, unsigned long) const;
-    void patchRootNode(const Node&, const Element&) const;
-    void patchChildren(const Node&, const Element&) const;
-
-    Document   doc;
-    Node       dest;
-    flatNodeEq eq;
-  };
-
-}
-
-#endif // __ddiff_hh__
diff --git a/helm/DEVEL/mathml_editor/src/ILPushLexer.cc b/helm/DEVEL/mathml_editor/src/ILPushLexer.cc
deleted file mode 100644 (file)
index b82b52e..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-
-#include <list>
-#include <string>
-
-#include "ALogger.hh"
-#include "TToken.hh"
-#include "ILPushLexer.hh"
-#include "APushParser.hh"
-#include "TDictionary.hh"
-
-ILPushLexer::ILPushLexer(ALogger& l, APushParser& p, TDictionary& d) : LPushLexer(l, p), dictionary(d)
-{
-  state = ACCEPT;
-}
-
-bool
-ILPushLexer::complete()
-{
-  if (state == MACRO)
-    {
-      std::list<std::string> complete_list;
-      std::string new_buffer = dictionary.complete(buffer, complete_list);
-
-      if (!complete_list.size())
-        {
-          // no matching macro
-          logger.warning("no known macro with `" + buffer + "' prefix");
-        }
-      else if (complete_list.size() == 1)
-        {
-          // good! we have found the macro
-          buffer = new_buffer;
-        }
-      else
-        {
-          // we have more than one matching macro
-          logger.warning("ambiguous prefix `" + buffer + "'");
-         for (std::list<std::string>::const_iterator p = complete_list.begin();
-              p != complete_list.end();
-              p++)
-           {
-             logger.info("Candidate: " + *p);
-           }
-          buffer = new_buffer;
-        }
-
-      displayCursor();
-      return true;
-    }
-  else return false;
-}
diff --git a/helm/DEVEL/mathml_editor/src/ILPushLexer.hh b/helm/DEVEL/mathml_editor/src/ILPushLexer.hh
deleted file mode 100644 (file)
index 1af6f93..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#ifndef __ILPushLexer_hh__
-#define __ILPushLexer_hh__
-
-#include <string>
-
-#include "LPushLexer.hh"
-
-class ILPushLexer : public LPushLexer
-{
-public:
-  ILPushLexer(class ALogger&, class APushParser&, class TDictionary&);
-  ~ILPushLexer(void) { };
-
-  virtual bool complete(void);
-  
-protected:  
-  class TDictionary& dictionary;
-};
-
-#endif
diff --git a/helm/DEVEL/mathml_editor/src/ITPushLexer.cc b/helm/DEVEL/mathml_editor/src/ITPushLexer.cc
deleted file mode 100644 (file)
index b4d1b6c..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <list>
-#include <string>
-
-#include "ALogger.hh"
-#include "TToken.hh"
-#include "ITPushLexer.hh"
-#include "APushParser.hh"
-#include "TDictionary.hh"
-
-ITPushLexer::ITPushLexer(ALogger& l, APushParser& p, TDictionary& d) : TPushLexer(l, p), dictionary(d)
-{
-  state = ACCEPT;
-}
-
-bool
-ITPushLexer::complete()
-{
-  if (state == MACRO)
-    {
-      std::list<std::string> complete_list;
-      std::string new_buffer = dictionary.complete(buffer, complete_list);
-
-      if (!complete_list.size())
-        {
-          // no matching macro
-          logger.warning("wrong prefix: nothing to complete");
-        }
-      else if (complete_list.size() == 1)
-        {
-          // good! we have found the macro
-          buffer = new_buffer;
-        }
-      else
-        {
-          // we have more than one matching macro
-          logger.warning("prefix not sufficient");
-          buffer = new_buffer;
-        }
-
-      displayCursor();
-      return true;
-    }
-  else return false;
-}
diff --git a/helm/DEVEL/mathml_editor/src/ITPushLexer.hh b/helm/DEVEL/mathml_editor/src/ITPushLexer.hh
deleted file mode 100644 (file)
index 5b5ace3..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-#ifndef __ITPushLexer_hh__
-#define __ITPushLexer_hh__
-
-#include <string>
-
-#include "TPushLexer.hh"
-
-class ITPushLexer : public TPushLexer
-{
-public:
-  ITPushLexer(class ALogger&, class APushParser&, class TDictionary&);
-  ~ITPushLexer(void) { };
-
-  virtual bool complete(void);
-private:  
-  class TDictionary& dictionary;
-};
-
-#endif
diff --git a/helm/DEVEL/mathml_editor/src/LPushLexer.cc b/helm/DEVEL/mathml_editor/src/LPushLexer.cc
deleted file mode 100644 (file)
index a16801b..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <string>
-#include <cctype>
-#include <cassert>
-
-#include "ALogger.hh"
-#include "TToken.hh"
-#include "LPushLexer.hh"
-#include "APushParser.hh"
-
-LPushLexer::LPushLexer(ALogger& l, APushParser& p) : APushLexer(l, p)
-{
-  state = ACCEPT;
-}
-
-void
-LPushLexer::reset()
-{
-  buffer.erase();
-  state = ACCEPT;
-
-  displayCursor();
-}
-
-void
-LPushLexer::flush()
-{
-  push(-1);
-}
-
-void
-LPushLexer::transaction(char ch, State newState)
-{
-  switch (ch)
-    {
-    case '{': parser.push(TToken(TToken::BEGIN)); break;
-    case '}': parser.push(TToken(TToken::END)); break;
-    case '$': parser.push(TToken(TToken::SHIFT)); break;
-    case '&': parser.push(TToken(TToken::ALIGN)); break;
-    case '\n':
-    case '\r': parser.push(TToken(TToken::EOL, ch)); break;
-    case '^': parser.push(TToken(TToken::SUPERSCRIPT)); break;
-    case '_': parser.push(TToken(TToken::SUBSCRIPT)); break;
-    case '\t': parser.push(TToken(TToken::IGNORABLE_SPACE, ch)); break;
-    case ' ': parser.push(TToken(TToken::SPACE, ch)); break;
-    case '~': parser.push(TToken(TToken::ACTIVE, ch)); break;
-    case '%': parser.push(TToken(TToken::COMMENT)); break;     
-    default: parser.push(TToken(TToken::OTHER, ch)); break;
-    }
-  state = newState;
-}
-
-void
-LPushLexer::push(char ch)
-{
-  switch (state)
-    {
-    case ACCEPT:
-      if (ch == '\\') state = ESCAPE;
-      else if (ch == '#') state = PARAMETER;
-      else if (ch == -1) ;
-      else if (isalpha(ch))
-       {
-         buffer.push_back(ch);
-         state = IDENTIFIER;
-       }
-      else if (isdigit(ch))
-        {
-         buffer.push_back(ch);
-         state = NUMBER;
-       }
-      else transaction(ch, ACCEPT);
-      break;
-    case ESCAPE:
-      if (isalpha(ch))
-       {
-         buffer.push_back(ch);
-         state = MACRO;
-       }
-      else if (ch == -1) error();
-      else if (isdigit(ch))
-        {
-         // in this case, the previous '\' is ignored
-         buffer.push_back(ch);
-         state = NUMBER;
-       }
-      else
-       {
-         parser.push(TToken(TToken::CONTROL, ch));
-         state = ACCEPT;
-       }
-      break;
-    case MACRO:
-      if (ch == '\\')
-       {
-         parser.push(TToken(TToken::CONTROL, buffer));
-         buffer.erase();
-         state = ESCAPE;
-       }
-      else if (ch == '#')
-       {
-         parser.push(TToken(TToken::CONTROL, buffer));
-         buffer.erase();
-         state = PARAMETER;
-       }
-      else if (isalpha(ch))
-       buffer.push_back(ch);
-      else if (ch == -1)
-        {
-         parser.push(TToken(TToken::CONTROL, buffer));
-         buffer.erase();
-         state = ACCEPT;
-       }
-      else if (isspace(ch))
-          {
-           // we don't call transaction, because a white space is useful to exit from the macro,
-           // without "side effect". It's the TeX syntax.
-           parser.push(TToken(TToken::CONTROL, buffer));
-           buffer.erase();
-           state = ACCEPT;
-       }
-      else if (isdigit(ch))
-        {
-         parser.push(TToken(TToken::CONTROL, buffer));
-         buffer.erase();
-         buffer.push_back(ch);
-         state = NUMBER;
-       }
-      else
-        {
-         parser.push(TToken(TToken::CONTROL, buffer));
-         buffer.erase();
-          transaction(ch, ACCEPT);
-        }
-      break;
-    case PARAMETER:
-      if (ch == -1) error();
-      else
-        {
-         parser.push(TToken(TToken::PARAMETER, ch));
-         state = ACCEPT;
-       }
-      break;
-    case IDENTIFIER:
-      if (ch == -1)
-        {
-         parser.push(TToken(TToken::LETTER, buffer));
-         buffer.erase();
-         state = ACCEPT;
-       }
-      else if (isalpha(ch) || isdigit(ch))
-        {
-         buffer.push_back(ch);
-       }
-      else if (ch == '\\') state = ESCAPED_CHARACTER;
-      else if (ch == '#')
-        {
-         parser.push(TToken(TToken::LETTER, buffer));
-         buffer.erase();
-         state = PARAMETER;
-       }
-      else
-        {
-         parser.push(TToken(TToken::LETTER, buffer));
-         buffer.erase();
-         transaction(ch, ACCEPT);
-       }
-      break;
-    case ESCAPED_CHARACTER:
-      if ((ch == '-') || (ch == '_') || (ch == '/'))
-        {
-         buffer.push_back(ch);
-         state = IDENTIFIER;
-       }
-      else if (isalpha(ch))
-       {
-         parser.push(TToken(TToken::LETTER, buffer));
-         buffer.erase();
-         buffer.push_back(ch);
-         state = MACRO;
-       }
-      else if (ch == -1) error();
-      else if (isdigit(ch))
-        {
-         parser.push(TToken(TToken::LETTER, buffer));
-         buffer.erase();
-         buffer.push_back(ch);
-         state = NUMBER;
-       }
-      else
-       {
-         parser.push(TToken(TToken::LETTER, buffer));
-         buffer.erase();
-         parser.push(TToken(TToken::CONTROL, ch));
-         state = ACCEPT;
-       }
-      break;
-    case NUMBER:
-      if (isdigit(ch)) buffer.push_back(ch);
-      else if (isalpha(ch))
-        {
-         parser.push(TToken(TToken::DIGIT, buffer));
-         buffer.erase();
-         buffer.push_back(ch);
-         state = IDENTIFIER;
-       }
-      else if (ch == -1)
-        {
-         parser.push(TToken(TToken::DIGIT, buffer));
-         buffer.erase();
-         state = ACCEPT;
-       }
-      else if (ch == '\\')
-        {
-         parser.push(TToken(TToken::DIGIT, buffer));
-         buffer.erase();
-         state = ESCAPE;
-       }
-      else if (ch == '#')
-        {
-         parser.push(TToken(TToken::DIGIT, buffer));
-         buffer.erase();
-         state = PARAMETER;
-       }
-      else
-        {
-         parser.push(TToken(TToken::DIGIT, buffer));
-         buffer.erase();
-         transaction(ch, ACCEPT);
-       }
-      break;
-    default:
-      assert(0);
-      break;
-    }
-
-  displayCursor();
-
-}
-
-void
-LPushLexer::drop(bool alt)
-{
-  std::string restore = "";
-
-  switch (state)
-    {
-    case ACCEPT:
-      {
-        restore = parser.drop(alt);
-        long bs_pos = restore.find('\\');
-        if ((restore.length() > 0) && (bs_pos != std::string::npos))
-          {
-           // in this case we have to control the blackslash's position
-           if (bs_pos == 0)
-             {
-               //logger.debug(restore);
-               buffer = std::string(restore, 1, restore.length() - 1);
-               state = (buffer.length() > 0) ? MACRO : ESCAPE;
-             }
-           else
-             {
-               assert(bs_pos == restore.length() - 1);
-               buffer = std::string(restore, 0, bs_pos);
-               state = ESCAPED_CHARACTER;
-             }
-         }
-        else if (restore.length() > 0 && isdigit(restore[0]))
-          {
-           buffer = restore;
-           state = NUMBER;
-         }
-        else if (restore.length() > 0 && isalpha(restore[0]))
-          {
-           buffer = restore;
-           state = IDENTIFIER;
-         }
-      }
-      break;
-/*      if (restore.length() > 0 && restore[0] == '\\')
-       {
-         logger.debug(restore);
-         buffer = std::string(restore, 1, restore.length() - 1);
-         state = (buffer.length() > 0) ? MACRO : ESCAPE;
-       }
-      else if (restore.length() > 0 && isdigit(restore[0]))
-        {
-         buffer = restore;
-         state = NUMBER;
-       }
-      else if (restore.length() > 0 && isalpha(restore[0]))
-        {
-         buffer = restore;
-         state = IDENTIFIER;
-       }
-      break;*/
-    case ESCAPED_CHARACTER:
-      state = IDENTIFIER;
-      break;
-    case ESCAPE:
-      state = ACCEPT;
-      break;
-    case MACRO:
-      if (alt) buffer.erase();
-      else buffer.erase(buffer.length() - 1, 1);
-      if (buffer.length() == 0) state = ESCAPE;
-      break;
-    case IDENTIFIER:
-      switch (buffer[buffer.length() - 1])
-       {
-       case '-':
-       case '_':
-         buffer.erase(buffer.length() - 1, 1);
-         if (alt) state = ESCAPED_CHARACTER;
-         break;
-       default:
-          if (alt) buffer.erase(); 
-          else buffer.erase(buffer.length() - 1, 1);
-          if (buffer.length() == 0) state = ACCEPT;
-          break;
-       }
-      break;
-    case NUMBER:
-      if (alt) buffer.erase();
-      else buffer.erase(buffer.length() - 1, 1);
-      if (buffer.length() == 0) state = ACCEPT;
-      break;
-    case PARAMETER:
-    default:
-      //assert(0);
-      error();
-      break;
-    }
-
-  displayCursor();
-
-}
-
-void
-LPushLexer::displayCursor()
-{
-  switch (state)
-    {
-    case ESCAPE: parser.setCursorHint("\\"); break;
-    case ESCAPED_CHARACTER: parser.setCursorHint(buffer + "\\"); break;
-    case MACRO: parser.setCursorHint("\\" + buffer); break;
-    case PARAMETER: parser.setCursorHint("#"); break;
-    case IDENTIFIER: parser.setCursorHint(buffer); break;
-    case NUMBER: parser.setCursorHint(buffer); break;
-    default: parser.setCursorHint(""); break;
-    }
-}
-
-bool
-LPushLexer::error() const
-{
-  return false;
-}
diff --git a/helm/DEVEL/mathml_editor/src/LPushLexer.hh b/helm/DEVEL/mathml_editor/src/LPushLexer.hh
deleted file mode 100644 (file)
index a9f95e2..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __LPushLexer_hh__
-#define __LPushLexer_hh__
-
-#include <string>
-
-#include "APushLexer.hh"
-
-class LPushLexer : public APushLexer
-{
-public:
-  LPushLexer(class ALogger&, class APushParser&);
-  virtual ~LPushLexer() { };
-
-  virtual void push(char);
-  virtual void drop(bool);
-  virtual bool complete(void) {};
-  virtual void reset(void);
-  virtual void flush(void);
-  virtual bool error(void) const;
-
-protected:
-  enum State
-    {
-      ACCEPT,
-      ESCAPE,
-      MACRO,
-      PARAMETER,
-      IDENTIFIER,
-      ESCAPED_CHARACTER,
-      NUMBER
-    };
-
-  void transaction(char, State);
-  void displayCursor(void);
-
-  State state;
-  std::string buffer;
-};
-
-#endif // __LPushLexer_hh__
diff --git a/helm/DEVEL/mathml_editor/src/Makefile.am b/helm/DEVEL/mathml_editor/src/Makefile.am
deleted file mode 100644 (file)
index fd3ef54..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-
-lib_LTLIBRARIES = libeditex.la
-
-libeditex_la_LDFLAGS = -version-info @EDITEX_VERSION_INFO@
-
-libeditex_la_LIBADD = \
-  $(GMETADOM_LIBS) \
-  $(GDOMEXSLT_LIBS) \
-  -lstdc++
-
-libeditex_la_SOURCES = \
-  Diff.cc \
-  CLoggerConsole.cc \
-  ITPushLexer.cc \
-  ILPushLexer.cc \
-  TPushLexer.cc \
-  LPushLexer.cc \
-  APushParser.cc \
-  TPushParser.cc \
-  AMathMLFactory.cc \
-  CMathMLFactoryXSLT.cc \
-  CMathMLFactoryXSLTDiff.cc \
-  TDictionary.cc \
-  TDocument.cc \
-  TNode.cc \
-  TTokenizer.cc
-
-pkginclude_HEADERS = \
-  Diff.hh \
-  ALogger.hh \
-  CLoggerConsole.hh \
-  APushLexer.hh \
-  APushParser.hh \
-  AMathMLFactory.hh \
-  AMathMLConsumer.hh \
-  CMathMLFactoryXSLT.hh \
-  CMathMLFactoryXSLTDiff.hh \
-  TPushLexer.hh \
-  LPushLexer.hh \
-  ITPushLexer.hh \
-  ILPushLexer.hh \
-  TPushParser.hh \
-  TTokenizer.hh \
-  TDictionary.hh \
-  TDocument.hh \
-  TNode.hh \
-  TListener.hh \
-  TToken.hh \
-  globals.hh \
-  dom.hh
-
-INCLUDES = \
-  $(GMETADOM_CFLAGS) \
-  $(GDOMEXSLT_CFLAGS)
-
diff --git a/helm/DEVEL/mathml_editor/src/Makefile.in b/helm/DEVEL/mathml_editor/src/Makefile.in
deleted file mode 100644 (file)
index 0863b01..0000000
+++ /dev/null
@@ -1,431 +0,0 @@
-# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
-
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-SHELL = @SHELL@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-host_alias = @host_alias@
-host_triplet = @host@
-AS = @AS@
-CC = @CC@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-DLLTOOL = @DLLTOOL@
-ECHO = @ECHO@
-EDITEX_VERSION_INFO = @EDITEX_VERSION_INFO@
-EXEEXT = @EXEEXT@
-GDOMEXSLT_CFLAGS = @GDOMEXSLT_CFLAGS@
-GDOMEXSLT_LIBS = @GDOMEXSLT_LIBS@
-GMETADOM_CFLAGS = @GMETADOM_CFLAGS@
-GMETADOM_LIBS = @GMETADOM_LIBS@
-GTKMATHVIEW_CFLAGS = @GTKMATHVIEW_CFLAGS@
-GTKMATHVIEW_LIBS = @GTKMATHVIEW_LIBS@
-HAVE_OCAMLC = @HAVE_OCAMLC@
-HAVE_OCAMLDEP = @HAVE_OCAMLDEP@
-HAVE_OCAMLFIND = @HAVE_OCAMLFIND@
-HAVE_OCAMLMKLIB = @HAVE_OCAMLMKLIB@
-HAVE_OCAMLOPT = @HAVE_OCAMLOPT@
-LDFLAGS = @LDFLAGS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
-MLGDOME_CFLAGS = @MLGDOME_CFLAGS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OCAMLC = @OCAMLC@
-OCAMLDEP = @OCAMLDEP@
-OCAMLFIND = @OCAMLFIND@
-OCAMLMKLIB = @OCAMLMKLIB@
-OCAMLOPT = @OCAMLOPT@
-OCAMLSTDLIBDIR = @OCAMLSTDLIBDIR@
-OCAMLSTUBDIR = @OCAMLSTUBDIR@
-OCAML_INCLUDE_DIR = @OCAML_INCLUDE_DIR@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-STRIP = @STRIP@
-VERSION = @VERSION@
-
-lib_LTLIBRARIES = libeditex.la
-
-libeditex_la_LDFLAGS = -version-info @EDITEX_VERSION_INFO@
-
-libeditex_la_LDADDS =    $(GMETADOM_LIBS)   $(GDOMEXSLT_LIBS)
-
-
-libeditex_la_SOURCES =    Diff.cc   CLoggerConsole.cc   ITPushLexer.cc   ILPushLexer.cc   TPushLexer.cc   LPushLexer.cc   APushParser.cc   TPushParser.cc   CMathMLFactoryXSLT.cc   CMathMLFactoryXSLTDiff.cc   TDictionary.cc   TDocument.cc   TNode.cc   TTokenizer.cc
-
-
-pkginclude_HEADERS =    Diff.hh   ALogger.hh   CLoggerConsole.hh   APushLexer.hh   APushParser.hh   AMathMLFactory.hh   AMathMLConsumer.hh   CMathMLFactoryXSLT.hh   CMathMLFactoryXSLTDiff.hh   TPushLexer.hh   LPushLexer.hh   ITPushLexer.hh   ILPushLexer.hh   TPushParser.hh   TTokenizer.hh   TDictionary.hh   TDocument.hh   TNode.hh   TListener.hh   TToken.hh   globals.hh   dom.hh
-
-
-INCLUDES =    $(GMETADOM_CFLAGS)   $(GDOMEXSLT_CFLAGS)
-
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES = 
-LTLIBRARIES =  $(lib_LTLIBRARIES)
-
-
-DEFS = @DEFS@ -I. -I$(srcdir) -I..
-LIBS = @LIBS@
-libeditex_la_LIBADD = 
-libeditex_la_OBJECTS =  Diff.lo CLoggerConsole.lo ITPushLexer.lo \
-ILPushLexer.lo TPushLexer.lo LPushLexer.lo APushParser.lo \
-TPushParser.lo CMathMLFactoryXSLT.lo CMathMLFactoryXSLTDiff.lo \
-TDictionary.lo TDocument.lo TNode.lo TTokenizer.lo
-CXXFLAGS = @CXXFLAGS@
-CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
-HEADERS =  $(pkginclude_HEADERS)
-
-DIST_COMMON =  Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP_ENV = --best
-DEP_FILES =  .deps/APushParser.P .deps/CLoggerConsole.P \
-.deps/CMathMLFactoryXSLT.P .deps/CMathMLFactoryXSLTDiff.P .deps/Diff.P \
-.deps/ILPushLexer.P .deps/ITPushLexer.P .deps/LPushLexer.P \
-.deps/TDictionary.P .deps/TDocument.P .deps/TNode.P .deps/TPushLexer.P \
-.deps/TPushParser.P .deps/TTokenizer.P
-SOURCES = $(libeditex_la_SOURCES)
-OBJECTS = $(libeditex_la_OBJECTS)
-
-all: all-redirect
-.SUFFIXES:
-.SUFFIXES: .S .c .cc .lo .o .obj .s
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 
-       cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile
-
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
-       cd $(top_builddir) \
-         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-mostlyclean-libLTLIBRARIES:
-
-clean-libLTLIBRARIES:
-       -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-
-distclean-libLTLIBRARIES:
-
-maintainer-clean-libLTLIBRARIES:
-
-install-libLTLIBRARIES: $(lib_LTLIBRARIES)
-       @$(NORMAL_INSTALL)
-       $(mkinstalldirs) $(DESTDIR)$(libdir)
-       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-         if test -f $$p; then \
-           echo "$(LIBTOOL)  --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \
-           $(LIBTOOL)  --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \
-         else :; fi; \
-       done
-
-uninstall-libLTLIBRARIES:
-       @$(NORMAL_UNINSTALL)
-       list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-         $(LIBTOOL)  --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \
-       done
-
-# FIXME: We should only use cygpath when building on Windows,
-# and only if it is available.
-.c.obj:
-       $(COMPILE) -c `cygpath -w $<`
-
-.s.o:
-       $(COMPILE) -c $<
-
-.S.o:
-       $(COMPILE) -c $<
-
-mostlyclean-compile:
-       -rm -f *.o core *.core
-       -rm -f *.$(OBJEXT)
-
-clean-compile:
-
-distclean-compile:
-       -rm -f *.tab.c
-
-maintainer-clean-compile:
-
-.s.lo:
-       $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-.S.lo:
-       $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-mostlyclean-libtool:
-       -rm -f *.lo
-
-clean-libtool:
-       -rm -rf .libs _libs
-
-distclean-libtool:
-
-maintainer-clean-libtool:
-
-libeditex.la: $(libeditex_la_OBJECTS) $(libeditex_la_DEPENDENCIES)
-       $(CXXLINK) -rpath $(libdir) $(libeditex_la_LDFLAGS) $(libeditex_la_OBJECTS) $(libeditex_la_LIBADD) $(LIBS)
-.cc.o:
-       $(CXXCOMPILE) -c $<
-.cc.obj:
-       $(CXXCOMPILE) -c `cygpath -w $<`
-.cc.lo:
-       $(LTCXXCOMPILE) -c $<
-
-install-pkgincludeHEADERS: $(pkginclude_HEADERS)
-       @$(NORMAL_INSTALL)
-       $(mkinstalldirs) $(DESTDIR)$(pkgincludedir)
-       @list='$(pkginclude_HEADERS)'; for p in $$list; do \
-         if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
-         echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p"; \
-         $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p; \
-       done
-
-uninstall-pkgincludeHEADERS:
-       @$(NORMAL_UNINSTALL)
-       list='$(pkginclude_HEADERS)'; for p in $$list; do \
-         rm -f $(DESTDIR)$(pkgincludedir)/$$p; \
-       done
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP)
-       list='$(SOURCES) $(HEADERS)'; \
-       unique=`for i in $$list; do echo $$i; done | \
-         awk '    { files[$$0] = 1; } \
-              END { for (i in files) print i; }'`; \
-       here=`pwd` && cd $(srcdir) \
-         && mkid -f$$here/ID $$unique $(LISP)
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
-       tags=; \
-       here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)'; \
-       unique=`for i in $$list; do echo $$i; done | \
-         awk '    { files[$$0] = 1; } \
-              END { for (i in files) print i; }'`; \
-       test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
-         || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
-
-mostlyclean-tags:
-
-clean-tags:
-
-distclean-tags:
-       -rm -f TAGS ID
-
-maintainer-clean-tags:
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = src
-
-distdir: $(DISTFILES)
-       here=`cd $(top_builddir) && pwd`; \
-       top_distdir=`cd $(top_distdir) && pwd`; \
-       distdir=`cd $(distdir) && pwd`; \
-       cd $(top_srcdir) \
-         && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/Makefile
-       @for file in $(DISTFILES); do \
-         d=$(srcdir); \
-         if test -d $$d/$$file; then \
-           cp -pr $$d/$$file $(distdir)/$$file; \
-         else \
-           test -f $(distdir)/$$file \
-           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
-           || cp -p $$d/$$file $(distdir)/$$file || :; \
-         fi; \
-       done
-
-DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-
--include $(DEP_FILES)
-
-mostlyclean-depend:
-
-clean-depend:
-
-distclean-depend:
-       -rm -rf .deps
-
-maintainer-clean-depend:
-
-%.o: %.c
-       @echo '$(COMPILE) -c $<'; \
-       $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
-       @-cp .deps/$(*F).pp .deps/$(*F).P; \
-       tr ' ' '\012' < .deps/$(*F).pp \
-         | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
-           >> .deps/$(*F).P; \
-       rm .deps/$(*F).pp
-
-%.lo: %.c
-       @echo '$(LTCOMPILE) -c $<'; \
-       $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
-       @-sed -e 's/^\([^:]*\)\.o[      ]*:/\1.lo \1.o :/' \
-         < .deps/$(*F).pp > .deps/$(*F).P; \
-       tr ' ' '\012' < .deps/$(*F).pp \
-         | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
-           >> .deps/$(*F).P; \
-       rm -f .deps/$(*F).pp
-
-%.o: %.cc
-       @echo '$(CXXCOMPILE) -c $<'; \
-       $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
-       @-cp .deps/$(*F).pp .deps/$(*F).P; \
-       tr ' ' '\012' < .deps/$(*F).pp \
-         | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
-           >> .deps/$(*F).P; \
-       rm .deps/$(*F).pp
-
-%.lo: %.cc
-       @echo '$(LTCXXCOMPILE) -c $<'; \
-       $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
-       @-sed -e 's/^\([^:]*\)\.o[      ]*:/\1.lo \1.o :/' \
-         < .deps/$(*F).pp > .deps/$(*F).P; \
-       tr ' ' '\012' < .deps/$(*F).pp \
-         | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
-           >> .deps/$(*F).P; \
-       rm -f .deps/$(*F).pp
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
-check-am: all-am
-check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-exec-am: install-libLTLIBRARIES
-install-exec: install-exec-am
-
-install-data-am: install-pkgincludeHEADERS
-install-data: install-data-am
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
-uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS
-uninstall: uninstall-am
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
-all-redirect: all-am
-install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
-       $(mkinstalldirs)  $(DESTDIR)$(libdir) $(DESTDIR)$(pkgincludedir)
-
-
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-       -rm -f Makefile $(CONFIG_CLEAN_FILES)
-       -rm -f config.cache config.log stamp-h stamp-h[0-9]*
-
-maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-libLTLIBRARIES mostlyclean-compile \
-               mostlyclean-libtool mostlyclean-tags mostlyclean-depend \
-               mostlyclean-generic
-
-mostlyclean: mostlyclean-am
-
-clean-am:  clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \
-               clean-depend clean-generic mostlyclean-am
-
-clean: clean-am
-
-distclean-am:  distclean-libLTLIBRARIES distclean-compile \
-               distclean-libtool distclean-tags distclean-depend \
-               distclean-generic clean-am
-       -rm -f libtool
-
-distclean: distclean-am
-
-maintainer-clean-am:  maintainer-clean-libLTLIBRARIES \
-               maintainer-clean-compile maintainer-clean-libtool \
-               maintainer-clean-tags maintainer-clean-depend \
-               maintainer-clean-generic distclean-am
-       @echo "This command is intended for maintainers to use;"
-       @echo "it deletes files that may require special tools to rebuild."
-
-maintainer-clean: maintainer-clean-am
-
-.PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \
-clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \
-uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \
-distclean-compile clean-compile maintainer-clean-compile \
-mostlyclean-libtool distclean-libtool clean-libtool \
-maintainer-clean-libtool uninstall-pkgincludeHEADERS \
-install-pkgincludeHEADERS tags mostlyclean-tags distclean-tags \
-clean-tags maintainer-clean-tags distdir mostlyclean-depend \
-distclean-depend clean-depend maintainer-clean-depend info-am info \
-dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
-install-exec install-data-am install-data install-am install \
-uninstall-am uninstall all-redirect all-am all installdirs \
-mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/helm/DEVEL/mathml_editor/src/TDictionary.cc b/helm/DEVEL/mathml_editor/src/TDictionary.cc
deleted file mode 100644 (file)
index 25f6c96..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <sstream>
-#include <cassert>
-
-#include "dom.hh"
-#include "config.dirs"
-#include "TDictionary.hh"
-#include "TTokenizer.hh"
-#include "CLoggerConsole.hh"
-
-static TDictionary::Entry undefinedEntry;
-
-static std::string
-getURIBase(const std::string& uri)
-{
-  std::string::size_type slash = uri.rfind('/');
-  if (slash != std::string::npos) return uri.substr(0, slash + 1);
-  else return "";
-}
-
-static std::string
-getURIName(const std::string& uri)
-{
-  std::string::size_type slash = uri.rfind('/');
-  if (slash != std::string::npos) return uri.substr(slash + 1, uri.size());
-  else return uri;
-}
-
-std::string
-TDictionary::getDefaultDictionaryPath()
-{
-  return PKGDATADIR"/dictionary-tex.xml";
-}
-
-void
-TDictionary::load(const std::string& uri)
-{
-  load(getURIName(uri), getURIBase(uri));
-}
-
-void
-TDictionary::load(const std::string& name, const std::string& base)
-{
-  logger.debug("Dictionary: loading `" + base + name + "'");
-
-  DOM::DOMImplementation di;
-  DOM::Document doc = di.createDocumentFromURI((base + name).c_str());
-  assert(doc);
-  load(doc, base);
-}
-
-void
-TDictionary::load(const DOM::Document& doc, const std::string& base)
-{
-  assert(doc);
-
-  DOM::Element root = doc.get_documentElement();
-  assert(root);
-
-  CLoggerConsole logger;
-  TTokenizer tokenizer(logger);
-
-  for (DOM::Node p = root.get_firstChild(); p; p = p.get_nextSibling())
-    if (p.get_nodeType() == DOM::Node::ELEMENT_NODE && p.get_nodeName() == "include")
-      {
-       DOM::Element el = p;
-       assert(el);
-       if (el.hasAttribute("href"))
-         {
-           // WARNING: this may result into an infinite loop!
-           std::string href = el.getAttribute("href");
-           std::string newBase = getURIBase(href);
-           std::string newName = getURIName(href);
-           if (newBase != "") load(newName, newBase);
-           else load(newName, base);
-         }
-       else
-         logger.warning("Dictionary: include statement with no href attribute (ignored)");
-      }
-    else if (p.get_nodeType() == DOM::Node::ELEMENT_NODE && p.get_nodeName() == "entry")
-      {
-       DOM::Element el = p;
-       assert(el);
-       assert(el.hasAttribute("name"));
-
-       std::string name = el.getAttribute("name");
-       if (entries.find(name) != entries.end())
-         logger.info("Dictionary: `" + name + "' is being redefined");
-
-       Entry entry;
-
-       if (el.hasAttribute("class"))
-         {
-           std::string cls = el.getAttribute("class");
-           if (cls == "o") entry.cls = OPERATOR;
-           else if (cls == "i") entry.cls = IDENTIFIER;
-           else if (cls == "n") entry.cls == NUMBER;
-           else entry.cls = MACRO;
-         }
-       else
-         entry.cls = MACRO;
-
-       if (el.hasAttribute("val"))
-         {
-           entry.value = el.getAttribute("val");
-           if (entry.cls == MACRO)
-             logger.warning("Dictionary: `" + name + "' has a specified value, but is classified as macro");
-         }
-
-       if (el.hasAttribute("pattern"))
-         {
-           if (entry.cls != MACRO)
-             logger.warning("Dictionary: `" + name + "' has a specified pattern, but is not classified as macro");
-
-           std::string pattern = el.getAttribute("pattern");
-           if (pattern == "{}")
-             entry.leftOpen = entry.rightOpen = 1;
-           else if (pattern == "{")
-             entry.leftOpen = 1;
-           else if (pattern == "}")
-             entry.rightOpen = 1;
-           else
-             entry.pattern = tokenizer.tokenize(pattern);
-         }
-
-#if 0
-       if (el.hasAttribute("infix"))
-         {
-           std::istringstream is(el.getAttribute("infix"));
-           unsigned infix;
-           is >> infix;
-           entry.infix = infix;
-           if (!el.hasAttribute("prefix")) entry.prefix = infix;
-           if (!el.hasAttribute("postfix")) entry.postfix = infix;
-         }
-
-       if (el.hasAttribute("prefix"))
-         {
-           std::istringstream is(el.getAttribute("prefix"));
-           unsigned prefix;
-           is >> prefix;
-           entry.prefix = prefix;
-           if (!el.hasAttribute("infix"))
-             {
-               entry.infix = prefix;
-               if (!el.hasAttribute("postfix")) entry.postfix = prefix;
-             }
-         }
-
-       if (el.hasAttribute("postfix"))
-         {
-           std::istringstream is(el.getAttribute("postfix"));
-           unsigned postfix;
-           is >> postfix;
-           entry.postfix = postfix;
-           if (!el.hasAttribute("infix"))
-             {
-               entry.infix = postfix;
-               if (!el.hasAttribute("prefix")) entry.prefix = postfix;
-             }
-         }
-#endif
-
-       if (el.hasAttribute("limits"))
-         {
-           std::istringstream is(el.getAttribute("limits"));
-           unsigned limits;
-           is >> limits;
-           entry.limits = limits;
-         }
-
-       if (el.hasAttribute("embellishment"))
-         {
-           std::istringstream is(el.getAttribute("embellishment"));
-           unsigned embellishment;
-           is >> embellishment;
-           entry.embellishment = embellishment;
-         }
-
-       if (el.hasAttribute("delimiter"))
-         {
-           if (entry.cls != OPERATOR && !entry.embellishment)
-             logger.warning("Dictionary: `" + name + "' delimiter ignored for non-operator");
-
-           std::istringstream is(el.getAttribute("delimiter"));
-           unsigned delimiter;
-           is >> delimiter;
-           entry.delimiter = delimiter;
-         }
-
-       if (el.hasAttribute("table"))
-         {
-           if (entry.cls != MACRO)
-             logger.warning("Dictionary: `" + name + "' table ignored for non-macro");
-
-           std::istringstream is(el.getAttribute("table"));
-           unsigned table;
-           is >> table;
-           entry.table = table;
-         }
-
-       entries[name] = entry;
-      }
-}
-
-const TDictionary::Entry&
-TDictionary::find(const std::string& name) const
-{
-  Dictionary::const_iterator p = entries.find(name);
-  if (p != entries.end()) return (*p).second;
-  else
-    {
-      logger.warning("unknown entry `" + name + "'");
-      return undefinedEntry;
-    }
-}
-
-std::string
-TDictionary::complete(const std::string prefix, std::list<std::string>& complete_list) const
-{
-  bool no_match = true;
-  std::string new_prefix = "";
-  for (Dictionary::const_iterator i = entries.begin(); i != entries.end(); i++)
-    {
-      if ((*i).first.find(prefix) == 0)
-        {
-         complete_list.push_front((*i).first);
-         if (no_match)
-           {
-             // it's the first match
-             no_match = false;
-             new_prefix = (*i).first;
-           }
-         else
-           {
-             // in this case, new_prefix has been set yet.
-             std::string s1 = (*i).first.substr(prefix.length()); // s1 is the high part of the matching string
-             std::string s2 = new_prefix.substr(prefix.length()); // s2 is the high part of new_prefix
-#if 0
-             long j = 0; // it's the number of common characters
-             while (s1[j] == s2[j]) j++;
-#endif
-             std::string::const_iterator i1 = s1.begin();
-             std::string::const_iterator i2 = s2.begin();
-             while (i1 != s1.end() && i2 != s2.end() && *i1 == *i2) i1++, i2++;
-             new_prefix = prefix + s1.substr(0, i1 - s1.begin());
-             //new_prefix = (j) ? prefix + s1.substr(0, i1 - s1.begin()) : prefix;
-           }
-       }
-    }
-
-  return new_prefix;
-}
-
-bool
-TDictionary::Entry::paramDelimited(unsigned i) const
-{
-  assert(i < pattern.size());
-  assert(pattern[i].category == TToken::PARAMETER);
-  // a parameter is delimited if it is NOT the last one
-  // AND the next argument is not a parameter
-  return i + 1 < pattern.size() && pattern[i + 1].category != TToken::PARAMETER;
-}
-
-bool
-TDictionary::Entry::lastDelimiter(unsigned i) const
-{
-  assert(i < pattern.size());
-  assert(pattern[i].category != TToken::PARAMETER);
-  // a token is the last delimiter if it is the last token 
-  // of the pattern or if the next token is a parameter)
-  return i + 1 == pattern.size() || pattern[i + 1].category == TToken::PARAMETER;
-}
-
-unsigned
-TDictionary::Entry::previousParam(unsigned i) const
-{
-  // this method return the position in the pattern of the 
-  // parameter placed in a position preceding i.
-  // If no preceding i parameter present, the method return
-  // pattern.size().
-  // To know the position of the last parameter, call this 
-  // method with i == pattern.size()
-  unsigned j = i - 1;
-
-  while (pattern[j].category != TToken::PARAMETER)
-    {
-      if (j) j--;
-      else return pattern.size();
-    }
-  return j;
-}
diff --git a/helm/DEVEL/mathml_editor/src/TDictionary.hh b/helm/DEVEL/mathml_editor/src/TDictionary.hh
deleted file mode 100644 (file)
index 4864630..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __TDictionary_hh__
-#define __TDictionary_hh__
-
-#include <config.h>
-
-#include <string>
-#include <vector>
-#if defined(HAVE_EXT_HASH_MAP)
-#include <ext/hash_map>
-#elif defined(HAVE_HASH_MAP)
-#include <hash_map>
-#else
-#error "no hash_map could be found"
-#endif
-#include <list>
-
-#include "dom.hh"
-#include "TToken.hh"
-
-class TDictionary
-{
-public:
-  TDictionary(class ALogger& l) : logger(l) { };
-  ~TDictionary() { };
-
-  enum Form
-    {
-      INFIX,
-      PREFIX,
-      POSTFIX
-    };
-
-  enum EntryClass
-    {
-      UNDEFINED,
-      MACRO,
-      OPERATOR,
-      IDENTIFIER,
-      NUMBER
-    };
-
-  struct Entry
-  {
-    Entry(void)
-    { 
-      cls = UNDEFINED;
-      table = delimiter = limits = embellishment = leftOpen = rightOpen = 0;
-    };
-
-    std::vector<TToken> pattern;
-    std::string value;
-
-    bool defined(void) const { return cls != UNDEFINED; };
-    bool hasArguments(void) const { return !pattern.empty(); };
-    bool paramDelimited(unsigned) const;
-    bool lastDelimiter(unsigned) const;
-    unsigned previousParam(unsigned) const;
-
-    EntryClass cls;
-    unsigned delimiter : 1;
-    unsigned limits : 1;
-    unsigned embellishment : 1;
-    unsigned leftOpen : 1;
-    unsigned rightOpen : 1;
-    unsigned table : 1;
-  };
-
-  static std::string getDefaultDictionaryPath(void);
-
-  void load(const std::string&);
-  void load(const std::string&, const std::string&);
-  void load(const DOM::Document&, const std::string& = "");
-  const Entry& find(const std::string&) const;
-  std::string complete(const std::string, std::list<std::string>&) const;
-
-private:
-#if defined(HAVE_EXT_HASH_MAP)
-  struct StringHash : public std::unary_function< std::string, size_t >
-  { size_t operator()(const std::string& s) const { return __gnu_cxx::hash<char*>()(s.c_str()); } };
-#elif defined(HAVE_HASH_MAP)
-  struct StringHash : public std::unary_function< std::string, size_t >
-  { size_t operator()(const std::string& s) const { return hash<char*>()(s.c_str()); } };
-#else
-#error "no hash_map could be found"
-#endif
-
-#if 0
-  struct StringEq : public std::binary_function< std::string, std::string, bool >
-  { bool operator()(const std::string&, const class String*) const; };
-#endif
-
-  class ALogger& logger;
-#if defined(HAVE_EXT_HASH_MAP)
-  typedef __gnu_cxx::hash_map< std::string, Entry, StringHash > Dictionary;
-#elif defined(HAVE_HASH_MAP)
-  typedef std::hash_map< std::string, Entry, StringHash > Dictionary;
-#else
-#error "no hash_map could be found"
-#endif
-  Dictionary entries;
-};
-
-#endif // __TDictionary_hh__
-
diff --git a/helm/DEVEL/mathml_editor/src/TDocument.cc b/helm/DEVEL/mathml_editor/src/TDocument.cc
deleted file mode 100644 (file)
index ca4878e..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <sstream>
-#include <cassert>
-
-#include "globals.hh"
-#include "dom.hh"
-#include "TDocument.hh"
-
-TDocument::TDocument()
-{
-  DOM::DOMImplementation di;
-  DOM::DocumentType dt;
-  doc = di.createDocument(TML_NS_URI, "tml:tex", dt);
-  DOM::Element root = doc.get_documentElement();
-  assert(root);
-  root.setAttributeNS(XMLNS_NS_URI, "xmlns:tml", TML_NS_URI);
-
-  DOM::EventTarget et(doc);
-  assert(et);
-  et.addEventListener("DOMSubtreeModified", *this, false);
-}
-
-TDocument::~TDocument()
-{
-  //DOM::Element root = doc.get_documentElement();
-  DOM::EventTarget et(doc);
-  assert(doc);
-  et.removeEventListener("DOMSubtreeModified", *this, false);
-}
-
-void
-TDocument::reset()
-{
-  DOM::Element root = doc.createElementNS(TML_NS_URI, "tml:tex");
-  root.setAttributeNS(XMLNS_NS_URI, "xmlns:tml", TML_NS_URI);
-  doc.replaceChild(root, doc.get_documentElement());
-  clearDirty();
-}
-
-void
-TDocument::serialize(const char* filename) const
-{
-  DOM::DOMImplementation di;
-  di.saveDocumentToFile(doc, filename, GDOME_SAVE_LIBXML_INDENT);
-}
-
-std::string
-TDocument::makeId(unsigned id)
-{
-  std::ostringstream os;
-  os << "I" << id;
-  return os.str();
-}
-
-TNode
-TDocument::create(const std::string& name, unsigned id) const
-{
-  DOM::Element elem = doc.createElementNS(TML_NS_URI, "tml:" + name);
-  if (id > 0) elem.setAttribute("id", makeId(id));
-  return elem;
-}
-
-TNode
-TDocument::createC(const std::string& name, unsigned id) const
-{
-  TNode m = create("c", id);
-  m["name"] = name;
-  return m;
-}
-
-TNode
-TDocument::createT(const std::string& name, const std::string& text, unsigned id) const
-{
-  TNode t = create(name, id);
-  t["val"] = text;
-  return t;
-}
-
-unsigned
-TDocument::nodeDepth(const DOM::Node& node)
-{
-  DOM::Node n = node;
-
-  unsigned depth = 0;
-  while (n)
-    {
-      depth++;
-      n = n.get_parentNode();
-    }
-  return depth;
-}
-
-DOM::Node
-TDocument::findCommonAncestor(const DOM::Node& node1, const DOM::Node& node2)
-{
-  DOM::Node n1 = node1;
-  DOM::Node n2 = node2;
-
-  unsigned d1 = nodeDepth(n1);
-  unsigned d2 = nodeDepth(n2);
-
-  // cout << "finding common ancestor " << d1 << " " << d2 << endl;
-
-  while (d1 < d2)
-    {
-      assert(n2);
-      n2 = n2.get_parentNode();
-      d2--;
-    }
-
-  while (d1 > d2)
-    {
-      assert(n1);
-      n1 = n1.get_parentNode();
-      d1--;
-    }
-
-  while (n1 != n2)
-    {
-      assert(n1);
-      assert(n2);
-      n1 = n1.get_parentNode();
-      n2 = n2.get_parentNode();
-    }
-
-  return n1;
-}
-
-DOM::Node
-TDocument::findIdNode(const DOM::Node& node)
-{
-  DOM::Node n = node;
-  while (n)
-    {
-      if (n.get_nodeType() == DOM::Node::ELEMENT_NODE)
-       {
-         DOM::Element el = n;
-         if (el.hasAttribute("id")) return el;
-       }
-      n = n.get_parentNode();
-    }
-
-  return DOM::Node(0);
-}
-
-TNode
-TDocument::getNodeByIdAux(const TNode& node, const std::string& id)
-{
-  if (node.hasId(id)) return node;
-  else
-    for (TNode p = node.first(); p; p = p.next())
-      if (TNode res = getNodeByIdAux(p, id)) return res;
-  return TNode();
-}
-
-TNode
-TDocument::getNodeById(unsigned id) const
-{
-  DOM::Element root = doc.get_documentElement();
-  assert(root);
-  return getNodeByIdAux(root, makeId(id));
-}
-
-void
-TDocument::handleEvent(const DOM::Event& ev)
-{
-  DOM::MutationEvent me(ev);
-  assert(me);
-
-#if 0
-  if (dirty)
-    cout << "TDocument::handleEvent DIRTY BEFORE = " << dirty.getAttribute("id") << endl;
-  else
-    cout << "TDocument::handleEvent DIRTY BEFORE = (nil)" << endl;
-#endif
-
-  if (DOM::Node node = me.get_target())
-    if (dirty)
-      dirty = findIdNode(findCommonAncestor(dirty, node));
-    else
-      dirty = findIdNode(node);
-  else
-    assert(0);
-
-#if 0
-  cout << "TDocument::handleEvent target = " << DOM::Node(me.get_target()).get_nodeName() << " DIRTY AFTER = "
-       << dirty.getAttribute("id") << " ME = " << DOM::Node(me.get_target()).get_nodeName() << endl;
-#endif
-}
diff --git a/helm/DEVEL/mathml_editor/src/TDocument.hh b/helm/DEVEL/mathml_editor/src/TDocument.hh
deleted file mode 100644 (file)
index 02d1dc3..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __TDocument_hh__
-#define __TDocument_hh__
-
-#include "dom.hh"
-#include "TNode.hh"
-
-class TDocument : private DOM::EventListener
-{
-public:
-  TDocument(void);
-  ~TDocument();
-
-  void  reset(void);
-  TNode create(const std::string&, unsigned = 0) const;
-  TNode createG(unsigned id = 0) const { return create("g", id); };
-  TNode createC(const std::string&, unsigned = 0) const;
-  TNode createT(const std::string&, const std::string&, unsigned = 0) const;
-  TNode createI(const std::string& text, unsigned id = 0) const { return createT("i", text, id); };
-  TNode createN(const std::string& text, unsigned id = 0) const { return createT("n", text, id); };
-  TNode createO(const std::string& text, unsigned id = 0) const { return createT("o", text, id); };
-  TNode createS(unsigned id = 0) const { return createT("s", "", id); };
-
-  DOM::Document document(void) const { return doc; };
-
-  TNode getNodeById(unsigned) const;
-  TNode root(void) { return doc.get_documentElement(); };
-  TNode dirtyNode(void) const { return dirty; };
-  void  clearDirty(void) { dirty = DOM::Element(0); };
-
-  void  serialize(const char*) const;
-
-private:
-  DOM::Document doc;
-  DOM::Element dirty;
-
-  virtual void handleEvent(const DOM::Event&);
-  static std::string makeId(unsigned);
-  static TNode getNodeByIdAux(const TNode&, const std::string&);
-  static unsigned nodeDepth(const DOM::Node&);
-  static DOM::Node findCommonAncestor(const DOM::Node&, const DOM::Node&);
-  static DOM::Node findIdNode(const DOM::Node&);
-};
-
-#endif // __TDocument_hh__
diff --git a/helm/DEVEL/mathml_editor/src/TListener.hh b/helm/DEVEL/mathml_editor/src/TListener.hh
deleted file mode 100644 (file)
index 16fea6d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __TListener_hh__
-#define __TListener_hh__
-
-class TListener
-{
-public:
-  virtual void callback(TDocument&) = 0;
-};
-
-#endif // __TListener_hh__
diff --git a/helm/DEVEL/mathml_editor/src/TNode.cc b/helm/DEVEL/mathml_editor/src/TNode.cc
deleted file mode 100644 (file)
index 3c67d9d..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include "globals.hh"
-#include "TNode.hh"
-#include <cassert>
-
-TNode
-TNode::next() const
-{
-  assert(node);
-  DOM::Node p = node.get_nextSibling();
-  while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_nextSibling();
-  return p;
-}
-
-TNode
-TNode::nextL() const
-{
-  assert(node);
-  if (TNode n = next())
-    if (n.isG()) return n.firstL();
-    else return n;
-  else return TNode();
-}
-
-TNode
-TNode::prev() const
-{
-  assert(node);
-  DOM::Node p = node.get_previousSibling();
-  while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_previousSibling();
-  return p;
-}
-
-TNode
-TNode::prevL() const
-{
-  assert(node);
-  if (TNode n = prev())
-    if (n.isG()) return n.lastL();
-    else return n;
-  else return TNode();
-}
-
-TNode
-TNode::last() const
-{
-  assert(node);
-  DOM::Node p = node.get_lastChild();
-  while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_previousSibling();
-  return p;
-}
-
-TNode
-TNode::lastL() const
-{
-  assert(node);
-  if (TNode n = last())
-    if (n.isG()) return n.lastL();
-    else return n;
-  else
-    return TNode();
-}
-
-TNode
-TNode::first() const
-{
-  assert(node);
-  DOM::Node p = node.get_firstChild();
-  while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_nextSibling();
-  return p;
-}
-
-TNode
-TNode::firstL() const
-{
-  assert(node);
-  if (TNode n = first())
-    if (n.isG()) return n.firstL();
-    else return n;
-  else
-    return TNode();
-}
-
-TNode
-TNode::core() const
-{
-  assert(node);
-  // check also if there is a macro embellishment (\not)
-  if (isSb() || isSp()) return first().core();
-  else return *this;
-}
-
-TNode
-TNode::parent() const
-{
-  assert(node);
-  DOM::Node p = node.get_parentNode();
-  assert(!p || p.get_nodeType() == DOM::Node::ELEMENT_NODE);
-  return p;
-}
-
-unsigned
-TNode::size() const
-{
-  assert(node);
-  unsigned size = 0;
-  TNode p = first();
-  while (p)
-    {
-      p = p.next();
-      size++;
-    }
-
-  return size;
-}
-
-void
-TNode::remove() const
-{
-  assert(node);
-  DOM::Node parent = node.get_parentNode();
-  parent.removeChild(node);
-}
-
-void
-TNode::replace(const TNode& newNode) const
-{
-  assert(node);
-  DOM::Node parent = node.get_parentNode();
-  parent.replaceChild(newNode.node, node);
-}
-
-void
-TNode::replace(const TNode& first, const TNode& last) const
-{
-  assert(node);
-  assert(first);
-
-  TNode p = first;
-  while (p != last)
-    {
-      TNode next = p.next();
-      insert(p);
-      p = next;
-    }
-  remove();
-}
-
-void
-TNode::insert(const TNode& newNode) const
-{
-  assert(node);
-  DOM::Node parent = node.get_parentNode();
-  parent.insertBefore(newNode.node, node);
-}
-
-void
-TNode::append(const TNode& newNode) const
-{
-  assert(node);
-  node.appendChild(newNode.node);
-}
-
-void
-TNode::append(const TNode& first, const TNode& last) const
-{
-  assert(node);
-  assert(first);
-  assert(last);
-
-  TNode p = first;
-  while (p != last)
-    {
-      TNode next = p.next();
-      append(p);
-      p = next;
-    }
-}
-
-void
-TNode::prepend(const TNode& newNode) const
-{
-  assert(node);
-  DOM::Node parent = node.get_parentNode();
-  parent.insertBefore(newNode.node, parent.get_firstChild());
-}
-
-#if 0
-#endif
-
-TNode
-TNode::child(unsigned pos) const
-{
-  assert(node);
-  TNode p = first();
-  while (p && pos-- > 0) p = p.next();
-  return p;
-}
-
-std::string
-TNode::get(const std::string& name) const
-{
-  assert(node);
-  return node.getAttribute(name);
-}
-
-void
-TNode::set(const std::string& name, const std::string& value) const
-{
-  assert(node);
-  node.setAttribute(name, value);
-}
diff --git a/helm/DEVEL/mathml_editor/src/TNode.hh b/helm/DEVEL/mathml_editor/src/TNode.hh
deleted file mode 100644 (file)
index adbfe69..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __TNode_hh__
-#define __TNode_hh__
-
-#include "dom.hh"
-#include "globals.hh"
-#include "TDictionary.hh"
-
-class TNode
-{
-public:
-  TNode(void) : node(0) { };
-  TNode(const DOM::Node& n) : node(n) { };
-  TNode(const DOM::Element& elem) : node(elem) { };
-  TNode(const TNode& n) : node(n.node) { };
-
-  TNode next(void) const;
-  TNode nextL(void) const;
-  TNode prev(void) const;
-  TNode prevL(void) const;
-  TNode core(void) const;
-  TNode parent(void) const;
-  TNode first(void) const;
-  TNode firstL(void) const;
-  TNode last(void) const;
-  TNode lastL(void) const;
-  TNode child(unsigned) const;
-  unsigned size(void) const;
-  bool  empty(void) const { return !first().node; };
-  std::string value(void) const { return (*this)["val"]; };
-
-  class ProxyAttr
-  {
-  public:
-    ProxyAttr(const DOM::Element& n, const std::string& s) : node(n), name(s) { };
-    operator std::string() const { return node.getAttribute(name); };
-    ProxyAttr& operator=(const std::string& v) { node.setAttribute(name, v); };
-    bool       operator==(const std::string& v) const { return node.getAttribute(name) == v; };
-    bool       operator!=(const std::string& v) const { return node.getAttribute(name) != v; };
-  private:
-    DOM::Element node;
-    std::string  name;
-  };
-
-  operator bool() const { return node; };
-  DOM::Element element(void) const { return node; };
-  bool operator==(const TNode& n) const { return node == n.node; };
-  bool operator!=(const TNode& n) const { return node != n.node; };
-  TNode operator[](int i) const { return child(i); };
-  ProxyAttr operator[](const char* s) const { return ProxyAttr(node, s); };
-
-  //void  advance(const TNode&) const;
-  void  remove(void) const;
-  void  replace(const TNode&) const;
-  void  replace(const TNode&, const TNode&) const;
-  void  insert(const TNode&) const;
-  void  append(const TNode&) const;
-  void  append(const TNode&, const TNode&) const;
-  void  prepend(const TNode&) const;
-
-  std::string get(const std::string&) const;
-  void  set(const std::string&, const std::string&) const;
-
-  std::string name(void) const { return node.get_localName(); };
-  std::string nameC(void) const { return node.getAttribute("name"); };
-  bool  hasId(void) const { return node.hasAttribute("id"); };
-  bool  hasId(const std::string& id) const { return node.getAttribute("id") == id; };
-  bool  is(const std::string& s) const { return name() == s; };
-  bool  isG(void) const { return is("g"); };
-  bool  isSb(void) const { return is("sb"); };
-  bool  isSp(void) const { return is("sp"); };
-  bool  isC(void) const { return is("c"); }
-  bool  isC(const std::string& name) const
-  { return isC() && node.getAttribute("name") == name; };
-  bool  isT(void) const { return (is("o") || is("i") || is("n") || is("s")); };
-
-  friend class TDocument;
-
-private:
-  DOM::Element node;
-};
-
-#endif // __TNode_hh__
diff --git a/helm/DEVEL/mathml_editor/src/TPushLexer.cc b/helm/DEVEL/mathml_editor/src/TPushLexer.cc
deleted file mode 100644 (file)
index da15822..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <string>
-#include <cctype>
-#include <cassert>
-
-#include "TToken.hh"
-#include "TPushLexer.hh"
-#include "APushParser.hh"
-
-TPushLexer::TPushLexer(ALogger& l, APushParser& p) : APushLexer(l, p)
-{
-  state = ACCEPT;
-}
-
-void
-TPushLexer::reset()
-{
-  buffer.erase();
-  state = ACCEPT;
-
-  displayCursor();
-}
-
-void
-TPushLexer::flush()
-{
-  push(-1);
-}
-
-void
-TPushLexer::transaction(char ch, State newState)
-{
-  switch (ch)
-    {
-    case '{': parser.push(TToken(TToken::BEGIN)); break;
-    case '}': parser.push(TToken(TToken::END)); break;
-    case '$': parser.push(TToken(TToken::SHIFT)); break;
-    case '&': parser.push(TToken(TToken::ALIGN)); break;
-    case '\n':
-    case '\r': parser.push(TToken(TToken::EOL, ch)); break;
-    case '^': parser.push(TToken(TToken::SUPERSCRIPT)); break;
-    case '_': parser.push(TToken(TToken::SUBSCRIPT)); break;
-    case '\t':
-    case ' ': parser.push(TToken(TToken::IGNORABLE_SPACE, ch)); break;
-    case '~': parser.push(TToken(TToken::ACTIVE, ch)); break;
-    case '%': parser.push(TToken(TToken::COMMENT)); break;     
-    default:
-      if (isalpha(ch)) parser.push(TToken(TToken::LETTER, ch));
-      else if (isdigit(ch)) parser.push(TToken(TToken::DIGIT, ch));
-      else parser.push(TToken(TToken::OTHER, ch));
-      break;
-    }
-  state = newState;
-}
-
-void
-TPushLexer::push(char ch)
-{
-  switch (state)
-    {
-    case ACCEPT:
-      if (ch == '\\') state = ESCAPE;
-      else if (ch == '#') state = PARAMETER;
-      else if (ch == -1) ;
-      else transaction(ch, ACCEPT);
-      break;
-    case ESCAPE:
-      if (isalpha(ch))
-       {
-         buffer.push_back(ch);
-         state = MACRO;
-       }
-      else if (ch == -1) error();
-      else
-       {
-         parser.push(TToken(TToken::CONTROL, ch));
-         state = ACCEPT;
-       }
-      break;
-    case MACRO:
-      if (ch == '\\')
-       {
-         parser.push(TToken(TToken::CONTROL, buffer));
-         buffer.erase();
-         state = ESCAPE;
-       }
-      else if (ch == '#')
-       {
-         parser.push(TToken(TToken::CONTROL, buffer));
-         buffer.erase();
-         state = PARAMETER;
-       }
-      else if (isalpha(ch))
-       buffer.push_back(ch);
-      else if (ch == -1)
-        {
-         parser.push(TToken(TToken::CONTROL, buffer));
-         buffer.erase();
-         state = ACCEPT;
-       }
-      else
-       {
-         parser.push(TToken(TToken::CONTROL, buffer));
-         buffer.erase();
-         if (isspace(ch)) state = IGNORE_SPACE;
-         else transaction(ch, ACCEPT);
-       }
-      break;
-    case IGNORE_SPACE:
-      if (ch == '\\') state = ESCAPE;
-      else if (ch == '#') state = PARAMETER;
-      else if (isspace(ch)) ;
-      else if (ch == -1) state = ACCEPT;
-      else transaction(ch, ACCEPT);
-      break;
-    case PARAMETER:
-      if (ch == -1) error();
-      else
-        {
-         parser.push(TToken(TToken::PARAMETER, ch));
-         state = ACCEPT;
-       }
-      break;
-    default:
-      assert(0);
-      break;
-    }
-
-  displayCursor();
-
-}
-
-void
-TPushLexer::drop(bool alt)
-{
-  std::string restore = "";
-
-  switch (state)
-    {
-    case ACCEPT:
-    case IGNORE_SPACE:
-      restore = parser.drop(alt);
-      if (restore.length() > 0 && restore[0] == '\\')
-       {
-         buffer = std::string(restore, 1, restore.length() - 1);
-         state = (buffer.length() > 0) ? MACRO : ESCAPE;
-       }
-      break;
-    case ESCAPE:
-      state = ACCEPT;
-      break;
-    case MACRO:
-      if (alt) buffer.erase();
-      else buffer.erase(buffer.length() - 1, 1);
-      if (buffer.length() == 0) state = ESCAPE;
-      break;
-    case PARAMETER:
-    default:
-      assert(0);
-      break;
-    }
-
-  displayCursor();
-
-}
-
-void
-TPushLexer::displayCursor()
-{
-  switch (state)
-    {
-    case ESCAPE: parser.setCursorHint("\\"); break;
-    case MACRO: parser.setCursorHint("\\" + buffer); break;
-    case PARAMETER: parser.setCursorHint("#"); break;
-    default: parser.setCursorHint(""); break;
-    }
-}
-
-bool
-TPushLexer::error() const
-{
-  return false;
-}
diff --git a/helm/DEVEL/mathml_editor/src/TPushLexer.hh b/helm/DEVEL/mathml_editor/src/TPushLexer.hh
deleted file mode 100644 (file)
index 2aafd6e..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __TPushLexer_hh__
-#define __TPushLexer_hh__
-
-#include <string>
-
-#include "APushLexer.hh"
-
-class TPushLexer : public APushLexer
-{
-public:
-  TPushLexer(class ALogger&, class APushParser&);
-  virtual ~TPushLexer() { };
-
-  virtual void push(char);
-  virtual void drop(bool);
-  virtual bool complete(void) { };
-  virtual void reset(void);
-  virtual void flush(void);
-  virtual bool error(void) const;
-
-protected:
-  enum State
-    {
-      ACCEPT,
-      ESCAPE,
-      MACRO,
-      IGNORE_SPACE,
-      PARAMETER
-    };
-
-  void transaction(char, State);
-  void displayCursor(void);
-
-  State state;
-  std::string buffer;
-
-};
-
-#endif // __TPushLexer_hh__
diff --git a/helm/DEVEL/mathml_editor/src/TPushParser.cc b/helm/DEVEL/mathml_editor/src/TPushParser.cc
deleted file mode 100644 (file)
index 0c96fe4..0000000
+++ /dev/null
@@ -1,1952 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <cassert>
-
-#include "ALogger.hh"
-#include "TPushParser.hh"
-#include "AMathMLFactory.hh"
-
-TPushParser::TPushParser(ALogger& l, const TDictionary& d) : APushParser(l), dictionary(d)
-{
-  init();
-}
-
-TPushParser::TPushParser(ALogger& l, AMathMLFactory& f, const TDictionary& d) : APushParser(l, f), dictionary(d)
-{
-  init();
-}
-
-TPushParser::~TPushParser()
-{
-}
-
-void
-TPushParser::init()
-{
-  cursor = doc.create("cursor");
-  cursor["visible"] = "1";
-  hiddenCursor = 0;
-  reset();
-}
-
-void
-TPushParser::reset()
-{
-  nextId = 1;
-  if (cursor.parent()) cursor.remove();
-  cursor["val"] = "";
-  doc.reset();
-  doc.root().append(cursor);
-  if (factory && !frozen()) factory->documentModified(doc);
-}
-
-TNode
-TPushParser::PRIME()
-{
-  const TDictionary::Entry entry = dictionary.find("prime");
-  if (entry.cls == TDictionary::OPERATOR)
-    {
-      TNode op = doc.createO(entry.value, nextId++);
-      op["name"] = "prime";
-      return op;
-    }
-  else
-    {
-      TNode op = doc.createO("?", nextId++);
-      return op;
-    }
-}
-
-bool
-TPushParser::do_begin()
-{
-  TNode parent = cursor.parent();
-  if (parent.isC() && dictionary.find(parent.nameC()).table)
-    {
-      TNode row = doc.create("row");
-      TNode cell = doc.create("cell");
-      TNode g = doc.createG();
-      row.append(cell);
-      cell.append(g);
-      g.append(cursor);
-      parent.append(row);
-    }
-  else
-    {
-      TNode g = doc.createG(nextId++);
-      cursor.replace(g);
-      g.append(cursor);
-    }
-  return true;
-}
-
-bool
-TPushParser::correctBrace()
-{
-  // this method MUST be invoked when the cursor is child of a 
-  // phantom group, which in turn is the last rightOpen MACRO's child.
-  // The only way to exit from a rightOpen MACRO is opening a group before 
-  // inserting the MACRO and, once the MACRO is completely inserted, closing 
-  // the group.
-  // This method return true if the condition above is true. False, otherwise.
-  assert(cursor.parent() && cursor.parent().isG() && !cursor.parent().hasId());
-  TNode parent = cursor.parent();
-  assert(parent.parent() && parent.parent().isC());
-  assert(!frames.empty());
-  Frame& frame = frames.top();
-  assert(frame.entry.rightOpen);
-  assert(parent.parent().last() == parent);
-  
-  TNode c = parent.parent();
-  bool stop = false;
-  bool ok = false;
-  TNode node = c.parent();
-  do
-    {
-      if (node.isG() && node.hasId())
-        {
-         // in this case, the rightOpen MACRO is a child of a group with id. 
-         // So, the '}' is correct
-         ok = true;
-         stop = true;
-       }
-      else if (node.isG())
-        {
-         // the MACRO is a phantom group's child. We have to control why we 
-         // have this phantom group
-         TNode nodeParent = node.parent();
-         if (nodeParent && nodeParent.isC())
-           {
-             // we have to control the nature of this MACRO
-             const TDictionary::Entry& entry = dictionary.find(nodeParent.nameC());
-             if (entry.rightOpen && node == nodeParent.last())
-               {
-                 // in this case we have to re-iterate the process
-                 node = nodeParent.parent();
-               }
-             else stop = true;
-           }
-         else stop = true;
-       }
-      else
-        {
-         // at the moment we assume that a MACRO cannot be child of an element other than a group
-         stop = true;
-       }
-    }
-  while (!stop);
-
-  return ok;
-}
-
-bool
-TPushParser::do_end()
-{
-  TNode parent = cursor.parent();
-  if (parent && parent.isG() && parent.hasId())
-    {
-      // normal closing brace for an explicitly open group
-      cursor.remove();
-      advance(parent);
-      return true;
-    }
-  else if (parent && parent.isG() && parent.parent() && parent.parent().is("cell"))
-    {
-      assert(!frames.empty());
-      // closing brace for a structure in which & or \cr have been used
-      TNode row = parent.parent().parent();
-      assert(row && row.is("row"));
-      assert(row.parent());
-      advance(row);
-      return true;
-    }
-  else if (parent && parent.isG() && !parent.hasId() && parent.parent() && !parent.parent().is("math"))
-    {
-      // In this case, we have to control the cursor's grand parent.
-      TNode gparent = parent.parent();
-
-      if (gparent.isC() && gparent.last() == parent)
-        {
-         // a frame MUST be in the stack
-         assert(!frames.empty());
-
-         // we have to control the nature of this macro
-         if (frames.top().entry.rightOpen)
-           {
-             // in this case, the '}' character is the proper way to exit from the phantom group, and 
-             // in particular, this character means that the user wants to exit from the MACRO.
-             // A rightOpen MACRO MUST be descendant of a group with Id. This '}' is the closing brace of this 
-             // group. So, we have to control if this group exists. This groyp could exist, but this MACRO could 
-             // be another MACRO's child, so we have to control this last MACRO recursively. This recurive control 
-             // is done by the correctBrace method.
-             if (!correctBrace())
-               {
-                 // the '}' is not correct
-                 logger.warning("nothing to close");
-                 return false;
-               }
-             else
-               {
-                 cursor.remove();
-                 advance(parent);
-                 return true;
-               }
-           }
-         else
-           {
-             logger.warning("ignored closing brace");
-             return false;
-           }
-       }
-      else
-        {
-         // at the moment, a phantom group with the cursor inside can be a MACRO's child or a cell's child, and these cases
-         // are handled in other blocks of code.
-         logger.error("do_end: strange TML tree");
-         return false;
-       }
-    }
-  else
-    {
-      // In this case, there is a redundant '}', so we can ignore it and 
-      // emit an error
-      logger.warning("There is so no corresponding'{'");
-      return false;
-      //assert(0);
-    }
-}
-
-bool
-TPushParser::do_shift()
-{
-  TNode parent = cursor.parent();
-  assert(parent);
-  if (parent.is("tex"))
-    {
-      TNode math = doc.create("math", nextId++);
-      TNode g = doc.createG();
-      cursor.replace(math);
-      math.append(g);
-      g.append(cursor);
-      return true;
-    }
-  else if (parent.isG() && !parent.hasId() && parent.parent() && parent.parent().is("math"))
-    {
-      if (cursor.prev())
-       {
-         // there is something before the cursor, hence this is the
-         // closing math shift
-         if (parent.parent()["display"] != "1")
-           {
-             // one math shift is enough to close it
-             cursor.remove();
-             return true;
-           }
-         else
-           {
-             // we need two closing math shifts
-             //cursor.remove(); ??
-             parent.parent().append(cursor);
-             return true; // ???
-           }
-       }
-      else if (parent.parent()["display"] != "1")
-       {
-         // there is nothing before the cursor, and the math is not
-         // in display mode, so this must be a double math shift
-         parent.parent()["display"] = "1";
-         return true;
-       }
-      else
-       {
-         parent.parent().append(cursor);
-         return true;
-       }
-    }
-  else if (parent.is("math"))
-    {
-      cursor.remove();
-      return true;
-    }
-  else
-    {
-      logger.warning("not allowed here");
-      return false;
-    }
-}
-
-bool
-TPushParser::do_align()
-{
-  TNode parent = cursor.parent();
-  if (parent && parent.isG() && parent.hasId())
-    {
-      // alignment tab used for the first time inside a group
-      TNode row = doc.create("row");
-      TNode cell = doc.create("cell");
-      TNode g = doc.createG();
-      row.append(cell);
-      cell.append(g);
-      g.append(parent.first(), cursor);
-      return true;
-    }
-  else if (parent && parent.isG() && parent.parent().is("cell"))
-    {
-      // alignment tab used within a cell
-      TNode oldCell = parent.parent();
-      assert(oldCell && oldCell.is("cell"));
-      TNode row = oldCell.parent();
-      assert(row && row.is("row"));
-      TNode cell = doc.create("cell");
-      if (oldCell.next()) oldCell.next().insert(cell);
-      else row.append(cell);
-      TNode g = doc.createG();
-      cell.append(g);
-      g.append(cursor);
-      return true;
-    }
-  else
-    {
-      logger.warning("alignment tab used outside matrix");
-      return false;
-    }
-}
-
-bool
-TPushParser::do_eol()
-{
-  //if (cursor.parent()) cursor.remove();
-  logger.warning("ignored token");
-  return false;
-}
-
-bool
-TPushParser::do_parameter(const std::string& p)
-{
-  logger.warning("ignored token");
-  return false;
-}
-
-bool
-TPushParser::do_subscript()
-{
-  TNode parent = cursor.parent();
-  if (parent.isG())
-    {
-      TNode prev = cursor.prev();
-      if (!prev)
-       {
-         TNode elem = doc.create("sb", nextId++);
-         TNode g = doc.createG();
-         cursor.replace(elem);
-         elem.append(g);
-         elem.append(cursor);
-         return true;
-       }
-      else
-       {
-         TNode elem = doc.create("sb", nextId++);
-         prev.replace(elem);
-         elem.append(prev);
-         elem.append(cursor);
-         return true;
-       }
-    }
-  else if (parent.isSb() && cursor == parent[1])
-    {
-      if (parent["under"] == "1")
-        {
-         logger.warning("already under");
-         return false;
-       }
-      else
-        {
-         parent["under"] = "1";
-         return true;
-       }
-    }
-  else
-    {
-      logger.warning("ignored token");
-      return false;
-    }
-}
-
-bool
-TPushParser::do_superscript()
-{
-  TNode parent = cursor.parent();
-  if (parent.isG())
-    {
-      TNode prev = cursor.prev();
-      if (!prev)
-       {
-         TNode elem = doc.create("sp", nextId++);
-         TNode g = doc.createG();
-         cursor.replace(elem);
-         elem.append(g);
-         elem.append(cursor);
-         return true;
-       }
-      else
-       {
-         TNode elem = doc.create("sp", nextId++);
-         prev.replace(elem);
-         elem.append(prev);
-         elem.append(cursor);
-         return true;
-       }
-    }
-  else if (parent.isSp() && cursor == parent[1])
-    {
-      if (parent["over"] == "1")
-        {
-         logger.warning("already over");
-         return false;
-       }
-      else
-        {
-         parent["over"] = "1";
-         return true;
-       }
-    }
-  else
-    {
-      logger.warning("ignored token");
-      return false;
-    }
-}
-
-bool
-TPushParser::do_ignorablespace(const std::string& s)
-{
-  // At the moment, do nothing
-}
-
-bool
-TPushParser::do_space(const std::string&)
-{
-  TNode elem = doc.createS(nextId++);
-  cursor.replace(elem);
-  advance(elem);
-  return true;
-}
-
-bool
-TPushParser::do_letter(const std::string& s)
-{
-  //TNode parent = cursor.parent();
-  TNode elem = doc.createI(s, nextId++);
-  cursor.replace(elem);
-  advance(elem);
-  return true;
-}
-
-bool
-TPushParser::do_digit(const std::string& s)
-{
-  TNode elem = doc.createN(s, nextId++);
-  cursor.replace(elem);
-  advance(elem);
-  return true;
-}
-
-bool
-TPushParser::isPrimes(const TNode& node) const
-{
-  assert(node);
-  return node.isG() && node.last() && node.last().is("o") && node.last()["name"] == "prime";
-}
-
-bool
-TPushParser::do_apostrophe()
-{
-  if (cursor.parent() && cursor.parent().isG())
-    {
-      if (TNode prev = cursor.prev())
-       {
-         if (prev.isSp() && prev[1] && isPrimes(prev[1]))
-           {
-             prev[1].append(PRIME());
-             return true;
-           }
-         else if (prev.isSb() && prev[0] &&
-                  prev[0].isSp() && prev[0][1] &&
-                  isPrimes(prev[0][1]))
-           {
-             prev[0][1].append(PRIME());
-             return true;
-           }
-         else
-           {
-             TNode elem = doc.create("sp");
-             TNode g = doc.createG();
-             prev.replace(elem);
-             elem.append(prev);
-             elem.append(g);
-             g.append(PRIME());
-             return true;
-           }
-       }
-      else
-       {
-         // is it an error?
-         logger.warning("you have to insert an identifier before a  ''");
-         return false;
-       }
-    }
-  else
-    {
-      logger.warning("cursor has to be in a group");
-      return false;
-    }
-}
-
-bool
-TPushParser::do_other(const std::string& s)
-{
-  switch (s[0])
-    {
-    case '\'':
-      return do_apostrophe();
-      break;
-    default:
-      /*cout << "TPushParser::do_other " << s << endl;
-      cout << "DOCUMENT: " << static_cast<GdomeNode*>(cursor.element().get_ownerDocument()) << endl;*/
-      TNode elem = doc.createT("o", s, nextId++);
-      cursor.replace(elem);
-      advance(elem);
-      return true;
-      break;
-    }
-}
-
-bool
-TPushParser::do_active(const std::string&)
-{
-  // ??? space?
-  logger.warning("ignored token");
-  return false;
-}
-
-bool
-TPushParser::do_comment()
-{
-  // ???
-  return false;
-}
-
-bool
-TPushParser::do_cr()
-{
-  TNode parent = cursor.parent();
-  if (parent && parent.isG() &&
-      parent.parent() && parent.parent().is("cell") &&
-      parent.parent().parent() && parent.parent().parent().is("row"))
-    {
-      TNode oldRow = parent.parent().parent();
-      assert(oldRow);
-      TNode table = oldRow.parent();
-      assert(table);
-      TNode row = doc.create("row");
-      TNode cell = doc.create("cell");
-      TNode g = doc.createG();
-      if (oldRow.next()) oldRow.next().insert(row);
-      else table.append(row);
-      row.append(cell);
-      cell.append(g);
-      g.append(cursor);
-      return true;
-    }
-  else
-    {
-      // at the moment, \cr can only be used inside a table
-      logger.warning("cr used outside a table");
-      return false;
-    }
-}
-
-bool
-TPushParser::do_control(const std::string& name)
-{
-  if (name == "cr") return do_cr();
-  else
-    {
-      TNode parent = cursor.parent();
-      const TDictionary::Entry& entry = dictionary.find(name);
-      switch (entry.cls)
-       {
-       case TDictionary::IDENTIFIER:
-         {
-           TNode t = doc.createI(entry.value, nextId++);
-           t["name"] = name;
-           cursor.replace(t);
-           advance(t);
-           return true;
-         }
-         break;
-       case TDictionary::OPERATOR:
-         {
-           TNode t = doc.createO(entry.value, nextId++);
-           t["name"] = name;
-           cursor.replace(t);
-           advance(t);
-           return true;
-         }
-         break;
-       case TDictionary::NUMBER:
-         {
-           TNode t = doc.createN(entry.value, nextId++);
-           t["name"] = name;
-           cursor.replace(t);
-           advance(t);
-           return true;
-         }
-         break;
-       case TDictionary::MACRO:
-         {
-           if (parent.isG())
-             {
-               TNode m = doc.createC(name, nextId++);
-               cursor.replace(m);
-               if (entry.leftOpen && entry.rightOpen)
-                 {
-                   assert(entry.pattern.empty());
-                   assert(parent.isG());
-                   TNode g1 = doc.createG();
-                   g1["left-open"] = "1";
-                   g1.append(parent.first(), m);
-                   m.append(g1);
-                   TNode g2 = doc.createG();
-                   g2.append(cursor);
-                   m.append(g2);
-                   frames.push(Frame(entry));
-                 }
-               else if (entry.leftOpen)
-                 {
-                   assert(parent.isG());
-                   TNode g = doc.createG();
-                   g["left-open"] = "1";
-                   g.append(parent.first(), m);
-                   m.append(g);
-                   advance(m);
-                 }
-               else if (entry.rightOpen)
-                 {
-                   assert(entry.pattern.empty());
-                   assert(parent.isG());
-                   TNode g = doc.createG();
-                   g.append(cursor);
-                   m.append(g);
-                   frames.push(Frame(entry));
-                 }
-               else if (!entry.pattern.empty())
-                 {
-                   frames.push(Frame(entry));
-                   if (entry.paramDelimited(0))
-                     {
-                       TNode g = doc.createG();
-                       m.append(g);
-                       g.append(cursor);
-                     }
-                   else
-                     m.append(cursor);
-                 }
-               else
-                 {
-                   // it's an empty macro
-                   advance(m);
-                 }
-               return true;
-             }
-           else if (!entry.pattern.size() && !entry.rightOpen && !entry.leftOpen)
-             {
-               // a macro with no arguments and no right open and no left open, can be child of anything
-               TNode m = doc.createC(name, nextId++);
-               cursor.replace(m);
-               advance(m);
-               return true;
-             }
-           else
-             {
-               // a macro with arguments or a rightOpen or leftOpen macro must be a group's child
-               logger.warning("ignored token: this macro should be in a group");
-               return false;
-             }
-         }
-         break;
-       case TDictionary::UNDEFINED:
-         {
-           logger.warning("using undefined macro " + name);
-           TNode m = doc.createC(name, nextId++);
-           cursor.replace(m);
-           advance(m);
-           return true;
-         }
-         break;
-       default:
-         {
-           //assert(0);
-           logger.warning("ignored token");
-           return false;
-         }
-       }
-    }
-}
-
-std::string
-TPushParser::drop_prev_token(bool special)
-{
-  assert(cursor.prev());
-  assert(cursor.parent());
-  TNode prev = cursor.prev();
-  assert(prev.isT());
-  DOM::UCS4String ucs4val = prev.element().getAttribute("val");
-  bool macro = prev.element().hasAttribute("name");
-  std::string utf8name;
-  if (macro) utf8name = prev.element().getAttribute("name");
-  
-  cursor.remove();
-  prev.replace(cursor);
-  
-  if (cursor.parent().isC())
-    {
-      // in this case we have removed an element of a MACRO. 
-      // we can assert that this element was a non delimited argument
-      assert(!frames.empty());
-      Frame& frame = frames.top();
-      assert(frame.pos > 0);
-      frame.pos--;
-    }
-
-  if ((ucs4val.length() > 1))
-    {
-      if (!macro)
-        {
-         // in this case we can return the content of ucs4val, but we have 
-         // to convert it in a utf8
-         DOM::GdomeString gdsval(ucs4val);
-         std::string utf8val(gdsval);
-         switch (utf8val[utf8val.length() - 1])
-           {
-           case '-':
-           case '_':
-             return (special) ? std::string(utf8val, 0, utf8val.length() - 1) + "\\" : std::string(utf8val, 0, utf8val.length() - 1);
-           default: return (special) ? "" : std::string(utf8val, 0, utf8val.length() - 1);
-           }
-       }
-      else
-        {
-         // in this case, the content of val could be in unicode, 
-         // but we have the attribute name, which doesn't contain character not representable 
-         // with a byte.
-         return (special) ? "\\" + utf8name : "";
-       }
-    }
-  else if (macro && special) return "\\" + utf8name;
-  else return "";
-}
-
-std::string
-TPushParser::drop_prev_script(bool special)
-{
-  // this method deletes an sp or an sb preceding the cursor
-  assert(cursor.prev());
-  assert(cursor.parent());
-  TNode prev = cursor.prev();
-  assert(prev.is("sp") || prev.is("sb"));
-  cursor.remove();
-  prev.append(cursor);
-  // we can invoke the drop_prev, because a sp (sb) MUST have two children
-  // but we cannot invoke do_drop_script because it assumes when called, the first 
-  // child has been removed yet.
-  if (cursor.prev().isG() && !prev.hasId())
-    {
-      // in this case, the user has inserted a sequence of '.
-      // Hence, we force a normal deletion, because the behavior must be the same 
-      // for the two kind of deletion
-      return drop_prev(false);
-    }
-  else return drop_prev(special);
-}
-
-std::string
-TPushParser::drop_prev_group(bool special)
-{
-  assert(cursor.prev() && cursor.prev().isG());
-  TNode parent = cursor.parent();
-  TNode prev = cursor.prev();
-  cursor.remove();
-  prev.append(cursor);
-
-  if (parent.isC() && prev.hasId())
-    {
-      // this previous group is a macro's argument. Entering inside it means that
-      // this argument becomes incomplete. Hence, we have to decrement the member pos.
-      assert(!frames.empty());
-      frames.top().pos--;
-    }
-
-  if (special) return "";
-  else
-    {
-      // a group could have no children, so the drop_prev is not appropriate
-      // so, this method is not equivalent to the one above
-      return do_drop(special);
-    }
-}
-
-std::string
-TPushParser::drop_prev_macro(bool special)
-{
-  assert(cursor.parent());
-  assert(cursor.prev());
-  TNode prev = cursor.prev();
-  assert(prev.isC());
-
-  std::string macro_name = prev.nameC();
-
-  TNode parent = cursor.parent();
-  
-  const TDictionary::Entry& entry = dictionary.find(prev["name"]);
-  
-  if (!entry.defined())
-    {
-      // In this case, with a normal deletion, we completely remove the macro.
-      // With a special deletion, we remove the last character of the macro's name.
-      cursor.remove();
-      prev.replace(cursor);
-      if (cursor.parent().isC())
-        {
-         // we have removed a macro's child
-         assert(!frames.empty());
-         frames.top().pos--;
-       }
-      if (special) return "\\" + macro_name.erase(macro_name.length() - 1, 1); // we remove the last char, because an undefined macro's name is visible
-      return "";
-    }
-  else
-    {   
-      // we start to remove a MACRO. Different actions must be taken, based on the nature 
-      // of the MACRO. In some cases, we can't remove the MACRO immediately, in other
-      // cases it's correct. In the first set of cases, we have to update the stack, pushing
-      // a frame in it with a correct value of pos, in the 
-      // second one, we must not push a frame in the stack
-      
-      if (entry.rightOpen)
-        {
-         // In this fragment of code we also handle the leftOpen && rightOpen MACRO.
-         // since the control element is rightOpen, the cursor should be placed after 
-         // the last child of the control element's last child, and than, we try to remove something.
-         // A frame MUST be pushed in the stack, because we dont' know if the following actions 
-         // will completely remove the MACRO.
-         frames.push(Frame(entry));
-
-         // Since the MACRO is rightOpen, the last child of the MACRO must be a phantom group
-         assert(prev.last().isG() && !prev.last().hasId());
-         
-         cursor.remove();
-         prev.last().append(cursor);
-
-         if (special) return "";
-         else
-           {
-             // the drop_prev is not appropriate, because the last child of the MACRO could have no children
-             return do_drop_phantom_group(special);
-           }
-       }
-      else if (entry.leftOpen)
-        {
-         // the leftOpen MACRO MUST have one and only one child, which MUST be a phantom group
-         // In this case, we do not have to push a frame in the stack, because we remove the 
-         // MACRO immediately, substituting it with the content of the phantom group.
-         // We could remove the last child of the phantom group, but
-         // it's not clear if it's the correct behavior of the graphical deletion.
-         // At the moment, to give a standard behavior, we remove the last element.
-         // With a special deletion, we do not remove it.
-         assert(prev.first());
-         assert(prev.first().isG());
-         assert(prev.first() == prev.last());
-         
-         TNode g = prev.first();
-         if (g.size())
-           {
-             // in this case, the phantom group has at least one child, so we can call the 
-             // TNode::replace.
-             g.remove();
-             prev.replace(g.first(), TNode());
-             parent.append(cursor);
-             if (special) return "\\" + macro_name;
-             else return do_drop(special);
-           }
-         else
-           {
-             // otherwise, the phantom group has no children, so we remove it, also the MACRO.
-             cursor.remove();
-             g.remove();
-             prev.replace(cursor);
-             if (special) return "\\" + macro_name;
-             else
-               {
-                 // Once removed this empty macro, we could try to remove something else.
-                 // This would be justified by the fact that, generally, an empty macro gives no visual information 
-                 // about it.
-                 return do_drop(special); // special is false
-               }
-           }
-       }
-      else if (!entry.pattern.empty())
-        {
-         // we have to start to remove a MACRO which accepts arguments.
-         // If the MACRO accepts arguments, the MACRO has at least one child     
-         assert(prev.size() >= 1);
-
-         // Differnt actions must be taken, based on the nature of the last child
-         // of the MACRO. We have to distinguish the case in which it's a delimited argument,
-         // frome the one in which it's a not delimited argument.
-         if (prev.last().isG() && !prev.last().hasId())
-           {
-             if (special)
-               {
-                 // in this case, we have to start removing the last delimiter
-                 frames.push(Frame(entry, entry.pattern.size() - 2));
-                 
-                 cursor.remove();
-                 prev.last().append(cursor);
-
-                 std::string last_del = entry.pattern[entry.pattern.size() - 1].value;
-
-                 return "\\" + last_del;
-               }
-             else
-               {
-                 // the last argument of the MACRO is a delimited argumet. We ideally remove 
-                 // the sequence of delimiters
-                 cursor.remove();
-                 prev.last().append(cursor);
-                 //  we have to push a frame with a correct value of pos
-                 assert(entry.previousParam(entry.pattern.size()) != entry.pattern.size());
-                 
-                 unsigned sequence_length = entry.pattern.size() - entry.previousParam(entry.pattern.size()) - 1;
-                 unsigned p = entry.pattern.size() - sequence_length - 1;
-                 // now, p is the correct value of pos, and we can push the frame.
-                 frames.push(Frame(entry, p));
-                 
-                 // To give a standard behavior to the graphical deletion, we remove the last 
-                 // element of the macro. Since we are in a phantom group, we can invoke the 
-                 // do_drop_phantom_group(special).
-                 return do_drop_phantom_group(special);
-               }
-           }
-         else
-           {
-             // in this case, the last child of the MACRO is not a delimited argument, so we try 
-             // to remove it, but we have to take differnt actions if the MACRO is a table with rows or not. 
-             cursor.remove();
-             if (entry.table == 1 && prev.last().is("row"))
-               {
-                 // in this case the cursor has to be appended to the group associated to 
-                 // the last cell of the last row of the table
-                 assert(prev.last().last().is("cell") && prev.last().last().first().isG());
-                 prev.last().last().first().append(cursor);
-                 
-                 // we have to push a frame in the stack. Since tables has a pattern size = 1, we have to 
-                 // set pos at 0, because appending the cursor to the last cell means that this argument 
-                 // is not whole inserted.
-                 // We don't call frames.push(Frame(entry)), because it incoditionaly set pos at 0. The 
-                 // following line is more general
-                 frames.push(Frame(entry, entry.pattern.size() - 1));
-                 if (special)
-                   {
-                     // to type a table with rows and cells, the user had typed a 
-                     // "{", and to exit from it, the user had inserted a "}".
-                     // Since we are in a special deletion, we just idealy remove the "}"
-                     return "";
-                   }
-                 else return do_drop_phantom_group(special);
-               }
-             else
-               {
-                 // we push a frame in the stack with a correct value of member pos.
-                 // This correct value is the size of the pattern - 1, because we have been started to delete 
-                 // a MACRO. It means that all of the MACRO's arguments have been inserted, but 
-                 frames.push(Frame(entry, entry.pattern.size()));
-                 prev.append(cursor);
-                 return drop_prev(special);
-               }
-
-           } // end of the else of the if (prev.last().isG() && !prev.last().hasId())
-
-       } // end of if (!entry.pattern.empty())
-      else
-        {
-         // if we are here, the MACRO preceding the cursor, is !(rightOpen || leftOpen),
-         // and has no pattern. It means that it has no children.
-         // We can replace it with the cursor
-         assert(prev.size() == 0);
-         cursor.remove();
-         prev.replace(cursor);
-         if (cursor.parent().isC())
-           {
-             // we have removed an empty macro, which was a non delimited argument of a macro.
-             // We have to decrement pos
-             assert(!frames.empty());
-             frames.top().pos--;
-           }
-
-         if (special) return "\\" + macro_name;
-         else return "";
-                 
-         // now we could start to remove something else. This behavior would be justified by the 
-         // fact that, generally, an empty MACRO gives no visual information about it.
-         // To adopt this behavior, just remove the comment to the following instruction
-         // return do_drop(special);
-       }
-    } // end of defined MACRO
-
-}
-
-std::string
-TPushParser::drop_prev(bool special)
-{
-  // if in this function, the prev of cursor does exist, also the parent and we want a graphical deletion.
-  
-  assert(cursor.prev());
-  assert(cursor.parent());
-
-  TNode prev = cursor.prev();
-
-  if (prev.isT())
-    {
-      return drop_prev_token(special);
-    }
-  else if (prev.isSp() || prev.isSb())
-    {
-      return drop_prev_script(special);
-    }
-  else if (prev.isG())
-    {
-      return drop_prev_group(special);
-    }
-  else if (prev.isC())
-    {
-      // here, we also treat the case in which the MACRO is a table
-      return drop_prev_macro(special);
-    }
-  else 
-    {
-      // not handled. Future cases...
-      return "";
-    }
-
-} // end of method
-
-void
-TPushParser::rgreplace_father()
-{
-  // this method MUST only be invoked, when the cursor
-  // is the only child of a group with id. This function 
-  // replaces the group with the cursor. But if the new parent
-  // is a group with id and the cursor is the only child of the 
-  // group, the new parent is replaced...and so on.
-  // r stands for recursive, g stands for graphical.
-  assert(cursor.parent());
-  assert(cursor.parent().isG() && cursor.parent().hasId());
-
-  TNode parent = cursor.parent();
-
-  while (parent.isG() && parent.hasId() && (parent.first() == cursor))
-    {
-      parent.replace(cursor);
-      parent = cursor.parent();
-    }
-}
-
-std::string
-TPushParser::do_drop_script(bool special)
-{
-  // If we are here, the cursor is child of a script (sp or sb) and 
-  // this means that a prev does exist and that there is one and only one 
-  // element preceding the cursor. The sp's (or sb's) parent 
-  // MUST NOT be a MACRO.
-  // The element preceding the cursor is the base of the script.
-
-  assert(cursor.parent() && (cursor.parent().isSp() || cursor.parent().isSb()));
-  TNode parent = cursor.parent();
-         
-  assert(parent.size() == 2);
-  assert(parent.parent() && !parent.parent().isC());
-  
-  TNode prev = cursor.prev();
-  cursor.remove();
-  if (prev.isG() /*&& !prev.hasId()*/ && (prev.size() == 0))
-    {
-      // in this case, the script's base is a group with no elements, so 
-      // we have to remove the entire MACRO, replacing it with the cursor.
-      // This situation occurs when the user had typed something like this
-      //   $....{}^
-      // or this 
-      //   $^
-      // or this
-      //   $...{^
-      //
-      if (special && prev.hasId())
-        {
-         // in this case, the user has typed: ...{}^
-         // hence we idealy remove the ^
-         parent.replace(prev);
-         prev.parent().append(cursor);
-         return "";
-       }
-      else if (!prev.hasId())
-        {
-         // we idealy remove the ^, but the phantom group 
-         // has to be removed, also
-         prev.remove();
-         parent.replace(cursor);
-         return "";
-       }
-      else
-        {
-         prev.remove();
-         parent.replace(cursor);
-         
-         // since the script had no children, we can try to remove something else.
-         // Since we don't know who is cursor's parent, and who is cursor's preceding 
-         // element, we invoke the do_drop()
-         return do_drop(special);
-       }
-    }
-  else
-    {
-      // in this case, the prev has to replace the script.
-      parent.replace(prev);
-      prev.parent().append(cursor);
-      // now prev have a preceding element
-      assert(cursor.parent().size() > 1);
-
-      if (special) return "";
-      else
-        {
-         // to give a standard behavior, we try to remove the element, which was 
-         // the script's base.
-         return do_drop(special);
-       }
-    }
-  
-} // end of method do_drop_script
-
-std::string
-TPushParser::do_drop_macro(bool special)
-{
-  // If we are here, the cursor is a child of a MACRO and this means
-  // that there is an open frame for the control element
-  // and this element is closed at either side (no leftOpen no rightOpen)
-  // and the MACRO is waiting for a not delimited argument, so 
-  // we can assert that frame.entry.pattern.size() >= 1
-  assert(cursor.parent() && cursor.parent().isC());
-  TNode parent = cursor.parent();
-
-  // this string is useful iff we have a special deletion.
-  std::string macro_name = parent.nameC();
-  
-  assert(!frames.empty());
-  Frame& frame = frames.top();
-  assert(frame.entry.pattern.size() >= 1);
-
-  // we have to take different actions, based on if a preceding element exists 
-  // or not
-  TNode prev = cursor.prev();
-  if (!prev)
-    {
-      // in this case, a prev does not exist, so the actions of deleting means 
-      // that we have to remove the MACRO. So we have to pop the stack.
-      assert(frame.pos == 0);
-      
-      parent.replace(cursor);
-      frames.pop();
-
-      if (special) return "\\" + macro_name;
-      else
-        {
-         // Since the macro had no children and this is a graphical deletion, we try 
-         // to remove something else
-         return do_drop(special);
-       }
-    }
-  else
-    {
-      // a prev does exist, we have to control if it's a delimited argument or not.
-      if (prev.isG() && !prev.hasId())
-        {
-         // in this case, prev is a delimited argument, so we have 
-         // to ideally remove the sequence of delimiters
-         Frame& frame = frames.top();
-         assert(frame.pos > 1);
-         cursor.remove();
-         prev.append(cursor);
-         assert(frame.entry.previousParam(frame.pos) != frame.entry.pattern.size());
-
-         if (special)
-           {
-             // in this case we have to start removing the last delimimeter.
-             // It means that we return in a situation where the user has not entirely 
-             // inserted the delimited argument. So, we have to decrement frame.pos of 
-             // two units: the delimiter and the actual argument
-             std::string last_del = frame.entry.pattern[frame.pos - 1].value;
-             frame.pos = frame.pos - 2;
-             return "\\" + last_del;
-           }
-         else
-           {
-             // these 3 lines of code update the member pos.
-             unsigned sequence_length = frame.pos - frame.entry.previousParam(frame.pos) - 1;
-             assert(sequence_length);
-             frame.pos = frame.pos - sequence_length - 1;
-             
-             // since it's a graphical deletion, we have to remove the current preceding element.
-             // We don't invoke the drop_prev(), because a do_drop_phantom_group is more general.
-             return do_drop_phantom_group(special);
-           }
-       }
-      else
-        {
-         // the prev is not a delimited argument, so we have to try to remove it. 
-         // We "try", because the prev might be something that 
-         // a simple deletion cannot remove completely
-         return drop_prev(special);
-       }
-    }
-
-}
-
-std::string
-TPushParser::do_drop_groupId(bool special)
-{
-  // if we are here, the cursor's parent is a group with Id
-  assert(cursor.parent() && cursor.parent().isG() && cursor.parent().hasId());
-  TNode parent = cursor.parent();
-
-  // we have to take different actions based on if the cursor has a preceding 
-  // element or not
-  TNode prev = cursor.prev();
-  if (prev)
-    {
-      // the cursor has a preceding element, so we try to remove it
-      if (special) return drop_prev(special);
-      else
-        {
-          std::string str = drop_prev(special);
-
-          // We control if the group has to be removed, because the cursor 
-          // might be the only element of the group.
-          // But we have to be careful, because drop_prev could change the TML tree 
-          // more than we think...parent could no longer exist! 
-          parent = cursor.parent();
-          if ((parent.first() == cursor) && parent.isG() && parent.hasId())
-           rgreplace_father();
-      
-          return str;
-       }
-    }
-  else
-    {
-      // the cursor has no preceding elements, so we have to remove the 
-      // group.
-      if (special)
-        {
-         parent.replace(cursor);
-         return "";
-       }
-      else
-        {
-         rgreplace_father();
-         // we have to re-start the process, because it' a graphical deletion
-         return do_drop(special);
-       }
-    }
-
-} // end of method do_drop_groupId()
-
-std::string
-TPushParser::do_drop_phantom_group(bool special)
-{
-  // if we are here, the cursor MUST be a child of a 
-  // phantom group.
-  assert(cursor.parent() && cursor.parent().isG() && !cursor.parent().hasId());
-
-  TNode parent = cursor.parent();
-
-  // now we have to control if the cursor has a preceding element or not
-  TNode prev = cursor.prev();
-  if (prev)
-    {
-      if (parent.parent() && parent.parent().isC())
-        {
-         // there is a frame in the stack
-         assert(!frames.empty());
-         if (frames.top().entry.pattern.size())
-           {
-             Frame& frame = frames.top();
-             if (special)
-               {
-                 // we are in a delimited argument. If the user has inserted a proper subset of the 
-                 // delimiters'sequence, we start to remove the previous delimiter. Start to remove 
-                 // a delimiter means that that delimiter must be removed from the count of inserted delimiters.
-                 // It means that we have to decrement the member pos.
-                 if (frame.entry.pattern[frame.pos].category != TToken::PARAMETER)
-                   {
-                     std::string del = frame.entry.pattern[frame.pos].value;
-                     frame.pos--;
-                     return "\\" + del;
-                   }
-               }
-             else
-               {
-                 // we are in a delimited argument. If the user has inserted a proper subset of the delimiters'sequence, 
-                 // we have to remove the portion the user has inserted.
-                 while (frame.entry.pattern[frame.pos].category != TToken::PARAMETER) frame.pos--;
-               }
-           }
-       }
-      
-      // the cursor has a preceding element, so we try to remove it
-      std::string str = drop_prev(special);
-
-      if (special) return str;
-      else
-        {
-          // now we have to control the parent, to handle the case of primes. But we have returned from a drop_prev(), which
-          // could change the TML tree. So not asssuming that cursor's parent is unchanged is convenient.
-          parent = cursor.parent();
-          if (parent.isG() && !parent.hasId() && (parent.size() == 1) && parent.parent().isSp())
-            {
-             // in this case the drop_prev has removed the only element preceding the cursor.
-             // Since the phantom group is an sp's child, the user has removed all \' in the 
-             // phantom group.
-             // Now we have some possibilities:
-             //   - we can replace the phantom group with the cursor, giving the user the chance to insert a new 
-             //     exponent
-             //   - we can remove the phantom group and the sp element, recreating the state before the user inserted the first
-             //     prime.
-             // At the moment we implement the second one.
-             assert(parent.parent().size() == 2);
-             TNode gparent = parent.parent();
-             TNode base = gparent.first();
-             cursor.remove();
-             parent.remove();
-             gparent.replace(base);
-             // now base's parent is no more gparent
-             base.parent().append(cursor);
-         
-             return str;
-           }
-          else if (parent.isG() && !parent.hasId() && parent.parent().isSp())
-            {
-             // in this case we have to place the cursor after the sp element
-             cursor.remove();
-             assert(parent.parent().parent());
-             parent.parent().parent().append(cursor);
-             return str;
-           }
-          else return str;
-       }
-    }
-  else
-    {
-      // in this case the cursor is the only element of the phantom group,
-      // so we have to remove it. But, a phantom group has a special role, 
-      // so we have to control the grand father of the cursor.
-      TNode gfather = parent.parent();
-      if (!gfather)
-        {
-         // If here, the TML tree is in an inconsistent state
-         logger.error("TML tree in a inconsistent state");
-         return "";
-       }
-      else if (gfather.isC())
-        {
-         // in this case the phantom group is child of a MACRO.
-         // We have to control the nature of this MACRO.
-         assert(!frames.empty());
-          Frame& frame = frames.top();
-
-         // this variable is useful in a special deletion
-         std::string macro_name = gfather.nameC();
-         
-         if (frame.entry.leftOpen && frame.entry.rightOpen)
-           {
-             // in this case, the cursor'parent is in the second and last child 
-             // of the MACRO. We can assert that the grand father has two 
-             // children, which are both phantom groups
-             assert(gfather.size() == 2);
-             assert((gfather.last() == parent) && (gfather.first().isG() && !gfather.first().hasId()));
-             assert(frame.pos == 0);
-             
-             TNode ggfather = gfather.parent();
-             assert(ggfather);
-             cursor.remove();
-             parent.remove();
-             // we have to replace the gfather with the elements of its first child, but this group may have no 
-             // children.
-             if (gfather.first().size())
-               {
-                 gfather.replace(gfather.first().first(), TNode());
-                 ggfather.append(cursor);
-               }
-             else
-               {
-                 // in this case, the MACRO has to be replaced with the cursor
-                 gfather.first().remove();
-                 gfather.replace(cursor);
-               }
-             // now we have the situation preceding the insertion of the leftOpen and rightOpen MACRO.
-             // this MACRO no longer exists.
-             frames.pop();
-
-             if (special) return "\\" + macro_name;
-             else
-               {
-                 // to give a standard behavior to the graphical deletion, we call the do_drop.
-                 return do_drop(special);
-               }
-           }
-         else if (frame.entry.rightOpen)
-           {
-             // the user has inserted a rightOpen MACRO, and now, this MACRO has no children (excluding the 
-             // phantom group), so we remove the MACRO. 
-             // We can assert that cursor's parent is the only child of the MACRO
-             assert(gfather.size() == 1);
-             assert(frame.pos == 0);
-             cursor.remove();
-             parent.remove();
-             gfather.replace(cursor);
-             
-             // now we have the situation preceding the rightOpen MACRO, so we have to pop the frame
-             frames.pop();
-
-             if (special) return "\\" + macro_name;
-             else
-               {
-                 // to give a standard behavior to the graphical deletion, we call the do_drop.
-                 return do_drop(special);
-               }
-             
-           }
-         else if (frame.entry.leftOpen)
-           {
-             // this situation will never occur.
-             logger.error("the parser has generated a wrong TML tree");
-             return "";
-           }
-         else if (!frame.entry.pattern.empty())
-           {
-             // the MACRO accepts arguments, and the phantom group in which 
-             // the cursor is, rappresents a delimited argument.
-             // We have to control if the cursor's parent has a preceding element, 
-             // or not.
-             TNode uncle = parent.prev();
-             if (!uncle)
-               {
-                 // the parent is the only element of the MACRO. 
-                 // we can assert that frame.pos == 0.
-                 // In this case we can replace the MACRO with the cursor
-                 assert(frame.pos == 0);
-                 cursor.remove();
-                 parent.remove();
-                 gfather.replace(cursor);
-                 frames.pop();
-
-                 if (special) return "\\" + macro_name;
-                 else
-                   {
-                     // once we have replaced the empty macro with the cursor, we can remove
-                     // something else
-                     return do_drop(special);
-                   }
-               }
-             else
-               {
-                 // the parent has a preceding element. Now we have 
-                 // to control if the uncle is a delimited argument or not.
-                 if (uncle.isG() && !uncle.hasId())
-                   {
-                     // cursor's uncle is a delimited argument
-                     cursor.remove();
-                     parent.remove();
-                     uncle.append(cursor);
-                     if (special)
-                       {
-                         // we have to start removing the last delimiter of the delimited 
-                         // argument.
-                         std::string last_del = frame.entry.pattern[frame.pos - 1].value;
-                         frame.pos = frame.pos - 2;
-                         return "\\" +  last_del; 
-                       }
-                     else
-                       {
-                         // the  uncle is a delimited argument. So we have to ideally
-                         // remove the sequence of delimiters.
-                         assert(frame.pos > 1);
-                         unsigned sequence_length = frame.pos - frame.entry.previousParam(frame.pos) - 1;
-                         assert(frame.entry.previousParam(frame.pos) != frame.entry.pattern.size());
-                         assert(sequence_length);
-                         // sequence_length is the length of the delimiters sequence which separates
-                         // the current parameter and the previous parameter
-                         frame.pos = frame.pos - sequence_length - 1;
-
-                         // once removed the sequnce of delimiters, we can start to remove the actual 
-                         // parameter. We can call the do_drop_phantom_group() because a delimited argument
-                         // is always a phantom group's child
-                         return do_drop_phantom_group(special);
-                       }
-                   }
-                 else
-                   {
-                     // the uncle is a not delimited argument, so we try to remove it.
-                     cursor.remove();
-                     parent.replace(cursor);
-                     parent = cursor.parent(); // we update the parent (it should be the MACRO)
-                     assert(parent.isC());
-
-                     // now we try to remove the uncle (now it' the preceding element)
-                     return drop_prev(special);
-                   }
-               } // this is the else's end, that handles the case in which an uncle exists
-           } // end of if (!frame.entry.pattern.empty())
-         else
-           {
-             // the entry has no arguments, is not rightOpen and is not leftOpen.
-             logger.error("TML tree in a strange state");
-             return "";
-           }
-       } // end of if (gfather.isC())
-      else if (gfather.is("cell"))
-        {
-         // A table is a control sequence, so there is a frame in the stack
-         assert(!frames.empty());
-         assert(frames.top().pos == 0);
-         assert(frames.top().entry.table == 1);
-         
-         // a cell MUST be a row's child, which in turn is a table's child 
-         assert(gfather.parent() && gfather.parent().is("row") && gfather.parent().parent());
-
-         // this variable is useful to handle the special deletion
-         std::string table_name = gfather.parent().parent().nameC();
-         
-         TNode row = gfather.parent();
-         
-         // in this case the cell has no element, so the user wants to delete this cell.
-         TNode prev_cell = gfather.prev();
-         cursor.remove();
-         parent.remove();
-         gfather.remove();
-         // now the cell no longer exists
-
-         if (!prev_cell)
-           {
-             // in this case, the cell was the only cell in the row.
-             // So, we assume that the user wants to delete the entire row.
-             TNode table = row.parent();
-             TNode prev_row = row.prev();
-             row.remove();
-             
-             if (!prev_row)
-               {
-                 if (special)
-                   {
-                     // Since there was a cell (and a row), the user has typed a "{" to 
-                     // We ideally remove this character.
-                     table.append(cursor);
-                     return "";
-                   }
-                 else
-                   {
-                     // the row was the only child of the table. 
-                     // so we have to delete the entire table
-                     assert(table.parent());
-                     TNode parent_table = table.parent();
-                     table.remove();
-                     frames.pop();
-                     parent_table.append(cursor);
-                     return "";
-                   }
-               }
-             else
-               {
-                 // there are other rows (one or more)
-                 assert(prev_row.is("row"));
-                 assert(prev_row.last());
-                 TNode last_cell = prev_row.last();
-                 assert(last_cell.is("cell"));
-                 assert(last_cell.size() == 1);
-                 assert(last_cell.first().isG() && !last_cell.first().hasId());
-                 last_cell.first().append(cursor);
-                 // Since cells and rows are separated by spaces and CRs 
-                 // (and the user can see this spaces and CRs), a special deletion 
-                 // is equivalent to a normal deletion
-                 return "";
-               }
-           } // end of if (!prev_cell)
-         else
-           {
-             // being here means that there is a previous cell,
-             // so we append the cursor to group.
-             assert(prev_cell.size() == 1);
-             assert(prev_cell.first().isG() && !prev_cell.first().hasId());
-             prev_cell.first().append(cursor);
-             return "";
-           }
-       } // end of if (gfather.is("cell"))
-      else if (gfather.isSp())
-        {
-         // we cannot be here because a phantom group can be a Sp child only 
-         // in two cases. If the user has typed somethong like:
-         // $^
-         // the cursor is not phantom group's child.
-         // If the user has typed somethong like
-         // ..''
-         // In this case the sequence of ' is placed in a phantom group, 
-         // which becomes the exponent of the script. But, the cursor is 
-         // always outside the phantom group
-         logger.error("TML tree in a strange state");
-         return "";
-       }
-      else if (gfather.is("math"))
-        {
-         // in this case we ignore the user's will of deleting
-         // but we could also decide to remove the math mode.
-         logger.warning("nothing to delete");
-         return "";
-       }
-      else
-        {
-         // cursor's grand father is undefined
-         logger.error("TML tree is in an unknown state");
-         return "";
-       }
-    } // end of the else of the if (prev)
-
-}
-
-
-std::string
-TPushParser::do_drop(bool special)
-{
-  // we have to handle the case in wich the cursor has a parent or not
-  if (!cursor.parent())
-    {
-      // it's not a good situation...at the moment we do not take actions
-      logger.error("TML tree not well structured");
-      return "";
-    }
-  else
-    {
-      // a parent exists. We have to take differnt actions, based on the nature of 
-      // the parent
-      TNode parent = cursor.parent();
-      if (parent.is("math"))
-        {
-         // we ca do two thing...we can remove the math mode (it implies controlling the display attribute), we can do nothing
-         // At the moment, the user's will of deleting is simply ignored
-         logger.warning("nothing to delete");
-         return "";
-       }
-      else if (parent.isG())
-        {
-         // the cursor's parent is a group. We have to control if it's a phantom group or not
-         if (parent.hasId())
-           {
-             return do_drop_groupId(special);
-           }
-         else
-           {
-             return do_drop_phantom_group(special);
-           }
-       } // end of parent is group
-      else if (parent.isC())
-        {
-         return do_drop_macro(special);
-       } // end of parent is a MACRO
-      else if (parent.isSp() || parent.isSb())
-        {
-         return do_drop_script(special);
-       } // end of parent is sp or sb
-    } // end of the else which consider the case in which parent exists
-  
-} // end of method do_drop
-
-bool
-TPushParser::process(const TToken& token)
-{
-  switch (token.category)
-    {
-    case TToken::BEGIN: return do_begin();
-    case TToken::END: return do_end();
-    case TToken::SHIFT: return do_shift();
-    case TToken::ALIGN: return do_align();
-    case TToken::EOL: return do_eol();
-    case TToken::PARAMETER: return do_parameter(token.value);
-    case TToken::SUPERSCRIPT: return do_superscript();
-    case TToken::SUBSCRIPT: return do_subscript();
-    case TToken::IGNORABLE_SPACE: return do_ignorablespace(token.value);
-    case TToken::SPACE: return do_space(token.value);
-    case TToken::LETTER: return do_letter(token.value);
-    case TToken::DIGIT: return do_digit(token.value);
-    case TToken::OTHER: return do_other(token.value);
-    case TToken::ACTIVE: return do_active(token.value);
-    case TToken::COMMENT: return do_comment();
-    case TToken::CONTROL: return do_control(token.value);
-    }
-}
-
-void
-TPushParser::push(const TToken& token)
-{
-  TNode parent = cursor.parent();
-  // If the cursor has no parent then it is detached from the editing
-  // tree, which means this token will be ignored
-
-  if (parent)
-    // If the parent is a phantom group and the grand-parent is a
-    // control sequence, there are two cases:
-    // a. we are parsing a delimited argument of a entry
-    // b. we are parsing a side of a right- or left-open entry
-    if (parent.isG() && !parent.hasId() && parent.parent().isC())
-      {
-       // There must be an open frame, for the grand-parent is a control sequence
-       assert(!frames.empty());
-       Frame& frame = frames.top();
-       if (!frame.entry.pattern.empty())
-         {
-           // The entry pattern is not empty. By our conventions this means
-           // the entry cannot be open at either end, hence we are parsing
-           // a delimited argument
-           assert(frame.pos + 1 < frame.entry.pattern.size());
-           assert(frame.entry.pattern[frame.pos + 1].category != TToken::PARAMETER);
-           if (frame.entry.pattern[frame.pos + 1] == token)
-             {
-               // The token matches with a delimiter of the argument, 
-               // hence we increment the frame.pos
-               frame.pos++;
-
-               if (frame.entry.lastDelimiter(frame.pos))
-                 {
-                   // this delimiter is the last one for the argumet, 
-                   // so the argument is completed
-                   cursor.remove();
-                   advance(parent);
-                 }
-             }
-           else
-             {
-               // Delimiter mismatch.
-               if (frame.entry.pattern[frame.pos].category != TToken::PARAMETER)
-                 {
-                   // in this case, there is a sequence of delimiters that delimitates
-                   // the argument, and the user has correctly inserted a portion of this 
-                   // sequence, but now has inserted a wrong delimiter.
-                   // Here, there are some possibilities:
-                   //   - ignore the token, and wait for the correct delimiter
-                   //   - ignore the token, wait for the correct delimiter and emit an error
-                   // At the moment, we implement the second possibily
-                   logger.warning("it's not the correct delimiter...you have to type '" + frame.entry.pattern[frame.pos + 1].value + "'");
-                 }
-               else
-                 {
-                   // in this case, the sequence of delimiters is composed of one 
-                   // delimiter. It means that we have to process the token
-                   process(token);
-                 }
-             }
-         }
-       else
-         {
-           // The entry pattern is empty, hence we are parsing a right-open
-           // entry. What happens if we actually are in the left side?
-           // This could happen only when re-editing an entered expression
-           // We'll see...
-           assert(frame.entry.rightOpen);
-           process(token);
-         }
-      }
-    else if (parent.isC())
-      {
-       // We are parsing a non-delimited argument entry
-       // or a fixed token
-       Frame& frame = frames.top();
-       assert(frame.pos < frame.entry.pattern.size());
-
-       if (frame.entry.pattern[frame.pos].category == TToken::PARAMETER)
-         {
-           // As by the TeX parsing rules of undelimited parameters,
-           // empty spaces are ignored
-           if ((token.category != TToken::SPACE) && (token.category != TToken::IGNORABLE_SPACE)) process(token);
-         }
-       else if (frame.entry.pattern[frame.pos] == token)
-         {
-           // The token has been accepted
-           frame.pos++;
-           if (frame.pos < frame.entry.pattern.size() &&
-               frame.entry.paramDelimited(frame.pos))
-             {
-               // If the next is a delimited argument we have to place
-               // the phantom group with the cursor inside
-               TNode g = doc.createG();
-               cursor.replace(g);
-               g.append(cursor);
-             }
-           else
-             {
-               cursor.remove();
-               advance(parent);
-             }
-         }
-       else
-         {
-           // There is a mismatch. Emit an error and ignore the token?
-           logger.warning("ignored token: " + token.value);
-         }
-      }
-    else
-      process(token);
-  else
-    {
-      logger.warning("ignored token");
-    }
-
-  if (factory && doc.dirtyNode() && !frozen()) factory->documentModified(doc);
-}
-
-std::string
-TPushParser::drop(bool special)
-{
-  std::string str = do_drop(special);
-  if (factory && doc.dirtyNode() && !frozen()) factory->documentModified(doc);
-  return str;
-}
-
-void
-TPushParser::advance(const TNode& node)
-{
-  assert(node);
-  
-  if (!node.parent())
-    {
-      // this is an error
-      logger.error("wrong TML tree");
-    }
-  else if (node.parent().isG())
-    {
-      TNode next = node.next();
-      if (next) next.insert(cursor);
-      else node.parent().append(cursor);
-    }
-  else if (node.parent().isC())
-    {
-      assert(!frames.empty());
-      if ((frames.top().pos + 1 == frames.top().entry.pattern.size()) || (frames.top().entry.pattern.empty()))
-        {
-         // we are here when we have a right open macro, or the inserted element is the last one
-         if (frames.top().entry.rightOpen)
-           {
-             // we have to remove the frame from the stack
-             frames.pop();
-             advance(node.parent().parent());
-           }
-         else
-           {
-             frames.pop();
-             advance(node.parent());
-           }
-       }
-      else if (frames.top().entry.paramDelimited(frames.top().pos + 1))
-        {
-         // the next argument is delimited, so we have to create a phantom group
-         TNode g = doc.createG();
-         g.append(cursor);
-         node.parent().append(g);
-         frames.top().pos++;
-       }
-      else
-        {
-         // the next argumet is not delimited, so we have to append the cursor
-         // to the MACRO
-         node.parent().append(cursor);
-         frames.top().pos++;
-       }
-    }
-  else advance(node.parent());
-}
-
-void
-TPushParser::setCursorHint(const std::string& c)
-{
-  if (cursor["val"] != c)
-    {
-      cursor["val"] = c;
-      if (factory && doc.dirtyNode() && !frozen()) factory->documentModified(doc);
-    }
-}
-
-bool
-TPushParser::hideCursor()
-{
-  if (hiddenCursor++ == 0)
-    {
-      cursor["visible"] = "0";
-      if (factory && doc.dirtyNode() && !frozen()) factory->documentModified(doc);
-      return true;
-    }
-  else
-    return false;
-}
-
-bool
-TPushParser::showCursor()
-{
-  if (hiddenCursor > 0 && --hiddenCursor == 0)
-    {
-      cursor["visible"] = "1";
-      if (factory && doc.dirtyNode() && !frozen()) factory->documentModified(doc);
-      return true;
-    }
-  else
-    return false;
-}
-
-bool
-TPushParser::thaw()
-{
-  if (APushParser::thaw() && factory && doc.dirtyNode())
-    {
-      factory->documentModified(doc);
-      return true;
-    }
-  else
-    return false;
-}
diff --git a/helm/DEVEL/mathml_editor/src/TPushParser.hh b/helm/DEVEL/mathml_editor/src/TPushParser.hh
deleted file mode 100644 (file)
index a94402f..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __TPushParser_hh__
-#define __TPushParser_hh__
-
-#include <list>
-#include <stack>
-#include "TToken.hh"
-#include "APushParser.hh"
-#include "TDictionary.hh"
-#include "TDocument.hh"
-#include "TNode.hh"
-
-class TPushParser : public APushParser
-{
-public:
-  TPushParser(class ALogger&, const class TDictionary&);
-  TPushParser(class ALogger&, class AMathMLFactory&, const class TDictionary&);
-  virtual ~TPushParser();
-
-  virtual void reset(void);
-  virtual void push(const TToken&);
-  virtual std::string drop(bool);
-  virtual void setCursorHint(const std::string&);
-  virtual bool hideCursor(void);
-  virtual bool showCursor(void);
-
-  virtual bool thaw(void);
-
-  DOM::Document document(void) const { return doc.document().cloneNode(true); }
-
-private:
-  void init(void);
-
-  TNode PRIME(void);
-  bool isPrimes(const TNode&) const;
-  
-  bool do_begin(void);
-  bool do_end(void);
-  bool do_shift(void);
-  bool do_align(void);
-  bool do_eol(void);
-  bool do_parameter(const std::string&);
-  bool do_superscript(void);
-  bool do_subscript(void);
-  bool do_ignorablespace(const std::string&);
-  bool do_space(const std::string&);
-  bool do_letter(const std::string&);
-  bool do_digit(const std::string&);
-  bool do_other(const std::string&);
-  bool do_active(const std::string&);
-  bool do_comment(void);
-  bool do_control(const std::string&);
-  
-  std::string drop_prev_token(bool);
-  std::string drop_prev_script(bool);
-  std::string drop_prev_group(bool);
-  std::string drop_prev_macro(bool);
-  std::string drop_prev(bool);
-  void rgreplace_father(void);
-  std::string do_drop_script(bool);
-  std::string do_drop_macro(bool);
-  std::string do_drop_groupId(bool);
-  std::string do_drop_phantom_group(bool);
-  std::string do_drop(bool);
-
-  bool do_cr(void);
-  bool do_apostrophe(void);
-  void advance(const TNode&);
-  bool correctBrace(void);
-
-  bool process(const TToken&);
-
-  struct Frame
-  {
-    Frame(const TDictionary::Entry& e) : entry(e), pos(0) { };
-    Frame(const TDictionary::Entry&e, unsigned p) : entry(e), pos(p) { };
-    const TDictionary::Entry& entry;
-    unsigned pos;
-  };
-
-  std::stack<Frame> frames;
-  unsigned  nextId;
-  TDocument doc;
-  TNode     cursor;
-  unsigned  hiddenCursor;
-  const class TDictionary& dictionary;
-};
-
-#endif // __TPushParser_hh__
diff --git a/helm/DEVEL/mathml_editor/src/TToken.hh b/helm/DEVEL/mathml_editor/src/TToken.hh
deleted file mode 100644 (file)
index 0ea74e5..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __TToken_hh__
-#define __TToken_hh__
-
-#include <string>
-
-struct TToken
-{
-  enum TCat
-    {
-      BEGIN,
-      END,
-      SHIFT,
-      ALIGN,
-      EOL,
-      PARAMETER,
-      SUPERSCRIPT,
-      SUBSCRIPT,
-      IGNORABLE_SPACE,
-      SPACE,
-      LETTER,
-      DIGIT,
-      OTHER,
-      ACTIVE,
-      COMMENT,
-      CONTROL
-    };
-
-  TToken(TCat c) : category(c) { };
-  TToken(TCat c, char ch) : category(c), value(std::string(1, ch)) { };
-  TToken(TCat c, const std::string& v) : category(c), value(v) { };
-
-  bool operator==(const TToken& token) const { return category == token.category && value == token.value; };
-
-  TCat        category;
-  std::string value;
-};
-
-#endif // __TToken_hh__
diff --git a/helm/DEVEL/mathml_editor/src/TTokenizer.cc b/helm/DEVEL/mathml_editor/src/TTokenizer.cc
deleted file mode 100644 (file)
index 14eeaad..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <algorithm>
-#include <cassert>
-
-#include "TTokenizer.hh"
-#include "TPushLexer.hh"
-
-std::vector<TToken>
-TTokenizer::tokenize(const std::string& s)
-{  
-  TPushLexer lexer(logger, *this);
-
-  tokens.clear();
-  for (std::string::const_iterator p = s.begin();
-       p != s.end();
-       p++)
-    lexer.push(*p);
-  
-  lexer.flush();
-
-  std::vector<TToken> res;
-  res.reserve(tokens.size());
-  copy(tokens.begin(), tokens.end(), back_inserter(res));
-
-  return res;
-}
-
-void
-TTokenizer::reset()
-{
-  assert(0);
-}
-
-void
-TTokenizer::push(const TToken& token)
-{
-  tokens.push_back(token);
-}
-
-std::string
-TTokenizer::drop(bool alt)
-{
-  assert(0);
-  return "";
-}
diff --git a/helm/DEVEL/mathml_editor/src/TTokenizer.hh b/helm/DEVEL/mathml_editor/src/TTokenizer.hh
deleted file mode 100644 (file)
index f78acaf..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __TTokenizer_hh__
-#define __TTokenizer_hh__
-
-#include <string>
-#include <vector>
-#include <list>
-
-#include "TToken.hh"
-#include "APushParser.hh"
-
-class TTokenizer : private APushParser
-{
-public:
-  TTokenizer(class ALogger& l) : APushParser(l) { };
-
-  std::vector<TToken> tokenize(const std::string&);
-
-private:
-  virtual void reset(void);
-  virtual void push(const TToken&);
-  virtual std::string drop(bool = false);
-  virtual void setCursorHint(const std::string&) { };
-  virtual bool hideCursor(void) { return false; };
-  virtual bool showCursor(void) { return false; };
-
-  std::list<TToken> tokens;
-};
-
-#endif // __TTokenizer_hh__
diff --git a/helm/DEVEL/mathml_editor/src/config.dirs.in b/helm/DEVEL/mathml_editor/src/config.dirs.in
deleted file mode 100644 (file)
index 1ce2d0a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-#define PKGDATADIR "@prefix@/share/@PACKAGE@"
-
diff --git a/helm/DEVEL/mathml_editor/src/dom.hh b/helm/DEVEL/mathml_editor/src/dom.hh
deleted file mode 100644 (file)
index d09505f..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __dom_hh__
-#define __dom_hh__
-
-#include <GdomeSmartDOM.hh>
-#include <GdomeSmartDOMXSLT.hh>
-
-namespace DOM = GdomeSmartDOM;
-namespace DOMX = GdomeSmartDOMExt;
-
-typedef DOM::Char32     TChar;
-typedef DOM::UCS4String TString;
-
-inline bool isUnicodeSpace(TChar ch)
-{
-  return ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r';;
-}
-
-inline bool isUnicodeAlpha(TChar ch)
-{
-  return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
-}
-
-inline bool isUnicodeDigit(TChar ch)
-{
-  return (ch >= '0' && ch <= '9');
-}
-
-#endif // __dom_hh__
diff --git a/helm/DEVEL/mathml_editor/src/globals.hh b/helm/DEVEL/mathml_editor/src/globals.hh
deleted file mode 100644 (file)
index 3270a49..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef __globals_hh__
-#define __globals_hh__
-
-#define TML_NS_URI    "http://helm.cs.unibo.it/2002/TML"
-#define XMLNS_NS_URI  "http://www.w3.org/2000/xmlns/"
-#define MATHML_NS_URI "http://www.w3.org/1998/Math/MathML"
-
-#endif // __globals_hh__
diff --git a/helm/DEVEL/mathml_editor/test/.cvsignore b/helm/DEVEL/mathml_editor/test/.cvsignore
deleted file mode 100644 (file)
index bdefc79..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-editor
diff --git a/helm/DEVEL/mathml_editor/test/Makefile.am b/helm/DEVEL/mathml_editor/test/Makefile.am
deleted file mode 100644 (file)
index edf73ee..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-noinst_PROGRAMS = editor
-
-editor_SOURCES = editor.cc guiGTK.c aux.cc
-
-noinst_HEADERS = guiGTK.h
-
-LDADDS = \
-  $(GMETADOM_LIBS) \
-  $(GDOMEXSLT_LIBS) \
-  $(GTKMATHVIEW_LIBS) \
-  $(top_builddir)/src/.libs/libeditex.a
-
-editor_LDADD = $(LDADDS)
-
-INCLUDES = \
-  $(GMETADOM_CFLAGS) \
-  $(GDOMEXSLT_CFLAGS) \
-  $(GTKMATHVIEW_CFLAGS) \
-  -I$(top_srcdir)/src
-
diff --git a/helm/DEVEL/mathml_editor/test/Makefile.in b/helm/DEVEL/mathml_editor/test/Makefile.in
deleted file mode 100644 (file)
index df6bac5..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
-
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-SHELL = @SHELL@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-host_alias = @host_alias@
-host_triplet = @host@
-AS = @AS@
-CC = @CC@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-DLLTOOL = @DLLTOOL@
-ECHO = @ECHO@
-EDITEX_VERSION_INFO = @EDITEX_VERSION_INFO@
-EXEEXT = @EXEEXT@
-GDOMEXSLT_CFLAGS = @GDOMEXSLT_CFLAGS@
-GDOMEXSLT_LIBS = @GDOMEXSLT_LIBS@
-GMETADOM_CFLAGS = @GMETADOM_CFLAGS@
-GMETADOM_LIBS = @GMETADOM_LIBS@
-GTKMATHVIEW_CFLAGS = @GTKMATHVIEW_CFLAGS@
-GTKMATHVIEW_LIBS = @GTKMATHVIEW_LIBS@
-HAVE_OCAMLC = @HAVE_OCAMLC@
-HAVE_OCAMLDEP = @HAVE_OCAMLDEP@
-HAVE_OCAMLFIND = @HAVE_OCAMLFIND@
-HAVE_OCAMLMKLIB = @HAVE_OCAMLMKLIB@
-HAVE_OCAMLOPT = @HAVE_OCAMLOPT@
-LDFLAGS = @LDFLAGS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
-MLGDOME_CFLAGS = @MLGDOME_CFLAGS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OCAMLC = @OCAMLC@
-OCAMLDEP = @OCAMLDEP@
-OCAMLFIND = @OCAMLFIND@
-OCAMLMKLIB = @OCAMLMKLIB@
-OCAMLOPT = @OCAMLOPT@
-OCAMLSTDLIBDIR = @OCAMLSTDLIBDIR@
-OCAMLSTUBDIR = @OCAMLSTUBDIR@
-OCAML_INCLUDE_DIR = @OCAML_INCLUDE_DIR@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-STRIP = @STRIP@
-VERSION = @VERSION@
-
-noinst_PROGRAMS = editor
-
-editor_SOURCES = editor.cc guiGTK.c aux.cc
-
-noinst_HEADERS = guiGTK.h
-
-LDADDS =    $(GMETADOM_LIBS)   $(GDOMEXSLT_LIBS)   $(GTKMATHVIEW_LIBS)   $(top_builddir)/src/.libs/libeditex.a
-
-
-editor_LDADD = $(LDADDS)
-
-INCLUDES =    $(GMETADOM_CFLAGS)   $(GDOMEXSLT_CFLAGS)   $(GTKMATHVIEW_CFLAGS)   -I$(top_srcdir)/src
-
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES = 
-noinst_PROGRAMS =  editor$(EXEEXT)
-PROGRAMS =  $(noinst_PROGRAMS)
-
-
-DEFS = @DEFS@ -I. -I$(srcdir) -I..
-LIBS = @LIBS@
-editor_OBJECTS =  editor.$(OBJEXT) guiGTK.$(OBJEXT) aux.$(OBJEXT)
-editor_DEPENDENCIES =  $(top_builddir)/src/.libs/libeditex.a
-editor_LDFLAGS = 
-CXXFLAGS = @CXXFLAGS@
-CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-HEADERS =  $(noinst_HEADERS)
-
-DIST_COMMON =  Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP_ENV = --best
-DEP_FILES =  .deps/aux.P .deps/editor.P .deps/guiGTK.P
-SOURCES = $(editor_SOURCES)
-OBJECTS = $(editor_OBJECTS)
-
-all: all-redirect
-.SUFFIXES:
-.SUFFIXES: .S .c .cc .lo .o .obj .s
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 
-       cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile
-
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
-       cd $(top_builddir) \
-         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-mostlyclean-noinstPROGRAMS:
-
-clean-noinstPROGRAMS:
-       -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
-
-distclean-noinstPROGRAMS:
-
-maintainer-clean-noinstPROGRAMS:
-
-# FIXME: We should only use cygpath when building on Windows,
-# and only if it is available.
-.c.obj:
-       $(COMPILE) -c `cygpath -w $<`
-
-.s.o:
-       $(COMPILE) -c $<
-
-.S.o:
-       $(COMPILE) -c $<
-
-mostlyclean-compile:
-       -rm -f *.o core *.core
-       -rm -f *.$(OBJEXT)
-
-clean-compile:
-
-distclean-compile:
-       -rm -f *.tab.c
-
-maintainer-clean-compile:
-
-.s.lo:
-       $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-.S.lo:
-       $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-mostlyclean-libtool:
-       -rm -f *.lo
-
-clean-libtool:
-       -rm -rf .libs _libs
-
-distclean-libtool:
-
-maintainer-clean-libtool:
-
-editor$(EXEEXT): $(editor_OBJECTS) $(editor_DEPENDENCIES)
-       @rm -f editor$(EXEEXT)
-       $(CXXLINK) $(editor_LDFLAGS) $(editor_OBJECTS) $(editor_LDADD) $(LIBS)
-.cc.o:
-       $(CXXCOMPILE) -c $<
-.cc.obj:
-       $(CXXCOMPILE) -c `cygpath -w $<`
-.cc.lo:
-       $(LTCXXCOMPILE) -c $<
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP)
-       list='$(SOURCES) $(HEADERS)'; \
-       unique=`for i in $$list; do echo $$i; done | \
-         awk '    { files[$$0] = 1; } \
-              END { for (i in files) print i; }'`; \
-       here=`pwd` && cd $(srcdir) \
-         && mkid -f$$here/ID $$unique $(LISP)
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
-       tags=; \
-       here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)'; \
-       unique=`for i in $$list; do echo $$i; done | \
-         awk '    { files[$$0] = 1; } \
-              END { for (i in files) print i; }'`; \
-       test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
-         || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
-
-mostlyclean-tags:
-
-clean-tags:
-
-distclean-tags:
-       -rm -f TAGS ID
-
-maintainer-clean-tags:
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = test
-
-distdir: $(DISTFILES)
-       here=`cd $(top_builddir) && pwd`; \
-       top_distdir=`cd $(top_distdir) && pwd`; \
-       distdir=`cd $(distdir) && pwd`; \
-       cd $(top_srcdir) \
-         && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu test/Makefile
-       @for file in $(DISTFILES); do \
-         d=$(srcdir); \
-         if test -d $$d/$$file; then \
-           cp -pr $$d/$$file $(distdir)/$$file; \
-         else \
-           test -f $(distdir)/$$file \
-           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
-           || cp -p $$d/$$file $(distdir)/$$file || :; \
-         fi; \
-       done
-
-DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-
--include $(DEP_FILES)
-
-mostlyclean-depend:
-
-clean-depend:
-
-distclean-depend:
-       -rm -rf .deps
-
-maintainer-clean-depend:
-
-%.o: %.c
-       @echo '$(COMPILE) -c $<'; \
-       $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
-       @-cp .deps/$(*F).pp .deps/$(*F).P; \
-       tr ' ' '\012' < .deps/$(*F).pp \
-         | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
-           >> .deps/$(*F).P; \
-       rm .deps/$(*F).pp
-
-%.lo: %.c
-       @echo '$(LTCOMPILE) -c $<'; \
-       $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
-       @-sed -e 's/^\([^:]*\)\.o[      ]*:/\1.lo \1.o :/' \
-         < .deps/$(*F).pp > .deps/$(*F).P; \
-       tr ' ' '\012' < .deps/$(*F).pp \
-         | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
-           >> .deps/$(*F).P; \
-       rm -f .deps/$(*F).pp
-
-%.o: %.cc
-       @echo '$(CXXCOMPILE) -c $<'; \
-       $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
-       @-cp .deps/$(*F).pp .deps/$(*F).P; \
-       tr ' ' '\012' < .deps/$(*F).pp \
-         | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
-           >> .deps/$(*F).P; \
-       rm .deps/$(*F).pp
-
-%.lo: %.cc
-       @echo '$(LTCXXCOMPILE) -c $<'; \
-       $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
-       @-sed -e 's/^\([^:]*\)\.o[      ]*:/\1.lo \1.o :/' \
-         < .deps/$(*F).pp > .deps/$(*F).P; \
-       tr ' ' '\012' < .deps/$(*F).pp \
-         | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
-           >> .deps/$(*F).P; \
-       rm -f .deps/$(*F).pp
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
-check-am: all-am
-check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-exec-am:
-install-exec: install-exec-am
-
-install-data-am:
-install-data: install-data-am
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
-uninstall-am:
-uninstall: uninstall-am
-all-am: Makefile $(PROGRAMS) $(HEADERS)
-all-redirect: all-am
-install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
-
-
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-       -rm -f Makefile $(CONFIG_CLEAN_FILES)
-       -rm -f config.cache config.log stamp-h stamp-h[0-9]*
-
-maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-noinstPROGRAMS mostlyclean-compile \
-               mostlyclean-libtool mostlyclean-tags mostlyclean-depend \
-               mostlyclean-generic
-
-mostlyclean: mostlyclean-am
-
-clean-am:  clean-noinstPROGRAMS clean-compile clean-libtool clean-tags \
-               clean-depend clean-generic mostlyclean-am
-
-clean: clean-am
-
-distclean-am:  distclean-noinstPROGRAMS distclean-compile \
-               distclean-libtool distclean-tags distclean-depend \
-               distclean-generic clean-am
-       -rm -f libtool
-
-distclean: distclean-am
-
-maintainer-clean-am:  maintainer-clean-noinstPROGRAMS \
-               maintainer-clean-compile maintainer-clean-libtool \
-               maintainer-clean-tags maintainer-clean-depend \
-               maintainer-clean-generic distclean-am
-       @echo "This command is intended for maintainers to use;"
-       @echo "it deletes files that may require special tools to rebuild."
-
-maintainer-clean: maintainer-clean-am
-
-.PHONY: mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \
-clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \
-mostlyclean-compile distclean-compile clean-compile \
-maintainer-clean-compile mostlyclean-libtool distclean-libtool \
-clean-libtool maintainer-clean-libtool tags mostlyclean-tags \
-distclean-tags clean-tags maintainer-clean-tags distdir \
-mostlyclean-depend distclean-depend clean-depend \
-maintainer-clean-depend info-am info dvi-am dvi check check-am \
-installcheck-am installcheck install-exec-am install-exec \
-install-data-am install-data install-am install uninstall-am uninstall \
-all-redirect all-am all installdirs mostlyclean-generic \
-distclean-generic clean-generic maintainer-clean-generic clean \
-mostlyclean distclean maintainer-clean
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/helm/DEVEL/mathml_editor/test/aux.cc b/helm/DEVEL/mathml_editor/test/aux.cc
deleted file mode 100644 (file)
index bb17013..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <config.h>
-#include <assert.h>
-
-#include <gdome.h>
-#include <gdome-util.h>
-#include <GdomeSmartDOM.hh>
-
-//#include "gmetadom.hh"
-
-namespace DOM = GdomeSmartDOM;
-
-static unsigned
-getDepth(const DOM::Element& elem)
-{
-  unsigned length = 0;
-  DOM::Element p = elem;
-
-  while (p)
-    {
-      p = p.get_parentNode();
-      length++;
-    }
-
-  return length;
-}
-
-static DOM::Element
-findCommonAncestor(const DOM::Element& first, const DOM::Element& last)
-{
-  assert(first);
-  assert(last);
-
-  DOM::Element p(first);
-  DOM::Element q(last);
-
-  if (p != q)
-    {
-      unsigned pDepth = getDepth(p);
-      unsigned qDepth  = getDepth(q);
-
-      while (p && pDepth > qDepth)
-       {
-         p = p.get_parentNode();
-         pDepth--;
-       }
-
-      while (q && qDepth > pDepth)
-       {
-         q = q.get_parentNode();
-         qDepth--;
-       }
-
-      assert(pDepth == qDepth);
-
-      while (p && q && p != q)
-       {
-         p = p.get_parentNode();
-         q = q.get_parentNode();
-       }
-    }
-  
-  return p;
-}
-
-static void
-findCommonSiblings(const DOM::Element& first, const DOM::Element& last,
-                  DOM::Element& firstS, DOM::Element& lastS)
-{
-  assert(first);
-  assert(last);
-
-  DOM::Element p(first);
-  DOM::Element q(last);
-
-  if (p != q)
-    {
-      unsigned pDepth = getDepth(p);
-      unsigned qDepth  = getDepth(q);
-
-      while (p && pDepth > qDepth)
-       {
-         p = p.get_parentNode();
-         pDepth--;
-       }
-
-      while (q && qDepth > pDepth)
-       {
-         q = q.get_parentNode();
-         qDepth--;
-       }
-
-      assert(pDepth == qDepth);
-
-      while (p && q && p.get_parentNode() != q.get_parentNode())
-       {
-         p = p.get_parentNode();
-         q = q.get_parentNode();
-       }
-    }
-
-  firstS = p;
-  lastS = q;
-}
-
-static DOM::Element
-findElementWithRef(const DOM::Element& el)
-{
-  DOM::Element p = el;
-  while (p && !p.hasAttribute("xref")) p = p.get_parentNode();
-  return p;
-}
-
-static DOM::Node
-leftmostChild(const DOM::Node& node)
-{
-  if (!node) return node;
-
-  DOM::Node firstChild = node.get_firstChild();
-  if (!firstChild) return node;
-
-  return leftmostChild(firstChild);
-}
-
-static DOM::Node
-rightmostChild(const DOM::Node& node)
-{
-  if (!node) return node;
-
-  DOM::Node lastChild = node.get_lastChild();
-  if (!lastChild) return node;
-
-  return rightmostChild(lastChild);
-}
-
-static DOM::Node
-leftSibling(const DOM::Node& node)
-{
-  DOM::Node p = node;
-
-  if (!p) return p;
-
-  while (p.get_parentNode() && p.get_parentNode().get_firstChild() == p)
-    p = p.get_parentNode();
-
-  if (!p.get_parentNode()) return DOM::Node(0);
-
-  DOM::Node prevSibling = p.get_previousSibling();
-  assert(prevSibling);
-
-  return rightmostChild(prevSibling);
-}
-
-static DOM::Node
-rightSibling(const DOM::Node& node)
-{
-  DOM::Node p = node;
-
-  if (!p) return p;
-
-  DOM::Node firstChild = p.get_firstChild();
-  if (firstChild) return firstChild;
-
-  while (p.get_parentNode() && p.get_parentNode().get_lastChild() == p)
-    p = p.get_parentNode();
-
-  if (!p.get_parentNode()) return DOM::Node(0);
-
-  DOM::Node nextSibling = p.get_nextSibling();
-  assert(nextSibling);
-
-  return leftmostChild(nextSibling);
-}
-
-extern "C" GdomeElement*
-find_common_ancestor(GdomeElement* first, GdomeElement* last)
-{
-  if (GdomeNode* n = findCommonAncestor(DOM::Element(first), DOM::Element(last)).gdome_object())
-    {
-      GdomeElement* res = gdome_cast_el(n);
-      g_assert(res != NULL);
-      return res;
-    }
-  else
-    return NULL;
-}
-
-extern "C" void
-find_common_siblings(GdomeElement* first, GdomeElement* last,
-                    GdomeElement** firstS, GdomeElement** lastS)
-{
-  DOM::Element fs(0);
-  DOM::Element ls(0);
-
-  findCommonSiblings(DOM::Element(first), DOM::Element(last), fs, ls);
-
-  if (firstS != NULL) *firstS = gdome_cast_el(fs.gdome_object());
-  if (lastS != NULL) *lastS = gdome_cast_el(ls.gdome_object());
-}
-
-extern "C" GdomeElement*
-find_element_with_ref(GdomeElement* elem)
-{
-  if (GdomeNode* n = findElementWithRef(DOM::Element(elem)).gdome_object())
-    {
-      GdomeElement* res = gdome_cast_el(n);
-      g_assert(res != NULL);
-      return res;
-    }
-  else
-    return NULL;
-}
-
-extern "C" GdomeElement*
-find_common_ancestor_with_ref(GdomeElement* first, GdomeElement* last)
-{
-  if (GdomeNode* n = findElementWithRef(findCommonAncestor(DOM::Element(first), DOM::Element(last))).gdome_object())
-    {
-      GdomeElement* res = gdome_cast_el(n);
-      g_assert(res != NULL);
-      return res;
-    }
-  else
-    return NULL;
-}
-
-extern "C" void
-delete_element(GdomeElement* elem)
-{
-  DOM::Element p(elem);
-
-  DOM::Element parent = p.get_parentNode();
-  assert(parent);
-
-  parent.removeChild(p);
-}
-
diff --git a/helm/DEVEL/mathml_editor/test/editor.cc b/helm/DEVEL/mathml_editor/test/editor.cc
deleted file mode 100644 (file)
index 38c8bbb..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <cassert>
-
-#include "dom.hh"
-#include "TPushParser.hh"
-
-#include "ILPushLexer.hh"
-#include "TDictionary.hh"
-#include "CLoggerConsole.hh"
-#include "CMathMLFactoryXSLT.hh"
-#include "CMathMLFactoryXSLTDiff.hh"
-#include "AMathMLConsumer.hh"
-
-#include "guiGTK.h"
-
-extern void *parseMathMLFile(char *);
-
-struct Context
-{
-  /*
-  Context(const std::string& s, TPushLexer& l, TPushParser& p) : buffer(s), i(0), lexer(l), parser(p) { };
-  */
-  Context(const std::string& s, APushLexer& l, TPushParser& p, DOMX::XSLTStylesheet& ts) 
-    : buffer(s), i(0), lexer(l), parser(p), texStyle(ts) { };
-
-  void send(void)
-  {
-    if (i < buffer.length()) lexer.push(buffer[i++]);
-  }
-
-  std::string buffer;
-  unsigned i;
-  APushLexer& lexer;
-  TPushParser& parser;
-  DOMX::XSLTStylesheet& texStyle;
-};
-
-extern "C" void
-edit_output_tex(Context* data)
-{
-  assert(data);
-  DOM::Document res = data->texStyle.apply(data->parser.document());
-#if 0
-  res.normalize();
-  DOM::Node c = res.get_firstChild();
-  if (c) std::cout << "HEY, there is a child! " << c.get_nodeName() << " " << c.get_nodeValue() << std::endl;
-#endif
-  data->texStyle.save(res, stdout);
-}
-
-extern "C" int
-edit_timeout(Context* data)
-{
-  assert(data);
-  GUI_freeze();
-  data->send();
-  GUI_thaw();
-  return 1;
-}
-
-extern "C" void
-edit_push_char(Context* context, gchar ch)
-{
-  assert(context != NULL);
-  GUI_freeze();
-  std::cout << "*** SENDING " << ch << std::endl;
-  context->lexer.push(ch);
-  GUI_thaw();
-}
-
-#include <unistd.h>
-
-extern "C" void
-edit_push_string(Context* context, const gchar* s)
-{
-  assert(context != NULL);
-  assert(s != NULL);
-#if 0
-//   GUI_freeze();
-//   context->parser.freeze();
-  for (unsigned i = 0; s[i]; i++)
-    {
-      GUI_freeze();
-      context->lexer.push(s[i]);
-      GUI_thaw();
-      usleep(100000);
-      usleep(100000);
-    }
-//   context->parser.thaw();
-//   GUI_thaw();
-#endif
-  context->buffer = s;
-}
-
-extern "C" void
-edit_drop(Context* context, gboolean alt, gboolean control)
-{
-  // At the moment, the last parameter is not used, but it will
-  // be useful when we will handle the "fast" deletion
-  assert(context != NULL);
-  GUI_freeze();
-  context->lexer.drop(alt);
-  GUI_thaw();
-}
-
-extern "C" void
-edit_reset_tex(Context* context)
-{
-  assert(context != NULL);
-  GUI_freeze();
-  context->lexer.reset();
-  context->parser.reset();
-  GUI_thaw();
-}
-
-extern "C" void
-edit_complete(Context* context)
-{
-  assert(context != NULL);
-  GUI_freeze();
-  if (!context->lexer.complete()) context->lexer.push('\t');
-  GUI_thaw();
-}
-
-int
-main(int argc, char* argv[])
-{
-  CLoggerConsole logger;
-  logger.verbosity(ALogger::Debug);
-
-  TDictionary dictionary(logger);
-  logger.info("loading the dictionary...");
-  dictionary.load("/usr/share/editex/dictionary-tex.xml");
-
-  logger.info("loading the stylesheet...");
-  DOM::DOMImplementation di;
-  DOM::Document mmlStyleDoc = di.createDocumentFromURI("./xsl/tml-mmlp.xsl");
-  DOMX::XSLTStylesheet mmlStyle(mmlStyleDoc);
-
-  DOM::Document texStyleDoc = di.createDocumentFromURI("./xsl/tml-texid.xsl");
-  DOMX::XSLTStylesheet texStyle(texStyleDoc);
-
-  CMathMLFactoryXSLTDiff factory(logger, mmlStyle);
-  TPushParser parser(logger, factory, dictionary);
-  ILPushLexer lexer(logger, parser, dictionary);
-
-#if 0
-  lexer.push('$');
-  lexer.push(' ');
-  assert(result);
-#endif
-
-#if 0
-  DOM::Document doc = parser.document().document();
-  std::vector< std::pair<DOM::GdomeString, DOM::GdomeString> > np;
-  result = style.apply(doc, np);
-  style.save(result, stdout);
-#endif
-
-  Context context("", lexer, parser, texStyle);
-
-  GUI_init(&argc, &argv, "EditTeX", 500, 600, &context);
-  GUI_load_document(gdome_cast_doc(static_cast<GdomeNode*>(factory.document())));
-  GUI_run();
-  GUI_uninit();
-  GUI_unload_document();
-
-}
diff --git a/helm/DEVEL/mathml_editor/test/guiGTK.c b/helm/DEVEL/mathml_editor/test/guiGTK.c
deleted file mode 100644 (file)
index 01994ea..0000000
+++ /dev/null
@@ -1,685 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include <gtkmathview/gtkmathview.h>
-#include "guiGTK.h"
-
-#define XLINK_NS_URI "http://www.w3.org/1999/xlink"
-
-static GtkWidget* window;
-static GtkWidget* main_area;
-static GtkWidget* scrolled_area;
-static GtkMenuItem* anti_aliasing_item;
-static GtkMenuItem* transparency_item;
-
-static gpointer context = NULL;
-static gchar* doc_name = NULL;
-static GdomeElement* first_selected = NULL;
-static GdomeElement* root_selected = NULL;
-
-static void create_widget_set(gpointer);
-static GtkWidget* get_main_menu(void);
-static void file_open(GtkWidget*, gpointer);
-static void file_re_open(GtkWidget*, gpointer);
-static void file_close(GtkWidget*, gpointer);
-static void file_output_tex(GtkWidget*, gpointer);
-static void options_font_manager(GtkWidget*, FontManagerId);
-static void options_set_font_size(GtkWidget*, gpointer);
-static void options_change_font_size(GtkWidget*, gboolean);
-static void options_verbosity(GtkWidget*, guint);
-static void options_anti_aliasing(GtkWidget*, gpointer);
-static void options_transparency(GtkWidget*, gpointer);
-static void edit_delete_selection(GtkWidget*, gpointer);
-static void edit_select_parent(GtkWidget*, gpointer);
-static void edit_reset_selection(GtkWidget*, gpointer);
-static void edit_reset(GtkWidget*, gpointer);
-static void edit_insert(GtkWidget*, gpointer);
-static void help_about(GtkWidget*, gpointer);
-
-static GtkItemFactoryEntry menu_items[] = {
-  { "/_File",                          NULL,         NULL,          0, "<Branch>" },
-  { "/File/_Open...",                  "<control>O", file_open,     0, NULL },
-  { "/File/_Reopen",                   NULL,         file_re_open,  0, NULL },
-  { "/File/_Close",                    "<control>W", file_close,    0, NULL },
-  { "/File/Output _TeX",               NULL,         file_output_tex, 0, NULL },
-  { "/File/sep1",                      NULL,         NULL,          0, "<Separator>" },
-  { "/File/_Quit",                     "<control>Q", gtk_main_quit, 0, NULL },
-
-  { "/_Edit",                          NULL, NULL,                  0,  "<Branch>" },
-  { "/Edit/Reset Selection",           NULL, edit_reset_selection,  0, NULL },
-  { "/Edit/Delete Selection",          NULL, edit_delete_selection, 0, NULL },
-  { "/Edit/Select Parent",             NULL, edit_select_parent,    0, NULL },
-  { "/Edit/sep1",                      NULL,         NULL,          0, "<Separator>" },
-  { "/Edit/_Reset",                    NULL, edit_reset,            0, NULL },
-  { "/Edit/Insert...",                 "<control>I", edit_insert,   0, NULL },
-
-  { "/_Options",                       NULL, NULL,                  0,  "<Branch>" },
-  { "/Options/Default _Font Size",     NULL, NULL,                  0,  "<Branch>" },
-  { "/Options/Default Font Size/Set...", NULL, options_set_font_size, 0,  NULL },
-  { "/Options/Default Font Size/sep1", NULL, NULL,                  0,  "<Separator>" },
-  { "/Options/Default Font Size/Larger", NULL, options_change_font_size, TRUE, NULL },
-  { "/Options/Default Font Size/Smaller", NULL, options_change_font_size, FALSE, NULL },
-  { "/Options/Font Manager",           NULL, NULL,                  0,  "<Branch>" },
-  { "/Options/Font Manager/_GTK",      NULL, options_font_manager,  FONT_MANAGER_GTK, "<RadioItem>" },
-  { "/Options/Font Manager/_Type 1",   NULL, options_font_manager,  FONT_MANAGER_T1, "/Options/Font Manager/GTK" },
-  { "/Options/Verbosity",              NULL, NULL,                  0,  "<Branch>" },
-  { "/Options/Verbosity/_Errors",      NULL, options_verbosity,     0,  "<RadioItem>" },
-  { "/Options/Verbosity/_Warnings",    NULL, options_verbosity,     1,  "/Options/Verbosity/Errors" },
-  { "/Options/Verbosity/_Info",        NULL, options_verbosity,     2,  "/Options/Verbosity/Errors" },
-  { "/Options/Verbosity/_Debug",       NULL, options_verbosity,     3,  "/Options/Verbosity/Errors" },
-  { "/Options/sep1",                   NULL, NULL,                  0,  "<Separator>" },
-  { "/Options/_Anti Aliasing",         NULL, options_anti_aliasing, 0,  "<ToggleItem>" },
-  { "/Options/_Transparency",          NULL, options_transparency,  0,  "<ToggleItem>" },
-
-  { "/_Help" ,        NULL,         NULL,          0, "<LastBranch>" },
-  { "/Help/About...", NULL,         help_about,    0, NULL }
-};
-
-static void
-quick_message(const char* msg)
-{
-  GtkWidget* dialog;
-  GtkWidget* label;
-  GtkWidget* okay_button;
-     
-  /* Create the widgets */
-     
-  dialog = gtk_dialog_new();
-  label = gtk_label_new (msg);
-  okay_button = gtk_button_new_with_label("OK");
-
-  gtk_widget_set_usize(dialog, 300, 100);
-
-  /* Ensure that the dialog box is destroyed when the user clicks ok. */
-     
-  gtk_signal_connect_object (GTK_OBJECT (okay_button), "clicked",
-                            GTK_SIGNAL_FUNC (gtk_widget_destroy), dialog);
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area),
-                    okay_button);
-  
-  /* Add the label, and show everything we've added to the dialog. */
-  
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label);
-  gtk_widget_show_all (dialog);
-}
-
-static void
-load_error_msg(const char* name)
-{
-  char* msg = g_strdup_printf("Could not load\n`%s'", name);
-  quick_message(msg);
-  g_free(msg);
-}
-
-static guint edit_timeout_id;
-extern void edit_timeout(gpointer);
-
-void
-GUI_init(int* argc, char*** argv, char* title, guint width, guint height, gpointer c)
-{
-  gtk_init(argc, argv);
-
-  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-  gtk_window_set_title(GTK_WINDOW(window), title);
-  gtk_window_set_default_size(GTK_WINDOW(window), width, height);
-  gtk_signal_connect(GTK_OBJECT(window), "delete_event", (GtkSignalFunc) gtk_main_quit, NULL);
-  create_widget_set(context);
-
-  gtk_widget_show(window);
-
-  context = c;
-  /*edit_timeout_id = gtk_timeout_add(50, edit_timeout, context);*/
-}
-
-void
-GUI_uninit()
-{
-  GdomeException exc = 0;
-
-  if (first_selected != NULL)
-    {
-      gdome_el_unref(first_selected, &exc);
-      g_assert(exc == 0);
-      first_selected = NULL;
-    }
-
-  if (root_selected != NULL)
-    {
-      gdome_el_unref(root_selected, &exc);
-      g_assert(exc == 0);
-      root_selected = NULL;
-    }
-
-  context = NULL;
-}
-
-int
-GUI_load_document(GdomeDocument* doc)
-{
-  GtkMathView* math_view;
-
-  g_return_val_if_fail(doc != NULL, -1);
-  g_return_val_if_fail(main_area != NULL, -1);
-  g_return_val_if_fail(GTK_IS_MATH_VIEW(main_area), -1);
-
-  math_view = GTK_MATH_VIEW(main_area);
-
-  if (!gtk_math_view_load_doc(math_view, doc)) return -1;
-
-  return 0;
-}
-
-void
-GUI_freeze()
-{
-  gtk_math_view_freeze(GTK_MATH_VIEW(main_area));
-}
-
-void
-GUI_thaw()
-{
-  gtk_math_view_thaw(GTK_MATH_VIEW(main_area));
-}
-
-void
-GUI_unload_document()
-{
-  GtkMathView* math_view;
-
-  g_return_if_fail(main_area != NULL);
-  g_return_if_fail(GTK_IS_MATH_VIEW(main_area));
-
-  math_view = GTK_MATH_VIEW(main_area);
-
-  gtk_math_view_unload(math_view);
-
-  if (doc_name != NULL) g_free(doc_name);
-  doc_name = NULL;
-}
-
-void
-GUI_run()
-{
-  gtk_main();
-}
-
-void
-GUI_set_font_manager(FontManagerId id)
-{
-  gboolean t1;
-  GtkMathView* math_view;
-
-  g_return_if_fail(id != FONT_MANAGER_UNKNOWN);
-  g_return_if_fail(main_area != NULL);
-  g_return_if_fail(GTK_IS_MATH_VIEW(main_area));
-
-  t1 = id == FONT_MANAGER_T1;
-
-  math_view = GTK_MATH_VIEW(main_area);
-
-  gtk_math_view_freeze(math_view);
-
-  if (id != gtk_math_view_get_font_manager_type(math_view))
-    gtk_math_view_set_font_manager_type(math_view, id);
-
-  gtk_widget_set_sensitive(anti_aliasing_item, t1);
-  gtk_widget_set_sensitive(transparency_item, t1);
-
-  if (t1)
-    {
-      gtk_math_view_set_anti_aliasing(math_view, GTK_CHECK_MENU_ITEM(anti_aliasing_item)->active);
-      gtk_math_view_set_transparency(math_view, GTK_CHECK_MENU_ITEM(transparency_item)->active);
-    }
-
-  gtk_math_view_thaw(math_view);
-}
-
-static void
-store_filename(GtkFileSelection* selector, GtkWidget* user_data)
-{
-  gchar* selected_filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION(user_data));
-  if (selected_filename != NULL)
-    GUI_load_document(selected_filename);
-}
-
-static void
-file_close(GtkWidget* widget, gpointer data)
-{
-  GUI_unload_document();
-}
-
-static void
-file_re_open(GtkWidget* widget, gpointer data)
-{
-  if (doc_name != NULL) {
-    GUI_load_document(doc_name);
-  }
-}
-
-static void
-file_open(GtkWidget* widget, gpointer data)
-{
-  GtkWidget* fs = gtk_file_selection_new("Open File");
-
-  gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(fs)->ok_button),
-                     "clicked", GTK_SIGNAL_FUNC (store_filename), (gpointer) fs);
-                             
-  /* Ensure that the dialog box is destroyed when the user clicks a button. */
-     
-  gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(fs)->ok_button),
-                            "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
-                            (gpointer) fs);
-
-  gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(fs)->cancel_button),
-                            "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
-                            (gpointer) fs);
-     
-  /* Display that dialog */
-     
-  gtk_widget_show (fs);
-}
-
-static void
-file_output_tex(GtkWidget* widget, gpointer data)
-{
-  g_assert(context != NULL);
-  edit_output_tex(context);
-}
-
-static void
-options_font_manager(GtkWidget* widget, FontManagerId id)
-{
-  g_return_if_fail(id != FONT_MANAGER_UNKNOWN);
-  GUI_set_font_manager(id);
-}
-
-static void
-options_anti_aliasing(GtkWidget* widget, gpointer data)
-{
-  gboolean aa = gtk_math_view_get_anti_aliasing(GTK_MATH_VIEW(main_area));
-  gtk_math_view_set_anti_aliasing(GTK_MATH_VIEW(main_area), !aa);
-}
-
-static void
-options_transparency(GtkWidget* widget, gpointer data)
-{
-  gboolean t = gtk_math_view_get_transparency(GTK_MATH_VIEW(main_area));
-  gtk_math_view_set_transparency(GTK_MATH_VIEW(main_area), !t);
-}
-
-static void
-options_verbosity(GtkWidget* widget, guint level)
-{
-  gtk_math_view_set_log_verbosity(GTK_MATH_VIEW(main_area), level);
-}
-
-static void
-edit_delete_selection(GtkWidget* widget, gpointer data)
-{
-  if (root_selected != NULL)
-    {
-      GdomeException exc;
-      gtk_math_view_freeze(GTK_MATH_VIEW(main_area));
-      printf("about to remove element %p\n", root_selected);
-      delete_element(root_selected);
-      gdome_el_unref(root_selected, &exc);
-      g_assert(exc == 0);
-      root_selected = NULL;
-      gtk_math_view_thaw(GTK_MATH_VIEW(main_area));
-    }
-}
-
-static void
-edit_select_parent(GtkWidget* widget, gpointer data)
-{
-  if (root_selected != NULL)
-    {
-      GdomeException exc = 0;
-      GdomeElement* parent = gdome_n_parentNode(root_selected, &exc);
-      g_assert(exc == 0);
-      gdome_el_unref(root_selected, &exc);
-      g_assert(exc == 0);
-      root_selected = parent;
-      /* gtk_math_view_set_selection(GTK_MATH_VIEW(main_area), root_selected); */
-    }
-}
-
-static void
-edit_reset_selection(GtkWidget* widget, gpointer data)
-{
-  if (root_selected != NULL)
-    {
-      GdomeException exc = 0;
-      /* gtk_math_view_reset_selection(GTK_MATH_VIEW(main_area), root_selected); */
-      gdome_el_unref(root_selected, &exc);
-      g_assert(exc == 0);
-      root_selected = NULL;
-    }
-}
-
-static void
-edit_reset(GtkWidget* widget, gpointer data)
-{
-  g_assert(context != NULL);
-  edit_reset_tex(context);
-}
-
-static void
-insert_tex(GtkWidget* widget, GtkEntry* entry)
-{
-  gchar* text;
-  g_return_if_fail(entry != NULL);
-
-  text = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
-  edit_push_string(context, text);
-  g_free(text);
-}
-
-static void
-edit_insert(GtkWidget* widget, gpointer data)
-{
-  GtkWidget* dialog;
-  GtkWidget* entry;
-  GtkWidget* ok;
-  GtkWidget* cancel;
-
-  dialog = gtk_dialog_new();
-  entry = gtk_entry_new();
-  ok = gtk_button_new_with_label("OK");
-  cancel = gtk_button_new_with_label("Cancel");
-
-  gtk_signal_connect (GTK_OBJECT (ok), "clicked",
-                     GTK_SIGNAL_FUNC (insert_tex), (gpointer) entry);
-
-  gtk_signal_connect_object (GTK_OBJECT (ok), "clicked",
-                            GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog);
-
-  gtk_signal_connect_object (GTK_OBJECT (ok), "clicked",
-                            GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog);
-
-  gtk_signal_connect_object (GTK_OBJECT (cancel), "clicked",
-                            GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog);
-
-  gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), 5);
-
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), entry);
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), ok);
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), cancel);
-
-  gtk_widget_show_all (dialog);
-}
-
-static void
-help_about(GtkWidget* widget, gpointer data)
-{
-  GtkWidget* dialog;
-  GtkWidget* label;
-  GtkWidget* ok;
-
-  dialog = gtk_dialog_new();
-  label = gtk_label_new("\n    MathML Editor    \n    Copyright (C) 2003 Luca Padovani    \n");
-  ok = gtk_button_new_with_label("Close");
-
-  gtk_signal_connect_object (GTK_OBJECT (ok), "clicked",
-                            GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog);
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area),
-                    ok);
-
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label);
-
-  gtk_widget_show_all (dialog);
-}
-
-static void
-change_default_font_size(GtkWidget* widget, GtkSpinButton* spin)
-{
-  g_return_if_fail(spin != NULL);
-  gtk_math_view_set_font_size( GTK_MATH_VIEW(main_area), gtk_spin_button_get_value_as_int(spin));
-}
-
-static void
-options_change_font_size(GtkWidget* widget, gboolean larger)
-{
-  gfloat size = gtk_math_view_get_font_size (GTK_MATH_VIEW(main_area));
-  if (larger) size = size / 0.71;
-  else size = size * 0.71;
-  if (size < 1) size = 1;
-  gtk_math_view_set_font_size (GTK_MATH_VIEW(main_area), (gint) size + 0.5);
-}
-
-static void
-options_set_font_size(GtkWidget* widget, gpointer data)
-{
-  GtkWidget* dialog;
-  GtkWidget* label;
-  GtkWidget* ok;
-  GtkWidget* cancel;
-  GtkWidget* spin;
-  GtkObject* adj;
-
-  dialog = gtk_dialog_new();
-  label = gtk_label_new("Default font size:");
-  ok = gtk_button_new_with_label("OK");
-  cancel = gtk_button_new_with_label("Cancel");
-
-  adj = gtk_adjustment_new (gtk_math_view_get_font_size (GTK_MATH_VIEW(main_area)), 1, 200, 1, 1, 1);
-  spin = gtk_spin_button_new (GTK_ADJUSTMENT(adj), 1, 0);
-  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spin), TRUE);
-
-  gtk_signal_connect (GTK_OBJECT (ok), "clicked",
-                     GTK_SIGNAL_FUNC (change_default_font_size), (gpointer) spin);
-
-  gtk_signal_connect_object (GTK_OBJECT (ok), "clicked",
-                            GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog);
-
-  gtk_signal_connect_object (GTK_OBJECT (ok), "clicked",
-                            GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog);
-
-  gtk_signal_connect_object (GTK_OBJECT (cancel), "clicked",
-                            GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog);
-
-  gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), 5);
-
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), ok);
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), cancel);
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label);
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), spin);
-
-  gtk_widget_show_all (dialog);
-}
-
-static void
-select_begin(GtkMathView* math_view, GdomeElement* first, gint state)
-{
-  GdomeException exc = 0;
-
-  g_return_if_fail(math_view != NULL);
-  g_return_if_fail(GTK_IS_MATH_VIEW(math_view));
-  g_return_if_fail(first != NULL);
-
-  gtk_math_view_freeze(math_view);
-
-  if (root_selected != NULL)
-    {
-      gtk_math_view_unselect(math_view, root_selected);
-      gdome_el_unref(root_selected, &exc);
-      g_assert(exc == 0);
-    }
-
-  root_selected = first_selected = find_element_with_ref(first);
-
-  if (root_selected != NULL)
-    {
-      gtk_math_view_select(math_view, root_selected);
-      gdome_el_ref(root_selected, &exc);
-      g_assert(exc == 0);
-    }
-
-  gtk_math_view_thaw(math_view);
-}
-
-static void
-select_over(GtkMathView* math_view, GdomeElement* elem, gint state)
-{
-  GdomeElement* new_selected = NULL;
-  GdomeException exc = 0;
-
-  g_return_if_fail(math_view != NULL);
-  g_return_if_fail(GTK_IS_MATH_VIEW(math_view));
-  g_return_if_fail(elem != NULL);
-
-  if (first_selected == NULL || elem == NULL)
-    new_selected = NULL;
-  else
-    new_selected = find_common_ancestor_with_ref(first_selected, elem);
-
-  if (new_selected != root_selected)
-    {
-      gtk_math_view_freeze(math_view);
-      if (root_selected != NULL)
-       {
-         gtk_math_view_unselect(math_view, root_selected);
-         gdome_el_unref(root_selected, &exc);
-         g_assert(exc == 0);
-       }
-      root_selected = new_selected;
-      if (root_selected != NULL)
-       gtk_math_view_select(math_view, root_selected);
-      gtk_math_view_thaw(math_view);
-    }
-  else if (new_selected != NULL)
-    {
-      gdome_el_unref(new_selected, &exc);
-      g_assert(exc == 0);
-    }
-
-}
-
-static gboolean
-key_press_event(gpointer c,
-               GdkEventKey* event,
-               GtkWidget* widget)
-{
-  g_return_val_if_fail(widget != NULL, FALSE);
-  g_return_val_if_fail(event != NULL, FALSE);
-  g_return_val_if_fail(context != NULL, FALSE);
-
-  if (event->type != GDK_KEY_PRESS) return FALSE;
-
-  switch (event->keyval)
-    {
-    case GDK_BackSpace:
-      edit_drop(context, event->state & GDK_MOD1_MASK, event->state & GDK_CONTROL_MASK);
-      break;
-    case GDK_Tab:
-      edit_complete(context);
-      break;
-    default:
-      if ((event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) == 0 && event->keyval < 0x80)
-       edit_push_char(context, event->keyval);
-      return FALSE;
-    }
-
-  return TRUE;
-}
-
-static void
-create_widget_set(gpointer context)
-{
-  GtkWidget* main_vbox;
-  GtkWidget* menu_bar;
-
-  main_vbox = gtk_vbox_new(FALSE, 1);
-  gtk_container_border_width(GTK_CONTAINER(main_vbox), 1);
-  gtk_container_add(GTK_CONTAINER(window), main_vbox);
-  gtk_widget_show(main_vbox);
-
-  menu_bar = get_main_menu();
-  gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0);
-  gtk_widget_show(menu_bar);
-
-  main_area = gtk_math_view_new(NULL, NULL);
-  gtk_widget_show(main_area);
-
-  //gtk_math_view_set_log_verbosity(GTK_MATH_VIEW(main_area), 3);
-
-  gtk_signal_connect_object (GTK_OBJECT (main_area),
-                            "select_begin", GTK_SIGNAL_FUNC (select_begin),
-                            (gpointer) main_area);
-
-  gtk_signal_connect_object (GTK_OBJECT (main_area),
-                            "select_over", GTK_SIGNAL_FUNC (select_over),
-                            (gpointer) main_area);
-
-  gtk_signal_connect_object (GTK_OBJECT(window),
-                            "key_press_event", GTK_SIGNAL_FUNC(key_press_event),
-                            context);
-
-  gtk_widget_add_events(GTK_WIDGET(main_area), GDK_KEY_PRESS_MASK);
-
-  scrolled_area = gtk_scrolled_window_new(NULL, NULL);
-  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_area),
-                                GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
-
-  gtk_widget_show(scrolled_area);
-  gtk_container_add(GTK_CONTAINER(scrolled_area), main_area);
-  gtk_box_pack_start(GTK_BOX(main_vbox), scrolled_area, TRUE, TRUE, 0);
-
-  gtk_widget_show(main_vbox);
-
-  if (gtk_math_view_get_anti_aliasing(GTK_MATH_VIEW(main_area)))
-    gtk_menu_item_activate(anti_aliasing_item);
-}
-
-GtkWidget*
-get_main_menu()
-{
-  GtkItemFactory* item_factory;
-  GtkAccelGroup* accel_group;
-  GtkWidget* menu_item;
-
-  gint nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]);
-
-  accel_group = gtk_accel_group_new();
-
-  item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accel_group);
-
-  gtk_item_factory_create_items(item_factory, nmenu_items, menu_items, NULL);
-
-  gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
-
-  menu_item = gtk_item_factory_get_widget(item_factory, "/Options/Anti Aliasing");
-  anti_aliasing_item = GTK_MENU_ITEM(menu_item);
-
-  menu_item = gtk_item_factory_get_widget(item_factory, "/Options/Transparency");
-  transparency_item = GTK_MENU_ITEM(menu_item);
-
-  return gtk_item_factory_get_widget(item_factory, "<main>");
-}
diff --git a/helm/DEVEL/mathml_editor/test/guiGTK.h b/helm/DEVEL/mathml_editor/test/guiGTK.h
deleted file mode 100644 (file)
index 7e3e207..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef guiGTK_h
-#define guiGTK_h
-
-#include <glib.h>
-#include <gdome.h>
-
-#include <gtkmathview/gtkmathview.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-  /* initGUI: some initialization stuff, creates the main window, sets it with a title */
-  void GUI_init(int *, char ***, char *, guint, guint, gpointer);
-  void GUI_uninit(void);
-
-  int  GUI_load_document(GdomeDocument*);
-  int  GUI_load_uri(const char*);
-  void GUI_unload_document(void);
-  void GUI_dump_entities(void);
-
-  /* main: this is the main event loop, to be called when the program is ready to run */
-  void GUI_run(void);
-
-  void GUI_freeze(void);
-  void GUI_thaw(void);
-
-  void GUI_set_font_manager(FontManagerId);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* guiGTK_h */
diff --git a/helm/DEVEL/mathml_editor/textomml/.cvsignore b/helm/DEVEL/mathml_editor/textomml/.cvsignore
deleted file mode 100644 (file)
index c54770a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-textomml
-config.dirs
diff --git a/helm/DEVEL/mathml_editor/textomml/Makefile.am b/helm/DEVEL/mathml_editor/textomml/Makefile.am
deleted file mode 100644 (file)
index cd66658..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-noinst_PROGRAMS = textomml
-
-textomml_SOURCES = main.cc
-
-LDADDS = \
-  $(GMETADOM_LIBS) \
-  $(GDOMEXSLT_LIBS) \
-  $(top_builddir)/src/.libs/libeditex.a
-
-textomml_LDADD = $(LDADDS)
-
-INCLUDES = \
-  $(GMETADOM_CFLAGS) \
-  $(GDOMEXSLT_CFLAGS) \
-  -I$(top_srcdir)/src
-
diff --git a/helm/DEVEL/mathml_editor/textomml/config.dirs.in b/helm/DEVEL/mathml_editor/textomml/config.dirs.in
deleted file mode 100644 (file)
index 4979189..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define PKGDATADIR "@prefix@/share/@PACKAGE@"
diff --git a/helm/DEVEL/mathml_editor/textomml/main.cc b/helm/DEVEL/mathml_editor/textomml/main.cc
deleted file mode 100644 (file)
index 9da0f09..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/* This file is part of EdiTeX, an editor of mathematical
- * expressions based on TeX syntax.
- * 
- * Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/editex/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#include <getopt.h>
-#include <fstream>
-#include <cassert>
-
-#include "dom.hh"
-#include "TPushParser.hh"
-#include "TPushLexer.hh"
-#include "TDictionary.hh"
-#include "CLoggerConsole.hh"
-#include "CMathMLFactoryXSLT.hh"
-#include "CMathMLFactoryXSLTDiff.hh"
-#include "AMathMLConsumer.hh"
-
-#include "config.dirs"
-
-enum CommandLineOptionId {
-  OPTION_VERSION = 256,
-  OPTION_HELP,
-  OPTION_VERBOSE,
-  OPTION_DICTIONARY,
-  OPTION_TML_XSLT,
-  OPTION_XSLT
-};
-
-static std::string tml_xslt = PKGDATADIR"/tml-mmlp.xsl";
-static std::string dictionary = PKGDATADIR"/dictionary-tex.xml";
-static bool xslt = true;
-
-static bool
-parseBoolean(const char* s, bool& res)
-{
-  assert(s != NULL);
-  if (!strcmp(s, "yes")) {
-    res = true;
-    return true;
-  } else if (!strcmp(s, "no")) {
-    res = false;
-    return true;
-  }
-
-  return false;
-}
-
-static void
-printVersion()
-{
-  std::cout << "TeX to MathML converter " << VERSION << " - Luca Padovani (C) 2003" << std::endl
-           << "This program is covered by the GNU Lesser General Public Licence" << std::endl;
-}
-
-static void
-printHelp()
-{
-  static char* helpMsg = "\
-Usage: textomml [options] file\n\n\
-  -V, --version                   Output version information\n\
-  -h, --help                      This small usage guide\n\
-  -v, --verbose[=0-3]             Display messages\n\
-      --dictionary=<path>         Full path of the dictionary\n\
-      --tml-xslt=<path>           Full path of the XSLT stylesheet\n\
-      --xslt[=yes|no]             Enable/disable XSLT transformation (default='yes')\n\
-";
-
-  std::cout << helpMsg << std::endl;
-  exit(0);
-}
-
-static void
-parseError(const char* option)
-{
-  assert(option != NULL);
-  std::cerr << "error while parsing option `" << option << "'" << std::endl << std::endl;
-  printHelp();
-}
-
-int
-main(int argc, char* argv[])
-{
-  CLoggerConsole logger;
-
-  while (TRUE) {
-    int option_index = 0;
-    static struct option long_options[] =
-    {
-      { "version",      no_argument,       NULL, OPTION_VERSION },
-      { "help",         no_argument,       NULL, OPTION_HELP },
-      { "verbose",       optional_argument, NULL, OPTION_VERBOSE },
-      { "dictionary",    required_argument, NULL, OPTION_DICTIONARY },
-      { "tml-xslt",      required_argument, NULL, OPTION_TML_XSLT },
-      { "xslt",          optional_argument, NULL, OPTION_XSLT },
-
-      { NULL,            no_argument, NULL, 0 }
-    };
-
-    int c = getopt_long(argc, argv, "Vhv::", long_options, &option_index);
-
-    if (c == -1) break;
-
-    switch (c) {
-    case OPTION_VERSION:
-    case 'V':
-      printVersion();
-      break;
-
-    case OPTION_HELP:
-    case 'h':
-      printHelp();
-      break;
-
-    case OPTION_VERBOSE:
-    case 'v':
-      if (optarg == NULL) logger.verbosity(ALogger::Warning);
-      else logger.verbosity(ALogger::Level(*optarg - '0'));
-      break;
-
-    case OPTION_DICTIONARY:
-      dictionary = optarg;
-      break;
-
-    case OPTION_TML_XSLT:
-      tml_xslt = optarg;
-      break;
-
-    case OPTION_XSLT:
-      if (optarg == NULL) printHelp();
-      else if (!parseBoolean(optarg, xslt)) parseError("xslt");
-      break;
-
-    case '?':
-      break;
-
-    default:
-      std::cerr << "*** getopt returned `" << c << "' value" << std::endl;
-      break;
-    }
-  }
-
-  TDictionary dict(logger);
-  logger.info("loading dictionary: `" + dictionary + "'");
-  dict.load("dictionary-test.xml");
-
-  logger.info("loading stylesheet: `" + tml_xslt + "'");
-  DOM::DOMImplementation di;
-  DOM::Document docStyle = di.createDocumentFromURI("./xsl/tml-mmlp.xsl");
-  DOMX::XSLTStylesheet style(docStyle);
-
-  CMathMLFactoryXSLT factory(logger, style);
-  TPushParser parser(logger, factory, dict);
-  TPushLexer lexer(logger, parser);
-
-  if (optind < argc)
-    {
-      std::ifstream file(argv[optind]);
-      if (!file)
-       {
-         std::cerr << "can't open input file `" << argv[optind] << "'" << std::endl;
-         exit(1);
-       }
-      
-      parser.freeze();
-      char ch;
-      while (file.get(ch)) lexer.push(ch);
-      parser.thaw();
-    }
-  else
-    printHelp();
-}
diff --git a/helm/DEVEL/mathml_editor/xsl/.cvsignore b/helm/DEVEL/mathml_editor/xsl/.cvsignore
deleted file mode 100644 (file)
index 282522d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/helm/DEVEL/mathml_editor/xsl/Makefile.am b/helm/DEVEL/mathml_editor/xsl/Makefile.am
deleted file mode 100644 (file)
index 2839412..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-pkgdata_DATA = d-xsl.xsl tml-mmlp.xsl tml-tex.xsl tml-litex.xsl tml-texid.xsl
-EXTRA_DIST   = d-xsl.xsl tml-mmlp.xsl tml-tex.xsl tml-litex.xsl tml-texid.xsl
diff --git a/helm/DEVEL/mathml_editor/xsl/d-xsl.xsl b/helm/DEVEL/mathml_editor/xsl/d-xsl.xsl
deleted file mode 100644 (file)
index 961989a..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- This file is part of EdiTeX, an editor of mathematical
- expressions based on TeX syntax.
- Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
-                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
- For more information, please visit the project's home page
- http://helm.cs.unibo.it/editex/
- or send an email to <lpadovan@cs.unibo.it>
--->
-
-<xsl2:stylesheet
-  version="1.0"
-  xmlns:xsl2="http://www.w3.org/1999/XSL/Transform"
-  xmlns:xsl="http://www.w3.org/1999/XSL/TransformAlias"
-  xmlns:tml="http://helm.cs.unibo.it/2002/TML">
-
-<xsl:namespace-alias stylesheet-prefix="xsl" result-prefix="xsl2"/>
-
-<xsl2:template match="/">
-  <xsl:stylesheet version="1.0">
-    <xsl:template match="tml:tex">
-      <xsl:apply-templates select="*"/>
-    </xsl:template>
-
-    <xsl:template match="tml:i">
-      <xsl:element name="xxx">
-        <xsl:if test="@id">
-          <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="@val"/>
-      </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="tml:n">
-      <xsl:element name="xxx">
-        <xsl:if test="@id">
-          <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="@val"/>
-      </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="tml:o">
-      <xsl:element name="xxx">
-        <xsl:if test="@id">
-          <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="@val"/>
-      </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="tml:cursor">
-      <xsl:element name="xxx">
-        <xsl:if test="@id">
-          <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="@val"/>
-      </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="tml:sb[@under='1']">
-      <xsl:element name="xxx">
-        <xsl:if test="@id">
-          <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="*[1]"/>
-        <xsl:apply-templates select="*[2]"/>
-      </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="tml:sb">
-      <xsl:element name="xxx">
-        <xsl:if test="@id">
-          <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="*[1]"/>
-        <xsl:apply-templates select="*[2]"/>
-      </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="tml:sb[@over='1']">
-      <xsl:element name="xxx">
-        <xsl:if test="@id">
-          <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="*[1]"/>
-        <xsl:apply-templates select="*[2]"/>
-      </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="tml:sp">
-      <xsl:element name="xxx">
-        <xsl:if test="@id">
-          <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="*[1]"/>
-        <xsl:apply-templates select="*[2]"/>
-      </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="tml:g[@id]">
-      <xsl:element name="xxx">
-        <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
-        <xsl:apply-templates select="*"/>
-      </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="tml:g">
-      <xsl:element name="xxx">
-        <xsl:apply-templates select="*"/>
-      </xsl:element>
-    </xsl:template>
-
-    <xsl:template match="tml:row">
-      <xsl:apply-templates select="cell"/>
-    </xsl:template>
-
-    <xsl:template match="tml:cell">
-      <xsl:apply-templates select="*"/>
-    </xsl:template>
-    
-    <xsl2:comment>/// CONTROL SEQUENCES ///</xsl2:comment>
-
-    <xsl2:apply-templates/>
-  </xsl:stylesheet>
-</xsl2:template>
-
-<xsl2:template match="entry[not(@class) or @class='m']">
-  <xsl:template match="tml:c[@name='{@name}']">
-    <xsl2:comment><xsl2:value-of select="concat(' ',@name,' ')"/></xsl2:comment>
-    <xsl:element name="xxx">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*"/>
-    </xsl:element>
-  </xsl:template>
-</xsl2:template>
-
-</xsl2:stylesheet>
-
diff --git a/helm/DEVEL/mathml_editor/xsl/tml-litex.xsl b/helm/DEVEL/mathml_editor/xsl/tml-litex.xsl
deleted file mode 100644 (file)
index a39c6f0..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- This file is part of EdiTeX, an editor of mathematical
- expressions based on TeX syntax.
- Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
-                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
- For more information, please visit the project's home page
- http://helm.cs.unibo.it/editex/
- or send an email to <lpadovan@cs.unibo.it>
--->
-
-<!-- TML ===> TeX + Long Identifiers                                -->
-<!-- Example: <tml:i val="hello"/> is transformed simply to "hello" -->
-<!-- and not to its TeX "rendering" "{\rm hello}"                   -->
-
-<xsl:stylesheet
-     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
-     xmlns:tml="http://helm.cs.unibo.it/2002/TML"
-     xmlns:m="http://www.w3.org/1998/Math/MathML"
-     version="1.0">
-
-  <xsl:output method="text" indent="yes"/>
-
-  <xsl:param name="id" select="/.."/>
-
-  <xsl:template match="/">
-    <xsl:choose>
-      <xsl:when test="$id">
-        <xsl:apply-templates select="descendant::*[@id=$id]"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:apply-templates select="*"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:tex">
-    <xsl:apply-templates select="*"/>
-  </xsl:template>
-
-  <xsl:template match="tml:math">
-    <xsl:choose>
-      <xsl:when test="@display='1'">$$<xsl:apply-templates select="*"/>$$</xsl:when>
-      <xsl:otherwise>$<xsl:apply-templates select="*"/>$</xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:i">
-    <xsl:choose>
-      <xsl:when test="@name">\<xsl:value-of select="@name"/>
-        <xsl:if test="parent::tml:g and following-sibling::tml:i"><xsl:value-of select="' '"/></xsl:if>
-      </xsl:when>
-      <xsl:otherwise><xsl:value-of select="@val"/></xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:n">
-    <xsl:choose>
-      <xsl:when test="@name">\<xsl:value-of select="@name"/>
-        <xsl:if test="parent::tml:g and following-sibling::tml:i"><xsl:value-of select="' '"/></xsl:if>
-      </xsl:when>
-      <xsl:otherwise><xsl:value-of select="@val"/></xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:o">
-    <xsl:choose>
-      <xsl:when test="@name">\<xsl:value-of select="@name"/>
-        <xsl:if test="parent::tml:g and following-sibling::tml:i"><xsl:value-of select="' '"/></xsl:if>
-      </xsl:when>
-      <xsl:when test="string-length(@val)=1"><xsl:value-of select="@val"/></xsl:when>
-      <xsl:otherwise><xsl:value-of select="@val"/></xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:s">
-    <xsl:text> </xsl:text>
-  </xsl:template>
-
-  <xsl:template match="tml:sb">
-    <xsl:choose>
-      <xsl:when test="@under='1'">
-        <xsl:apply-templates select="*[1]"/>__<xsl:apply-templates select="*[2]"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:apply-templates select="*[1]"/>_<xsl:apply-templates select="*[2]"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:sp">
-    <xsl:choose>
-      <xsl:when test="@over='1'">
-        <xsl:apply-templates select="*[1]"/>^^<xsl:apply-templates select="*[2]"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:apply-templates select="*[1]"/>^<xsl:apply-templates select="*[2]"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:g[@id]">{<xsl:apply-templates select="*"/>}</xsl:template>
-
-  <xsl:template match="tml:g[count(*)&gt;1]">{<xsl:apply-templates select="*"/>}</xsl:template>
-
-  <xsl:template match="tml:g">
-    <xsl:apply-templates select="*"/>
-  </xsl:template>
-
-  <xsl:template match="tml:row">
-    <xsl:apply-templates select="cell"/>\cr </xsl:template>
-
-  <xsl:template match="tml:cell">
-    <xsl:apply-templates select="*"/>
-    <xsl:if test="position() &lt; last()">&amp;</xsl:if>
-  </xsl:template>
-
-<!--/// CONTROL SEQUENCES ///-->
-
-  <xsl:template match="tml:c[*[1][self::tml:g[@left-open='1']]]">
-    <xsl:apply-templates select="*[1]"/>\<xsl:value-of select="@name"/>
-    <xsl:if test="*[2][self::tml:i]"><xsl:value-of select="' '"/></xsl:if>
-    <xsl:apply-templates select="*[position()&gt;1]"/>
-  </xsl:template>
-
-  <xsl:template match="tml:c">\<xsl:value-of select="@name"/>
-    <xsl:if test="*[1][self::tml:i]"><xsl:value-of select="' '"/></xsl:if>
-    <xsl:apply-templates select="*"/>
-  </xsl:template>
-
-<!--/// CURSOR ///-->
-
-  <xsl:template match="tml:cursor[@val]">
-    <xsl:choose>
-      <xsl:when test="string-length(@val)=0"/>
-      <xsl:otherwise><xsl:value-of select="@val"/></xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/helm/DEVEL/mathml_editor/xsl/tml-mmlp.xsl b/helm/DEVEL/mathml_editor/xsl/tml-mmlp.xsl
deleted file mode 100644 (file)
index f5e1b6f..0000000
+++ /dev/null
@@ -1,1159 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- This file is part of EdiTeX, an editor of mathematical
- expressions based on TeX syntax.
- Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
-                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
- For more information, please visit the project's home page
- http://helm.cs.unibo.it/editex/
- or send an email to <lpadovan@cs.unibo.it>
--->
-
-<xsl:stylesheet
-     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
-     xmlns:tml="http://helm.cs.unibo.it/2002/TML"
-     xmlns:m="http://www.w3.org/1998/Math/MathML"
-     exclude-result-prefixes="tml"
-     version="1.0">
-
-  <xsl:output indent="yes"/>
-
-  <xsl:param name="id" select="/.."/>
-
-  <xsl:template match="/">
-    <xsl:choose>
-      <xsl:when test="$id">
-        <xsl:apply-templates select="descendant::*[@id=$id]"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:apply-templates/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:tex[not(tml:math)]">
-    <!-- This is an empty TeX document. We generate the corresponding  -->
-    <!-- empty MathML document.                                        -->
-    <m:math/>
-  </xsl:template>
-
-  <xsl:template match="tml:math">
-    <m:math>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-       <xsl:if test="@display='1'">
-        <xsl:attribute name="display">block</xsl:attribute>
-      </xsl:if>
-      <xsl:attribute name="display">block</xsl:attribute>
-      <xsl:apply-templates select="*"/>
-    </m:math>
-  </xsl:template>
-
-  <xsl:template match="tml:i">
-    <m:mi>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:value-of select="@val"/>
-    </m:mi>
-  </xsl:template>
-
-  <xsl:template match="tml:n">
-    <m:mn>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:value-of select="@val"/>
-    </m:mn>
-  </xsl:template>
-
-  <xsl:template match="tml:o">
-    <m:mo>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:value-of select="@val"/>
-    </m:mo>
-  </xsl:template>
-
-  <xsl:template match="tml:s">
-<!-- this template is used only for testing purpose and should not be here-->
-    <m:mspace width="veryverythickmathspace">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-    </m:mspace>
-  </xsl:template>
-
-<!--
-  <xsl:template name="cursor">
-    <xsl:choose>
-      <xsl:when test="contains(@val, '\')">
-        <m:mrow>
-         <xsl:if test="@id">
-           <xsl:attribute name="xref">
-             <xsl:value-of select="@id"/>
-           </xsl:attribute>
-         </xsl:if>
-         <xsl:if test="substring-before(@val, '\')">
-            <m:mtext><xsl:value-of select="substring-before(@val, '\')"/></m:mtext>
-         </xsl:if>
-          <m:mo stretchy="false">&#x2329;</m:mo>
-          <m:mtext mathcolor="blue"><xsl:value-of select="concat('\', substring-after(@val, '\'))"/></m:mtext>
-          <m:mo stretchy="false">&#x232a;</m:mo>
-       </m:mrow>
-      </xsl:when>
-      <xsl:when test="string-length(@val)>=1">
-        <m:mrow>
-         <xsl:if test="@id">
-           <xsl:attribute name="xref">
-             <xsl:value-of select="@id"/>
-           </xsl:attribute>
-         </xsl:if>
-         <xsl:choose>
-           <xsl:when test="contains('0123456789', substring(@val, 1, 1))">
-              <m:mn>
-               <xsl:value-of select="@val"/>
-             </m:mn>
-           </xsl:when>
-           <xsl:otherwise>
-             <m:mi>
-               <xsl:value-of select="@val"/>
-             </m:mi>
-           </xsl:otherwise>
-         </xsl:choose>
-         <m:mtext mathcolor="blue">I</m:mtext>
-       </m:mrow>
-      </xsl:when>
-      <xsl:otherwise>
-        <m:mtext mathcolor="blue">
-         <xsl:if test="@id">
-           <xsl:attribute name="xref">
-             <xsl:value-of select="@id"/>
-           </xsl:attribute>
-         </xsl:if>I</m:mtext>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-  -->
-
-  <xsl:template match="tml:o[@val='-']">
-    <m:mo>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      &#x2212;
-    </m:mo>
-  </xsl:template>
-
-  <xsl:template match="tml:cursor">
-    <xsl:choose>
-      <xsl:when test="substring(@val,1,1)='\'">
-        <m:mrow>
-          <xsl:if test="@id">
-            <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-            </xsl:attribute>
-          </xsl:if>
-          <m:mo stretchy="false">&#x2329;</m:mo>
-          <m:mtext mathcolor="blue"><xsl:value-of select="@val"/></m:mtext>
-          <m:mo stretchy="false">&#x232a;</m:mo>
-        </m:mrow>
-      </xsl:when>
-      <xsl:when test="string-length(@val)>=1">
-        <m:mrow>
-         <xsl:if test="@id">
-           <xsl:attribute name="xref">
-             <xsl:value-of select="@id"/>
-           </xsl:attribute>
-         </xsl:if>
-         <xsl:choose>
-           <xsl:when test="contains('0123456789', substring(@val, 1, 1))">
-              <m:mn>
-               <xsl:value-of select="@val"/>
-             </m:mn>
-           </xsl:when>
-           <xsl:otherwise>
-             <m:mi>
-               <xsl:value-of select="@val"/>
-             </m:mi>
-           </xsl:otherwise>
-         </xsl:choose>
-         <xsl:if test="@visible='1'">
-          <m:mtext mathcolor="blue">I</m:mtext>
-         </xsl:if>
-       </m:mrow>
-      </xsl:when>
-      <xsl:otherwise>
-       <xsl:if test="@visible='1'">
-         <m:mtext mathcolor="blue">
-          <xsl:if test="@id">
-            <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-            </xsl:attribute>
-          </xsl:if>
-         <xsl:text>I</xsl:text>
-        </m:mtext>
-       </xsl:if>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:sb[@under='1'][*[1]/tml:sp[@over='1']]">
-    <m:munderover>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]/*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-      <xsl:apply-templates select="*[1]/*[2]"/>
-    </m:munderover>
-  </xsl:template>
-
-  <xsl:template match="tml:sb[@under='1']">
-    <m:munder>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:munder>
-  </xsl:template>
-
-  <xsl:template match="tml:sb[*[1][self::tml:sp[not(@over) or @over='0']]]">
-    <m:msubsup>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]/*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-      <xsl:apply-templates select="*[1]/*[2]"/>
-    </m:msubsup>
-  </xsl:template>
-
-  <xsl:template match="tml:sb">
-    <m:msub>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:msub>
-  </xsl:template>
-
-  <xsl:template match="tml:sp[@over='1'][*[1]/tml:sb[@under='1']]">
-    <m:munderover>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]/*[1]"/>
-      <xsl:apply-templates select="*[1]/*[2]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:munderover>
-  </xsl:template>
-
-  <xsl:template match="tml:sp[@over='1']">
-    <m:mover>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:sp[*[1][self::tml:sb[not(@over) or @over='0']]]">
-    <m:msubsup>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]/*[1]"/>
-      <xsl:apply-templates select="*[1]/*[2]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:msubsup>
-  </xsl:template>
-
-  <xsl:template match="tml:sp">
-    <m:msup>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:msup>
-  </xsl:template>
-
-  <xsl:template match="tml:g">
-    <xsl:choose>
-      <xsl:when test="not(@id) and count(*) = 1">
-        <xsl:apply-templates select="*[1]"/>
-      </xsl:when>
-      <xsl:when test="tml:cursor">
-       <m:mstyle mathbackground="#e0e0e0">
-          <xsl:if test="@id">
-            <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-            </xsl:attribute>
-         </xsl:if>
-         <m:mrow>
-           <xsl:apply-templates select="*"/>
-         </m:mrow>
-       </m:mstyle>
-      </xsl:when>
-       <xsl:otherwise>
-       <m:mrow>
-         <xsl:if test="@id">
-            <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-            </xsl:attribute>
-         </xsl:if>
-         <xsl:apply-templates select="*"/>
-       </m:mrow>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:row">
-    <m:mtr>
-      <xsl:apply-templates select="cell"/>
-    </m:mtr>
-  </xsl:template>
-
-  <xsl:template match="tml:cell">
-    <m:mtd>
-      <xsl:apply-templates select="*"/>
-    </m:mtd>
-  </xsl:template>
-
-<!--/// CONTROL SEQUENCES ///-->
-
-  <xsl:template match="tml:c">
-    <m:mrow>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <m:mtext mathcolor="blue">\<xsl:value-of select="@name"/></m:mtext>
-      <xsl:apply-templates select="*"/>
-    </m:mrow>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='fun' and count(*)=3]">
-    <m:mrow>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <m:mo mathcolor="red">&#x03bb;</m:mo>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo>:</m:mo>
-      <xsl:apply-templates select="*[2]"/>
-      <m:mo>.</m:mo>
-      <xsl:apply-templates select="*[3]"/>
-    </m:mrow>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='not'][*[1][self::tml:o]]">
-<!-- not -->
-    <m:mo>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:value-of select="*[1]/@val"/>&#x0338;</m:mo>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='buildrel']">
-<!-- buildrel -->
-    <m:mover>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[2]"/>
-      <xsl:apply-templates select="*[1]"/>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='left' or @name='right'][*[1][self::tml:o]]">
-<!-- left -->
-    <m:mo stretchy="true">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:value-of select="*[1]/@val"/>
-    </m:mo>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='bigl' or @name='bigr' or @name='bigm' or @name='big'][*[1][self::tml:o]]">
-<!-- bigl -->
-    <m:mo stretchy="true" minsize="8.5pt">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:value-of select="*[1]/@val"/>
-    </m:mo>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='Bigl' or @name='Bigr' or @name='Bigm'][*[1][self::tml:o]]">
-<!-- Bigl -->
-    <m:mo stretchy="true" minsize="11.5pt">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:value-of select="*[1]/@val"/>
-    </m:mo>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='biggl' or @name='biggr' or @name='biggm'][*[1][self::tml:o]]">
-<!-- biggl -->
-    <m:mo stretchy="true" minsize="14.5pt">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:value-of select="*[1]/@val"/>
-    </m:mo>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='Biggl' or @name='Biggr' or @name='Biggm'][*[1][self::tml:o]]">
-<!-- biggl -->
-    <m:mo stretchy="true" minsize="17.5pt">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:value-of select="*[1]/@val"/>
-    </m:mo>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='hat']">
-<!-- hat -->
-    <m:mover accent="true">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo>&#x0302;</m:mo>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='widehat']">
-<!-- widehat -->
-    <m:mover accent="false">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo stretchy="true">&#x0302;</m:mo>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='check']">
-<!-- check -->
-    <m:mover accent="true">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo>&#x030c;</m:mo>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='tilde']">
-<!-- tilde -->
-    <m:mover accent="true">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo>&#x0303;</m:mo>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='widetilde']">
-<!-- widetilde -->
-    <m:mover>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo stretchy="true">&#x0303;</m:mo>
-    </m:mover>>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='acute']">
-<!-- acute -->
-    <m:mover accent="true">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo>&#x0301;</m:mo>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='grave']">
-<!-- grave -->
-    <m:mover accent="true">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo>&#x0300;</m:mo>
-    </m:mover>>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='dot']">
-<!-- dot -->
-    <m:mover accent="true">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo>&#x0307;</m:mo>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='ddot']">
-<!-- ddot -->
-    <m:mover accent="true">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo>&#x0308;</m:mo>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='breve']">
-<!-- breve -->
-    <m:mover accent="true">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo>&#x0306;</m:mo>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='bar']">
-<!-- bar -->
-    <m:mover accent="true">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo>&#x0304;</m:mo>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='vec']">
-<!-- vec -->
-    <m:mover accent="true">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo>&#x20d7;</m:mo>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='overline']">
-<!-- overline -->
-    <m:mover>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo stretchy="true">&#x0305;</m:mo>
-    </m:mover>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='underline']">
-<!-- underline -->
-    <m:munder>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo stretchy="true">&#x0332;</m:mo>
-    </m:munder>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='sqrt']">
-<!-- sqrt -->
-    <m:msqrt>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*"/>
-    </m:msqrt>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='root']">
-<!-- root -->
-    <m:mroot>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:choose>
-        <xsl:when test="count(*) &lt; 2">
-         <m:mrow/>
-         <xsl:apply-templates select="*[1]"/>
-       </xsl:when>
-       <xsl:otherwise>
-          <xsl:apply-templates select="*[2]"/>
-          <xsl:apply-templates select="*[1]"/>
-       </xsl:otherwise>
-      </xsl:choose>
-    </m:mroot>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='frac']">
-<!-- frac -->
-    <m:mfrac>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:mfrac>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='over']">
-<!-- over -->
-    <m:mfrac>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:mfrac>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='atop']">
-<!-- atop -->
-    <m:mfrac linethickness="0">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:mfrac>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='choose']">
-<!-- choose -->
-    <m:mrow>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <m:mo stretchy="true">(</m:mo>
-      <m:mfrac linethickness="0">
-        <xsl:apply-templates select="*[1]"/>
-        <xsl:apply-templates select="*[2]"/>
-      </m:mfrac>
-      <m:mo stretchy="true">)</m:mo>
-    </m:mrow>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='brace']">
-<!-- brace -->
-    <m:mrow>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <m:mo stretchy="true">{</m:mo>
-      <m:mfrac linethickness="0">
-        <xsl:apply-templates select="*[1]"/>
-        <xsl:apply-templates select="*[2]"/>
-      </m:mfrac>
-      <m:mo stretchy="true">}</m:mo>
-    </m:mrow>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='brack']">
-<!-- brack -->
-    <m:mrow>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <m:mo stretchy="true">[</m:mo>
-      <m:mfrac linethickness="0">
-        <xsl:apply-templates select="*[1]"/>
-        <xsl:apply-templates select="*[2]"/>
-      </m:mfrac>
-      <m:mo stretchy="true">]</m:mo>
-    </m:mrow>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='displaystyle']">
-<!-- displaystyle -->
-    <m:mstyle displaystyle="true">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-    </m:mstyle>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='textstyle']">
-<!-- textstyle -->
-    <m:mstyle scriptlevel="0">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:if test="tml:g/tml:cursor[@visible='1']">
-        <m:msub>
-          <m:mtext mathcolor="#808080">}</m:mtext>
-         <m:mtext><xsl:value-of select="@name"/></m:mtext>
-        </m:msub>
-      </xsl:if>
-    </m:mstyle>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='scriptstyle']">
-<!-- scriptstyle -->
-    <m:mstyle scriptlevel="1">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-    </m:mstyle>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='scriptscriptstyle']">
-<!-- scriptscriptstyle -->
-    <m:mstyle scriptlevel="2">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-    </m:mstyle>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='pmod']">
-<!-- pmod -->
-    <m:mrow>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <m:mo>(</m:mo>
-      <m:mrow>
-        <m:mo>mod</m:mo>
-        <xsl:apply-templates select="*[1]"/>
-      </m:mrow>
-      <m:mo>)</m:mo>
-    </m:mrow>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='rm']">
-<!-- rm -->
-    <m:mstyle mathvariant="normal">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-    </m:mstyle>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='bf']">
-<!-- bf -->
-    <m:mstyle mathvariant="bold">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-    </m:mstyle>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='tt']">
-<!-- tt -->
-    <m:mstyle mathvariant="monospace">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-    </m:mstyle>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='sl']">
-<!-- sl -->
-    <m:mstyle mathvariant="italic">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-    </m:mstyle>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='it']">
-<!-- it -->
-    <m:mstyle mathvariant="italic">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-    </m:mstyle>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='_']">
-<!-- _ -->
-    <m:mi>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:text>_</xsl:text>
-    </m:mi>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name=',']">
-<!-- , -->
-    <m:mspace width="thinmathspace">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-    </m:mspace>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='&gt;']">
-<!-- > -->
-    <m:mspace width="mediummathspace">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-    </m:mspace>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name=';']">
-<!-- ; -->
-    <m:mspace width="thickmathspace">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-    </m:mspace>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='!']">
-<!-- ! -->
-    <m:mspace width="-0.166667em">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-    </m:mspace>
-  </xsl:template>
-
-  <xsl:template name="table-content">
-      <xsl:choose>
-        <xsl:when test="tml:row">
-          <xsl:apply-templates select="tml:row"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <m:mtr>
-            <m:mtd>
-              <xsl:apply-templates select="*"/>
-            </m:mtd>
-          </m:mtr>
-        </xsl:otherwise>
-      </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='matrix']">
-<!-- matrix -->
-    <m:mtable>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:call-template name="table-content"/>
-    </m:mtable>
-  </xsl:template>
-
-  <xsl:template match="tml:row">
-    <m:mtr>
-      <xsl:apply-templates select="tml:cell"/>
-    </m:mtr>
-  </xsl:template>
-
-  <xsl:template match="tml:cell">
-    <m:mtd>
-      <xsl:apply-templates select="*"/>
-    </m:mtd>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='pmatrix']">
-<!-- pmatrix -->
-    <m:mrow>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <m:mo stretchy="true">(</m:mo>
-      <m:mtable>
-        <xsl:call-template name="table-content"/>
-      </m:mtable>
-      <m:mo stretchy="true">)</m:mo>
-    </m:mrow>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='bordermatrix']">
-<!-- bordermatrix -->
-    <m:mtable>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <m:mtr>
-        <xsl:apply-templates select="tml:row[1]/tml:cell[1]"/>
-        <m:mtd/>
-        <xsl:apply-templates select="tml:row[1]/tml:cell[position() &gt; 1]"/>
-       <m:mtd/>
-      </m:mtr>
-      <xsl:for-each select="tml:row[position() &gt; 1]">
-        <m:mtr>
-          <xsl:apply-templates select="tml:cell[1]"/>
-          <xsl:if test="position() = 1">
-            <m:mtd rowspan="{count(../tml:row) - 1}">
-              <m:mo stretchy="true">(</m:mo>
-            </m:mtd>
-          </xsl:if>
-          <xsl:apply-templates select="tml:cell[position() &gt; 1]"/>
-          <xsl:if test="position() = 1">
-            <m:mtd rowspan="{count(../tml:row) - 1}">
-              <m:mo stretchy="true">)</m:mo>
-            </m:mtd>
-          </xsl:if>         
-        </m:mtr>
-      </xsl:for-each>      
-    </m:mtable>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='overbrace']">
-<!-- overbrace -->
-    <m:mover>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo stretchy="true">????</m:mo>
-    </m:mover>>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='underbrace']">
-<!-- underbrace -->
-    <m:munder>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <m:mo stretchy="true">????</m:mo>
-    </m:munder>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='cases']">
-<!-- cases -->
-    <m:mrow>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <m:mo stretchy="true">{</m:mo>
-      <m:mtable>
-        <xsl:call-template name="table-content"/>
-      </m:mtable>
-    </m:mrow>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='red']">
-<!-- red  -->
-    <m:mstyle mathcolor="red">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-         <xsl:value-of select="@id"/>
-       </xsl:attribute>
-       <xsl:apply-templates/>
-      </xsl:if>
-    </m:mstyle>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='green']">
-<!-- green  -->
-    <m:mstyle mathcolor="green">
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-         <xsl:value-of select="@id"/>
-       </xsl:attribute>
-       <xsl:apply-templates/>
-      </xsl:if>
-    </m:mstyle>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='duedelim']">
-<!-- duedelim  -->
-    <m:mfrac>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:mfrac>
-  </xsl:template>
-
-  <xsl:template match="tml:c[@name='nodeside']">
-<!-- nodeside  -->
-    <m:mfrac>
-      <xsl:if test="@id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:mfrac>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/DEVEL/mathml_editor/xsl/tml-tex.xsl b/helm/DEVEL/mathml_editor/xsl/tml-tex.xsl
deleted file mode 100644 (file)
index ea0a6b9..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- This file is part of EdiTeX, an editor of mathematical
- expressions based on TeX syntax.
- Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
-                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
- For more information, please visit the project's home page
- http://helm.cs.unibo.it/editex/
- or send an email to <lpadovan@cs.unibo.it>
--->
-
-<!-- TML ===> TeX                                    -->
-<!-- Example: <tml:i val="hello"/> is transformed to -->
-<!-- it TeX "rendering" "{\rm hello}"                -->
-
-<xsl:stylesheet
-     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
-     xmlns:tml="http://helm.cs.unibo.it/2002/TML"
-     xmlns:m="http://www.w3.org/1998/Math/MathML"
-     version="1.0">
-
-  <xsl:output method="text" indent="yes"/>
-
-  <xsl:param name="id" select="/.."/>
-
-  <xsl:template match="/">
-    <xsl:choose>
-      <xsl:when test="$id">
-        <xsl:apply-templates select="descendant::*[@id=$id]"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:apply-templates select="*"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:tex">
-    <xsl:apply-templates select="*"/>
-  </xsl:template>
-
-  <xsl:template match="tml:math">
-    <xsl:choose>
-      <xsl:when test="@display='1'">$$<xsl:apply-templates select="*"/>$$</xsl:when>
-      <xsl:otherwise>$<xsl:apply-templates select="*"/>$</xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:i">
-    <xsl:choose>
-      <xsl:when test="@name">\<xsl:value-of select="@name"/>
-        <xsl:if test="parent::tml:g and following-sibling::tml:i"><xsl:value-of select="' '"/></xsl:if>
-      </xsl:when>
-      <xsl:when test="string-length(@val)=1"><xsl:value-of select="@val"/></xsl:when>
-      <xsl:otherwise>{\rm <xsl:value-of select="@val"/>}</xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:n">
-    <xsl:choose>
-      <xsl:when test="@name">\<xsl:value-of select="@name"/>
-        <xsl:if test="parent::tml:g and following-sibling::tml:i"><xsl:value-of select="' '"/></xsl:if>
-      </xsl:when>
-      <xsl:when test="string-length(@val)=1"><xsl:value-of select="@val"/></xsl:when>
-      <xsl:otherwise>{\rm <xsl:value-of select="@val"/>}</xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:o">
-    <xsl:choose>
-      <xsl:when test="@name">\<xsl:value-of select="@name"/>
-        <xsl:if test="parent::tml:g and following-sibling::tml:i"><xsl:value-of select="' '"/></xsl:if>
-      </xsl:when>
-      <xsl:when test="string-length(@val)=1"><xsl:value-of select="@val"/></xsl:when>
-      <xsl:otherwise><xsl:value-of select="@val"/></xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:s">
-    <xsl:text> </xsl:text>
-  </xsl:template>
-
-  <xsl:template match="tml:sb">
-    <xsl:choose>
-      <xsl:when test="@under='1'">
-        <xsl:apply-templates select="*[1]"/>__<xsl:apply-templates select="*[2]"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:apply-templates select="*[1]"/>_<xsl:apply-templates select="*[2]"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:sp">
-    <xsl:choose>
-      <xsl:when test="@over='1'">
-        <xsl:apply-templates select="*[1]"/>^^<xsl:apply-templates select="*[2]"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:apply-templates select="*[1]"/>^<xsl:apply-templates select="*[2]"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:g[@id]">{<xsl:apply-templates select="*"/>}</xsl:template>
-
-  <xsl:template match="tml:g[count(*)&gt;1]">{<xsl:apply-templates select="*"/>}</xsl:template>
-
-  <xsl:template match="tml:g">
-    <xsl:apply-templates select="*"/>
-  </xsl:template>
-
-  <xsl:template match="tml:row">
-    <xsl:apply-templates select="cell"/>\cr </xsl:template>
-
-  <xsl:template match="tml:cell">
-    <xsl:apply-templates select="*"/>
-    <xsl:if test="position() &lt; last()">&amp;</xsl:if>
-  </xsl:template>
-
-<!--/// CONTROL SEQUENCES ///-->
-
-  <xsl:template match="tml:c[*[1][self::tml:g[@left-open='1']]]">
-    <xsl:apply-templates select="*[1]"/>\<xsl:value-of select="@name"/>
-    <xsl:if test="*[2][self::tml:i]"><xsl:value-of select="' '"/></xsl:if>
-    <xsl:apply-templates select="*[position()&gt;1]"/>
-  </xsl:template>
-
-  <xsl:template match="tml:c">\<xsl:value-of select="@name"/>
-    <xsl:if test="*[1][self::tml:i]"><xsl:value-of select="' '"/></xsl:if>
-    <xsl:apply-templates select="*"/>
-  </xsl:template>
-
-<!--/// CURSOR ///-->
-
-  <xsl:template match="tml:cursor[@val]">
-    <xsl:choose>
-      <xsl:when test="string-length(@val)=0"/>
-      <xsl:when test="string-length(@val)=1"><xsl:value-of select="@val"/></xsl:when>
-      <xsl:otherwise>{\rm <xsl:value-of select="@val"/>}</xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/helm/DEVEL/mathml_editor/xsl/tml-texid.xsl b/helm/DEVEL/mathml_editor/xsl/tml-texid.xsl
deleted file mode 100644 (file)
index 20de507..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet
-     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
-     xmlns:tml="http://helm.cs.unibo.it/2002/TML"
-     xmlns:m="http://www.w3.org/1998/Math/MathML"
-     version="1.0">
-
-  <xsl:output method="text" indent="yes"/>
-
-  <xsl:param name="id" select="/.."/>
-
-  <xsl:template match="/">
-    <xsl:choose>
-      <xsl:when test="$id">
-        <xsl:apply-templates select="descendant::*[@id=$id]"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:apply-templates select="*"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-  
-  <xsl:template match="*[@id]">{\id{<xsl:value-of select="@id"/>}{<xsl:apply-templates select="." mode="core"/>}}</xsl:template>
-
-  <xsl:template match="*"><xsl:apply-templates select="." mode="core"/></xsl:template>
-
-  <xsl:template match="tml:tex">
-    <xsl:apply-templates select="*"/>
-  </xsl:template>
-
-  <xsl:template match="tml:math[@id]">
-    <xsl:choose>
-      <xsl:when test="@display='1'">$${\id{<xsl:value-of select="@id"/>}{<xsl:apply-templates select="*" mode="core"/>}}$$</xsl:when>
-      <xsl:otherwise>${\id{<xsl:value-of select="@id"/>}{<xsl:apply-templates select="*" mode="core"/>}}$</xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-  
-  <xsl:template match="tml:math">
-    <xsl:choose>
-      <xsl:when test="@display='1'">$$<xsl:apply-templates select="*"/>$$</xsl:when>
-      <xsl:otherwise>$<xsl:apply-templates select="*"/>$</xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:i" mode="core">
-    <xsl:choose>
-      <xsl:when test="@name">\<xsl:value-of select="@name"/>
-        <xsl:if test="parent::tml:g and following-sibling::tml:i"><xsl:value-of select="' '"/></xsl:if>
-      </xsl:when>
-      <xsl:otherwise><xsl:value-of select="@val"/></xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:n" mode="core">
-    <xsl:choose>
-      <xsl:when test="@name">\<xsl:value-of select="@name"/>
-        <xsl:if test="parent::tml:g and following-sibling::tml:i"><xsl:value-of select="' '"/></xsl:if>
-      </xsl:when>
-      <xsl:otherwise><xsl:value-of select="@val"/></xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:o" mode="core">
-    <xsl:choose>
-      <xsl:when test="@name">\<xsl:value-of select="@name"/>
-        <xsl:if test="parent::tml:g and following-sibling::tml:i"><xsl:value-of select="' '"/></xsl:if>
-      </xsl:when>
-      <xsl:otherwise><xsl:value-of select="@val"/></xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:s" mode="core">
-    <xsl:text> </xsl:text>
-  </xsl:template>
-
-  <xsl:template match="tml:sb" mode="core">
-    <xsl:choose>
-      <xsl:when test="@under='1'">
-        <xsl:apply-templates select="*[1]"/>__<xsl:apply-templates select="*[2]"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:apply-templates select="*[1]"/>_<xsl:apply-templates select="*[2]"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:sp" mode="core">
-    <xsl:choose>
-      <xsl:when test="@over='1'">
-        <xsl:apply-templates select="*[1]"/>^^<xsl:apply-templates select="*[2]"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:apply-templates select="*[1]"/>^<xsl:apply-templates select="*[2]"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="tml:g" mode="core">{<xsl:apply-templates select="*"/>}</xsl:template>
-
-  <xsl:template match="tml:row" mode="core">
-    <xsl:apply-templates select="cell"/>\cr </xsl:template>
-
-  <xsl:template match="tml:cell" mode="core">
-    <xsl:apply-templates select="*"/>
-    <xsl:if test="position() &lt; last()">&amp;</xsl:if>
-  </xsl:template>
-
-<!--/// CONTROL SEQUENCES ///-->
-
-  <xsl:template match="tml:c[*[1][self::tml:g[@left-open='1']]]" mode="core">
-    <xsl:apply-templates select="*[1]"/>\<xsl:value-of select="@name"/>
-    <xsl:if test="*[2][self::tml:i]"><xsl:value-of select="' '"/></xsl:if>
-    <xsl:apply-templates select="*[position()&gt;1]"/>
-  </xsl:template>
-
-  <xsl:template match="tml:c" mode="core">\<xsl:value-of select="@name"/>
-    <xsl:if test="*[1][self::tml:i]"><xsl:value-of select="' '"/></xsl:if>
-    <xsl:apply-templates select="*"/>
-  </xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/helm/DEVEL/mlminidom/.cvsignore b/helm/DEVEL/mlminidom/.cvsignore
deleted file mode 100644 (file)
index dd559e6..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-*.cmi *.cmo *.cmx test test.opt
-configure
-config.status
-config.log
-config.cache
-Makefile
-META
-mlminidom.spec
diff --git a/helm/DEVEL/mlminidom/.depend b/helm/DEVEL/mlminidom/.depend
deleted file mode 100644 (file)
index df1b3a2..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-minidom.cmo: minidom.cmi 
-minidom.cmx: minidom.cmi 
-ominidom.cmo: minidom.cmi ominidom.cmi 
-ominidom.cmx: minidom.cmx ominidom.cmi 
-test.cmo: minidom.cmi 
-test.cmx: minidom.cmx 
-ominidom.cmi: minidom.cmi 
diff --git a/helm/DEVEL/mlminidom/AUTHORS b/helm/DEVEL/mlminidom/AUTHORS
deleted file mode 100644 (file)
index 4c93fa3..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Luca Padovani <luca.padovani@cs.unibo.it>
-Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
-Stefano Zacchiroli <zack@cs.unibo.it>
diff --git a/helm/DEVEL/mlminidom/COPYING b/helm/DEVEL/mlminidom/COPYING
deleted file mode 100644 (file)
index d60c31a..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   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.
-\f
-                   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.)
-\f
-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.
-\f
-  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.
-\f
-  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
-\f
-           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
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <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 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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/helm/DEVEL/mlminidom/ChangeLog b/helm/DEVEL/mlminidom/ChangeLog
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/mlminidom/META.in b/helm/DEVEL/mlminidom/META.in
deleted file mode 100644 (file)
index 42d999a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires=""
-version="@VERSION@"
-archive(byte)="mlminidom.cma ml_minidom.o"
-archive(native)="mlminidom.cmxa ml_minidom.o"
-linkopts=""
diff --git a/helm/DEVEL/mlminidom/Makefile.in b/helm/DEVEL/mlminidom/Makefile.in
deleted file mode 100644 (file)
index 1e4dfdd..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-PACKAGE = @PACKAGE@
-VERSION = @VERSION@
-INCLUDEDIR = @OCAML_INCLUDE_DIR@
-PREFIX = 
-OBJECTS_C = ml_minidom.o
-OBJECTS = minidom.cmo ominidom.cmo
-OBJECTS_OPT = minidom.cmx ominidom.cmx
-INST = ml_minidom.h minidom.mli minidom.cmi ominidom.mli ominidom.cmi META
-DIST_FILES = Makefile.in configure.in configure *.ml *.mli test.xml ml_minidom.c ml_minidom.h META.in mlminidom.spec.in .depend
-DOC_FILES = AUTHORS COPYING ChangeLog NEWS README
-REQUIRES =
-PREDICATES =
-OCAMLC = ocamlfind ocamlc
-OCAMLOPT = ocamlfind ocamlopt
-OCAMLDEP = ocamldep
-DESTDIR = @OCAML_LIB_DIR@
-
-ARCHIVE = $(PACKAGE).cma
-ARCHIVE_C = $(PACKAGE).a
-ARCHIVE_OPT = $(PACKAGE).cmxa
-
-TMPDIR = .test
-TMPPKGDIR = $(TMPDIR)/$(PACKAGE)
-
-all: $(OBJECTS_C) $(ARCHIVE) test
-
-opt: $(OBJECTS_C) $(ARCHIVE_OPT) test.opt
-
-dist:
-       rm -rf $(PACKAGE)-$(VERSION)
-       mkdir $(PACKAGE)-$(VERSION)
-       cp $(DIST_FILES) $(DOC_FILES) $(PACKAGE)-$(VERSION)
-       tar cvfz $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)-$(VERSION)
-       rm -rf $(PACKAGE)-$(VERSION)
-       
-ml_minidom.o: ml_minidom.c
-       gcc -c -I$(INCLUDEDIR) `glib-config --cflags` `minidom-config --cflags` $<
-
-.SUFFIXES: .cmo .cmi .cmx .ml .mli
-
-.ml.cmo:
-       $(OCAMLC) -package "$(REQUIRES)" -predicates "$(PREDICATES)" \
-                  -c $<
-.mli.cmi:
-       $(OCAMLC) -package "$(REQUIRES)" -predicates "$(PREDICATES)" \
-                  -c $<
-.ml.cmx:
-       $(OCAMLOPT) -package "$(REQUIRES)" -predicates "$(PREDICATES)" \
-                  -c $<
-
-depend: *.ml *.mli
-       $(OCAMLDEP) *.ml *.mli >.depend
-include .depend
-
-$(ARCHIVE): $(OBJECTS)
-       $(OCAMLC) -a -custom -package "$(REQUIRES)" \
-        -predicates "$(PREDICATES)" -o $@ $^ \
-        -cclib "`glib-config --libs` `minidom-config --libs`"
-
-$(ARCHIVE_OPT): $(OBJECTS_OPT)
-       $(OCAMLOPT) -a -package "$(REQUIRES)" \
-        -predicates "$(PREDICATES)" -o $@ $^ \
-        -cclib "`glib-config --libs` `minidom-config --libs`"
-
-test: test.ml $(OBJECTS_C) $(ARCHIVE)
-       mkdir -p $(TMPPKGDIR)
-       cp $(OBJECTS_C) $(ARCHIVE) $(INST) $(TMPPKGDIR)
-       cp test.ml $(TMPDIR)
-       cd $(TMPDIR) ; export OCAMLPATH=.:$$OCAMLPATH ; \
-       $(OCAMLC) -package "$(PACKAGE)" -linkpkg -predicates "" -o $@ test.ml
-       mv $(TMPDIR)/$@ .
-       rm -r $(TMPDIR)
-
-test.opt: test.ml $(OBJECTS_C) $(ARCHIVE_C) $(ARCHIVE_OPT)
-       mkdir -p $(TMPPKGDIR)
-       cp $(OBJECTS_C) $(ARCHIVE_C) $(ARCHIVE_OPT) $(INST) $(TMPPKGDIR)
-       cp test.ml $(TMPDIR)
-       cd $(TMPDIR) ; export OCAMLPATH=.:$$OCAMLPATH ; \
-       $(OCAMLOPT) -package "$(PACKAGE)" -linkpkg -predicates "" -o $@ test.ml
-       mv $(TMPDIR)/$@ .
-       rm -r $(TMPDIR)
-
-install:
-       test ! -f $(ARCHIVE_OPT) || extra="$(ARCHIVE_C) $(ARCHIVE_OPT)" ; \
-       ocamlfind install -destdir $(DESTDIR) $(PACKAGE) $(OBJECTS_C) $(ARCHIVE) $(INST) $$extra
-
-uninstall:
-       ocamlfind remove $(PACKAGE)
-
-clean:
-       rm -f *.o *.cm? test test.opt $(ARCHIVE) $(ARCHIVE_C) $(ARCHIVE_OPT)
-       rm -rf $(TMPDIR)
-
-distclean: clean
-       rm -f config.log config.cache config.status Makefile META mlminidom.spec
-
diff --git a/helm/DEVEL/mlminidom/NEWS b/helm/DEVEL/mlminidom/NEWS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/mlminidom/README b/helm/DEVEL/mlminidom/README
deleted file mode 100644 (file)
index c74b582..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-This is the Ocaml binding for minidom.
-
-To compile and install:
-
-       ./configure
-       make
-       make opt
-       make install
-
diff --git a/helm/DEVEL/mlminidom/configure.in b/helm/DEVEL/mlminidom/configure.in
deleted file mode 100644 (file)
index 8de47e4..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-AC_INIT(minidom.ml)
-
-PACKAGE=mlminidom
-
-MLMINIDOM_MAJOR_VERSION=0
-MLMINIDOM_MINOR_VERSION=2
-MLMINIDOM_MICRO_VERSION=2
-MLMINIDOM_VERSION=$MLMINIDOM_MAJOR_VERSION.$MLMINIDOM_MINOR_VERSION.$MLMINIDOM_MICRO_VERSION
-VERSION=$MLMINIDOM_VERSION
-
-AC_CHECK_PROG(HAVE_GLIB, glib-config, yes, no)
-if test $HAVE_GLIB = "no"; then
-  AC_MSG_ERROR(could not font glib configuration script, please make sure glib (dev) is installed)
-fi
-
-AC_CHECK_PROG(HAVE_MINIDOM, minidom-config, yes, no)
-if test $HAVE_MINIDOM = "no"; then
-  AC_MSG_ERROR(could not find minidom configuration script, please make sure minidom is installed)
-fi
-
-AC_CHECK_PROG(HAVE_OCAMLC, ocamlc, yes, no)
-if test $HAVE_OCAMLC = "no"; then
-  AC_MSG_ERROR(could not find ocamlc in PATH, please make sure ocaml is installed)
-fi
-
-AC_CHECK_PROG(HAVE_OCAMLFIND, ocamlfind, yes, no)
-if test $HAVE_OCAMLFIND = "no"; then
-  AC_MSG_ERROR(could not find ocamlfind in PATH, please make sure findlib is installed)
-fi
-
-AC_MSG_CHECKING("for the ocaml library dir")
-OCAML_LIB_DIR=`ocamlc -where`
-AC_MSG_RESULT($OCAML_LIB_DIR)
-
-AC_CHECK_FILE(/usr/include/caml/mlvalues.h,
-       OCAML_INCLUDE_DIR=/usr/include/caml,
-       OCAML_INCLUDE_DIR=$OCAML_LIB_DIR/caml
-)
-
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-AC_SUBST(OCAML_INCLUDE_DIR)
-AC_SUBST(OCAML_LIB_DIR)
-
-AC_OUTPUT([
-  Makefile
-  mlminidom.spec
-  META
-])
diff --git a/helm/DEVEL/mlminidom/debian/changelog b/helm/DEVEL/mlminidom/debian/changelog
deleted file mode 100644 (file)
index 8457b12..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-mlminidom (0.2.2-1) unstable; urgency=low
-
-  * New upstream release. Built with ocaml 3.04.
-
- -- Stefano Zacchiroli <zack@debian.org>  Sun, 20 Jan 2002 15:18:38 +0100
-
-mlminidom (0.2.1-2) unstable; urgency=low
-
-  * Bug fix: moved automagically generated configure from diff.gz to
-    original tar.gz archive.
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue, 20 Nov 2001 01:06:27 +0100
-
-mlminidom (0.2.1-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Stefano Zacchiroli <zack@debian.org>  Sat, 17 Nov 2001 09:24:02 +0100
-
-mlminidom (0.2.0-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue, 13 Nov 2001 19:41:58 +0100
-
-mlminidom (0.1.0-3) unstable; urgency=low
-
-  * Fixed build on architecture which doesn't have native code compiler
-    (closes: Bug#104702).
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue, 21 Aug 2001 11:14:51 +0200
-
-mlminidom (0.1.0-2) unstable; urgency=low
-
-  * Added build-dep on libxml2-dev (closes: Bug#9887).
-
- -- Stefano Zacchiroli <zack@debian.org>  Mon, 28 May 2001 12:28:25 +0200
-
-mlminidom (0.1.0-1) unstable; urgency=low
-
-  * Initial Release (closes: Bug#93106).
-
- -- Stefano Zacchiroli <zack@debian.org>  Wed,  4 Apr 2001 22:50:43 +0200
-
-Local variables:
-mode: debian-changelog
-End:
diff --git a/helm/DEVEL/mlminidom/debian/control b/helm/DEVEL/mlminidom/debian/control
deleted file mode 100644 (file)
index 244cf25..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Source: mlminidom
-Section: devel
-Priority: optional
-Maintainer: Stefano Zacchiroli <zack@debian.org>
-Build-Depends: debhelper (>> 3.0.0), ocaml (>= 3.04), libglib1.2-dev, libminidom-dev, libxml2-dev, ocaml-findlib
-Standards-Version: 3.5.2
-
-Package: mlminidom
-Architecture: any
-Depends: ocaml (>= 3.04), libminidom0 (>= 0.1.3)
-Description: OCaml binding for minidom
- This is the OCaml binding for minidom, that is currently available in
- the libminidom0 package.
diff --git a/helm/DEVEL/mlminidom/debian/copyright b/helm/DEVEL/mlminidom/debian/copyright
deleted file mode 100644 (file)
index 7bbc006..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-This package was debianized by Stefano Zacchiroli <zack@debian.org> on
-Wed,  4 Apr 2001 22:50:43 +0200.
-
-It was packed from source obtained via cvs, with this CVSROOT:
- :pserver:anonymous@phd.cs.unibo.it:/home/lpadovan/PHELM/
-
-Upstream Author(s):
- Luca Padovani <luca.padovani@cs.unibo.it>
- Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
- Stefano Zacchiroli <zack@cs.unibo.it>
-
-Copyright:
- Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
-
- This file is part of mlminidom, the Ocaml binding for minidom.
- mlminidom 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.
-
- mlminidom 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 mlminidom; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- For details, send a mail to the author.
-
diff --git a/helm/DEVEL/mlminidom/debian/dirs b/helm/DEVEL/mlminidom/debian/dirs
deleted file mode 100644 (file)
index 00a96ae..0000000
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/ocaml
diff --git a/helm/DEVEL/mlminidom/debian/docs b/helm/DEVEL/mlminidom/debian/docs
deleted file mode 100644 (file)
index 6f12db5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-AUTHORS
-README
diff --git a/helm/DEVEL/mlminidom/debian/examples b/helm/DEVEL/mlminidom/debian/examples
deleted file mode 100644 (file)
index 31c13b4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-test.ml
diff --git a/helm/DEVEL/mlminidom/debian/rules b/helm/DEVEL/mlminidom/debian/rules
deleted file mode 100755 (executable)
index 8fac22a..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/make -f
-# Sample debian/rules that uses debhelper.
-# GNU copyright 1997 to 1999 by Joey Hess.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-# This is the debhelper compatability version to use.
-export DH_COMPAT=2
-
-UPSTREAM_CHANGELOG = ChangeLog
-
-configure: configure-stamp
-configure-stamp:
-       dh_testdir
-       # Add here commands to configure the package.
-       ./configure
-
-       touch configure-stamp
-
-build: configure-stamp build-stamp
-build-stamp:
-       dh_testdir
-
-       # Add here commands to compile the package.
-       $(MAKE)
-       -test -x /usr/bin/ocamlopt && $(MAKE) opt
-       #/usr/bin/docbook-to-man debian/mlminidom.sgml > mlminidom.1
-
-       touch build-stamp
-
-clean:
-       dh_testdir
-       dh_testroot
-       rm -f build-stamp configure-stamp
-
-       # Add here commands to clean up after the build process.
-       -$(MAKE) distclean
-
-       dh_clean
-
-install: build
-       dh_testdir
-       dh_testroot
-       dh_clean -k
-       dh_installdirs
-
-       # Add here commands to install the package into debian/mlminidom.
-       $(MAKE) install DESTDIR=$(CURDIR)/debian/mlminidom/usr/lib/ocaml
-
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
-       dh_testdir
-       dh_testroot
-#      dh_installdebconf       
-       dh_installdocs
-       dh_installexamples
-#      dh_installmenu
-#      dh_installlogrotate
-#      dh_installemacsen
-#      dh_installpam
-#      dh_installmime
-#      dh_installinit
-#      dh_installcron
-#      dh_installmanpages
-#      dh_installinfo
-#      dh_undocumented
-       if [ -s $(UPSTREAM_CHANGELOG) ]; then \
-               dh_installchangelogs $(UPSTREAM_CHANGELOG); \
-       else \
-               dh_installchangelogs; \
-       fi
-       dh_link
-       dh_strip
-       dh_compress
-       dh_fixperms
-#      dh_makeshlibs
-       dh_installdeb
-#      dh_perl
-       dh_shlibdeps
-       dh_gencontrol
-       dh_md5sums
-       dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/helm/DEVEL/mlminidom/minidom.ml b/helm/DEVEL/mlminidom/minidom.ml
deleted file mode 100644 (file)
index db02810..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-(* Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- *
- * This file is part of mlminidom, the Ocaml binding for minidom.
- * 
- * mlminidom 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.
- *
- * mlminidom 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 mlminidom; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
-
-type mDOMString
-type mDOMDoc
-type mDOMNode
-type mDOMAttr
-type mDOMEntity
-
-external string_of_mDOMString : mDOMString -> string = "ml_string_of_mDOMString"
-external mDOMString_of_string : string -> mDOMString = "ml_mDOMString_of_string"
-external mDOMString_eq : string -> string -> bool = "ml_mDOMString_eq"
-
-external doc_load : string -> mDOMDoc = "ml_doc_load"
-external doc_new : mDOMString -> mDOMDoc = "ml_doc_new"
-external doc_get_root_node : mDOMDoc -> mDOMNode = "ml_doc_get_root_node"
-
-external doc_add_entity : doc:mDOMDoc -> name:mDOMString -> content:mDOMString -> mDOMEntity = "ml_doc_add_entity"
-external doc_get_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_entity"
-external doc_get_predefined_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_predefined_entity"
-external entity_get_content : mDOMEntity -> mDOMString = "ml_entity_get_content"
-
-external node_is_text  : mDOMNode -> bool = "ml_node_is_text"
-external node_is_element : mDOMNode -> bool = "ml_node_is_element"
-external node_is_blank : mDOMNode -> bool = "ml_node_is_blank"
-external node_is_entity_ref : mDOMNode -> bool = "ml_node_is_entity_ref"
-external node_get_type : mDOMNode -> int = "ml_node_get_type"
-external node_get_name : mDOMNode -> mDOMString option = "ml_node_get_name"
-external node_get_ns_uri : mDOMNode -> mDOMString option = "ml_node_get_ns_uri"
-external node_get_attribute : node:mDOMNode -> name:mDOMString -> mDOMString option = "ml_node_get_attribute"
-external node_get_attribute_ns : node:mDOMNode -> name:mDOMString -> ns_uri:mDOMString -> mDOMString option = "ml_node_get_attribute_ns"
-external node_has_attribute : node:mDOMNode -> name:mDOMString -> bool = "ml_node_has_attribute"
-external node_has_attribute_ns : node:mDOMNode -> name:mDOMString -> ns_uri:mDOMString -> bool = "ml_node_has_attribute_ns"
-external node_get_content : mDOMNode -> mDOMString option = "ml_node_get_content"
-external node_get_parent : mDOMNode -> mDOMNode option = "ml_node_get_parent"
-external node_get_prev_sibling : mDOMNode -> mDOMNode option = "ml_node_get_prev_sibling"
-external node_get_next_sibling : mDOMNode -> mDOMNode option = "ml_node_get_next_sibling"
-external node_get_first_child : mDOMNode -> mDOMNode option = "ml_node_get_first_child"
-external node_get_first_attribute : mDOMNode -> mDOMAttr option = "ml_node_get_first_attribute"
-external node_is_first : mDOMNode -> bool = "ml_node_is_first"
-external node_is_last : mDOMNode -> bool = "ml_node_is_last"
-
-external attr_get_name : mDOMAttr -> mDOMString option = "ml_attr_get_name"
-external attr_get_ns_uri : mDOMAttr -> mDOMString option = "ml_attr_get_ns_uri"
-external attr_get_value : mDOMAttr -> mDOMString option = "ml_attr_get_value"
-external attr_get_prev_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_prev_sibling"
-external attr_get_next_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_next_sibling"
-external attr_get_parent : mDOMAttr -> mDOMNode option = "ml_attr_get_parent"
-
-let rec node_list_of_node_first =
-  function None -> []
-  |        Some node -> node :: (node_list_of_node_first (node_get_next_sibling node))
-
-let rec attr_list_of_attr_first =
-  function None -> []
-  |        Some attr -> attr :: (attr_list_of_attr_first (attr_get_next_sibling attr))
-  
-let node_get_children node =
-  (node_list_of_node_first (node_get_first_child node))
-
-let node_get_attributes node =
-  (attr_list_of_attr_first (node_get_first_attribute node))
-
diff --git a/helm/DEVEL/mlminidom/minidom.mli b/helm/DEVEL/mlminidom/minidom.mli
deleted file mode 100644 (file)
index 4e82b73..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-(* Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- *
- * This file is part of mlminidom, the Ocaml binding for minidom.
- * 
- * mlminidom 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.
- *
- * mlminidom 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 mlminidom; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
-
-type mDOMString
-type mDOMDoc
-type mDOMNode
-type mDOMAttr
-type mDOMEntity
-
-external string_of_mDOMString : mDOMString -> string = "ml_string_of_mDOMString"
-external mDOMString_of_string : string -> mDOMString = "ml_mDOMString_of_string"
-external mDOMString_eq : string -> string -> bool = "ml_mDOMString_eq"
-
-external doc_load : string -> mDOMDoc = "ml_doc_load"
-external doc_new : mDOMString -> mDOMDoc = "ml_doc_new"
-external doc_get_root_node : mDOMDoc -> mDOMNode = "ml_doc_get_root_node"
-
-external doc_add_entity : doc:mDOMDoc -> name:mDOMString -> content:mDOMString -> mDOMEntity = "ml_doc_add_entity"
-external doc_get_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_entity"
-external doc_get_predefined_entity : doc:mDOMDoc -> name:mDOMString -> mDOMEntity option = "ml_doc_get_predefined_entity"
-external entity_get_content : mDOMEntity -> mDOMString = "ml_entity_get_content"
-
-external node_is_text  : mDOMNode -> bool = "ml_node_is_text"
-external node_is_element : mDOMNode -> bool = "ml_node_is_element"
-external node_is_blank : mDOMNode -> bool = "ml_node_is_blank"
-external node_is_entity_ref : mDOMNode -> bool = "ml_node_is_entity_ref"
-external node_get_type : mDOMNode -> int = "ml_node_get_type"
-external node_get_name : mDOMNode -> mDOMString option = "ml_node_get_name"
-external node_get_ns_uri : mDOMNode -> mDOMString option = "ml_node_get_ns_uri"
-external node_get_attribute : node:mDOMNode -> name:mDOMString -> mDOMString option = "ml_node_get_attribute"
-external node_get_attribute_ns : node:mDOMNode -> name:mDOMString -> ns_uri:mDOMString -> mDOMString option = "ml_node_get_attribute_ns"
-external node_has_attribute : node:mDOMNode -> name:mDOMString -> bool = "ml_node_has_attribute"
-external node_has_attribute_ns : node:mDOMNode -> name:mDOMString -> ns_uri:mDOMString -> bool = "ml_node_has_attribute_ns"
-external node_get_content : mDOMNode -> mDOMString option = "ml_node_get_content"
-external node_get_parent : mDOMNode -> mDOMNode option = "ml_node_get_parent"
-external node_get_prev_sibling : mDOMNode -> mDOMNode option = "ml_node_get_prev_sibling"
-external node_get_next_sibling : mDOMNode -> mDOMNode option = "ml_node_get_next_sibling"
-external node_get_first_child : mDOMNode -> mDOMNode option = "ml_node_get_first_child"
-external node_get_first_attribute : mDOMNode -> mDOMAttr option = "ml_node_get_first_attribute"
-external node_is_first : mDOMNode -> bool = "ml_node_is_first"
-external node_is_last : mDOMNode -> bool = "ml_node_is_last"
-
-external attr_get_name : mDOMAttr -> mDOMString option = "ml_attr_get_name"
-external attr_get_ns_uri : mDOMAttr -> mDOMString option = "ml_attr_get_ns_uri"
-external attr_get_value : mDOMAttr -> mDOMString option = "ml_attr_get_value"
-external attr_get_prev_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_prev_sibling"
-external attr_get_next_sibling : mDOMAttr -> mDOMAttr option = "ml_attr_get_next_sibling"
-external attr_get_parent : mDOMAttr -> mDOMNode option = "ml_attr_get_parent"
-
-val node_get_children : mDOMNode -> mDOMNode list
-val node_get_attributes : mDOMNode -> mDOMAttr list
-
diff --git a/helm/DEVEL/mlminidom/ml_minidom.c b/helm/DEVEL/mlminidom/ml_minidom.c
deleted file mode 100644 (file)
index 52a53f2..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-/* Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- *
- * This file is part of mlminidom, the Ocaml binding for minidom.
- * 
- * mlminidom 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.
- *
- * mlminidom 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 mlminidom; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- */
-
-#include <assert.h>
-#include <mlvalues.h>
-#include <memory.h>
-#include <custom.h>
-
-#include "minidom.h"
-
-#define Val_ptr(p)        ((value) (p))
-#define Val_option(p,f)   ((p != NULL) ? ml_some(f(p)) : Val_unit)
-#define mDOMString_val(v) ((mDOMStringRef) String_val(v))
-#define mDOMDocRef_val(r) (*((mDOMDocRef *)Data_custom_val(r)))
-
-static value
-Val_mDOMConstString(mDOMConstStringRef s)
-{
-  return copy_string((char *) s);
-}
-
-static value
-Val_mDOMString(mDOMStringRef s)
-{
-  value r = copy_string((char *) s);
-  mdom_string_free(s);
-  return r;
-}
-
-static value
-ml_some(value v)
-{
-  CAMLparam1(v);
-  value ret = alloc_small(1,0);
-  Field(ret,0) = v;
-  CAMLreturn(ret);
-}
-
-value
-ml_string_of_mDOMString(value s)
-{
-  CAMLparam1(s);
-  CAMLreturn(s);
-}
-
-value
-ml_mDOMString_of_string(value s)
-{
-  CAMLparam1(s);
-  CAMLreturn(s);
-}
-
-static void
-ml_doc_free(value doc)
-{
-       mdom_doc_free(mDOMDocRef_val(doc));
-}
-
-static struct custom_operations ops =
-  {"it.unibo.cs.helm.gtkmathview.mDOMDocRef",
-   ml_doc_free,
-   custom_compare_default,
-   custom_hash_default,
-   custom_serialize_default,
-   custom_deserialize_default
-  };
-
-value
-ml_doc_load(value file_name)
-{
-  mDOMDocRef doc_ref;
-
-  CAMLparam1(file_name);
-  CAMLlocal1(val_doc_ref);
-
-  doc_ref = mdom_load(String_val(file_name), FALSE, NULL);
-  if (doc_ref == NULL) failwith("minidom: could not load document");
-  val_doc_ref = alloc_custom(&ops, sizeof(mDOMDocRef), 1, 1);
-
-  *((mDOMDocRef *)Data_custom_val(val_doc_ref)) = doc_ref;
-
-  CAMLreturn(val_doc_ref);
-}
-
-value
-ml_doc_new(value s)
-{
-  mDOMDocRef doc_ref;
-
-  CAMLparam1(s);
-  CAMLlocal1(val_doc_ref);
-
-  doc_ref = mdom_doc_new(mDOMString_val(s));
-  if (doc_ref == NULL) failwith("minidom: could not create new document");
-  val_doc_ref = alloc_custom(&ops, sizeof(mDOMDocRef), 1, 1);
-
-  *((mDOMDocRef *)Data_custom_val(val_doc_ref)) = doc_ref;
-
-  CAMLreturn(val_doc_ref);
-}
-
-
-value
-ml_doc_get_root_node(value doc)
-{
-  mDOMNodeRef root;
-
-  CAMLparam1(doc);
-  root = mdom_doc_get_root_node(mDOMDocRef_val(doc));
-  if (root == NULL) failwith("minidom: document has no root node!");
-
-  CAMLreturn((value) root);
-}
-
-value
-ml_doc_add_entity(value doc, value name, value content)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam3(doc, name, content);
-  ent = mdom_doc_add_entity(mDOMDocRef_val(doc), mDOMString_val(name), mDOMString_val(content));
-  if (ent == NULL) failwith("minidom: could not add entity");
-
-  CAMLreturn((value) ent);
-}
-
-value
-ml_doc_get_entity(value doc, value name)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam2(doc, name);
-  ent = mdom_doc_get_entity(mDOMDocRef_val(doc), mDOMString_val(name));
-
-  CAMLreturn(Val_option(ent, Val_ptr));
-}
-
-value
-ml_doc_get_predefined_entity(value name)
-{
-  mDOMEntityRef ent;
-
-  CAMLparam1(name);
-  ent = mdom_get_predefined_entity(mDOMString_val(name));
-
-  CAMLreturn(Val_option(ent, Val_ptr));
-}
-
-value
-ml_entity_get_content(value ent)
-{
-  CAMLparam1(ent);
-  CAMLreturn(Val_mDOMConstString(mdom_entity_get_content((mDOMEntityRef) ent)));
-}
-
-value
-ml_node_is_text(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_text((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_element(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_element((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_blank(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_blank((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_entity_ref(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_entity_ref((mDOMNodeRef) node)));
-}
-
-value
-ml_node_get_type(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_int(mdom_node_get_type((mDOMNodeRef) node)));
-}
-
-value
-ml_node_get_name(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_name((mDOMNodeRef) node), Val_mDOMConstString));
-}
-
-value
-ml_node_has_attribute(value node, value name)
-{
-  CAMLparam2(node,name);
-  CAMLreturn(Val_bool(mdom_node_has_attribute((mDOMNodeRef) node, String_val(name))));
-}
-
-value
-ml_node_has_attribute_ns(value node, value name, value uri)
-{
-  CAMLparam3(node,name,uri);
-  CAMLreturn(Val_bool(mdom_node_has_attribute_ns((mDOMNodeRef) node, String_val(name), String_val(uri))));
-}
-
-value
-ml_node_get_content(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_content((mDOMNodeRef) node), Val_mDOMString));
-}
-
-value
-ml_node_get_ns_uri(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_ns_uri((mDOMNodeRef) node), Val_mDOMConstString));
-}
-
-value
-ml_node_get_attribute(value node, value name)
-{
-  CAMLparam2(node,name);
-  CAMLreturn(Val_option(mdom_node_get_attribute((mDOMNodeRef) node, String_val(name)), Val_mDOMString));
-}
-
-value
-ml_node_get_attribute_ns(value node, value name, value ns_uri)
-{
-  CAMLparam2(node,name);
-  CAMLreturn(Val_option(mdom_node_get_attribute_ns((mDOMNodeRef) node,
-                                                  String_val(name),
-                                                  String_val(ns_uri)), Val_mDOMString));
-}
-
-value
-ml_node_get_parent(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_parent((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_prev_sibling(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_prev_sibling((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_next_sibling(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_next_sibling((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_first_child(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_first_child((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_get_first_attribute(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_option(mdom_node_get_first_attribute((mDOMNodeRef) node), Val_ptr));
-}
-
-value
-ml_node_is_first(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_first((mDOMNodeRef) node)));
-}
-
-value
-ml_node_is_last(value node)
-{
-  CAMLparam1(node);
-  CAMLreturn(Val_bool(mdom_node_is_last((mDOMNodeRef) node)));
-}
-
-value
-ml_attr_get_name(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_name((mDOMAttrRef) attr), Val_mDOMConstString));
-}
-
-value
-ml_attr_get_ns_uri(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_ns_uri((mDOMAttrRef) attr), Val_mDOMConstString));
-}
-
-value
-ml_attr_get_value(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_value((mDOMAttrRef) attr), Val_mDOMString));
-}
-
-value
-ml_attr_get_prev_sibling(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_prev_sibling((mDOMAttrRef) attr), Val_ptr));
-}
-
-value
-ml_attr_get_next_sibling(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_next_sibling((mDOMAttrRef) attr), Val_ptr));
-}
-
-value
-ml_attr_get_parent(value attr)
-{
-  CAMLparam1(attr);
-  CAMLreturn(Val_option(mdom_attr_get_parent((mDOMAttrRef) attr), Val_ptr));
-}
-
diff --git a/helm/DEVEL/mlminidom/ml_minidom.h b/helm/DEVEL/mlminidom/ml_minidom.h
deleted file mode 100644 (file)
index 6009f2a..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- *
- * This file is part of mlminidom, the Ocaml binding for minidom.
- * 
- * mlminidom 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.
- *
- * mlminidom 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 mlminidom; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- */
-
-#ifndef ml_minidom_h
-#define ml_minidom_h
-
-#define Val_ptr(p)        ((value) (p))
-#ifndef Val_option
-#define Val_option(p,f)   ((p != NULL) ? ml_some(f(p)) : Val_unit)
-#endif /* Val_option */
-#define mDOMString_val(v) ((mDOMStringRef) String_val(v))
-#define mDOMNode_val(v) ((mDOMNodeRef) v)
-
-#define mDOMNode_option_mDOMNodeRef(p) (((p) != NULL) ? ml_some((value) (p)) : Val_unit)
-#define mDOMNodeRef_mDOMNode_option(v) ((v == Val_unit) ? NULL : (mDOMNodeRef)Field((v),0))
-#define Val_mDOMNodeRef(p)             (mDOMNode_option_mDOMNodeRef(p))
-#define mDOMNodeRef_val(v)             (mDOMNodeRef_mDOMNode_option(v))
-#define mDOMDocRef_val(r)              (*((mDOMDocRef *)Data_custom_val(r)))
-
-#endif /* ml_minidom_h */
diff --git a/helm/DEVEL/mlminidom/mlminidom.spec.in b/helm/DEVEL/mlminidom/mlminidom.spec.in
deleted file mode 100644 (file)
index ecac5f7..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Summary: The Ocaml binding for the minidom library
-Name: @PACKAGE@
-Version: @VERSION@
-Release: 1
-Copyright: GPL
-URL: http://www.cs.unibo.it/helm
-Packager: Luca Padovani <luca.padovani@cs.unibo.it>
-Requires: ocaml >= 3.00, minidom >= 0.0.1, glib, glib-devel 
-Group: Applications/Publishing
-Source: www.cs.unibo.it:/~lpadovan/mml-widget/@PACKAGE@-@VERSION@.tar.gz
-%description
-The Ocaml binding for the minidom library
-
-%prep
-%setup
-
-%build
-./configure
-
-%install
-make
-make opt
-make install
-
-%files
-%doc AUTHORS COPYING ChangeLog NEWS README
-/usr/lib/ocaml/mlminidom
diff --git a/helm/DEVEL/mlminidom/ominidom.ml b/helm/DEVEL/mlminidom/ominidom.ml
deleted file mode 100644 (file)
index 5f408f7..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-(* Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- *
- * This file is part of mlminidom, the Ocaml binding for minidom.
- * 
- * mlminidom 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.
- *
- * mlminidom 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 mlminidom; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
-
-exception Node_has_no_parent;;
-exception Node_has_no_sibling of string;;
-exception Node_has_no_children;;
-exception Node_has_no_attributes;;
-exception Attribute_has_no_sibling of string;;
-exception Attribute_has_no_parent;;
-exception Undefined_entity;;
-
-let option_to_exception v e =
-  match v with
-    Some x -> x
-  | None   -> raise e
-;;
-
-class o_mDOMString (str: Minidom.mDOMString) =
-  object
-    method get_dom_string = str
-    method get_string = Minidom.string_of_mDOMString str
-  end;;
-  
-let o_mDOMString_of_string str =
-  new o_mDOMString (Minidom.mDOMString_of_string str)
-
-class o_mDOMEntity (ent : Minidom.mDOMEntity) =
-  object
-    method get_dom_entity = ent
-    method get_content =
-      new o_mDOMString (Minidom.entity_get_content ent)
-  end
-;;
-
-class o_mDOMDoc (doc : Minidom.mDOMDoc) =
-  object
-    method get_dom_doc = doc
-
-    method get_root_node =
-      new o_mDOMNode (Minidom.doc_get_root_node doc)
-    method add_entity (name : o_mDOMString) (value : o_mDOMString) =
-      new o_mDOMEntity
-        (Minidom.doc_add_entity doc
-         (name#get_dom_string) (value#get_dom_string)
-       )
-    method get_entity (name : o_mDOMString) =
-      match Minidom.doc_get_entity doc (name#get_dom_string) with
-      | Some x -> new o_mDOMEntity x
-      | None -> raise Undefined_entity
-    method get_predefined_entity (name : o_mDOMString) =
-      match Minidom.doc_get_predefined_entity doc (name#get_dom_string) with
-      | Some x -> new o_mDOMEntity x
-      | None -> raise Undefined_entity
-  end
-and o_mDOMNode (node : Minidom.mDOMNode) =
-  object
-    method get_dom_node = node
-
-    method is_text = Minidom.node_is_text node
-    method is_element = Minidom.node_is_element node
-    method is_blank = Minidom.node_is_blank node
-    method is_entity_ref = Minidom.node_is_entity_ref node
-
-    method get_type = Minidom.node_get_type node
-    method get_name = 
-      match Minidom.node_get_name node with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_ns_uri =
-      match Minidom.node_get_ns_uri node with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_attribute (name : o_mDOMString) =
-      match Minidom.node_get_attribute node (name#get_dom_string) with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_attribute_ns (name : o_mDOMString) (uri : o_mDOMString) =
-      match 
-        Minidom.node_get_attribute_ns node
-         (name#get_dom_string) (uri#get_dom_string)
-      with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method has_attribute (name : o_mDOMString) =
-     Minidom.node_has_attribute node (name#get_dom_string)
-    method has_attribute_ns (name : o_mDOMString) (uri : o_mDOMString) =
-     Minidom.node_has_attribute_ns node (name#get_dom_string) (uri#get_dom_string)
-    method get_content =
-      match Minidom.node_get_content node with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_parent =
-      new o_mDOMNode
-       (option_to_exception (Minidom.node_get_parent node) Node_has_no_parent)
-    method get_prev_sibling =
-      new o_mDOMNode
-       (option_to_exception
-        (Minidom.node_get_prev_sibling node)
-        (Node_has_no_sibling "left")
-       )
-    method get_next_sibling =
-      new o_mDOMNode
-       (option_to_exception
-        (Minidom.node_get_next_sibling node)
-        (Node_has_no_sibling "right")
-       )
-    method get_first_child =
-      new o_mDOMNode
-       (option_to_exception
-        (Minidom.node_get_first_child node)
-        (Node_has_no_children)
-       )
-    method get_first_attribute =
-      new o_mDOMAttr
-       (option_to_exception
-         (Minidom.node_get_first_attribute node)
-         (Node_has_no_attributes)
-       )
-    method is_first = Minidom.node_is_first node
-    method is_last = Minidom.node_is_last node
-
-    method get_children =
-      List.map (function x -> new o_mDOMNode x) (Minidom.node_get_children node)
-    method get_attributes = List.map
-      (function x -> new o_mDOMAttr x) (Minidom.node_get_attributes node)
-  end
-and o_mDOMAttr (attr : Minidom.mDOMAttr) =
-  object
-    method get_dom_attr = attr
-
-    method get_name =
-      match Minidom.attr_get_name attr with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_ns_uri =
-      match Minidom.attr_get_ns_uri attr with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_value =
-      match Minidom.attr_get_value attr with
-      | Some x -> Some (new o_mDOMString x)
-      | None   -> None
-    method get_prev_sibling =
-      new o_mDOMAttr
-        (option_to_exception
-         (Minidom.attr_get_prev_sibling attr)
-         (Attribute_has_no_sibling "left")
-       )
-    method get_next_sibling =
-      new o_mDOMAttr
-        (option_to_exception
-         (Minidom.attr_get_next_sibling attr)
-         (Attribute_has_no_sibling "right")
-       )
-    method get_parent =
-      new o_mDOMNode
-        (option_to_exception
-         (Minidom.attr_get_parent attr) Attribute_has_no_parent
-       )
-  end
-;;
-    
diff --git a/helm/DEVEL/mlminidom/ominidom.mli b/helm/DEVEL/mlminidom/ominidom.mli
deleted file mode 100644 (file)
index e555a86..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-(* Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- *
- * This file is part of mlminidom, the Ocaml binding for minidom.
- * 
- * mlminidom 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.
- *
- * mlminidom 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 mlminidom; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
-
-exception Node_has_no_parent
-exception Node_has_no_sibling of string
-exception Node_has_no_children
-exception Node_has_no_attributes
-exception Attribute_has_no_sibling of string
-exception Attribute_has_no_parent
-exception Undefined_entity
-
-class o_mDOMString : Minidom.mDOMString ->
-  object
-    method get_dom_string : Minidom.mDOMString
-    method get_string : string
-  end
-
-val o_mDOMString_of_string : string -> o_mDOMString
-
-class o_mDOMEntity : Minidom.mDOMEntity ->
-  object
-    method get_content : o_mDOMString
-    method get_dom_entity : Minidom.mDOMEntity
-  end
-
-class o_mDOMDoc : Minidom.mDOMDoc ->
-  object
-    method add_entity : o_mDOMString -> o_mDOMString -> o_mDOMEntity
-    method get_dom_doc : Minidom.mDOMDoc
-    method get_entity : o_mDOMString -> o_mDOMEntity
-    method get_predefined_entity : o_mDOMString -> o_mDOMEntity
-    method get_root_node : o_mDOMNode
-  end
-and o_mDOMNode : Minidom.mDOMNode ->
-  object
-    method get_attribute : o_mDOMString -> o_mDOMString option
-    method get_attribute_ns :
-      o_mDOMString -> o_mDOMString -> o_mDOMString option
-    method has_attribute : o_mDOMString -> bool
-    method has_attribute_ns : o_mDOMString -> o_mDOMString -> bool
-    method get_attributes : o_mDOMAttr list
-    method get_children : o_mDOMNode list
-    method get_content : o_mDOMString option
-    method get_dom_node : Minidom.mDOMNode
-    method get_first_attribute : o_mDOMAttr
-    method get_first_child : o_mDOMNode
-    method get_name : o_mDOMString option
-    method get_next_sibling : o_mDOMNode
-    method get_ns_uri : o_mDOMString option
-    method get_parent : o_mDOMNode
-    method get_prev_sibling : o_mDOMNode
-    method get_type : int
-    method is_blank : bool
-    method is_element : bool
-    method is_entity_ref : bool
-    method is_first : bool
-    method is_last : bool
-    method is_text : bool
-  end
-and o_mDOMAttr : Minidom.mDOMAttr ->
-  object
-    method get_dom_attr : Minidom.mDOMAttr
-    method get_name : o_mDOMString option
-    method get_next_sibling : o_mDOMAttr
-    method get_ns_uri : o_mDOMString option
-    method get_parent : o_mDOMNode
-    method get_prev_sibling : o_mDOMAttr
-    method get_value : o_mDOMString option
-  end
diff --git a/helm/DEVEL/mlminidom/test.ml b/helm/DEVEL/mlminidom/test.ml
deleted file mode 100644 (file)
index a906c05..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-(* Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- *
- * This file is part of mlminidom, the Ocaml binding for minidom.
- * 
- * mlminidom 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.
- *
- * mlminidom 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 mlminidom; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to the author.
- *)
-
-let doc = Minidom.doc_load "test.xml"
-
-let root = Minidom.doc_get_root_node doc
-
-let check_attribute_ns attr =
-  Printf.printf "\n\n";
-  let ns_uri = Minidom.attr_get_ns_uri attr
-  and attr_name = Minidom.attr_get_name attr
-  and attr_value = Minidom.attr_get_value attr
-  and parent = Minidom.attr_get_parent attr
-  in
-  match parent,ns_uri,attr_name,attr_value with
-    Some parent_node,Some uri,Some attribute_name,Some attribute_value ->
-      let attr_info =
-       (Minidom.node_get_attribute_ns parent_node attribute_name uri,
-        Minidom.node_has_attribute_ns parent_node attribute_name uri)
-      in begin
-        match attr_info with
-          Some attr1, true ->
-           Printf.printf "found the attribute with ns %s (was %s)\n"
-              (Minidom.string_of_mDOMString attr1) (Minidom.string_of_mDOMString attribute_value)
-        | None, false ->
-           Printf.printf "attribute not found (uri was %s)!!!!\n" (Minidom.string_of_mDOMString uri)
-        | _,_ -> assert false
-      end
-  | _ ->
-      Printf.printf "parent_node == NULL || uri == NULL || attribute_name == NULL || attribute_value == NULL\n"
-;;
-    
-let print_attribute attr =
-  check_attribute_ns attr;
-  let ns_uri = Minidom.attr_get_ns_uri attr
-  in
-  begin
-    match ns_uri with
-      Some uri -> Printf.printf " %s:" (Minidom.string_of_mDOMString uri);
-    | None -> ()
-  end;
-  match ((Minidom.attr_get_name attr), (Minidom.attr_get_value attr)) with
-    (Some attr_name, Some attr_value) ->
-      Printf.printf " %s=\"%s\"" (Minidom.string_of_mDOMString attr_name) (Minidom.string_of_mDOMString attr_value) 
-  | (Some attr_name, _) ->
-      Printf.printf " ??? attribute %s has no value !!!" (Minidom.string_of_mDOMString attr_name)
-  | (_,_) ->
-      Printf.printf " ??? very strange attribute !!!"
-;;
-
-let rec print_node n node =
-  if Minidom.node_is_blank node then ()
-  else if Minidom.node_is_element node then begin
-    match Minidom.node_get_name node with
-      Some node_name -> 
-        begin
-          let children = Minidom.node_get_children node
-          and attributes = Minidom.node_get_attributes node
-          and ns_uri = Minidom.node_get_ns_uri node
-          and is_first,is_last = (Minidom.node_is_first node), (Minidom.node_is_last node)
-          in
-          for i = 1 to n do print_char ' ' done;
-          Printf.printf "<";
-          begin
-            match ns_uri with
-              Some uri -> Printf.printf "%s:" (Minidom.string_of_mDOMString uri)
-            | None     -> ()
-          end;
-          Printf.printf "%s" (Minidom.string_of_mDOMString node_name);
-          List.iter print_attribute attributes;
-          Printf.printf ">\n";
-          List.iter (print_node (n + 2)) children;
-          for i = 1 to n do print_char ' ' done;
-          Printf.printf "</%s>\n" (Minidom.string_of_mDOMString node_name)
-        end
-    | None -> Printf.printf "??? this node has no name !!!\n"
-  end else if Minidom.node_is_text node then begin
-    match Minidom.node_get_content node with
-      Some node_content ->
-        for i = 1 to n do print_char ' ' done;
-        Printf.printf "%s\n" (Minidom.string_of_mDOMString node_content)
-    | None -> Printf.printf "??? this node has no content !!!\n"
-  end else begin
-    Printf.printf "don't know how to manage a node with type %d\n" (Minidom.node_get_type node)
-  end
-;;
-  
-print_node 0 root;;
diff --git a/helm/DEVEL/mlminidom/test.xml b/helm/DEVEL/mlminidom/test.xml
deleted file mode 100644 (file)
index 83d2eef..0000000
+++ /dev/null
@@ -1,505 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<?cocoon-format type="text/xhtml"?>
-<m:math xmlns:helm="http://www.cs.unibo.it/helm" xmlns:m="http://www.w3.org/1998/Math/MathML">
-    <m:mtable helm:xref="i0" columnalign="left" equalrows="false" align="baseline 1">
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mtext>DEFINITION and_ind() OF TYPE</m:mtext>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mphantom>
-                        <m:mtext>__</m:mtext>
-                    </m:mphantom>
-                    <m:semantics xmlns:xlink="http://www.w3.org/1999/xlink">
-                        <m:mrow helm:xref="i22">
-                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo stretchy="false">(</m:mo>
-                                            <m:mrow helm:xref="i23">
-                                                <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mo color="Blue">&#928;</m:mo>
-                                                            <m:mi>A</m:mi>
-                                                            <m:mo>:</m:mo>
-                                                            <m:mrow helm:xref="i24">
-                                                                <m:mo>Prop</m:mo>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mrow>
-                                                                <m:mo>.</m:mo>
-                                                                <m:mrow helm:xref="i25">
-                                                                    <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mo color="Blue">&#928;</m:mo>
-                                                                                <m:mi>B</m:mi>
-                                                                                <m:mo>:</m:mo>
-                                                                                <m:mrow helm:xref="i26">
-                                                                                    <m:mo>Prop</m:mo>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mrow>
-                                                                                    <m:mo>.</m:mo>
-                                                                                    <m:mrow helm:xref="i27">
-                                                                                        <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mo color="Blue">&#928;</m:mo>
-                                                                                                    <m:mi>P</m:mi>
-                                                                                                    <m:mo>:</m:mo>
-                                                                                                    <m:mrow helm:xref="i28">
-                                                                                                        <m:mo>Prop</m:mo>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mrow>
-                                                                                                        <m:mo>.</m:mo>
-                                                                                                        <m:mrow helm:xref="i29">
-                                                                                                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mo color="Blue">&#928;</m:mo>
-                                                                                                                        <m:mi>f</m:mi>
-                                                                                                                        <m:mo>:</m:mo>
-                                                                                                                        <m:mrow helm:xref="i30">
-                                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                                            <m:mi helm:xref="i31">A</m:mi>
-                                                                                                                            <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                                            <m:mrow helm:xref="i32">
-                                                                                                                                <m:mo stretchy="false">(</m:mo>
-                                                                                                                                <m:mi helm:xref="i33">B</m:mi>
-                                                                                                                                <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                                                <m:mi helm:xref="i34">P</m:mi>
-                                                                                                                                <m:mo stretchy="false">)</m:mo>
-                                                                                                                            </m:mrow>
-                                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mrow>
-                                                                                                                            <m:mo>.</m:mo>
-                                                                                                                            <m:mrow helm:xref="i35">
-                                                                                                                                <m:mo color="Blue">&#928;</m:mo>
-                                                                                                                                <m:mi>a</m:mi>
-                                                                                                                                <m:mo>:</m:mo>
-                                                                                                                                <m:mrow helm:xref="i36">
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi xlink:href="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i37">and</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi helm:xref="i38">A</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi helm:xref="i39">B</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mo>.</m:mo>
-                                                                                                                                <m:mi helm:xref="i40">P</m:mi>
-                                                                                                                            </m:mrow>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                            </m:mtable>
-                                                                                                        </m:mrow>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                        </m:mtable>
-                                                                                    </m:mrow>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                    </m:mtable>
-                                                                </m:mrow>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                </m:mtable>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo color="#b03060">:&gt;</m:mo>
-                                            <m:mrow helm:xref="i41">
-                                                <m:mo>Prop</m:mo>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo stretchy="false">)</m:mo>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                            </m:mtable>
-                        </m:mrow>
-                        <m:annotation-xml encoding="MathML">
-                            <m:apply helm:xref="i22">
-                                <m:csymbol>cast</m:csymbol>
-                                <m:apply helm:xref="i23">
-                                    <m:csymbol>prod</m:csymbol>
-                                    <m:bvar>
-                                        <m:ci>A</m:ci>
-                                        <m:type>
-                                            <m:apply helm:xref="i24">
-                                                <m:csymbol>Prop</m:csymbol>
-                                            </m:apply>
-                                        </m:type>
-                                    </m:bvar>
-                                    <m:apply helm:xref="i25">
-                                        <m:csymbol>prod</m:csymbol>
-                                        <m:bvar>
-                                            <m:ci>B</m:ci>
-                                            <m:type>
-                                                <m:apply helm:xref="i26">
-                                                    <m:csymbol>Prop</m:csymbol>
-                                                </m:apply>
-                                            </m:type>
-                                        </m:bvar>
-                                        <m:apply helm:xref="i27">
-                                            <m:csymbol>prod</m:csymbol>
-                                            <m:bvar>
-                                                <m:ci>P</m:ci>
-                                                <m:type>
-                                                    <m:apply helm:xref="i28">
-                                                        <m:csymbol>Prop</m:csymbol>
-                                                    </m:apply>
-                                                </m:type>
-                                            </m:bvar>
-                                            <m:apply helm:xref="i29">
-                                                <m:csymbol>prod</m:csymbol>
-                                                <m:bvar>
-                                                    <m:ci>f</m:ci>
-                                                    <m:type>
-                                                        <m:apply helm:xref="i30">
-                                                            <m:csymbol>arrow</m:csymbol>
-                                                            <m:ci helm:xref="i31">A</m:ci>
-                                                            <m:apply helm:xref="i32">
-                                                                <m:csymbol>arrow</m:csymbol>
-                                                                <m:ci helm:xref="i33">B</m:ci>
-                                                                <m:ci helm:xref="i34">P</m:ci>
-                                                            </m:apply>
-                                                        </m:apply>
-                                                    </m:type>
-                                                </m:bvar>
-                                                <m:apply helm:xref="i35">
-                                                    <m:csymbol>prod</m:csymbol>
-                                                    <m:bvar>
-                                                        <m:ci>a</m:ci>
-                                                        <m:type>
-                                                            <m:apply helm:xref="i36">
-                                                                <m:csymbol>app</m:csymbol>
-                                                                <m:ci definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i37">and</m:ci>
-                                                                <m:ci helm:xref="i38">A</m:ci>
-                                                                <m:ci helm:xref="i39">B</m:ci>
-                                                            </m:apply>
-                                                        </m:type>
-                                                    </m:bvar>
-                                                    <m:ci helm:xref="i40">P</m:ci>
-                                                </m:apply>
-                                            </m:apply>
-                                        </m:apply>
-                                    </m:apply>
-                                </m:apply>
-                                <m:apply helm:xref="i41">
-                                    <m:csymbol>Prop</m:csymbol>
-                                </m:apply>
-                            </m:apply>
-                        </m:annotation-xml>
-                    </m:semantics>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mtext>AS</m:mtext>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-        <m:mtr>
-            <m:mtd>
-                <m:mrow>
-                    <m:mphantom>
-                        <m:mtext>__</m:mtext>
-                    </m:mphantom>
-                    <m:semantics xmlns:xlink="http://www.w3.org/1999/xlink">
-                        <m:mrow helm:xref="i1">
-                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mo color="Red">&#955;</m:mo>
-                                        <m:mi>A</m:mi>
-                                        <m:mo>:</m:mo>
-                                        <m:mrow helm:xref="i2">
-                                            <m:mo>Prop</m:mo>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                                <m:mtr>
-                                    <m:mtd>
-                                        <m:mrow>
-                                            <m:mo>.</m:mo>
-                                            <m:mrow helm:xref="i3">
-                                                <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mo color="Red">&#955;</m:mo>
-                                                            <m:mi>B</m:mi>
-                                                            <m:mo>:</m:mo>
-                                                            <m:mrow helm:xref="i4">
-                                                                <m:mo>Prop</m:mo>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                    <m:mtr>
-                                                        <m:mtd>
-                                                            <m:mrow>
-                                                                <m:mo>.</m:mo>
-                                                                <m:mrow helm:xref="i5">
-                                                                    <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mo color="Red">&#955;</m:mo>
-                                                                                <m:mi>P</m:mi>
-                                                                                <m:mo>:</m:mo>
-                                                                                <m:mrow helm:xref="i6">
-                                                                                    <m:mo>Prop</m:mo>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                        <m:mtr>
-                                                                            <m:mtd>
-                                                                                <m:mrow>
-                                                                                    <m:mo>.</m:mo>
-                                                                                    <m:mrow helm:xref="i7">
-                                                                                        <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mo color="Red">&#955;</m:mo>
-                                                                                                    <m:mi>f</m:mi>
-                                                                                                    <m:mo>:</m:mo>
-                                                                                                    <m:mrow helm:xref="i8">
-                                                                                                        <m:mo stretchy="false">(</m:mo>
-                                                                                                        <m:mi helm:xref="i9">A</m:mi>
-                                                                                                        <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                        <m:mrow helm:xref="i10">
-                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                            <m:mi helm:xref="i11">B</m:mi>
-                                                                                                            <m:mo color="Blue">&#8594;</m:mo>
-                                                                                                            <m:mi helm:xref="i12">P</m:mi>
-                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                        </m:mrow>
-                                                                                                        <m:mo stretchy="false">)</m:mo>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                            <m:mtr>
-                                                                                                <m:mtd>
-                                                                                                    <m:mrow>
-                                                                                                        <m:mo>.</m:mo>
-                                                                                                        <m:mrow helm:xref="i13">
-                                                                                                            <m:mtable columnalign="left" equalrows="false" align="baseline 1">
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mo color="Red">&#955;</m:mo>
-                                                                                                                        <m:mi>a</m:mi>
-                                                                                                                        <m:mo>:</m:mo>
-                                                                                                                        <m:mrow helm:xref="i14">
-                                                                                                                            <m:mo stretchy="false">(</m:mo>
-                                                                                                                            <m:mi xlink:href="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i15">and</m:mi>
-                                                                                                                            <m:mphantom>
-                                                                                                                                <m:mtext>_</m:mtext>
-                                                                                                                            </m:mphantom>
-                                                                                                                            <m:mi helm:xref="i16">A</m:mi>
-                                                                                                                            <m:mphantom>
-                                                                                                                                <m:mtext>_</m:mtext>
-                                                                                                                            </m:mphantom>
-                                                                                                                            <m:mi helm:xref="i17">B</m:mi>
-                                                                                                                            <m:mo stretchy="false">)</m:mo>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                                <m:mtr>
-                                                                                                                    <m:mtd>
-                                                                                                                        <m:mrow>
-                                                                                                                            <m:mo>.</m:mo>
-                                                                                                                            <m:mrow helm:xref="i18">
-                                                                                                                                <m:mo>&lt;</m:mo>
-                                                                                                                                <m:mi helm:xref="i19">P</m:mi>
-                                                                                                                                <m:mo>&gt;</m:mo>
-                                                                                                                                <m:mo>CASES</m:mo>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mi helm:xref="i20">a</m:mi>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mo>OF</m:mo>
-                                                                                                                                <m:mrow>
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi>conj</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$1</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$2</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mo color="Green">&#8658;</m:mo>
-                                                                                                                                <m:mrow>
-                                                                                                                                    <m:mo stretchy="false">(</m:mo>
-                                                                                                                                    <m:mi helm:xref="i21">f</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$1</m:mi>
-                                                                                                                                    <m:mphantom>
-                                                                                                                                        <m:mtext>_</m:mtext>
-                                                                                                                                    </m:mphantom>
-                                                                                                                                    <m:mi>$2</m:mi>
-                                                                                                                                    <m:mo stretchy="false">)</m:mo>
-                                                                                                                                </m:mrow>
-                                                                                                                                <m:mphantom>
-                                                                                                                                    <m:mtext>_</m:mtext>
-                                                                                                                                </m:mphantom>
-                                                                                                                                <m:mo>END</m:mo>
-                                                                                                                            </m:mrow>
-                                                                                                                        </m:mrow>
-                                                                                                                    </m:mtd>
-                                                                                                                </m:mtr>
-                                                                                                            </m:mtable>
-                                                                                                        </m:mrow>
-                                                                                                    </m:mrow>
-                                                                                                </m:mtd>
-                                                                                            </m:mtr>
-                                                                                        </m:mtable>
-                                                                                    </m:mrow>
-                                                                                </m:mrow>
-                                                                            </m:mtd>
-                                                                        </m:mtr>
-                                                                    </m:mtable>
-                                                                </m:mrow>
-                                                            </m:mrow>
-                                                        </m:mtd>
-                                                    </m:mtr>
-                                                </m:mtable>
-                                            </m:mrow>
-                                        </m:mrow>
-                                    </m:mtd>
-                                </m:mtr>
-                            </m:mtable>
-                        </m:mrow>
-                        <m:annotation-xml encoding="MathML">
-                            <m:lambda helm:xref="i1">
-                                <m:bvar>
-                                    <m:ci>A</m:ci>
-                                    <m:type>
-                                        <m:apply helm:xref="i2">
-                                            <m:csymbol>Prop</m:csymbol>
-                                        </m:apply>
-                                    </m:type>
-                                </m:bvar>
-                                <m:lambda helm:xref="i3">
-                                    <m:bvar>
-                                        <m:ci>B</m:ci>
-                                        <m:type>
-                                            <m:apply helm:xref="i4">
-                                                <m:csymbol>Prop</m:csymbol>
-                                            </m:apply>
-                                        </m:type>
-                                    </m:bvar>
-                                    <m:lambda helm:xref="i5">
-                                        <m:bvar>
-                                            <m:ci>P</m:ci>
-                                            <m:type>
-                                                <m:apply helm:xref="i6">
-                                                    <m:csymbol>Prop</m:csymbol>
-                                                </m:apply>
-                                            </m:type>
-                                        </m:bvar>
-                                        <m:lambda helm:xref="i7">
-                                            <m:bvar>
-                                                <m:ci>f</m:ci>
-                                                <m:type>
-                                                    <m:apply helm:xref="i8">
-                                                        <m:csymbol>arrow</m:csymbol>
-                                                        <m:ci helm:xref="i9">A</m:ci>
-                                                        <m:apply helm:xref="i10">
-                                                            <m:csymbol>arrow</m:csymbol>
-                                                            <m:ci helm:xref="i11">B</m:ci>
-                                                            <m:ci helm:xref="i12">P</m:ci>
-                                                        </m:apply>
-                                                    </m:apply>
-                                                </m:type>
-                                            </m:bvar>
-                                            <m:lambda helm:xref="i13">
-                                                <m:bvar>
-                                                    <m:ci>a</m:ci>
-                                                    <m:type>
-                                                        <m:apply helm:xref="i14">
-                                                            <m:csymbol>app</m:csymbol>
-                                                            <m:ci definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind" helm:xref="i15">and</m:ci>
-                                                            <m:ci helm:xref="i16">A</m:ci>
-                                                            <m:ci helm:xref="i17">B</m:ci>
-                                                        </m:apply>
-                                                    </m:type>
-                                                </m:bvar>
-                                                <m:apply helm:xref="i18">
-                                                    <m:csymbol>mutcase</m:csymbol>
-                                                    <m:ci helm:xref="i19">P</m:ci>
-                                                    <m:ci helm:xref="i20">a</m:ci>
-                                                    <m:apply>
-                                                        <m:csymbol>app</m:csymbol>
-                                                        <m:ci>conj</m:ci>
-                                                        <m:ci>$1</m:ci>
-                                                        <m:ci>$2</m:ci>
-                                                    </m:apply>
-                                                    <m:apply>
-                                                        <m:csymbol>app</m:csymbol>
-                                                        <m:ci helm:xref="i21">f</m:ci>
-                                                        <m:ci>$1</m:ci>
-                                                        <m:ci>$2</m:ci>
-                                                    </m:apply>
-                                                </m:apply>
-                                            </m:lambda>
-                                        </m:lambda>
-                                    </m:lambda>
-                                </m:lambda>
-                            </m:lambda>
-                        </m:annotation-xml>
-                    </m:semantics>
-                </m:mrow>
-            </m:mtd>
-        </m:mtr>
-    </m:mtable>
-</m:math>
diff --git a/helm/DEVEL/ocaml-http/.cvsignore b/helm/DEVEL/ocaml-http/.cvsignore
deleted file mode 100644 (file)
index 391f4f5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-*.cmi
-*.cmo
-*.cmx
-*.cma
-*.cmxa
-*.o
-*.a
-*.deb
diff --git a/helm/DEVEL/ocaml-http/.depend b/helm/DEVEL/ocaml-http/.depend
deleted file mode 100644 (file)
index c175b19..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-http_common.cmo: http_constants.cmi http_types.cmo http_common.cmi 
-http_common.cmx: http_constants.cmx http_types.cmx http_common.cmi 
-http_constants.cmo: http_constants.cmi 
-http_constants.cmx: http_constants.cmi 
-http_daemon.cmo: http_common.cmi http_constants.cmi http_misc.cmi \
-    http_parser.cmi http_parser_sanity.cmi http_request.cmi \
-    http_tcp_server.cmi http_types.cmo http_daemon.cmi 
-http_daemon.cmx: http_common.cmx http_constants.cmx http_misc.cmx \
-    http_parser.cmx http_parser_sanity.cmx http_request.cmx \
-    http_tcp_server.cmx http_types.cmx http_daemon.cmi 
-http_message.cmo: http_common.cmi http_constants.cmi http_misc.cmi \
-    http_parser_sanity.cmi http_types.cmo http_message.cmi 
-http_message.cmx: http_common.cmx http_constants.cmx http_misc.cmx \
-    http_parser_sanity.cmx http_types.cmx http_message.cmi 
-http_misc.cmo: http_types.cmo http_misc.cmi 
-http_misc.cmx: http_types.cmx http_misc.cmi 
-http_parser.cmo: http_common.cmi http_constants.cmi http_parser_sanity.cmi \
-    http_types.cmo http_parser.cmi 
-http_parser.cmx: http_common.cmx http_constants.cmx http_parser_sanity.cmx \
-    http_types.cmx http_parser.cmi 
-http_parser_sanity.cmo: http_constants.cmi http_types.cmo \
-    http_parser_sanity.cmi 
-http_parser_sanity.cmx: http_constants.cmx http_types.cmx \
-    http_parser_sanity.cmi 
-http_request.cmo: http_common.cmi http_message.cmi http_misc.cmi \
-    http_parser.cmi http_types.cmo http_request.cmi 
-http_request.cmx: http_common.cmx http_message.cmx http_misc.cmx \
-    http_parser.cmx http_types.cmx http_request.cmi 
-http_response.cmo: http_common.cmi http_constants.cmi http_daemon.cmi \
-    http_message.cmi http_misc.cmi http_types.cmo http_response.cmi 
-http_response.cmx: http_common.cmx http_constants.cmx http_daemon.cmx \
-    http_message.cmx http_misc.cmx http_types.cmx http_response.cmi 
-http_tcp_server.cmo: http_threaded_tcp_server.cmi http_tcp_server.cmi 
-http_tcp_server.cmx: http_threaded_tcp_server.cmi http_tcp_server.cmi 
-http_common.cmi: http_types.cmo 
-http_constants.cmi: http_types.cmo 
-http_daemon.cmi: http_types.cmo 
-http_message.cmi: http_types.cmo 
-http_parser.cmi: http_types.cmo 
-http_request.cmi: http_types.cmo 
-http_response.cmi: http_types.cmo 
-http_tcp_server.cmi: http_types.cmo 
diff --git a/helm/DEVEL/ocaml-http/.ocamlinit b/helm/DEVEL/ocaml-http/.ocamlinit
deleted file mode 100644 (file)
index 577740d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#use "tophttp";;
diff --git a/helm/DEVEL/ocaml-http/INSTALL b/helm/DEVEL/ocaml-http/INSTALL
deleted file mode 100644 (file)
index c98cdb4..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-
-In order to build ocaml-http you will need:
-
-  - the ocaml compiler (>= 3.06)
-    [ http://caml.inria.fr ]
-
-  - findlib (>= 0.8)
-    [ http://www.ocaml-programming.de/packages/documentation/findlib/ ]
-
-  - ocamlnet (>= 0.94)
-    [ http://sourceforge.net/projects/ocamlnet ]
-
-  - pcre-ocaml (>= 4.28.2)
-    [ http://www.ai.univie.ac.at/~markus/home/ocaml_sources.html ]
-
-To build the bytecode library:
-
-  $ make all
-
-To build the nativecode library (only if you have an ocaml native code
-compiler):
-
-  $ make opt
-
-To install the built stuff in the OCaml standard library directory (as root):
-
-  # make install
-
-To install the built stuff in another directory:
-
-  $ make install DESTDIR=another_directory
-
-To build a debian package of the library (please note that to build a debian
-package you will also need some additional stuff like debhelper, fakeroot, ...):
-
-  $ fakeroot debian/rules binary
-
diff --git a/helm/DEVEL/ocaml-http/LICENSE b/helm/DEVEL/ocaml-http/LICENSE
deleted file mode 100644 (file)
index baff777..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
diff --git a/helm/DEVEL/ocaml-http/META.in b/helm/DEVEL/ocaml-http/META.in
deleted file mode 100644 (file)
index 8c32546..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-description = "OCaml HTTP daemon library"
-version = "@DISTVERSION@"
-requires = "unix,pcre,netstring"
-requires(mt) = "unix,pcre,netstring,threads"
-archive(byte) = "http.cma"
-archive(native) = "http.cmxa"
-archive(mt,byte) = "http_mt.cma"
-archive(mt,native) = "http_mt.cmxa"
diff --git a/helm/DEVEL/ocaml-http/Makefile b/helm/DEVEL/ocaml-http/Makefile
deleted file mode 100644 (file)
index 488ae40..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-include Makefile.defs
-
-MODULES =      \
-       http_types http_constants http_parser_sanity http_misc http_common      \
-       http_tcp_server http_parser http_message http_request http_daemon       \
-       http_response
-
-THREADED_SRV = http_threaded_tcp_server
-MODULES_MT = $(patsubst http_tcp_server, mt/$(THREADED_SRV) http_tcp_server, $(MODULES))
-MODULES_NON_MT = $(patsubst http_tcp_server, non_mt/$(THREADED_SRV) http_tcp_server, $(MODULES))
-PUBLIC_MODULES = http_common http_message http_request http_daemon http_response
-PUBLIC_IMPL = http_types
-OCAMLDOC_STUFF = *.mli $(patsubst %, %.ml, $(PUBLIC_IMPL))
-DOCDIR = doc/html
-DOTDIR = doc/dot
-TEXDIR = doc/latex
-DESTDIR = $(shell $(OCAMLFIND) printconf stdlib) 
-
-all: all_non_mt all_mt
-opt: opt_non_mt opt_mt
-all_non_mt: http.cma
-opt_non_mt: http.cmxa
-all_mt: http_mt.cma
-opt_mt: http_mt.cmxa
-world: all opt
-doc: $(DOTDIR)/ocaml-http.ps $(TEXDIR)/ocaml-http.tex $(OCAMLDOC_STUFF)
-       $(OCAMLDOC) -html -d $(DOCDIR) $(OCAMLDOC_STUFF)
-$(TEXDIR)/ocaml-http.tex: $(OCAMLDOC_STUFF)
-       $(OCAMLDOC) -latex -o $@ $^
-$(DOTDIR)/ocaml-http.ps: $(DOTDIR)/ocaml-http.dot
-       $(DOT) -Tps $< > $@
-$(DOTDIR)/ocaml-http.dot: *.ml *.mli
-       $(OCAMLDOC) -dot -o $(DOTDIR)/ocaml-http.dot *.ml *.mli
-
-examples:
-       $(MAKE) -C examples/
-examples.opt:
-       $(MAKE) -C examples/ opt
-
-include .depend
-
-depend:
-       $(OCAMLDEP) *.ml *.mli > .depend
-
-%.cmi: %.mli
-       $(OCAMLC) -c $<
-%.cmo: %.ml %.cmi
-       $(OCAMLC) -c $<
-%.cmx: %.ml %.cmi
-       $(OCAMLOPT) -c $<
-include Makefile.overrides
-
-non_mt/$(THREADED_SRV).cmo: non_mt/$(THREADED_SRV).ml $(THREADED_SRV).cmi
-       cp $(THREADED_SRV).{cmi,mli} non_mt/
-       $(OCAMLC) -c $<
-non_mt/$(THREADED_SRV).cmx: non_mt/$(THREADED_SRV).ml $(THREADED_SRV).cmi
-       cp $(THREADED_SRV).{cmi,mli} non_mt/
-       $(OCAMLOPT) -c $<
-
-mt/$(THREADED_SRV).cmo: mt/$(THREADED_SRV).ml $(THREADED_SRV).cmi
-       cp $(THREADED_SRV).{cmi,mli} mt/
-       $(OCAMLC) $(THREADS_FLAGS) -c $<
-mt/$(THREADED_SRV).cmx: mt/$(THREADED_SRV).ml $(THREADED_SRV).cmi
-       cp $(THREADED_SRV).{cmi,mli} mt/
-       $(OCAMLOPT) $(THREADS_FLAGS) -c $<
-
-http.cma: $(patsubst %,%.cmo,$(MODULES_NON_MT))
-       $(OCAMLC) -a -o $@ $^
-http.cmxa: $(patsubst %,%.cmx,$(MODULES_NON_MT))
-       $(OCAMLOPT) -a -o $@ $^
-http_mt.cma: $(patsubst %,%.cmo,$(MODULES_MT))
-       $(OCAMLC) -a -o $@ $^
-http_mt.cmxa: $(patsubst %,%.cmx,$(MODULES_MT))
-       $(OCAMLOPT) -a -o $@ $^
-
-meta: META
-META: META.in
-       cat META.in | sed -e 's/@DISTVERSION@/$(DISTVERSION)/' > META
-
-clean:
-       $(MAKE) -C examples/ clean
-       for d in . mt non_mt; do        \
-               rm -f $$d/*.cm[ioax] $$d/*.cmxa $$d/*.[ao] $$d/test{,.opt};     \
-       done
-       rm -f {mt,non_mt}/$(THREADED_SRV).mli
-docclean:
-       rm -f   \
-               $(DOCDIR)/*.html $(DOCDIR)/*.css        \
-               $(DOTDIR)/*.dot $(DOTDIR)/*.ps  \
-               $(TEXDIR)/*.tex
-distclean: clean docclean
-       $(MAKE) -C examples/ distclean
-       rm -f META
-dist: distreal distrm
-distreal: distclean depend
-       if [ -d $(DISTDIR) ]; then rm -rf $(DISTDIR); else true; fi
-       mkdir $(DISTDIR)
-       for f in        \
-                       $(patsubst %, %.ml, $(MODULES)) \
-                       $(patsubst %, %.mli, $(MODULES) $(THREADED_SRV))        \
-                       mt/ non_mt/ $(EXTRA_DIST) examples/     debian/;        \
-       do      \
-               cp -r $$f $(DISTDIR)/;  \
-       done
-       -find $(DISTDIR)/ -type d -name CVS -exec rm -rf {} \;
-       -find $(DISTDIR)/ -type f -name ".cvs*" -exec rm -f {} \;
-       tar cvzf $(DISTDIR).tar.gz $(DISTDIR)/
-distrm:
-       rm -rf $(DISTDIR)/
-deb: distreal
-       (cd $(DISTDIR)/ && debuild)
-       rm -rf $(DISTDIR)/
-install: META
-       $(OCAMLFIND) install -destdir $(DESTDIR) $(PKGNAME)     \
-               $(patsubst %, %.mli, $(PUBLIC_MODULES)) \
-               $(patsubst %, %.ml, $(PUBLIC_IMPL))     \
-               $(patsubst %, %.cmi, $(PUBLIC_MODULES)) \
-               $(patsubst %, %.cmi, $(PUBLIC_IMPL))    \
-               http{,_mt}.cm{,x}a http{,_mt}.a META
-
-.PHONY:        \
-       all opt world all_non_mt all_mt opt_non_mt opt_mt       \
-       examples examples.opt depend clean distclean dist       \
-       install meta doc deb distreal distrm
diff --git a/helm/DEVEL/ocaml-http/Makefile.defs b/helm/DEVEL/ocaml-http/Makefile.defs
deleted file mode 100644 (file)
index 6fd4b75..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-PKGNAME = http
-DISTVERSION = $(shell dpkg-parsechangelog | egrep '^Version: ' | sed 's/^Version: //')
-
-DEBUG_FLAGS =
-REQUIRES = unix pcre netstring
-COMMON_FLAGS = $(DEBUG_FLAGS) -pp camlp4o -package "$(REQUIRES)"
-THREADS_FLAGS = -package threads -thread
-OCAMLFIND = ocamlfind
-OCAMLC = $(OCAMLFIND) ocamlc $(COMMON_FLAGS)
-OCAMLOPT = $(OCAMLFIND) ocamlopt $(COMMON_FLAGS)
-OCAMLDEP = $(OCAMLFIND) ocamldep $(COMMON_FLAGS)
-OCAMLDOC :=    \
-       ocamldoc        \
-               $(shell $(OCAMLFIND) query -i-format unix)      \
-               $(shell $(OCAMLFIND) query -i-format pcre)      \
-               $(shell $(OCAMLFIND) query -i-format netstring)
-DOT = dot
-
-DISTNAME = ocaml-http
-DISTDIR = $(DISTNAME)-$(DISTVERSION)
-EXTRA_DIST =   \
-       INSTALL LICENSE README META.in Makefile Makefile.defs Makefile.overrides        \
-       .depend tophttp doc
-
-
diff --git a/helm/DEVEL/ocaml-http/Makefile.overrides b/helm/DEVEL/ocaml-http/Makefile.overrides
deleted file mode 100644 (file)
index 62a81b5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-http_types.cmi http_types.cmo: http_types.ml
-       $(OCAMLC) -c $<
diff --git a/helm/DEVEL/ocaml-http/README b/helm/DEVEL/ocaml-http/README
deleted file mode 100644 (file)
index 7d2c1a5..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-ocaml-http is a simple OCaml library for creating HTTP daemons, it is largely
-inspired to the Perl's HTTP:: modules family.
-
-Currently the library contains the following modules:
-
-* Http.Daemon
-
-    this module provide
-
diff --git a/helm/DEVEL/ocaml-http/TODO b/helm/DEVEL/ocaml-http/TODO
deleted file mode 100644 (file)
index 343b51d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-- hostname support for ~addr parameter (e.g. start ~addr:"localhost")
-- HTTP authentication support
diff --git a/helm/DEVEL/ocaml-http/debian/changelog b/helm/DEVEL/ocaml-http/debian/changelog
deleted file mode 100644 (file)
index 79917ba..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-ocaml-http (0.0.8) unstable; urgency=low
-
-  * Added support for "ancient" HTTP requests which specify no HTTP
-    version
-    - 'version' method on message now has type 'version option'
-  * Http_daemon now use debugging prints from Http_common like other
-    modules
-  * Added debugging print of requests parse error
-  * Shutdown server socket on abnormal exit (actually: uncaught
-    exceptions or SIGTERM received)
-  * Added a lot of ocamldoc documentation
-
- -- Stefano Zacchiroli <zack@debian.org>  Fri, 10 Jan 2003 10:36:53 +0100
-
-ocaml-http (0.0.7) unstable; urgency=low
-
-  * Added support for POST requests
-  * Implemented a commont 'message' class from which 'request' and
-    'response' inherit
-  * Changed constructor of 'request' objects, requests are now buildable
-    directly (and only) from an input channel
-  * Added client IP address information to Http_request.request class
-  * Added OO daemon interfaces ("daemon" and "connection" classes)
-  * Use Pcre to perform sanity test on headers instead of home made
-    parsing
-  * Callback functions can raise Http_types.Quit to have main daemon
-    quit
-  * Case-insensitive handling of header names
-
- -- Stefano Zacchiroli <zack@debian.org>  Wed, 25 Dec 2002 16:22:31 +0100
-
-ocaml-http (0.0.6) unstable; urgency=low
-
-  * Ship multithreaded and non multithreaded cm{x,}aS
-  * Added support for multiple binding of the same parameter in request
-    objects (new method 'paramAll')
-  * Added support for 'empty' bindings in query arguments (e.g.
-    "/foo?b=" or "/foo?b")
-  * Added some sanity checks
-  * Bumped Standards-Version to 3.5.8
-  * Use versioned dependencies lib{pcre,ocamlnet}-ocaml-dev-<version>
-  * Added 'Provides libhttp-ocaml-dev-<version>'
-  * Removed GPL from debian/copyright, added reference to
-    /usr/share/common-licenses/GPL
-
- -- Stefano Zacchiroli <zack@debian.org>  Mon, 25 Nov 2002 11:04:49 +0100
-
-ocaml-http (0.0.5) unstable; urgency=low
-
-  * Fixed bug for HTTP encoded GET parameters which contain '?' or '&'
-    characters
-  * Added support for chdir in a given document root before starting
-  * Added support for multi threaded daemons
-  * Added a generic 'Http_daemon.respond' function
-  * Added 'toString' method to response objects
-
- -- Stefano Zacchiroli <zack@debian.org>  Fri, 22 Nov 2002 11:29:37 +0100
-
-ocaml-http (0.0.3) unstable; urgency=low
-
-  * First release.
-
- -- Stefano Zacchiroli <zack@debian.org>  Sun, 17 Nov 2002 17:41:41 +0100
diff --git a/helm/DEVEL/ocaml-http/debian/control b/helm/DEVEL/ocaml-http/debian/control
deleted file mode 100644 (file)
index 1a72fbd..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Source: ocaml-http
-Section: devel
-Priority: optional
-Maintainer: Stefano Zacchiroli <zack@debian.org>
-Build-Depends: debhelper (>> 4.0.0), ocaml-3.06-1, ocaml-findlib, libpcre-ocaml-dev (>= 4.30.0), libocamlnet-ocaml-dev (>= 0.94), graphviz
-Standards-Version: 3.5.8
-
-Package: libhttp-ocaml-dev
-Architecture: any
-Depends: ocaml-3.06-1, libpcre-ocaml-dev (>= 4.30.0), libocamlnet-ocaml-dev (>= 0.94)
-Description: OCaml module to build simple HTTP servers
- OCaml module to build simple HTTP server, largely inspired to Perl's
- HTTP::Daemon module.
- .
- Contains an Http.Daemon module which allow you to create simple HTTP
- servers, and a set of facility functions to handle HTTP request and
- responses.
- .
- Contains also classes that enclose HTTP request and responses.
diff --git a/helm/DEVEL/ocaml-http/debian/copyright b/helm/DEVEL/ocaml-http/debian/copyright
deleted file mode 100644 (file)
index efabd64..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Author: Stefano Zacchiroli <zack@cs.unibo.it>
-
-Copyright:
-
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  OCaml HTTP is distributed under the term of the GNU General Public
-  License, you can find a copy of the license in:
-
-    /usr/share/common-licenses/GPL
-
diff --git a/helm/DEVEL/ocaml-http/debian/dirs b/helm/DEVEL/ocaml-http/debian/dirs
deleted file mode 100644 (file)
index bfe42fe..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/usr/lib/ocaml/3.06
diff --git a/helm/DEVEL/ocaml-http/debian/docs b/helm/DEVEL/ocaml-http/debian/docs
deleted file mode 100644 (file)
index 2e09849..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-README
-doc/*
diff --git a/helm/DEVEL/ocaml-http/debian/examples b/helm/DEVEL/ocaml-http/debian/examples
deleted file mode 100644 (file)
index 6e72ae2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-examples/*.ml
diff --git a/helm/DEVEL/ocaml-http/debian/rules b/helm/DEVEL/ocaml-http/debian/rules
deleted file mode 100755 (executable)
index 498a554..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/make -f
-
-#export DH_VERBOSE=1
-export DH_COMPAT=4
-
-TARGETDIR = $(CURDIR)/debian/libhttp-ocaml-dev
-OCAML_LIB_DIR = $(shell ocamlc -where)
-
-build: build-stamp
-build-stamp:
-       dh_testdir
-       $(MAKE) all
-       if [ -x /usr/bin/ocamlopt ]; then $(MAKE) opt; else true; fi
-       touch build-stamp
-
-clean:
-       dh_testdir
-       dh_testroot
-       rm -f build-stamp
-       -$(MAKE) distclean
-       dh_clean
-
-install: build
-       dh_testdir
-       dh_testroot
-       dh_clean -k
-       dh_installdirs
-       $(MAKE) install DESTDIR=$(TARGETDIR)$(OCAML_LIB_DIR)
-       $(MAKE) doc
-
-binary-arch: build install
-       dh_testdir
-       dh_testroot
-       dh_installdocs
-       dh_installexamples
-       dh_installchangelogs 
-       dh_link
-       dh_strip
-       dh_compress
-       dh_fixperms
-       dh_installdeb
-       dh_shlibdeps
-       dh_gencontrol
-       dh_md5sums
-       dh_builddeb
-
-binary: binary-arch
-.PHONY: build clean binary-arch binary install
diff --git a/helm/DEVEL/ocaml-http/doc/dot/.cvsignore b/helm/DEVEL/ocaml-http/doc/dot/.cvsignore
deleted file mode 100644 (file)
index 269c660..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-*.dot
-*.ps
diff --git a/helm/DEVEL/ocaml-http/doc/html/.cvsignore b/helm/DEVEL/ocaml-http/doc/html/.cvsignore
deleted file mode 100644 (file)
index d0098b4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-*.css
-*.html
diff --git a/helm/DEVEL/ocaml-http/doc/latex/.cvsignore b/helm/DEVEL/ocaml-http/doc/latex/.cvsignore
deleted file mode 100644 (file)
index 01564af..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.tex
diff --git a/helm/DEVEL/ocaml-http/examples/.cvsignore b/helm/DEVEL/ocaml-http/examples/.cvsignore
deleted file mode 100644 (file)
index c0404dd..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-*.cmi
-*.cmo
-*.cmx
-*.cma
-*.cmxa
diff --git a/helm/DEVEL/ocaml-http/examples/Makefile b/helm/DEVEL/ocaml-http/examples/Makefile
deleted file mode 100644 (file)
index 7267301..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-include ../Makefile.defs
-OBJS_NON_MT = ../http.cma
-OBJS_NON_MT_OPT = ../http.cmxa
-OBJS_MT = ../http_mt.cma
-OBJS_MT_OPT = ../http_mt.cmxa
-EXAMPLES_FLAGS = -I .. -linkpkg
-
-EXAMPLES =     \
-       always_ok_daemon webfsd obj_foo dump_args timeout dont_fork     \
-       threads chdir damned_recursion oo_daemon client_address highlander
-
-all: $(EXAMPLES)
-opt: $(patsubst %,%.opt,$(EXAMPLES))
-%: %.ml $(OBJS_NON_MT)
-       $(OCAMLC) $(EXAMPLES_FLAGS) $(OBJS_NON_MT) -o $@ $<
-%.opt: %.ml $(OBJS_NON_MT_OPT)
-       $(OCAMLOPT) $(EXAMPLES_FLAGS) $(OBJS_NON_MT_OPT) -o $@ $<
-
-threads: threads.ml $(OBJS_MT)
-       $(OCAMLC) $(EXAMPLES_FLAGS) $(OBJS_MT) $(THREADS_FLAGS) -o $@ $<
-threads.opt: threads.ml $(OBJS_MT_OPT)
-       $(OCAMLOPT) $(EXAMPLES_FLAGS) $(OBJS_MT_OPT) $(THREADS_FLAGS) -o $@ $<
-
-damned_recursion: damned_recursion.ml $(OBJS_MT)
-       $(OCAMLC) $(EXAMPLES_FLAGS) $(OBJS_MT) $(THREADS_FLAGS) -package netclient -o $@ $<
-damned_recursion.opt: damned_recursion.ml $(OBJS_MT_OPT)
-       $(OCAMLOPT) $(EXAMPLES_FLAGS) $(OBJS_MT_OPT) $(THREADS_FLAGS) -package netclient -o $@ $<
-
-distclean: clean
-clean:
-       -rm -f *.cm[ioax] *.o $(EXAMPLES) $(patsubst %,%.opt,$(EXAMPLES))
diff --git a/helm/DEVEL/ocaml-http/examples/always_ok_daemon.ml b/helm/DEVEL/ocaml-http/examples/always_ok_daemon.ml
deleted file mode 100644 (file)
index 492be65..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Http_daemon;;
-  (* start an http daemon that alway respond with a 200 status code and an empty
-  content *)
-start ~port:9999 (fun _ _ outchan -> respond outchan)
diff --git a/helm/DEVEL/ocaml-http/examples/chdir.ml b/helm/DEVEL/ocaml-http/examples/chdir.ml
deleted file mode 100644 (file)
index a5e460b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Http_daemon;;
-open Printf;;
-start
-  ~port:9999
-  ~root:"/etc"
-  (fun _ _ outchan -> respond ~body:(sprintf "%s\n" (Sys.getcwd ())) outchan)
diff --git a/helm/DEVEL/ocaml-http/examples/client_address.ml b/helm/DEVEL/ocaml-http/examples/client_address.ml
deleted file mode 100644 (file)
index 7571911..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Printf;;
-
-let callback req outchan =
-  let body =
-    sprintf
-      "Hi, this is your personal assistant, you are connected from %s:%d\n"
-      req#clientAddr
-      req#clientPort
-  in
-  let res = new Http_response.response ~body () in
-  Http_daemon.respond_with res outchan
-in
-Http_daemon.start' ~port:9999 callback
diff --git a/helm/DEVEL/ocaml-http/examples/damned_recursion.ml b/helm/DEVEL/ocaml-http/examples/damned_recursion.ml
deleted file mode 100644 (file)
index dd3f6a3..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Http_types;;
-open Printf;;
-
-let wget addr port path =
-  let rec wget' inchan buf =
-    Buffer.add_string buf (input_line inchan ^ "\n");
-    wget' inchan buf
-  in
-  prerr_endline (sprintf "DEBUG: wgetting url '%s:%d%s'" addr port path);
-  let sockaddr = Unix.ADDR_INET (Unix.inet_addr_of_string addr, port) in
-  let suck = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in
-  Unix.connect suck sockaddr;
-  let outchan = Unix.out_channel_of_descr suck in
-  output_string outchan (sprintf "GET %s HTTP/1.0\r\n\r\n" path);
-  flush outchan;
-  let inchan = Unix.in_channel_of_descr suck in
-  let buf = Buffer.create 1023 in
-  try
-    wget' inchan buf
-  with End_of_file -> Buffer.contents buf
-in
-let callback (req: request) outchan =
-  let i = int_of_string (req#param "x") in
-  prerr_endline (string_of_int i);
-  match i with
-  | 0 -> output_string outchan "1"
-  | x when x>0 ->
-      let data =
-        wget "127.0.0.1" 9999 (sprintf "/foo?x=%d" (x-1))
-(*         wget "127.0.0.1" 80 "/index.html" *)
-      in
-      output_string outchan (sprintf "%s %d" data x)
-  | _ -> assert false
-in
-let mode = `Thread in
-Http_daemon.start' ~port:9999 ~mode callback
-
diff --git a/helm/DEVEL/ocaml-http/examples/dont_fork.ml b/helm/DEVEL/ocaml-http/examples/dont_fork.ml
deleted file mode 100644 (file)
index d0e1d91..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-let callback req outchan =
-  Http_daemon.respond_error ~body:"AH AH AH :-P\n" outchan
-in
-Http_daemon.start' ~port:9999 ~mode:`Single ~timeout:(Some 5) callback
diff --git a/helm/DEVEL/ocaml-http/examples/dump_args.ml b/helm/DEVEL/ocaml-http/examples/dump_args.ml
deleted file mode 100644 (file)
index 8e0d5dc..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Printf;;
-
-let callback req outchan =
-  Http_daemon.send_basic_headers ~code:200 outchan;
-  Http_daemon.send_CRLF outchan;
-  let str = 
-    (sprintf "request path = %s\n"  req#path) ^
-    (sprintf "request GET params = %s\n"
-      (String.concat ";"
-        (List.map (fun (h,v) -> String.concat "=" [h;v]) req#params_GET))) ^
-    (sprintf "request POST params = %s\n"
-      (String.concat ";"
-        (List.map (fun (h,v) -> String.concat "=" [h;v]) req#params_POST))) ^
-    (sprintf "request ALL params = %s\n"
-      (String.concat ";"
-        (List.map (fun (h,v) -> String.concat "=" [h;v]) req#params))) ^
-    (sprintf "request BODY = '%s'\n" req#body)
-  in
-  output_string outchan str;
-  prerr_endline str
-in
-print_endline "Starting custom Http_daemon ...";
-flush stdout;
-Http_daemon.start' ~port:9999 callback
-
diff --git a/helm/DEVEL/ocaml-http/examples/highlander.ml b/helm/DEVEL/ocaml-http/examples/highlander.ml
deleted file mode 100644 (file)
index b58d3a6..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(* almost the same as dump_args.ml, but used to test fast rebinding of the same
-port *)
-
-open Printf;;
-
-let callback req outchan =
-  Http_daemon.send_basic_headers ~code:200 outchan;
-  Http_daemon.send_CRLF outchan;
-  let str = 
-    (sprintf "request path = %s\n"  req#path) ^
-    (sprintf "request GET params = %s\n"
-      (String.concat ";"
-        (List.map (fun (h,v) -> String.concat "=" [h;v]) req#params_GET))) ^
-    (sprintf "request POST params = %s\n"
-      (String.concat ";"
-        (List.map (fun (h,v) -> String.concat "=" [h;v]) req#params_POST))) ^
-    (sprintf "request ALL params = %s\n"
-      (String.concat ";"
-        (List.map (fun (h,v) -> String.concat "=" [h;v]) req#params))) ^
-    (sprintf "request BODY = '%s'\n" req#body)
-  in
-  output_string outchan str;
-  prerr_endline str
-in
-print_endline "Starting custom Http_daemon ...";
-flush stdout;
-(* Sys.catch_break true; *)
-while true do
-(*   try *)
-    Http_daemon.start' ~mode:`Single ~port:9999 callback
-(*   with Sys.Break -> prerr_endline "RESURRECTION!!!!" *)
-done
-
diff --git a/helm/DEVEL/ocaml-http/examples/obj_foo.ml b/helm/DEVEL/ocaml-http/examples/obj_foo.ml
deleted file mode 100644 (file)
index 2786218..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Http_types;;
-
-let callback (req: request) outchan =
-  Http_daemon.respond_error ~body:(req#param "foo") outchan
-in
-Http_daemon.start' ~port:9999 callback
diff --git a/helm/DEVEL/ocaml-http/examples/oo_daemon.ml b/helm/DEVEL/ocaml-http/examples/oo_daemon.ml
deleted file mode 100644 (file)
index b73a2ac..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Http_daemon;;
-open Http_response;;
-
-  (* the simple way *)
-let d = new daemon ~addr:"127.0.0.1" ~port:9999 () in
-while true do
-  let (req, conn) = d#getRequest in (* wait for valid request *)
-  conn#respond_with (new response ~body:"foo\n" ());
-  conn#close
-done
-
-(*
-  (* the hard way *)
-let d = new daemon ~addr:"127.0.0.1" ~port:9999 () in
-while true do
-  let conn = d#accept in (* wait for client connection *)
-  (match conn#getRequest with
-  | None -> ()  (* invalid request received *)
-  | Some req -> conn#respond_with (new response ~body:"foo\n" ()));
-  conn#close (* close socket *)
-done
-*)
-
diff --git a/helm/DEVEL/ocaml-http/examples/threads.ml b/helm/DEVEL/ocaml-http/examples/threads.ml
deleted file mode 100644 (file)
index 9eba49f..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-let m = Mutex.create () in
-let i = ref 10 in
-let dump_i outchan =
-  Http_daemon.respond ~body:(Printf.sprintf "i = %d\n" !i) outchan
-in
-let callback req outchan =
-  match req#path with
-  | "/incr" ->
-      Mutex.lock m;
-      incr i;
-      dump_i outchan;
-      Unix.sleep 5;
-      Mutex.unlock m
-  | "/decr" ->
-      Mutex.lock m;
-      decr i;
-      dump_i outchan;
-      Unix.sleep 5;
-      Mutex.unlock m
-  | "/get" ->
-      Mutex.lock m;
-      dump_i outchan;
-      Mutex.unlock m
-  | bad_request -> Http_daemon.respond_error outchan
-in
-Http_daemon.start' ~port:9999 ~mode:`Thread callback
diff --git a/helm/DEVEL/ocaml-http/examples/timeout.ml b/helm/DEVEL/ocaml-http/examples/timeout.ml
deleted file mode 100644 (file)
index eaa8407..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-let callback _ _ outchan =
-  output_string outchan "Here you are!\n";
-  flush outchan
-in
-Http_daemon.start ~port:9999 ~timeout:(Some 10) callback
diff --git a/helm/DEVEL/ocaml-http/examples/webfsd.ml b/helm/DEVEL/ocaml-http/examples/webfsd.ml
deleted file mode 100644 (file)
index 6babe3d..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-let def_port = 80 in
-let def_addr = "0.0.0.0" in
-let def_root = Sys.getcwd () in
-
-let port = ref def_port in
-let addr = ref def_addr in
-let root = ref def_root in
-let argspec =
-  [ "-p", Arg.Int (fun p -> port := p),
-      "TCP port on which listen, default: " ^ string_of_int !port;
-    "-a", Arg.String (fun a -> addr := a),
-      "IP address on which listen, default: " ^ !addr;
-    "-r", Arg.String (fun r -> root := r),
-      "DocumentRoot, default: current working directory" ]
-in
-Arg.parse argspec (fun _ -> ()) "";
-Sys.chdir !root;
-Http_daemon.Trivial.start ~addr:!addr ~port:!port ()
-
diff --git a/helm/DEVEL/ocaml-http/http_common.ml b/helm/DEVEL/ocaml-http/http_common.ml
deleted file mode 100644 (file)
index 23beaf9..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Http_types;;
-open Printf;;
-
-let debug = ref false
-let debug_print s =
-  if !debug then
-    prerr_endline (sprintf "[OCaml HTTP] DEBUG: %s" s)
-
-let http_version = Http_constants.version
-let server_string = Http_constants.server_string
-
-let string_of_version = function
-  | `HTTP_1_0 -> "HTTP/1.0"
-  | `HTTP_1_1 -> "HTTP/1.1"
-
-let version_of_string = function
-  | "HTTP/1.0" -> `HTTP_1_0
-  | "HTTP/1.1" -> `HTTP_1_1
-  | invalid_version -> raise (Invalid_HTTP_version invalid_version)
-
-let string_of_method = function
-  | `GET -> "GET"
-  | `POST -> "POST"
-
-let method_of_string = function
-  | "GET" -> `GET
-  | "POST" -> `POST
-  | invalid_method -> raise (Invalid_HTTP_method invalid_method)
-
-let status_of_code = function
-  | 100 -> `Informational `Continue
-  | 101 -> `Informational `Switching_protocols
-  | 200 -> `Success `OK
-  | 201 -> `Success `Created
-  | 202 -> `Success `Accepted
-  | 203 -> `Success `Non_authoritative_information
-  | 204 -> `Success `No_content
-  | 205 -> `Success `Reset_content
-  | 206 -> `Success `Partial_content
-  | 300 -> `Redirection `Multiple_choices
-  | 301 -> `Redirection `Moved_permanently
-  | 302 -> `Redirection `Found
-  | 303 -> `Redirection `See_other
-  | 304 -> `Redirection `Not_modified
-  | 305 -> `Redirection `Use_proxy
-  | 307 -> `Redirection `Temporary_redirect
-  | 400 -> `Client_error `Bad_request
-  | 401 -> `Client_error `Unauthorized
-  | 402 -> `Client_error `Payment_required
-  | 403 -> `Client_error `Forbidden
-  | 404 -> `Client_error `Not_found
-  | 405 -> `Client_error `Method_not_allowed
-  | 406 -> `Client_error `Not_acceptable
-  | 407 -> `Client_error `Proxy_authentication_required
-  | 408 -> `Client_error `Request_time_out
-  | 409 -> `Client_error `Conflict
-  | 410 -> `Client_error `Gone
-  | 411 -> `Client_error `Length_required
-  | 412 -> `Client_error `Precondition_failed
-  | 413 -> `Client_error `Request_entity_too_large
-  | 414 -> `Client_error `Request_URI_too_large
-  | 415 -> `Client_error `Unsupported_media_type
-  | 416 -> `Client_error `Requested_range_not_satisfiable
-  | 417 -> `Client_error `Expectation_failed
-  | 500 -> `Server_error `Internal_server_error
-  | 501 -> `Server_error `Not_implemented
-  | 502 -> `Server_error `Bad_gateway
-  | 503 -> `Server_error `Service_unavailable
-  | 504 -> `Server_error `Gateway_time_out
-  | 505 -> `Server_error `HTTP_version_not_supported
-  | invalid_code -> raise (Invalid_code invalid_code)
-
-let code_of_status = function
-  | `Informational `Continue -> 100
-  | `Informational `Switching_protocols -> 101
-  | `Success `OK -> 200
-  | `Success `Created -> 201
-  | `Success `Accepted -> 202
-  | `Success `Non_authoritative_information -> 203
-  | `Success `No_content -> 204
-  | `Success `Reset_content -> 205
-  | `Success `Partial_content -> 206
-  | `Redirection `Multiple_choices -> 300
-  | `Redirection `Moved_permanently -> 301
-  | `Redirection `Found -> 302
-  | `Redirection `See_other -> 303
-  | `Redirection `Not_modified -> 304
-  | `Redirection `Use_proxy -> 305
-  | `Redirection `Temporary_redirect -> 307
-  | `Client_error `Bad_request -> 400
-  | `Client_error `Unauthorized -> 401
-  | `Client_error `Payment_required -> 402
-  | `Client_error `Forbidden -> 403
-  | `Client_error `Not_found -> 404
-  | `Client_error `Method_not_allowed -> 405
-  | `Client_error `Not_acceptable -> 406
-  | `Client_error `Proxy_authentication_required -> 407
-  | `Client_error `Request_time_out -> 408
-  | `Client_error `Conflict -> 409
-  | `Client_error `Gone -> 410
-  | `Client_error `Length_required -> 411
-  | `Client_error `Precondition_failed -> 412
-  | `Client_error `Request_entity_too_large -> 413
-  | `Client_error `Request_URI_too_large -> 414
-  | `Client_error `Unsupported_media_type -> 415
-  | `Client_error `Requested_range_not_satisfiable -> 416
-  | `Client_error `Expectation_failed -> 417
-  | `Server_error `Internal_server_error -> 500
-  | `Server_error `Not_implemented -> 501
-  | `Server_error `Bad_gateway -> 502
-  | `Server_error `Service_unavailable -> 503
-  | `Server_error `Gateway_time_out -> 504
-  | `Server_error `HTTP_version_not_supported -> 505
-
-let is_informational code =
-  match status_of_code code with
-  | `Informational _ -> true
-  | _ -> false
-
-let is_success code =
-  match status_of_code code with
-  | `Success _ -> true
-  | _ -> false
-
-let is_redirection code =
-  match status_of_code code with
-  | `Redirection _ -> true
-  | _ -> false
-
-let is_client_error code =
-  match status_of_code code with
-  | `Client_error _ -> true
-  | _ -> false
-
-let is_server_error code =
-  match status_of_code code with
-  | `Server_error _ -> true
-  | _ -> false
-
-let is_error code = is_client_error code || is_server_error code
-
diff --git a/helm/DEVEL/ocaml-http/http_common.mli b/helm/DEVEL/ocaml-http/http_common.mli
deleted file mode 100644 (file)
index 55e37b0..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(** Common functionalities shared by other OCaml HTTP modules *)
-
-open Http_types;;
-
-  (** whether debugging messages are enabled or not, can be changed at runtime
-  *)
-val debug: bool ref
-
-  (** print a string on stderr only if debugging is enabled *)
-val debug_print: string -> unit
-
-  (** see {! Http_constants.version} *)
-val http_version: version
-
-  (** see {! Http_constants.server_string} *)
-val server_string: string
-
-  (** pretty print an HTTP version *)
-val string_of_version: version -> string
-
-  (** parse an HTTP version from a string
-  @raise Invalid_HTTP_version if given string doesn't represent a supported HTTP
-  version *)
-val version_of_string: string -> version
-
-  (** pretty print an HTTP method *)
-val string_of_method: meth -> string
-
-  (** parse an HTTP method from a string
-  @raise Invalid_HTTP_method if given string doesn't represent a supported
-  method *)
-val method_of_string: string -> meth
-
-  (** converts an integer HTTP status to the corresponding status value
-  @raise Invalid_code if given integer isn't a valid HTTP status code *)
-val status_of_code: int -> status
-
-  (** converts an HTTP status to the corresponding integer value *)
-val code_of_status: [< status] -> int
-
-  (** @return true on "informational" status codes, false elsewhere *)
-val is_informational: int -> bool
-
-  (** @return true on "success" status codes, false elsewhere *)
-val is_success: int -> bool
-
-  (** @return true on "redirection" status codes, false elsewhere *)
-val is_redirection: int -> bool
-
-  (** @return true on "client error" status codes, false elsewhere *)
-val is_client_error: int -> bool
-
-  (** @return true on "server error" status codes, false elsewhere *)
-val is_server_error: int -> bool
-
-  (** @return true on "client error" and "server error" status code, false
-  elsewhere *)
-val is_error: int -> bool
-
diff --git a/helm/DEVEL/ocaml-http/http_constants.ml b/helm/DEVEL/ocaml-http/http_constants.ml
deleted file mode 100644 (file)
index 88d8617..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-let version = `HTTP_1_1 ;;
-let server_string = "OCaml HTTP Daemon" ;;
-let crlf = "\r\n" ;;
-
-let default_addr = "0.0.0.0" ;;
-let default_port = 80 ;;
-let default_timeout = 300 ;;
-let default_mode = `Fork ;;
-
diff --git a/helm/DEVEL/ocaml-http/http_constants.mli b/helm/DEVEL/ocaml-http/http_constants.mli
deleted file mode 100644 (file)
index bdce244..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(** Constants *)
-
-open Http_types
-
-  (** default HTTP version *)
-val version: Http_types.version
-
-  (** string returned as value of "Server:" response header *)
-val server_string: string
-
-  (** "\r\n" string *)
-val crlf: string
-
-  (** {2 daemon default values} *)
-
-val default_addr: string        (** default listen address *)
-val default_port: int           (** default listen port *)
-val default_timeout: int        (** default callbacks timeout *)
-val default_mode: daemon_mode   (** default request handling mode *)
-
diff --git a/helm/DEVEL/ocaml-http/http_daemon.ml b/helm/DEVEL/ocaml-http/http_daemon.ml
deleted file mode 100644 (file)
index 9e0507d..0000000
+++ /dev/null
@@ -1,472 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Printf;;
-
-open Http_common;;
-open Http_types;;
-open Http_constants;;
-open Http_parser;;
-
-  (** send raw data on outchan, flushing it afterwards *)
-let send_raw ~data outchan =
-  output_string outchan data;
-  flush outchan
-
-let send_CRLF = send_raw ~data:crlf
-
-let send_header ~header ~value =
-  Http_parser_sanity.heal_header (header, value);
-  send_raw ~data:(header ^ ": " ^ value ^ crlf)
-
-let send_headers ~headers outchan =
-  List.iter (fun (header, value) -> send_header ~header ~value outchan) headers
-
-  (** internal: parse a code argument from a function which have two optional
-  arguments "code" and "status" *)
-let get_code_argument func_name =
-  fun ~code ~status ->
-    (match code, status with
-    | Some c, None -> c
-    | None, Some s -> code_of_status s
-    | Some _, Some _ -> (* TODO use some static type checking *)
-        failwith (func_name ^ " you must give 'code' or 'status', not both")
-    | None, None -> (* TODO use some static type checking *)
-        failwith (func_name ^ " you must give 'code' or 'status', not none"))
-
-  (** internal: low level for send_status_line *)
-let send_status_line' ~version ~code =
-  let status_line =
-    String.concat
-      " "
-      [ string_of_version version;
-      string_of_int code;
-      Http_misc.reason_phrase_of_code code ]
-  in
-  send_raw ~data:(status_line ^ crlf)
-
-let send_status_line ?(version = http_version) ?code ?status outchan =
-  send_status_line'
-    ~version
-    ~code:(get_code_argument "Daemon.send_status_line" ~code ~status)
-    outchan
-
-  (* FIXME duplication of code between this and response#addBasicHeaders *)
-let send_basic_headers ?(version = http_version) ?code ?status outchan =
-  send_status_line'
-    ~version ~code:(get_code_argument "Daemon.send_basic_headers" ~code ~status)
-    outchan;
-  send_headers
-    ~headers:["Date", Http_misc.date_822 (); "Server", server_string]
-    outchan
-
-  (** internal: given a status code and an additional body return a string
-  representing an HTML document that explains the meaning of given status code.
-  Additional data can be added to the body via 'body' argument *)
-let foo_body code body =
-  let reason_phrase = Http_misc.reason_phrase_of_code code in
-  sprintf
-"<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">
-<HTML><HEAD>
-<TITLE>%d %s</TITLE>
-</HEAD><BODY>
-<H1>%d - %s</H1>%s
-</BODY></HTML>"
-    code reason_phrase code reason_phrase body
-
-  (** internal: send a fooish body explaining in HTML form the 'reason phrase'
-  of an HTTP response; body, if given, will be appended to the body *)
-let send_foo_body code body = send_raw ~data:(foo_body code body)
-
-let respond
-  (* Warning: keep default values in sync with Http_response.response class *)
-  ?(body = "") ?(headers = [])
-  ?(version = http_version) ?(code = 200) ?status outchan
-  =
-  let code =
-    match status with
-    | None -> code
-    | Some s -> code_of_status s
-  in
-  send_basic_headers ~version ~code outchan;
-  send_headers ~headers outchan;
-  send_header "Content-Length" (string_of_int (String.length body)) outchan;
-  send_CRLF outchan;
-  send_raw ~data:body outchan
-
-  (** internal: low level for respond_redirect, respond_error, ...
-  This function send a status line corresponding to a given code, some basic
-  headers, the additional headers (if given) and an HTML page containing the
-  reason phrase; if body is given it will be included in the body of the HTML
-  page *)
-let send_empty_response
-  func_name ?(is_valid_status = fun _ -> true) ?(headers = []) ~body () =
-    fun ?(version = http_version) ?code ?status outchan ->
-      let code = get_code_argument func_name ~code ~status in
-      if not (is_valid_status code) then
-        failwith
-          (sprintf "'%d' isn't a valid status code for %s" code func_name)
-      else begin  (* status code suitable for answering *)
-        let headers =
-          [
-            "Connection", "close";
-            "Content-Type", "text/html; charset=iso-8859-1"
-          ] @ headers
-        in
-        let body = (foo_body code body) ^ body in
-        respond ~version ~code ~headers ~body outchan
-(*
-        (* OLD VERSION, now use 'respond' function *)
-        send_basic_headers ~version ~code outchan;
-        send_header ~header:"Connection" ~value:"close" outchan;
-        send_header
-          ~header:"Content-Type"
-          ~value:"text/html; charset=iso-8859-1"
-          outchan;
-        send_headers ~headers outchan;
-        send_CRLF outchan;
-        send_foo_body ~code ~body outchan
-*)
-      end
-
-let respond_redirect
-  ~location ?(body = "") ?(version = http_version) ?(code = 301) ?status outchan
-  =
-  let code = 
-    match status with
-    | None -> code
-    | Some (s: Http_types.redirection_status) -> code_of_status s
-  in
-  send_empty_response
-    "Daemon.respond_redirect" ~is_valid_status:is_redirection
-    ~headers:["Location", location] ~body ()
-    ~version ~code outchan
-
-let respond_error
-  ?(body = "") ?(version = http_version) ?(code = 400) ?status outchan =
-    let code =
-      match status with
-      | None -> code
-      | Some s -> code_of_status s
-    in
-    send_empty_response
-      "Daemon.respond_error" ~is_valid_status:is_error ~body ()
-      ~version ~code outchan
-
-let respond_not_found ~url ?(version = http_version) outchan =
-  send_empty_response
-    "Daemon.respond_not_found" ~body:"" () ~version ~code:404 outchan
-
-let respond_forbidden ~url ?(version = http_version) outchan =
-  send_empty_response
-    "Daemon.respond_permission_denied" ~body:"" () ~version ~code:403 outchan
-
-(* let send_file ?name ?file outchan = *)
-let send_file ~src outchan =
-  let buflen = 1024 in
-  let buf = String.make buflen ' ' in
-(*
-  let (file, cleanup) =
-    (match (name, file) with
-    | Some n, None -> (* if we open the file, we close it before returning *)
-        let f = open_in n in
-        f, (fun () -> close_in f)
-    | None, Some f -> (f, (fun () -> ()))
-    | _ ->  (* TODO use some static type checking *)
-        failwith "Daemon.send_file: either name or file must be given")
-  in
-*)
-  let (file, cleanup) =
-    match src with
-    | FileSrc fname -> (* if we open the file, we close it before returning *)
-        let f = open_in fname in
-        f, (fun () -> close_in f)
-    | InChanSrc inchan -> inchan, ignore
-  in
-  try
-    while true do
-      let bytes = input file buf 0 buflen in
-      if bytes = 0 then
-        raise End_of_file
-      else
-        output outchan buf 0 bytes
-    done;
-    assert false
-  with End_of_file ->
-    begin
-      flush outchan;
-      cleanup ()
-    end
-
-  (* TODO interface is too ugly to advertise this function in .mli *)
-  (** create a minimal HTML directory listing of a given directory and send it
-  over an out_channel, directory is passed as a dir_handle; name is the
-  directory name, used for pretty printing purposes; path is the opened dir
-  path, used to test its contents with stat *)
-let send_dir_listing ~dir ~name ~path outchan =
-  fprintf outchan "<html>\n<head><title>%s</title></head>\n<body>\n" name;
-  let (dirs, files) =
-    List.partition (fun e -> Http_misc.is_directory (path ^ e)) (Http_misc.ls dir)
-  in
-  List.iter
-    (fun d -> fprintf outchan "<a href=\"%s/\">%s/</a><br />\n" d d)
-    (List.sort compare dirs);
-  List.iter
-    (fun f -> fprintf outchan "<a href=\"%s\">%s</a><br />\n" f f)
-    (List.sort compare files);
-  fprintf outchan "</body>\n</html>";
-  flush outchan
-
-let respond_file ~fname ?(version = http_version) outchan =
-  (** ASSUMPTION: 'fname' doesn't begin with a "/"; it's relative to the current
-  document root (usually the daemon's cwd) *)
-  let droot = Sys.getcwd () in  (* document root *)
-  let path = droot ^ "/" ^ fname in (* full path to the desired file *)
-  if not (Sys.file_exists path) then (* file not found *)
-    respond_not_found ~url:fname outchan
-  else begin
-    try
-      if Http_misc.is_directory path then begin (* file found, is a dir *)
-        let dir = Unix.opendir path in
-        send_basic_headers ~version ~code:200 outchan;
-        send_header "Content-Type" "text/html" outchan;
-        send_CRLF outchan;
-        send_dir_listing ~dir ~name:fname ~path outchan;
-        Unix.closedir dir
-      end else begin  (* file found, is something else *)
-        let file = open_in fname in
-        send_basic_headers ~version ~code:200 outchan;
-        send_header
-          ~header:"Content-Length"
-          ~value:(string_of_int (Http_misc.filesize fname))
-          outchan;
-        send_CRLF outchan;
-        send_file ~src:(InChanSrc file) outchan;
-        close_in file
-      end
-    with
-    | Unix.Unix_error (Unix.EACCES, s, _) when (s = fname) ->
-        respond_forbidden ~url:fname ~version outchan
-    | Sys_error s when
-        (Pcre.pmatch ~rex:(Pcre.regexp (fname ^ ": Permission denied")) s) ->
-          respond_forbidden ~url:fname ~version outchan
-  end
-
-let respond_with (res: Http_types.response) outchan =
-  res#serialize outchan;
-  flush outchan
-
-  (** internal: this exception is raised after a malformed request has been read
-  by a serving process to signal main server (or itself if mode = `Single) to
-  skip to next request *)
-exception Again;;
-
-let pp_parse_exc e =
-  sprintf "HTTP request parse error: %s" (Printexc.to_string e)
-
-  (* given a Http_parser.parse_request like function, wrap it in a function that
-  do the same and additionally catch parsing exception sending HTTP error
-  messages back to client as needed. Returned function raises Again when it
-  encounter a parse error (name 'Again' is intended for future versions that
-  will support http keep alive signaling that a new request has to be parsed
-  from client) *)
-let rec wrap_parse_request_w_safety parse_function inchan outchan =
-(*   try *)
-  (try
-    parse_function inchan
-  with
-  | (End_of_file) as e ->
-      debug_print (pp_parse_exc e);
-      respond_error ~code:400 ~body:"Unexpected End Of File" outchan;
-      raise Again
-  | (Malformed_request req) as e ->
-      debug_print (pp_parse_exc e);
-      respond_error
-        ~code:400
-        ~body:(
-          "request 1st line format should be: '<method> <url> <version>'" ^
-          "<br />\nwhile received request 1st line was:<br />\n" ^ req)
-        outchan;
-      raise Again
-  | (Invalid_HTTP_method meth) as e ->
-      debug_print (pp_parse_exc e);
-      respond_error
-        ~code:501
-        ~body:("Method '" ^ meth ^ "' isn't supported (yet)")
-        outchan;
-      raise Again
-  | (Malformed_request_URI uri) as e ->
-      debug_print (pp_parse_exc e);
-      respond_error ~code:400 ~body:("Malformed URL: '" ^ uri ^ "'") outchan;
-      raise Again
-  | (Invalid_HTTP_version version) as e ->
-      debug_print (pp_parse_exc e);
-      respond_error
-        ~code:505
-        ~body:("HTTP version '" ^ version ^ "' isn't supported (yet)")
-        outchan;
-      raise Again
-  | (Malformed_query query) as e ->
-      debug_print (pp_parse_exc e);
-      respond_error
-        ~code:400 ~body:(sprintf "Malformed query string '%s'" query) outchan;
-      raise Again
-  | (Malformed_query_part (binding, query)) as e ->
-      debug_print (pp_parse_exc e);
-      respond_error
-        ~code:400
-        ~body:(
-          sprintf "Malformed query part '%s' in query '%s'" binding query)
-        outchan;
-      raise Again)
-(*  (* preliminary support for HTTP keep alive connections ... *)
-  with Again ->
-    wrap_parse_request_w_safety parse_function inchan outchan
-*)
-
-  (* wrapper around Http_parser.parse_request which catch parsing exceptions and
-  return error messages to client as needed
-  @param inchan in_channel from which read incoming requests
-  @param outchan out_channl on which respond with error messages if needed
-  *)
-let safe_parse_request = wrap_parse_request_w_safety parse_request
-
-  (* as above but for OO version (Http_parser.parse_request') *)
-let safe_parse_request' = wrap_parse_request_w_safety (new Http_request.request)
-
-let chdir_to_document_root = function (* chdir to document root *)
-  | Some dir -> Sys.chdir dir
-  | None -> ()
-
-let server_of_mode = function
-  | `Single -> Http_tcp_server.simple
-  | `Fork   -> Http_tcp_server.fork
-  | `Thread -> Http_tcp_server.thread
-
-  (* TODO what happens when a Quit exception is raised by a callback? Do other
-  callbacks keep on living until the end or are them all killed immediatly?
-  The right semantics should obviously be the first one *)
-
-  (* TODO support also chroot to 'root', not only chdir *)
-  (* curried request *)
-let start
-  ?(addr = default_addr) ?(port = default_port)
-  ?(timeout = Some default_timeout) ?(mode = default_mode) ?root callback
-  =
-  chdir_to_document_root root;
-  let sockaddr = Http_misc.build_sockaddr (addr, port) in
-  let daemon_callback inchan outchan =
-    try
-      let (path, parameters) = safe_parse_request inchan outchan in
-      callback path parameters outchan;
-      flush outchan
-    with Again -> ()
-  in
-  try
-    (server_of_mode mode) ~sockaddr ~timeout daemon_callback 
-  with Quit -> ()
-
-  (* OO request *)
-let start'
-  ?(addr = default_addr) ?(port = default_port)
-  ?(timeout = Some default_timeout) ?(mode = default_mode) ?root callback
-  =
-  chdir_to_document_root root;
-  let sockaddr = Http_misc.build_sockaddr (addr, port) in
-  let daemon_callback inchan outchan =
-    try
-      let req = safe_parse_request' inchan outchan in
-      callback req outchan;
-      flush outchan
-    with Again -> ()
-  in
-  try
-    (server_of_mode mode) ~sockaddr ~timeout daemon_callback 
-  with Quit -> ()
-
-module Trivial =
-  struct
-    let callback path _ outchan =
-      if not (Pcre.pmatch ~rex:(Pcre.regexp "^/") path) then
-        respond_error ~code:400 outchan
-      else
-        respond_file ~fname:(Http_misc.strip_heading_slash path) outchan
-    let start ?(addr = default_addr) ?(port = default_port) () =
-      start ~addr ~port callback
-  end
-
-  (* @param inchan input channel connected to client
-     @param outchan output channel connected to client
-     @param sockaddr client socket address *)
-class connection inchan outchan sockaddr =
-  (* ASSUMPTION: inchan and outchan are channels built on top of the same
-  Unix.file_descr thus closing one of them will close also the other *)
-  let close' o = o#close in
-  object (self)
-
-    initializer Gc.finalise close' self
-
-    val mutable closed = false
-
-    method private assertNotClosed =
-      if closed then
-        failwith "Http_daemon.connection: connection is closed"
-
-    method getRequest =
-      self#assertNotClosed;
-      try
-        Some (safe_parse_request' inchan outchan)
-      with Again -> None
-
-    method respond_with res =
-      self#assertNotClosed;
-      respond_with res outchan
-
-    method close =
-      self#assertNotClosed;
-      close_in inchan;  (* this close also outchan *)
-      closed <- true
-
-  end
-
-class daemon ?(addr = "0.0.0.0") ?(port = 80) () =
-  object (self)
-
-    val suck =
-      Http_tcp_server.init_socket (Http_misc.build_sockaddr (addr, port))
-
-    method accept =
-      let (cli_suck, cli_sockaddr) = Unix.accept suck in  (* may block *)
-      let (inchan, outchan) =
-        (Unix.in_channel_of_descr cli_suck, Unix.out_channel_of_descr cli_suck)
-      in
-      new connection inchan outchan cli_sockaddr
-
-    method getRequest =
-      let conn = self#accept in
-      match conn#getRequest with
-      | None ->
-          conn#close;
-          self#getRequest
-      | Some req -> (req, conn)
-
-  end
-
diff --git a/helm/DEVEL/ocaml-http/http_daemon.mli b/helm/DEVEL/ocaml-http/http_daemon.mli
deleted file mode 100644 (file)
index 3cc1768..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(** Main OCaml HTTP module.
-    Here you can find two set of functions:
-    - functions which let you start an HTTP Daemon (start* functions)
-    - facility functions which let you sent responses back to clients *)
-
-  (** send a CRLF sequence on the given output channel, this is mandatory after
-  the last header was sent and before start sending the response body *)
-val send_CRLF: out_channel -> unit
-
-  (** send response status line, version is the http version used in response,
-  either code or status must be given (not both, not none) which represent the
-  HTTP response code, outchan is the output channel to which send status line *)
-val send_status_line:
-  ?version: Http_types.version -> ?code: int -> ?status: Http_types.status ->
-  out_channel ->
-    unit
-
-  (** like send_status_line but additionally will also send "Date" and "Server"
-  standard headers *)
-val send_basic_headers:
-  ?version: Http_types.version -> ?code: int -> ?status: Http_types.status ->
-  out_channel ->
-    unit
-
-  (** send an HTTP header on outchan *)
-val send_header: header: string -> value: string -> out_channel -> unit
-
-  (** as send_header, but for a list of pairs <header, value> *)
-val send_headers: headers:(string * string) list -> out_channel -> unit
-
-(*
-  (** send a file through an out_channel, file can be passed as an in_channel
-  (if 'file' is given) or as a file name (if 'name' is given) *)
-val send_file: ?name:string -> ?file:in_channel -> out_channel -> unit
-*)
-  (** send a file through an out_channel *)
-val send_file: src:Http_types.file_source -> out_channel -> unit
-
-  (** high level response function, respond on outchan sending: basic headers
-  (including Content-Length computed using 'body' argument), headers probided
-  via 'headers' argument, body given via 'body' argument.  Default response
-  status is 200, default response HTTP version is Http_common.http_version *)
-val respond:
-  ?body:string -> ?headers:(string * string) list ->
-  ?version:Http_types.version -> ?code:int -> ?status:Http_types.status ->
-  out_channel ->
-    unit
-
-  (** send a 404 (not found) HTTP response *)
-val respond_not_found:
-  url:string -> ?version: Http_types.version -> out_channel -> unit
-
-  (** send a 403 (forbidden) HTTP response *)
-val respond_forbidden:
-  url:string -> ?version: Http_types.version -> out_channel -> unit
-
-  (** send a "redirection" class response, optional body argument contains data
-  that will be displayed in the body of the response, default response status is
-  302 (moved permanently), only redirection status are accepted by this
-  function, other values will raise Failure *)
-val respond_redirect:
-  location:string -> ?body:string ->
-  ?version: Http_types.version ->
-  ?code: int -> ?status: Http_types.redirection_status ->
-  out_channel ->
-    unit
-
-  (** send an "error" response (i.e. 400 <= status < 600), optional body
-  argument as per send_redirect, default response status is 400 (bad request),
-  only error status are accepted by this function, other values will
-  raise Failure *)
-val respond_error:
-  ?body:string ->
-  ?version: Http_types.version ->
-  ?code: int -> ?status: Http_types.error_status ->
-  out_channel ->
-    unit
-
-  (** tipical static pages http daemon behaviour, if requested url is a file,
-  return it, it it is a directory return a directory listing of it *)
-val respond_file:
-  fname:string -> ?version: Http_types.version -> out_channel -> unit
-
-  (** respond using a prebuilt Http_types.response object *)
-val respond_with: Http_types.response -> out_channel -> unit
-
-  (** create an HTTP daemon listening on 'addr':'port' (defaults are
-  addr:"0.0.0.0" and port:80), callback is the user supplied function which
-  receive as a first parameter the path required by the the HTTP client as a
-  string, and a list of pair <parameter, value> representing parameters passed
-  via GET. The last argument of the callback is an output_channel connected to
-  the HTTP client to which the user can write directly. 'timeout' parameter sets
-  a timeout for each request processed by the daemon, if it's set to None,
-  daemon waits forever for completed requests (use with care!), default is 5
-  minute. 'mode' parameter has 3 possible values: `Single means that all request
-  are handled by the same process, `Fork means that each request is handled by a
-  separate process, `Thread means that each request is handled by a separate
-  thread, default is `Fork; 'root' (mnemonic "document root") is the directory
-  where the daemon chdir before starting up, default is current working
-  directory *)
-val start:
-  ?addr: string -> ?port: int ->
-  ?timeout: int option -> ?mode: Http_types.daemon_mode -> ?root: string ->
-  (string -> (string * string) list -> out_channel -> unit) ->
-    unit
-
-  (** identical to 'start' above but callback receive two arguments, the second
-  one is an out_channel as per 'start', but the secondo one is a Request.request
-  object *)
-val start':
-  ?addr: string -> ?port: int ->
-  ?timeout: int option -> ?mode: Http_types.daemon_mode -> ?root: string -> 
-  (Http_types.request -> out_channel -> unit) ->
-    unit
-
-  (** Object oriented interface to HTTP daemons.
-  @param addr address on which daemon will listen for connections
-  @param port port which daemon will bind
-  see {! Http_types.daemon} *)
-class daemon:
-  ?addr: string -> ?port: int ->
-    unit ->
-      Http_types.daemon
-
-  (** Trivial static pages HTTP daemon.
-  Daemons created using this module will serve directory indexes and files found
-  starting from the working directory *)
-module Trivial :
-  sig
-      (** callback function, exposed if you like to use it as a basis to define
-      a more powerful daemon *)
-    val callback : string -> 'a -> out_channel -> unit
-
-      (** start the "trivial" HTTP daemon *)
-    val start : ?addr:string -> ?port:int -> unit -> unit
-  end
-
diff --git a/helm/DEVEL/ocaml-http/http_message.ml b/helm/DEVEL/ocaml-http/http_message.ml
deleted file mode 100644 (file)
index ad3f38b..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Http_common;;
-open Http_constants;;
-open Http_types;;
-open Printf;;
-
-  (* remove all bindings of 'name' from hashtbl 'tbl' *)
-let rec hashtbl_remove_all tbl name =
-  if not (Hashtbl.mem tbl name) then
-    raise (Header_not_found name);
-  Hashtbl.remove tbl name;
-  if Hashtbl.mem tbl name then hashtbl_remove_all tbl name
-;;
-
-class virtual message ~body ~headers ~version ~clisockaddr ~srvsockaddr =
-
-  let ((cliaddr, cliport), (srvaddr, srvport)) =
-    (Http_misc.explode_sockaddr clisockaddr,
-     Http_misc.explode_sockaddr srvsockaddr)
-  in
-
-  object (self)
-
-    val _contentsBuf = Buffer.create 1024
-    val _headers = Hashtbl.create 11
-    val mutable _version: version option = version
-
-    initializer
-      self#setBody body;
-      self#addHeaders headers
-
-    method version = _version
-    method setVersion v = _version <- Some v
-
-    method body = Buffer.contents _contentsBuf
-    method setBody c =
-      Buffer.clear _contentsBuf;
-      Buffer.add_string _contentsBuf c
-    method bodyBuf = _contentsBuf
-    method setBodyBuf b =
-      Buffer.clear _contentsBuf;
-      Buffer.add_buffer _contentsBuf b
-    method addBody s = Buffer.add_string _contentsBuf s
-    method addBodyBuf b = Buffer.add_buffer _contentsBuf b
-
-    method addHeader ~name ~value =
-      let name = String.lowercase name in
-      Http_parser_sanity.heal_header (name, value);
-      Hashtbl.add _headers name value
-    method addHeaders =
-      List.iter (fun (name, value) -> self#addHeader ~name ~value)
-    method replaceHeader ~name ~value =
-      let name = String.lowercase name in
-      Http_parser_sanity.heal_header (name, value);
-      Hashtbl.replace _headers name value
-    method replaceHeaders =
-      List.iter (fun (name, value) -> self#replaceHeader ~name ~value)
-    method removeHeader ~name =
-      let name = String.lowercase name in
-      hashtbl_remove_all _headers name
-    method hasHeader ~name =
-      let name = String.lowercase name in
-      Hashtbl.mem _headers name
-    method header ~name =
-      if not (self#hasHeader name) then raise (Header_not_found name);
-      let name = String.lowercase name in
-      String.concat ", " (List.rev (Hashtbl.find_all _headers name))
-    method headers =
-      List.rev
-        (Hashtbl.fold
-          (fun name _ headers -> (name, self#header ~name)::headers)
-          _headers
-          [])
-
-    method clientSockaddr = clisockaddr
-    method clientAddr = cliaddr
-    method clientPort = cliport
-
-    method serverSockaddr = srvsockaddr
-    method serverAddr = srvaddr
-    method serverPort = srvport
-
-    method private virtual fstLineToString: string
-    method toString =
-      self#fstLineToString ^  (* {request,status} line *)
-      crlf ^
-      (String.concat  (* headers, crlf terminated *)
-        ""
-        (List.map (fun (h,v) -> h ^ ": " ^ v ^ crlf) self#headers)) ^
-      (sprintf "Content-Length: %d" (String.length self#body)) ^ crlf ^
-      crlf ^
-      self#body (* body *)
-    method serialize outchan =
-      output_string outchan self#toString;
-      flush outchan
-
-  end
-
diff --git a/helm/DEVEL/ocaml-http/http_message.mli b/helm/DEVEL/ocaml-http/http_message.mli
deleted file mode 100644 (file)
index eadf502..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(** Object Oriented representation of HTTP messages *)
-
-open Http_types;;
-
-  (** OO representation of an HTTP message
-  @param entity body included in the message
-  @param headers message headers shipped with the message *)
-class virtual message:
-  body: string -> headers: (string * string) list -> version: version option ->
-  clisockaddr: Unix.sockaddr -> srvsockaddr: Unix.sockaddr ->
-    object
-
-        (** @return message HTTP version, it can be None because older version
-        of the HTTP protocol don't require HTTP version to be told between
-        message source and destination *)
-      method version: version option
-
-        (** set message HTTP version *)
-      method setVersion: version -> unit
-
-        (** @return message body *)
-      method body: string
-
-        (** set message body *)
-      method setBody: string -> unit
-
-        (** @return a Buffer.t connected to message body (Warning: changing this
-        buffer will change message body too) *)
-      method bodyBuf: Buffer.t
-
-        (** set a new Buffer.t used to keep message body *)
-      method setBodyBuf: Buffer.t -> unit
-
-        (** append a string to message body *)
-      method addBody: string -> unit
-
-        (** append a whole buffer to message body *)
-      method addBodyBuf: Buffer.t -> unit
-
-      (** {i header name comparison are performed in a case-insensitive manner
-      as required by RFC2616, actually the implementation works converting all
-      header names in lowercase} *)
-
-        (** add an HTTP header
-        @param name header's name
-        @param value header's value *)
-      method addHeader: name:string -> value:string -> unit
-
-        (** add a list of HTTP headers
-        @param headers a list of pairs: header_name, header_value *)
-      method addHeaders: (string * string) list -> unit
-
-        (** like addHeader but replace previous definition of the same header *)
-      method replaceHeader: name:string -> value:string -> unit
-
-        (** like addHeaders but replace previous definition of headers that were
-        already defined *)
-      method replaceHeaders: (string * string) list -> unit
-
-        (** remove _all_ occurences of an HTTP header from the message
-        @param name name of the header to be removed *)
-      method removeHeader: name:string -> unit
-
-        (** @return true if given header exists in message, false otherwise *)
-      method hasHeader: name:string -> bool
-
-        (** @return value associated to a given header
-        @param name name of the header to lookup
-        @raise Header_not_found if given header wasn't defined in message *)
-      method header: name:string -> string
-
-        (** @return the full set of headers defined for this message, the value
-        returned is an association list from headers name to headers value, an
-        header may occurs more that once in the list *)
-      method headers: (string * string) list
-
-
-        (** @return client Unix.sockaddr *)
-      method clientSockaddr: Unix.sockaddr
-
-        (** @return client address pretty printed *)
-      method clientAddr: string
-
-        (** @return client port *)
-      method clientPort: int
-
-        (** @return server Unix.sockaddr *)
-      method serverSockaddr: Unix.sockaddr
-
-        (** @return server address pretty printed *)
-      method serverAddr: string
-
-        (** @return server port *)
-      method serverPort: int
-
-
-        (** @return for requests first request line, for responses first
-        response line.
-        User by derived requests and responses to implement toString method *)
-      method private virtual fstLineToString: string
-
-        (** @return a string representation of the message *)
-      method toString: string
-
-        (** serialize the message over an output channel *)
-      method serialize: out_channel -> unit
-
-    end
-
diff --git a/helm/DEVEL/ocaml-http/http_misc.ml b/helm/DEVEL/ocaml-http/http_misc.ml
deleted file mode 100644 (file)
index 191508c..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Http_types;;
-
-let date_822 () =
-  Netdate.mk_mail_date ~zone:Netdate.localzone (Unix.time ())
-
-let is_directory name =
-  match Unix.lstat name with
-  | { Unix.st_kind = Unix.S_DIR } -> true
-  | _ -> false
-
-let filesize fname = (Unix.stat fname).Unix.st_size
-
-let strip_trailing_slash =
-  let rex = Pcre.regexp "/$" in
-  fun s -> Pcre.replace ~rex ~templ:"" s
-
-let strip_heading_slash =
-  let rex = Pcre.regexp "^/" in
-  fun s -> Pcre.replace ~rex ~templ:"" s
-
-let ls dir =
-  let rec ls' entries =
-    try ls' ((Unix.readdir dir)::entries) with End_of_file -> entries
-  in
-  ls' []
-
-let string_explode s =
-  let rec string_explode' acc = function
-    | "" -> acc
-    | s -> string_explode' (s.[0] :: acc) (String.sub s 1 (String.length s - 1))
-  in
-  List.rev (string_explode' [] s)
-
-let string_implode = List.fold_left (fun s c -> s ^ (String.make 1 c)) ""
-
-let reason_phrase_of_code = function
-  | 100 -> "Continue"
-  | 101 -> "Switching protocols"
-  | 200 -> "OK"
-  | 201 -> "Created"
-  | 202 -> "Accepted"
-  | 203 -> "Non authoritative information"
-  | 204 -> "No content"
-  | 205 -> "Reset content"
-  | 206 -> "Partial content"
-  | 300 -> "Multiple choices"
-  | 301 -> "Moved permanently"
-  | 302 -> "Found"
-  | 303 -> "See other"
-  | 304 -> "Not modified"
-  | 305 -> "Use proxy"
-  | 307 -> "Temporary redirect"
-  | 400 -> "Bad request"
-  | 401 -> "Unauthorized"
-  | 402 -> "Payment required"
-  | 403 -> "Forbidden"
-  | 404 -> "Not found"
-  | 405 -> "Method not allowed"
-  | 406 -> "Not acceptable"
-  | 407 -> "Proxy authentication required"
-  | 408 -> "Request time out"
-  | 409 -> "Conflict"
-  | 410 -> "Gone"
-  | 411 -> "Length required"
-  | 412 -> "Precondition failed"
-  | 413 -> "Request entity too large"
-  | 414 -> "Request URI too large"
-  | 415 -> "Unsupported media type"
-  | 416 -> "Requested range not satisfiable"
-  | 417 -> "Expectation failed"
-  | 500 -> "Internal server error"
-  | 501 -> "Not implemented"
-  | 502 -> "Bad gateway"
-  | 503 -> "Service unavailable"
-  | 504 -> "Gateway time out"
-  | 505 -> "HTTP version not supported"
-  | invalid_code -> raise (Invalid_code invalid_code)
-
-let build_sockaddr (addr, port) =
-  Unix.ADDR_INET (Unix.inet_addr_of_string addr, port)
-
-let explode_sockaddr = function
-  | Unix.ADDR_INET (addr, port) -> (Unix.string_of_inet_addr addr, port)
-  | _ -> assert false (* can explode only inet address *)
-
-let peername_of_out_channel outchan =
-  Unix.getpeername (Unix.descr_of_out_channel outchan)
-let peername_of_in_channel inchan =
-  Unix.getpeername (Unix.descr_of_in_channel inchan)
-let sockname_of_out_channel outchan =
-  Unix.getsockname (Unix.descr_of_out_channel outchan)
-let sockname_of_in_channel inchan =
-  Unix.getsockname (Unix.descr_of_in_channel inchan)
-
-let buf_of_inchan ?limit ic =
-  let buf = Buffer.create 10240 in
-  let tmp = String.make 1024 '\000' in
-  let rec buf_of_inchan' limit =
-    (match limit with
-    | None ->
-        let bytes = input ic tmp 0 1024 in
-        if bytes > 0 then begin
-          Buffer.add_substring buf tmp 0 bytes;
-          buf_of_inchan' None
-        end
-    | Some lim -> (* TODO what about using a single really_input call? *)
-        let bytes = input ic tmp 0 (min lim 1024) in
-        if bytes > 0 then begin
-          Buffer.add_substring buf tmp 0 bytes;
-          buf_of_inchan' (Some (lim - bytes))
-        end)
-  in
-  (try buf_of_inchan' limit with End_of_file -> ());
-  buf
-
-let list_assoc_all key pairs =
-  snd (List.split (List.filter (fun (k, v) -> k = key) pairs))
-
diff --git a/helm/DEVEL/ocaml-http/http_misc.mli b/helm/DEVEL/ocaml-http/http_misc.mli
deleted file mode 100644 (file)
index d19535e..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(** Helpers and other not better classified functions which should not be
-exposed in the final API *)
-
-  (** @return the current date compliant to RFC 1123, which updates RFC 822
-  zone info are retrieved from UTC *)
-val date_822: unit -> string
-
-  (** @return true if 'name' is a directory on the file system, false otherwise
-  *)
-val is_directory: string -> bool
-
-  (** @return the filesize of fname *)
-val filesize: string -> int
-
-  (** strip trailing '/', if any, from a string and @return the new string *)
-val strip_trailing_slash: string -> string
-
-  (** strip heading '/', if any, from a string and @return the new string *)
-val strip_heading_slash: string -> string
-
-  (** given a dir handle @return a list of entries contained *)
-val ls: Unix.dir_handle -> string list
-
-  (** explode a string in a char list *)
-val string_explode: string -> char list
-
-  (** implode a char list in a string *)
-val string_implode: char list -> string
-
-  (** given an HTTP response code return the corresponding reason phrase *)
-val reason_phrase_of_code: int -> string
-
-  (** build a Unix.sockaddr inet address from a string representation of an IP
-  address and a port number *)
-val build_sockaddr: string * int -> Unix.sockaddr
-
-  (** explode an _inet_ Unix.sockaddr address in a string representation of an
-  IP address and a port number *)
-val explode_sockaddr: Unix.sockaddr -> string * int
-
-  (** given an out_channel build on top of a socket, return peername related to
-  that socket *)
-val peername_of_out_channel: out_channel -> Unix.sockaddr
-
-  (** as above but works on in_channels *)
-val peername_of_in_channel: in_channel -> Unix.sockaddr
-
-  (** given an out_channel build on top of a socket, return sockname related to
-  that socket *)
-val sockname_of_out_channel: out_channel -> Unix.sockaddr
-
-  (** as above but works on in_channels *)
-val sockname_of_in_channel: in_channel -> Unix.sockaddr
-
-  (* TODO replace with Buffer.add_channel which does almost the same :-((( *)
-  (** reads from an input channel till it End_of_file and returns what has been
-  read; if limit is given returned buffer will contains at most first 'limit'
-  bytes read from input channel *)
-val buf_of_inchan: ?limit: int -> in_channel -> Buffer.t
-
-  (** like List.assoc but return all bindings of a given key instead of the
-  leftmost one only *)
-val list_assoc_all: 'a -> ('a * 'b) list -> 'b list
-
diff --git a/helm/DEVEL/ocaml-http/http_parser.ml b/helm/DEVEL/ocaml-http/http_parser.ml
deleted file mode 100644 (file)
index 7ab21be..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Printf;;
-
-open Http_common;;
-open Http_types;;
-open Http_constants;;
-
-let (bindings_sep, binding_sep, pieces_sep, header_sep) =
-  (Pcre.regexp "&", Pcre.regexp "=", Pcre.regexp " ", Pcre.regexp ":")
-let header_RE = Pcre.regexp "([^:]*):(.*)"
-
-let url_decode url = Netencoding.Url.decode ~plus:true url
-
-let split_query_params query =
-  let bindings = Pcre.split ~rex:bindings_sep query in
-  match bindings with
-  | [] -> raise (Malformed_query query)
-  | bindings ->
-      List.map
-        (fun binding ->
-          match Pcre.split ~rex:binding_sep binding with
-          | [ ""; b ] -> (* '=b' *)
-              raise (Malformed_query_part (binding, query))
-          | [ a; b ]  -> (* 'a=b' *) (url_decode a, url_decode b)
-          | [ a ]     -> (* 'a=' || 'a' *) (url_decode a, "")
-          | _ -> raise (Malformed_query_part (binding, query)))
-        bindings
-
-  (** internal, used by generic_input_line *)
-exception Line_completed;;
-
-  (** given an input channel and a separator
-  @return a line read from it (like Pervasives.input_line)
-  line is returned only after reading a separator string; separator string isn't
-  included in the returned value
-  TODO what about efficiency?, input is performed char-by-char
-  *)
-let generic_input_line ~sep ~ic =
-  let sep_len = String.length sep in
-  if sep_len < 1 then
-    failwith ("Separator '" ^ sep ^ "' is too short!")
-  else  (* valid separator *)
-    let line = ref "" in
-    let sep_pointer = ref 0 in
-    try
-      while true do
-        if !sep_pointer >= String.length sep then (* line completed *)
-          raise Line_completed
-        else begin (* incomplete line: need to read more *)
-          let ch = input_char ic in
-          if ch = String.get sep !sep_pointer then  (* next piece of sep *)
-            incr sep_pointer
-          else begin  (* useful char *)
-            for i = 0 to !sep_pointer - 1 do
-              line := !line ^ (String.make 1 (String.get sep i))
-            done;
-            sep_pointer := 0;
-            line := !line ^ (String.make 1 ch)
-          end
-        end
-      done;
-      assert false  (* unreacheable statement *)
-    with Line_completed -> !line
-
-let patch_empty_path = function "" -> "/" | s -> s
-let debug_dump_request path params =
-  debug_print
-    (sprintf
-      "recevied request; path: %s; params: %s"
-      path
-      (String.concat ", " (List.map (fun (n, v) -> n ^ "=" ^ v) params)))
-
-let parse_request_fst_line ic =
-  let request_line = generic_input_line ~sep:crlf ~ic in
-  debug_print (sprintf "HTTP request line (not yet parsed): %s" request_line);
-  try
-    (match Pcre.split ~rex:pieces_sep request_line with
-    | [ meth_raw; uri_raw ] ->  (* ancient HTTP request line *)
-        (method_of_string meth_raw,                 (* method *)
-        Http_parser_sanity.url_of_string uri_raw,   (* uri *)
-        None)                                       (* no version given *)
-    | [ meth_raw; uri_raw; http_version_raw ] ->  (* HTTP 1.{0,1} *)
-          (method_of_string meth_raw,                 (* method *)
-          Http_parser_sanity.url_of_string uri_raw,   (* uri *)
-          Some (version_of_string http_version_raw))  (* version *)
-    | _ -> raise (Malformed_request request_line))
-  with Malformed_URL url -> raise (Malformed_request_URI url)
-
-let parse_path uri = patch_empty_path (String.concat "/" (Neturl.url_path uri))
-let parse_query_get_params uri =
-  try (* act on HTTP encoded URIs *)
-    split_query_params (Neturl.url_query ~encoded:true uri)
-  with Not_found -> []
-
-let parse_headers ic =
-  (* consume also trailing "^\r\n$" line *)
-  let rec parse_headers' headers =
-    match generic_input_line ~sep:crlf ~ic with
-    | "" -> List.rev headers
-    | line ->
-        (let subs =
-          try
-            Pcre.extract ~rex:header_RE line
-          with Not_found -> raise (Invalid_header line)
-        in
-        let header =
-          try
-            subs.(1)
-          with Invalid_argument "Array.get" -> raise (Invalid_header line)
-        in
-        let value =
-          try
-            Http_parser_sanity.normalize_header_value subs.(2) 
-          with Invalid_argument "Array.get" -> ""
-        in
-        Http_parser_sanity.heal_header (header, value);
-        parse_headers' ((header, value) :: headers))
-  in
-  parse_headers' []
-
-let parse_request ic =
-  let (meth, uri, version) = parse_request_fst_line ic in
-  let path = parse_path uri in
-  let query_get_params = parse_query_get_params uri in
-  debug_dump_request path query_get_params;
-  (path, query_get_params)
-
diff --git a/helm/DEVEL/ocaml-http/http_parser.mli b/helm/DEVEL/ocaml-http/http_parser.mli
deleted file mode 100644 (file)
index e2f9287..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(** HTTP messages parsing *)
-
-open Http_types;;
-
-  (** given an HTTP like query string (e.g. "name1=value1&name2=value2&...")
-  @return a list of pairs [("name1", "value1"); ("name2", "value2")]
-  @raise Malformed_query if the string isn't a valid query string
-  @raise Malformed_query_part if some piece of the query isn't valid
-  *)
-val split_query_params: string -> (string * string) list
-
-  (** parse 1st line of an HTTP request
-  @param inchan input channel from which parse request
-  @return a triple meth * url * version, meth is the HTTP method invoked, url is
-  the requested url, version is the HTTP version specified or None if no version
-  was specified
-  @raise Malformed_request if request 1st linst isn't well formed
-  @raise Malformed_request_URI if requested URI isn't well formed *)
-val parse_request_fst_line: in_channel -> meth * Neturl.url * version option
-
-  (** parse HTTP GET parameters from an URL; paramater which were passed with no
-  value (like 'x' in "/foo.cgi?a=10&x=&c=9") are returned associated with the
-  empty ("") string.
-  @return a list of pairs param_name * param_value *)
-val parse_query_get_params: Neturl.url -> (string * string) list
-
-  (** parse the base path (removing query string, fragment, ....) from an URL *)
-val parse_path: Neturl.url -> string
-
-  (** parse HTTP headers. Consumes also trailing CRLF at the end of header list
-  @param inchan input channel from which parse headers
-  @return a list of pairs header_name * header_value
-  @raise Invalid_header if a not well formed header is encountered *)
-val parse_headers: in_channel -> (string * string) list
-
-  (** given an input channel, reads from it a GET HTTP request and
-  @return a pair <path, query_params> where path is a string representing the
-  requested path and query_params is a list of pairs <name, value> (the GET
-  parameters) *)
-val parse_request: in_channel -> string * (string * string) list
-
diff --git a/helm/DEVEL/ocaml-http/http_parser_sanity.ml b/helm/DEVEL/ocaml-http/http_parser_sanity.ml
deleted file mode 100644 (file)
index 8e6ef7d..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Neturl;;
-open Printf;;
-
-open Http_types;;
-open Http_constants;;
-
-(*
-type url_syntax_option =
-    Url_part_not_recognized
-  | Url_part_allowed
-  | Url_part_required
-
-* (1) scheme://user:password@host:port/path;params?query#fragment
-*)
-
-let request_uri_syntax = {
-  url_enable_scheme    = Url_part_not_recognized;
-  url_enable_user      = Url_part_not_recognized;
-  url_enable_password  = Url_part_not_recognized;
-  url_enable_host      = Url_part_not_recognized;
-  url_enable_port      = Url_part_not_recognized;
-  url_enable_path      = Url_part_required;
-  url_enable_param     = Url_part_not_recognized;
-  url_enable_query     = Url_part_allowed;
-  url_enable_fragment  = Url_part_not_recognized;
-  url_enable_other     = Url_part_not_recognized;
-  url_accepts_8bits    = false;
-  url_is_valid         = (fun _ -> true);
-}
-
-  (* convention:
-      foo_RE_raw  is the uncompiled regexp matching foo
-      foo_RE      is the compiled regexp matching foo
-      is_foo      is the predicate over string matching foo
-  *)
-
-let separators_RE_raw = "()<>@,;:\\\\\"/\\[\\]?={} \t"
-let ctls_RE_raw = "\\x00-\\x1F\\x7F"
-let token_RE_raw = "[^" ^ separators_RE_raw ^ ctls_RE_raw ^ "]+"
-let lws_RE_raw = "(\r\n)?[ \t]"
-let quoted_string_RE_raw = "\"(([^\"])|(\\\\\"))*\""
-let text_RE_raw = "(([^" ^ ctls_RE_raw ^ "])|(" ^ lws_RE_raw ^ "))+"
-let field_content_RE_raw =
-  sprintf
-    "^(((%s)|(%s)|(%s))|(%s))*$"
-    token_RE_raw
-    separators_RE_raw
-    quoted_string_RE_raw
-    text_RE_raw
-(*
-  (* following RFC 2616 specifications *)
-let field_value_RE_raw = "((" ^ field_content_RE_raw ^ ")|(" ^ lws_RE_raw^ "))*"
-*)
-  (* smarter implementation: TEXT production is included in the regexp below *)
-let field_value_RE_raw =
-  sprintf
-    "^((%s)|(%s)|(%s)|(%s))*$"
-    token_RE_raw
-    separators_RE_raw
-    quoted_string_RE_raw
-    lws_RE_raw
-
-let token_RE = Pcre.regexp ("^" ^ token_RE_raw ^ "$")
-let field_value_RE = Pcre.regexp ("^" ^ field_value_RE_raw ^ "$")
-let heading_lws_RE = Pcre.regexp (sprintf "^%s*" lws_RE_raw)
-let trailing_lws_RE = Pcre.regexp (sprintf "%s*$" lws_RE_raw)
-
-let is_token s = Pcre.pmatch ~rex:token_RE s
-let is_field_name = is_token
-let is_field_value s = Pcre.pmatch ~rex:field_value_RE s
-
-let heal_header_name s =
-  if not (is_field_name s) then raise (Invalid_header_name s) else ()
-
-let heal_header_value s =
-  if not (is_field_value s) then raise (Invalid_header_value s) else ()
-
-let normalize_header_value s =
-  Pcre.replace ~rex:trailing_lws_RE
-    (Pcre.replace ~rex:heading_lws_RE s)
-
-let heal_header (name, value) =
-  heal_header_name name;
-  heal_header_value name
-let url_of_string s =
-  try
-    url_of_string request_uri_syntax s
-  with Neturl.Malformed_URL -> raise (Malformed_URL s)
-let string_of_url = Neturl.string_of_url
-
diff --git a/helm/DEVEL/ocaml-http/http_parser_sanity.mli b/helm/DEVEL/ocaml-http/http_parser_sanity.mli
deleted file mode 100644 (file)
index 2603d7d..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(** Sanity test functions related to HTTP message parsing *)
-
-  (** @param name an HTTP header name
-  @raise Invalid_header_name if name isn't a valid HTTP header name *)
-val heal_header_name: string -> unit
-
-  (** @param value an HTTP header value
-  @raise Invalid_header_value if value isn't a valid HTTP header value *)
-val heal_header_value: string -> unit
-
-  (** @param header a pair header_name * header_value
-  @raise Invalid_header_name if name isn't a valid HTTP header name
-  @raise Invalid_header_value if value isn't a valid HTTP header value *)
-val heal_header: string * string -> unit
-
-  (** remove heading and/or trailing LWS sequences as per RFC2616 *)
-val normalize_header_value: string -> string
-
-  (** parse an URL from a string.
-  @raise Malformed_URL if an invalid URL is encountered *)
-val url_of_string: string -> Neturl.url
-
-  (** pretty print an URL *)
-val string_of_url: Neturl.url -> string
-
diff --git a/helm/DEVEL/ocaml-http/http_request.ml b/helm/DEVEL/ocaml-http/http_request.ml
deleted file mode 100644 (file)
index 65cba97..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Printf;;
-
-open Http_common;;
-open Http_types;;
-
-let debug_dump_request path params =
-  debug_print ("request path = " ^ path);
-  debug_print (
-    sprintf"request params = %s"
-      (String.concat ";"
-        (List.map (fun (h,v) -> String.concat "=" [h;v]) params)))
-
-exception Fallback;;  (* used internally by request class *)
-
-class request ic =
-  let (meth, uri, version) = Http_parser.parse_request_fst_line ic in
-  let uri_str = Neturl.string_of_url uri in
-  let path = Http_parser.parse_path uri in
-  let query_get_params = Http_parser.parse_query_get_params uri in
-  let (headers, body) =
-    (match version with
-    | None -> [], ""  (* No version given, use request's 1st line only *)
-    | Some version -> (* Version specified, parse also headers and body *)
-        let headers =
-          List.map  (* lowercase header names to ease lookups before having a
-                    request object *)
-            (fun (h,v) -> (String.lowercase h, v))
-            (Http_parser.parse_headers ic) (* trailing \r\n consumed! *)
-        in
-        let body =
-            (* TODO fallback on size defined in Transfer-Encoding if
-              Content-Length isn't defined *)
-          if meth = `POST then
-            Buffer.contents
-              (try  (* read only Content-Length bytes *)
-                let limit_raw =
-                  (try
-                    List.assoc "content-length" headers
-                  with Not_found -> raise Fallback)
-                in
-                let limit =
-                  (try  (* TODO supports only a maximum content-length of 1Gb *)
-                    int_of_string limit_raw
-                  with Failure "int_of_string" ->
-                    raise (Invalid_header ("content-length: " ^ limit_raw)))
-                in
-                Http_misc.buf_of_inchan ~limit ic
-              with Fallback -> Http_misc.buf_of_inchan ic)  (* read until EOF *)
-          else  (* TODO empty body for methods other than POST, is ok? *)
-            ""
-        in
-        (headers, body))
-  in
-  let query_post_params =
-    match meth with
-    | `POST ->
-        let ct = try List.assoc "content-type" headers with Not_found -> "" in
-        if ct = "application/x-www-form-urlencoded" then
-          Http_parser.split_query_params body
-        else []
-    | _ -> []
-  in
-  let params = query_post_params @ query_get_params in (* prefers POST params *)
-  let _ = debug_dump_request path params in
-  let (clisockaddr, srvsockaddr) =
-    (Http_misc.peername_of_in_channel ic, Http_misc.sockname_of_in_channel ic)
-  in
-
-  object (self)
-
-    inherit
-      Http_message.message ~body ~headers ~version ~clisockaddr ~srvsockaddr
-
-    val params_tbl =
-      let tbl = Hashtbl.create (List.length params) in
-      List.iter (fun (n,v) -> Hashtbl.add tbl n v) params;
-      tbl
-
-    method meth = meth
-    method uri = uri_str
-    method path = path
-    method param ?meth name =
-      (match (meth: meth option) with
-      | None ->
-          (try
-            Hashtbl.find params_tbl name
-          with Not_found -> raise (Param_not_found name))
-      | Some `GET -> List.assoc name query_get_params
-      | Some `POST -> List.assoc name query_post_params)
-    method paramAll ?meth name =
-      (match (meth: meth option) with
-      | None -> List.rev (Hashtbl.find_all params_tbl name)
-      | Some `GET -> Http_misc.list_assoc_all name query_get_params
-      | Some `POST -> Http_misc.list_assoc_all name query_post_params)
-    method params = params
-    method params_GET = query_get_params
-    method params_POST = query_post_params
-
-    method private fstLineToString =
-      let method_string = string_of_method self#meth in
-      match self#version with
-      | Some version ->
-          sprintf "%s %s %s" method_string self#uri (string_of_version version)
-      | None -> sprintf "%s %s" method_string self#uri
-
-  end
-
diff --git a/helm/DEVEL/ocaml-http/http_request.mli b/helm/DEVEL/ocaml-http/http_request.mli
deleted file mode 100644 (file)
index d85ceb2..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(** Object Oriented representation of HTTP requests *)
-
-open Http_types;;
-
-  (** OO representation of an HTTP request
-  @param inchan input channel from which parse an HTTP request *)
-class request: in_channel -> Http_types.request
-
diff --git a/helm/DEVEL/ocaml-http/http_response.ml b/helm/DEVEL/ocaml-http/http_response.ml
deleted file mode 100644 (file)
index 6fc3213..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-open Http_types;;
-open Http_constants;;
-open Http_common;;
-open Http_daemon;;
-open Printf;;
-
-let status_line_RE = Pcre.regexp "^(HTTP/\\d\\.\\d) (\\d{3}) (.*)$"
-
-let anyize = function
-  | Some addr -> addr
-  | None -> Unix.ADDR_INET (Unix.inet_addr_any, -1)
-
-class response
-  (* Warning: keep default values in sync with Http_daemon.respond function *)
-  ?(body = "") ?(headers = []) ?(version = http_version)
-  ?clisockaddr ?srvsockaddr (* optional because response have to be easily
-                            buildable in callback functions *)
-  ?(code = 200) ?status
-  ()
-  =
-
-    (** if no address were supplied for client and/or server, use a foo address
-    instead *)
-  let (clisockaddr, srvsockaddr) = (anyize clisockaddr, anyize srvsockaddr) in
-
-    (* "version code reason_phrase" *)
-  object (self)
-
-      (* note that response objects can't be created with a None version *)
-    inherit
-      Http_message.message
-        ~body ~headers ~version:(Some version) ~clisockaddr ~srvsockaddr
-
-    val mutable _code =
-      match status with
-      | None -> code
-      | Some (s: Http_types.status) -> code_of_status s
-    val mutable _reason: string option = None
-
-    method private getRealVersion =
-      match self#version with
-      | None ->
-          failwith ("Http_response.fstLineToString: " ^
-            "can't serialize an HTTP response with no HTTP version defined")
-      | Some v -> string_of_version v
-
-    method code = _code
-    method setCode c =
-      ignore (status_of_code c);  (* sanity check on c *)
-      _code <- c
-    method status = status_of_code _code
-    method setStatus (s: Http_types.status) = _code <- code_of_status s
-    method reason =
-      match _reason with
-      | None -> Http_misc.reason_phrase_of_code _code
-      | Some r -> r
-    method setReason r = _reason <- Some r
-    method statusLine =
-      String.concat " "
-        [self#getRealVersion; string_of_int self#code; self#reason]
-    method setStatusLine s =
-      try
-        let subs = Pcre.extract ~rex:status_line_RE s in
-        self#setVersion (version_of_string subs.(1));
-        self#setCode (int_of_string subs.(2));
-        self#setReason subs.(3)
-      with Not_found ->
-        raise (Invalid_status_line s)
-
-    method isInformational = is_informational _code
-    method isSuccess = is_success _code
-    method isRedirection = is_redirection _code
-    method isClientError = is_client_error _code
-    method isServerError = is_server_error _code
-    method isError = is_error _code
-
-      (* FIXME duplication of code between this and send_basic_headers *)
-    method addBasicHeaders =
-      self#addHeader ~name:"Date" ~value:(Http_misc.date_822 ());
-      self#addHeader ~name:"Server" ~value:server_string
-
-    method contentType = self#header "Content-Type"
-    method setContentType t = self#replaceHeader "Content-Type" t
-    method contentEncoding = self#header "Content-Encoding"
-    method setContentEncoding e = self#replaceHeader "Content-Encoding" e
-    method date = self#header "Date"
-    method setDate d = self#replaceHeader "Date" d
-    method expires = self#header "Expires"
-    method setExpires t = self#replaceHeader "Expires" t
-    method server = self#header "Server"
-    method setServer s = self#replaceHeader "Server" s
-
-    method private fstLineToString =
-      sprintf "%s %d %s" self#getRealVersion self#code self#reason
-
-  end
-
diff --git a/helm/DEVEL/ocaml-http/http_response.mli b/helm/DEVEL/ocaml-http/http_response.mli
deleted file mode 100644 (file)
index d30f97d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(** Object Oriented representation of HTTP responses *)
-
-open Http_types;;
-
-  (** OO representation of an HTTP response. *)
-class response:
-  ?body:string -> ?headers:(string * string) list -> ?version: version ->
-  ?clisockaddr: Unix.sockaddr -> ?srvsockaddr: Unix.sockaddr ->
-  ?code:int -> ?status:Http_types.status ->
-  unit ->
-    Http_types.response
-
diff --git a/helm/DEVEL/ocaml-http/http_tcp_server.ml b/helm/DEVEL/ocaml-http/http_tcp_server.ml
deleted file mode 100644 (file)
index 23fbc66..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-
-  (** raised when a client timeouts *)
-exception Timeout;;
-
-let backlog = 10;;
-
-  (** if timeout is given (Some _) @return a new callback which establish
-  timeout_callback as callback for signal Sys.sigalrm and register an alarm
-  (expiring after timeout seconds) before invoking the real callback given. If
-  timeout is None, callback is returned unchanged. *)
-let wrap_callback_w_timeout ~callback ~timeout ~timeout_callback =
-  match timeout with
-  | None -> callback
-  | Some timeout -> (* wrap callback setting an handler for ALRM signal and an
-                    alarm that ring after timeout seconds *)
-      (fun inchan outchan ->
-        ignore (Sys.signal Sys.sigalrm (Sys.Signal_handle timeout_callback));
-        ignore (Unix.alarm timeout);
-        callback inchan outchan)
-
-  (* try to close nicely a socket *)
-let shutdown_socket suck =
-  try
-    Unix.shutdown suck Unix.SHUTDOWN_ALL
-  with Unix.Unix_error(_, "shutdown", "") -> ()
-
-let nice_unix_accept suck =
-  try
-    Unix.accept suck
-  with e -> (* clean up socket before exit *)
-    shutdown_socket suck;
-    raise e
-
-let init_socket sockaddr =
-  let suck = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in
-    (* shutdown socket on SIGTERM *)
-  ignore (Sys.signal Sys.sigterm
-    (Sys.Signal_handle
-      (fun _ -> shutdown_socket suck; exit 17)));
-  Unix.setsockopt suck Unix.SO_REUSEADDR true;
-  Unix.bind suck sockaddr;
-  Unix.listen suck backlog;
-  suck
-
-let init_callback callback timeout =
-  let timeout_callback signo =
-    if signo = Sys.sigalrm then
-      raise Timeout
-  in
-  wrap_callback_w_timeout ~callback ~timeout ~timeout_callback
-
-  (** DEPRECATED and no longer visibile in .mli interface, this server has been
-  replaced by 'fork'!
-  tcp_server which use Unix.establish_server which in turn forks a child for
-  each request *)
-let ocaml_builtin ~sockaddr ~timeout callback =
-  let timeout_callback signo =
-    if signo = Sys.sigalrm then
-      exit 2
-  in
-  Unix.establish_server
-    (wrap_callback_w_timeout ~callback ~timeout ~timeout_callback)
-    sockaddr
-
-  (** like Unix.establish_server, but shutdown sockets when receiving SIGTERM
-  and before exiting for an uncaught exception *)
-let my_establish_server server_fun sockaddr =
-  let suck = init_socket sockaddr in
-  while true do
-    let (s, caller) = nice_unix_accept suck in
-      (* "double fork" trick, see Unix.establish_server implementation *)
-    match Unix.fork() with
-    | 0 ->  (* parent *)
-        (try
-          if Unix.fork () <> 0 then
-            exit 0;  (* The son exits, the grandson works *)
-          let inchan = Unix.in_channel_of_descr s in
-          let outchan = Unix.out_channel_of_descr s in
-          server_fun inchan outchan;
-          close_out outchan;
-             (* The file descriptor was already closed by close_out.  close_in
-             inchan; *)
-          exit 0
-        with e ->
-          shutdown_socket suck; (* clean up socket before exit *)
-          raise e)
-    | child when (child > 0) -> (* child *)
-        Unix.close s;
-        ignore (Unix.waitpid [] child) (* Reclaim the son *)
-    | _ (* < 0 *) ->
-        failwith "Can't fork"
-  done
-
-let fork ~sockaddr ~timeout callback =
-  let timeout_callback signo =
-    if signo = Sys.sigalrm then
-      exit 2
-  in
-  my_establish_server
-    (wrap_callback_w_timeout ~callback ~timeout ~timeout_callback)
-    sockaddr
-
-
-  (** tcp_server which doesn't fork, requests are server sequentially and in the
-  same address space of the calling process *)
-let simple ~sockaddr ~timeout callback =
-  let suck = init_socket sockaddr in
-  let callback = init_callback callback timeout in
-  try
-    while true do
-      let (client, _) = Unix.accept suck in
-        (* client is now connected *)
-      let (inchan, outchan) =
-        (Unix.in_channel_of_descr client, Unix.out_channel_of_descr client)
-      in
-      (try
-        callback inchan outchan;
-        ignore (Unix.alarm 0) (* reset alarm *)
-      with Timeout -> ());
-      close_out outchan (* this close also inchan: socket is the same *)
-    done
-  with e -> (* clean up socket before exit *)
-    shutdown_socket suck;
-    raise e
-
-  (** tcp_server which creates a new thread for each request to be served *)
-let thread ~sockaddr ~timeout callback =
-  let suck = init_socket sockaddr in
-  let callback = init_callback callback timeout in
-  let callback (i, o) =
-    try
-      callback i o;
-      close_out o
-    with
-    | Timeout -> close_out o
-    | e ->
-        close_out o;
-        raise e
-  in
-  while true do
-    let (client, _) = nice_unix_accept suck in
-      (* client is now connected *)
-    let (inchan, outchan) =
-      (Unix.in_channel_of_descr client, Unix.out_channel_of_descr client)
-    in
-    Http_threaded_tcp_server.serve callback (inchan, outchan)
-  done
-
diff --git a/helm/DEVEL/ocaml-http/http_tcp_server.mli b/helm/DEVEL/ocaml-http/http_tcp_server.mli
deleted file mode 100644 (file)
index d35ad2c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(** TCP servers used as low-levels for HTTP daemons *)
-
-(** {2 servers} *)
-
-  (** single process server *)
-val simple:         Http_types.tcp_server
-
-  (** multi threaded server *)
-val thread:         Http_types.tcp_server
-
-  (** multi process server *)
-val fork:           Http_types.tcp_server
-
-(** {2 low level functions} *)
-
-  (** initialize a passive socket listening on given Unix.sockaddr *)
-val init_socket:    Unix.sockaddr -> Unix.file_descr
-
diff --git a/helm/DEVEL/ocaml-http/http_threaded_tcp_server.mli b/helm/DEVEL/ocaml-http/http_threaded_tcp_server.mli
deleted file mode 100644 (file)
index 813c69f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(** Multithreaded part of Http_tcp_server *)
-
-  (** serve an HTTP request for a multi threaded TCP server *)
-val serve : ('a -> 'b) -> 'a -> unit
-
diff --git a/helm/DEVEL/ocaml-http/http_types.ml b/helm/DEVEL/ocaml-http/http_types.ml
deleted file mode 100644 (file)
index 40015e6..0000000
+++ /dev/null
@@ -1,385 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-(** Type definitions *)
-
-  (** HTTP version, actually only 1.0 and 1.1 are supported. Note that
-  'supported' here means only 'accepted inside a HTTP request line', no
-  different behaviours are actually implemented depending on HTTP version *)
-type version =
-  [ `HTTP_1_0
-  | `HTTP_1_1
-  ]
-
-  (** HTTP method, actually only GET and POST methods are supported *)
-type meth =
-  [ `GET
-  | `POST
-  ]
-
-  (** Daemon behaviour wrt request handling. `Single mode use a single process
-  to handle all requests, no request is served until a previous one has been
-  fully served. `Fork mode fork a new process for each request, the new process
-  will execute the callback function and then exit. `Thread mode create a new
-  thread for each request, the new thread will execute the callback function and
-  then exit, threads can communicate using standard OCaml Thread library. *)
-type daemon_mode = [ `Single | `Fork | `Thread ]
-
-  (** A TCP server is a function taking an address on which bind and listen for
-  connections, an optional timeout after which abort client connections and a
-  callback function which in turn takes an input and an output channel as
-  arguments. After receiving this argument a TCP server sits and waits for
-  connection, on each connection it apply the callback function to channels
-  connected to client. *)
-type tcp_server =
-  sockaddr:Unix.sockaddr -> timeout:int option ->
-  (in_channel -> out_channel -> unit) ->
-    unit
-
-  (** informational HTTP status, see RFC2616 *)
-type informational_substatus =
-  [ `Continue
-  | `Switching_protocols
-  ]
-
-  (** success HTTP status, see RFC2616 *)
-type success_substatus =
-  [ `OK
-  | `Created
-  | `Accepted
-  | `Non_authoritative_information
-  | `No_content
-  | `Reset_content
-  | `Partial_content
-  ]
-
-  (** redirection HTTP status, see RFC2616 *)
-type redirection_substatus =
-  [ `Multiple_choices
-  | `Moved_permanently
-  | `Found
-  | `See_other
-  | `Not_modified
-  | `Use_proxy
-  | `Temporary_redirect
-  ]
-
-  (** client error HTTP status, see RFC2616 *)
-type client_error_substatus =
-  [ `Bad_request
-  | `Unauthorized
-  | `Payment_required
-  | `Forbidden
-  | `Not_found
-  | `Method_not_allowed
-  | `Not_acceptable
-  | `Proxy_authentication_required
-  | `Request_time_out
-  | `Conflict
-  | `Gone
-  | `Length_required
-  | `Precondition_failed
-  | `Request_entity_too_large
-  | `Request_URI_too_large
-  | `Unsupported_media_type
-  | `Requested_range_not_satisfiable
-  | `Expectation_failed
-  ]
-
-  (** server error HTTP status, see RFC2616 *)
-type server_error_substatus =
-  [ `Internal_server_error
-  | `Not_implemented
-  | `Bad_gateway
-  | `Service_unavailable
-  | `Gateway_time_out
-  | `HTTP_version_not_supported
-  ]
-
-type informational_status = [ `Informational of informational_substatus ]
-type success_status = [ `Success of success_substatus ]
-type redirection_status = [ `Redirection of redirection_substatus ]
-type client_error_status = [ `Client_error of client_error_substatus ]
-type server_error_status = [ `Server_error of server_error_substatus ]
-
-type error_status =
-  [ client_error_status
-  | server_error_status
-  ]
-
-  (** HTTP status *)
-type status =
-  [ informational_status
-  | success_status
-  | redirection_status
-  | client_error_status
-  | server_error_status
-  ]
-
-  (** File sources *)
-type file_source =
-  | FileSrc of string           (** filename *)
-  | InChanSrc of in_channel     (** input channel *)
-
-  (** {2 Exceptions} *)
-
-  (** invalid header encountered *)
-exception Invalid_header of string
-
-  (** invalid header name encountered *)
-exception Invalid_header_name of string
-
-  (** invalid header value encountered *)
-exception Invalid_header_value of string
-
-  (** unsupported or invalid HTTP version encountered *)
-exception Invalid_HTTP_version of string
-
-  (** unsupported or invalid HTTP method encountered *)
-exception Invalid_HTTP_method of string
-
-  (** invalid HTTP status code integer representation encountered *)
-exception Invalid_code of int
-
-  (** invalid URL encountered *)
-exception Malformed_URL of string
-
-  (** invalid query string encountered *)
-exception Malformed_query of string
-
-  (** invalid query string part encountered, arguments are parameter name and
-  parameter value *)
-exception Malformed_query_part of string * string
-
-  (** invalid request URI encountered *)
-exception Malformed_request_URI of string
-
-  (** malformed request received *)
-exception Malformed_request of string
-
-  (** a parameter you were looking for was not found *)
-exception Param_not_found of string
-
-  (** invalid HTTP status line encountered *)
-exception Invalid_status_line of string
-
-  (** an header you were looking for was not found *)
-exception Header_not_found of string
-
-  (** raisable by callback functions to make main daemon quit, this is the only
-  'clean' way to make start functions return *)
-exception Quit
-
-  (** {2 OO representation of HTTP messages} *)
-
-  (** HTTP generic messages. See {! Http_message.message} *)
-class type message = object
-
-    method version: version option
-    method setVersion: version -> unit
-
-    method body: string
-    method setBody: string -> unit
-    method bodyBuf: Buffer.t
-    method setBodyBuf: Buffer.t -> unit
-    method addBody: string -> unit
-    method addBodyBuf: Buffer.t -> unit
-
-    method addHeader: name:string -> value:string -> unit
-    method addHeaders: (string * string) list -> unit
-    method replaceHeader: name:string -> value:string -> unit
-    method replaceHeaders: (string * string) list -> unit
-    method removeHeader: name:string -> unit
-    method hasHeader: name:string -> bool
-    method header: name:string -> string
-    method headers: (string * string) list
-
-    method clientSockaddr: Unix.sockaddr
-    method clientAddr: string
-    method clientPort: int
-
-    method serverSockaddr: Unix.sockaddr
-    method serverAddr: string
-    method serverPort: int
-
-    method toString: string
-    method serialize: out_channel -> unit
-
-  end
-
-  (** HTTP requests *)
-class type request = object
-
-      (** an HTTP request is a flavour of HTTP message *)
-    inherit message
-
-      (** @return request method *)
-    method meth: meth
-
-      (** @return requested URI (including query string, fragment, ...) *)
-    method uri: string
-
-      (** @return requested path *)
-    method path: string
-
-      (** lookup a given parameter
-      @param meth if given restrict the lookup area (e.g. if meth = POST than
-      only parameters received via POST are searched), if not given both GET and
-      POST parameter are searched in an unspecified order (actually the
-      implementation prefers POST parameters but this is not granted, you've
-      been warned)
-      @param name name of the parameter to lookup
-      @return value associated to parameter name
-      @raise Param_not_found if parameter name was not found *)
-    method param: ?meth:meth -> string -> string
-
-      (** like param above but return a list of values associated to given
-      parameter (a parameter could be defined indeed more than once: passed more
-      than once in a query string or passed both insider the url (the GET way)
-      and inside message body (the POST way)) *)
-    method paramAll: ?meth:meth -> string -> string list
-
-      (** @return the list of all received parameters *)
-    method params: (string * string) list
-
-      (** @return the list of all parameters received via GET *)
-    method params_GET: (string * string) list
-
-      (** @return the list of all parameter received via POST *)
-    method params_POST: (string * string) list
-
-  end
-
-  (** HTTP responses *)
-class type response = object
-
-    inherit message
-
-      (** @return response code *)
-    method code: int
-
-      (** set response code *)
-    method setCode: int -> unit
-
-      (** @return response status, see {! Http_types.status} *)
-    method status: status
-
-      (** set response status *)
-    method setStatus: status -> unit
-
-      (** @return reason string *)
-    method reason: string
-
-      (** set reason string *)
-    method setReason: string -> unit
-
-      (** @return status line *)
-    method statusLine: string
-
-      (** set status line
-      @raise Invalid_status_line if an invalid HTTP status line was passed *)
-    method setStatusLine: string -> unit
-
-      (** response is an informational one *)
-    method isInformational: bool
-
-      (** response is a success one *)
-    method isSuccess: bool
-
-      (** response is a redirection one *)
-    method isRedirection: bool
-
-      (** response is a client error one *)
-    method isClientError: bool
-
-      (** response is a server error one *)
-    method isServerError: bool
-
-      (** response is either a client error or a server error response *)
-    method isError: bool
-
-      (** add basic headers to response, see {! Http_daemon.send_basic_headers}
-      *)
-    method addBasicHeaders: unit
-
-      (** facilities to access some frequently used headers *)
-
-      (** @return Content-Type header value *)
-    method contentType: string
-
-      (** set Content-Type header value *)
-    method setContentType: string -> unit
-
-      (** @return Content-Encoding header value *)
-    method contentEncoding: string
-
-      (** set Content-Encoding header value *)
-    method setContentEncoding: string -> unit
-
-      (** @return Date header value *)
-    method date: string
-
-      (** set Date header value *)
-    method setDate: string -> unit
-
-      (** @return Expires header value *)
-    method expires: string
-
-      (** set Expires header value *)
-    method setExpires: string -> unit
-
-      (** @return Server header value *)
-    method server: string
-
-      (** set Server header value *)
-    method setServer: string -> unit
-
-  end
-
-  (** {2 OO representation of other HTTP "entities"} *)
-
-  (** an HTTP connection from a client to a server *)
-class type connection =
-  object
-      (** @return next request object, may block if client hasn't submitted any
-      request yet, may be None if client request was ill-formed *)
-    method getRequest: request option
-
-      (** respond to client sending it a response *)
-    method respond_with: response -> unit
-
-      (** close connection to client. Warning: this object can't be used any
-      longer after this method has been called *)
-    method close: unit
-  end
-
-  (** an HTTP daemon *)
-class type daemon =
-  object
-      (** @return a connection to a client, may block if no client has connected
-      yet *)
-    method accept: connection
-
-      (** shortcut method, blocks until a client has submit a request and
-      return a pair request * connection *)
-    method getRequest: request * connection
-  end
-
diff --git a/helm/DEVEL/ocaml-http/mt/.cvsignore b/helm/DEVEL/ocaml-http/mt/.cvsignore
deleted file mode 100644 (file)
index 977cc04..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-*.cmi
-*.cmo
-*.cmx
-*.cma
-*.cmxa
-*.mli
diff --git a/helm/DEVEL/ocaml-http/mt/http_threaded_tcp_server.ml b/helm/DEVEL/ocaml-http/mt/http_threaded_tcp_server.ml
deleted file mode 100644 (file)
index acdef61..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-let serve callback arg = ignore (Thread.create callback arg)
-
diff --git a/helm/DEVEL/ocaml-http/non_mt/.cvsignore b/helm/DEVEL/ocaml-http/non_mt/.cvsignore
deleted file mode 100644 (file)
index 977cc04..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-*.cmi
-*.cmo
-*.cmx
-*.cma
-*.cmxa
-*.mli
diff --git a/helm/DEVEL/ocaml-http/non_mt/http_threaded_tcp_server.ml b/helm/DEVEL/ocaml-http/non_mt/http_threaded_tcp_server.ml
deleted file mode 100644 (file)
index 9c92d71..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-
-(*
-  OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
-
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
-
-  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
-*)
-
-let serve _ _ =
-  failwith
-    ("Threaded server not supported by the non threaded version " ^
-     "of ocaml-http, please link against http_mt.cm{,x}a")
-
diff --git a/helm/DEVEL/ocaml-http/tophttp b/helm/DEVEL/ocaml-http/tophttp
deleted file mode 100644 (file)
index 64694a2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#use "topfind";;
-#require "unix";;
-#require "pcre";;
-#require "netstring";;
-#load "http.cma";;
diff --git a/helm/DEVEL/pxp/.cvsignore b/helm/DEVEL/pxp/.cvsignore
deleted file mode 100644 (file)
index c1fcbc4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-*.cmo
-*.cmx
-*.cmi
-
-*.o
-*.a
-
diff --git a/helm/DEVEL/pxp/findlib-0.4.tar.gz b/helm/DEVEL/pxp/findlib-0.4.tar.gz
deleted file mode 100644 (file)
index a45cce5..0000000
Binary files a/helm/DEVEL/pxp/findlib-0.4.tar.gz and /dev/null differ
diff --git a/helm/DEVEL/pxp/netstring-0.9.3.tar.gz b/helm/DEVEL/pxp/netstring-0.9.3.tar.gz
deleted file mode 100644 (file)
index 8a7431e..0000000
Binary files a/helm/DEVEL/pxp/netstring-0.9.3.tar.gz and /dev/null differ
diff --git a/helm/DEVEL/pxp/netstring/.cvsignore b/helm/DEVEL/pxp/netstring/.cvsignore
deleted file mode 100644 (file)
index c1fcbc4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-*.cmo
-*.cmx
-*.cmi
-
-*.o
-*.a
-
diff --git a/helm/DEVEL/pxp/netstring/LICENSE b/helm/DEVEL/pxp/netstring/LICENSE
deleted file mode 100644 (file)
index 820032e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-Copyright 1999 by Gerd Stolpmann
-
-The package "netstring" is copyright by Gerd Stolpmann. 
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the "netstring" software (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 Gerd Stolpmann be liable for any claim, damages or
-other liability, whether in an action of contract, tort or otherwise,
-arising from, out of or in connection with the Software or the use or
-other dealings in the software.
diff --git a/helm/DEVEL/pxp/netstring/META b/helm/DEVEL/pxp/netstring/META
deleted file mode 100644 (file)
index d422128..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-version = "0.9.3"
-requires = "str"
-description = "String processing for the Internet"
-
-archive(byte) = 
-    "netstring.cma netmappings_iso.cmo netmappings_other.cmo"
-archive(byte,toploop) = 
-    "netstring.cma netmappings_iso.cmo netmappings_other.cmo 
-     netstring_top.cmo"
-archive(byte,mt) = 
-    "netstring.cma netmappings_iso.cmo netmappings_other.cmo 
-     netstring_mt.cmo"
-archive(byte,mt,toploop) = 
-    "netstring.cma netmappings_iso.cmo netmappings_other.cmo 
-     netstring_mt.cmo netstring_top.cmo"
-archive(native) = 
-    "netstring.cmxa netmappings_iso.cmx netmappings_other.cmx"
-archive(native,mt) = 
-    "netstring.cmxa netmappings_iso.cmx netmappings_other.cmx 
-     netstring_mt.cmx"
-
-archive(byte,netstring_only_iso) = 
-    "netstring.cma netmappings_iso.cmo"
-archive(byte,toploop,netstring_only_iso) = 
-    "netstring.cma netmappings_iso.cmo
-     netstring_top.cmo"
-archive(byte,mt,netstring_only_iso) = 
-    "netstring.cma netmappings_iso.cmo
-     netstring_mt.cmo"
-archive(byte,mt,toploop,netstring_only_iso) = 
-    "netstring.cma netmappings_iso.cmo
-     netstring_mt.cmo netstring_top.cmo"
-archive(native,netstring_only_iso) = 
-    "netstring.cmxa netmappings_iso.cmx"
-archive(native,mt,netstring_only_iso) = 
-    "netstring.cmxa netmappings_iso.cmx 
-     netstring_mt.cmx"
-
-archive(byte,netstring_minimum) = 
-    "netstring.cma"
-archive(byte,toploop,netstring_minimum) = 
-    "netstring.cma 
-     netstring_top.cmo"
-archive(byte,mt,netstring_minimum) = 
-    "netstring.cma 
-     netstring_mt.cmo"
-archive(byte,mt,toploop,netstring_minimum) = 
-    "netstring.cma 
-     netstring_mt.cmo netstring_top.cmo"
-archive(native,netstring_minimum) = 
-    "netstring.cmxa"
-archive(native,mt,netstring_minimum) = 
-    "netstring.cmxa 
-     netstring_mt.cmx"
diff --git a/helm/DEVEL/pxp/netstring/Makefile b/helm/DEVEL/pxp/netstring/Makefile
deleted file mode 100644 (file)
index 98f9ef0..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-# make all:            make bytecode archive
-# make opt:            make native archive
-# make install:        install bytecode archive, and if present, native archive
-# make uninstall:      uninstall package
-# make clean:          remove intermediate files
-# make distclean:      remove any superflous files
-# make release:        cleanup, create archive, tag CVS module 
-#                      (for developers)
-
-#----------------------------------------------------------------------
-# specific rules for this package:
-
-OBJECTS  = netstring_str.cmo \
-           netencoding.cmo netbuffer.cmo netstream.cmo \
-          mimestring.cmo cgi.cmo base64.cmo \
-           nethtml_scanner.cmo nethtml.cmo \
-          neturl.cmo \
-          netmappings.cmo netconversion.cmo
-XOBJECTS = $(OBJECTS:.cmo=.cmx)
-ARCHIVE  = netstring.cma
-XARCHIVE = netstring.cmxa
-
-NAME     = netstring
-REQUIRES = str
-
-ISO_MAPPINGS   = mappings/iso*.unimap
-OTHER_MAPPINGS = mappings/cp*.unimap \
-                 mappings/adobe*.unimap \
-                mappings/jis*.unimap \
-                 mappings/koi*.unimap \
-                 mappings/mac*.unimap \
-                 mappings/windows*.unimap
-
-all: $(ARCHIVE) \
-     netstring_top.cmo netstring_mt.cmo \
-     netmappings_iso.cmo netmappings_other.cmo
-
-opt: $(XARCHIVE) \
-     netstring_mt.cmx \
-     netmappings_iso.cmx netmappings_other.cmx
-
-
-$(ARCHIVE): $(OBJECTS) 
-       $(OCAMLC) -a -o $(ARCHIVE) $(OBJECTS)
-
-$(XARCHIVE): $(XOBJECTS) 
-       $(OCAMLOPT) -a -o $(XARCHIVE) $(XOBJECTS)
-
-netmappings_iso.ml:
-       $(MAKE) -C tools 
-       test ! -d mappings || tools/unimap_to_ocaml/unimap_to_ocaml \
-               -o netmappings_iso.ml $(ISO_MAPPINGS)
-
-netmappings_other.ml:
-       $(MAKE) -C tools 
-       test ! -d mappings || tools/unimap_to_ocaml/unimap_to_ocaml \
-               -o netmappings_other.ml $(OTHER_MAPPINGS)
-
-#----------------------------------------------------------------------
-# general rules:
-
-OPTIONS   =
-OCAMLC    = ocamlc $(DEBUG) $(OPTIONS) $(ROPTIONS)
-OCAMLOPT  = ocamlopt $(OPTIONS) $(ROPTIONS)
-OCAMLLEX  = ocamllex
-OCAMLDEP  = ocamldep $(OPTIONS)
-OCAMLFIND = ocamlfind
-
-DEBUG  =
-# Invoke with: make DEBUG=-g
-
-depend: *.ml *.mli
-       $(OCAMLDEP) *.ml *.mli >depend
-
-depend.pkg: Makefile
-       $(OCAMLFIND) use -p ROPTIONS= $(REQUIRES) >depend.pkg
-
-.PHONY: install
-install: all
-       { test ! -f $(XARCHIVE) || extra="*.cmxa *.a netstring_mt.cmx netmappings_iso.cmx netmappings_other.cmx netstring_mt.o netmappings_iso.o netmappings_other.o"; }; \
-       $(OCAMLFIND) install $(NAME) *.mli *.cmi *.cma netstring_top.cmo netstring_mt.cmo netmappings_iso.cmo netmappings_other.cmo META $$extra
-
-.PHONY: install-cgi
-install-cgi: 
-       $(OCAMLFIND) install cgi compat-cgi/META
-
-
-.PHONY: install-base64
-install-base64: 
-       $(OCAMLFIND) install base64 compat-base64/META
-
-
-.PHONY: uninstall
-uninstall:
-       $(OCAMLFIND) remove $(NAME)
-
-.PHONY: uninstall-cgi
-uninstall-cgi:
-       $(OCAMLFIND) remove cgi
-
-.PHONY: uninstall-base64
-uninstall-base64:
-       $(OCAMLFIND) remove base64
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa
-       test ! -d mappings || rm -f netmappings_iso.ml netmappings_other.ml
-
-.PHONY: distclean
-distclean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa
-       rm -f *~ depend depend.pkg compat-cgi/*~ compat-base64/*~
-       $(MAKE) -C tests distclean
-       $(MAKE) -C doc distclean
-       $(MAKE) -C tools distclean
-
-RELEASE: META
-       awk '/version/ { print substr($$3,2,length($$3)-2) }' META >RELEASE
-
-.PHONY: dist
-dist: RELEASE
-       r=`head -1 RELEASE`; cd ..; gtar czf $(NAME)-$$r.tar.gz --exclude='*/CVS*' --exclude="*/depend.pkg" --exclude="*/depend" --exclude="*/doc/common.xml" --exclude="*/doc/config.xml" --exclude="*/doc/readme.dtd" --exclude="*/Mail" --exclude="*/mappings" $(NAME)
-
-.PHONY: tag-release
-tag-release: RELEASE
-       r=`head -1 RELEASE | sed -e s/\\\./-/g`; cd ..; cvs tag -F $(NAME)-$$r $(NAME)
-
-.PHONY: release
-release: distclean
-       test -f netmappings_iso.ml
-       test -f netmappings_other.ml
-       $(MAKE) tag-release
-       $(MAKE) dist
-
-.SUFFIXES: .cmo .cmi .cmx .ml .mli .mll
-
-.ml.cmx:
-       $(OCAMLOPT) -c -thread $<
-
-.ml.cmo:
-       $(OCAMLC) -c -thread $<
-
-.mli.cmi:
-       $(OCAMLC) -c $<
-
-.mll.ml:
-       $(OCAMLLEX) $<
-
-include depend
-include depend.pkg
diff --git a/helm/DEVEL/pxp/netstring/RELEASE b/helm/DEVEL/pxp/netstring/RELEASE
deleted file mode 100644 (file)
index 965065d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-0.9.3
diff --git a/helm/DEVEL/pxp/netstring/base64.ml b/helm/DEVEL/pxp/netstring/base64.ml
deleted file mode 100644 (file)
index 285626f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-let encode s = Netencoding.Base64.encode s;;
-let url_encode s = Netencoding.Base64.url_encode s;;
-let decode s = Netencoding.Base64.decode s;;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/06/25 22:34:43  gerd
- *     Added labels to arguments.
- *
- * Revision 1.1  2000/03/02 01:15:20  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/base64.mli b/helm/DEVEL/pxp/netstring/base64.mli
deleted file mode 100644 (file)
index 5dd60ea..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(**********************************************************************)
-(* Base64 compatibility module                                        *)
-(**********************************************************************)
-
-(* PLEASE DO NOT USE THIS MODULE IN NEW SOFTWARE!
- * The module Netencoding.Base64 is the preferred API. This module is
- * only for compatibility with older software.
- *)
-
-(* This interface is compatible with all previously released Base64
- * modules (0.1 and 0.2).
- *)
-
-val encode : string -> string
-
-val url_encode : string -> string
-
-val decode : string -> string
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/03/02 01:15:20  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/cgi.ml b/helm/DEVEL/pxp/netstring/cgi.ml
deleted file mode 100644 (file)
index 48412be..0000000
+++ /dev/null
@@ -1,645 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-exception Resources_exceeded
-
-type argument_processing = Memory | File | Automatic;;
-
-type argument =
-    { mutable arg_name : string;
-      mutable arg_processing : argument_processing;
-      mutable arg_buf_value : Buffer.t;
-      mutable arg_mem_value : string option;
-              (* Here, the value is stored if it must be kept in memory *)
-      mutable arg_disk_value : string Weak.t;
-              (* This component is used iff arg_mem_value = None. The
-              * weak array has a length of 1, and the single element stores
-              * the value (if any).
-              *)
-      mutable arg_file : string option;
-              (* The filename of the temporary file storing the value *)
-      mutable arg_fd : out_channel option;
-              (* The file descriptor of the temp file (if open) *)
-      mutable arg_mimetype : string;
-      mutable arg_filename : string option;
-      mutable arg_header : (string * string) list;
-              (* For the last three components, see the description of the
-              * corresponding functions in the mli file.
-              *)
-    }
-;;
-
-type workaround =
-    Work_around_MSIE_Content_type_bug
-  | Work_around_backslash_bug
-;;
-
-type config =
-    { maximum_content_length : int;
-      how_to_process_arguments : argument -> argument_processing;
-      tmp_directory : string;
-      tmp_prefix : string;
-      workarounds : workaround list;
-    }
-;;
-
-
-let print_argument arg =
-  Format.printf
-    "<CGIARG name=%s filename=%s mimetype=%s store=%s>"
-    arg.arg_name
-    (match arg.arg_filename with None -> "*" | Some n -> n)
-    arg.arg_mimetype
-    (match arg.arg_file with None -> "Memory" | Some n -> n)
-;;
-
-
-let encode = Netencoding.Url.encode ;;
-let decode = Netencoding.Url.decode ;;
-
-
-
-let url_split_re =
-  Str.regexp "[&=]";;
-
-
-let mk_url_encoded_parameters nv_pairs =
-  String.concat "&"
-    (List.map
-       (fun (name,value) ->
-         let name_encoded = Netencoding.Url.encode name in
-         let value_encoded = Netencoding.Url.encode value in
-         name_encoded ^ "=" ^ value_encoded
-       )
-       nv_pairs
-    )
-;;
-
-
-let dest_url_encoded_parameters parstr =
-
-  let rec parse_after_amp tl =
-    match tl with
-       Str.Text name :: Str.Delim "=" :: Str.Text value :: tl' ->
-         (Netencoding.Url.decode name,
-          Netencoding.Url.decode value) :: parse_next tl'
-      | Str.Text name :: Str.Delim "=" :: Str.Delim "&" :: tl' ->
-         (Netencoding.Url.decode name, "") :: parse_after_amp tl'
-      | Str.Text name :: Str.Delim "=" :: [] ->
-         [Netencoding.Url.decode name, ""]
-      | _ ->
-         failwith "Cgi.dest_url_encoded_parameters"
-  and parse_next tl =
-    match tl with
-       [] -> []
-      | Str.Delim "&" :: tl' ->
-         parse_after_amp tl'
-      | _ ->
-         failwith "Cgi.dest_url_encoded_parameters"
-  in
-  let toklist = Str.full_split url_split_re parstr in
-  match toklist with
-      [] -> []
-    | _ -> parse_after_amp toklist
-;;
-
-
-let mk_form_encoded_parameters ntv_triples =
-  failwith "Cgi.mk_form_encoded_parameters: not implemented";;
-
-
-let dest_parameter_header header options =
-  let get_name s =
-    (* s is: form-data; ... name="fieldname" ...
-     * Extract "fieldname"
-     *)
-    try
-      let tok, params = Mimestring.scan_value_with_parameters s options in
-      List.assoc "name" params
-    with
-       Not_found ->
-         failwith "Cgi.dest_form_encoded_parameters"
-      | Failure "Mimestring.scan_value_with_parameters" ->
-         failwith "Cgi.dest_form_encoded_parameters"
-  in
-
-  let get_filename s =
-    (* s is: form-data; ... filename="fieldname" ...
-     * Extract "fieldname"
-     *)
-    try
-      let tok, params = Mimestring.scan_value_with_parameters s options in
-      Some(List.assoc "filename" params)
-    with
-       Not_found ->
-         None
-      | Failure "Mimestring.scan_value_with_parameters" ->
-         failwith "Cgi.dest_form_encoded_parameters"
-  in
-
-  let mime_type =
-    try List.assoc "content-type" header
-    with Not_found -> "text/plain" in     (* the default *)
-
-  let content_disposition =
-    try List.assoc "content-disposition" header
-    with
-       Not_found ->
-         failwith "Cgi.dest_form_encoded_parameters: no content-disposition"
-  in
-
-  let name = get_name content_disposition in
-  let filename = get_filename content_disposition in
-
-  name, mime_type, filename
-;;
-
-
-let dest_form_encoded_parameters parstr ~boundary config =
-  let options =
-    if List.mem Work_around_backslash_bug config.workarounds then
-      [ Mimestring.No_backslash_escaping ]
-    else
-      []
-  in
-  let parts =
-    Mimestring.scan_multipart_body_and_decode
-      parstr 0 (String.length parstr) boundary in
-  List.map
-    (fun (params, value) ->
-
-      let name, mime_type, filename = dest_parameter_header params options in
-      { arg_name = name;
-       arg_processing = Memory;
-       arg_buf_value = Buffer.create 1;
-       arg_mem_value = Some value;
-       arg_disk_value = Weak.create 1;
-       arg_file = None;
-       arg_fd = None;
-       arg_mimetype = mime_type;
-       arg_filename = filename;
-       arg_header = params;
-      }
-
-    )
-    parts
-;;
-
-
-let make_temporary_file config =
-  (* Returns (filename, out_channel). *)
-  let rec try_creation n =
-    try
-      let fn =
-       Filename.concat
-         config.tmp_directory
-         (config.tmp_prefix ^ "-" ^ (string_of_int n))
-      in
-      let fd =
-       open_out_gen
-         [ Open_wronly; Open_creat; Open_excl; Open_binary ]
-         0o666
-         fn
-      in
-      fn, fd
-    with
-       Sys_error m ->
-         (* This does not look very intelligent, but it is the only chance
-          * to limit the number of trials.
-          *)
-         if n > 1000 then
-           failwith ("Cgi: Cannot create temporary file: " ^ m);
-         try_creation (n+1)
-  in
-  try_creation 0
-;;
-
-
-let dest_form_encoded_parameters_from_netstream s ~boundary config =
-  let parts = ref [] in
-  let options =
-    if List.mem Work_around_backslash_bug config.workarounds then
-      [ Mimestring.No_backslash_escaping ]
-    else
-      []
-  in
-
-  let create header =
-    (* CALLBACK for scan_multipart_body_from_netstream *)
-    let name, mime_type, filename = dest_parameter_header header options in
-    let p0 =
-      { arg_name = name;
-       arg_processing = Memory;
-       arg_buf_value = Buffer.create 80;
-       arg_mem_value = None;
-       arg_disk_value = Weak.create 1;
-       arg_file = None;
-       arg_fd = None;
-       arg_mimetype = mime_type;
-       arg_filename = filename;
-       arg_header = header;
-      }
-    in
-    let pr = config.how_to_process_arguments p0 in
-    let p = { p0 with arg_processing = pr } in
-    if pr = File then begin
-      let fn, fd = make_temporary_file config in
-      p.arg_file <- Some fn;
-      p.arg_fd   <- Some fd;
-      p.arg_mem_value <- None;
-    end;
-    p
-  in
-
-  let add p s k n =
-    (* CALLBACK for scan_multipart_body_from_netstream *)
-    if (p.arg_processing = Automatic) &&
-       (Buffer.length (p.arg_buf_value) >= Netstream.block_size s) then begin
-        (* This is a LARGE argument *)
-        p.arg_processing <- File;
-        let fn, fd = make_temporary_file config in
-        p.arg_file <- Some fn;
-        p.arg_fd   <- Some fd;
-        p.arg_mem_value <- None;
-        output_string fd (Buffer.contents p.arg_buf_value);
-        p.arg_buf_value <- Buffer.create 1;
-       end;
-
-    match p.arg_processing with
-       (Memory|Automatic) ->
-         Buffer.add_substring
-           p.arg_buf_value
-           (Netbuffer.unsafe_buffer (Netstream.window s))
-           k
-           n
-      | File ->
-         let fd = match p.arg_fd with Some fd -> fd | None -> assert false in
-         output
-           fd
-           (Netbuffer.unsafe_buffer (Netstream.window s))
-           k
-           n;
-  in
-
-  let stop p =
-    (* CALLBACK for scan_multipart_body_from_netstream *)
-    begin match p.arg_processing with
-       (Memory|Automatic) ->
-         p.arg_mem_value <- Some (Buffer.contents p.arg_buf_value);
-         p.arg_buf_value <- Buffer.create 1;
-      | File ->
-         let fd = match p.arg_fd with Some fd -> fd | None -> assert false in
-         close_out fd;
-         p.arg_mem_value <- None
-    end;
-    parts := p :: !parts
-  in
-
-  Mimestring.scan_multipart_body_from_netstream
-    s
-    boundary
-    create
-    add
-    stop;
-
-  List.rev !parts
-;;
-
-
-let getenv name =
-  try Sys.getenv name with Not_found -> "";;
-
-(* getenv:
- * We use this getenv instead of Sys.getenv. The CGI specification does not
- * say anything about what should happen if a certain environment variable
- * is not set.
- * Some servers initialize the environment variable to the empty string if
- * it is not applicable, some servers do not set the variable at all. Because
- * of this, unset variables are always reported as empty variables.
- *
- * This is especially a problem with QUERY_STRING.
- *)
-
-let mk_simple_arg ~name v =
-  { arg_name = name;
-    arg_processing = Memory;
-    arg_buf_value = Buffer.create 1;
-    arg_mem_value = Some v;
-    arg_disk_value = Weak.create 0;
-    arg_file = None;
-    arg_fd = None;
-    arg_mimetype = "text/plain";
-    arg_filename = None;
-    arg_header = [];
-  }
-;;
-
-let mk_memory_arg ~name ?(mime = "text/plain") ?filename ?(header = []) v =
-  { arg_name = name;
-    arg_processing = Memory;
-    arg_buf_value = Buffer.create 1;
-    arg_mem_value = Some v;
-    arg_disk_value = Weak.create 0;
-    arg_file = None;
-    arg_fd = None;
-    arg_mimetype = mime;
-    arg_filename = filename;
-    arg_header = header;
-  }
-;;
-
-let mk_file_arg 
-  ~name ?(mime = "text/plain") ?filename ?(header = []) v_filename =
-  let v_abs_filename =
-    if Filename.is_relative v_filename then
-      Filename.concat (Sys.getcwd()) v_filename
-    else
-      v_filename
-  in
-  { arg_name = name;
-    arg_processing = File;
-    arg_buf_value = Buffer.create 1;
-    arg_mem_value = None;
-    arg_disk_value = Weak.create 0;
-    arg_file = Some v_abs_filename;
-    arg_fd = None;
-    arg_mimetype = mime;
-    arg_filename = filename;
-    arg_header = header;
-  }
-;;
-
-
-let get_content_type config =
-  (* Get the environment variable CONTENT_TYPE; if necessary apply
-   * workarounds for browser bugs.
-   *)
-  let content_type = getenv "CONTENT_TYPE" in
-  let user_agent = getenv "HTTP_USER_AGENT" in
-  let eff_content_type =
-    if Str.string_match (Str.regexp ".*MSIE") user_agent 0 &&
-       List.mem Work_around_MSIE_Content_type_bug config.workarounds
-    then begin
-      (* Microsoft Internet Explorer: When used with SSL connections,
-       * this browser sometimes produces CONTENT_TYPEs like
-       * "multipart/form-data; boundary=..., multipart/form-data; boundary=..."
-       * Workaround: Throw away everything after ", ".
-       *)
-      if Str.string_match (Str.regexp "\\([^,]*boundary[^,]*\\), .*boundary")
-                         content_type 0
-      then
-       Str.matched_group 1 content_type
-      else
-       content_type
-    end
-    else
-      content_type
-  in
-  eff_content_type
-;;
-
-
-let really_parse_args config =
-  let make_simple_arg (n,v) = mk_simple_arg n v in
-
-  match getenv "REQUEST_METHOD" with
-      ("GET"|"HEAD") ->
-       List.map
-         make_simple_arg
-         (dest_url_encoded_parameters(getenv "QUERY_STRING"))
-
-    | "POST" ->
-       let n =
-         try
-           int_of_string (getenv "CONTENT_LENGTH")
-         with
-             _ -> failwith "Cgi.parse_arguments"
-       in
-       if n > config.maximum_content_length then
-         raise Resources_exceeded;
-       begin
-         let mime_type, params =
-           Mimestring.scan_mime_type(get_content_type config) [] in
-         match mime_type with
-             "application/x-www-form-urlencoded" ->
-               let buf = String.create n in
-               really_input stdin buf 0 n;
-               List.map
-                 make_simple_arg
-                 (dest_url_encoded_parameters buf)
-           | "multipart/form-data" ->
-               let boundary =
-                 try
-                   List.assoc "boundary" params
-                 with
-                     Not_found ->
-                       failwith "Cgi.parse_arguments"
-               in
-               (* -------------------------------------------------- DEBUG
-                  let f = open_out "/tmp/cgiout" in
-                  output_string f buf;
-                  close_out f;
-                * --------------------------------------------------
-                *)
-               dest_form_encoded_parameters_from_netstream
-                 (Netstream.create_from_channel stdin (Some n) 4096)
-                 boundary
-                 config
-           | _ ->
-               failwith ("Cgi.parse_arguments: unknown content-type " ^ mime_type)
-       end
-    | _ ->
-       failwith "Cgi.parse_arguments: unknown method"
-
-let parsed = ref None;;    (* protected by lock/unlock *)
-
-let lock   = ref (fun () -> ());;
-let unlock = ref (fun () -> ());;
-
-let init_mt new_lock new_unlock =
-  lock   := new_lock;
-  unlock := new_unlock
-;;
-
-let protect f =
-  !lock();
-  try
-    let r = f() in
-    !unlock();
-    r
-  with
-      x ->
-        !unlock();
-        raise x
-;;
-
-let parse_arguments config =
-  protect
-    (fun () ->
-       match !parsed with
-          Some _ -> ()
-        | None ->
-            parsed := Some (List.map
-                              (fun arg -> arg.arg_name, arg)
-                              (really_parse_args config))
-    )
-;;
-
-let arguments () =
-  protect
-    (fun () ->
-       match !parsed with
-          Some plist -> plist
-        | None ->
-            failwith "Cgi.arguments"
-    )
-;;
-
-let set_arguments arglist =
-  protect 
-    (fun () ->
-       parsed := Some (List.map
-                        (fun arg -> arg.arg_name, arg)
-                        arglist)
-    )
-;;
-
-let default_config =
-  { maximum_content_length = max_int;
-    how_to_process_arguments = (fun _ -> Memory);
-    tmp_directory = "/var/tmp";
-    tmp_prefix = "cgi-";
-    workarounds = [ Work_around_MSIE_Content_type_bug;
-                   Work_around_backslash_bug;
-                 ]
-  }
-;;
-
-let arg_value arg =
-  match arg.arg_mem_value with
-      None ->
-       begin
-         match Weak.get arg.arg_disk_value 0 with
-             None ->
-               begin
-                 match arg.arg_file with
-                     None ->
-                       failwith "Cgi.arg_value: no value present"
-                   | Some filename ->
-                       let fd = open_in_bin filename in
-                       try
-                         let len = in_channel_length fd in
-                         let s = String.create len in
-                         really_input fd s 0 len;
-                         Weak.set arg.arg_disk_value 0 (Some s);
-                         close_in fd;
-                         s
-                       with
-                           any -> close_in fd; raise any
-               end
-           | Some v -> v
-       end
-    | Some s ->
-       s
-;;
-
-let arg_name     arg = arg.arg_name;;
-let arg_file     arg = arg.arg_file;;
-let arg_mimetype arg = arg.arg_mimetype;;
-let arg_filename arg = arg.arg_filename;;
-let arg_header   arg = arg.arg_header;;
-
-let cleanup () =
-  protect
-    (fun () ->
-       match !parsed with
-          None -> ()
-        | Some plist ->
-            List.iter
-              (fun (name, arg) ->
-                 match arg.arg_file with
-                     None -> ()
-                   | Some filename ->
-                       (* We do not complain if the file does not exist anymore. *)
-                       if Sys.file_exists filename then
-                         Sys.remove filename;
-                       arg.arg_file <- None
-              )
-              plist
-    )
-;;
-
-let argument name = List.assoc name (arguments());;
-let argument_value name = arg_value (argument name);;
-
-module Operators = struct
-  let ( !% ) = argument
-  let ( !$ ) = argument_value
-end;;
-
-
-let parse_args() =
-  parse_arguments default_config;
-  List.map
-    (fun (name, arg) -> name, arg_value arg)
-    (arguments())
-;;
-
-let parse_args_with_mimetypes() =
-  parse_arguments default_config;
-  List.map
-    (fun (name, arg) -> name, arg_mimetype arg, arg_value arg)
-    (arguments())
-;;
-
-let header s =
-  let t =
-    match s with
-       "" -> "text/html"
-      | _  -> s
-  in
-  print_string ("Content-type: " ^ t ^ "\n\n");
-  flush stdout
-;;
-
-
-let this_url() =
-  "http://" ^ (getenv "SERVER_NAME") ^ (getenv "SCRIPT_NAME")
-;;
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.8  2000/06/25 22:34:43  gerd
- *     Added labels to arguments.
- *
- * Revision 1.7  2000/06/25 21:40:36  gerd
- *     Added printer.
- *
- * Revision 1.6  2000/06/25 21:15:48  gerd
- *     Checked thread-safety.
- *
- * Revision 1.5  2000/05/16 22:29:36  gerd
- *     Added support for two common file upload bugs.
- *
- * Revision 1.4  2000/04/15 16:47:27  gerd
- *     Last minor changes before releasing 0.6.
- *
- * Revision 1.3  2000/04/15 13:09:01  gerd
- *     Implemented uploads to temporary files.
- *
- * Revision 1.2  2000/03/02 01:15:30  gerd
- *     Updated.
- *
- * Revision 1.1  2000/02/25 15:21:12  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/netstring/cgi.mli b/helm/DEVEL/pxp/netstring/cgi.mli
deleted file mode 100644 (file)
index 8aea499..0000000
+++ /dev/null
@@ -1,419 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* FOR SIMPLE CGI PROGRAMS:
- *
- * If you do not need all the features of the API below, the following may
- * be enough:
- *
- * - At the beginning of the main program, call 'parse_argument' with
- *   either 'default_config' as argument or with a customized configuration.
- * - Use 'argument_value(name)' to get the string value of the CGI parameter
- *   'name'. If you like, you can also open the Cgi.Operators module and
- *   write '!$ name' instead. Here, !$ is a prefix operator equivalent to
- *   argument_value.
- *
- * If you do not change the default configuration, you do not need to
- * worry about temporary files - there are not any.
- *
- * Most of the other functions defined below deal with file uploads, and
- * are only useful for that.
- *)
-
-
-(**********************************************************************)
-(* CGI functions                                                      *)
-(**********************************************************************)
-
-(* First, the general interface to the CGI argument parser. *)
-
-exception Resources_exceeded
-
-type argument
-
-type argument_processing =
-    Memory        (* Keep the value of the argument in memory *)
-  | File          (* Store the value of the argument into a temporary file *)
-  | Automatic     (* Store only large arguments into files. An argument
-                  * value is large if it is longer than about one block (4K).
-                  * This is not an exact definition.
-                  *)
-
-type workaround =
-    Work_around_MSIE_Content_type_bug
-      (* There is a bug in MSIE I observed together with SSL connections.
-       * The CONTENT_TYPE passed to the server has sometimes the wrong
-       * format. This option enables a workaround if the user agent string
-       * contains the word "MSIE".
-       *)
-  | Work_around_backslash_bug
-      (* There is a bug in many browsers: The backslash character is not
-       * handled as an escaping character in MIME headers. Because DOS-
-       * based systems use the backslash regularly in filenames, this bug
-       * matters.
-       * This option changes the interpretation of backslashes such that
-       * these are handled as normal characters. I do not know any browser
-       * that is not affected by this bug, so there is no check on
-       * the user agent string.
-       *)
-
-
-type config =
-    { maximum_content_length : int;
-          (* The maximum CONTENT_LENGTH. Bigger requests trigger an
-          * Resources_exceeded exception. This feature can be used
-          * to detect primitive denial-of-service attacks.
-          *)
-      how_to_process_arguments : argument -> argument_processing;
-          (* After the beginning of an argument has been decoded, the
-          * type of processing is decided by invoking this function on
-          * the argument. Note that the passed argument is incomplete -
-          * it does not have a value. You can assume that name, filename,
-          * MIME type and the whole header are already known.
-          * - THIS CONFIGURATION PARAMETER ONLY AFFECTS ARGUMENTS
-          * "POST"ED FROM THE CLIENT IN FORM-ENCODED REPRESENTATION.
-          * All other transport methods can only handle the Memory
-          * processing type.
-          *)
-      tmp_directory : string;
-          (* The temporary directory to use for the temporary files. *)
-      tmp_prefix : string;
-         (* A prefix for temporary files. It is recommended that the prefix
-          * contains a part that is random or that depends on rapidly changing
-          * environment properties. For example, the process ID is a good
-          * candidate, or the current system time. It is not required that
-          * the prefix is unique; there is a fail-safe algorithm that
-          * computes a unique file name from the prefix, even if several
-          * CGI programs run concurrently.
-          *)
-      workarounds : workaround list;
-          (* Specifies which workarounds should be enabled. *)
-    }
-
-val parse_arguments : config -> unit
-val arguments : unit -> (string * argument) list
-    (* - let () = parse_arguments config:
-     * Decodes the CGI arguments. 'config' specifies limits and processing
-     * hints; you can simply pass default_config (see below).
-     *
-     * - let arglist = get_arguments():
-     * The function returns a list with (name, arg) pairs. The name is
-     * passed back as string while the value is returned as opaque type
-     * 'argument'. Below accessor functions are defined. These functions
-     * require that parse_arguments was invoked before.
-     *
-     * Note 1: You can invoke 'parse_arguments' several times, but only
-     * the first time the arguments are read in. If you call the function
-     * again, it does nothing (even if the config changes). This is also
-     * true if 'parse_arguments' has been invoked after 'set_arguments'.
-     *
-     * Note 2: It is not guaranteed that stdin has been read until EOF.
-     * Only CONTENT_LENGTH bytes are read from stdin (following the CGI spec).
-     *
-     * Note 3: If arguments are processed in File or Automatic mode, the
-     * caller of 'parse_arguments' is responsible for deleting the files
-     * after use. You may consider to apply the at_exit function of the
-     * core library for this purpose. See also 'cleanup' below.
-     *)
-
-val set_arguments : argument list -> unit
-    (* Alternatively, you can set the arguments to use. This overrides any
-     * previously parsed set of arguments, and also any following parsing.
-     * - Intended for debugging, and to make it possible to replace the
-     * CGI parser by a different one while retaining this API.
-     *)
-
-val default_config : config
-    (* maximum_content_length = maxint
-     * how_to_process_arguments = "use always Memory"
-     * tmp_directory = "/var/tmp"
-     * tmp_prefix = "cgi"
-     * workarounds = [ Work_around_MSIE_content_type_bug;
-     *                 Work_around_backslash_bug;
-     *               ]
-     *
-     * Note 1: On some Unixes, a special file system is used for /tmp that
-     * stores the files into the virtual memory (main memory or swap area).
-     * Because of this, /var/tmp is preferred as default.
-     *
-     * Note 2: Filename.temp_file is not used because it depends on
-     * environment variables which are usually not set in a CGI environment.
-     *)
-
-val arg_name     : argument -> string
-val arg_value    : argument -> string
-val arg_file     : argument -> string option
-val arg_mimetype : argument -> string
-val arg_filename : argument -> string option
-val arg_header   : argument -> (string * string) list
-    (* The accessor functions that return several aspects of arguments.
-     * arg_name: returns the name of the argument
-     * arg_value: returns the value of the argument. If the value is stored
-     *     in a temporary file, the contents of this file are returned, i.e.
-     *     the file is loaded. This may have some consequences:
-     *     (1) The function may fail because of I/O errors.
-     *     (2) The function may be very slow, especially if the file is
-     *         non-local.
-     *     (3) If the value is bigger than Sys.max_string_length, the function
-     *         raises the exception Resources_exceeded. On 32 bit architectures,
-     *         strings are limited to 16 MB.
-     *     Note that loaded values are put into weak arrays. This makes it
-     *     possible that subsequent calls of 'arg_value' on the same argument
-     *     can avoid loading the value again, and that unused values will
-     *     nevertheless be collected by the GC.
-     * arg_file: returns 'Some filename' if the value resides in a temporary
-     *     file, and 'filename' is the absolute path of this file. If the
-     *     value is only available in memory, None is returned.
-     * arg_mimetype: returns the MIME type of the argument. Note that the
-     *     default MIME type is "text/plain", and that the default is returned
-     *     if the MIME type is not available.
-     * arg_filename: returns 'Some filename' if the argument is associated
-     *     with a certain filename (e.g. from a file upload); otherwise None
-     * arg_header: returns pairs (name,value) containing the complete header
-     *     of the argument. If the transmission protocol does not specify
-     *     a header, the empty list is passed back.
-     *)
-
-val mk_simple_arg : name:string -> string -> argument
-    (* mk_simple_arg name value:
-     * Creates a simple argument with only name, and a value passed by string.
-     * The MIME type is "text/plain".
-     *)
-
-val mk_memory_arg
-    : name:string -> ?mime:string -> ?filename:string -> 
-      ?header:((string * string) list) -> string -> argument
-    (* mk_memory_arg name mimetype filename header value:
-     * Creates an argument whose value is kept in memory.
-     *
-     * Note: The signature of this function changed in release 0.8.
-     *)
-
-val mk_file_arg
-    : name:string -> ?mime:string -> ?filename:string -> 
-      ?header:((string * string) list) -> string -> argument
-    (* mk_file_arg name mimetype filename header value_filename:
-     * Creates an argument whose value is stored in the file
-     * 'value_filename'. If this file name is not absolute, it is interpreted
-     * relative to the directory returned by Sys.getcwd() - this might not
-     * be what you want with respect to mount points and symlinks (and it
-     * depends on the operating system as getcwd is only POSIX.1). The
-     * file name is turned into an absolute name immediately, and the
-     * function arg_file returns the rewritten name.
-     *
-     * Note: The signature of this function changed in release 0.8.
-     *)
-
-
-val cleanup : unit -> unit
-    (* Removes all temporary files that occur in the current set of arguments
-     * (as returned by 'arguments()').
-     *)
-
-
-(* Convenience functions: *)
-
-val argument : string -> argument
-    (* let argument name = List.assoc name (arguments()) -- i.e. returns
-     * the argument with the passed name. Of course, this function expects
-     * that 'parse_arguments' was called before.
-     *)
-
-val argument_value : string -> string
-    (* let argument_value name = arg_value(argument name) -- i.e. returns
-     * the value of the argument.
-     * See also Operators.( !$ ) below.
-     *)
-
-(* For toploop printers: *)
-
-val print_argument : argument -> unit
-
-
-(* Now, the compatibility functions. *)
-
-val parse_args : unit -> (string * string) list
-    (* Decodes the arguments of the CGI and returns them as an association list
-     * Works whatever the method is (GET or POST)
-     *)
-
-val parse_args_with_mimetypes : unit -> (string * string * string) list
-    (* Like parse_args, but returns also the MIME type.
-     * The triples contain (name, mime_type, value).
-     * If an encoding was chosen that does not transfer the MIME type,
-     * "text/plain" is returned.
-     *
-     * THIS FUNCTION SHOULD BE CONSIDERED AS DEPRECATED.
-     * It was included in netstring-0.4, but most people want not only
-     * the MIME type. parse_arguments should be used instead.
-     *)
-
-val header : string -> unit
-    (* Prints the content-type header.
-     * the argument is the MIME type (default value is "text/html" if the
-     * argument is the empty string)
-     *)
-
-val this_url : unit -> string
-    (* Returns the address of the CGI *)
-
-(**********************************************************************)
-(* The Operators module                                               *)
-(**********************************************************************)
-
-(* If you open the Operators module, you can write
- *     !% "name"      instead of     argument "name", and
- *     !$ "name"      instead of     argument_value "name"
- *)
-
-module Operators : sig
-  val ( !% ) : string -> argument
-      (* same as 'argument' above *)
-  val ( !$ ) : string -> string
-      (* same as 'argument_value' above *)
-end
-
-(**********************************************************************)
-(* Low-level functions                                                *)
-(**********************************************************************)
-
-(* Encoding/Decoding within URLs:
- *
- * The following two functions perform the '%'-substitution for
- * characters that may otherwise be interpreted as metacharacters.
- *
- * See also the Netencoding module. This interface contains these functions
- * to keep the compatibility with the old Cgi module.
- *)
-
-val decode : string -> string
-val encode : string -> string
-
-(* URL-encoded parameters:
- *
- * The following two functions create and analyze URL-encoded parameters.
- * Format: name1=val1&name2=val2&...
- *)
-
-val mk_url_encoded_parameters : (string * string) list -> string
-    (* The argument is a list of (name,value) pairs. The result is the
-     * single URL-encoded parameter string.
-     *)
-
-val dest_url_encoded_parameters : string -> (string * string) list
-    (* The argument is the URL-encoded parameter string. The result is
-     * the corresponding list of (name,value) pairs.
-     * Note: Whitespace within the parameter string is ignored.
-     * If there is a format error, the function fails.
-     *)
-
-(* Form-encoded parameters:
- *
- * According to: RFCs 2388, 2183, 2045, 2046
- *
- * General note: This is a simple API to encode/decode form-encoded parameters.
- * Especially, it is not possible to pass the header of the parts through
- * this API.
- *)
-
-val mk_form_encoded_parameters : (string * string * string) list ->
-                                     (string * string)
-    (* The argument is a list of (name,mimetype,value) triples.
-     * The result is (parstr, boundary), where 'parstr' is the
-     * single form-encoded parameter string, and 'boundary' is the
-     * boundary to separate the message parts.
-     *
-     * THIS FUNCTION IS CURRENTLY NOT IMPLEMENTED!
-     *)
-
-val  dest_form_encoded_parameters : string -> boundary:string -> config ->
-                                       argument list
-    (* The first argument is the form-encoded parameter string.
-     * The second argument is the boundary (extracted from the mime type).
-     * Third argument: Only the workarounds component is used.
-     * The result is
-     * the corresponding list of arguments (all in memory).
-     * If there is a format error, the function fails.
-     * Note: embedded multipart/mixed types are returned as they are,
-     *   and are not recursively decoded.
-     * Note: The content-transfer-encodings "7bit", "8bit", "binary",
-     *   "base64", and "quoted-printable" are supported.
-     * Note: Parameter names which include spaces or non-alphanumeric
-     *   characters may be problematic (the rules of RFC 2047 are NOT applied).
-     * Note: The returned MIME type is not normalized.
-     *)
-
-val dest_form_encoded_parameters_from_netstream
-    : Netstream.t -> boundary:string -> config -> argument list
-    (* let arglist = dest_form_encoded_parameters_from_netstream s b c:
-     * Reads the form-encoded parameters from netstream s. The boundary
-     * is passed in b, and the configuration in c.
-     * A list of arguments is returned.
-     *
-     * See also dest_form_encoded_parameters.
-     *
-     * Restriction: In contrast to dest_form_encoded_parameters, this
-     * function is not able to handle the content-transfer-encodings
-     * "base64" and "quoted-printable". (This is not really a restriction
-     * because no browser uses these encodings in conjunction with HTTP.
-     * This is different if mail transport is chosen. - The reason for
-     * this restriction is that there are currently no stream functions
-     * for decoding.)
-     *)
-
-(* Private functions: *)
-
-val init_mt : (unit -> unit) -> (unit -> unit) -> unit
-
-
-(**********************************************************************)
-(* Compatibility with CGI library by J.-C. Filliatre                  *)
-(**********************************************************************)
-
-(* The following functions are compatible with J.-C. Filliatre's CGI
- * library:
- *
- * parse_args, header, this_url, decode, encode.
- *
- * Note that the new implementation of parse_args can be safely invoked
- * several times.
- *
- * Since release 0.8, Netstring's CGI implementation is again thread-safe.
- *)
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.8  2000/06/25 22:34:43  gerd
- *     Added labels to arguments.
- *
- * Revision 1.7  2000/06/25 21:40:36  gerd
- *     Added printer.
- *
- * Revision 1.6  2000/06/25 21:15:48  gerd
- *     Checked thread-safety.
- *
- * Revision 1.5  2000/05/16 22:28:13  gerd
- *     New "workarounds" config component.
- *
- * Revision 1.4  2000/04/15 16:47:27  gerd
- *     Last minor changes before releasing 0.6.
- *
- * Revision 1.3  2000/04/15 13:09:01  gerd
- *     Implemented uploads to temporary files.
- *
- * Revision 1.2  2000/03/02 01:15:30  gerd
- *     Updated.
- *
- * Revision 1.1  2000/02/25 15:21:12  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/netstring/compat-base64/META b/helm/DEVEL/pxp/netstring/compat-base64/META
deleted file mode 100644 (file)
index a5c003e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-version = "0.5"
-requires = "netstring"
-description = "Compatibility with base64"
diff --git a/helm/DEVEL/pxp/netstring/compat-cgi/META b/helm/DEVEL/pxp/netstring/compat-cgi/META
deleted file mode 100644 (file)
index 2294921..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-version = "0.5"
-requires = "netstring"
-description = "Compatibility with cgi"
diff --git a/helm/DEVEL/pxp/netstring/depend b/helm/DEVEL/pxp/netstring/depend
deleted file mode 100644 (file)
index 5991264..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-base64.cmo: netencoding.cmi base64.cmi 
-base64.cmx: netencoding.cmx base64.cmi 
-cgi.cmo: mimestring.cmi netbuffer.cmi netencoding.cmi netstream.cmi cgi.cmi 
-cgi.cmx: mimestring.cmx netbuffer.cmx netencoding.cmx netstream.cmx cgi.cmi 
-mimestring.cmo: netbuffer.cmi netencoding.cmi netstream.cmi netstring_str.cmi \
-    mimestring.cmi 
-mimestring.cmx: netbuffer.cmx netencoding.cmx netstream.cmx netstring_str.cmx \
-    mimestring.cmi 
-netbuffer.cmo: netbuffer.cmi 
-netbuffer.cmx: netbuffer.cmi 
-netconversion.cmo: netmappings.cmi netconversion.cmi 
-netconversion.cmx: netmappings.cmx netconversion.cmi 
-netencoding.cmo: netstring_str.cmi netencoding.cmi 
-netencoding.cmx: netstring_str.cmx netencoding.cmi 
-nethtml.cmo: nethtml.cmi 
-nethtml.cmx: nethtml.cmi 
-netmappings.cmo: netmappings.cmi 
-netmappings.cmx: netmappings.cmi 
-netmappings_iso.cmo: netmappings.cmi 
-netmappings_iso.cmx: netmappings.cmx 
-netmappings_other.cmo: netmappings.cmi 
-netmappings_other.cmx: netmappings.cmx 
-netstream.cmo: netbuffer.cmi netstream.cmi 
-netstream.cmx: netbuffer.cmx netstream.cmi 
-netstring_mt.cmo: cgi.cmi netmappings.cmi netstring_str.cmi netstring_mt.cmi 
-netstring_mt.cmx: cgi.cmx netmappings.cmx netstring_str.cmx netstring_mt.cmi 
-netstring_str.cmo: netstring_str.cmi 
-netstring_str.cmx: netstring_str.cmi 
-netstring_top.cmo: netstring_top.cmi 
-netstring_top.cmx: netstring_top.cmi 
-neturl.cmo: netencoding.cmi neturl.cmi 
-neturl.cmx: netencoding.cmx neturl.cmi 
-cgi.cmi: netstream.cmi 
-mimestring.cmi: netstream.cmi 
-netmappings.cmi: netconversion.cmi 
-netstream.cmi: netbuffer.cmi 
diff --git a/helm/DEVEL/pxp/netstring/depend.pkg b/helm/DEVEL/pxp/netstring/depend.pkg
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/pxp/netstring/doc/ABOUT-FINDLIB b/helm/DEVEL/pxp/netstring/doc/ABOUT-FINDLIB
deleted file mode 100644 (file)
index d942e27..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-******************************************************************************
-ABOUT-FINDLIB - Package manager for O'Caml
-******************************************************************************
-
-
-==============================================================================
-Abstract
-==============================================================================
-
-The findlib library provides a scheme to manage reusable software components 
-(packages), and includes tools that support this scheme. Packages are 
-collections of OCaml modules for which metainformation can be stored. The 
-packages are kept in the filesystem hierarchy, but with strict directory 
-structure. The library contains functions to look the directory up that stores 
-a package, to query metainformation about a package, and to retrieve dependency 
-information about multiple packages. There is also a tool that allows the user 
-to enter queries on the command-line. In order to simplify compilation and 
-linkage, there are new frontends of the various OCaml compilers that can 
-directly deal with packages. 
-
-Together with the packages metainformation is stored. This includes a version 
-string, the archives the package consists of, and additional linker options. 
-Packages can also be dependent on other packages. There is a query which finds 
-out all predecessors of a list of packages and sorts them topologically. The 
-new compiler frontends do this implicitly. 
-
-Metainformation can be conditional, i.e. depend on a set of predicates. This is 
-mainly used to be able to react on certain properties of the environment, such 
-as if the bytecode or the native compiler is invoked, if the application is 
-multi-threaded, and a few more. If the new compiler frontends are used, most 
-predicates are found out automatically. 
-
-There is special support for scripts. A new directive, "#require", loads 
-packages into scripts. Of course, this works only with newly created toploops 
-which include the findlib library. 
-
-==============================================================================
-Where to get findlib
-==============================================================================
-
-The manual of findlib is available online [1]. You can download findlib here 
-[2]. 
-
-
---------------------------
-
-[1]   see http://www.ocaml-programming.de/packages/documentation/findlib/
-
-[2]   see http://www.ocaml-programming.de/packages/findlib-0.3.1.tar.gz
-
-
-
diff --git a/helm/DEVEL/pxp/netstring/doc/ABOUT-FINDLIB.xml b/helm/DEVEL/pxp/netstring/doc/ABOUT-FINDLIB.xml
deleted file mode 100644 (file)
index d1dc5b0..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE readme SYSTEM "readme.dtd" [
-
-<!ENTITY % common SYSTEM "common.xml">
-%common;
-
-<!ENTITY f "<em>findlib</em>">
-<!ENTITY F "<em>Findlib</em>">
-
-]>
-
-<readme title="ABOUT-FINDLIB - Package manager for O'Caml">
-  <sect1>
-    <title>Abstract</title>
-<p>
-The &f; library provides a scheme to manage reusable software
-components (packages), and includes tools that support this
-scheme. Packages are collections of OCaml modules for which
-metainformation can be stored. The packages are kept in the filesystem
-hierarchy, but with strict directory structure. The library contains
-functions to look the directory up that stores a package, to query
-metainformation about a package, and to retrieve dependency
-information about multiple packages. There is also a tool that allows
-the user to enter queries on the command-line. In order to simplify
-compilation and linkage, there are new frontends of the various OCaml
-compilers that can directly deal with packages.
-</p>
-
-<p>
-Together with the packages metainformation is stored. This includes a
-version string, the archives the package consists of, and additional
-linker options. Packages can also be dependent on other
-packages. There is a query which finds out all predecessors of a list
-of packages and sorts them topologically. The new compiler frontends
-do this implicitly.
-</p>
-
-<p>
-Metainformation can be conditional, i.e. depend on a set of
-predicates. This is mainly used to be able to react on certain
-properties of the environment, such as if the bytecode or the native
-compiler is invoked, if the application is multi-threaded, and a few
-more. If the new compiler frontends are used, most predicates are
-found out automatically.
-</p>
-
-<p>
-There is special support for scripts. A new directive, "#require",
-loads packages into scripts. Of course, this works only with newly
-created toploops which include the &f; library.
-</p>
-
-  </sect1>
-
-  <sect1><title>Where to get findlib</title>
-    <p>
-The manual of &f; is available <a href="&url.findlib-project;">online</a>.
-You can download &f; <a href="&url.findlib-download;">here</a>.
-</p>
-  </sect1>
-</readme>
diff --git a/helm/DEVEL/pxp/netstring/doc/INSTALL b/helm/DEVEL/pxp/netstring/doc/INSTALL
deleted file mode 100644 (file)
index cca3994..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-******************************************************************************
-INSTALL - Netstring, string processing functions for the net
-******************************************************************************
-
-
-==============================================================================
-The "Netstring" package
-==============================================================================
-
-------------------------------------------------------------------------------
-Prerequisites
-------------------------------------------------------------------------------
-
-Netstring does not need any other packages besides the O'Caml core. Netstring 
-needs at least O'Caml 3.00. The installation procedure defined in the Makefile 
-requires findlib [1] to work [2]. 
-
-------------------------------------------------------------------------------
-Configuration
-------------------------------------------------------------------------------
-
-It is not necessary to configure "Netstring". 
-
-------------------------------------------------------------------------------
-Compilation
-------------------------------------------------------------------------------
-
-The Makefile defines the following goals: 
-
--  make all
-   compiles with the bytecode compiler and creates netstring.cma, 
-   netstring_mt.cmo, netstring_top.cmo, netmappings_iso.cmo, and 
-   netmappings_other.cmo
-   
--  make opt
-   compiles with the native compiler and creates netstring.cmxa, 
-   netstring_mt.cmx, netmappings_iso.cmx, and netmappings_other.cmx
-   
-The archive netstring.cmx?a contains the functionality, and the two 
-single-module files netmappings_iso.cm[ox] and netmappings_other.cm[ox] add 
-configurations to the character set conversion module. These configurations are 
-optional:
-
--  Netmappings_iso: Conversion tables for the character sets ISO-8859-2, -3, 
-   -4, -5, -6, -7, -8, -9, -10, 13, -14, and -15.
-   
--  Netmappings_other: Conversion tables for the character sets WINDOWS-1250, 
-   -1251, -1252, -1253, -1254, -1255, -1256, -1257, -1258; code pages 037, 424, 
-   437, 500, 737, 775, 850, 852, 855, 856, 857, 860, 861, 862, 863, 864, 865, 
-   866, 869, 874, 875, 1006, 1026; JIS-0201; KOI8R; Macintosh Roman encoding; 
-   Adobe Standard Encoding, Symbol Encoding, and Zapf Dingbats Encodings.
-   
-Even without these configuration files, the conversion module is able to handle 
-the encodings ISO-8859-1, US-ASCII, UTF-16, UTF-8, and the Java variant of 
-UTF-8.
-
-The module Netstring_mt must be linked into multi-threaded applications; 
-otherwise some mutexes remain uninitialized.
-
-The module Netstring_top loads several printers for abstract values (for 
-toploops).
-
-------------------------------------------------------------------------------
-Installation
-------------------------------------------------------------------------------
-
-The Makefile defines the following goals:
-
--  make install
-   installs the bytecode archive, the interface definitions, and if present, 
-   the native archive in the default location of findlib 
-   
--  make install-cgi
-   Installs a pseudo package "cgi" which is compatible with the old cgi 
-   package. This has the effect that software searching the "cgi" package will 
-   find the netstring package instead. This is recommended.
-   
--  make install-base64
-   Installs a pseudo package "base64" which is compatible with the old base64 
-   package. This has the effect that software searching the "base64" package 
-   will find the netstring package instead. This is recommended.
-   
--  make uninstall
-   removes the package
-   
--  make uninstall-cgi
-   removes the "cgi" compatibility package
-   
--  make uninstall-base64
-   removes the "base64" compatibility package
-   
-------------------------------------------------------------------------------
-Linking netstring with findlib
-------------------------------------------------------------------------------
-
-The command 
-
-ocamlfind ocamlc ... -package netstring ... -linkpkg ...
-
-links as much as possible code from netstring into your application: All 
-conversion tables; when -thread is specified, the initialization code for 
-multi-threaded programs; when a toploop is created, the code setting the value 
-printers.
-
-The following predicates reduce the amount of linked code:
-
--  netstring_only_iso: Only the conversion tables for the ISO-8859 series of 
-   character sets are linked.
-   
--  netstring_minimum: No additional conversion tables are linked; only 
-   ISO-8859-1 and the UTF encodings work.
-   
-For example, the command may look like 
-
-ocamlfind ocamlc ... 
-          -package netstring -predicates netstring_only_iso ... -linkpkg ...
-
-to link only the ISO-8859 conversion tables.
-
-
---------------------------
-
-[1]   see http://www.ocaml-programming.de/packages/documentation/findlib/
-
-[2]   Findlib is a package manager, see the file ABOUT-FINDLIB.
-
-
-
diff --git a/helm/DEVEL/pxp/netstring/doc/INSTALL.xml b/helm/DEVEL/pxp/netstring/doc/INSTALL.xml
deleted file mode 100644 (file)
index b5b53ed..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE readme SYSTEM "readme.dtd" [
-
-<!ENTITY % common SYSTEM "common.xml">
-%common;
-
-<!ENTITY m "<em>Netstring</em>">
-
-]>
-
-<readme title="INSTALL - Netstring, string processing functions for the net">
-  <sect1><title>The "Netstring" package</title>
-    <sect2><title>Prerequisites</title>
-      <p>
-&m; does not need any other packages besides the O'Caml core. &m; needs
-at least O'Caml 3.00. The installation procedure defined in the Makefile
-requires <a href="&url.findlib-project;">findlib</a> to
-work<footnote><em>Findlib</em> is a package manager, see the file
-ABOUT-FINDLIB.</footnote>.
-</p>
-    </sect2>
-
-    <sect2><title>Configuration</title>
-      <p>
-It is not necessary to configure "Netstring".
-</p>
-    </sect2>
-
-    <sect2><title>Compilation</title>
-      <p>
-The Makefile defines the following goals:
-</p>
-      <ul>
-       <li>
-         <p>make all</p> 
-         <p>compiles with the bytecode compiler and creates netstring.cma,
-netstring_mt.cmo, netstring_top.cmo, netmappings_iso.cmo, and
-netmappings_other.cmo</p>
-       </li>
-       <li>
-         <p>make opt</p>
-         <p>compiles with the native compiler and creates netstring.cmxa,
-netstring_mt.cmx, netmappings_iso.cmx, and netmappings_other.cmx</p>
-       </li>
-      </ul>
-
-      <p>The archive netstring.cmx?a contains the functionality, and the two
-single-module files netmappings_iso.cm[ox] and netmappings_other.cm[ox] add
-configurations to the character set conversion module. These configurations are
-optional:</p>
-
-      <ul>
-       <li><p>Netmappings_iso: Conversion tables for the character sets
-ISO-8859-2, -3, -4, -5, -6, -7, -8, -9, -10, 13, -14, and -15.</p>
-       </li>
-       <li><p>Netmappings_other: Conversion tables for the character sets
-WINDOWS-1250, -1251, -1252, -1253, -1254, -1255, -1256, -1257, -1258;
-code pages 037, 424, 437, 500, 737, 775, 850, 852, 855, 856, 857, 860, 861,
-862, 863, 864, 865, 866, 869, 874, 875, 1006, 1026; JIS-0201; KOI8R; Macintosh
-Roman encoding; Adobe Standard Encoding, Symbol Encoding, and Zapf Dingbats
-Encodings.</p>
-       </li>
-      </ul>
-
-<p>Even without these configuration files, the conversion module is able to
-handle the encodings ISO-8859-1, US-ASCII, UTF-16, UTF-8, and the Java variant
-of UTF-8.</p>
-
-<p>The module Netstring_mt must be linked into multi-threaded applications;
-otherwise some mutexes remain uninitialized.</p>
-
-<p>The module Netstring_top loads several printers for abstract values (for
-toploops).</p> 
-
-    </sect2>
-
-    <sect2><title>Installation</title>
-      <p>
-The Makefile defines the following goals:</p>
-      <ul>
-       <li>
-         <p>make install</p>
-         <p>installs the bytecode archive, the interface definitions, and if
-present, the native archive in the default location of <em>findlib</em>
-</p>
-       </li>
-
-       <li>
-         <p>make install-cgi</p>
-         <p>Installs a pseudo package "cgi" which is compatible with the old
-cgi package. This has the effect that software searching the "cgi" package will
-find the netstring package instead. This is recommended.</p>
-       </li>
-
-       <li>
-         <p>make install-base64</p> <p>Installs a pseudo package "base64"
-which is compatible with the old base64 package. This has the effect that
-software searching the "base64" package will find the netstring package
-instead. This is recommended.</p>
-       </li>
-
-       <li>
-         <p>make uninstall</p>
-         <p>removes the package</p>
-       </li>
-
-       <li>
-         <p>make uninstall-cgi</p>
-         <p>removes the "cgi" compatibility package</p>
-       </li>
-
-       <li>
-         <p>make uninstall-base64</p>
-         <p>removes the "base64" compatibility package</p>
-       </li>
-      </ul>
-    </sect2>
-
-
-    <sect2>
-      <title>Linking netstring with findlib</title>
-      <p>The command
-<code>
-ocamlfind ocamlc ... -package netstring ... -linkpkg ...
-</code>
-links as much as possible code from netstring into your application: All
-conversion tables; when -thread is specified, the initialization code for
-multi-threaded programs; when a toploop is created, the code setting the value
-printers.</p>
-
-<p>The following predicates reduce the amount of linked code:</p>
-
-      <ul>
-       <li><p>netstring_only_iso: Only the conversion tables for the ISO-8859
-series of character sets are linked.</p>
-       </li>
-       <li><p>netstring_minimum: No additional conversion tables are linked;
-only ISO-8859-1 and the UTF encodings work.</p>
-       </li>
-      </ul>
-
-<p>For example, the command may look like
-
-<code>
-ocamlfind ocamlc ... 
-          -package netstring -predicates netstring_only_iso ... -linkpkg ...
-</code>
-
-to link only the ISO-8859 conversion tables.</p>
-    </sect2>
-
-  </sect1>
-</readme>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/netstring/doc/Makefile b/helm/DEVEL/pxp/netstring/doc/Makefile
deleted file mode 100644 (file)
index 7f8450b..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-.PHONY: all
-all: README INSTALL ABOUT-FINDLIB
-
-README: README.xml common.xml config.xml
-       readme -text README.xml >README
-
-INSTALL: INSTALL.xml common.xml config.xml
-       readme -text INSTALL.xml >INSTALL
-
-ABOUT-FINDLIB: ABOUT-FINDLIB.xml common.xml config.xml
-       readme -text ABOUT-FINDLIB.xml >ABOUT-FINDLIB
-
-.PHONY: clean
-clean:
-
-.PHONY: CLEAN
-CLEAN: clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~
-
diff --git a/helm/DEVEL/pxp/netstring/doc/README b/helm/DEVEL/pxp/netstring/doc/README
deleted file mode 100644 (file)
index b590416..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-******************************************************************************
-README - Netstring, string processing functions for the net
-******************************************************************************
-
-
-==============================================================================
-Abstract
-==============================================================================
-
-Netstring is a collection of string processing functions that are useful in 
-conjunction with Internet messages and protocols. In particular, it contains 
-functions for the following purposes:
-
--  Parsing MIME messages
-   
--  Several encoding/decoding functions (Base 64, Quoted Printable, Q, 
-   URL-encoding)
-   
--  A new implementation of the CGI interface that allows users to upload files
-   
--  A simple HTML parser
-   
--  URL parsing, printing and processing
-   
--  Conversion between character sets
-   
-==============================================================================
-Download
-==============================================================================
-
-You can download Netstring as gzip'ed tarball [1]. 
-
-==============================================================================
-Documentation
-==============================================================================
-
-Sorry, there is no manual. The mli files describe each function in detail. 
-Furthermore, the following additional information may be useful.
-
-------------------------------------------------------------------------------
-New CGI implementation
-------------------------------------------------------------------------------
-
-For a long time, the CGI implementation by Jean-Christophe Filliatre has been 
-the only freely available module that implemented the CGI interface (it also 
-based on code by Daniel de Rauglaudre). It worked well, but it did not support 
-file uploads because this requires a parser for MIME messages.
-
-The main goal of Netstring is to realize such uploads, and because of this it 
-contains an almost complete parser for MIME messages.
-
-The new CGI implementation provides the same functions than the old one, and 
-some extensions. If you call Cgi.parse_args(), you get the CGI parameters as 
-before, but as already explained this works also if the parameters are 
-encaspulated as MIME message. In the HTML code, you can select the MIME format 
-by using 
-
-<form action="..." method="post" enctype="multipart/form-data">
-...
-</form>
-
-
-- this "enctype" attribute forces the browser to send the form parameters as 
-multipart MIME message (Note: You can neither send the parameters of a 
-conventional hyperlink as MIME message nor the form parameters if the "method" 
-is "get"). In many browsers only this particular encoding enables the file 
-upload elements, you cannot perform file uploads with other encodings. 
-
-As MIME messages can transport MIME types, filename, and other additional 
-properties, it is also possible to get these using the enhanced interface. 
-After calling 
-
-Cgi.parse_arguments config
-
-you can get all available information about a certain parameter by invoking 
-
-let param = Cgi.argument "name"
-
-- where "param" has the type "argument". There are several accessor functions 
-to extract the various aspects of arguments (name, filename, value by string, 
-value by temporary file, MIME type, MIME header) from "argument" values. 
-
-------------------------------------------------------------------------------
-Base64, and other encodings
-------------------------------------------------------------------------------
-
-Netstring is also the successor of the Base64 package. It provides a Base64 
-compatible interface, and an enhanced API. The latter is contained in the 
-Netencoding module which also offers implementations of the "quoted printable", 
-"Q", and "URL" encodings. Please see netencoding.mli for details.
-
-------------------------------------------------------------------------------
-The MIME scanner functions
-------------------------------------------------------------------------------
-
-In the Mimestring module you can find several functions scanning parts of MIME 
-messages. These functions already cover most aspects of MIME messages: Scanning 
-of headers, analysis of structured header entries, and scanning of multipart 
-bodies. Of course, a full-featured MIME scanner would require some more 
-functions, especially concrete parsers for frequent structures (mail addresses 
-or date strings). 
-
-Please see the file mimestring.mli for details.
-
-------------------------------------------------------------------------------
-The HTML parser
-------------------------------------------------------------------------------
-
-The HTML parser should be able to read every HTML file; whether it is correct 
-or not. The parser tries to recover from parsing errors as much as possible. 
-
-The parser returns the HTML term as conventional recursive value (i.e. no 
-object-oriented design).
-
-The parser depends a bit on knowledge about the HTML version; mainly because it 
-needs to know the tags that are always empty. It may be necessary that you must 
-adjust this configuration before the parser works well enough for your purpose. 
-
-Please see the Nethtml module for details.
-
-------------------------------------------------------------------------------
-The abstract data type URL
-------------------------------------------------------------------------------
-
-The module Neturl contains support for URL parsing and processing. The 
-implementation follows strictly the standards RFC 1738 and RFC 1808. URLs can 
-be parsed, and several accessor functions allow the user to get components of 
-parsed URLs, or to change components. Modifying URLs is safe; it is impossible 
-to create a URL that does not have a valid string representation.
-
-Both absolute and relative URLs are supported. It is possible to apply a 
-relative URL to a base URL in order to get the corresponding absolute URL.
-
-------------------------------------------------------------------------------
-Conversion between character sets and encodings
-------------------------------------------------------------------------------
-
-The module Netconversion converts strings from one characters set to another. 
-It is Unicode-based, and there are conversion tables for more than 50 
-encodings.
-
-==============================================================================
-Author, Copying
-==============================================================================
-
-Netstring has been written by Gerd Stolpmann [2]. You may copy it as you like, 
-you may use it even for commercial purposes as long as the license conditions 
-are respected, see the file LICENSE coming with the distribution. It allows 
-almost everything. 
-
-==============================================================================
-History
-==============================================================================
-
--  Changed in 0.9.3: Fixed a bug in the "install" rule of the Makefile.
-   
--  Changed in 0.9.2: New format for the conversion tables which are now much 
-   smaller.
-   
--  Changed in 0.9.1: Updated the Makefile such that (native-code) compilation 
-   of netmappings.ml becomes possible. 
-   
--  Changed in 0.9: Extended Mimestring module: It can now process RFC-2047 
-   messages.
-   New Netconversion module which converts strings between character encodings.
-   
--  Changed in 0.8.1: Added the component url_accepts_8bits to 
-   Neturl.url_syntax. This helps processing URLs which intentionally contain 
-   bytes >= 0x80.
-   Fixed a bug: Every URL containing a 'j' was malformed!
-   
--  Changed in 0.8: Added the module Neturl which provides the abstract data 
-   types of URLs.
-   The whole package is now thread-safe.
-   Added printers for the various opaque data types.
-   Added labels to function arguments where appropriate. The following 
-   functions changed their signatures significantly: Cgi.mk_memory_arg, 
-   Cgi.mk_file_arg.
-   
--  Changed in 0.7: Added workarounds for frequent browser bugs. Some functions 
-   take now an additional argument specifying which workarounds are enabled.
-   
--  Changed in 0.6.1: Updated URLs in documentation.
-   
--  Changed in 0.6: The file upload has been re-implemented to support large 
-   files; the file is now read block by block and the blocks can be collected 
-   either in memory or in a temporary file.
-   Furthermore, the CGI API has been revised. There is now an opaque data type 
-   "argument" that hides all implementation details and that is extensible (if 
-   necessary, it is possible to add features without breaking the interface 
-   again).
-   The CGI argument parser can be configured; currently it is possible to limit 
-   the size of uploaded data, to control by which method arguments are 
-   processed, and to set up where temporary files are created.
-   The other parts of the package that have nothing to do with CGI remain 
-   unchanged. 
-   
--  Changed in 0.5.1: A mistake in the documentation has been corrected.
-   
--  Initial version 0.5: The Netstring package wants to be the successor of the 
-   Base64-0.2 and the Cgi-0.3 packages. The sum of both numbers is 0.5, and 
-   because of this, the first version number is 0.5. 
-   
-
---------------------------
-
-[1]   see http://www.ocaml-programming.de/packages/netstring-0.9.2.tar.gz
-
-[2]   see mailto:gerd@gerd-stolpmann.de
-
-
-
diff --git a/helm/DEVEL/pxp/netstring/doc/README.xml b/helm/DEVEL/pxp/netstring/doc/README.xml
deleted file mode 100644 (file)
index bbf473e..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE readme SYSTEM "readme.dtd" [
-
-<!ENTITY % common SYSTEM "common.xml">
-%common;
-
-<!-- Special HTML config: -->
-<!ENTITY % readme:html:up '<a href="../..">up</a>'>
-
-<!ENTITY % config SYSTEM "config.xml">
-%config;
-
-]>
-
-<readme title="README - Netstring, string processing functions for the net">
-  <sect1>
-    <title>Abstract</title>
-    <p>
-<em>Netstring</em> is a collection of string processing functions that are
-useful in conjunction with Internet messages and protocols. In particular,
-it contains functions for the following purposes:</p>
-
-<ul>
-      <li><p>Parsing MIME messages</p>
-      </li>
-      <li><p>Several encoding/decoding functions (Base 64, Quoted Printable, Q, URL-encoding)</p>
-      </li>
-      <li><p>A new implementation of the CGI interface that allows users to upload files</p>
-      </li>
-      <li><p>A simple HTML parser</p>
-      </li>
-      <li><p>URL parsing, printing and processing</p>
-      </li>
-      <li><p>Conversion between character sets</p>
-      </li>
-    </ul>
-
-  </sect1>
-
-  <sect1>
-    <title>Download</title>
-    <p>
-You can download <em>Netstring</em> as gzip'ed <a
-                                              href="&url.netstring-download;">tarball</a>.
-</p>
-
-  </sect1>
-
-  <sect1>
-    <title>Documentation</title>
-    <p>
-Sorry, there is no manual. The mli files describe each function in
-detail. Furthermore, the following additional information may be useful.</p>
-
-    <sect2>
-      <title>New CGI implementation</title>
-
-      <p>For a long time, the CGI implementation by Jean-Christophe Filliatre
-has been the only freely available module that implemented the CGI interface
-(it also based on code by Daniel de Rauglaudre). It worked well, but it did not
-support file uploads because this requires a parser for MIME messages.</p>
-      <p>The main goal of Netstring is to realize such uploads, and because of
-this it contains an almost complete parser for MIME messages.</p>
-      <p>The new CGI implementation provides the same functions than the old
-one, and some extensions. If you call Cgi.parse_args(), you get the CGI
-parameters as before, but as already explained this works also if the
-parameters are encaspulated as MIME message. In the HTML code, you can select
-the MIME format by using
-<code><![CDATA[
-<form action="..." method="post" enctype="multipart/form-data">
-...
-</form>
-]]>
-</code>
-- this "enctype" attribute forces the browser to send the form parameters
-as multipart MIME message (Note: You can neither send the parameters of a
-conventional hyperlink as MIME message nor the form parameters if the
-"method" is "get"). In many browsers only this particular encoding enables
-the file upload elements, you cannot perform file uploads with other encodings.
-</p>
-
-      <p>As MIME messages can transport MIME types, filename, and other
-additional properties, it is also possible to get these using the enhanced
-interface. After calling
-<code><![CDATA[
-Cgi.parse_arguments config
-]]></code>
-you can get all available information about a certain parameter by invoking
-<code><![CDATA[
-let param = Cgi.argument "name"
-]]></code>
-- where "param" has the type "argument". There are several accessor functions
-to extract the various aspects of arguments (name, filename, value by string,
-value by temporary file, MIME type, MIME header) from "argument" values.
-</p>
-
-    </sect2>
-
-
-    <sect2>
-      <title>Base64, and other encodings</title>
-
-      <p>Netstring is also the successor of the Base64 package. It provides a
-Base64 compatible interface, and an enhanced API. The latter is contained in
-the Netencoding module which also offers implementations of the "quoted
-printable", "Q", and "URL" encodings. Please see netencoding.mli for
-details.</p>
-
-    </sect2>
-
-
-    <sect2>
-      <title>The MIME scanner functions</title>
-
-      <p>In the Mimestring module you can find several functions scanning parts
-of MIME messages. These functions already cover most aspects of MIME messages:
-Scanning of headers, analysis of structured header entries, and scanning of
-multipart bodies. Of course, a full-featured MIME scanner would require some
-more functions, especially concrete parsers for frequent structures 
-(mail addresses or date strings).
-</p>
-      <p>Please see the file mimestring.mli for details.</p>
-    </sect2>
-
-
-    <sect2>
-      <title>The HTML parser</title>
-
-      <p>The HTML parser should be able to read every HTML file; whether it is
-correct or not. The parser tries to recover from parsing errors as much as
-possible.
-</p>
-      <p>The parser returns the HTML term as conventional recursive value
-(i.e. no object-oriented design).</p>
-      <p>The parser depends a bit on knowledge about the HTML version; mainly
-because it needs to know the tags that are always empty. It may be necessary
-that you must adjust this configuration before the parser works well enough for
-your purpose.
-</p>
-      <p>Please see the Nethtml module for details.</p>
-    </sect2>
-
-    <sect2>
-      <title>The abstract data type URL</title>
-      <p>The module Neturl contains support for URL parsing and processing.
-The implementation follows strictly the standards RFC 1738 and RFC 1808.
-URLs can be parsed, and several accessor functions allow the user to
-get components of parsed URLs, or to change components. Modifying URLs
-is safe; it is impossible to create a URL that does not have a valid
-string representation.</p>
-
-      <p>Both absolute and relative URLs are supported. It is possible to
-apply a relative URL to a base URL in order to get the corresponding
-absolute URL.</p>
-    </sect2>
-
-    <sect2>
-      <title>Conversion between character sets and encodings</title>
-      <p>The module Netconversion converts strings from one characters set
-to another. It is Unicode-based, and there are conversion tables for more than
-50 encodings.</p>
-    </sect2>
-
-  </sect1>
-
-  <sect1>
-    <title>Author, Copying</title>
-    <p>
-<em>Netstring</em> has been written by &person.gps;. You may copy it as you like,
-you may use it even for commercial purposes as long as the license conditions
-are respected, see the file LICENSE coming with the distribution. It allows
-almost everything.
-</p>
-  </sect1>
-
-  <sect1>
-    <title>History</title>
-
-    <ul>
-      <li><p><em>Changed in 0.9.3:</em> Fixed a bug in the "install" rule of
-the Makefile.</p>
-      </li>
-      <li><p><em>Changed in 0.9.2:</em> New format for the conversion tables
-which are now much smaller.</p>
-      </li>
-      <li><p><em>Changed in 0.9.1:</em> Updated the Makefile such that
-(native-code) compilation of netmappings.ml becomes possible.
-</p>
-      </li>
-      <li><p><em>Changed in 0.9:</em> Extended Mimestring module: It can
-now process RFC-2047 messages.</p>
-       <p>New Netconversion module which converts strings between character
-encodings.</p>
-      </li>
-      <li><p><em>Changed in 0.8.1:</em> Added the component
-url_accepts_8bits to Neturl.url_syntax. This helps processing URLs which
-intentionally contain bytes >= 0x80.</p>
-       <p>Fixed a bug: Every URL containing a 'j' was malformed!</p>
-      </li>
-      <li><p><em>Changed in 0.8:</em> Added the module Neturl which 
-provides the abstract data types of URLs.</p>
-       <p>The whole package is now thread-safe.</p>
-       <p>Added printers for the various opaque data types.</p>
-       <p>Added labels to function arguments where appropriate. The
-following functions changed their signatures significantly:
-Cgi.mk_memory_arg, Cgi.mk_file_arg.</p>
-      </li>
-      <li><p><em>Changed in 0.7:</em> Added workarounds for frequent
-browser bugs. Some functions take now an additional argument
-specifying which workarounds are enabled.</p>
-      </li>
-      <li><p><em>Changed in 0.6.1:</em> Updated URLs in documentation.</p>
-      </li>
-
-      <li><p><em>Changed in 0.6:</em> The file upload has been re-implemented
-to support large files; the file is now read block by block and the blocks can
-be collected either in memory or in a temporary file.<br/>
-Furthermore, the CGI API has been revised. There is now an opaque data type
-"argument" that hides all implementation details and that is extensible (if
-necessary, it is possible to add features without breaking the interface
-again).<br/>
-The CGI argument parser can be configured; currently it is possible to
-limit the size of uploaded data, to control by which method arguments are
-processed, and to set up where temporary files are created.<br/>
-The other parts of the package that have nothing to do with CGI remain
-unchanged.
-</p>
-      </li>
-
-      <li><p><em>Changed in 0.5.1:</em> A mistake in the documentation has
-been corrected.</p>
-      </li>
-
-      <li><p><em>Initial version 0.5:</em>
-The Netstring package wants to be the successor of the Base64-0.2 and
-the Cgi-0.3 packages. The sum of both numbers is 0.5, and because of this,
-the first version number is 0.5.
-</p>
-      </li>
-    </ul>
-  </sect1>
-
-</readme>
-
diff --git a/helm/DEVEL/pxp/netstring/mimestring.ml b/helm/DEVEL/pxp/netstring/mimestring.ml
deleted file mode 100644 (file)
index 8fc4bfc..0000000
+++ /dev/null
@@ -1,1035 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-module Str = Netstring_str;;
-
-let cr_or_lf_re = Str.regexp "[\013\n]";;
-
-let trim_right_spaces_re =
-  Str.regexp "[ \t]+$";;
-
-let trim_left_spaces_re =
-  Str.regexp "^[ \t]+";;
-
-let header_re =
-  Str.regexp "\\([^ \t\r\n:]+\\):\\([ \t]*.*\n\\([ \t].*\n\\)*\\)";;
-
-let empty_line_re =
-  Str.regexp "\013?\n";;
-
-let end_of_header_re =
-  Str.regexp "\n\013?\n";;
-
-
-let scan_header ?(unfold=true) parstr ~start_pos:i0 ~end_pos:i1 =
-  let rec parse_header i l =
-    match Str.string_partial_match header_re parstr i with
-       Some r ->
-         let i' = Str.match_end r in
-         if i' > i1 then
-           failwith "Mimestring.scan_header";
-         let name = String.lowercase(Str.matched_group r 1 parstr) in
-         let value_with_crlf =
-           Str.matched_group r 2 parstr in
-         let value =
-           if unfold then begin
-             let value_with_rspaces =
-               Str.global_replace cr_or_lf_re "" value_with_crlf in
-             let value_with_lspaces =
-               Str.global_replace trim_right_spaces_re "" value_with_rspaces in
-             Str.global_replace trim_left_spaces_re "" value_with_lspaces 
-           end
-           else value_with_crlf
-         in
-         parse_header i' ( (name,value) :: l)
-      | None ->
-         (* The header must end with an empty line *)
-         begin match Str.string_partial_match empty_line_re parstr i with
-             Some r' ->
-               List.rev l, Str.match_end r'
-           | None ->
-               failwith "Mimestring.scan_header"
-         end
-  in
-  parse_header i0 []
-;;
-
-type s_token =
-    Atom of string
-  | EncodedWord of (string * string * string)
-  | QString of string
-  | Control of char
-  | Special of char
-  | DomainLiteral of string
-  | Comment
-  | End
-;;
-
-type s_option =
-    No_backslash_escaping
-  | Return_comments
-  | Recognize_encoded_words
-;;
-
-type s_extended_token =
-    { token      : s_token;
-      token_pos  : int;
-      token_line : int;
-      token_linepos : int;   (* Position of the beginning of the line *)
-      token_len  : int;
-      mutable token_sep : bool; (* separates adjacent encoded words *)
-    }
-;;
-
-let get_token et  = et.token;;
-let get_pos et    = et.token_pos;;
-let get_line et   = et.token_line;;
-let get_column et = et.token_pos - et.token_linepos;;
-let get_length et = et.token_len;;
-let separates_adjacent_encoded_words et = et.token_sep;;
-
-let get_decoded_word et =
-  match et.token with
-      Atom s -> s
-    | QString s -> s
-    | Control c -> String.make 1 c
-    | Special c -> String.make 1 c
-    | DomainLiteral s -> s
-    | Comment -> ""
-    | EncodedWord (_, encoding, content) ->
-       ( match encoding with
-             ("Q"|"q") ->
-               Netencoding.Q.decode content
-           | ("B"|"b") -> 
-               Netencoding.Base64.decode 
-                 ~url_variant:false
-                 ~accept_spaces:false
-                 content
-           | _ -> failwith "get_decoded_word"
-       )
-    | End -> 
-       failwith "get_decoded_word"
-;;
-
-let get_charset et =
-  match et.token with
-      EncodedWord (charset, _, _) -> charset
-    | End -> failwith "get_charset"
-    | _ -> "US-ASCII"
-;;
-
-type scanner_spec =
-    { (* What the user specifies: *)
-      scanner_specials : char list;
-      scanner_options : s_option list;
-      (* Derived from that: *)
-      mutable opt_no_backslash_escaping : bool;
-      mutable opt_return_comments : bool;
-      mutable opt_recognize_encoded_words : bool;
-
-      mutable is_special : bool array;
-      mutable space_is_special : bool;
-    }
-;;
-
-type scanner_target =
-    { scanned_string : string;
-      mutable scanner_pos : int;
-      mutable scanner_line : int;
-      mutable scanner_linepos : int; 
-      (* Position of the beginning of the line *)
-      mutable scanned_tokens : s_extended_token Queue.t;
-      (* A queue of already scanned tokens in order to look ahead *)
-      mutable last_token : s_token;
-      (* The last returned token. It is only important whether it is
-       * EncodedWord or not.
-       *)
-    }
-;;
-
-type mime_scanner = scanner_spec * scanner_target
-;;
-
-let get_pos_of_scanner (spec, target) = 
-  if spec.opt_recognize_encoded_words then
-    failwith "get_pos_of_scanner"
-  else
-    target.scanner_pos
-;;
-
-let get_line_of_scanner (spec, target) = 
-  if spec.opt_recognize_encoded_words then
-    failwith "get_line_of_scanner"
-  else
-    target.scanner_line
-;;
-
-let get_column_of_scanner (spec, target) = 
-  if spec.opt_recognize_encoded_words then
-    failwith "get_column_of_scanner"
-  else
-    target.scanner_pos - target.scanner_linepos 
-;;
-
-let create_mime_scanner ~specials ~scan_options =
-  let is_spcl = Array.create 256 false in
-  List.iter
-    (fun c -> is_spcl.( Char.code c ) <- true)
-    specials;
-  let spec =
-    { scanner_specials = specials;
-      scanner_options = scan_options;
-      opt_no_backslash_escaping = 
-       List.mem No_backslash_escaping scan_options;
-      opt_return_comments = 
-       List.mem Return_comments scan_options;
-      opt_recognize_encoded_words = 
-       List.mem Recognize_encoded_words scan_options;
-      is_special = is_spcl;
-      space_is_special = is_spcl.(32);
-    }
-  in
-  (* Grab the remaining arguments: *)
-  fun ?(pos=0) ?(line=1) ?(column=0) s ->
-    let target =
-      { scanned_string = s;
-       scanner_pos = pos;
-       scanner_line = line;
-       scanner_linepos = pos - column;
-       scanned_tokens = Queue.create();
-       last_token = Comment;   (* Must not be initialized with EncodedWord *)
-      }
-    in
-    spec, target
-;;
-
-
-let encoded_word_re =
-  Str.regexp "=\\?\\([^?]+\\)\\?\\([^?]+\\)\\?\\([^?]+\\)\\?=";;
-
-let scan_next_token ((spec,target) as scn) =
-  let mk_pair t len =
-    { token = t;
-      token_pos = target.scanner_pos;
-      token_line = target.scanner_line;
-      token_linepos = target.scanner_linepos;
-      token_len = len;
-      token_sep = false;
-    },
-    t
-  in
-
-  (* Note: mk_pair creates a new token pair, and it assumes that 
-   * target.scanner_pos (and also scanner_line and scanner_linepos)
-   * still contain the position of the beginning of the token.
-   *)
-
-  let s = target.scanned_string in
-  let l = String.length s in
-  let rec scan i =
-    if i < l then begin
-      let c = s.[i] in
-      if spec.is_special.( Char.code c ) then begin
-       let pair = mk_pair (Special c) 1 in
-       target.scanner_pos <- target.scanner_pos + 1;
-       (match c with
-            '\n' -> 
-              target.scanner_line    <- target.scanner_line + 1;
-              target.scanner_linepos <- target.scanner_pos;
-          | _ -> ()
-       );
-       pair
-      end
-      else
-       match c with
-           '"' -> 
-             (* Quoted string: *)
-             scan_qstring (i+1) (i+1) 0
-         | '(' ->
-             (* Comment: *)
-             let i', line, linepos = 
-               scan_comment (i+1) 0 target.scanner_line target.scanner_linepos
-             in
-             let advance() =
-               target.scanner_pos <- i';
-               target.scanner_line <- line;
-               target.scanner_linepos <- linepos
-             in
-             if spec.opt_return_comments then begin
-               let pair = mk_pair Comment (i' - i) in
-               advance();
-               pair
-             end
-             else 
-               if spec.space_is_special then begin
-                 let pair = mk_pair (Special ' ') (i' - i) in
-                 advance();
-                 pair
-               end
-               else begin
-                 advance();
-                 scan i'
-               end
-         | (' '|'\t'|'\r') ->
-             (* Ignore whitespace by default: *)
-             target.scanner_pos <- target.scanner_pos + 1;
-             scan (i+1)
-         | '\n' ->
-             (* Ignore whitespace by default: *)
-             target.scanner_pos     <- target.scanner_pos + 1;
-             target.scanner_line    <- target.scanner_line + 1;
-             target.scanner_linepos <- target.scanner_pos;
-             scan (i+1)
-         | ('\000'..'\031'|'\127'..'\255') ->
-             let pair = mk_pair (Control c) 1 in
-             target.scanner_pos <- target.scanner_pos + 1;
-             pair
-         | '[' ->
-             (* Domain literal: *)
-             scan_dliteral (i+1) (i+1) 0
-         | _ ->
-             scan_atom i i
-    end
-    else 
-      mk_pair End 0
-
-  and scan_atom i0 i =
-    let return_atom() =
-      let astring = String.sub s i0 (i-i0) in
-      let r =
-       if spec.opt_recognize_encoded_words then
-         Str.string_match ~groups:4 encoded_word_re astring 0
-       else
-         None
-      in
-      match r with
-         None ->
-           (* An atom contains never a linefeed character, so we can ignore
-            * scanner_line here.
-            *)
-           let pair = mk_pair (Atom astring) (i-i0) in
-           target.scanner_pos <- i;
-           pair
-       | Some mr ->
-           (* Found an encoded word. *)
-           let charset  = Str.matched_group mr 1 astring in
-           let encoding = Str.matched_group mr 2 astring in
-           let content  = Str.matched_group mr 3 astring in
-           let t = EncodedWord(String.uppercase charset,
-                                String.uppercase encoding,
-                                content) in
-           let pair = mk_pair t (i-i0) in
-           target.scanner_pos <- i;
-           pair
-    in
-
-    if i < l then
-      let c = s.[i] in
-      match c with
-         ('\000'..'\031'|'\127'..'\255'|'"'|'('|'['|' '|'\t'|'\r'|'\n') ->
-           return_atom()
-       | _ ->
-           if spec.is_special.( Char.code c ) then
-             return_atom()
-           else
-             scan_atom i0 (i+1)
-    else
-      return_atom()
-
-  and scan_qstring i0 i n =
-    if i < l then
-      let c = s.[i] in
-      match c with
-         '"' ->
-           (* Regular end of the quoted string: *)
-           let content, line, linepos = copy_qstring i0 (i-1) n in
-           let pair = mk_pair (QString content) (i-i0+2) in
-           target.scanner_pos <- i+1;
-           target.scanner_line <- line;
-           target.scanner_linepos <- linepos;
-           pair
-       | '\\' when not spec.opt_no_backslash_escaping ->
-           scan_qstring i0 (i+2) (n+1)
-       | _ ->
-           scan_qstring i0 (i+1) (n+1)
-    else
-      (* Missing right double quote *)
-      let content, line, linepos = copy_qstring i0 (l-1) n in
-      let pair = mk_pair (QString content) (l-i0+1) in
-      target.scanner_pos <- l;
-      target.scanner_line <- line;
-      target.scanner_linepos <- linepos;
-      pair
-
-  and copy_qstring i0 i1 n =
-    (* Used for quoted strings and for domain literals *)
-    let r = String.create n in
-    let k = ref 0 in
-    let line = ref target.scanner_line in
-    let linepos = ref target.scanner_linepos in
-    for i = i0 to i1 do
-      let c = s.[i] in
-      match c with
-         '\\' when i < i1 &&  not spec.opt_no_backslash_escaping -> ()
-       | '\n' ->
-           line := !line + 1;
-           linepos := i+1;
-           r.[ !k ] <- c; 
-           incr k
-       | _ -> 
-           r.[ !k ] <- c; 
-           incr k
-    done;
-    assert (!k = n);
-    r, !line, !linepos
-
-  and scan_dliteral i0 i n =
-    if i < l then
-      let c = s.[i] in
-      match c with
-         ']' ->
-           (* Regular end of the domain literal: *)
-           let content, line, linepos = copy_qstring i0 (i-1) n in
-           let pair = mk_pair (DomainLiteral content) (i-i0+2) in
-           target.scanner_pos <- i+1;
-           target.scanner_line <- line;
-           target.scanner_linepos <- linepos;
-           pair
-       | '\\' when not spec.opt_no_backslash_escaping ->
-           scan_dliteral i0 (i+2) (n+1)
-       | _ ->
-           (* Note: '[' is not allowed by RFC 822; we treat it here as
-            * a regular character (questionable)
-            *)
-           scan_dliteral i0 (i+1) (n+1)
-    else
-      (* Missing right bracket *)
-      let content, line, linepos = copy_qstring i0 (l-1) n in
-      let pair = mk_pair (DomainLiteral content) (l-i0+1) in
-      target.scanner_pos <- l;
-      target.scanner_line <- line;
-      target.scanner_linepos <- linepos;
-      pair
-
-
-  and scan_comment i level line linepos =
-    if i < l then
-      let c = s.[i] in
-      match c with
-         ')' ->
-           (i+1), line, linepos
-       | '(' ->
-           (* nested comment *)
-           let i', line', linepos' = 
-             scan_comment (i+1) (level+1) line linepos 
-           in
-           scan_comment i' level line' linepos'
-       | '\\' when not spec.opt_no_backslash_escaping ->
-           if (i+1) < l && s.[i+1] = '\n' then
-             scan_comment (i+2) level (line+1) (i+2)
-           else
-             scan_comment (i+2) level line linepos
-       | '\n' ->
-           scan_comment (i+1) level (line+1) (i+1)
-       | _ ->
-           scan_comment (i+1) level line linepos
-    else
-      (* Missing closing ')' *)
-      i, line, linepos
-  in
-
-  scan target.scanner_pos
-;;
-
-
-let scan_token ((spec,target) as scn) =
-  (* This function handles token queueing in order to recognize white space
-   * that separates adjacent encoded words.
-   *)
-
-  let rec collect_whitespace () =
-    (* Scans whitespace tokens and returns them as:
-     * (ws_list, other_tok)     if there is some other_tok following the
-     *                          list (other_tok = End is possible)
-     *)
-    let (et, t) as pair = scan_next_token scn in
-    ( match t with
-         (Special ' '|Special '\t'|Special '\n'|Special '\r') ->
-           let ws_list, tok = collect_whitespace() in
-           pair :: ws_list, tok
-       | _ ->
-           [], pair
-    )
-  in
-
-  try
-    (* Is there an already scanned token in the queue? *)
-    let et = Queue.take target.scanned_tokens in
-    let t = et.token in
-    target.last_token <- t;
-    et, et.token
-  with
-      Queue.Empty ->
-       (* If not: inspect the last token. If that token is an EncodedWord,
-        * the next tokens are scanned in advance to determine if there
-        * are spaces separating two EncodedWords. These tokens are put
-        * into the queue such that it is avoided that they are scanned
-        * twice. (The sole purpose of the queue.)
-        *)
-       match target.last_token with
-           EncodedWord(_,_,_) as ew ->
-             let ws_list, tok = collect_whitespace() in
-             (* If tok is an EncodedWord, too, the tokens in ws_list must
-              * be flagged as separating two adjacent encoded words. 
-              *)
-             ( match tok with
-                   _, EncodedWord(_,_,_) ->
-                     List.iter
-                       (fun (et,t) ->
-                          et.token_sep <- true)
-                       ws_list
-                 | _ ->
-                     ()
-             );
-             (* Anyway, queue the read tokens but the first up *)
-             ( match ws_list with
-                   [] ->
-                     (* Nothing to queue *)
-                     let et, t = tok in
-                     target.last_token <- t;
-                     tok
-                 | (et,t) as pair :: ws_list' ->
-                     List.iter
-                       (fun (et',_) -> 
-                          Queue.add et' target.scanned_tokens)
-                       ws_list';
-                     ( match tok with
-                         | _, End ->
-                             ()
-                         | (et',_) ->
-                             Queue.add et' target.scanned_tokens
-                     );
-                     (* Return the first scanned token *)
-                     target.last_token <- t;
-                     pair
-             )
-         | _ ->
-             (* Regular case: Scan one token; do not queue it up *)
-             let (et, t) as pair = scan_next_token scn in 
-             target.last_token <- t;
-             pair
-;;
-       
-
-let scan_token_list scn =
-  let rec collect() =
-    match scan_token scn with
-       _, End ->
-         []
-      | pair ->
-         pair :: collect()
-  in
-  collect()
-;;
-
-
-let scan_structured_value s specials options =
-  let rec collect scn =
-    match scan_token scn with
-       _, End ->
-         []
-      | _, t ->
-         t :: collect scn
-  in
-  let scn = create_mime_scanner specials options s in
-  collect scn
-;;
-
-
-let specials_rfc822 =
-  [ '<'; '>'; '@'; ','; ';'; ':'; '\\'; '.' ];;
-
-
-let specials_rfc2045 =
-  [ '<'; '>'; '@'; ','; ';'; ':'; '\\'; '/' ];;
-
-
-let scan_encoded_text_value s =
-  let specials = [ ' '; '\t'; '\r'; '\n'; '('; '['; '"' ] in
-  let options =  [ Recognize_encoded_words ] in
-  let scn = create_mime_scanner specials options s in
-  
-  let rec collect () =
-    match scan_token scn with
-       _, End ->
-         []
-      | et, _ when separates_adjacent_encoded_words et ->
-         collect()
-      | et, (Special _|Atom _|EncodedWord(_,_,_)) ->
-         et :: collect ()
-      | _, _ ->
-         assert false
-  in
-  collect()
-;;
-
-
-let scan_value_with_parameters s options =
-  let rec parse_params tl =
-    match tl with
-       Atom n :: Special '=' :: Atom v :: tl' ->
-         (n,v) :: parse_rest tl'
-      | Atom n :: Special '=' :: QString v :: tl' ->
-         (n,v) :: parse_rest tl'
-      | _ ->
-         failwith "Mimestring.scan_value_with_parameters"
-  and parse_rest tl =
-    match tl with
-       [] -> []
-      | Special ';' :: tl' ->
-         parse_params tl'
-      | _ ->
-         failwith "Mimestring.scan_value_with_parameters"
-  in
-
-  (* Note: Even if not used here, the comma is a very common separator
-   * and should be recognized as being special. You will get a
-   * failure if there is a comma in the scanned string.
-   *)
-  let tl = scan_structured_value s [ ';'; '='; ',' ] options in
-  match tl with
-      [ Atom n ] -> n, []
-    | [ QString n ] -> n, []
-    | Atom n :: Special ';' :: tl' ->
-       n, parse_params tl'
-    | QString n :: Special ';' :: tl' ->
-       n, parse_params tl'
-    | _ ->
-       failwith "Mimestring.scan_value_with_parameters"
-;;
-
-
-let scan_mime_type s options =
-  let n, params = scan_value_with_parameters s options in
-  (String.lowercase n),
-  (List.map (fun (n,v) -> (String.lowercase n, v)) params)
-;;
-
-
-let lf_re = Str.regexp "[\n]";;
-
-let scan_multipart_body s ~start_pos:i0 ~end_pos:i1 ~boundary =
-  let l_s = String.length s in
-  if i0 < 0 or i1 < 0 or i0 > l_s or i1 >l_s then
-    invalid_arg "Mimestring.scan_multipart_body";
-
-  (* First compile the regexps scanning for 'boundary': *)
-  let boundary1_re =
-    Str.regexp ("\n--" ^ Str.quote boundary) in
-  let boundary2_re =
-    Str.regexp ("--" ^ Str.quote boundary) in
-
-  let rec parse i =
-    (* i: Beginning of the current part (position directly after the
-     * boundary line
-     *)
-    (* Search for next boundary at position i *)
-    let i' =
-      try min (fst (Str.search_forward boundary1_re s i) + 1) i1
-      with
-         Not_found -> i1
-    in
-    (* i': Either the position of the first '-' of the boundary line,
-     *     or i1 if no boundary has been found
-     *)
-    if i' >= i1 then
-      [] (* Ignore everything after the last boundary *)
-    else
-      let i'' =
-       try min (fst (Str.search_forward lf_re s i') + 1) i1
-       with
-           Not_found -> i1
-      in
-      (* i'': The position after the boundary line *)
-(*
-      print_int i; print_newline();
-      print_int i'; print_newline();
-      print_int i''; print_newline();
-      flush stdout;
-*)
-      let header, k = scan_header s i i' in
-      (* header: the header of the part
-       * k: beginning of the body
-       *)
-
-      let value =
-       (* We know that i'-1 is a linefeed character. i'-2 should be a CR
-        * character. Both characters are not part of the value.
-        *)
-       if i' >= 2 then
-         match s.[i'-2] with
-             '\013' -> String.sub s k (i'-2-k)
-           | _      -> String.sub s k (i'-1-k)
-       else
-         String.sub s k (i'-1-k)
-      in
-
-      let pair =
-       (header, value) in
-
-      if i'' >= i1
-      then
-       [ pair ]
-      else
-       pair :: parse i''
-  in
-
-  (* Find the first boundary. This is a special case, because it may be
-   * right at the beginning of the string (no preceding CRLF)
-   *)
-
-  let i_bnd =
-    if Str.string_partial_match boundary2_re s i0 <> None then
-      i0
-    else
-      try min (fst (Str.search_forward boundary1_re s i0)) i1
-      with
-         Not_found -> i1
-  in
-
-  if i_bnd >= i1 then
-    []
-  else
-    let i_bnd' =
-      try min (fst (Str.search_forward lf_re s (i_bnd + 1)) + 1) i1
-      with
-         Not_found -> i1
-    in
-    if i_bnd' >= i1 then
-      []
-    else
-      parse i_bnd'
-;;
-
-
-let scan_multipart_body_and_decode s ~start_pos:i0 ~end_pos:i1 ~boundary =
-  let parts = scan_multipart_body s i0 i1 boundary in
-  List.map
-    (fun (params, value) ->
-       let encoding =
-        try List.assoc "content-transfer-encoding" params
-        with Not_found -> "7bit"
-       in
-
-       (* NOTE: In the case of "base64" and "quoted-printable", the allocation
-       * of the string "value" could be avoided.
-       *)
-
-       let value' =
-        match encoding with
-            ("7bit"|"8bit"|"binary") -> value
-          | "base64" ->
-              Netencoding.Base64.decode_substring
-                value 0 (String.length value) false true
-          | "quoted-printable" ->
-              Netencoding.QuotedPrintable.decode_substring
-                value 0 (String.length value)
-          | _ ->
-              failwith "Mimestring.scan_multipart_body_and_decode: Unknown content-transfer-encoding"
-       in
-       (params, value')
-    )
-    parts
-;;
-
-
-let scan_multipart_body_from_netstream s ~boundary ~create ~add ~stop =
-
-  (* The block size of s must be at least the length of the boundary + 3.
-   * Otherwise it is not guaranteed that the boundary is always recognized.
-   *)
-  if Netstream.block_size s < String.length boundary + 3 then
-    invalid_arg "Mimestring.scan_multipart_body_from_netstream";
-
-  (* First compile the regexps scanning for 'boundary': *)
-  let boundary1_re =
-    Str.regexp ("\n--" ^ Str.quote boundary) in
-  let boundary2_re =
-    Str.regexp ("--" ^ Str.quote boundary) in
-
-  (* Subtask 1: Search the end of the MIME header: CR LF CR LF
-   *            (or LF LF). Enlarge the window until the complete header
-   *            is covered by the window.
-   *)
-  let rec search_end_of_header k =
-    (* Search the end of the header beginning at position k of the
-     * current window.
-     * Return the position of the first character of the body.
-     *)
-    try
-      (* Search for LF CR? LF: *)
-      let i, r = Str.search_forward
-                  end_of_header_re
-                  (Netbuffer.unsafe_buffer (Netstream.window s))
-                  k
-      in
-      (* If match_end <= window_length, the search was successful.
-       * Otherwise, we searched in the uninitialized region of the
-       * buffer.
-       *)
-      if Str.match_end r <= Netstream.window_length s then
-       Str.match_end r
-      else
-       raise Not_found
-    with
-       Not_found ->
-         (* If the end of the stream is reached, the end of the header
-          * is missing: Error.
-          * Otherwise, we try to read another block, and continue.
-          *)
-         if Netstream.at_eos s then
-           failwith "Mimestring.scan_multipart_body_from_netstream: Unexpected end of stream";
-         let w0 = Netstream.window_length s in
-         Netstream.want_another_block s;
-         search_end_of_header (max (w0 - 2) 0)
-  in
-
-  (* Subtask 2: Search the first boundary line. *)
-  let rec search_first_boundary() =
-    (* Search boundary per regexp; return the position of the character
-     * immediately following the boundary (on the same line), or
-     * raise Not_found.
-     *)
-    try
-      (* Search boundary per regexp: *)
-      let i, r = Str.search_forward
-                  boundary1_re
-                  (Netbuffer.unsafe_buffer (Netstream.window s))
-                  0
-      in
-      (* If match_end <= window_length, the search was successful.
-       * Otherwise, we searched in the uninitialized region of the
-       * buffer.
-       *)
-      if Str.match_end r <= Netstream.window_length s then begin
-       Str.match_end r
-      end
-      else raise Not_found
-    with
-       Not_found ->
-         if Netstream.at_eos s then raise Not_found;
-         (* The regexp did not match: Move the window by one block.
-          *)
-         let n =
-           min
-             (Netstream.window_length s)
-             (Netstream.block_size s)
-         in
-         Netstream.move s n;
-         search_first_boundary()
-  in
-
-  (* Subtask 3: Search the next boundary line. Invoke 'add' for every
-   * read chunk
-   *)
-  let rec search_next_boundary p =
-    (* Returns the position directly after the boundary on the same line *)
-    try
-      (* Search boundary per regexp: *)
-      let i,r = Str.search_forward
-                 boundary1_re
-                 (Netbuffer.unsafe_buffer (Netstream.window s))
-                 0
-      in
-      (* If match_end <= window_length, the search was successful.
-       * Otherwise, we searched in the uninitialized region of the
-       * buffer.
-       *)
-      if Str.match_end r <= Netstream.window_length s then begin
-       (* Add the last chunk of the part. *)
-       let n =
-         (* i is a LF. i - 1 should be CR. Ignore these characters. *)
-         if i >= 1 then
-           match (Netbuffer.unsafe_buffer (Netstream.window s)).[ i - 1 ] with
-               '\013' -> i - 1
-             | _      -> i
-         else
-           i
-       in
-       (* Printf.printf "add n=%d\n" n; *)
-       add p s 0 n;
-       Str.match_end r
-      end
-      else raise Not_found
-    with
-       Not_found ->
-         if Netstream.at_eos s then
-           failwith "Mimestring.scan_multipart_body_from_netstream: next MIME boundary not found";
-         (* The regexp did not match: Add the first block of the window;
-          * and move the window.
-          *)
-         let n =
-           min
-             (Netstream.window_length s)
-             (Netstream.block_size s)
-         in
-         (* Printf.printf "add n=%d\n" n; *)
-         add p s 0 n;
-         Netstream.move s n;
-         search_next_boundary p
-  in
-
-  (* Subtask 4: Search the end of the boundary line *)
-  let rec search_end_of_line k =
-    (* Search LF beginning at position k. Discard any contents until that. *)
-    try
-      let i,r = Str.search_forward
-                 lf_re
-                 (Netbuffer.unsafe_buffer (Netstream.window s))
-                 k
-      in
-      (* If match_end <= window_length, the search was successful.
-       * Otherwise, we searched in the uninitialized region of the
-       * buffer.
-       *)
-      if Str.match_end r <= Netstream.window_length s then begin
-        Str.match_end r
-      end
-      else raise Not_found
-    with
-       Not_found ->
-         if Netstream.at_eos s then
-           failwith "Mimestring.scan_multipart_body_from_netstream: MIME boundary without line end";
-         (* The regexp did not match: move the window.
-          *)
-         let n = Netstream.window_length s in
-         Netstream.move s n;
-         search_end_of_line 0
-  in
-
-  (* Subtask 5: Check whether "--" follows the boundary on the same line *)
-  let check_whether_last_boundary k =
-    (* k: The position directly after the boundary. *)
-    Netstream.want s (k+2);
-    let str = Netbuffer.unsafe_buffer (Netstream.window s) in
-    (Netstream.window_length s >= k+2) && str.[k] = '-' && str.[k+1] = '-'
-  in
-
-  (* Subtask 6: Check whether the buffer begins with a boundary. *)
-  let check_beginning_is_boundary () =
-    let m = String.length boundary + 2 in
-    Netstream.want s m;
-    let str = Netbuffer.unsafe_buffer (Netstream.window s) in
-    (Netstream.window_length s >= m) &&
-    (Str.string_partial_match boundary2_re str 0 <> None)
-  in
-
-  let rec parse_part () =
-    (* The first byte of the current window of s contains the character
-     * directly following the boundary line that starts this part.
-     *)
-    (* Search the end of the MIME header: *)
-    let k_eoh = search_end_of_header 0 in
-    (* Printf.printf "k_eoh=%d\n" k_eoh; *)
-    (* Get the MIME header: *)
-    let str = Netbuffer.unsafe_buffer (Netstream.window s) in
-    let header, k_eoh' = scan_header str 0 k_eoh in
-    assert (k_eoh = k_eoh');
-    (* Move the window over the header: *)
-    Netstream.move s k_eoh;
-    (* Create the part: *)
-    let p = create header in
-    let continue =
-      begin try
-       (* Search the next boundary; add the chunks while searching: *)
-       let k_eob = search_next_boundary p in
-       (* Printf.printf "k_eob=%d\n" k_eob; *)
-        (* Is this the last boundary? *)
-       if check_whether_last_boundary k_eob then begin
-         (* Skip the rest: *)
-         while not (Netstream.at_eos s) do
-           Netstream.move s (Netstream.window_length s)
-         done;
-         Netstream.move s (Netstream.window_length s);
-         false
-       end
-       else begin
-         (* Move to the beginning of the next line: *)
-         let k_eol = search_end_of_line k_eob in
-         Netstream.move s k_eol;
-         true
-       end
-      with
-         any ->
-           (try stop p with _ -> ());
-           raise any
-      end in
-      stop p;
-      if continue then
-       (* Continue with next part: *)
-       parse_part()
-  in
-
-  (* Check whether s directly begins with a boundary: *)
-  if check_beginning_is_boundary() then begin
-    (* Move to the beginning of the next line: *)
-    let k_eol = search_end_of_line 0 in
-    Netstream.move s k_eol;
-    (* Begin with first part: *)
-    parse_part()
-  end
-  else begin
-    (* Search the first boundary: *)
-    try
-      let k_eob = search_first_boundary() in
-      (* Printf.printf "k_eob=%d\n" k_eob; *)
-      (* Move to the beginning of the next line: *)
-      let k_eol = search_end_of_line k_eob in
-      (* Printf.printf "k_eol=%d\n" k_eol; *)
-      Netstream.move s k_eol;
-      (* Begin with first part: *)
-      parse_part()
-    with
-       Not_found ->
-         (* No boundary at all: The body is empty. *)
-         ()
-  end;
-;;
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.8  2000/08/13 00:04:36  gerd
- *     Encoded_word -> EncodedWord
- *     Bugfixes.
- *
- * Revision 1.7  2000/08/07 00:25:14  gerd
- *     Implemented the new functions for structured field lexing.
- *
- * Revision 1.6  2000/06/25 22:34:43  gerd
- *     Added labels to arguments.
- *
- * Revision 1.5  2000/06/25 21:15:48  gerd
- *     Checked thread-safety.
- *
- * Revision 1.4  2000/05/16 22:30:14  gerd
- *     Added support for some types of malformed MIME messages.
- *
- * Revision 1.3  2000/04/15 13:09:01  gerd
- *     Implemented uploads to temporary files.
- *
- * Revision 1.2  2000/03/02 01:15:30  gerd
- *     Updated.
- *
- * Revision 1.1  2000/02/25 15:21:12  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/netstring/mimestring.mli b/helm/DEVEL/pxp/netstring/mimestring.mli
deleted file mode 100644 (file)
index 39634b5..0000000
+++ /dev/null
@@ -1,683 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(**********************************************************************)
-(* Collection of auxiliary functions to parse MIME headers            *)
-(**********************************************************************)
-
-
-val scan_header : 
-       ?unfold:bool ->
-       string -> start_pos:int -> end_pos:int -> 
-         ((string * string) list * int)
-    (* let params, i2 = scan_header s i0 i1:
-     *
-     * DESCRIPTION
-     *
-     * Scans the MIME header that begins at position i0 in the string s
-     * and that must end somewhere before position i1. It is intended
-     * that in i1 the character position following the end of the body of the
-     * MIME message is passed.
-     * Returns the parameters of the header as (name,value) pairs (in
-     * params), and in i2 the position of the character following
-     * directly after the header (i.e. after the blank line separating
-     * the header from the body).
-     * The following normalizations have already been applied:
-     * - The names are all in lowercase
-     * - Newline characters (CR and LF) have been removed (unless
-     *   ?unfold:false has been passed)
-     * - Whitespace at the beginning and at the end of values has been
-     *   removed (unless ?unfold:false is specified)
-     * The rules of RFC 2047 have NOT been applied.
-     * The function fails if the header violates the header format
-     * strongly. (Some minor deviations are tolerated, e.g. it is sufficient
-     * to separate lines by only LF instead of CRLF.)
-     *
-     * OPTIONS:
-     *
-     * unfold: If true (the default), folded lines are concatenated and
-     *   returned as one line. This means that CR and LF characters are
-     *   deleted and that whitespace at the beginning and the end of the
-     *   string is removed.
-     *   You may set ?unfold:false to locate individual characters in the
-     *   parameter value exactly.
-     *
-     * ABOUT MIME MESSAGE FORMAT:
-     *
-     * This is the modern name for messages in "E-Mail format". Messages
-     * consist of a header and a body; the first empty line separates both
-     * parts. The header contains lines "param-name: param-value" where
-     * the param-name must begin on column 0 of the line, and the ":"
-     * separates the name and the value. So the format is roughly:
-     *
-     * param1-name: param1-value
-     * ...
-     * paramN-name: paramN-value
-     *
-     * body
-     *
-     * This function wants in i0 the position of the first character of
-     * param1-name in the string, and in i1 the position of the character
-     * following the body. It returns as i2 the position where the body
-     * begins. Furthermore, in 'params' all parameters are returned that
-     * exist in the header.
-     *
-     * DETAILS
-     *
-     * Note that parameter values are restricted; you cannot represent
-     * arbitrary strings. The following problems can arise:
-     * - Values cannot begin with whitespace characters, because there
-     *   may be an arbitrary number of whitespaces between the ':' and the
-     *   value.
-     * - Values (and names of parameters, too) must only be formed of
-     *   7 bit ASCII characters. (If this is not enough, the MIME standard
-     *   knows the extension RFC 2047 that allows that header values may
-     *   be composed of arbitrary characters of arbitrary character sets.)
-     * - Header values may be broken into several lines, the continuation
-     *   lines must begin with whitespace characters. This means that values
-     *   must not contain line breaks as semantical part of the value.
-     *   And it may mean that ONE whitespace character is not distinguishable
-     *   from SEVERAL whitespace characters.
-     * - Header lines must not be longer than 76 characters. Values that
-     *   would result into longer lines must be broken into several lines.
-     *   This means that you cannot represent strings that contain too few
-     *   whitespace characters.
-     * - Some gateways pad the lines with spaces at the end of the lines.
-     *
-     * This implementation of a MIME scanner tolerates a number of
-     * deviations from the standard: long lines are not rejected; 8 bit
-     * values are accepted; lines may be ended only with LF instead of
-     * CRLF.
-     * Furthermore, header values are transformed:
-     * - leading and trailing spaces are always removed
-     * - CRs and LFs are deleted; it is guaranteed that there is at least
-     *   one space or tab where CR/LFs are deleted.
-     * Last but not least, the names of the header values are converted
-     * to lowercase; MIME specifies that they are case-independent.
-     *
-     * COMPATIBILITY WITH THE STANDARD
-     *
-     * This function can parse all MIME headers that conform to RFC 822.
-     * But there may be still problems, as RFC 822 allows some crazy
-     * representations that are actually not used in practice.
-     * In particular, RFC 822 allows it to use backslashes to "indicate"
-     * that a CRLF sequence is semantically meant as line break. As this
-     * function normally deletes CRLFs, it is not possible to recognize such
-     * indicators in the result of the function.
-     *)
-
-(**********************************************************************)
-
-(* The following types and functions allow it to build scanners for
- * structured MIME values in a highly configurable way.
- *
- * WHAT ARE STRUCTURED VALUES?
- *
- * RFC 822 (together with some other RFCs) defines lexical rules
- * how formal MIME header values should be divided up into tokens. Formal
- * MIME headers are those headers that are formed according to some
- * grammar, e.g. mail addresses or MIME types.
- *    Some of the characters separate phrases of the value; these are
- * the "special" characters. For example, '@' is normally a special
- * character for mail addresses, because it separates the user name
- * from the domain name. RFC 822 defines a fixed set of special
- * characters, but other RFCs use different sets. Because of this,
- * the following functions allow it to configure the set of special characters.
- *    Every sequence of characters may be embraced by double quotes,
- * which means that the sequence is meant as literal data item;
- * special characters are not recognized inside a quoted string. You may
- * use the backslash to insert any character (including double quotes)
- * verbatim into the quoted string (e.g. "He said: \"Give it to me!\"").
- * The sequence of a backslash character and another character is called
- * a quoted pair.
- *    Structured values may contain comments. The beginning of a comment
- * is indicated by '(', and the end by ')'. Comments may be nested.
- * Comments may contain quoted pairs. A
- * comment counts as if a space character were written instead of it.
- *    Control characters are the ASCII characters 0 to 31, and 127.
- * RFC 822 demands that MIME headers are 7 bit ASCII strings. Because
- * of this, this function also counts the characters 128 to 255 as
- * control characters.
- *    Domain literals are strings embraced by '[' and ']'; such literals
- * may contain quoted pairs. Today, domain literals are used to specify
- * IP addresses.
- *    Every character sequence not falling in one of the above categories
- * is an atom (a sequence of non-special and non-control characters).
- * When recognized, atoms may be encoded in a character set different than
- * US-ASCII; such atoms are called encoded words (see RFC 2047).
- *
- * EXTENDED INTERFACE:
- *
- * In order to scan a string containing a MIME value, you must first
- * create a mime_scanner using the function create_mime_scanner.
- * The scanner contains the reference to the scanned string, and a 
- * specification how the string is to be scanned. The specification
- * consists of the lists 'specials' and 'scan_options'.
- *
- * The character list 'specials' specifies the set of special characters.
- * These characters are returned as Special c token; the following additional
- * rules apply:
- *
- * - Spaces:
- *   If ' ' in specials: A space character is returned as Special ' '.
- *       Note that there may also be an effect on how comments are returned
- *       (see below).
- *   If ' ' not in specials: Spaces are ignored.
- *
- * - Tabs, CRs, LFs:
- *   If '\t' in specials: A tab character is returned as Special '\t'.
- *   If '\t' not in specials: Tabs are ignored.
- *
- *   If '\r' in specials: A CR character is returned as Special '\r'.
- *   If '\r' not in specials: CRs are ignored.
- *
- *   If '\n' in specials: A LF character is returned as Special '\n'.
- *   If '\n' not in specials: LFs are ignored.
- *
- * - Comments:
- *   If '(' in specials: Comments are not recognized. The character '('
- *       is returned as Special '('.
- *   If '(' not in specials: Comments are recognized. How comments are
- *       returned, depends on the following:
- *       If Return_comments in scan_options: Outer comments are returned as
- *           Comment (note that inner comments count but
- *           are not returned as tokens)
- *       If otherwise ' ' in specials: Outer comments are returned as
- *           Special ' '
- *       Otherwise: Comments are recognized but ignored.
- *
- * - Quoted strings:
- *   If '"' in specials: Quoted strings are not recognized, and double quotes
- *       are returned as Special '"'.
- *   If '"' not in specials: Quoted strings are returned as QString tokens.
- *
- * - Domain literals:
- *   If '[' in specials: Domain literals are not recognized, and left brackets
- *       are returned as Special '['.
- *   If '[' not in specials: Domain literals are returned as DomainLiteral
- *       tokens.
- *
- * Note that the rule for domain literals is completely new in netstring-0.9.
- * It may cause incompatibilities with previous versions if '[' is not
- * special.
- *
- * The general rule for special characters: Every special character c is
- * returned as Special c, and any additional scanning functionality 
- * for this character is turned off.
- *
- * If recognized, quoted strings are returned as QString s, where
- * s is the string without the embracing quotes, and with already
- * decoded quoted pairs.
- *
- * Control characters c are returned as Control c.
- *
- * If recognized, comments may either be returned as spaces (in the case
- * you are not interested in the contents of comments), or as Comment tokens.
- * The contents of comments are not further scanned; you must start a
- * subscanner to analyze comments as structured values.
- *
- * If recognized, domain literals are returned as DomainLiteral s, where
- * s is the literal without brackets, and with decoded quoted pairs.
- *
- * Atoms are returned as Atom s where s is a longest sequence of
- * atomic characters (all characters which are neither special nor control
- * characters nor delimiters for substructures). If the option
- * Recognize_encoded_words is on, atoms which look like encoded words
- * are returned as EncodedWord tokens. (Important note: Neither '?' nor
- * '=' must be special in order to enable this functionality.)
- *
- * After the mime_scanner has been created, you can scan the tokens by
- * invoking scan_token which returns one token at a time, or by invoking
- * scan_token_list which returns all following tokens.
- *
- * There are two token types: s_token is the base type and is intended to
- * be used for pattern matching. s_extended_token is a wrapper that 
- * additionally contains information where the token occurs.
- *
- * SIMPLE INTERFACE
- *
- * Instead of creating a mime_scanner and calling the scan functions,
- * you may also invoke scan_structured_value. This function returns the
- * list of tokens directly; however, it is restricted to s_token.
- *
- * EXAMPLES
- *
- * scan_structured_value "user@domain.com" [ '@'; '.' ] []
- *   = [ Atom "user"; Special '@'; Atom "domain"; Special '.'; Atom "com" ]
- *
- * scan_structured_value "user @ domain . com" [ '@'; '.' ] []
- *   = [ Atom "user"; Special '@'; Atom "domain"; Special '.'; Atom "com" ]
- *
- * scan_structured_value "user(Do you know him?)@domain.com" [ '@'; '.' ] []
- *   = [ Atom "user"; Special '@'; Atom "domain"; Special '.'; Atom "com" ]
- *
- * scan_structured_value "user(Do you know him?)@domain.com" [ '@'; '.' ] 
- *     [ Return_comments ]
- *   = [ Atom "user"; Comment; Special '@'; Atom "domain"; Special '.'; 
- *       Atom "com" ]
- *
- * scan_structured_value "user (Do you know him?) @ domain . com" 
- *     [ '@'; '.'; ' ' ] []
- *   = [ Atom "user"; Special ' '; Special ' '; Special ' '; Special '@'; 
- *       Special ' '; Atom "domain";
- *       Special ' '; Special '.'; Special ' '; Atom "com" ]
- *
- * scan_structured_value "user (Do you know him?) @ domain . com" 
- *     [ '@'; '.'; ' ' ] [ Return_comments ]
- *   = [ Atom "user"; Special ' '; Comment; Special ' '; Special '@'; 
- *       Special ' '; Atom "domain";
- *       Special ' '; Special '.'; Special ' '; Atom "com" ]
- *
- * scan_structured_value "user @ domain . com" [ '@'; '.'; ' ' ] []
- *   = [ Atom "user"; Special ' '; Special '@'; Special ' '; Atom "domain";
- *       Special ' '; Special '.'; Special ' '; Atom "com" ]
- *
- * scan_structured_value "user(Do you know him?)@domain.com" ['@'; '.'; '(']
- *     []
- *   = [ Atom "user"; Special '('; Atom "Do"; Atom "you"; Atom "know";
- *       Atom "him?)"; Special '@'; Atom "domain"; Special '.'; Atom "com" ]
- *
- * scan_structured_value "\"My.name\"@domain.com" [ '@'; '.' ] []
- *   = [ QString "My.name"; Special '@'; Atom "domain"; Special '.';
- *       Atom "com" ]
- *
- * scan_structured_value "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=" 
- *     [ ] [ ] 
- *   = [ Atom "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=" ]
- *
- * scan_structured_value "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=" 
- *     [ ] [ Recognize_encoded_words ] 
- *   = [ EncodedWord("ISO-8859-1", "Q", "Keld_J=F8rn_Simonsen") ]
- *
- *)
-
-
-
-type s_token =
-    Atom of string
-  | EncodedWord of (string * string * string)
-  | QString of string
-  | Control of char
-  | Special of char
-  | DomainLiteral of string
-  | Comment
-  | End
-
-(* - Words are: Atom, EncodedWord, QString.
- * - Atom s: The character sequence forming the atom is contained in s
- * - EncodedWord(charset, encoding, encoded_string) means:
- *   * charset is the (uppercase) character set
- *   * encoding is either "Q" or "B"
- *   * encoded_string: contains the text of the word; the text is represented
- *     as octet string following the conventions for character set charset and 
- *     then encoded either as "Q" or "B" string.
- * - QString s: Here, s are the characters inside the double quotes after
- *   decoding any quoted pairs (backslash + character pairs)
- * - Control c: The control character c
- * - Special c: The special character c
- * - DomainLiteral s: s contains the characters inside the brackets after
- *   decoding any quoted pairs
- * - Comment: if the option Return_comments is specified, this token
- *   represents the whole comment.
- * - End: Is returned after the last token
- *)
-
-
-type s_option =
-    No_backslash_escaping
-      (* Do not handle backslashes in quoted string and comments as escape
-       * characters; backslashes are handled as normal characters.
-       * For example: "C:\dir\file" will be returned as
-       * QString "C:\dir\file", and not as QString "C:dirfile".
-       * - This is a common error in many MIME implementations.
-       *)
-  | Return_comments
-      (* Comments are returned as token Comment (unless '(' is included
-       * in the list of special characters, in which case comments are
-       * not recognized at all).
-       * You may get the exact location of the comment by applying
-       * get_pos and get_length to the extended token.
-       *)
-  | Recognize_encoded_words
-      (* Enables that encoded words are recognized and returned as
-       * EncodedWord(charset,encoding,content) instead of Atom.
-       *)
-
-type s_extended_token
-  (* An opaque type containing s_token plus:
-   * - where the token occurs
-   * - RFC-2047 access functions
-   *)
-
-val get_token : s_extended_token -> s_token
-    (* Return the s_token within the s_extended_token *)
-
-val get_decoded_word : s_extended_token -> string
-val get_charset : s_extended_token -> string
-    (* Return the decoded word (the contents of the word after decoding the
-     * "Q" or "B" representation), and the character set of the decoded word
-     * (uppercase).
-     * These functions not only work for EncodedWord:
-     * - Atom: Returns the atom without decoding it
-     * - QString: Returns the characters inside the double quotes, and
-     *   decodes any quoted pairs (backslash + character)
-     * - Control: Returns the one-character string
-     * - Special: Returns the one-character string
-     * - DomainLiteral: Returns the characters inside the brackets, and
-     *   decodes any quoted pairs
-     * - Comment: Returns ""
-     * The character set is "US-ASCII" for these tokens.
-     *)
-
-val get_pos : s_extended_token -> int
-    (* Return the byte position where the token starts in the string 
-     * (the first byte has position 0)
-     *)
-
-val get_line : s_extended_token -> int
-    (* Return the line number where the token starts (numbering begins
-     * usually with 1) 
-     *)
-
-val get_column : s_extended_token -> int
-    (* Return the column of the line where the token starts (first column
-     * is number 0)
-     *)
-
-val get_length : s_extended_token -> int
-    (* Return the length of the token in bytes *)
-
-val separates_adjacent_encoded_words : s_extended_token -> bool
-    (* True iff the current token is white space (Special ' ', Special '\t',
-     * Special '\r' or Special '\n') and the last non-white space token
-     * was EncodedWord and the next non-white space token will be
-     * EncodedWord.
-     * Such spaces do not count and must be ignored by any application.
-     *)
-
-
-type mime_scanner
-
-val create_mime_scanner : 
-      specials:char list -> 
-      scan_options:s_option list -> 
-      ?pos:int ->
-      ?line:int ->
-      ?column:int ->
-      string -> 
-        mime_scanner
-    (* Creates a new mime_scanner scanning the passed string.
-     * specials: The list of characters recognized as special characters.
-     * scan_options: The list of global options modifying the behaviour
-     *   of the scanner
-     * pos: The position of the byte where the scanner starts in the
-     *   passed string. Defaults to 0.
-     * line: The line number of this byte. Defaults to 1.
-     * column: The column number of this byte. Default to 0.
-     *
-     * The optional parameters pos, line, column are intentionally after
-     * scan_options and before the string argument, so you can specify
-     * scanners by partially applying arguments to create_mime_scanner
-     * which are not yet connected with a particular string:
-     * let my_scanner_spec = create_mime_scanner my_specials my_options in
-     * ...
-     * let my_scanner = my_scanner_spec my_string in 
-     * ...
-     *)
-
-val get_pos_of_scanner : mime_scanner -> int
-val get_line_of_scanner : mime_scanner -> int
-val get_column_of_scanner : mime_scanner -> int
-    (* Return the current position, line, and column of a mime_scanner.
-     * The primary purpose of these functions is to simplify switching
-     * from one mime_scanner to another within a string:
-     *
-     * let scanner1 = create_mime_scanner ... s in
-     * ... now scanning some tokens from s using scanner1 ...
-     * let scanner2 = create_mime_scanner ... 
-     *                  ?pos:(get_pos_of_scanner scanner1)
-     *                  ?line:(get_line_of_scanner scanner1)
-     *                  ?column:(get_column_of_scanner scanner1)
-     *                  s in
-     * ... scanning more tokens from s using scanner2 ...
-     *
-     * RESTRICTION: These functions are not available if the option
-     * Recognize_encoded_words is on. The reason is that this option
-     * enables look-ahead scanning; please use the location of the last
-     * scanned token instead.
-     * It is currently not clear whether a better implementation is needed
-     * (costs a bit more time).
-     *
-     * Note: To improve the performance of switching, it is recommended to
-     * create scanner specs in advance (see the example my_scanner_spec
-     * above).
-     *)
-
-val scan_token : mime_scanner -> (s_extended_token * s_token)
-    (* Returns the next token, or End if there is no more token. *)
-
-val scan_token_list : mime_scanner -> (s_extended_token * s_token) list
-    (* Returns all following tokens as a list (excluding End) *)
-
-val scan_structured_value : string -> char list -> s_option list -> s_token list
-    (* This function is included for backwards compatibility, and for all
-     * cases not requiring extended tokens.
-     *
-     * It scans the passed string according to the list of special characters
-     * and the list of options, and returns the list of all tokens.
-     *)
-
-val specials_rfc822 : char list
-val specials_rfc2045 : char list
-    (* The sets of special characters defined by the RFCs 822 and 2045.
-     *
-     * CHANGE in netstring-0.9: '[' and ']' are no longer special because
-     * there is now support for domain literals.
-     * '?' and '=' are not special in the rfc2045 version because there is
-     * already support for encoded words.
-     *)
-
-
-(**********************************************************************)
-
-(* Widely used scanners: *)
-
-
-val scan_encoded_text_value : string -> s_extended_token list
-    (* Scans a "text" value. The returned token list contains only
-     * Special, Atom and EncodedWord tokens. 
-     * Spaces, TABs, CRs, LFs are returned unless
-     * they occur between adjacent encoded words in which case
-     * they are ignored.
-     *)
-
-
-val scan_value_with_parameters : string -> s_option list ->
-                                   (string * (string * string) list)
-    (* let name, params = scan_value_with_parameters s options:
-     * Scans phrases like
-     *    name ; p1=v1 ; p2=v2 ; ...
-     * The scan is done with the set of special characters [';', '='].
-     *)
-
-val scan_mime_type : string -> s_option list ->
-                       (string * (string * string) list)
-    (* let name, params = scan_mime_type s options:
-     * Scans MIME types like
-     *    text/plain; charset=iso-8859-1
-     * The name of the type and the names of the parameters are converted
-     * to lower case.
-     *)
-
-
-(**********************************************************************)
-
-(* Scanners for MIME bodies *)
-
-val scan_multipart_body : string -> start_pos:int -> end_pos:int -> 
-                            boundary:string ->
-                            ((string * string) list * string) list
-    (* let [params1, value1; params2, value2; ...]
-     *   = scan_multipart_body s i0 i1 b
-     *
-     * Scans the string s that is the body of a multipart message.
-     * The multipart message begins at position i0 in s and i1 the position
-     * of the character following the message. In b the boundary string
-     * must be passed (this is the "boundary" parameter of the multipart
-     * MIME type, e.g. multipart/mixed;boundary="some string" ).
-     *     The return value is the list of the parts, where each part
-     * is returned as pair (params, value). The left component params
-     * is the list of name/value pairs of the header of the part. The
-     * right component is the RAW content of the part, i.e. if the part
-     * is encoded ("content-transfer-encoding"), the content is returned
-     * in the encoded representation. The caller must himself decode
-     * the content.
-     *     The material before the first boundary and after the last
-     * boundary is not returned.
-     *
-     * MULTIPART MESSAGES
-     *
-     * The MIME standard defines a way to group several message parts to
-     * a larger message (for E-Mails this technique is known as "attaching"
-     * files to messages); these are the so-called multipart messages.
-     * Such messages are recognized by the major type string "multipart",
-     * e.g. multipart/mixed or multipart/form-data. Multipart types MUST
-     * have a boundary parameter because boundaries are essential for the
-     * representation.
-     *    Multipart messages have a format like
-     *
-     * ...Header...
-     * Content-type: multipart/xyz; boundary="abc"
-     * ...Header...
-     *
-     * Body begins here ("prologue")
-     * --abc
-     * ...Header part 1...
-     *
-     * ...Body part 1...
-     * --abc
-     * ...Header part 2...
-     *
-     *
-     * ...Body part 2
-     * --abc
-     * ...
-     * --abc--
-     * Epilogue
-     *
-     * The parts are separated by boundary lines which begin with "--" and
-     * the string passed as boundary parameter. (Note that there may follow
-     * arbitrary text on boundary lines after "--abc".) The boundary is
-     * chosen such that it does not occur as prefix of any line of the
-     * inner parts of the message.
-     *     The parts are again MIME messages, with header and body. Note
-     * that it is explicitely allowed that the parts are even multipart
-     * messages.
-     *     The texts before the first boundary and after the last boundary
-     * are ignored.
-     *     Note that multipart messages as a whole MUST NOT be encoded.
-     * Only the PARTS of the messages may be encoded (if they are not
-     * multipart messages themselves).
-     *
-     * Please read RFC 2046 if want to know the gory details of this
-     * brain-dead format.
-     *)
-
-val scan_multipart_body_and_decode : string -> start_pos:int -> end_pos:int -> 
-                                        boundary:string ->
-                                        ((string * string) list * string) list
-    (* Same as scan_multipart_body, but decodes the bodies of the parts
-     * if they are encoded using the methods "base64" or "quoted printable".
-     * Fails, if an unknown encoding is used.
-     *)
-
-val scan_multipart_body_from_netstream
-    : Netstream.t ->
-      boundary:string ->
-      create:((string * string) list -> 'a) ->
-      add:('a -> Netstream.t -> int -> int -> unit) ->
-      stop:('a -> unit) ->
-      unit
-    (* scan_multipart_body_from_netstream s b create add stop:
-     *
-     * Reads the MIME message from the netstream s block by block. The
-     * parts are delimited by the boundary b.
-     *
-     * Once a new part is detected and begins, the function 'create' is
-     * called with the MIME header as argument. The result p of this function
-     * may be of any type.
-     *
-     * For every chunk of the part that is being read, the function 'add'
-     * is invoked: add p s k n.
-     * Here, p is the value returned by the 'create' invocation for the
-     * current part. s is the netstream. The current window of s contains
-     * the read chunk completely; the chunk begins at position k of the
-     * window (relative to the beginning of the window) and has a length
-     * of n bytes.
-     *
-     * When the part has been fully read, the function 'stop' is
-     * called with p as argument.
-     *
-     * That means, for every part the following is executed:
-     * - let p = create h
-     * - add p s k1 n1
-     * - add p s k2 n2
-     * - ...
-     * - add p s kN nN
-     * - stop p
-     *
-     * IMPORTANT PRECONDITION:
-     * - The block size of the netstream s must be at least
-     *   String.length b + 3
-     *
-     * EXCEPTIONS:
-     * - Exceptions can happen because of ill-formed input, and within
-     *   the callbacks of the functions 'create', 'add', 'stop'.
-     * - If the exception happens while part p is being read, and the
-     *   'create' function has already been called (successfully), the
-     *   'stop' function is also called (you have the chance to close files).
-     *)
-
-
-(* THREAD-SAFETY:
- * The functions are thread-safe as long as the threads do not share
- * values.
- *)
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.8  2000/08/13 00:04:36  gerd
- *     Encoded_word -> EncodedWord
- *     Bugfixes.
- *
- * Revision 1.7  2000/08/07 00:25:00  gerd
- *     Major update of the interface for structured field lexing.
- *
- * Revision 1.6  2000/06/25 22:34:43  gerd
- *     Added labels to arguments.
- *
- * Revision 1.5  2000/06/25 21:15:48  gerd
- *     Checked thread-safety.
- *
- * Revision 1.4  2000/05/16 22:29:12  gerd
- *     New "option" arguments specifying the level of MIME
- * compatibility.
- *
- * Revision 1.3  2000/04/15 13:09:01  gerd
- *     Implemented uploads to temporary files.
- *
- * Revision 1.2  2000/03/02 01:15:30  gerd
- *     Updated.
- *
- * Revision 1.1  2000/02/25 15:21:12  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/netstring/netbuffer.ml b/helm/DEVEL/pxp/netstring/netbuffer.ml
deleted file mode 100644 (file)
index d6fc40f..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-type t = 
-    { mutable buffer : string;
-      mutable length : int;
-    }
-
-(* To help the garbage collector:
- * The 'buffer' has a minimum length of 31 bytes. This minimum can still
- * be stored in the minor heap.
- * The 'buffer' has a length which is always near a multiple of two. This
- * limits the number of different bucket sizes, and simplifies reallocation
- * of freed memory.
- *)
-
-(* Optimal string length:
- * Every string takes: 1 word for the header, enough words for the 
- * contents + 1 Null byte (for C compatibility).
- * If the buffer grows, it is best to use a new string length such
- * that the number of words is exactly twice as large as for the previous
- * string.
- * n:              length of the previous string in bytes
- * w:              storage size of the previous string in words
- * n':             length of the new string in bytes
- * w' = 2*w:       storage size of the new string in words
- *
- * w = (n+1) / word_length + 1
- *            [it is assumed that (n+1) is always a multiple of word_length]
- *
- * n' = (2*w - 1) * word_length - 1
- *
- * n' = [2 * ( [n+1] / word_length + 1) - 1] * word_length - 1
- *    = ...
- *    = (2*n + 2) + word_length - 1
- *    = 2 * n + word_length + 1
- *
- * n'+1 is again a multiple of word_length:
- * n'+1 = 2*n + 2 + word_length
- *      = 2*(n+1) + word_length
- *      = a multiple of word_length because n+1 is a multiple of word_length
- *)
-
-let word_length = Sys.word_size / 8       (* in bytes *)
-
-let create n =
-  { buffer = String.create (max n 31); length = 0; }
-
-let contents b =
-  String.sub b.buffer 0 b.length
-    
-let sub b ~pos:k ~len:n =
-  if k+n > b.length then
-    raise (Invalid_argument "Netbuffer.sub");
-  String.sub b.buffer k n
-    
-let unsafe_buffer b =
-  b.buffer
-
-let length b =
-  b.length
-
-let add_string b s =
-  let l = String.length s in
-  if l + b.length > String.length b.buffer then begin
-    let l' = l + b.length in
-    let rec new_size s =
-      if s >= l' then s else new_size(2*s + word_length + 1)
-    in
-    let buffer' = String.create (new_size (String.length b.buffer)) in
-    String.blit b.buffer 0 buffer' 0 b.length;
-    b.buffer <- buffer'
-  end;
-  String.blit s 0 b.buffer b.length l;
-  b.length <- b.length + l
-    
-let add_sub_string b s ~pos:k ~len:l =
-  if l + b.length > String.length b.buffer then begin
-    let l' = l + b.length in
-    let rec new_size s =
-      if s >= l' then s else new_size(2*s + word_length + 1)
-    in
-    let buffer' = String.create (new_size (String.length b.buffer)) in
-    String.blit b.buffer 0 buffer' 0 b.length;
-    b.buffer <- buffer'
-  end;
-  String.blit s k b.buffer b.length l;
-  b.length <- b.length + l
-    
-let delete b ~pos:k ~len:l =
-  (* deletes l bytes at position k in b *)
-  let n = String.length b.buffer in
-  if k+l <> n & k <> n then
-    String.blit b.buffer (k+l) b.buffer k (n-l-k);
-  b.length <- b.length - l;
-  ()
-
-let try_shrinking b =
-  (* If the buffer size decreases drastically, reallocate the buffer *)
-  if b.length < (String.length b.buffer / 2) then begin
-    let rec new_size s =
-      if s >= b.length then s else new_size(2*s + word_length + 1)
-    in
-    let buffer' = String.create (new_size 31) in
-    String.blit b.buffer 0 buffer' 0 b.length;
-    b.buffer <- buffer'
-  end 
-
-let clear b =
-  delete b 0 (b.length)
-  
-let index_from b k c =
-  if k > b.length then
-    raise (Invalid_argument "Netbuffer.index_from");
-  let p = String.index_from b.buffer k c in
-  if p >= b.length then raise Not_found;
-  p
-
-let print_buffer b =
-  Format.printf
-    "<NETBUFFER: %d/%d>"
-    b.length
-    (String.length b.buffer)
-;;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/06/25 22:34:43  gerd
- *     Added labels to arguments.
- *
- * Revision 1.2  2000/06/24 20:20:33  gerd
- *     Added the toploop printer.
- *
- * Revision 1.1  2000/04/15 13:07:48  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netbuffer.mli b/helm/DEVEL/pxp/netstring/netbuffer.mli
deleted file mode 100644 (file)
index 0ecd61e..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-(* A Netbuffer.t is a buffer that can grow and shrink dynamically. *)
-
-type t
-
-val create : int -> t
-    (* Creates a netbuffer which allocates initially this number of bytes. 
-     * The logical length is zero.
-     *)
-
-val contents : t -> string
-    (* Returns the contents of the buffer as fresh string. *)
-
-val sub : t -> pos:int -> len:int -> string
-    (* sub nb k n: returns the n characters starting at position n from 
-     * netbuffer nb as fresh string
-     *)
-
-val length : t -> int
-    (* Returns the logical length of the buffer *)
-
-val add_string : t -> string -> unit
-    (* add_string nb s: Adds a copy of the string s to the logical end of
-     * the netbuffer nb. If necessary, the nb grows.
-     *)
-
-val add_sub_string : t -> string -> pos:int -> len:int -> unit
-    (* add_sub_string nb s k n: Adds the substring of s starting at position
-     * k with length n to the logical end of the netbuffer nb. If necessary,
-     * the nb grows.
-     * This is semantically the same as
-     * add_string nb (String.sub s k n), but the extra copy is avoided.
-     *)
-
-val delete : t -> pos:int -> len:int -> unit
-    (* delete nb k n: Deletes the n bytes at position k of netbuffer nb
-     * in-place.
-     * The netbuffer does not shrink!
-     *)
-
-val clear : t -> unit
-    (* deletes all contents from the buffer. As 'delete', the netbuffer does
-     * not shrink.
-     *)
-
-val try_shrinking : t -> unit
-    (* try_shrinking nb: If the length of the buffer is less than half of
-     * the allocated space, the netbuffer is reallocated in order to save
-     * memory.
-     *)
-
-val index_from : t -> int -> char -> int
-    (* index_from nb k c: Searches the character c in the netbuffer beginning
-     * at position k. If found, the position of the left-most occurence is
-     * returned. Otherwise, Not_found is raised.
-     *)
-
-val unsafe_buffer : t -> string
-    (* WARNING! This is a low-level function!
-     * Returns the current string that internally holds the buffer.
-     * The byte positions 0 to length - 1 actually store the contents of
-     * the buffer. You can directly read and modify the buffer. Note that
-     * there is no protection if you read or write positions beyond the
-     * length of the buffer.
-     *)
-
-val print_buffer : t -> unit
-    (* For the toploop *)
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/06/25 22:34:43  gerd
- *     Added labels to arguments.
- *
- * Revision 1.2  2000/06/24 20:20:33  gerd
- *     Added the toploop printer.
- *
- * Revision 1.1  2000/04/15 13:07:48  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netconversion.ml b/helm/DEVEL/pxp/netstring/netconversion.ml
deleted file mode 100644 (file)
index e740654..0000000
+++ /dev/null
@@ -1,864 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *)
-
-exception Malformed_code
-
-
-type encoding =
-  [  `Enc_utf8       (* UTF-8 *)
-  |  `Enc_java
-  |  `Enc_utf16      (* UTF-16 with unspecified endianess (restricted usage) *)
-  |  `Enc_utf16_le   (* UTF-16 little endian *)
-  |  `Enc_utf16_be   (* UTF-16 big endian *)
-  |  `Enc_usascii    (* US-ASCII (only 7 bit) *)
-  |  `Enc_iso88591   (* ISO-8859-1 *)
-  |  `Enc_iso88592   (* ISO-8859-2 *)
-  |  `Enc_iso88593   (* ISO-8859-3 *)
-  |  `Enc_iso88594   (* ISO-8859-4 *)
-  |  `Enc_iso88595   (* ISO-8859-5 *)
-  |  `Enc_iso88596   (* ISO-8859-6 *)
-  |  `Enc_iso88597   (* ISO-8859-7 *)
-  |  `Enc_iso88598   (* ISO-8859-8 *)
-  |  `Enc_iso88599   (* ISO-8859-9 *)
-  |  `Enc_iso885910  (* ISO-8859-10 *)
-  |  `Enc_iso885913  (* ISO-8859-13 *)
-  |  `Enc_iso885914  (* ISO-8859-14 *)
-  |  `Enc_iso885915  (* ISO-8859-15 *)
-  |  `Enc_koi8r      (* KOI8-R *)
-  |  `Enc_jis0201    (* JIS-0201 *)
-    (* Microsoft: *)
-  |  `Enc_windows1250  (* WINDOWS-1250 *)
-  |  `Enc_windows1251  (* WINDOWS-1251 *)
-  |  `Enc_windows1252  (* WINDOWS-1252 *)
-  |  `Enc_windows1253  (* WINDOWS-1253 *)
-  |  `Enc_windows1254  (* WINDOWS-1254 *)
-  |  `Enc_windows1255  (* WINDOWS-1255 *)
-  |  `Enc_windows1256  (* WINDOWS-1256 *)
-  |  `Enc_windows1257  (* WINDOWS-1257 *)
-  |  `Enc_windows1258  (* WINDOWS-1258 *)
-    (* IBM, ASCII-based: *)
-  |  `Enc_cp437
-  |  `Enc_cp737
-  |  `Enc_cp775
-  |  `Enc_cp850
-  |  `Enc_cp852
-  |  `Enc_cp855
-  |  `Enc_cp856
-  |  `Enc_cp857
-  |  `Enc_cp860
-  |  `Enc_cp861
-  |  `Enc_cp862
-  |  `Enc_cp863
-  |  `Enc_cp864
-  |  `Enc_cp865
-  |  `Enc_cp866
-  |  `Enc_cp869
-  |  `Enc_cp874
-  |  `Enc_cp1006
-   (* IBM, EBCDIC-based: *)
-  |  `Enc_cp037
-  |  `Enc_cp424
-  |  `Enc_cp500
-  |  `Enc_cp875
-  |  `Enc_cp1026
-   (* Adobe: *)
-  |  `Enc_adobe_standard_encoding
-  |  `Enc_adobe_symbol_encoding
-  |  `Enc_adobe_zapf_dingbats_encoding
-   (* Apple: *)
-  |  `Enc_macroman
-
-  ]
-;;
-
-
-let norm_enc_name e =
-  (* Removes some characters from e; uppercase *)
-  let e' = String.create (String.length e) in
-  let rec next i j =
-    if i < String.length e then
-      match e.[i] with
-         ('-'|'_'|'.') -> next (i+1) j
-       | c             -> e'.[j] <- c; next (i+1) (j+1)
-    else
-      j
-  in
-  let l = next 0 0 in
-  String.uppercase(String.sub e' 0 l)
-;;
-
-
-let encoding_of_string e =
-  match norm_enc_name e with
-      ("UTF16"|"UCS2"|"ISO10646UCS2")                 -> `Enc_utf16
-    | "UTF16BE"                                       -> `Enc_utf16_be
-    | "UTF16LE"                                       -> `Enc_utf16_le
-    | "UTF8"                                          -> `Enc_utf8
-    | ("UTF8JAVA"|"JAVA")                             -> `Enc_java
-    | ("USASCII"|"ASCII"|"ISO646US"|"IBM367"|"CP367") -> `Enc_usascii
-    | ("ISO88591"|"LATIN1"|"IBM819"|"CP819")          -> `Enc_iso88591
-    | ("ISO88592"|"LATIN2")                           -> `Enc_iso88592
-    | ("ISO88593"|"LATIN3")                           -> `Enc_iso88593
-    | ("ISO88594"|"LATIN4")                           -> `Enc_iso88594
-    | ("ISO88595"|"CYRILLIC")                         -> `Enc_iso88595
-    | ("ISO88596"|"ARABIC"|"ECMA114"|"ASMO708")       -> `Enc_iso88596
-    | ("ISO88597"|"GREEK"|"GREEK8"|"ELOT928"|"ECMA118") -> `Enc_iso88597
-    | ("ISO88598"|"HEBREW")                           -> `Enc_iso88598
-    | ("ISO88599"|"LATIN5")                           -> `Enc_iso88599
-    | ("ISO885910"|"LATIN6")                          -> `Enc_iso885910
-    | "ISO885913"                                     -> `Enc_iso885913
-    | "ISO885914"                                     -> `Enc_iso885914
-    | "ISO885915"                                     -> `Enc_iso885915
-    | "KOI8R"                                         -> `Enc_koi8r
-    | ("JIS0201"|"JISX0201"|"X0201")                  -> `Enc_jis0201
-
-    | "WINDOWS1250"                                   -> `Enc_windows1250
-    | "WINDOWS1251"                                   -> `Enc_windows1251
-    | "WINDOWS1252"                                   -> `Enc_windows1252
-    | "WINDOWS1253"                                   -> `Enc_windows1253
-    | "WINDOWS1254"                                   -> `Enc_windows1254
-    | "WINDOWS1255"                                   -> `Enc_windows1255
-    | "WINDOWS1256"                                   -> `Enc_windows1256
-    | "WINDOWS1257"                                   -> `Enc_windows1257
-    | "WINDOWS1258"                                   -> `Enc_windows1258
-
-    | ("CP437"|"IBM437")                              -> `Enc_cp437
-    | ("CP737"|"IBM737")                              -> `Enc_cp737
-    | ("CP775"|"IBM775")                              -> `Enc_cp775
-    | ("CP850"|"IBM850")                              -> `Enc_cp850
-    | ("CP852"|"IBM852")                              -> `Enc_cp852
-    | ("CP855"|"IBM855")                              -> `Enc_cp855
-    | ("CP856"|"IBM856")                              -> `Enc_cp856
-    | ("CP857"|"IBM857")                              -> `Enc_cp857
-    | ("CP860"|"IBM860")                              -> `Enc_cp860
-    | ("CP861"|"IBM861")                              -> `Enc_cp861
-    | ("CP862"|"IBM862")                              -> `Enc_cp862
-    | ("CP863"|"IBM863")                              -> `Enc_cp863
-    | ("CP864"|"IBM864")                              -> `Enc_cp864
-    | ("CP865"|"IBM865")                              -> `Enc_cp865
-    | ("CP866"|"IBM866")                              -> `Enc_cp866
-    | ("CP869"|"IBM869")                              -> `Enc_cp869
-    | ("CP874"|"IBM874")                              -> `Enc_cp874
-    | ("CP1006"|"IBM1006")                            -> `Enc_cp1006
-
-    | ("CP037"|"IBM037"|"EBCDICCPUS"|"EBCDICCPCA"|"EBCDICCPWT"|
-       "EBCDICCPNL")                                  -> `Enc_cp037
-    | ("CP424"|"IBM424"|"EBCDICCPHE")                 -> `Enc_cp424
-    | ("CP500"|"IBM500"|"EBCDICCPBE"|"EBCDICCPCH")    -> `Enc_cp500
-    | ("CP875"|"IBM875")                              -> `Enc_cp875
-    | ("CP1026"|"IBM1026")                            -> `Enc_cp1026
-
-    | "ADOBESTANDARDENCODING"       -> `Enc_adobe_standard_encoding
-    | "ADOBESYMBOLENCODING"         -> `Enc_adobe_symbol_encoding
-    | "ADOBEZAPFDINGBATSENCODING"   -> `Enc_adobe_zapf_dingbats_encoding
-
-    | "MACINTOSH"                   -> `Enc_macroman
-
-    | _ ->
-       failwith "Netconversion.encoding_of_string: unknown encoding"
-;;
-
-
-let string_of_encoding (e : encoding) =
-  (* If there is a "preferred MIME name", this name is returned (see IANA). *)
-  match e with
-      `Enc_utf16    -> "UTF-16"
-    | `Enc_utf16_be -> "UTF-16-BE"
-    | `Enc_utf16_le -> "UTF-16-LE"
-    | `Enc_utf8     -> "UTF-8"
-    | `Enc_java     -> "UTF-8-JAVA"
-    | `Enc_usascii  -> "US-ASCII"
-    | `Enc_iso88591 -> "ISO-8859-1"
-    | `Enc_iso88592 -> "ISO-8859-2"
-    | `Enc_iso88593 -> "ISO-8859-3"
-    | `Enc_iso88594 -> "ISO-8859-4"
-    | `Enc_iso88595 -> "ISO-8859-5"
-    | `Enc_iso88596 -> "ISO-8859-6"
-    | `Enc_iso88597 -> "ISO-8859-7"
-    | `Enc_iso88598 -> "ISO-8859-8"
-    | `Enc_iso88599 -> "ISO-8859-9"
-    | `Enc_iso885910 -> "ISO-8859-10"
-    | `Enc_iso885913 -> "ISO-8859-13"
-    | `Enc_iso885914 -> "ISO-8859-14"
-    | `Enc_iso885915 -> "ISO-8859-15"
-    | `Enc_koi8r     -> "KOI8-R"
-    | `Enc_jis0201   -> "JIS_X0201"
-    | `Enc_windows1250 -> "WINDOWS-1250"
-    | `Enc_windows1251 -> "WINDOWS-1251"
-    | `Enc_windows1252 -> "WINDOWS-1252"
-    | `Enc_windows1253 -> "WINDOWS-1253"
-    | `Enc_windows1254 -> "WINDOWS-1254"
-    | `Enc_windows1255 -> "WINDOWS-1255"
-    | `Enc_windows1256 -> "WINDOWS-1256"
-    | `Enc_windows1257 -> "WINDOWS-1257"
-    | `Enc_windows1258 -> "WINDOWS-1258"
-    | `Enc_cp437   -> "CP437"
-    | `Enc_cp737   -> "CP737"
-    | `Enc_cp775   -> "CP775"
-    | `Enc_cp850   -> "CP850"
-    | `Enc_cp852   -> "CP852"
-    | `Enc_cp855   -> "CP855"
-    | `Enc_cp856   -> "CP856"
-    | `Enc_cp857   -> "CP857"
-    | `Enc_cp860   -> "CP860"
-    | `Enc_cp861   -> "CP861"
-    | `Enc_cp862   -> "CP862"
-    | `Enc_cp863   -> "CP863"
-    | `Enc_cp864   -> "CP864"
-    | `Enc_cp865   -> "CP865"
-    | `Enc_cp866   -> "CP866"
-    | `Enc_cp869   -> "CP869"
-    | `Enc_cp874   -> "CP874"
-    | `Enc_cp1006  -> "CP1006"
-    | `Enc_cp037   -> "CP037"
-    | `Enc_cp424   -> "CP424"
-    | `Enc_cp500   -> "CP500"
-    | `Enc_cp875   -> "CP875"
-    | `Enc_cp1026  -> "CP1026"
-    | `Enc_adobe_standard_encoding      -> "ADOBE-STANDARD-ENCODING"
-    | `Enc_adobe_symbol_encoding        -> "ADOBE-SYMBOL-ENCODING"
-    | `Enc_adobe_zapf_dingbats_encoding -> "ADOBE-ZAPF-DINGBATS-ENCODING"
-    | `Enc_macroman                     -> "MACINTOSH"
-;;
-
-
-let read_iso88591 write s_in p_in l_in =
-  let rec scan k_in k_out c_out =
-    if k_in < l_in then begin
-      let p = Char.code s_in.[p_in + k_in] in
-      let n = write p k_out c_out in
-      if n < 0 then
-       k_in, k_out, `Enc_iso88591
-      else
-       scan (k_in + 1) (k_out + n) (c_out + 1)
-    end
-    else
-      k_in, k_out, `Enc_iso88591
-  in
-  scan 0 0 0
-;;
-
-
-let read_usascii write s_in p_in l_in =
-  let rec scan k_in k_out c_out =
-    if k_in < l_in then begin
-      let p = Char.code s_in.[p_in + k_in] in
-      if p >= 0x80 then raise Malformed_code;
-      let n = write p k_out c_out in
-      if n < 0 then
-       k_in, k_out, `Enc_usascii
-      else
-       scan (k_in + 1) (k_out + n) (c_out + 1)
-    end
-    else
-      k_in, k_out, `Enc_usascii
-  in
-  scan 0 0 0
-;;
-
-
-let read_8bit m_to_unicode enc write s_in p_in l_in =
-  let rec scan k_in k_out c_out =
-    if k_in < l_in then begin
-      let p_local = Char.code s_in.[p_in + k_in] in
-      let p_uni = Array.unsafe_get m_to_unicode p_local in
-      if p_uni < 0 then raise Malformed_code;
-      let n = write p_uni k_out c_out in
-      if n < 0 then
-       k_in, k_out, enc
-      else
-       scan (k_in + 1) (k_out + n) (c_out + 1)
-    end
-    else
-      k_in, k_out, enc
-  in
-  scan 0 0 0
-;;
-
-
-let read_utf8 is_java write s_in p_in l_in =
-  let rec scan k_in k_out c_out =
-    if k_in < l_in then begin
-      let n_out, n_in =
-       match s_in.[p_in + k_in] with
-           '\000' ->
-             if is_java then raise Malformed_code;
-             write 0 k_out c_out, 1
-         | ('\001'..'\127' as c) ->
-             write (Char.code c) k_out c_out, 1
-         | ('\128'..'\223' as c) ->
-             if k_in + 1 >= l_in then
-               -1, 0
-             else begin
-               let n1 = Char.code c in
-               let n2 = Char.code (s_in.[p_in + k_in + 1]) in
-               if is_java && (n1 = 0x80 && n2 = 0xc0) then
-                 write 0 k_out c_out, 2
-               else begin
-                 if n2 < 128 or n2 > 191 then raise Malformed_code;
-                 let p = ((n1 land 0b11111) lsl 6) lor (n2 land 0b111111) in
-                 if p < 128 then raise Malformed_code;
-                 write p k_out c_out, 2
-               end
-             end
-         | ('\224'..'\239' as c) ->
-             if k_in + 2 >= l_in then
-               -1, 0
-             else begin
-               let n1 = Char.code c in
-               let n2 = Char.code (s_in.[p_in + k_in + 1]) in
-               let n3 = Char.code (s_in.[p_in + k_in + 2]) in
-               if n2 < 128 or n2 > 191 then raise Malformed_code;
-               if n3 < 128 or n3 > 191 then raise Malformed_code;
-               let p =
-                 ((n1 land 0b1111) lsl 12) lor
-                 ((n2 land 0b111111) lsl 6) lor
-                 (n3 land 0b111111)
-               in
-               if p < 0x800 then raise Malformed_code;
-               if (p >= 0xd800 && p < 0xe000) then
-                 (* Surrogate pairs are not supported in UTF-8 *)
-                 raise Malformed_code;
-               if (p >= 0xfffe && p <= 0xffff) then
-                 raise Malformed_code;
-               write p k_out c_out, 3
-             end
-         | ('\240'..'\247' as c) ->
-             if k_in + 3 >= l_in then
-               -1, 0
-             else begin
-               let n1 = Char.code c in
-               let n2 = Char.code (s_in.[p_in + k_in + 1]) in
-               let n3 = Char.code (s_in.[p_in + k_in + 2]) in
-               let n4 = Char.code (s_in.[p_in + k_in + 3]) in
-               if n2 < 128 or n2 > 191 then raise Malformed_code;
-               if n3 < 128 or n3 > 191 then raise Malformed_code;
-               if n4 < 128 or n4 > 191 then raise Malformed_code;
-               let p = ((n1 land 0b111) lsl 18) lor
-                       ((n2 land 0b111111) lsl 12) lor
-                       ((n3 land 0b111111) lsl 6) lor
-                       (n4 land 0b111111)
-               in
-               if p < 0x10000 then raise Malformed_code;
-               if p >= 0x110000 then
-                 (* These code points are not supported. *)
-                 raise Malformed_code;
-               write p k_out c_out, 4
-             end
-         | _ ->
-             (* Outside the valid range of XML characters *)
-             raise Malformed_code;
-      in
-      (* n_out: number of written bytes; -1 means out buf is full
-       * n_in: number of read bytes; 0 means end of in buf reached
-       * n_in = 0  implies  n_out = -1
-       *)
-      if n_out < 0 then
-       k_in, k_out, `Enc_utf8
-      else
-       scan (k_in + n_in) (k_out + n_out) (c_out + 1)
-    end
-    else
-      k_in, k_out, `Enc_utf8
-  in
-  scan 0 0 0
-;;
-
-
-let surrogate_offset = 0x10000 - (0xD800 lsl 10) - 0xDC00;;
-       
-let read_utf16_le k_in_0 write s_in p_in l_in =
-  let rec scan k_in k_out c_out =
-    if k_in + 1 < l_in then begin
-      let p = (Char.code s_in.[p_in + k_in]) lor ((Char.code s_in.[p_in + k_in + 1]) lsl 8) in
-
-      if p >= 0xd800 & p < 0xe000 then begin
-       (* This is a surrogate pair. *)
-       if k_in + 3 < l_in then begin
-         if p <= 0xdbff then begin
-           let q = (Char.code s_in.[p_in + k_in + 2 ]) lor
-                   ((Char.code s_in.[p_in + k_in + 3]) lsl 8) in
-           if q < 0xdc00 or q > 0xdfff then raise Malformed_code;
-           let eff_p = (p lsl 10) + q + surrogate_offset in
-           let n = write eff_p k_out c_out in
-           if n < 0 then
-             k_in, k_out, `Enc_utf16_le
-           else
-             scan (k_in + 4) (k_out + n) (c_out + 1)
-         end
-         else
-           (* Malformed pair: *)
-           raise Malformed_code;
-       end
-       else 
-         (* Incomplete pair: *)
-         k_in, k_out, `Enc_utf16_le
-      end
-
-      else
-       if p = 0xfffe then 
-         (* Big endian byte order mark: It is illegal here *)
-         raise Malformed_code
-       else begin
-         (* A regular code point *)
-         let n = write p k_out c_out in
-         if n < 0 then
-           k_in, k_out, `Enc_utf16_le
-         else
-           scan (k_in + 2) (k_out + n) (c_out + 1)
-       end
-    end
-    else
-      (* Incomplete character: *)
-      k_in, k_out, `Enc_utf16_le
-  in
-  scan k_in_0 0 0
-;;
-
-
-let read_utf16_be k_in_0 write s_in p_in l_in =
-  let rec scan k_in k_out c_out =
-    if k_in + 1 < l_in then begin
-      let p = (Char.code s_in.[p_in + k_in + 1]) lor ((Char.code s_in.[p_in + k_in]) lsl 8) in
-
-      if p >= 0xd800 & p < 0xe000 then begin
-       (* This is a surrogate pair. *)
-       if k_in + 3 < l_in then begin
-         if p <= 0xdbff then begin
-           let q = (Char.code s_in.[p_in + k_in + 3 ]) lor
-                   ((Char.code s_in.[p_in + k_in + 2]) lsl 8) in
-           if q < 0xdc00 or q > 0xdfff then raise Malformed_code;
-           let eff_p = (p lsl 10) + q + surrogate_offset in
-           let n = write eff_p k_out c_out in
-           if n < 0 then
-             k_in, k_out, `Enc_utf16_be
-           else
-             scan (k_in + 4) (k_out + n) (c_out + 1)
-         end
-         else
-           (* Malformed pair: *)
-           raise Malformed_code;
-       end
-       else 
-         (* Incomplete pair: *)
-         k_in, k_out, `Enc_utf16_be
-      end
-
-      else
-       if p = 0xfffe then
-         (* Little endian byte order mark: It is illegal here *)
-         raise Malformed_code
-       else begin
-         (* A regular code point *)
-         let n = write p k_out c_out in
-         if n < 0 then
-           k_in, k_out, `Enc_utf16_be
-         else
-           scan (k_in + 2) (k_out + n) (c_out + 1)
-       end
-
-    end
-    else
-      (* Incomplete character: *)
-      k_in, k_out, `Enc_utf16_be
-  in
-  scan k_in_0 0 0
-;;
-
-
-let read_utf16 write s_in p_in l_in =
-  (* Expect a BOM at the beginning of the text *)
-  if l_in >= 2 then begin
-    let c0 = s_in.[p_in + 0] in
-    let c1 = s_in.[p_in + 1] in
-    if c0 = '\254' & c1 = '\255' then begin
-      (* 0xfeff as big endian *)
-      read_utf16_be 2 write s_in p_in l_in
-    end
-    else 
-      if c0 = '\255' & c1 = '\254' then begin
-       (* 0xfeff as little endian *)
-       read_utf16_le 2 write s_in p_in l_in
-      end
-      else
-       (* byte order mark missing *)
-       raise Malformed_code
-  end
-  else
-    0, 0, `Enc_utf16
-;;
-
-
-let write_iso88591 s_out p_out l_out max_chars w p k_out c_out =
-  if k_out < l_out && c_out < max_chars then begin
-    if p > 255 then begin
-      let subst = w p in
-      let l_subst =  String.length subst in
-      if k_out + l_subst <= l_out then begin
-       (* Enough space to store 'subst': *)
-       String.blit subst 0 s_out (k_out+p_out) l_subst;
-       l_subst
-      end
-      else
-       (* Not enough space: Stop this round of recoding *)
-       -1
-    end
-    else begin
-      s_out.[p_out + k_out] <- Char.chr p;
-      1
-    end
-  end
-  else
-    -1   (* End-of-buffer indicator *)
-;;
-
-
-let write_usascii s_out p_out l_out max_chars w p k_out c_out =
-  if k_out < l_out && c_out < max_chars then begin
-    if p > 127 then begin
-      let subst = w p in
-      let l_subst =  String.length subst in
-      if k_out + l_subst <= l_out then begin
-       (* Enough space to store 'subst': *)
-       String.blit subst 0 s_out (k_out+p_out) l_subst;
-       l_subst
-      end
-      else
-       (* Not enough space: Stop this round of recoding *)
-       -1
-    end
-    else begin
-      s_out.[p_out + k_out] <- Char.chr p;
-      1
-    end
-  end
-  else
-    -1   (* End-of-buffer indicator *)
-;;
-
-
-let write_8bit from_unicode s_out p_out l_out max_chars w p k_out c_out =
-  if k_out < l_out && c_out < max_chars then begin
-    let p' =
-      match Array.unsafe_get from_unicode (p land 255) with
-         Netmappings.U_nil -> -1
-       | Netmappings.U_single (p0,q0) ->
-           if p0 = p then q0 else -1
-       | Netmappings.U_list l ->
-           (try List.assoc p l with Not_found -> -1)
-    in
-    if p' < 0 then begin
-      let subst = w p in
-      let l_subst =  String.length subst in
-      if k_out + l_subst <= l_out then begin
-       (* Enough space to store 'subst': *)
-       String.blit subst 0 s_out (k_out+p_out) l_subst;
-       l_subst
-      end
-      else
-       (* Not enough space: Stop this round of recoding *)
-       -1
-    end
-    else begin
-      s_out.[p_out + k_out] <- Char.chr p';
-      1
-    end
-  end
-  else
-    -1   (* End-of-buffer indicator *)
-;;
-
-
-let write_utf8 is_java s_out p_out l_out max_chars w p k_out c_out =
-  if p <= 127 && (not is_java || p <> 0) then begin
-    if k_out < l_out && c_out < max_chars then begin
-      s_out.[p_out + k_out] <- Char.chr p;
-      1
-    end
-    else -1
-  end
-  else if p <= 0x7ff then begin
-    if k_out + 1 < l_out && c_out < max_chars then begin
-      s_out.[p_out + k_out]     <- Char.chr (0xc0 lor (p lsr 6));
-      s_out.[p_out + k_out + 1] <- Char.chr (0x80 lor (p land 0x3f));
-      2
-    end
-    else -1
-  end
-  else if p <= 0xffff then begin
-    (* Refuse writing surrogate pairs, and fffe, ffff *)
-    if (p >= 0xd800 & p < 0xe000) or (p >= 0xfffe) then
-      failwith "Netconversion.write_utf8";
-    if k_out + 2 < l_out && c_out < max_chars then begin
-      s_out.[p_out + k_out]     <- Char.chr (0xe0 lor (p lsr 12));
-      s_out.[p_out + k_out + 1] <- Char.chr (0x80 lor ((p lsr 6) land 0x3f));
-      s_out.[p_out + k_out + 2] <- Char.chr (0x80 lor (p land 0x3f));
-      3
-    end
-    else -1
-  end
-  else if p <= 0x10ffff then begin
-    if k_out + 3 < l_out && c_out < max_chars then begin
-      s_out.[p_out + k_out]     <- Char.chr (0xf0 lor (p lsr 18));
-      s_out.[p_out + k_out + 1] <- Char.chr (0x80 lor ((p lsr 12) land 0x3f));
-      s_out.[p_out + k_out + 2] <- Char.chr (0x80 lor ((p lsr 6)  land 0x3f));
-      s_out.[p_out + k_out + 3] <- Char.chr (0x80 lor (p land 0x3f));
-      4
-    end
-    else -1
-  end
-  else
-    (* Higher code points are not possible in XML: *)
-    failwith "Netconversion.write_utf8"
-;;
-
-
-let write_utf16_le s_out p_out l_out max_chars w p k_out c_out =
-  if p >= 0xfffe then begin
-    if p <= 0xffff or p > 0x10ffff then failwith "Netconversion.write_utf16_le";
-    (* Must be written as surrogate pair *)
-    if k_out + 3 < l_out && c_out < max_chars then begin
-      let high = (p lsr 10) + 0xd800 in
-      let low  = (p land 0x3ff) + 0xdc00 in
-      s_out.[p_out + k_out    ] <- Char.chr (high land 0xff);
-      s_out.[p_out + k_out + 1] <- Char.chr (high lsr 8);
-      s_out.[p_out + k_out + 2] <- Char.chr (low land 0xff);
-      s_out.[p_out + k_out + 3] <- Char.chr (low lsr 8);
-      4
-    end
-    else -1
-  end
-  else begin
-    if k_out + 1 < l_out && c_out < max_chars then begin
-      s_out.[p_out + k_out    ] <- Char.chr (p land 0xff);
-      s_out.[p_out + k_out + 1] <- Char.chr (p lsr 8);
-      2
-    end
-    else
-      -1
-  end
-;;
-
-
-let write_utf16_be s_out p_out l_out max_chars w p k_out c_out =
-  if p >= 0xfffe then begin
-    if p <= 0xffff or p > 0x10ffff then failwith "Netconversion.write_utf16_be";
-    (* Must be written as surrogate pair *)
-    if k_out + 3 < l_out && c_out < max_chars then begin
-      let high = (p lsr 10) + 0xd800 in
-      let low  = (p land 0x3ff) + 0xdc00 in
-      s_out.[p_out + k_out + 1] <- Char.chr (high land 0xff);
-      s_out.[p_out + k_out    ] <- Char.chr (high lsr 8);
-      s_out.[p_out + k_out + 3] <- Char.chr (low land 0xff);
-      s_out.[p_out + k_out + 2] <- Char.chr (low lsr 8);
-      4
-    end
-    else -1
-  end
-  else begin
-    if k_out + 1 < l_out && c_out < max_chars then begin
-      s_out.[p_out + k_out + 1] <- Char.chr (p land 0xff);
-      s_out.[p_out + k_out    ] <- Char.chr (p lsr 8);
-      2
-    end
-    else
-      -1
-  end
-;;
-
-
-let recode ~in_enc
-           ~in_buf
-          ~in_pos
-          ~in_len
-          ~out_enc
-          ~out_buf
-           ~out_pos
-          ~out_len
-          ~max_chars
-          ~subst =
-  if (in_pos < 0  || in_len < 0  || in_pos  + in_len  > String.length in_buf ||
-      out_pos < 0 || out_len < 0 || out_pos + out_len > String.length out_buf)
-  then
-    invalid_arg "Netconversion.recode";
-
-  let reader =
-    match in_enc with
-       `Enc_iso88591 -> read_iso88591
-      | `Enc_usascii  -> read_usascii
-      | `Enc_utf8     -> read_utf8 false
-      | `Enc_java     -> read_utf8 true
-      | `Enc_utf16    -> read_utf16
-      | `Enc_utf16_le -> read_utf16_le 0
-      | `Enc_utf16_be -> read_utf16_be 0
-      | _             -> 
-         (try
-            let to_unicode' = Hashtbl.find Netmappings.to_unicode in_enc in
-            let to_unicode =
-              Netmappings.lock();
-              Lazy.force to_unicode' in
-            Netmappings.unlock();
-            read_8bit to_unicode in_enc
-          with
-              Not_found ->
-                failwith("Support for the encoding `" ^
-                         string_of_encoding in_enc ^ 
-                         "' has not been compiled into Netstring")
-         )
-  in
-  let writer =
-    match out_enc with
-       `Enc_iso88591 -> write_iso88591  out_buf out_pos out_len max_chars subst
-      | `Enc_usascii  -> write_usascii   out_buf out_pos out_len max_chars subst
-      | `Enc_utf8     -> write_utf8 false 
-                                         out_buf out_pos out_len max_chars subst
-      | `Enc_java     -> write_utf8 true out_buf out_pos out_len max_chars subst
-      | `Enc_utf16    -> failwith "Netconversion.recode"
-      | `Enc_utf16_le -> write_utf16_le  out_buf out_pos out_len max_chars subst
-      | `Enc_utf16_be -> write_utf16_be  out_buf out_pos out_len max_chars subst
-      | _             -> 
-         (try
-            let from_unicode' = Hashtbl.find Netmappings.from_unicode out_enc 
-            in
-            let from_unicode =
-              Netmappings.lock();
-              Lazy.force from_unicode' in
-            Netmappings.unlock();
-            write_8bit from_unicode out_buf out_pos out_len max_chars subst
-          with
-              Not_found ->
-                failwith("Support for the encoding `" ^
-                         string_of_encoding out_enc ^ 
-                         "' has not been compiled into Netstring")
-         )
-  in
-  reader writer in_buf in_pos in_len
-;;
-
-
-let makechar enc p =
-  match enc with
-      `Enc_iso88591 -> 
-       if p > 255 then raise Not_found;
-       String.make 1 (Char.chr p)
-    | `Enc_usascii ->
-       if p > 127 then raise Not_found;
-       String.make 1 (Char.chr p)
-    | `Enc_utf8 ->
-       let s = String.create 4 in
-       let n = write_utf8 false s 0 4 1 (fun _ -> raise Not_found) p 0 0 in
-       String.sub s 0 n
-    | `Enc_java ->
-       let s = String.create 4 in
-       let n = write_utf8 true s 0 4 1 (fun _ -> raise Not_found) p 0 0 in
-       String.sub s 0 n
-    | `Enc_utf16_le ->
-       let s = String.create 4 in
-       let n = write_utf16_le s 0 4 1 (fun _ -> raise Not_found) p 0 0 in
-       String.sub s 0 n
-    | `Enc_utf16_be ->
-       let s = String.create 4 in
-       let n = write_utf16_be s 0 4 1 (fun _ -> raise Not_found) p 0 0 in
-       String.sub s 0 n
-    | `Enc_utf16 ->
-       failwith "Netconversion.makechar"
-    | _ ->
-       let s = String.create 1 in
-       let from_unicode' = 
-         try
-           Hashtbl.find Netmappings.from_unicode enc 
-         with
-             Not_found ->
-               failwith("Support for the encoding `" ^
-                        string_of_encoding enc ^ 
-                        "' has not been compiled into Netstring")
-       in
-       let from_unicode =
-         Netmappings.lock();
-         Lazy.force from_unicode' in
-       Netmappings.unlock();
-       let n =
-         write_8bit from_unicode s 0 1 1 (fun _ -> raise Not_found) p 0 0 in
-       s
-;;
-
-
-let recode_string ~in_enc ~out_enc ?(subst = (fun _ -> raise Not_found)) s =
-
-  let length = String.length s in
-  let size = 1024 in
-  let out_buf = String.create size in
-
-  let rec recode_loop k s_done in_enc =
-    (* 'k' bytes of 's' have already been processed, and the result is in
-     * 's_done'.
-     *)
-    (* Recode to 'out_buf': *)
-    let in_len = length - k in
-    let in_done, out_done, in_enc' =
-      recode ~in_enc:in_enc   ~in_buf:s        ~in_pos:k     ~in_len:in_len
-             ~out_enc:out_enc ~out_buf:out_buf ~out_pos:0    ~out_len:size  
-             ~max_chars:size  ~subst:subst in
-    (* Collect the results: *)
-    let k' = k + in_done in
-    let s_done' = String.sub out_buf 0 out_done :: s_done in
-    (* Still something to do? *)
-    if k' < length then
-      recode_loop k' s_done' in_enc'
-    else
-      (* No: Concatenate s_done' to get the final result. *)
-      String.concat "" (List.rev s_done')
-  in
-
-  recode_loop 0 [] in_enc
-;;
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/08/29 00:46:41  gerd
- *     New type for the Unicode to 8 bit translation table.
- *     The Netmappings tables are now Lazy.t.
- *
- * Revision 1.1  2000/08/13 00:02:57  gerd
- *     Initial revision.
- *
- *
- * ======================================================================
- * OLD LOGS FROM THE PXP PACKAGE (FILE NAME pxp_encoding.ml):
- * 
- * Revision 1.5  2000/07/27 00:41:14  gerd
- *     new 8 bit codes
- *
- * Revision 1.4  2000/07/04 22:11:41  gerd
- *     Implemented the enhancements and extensions of
- * rev. 1.4 of pxp_encoding.mli.
- *
- * Revision 1.3  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * Revision 1.2  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.1  2000/05/20 20:30:50  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netconversion.mli b/helm/DEVEL/pxp/netstring/netconversion.mli
deleted file mode 100644 (file)
index 5e3e4b4..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *)
-
-exception Malformed_code
-
-(* Encodings:
- * - With the exception of UTF-8 and UTF-16, only single-byte character sets
- *   are supported.
- * - I took the mappings from www.unicode.org, and the standard names of
- *   the character sets from IANA. Obviously, many character sets are missing
- *   that can be supported; especially ISO646 character sets, many EBCDIC 
- *   code pages. 
- * - Because of the copyright statement from Unicode, I cannot put the
- *   source tables that describe the mappings into the distribution. They
- *   are publicly available from www.unicode.org.
- * - Because of this, it is difficult for you to extend the list of character 
- *   sets; you need the source tables I am not allowed to distribute.
- *   These tables have a very simple format: Every line describes a pair
- *   of code points; the left code (<= 0xff) is the code in the character
- *   set, the right code (<= 0xffff) is the Unicode equivalent.
- *   For an example, see
- *   http://www.unicode.org/Public/MAPPINGS/ISO8859/8859-2.TXT
- *   You can send me such files, and I will integrate them into the 
- *   distribution (if possible).
- * - I really do not know very much about the character sets used in
- *   East Asia. If you need them, please write the necessary conversion
- *   functions and send them to me.
- *
- * KNOWN PROBLEMS:
- * - The following charsets do not have a bijective mapping to Unicode:
- *   adobe_standard_encoding, adobe_symbol_encoding, 
- *   adobe_zapf_dingbats_encoding, cp1002 (0xFEBE). The current implementation
- *   simply removes one of the conflicting code point pairs - this might
- *   not what you want.
- *)
-
-type encoding =
-  [  `Enc_utf8       (* UTF-8 *)
-  |  `Enc_java       (* The variant of UTF-8 used by Java *)
-  |  `Enc_utf16      (* UTF-16 with unspecified endianess (restricted usage) *)
-  |  `Enc_utf16_le   (* UTF-16 little endian *)
-  |  `Enc_utf16_be   (* UTF-16 big endian *)
-  |  `Enc_usascii    (* US-ASCII (only 7 bit) *)
-  |  `Enc_iso88591   (* ISO-8859-1 *)
-  |  `Enc_iso88592   (* ISO-8859-2 *)
-  |  `Enc_iso88593   (* ISO-8859-3 *)
-  |  `Enc_iso88594   (* ISO-8859-4 *)
-  |  `Enc_iso88595   (* ISO-8859-5 *)
-  |  `Enc_iso88596   (* ISO-8859-6 *)
-  |  `Enc_iso88597   (* ISO-8859-7 *)
-  |  `Enc_iso88598   (* ISO-8859-8 *)
-  |  `Enc_iso88599   (* ISO-8859-9 *)
-  |  `Enc_iso885910  (* ISO-8859-10 *)
-  |  `Enc_iso885913  (* ISO-8859-13 *)
-  |  `Enc_iso885914  (* ISO-8859-14 *)
-  |  `Enc_iso885915  (* ISO-8859-15 *)
-  |  `Enc_koi8r      (* KOI8-R *)
-  |  `Enc_jis0201    (* JIS-0201 *)
-    (* Microsoft: *)
-  |  `Enc_windows1250  (* WINDOWS-1250 *)
-  |  `Enc_windows1251  (* WINDOWS-1251 *)
-  |  `Enc_windows1252  (* WINDOWS-1252 *)
-  |  `Enc_windows1253  (* WINDOWS-1253 *)
-  |  `Enc_windows1254  (* WINDOWS-1254 *)
-  |  `Enc_windows1255  (* WINDOWS-1255 *)
-  |  `Enc_windows1256  (* WINDOWS-1256 *)
-  |  `Enc_windows1257  (* WINDOWS-1257 *)
-  |  `Enc_windows1258  (* WINDOWS-1258 *)
-    (* IBM, ASCII-based: *)
-  |  `Enc_cp437
-  |  `Enc_cp737
-  |  `Enc_cp775
-  |  `Enc_cp850
-  |  `Enc_cp852
-  |  `Enc_cp855
-  |  `Enc_cp856
-  |  `Enc_cp857
-  |  `Enc_cp860
-  |  `Enc_cp861
-  |  `Enc_cp862
-  |  `Enc_cp863
-  |  `Enc_cp864
-  |  `Enc_cp865
-  |  `Enc_cp866
-  |  `Enc_cp869
-  |  `Enc_cp874
-  |  `Enc_cp1006
-   (* IBM, EBCDIC-based: *)
-  |  `Enc_cp037
-  |  `Enc_cp424
-  |  `Enc_cp500
-  |  `Enc_cp875
-  |  `Enc_cp1026
-   (* Adobe: *)
-  |  `Enc_adobe_standard_encoding
-  |  `Enc_adobe_symbol_encoding
-  |  `Enc_adobe_zapf_dingbats_encoding
-   (* Apple: *)
-  |  `Enc_macroman
-
-  ]
-
-
-val encoding_of_string : string -> encoding;;
-    (* Returns the encoding of the name of the encoding. Fails if the 
-     * encoding is unknown.
-     * E.g. encoding_of_string "iso-8859-1" = `Enc_iso88591
-     *)
-
-val string_of_encoding : encoding -> string;;
-    (* Returns the name of the encoding. *)
-
-
-val makechar : encoding -> int -> string
-  (* makechar enc i:
-   * Creates the string representing the code point i in encoding enc.
-   * Raises Not_found if the character is legal but cannot be represented 
-   * in enc.
-   * 
-   * Possible encodings: everything but `Enc_utf16.
-   *)
-
-val recode : in_enc:encoding -> 
-             in_buf:string -> 
-            in_pos:int ->
-            in_len:int -> 
-            out_enc:encoding -> 
-            out_buf:string -> 
-            out_pos:int ->
-            out_len:int ->
-            max_chars:int ->
-             subst:(int -> string) -> (int * int * encoding)
-  (* 
-   * let (in_n, out_n, in_enc') = 
-   *     recode in_enc in_buf in_len out_enc out_buf out_pos out_len max_chars 
-   *            subst:
-   * Converts the character sequence contained in the at most in_len bytes
-   * of in_buf starting at position in_pos, and writes the result 
-   * into at most out_len bytes of out_buf starting at out_pos.
-   * At most max_chars are written into out_buf.
-   * The characters in in_buf are assumed to be encoded as in_enc, and the 
-   * characters in out_buf will be encoded as out_enc.
-   * If there is a code point which cannot be represented in out_enc,
-   * the function subst is called with the code point as argument, and the
-   * resulting string (which must already be encoded as out_enc) is
-   * inserted instead. 
-   * Note: It is possible that subst is called several times for the same
-   * character.
-   * Return value: out_n is the actual number of bytes written into out_buf.
-   * in_n is the actual number of bytes that have been converted from
-   * in_buf; in_n may be smaller than in_len because of incomplete
-   * multi-byte characters, or because the output buffer has less space
-   * for characters than the input buffer, or because of a change
-   * of the encoding variant.
-   * If there is at least one complete character in in_buf, and at least
-   * space for one complete character in out_buf, and max_chars >= 1, it is 
-   * guaranteed that in_n > 0 or out_n > 0.
-   * in_enc' is normally identical to in_enc. However, there are cases
-   * in which the encoding can be refined when looking at the byte
-   * sequence; for example whether a little endian or big endian variant
-   * of the encoding is used. in_enc' is the variant of in_enc that was
-   * used for the last character that has been converted.
-   *
-   * NOTES:
-   *
-   * Supported range of code points: 0 to 0xd7ff, 0xe000 to 0xfffd,
-   * 0x10000 to 0x10ffff.
-   *
-   * Enc_utf8: Malformed UTF-8 byte sequences are always rejected. This
-   * is also true for the sequence 0xc0 0x80 which is used by some software
-   * (Java) as paraphrase for the code point 0.
-   *
-   * Enc_utf16: When reading from a string encoded as Enc_utf16, a byte
-   * order mark is expected at the beginning. The detected variant 
-   * (Enc_utf16_le or Enc_utf16_be) is returned. The byte order mark is
-   * not included into the output string. - It is not possible to
-   * write as Enc_utf16.
-   *
-   * Enc_utf16_le, Enc_utf16_be: When reading from such a string, the
-   * code point 0xfeff is returned as it is; it is a "zero-width 
-   * non-breaking space". The code point 0xfffe is rejected.
-   *
-   * Surrogate pairs: These are recognized (or written) only for a
-   * UTF-16 encoding; and rejected for any other encoding.
-   *
-   * Rejected byte sequences cause the exception Bad_character_stream.
-   *)
-
-val recode_string : in_enc:encoding -> 
-                    out_enc:encoding ->
-                   ?subst:(int -> string) ->
-                   string ->
-                    string 
-  (* Recodes a complete string from in_enc to out_enc, and returns it.
-   * The function subst is invoked for code points of in_enc that cannot
-   * be represented in out_enc, and the result of the function invocation
-   * is substituted.
-   * If subst is missing, Not_found is raised in this case.
-   *)
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/08/13 00:02:57  gerd
- *     Initial revision.
- *
- *
- * ======================================================================
- * OLD LOGS FROM THE PXP PACKAGE (FILE NAME pxp_encoding.mli):
- *
- * Revision 1.4  2000/07/04 22:05:58  gerd
- *     Enhanced version of 'recode'. Labeled arguments.
- * New function 'recode_string'.
- *
- * Revision 1.3  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * Revision 1.2  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.1  2000/05/20 20:30:50  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netencoding.ml b/helm/DEVEL/pxp/netstring/netencoding.ml
deleted file mode 100644 (file)
index e87c4c3..0000000
+++ /dev/null
@@ -1,903 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-module Str = Netstring_str;;
-
-module Base64 = struct
-  let b64_pattern plus slash =
-    [| 'A'; 'B'; 'C'; 'D'; 'E'; 'F'; 'G'; 'H'; 'I'; 'J'; 'K'; 'L'; 'M';
-       'N'; 'O'; 'P'; 'Q'; 'R'; 'S'; 'T'; 'U'; 'V'; 'W'; 'X'; 'Y'; 'Z';
-       'a'; 'b'; 'c'; 'd'; 'e'; 'f'; 'g'; 'h'; 'i'; 'j'; 'k'; 'l'; 'm';
-       'n'; 'o'; 'p'; 'q'; 'r'; 's'; 't'; 'u'; 'v'; 'w'; 'x'; 'y'; 'z';
-       '0'; '1'; '2'; '3'; '4'; '5'; '6'; '7'; '8'; '9'; plus; slash |];;
-
-
-  let rfc_pattern = b64_pattern '+' '/';;
-  let url_pattern = b64_pattern '-' '/';;
-
-  let encode_with_options b64 equal s pos len linelen crlf =
-  (* encode using "base64".
-   * 'b64': The encoding table, created by b64_pattern.
-   * 'equal': The character that should be used instead of '=' in the original
-   *          encoding scheme. Pass '=' to get the original encoding scheme.
-   * s, pos, len, linelen: See the interface description of encode_substring.
-   *)
-    assert (Array.length b64 = 64);
-    if len < 0 or pos < 0 or pos > String.length s or linelen < 0 then
-      invalid_arg "Netencoding.Base64.encode_with_options";
-    if pos + len > String.length s then
-      invalid_arg "Netencoding.Base64.encode_with_options";
-
-    let linelen =
-      (linelen/4) * 4 in
-
-    let l_t = if len = 0 then 0 else ((len - 1) / 3 + 1) * 4 in
-    (* l_t: length of the result without additional line endings *)
-
-    let l_t' = 
-      if linelen < 4 then
-       l_t
-      else
-       if l_t = 0 then 0 else 
-         let n_lines = ((l_t - 1) / linelen) + 1 in
-         l_t + n_lines * (if crlf then 2 else 1)
-    in
-    (* l_t': length of the result with CRLF or LF characters *)
-    
-    let t = String.make l_t' equal in
-    let j = ref 0 in
-    let q = ref 0 in
-    for k = 0 to len / 3 - 1 do
-      let p = pos + 3*k in
-      (* p >= pos >= 0: this is evident
-       * p+2 < pos+len <= String.length s:
-       *   Because k <= len/3-1
-       *         3*k <= 3*(len/3-1) = len - 3
-       *   pos+3*k+2 <= pos + len - 3 + 2 = pos + len - 1 < pos + len
-       * So it is proved that the following unsafe string accesses always
-       * work.
-       *)
-      let bits = (Char.code (String.unsafe_get s (p))   lsl 16) lor
-                (Char.code (String.unsafe_get s (p+1)) lsl  8) lor
-                (Char.code (String.unsafe_get s (p+2))) in
-      (* Obviously, 'bits' is a 24 bit entity (i.e. bits < 2**24) *)
-      assert(!j + 3 < l_t');
-      String.unsafe_set t !j     (Array.unsafe_get b64 ( bits lsr 18));
-      String.unsafe_set t (!j+1) (Array.unsafe_get b64 ((bits lsr 12) land 63));
-      String.unsafe_set t (!j+2) (Array.unsafe_get b64 ((bits lsr  6) land 63));
-      String.unsafe_set t (!j+3) (Array.unsafe_get b64 ( bits         land 63));
-      j := !j + 4;
-      if linelen > 3 then begin
-       q := !q + 4;
-       if !q + 4 > linelen then begin
-         (* The next 4 characters won't fit on the current line. So insert
-          * a line ending.
-          *)
-         if crlf then begin
-           t.[ !j ] <- '\013';
-           t.[ !j+1 ] <- '\010';
-           j := !j + 2;
-         end
-         else begin 
-           t.[ !j ] <- '\010';
-           incr j
-         end;
-         q := 0;
-       end;
-      end;
-    done;
-    (* padding if needed: *)
-    let m = len mod 3 in
-    begin
-      match m with
-         0 -> ()
-       | 1 ->
-            let bits = Char.code (s.[pos + len - 1]) in
-           t.[ !j     ] <- b64.( bits lsr 2);
-           t.[ !j + 1 ] <- b64.( (bits land 0x03) lsl 4);
-           j := !j + 4;
-           q := !q + 4;
-       | 2 ->
-           let bits = (Char.code (s.[pos + len - 2]) lsl 8) lor
-                       (Char.code (s.[pos + len - 1])) in
-           t.[ !j     ] <- b64.( bits lsr 10);
-           t.[ !j + 1 ] <- b64.((bits lsr  4) land 0x3f);
-           t.[ !j + 2 ] <- b64.((bits lsl  2) land 0x3f);
-           j := !j + 4;
-           q := !q + 4;
-       | _ -> assert false
-    end;
-
-    (* If required, add another line end: *)
-
-    if linelen > 3 & !q > 0 then begin
-      if crlf then begin
-       t.[ !j ] <- '\013';
-       t.[ !j+1 ] <- '\010';
-       j := !j + 2;
-      end
-      else begin 
-       t.[ !j ] <- '\010';
-       incr j
-      end;     
-    end;
-
-    t ;;
-
-
-
-  let encode ?(pos=0) ?len ?(linelength=0) ?(crlf=false) s =
-    let l = match len with None -> String.length s - pos | Some x -> x in
-    encode_with_options rfc_pattern '=' s pos l linelength crlf;;
-
-
-  let encode_substring s ~pos ~len ~linelength ~crlf =
-    encode_with_options rfc_pattern '=' s pos len linelength crlf;;
-
-
-  let url_encode ?(pos=0) ?len ?(linelength=0) ?(crlf=false) s =
-    let l = match len with None -> String.length s - pos | Some x -> x in
-    encode_with_options url_pattern '.' s pos l linelength crlf;;
-    
-
-  let decode_substring t ~pos ~len ~url_variant:p_url ~accept_spaces:p_spaces =
-    if len < 0 or pos < 0 or pos > String.length t then
-      invalid_arg "Netencoding.Base64.decode_substring";
-    if pos + len > String.length t then
-      invalid_arg "Netencoding.Base64.decode_substring";
-
-    (* Compute the number of effective characters l_t in 't';
-     * pad_chars: number of '=' characters at the end of the string.
-     *)
-    let l_t, pad_chars =
-      if p_spaces then begin
-       (* Count all non-whitespace characters: *)
-       let c = ref 0 in
-       let p = ref 0 in
-       for i = pos to pos + len - 1 do
-         match String.unsafe_get t i with
-             (' '|'\t'|'\r'|'\n') -> ()
-           | ('='|'.') as ch ->
-               if ch = '.' & not p_url then
-                 invalid_arg "Netencoding.Base64.decode_substring";
-               incr c;
-               incr p;
-               if !p > 2 then
-                 invalid_arg "Netencoding.Base64.decode_substring";
-               for j = i+1 to pos + len - 1 do
-                 match String.unsafe_get t j with
-                     (' '|'\t'|'\r'|'\n'|'.'|'=') -> ()
-                   | _ ->
-                       (* Only another '=' or spaces allowed *)
-                       invalid_arg "Netencoding.Base64.decode_substring";
-               done
-           | _ -> incr c
-       done;
-       if !c mod 4 <> 0 then
-         invalid_arg "Netencoding.Base64.decode_substring";
-       !c, !p
-      end
-      else
-       len,
-       ( if len mod 4 <> 0 then
-           invalid_arg "Netencoding.Base64.decode_substring";
-         if len > 0 then (
-           if String.sub t (len - 2) 2 = "==" or 
-              (p_url & String.sub t (len - 2) 2 = "..") then 2
-           else 
-             if String.sub t (len - 1) 1 = "=" or 
-                (p_url & String.sub t (len - 1) 1 = ".") then 1
-             else
-               0
-         )
-         else 0 
-       )
-    in
-
-    let l_s = (l_t / 4) * 3 - pad_chars in       (* sic! *)
-    let s = String.create l_s in
-
-    let decode_char c =
-      match c with
-         'A' .. 'Z'  -> Char.code(c) - 65     (* 65 = Char.code 'A' *)
-       | 'a' .. 'z'  -> Char.code(c) - 71     (* 71 = Char.code 'a' - 26 *)
-       | '0' .. '9'  -> Char.code(c) + 4      (* -4 = Char.code '0' - 52 *)
-       | '+'         -> 62
-       | '-'         -> if not p_url then 
-                          invalid_arg "Netencoding.Base64.decode_substring";
-                        62
-       | '/'         -> 63
-       | _           -> invalid_arg "Netencoding.Base64.decode_substring";
-    in
-
-    (* Decode all but the last quartet: *)
-
-    let cursor = ref pos in
-    let rec next_char() = 
-      match t.[ !cursor ] with
-         (' '|'\t'|'\r'|'\n') -> 
-           if p_spaces then (incr cursor; next_char())
-           else invalid_arg "Netencoding.Base64.decode_substring"
-       | c ->
-           incr cursor; c
-    in
-
-    if p_spaces then begin
-      for k = 0 to l_t / 4 - 2 do
-       let q = 3*k in
-       let c0 = next_char() in
-       let c1 = next_char() in
-       let c2 = next_char() in
-       let c3 = next_char() in
-       let n0 = decode_char c0 in
-       let n1 = decode_char c1 in
-       let n2 = decode_char c2 in
-       let n3 = decode_char c3 in
-       let x0 = (n0 lsl 2) lor (n1 lsr 4) in
-       let x1 = ((n1 lsl 4) land 0xf0) lor (n2 lsr 2) in
-       let x2 = ((n2 lsl 6) land 0xc0) lor n3 in
-       String.unsafe_set s q     (Char.chr x0);
-       String.unsafe_set s (q+1) (Char.chr x1);
-       String.unsafe_set s (q+2) (Char.chr x2);
-      done;
-    end
-    else begin
-      (* Much faster: *)
-      for k = 0 to l_t / 4 - 2 do
-       let p = pos + 4*k in
-       let q = 3*k in
-       let c0 = String.unsafe_get t p in
-       let c1 = String.unsafe_get t (p + 1) in
-       let c2 = String.unsafe_get t (p + 2) in
-       let c3 = String.unsafe_get t (p + 3) in
-       let n0 = decode_char c0 in
-       let n1 = decode_char c1 in
-       let n2 = decode_char c2 in
-       let n3 = decode_char c3 in
-       let x0 = (n0 lsl 2) lor (n1 lsr 4) in
-       let x1 = ((n1 lsl 4) land 0xf0) lor (n2 lsr 2) in
-       let x2 = ((n2 lsl 6) land 0xc0) lor n3 in
-       String.unsafe_set s q     (Char.chr x0);
-       String.unsafe_set s (q+1) (Char.chr x1);
-       String.unsafe_set s (q+2) (Char.chr x2);
-      done;
-      cursor := pos + l_t - 4;
-    end;
-
-    (* Decode the last quartet: *)
-
-    if l_t > 0 then begin
-      let q = 3*(l_t / 4 - 1) in
-      let c0 = next_char() in
-      let c1 = next_char() in
-      let c2 = next_char() in
-      let c3 = next_char() in
-
-      if (c2 = '=' & c3 = '=') or (p_url & c2 = '.' & c3 = '.') then begin
-       let n0 = decode_char c0 in
-       let n1 = decode_char c1 in
-       let x0 = (n0 lsl 2) lor (n1 lsr 4) in
-       s.[ q ]   <- Char.chr x0;
-      end
-      else
-       if (c3 = '=') or (p_url & c3 = '.') then begin
-         let n0 = decode_char c0 in
-         let n1 = decode_char c1 in
-         let n2 = decode_char c2 in
-         let x0 = (n0 lsl 2) lor (n1 lsr 4) in
-         let x1 = ((n1 lsl 4) land 0xf0) lor (n2 lsr 2) in
-         s.[ q ]   <- Char.chr x0;
-         s.[ q+1 ] <- Char.chr x1;
-       end
-       else begin
-         let n0 = decode_char c0 in
-         let n1 = decode_char c1 in
-         let n2 = decode_char c2 in
-         let n3 = decode_char c3 in
-         let x0 = (n0 lsl 2) lor (n1 lsr 4) in
-         let x1 = ((n1 lsl 4) land 0xf0) lor (n2 lsr 2) in
-         let x2 = ((n2 lsl 6) land 0xc0) lor n3 in
-         s.[ q ]   <- Char.chr x0;
-         s.[ q+1 ] <- Char.chr x1;
-         s.[ q+2 ] <- Char.chr x2;
-       end
-
-    end;
-
-    s ;;
-
-
-
-  let decode ?(pos=0) ?len ?(url_variant=true) ?(accept_spaces=false) s =
-    let l = match len with None -> String.length s - pos | Some x -> x in
-    decode_substring s pos l url_variant accept_spaces;;
-
-  let decode_ignore_spaces s =
-    decode_substring s 0 (String.length s) true true;;
-
-  
-end
-
-
-
-module QuotedPrintable = struct
-
-  let encode_substring s ~pos ~len =
-    
-    if len < 0 or pos < 0 or pos > String.length s then
-      invalid_arg "Netencoding.QuotedPrintable.encode_substring";
-    if pos + len > String.length s then
-      invalid_arg "Netencoding.QuotedPrintable.encode_substring";
-
-    let rec count n i =
-      if i < len then
-       match String.unsafe_get s (pos+i) with
-           ('\r'|'\n') -> 
-             count (n+1) (i+1)
-         | ('\000'..'\031'|'\127'..'\255'|
-            '!'|'"'|'#'|'$'|'@'|'['|']'|'^'|'\''|'{'|'|'|'}'|'~'|'=') ->
-             count (n+3) (i+1)
-         | ' ' ->
-             (* Protect spaces only if they occur at the end of a line *)
-             if i+1 < len then
-               match s.[pos+i+1] with
-                   ('\r'|'\n') -> 
-                     count (n+3) (i+1)
-                 | _ ->
-                     count (n+1) (i+1)
-             else
-               count (n+3) (i+1)
-         | _ ->
-             count (n+1) (i+1)
-      else
-       n
-    in
-
-    let l = count 0 0 in
-    let t = String.create l in
-    
-    let hexdigit =
-      [| '0'; '1'; '2'; '3'; '4'; '5'; '6'; '7';
-        '8'; '9'; 'A'; 'B'; 'C'; 'D'; 'E'; 'F'; |] in
-
-    let k = ref 0 in
-
-    let add_quoted c =
-      t.[ !k ]   <- '=';
-      t.[ !k+1 ] <- hexdigit.( Char.code c lsr 4 );
-      t.[ !k+2 ] <- hexdigit.( Char.code c land 15 )
-    in
-
-    for i = 0 to len - 1 do
-      match String.unsafe_get s i with
-         ('\r'|'\n') as c -> 
-           String.unsafe_set t !k c;
-           incr k
-       | ('\000'..'\031'|'\127'..'\255'|
-          '!'|'"'|'#'|'$'|'@'|'['|']'|'^'|'\''|'{'|'|'|'}'|'~'|'=') as c ->
-           add_quoted c;
-           k := !k + 3
-       | ' ' ->
-           (* Protect spaces only if they occur at the end of a line *)
-           if i+1 < len then
-             match s.[pos+i+1] with
-                 ('\r'|'\n') -> 
-                   add_quoted ' ';
-                   k := !k + 3;
-               | _ ->
-                   String.unsafe_set t !k ' ';
-                   incr k
-           else begin
-             add_quoted ' ';
-             k := !k + 3;
-           end
-       | c ->
-           String.unsafe_set t !k c;
-           incr k
-    done;
-
-    t ;;
-
-
-  let encode ?(pos=0) ?len s =
-    let l = match len with None -> String.length s - pos | Some x -> x in 
-    encode_substring s pos l;;
-
-
-
-  let decode_substring s ~pos ~len =
-    
-    if len < 0 or pos < 0 or pos > String.length s then
-      invalid_arg "Netencoding.QuotedPrintable.decode_substring";
-    if pos + len > String.length s then
-      invalid_arg "Netencoding.QuotedPrintable.decode_substring";
-
-    let decode_hex c =
-      match c with
-         '0'..'9' -> Char.code c - 48
-       | 'A'..'F' -> Char.code c - 55
-       | 'a'..'f' -> Char.code c - 87
-       | _ ->
-          invalid_arg "Netencoding.QuotedPrintable.decode_substring";
-    in 
-
-    let rec count n i =
-      if i < len then
-       match String.unsafe_get s (pos+i) with
-           '=' ->
-             if i+1 = len then
-               (* A '=' at EOF is ignored *)
-               count n (i+1)
-             else
-               if i+1 < len then
-                 match s.[pos+i+1] with
-                     '\r' ->
-                       (* Official soft break *)
-                       if i+2 < len & s.[pos+i+2] = '\n' then
-                         count n (i+3)
-                       else
-                         count n (i+2)
-                   | '\n' ->
-                       (* Inofficial soft break *)
-                       count n (i+2)
-                   | _ ->
-                       if i+2 >= len then
-                         invalid_arg 
-                           "Netencoding.QuotedPrintable.decode_substring";
-                       let _ = decode_hex s.[pos+i+1] in
-                       let _ = decode_hex s.[pos+i+2] in
-                       count (n+1) (i+3)
-               else
-                 invalid_arg "Netencoding.QuotedPrintable.decode_substring"
-         | _ ->
-             count (n+1) (i+1)
-      else
-       n
-    in
-
-    let l = count 0 0 in
-    let t = String.create l in
-    let k = ref pos in
-    let e = pos + len in
-    let i = ref 0 in
-
-    while !i < l do
-      match String.unsafe_get s !k with
-         '=' ->
-           if !k+1 = e then
-             (* A '=' at EOF is ignored *)
-             ()
-           else
-             if !k+1 < e then
-               match s.[!k+1] with
-                   '\r' ->
-                     (* Official soft break *)
-                     if !k+2 < e & s.[!k+2] = '\n' then
-                       k := !k + 3
-                     else
-                       k := !k + 2
-                 | '\n' ->
-                     (* Inofficial soft break *)
-                     k := !k + 2
-                 | _ ->
-                     if !k+2 >= e then
-                       invalid_arg 
-                         "Netencoding.QuotedPrintable.decode_substring";
-                     let x1 = decode_hex s.[!k+1] in
-                     let x2 = decode_hex s.[!k+2] in
-                     t.[ !i ] <- Char.chr ((x1 lsl 4) lor x2);
-                     k := !k + 3;
-                     incr i
-             else
-               invalid_arg "Netencoding.QuotedPrintable.decode_substring"
-       | c ->
-           String.unsafe_set t !i c;
-           incr k;
-           incr i
-    done;
-
-    t ;;
-
-
-  let decode ?(pos=0) ?len s =
-    let l = match len with None -> String.length s - pos | Some x -> x in 
-    decode_substring s pos l;;
-
-end
-
-             
-module Q = struct
-
-  let encode_substring s ~pos ~len =
-    
-    if len < 0 or pos < 0 or pos > String.length s then
-      invalid_arg "Netencoding.Q.encode_substring";
-    if pos + len > String.length s then
-      invalid_arg "Netencoding.Q.encode_substring";
-
-    let rec count n i =
-      if i < len then
-       match String.unsafe_get s (pos+i) with
-         | ('A'..'Z'|'a'..'z'|'0'..'9') ->
-             count (n+1) (i+1)
-         | _ ->
-             count (n+3) (i+1)
-      else
-       n
-    in
-
-    let l = count 0 0 in
-    let t = String.create l in
-    
-    let hexdigit =
-      [| '0'; '1'; '2'; '3'; '4'; '5'; '6'; '7';
-        '8'; '9'; 'A'; 'B'; 'C'; 'D'; 'E'; 'F'; |] in
-
-    let k = ref 0 in
-
-    let add_quoted c =
-      t.[ !k ]   <- '=';
-      t.[ !k+1 ] <- hexdigit.( Char.code c lsr 4 );
-      t.[ !k+2 ] <- hexdigit.( Char.code c land 15 )
-    in
-
-    for i = 0 to len - 1 do
-      match String.unsafe_get s i with
-       | ('A'..'Z'|'a'..'z'|'0'..'9') as c ->
-           String.unsafe_set t !k c;
-           incr k
-       | c ->
-           add_quoted c;
-           k := !k + 3
-    done;
-
-    t ;;
-
-
-  let encode ?(pos=0) ?len s =
-    let l = match len with None -> String.length s - pos | Some x -> x in 
-    encode_substring s pos l;;
-
-
-
-  let decode_substring s ~pos ~len =
-    
-    if len < 0 or pos < 0 or pos > String.length s then
-      invalid_arg "Netencoding.Q.decode_substring";
-    if pos + len > String.length s then
-      invalid_arg "Netencoding.Q.decode_substring";
-
-    let decode_hex c =
-      match c with
-         '0'..'9' -> Char.code c - 48
-       | 'A'..'F' -> Char.code c - 55
-       | 'a'..'f' -> Char.code c - 87
-       | _ ->
-          invalid_arg "Netencoding.Q.decode_substring";
-    in 
-
-    let rec count n i =
-      if i < len then
-       match String.unsafe_get s (pos+i) with
-           '=' ->
-             if i+2 >= len then
-               invalid_arg "Netencoding.Q.decode_substring";
-             let _ = decode_hex s.[pos+i+1] in
-             let _ = decode_hex s.[pos+i+2] in
-             count (n+1) (i+3)
-         | _ ->  (* including '_' *)
-             count (n+1) (i+1)
-      else
-       n
-    in
-
-    let l = count 0 0 in
-    let t = String.create l in
-    let k = ref pos in
-    let e = pos + len in
-    let i = ref 0 in
-
-    while !i < l do
-      match String.unsafe_get s !k with
-         '=' ->
-           if !k+2 >= e then
-             invalid_arg "Netencoding.Q.decode_substring";
-           let x1 = decode_hex s.[!k+1] in
-           let x2 = decode_hex s.[!k+2] in
-           t.[ !i ] <- Char.chr ((x1 lsl 4) lor x2);
-           k := !k + 3;
-           incr i
-       | '_' ->
-           String.unsafe_set t !i ' ';
-           incr k;
-           incr i
-       | c ->
-           String.unsafe_set t !i c;
-           incr k;
-           incr i
-    done;
-
-    t ;;
-
-
-  let decode ?(pos=0) ?len s =
-    let l = match len with None -> String.length s - pos | Some x -> x in 
-    decode_substring s pos l ;;
-
-end
-
-
-module Url = struct
-  let hex_digits =
-    [| '0'; '1'; '2'; '3'; '4'; '5'; '6'; '7';
-       '8'; '9'; 'A'; 'B'; 'C'; 'D'; 'E'; 'F' |];;
-
-  let to_hex2 k =
-    (* Converts k to a 2-digit hex string *)
-    let s = String.create 2 in
-    s.[0] <- hex_digits.( (k lsr 4) land 15 );
-    s.[1] <- hex_digits.( k land 15 );
-    s ;;
-
-
-  let of_hex1 c =
-    match c with
-       ('0'..'9') -> Char.code c - Char.code '0'
-      | ('A'..'F') -> Char.code c - Char.code 'A' + 10
-      | ('a'..'f') -> Char.code c - Char.code 'a' + 10
-      | _ ->
-       raise Not_found ;;
-
-
-
-  let url_encoding_re =
-    Str.regexp "[^A-Za-z0-9$_.!*'(),-]";;
-
-  let url_decoding_re =
-    Str.regexp "\\+\\|%..\\|%.\\|%";;
-
-
-  let encode s =
-    Str.global_substitute
-      url_encoding_re
-      (fun r _ ->
-        match Str.matched_string r s with
-            " " -> "+"
-          | x ->
-              let k = Char.code(x.[0]) in
-              "%" ^ to_hex2 k
-      )
-      s ;;
-
-
-  let decode s =
-    let l = String.length s in
-    Str.global_substitute
-      url_decoding_re
-      (fun r _ ->
-        match Str.matched_string r s with
-          | "+" -> " "
-          | _ ->
-              let i = Str.match_beginning r in
-              (* Assertion: s.[i] = '%' *)
-              if i+2 >= l then failwith "Cgi.decode";
-              let c1 = s.[i+1] in
-              let c2 = s.[i+2] in
-              begin
-                try
-                  let k1 = of_hex1 c1 in
-                  let k2 = of_hex1 c2 in
-                  String.make 1 (Char.chr((k1 lsl 4) lor k2))
-                with
-                    Not_found ->
-                      failwith "Cgi.decode"
-              end
-      )
-      s ;;
-
-end
-
-
-module Html = struct
-
-  let eref_re = 
-    Str.regexp 
-      "&\\(#\\([0-9]+\\);\\|\\([a-zA-Z]+\\);\\)" ;;
-  let unsafe_re = Str.regexp "[<>&\"\000-\008\011-\012\014-\031\127-\255]" ;;
-  
-  let etable =
-    [ "lt", "<";
-      "gt", ">";
-      "amp", "&";
-      "quot", "\"";     
-         (* Note: &quot; is new in HTML-4.0, but it has been widely used
-         * much earlier.
-         *)
-      "nbsp", "\160";
-      "iexcl", "\161";
-      "cent", "\162";
-      "pound", "\163";
-      "curren", "\164";
-      "yen", "\165";
-      "brvbar", "\166";
-      "sect", "\167";
-      "uml", "\168";
-      "copy", "\169";
-      "ordf", "\170";
-      "laquo", "\171";
-      "not", "\172";
-      "shy", "\173";
-      "reg", "\174";
-      "macr", "\175";
-      "deg", "\176";
-      "plusmn", "\177";
-      "sup2", "\178";
-      "sup3", "\179";
-      "acute", "\180";
-      "micro", "\181";
-      "para", "\182";
-      "middot", "\183";
-      "cedil", "\184";
-      "sup1", "\185";
-      "ordm", "\186";
-      "raquo", "\187";
-      "frac14", "\188";
-      "frac12", "\189";
-      "frac34", "\190";
-      "iquest", "\191";
-      "Agrave", "\192";
-      "Aacute", "\193";
-      "Acirc", "\194";
-      "Atilde", "\195";
-      "Auml", "\196";
-      "Aring", "\197";
-      "AElig", "\198";
-      "Ccedil", "\199";
-      "Egrave", "\200";
-      "Eacute", "\201";
-      "Ecirc", "\202";
-      "Euml", "\203";
-      "Igrave", "\204";
-      "Iacute", "\205";
-      "Icirc", "\206";
-      "Iuml", "\207";
-      "ETH", "\208";
-      "Ntilde", "\209";
-      "Ograve", "\210";
-      "Oacute", "\211";
-      "Ocirc", "\212";
-      "Otilde", "\213";
-      "Ouml", "\214";
-      "times", "\215";
-      "Oslash", "\216";
-      "Ugrave", "\217";
-      "Uacute", "\218";
-      "Ucirc", "\219";
-      "Uuml", "\220";
-      "Yacute", "\221";
-      "THORN", "\222";
-      "szlig", "\223";
-      "agrave", "\224";
-      "aacute", "\225";
-      "acirc", "\226";
-      "atilde", "\227";
-      "auml", "\228";
-      "aring", "\229";
-      "aelig", "\230";
-      "ccedil", "\231";
-      "egrave", "\232";
-      "eacute", "\233";
-      "ecirc", "\234";
-      "euml", "\235";
-      "igrave", "\236";
-      "iacute", "\237";
-      "icirc", "\238";
-      "iuml", "\239";
-      "eth", "\240";
-      "ntilde", "\241";
-      "ograve", "\242";
-      "oacute", "\243";
-      "ocirc", "\244";
-      "otilde", "\245";
-      "ouml", "\246";
-      "divide", "\247";
-      "oslash", "\248";
-      "ugrave", "\249";
-      "uacute", "\250";
-      "ucirc", "\251";
-      "uuml", "\252";
-      "yacute", "\253";
-      "thorn", "\254";
-      "yuml", "\255";
-    ] ;;
-
-  let quick_etable =
-    let ht = Hashtbl.create 50 in
-    List.iter (fun (name,value) -> Hashtbl.add ht name value) etable;
-    (* Entities to be decoded, but that must not be encoded: *)
-    Hashtbl.add ht "apos" "'";        (* used in XML documents *)
-    ht ;;
-
-  let rev_etable =
-    let a = Array.create 256 "" in
-    List.iter (fun (name,value) -> 
-                a.(Char.code(value.[0])) <- "&" ^ name ^ ";") etable;
-    for i = 0 to 8 do
-      a.(i) <- "&#" ^ string_of_int i ^ ";"
-    done;
-    for i = 11 to 12 do
-      a.(i) <- "&#" ^ string_of_int i ^ ";"
-    done;
-    for i = 14 to 31 do
-      a.(i) <- "&#" ^ string_of_int i ^ ";"
-    done;
-    for i = 127 to 159 do
-      a.(i) <- "&#" ^ string_of_int i ^ ";"
-    done;
-    a ;;
-
-  let decode_to_latin1 s =
-    Str.global_substitute
-      eref_re
-      (fun r _ ->
-        let t = Str.matched_string r s in
-        try
-          let n = int_of_string(Str.matched_group r 2 s) in
-          if n < 256 then
-            String.make 1 (Char.chr n)
-          else
-            t
-        with
-            Not_found ->
-              try
-                let name = Str.matched_group r 3 s in
-                try
-                  Hashtbl.find quick_etable name
-                with
-                    Not_found ->
-                      t
-              with
-                  Not_found -> assert false
-      )
-      s ;;
-
-  let encode_from_latin1 s =
-    Str.global_substitute
-      unsafe_re
-      (fun r _ ->
-        let t = Str.matched_string r s in
-        let i = Char.code (t.[0]) in
-        rev_etable.(i)
-      )
-      s ;;
-end
-        
-            
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.5  2000/06/25 22:34:43  gerd
- *     Added labels to arguments.
- *
- * Revision 1.4  2000/06/25 21:15:48  gerd
- *     Checked thread-safety.
- *
- * Revision 1.3  2000/03/03 17:03:16  gerd
- *     Q encoding: CR and LF are quoted.
- *
- * Revision 1.2  2000/03/03 01:08:29  gerd
- *     Added Netencoding.Html functions.
- *
- * Revision 1.1  2000/03/02 01:14:48  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netencoding.mli b/helm/DEVEL/pxp/netstring/netencoding.mli
deleted file mode 100644 (file)
index 6466572..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(**********************************************************************)
-(* Several encodings important for the net                            *)
-(**********************************************************************)
-
-
-(**********************************************************************)
-(* Base 64 encoding                                                   *)
-(**********************************************************************)
-
-(* See RFC 2045 for a description of Base 64 encoding. *)
-
-(* THREAD-SAFETY: 
- * All Base64 functions are reentrant and thus thread-safe.
- *)
-
-module Base64 : sig
-
-  val encode : ?pos:int -> ?len:int -> ?linelength:int -> ?crlf:bool ->
-               string -> string
-      (* Compute the "base 64" encoding of the given string argument.
-       * Note that the result is a string that only contains the characters
-       * a-z, A-Z, 0-9, +, /, =, and optionally spaces, CR and LF characters.
-       *
-       * If pos and/or len are passed, only the substring starting at
-       * pos (default: 0) with length len (default: rest of the string)
-       * is encoded.
-       *
-       * The result is divided up into lines not longer than 'linelength' 
-       * (without counting the line separator); default: do not divide lines.
-       * If 'linelength' is smaller than 4, no line division is performed.
-       * If 'linelength' is not divisible by 4, the produced lines are a 
-       * bit shorter than 'linelength'.
-       *
-       * If 'crlf' (default: false) the lines are ended by CRLF; otherwise 
-       * they are only ended by LF.
-       * (You need the crlf option to produce correct MIME messages.)
-       * 
-       *)
-
-  val url_encode : ?pos:int -> ?len:int -> ?linelength:int -> ?crlf:bool ->
-                   string -> string
-      (* Same as 'encode' but use slightly different characters that can be
-       * part of URLs without additional encodings.
-       * The encoded string consists only of the characters a-z, A-Z, 0-9, 
-       * -, /, .
-       * 'url_encode' does NOT implement the Base 64 encoding as described
-       * in the standard!
-       *)
-
-  val encode_substring : string -> pos:int -> len:int -> linelength:int -> 
-                         crlf:bool -> string
-      (* *** DEPRECATED FUNCTION *** Use 'encode' instead! ***
-       *
-       * encode_substring s pos len linelen crlf:
-       * Encodes the substring at position 'pos' in 's' with length 'len'.
-       * The result is divided up into lines not longer than 'linelen' (without
-       * counting the line separator).
-       * If 'linelen' is smaller than 4, no line division is performed.
-       * If 'linelen' is not divisible by 4, the produced lines are a 
-       * bit shorter than 'linelen'.
-       * If 'crlf' the lines are ended by CRLF; otherwise they are only
-       * ended by LF.
-       * (You need the crlf option to produce correct MIME messages.)
-       *)
-
-  val decode : ?pos:int -> ?len:int -> ?url_variant:bool -> 
-               ?accept_spaces:bool -> string -> string
-      (* Decodes the given string argument. 
-       *
-       * If pos and/or len are passed, only the substring starting at
-       * pos (default: 0) with length len (default: rest of the string)
-       * is decoded.
-       * 
-       * If url_variant (default: true) is set, the functions also
-       * accepts the characters '-' and '.' as produced by 'url_encode'.
-       *
-       * If accept_spaces (default: false) is set, the function ignores
-       * white space contained in the string to decode (otherwise the
-       * function fails if it finds white space).
-       *)
-
-  val decode_ignore_spaces : string -> string
-      (* *** DEPRECATED FUNCTION *** Use 'decode' instead! ***
-       *
-       * Decodes the string, too, but it is allowed that the string contains
-       * whitespace characters.
-       * This function is slower than 'decode'.
-       *)
-
-  val decode_substring : string -> pos:int -> len:int -> url_variant:bool -> 
-                         accept_spaces:bool -> string
-      (* *** DEPRECATED FUNCTION *** Use 'decode' instead! ***
-       *
-       * decode_substring s pos len url spaces:
-       * Decodes the substring of 's' beginning at 'pos' with length 'len'.
-       * If 'url', strings created by 'url_encode' are accepted, too.
-       * If 'spaces', whitespace characters are allowed in the string.
-       *)
-end
-
-(**********************************************************************)
-(* Quoted printable encoding                                          *)
-(**********************************************************************)
-
-(* See RFC 2045.
- * This implementation assumes that the encoded string has a text MIME
- * type. Because of this, the characters CR and LF are never protected 
- * by hex tokens; they are copied literally to the output string.
- *)
-
-(* THREAD-SAFETY: 
- * All QuotedPrintable functions are reentrant and thus thread-safe.
- *)
-
-module QuotedPrintable :
-  sig
-    val encode : ?pos:int -> ?len:int -> string -> string
-       (* Encodes the string and returns it.
-        * Note line breaks: 
-        *   No additional soft line breaks are added. The characters CR
-        *   and LF are not represented as =0D resp. =0A. (But other control
-        *   characters ARE encoded.)
-        * Note unsafe characters:
-        *   As recommended by RFC 2045, the characters !\"#$@[]^`{|}~
-        *   are additionally represented as hex tokens.        -- "
-        *
-        * If pos and/or len are passed, only the substring starting at
-        * pos (default: 0) with length len (default: rest of the string)
-        * is encoded.
-        *)
-
-    val encode_substring : string -> pos:int -> len:int -> string
-       (* *** DEPRECATED FUNCTION *** Use 'encode' instead! ***
-        * encode_substring s pos len:
-        * Encodes the substring of 's' beginning at 'pos' with length 'len'.
-        *)
-
-    val decode : ?pos:int -> ?len:int -> string -> string
-       (* Decodes the string and returns it.
-        * Most format errors cause an Invalid_argument exception.
-        * Note that soft line breaks can be properly decoded although 
-        * 'encode' will never produce them.
-        *
-        * If pos and/or len are passed, only the substring starting at
-        * pos (default: 0) with length len (default: rest of the string)
-        * is decoded.
-        *)
-
-    val decode_substring : string -> pos:int -> len:int -> string
-        (* *** DEPRECATED FUNCTION *** Use 'decode' instead! ***
-        * decode_substring s pos len:
-        * Decodes the substring of 's' beginning at 'pos' with length 'len'.
-        *)
-
-  end
-
-(**********************************************************************)
-(* Q encoding                                                         *)
-(**********************************************************************)
-
-(* See RFC 2047. 
- * The functions behave similar to those of QuotedPrintable. 
- *)
-
-(* THREAD-SAFETY: 
- * All Q functions are reentrant and thus thread-safe.
- *)
-
-module Q :
-  sig
-    val encode : ?pos:int -> ?len:int -> string -> string
-       (* Note:
-        * All characters except alphanumeric characters are protected by
-        * hex tokens.
-        * In particular, spaces are represented as "=20", not as "_".
-        *)
-
-    val decode : ?pos:int -> ?len:int -> string -> string
-
-    val encode_substring : string -> pos:int -> len:int -> string
-        (* *** DEPRECATED FUNCTION *** Use 'encode' instead! *** *)
-
-    val decode_substring : string -> pos:int -> len:int -> string
-        (* *** DEPRECATED FUNCTION *** Use 'decode' instead! *** *)
-  end
-
-(**********************************************************************)
-(* B encoding                                                         *)
-(**********************************************************************)
-
-(* The B encoding of RFC 2047 is the same as Base64. *)
-
-
-(**********************************************************************)
-(* URL-encoding                                                       *)
-(**********************************************************************)
-
-(* Encoding/Decoding within URLs:
- *
- * The following two functions perform the '%'-substitution for
- * characters that may otherwise be interpreted as metacharacters.
- *
- * According to: RFC 1738, RFC 1630
- *)
-
-(* THREAD-SAFETY:
- * The Url functions are thread-safe.
- *)
-
-module Url : 
-  sig
-    val decode : string -> string
-    val encode : string -> string
-  end
-
-
-(**********************************************************************)
-(* HTMLization                                                        *)
-(**********************************************************************)
-
-(* Encodes characters that need protection by converting them to
- * entity references. E.g. "<" is converted to "&lt;".
- * As the entities may be named, there is a dependency on the character
- * set. Currently, there are only functions for the Latin 1 alphabet.
- *)
-
-(* THREAD-SAFETY:
- * The Html functions are thread-safe.
- *)
-
-module Html :
-  sig
-    val encode_from_latin1 : string -> string
-       (* Encodes the characters 0-8, 11-12, 14-31, '<', '>', '"', '&',
-        * 127-255. If the characters have a name, a named entity is
-        * preferred over a numeric entity.
-        *)
-    val decode_to_latin1   : string -> string
-       (* Decodes the string. Unknown named entities are left as they
-        * are (i.e. decode_to_latin1 "&nonsense;" = "&nonsense;").
-        * The same applies to numeric entities greater than 255.
-        *)
-  end
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.4  2000/06/25 22:34:43  gerd
- *     Added labels to arguments.
- *
- * Revision 1.3  2000/06/25 21:15:48  gerd
- *     Checked thread-safety.
- *
- * Revision 1.2  2000/03/03 01:08:29  gerd
- *     Added Netencoding.Html functions.
- *
- * Revision 1.1  2000/03/02 01:14:48  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/nethtml.ml b/helm/DEVEL/pxp/netstring/nethtml.ml
deleted file mode 100644 (file)
index 7f9d983..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Nethtml_scanner;;
-
-type document =
-    Element of (string  *  (string*string) list  *  document list)
-  | Data of string
-;;
-
-
-exception End_of_scan;;
-
-
-let no_end_tag =  (* empty HTML elements *)
-  ref
-    [ "isindex";
-      "base";
-      "meta";
-      "link";
-      "hr";
-      "input";
-      "img";
-      "param";
-      "basefont";
-      "br";
-      "area";
-    ]
-;;
-
-
-let special_tag =   (* other lexical rules *)
-  ref
-    [ "script";
-      "style";
-    ]
-;;
-
-
-let rec parse_comment buf =
-  let t = scan_comment buf in
-  match t with
-      Mcomment ->
-       parse_comment buf
-    | Eof ->
-       raise End_of_scan
-    | _ ->
-       ()
-;;
-
-
-let rec parse_doctype buf =
-  let t = scan_doctype buf in
-  match t with
-      Mdoctype ->
-       parse_doctype buf
-    | Eof ->
-       raise End_of_scan
-    | _ ->
-       ()
-;;
-
-
-let parse_document buf =
-  let current_name = ref "" in
-  let current_atts = ref [] in
-  let current_subs = ref [] in
-  let stack = Stack.create() in
-
-  let parse_atts() =
-    let rec next_no_space() =
-      match scan_element buf with
-         Space _ -> next_no_space()
-       | t -> t
-    in
-
-    let rec parse_atts_lookahead next =
-      match next with
-         Relement -> []
-       | Name n ->
-           begin match next_no_space() with
-               Is ->
-                 begin match next_no_space() with
-                     Name v ->
-                       (String.lowercase n, String.uppercase v) ::
-                       parse_atts_lookahead (next_no_space())
-                   | Literal v ->
-                       (String.lowercase n,v) ::
-                       parse_atts_lookahead (next_no_space())
-                   | Eof ->
-                       raise End_of_scan
-                   | Relement ->
-                       (* Illegal *)
-                       []
-                   | _ ->
-                       (* Illegal *)
-                       parse_atts_lookahead (next_no_space())
-                 end
-             | Eof ->
-                 raise End_of_scan
-             | Relement ->
-                 (* <tag name> <==> <tag name="name"> *)
-                 [ String.lowercase n, String.lowercase n ]
-             | next' ->
-                 (* assume <tag name ... > <==> <tag name="name" ...> *)
-                 ( String.lowercase n, String.lowercase n ) ::
-                 parse_atts_lookahead next'
-           end
-       | Eof ->
-           raise End_of_scan
-       | _ ->
-           (* Illegal *)
-           parse_atts_lookahead (next_no_space())
-    in
-    parse_atts_lookahead (next_no_space())
-  in
-
-  let rec parse_special name =
-    (* Parse until </name> *)
-    match scan_special buf with
-       Lelementend n ->
-         if n = name then
-           ""
-         else
-           "</" ^ n ^ parse_special name
-      | Eof ->
-         raise End_of_scan
-      | Cdata s ->
-         s ^ parse_special name
-      | _ ->
-         (* Illegal *)
-         parse_special name
-  in
-
-  let rec skip_element() =
-    (* Skip until ">" *)
-    match scan_element buf with
-       Relement ->
-         ()
-      | Eof ->
-         raise End_of_scan
-      | _ ->
-         skip_element()
-  in
-
-  let rec parse_next() =
-    let t = scan_document buf in
-    match t with
-       Lcomment ->
-         parse_comment buf;
-         parse_next()
-      | Ldoctype ->
-         parse_doctype buf;
-         parse_next()
-      | Lelement name ->
-         let name = String.lowercase name in
-         if List.mem name !no_end_tag then begin
-           let atts = parse_atts() in
-           current_subs := (Element(name, atts, [])) :: !current_subs;
-           parse_next()
-         end
-         else if List.mem name !special_tag then begin
-           let atts = parse_atts() in
-           let data = parse_special name in
-           (* Read until ">" *)
-           skip_element();
-           current_subs := (Element(name, atts, [Data data])) :: !current_subs;
-           parse_next()
-         end
-         else begin
-           let atts = parse_atts() in
-           Stack.push (!current_name, !current_atts, !current_subs) stack;
-           current_name := name;
-           current_atts := atts;
-           current_subs := [];
-           parse_next()
-         end
-      | Cdata data ->
-         current_subs := (Data data) :: !current_subs;
-         parse_next()
-      | Lelementend name ->
-         let name = String.lowercase name in
-         (* Read until ">" *)
-         skip_element();
-         (* Search the element to close on the stack: *)
-         let found = ref (name = !current_name) in
-         Stack.iter
-           (fun (old_name, _, _) ->
-              if name = old_name then found := true)
-           stack;
-         (* If not found, the end tag is wrong. Simply ignore it. *)
-         if not !found then
-           parse_next()
-         else begin
-           (* Put the current element on to the stack: *)
-           Stack.push (!current_name, !current_atts, !current_subs) stack;
-           (* If found: Remove the elements from the stack, and append
-            * them to the previous element as sub elements
-            *)
-           let rec remove() =
-             let old_name, old_atts, old_subs = Stack.pop stack in
-               (* or raise Stack.Empty *)
-             if old_name = name then
-               old_name, old_atts, old_subs
-             else
-               let older_name, older_atts, older_subs = remove() in
-               older_name,
-               older_atts,
-               (Element (old_name, old_atts, List.rev old_subs) :: older_subs)
-           in
-           let old_name, old_atts, old_subs = remove() in
-           (* Remove one more element: the element containing the element
-            * currently being closed.
-            *)
-           let new_name, new_atts, new_subs = Stack.pop stack in
-           current_name := new_name;
-           current_atts := new_atts;
-           current_subs := (Element (old_name, old_atts, List.rev old_subs))
-                            :: new_subs;
-           (* Go on *)
-           parse_next()
-         end
-      | Eof ->
-         raise End_of_scan
-      | _ ->
-         parse_next()
-  in
-  try
-    parse_next();
-    List.rev !current_subs
-  with
-      End_of_scan ->
-       (* Close all remaining elements: *)
-       Stack.push (!current_name, !current_atts, !current_subs) stack;
-       let rec remove() =
-         let old_name, old_atts, old_subs = Stack.pop stack in
-               (* or raise Stack.Empty *)
-         try
-           let older_name, older_atts, older_subs = remove() in
-           older_name,
-           older_atts,
-           (Element (old_name, old_atts, List.rev old_subs) :: older_subs)
-         with
-             Stack.Empty ->
-               old_name, old_atts, old_subs
-       in
-       let name, atts, subs = remove() in
-       List.rev subs
-;;
-
-
-let parse_string s =
-  let buf = Lexing.from_string s in
-  parse_document buf
-;;
-
-
-let parse_file fd =
-  let buf = Lexing.from_channel fd in
-  parse_document buf
-;;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/03/03 01:07:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/nethtml.mli b/helm/DEVEL/pxp/netstring/nethtml.mli
deleted file mode 100644 (file)
index d7af381..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-(* The type 'document' represents parsed HTML documents. 
- * Element (name, args, subnodes): is an element node for an element of
- *   type 'name' (i.e. written <name ...>...</name>) with arguments 'args'
- *   and subnodes 'subnodes' (the material within the element). The arguments
- *   are simply name/value pairs. Entity references (something like %xy;)
- *   occuring in the values are NOT resolved.
- *   Arguments without values (e.g. <select name="x" multiple>: here,
- *   "multiple" is such an argument) are represented as (name,name), i.e. the
- *   name is returned as value.
- *   As argument names are case-insensitive, the names are all lowercase.
- * Data s: is a character data node. Again, entity references are contained
- *   as such and not as what they mean.
- *)
-
-type document =
-    Element of (string  *  (string*string) list  *  document list)
-  | Data of string
-;;
-
-
-val no_end_tag : string list ref;;
-  (* List of tags which are always empty. This variable is pre-configured,
-   * but you may want to change it.
-   * It is important to know which elements are always empty, because HTML
-   * allows it to omit the end tag for them. For example, 
-   * <a><b>x</a> is parsed as 
-   *   Element("a",[],[ Element("b",[],[]); Data "x" ])
-   * if we know that "a" is an empty element, but it is wrongly parsed as
-   *   Element("a",[],[ Element("b",[], [ Data "x"]) ])
-   * if "a" is actually empty but we do not know it.
-   * An example of such a tag is "br".
-   *)
-
-val special_tag : string list ref;;
-  (* List of tags with a special rule for recognizing the end.
-   * This variable is pre-configured, but you may want to change it.
-   * The special rule is that the metacharacters '<', '>' and so on lose
-   * their meaning within the element, and that only the corresponding 
-   * end tag stops this kind of scanning. An example is the element
-   * "javascript". Inner elements are not recognized, and the element
-   * can only be ended by </javascript>. (Other elements are also ended
-   * if an embracing element ends, e.g. "j" in <k><j></k>!)
-   *
-   * Note that comments are not recognized within special elements;
-   * comments are returned as character material.
-   *)
-
-val parse_string : string -> document list
-  (* Parses the HTML document from a string and returns it *)
-
-val parse_file : in_channel -> document list
-  (* Parses the HTML document from a file and returns it *)
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/03/03 01:07:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/nethtml_scanner.mll b/helm/DEVEL/pxp/netstring/nethtml_scanner.mll
deleted file mode 100644 (file)
index 03e6dea..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-{
-  type token =
-      Lcomment
-    | Rcomment
-    | Mcomment
-    | Ldoctype
-    | Rdoctype
-    | Mdoctype
-    | Lelement of string
-    | Lelementend of string
-    | Relement
-    | Cdata of string 
-    | Space of int
-    | Name of string
-    | Is
-    | Literal of string
-    | Other
-    | Eof
-}
-
-(* Simplified rules: Only Latin-1 is recognized as character set *)
-
-let letter = ['A'-'Z' 'a'-'z' '\192'-'\214' '\216'-'\246' '\248'-'\255']
-let extender = '\183'
-let digit = ['0'-'9']
-let hexdigit = ['0'-'9' 'A'-'F' 'a'-'f']
-let namechar = letter | digit | '.' | ':' | '-' | '_' | extender
-let name = ( letter | '_' | ':' ) namechar*
-let nmtoken = namechar+
-let ws = [ ' ' '\t' '\r' '\n' ]
-let string_literal1 = '"' [^ '"' '>' '<' '\n']* '"'
-let string_literal2 = "'" [^ '\'' '>' '<' '\n']* "'"
-
-
-(* This following rules reflect HTML as it is used, not the SGML
- * rules.
- *)
-
-rule scan_document = parse
-  | "<!--"
-      { Lcomment }
-  | "<!"
-      { Ldoctype }
-  | "<" name
-      { let s = Lexing.lexeme lexbuf in
-       Lelement (String.sub s 1 (String.length s - 1))
-      }
-  | "</" name
-      { let s = Lexing.lexeme lexbuf in
-       Lelementend (String.sub s 2 (String.length s - 2))
-      }
-  | "<"                (* misplaced "<" *)
-      { Cdata "<" }
-  | eof
-      { Eof }
-  | [^ '<' ]+
-      { Cdata (Lexing.lexeme lexbuf)}
-
-and scan_special = parse
-  | "</" name 
-      { let s = Lexing.lexeme lexbuf in
-       Lelementend (String.sub s 2 (String.length s - 2))
-      }
-  | "<"
-      { Cdata "<" }
-  | eof
-      { Eof }
-  | [^ '<' ]+
-      { Cdata (Lexing.lexeme lexbuf)}
-
-
-and scan_comment = parse
-  | "-->"
-      { Rcomment }
-  | "-"
-      { Mcomment }
-  | eof
-      { Eof }
-  | [^ '-']+
-      { Mcomment }
-
-and scan_doctype = parse
-  | ">"                   (* Occurence in strings, and [ ] brackets ignored *)
-      { Rdoctype }
-  | eof
-      { Eof }
-  | [^ '>' ] +
-      { Mdoctype }
-
-and scan_element = parse
-  | ">"
-      { Relement }
-  | ws+
-      { Space (String.length (Lexing.lexeme lexbuf)) }
-  | name
-      { Name (Lexing.lexeme lexbuf) }
-  | "="
-      { Is }
-  | string_literal1
-      { let s = Lexing.lexeme lexbuf in
-       Literal (String.sub s 1 (String.length s - 2)) 
-      }
-  | string_literal2
-      { let s = Lexing.lexeme lexbuf in
-       Literal (String.sub s 1 (String.length s - 2)) 
-      }
-  | eof
-      { Eof }
-  | _
-      { Other }
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/03/03 01:07:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netmappings.ml b/helm/DEVEL/pxp/netstring/netmappings.ml
deleted file mode 100644 (file)
index 4821350..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-type from_uni_list =
-    U_nil
-  | U_single of (int*int)
-  | U_list of (int*int) list
-;;
-
-let to_unicode = Hashtbl.create 50;;
-
-let from_unicode = Hashtbl.create 50;;
-
-let f_lock = ref (fun () -> ());;
-let f_unlock = ref (fun () -> ());;
-
-let lock () = !f_lock();;
-let unlock () = !f_unlock();;
-
-let init_mt new_f_lock new_f_unlock =
-  f_lock := new_f_lock;
-  f_unlock := new_f_unlock
-;;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/08/28 23:17:54  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netmappings.mli b/helm/DEVEL/pxp/netstring/netmappings.mli
deleted file mode 100644 (file)
index 1c52d07..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *)
-
-type from_uni_list =
-    U_nil
-  | U_single of (int*int)
-  | U_list of (int*int) list
-;;
-  (* A representation of (int*int) list that is optimized for the case that
-   * lists with 0 and 1 elements are the most frequent cases.
-   *)
-
-
-val to_unicode   : (Netconversion.encoding, 
-                   int array Lazy.t)           Hashtbl.t;;
-
-val from_unicode : (Netconversion.encoding, 
-                   from_uni_list array Lazy.t) Hashtbl.t;;
-  (* These hashtables are used internally by the parser to store
-   * the conversion tables from 8 bit encodings to Unicode and vice versa.
-   * It is normally not necessary to access these tables; the 
-   * Netconversion module does it already for you.
-   *
-   * Specification of the conversion tables:
-   *
-   * to_unicode: maps an 8 bit code to Unicode, i.e.
-   *    let m = Hashtbl.find `Enc_isoXXX to_unicode in
-   *    let unicode = m.(isocode) 
-   *    - This may be (-1) to indicate that the code point is not defined.
-   *
-   * from_unicode: maps Unicode to an 8 bit code, i.e.
-   *    let m = Hashtbl.find `Enc_isoXXX from_unicode in
-   *    let l = m.(unicode land 255)
-   *    Now search in l the pair (unicode, isocode), and return isocode.
-   *
-   * Note: It is guaranteed that both arrays have always 256 elements.
-   *)
-
-val lock : unit -> unit
-  (* In multi-threaded applications: obtains a lock which is required to
-   * Lazy.force the values found in to_unicode and from_unicode.
-   * In single-threaded applications: a NO-OP
-   *)
-
-val unlock : unit -> unit
-  (* In multi-threaded applications: releases the lock which is required to
-   * Lazy.force the values found in to_unicode and from_unicode.
-   * In single-threaded applications: a NO-OP
-   *)
-
-
-val init_mt : (unit -> unit) -> (unit -> unit) -> unit
-  (* Internally used; see netstring_mt.ml *)
-
-
-(* ---------------------------------------- *)
-
-(* The following comment was written when the conversion module belonged
- * to the PXP package (Polymorhic XML Parser).
- *)
-
-(* HOW TO ADD A NEW 8 BIT CODE:
- *
- * It is relatively simple to add a new 8 bit code to the system. This
- * means that the parser can read and write files with the new encoding;
- * this does not mean that the parser can represent the XML tree internally
- * by the new encoding.
- *
- * - Put a new unimap file into the "mappings" directory. The file format
- *   is simple; please look at the already existing files. 
- *   The name of the file determines the internal name of the code:
- *   If the file is called <name>.unimap, the code will be called
- *   `Enc_<name>.
- *
- * - Extend the type "encoding" in pxp_types.mli and pxp_types.ml
- *
- * - Extend the two functions encoding_of_string and string_of_encoding
- *   in pxp_types.ml
- *
- * - Recompile the parser
- *
- * Every encoding consumes at least 3kB of memory, but this may be much more 
- * if the code points are dispersed on the Unicode code space.
- *
- * Perhaps the addition of new codes will become even simpler in future
- * versions of PXP; but it is currently more important to support 
- * non-8-bit codes, too.
- * Every contribution of new codes to PXP is welcome!
- *)
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/08/29 00:47:24  gerd
- *     New type for the conversion Unicode to 8bit.
- *     Conversion tables are now lazy. Thus also mutexes are required.
- *
- * Revision 1.1  2000/08/13 00:02:57  gerd
- *     Initial revision.
- *
- *
- * ======================================================================
- * OLD LOGS FROM THE PXP PACKAGE (FILE NAME pxp_mappings.mli):
- * 
- * Revision 1.1  2000/07/27 00:40:02  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netmappings_iso.ml b/helm/DEVEL/pxp/netstring/netmappings_iso.ml
deleted file mode 100644 (file)
index 9b86aae..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-(* WARNING! This is a generated file! *)
-let iso88591_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\001\000\161\001\000\162\001\000\163\001\000\164\001\000\165\001\000\166\001\000\167\001\000\168\001\000\169\001\000\170\001\000\171\001\000\172\001\000\173\001\000\174\001\000\175\001\000\176\001\000\177\001\000\178\001\000\179\001\000\180\001\000\181\001\000\182\001\000\183\001\000\184\001\000\185\001\000\186\001\000\187\001\000\188\001\000\189\001\000\190\001\000\191\001\000\192\001\000\193\001\000\194\001\000\195\001\000\196\001\000\197\001\000\198\001\000\199\001\000\200\001\000\201\001\000\202\001\000\203\001\000\204\001\000\205\001\000\206\001\000\207\001\000\208\001\000\209\001\000\210\001\000\211\001\000\212\001\000\213\001\000\214\001\000\215\001\000\216\001\000\217\001\000\218\001\000\219\001\000\220\001\000\221\001\000\222\001\000\223\001\000\224\001\000\225\001\000\226\001\000\227\001\000\228\001\000\229\001\000\230\001\000\231\001\000\232\001\000\233\001\000\234\001\000\235\001\000\236\001\000\237\001\000\238\001\000\239\001\000\240\001\000\241\001\000\242\001\000\243\001\000\244\001\000\245\001\000\246\001\000\247\001\000\248\001\000\249\001\000\250\001\000\251\001\000\252\001\000\253\001\000\254\001\000\255" 0 : int array);;
-let iso88591_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\133\000\000\000\000\000\000\006\001\000\000\006\001\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160TT\144\160UU\144\160VV\144\160WW\144\160XX\144\160YY\144\160ZZ\144\160[[\144\160\\\\\144\160]]\144\160^^\144\160__\144\160``\144\160aa\144\160bb\144\160cc\144\160dd\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001\000\128\001\000\128\144\160\001\000\129\001\000\129\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\144\160\001\000\132\001\000\132\144\160\001\000\133\001\000\133\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\144\160\001\000\137\001\000\137\144\160\001\000\138\001\000\138\144\160\001\000\139\001\000\139\144\160\001\000\140\001\000\140\144\160\001\000\141\001\000\141\144\160\001\000\142\001\000\142\144\160\001\000\143\001\000\143\144\160\001\000\144\001\000\144\144\160\001\000\145\001\000\145\144\160\001\000\146\001\000\146\144\160\001\000\147\001\000\147\144\160\001\000\148\001\000\148\144\160\001\000\149\001\000\149\144\160\001\000\150\001\000\150\144\160\001\000\151\001\000\151\144\160\001\000\152\001\000\152\144\160\001\000\153\001\000\153\144\160\001\000\154\001\000\154\144\160\001\000\155\001\000\155\144\160\001\000\156\001\000\156\144\160\001\000\157\001\000\157\144\160\001\000\158\001\000\158\144\160\001\000\159\001\000\159\144\160\001\000\160\001\000\160\144\160\001\000\161\001\000\161\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163\144\160\001\000\164\001\000\164\144\160\001\000\165\001\000\165\144\160\001\000\166\001\000\166\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\168\144\160\001\000\169\001\000\169\144\160\001\000\170\001\000\170\144\160\001\000\171\001\000\171\144\160\001\000\172\001\000\172\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174\144\160\001\000\175\001\000\175\144\160\001\000\176\001\000\176\144\160\001\000\177\001\000\177\144\160\001\000\178\001\000\178\144\160\001\000\179\001\000\179\144\160\001\000\180\001\000\180\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\183\144\160\001\000\184\001\000\184\144\160\001\000\185\001\000\185\144\160\001\000\186\001\000\186\144\160\001\000\187\001\000\187\144\160\001\000\188\001\000\188\144\160\001\000\189\001\000\189\144\160\001\000\190\001\000\190\144\160\001\000\191\001\000\191\144\160\001\000\192\001\000\192\144\160\001\000\193\001\000\193\144\160\001\000\194\001\000\194\144\160\001\000\195\001\000\195\144\160\001\000\196\001\000\196\144\160\001\000\197\001\000\197\144\160\001\000\198\001\000\198\144\160\001\000\199\001\000\199\144\160\001\000\200\001\000\200\144\160\001\000\201\001\000\201\144\160\001\000\202\001\000\202\144\160\001\000\203\001\000\203\144\160\001\000\204\001\000\204\144\160\001\000\205\001\000\205\144\160\001\000\206\001\000\206\144\160\001\000\207\001\000\207\144\160\001\000\208\001\000\208\144\160\001\000\209\001\000\209\144\160\001\000\210\001\000\210\144\160\001\000\211\001\000\211\144\160\001\000\212\001\000\212\144\160\001\000\213\001\000\213\144\160\001\000\214\001\000\214\144\160\001\000\215\001\000\215\144\160\001\000\216\001\000\216\144\160\001\000\217\001\000\217\144\160\001\000\218\001\000\218\144\160\001\000\219\001\000\219\144\160\001\000\220\001\000\220\144\160\001\000\221\001\000\221\144\160\001\000\222\001\000\222\144\160\001\000\223\001\000\223\144\160\001\000\224\001\000\224\144\160\001\000\225\001\000\225\144\160\001\000\226\001\000\226\144\160\001\000\227\001\000\227\144\160\001\000\228\001\000\228\144\160\001\000\229\001\000\229\144\160\001\000\230\001\000\230\144\160\001\000\231\001\000\231\144\160\001\000\232\001\000\232\144\160\001\000\233\001\000\233\144\160\001\000\234\001\000\234\144\160\001\000\235\001\000\235\144\160\001\000\236\001\000\236\144\160\001\000\237\001\000\237\144\160\001\000\238\001\000\238\144\160\001\000\239\001\000\239\144\160\001\000\240\001\000\240\144\160\001\000\241\001\000\241\144\160\001\000\242\001\000\242\144\160\001\000\243\001\000\243\144\160\001\000\244\001\000\244\144\160\001\000\245\001\000\245\144\160\001\000\246\001\000\246\144\160\001\000\247\001\000\247\144\160\001\000\248\001\000\248\144\160\001\000\249\001\000\249\144\160\001\000\250\001\000\250\144\160\001\000\251\001\000\251\144\160\001\000\252\001\000\252\144\160\001\000\253\001\000\253\144\160\001\000\254\001\000\254\144\160\001\000\255\001\000\255" 0 : Netmappings.from_uni_list array);;
- let iso885910_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\001\001\004\001\001\018\001\001\"\001\001*\001\001(\001\0016\001\000\167\001\001;\001\001\016\001\001`\001\001f\001\001}\001\000\173\001\001j\001\001J\001\000\176\001\001\005\001\001\019\001\001#\001\001+\001\001)\001\0017\001\000\183\001\001<\001\001\017\001\001a\001\001g\001\001~\001 \021\001\001k\001\001K\001\001\000\001\000\193\001\000\194\001\000\195\001\000\196\001\000\197\001\000\198\001\001.\001\001\012\001\000\201\001\001\024\001\000\203\001\001\022\001\000\205\001\000\206\001\000\207\001\000\208\001\001E\001\001L\001\000\211\001\000\212\001\000\213\001\000\214\001\001h\001\000\216\001\001r\001\000\218\001\000\219\001\000\220\001\000\221\001\000\222\001\000\223\001\001\001\001\000\225\001\000\226\001\000\227\001\000\228\001\000\229\001\000\230\001\001/\001\001\013\001\000\233\001\001\025\001\000\235\001\001\023\001\000\237\001\000\238\001\000\239\001\000\240\001\001F\001\001M\001\000\243\001\000\244\001\000\245\001\000\246\001\001i\001\000\248\001\001s\001\000\250\001\000\251\001\000\252\001\000\253\001\000\254\001\0018" 0 : int array);;
-let iso885910_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007\015\000\000\000\000\000\000\006\185\000\000\006\185\008\000\004\000\000\145\160\160@@\160\160\001\001\000\001\000\192@\145\160\160AA\160\160\001\001\001\001\000\224@\144\160BB\144\160CC\145\160\160DD\160\160\001\001\004\001\000\161@\145\160\160EE\160\160\001\001\005\001\000\177@\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001\001\012\001\000\200@\145\160\160MM\160\160\001\001\013\001\000\232@\144\160NN\144\160OO\145\160\160PP\160\160\001\001\016\001\000\169@\145\160\160QQ\160\160\001\001\017\001\000\185@\145\160\160RR\160\160\001\001\018\001\000\162@\145\160\160SS\160\160\001\001\019\001\000\178@\144\160TT\145\160\160UU\160\160\001 \021\001\000\189@\145\160\160VV\160\160\001\001\022\001\000\204@\145\160\160WW\160\160\001\001\023\001\000\236@\145\160\160XX\160\160\001\001\024\001\000\202@\145\160\160YY\160\160\001\001\025\001\000\234@\144\160ZZ\144\160[[\144\160\\\\\144\160]]\144\160^^\144\160__\144\160``\144\160aa\145\160\160bb\160\160\001\001\"\001\000\163@\145\160\160cc\160\160\001\001#\001\000\179@\144\160dd\144\160ee\144\160ff\144\160gg\145\160\160hh\160\160\001\001(\001\000\165@\145\160\160ii\160\160\001\001)\001\000\181@\145\160\160jj\160\160\001\001*\001\000\164@\145\160\160kk\160\160\001\001+\001\000\180@\144\160ll\144\160mm\145\160\160nn\160\160\001\001.\001\000\199@\145\160\160oo\160\160\001\001/\001\000\231@\144\160pp\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\145\160\160vv\160\160\001\0016\001\000\166@\145\160\160ww\160\160\001\0017\001\000\182@\145\160\160xx\160\160\001\0018\001\000\255@\144\160yy\144\160zz\145\160\160{{\160\160\001\001;\001\000\168@\145\160\160||\160\160\001\001<\001\000\184@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\145\160\160\000E\000E\160\160\001\001E\001\000\209@\145\160\160\000F\000F\160\160\001\001F\001\000\241@\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\145\160\160\000J\000J\160\160\001\001J\001\000\175@\145\160\160\000K\000K\160\160\001\001K\001\000\191@\145\160\160\000L\000L\160\160\001\001L\001\000\210@\145\160\160\000M\000M\160\160\001\001M\001\000\242@\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001\001`\001\000\170@\145\160\160\000a\000a\160\160\001\001a\001\000\186@\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\145\160\160\000f\000f\160\160\001\001f\001\000\171@\145\160\160\000g\000g\160\160\001\001g\001\000\187@\145\160\160\000h\000h\160\160\001\001h\001\000\215@\145\160\160\000i\000i\160\160\001\001i\001\000\247@\145\160\160\000j\000j\160\160\001\001j\001\000\174@\145\160\160\000k\000k\160\160\001\001k\001\000\190@\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\145\160\160\000r\000r\160\160\001\001r\001\000\217@\145\160\160\000s\000s\160\160\001\001s\001\000\249@\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\145\160\160\000}\000}\160\160\001\001}\001\000\172@\145\160\160\000~\000~\160\160\001\001~\001\000\188@\144\160\000\127\000\127\144\160\001\000\128\001\000\128\144\160\001\000\129\001\000\129\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\144\160\001\000\132\001\000\132\144\160\001\000\133\001\000\133\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\144\160\001\000\137\001\000\137\144\160\001\000\138\001\000\138\144\160\001\000\139\001\000\139\144\160\001\000\140\001\000\140\144\160\001\000\141\001\000\141\144\160\001\000\142\001\000\142\144\160\001\000\143\001\000\143\144\160\001\000\144\001\000\144\144\160\001\000\145\001\000\145\144\160\001\000\146\001\000\146\144\160\001\000\147\001\000\147\144\160\001\000\148\001\000\148\144\160\001\000\149\001\000\149\144\160\001\000\150\001\000\150\144\160\001\000\151\001\000\151\144\160\001\000\152\001\000\152\144\160\001\000\153\001\000\153\144\160\001\000\154\001\000\154\144\160\001\000\155\001\000\155\144\160\001\000\156\001\000\156\144\160\001\000\157\001\000\157\144\160\001\000\158\001\000\158\144\160\001\000\159\001\000\159\144\160\001\000\160\001\000\160@@@@@@\144\160\001\000\167\001\000\167@@@@@\144\160\001\000\173\001\000\173@@\144\160\001\000\176\001\000\176@@@@@@\144\160\001\000\183\001\000\183@@@@@@@@@\144\160\001\000\193\001\000\193\144\160\001\000\194\001\000\194\144\160\001\000\195\001\000\195\144\160\001\000\196\001\000\196\144\160\001\000\197\001\000\197\144\160\001\000\198\001\000\198@@\144\160\001\000\201\001\000\201@\144\160\001\000\203\001\000\203@\144\160\001\000\205\001\000\205\144\160\001\000\206\001\000\206\144\160\001\000\207\001\000\207\144\160\001\000\208\001\000\208@@\144\160\001\000\211\001\000\211\144\160\001\000\212\001\000\212\144\160\001\000\213\001\000\213\144\160\001\000\214\001\000\214@\144\160\001\000\216\001\000\216@\144\160\001\000\218\001\000\218\144\160\001\000\219\001\000\219\144\160\001\000\220\001\000\220\144\160\001\000\221\001\000\221\144\160\001\000\222\001\000\222\144\160\001\000\223\001\000\223@\144\160\001\000\225\001\000\225\144\160\001\000\226\001\000\226\144\160\001\000\227\001\000\227\144\160\001\000\228\001\000\228\144\160\001\000\229\001\000\229\144\160\001\000\230\001\000\230@@\144\160\001\000\233\001\000\233@\144\160\001\000\235\001\000\235@\144\160\001\000\237\001\000\237\144\160\001\000\238\001\000\238\144\160\001\000\239\001\000\239\144\160\001\000\240\001\000\240@@\144\160\001\000\243\001\000\243\144\160\001\000\244\001\000\244\144\160\001\000\245\001\000\245\144\160\001\000\246\001\000\246@\144\160\001\000\248\001\000\248@\144\160\001\000\250\001\000\250\144\160\001\000\251\001\000\251\144\160\001\000\252\001\000\252\144\160\001\000\253\001\000\253\144\160\001\000\254\001\000\254@" 0 : Netmappings.from_uni_list array);;
- let iso885913_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\001 \029\001\000\162\001\000\163\001\000\164\001 \030\001\000\166\001\000\167\001\000\216\001\000\169\001\001V\001\000\171\001\000\172\001\000\173\001\000\174\001\000\198\001\000\176\001\000\177\001\000\178\001\000\179\001 \028\001\000\181\001\000\182\001\000\183\001\000\248\001\000\185\001\001W\001\000\187\001\000\188\001\000\189\001\000\190\001\000\230\001\001\004\001\001.\001\001\000\001\001\006\001\000\196\001\000\197\001\001\024\001\001\018\001\001\012\001\000\201\001\001y\001\001\022\001\001\"\001\0016\001\001*\001\001;\001\001`\001\001C\001\001E\001\000\211\001\001L\001\000\213\001\000\214\001\000\215\001\001r\001\001A\001\001Z\001\001j\001\000\220\001\001{\001\001}\001\000\223\001\001\005\001\001/\001\001\001\001\001\007\001\000\228\001\000\229\001\001\025\001\001\019\001\001\013\001\000\233\001\001z\001\001\023\001\001#\001\0017\001\001+\001\001<\001\001a\001\001D\001\001F\001\000\243\001\001M\001\000\245\001\000\246\001\000\247\001\001s\001\001B\001\001[\001\001k\001\000\252\001\001|\001\001~\001 \025" 0 : int array);;
-let iso885913_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007\031\000\000\000\000\000\000\006\206\000\000\006\206\008\000\004\000\000\145\160\160@@\160\160\001\001\000\001\000\194@\145\160\160AA\160\160\001\001\001\001\000\226@\144\160BB\144\160CC\145\160\160DD\160\160\001\001\004\001\000\192@\145\160\160EE\160\160\001\001\005\001\000\224@\145\160\160FF\160\160\001\001\006\001\000\195@\145\160\160GG\160\160\001\001\007\001\000\227@\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001\001\012\001\000\200@\145\160\160MM\160\160\001\001\013\001\000\232@\144\160NN\144\160OO\144\160PP\144\160QQ\145\160\160RR\160\160\001\001\018\001\000\199@\145\160\160SS\160\160\001\001\019\001\000\231@\144\160TT\144\160UU\145\160\160VV\160\160\001\001\022\001\000\203@\145\160\160WW\160\160\001\001\023\001\000\235@\145\160\160XX\160\160\001\001\024\001\000\198@\145\160\160YY\160\160\001\001\025\001\000\230\160\160\001 \025\001\000\255@\144\160ZZ\144\160[[\145\160\160\\\\\160\160\001 \028\001\000\180@\145\160\160]]\160\160\001 \029\001\000\161@\145\160\160^^\160\160\001 \030\001\000\165@\144\160__\144\160``\144\160aa\145\160\160bb\160\160\001\001\"\001\000\204@\145\160\160cc\160\160\001\001#\001\000\236@\144\160dd\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\145\160\160jj\160\160\001\001*\001\000\206@\145\160\160kk\160\160\001\001+\001\000\238@\144\160ll\144\160mm\145\160\160nn\160\160\001\001.\001\000\193@\145\160\160oo\160\160\001\001/\001\000\225@\144\160pp\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\145\160\160vv\160\160\001\0016\001\000\205@\145\160\160ww\160\160\001\0017\001\000\237@\144\160xx\144\160yy\144\160zz\145\160\160{{\160\160\001\001;\001\000\207@\145\160\160||\160\160\001\001<\001\000\239@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\145\160\160\000A\000A\160\160\001\001A\001\000\217@\145\160\160\000B\000B\160\160\001\001B\001\000\249@\145\160\160\000C\000C\160\160\001\001C\001\000\209@\145\160\160\000D\000D\160\160\001\001D\001\000\241@\145\160\160\000E\000E\160\160\001\001E\001\000\210@\145\160\160\000F\000F\160\160\001\001F\001\000\242@\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\145\160\160\000L\000L\160\160\001\001L\001\000\212@\145\160\160\000M\000M\160\160\001\001M\001\000\244@\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\145\160\160\000V\000V\160\160\001\001V\001\000\170@\145\160\160\000W\000W\160\160\001\001W\001\000\186@\144\160\000X\000X\144\160\000Y\000Y\145\160\160\000Z\000Z\160\160\001\001Z\001\000\218@\145\160\160\000[\000[\160\160\001\001[\001\000\250@\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001\001`\001\000\208@\145\160\160\000a\000a\160\160\001\001a\001\000\240@\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\145\160\160\000j\000j\160\160\001\001j\001\000\219@\145\160\160\000k\000k\160\160\001\001k\001\000\251@\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\145\160\160\000r\000r\160\160\001\001r\001\000\216@\145\160\160\000s\000s\160\160\001\001s\001\000\248@\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\145\160\160\000y\000y\160\160\001\001y\001\000\202@\145\160\160\000z\000z\160\160\001\001z\001\000\234@\145\160\160\000{\000{\160\160\001\001{\001\000\221@\145\160\160\000|\000|\160\160\001\001|\001\000\253@\145\160\160\000}\000}\160\160\001\001}\001\000\222@\145\160\160\000~\000~\160\160\001\001~\001\000\254@\144\160\000\127\000\127\144\160\001\000\128\001\000\128\144\160\001\000\129\001\000\129\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\144\160\001\000\132\001\000\132\144\160\001\000\133\001\000\133\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\144\160\001\000\137\001\000\137\144\160\001\000\138\001\000\138\144\160\001\000\139\001\000\139\144\160\001\000\140\001\000\140\144\160\001\000\141\001\000\141\144\160\001\000\142\001\000\142\144\160\001\000\143\001\000\143\144\160\001\000\144\001\000\144\144\160\001\000\145\001\000\145\144\160\001\000\146\001\000\146\144\160\001\000\147\001\000\147\144\160\001\000\148\001\000\148\144\160\001\000\149\001\000\149\144\160\001\000\150\001\000\150\144\160\001\000\151\001\000\151\144\160\001\000\152\001\000\152\144\160\001\000\153\001\000\153\144\160\001\000\154\001\000\154\144\160\001\000\155\001\000\155\144\160\001\000\156\001\000\156\144\160\001\000\157\001\000\157\144\160\001\000\158\001\000\158\144\160\001\000\159\001\000\159\144\160\001\000\160\001\000\160@\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163\144\160\001\000\164\001\000\164@\144\160\001\000\166\001\000\166\144\160\001\000\167\001\000\167@\144\160\001\000\169\001\000\169@\144\160\001\000\171\001\000\171\144\160\001\000\172\001\000\172\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174@\144\160\001\000\176\001\000\176\144\160\001\000\177\001\000\177\144\160\001\000\178\001\000\178\144\160\001\000\179\001\000\179@\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\183@\144\160\001\000\185\001\000\185@\144\160\001\000\187\001\000\187\144\160\001\000\188\001\000\188\144\160\001\000\189\001\000\189\144\160\001\000\190\001\000\190@@@@@\144\160\001\000\196\001\000\196\144\160\001\000\197\001\000\197\144\160\001\000\198\001\000\175@@\144\160\001\000\201\001\000\201@@@@@@@@@\144\160\001\000\211\001\000\211@\144\160\001\000\213\001\000\213\144\160\001\000\214\001\000\214\144\160\001\000\215\001\000\215\144\160\001\000\216\001\000\168@@@\144\160\001\000\220\001\000\220@@\144\160\001\000\223\001\000\223@@@@\144\160\001\000\228\001\000\228\144\160\001\000\229\001\000\229\144\160\001\000\230\001\000\191@@\144\160\001\000\233\001\000\233@@@@@@@@@\144\160\001\000\243\001\000\243@\144\160\001\000\245\001\000\245\144\160\001\000\246\001\000\246\144\160\001\000\247\001\000\247\144\160\001\000\248\001\000\184@@@\144\160\001\000\252\001\000\252@@@" 0 : Netmappings.from_uni_list array);;
- let iso885914_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\001\030\002\001\030\003\001\000\163\001\001\n\001\001\011\001\030\n\001\000\167\001\030\128\001\000\169\001\030\130\001\030\011\001\030\242\001\000\173\001\000\174\001\001x\001\030\030\001\030\031\001\001 \001\001!\001\030@\001\030A\001\000\182\001\030V\001\030\129\001\030W\001\030\131\001\030`\001\030\243\001\030\132\001\030\133\001\030a\001\000\192\001\000\193\001\000\194\001\000\195\001\000\196\001\000\197\001\000\198\001\000\199\001\000\200\001\000\201\001\000\202\001\000\203\001\000\204\001\000\205\001\000\206\001\000\207\001\001t\001\000\209\001\000\210\001\000\211\001\000\212\001\000\213\001\000\214\001\030j\001\000\216\001\000\217\001\000\218\001\000\219\001\000\220\001\000\221\001\001v\001\000\223\001\000\224\001\000\225\001\000\226\001\000\227\001\000\228\001\000\229\001\000\230\001\000\231\001\000\232\001\000\233\001\000\234\001\000\235\001\000\236\001\000\237\001\000\238\001\000\239\001\001u\001\000\241\001\000\242\001\000\243\001\000\244\001\000\245\001\000\246\001\030k\001\000\248\001\000\249\001\000\250\001\000\251\001\000\252\001\000\253\001\001w\001\000\255" 0 : int array);;
-let iso885914_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\222\000\000\000\000\000\000\006w\000\000\006w\008\000\004\000\000\144\160@@\144\160AA\145\160\160BB\160\160\001\030\002\001\000\161@\145\160\160CC\160\160\001\030\003\001\000\162@\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\145\160\160JJ\160\160\001\001\n\001\000\164\160\160\001\030\n\001\000\166@\145\160\160KK\160\160\001\001\011\001\000\165\160\160\001\030\011\001\000\171@\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160TT\144\160UU\144\160VV\144\160WW\144\160XX\144\160YY\144\160ZZ\144\160[[\144\160\\\\\144\160]]\145\160\160^^\160\160\001\030\030\001\000\176@\145\160\160__\160\160\001\030\031\001\000\177@\145\160\160``\160\160\001\001 \001\000\178@\145\160\160aa\160\160\001\001!\001\000\179@\144\160bb\144\160cc\144\160dd\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\145\160\160\000@\000@\160\160\001\030@\001\000\180@\145\160\160\000A\000A\160\160\001\030A\001\000\181@\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\145\160\160\000V\000V\160\160\001\030V\001\000\183@\145\160\160\000W\000W\160\160\001\030W\001\000\185@\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001\030`\001\000\187@\145\160\160\000a\000a\160\160\001\030a\001\000\191@\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\145\160\160\000j\000j\160\160\001\030j\001\000\215@\145\160\160\000k\000k\160\160\001\030k\001\000\247@\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\145\160\160\000t\000t\160\160\001\001t\001\000\208@\145\160\160\000u\000u\160\160\001\001u\001\000\240@\145\160\160\000v\000v\160\160\001\001v\001\000\222@\145\160\160\000w\000w\160\160\001\001w\001\000\254@\145\160\160\000x\000x\160\160\001\001x\001\000\175@\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\145\160\160\001\000\128\001\000\128\160\160\001\030\128\001\000\168@\145\160\160\001\000\129\001\000\129\160\160\001\030\129\001\000\184@\145\160\160\001\000\130\001\000\130\160\160\001\030\130\001\000\170@\145\160\160\001\000\131\001\000\131\160\160\001\030\131\001\000\186@\145\160\160\001\000\132\001\000\132\160\160\001\030\132\001\000\189@\145\160\160\001\000\133\001\000\133\160\160\001\030\133\001\000\190@\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\144\160\001\000\137\001\000\137\144\160\001\000\138\001\000\138\144\160\001\000\139\001\000\139\144\160\001\000\140\001\000\140\144\160\001\000\141\001\000\141\144\160\001\000\142\001\000\142\144\160\001\000\143\001\000\143\144\160\001\000\144\001\000\144\144\160\001\000\145\001\000\145\144\160\001\000\146\001\000\146\144\160\001\000\147\001\000\147\144\160\001\000\148\001\000\148\144\160\001\000\149\001\000\149\144\160\001\000\150\001\000\150\144\160\001\000\151\001\000\151\144\160\001\000\152\001\000\152\144\160\001\000\153\001\000\153\144\160\001\000\154\001\000\154\144\160\001\000\155\001\000\155\144\160\001\000\156\001\000\156\144\160\001\000\157\001\000\157\144\160\001\000\158\001\000\158\144\160\001\000\159\001\000\159\144\160\001\000\160\001\000\160@@\144\160\001\000\163\001\000\163@@@\144\160\001\000\167\001\000\167@\144\160\001\000\169\001\000\169@@@\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174@@@@@@@\144\160\001\000\182\001\000\182@@@@@@@@@\144\160\001\000\192\001\000\192\144\160\001\000\193\001\000\193\144\160\001\000\194\001\000\194\144\160\001\000\195\001\000\195\144\160\001\000\196\001\000\196\144\160\001\000\197\001\000\197\144\160\001\000\198\001\000\198\144\160\001\000\199\001\000\199\144\160\001\000\200\001\000\200\144\160\001\000\201\001\000\201\144\160\001\000\202\001\000\202\144\160\001\000\203\001\000\203\144\160\001\000\204\001\000\204\144\160\001\000\205\001\000\205\144\160\001\000\206\001\000\206\144\160\001\000\207\001\000\207@\144\160\001\000\209\001\000\209\144\160\001\000\210\001\000\210\144\160\001\000\211\001\000\211\144\160\001\000\212\001\000\212\144\160\001\000\213\001\000\213\144\160\001\000\214\001\000\214@\144\160\001\000\216\001\000\216\144\160\001\000\217\001\000\217\144\160\001\000\218\001\000\218\144\160\001\000\219\001\000\219\144\160\001\000\220\001\000\220\144\160\001\000\221\001\000\221@\144\160\001\000\223\001\000\223\144\160\001\000\224\001\000\224\144\160\001\000\225\001\000\225\144\160\001\000\226\001\000\226\144\160\001\000\227\001\000\227\144\160\001\000\228\001\000\228\144\160\001\000\229\001\000\229\144\160\001\000\230\001\000\230\144\160\001\000\231\001\000\231\144\160\001\000\232\001\000\232\144\160\001\000\233\001\000\233\144\160\001\000\234\001\000\234\144\160\001\000\235\001\000\235\144\160\001\000\236\001\000\236\144\160\001\000\237\001\000\237\144\160\001\000\238\001\000\238\144\160\001\000\239\001\000\239@\144\160\001\000\241\001\000\241\145\160\160\001\030\242\001\000\172\160\160\001\000\242\001\000\242@\145\160\160\001\030\243\001\000\188\160\160\001\000\243\001\000\243@\144\160\001\000\244\001\000\244\144\160\001\000\245\001\000\245\144\160\001\000\246\001\000\246@\144\160\001\000\248\001\000\248\144\160\001\000\249\001\000\249\144\160\001\000\250\001\000\250\144\160\001\000\251\001\000\251\144\160\001\000\252\001\000\252\144\160\001\000\253\001\000\253@\144\160\001\000\255\001\000\255" 0 : Netmappings.from_uni_list array);;
- let iso885915_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\001\000\161\001\000\162\001\000\163\001 \172\001\000\165\001\001`\001\000\167\001\001a\001\000\169\001\000\170\001\000\171\001\000\172\001\000\173\001\000\174\001\000\175\001\000\176\001\000\177\001\000\178\001\000\179\001\001}\001\000\181\001\000\182\001\000\183\001\001~\001\000\185\001\000\186\001\000\187\001\001R\001\001S\001\001x\001\000\191\001\000\192\001\000\193\001\000\194\001\000\195\001\000\196\001\000\197\001\000\198\001\000\199\001\000\200\001\000\201\001\000\202\001\000\203\001\000\204\001\000\205\001\000\206\001\000\207\001\000\208\001\000\209\001\000\210\001\000\211\001\000\212\001\000\213\001\000\214\001\000\215\001\000\216\001\000\217\001\000\218\001\000\219\001\000\220\001\000\221\001\000\222\001\000\223\001\000\224\001\000\225\001\000\226\001\000\227\001\000\228\001\000\229\001\000\230\001\000\231\001\000\232\001\000\233\001\000\234\001\000\235\001\000\236\001\000\237\001\000\238\001\000\239\001\000\240\001\000\241\001\000\242\001\000\243\001\000\244\001\000\245\001\000\246\001\000\247\001\000\248\001\000\249\001\000\250\001\000\251\001\000\252\001\000\253\001\000\254\001\000\255" 0 : int array);;
-let iso885915_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\157\000\000\000\000\000\000\006!\000\000\006!\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160TT\144\160UU\144\160VV\144\160WW\144\160XX\144\160YY\144\160ZZ\144\160[[\144\160\\\\\144\160]]\144\160^^\144\160__\144\160``\144\160aa\144\160bb\144\160cc\144\160dd\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\145\160\160\000R\000R\160\160\001\001R\001\000\188@\145\160\160\000S\000S\160\160\001\001S\001\000\189@\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001\001`\001\000\166@\145\160\160\000a\000a\160\160\001\001a\001\000\168@\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\145\160\160\000x\000x\160\160\001\001x\001\000\190@\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\145\160\160\000}\000}\160\160\001\001}\001\000\180@\145\160\160\000~\000~\160\160\001\001~\001\000\184@\144\160\000\127\000\127\144\160\001\000\128\001\000\128\144\160\001\000\129\001\000\129\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\144\160\001\000\132\001\000\132\144\160\001\000\133\001\000\133\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\144\160\001\000\137\001\000\137\144\160\001\000\138\001\000\138\144\160\001\000\139\001\000\139\144\160\001\000\140\001\000\140\144\160\001\000\141\001\000\141\144\160\001\000\142\001\000\142\144\160\001\000\143\001\000\143\144\160\001\000\144\001\000\144\144\160\001\000\145\001\000\145\144\160\001\000\146\001\000\146\144\160\001\000\147\001\000\147\144\160\001\000\148\001\000\148\144\160\001\000\149\001\000\149\144\160\001\000\150\001\000\150\144\160\001\000\151\001\000\151\144\160\001\000\152\001\000\152\144\160\001\000\153\001\000\153\144\160\001\000\154\001\000\154\144\160\001\000\155\001\000\155\144\160\001\000\156\001\000\156\144\160\001\000\157\001\000\157\144\160\001\000\158\001\000\158\144\160\001\000\159\001\000\159\144\160\001\000\160\001\000\160\144\160\001\000\161\001\000\161\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163@\144\160\001\000\165\001\000\165@\144\160\001\000\167\001\000\167@\144\160\001\000\169\001\000\169\144\160\001\000\170\001\000\170\144\160\001\000\171\001\000\171\145\160\160\001 \172\001\000\164\160\160\001\000\172\001\000\172@\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174\144\160\001\000\175\001\000\175\144\160\001\000\176\001\000\176\144\160\001\000\177\001\000\177\144\160\001\000\178\001\000\178\144\160\001\000\179\001\000\179@\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\183@\144\160\001\000\185\001\000\185\144\160\001\000\186\001\000\186\144\160\001\000\187\001\000\187@@@\144\160\001\000\191\001\000\191\144\160\001\000\192\001\000\192\144\160\001\000\193\001\000\193\144\160\001\000\194\001\000\194\144\160\001\000\195\001\000\195\144\160\001\000\196\001\000\196\144\160\001\000\197\001\000\197\144\160\001\000\198\001\000\198\144\160\001\000\199\001\000\199\144\160\001\000\200\001\000\200\144\160\001\000\201\001\000\201\144\160\001\000\202\001\000\202\144\160\001\000\203\001\000\203\144\160\001\000\204\001\000\204\144\160\001\000\205\001\000\205\144\160\001\000\206\001\000\206\144\160\001\000\207\001\000\207\144\160\001\000\208\001\000\208\144\160\001\000\209\001\000\209\144\160\001\000\210\001\000\210\144\160\001\000\211\001\000\211\144\160\001\000\212\001\000\212\144\160\001\000\213\001\000\213\144\160\001\000\214\001\000\214\144\160\001\000\215\001\000\215\144\160\001\000\216\001\000\216\144\160\001\000\217\001\000\217\144\160\001\000\218\001\000\218\144\160\001\000\219\001\000\219\144\160\001\000\220\001\000\220\144\160\001\000\221\001\000\221\144\160\001\000\222\001\000\222\144\160\001\000\223\001\000\223\144\160\001\000\224\001\000\224\144\160\001\000\225\001\000\225\144\160\001\000\226\001\000\226\144\160\001\000\227\001\000\227\144\160\001\000\228\001\000\228\144\160\001\000\229\001\000\229\144\160\001\000\230\001\000\230\144\160\001\000\231\001\000\231\144\160\001\000\232\001\000\232\144\160\001\000\233\001\000\233\144\160\001\000\234\001\000\234\144\160\001\000\235\001\000\235\144\160\001\000\236\001\000\236\144\160\001\000\237\001\000\237\144\160\001\000\238\001\000\238\144\160\001\000\239\001\000\239\144\160\001\000\240\001\000\240\144\160\001\000\241\001\000\241\144\160\001\000\242\001\000\242\144\160\001\000\243\001\000\243\144\160\001\000\244\001\000\244\144\160\001\000\245\001\000\245\144\160\001\000\246\001\000\246\144\160\001\000\247\001\000\247\144\160\001\000\248\001\000\248\144\160\001\000\249\001\000\249\144\160\001\000\250\001\000\250\144\160\001\000\251\001\000\251\144\160\001\000\252\001\000\252\144\160\001\000\253\001\000\253\144\160\001\000\254\001\000\254\144\160\001\000\255\001\000\255" 0 : Netmappings.from_uni_list array);;
- let iso88592_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\001\001\004\001\002\216\001\001A\001\000\164\001\001=\001\001Z\001\000\167\001\000\168\001\001`\001\001^\001\001d\001\001y\001\000\173\001\001}\001\001{\001\000\176\001\001\005\001\002\219\001\001B\001\000\180\001\001>\001\001[\001\002\199\001\000\184\001\001a\001\001_\001\001e\001\001z\001\002\221\001\001~\001\001|\001\001T\001\000\193\001\000\194\001\001\002\001\000\196\001\0019\001\001\006\001\000\199\001\001\012\001\000\201\001\001\024\001\000\203\001\001\026\001\000\205\001\000\206\001\001\014\001\001\016\001\001C\001\001G\001\000\211\001\000\212\001\001P\001\000\214\001\000\215\001\001X\001\001n\001\000\218\001\001p\001\000\220\001\000\221\001\001b\001\000\223\001\001U\001\000\225\001\000\226\001\001\003\001\000\228\001\001:\001\001\007\001\000\231\001\001\013\001\000\233\001\001\025\001\000\235\001\001\027\001\000\237\001\000\238\001\001\015\001\001\017\001\001D\001\001H\001\000\243\001\000\244\001\001Q\001\000\246\001\000\247\001\001Y\001\001o\001\000\250\001\001q\001\000\252\001\000\253\001\001c\001\002\217" 0 : int array);;
-let iso88592_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007'\000\000\000\000\000\000\006\217\000\000\006\217\008\000\004\000\000\144\160@@\144\160AA\145\160\160BB\160\160\001\001\002\001\000\195@\145\160\160CC\160\160\001\001\003\001\000\227@\145\160\160DD\160\160\001\001\004\001\000\161@\145\160\160EE\160\160\001\001\005\001\000\177@\145\160\160FF\160\160\001\001\006\001\000\198@\145\160\160GG\160\160\001\001\007\001\000\230@\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001\001\012\001\000\200@\145\160\160MM\160\160\001\001\013\001\000\232@\145\160\160NN\160\160\001\001\014\001\000\207@\145\160\160OO\160\160\001\001\015\001\000\239@\145\160\160PP\160\160\001\001\016\001\000\208@\145\160\160QQ\160\160\001\001\017\001\000\240@\144\160RR\144\160SS\144\160TT\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001\001\024\001\000\202@\145\160\160YY\160\160\001\001\025\001\000\234@\145\160\160ZZ\160\160\001\001\026\001\000\204@\145\160\160[[\160\160\001\001\027\001\000\236@\144\160\\\\\144\160]]\144\160^^\144\160__\144\160``\144\160aa\144\160bb\144\160cc\144\160dd\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\145\160\160yy\160\160\001\0019\001\000\197@\145\160\160zz\160\160\001\001:\001\000\229@\144\160{{\144\160||\145\160\160}}\160\160\001\001=\001\000\165@\145\160\160~~\160\160\001\001>\001\000\181@\144\160\127\127\144\160\000@\000@\145\160\160\000A\000A\160\160\001\001A\001\000\163@\145\160\160\000B\000B\160\160\001\001B\001\000\179@\145\160\160\000C\000C\160\160\001\001C\001\000\209@\145\160\160\000D\000D\160\160\001\001D\001\000\241@\144\160\000E\000E\144\160\000F\000F\145\160\160\000G\000G\160\160\001\001G\001\000\210@\145\160\160\000H\000H\160\160\001\001H\001\000\242@\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001\001P\001\000\213@\145\160\160\000Q\000Q\160\160\001\001Q\001\000\245@\144\160\000R\000R\144\160\000S\000S\145\160\160\000T\000T\160\160\001\001T\001\000\192@\145\160\160\000U\000U\160\160\001\001U\001\000\224@\144\160\000V\000V\144\160\000W\000W\145\160\160\000X\000X\160\160\001\001X\001\000\216@\145\160\160\000Y\000Y\160\160\001\001Y\001\000\248@\145\160\160\000Z\000Z\160\160\001\001Z\001\000\166@\145\160\160\000[\000[\160\160\001\001[\001\000\182@\144\160\000\\\000\\\144\160\000]\000]\145\160\160\000^\000^\160\160\001\001^\001\000\170@\145\160\160\000_\000_\160\160\001\001_\001\000\186@\145\160\160\000`\000`\160\160\001\001`\001\000\169@\145\160\160\000a\000a\160\160\001\001a\001\000\185@\145\160\160\000b\000b\160\160\001\001b\001\000\222@\145\160\160\000c\000c\160\160\001\001c\001\000\254@\145\160\160\000d\000d\160\160\001\001d\001\000\171@\145\160\160\000e\000e\160\160\001\001e\001\000\187@\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\145\160\160\000n\000n\160\160\001\001n\001\000\217@\145\160\160\000o\000o\160\160\001\001o\001\000\249@\145\160\160\000p\000p\160\160\001\001p\001\000\219@\145\160\160\000q\000q\160\160\001\001q\001\000\251@\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\145\160\160\000y\000y\160\160\001\001y\001\000\172@\145\160\160\000z\000z\160\160\001\001z\001\000\188@\145\160\160\000{\000{\160\160\001\001{\001\000\175@\145\160\160\000|\000|\160\160\001\001|\001\000\191@\145\160\160\000}\000}\160\160\001\001}\001\000\174@\145\160\160\000~\000~\160\160\001\001~\001\000\190@\144\160\000\127\000\127\144\160\001\000\128\001\000\128\144\160\001\000\129\001\000\129\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\144\160\001\000\132\001\000\132\144\160\001\000\133\001\000\133\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\144\160\001\000\137\001\000\137\144\160\001\000\138\001\000\138\144\160\001\000\139\001\000\139\144\160\001\000\140\001\000\140\144\160\001\000\141\001\000\141\144\160\001\000\142\001\000\142\144\160\001\000\143\001\000\143\144\160\001\000\144\001\000\144\144\160\001\000\145\001\000\145\144\160\001\000\146\001\000\146\144\160\001\000\147\001\000\147\144\160\001\000\148\001\000\148\144\160\001\000\149\001\000\149\144\160\001\000\150\001\000\150\144\160\001\000\151\001\000\151\144\160\001\000\152\001\000\152\144\160\001\000\153\001\000\153\144\160\001\000\154\001\000\154\144\160\001\000\155\001\000\155\144\160\001\000\156\001\000\156\144\160\001\000\157\001\000\157\144\160\001\000\158\001\000\158\144\160\001\000\159\001\000\159\144\160\001\000\160\001\000\160@@@\144\160\001\000\164\001\000\164@@\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\168@@@@\144\160\001\000\173\001\000\173@@\144\160\001\000\176\001\000\176@@@\144\160\001\000\180\001\000\180@@@\144\160\001\000\184\001\000\184@@@@@@@@\144\160\001\000\193\001\000\193\144\160\001\000\194\001\000\194@\144\160\001\000\196\001\000\196@@\145\160\160\001\002\199\001\000\183\160\160\001\000\199\001\000\199@@\144\160\001\000\201\001\000\201@\144\160\001\000\203\001\000\203@\144\160\001\000\205\001\000\205\144\160\001\000\206\001\000\206@@@@\144\160\001\000\211\001\000\211\144\160\001\000\212\001\000\212@\144\160\001\000\214\001\000\214\144\160\001\000\215\001\000\215\144\160\001\002\216\001\000\162\144\160\001\002\217\001\000\255\144\160\001\000\218\001\000\218\144\160\001\002\219\001\000\178\144\160\001\000\220\001\000\220\145\160\160\001\002\221\001\000\189\160\160\001\000\221\001\000\221@@\144\160\001\000\223\001\000\223@\144\160\001\000\225\001\000\225\144\160\001\000\226\001\000\226@\144\160\001\000\228\001\000\228@@\144\160\001\000\231\001\000\231@\144\160\001\000\233\001\000\233@\144\160\001\000\235\001\000\235@\144\160\001\000\237\001\000\237\144\160\001\000\238\001\000\238@@@@\144\160\001\000\243\001\000\243\144\160\001\000\244\001\000\244@\144\160\001\000\246\001\000\246\144\160\001\000\247\001\000\247@@\144\160\001\000\250\001\000\250@\144\160\001\000\252\001\000\252\144\160\001\000\253\001\000\253@@" 0 : Netmappings.from_uni_list array);;
- let iso88593_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002>\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\001\001&\001\002\216\001\000\163\001\000\164\000\255\001\001$\001\000\167\001\000\168\001\0010\001\001^\001\001\030\001\0014\001\000\173\000\255\001\001{\001\000\176\001\001'\001\000\178\001\000\179\001\000\180\001\000\181\001\001%\001\000\183\001\000\184\001\0011\001\001_\001\001\031\001\0015\001\000\189\000\255\001\001|\001\000\192\001\000\193\001\000\194\000\255\001\000\196\001\001\n\001\001\008\001\000\199\001\000\200\001\000\201\001\000\202\001\000\203\001\000\204\001\000\205\001\000\206\001\000\207\000\255\001\000\209\001\000\210\001\000\211\001\000\212\001\001 \001\000\214\001\000\215\001\001\028\001\000\217\001\000\218\001\000\219\001\000\220\001\001l\001\001\\\001\000\223\001\000\224\001\000\225\001\000\226\000\255\001\000\228\001\001\011\001\001\t\001\000\231\001\000\232\001\000\233\001\000\234\001\000\235\001\000\236\001\000\237\001\000\238\001\000\239\000\255\001\000\241\001\000\242\001\000\243\001\000\244\001\001!\001\000\246\001\000\247\001\001\029\001\000\249\001\000\250\001\000\251\001\000\252\001\001m\001\001]\001\002\217" 0 : int array);;
-let iso88593_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\165\000\000\000\000\000\000\006J\000\000\006J\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\145\160\160HH\160\160\001\001\008\001\000\198@\145\160\160II\160\160\001\001\t\001\000\230@\145\160\160JJ\160\160\001\001\n\001\000\197@\145\160\160KK\160\160\001\001\011\001\000\229@\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160TT\144\160UU\144\160VV\144\160WW\144\160XX\144\160YY\144\160ZZ\144\160[[\145\160\160\\\\\160\160\001\001\028\001\000\216@\145\160\160]]\160\160\001\001\029\001\000\248@\145\160\160^^\160\160\001\001\030\001\000\171@\145\160\160__\160\160\001\001\031\001\000\187@\145\160\160``\160\160\001\001 \001\000\213@\145\160\160aa\160\160\001\001!\001\000\245@\144\160bb\144\160cc\145\160\160dd\160\160\001\001$\001\000\166@\145\160\160ee\160\160\001\001%\001\000\182@\145\160\160ff\160\160\001\001&\001\000\161@\145\160\160gg\160\160\001\001'\001\000\177@\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\145\160\160pp\160\160\001\0010\001\000\169@\145\160\160qq\160\160\001\0011\001\000\185@\144\160rr\144\160ss\145\160\160tt\160\160\001\0014\001\000\172@\145\160\160uu\160\160\001\0015\001\000\188@\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\145\160\160\000\\\000\\\160\160\001\001\\\001\000\222@\145\160\160\000]\000]\160\160\001\001]\001\000\254@\145\160\160\000^\000^\160\160\001\001^\001\000\170@\145\160\160\000_\000_\160\160\001\001_\001\000\186@\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\145\160\160\000l\000l\160\160\001\001l\001\000\221@\145\160\160\000m\000m\160\160\001\001m\001\000\253@\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\145\160\160\000{\000{\160\160\001\001{\001\000\175@\145\160\160\000|\000|\160\160\001\001|\001\000\191@\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001\000\128\001\000\128\144\160\001\000\129\001\000\129\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\144\160\001\000\132\001\000\132\144\160\001\000\133\001\000\133\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\144\160\001\000\137\001\000\137\144\160\001\000\138\001\000\138\144\160\001\000\139\001\000\139\144\160\001\000\140\001\000\140\144\160\001\000\141\001\000\141\144\160\001\000\142\001\000\142\144\160\001\000\143\001\000\143\144\160\001\000\144\001\000\144\144\160\001\000\145\001\000\145\144\160\001\000\146\001\000\146\144\160\001\000\147\001\000\147\144\160\001\000\148\001\000\148\144\160\001\000\149\001\000\149\144\160\001\000\150\001\000\150\144\160\001\000\151\001\000\151\144\160\001\000\152\001\000\152\144\160\001\000\153\001\000\153\144\160\001\000\154\001\000\154\144\160\001\000\155\001\000\155\144\160\001\000\156\001\000\156\144\160\001\000\157\001\000\157\144\160\001\000\158\001\000\158\144\160\001\000\159\001\000\159\144\160\001\000\160\001\000\160@@\144\160\001\000\163\001\000\163\144\160\001\000\164\001\000\164@@\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\168@@@@\144\160\001\000\173\001\000\173@@\144\160\001\000\176\001\000\176@\144\160\001\000\178\001\000\178\144\160\001\000\179\001\000\179\144\160\001\000\180\001\000\180\144\160\001\000\181\001\000\181@\144\160\001\000\183\001\000\183\144\160\001\000\184\001\000\184@@@@\144\160\001\000\189\001\000\189@@\144\160\001\000\192\001\000\192\144\160\001\000\193\001\000\193\144\160\001\000\194\001\000\194@\144\160\001\000\196\001\000\196@@\144\160\001\000\199\001\000\199\144\160\001\000\200\001\000\200\144\160\001\000\201\001\000\201\144\160\001\000\202\001\000\202\144\160\001\000\203\001\000\203\144\160\001\000\204\001\000\204\144\160\001\000\205\001\000\205\144\160\001\000\206\001\000\206\144\160\001\000\207\001\000\207@\144\160\001\000\209\001\000\209\144\160\001\000\210\001\000\210\144\160\001\000\211\001\000\211\144\160\001\000\212\001\000\212@\144\160\001\000\214\001\000\214\144\160\001\000\215\001\000\215\144\160\001\002\216\001\000\162\145\160\160\001\000\217\001\000\217\160\160\001\002\217\001\000\255@\144\160\001\000\218\001\000\218\144\160\001\000\219\001\000\219\144\160\001\000\220\001\000\220@@\144\160\001\000\223\001\000\223\144\160\001\000\224\001\000\224\144\160\001\000\225\001\000\225\144\160\001\000\226\001\000\226@\144\160\001\000\228\001\000\228@@\144\160\001\000\231\001\000\231\144\160\001\000\232\001\000\232\144\160\001\000\233\001\000\233\144\160\001\000\234\001\000\234\144\160\001\000\235\001\000\235\144\160\001\000\236\001\000\236\144\160\001\000\237\001\000\237\144\160\001\000\238\001\000\238\144\160\001\000\239\001\000\239@\144\160\001\000\241\001\000\241\144\160\001\000\242\001\000\242\144\160\001\000\243\001\000\243\144\160\001\000\244\001\000\244@\144\160\001\000\246\001\000\246\144\160\001\000\247\001\000\247@\144\160\001\000\249\001\000\249\144\160\001\000\250\001\000\250\144\160\001\000\251\001\000\251\144\160\001\000\252\001\000\252@@@" 0 : Netmappings.from_uni_list array);;
- let iso88594_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\001\001\004\001\0018\001\001V\001\000\164\001\001(\001\001;\001\000\167\001\000\168\001\001`\001\001\018\001\001\"\001\001f\001\000\173\001\001}\001\000\175\001\000\176\001\001\005\001\002\219\001\001W\001\000\180\001\001)\001\001<\001\002\199\001\000\184\001\001a\001\001\019\001\001#\001\001g\001\001J\001\001~\001\001K\001\001\000\001\000\193\001\000\194\001\000\195\001\000\196\001\000\197\001\000\198\001\001.\001\001\012\001\000\201\001\001\024\001\000\203\001\001\022\001\000\205\001\000\206\001\001*\001\001\016\001\001E\001\001L\001\0016\001\000\212\001\000\213\001\000\214\001\000\215\001\000\216\001\001r\001\000\218\001\000\219\001\000\220\001\001h\001\001j\001\000\223\001\001\001\001\000\225\001\000\226\001\000\227\001\000\228\001\000\229\001\000\230\001\001/\001\001\013\001\000\233\001\001\025\001\000\235\001\001\023\001\000\237\001\000\238\001\001+\001\001\017\001\001F\001\001M\001\0017\001\000\244\001\000\245\001\000\246\001\000\247\001\000\248\001\001s\001\000\250\001\000\251\001\000\252\001\001i\001\001k\001\002\217" 0 : int array);;
-let iso88594_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007\021\000\000\000\000\000\000\006\193\000\000\006\193\008\000\004\000\000\145\160\160@@\160\160\001\001\000\001\000\192@\145\160\160AA\160\160\001\001\001\001\000\224@\144\160BB\144\160CC\145\160\160DD\160\160\001\001\004\001\000\161@\145\160\160EE\160\160\001\001\005\001\000\177@\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001\001\012\001\000\200@\145\160\160MM\160\160\001\001\013\001\000\232@\144\160NN\144\160OO\145\160\160PP\160\160\001\001\016\001\000\208@\145\160\160QQ\160\160\001\001\017\001\000\240@\145\160\160RR\160\160\001\001\018\001\000\170@\145\160\160SS\160\160\001\001\019\001\000\186@\144\160TT\144\160UU\145\160\160VV\160\160\001\001\022\001\000\204@\145\160\160WW\160\160\001\001\023\001\000\236@\145\160\160XX\160\160\001\001\024\001\000\202@\145\160\160YY\160\160\001\001\025\001\000\234@\144\160ZZ\144\160[[\144\160\\\\\144\160]]\144\160^^\144\160__\144\160``\144\160aa\145\160\160bb\160\160\001\001\"\001\000\171@\145\160\160cc\160\160\001\001#\001\000\187@\144\160dd\144\160ee\144\160ff\144\160gg\145\160\160hh\160\160\001\001(\001\000\165@\145\160\160ii\160\160\001\001)\001\000\181@\145\160\160jj\160\160\001\001*\001\000\207@\145\160\160kk\160\160\001\001+\001\000\239@\144\160ll\144\160mm\145\160\160nn\160\160\001\001.\001\000\199@\145\160\160oo\160\160\001\001/\001\000\231@\144\160pp\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\145\160\160vv\160\160\001\0016\001\000\211@\145\160\160ww\160\160\001\0017\001\000\243@\145\160\160xx\160\160\001\0018\001\000\162@\144\160yy\144\160zz\145\160\160{{\160\160\001\001;\001\000\166@\145\160\160||\160\160\001\001<\001\000\182@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\145\160\160\000E\000E\160\160\001\001E\001\000\209@\145\160\160\000F\000F\160\160\001\001F\001\000\241@\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\145\160\160\000J\000J\160\160\001\001J\001\000\189@\145\160\160\000K\000K\160\160\001\001K\001\000\191@\145\160\160\000L\000L\160\160\001\001L\001\000\210@\145\160\160\000M\000M\160\160\001\001M\001\000\242@\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\145\160\160\000V\000V\160\160\001\001V\001\000\163@\145\160\160\000W\000W\160\160\001\001W\001\000\179@\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001\001`\001\000\169@\145\160\160\000a\000a\160\160\001\001a\001\000\185@\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\145\160\160\000f\000f\160\160\001\001f\001\000\172@\145\160\160\000g\000g\160\160\001\001g\001\000\188@\145\160\160\000h\000h\160\160\001\001h\001\000\221@\145\160\160\000i\000i\160\160\001\001i\001\000\253@\145\160\160\000j\000j\160\160\001\001j\001\000\222@\145\160\160\000k\000k\160\160\001\001k\001\000\254@\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\145\160\160\000r\000r\160\160\001\001r\001\000\217@\145\160\160\000s\000s\160\160\001\001s\001\000\249@\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\145\160\160\000}\000}\160\160\001\001}\001\000\174@\145\160\160\000~\000~\160\160\001\001~\001\000\190@\144\160\000\127\000\127\144\160\001\000\128\001\000\128\144\160\001\000\129\001\000\129\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\144\160\001\000\132\001\000\132\144\160\001\000\133\001\000\133\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\144\160\001\000\137\001\000\137\144\160\001\000\138\001\000\138\144\160\001\000\139\001\000\139\144\160\001\000\140\001\000\140\144\160\001\000\141\001\000\141\144\160\001\000\142\001\000\142\144\160\001\000\143\001\000\143\144\160\001\000\144\001\000\144\144\160\001\000\145\001\000\145\144\160\001\000\146\001\000\146\144\160\001\000\147\001\000\147\144\160\001\000\148\001\000\148\144\160\001\000\149\001\000\149\144\160\001\000\150\001\000\150\144\160\001\000\151\001\000\151\144\160\001\000\152\001\000\152\144\160\001\000\153\001\000\153\144\160\001\000\154\001\000\154\144\160\001\000\155\001\000\155\144\160\001\000\156\001\000\156\144\160\001\000\157\001\000\157\144\160\001\000\158\001\000\158\144\160\001\000\159\001\000\159\144\160\001\000\160\001\000\160@@@\144\160\001\000\164\001\000\164@@\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\168@@@@\144\160\001\000\173\001\000\173@\144\160\001\000\175\001\000\175\144\160\001\000\176\001\000\176@@@\144\160\001\000\180\001\000\180@@@\144\160\001\000\184\001\000\184@@@@@@@@\144\160\001\000\193\001\000\193\144\160\001\000\194\001\000\194\144\160\001\000\195\001\000\195\144\160\001\000\196\001\000\196\144\160\001\000\197\001\000\197\144\160\001\000\198\001\000\198\144\160\001\002\199\001\000\183@\144\160\001\000\201\001\000\201@\144\160\001\000\203\001\000\203@\144\160\001\000\205\001\000\205\144\160\001\000\206\001\000\206@@@@@\144\160\001\000\212\001\000\212\144\160\001\000\213\001\000\213\144\160\001\000\214\001\000\214\144\160\001\000\215\001\000\215\144\160\001\000\216\001\000\216\144\160\001\002\217\001\000\255\144\160\001\000\218\001\000\218\145\160\160\001\002\219\001\000\178\160\160\001\000\219\001\000\219@\144\160\001\000\220\001\000\220@@\144\160\001\000\223\001\000\223@\144\160\001\000\225\001\000\225\144\160\001\000\226\001\000\226\144\160\001\000\227\001\000\227\144\160\001\000\228\001\000\228\144\160\001\000\229\001\000\229\144\160\001\000\230\001\000\230@@\144\160\001\000\233\001\000\233@\144\160\001\000\235\001\000\235@\144\160\001\000\237\001\000\237\144\160\001\000\238\001\000\238@@@@@\144\160\001\000\244\001\000\244\144\160\001\000\245\001\000\245\144\160\001\000\246\001\000\246\144\160\001\000\247\001\000\247\144\160\001\000\248\001\000\248@\144\160\001\000\250\001\000\250\144\160\001\000\251\001\000\251\144\160\001\000\252\001\000\252@@@" 0 : Netmappings.from_uni_list array);;
- let iso88595_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\001\004\001\001\004\002\001\004\003\001\004\004\001\004\005\001\004\006\001\004\007\001\004\008\001\004\t\001\004\n\001\004\011\001\004\012\001\000\173\001\004\014\001\004\015\001\004\016\001\004\017\001\004\018\001\004\019\001\004\020\001\004\021\001\004\022\001\004\023\001\004\024\001\004\025\001\004\026\001\004\027\001\004\028\001\004\029\001\004\030\001\004\031\001\004 \001\004!\001\004\"\001\004#\001\004$\001\004%\001\004&\001\004'\001\004(\001\004)\001\004*\001\004+\001\004,\001\004-\001\004.\001\004/\001\0040\001\0041\001\0042\001\0043\001\0044\001\0045\001\0046\001\0047\001\0048\001\0049\001\004:\001\004;\001\004<\001\004=\001\004>\001\004?\001\004@\001\004A\001\004B\001\004C\001\004D\001\004E\001\004F\001\004G\001\004H\001\004I\001\004J\001\004K\001\004L\001\004M\001\004N\001\004O\001!\022\001\004Q\001\004R\001\004S\001\004T\001\004U\001\004V\001\004W\001\004X\001\004Y\001\004Z\001\004[\001\004\\\001\000\167\001\004^\001\004_" 0 : int array);;
-let iso88595_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007\154\000\000\000\000\000\000\007r\000\000\007r\008\000\004\000\000\144\160@@\145\160\160AA\160\160\001\004\001\001\000\161@\145\160\160BB\160\160\001\004\002\001\000\162@\145\160\160CC\160\160\001\004\003\001\000\163@\145\160\160DD\160\160\001\004\004\001\000\164@\145\160\160EE\160\160\001\004\005\001\000\165@\145\160\160FF\160\160\001\004\006\001\000\166@\145\160\160GG\160\160\001\004\007\001\000\167@\145\160\160HH\160\160\001\004\008\001\000\168@\145\160\160II\160\160\001\004\t\001\000\169@\145\160\160JJ\160\160\001\004\n\001\000\170@\145\160\160KK\160\160\001\004\011\001\000\171@\145\160\160LL\160\160\001\004\012\001\000\172@\144\160MM\145\160\160NN\160\160\001\004\014\001\000\174@\145\160\160OO\160\160\001\004\015\001\000\175@\145\160\160PP\160\160\001\004\016\001\000\176@\145\160\160QQ\160\160\001\004\017\001\000\177@\145\160\160RR\160\160\001\004\018\001\000\178@\145\160\160SS\160\160\001\004\019\001\000\179@\145\160\160TT\160\160\001\004\020\001\000\180@\145\160\160UU\160\160\001\004\021\001\000\181@\145\160\160VV\160\160\001\004\022\001\000\182\160\160\001!\022\001\000\240@\145\160\160WW\160\160\001\004\023\001\000\183@\145\160\160XX\160\160\001\004\024\001\000\184@\145\160\160YY\160\160\001\004\025\001\000\185@\145\160\160ZZ\160\160\001\004\026\001\000\186@\145\160\160[[\160\160\001\004\027\001\000\187@\145\160\160\\\\\160\160\001\004\028\001\000\188@\145\160\160]]\160\160\001\004\029\001\000\189@\145\160\160^^\160\160\001\004\030\001\000\190@\145\160\160__\160\160\001\004\031\001\000\191@\145\160\160``\160\160\001\004 \001\000\192@\145\160\160aa\160\160\001\004!\001\000\193@\145\160\160bb\160\160\001\004\"\001\000\194@\145\160\160cc\160\160\001\004#\001\000\195@\145\160\160dd\160\160\001\004$\001\000\196@\145\160\160ee\160\160\001\004%\001\000\197@\145\160\160ff\160\160\001\004&\001\000\198@\145\160\160gg\160\160\001\004'\001\000\199@\145\160\160hh\160\160\001\004(\001\000\200@\145\160\160ii\160\160\001\004)\001\000\201@\145\160\160jj\160\160\001\004*\001\000\202@\145\160\160kk\160\160\001\004+\001\000\203@\145\160\160ll\160\160\001\004,\001\000\204@\145\160\160mm\160\160\001\004-\001\000\205@\145\160\160nn\160\160\001\004.\001\000\206@\145\160\160oo\160\160\001\004/\001\000\207@\145\160\160pp\160\160\001\0040\001\000\208@\145\160\160qq\160\160\001\0041\001\000\209@\145\160\160rr\160\160\001\0042\001\000\210@\145\160\160ss\160\160\001\0043\001\000\211@\145\160\160tt\160\160\001\0044\001\000\212@\145\160\160uu\160\160\001\0045\001\000\213@\145\160\160vv\160\160\001\0046\001\000\214@\145\160\160ww\160\160\001\0047\001\000\215@\145\160\160xx\160\160\001\0048\001\000\216@\145\160\160yy\160\160\001\0049\001\000\217@\145\160\160zz\160\160\001\004:\001\000\218@\145\160\160{{\160\160\001\004;\001\000\219@\145\160\160||\160\160\001\004<\001\000\220@\145\160\160}}\160\160\001\004=\001\000\221@\145\160\160~~\160\160\001\004>\001\000\222@\145\160\160\127\127\160\160\001\004?\001\000\223@\145\160\160\000@\000@\160\160\001\004@\001\000\224@\145\160\160\000A\000A\160\160\001\004A\001\000\225@\145\160\160\000B\000B\160\160\001\004B\001\000\226@\145\160\160\000C\000C\160\160\001\004C\001\000\227@\145\160\160\000D\000D\160\160\001\004D\001\000\228@\145\160\160\000E\000E\160\160\001\004E\001\000\229@\145\160\160\000F\000F\160\160\001\004F\001\000\230@\145\160\160\000G\000G\160\160\001\004G\001\000\231@\145\160\160\000H\000H\160\160\001\004H\001\000\232@\145\160\160\000I\000I\160\160\001\004I\001\000\233@\145\160\160\000J\000J\160\160\001\004J\001\000\234@\145\160\160\000K\000K\160\160\001\004K\001\000\235@\145\160\160\000L\000L\160\160\001\004L\001\000\236@\145\160\160\000M\000M\160\160\001\004M\001\000\237@\145\160\160\000N\000N\160\160\001\004N\001\000\238@\145\160\160\000O\000O\160\160\001\004O\001\000\239@\144\160\000P\000P\145\160\160\000Q\000Q\160\160\001\004Q\001\000\241@\145\160\160\000R\000R\160\160\001\004R\001\000\242@\145\160\160\000S\000S\160\160\001\004S\001\000\243@\145\160\160\000T\000T\160\160\001\004T\001\000\244@\145\160\160\000U\000U\160\160\001\004U\001\000\245@\145\160\160\000V\000V\160\160\001\004V\001\000\246@\145\160\160\000W\000W\160\160\001\004W\001\000\247@\145\160\160\000X\000X\160\160\001\004X\001\000\248@\145\160\160\000Y\000Y\160\160\001\004Y\001\000\249@\145\160\160\000Z\000Z\160\160\001\004Z\001\000\250@\145\160\160\000[\000[\160\160\001\004[\001\000\251@\145\160\160\000\\\000\\\160\160\001\004\\\001\000\252@\144\160\000]\000]\145\160\160\000^\000^\160\160\001\004^\001\000\254@\145\160\160\000_\000_\160\160\001\004_\001\000\255@\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001\000\128\001\000\128\144\160\001\000\129\001\000\129\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\144\160\001\000\132\001\000\132\144\160\001\000\133\001\000\133\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\144\160\001\000\137\001\000\137\144\160\001\000\138\001\000\138\144\160\001\000\139\001\000\139\144\160\001\000\140\001\000\140\144\160\001\000\141\001\000\141\144\160\001\000\142\001\000\142\144\160\001\000\143\001\000\143\144\160\001\000\144\001\000\144\144\160\001\000\145\001\000\145\144\160\001\000\146\001\000\146\144\160\001\000\147\001\000\147\144\160\001\000\148\001\000\148\144\160\001\000\149\001\000\149\144\160\001\000\150\001\000\150\144\160\001\000\151\001\000\151\144\160\001\000\152\001\000\152\144\160\001\000\153\001\000\153\144\160\001\000\154\001\000\154\144\160\001\000\155\001\000\155\144\160\001\000\156\001\000\156\144\160\001\000\157\001\000\157\144\160\001\000\158\001\000\158\144\160\001\000\159\001\000\159\144\160\001\000\160\001\000\160@@@@@@\144\160\001\000\167\001\000\253@@@@@\144\160\001\000\173\001\000\173@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let iso88596_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002\024\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\000\255\000\255\000\255\001\000\164\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001\006\012\001\000\173\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001\006\027\000\255\000\255\000\255\001\006\031\000\255\001\006!\001\006\"\001\006#\001\006$\001\006%\001\006&\001\006'\001\006(\001\006)\001\006*\001\006+\001\006,\001\006-\001\006.\001\006/\001\0060\001\0061\001\0062\001\0063\001\0064\001\0065\001\0066\001\0067\001\0068\001\0069\001\006:\000\255\000\255\000\255\000\255\000\255\001\006@\001\006A\001\006B\001\006C\001\006D\001\006E\001\006F\001\006G\001\006H\001\006I\001\006J\001\006K\001\006L\001\006M\001\006N\001\006O\001\006P\001\006Q\001\006R\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255" 0 : int array);;
-let iso88596_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\005\218\000\000\000\000\000\000\005\224\000\000\005\224\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001\006\012\001\000\172@\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160TT\144\160UU\144\160VV\144\160WW\144\160XX\144\160YY\144\160ZZ\145\160\160[[\160\160\001\006\027\001\000\187@\144\160\\\\\144\160]]\144\160^^\145\160\160__\160\160\001\006\031\001\000\191@\144\160``\145\160\160aa\160\160\001\006!\001\000\193@\145\160\160bb\160\160\001\006\"\001\000\194@\145\160\160cc\160\160\001\006#\001\000\195@\145\160\160dd\160\160\001\006$\001\000\196@\145\160\160ee\160\160\001\006%\001\000\197@\145\160\160ff\160\160\001\006&\001\000\198@\145\160\160gg\160\160\001\006'\001\000\199@\145\160\160hh\160\160\001\006(\001\000\200@\145\160\160ii\160\160\001\006)\001\000\201@\145\160\160jj\160\160\001\006*\001\000\202@\145\160\160kk\160\160\001\006+\001\000\203@\145\160\160ll\160\160\001\006,\001\000\204@\145\160\160mm\160\160\001\006-\001\000\205@\145\160\160nn\160\160\001\006.\001\000\206@\145\160\160oo\160\160\001\006/\001\000\207@\145\160\160pp\160\160\001\0060\001\000\208@\145\160\160qq\160\160\001\0061\001\000\209@\145\160\160rr\160\160\001\0062\001\000\210@\145\160\160ss\160\160\001\0063\001\000\211@\145\160\160tt\160\160\001\0064\001\000\212@\145\160\160uu\160\160\001\0065\001\000\213@\145\160\160vv\160\160\001\0066\001\000\214@\145\160\160ww\160\160\001\0067\001\000\215@\145\160\160xx\160\160\001\0068\001\000\216@\145\160\160yy\160\160\001\0069\001\000\217@\145\160\160zz\160\160\001\006:\001\000\218@\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\145\160\160\000@\000@\160\160\001\006@\001\000\224@\145\160\160\000A\000A\160\160\001\006A\001\000\225@\145\160\160\000B\000B\160\160\001\006B\001\000\226@\145\160\160\000C\000C\160\160\001\006C\001\000\227@\145\160\160\000D\000D\160\160\001\006D\001\000\228@\145\160\160\000E\000E\160\160\001\006E\001\000\229@\145\160\160\000F\000F\160\160\001\006F\001\000\230@\145\160\160\000G\000G\160\160\001\006G\001\000\231@\145\160\160\000H\000H\160\160\001\006H\001\000\232@\145\160\160\000I\000I\160\160\001\006I\001\000\233@\145\160\160\000J\000J\160\160\001\006J\001\000\234@\145\160\160\000K\000K\160\160\001\006K\001\000\235@\145\160\160\000L\000L\160\160\001\006L\001\000\236@\145\160\160\000M\000M\160\160\001\006M\001\000\237@\145\160\160\000N\000N\160\160\001\006N\001\000\238@\145\160\160\000O\000O\160\160\001\006O\001\000\239@\145\160\160\000P\000P\160\160\001\006P\001\000\240@\145\160\160\000Q\000Q\160\160\001\006Q\001\000\241@\145\160\160\000R\000R\160\160\001\006R\001\000\242@\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001\000\128\001\000\128\144\160\001\000\129\001\000\129\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\144\160\001\000\132\001\000\132\144\160\001\000\133\001\000\133\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\144\160\001\000\137\001\000\137\144\160\001\000\138\001\000\138\144\160\001\000\139\001\000\139\144\160\001\000\140\001\000\140\144\160\001\000\141\001\000\141\144\160\001\000\142\001\000\142\144\160\001\000\143\001\000\143\144\160\001\000\144\001\000\144\144\160\001\000\145\001\000\145\144\160\001\000\146\001\000\146\144\160\001\000\147\001\000\147\144\160\001\000\148\001\000\148\144\160\001\000\149\001\000\149\144\160\001\000\150\001\000\150\144\160\001\000\151\001\000\151\144\160\001\000\152\001\000\152\144\160\001\000\153\001\000\153\144\160\001\000\154\001\000\154\144\160\001\000\155\001\000\155\144\160\001\000\156\001\000\156\144\160\001\000\157\001\000\157\144\160\001\000\158\001\000\158\144\160\001\000\159\001\000\159\144\160\001\000\160\001\000\160@@@\144\160\001\000\164\001\000\164@@@@@@@@\144\160\001\000\173\001\000\173@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let iso88597_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002?\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\001 \024\001 \025\001\000\163\000\255\000\255\001\000\166\001\000\167\001\000\168\001\000\169\000\255\001\000\171\001\000\172\001\000\173\000\255\001 \021\001\000\176\001\000\177\001\000\178\001\000\179\001\003\132\001\003\133\001\003\134\001\000\183\001\003\136\001\003\137\001\003\138\001\000\187\001\003\140\001\000\189\001\003\142\001\003\143\001\003\144\001\003\145\001\003\146\001\003\147\001\003\148\001\003\149\001\003\150\001\003\151\001\003\152\001\003\153\001\003\154\001\003\155\001\003\156\001\003\157\001\003\158\001\003\159\001\003\160\001\003\161\000\255\001\003\163\001\003\164\001\003\165\001\003\166\001\003\167\001\003\168\001\003\169\001\003\170\001\003\171\001\003\172\001\003\173\001\003\174\001\003\175\001\003\176\001\003\177\001\003\178\001\003\179\001\003\180\001\003\181\001\003\182\001\003\183\001\003\184\001\003\185\001\003\186\001\003\187\001\003\188\001\003\189\001\003\190\001\003\191\001\003\192\001\003\193\001\003\194\001\003\195\001\003\196\001\003\197\001\003\198\001\003\199\001\003\200\001\003\201\001\003\202\001\003\203\001\003\204\001\003\205\001\003\206\000\255" 0 : int array);;
-let iso88597_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\223\000\000\000\000\000\000\006\147\000\000\006\147\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160TT\145\160\160UU\160\160\001 \021\001\000\175@\144\160VV\144\160WW\145\160\160XX\160\160\001 \024\001\000\161@\145\160\160YY\160\160\001 \025\001\000\162@\144\160ZZ\144\160[[\144\160\\\\\144\160]]\144\160^^\144\160__\144\160``\144\160aa\144\160bb\144\160cc\144\160dd\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001\000\128\001\000\128\144\160\001\000\129\001\000\129\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\145\160\160\001\000\132\001\000\132\160\160\001\003\132\001\000\180@\145\160\160\001\000\133\001\000\133\160\160\001\003\133\001\000\181@\145\160\160\001\000\134\001\000\134\160\160\001\003\134\001\000\182@\144\160\001\000\135\001\000\135\145\160\160\001\000\136\001\000\136\160\160\001\003\136\001\000\184@\145\160\160\001\000\137\001\000\137\160\160\001\003\137\001\000\185@\145\160\160\001\000\138\001\000\138\160\160\001\003\138\001\000\186@\144\160\001\000\139\001\000\139\145\160\160\001\000\140\001\000\140\160\160\001\003\140\001\000\188@\144\160\001\000\141\001\000\141\145\160\160\001\000\142\001\000\142\160\160\001\003\142\001\000\190@\145\160\160\001\000\143\001\000\143\160\160\001\003\143\001\000\191@\145\160\160\001\000\144\001\000\144\160\160\001\003\144\001\000\192@\145\160\160\001\000\145\001\000\145\160\160\001\003\145\001\000\193@\145\160\160\001\000\146\001\000\146\160\160\001\003\146\001\000\194@\145\160\160\001\000\147\001\000\147\160\160\001\003\147\001\000\195@\145\160\160\001\000\148\001\000\148\160\160\001\003\148\001\000\196@\145\160\160\001\000\149\001\000\149\160\160\001\003\149\001\000\197@\145\160\160\001\000\150\001\000\150\160\160\001\003\150\001\000\198@\145\160\160\001\000\151\001\000\151\160\160\001\003\151\001\000\199@\145\160\160\001\000\152\001\000\152\160\160\001\003\152\001\000\200@\145\160\160\001\000\153\001\000\153\160\160\001\003\153\001\000\201@\145\160\160\001\000\154\001\000\154\160\160\001\003\154\001\000\202@\145\160\160\001\000\155\001\000\155\160\160\001\003\155\001\000\203@\145\160\160\001\000\156\001\000\156\160\160\001\003\156\001\000\204@\145\160\160\001\000\157\001\000\157\160\160\001\003\157\001\000\205@\145\160\160\001\000\158\001\000\158\160\160\001\003\158\001\000\206@\145\160\160\001\000\159\001\000\159\160\160\001\003\159\001\000\207@\145\160\160\001\000\160\001\000\160\160\160\001\003\160\001\000\208@\144\160\001\003\161\001\000\209@\145\160\160\001\000\163\001\000\163\160\160\001\003\163\001\000\211@\144\160\001\003\164\001\000\212\144\160\001\003\165\001\000\213\145\160\160\001\000\166\001\000\166\160\160\001\003\166\001\000\214@\145\160\160\001\000\167\001\000\167\160\160\001\003\167\001\000\215@\145\160\160\001\000\168\001\000\168\160\160\001\003\168\001\000\216@\145\160\160\001\000\169\001\000\169\160\160\001\003\169\001\000\217@\144\160\001\003\170\001\000\218\145\160\160\001\000\171\001\000\171\160\160\001\003\171\001\000\219@\145\160\160\001\000\172\001\000\172\160\160\001\003\172\001\000\220@\145\160\160\001\000\173\001\000\173\160\160\001\003\173\001\000\221@\144\160\001\003\174\001\000\222\144\160\001\003\175\001\000\223\145\160\160\001\000\176\001\000\176\160\160\001\003\176\001\000\224@\145\160\160\001\000\177\001\000\177\160\160\001\003\177\001\000\225@\145\160\160\001\000\178\001\000\178\160\160\001\003\178\001\000\226@\145\160\160\001\000\179\001\000\179\160\160\001\003\179\001\000\227@\144\160\001\003\180\001\000\228\144\160\001\003\181\001\000\229\144\160\001\003\182\001\000\230\145\160\160\001\000\183\001\000\183\160\160\001\003\183\001\000\231@\144\160\001\003\184\001\000\232\144\160\001\003\185\001\000\233\144\160\001\003\186\001\000\234\145\160\160\001\000\187\001\000\187\160\160\001\003\187\001\000\235@\144\160\001\003\188\001\000\236\145\160\160\001\000\189\001\000\189\160\160\001\003\189\001\000\237@\144\160\001\003\190\001\000\238\144\160\001\003\191\001\000\239\144\160\001\003\192\001\000\240\144\160\001\003\193\001\000\241\144\160\001\003\194\001\000\242\144\160\001\003\195\001\000\243\144\160\001\003\196\001\000\244\144\160\001\003\197\001\000\245\144\160\001\003\198\001\000\246\144\160\001\003\199\001\000\247\144\160\001\003\200\001\000\248\144\160\001\003\201\001\000\249\144\160\001\003\202\001\000\250\144\160\001\003\203\001\000\251\144\160\001\003\204\001\000\252\144\160\001\003\205\001\000\253\144\160\001\003\206\001\000\254@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let iso88598_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002!\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\000\255\001\000\162\001\000\163\001\000\164\001\000\165\001\000\166\001\000\167\001\000\168\001\000\169\001\000\215\001\000\171\001\000\172\001\000\173\001\000\174\001\000\175\001\000\176\001\000\177\001\000\178\001\000\179\001\000\180\001\000\181\001\000\182\001\000\183\001\000\184\001\000\185\001\000\247\001\000\187\001\000\188\001\000\189\001\000\190\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001 \023\001\005\208\001\005\209\001\005\210\001\005\211\001\005\212\001\005\213\001\005\214\001\005\215\001\005\216\001\005\217\001\005\218\001\005\219\001\005\220\001\005\221\001\005\222\001\005\223\001\005\224\001\005\225\001\005\226\001\005\227\001\005\228\001\005\229\001\005\230\001\005\231\001\005\232\001\005\233\001\005\234\000\255\000\255\001 \014\001 \015\000\255" 0 : int array);;
-let iso88598_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\005\149\000\000\000\000\000\000\005]\000\000\005]\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\144\160LL\144\160MM\145\160\160NN\160\160\001 \014\001\000\253@\145\160\160OO\160\160\001 \015\001\000\254@\144\160PP\144\160QQ\144\160RR\144\160SS\144\160TT\144\160UU\144\160VV\145\160\160WW\160\160\001 \023\001\000\223@\144\160XX\144\160YY\144\160ZZ\144\160[[\144\160\\\\\144\160]]\144\160^^\144\160__\144\160``\144\160aa\144\160bb\144\160cc\144\160dd\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001\000\128\001\000\128\144\160\001\000\129\001\000\129\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\144\160\001\000\132\001\000\132\144\160\001\000\133\001\000\133\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\144\160\001\000\137\001\000\137\144\160\001\000\138\001\000\138\144\160\001\000\139\001\000\139\144\160\001\000\140\001\000\140\144\160\001\000\141\001\000\141\144\160\001\000\142\001\000\142\144\160\001\000\143\001\000\143\144\160\001\000\144\001\000\144\144\160\001\000\145\001\000\145\144\160\001\000\146\001\000\146\144\160\001\000\147\001\000\147\144\160\001\000\148\001\000\148\144\160\001\000\149\001\000\149\144\160\001\000\150\001\000\150\144\160\001\000\151\001\000\151\144\160\001\000\152\001\000\152\144\160\001\000\153\001\000\153\144\160\001\000\154\001\000\154\144\160\001\000\155\001\000\155\144\160\001\000\156\001\000\156\144\160\001\000\157\001\000\157\144\160\001\000\158\001\000\158\144\160\001\000\159\001\000\159\144\160\001\000\160\001\000\160@\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163\144\160\001\000\164\001\000\164\144\160\001\000\165\001\000\165\144\160\001\000\166\001\000\166\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\168\144\160\001\000\169\001\000\169@\144\160\001\000\171\001\000\171\144\160\001\000\172\001\000\172\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174\144\160\001\000\175\001\000\175\144\160\001\000\176\001\000\176\144\160\001\000\177\001\000\177\144\160\001\000\178\001\000\178\144\160\001\000\179\001\000\179\144\160\001\000\180\001\000\180\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\183\144\160\001\000\184\001\000\184\144\160\001\000\185\001\000\185@\144\160\001\000\187\001\000\187\144\160\001\000\188\001\000\188\144\160\001\000\189\001\000\189\144\160\001\000\190\001\000\190@@@@@@@@@@@@@@@@@\144\160\001\005\208\001\000\224\144\160\001\005\209\001\000\225\144\160\001\005\210\001\000\226\144\160\001\005\211\001\000\227\144\160\001\005\212\001\000\228\144\160\001\005\213\001\000\229\144\160\001\005\214\001\000\230\145\160\160\001\000\215\001\000\170\160\160\001\005\215\001\000\231@\144\160\001\005\216\001\000\232\144\160\001\005\217\001\000\233\144\160\001\005\218\001\000\234\144\160\001\005\219\001\000\235\144\160\001\005\220\001\000\236\144\160\001\005\221\001\000\237\144\160\001\005\222\001\000\238\144\160\001\005\223\001\000\239\144\160\001\005\224\001\000\240\144\160\001\005\225\001\000\241\144\160\001\005\226\001\000\242\144\160\001\005\227\001\000\243\144\160\001\005\228\001\000\244\144\160\001\005\229\001\000\245\144\160\001\005\230\001\000\246\144\160\001\005\231\001\000\247\144\160\001\005\232\001\000\248\144\160\001\005\233\001\000\249\144\160\001\005\234\001\000\250@@@@@@@@@@@@\144\160\001\000\247\001\000\186@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let iso88599_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\001\000\161\001\000\162\001\000\163\001\000\164\001\000\165\001\000\166\001\000\167\001\000\168\001\000\169\001\000\170\001\000\171\001\000\172\001\000\173\001\000\174\001\000\175\001\000\176\001\000\177\001\000\178\001\000\179\001\000\180\001\000\181\001\000\182\001\000\183\001\000\184\001\000\185\001\000\186\001\000\187\001\000\188\001\000\189\001\000\190\001\000\191\001\000\192\001\000\193\001\000\194\001\000\195\001\000\196\001\000\197\001\000\198\001\000\199\001\000\200\001\000\201\001\000\202\001\000\203\001\000\204\001\000\205\001\000\206\001\000\207\001\001\030\001\000\209\001\000\210\001\000\211\001\000\212\001\000\213\001\000\214\001\000\215\001\000\216\001\000\217\001\000\218\001\000\219\001\000\220\001\0010\001\001^\001\000\223\001\000\224\001\000\225\001\000\226\001\000\227\001\000\228\001\000\229\001\000\230\001\000\231\001\000\232\001\000\233\001\000\234\001\000\235\001\000\236\001\000\237\001\000\238\001\000\239\001\001\031\001\000\241\001\000\242\001\000\243\001\000\244\001\000\245\001\000\246\001\000\247\001\000\248\001\000\249\001\000\250\001\000\251\001\000\252\001\0011\001\001_\001\000\255" 0 : int array);;
-let iso88599_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\151\000\000\000\000\000\000\006\025\000\000\006\025\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160TT\144\160UU\144\160VV\144\160WW\144\160XX\144\160YY\144\160ZZ\144\160[[\144\160\\\\\144\160]]\145\160\160^^\160\160\001\001\030\001\000\208@\145\160\160__\160\160\001\001\031\001\000\240@\144\160``\144\160aa\144\160bb\144\160cc\144\160dd\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\145\160\160pp\160\160\001\0010\001\000\221@\145\160\160qq\160\160\001\0011\001\000\253@\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\145\160\160\000^\000^\160\160\001\001^\001\000\222@\145\160\160\000_\000_\160\160\001\001_\001\000\254@\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001\000\128\001\000\128\144\160\001\000\129\001\000\129\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\144\160\001\000\132\001\000\132\144\160\001\000\133\001\000\133\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\144\160\001\000\137\001\000\137\144\160\001\000\138\001\000\138\144\160\001\000\139\001\000\139\144\160\001\000\140\001\000\140\144\160\001\000\141\001\000\141\144\160\001\000\142\001\000\142\144\160\001\000\143\001\000\143\144\160\001\000\144\001\000\144\144\160\001\000\145\001\000\145\144\160\001\000\146\001\000\146\144\160\001\000\147\001\000\147\144\160\001\000\148\001\000\148\144\160\001\000\149\001\000\149\144\160\001\000\150\001\000\150\144\160\001\000\151\001\000\151\144\160\001\000\152\001\000\152\144\160\001\000\153\001\000\153\144\160\001\000\154\001\000\154\144\160\001\000\155\001\000\155\144\160\001\000\156\001\000\156\144\160\001\000\157\001\000\157\144\160\001\000\158\001\000\158\144\160\001\000\159\001\000\159\144\160\001\000\160\001\000\160\144\160\001\000\161\001\000\161\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163\144\160\001\000\164\001\000\164\144\160\001\000\165\001\000\165\144\160\001\000\166\001\000\166\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\168\144\160\001\000\169\001\000\169\144\160\001\000\170\001\000\170\144\160\001\000\171\001\000\171\144\160\001\000\172\001\000\172\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174\144\160\001\000\175\001\000\175\144\160\001\000\176\001\000\176\144\160\001\000\177\001\000\177\144\160\001\000\178\001\000\178\144\160\001\000\179\001\000\179\144\160\001\000\180\001\000\180\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\183\144\160\001\000\184\001\000\184\144\160\001\000\185\001\000\185\144\160\001\000\186\001\000\186\144\160\001\000\187\001\000\187\144\160\001\000\188\001\000\188\144\160\001\000\189\001\000\189\144\160\001\000\190\001\000\190\144\160\001\000\191\001\000\191\144\160\001\000\192\001\000\192\144\160\001\000\193\001\000\193\144\160\001\000\194\001\000\194\144\160\001\000\195\001\000\195\144\160\001\000\196\001\000\196\144\160\001\000\197\001\000\197\144\160\001\000\198\001\000\198\144\160\001\000\199\001\000\199\144\160\001\000\200\001\000\200\144\160\001\000\201\001\000\201\144\160\001\000\202\001\000\202\144\160\001\000\203\001\000\203\144\160\001\000\204\001\000\204\144\160\001\000\205\001\000\205\144\160\001\000\206\001\000\206\144\160\001\000\207\001\000\207@\144\160\001\000\209\001\000\209\144\160\001\000\210\001\000\210\144\160\001\000\211\001\000\211\144\160\001\000\212\001\000\212\144\160\001\000\213\001\000\213\144\160\001\000\214\001\000\214\144\160\001\000\215\001\000\215\144\160\001\000\216\001\000\216\144\160\001\000\217\001\000\217\144\160\001\000\218\001\000\218\144\160\001\000\219\001\000\219\144\160\001\000\220\001\000\220@@\144\160\001\000\223\001\000\223\144\160\001\000\224\001\000\224\144\160\001\000\225\001\000\225\144\160\001\000\226\001\000\226\144\160\001\000\227\001\000\227\144\160\001\000\228\001\000\228\144\160\001\000\229\001\000\229\144\160\001\000\230\001\000\230\144\160\001\000\231\001\000\231\144\160\001\000\232\001\000\232\144\160\001\000\233\001\000\233\144\160\001\000\234\001\000\234\144\160\001\000\235\001\000\235\144\160\001\000\236\001\000\236\144\160\001\000\237\001\000\237\144\160\001\000\238\001\000\238\144\160\001\000\239\001\000\239@\144\160\001\000\241\001\000\241\144\160\001\000\242\001\000\242\144\160\001\000\243\001\000\243\144\160\001\000\244\001\000\244\144\160\001\000\245\001\000\245\144\160\001\000\246\001\000\246\144\160\001\000\247\001\000\247\144\160\001\000\248\001\000\248\144\160\001\000\249\001\000\249\144\160\001\000\250\001\000\250\144\160\001\000\251\001\000\251\144\160\001\000\252\001\000\252@@\144\160\001\000\255\001\000\255" 0 : Netmappings.from_uni_list array);;
- Hashtbl.add Netmappings.to_unicode `Enc_iso88599 iso88599_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso88599 iso88599_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_iso88598 iso88598_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso88598 iso88598_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_iso88597 iso88597_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso88597 iso88597_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_iso88596 iso88596_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso88596 iso88596_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_iso88595 iso88595_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso88595 iso88595_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_iso88594 iso88594_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso88594 iso88594_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_iso88593 iso88593_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso88593 iso88593_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_iso88592 iso88592_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso88592 iso88592_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_iso885915 iso885915_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso885915 iso885915_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_iso885914 iso885914_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso885914 iso885914_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_iso885913 iso885913_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso885913 iso885913_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_iso885910 iso885910_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso885910 iso885910_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_iso88591 iso88591_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_iso88591 iso88591_from_unicode;
-();;
diff --git a/helm/DEVEL/pxp/netstring/netmappings_other.ml b/helm/DEVEL/pxp/netstring/netmappings_other.ml
deleted file mode 100644 (file)
index 57fcb48..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-(* WARNING! This is a generated file! *)
-let cp037_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABC\001\000\156I\001\000\134\000\127\001\000\151\001\000\141\001\000\142KLMNOPQRS\001\000\157\001\000\133H\001\000\135XY\001\000\146\001\000\143\\]^_\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132JW[\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140EFG\001\000\144\001\000\145V\001\000\147\001\000\148\001\000\149\001\000\150D\001\000\152\001\000\153\001\000\154\001\000\155TU\001\000\158Z`\001\000\160\001\000\226\001\000\228\001\000\224\001\000\225\001\000\227\001\000\229\001\000\231\001\000\241\001\000\162n|hk\000|f\001\000\233\001\000\234\001\000\235\001\000\232\001\000\237\001\000\238\001\000\239\001\000\236\001\000\223adji{\001\000\172mo\001\000\194\001\000\196\001\000\192\001\000\193\001\000\195\001\000\197\001\000\199\001\000\209\001\000\166le\000_~\127\001\000\248\001\000\201\001\000\202\001\000\203\001\000\200\001\000\205\001\000\206\001\000\207\001\000\204\000`zc\000@g}b\001\000\216\000a\000b\000c\000d\000e\000f\000g\000h\000i\001\000\171\001\000\187\001\000\240\001\000\253\001\000\254\001\000\177\001\000\176\000j\000k\000l\000m\000n\000o\000p\000q\000r\001\000\170\001\000\186\001\000\230\001\000\184\001\000\198\001\000\164\001\000\181\000~\000s\000t\000u\000v\000w\000x\000y\000z\001\000\161\001\000\191\001\000\208\001\000\221\001\000\222\001\000\174\000^\001\000\163\001\000\165\001\000\183\001\000\169\001\000\167\001\000\182\001\000\188\001\000\189\001\000\190\000[\000]\001\000\175\001\000\168\001\000\180\001\000\215\000{\000A\000B\000C\000D\000E\000F\000G\000H\000I\001\000\173\001\000\244\001\000\246\001\000\242\001\000\243\001\000\245\000}\000J\000K\000L\000M\000N\000O\000P\000Q\000R\001\000\185\001\000\251\001\000\252\001\000\249\001\000\250\001\000\255\000\\\001\000\247\000S\000T\000U\000V\000W\000X\000Y\000Z\001\000\178\001\000\212\001\000\214\001\000\210\001\000\211\001\000\213pqrstuvwxy\001\000\179\001\000\219\001\000\220\001\000\217\001\000\218\001\000\159" 0 : int array);;
-let cp037_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\133\000\000\000\000\000\000\006\001\000\000\006\001\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160Dw\144\160Em\144\160Fn\144\160Go\144\160HV\144\160IE\144\160Je\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160T|\144\160U}\144\160Vr\144\160Wf\144\160XX\144\160YY\144\160Z\127\144\160[g\144\160\\\\\144\160]]\144\160^^\144\160__\144\160`\000@\144\160a\000Z\144\160b\000\127\144\160c\000{\144\160d\000[\144\160e\000l\144\160f\000P\144\160g\000}\144\160h\000M\144\160i\000]\144\160j\000\\\144\160k\000N\144\160l\000k\144\160m\000`\144\160n\000K\144\160o\000a\144\160p\001\000\240\144\160q\001\000\241\144\160r\001\000\242\144\160s\001\000\243\144\160t\001\000\244\144\160u\001\000\245\144\160v\001\000\246\144\160w\001\000\247\144\160x\001\000\248\144\160y\001\000\249\144\160z\000z\144\160{\000^\144\160|\000L\144\160}\000~\144\160~\000n\144\160\127\000o\144\160\000@\000|\144\160\000A\001\000\193\144\160\000B\001\000\194\144\160\000C\001\000\195\144\160\000D\001\000\196\144\160\000E\001\000\197\144\160\000F\001\000\198\144\160\000G\001\000\199\144\160\000H\001\000\200\144\160\000I\001\000\201\144\160\000J\001\000\209\144\160\000K\001\000\210\144\160\000L\001\000\211\144\160\000M\001\000\212\144\160\000N\001\000\213\144\160\000O\001\000\214\144\160\000P\001\000\215\144\160\000Q\001\000\216\144\160\000R\001\000\217\144\160\000S\001\000\226\144\160\000T\001\000\227\144\160\000U\001\000\228\144\160\000V\001\000\229\144\160\000W\001\000\230\144\160\000X\001\000\231\144\160\000Y\001\000\232\144\160\000Z\001\000\233\144\160\000[\001\000\186\144\160\000\\\001\000\224\144\160\000]\001\000\187\144\160\000^\001\000\176\144\160\000_\000m\144\160\000`\000y\144\160\000a\001\000\129\144\160\000b\001\000\130\144\160\000c\001\000\131\144\160\000d\001\000\132\144\160\000e\001\000\133\144\160\000f\001\000\134\144\160\000g\001\000\135\144\160\000h\001\000\136\144\160\000i\001\000\137\144\160\000j\001\000\145\144\160\000k\001\000\146\144\160\000l\001\000\147\144\160\000m\001\000\148\144\160\000n\001\000\149\144\160\000o\001\000\150\144\160\000p\001\000\151\144\160\000q\001\000\152\144\160\000r\001\000\153\144\160\000s\001\000\162\144\160\000t\001\000\163\144\160\000u\001\000\164\144\160\000v\001\000\165\144\160\000w\001\000\166\144\160\000x\001\000\167\144\160\000y\001\000\168\144\160\000z\001\000\169\144\160\000{\001\000\192\144\160\000|\000O\144\160\000}\001\000\208\144\160\000~\001\000\161\144\160\000\127G\144\160\001\000\128`\144\160\001\000\129a\144\160\001\000\130b\144\160\001\000\131c\144\160\001\000\132d\144\160\001\000\133U\144\160\001\000\134F\144\160\001\000\135W\144\160\001\000\136h\144\160\001\000\137i\144\160\001\000\138j\144\160\001\000\139k\144\160\001\000\140l\144\160\001\000\141I\144\160\001\000\142J\144\160\001\000\143[\144\160\001\000\144p\144\160\001\000\145q\144\160\001\000\146Z\144\160\001\000\147s\144\160\001\000\148t\144\160\001\000\149u\144\160\001\000\150v\144\160\001\000\151H\144\160\001\000\152x\144\160\001\000\153y\144\160\001\000\154z\144\160\001\000\155{\144\160\001\000\156D\144\160\001\000\157T\144\160\001\000\158~\144\160\001\000\159\001\000\255\144\160\001\000\160\000A\144\160\001\000\161\001\000\170\144\160\001\000\162\000J\144\160\001\000\163\001\000\177\144\160\001\000\164\001\000\159\144\160\001\000\165\001\000\178\144\160\001\000\166\000j\144\160\001\000\167\001\000\181\144\160\001\000\168\001\000\189\144\160\001\000\169\001\000\180\144\160\001\000\170\001\000\154\144\160\001\000\171\001\000\138\144\160\001\000\172\000_\144\160\001\000\173\001\000\202\144\160\001\000\174\001\000\175\144\160\001\000\175\001\000\188\144\160\001\000\176\001\000\144\144\160\001\000\177\001\000\143\144\160\001\000\178\001\000\234\144\160\001\000\179\001\000\250\144\160\001\000\180\001\000\190\144\160\001\000\181\001\000\160\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\179\144\160\001\000\184\001\000\157\144\160\001\000\185\001\000\218\144\160\001\000\186\001\000\155\144\160\001\000\187\001\000\139\144\160\001\000\188\001\000\183\144\160\001\000\189\001\000\184\144\160\001\000\190\001\000\185\144\160\001\000\191\001\000\171\144\160\001\000\192\000d\144\160\001\000\193\000e\144\160\001\000\194\000b\144\160\001\000\195\000f\144\160\001\000\196\000c\144\160\001\000\197\000g\144\160\001\000\198\001\000\158\144\160\001\000\199\000h\144\160\001\000\200\000t\144\160\001\000\201\000q\144\160\001\000\202\000r\144\160\001\000\203\000s\144\160\001\000\204\000x\144\160\001\000\205\000u\144\160\001\000\206\000v\144\160\001\000\207\000w\144\160\001\000\208\001\000\172\144\160\001\000\209\000i\144\160\001\000\210\001\000\237\144\160\001\000\211\001\000\238\144\160\001\000\212\001\000\235\144\160\001\000\213\001\000\239\144\160\001\000\214\001\000\236\144\160\001\000\215\001\000\191\144\160\001\000\216\001\000\128\144\160\001\000\217\001\000\253\144\160\001\000\218\001\000\254\144\160\001\000\219\001\000\251\144\160\001\000\220\001\000\252\144\160\001\000\221\001\000\173\144\160\001\000\222\001\000\174\144\160\001\000\223\000Y\144\160\001\000\224\000D\144\160\001\000\225\000E\144\160\001\000\226\000B\144\160\001\000\227\000F\144\160\001\000\228\000C\144\160\001\000\229\000G\144\160\001\000\230\001\000\156\144\160\001\000\231\000H\144\160\001\000\232\000T\144\160\001\000\233\000Q\144\160\001\000\234\000R\144\160\001\000\235\000S\144\160\001\000\236\000X\144\160\001\000\237\000U\144\160\001\000\238\000V\144\160\001\000\239\000W\144\160\001\000\240\001\000\140\144\160\001\000\241\000I\144\160\001\000\242\001\000\205\144\160\001\000\243\001\000\206\144\160\001\000\244\001\000\203\144\160\001\000\245\001\000\207\144\160\001\000\246\001\000\204\144\160\001\000\247\001\000\225\144\160\001\000\248\000p\144\160\001\000\249\001\000\221\144\160\001\000\250\001\000\222\144\160\001\000\251\001\000\219\144\160\001\000\252\001\000\220\144\160\001\000\253\001\000\141\144\160\001\000\254\001\000\142\144\160\001\000\255\001\000\223" 0 : Netmappings.from_uni_list array);;
- let cp1006_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002\228\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132\001\000\133\001\000\134\001\000\135\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140\001\000\141\001\000\142\001\000\143\001\000\144\001\000\145\001\000\146\001\000\147\001\000\148\001\000\149\001\000\150\001\000\151\001\000\152\001\000\153\001\000\154\001\000\155\001\000\156\001\000\157\001\000\158\001\000\159\001\000\160\001\006\240\001\006\241\001\006\242\001\006\243\001\006\244\001\006\245\001\006\246\001\006\247\001\006\248\001\006\249\001\006\012\001\006\027\001\000\173\001\006\031\002\000\000\254\129\002\000\000\254\141\002\000\000\254\142\000\255\002\000\000\254\143\002\000\000\254\145\002\000\000\251V\002\000\000\251X\002\000\000\254\147\002\000\000\254\149\002\000\000\254\151\002\000\000\251f\002\000\000\251h\002\000\000\254\153\002\000\000\254\155\002\000\000\254\157\002\000\000\254\159\002\000\000\251z\002\000\000\251|\002\000\000\254\161\002\000\000\254\163\002\000\000\254\165\002\000\000\254\167\002\000\000\254\169\002\000\000\251\132\002\000\000\254\171\002\000\000\254\173\002\000\000\251\140\002\000\000\254\175\002\000\000\251\138\002\000\000\254\177\002\000\000\254\179\002\000\000\254\181\002\000\000\254\183\002\000\000\254\185\002\000\000\254\187\002\000\000\254\189\002\000\000\254\191\002\000\000\254\193\002\000\000\254\197\002\000\000\254\201\002\000\000\254\202\002\000\000\254\203\002\000\000\254\204\002\000\000\254\205\002\000\000\254\206\002\000\000\254\207\002\000\000\254\208\002\000\000\254\209\002\000\000\254\211\002\000\000\254\213\002\000\000\254\215\002\000\000\254\217\002\000\000\254\219\002\000\000\251\146\002\000\000\251\148\002\000\000\254\221\002\000\000\254\223\002\000\000\254\224\002\000\000\254\225\002\000\000\254\227\002\000\000\251\158\002\000\000\254\229\002\000\000\254\231\002\000\000\254\133\002\000\000\254\237\002\000\000\251\166\002\000\000\251\168\002\000\000\251\169\002\000\000\251\170\002\000\000\254\128\002\000\000\254\137\002\000\000\254\138\002\000\000\254\139\002\000\000\254\241\002\000\000\254\242\002\000\000\254\243\002\000\000\251\176\002\000\000\251\174\002\000\000\254|\002\000\000\254}" 0 : int array);;
-let cp1006_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007\143\000\000\000\000\000\000\006\146\000\000\006\146\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001\006\012\001\000\171@\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160TT\144\160UU\144\160VV\144\160WW\144\160XX\144\160YY\144\160ZZ\145\160\160[[\160\160\001\006\027\001\000\172@\144\160\\\\\144\160]]\144\160^^\145\160\160__\160\160\001\006\031\001\000\174@\144\160``\144\160aa\144\160bb\144\160cc\144\160dd\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\145\160\160\000V\000V\160\160\002\000\000\251V\001\000\181@\144\160\000W\000W\145\160\160\000X\000X\160\160\002\000\000\251X\001\000\182@\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\145\160\160\000f\000f\160\160\002\000\000\251f\001\000\186@\144\160\000g\000g\145\160\160\000h\000h\160\160\002\000\000\251h\001\000\187@\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\145\160\160\000z\000z\160\160\002\000\000\251z\001\000\192@\144\160\000{\000{\145\160\160\000|\000|\160\160\002\000\000\251|\001\000\193\160\160\002\000\000\254|\001\000\254@\145\160\160\000}\000}\160\160\002\000\000\254}\001\000\255@\144\160\000~\000~\144\160\000\127\000\127\145\160\160\001\000\128\001\000\128\160\160\002\000\000\254\128\001\000\245@\145\160\160\001\000\129\001\000\129\160\160\002\000\000\254\129\001\000\175@\144\160\001\000\130\001\000\130\144\160\001\000\131\001\000\131\145\160\160\001\000\132\001\000\132\160\160\002\000\000\251\132\001\000\199@\145\160\160\001\000\133\001\000\133\160\160\002\000\000\254\133\001\000\239@\144\160\001\000\134\001\000\134\144\160\001\000\135\001\000\135\144\160\001\000\136\001\000\136\145\160\160\001\000\137\001\000\137\160\160\002\000\000\254\137\001\000\246@\145\160\160\001\000\138\001\000\138\160\160\002\000\000\251\138\001\000\204\160\160\002\000\000\254\138\001\000\247@\145\160\160\001\000\139\001\000\139\160\160\002\000\000\254\139\001\000\248@\145\160\160\001\000\140\001\000\140\160\160\002\000\000\251\140\001\000\202@\145\160\160\001\000\141\001\000\141\160\160\002\000\000\254\141\001\000\176@\145\160\160\001\000\142\001\000\142\160\160\002\000\000\254\142\001\000\177@\145\160\160\001\000\143\001\000\143\160\160\002\000\000\254\143\001\000\179@\144\160\001\000\144\001\000\144\145\160\160\001\000\145\001\000\145\160\160\002\000\000\254\145\001\000\180@\145\160\160\001\000\146\001\000\146\160\160\002\000\000\251\146\001\000\229@\145\160\160\001\000\147\001\000\147\160\160\002\000\000\254\147\001\000\183@\145\160\160\001\000\148\001\000\148\160\160\002\000\000\251\148\001\000\230@\145\160\160\001\000\149\001\000\149\160\160\002\000\000\254\149\001\000\184@\144\160\001\000\150\001\000\150\145\160\160\001\000\151\001\000\151\160\160\002\000\000\254\151\001\000\185@\144\160\001\000\152\001\000\152\145\160\160\001\000\153\001\000\153\160\160\002\000\000\254\153\001\000\188@\144\160\001\000\154\001\000\154\145\160\160\001\000\155\001\000\155\160\160\002\000\000\254\155\001\000\189@\144\160\001\000\156\001\000\156\145\160\160\001\000\157\001\000\157\160\160\002\000\000\254\157\001\000\190@\145\160\160\001\000\158\001\000\158\160\160\002\000\000\251\158\001\000\236@\145\160\160\001\000\159\001\000\159\160\160\002\000\000\254\159\001\000\191@\144\160\001\000\160\001\000\160\144\160\002\000\000\254\161\001\000\194@\144\160\002\000\000\254\163\001\000\195@\144\160\002\000\000\254\165\001\000\196\144\160\002\000\000\251\166\001\000\241\144\160\002\000\000\254\167\001\000\197\144\160\002\000\000\251\168\001\000\242\145\160\160\002\000\000\254\169\001\000\198\160\160\002\000\000\251\169\001\000\243@\144\160\002\000\000\251\170\001\000\244\144\160\002\000\000\254\171\001\000\200@\145\160\160\001\000\173\001\000\173\160\160\002\000\000\254\173\001\000\201@\144\160\002\000\000\251\174\001\000\253\144\160\002\000\000\254\175\001\000\203\144\160\002\000\000\251\176\001\000\252\144\160\002\000\000\254\177\001\000\205@\144\160\002\000\000\254\179\001\000\206@\144\160\002\000\000\254\181\001\000\207@\144\160\002\000\000\254\183\001\000\208@\144\160\002\000\000\254\185\001\000\209@\144\160\002\000\000\254\187\001\000\210@\144\160\002\000\000\254\189\001\000\211@\144\160\002\000\000\254\191\001\000\212@\144\160\002\000\000\254\193\001\000\213@@@\144\160\002\000\000\254\197\001\000\214@@@\144\160\002\000\000\254\201\001\000\215\144\160\002\000\000\254\202\001\000\216\144\160\002\000\000\254\203\001\000\217\144\160\002\000\000\254\204\001\000\218\144\160\002\000\000\254\205\001\000\219\144\160\002\000\000\254\206\001\000\220\144\160\002\000\000\254\207\001\000\221\144\160\002\000\000\254\208\001\000\222\144\160\002\000\000\254\209\001\000\223@\144\160\002\000\000\254\211\001\000\224@\144\160\002\000\000\254\213\001\000\225@\144\160\002\000\000\254\215\001\000\226@\144\160\002\000\000\254\217\001\000\227@\144\160\002\000\000\254\219\001\000\228@\144\160\002\000\000\254\221\001\000\231@\144\160\002\000\000\254\223\001\000\232\144\160\002\000\000\254\224\001\000\233\144\160\002\000\000\254\225\001\000\234@\144\160\002\000\000\254\227\001\000\235@\144\160\002\000\000\254\229\001\000\237@\144\160\002\000\000\254\231\001\000\238@@@@@\144\160\002\000\000\254\237\001\000\240@@\144\160\001\006\240\001\000\161\145\160\160\001\006\241\001\000\162\160\160\002\000\000\254\241\001\000\249@\145\160\160\001\006\242\001\000\163\160\160\002\000\000\254\242\001\000\250@\145\160\160\001\006\243\001\000\164\160\160\002\000\000\254\243\001\000\251@\144\160\001\006\244\001\000\165\144\160\001\006\245\001\000\166\144\160\001\006\246\001\000\167\144\160\001\006\247\001\000\168\144\160\001\006\248\001\000\169\144\160\001\006\249\001\000\170@@@@@@" 0 : Netmappings.from_uni_list array);;
- let cp1026_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABC\001\000\156I\001\000\134\000\127\001\000\151\001\000\141\001\000\142KLMNOPQRS\001\000\157\001\000\133H\001\000\135XY\001\000\146\001\000\143\\]^_\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132JW[\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140EFG\001\000\144\001\000\145V\001\000\147\001\000\148\001\000\149\001\000\150D\001\000\152\001\000\153\001\000\154\001\000\155TU\001\000\158Z`\001\000\160\001\000\226\001\000\228\001\000\224\001\000\225\001\000\227\001\000\229\000{\001\000\241\001\000\199n|hkaf\001\000\233\001\000\234\001\000\235\001\000\232\001\000\237\001\000\238\001\000\239\001\000\236\001\000\223\001\001\030\001\0010ji{\000^mo\001\000\194\001\000\196\001\000\192\001\000\193\001\000\195\001\000\197\000[\001\000\209\001\001_le\000_~\127\001\000\248\001\000\201\001\000\202\001\000\203\001\000\200\001\000\205\001\000\206\001\000\207\001\000\204\001\0011z\001\000\214\001\001^g}\001\000\220\001\000\216\000a\000b\000c\000d\000e\000f\000g\000h\000i\001\000\171\001\000\187\000}\000`\001\000\166\001\000\177\001\000\176\000j\000k\000l\000m\000n\000o\000p\000q\000r\001\000\170\001\000\186\001\000\230\001\000\184\001\000\198\001\000\164\001\000\181\001\000\246\000s\000t\000u\000v\000w\000x\000y\000z\001\000\161\001\000\191\000]d\000@\001\000\174\001\000\162\001\000\163\001\000\165\001\000\183\001\000\169\001\000\167\001\000\182\001\000\188\001\000\189\001\000\190\001\000\172\000|\001\000\175\001\000\168\001\000\180\001\000\215\001\000\231\000A\000B\000C\000D\000E\000F\000G\000H\000I\001\000\173\001\000\244\000~\001\000\242\001\000\243\001\000\245\001\001\031\000J\000K\000L\000M\000N\000O\000P\000Q\000R\001\000\185\001\000\251\000\\\001\000\249\001\000\250\001\000\255\001\000\252\001\000\247\000S\000T\000U\000V\000W\000X\000Y\000Z\001\000\178\001\000\212c\001\000\210\001\000\211\001\000\213pqrstuvwxy\001\000\179\001\000\219b\001\000\217\001\000\218\001\000\159" 0 : int array);;
-let cp1026_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\151\000\000\000\000\000\000\006\025\000\000\006\025\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160Dw\144\160Em\144\160Fn\144\160Go\144\160HV\144\160IE\144\160Je\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160T|\144\160U}\144\160Vr\144\160Wf\144\160XX\144\160YY\144\160Z\127\144\160[g\144\160\\\\\144\160]]\145\160\160^^\160\160\001\001\030\000Z@\145\160\160__\160\160\001\001\031\001\000\208@\144\160`\000@\144\160a\000O\144\160b\001\000\252\144\160c\001\000\236\144\160d\001\000\173\144\160e\000l\144\160f\000P\144\160g\000}\144\160h\000M\144\160i\000]\144\160j\000\\\144\160k\000N\144\160l\000k\144\160m\000`\144\160n\000K\144\160o\000a\145\160\160\001\0010\000[\160\160p\001\000\240@\145\160\160\001\0011\000y\160\160q\001\000\241@\144\160r\001\000\242\144\160s\001\000\243\144\160t\001\000\244\144\160u\001\000\245\144\160v\001\000\246\144\160w\001\000\247\144\160x\001\000\248\144\160y\001\000\249\144\160z\000z\144\160{\000^\144\160|\000L\144\160}\000~\144\160~\000n\144\160\127\000o\144\160\000@\001\000\174\144\160\000A\001\000\193\144\160\000B\001\000\194\144\160\000C\001\000\195\144\160\000D\001\000\196\144\160\000E\001\000\197\144\160\000F\001\000\198\144\160\000G\001\000\199\144\160\000H\001\000\200\144\160\000I\001\000\201\144\160\000J\001\000\209\144\160\000K\001\000\210\144\160\000L\001\000\211\144\160\000M\001\000\212\144\160\000N\001\000\213\144\160\000O\001\000\214\144\160\000P\001\000\215\144\160\000Q\001\000\216\144\160\000R\001\000\217\144\160\000S\001\000\226\144\160\000T\001\000\227\144\160\000U\001\000\228\144\160\000V\001\000\229\144\160\000W\001\000\230\144\160\000X\001\000\231\144\160\000Y\001\000\232\144\160\000Z\001\000\233\144\160\000[\000h\144\160\000\\\001\000\220\144\160\000]\001\000\172\145\160\160\000^\000_\160\160\001\001^\000|@\145\160\160\001\001_\000j\160\160\000_\000m@\144\160\000`\001\000\141\144\160\000a\001\000\129\144\160\000b\001\000\130\144\160\000c\001\000\131\144\160\000d\001\000\132\144\160\000e\001\000\133\144\160\000f\001\000\134\144\160\000g\001\000\135\144\160\000h\001\000\136\144\160\000i\001\000\137\144\160\000j\001\000\145\144\160\000k\001\000\146\144\160\000l\001\000\147\144\160\000m\001\000\148\144\160\000n\001\000\149\144\160\000o\001\000\150\144\160\000p\001\000\151\144\160\000q\001\000\152\144\160\000r\001\000\153\144\160\000s\001\000\162\144\160\000t\001\000\163\144\160\000u\001\000\164\144\160\000v\001\000\165\144\160\000w\001\000\166\144\160\000x\001\000\167\144\160\000y\001\000\168\144\160\000z\001\000\169\144\160\000{\000H\144\160\000|\001\000\187\144\160\000}\001\000\140\144\160\000~\001\000\204\144\160\000\127G\144\160\001\000\128`\144\160\001\000\129a\144\160\001\000\130b\144\160\001\000\131c\144\160\001\000\132d\144\160\001\000\133U\144\160\001\000\134F\144\160\001\000\135W\144\160\001\000\136h\144\160\001\000\137i\144\160\001\000\138j\144\160\001\000\139k\144\160\001\000\140l\144\160\001\000\141I\144\160\001\000\142J\144\160\001\000\143[\144\160\001\000\144p\144\160\001\000\145q\144\160\001\000\146Z\144\160\001\000\147s\144\160\001\000\148t\144\160\001\000\149u\144\160\001\000\150v\144\160\001\000\151H\144\160\001\000\152x\144\160\001\000\153y\144\160\001\000\154z\144\160\001\000\155{\144\160\001\000\156D\144\160\001\000\157T\144\160\001\000\158~\144\160\001\000\159\001\000\255\144\160\001\000\160\000A\144\160\001\000\161\001\000\170\144\160\001\000\162\001\000\176\144\160\001\000\163\001\000\177\144\160\001\000\164\001\000\159\144\160\001\000\165\001\000\178\144\160\001\000\166\001\000\142\144\160\001\000\167\001\000\181\144\160\001\000\168\001\000\189\144\160\001\000\169\001\000\180\144\160\001\000\170\001\000\154\144\160\001\000\171\001\000\138\144\160\001\000\172\001\000\186\144\160\001\000\173\001\000\202\144\160\001\000\174\001\000\175\144\160\001\000\175\001\000\188\144\160\001\000\176\001\000\144\144\160\001\000\177\001\000\143\144\160\001\000\178\001\000\234\144\160\001\000\179\001\000\250\144\160\001\000\180\001\000\190\144\160\001\000\181\001\000\160\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\179\144\160\001\000\184\001\000\157\144\160\001\000\185\001\000\218\144\160\001\000\186\001\000\155\144\160\001\000\187\001\000\139\144\160\001\000\188\001\000\183\144\160\001\000\189\001\000\184\144\160\001\000\190\001\000\185\144\160\001\000\191\001\000\171\144\160\001\000\192\000d\144\160\001\000\193\000e\144\160\001\000\194\000b\144\160\001\000\195\000f\144\160\001\000\196\000c\144\160\001\000\197\000g\144\160\001\000\198\001\000\158\144\160\001\000\199\000J\144\160\001\000\200\000t\144\160\001\000\201\000q\144\160\001\000\202\000r\144\160\001\000\203\000s\144\160\001\000\204\000x\144\160\001\000\205\000u\144\160\001\000\206\000v\144\160\001\000\207\000w@\144\160\001\000\209\000i\144\160\001\000\210\001\000\237\144\160\001\000\211\001\000\238\144\160\001\000\212\001\000\235\144\160\001\000\213\001\000\239\144\160\001\000\214\000{\144\160\001\000\215\001\000\191\144\160\001\000\216\001\000\128\144\160\001\000\217\001\000\253\144\160\001\000\218\001\000\254\144\160\001\000\219\001\000\251\144\160\001\000\220\000\127@@\144\160\001\000\223\000Y\144\160\001\000\224\000D\144\160\001\000\225\000E\144\160\001\000\226\000B\144\160\001\000\227\000F\144\160\001\000\228\000C\144\160\001\000\229\000G\144\160\001\000\230\001\000\156\144\160\001\000\231\001\000\192\144\160\001\000\232\000T\144\160\001\000\233\000Q\144\160\001\000\234\000R\144\160\001\000\235\000S\144\160\001\000\236\000X\144\160\001\000\237\000U\144\160\001\000\238\000V\144\160\001\000\239\000W@\144\160\001\000\241\000I\144\160\001\000\242\001\000\205\144\160\001\000\243\001\000\206\144\160\001\000\244\001\000\203\144\160\001\000\245\001\000\207\144\160\001\000\246\001\000\161\144\160\001\000\247\001\000\225\144\160\001\000\248\000p\144\160\001\000\249\001\000\221\144\160\001\000\250\001\000\222\144\160\001\000\251\001\000\219\144\160\001\000\252\001\000\224@@\144\160\001\000\255\001\000\223" 0 : Netmappings.from_uni_list array);;
- let cp424_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002\031\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABC\001\000\156I\001\000\134\000\127\001\000\151\001\000\141\001\000\142KLMNOPQRS\001\000\157\001\000\133H\001\000\135XY\001\000\146\001\000\143\\]^_\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132JW[\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140EFG\001\000\144\001\000\145V\001\000\147\001\000\148\001\000\149\001\000\150D\001\000\152\001\000\153\001\000\154\001\000\155TU\001\000\158Z`\001\005\208\001\005\209\001\005\210\001\005\211\001\005\212\001\005\213\001\005\214\001\005\215\001\005\216\001\000\162n|hk\000|f\001\005\217\001\005\218\001\005\219\001\005\220\001\005\221\001\005\222\001\005\223\001\005\224\001\005\225adji{\001\000\172mo\001\005\226\001\005\227\001\005\228\001\005\229\001\005\230\001\005\231\001\005\232\001\005\233\001\000\166le\000_~\127\000\255\001\005\234\000\255\000\255\001\000\160\000\255\000\255\000\255\001 \023\000`zc\000@g}b\000\255\000a\000b\000c\000d\000e\000f\000g\000h\000i\001\000\171\001\000\187\000\255\000\255\000\255\001\000\177\001\000\176\000j\000k\000l\000m\000n\000o\000p\000q\000r\000\255\000\255\000\255\001\000\184\000\255\001\000\164\001\000\181\000~\000s\000t\000u\000v\000w\000x\000y\000z\000\255\000\255\000\255\000\255\000\255\001\000\174\000^\001\000\163\001\000\165\001\000\183\001\000\169\001\000\167\001\000\182\001\000\188\001\000\189\001\000\190\000[\000]\001\000\175\001\000\168\001\000\180\001\000\215\000{\000A\000B\000C\000D\000E\000F\000G\000H\000I\001\000\173\000\255\000\255\000\255\000\255\000\255\000}\000J\000K\000L\000M\000N\000O\000P\000Q\000R\001\000\185\000\255\000\255\000\255\000\255\000\255\000\\\001\000\247\000S\000T\000U\000V\000W\000X\000Y\000Z\001\000\178\000\255\000\255\000\255\000\255\000\255pqrstuvwxy\001\000\179\000\255\000\255\000\255\000\255\001\000\159" 0 : int array);;
-let cp424_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\005\135\000\000\000\000\000\000\005K\000\000\005K\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160Dw\144\160Em\144\160Fn\144\160Go\144\160HV\144\160IE\144\160Je\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160T|\144\160U}\144\160Vr\145\160\160Wf\160\160\001 \023\000x@\144\160XX\144\160YY\144\160Z\127\144\160[g\144\160\\\\\144\160]]\144\160^^\144\160__\144\160`\000@\144\160a\000Z\144\160b\000\127\144\160c\000{\144\160d\000[\144\160e\000l\144\160f\000P\144\160g\000}\144\160h\000M\144\160i\000]\144\160j\000\\\144\160k\000N\144\160l\000k\144\160m\000`\144\160n\000K\144\160o\000a\144\160p\001\000\240\144\160q\001\000\241\144\160r\001\000\242\144\160s\001\000\243\144\160t\001\000\244\144\160u\001\000\245\144\160v\001\000\246\144\160w\001\000\247\144\160x\001\000\248\144\160y\001\000\249\144\160z\000z\144\160{\000^\144\160|\000L\144\160}\000~\144\160~\000n\144\160\127\000o\144\160\000@\000|\144\160\000A\001\000\193\144\160\000B\001\000\194\144\160\000C\001\000\195\144\160\000D\001\000\196\144\160\000E\001\000\197\144\160\000F\001\000\198\144\160\000G\001\000\199\144\160\000H\001\000\200\144\160\000I\001\000\201\144\160\000J\001\000\209\144\160\000K\001\000\210\144\160\000L\001\000\211\144\160\000M\001\000\212\144\160\000N\001\000\213\144\160\000O\001\000\214\144\160\000P\001\000\215\144\160\000Q\001\000\216\144\160\000R\001\000\217\144\160\000S\001\000\226\144\160\000T\001\000\227\144\160\000U\001\000\228\144\160\000V\001\000\229\144\160\000W\001\000\230\144\160\000X\001\000\231\144\160\000Y\001\000\232\144\160\000Z\001\000\233\144\160\000[\001\000\186\144\160\000\\\001\000\224\144\160\000]\001\000\187\144\160\000^\001\000\176\144\160\000_\000m\144\160\000`\000y\144\160\000a\001\000\129\144\160\000b\001\000\130\144\160\000c\001\000\131\144\160\000d\001\000\132\144\160\000e\001\000\133\144\160\000f\001\000\134\144\160\000g\001\000\135\144\160\000h\001\000\136\144\160\000i\001\000\137\144\160\000j\001\000\145\144\160\000k\001\000\146\144\160\000l\001\000\147\144\160\000m\001\000\148\144\160\000n\001\000\149\144\160\000o\001\000\150\144\160\000p\001\000\151\144\160\000q\001\000\152\144\160\000r\001\000\153\144\160\000s\001\000\162\144\160\000t\001\000\163\144\160\000u\001\000\164\144\160\000v\001\000\165\144\160\000w\001\000\166\144\160\000x\001\000\167\144\160\000y\001\000\168\144\160\000z\001\000\169\144\160\000{\001\000\192\144\160\000|\000O\144\160\000}\001\000\208\144\160\000~\001\000\161\144\160\000\127G\144\160\001\000\128`\144\160\001\000\129a\144\160\001\000\130b\144\160\001\000\131c\144\160\001\000\132d\144\160\001\000\133U\144\160\001\000\134F\144\160\001\000\135W\144\160\001\000\136h\144\160\001\000\137i\144\160\001\000\138j\144\160\001\000\139k\144\160\001\000\140l\144\160\001\000\141I\144\160\001\000\142J\144\160\001\000\143[\144\160\001\000\144p\144\160\001\000\145q\144\160\001\000\146Z\144\160\001\000\147s\144\160\001\000\148t\144\160\001\000\149u\144\160\001\000\150v\144\160\001\000\151H\144\160\001\000\152x\144\160\001\000\153y\144\160\001\000\154z\144\160\001\000\155{\144\160\001\000\156D\144\160\001\000\157T\144\160\001\000\158~\144\160\001\000\159\001\000\255\144\160\001\000\160\000t@\144\160\001\000\162\000J\144\160\001\000\163\001\000\177\144\160\001\000\164\001\000\159\144\160\001\000\165\001\000\178\144\160\001\000\166\000j\144\160\001\000\167\001\000\181\144\160\001\000\168\001\000\189\144\160\001\000\169\001\000\180@\144\160\001\000\171\001\000\138\144\160\001\000\172\000_\144\160\001\000\173\001\000\202\144\160\001\000\174\001\000\175\144\160\001\000\175\001\000\188\144\160\001\000\176\001\000\144\144\160\001\000\177\001\000\143\144\160\001\000\178\001\000\234\144\160\001\000\179\001\000\250\144\160\001\000\180\001\000\190\144\160\001\000\181\001\000\160\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\179\144\160\001\000\184\001\000\157\144\160\001\000\185\001\000\218@\144\160\001\000\187\001\000\139\144\160\001\000\188\001\000\183\144\160\001\000\189\001\000\184\144\160\001\000\190\001\000\185@@@@@@@@@@@@@@@@@\144\160\001\005\208\000A\144\160\001\005\209\000B\144\160\001\005\210\000C\144\160\001\005\211\000D\144\160\001\005\212\000E\144\160\001\005\213\000F\144\160\001\005\214\000G\145\160\160\001\005\215\000H\160\160\001\000\215\001\000\191@\144\160\001\005\216\000I\144\160\001\005\217\000Q\144\160\001\005\218\000R\144\160\001\005\219\000S\144\160\001\005\220\000T\144\160\001\005\221\000U\144\160\001\005\222\000V\144\160\001\005\223\000W\144\160\001\005\224\000X\144\160\001\005\225\000Y\144\160\001\005\226\000b\144\160\001\005\227\000c\144\160\001\005\228\000d\144\160\001\005\229\000e\144\160\001\005\230\000f\144\160\001\005\231\000g\144\160\001\005\232\000h\144\160\001\005\233\000i\144\160\001\005\234\000q@@@@@@@@@@@@\144\160\001\000\247\001\000\225@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let cp437_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\199\001\000\252\001\000\233\001\000\226\001\000\228\001\000\224\001\000\229\001\000\231\001\000\234\001\000\235\001\000\232\001\000\239\001\000\238\001\000\236\001\000\196\001\000\197\001\000\201\001\000\230\001\000\198\001\000\244\001\000\246\001\000\242\001\000\251\001\000\249\001\000\255\001\000\214\001\000\220\001\000\162\001\000\163\001\000\165\001 \167\001\001\146\001\000\225\001\000\237\001\000\243\001\000\250\001\000\241\001\000\209\001\000\170\001\000\186\001\000\191\001#\016\001\000\172\001\000\189\001\000\188\001\000\161\001\000\171\001\000\187\001%\145\001%\146\001%\147\001%\002\001%$\001%a\001%b\001%V\001%U\001%c\001%Q\001%W\001%]\001%\\\001%[\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001%^\001%_\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001%g\001%h\001%d\001%e\001%Y\001%X\001%R\001%S\001%k\001%j\001%\024\001%\012\001%\136\001%\132\001%\140\001%\144\001%\128\001\003\177\001\000\223\001\003\147\001\003\192\001\003\163\001\003\195\001\000\181\001\003\196\001\003\166\001\003\152\001\003\169\001\003\180\001\"\030\001\003\198\001\003\181\001\")\001\"a\001\000\177\001\"e\001\"d\001# \001#!\001\000\247\001\"H\001\000\176\001\"\025\001\000\183\001\"\026\001 \127\001\000\178\001%\160\001\000\160" 0 : int array);;
-let cp437_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\0071\000\000\000\000\000\000\006\229\000\000\006\229\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\144\160AA\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\218@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001#\016\001\000\169\160\160\001%\016\001\000\191@\144\160QQ\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\192@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001%\024\001\000\217@\145\160\160YY\160\160\001\"\025\001\000\249@\145\160\160ZZ\160\160\001\"\026\001\000\251@\144\160[[\145\160\160\\\\\160\160\001%\028\001\000\195@\144\160]]\145\160\160^^\160\160\001\"\030\001\000\236@\144\160__\145\160\160``\160\160\001# \001\000\244@\145\160\160aa\160\160\001#!\001\000\245@\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\145\160\160ii\160\160\001\")\001\000\239@\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001%<\001\000\197@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\145\160\160\000H\000H\160\160\001\"H\001\000\247@\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186@\145\160\160\000R\000R\160\160\001%R\001\000\213@\145\160\160\000S\000S\160\160\001%S\001\000\214@\145\160\160\000T\000T\160\160\001%T\001\000\201@\145\160\160\000U\000U\160\160\001%U\001\000\184@\145\160\160\000V\000V\160\160\001%V\001\000\183@\145\160\160\000W\000W\160\160\001%W\001\000\187@\145\160\160\000X\000X\160\160\001%X\001\000\212@\145\160\160\000Y\000Y\160\160\001%Y\001\000\211@\145\160\160\000Z\000Z\160\160\001%Z\001\000\200@\145\160\160\000[\000[\160\160\001%[\001\000\190@\145\160\160\000\\\000\\\160\160\001%\\\001\000\189@\145\160\160\000]\000]\160\160\001%]\001\000\188@\145\160\160\000^\000^\160\160\001%^\001\000\198@\145\160\160\000_\000_\160\160\001%_\001\000\199@\145\160\160\000`\000`\160\160\001%`\001\000\204@\145\160\160\000a\000a\160\160\001%a\001\000\181\160\160\001\"a\001\000\240@\145\160\160\000b\000b\160\160\001%b\001\000\182@\145\160\160\000c\000c\160\160\001%c\001\000\185@\145\160\160\000d\000d\160\160\001%d\001\000\209\160\160\001\"d\001\000\243@\145\160\160\000e\000e\160\160\001%e\001\000\210\160\160\001\"e\001\000\242@\145\160\160\000f\000f\160\160\001%f\001\000\203@\145\160\160\000g\000g\160\160\001%g\001\000\207@\145\160\160\000h\000h\160\160\001%h\001\000\208@\145\160\160\000i\000i\160\160\001%i\001\000\202@\145\160\160\000j\000j\160\160\001%j\001\000\216@\145\160\160\000k\000k\160\160\001%k\001\000\215@\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\145\160\160\000\127\000\127\160\160\001 \127\001\000\252@\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@\144\160\001%\140\001\000\221@@@\144\160\001%\144\001\000\222\144\160\001%\145\001\000\176\145\160\160\001\001\146\001\000\159\160\160\001%\146\001\000\177@\145\160\160\001%\147\001\000\178\160\160\001\003\147\001\000\226@@@@@\144\160\001\003\152\001\000\233@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@\144\160\001\000\161\001\000\173\144\160\001\000\162\001\000\155\145\160\160\001\000\163\001\000\156\160\160\001\003\163\001\000\228@@\144\160\001\000\165\001\000\157\144\160\001\003\166\001\000\232\144\160\001 \167\001\000\158@\144\160\001\003\169\001\000\234\144\160\001\000\170\001\000\166\144\160\001\000\171\001\000\174\144\160\001\000\172\001\000\170@@@\144\160\001\000\176\001\000\248\145\160\160\001\003\177\001\000\224\160\160\001\000\177\001\000\241@\144\160\001\000\178\001\000\253@\144\160\001\003\180\001\000\235\145\160\160\001\000\181\001\000\230\160\160\001\003\181\001\000\238@@\144\160\001\000\183\001\000\250@@\144\160\001\000\186\001\000\167\144\160\001\000\187\001\000\175\144\160\001\000\188\001\000\172\144\160\001\000\189\001\000\171@\144\160\001\000\191\001\000\168\144\160\001\003\192\001\000\227@@\144\160\001\003\195\001\000\229\145\160\160\001\000\196\001\000\142\160\160\001\003\196\001\000\231@\144\160\001\000\197\001\000\143\145\160\160\001\000\198\001\000\146\160\160\001\003\198\001\000\237@\144\160\001\000\199\001\000\128@\144\160\001\000\201\001\000\144@@@@@@@\144\160\001\000\209\001\000\165@@@@\144\160\001\000\214\001\000\153@@@@@\144\160\001\000\220\001\000\154@@\144\160\001\000\223\001\000\225\144\160\001\000\224\001\000\133\144\160\001\000\225\001\000\160\144\160\001\000\226\001\000\131@\144\160\001\000\228\001\000\132\144\160\001\000\229\001\000\134\144\160\001\000\230\001\000\145\144\160\001\000\231\001\000\135\144\160\001\000\232\001\000\138\144\160\001\000\233\001\000\130\144\160\001\000\234\001\000\136\144\160\001\000\235\001\000\137\144\160\001\000\236\001\000\141\144\160\001\000\237\001\000\161\144\160\001\000\238\001\000\140\144\160\001\000\239\001\000\139@\144\160\001\000\241\001\000\164\144\160\001\000\242\001\000\149\144\160\001\000\243\001\000\162\144\160\001\000\244\001\000\147@\144\160\001\000\246\001\000\148\144\160\001\000\247\001\000\246@\144\160\001\000\249\001\000\151\144\160\001\000\250\001\000\163\144\160\001\000\251\001\000\150\144\160\001\000\252\001\000\129@@\144\160\001\000\255\001\000\152" 0 : Netmappings.from_uni_list array);;
- let cp500_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABC\001\000\156I\001\000\134\000\127\001\000\151\001\000\141\001\000\142KLMNOPQRS\001\000\157\001\000\133H\001\000\135XY\001\000\146\001\000\143\\]^_\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132JW[\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140EFG\001\000\144\001\000\145V\001\000\147\001\000\148\001\000\149\001\000\150D\001\000\152\001\000\153\001\000\154\001\000\155TU\001\000\158Z`\001\000\160\001\000\226\001\000\228\001\000\224\001\000\225\001\000\227\001\000\229\001\000\231\001\000\241\000[n|hkaf\001\000\233\001\000\234\001\000\235\001\000\232\001\000\237\001\000\238\001\000\239\001\000\236\001\000\223\000]dji{\000^mo\001\000\194\001\000\196\001\000\192\001\000\193\001\000\195\001\000\197\001\000\199\001\000\209\001\000\166le\000_~\127\001\000\248\001\000\201\001\000\202\001\000\203\001\000\200\001\000\205\001\000\206\001\000\207\001\000\204\000`zc\000@g}b\001\000\216\000a\000b\000c\000d\000e\000f\000g\000h\000i\001\000\171\001\000\187\001\000\240\001\000\253\001\000\254\001\000\177\001\000\176\000j\000k\000l\000m\000n\000o\000p\000q\000r\001\000\170\001\000\186\001\000\230\001\000\184\001\000\198\001\000\164\001\000\181\000~\000s\000t\000u\000v\000w\000x\000y\000z\001\000\161\001\000\191\001\000\208\001\000\221\001\000\222\001\000\174\001\000\162\001\000\163\001\000\165\001\000\183\001\000\169\001\000\167\001\000\182\001\000\188\001\000\189\001\000\190\001\000\172\000|\001\000\175\001\000\168\001\000\180\001\000\215\000{\000A\000B\000C\000D\000E\000F\000G\000H\000I\001\000\173\001\000\244\001\000\246\001\000\242\001\000\243\001\000\245\000}\000J\000K\000L\000M\000N\000O\000P\000Q\000R\001\000\185\001\000\251\001\000\252\001\000\249\001\000\250\001\000\255\000\\\001\000\247\000S\000T\000U\000V\000W\000X\000Y\000Z\001\000\178\001\000\212\001\000\214\001\000\210\001\000\211\001\000\213pqrstuvwxy\001\000\179\001\000\219\001\000\220\001\000\217\001\000\218\001\000\159" 0 : int array);;
-let cp500_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\133\000\000\000\000\000\000\006\001\000\000\006\001\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160Dw\144\160Em\144\160Fn\144\160Go\144\160HV\144\160IE\144\160Je\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160T|\144\160U}\144\160Vr\144\160Wf\144\160XX\144\160YY\144\160Z\127\144\160[g\144\160\\\\\144\160]]\144\160^^\144\160__\144\160`\000@\144\160a\000O\144\160b\000\127\144\160c\000{\144\160d\000[\144\160e\000l\144\160f\000P\144\160g\000}\144\160h\000M\144\160i\000]\144\160j\000\\\144\160k\000N\144\160l\000k\144\160m\000`\144\160n\000K\144\160o\000a\144\160p\001\000\240\144\160q\001\000\241\144\160r\001\000\242\144\160s\001\000\243\144\160t\001\000\244\144\160u\001\000\245\144\160v\001\000\246\144\160w\001\000\247\144\160x\001\000\248\144\160y\001\000\249\144\160z\000z\144\160{\000^\144\160|\000L\144\160}\000~\144\160~\000n\144\160\127\000o\144\160\000@\000|\144\160\000A\001\000\193\144\160\000B\001\000\194\144\160\000C\001\000\195\144\160\000D\001\000\196\144\160\000E\001\000\197\144\160\000F\001\000\198\144\160\000G\001\000\199\144\160\000H\001\000\200\144\160\000I\001\000\201\144\160\000J\001\000\209\144\160\000K\001\000\210\144\160\000L\001\000\211\144\160\000M\001\000\212\144\160\000N\001\000\213\144\160\000O\001\000\214\144\160\000P\001\000\215\144\160\000Q\001\000\216\144\160\000R\001\000\217\144\160\000S\001\000\226\144\160\000T\001\000\227\144\160\000U\001\000\228\144\160\000V\001\000\229\144\160\000W\001\000\230\144\160\000X\001\000\231\144\160\000Y\001\000\232\144\160\000Z\001\000\233\144\160\000[\000J\144\160\000\\\001\000\224\144\160\000]\000Z\144\160\000^\000_\144\160\000_\000m\144\160\000`\000y\144\160\000a\001\000\129\144\160\000b\001\000\130\144\160\000c\001\000\131\144\160\000d\001\000\132\144\160\000e\001\000\133\144\160\000f\001\000\134\144\160\000g\001\000\135\144\160\000h\001\000\136\144\160\000i\001\000\137\144\160\000j\001\000\145\144\160\000k\001\000\146\144\160\000l\001\000\147\144\160\000m\001\000\148\144\160\000n\001\000\149\144\160\000o\001\000\150\144\160\000p\001\000\151\144\160\000q\001\000\152\144\160\000r\001\000\153\144\160\000s\001\000\162\144\160\000t\001\000\163\144\160\000u\001\000\164\144\160\000v\001\000\165\144\160\000w\001\000\166\144\160\000x\001\000\167\144\160\000y\001\000\168\144\160\000z\001\000\169\144\160\000{\001\000\192\144\160\000|\001\000\187\144\160\000}\001\000\208\144\160\000~\001\000\161\144\160\000\127G\144\160\001\000\128`\144\160\001\000\129a\144\160\001\000\130b\144\160\001\000\131c\144\160\001\000\132d\144\160\001\000\133U\144\160\001\000\134F\144\160\001\000\135W\144\160\001\000\136h\144\160\001\000\137i\144\160\001\000\138j\144\160\001\000\139k\144\160\001\000\140l\144\160\001\000\141I\144\160\001\000\142J\144\160\001\000\143[\144\160\001\000\144p\144\160\001\000\145q\144\160\001\000\146Z\144\160\001\000\147s\144\160\001\000\148t\144\160\001\000\149u\144\160\001\000\150v\144\160\001\000\151H\144\160\001\000\152x\144\160\001\000\153y\144\160\001\000\154z\144\160\001\000\155{\144\160\001\000\156D\144\160\001\000\157T\144\160\001\000\158~\144\160\001\000\159\001\000\255\144\160\001\000\160\000A\144\160\001\000\161\001\000\170\144\160\001\000\162\001\000\176\144\160\001\000\163\001\000\177\144\160\001\000\164\001\000\159\144\160\001\000\165\001\000\178\144\160\001\000\166\000j\144\160\001\000\167\001\000\181\144\160\001\000\168\001\000\189\144\160\001\000\169\001\000\180\144\160\001\000\170\001\000\154\144\160\001\000\171\001\000\138\144\160\001\000\172\001\000\186\144\160\001\000\173\001\000\202\144\160\001\000\174\001\000\175\144\160\001\000\175\001\000\188\144\160\001\000\176\001\000\144\144\160\001\000\177\001\000\143\144\160\001\000\178\001\000\234\144\160\001\000\179\001\000\250\144\160\001\000\180\001\000\190\144\160\001\000\181\001\000\160\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\179\144\160\001\000\184\001\000\157\144\160\001\000\185\001\000\218\144\160\001\000\186\001\000\155\144\160\001\000\187\001\000\139\144\160\001\000\188\001\000\183\144\160\001\000\189\001\000\184\144\160\001\000\190\001\000\185\144\160\001\000\191\001\000\171\144\160\001\000\192\000d\144\160\001\000\193\000e\144\160\001\000\194\000b\144\160\001\000\195\000f\144\160\001\000\196\000c\144\160\001\000\197\000g\144\160\001\000\198\001\000\158\144\160\001\000\199\000h\144\160\001\000\200\000t\144\160\001\000\201\000q\144\160\001\000\202\000r\144\160\001\000\203\000s\144\160\001\000\204\000x\144\160\001\000\205\000u\144\160\001\000\206\000v\144\160\001\000\207\000w\144\160\001\000\208\001\000\172\144\160\001\000\209\000i\144\160\001\000\210\001\000\237\144\160\001\000\211\001\000\238\144\160\001\000\212\001\000\235\144\160\001\000\213\001\000\239\144\160\001\000\214\001\000\236\144\160\001\000\215\001\000\191\144\160\001\000\216\001\000\128\144\160\001\000\217\001\000\253\144\160\001\000\218\001\000\254\144\160\001\000\219\001\000\251\144\160\001\000\220\001\000\252\144\160\001\000\221\001\000\173\144\160\001\000\222\001\000\174\144\160\001\000\223\000Y\144\160\001\000\224\000D\144\160\001\000\225\000E\144\160\001\000\226\000B\144\160\001\000\227\000F\144\160\001\000\228\000C\144\160\001\000\229\000G\144\160\001\000\230\001\000\156\144\160\001\000\231\000H\144\160\001\000\232\000T\144\160\001\000\233\000Q\144\160\001\000\234\000R\144\160\001\000\235\000S\144\160\001\000\236\000X\144\160\001\000\237\000U\144\160\001\000\238\000V\144\160\001\000\239\000W\144\160\001\000\240\001\000\140\144\160\001\000\241\000I\144\160\001\000\242\001\000\205\144\160\001\000\243\001\000\206\144\160\001\000\244\001\000\203\144\160\001\000\245\001\000\207\144\160\001\000\246\001\000\204\144\160\001\000\247\001\000\225\144\160\001\000\248\000p\144\160\001\000\249\001\000\221\144\160\001\000\250\001\000\222\144\160\001\000\251\001\000\219\144\160\001\000\252\001\000\220\144\160\001\000\253\001\000\141\144\160\001\000\254\001\000\142\144\160\001\000\255\001\000\223" 0 : Netmappings.from_uni_list array);;
- let cp737_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\003\145\001\003\146\001\003\147\001\003\148\001\003\149\001\003\150\001\003\151\001\003\152\001\003\153\001\003\154\001\003\155\001\003\156\001\003\157\001\003\158\001\003\159\001\003\160\001\003\161\001\003\163\001\003\164\001\003\165\001\003\166\001\003\167\001\003\168\001\003\169\001\003\177\001\003\178\001\003\179\001\003\180\001\003\181\001\003\182\001\003\183\001\003\184\001\003\185\001\003\186\001\003\187\001\003\188\001\003\189\001\003\190\001\003\191\001\003\192\001\003\193\001\003\195\001\003\194\001\003\196\001\003\197\001\003\198\001\003\199\001\003\200\001%\145\001%\146\001%\147\001%\002\001%$\001%a\001%b\001%V\001%U\001%c\001%Q\001%W\001%]\001%\\\001%[\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001%^\001%_\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001%g\001%h\001%d\001%e\001%Y\001%X\001%R\001%S\001%k\001%j\001%\024\001%\012\001%\136\001%\132\001%\140\001%\144\001%\128\001\003\201\001\003\172\001\003\173\001\003\174\001\003\202\001\003\175\001\003\204\001\003\205\001\003\203\001\003\206\001\003\134\001\003\136\001\003\137\001\003\138\001\003\140\001\003\142\001\003\143\001\000\177\001\"e\001\"d\001\003\170\001\003\171\001\000\247\001\"H\001\000\176\001\"\025\001\000\183\001\"\026\001 \127\001\000\178\001%\160\001\000\160" 0 : int array);;
-let cp737_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007'\000\000\000\000\000\000\006\216\000\000\006\216\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\144\160AA\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\218@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001%\016\001\000\191@\144\160QQ\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\192@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001%\024\001\000\217@\145\160\160YY\160\160\001\"\025\001\000\249@\145\160\160ZZ\160\160\001\"\026\001\000\251@\144\160[[\145\160\160\\\\\160\160\001%\028\001\000\195@\144\160]]\144\160^^\144\160__\144\160``\144\160aa\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001%<\001\000\197@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\145\160\160\000H\000H\160\160\001\"H\001\000\247@\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186@\145\160\160\000R\000R\160\160\001%R\001\000\213@\145\160\160\000S\000S\160\160\001%S\001\000\214@\145\160\160\000T\000T\160\160\001%T\001\000\201@\145\160\160\000U\000U\160\160\001%U\001\000\184@\145\160\160\000V\000V\160\160\001%V\001\000\183@\145\160\160\000W\000W\160\160\001%W\001\000\187@\145\160\160\000X\000X\160\160\001%X\001\000\212@\145\160\160\000Y\000Y\160\160\001%Y\001\000\211@\145\160\160\000Z\000Z\160\160\001%Z\001\000\200@\145\160\160\000[\000[\160\160\001%[\001\000\190@\145\160\160\000\\\000\\\160\160\001%\\\001\000\189@\145\160\160\000]\000]\160\160\001%]\001\000\188@\145\160\160\000^\000^\160\160\001%^\001\000\198@\145\160\160\000_\000_\160\160\001%_\001\000\199@\145\160\160\000`\000`\160\160\001%`\001\000\204@\145\160\160\000a\000a\160\160\001%a\001\000\181@\145\160\160\000b\000b\160\160\001%b\001\000\182@\145\160\160\000c\000c\160\160\001%c\001\000\185@\145\160\160\000d\000d\160\160\001%d\001\000\209\160\160\001\"d\001\000\243@\145\160\160\000e\000e\160\160\001%e\001\000\210\160\160\001\"e\001\000\242@\145\160\160\000f\000f\160\160\001%f\001\000\203@\145\160\160\000g\000g\160\160\001%g\001\000\207@\145\160\160\000h\000h\160\160\001%h\001\000\208@\145\160\160\000i\000i\160\160\001%i\001\000\202@\145\160\160\000j\000j\160\160\001%j\001\000\216@\145\160\160\000k\000k\160\160\001%k\001\000\215@\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\145\160\160\000\127\000\127\160\160\001 \127\001\000\252@\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@\144\160\001\003\134\001\000\234@\145\160\160\001%\136\001\000\219\160\160\001\003\136\001\000\235@\144\160\001\003\137\001\000\236\144\160\001\003\138\001\000\237@\145\160\160\001%\140\001\000\221\160\160\001\003\140\001\000\238@@\144\160\001\003\142\001\000\239\144\160\001\003\143\001\000\240\144\160\001%\144\001\000\222\145\160\160\001\003\145\001\000\128\160\160\001%\145\001\000\176@\145\160\160\001\003\146\001\000\129\160\160\001%\146\001\000\177@\145\160\160\001\003\147\001\000\130\160\160\001%\147\001\000\178@\144\160\001\003\148\001\000\131\144\160\001\003\149\001\000\132\144\160\001\003\150\001\000\133\144\160\001\003\151\001\000\134\144\160\001\003\152\001\000\135\144\160\001\003\153\001\000\136\144\160\001\003\154\001\000\137\144\160\001\003\155\001\000\138\144\160\001\003\156\001\000\139\144\160\001\003\157\001\000\140\144\160\001\003\158\001\000\141\144\160\001\003\159\001\000\142\145\160\160\001\003\160\001\000\143\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@\144\160\001\003\161\001\000\144@\144\160\001\003\163\001\000\145\144\160\001\003\164\001\000\146\144\160\001\003\165\001\000\147\144\160\001\003\166\001\000\148\144\160\001\003\167\001\000\149\144\160\001\003\168\001\000\150\144\160\001\003\169\001\000\151\144\160\001\003\170\001\000\244\144\160\001\003\171\001\000\245\144\160\001\003\172\001\000\225\144\160\001\003\173\001\000\226\144\160\001\003\174\001\000\227\144\160\001\003\175\001\000\229\144\160\001\000\176\001\000\248\145\160\160\001\003\177\001\000\152\160\160\001\000\177\001\000\241@\145\160\160\001\003\178\001\000\153\160\160\001\000\178\001\000\253@\144\160\001\003\179\001\000\154\144\160\001\003\180\001\000\155\144\160\001\003\181\001\000\156\144\160\001\003\182\001\000\157\145\160\160\001\003\183\001\000\158\160\160\001\000\183\001\000\250@\144\160\001\003\184\001\000\159\144\160\001\003\185\001\000\160\144\160\001\003\186\001\000\161\144\160\001\003\187\001\000\162\144\160\001\003\188\001\000\163\144\160\001\003\189\001\000\164\144\160\001\003\190\001\000\165\144\160\001\003\191\001\000\166\144\160\001\003\192\001\000\167\144\160\001\003\193\001\000\168\144\160\001\003\194\001\000\170\144\160\001\003\195\001\000\169\144\160\001\003\196\001\000\171\144\160\001\003\197\001\000\172\144\160\001\003\198\001\000\173\144\160\001\003\199\001\000\174\144\160\001\003\200\001\000\175\144\160\001\003\201\001\000\224\144\160\001\003\202\001\000\228\144\160\001\003\203\001\000\232\144\160\001\003\204\001\000\230\144\160\001\003\205\001\000\231\144\160\001\003\206\001\000\233@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\144\160\001\000\247\001\000\246@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let cp775_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\001\006\001\000\252\001\000\233\001\001\001\001\000\228\001\001#\001\000\229\001\001\007\001\001B\001\001\019\001\001V\001\001W\001\001+\001\001y\001\000\196\001\000\197\001\000\201\001\000\230\001\000\198\001\001M\001\000\246\001\001\"\001\000\162\001\001Z\001\001[\001\000\214\001\000\220\001\000\248\001\000\163\001\000\216\001\000\215\001\000\164\001\001\000\001\001*\001\000\243\001\001{\001\001|\001\001z\001 \029\001\000\166\001\000\169\001\000\174\001\000\172\001\000\189\001\000\188\001\001A\001\000\171\001\000\187\001%\145\001%\146\001%\147\001%\002\001%$\001\001\004\001\001\012\001\001\024\001\001\022\001%c\001%Q\001%W\001%]\001\001.\001\001`\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001\001r\001\001j\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001\001}\001\001\005\001\001\013\001\001\025\001\001\023\001\001/\001\001a\001\001s\001\001k\001\001~\001%\024\001%\012\001%\136\001%\132\001%\140\001%\144\001%\128\001\000\211\001\000\223\001\001L\001\001C\001\000\245\001\000\213\001\000\181\001\001D\001\0016\001\0017\001\001;\001\001<\001\001F\001\001\018\001\001E\001 \025\001\000\173\001\000\177\001 \028\001\000\190\001\000\182\001\000\167\001\000\247\001 \030\001\000\176\001\"\025\001\000\183\001\000\185\001\000\179\001\000\178\001%\160\001\000\160" 0 : int array);;
-let cp775_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007U\000\000\000\000\000\000\007\019\000\000\007\019\008\000\004\000\000\145\160\160@@\160\160\001\001\000\001\000\160\160\160\001%\000\001\000\196@\145\160\160AA\160\160\001\001\001\001\000\131@\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\145\160\160DD\160\160\001\001\004\001\000\181@\145\160\160EE\160\160\001\001\005\001\000\208@\145\160\160FF\160\160\001\001\006\001\000\128@\145\160\160GG\160\160\001\001\007\001\000\135@\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001\001\012\001\000\182\160\160\001%\012\001\000\218@\145\160\160MM\160\160\001\001\013\001\000\209@\144\160NN\144\160OO\145\160\160PP\160\160\001%\016\001\000\191@\144\160QQ\145\160\160RR\160\160\001\001\018\001\000\237@\145\160\160SS\160\160\001\001\019\001\000\137@\145\160\160TT\160\160\001%\020\001\000\192@\144\160UU\145\160\160VV\160\160\001\001\022\001\000\184@\145\160\160WW\160\160\001\001\023\001\000\211@\145\160\160XX\160\160\001\001\024\001\000\183\160\160\001%\024\001\000\217@\145\160\160YY\160\160\001\001\025\001\000\210\160\160\001 \025\001\000\239\160\160\001\"\025\001\000\249@\144\160ZZ\144\160[[\145\160\160\\\\\160\160\001%\028\001\000\195\160\160\001 \028\001\000\242@\145\160\160]]\160\160\001 \029\001\000\166@\145\160\160^^\160\160\001 \030\001\000\247@\144\160__\144\160``\144\160aa\145\160\160bb\160\160\001\001\"\001\000\149@\145\160\160cc\160\160\001\001#\001\000\133@\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\145\160\160jj\160\160\001\001*\001\000\161@\145\160\160kk\160\160\001\001+\001\000\140@\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\145\160\160nn\160\160\001\001.\001\000\189@\145\160\160oo\160\160\001\001/\001\000\212@\144\160pp\144\160qq\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\145\160\160vv\160\160\001\0016\001\000\232@\145\160\160ww\160\160\001\0017\001\000\233@\144\160xx\144\160yy\144\160zz\145\160\160{{\160\160\001\001;\001\000\234@\145\160\160||\160\160\001%<\001\000\197\160\160\001\001<\001\000\235@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\145\160\160\000A\000A\160\160\001\001A\001\000\173@\145\160\160\000B\000B\160\160\001\001B\001\000\136@\145\160\160\000C\000C\160\160\001\001C\001\000\227@\145\160\160\000D\000D\160\160\001\001D\001\000\231@\145\160\160\000E\000E\160\160\001\001E\001\000\238@\145\160\160\000F\000F\160\160\001\001F\001\000\236@\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\145\160\160\000L\000L\160\160\001\001L\001\000\226@\145\160\160\000M\000M\160\160\001\001M\001\000\147@\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186@\144\160\000R\000R\144\160\000S\000S\145\160\160\000T\000T\160\160\001%T\001\000\201@\144\160\000U\000U\145\160\160\000V\000V\160\160\001\001V\001\000\138@\145\160\160\000W\000W\160\160\001\001W\001\000\139\160\160\001%W\001\000\187@\144\160\000X\000X\144\160\000Y\000Y\145\160\160\000Z\000Z\160\160\001\001Z\001\000\151\160\160\001%Z\001\000\200@\145\160\160\000[\000[\160\160\001\001[\001\000\152@\144\160\000\\\000\\\145\160\160\000]\000]\160\160\001%]\001\000\188@\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001\001`\001\000\190\160\160\001%`\001\000\204@\145\160\160\000a\000a\160\160\001\001a\001\000\213@\144\160\000b\000b\145\160\160\000c\000c\160\160\001%c\001\000\185@\144\160\000d\000d\144\160\000e\000e\145\160\160\000f\000f\160\160\001%f\001\000\203@\144\160\000g\000g\144\160\000h\000h\145\160\160\000i\000i\160\160\001%i\001\000\202@\145\160\160\000j\000j\160\160\001\001j\001\000\199@\145\160\160\000k\000k\160\160\001\001k\001\000\215@\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\145\160\160\000r\000r\160\160\001\001r\001\000\198@\145\160\160\000s\000s\160\160\001\001s\001\000\214@\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\145\160\160\000y\000y\160\160\001\001y\001\000\141@\145\160\160\000z\000z\160\160\001\001z\001\000\165@\145\160\160\000{\000{\160\160\001\001{\001\000\163@\145\160\160\000|\000|\160\160\001\001|\001\000\164@\145\160\160\000}\000}\160\160\001\001}\001\000\207@\145\160\160\000~\000~\160\160\001\001~\001\000\216@\144\160\000\127\000\127\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@\144\160\001%\140\001\000\221@@@\144\160\001%\144\001\000\222\144\160\001%\145\001\000\176\144\160\001%\146\001\000\177\144\160\001%\147\001\000\178@@@@@@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@@\144\160\001\000\162\001\000\150\144\160\001\000\163\001\000\156\144\160\001\000\164\001\000\159@\144\160\001\000\166\001\000\167\144\160\001\000\167\001\000\245@\144\160\001\000\169\001\000\168@\144\160\001\000\171\001\000\174\144\160\001\000\172\001\000\170\144\160\001\000\173\001\000\240\144\160\001\000\174\001\000\169@\144\160\001\000\176\001\000\248\144\160\001\000\177\001\000\241\144\160\001\000\178\001\000\253\144\160\001\000\179\001\000\252@\144\160\001\000\181\001\000\230\144\160\001\000\182\001\000\244\144\160\001\000\183\001\000\250@\144\160\001\000\185\001\000\251@\144\160\001\000\187\001\000\175\144\160\001\000\188\001\000\172\144\160\001\000\189\001\000\171\144\160\001\000\190\001\000\243@@@@@\144\160\001\000\196\001\000\142\144\160\001\000\197\001\000\143\144\160\001\000\198\001\000\146@@\144\160\001\000\201\001\000\144@@@@@@@@@\144\160\001\000\211\001\000\224@\144\160\001\000\213\001\000\229\144\160\001\000\214\001\000\153\144\160\001\000\215\001\000\158\144\160\001\000\216\001\000\157@@@\144\160\001\000\220\001\000\154@@\144\160\001\000\223\001\000\225@@@@\144\160\001\000\228\001\000\132\144\160\001\000\229\001\000\134\144\160\001\000\230\001\000\145@@\144\160\001\000\233\001\000\130@@@@@@@@@\144\160\001\000\243\001\000\162@\144\160\001\000\245\001\000\228\144\160\001\000\246\001\000\148\144\160\001\000\247\001\000\246\144\160\001\000\248\001\000\155@@@\144\160\001\000\252\001\000\129@@@" 0 : Netmappings.from_uni_list array);;
- let cp850_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\199\001\000\252\001\000\233\001\000\226\001\000\228\001\000\224\001\000\229\001\000\231\001\000\234\001\000\235\001\000\232\001\000\239\001\000\238\001\000\236\001\000\196\001\000\197\001\000\201\001\000\230\001\000\198\001\000\244\001\000\246\001\000\242\001\000\251\001\000\249\001\000\255\001\000\214\001\000\220\001\000\248\001\000\163\001\000\216\001\000\215\001\001\146\001\000\225\001\000\237\001\000\243\001\000\250\001\000\241\001\000\209\001\000\170\001\000\186\001\000\191\001\000\174\001\000\172\001\000\189\001\000\188\001\000\161\001\000\171\001\000\187\001%\145\001%\146\001%\147\001%\002\001%$\001\000\193\001\000\194\001\000\192\001\000\169\001%c\001%Q\001%W\001%]\001\000\162\001\000\165\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001\000\227\001\000\195\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001\000\164\001\000\240\001\000\208\001\000\202\001\000\203\001\000\200\001\0011\001\000\205\001\000\206\001\000\207\001%\024\001%\012\001%\136\001%\132\001\000\166\001\000\204\001%\128\001\000\211\001\000\223\001\000\212\001\000\210\001\000\245\001\000\213\001\000\181\001\000\254\001\000\222\001\000\218\001\000\219\001\000\217\001\000\253\001\000\221\001\000\175\001\000\180\001\000\173\001\000\177\001 \023\001\000\190\001\000\182\001\000\167\001\000\247\001\000\184\001\000\176\001\000\168\001\000\183\001\000\185\001\000\179\001\000\178\001%\160\001\000\160" 0 : int array);;
-let cp850_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\211\000\000\000\000\000\000\006i\000\000\006i\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\144\160AA\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\218@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001%\016\001\000\191@\144\160QQ\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\192@\144\160UU\144\160VV\145\160\160WW\160\160\001 \023\001\000\242@\145\160\160XX\160\160\001%\024\001\000\217@\144\160YY\144\160ZZ\144\160[[\145\160\160\\\\\160\160\001%\028\001\000\195@\144\160]]\144\160^^\144\160__\144\160``\144\160aa\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\144\160nn\144\160oo\144\160pp\145\160\160qq\160\160\001\0011\001\000\213@\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001%<\001\000\197@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186@\144\160\000R\000R\144\160\000S\000S\145\160\160\000T\000T\160\160\001%T\001\000\201@\144\160\000U\000U\144\160\000V\000V\145\160\160\000W\000W\160\160\001%W\001\000\187@\144\160\000X\000X\144\160\000Y\000Y\145\160\160\000Z\000Z\160\160\001%Z\001\000\200@\144\160\000[\000[\144\160\000\\\000\\\145\160\160\000]\000]\160\160\001%]\001\000\188@\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001%`\001\000\204@\144\160\000a\000a\144\160\000b\000b\145\160\160\000c\000c\160\160\001%c\001\000\185@\144\160\000d\000d\144\160\000e\000e\145\160\160\000f\000f\160\160\001%f\001\000\203@\144\160\000g\000g\144\160\000h\000h\145\160\160\000i\000i\160\160\001%i\001\000\202@\144\160\000j\000j\144\160\000k\000k\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@@@@@@\144\160\001%\145\001\000\176\145\160\160\001\001\146\001\000\159\160\160\001%\146\001\000\177@\144\160\001%\147\001\000\178@@@@@@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@\144\160\001\000\161\001\000\173\144\160\001\000\162\001\000\189\144\160\001\000\163\001\000\156\144\160\001\000\164\001\000\207\144\160\001\000\165\001\000\190\144\160\001\000\166\001\000\221\144\160\001\000\167\001\000\245\144\160\001\000\168\001\000\249\144\160\001\000\169\001\000\184\144\160\001\000\170\001\000\166\144\160\001\000\171\001\000\174\144\160\001\000\172\001\000\170\144\160\001\000\173\001\000\240\144\160\001\000\174\001\000\169\144\160\001\000\175\001\000\238\144\160\001\000\176\001\000\248\144\160\001\000\177\001\000\241\144\160\001\000\178\001\000\253\144\160\001\000\179\001\000\252\144\160\001\000\180\001\000\239\144\160\001\000\181\001\000\230\144\160\001\000\182\001\000\244\144\160\001\000\183\001\000\250\144\160\001\000\184\001\000\247\144\160\001\000\185\001\000\251\144\160\001\000\186\001\000\167\144\160\001\000\187\001\000\175\144\160\001\000\188\001\000\172\144\160\001\000\189\001\000\171\144\160\001\000\190\001\000\243\144\160\001\000\191\001\000\168\144\160\001\000\192\001\000\183\144\160\001\000\193\001\000\181\144\160\001\000\194\001\000\182\144\160\001\000\195\001\000\199\144\160\001\000\196\001\000\142\144\160\001\000\197\001\000\143\144\160\001\000\198\001\000\146\144\160\001\000\199\001\000\128\144\160\001\000\200\001\000\212\144\160\001\000\201\001\000\144\144\160\001\000\202\001\000\210\144\160\001\000\203\001\000\211\144\160\001\000\204\001\000\222\144\160\001\000\205\001\000\214\144\160\001\000\206\001\000\215\144\160\001\000\207\001\000\216\144\160\001\000\208\001\000\209\144\160\001\000\209\001\000\165\144\160\001\000\210\001\000\227\144\160\001\000\211\001\000\224\144\160\001\000\212\001\000\226\144\160\001\000\213\001\000\229\144\160\001\000\214\001\000\153\144\160\001\000\215\001\000\158\144\160\001\000\216\001\000\157\144\160\001\000\217\001\000\235\144\160\001\000\218\001\000\233\144\160\001\000\219\001\000\234\144\160\001\000\220\001\000\154\144\160\001\000\221\001\000\237\144\160\001\000\222\001\000\232\144\160\001\000\223\001\000\225\144\160\001\000\224\001\000\133\144\160\001\000\225\001\000\160\144\160\001\000\226\001\000\131\144\160\001\000\227\001\000\198\144\160\001\000\228\001\000\132\144\160\001\000\229\001\000\134\144\160\001\000\230\001\000\145\144\160\001\000\231\001\000\135\144\160\001\000\232\001\000\138\144\160\001\000\233\001\000\130\144\160\001\000\234\001\000\136\144\160\001\000\235\001\000\137\144\160\001\000\236\001\000\141\144\160\001\000\237\001\000\161\144\160\001\000\238\001\000\140\144\160\001\000\239\001\000\139\144\160\001\000\240\001\000\208\144\160\001\000\241\001\000\164\144\160\001\000\242\001\000\149\144\160\001\000\243\001\000\162\144\160\001\000\244\001\000\147\144\160\001\000\245\001\000\228\144\160\001\000\246\001\000\148\144\160\001\000\247\001\000\246\144\160\001\000\248\001\000\155\144\160\001\000\249\001\000\151\144\160\001\000\250\001\000\163\144\160\001\000\251\001\000\150\144\160\001\000\252\001\000\129\144\160\001\000\253\001\000\236\144\160\001\000\254\001\000\231\144\160\001\000\255\001\000\152" 0 : Netmappings.from_uni_list array);;
- let cp852_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\199\001\000\252\001\000\233\001\000\226\001\000\228\001\001o\001\001\007\001\000\231\001\001B\001\000\235\001\001P\001\001Q\001\000\238\001\001y\001\000\196\001\001\006\001\000\201\001\0019\001\001:\001\000\244\001\000\246\001\001=\001\001>\001\001Z\001\001[\001\000\214\001\000\220\001\001d\001\001e\001\001A\001\000\215\001\001\013\001\000\225\001\000\237\001\000\243\001\000\250\001\001\004\001\001\005\001\001}\001\001~\001\001\024\001\001\025\001\000\172\001\001z\001\001\012\001\001_\001\000\171\001\000\187\001%\145\001%\146\001%\147\001%\002\001%$\001\000\193\001\000\194\001\001\026\001\001^\001%c\001%Q\001%W\001%]\001\001{\001\001|\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001\001\002\001\001\003\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001\000\164\001\001\017\001\001\016\001\001\014\001\000\203\001\001\015\001\001G\001\000\205\001\000\206\001\001\027\001%\024\001%\012\001%\136\001%\132\001\001b\001\001n\001%\128\001\000\211\001\000\223\001\000\212\001\001C\001\001D\001\001H\001\001`\001\001a\001\001T\001\000\218\001\001U\001\001p\001\000\253\001\000\221\001\001c\001\000\180\001\000\173\001\002\221\001\002\219\001\002\199\001\002\216\001\000\167\001\000\247\001\000\184\001\000\176\001\000\168\001\002\217\001\001q\001\001X\001\001Y\001%\160\001\000\160" 0 : int array);;
-let cp852_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007X\000\000\000\000\000\000\007\023\000\000\007\023\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\144\160AA\145\160\160BB\160\160\001%\002\001\000\179\160\160\001\001\002\001\000\198@\145\160\160CC\160\160\001\001\003\001\000\199@\145\160\160DD\160\160\001\001\004\001\000\164@\145\160\160EE\160\160\001\001\005\001\000\165@\145\160\160FF\160\160\001\001\006\001\000\143@\145\160\160GG\160\160\001\001\007\001\000\134@\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001\001\012\001\000\172\160\160\001%\012\001\000\218@\145\160\160MM\160\160\001\001\013\001\000\159@\145\160\160NN\160\160\001\001\014\001\000\210@\145\160\160OO\160\160\001\001\015\001\000\212@\145\160\160PP\160\160\001%\016\001\000\191\160\160\001\001\016\001\000\209@\145\160\160QQ\160\160\001\001\017\001\000\208@\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\192@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001\001\024\001\000\168\160\160\001%\024\001\000\217@\145\160\160YY\160\160\001\001\025\001\000\169@\145\160\160ZZ\160\160\001\001\026\001\000\183@\145\160\160[[\160\160\001\001\027\001\000\216@\145\160\160\\\\\160\160\001%\028\001\000\195@\144\160]]\144\160^^\144\160__\144\160``\144\160aa\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\144\160vv\144\160ww\144\160xx\145\160\160yy\160\160\001\0019\001\000\145@\145\160\160zz\160\160\001\001:\001\000\146@\144\160{{\145\160\160||\160\160\001%<\001\000\197@\145\160\160}}\160\160\001\001=\001\000\149@\145\160\160~~\160\160\001\001>\001\000\150@\144\160\127\127\144\160\000@\000@\145\160\160\000A\000A\160\160\001\001A\001\000\157@\145\160\160\000B\000B\160\160\001\001B\001\000\136@\145\160\160\000C\000C\160\160\001\001C\001\000\227@\145\160\160\000D\000D\160\160\001\001D\001\000\228@\144\160\000E\000E\144\160\000F\000F\145\160\160\000G\000G\160\160\001\001G\001\000\213@\145\160\160\000H\000H\160\160\001\001H\001\000\229@\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001\001P\001\000\138\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001\001Q\001\000\139\160\160\001%Q\001\000\186@\144\160\000R\000R\144\160\000S\000S\145\160\160\000T\000T\160\160\001%T\001\000\201\160\160\001\001T\001\000\232@\145\160\160\000U\000U\160\160\001\001U\001\000\234@\144\160\000V\000V\145\160\160\000W\000W\160\160\001%W\001\000\187@\145\160\160\000X\000X\160\160\001\001X\001\000\252@\145\160\160\000Y\000Y\160\160\001\001Y\001\000\253@\145\160\160\000Z\000Z\160\160\001\001Z\001\000\151\160\160\001%Z\001\000\200@\145\160\160\000[\000[\160\160\001\001[\001\000\152@\144\160\000\\\000\\\145\160\160\000]\000]\160\160\001%]\001\000\188@\145\160\160\000^\000^\160\160\001\001^\001\000\184@\145\160\160\000_\000_\160\160\001\001_\001\000\173@\145\160\160\000`\000`\160\160\001%`\001\000\204\160\160\001\001`\001\000\230@\145\160\160\000a\000a\160\160\001\001a\001\000\231@\145\160\160\000b\000b\160\160\001\001b\001\000\221@\145\160\160\000c\000c\160\160\001%c\001\000\185\160\160\001\001c\001\000\238@\145\160\160\000d\000d\160\160\001\001d\001\000\155@\145\160\160\000e\000e\160\160\001\001e\001\000\156@\145\160\160\000f\000f\160\160\001%f\001\000\203@\144\160\000g\000g\144\160\000h\000h\145\160\160\000i\000i\160\160\001%i\001\000\202@\144\160\000j\000j\144\160\000k\000k\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\145\160\160\000n\000n\160\160\001\001n\001\000\222@\145\160\160\000o\000o\160\160\001\001o\001\000\133@\145\160\160\000p\000p\160\160\001\001p\001\000\235@\145\160\160\000q\000q\160\160\001\001q\001\000\251@\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\145\160\160\000y\000y\160\160\001\001y\001\000\141@\145\160\160\000z\000z\160\160\001\001z\001\000\171@\145\160\160\000{\000{\160\160\001\001{\001\000\189@\145\160\160\000|\000|\160\160\001\001|\001\000\190@\145\160\160\000}\000}\160\160\001\001}\001\000\166@\145\160\160\000~\000~\160\160\001\001~\001\000\167@\144\160\000\127\000\127\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@@@@@@\144\160\001%\145\001\000\176\144\160\001%\146\001\000\177\144\160\001%\147\001\000\178@@@@@@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@@@@\144\160\001\000\164\001\000\207@@\144\160\001\000\167\001\000\245\144\160\001\000\168\001\000\249@@\144\160\001\000\171\001\000\174\144\160\001\000\172\001\000\170\144\160\001\000\173\001\000\240@@\144\160\001\000\176\001\000\248@@@\144\160\001\000\180\001\000\239@@@\144\160\001\000\184\001\000\247@@\144\160\001\000\187\001\000\175@@@@@\144\160\001\000\193\001\000\181\144\160\001\000\194\001\000\182@\144\160\001\000\196\001\000\142@@\145\160\160\001\000\199\001\000\128\160\160\001\002\199\001\000\243@@\144\160\001\000\201\001\000\144@\144\160\001\000\203\001\000\211@\144\160\001\000\205\001\000\214\144\160\001\000\206\001\000\215@@@@\144\160\001\000\211\001\000\224\144\160\001\000\212\001\000\226@\144\160\001\000\214\001\000\153\144\160\001\000\215\001\000\158\144\160\001\002\216\001\000\244\144\160\001\002\217\001\000\250\144\160\001\000\218\001\000\233\144\160\001\002\219\001\000\242\144\160\001\000\220\001\000\154\145\160\160\001\000\221\001\000\237\160\160\001\002\221\001\000\241@@\144\160\001\000\223\001\000\225@\144\160\001\000\225\001\000\160\144\160\001\000\226\001\000\131@\144\160\001\000\228\001\000\132@@\144\160\001\000\231\001\000\135@\144\160\001\000\233\001\000\130@\144\160\001\000\235\001\000\137@\144\160\001\000\237\001\000\161\144\160\001\000\238\001\000\140@@@@\144\160\001\000\243\001\000\162\144\160\001\000\244\001\000\147@\144\160\001\000\246\001\000\148\144\160\001\000\247\001\000\246@@\144\160\001\000\250\001\000\163@\144\160\001\000\252\001\000\129\144\160\001\000\253\001\000\236@@" 0 : Netmappings.from_uni_list array);;
- let cp855_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\004R\001\004\002\001\004S\001\004\003\001\004Q\001\004\001\001\004T\001\004\004\001\004U\001\004\005\001\004V\001\004\006\001\004W\001\004\007\001\004X\001\004\008\001\004Y\001\004\t\001\004Z\001\004\n\001\004[\001\004\011\001\004\\\001\004\012\001\004^\001\004\014\001\004_\001\004\015\001\004N\001\004.\001\004J\001\004*\001\0040\001\004\016\001\0041\001\004\017\001\004F\001\004&\001\0044\001\004\020\001\0045\001\004\021\001\004D\001\004$\001\0043\001\004\019\001\000\171\001\000\187\001%\145\001%\146\001%\147\001%\002\001%$\001\004E\001\004%\001\0048\001\004\024\001%c\001%Q\001%W\001%]\001\0049\001\004\025\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001\004:\001\004\026\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001\000\164\001\004;\001\004\027\001\004<\001\004\028\001\004=\001\004\029\001\004>\001\004\030\001\004?\001%\024\001%\012\001%\136\001%\132\001\004\031\001\004O\001%\128\001\004/\001\004@\001\004 \001\004A\001\004!\001\004B\001\004\"\001\004C\001\004#\001\0046\001\004\022\001\0042\001\004\018\001\004L\001\004,\001!\022\001\000\173\001\004K\001\004+\001\0047\001\004\023\001\004H\001\004(\001\004M\001\004-\001\004I\001\004)\001\004G\001\004'\001\000\167\001%\160\001\000\160" 0 : int array);;
-let cp855_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007\195\000\000\000\000\000\000\007\164\000\000\007\164\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\145\160\160AA\160\160\001\004\001\001\000\133@\145\160\160BB\160\160\001\004\002\001\000\129\160\160\001%\002\001\000\179@\145\160\160CC\160\160\001\004\003\001\000\131@\145\160\160DD\160\160\001\004\004\001\000\135@\145\160\160EE\160\160\001\004\005\001\000\137@\145\160\160FF\160\160\001\004\006\001\000\139@\145\160\160GG\160\160\001\004\007\001\000\141@\145\160\160HH\160\160\001\004\008\001\000\143@\145\160\160II\160\160\001\004\t\001\000\145@\145\160\160JJ\160\160\001\004\n\001\000\147@\145\160\160KK\160\160\001\004\011\001\000\149@\145\160\160LL\160\160\001\004\012\001\000\151\160\160\001%\012\001\000\218@\144\160MM\145\160\160NN\160\160\001\004\014\001\000\153@\145\160\160OO\160\160\001\004\015\001\000\155@\145\160\160PP\160\160\001\004\016\001\000\161\160\160\001%\016\001\000\191@\145\160\160QQ\160\160\001\004\017\001\000\163@\145\160\160RR\160\160\001\004\018\001\000\236@\145\160\160SS\160\160\001\004\019\001\000\173@\145\160\160TT\160\160\001\004\020\001\000\167\160\160\001%\020\001\000\192@\145\160\160UU\160\160\001\004\021\001\000\169@\145\160\160VV\160\160\001\004\022\001\000\234\160\160\001!\022\001\000\239@\145\160\160WW\160\160\001\004\023\001\000\244@\145\160\160XX\160\160\001\004\024\001\000\184\160\160\001%\024\001\000\217@\145\160\160YY\160\160\001\004\025\001\000\190@\145\160\160ZZ\160\160\001\004\026\001\000\199@\145\160\160[[\160\160\001\004\027\001\000\209@\145\160\160\\\\\160\160\001%\028\001\000\195\160\160\001\004\028\001\000\211@\145\160\160]]\160\160\001\004\029\001\000\213@\145\160\160^^\160\160\001\004\030\001\000\215@\145\160\160__\160\160\001\004\031\001\000\221@\145\160\160``\160\160\001\004 \001\000\226@\145\160\160aa\160\160\001\004!\001\000\228@\145\160\160bb\160\160\001\004\"\001\000\230@\145\160\160cc\160\160\001\004#\001\000\232@\145\160\160dd\160\160\001\004$\001\000\171\160\160\001%$\001\000\180@\145\160\160ee\160\160\001\004%\001\000\182@\145\160\160ff\160\160\001\004&\001\000\165@\145\160\160gg\160\160\001\004'\001\000\252@\145\160\160hh\160\160\001\004(\001\000\246@\145\160\160ii\160\160\001\004)\001\000\250@\145\160\160jj\160\160\001\004*\001\000\159@\145\160\160kk\160\160\001\004+\001\000\242@\145\160\160ll\160\160\001%,\001\000\194\160\160\001\004,\001\000\238@\145\160\160mm\160\160\001\004-\001\000\248@\145\160\160nn\160\160\001\004.\001\000\157@\145\160\160oo\160\160\001\004/\001\000\224@\145\160\160pp\160\160\001\0040\001\000\160@\145\160\160qq\160\160\001\0041\001\000\162@\145\160\160rr\160\160\001\0042\001\000\235@\145\160\160ss\160\160\001\0043\001\000\172@\145\160\160tt\160\160\001\0044\001\000\166\160\160\001%4\001\000\193@\145\160\160uu\160\160\001\0045\001\000\168@\145\160\160vv\160\160\001\0046\001\000\233@\145\160\160ww\160\160\001\0047\001\000\243@\145\160\160xx\160\160\001\0048\001\000\183@\145\160\160yy\160\160\001\0049\001\000\189@\145\160\160zz\160\160\001\004:\001\000\198@\145\160\160{{\160\160\001\004;\001\000\208@\145\160\160||\160\160\001%<\001\000\197\160\160\001\004<\001\000\210@\145\160\160}}\160\160\001\004=\001\000\212@\145\160\160~~\160\160\001\004>\001\000\214@\145\160\160\127\127\160\160\001\004?\001\000\216@\145\160\160\000@\000@\160\160\001\004@\001\000\225@\145\160\160\000A\000A\160\160\001\004A\001\000\227@\145\160\160\000B\000B\160\160\001\004B\001\000\229@\145\160\160\000C\000C\160\160\001\004C\001\000\231@\145\160\160\000D\000D\160\160\001\004D\001\000\170@\145\160\160\000E\000E\160\160\001\004E\001\000\181@\145\160\160\000F\000F\160\160\001\004F\001\000\164@\145\160\160\000G\000G\160\160\001\004G\001\000\251@\145\160\160\000H\000H\160\160\001\004H\001\000\245@\145\160\160\000I\000I\160\160\001\004I\001\000\249@\145\160\160\000J\000J\160\160\001\004J\001\000\158@\145\160\160\000K\000K\160\160\001\004K\001\000\241@\145\160\160\000L\000L\160\160\001\004L\001\000\237@\145\160\160\000M\000M\160\160\001\004M\001\000\247@\145\160\160\000N\000N\160\160\001\004N\001\000\156@\145\160\160\000O\000O\160\160\001\004O\001\000\222@\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001\004Q\001\000\132\160\160\001%Q\001\000\186@\145\160\160\000R\000R\160\160\001\004R\001\000\128@\145\160\160\000S\000S\160\160\001\004S\001\000\130@\145\160\160\000T\000T\160\160\001\004T\001\000\134\160\160\001%T\001\000\201@\145\160\160\000U\000U\160\160\001\004U\001\000\136@\145\160\160\000V\000V\160\160\001\004V\001\000\138@\145\160\160\000W\000W\160\160\001\004W\001\000\140\160\160\001%W\001\000\187@\145\160\160\000X\000X\160\160\001\004X\001\000\142@\145\160\160\000Y\000Y\160\160\001\004Y\001\000\144@\145\160\160\000Z\000Z\160\160\001\004Z\001\000\146\160\160\001%Z\001\000\200@\145\160\160\000[\000[\160\160\001\004[\001\000\148@\145\160\160\000\\\000\\\160\160\001\004\\\001\000\150@\145\160\160\000]\000]\160\160\001%]\001\000\188@\145\160\160\000^\000^\160\160\001\004^\001\000\152@\145\160\160\000_\000_\160\160\001\004_\001\000\154@\145\160\160\000`\000`\160\160\001%`\001\000\204@\144\160\000a\000a\144\160\000b\000b\145\160\160\000c\000c\160\160\001%c\001\000\185@\144\160\000d\000d\144\160\000e\000e\145\160\160\000f\000f\160\160\001%f\001\000\203@\144\160\000g\000g\144\160\000h\000h\145\160\160\000i\000i\160\160\001%i\001\000\202@\144\160\000j\000j\144\160\000k\000k\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@@@@@@\144\160\001%\145\001\000\176\144\160\001%\146\001\000\177\144\160\001%\147\001\000\178@@@@@@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@@@@\144\160\001\000\164\001\000\207@@\144\160\001\000\167\001\000\253@@@\144\160\001\000\171\001\000\174@\144\160\001\000\173\001\000\240@@@@@@@@@@@@@\144\160\001\000\187\001\000\175@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let cp856_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002\028\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\005\208\001\005\209\001\005\210\001\005\211\001\005\212\001\005\213\001\005\214\001\005\215\001\005\216\001\005\217\001\005\218\001\005\219\001\005\220\001\005\221\001\005\222\001\005\223\001\005\224\001\005\225\001\005\226\001\005\227\001\005\228\001\005\229\001\005\230\001\005\231\001\005\232\001\005\233\001\005\234\000\255\001\000\163\000\255\001\000\215\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001\000\174\001\000\172\001\000\189\001\000\188\000\255\001\000\171\001\000\187\001%\145\001%\146\001%\147\001%\002\001%$\000\255\000\255\000\255\001\000\169\001%c\001%Q\001%W\001%]\001\000\162\001\000\165\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\000\255\000\255\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001\000\164\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001%\024\001%\012\001%\136\001%\132\001\000\166\000\255\001%\128\000\255\000\255\000\255\000\255\000\255\000\255\001\000\181\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001\000\175\001\000\180\001\000\173\001\000\177\001 \023\001\000\190\001\000\182\001\000\167\001\000\247\001\000\184\001\000\176\001\000\168\001\000\183\001\000\185\001\000\179\001\000\178\001%\160\001\000\160" 0 : int array);;
-let cp856_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\005\177\000\000\000\000\000\000\005\152\000\000\005\152\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\144\160AA\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\218@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001%\016\001\000\191@\144\160QQ\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\192@\144\160UU\144\160VV\145\160\160WW\160\160\001 \023\001\000\242@\145\160\160XX\160\160\001%\024\001\000\217@\144\160YY\144\160ZZ\144\160[[\145\160\160\\\\\160\160\001%\028\001\000\195@\144\160]]\144\160^^\144\160__\144\160``\144\160aa\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001%<\001\000\197@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186@\144\160\000R\000R\144\160\000S\000S\145\160\160\000T\000T\160\160\001%T\001\000\201@\144\160\000U\000U\144\160\000V\000V\145\160\160\000W\000W\160\160\001%W\001\000\187@\144\160\000X\000X\144\160\000Y\000Y\145\160\160\000Z\000Z\160\160\001%Z\001\000\200@\144\160\000[\000[\144\160\000\\\000\\\145\160\160\000]\000]\160\160\001%]\001\000\188@\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001%`\001\000\204@\144\160\000a\000a\144\160\000b\000b\145\160\160\000c\000c\160\160\001%c\001\000\185@\144\160\000d\000d\144\160\000e\000e\145\160\160\000f\000f\160\160\001%f\001\000\203@\144\160\000g\000g\144\160\000h\000h\145\160\160\000i\000i\160\160\001%i\001\000\202@\144\160\000j\000j\144\160\000k\000k\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@@@@@@\144\160\001%\145\001\000\176\144\160\001%\146\001\000\177\144\160\001%\147\001\000\178@@@@@@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@@\144\160\001\000\162\001\000\189\144\160\001\000\163\001\000\156\144\160\001\000\164\001\000\207\144\160\001\000\165\001\000\190\144\160\001\000\166\001\000\221\144\160\001\000\167\001\000\245\144\160\001\000\168\001\000\249\144\160\001\000\169\001\000\184@\144\160\001\000\171\001\000\174\144\160\001\000\172\001\000\170\144\160\001\000\173\001\000\240\144\160\001\000\174\001\000\169\144\160\001\000\175\001\000\238\144\160\001\000\176\001\000\248\144\160\001\000\177\001\000\241\144\160\001\000\178\001\000\253\144\160\001\000\179\001\000\252\144\160\001\000\180\001\000\239\144\160\001\000\181\001\000\230\144\160\001\000\182\001\000\244\144\160\001\000\183\001\000\250\144\160\001\000\184\001\000\247\144\160\001\000\185\001\000\251@\144\160\001\000\187\001\000\175\144\160\001\000\188\001\000\172\144\160\001\000\189\001\000\171\144\160\001\000\190\001\000\243@@@@@@@@@@@@@@@@@\144\160\001\005\208\001\000\128\144\160\001\005\209\001\000\129\144\160\001\005\210\001\000\130\144\160\001\005\211\001\000\131\144\160\001\005\212\001\000\132\144\160\001\005\213\001\000\133\144\160\001\005\214\001\000\134\145\160\160\001\005\215\001\000\135\160\160\001\000\215\001\000\158@\144\160\001\005\216\001\000\136\144\160\001\005\217\001\000\137\144\160\001\005\218\001\000\138\144\160\001\005\219\001\000\139\144\160\001\005\220\001\000\140\144\160\001\005\221\001\000\141\144\160\001\005\222\001\000\142\144\160\001\005\223\001\000\143\144\160\001\005\224\001\000\144\144\160\001\005\225\001\000\145\144\160\001\005\226\001\000\146\144\160\001\005\227\001\000\147\144\160\001\005\228\001\000\148\144\160\001\005\229\001\000\149\144\160\001\005\230\001\000\150\144\160\001\005\231\001\000\151\144\160\001\005\232\001\000\152\144\160\001\005\233\001\000\153\144\160\001\005\234\001\000\154@@@@@@@@@@@@\144\160\001\000\247\001\000\246@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let cp857_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002B\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\199\001\000\252\001\000\233\001\000\226\001\000\228\001\000\224\001\000\229\001\000\231\001\000\234\001\000\235\001\000\232\001\000\239\001\000\238\001\0011\001\000\196\001\000\197\001\000\201\001\000\230\001\000\198\001\000\244\001\000\246\001\000\242\001\000\251\001\000\249\001\0010\001\000\214\001\000\220\001\000\248\001\000\163\001\000\216\001\001^\001\001_\001\000\225\001\000\237\001\000\243\001\000\250\001\000\241\001\000\209\001\001\030\001\001\031\001\000\191\001\000\174\001\000\172\001\000\189\001\000\188\001\000\161\001\000\171\001\000\187\001%\145\001%\146\001%\147\001%\002\001%$\001\000\193\001\000\194\001\000\192\001\000\169\001%c\001%Q\001%W\001%]\001\000\162\001\000\165\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001\000\227\001\000\195\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001\000\164\001\000\186\001\000\170\001\000\202\001\000\203\001\000\200\000\255\001\000\205\001\000\206\001\000\207\001%\024\001%\012\001%\136\001%\132\001\000\166\001\000\204\001%\128\001\000\211\001\000\223\001\000\212\001\000\210\001\000\245\001\000\213\001\000\181\000\255\001\000\215\001\000\218\001\000\219\001\000\217\001\000\236\001\000\255\001\000\175\001\000\180\001\000\173\001\000\177\000\255\001\000\190\001\000\182\001\000\167\001\000\247\001\000\184\001\000\176\001\000\168\001\000\183\001\000\185\001\000\179\001\000\178\001%\160\001\000\160" 0 : int array);;
-let cp857_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\199\000\000\000\000\000\000\006f\000\000\006f\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\144\160AA\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\218@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001%\016\001\000\191@\144\160QQ\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\192@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001%\024\001\000\217@\144\160YY\144\160ZZ\144\160[[\145\160\160\\\\\160\160\001%\028\001\000\195@\144\160]]\145\160\160^^\160\160\001\001\030\001\000\166@\145\160\160__\160\160\001\001\031\001\000\167@\144\160``\144\160aa\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\144\160nn\144\160oo\145\160\160pp\160\160\001\0010\001\000\152@\145\160\160qq\160\160\001\0011\001\000\141@\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001%<\001\000\197@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186@\144\160\000R\000R\144\160\000S\000S\145\160\160\000T\000T\160\160\001%T\001\000\201@\144\160\000U\000U\144\160\000V\000V\145\160\160\000W\000W\160\160\001%W\001\000\187@\144\160\000X\000X\144\160\000Y\000Y\145\160\160\000Z\000Z\160\160\001%Z\001\000\200@\144\160\000[\000[\144\160\000\\\000\\\145\160\160\000]\000]\160\160\001%]\001\000\188@\145\160\160\000^\000^\160\160\001\001^\001\000\158@\145\160\160\000_\000_\160\160\001\001_\001\000\159@\145\160\160\000`\000`\160\160\001%`\001\000\204@\144\160\000a\000a\144\160\000b\000b\145\160\160\000c\000c\160\160\001%c\001\000\185@\144\160\000d\000d\144\160\000e\000e\145\160\160\000f\000f\160\160\001%f\001\000\203@\144\160\000g\000g\144\160\000h\000h\145\160\160\000i\000i\160\160\001%i\001\000\202@\144\160\000j\000j\144\160\000k\000k\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@@@@@@\144\160\001%\145\001\000\176\144\160\001%\146\001\000\177\144\160\001%\147\001\000\178@@@@@@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@\144\160\001\000\161\001\000\173\144\160\001\000\162\001\000\189\144\160\001\000\163\001\000\156\144\160\001\000\164\001\000\207\144\160\001\000\165\001\000\190\144\160\001\000\166\001\000\221\144\160\001\000\167\001\000\245\144\160\001\000\168\001\000\249\144\160\001\000\169\001\000\184\144\160\001\000\170\001\000\209\144\160\001\000\171\001\000\174\144\160\001\000\172\001\000\170\144\160\001\000\173\001\000\240\144\160\001\000\174\001\000\169\144\160\001\000\175\001\000\238\144\160\001\000\176\001\000\248\144\160\001\000\177\001\000\241\144\160\001\000\178\001\000\253\144\160\001\000\179\001\000\252\144\160\001\000\180\001\000\239\144\160\001\000\181\001\000\230\144\160\001\000\182\001\000\244\144\160\001\000\183\001\000\250\144\160\001\000\184\001\000\247\144\160\001\000\185\001\000\251\144\160\001\000\186\001\000\208\144\160\001\000\187\001\000\175\144\160\001\000\188\001\000\172\144\160\001\000\189\001\000\171\144\160\001\000\190\001\000\243\144\160\001\000\191\001\000\168\144\160\001\000\192\001\000\183\144\160\001\000\193\001\000\181\144\160\001\000\194\001\000\182\144\160\001\000\195\001\000\199\144\160\001\000\196\001\000\142\144\160\001\000\197\001\000\143\144\160\001\000\198\001\000\146\144\160\001\000\199\001\000\128\144\160\001\000\200\001\000\212\144\160\001\000\201\001\000\144\144\160\001\000\202\001\000\210\144\160\001\000\203\001\000\211\144\160\001\000\204\001\000\222\144\160\001\000\205\001\000\214\144\160\001\000\206\001\000\215\144\160\001\000\207\001\000\216@\144\160\001\000\209\001\000\165\144\160\001\000\210\001\000\227\144\160\001\000\211\001\000\224\144\160\001\000\212\001\000\226\144\160\001\000\213\001\000\229\144\160\001\000\214\001\000\153\144\160\001\000\215\001\000\232\144\160\001\000\216\001\000\157\144\160\001\000\217\001\000\235\144\160\001\000\218\001\000\233\144\160\001\000\219\001\000\234\144\160\001\000\220\001\000\154@@\144\160\001\000\223\001\000\225\144\160\001\000\224\001\000\133\144\160\001\000\225\001\000\160\144\160\001\000\226\001\000\131\144\160\001\000\227\001\000\198\144\160\001\000\228\001\000\132\144\160\001\000\229\001\000\134\144\160\001\000\230\001\000\145\144\160\001\000\231\001\000\135\144\160\001\000\232\001\000\138\144\160\001\000\233\001\000\130\144\160\001\000\234\001\000\136\144\160\001\000\235\001\000\137\144\160\001\000\236\001\000\236\144\160\001\000\237\001\000\161\144\160\001\000\238\001\000\140\144\160\001\000\239\001\000\139@\144\160\001\000\241\001\000\164\144\160\001\000\242\001\000\149\144\160\001\000\243\001\000\162\144\160\001\000\244\001\000\147\144\160\001\000\245\001\000\228\144\160\001\000\246\001\000\148\144\160\001\000\247\001\000\246\144\160\001\000\248\001\000\155\144\160\001\000\249\001\000\151\144\160\001\000\250\001\000\163\144\160\001\000\251\001\000\150\144\160\001\000\252\001\000\129@@\144\160\001\000\255\001\000\237" 0 : Netmappings.from_uni_list array);;
- let cp860_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\199\001\000\252\001\000\233\001\000\226\001\000\227\001\000\224\001\000\193\001\000\231\001\000\234\001\000\202\001\000\232\001\000\205\001\000\212\001\000\236\001\000\195\001\000\194\001\000\201\001\000\192\001\000\200\001\000\244\001\000\245\001\000\242\001\000\218\001\000\249\001\000\204\001\000\213\001\000\220\001\000\162\001\000\163\001\000\217\001 \167\001\000\211\001\000\225\001\000\237\001\000\243\001\000\250\001\000\241\001\000\209\001\000\170\001\000\186\001\000\191\001\000\210\001\000\172\001\000\189\001\000\188\001\000\161\001\000\171\001\000\187\001%\145\001%\146\001%\147\001%\002\001%$\001%a\001%b\001%V\001%U\001%c\001%Q\001%W\001%]\001%\\\001%[\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001%^\001%_\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001%g\001%h\001%d\001%e\001%Y\001%X\001%R\001%S\001%k\001%j\001%\024\001%\012\001%\136\001%\132\001%\140\001%\144\001%\128\001\003\177\001\000\223\001\003\147\001\003\192\001\003\163\001\003\195\001\000\181\001\003\196\001\003\166\001\003\152\001\003\169\001\003\180\001\"\030\001\003\198\001\003\181\001\")\001\"a\001\000\177\001\"e\001\"d\001# \001#!\001\000\247\001\"H\001\000\176\001\"\025\001\000\183\001\"\026\001 \127\001\000\178\001%\160\001\000\160" 0 : int array);;
-let cp860_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007-\000\000\000\000\000\000\006\224\000\000\006\224\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\144\160AA\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\218@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001%\016\001\000\191@\144\160QQ\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\192@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001%\024\001\000\217@\145\160\160YY\160\160\001\"\025\001\000\249@\145\160\160ZZ\160\160\001\"\026\001\000\251@\144\160[[\145\160\160\\\\\160\160\001%\028\001\000\195@\144\160]]\145\160\160^^\160\160\001\"\030\001\000\236@\144\160__\145\160\160``\160\160\001# \001\000\244@\145\160\160aa\160\160\001#!\001\000\245@\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\145\160\160ii\160\160\001\")\001\000\239@\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001%<\001\000\197@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\145\160\160\000H\000H\160\160\001\"H\001\000\247@\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186@\145\160\160\000R\000R\160\160\001%R\001\000\213@\145\160\160\000S\000S\160\160\001%S\001\000\214@\145\160\160\000T\000T\160\160\001%T\001\000\201@\145\160\160\000U\000U\160\160\001%U\001\000\184@\145\160\160\000V\000V\160\160\001%V\001\000\183@\145\160\160\000W\000W\160\160\001%W\001\000\187@\145\160\160\000X\000X\160\160\001%X\001\000\212@\145\160\160\000Y\000Y\160\160\001%Y\001\000\211@\145\160\160\000Z\000Z\160\160\001%Z\001\000\200@\145\160\160\000[\000[\160\160\001%[\001\000\190@\145\160\160\000\\\000\\\160\160\001%\\\001\000\189@\145\160\160\000]\000]\160\160\001%]\001\000\188@\145\160\160\000^\000^\160\160\001%^\001\000\198@\145\160\160\000_\000_\160\160\001%_\001\000\199@\145\160\160\000`\000`\160\160\001%`\001\000\204@\145\160\160\000a\000a\160\160\001%a\001\000\181\160\160\001\"a\001\000\240@\145\160\160\000b\000b\160\160\001%b\001\000\182@\145\160\160\000c\000c\160\160\001%c\001\000\185@\145\160\160\000d\000d\160\160\001%d\001\000\209\160\160\001\"d\001\000\243@\145\160\160\000e\000e\160\160\001%e\001\000\210\160\160\001\"e\001\000\242@\145\160\160\000f\000f\160\160\001%f\001\000\203@\145\160\160\000g\000g\160\160\001%g\001\000\207@\145\160\160\000h\000h\160\160\001%h\001\000\208@\145\160\160\000i\000i\160\160\001%i\001\000\202@\145\160\160\000j\000j\160\160\001%j\001\000\216@\145\160\160\000k\000k\160\160\001%k\001\000\215@\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\145\160\160\000\127\000\127\160\160\001 \127\001\000\252@\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@\144\160\001%\140\001\000\221@@@\144\160\001%\144\001\000\222\144\160\001%\145\001\000\176\144\160\001%\146\001\000\177\145\160\160\001%\147\001\000\178\160\160\001\003\147\001\000\226@@@@@\144\160\001\003\152\001\000\233@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@\144\160\001\000\161\001\000\173\144\160\001\000\162\001\000\155\145\160\160\001\000\163\001\000\156\160\160\001\003\163\001\000\228@@@\144\160\001\003\166\001\000\232\144\160\001 \167\001\000\158@\144\160\001\003\169\001\000\234\144\160\001\000\170\001\000\166\144\160\001\000\171\001\000\174\144\160\001\000\172\001\000\170@@@\144\160\001\000\176\001\000\248\145\160\160\001\003\177\001\000\224\160\160\001\000\177\001\000\241@\144\160\001\000\178\001\000\253@\144\160\001\003\180\001\000\235\145\160\160\001\000\181\001\000\230\160\160\001\003\181\001\000\238@@\144\160\001\000\183\001\000\250@@\144\160\001\000\186\001\000\167\144\160\001\000\187\001\000\175\144\160\001\000\188\001\000\172\144\160\001\000\189\001\000\171@\144\160\001\000\191\001\000\168\145\160\160\001\000\192\001\000\145\160\160\001\003\192\001\000\227@\144\160\001\000\193\001\000\134\144\160\001\000\194\001\000\143\145\160\160\001\000\195\001\000\142\160\160\001\003\195\001\000\229@\144\160\001\003\196\001\000\231@\144\160\001\003\198\001\000\237\144\160\001\000\199\001\000\128\144\160\001\000\200\001\000\146\144\160\001\000\201\001\000\144\144\160\001\000\202\001\000\137@\144\160\001\000\204\001\000\152\144\160\001\000\205\001\000\139@@@\144\160\001\000\209\001\000\165\144\160\001\000\210\001\000\169\144\160\001\000\211\001\000\159\144\160\001\000\212\001\000\140\144\160\001\000\213\001\000\153@@@\144\160\001\000\217\001\000\157\144\160\001\000\218\001\000\150@\144\160\001\000\220\001\000\154@@\144\160\001\000\223\001\000\225\144\160\001\000\224\001\000\133\144\160\001\000\225\001\000\160\144\160\001\000\226\001\000\131\144\160\001\000\227\001\000\132@@@\144\160\001\000\231\001\000\135\144\160\001\000\232\001\000\138\144\160\001\000\233\001\000\130\144\160\001\000\234\001\000\136@\144\160\001\000\236\001\000\141\144\160\001\000\237\001\000\161@@@\144\160\001\000\241\001\000\164\144\160\001\000\242\001\000\149\144\160\001\000\243\001\000\162\144\160\001\000\244\001\000\147\144\160\001\000\245\001\000\148@\144\160\001\000\247\001\000\246@\144\160\001\000\249\001\000\151\144\160\001\000\250\001\000\163@\144\160\001\000\252\001\000\129@@@" 0 : Netmappings.from_uni_list array);;
- let cp861_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\199\001\000\252\001\000\233\001\000\226\001\000\228\001\000\224\001\000\229\001\000\231\001\000\234\001\000\235\001\000\232\001\000\208\001\000\240\001\000\222\001\000\196\001\000\197\001\000\201\001\000\230\001\000\198\001\000\244\001\000\246\001\000\254\001\000\251\001\000\221\001\000\253\001\000\214\001\000\220\001\000\248\001\000\163\001\000\216\001 \167\001\001\146\001\000\225\001\000\237\001\000\243\001\000\250\001\000\193\001\000\205\001\000\211\001\000\218\001\000\191\001#\016\001\000\172\001\000\189\001\000\188\001\000\161\001\000\171\001\000\187\001%\145\001%\146\001%\147\001%\002\001%$\001%a\001%b\001%V\001%U\001%c\001%Q\001%W\001%]\001%\\\001%[\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001%^\001%_\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001%g\001%h\001%d\001%e\001%Y\001%X\001%R\001%S\001%k\001%j\001%\024\001%\012\001%\136\001%\132\001%\140\001%\144\001%\128\001\003\177\001\000\223\001\003\147\001\003\192\001\003\163\001\003\195\001\000\181\001\003\196\001\003\166\001\003\152\001\003\169\001\003\180\001\"\030\001\003\198\001\003\181\001\")\001\"a\001\000\177\001\"e\001\"d\001# \001#!\001\000\247\001\"H\001\000\176\001\"\025\001\000\183\001\"\026\001 \127\001\000\178\001%\160\001\000\160" 0 : int array);;
-let cp861_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\0071\000\000\000\000\000\000\006\229\000\000\006\229\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\144\160AA\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\218@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001#\016\001\000\169\160\160\001%\016\001\000\191@\144\160QQ\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\192@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001%\024\001\000\217@\145\160\160YY\160\160\001\"\025\001\000\249@\145\160\160ZZ\160\160\001\"\026\001\000\251@\144\160[[\145\160\160\\\\\160\160\001%\028\001\000\195@\144\160]]\145\160\160^^\160\160\001\"\030\001\000\236@\144\160__\145\160\160``\160\160\001# \001\000\244@\145\160\160aa\160\160\001#!\001\000\245@\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\145\160\160ii\160\160\001\")\001\000\239@\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001%<\001\000\197@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\145\160\160\000H\000H\160\160\001\"H\001\000\247@\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186@\145\160\160\000R\000R\160\160\001%R\001\000\213@\145\160\160\000S\000S\160\160\001%S\001\000\214@\145\160\160\000T\000T\160\160\001%T\001\000\201@\145\160\160\000U\000U\160\160\001%U\001\000\184@\145\160\160\000V\000V\160\160\001%V\001\000\183@\145\160\160\000W\000W\160\160\001%W\001\000\187@\145\160\160\000X\000X\160\160\001%X\001\000\212@\145\160\160\000Y\000Y\160\160\001%Y\001\000\211@\145\160\160\000Z\000Z\160\160\001%Z\001\000\200@\145\160\160\000[\000[\160\160\001%[\001\000\190@\145\160\160\000\\\000\\\160\160\001%\\\001\000\189@\145\160\160\000]\000]\160\160\001%]\001\000\188@\145\160\160\000^\000^\160\160\001%^\001\000\198@\145\160\160\000_\000_\160\160\001%_\001\000\199@\145\160\160\000`\000`\160\160\001%`\001\000\204@\145\160\160\000a\000a\160\160\001%a\001\000\181\160\160\001\"a\001\000\240@\145\160\160\000b\000b\160\160\001%b\001\000\182@\145\160\160\000c\000c\160\160\001%c\001\000\185@\145\160\160\000d\000d\160\160\001%d\001\000\209\160\160\001\"d\001\000\243@\145\160\160\000e\000e\160\160\001%e\001\000\210\160\160\001\"e\001\000\242@\145\160\160\000f\000f\160\160\001%f\001\000\203@\145\160\160\000g\000g\160\160\001%g\001\000\207@\145\160\160\000h\000h\160\160\001%h\001\000\208@\145\160\160\000i\000i\160\160\001%i\001\000\202@\145\160\160\000j\000j\160\160\001%j\001\000\216@\145\160\160\000k\000k\160\160\001%k\001\000\215@\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\145\160\160\000\127\000\127\160\160\001 \127\001\000\252@\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@\144\160\001%\140\001\000\221@@@\144\160\001%\144\001\000\222\144\160\001%\145\001\000\176\145\160\160\001\001\146\001\000\159\160\160\001%\146\001\000\177@\145\160\160\001%\147\001\000\178\160\160\001\003\147\001\000\226@@@@@\144\160\001\003\152\001\000\233@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@\144\160\001\000\161\001\000\173@\145\160\160\001\000\163\001\000\156\160\160\001\003\163\001\000\228@@@\144\160\001\003\166\001\000\232\144\160\001 \167\001\000\158@\144\160\001\003\169\001\000\234@\144\160\001\000\171\001\000\174\144\160\001\000\172\001\000\170@@@\144\160\001\000\176\001\000\248\145\160\160\001\003\177\001\000\224\160\160\001\000\177\001\000\241@\144\160\001\000\178\001\000\253@\144\160\001\003\180\001\000\235\145\160\160\001\000\181\001\000\230\160\160\001\003\181\001\000\238@@\144\160\001\000\183\001\000\250@@@\144\160\001\000\187\001\000\175\144\160\001\000\188\001\000\172\144\160\001\000\189\001\000\171@\144\160\001\000\191\001\000\168\144\160\001\003\192\001\000\227\144\160\001\000\193\001\000\164@\144\160\001\003\195\001\000\229\145\160\160\001\000\196\001\000\142\160\160\001\003\196\001\000\231@\144\160\001\000\197\001\000\143\145\160\160\001\000\198\001\000\146\160\160\001\003\198\001\000\237@\144\160\001\000\199\001\000\128@\144\160\001\000\201\001\000\144@@@\144\160\001\000\205\001\000\165@@\144\160\001\000\208\001\000\139@@\144\160\001\000\211\001\000\166@@\144\160\001\000\214\001\000\153@\144\160\001\000\216\001\000\157@\144\160\001\000\218\001\000\167@\144\160\001\000\220\001\000\154\144\160\001\000\221\001\000\151\144\160\001\000\222\001\000\141\144\160\001\000\223\001\000\225\144\160\001\000\224\001\000\133\144\160\001\000\225\001\000\160\144\160\001\000\226\001\000\131@\144\160\001\000\228\001\000\132\144\160\001\000\229\001\000\134\144\160\001\000\230\001\000\145\144\160\001\000\231\001\000\135\144\160\001\000\232\001\000\138\144\160\001\000\233\001\000\130\144\160\001\000\234\001\000\136\144\160\001\000\235\001\000\137@\144\160\001\000\237\001\000\161@@\144\160\001\000\240\001\000\140@@\144\160\001\000\243\001\000\162\144\160\001\000\244\001\000\147@\144\160\001\000\246\001\000\148\144\160\001\000\247\001\000\246\144\160\001\000\248\001\000\155@\144\160\001\000\250\001\000\163\144\160\001\000\251\001\000\150\144\160\001\000\252\001\000\129\144\160\001\000\253\001\000\152\144\160\001\000\254\001\000\149@" 0 : Netmappings.from_uni_list array);;
- let cp862_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\005\208\001\005\209\001\005\210\001\005\211\001\005\212\001\005\213\001\005\214\001\005\215\001\005\216\001\005\217\001\005\218\001\005\219\001\005\220\001\005\221\001\005\222\001\005\223\001\005\224\001\005\225\001\005\226\001\005\227\001\005\228\001\005\229\001\005\230\001\005\231\001\005\232\001\005\233\001\005\234\001\000\162\001\000\163\001\000\165\001 \167\001\001\146\001\000\225\001\000\237\001\000\243\001\000\250\001\000\241\001\000\209\001\000\170\001\000\186\001\000\191\001#\016\001\000\172\001\000\189\001\000\188\001\000\161\001\000\171\001\000\187\001%\145\001%\146\001%\147\001%\002\001%$\001%a\001%b\001%V\001%U\001%c\001%Q\001%W\001%]\001%\\\001%[\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001%^\001%_\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001%g\001%h\001%d\001%e\001%Y\001%X\001%R\001%S\001%k\001%j\001%\024\001%\012\001%\136\001%\132\001%\140\001%\144\001%\128\001\003\177\001\000\223\001\003\147\001\003\192\001\003\163\001\003\195\001\000\181\001\003\196\001\003\166\001\003\152\001\003\169\001\003\180\001\"\030\001\003\198\001\003\181\001\")\001\"a\001\000\177\001\"e\001\"d\001# \001#!\001\000\247\001\"H\001\000\176\001\"\025\001\000\183\001\"\026\001 \127\001\000\178\001%\160\001\000\160" 0 : int array);;
-let cp862_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\0074\000\000\000\000\000\000\006\233\000\000\006\233\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\144\160AA\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\218@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001#\016\001\000\169\160\160\001%\016\001\000\191@\144\160QQ\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\192@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001%\024\001\000\217@\145\160\160YY\160\160\001\"\025\001\000\249@\145\160\160ZZ\160\160\001\"\026\001\000\251@\144\160[[\145\160\160\\\\\160\160\001%\028\001\000\195@\144\160]]\145\160\160^^\160\160\001\"\030\001\000\236@\144\160__\145\160\160``\160\160\001# \001\000\244@\145\160\160aa\160\160\001#!\001\000\245@\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\145\160\160ii\160\160\001\")\001\000\239@\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001%<\001\000\197@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\145\160\160\000H\000H\160\160\001\"H\001\000\247@\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186@\145\160\160\000R\000R\160\160\001%R\001\000\213@\145\160\160\000S\000S\160\160\001%S\001\000\214@\145\160\160\000T\000T\160\160\001%T\001\000\201@\145\160\160\000U\000U\160\160\001%U\001\000\184@\145\160\160\000V\000V\160\160\001%V\001\000\183@\145\160\160\000W\000W\160\160\001%W\001\000\187@\145\160\160\000X\000X\160\160\001%X\001\000\212@\145\160\160\000Y\000Y\160\160\001%Y\001\000\211@\145\160\160\000Z\000Z\160\160\001%Z\001\000\200@\145\160\160\000[\000[\160\160\001%[\001\000\190@\145\160\160\000\\\000\\\160\160\001%\\\001\000\189@\145\160\160\000]\000]\160\160\001%]\001\000\188@\145\160\160\000^\000^\160\160\001%^\001\000\198@\145\160\160\000_\000_\160\160\001%_\001\000\199@\145\160\160\000`\000`\160\160\001%`\001\000\204@\145\160\160\000a\000a\160\160\001%a\001\000\181\160\160\001\"a\001\000\240@\145\160\160\000b\000b\160\160\001%b\001\000\182@\145\160\160\000c\000c\160\160\001%c\001\000\185@\145\160\160\000d\000d\160\160\001%d\001\000\209\160\160\001\"d\001\000\243@\145\160\160\000e\000e\160\160\001%e\001\000\210\160\160\001\"e\001\000\242@\145\160\160\000f\000f\160\160\001%f\001\000\203@\145\160\160\000g\000g\160\160\001%g\001\000\207@\145\160\160\000h\000h\160\160\001%h\001\000\208@\145\160\160\000i\000i\160\160\001%i\001\000\202@\145\160\160\000j\000j\160\160\001%j\001\000\216@\145\160\160\000k\000k\160\160\001%k\001\000\215@\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\145\160\160\000\127\000\127\160\160\001 \127\001\000\252@\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@\144\160\001%\140\001\000\221@@@\144\160\001%\144\001\000\222\144\160\001%\145\001\000\176\145\160\160\001\001\146\001\000\159\160\160\001%\146\001\000\177@\145\160\160\001%\147\001\000\178\160\160\001\003\147\001\000\226@@@@@\144\160\001\003\152\001\000\233@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@\144\160\001\000\161\001\000\173\144\160\001\000\162\001\000\155\145\160\160\001\000\163\001\000\156\160\160\001\003\163\001\000\228@@\144\160\001\000\165\001\000\157\144\160\001\003\166\001\000\232\144\160\001 \167\001\000\158@\144\160\001\003\169\001\000\234\144\160\001\000\170\001\000\166\144\160\001\000\171\001\000\174\144\160\001\000\172\001\000\170@@@\144\160\001\000\176\001\000\248\145\160\160\001\003\177\001\000\224\160\160\001\000\177\001\000\241@\144\160\001\000\178\001\000\253@\144\160\001\003\180\001\000\235\145\160\160\001\000\181\001\000\230\160\160\001\003\181\001\000\238@@\144\160\001\000\183\001\000\250@@\144\160\001\000\186\001\000\167\144\160\001\000\187\001\000\175\144\160\001\000\188\001\000\172\144\160\001\000\189\001\000\171@\144\160\001\000\191\001\000\168\144\160\001\003\192\001\000\227@@\144\160\001\003\195\001\000\229\144\160\001\003\196\001\000\231@\144\160\001\003\198\001\000\237@@@@@@@@@\144\160\001\005\208\001\000\128\145\160\160\001\005\209\001\000\129\160\160\001\000\209\001\000\165@\144\160\001\005\210\001\000\130\144\160\001\005\211\001\000\131\144\160\001\005\212\001\000\132\144\160\001\005\213\001\000\133\144\160\001\005\214\001\000\134\144\160\001\005\215\001\000\135\144\160\001\005\216\001\000\136\144\160\001\005\217\001\000\137\144\160\001\005\218\001\000\138\144\160\001\005\219\001\000\139\144\160\001\005\220\001\000\140\144\160\001\005\221\001\000\141\144\160\001\005\222\001\000\142\145\160\160\001\005\223\001\000\143\160\160\001\000\223\001\000\225@\144\160\001\005\224\001\000\144\145\160\160\001\005\225\001\000\145\160\160\001\000\225\001\000\160@\144\160\001\005\226\001\000\146\144\160\001\005\227\001\000\147\144\160\001\005\228\001\000\148\144\160\001\005\229\001\000\149\144\160\001\005\230\001\000\150\144\160\001\005\231\001\000\151\144\160\001\005\232\001\000\152\144\160\001\005\233\001\000\153\144\160\001\005\234\001\000\154@@\144\160\001\000\237\001\000\161@@@\144\160\001\000\241\001\000\164@\144\160\001\000\243\001\000\162@@@\144\160\001\000\247\001\000\246@@\144\160\001\000\250\001\000\163@@@@@" 0 : Netmappings.from_uni_list array);;
- let cp863_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\199\001\000\252\001\000\233\001\000\226\001\000\194\001\000\224\001\000\182\001\000\231\001\000\234\001\000\235\001\000\232\001\000\239\001\000\238\001 \023\001\000\192\001\000\167\001\000\201\001\000\200\001\000\202\001\000\244\001\000\203\001\000\207\001\000\251\001\000\249\001\000\164\001\000\212\001\000\220\001\000\162\001\000\163\001\000\217\001\000\219\001\001\146\001\000\166\001\000\180\001\000\243\001\000\250\001\000\168\001\000\184\001\000\179\001\000\175\001\000\206\001#\016\001\000\172\001\000\189\001\000\188\001\000\190\001\000\171\001\000\187\001%\145\001%\146\001%\147\001%\002\001%$\001%a\001%b\001%V\001%U\001%c\001%Q\001%W\001%]\001%\\\001%[\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001%^\001%_\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001%g\001%h\001%d\001%e\001%Y\001%X\001%R\001%S\001%k\001%j\001%\024\001%\012\001%\136\001%\132\001%\140\001%\144\001%\128\001\003\177\001\000\223\001\003\147\001\003\192\001\003\163\001\003\195\001\000\181\001\003\196\001\003\166\001\003\152\001\003\169\001\003\180\001\"\030\001\003\198\001\003\181\001\")\001\"a\001\000\177\001\"e\001\"d\001# \001#!\001\000\247\001\"H\001\000\176\001\"\025\001\000\183\001\"\026\001 \127\001\000\178\001%\160\001\000\160" 0 : int array);;
-let cp863_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\0077\000\000\000\000\000\000\006\237\000\000\006\237\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\144\160AA\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\218@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001#\016\001\000\169\160\160\001%\016\001\000\191@\144\160QQ\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\192@\144\160UU\144\160VV\145\160\160WW\160\160\001 \023\001\000\141@\145\160\160XX\160\160\001%\024\001\000\217@\145\160\160YY\160\160\001\"\025\001\000\249@\145\160\160ZZ\160\160\001\"\026\001\000\251@\144\160[[\145\160\160\\\\\160\160\001%\028\001\000\195@\144\160]]\145\160\160^^\160\160\001\"\030\001\000\236@\144\160__\145\160\160``\160\160\001# \001\000\244@\145\160\160aa\160\160\001#!\001\000\245@\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\145\160\160ii\160\160\001\")\001\000\239@\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001%<\001\000\197@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\145\160\160\000H\000H\160\160\001\"H\001\000\247@\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186@\145\160\160\000R\000R\160\160\001%R\001\000\213@\145\160\160\000S\000S\160\160\001%S\001\000\214@\145\160\160\000T\000T\160\160\001%T\001\000\201@\145\160\160\000U\000U\160\160\001%U\001\000\184@\145\160\160\000V\000V\160\160\001%V\001\000\183@\145\160\160\000W\000W\160\160\001%W\001\000\187@\145\160\160\000X\000X\160\160\001%X\001\000\212@\145\160\160\000Y\000Y\160\160\001%Y\001\000\211@\145\160\160\000Z\000Z\160\160\001%Z\001\000\200@\145\160\160\000[\000[\160\160\001%[\001\000\190@\145\160\160\000\\\000\\\160\160\001%\\\001\000\189@\145\160\160\000]\000]\160\160\001%]\001\000\188@\145\160\160\000^\000^\160\160\001%^\001\000\198@\145\160\160\000_\000_\160\160\001%_\001\000\199@\145\160\160\000`\000`\160\160\001%`\001\000\204@\145\160\160\000a\000a\160\160\001%a\001\000\181\160\160\001\"a\001\000\240@\145\160\160\000b\000b\160\160\001%b\001\000\182@\145\160\160\000c\000c\160\160\001%c\001\000\185@\145\160\160\000d\000d\160\160\001%d\001\000\209\160\160\001\"d\001\000\243@\145\160\160\000e\000e\160\160\001%e\001\000\210\160\160\001\"e\001\000\242@\145\160\160\000f\000f\160\160\001%f\001\000\203@\145\160\160\000g\000g\160\160\001%g\001\000\207@\145\160\160\000h\000h\160\160\001%h\001\000\208@\145\160\160\000i\000i\160\160\001%i\001\000\202@\145\160\160\000j\000j\160\160\001%j\001\000\216@\145\160\160\000k\000k\160\160\001%k\001\000\215@\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\145\160\160\000\127\000\127\160\160\001 \127\001\000\252@\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@\144\160\001%\140\001\000\221@@@\144\160\001%\144\001\000\222\144\160\001%\145\001\000\176\145\160\160\001\001\146\001\000\159\160\160\001%\146\001\000\177@\145\160\160\001%\147\001\000\178\160\160\001\003\147\001\000\226@@@@@\144\160\001\003\152\001\000\233@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@@\144\160\001\000\162\001\000\155\145\160\160\001\000\163\001\000\156\160\160\001\003\163\001\000\228@\144\160\001\000\164\001\000\152@\145\160\160\001\000\166\001\000\160\160\160\001\003\166\001\000\232@\144\160\001\000\167\001\000\143\144\160\001\000\168\001\000\164\144\160\001\003\169\001\000\234@\144\160\001\000\171\001\000\174\144\160\001\000\172\001\000\170@@\144\160\001\000\175\001\000\167\144\160\001\000\176\001\000\248\145\160\160\001\003\177\001\000\224\160\160\001\000\177\001\000\241@\144\160\001\000\178\001\000\253\144\160\001\000\179\001\000\166\145\160\160\001\000\180\001\000\161\160\160\001\003\180\001\000\235@\145\160\160\001\000\181\001\000\230\160\160\001\003\181\001\000\238@\144\160\001\000\182\001\000\134\144\160\001\000\183\001\000\250\144\160\001\000\184\001\000\165@@\144\160\001\000\187\001\000\175\144\160\001\000\188\001\000\172\144\160\001\000\189\001\000\171\144\160\001\000\190\001\000\173@\145\160\160\001\000\192\001\000\142\160\160\001\003\192\001\000\227@@\144\160\001\000\194\001\000\132\144\160\001\003\195\001\000\229\144\160\001\003\196\001\000\231@\144\160\001\003\198\001\000\237\144\160\001\000\199\001\000\128\144\160\001\000\200\001\000\145\144\160\001\000\201\001\000\144\144\160\001\000\202\001\000\146\144\160\001\000\203\001\000\148@@\144\160\001\000\206\001\000\168\144\160\001\000\207\001\000\149@@@@\144\160\001\000\212\001\000\153@@@@\144\160\001\000\217\001\000\157@\144\160\001\000\219\001\000\158\144\160\001\000\220\001\000\154@@\144\160\001\000\223\001\000\225\144\160\001\000\224\001\000\133@\144\160\001\000\226\001\000\131@@@@\144\160\001\000\231\001\000\135\144\160\001\000\232\001\000\138\144\160\001\000\233\001\000\130\144\160\001\000\234\001\000\136\144\160\001\000\235\001\000\137@@\144\160\001\000\238\001\000\140\144\160\001\000\239\001\000\139@@@\144\160\001\000\243\001\000\162\144\160\001\000\244\001\000\147@@\144\160\001\000\247\001\000\246@\144\160\001\000\249\001\000\151\144\160\001\000\250\001\000\163\144\160\001\000\251\001\000\150\144\160\001\000\252\001\000\129@@@" 0 : Netmappings.from_uni_list array);;
- let cp864_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002\209\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcd\001\006jfghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\176\001\000\183\001\"\025\001\"\026\001%\146\001%\000\001%\002\001%<\001%$\001%,\001%\028\001%4\001%\016\001%\012\001%\020\001%\024\001\003\178\001\"\030\001\003\198\001\000\177\001\000\189\001\000\188\001\"H\001\000\171\001\000\187\002\000\000\254\247\002\000\000\254\248\000\255\000\255\002\000\000\254\251\002\000\000\254\252\000\255\001\000\160\001\000\173\002\000\000\254\130\001\000\163\001\000\164\002\000\000\254\132\000\255\000\255\002\000\000\254\142\002\000\000\254\143\002\000\000\254\149\002\000\000\254\153\001\006\012\002\000\000\254\157\002\000\000\254\161\002\000\000\254\165\001\006`\001\006a\001\006b\001\006c\001\006d\001\006e\001\006f\001\006g\001\006h\001\006i\002\000\000\254\209\001\006\027\002\000\000\254\177\002\000\000\254\181\002\000\000\254\185\001\006\031\001\000\162\002\000\000\254\128\002\000\000\254\129\002\000\000\254\131\002\000\000\254\133\002\000\000\254\202\002\000\000\254\139\002\000\000\254\141\002\000\000\254\145\002\000\000\254\147\002\000\000\254\151\002\000\000\254\155\002\000\000\254\159\002\000\000\254\163\002\000\000\254\167\002\000\000\254\169\002\000\000\254\171\002\000\000\254\173\002\000\000\254\175\002\000\000\254\179\002\000\000\254\183\002\000\000\254\187\002\000\000\254\191\002\000\000\254\193\002\000\000\254\197\002\000\000\254\203\002\000\000\254\207\001\000\166\001\000\172\001\000\247\001\000\215\002\000\000\254\201\001\006@\002\000\000\254\211\002\000\000\254\215\002\000\000\254\219\002\000\000\254\223\002\000\000\254\227\002\000\000\254\231\002\000\000\254\235\002\000\000\254\237\002\000\000\254\239\002\000\000\254\243\002\000\000\254\189\002\000\000\254\204\002\000\000\254\206\002\000\000\254\205\002\000\000\254\225\002\000\000\254}\001\006Q\002\000\000\254\229\002\000\000\254\233\002\000\000\254\236\002\000\000\254\240\002\000\000\254\242\002\000\000\254\208\002\000\000\254\213\002\000\000\254\245\002\000\000\254\246\002\000\000\254\221\002\000\000\254\217\002\000\000\254\241\001%\160\000\255" 0 : int array);;
-let cp864_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007i\000\000\000\000\000\000\006\136\000\000\006\136\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\133@\144\160AA\145\160\160BB\160\160\001%\002\001\000\134@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\141\160\160\001\006\012\001\000\172@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001%\016\001\000\140@\144\160QQ\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\142@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001%\024\001\000\143@\145\160\160YY\160\160\001\"\025\001\000\130@\145\160\160ZZ\160\160\001\"\026\001\000\131@\145\160\160[[\160\160\001\006\027\001\000\187@\145\160\160\\\\\160\160\001%\028\001\000\138@\144\160]]\145\160\160^^\160\160\001\"\030\001\000\145@\145\160\160__\160\160\001\006\031\001\000\191@\144\160``\144\160aa\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\136@@\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\137@\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\139@\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001%<\001\000\135@\144\160}}\144\160~~\144\160\127\127\145\160\160\000@\000@\160\160\001\006@\001\000\224@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\145\160\160\000H\000H\160\160\001\"H\001\000\150@\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\145\160\160\000Q\000Q\160\160\001\006Q\001\000\241@\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001\006`\001\000\176@\145\160\160\000a\000a\160\160\001\006a\001\000\177@\145\160\160\000b\000b\160\160\001\006b\001\000\178@\145\160\160\000c\000c\160\160\001\006c\001\000\179@\145\160\160\000d\000d\160\160\001\006d\001\000\180@\145\160\160\000e\000e\160\160\001\006e\001\000\181@\145\160\160\000f\000f\160\160\001\006f\001\000\182@\145\160\160\000g\000g\160\160\001\006g\001\000\183@\145\160\160\000h\000h\160\160\001\006h\001\000\184@\145\160\160\000i\000i\160\160\001\006i\001\000\185@\145\160\160\001\006je\160\160\000j\000j@\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\145\160\160\000}\000}\160\160\002\000\000\254}\001\000\240@\144\160\000~\000~\144\160\000\127\000\127\144\160\002\000\000\254\128\001\000\193\144\160\002\000\000\254\129\001\000\194\144\160\002\000\000\254\130\001\000\162\144\160\002\000\000\254\131\001\000\195\144\160\002\000\000\254\132\001\000\165\144\160\002\000\000\254\133\001\000\196@@@@@\144\160\002\000\000\254\139\001\000\198@\144\160\002\000\000\254\141\001\000\199\144\160\002\000\000\254\142\001\000\168\144\160\002\000\000\254\143\001\000\169@\144\160\002\000\000\254\145\001\000\200\144\160\001%\146\001\000\132\144\160\002\000\000\254\147\001\000\201@\144\160\002\000\000\254\149\001\000\170@\144\160\002\000\000\254\151\001\000\202@\144\160\002\000\000\254\153\001\000\171@\144\160\002\000\000\254\155\001\000\203@\144\160\002\000\000\254\157\001\000\173@\144\160\002\000\000\254\159\001\000\204\145\160\160\001\000\160\001\000\160\160\160\001%\160\001\000\254@\144\160\002\000\000\254\161\001\000\174\144\160\001\000\162\001\000\192\145\160\160\001\000\163\001\000\163\160\160\002\000\000\254\163\001\000\205@\144\160\001\000\164\001\000\164\144\160\002\000\000\254\165\001\000\175\144\160\001\000\166\001\000\219\144\160\002\000\000\254\167\001\000\206@\144\160\002\000\000\254\169\001\000\207@\145\160\160\001\000\171\001\000\151\160\160\002\000\000\254\171\001\000\208@\144\160\001\000\172\001\000\220\145\160\160\001\000\173\001\000\161\160\160\002\000\000\254\173\001\000\209@@\144\160\002\000\000\254\175\001\000\210\144\160\001\000\176\001\000\128\145\160\160\001\000\177\001\000\147\160\160\002\000\000\254\177\001\000\188@\144\160\001\003\178\001\000\144\144\160\002\000\000\254\179\001\000\211@\144\160\002\000\000\254\181\001\000\189@\145\160\160\001\000\183\001\000\129\160\160\002\000\000\254\183\001\000\212@@\144\160\002\000\000\254\185\001\000\190@\145\160\160\001\000\187\001\000\152\160\160\002\000\000\254\187\001\000\213@\144\160\001\000\188\001\000\149\145\160\160\001\000\189\001\000\148\160\160\002\000\000\254\189\001\000\235@@\144\160\002\000\000\254\191\001\000\214@\144\160\002\000\000\254\193\001\000\215@@@\144\160\002\000\000\254\197\001\000\216\144\160\001\003\198\001\000\146@@\144\160\002\000\000\254\201\001\000\223\144\160\002\000\000\254\202\001\000\197\144\160\002\000\000\254\203\001\000\217\144\160\002\000\000\254\204\001\000\236\144\160\002\000\000\254\205\001\000\238\144\160\002\000\000\254\206\001\000\237\144\160\002\000\000\254\207\001\000\218\144\160\002\000\000\254\208\001\000\247\144\160\002\000\000\254\209\001\000\186@\144\160\002\000\000\254\211\001\000\225@\144\160\002\000\000\254\213\001\000\248@\145\160\160\001\000\215\001\000\222\160\160\002\000\000\254\215\001\000\226@@\144\160\002\000\000\254\217\001\000\252@\144\160\002\000\000\254\219\001\000\227@\144\160\002\000\000\254\221\001\000\251@\144\160\002\000\000\254\223\001\000\228@\144\160\002\000\000\254\225\001\000\239@\144\160\002\000\000\254\227\001\000\229@\144\160\002\000\000\254\229\001\000\242@\144\160\002\000\000\254\231\001\000\230@\144\160\002\000\000\254\233\001\000\243@\144\160\002\000\000\254\235\001\000\231\144\160\002\000\000\254\236\001\000\244\144\160\002\000\000\254\237\001\000\232@\144\160\002\000\000\254\239\001\000\233\144\160\002\000\000\254\240\001\000\245\144\160\002\000\000\254\241\001\000\253\144\160\002\000\000\254\242\001\000\246\144\160\002\000\000\254\243\001\000\234@\144\160\002\000\000\254\245\001\000\249\144\160\002\000\000\254\246\001\000\250\145\160\160\002\000\000\254\247\001\000\153\160\160\001\000\247\001\000\221@\144\160\002\000\000\254\248\001\000\154@@\144\160\002\000\000\254\251\001\000\157\144\160\002\000\000\254\252\001\000\158@@@" 0 : Netmappings.from_uni_list array);;
- let cp865_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\000\199\001\000\252\001\000\233\001\000\226\001\000\228\001\000\224\001\000\229\001\000\231\001\000\234\001\000\235\001\000\232\001\000\239\001\000\238\001\000\236\001\000\196\001\000\197\001\000\201\001\000\230\001\000\198\001\000\244\001\000\246\001\000\242\001\000\251\001\000\249\001\000\255\001\000\214\001\000\220\001\000\248\001\000\163\001\000\216\001 \167\001\001\146\001\000\225\001\000\237\001\000\243\001\000\250\001\000\241\001\000\209\001\000\170\001\000\186\001\000\191\001#\016\001\000\172\001\000\189\001\000\188\001\000\161\001\000\171\001\000\164\001%\145\001%\146\001%\147\001%\002\001%$\001%a\001%b\001%V\001%U\001%c\001%Q\001%W\001%]\001%\\\001%[\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001%^\001%_\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001%g\001%h\001%d\001%e\001%Y\001%X\001%R\001%S\001%k\001%j\001%\024\001%\012\001%\136\001%\132\001%\140\001%\144\001%\128\001\003\177\001\000\223\001\003\147\001\003\192\001\003\163\001\003\195\001\000\181\001\003\196\001\003\166\001\003\152\001\003\169\001\003\180\001\"\030\001\003\198\001\003\181\001\")\001\"a\001\000\177\001\"e\001\"d\001# \001#!\001\000\247\001\"H\001\000\176\001\"\025\001\000\183\001\"\026\001 \127\001\000\178\001%\160\001\000\160" 0 : int array);;
-let cp865_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\0071\000\000\000\000\000\000\006\229\000\000\006\229\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\144\160AA\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\218@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001#\016\001\000\169\160\160\001%\016\001\000\191@\144\160QQ\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\192@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001%\024\001\000\217@\145\160\160YY\160\160\001\"\025\001\000\249@\145\160\160ZZ\160\160\001\"\026\001\000\251@\144\160[[\145\160\160\\\\\160\160\001%\028\001\000\195@\144\160]]\145\160\160^^\160\160\001\"\030\001\000\236@\144\160__\145\160\160``\160\160\001# \001\000\244@\145\160\160aa\160\160\001#!\001\000\245@\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\145\160\160ii\160\160\001\")\001\000\239@\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001%<\001\000\197@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\145\160\160\000H\000H\160\160\001\"H\001\000\247@\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186@\145\160\160\000R\000R\160\160\001%R\001\000\213@\145\160\160\000S\000S\160\160\001%S\001\000\214@\145\160\160\000T\000T\160\160\001%T\001\000\201@\145\160\160\000U\000U\160\160\001%U\001\000\184@\145\160\160\000V\000V\160\160\001%V\001\000\183@\145\160\160\000W\000W\160\160\001%W\001\000\187@\145\160\160\000X\000X\160\160\001%X\001\000\212@\145\160\160\000Y\000Y\160\160\001%Y\001\000\211@\145\160\160\000Z\000Z\160\160\001%Z\001\000\200@\145\160\160\000[\000[\160\160\001%[\001\000\190@\145\160\160\000\\\000\\\160\160\001%\\\001\000\189@\145\160\160\000]\000]\160\160\001%]\001\000\188@\145\160\160\000^\000^\160\160\001%^\001\000\198@\145\160\160\000_\000_\160\160\001%_\001\000\199@\145\160\160\000`\000`\160\160\001%`\001\000\204@\145\160\160\000a\000a\160\160\001%a\001\000\181\160\160\001\"a\001\000\240@\145\160\160\000b\000b\160\160\001%b\001\000\182@\145\160\160\000c\000c\160\160\001%c\001\000\185@\145\160\160\000d\000d\160\160\001%d\001\000\209\160\160\001\"d\001\000\243@\145\160\160\000e\000e\160\160\001%e\001\000\210\160\160\001\"e\001\000\242@\145\160\160\000f\000f\160\160\001%f\001\000\203@\145\160\160\000g\000g\160\160\001%g\001\000\207@\145\160\160\000h\000h\160\160\001%h\001\000\208@\145\160\160\000i\000i\160\160\001%i\001\000\202@\145\160\160\000j\000j\160\160\001%j\001\000\216@\145\160\160\000k\000k\160\160\001%k\001\000\215@\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\145\160\160\000\127\000\127\160\160\001 \127\001\000\252@\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@\144\160\001%\140\001\000\221@@@\144\160\001%\144\001\000\222\144\160\001%\145\001\000\176\145\160\160\001\001\146\001\000\159\160\160\001%\146\001\000\177@\145\160\160\001%\147\001\000\178\160\160\001\003\147\001\000\226@@@@@\144\160\001\003\152\001\000\233@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@\144\160\001\000\161\001\000\173@\145\160\160\001\000\163\001\000\156\160\160\001\003\163\001\000\228@\144\160\001\000\164\001\000\175@\144\160\001\003\166\001\000\232\144\160\001 \167\001\000\158@\144\160\001\003\169\001\000\234\144\160\001\000\170\001\000\166\144\160\001\000\171\001\000\174\144\160\001\000\172\001\000\170@@@\144\160\001\000\176\001\000\248\145\160\160\001\003\177\001\000\224\160\160\001\000\177\001\000\241@\144\160\001\000\178\001\000\253@\144\160\001\003\180\001\000\235\145\160\160\001\000\181\001\000\230\160\160\001\003\181\001\000\238@@\144\160\001\000\183\001\000\250@@\144\160\001\000\186\001\000\167@\144\160\001\000\188\001\000\172\144\160\001\000\189\001\000\171@\144\160\001\000\191\001\000\168\144\160\001\003\192\001\000\227@@\144\160\001\003\195\001\000\229\145\160\160\001\000\196\001\000\142\160\160\001\003\196\001\000\231@\144\160\001\000\197\001\000\143\145\160\160\001\000\198\001\000\146\160\160\001\003\198\001\000\237@\144\160\001\000\199\001\000\128@\144\160\001\000\201\001\000\144@@@@@@@\144\160\001\000\209\001\000\165@@@@\144\160\001\000\214\001\000\153@\144\160\001\000\216\001\000\157@@@\144\160\001\000\220\001\000\154@@\144\160\001\000\223\001\000\225\144\160\001\000\224\001\000\133\144\160\001\000\225\001\000\160\144\160\001\000\226\001\000\131@\144\160\001\000\228\001\000\132\144\160\001\000\229\001\000\134\144\160\001\000\230\001\000\145\144\160\001\000\231\001\000\135\144\160\001\000\232\001\000\138\144\160\001\000\233\001\000\130\144\160\001\000\234\001\000\136\144\160\001\000\235\001\000\137\144\160\001\000\236\001\000\141\144\160\001\000\237\001\000\161\144\160\001\000\238\001\000\140\144\160\001\000\239\001\000\139@\144\160\001\000\241\001\000\164\144\160\001\000\242\001\000\149\144\160\001\000\243\001\000\162\144\160\001\000\244\001\000\147@\144\160\001\000\246\001\000\148\144\160\001\000\247\001\000\246\144\160\001\000\248\001\000\155\144\160\001\000\249\001\000\151\144\160\001\000\250\001\000\163\144\160\001\000\251\001\000\150\144\160\001\000\252\001\000\129@@\144\160\001\000\255\001\000\152" 0 : Netmappings.from_uni_list array);;
- let cp866_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\004\016\001\004\017\001\004\018\001\004\019\001\004\020\001\004\021\001\004\022\001\004\023\001\004\024\001\004\025\001\004\026\001\004\027\001\004\028\001\004\029\001\004\030\001\004\031\001\004 \001\004!\001\004\"\001\004#\001\004$\001\004%\001\004&\001\004'\001\004(\001\004)\001\004*\001\004+\001\004,\001\004-\001\004.\001\004/\001\0040\001\0041\001\0042\001\0043\001\0044\001\0045\001\0046\001\0047\001\0048\001\0049\001\004:\001\004;\001\004<\001\004=\001\004>\001\004?\001%\145\001%\146\001%\147\001%\002\001%$\001%a\001%b\001%V\001%U\001%c\001%Q\001%W\001%]\001%\\\001%[\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001%^\001%_\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001%g\001%h\001%d\001%e\001%Y\001%X\001%R\001%S\001%k\001%j\001%\024\001%\012\001%\136\001%\132\001%\140\001%\144\001%\128\001\004@\001\004A\001\004B\001\004C\001\004D\001\004E\001\004F\001\004G\001\004H\001\004I\001\004J\001\004K\001\004L\001\004M\001\004N\001\004O\001\004\001\001\004Q\001\004\004\001\004T\001\004\007\001\004W\001\004\014\001\004^\001\000\176\001\"\025\001\000\183\001\"\026\001!\022\001\000\164\001%\160\001\000\160" 0 : int array);;
-let cp866_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007\195\000\000\000\000\000\000\007\164\000\000\007\164\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\145\160\160AA\160\160\001\004\001\001\000\240@\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\145\160\160DD\160\160\001\004\004\001\000\242@\144\160EE\144\160FF\145\160\160GG\160\160\001\004\007\001\000\244@\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\218@\144\160MM\145\160\160NN\160\160\001\004\014\001\000\246@\144\160OO\145\160\160PP\160\160\001\004\016\001\000\128\160\160\001%\016\001\000\191@\145\160\160QQ\160\160\001\004\017\001\000\129@\145\160\160RR\160\160\001\004\018\001\000\130@\145\160\160SS\160\160\001\004\019\001\000\131@\145\160\160TT\160\160\001\004\020\001\000\132\160\160\001%\020\001\000\192@\145\160\160UU\160\160\001\004\021\001\000\133@\145\160\160VV\160\160\001\004\022\001\000\134\160\160\001!\022\001\000\252@\145\160\160WW\160\160\001\004\023\001\000\135@\145\160\160XX\160\160\001\004\024\001\000\136\160\160\001%\024\001\000\217@\145\160\160YY\160\160\001\004\025\001\000\137\160\160\001\"\025\001\000\249@\145\160\160ZZ\160\160\001\004\026\001\000\138\160\160\001\"\026\001\000\251@\145\160\160[[\160\160\001\004\027\001\000\139@\145\160\160\\\\\160\160\001\004\028\001\000\140\160\160\001%\028\001\000\195@\145\160\160]]\160\160\001\004\029\001\000\141@\145\160\160^^\160\160\001\004\030\001\000\142@\145\160\160__\160\160\001\004\031\001\000\143@\145\160\160``\160\160\001\004 \001\000\144@\145\160\160aa\160\160\001\004!\001\000\145@\145\160\160bb\160\160\001\004\"\001\000\146@\145\160\160cc\160\160\001\004#\001\000\147@\145\160\160dd\160\160\001\004$\001\000\148\160\160\001%$\001\000\180@\145\160\160ee\160\160\001\004%\001\000\149@\145\160\160ff\160\160\001\004&\001\000\150@\145\160\160gg\160\160\001\004'\001\000\151@\145\160\160hh\160\160\001\004(\001\000\152@\145\160\160ii\160\160\001\004)\001\000\153@\145\160\160jj\160\160\001\004*\001\000\154@\145\160\160kk\160\160\001\004+\001\000\155@\145\160\160ll\160\160\001\004,\001\000\156\160\160\001%,\001\000\194@\145\160\160mm\160\160\001\004-\001\000\157@\145\160\160nn\160\160\001\004.\001\000\158@\145\160\160oo\160\160\001\004/\001\000\159@\145\160\160pp\160\160\001\0040\001\000\160@\145\160\160qq\160\160\001\0041\001\000\161@\145\160\160rr\160\160\001\0042\001\000\162@\145\160\160ss\160\160\001\0043\001\000\163@\145\160\160tt\160\160\001\0044\001\000\164\160\160\001%4\001\000\193@\145\160\160uu\160\160\001\0045\001\000\165@\145\160\160vv\160\160\001\0046\001\000\166@\145\160\160ww\160\160\001\0047\001\000\167@\145\160\160xx\160\160\001\0048\001\000\168@\145\160\160yy\160\160\001\0049\001\000\169@\145\160\160zz\160\160\001\004:\001\000\170@\145\160\160{{\160\160\001\004;\001\000\171@\145\160\160||\160\160\001\004<\001\000\172\160\160\001%<\001\000\197@\145\160\160}}\160\160\001\004=\001\000\173@\145\160\160~~\160\160\001\004>\001\000\174@\145\160\160\127\127\160\160\001\004?\001\000\175@\145\160\160\000@\000@\160\160\001\004@\001\000\224@\145\160\160\000A\000A\160\160\001\004A\001\000\225@\145\160\160\000B\000B\160\160\001\004B\001\000\226@\145\160\160\000C\000C\160\160\001\004C\001\000\227@\145\160\160\000D\000D\160\160\001\004D\001\000\228@\145\160\160\000E\000E\160\160\001\004E\001\000\229@\145\160\160\000F\000F\160\160\001\004F\001\000\230@\145\160\160\000G\000G\160\160\001\004G\001\000\231@\145\160\160\000H\000H\160\160\001\004H\001\000\232@\145\160\160\000I\000I\160\160\001\004I\001\000\233@\145\160\160\000J\000J\160\160\001\004J\001\000\234@\145\160\160\000K\000K\160\160\001\004K\001\000\235@\145\160\160\000L\000L\160\160\001\004L\001\000\236@\145\160\160\000M\000M\160\160\001\004M\001\000\237@\145\160\160\000N\000N\160\160\001\004N\001\000\238@\145\160\160\000O\000O\160\160\001\004O\001\000\239@\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186\160\160\001\004Q\001\000\241@\145\160\160\000R\000R\160\160\001%R\001\000\213@\145\160\160\000S\000S\160\160\001%S\001\000\214@\145\160\160\000T\000T\160\160\001%T\001\000\201\160\160\001\004T\001\000\243@\145\160\160\000U\000U\160\160\001%U\001\000\184@\145\160\160\000V\000V\160\160\001%V\001\000\183@\145\160\160\000W\000W\160\160\001%W\001\000\187\160\160\001\004W\001\000\245@\145\160\160\000X\000X\160\160\001%X\001\000\212@\145\160\160\000Y\000Y\160\160\001%Y\001\000\211@\145\160\160\000Z\000Z\160\160\001%Z\001\000\200@\145\160\160\000[\000[\160\160\001%[\001\000\190@\145\160\160\000\\\000\\\160\160\001%\\\001\000\189@\145\160\160\000]\000]\160\160\001%]\001\000\188@\145\160\160\000^\000^\160\160\001%^\001\000\198\160\160\001\004^\001\000\247@\145\160\160\000_\000_\160\160\001%_\001\000\199@\145\160\160\000`\000`\160\160\001%`\001\000\204@\145\160\160\000a\000a\160\160\001%a\001\000\181@\145\160\160\000b\000b\160\160\001%b\001\000\182@\145\160\160\000c\000c\160\160\001%c\001\000\185@\145\160\160\000d\000d\160\160\001%d\001\000\209@\145\160\160\000e\000e\160\160\001%e\001\000\210@\145\160\160\000f\000f\160\160\001%f\001\000\203@\145\160\160\000g\000g\160\160\001%g\001\000\207@\145\160\160\000h\000h\160\160\001%h\001\000\208@\145\160\160\000i\000i\160\160\001%i\001\000\202@\145\160\160\000j\000j\160\160\001%j\001\000\216@\145\160\160\000k\000k\160\160\001%k\001\000\215@\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001%\128\001\000\223@@@\144\160\001%\132\001\000\220@@@\144\160\001%\136\001\000\219@@@\144\160\001%\140\001\000\221@@@\144\160\001%\144\001\000\222\144\160\001%\145\001\000\176\144\160\001%\146\001\000\177\144\160\001%\147\001\000\178@@@@@@@@@@@@\145\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@@@@\144\160\001\000\164\001\000\253@@@@@@@@@@@\144\160\001\000\176\001\000\248@@@@@@\144\160\001\000\183\001\000\250@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let cp869_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002<\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\000\255\000\255\000\255\000\255\000\255\000\255\001\003\134\000\255\001\000\183\001\000\172\001\000\166\001 \024\001 \025\001\003\136\001 \021\001\003\137\001\003\138\001\003\170\001\003\140\000\255\000\255\001\003\142\001\003\171\001\000\169\001\003\143\001\000\178\001\000\179\001\003\172\001\000\163\001\003\173\001\003\174\001\003\175\001\003\202\001\003\144\001\003\204\001\003\205\001\003\145\001\003\146\001\003\147\001\003\148\001\003\149\001\003\150\001\003\151\001\000\189\001\003\152\001\003\153\001\000\171\001\000\187\001%\145\001%\146\001%\147\001%\002\001%$\001\003\154\001\003\155\001\003\156\001\003\157\001%c\001%Q\001%W\001%]\001\003\158\001\003\159\001%\016\001%\020\001%4\001%,\001%\028\001%\000\001%<\001\003\160\001\003\161\001%Z\001%T\001%i\001%f\001%`\001%P\001%l\001\003\163\001\003\164\001\003\165\001\003\166\001\003\167\001\003\168\001\003\169\001\003\177\001\003\178\001\003\179\001%\024\001%\012\001%\136\001%\132\001\003\180\001\003\181\001%\128\001\003\182\001\003\183\001\003\184\001\003\185\001\003\186\001\003\187\001\003\188\001\003\189\001\003\190\001\003\191\001\003\192\001\003\193\001\003\195\001\003\194\001\003\196\001\003\132\001\000\173\001\000\177\001\003\197\001\003\198\001\003\199\001\000\167\001\003\200\001\003\133\001\000\176\001\000\168\001\003\201\001\003\203\001\003\176\001\003\206\001%\160\001\000\160" 0 : int array);;
-let cp869_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\207\000\000\000\000\000\000\006\138\000\000\006\138\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\196@\144\160AA\145\160\160BB\160\160\001%\002\001\000\179@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\218@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001%\016\001\000\191@\144\160QQ\144\160RR\144\160SS\145\160\160TT\160\160\001%\020\001\000\192@\145\160\160UU\160\160\001 \021\001\000\142@\144\160VV\144\160WW\145\160\160XX\160\160\001 \024\001\000\139\160\160\001%\024\001\000\217@\145\160\160YY\160\160\001 \025\001\000\140@\144\160ZZ\144\160[[\145\160\160\\\\\160\160\001%\028\001\000\195@\144\160]]\144\160^^\144\160__\144\160``\144\160aa\144\160bb\144\160cc\145\160\160dd\160\160\001%$\001\000\180@\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\145\160\160ll\160\160\001%,\001\000\194@\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\145\160\160tt\160\160\001%4\001\000\193@\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001%<\001\000\197@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001%P\001\000\205@\145\160\160\000Q\000Q\160\160\001%Q\001\000\186@\144\160\000R\000R\144\160\000S\000S\145\160\160\000T\000T\160\160\001%T\001\000\201@\144\160\000U\000U\144\160\000V\000V\145\160\160\000W\000W\160\160\001%W\001\000\187@\144\160\000X\000X\144\160\000Y\000Y\145\160\160\000Z\000Z\160\160\001%Z\001\000\200@\144\160\000[\000[\144\160\000\\\000\\\145\160\160\000]\000]\160\160\001%]\001\000\188@\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001%`\001\000\204@\144\160\000a\000a\144\160\000b\000b\145\160\160\000c\000c\160\160\001%c\001\000\185@\144\160\000d\000d\144\160\000e\000e\145\160\160\000f\000f\160\160\001%f\001\000\203@\144\160\000g\000g\144\160\000h\000h\145\160\160\000i\000i\160\160\001%i\001\000\202@\144\160\000j\000j\144\160\000k\000k\145\160\160\000l\000l\160\160\001%l\001\000\206@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001%\128\001\000\223@@@\145\160\160\001%\132\001\000\220\160\160\001\003\132\001\000\239@\144\160\001\003\133\001\000\247\144\160\001\003\134\001\000\134@\145\160\160\001\003\136\001\000\141\160\160\001%\136\001\000\219@\144\160\001\003\137\001\000\143\144\160\001\003\138\001\000\144@\144\160\001\003\140\001\000\146@\144\160\001\003\142\001\000\149\144\160\001\003\143\001\000\152\144\160\001\003\144\001\000\161\145\160\160\001\003\145\001\000\164\160\160\001%\145\001\000\176@\145\160\160\001\003\146\001\000\165\160\160\001%\146\001\000\177@\145\160\160\001\003\147\001\000\166\160\160\001%\147\001\000\178@\144\160\001\003\148\001\000\167\144\160\001\003\149\001\000\168\144\160\001\003\150\001\000\169\144\160\001\003\151\001\000\170\144\160\001\003\152\001\000\172\144\160\001\003\153\001\000\173\144\160\001\003\154\001\000\181\144\160\001\003\155\001\000\182\144\160\001\003\156\001\000\183\144\160\001\003\157\001\000\184\144\160\001\003\158\001\000\189\144\160\001\003\159\001\000\190\145\160\160\001\003\160\001\000\198\160\160\001%\160\001\000\254\160\160\001\000\160\001\000\255@\144\160\001\003\161\001\000\199@\145\160\160\001\000\163\001\000\156\160\160\001\003\163\001\000\207@\144\160\001\003\164\001\000\208\144\160\001\003\165\001\000\209\145\160\160\001\000\166\001\000\138\160\160\001\003\166\001\000\210@\145\160\160\001\003\167\001\000\211\160\160\001\000\167\001\000\245@\145\160\160\001\003\168\001\000\212\160\160\001\000\168\001\000\249@\145\160\160\001\000\169\001\000\151\160\160\001\003\169\001\000\213@\144\160\001\003\170\001\000\145\145\160\160\001\003\171\001\000\150\160\160\001\000\171\001\000\174@\145\160\160\001\000\172\001\000\137\160\160\001\003\172\001\000\155@\145\160\160\001\003\173\001\000\157\160\160\001\000\173\001\000\240@\144\160\001\003\174\001\000\158\144\160\001\003\175\001\000\159\145\160\160\001\000\176\001\000\248\160\160\001\003\176\001\000\252@\145\160\160\001\003\177\001\000\214\160\160\001\000\177\001\000\241@\145\160\160\001\000\178\001\000\153\160\160\001\003\178\001\000\215@\145\160\160\001\000\179\001\000\154\160\160\001\003\179\001\000\216@\144\160\001\003\180\001\000\221\144\160\001\003\181\001\000\222\144\160\001\003\182\001\000\224\145\160\160\001\000\183\001\000\136\160\160\001\003\183\001\000\225@\144\160\001\003\184\001\000\226\144\160\001\003\185\001\000\227\144\160\001\003\186\001\000\228\145\160\160\001\000\187\001\000\175\160\160\001\003\187\001\000\229@\144\160\001\003\188\001\000\230\145\160\160\001\000\189\001\000\171\160\160\001\003\189\001\000\231@\144\160\001\003\190\001\000\232\144\160\001\003\191\001\000\233\144\160\001\003\192\001\000\234\144\160\001\003\193\001\000\235\144\160\001\003\194\001\000\237\144\160\001\003\195\001\000\236\144\160\001\003\196\001\000\238\144\160\001\003\197\001\000\242\144\160\001\003\198\001\000\243\144\160\001\003\199\001\000\244\144\160\001\003\200\001\000\246\144\160\001\003\201\001\000\250\144\160\001\003\202\001\000\160\144\160\001\003\203\001\000\251\144\160\001\003\204\001\000\162\144\160\001\003\205\001\000\163\144\160\001\003\206\001\000\253@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let cp874_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002&\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001 \172\000\255\000\255\000\255\000\255\001 &\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001 \024\001 \025\001 \028\001 \029\001 \"\001 \019\001 \020\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001\000\160\001\014\001\001\014\002\001\014\003\001\014\004\001\014\005\001\014\006\001\014\007\001\014\008\001\014\t\001\014\n\001\014\011\001\014\012\001\014\013\001\014\014\001\014\015\001\014\016\001\014\017\001\014\018\001\014\019\001\014\020\001\014\021\001\014\022\001\014\023\001\014\024\001\014\025\001\014\026\001\014\027\001\014\028\001\014\029\001\014\030\001\014\031\001\014 \001\014!\001\014\"\001\014#\001\014$\001\014%\001\014&\001\014'\001\014(\001\014)\001\014*\001\014+\001\014,\001\014-\001\014.\001\014/\001\0140\001\0141\001\0142\001\0143\001\0144\001\0145\001\0146\001\0147\001\0148\001\0149\001\014:\000\255\000\255\000\255\000\255\001\014?\001\014@\001\014A\001\014B\001\014C\001\014D\001\014E\001\014F\001\014G\001\014H\001\014I\001\014J\001\014K\001\014L\001\014M\001\014N\001\014O\001\014P\001\014Q\001\014R\001\014S\001\014T\001\014U\001\014V\001\014W\001\014X\001\014Y\001\014Z\001\014[\000\255\000\255\000\255\000\255" 0 : int array);;
-let cp874_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\185\000\000\000\000\000\000\006\202\000\000\006\202\008\000\004\000\000\144\160@@\145\160\160AA\160\160\001\014\001\001\000\161@\145\160\160BB\160\160\001\014\002\001\000\162@\145\160\160CC\160\160\001\014\003\001\000\163@\145\160\160DD\160\160\001\014\004\001\000\164@\145\160\160EE\160\160\001\014\005\001\000\165@\145\160\160FF\160\160\001\014\006\001\000\166@\145\160\160GG\160\160\001\014\007\001\000\167@\145\160\160HH\160\160\001\014\008\001\000\168@\145\160\160II\160\160\001\014\t\001\000\169@\145\160\160JJ\160\160\001\014\n\001\000\170@\145\160\160KK\160\160\001\014\011\001\000\171@\145\160\160LL\160\160\001\014\012\001\000\172@\145\160\160MM\160\160\001\014\013\001\000\173@\145\160\160NN\160\160\001\014\014\001\000\174@\145\160\160OO\160\160\001\014\015\001\000\175@\145\160\160PP\160\160\001\014\016\001\000\176@\145\160\160QQ\160\160\001\014\017\001\000\177@\145\160\160RR\160\160\001\014\018\001\000\178@\145\160\160SS\160\160\001 \019\001\000\150\160\160\001\014\019\001\000\179@\145\160\160TT\160\160\001 \020\001\000\151\160\160\001\014\020\001\000\180@\145\160\160UU\160\160\001\014\021\001\000\181@\145\160\160VV\160\160\001\014\022\001\000\182@\145\160\160WW\160\160\001\014\023\001\000\183@\145\160\160XX\160\160\001 \024\001\000\145\160\160\001\014\024\001\000\184@\145\160\160YY\160\160\001 \025\001\000\146\160\160\001\014\025\001\000\185@\145\160\160ZZ\160\160\001\014\026\001\000\186@\145\160\160[[\160\160\001\014\027\001\000\187@\145\160\160\\\\\160\160\001 \028\001\000\147\160\160\001\014\028\001\000\188@\145\160\160]]\160\160\001 \029\001\000\148\160\160\001\014\029\001\000\189@\145\160\160^^\160\160\001\014\030\001\000\190@\145\160\160__\160\160\001\014\031\001\000\191@\145\160\160``\160\160\001\014 \001\000\192@\145\160\160aa\160\160\001\014!\001\000\193@\145\160\160bb\160\160\001 \"\001\000\149\160\160\001\014\"\001\000\194@\145\160\160cc\160\160\001\014#\001\000\195@\145\160\160dd\160\160\001\014$\001\000\196@\145\160\160ee\160\160\001\014%\001\000\197@\145\160\160ff\160\160\001 &\001\000\133\160\160\001\014&\001\000\198@\145\160\160gg\160\160\001\014'\001\000\199@\145\160\160hh\160\160\001\014(\001\000\200@\145\160\160ii\160\160\001\014)\001\000\201@\145\160\160jj\160\160\001\014*\001\000\202@\145\160\160kk\160\160\001\014+\001\000\203@\145\160\160ll\160\160\001\014,\001\000\204@\145\160\160mm\160\160\001\014-\001\000\205@\145\160\160nn\160\160\001\014.\001\000\206@\145\160\160oo\160\160\001\014/\001\000\207@\145\160\160pp\160\160\001\0140\001\000\208@\145\160\160qq\160\160\001\0141\001\000\209@\145\160\160rr\160\160\001\0142\001\000\210@\145\160\160ss\160\160\001\0143\001\000\211@\145\160\160tt\160\160\001\0144\001\000\212@\145\160\160uu\160\160\001\0145\001\000\213@\145\160\160vv\160\160\001\0146\001\000\214@\145\160\160ww\160\160\001\0147\001\000\215@\145\160\160xx\160\160\001\0148\001\000\216@\145\160\160yy\160\160\001\0149\001\000\217@\145\160\160zz\160\160\001\014:\001\000\218@\144\160{{\144\160||\144\160}}\144\160~~\145\160\160\127\127\160\160\001\014?\001\000\223@\145\160\160\000@\000@\160\160\001\014@\001\000\224@\145\160\160\000A\000A\160\160\001\014A\001\000\225@\145\160\160\000B\000B\160\160\001\014B\001\000\226@\145\160\160\000C\000C\160\160\001\014C\001\000\227@\145\160\160\000D\000D\160\160\001\014D\001\000\228@\145\160\160\000E\000E\160\160\001\014E\001\000\229@\145\160\160\000F\000F\160\160\001\014F\001\000\230@\145\160\160\000G\000G\160\160\001\014G\001\000\231@\145\160\160\000H\000H\160\160\001\014H\001\000\232@\145\160\160\000I\000I\160\160\001\014I\001\000\233@\145\160\160\000J\000J\160\160\001\014J\001\000\234@\145\160\160\000K\000K\160\160\001\014K\001\000\235@\145\160\160\000L\000L\160\160\001\014L\001\000\236@\145\160\160\000M\000M\160\160\001\014M\001\000\237@\145\160\160\000N\000N\160\160\001\014N\001\000\238@\145\160\160\000O\000O\160\160\001\014O\001\000\239@\145\160\160\000P\000P\160\160\001\014P\001\000\240@\145\160\160\000Q\000Q\160\160\001\014Q\001\000\241@\145\160\160\000R\000R\160\160\001\014R\001\000\242@\145\160\160\000S\000S\160\160\001\014S\001\000\243@\145\160\160\000T\000T\160\160\001\014T\001\000\244@\145\160\160\000U\000U\160\160\001\014U\001\000\245@\145\160\160\000V\000V\160\160\001\014V\001\000\246@\145\160\160\000W\000W\160\160\001\014W\001\000\247@\145\160\160\000X\000X\160\160\001\014X\001\000\248@\145\160\160\000Y\000Y\160\160\001\014Y\001\000\249@\145\160\160\000Z\000Z\160\160\001\014Z\001\000\250@\145\160\160\000[\000[\160\160\001\014[\001\000\251@\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\144\160\001\000\160\001\000\160@@@@@@@@@@@\144\160\001 \172\001\000\128@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let cp875_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002@\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABC\001\000\156I\001\000\134\000\127\001\000\151\001\000\141\001\000\142KLMNOPQRS\001\000\157\001\000\133H\001\000\135XY\001\000\146\001\000\143\\]^_\001\000\128\001\000\129\001\000\130\001\000\131\001\000\132JW[\001\000\136\001\000\137\001\000\138\001\000\139\001\000\140EFG\001\000\144\001\000\145V\001\000\147\001\000\148\001\000\149\001\000\150D\001\000\152\001\000\153\001\000\154\001\000\155TU\001\000\158\000\255`\001\003\145\001\003\146\001\003\147\001\003\148\001\003\149\001\003\150\001\003\151\001\003\152\001\003\153\000[n|hkaf\001\003\154\001\003\155\001\003\156\001\003\157\001\003\158\001\003\159\001\003\160\001\003\161\001\003\163\000]dji{\000^mo\001\003\164\001\003\165\001\003\166\001\003\167\001\003\168\001\003\169\001\003\170\001\003\171\000|le\000_~\127\001\000\168\001\003\134\001\003\136\001\003\137\001\000\160\001\003\138\001\003\140\001\003\142\001\003\143\000`zc\000@g}b\001\003\133\000a\000b\000c\000d\000e\000f\000g\000h\000i\001\003\177\001\003\178\001\003\179\001\003\180\001\003\181\001\003\182\001\000\176\000j\000k\000l\000m\000n\000o\000p\000q\000r\001\003\183\001\003\184\001\003\185\001\003\186\001\003\187\001\003\188\001\000\180\000~\000s\000t\000u\000v\000w\000x\000y\000z\001\003\189\001\003\190\001\003\191\001\003\192\001\003\193\001\003\195\001\000\163\001\003\172\001\003\173\001\003\174\001\003\202\001\003\175\001\003\204\001\003\205\001\003\203\001\003\206\001\003\194\001\003\196\001\003\197\001\003\198\001\003\199\001\003\200\000{\000A\000B\000C\000D\000E\000F\000G\000H\000I\001\000\173\001\003\201\001\003\144\001\003\176\001 \024\001 \021\000}\000J\000K\000L\000M\000N\000O\000P\000Q\000R\001\000\177\001\000\189\000\255\001\003\135\001 \025\001\000\166\000\\\000\255\000S\000T\000U\000V\000W\000X\000Y\000Z\001\000\178\001\000\167\000\255\000\255\001\000\171\001\000\172pqrstuvwxy\001\000\179\001\000\169\000\255\000\255\001\000\187\001\000\159" 0 : int array);;
-let cp875_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\220\000\000\000\000\000\000\006\142\000\000\006\142\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160Dw\144\160Em\144\160Fn\144\160Go\144\160HV\144\160IE\144\160Je\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\144\160SS\144\160T|\145\160\160U}\160\160\001 \021\001\000\207@\144\160Vr\144\160Wf\145\160\160XX\160\160\001 \024\001\000\206@\145\160\160YY\160\160\001 \025\001\000\222@@\144\160[g\144\160\\\\\144\160]]\144\160^^\144\160__\144\160`\000@\144\160a\000O\144\160b\000\127\144\160c\000{\144\160d\000[\144\160e\000l\144\160f\000P\144\160g\000}\144\160h\000M\144\160i\000]\144\160j\000\\\144\160k\000N\144\160l\000k\144\160m\000`\144\160n\000K\144\160o\000a\144\160p\001\000\240\144\160q\001\000\241\144\160r\001\000\242\144\160s\001\000\243\144\160t\001\000\244\144\160u\001\000\245\144\160v\001\000\246\144\160w\001\000\247\144\160x\001\000\248\144\160y\001\000\249\144\160z\000z\144\160{\000^\144\160|\000L\144\160}\000~\144\160~\000n\144\160\127\000o\144\160\000@\000|\144\160\000A\001\000\193\144\160\000B\001\000\194\144\160\000C\001\000\195\144\160\000D\001\000\196\144\160\000E\001\000\197\144\160\000F\001\000\198\144\160\000G\001\000\199\144\160\000H\001\000\200\144\160\000I\001\000\201\144\160\000J\001\000\209\144\160\000K\001\000\210\144\160\000L\001\000\211\144\160\000M\001\000\212\144\160\000N\001\000\213\144\160\000O\001\000\214\144\160\000P\001\000\215\144\160\000Q\001\000\216\144\160\000R\001\000\217\144\160\000S\001\000\226\144\160\000T\001\000\227\144\160\000U\001\000\228\144\160\000V\001\000\229\144\160\000W\001\000\230\144\160\000X\001\000\231\144\160\000Y\001\000\232\144\160\000Z\001\000\233\144\160\000[\000J\144\160\000\\\001\000\224\144\160\000]\000Z\144\160\000^\000_\144\160\000_\000m\144\160\000`\000y\144\160\000a\001\000\129\144\160\000b\001\000\130\144\160\000c\001\000\131\144\160\000d\001\000\132\144\160\000e\001\000\133\144\160\000f\001\000\134\144\160\000g\001\000\135\144\160\000h\001\000\136\144\160\000i\001\000\137\144\160\000j\001\000\145\144\160\000k\001\000\146\144\160\000l\001\000\147\144\160\000m\001\000\148\144\160\000n\001\000\149\144\160\000o\001\000\150\144\160\000p\001\000\151\144\160\000q\001\000\152\144\160\000r\001\000\153\144\160\000s\001\000\162\144\160\000t\001\000\163\144\160\000u\001\000\164\144\160\000v\001\000\165\144\160\000w\001\000\166\144\160\000x\001\000\167\144\160\000y\001\000\168\144\160\000z\001\000\169\144\160\000{\001\000\192\144\160\000|\000j\144\160\000}\001\000\208\144\160\000~\001\000\161\144\160\000\127G\144\160\001\000\128`\144\160\001\000\129a\144\160\001\000\130b\144\160\001\000\131c\144\160\001\000\132d\145\160\160\001\000\133U\160\160\001\003\133\001\000\128@\145\160\160\001\000\134F\160\160\001\003\134\000q@\145\160\160\001\000\135W\160\160\001\003\135\001\000\221@\145\160\160\001\000\136h\160\160\001\003\136\000r@\145\160\160\001\000\137i\160\160\001\003\137\000s@\145\160\160\001\000\138j\160\160\001\003\138\000u@\144\160\001\000\139k\145\160\160\001\000\140l\160\160\001\003\140\000v@\144\160\001\000\141I\145\160\160\001\000\142J\160\160\001\003\142\000w@\145\160\160\001\000\143[\160\160\001\003\143\000x@\145\160\160\001\000\144p\160\160\001\003\144\001\000\204@\145\160\160\001\000\145q\160\160\001\003\145\000A@\145\160\160\001\000\146Z\160\160\001\003\146\000B@\145\160\160\001\000\147s\160\160\001\003\147\000C@\145\160\160\001\000\148t\160\160\001\003\148\000D@\145\160\160\001\000\149u\160\160\001\003\149\000E@\145\160\160\001\000\150v\160\160\001\003\150\000F@\145\160\160\001\000\151H\160\160\001\003\151\000G@\145\160\160\001\000\152x\160\160\001\003\152\000H@\145\160\160\001\000\153y\160\160\001\003\153\000I@\145\160\160\001\000\154z\160\160\001\003\154\000Q@\145\160\160\001\000\155{\160\160\001\003\155\000R@\145\160\160\001\000\156D\160\160\001\003\156\000S@\145\160\160\001\000\157T\160\160\001\003\157\000T@\145\160\160\001\000\158~\160\160\001\003\158\000U@\145\160\160\001\003\159\000V\160\160\001\000\159\001\000\255@\145\160\160\001\003\160\000W\160\160\001\000\160\000t@\144\160\001\003\161\000X@\145\160\160\001\003\163\000Y\160\160\001\000\163\001\000\176@\144\160\001\003\164\000b\144\160\001\003\165\000c\145\160\160\001\003\166\000d\160\160\001\000\166\001\000\223@\145\160\160\001\003\167\000e\160\160\001\000\167\001\000\235@\145\160\160\001\003\168\000f\160\160\001\000\168\000p@\145\160\160\001\003\169\000g\160\160\001\000\169\001\000\251@\144\160\001\003\170\000h\145\160\160\001\003\171\000i\160\160\001\000\171\001\000\238@\145\160\160\001\003\172\001\000\177\160\160\001\000\172\001\000\239@\145\160\160\001\003\173\001\000\178\160\160\001\000\173\001\000\202@\144\160\001\003\174\001\000\179\144\160\001\003\175\001\000\181\145\160\160\001\000\176\001\000\144\160\160\001\003\176\001\000\205@\145\160\160\001\003\177\001\000\138\160\160\001\000\177\001\000\218@\145\160\160\001\003\178\001\000\139\160\160\001\000\178\001\000\234@\145\160\160\001\003\179\001\000\140\160\160\001\000\179\001\000\250@\145\160\160\001\003\180\001\000\141\160\160\001\000\180\001\000\160@\144\160\001\003\181\001\000\142\144\160\001\003\182\001\000\143\144\160\001\003\183\001\000\154\144\160\001\003\184\001\000\155\144\160\001\003\185\001\000\156\144\160\001\003\186\001\000\157\145\160\160\001\003\187\001\000\158\160\160\001\000\187\001\000\254@\144\160\001\003\188\001\000\159\145\160\160\001\003\189\001\000\170\160\160\001\000\189\001\000\219@\144\160\001\003\190\001\000\171\144\160\001\003\191\001\000\172\144\160\001\003\192\001\000\173\144\160\001\003\193\001\000\174\144\160\001\003\194\001\000\186\144\160\001\003\195\001\000\175\144\160\001\003\196\001\000\187\144\160\001\003\197\001\000\188\144\160\001\003\198\001\000\189\144\160\001\003\199\001\000\190\144\160\001\003\200\001\000\191\144\160\001\003\201\001\000\203\144\160\001\003\202\001\000\180\144\160\001\003\203\001\000\184\144\160\001\003\204\001\000\182\144\160\001\003\205\001\000\183\144\160\001\003\206\001\000\185@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let adobe_standard_encoding_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002\031\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255`abcdef\001 \025hijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\001 \024\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001\000\161\001\000\162\001\000\163\001 D\001\000\165\001\001\146\001\000\167\001\000\164g\001 \028\001\000\171\001 9\001 :\002\000\000\251\001\002\000\000\251\002\000\255\001 \019\001  \001 !\001\000\183\000\255\001\000\182\001 \"\001 \026\001 \030\001 \029\001\000\187\001 &\001 0\000\255\001\000\191\000\255\000`\001\000\180\001\002\198\001\002\220\001\000\175\001\002\216\001\002\217\001\000\168\000\255\001\002\218\001\000\184\000\255\001\002\221\001\002\219\001\002\199\001 \020\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001\000\198\000\255\001\000\170\000\255\000\255\000\255\000\255\001\001A\001\000\216\001\001R\001\000\186\000\255\000\255\000\255\000\255\000\255\001\000\230\000\255\000\255\000\255\001\0011\000\255\000\255\001\001B\001\000\248\001\001S\001\000\223\000\255\000\255\000\255\000\255" 0 : int array);;
-let adobe_standard_encoding_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\004K\000\000\000\000\000\000\004&\000\000\004&\008\000\004\000\000@\144\160\002\000\000\251\001\001\000\174\144\160\002\000\000\251\002\001\000\175@@@@@@@@@@@@@@@@\144\160\001 \019\001\000\177\144\160\001 \020\001\000\208@@@\144\160\001 \024\000`\144\160\001 \025g\144\160\001 \026\001\000\184@\144\160\001 \028\001\000\170\144\160\001 \029\001\000\186\144\160\001 \030\001\000\185@\145\160\160``\160\160\001  \001\000\178@\145\160\160aa\160\160\001 !\001\000\179@\145\160\160bb\160\160\001 \"\001\000\183@\144\160cc\144\160dd\144\160ee\145\160\160ff\160\160\001 &\001\000\188@\144\160g\001\000\169\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\145\160\160pp\160\160\001 0\001\000\189@\145\160\160qq\160\160\001\0011\001\000\245@\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\145\160\160yy\160\160\001 9\001\000\172@\145\160\160zz\160\160\001 :\001\000\173@\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\145\160\160\000A\000A\160\160\001\001A\001\000\232@\145\160\160\000B\000B\160\160\001\001B\001\000\248@\144\160\000C\000C\145\160\160\000D\000D\160\160\001 D\001\000\164@\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\145\160\160\000R\000R\160\160\001\001R\001\000\234@\145\160\160\000S\000S\160\160\001\001S\001\000\250@\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\144\160\000`\001\000\193\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~@@@@@@@@@@@@@@@@@@@\144\160\001\001\146\001\000\166@@@@@@@@@@@@@@\144\160\001\000\161\001\000\161\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163\144\160\001\000\164\001\000\168\144\160\001\000\165\001\000\165@\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\200@\144\160\001\000\170\001\000\227\144\160\001\000\171\001\000\171@@@\144\160\001\000\175\001\000\197@@@@\144\160\001\000\180\001\000\194@\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\180\144\160\001\000\184\001\000\203@\144\160\001\000\186\001\000\235\144\160\001\000\187\001\000\187@@@\144\160\001\000\191\001\000\191@@@@@@\145\160\160\001\002\198\001\000\195\160\160\001\000\198\001\000\225@\144\160\001\002\199\001\000\207@@@@@@@@@@@@@@@@\145\160\160\001\002\216\001\000\198\160\160\001\000\216\001\000\233@\144\160\001\002\217\001\000\199\144\160\001\002\218\001\000\202\144\160\001\002\219\001\000\206\144\160\001\002\220\001\000\196\144\160\001\002\221\001\000\205@\144\160\001\000\223\001\000\251@@@@@@\144\160\001\000\230\001\000\241@@@@@@@@@@@@@@@@@\144\160\001\000\248\001\000\249@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let adobe_symbol_encoding_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002\192\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255`a\001\"\000c\001\"\003ef\001\"\011hi\001\"\023kl\001\"\018nopqrstuvwxyz{|}~\127\001\"E\001\003\145\001\003\146\001\003\167\001\003\148\001\003\149\001\003\166\001\003\147\001\003\151\001\003\153\001\003\209\001\003\154\001\003\155\001\003\156\001\003\157\001\003\159\001\003\160\001\003\152\001\003\161\001\003\163\001\003\164\001\003\165\001\003\194\001\003\169\001\003\158\001\003\168\001\003\150\000[\001\"4\000]\001\"\165\000_\002\000\000\248\229\001\003\177\001\003\178\001\003\199\001\003\180\001\003\181\001\003\198\001\003\179\001\003\183\001\003\185\001\003\213\001\003\186\001\003\187\001\003\188\001\003\189\001\003\191\001\003\192\001\003\184\001\003\193\001\003\195\001\003\196\001\003\197\001\003\214\001\003\201\001\003\190\001\003\200\001\003\182\000{\000|\000}\001\"<\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001 \172\001\003\210\001 2\001\"d\001 D\001\"\030\001\001\146\001&c\001&f\001&e\001&`\001!\148\001!\144\001!\145\001!\146\001!\147\001\000\176\001\000\177\001 3\001\"e\001\000\215\001\"\029\001\"\002\001 \"\001\000\247\001\"`\001\"a\001\"H\001 &\002\000\000\248\230\002\000\000\248\231\001!\181\001!5\001!\017\001!\028\001!\024\001\"\151\001\"\149\001\"\005\001\")\001\"*\001\"\131\001\"\135\001\"\132\001\"\130\001\"\134\001\"\008\001\"\t\001\" \001\"\007\002\000\000\246\218\002\000\000\246\217\002\000\000\246\219\001\"\015\001\"\026\001\"\197\001\000\172\001\"'\001\"(\001!\212\001!\208\001!\209\001!\210\001!\211\001%\202\001#)\002\000\000\248\232\002\000\000\248\233\002\000\000\248\234\001\"\017\002\000\000\248\235\002\000\000\248\236\002\000\000\248\237\002\000\000\248\238\002\000\000\248\239\002\000\000\248\240\002\000\000\248\241\002\000\000\248\242\002\000\000\248\243\002\000\000\248\244\000\255\001#*\001\"+\001# \002\000\000\248\245\001#!\002\000\000\248\246\002\000\000\248\247\002\000\000\248\248\002\000\000\248\249\002\000\000\248\250\002\000\000\248\251\002\000\000\248\252\002\000\000\248\253\002\000\000\248\254\000\255" 0 : int array);;
-let adobe_symbol_encoding_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\t\000\000\000\000\000\000\005)\000\000\005)\008\000\004\000\000\144\160\001\"\000b@\144\160\001\"\002\001\000\182\144\160\001\"\003d@\144\160\001\"\005\001\000\198@\144\160\001\"\007\001\000\209\144\160\001\"\008\001\000\206\144\160\001\"\t\001\000\207@\144\160\001\"\011g@@@\144\160\001\"\015\001\000\213@\145\160\160\001!\017\001\000\193\160\160\001\"\017\001\000\229@\144\160\001\"\018m@@@@\144\160\001\"\023j\144\160\001!\024\001\000\195@\144\160\001\"\026\001\000\214@\144\160\001!\028\001\000\194\144\160\001\"\029\001\000\181\144\160\001\"\030\001\000\165@\145\160\160``\160\160\001\" \001\000\208\160\160\001# \001\000\243@\145\160\160aa\160\160\001#!\001\000\245@\144\160\001 \"\001\000\183\144\160cc@\144\160ee\145\160\160ff\160\160\001 &\001\000\188@\144\160\001\"'\001\000\217\145\160\160hh\160\160\001\"(\001\000\218@\145\160\160ii\160\160\001\")\001\000\199\160\160\001#)\001\000\225@\145\160\160\001\"*\001\000\200\160\160\001#*\001\000\241@\145\160\160kk\160\160\001\"+\001\000\242@\144\160ll@\144\160nn\144\160oo\144\160pp\144\160qq\145\160\160rr\160\160\001 2\001\000\162@\145\160\160ss\160\160\001 3\001\000\178@\145\160\160tt\160\160\001\"4\000\\@\145\160\160uu\160\160\001!5\001\000\192@\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\145\160\160||\160\160\001\"<\000~@\144\160}}\144\160~~\144\160\127\127@@@@\144\160\001 D\001\000\164\144\160\001\"E\000@@@\144\160\001\"H\001\000\187@@@@@@@@@@@@@@@@@@\144\160\000[\000[@\144\160\000]\000]@\144\160\000_\000_\145\160\160\001&`\001\000\170\160\160\001\"`\001\000\185@\144\160\001\"a\001\000\186@\144\160\001&c\001\000\167\144\160\001\"d\001\000\163\145\160\160\001&e\001\000\169\160\160\001\"e\001\000\179@\144\160\001&f\001\000\168@@@@@@@@@@@@@@@@@@@@\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}@@@@\144\160\001\"\130\001\000\204\144\160\001\"\131\001\000\201\144\160\001\"\132\001\000\203@\144\160\001\"\134\001\000\205\144\160\001\"\135\001\000\202@@@@@@@@\144\160\001!\144\001\000\172\145\160\160\001\003\145\000A\160\160\001!\145\001\000\173@\145\160\160\001\003\146\000B\160\160\001\001\146\001\000\166\160\160\001!\146\001\000\174@\145\160\160\001\003\147\000G\160\160\001!\147\001\000\175@\145\160\160\001\003\148\000D\160\160\001!\148\001\000\171@\145\160\160\001\003\149\000E\160\160\001\"\149\001\000\197@\144\160\001\003\150\000Z\145\160\160\001\003\151\000H\160\160\001\"\151\001\000\196@\144\160\001\003\152\000Q\144\160\001\003\153\000I\144\160\001\003\154\000K\144\160\001\003\155\000L\144\160\001\003\156\000M\144\160\001\003\157\000N\144\160\001\003\158\000X\144\160\001\003\159\000O\144\160\001\003\160\000P\144\160\001\003\161\000R@\144\160\001\003\163\000S\144\160\001\003\164\000T\145\160\160\001\003\165\000U\160\160\001\"\165\000^@\144\160\001\003\166\000F\144\160\001\003\167\000C\144\160\001\003\168\000Y\144\160\001\003\169\000W@@\145\160\160\001 \172\001\000\160\160\160\001\000\172\001\000\216@@@@\144\160\001\000\176\001\000\176\145\160\160\001\003\177\000a\160\160\001\000\177\001\000\177@\144\160\001\003\178\000b\144\160\001\003\179\000g\144\160\001\003\180\000d\145\160\160\001\003\181\000e\160\160\001!\181\001\000\191@\144\160\001\003\182\000z\144\160\001\003\183\000h\144\160\001\003\184\000q\144\160\001\003\185\000i\144\160\001\003\186\000k\144\160\001\003\187\000l\144\160\001\003\188\000m\144\160\001\003\189\000n\144\160\001\003\190\000x\144\160\001\003\191\000o\144\160\001\003\192\000p\144\160\001\003\193\000r\144\160\001\003\194\000V\144\160\001\003\195\000s\144\160\001\003\196\000t\145\160\160\001\003\197\000u\160\160\001\"\197\001\000\215@\144\160\001\003\198\000f\144\160\001\003\199\000c\144\160\001\003\200\000y\144\160\001\003\201\000w\144\160\001%\202\001\000\224@@@@@\144\160\001!\208\001\000\220\145\160\160\001\003\209\000J\160\160\001!\209\001\000\221@\145\160\160\001\003\210\001\000\161\160\160\001!\210\001\000\222@\144\160\001!\211\001\000\223\144\160\001!\212\001\000\219\144\160\001\003\213\000j\144\160\001\003\214\000v\144\160\001\000\215\001\000\180@\144\160\002\000\000\246\217\001\000\211\144\160\002\000\000\246\218\001\000\210\144\160\002\000\000\246\219\001\000\212@@@@@@@@@\144\160\002\000\000\248\229\000`\144\160\002\000\000\248\230\001\000\189\144\160\002\000\000\248\231\001\000\190\144\160\002\000\000\248\232\001\000\226\144\160\002\000\000\248\233\001\000\227\144\160\002\000\000\248\234\001\000\228\144\160\002\000\000\248\235\001\000\230\144\160\002\000\000\248\236\001\000\231\144\160\002\000\000\248\237\001\000\232\144\160\002\000\000\248\238\001\000\233\144\160\002\000\000\248\239\001\000\234\144\160\002\000\000\248\240\001\000\235\144\160\002\000\000\248\241\001\000\236\144\160\002\000\000\248\242\001\000\237\144\160\002\000\000\248\243\001\000\238\144\160\002\000\000\248\244\001\000\239\144\160\002\000\000\248\245\001\000\244\144\160\002\000\000\248\246\001\000\246\145\160\160\001\000\247\001\000\184\160\160\002\000\000\248\247\001\000\247@\144\160\002\000\000\248\248\001\000\248\144\160\002\000\000\248\249\001\000\249\144\160\002\000\000\248\250\001\000\250\144\160\002\000\000\248\251\001\000\251\144\160\002\000\000\248\252\001\000\252\144\160\002\000\000\248\253\001\000\253\144\160\002\000\000\248\254\001\000\254@" 0 : Netmappings.from_uni_list array);;
- let adobe_zapf_dingbats_encoding_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002\233\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255`\001'\001\001'\002\001'\003\001'\004\001&\014\001'\006\001'\007\001'\008\001'\t\001&\027\001&\030\001'\012\001'\013\001'\014\001'\015\001'\016\001'\017\001'\018\001'\019\001'\020\001'\021\001'\022\001'\023\001'\024\001'\025\001'\026\001'\027\001'\028\001'\029\001'\030\001'\031\001' \001'!\001'\"\001'#\001'$\001'%\001'&\001''\001&\005\001')\001'*\001'+\001',\001'-\001'.\001'/\001'0\001'1\001'2\001'3\001'4\001'5\001'6\001'7\001'8\001'9\001':\001';\001'<\001'=\001'>\001'?\001'@\001'A\001'B\001'C\001'D\001'E\001'F\001'G\001'H\001'I\001'J\001'K\001%\207\001'M\001%\160\001'O\001'P\001'Q\001'R\001%\178\001%\188\001%\198\001'V\001%\215\001'X\001'Y\001'Z\001'[\001'\\\001']\001'^\000\255\002\000\000\248\215\002\000\000\248\216\002\000\000\248\217\002\000\000\248\218\002\000\000\248\219\002\000\000\248\220\002\000\000\248\221\002\000\000\248\222\002\000\000\248\223\002\000\000\248\224\002\000\000\248\225\002\000\000\248\226\002\000\000\248\227\002\000\000\248\228\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001'a\001'b\001'c\001'd\001'e\001'f\001'g\001&c\001&f\001&e\001&`\001$`\001$a\001$b\001$c\001$d\001$e\001$f\001$g\001$h\001$i\001'v\001'w\001'x\001'y\001'z\001'{\001'|\001'}\001'~\001'\127\001'\128\001'\129\001'\130\001'\131\001'\132\001'\133\001'\134\001'\135\001'\136\001'\137\001'\138\001'\139\001'\140\001'\141\001'\142\001'\143\001'\144\001'\145\001'\146\001'\147\001'\148\001!\146\001!\148\001!\149\001'\152\001'\153\001'\154\001'\155\001'\156\001'\157\001'\158\001'\159\001'\160\001'\161\001'\162\001'\163\001'\164\001'\165\001'\166\001'\167\001'\168\001'\169\001'\170\001'\171\001'\172\001'\173\001'\174\001'\175\000\255\001'\177\001'\178\001'\179\001'\180\001'\181\001'\182\001'\183\001'\184\001'\185\001'\186\001'\187\001'\188\001'\189\001'\190\000\255" 0 : int array);;
-let adobe_zapf_dingbats_encoding_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006_\000\000\000\000\000\000\005>\000\000\005>\008\000\004\000\000@\144\160\001'\001a\144\160\001'\002b\144\160\001'\003c\144\160\001'\004d\144\160\001&\005\000H\144\160\001'\006f\144\160\001'\007g\144\160\001'\008h\144\160\001'\ti@@\144\160\001'\012l\144\160\001'\013m\145\160\160\001&\014e\160\160\001'\014n@\144\160\001'\015o\144\160\001'\016p\144\160\001'\017q\144\160\001'\018r\144\160\001'\019s\144\160\001'\020t\144\160\001'\021u\144\160\001'\022v\144\160\001'\023w\144\160\001'\024x\144\160\001'\025y\144\160\001'\026z\145\160\160\001&\027j\160\160\001'\027{@\144\160\001'\028|\144\160\001'\029}\145\160\160\001&\030k\160\160\001'\030~@\144\160\001'\031\127\145\160\160``\160\160\001' \000@@\144\160\001'!\000A\144\160\001'\"\000B\144\160\001'#\000C\144\160\001'$\000D\144\160\001'%\000E\144\160\001'&\000F\144\160\001''\000G@\144\160\001')\000I\144\160\001'*\000J\144\160\001'+\000K\144\160\001',\000L\144\160\001'-\000M\144\160\001'.\000N\144\160\001'/\000O\144\160\001'0\000P\144\160\001'1\000Q\144\160\001'2\000R\144\160\001'3\000S\144\160\001'4\000T\144\160\001'5\000U\144\160\001'6\000V\144\160\001'7\000W\144\160\001'8\000X\144\160\001'9\000Y\144\160\001':\000Z\144\160\001';\000[\144\160\001'<\000\\\144\160\001'=\000]\144\160\001'>\000^\144\160\001'?\000_\144\160\001'@\000`\144\160\001'A\000a\144\160\001'B\000b\144\160\001'C\000c\144\160\001'D\000d\144\160\001'E\000e\144\160\001'F\000f\144\160\001'G\000g\144\160\001'H\000h\144\160\001'I\000i\144\160\001'J\000j\144\160\001'K\000k@\144\160\001'M\000m@\144\160\001'O\000o\144\160\001'P\000p\144\160\001'Q\000q\144\160\001'R\000r@@@\144\160\001'V\000v@\144\160\001'X\000x\144\160\001'Y\000y\144\160\001'Z\000z\144\160\001'[\000{\144\160\001'\\\000|\144\160\001']\000}\144\160\001'^\000~@\145\160\160\001&`\001\000\171\160\160\001$`\001\000\172@\145\160\160\001'a\001\000\161\160\160\001$a\001\000\173@\145\160\160\001'b\001\000\162\160\160\001$b\001\000\174@\145\160\160\001'c\001\000\163\160\160\001&c\001\000\168\160\160\001$c\001\000\175@\145\160\160\001'd\001\000\164\160\160\001$d\001\000\176@\145\160\160\001'e\001\000\165\160\160\001&e\001\000\170\160\160\001$e\001\000\177@\145\160\160\001'f\001\000\166\160\160\001&f\001\000\169\160\160\001$f\001\000\178@\145\160\160\001'g\001\000\167\160\160\001$g\001\000\179@\144\160\001$h\001\000\180\144\160\001$i\001\000\181@@@@@@@@@@@@\144\160\001'v\001\000\182\144\160\001'w\001\000\183\144\160\001'x\001\000\184\144\160\001'y\001\000\185\144\160\001'z\001\000\186\144\160\001'{\001\000\187\144\160\001'|\001\000\188\144\160\001'}\001\000\189\144\160\001'~\001\000\190\144\160\001'\127\001\000\191\144\160\001'\128\001\000\192\144\160\001'\129\001\000\193\144\160\001'\130\001\000\194\144\160\001'\131\001\000\195\144\160\001'\132\001\000\196\144\160\001'\133\001\000\197\144\160\001'\134\001\000\198\144\160\001'\135\001\000\199\144\160\001'\136\001\000\200\144\160\001'\137\001\000\201\144\160\001'\138\001\000\202\144\160\001'\139\001\000\203\144\160\001'\140\001\000\204\144\160\001'\141\001\000\205\144\160\001'\142\001\000\206\144\160\001'\143\001\000\207\144\160\001'\144\001\000\208\144\160\001'\145\001\000\209\145\160\160\001'\146\001\000\210\160\160\001!\146\001\000\213@\144\160\001'\147\001\000\211\145\160\160\001'\148\001\000\212\160\160\001!\148\001\000\214@\144\160\001!\149\001\000\215@@\144\160\001'\152\001\000\216\144\160\001'\153\001\000\217\144\160\001'\154\001\000\218\144\160\001'\155\001\000\219\144\160\001'\156\001\000\220\144\160\001'\157\001\000\221\144\160\001'\158\001\000\222\144\160\001'\159\001\000\223\145\160\160\001%\160\000n\160\160\001'\160\001\000\224@\144\160\001'\161\001\000\225\144\160\001'\162\001\000\226\144\160\001'\163\001\000\227\144\160\001'\164\001\000\228\144\160\001'\165\001\000\229\144\160\001'\166\001\000\230\144\160\001'\167\001\000\231\144\160\001'\168\001\000\232\144\160\001'\169\001\000\233\144\160\001'\170\001\000\234\144\160\001'\171\001\000\235\144\160\001'\172\001\000\236\144\160\001'\173\001\000\237\144\160\001'\174\001\000\238\144\160\001'\175\001\000\239@\144\160\001'\177\001\000\241\145\160\160\001%\178\000s\160\160\001'\178\001\000\242@\144\160\001'\179\001\000\243\144\160\001'\180\001\000\244\144\160\001'\181\001\000\245\144\160\001'\182\001\000\246\144\160\001'\183\001\000\247\144\160\001'\184\001\000\248\144\160\001'\185\001\000\249\144\160\001'\186\001\000\250\144\160\001'\187\001\000\251\145\160\160\001%\188\000t\160\160\001'\188\001\000\252@\144\160\001'\189\001\000\253\144\160\001'\190\001\000\254@@@@@@@\144\160\001%\198\000u@@@@@@@@\144\160\001%\207\000l@@@@@@@\145\160\160\001%\215\000w\160\160\002\000\000\248\215\001\000\128@\144\160\002\000\000\248\216\001\000\129\144\160\002\000\000\248\217\001\000\130\144\160\002\000\000\248\218\001\000\131\144\160\002\000\000\248\219\001\000\132\144\160\002\000\000\248\220\001\000\133\144\160\002\000\000\248\221\001\000\134\144\160\002\000\000\248\222\001\000\135\144\160\002\000\000\248\223\001\000\136\144\160\002\000\000\248\224\001\000\137\144\160\002\000\000\248\225\001\000\138\144\160\002\000\000\248\226\001\000\139\144\160\002\000\000\248\227\001\000\140\144\160\002\000\000\248\228\001\000\141@@@@@@@@@@@@@@@@@@@@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let jis0201_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002\164\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\001\000\165\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\001 >\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\002\000\000\255a\002\000\000\255b\002\000\000\255c\002\000\000\255d\002\000\000\255e\002\000\000\255f\002\000\000\255g\002\000\000\255h\002\000\000\255i\002\000\000\255j\002\000\000\255k\002\000\000\255l\002\000\000\255m\002\000\000\255n\002\000\000\255o\002\000\000\255p\002\000\000\255q\002\000\000\255r\002\000\000\255s\002\000\000\255t\002\000\000\255u\002\000\000\255v\002\000\000\255w\002\000\000\255x\002\000\000\255y\002\000\000\255z\002\000\000\255{\002\000\000\255|\002\000\000\255}\002\000\000\255~\002\000\000\255\127\002\000\000\255\128\002\000\000\255\129\002\000\000\255\130\002\000\000\255\131\002\000\000\255\132\002\000\000\255\133\002\000\000\255\134\002\000\000\255\135\002\000\000\255\136\002\000\000\255\137\002\000\000\255\138\002\000\000\255\139\002\000\000\255\140\002\000\000\255\141\002\000\000\255\142\002\000\000\255\143\002\000\000\255\144\002\000\000\255\145\002\000\000\255\146\002\000\000\255\147\002\000\000\255\148\002\000\000\255\149\002\000\000\255\150\002\000\000\255\151\002\000\000\255\152\002\000\000\255\153\002\000\000\255\154\002\000\000\255\155\002\000\000\255\156\002\000\000\255\157\002\000\000\255\158\002\000\000\255\159\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255" 0 : int array);;
-let jis0201_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\0053\000\000\000\000\000\000\004\143\000\000\004\143\008\000\004\000\000@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\144\160``\144\160aa\144\160bb\144\160cc\144\160dd\144\160ee\144\160ff\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\144\160pp\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\144\160yy\144\160zz\144\160{{\144\160||\144\160}}\145\160\160~~\160\160\001 >\000~@\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[@\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\144\160\000`\000`\145\160\160\000a\000a\160\160\002\000\000\255a\001\000\161@\145\160\160\000b\000b\160\160\002\000\000\255b\001\000\162@\145\160\160\000c\000c\160\160\002\000\000\255c\001\000\163@\145\160\160\000d\000d\160\160\002\000\000\255d\001\000\164@\145\160\160\000e\000e\160\160\002\000\000\255e\001\000\165@\145\160\160\000f\000f\160\160\002\000\000\255f\001\000\166@\145\160\160\000g\000g\160\160\002\000\000\255g\001\000\167@\145\160\160\000h\000h\160\160\002\000\000\255h\001\000\168@\145\160\160\000i\000i\160\160\002\000\000\255i\001\000\169@\145\160\160\000j\000j\160\160\002\000\000\255j\001\000\170@\145\160\160\000k\000k\160\160\002\000\000\255k\001\000\171@\145\160\160\000l\000l\160\160\002\000\000\255l\001\000\172@\145\160\160\000m\000m\160\160\002\000\000\255m\001\000\173@\145\160\160\000n\000n\160\160\002\000\000\255n\001\000\174@\145\160\160\000o\000o\160\160\002\000\000\255o\001\000\175@\145\160\160\000p\000p\160\160\002\000\000\255p\001\000\176@\145\160\160\000q\000q\160\160\002\000\000\255q\001\000\177@\145\160\160\000r\000r\160\160\002\000\000\255r\001\000\178@\145\160\160\000s\000s\160\160\002\000\000\255s\001\000\179@\145\160\160\000t\000t\160\160\002\000\000\255t\001\000\180@\145\160\160\000u\000u\160\160\002\000\000\255u\001\000\181@\145\160\160\000v\000v\160\160\002\000\000\255v\001\000\182@\145\160\160\000w\000w\160\160\002\000\000\255w\001\000\183@\145\160\160\000x\000x\160\160\002\000\000\255x\001\000\184@\145\160\160\000y\000y\160\160\002\000\000\255y\001\000\185@\145\160\160\000z\000z\160\160\002\000\000\255z\001\000\186@\145\160\160\000{\000{\160\160\002\000\000\255{\001\000\187@\145\160\160\000|\000|\160\160\002\000\000\255|\001\000\188@\145\160\160\000}\000}\160\160\002\000\000\255}\001\000\189@\144\160\002\000\000\255~\001\000\190\144\160\002\000\000\255\127\001\000\191\144\160\002\000\000\255\128\001\000\192\144\160\002\000\000\255\129\001\000\193\144\160\002\000\000\255\130\001\000\194\144\160\002\000\000\255\131\001\000\195\144\160\002\000\000\255\132\001\000\196\144\160\002\000\000\255\133\001\000\197\144\160\002\000\000\255\134\001\000\198\144\160\002\000\000\255\135\001\000\199\144\160\002\000\000\255\136\001\000\200\144\160\002\000\000\255\137\001\000\201\144\160\002\000\000\255\138\001\000\202\144\160\002\000\000\255\139\001\000\203\144\160\002\000\000\255\140\001\000\204\144\160\002\000\000\255\141\001\000\205\144\160\002\000\000\255\142\001\000\206\144\160\002\000\000\255\143\001\000\207\144\160\002\000\000\255\144\001\000\208\144\160\002\000\000\255\145\001\000\209\144\160\002\000\000\255\146\001\000\210\144\160\002\000\000\255\147\001\000\211\144\160\002\000\000\255\148\001\000\212\144\160\002\000\000\255\149\001\000\213\144\160\002\000\000\255\150\001\000\214\144\160\002\000\000\255\151\001\000\215\144\160\002\000\000\255\152\001\000\216\144\160\002\000\000\255\153\001\000\217\144\160\002\000\000\255\154\001\000\218\144\160\002\000\000\255\155\001\000\219\144\160\002\000\000\255\156\001\000\220\144\160\002\000\000\255\157\001\000\221\144\160\002\000\000\255\158\001\000\222\144\160\002\000\000\255\159\001\000\223@@@@@\144\160\001\000\165\000\\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let koi8r_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001%\000\001%\002\001%\012\001%\016\001%\020\001%\024\001%\028\001%$\001%,\001%4\001%<\001%\128\001%\132\001%\136\001%\140\001%\144\001%\145\001%\146\001%\147\001# \001%\160\001\"\025\001\"\026\001\"H\001\"d\001\"e\001\000\160\001#!\001\000\176\001\000\178\001\000\183\001\000\247\001%P\001%Q\001%R\001\004Q\001%S\001%T\001%U\001%V\001%W\001%X\001%Y\001%Z\001%[\001%\\\001%]\001%^\001%_\001%`\001%a\001\004\001\001%b\001%c\001%d\001%e\001%f\001%g\001%h\001%i\001%j\001%k\001%l\001\000\169\001\004N\001\0040\001\0041\001\004F\001\0044\001\0045\001\004D\001\0043\001\004E\001\0048\001\0049\001\004:\001\004;\001\004<\001\004=\001\004>\001\004?\001\004O\001\004@\001\004A\001\004B\001\004C\001\0046\001\0042\001\004L\001\004K\001\0047\001\004H\001\004M\001\004I\001\004G\001\004J\001\004.\001\004\016\001\004\017\001\004&\001\004\020\001\004\021\001\004$\001\004\019\001\004%\001\004\024\001\004\025\001\004\026\001\004\027\001\004\028\001\004\029\001\004\030\001\004\031\001\004/\001\004 \001\004!\001\004\"\001\004#\001\004\022\001\004\018\001\004,\001\004+\001\004\023\001\004(\001\004-\001\004)\001\004'\001\004*" 0 : int array);;
-let koi8r_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007\187\000\000\000\000\000\000\007\153\000\000\007\153\008\000\004\000\000\145\160\160@@\160\160\001%\000\001\000\128@\145\160\160AA\160\160\001\004\001\001\000\179@\145\160\160BB\160\160\001%\002\001\000\129@\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001%\012\001\000\130@\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001%\016\001\000\131\160\160\001\004\016\001\000\225@\145\160\160QQ\160\160\001\004\017\001\000\226@\145\160\160RR\160\160\001\004\018\001\000\247@\145\160\160SS\160\160\001\004\019\001\000\231@\145\160\160TT\160\160\001%\020\001\000\132\160\160\001\004\020\001\000\228@\145\160\160UU\160\160\001\004\021\001\000\229@\145\160\160VV\160\160\001\004\022\001\000\246@\145\160\160WW\160\160\001\004\023\001\000\250@\145\160\160XX\160\160\001%\024\001\000\133\160\160\001\004\024\001\000\233@\145\160\160YY\160\160\001\"\025\001\000\149\160\160\001\004\025\001\000\234@\145\160\160ZZ\160\160\001\"\026\001\000\150\160\160\001\004\026\001\000\235@\145\160\160[[\160\160\001\004\027\001\000\236@\145\160\160\\\\\160\160\001%\028\001\000\134\160\160\001\004\028\001\000\237@\145\160\160]]\160\160\001\004\029\001\000\238@\145\160\160^^\160\160\001\004\030\001\000\239@\145\160\160__\160\160\001\004\031\001\000\240@\145\160\160``\160\160\001# \001\000\147\160\160\001\004 \001\000\242@\145\160\160aa\160\160\001#!\001\000\155\160\160\001\004!\001\000\243@\145\160\160bb\160\160\001\004\"\001\000\244@\145\160\160cc\160\160\001\004#\001\000\245@\145\160\160dd\160\160\001%$\001\000\135\160\160\001\004$\001\000\230@\145\160\160ee\160\160\001\004%\001\000\232@\145\160\160ff\160\160\001\004&\001\000\227@\145\160\160gg\160\160\001\004'\001\000\254@\145\160\160hh\160\160\001\004(\001\000\251@\145\160\160ii\160\160\001\004)\001\000\253@\145\160\160jj\160\160\001\004*\001\000\255@\145\160\160kk\160\160\001\004+\001\000\249@\145\160\160ll\160\160\001%,\001\000\136\160\160\001\004,\001\000\248@\145\160\160mm\160\160\001\004-\001\000\252@\145\160\160nn\160\160\001\004.\001\000\224@\145\160\160oo\160\160\001\004/\001\000\241@\145\160\160pp\160\160\001\0040\001\000\193@\145\160\160qq\160\160\001\0041\001\000\194@\145\160\160rr\160\160\001\0042\001\000\215@\145\160\160ss\160\160\001\0043\001\000\199@\145\160\160tt\160\160\001%4\001\000\137\160\160\001\0044\001\000\196@\145\160\160uu\160\160\001\0045\001\000\197@\145\160\160vv\160\160\001\0046\001\000\214@\145\160\160ww\160\160\001\0047\001\000\218@\145\160\160xx\160\160\001\0048\001\000\201@\145\160\160yy\160\160\001\0049\001\000\202@\145\160\160zz\160\160\001\004:\001\000\203@\145\160\160{{\160\160\001\004;\001\000\204@\145\160\160||\160\160\001%<\001\000\138\160\160\001\004<\001\000\205@\145\160\160}}\160\160\001\004=\001\000\206@\145\160\160~~\160\160\001\004>\001\000\207@\145\160\160\127\127\160\160\001\004?\001\000\208@\145\160\160\000@\000@\160\160\001\004@\001\000\210@\145\160\160\000A\000A\160\160\001\004A\001\000\211@\145\160\160\000B\000B\160\160\001\004B\001\000\212@\145\160\160\000C\000C\160\160\001\004C\001\000\213@\145\160\160\000D\000D\160\160\001\004D\001\000\198@\145\160\160\000E\000E\160\160\001\004E\001\000\200@\145\160\160\000F\000F\160\160\001\004F\001\000\195@\145\160\160\000G\000G\160\160\001\004G\001\000\222@\145\160\160\000H\000H\160\160\001\"H\001\000\151\160\160\001\004H\001\000\219@\145\160\160\000I\000I\160\160\001\004I\001\000\221@\145\160\160\000J\000J\160\160\001\004J\001\000\223@\145\160\160\000K\000K\160\160\001\004K\001\000\217@\145\160\160\000L\000L\160\160\001\004L\001\000\216@\145\160\160\000M\000M\160\160\001\004M\001\000\220@\145\160\160\000N\000N\160\160\001\004N\001\000\192@\145\160\160\000O\000O\160\160\001\004O\001\000\209@\145\160\160\000P\000P\160\160\001%P\001\000\160@\145\160\160\000Q\000Q\160\160\001%Q\001\000\161\160\160\001\004Q\001\000\163@\145\160\160\000R\000R\160\160\001%R\001\000\162@\145\160\160\000S\000S\160\160\001%S\001\000\164@\145\160\160\000T\000T\160\160\001%T\001\000\165@\145\160\160\000U\000U\160\160\001%U\001\000\166@\145\160\160\000V\000V\160\160\001%V\001\000\167@\145\160\160\000W\000W\160\160\001%W\001\000\168@\145\160\160\000X\000X\160\160\001%X\001\000\169@\145\160\160\000Y\000Y\160\160\001%Y\001\000\170@\145\160\160\000Z\000Z\160\160\001%Z\001\000\171@\145\160\160\000[\000[\160\160\001%[\001\000\172@\145\160\160\000\\\000\\\160\160\001%\\\001\000\173@\145\160\160\000]\000]\160\160\001%]\001\000\174@\145\160\160\000^\000^\160\160\001%^\001\000\175@\145\160\160\000_\000_\160\160\001%_\001\000\176@\145\160\160\000`\000`\160\160\001%`\001\000\177@\145\160\160\000a\000a\160\160\001%a\001\000\178@\145\160\160\000b\000b\160\160\001%b\001\000\180@\145\160\160\000c\000c\160\160\001%c\001\000\181@\145\160\160\000d\000d\160\160\001\"d\001\000\152\160\160\001%d\001\000\182@\145\160\160\000e\000e\160\160\001\"e\001\000\153\160\160\001%e\001\000\183@\145\160\160\000f\000f\160\160\001%f\001\000\184@\145\160\160\000g\000g\160\160\001%g\001\000\185@\145\160\160\000h\000h\160\160\001%h\001\000\186@\145\160\160\000i\000i\160\160\001%i\001\000\187@\145\160\160\000j\000j\160\160\001%j\001\000\188@\145\160\160\000k\000k\160\160\001%k\001\000\189@\145\160\160\000l\000l\160\160\001%l\001\000\190@\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127\144\160\001%\128\001\000\139@@@\144\160\001%\132\001\000\140@@@\144\160\001%\136\001\000\141@@@\144\160\001%\140\001\000\142@@@\144\160\001%\144\001\000\143\144\160\001%\145\001\000\144\144\160\001%\146\001\000\145\144\160\001%\147\001\000\146@@@@@@@@@@@@\145\160\160\001%\160\001\000\148\160\160\001\000\160\001\000\154@@@@@@@@@\144\160\001\000\169\001\000\191@@@@@@\144\160\001\000\176\001\000\156@\144\160\001\000\178\001\000\157@@@@\144\160\001\000\183\001\000\158@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\144\160\001\000\247\001\000\159@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let macroman_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002k\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\255\001\000\196\001\000\197\001\000\199\001\000\201\001\000\209\001\000\214\001\000\220\001\000\225\001\000\224\001\000\226\001\000\228\001\000\227\001\000\229\001\000\231\001\000\233\001\000\232\001\000\234\001\000\235\001\000\237\001\000\236\001\000\238\001\000\239\001\000\241\001\000\243\001\000\242\001\000\244\001\000\246\001\000\245\001\000\250\001\000\249\001\000\251\001\000\252\001  \001\000\176\001\000\162\001\000\163\001\000\167\001 \"\001\000\182\001\000\223\001\000\174\001\000\169\001!\"\001\000\180\001\000\168\001\"`\001\000\198\001\000\216\001\"\030\001\000\177\001\"d\001\"e\001\000\165\001\000\181\001\"\002\001\"\017\001\"\015\001\003\192\001\"+\001\000\170\001\000\186\001\003\169\001\000\230\001\000\248\001\000\191\001\000\161\001\000\172\001\"\026\001\001\146\001\"H\001\"\006\001\000\171\001\000\187\001 &\001\000\160\001\000\192\001\000\195\001\000\213\001\001R\001\001S\001 \019\001 \020\001 \028\001 \029\001 \024\001 \025\001\000\247\001%\202\001\000\255\001\001x\001 D\001 \172\001 9\001 :\002\000\000\251\001\002\000\000\251\002\001 !\001\000\183\001 \026\001 \030\001 0\001\000\194\001\000\202\001\000\193\001\000\203\001\000\200\001\000\205\001\000\206\001\000\207\001\000\204\001\000\211\001\000\212\002\000\000\248\255\001\000\210\001\000\218\001\000\219\001\000\217\001\0011\001\002\198\001\002\220\001\000\175\001\002\216\001\002\217\001\002\218\001\000\184\001\002\221\001\002\219\001\002\199" 0 : int array);;
-let macroman_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\135\000\000\000\000\000\000\005\221\000\000\005\221\008\000\004\000\000@\144\160\002\000\000\251\001\001\000\222\145\160\160\001\"\002\001\000\182\160\160\002\000\000\251\002\001\000\223@@@@\144\160\001\"\006\001\000\198@@@@@@@@\144\160\001\"\015\001\000\184@\144\160\001\"\017\001\000\183@\144\160\001 \019\001\000\208\144\160\001 \020\001\000\209@@@\144\160\001 \024\001\000\212\144\160\001 \025\001\000\213\145\160\160\001\"\026\001\000\195\160\160\001 \026\001\000\226@@\144\160\001 \028\001\000\210\144\160\001 \029\001\000\211\145\160\160\001\"\030\001\000\176\160\160\001 \030\001\000\227@@\145\160\160``\160\160\001  \001\000\160@\145\160\160aa\160\160\001 !\001\000\224@\145\160\160bb\160\160\001 \"\001\000\165\160\160\001!\"\001\000\170@\144\160cc\144\160dd\144\160ee\145\160\160ff\160\160\001 &\001\000\201@\144\160gg\144\160hh\144\160ii\144\160jj\145\160\160kk\160\160\001\"+\001\000\186@\144\160ll\144\160mm\144\160nn\144\160oo\145\160\160pp\160\160\001 0\001\000\228@\145\160\160qq\160\160\001\0011\001\000\245@\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\145\160\160yy\160\160\001 9\001\000\220@\145\160\160zz\160\160\001 :\001\000\221@\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\145\160\160\000D\000D\160\160\001 D\001\000\218@\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\145\160\160\000H\000H\160\160\001\"H\001\000\197@\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\145\160\160\000R\000R\160\160\001\001R\001\000\206@\145\160\160\000S\000S\160\160\001\001S\001\000\207@\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001\"`\001\000\173@\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\145\160\160\000d\000d\160\160\001\"d\001\000\178@\145\160\160\000e\000e\160\160\001\"e\001\000\179@\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\145\160\160\000x\000x\160\160\001\001x\001\000\217@\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~@@@@@@@@@@@@@@@@@@@\144\160\001\001\146\001\000\196@@@@@@@@@@@@@\144\160\001\000\160\001\000\202\144\160\001\000\161\001\000\193\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163@\144\160\001\000\165\001\000\180@\144\160\001\000\167\001\000\164\144\160\001\000\168\001\000\172\145\160\160\001\000\169\001\000\169\160\160\001\003\169\001\000\189@\144\160\001\000\170\001\000\187\144\160\001\000\171\001\000\199\145\160\160\001\000\172\001\000\194\160\160\001 \172\001\000\219@@\144\160\001\000\174\001\000\168\144\160\001\000\175\001\000\248\144\160\001\000\176\001\000\161\144\160\001\000\177\001\000\177@@\144\160\001\000\180\001\000\171\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\166\144\160\001\000\183\001\000\225\144\160\001\000\184\001\000\252@\144\160\001\000\186\001\000\188\144\160\001\000\187\001\000\200@@@\144\160\001\000\191\001\000\192\145\160\160\001\003\192\001\000\185\160\160\001\000\192\001\000\203@\144\160\001\000\193\001\000\231\144\160\001\000\194\001\000\229\144\160\001\000\195\001\000\204\144\160\001\000\196\001\000\128\144\160\001\000\197\001\000\129\145\160\160\001\000\198\001\000\174\160\160\001\002\198\001\000\246@\145\160\160\001\000\199\001\000\130\160\160\001\002\199\001\000\255@\144\160\001\000\200\001\000\233\144\160\001\000\201\001\000\131\145\160\160\001%\202\001\000\215\160\160\001\000\202\001\000\230@\144\160\001\000\203\001\000\232\144\160\001\000\204\001\000\237\144\160\001\000\205\001\000\234\144\160\001\000\206\001\000\235\144\160\001\000\207\001\000\236@\144\160\001\000\209\001\000\132\144\160\001\000\210\001\000\241\144\160\001\000\211\001\000\238\144\160\001\000\212\001\000\239\144\160\001\000\213\001\000\205\144\160\001\000\214\001\000\133@\145\160\160\001\000\216\001\000\175\160\160\001\002\216\001\000\249@\145\160\160\001\000\217\001\000\244\160\160\001\002\217\001\000\250@\145\160\160\001\000\218\001\000\242\160\160\001\002\218\001\000\251@\145\160\160\001\000\219\001\000\243\160\160\001\002\219\001\000\254@\145\160\160\001\000\220\001\000\134\160\160\001\002\220\001\000\247@\144\160\001\002\221\001\000\253@\144\160\001\000\223\001\000\167\144\160\001\000\224\001\000\136\144\160\001\000\225\001\000\135\144\160\001\000\226\001\000\137\144\160\001\000\227\001\000\139\144\160\001\000\228\001\000\138\144\160\001\000\229\001\000\140\144\160\001\000\230\001\000\190\144\160\001\000\231\001\000\141\144\160\001\000\232\001\000\143\144\160\001\000\233\001\000\142\144\160\001\000\234\001\000\144\144\160\001\000\235\001\000\145\144\160\001\000\236\001\000\147\144\160\001\000\237\001\000\146\144\160\001\000\238\001\000\148\144\160\001\000\239\001\000\149@\144\160\001\000\241\001\000\150\144\160\001\000\242\001\000\152\144\160\001\000\243\001\000\151\144\160\001\000\244\001\000\153\144\160\001\000\245\001\000\155\144\160\001\000\246\001\000\154\144\160\001\000\247\001\000\214\144\160\001\000\248\001\000\191\144\160\001\000\249\001\000\157\144\160\001\000\250\001\000\156\144\160\001\000\251\001\000\158\144\160\001\000\252\001\000\159@@\145\160\160\001\000\255\001\000\216\160\160\002\000\000\248\255\001\000\240@" 0 : Netmappings.from_uni_list array);;
- let windows1250_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002@\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001 \172\000\255\001 \026\000\255\001 \030\001 &\001  \001 !\000\255\001 0\001\001`\001 9\001\001Z\001\001d\001\001}\001\001y\000\255\001 \024\001 \025\001 \028\001 \029\001 \"\001 \019\001 \020\000\255\001!\"\001\001a\001 :\001\001[\001\001e\001\001~\001\001z\001\000\160\001\002\199\001\002\216\001\001A\001\000\164\001\001\004\001\000\166\001\000\167\001\000\168\001\000\169\001\001^\001\000\171\001\000\172\001\000\173\001\000\174\001\001{\001\000\176\001\000\177\001\002\219\001\001B\001\000\180\001\000\181\001\000\182\001\000\183\001\000\184\001\001\005\001\001_\001\000\187\001\001=\001\002\221\001\001>\001\001|\001\001T\001\000\193\001\000\194\001\001\002\001\000\196\001\0019\001\001\006\001\000\199\001\001\012\001\000\201\001\001\024\001\000\203\001\001\026\001\000\205\001\000\206\001\001\014\001\001\016\001\001C\001\001G\001\000\211\001\000\212\001\001P\001\000\214\001\000\215\001\001X\001\001n\001\000\218\001\001p\001\000\220\001\000\221\001\001b\001\000\223\001\001U\001\000\225\001\000\226\001\001\003\001\000\228\001\001:\001\001\007\001\000\231\001\001\013\001\000\233\001\001\025\001\000\235\001\001\027\001\000\237\001\000\238\001\001\015\001\001\017\001\001D\001\001H\001\000\243\001\000\244\001\001Q\001\000\246\001\000\247\001\001Y\001\001o\001\000\250\001\001q\001\000\252\001\000\253\001\001c\001\002\217" 0 : int array);;
-let windows1250_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007+\000\000\000\000\000\000\006\242\000\000\006\242\008\000\004\000\000\144\160@@\144\160AA\145\160\160BB\160\160\001\001\002\001\000\195@\145\160\160CC\160\160\001\001\003\001\000\227@\145\160\160DD\160\160\001\001\004\001\000\165@\145\160\160EE\160\160\001\001\005\001\000\185@\145\160\160FF\160\160\001\001\006\001\000\198@\145\160\160GG\160\160\001\001\007\001\000\230@\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001\001\012\001\000\200@\145\160\160MM\160\160\001\001\013\001\000\232@\145\160\160NN\160\160\001\001\014\001\000\207@\145\160\160OO\160\160\001\001\015\001\000\239@\145\160\160PP\160\160\001\001\016\001\000\208@\145\160\160QQ\160\160\001\001\017\001\000\240@\144\160RR\145\160\160SS\160\160\001 \019\001\000\150@\145\160\160TT\160\160\001 \020\001\000\151@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001 \024\001\000\145\160\160\001\001\024\001\000\202@\145\160\160YY\160\160\001 \025\001\000\146\160\160\001\001\025\001\000\234@\145\160\160ZZ\160\160\001 \026\001\000\130\160\160\001\001\026\001\000\204@\145\160\160[[\160\160\001\001\027\001\000\236@\145\160\160\\\\\160\160\001 \028\001\000\147@\145\160\160]]\160\160\001 \029\001\000\148@\145\160\160^^\160\160\001 \030\001\000\132@\144\160__\145\160\160``\160\160\001  \001\000\134@\145\160\160aa\160\160\001 !\001\000\135@\145\160\160bb\160\160\001 \"\001\000\149\160\160\001!\"\001\000\153@\144\160cc\144\160dd\144\160ee\145\160\160ff\160\160\001 &\001\000\133@\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\145\160\160pp\160\160\001 0\001\000\137@\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\145\160\160yy\160\160\001 9\001\000\139\160\160\001\0019\001\000\197@\145\160\160zz\160\160\001 :\001\000\155\160\160\001\001:\001\000\229@\144\160{{\144\160||\145\160\160}}\160\160\001\001=\001\000\188@\145\160\160~~\160\160\001\001>\001\000\190@\144\160\127\127\144\160\000@\000@\145\160\160\000A\000A\160\160\001\001A\001\000\163@\145\160\160\000B\000B\160\160\001\001B\001\000\179@\145\160\160\000C\000C\160\160\001\001C\001\000\209@\145\160\160\000D\000D\160\160\001\001D\001\000\241@\144\160\000E\000E\144\160\000F\000F\145\160\160\000G\000G\160\160\001\001G\001\000\210@\145\160\160\000H\000H\160\160\001\001H\001\000\242@\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\145\160\160\000P\000P\160\160\001\001P\001\000\213@\145\160\160\000Q\000Q\160\160\001\001Q\001\000\245@\144\160\000R\000R\144\160\000S\000S\145\160\160\000T\000T\160\160\001\001T\001\000\192@\145\160\160\000U\000U\160\160\001\001U\001\000\224@\144\160\000V\000V\144\160\000W\000W\145\160\160\000X\000X\160\160\001\001X\001\000\216@\145\160\160\000Y\000Y\160\160\001\001Y\001\000\248@\145\160\160\000Z\000Z\160\160\001\001Z\001\000\140@\145\160\160\000[\000[\160\160\001\001[\001\000\156@\144\160\000\\\000\\\144\160\000]\000]\145\160\160\000^\000^\160\160\001\001^\001\000\170@\145\160\160\000_\000_\160\160\001\001_\001\000\186@\145\160\160\000`\000`\160\160\001\001`\001\000\138@\145\160\160\000a\000a\160\160\001\001a\001\000\154@\145\160\160\000b\000b\160\160\001\001b\001\000\222@\145\160\160\000c\000c\160\160\001\001c\001\000\254@\145\160\160\000d\000d\160\160\001\001d\001\000\141@\145\160\160\000e\000e\160\160\001\001e\001\000\157@\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\145\160\160\000n\000n\160\160\001\001n\001\000\217@\145\160\160\000o\000o\160\160\001\001o\001\000\249@\145\160\160\000p\000p\160\160\001\001p\001\000\219@\145\160\160\000q\000q\160\160\001\001q\001\000\251@\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\145\160\160\000y\000y\160\160\001\001y\001\000\143@\145\160\160\000z\000z\160\160\001\001z\001\000\159@\145\160\160\000{\000{\160\160\001\001{\001\000\175@\145\160\160\000|\000|\160\160\001\001|\001\000\191@\145\160\160\000}\000}\160\160\001\001}\001\000\142@\145\160\160\000~\000~\160\160\001\001~\001\000\158@\144\160\000\127\000\127@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\144\160\001\000\160\001\000\160@@@\144\160\001\000\164\001\000\164@\144\160\001\000\166\001\000\166\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\168\144\160\001\000\169\001\000\169@\144\160\001\000\171\001\000\171\145\160\160\001 \172\001\000\128\160\160\001\000\172\001\000\172@\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174@\144\160\001\000\176\001\000\176\144\160\001\000\177\001\000\177@@\144\160\001\000\180\001\000\180\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\183\144\160\001\000\184\001\000\184@@\144\160\001\000\187\001\000\187@@@@@\144\160\001\000\193\001\000\193\144\160\001\000\194\001\000\194@\144\160\001\000\196\001\000\196@@\145\160\160\001\002\199\001\000\161\160\160\001\000\199\001\000\199@@\144\160\001\000\201\001\000\201@\144\160\001\000\203\001\000\203@\144\160\001\000\205\001\000\205\144\160\001\000\206\001\000\206@@@@\144\160\001\000\211\001\000\211\144\160\001\000\212\001\000\212@\144\160\001\000\214\001\000\214\144\160\001\000\215\001\000\215\144\160\001\002\216\001\000\162\144\160\001\002\217\001\000\255\144\160\001\000\218\001\000\218\144\160\001\002\219\001\000\178\144\160\001\000\220\001\000\220\145\160\160\001\002\221\001\000\189\160\160\001\000\221\001\000\221@@\144\160\001\000\223\001\000\223@\144\160\001\000\225\001\000\225\144\160\001\000\226\001\000\226@\144\160\001\000\228\001\000\228@@\144\160\001\000\231\001\000\231@\144\160\001\000\233\001\000\233@\144\160\001\000\235\001\000\235@\144\160\001\000\237\001\000\237\144\160\001\000\238\001\000\238@@@@\144\160\001\000\243\001\000\243\144\160\001\000\244\001\000\244@\144\160\001\000\246\001\000\246\144\160\001\000\247\001\000\247@@\144\160\001\000\250\001\000\250@\144\160\001\000\252\001\000\252\144\160\001\000\253\001\000\253@@" 0 : Netmappings.from_uni_list array);;
- let windows1251_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002D\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001\004\002\001\004\003\001 \026\001\004S\001 \030\001 &\001  \001 !\001 \172\001 0\001\004\t\001 9\001\004\n\001\004\012\001\004\011\001\004\015\001\004R\001 \024\001 \025\001 \028\001 \029\001 \"\001 \019\001 \020\000\255\001!\"\001\004Y\001 :\001\004Z\001\004\\\001\004[\001\004_\001\000\160\001\004\014\001\004^\001\004\008\001\000\164\001\004\144\001\000\166\001\000\167\001\004\001\001\000\169\001\004\004\001\000\171\001\000\172\001\000\173\001\000\174\001\004\007\001\000\176\001\000\177\001\004\006\001\004V\001\004\145\001\000\181\001\000\182\001\000\183\001\004Q\001!\022\001\004T\001\000\187\001\004X\001\004\005\001\004U\001\004W\001\004\016\001\004\017\001\004\018\001\004\019\001\004\020\001\004\021\001\004\022\001\004\023\001\004\024\001\004\025\001\004\026\001\004\027\001\004\028\001\004\029\001\004\030\001\004\031\001\004 \001\004!\001\004\"\001\004#\001\004$\001\004%\001\004&\001\004'\001\004(\001\004)\001\004*\001\004+\001\004,\001\004-\001\004.\001\004/\001\0040\001\0041\001\0042\001\0043\001\0044\001\0045\001\0046\001\0047\001\0048\001\0049\001\004:\001\004;\001\004<\001\004=\001\004>\001\004?\001\004@\001\004A\001\004B\001\004C\001\004D\001\004E\001\004F\001\004G\001\004H\001\004I\001\004J\001\004K\001\004L\001\004M\001\004N\001\004O" 0 : int array);;
-let windows1251_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007\166\000\000\000\000\000\000\007\129\000\000\007\129\008\000\004\000\000\144\160@@\145\160\160AA\160\160\001\004\001\001\000\168@\145\160\160BB\160\160\001\004\002\001\000\128@\145\160\160CC\160\160\001\004\003\001\000\129@\145\160\160DD\160\160\001\004\004\001\000\170@\145\160\160EE\160\160\001\004\005\001\000\189@\145\160\160FF\160\160\001\004\006\001\000\178@\145\160\160GG\160\160\001\004\007\001\000\175@\145\160\160HH\160\160\001\004\008\001\000\163@\145\160\160II\160\160\001\004\t\001\000\138@\145\160\160JJ\160\160\001\004\n\001\000\140@\145\160\160KK\160\160\001\004\011\001\000\142@\145\160\160LL\160\160\001\004\012\001\000\141@\144\160MM\145\160\160NN\160\160\001\004\014\001\000\161@\145\160\160OO\160\160\001\004\015\001\000\143@\145\160\160PP\160\160\001\004\016\001\000\192@\145\160\160QQ\160\160\001\004\017\001\000\193@\145\160\160RR\160\160\001\004\018\001\000\194@\145\160\160SS\160\160\001 \019\001\000\150\160\160\001\004\019\001\000\195@\145\160\160TT\160\160\001 \020\001\000\151\160\160\001\004\020\001\000\196@\145\160\160UU\160\160\001\004\021\001\000\197@\145\160\160VV\160\160\001!\022\001\000\185\160\160\001\004\022\001\000\198@\145\160\160WW\160\160\001\004\023\001\000\199@\145\160\160XX\160\160\001 \024\001\000\145\160\160\001\004\024\001\000\200@\145\160\160YY\160\160\001 \025\001\000\146\160\160\001\004\025\001\000\201@\145\160\160ZZ\160\160\001 \026\001\000\130\160\160\001\004\026\001\000\202@\145\160\160[[\160\160\001\004\027\001\000\203@\145\160\160\\\\\160\160\001 \028\001\000\147\160\160\001\004\028\001\000\204@\145\160\160]]\160\160\001 \029\001\000\148\160\160\001\004\029\001\000\205@\145\160\160^^\160\160\001 \030\001\000\132\160\160\001\004\030\001\000\206@\145\160\160__\160\160\001\004\031\001\000\207@\145\160\160``\160\160\001  \001\000\134\160\160\001\004 \001\000\208@\145\160\160aa\160\160\001 !\001\000\135\160\160\001\004!\001\000\209@\145\160\160bb\160\160\001 \"\001\000\149\160\160\001!\"\001\000\153\160\160\001\004\"\001\000\210@\145\160\160cc\160\160\001\004#\001\000\211@\145\160\160dd\160\160\001\004$\001\000\212@\145\160\160ee\160\160\001\004%\001\000\213@\145\160\160ff\160\160\001 &\001\000\133\160\160\001\004&\001\000\214@\145\160\160gg\160\160\001\004'\001\000\215@\145\160\160hh\160\160\001\004(\001\000\216@\145\160\160ii\160\160\001\004)\001\000\217@\145\160\160jj\160\160\001\004*\001\000\218@\145\160\160kk\160\160\001\004+\001\000\219@\145\160\160ll\160\160\001\004,\001\000\220@\145\160\160mm\160\160\001\004-\001\000\221@\145\160\160nn\160\160\001\004.\001\000\222@\145\160\160oo\160\160\001\004/\001\000\223@\145\160\160pp\160\160\001 0\001\000\137\160\160\001\0040\001\000\224@\145\160\160qq\160\160\001\0041\001\000\225@\145\160\160rr\160\160\001\0042\001\000\226@\145\160\160ss\160\160\001\0043\001\000\227@\145\160\160tt\160\160\001\0044\001\000\228@\145\160\160uu\160\160\001\0045\001\000\229@\145\160\160vv\160\160\001\0046\001\000\230@\145\160\160ww\160\160\001\0047\001\000\231@\145\160\160xx\160\160\001\0048\001\000\232@\145\160\160yy\160\160\001 9\001\000\139\160\160\001\0049\001\000\233@\145\160\160zz\160\160\001 :\001\000\155\160\160\001\004:\001\000\234@\145\160\160{{\160\160\001\004;\001\000\235@\145\160\160||\160\160\001\004<\001\000\236@\145\160\160}}\160\160\001\004=\001\000\237@\145\160\160~~\160\160\001\004>\001\000\238@\145\160\160\127\127\160\160\001\004?\001\000\239@\145\160\160\000@\000@\160\160\001\004@\001\000\240@\145\160\160\000A\000A\160\160\001\004A\001\000\241@\145\160\160\000B\000B\160\160\001\004B\001\000\242@\145\160\160\000C\000C\160\160\001\004C\001\000\243@\145\160\160\000D\000D\160\160\001\004D\001\000\244@\145\160\160\000E\000E\160\160\001\004E\001\000\245@\145\160\160\000F\000F\160\160\001\004F\001\000\246@\145\160\160\000G\000G\160\160\001\004G\001\000\247@\145\160\160\000H\000H\160\160\001\004H\001\000\248@\145\160\160\000I\000I\160\160\001\004I\001\000\249@\145\160\160\000J\000J\160\160\001\004J\001\000\250@\145\160\160\000K\000K\160\160\001\004K\001\000\251@\145\160\160\000L\000L\160\160\001\004L\001\000\252@\145\160\160\000M\000M\160\160\001\004M\001\000\253@\145\160\160\000N\000N\160\160\001\004N\001\000\254@\145\160\160\000O\000O\160\160\001\004O\001\000\255@\144\160\000P\000P\145\160\160\000Q\000Q\160\160\001\004Q\001\000\184@\145\160\160\000R\000R\160\160\001\004R\001\000\144@\145\160\160\000S\000S\160\160\001\004S\001\000\131@\145\160\160\000T\000T\160\160\001\004T\001\000\186@\145\160\160\000U\000U\160\160\001\004U\001\000\190@\145\160\160\000V\000V\160\160\001\004V\001\000\179@\145\160\160\000W\000W\160\160\001\004W\001\000\191@\145\160\160\000X\000X\160\160\001\004X\001\000\188@\145\160\160\000Y\000Y\160\160\001\004Y\001\000\154@\145\160\160\000Z\000Z\160\160\001\004Z\001\000\156@\145\160\160\000[\000[\160\160\001\004[\001\000\158@\145\160\160\000\\\000\\\160\160\001\004\\\001\000\157@\144\160\000]\000]\145\160\160\000^\000^\160\160\001\004^\001\000\162@\145\160\160\000_\000_\160\160\001\004_\001\000\159@\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127@@@@@@@@@@@@@@@@\144\160\001\004\144\001\000\165\144\160\001\004\145\001\000\180@@@@@@@@@@@@@@\144\160\001\000\160\001\000\160@@@\144\160\001\000\164\001\000\164@\144\160\001\000\166\001\000\166\144\160\001\000\167\001\000\167@\144\160\001\000\169\001\000\169@\144\160\001\000\171\001\000\171\145\160\160\001 \172\001\000\136\160\160\001\000\172\001\000\172@\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174@\144\160\001\000\176\001\000\176\144\160\001\000\177\001\000\177@@@\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\183@@@\144\160\001\000\187\001\000\187@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let windows1252_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002@\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001 \172\000\255\001 \026\001\001\146\001 \030\001 &\001  \001 !\001\002\198\001 0\001\001`\001 9\001\001R\000\255\001\001}\000\255\000\255\001 \024\001 \025\001 \028\001 \029\001 \"\001 \019\001 \020\001\002\220\001!\"\001\001a\001 :\001\001S\000\255\001\001~\001\001x\001\000\160\001\000\161\001\000\162\001\000\163\001\000\164\001\000\165\001\000\166\001\000\167\001\000\168\001\000\169\001\000\170\001\000\171\001\000\172\001\000\173\001\000\174\001\000\175\001\000\176\001\000\177\001\000\178\001\000\179\001\000\180\001\000\181\001\000\182\001\000\183\001\000\184\001\000\185\001\000\186\001\000\187\001\000\188\001\000\189\001\000\190\001\000\191\001\000\192\001\000\193\001\000\194\001\000\195\001\000\196\001\000\197\001\000\198\001\000\199\001\000\200\001\000\201\001\000\202\001\000\203\001\000\204\001\000\205\001\000\206\001\000\207\001\000\208\001\000\209\001\000\210\001\000\211\001\000\212\001\000\213\001\000\214\001\000\215\001\000\216\001\000\217\001\000\218\001\000\219\001\000\220\001\000\221\001\000\222\001\000\223\001\000\224\001\000\225\001\000\226\001\000\227\001\000\228\001\000\229\001\000\230\001\000\231\001\000\232\001\000\233\001\000\234\001\000\235\001\000\236\001\000\237\001\000\238\001\000\239\001\000\240\001\000\241\001\000\242\001\000\243\001\000\244\001\000\245\001\000\246\001\000\247\001\000\248\001\000\249\001\000\250\001\000\251\001\000\252\001\000\253\001\000\254\001\000\255" 0 : int array);;
-let windows1252_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\174\000\000\000\000\000\000\006M\000\000\006M\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\145\160\160SS\160\160\001 \019\001\000\150@\145\160\160TT\160\160\001 \020\001\000\151@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001 \024\001\000\145@\145\160\160YY\160\160\001 \025\001\000\146@\145\160\160ZZ\160\160\001 \026\001\000\130@\144\160[[\145\160\160\\\\\160\160\001 \028\001\000\147@\145\160\160]]\160\160\001 \029\001\000\148@\145\160\160^^\160\160\001 \030\001\000\132@\144\160__\145\160\160``\160\160\001  \001\000\134@\145\160\160aa\160\160\001 !\001\000\135@\145\160\160bb\160\160\001 \"\001\000\149\160\160\001!\"\001\000\153@\144\160cc\144\160dd\144\160ee\145\160\160ff\160\160\001 &\001\000\133@\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\145\160\160pp\160\160\001 0\001\000\137@\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\145\160\160yy\160\160\001 9\001\000\139@\145\160\160zz\160\160\001 :\001\000\155@\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\145\160\160\000R\000R\160\160\001\001R\001\000\140@\145\160\160\000S\000S\160\160\001\001S\001\000\156@\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001\001`\001\000\138@\145\160\160\000a\000a\160\160\001\001a\001\000\154@\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\145\160\160\000x\000x\160\160\001\001x\001\000\159@\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\145\160\160\000}\000}\160\160\001\001}\001\000\142@\145\160\160\000~\000~\160\160\001\001~\001\000\158@\144\160\000\127\000\127@@@@@@@@@@@@@@@@@@\144\160\001\001\146\001\000\131@@@@@@@@@@@@@\144\160\001\000\160\001\000\160\144\160\001\000\161\001\000\161\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163\144\160\001\000\164\001\000\164\144\160\001\000\165\001\000\165\144\160\001\000\166\001\000\166\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\168\144\160\001\000\169\001\000\169\144\160\001\000\170\001\000\170\144\160\001\000\171\001\000\171\145\160\160\001 \172\001\000\128\160\160\001\000\172\001\000\172@\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174\144\160\001\000\175\001\000\175\144\160\001\000\176\001\000\176\144\160\001\000\177\001\000\177\144\160\001\000\178\001\000\178\144\160\001\000\179\001\000\179\144\160\001\000\180\001\000\180\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\183\144\160\001\000\184\001\000\184\144\160\001\000\185\001\000\185\144\160\001\000\186\001\000\186\144\160\001\000\187\001\000\187\144\160\001\000\188\001\000\188\144\160\001\000\189\001\000\189\144\160\001\000\190\001\000\190\144\160\001\000\191\001\000\191\144\160\001\000\192\001\000\192\144\160\001\000\193\001\000\193\144\160\001\000\194\001\000\194\144\160\001\000\195\001\000\195\144\160\001\000\196\001\000\196\144\160\001\000\197\001\000\197\145\160\160\001\002\198\001\000\136\160\160\001\000\198\001\000\198@\144\160\001\000\199\001\000\199\144\160\001\000\200\001\000\200\144\160\001\000\201\001\000\201\144\160\001\000\202\001\000\202\144\160\001\000\203\001\000\203\144\160\001\000\204\001\000\204\144\160\001\000\205\001\000\205\144\160\001\000\206\001\000\206\144\160\001\000\207\001\000\207\144\160\001\000\208\001\000\208\144\160\001\000\209\001\000\209\144\160\001\000\210\001\000\210\144\160\001\000\211\001\000\211\144\160\001\000\212\001\000\212\144\160\001\000\213\001\000\213\144\160\001\000\214\001\000\214\144\160\001\000\215\001\000\215\144\160\001\000\216\001\000\216\144\160\001\000\217\001\000\217\144\160\001\000\218\001\000\218\144\160\001\000\219\001\000\219\145\160\160\001\002\220\001\000\152\160\160\001\000\220\001\000\220@\144\160\001\000\221\001\000\221\144\160\001\000\222\001\000\222\144\160\001\000\223\001\000\223\144\160\001\000\224\001\000\224\144\160\001\000\225\001\000\225\144\160\001\000\226\001\000\226\144\160\001\000\227\001\000\227\144\160\001\000\228\001\000\228\144\160\001\000\229\001\000\229\144\160\001\000\230\001\000\230\144\160\001\000\231\001\000\231\144\160\001\000\232\001\000\232\144\160\001\000\233\001\000\233\144\160\001\000\234\001\000\234\144\160\001\000\235\001\000\235\144\160\001\000\236\001\000\236\144\160\001\000\237\001\000\237\144\160\001\000\238\001\000\238\144\160\001\000\239\001\000\239\144\160\001\000\240\001\000\240\144\160\001\000\241\001\000\241\144\160\001\000\242\001\000\242\144\160\001\000\243\001\000\243\144\160\001\000\244\001\000\244\144\160\001\000\245\001\000\245\144\160\001\000\246\001\000\246\144\160\001\000\247\001\000\247\144\160\001\000\248\001\000\248\144\160\001\000\249\001\000\249\144\160\001\000\250\001\000\250\144\160\001\000\251\001\000\251\144\160\001\000\252\001\000\252\144\160\001\000\253\001\000\253\144\160\001\000\254\001\000\254\144\160\001\000\255\001\000\255" 0 : Netmappings.from_uni_list array);;
- let windows1253_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\0024\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001 \172\000\255\001 \026\001\001\146\001 \030\001 &\001  \001 !\000\255\001 0\000\255\001 9\000\255\000\255\000\255\000\255\000\255\001 \024\001 \025\001 \028\001 \029\001 \"\001 \019\001 \020\000\255\001!\"\000\255\001 :\000\255\000\255\000\255\000\255\001\000\160\001\003\133\001\003\134\001\000\163\001\000\164\001\000\165\001\000\166\001\000\167\001\000\168\001\000\169\000\255\001\000\171\001\000\172\001\000\173\001\000\174\001 \021\001\000\176\001\000\177\001\000\178\001\000\179\001\003\132\001\000\181\001\000\182\001\000\183\001\003\136\001\003\137\001\003\138\001\000\187\001\003\140\001\000\189\001\003\142\001\003\143\001\003\144\001\003\145\001\003\146\001\003\147\001\003\148\001\003\149\001\003\150\001\003\151\001\003\152\001\003\153\001\003\154\001\003\155\001\003\156\001\003\157\001\003\158\001\003\159\001\003\160\001\003\161\000\255\001\003\163\001\003\164\001\003\165\001\003\166\001\003\167\001\003\168\001\003\169\001\003\170\001\003\171\001\003\172\001\003\173\001\003\174\001\003\175\001\003\176\001\003\177\001\003\178\001\003\179\001\003\180\001\003\181\001\003\182\001\003\183\001\003\184\001\003\185\001\003\186\001\003\187\001\003\188\001\003\189\001\003\190\001\003\191\001\003\192\001\003\193\001\003\194\001\003\195\001\003\196\001\003\197\001\003\198\001\003\199\001\003\200\001\003\201\001\003\202\001\003\203\001\003\204\001\003\205\001\003\206\000\255" 0 : int array);;
-let windows1253_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\130\000\000\000\000\000\000\006F\000\000\006F\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\145\160\160SS\160\160\001 \019\001\000\150@\145\160\160TT\160\160\001 \020\001\000\151@\145\160\160UU\160\160\001 \021\001\000\175@\144\160VV\144\160WW\145\160\160XX\160\160\001 \024\001\000\145@\145\160\160YY\160\160\001 \025\001\000\146@\145\160\160ZZ\160\160\001 \026\001\000\130@\144\160[[\145\160\160\\\\\160\160\001 \028\001\000\147@\145\160\160]]\160\160\001 \029\001\000\148@\145\160\160^^\160\160\001 \030\001\000\132@\144\160__\145\160\160``\160\160\001  \001\000\134@\145\160\160aa\160\160\001 !\001\000\135@\145\160\160bb\160\160\001 \"\001\000\149\160\160\001!\"\001\000\153@\144\160cc\144\160dd\144\160ee\145\160\160ff\160\160\001 &\001\000\133@\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\145\160\160pp\160\160\001 0\001\000\137@\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\145\160\160yy\160\160\001 9\001\000\139@\145\160\160zz\160\160\001 :\001\000\155@\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127@@@@\144\160\001\003\132\001\000\180\144\160\001\003\133\001\000\161\144\160\001\003\134\001\000\162@\144\160\001\003\136\001\000\184\144\160\001\003\137\001\000\185\144\160\001\003\138\001\000\186@\144\160\001\003\140\001\000\188@\144\160\001\003\142\001\000\190\144\160\001\003\143\001\000\191\144\160\001\003\144\001\000\192\144\160\001\003\145\001\000\193\145\160\160\001\001\146\001\000\131\160\160\001\003\146\001\000\194@\144\160\001\003\147\001\000\195\144\160\001\003\148\001\000\196\144\160\001\003\149\001\000\197\144\160\001\003\150\001\000\198\144\160\001\003\151\001\000\199\144\160\001\003\152\001\000\200\144\160\001\003\153\001\000\201\144\160\001\003\154\001\000\202\144\160\001\003\155\001\000\203\144\160\001\003\156\001\000\204\144\160\001\003\157\001\000\205\144\160\001\003\158\001\000\206\144\160\001\003\159\001\000\207\145\160\160\001\000\160\001\000\160\160\160\001\003\160\001\000\208@\144\160\001\003\161\001\000\209@\145\160\160\001\000\163\001\000\163\160\160\001\003\163\001\000\211@\145\160\160\001\000\164\001\000\164\160\160\001\003\164\001\000\212@\145\160\160\001\000\165\001\000\165\160\160\001\003\165\001\000\213@\145\160\160\001\000\166\001\000\166\160\160\001\003\166\001\000\214@\145\160\160\001\000\167\001\000\167\160\160\001\003\167\001\000\215@\145\160\160\001\000\168\001\000\168\160\160\001\003\168\001\000\216@\145\160\160\001\000\169\001\000\169\160\160\001\003\169\001\000\217@\144\160\001\003\170\001\000\218\145\160\160\001\000\171\001\000\171\160\160\001\003\171\001\000\219@\145\160\160\001 \172\001\000\128\160\160\001\000\172\001\000\172\160\160\001\003\172\001\000\220@\145\160\160\001\000\173\001\000\173\160\160\001\003\173\001\000\221@\145\160\160\001\000\174\001\000\174\160\160\001\003\174\001\000\222@\144\160\001\003\175\001\000\223\145\160\160\001\000\176\001\000\176\160\160\001\003\176\001\000\224@\145\160\160\001\000\177\001\000\177\160\160\001\003\177\001\000\225@\145\160\160\001\000\178\001\000\178\160\160\001\003\178\001\000\226@\145\160\160\001\000\179\001\000\179\160\160\001\003\179\001\000\227@\144\160\001\003\180\001\000\228\145\160\160\001\000\181\001\000\181\160\160\001\003\181\001\000\229@\145\160\160\001\000\182\001\000\182\160\160\001\003\182\001\000\230@\145\160\160\001\000\183\001\000\183\160\160\001\003\183\001\000\231@\144\160\001\003\184\001\000\232\144\160\001\003\185\001\000\233\144\160\001\003\186\001\000\234\145\160\160\001\000\187\001\000\187\160\160\001\003\187\001\000\235@\144\160\001\003\188\001\000\236\145\160\160\001\000\189\001\000\189\160\160\001\003\189\001\000\237@\144\160\001\003\190\001\000\238\144\160\001\003\191\001\000\239\144\160\001\003\192\001\000\240\144\160\001\003\193\001\000\241\144\160\001\003\194\001\000\242\144\160\001\003\195\001\000\243\144\160\001\003\196\001\000\244\144\160\001\003\197\001\000\245\144\160\001\003\198\001\000\246\144\160\001\003\199\001\000\247\144\160\001\003\200\001\000\248\144\160\001\003\201\001\000\249\144\160\001\003\202\001\000\250\144\160\001\003\203\001\000\251\144\160\001\003\204\001\000\252\144\160\001\003\205\001\000\253\144\160\001\003\206\001\000\254@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let windows1254_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002>\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001 \172\000\255\001 \026\001\001\146\001 \030\001 &\001  \001 !\001\002\198\001 0\001\001`\001 9\001\001R\000\255\000\255\000\255\000\255\001 \024\001 \025\001 \028\001 \029\001 \"\001 \019\001 \020\001\002\220\001!\"\001\001a\001 :\001\001S\000\255\000\255\001\001x\001\000\160\001\000\161\001\000\162\001\000\163\001\000\164\001\000\165\001\000\166\001\000\167\001\000\168\001\000\169\001\000\170\001\000\171\001\000\172\001\000\173\001\000\174\001\000\175\001\000\176\001\000\177\001\000\178\001\000\179\001\000\180\001\000\181\001\000\182\001\000\183\001\000\184\001\000\185\001\000\186\001\000\187\001\000\188\001\000\189\001\000\190\001\000\191\001\000\192\001\000\193\001\000\194\001\000\195\001\000\196\001\000\197\001\000\198\001\000\199\001\000\200\001\000\201\001\000\202\001\000\203\001\000\204\001\000\205\001\000\206\001\000\207\001\001\030\001\000\209\001\000\210\001\000\211\001\000\212\001\000\213\001\000\214\001\000\215\001\000\216\001\000\217\001\000\218\001\000\219\001\000\220\001\0010\001\001^\001\000\223\001\000\224\001\000\225\001\000\226\001\000\227\001\000\228\001\000\229\001\000\230\001\000\231\001\000\232\001\000\233\001\000\234\001\000\235\001\000\236\001\000\237\001\000\238\001\000\239\001\001\031\001\000\241\001\000\242\001\000\243\001\000\244\001\000\245\001\000\246\001\000\247\001\000\248\001\000\249\001\000\250\001\000\251\001\000\252\001\0011\001\001_\001\000\255" 0 : int array);;
-let windows1254_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\168\000\000\000\000\000\000\006M\000\000\006M\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\144\160PP\144\160QQ\144\160RR\145\160\160SS\160\160\001 \019\001\000\150@\145\160\160TT\160\160\001 \020\001\000\151@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001 \024\001\000\145@\145\160\160YY\160\160\001 \025\001\000\146@\145\160\160ZZ\160\160\001 \026\001\000\130@\144\160[[\145\160\160\\\\\160\160\001 \028\001\000\147@\145\160\160]]\160\160\001 \029\001\000\148@\145\160\160^^\160\160\001 \030\001\000\132\160\160\001\001\030\001\000\208@\145\160\160__\160\160\001\001\031\001\000\240@\145\160\160``\160\160\001  \001\000\134@\145\160\160aa\160\160\001 !\001\000\135@\145\160\160bb\160\160\001 \"\001\000\149\160\160\001!\"\001\000\153@\144\160cc\144\160dd\144\160ee\145\160\160ff\160\160\001 &\001\000\133@\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\145\160\160pp\160\160\001 0\001\000\137\160\160\001\0010\001\000\221@\145\160\160qq\160\160\001\0011\001\000\253@\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\145\160\160yy\160\160\001 9\001\000\139@\145\160\160zz\160\160\001 :\001\000\155@\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\145\160\160\000R\000R\160\160\001\001R\001\000\140@\145\160\160\000S\000S\160\160\001\001S\001\000\156@\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\145\160\160\000^\000^\160\160\001\001^\001\000\222@\145\160\160\000_\000_\160\160\001\001_\001\000\254@\145\160\160\000`\000`\160\160\001\001`\001\000\138@\145\160\160\000a\000a\160\160\001\001a\001\000\154@\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\145\160\160\000x\000x\160\160\001\001x\001\000\159@\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127@@@@@@@@@@@@@@@@@@\144\160\001\001\146\001\000\131@@@@@@@@@@@@@\144\160\001\000\160\001\000\160\144\160\001\000\161\001\000\161\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163\144\160\001\000\164\001\000\164\144\160\001\000\165\001\000\165\144\160\001\000\166\001\000\166\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\168\144\160\001\000\169\001\000\169\144\160\001\000\170\001\000\170\144\160\001\000\171\001\000\171\145\160\160\001 \172\001\000\128\160\160\001\000\172\001\000\172@\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174\144\160\001\000\175\001\000\175\144\160\001\000\176\001\000\176\144\160\001\000\177\001\000\177\144\160\001\000\178\001\000\178\144\160\001\000\179\001\000\179\144\160\001\000\180\001\000\180\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\183\144\160\001\000\184\001\000\184\144\160\001\000\185\001\000\185\144\160\001\000\186\001\000\186\144\160\001\000\187\001\000\187\144\160\001\000\188\001\000\188\144\160\001\000\189\001\000\189\144\160\001\000\190\001\000\190\144\160\001\000\191\001\000\191\144\160\001\000\192\001\000\192\144\160\001\000\193\001\000\193\144\160\001\000\194\001\000\194\144\160\001\000\195\001\000\195\144\160\001\000\196\001\000\196\144\160\001\000\197\001\000\197\145\160\160\001\002\198\001\000\136\160\160\001\000\198\001\000\198@\144\160\001\000\199\001\000\199\144\160\001\000\200\001\000\200\144\160\001\000\201\001\000\201\144\160\001\000\202\001\000\202\144\160\001\000\203\001\000\203\144\160\001\000\204\001\000\204\144\160\001\000\205\001\000\205\144\160\001\000\206\001\000\206\144\160\001\000\207\001\000\207@\144\160\001\000\209\001\000\209\144\160\001\000\210\001\000\210\144\160\001\000\211\001\000\211\144\160\001\000\212\001\000\212\144\160\001\000\213\001\000\213\144\160\001\000\214\001\000\214\144\160\001\000\215\001\000\215\144\160\001\000\216\001\000\216\144\160\001\000\217\001\000\217\144\160\001\000\218\001\000\218\144\160\001\000\219\001\000\219\145\160\160\001\002\220\001\000\152\160\160\001\000\220\001\000\220@@@\144\160\001\000\223\001\000\223\144\160\001\000\224\001\000\224\144\160\001\000\225\001\000\225\144\160\001\000\226\001\000\226\144\160\001\000\227\001\000\227\144\160\001\000\228\001\000\228\144\160\001\000\229\001\000\229\144\160\001\000\230\001\000\230\144\160\001\000\231\001\000\231\144\160\001\000\232\001\000\232\144\160\001\000\233\001\000\233\144\160\001\000\234\001\000\234\144\160\001\000\235\001\000\235\144\160\001\000\236\001\000\236\144\160\001\000\237\001\000\237\144\160\001\000\238\001\000\238\144\160\001\000\239\001\000\239@\144\160\001\000\241\001\000\241\144\160\001\000\242\001\000\242\144\160\001\000\243\001\000\243\144\160\001\000\244\001\000\244\144\160\001\000\245\001\000\245\144\160\001\000\246\001\000\246\144\160\001\000\247\001\000\247\144\160\001\000\248\001\000\248\144\160\001\000\249\001\000\249\144\160\001\000\250\001\000\250\144\160\001\000\251\001\000\251\144\160\001\000\252\001\000\252@@\144\160\001\000\255\001\000\255" 0 : Netmappings.from_uni_list array);;
- let windows1255_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002.\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001 \172\000\255\001 \026\001\001\146\001 \030\001 &\001  \001 !\001\002\198\001 0\000\255\001 9\000\255\000\255\000\255\000\255\000\255\001 \024\001 \025\001 \028\001 \029\001 \"\001 \019\001 \020\001\002\220\001!\"\000\255\001 :\000\255\000\255\000\255\000\255\001\000\160\001\000\161\001\000\162\001\000\163\001 \170\001\000\165\001\000\166\001\000\167\001\000\168\001\000\169\001\000\215\001\000\171\001\000\172\001\000\173\001\000\174\001\000\175\001\000\176\001\000\177\001\000\178\001\000\179\001\000\180\001\000\181\001\000\182\001\000\183\001\000\184\001\000\185\001\000\247\001\000\187\001\000\188\001\000\189\001\000\190\001\000\191\001\005\176\001\005\177\001\005\178\001\005\179\001\005\180\001\005\181\001\005\182\001\005\183\001\005\184\001\005\185\000\255\001\005\187\001\005\188\001\005\189\001\005\190\001\005\191\001\005\192\001\005\193\001\005\194\001\005\195\001\005\240\001\005\241\001\005\242\001\005\243\001\005\244\000\255\000\255\000\255\000\255\000\255\000\255\000\255\001\005\208\001\005\209\001\005\210\001\005\211\001\005\212\001\005\213\001\005\214\001\005\215\001\005\216\001\005\217\001\005\218\001\005\219\001\005\220\001\005\221\001\005\222\001\005\223\001\005\224\001\005\225\001\005\226\001\005\227\001\005\228\001\005\229\001\005\230\001\005\231\001\005\232\001\005\233\001\005\234\000\255\000\255\001 \014\001 \015\000\255" 0 : int array);;
-let windows1255_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006N\000\000\000\000\000\000\006\027\000\000\006\027\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\144\160LL\144\160MM\145\160\160NN\160\160\001 \014\001\000\253@\145\160\160OO\160\160\001 \015\001\000\254@\144\160PP\144\160QQ\144\160RR\145\160\160SS\160\160\001 \019\001\000\150@\145\160\160TT\160\160\001 \020\001\000\151@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001 \024\001\000\145@\145\160\160YY\160\160\001 \025\001\000\146@\145\160\160ZZ\160\160\001 \026\001\000\130@\144\160[[\145\160\160\\\\\160\160\001 \028\001\000\147@\145\160\160]]\160\160\001 \029\001\000\148@\145\160\160^^\160\160\001 \030\001\000\132@\144\160__\145\160\160``\160\160\001  \001\000\134@\145\160\160aa\160\160\001 !\001\000\135@\145\160\160bb\160\160\001 \"\001\000\149\160\160\001!\"\001\000\153@\144\160cc\144\160dd\144\160ee\145\160\160ff\160\160\001 &\001\000\133@\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\145\160\160pp\160\160\001 0\001\000\137@\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\145\160\160yy\160\160\001 9\001\000\139@\145\160\160zz\160\160\001 :\001\000\155@\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127@@@@@@@@@@@@@@@@@@\144\160\001\001\146\001\000\131@@@@@@@@@@@@@\144\160\001\000\160\001\000\160\144\160\001\000\161\001\000\161\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163@\144\160\001\000\165\001\000\165\144\160\001\000\166\001\000\166\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\168\144\160\001\000\169\001\000\169\144\160\001 \170\001\000\164\144\160\001\000\171\001\000\171\145\160\160\001 \172\001\000\128\160\160\001\000\172\001\000\172@\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174\144\160\001\000\175\001\000\175\145\160\160\001\000\176\001\000\176\160\160\001\005\176\001\000\192@\145\160\160\001\000\177\001\000\177\160\160\001\005\177\001\000\193@\145\160\160\001\000\178\001\000\178\160\160\001\005\178\001\000\194@\145\160\160\001\000\179\001\000\179\160\160\001\005\179\001\000\195@\145\160\160\001\000\180\001\000\180\160\160\001\005\180\001\000\196@\145\160\160\001\000\181\001\000\181\160\160\001\005\181\001\000\197@\145\160\160\001\000\182\001\000\182\160\160\001\005\182\001\000\198@\145\160\160\001\000\183\001\000\183\160\160\001\005\183\001\000\199@\145\160\160\001\000\184\001\000\184\160\160\001\005\184\001\000\200@\145\160\160\001\000\185\001\000\185\160\160\001\005\185\001\000\201@@\145\160\160\001\000\187\001\000\187\160\160\001\005\187\001\000\203@\145\160\160\001\000\188\001\000\188\160\160\001\005\188\001\000\204@\145\160\160\001\000\189\001\000\189\160\160\001\005\189\001\000\205@\145\160\160\001\000\190\001\000\190\160\160\001\005\190\001\000\206@\145\160\160\001\000\191\001\000\191\160\160\001\005\191\001\000\207@\144\160\001\005\192\001\000\208\144\160\001\005\193\001\000\209\144\160\001\005\194\001\000\210\144\160\001\005\195\001\000\211@@\144\160\001\002\198\001\000\136@@@@@@@@@\144\160\001\005\208\001\000\224\144\160\001\005\209\001\000\225\144\160\001\005\210\001\000\226\144\160\001\005\211\001\000\227\144\160\001\005\212\001\000\228\144\160\001\005\213\001\000\229\144\160\001\005\214\001\000\230\145\160\160\001\000\215\001\000\170\160\160\001\005\215\001\000\231@\144\160\001\005\216\001\000\232\144\160\001\005\217\001\000\233\144\160\001\005\218\001\000\234\144\160\001\005\219\001\000\235\145\160\160\001\002\220\001\000\152\160\160\001\005\220\001\000\236@\144\160\001\005\221\001\000\237\144\160\001\005\222\001\000\238\144\160\001\005\223\001\000\239\144\160\001\005\224\001\000\240\144\160\001\005\225\001\000\241\144\160\001\005\226\001\000\242\144\160\001\005\227\001\000\243\144\160\001\005\228\001\000\244\144\160\001\005\229\001\000\245\144\160\001\005\230\001\000\246\144\160\001\005\231\001\000\247\144\160\001\005\232\001\000\248\144\160\001\005\233\001\000\249\144\160\001\005\234\001\000\250@@@@@\144\160\001\005\240\001\000\212\144\160\001\005\241\001\000\213\144\160\001\005\242\001\000\214\144\160\001\005\243\001\000\215\144\160\001\005\244\001\000\216@@\144\160\001\000\247\001\000\186@@@@@@@@" 0 : Netmappings.from_uni_list array);;
- let windows1256_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002E\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001 \172\001\006~\001 \026\001\001\146\001 \030\001 &\001  \001 !\001\002\198\001 0\001\006y\001 9\001\001R\001\006\134\001\006\152\001\006\136\001\006\175\001 \024\001 \025\001 \028\001 \029\001 \"\001 \019\001 \020\001\006\169\001!\"\001\006\145\001 :\001\001S\001 \012\001 \013\001\006\186\001\000\160\001\006\012\001\000\162\001\000\163\001\000\164\001\000\165\001\000\166\001\000\167\001\000\168\001\000\169\001\006\190\001\000\171\001\000\172\001\000\173\001\000\174\001\000\175\001\000\176\001\000\177\001\000\178\001\000\179\001\000\180\001\000\181\001\000\182\001\000\183\001\000\184\001\000\185\001\006\027\001\000\187\001\000\188\001\000\189\001\000\190\001\006\031\001\006\193\001\006!\001\006\"\001\006#\001\006$\001\006%\001\006&\001\006'\001\006(\001\006)\001\006*\001\006+\001\006,\001\006-\001\006.\001\006/\001\0060\001\0061\001\0062\001\0063\001\0064\001\0065\001\0066\001\000\215\001\0067\001\0068\001\0069\001\006:\001\006@\001\006A\001\006B\001\006C\001\000\224\001\006D\001\000\226\001\006E\001\006F\001\006G\001\006H\001\000\231\001\000\232\001\000\233\001\000\234\001\000\235\001\006I\001\006J\001\000\238\001\000\239\001\006K\001\006L\001\006M\001\006N\001\000\244\001\006O\001\006P\001\000\247\001\006Q\001\000\249\001\006R\001\000\251\001\000\252\001 \014\001 \015\001\006\210" 0 : int array);;
-let windows1256_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\007W\000\000\000\000\000\000\007\022\000\000\007\022\008\000\004\000\000\144\160@@\144\160AA\144\160BB\144\160CC\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001 \012\001\000\157\160\160\001\006\012\001\000\161@\145\160\160MM\160\160\001 \013\001\000\158@\145\160\160NN\160\160\001 \014\001\000\253@\145\160\160OO\160\160\001 \015\001\000\254@\144\160PP\144\160QQ\144\160RR\145\160\160SS\160\160\001 \019\001\000\150@\145\160\160TT\160\160\001 \020\001\000\151@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001 \024\001\000\145@\145\160\160YY\160\160\001 \025\001\000\146@\145\160\160ZZ\160\160\001 \026\001\000\130@\145\160\160[[\160\160\001\006\027\001\000\186@\145\160\160\\\\\160\160\001 \028\001\000\147@\145\160\160]]\160\160\001 \029\001\000\148@\145\160\160^^\160\160\001 \030\001\000\132@\145\160\160__\160\160\001\006\031\001\000\191@\145\160\160``\160\160\001  \001\000\134@\145\160\160aa\160\160\001 !\001\000\135\160\160\001\006!\001\000\193@\145\160\160bb\160\160\001 \"\001\000\149\160\160\001!\"\001\000\153\160\160\001\006\"\001\000\194@\145\160\160cc\160\160\001\006#\001\000\195@\145\160\160dd\160\160\001\006$\001\000\196@\145\160\160ee\160\160\001\006%\001\000\197@\145\160\160ff\160\160\001 &\001\000\133\160\160\001\006&\001\000\198@\145\160\160gg\160\160\001\006'\001\000\199@\145\160\160hh\160\160\001\006(\001\000\200@\145\160\160ii\160\160\001\006)\001\000\201@\145\160\160jj\160\160\001\006*\001\000\202@\145\160\160kk\160\160\001\006+\001\000\203@\145\160\160ll\160\160\001\006,\001\000\204@\145\160\160mm\160\160\001\006-\001\000\205@\145\160\160nn\160\160\001\006.\001\000\206@\145\160\160oo\160\160\001\006/\001\000\207@\145\160\160pp\160\160\001 0\001\000\137\160\160\001\0060\001\000\208@\145\160\160qq\160\160\001\0061\001\000\209@\145\160\160rr\160\160\001\0062\001\000\210@\145\160\160ss\160\160\001\0063\001\000\211@\145\160\160tt\160\160\001\0064\001\000\212@\145\160\160uu\160\160\001\0065\001\000\213@\145\160\160vv\160\160\001\0066\001\000\214@\145\160\160ww\160\160\001\0067\001\000\216@\145\160\160xx\160\160\001\0068\001\000\217@\145\160\160yy\160\160\001 9\001\000\139\160\160\001\0069\001\000\218@\145\160\160zz\160\160\001 :\001\000\155\160\160\001\006:\001\000\219@\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\145\160\160\000@\000@\160\160\001\006@\001\000\220@\145\160\160\000A\000A\160\160\001\006A\001\000\221@\145\160\160\000B\000B\160\160\001\006B\001\000\222@\145\160\160\000C\000C\160\160\001\006C\001\000\223@\145\160\160\000D\000D\160\160\001\006D\001\000\225@\145\160\160\000E\000E\160\160\001\006E\001\000\227@\145\160\160\000F\000F\160\160\001\006F\001\000\228@\145\160\160\000G\000G\160\160\001\006G\001\000\229@\145\160\160\000H\000H\160\160\001\006H\001\000\230@\145\160\160\000I\000I\160\160\001\006I\001\000\236@\145\160\160\000J\000J\160\160\001\006J\001\000\237@\145\160\160\000K\000K\160\160\001\006K\001\000\240@\145\160\160\000L\000L\160\160\001\006L\001\000\241@\145\160\160\000M\000M\160\160\001\006M\001\000\242@\145\160\160\000N\000N\160\160\001\006N\001\000\243@\145\160\160\000O\000O\160\160\001\006O\001\000\245@\145\160\160\000P\000P\160\160\001\006P\001\000\246@\145\160\160\000Q\000Q\160\160\001\006Q\001\000\248@\145\160\160\000R\000R\160\160\001\001R\001\000\140\160\160\001\006R\001\000\250@\145\160\160\000S\000S\160\160\001\001S\001\000\156@\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\145\160\160\000y\000y\160\160\001\006y\001\000\138@\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\145\160\160\000~\000~\160\160\001\006~\001\000\129@\144\160\000\127\000\127@@@@@@\144\160\001\006\134\001\000\141@\144\160\001\006\136\001\000\143@@@@@@@@\144\160\001\006\145\001\000\154\144\160\001\001\146\001\000\131@@@@@\144\160\001\006\152\001\000\142@@@@@@@\144\160\001\000\160\001\000\160@\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163\144\160\001\000\164\001\000\164\144\160\001\000\165\001\000\165\144\160\001\000\166\001\000\166\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\168\145\160\160\001\006\169\001\000\152\160\160\001\000\169\001\000\169@@\144\160\001\000\171\001\000\171\145\160\160\001 \172\001\000\128\160\160\001\000\172\001\000\172@\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174\145\160\160\001\006\175\001\000\144\160\160\001\000\175\001\000\175@\144\160\001\000\176\001\000\176\144\160\001\000\177\001\000\177\144\160\001\000\178\001\000\178\144\160\001\000\179\001\000\179\144\160\001\000\180\001\000\180\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\183\144\160\001\000\184\001\000\184\144\160\001\000\185\001\000\185\144\160\001\006\186\001\000\159\144\160\001\000\187\001\000\187\144\160\001\000\188\001\000\188\144\160\001\000\189\001\000\189\145\160\160\001\006\190\001\000\170\160\160\001\000\190\001\000\190@@@\144\160\001\006\193\001\000\192@@@@\144\160\001\002\198\001\000\136@@@@@@@@@@@\144\160\001\006\210\001\000\255@@@@\144\160\001\000\215\001\000\215@@@@@@@@\144\160\001\000\224\001\000\224@\144\160\001\000\226\001\000\226@@@@\144\160\001\000\231\001\000\231\144\160\001\000\232\001\000\232\144\160\001\000\233\001\000\233\144\160\001\000\234\001\000\234\144\160\001\000\235\001\000\235@@\144\160\001\000\238\001\000\238\144\160\001\000\239\001\000\239@@@@\144\160\001\000\244\001\000\244@@\144\160\001\000\247\001\000\247@\144\160\001\000\249\001\000\249@\144\160\001\000\251\001\000\251\144\160\001\000\252\001\000\252@@@" 0 : Netmappings.from_uni_list array);;
- let windows1257_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\0029\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001 \172\000\255\001 \026\000\255\001 \030\001 &\001  \001 !\000\255\001 0\000\255\001 9\000\255\001\000\168\001\002\199\001\000\184\000\255\001 \024\001 \025\001 \028\001 \029\001 \"\001 \019\001 \020\000\255\001!\"\000\255\001 :\000\255\001\000\175\001\002\219\000\255\001\000\160\000\255\001\000\162\001\000\163\001\000\164\000\255\001\000\166\001\000\167\001\000\216\001\000\169\001\001V\001\000\171\001\000\172\001\000\173\001\000\174\001\000\198\001\000\176\001\000\177\001\000\178\001\000\179\001\000\180\001\000\181\001\000\182\001\000\183\001\000\248\001\000\185\001\001W\001\000\187\001\000\188\001\000\189\001\000\190\001\000\230\001\001\004\001\001.\001\001\000\001\001\006\001\000\196\001\000\197\001\001\024\001\001\018\001\001\012\001\000\201\001\001y\001\001\022\001\001\"\001\0016\001\001*\001\001;\001\001`\001\001C\001\001E\001\000\211\001\001L\001\000\213\001\000\214\001\000\215\001\001r\001\001A\001\001Z\001\001j\001\000\220\001\001{\001\001}\001\000\223\001\001\005\001\001/\001\001\001\001\001\007\001\000\228\001\000\229\001\001\025\001\001\019\001\001\013\001\000\233\001\001z\001\001\023\001\001#\001\0017\001\001+\001\001<\001\001a\001\001D\001\001F\001\000\243\001\001M\001\000\245\001\000\246\001\000\247\001\001s\001\001B\001\001[\001\001k\001\000\252\001\001|\001\001~\001\002\217" 0 : int array);;
-let windows1257_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\234\000\000\000\000\000\000\006\186\000\000\006\186\008\000\004\000\000\145\160\160@@\160\160\001\001\000\001\000\194@\145\160\160AA\160\160\001\001\001\001\000\226@\144\160BB\144\160CC\145\160\160DD\160\160\001\001\004\001\000\192@\145\160\160EE\160\160\001\001\005\001\000\224@\145\160\160FF\160\160\001\001\006\001\000\195@\145\160\160GG\160\160\001\001\007\001\000\227@\144\160HH\144\160II\144\160JJ\144\160KK\145\160\160LL\160\160\001\001\012\001\000\200@\145\160\160MM\160\160\001\001\013\001\000\232@\144\160NN\144\160OO\144\160PP\144\160QQ\145\160\160RR\160\160\001\001\018\001\000\199@\145\160\160SS\160\160\001 \019\001\000\150\160\160\001\001\019\001\000\231@\145\160\160TT\160\160\001 \020\001\000\151@\144\160UU\145\160\160VV\160\160\001\001\022\001\000\203@\145\160\160WW\160\160\001\001\023\001\000\235@\145\160\160XX\160\160\001 \024\001\000\145\160\160\001\001\024\001\000\198@\145\160\160YY\160\160\001 \025\001\000\146\160\160\001\001\025\001\000\230@\145\160\160ZZ\160\160\001 \026\001\000\130@\144\160[[\145\160\160\\\\\160\160\001 \028\001\000\147@\145\160\160]]\160\160\001 \029\001\000\148@\145\160\160^^\160\160\001 \030\001\000\132@\144\160__\145\160\160``\160\160\001  \001\000\134@\145\160\160aa\160\160\001 !\001\000\135@\145\160\160bb\160\160\001 \"\001\000\149\160\160\001!\"\001\000\153\160\160\001\001\"\001\000\204@\145\160\160cc\160\160\001\001#\001\000\236@\144\160dd\144\160ee\145\160\160ff\160\160\001 &\001\000\133@\144\160gg\144\160hh\144\160ii\145\160\160jj\160\160\001\001*\001\000\206@\145\160\160kk\160\160\001\001+\001\000\238@\144\160ll\144\160mm\145\160\160nn\160\160\001\001.\001\000\193@\145\160\160oo\160\160\001\001/\001\000\225@\145\160\160pp\160\160\001 0\001\000\137@\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\145\160\160vv\160\160\001\0016\001\000\205@\145\160\160ww\160\160\001\0017\001\000\237@\144\160xx\145\160\160yy\160\160\001 9\001\000\139@\145\160\160zz\160\160\001 :\001\000\155@\145\160\160{{\160\160\001\001;\001\000\207@\145\160\160||\160\160\001\001<\001\000\239@\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\145\160\160\000A\000A\160\160\001\001A\001\000\217@\145\160\160\000B\000B\160\160\001\001B\001\000\249@\145\160\160\000C\000C\160\160\001\001C\001\000\209@\145\160\160\000D\000D\160\160\001\001D\001\000\241@\145\160\160\000E\000E\160\160\001\001E\001\000\210@\145\160\160\000F\000F\160\160\001\001F\001\000\242@\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\145\160\160\000L\000L\160\160\001\001L\001\000\212@\145\160\160\000M\000M\160\160\001\001M\001\000\244@\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\144\160\000R\000R\144\160\000S\000S\144\160\000T\000T\144\160\000U\000U\145\160\160\000V\000V\160\160\001\001V\001\000\170@\145\160\160\000W\000W\160\160\001\001W\001\000\186@\144\160\000X\000X\144\160\000Y\000Y\145\160\160\000Z\000Z\160\160\001\001Z\001\000\218@\145\160\160\000[\000[\160\160\001\001[\001\000\250@\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\145\160\160\000`\000`\160\160\001\001`\001\000\208@\145\160\160\000a\000a\160\160\001\001a\001\000\240@\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\145\160\160\000j\000j\160\160\001\001j\001\000\219@\145\160\160\000k\000k\160\160\001\001k\001\000\251@\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\145\160\160\000r\000r\160\160\001\001r\001\000\216@\145\160\160\000s\000s\160\160\001\001s\001\000\248@\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\144\160\000x\000x\145\160\160\000y\000y\160\160\001\001y\001\000\202@\145\160\160\000z\000z\160\160\001\001z\001\000\234@\145\160\160\000{\000{\160\160\001\001{\001\000\221@\145\160\160\000|\000|\160\160\001\001|\001\000\253@\145\160\160\000}\000}\160\160\001\001}\001\000\222@\145\160\160\000~\000~\160\160\001\001~\001\000\254@\144\160\000\127\000\127@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\144\160\001\000\160\001\000\160@\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163\144\160\001\000\164\001\000\164@\144\160\001\000\166\001\000\166\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\141\144\160\001\000\169\001\000\169@\144\160\001\000\171\001\000\171\145\160\160\001 \172\001\000\128\160\160\001\000\172\001\000\172@\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174\144\160\001\000\175\001\000\157\144\160\001\000\176\001\000\176\144\160\001\000\177\001\000\177\144\160\001\000\178\001\000\178\144\160\001\000\179\001\000\179\144\160\001\000\180\001\000\180\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\183\144\160\001\000\184\001\000\143\144\160\001\000\185\001\000\185@\144\160\001\000\187\001\000\187\144\160\001\000\188\001\000\188\144\160\001\000\189\001\000\189\144\160\001\000\190\001\000\190@@@@@\144\160\001\000\196\001\000\196\144\160\001\000\197\001\000\197\144\160\001\000\198\001\000\175\144\160\001\002\199\001\000\142@\144\160\001\000\201\001\000\201@@@@@@@@@\144\160\001\000\211\001\000\211@\144\160\001\000\213\001\000\213\144\160\001\000\214\001\000\214\144\160\001\000\215\001\000\215\144\160\001\000\216\001\000\168\144\160\001\002\217\001\000\255@\144\160\001\002\219\001\000\158\144\160\001\000\220\001\000\220@@\144\160\001\000\223\001\000\223@@@@\144\160\001\000\228\001\000\228\144\160\001\000\229\001\000\229\144\160\001\000\230\001\000\191@@\144\160\001\000\233\001\000\233@@@@@@@@@\144\160\001\000\243\001\000\243@\144\160\001\000\245\001\000\245\144\160\001\000\246\001\000\246\144\160\001\000\247\001\000\247\144\160\001\000\248\001\000\184@@@\144\160\001\000\252\001\000\252@@@" 0 : Netmappings.from_uni_list array);;
- let windows1258_to_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\002<\000\000\000\000\000\000\001\001\000\000\001\001\008\000\004\000\000@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\001 \172\000\255\001 \026\001\001\146\001 \030\001 &\001  \001 !\001\002\198\001 0\000\255\001 9\001\001R\000\255\000\255\000\255\000\255\001 \024\001 \025\001 \028\001 \029\001 \"\001 \019\001 \020\001\002\220\001!\"\000\255\001 :\001\001S\000\255\000\255\001\001x\001\000\160\001\000\161\001\000\162\001\000\163\001\000\164\001\000\165\001\000\166\001\000\167\001\000\168\001\000\169\001\000\170\001\000\171\001\000\172\001\000\173\001\000\174\001\000\175\001\000\176\001\000\177\001\000\178\001\000\179\001\000\180\001\000\181\001\000\182\001\000\183\001\000\184\001\000\185\001\000\186\001\000\187\001\000\188\001\000\189\001\000\190\001\000\191\001\000\192\001\000\193\001\000\194\001\001\002\001\000\196\001\000\197\001\000\198\001\000\199\001\000\200\001\000\201\001\000\202\001\000\203\001\003\000\001\000\205\001\000\206\001\000\207\001\001\016\001\000\209\001\003\t\001\000\211\001\000\212\001\001\160\001\000\214\001\000\215\001\000\216\001\000\217\001\000\218\001\000\219\001\000\220\001\001\175\001\003\003\001\000\223\001\000\224\001\000\225\001\000\226\001\001\003\001\000\228\001\000\229\001\000\230\001\000\231\001\000\232\001\000\233\001\000\234\001\000\235\001\003\001\001\000\237\001\000\238\001\000\239\001\001\017\001\000\241\001\003#\001\000\243\001\000\244\001\001\161\001\000\246\001\000\247\001\000\248\001\000\249\001\000\250\001\000\251\001\000\252\001\001\176\001 \171\001\000\255" 0 : int array);;
-let windows1258_from_unicode = lazy (Marshal.from_string "\132\149\166\190\000\000\006\174\000\000\000\000\000\000\006^\000\000\006^\008\000\004\000\000\145\160\160@@\160\160\001\003\000\001\000\204@\145\160\160AA\160\160\001\003\001\001\000\236@\145\160\160BB\160\160\001\001\002\001\000\195@\145\160\160CC\160\160\001\003\003\001\000\222\160\160\001\001\003\001\000\227@\144\160DD\144\160EE\144\160FF\144\160GG\144\160HH\145\160\160II\160\160\001\003\t\001\000\210@\144\160JJ\144\160KK\144\160LL\144\160MM\144\160NN\144\160OO\145\160\160PP\160\160\001\001\016\001\000\208@\145\160\160QQ\160\160\001\001\017\001\000\240@\144\160RR\145\160\160SS\160\160\001 \019\001\000\150@\145\160\160TT\160\160\001 \020\001\000\151@\144\160UU\144\160VV\144\160WW\145\160\160XX\160\160\001 \024\001\000\145@\145\160\160YY\160\160\001 \025\001\000\146@\145\160\160ZZ\160\160\001 \026\001\000\130@\144\160[[\145\160\160\\\\\160\160\001 \028\001\000\147@\145\160\160]]\160\160\001 \029\001\000\148@\145\160\160^^\160\160\001 \030\001\000\132@\144\160__\145\160\160``\160\160\001  \001\000\134@\145\160\160aa\160\160\001 !\001\000\135@\145\160\160bb\160\160\001 \"\001\000\149\160\160\001!\"\001\000\153@\145\160\160cc\160\160\001\003#\001\000\242@\144\160dd\144\160ee\145\160\160ff\160\160\001 &\001\000\133@\144\160gg\144\160hh\144\160ii\144\160jj\144\160kk\144\160ll\144\160mm\144\160nn\144\160oo\145\160\160pp\160\160\001 0\001\000\137@\144\160qq\144\160rr\144\160ss\144\160tt\144\160uu\144\160vv\144\160ww\144\160xx\145\160\160yy\160\160\001 9\001\000\139@\145\160\160zz\160\160\001 :\001\000\155@\144\160{{\144\160||\144\160}}\144\160~~\144\160\127\127\144\160\000@\000@\144\160\000A\000A\144\160\000B\000B\144\160\000C\000C\144\160\000D\000D\144\160\000E\000E\144\160\000F\000F\144\160\000G\000G\144\160\000H\000H\144\160\000I\000I\144\160\000J\000J\144\160\000K\000K\144\160\000L\000L\144\160\000M\000M\144\160\000N\000N\144\160\000O\000O\144\160\000P\000P\144\160\000Q\000Q\145\160\160\000R\000R\160\160\001\001R\001\000\140@\145\160\160\000S\000S\160\160\001\001S\001\000\156@\144\160\000T\000T\144\160\000U\000U\144\160\000V\000V\144\160\000W\000W\144\160\000X\000X\144\160\000Y\000Y\144\160\000Z\000Z\144\160\000[\000[\144\160\000\\\000\\\144\160\000]\000]\144\160\000^\000^\144\160\000_\000_\144\160\000`\000`\144\160\000a\000a\144\160\000b\000b\144\160\000c\000c\144\160\000d\000d\144\160\000e\000e\144\160\000f\000f\144\160\000g\000g\144\160\000h\000h\144\160\000i\000i\144\160\000j\000j\144\160\000k\000k\144\160\000l\000l\144\160\000m\000m\144\160\000n\000n\144\160\000o\000o\144\160\000p\000p\144\160\000q\000q\144\160\000r\000r\144\160\000s\000s\144\160\000t\000t\144\160\000u\000u\144\160\000v\000v\144\160\000w\000w\145\160\160\000x\000x\160\160\001\001x\001\000\159@\144\160\000y\000y\144\160\000z\000z\144\160\000{\000{\144\160\000|\000|\144\160\000}\000}\144\160\000~\000~\144\160\000\127\000\127@@@@@@@@@@@@@@@@@@\144\160\001\001\146\001\000\131@@@@@@@@@@@@@\145\160\160\001\000\160\001\000\160\160\160\001\001\160\001\000\213@\145\160\160\001\000\161\001\000\161\160\160\001\001\161\001\000\245@\144\160\001\000\162\001\000\162\144\160\001\000\163\001\000\163\144\160\001\000\164\001\000\164\144\160\001\000\165\001\000\165\144\160\001\000\166\001\000\166\144\160\001\000\167\001\000\167\144\160\001\000\168\001\000\168\144\160\001\000\169\001\000\169\144\160\001\000\170\001\000\170\145\160\160\001\000\171\001\000\171\160\160\001 \171\001\000\254@\145\160\160\001 \172\001\000\128\160\160\001\000\172\001\000\172@\144\160\001\000\173\001\000\173\144\160\001\000\174\001\000\174\145\160\160\001\000\175\001\000\175\160\160\001\001\175\001\000\221@\145\160\160\001\000\176\001\000\176\160\160\001\001\176\001\000\253@\144\160\001\000\177\001\000\177\144\160\001\000\178\001\000\178\144\160\001\000\179\001\000\179\144\160\001\000\180\001\000\180\144\160\001\000\181\001\000\181\144\160\001\000\182\001\000\182\144\160\001\000\183\001\000\183\144\160\001\000\184\001\000\184\144\160\001\000\185\001\000\185\144\160\001\000\186\001\000\186\144\160\001\000\187\001\000\187\144\160\001\000\188\001\000\188\144\160\001\000\189\001\000\189\144\160\001\000\190\001\000\190\144\160\001\000\191\001\000\191\144\160\001\000\192\001\000\192\144\160\001\000\193\001\000\193\144\160\001\000\194\001\000\194@\144\160\001\000\196\001\000\196\144\160\001\000\197\001\000\197\145\160\160\001\002\198\001\000\136\160\160\001\000\198\001\000\198@\144\160\001\000\199\001\000\199\144\160\001\000\200\001\000\200\144\160\001\000\201\001\000\201\144\160\001\000\202\001\000\202\144\160\001\000\203\001\000\203@\144\160\001\000\205\001\000\205\144\160\001\000\206\001\000\206\144\160\001\000\207\001\000\207@\144\160\001\000\209\001\000\209@\144\160\001\000\211\001\000\211\144\160\001\000\212\001\000\212@\144\160\001\000\214\001\000\214\144\160\001\000\215\001\000\215\144\160\001\000\216\001\000\216\144\160\001\000\217\001\000\217\144\160\001\000\218\001\000\218\144\160\001\000\219\001\000\219\145\160\160\001\002\220\001\000\152\160\160\001\000\220\001\000\220@@@\144\160\001\000\223\001\000\223\144\160\001\000\224\001\000\224\144\160\001\000\225\001\000\225\144\160\001\000\226\001\000\226@\144\160\001\000\228\001\000\228\144\160\001\000\229\001\000\229\144\160\001\000\230\001\000\230\144\160\001\000\231\001\000\231\144\160\001\000\232\001\000\232\144\160\001\000\233\001\000\233\144\160\001\000\234\001\000\234\144\160\001\000\235\001\000\235@\144\160\001\000\237\001\000\237\144\160\001\000\238\001\000\238\144\160\001\000\239\001\000\239@\144\160\001\000\241\001\000\241@\144\160\001\000\243\001\000\243\144\160\001\000\244\001\000\244@\144\160\001\000\246\001\000\246\144\160\001\000\247\001\000\247\144\160\001\000\248\001\000\248\144\160\001\000\249\001\000\249\144\160\001\000\250\001\000\250\144\160\001\000\251\001\000\251\144\160\001\000\252\001\000\252@@\144\160\001\000\255\001\000\255" 0 : Netmappings.from_uni_list array);;
- Hashtbl.add Netmappings.to_unicode `Enc_windows1258 windows1258_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_windows1258 windows1258_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_windows1257 windows1257_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_windows1257 windows1257_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_windows1256 windows1256_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_windows1256 windows1256_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_windows1255 windows1255_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_windows1255 windows1255_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_windows1254 windows1254_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_windows1254 windows1254_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_windows1253 windows1253_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_windows1253 windows1253_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_windows1252 windows1252_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_windows1252 windows1252_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_windows1251 windows1251_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_windows1251 windows1251_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_windows1250 windows1250_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_windows1250 windows1250_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_macroman macroman_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_macroman macroman_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_koi8r koi8r_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_koi8r koi8r_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_jis0201 jis0201_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_jis0201 jis0201_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_adobe_zapf_dingbats_encoding adobe_zapf_dingbats_encoding_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_adobe_zapf_dingbats_encoding adobe_zapf_dingbats_encoding_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_adobe_symbol_encoding adobe_symbol_encoding_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_adobe_symbol_encoding adobe_symbol_encoding_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_adobe_standard_encoding adobe_standard_encoding_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_adobe_standard_encoding adobe_standard_encoding_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp875 cp875_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp875 cp875_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp874 cp874_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp874 cp874_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp869 cp869_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp869 cp869_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp866 cp866_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp866 cp866_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp865 cp865_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp865 cp865_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp864 cp864_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp864 cp864_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp863 cp863_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp863 cp863_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp862 cp862_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp862 cp862_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp861 cp861_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp861 cp861_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp860 cp860_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp860 cp860_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp857 cp857_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp857 cp857_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp856 cp856_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp856 cp856_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp855 cp855_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp855 cp855_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp852 cp852_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp852 cp852_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp850 cp850_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp850 cp850_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp775 cp775_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp775 cp775_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp737 cp737_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp737 cp737_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp500 cp500_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp500 cp500_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp437 cp437_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp437 cp437_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp424 cp424_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp424 cp424_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp1026 cp1026_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp1026 cp1026_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp1006 cp1006_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp1006 cp1006_from_unicode;
-Hashtbl.add Netmappings.to_unicode `Enc_cp037 cp037_to_unicode;
-Hashtbl.add Netmappings.from_unicode `Enc_cp037 cp037_from_unicode;
-();;
diff --git a/helm/DEVEL/pxp/netstring/netstream.ml b/helm/DEVEL/pxp/netstring/netstream.ml
deleted file mode 100644 (file)
index 76c2e3a..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-type t =
-    { s_channel : in_channel;
-      s_maxlength : int option;
-      s_blocksize : int;
-      mutable s_current_length : int;
-      mutable s_at_eos : bool;
-      mutable s_win_pos : int;
-      mutable s_win_len : int;
-      s_netbuf : Netbuffer.t;
-      s_iobuf : string;
-    }
-;;
-
-
-let dump s text = 
-  print_string ("*** NETSTREAM DUMP " ^ text ^ "\n");
-  Printf.printf "current_length=%d  at_eos=%b  win_pos=%d  win_len=%d\n"
-                s.s_current_length s.s_at_eos s.s_win_pos s.s_win_len;
-  Printf.printf "netbuffer_length=%d  netbuffer_size=%d\n"
-                (Netbuffer.length s.s_netbuf)
-                (String.length(Netbuffer.unsafe_buffer s.s_netbuf));
-  Printf.printf "netbuffer=\"%s\"\n"
-                (String.escaped(Netbuffer.contents s.s_netbuf));
-  print_string "*** ---------------\n";
-  flush stdout
-;;
-
-
-let want_another_block s =
-  if not s.s_at_eos then begin
-    (* How much are we allowed to read? *)
-    let m =
-      match s.s_maxlength with
-         None   -> s.s_blocksize
-       | Some k -> min (k - s.s_current_length) s.s_blocksize
-    in
-    (* Read this. *)
-    let rec read_block k =
-      if k < m then
-       let n = 
-         input s.s_channel s.s_iobuf k (m - k) in
-       ( if n > 0 then
-           read_block (k+n)
-         else (* EOF *)
-           k
-       )
-      else
-       k
-    in
-    let n = read_block 0 in
-    (* If n < blocksize, EOS is reached. *)
-    Netbuffer.add_sub_string s.s_netbuf s.s_iobuf 0 n;
-    s.s_win_len        <- s.s_win_len + n;
-    s.s_current_length <- s.s_current_length + n;
-    s.s_at_eos         <- n < s.s_blocksize;
-
-    (* dump s "After appending block"; *)
-  end
-;;
-
-
-let want s n =
-  while not s.s_at_eos && s.s_win_len < n do
-    want_another_block s
-  done
-;;
-
-
-let want_minimum s =
-  want s (s.s_blocksize + s.s_blocksize)
-;;
-
-
-let move s n =
-  Netbuffer.delete s.s_netbuf 0 n;
-  s.s_win_pos <- s.s_win_pos + n;
-  s.s_win_len <- s.s_win_len - n;
-  want_minimum s;
-  (* dump s "After move"; *)
-;;
-
-
-let create_from_channel ch maxlength blocksize =
-  let s =
-    { s_channel = ch;
-      s_maxlength = maxlength;
-      s_blocksize = blocksize;
-      s_current_length = 0;
-      s_at_eos = false;
-      s_win_pos = 0;
-      s_win_len = 0;
-      s_netbuf = Netbuffer.create (2*blocksize);
-      s_iobuf = String.create blocksize;
-    }
-  in
-  want_minimum s;
-  s
-;;
-
-
-let create_from_string str =
-  let l = String.length str in
-  { s_channel = stdin;
-    s_maxlength = None;
-    s_blocksize = l;
-    s_current_length = l;
-    s_at_eos = true;
-    s_win_pos = 0;
-    s_win_len = l;
-    s_netbuf =
-      ( let nb = Netbuffer.create l in
-       Netbuffer.add_string nb str;
-       nb
-      );
-    s_iobuf = "";
-  }
-;;
-
-
-let block_size s = s.s_blocksize;;
-
-let current_length s = s.s_current_length;;
-
-let at_eos s = s.s_at_eos;;
-
-let window_position s = s.s_win_pos;;
-
-let window_length s = s.s_win_len;;
-
-let window s = s.s_netbuf;;
-
-let print_stream s =
-  Format.printf
-    "<NETSTREAM window:%d/%d total_length:%d eof=%b>"
-    s.s_win_pos
-    s.s_win_len
-    s.s_current_length
-    s.s_at_eos
-;;
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/06/24 20:20:33  gerd
- *     Added the toploop printer.
- *
- * Revision 1.1  2000/04/15 13:07:48  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netstream.mli b/helm/DEVEL/pxp/netstring/netstream.mli
deleted file mode 100644 (file)
index 7cb1857..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-(* A netstream is an input channel that is read block by block. The 
- * fragment of the channel currently loaded into memory is called the
- * current window of the netstream.
- *
- * PICTURE:
- *
- * 0            window_position     current_length                  EOS
- * +------------------+-------------------+--------------------------+
- *                    ====================
- *                     The current window
- *
- * window_length = current_length - window_position
- *
- * There is an automatism that the window has a certain length. If possible,
- * the window is at least twice the block size long, where a "block" is
- * the amount of data that is read from the input channel in one step.
- *
- * (The idea is that you choose as block size the number of bytes you want
- * to analyze at once, and which must be loaded into memory. You can start
- * your analysis at window_position and proceed until window_position +
- * blocksize without having to check whether your window is large enough.
- * Only when the first blocksize bytes of the window are already processed,
- * the window must be enlarged by loading the next block.)
- *
- * If you want that the window becomes larger, you can call 'want' (to
- * enlarge the window to a certain size) or 'want_another_block' (to load
- * just another block from the input channel). Note that this affects only
- * the current window and not future windows.
- *
- * If you do not need the first n bytes of the window anymore, you can
- * call 'move' to move the beginning of the window by n bytes. If the
- * window becomes too small after this operation, it is enlarged until
- * it has twice the block size or until it reaches EOS.
- *)
-
-type t
-
-val create_from_channel : in_channel -> int option -> int -> t
-    (* create_from_channel ch maxlength blocksize:
-     * The new netstream reads from the channel 'ch'. If maxlength = None,
-     * the channel is read until EOF. If maxlength = Some n, at most n bytes
-     * are read; i.e. the netstream reads until n bytes have been read or
-     * until EOF has been reached, whatever comes first. The blocksize 
-     * specifies the number of bytes to read at once.
-     *)
-
-val create_from_string : string -> t
-    (* Creates a new netstream from a string. The initial window of this
-     * netstream is a copy of the passed string.
-     *)
-
-val block_size : t -> int
-   (* Returns the (immutable) block size. *)
-
-val current_length : t -> int
-    (* Returns the number of bytes read so far. *)
-
-val at_eos : t -> bool
-    (* True iff EOS (end of stream) is reached, i.e. the last byte of the
-     * window is the last byte of the stream.
-     *)
-
-val window_position : t -> int
-    (* Returns the absolute position of the current window. *)
-
-val window_length : t -> int
-    (* Returns the length of the current window. *)
-
-val window : t -> Netbuffer.t
-    (* Returns the current window. *)
-
-val move : t -> int -> unit
-    (* move s n:
-     * Moves the window: The first n bytes of the current window are 
-     * discarded. If the window would become smaller than twice the
-     * blocksize and if the end of the stream is not yet reached, another
-     * block is read from the input channel and appended to the window.
-     * 
-     * PRECONDITION:
-     * - n <= window_length
-     *)
-
-val want : t -> int -> unit
-    (* want s n:
-     * If the window is smaller than n bytes, it is tried to enlarge
-     * the window such that it is at least n bytes long. The enlargement
-     * is not possible if the stream is not long enough; in this case
-     * the window becomes as large as possible.
-     *)
-
-val want_another_block : t -> unit
-    (* Enlarges the window by another block (if possible i.e. if the stream
-     * is long enough).
-     *)
-
-val print_stream : t -> unit
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/06/24 20:20:33  gerd
- *     Added the toploop printer.
- *
- * Revision 1.1  2000/04/15 13:07:48  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netstring.cma b/helm/DEVEL/pxp/netstring/netstring.cma
deleted file mode 100644 (file)
index 1cf66b5..0000000
Binary files a/helm/DEVEL/pxp/netstring/netstring.cma and /dev/null differ
diff --git a/helm/DEVEL/pxp/netstring/netstring.cmxa b/helm/DEVEL/pxp/netstring/netstring.cmxa
deleted file mode 100644 (file)
index f95c008..0000000
Binary files a/helm/DEVEL/pxp/netstring/netstring.cmxa and /dev/null differ
diff --git a/helm/DEVEL/pxp/netstring/netstring_mt.ml b/helm/DEVEL/pxp/netstring/netstring_mt.ml
deleted file mode 100644 (file)
index 96576f1..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* Initialize multi-threading mode: *)
-
-let str_mutex = Mutex.create();;
-let cgi_mutex = Mutex.create();;
-let mappings_mutex = Mutex.create();;
-
-Netstring_str.init_mt
-  (fun () -> Mutex.lock str_mutex)
-  (fun () -> Mutex.unlock str_mutex);
-Cgi.init_mt
-  (fun () -> Mutex.lock cgi_mutex)
-  (fun () -> Mutex.unlock cgi_mutex);
-Netmappings.init_mt
-  (fun () -> Mutex.lock mappings_mutex)
-  (fun () -> Mutex.unlock mappings_mutex)
-;;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/08/29 00:45:42  gerd
- *     Initializing Netmappings, too
- *
- * Revision 1.1  2000/06/25 21:15:27  gerd
- *     Initial revision
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netstring_mt.mli b/helm/DEVEL/pxp/netstring/netstring_mt.mli
deleted file mode 100644 (file)
index c224b2b..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* This module initializes the multi-threading mode of 
- * Netstring. You must link it with every application that
- * uses multi-threading.
- * PITFALL: Link this module _directly_ with the executable,
- * _don't_ put this module into a cma archive! This would not work!
- *)
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/06/25 21:15:27  gerd
- *     Initial revision
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netstring_str.ml b/helm/DEVEL/pxp/netstring/netstring_str.ml
deleted file mode 100644 (file)
index 7353719..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-let lock   = ref (fun () -> ());;
-let unlock = ref (fun () -> ());;
-
-let init_mt new_lock new_unlock =
-  lock   := new_lock;
-  unlock := new_unlock
-;;
-
-let protect f =
-  !lock();
-  try
-    let r = f() in
-    !unlock();
-    r
-  with
-      x ->
-       !unlock();
-       raise x
-;;
-
-type regexp = Str.regexp;;
-type split_result = Str.split_result = Text of string | Delim of string;;
-
-type result =
-    { pos : int;
-      match_beg : int;
-      match_end : int;
-      group_beg : int array;
-      group_end : int array;
-    }
-;;
-
-let regexp s =
-  protect
-    (fun () -> Str.regexp s)
-;;
-
-let regexp_case_fold s =
-  protect
-    (fun () -> Str.regexp_case_fold s)
-;;
-
-let quote s =
-  protect
-    (fun () -> Str.quote s)
-;;
-
-let regexp_string s =
-  protect
-    (fun () -> Str.regexp_string s)
-;;
-
-let regexp_string_case_fold s =
-  protect
-    (fun () -> Str.regexp_string_case_fold s)
-;;
-
-let return_result pos n_groups =
-  let r =
-    { pos = pos;
-      match_beg = (try Str.match_beginning() with Not_found -> -1);
-      match_end = (try Str.match_end()       with Not_found -> -1);
-      group_beg = Array.create n_groups (-1);
-      group_end = Array.create n_groups (-1);
-    }
-  in
-  for g = 0 to n_groups - 1 do
-    r.group_beg.(g) <- (try Str.group_beginning (g+1) with Not_found -> -1);
-    r.group_end.(g) <- (try Str.group_end (g+1)       with Not_found -> -1);
-  done;
-  r
-;;
-
-let string_match ?(groups = 9) ~pat s ~pos =
-  protect
-    (fun () ->
-       if Str.string_match pat s pos then
-        Some (return_result pos groups)
-       else
-        None
-    )
-;;
-
-let string_partial_match ?(groups = 9) ~pat s ~pos =
-  protect
-    (fun () ->
-       if Str.string_partial_match pat s pos then
-        Some (return_result pos groups)
-       else
-        None
-    )
-;;
-
-let search_forward ?(groups = 9) ~pat s ~pos =
-  protect
-    (fun () ->
-       let i = Str.search_forward pat s pos in
-       i, return_result pos groups
-    )
-;;
-
-let search_backward ?(groups = 9) ~pat s ~pos =
-  protect
-    (fun () ->
-       let i = Str.search_backward pat s pos in
-       i, return_result pos groups
-    )
-;;
-
-let matched_string result s =
-  if result.match_beg < 0 or result.match_end < 0 then raise Not_found;
-  String.sub s result.match_beg (result.match_end - result.match_beg)
-;;
-
-let match_beginning result =
-  if result.match_beg < 0 then raise Not_found;
-  result.match_beg
-;;
-
-let match_end result =
-  if result.match_end < 0 then raise Not_found;
-  result.match_end
-;;
-
-let matched_group result n s =
-  if n < 0 || n >= Array.length result.group_beg then raise Not_found;
-  let gbeg = result.group_beg.(n-1) in
-  let gend = result.group_end.(n-1) in
-  if gbeg < 0 or gend < 0 then raise Not_found;
-  String.sub s gbeg (gend - gbeg)
-;;
-
-let group_beginning result n =
-  if n < 0 || n >= Array.length result.group_beg then raise Not_found;
-  let gbeg = result.group_beg.(n-1) in
-  if gbeg < 0 then raise Not_found else 
-    gbeg
-;;
-
-let group_end result n =
-  if n < 0 || n >= Array.length result.group_end then raise Not_found;
-  let gend = result.group_end.(n-1) in
-  if gend < 0 then raise Not_found else 
-    gend
-;;
-
-let global_replace ~pat ~templ s =
-  protect
-    (fun () ->
-       Str.global_replace pat templ s)
-;;
-
-let replace_first ~pat ~templ s =
-  protect
-    (fun () ->
-       Str.replace_first pat templ s)
-;;
-
-let global_substitute ?(groups = 9) ~pat ~subst s =
-  protect
-    (fun () ->
-       let xsubst s =
-        let r = return_result 0 groups in
-        subst r s
-       in
-       Str.global_substitute pat xsubst s)
-;;
-
-let substitute_first ?(groups = 9) ~pat ~subst s =
-  protect
-    (fun () ->
-       let xsubst s =
-        let r = return_result 0 groups in
-        subst r s
-       in
-       Str.substitute_first pat xsubst s)
-;;
-
-(* replace_matched: n/a *)
-
-let split ~sep s =
-  protect
-    (fun () ->
-       Str.split sep s)
-;;
-
-let bounded_split ~sep s ~max =
-  protect
-    (fun () ->
-       Str.bounded_split sep s max)
-;;
-
-let split_delim ~sep s =
-  protect
-    (fun () ->
-       Str.split_delim sep s)
-;;
-
-let bounded_split_delim ~sep s ~max =
-  protect
-    (fun () ->
-       Str.bounded_split_delim sep s max)
-;;
-
-let full_split ~sep s =
-  protect
-    (fun () ->
-       Str.full_split sep s)
-;;
-
-let bounded_full_split ~sep s ~max =
-  protect
-    (fun () ->
-       Str.bounded_full_split sep s max)
-;;
-
-let string_before = Str.string_before;;
-let string_after = Str.string_after;;
-let first_chars = Str.first_chars;;
-let last_chars = Str.last_chars;;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/06/25 21:15:48  gerd
- *     Checked thread-safety.
- *
- * Revision 1.1  2000/06/25 20:48:19  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netstring_str.mli b/helm/DEVEL/pxp/netstring/netstring_str.mli
deleted file mode 100644 (file)
index 86d6840..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* This module is a version of Str with a thread-safe interface *)
-
-type regexp = Str.regexp;;
-type split_result = Str.split_result = Text of string | Delim of string;;
-
-type result;;
-  (* The type of matching results *)
-
-val regexp: string -> regexp
-val regexp_case_fold: string -> regexp
-val quote: string -> string
-val regexp_string: string -> regexp
-val regexp_string_case_fold: string -> regexp
-
-val string_match: 
-      ?groups:int -> pat:regexp -> string -> pos:int -> result option
-val search_forward: 
-      ?groups:int -> pat:regexp -> string -> pos:int -> (int * result)
-val search_backward: 
-      ?groups:int -> pat:regexp -> string -> pos:int -> (int * result)
-val string_partial_match: 
-      ?groups:int -> pat:regexp -> string -> pos:int -> result option
-
-(* The ~groups option specifies how many groups will be stored into
- * 'result'. Default: 9
- *)
-
-val matched_string : result -> string -> string
-val match_beginning : result -> int
-val match_end : result -> int
-val matched_group : result -> int -> string -> string
-val group_beginning : result -> int -> int
-val group_end : result -> int -> int
-
-val global_replace: pat:regexp -> templ:string -> string -> string
-val replace_first: pat:regexp -> templ:string -> string -> string
-val global_substitute:
-       ?groups:int -> 
-       pat:regexp -> subst:(result -> string -> string) -> string -> string
-val substitute_first:
-       ?groups:int -> 
-       pat:regexp -> subst:(result -> string -> string) -> string -> string
-
-(* replace_matched: not available *)
-
-val split: sep:regexp -> string -> string list
-val bounded_split: sep:regexp -> string -> max:int -> string list
-val split_delim: sep:regexp -> string -> string list
-val bounded_split_delim: sep:regexp -> string -> max:int -> string list
-val full_split: sep:regexp -> string -> split_result list
-val bounded_full_split: sep:regexp -> string -> max:int -> split_result list
-
-val string_before: string -> int -> string
-val string_after: string -> int -> string
-val first_chars: string -> len:int -> string
-val last_chars: string -> len:int -> string
-
-(* Private: *)
-
-val init_mt : (unit -> unit) -> (unit -> unit) -> unit
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/06/25 21:15:48  gerd
- *     Checked thread-safety.
- *
- * Revision 1.1  2000/06/25 20:48:19  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netstring_top.ml b/helm/DEVEL/pxp/netstring/netstring_top.ml
deleted file mode 100644 (file)
index d25505c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-let exec s =
-  let l = Lexing.from_string s in
-  let ph = !Toploop.parse_toplevel_phrase l in
-  assert(Toploop.execute_phrase false Format.err_formatter ph)
-;;
-
-(* Install the printers: *)
-
-exec "#install_printer Neturl.print_url;;";;
-exec "#install_printer Netbuffer.print_buffer;;";;
-exec "#install_printer Netstream.print_stream;;";;
-exec "#install_printer Cgi.print_argument;;";;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/06/25 22:34:43  gerd
- *     Added labels to arguments.
- *
- * Revision 1.1  2000/06/24 20:20:58  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/netstring_top.mli b/helm/DEVEL/pxp/netstring/netstring_top.mli
deleted file mode 100644 (file)
index 1d5ac72..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* You may load this module into the toploop in order to install
- * the printers for the various opaque data types of Netstring.
- *)
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/06/25 22:53:45  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/neturl.ml b/helm/DEVEL/pxp/netstring/neturl.ml
deleted file mode 100644 (file)
index f597b0c..0000000
+++ /dev/null
@@ -1,1302 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-exception Malformed_URL
-
-type url_syntax_option =
-    Url_part_not_recognized
-  | Url_part_allowed
-  | Url_part_required
-
-
-type url_syntax =
-    { url_enable_scheme    : url_syntax_option;
-      url_enable_user      : url_syntax_option;
-      url_enable_password  : url_syntax_option;
-      url_enable_host      : url_syntax_option;
-      url_enable_port      : url_syntax_option;
-      url_enable_path      : url_syntax_option;
-      url_enable_param     : url_syntax_option;
-      url_enable_query     : url_syntax_option;
-      url_enable_fragment  : url_syntax_option;
-      url_enable_other     : url_syntax_option;
-      url_accepts_8bits    : bool;
-      url_is_valid         : url -> bool;
-    }
-
-and url =
-    { 
-      url_syntax   : url_syntax;
-      mutable url_validity : bool;
-      url_scheme   : string option;
-      url_user     : string option;
-      url_password : string option;
-      url_host     : string option;
-      url_port     : int option;
-      url_path     : string list;
-      url_param    : string list;
-      url_query    : string option;
-      url_fragment : string option;
-      url_other    : string option;
-    }
-;;
-
-
-type char_category =
-    Accepted
-  | Rejected
-  | Separator
-
-
-
-let scan_url_part s k_from k_to cats accept_8bits =
-  (* Scans the longest word of accepted characters from position 'k_from'
-   * in 's' until at most position 'k_to'. The character following the
-   * word (if any) must be a separator character.
-   * On success, the function returns the position of the last character
-   * of the word + 1.
-   * If there is any rejected character before the separator or the end
-   * of the string (i.e. position 'k_to') is reached, the exception
-   * Malformed_URL is raised.
-   * Furthermore, if the character '%' is accepted it is checked whether
-   * two hexadecimal digits follow (which must be accepted, too). If this
-   * is not true, the exception Malformed_URL is raised, too.
-   * 'cats': contains for every character code (0 to 255) the category
-   * of the character.
-   *)
-  let check_hex c =
-    if cats.( Char.code c ) <> Accepted then raise Malformed_URL;
-    match c with
-       ('0'..'9'|'A'..'F'|'a'..'f') -> ()
-      | _ -> raise Malformed_URL
-  in
-
-  let rec scan k =
-    if k >= k_to then
-      k
-    else begin
-      let c = s.[k] in
-      let cat = cats.(Char.code c) in
-      match cat with
-         Accepted -> 
-           if c = '%' then begin
-             if k+2 >= k_to then raise Malformed_URL;
-             let c1 = s.[k+1] in
-             let c2 = s.[k+2] in
-             check_hex c1;
-             check_hex c2;
-             scan (k+3)
-           end
-           else
-             scan (k+1)
-       | Separator -> k
-       | Rejected -> 
-           if accept_8bits && c >= '\128' 
-           then scan (k+1)
-           else raise Malformed_URL
-    end
-  in
-
-  assert (Array.length cats = 256);
-  assert (k_from >= 0);
-  assert (k_from <= k_to);
-  assert (k_to <= String.length s);
-  
-  scan k_from
-;;
-
-  
-(* Create a categorization: *)
-
-let lalpha = [ 'a'; 'b'; 'c'; 'd'; 'e'; 'f'; 'g'; 'h'; 'i'; 'j'; 'k'; 'l'; 'm';
-              'n'; 'o'; 'p'; 'q'; 'r'; 's'; 't'; 'u'; 'v'; 'w'; 'x'; 'y'; 'z' ]
-
-let ualpha = [ 'A'; 'B'; 'C'; 'D'; 'E'; 'F'; 'G'; 'H'; 'I'; 'J'; 'K'; 'L'; 'M';
-              'N'; 'O'; 'P'; 'Q'; 'R'; 'S'; 'T'; 'U'; 'V'; 'W'; 'X'; 'Y'; 'Z' ]
-
-let digit = [ '0'; '1'; '2'; '3'; '4'; '5'; '6'; '7'; '8'; '9' ]
-
-let safe = [ '$'; '-'; '_'; '.'; '+' ]
-
-let extra = [ '!'; '*'; '\''; '('; ')'; ',' ]
-
-let make_cats accepted separators =
-  (* create a categorization:
-   * - All characters listed in 'separators' are separators.
-   * - All characters listed in 'accepted' and which do not occur in
-   *   'separators' are accepted characters.
-   * - All other characters are rejected.
-   *)
-  let cats = Array.make 256 Rejected in
-  List.iter
-    (fun c ->
-       cats.(Char.code c) <- Accepted
-    )
-    accepted;
-
-  List.iter
-    (fun c ->
-       cats.(Char.code c) <- Separator
-    )
-    separators;
-  cats
-;;
-
-
-let scheme_cats =
-  make_cats (lalpha @ ualpha @ ['+'; '-'; '.']) [':'] ;;
-
-    (* scheme_cats: character categorization to _extract_ the URL scheme *)
-
-
-let login_cats =
-  make_cats 
-    (lalpha @ ualpha @ digit @ safe @ extra @ [';'; '?'; '&'; '='; '%'])  
-    [':'; '@'; '/'; '#' ]
-;;
-
-    (* login_cats: character categorization to _extract_ user name, password,
-     * host name, and port.
-     *)
-
-let host_cats =
-  make_cats
-    (lalpha @ ualpha @ digit @ ['.'; '-'])
-    []
-;;
-
-    (* host_cats: character categorization to _check_ whether the host name
-     * is formed only by legal characters.
-     * Especially '%' is not allowed here!
-     *)
-
-let port_cats =
-  make_cats
-    digit
-    []
-;;
-
-    (* port_cats: character categorization to _check_ whether the port number
-     * is formed only by legal characters.
-     * Especially '%' is not allowed here!
-     *)
-
-let path_cats separators =
-  make_cats
-    (lalpha @ ualpha @ digit @ safe @ extra @ 
-              ['?'; ':'; '@'; '&'; '='; ';'; '%'; '/'; '~'])
-    separators
-;;
-
-
-let separators_from_syntax syn =
-  let include_if syn_option clist =
-    if syn_option <> Url_part_not_recognized then
-      clist
-    else
-      []
-  in
-  (include_if syn.url_enable_param [';']) @
-  (include_if syn.url_enable_query ['?']) @
-  (include_if syn.url_enable_fragment ['#'])
-;;
-
-
-let path_cats_from_syntax syn extraseps =
-  let separators = separators_from_syntax syn in
-  path_cats (separators @ extraseps)
-;;
-
-(* path_cats_from_syntax:
- * Computes a character categorization to extract the path from an URL.
- * This depends on the syntax because the list of possible separators
- * contains the characters that may begin the next URL clause.
- *
- * Notes:
- * - The '#' is rejected unless fragments are enabled. 
- * - The '~' is accepted although this violates RFC 1738.
- *)
-
-
-let other_cats_from_syntax syn =
-  let include_if syn_option clist =
-    if syn_option <> Url_part_not_recognized then
-      clist
-    else
-      []
-  in
-  let separators =
-    (include_if syn.url_enable_param [';']) @
-    (include_if syn.url_enable_query ['?']) @
-    (include_if syn.url_enable_fragment ['#'])
-  in
-
-  make_cats
-    (lalpha @ ualpha @ digit @ safe @ extra @ 
-              (separators @ ['?'; ':'; '@'; '&'; '='; ';'; '%'; '/']))
-    []
-;;
-
-    (* other_cats: character categorization to extract or check the
-     * "other" part of the URL.
-     *)
-
-
-
-let extract_url_scheme s = 
-  let l = String.length s in
-  let k = scan_url_part s 0 l scheme_cats false in
-          (* or raise Malformed_URL *)
-  if k = l then raise Malformed_URL;
-  assert (s.[k] = ':');
-  String.lowercase(String.sub s 0 k)
-;;
-
-
-let ( => ) a b = not a or b;;   (* implication *)
-
-let ( <=> ) (a:bool) b = ( a = b );;  (* equivalence *)
-
-let url_syntax_is_valid syn =
-  let recognized x = x <> Url_part_not_recognized in
-  let not_recognized x = x = Url_part_not_recognized in
-  (recognized syn.url_enable_password => recognized syn.url_enable_user) &
-  (recognized syn.url_enable_port     => recognized syn.url_enable_host) &
-  (recognized syn.url_enable_user     => recognized syn.url_enable_host) &
-  not ( (recognized syn.url_enable_user ||
-        recognized syn.url_enable_password ||
-        recognized syn.url_enable_host ||
-        recognized syn.url_enable_port ||
-        recognized syn.url_enable_path) &&
-       (recognized syn.url_enable_other))
-;;
-
-
-let partial_url_syntax syn =
-  let weaken =
-    function
-       Url_part_not_recognized -> Url_part_not_recognized
-      | Url_part_allowed        -> Url_part_allowed
-      | Url_part_required       -> Url_part_allowed
-  in
-  { url_enable_scheme    = weaken syn.url_enable_scheme;
-    url_enable_user      = weaken syn.url_enable_user;
-    url_enable_password  = weaken syn.url_enable_password;
-    url_enable_host      = weaken syn.url_enable_host;
-    url_enable_port      = weaken syn.url_enable_port;
-    url_enable_path      = weaken syn.url_enable_path;
-    url_enable_param     = weaken syn.url_enable_param;
-    url_enable_query     = weaken syn.url_enable_query;
-    url_enable_fragment  = weaken syn.url_enable_fragment;
-    url_enable_other     = weaken syn.url_enable_other;
-    url_accepts_8bits    = syn.url_accepts_8bits;
-    url_is_valid         = syn.url_is_valid;
-  }
-;;
-
-
-
-let file_url_syntax =
-  { url_enable_scheme    = Url_part_required;
-    url_enable_user      = Url_part_not_recognized;
-    url_enable_password  = Url_part_not_recognized;
-    url_enable_host      = Url_part_allowed;
-    url_enable_port      = Url_part_not_recognized;
-    url_enable_path      = Url_part_required;
-    url_enable_param     = Url_part_not_recognized;
-    url_enable_query     = Url_part_not_recognized;
-    url_enable_fragment  = Url_part_not_recognized;
-    url_enable_other     = Url_part_not_recognized;
-    url_accepts_8bits    = false;
-    url_is_valid         = (fun _ -> true);
-  }
-;;
-
-
-let ftp_url_syntax =
-  { url_enable_scheme    = Url_part_required;
-    url_enable_user      = Url_part_allowed;
-    url_enable_password  = Url_part_allowed;
-    url_enable_host      = Url_part_required;
-    url_enable_port      = Url_part_allowed;
-    url_enable_path      = Url_part_allowed;
-    url_enable_param     = Url_part_allowed;
-    url_enable_query     = Url_part_not_recognized;
-    url_enable_fragment  = Url_part_not_recognized;
-    url_enable_other     = Url_part_not_recognized;
-    url_accepts_8bits    = false;
-    url_is_valid         = (fun _ -> true);
-  }
-;;
-
-
-let http_url_syntax =
-  { url_enable_scheme    = Url_part_required;
-    url_enable_user      = Url_part_allowed;
-    url_enable_password  = Url_part_allowed;
-    url_enable_host      = Url_part_required;
-    url_enable_port      = Url_part_allowed;
-    url_enable_path      = Url_part_allowed;
-    url_enable_param     = Url_part_not_recognized;
-    url_enable_query     = Url_part_allowed;
-    url_enable_fragment  = Url_part_not_recognized;
-    url_enable_other     = Url_part_not_recognized;
-    url_accepts_8bits    = false;
-    url_is_valid         = (fun _ -> true);
-  }
-;;
-
-
-let mailto_url_syntax =
-  { url_enable_scheme    = Url_part_required;
-    url_enable_user      = Url_part_not_recognized;
-    url_enable_password  = Url_part_not_recognized;
-    url_enable_host      = Url_part_not_recognized;
-    url_enable_port      = Url_part_not_recognized;
-    url_enable_path      = Url_part_not_recognized;
-    url_enable_param     = Url_part_not_recognized;
-    url_enable_query     = Url_part_not_recognized;
-    url_enable_fragment  = Url_part_not_recognized;
-    url_enable_other     = Url_part_required;
-    url_accepts_8bits    = false;
-    url_is_valid         = (fun _ -> true);
-  }
-;;
-
-
-let null_url_syntax =
-  { url_enable_scheme    = Url_part_not_recognized;
-    url_enable_user      = Url_part_not_recognized;
-    url_enable_password  = Url_part_not_recognized;
-    url_enable_host      = Url_part_not_recognized;
-    url_enable_port      = Url_part_not_recognized;
-    url_enable_path      = Url_part_not_recognized;
-    url_enable_param     = Url_part_not_recognized;
-    url_enable_query     = Url_part_not_recognized;
-    url_enable_fragment  = Url_part_not_recognized;
-    url_enable_other     = Url_part_not_recognized;
-    url_accepts_8bits    = false;
-    url_is_valid         = (fun _ -> true);
-  }
-;;
-
-
-let ip_url_syntax =
-  { url_enable_scheme    = Url_part_allowed;
-    url_enable_user      = Url_part_allowed;
-    url_enable_password  = Url_part_allowed;
-    url_enable_host      = Url_part_allowed;
-    url_enable_port      = Url_part_allowed;
-    url_enable_path      = Url_part_allowed;
-    url_enable_param     = Url_part_allowed;
-    url_enable_query     = Url_part_allowed;
-    url_enable_fragment  = Url_part_allowed;
-    url_enable_other     = Url_part_not_recognized;
-    url_accepts_8bits    = false;
-    url_is_valid         = (fun _ -> true);
-  }
-;;
-
-
-let common_url_syntax =
-  let h = Hashtbl.create 10 in
-  Hashtbl.add h "file"   file_url_syntax;
-  Hashtbl.add h "ftp"    ftp_url_syntax;
-  Hashtbl.add h "http"   http_url_syntax;
-  Hashtbl.add h "mailto" mailto_url_syntax;
-  h
-;;
-
-
-let url_conforms_to_syntax url =
-  let recognized x = x <> Url_part_not_recognized in
-  let required x = x = Url_part_required in
-  let present x    = x <> None in
-  let syn = url.url_syntax in
-  (present url.url_scheme   => recognized syn.url_enable_scheme)   &
-  (present url.url_user     => recognized syn.url_enable_user)     &
-  (present url.url_password => recognized syn.url_enable_password) &
-  (present url.url_host     => recognized syn.url_enable_host)     &
-  (present url.url_port     => recognized syn.url_enable_port)     &
-  ((url.url_path <> [])     => recognized syn.url_enable_path)     &
-  ((url.url_param <> [])    => recognized syn.url_enable_param)    &
-  (present url.url_query    => recognized syn.url_enable_query)    &
-  (present url.url_fragment => recognized syn.url_enable_fragment) &
-  (present url.url_other    => recognized syn.url_enable_other)    &
-  (required syn.url_enable_scheme   => present url.url_scheme)     &
-  (required syn.url_enable_user     => present url.url_user)       &
-  (required syn.url_enable_password => present url.url_password)   &
-  (required syn.url_enable_host     => present url.url_host)       &
-  (required syn.url_enable_port     => present url.url_port)       &
-  (required syn.url_enable_path     => (url.url_path <> []))       &
-  (required syn.url_enable_param    => (url.url_param <> []))      &
-  (required syn.url_enable_query    => present url.url_query)      &
-  (required syn.url_enable_fragment => present url.url_fragment)   &
-  (required syn.url_enable_other    => present url.url_other)      &
-  (url.url_validity or syn.url_is_valid url)
-;;
-
-
-let url_syntax_of_url url = url.url_syntax
-;;
-
-
-let modify_url
-      ?syntax
-      ?(encoded = false)
-      ?scheme
-      ?user
-      ?password
-      ?host
-      ?port
-      ?path
-      ?param
-      ?query
-      ?fragment
-      ?other
-      url 
-  =
-
-  let encode = Netencoding.Url.encode in
-  let enc x =
-    if encoded then
-      x
-    else
-      match x with
-         None -> None
-       | Some x' -> Some (encode x')
-  in
-  let enc_list l = 
-    if encoded then
-      l
-    else
-      List.map encode l 
-  in
-
-  let new_syntax =
-    match syntax with
-       None -> url.url_syntax
-      | Some syn -> syn
-  in
-
-  let check_string s_opt cats =
-    match s_opt with
-       None   -> ()
-      | Some s ->
-         let l = String.length s in
-         let k = scan_url_part s 0 l cats new_syntax.url_accepts_8bits in
-                 (* or raise Malformed_URL *)
-         if k <> l then raise Malformed_URL
-  in
-
-  let check_string_list p cats sep =
-    List.iter
-      (fun p_component ->
-        let l = String.length p_component in
-        let k = 
-          scan_url_part p_component 0 l cats new_syntax.url_accepts_8bits in
-          (* or raise Malformed_URL *)
-        if k <> l then raise Malformed_URL;
-        if String.contains p_component sep then raise Malformed_URL;
-      )
-      p
-  in
-
-  (* Create the modified record: *)
-  let url' =
-    { 
-      url_syntax   = new_syntax;
-      url_validity = false;
-      url_scheme   = if scheme   = None then url.url_scheme   else scheme;
-      url_user     = if user     = None then url.url_user     else enc user;
-      url_password = if password = None then url.url_password else enc password;
-      url_host     = if host     = None then url.url_host     else host;
-      url_port     = if port     = None then url.url_port     else port;
-      url_path     = (match path with
-                         None -> url.url_path
-                       | Some p -> enc_list p);
-      url_param    = (match param with
-                         None -> url.url_param
-                       | Some p -> enc_list p);
-      url_query    = if query    = None then url.url_query    else enc query;
-      url_fragment = if fragment = None then url.url_fragment else enc fragment;
-      url_other    = if other    = None then url.url_other    else enc other;
-    }
-  in
-  (* Check whether the URL conforms to the syntax:
-   *)
-  if not (url_conforms_to_syntax url') then raise Malformed_URL;
-  if url'.url_password <> None && url'.url_user = None then raise Malformed_URL;
-  if url'.url_user <> None && url'.url_host = None then raise Malformed_URL;
-  if url'.url_port <> None && url'.url_host = None then raise Malformed_URL;
-  (* Check every part: *)
-  check_string url'.url_scheme   scheme_cats;
-  check_string url'.url_user     login_cats;
-  check_string url'.url_password login_cats;
-  check_string url'.url_host     host_cats;
-  (match url'.url_port with 
-       None -> ()
-     | Some p -> if p < 0 || p > 65535 then raise Malformed_URL
-  );
-  let path_cats  = path_cats_from_syntax  new_syntax [] in
-  let other_cats = other_cats_from_syntax new_syntax in
-  check_string url'.url_query    path_cats;
-  check_string url'.url_fragment path_cats;
-  check_string url'.url_other    other_cats;
-  (* Check the lists: *)
-  check_string_list url'.url_param path_cats ';';
-  check_string_list url'.url_path  path_cats '/';
-  (* Further path checks: *)
-  begin match url'.url_path with
-      [] ->
-       (* The path is empty: There must not be a 'param' or 'query' *)
-       if url'.url_host <> None then begin
-         if url'.url_param <> [] then raise Malformed_URL;
-         if url'.url_query <> None then raise Malformed_URL;
-       end
-    | ["";""] ->
-       (* This is illegal. *)
-       raise Malformed_URL;
-    | "" :: p' ->
-       (* The path is absolute: always ok *)
-       ()
-    | _ ->
-       (* The path is relative: there must not be a host *)
-       if url'.url_host <> None then raise Malformed_URL;
-  end;
-  begin match url'.url_path with
-      _ :: rest ->              (* "//" ambiguity *)
-       begin match List.rev rest with
-           _ :: rest' -> 
-             if List.exists (fun p -> p = "") rest' then
-               raise Malformed_URL;
-         | [] ->
-             ()
-       end
-    | [] ->
-       ()
-  end;
-  (* Cache that the URL is valid: *)
-  url'.url_validity <- true;
-
-  url'
-;;
-
-
-let null_url =
-  { 
-    url_syntax   = null_url_syntax;
-    url_validity = true;
-    url_scheme   = None;
-    url_user     = None;
-    url_password = None;
-    url_host     = None;
-    url_port     = None;
-    url_path     = [];
-    url_param    = [];
-    url_query    = None;
-    url_fragment = None;
-    url_other    = None;
-  }
-;;
-
-
-let make_url
-      ?(encoded = false)
-      ?scheme
-      ?user
-      ?password
-      ?host
-      ?port
-      ?path
-      ?param
-      ?query
-      ?fragment
-      ?other
-      url_syntax
-  =
-
-  if not (url_syntax_is_valid url_syntax) then
-    invalid_arg "Neturl.make_url";
-
-  modify_url
-    ~encoded:encoded
-    ~syntax:url_syntax
-    ?scheme:scheme
-    ?user:user
-    ?password:password
-    ?host:host
-    ?port:port
-    ?path:path
-    ?param:param
-    ?query:query
-    ?fragment:fragment
-    ?other:other
-    null_url
-;;
-
-
-let remove_from_url
-      ?(scheme = false)
-      ?(user = false)
-      ?(password = false)
-      ?(host = false)
-      ?(port = false)
-      ?(path = false)
-      ?(param = false)
-      ?(query = false)
-      ?(fragment = false)
-      ?(other = false)
-      url
-  =
-
-  make_url
-    ~encoded:  true
-    ?scheme:   (if scheme   then None else url.url_scheme)
-    ?user:     (if user     then None else url.url_user)
-    ?password: (if password then None else url.url_password)
-    ?host:     (if host     then None else url.url_host)
-    ?port:     (if port     then None else url.url_port)
-    ?path:     (if path     then None else Some url.url_path)
-    ?param:    (if param    then None else Some url.url_param)
-    ?query:    (if query    then None else url.url_query)
-    ?fragment: (if fragment then None else url.url_fragment)
-    ?other:    (if other    then None else url.url_other)
-    url.url_syntax
-;;
-
-
-let default_url
-      ?(encoded = false)
-      ?scheme
-      ?user
-      ?password
-      ?host
-      ?port
-      ?(path = [])
-      ?(param = [])
-      ?query
-      ?fragment
-      ?other
-      url
-  =
-
-  let encode = Netencoding.Url.encode in
-
-  let enc x =
-    if encoded then
-      x
-    else
-      match x with
-         None -> None
-       | Some x' -> Some (encode x')
-  in
-
-  let enc_list l = 
-    if encoded then
-      l
-    else
-      List.map encode l 
-  in
-
-  let pass_if_missing current arg =
-    match current with
-       None -> arg
-      | _    -> current
-  in
-
-  make_url
-    ~encoded:  true
-    ?scheme:   (pass_if_missing url.url_scheme   scheme)
-    ?user:     (pass_if_missing url.url_user     (enc user))
-    ?password: (pass_if_missing url.url_password (enc password))
-    ?host:     (pass_if_missing url.url_host     host)
-    ?port:     (pass_if_missing url.url_port     port)
-    ~path:     (if url.url_path  = [] then enc_list path  else url.url_path)
-    ~param:    (if url.url_param = [] then enc_list param else url.url_param)
-    ?query:    (pass_if_missing url.url_query    (enc query))
-    ?fragment: (pass_if_missing url.url_fragment (enc fragment))
-    ?other:    (pass_if_missing url.url_other    (enc other))
-    url.url_syntax
-;;
-
-
-let undefault_url
-      ?scheme
-      ?user
-      ?password
-      ?host
-      ?port
-      ?path
-      ?param
-      ?query
-      ?fragment
-      ?other
-      url
-  =
-
-  let remove_if_matching current arg =
-    match current with
-       None -> None
-      | Some x -> 
-         (match arg with
-              None -> current
-            | Some x' ->
-                if x=x' then
-                  None
-                else
-                  current)
-  in
-
-  make_url
-    ~encoded:  true
-    ?scheme:   (remove_if_matching url.url_scheme   scheme)
-    ?user:     (remove_if_matching url.url_user     user)
-    ?password: (remove_if_matching url.url_password password)
-    ?host:     (remove_if_matching url.url_host     host)
-    ?port:     (remove_if_matching url.url_port     port)
-    ~path:     (match path with
-                    None -> url.url_path
-                  | Some x ->
-                      if x = url.url_path then
-                        []
-                      else
-                        url.url_path)
-    ~param:    (match param with
-                    None -> url.url_param
-                  | Some x ->
-                      if x = url.url_param then
-                        []
-                      else
-                        url.url_param)
-    ?query:    (remove_if_matching url.url_query    query)
-    ?fragment: (remove_if_matching url.url_fragment fragment)
-    ?other:    (remove_if_matching url.url_other    other)
-    url.url_syntax
-;;
-
-
-let url_provides 
-      ?(scheme = false)
-      ?(user = false)
-      ?(password = false)
-      ?(host = false)
-      ?(port = false)
-      ?(path = false)
-      ?(param = false)
-      ?(query = false)
-      ?(fragment = false)
-      ?(other = false)
-      url
-  =
-  
-  (scheme   => (url.url_scheme   <> None)) &
-  (user     => (url.url_user     <> None)) &
-  (password => (url.url_password <> None)) &
-  (host     => (url.url_host     <> None)) &
-  (port     => (url.url_port     <> None)) &
-  (path     => (url.url_path     <> []))   &
-  (param    => (url.url_param    <> [])) &
-  (query    => (url.url_query    <> None)) &
-  (fragment => (url.url_fragment <> None)) &
-  (other    => (url.url_other    <> None))
-;;
-  
-
-let return_if value =
-  match value with
-      None -> raise Not_found
-    | Some x -> x
-;;
-
-
-let decode_if want_encoded value =
-  let value' = return_if value in
-  if want_encoded then
-    value'
-  else
-    Netencoding.Url.decode value'     (* WARNING: not thread-safe! *)
-;;
-
-
-let decode_path_if want_encoded value =
-  if want_encoded then
-    value
-  else
-    List.map Netencoding.Url.decode value     (* WARNING: not thread-safe! *)
-;;
-
-
-let url_scheme                    url = return_if url.url_scheme;;
-let url_user     ?(encoded=false) url = decode_if encoded url.url_user;;
-let url_password ?(encoded=false) url = decode_if encoded url.url_password;;
-let url_host                      url = return_if url.url_host;;
-let url_port                      url = return_if url.url_port;;
-let url_path     ?(encoded=false) url = decode_path_if encoded url.url_path;;
-let url_param    ?(encoded=false) url = decode_path_if encoded url.url_param;;
-let url_query    ?(encoded=false) url = decode_if encoded url.url_query;;
-let url_fragment ?(encoded=false) url = decode_if encoded url.url_fragment;;
-let url_other    ?(encoded=false) url = decode_if encoded url.url_other;;
-
-
-let string_of_url url =
-  if not (url.url_validity) then
-    failwith "Neturl.string_of_url: URL not flagged as valid";
-  (match url.url_scheme with
-       None -> ""
-     | Some s -> s ^ ":") ^ 
-  (match url.url_host with
-       None -> ""
-     | Some host ->
-        "//" ^ 
-        (match url.url_user with
-             None -> "" 
-           | Some user -> 
-               user ^ 
-               (match url.url_password with
-                    None -> ""
-                  | Some password ->
-                      ":" ^ password 
-               ) ^ 
-               "@") ^ 
-        host ^ 
-        (match url.url_port with
-             None -> ""
-           | Some port ->
-               ":" ^ string_of_int port)) ^ 
-  (match url.url_path with
-     | [""] ->
-        "/"
-     | x :: p  when  url.url_scheme = None &&
-                     url.url_host = None &&
-                    String.contains x ':' 
-       ->
-         (* Really a special case: The colon contained in 'x' may cause
-          * that a prefix of 'x' is interpreted as URL scheme. In this
-          * case, "./" is prepended (as recommended in RFC 1808, 5.3).
-          *)
-         "./"
-     | _ ->
-        ""
-  ) ^
-  String.concat "/" url.url_path ^ 
-  (match url.url_other with
-       None -> ""
-     | Some other ->
-        other) ^ 
-  String.concat ""  (List.map (fun s -> ";" ^ s) url.url_param) ^ 
-  (match url.url_query with
-       None -> ""
-     | Some query ->
-        "?" ^ query) ^ 
-  (match url.url_fragment with
-       None -> ""
-     | Some fragment ->
-        "#" ^ fragment)
-;;
-
-
-let url_of_string url_syntax s =
-  let l = String.length s in
-  let recognized x = x <> Url_part_not_recognized in
-
-  let rec collect_words terminators eof_char cats k =
-    (* Collect words as recognized by 'cats', starting at position 'k' in
-     * 's'. Collection stops if one the characters listed in 'terminators'
-     * is found. If the end of the string is reached, it is treated as
-     * 'eof_char'.
-     *)
-    let k' = scan_url_part s k l cats url_syntax.url_accepts_8bits in  
-             (* or raise Malformed_URL *)
-    let word, sep =
-      String.sub s k (k'-k), (if k'<l then s.[k'] else eof_char) in
-    if List.mem sep terminators then
-      [word, sep], k'
-    else
-      let word_sep_list', k'' = 
-       collect_words terminators eof_char cats (k'+1) in
-      ((word, sep) :: word_sep_list'), k''
-  in
-
-  (* Try to extract the scheme name: *)
-  let scheme, k1 =
-    if recognized url_syntax.url_enable_scheme then
-      try
-       let k = scan_url_part s 0 l scheme_cats false in
-        (* or raise Malformed_URL *)
-       if k = l then raise Malformed_URL;
-       assert (s.[k] = ':');
-       Some (String.sub s 0 k), (k+1)
-      with
-         Malformed_URL -> None, 0
-    else
-      None, 0
-  in
-
-  (* If there is a "//", a host will follow: *)
-  let host, port, user, password, k2 =
-    if recognized url_syntax.url_enable_host  &&
-       k1 + 2 <= l  &&  s.[k1]='/'  && s.[k1+1]='/' then begin
-
-      let word_sep_list, k' = collect_words [ '/'; '#' ] '/' login_cats (k1+2) 
-      in
-          (* or raise Malformed_URL *)
-
-      let int x =
-       try int_of_string x with _ -> raise Malformed_URL in
-
-      match word_sep_list with
-         [ host, ('/'|'#') ] ->
-           Some host, None, None, None, k'
-       | [ host, ':'; port, ('/'|'#') ] ->
-           Some host, Some (int port), None, None, k'
-       | [ user, '@'; host, ('/'|'#') ] ->
-           Some host, None, Some user, None, k'
-       | [ user, '@'; host, ':'; port, ('/'|'#') ] ->
-           Some host, Some (int port), Some user, None, k'
-       | [ user, ':'; password, '@'; host, ('/'|'#') ] ->
-           Some host, None, Some user, Some password, k'
-       | [ user, ':'; password, '@'; host, ':'; port, ('/'|'#') ] ->
-           Some host, Some (int port), Some user, Some password, k'
-       | _ ->
-           raise Malformed_URL
-    end
-    else
-      None, None, None, None, k1
-  in
-
-  let path, k3 =
-    if recognized url_syntax.url_enable_path  &&
-       k2 < l  (*  &&  s.[k2]='/'  *)
-    then begin
-      let cats = path_cats_from_syntax url_syntax [ '/' ] in
-      let seps = separators_from_syntax url_syntax in
-
-      (* Note: '>' is not allowed within URLs; because of this we can use
-       * it as end-of-string character.
-       *)
-
-      let word_sep_list, k' = collect_words ('>'::seps) '>' cats k2 in
-          (* or raise Malformed_URL *)
-      match word_sep_list with
-         [ "", '/'; "", _ ] ->
-           [ "" ], k'
-       | [ "", _ ] ->
-           [], k'
-       | _ ->
-           List.map fst word_sep_list, k'
-    end
-    else begin
-      (* If there is a single '/': skip it *)
-      if not (recognized url_syntax.url_enable_other) &&
-        k2 < l  &&  s.[k2]='/'
-      then
-       [], (k2+1)
-      else
-       [], k2
-    end
-  in
-
-  let other, k4 =
-    if recognized url_syntax.url_enable_other  &&
-       k3 < l 
-    then begin
-      
-      let cats = other_cats_from_syntax url_syntax in
-
-      (* Note: '>' is not allowed within URLs; because of this we can use
-       * it as end-of-string character.
-       *)
-
-      let word_sep_list, k' = collect_words ['>';'#'] '>' cats k3 in
-          (* or raise Malformed_URL *)
-
-      match word_sep_list with
-         [ other, _ ] -> Some other, k'
-       | _ -> assert false
-    end
-    else
-      None, k3
-  in
-
-  let param, k5 =
-    if recognized url_syntax.url_enable_param  &&
-       k4 < l  &&  s.[k4]=';' 
-    then begin
-      let cats  = path_cats_from_syntax url_syntax [] in
-      let seps  = separators_from_syntax url_syntax in
-      let seps' = List.filter (fun c -> c <> ';') seps in
-
-      (* Note: '>' is not allowed within URLs; because of this we can use
-       * it as end-of-string character.
-       *)
-
-      let word_sep_list, k' = collect_words ('>'::seps') '>' cats (k4+1) in
-          (* or raise Malformed_URL *)
-      
-      List.map fst word_sep_list, k'
-    end
-    else
-      [], k4
-  in
-
-  let query, k6 =
-    if recognized url_syntax.url_enable_query  &&
-       k5 < l  &&  s.[k5]='?'
-    then begin
-      let cats  = path_cats_from_syntax url_syntax [] in
-      let seps  = separators_from_syntax url_syntax in
-      
-      (* Note: '>' is not allowed within URLs; because of this we can use
-       * it as end-of-string character.
-       *)
-
-      let word_sep_list, k' = collect_words ('>'::seps) '>' cats (k5+1) in
-          (* or raise Malformed_URL *)
-
-      match word_sep_list with
-         [ query, _ ] -> Some query, k'
-       | _ -> assert false
-    end
-    else
-      None, k5
-  in
-
-  let fragment, k7 =
-    if recognized url_syntax.url_enable_fragment  &&
-       k6 < l  &&  s.[k6]='#'
-    then begin
-      let cats  = path_cats_from_syntax url_syntax [] in
-      let seps  = separators_from_syntax url_syntax in
-      
-      (* Note: '>' is not allowed within URLs; because of this we can use
-       * it as end-of-string character.
-       *)
-
-      let word_sep_list, k' = collect_words ('>'::seps) '>' cats (k6+1) in
-          (* or raise Malformed_URL *)
-
-      match word_sep_list with
-         [ fragment, _ ] -> Some fragment, k'
-       | _ -> assert false
-    end
-    else
-      None, k6
-  in
-
-  if k7 <> l then raise Malformed_URL;
-
-  make_url
-    ~encoded:true
-    ?scheme:scheme
-    ?user:user
-    ?password:password
-    ?host:host
-    ?port:port
-    ~path:path
-    ~param:param
-    ?query:query
-    ?fragment:fragment
-    ?other:other
-    url_syntax
-;;
-
-
-let split_path s =
-  let l = String.length s in
-  let rec collect_words k =
-    let k' = 
-      try
-       String.index_from s k '/'
-      with
-         Not_found -> l
-    in
-    let word = String.sub s k (k'-k) in
-    if k' >= l then
-      [word]
-    else
-      word :: collect_words (k'+1)
-  in
-  match collect_words 0 with
-      [ "" ] -> []
-    | [ "";"" ] -> [ "" ]
-    | other -> other
-;;
-
-
-let join_path l = 
-  match l with
-      [ "" ] -> "/"
-    | _      -> String.concat "/" l;;
-
-
-let norm_path l = 
-
-  let rec remove_slash_slash l first =
-    match l with
-      | [ "" ] ->
-         [ "" ]
-      | [ ""; "" ] when first ->
-         [ "" ]
-      | "" :: l' when not first ->
-         remove_slash_slash l' false
-      | x :: l' ->
-         x :: remove_slash_slash l' false
-      | [] ->
-         []
-  in
-
-  let rec remove_dot l first =
-    match l with
-      | ([ "." ] | ["."; ""]) ->
-         if first then [] else [ "" ]
-      |        "." :: x :: l' ->
-         remove_dot (x :: l') false
-      | x :: l' ->
-         x :: remove_dot l' false
-      | [] ->
-         []
-  in
-
-  let rec remove_dot_dot_once l first =
-    match l with
-       x :: ".." :: [] when x <> "" && x <> ".." && not first ->
-         [ "" ]
-      |        x :: ".." :: l' when x <> "" && x <> ".." ->
-         l'
-      | x :: l' ->
-         x :: remove_dot_dot_once l' false
-      | [] ->
-         raise Not_found
-  in
-
-  let rec remove_dot_dot l =
-    try
-      let l' = remove_dot_dot_once l true in
-      remove_dot_dot l'
-    with
-       Not_found -> l
-  in
-
-  let l' = remove_dot_dot (remove_dot (remove_slash_slash l true) true) in
-  match l' with
-      [".."] -> [".."; ""]
-    | ["";""] -> [ "" ]
-    | _      -> l'
-;;
-
-
-let apply_relative_url baseurl relurl =
-  if not (baseurl.url_validity) or not (relurl.url_validity) then
-    failwith "Neturl.apply_relative_url: URL not flagged as valid";
-
-  if relurl.url_scheme <> None then
-    modify_url 
-      ~syntax:baseurl.url_syntax           (* inherit syntax *)
-      relurl
-  else
-    if relurl.url_host <> None then
-      modify_url 
-       ~syntax:baseurl.url_syntax         (* inherit syntax and scheme *)
-       ?scheme:baseurl.url_scheme
-       relurl
-    else
-      match relurl.url_path with
-         "" :: other ->
-           (* An absolute path *)
-           modify_url 
-             ~syntax:baseurl.url_syntax   (* inherit syntax, scheme, and *)
-             ~encoded:true
-             ?scheme:baseurl.url_scheme   (* login info *)
-             ?host:baseurl.url_host
-             ?port:baseurl.url_port
-             ?user:baseurl.url_user
-             ?password:baseurl.url_password
-             relurl
-       | [] ->
-           (* Empty: Inherit also path, params, query, and fragment *)
-           let new_params, new_query, new_fragment =
-             match relurl.url_param, relurl.url_query, relurl.url_fragment
-             with
-                 [], None, None ->
-                   (* Inherit all three *)
-                   baseurl.url_param, baseurl.url_query, baseurl.url_fragment
-               | [], None, f ->
-                   (* Inherit params and query *)
-                   baseurl.url_param, baseurl.url_query, f
-               | [], q, f ->
-                   (* Inherit params *)
-                   baseurl.url_param, q, f
-               | p, q, f ->
-                   (* Inherit none of them *)
-                   p, q, f
-           in
-           modify_url 
-             ~syntax:baseurl.url_syntax
-             ~encoded:true
-             ?scheme:baseurl.url_scheme
-             ?host:baseurl.url_host
-             ?port:baseurl.url_port
-             ?user:baseurl.url_user
-             ?password:baseurl.url_password
-             ~path:baseurl.url_path
-             ~param:new_params
-             ?query:new_query
-             ?fragment:new_fragment
-             relurl
-       | relpath ->
-           (* A relative path *)
-           let rec change_path basepath =
-             match basepath with
-               | [] ->
-                   relpath
-               | [ x ] ->
-                   relpath
-               | x :: basepath' ->
-                   x :: change_path basepath'
-           in
-           let new_path = norm_path (change_path baseurl.url_path) in
-           modify_url 
-             ~syntax:baseurl.url_syntax   (* inherit syntax, scheme, and *)
-             ~encoded:true
-             ?scheme:baseurl.url_scheme   (* login info *)
-             ?host:baseurl.url_host
-             ?port:baseurl.url_port
-             ?user:baseurl.url_user
-             ?password:baseurl.url_password
-             ~path:new_path               (* and change path *)
-             relurl
-
-;;
-
-
-let print_url url =
-  Format.print_string ("<URL:" ^ string_of_url url ^ ">")
-;;
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:28  lpadovan
- * Initial revision
- *
- * Revision 1.4  2000/07/04 21:50:51  gerd
- *     Fixed typo.
- *
- * Revision 1.3  2000/06/26 22:57:49  gerd
- *     Change: The record 'url_syntax' has an additional component
- * 'url_accepts_8bits'. Setting this option to 'true' causes that
- * the bytes >= 0x80 are no longer rejected.
- *
- * Revision 1.2  2000/06/25 19:39:48  gerd
- *     Lots of Bugfixes.
- *
- * Revision 1.1  2000/06/24 20:19:59  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/neturl.mli b/helm/DEVEL/pxp/netstring/neturl.mli
deleted file mode 100644 (file)
index 988aef6..0000000
+++ /dev/null
@@ -1,460 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* This module applies already O'Caml-3 features. *)
-
-(* Uniform Resource Locators (URLs):
- *
- * This module provides functions to parse URLs, to print URLs, to
- * store URLs, to modify URLs, and to apply relative URLs.
- *
- * URLs are strings formed according to pattern (1) or (2):
- *
- * (1) scheme://user:password@host:port/path;params?query#fragment
- * (2) scheme:other;params?query#fragment
- *
- * The word at the beginning of the URL identifies the URL scheme
- * (such as "http" or "file"). Depending on the scheme, not all of the
- * parts are allowed, or parts may be omitted. This module defines the
- * type 'url_syntax' whose values describe which parts are allowed/required/
- * not allowed for a concrete URL scheme (see below).
- *
- * Not all characters are allowed in a URL. Some characters are allowed,
- * but have the special task to separate the various parts of the URL
- * (reserved characters).
- * However, it is possible to include even invalid or reserved characters
- * as normal content by applying the '%'-encoding on these characters:
- * A '%' indicates that an encoded character follows, and the character
- * is denoted by a two-digit hexadecimal number (e.g. %2f for '/').
- * In the following descriptions, the term "encoded string" means a string
- * containing such %-encoded characters, and the "decoded string" means a
- * string not containing such characters.
- * See the module Netencoding.Url for functions encoding or decoding
- * strings.
- *
- * The type 'url' describes values storing the components of a URL,
- * and the 'url_syntax' for the URL. In general, the components are
- * stored as encoded strings; however, not for all components the
- * '%'-encoding is applicable.
- * For convenience, the functions creating, modifying, and accessing
- * URLs can handle both encoded and decoded strings. In order to
- * avoid errors, the functions pass strings even in their decoded form.
- *
- * Note that there is currently no function to compare URLs. The
- * canoncical comparison ( = ) is not applicable because the same URL
- * may be written differently.
- *
- * Note that nothing is said about the character set/encoding of URLs.
- * Some protocols and standards prefer UTF-8 as fundamental encoding
- * and apply the '%'-encoding on top of it; i.e. the byte sequence
- * representing a character in UTF-8 is '%'-encoded. There is no special
- * support for this technique.
- *
- * For more information about URLs, see RFCs 1738 and 1808.
- *)
-
-exception Malformed_URL
-(* Is raised by a number of functions when encountering a badly formed
- * URL.
- *)
-
-val extract_url_scheme : string -> string
-  (* Returns the URL scheme from the string representation of an URL. 
-   * E.g. extract_url_scheme "http://host/path" = "http". 
-   * The scheme name is always converted to lowercase characters.
-   * Raises Malformed_URL if the scheme name is not found.
-   *)
-
-type url_syntax_option =
-    Url_part_not_recognized
-  | Url_part_allowed
-  | Url_part_required
-
-
-type url_syntax =
-    { url_enable_scheme    : url_syntax_option;
-      url_enable_user      : url_syntax_option;
-      url_enable_password  : url_syntax_option;
-      url_enable_host      : url_syntax_option;
-      url_enable_port      : url_syntax_option;
-      url_enable_path      : url_syntax_option;
-      url_enable_param     : url_syntax_option;
-      url_enable_query     : url_syntax_option;
-      url_enable_fragment  : url_syntax_option;
-      url_enable_other     : url_syntax_option;
-      url_accepts_8bits    : bool;
-      url_is_valid         : url -> bool;
-    }
-
-and url
-;;
-
-(* Values of type 'url_syntax' describe which components of an URL are
- * recognized, which are allowed (and optional), and which are required.
- * Not all combinations are valid; the predicate expressed by the
- * function 'url_syntax_is_valid' must hold.
- * The function 'url_is_valid' is applied when a fresh URL is created
- * and must return 'true'. This function allows it to add an arbitrary
- * validity criterion to 'url_syntax'. (Note that the URL passed to 
- * this function is not fully working; you can safely assume that the
- * accessor functions url_scheme etc. can be applied to it.)
- *
- * Switch 'url_accepts_8bit': If 'true', the bytes with code 128 to
- * 255 are treated like alphanumeric characters; if 'false' these bytes
- * are illegal (but it is still possible to include such byte in their
- * encoded form: %80 to %FF).
- *
- * Values of type 'url' describe concrete URLs. Every URL must have
- * a fundamental 'url_syntax', and it is only possible to create URLs
- * conforming to the syntax. See 'make_url' for further information.
- *)
-
-
-val url_syntax_is_valid : url_syntax -> bool
-  (* Checks whether the passed url_syntax is valid. This means:
-   *
-   * - If passwords are recognized, users (and hosts) must be recognized, too
-   * - If ports are recognized, hosts must be recognized, too
-   * - If users are recognized, hosts must be recognized, too
-   * - Either the syntax recognizes one of the phrases
-   *   { user, password, host, port, path }, or the syntax recognized
-   *   the phrase 'other'.
-   *)
-
-
-val partial_url_syntax : url_syntax -> url_syntax
-  (* Transforms the syntax into another syntax where all required parts are
-   * changed into optional parts.
-   *)
-
-
-(* Note that all following url_syntaxes do not allow 8bit bytes. *)
-
-val null_url_syntax   : url_syntax
-
-val ip_url_syntax : url_syntax
-  (* Maximum syntax for IP based protocols *)
-
-val common_url_syntax : (string, url_syntax) Hashtbl.t
-  (* Syntax descriptions for common URL schemes:
-   * 
-   * null_url_syntax: nothing is recognized
-   *
-   * common_url_syntax: Hashtable mapping from URL scheme names to
-   * definitions of syntaxes:
-   *
-   * "file":   scheme, host?, path
-   * "ftp":    scheme, user?, password?, host, port?, path?, param?
-   * "http":   scheme, user?, password?, host, port?, path?, query?
-   * "mailto": scheme, other
-   *
-   * Notes:
-   * (1) These syntax descriptions can be weakened for partial/relative URLs 
-   *     by changing the required parts to optional parts: See the function
-   *     'partial_url_syntax'.
-   * (2) None of the descriptions allows fragments. These can be enabled by
-   *     setting 'url_enable_fragment' to Url_part_allowed. E.g.
-   *     { file_url_syntax with url_enable_fragment = Url_part_allowed }
-   *)
-
-val null_url : url
-  (* A URL without any component and 'null_url_syntax'
-   *)
-
-val make_url :
-      ?encoded:bool ->
-      ?scheme:string ->
-      ?user:string ->
-      ?password:string ->
-      ?host:string ->
-      ?port:int ->
-      ?path:string list ->
-      ?param:string list ->
-      ?query:string ->
-      ?fragment:string ->
-      ?other:string ->
-      url_syntax ->
-      url
-  (* Creates a URL from components:
-   * 
-   * - The components "scheme" and "host" are simple strings to which the
-   *   '%'-encoding is not applicable.
-   * - The component "port" is a simple number. Of course, the '%'-encoding
-   *   is not applicable, too.
-   * - The components "user", "password", "query", "fragment", and "other"
-   *   are strings which may contains '%'-encoded characters. By default,
-   *   you can pass any string for these components, and problematic characters 
-   *   are automatically encoded. If you set ~encoded:true, the passed
-   *   strings must already be encoded, but the function checks whether
-   *   the encoding is correct.
-   *   Note that for "query" even the characters '?' and '=' are encoded
-   *   by default, so you need to set ~encoded:true to pass a reasonable
-   *   query string.
-   * - The components "path" and "param" are lists of strings which may
-   *   contain '%'-encoded characters. Again, the default is to pass
-   *   decoded strings to the function, and the function encodes them
-   *   automatically, and by setting ~encoded:true the caller is responsible
-   *   for encoding the strings.
-   *   path = [] and params = [] mean that no path and no parameters are
-   *   specified, respectively.
-   *   See below for the respresentation of these components.
-   *
-   * Except of "path", the strings representing the components do not
-   * contain the characters separating the components from each other. 
-   * The "path" component includes the '/' at the beginning of the path
-   * (if present).
-   *
-   * The created URL must conform to the 'url_syntax', i.e.
-   * - The URL must only contain components which are recognized by the
-   *   syntax
-   * - The URL must contain components which are required by the syntax
-   * - The URL must fulfill the predicate expressed by the 'url_is_valid'
-   *   function of the syntax.
-   *
-   * The path of a URL is represented as a list of '/'-separated path
-   * components. i.e.
-   *   [ s1; s2; ...; sN ]  represents the path  
-   *                        s1 ^ "/" ^ s2 ^ "/" ^ ... ^ "/" ^ sN
-   * As special cases:
-   *   []                   is the non-existing path
-   *   [ "" ]               is "/"
-   *   [ "";"" ]            is illegal
-   * 
-   * Except of s1 and sN, the path components must not be empty strings.
-   *
-   * To avoid ambiguities, it is illegal to create URLs with both relative
-   * paths (s1 <> "") and host components.
-   *
-   * Parameters of URLs are components beginning with ';'. The list
-   * of parameters is represented as list of strings where the strings
-   * contain the value following ';'.
-   *)
-
-val modify_url :
-      ?syntax:url_syntax ->
-      ?encoded:bool ->
-      ?scheme:string ->
-      ?user:string ->
-      ?password:string ->
-      ?host:string ->
-      ?port:int ->
-      ?path:string list ->
-      ?param:string list ->
-      ?query:string ->
-      ?fragment:string ->
-      ?other:string ->
-      url ->
-      url
-  (* Modifies the passed components and returns the modified URL. 
-   * The modfied URL shares unmodified components with the original
-   * URL.
-   *)
-
-val remove_from_url :
-      ?scheme:bool ->
-      ?user:bool ->
-      ?password:bool ->
-      ?host:bool ->
-      ?port:bool ->
-      ?path:bool ->
-      ?param:bool ->
-      ?query:bool ->
-      ?fragment:bool ->
-      ?other:bool ->
-      url ->
-      url
-  (* Removes the 'true' components from the URL, and returns the modified
-   * URL.
-   * The modfied URL shares unmodified components with the original
-   * URL.
-   *)
-
-val default_url :
-      ?encoded:bool -> 
-      ?scheme:string ->
-      ?user:string ->
-      ?password:string ->
-      ?host:string ->
-      ?port:int ->
-      ?path:string list ->
-      ?param:string list ->
-      ?query:string ->
-      ?fragment:string ->
-      ?other:string ->
-      url ->
-      url
-  (* Adds missing components and returns the modified URL.
-   * The modfied URL shares unmodified components with the original
-   * URL.
-   *)
-
-val undefault_url :
-      ?scheme:string ->
-      ?user:string ->
-      ?password:string ->
-      ?host:string ->
-      ?port:int ->
-      ?path:string list ->
-      ?param:string list ->
-      ?query:string ->
-      ?fragment:string ->
-      ?other:string ->
-      url ->
-      url
-  (* Removes components from the URL if they have the passed value, and
-   * returns the modified URL.
-   * Note: The values must always be passed in _encoded_ form!
-   * The modfied URL shares unmodified components with the original
-   * URL.
-   *)
-
-val url_syntax_of_url : url -> url_syntax
-  (* Returns the 'url_syntax' record of a URL. *)
-
-val url_of_string : url_syntax -> string -> url
-  (* Parses the passed string according to the passed url_syntax. *)
-
-val string_of_url : url -> string
-  (* Returns the URL as string *)
-
-val url_provides :
-      ?scheme:bool ->
-      ?user:bool ->
-      ?password:bool ->
-      ?host:bool ->
-      ?port:bool ->
-      ?path:bool ->
-      ?param:bool ->
-      ?query:bool ->
-      ?fragment:bool ->
-      ?other:bool ->
-      url ->
-      bool
-  (* Returns 'true' iff the URL has all of the components passed with
-   * 'true' value.
-   *)
-
-val url_scheme    :                  url -> string
-val url_user      : ?encoded:bool -> url -> string
-val url_password  : ?encoded:bool -> url -> string
-val url_host      :                  url -> string
-val url_port      :                  url -> int
-val url_path      : ?encoded:bool -> url -> string list
-val url_param     : ?encoded:bool -> url -> string list
-val url_query     : ?encoded:bool -> url -> string
-val url_fragment  : ?encoded:bool -> url -> string
-val url_other     : ?encoded:bool -> url -> string
-  (* Return components of the URL. The functions return decoded strings
-   * unless ~encoded:true is set.
-   * If the component does not exist, the exception Not_found
-   * is raised.
-   *)
-
-val split_path : string -> string list
-  (* Splits a '/'-separated path into components (e.g. to set up the
-   * ~path argument of make_url).
-   * E.g. split_path "a/b/c" = [ "a"; "b"; "c" ],
-   *      split_path "/a/b"  = [ ""; "a"; "b" ],
-   *      split_path "a/b/"  = [ "a"; "b"; "" ]
-   *)
-
-val join_path : string list -> string
-  (* Concatenates the path components (reverse function of split_path).
-   *)
-
-val norm_path : string list -> string list
-  (* Removes "." and ".." from the path if possible. Deletes double slashes.
-   *
-   * EXAMPLES:
-   *
-   * norm_path ["."] = []
-   *           means: "." = ""
-   * norm_path ["."; ""] = []
-   *           means: "./" = ""
-   * norm_path ["a"; "."] = ["a"; ""]
-   *           means: "a/." = "a/"
-   * norm_path ["a"; "b"; "."] = ["a"; "b"; ""]
-   *           means: "a/b/." = "a/b/"
-   * norm_path ["a"; "."; "b"; "."] = ["a"; "b"; ""]
-   *           means: "a/./b/." = "a/b/"
-   * norm_path [".."] = [".."; ""]
-   *           means: ".." = "../"
-   * norm_path [".."; ""] = [".."; ""]
-   *           means: "../" = "../"
-   * norm_path ["a"; "b"; ".."; "c" ] = ["a"; "c"]
-   *           means: "a/b/../c" = "a/c"
-   * norm_path ["a"; "b"; ".."; "c"; ""] = ["a"; "c"; ""]
-   *           means: "a/b/../c/" = "a/c/"
-   * norm_path ["";"";"a";"";"b"] = [""; "a"; "b"]
-   *           means: "//a//b" = "/a/b"
-   * norm_path ["a"; "b"; ""; ".."; "c"; ""] = ["a"; "c"; ""]
-   *           means: "a/b//../c/" = "a/c/"
-   * norm_path ["a"; ".."] = []
-   *           means: "a/.." = ""
-   *)
-
-
-val apply_relative_url : url -> url -> url
-  (* apply_relative_url base rel:
-   * Interprets 'rel' relative to 'base' and returns the new URL. This
-   * function implements RFC 1808.
-   *)
-
-val print_url : url -> unit
-  (* Printer for the toploop. *)
-
-(* ---------------------------------------------------------------------- *)
-
-(* EXAMPLES:
- *
- * let http = Hashtbl.find common_url_syntax "http";;
- * let u = url_of_string http "http://g:pw@host/a/%62/";;
- * string_of_url u;;
- *   --> "http://g:pw@host/a/%62/"
- * url_scheme u;;
- *   --> "http"
- * url_user u;;
- *   --> "g"
- * url_password u;;
- *   --> "pw"
- * url_host u;;
- *   --> "host"
- * url_path u;;
- *   --> [ ""; "a"; "b"; "" ]          (* sic! *)
- * url_path ~encoded:true u;;
- *   --> [ ""; "a"; "%62"; "" ]
- * let v = make_url 
- *   ~path:[ ".."; "c" ]
- *   ~fragment:"near-the-#-character"
- *   { (partial_url_syntax http) with url_enable_fragment = Url_part_allowed };;
- * string_of_url v;;
- *   --> "../c#near-the-%23-character"
- * let u' = modify_url ~syntax:(url_syntax_of_url v) u;;
- *    (* u does not permit fragments *)
- * let w = apply_relative_url u' v;;
- * string_of_url w;;
- *   --> "http://g:pw@host/c#near-the-%23-character"
- *)
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:27  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/06/26 22:57:49  gerd
- *     Change: The record 'url_syntax' has an additional component
- * 'url_accepts_8bits'. Setting this option to 'true' causes that
- * the bytes >= 0x80 are no longer rejected.
- *
- * Revision 1.2  2000/06/25 22:55:47  gerd
- *     Doc update.
- *
- * Revision 1.1  2000/06/24 20:19:59  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/netstring/tests/.cvsignore b/helm/DEVEL/pxp/netstring/tests/.cvsignore
deleted file mode 100644 (file)
index c1fcbc4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-*.cmo
-*.cmx
-*.cmi
-
-*.o
-*.a
-
diff --git a/helm/DEVEL/pxp/netstring/tests/Makefile b/helm/DEVEL/pxp/netstring/tests/Makefile
deleted file mode 100644 (file)
index 1aa5265..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Note: you need an appopriate toploop "ocamlfattop" to run the
-# tests.
-
-# 2nd note: "test_encoding.cgi" is a CGI script; you must invoke
-# it through browser and WWW server.
-
-test: test_recode
-       ocamlfattop test_netencoding.ml
-       ocamlfattop test_mimestring.ml
-       ocamlfattop test_cgi.ml
-       ocamlfattop test_neturl.ml
-       ./test_recode
-
-test_recode: test_recode.ml
-       ocamlc -custom -o test_recode unix.cma threads.cma str.cma \
-               ../netstring.cma ../netmappings_iso.cmo \
-               -I .. -thread test_recode.ml
-
-distclean: clean
-       rm -f *~ test_recode
-
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa
-
-CLEAN:
-
diff --git a/helm/DEVEL/pxp/netstring/tests/test_cgi.ml b/helm/DEVEL/pxp/netstring/tests/test_cgi.ml
deleted file mode 100644 (file)
index 43d9886..0000000
+++ /dev/null
@@ -1,423 +0,0 @@
-#require "str";;
-#directory "..";;
-#load "netstring.cma";;
-
-
-open Cgi;;
-
-(**********************************************************************)
-(* dest_form_encoded_parameters                                       *)
-(**********************************************************************)
-
-let t001 f =
-  let r =
-    f
-      "blah blah
---snip
-Content-Disposition: form-data; name=blupp
-
-This is a text
---snip--
-blah blah"
-      "snip"
-  in
-  r = ["blupp", "text/plain", "This is a text"]
-;;
-
-
-let t002 f =
-  let r =
-    f
-      "blah blah
---snip
-Content-Disposition: form-data; name=blupp
-
-This is a text
---snip--
-blah blah"
-      "snip"
-  in
-  r = ["blupp", "text/plain", "This is a text"]
-;;
-
-
-let t003 f =
-  let r =
-    f
-      "--snip
-Content-Disposition: form-data; name=blupp
-
-This is a text
---snip--"
-      "snip"
-  in
-  r = ["blupp", "text/plain", "This is a text"]
-;;
-
-
-let t004 f =
-  let r =
-    f
-      "--snip
-Content-Disposition: form-data; name=blupp
-
-This is a text
-
---snip--"
-      "snip"
-  in
-  r = ["blupp", "text/plain", "This is a text\013\n"]
-;;
-
-
-let t005 f =
-  let r =
-    f
-      "--snip
-Content-Disposition: form-data; name=blupp
-
-This is a text
-
---snip--"
-      "snip"
-  in
-  r = ["blupp", "text/plain", "This is a text\n"]
-;;
-
-
-let t006 f =
-  let r =
-    f
-      "blah blah
---snip
-Content-Disposition: form-data;name= \"blupp\"
-
-This is a text
---snip--
-blah blah"
-      "snip"
-  in
-  r = ["blupp", "text/plain", "This is a text"]
-;;
-
-
-let t007 f =
-  let r =
-    f
-      "blah blah
---snip
-Content-Disposition: form-data;name= \"name=blupp\"
-
-This is a text
---snip--
-blah blah"
-      "snip"
-  in
-  r = ["name=blupp", "text/plain", "This is a text"]
-;;
-
-
-let t008 f =
-  let r =
-    f
-      "blah blah
---snip
-Content-Disposition: form-data; strange=\"name=blop\"; name= \"blupp\"
-
-This is a text
---snip--
-blah blah"
-      "snip"
-  in
-  r = ["blupp", "text/plain", "This is a text"]
-;;
-
-
-let t009 f =
-  let r =
-    f
-      "blah blah
---snip
-Content-Disposition: form-data; strange=\" name=blop \";  name=blupp
-
-This is a text
---snip--
-blah blah"
-      "snip"
-  in
-  r = ["blupp", "text/plain", "This is a text"]
-;;
-
-
-let t010 f =
-  (* There is a space after "octet-stream"! *)
-  let r =
-    f
-      "--snip
-Content-Disposition: form-data; name=blupp
-Content-type:  application/octet-stream
-
-This is a text
---snip--"
-      "snip"
-  in
-  r = ["blupp", "application/octet-stream", "This is a text"]
-;;
-
-
-let t011 f =
-  let r =
-    f
-      "blah blah
---snip
-Content-Disposition: form-data; name=blupp
-
-This is a text
---snip
-Content-Disposition: form-data; name=blipp
-
-Another line
---snip-- blah
-blah blah"
-      "snip"
-  in
-  r = ["blupp", "text/plain", "This is a text";
-       "blipp", "text/plain", "Another line" ]
-;;
-
-
-let t012 f =
-  (* A real example *)
-   let r =
-     f
-"-----------------------------10843891265508332411092264958
-Content-Disposition: form-data; name=\"line\"
-
-aaa
------------------------------10843891265508332411092264958
-Content-Disposition: form-data; name=\"submit\"
-
-Submit
------------------------------10843891265508332411092264958--
-"
-      "---------------------------10843891265508332411092264958"
-   in
-   r = [ "line", "text/plain", "aaa";
-        "submit", "text/plain", "Submit";
-       ]
-;;
-
-
-(**********************************************************************)
-(* encode/decode                                                      *)
-(**********************************************************************)
-
-let t100() =
-  let s = String.create 256 in
-  for i = 0 to 255 do s.[i] <- Char.chr i done;
-  let r = encode s in
-  r = ("%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ^
-       "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ^
-       "+!%22%23$%25%26'()*%2B,-.%2F" ^
-       "0123456789%3A%3B%3C%3D%3E%3F" ^
-       "%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_" ^
-       "%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F" ^
-       "%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F" ^
-       "%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F" ^
-       "%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF" ^
-       "%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF" ^
-       "%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF" ^
-       "%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF" ^
-       "%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF" ^
-       "%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF")
-;;
-
-
-let t101() =
-  let r = String.create 256 in
-  for i = 0 to 255 do r.[i] <- Char.chr i done;
-  let s = decode
-           ("%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ^
-            "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ^
-            "+!%22%23$%25%26'()*%2B,-.%2F" ^
-            "0123456789%3A%3B%3C%3D%3E%3F" ^
-            "%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_" ^
-            "%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F" ^
-            "%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F" ^
-            "%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F" ^
-            "%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF" ^
-            "%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF" ^
-            "%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF" ^
-            "%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF" ^
-            "%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF" ^
-            "%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF") in
-  r = s
-;;
-
-
-let t102() =
-  let r = String.create 256 in
-  for i = 0 to 255 do r.[i] <- Char.chr i done;
-  let s = decode
-           ((String.lowercase
-               ("%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ^
-                "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ^
-                "+!%22%23$%25%26'()*%2B,-.%2F" ^
-                "0123456789%3A%3B%3C%3D%3E%3F")) ^
-            "%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_" ^
-            (String.lowercase
-               ("%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F" ^
-                "%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F" ^
-                "%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F" ^
-                "%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF" ^
-                "%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF" ^
-                "%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF" ^
-                "%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF" ^
-                "%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF" ^
-                "%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF"))) in
-  r = s
-;;
-
-(**********************************************************************)
-(* dest_url_encoded_parameters                                        *)
-(**********************************************************************)
-
-let t200() =
-  let r = dest_url_encoded_parameters "a=b&c=d" in
-  r = ["a", "b"; "c", "d" ]
-;;
-
-
-let t201() =
-  let r = dest_url_encoded_parameters "a=&c=d" in
-  r = ["a", ""; "c", "d" ]
-;;
-
-
-let t202() =
-  let r = dest_url_encoded_parameters "a=&c=" in
-  r = ["a", ""; "c", "" ]
-;;
-
-
-let t203() =
-  let r = dest_url_encoded_parameters "" in
-  r = []
-;;
-
-
-let t204() =
-  let r = dest_url_encoded_parameters "%41=%42" in
-  r = ["A", "B"]
-;;
-
-
-(**********************************************************************)
-
-let test f n =
-  if f() then
-    print_endline ("Test " ^ n ^ " ok")
-  else
-    print_endline ("Test " ^ n ^ " FAILED!!!!");
-  flush stdout
-;;
-
-
-let test_dest_form_encoded_parameters f n =
-  let dest s b =
-    let args = dest_form_encoded_parameters s b default_config in
-    List.map
-      (fun a -> arg_name a, arg_mimetype a, arg_value a)
-      args
-  in
-  if f dest then
-    print_endline ("Test dest_form_encoded_parameters " ^ n ^ " ok")
-  else
-    print_endline ("Test dest_form_encoded_parameters " ^ n ^ " FAILED!!!!");
-  flush stdout
-;;
-
-
-let fill_stream s =
-  (* Returns a channel that reads from string s.
-   * This requires forking.
-   *)
-  let rd, wr = Unix.pipe() in
-  let pid = Unix.fork() in
-  if pid = 0 then begin
-    Unix.close rd;
-    let out = Unix.out_channel_of_descr wr in
-    output_string out s;
-    close_out out;
-    exit(0);
-  end;
-  Unix.close wr;
-  Unix.in_channel_of_descr rd
-;;
-
-
-let test_dest_form_encoded_parameters_from_netstream f n =
-  let dest s b =
-    let fd = fill_stream s in
-    let bs = String.length b * 2 in
-    let stream = Netstream.create_from_channel fd None bs in
-    let args = dest_form_encoded_parameters_from_netstream
-                stream b default_config in
-
-(*
-    List.iter
-      (fun a ->
-        Printf.printf "name=%s mimetype=%s value=%s\n"
-          (arg_name a) (arg_mimetype a) (arg_value a))
-      args;
-*)
-    List.map
-      (fun a -> arg_name a, arg_mimetype a, arg_value a)
-      args
-  in
-  if f dest then
-    Printf.printf
-      "Test dest_form_encoded_parameters_from_netstream %s ok\n"
-      n
-  else
-    print_endline ("Test dest_form_encoded_parameters_from_netstream " ^ n ^ " FAILED!!!!");
-  flush stdout
-;;
-
-
-
-test_dest_form_encoded_parameters t001 "001";;
-test_dest_form_encoded_parameters t002 "002";;
-test_dest_form_encoded_parameters t003 "003";;
-test_dest_form_encoded_parameters t004 "004";;
-test_dest_form_encoded_parameters t005 "005";;
-test_dest_form_encoded_parameters t006 "006";;
-test_dest_form_encoded_parameters t007 "007";;
-test_dest_form_encoded_parameters t008 "008";;
-test_dest_form_encoded_parameters t009 "009";;
-test_dest_form_encoded_parameters t010 "010";;
-test_dest_form_encoded_parameters t011 "011";;
-test_dest_form_encoded_parameters t012 "012";;
-
-test_dest_form_encoded_parameters_from_netstream t001 "001";;
-test_dest_form_encoded_parameters_from_netstream t002 "002";;
-test_dest_form_encoded_parameters_from_netstream t003 "003";;
-test_dest_form_encoded_parameters_from_netstream t004 "004";;
-test_dest_form_encoded_parameters_from_netstream t005 "005";;
-test_dest_form_encoded_parameters_from_netstream t006 "006";;
-test_dest_form_encoded_parameters_from_netstream t007 "007";;
-test_dest_form_encoded_parameters_from_netstream t008 "008";;
-test_dest_form_encoded_parameters_from_netstream t009 "009";;
-test_dest_form_encoded_parameters_from_netstream t010 "010";;
-test_dest_form_encoded_parameters_from_netstream t011 "011";;
-test_dest_form_encoded_parameters_from_netstream t012 "012";;
-
-test t100 "100";;
-test t101 "101";;
-test t102 "102";;
-
-test t200 "200";;
-test t201 "201";;
-test t202 "202";;
-test t203 "203";;
-test t204 "204";;
diff --git a/helm/DEVEL/pxp/netstring/tests/test_encoding.cgi b/helm/DEVEL/pxp/netstring/tests/test_encoding.cgi
deleted file mode 100755 (executable)
index 2402cda..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-#! /bin/sh
-# (*
-exec /opt/ocaml-2.04/bin/ocamlfattop "$0" "$@"
-*) directory ".";;
-
-#directory "..";;
-#load "netstring.cma";;
-
-Cgi.header "";
-Cgi.parse_arguments 
-  { Cgi.default_config with
-      Cgi.how_to_process_arguments = (fun _ -> Cgi.File)
-  };
-let params = Cgi.arguments() in
-print_string "<html><body>\n";
-print_string "<h1>Parameters:</h1>\n";
-print_string "<ul>\n";
-List.iter
-  (fun (n,a) ->
-     print_string "<li>";
-     print_string n;
-     print_string ":";
-     print_string (Cgi.arg_mimetype a);
-     print_string "=";
-     (match Cgi.arg_filename a with
-         None -> ()
-       | Some fn -> print_string ("[filename=" ^ fn ^ "]")
-     );
-     print_string (Cgi.arg_value a);
-     print_string "</li>\n";
-
-  )
-  params;
-
-Cgi.cleanup();
-
-print_string "</ul>\n";
-
-print_string "<h1>GET URL-encoded form</h1>\n";
-print_string "<form action=\"test_encoding.cgi\" method=GET>\n";
-print_string "<input type=text name=line>\n";
-print_string "<input type=submit name=submit value=\"Submit\">\n";
-print_string "</form>\n";
-
-print_string "<h1>POST URL-encoded form</h1>\n";
-print_string "<form action=\"test_encoding.cgi\" method=POST>\n";
-print_string "<input type=text name=line>\n";
-print_string "<input type=submit name=submit value=\"Submit\">\n";
-print_string "</form>\n";
-
-print_string "<h1>POST FORM-encoded form</h1>\n";
-print_string "<form action=\"test_encoding.cgi\" method=POST enctype=\"multipart/form-data\">\n";
-print_string "<input type=text name=line>\n";
-print_string "<input type=text name=\"sträange\">\n";
-print_string "<input type=submit name=submit value=\"Submit\">\n";
-print_string "</form>\n";
-
-print_string "<h1>File upload</h1>\n";
-print_string "<form action=\"test_encoding.cgi\" method=POST enctype=\"multipart/form-data\">\n";
-print_string "<input type=text name=line>\n";
-print_string "<input type=file name=file>\n";
-print_string "<input type=submit name=submit value=\"Submit\">\n";
-print_string "</form>\n";
-
-
-
-print_string "</body></html>\n";
-
-flush stdout
-;;
-
-     
diff --git a/helm/DEVEL/pxp/netstring/tests/test_mimestring.ml b/helm/DEVEL/pxp/netstring/tests/test_mimestring.ml
deleted file mode 100644 (file)
index db5eac9..0000000
+++ /dev/null
@@ -1,589 +0,0 @@
-#require "str";;
-#directory "..";;
-#load "netstring.cma";;
-
-open Mimestring;;
-
-(**********************************************************************)
-(* scan_structured_value                                              *)
-(**********************************************************************)
-
-let t001() =
-  let r = scan_structured_value "user@domain.com" [ '@'; '.' ] [] in
-  r = [ Atom "user"; Special '@'; Atom "domain"; Special '.'; Atom "com" ]
-;;
-
-
-let t002() =
-  let r = scan_structured_value "user @ domain . com" [ '@'; '.' ]  [] in
-  r = [ Atom "user"; Special '@'; Atom "domain"; Special '.'; Atom "com" ]
-;;
-
-
-let t003() =
-  let r = scan_structured_value "user(Do you know him?)@domain.com" [ '@'; '.' ]
- []  in
-  r = [ Atom "user"; Special '@'; Atom "domain"; Special '.'; Atom "com" ]
-;;
-
-
-let t004() =
-  let r = scan_structured_value "user @ domain . com" [ '@'; '.'; ' ' ] []  in
-  r = [ Atom "user"; Special ' '; Special '@'; Special ' '; Atom "domain";
-       Special ' '; Special '.'; Special ' '; Atom "com" ]
-;;
-
-
-let t005() =
-  let r = scan_structured_value "user(Do you know him?)@domain.com"
-                               ['@'; '.'; '(']  [] in
-  r = [ Atom "user"; Special '('; Atom "Do"; Atom "you"; Atom "know";
-       Atom "him?)"; Special '@'; Atom "domain"; Special '.'; Atom "com" ]
-;;
-
-
-let t006() =
-  let r = scan_structured_value "\"My.name\"@domain.com" [ '@'; '.' ]  [] in
-  r = [ QString "My.name"; Special '@'; Atom "domain"; Special '.';
-       Atom "com" ]
-;;
-
-
-let t007() =
-  let r = scan_structured_value "\"\\\"()@. \"@domain.com" [ '@'; '.' ]  [] in
-  r = [ QString "\"()@. "; Special '@'; Atom "domain"; Special '.';
-       Atom "com" ]
-;;
-
-
-let t008() =
-  let r = scan_structured_value "a(b(c(d)e)f)g" [] [] in
-  r = [ Atom "a"; Atom "g" ]
-;;
-
-
-let t009() =
-  let r = scan_structured_value "a(b(c(d)e)f" [] [] in
-  r = [ Atom "a" ]
-;;
-
-
-let t010() =
-  let r = scan_structured_value "a(b\\(c\\(d\\)e)f" [] [] in
-  r = [ Atom "a"; Atom "f" ]
-;;
-
-
-let t011() =
-  let r = scan_structured_value "a(b(c(d)e)f\\" [] [] in
-  r = [ Atom "a" ]
-;;
-
-
-let t012() =
-  let r = scan_structured_value "\"abc" [] [] in
-  r = [ QString "abc" ]
-;;
-
-
-let t013() =
-  let r = scan_structured_value "\"abc\\" [] [] in
-  r = [ QString "abc\\" ]
-;;
-
-
-(* New tests for netstring-0.9: *)
-
-let t020() =
-  let r = scan_structured_value "user(Do you know him?)@domain.com" 
-           [ '@'; '.' ] [ Return_comments ] in
-  r = [ Atom "user"; Comment; Special '@'; Atom "domain"; Special '.'; 
-       Atom "com" ]
-;;
-
-let t021() =
-  let r = scan_structured_value "user (Do you know him?) @ domain . com"
-           [ '@'; '.'; ' ' ] [] in
-  r = [ Atom "user"; Special ' '; Special ' '; Special ' '; Special '@';
-       Special ' '; Atom "domain";
-       Special ' '; Special '.'; Special ' '; Atom "com" ]
-;;
-
-let t022() =
-  let r = scan_structured_value "user (Do you know him?) @ domain . com"
-           [ '@'; '.'; ' ' ] [ Return_comments ] in
-  r = [ Atom "user"; Special ' '; Comment; Special ' '; Special '@'; 
-       Special ' '; Atom "domain";
-       Special ' '; Special '.'; Special ' '; Atom "com" ]
-;;
-
-let t023() =
-  let r = scan_structured_value "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=" 
-           [] [] in
-  r = [ Atom "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=" ]
-;;
-
-let t024() =
-  let r = scan_structured_value "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=" 
-           [ ] [ Recognize_encoded_words ] in
-  r = [ EncodedWord("ISO-8859-1", "Q", "Keld_J=F8rn_Simonsen") ]
-;;
-
-let t025() =
-  let r = scan_structured_value 
-           "=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?= =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?="
-           []
-           [ Recognize_encoded_words ] in
-  r = [ EncodedWord
-         ("ISO-8859-1", "B", "SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=");
-       EncodedWord
-         ("ISO-8859-2", "B", "dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==")
-      ]
-;;
-
-(**********************************************************************)
-(* s_extended_token                                                   *)
-(**********************************************************************)
-
-let scan specials options str =
-  let scn = create_mime_scanner specials options str in
-  scan_token_list scn;;
-
-let t100() =
-  let r = scan [] [] "Two atoms" in
-  match r with
-      [ a1, Atom "Two"; a2, Atom "atoms" ] ->
-
-       (get_pos a1 = 0) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 0) &&
-       (get_length a1 = 3) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 4) &&
-       (get_line a2 = 1) &&
-       (get_column a2 = 4) &&
-       (get_length a2 = 5) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-
-let t101() =
-  let r = scan [] [] "  Two  atoms  " in
-  match r with
-      [ a1, Atom "Two"; a2, Atom "atoms" ] ->
-
-       (get_pos a1 = 2) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 2) &&
-       (get_length a1 = 3) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 7) &&
-       (get_line a2 = 1) &&
-       (get_column a2 = 7) &&
-       (get_length a2 = 5) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-
-let t102() =
-  let r = scan [] [] "  Two\n atoms  " in
-  match r with
-      [ a1, Atom "Two"; a2, Atom "atoms" ] ->
-
-       (get_pos a1 = 2) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 2) &&
-       (get_length a1 = 3) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 7) &&
-       (get_line a2 = 2) &&
-       (get_column a2 = 1) &&
-       (get_length a2 = 5) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-let t110() =
-  let r = scan [] [] "\"Two\" \"qstrings\"" in
-  match r with
-      [ a1, QString "Two"; a2, QString "qstrings" ] ->
-
-       (get_pos a1 = 0) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 0) &&
-       (get_length a1 = 5) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 6) &&
-       (get_line a2 = 1) &&
-       (get_column a2 = 6) &&
-       (get_length a2 = 10) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-let t111() =
-  let r = scan [] [] "  \"Two\"  \"qstrings\"  " in
-  match r with
-      [ a1, QString "Two"; a2, QString "qstrings" ] ->
-
-       (get_pos a1 = 2) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 2) &&
-       (get_length a1 = 5) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 9) &&
-       (get_line a2 = 1) &&
-       (get_column a2 = 9) &&
-       (get_length a2 = 10) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-let t112() =
-  let r = scan [] [] "  \"Two\nlines\"  \"and\nqstrings\"  " in
-  match r with
-      [ a1, QString "Two\nlines"; a2, QString "and\nqstrings" ] ->
-
-       (get_pos a1 = 2) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 2) &&
-       (get_length a1 = 11) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 15) &&
-       (get_line a2 = 2) &&
-       (get_column a2 = 8) &&
-       (get_length a2 = 14) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-let t113() =
-  let r = scan [] [] "  \"Two\\\nlines\"  \"and\\\nqstrings\"  " in
-  match r with
-      [ a1, QString "Two\nlines"; a2, QString "and\nqstrings" ] ->
-
-       (get_pos a1 = 2) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 2) &&
-       (get_length a1 = 12) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 16) &&
-       (get_line a2 = 2) &&
-       (get_column a2 = 8) &&
-       (get_length a2 = 15) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-let t120() =
-  (* Domain literals are implemented like quoted strings, so only the
-   * most complicated test case.
-   *)
-  let r = scan [] [] "  [Two\\\nlines]  [and\\\nliterals]  " in
-  match r with
-      [ a1, DomainLiteral "Two\nlines"; a2, DomainLiteral "and\nliterals" ] ->
-
-       (get_pos a1 = 2) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 2) &&
-       (get_length a1 = 12) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 16) &&
-       (get_line a2 = 2) &&
-       (get_column a2 = 8) &&
-       (get_length a2 = 15) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-let t130() =
-  let r = scan [] [ Return_comments ] "(Two) (comments)" in
-  match r with
-      [ a1, Comment; a2, Comment ] ->
-
-       (get_pos a1 = 0) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 0) &&
-       (get_length a1 = 5) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 6) &&
-       (get_line a2 = 1) &&
-       (get_column a2 = 6) &&
-       (get_length a2 = 10) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-let t131() =
-  let r = scan [] [ Return_comments ] "(Two\nlines) (and\ncomments)" in
-  match r with
-      [ a1, Comment; a2, Comment ] ->
-
-       (get_pos a1 = 0) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 0) &&
-       (get_length a1 = 11) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 12) &&
-       (get_line a2 = 2) &&
-       (get_column a2 = 7) &&
-       (get_length a2 = 14) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-let t132() =
-  let r = scan [] [ Return_comments ] "(Two\\\nlines) (and\\\ncomments)" in
-  match r with
-      [ a1, Comment; a2, Comment ] ->
-
-       (get_pos a1 = 0) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 0) &&
-       (get_length a1 = 12) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 13) &&
-       (get_line a2 = 2) &&
-       (get_column a2 = 7) &&
-       (get_length a2 = 15) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-let t133() =
-  let r = scan [] [ Return_comments ] "(a\n(b\nc)d\ne(f)) atom" in
-  match r with
-      [ a1, Comment; a2, Atom "atom" ] ->
-
-       (get_pos a1 = 0) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 0) &&
-       (get_length a1 = 15) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 16) &&
-       (get_line a2 = 4) &&
-       (get_column a2 = 6) &&
-       (get_length a2 = 4) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-let t140() = 
-  let r = scan [] [] "\031\031" in
-  match r with
-      [ a1, Control '\031'; a2, Control '\031' ] ->
-
-       (get_pos a1 = 0) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 0) &&
-       (get_length a1 = 1) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 1) &&
-       (get_line a2 = 1) &&
-       (get_column a2 = 1) &&
-       (get_length a2 = 1) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-let t150() = 
-  let r = scan [ '\t'; '\n' ] [] " \t\n  \n  \t" in
-  match r with
-      [ a1, Special '\t'; _, Special '\n'; _, Special '\n'; a2, Special '\t'] ->
-
-       (get_pos a1 = 1) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 1) &&
-       (get_length a1 = 1) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-
-       (get_pos a2 = 8) &&
-       (get_line a2 = 3) &&
-       (get_column a2 = 2) &&
-       (get_length a2 = 1) &&
-       (separates_adjacent_encoded_words a2 = false)
-
-    | _ ->
-       false
-;;
-
-let t160() =
-  let r = scan [] [ Recognize_encoded_words ] 
-           "=?iso8859-1?q?G=F6rd?= =?iso8859-1?q?G=F6rd?=" in
-  match r with
-      [ a1, EncodedWord("ISO8859-1", "Q", "G=F6rd"); 
-       a2, EncodedWord("ISO8859-1", "Q", "G=F6rd"); ] ->
-
-       (get_pos a1 = 0) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 0) &&
-       (get_length a1 = 22) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-       (get_decoded_word a1 = "Görd") &&
-       (get_charset a1 = "ISO8859-1") &&
-
-       (get_pos a2 = 23) &&
-       (get_line a2 = 1) &&
-       (get_column a2 = 23) &&
-       (get_length a2 = 22) &&
-       (separates_adjacent_encoded_words a2 = false) &&
-       (get_decoded_word a2 = "Görd") &&
-       (get_charset a2 = "ISO8859-1")
-
-    | _ ->
-       false
-;;
-
-let t161() =
-  let r = scan [ ' ' ] [ Recognize_encoded_words ] 
-           "=?iso8859-1?q?G=F6rd?= =?iso8859-1?q?G=F6rd?=" in
-  match r with
-      [ a1, EncodedWord("ISO8859-1", "Q", "G=F6rd"); 
-       sp, Special ' ';
-       a2, EncodedWord("ISO8859-1", "Q", "G=F6rd"); ] ->
-
-       (get_pos a1 = 0) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 0) &&
-       (get_length a1 = 22) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-       (get_decoded_word a1 = "Görd") &&
-       (get_charset a1 = "ISO8859-1") &&
-
-       (get_pos a2 = 23) &&
-       (get_line a2 = 1) &&
-       (get_column a2 = 23) &&
-       (get_length a2 = 22) &&
-       (separates_adjacent_encoded_words a2 = false) &&
-       (get_decoded_word a2 = "Görd") &&
-       (get_charset a2 = "ISO8859-1") &&
-
-       (separates_adjacent_encoded_words sp = true)
-
-    | _ ->
-       false
-;;
-
-let t162() =
-  let r = scan [ ' ' ] [ Recognize_encoded_words ] 
-           "=?iso8859-1?q?G=F6rd?=  =?iso8859-1?q?G=F6rd?=" in
-  match r with
-      [ a1, EncodedWord("ISO8859-1", "Q", "G=F6rd"); 
-       sp1, Special ' ';
-       sp2, Special ' ';
-       a2, EncodedWord("ISO8859-1", "Q", "G=F6rd"); ] ->
-
-       (get_pos a1 = 0) &&
-       (get_line a1 = 1) &&
-       (get_column a1 = 0) &&
-       (get_length a1 = 22) &&
-       (separates_adjacent_encoded_words a1 = false) &&
-       (get_decoded_word a1 = "Görd") &&
-       (get_charset a1 = "ISO8859-1") &&
-
-       (get_pos a2 = 24) &&
-       (get_line a2 = 1) &&
-       (get_column a2 = 24) &&
-       (get_length a2 = 22) &&
-       (separates_adjacent_encoded_words a2 = false) &&
-       (get_decoded_word a2 = "Görd") &&
-       (get_charset a2 = "ISO8859-1") &&
-
-       (separates_adjacent_encoded_words sp1 = true) &&
-       (separates_adjacent_encoded_words sp2 = true)
-
-    | _ ->
-       false
-;;
-
-
-
-(**********************************************************************)
-
-let test f n =
-  if f() then
-    print_endline ("Test " ^ n ^ " ok")
-  else
-    print_endline ("Test " ^ n ^ " FAILED!!!!");
-  flush stdout
-;;
-
-test t001 "001";;
-test t002 "002";;
-test t003 "003";;
-test t004 "004";;
-test t005 "005";;
-test t006 "006";;
-test t007 "007";;
-test t008 "008";;
-test t009 "009";;
-test t010 "010";;
-test t011 "011";;
-test t012 "012";;
-test t013 "013";;
-
-test t020 "020";;
-test t021 "021";;
-test t022 "022";;
-test t023 "023";;
-test t024 "024";;
-test t025 "025";;
-
-test t100 "100";;
-test t101 "101";;
-test t102 "102";;
-test t110 "110";;
-test t111 "111";;
-test t112 "112";;
-test t113 "113";;
-test t120 "120";;
-test t130 "130";;
-test t131 "131";;
-test t132 "132";;
-test t133 "133";;
-test t140 "140";;
-test t150 "150";;
-test t160 "160";;
-test t161 "161";;
-test t162 "162";;
diff --git a/helm/DEVEL/pxp/netstring/tests/test_netencoding.ml b/helm/DEVEL/pxp/netstring/tests/test_netencoding.ml
deleted file mode 100644 (file)
index 29673fa..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-#require "str";;
-#directory "..";;
-#load "netstring.cma";;
-
-
-open Netencoding;;
-
-(**********************************************************************)
-(* Base64                                                             *)
-(**********************************************************************)
-
-(* Test strings:
- * "", "a", "ab", "abc", "abcd", "abcde",
- * "abcdefghijklmnopqrstuvwxyz".
- *)
-
-let t001() =
-  (* ENCODE. No line breaks. *)
-  Base64.encode "" = "" &
-  Base64.encode "a" = "YQ==" &
-  Base64.encode "ab" = "YWI=" &
-  Base64.encode "abc" = "YWJj" &
-  Base64.encode "abcd" = "YWJjZA==" &
-  Base64.encode "abcde" = "YWJjZGU=" &
-  Base64.encode "abcdefghijklmnopqrstuvwxyz" =
-                "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo="
-;;
-
-
-let t002() =
-  (* ENCODE. Lines with length of 4, separated by LF *)
-  let abc = "abcdefghijklmnopqrstuvwxyz" in
-  Base64.encode_substring abc 0 0 4 false = "" &
-  Base64.encode_substring abc 0 1 4 false = "YQ==\n" &
-  Base64.encode_substring abc 0 2 4 false = "YWI=\n" &
-  Base64.encode_substring abc 0 3 4 false = "YWJj\n" &
-  Base64.encode_substring abc 0 4 4 false = "YWJj\nZA==\n" &
-  Base64.encode_substring abc 0 5 4 false = "YWJj\nZGU=\n" &
-  Base64.encode_substring abc 0 26 4 false = 
-    "YWJj\nZGVm\nZ2hp\namts\nbW5v\ncHFy\nc3R1\ndnd4\neXo=\n"
-;;
-
-
-let t003() =
-  (* ENCODE. Lines with length of 5, separated by LF *)
-  let abc = "abcdefghijklmnopqrstuvwxyz" in
-  Base64.encode_substring abc 0 0 5 false = "" &
-  Base64.encode_substring abc 0 1 5 false = "YQ==\n" &
-  Base64.encode_substring abc 0 2 5 false = "YWI=\n" &
-  Base64.encode_substring abc 0 3 5 false = "YWJj\n" &
-  Base64.encode_substring abc 0 4 5 false = "YWJj\nZA==\n" &
-  Base64.encode_substring abc 0 5 5 false = "YWJj\nZGU=\n" &
-  Base64.encode_substring abc 0 26 5 false = 
-    "YWJj\nZGVm\nZ2hp\namts\nbW5v\ncHFy\nc3R1\ndnd4\neXo=\n"
-;;
-
-
-let t004() =
-  (* ENCODE. Lines with length of 7, separated by LF *)
-  let abc = "abcdefghijklmnopqrstuvwxyz" in
-  Base64.encode_substring abc 0 0 7 false = "" &
-  Base64.encode_substring abc 0 1 7 false = "YQ==\n" &
-  Base64.encode_substring abc 0 2 7 false = "YWI=\n" &
-  Base64.encode_substring abc 0 3 7 false = "YWJj\n" &
-  Base64.encode_substring abc 0 4 7 false = "YWJj\nZA==\n" &
-  Base64.encode_substring abc 0 5 7 false = "YWJj\nZGU=\n" &
-  Base64.encode_substring abc 0 26 7 false = 
-    "YWJj\nZGVm\nZ2hp\namts\nbW5v\ncHFy\nc3R1\ndnd4\neXo=\n"
-;;
-
-
-let t005() =
-  (* ENCODE. Lines with length of 8, separated by LF *)
-  let abc = "abcdefghijklmnopqrstuvwxyz" in
-  Base64.encode_substring abc 0 0 8 false = "" &
-  Base64.encode_substring abc 0 1 8 false = "YQ==\n" &
-  Base64.encode_substring abc 0 2 8 false = "YWI=\n" &
-  Base64.encode_substring abc 0 3 8 false = "YWJj\n" &
-  Base64.encode_substring abc 0 4 8 false = "YWJjZA==\n" &
-  Base64.encode_substring abc 0 5 8 false = "YWJjZGU=\n" &
-  Base64.encode_substring abc 0 26 8 false = 
-    "YWJjZGVm\nZ2hpamts\nbW5vcHFy\nc3R1dnd4\neXo=\n"
-;;
-
-
-let t006() =
-  (* ENCODE. Lines with length of 8, separated by CRLF *)
-  let abc = "abcdefghijklmnopqrstuvwxyz" in
-  Base64.encode_substring abc 0 0 8 true = "" &
-  Base64.encode_substring abc 0 1 8 true = "YQ==\r\n" &
-  Base64.encode_substring abc 0 2 8 true = "YWI=\r\n" &
-  Base64.encode_substring abc 0 3 8 true = "YWJj\r\n" &
-  Base64.encode_substring abc 0 4 8 true = "YWJjZA==\r\n" &
-  Base64.encode_substring abc 0 5 8 true = "YWJjZGU=\r\n" &
-  Base64.encode_substring abc 0 26 8 true = 
-    "YWJjZGVm\r\nZ2hpamts\r\nbW5vcHFy\r\nc3R1dnd4\r\neXo=\r\n"
-;;
-
-
-let t020() =
-  (* DECODE. First test without spaces *)
-  Base64.decode_substring "" 0 0 false false = "" &
-  Base64.decode_substring "YQ==" 0 4 false false = "a" &
-  Base64.decode_substring "YWI=" 0 4 false false = "ab" &
-  Base64.decode_substring "YWJj" 0 4 false false = "abc" &
-  Base64.decode_substring "YWJjZA==" 0 8 false false = "abcd" &
-  Base64.decode_substring "YWJjZGU=" 0 8 false false = "abcde" &
-  Base64.decode_substring 
-    "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=" 0 36 false false =
-    "abcdefghijklmnopqrstuvwxyz"
-;;
-
-
-let t021() =
-  (* DECODE. With spaces *)
-  Base64.decode_substring " \r\n\t" 0 4 false true = "" &
-  Base64.decode_substring " Y W J j\n Z G U = " 0 18 false true = "abcde"
-;;
-
-let t022() =
-  (* DECODE. With URL characters and spaces *)
-  Base64.decode_substring " Y W J j\n Z G U = " 0 18 true true = "abcde" &
-  Base64.decode_substring " Y W J j\n Z G U . " 0 18 true true = "abcde"
-;;
-
-(**********************************************************************)
-(* Quoted Printable                                                   *)
-(**********************************************************************)
-
-let t100() =
-  (* ENCODE. *)
-  QuotedPrintable.encode "a %= 12345 &$[]\"" = "a %=3D 12345 &=24=5B=5D=22" &
-  QuotedPrintable.encode "\000\001\002" = "=00=01=02" &
-  QuotedPrintable.encode "abc\r\ndef\nghi" = "abc\r\ndef\nghi" &
-  QuotedPrintable.encode " abc\r\n def\n ghi" = " abc\r\n def\n ghi" &
-  QuotedPrintable.encode "abc \r\n def\nghi " = "abc=20\r\n def\nghi=20"
-;;
-
-
-let t120() =
-  (* DECODE. *)
-  QuotedPrintable.decode "a %=3D 12345 &=24=5B=5D=22" = "a %= 12345 &$[]\"" &
-  QuotedPrintable.decode "=00=01=02" = "\000\001\002" &
-  QuotedPrintable.decode "abc\r\ndef\nghi" = "abc\r\ndef\nghi" &
-  QuotedPrintable.decode " abc\r\n def\n ghi" = " abc\r\n def\n ghi" &
-  QuotedPrintable.decode "abc=20\r\n def\nghi=20" = "abc \r\n def\nghi " &
-  QuotedPrintable.decode "abc=\r\n def\nghi=20" = "abc def\nghi "
-;;
-
-(**********************************************************************)
-(* Q                                                                  *)
-(**********************************************************************)
-
-let t200() =
-  (* ENCODE. *)
-  Q.encode "a %= 12345 &$[]\"" = "a=20=25=3D=2012345=20=26=24=5B=5D=22" &
-  Q.encode "\000\001\002\r\n" = "=00=01=02=0D=0A"
-;;
-
-
-let t220() =
-  (* DECODE. *)
-  Q.decode "a=20=25=3D=2012345=20=26=24=5B=5D=22" = "a %= 12345 &$[]\"" &
-  Q.decode "=00=01=02=0D=0A" = "\000\001\002\r\n" &
-  Q.decode "a=20=25=3d=2012345=20=26=24=5b=5d=22" = "a %= 12345 &$[]\"" 
-;;
-
-(**********************************************************************)
-(* Url                                                                *)
-(**********************************************************************)
-
-(* Already tested for Cgi *)
-
-(**********************************************************************)
-(* Html                                                               *)
-(**********************************************************************)
-
-let t300() =
-  Html.encode_from_latin1 "<>&\"abcdefäöÜ\160\025'" = 
-    "&lt;&gt;&amp;&quot;abcdef&auml;&ouml;&Uuml;&nbsp;&#25;'"
-;;
-
-
-let t320() =
-  Html.decode_to_latin1 
-    "&lt;&gt;&amp;&quot;abcdef&auml;&ouml;&Uuml;&nbsp;&#25;" =
-    "<>&\"abcdefäöÜ\160\025" &
-  Html.decode_to_latin1 "&apos;" = "'" &
-  Html.decode_to_latin1 "&nonsense;" = "&nonsense;" &
-  Html.decode_to_latin1 "&#256;" = "&#256;"
-;;
-
-
-(**********************************************************************)
-
-let test f n =
-  if f() then
-    print_endline ("Test " ^ n ^ " ok")
-  else 
-    print_endline ("Test " ^ n ^ " FAILED!!!!");
-  flush stdout
-;;
-
-test t001 "001";
-test t002 "002";
-test t003 "003";
-test t004 "004";
-test t005 "005";
-test t006 "006";
-
-test t020 "020";
-test t021 "021";
-test t022 "022";
-
-test t100 "100";
-test t120 "120";
-
-test t200 "200";
-test t220 "220";
-
-test t300 "300";
-test t320 "320";
diff --git a/helm/DEVEL/pxp/netstring/tests/test_neturl.ml b/helm/DEVEL/pxp/netstring/tests/test_neturl.ml
deleted file mode 100644 (file)
index 633bfda..0000000
+++ /dev/null
@@ -1,969 +0,0 @@
-#directory "..";;
-#load "netstring.cma";;
-
-open Neturl;;
-
-
-let expect_malformed_url f =
-  try ignore(f()); false with Malformed_URL -> true;;
-
-let works f =
-  not (expect_malformed_url f)
-;;
-
-(**********************************************************************)
-(* extract_url_scheme                                                 *)
-(**********************************************************************)
-
-let t001 () =
-  extract_url_scheme "a:bc" = "a" &&
-  extract_url_scheme "A:bc" = "a" &&
-  extract_url_scheme "a:b:c" = "a" &&
-  extract_url_scheme "a+b-c:d:e" = "a+b-c"
-;;
-
-
-let t002 () =
-  let test s =
-    try ignore(extract_url_scheme s); false with Malformed_URL -> true
-  in
-  test "a" &&
-  test "a/b:c" &&
-  test "%61:b" &&
-  test "a%3ab"
-;;
-
-(**********************************************************************)
-(* url_syntax                                                         *)
-(**********************************************************************)
-
-let hashtbl_for_all f h =
-  let b = ref true in
-  Hashtbl.iter
-    (fun k v -> b := !b && f k v)
-    h;
-  !b
-;;
-
-let t010 () =
-  url_syntax_is_valid null_url_syntax &&
-  url_syntax_is_valid ip_url_syntax &&
-  hashtbl_for_all
-    (fun _ syn ->
-       url_syntax_is_valid syn
-    )
-    common_url_syntax
-;;
-
-let t011 () =
-  url_syntax_is_valid (partial_url_syntax null_url_syntax) &&
-  url_syntax_is_valid (partial_url_syntax ip_url_syntax) &&
-  hashtbl_for_all
-    (fun _ syn ->
-       url_syntax_is_valid (partial_url_syntax syn)
-    )
-    common_url_syntax
-;;
-
-let t012 () =
-  let f = fun _ -> true in
-  let syn =
-    { url_enable_scheme    = Url_part_not_recognized;
-      url_enable_user      = Url_part_required;
-      url_enable_password  = Url_part_allowed;
-      url_enable_host      = Url_part_required;
-      url_enable_port      = Url_part_not_recognized;
-      url_enable_path      = Url_part_required;
-      url_enable_param     = Url_part_not_recognized;
-      url_enable_query     = Url_part_not_recognized;
-      url_enable_fragment  = Url_part_required;
-      url_enable_other     = Url_part_not_recognized;
-      url_accepts_8bits    = false;
-      url_is_valid         = f;
-    } in
-  let syn' = partial_url_syntax syn in
-  
-  (syn'.url_enable_scheme    = Url_part_not_recognized) &&
-  (syn'.url_enable_user      = Url_part_allowed) &&
-  (syn'.url_enable_password  = Url_part_allowed) &&
-  (syn'.url_enable_host      = Url_part_allowed) &&
-  (syn'.url_enable_port      = Url_part_not_recognized) &&
-  (syn'.url_enable_path      = Url_part_allowed) &&
-  (syn'.url_enable_param     = Url_part_not_recognized) &&
-  (syn'.url_enable_query     = Url_part_not_recognized) &&
-  (syn'.url_enable_fragment  = Url_part_allowed) &&
-  (syn'.url_enable_other     = Url_part_not_recognized) &&
-  (syn'.url_is_valid        == f) &&
-
-  url_syntax_is_valid syn &&
-  url_syntax_is_valid syn'
-;;
-
-(**********************************************************************)
-(* make_url                                                           *)
-(**********************************************************************)
-
-let t020 () =
-  (* Basic functionality: *)
-  let http_syn = Hashtbl.find common_url_syntax "http" in
-
-  let u1 = make_url
-            (* default: not encoded *)
-            ~scheme:"http"
-            ~user:"U"
-            ~password:"%()~$@"
-            ~host:"a.b.c"
-            ~port:81
-            ~path:["";"?";""]
-            http_syn in
-
-  url_provides 
-    ~scheme:true ~user:true ~password:true ~host:true ~port:true ~path:true 
-    u1 &&
-
-  not
-    (url_provides
-       ~scheme:true ~user:true ~password:true ~host:true ~port:true ~path:true 
-       ~query:true u1) &&
-
-  (url_syntax_of_url u1 == http_syn) &&
-
-  (url_scheme   u1 = "http") &&
-  (url_user     u1 = "U") &&
-  (url_password u1 = "%()~$@") &&
-  (url_host     u1 = "a.b.c") &&
-  (url_port     u1 = 81) &&
-  (url_path     u1 = ["";"?";""]) &&
-
-  (url_user     ~encoded:true u1 = "U") &&
-  (url_password ~encoded:true u1 = "%25()%7E$%40") &&
-  (url_path     ~encoded:true u1 = ["";"%3F";""]) &&
-
-  string_of_url u1 = "http://U:%25()%7E$%40@a.b.c:81/%3F/"
-;;
-
-
-let t021 () =
-  (* Basic functionality: *)
-  let http_syn = Hashtbl.find common_url_syntax "http" in
-
-  let u1 = make_url
-            ~encoded:true
-            ~scheme:"http"
-            ~user:"%55"
-            ~password:"%25()%7e$%40"
-            ~host:"a.b.c"
-            ~port:81
-            ~path:["";"%3F";""]
-            http_syn in
-
-  url_provides 
-    ~scheme:true ~user:true ~password:true ~host:true ~port:true ~path:true 
-    u1 &&
-
-  not
-    (url_provides
-       ~scheme:true ~user:true ~password:true ~host:true ~port:true ~path:true 
-       ~query:true u1) &&
-
-  (url_syntax_of_url u1 == http_syn) &&
-
-  (url_scheme   u1 = "http") &&
-  (url_user     u1 = "U") &&
-  (url_password u1 = "%()~$@") &&
-  (url_host     u1 = "a.b.c") &&
-  (url_port     u1 = 81) &&
-  (url_path     u1 = ["";"?";""]) &&
-
-  (url_user     ~encoded:true u1 = "%55") &&
-  (url_password ~encoded:true u1 = "%25()%7e$%40") &&
-  (url_path     ~encoded:true u1 = ["";"%3F";""]) &&
-
-  string_of_url u1 = "http://%55:%25()%7e$%40@a.b.c:81/%3F/"
-;;
-
-
-(* NEGATIVE TESTS *)
-
-let t030 () =
-  (* It is not possible to add a component which is not recognized *)
-  let http_syn = Hashtbl.find common_url_syntax "http" in
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~scheme:"http"
-        ~user:"U"
-        ~password:"%()~$@"
-        ~host:"a.b.c"
-        ~port:81
-        ~path:["";"?";""]
-        ~fragment:"abc"
-        http_syn)
-;;
-
-
-let t031 () =
-  (* It is not possible to put malformed '%'-encodings into the URL *)
-  let http_syn = Hashtbl.find common_url_syntax "http" in
-
-  works                      (* reference *)
-    (fun () ->
-       make_url
-        ~encoded:true
-        ~scheme:"http"
-        ~user:"U"
-        ~password:"XX"
-        ~host:"a.b.c"
-        ~port:81
-        ~path:["";"a";""]
-        http_syn) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~encoded:true
-        ~scheme:"http"
-        ~user:"U"
-        ~password:"%XX"
-        ~host:"a.b.c"
-        ~port:81
-        ~path:["";"a";""]
-        http_syn) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~encoded:true
-        ~scheme:"http"
-        ~user:"U"
-        ~password:"%X"
-        ~host:"a.b.c"
-        ~port:81
-        ~path:["";"a";""]
-        http_syn) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~encoded:true
-        ~scheme:"http"
-        ~user:"U"
-        ~password:"%"
-        ~host:"a.b.c"
-        ~port:81
-        ~path:["";"a";""]
-        http_syn) 
-;;
-
-let t032 () =
-  (* It is not possible to put unsafe characters into the URL *)
-  let http_syn = Hashtbl.find common_url_syntax "http" in
-
-  let make c =
-    make_url
-      ~encoded:true
-      ~scheme:"http"
-      ~user:"U"
-      ~password:(String.make 1 c)
-      ~host:"a.b.c"
-      ~port:81
-      ~path:["";"a";""]
-      http_syn
-  in
-
-  works (fun () -> make 'a') &&                   (* reference *)
-
-  (* List of unsafe characters taken from RFC1738: *)
-  expect_malformed_url (fun () -> make '<') && 
-  expect_malformed_url (fun () -> make '>') && 
-  expect_malformed_url (fun () -> make '"') && 
-  expect_malformed_url (fun () -> make '#') && 
-    (* Note: '#' would be considered as reserved if fragments were enabled *)
-  expect_malformed_url (fun () -> make '%') && 
-  expect_malformed_url (fun () -> make '{') && 
-  expect_malformed_url (fun () -> make '}') && 
-  expect_malformed_url (fun () -> make '|') && 
-  expect_malformed_url (fun () -> make '\\') && 
-  expect_malformed_url (fun () -> make '^') && 
-  expect_malformed_url (fun () -> make '[') && 
-  expect_malformed_url (fun () -> make ']') && 
-  expect_malformed_url (fun () -> make '`') &&
-  expect_malformed_url (fun () -> make '~') &&
-    (* Note: '~' is considered as safe in paths: *)
-  works 
-    (fun () ->
-    make_url
-      ~encoded:true
-      ~scheme:"http"
-      ~user:"U"
-      ~password:"a"
-      ~host:"a.b.c"
-      ~port:81
-      ~path:["";"~";""]
-      http_syn)
-;;
-
-let t033 () =
-  (* It is not possible to put reserved characters into the URL *)
-  let http_syn = Hashtbl.find common_url_syntax "http" in
-
-  let make_password c =
-    make_url
-      ~encoded:true
-      ~scheme:"http"
-      ~user:"U"
-      ~password:(String.make 1 c)
-      ~host:"a.b.c"
-      ~port:81
-      ~path:["";"a";""]
-      http_syn
-  in
-  let make_path c =
-    make_url
-      ~encoded:true
-      ~scheme:"http"
-      ~user:"U"
-      ~password:"a"
-      ~host:"a.b.c"
-      ~port:81
-      ~path:["";String.make 1 c;""]
-      http_syn
-  in
-  let make_query c =
-    make_url
-      ~encoded:true
-      ~scheme:"http"
-      ~user:"U"
-      ~password:"a"
-      ~host:"a.b.c"
-      ~port:81
-      ~path:["";"a";""]
-      ~query:(String.make 1 c)
-      http_syn
-  in
-
-  (* Note: There is a difference between RFC 1738 and RFC 1808 regarding
-   * which characters are reserved. RFC 1808 defines a fixed set of characters
-   * as reserved while RFC 1738 defines the reserved characters depending
-   * on the scheme.
-   * This implementation of URLs follows RFC 1738 (because of practical
-   * reasons).
-   *)
-
-  works (fun () -> make_password 'a') &&                   (* reference *)
-  works (fun () -> make_path 'a') &&
-  works (fun () -> make_query 'a') &&
-
-  expect_malformed_url (fun () -> make_password ':') && 
-  expect_malformed_url (fun () -> make_password '@') && 
-  expect_malformed_url (fun () -> make_password '/') && 
-  works                (fun () -> make_password ';') &&
-  works                (fun () -> make_password '?') &&
-  works                (fun () -> make_password '=') &&
-  works                (fun () -> make_password '&') &&
-
-  (* Note: ';' is allowed in path and query because parameters are not
-   * recognized in HTTP syntax.
-   *)
-
-  expect_malformed_url (fun () -> make_path '/') && 
-  expect_malformed_url (fun () -> make_path '?') && 
-  works                (fun () -> make_path ':') && 
-  works                (fun () -> make_path '@') && 
-  works                (fun () -> make_path ';') && 
-  works                (fun () -> make_path '=') && 
-  works                (fun () -> make_path '&') && 
-
-  expect_malformed_url (fun () -> make_query '?') && 
-  works                (fun () -> make_query '/') && 
-  works                (fun () -> make_query ':') && 
-  works                (fun () -> make_query '@') && 
-  works                (fun () -> make_query ';') && 
-  works                (fun () -> make_query '=') && 
-  works                (fun () -> make_query '&')
-;;
-
-
-let t034 () =
-  (* It is not possible to create a URL with a password, but without user;
-   * and neither to create a URL with a port, but without host;
-   * and neither to create a URL with a user, but without host
-   *)
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~scheme:"http"
-        ~password:"a"
-        ~host:"a.b.c"
-        ~path:["";"a";""]
-        ip_url_syntax) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~scheme:"http"
-        ~user:"U"
-        ~path:["";"a";""]
-        ip_url_syntax) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~scheme:"http"
-        ~port:81
-        ~path:["";"a";""]
-        ip_url_syntax)
-;;
-
-
-let t035 () =
-  (* It is not possible to create a URL with illegal scheme prefix *)
-  
-  (* reference: *)
-  works
-    (fun () ->
-       make_url
-        ~scheme:"a"
-        ip_url_syntax) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~scheme:":"
-        ip_url_syntax) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~scheme:"a=b"
-        ip_url_syntax) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~scheme:"a%62b"
-        ip_url_syntax) &&
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~scheme:"a&b"
-        ip_url_syntax)
-;;
-
-
-let t036 () =
-  (* It is not possible to have a path with double slashes *)
-  
-  (* reference: *)
-  works
-    (fun () ->
-       make_url
-        ~path:["";"a";""]
-        ip_url_syntax) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~path:["";""]
-        ip_url_syntax) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~path:["a";"";""]
-        ip_url_syntax) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~path:["";"";"a"]
-        ip_url_syntax) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~path:["a";"";"a"]
-        ip_url_syntax)
-;;
-
-
-let t037 () =
-  (* It is not possible to have port numbers outside 0..65535 *)
-  
-  (* reference: *)
-  works
-    (fun () ->
-       make_url
-        ~host:"a"
-        ~port:1
-        ip_url_syntax) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~host:"a"
-        ~port:(-1)
-        ip_url_syntax) &&
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~host:"a"
-        ~port:65536
-        ip_url_syntax)
-;;
-
-
-let t038 () =
-  (* Several cases which are not allowed. *)
-  
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~host:"a"
-        ~path:["a"]
-        ip_url_syntax
-    ) &&                       (* illegal: host + relative path *)
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~host:"a"
-        ~path:[]
-        ~param:["x"]
-        ip_url_syntax
-    ) &&                       (* illegal: host + no path + params *)
-
-  expect_malformed_url
-    (fun () ->
-       make_url
-        ~host:"a"
-        ~path:[]
-        ~query:"x"
-        ip_url_syntax
-    )                          (* illegal: host + no path + query *)
-;;
-
-(**********************************************************************)
-(* url_of_string                                                      *)
-(**********************************************************************)
-
-let t050 () =
-  (* absolute URLs with ip_url_syntax *)
-  let identical s =
-    string_of_url (url_of_string ip_url_syntax s) = s in
-
-  let fails s =
-    try ignore(url_of_string ip_url_syntax s); false 
-    with Malformed_URL -> true
-  in
-
-  identical "http:" &&
-
-  identical "http://host" &&
-  identical "http://user@host" &&
-  identical "http://user:password@host" &&
-  identical "http://user@host:99" &&
-  identical "http://user:password@host:99" &&
-
-  identical "http://host/" &&
-  identical "http://user@host/" &&
-  identical "http://user:password@host/" &&
-  identical "http://user@host:99/" &&
-  identical "http://user:password@host:99/" &&
-
-  identical "http://host/a/b" &&
-  identical "http://user@host/a/b" &&
-  identical "http://user:password@host/a/b" &&
-  identical "http://user@host:99/a/b" &&
-  identical "http://user:password@host:99/a/b" &&
-
-  identical "http://host/a/b/" &&
-  identical "http://user@host/a/b/" &&
-  identical "http://user:password@host/a/b/" &&
-  identical "http://user@host:99/a/b/" &&
-  identical "http://user:password@host:99/a/b/" &&
-
-  identical "http://host/?a=b&c=d" &&
-  identical "http://user@host/?a=b&c=d" &&
-  identical "http://user:password@host/?a=b&c=d" &&
-  identical "http://user@host:99/?a=b&c=d" &&
-  identical "http://user:password@host:99/?a=b&c=d" &&
-
-  fails "http://host?a=b&c=d" &&
-  fails "http://user@host?a=b&c=d" &&
-  fails "http://user:password@host?a=b&c=d" &&
-  fails "http://user@host:99?a=b&c=d" &&
-  fails "http://user:password@host:99?a=b&c=d" &&
-
-  identical "http://host/?a=/&c=/" &&
-  identical "http://user@host/?a=/&c=/" &&
-  identical "http://user:password@host/?a=/&c=/" &&
-  identical "http://user@host:99/?a=/&c=/" &&
-  identical "http://user:password@host:99/?a=/&c=/" &&
-
-  identical "http://host/;a;b" &&
-  identical "http://user@host/;a;b" &&
-  identical "http://user:password@host/;a;b" &&
-  identical "http://user@host:99/;a;b" &&
-  identical "http://user:password@host:99/;a;b" &&
-
-  fails "http://host;a;b" &&
-  fails "http://user@host;a;b" &&
-  fails "http://user:password@host;a;b" &&
-  fails "http://user@host:99;a;b" &&
-  fails "http://user:password@host:99;a;b" &&
-
-  identical "http://host/;a;b?a=b&c=d" &&
-  identical "http://user@host/;a;b?a=b&c=d" &&
-  identical "http://user:password@host/;a;b?a=b&c=d" &&
-  identical "http://user@host:99/;a;b?a=b&c=d" &&
-  identical "http://user:password@host:99/;a;b?a=b&c=d" &&
-
-  identical "http:#f" &&
-
-  identical "http://host#f" &&
-  identical "http://user@host#f" &&
-  identical "http://user:password@host#f" &&
-  identical "http://user@host:99#f" &&
-  identical "http://user:password@host:99#f" &&
-
-  identical "http://host/;a;b?a=b&c=d#f" &&
-  identical "http://user@host/;a;b?a=b&c=d#f" &&
-  identical "http://user:password@host/;a;b?a=b&c=d#f" &&
-  identical "http://user@host:99/;a;b?a=b&c=d#f" &&
-  identical "http://user:password@host:99/;a;b?a=b&c=d#f" &&
-
-  true
-;;
-
-
-let t051 () =
-  (* relative URLs with ip_url_syntax *)
-  let identical s =
-    string_of_url (url_of_string ip_url_syntax s) = s in
-
-  let fails s =
-    try ignore(url_of_string ip_url_syntax s); false 
-    with Malformed_URL -> true
-  in
-
-  identical "//host" &&
-  identical "//user@host" &&
-  identical "//user:password@host" &&
-  identical "//user@host:99" &&
-  identical "//user:password@host:99" &&
-
-  identical "//host/" &&
-  identical "//user@host/" &&
-  identical "//user:password@host/" &&
-  identical "//user@host:99/" &&
-  identical "//user:password@host:99/" &&
-
-  identical "//host#f" &&
-  identical "//user@host#f" &&
-  identical "//user:password@host#f" &&
-  identical "//user@host:99#f" &&
-  identical "//user:password@host:99#f" &&
-
-  identical "/" &&
-  identical "/a" &&
-  identical "/a/" &&
-  identical "/a/a" &&
-
-  identical "/;a;b" &&
-  identical "/a;a;b" &&
-  identical "/a/;a;b" &&
-  identical "/a/a;a;b" &&
-
-  identical "/?a=b&c=d" &&
-  identical "/a?a=b&c=d" &&
-  identical "/a/?a=b&c=d" &&
-  identical "/a/a?a=b&c=d" &&
-
-  identical "/;a;b?a=b&c=d" &&
-  identical "/a;a;b?a=b&c=d" &&
-  identical "/a/;a;b?a=b&c=d" &&
-  identical "/a/a;a;b?a=b&c=d" &&
-
-  identical "/#f" &&
-  identical "/a#f" &&
-  identical "/a/#f" &&
-  identical "/a/a#f" &&
-
-  identical "/;a;b#f" &&
-  identical "/a;a;b#f" &&
-  identical "/a/;a;b#f" &&
-  identical "/a/a;a;b#f" &&
-
-  identical "/;a;b?a=b&c=d#f" &&
-  identical "/a;a;b?a=b&c=d#f" &&
-  identical "/a/;a;b?a=b&c=d#f" &&
-  identical "/a/a;a;b?a=b&c=d#f" &&
-
-  identical "" &&
-  identical "a" &&
-  identical "a/" &&
-  identical "a/a" &&
-
-  identical ";a;b" &&
-  identical "a;a;b" &&
-  identical "a/;a;b" &&
-  identical "a/a;a;b" &&
-
-  identical "?a=b&c=d" &&
-  identical "a?a=b&c=d" &&
-  identical "a/?a=b&c=d" &&
-  identical "a/a?a=b&c=d" &&
-
-  identical ";a;b?a=b&c=d" &&
-  identical "a;a;b?a=b&c=d" &&
-  identical "a/;a;b?a=b&c=d" &&
-  identical "a/a;a;b?a=b&c=d" &&
-
-  identical "#f" &&
-  identical "a#f" &&
-  identical "a/#f" &&
-  identical "a/a#f" &&
-
-  identical ";a;b#f" &&
-  identical "a;a;b#f" &&
-  identical "a/;a;b#f" &&
-  identical "a/a;a;b#f" &&
-
-  identical ";a;b?a=b&c=d#f" &&
-  identical "a;a;b?a=b&c=d#f" &&
-  identical "a/;a;b?a=b&c=d#f" &&
-  identical "a/a;a;b?a=b&c=d#f" &&
-
-  identical "." &&
-  identical "./" &&
-  identical "./a" &&
-
-  identical ".;a;b" &&
-  identical "./;a;b" &&
-  identical "./a;a;b" &&
-
-  identical ".?a=b&c=d" &&
-  identical "./?a=b&c=d" &&
-  identical "./a?a=b&c=d" &&
-
-  identical ".;a;b?a=b&c=d" &&
-  identical "./;a;b?a=b&c=d" &&
-  identical "./a;a;b?a=b&c=d" &&
-
-  identical ".#f" &&
-  identical "./#f" &&
-  identical "./a#f" &&
-
-  identical ".;a;b#f" &&
-  identical "./;a;b#f" &&
-  identical "./a;a;b#f" &&
-
-  identical ".;a;b?a=b&c=d#f" &&
-  identical "./;a;b?a=b&c=d#f" &&
-  identical "./a;a;b?a=b&c=d#f" &&
-
-  identical ".." &&
-  identical "../" &&
-  identical "../a" &&
-
-  identical "..;a;b" &&
-  identical "../;a;b" &&
-  identical "../a;a;b" &&
-
-  identical "..?a=b&c=d" &&
-  identical "../?a=b&c=d" &&
-  identical "../a?a=b&c=d" &&
-
-  identical "..;a;b?a=b&c=d" &&
-  identical "../;a;b?a=b&c=d" &&
-  identical "../a;a;b?a=b&c=d" &&
-
-  identical "..#f" &&
-  identical "../#f" &&
-  identical "../a#f" &&
-
-  identical "..;a;b#f" &&
-  identical "../;a;b#f" &&
-  identical "../a;a;b#f" &&
-
-  identical "..;a;b?a=b&c=d#f" &&
-  identical "../;a;b?a=b&c=d#f" &&
-  identical "../a;a;b?a=b&c=d#f" &&
-
-  string_of_url
-    (make_url ~path:["a:b"] ip_url_syntax) = "a%3Ab" &&
-
-  string_of_url
-    (make_url ~encoded:true ~path:["a:b"] ip_url_syntax) = "./a:b" &&
-
-  true
-;;
-
-
-let t052 () =
-  (* mailto: URLs *)
-  let mailto_syn = Hashtbl.find common_url_syntax "mailto" in
-
-  let identical s =
-    string_of_url (url_of_string mailto_syn s) = s in
-
-  let fails s =
-    try ignore(url_of_string mailto_syn s); false 
-    with Malformed_URL -> true
-  in
-
-  identical "mailto:user@host" &&
-  identical "mailto:user@host;?;?" &&
-  fails     "mailto:user@host#f"
-;;
-
-(**********************************************************************)
-(* split_path/join_path/norm_path:                                    *)
-(**********************************************************************)
-
-let t060 () =
-  (split_path "" = []) &&
-  (split_path "/" = [ "" ]) &&
-  (split_path "/a" = [ ""; "a" ]) &&
-  (split_path "a" = [ "a" ]) &&
-  (split_path "a/" = [ "a"; "" ]) &&
-  (split_path "/a/" = [ ""; "a"; "" ]) &&
-  (split_path "/a/b" = [ ""; "a"; "b" ]) &&
-  (split_path "/a/b/" = [ ""; "a"; "b"; "" ]) &&
-  (split_path "/a/b/c" = [ ""; "a"; "b"; "c" ]) &&
-
-  (join_path [] = "") &&
-  (join_path [ "" ] = "/") &&
-  (join_path [ ""; "a" ] = "/a") &&
-  (join_path [ "a" ] = "a") &&
-  (join_path [ "a"; "" ] = "a/") &&
-  (join_path [ ""; "a"; "" ] = "/a/") &&
-  (join_path [ ""; "a"; "b" ] = "/a/b") &&
-  (join_path [ ""; "a"; "b"; "" ] = "/a/b/") &&
-  (join_path [ ""; "a"; "b"; "c" ] = "/a/b/c") &&
-
-  true
-;;
-
-
-let t061 () =
-  (norm_path ["."] = []) &&
-  (norm_path ["."; ""] = []) &&
-  (norm_path ["a"; "."] = ["a"; ""]) &&
-  (norm_path ["a"; "b"; "."] = ["a"; "b"; ""]) &&
-  (norm_path ["a"; "b"; ".."] = ["a"; ""]) &&
-  (norm_path ["a"; "."; "b"; "."] = ["a"; "b"; ""]) &&
-  (norm_path [".."] = [".."; ""]) &&
-  (norm_path [".."; ""] = [".."; ""]) &&
-  (norm_path ["a"; "b"; ".."; "c" ] = ["a"; "c"]) &&
-  (norm_path ["a"; "b"; ".."; "c"; ""] = ["a"; "c"; ""]) &&
-  (norm_path ["";"";"a";"";"b"] = [""; "a"; "b"]) &&
-  (norm_path ["a"; "b"; ""; ".."; "c"; ""] = ["a"; "c"; ""]) &&
-  (norm_path ["a"; ".."] = []) &&
-  (norm_path ["";""] = [""]) &&
-  (norm_path [""] = [""]) &&
-  (norm_path [] = []) &&
-
-  true
-;;
-                 
-(**********************************************************************)
-(* apply_relative_url:                                                *)
-(**********************************************************************)
-
-let t070() =
-  (* Examples taken from RFC 1808 *)
-  let url = url_of_string ip_url_syntax in
-  let base = url "http://a/b/c/d;p?q#f" in
-  let aru = apply_relative_url base in
-
-  (aru (url "g:h")     = url "g:h") &&
-  (aru (url "g")       = url "http://a/b/c/g") &&
-  (aru (url "./g")     = url "http://a/b/c/g") &&
-  (aru (url "g/")      = url "http://a/b/c/g/") &&
-  (aru (url "/g")      = url "http://a/g") &&
-  (aru (url "//g")     = url "http://g") &&
-  (aru (url "?y")      = url "http://a/b/c/d;p?y") &&
-  (aru (url "g?y")     = url "http://a/b/c/g?y") &&
-  (aru (url "g?y/./x") = url "http://a/b/c/g?y/./x") &&
-  (aru (url "#s")      = url "http://a/b/c/d;p?q#s") &&
-  (aru (url "g#s")     = url "http://a/b/c/g#s") &&
-  (aru (url "g#s/./x") = url "http://a/b/c/g#s/./x") &&
-  (aru (url "g?y#s")   = url "http://a/b/c/g?y#s") &&
-  (aru (url ";x")      = url "http://a/b/c/d;x") &&
-  (aru (url "g;x")     = url "http://a/b/c/g;x") &&
-  (aru (url "g;x?y#s") = url "http://a/b/c/g;x?y#s") &&
-  (aru (url ".")       = url "http://a/b/c/") &&
-  (aru (url "./")      = url "http://a/b/c/") &&
-  (aru (url "..")      = url "http://a/b/") &&
-  (aru (url "../")     = url "http://a/b/") &&
-  (aru (url "../g")    = url "http://a/b/g") &&
-  (aru (url "../..")   = url "http://a/") &&
-  (aru (url "../../")  = url "http://a/") &&
-  (aru (url "../../g") = url "http://a/g") &&
-
-  (aru (url "")              = url "http://a/b/c/d;p?q#f") &&
-  (aru (url "../../../g")    = url "http://a/../g") &&
-  (aru (url "../../../../g") = url "http://a/../../g") &&
-  (aru (url "/./g")          = url "http://a/./g") &&
-  (aru (url "/../g")         = url "http://a/../g") &&
-  (aru (url "g.")            = url "http://a/b/c/g.") &&
-  (aru (url ".g")            = url "http://a/b/c/.g") &&
-  (aru (url "g..")           = url "http://a/b/c/g..") &&
-  (aru (url "..g")           = url "http://a/b/c/..g") &&
-  (aru (url "./../g")        = url "http://a/b/g") &&
-  (aru (url "./g/.")         = url "http://a/b/c/g/") &&
-  (aru (url "g/./h")         = url "http://a/b/c/g/h") &&
-  (aru (url "g/../h")        = url "http://a/b/c/h") &&
-  (aru (url "http:g")        = url "http:g") &&
-  (aru (url "http:")         = url "http:") &&
-
-  true
-;;
-  
-
-(**********************************************************************)
-
-let test f n =
-  if f() then
-    print_endline ("Test " ^ n ^ " ok")
-  else 
-    print_endline ("Test " ^ n ^ " FAILED!!!!");
-  flush stdout
-;;
-
-test t001 "001";
-test t002 "002";
-
-test t010 "010";
-test t011 "011";
-test t012 "012";
-
-test t020 "020";
-test t021 "021";
-
-test t030 "030";
-test t031 "031";
-test t032 "032";
-test t033 "033";
-test t034 "034";
-test t035 "035";
-test t036 "036";
-test t037 "037";
-test t038 "038";
-
-test t050 "050";
-test t051 "051";
-test t052 "052";
-
-test t060 "060";
-test t061 "061";
-
-test t070 "070";
-()
-;;
diff --git a/helm/DEVEL/pxp/netstring/tests/test_recode.ml b/helm/DEVEL/pxp/netstring/tests/test_recode.ml
deleted file mode 100644 (file)
index 64a04ca..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-
-
-let make_iso enc =
-  let s = ref "" in
-  for i = 0 to 255 do
-    let u = try Netconversion.makechar (enc :> Netconversion.encoding) i 
-            with Not_found -> "" in
-    s := !s ^ u
-  done;
-  !s
-;;
-
-let make_ucs2 start stop =
-  let s = String.create ((stop - start) * 2) in
-  for i = 0 to stop-start-1 do
-    let k = 2 * i in
-    let c = i + start in
-    s.[k]   <- Char.chr(c lsr 8);
-    s.[k+1] <- Char.chr(c land 0xff);
-  done;
-  s
-;;
-
-let make_ucs4 start stop =
-  let s = String.create ((stop - start) * 4) in
-  for i = 0 to stop-start-1 do
-    let k = 4 * i in
-    let c = i + start in
-    s.[k]   <- Char.chr(c lsr 24);
-    s.[k+1] <- Char.chr((c lsr 16) land 0xff);
-    s.[k+2] <- Char.chr((c lsr 8) land 0xff);
-    s.[k+3] <- Char.chr(c land 0xff);
-  done;
-  s
-;;
-
-let name_of_encoding enc =
-  match enc with
-      `Enc_iso88591 -> "ISO_8859-1"
-    | `Enc_iso88592 -> "ISO_8859-2"
-    | `Enc_iso88593 -> "ISO_8859-3"
-    | `Enc_iso88594 -> "ISO_8859-4"
-    | `Enc_iso88595 -> "ISO_8859-5"
-    | `Enc_iso88596 -> "ISO_8859-6"
-    | `Enc_iso88597 -> "ISO_8859-7"
-    | `Enc_iso88598 -> "ISO_8859-8"
-    | `Enc_iso88599 -> "ISO_8859-9"
-    | `Enc_iso885910 -> "ISO_8859-10"
-    | `Enc_iso885913 -> "ISO_8859-13"
-    | `Enc_iso885914 -> "ISO_8859-14"
-    | `Enc_iso885915 -> "ISO_8859-15"
-    | `Enc_utf8     -> "UTF-8"
-    | `Enc_ucs4     -> "UCS-4"
-    | `Enc_ucs2     -> "UCS-2"
-    | `Enc_utf16    -> "UTF-16"
-
-  (* Note: GNU-iconv assumes big endian byte order *)
-;;
-
-let iconv_recode_string in_enc out_enc in_s =
-  let in_enc_name  = name_of_encoding in_enc in
-  let out_enc_name = name_of_encoding out_enc in
-  let out_s = ref "" in
-
-  let out_ch,in_ch = Unix.open_process ("iconv -f " ^ in_enc_name ^ " -t " ^ 
-                                       out_enc_name) in
-  (* Write in_s to in_ch in a new thread: *)
-  ignore
-    (Thread.create
-       (fun () ->
-         output_string in_ch in_s;
-         close_out in_ch;
-       )
-       ()
-    );
-  (* Read the result in the current thread: *)
-  let buf = String.create 1024 in
-  let n = ref 1 in
-  while !n <> 0 do
-    let n' = input out_ch buf 0 1024 in
-    out_s := !out_s ^ String.sub buf 0 n';
-    n := n'
-  done;
-  ignore(Unix.close_process (out_ch,in_ch));
-  !out_s
-;;
-
-let test_iso_and_utf8 enc  =
-  let name = name_of_encoding enc in
-  print_string ("Recode: " ^ name ^ " and UTF-8... "); flush stdout;
-  let s = make_iso enc in
-  let s1' = Netconversion.recode_string (enc :> Netconversion.encoding) 
-                                        `Enc_utf8 s in
-  let s2' = iconv_recode_string         enc `Enc_utf8 s in
-  assert(s1' = s2');
-  let s1  = Netconversion.recode_string `Enc_utf8 
-                                       (enc :> Netconversion.encoding) s1' in
-  let s2  = iconv_recode_string         `Enc_utf8 enc s1' in
-  assert(s1 = s2 && s1 = s);
-  print_endline "OK"; flush stdout
-;;
-
-let test_utf16_and_utf8_0000_d7ff () =
-  print_string "Recode: UTF-16-BE and UTF-8, #0000-#D7FF... "; 
-  flush stdout;
-  let s = make_ucs2 0 0xd800 in
-  let s1' = Netconversion.recode_string `Enc_utf16_be `Enc_utf8 s in
-  let s2' = iconv_recode_string        `Enc_utf16    `Enc_utf8 s in
-  assert(s1' = s2');
-  let s1  = Netconversion.recode_string `Enc_utf8 `Enc_utf16_be s1' in
-  let s2  = iconv_recode_string        `Enc_utf8 `Enc_utf16 s1' in
-  assert(s1 = s2 && s1 = s);
-  print_endline "OK"; flush stdout
-;;
-
-let test_utf16_and_utf8_e000_fffd () =
-  print_string "Recode: UTF-16-BE and UTF-8, #E000-#FFFD... "; 
-  flush stdout;
-  let s = make_ucs2 0xe000 0xfffe in
-  let s1' = Netconversion.recode_string `Enc_utf16_be `Enc_utf8 s in
-  let s2' = iconv_recode_string        `Enc_utf16    `Enc_utf8 s in
-  assert(s1' = s2');
-  let s1  = Netconversion.recode_string `Enc_utf8 `Enc_utf16_be s1' in
-  let s2  = iconv_recode_string        `Enc_utf8 `Enc_utf16 s1' in
-  assert(s1 = s2 && s1 = s);
-  print_endline "OK"; flush stdout
-;;
-
-let test_utf16_and_utf8_10000_10FFFF () =
-  print_string "Recode: UTF-16-BE and UTF-8, #10000-#10FFFF... "; 
-  flush stdout;
-  for i = 1 to 16 do
-    let s0  = make_ucs4 (i * 0x10000) (i * 0x10000 + 0x10000) in
-    let s   = iconv_recode_string        `Enc_ucs4     `Enc_utf16 s0 in
-    let s1' = Netconversion.recode_string `Enc_utf16_be `Enc_utf8 s in
-    let s2' = iconv_recode_string        `Enc_utf16    `Enc_utf8 s in
-    assert(s1' = s2');
-    let s1  = Netconversion.recode_string `Enc_utf8 `Enc_utf16_be s1' in
-    let s2  = iconv_recode_string        `Enc_utf8 `Enc_utf16 s1' in
-    assert(s1 = s2 && s1 = s);
-    print_string "+"; flush stdout;
-  done;
-  print_endline "OK"; flush stdout
-;;
-
-
-print_endline "Warning: You need the command 'iconv' to run this test!";
-flush stdout;
-test_iso_and_utf8 `Enc_iso88591;
-test_iso_and_utf8 `Enc_iso88592;
-test_iso_and_utf8 `Enc_iso88593;
-test_iso_and_utf8 `Enc_iso88594;
-test_iso_and_utf8 `Enc_iso88595;
-test_iso_and_utf8 `Enc_iso88596;
-test_iso_and_utf8 `Enc_iso88597;
-(* test_iso_and_utf8 `Enc_iso88598; *)
-test_iso_and_utf8 `Enc_iso88599;
-test_iso_and_utf8 `Enc_iso885910;
-(* test_iso_and_utf8 `Enc_iso885913; *)
-(* test_iso_and_utf8 `Enc_iso885914; *)
-(* test_iso_and_utf8 `Enc_iso885915; *)
-test_utf16_and_utf8_0000_d7ff();
-test_utf16_and_utf8_e000_fffd();
-(* This test does not work because iconv does not support the surrogate
- * representation of UTF-16:
- * test_utf16_and_utf8_10000_10FFFF();
- *)
-()
-;;
diff --git a/helm/DEVEL/pxp/netstring/tools/Makefile b/helm/DEVEL/pxp/netstring/tools/Makefile
deleted file mode 100644 (file)
index b3c148d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-all:
-       $(MAKE) -C unimap_to_ocaml
-
-clean:
-
-CLEAN: clean
-       $(MAKE) -C unimap_to_ocaml CLEAN
-
-distclean: clean
-       $(MAKE) -C unimap_to_ocaml distclean
diff --git a/helm/DEVEL/pxp/netstring/tools/unimap_to_ocaml/.cvsignore b/helm/DEVEL/pxp/netstring/tools/unimap_to_ocaml/.cvsignore
deleted file mode 100644 (file)
index c1fcbc4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-*.cmo
-*.cmx
-*.cmi
-
-*.o
-*.a
-
diff --git a/helm/DEVEL/pxp/netstring/tools/unimap_to_ocaml/Makefile b/helm/DEVEL/pxp/netstring/tools/unimap_to_ocaml/Makefile
deleted file mode 100644 (file)
index ed42773..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-all: unimap_to_ocaml
-
-unimap_to_ocaml: unimap_to_ocaml.ml
-       ocamlfind ocamlc -g -package str -linkpkg -custom \
-               -o unimap_to_ocaml \
-               unimap_to_ocaml.ml
-
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa
-
-CLEAN: clean
-
-distclean: clean
-       rm -f *~ unimap_to_ocaml
-
diff --git a/helm/DEVEL/pxp/netstring/tools/unimap_to_ocaml/unimap_to_ocaml.ml b/helm/DEVEL/pxp/netstring/tools/unimap_to_ocaml/unimap_to_ocaml.ml
deleted file mode 100644 (file)
index 14a89e9..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Printf;;
-
-let comment_re = Str.regexp "#.*$";;
-let space_re = Str.regexp "[ \t\r\n]+";;
-
-let read_unimap_format_a fname f =
-  (* Reads a Unicode mapping in format A from a "local" code to Unicode.
-   * Returns a list of pairs (localcode, unicode).
-   *)
-  
-  let read_unimap_line() =
-    let s = input_line f in    (* may raise End_of_file *)
-    let s' = Str.global_replace comment_re "" s in
-    let words = Str.split space_re s' in
-    match words with
-       [] -> raise Not_found
-      | [ localcode; unicode ] ->
-         int_of_string localcode, int_of_string unicode
-      | _ ->
-         failwith ("File " ^ fname ^ ": Do not know what to do with:\n" ^ s')
-  in
-
-  let rec read_following_lines() =
-    try
-      let localcode, unicode = read_unimap_line() in 
-                               (* may raise End_of_file, Not_found *)
-      (localcode, unicode) :: read_following_lines()
-    with
-       Not_found -> read_following_lines()
-      | End_of_file -> []
-  in
-
-  read_following_lines()
-;;
-
-
-type from_uni_list =
-    U_nil
-  | U_single of (int * int)
-  | U_list of (int * int) list
-
-type from_unicode =
-    from_uni_list array;;
-  (* A hashtable with fixed size (256). A pair (unicode, localcode) is
-   * stored at the position unicode mod 256 in the array.
-   *)
-
-
-let make_bijection unimap =
-  (* unimap: a list of pairs (localcode, unicode)
-   * returns a pair of arrays (m_to_unicode, m_from_unicode) with:
-   *   - m_to_unicode.(localcode) = Some unicode, 
-   *                                 if the pair (localcode, unicode) exists
-   *     m_to_unicode.(x) = None otherwise
-   *   - m_from_unicode.(unicode lsr 8) = [ ...; (unicode,localcode); ... ]
-   *)
-
-  let m_to_unicode   = Array.create 256 None in
-  let m_from_unicode = Array.create 256 [] in
-
-  List.iter
-    (fun (localcode, unicode) ->
-       assert(localcode < 256);
-
-       (* Update m_to_unicode: *)
-       if m_to_unicode.(localcode) <> None then
-        failwith ("Local code point " ^ string_of_int localcode ^ 
-                  " mapped twice");
-       m_to_unicode.(localcode) <- Some unicode;
-
-       (* Update m_from_unicode: *)
-       let unilow = unicode land 255 in
-       if List.mem_assoc unicode (m_from_unicode.(unilow)) then
-        failwith ("Unicode code point " ^ string_of_int unicode ^ 
-                  " mapped twice");
-       m_from_unicode.(unilow) <- 
-         m_from_unicode.(unilow) @ [unicode,localcode];
-    )
-    unimap;
-
-  m_to_unicode, m_from_unicode
-;;
-
-
-let to_unimap_as_string to_unimap =
-  let make_repr x =
-    match x with
-       None -> -1
-      | Some u -> u
-  in
-  Marshal.to_string (Array.map make_repr to_unimap) [ Marshal.No_sharing ]
-;;
-
-
-let from_unimap_as_string from_unimap =
-  let make_repr l =
-    match l with
-       []    -> U_nil
-      | [u,l] -> U_single(u,l)
-      | _     -> U_list l
-  in
-  let m = Array.map make_repr from_unimap in
-  Marshal.to_string m [ Marshal.No_sharing ]
-;;
-
-
-let print_bijection f name m_to_unicode m_from_unicode =
-  (* Prints on file f this O'Caml code:
-   * let <name>_to_unicode = ...
-   * let <name>_from_unicode = ...
-   *)
-  fprintf f "let %s_to_unicode = lazy (Marshal.from_string \"%s\" 0 : int array);;\n" 
-    name 
-    (String.escaped (to_unimap_as_string m_to_unicode));
-
-  fprintf f "let %s_from_unicode = lazy (Marshal.from_string \"%s\" 0 : Netmappings.from_uni_list array);;\n "
-    name
-    (String.escaped (from_unimap_as_string m_from_unicode));
-;;
-
-
-let main() =
-  let files = ref [] in
-  let outch = ref (lazy stdout) in
-  Arg.parse
-      [ "-o", Arg.String (fun s -> outch := lazy (open_out s)),
-           " <file>   Write result to this file"]
-      (fun s -> files := !files @ [s])
-      "usage: unimap_to_ocaml file.unimap ...";
-  
-  (* First read in all unimaps: *)
-  let unimaps =
-    List.map
-      (fun filename ->
-        let mapname = Str.replace_first (Str.regexp "\.unimap$") "" 
-                                        (Filename.basename filename) in
-        let f = open_in filename in
-        prerr_endline ("Reading " ^ filename);
-        let unimap = read_unimap_format_a filename f in
-        close_in f;
-        mapname, unimap
-      )
-      !files
-  in
-
-  (* Second compute all bijections: *)
-  let bijections =
-    List.map
-      (fun (mapname, unimap) ->
-        prerr_endline ("Processing " ^ mapname);
-        let to_unicode, from_unicode = make_bijection unimap in
-        mapname, to_unicode, from_unicode
-      )
-      unimaps
-  in
-
-  let out = Lazy.force !outch in
-  (* Third output all results: *)
-  output_string out "(* WARNING! This is a generated file! *)\n";
-
-  List.iter
-    (fun (mapname, to_unicode, from_unicode) ->
-       print_bijection out mapname to_unicode from_unicode)
-    bijections;
-  List.iter
-    (fun (mapname, _, _) ->
-       fprintf out "Hashtbl.add Netmappings.to_unicode `Enc_%s %s_to_unicode;\n" 
-                  mapname mapname;
-       fprintf out "Hashtbl.add Netmappings.from_unicode `Enc_%s %s_from_unicode;\n" 
-                  mapname mapname;
-    )
-    (List.rev bijections);
-  fprintf out "();;\n";
-
-  close_out out
-;;
-
-
-main();;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/08/29 00:48:52  gerd
- *     Conversion tables are now stored in marshalled form.
- *     New type for the conversion table Unicode to 8bit.
- *
- * Revision 1.2  2000/08/12 23:54:56  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/ocaml-findlib-0.4.0-1.i386.rpm b/helm/DEVEL/pxp/ocaml-findlib-0.4.0-1.i386.rpm
deleted file mode 100644 (file)
index 1877eea..0000000
Binary files a/helm/DEVEL/pxp/ocaml-findlib-0.4.0-1.i386.rpm and /dev/null differ
diff --git a/helm/DEVEL/pxp/ocaml-findlib-0.4.0-1.src.rpm b/helm/DEVEL/pxp/ocaml-findlib-0.4.0-1.src.rpm
deleted file mode 100644 (file)
index 6ae4bb2..0000000
Binary files a/helm/DEVEL/pxp/ocaml-findlib-0.4.0-1.src.rpm and /dev/null differ
diff --git a/helm/DEVEL/pxp/ocaml-findlib.spec b/helm/DEVEL/pxp/ocaml-findlib.spec
deleted file mode 100644 (file)
index 6d5cc6b..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-%define toolname  findlib
-
-Summary: OCAML FindLib package manager
-Name: ocaml-%{toolname}
-Version: 0.4.0
-Release: 1
-Copyright: GPL-like
-Group: Development/Languages
-Source: http://www.ocaml-programming.de/packages/%{toolname}-%{version}.tar.gz
-Vendor:  Gerd Stolpmann
-Url: http://www.ocaml-programming.de/packages/documentation/%{toolname}/
-Prereq: fileutils, ocaml
-Requires: fileutils, ocaml
-
-%define dir_man      usr/man
-%define dir_bin      usr/bin
-%define dir_sitelib  usr/lib/ocaml/site-lib
-%define files_doc    LICENSE README INSTALL
-
-BuildRoot: /tmp/root-%{name}
-
-%description
-Provides a scheme to manage reusable software components (packages), 
-as collections of OCaml modules for which metainformation can be stored. 
-The library contains functions to look the directory up that
-stores a package, to query metainformation about a package, and 
-to retrieve dependency information about multiple packages.
-Metainformation includes a version string, the archives the package consists of, additional linker
-options, and dependencies dependent on other packages.
-
-%prep
-%setup -n %{toolname}
-./configure -mandir "/%{dir_man}" -bindir "/%{dir_bin}" -sitelib "/%{dir_sitelib}"
-
-%build
-make all
-make opt
-
-%install
-# Install binary, libs, manuals
-DIR_BIN="${RPM_BUILD_ROOT}/%{dir_bin}"
-DIR_MAN="${RPM_BUILD_ROOT}/%{dir_man}"
-DIR_SITELIB="${RPM_BUILD_ROOT}/%{dir_sitelib}"
-install -m 755 -d   "${DIR_BIN}"
-install -m 755 -d   "${DIR_MAN}"
-install -m 755 -d   "${DIR_SITELIB}"
-make install "OCAML_SITELIB=${DIR_SITELIB}" "OCAMLFIND_BIN=${DIR_BIN}" "OCAMLFIND_MAN=${DIR_MAN}"
-# Move doc files to root, if needed
-for F in %{files_doc} ; do test -f "./doc/${F}" && mv -f "./doc/${F}" . ; done
-
-# HTML manual
-if test -d doc/html ; then mv doc/html htmlman; else mkdir htmlman ; fi
-
-%post
-# Create a symbolic link to version-specific HTML manual 
-cd /usr/doc/HTML/
-if test -L "%{name}" ; then rm -f "%{name}" ; fi
-if test ! -e "%{name}" ; then ln -s "../%{name}-%{version}/htmlman" "%{name}" ; fi
-
-%postun
-cd /usr/doc/HTML/
-if test "$1" = "0" -a -L %{name} ; then rm -f %{name} ; fi
-
-
-%clean
-if test `dirname "${RPM_BUILD_ROOT}"` != "/" ; then rm -rf "${RPM_BUILD_ROOT}" ; fi
-
-%files
-%defattr(-,root,root)
-%doc %{files_doc} htmlman
-/%{dir_bin}
-/%{dir_man}/man1
-/%{dir_man}/man3
-/%{dir_man}/man5
-/%{dir_sitelib}
-
-
-%changelog
-* Fri Sep  1 2000 Olivier Montanuy <Olivier.Montanuy@wanadoo.fr> 
-- created and tested package, with html manual
diff --git a/helm/DEVEL/pxp/ocaml-netstring-0.9.3-2.i386.rpm b/helm/DEVEL/pxp/ocaml-netstring-0.9.3-2.i386.rpm
deleted file mode 100644 (file)
index e9dc283..0000000
Binary files a/helm/DEVEL/pxp/ocaml-netstring-0.9.3-2.i386.rpm and /dev/null differ
diff --git a/helm/DEVEL/pxp/ocaml-netstring-0.9.3-2.src.rpm b/helm/DEVEL/pxp/ocaml-netstring-0.9.3-2.src.rpm
deleted file mode 100644 (file)
index 3c20f54..0000000
Binary files a/helm/DEVEL/pxp/ocaml-netstring-0.9.3-2.src.rpm and /dev/null differ
diff --git a/helm/DEVEL/pxp/ocaml-netstring.spec b/helm/DEVEL/pxp/ocaml-netstring.spec
deleted file mode 100644 (file)
index 0735399..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-%define toolname  netstring
-
-Summary: OCAML Netstring library
-Name: ocaml-%{toolname}
-Version: 0.9.3
-Release: 2
-Copyright: GPL-like
-Group: Development/Languages
-Source: http://www.ocaml-programming.de/packages/%{toolname}-%{version}.tar.gz
-Vendor:  Gerd Stolpmann
-Url: http://www.ocaml-programming.de/packages/documentation/%{toolname}/
-Prereq: fileutils, ocaml, ocaml-findlib
-Requires: fileutils, ocaml
-
-%define dir_sitelib  usr/lib/ocaml/site-lib
-%define files_doc    LICENSE README INSTALL
-BuildRoot: /tmp/root-%{name}
-
-%description
-A collection of string processing functions for Internet protocols
-- Parse MIME messages
-- Encode/decode Base 64, Quoted Printable, Q, URL-encoding   
-- CGI interface that allows users to upload files
-- Simple HTML parser 
-- URL parsing, printing and processing
-
-%prep
-%setup -n %{toolname}
-make clean
-
-%build
-make all
-make opt
-
-%install
-# Install binary, libs, manuals
-
-DIR_INSTALL="${RPM_BUILD_ROOT}/%{dir_sitelib}/%{toolname}"
-install -m 755 -d   "${DIR_INSTALL}"
-# Install in non-standard directory
-# replace "$(OCAMLFIND) install" or "ocamlfind install"
-cat Makefile | sed "s#[_A-Za-z\(\)\$]* install \$(NAME) #\$(TRICK) #" > Makefile.trick
-# Ugly trick: replace "findlib" by "cp"
-make -f Makefile.trick install        "TRICK=cp -f --target-directory=${DIR_INSTALL}"
-# Reference to obsolete CGI and BASE64 packages
-for CMD in cgi base64 ; do
-  cat Makefile | sed "s#[_A-Za-z\(\)\$]* install $CMD #\$(TRICK) #" > Makefile.trick
-  DIR="${RPM_BUILD_ROOT}/%{dir_sitelib}/${CMD}"
-  install -m 755 -d   "${DIR}"
-  make -f Makefile.trick "install-${CMD}"  "TRICK=cp -f --target-directory=${DIR}"
-done
-
-# Move doc files to root, if needed
-for F in %{files_doc} ; do test -f "./doc/${F}" && mv -f "./doc/${F}" . ; done
-
-%clean
-#if test `dirname "${RPM_BUILD_ROOT}"` != "/" ; then rm -rf "${RPM_BUILD_ROOT}" ; fi
-
-%files
-%defattr(-,root,root)
-%doc %{files_doc}
-/%{dir_sitelib}/%{toolname}
-# Reference to obsolete CGI and BASE64 packages
-/%{dir_sitelib}/cgi
-/%{dir_sitelib}/base64
-
-%changelog
-* Wed Sep  6 2000 Olivier Montanuy <Olivier.Montanuy@wanadoo.fr>
-- attempt to install cgi and base64 modules, for obsolete Makefiles
-
-* Fri Sep  1 2000 Olivier Montanuy <Olivier.Montanuy@wanadoo.fr> 
-- created and tested package
-
diff --git a/helm/DEVEL/pxp/ocaml-pxp-1.0-1.i386.rpm b/helm/DEVEL/pxp/ocaml-pxp-1.0-1.i386.rpm
deleted file mode 100644 (file)
index 3dac2d9..0000000
Binary files a/helm/DEVEL/pxp/ocaml-pxp-1.0-1.i386.rpm and /dev/null differ
diff --git a/helm/DEVEL/pxp/ocaml-pxp-1.0-1.src.rpm b/helm/DEVEL/pxp/ocaml-pxp-1.0-1.src.rpm
deleted file mode 100644 (file)
index c00caec..0000000
Binary files a/helm/DEVEL/pxp/ocaml-pxp-1.0-1.src.rpm and /dev/null differ
diff --git a/helm/DEVEL/pxp/ocaml-pxp.spec b/helm/DEVEL/pxp/ocaml-pxp.spec
deleted file mode 100644 (file)
index ee2080d..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-%define toolname  pxp
-
-Summary: OCAML PXP XML library
-Name: ocaml-%{toolname}
-Version: 1.0
-Release: 1
-Copyright: GPL-like
-Group: Development/Languages
-Source: http://www.ocaml-programming.de/packages/%{toolname}-%{version}.tar.gz
-Vendor:  Gerd Stolpmann
-Url: http://www.ocaml-programming.de/packages/documentation/%{toolname}/
-Prereq: fileutils, ocaml, ocaml-findlib, ocaml-netstring
-Requires: fileutils, ocaml, ocaml-netstring
-
-%define dir_sitelib  usr/lib/ocaml/site-lib
-%define files_doc    LICENSE README INSTALL SPEC EXTENSIONS
-
-BuildRoot: /tmp/root-%{name}
-
-%description
-PXP is a validating parser for XML-1.0 written entirely in Objective Caml. 
-PXP stands for Polymorphic XML parser, emphasizes its most useful property: 
-the API is polymorphic and can be configured such that different objects are 
-used to store different types of elements. 
-PXP was formerly known as "Markup". 
-
-%prep
-%setup -n %{toolname}
-make clean
-
-%build
-make all
-make opt
-
-%install
-# Install binary, libs, manuals
-
-DIR_INSTALL="${RPM_BUILD_ROOT}/%{dir_sitelib}/%{toolname}"
-install -m 755 -d   "${DIR_INSTALL}"
-# Install in non-standard directory
-# replace "$(OCAMLFIND) install" or "ocamlfind install"
-cat Makefile | sed "s#[_A-Za-z\(\)\$]* install \$(NAME)#\$(TRICK)#" > Makefile.trick
-# Ugly trick: replace "findlib" by "cp"
-make -f Makefile.trick install "TRICK=cp -f --target-directory=${DIR_INSTALL}"
-
-# Move doc files to root, if needed
-for F in %{files_doc} ; do test -f "./doc/${F}" && mv -f "./doc/${F}" . ; done
-
-# HTML manual
-if test -d doc/manual/html ; then mv doc/manual/html htmlman; else mkdir htmlman ; fi
-
-
-# Create a symbolic link to version-specific HTML manual 
-%post
-cd /usr/doc/HTML/
-if test -L "%{name}" ; then rm -f "%{name}" ; fi
-if test ! -e "%{name}" ; then ln -s "../%{name}-%{version}/htmlman" "%{name}" ; fi
-
-%postun
-cd /usr/doc/HTML/
-if test "$1" = "0" -a -L %{name} ; then rm -f %{name} ; fi
-
-%clean
-if test `dirname "${RPM_BUILD_ROOT}"` != "/" ; then rm -rf "${RPM_BUILD_ROOT}" ; fi
-
-%files
-%defattr(-,root,root)
-%doc %{files_doc} htmlman examples
-/%{dir_sitelib}/%{toolname}
-
-%changelog
-* Fri Sep  1 2000 Olivier Montanuy <Olivier.Montanuy@wanadoo.fr> 
-- created and tested package
diff --git a/helm/DEVEL/pxp/pxp-1.0.tar.gz b/helm/DEVEL/pxp/pxp-1.0.tar.gz
deleted file mode 100644 (file)
index 9f6e019..0000000
Binary files a/helm/DEVEL/pxp/pxp-1.0.tar.gz and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/.cvsignore b/helm/DEVEL/pxp/pxp/.cvsignore
deleted file mode 100644 (file)
index deb5b7f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-*.cmo
-*.cmx
-*.cmi
-
diff --git a/helm/DEVEL/pxp/pxp/LICENSE b/helm/DEVEL/pxp/pxp/LICENSE
deleted file mode 100644 (file)
index 55182a7..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright 1999 by Gerd Stolpmann
-
-The package "markup" is copyright by Gerd Stolpmann. 
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this document and the "markup" software (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 Gerd Stolpmann be liable for any claim, damages or
-other liability, whether in an action of contract, tort or otherwise,
-arising from, out of or in connection with the Software or the use or
-other dealings in the software.
diff --git a/helm/DEVEL/pxp/pxp/META b/helm/DEVEL/pxp/pxp/META
deleted file mode 100644 (file)
index 020128a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-version = "1.0"
-requires = "netstring"
-description = "Validating parser for XML-1.0"
-archive(byte) = "pxp_types.cma 
-                 pxp_lex_iso88591.cma 
-                 pxp_lex_utf8.cma 
-                 pxp_engine.cma 
-                 pxp_utf8.cmo"
-archive(byte, pxp_without_utf8) = "pxp_types.cma 
-                 pxp_lex_iso88591.cma 
-                 pxp_engine.cma"
-archive(native) = "pxp_types.cmxa 
-                   pxp_lex_iso88591.cmxa 
-                   pxp_lex_utf8.cmxa 
-                   pxp_engine.cmxa 
-                   pxp_utf8.cmx"
-archive(native, pxp_without_utf8) = "pxp_types.cmxa 
-                 pxp_lex_iso88591.cmxa 
-                 pxp_engine.cmxa"
-
diff --git a/helm/DEVEL/pxp/pxp/Makefile b/helm/DEVEL/pxp/pxp/Makefile
deleted file mode 100644 (file)
index f08eab9..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-# make all:            make bytecode archive
-# make opt:            make native archive
-# make install:        install bytecode archive, and if present, native archive
-# make uninstall:      uninstall package
-# make clean:          remove intermediate files (in this directory)
-# make CLEAN:           remove intermediate files (recursively)
-# make distclean:      remove any superflous files (recursively)
-# make release:        cleanup, create archive, tag CVS module 
-#                      (for developers)
-
-#----------------------------------------------------------------------
-
-include Makefile.conf
-
-.PHONY: all
-all: 
-       $(MAKE) -C m2parsergen all
-       $(MAKE) -C tools/ucs2_to_utf8 all
-       $(MAKE) -f Makefile.code all
-       $(MAKE) -C compatibility all
-
-.PHONY: opt
-opt: 
-       $(MAKE) -C m2parsergen all
-       $(MAKE) -C tools/ucs2_to_utf8 all
-       $(MAKE) -f Makefile.code opt
-       $(MAKE) -C compatibility opt
-
-.PHONY: install
-install: all tmp/pxp_entity.mli
-       files=`tools/collect_files *.cmi *.cma *.cmxa *.a \
-               pxp_utf8.cmo pxp_utf8.cmx pxp_utf8.o` && \
-       ocamlfind install $(NAME) $(MLI) tmp/pxp_entity.mli $$files META
-
-.PHONY: uninstall
-uninstall:
-       ocamlfind remove $(NAME)
-
-.PHONY: markup-install
-markup-install:
-       $(MAKE) -C compatibility install
-
-.PHONY: markup-uninstall
-markup-uninstall:
-       $(MAKE) -C compatibility uninstall
-
-tmp/pxp_entity.mli: pxp_entity.ml
-       mkdir -p tmp
-       rm -f tmp/pxp_entity.*
-       cp pxp_entity.ml tmp
-       echo '(* Sorry, this is currently undocumented *)' >tmp/mli
-       ocamlc -i -c tmp/pxp_entity.ml >>tmp/mli
-       mv tmp/mli tmp/pxp_entity.mli
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa *.new *.old
-       rm -f pxp_yacc.ml
-       touch lexers/objects_iso88591 lexers/objects_utf8 lexers/depend
-       $(MAKE) -C lexers clean
-       $(MAKE) -C compatibility clean
-
-.PHONY: CLEAN
-CLEAN: clean
-       $(MAKE) -C doc CLEAN
-       $(MAKE) -C examples CLEAN
-       $(MAKE) -C rtests CLEAN
-       $(MAKE) -C m2parsergen CLEAN
-       touch tools/ucs2_to_utf8/depend
-       $(MAKE) -C tools/ucs2_to_utf8 clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~ depend depend.pkg
-       $(MAKE) -C doc distclean
-       $(MAKE) -C examples distclean
-       $(MAKE) -C rtests distclean
-       $(MAKE) -C m2parsergen distclean
-       touch tools/ucs2_to_utf8/depend
-       $(MAKE) -C tools/ucs2_to_utf8 clean
-       $(MAKE) -C compatibility distclean
-
-RELEASE: META
-       awk '/version/ { print substr($$3,2,length($$3)-2) }' META >RELEASE
-
-.PHONY: dist
-dist: RELEASE
-       r=`head -1 RELEASE`; cd ..; gtar czf $(NAME)-$$r.tar.gz --exclude='*/CVS*' --exclude="*~" --exclude="*/depend.pkg" --exclude="*/depend" --exclude="*/oo_questions*" --exclude="*/testsamples*" --exclude="*/tmp/*" --exclude="*reptil*" --exclude="*/doc/common.xml" --exclude="*/doc/config.xml" --exclude="*.fig.bak" --exclude="*/ps/pic*" --exclude="*/examples/panel*" --exclude="*/examples/xmlforms_gtk*" --exclude="*/Mail*" $(NAME)/*
-
-.PHONY: tag-release
-tag-release: RELEASE
-       r=`head -1 RELEASE | sed -e s/\\\./-/g`; cd ..; cvs tag -F $(NAME)-$$r markup
-
-.PHONY: release
-release: distclean
-       $(MAKE) tag-release
-       $(MAKE) dist
-
-.PHONY: dev
-dev:
-       $(MAKE) all
-       -$(MAKE) uninstall
-       $(MAKE) install
-       $(MAKE) -C examples/validate distclean
-       $(MAKE) -C examples/validate validate
diff --git a/helm/DEVEL/pxp/pxp/Makefile.code b/helm/DEVEL/pxp/pxp/Makefile.code
deleted file mode 100644 (file)
index 3afed39..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-# make all:            make bytecode archives
-# make opt:            make native archives
-#----------------------------------------------------------------------
-
-include Makefile.conf
-
-all: 
-       $(MAKE) -f Makefile.code pxp_types.cma
-       $(MAKE) -f Makefile.code pxp_lex_iso88591.cma
-       if [ "x$(UTF8_SUPPORT)" = "xyes" ]; then $(MAKE) -f Makefile.code pxp_lex_utf8.cma; else rm -f pxp_lex_utf8.cma; fi
-       $(MAKE) -f Makefile.code pxp_engine.cma
-       if [ "x$(UTF8_SUPPORT)" = "xyes" ]; then $(MAKE) -f Makefile.code pxp_utf8.cmo; else rm -f pxp_utf8.cmo; fi
-
-opt:
-       $(MAKE) -f Makefile.code pxp_types.cmxa
-       $(MAKE) -f Makefile.code pxp_lex_iso88591.cmxa
-       if [ "x$(UTF8_SUPPORT)" = "xyes" ]; then $(MAKE) -f Makefile.code pxp_lex_utf8.cmxa; else rm -f pxp_lex_utf8.cmxa; fi
-       $(MAKE) -f Makefile.code pxp_engine.cmxa
-       if [ "x$(UTF8_SUPPORT)" = "xyes" ]; then $(MAKE) -f Makefile.code pxp_utf8.cmx; else rm -f pxp_utf8.cmx; fi
-
-#----------------------------------------------------------------------
-
-pxp_types.cma: $(OBJECTS_types)
-       $(OCAMLC) -a -o pxp_types.cma $(OBJECTS_types)
-
-pxp_types.cmxa: $(XOBJECTS_types)
-       $(OCAMLOPT) -a -o pxp_types.cmxa $(XOBJECTS_types)
-
-pxp_engine.cma: $(OBJECTS_engine)
-       $(OCAMLC) -a -o pxp_engine.cma $(OBJECTS_engine)
-
-pxp_engine.cmxa: $(XOBJECTS_engine)
-       $(OCAMLOPT) -a -o pxp_engine.cmxa $(XOBJECTS_engine)
-
-
-# The following rules are "phony" to force 'make' to go into the
-# "lexers" subdirectory.
-
-.PHONY: pxp_lex_iso88591.cma
-pxp_lex_iso88591.cma: $(CMI_types)
-       $(MAKE) -C lexers all_iso88591
-       cp lexers/pxp_lex_iso88591.cma .
-
-.PHONY: pxp_lex_iso88591.cmxa
-pxp_lex_iso88591.cmxa: $(CMI_types)
-       $(MAKE) -C lexers opt_iso88591
-       cp lexers/pxp_lex_iso88591.cmxa lexers/pxp_lex_iso88591.a .
-
-.PHONY: pxp_lex_utf8.cma
-pxp_lex_utf8.cma: $(CMI_types)
-       $(MAKE) -C lexers all_utf8
-       cp lexers/pxp_lex_utf8.cma .
-
-.PHONY: pxp_lex_utf8.cmxa
-pxp_lex_utf8.cmxa: $(CMI_types)
-       $(MAKE) -C lexers opt_utf8
-       cp lexers/pxp_lex_utf8.cmxa lexers/pxp_lex_utf8.a .
-
-#----------------------------------------------------------------------
-# general rules:
-
-OPTIONS   =
-OCAMLC    = $(OCAMLFIND) ocamlc -package "$(PACKAGES)" \
-              -g -I lexers $(OPTIONS) $(ROPTIONS)
-OCAMLOPT  = $(OCAMLFIND) ocamlopt -package "$(PACKAGES)" \
-              -p -I lexers $(OPTIONS) $(ROPTIONS)
-OCAMLDEP  = ocamldep $(OPTIONS)
-OCAMLFIND = ocamlfind
-
-depend: *.ml *.mli pxp_yacc.ml
-       $(OCAMLDEP) *.ml *.mli >depend
-
-.SUFFIXES: .cmo .cmi .cmx .ml .mli .mll .m2y
-
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-.ml.cmo:
-       $(OCAMLC) -c $<
-
-.mli.cmi:
-       $(OCAMLC) -c $<
-
-.mll.ml:
-       ocamllex $<
-
-.m2y.ml:
-       ./m2parsergen/m2parsergen < $< >`basename $< .m2y`.ml || { rm -f `basename $< .m2y`.ml; false; }
-
-*.mli:
-
-
-# Generated dependencies:
-
-include depend
-
diff --git a/helm/DEVEL/pxp/pxp/Makefile.conf b/helm/DEVEL/pxp/pxp/Makefile.conf
deleted file mode 100644 (file)
index 749c702..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# User-configurable section:
-
-# yes or no: Do you want that the parser has support for the internal
-# representation as UTF-8 strings? "yes" is recommended, but the parser
-# becomes much bigger 
-UTF8_SUPPORT = yes
-
-# --- End of User-configurable section.
-
-# Settings.
-
-NAME = pxp
-PACKAGES = netstring
-
-# Caml objects that are needed by the lexers:
-OBJECTS_types = \
-           pxp_types.cmo pxp_lexer_types.cmo
-
-CMI_types = $(OBJECTS_types:.cmo=.cmi)
-
-# Caml objects that depend on the lexers:
-OBJECTS_engine = \
-          pxp_lexers.cmo \
-           pxp_dfa.cmo \
-          pxp_aux.cmo pxp_reader.cmo \
-           pxp_entity.cmo pxp_dtd.cmo pxp_document.cmo \
-          pxp_yacc.cmo pxp_codewriter.cmo
-
-# Same as native objects:
-XOBJECTS_types  = $(OBJECTS_types:.cmo=.cmx)
-XOBJECTS_engine = $(OBJECTS_engine:.cmo=.cmx)
-
-# .mli files to install:
-
-MLI = pxp_document.mli pxp_dtd.mli \
-      pxp_types.mli pxp_yacc.mli \
-      pxp_codewriter.mli pxp_dfa.mli
diff --git a/helm/DEVEL/pxp/pxp/RELEASE b/helm/DEVEL/pxp/pxp/RELEASE
deleted file mode 100644 (file)
index d3827e7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-1.0
diff --git a/helm/DEVEL/pxp/pxp/compatibility/.cvsignore b/helm/DEVEL/pxp/pxp/compatibility/.cvsignore
deleted file mode 100644 (file)
index deb5b7f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-*.cmo
-*.cmx
-*.cmi
-
diff --git a/helm/DEVEL/pxp/pxp/compatibility/META b/helm/DEVEL/pxp/pxp/compatibility/META
deleted file mode 100644 (file)
index 441e30a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-version = "PXP-emulator"
-requires = "pxp"
-description = "Validating parser for XML-1.0"
-archive(byte) = "markup.cma"
-archive(native) = "markup.cmxa"
-
diff --git a/helm/DEVEL/pxp/pxp/compatibility/Makefile b/helm/DEVEL/pxp/pxp/compatibility/Makefile
deleted file mode 100644 (file)
index 187116c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# make all:            make bytecode archive
-# make opt:            make native archive
-# make install:        install bytecode archive, and if present, native archive
-# make uninstall:      uninstall package
-# make clean:          remove intermediate files (in this directory)
-# make CLEAN:           remove intermediate files (recursively)
-# make distclean:      remove any superflous files (recursively)
-
-#----------------------------------------------------------------------
-
-include Makefile.conf
-
-.PHONY: all
-all: 
-       $(MAKE) -f Makefile.code all
-
-.PHONY: opt
-opt: 
-       $(MAKE) -f Makefile.code opt
-
-.PHONY: install
-install: all 
-       files=`../tools/collect_files *.cmi *.cma *.cmxa *.a` && \
-       ocamlfind install $(NAME) $(MLI) $$files META
-
-.PHONY: uninstall
-uninstall:
-       ocamlfind remove $(NAME)
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa *.new *.old
-
-.PHONY: CLEAN
-CLEAN: clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~ depend depend.pkg
-
diff --git a/helm/DEVEL/pxp/pxp/compatibility/Makefile.code b/helm/DEVEL/pxp/pxp/compatibility/Makefile.code
deleted file mode 100644 (file)
index 2733faa..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# make all:            make bytecode archives
-# make opt:            make native archives
-#----------------------------------------------------------------------
-
-include Makefile.conf
-
-.PHONY: all
-all: markup.cma
-
-.PHONY: opt
-opt: markup.cmxa
-
-#----------------------------------------------------------------------
-
-markup.cma: $(OBJECTS)
-       $(OCAMLC) -a -o markup.cma $(OBJECTS)
-
-markup.cmxa: $(XOBJECTS)
-       $(OCAMLOPT) -a -o markup.cmxa $(XOBJECTS)
-
-#----------------------------------------------------------------------
-# general rules:
-
-OPTIONS   =
-OCAMLC    = ocamlfind ocamlc -g -I .. -package netstring $(OPTIONS) $(ROPTIONS)
-OCAMLOPT  = ocamlfind ocamlopt -p -I .. -package netstring $(OPTIONS) $(ROPTIONS)
-OCAMLDEP  = ocamldep $(OPTIONS)
-OCAMLFIND = ocamlfind
-
-depend: *.ml *.mli
-       $(OCAMLDEP) *.ml *.mli >depend
-
-.SUFFIXES: .cmo .cmi .cmx .ml .mli
-
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-.ml.cmo:
-       $(OCAMLC) -c $<
-
-.mli.cmi:
-       $(OCAMLC) -c $<
-
-*.mli:
-
-
-# Generated dependencies:
-
-include depend
-
diff --git a/helm/DEVEL/pxp/pxp/compatibility/Makefile.conf b/helm/DEVEL/pxp/pxp/compatibility/Makefile.conf
deleted file mode 100644 (file)
index 061d0ca..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-NAME = markup
-
-OBJECTS = markup_types.cmo markup_dtd.cmo markup_reader.cmo \
-         markup_document.cmo markup_yacc.cmo
-XOBJECTS = $(OBJECTS:.cmo=.cmx)
-
-MLI = markup_document.mli markup_dtd.mli \
-      markup_types.mli markup_yacc.mli markup_reader.mli
-
diff --git a/helm/DEVEL/pxp/pxp/compatibility/README b/helm/DEVEL/pxp/pxp/compatibility/README
deleted file mode 100644 (file)
index 5008673..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-This directory contains the modules for Markup-0.2.10
-compatibility. The modules consist mainly of wrapper classes for the
-new PXP classes, and translate the old methods to the new ones.
-
-Please note that the compatibility is not perfect. Sometimes there are
-new methods which do not exist in Markup-0.2.10, and sometimes even
-existing methods changed their signature. I have tried to avoid that,
-but there are some ugly cases which are hard to solve without such
-modifications. 
-
-Translating old methods into new methods costs time and
-memory. Because of this, it is best to consider the compatibility
-modules as migration path to PXP: You can test whether PXP parses your
-input files, and you can compare the old API with the new API
-directly. (However, it is hard to test new features of PXP with the
-compatibility modules; the old API does not reflect the new features.)
-
-The compatibility modules are currently maintained, but that will stop
-once PXP has been established.
-
-(Gerd)
diff --git a/helm/DEVEL/pxp/pxp/compatibility/markup_document.ml b/helm/DEVEL/pxp/pxp/compatibility/markup_document.ml
deleted file mode 100644 (file)
index bbc4979..0000000
+++ /dev/null
@@ -1,374 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *)
-
-type node_type = 
-    T_element of string
-  | T_data
-
-class type [ 'node ] extension = [ 'node ] Pxp_document.extension
-
-class type [ 'ext, 'node ] pxp_extension_type =
-object ('self)
-    method clone : 'self
-    method node : 'self Pxp_document.node
-    method set_node : 'self Pxp_document.node -> unit
-
-    method markup_node : 'node
-    method set_markup_node : 'node -> unit
-
-    method set_index : 'self Pxp_yacc.index -> unit
-    method index : 'self Pxp_yacc.index
-  end
-;;
-
-
-class type [ 'ext ] node = 
-  object ('self)
-    constraint 'ext = 'ext node #extension
-    method pxp_node : (('ext, 'ext node) pxp_extension_type) Pxp_document.node
-
-    method extension : 'ext
-    method delete : unit
-    method parent : 'ext node
-    method root : 'ext node
-    method orphaned_clone : 'ext node
-    method orphaned_flat_clone : 'ext node
-    method add_node : 'ext node -> unit
-    method add_pinstr : Markup_dtd.proc_instruction -> unit
-    method pinstr : string -> Markup_dtd.proc_instruction list
-    method pinstr_names : string list
-    method sub_nodes : 'ext node list
-    method iter_nodes : ('ext node -> unit) -> unit
-    method iter_nodes_sibl :
-      ('ext node option -> 'ext node -> 'ext node option -> unit) -> unit
-    method set_nodes : 'ext node list -> unit
-    method data : string
-    method node_type : node_type
-    method attribute : string -> Markup_types.att_value
-    method attribute_names : string list
-    method attribute_type : string -> Markup_types.att_type
-    method attributes : (string * Markup_types.att_value) list
-    method required_string_attribute : string -> string
-    method required_list_attribute : string -> string list
-    method optional_string_attribute : string -> string option
-    method optional_list_attribute : string -> string list
-    method quick_set_attributes : (string * Markup_types.att_value) list -> unit
-    method find : string -> 'ext node
-    method reset_finder : unit
-    method dtd : Markup_dtd.dtd
-    method create_element :
-      Markup_dtd.dtd -> node_type -> (string * string) list -> 'ext node
-    method create_data : Markup_dtd.dtd -> string -> 'ext node
-    method local_validate : unit
-    method keep_always_whitespace_mode : unit
-    method write_compact_as_latin1 : Markup_types.output_stream -> unit
-    method internal_adopt : 'ext node option -> unit
-    method internal_delete : 'ext node -> unit
-    method internal_init : Markup_dtd.dtd -> string -> (string * string) list -> unit
-  end
-;;
-
-
-class [ 'ext ] pxp_extension init_markup_node =
-  (object (self : 'self)
-    (* constraint 'ext = 'ext node #extension *)
-    val mutable pxp_node = (None : 
-                             'self Pxp_document.node option)
-    (* 'ext pxp_extension Pxp_document.node option *)
-    val mutable markup_node = (init_markup_node : 'ext node)
-
-    val mutable index = (None : 'self Pxp_yacc.index option)
-
-    method clone =
-      {< >}
-
-    method node =
-      match pxp_node with
-          None ->
-            assert false
-        | Some n -> n
-
-    method set_node n =
-      pxp_node <- Some n
-
-    method markup_node = markup_node
-
-    method set_markup_node n = markup_node <- n
-
-    method set_index ix =
-      index <- Some ix
-
-    method index = 
-      match index with
-         None -> assert false
-       | Some x -> x
-
-   end
-     : ['ext, 'ext node] pxp_extension_type )
-;;
-
-
-class [ 'ext ] emulate_markup_node init_ext init_pxp_node = 
-  object (self)
-    constraint 'ext = 'ext node #extension
-    val mutable pxp_node = (init_pxp_node : 
-                             ('ext, 'ext #node) 
-                             pxp_extension_type Pxp_document.node option)
-    val mutable extension = (init_ext : 'ext)
-
-    method pxp_node =
-      match pxp_node with
-         None   -> assert false
-       | Some n -> n 
-
-    method extension = extension
-    method delete = self # pxp_node # delete
-    method parent = self # pxp_node # parent # extension # markup_node
-    method root   = self # pxp_node # root # extension # markup_node
-
-    method orphaned_clone =
-      let ext' = extension # clone in
-      let pxp' = self # pxp_node # orphaned_clone in
-      let n = new emulate_markup_node ext' (Some pxp') in
-      ext' # set_node (n : 'ext #node  :> 'ext node);
-      pxp' # extension # set_markup_node n;
-      n
-
-     method orphaned_flat_clone =
-      let ext' = extension # clone in
-      let pxp' = self # pxp_node # orphaned_flat_clone in
-      let n = new emulate_markup_node ext' (Some pxp') in
-      ext' # set_node (n : 'ext #node  :> 'ext node);
-      pxp' # extension # set_markup_node n;
-      n
-
-     method dtd = self # pxp_node # dtd
-
-     method add_node (n : 'ext node) =
-       let n_pxp = n # pxp_node in
-       self # pxp_node # add_node n_pxp
-
-     method add_pinstr pi =
-       self # pxp_node # add_pinstr pi
-
-     method sub_nodes =
-       let l = self # pxp_node # sub_nodes in
-       List.map (fun n_pxp -> n_pxp # extension # markup_node) l
-
-     method pinstr name =
-       self # pxp_node # pinstr name
-
-     method pinstr_names =
-       self # pxp_node # pinstr_names
-
-     method iter_nodes f =
-       self # pxp_node # iter_nodes
-        (fun n_pxp -> f (n_pxp # extension # markup_node))
-
-     method iter_nodes_sibl f =
-       self # pxp_node # iter_nodes_sibl
-        (fun left_pxp node_pxp right_pxp ->
-           let left =
-             match left_pxp with 
-                 None       -> None
-               | Some n_pxp -> Some (n_pxp # extension # markup_node) in
-           let right =
-             match right_pxp with 
-                 None       -> None
-               | Some n_pxp -> Some (n_pxp # extension # markup_node) in
-           let node =
-             node_pxp # extension # markup_node in
-           f left node right
-        )
-
-     method set_nodes (l : 'ext node list) =
-       let l_pxp = List.map (fun n -> n # pxp_node) l in
-       self # pxp_node # set_nodes l_pxp
-
-     method data = self # pxp_node # data
-
-     method node_type =
-       match self # pxp_node # node_type with
-          Pxp_document.T_data         -> T_data
-        | Pxp_document.T_element name -> T_element name
-        | Pxp_document.T_super_root   -> T_element "-vr"
-        | Pxp_document.T_pinstr _     -> T_element "-pi"
-        | _ -> assert false
-
-     method attribute name =
-       self # pxp_node # attribute name
-
-     method attribute_names =
-       self # pxp_node # attribute_names
-
-     method attribute_type name =
-       self # pxp_node # attribute_type name
-
-     method attributes =
-       self # pxp_node # attributes
-
-     method required_string_attribute name =
-       self # pxp_node # required_string_attribute name
-
-     method required_list_attribute name =
-       self # pxp_node # required_list_attribute name
-
-     method optional_string_attribute name =
-       self # pxp_node # optional_string_attribute name
-
-     method optional_list_attribute name =
-       self # pxp_node # optional_list_attribute name
-
-     method quick_set_attributes l =
-       self # pxp_node # quick_set_attributes l
-
-     method find (name : string) =
-       let index = self # root # pxp_node # extension # index in
-       let n = index # find name in (* may raise Not_found *)
-       n # extension # markup_node
-
-     method reset_finder = ()
-
-     method create_element dtd nt atts =
-       let nt_pxp =
-        match nt with
-            T_data -> Pxp_document.T_data
-          | T_element name -> Pxp_document.T_element name in
-       let node_pxp =
-        self # pxp_node # create_element dtd nt_pxp atts in
-       let ext' = extension # clone in
-       let n = new emulate_markup_node ext' (Some node_pxp) in
-       ext' # set_node (n : 'ext #node  :> 'ext node);
-       node_pxp # extension # set_markup_node n;
-       n
-
-     method create_data dtd s =
-       let node_pxp =
-        self # pxp_node # create_data dtd s in
-       let ext' = extension # clone in
-       let n = new emulate_markup_node ext' (Some node_pxp) in
-       ext' # set_node (n : 'ext #node  :> 'ext node);
-       node_pxp # extension # set_markup_node n;
-       n
-
-     method keep_always_whitespace_mode =
-       self # pxp_node # keep_always_whitespace_mode
-
-     method write_compact_as_latin1 out =
-       self # pxp_node # write_compact_as_latin1 out
-
-     method local_validate =
-       self # pxp_node # local_validate()
-
-     method internal_adopt (p:'ext node option) =
-       assert false;
-       ()
-
-     method internal_delete (n:'ext node) =
-       assert false;
-       ()
-     method internal_init (d:Markup_dtd.dtd) (s:string) (atts:(string*string)list) =
-       assert false;
-       ()
-  end
-;;
-
-class [ 'ext ] data_impl ext data =
-  object (self)
-    inherit [ 'ext ] emulate_markup_node ext None
-    constraint 'ext = 'ext node #extension
-    initializer
-      if data <> "" then
-       failwith "Emulation of Markup_document: Cannot instantiate data node with non-empty string";
-      let self' = (self : 'ext #node :> 'ext node ) in
-      pxp_node <- Some (new Pxp_document.data_impl (new pxp_extension self'))
-
-  end
-;;
-
-class [ 'ext ] element_impl ext =
-  object (self)
-    inherit [ 'ext ] emulate_markup_node ext None
-    initializer
-      let self' = (self : 'ext #node :> 'ext node ) in
-      pxp_node <- Some (new Pxp_document.element_impl (new pxp_extension self'))
-  end
-;;
-
-
-class [ 'ext ] document w =
-  object (self)
-    val pxp_doc = new Pxp_document.document 
-                   (w : Markup_types.collect_warnings :> Pxp_types.collect_warnings)
-
-    val mutable standalone_flag = false
-
-    method init_xml_version v =
-      pxp_doc # init_xml_version v
-
-    method xml_version =
-      pxp_doc # xml_version
-
-    method init_xml_standalone b =
-      standalone_flag <- b
-
-    method xml_standalone = standalone_flag
-
-    method init_root (r : 'ext node) =
-      pxp_doc # init_root (r # pxp_node);
-      self # dtd # set_standalone_declaration standalone_flag
-        (* questionable *)
-
-    method root =
-      let pxp_root = pxp_doc # root in
-      pxp_root # extension # markup_node
-
-    method dtd =
-      pxp_doc # dtd
-
-    method add_pinstr pi =
-      pxp_doc # add_pinstr pi
-
-    method pinstr name =
-      pxp_doc # pinstr name
-
-    method pinstr_names =
-      pxp_doc # pinstr_names
-
-    method write_compact_as_latin1 out =
-      pxp_doc # write_compact_as_latin1 out
-
-  end
-;;
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:30  lpadovan
- * Initial revision
- *
- * Revision 1.6  2000/08/18 20:19:00  gerd
- *     Changed the emulation: there are now wrapper objects for nodes.
- * This was necessary because node_type changed in PXP such that it became
- * incompatible with Markup's node_type.
- *
- * Revision 1.5  2000/07/14 21:35:35  gerd
- *     Updated because of the simplification of Pxp_types.collect_warnings.
- *
- * Revision 1.4  2000/07/08 17:40:50  gerd
- *     Updated the simulation.
- *
- * Revision 1.3  2000/06/14 22:19:27  gerd
- *     Update because of additional 'encoding' methods.
- *
- * Revision 1.2  2000/05/30 00:08:40  gerd
- *     Bugfix.
- *
- * Revision 1.1  2000/05/29 23:43:51  gerd
- *     Initial compatibility revision.
- *
- *)
-
diff --git a/helm/DEVEL/pxp/pxp/compatibility/markup_document.mli b/helm/DEVEL/pxp/pxp/compatibility/markup_document.mli
deleted file mode 100644 (file)
index 2e37f0f..0000000
+++ /dev/null
@@ -1,420 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * Markup! The validating XML parser for Objective Caml.
- * Copyright 1999 by Gerd Stolpmann. See LICENSE for details.
- *
- * THIS IS THE markup-0.2.10 COMPATIBLE INTERFACE TO markup_document.mli.
- * It corresponds to revision 1.13 of markup_document.mli.
- *)
-
-(**********************************************************************)
-(*                                                                    *)
-(* Markup_document:                                                   *)
-(*     Object model of the document/element instances                 *)
-(*                                                                    *)
-(**********************************************************************)
-
-
-(* ======================================================================
- * OVERVIEW
- *
- * class type node ............. The common class type of the nodes of
- *                               the element tree. Nodes are either
- *                               elements (inner nodes) or data nodes
- *                               (leaves)
- * class type extension ........ The minimal properties of the so-called
- *                               extensions of the nodes: Nodes can be
- *                               customized by applying a class parameter
- *                               that adds methods/values to nodes.
- * class data_impl : node ...... Implements data nodes.
- * class element_impl : node ... Implements element nodes
- * class document .............. A document is an element with some additional
- *                               properties
- *
- * ======================================================================
- *
- * THE STRUCTURE OF NODE TREES:
- *
- * Every node except the root node has a parent node. The parent node is
- * always an element, because data nodes never contain other nodes.
- * In the other direction, element nodes may have children; both elements
- * and data nodes are possible as children.
- * Every node knows its parent (if any) and all its children (if any);
- * the linkage is maintained in both directions. A node without a parent
- * is called a root.
- * It is not possible that a node is the child of two nodes (two different nodes
- * or a multiple child of the same node).
- * You can break the connection between a node and its parent; the method
- * "delete" performs this operations and deletes the node from the parent's
- * list of children. The node is now a root, for itself and for all
- * subordinate nodes. In this context, the node is also called an orphan,
- * because it has lost its parent (this is a bit misleading because the
- * parent is not always the creator of a node).
- * In order to simplify complex operations, you can also set the list of
- * children of an element. Nodes that have been children before are unchanged;
- * new nodes are added (and the linkage is set up), nodes no more occurring
- * in the list are handled if they have been deleted.
- * If you try to add a node that is not a root (either by an "add" or by a
- * "set" operation) the operation fails.
- *
- * CREATION OF NODES
- *
- * The class interface supports creation of nodes by cloning a so-called
- * exemplar. The idea is that it is sometimes useful to implement different
- * element types by different classes, and to implement this by looking up
- * exemplars.
- * Imagine you have three element types A, B, and C, and three classes
- * a, b, and c implementing the node interface (for example, by providing
- * different extensions, see below). The XML parser can be configured to
- * have a lookup table
- *   { A --> a0,  B --> b0, C --> c0 }
- * where a0, b0, c0 are exemplars of the classes a, b, and c, i.e. empty
- * objects belonging to these classes. If the parser finds an instance of
- * A, it looks up the exemplar a0 of A and clones it (actually, the method
- * "create_element" performs this for elements, and "create_data" for data
- * nodes). Clones belong to the same class as the original nodes, so the
- * instances of the elements have the same classes as the configured
- * exemplars.
- * Note: This technique assumes that the interface of all exemplars is the
- * same!
- *
- * THE EXTENSION
- *
- * The class type node and all its implementations have a class parameter
- * 'ext which must at least fulfil the properties of the class type "extension".
- * The idea is that you can add properties, for example:
- *
- * class my_extension =
- *   object
- *     (* minimal properties required by class type "extension": *)
- *     method clone = ...
- *     method node = ...
- *     method set_node n = ...
- *     (* here my own methods: *)
- *     method do_this_and_that ...
- *   end
- *
- * class my_element_impl = [ my_extension ] element_impl
- * class my_data_impl    = [ my_extension ] data_impl
- *
- * The whole XML parser is parameterized with 'ext, so your extension is
- * visible everywhere (this is the reason why extensibility is solved by
- * parametric polymorphism and not by inclusive polymorphism (subtyping)).
- *
- *
- * SOME COMPLICATED TYPE EXPRESSIONS
- *
- * Sometimes the following type expressions turn out to be necessary:
- *
- * 'a node extension as 'a
- *      This is the type of an extension that belongs to a node that
- *      has an extension that is the same as we started with.
- *
- * 'a extension node as 'a
- *      This is the type of a node that has an extension that belongs to a
- *      node of the type we started with.
- *
- *
- * DOCUMENTS
- * ...
- *
- * ======================================================================
- *
- * SIMPLE USAGE: ...
- *)
-
-
-open Markup_dtd
-
-
-type node_type = 
-    T_element of string
-  | T_data
-
-
-
-class type [ 'node ] extension =
-  object ('self)
-    method clone : 'self
-      (* "clone" should return an exact deep copy of the object. *)
-    method node : 'node
-      (* "node" returns the corresponding node of this extension. This method
-       * intended to return exactly what previously has been set by "set_node".
-       *)
-    method set_node : 'node -> unit
-      (* "set_node" is invoked once the extension is associated to a new
-       * node object.
-       *)
-  end
-;;
-
-class type [ 'ext, 'node ] pxp_extension_type =
-object ('self)
-    method clone : 'self
-    method node : 'self Pxp_document.node
-    method set_node : 'self Pxp_document.node -> unit
-
-    method markup_node : 'node
-    method set_markup_node : 'node -> unit
-
-    method set_index : 'self Pxp_yacc.index -> unit
-    method index : 'self Pxp_yacc.index
-  end
-;;
-
-class type [ 'ext ] node =
-  object ('self)
-    constraint 'ext = 'ext node #extension
-    method pxp_node : (('ext, 'ext node) pxp_extension_type) Pxp_document.node
-
-    method extension : 'ext
-      (* Return the extension of this node: *)
-
-    method delete : unit
-      (* Delete this node from the parent's list of sub nodes. This node gets
-       * orphaned.
-       * 'delete' does nothing if this node does not have a parent.
-       *)
-
-    method parent : 'ext node
-      (* Get the parent, or raise Not_found if this node is an orphan. *)
-
-    method root : 'ext node
-      (* Get the direct or indirect parent that does not have a parent itself,
-       * i.e. the root of the tree.
-       *)
-
-    method orphaned_clone : 'ext node
-      (* return an exact clone of this element and all sub nodes (deep copy)
-       * except string values which are shared by this node and the clone.
-       * The other exception is that the clone has no parent (i.e. it is now
-       * a root).
-       *)
-
-    method orphaned_flat_clone : 'ext node
-      (* return a clone of this element where all subnodes are omitted.
-       * The type of the node, and the attributes are the same as in the
-       * original node.
-       * The clone has no parent.
-       *)
-
-    method add_node : 'ext node -> unit
-      (* Append new sub nodes -- mainly used by the parser itself, but
-       * of course open for everybody. If an element is added, it must be
-       * an orphan (i.e. does not have a parent node); and after addition
-       * *this* node is the new parent.
-       *)
-
-    method add_pinstr : proc_instruction -> unit
-      (* Add a processing instruction to the set of processing instructions of
-       * this node. Usually only elements contain processing instructions.
-       *)
-
-    method pinstr : string -> proc_instruction list
-      (* Get all processing instructions with the passed name *)
-
-    method pinstr_names : string list
-      (* Get a list of all names of processing instructions *)
-
-    method sub_nodes : 'ext node list
-      (* Get the list of sub nodes *)
-
-    method iter_nodes : ('ext node -> unit) -> unit
-      (* iterate over the sub nodes *)
-
-    method iter_nodes_sibl :
-      ('ext node option -> 'ext node -> 'ext node option -> unit) -> unit
-      (* Here every iteration step can also access to the previous and to the
-       * following node if present:
-       *)
-
-    method find : string -> 'ext node
-      (* Get the node that has an ID attribute with this value, or raise
-       * Not_found.
-       * "find" may also cause a Validation_error if something is wrong
-       * with the IDs.
-       *)
-
-    method reset_finder : unit
-      (* makes that newly added nodes will also be found *)
-
-    method set_nodes : 'ext node list -> unit
-      (* Set the list of sub nodes. Elements that are no longer sub nodes gets
-       * orphaned, and all new elements that previously were not sub nodes
-       * must have been orphaned.
-       *)
-
-    method data : string
-      (* Get the data string of this node. For data nodes, this string is just
-       * the content. For elements, this string is the concatenation of all
-       * subordinate data nodes.
-       *)
-
-    method node_type : node_type
-      (* Get the name of the element type. *)
-
-    method attribute : string -> Markup_types.att_value
-    method attribute_names : string list
-    method attribute_type : string -> Markup_types.att_type
-    method attributes : (string * Markup_types.att_value) list
-      (* Get a specific attribute; get the names of all attributes; get the
-       * type of a specific attribute; get names and values of all attributes.
-       * Only elements have attributes.
-       * Note: If the DTD allows arbitrary for this element, "attribute_type"
-       * raises Undeclared.
-       *)
-
-    method required_string_attribute : string -> string
-    method required_list_attribute : string -> string list
-      (* Return the attribute or fail if the attribute is not present:
-       * The first version passes the value always as string back;
-       * the second version always as list.
-       *)
-
-    method optional_string_attribute : string -> string option
-    method optional_list_attribute : string -> string list
-      (* Return some attribute value or return None if the attribute is not
-       *  present:
-       * The first version passes the value always as string back;
-       * the second version always as list.
-       *)
-
-    method quick_set_attributes : (string * Markup_types.att_value) list -> unit
-      (* Sets the attributes but does not check whether they match the DTD.
-       *)
-
-     method dtd : dtd
-       (* Get the DTD *)
-
-    method create_element : dtd -> node_type -> (string * string) list -> 'ext node
-      (* create an "empty copy" of this element:
-       * - new DTD
-       * - new node type
-       * - new attribute list
-       * - empty list of nodes
-       *)
-
-    method create_data : dtd -> string -> 'ext node
-      (* create an "empty copy" of this data node: *)
-
-    method local_validate : unit
-      (* Check that this element conforms to the DTD: *)
-
-    method keep_always_whitespace_mode : unit
-      (* Normally, add_node does not accept data nodes when the DTD does not
-       * allow data nodes or only whitespace ("ignorable whitespace").
-       * Once you have invoked this method, ignorable whitespace is forced
-       * to be included into the document.
-       *)
-
-    method write_compact_as_latin1 : Markup_types.output_stream -> unit
-      (* Write the contents of this node and the subtrees to the passed
-       * output stream; the character set ISO-8859-1 is used. The format
-       * is compact (the opposite of "pretty printing").
-       *)
-
-    (* ---------------------------------------- *)
-    (* internal methods: *)
-    method internal_adopt : 'ext node option -> unit
-    method internal_delete : 'ext node -> unit
-    method internal_init : dtd -> string -> (string * string) list -> unit
-  end
-;;
-
-class [ 'ext ] data_impl : 'ext -> string -> [ 'ext ] node
-
-class [ 'ext ] element_impl : 'ext -> [ 'ext ] node
-
-class [ 'ext ] document :
-  Markup_types.collect_warnings -> 
-  object
-    method init_xml_version : string -> unit
-    method init_xml_standalone : bool -> unit
-    method init_root : 'ext node -> unit
-
-    method xml_version : string
-    method xml_standalone : bool
-    method dtd : dtd
-    method root : 'ext node
-
-    method add_pinstr : proc_instruction -> unit
-    method pinstr : string -> proc_instruction list
-    method pinstr_names : string list
-
-    method write_compact_as_latin1 : Markup_types.output_stream -> unit
-      (* Write the document to the passed
-       * output stream; the character set ISO-8859-1 is used. The format
-       * is compact (the opposite of "pretty printing").
-       * If a DTD is present, the DTD is included into the internal subset.
-       *)
-
-  end
-;;
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:30  lpadovan
- * Initial revision
- *
- * Revision 1.4  2000/08/18 20:19:16  gerd
- *     Updates in the emulation because of PXP changes.
- *
- * Revision 1.3  2000/07/16 16:35:06  gerd
- *     Update because PXP interface contains now the method 'write'.
- *
- * Revision 1.2  2000/06/14 22:19:27  gerd
- *     Update because of additional 'encoding' methods.
- *
- * Revision 1.1  2000/05/29 23:43:51  gerd
- *     Initial compatibility revision.
- *
- * ======================================================================
- * OLD LOGS:
- *
- * Revision 1.13  2000/05/27 19:15:08  gerd
- *     Removed the method init_xml_standalone.
- *
- * Revision 1.12  2000/05/01 20:42:34  gerd
- *         New method write_compact_as_latin1.
- *
- * Revision 1.11  2000/04/30 18:15:57  gerd
- *     Beautifications.
- *     New method keep_always_whitespace_mode.
- *
- * Revision 1.10  2000/03/11 22:58:15  gerd
- *     Updated to support Markup_codewriter.
- *
- * Revision 1.9  2000/01/27 21:51:56  gerd
- *     Added method 'attributes'.
- *
- * Revision 1.8  2000/01/27 21:19:07  gerd
- *     Added further methods.
- *
- * Revision 1.7  1999/11/09 22:20:14  gerd
- *     Removed method init_dtd from class "document". The DTD is
- * implicitly passed to the document by the root element.
- *
- * Revision 1.6  1999/09/01 22:51:40  gerd
- *     Added methods to store processing instructions.
- *
- * Revision 1.5  1999/09/01 16:19:57  gerd
- *     The "document" class has now a "warner" as class argument.
- *
- * Revision 1.4  1999/08/19 21:59:13  gerd
- *     Added method "reset_finder".
- *
- * Revision 1.3  1999/08/19 01:08:29  gerd
- *     Added method "find".
- *
- * Revision 1.2  1999/08/15 02:19:41  gerd
- *     Some new explanations: That unknown elements are not rejected
- * if the DTD allows them.
- *
- * Revision 1.1  1999/08/10 00:35:51  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/compatibility/markup_dtd.ml b/helm/DEVEL/pxp/pxp/compatibility/markup_dtd.ml
deleted file mode 100644 (file)
index 7df5e29..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *)
-
-class dtd w = 
-  Pxp_dtd.dtd 
-    (w : Markup_types.collect_warnings :> Pxp_types.collect_warnings) 
-    `Enc_iso88591;;
-
-class dtd_element dtd name = 
-  Pxp_dtd.dtd_element dtd name;;
-
-class dtd_notation name id = 
-  Pxp_dtd.dtd_notation name id `Enc_iso88591;;
-
-class proc_instruction target value = 
-  Pxp_dtd.proc_instruction target value `Enc_iso88591;;
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:30  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/07/14 21:35:35  gerd
- *     Updated because of the simplification of Pxp_types.collect_warnings.
- *
- * Revision 1.2  2000/06/14 22:19:27  gerd
- *     Update because of additional 'encoding' methods.
- *
- * Revision 1.1  2000/05/29 23:43:51  gerd
- *     Initial compatibility revision.
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/compatibility/markup_dtd.mli b/helm/DEVEL/pxp/pxp/compatibility/markup_dtd.mli
deleted file mode 100644 (file)
index 660b35a..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * Markup! The validating XML parser for Objective Caml.
- * Copyright 1999 by Gerd Stolpmann. See LICENSE for details.
- *
- * THIS IS THE markup-0.2.10 COMPATIBLE INTERFACE TO markup_dtd.mli.
- * It corresponds to revision 1.11 of markup_dtd.mli.
- *)
-
-(**********************************************************************)
-(*                                                                    *)
-(* Markup_dtd:                                                        *)
-(*     Object model of document type declarations                     *)
-(*                                                                    *)
-(**********************************************************************)
-
-(* ======================================================================
- * OVERVIEW
- *
- * class dtd ............... represents the whole DTD, including element
- *                           declarations, entity declarations, notation
- *                           declarations, and processing instructions
- * class dtd_element ....... represents an element declaration consisting
- *                           of a content model and an attribute list
- *                           declaration
- * class dtd_notation ...... represents a notation declaration
- * class proc_instruction .. represents a processing instruction
- * ======================================================================
- *
- *)
-
-
-class dtd :
-  Markup_types.collect_warnings -> 
-  Pxp_dtd.dtd
-    (* Incompatibilities:
-     * add_gen_entity, gen_entity
-     *)
-
-class dtd_element : dtd -> string -> Pxp_dtd.dtd_element
-  (* Incompatibilities:
-   * set_content_model, add_attribute
-   *)
-
-class dtd_notation : string -> Markup_types.ext_id -> Pxp_dtd.dtd_notation
-
-class proc_instruction : string -> string -> Pxp_dtd.proc_instruction
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:30  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/05/29 23:43:51  gerd
- *     Initial compatibility revision.
- *
- * ======================================================================
- * OLD LOGS:
- *
- * Revision 1.11  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.10  2000/05/27 19:20:38  gerd
- *     Changed the interfaces for the standalone check: New
- * methods: standalone_declaration, set_standalone_declaration,
- * externally_declared, attribute_violates_standalone_declaration.
- *     The method set_content_model has been renamed to
- * set_cm_and_extdecl; it now initializes also whether the element
- * has been declared in an external entity.
- *     Methods add_gen_entity and gen_entity pass an additional
- * boolean argument containing whether the declaration of the
- * general entity happened in an external entity.
- *     Method add_attribute expects this argument, too, which
- * states whether the declaration of the attribute happened in an
- * external entity.
- *
- * Revision 1.9  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.8  2000/05/06 23:10:26  gerd
- *     allow_arbitrary for elements, too.
- *
- * Revision 1.7  2000/05/01 20:42:52  gerd
- *         New method write_compact_as_latin1.
- *
- * Revision 1.6  2000/03/11 22:58:15  gerd
- *     Updated to support Markup_codewriter.
- *
- * Revision 1.5  2000/02/22 02:32:02  gerd
- *     Updated.
- *
- * Revision 1.4  1999/11/09 22:15:41  gerd
- *     Added method "arbitrary_allowed".
- *
- * Revision 1.3  1999/09/01 16:21:56  gerd
- *     "dtd" classes have now an argument that passes a "warner".
- *
- * Revision 1.2  1999/08/15 02:20:23  gerd
- *         New feature: a DTD can allow arbitrary elements.
- *
- * Revision 1.1  1999/08/10 00:35:51  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/compatibility/markup_reader.ml b/helm/DEVEL/pxp/pxp/compatibility/markup_reader.ml
deleted file mode 100644 (file)
index a196c22..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *)
-
-open Markup_types;;
-
-class type resolver =
-  object
-    method open_in : ext_id -> Lexing.lexbuf
-    method close_in : unit
-    method change_encoding : string -> unit
-    method clone : resolver
-  end
-;;
-
-(* General note: close_in is simulated by close_all. Of course, this is
- * wrong, but it should not matter 
- *)
-
-
-class resolve_read_channel ch the_warner =
-  object (self)
-    val pxp_resolver = 
-           new Pxp_reader.resolve_read_this_channel 
-             ~auto_close:false
-             ch
-    val warner = the_warner
-
-    initializer
-      pxp_resolver # init_warner 
-       (warner : Markup_types.collect_warnings :> Pxp_types.collect_warnings);
-      pxp_resolver # init_rep_encoding `Enc_iso88591;
-
-    method open_in xid =
-      pxp_resolver # open_in xid
-
-    method close_in =
-      pxp_resolver # close_all   (* sic! *)
-
-    method change_encoding enc =
-      pxp_resolver # change_encoding enc
-
-    method clone =
-      ( {< pxp_resolver = pxp_resolver # clone >} : #resolver :> resolver )
-
-  end
-;;
-
-
-class resolve_read_string str =
-  object (self)
-    val pxp_resolver = 
-           new Pxp_reader.resolve_read_this_string str
-    val warner = new Pxp_types.drop_warnings
-
-    initializer
-      pxp_resolver # init_warner warner;
-      pxp_resolver # init_rep_encoding `Enc_iso88591;
-
-    method open_in xid =
-      pxp_resolver # open_in xid
-
-    method close_in =
-      pxp_resolver # close_all   (* sic! *)
-
-    method change_encoding enc =
-      pxp_resolver # change_encoding enc
-
-    method clone =
-      ( {< pxp_resolver = pxp_resolver # clone >} : #resolver :> resolver )
-  end
-;;
-
-
-class resolve_as_file the_warner =
-  object (self)
-    val pxp_resolver = 
-           new Pxp_reader.resolve_as_file
-             ~system_encoding:`Enc_iso88591
-             ()
-    val warner = the_warner
-
-    initializer
-      pxp_resolver # init_warner
-       (warner : Markup_types.collect_warnings :> Pxp_types.collect_warnings);
-      pxp_resolver # init_rep_encoding `Enc_iso88591;
-
-    method open_in xid =
-      pxp_resolver # open_in xid
-
-    method close_in =
-      pxp_resolver # close_all   (* sic! *)
-
-    method change_encoding enc =
-      pxp_resolver # change_encoding enc
-
-    method clone =
-      ( {< pxp_resolver = pxp_resolver # clone >} : #resolver :> resolver )
-  end
-;;
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:30  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/07/14 21:35:35  gerd
- *     Updated because of the simplification of Pxp_types.collect_warnings.
- *
- * Revision 1.2  2000/07/08 17:40:50  gerd
- *     Updated the simulation.
- *
- * Revision 1.1  2000/05/29 23:43:51  gerd
- *     Initial compatibility revision.
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/compatibility/markup_reader.mli b/helm/DEVEL/pxp/pxp/compatibility/markup_reader.mli
deleted file mode 100644 (file)
index 8e5e2c8..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * Markup! The validating XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *
- * THIS IS THE markup-0.2.10 COMPATIBLE INTERFACE TO markup_reader.mli.
- * It corresponds to revision 1.3 of markup_reader.mli.
- *)
-
-open Markup_types;;
-
-
-(* The class type resolver is the official type of all "resolvers". 
- * Resolvers get file names (or better, external identifiers) and 
- * return lexbufs, scanning the file for tokens. Resolvers may be
- * cloned, and clones can interpret relative file names relative to
- * their creator. 
- *)
-
-class type resolver =
-  object
-    (* A resolver can open a character source, and returns this source as
-     * Lexing.lexbuf.
-     * The resolver should recode the source into ISO-8859-1. By default,
-     * a resolver should assume UTF-8 or UTF-16 encoding. Before
-     * 'change_encoding' is invoked, the resolver should only return
-     * lexbufs with one character. After 'change_encoding' has been invoked,
-     * there is no character limit anymore.
-     * 'change_encoding' can only be invoked once. This method is usually
-     * called after the <? ... ?> prolog of the entity has been read.
-     * If this method is not called, it is up to the resolver to find out
-     * if UTF-8 or UTF-16 is used. It is recommended to invoke this method
-     * with an empty string to indicate this situation.
-     *)
-    method open_in : ext_id -> Lexing.lexbuf
-    method close_in : unit
-    method change_encoding : string -> unit
-
-
-    (* Every resolver can be cloned. The clone does not inherit the connection
-     * with the external object, i.e. it is closed.
-     *)
-    method clone : resolver
-
-  end
-;;
-
-
-(* The following class is the current main implementation of resolvers.
- * It fetches strings from an arbitrary source (by calling init_in, and
- * then repeatedly next_string), recodes them to ISO-8859-1, and creates
- * lexbufs for them.
- * It is not complete, as the source is missing.
- *
- * Note that 'resolve_general' may change in future revisions; it is ugly.
- *)
-
-(* -- This API simulation does not provide 'resolve_general' any longer
-
-class virtual resolve_general :
-  collect_warnings ->
-  object 
-    val mutable encoding : string
-    val mutable encoding_requested : bool
-    val warner : collect_warnings
-
-    method clone : resolver
-
-    method private warn : int -> unit
-    method private autodetect : string -> unit
-
-    method private virtual next_string : string -> int -> int -> int
-    method private virtual init_in : ext_id -> unit
-    method virtual close_in : unit
-
-    method open_in : ext_id -> Lexing.lexbuf
-
-    method change_encoding : string -> unit
-  end
-*)
-
-
-(* The next classes are resolvers for concrete input sources. *)
-
-class resolve_read_channel : 
-  in_channel -> collect_warnings -> resolver;;
-
-  (* Reads from the passed channel (it may be even a pipe). Note that this
-   * resolver cannot handle file inclusions, as it is pre-bound to a 
-   * specific channel and is not able to interpret file names.
-   * That means, if there is a entity reference (something like &name; or
-   * %name;) to parse, and the definition points to another file, the
-   * resolver will fail.
-   *)
-
-
-class resolve_read_string : 
-  string -> resolver;;
-
-  (* Reads from the passed string. As 'resolver_read_channel', this 
-   * resolver cannot handle file inclusions.
-   *)
-
-
-class resolve_as_file :
-  collect_warnings -> resolver;;
-
-  (* Reads from the local file system. Every file name is interpreted as
-   * file name of the local file system, and the referred file is read.
-   * This resolver can handle file inclusions as long as they do not
-   * exceed the scope of the local file system (i.e. no URLs).
-   *)
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:30  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/07/08 17:40:50  gerd
- *     Updated the simulation.
- *
- * Revision 1.1  2000/05/29 23:43:51  gerd
- *     Initial compatibility revision.
- *
- * ======================================================================
- * OLD LOGS:
- *
- * Revision 1.3  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.2  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.1  2000/03/13 23:41:54  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/compatibility/markup_types.ml b/helm/DEVEL/pxp/pxp/compatibility/markup_types.ml
deleted file mode 100644 (file)
index a0c0c27..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *)
-
-
-type ext_id = Pxp_types.ext_id =
-    System of string
-  | Public of (string * string)
-  | Anonymous
-type dtd_id = Pxp_types.dtd_id=
-    External of ext_id
-  | Derived of ext_id
-  | Internal
-type content_model_type = Pxp_types.content_model_type =
-    Unspecified
-  | Empty
-  | Any
-  | Mixed of mixed_spec list
-  | Regexp of regexp_spec
-and mixed_spec = Pxp_types.mixed_spec =
-    MPCDATA
-  | MChild of string
-and regexp_spec = Pxp_types.regexp_spec =
-    Optional of regexp_spec
-  | Repeated of regexp_spec
-  | Repeated1 of regexp_spec
-  | Alt of regexp_spec list
-  | Seq of regexp_spec list
-  | Child of string
-type att_type = Pxp_types.att_type =
-    A_cdata
-  | A_id
-  | A_idref
-  | A_idrefs
-  | A_entity
-  | A_entities
-  | A_nmtoken
-  | A_nmtokens
-  | A_notation of string list
-  | A_enum of string list
-type att_default = Pxp_types.att_default =
-    D_required
-  | D_implied
-  | D_default of string
-  | D_fixed of string
-type att_value = Pxp_types.att_value =
-    Value of string
-  | Valuelist of string list
-  | Implied_value
-
-class collect_warnings = 
-object
-  val mutable w = Buffer.create 100
-  method print_warnings =
-    Buffer.contents w
-  method reset =
-    Buffer.clear w
-  method warn s =
-    Buffer.add_string w ("WARNING: " ^ s ^ "\n")
-end
-
-exception Illegal_character of int
-exception Validation_error = Pxp_types.Validation_error
-exception WF_error = Pxp_types.WF_error
-exception Character_not_supported = Pxp_types.Character_not_supported
-exception Bad_character_stream = Netconversion.Malformed_code
-exception At = Pxp_types.At
-exception Undeclared = Pxp_types.Undeclared
-
-let string_of_exn = Pxp_types.string_of_exn
-
-type output_stream = Pxp_types.output_stream =
-    Out_buffer of Buffer.t
-  | Out_channel of out_channel
-  | Out_function of (string -> int -> int -> unit)
-
-let write = Pxp_types.write
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:30  lpadovan
- * Initial revision
- *
- * Revision 1.5  2000/08/18 20:19:16  gerd
- *     Updates in the emulation because of PXP changes.
- *
- * Revision 1.4  2000/07/16 18:30:15  gerd
- *     Updated because PXP does no longer have the exception
- * Illegal_character.
- *
- * Revision 1.3  2000/07/14 21:35:35  gerd
- *     Updated because of the simplification of Pxp_types.collect_warnings.
- *
- * Revision 1.2  2000/07/08 17:40:50  gerd
- *     Updated the simulation.
- *
- * Revision 1.1  2000/05/29 23:43:51  gerd
- *     Initial compatibility revision.
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/compatibility/markup_types.mli b/helm/DEVEL/pxp/pxp/compatibility/markup_types.mli
deleted file mode 100644 (file)
index b33bb30..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * Markup! The validating XML parser for Objective Caml.
- * Copyright 1999 by Gerd Stolpmann. See LICENSE for details.
- *
- * THIS IS THE markup-0.2.10 COMPATIBLE INTERFACE TO markup_types.mli.
- * It corresponds to revision 1.7 of markup_types.mli.
- *)
-
-
-type ext_id = Pxp_types.ext_id =
-    System of string
-  | Public of (string * string)
-  | Anonymous
-type dtd_id = Pxp_types.dtd_id =
-    External of ext_id
-  | Derived of ext_id
-  | Internal
-type content_model_type = Pxp_types.content_model_type =
-    Unspecified
-  | Empty
-  | Any
-  | Mixed of mixed_spec list
-  | Regexp of regexp_spec
-and mixed_spec = Pxp_types.mixed_spec =
-    MPCDATA
-  | MChild of string
-and regexp_spec = Pxp_types.regexp_spec =
-    Optional of regexp_spec
-  | Repeated of regexp_spec
-  | Repeated1 of regexp_spec
-  | Alt of regexp_spec list
-  | Seq of regexp_spec list
-  | Child of string
-type att_type = Pxp_types.att_type =
-    A_cdata
-  | A_id
-  | A_idref
-  | A_idrefs
-  | A_entity
-  | A_entities
-  | A_nmtoken
-  | A_nmtokens
-  | A_notation of string list
-  | A_enum of string list
-type att_default = Pxp_types.att_default =
-    D_required
-  | D_implied
-  | D_default of string
-  | D_fixed of string
-type att_value = Pxp_types.att_value =
-    Value of string
-  | Valuelist of string list
-  | Implied_value
-
-class collect_warnings :
-  object 
-    method warn : string -> unit
-    method print_warnings : string
-    method reset : unit
-  end
-;;
-
-
-exception Illegal_character of int
-exception Validation_error of string
-exception WF_error of string
-exception Character_not_supported
-exception Bad_character_stream
-exception At of (string * exn)
-exception Undeclared
-
-val string_of_exn : exn -> string
-  (* Converts a Markup exception into a readable string *)
-
-
-type output_stream = Pxp_types.output_stream =
-    Out_buffer of Buffer.t
-  | Out_channel of out_channel
-  | Out_function of (string -> int -> int -> unit)
-
-val write : output_stream -> string -> int -> int -> unit
-  (* write os s pos len: Writes the string to the buffer/channel/stream *)
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:30  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/07/08 17:40:50  gerd
- *     Updated the simulation.
- *
- * Revision 1.1  2000/05/29 23:43:51  gerd
- *     Initial compatibility revision.
- *
- * ======================================================================
- * OLD LOGS:
- *
- * Revision 1.7  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.6  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.5  2000/05/01 20:43:25  gerd
- *         New type output_stream; new function 'write'.
- *
- * Revision 1.4  1999/09/01 16:25:35  gerd
- *     Dropped Illegal_token and Content_not_allowed_here. WF_error can
- * be used instead.
- *
- * Revision 1.3  1999/08/15 02:22:40  gerd
- *         Added exception Undeclared.
- *
- * Revision 1.2  1999/08/14 22:15:17  gerd
- *         New class "collect_warnings".
- *
- * Revision 1.1  1999/08/10 00:35:52  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/compatibility/markup_yacc.ml b/helm/DEVEL/pxp/pxp/compatibility/markup_yacc.ml
deleted file mode 100644 (file)
index 26c40de..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *)
-
-open Markup_types
-open Markup_dtd
-open Markup_document
-
-type config =
-    { warner : collect_warnings;
-      errors_with_line_numbers : bool;
-      processing_instructions_inline : bool;
-      virtual_root : bool;
-      debugging_mode : bool;
-    }
-
-
-type source =
-    Entity of ((dtd -> Pxp_entity.entity) * Markup_reader.resolver)
-  | Channel of in_channel
-  | File of string
-  | Latin1 of string
-  | ExtID of (ext_id * Markup_reader.resolver)
-
-type 'ext domspec =
-    { map : (node_type, 'ext node) Hashtbl.t;
-      default_element : 'ext node;
-    }
-
-
-class default_ext =
-  object(self)
-    val mutable node = (None : ('a extension node as 'a) option)
-    method clone = {< >}
-    method node =
-      match node with
-          None ->
-            assert false
-        | Some n -> n
-    method set_node n =
-      node <- Some n
-  end
-;;
-
-
-let default_extension = new default_ext;;
-
-let default_config = 
-  { warner = new collect_warnings;
-    errors_with_line_numbers = true;
-    processing_instructions_inline = false;
-    virtual_root = false;
-    debugging_mode = false;
-  }
-
-
-let default_dom =
-  let d = Hashtbl.create 2 in
-  Hashtbl.add d T_data (new data_impl default_extension "");
-  { map = d;
-    default_element = new element_impl default_extension
-  }
-;;
-
-
-let pxp_config cfg =
-  { Pxp_yacc.default_config with
-       Pxp_yacc.warner = (cfg.warner :> Pxp_types.collect_warnings);
-       Pxp_yacc.errors_with_line_numbers = cfg.errors_with_line_numbers;
-       Pxp_yacc.enable_pinstr_nodes = cfg.processing_instructions_inline;
-       Pxp_yacc.enable_super_root_node = cfg.virtual_root;
-       Pxp_yacc.encoding = `Enc_iso88591;
-       Pxp_yacc.recognize_standalone_declaration = false;
-       Pxp_yacc.debugging_mode = cfg.debugging_mode;
-  }
-;;
-
-
-class pxp_resolver r =
-  object (self)
-    val markup_resolver = r
-
-    method init_rep_encoding enc =
-      assert (enc = `Enc_iso88591 )
-  
-    method init_warner w =
-      ()
-
-    method rep_encoding = `Enc_iso88591
-
-    method open_in xid = 
-      markup_resolver # open_in xid
-
-    method close_in =
-      markup_resolver # close_in
-
-    method close_all =
-      markup_resolver # close_in
-
-    method change_encoding enc =
-      markup_resolver # change_encoding enc
-
-    method clone =
-      ( {< markup_resolver = markup_resolver # clone >} 
-       : #Pxp_reader.resolver :> Pxp_reader.resolver )
-  end
-;;
-
-
-let pxp_source src =
-  match src with
-      Entity (mkent, res) -> Pxp_yacc.Entity(mkent, new pxp_resolver res)
-    | ExtID (id, res)     -> Pxp_yacc.ExtID(id, new pxp_resolver res)
-    | Channel ch          -> Pxp_yacc.from_channel 
-                              ~system_encoding:`Enc_iso88591 ch
-    | File f              -> Pxp_yacc.from_file 
-                              ~system_encoding:`Enc_iso88591 f
-    | Latin1 s            -> Pxp_yacc.from_string ~fixenc:`Enc_iso88591 s
-;;
-
-
-let pxp_dom dom =
-  let dex =
-    try Hashtbl.find dom.map T_data 
-    with Not_found -> assert false
-  in
-  let eex = dom.default_element in
-  let m = Hashtbl.create 100 in
-  Hashtbl.iter
-    (fun nt ex ->
-       match nt with
-          T_element name when name <> "-vr" && name <> "-pi" -> 
-            let pxp_ex = ex # pxp_node in
-            Hashtbl.add m name pxp_ex
-        | _              -> ()
-    )
-    dom.map;
-  let srex =
-    try
-      Some ((Hashtbl.find dom.map (T_element "-vr")) # pxp_node)
-    with
-       Not_found -> None
-  in
-  let piex =
-    try
-      Some ((Hashtbl.find dom.map (T_element "-pi")) # pxp_node)
-    with
-       Not_found -> None
-  in
-  Pxp_document.make_spec_from_mapping
-    ?super_root_exemplar:srex
-    ?default_pinstr_exemplar:piex
-    ~data_exemplar:(dex # pxp_node)
-    ~default_element_exemplar:(eex # pxp_node)
-    ~element_mapping:m
-    ()
-;;
-
-
-let markup_document w index doc =
-  let mdoc = new document w in
-  mdoc # init_xml_version (doc # xml_version);
-  mdoc # init_xml_standalone (doc # xml_standalone);
-  let r = doc # root # extension in
-  r # set_index index;
-  mdoc # init_root (r # markup_node);
-  List.iter
-    (fun piname ->
-       let l = doc # pinstr piname in
-       List.iter 
-        (fun pi -> mdoc # add_pinstr pi)
-        l)
-    (doc # pinstr_names);
-  mdoc
-;;
-
-
-
-let parse_dtd_entity cfg src =
-  Pxp_yacc.parse_dtd_entity
-    (pxp_config cfg)
-    (pxp_source src)
-;;
-
-
-let parse_document_entity cfg src dom =
-  let index = (new Pxp_yacc.hash_index :> 'ext Pxp_yacc.index) in
-  markup_document
-    cfg.warner
-    index
-    (Pxp_yacc.parse_document_entity 
-        ~id_index:index
-       (pxp_config cfg)
-       (pxp_source src)
-       (pxp_dom dom))
-;;
-
-
-let parse_content_entity cfg src dtd dom =
-  let index = (new Pxp_yacc.hash_index :> 'ext Pxp_yacc.index) in
-  let n = 
-    (Pxp_yacc.parse_content_entity
-     ~id_index:index
-       (pxp_config cfg)
-       (pxp_source src)
-       dtd
-       (pxp_dom dom)) # extension in
-  n # set_index index;
-  n # markup_node
-;;
-
-
-let parse_wf_entity cfg src dom =
-  let index = (new Pxp_yacc.hash_index :> 'ext Pxp_yacc.index) in
-  (* Restriction: index is not filled! *)
-  markup_document
-    cfg.warner
-    index 
-    (Pxp_yacc.parse_wfdocument_entity
-       (pxp_config cfg)
-       (pxp_source src)
-       (pxp_dom dom))
-;;
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:30  lpadovan
- * Initial revision
- *
- * Revision 1.4  2000/08/18 20:19:16  gerd
- *     Updates in the emulation because of PXP changes.
- *
- * Revision 1.3  2000/07/14 21:35:35  gerd
- *     Updated because of the simplification of Pxp_types.collect_warnings.
- *
- * Revision 1.2  2000/07/08 17:40:50  gerd
- *     Updated the simulation.
- *
- * Revision 1.1  2000/05/29 23:43:51  gerd
- *     Initial compatibility revision.
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/compatibility/markup_yacc.mli b/helm/DEVEL/pxp/pxp/compatibility/markup_yacc.mli
deleted file mode 100644 (file)
index daccad4..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * Markup! The validating XML parser for Objective Caml.
- * Copyright 1999 by Gerd Stolpmann. See LICENSE for details.
- *
- * THIS IS THE markup-0.2.10 COMPATIBLE INTERFACE TO markup_yacc.mli.
- * It corresponds to revision 1.4 of markup_yacc.mli.
- *)
-
-
-(*$ markup-yacc.mli *)
-
-open Markup_types
-open Markup_dtd
-open Markup_document
-
-type config =
-    { warner : collect_warnings;
-         (* An object that collects warnings. *)
-
-      errors_with_line_numbers : bool;
-         (* Whether error messages contain line numbers or not. The parser
-         * is 10 to 20 per cent faster if line numbers are turned off;
-         * you get only character positions in this case.
-         *)
-
-      processing_instructions_inline : bool;
-         (* true: turns a special mode for processing instructions on. Normally,
-         * you cannot determine the exact location of a PI; you only know
-         * in which element the PI occurs. The "inline" mode makes it possible
-         * to find the exact location out: Every PI is artificially wrapped
-         * by a special element with name "-pi". For example, if the XML text
-         * is <a><?x?><?y?></a>, the parser normally produces only an element
-         * object for "a", and puts the PIs "x" and "y" into it (without
-         * order). In inline mode, the object "a" will contain two objects
-         * with name "-pi", and the first object will contain "x", and the
-         * second "y".
-         * Notes:
-         * (1) The name "-pi" is reserved. You cannot use it for your own
-         *     tags because tag names must not begin with '-'.
-         * (2) You need not to add a declaration for "-pi" to the DTD. These
-         *     elements are handled separately.
-         * (3) Of course, the "-pi" objects are created from exemplars of
-         *     your DOM map.
-         *)
-
-      virtual_root : bool;
-         (* true: the topmost element of the XML tree is not the root element,
-         * but the so-called virtual root. The root element is a son of the
-         * virtual root. The virtual root is an ordinary element with name
-         * "-vr".
-         * The following behaviour changes, too:
-         * - PIs occurring outside the root element and outside the DTD are
-         *   added to the virtual root instead of the document object
-         * - If processing_instructions_inline is also turned on, these PIs
-         *   are added inline to the virtual root
-         * Notes:
-         * (1) The name "-vr" is reserved. You cannot use it for your own
-         *     tags because tag names must not begin with '-'.
-         * (2) You need not to add a declaration for "-vr" to the DTD. These
-         *     elements are handled separately.
-         * (3) Of course, the "-vr" objects are created from exemplars of
-         *     your DOM map.
-         *)
-
-      (* The following options are not implemented, or only for internal
-       * use.
-       *)
-
-      debugging_mode : bool;
-    }
-
-
-type source =
-    Entity of ((dtd -> Pxp_entity.entity) * Markup_reader.resolver)
-  | Channel of in_channel
-  | File of string
-  | Latin1 of string
-  | ExtID of (ext_id * Markup_reader.resolver)
-
-(* Note on sources:
- *
- * The sources do not have all the same capabilities. Here the differences:
- *
- * - File: A File source reads from a file by name. This has the advantage
- *   that references to external entites can be resolved. - The problem
- *   with SYSTEM references is that they usually contain relative file
- *   names; more exactly, a file name relative to the document containing it.
- *   It is only possible to convert such names to absolute file names if the
- *   name of the document containing such references is known; and File
- *   denotes this name.
- *
- * - Channel, Latin1: These sources read from documents given as channels or
- *   (Latin 1-encoded) strings. There is no file name, and because of this
- *   the documents must not contain references to external files (even
- *   if the file names are given as absolute names).
- *
- * - ExtID(x,r): The identifier x (either the SYSTEM or the PUBLIC name) of the
- *   entity to read from is passed to the resolver r as-is.
- *   The intention of this option is to allow customized
- *   resolvers to interpret external identifiers without any restriction.
- *   For example, you can assign the PUBLIC identifiers a meaning (they
- *   currently do not have any), or you can extend the "namespace" of
- *   identifiers.
- *   ExtID is the interface of choice for own extensions to resolvers.
- *
- * - Entity(m,r): You can implementy every behaviour by using a customized
- *   entity class. Once the DTD object d is known that will be used during
- *   parsing, the entity  e = m d  is determined and used together with the
- *   resolver r.
- *   This is only for hackers.
- *)
-
-
-type 'ext domspec =
-    { map : (node_type, 'ext node) Hashtbl.t;
-      default_element : 'ext node;
-    }
-  (* Specifies which node to use as exemplar for which node type. See the
-   * manual for explanations.
-   *)
-
-val default_config : config
-  (* - The resolver is able to read from files by name
-   * - Warnings are thrown away
-   * - Error message will contain line numbers
-   * - The internal encoding is ISO-8859-1
-   * - standalone declaration is checked
-   *)
-
-val default_extension : ('a node extension) as 'a
-  (* A "null" extension; an extension that does not extend the funtionality *)
-
-val default_dom : ('a node extension as 'a) domspec
-  (* Specifies that you do not want to use extensions. *)
-
-val parse_dtd_entity      : config -> source -> dtd
-  (* Parse an entity containing a DTD, and return this DTD. *)
-
-val parse_document_entity : config -> source -> 'ext domspec -> 'ext document
-  (* Parse a closed document, i.e. a document beginning with <!DOCTYPE...>,
-   * and validate the contents of the document against the DTD contained
-   * and/or referenced in the document.
-   *)
-
-val parse_content_entity  : config ->
-                            source ->
-                           dtd ->
-                           'ext domspec ->
-                             'ext node
-  (* Parse a file representing a well-formed fragment of a document. The
-   * fragment must be a single element (i.e. something like <a>...</a>;
-   * not a sequence like <a>...</a><b>...</b>). The element is validated
-   * against the passed DTD, but it is not checked whether the element is
-   * the root element specified in the DTD.
-   * Note that you can create DTDs that specify not to validate at all
-   * (invoke method allow_arbitrary on the DTD).
-   *)
-
-val parse_wf_entity : config -> source -> 'ext domspec -> 'ext document
-  (* Parse a closed document (see parse_document_entity), but do not
-   * validate it. Only checks on well-formedness are performed.
-   *)
-
-(*$-*)
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:30  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/05/29 23:43:51  gerd
- *     Initial compatibility revision.
- *
- * ======================================================================
- * OLD LOGS:
- *
- * Revision 1.4  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.3  2000/05/27 19:24:01  gerd
- *     New option: recognize_standalone_declaration.
- *
- * Revision 1.2  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.1  2000/05/06 23:21:49  gerd
- *     Initial revision.
- *
- * Revision 1.9  2000/04/30 18:23:38  gerd
- *     New config options 'processing_instructions_inline' and
- * 'virtual_root'.
- *
- * Revision 1.8  2000/03/13 23:46:46  gerd
- *     Change: The 'resolver' component of the 'config' type has
- * disappeared. Instead, there is a new resolver component in the Entity
- * and ExtID values of 'source'. I hope that this makes clearer that the
- * resolver has only an effect if used together with Entity and ExtID
- * sources.
- *     Change: The Entity value can now return the entity dependent
- * on the DTD that is going to be used.
- *
- * Revision 1.7  2000/02/22 02:32:02  gerd
- *     Updated.
- *
- * Revision 1.6  2000/02/22 01:52:45  gerd
- *     Added documentation.
- *
- * Revision 1.5  2000/01/20 20:54:43  gerd
- *     New config.errors_with_line_numbers.
- *
- * Revision 1.4  1999/09/01 23:09:10  gerd
- *     New function parse_wf_entity that simulates a well-formedness
- * parser.
- *
- * Revision 1.3  1999/09/01 16:26:36  gerd
- *     Added an empty line. This is *really* a big change.
- *
- * Revision 1.2  1999/08/14 22:20:27  gerd
- *         The "config" slot has now a component "warner"which is
- * an object with a "warn" method. This is used to warn about characters
- * that cannot be represented in the Latin 1 alphabet.
- *         Furthermore, there is a new component "debugging_mode".
- *
- * Revision 1.1  1999/08/10 00:35:52  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/doc/ABOUT-FINDLIB b/helm/DEVEL/pxp/pxp/doc/ABOUT-FINDLIB
deleted file mode 100644 (file)
index d942e27..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-******************************************************************************
-ABOUT-FINDLIB - Package manager for O'Caml
-******************************************************************************
-
-
-==============================================================================
-Abstract
-==============================================================================
-
-The findlib library provides a scheme to manage reusable software components 
-(packages), and includes tools that support this scheme. Packages are 
-collections of OCaml modules for which metainformation can be stored. The 
-packages are kept in the filesystem hierarchy, but with strict directory 
-structure. The library contains functions to look the directory up that stores 
-a package, to query metainformation about a package, and to retrieve dependency 
-information about multiple packages. There is also a tool that allows the user 
-to enter queries on the command-line. In order to simplify compilation and 
-linkage, there are new frontends of the various OCaml compilers that can 
-directly deal with packages. 
-
-Together with the packages metainformation is stored. This includes a version 
-string, the archives the package consists of, and additional linker options. 
-Packages can also be dependent on other packages. There is a query which finds 
-out all predecessors of a list of packages and sorts them topologically. The 
-new compiler frontends do this implicitly. 
-
-Metainformation can be conditional, i.e. depend on a set of predicates. This is 
-mainly used to be able to react on certain properties of the environment, such 
-as if the bytecode or the native compiler is invoked, if the application is 
-multi-threaded, and a few more. If the new compiler frontends are used, most 
-predicates are found out automatically. 
-
-There is special support for scripts. A new directive, "#require", loads 
-packages into scripts. Of course, this works only with newly created toploops 
-which include the findlib library. 
-
-==============================================================================
-Where to get findlib
-==============================================================================
-
-The manual of findlib is available online [1]. You can download findlib here 
-[2]. 
-
-
---------------------------
-
-[1]   see http://www.ocaml-programming.de/packages/documentation/findlib/
-
-[2]   see http://www.ocaml-programming.de/packages/findlib-0.3.1.tar.gz
-
-
-
diff --git a/helm/DEVEL/pxp/pxp/doc/ABOUT-FINDLIB.xml b/helm/DEVEL/pxp/pxp/doc/ABOUT-FINDLIB.xml
deleted file mode 100644 (file)
index d1dc5b0..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE readme SYSTEM "readme.dtd" [
-
-<!ENTITY % common SYSTEM "common.xml">
-%common;
-
-<!ENTITY f "<em>findlib</em>">
-<!ENTITY F "<em>Findlib</em>">
-
-]>
-
-<readme title="ABOUT-FINDLIB - Package manager for O'Caml">
-  <sect1>
-    <title>Abstract</title>
-<p>
-The &f; library provides a scheme to manage reusable software
-components (packages), and includes tools that support this
-scheme. Packages are collections of OCaml modules for which
-metainformation can be stored. The packages are kept in the filesystem
-hierarchy, but with strict directory structure. The library contains
-functions to look the directory up that stores a package, to query
-metainformation about a package, and to retrieve dependency
-information about multiple packages. There is also a tool that allows
-the user to enter queries on the command-line. In order to simplify
-compilation and linkage, there are new frontends of the various OCaml
-compilers that can directly deal with packages.
-</p>
-
-<p>
-Together with the packages metainformation is stored. This includes a
-version string, the archives the package consists of, and additional
-linker options. Packages can also be dependent on other
-packages. There is a query which finds out all predecessors of a list
-of packages and sorts them topologically. The new compiler frontends
-do this implicitly.
-</p>
-
-<p>
-Metainformation can be conditional, i.e. depend on a set of
-predicates. This is mainly used to be able to react on certain
-properties of the environment, such as if the bytecode or the native
-compiler is invoked, if the application is multi-threaded, and a few
-more. If the new compiler frontends are used, most predicates are
-found out automatically.
-</p>
-
-<p>
-There is special support for scripts. A new directive, "#require",
-loads packages into scripts. Of course, this works only with newly
-created toploops which include the &f; library.
-</p>
-
-  </sect1>
-
-  <sect1><title>Where to get findlib</title>
-    <p>
-The manual of &f; is available <a href="&url.findlib-project;">online</a>.
-You can download &f; <a href="&url.findlib-download;">here</a>.
-</p>
-  </sect1>
-</readme>
diff --git a/helm/DEVEL/pxp/pxp/doc/EXTENSIONS b/helm/DEVEL/pxp/pxp/doc/EXTENSIONS
deleted file mode 100644 (file)
index a956839..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-******************************************************************************
-Extensions of the XML specification
-******************************************************************************
-
-
-==============================================================================
-This document
-==============================================================================
-
-This parser has some options extending the XML specification. Here, the options 
-are explained. 
-
-==============================================================================
-Optional declarations instead of mandatory declarations
-==============================================================================
-
-The XML spec demands that elements, notations, and attributes must be declared. 
-However, there are sometimes situations where a different rule would be better: 
-If there is a declaration, the actual instance of the element type, notation 
-reference or attribute must match the pattern of the declaration; but if the 
-declaration is missing, a reasonable default declaration should be assumed.
-
-I have an example that seems to be typical: The inclusion of HTML into a meta 
-language. Imagine you have defined some type of "generator" or other tool 
-working with HTML fragments, and your document contains two types of elements: 
-The generating elements (with a name like "gen:xxx"), and the object elements 
-which are HTML. As HTML is still evolving, you do not want to declare the HTML 
-elements; the HTML fragments should be treated as well-formed XML fragments. In 
-contrast to this, the elements of the generator should be declared and 
-validated because you can more easily detect errors.
-
-The following two processing instructions can be included into the DTD:
-
--  
-   <?pxp:dtd optional-element-and-notation-declarations?>
-   
-   References to unknown element types and notations no longer cause an error. 
-   The element may contain everything, but it must be still well-formed. It may 
-   have arbitrary attributes, and every attribute is treated as an #IMPLIED 
-   CDATA attribute.
-   
--  
-   <?pxp:dtd optional-attribute-declarations elements="x y ..."?>
-   
-   References to unknown attributes inside one of the enumerated elements no 
-   longer cause an error. Such an attribute is treated as an #IMPLIED CDATA 
-   attribute. 
-   If there are several "optional-attribute-declarations" PIs, they are all 
-   interpreted (implicitly merged).
-   
diff --git a/helm/DEVEL/pxp/pxp/doc/EXTENSIONS.xml b/helm/DEVEL/pxp/pxp/doc/EXTENSIONS.xml
deleted file mode 100644 (file)
index e64d061..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE readme SYSTEM "readme.dtd" [
-
-<!ENTITY % common SYSTEM "common.xml">
-%common;
-
-<!-- Special HTML config: -->
-<!ENTITY % readme:html:up '<a href="../..">up</a>'>
-
-<!ENTITY % config SYSTEM "config.xml">
-%config;
-
-]>
-
-<readme title="Extensions of the XML specification">
-
-  <sect1>
-    <title>This document</title>
-    <p>This parser has some options extending the XML specification. Here, the 
-options are explained.
-</p>
-  </sect1>
-
-  <sect1>
-    <title>Optional declarations instead of mandatory declarations</title>
-
-<p>The XML spec demands that elements, notations, and attributes must be
-declared. However, there are sometimes situations where a different rule would
-be better: <em>If</em> there is a declaration, the actual instance of the
-element type, notation reference or attribute must match the pattern of the
-declaration; but if the declaration is missing, a reasonable default declaration
-should be assumed.</p> 
-
-<p>I have an example that seems to be typical: The inclusion of HTML into a
-meta language. Imagine you have defined some type of "generator" or other tool
-working with HTML fragments, and your document contains two types of elements:
-The generating elements (with a name like "gen:xxx"), and the object elements
-which are HTML. As HTML is still evolving, you do not want to declare the HTML
-elements; the HTML fragments should be treated as well-formed XML fragments. In
-contrast to this, the elements of the generator should be declared and
-validated because you can more easily detect errors.</p> 
-
-<p>The following two processing instructions can be included into the DTD:</p>
-    <ul>
-      <li><p><code><![CDATA[<?pxp:dtd optional-element-and-notation-declarations?>]]></code>
-       References to unknown element types and notations no longer cause an
-       error. The element may contain everything, but it must be still
-       well-formed. It may have arbitrary attributes, and every attribute is
-       treated as an #IMPLIED CDATA attribute.</p>
-      </li>
-      <li><p><code><![CDATA[<?pxp:dtd optional-attribute-declarations elements="x y ..."?>]]></code>
-        References to unknown attributes inside one of the enumerated elements
-        no longer cause an error. Such an attribute is treated as an #IMPLIED
-        CDATA attribute.
-</p>
-
-<p>If there are several "optional-attribute-declarations" PIs, they are all
-interpreted (implicitly merged).</p>
-      </li>
-    </ul>
-  </sect1>
-</readme>
diff --git a/helm/DEVEL/pxp/pxp/doc/INSTALL b/helm/DEVEL/pxp/pxp/doc/INSTALL
deleted file mode 100644 (file)
index 9a49a22..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-******************************************************************************
-INSTALL - PXP, the XML parser for O'Caml
-******************************************************************************
-
-
-==============================================================================
-The "pxp" package
-==============================================================================
-
-------------------------------------------------------------------------------
-Prerequisites
-------------------------------------------------------------------------------
-
-PXP requires that the netstring package  [1] is already installed. PXP works 
-only with O'Caml 3.00 (the support for 2.04 has been dropped). The installation 
-procedure defined in the Makefile requires findlib [2] to work [3]. 
-
-------------------------------------------------------------------------------
-Configuration
-------------------------------------------------------------------------------
-
-It is not necessary to configure PXP; but you can switch off the UTF-8 support 
-by setting the variable 
-
-UTF8_SUPPORT = no
-
-in Makefile.conf. In this case, the UTF-8 modules are not even compiled. - By 
-default, the UTF-8 support is enabled. 
-
-Note: Compiling the UTF-8 modules lasts 10 minutes on my 400 Mhz Pentium II; if 
-this is too long, you can set UTF8_SUPPORT to "no".
-
-------------------------------------------------------------------------------
-Compilation
-------------------------------------------------------------------------------
-
-The Makefile defines the following goals: 
-
--  make all
-   compiles with the bytecode compiler and creates the files pxp_types.cma, 
-   pxp_lex_iso88591.cma, pxp_lex_utf8.cma (*), pxp_engine.cma, and pxp_utf8.cmo 
-   (*). The (*) files are not built if the UTF-8 support is switched off.
-   
--  make opt
-   compiles with the native compiler and creates the files pxp_types.cmxa, 
-   pxp_lex_iso88591.cmxa, pxp_lex_utf8.cmxa (*), pxp_engine.cmxa, and 
-   pxp_utf8.cmx (*). The (*) files are not built if the UTF-8 support is 
-   switched off.
-   
-------------------------------------------------------------------------------
-Installation
-------------------------------------------------------------------------------
-
-The Makefile defines the following goals:
-
--  make install
-   installs the bytecode archives, the interface definitions, and if present, 
-   the native archives in the default location of findlib as package "pxp" 
-   
--  make uninstall
-   removes the package "pxp"
-   
--  make markup-install
-   installs the Markup compatibility API as package "markup"
-   
--  make markup-uninstall
-   removes the package "markup"
-   
-------------------------------------------------------------------------------
-Usage with the help of "findlib"
-------------------------------------------------------------------------------
-
-You can refer to the parser as the findlib package "pxp": 
-
-ocamlfind ocamlc -package pxp ...
-
-By default, the UTF-8 support modules will be linked in. If you do not need 
-them, you may define the predicate "pxp_without_utf8", which causes that the 
-UTF-8 relevant parts are not linked with your program; the difference in size 
-is about 1 MB: 
-
-ocamlfind ocamlc -package pxp -predicates pxp_without_utf8 ...
-
-Note that you can also reduce the size of the resulting executable by 
-specifying Netstring-related predicates (e.g. netstring_only_iso); see the 
-documentation of Netstring. 
-
-------------------------------------------------------------------------------
-Linking with the archives directly
-------------------------------------------------------------------------------
-
-If you need UTF-8 support, you must link your program as follows: 
-
-ocamlc ... pxp_types.cma pxp_lex_iso88591.cma pxp_lex_utf8.cma 
-           pxp_engine.cma pxp_utf8.cmo ...
-
-If you do not need UTF-8, the following suffices: 
-
-ocamlc ... pxp_types.cma pxp_lex_iso88591.cma pxp_engine.cma ...
-
-
-
-==============================================================================
-The examples
-==============================================================================
-
-In the "examples" directory you find several applications of PXP. They require 
-that PXP has been installed using findlib. See the Makefiles in the directories 
-for descriptions of "make" goals. 
-
-==============================================================================
-Trouble shooting
-==============================================================================
-
-------------------------------------------------------------------------------
-Solaris
-------------------------------------------------------------------------------
-
-The "make" utility of Solaris does not work properly enough; there is a bug in 
-it that prevents the so-called suffix rules from being recognized. There are 
-two solutions:
-
--  Install GNU make and use it instead of Solaris make. This is the recommended 
-   way to solve the problem, as GNU make can process almost every Makefile from 
-   open source projects, and you will never have problems with building 
-   software again.
-   
--  Add the following lines to Makefile.code: 
-   
-   %.cmx: %.ml
-           $(OCAMLOPT) -c $<
-   
-   %.cmo: %.ml
-           $(OCAMLC) -c $<
-   
-   %.cmi: %.mli
-           $(OCAMLC) -c $<
-   
-   %.ml: %.mll
-           ocamllex $<
-   
-   
-   
-
---------------------------
-
-[1]   see http://www.ocaml-programming.de/packages/documentation/netstring
-
-[2]   see http://www.ocaml-programming.de/packages/documentation/findlib/
-
-[3]   Findlib is a package manager, see the file ABOUT-FINDLIB.
-
-
-
diff --git a/helm/DEVEL/pxp/pxp/doc/INSTALL.xml b/helm/DEVEL/pxp/pxp/doc/INSTALL.xml
deleted file mode 100644 (file)
index ac7832d..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE readme SYSTEM "readme.dtd" [
-
-<!ENTITY % common SYSTEM "common.xml">
-%common;
-
-<!ENTITY m "<em>PXP</em>">
-
-]>
-
-<readme title="INSTALL - PXP, the XML parser for O'Caml">
-  <sect1><title>The "pxp" package</title>
-    <sect2><title>Prerequisites</title>
-      <p>
-&m; requires that the <a href="&url.netstring-project;">netstring package
-</a> is already installed. &m; works
-only with O'Caml 3.00 (the support for 2.04 has been dropped).
-The installation
-procedure defined in the Makefile requires <a
-href="&url.findlib-project;">findlib</a> to work<footnote><em>Findlib</em> is a
-package manager, see the file ABOUT-FINDLIB.</footnote>.
-</p>
-    </sect2>
-
-    <sect2><title>Configuration</title>
-      <p>
-It is not necessary to configure PXP; but you can switch off the UTF-8
-support by setting the variable
-
-<code>
-UTF8_SUPPORT = no
-</code>
-
-in Makefile.conf. In this case, the UTF-8 modules are not even compiled.
-- By default, the UTF-8 support is enabled.
-</p>
-
-      <p>
-Note: Compiling the UTF-8 modules lasts 10 minutes on my 400 Mhz Pentium II;
-if this is too long, you can set UTF8_SUPPORT to "no".</p>
-    </sect2>
-
-    <sect2><title>Compilation</title>
-      <p>
-The Makefile defines the following goals:
-</p>
-      <ul>
-       <li>
-         <p>make all</p>
-         <p>compiles with the bytecode compiler and creates the files
-pxp_types.cma, pxp_lex_iso88591.cma, pxp_lex_utf8.cma (*), pxp_engine.cma,
-and pxp_utf8.cmo (*). The (*) files are not built if the UTF-8 support
-is switched off.</p>
-       </li>
-       <li>
-         <p>make opt</p>
-         <p>compiles with the native compiler and creates  the files
-pxp_types.cmxa, pxp_lex_iso88591.cmxa, pxp_lex_utf8.cmxa (*), pxp_engine.cmxa,
-and pxp_utf8.cmx (*). The (*) files are not built if the UTF-8 support
-is switched off.</p>
-       </li>
-      </ul>
-    </sect2>
-
-    <sect2><title>Installation</title>
-      <p>
-The Makefile defines the following goals:</p>
-      <ul>
-       <li>
-         <p>make install</p>
-         <p>installs the bytecode archives, the interface definitions, and if
-present, the native archives in the default location of <em>findlib</em> as
-package "pxp"
-</p>
-       </li>
-       <li>
-         <p>make uninstall</p>
-         <p>removes the package "pxp"</p>
-       </li>
-       <li>
-         <p>make markup-install</p>
-         <p>installs the Markup compatibility API as package "markup"</p>
-       </li>
-       <li>
-         <p>make markup-uninstall</p>
-         <p>removes the package "markup"</p>
-       </li>
-      </ul>
-    </sect2>
-
-    <sect2>
-      <title>Usage with the help of "findlib"</title>
-      <p>You can refer to the parser as the findlib package "pxp":
-
-<code>
-ocamlfind ocamlc -package pxp ...
-</code>
-
-By default, the UTF-8 support modules will be linked in. If you do not need
-them, you may define the predicate "pxp_without_utf8", which causes that the
-UTF-8 relevant parts are not linked with your program; the difference in size
-is about 1 MB:
-
-<code>
-ocamlfind ocamlc -package pxp -predicates pxp_without_utf8 ...
-</code>
-
-Note that you can also reduce the size of the resulting executable by
-specifying Netstring-related predicates (e.g. netstring_only_iso); see the
-documentation of Netstring.
-</p>
-    </sect2>
-
-    <sect2>
-      <title>Linking with the archives directly</title>
-      <p>If you need UTF-8 support, you must link your program as follows:
-
-<code>
-ocamlc ... pxp_types.cma pxp_lex_iso88591.cma pxp_lex_utf8.cma 
-           pxp_engine.cma pxp_utf8.cmo ...
-</code>
-
-If you do not need UTF-8, the following suffices:
-
-<code>
-ocamlc ... pxp_types.cma pxp_lex_iso88591.cma pxp_engine.cma ...
-</code>
-
-</p>
-    </sect2>
-
-  </sect1>
-
-  <sect1><title>The examples</title>
-    <p>
-In the "examples" directory you find several applications of &m;. They require
-that &m; has been installed using <em>findlib</em>. See the Makefiles in the
-directories for descriptions of "make" goals.
-</p>
-  </sect1>
-
-  <sect1><title>Trouble shooting</title>
-    <sect2><title>Solaris</title>
-      <p>
-The "make" utility of Solaris does not work properly enough; there is a bug
-in it that prevents the so-called suffix rules from being recognized. There
-are two solutions:</p>
-      <ul>
-       <li><p>Install GNU make and use it instead of Solaris make. This is
-the recommended way to solve the problem, as GNU make can process almost
-every Makefile from open source projects, and you will never have problems
-with building software again.</p></li>
-       <li><p>Add the following lines to Makefile.code:
-         <code>
-%.cmx: %.ml
-        $(OCAMLOPT) -c $&lt;
-
-%.cmo: %.ml
-        $(OCAMLC) -c $&lt;
-
-%.cmi: %.mli
-        $(OCAMLC) -c $&lt;
-
-%.ml: %.mll
-        ocamllex $&lt;
-</code>
-</p></li>
-      </ul>
-    </sect2>
-  </sect1>
-</readme>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/Makefile b/helm/DEVEL/pxp/pxp/doc/Makefile
deleted file mode 100644 (file)
index 0ed1274..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-.PHONY: all
-all: README INSTALL ABOUT-FINDLIB SPEC PRERELEASE EXTENSIONS
-
-README: README.xml common.xml config.xml
-       readme -text README.xml >README
-
-INSTALL: INSTALL.xml common.xml config.xml
-       readme -text INSTALL.xml >INSTALL
-
-ABOUT-FINDLIB: ABOUT-FINDLIB.xml common.xml config.xml
-       readme -text ABOUT-FINDLIB.xml >ABOUT-FINDLIB
-
-SPEC: SPEC.xml common.xml config.xml
-       readme -text SPEC.xml >SPEC
-
-EXTENSIONS: EXTENSIONS.xml common.xml config.xml
-       readme -text EXTENSIONS.xml >EXTENSIONS
-
-PRERELEASE: PRERELEASE.xml common.xml config.xml
-       readme -text PRERELEASE.xml >PRERELEASE
-
-config.xml:
-       touch config.xml
-
-common.xml:
-       ln -s dist-common.xml common.xml 
-
-.PHONY: clean
-clean:
-
-.PHONY: CLEAN
-CLEAN: clean
-       $(MAKE) -C manual CLEAN
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~
-       $(MAKE) -C manual distclean
-
-.PHONY: symlinks
-symlinks:
-       ln -s ../examples/readme/readme.dtd .
-
diff --git a/helm/DEVEL/pxp/pxp/doc/PRERELEASE b/helm/DEVEL/pxp/pxp/doc/PRERELEASE
deleted file mode 100644 (file)
index bc46cd0..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-******************************************************************************
-README - PXP, the XML parser for O'Caml
-******************************************************************************
-
-
-==============================================================================
-Pre-release of PXP, the XML parser for O'Caml
-==============================================================================
-
-PXP is the new, completely revised and partly rewritten validating XML parser 
-for O'Caml; the old name, "Markup", has been dropped. The current version of 
-PXP is still a bit experimental because it is not fully tested; however, it is 
-now stable enough to be used in experimental applications. 
-
-PXP will retain most parts of Markup's API; the name PXP emphasizes the 
-strengths of the API: it is the Polymorphic XML Parser. The document objects 
-representing the parsed file have an interesting polymorphism which allows that 
-the user of the parser can control which kind of objects are actually created. 
-The current API supports the element type as criterion for object/class 
-selection; future APIs will extend this concept such that arbitrary criterions 
-are possible (e.g. you may want to have different classes for different 
-namespaces). 
-
-The current development goals of PXP are:
-
--  Full XML-1.0 conformance: The current pre-release is now very close to 
-   strict XML-1.0 conformance. The only bigger difference to the standard is 
-   that PXP sometimes accepts DTDs as legal while the standard forbids them 
-   (non-deterministic content models).
-   One of the more important improvements since 0.2.10 is the possibility to 
-   represent XML documents internally as UTF-8 strings, not only as ISO-8859-1 
-   strings. Thanks to Claudio Sacerdoti Coen who contributed a special lexer 
-   preprocessor hiding the details of the UTF-8 encoding in the lexer 
-   definitions. 
-   
--  Correctness of validation: The well-formedness and valididity constraints 
-   must be implemented as correct as possible. The last stable release had 
-   already a regression test covering many aspects of XML. The test suite will 
-   be extended.
-   
--  Parsing performance: It should be possible to process large amounts of data 
-   in a reasoable period of time. The last stable release had many stages of 
-   processing that wasted time.
-   The current pre-release is already 30 per cent faster than 0.2.10.
-   
--  Simplicity of usage: Unlike parsers basing on imperative languages and DOM, 
-   the usage of PXP should be simple, even for complex tasks. The current 
-   parser API has already many advantages over DOM; especially it is well 
-   integrated into the functional and object-oriented language O'Caml. You do 
-   not have to deal with artificial representations like "node lists" while the 
-   programming environment already provides good support for list structures. 
-   The fact that O'Caml allows a functional programming style is interesting 
-   for programs transforming XML trees.
-   
-==============================================================================
-Download the PXP pre-release
-==============================================================================
-
-The current pre-release is available under 
-http://www.ocaml-programming.de/packages/pxp-pre-0.99.8.tar.gz [1]. There is 
-currently no documentation for this version of the software; it is recommended 
-to use the Markup manual [2] and compare it with the current module interfaces.
-
-Please note that this is work in progress; it may still contain bugs and 
-irregularities.
-
-The parser works only with OCaml-3. The parser needs the netstring package [3], 
-at least version 0.9.1. 
-
-I am very interested in your opinion to PXP; please contact me [4].
-
-==============================================================================
-Author, Credits, Copying
-==============================================================================
-
-PXP has been written by Gerd Stolpmann [5]; it contains contributions by 
-Claudio Sacerdoti Coen. You may copy it as you like, you may use it even for 
-commercial purposes as long as the license conditions are respected, see the 
-file LICENSE coming with the distribution. It allows almost everything. 
-
-==============================================================================
-Where to find the stable release
-==============================================================================
-
-Here. [6]
-
-
---------------------------
-
-[1]   see http://www.ocaml-programming.de/packages/pxp-pre-0.99.8.tar.gz
-
-[2]   see http://www.ocaml-programming.de/packages/documentation/markup/manual
-
-[3]   see http://www.ocaml-programming.de/packages/documentation/netstring
-
-[4]   see mailto:gerd@gerd-stolpmann.de
-
-[5]   see mailto:gerd@gerd-stolpmann.de
-
-[6]   see http://www.ocaml-programming.de/packages/documentation/markup
-
-
-
diff --git a/helm/DEVEL/pxp/pxp/doc/PRERELEASE.xml b/helm/DEVEL/pxp/pxp/doc/PRERELEASE.xml
deleted file mode 100644 (file)
index f155abd..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE readme SYSTEM "readme.dtd" [
-
-<!ENTITY % common SYSTEM "common.xml">
-%common;
-
-<!-- Special HTML config: -->
-<!ENTITY % readme:html:up '<a href="../..">up</a>'>
-
-<!ENTITY % config SYSTEM "config.xml">
-%config;
-
-]>
-
-<readme title="README - PXP, the XML parser for O'Caml">
-  <sect1>
-    <title>Pre-release of PXP, the XML parser for O'Caml</title>
-
-    <p>PXP is the new, completely revised and partly rewritten 
-validating XML parser
-for O'Caml; the old name, "Markup", has been dropped. The current version
-of PXP is still a bit experimental because it is not fully tested; however,
-it is now stable enough to be used in experimental applications.
-</p>
-
-    <p>PXP will retain most parts of Markup's API; the name PXP 
-emphasizes the strengths of the API: it is the Polymorphic XML Parser.
-The document objects representing the parsed file have an interesting
-polymorphism which allows that the user of the parser can control
-which kind of objects are actually created. The current API supports
-the element type as criterion for object/class selection; future APIs will
-extend this concept such that arbitrary criterions are possible
-(e.g. you may want to have different classes for different namespaces).
-</p>
-
-    <p>The current development goals of PXP are:</p>
-
-    <ul>
-      <li><p><em>Full XML-1.0 conformance:</em> The current pre-release
-is now very close to strict XML-1.0 conformance. The only bigger 
-difference to the standard is that PXP sometimes accepts DTDs as legal
-while the standard forbids them (non-deterministic content models).</p>
-
-<p>One of the more important improvements since 0.2.10 is the possibility to
-represent XML documents internally as UTF-8 strings, not only as ISO-8859-1
-strings. Thanks to Claudio Sacerdoti Coen who contributed a special lexer
-preprocessor hiding the details of the UTF-8 encoding in the lexer definitions.
-</p>
-      </li>
-
-      <li><p><em>Correctness of validation:</em> The well-formedness
-and valididity constraints must be implemented as correct as possible.
-The last stable release had already a regression test covering many
-aspects of XML. The test suite will be extended.</p>
-      </li>
-
-      <li><p><em>Parsing performance:</em> It should be possible to
-process large amounts of data in a reasoable period of time. The last
-stable release had many stages of processing that wasted time.</p>
-
-       <p>The current pre-release is already 30 per cent faster than
-0.2.10.</p>
-      </li>
-
-      <li><p><em>Simplicity of usage:</em> Unlike parsers basing on
-imperative languages and DOM, the usage of PXP should be simple, even
-for complex tasks. The current parser API has already many advantages
-over DOM; especially it is well integrated into the functional and
-object-oriented language O'Caml. You do not have to deal with
-artificial representations like "node lists" while the programming
-environment already provides good support for list structures. The
-fact that O'Caml allows a functional programming style is interesting
-for programs transforming XML trees.</p>
-      </li>
-    </ul>
-  </sect1>
-
-  <sect1>
-    <title>Download the PXP pre-release</title>
-
-    <p>The current pre-release is available under 
-<a href="&url.gps-ocaml-download;/pxp-pre-0.99.8.tar.gz">
-&url.gps-ocaml-download;/pxp-pre-0.99.8.tar.gz</a>. There is currently no
-documentation for this version of the software; it is recommended to use the <a
-href="&url.markup-manual;">Markup manual</a> and compare it with the current
-module interfaces.</p>
-
-    <p>Please note that this is work in progress; it may still contain bugs
-and irregularities.</p>
-
-    <p>The parser works only with OCaml-3. The parser needs the <a
-href="&url.netstring-project;">netstring package</a>, at least version 0.9.1.
-</p>
-
-    <p>I am very interested in your opinion to PXP; please <a
-href="mailto:&person.gps.mail;">contact me</a>.</p>
-  </sect1>
-
-  <sect1>
-    <title>Author, Credits, Copying</title>
-    <p>
-<em>PXP</em> has been written by &person.gps;; it contains contributions by
-Claudio Sacerdoti Coen. You may copy it as you like,
-you may use it even for commercial purposes as long as the license conditions
-are respected, see the file LICENSE coming with the distribution. It allows
-almost everything. 
-</p>
-  </sect1>
-
-  <sect1>
-    <title>Where to find the stable release</title>
-    <p><a href="&url.markup-project;">Here.</a></p>
-  </sect1>
-
-</readme>
-
diff --git a/helm/DEVEL/pxp/pxp/doc/README b/helm/DEVEL/pxp/pxp/doc/README
deleted file mode 100644 (file)
index b7ad5de..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-******************************************************************************
-README - PXP, the XML parser for O'Caml
-******************************************************************************
-
-
-==============================================================================
-Abstract
-==============================================================================
-
-PXP is a validating parser for XML-1.0 which has been written entirely in 
-Objective Caml. 
-
-PXP is the new name of the parser formerly known as "Markup". PXP means 
-"Polymorphic XML parser" and emphasizes its most useful property: that the API 
-is polymorphic and can be configured such that different objects are used to 
-store different types of elements.
-
-==============================================================================
-Download
-==============================================================================
-
-You can download PXP as gzip'ed tarball [1]. The parser needs the Netstring [2] 
-package (0.9.3). Note that PXP requires O'Caml 3.00. 
-
-==============================================================================
-User's Manual
-==============================================================================
-
-The manual is included in the distribution both as Postscript document and 
-bunch of HTML files. An online version can be found here [3]. 
-
-==============================================================================
-Author, Credits, Copying
-==============================================================================
-
-PXP has been written by Gerd Stolpmann [4]; it contains contributions by 
-Claudio Sacerdoti Coen. You may copy it as you like, you may use it even for 
-commercial purposes as long as the license conditions are respected, see the 
-file LICENSE coming with the distribution. It allows almost everything. 
-
-Thanks also to Alain Frisch and Haruo Hosoya for discussions and bug reports.
-
-==============================================================================
-Description
-==============================================================================
-
-PXP is a validating XML parser for O'Caml [5]. It strictly complies to the 
-XML-1.0 [6] standard. 
-
-The parser is simple to call, usually only one statement (function call) is 
-sufficient to parse an XML document and to represent it as object tree.
-
-Once the document is parsed, it can be accessed using a class interface. The 
-interface allows arbitrary access including transformations. One of the 
-features of the document representation is its polymorphic nature; it is simple 
-to add custom methods to the document classes. Furthermore, the parser can be 
-configured such that different XML elements are represented by objects created 
-from different classes. This is a very powerful feature, because it simplifies 
-the structure of programs processing XML documents. 
-
-Note that the class interface does not comply to the DOM standard. It was not a 
-development goal to realize a standard API (industrial developers can this much 
-better than I); however, the API is powerful enough to be considered as 
-equivalent with DOM. More important, the interface is compatible with the XML 
-information model required by many XML-related standards. 
-
-------------------------------------------------------------------------------
-Detailed feature list
-------------------------------------------------------------------------------
-
--  The XML instance is validated against the DTD; any violation of a validation 
-   constraint leads to the rejection of the instance. The validator has been 
-   carefully implemented, and conforms strictly to the standard. If needed, it 
-   is also possible to run the parser in a well-formedness mode.
-   
--  If possible, the validator applies a deterministic finite automaton to 
-   validate the content models. This ensures that validation can always be 
-   performed in linear time. However, in the case that the content models are 
-   not deterministic, the parser uses a backtracking algorithm which can be 
-   much slower. - It is also possible to reject non-deterministic content 
-   models.
-   
--  In particular, the validator also checks the complicated rules whether 
-   parentheses are properly nested with respect to entities, and whether the 
-   standalone declaration is satisfied. On demand, it is checked whether the 
-   IDREF attributes only refer to existing nodes.
-   
--  Entity references are automatically resolved while the XML text is being 
-   scanned. It is not possible to recognize in the object tree where a 
-   referenced entity begins or ends; the object tree only represents the 
-   logical structure.
-   
--  External entities are loaded using a configurable resolver infrastructure. 
-   It is possible to connect the parser with an arbitrary XML source.
-   
--  The parser can read XML text encoded in a variety of character sets. 
-   Independent of this, it is possible to choose the encoding of the internal 
-   representation of the tree nodes; the parser automatically converts the 
-   input text to this encoding. Currently, the parser supports UTF-8 and 
-   ISO-8859-1 as internal encodings.
-   
--  The interface of the parser has been designed such that it is best 
-   integrated into the language O'Caml. The first goal was simplicity of usage 
-   which is achieved by many convenience methods and functions, and by allowing 
-   the user to select which parts of the XML text are actually represented in 
-   the tree. For example, it is possible to store processing instructions as 
-   tree nodes, but the parser can also be configured such that these 
-   instructions are put into hashtables. The information model is compatible 
-   with the requirements of XML-related standards such as XPath.
-   
--  In particular, the node tree can optionally contain or leave out processing 
-   instructions and comments. It is also possible to generate a "super root" 
-   object which is the parent of the root element. The attributes of elements 
-   are normally not stored as nodes, but it is possible to get them wrapped 
-   into nodes.
-   
--  There is also an interface for DTDs; you can parse and access sequences of 
-   declarations. The declarations are fully represented as recursive O'Caml 
-   values. 
-   
-------------------------------------------------------------------------------
-Code examples
-------------------------------------------------------------------------------
-
-This distribution contains several examples:
-
--  validate: simply parses a document and prints all error messages 
-   
--  readme: Defines a DTD for simple "README"-like documents, and offers 
-   conversion to HTML and text files [7]. 
-   
--  xmlforms: This is already a sophisticated application that uses XML as style 
-   sheet language and data storage format. It shows how a Tk user interface can 
-   be configured by an XML style, and how data records can be stored using XML. 
-   
-------------------------------------------------------------------------------
-Restrictions and missing features
-------------------------------------------------------------------------------
-
-The following restrictions apply that are not violations of the standard: 
-
--  The attributes "xml:space", and "xml:lang" are not supported specially. (The 
-   application can do this.)
-   
--  The built-in support for SYSTEM and PUBLIC identifiers is limited to local 
-   file access. There is no support for catalogs. The parser offers a hook to 
-   add missing features.
-   
--  It is currently not possible to check for interoperatibility with SGML. 
-   
-The following features are also missing:
-
--  There is no special support for namespaces. (Perhaps in the next release?)
-   
--  There is no support for XPATH or XSLT.
-   
-However, I hope that these features will be implemented soon, either by myself 
-or by contributors (who are invited to do so).
-
-------------------------------------------------------------------------------
-Recent Changes
-------------------------------------------------------------------------------
-
--  Changed in 1.0:
-   Support for document order.
-   
--  Changed in 0.99.8:
-   Several fixes of bugs reported by Haruo Hosoya and Alain Frisch.
-   The class type "node" has been extended: you can go directly to the next and 
-   previous nodes in the list; you can refer to nodes by position.
-   There are now some iterators for nodes: find, find_all, find_element, 
-   find_all_elements, map_tree, iter_tree.
-   Experimental support for viewing attributes as nodes; I hope that helps 
-   Alain writing his XPath evaluator.
-   The user's manual has been revised and is almost up to date.
-   
--  Changed in 0.99.7:
-   There are now additional node types T_super_root, T_pinstr and T_comment, 
-   and the parser is able to create the corresponding nodes.
-   The functions for character set conversion have been moved to the Netstring 
-   package; they are not specific for XML.
-   
--  Changed in 0.99.6:
-   Implemented a check on deterministic content models. Added an alternate 
-   validator basing on a DFA. - This means that now all mandatory features for 
-   an XML-1.0 parser are implemented! The parser is now substantially complete.
-   
--  Changed in 0.99.5:
-   The handling of ID and IDREF attributes has changed. The index of nodes 
-   containing an ID attribute is now separated from the document. Optionally 
-   the parser now checks whether the IDREF attributes refer to existing 
-   elements.
-   The element nodes can optionally store the location in the source XML code.
-   The method 'write' writes the XML tree in every supported encoding. 
-   (Successor of 'write_compact_as_latin1'.)
-   Several smaller changes and fixes.
-   
--  Changed in 0.99.4:
-   The module Pxp_reader has been modernized. The resolver classes are simpler 
-   to use. There is now support for URLs.
-   The interface of Pxp_yacc has been improved: The type 'source' is now 
-   simpler. The type 'domspec' has gone; the new 'spec' is opaque and performs 
-   better. There are some new parsing modes.
-   Many smaller changes.
-   
--  Changed in 0.99.3:
-   The markup_* modules have been renamed to pxp_*. There is a new 
-   compatibility API that tries to be compatible with markup-0.2.10.
-   The type "encoding" is now a polymorphic variant.
-   
--  Changed in 0.99.2:
-   Added checks for the constraints about the standalone declaration.
-   Added regression tests about attribute normalization, attribute checks, 
-   standalone checks.
-   Fixed some minor errors of the attribute normalization function.
-   The bytecode/native archives are now separated in a general part, in a 
-   ISO-8859-1-relevant part, and a UTF-8-relevant part. The parser can again be 
-   compiled with ocamlopt.
-   
--  Changed in 0.99.1:
-   In general, this release is an early pre-release of the next stable version 
-   1.00. I do not recommend to use it for serious work; it is still very 
-   experimental!
-   The core of the parser has been rewritten using a self-written parser 
-   generator.
-   The lexer has been restructured, and can now handle UTF-8 encoded files.
-   Numerous other changes.
-   
-
---------------------------
-
-[1]   see http://www.ocaml-programming.de/packages/pxp-1.0.tar.gz
-
-[2]   see http://www.ocaml-programming.de/packages/documentation/netstring
-
-[3]   see http://www.ocaml-programming.de/packages/documentation/pxp/manual
-
-[4]   see mailto:gerd@gerd-stolpmann.de
-
-[5]   see http://caml.inria.fr/
-
-[6]   see http://www.w3.org/TR/1998/REC-xml-19980210.html
-
-[7]   This particular document is an example of this DTD!
-
-
-
diff --git a/helm/DEVEL/pxp/pxp/doc/README.xml b/helm/DEVEL/pxp/pxp/doc/README.xml
deleted file mode 100644 (file)
index 34c7726..0000000
+++ /dev/null
@@ -1,423 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE readme SYSTEM "readme.dtd" [
-
-<!--
-<!ENTITY url.ocaml           "http://caml.inria.fr/">
-<!ENTITY url.xml-spec        "http://www.w3.org/TR/1998/REC-xml-19980210.html">
-<!ENTITY url.jclark-xmltdata "ftp://ftp.jclark.com/pub/xml/xmltest.zip">
-<!ENTITY url.gps-ocaml-download "http://people.darmstadt.netsurf.de/ocaml">
-<!ENTITY url.markup-download    "&url.gps-ocaml-download;/markup-0.1.tar.gz">
-<!ENTITY person.gps             '<a
-  href="mailto:Gerd.Stolpmann@darmstadt.netsurf.de">Gerd Stolpmann</a>'>
--->
-
-<!ENTITY % common SYSTEM "common.xml">
-%common;
-
-<!-- Special HTML config: -->
-<!ENTITY % readme:html:up '<a href="../..">up</a>'>
-
-<!ENTITY % config SYSTEM "config.xml">
-%config;
-
-]>
-
-<readme title="README - PXP, the XML parser for O'Caml">
-  <sect1>
-    <title>Abstract</title>
-    <p>
-<em>PXP</em> is a validating parser for XML-1.0 which has been written
-entirely in Objective Caml.
-</p>
-
-    <p>PXP is the new name of the parser formerly known as "Markup". 
-PXP means "Polymorphic XML parser" and emphasizes its most useful
-property: that the API is polymorphic and can be configured such that
-different objects are used to store different types of elements.</p>
-  </sect1>
-
-  <sect1>
-    <title>Download</title>
-    <p>
-You can download <em>PXP</em> as gzip'ed <a
-href="&url.pxp-download;">tarball</a>. The parser needs the <a
-href="&url.netstring-project;">Netstring</a> package (0.9.3). Note that PXP
-requires O'Caml 3.00.
-</p>
-  </sect1>
-
-  <sect1>
-    <title>User's Manual</title>
-    <p>
-The manual is included in the distribution both as Postscript document and
-bunch of HTML files. An online version can be found <a
-                                                      href="&url.pxp-manual;">here</a>.
-</p>
-  </sect1>
-
-  <sect1>
-    <title>Author, Credits, Copying</title>
-    <p>
-<em>PXP</em> has been written by &person.gps;; it contains contributions by
-Claudio Sacerdoti Coen. You may copy it as you like,
-you may use it even for commercial purposes as long as the license conditions
-are respected, see the file LICENSE coming with the distribution. It allows
-almost everything. 
-</p>
-
-    <p>Thanks also to Alain Frisch and Haruo Hosoya for discussions and bug
-reports.</p>
-  </sect1>
-
-  <sect1>
-    <title>Description</title>
-    <p>
-<em>PXP</em> is a validating XML parser for <a
-href="&url.ocaml;">O'Caml</a>. It strictly complies to the 
-<a href="&url.xml-spec;">XML-1.0</a> standard.
-</p>
-
-    <p>The parser is simple to call, usually only one statement (function
-call) is sufficient to parse an XML document and to represent it as object
-tree.</p>
-
-    <p>
-Once the document is parsed, it can be accessed using a class interface.
-The interface allows arbitrary access including transformations. One of
-the features of the document representation is its polymorphic nature;
-it is simple to add custom methods to the document classes. Furthermore,
-the parser can be configured such that different XML elements are represented
-by objects created from different classes. This is a very powerful feature,
-because it simplifies the structure of programs processing XML documents.
-</p>
-
-    <p>
-Note that the class interface does not comply to the DOM standard. It was not a
-development goal to realize a standard API (industrial developers can this much
-better than I); however, the API is powerful enough to be considered as
-equivalent with DOM. More important, the interface is compatible with the
-XML information model required by many XML-related standards.
-</p>
-
-    <sect2>
-      <title>Detailed feature list</title>
-
-      <ul>
-       <li><p>The XML instance is validated against the DTD; any violation of
-a validation constraint leads to the rejection of the instance. The validator
-has been carefully implemented, and conforms strictly to the standard. If
-needed, it is also possible to run the parser in a well-formedness mode.</p>
-       </li>
-       <li><p>If possible, the validator applies a deterministic finite
-automaton to validate the content models. This ensures that validation can
-always be performed in linear time. However, in the case that the content
-models are not deterministic, the parser uses a backtracking algorithm which
-can be much slower. - It is also possible to reject non-deterministic content
-models.</p>
-       </li>
-       <li><p>In particular, the validator also checks the complicated rules
-whether parentheses are properly nested with respect to entities, and whether
-the standalone declaration is satisfied. On demand, it is checked whether the
-IDREF attributes only refer to existing nodes.</p>
-       </li>
-       <li><p>Entity references are automatically resolved while the XML text
-is being scanned. It is not possible to recognize in the object tree where a
-referenced entity begins or ends; the object tree only represents the logical structure.</p>
-       </li>
-       <li><p>External entities are loaded using a configurable resolver
-infrastructure. It is possible to connect the parser with an arbitrary XML source.</p>
-       </li>
-       <li><p>The parser can read XML text encoded in a variety of character
-sets. Independent of this, it is possible to choose the encoding of the
-internal representation of the tree nodes; the parser automatically converts
-the input text to this encoding. Currently, the parser supports UTF-8 and
-ISO-8859-1 as internal encodings.</p>
-       </li>
-       <li><p>The interface of the parser has been designed such that it is
-best integrated into the language O'Caml. The first goal was simplicity of
-usage which is achieved by many convenience methods and functions, and by
-allowing the user to select which parts of the XML text are actually
-represented in the tree. For example, it is possible to store processing
-instructions as tree nodes, but the parser can also be configured such that
-these instructions are put into hashtables. The information model is compatible
-with the requirements of XML-related standards such as XPath.</p>
-       </li>
-       <li><p>In particular, the node tree can optionally contain or leave out
-processing instructions and comments. It is also possible to generate a "super
-root" object which is the parent of the root element. The attributes of
-elements are normally not stored as nodes, but it is possible to get them
-wrapped into nodes.</p>
-       </li>
-       <li><p>There is also an interface for DTDs; you can parse and access
-sequences of declarations. The declarations are fully represented as recursive
-O'Caml values.
-</p>
-       </li>
-      </ul>
-    </sect2>
-
-
-    <sect2>
-      <title>Code examples</title>
-      <p>
-This distribution contains several examples:</p>
-      <ul>
-       <li><p>
-<em>validate:</em> simply parses a
-document and prints all error messages
-</p></li>
-
-       <li><p>
-<em>readme:</em> Defines a DTD for simple "README"-like documents, and offers
-conversion to HTML and text files<footnote>This particular document is an
-example of this DTD!</footnote>.
-</p></li>
-
-       <li><p>
-<em>xmlforms:</em> This is already a
-sophisticated application that uses XML as style sheet language and data
-storage format. It shows how a Tk user interface can be configured by an
-XML style, and how data records can be stored using XML.
-</p></li>
-      </ul>
-    </sect2>
-
-    <sect2>
-      <title>Restrictions and missing features</title>
-      <p>
-The following restrictions apply that are not violations of the standard:
-</p>
-      <ul>
-       <li><p>
-The attributes "xml:space", and "xml:lang" are not supported specially.
-  (The application can do this.)</p></li>
-
-       <li><p>
-The built-in support for SYSTEM and PUBLIC identifiers is limited to
-  local file access. There is no support for catalogs. The parser offers
-  a hook to add missing features.</p></li>
-
-       <li><p>
-It is currently not possible to check for interoperatibility with SGML.
-</p></li>
-      </ul>
-
-<p>The following features are also missing:</p>
-      <ul>
-       <li><p>There is no special support for namespaces. (Perhaps in the next release?)</p>
-       </li>
-       <li><p>There is no support for XPATH or XSLT.</p>
-       </li>
-      </ul>
-<p>However, I hope that these features will be implemented soon, either by
-myself or by contributors (who are invited to do so).</p>
-    </sect2>
-
-    <sect2>
-      <title>Recent Changes</title>
-      <ul>
-       <li>
-         <p>Changed in 1.0:</p>
-         <p>Support for document order.</p>
-       </li>
-       <li>
-         <p>Changed in 0.99.8:</p>
-         <p>Several fixes of bugs reported by Haruo Hosoya and Alain
-Frisch.</p>
-         <p>The class type "node" has been extended: you can go directly to
-the next and previous nodes in the list; you can refer to nodes by
-position.</p>
-         <p>There are now some iterators for nodes: find, find_all,
-find_element, find_all_elements, map_tree, iter_tree.</p>
-         <p>Experimental support for viewing attributes as nodes; I hope that
-helps Alain writing his XPath evaluator.</p>
-         <p>The user's manual has been revised and is almost up to date.</p>
-       </li>
-       <li>
-         <p>Changed in 0.99.7:</p>
-         <p>There are now additional node types T_super_root, T_pinstr and
-T_comment, and the parser is able to create the corresponding nodes.</p>
-         <p>The functions for character set conversion have been moved to
-the Netstring package; they are not specific for XML.</p>
-       </li>
-       <li>
-         <p>Changed in 0.99.6:</p>
-         <p>Implemented a check on deterministic content models. Added
-an alternate validator basing on a DFA. - This means that now all mandatory
-features for an XML-1.0 parser are implemented! The parser is now substantially
-complete.</p>
-       </li>
-       <li>
-         <p>Changed in 0.99.5:</p>
-         <p>The handling of ID and IDREF attributes has changed. The
-index of nodes containing an ID attribute is now separated from the document.
-Optionally the parser now checks whether the IDREF attributes refer to
-existing elements.</p>
-         <p>The element nodes can optionally store the location in the
-source XML code.</p>
-         <p>The method 'write' writes the XML tree in every supported
-encoding. (Successor of 'write_compact_as_latin1'.)</p>
-         <p>Several smaller changes and fixes.</p>
-       </li>
-       <li>
-         <p>Changed in 0.99.4:</p>
-         <p>The module Pxp_reader has been modernized. The resolver classes
-are simpler to use. There is now support for URLs.</p>
-         <p>The interface of Pxp_yacc has been improved: The type 'source'
-is now simpler. The type 'domspec' has gone; the new 'spec' is opaque and
-performs better. There are some new parsing modes.</p>
-         <p>Many smaller changes.</p>
-       </li>
-       <li>
-         <p>Changed in 0.99.3:</p>
-         <p>The markup_* modules have been renamed to pxp_*. There is a new
-compatibility API that tries to be compatible with markup-0.2.10.</p>
-         <p>The type "encoding" is now a polymorphic variant.</p>
-       </li>
-        <li>
-         <p>Changed in 0.99.2:</p>
-         <p>Added checks for the constraints about the standalone
-declaration.</p>
-         <p>Added regression tests about attribute normalization, 
-attribute checks, standalone checks.</p>
-         <p>Fixed some minor errors of the attribute normalization
-function.</p>
-         <p>The bytecode/native archives are now separated in
-a general part, in a ISO-8859-1-relevant part, and a UTF-8-relevant
-part. The parser can again be compiled with ocamlopt.</p>
-       </li>
-        <li>
-         <p>Changed in 0.99.1:</p>
-         <p>In general, this release is an early pre-release of the
-next stable version 1.00. I do not recommend to use it for serious
-work; it is still very experimental!</p>
-         <p>The core of the parser has been rewritten using a self-written
-parser generator.</p>
-         <p>The lexer has been restructured, and can now handle UTF-8
-encoded files.</p>
-         <p>Numerous other changes.</p>
-       </li>
-
-<!--
-       <li>
-         <p>Changed in 0.2.10:</p>
-         <p>Bugfix: in the "allow_undeclared_attributes" feature.</p>
-         <p>Bugfix: in the methods write_compact_as_latin1.</p>
-         <p>Improvement: The code produced by the codewriter module can be
-faster compiled and with less memory usage.</p>
-       </li>
-
-       <li>
-         <p>Changed in 0.2.9:</p>
-         <p>New: The module Markup_codewriter generates for a given XML
-tree O'Caml code that creates the same XML tree. This is useful for
-applications which use large, constant XML trees.</p>
-         <p>New: Documents and DTDs have a method write_compact_as_latin1
-that writes an XML tree to a buffer or to a channel. (But it is not a pretty
-printer...)</p>
-         <p>Enhancement: If a DTD contains the processing instruction
-<code>
-&lt;?xml:allow_undeclared_attributes x?&gt;</code> 
-where "x" is the name of an already declared element it is allowed that
-instances of this element type have attributes that have not been declared.
-</p>
-         <p>New function Markup_types.string_of_exn that converts an
-exception from Markup into a readable string.</p>
-         <p>Change: The module Markup_reader contains all resolvers.
-The resolver API is now stable.</p>
-         <p>New parser modes processing_instructions_inline and
-virtual_root that help locating processing instructions exactly (if needed).
-</p>
-         <p>Many bugs regarding CRLF handling have been fixed.</p>
-         <p>The distributed tarball contains now the regression test suite.
-</p>
-         <p>The manual has been extended (but it is still incomplete and
-still behind the code).</p>
-       </li>
-       <li>
-         <p>Changed in 0.2.8:</p>
-         <p>A bit more documentation (Markup_yacc).</p>
-         <p>Bugfix: In previous versions, the second trial to refer to
-an entity caused a Bad_character_stream exception. The reason was improper
-re-initialization of the resolver object.</p>
-       </li>
-       <li>
-         <p>Changed in 0.2.7:</p>
-         <p>Added some methods in Markup_document.</p>
-         <p>Bugfix: in method orphaned_clone</p>
-       </li>
-       <li>
-         <p>Changed in 0.2.6:</p>
-         <p>Enhancement: The config parameter has a new component
-"errors_with_line_numbers". If "true", error exceptions come with line numbers 
-(the default; and the only option in the previous versions); if "false"
-the line numbers are left out (only character positions). The parser is 10 to
-20 percent faster if the lines are not tracked.</p>
-         <p>Enhancement: If a DTD contains the processing instruction
-<code>
-&lt;?xml:allow_undeclared_elements_and_notations?&gt;</code> 
-it is allowed that
-elements and notations are undeclared. However, the elements for which
-declarations exist are still validated. The main effect is that the
-keyword ALL in element declarations means that also undeclared elements
-are permitted at this location.</p>
-         <p>Bugfix in method "set_nodes" of class Markup_document.node_impl.
-</p>
-       </li>
-       <li>
-         <p>Changed in 0.2.5:</p>
-         <p>If the XML source is a string (i.e. Latin1 some_string is passed
-to the parser functions as source), resolving did not work properly in 
-previous releases. This is now fixed.
-</p>
-       </li>
-       <li>
-         <p>Changed in 0.2.4:</p>
-         <p>A problem with some kind of DTD that does not specify the name
-of the root element was fixed. As a result, the "xmlforms" application works
-again. Again thanks to Haruo.</p>
-         <p>Due to the XML specs it is forbidden that parameter entities are
-referenced within the internal subset if the referenced text is not a 
-complete declaration itself. This is checked, but the check was too hard;
-even in external entities referenced from the internal subset this rule
-was enforced. This has been corrected; in external entities it is now possible
-to use parameter entities in an unrestricted way.
-</p>
-       </li>
-       <li>
-         <p>Changed in 0.2.3:</p>
-         <p>A fix for a problem when installing Markup on Solaris. 
-Haruo detected the problem.</p>
-       </li>
-       <li>
-         <p>Changed in 0.2.2:</p>
-         <p>A single bugfix: The parser did not reject documents where the
-root element was not the element declared as root element. Again thanks
-to Claudio.</p>
-       </li>
-       <li>
-         <p>Changed in 0.2.1:</p>
-         <p>A single bugfix which reduces the number of warnings. Thanks
-to Claudio for detecting the bug.</p>
-       </li>
-       <li>
-         <p>Changed in 0.2:</p>
-         <p>
-Much more constraints are checked in the 0.2 release than in 0.1. Especially
-that entities are properly nested is now guaranteed; parsed entities now always
-match the corresponding production of the grammar.</p>
-         <p>
-Many weak checks have been turned into strong checks. For example, it is now
-detected if the "version", "encoding", and "standalone" attributes of an XML
-declaration are ordered in the right way.
-</p>
-         <p>
-The error messages have been improved. 
-</p>
-       </li>
--->
-      </ul>
-    </sect2>
-  </sect1>
-</readme>
-
diff --git a/helm/DEVEL/pxp/pxp/doc/SPEC b/helm/DEVEL/pxp/pxp/doc/SPEC
deleted file mode 100644 (file)
index 28e6914..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-******************************************************************************
-Notes on the XML specification
-******************************************************************************
-
-
-==============================================================================
-This document
-==============================================================================
-
-There are some points in the XML specification which are ambiguous. The 
-following notes discuss these points, and describe how this parser behaves.
-
-==============================================================================
-Conditional sections and the token ]]>
-==============================================================================
-
-It is unclear what happens if an ignored section contains the token ]]> at 
-places where it is normally allowed, i.e. within string literals and comments, 
-e.g. 
-
-<![IGNORE[ <!-- ]]> --> ]]>
-
-On the one hand, the production rule of the XML grammar does not treat such 
-tokens specially. Following the grammar, already the first ]]> ends the 
-conditional section 
-
-<![IGNORE[ <!-- ]]>
-
-and the other tokens are included into the DTD.
-
-On the other hand, we can read: "Like the internal and external DTD subsets, a 
-conditional section may contain one or more complete declarations, comments, 
-processing instructions, or nested conditional sections, intermingled with 
-white space" (XML 1.0 spec, section 3.4). Complete declarations and comments 
-may contain ]]>, so this is contradictory to the grammar.
-
-The intention of conditional sections is to include or exclude the section 
-depending on the current replacement text of a parameter entity. Almost always 
-such sections are used as in 
-
-<!ENTITY % want.a.feature.or.not "INCLUDE">   (or "IGNORE")
-<![ %want.a.feature.or.not; [ ... ]]>
-
-This means that if it is possible to include a section it must also be legal to 
-ignore the same section. This is a strong indication that the token ]]> must 
-not count as section terminator if it occurs in a string literal or comment.
-
-This parser implements the latter.
-
-==============================================================================
-Conditional sections and the inclusion of parameter entities
-==============================================================================
-
-It is unclear what happens if an ignored section contains a reference to a 
-parameter entity. In most cases, this is not problematic because nesting of 
-parameter entities must respect declaration braces. The replacement text of 
-parameter entities must either contain a whole number of declarations or only 
-inner material of one declaration. Almost always it does not matter whether 
-these references are resolved or not (the section is ignored).
-
-But there is one case which is not explicitly specified: Is it allowed that the 
-replacement text of an entity contains the end marker ]]> of an ignored 
-conditional section? Example: 
-
-<!ENTITY % end "]]>">
-<![ IGNORE [ %end;
-
-We do not find the statement in the XML spec that the ]]> must be contained in 
-the same entity as the corresponding <![ (as for the tokens <! and > of 
-declarations). So it is possible to conclude that ]]> may be in another entity.
-
-Of course, there are many arguments not to allow such constructs: The resulting 
-code is incomprehensive, and parsing takes longer (especially if the entities 
-are external). I think the best argument against this kind of XML is that the 
-XML spec is not detailed enough, as it contains no rules where entity 
-references should be recognized and where not. For example: 
-
-<!ENTITY % y "]]>">
-<!ENTITY % x "<!ENTITY z '<![CDATA[some text%y;'>">
-<![ IGNORE [ %x; ]]>
-
-Which token ]]> counts? From a logical point of view, the ]]> in the third line 
-ends the conditional section. As already pointed out, the XML spec permits the 
-interpretation that ]]> is recognized even in string literals, and this may be 
-also true if it is "imported" from a separate entity; and so the first ]]> 
-denotes the end of the section.
-
-As a practical solution, this parser does not expand parameter entities in 
-ignored sections. Furthermore, it is also not allowed that the ending ]]> of 
-ignored or included sections is contained in a different entity than the 
-starting <![ token.
-
-==============================================================================
-Standalone documents and attribute normalization
-==============================================================================
-
-If a document is declared as stand-alone, a restriction on the effect of 
-attribute normalization takes effect for attributes declared in external 
-entities. Normally, the parser knows the type of the attribute from the ATTLIST 
-declaration, and it can normalize attribute values depending on their types. 
-For example, an NMTOKEN attribute can be written with leading or trailing 
-spaces, but the parser returns always the nmtoken without such added spaces; in 
-contrast to this, a CDATA attribute is not normalized in this way. For 
-stand-alone document the type information is not available if the ATTLIST 
-declaration is located in an external entity. Because of this, the XML spec 
-demands that attribute values must be written in their normal form in this 
-case, i.e. without additional spaces. 
-
-This parser interprets this restriction as follows. Obviously, the substitution 
-of character and entity references is not considered as a "change of the value" 
-as a result of the normalization, because these operations will be performed 
-identically if the ATTLIST declaration is not available. The same applies to 
-the substitution of TABs, CRs, and LFs by space characters. Only the removal of 
-spaces depending on the type of the attribute changes the value if the ATTLIST 
-is not available. 
-
-This means in detail: CDATA attributes never violate the stand-alone status. 
-ID, IDREF, NMTOKEN, ENTITY, NOTATION and enumerator attributes must not be 
-written with leading and/or trailing spaces. IDREF, ENTITIES, and NMTOKENS 
-attributes must not be written with extra spaces at the beginning or at the end 
-of the value, or between the tokens of the list. 
-
-The whole check is dubious, because the attribute type expresses also a 
-semantical constraint, not only a syntactical one. At least this parser 
-distinguishes strictly between single-value and list types, and returns the 
-attribute values differently; the first are represented as Value s (where s is 
-a string), the latter are represented as Valuelist [s1; s2; ...; sN]. The 
-internal representation of the value is dependent on the attribute type, too, 
-such that even normalized values are processed differently depending on whether 
-the attribute has list type or not. For this parser, it makes still a 
-difference whether a value is normalized and processed as if it were CDATA, or 
-whether the value is processed according to its declared type. 
-
-The stand-alone check is included to be able to make a statement whether other, 
-well-formedness parsers can process the document. Of course, these parsers 
-always process attributes as CDATA, and the stand-alone check guarantees that 
-these parsers will always see the normalized values. 
-
-==============================================================================
-Standalone documents and the restrictions on entity
-references
-==============================================================================
-
-Stand-alone documents must not refer to entities which are declared in an 
-external entity. This parser applies this rule only: to general and NDATA 
-entities when they occur in the document body (i.e. not in the DTD); and to 
-general and NDATA entities occuring in default attribute values declared in the 
-internal subset of the DTD. 
-
-Parameter entities are out of discussion for the stand-alone property. If there 
-is a parameter entity reference in the internal subset which was declared in an 
-external entity, it is not available in the same way as the external entity is 
-not available that contains its declaration. Because of this "equivalence", 
-parameter entity references are not checked on violations against the 
-stand-alone declaration. It simply does not matter. - Illustration: 
-
-Main document: 
-
-<!ENTITY % ext SYSTEM "ext">
-%ext;
-%ent;
-
-"ext" contains: 
-
-<!ENTITY % ent "<!ELEMENT el (other*)>">
-
-
-
-Here, the reference %ent; would be illegal if the standalone declaration is 
-strictly interpreted. This parser handles the references %ent; and %ext; 
-equivalently which means that %ent; is allowed, but the element type "el" is 
-treated as externally declared. 
-
-General entities can occur within the DTD, but they can only be contained in 
-the default value of attributes, or in the definition of other general 
-entities. The latter can be ignored, because the check will be repeated when 
-the entities are expanded. Though, general entities occuring in default 
-attribute values are actually checked at the moment when the default is used in 
-an element instance. 
-
-General entities occuring in the document body are always checked.
-
-NDATA entities can occur in ENTITY attribute values; either in the element 
-instance or in the default declaration. Both cases are checked. 
-
diff --git a/helm/DEVEL/pxp/pxp/doc/SPEC.xml b/helm/DEVEL/pxp/pxp/doc/SPEC.xml
deleted file mode 100644 (file)
index 906f45a..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE readme SYSTEM "readme.dtd" [
-
-<!ENTITY % common SYSTEM "common.xml">
-%common;
-
-<!-- Special HTML config: -->
-<!ENTITY % readme:html:up '<a href="../..">up</a>'>
-
-<!ENTITY % config SYSTEM "config.xml">
-%config;
-
-]>
-
-<readme title="Notes on the XML specification">
-
-  <sect1>
-    <title>This document</title>
-    <p>There are some points in the XML specification which are ambiguous.
-The following notes discuss these points, and describe how this parser
-behaves.</p>
-  </sect1>
-
-  <sect1>
-    <title>Conditional sections and the token ]]&gt;</title>
-
-    <p>It is unclear what happens if an ignored section contains the
-token ]]&gt; at places where it is normally allowed, i.e. within string
-literals and comments, e.g.
-
-<code>
-&lt;![IGNORE[ &lt;!-- ]]&gt; --&gt; ]]&gt;
-</code>
-
-On the one hand, the production rule of the XML grammar does not treat such 
-tokens specially. Following the grammar, already the first ]]&gt; ends
-the conditional section
-
-<code>
-&lt;![IGNORE[ &lt;!-- ]]&gt;
-</code>
-
-and the other tokens are included into the DTD.</p>
-
-<p>On the other hand, we can read: "Like the internal and external DTD subsets,
-a conditional section may contain one or more complete declarations, comments,
-processing instructions, or nested conditional sections, intermingled with
-white space" (XML 1.0 spec, section 3.4). Complete declarations and comments
-may contain ]]&gt;, so this is contradictory to the grammar.</p>
-
-<p>The intention of conditional sections is to include or exclude the section 
-depending on the current replacement text of a parameter entity. Almost
-always such sections are used as in
-
-<code>
-&lt;!ENTITY % want.a.feature.or.not "INCLUDE"&gt;   (or "IGNORE")
-&lt;![ %want.a.feature.or.not; [ ... ]]&gt;
-</code>
-
-This means that if it is possible to include a section it must also be
-legal to ignore the same section. This is a strong indication that 
-the token ]]&gt; must not count as section terminator if it occurs
-in a string literal or comment.</p>
-
-<p>This parser implements the latter.</p>
-
-  </sect1>
-
-  <sect1>
-    <title>Conditional sections and the inclusion of parameter entities</title>
-
-    <p>It is unclear what happens if an ignored section contains a reference
-to a parameter entity. In most cases, this is not problematic because 
-nesting of parameter entities must respect declaration braces. The
-replacement text of parameter entities must either contain a <em>whole</em>
-number of declarations or only inner material of one declaration. Almost always
-it does not matter whether these references are resolved or not
-(the section is ignored).</p>
-
-    <p>But there is one case which is not explicitly specified: Is it allowed
-that the replacement text of an entity contains the end marker ]]&gt; 
-of an ignored conditional section? Example:
-
-<code>
-&lt;!ENTITY % end "]]&gt;"&gt;
-&lt;![ IGNORE [ %end;
-</code>
-
-We do not find the statement in the XML spec that the ]]&gt; must be contained
-in the same entity as the corresponding &lt;![ (as for the tokens &lt;! and
-&gt; of declarations). So it is possible to conclude that ]]&gt; may be in
-another entity.</p>
-
-    <p>Of course, there are many arguments not to allow such constructs: The
-resulting code is incomprehensive, and parsing takes longer (especially if the
-entities are external). I think the best argument against this kind of XML
-is that the XML spec is not detailed enough, as it contains no rules where
-entity references should be recognized and where not. For example:
-
-<code>
-&lt;!ENTITY % y "]]&gt;"&gt;
-&lt;!ENTITY % x "&lt;!ENTITY z '&lt;![CDATA[some text%y;'&gt;"&gt;
-&lt;![ IGNORE [ %x; ]]&gt;
-</code>
-
-Which token ]]&gt; counts? From a logical point of view, the ]]&gt; in the
-third line ends the conditional section. As already pointed out, the XML spec
-permits the interpretation that ]]&gt; is recognized even in string literals,
-and this may be also true if it is "imported" from a separate entity; and so
-the first ]]&gt; denotes the end of the section.</p>
-
-    <p>As a practical solution, this parser does not expand parameter entities
-in ignored sections. Furthermore, it is also not allowed that the ending ]]&gt;
-of ignored or included sections is contained in a different entity than the
-starting &lt;![ token.</p>
-  </sect1>
-
-
-  <sect1>
-    <title>Standalone documents and attribute normalization</title>
-    
-    <p>
-If a document is declared as stand-alone, a restriction on the effect of
-attribute normalization takes effect for attributes declared in external
-entities. Normally, the parser knows the type of the attribute from
-the ATTLIST declaration, and it can normalize attribute values depending
-on their types. For example, an NMTOKEN attribute can be written with
-leading or trailing spaces, but the parser returns always the nmtoken
-without such added spaces; in contrast to this, a CDATA attribute is
-not normalized in this way. For stand-alone document the type information is
-not available if the ATTLIST declaration is located in an external
-entity. Because of this, the XML spec demands that attribute values must
-be written in their normal form in this case, i.e. without additional
-spaces.
-</p>
-    <p>This parser interprets this restriction as follows. Obviously, 
-the substitution of character and entity references is not considered
-as a "change of the value" as a result of the normalization, because
-these operations will be performed identically if the ATTLIST declaration
-is not available. The same applies to the substitution of TABs, CRs, 
-and LFs by space characters. Only the removal of spaces depending on
-the type of the attribute changes the value if the ATTLIST is not
-available.
-</p>
-    <p>This means in detail: CDATA attributes never violate the
-stand-alone status. ID, IDREF, NMTOKEN, ENTITY, NOTATION and enumerator
-attributes must not be written with leading and/or trailing spaces. IDREF,
-ENTITIES, and NMTOKENS attributes must not be written with extra spaces at the
-beginning or at the end of the value, or between the tokens of the list.
-</p>
-    <p>The whole check is dubious, because the attribute type expresses also a
-semantical constraint, not only a syntactical one. At least this parser
-distinguishes strictly between single-value and list types, and returns the
-attribute values differently; the first are represented as Value s (where s is
-a string), the latter are represented as Valuelist [s1; s2; ...; sN]. The
-internal representation of the value is dependent on the attribute type, too,
-such that even normalized values are processed differently depending on
-whether the attribute has list type or not. For this parser, it makes still a
-difference whether a value is normalized and processed as if it were CDATA, or
-whether the value is processed according to its declared type.
-</p>
-    <p>The stand-alone check is included to be able to make a statement 
-whether other, well-formedness parsers can process the document. Of course,
-these parsers always process attributes as CDATA, and the stand-alone check
-guarantees that these parsers will always see the normalized values.
-</p>
-  </sect1>
-
-  <sect1>
-    <title>Standalone documents and the restrictions on entity
-references</title>
-    <p>
-Stand-alone documents must not refer to entities which are declared in an
-external entity. This parser applies this rule only: to general and NDATA
-entities when they occur in the document body (i.e. not in the DTD); and to
-general and NDATA entities occuring in default attribute values declared in the
-internal subset of the DTD.
-</p>
-    <p>
-Parameter entities are out of discussion for the stand-alone property. If there
-is a parameter entity reference in the internal subset which was declared in an
-external entity, it is not available in the same way as the external entity is
-not available that contains its declaration. Because of this "equivalence",
-parameter entity references are not checked on violations against the
-stand-alone declaration. It simply does not matter. - Illustration:
-</p>
-
-    <p>
-Main document:
-
-    <code><![CDATA[
-<!ENTITY % ext SYSTEM "ext">
-%ext;
-%ent;
-]]></code>
-
-"ext" contains:
-
-    <code><![CDATA[
-<!ENTITY % ent "<!ELEMENT el (other*)>">
-]]></code>
-</p>
-
-    <p>Here, the reference %ent; would be illegal if the standalone
-declaration is strictly interpreted. This parser handles the references
-%ent; and %ext; equivalently which means that %ent; is allowed, but the
-element type "el" is treated as externally declared.
-</p>
-
-    <p>
-General entities can occur within the DTD, but they can only be contained in
-the default value of attributes, or in the definition of other general
-entities. The latter can be ignored, because the check will be repeated when
-the entities are expanded. Though, general entities occuring in default
-attribute values are actually checked at the moment when the default is
-used in an element instance.
-</p>
-    <p>
-General entities occuring in the document body are always checked.</p>
-    <p>
-NDATA entities can occur in ENTITY attribute values; either in the element
-instance or in the default declaration. Both cases are checked.
-</p>
-  </sect1>
-
-</readme>
diff --git a/helm/DEVEL/pxp/pxp/doc/design.txt b/helm/DEVEL/pxp/pxp/doc/design.txt
deleted file mode 100644 (file)
index bf75d06..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
------------------------------------------------- -*- indented-text -*-
-Some Notes About the Design:
-----------------------------------------------------------------------
-
-----------------------------------------------------------------------
-Compilation
-----------------------------------------------------------------------
-
-Compilation is non-trivial because:
-
- - The lexer and parser generators ocamlllex resp. ocamlyacc normally
-   create code such that the parser module precedes the lexer module.
-   THIS design requires that the lexer layer precedes the entity layer
-   which precedes the parser layer, because the parsing results modify
-   the behaviour of the lexer and entity layers. There is no way to get
-   around this because of the nature of XML.
-
-   So the dependency relation of the lexer and the parser is modified;
-   in particular the "token" type that is normally defined by the 
-   generated parser is moved to a common prdecessor of both lexer
-   and parser.
-
- - Another modification of the standard way of handling parsers is that
-   the parser is turned into an object. This is necessary because the
-   whole parser is polymorphic, i.e. there is a type parameter (the
-   type of the node extension).
-
-......................................................................
-
-First some modules are generated as illustrated by the following
-diagram:
-
-
-                                    markup_yacc.mly
-                              |        |
-                              \|/      \|/  [ocamlyacc, 1]
-                               V               V
-                            markup_yacc.mli  markup_yacc.ml
-                                 |             --> renamed into markup_yacc.ml0
-           [awk, 2]     \|/                        |
-                         V                        \|/   [sed, 3]
-              markup_yacc_token.mlf                V
-                      |       |              markup_yacc.ml
- markup_lexer_types_   |       |
- shadow.mli  |                |       | markup_lexer_types_
-           \|/ [sed, \|/      | shadow.ml
-            V    4]   V       |     |
-       markup_lexer_types.mli |     |   [sed, 4]
-                             \|/   \|/
-                              V     V
-                       markup_lexer_types.ml
-
-
-                                  markup_yacc_shadow.mli
-                                          |
-                                 \|/  [replaces, 5]
-                                  V
-                             markup_yacc.mli
-
-
-
-                          markup_lexers.mll
-                                          |
-                                 \|/  [ocamllex, 6]
-                                  V
-                           markup_lexers.ml
-
-
-Notes:
-
-       (1) ocamlyacc generates both a module and a module interface.
-           The module is postprocessed in step (3). The interface cannot
-           be used, but it contains the definition of the "token" type.
-           This definition is extracted in step (2). The interface is
-           completely replaced in step (5) by a different file.
-
-       (2) An "awk" script extracts the definition of the type "token".
-           "token" is created by ocamlyacc upon the %token directives
-           in markup_yacc.mly, and normally "token" is defined in
-           the module generated by ocamlyacc. This turned out not to be
-           useful as the module dependency must be that the lexer is
-           an antecedent of the parser and not vice versa (as usually),
-           so the "token" type is "moved" to the module Markup_lexer_types
-           which is an antecedent of both the lexer and the parser.
-
-       (3) A "sed" script turns the generated parser into an object.
-           This is rather simple; some "let" definitions must be rewritten
-           as "val" definitions, the other "let" definitions as
-           "method" definitions. The parser object is needed because
-           the whole parser has a polymorphic type parameter.
-
-       (4) The implementation and definition of Markup_lexer_types are
-           both generated by inserting the "token" type definition
-           (in markup_lexer_types.mlf) into two pattern files,
-           markup_lexer_types_shadow.ml resp. -.mli. The point of insertion
-           is marked by the string INCLUDE_HERE.
-
-       (5) The generated interface of the Markup_yacc module is replaced
-           by a hand-written file.
-
-       (6) ocamllex generates the lexer; this process is not patched in any
-           way.
-
-......................................................................
-
-After the additional modules have been generated, compilation proceeds
-in the usual manner.
-
-
-----------------------------------------------------------------------
-Hierarchy of parsing layers:
-----------------------------------------------------------------------
-
-From top to bottom:
-
- - Parser: Markup_yacc
-   + gets input stream from the main entity object
-   + checks most of the grammar
-   + creates the DTD object as side-effect
-   + creates the element tree as side-effect
-   + creates further entity objects that are entered into the DTD
- - Entity layer: Markup_entity
-   + gets input stream from the lexers, or another entity object
-   + handles entity references: if a reference is encountered the
-     input stream is redirected such that the tokens come from the
-     referenced entity object
-   + handles conditional sections
- - Lexer layer: Markup_lexers
-   + gets input from lexbuffers created by resolvers
-   + different lexers for different lexical contexts
-   + a lexer returns pairs (token,lexid), where token is the scanned
-     token, and lexid is the name of the lexer that must be used for
-     the next token
- - Resolver layer: Markup_entity
-   + a resolver creates the lexbuf from some character source
-   + a resolver recodes the input and handles the encoding scheme
-
-----------------------------------------------------------------------
-The YACC based parser
-----------------------------------------------------------------------
-
-ocamlyacc allows it to pass an arbitrary 'next_token' function to the
-parsing functions. We always use 'en # next_token()' where 'en' is the
-main entity object representing the main file to be parsed.
-
-The parser is not functional, but uses mainly side-effects to accumulate
-the structures that have been recognized. This is very important for the
-entity definitions, because once an entity definition has been found there
-may be a reference to it which is handled by the entity layer (which is
-below the yacc layer). This means that such a definition modifies the
-token source of the parser, and this can only be handled by side-effects
-(at least in a sensible manner; a purely functional parser would have to
-pass unresolved entity references to its caller, which would have to
-resolve the reference and to re-parse the whole document!).
-
-Note that also element definitions profit from the imperative style of
-the parser; an element instance can be validated directly once the end
-tag has been read in.
-
-----------------------------------------------------------------------
-The entity layer
-----------------------------------------------------------------------
-
-The parser gets the tokens from the main entity object. This object
-controls the underlying lexing mechanism (see below), and already
-interprets the following:
-
-- Conditional sections (if they are allowed in this entity):
-  The structures <![ INCLUDE [ ... ]]> and <! IGNORE [ ... ]]> are
-  recognized and interpreted.
-
-  This would be hard to realize by the yacc parser, because:
-  - INCLUDE and IGNORE are not recognized as lexical keywords but as names.
-    This means that the parser cannot select different rules for them.
-  - The text after IGNORE requires a different lexical handling.
-
-- Entity references: &name; and %name;
-  The named entity is looked up and the input source is redirected to it, i.e.
-  if the main entity object gets the message 'next_token' this message is
-  forwarded to the referenced entity. (This entity may choose to forward the
-  message again to a third entity, and so on.)
-
-  There are some fine points:
-
-  - It is okay that redirection happens at token level, not at character level:
-    + General entities must always match the 'content' production, and because
-      of this they must always consist of a whole number of tokens.
-    + If parameter entities are resolved, the XML specification states that
-      a space character is inserted before and after the replacement text.
-      This also means that such entities always consists of a whole number
-      of tokens.
-
-  - There are some "nesting constraints":
-    + General entities must match the 'content' production. Because of this,
-      the special token Begin_entity is inserted before the first token of
-      the entity, and End_entity is inserted just before the Eof token. The
-      brace Begin_entity...End_entity is recognized by the yacc parser, but
-      only in the 'content' production.
-    + External parameter entities must match 'extSubsetDecl'. Again,
-      Begin_entity and End_entity tokens embrace the inner token stream.
-      The brace Begin_entity...End_entity is recognized by the yacc parser
-      at the appropriate position.
-      (As general and parameter entities are used in different contexts
-      (document vs. DTD), both kinds of entities can use the same brace
-      Begin_entity...End_entity.)
-    + TODO:
-      The constraints for internal parameter entities are not yet checked.
-
-  - Recursive references can be detected because entities must be opened
-    before the 'next_token' method can be invoked.
-
-----------------------------------------------------------------------
-The lexer layer
-----------------------------------------------------------------------
-
-There are five main lexers, and a number of auxiliary lexers. The five
-main lexers are:
-
-- Document (function scan_document):
-  Scans an XML document outside the DTD and outside the element instance.
-
-- Content (function scan_content):
-  Scans an element instance, but not within tags.
-
-- Within_tag (function scan_within_tag):
-  Scans within <...>, i.e. a tag denoting an element instance.
-
-- Document_type (function scan_document_type):
-  Scans after <!DOCTYPE until the corresponding >.
-
-- Declaration (function scan_declaration):
-  Scans sequences of declarations
-
-Why several lexers? Because there are different lexical rules in these
-five regions of an XML document.
-
-Every lexer not only produces tokens, but also the name of the next lexer
-to use. For example, if the Document lexer scans "<!DOCTYPE", it also
-outputs that the next token must be scanned by Document_type.
-
-It is interesting that this really works. The beginning of every lexical
-context can be recognized by the lexer of the previous context, and there
-is always a token that unambigously indicates that the context ends.
-
-----------------------------------------------------------------------
-The DTD object
-----------------------------------------------------------------------
-
-There is usually one object that collects DTD declarations. All kinds of
-declarations are entered here:
-
-- element and attribute list declarations
-- entity declarations
-- notation declarations
-
-Some properties are validated directly after a declarations has been added
-to the DTD, but most validation is done by a 'validate' method.
-
-The result of 'validate' is stored such that another invocation is cheap.
-A DTD becomes again 'unchecked' if another declaration is added.
-
-TODO: We need a special DTD object that allows every content.
-
-The DTD object is known by more or less every other object, i.e. entities
-know the DTD, element declarations and instances know the DTD, and so on.
-
-TODO: We need a method that deletes all entity declarations once the DTD
-is complete (to free memory).
-
-----------------------------------------------------------------------
-Element and Document objects
-----------------------------------------------------------------------
-
-The 'element' objects form the tree of the element instances.
-
-The 'document' object is a derivate of 'element' where properties of the
-whole document can be stored.
-
-New element objects are NOT created by the "new class" mechanism, but
-instead by an exemplar/instance scheme: A new instance is the duplicate
-of an exemplar. This has the advantage that the user can provide own
-classes for the element instances. A hashtable contains the exemplars
-for every element type (tag name), and there is a default exemplar.
-The user can configure this hashtable such that for elements A objects
-of class element_a, for elements B objects of class element_b and so on
-are used.
-
-The object for the root element must already be created before parsing
-starts, and the parser returns the (filled) root object. Because of this,
-the user determines the *static* type of the object without the need
-of back coercion (which is not possible in Ocaml).
-
-----------------------------------------------------------------------
-Newline normalization
-----------------------------------------------------------------------
-
-The XML spec states that all of \n, \r, and \r\n must be recognized
-as newline characters/character sequences. Notes:
-- The replacement text of entities always contains the orginal text,
-  i.e. \r and \r\n are NOT converted to \n.
-  It is unclear if this is a violation of the standard or not.
-- Content of elements: Newline characters are converted to \n.
-- Attribute values: Newline characters are converted to spaces.
-- Processing instructions: Newline characters are not converted.
-  It is unclear if this is a violation of the standard or not.
-
-----------------------------------------------------------------------
-Empty entities
-----------------------------------------------------------------------
-
-Many entities are artificially surrounded by a Begin_entity/End_entity pair.
-This is sometimes not done if the entity is empty:
-
-- External parameter entities are parsed entities, i.e. they must match
-  the markupdecl* production. If they are not empty, the Begin_entity/End_entity
-  trick guarantees that they match markupdecl+, and that they are only
-  referred to at positions where markupdecl+ is allowed.
-  If they are empty, they are allowed everywhere just like internal 
-  parameter entities. Because of this, the Begin_entity/End_entity pair
-  is dropped.
-
-- This does not apply to parameter entities (either external or internal)
-  which are referred to in the internal subset, nor applies to internal
-  parameter entities, nor applies to general entities:
-
-  + References in the internal subset are only allowed at positions where
-    markupdecl can occur, so Begin_entity/End_entity is added even if the
-    entity is empty.
-  + References to internal parameter entities are allowed anywhere, so
-    never Begin_entity/End_entity is added.
-  + References to general entities: An empty  Begin_entity/End_entity pair
-    is recognized by the yacc parser, so special handling is not required.
-    Moreover, there is the situation that an empty entity is referred to
-    after the toplevel element:
-    <!DOCTYPE doc ...[
-    <!ENTITY empty "">
-    ]>
-    <doc></doc>&empty;
-    - This is illegal, and the presence of an empty Begin_entity/End_entity pair
-    helps to recognize this.
diff --git a/helm/DEVEL/pxp/pxp/doc/dist-common.xml b/helm/DEVEL/pxp/pxp/doc/dist-common.xml
deleted file mode 100644 (file)
index d18a150..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-
-<!-- ************************************************************ -->
-<!-- EXTERNAL URLs                                                -->
-<!-- ************************************************************ -->
-
-<!ENTITY url.ocaml           
-         "http://caml.inria.fr/">
-
-<!ENTITY url.ocaml.list
-         "http://caml.inria.fr/caml-list-eng.html">
-
-<!ENTITY url.ocaml.download
-         "ftp://ftp.inria.fr/lang/caml-light/">
-
-<!ENTITY url.ocaml.camlp4
-         "http://caml.inria.fr/camlp4/">
-
-<!ENTITY url.ocaml.hump
-         "http://caml.inria.fr/hump.html">
-
-<!ENTITY url.ocaml.mottl
-         "http://miss.wu-wien.ac.at/~mottl/ocaml_sources/intro.html">
-
-<!ENTITY url.ocaml.mottl.pcre
-         "http://miss.wu-wien.ac.at/~mottl/ocaml_sources/pcre_ocaml.tar.gz">
-
-<!ENTITY url.ocaml.lindig
-         "http://www.cs.tu-bs.de/softech/people/lindig/software/index.html">
-
-<!ENTITY url.ocaml.lindig.ocmarkup
-         "http://www.cs.tu-bs.de/softech/people/lindig/software/ocmarkup.html">
-
-<!ENTITY url.ocaml.lindig.tony
-         "http://www.cs.tu-bs.de/softech/people/lindig/software/tony.html">
-
-<!ENTITY url.ocaml.filliatre
-         "http://www.lri.fr/~filliatr/software.en.html">
-
-<!ENTITY url.ocaml.filliatre.cgi
-         "http://www.lri.fr/~filliatr/ftp/ocaml/cgi/">
-
-<!ENTITY url.xml-spec        
-         "http://www.w3.org/TR/1998/REC-xml-19980210.html">
-
-<!ENTITY url.xml.oasis
-         "http://www.oasis-open.org/cover/">
-
-<!ENTITY url.xml.w3c
-         "http://www.w3c.org/XML/">
-
-<!ENTITY url.jclark-xmltdata 
-         "ftp://ftp.jclark.com/pub/xml/xmltest.zip">
-
-<!ENTITY urlprefix.ietf.rfc
-         "http://www.ietf.org/rfc">
-   <!-- Ohne "/" am Ende! -->
-
-<!ENTITY url.apache
-         "http://www.apache.org/">
-
-
-<!-- ************************************************************ -->
-<!-- MY URLs                                                      -->
-<!-- ************************************************************ -->
-
-<!ENTITY url.linkdb
-         "http://www.npc.de/ocaml/linkdb">
-
-<!-- ************************************************************ -->
-<!-- HOMEPAGE URLs                                                -->
-<!-- ************************************************************ -->
-
-<!-- GENERIC -->
-
-<!ENTITY url.gps-ocaml-download 
-         "http://people.darmstadt.netsurf.de/Gerd.Stolpmann/ocaml">
-
-<!ENTITY url.gps-ocaml-projects
-         "http://people.darmstadt.netsurf.de/Gerd.Stolpmann/ocaml/projects">
-
-<!ENTITY url.gps-old-download
-         "http://people.darmstadt.netsurf.de/Gerd.Stolpmann/download">
-
-
-<!-- SPECIFIC -->
-
-<!ENTITY release.findlib
-         "SOME-VERSION">
-
-<!ENTITY url.findlib-download
-         "&url.gps-ocaml-download;/findlib-&release.findlib;.tar.gz">
-
-<!ENTITY url.findlib-project
-         "&url.gps-ocaml-projects;/findlib/">
-
-<!ENTITY url.findlib-manual
-         "&url.gps-ocaml-projects;/findlib/">
-
-
-
-<!ENTITY release.markup
-         "SOME-VERSION">
-
-<!ENTITY url.markup-download    
-         "&url.gps-ocaml-download;/markup-&release.markup;.tar.gz">
-
-<!ENTITY url.markup-project
-         "&url.gps-ocaml-projects;/markup">
-
-<!ENTITY url.markup-manual
-         "&url.gps-ocaml-projects;/markup/manual">
-
-
-<!-- ************************************************************ -->
-<!-- MAIL URLs                                                    -->
-<!-- ************************************************************ -->
-
-<!ENTITY person.gps '<a href="mailto:&person.gps.mail;">Gerd Stolpmann</a>'>
-
-<!ENTITY person.gps.mail
-         "Gerd.Stolpmann@darmstadt.netsurf.de">
-
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/Makefile b/helm/DEVEL/pxp/pxp/doc/manual/Makefile
deleted file mode 100644 (file)
index 5a3e1ff..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-DOCBOOK_HTML = /usr/share/sgml/docbkdsl/html
-DOCBOOK_PRINT = /usr/share/sgml/docbkdsl/print
-SRC = $(PWD)/src
-
-.PHONY: html ps
-
-default: html ps
-
-html: html/book1.htm html/pic/done
-
-ps: ps/markup.ps ps/pic/done
-
-
-src/readme.ent: ../../examples/readme/to_html.ml
-       src/getcode.ml <../../examples/readme/to_html.ml >src/readme.ent
-
-src/yacc.mli.ent: ../../pxp_yacc.mli
-       src/getcode.ml <../../pxp_yacc.mli >src/yacc.mli.ent
-
-src/dtd.mli.ent: ../../pxp_dtd.mli
-       src/getcode.ml <../../pxp_dtd.mli >src/dtd.mli.ent
-
-html/book1.htm: src/*.sgml src/readme.ent src/yacc.mli.ent src/dtd.mli.ent
-       mkdir -p html
-       cp src/markup.css html; \
-       cd html; \
-       rm -f *.htm*; \
-       jade -t sgml -D$(DOCBOOK_HTML) -D$(SRC) -ihtml markup.sgml; \
-       true
-       touch html/TIMESTAMP
-
-html/pic/done: src/pic/*.fig
-       mkdir -p html/pic
-       l=`cd src/pic; echo *.fig`; \
-       for x in $$l; do fig2dev -L gif src/pic/$$x html/pic/`basename $$x .fig`.gif; done
-       touch html/pic/done
-
-#man: src/findlib_reference.xml
-#      mkdir -p man
-#      cd man; \
-#      rm -f *.[0-9]; \
-#      db2man <../src/findlib_reference.xml
-
-ps/markup.tex: src/*.sgml src/readme.ent src/yacc.mli.ent src/dtd.mli.ent
-       mkdir -p ps
-       cd ps; \
-       jade -t tex -D$(DOCBOOK_PRINT) -D$(SRC) markup.sgml; \
-       true
-
-ps/markup.dvi: ps/markup.tex ps/pic/done
-       cd ps; \
-       jadetex markup.tex; \
-       jadetex markup.tex; \
-       jadetex markup.tex
-
-ps/markup.ps: ps/markup.dvi
-       cd ps; \
-       dvips -f <markup.dvi >markup.ps
-
-ps/pic/done: src/pic/*.fig
-       mkdir -p ps/pic
-       l=`cd src/pic; echo *.fig`; \
-       for x in $$l; do fig2dev -L ps -m 0.8 src/pic/$$x ps/pic/`basename $$x .fig`.ps; done
-       touch ps/pic/done
-
-.SUFFIXES: .xml .sgml
-
-.sgml.xml: 
-       sx -xndata $< >$@; true
-
-
-
-clean:
-       rm -rf html man ps
-       rm -f src/readme.ent
-
-CLEAN: clean
-
-distclean:
-       rm -f src/*~
-       rm -f *~
-       rm -f ps/*.aux ps/*.dvi ps/*.log ps/*.tex
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/TIMESTAMP b/helm/DEVEL/pxp/pxp/doc/manual/html/TIMESTAMP
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/c1567.html b/helm/DEVEL/pxp/pxp/doc/manual/html/c1567.html
deleted file mode 100644 (file)
index ab88e87..0000000
+++ /dev/null
@@ -1,434 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Configuring and calling the parser</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="User's guide"
-HREF="p34.html"><LINK
-REL="PREVIOUS"
-TITLE="Details of the mapping from XML text to the tree representation"
-HREF="x1496.html"><LINK
-REL="NEXT"
-TITLE="Resolvers and sources"
-HREF="x1629.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="x1496.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
-></TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="x1629.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN1567"
->Chapter 4. Configuring and calling the parser</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
->4.1. <A
-HREF="c1567.html#AEN1569"
->Overview</A
-></DT
-><DT
->4.2. <A
-HREF="x1629.html"
->Resolvers and sources</A
-></DT
-><DT
->4.3. <A
-HREF="x1812.html"
->The DTD classes</A
-></DT
-><DT
->4.4. <A
-HREF="x1818.html"
->Invoking the parser</A
-></DT
-><DT
->4.5. <A
-HREF="x1965.html"
->Updates</A
-></DT
-></DL
-></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN1569"
->4.1. Overview</A
-></H1
-><P
->There are the following main functions invoking the parser (in Pxp_yacc):
-
-          <P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><I
-CLASS="EMPHASIS"
->parse_document_entity:</I
-> You want to
-parse a complete and closed document consisting of a DTD and the document body;
-the body is validated against the DTD. This mode is interesting if you have a
-file
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!DOCTYPE root ... [ ... ] &#62; &#60;root&#62; ... &#60;/root&#62;</PRE
->
-
-and you can accept any DTD that is included in the file (e.g. because the file
-is under your control).</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><I
-CLASS="EMPHASIS"
->parse_wfdocument_entity:</I
-> You want to
-parse a complete and closed document consisting of a DTD and the document body;
-but the body is not validated, only checked for well-formedness. This mode is
-preferred if validation costs too much time or if the DTD is missing.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><I
-CLASS="EMPHASIS"
->parse_dtd_entity:</I
-> You want only to
-parse an entity (file) containing the external subset of a DTD. Sometimes it is
-interesting to read such a DTD, for example to compare it with the DTD included
-in a document, or to apply the next mode:</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><I
-CLASS="EMPHASIS"
->parse_content_entity:</I
-> You want only to
-parse an entity (file) containing a fragment of a document body; this fragment
-is validated against the DTD you pass to the function. Especially, the fragment
-must not have a <TT
-CLASS="LITERAL"
-> &lt;!DOCTYPE&gt;</TT
-> clause, and must directly
-begin with an element.  The element is validated against the DTD.  This mode is
-interesting if you want to check documents against a fixed, immutable DTD.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><I
-CLASS="EMPHASIS"
->parse_wfcontent_entity:</I
-> This function
-also parses a single element without DTD, but does not validate it.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><I
-CLASS="EMPHASIS"
->extract_dtd_from_document_entity:</I
-> This
-function extracts the DTD from a closed document consisting of a DTD and a
-document body. Both the internal and the external subsets are extracted.</P
-></LI
-></UL
-></P
-><P
->In many cases, <TT
-CLASS="LITERAL"
->parse_document_entity</TT
-> is the preferred mode
-to parse a document in a validating way, and
-<TT
-CLASS="LITERAL"
->parse_wfdocument_entity</TT
-> is the mode of choice to parse a
-file while only checking for well-formedness.</P
-><P
->There are a number of variations of these modes. One important application of a
-parser is to check documents of an untrusted source against a fixed DTD. One
-solution is to not allow the <TT
-CLASS="LITERAL"
->&lt;!DOCTYPE&gt;</TT
-> clause in
-these documents, and treat the document like a fragment (using mode
-<I
-CLASS="EMPHASIS"
->parse_content_entity</I
->). This is very simple, but
-inflexible; users of such a system cannot even define additional entities to
-abbreviate frequent phrases of their text.</P
-><P
->It may be necessary to have a more intelligent checker. For example, it is also
-possible to parse the document to check fully, i.e. with DTD, and to compare
-this DTD with the prescribed one. In order to fully parse the document, mode
-<I
-CLASS="EMPHASIS"
->parse_document_entity</I
-> is applied, and to get the DTD to
-compare with mode <I
-CLASS="EMPHASIS"
->parse_dtd_entity</I
-> can be used.</P
-><P
->There is another very important configurable aspect of the parser: the
-so-called resolver. The task of the resolver is to locate the contents of an
-(external) entity for a given entity name, and to make the contents accessible
-as a character stream. (Furthermore, it also normalizes the character set;
-but this is a detail we can ignore here.) Consider you have a file called
-<TT
-CLASS="LITERAL"
->"main.xml"</TT
-> containing 
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ENTITY % sub SYSTEM "sub/sub.xml"&#62;
-%sub;</PRE
->
-
-and a file stored in the subdirectory <TT
-CLASS="LITERAL"
->"sub"</TT
-> with name
-<TT
-CLASS="LITERAL"
->"sub.xml"</TT
-> containing
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ENTITY % subsub SYSTEM "subsub/subsub.xml"&#62;
-%subsub;</PRE
->
-
-and a file stored in the subdirectory <TT
-CLASS="LITERAL"
->"subsub"</TT
-> of
-<TT
-CLASS="LITERAL"
->"sub"</TT
-> with name <TT
-CLASS="LITERAL"
->"subsub.xml"</TT
-> (the
-contents of this file do not matter). Here, the resolver must track that
-the second entity <TT
-CLASS="LITERAL"
->subsub</TT
-> is located in the directory
-<TT
-CLASS="LITERAL"
->"sub/subsub"</TT
->, i.e. the difficulty is to interpret the
-system (file) names of entities relative to the entities containing them,
-even if the entities are deeply nested.</P
-><P
->There is not a fixed resolver already doing everything right - resolving entity
-names is a task that highly depends on the environment. The XML specification
-only demands that <TT
-CLASS="LITERAL"
->SYSTEM</TT
-> entities are interpreted like URLs
-(which is not very precise, as there are lots of URL schemes in use), hoping
-that this helps overcoming the local peculiarities of the environment; the idea
-is that if you do not know your environment you can refer to other entities by
-denoting URLs for them. I think that this interpretation of
-<TT
-CLASS="LITERAL"
->SYSTEM</TT
-> names may have some applications in the internet, but
-it is not the first choice in general. Because of this, the resolver is a
-separate module of the parser that can be exchanged by another one if
-necessary; more precisely, the parser already defines several resolvers.</P
-><P
->The following resolvers do already exist:
-
-          <P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
->Resolvers reading from arbitrary input channels. These
-can be configured such that a certain ID is associated with the channel; in
-this case inner references to external entities can be resolved. There is also
-a special resolver that interprets SYSTEM IDs as URLs; this resolver can
-process relative SYSTEM names and determine the corresponding absolute URL.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->A resolver that reads always from a given O'Caml
-string. This resolver is not able to resolve further names unless the string is
-not associated with any name, i.e. if the document contained in the string
-refers to an external entity, this reference cannot be followed in this
-case.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->A resolver for file names. The <TT
-CLASS="LITERAL"
->SYSTEM</TT
->
-name is interpreted as file URL with the slash "/" as separator for
-directories. - This resolver is derived from the generic URL resolver.</P
-></LI
-></UL
->
-
-The interface a resolver must have is documented, so it is possible to write
-your own resolver. For example, you could connect the parser with an HTTP
-client, and resolve URLs of the HTTP namespace. The resolver classes support
-that several independent resolvers are combined to one more powerful resolver;
-thus it is possible to combine a self-written resolver with the already
-existing resolvers.</P
-><P
->Note that the existing resolvers only interpret <TT
-CLASS="LITERAL"
->SYSTEM</TT
->
-names, not <TT
-CLASS="LITERAL"
->PUBLIC</TT
-> names. If it helps you, it is possible to
-define resolvers for <TT
-CLASS="LITERAL"
->PUBLIC</TT
-> names, too; for example, such a
-resolver could look up the public name in a hash table, and map it to a system
-name which is passed over to the existing resolver for system names. It is
-relatively simple to provide such a resolver.</P
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="x1496.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="x1629.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->Details of the mapping from XML text to the tree representation</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="p34.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->Resolvers and sources</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/c36.html b/helm/DEVEL/pxp/pxp/doc/manual/html/c36.html
deleted file mode 100644 (file)
index d74ecbb..0000000
+++ /dev/null
@@ -1,533 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->What is XML?</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="User's guide"
-HREF="p34.html"><LINK
-REL="PREVIOUS"
-TITLE="User's guide"
-HREF="p34.html"><LINK
-REL="NEXT"
-TITLE="Highlights of XML"
-HREF="x107.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="p34.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
-></TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="x107.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN36"
->Chapter 1. What is XML?</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
->1.1. <A
-HREF="c36.html#AEN38"
->Introduction</A
-></DT
-><DT
->1.2. <A
-HREF="x107.html"
->Highlights of XML</A
-></DT
-><DT
->1.3. <A
-HREF="x468.html"
->A complete example: The <I
-CLASS="EMPHASIS"
->readme</I
-> DTD</A
-></DT
-></DL
-></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN38"
->1.1. Introduction</A
-></H1
-><P
->XML (short for <I
-CLASS="EMPHASIS"
->Extensible Markup Language</I
->)
-generalizes the idea that text documents are typically structured in sections,
-sub-sections, paragraphs, and so on. The format of the document is not fixed
-(as, for example, in HTML), but can be declared by a so-called DTD (document
-type definition). The DTD describes only the rules how the document can be
-structured, but not how the document can be processed. For example, if you want
-to publish a book that uses XML markup, you will need a processor that converts
-the XML file into a printable format such as Postscript. On the one hand, the
-structure of XML documents is configurable; on the other hand, there is no
-longer a canonical interpretation of the elements of the document; for example
-one XML DTD might want that paragraphes are delimited by
-<TT
-CLASS="LITERAL"
->para</TT
-> tags, and another DTD expects <TT
-CLASS="LITERAL"
->p</TT
-> tags
-for the same purpose. As a result, for every DTD a new processor is required.</P
-><P
->Although XML can be used to express structured text documents it is not limited
-to this kind of application. For example, XML can also be used to exchange
-structured data over a network, or to simply store structured data in
-files. Note that XML documents cannot contain arbitrary binary data because
-some characters are forbidden; for some applications you need to encode binary
-data as text (e.g. the base 64 encoding).</P
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN45"
->1.1.1. The "hello world" example</A
-></H2
-><P
->The following example shows a very simple DTD, and a corresponding document
-instance. The document is structured such that it consists of sections, and
-that sections consist of paragraphs, and that paragraphs contain plain text:</P
-><PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT document (section)+&#62;
-&#60;!ELEMENT section (paragraph)+&#62;
-&#60;!ELEMENT paragraph (#PCDATA)&#62;</PRE
-><P
->The following document is an instance of this DTD:</P
-><PRE
-CLASS="PROGRAMLISTING"
->&#60;?xml version="1.0" encoding="ISO-8859-1"?&#62;
-&#60;!DOCTYPE document SYSTEM "simple.dtd"&#62;
-&#60;document&#62;
-  &#60;section&#62;
-    &#60;paragraph&#62;This is a paragraph of the first section.&#60;/paragraph&#62;
-    &#60;paragraph&#62;This is another paragraph of the first section.&#60;/paragraph&#62;
-  &#60;/section&#62;
-  &#60;section&#62;
-    &#60;paragraph&#62;This is the only paragraph of the second section.&#60;/paragraph&#62;
-  &#60;/section&#62;
-&#60;/document&#62;</PRE
-><P
->As in HTML (and, of course, in grand-father SGML), the "pieces" of
-the document are delimited by element braces, i.e. such a piece begins with
-<TT
-CLASS="LITERAL"
->&lt;name-of-the-type-of-the-piece&gt;</TT
-> and ends with
-<TT
-CLASS="LITERAL"
->&lt;/name-of-the-type-of-the-piece&gt;</TT
->, and the pieces are
-called <I
-CLASS="EMPHASIS"
->elements</I
->. Unlike HTML and SGML, both start tags and
-end tags (i.e. the delimiters written in angle brackets) can never be left
-out. For example, HTML calls the paragraphs simply <TT
-CLASS="LITERAL"
->p</TT
->, and
-because paragraphs never contain paragraphs, a sequence of several paragraphs
-can be written as:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;p&#62;First paragraph 
-&#60;p&#62;Second paragraph</PRE
->
-
-This is not possible in XML; continuing our example above we must always write
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;paragraph&#62;First paragraph&#60;/paragraph&#62;
-&#60;paragraph&#62;Second paragraph&#60;/paragraph&#62;</PRE
->
-
-The rationale behind that is to (1) simplify the development of XML parsers
-(you need not convert the DTD into a deterministic finite automaton which is
-required to detect omitted tags), and to (2) make it possible to parse the
-document independent of whether the DTD is known or not.</P
-><P
->The first line of our sample document,
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;?xml version="1.0" encoding="ISO-8859-1"?&#62;</PRE
->
-
-is the so-called <I
-CLASS="EMPHASIS"
->XML declaration</I
->. It expresses that the
-document follows the conventions of XML version 1.0, and that the document is
-encoded using characters from the ISO-8859-1 character set (often known as
-"Latin 1", mostly used in Western Europe). Although the XML declaration is not
-mandatory, it is good style to include it; everybody sees at the first glance
-that the document uses XML markup and not the similar-looking HTML and SGML
-markup languages. If you omit the XML declaration, the parser will assume
-that the document is encoded as UTF-8 or UTF-16 (there is a rule that makes
-it possible to distinguish between UTF-8 and UTF-16 automatically); these
-are encodings of Unicode's universal character set. (Note that <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
->, unlike its
-predecessor "Markup", fully supports Unicode.)</P
-><P
->The second line,
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!DOCTYPE document SYSTEM "simple.dtd"&#62;</PRE
->
-
-names the DTD that is going to be used for the rest of the document. In
-general, it is possible that the DTD consists of two parts, the so-called
-external and the internal subset. "External" means that the DTD exists as a
-second file; "internal" means that the DTD is included in the same file. In
-this example, there is only an external subset, and the system identifier
-"simple.dtd" specifies where the DTD file can be found. System identifiers are
-interpreted as URLs; for instance this would be legal:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!DOCTYPE document SYSTEM "http://host/location/simple.dtd"&#62;</PRE
->
-
-Please note that <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-> cannot interpret HTTP identifiers by default, but it is
-possible to change the interpretation of system identifiers.</P
-><P
->The word immediately following <TT
-CLASS="LITERAL"
->DOCTYPE</TT
-> determines which of
-the declared element types (here "document", "section", and "paragraph") is
-used for the outermost element, the <I
-CLASS="EMPHASIS"
->root element</I
->. In this
-example it is <TT
-CLASS="LITERAL"
->document</TT
-> because the outermost element is
-delimited by <TT
-CLASS="LITERAL"
->&lt;document&gt;</TT
-> and
-<TT
-CLASS="LITERAL"
->&lt;/document&gt;</TT
->. </P
-><P
->The DTD consists of three declarations for element types:
-<TT
-CLASS="LITERAL"
->document</TT
->, <TT
-CLASS="LITERAL"
->section</TT
->, and
-<TT
-CLASS="LITERAL"
->paragraph</TT
->. Such a declaration has two parts:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;!ELEMENT <TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
-> <TT
-CLASS="REPLACEABLE"
-><I
->content-model</I
-></TT
->&gt;</PRE
->
-
-The content model is a regular expression which describes the possible inner
-structure of the element. Here, <TT
-CLASS="LITERAL"
->document</TT
-> contains one or
-more sections, and a <TT
-CLASS="LITERAL"
->section</TT
-> contains one or more
-paragraphs. Note that these two element types are not allowed to contain
-arbitrary text. Only the <TT
-CLASS="LITERAL"
->paragraph</TT
-> element type is declared
-such that parsed character data (indicated by the symbol
-<TT
-CLASS="LITERAL"
->#PCDATA</TT
->) is permitted.</P
-><P
->See below for a detailed discussion of content models. </P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN84"
->1.1.2. XML parsers and processors</A
-></H2
-><P
->XML documents are human-readable, but this is not the main purpose of this
-language. XML has been designed such that documents can be read by a program
-called an <I
-CLASS="EMPHASIS"
->XML parser</I
->. The parser checks that the document
-is well-formatted, and it represents the document as objects of the programming
-language. There are two aspects when checking the document: First, the document
-must follow some basic syntactic rules, such as that tags are written in angle
-brackets, that for every start tag there must be a corresponding end tag and so
-on. A document respecting these rules is
-<I
-CLASS="EMPHASIS"
->well-formed</I
->. Second, the document must match the DTD in
-which case the document is <I
-CLASS="EMPHASIS"
->valid</I
->. Many parsers check only
-on well-formedness and ignore the DTD; <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-> is designed such that it can
-even validate the document.</P
-><P
->A parser does not make a sensible application, it only reads XML
-documents. The whole application working with XML-formatted data is called an
-<I
-CLASS="EMPHASIS"
->XML processor</I
->. Often XML processors convert documents into
-another format, such as HTML or Postscript. Sometimes processors extract data
-of the documents and output the processed data again XML-formatted. The parser
-can help the application processing the document; for example it can provide
-means to access the document in a specific manner. <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-> supports an
-object-oriented access layer specially.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN94"
->1.1.3. Discussion</A
-></H2
-><P
->As we have seen, there are two levels of description: On the one hand, XML can
-define rules about the format of a document (the DTD), on the other hand, XML
-expresses structured documents. There are a number of possible applications:</P
-><P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
->XML can be used to express structured texts. Unlike HTML, there is no canonical
-interpretation; one would have to write a backend for the DTD that translates
-the structured texts into a format that existing browsers, printers
-etc. understand. The advantage of a self-defined document format is that it is
-possible to design the format in a more problem-oriented way. For example, if
-the task is to extract reports from a database, one can use a DTD that reflects
-the structure of the report or the database. A possible approach would be to
-have an element type for every database table and for every column. Once the
-DTD has been designed, the report procedure can be splitted up in a part that
-selects the database rows and outputs them as an XML document according to the
-DTD, and in a part that translates the document into other formats. Of course,
-the latter part can be solved in a generic way, e.g. there may be configurable
-backends for all DTDs that follow the approach and have element types for
-tables and columns.</P
-><P
->XML plays the role of a configurable intermediate format. The database
-extraction function can be written without having to know the details of
-typesetting; the backends can be written without having to know the details of
-the database.</P
-><P
->Of course, there are traditional solutions. One can define an ad hoc
-intermediate text file format. This disadvantage is that there are no names for
-the pieces of the format, and that such formats usually lack of documentation
-because of this. Another solution would be to have a binary representation,
-either as language-dependent or language-independent structure (example of the
-latter can be found in RPC implementations). The disadvantage is that it is
-harder to view such representations, one has to write pretty printers for this
-purpose. It is also more difficult to enter test data; XML is plain text that
-can be written using an arbitrary editor (Emacs has even a good XML mode,
-PSGML). All these alternatives suffer from a missing structure checker,
-i.e. the programs processing these formats usually do not check the input file
-or input object in detail; XML parsers check the syntax of the input (the
-so-called well-formedness check), and the advanced parsers like <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-> even
-verify that the structure matches the DTD (the so-called validation).</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->XML can be used as configurable communication language. A fundamental problem
-of every communication is that sender and receiver must follow the same
-conventions about the language. For data exchange, the question is usually
-which data records and fields are available, how they are syntactically
-composed, and which values are possible for the various fields. Similar
-questions arise for text document exchange. XML does not answer these problems
-completely, but it reduces the number of ambiguities for such conventions: The
-outlines of the syntax are specified by the DTD (but not necessarily the
-details), and XML introduces canonical names for the components of documents
-such that it is simpler to describe the rest of the syntax and the semantics
-informally.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->XML is a data storage format. Currently, every software product tends to use
-its own way to store data; commercial software often does not describe such
-formats, and it is a pain to integrate such software into a bigger project. 
-XML can help to improve this situation when several applications share the same
-syntax of data files. DTDs are then neutral instances that check the format of
-data files independent of applications. </P
-></LI
-></UL
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="p34.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="x107.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->User's guide</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="p34.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->Highlights of XML</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/c533.html b/helm/DEVEL/pxp/pxp/doc/manual/html/c533.html
deleted file mode 100644 (file)
index c58e6ff..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Using PXP</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="User's guide"
-HREF="p34.html"><LINK
-REL="PREVIOUS"
-TITLE="A complete example: The readme DTD"
-HREF="x468.html"><LINK
-REL="NEXT"
-TITLE="How to parse a document from an application"
-HREF="x550.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="x468.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
-></TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="x550.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN533"
->Chapter 2. Using <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-></A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
->2.1. <A
-HREF="c533.html#AEN536"
->Validation</A
-></DT
-><DT
->2.2. <A
-HREF="x550.html"
->How to parse a document from an application</A
-></DT
-><DT
->2.3. <A
-HREF="x675.html"
->Class-based processing of the node tree</A
-></DT
-><DT
->2.4. <A
-HREF="x738.html"
->Example: An HTML backend for the <I
-CLASS="EMPHASIS"
->readme</I
->
-DTD</A
-></DT
-></DL
-></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN536"
->2.1. Validation</A
-></H1
-><P
->The parser can be used to <I
-CLASS="EMPHASIS"
->validate</I
-> a document. This means
-that all the constraints that must hold for a valid document are actually
-checked. Validation is the default mode of <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
->, i.e. every document is
-validated while it is being parsed.</P
-><P
->In the <TT
-CLASS="LITERAL"
->examples</TT
-> directory of the distribution you find the
-<TT
-CLASS="LITERAL"
->pxpvalidate</TT
-> application. It is invoked in the following way:
-
-<PRE
-CLASS="PROGRAMLISTING"
->pxpvalidate [ -wf ] <TT
-CLASS="REPLACEABLE"
-><I
->file</I
-></TT
->...</PRE
->
-
-The files mentioned on the command line are validated, and every warning and
-every error messages are printed to stderr.</P
-><P
->The -wf switch modifies the behaviour such that a well-formedness parser is
-simulated. In this mode, the ELEMENT, ATTLIST, and NOTATION declarations of the
-DTD are ignored, and only the ENTITY declarations will take effect. This mode
-is intended for documents lacking a DTD. Please note that the parser still
-scans the DTD fully and will report all errors in the DTD; such checks are not
-required by a well-formedness parser.</P
-><P
->The <TT
-CLASS="LITERAL"
->pxpvalidate</TT
-> application is the simplest sensible program
-using <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
->, you may consider it as "hello world" program. </P
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="x468.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="x550.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->A complete example: The <I
-CLASS="EMPHASIS"
->readme</I
-> DTD</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="p34.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->How to parse a document from an application</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/c893.html b/helm/DEVEL/pxp/pxp/doc/manual/html/c893.html
deleted file mode 100644 (file)
index 0e564fb..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->The objects representing the document</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="User's guide"
-HREF="p34.html"><LINK
-REL="PREVIOUS"
-TITLE="Example: An HTML backend for the readme
-DTD"
-HREF="x738.html"><LINK
-REL="NEXT"
-TITLE="The class type node"
-HREF="x939.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="x738.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
-></TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="x939.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN893"
->Chapter 3. The objects representing the document</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
->3.1. <A
-HREF="c893.html#AEN897"
->The <TT
-CLASS="LITERAL"
->document</TT
-> class</A
-></DT
-><DT
->3.2. <A
-HREF="x939.html"
->The class type <TT
-CLASS="LITERAL"
->node</TT
-></A
-></DT
-><DT
->3.3. <A
-HREF="x1439.html"
->The class type <TT
-CLASS="LITERAL"
->extension</TT
-></A
-></DT
-><DT
->3.4. <A
-HREF="x1496.html"
->Details of the mapping from XML text to the tree representation</A
-></DT
-></DL
-></DIV
-><P
-><I
-CLASS="EMPHASIS"
->This description might be out-of-date. See the module interface files
-for updated information.</I
-></P
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN897"
->3.1. The <TT
-CLASS="LITERAL"
->document</TT
-> class</A
-></H1
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->class [ 'ext ] document :
-  Pxp_types.collect_warnings -&#62; 
-  object
-    method init_xml_version : string -&#62; unit
-    method init_root : 'ext node -&#62; unit
-
-    method xml_version : string
-    method xml_standalone : bool
-    method dtd : dtd
-    method root : 'ext node
-
-    method encoding : Pxp_types.rep_encoding
-
-    method add_pinstr : proc_instruction -&#62; unit
-    method pinstr : string -&#62; proc_instruction list
-    method pinstr_names : string list
-
-    method write : Pxp_types.output_stream -&#62; Pxp_types.encoding -&#62; unit
-
-  end
-;;</PRE
->
-
-The methods beginning with <TT
-CLASS="LITERAL"
->init_</TT
-> are only for internal use
-of the parser.</P
-><P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->xml_version</TT
->: returns the version string at the beginning of
-the document. For example, "1.0" is returned if the document begins with
-<TT
-CLASS="LITERAL"
->&lt;?xml version="1.0"?&gt;</TT
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->xml_standalone</TT
->: returns the boolean value of
-<TT
-CLASS="LITERAL"
->standalone</TT
-> declaration in the XML declaration. If the
-<TT
-CLASS="LITERAL"
->standalone</TT
-> attribute is missing, <TT
-CLASS="LITERAL"
->false</TT
-> is
-returned. </P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->dtd</TT
->: returns a reference to the global DTD object.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->root</TT
->: returns a reference to the root element.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->encoding</TT
->: returns the internal encoding of the
-document. This means that all strings of which the document consists are
-encoded in this character set.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->pinstr</TT
->: returns the processing instructions outside the DTD
-and outside the root element. The argument passed to the method names a
-<I
-CLASS="EMPHASIS"
->target</I
->, and the method returns all instructions with this
-target. The target is the first word inside <TT
-CLASS="LITERAL"
->&lt;?</TT
-> and
-<TT
-CLASS="LITERAL"
->?&gt;</TT
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->pinstr_names</TT
->: returns the names of the processing instructions</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->add_pinstr</TT
->: adds another processing instruction. This method
-is used by the parser itself to enter the instructions returned by
-<TT
-CLASS="LITERAL"
->pinstr</TT
->, but you can also enter additional instructions.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->write</TT
->: writes the document to the passed stream as XML
-text using the passed (external) encoding. The generated text is always valid
-XML and can be parsed by PXP; however, the text is badly formatted (this is not
-a pretty printer).</P
-></LI
-></UL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="x738.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="x939.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->Example: An HTML backend for the <I
-CLASS="EMPHASIS"
->readme</I
->
-DTD</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="p34.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->The class type <TT
-CLASS="LITERAL"
->node</TT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/index.html b/helm/DEVEL/pxp/pxp/doc/manual/html/index.html
deleted file mode 100644 (file)
index 3c07ff2..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->The PXP user's guide</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="NEXT"
-TITLE="User's guide"
-HREF="p34.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="BOOK"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="BOOK"
-><A
-NAME="AEN1"
-></A
-><DIV
-CLASS="TITLEPAGE"
-><H1
-CLASS="TITLE"
-><A
-NAME="AEN1"
->The PXP user's guide</A
-></H1
-><H3
-CLASS="AUTHOR"
->Gerd Stolpmann</H3
-><P
-CLASS="COPYRIGHT"
->Copyright &copy; 1999, 2000 by <SPAN
-CLASS="HOLDER"
->Gerd Stolpmann</SPAN
-></P
-><DIV
-><DIV
-CLASS="ABSTRACT"
-><P
-></P
-><P
-><SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-> is a validating parser for XML-1.0 which has been
-written entirely in Objective Caml.</P
-><DIV
-CLASS="FORMALPARA"
-><P
-><H1
-CLASS="TITLE"
-><A
-NAME="AEN18"
->Download <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
->:</A
-></H1
->The free <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-> library can be downloaded at
-<A
-HREF="http://www.ocaml-programming.de/packages/"
-TARGET="_top"
->http://www.ocaml-programming.de/packages/</A
->. This user's guide is included.
-Newest releases of <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-> will be announced in
-<A
-HREF="http://www.npc.de/ocaml/linkdb/"
-TARGET="_top"
->The OCaml Link
-Database</A
->.</P
-></DIV
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="LEGALNOTICE"
-><P
-><B
->License</B
-></P
-><P
->This document, and the described software, "<SPAN
-CLASS="ACRONYM"
->PXP</SPAN
->", are copyright by
-Gerd Stolpmann. </P
-><P
->Permission is hereby granted, free of charge, to any person obtaining
-a copy of this document and the "<SPAN
-CLASS="ACRONYM"
->PXP</SPAN
->" software (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:</P
-><P
->The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.</P
-><P
->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 Gerd Stolpmann be liable for any claim, damages or
-other liability, whether in an action of contract, tort or otherwise,
-arising from, out of or in connection with the Software or the use or
-other dealings in the software.</P
-></DIV
-><HR></DIV
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
->I. <A
-HREF="p34.html"
->User's guide</A
-></DT
-><DD
-><DL
-><DT
->1. <A
-HREF="c36.html"
->What is XML?</A
-></DT
-><DD
-><DL
-><DT
->1.1. <A
-HREF="c36.html#AEN38"
->Introduction</A
-></DT
-><DT
->1.2. <A
-HREF="x107.html"
->Highlights of XML</A
-></DT
-><DT
->1.3. <A
-HREF="x468.html"
->A complete example: The <I
-CLASS="EMPHASIS"
->readme</I
-> DTD</A
-></DT
-></DL
-></DD
-><DT
->2. <A
-HREF="c533.html"
->Using <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-></A
-></DT
-><DD
-><DL
-><DT
->2.1. <A
-HREF="c533.html#AEN536"
->Validation</A
-></DT
-><DT
->2.2. <A
-HREF="x550.html"
->How to parse a document from an application</A
-></DT
-><DT
->2.3. <A
-HREF="x675.html"
->Class-based processing of the node tree</A
-></DT
-><DT
->2.4. <A
-HREF="x738.html"
->Example: An HTML backend for the <I
-CLASS="EMPHASIS"
->readme</I
->
-DTD</A
-></DT
-></DL
-></DD
-><DT
->3. <A
-HREF="c893.html"
->The objects representing the document</A
-></DT
-><DD
-><DL
-><DT
->3.1. <A
-HREF="c893.html#AEN897"
->The <TT
-CLASS="LITERAL"
->document</TT
-> class</A
-></DT
-><DT
->3.2. <A
-HREF="x939.html"
->The class type <TT
-CLASS="LITERAL"
->node</TT
-></A
-></DT
-><DT
->3.3. <A
-HREF="x1439.html"
->The class type <TT
-CLASS="LITERAL"
->extension</TT
-></A
-></DT
-><DT
->3.4. <A
-HREF="x1496.html"
->Details of the mapping from XML text to the tree representation</A
-></DT
-></DL
-></DD
-><DT
->4. <A
-HREF="c1567.html"
->Configuring and calling the parser</A
-></DT
-><DD
-><DL
-><DT
->4.1. <A
-HREF="c1567.html#AEN1569"
->Overview</A
-></DT
-><DT
->4.2. <A
-HREF="x1629.html"
->Resolvers and sources</A
-></DT
-><DT
->4.3. <A
-HREF="x1812.html"
->The DTD classes</A
-></DT
-><DT
->4.4. <A
-HREF="x1818.html"
->Invoking the parser</A
-></DT
-><DT
->4.5. <A
-HREF="x1965.html"
->Updates</A
-></DT
-></DL
-></DD
-></DL
-></DD
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->&nbsp;</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
->&nbsp;</TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="p34.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->&nbsp;</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
->&nbsp;</TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->User's guide</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/markup.css b/helm/DEVEL/pxp/pxp/doc/manual/html/markup.css
deleted file mode 100644 (file)
index 67dfaec..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-.acronym { 
-  font-weight: bold;
-  color: #c71585
-}
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/p34.html b/helm/DEVEL/pxp/pxp/doc/manual/html/p34.html
deleted file mode 100644 (file)
index 9db427d..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->User's guide</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="PREVIOUS"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="NEXT"
-TITLE="What is XML?"
-HREF="c36.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="PART"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="index.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
-></TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="c36.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="PART"
-><A
-NAME="AEN34"
-></A
-><DIV
-CLASS="TITLEPAGE"
-><H1
-CLASS="TITLE"
->I. User's guide</H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
->1. <A
-HREF="c36.html"
->What is XML?</A
-></DT
-><DT
->2. <A
-HREF="c533.html"
->Using <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-></A
-></DT
-><DT
->3. <A
-HREF="c893.html"
->The objects representing the document</A
-></DT
-><DT
->4. <A
-HREF="c1567.html"
->Configuring and calling the parser</A
-></DT
-></DL
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="index.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="c36.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->The PXP user's guide</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
->&nbsp;</TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->What is XML?</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/done b/helm/DEVEL/pxp/pxp/doc/manual/html/pic/done
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/extension_general.gif b/helm/DEVEL/pxp/pxp/doc/manual/html/pic/extension_general.gif
deleted file mode 100644 (file)
index 6cc260a..0000000
Binary files a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/extension_general.gif and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_add.gif b/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_add.gif
deleted file mode 100644 (file)
index 0091db2..0000000
Binary files a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_add.gif and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_clone.gif b/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_clone.gif
deleted file mode 100644 (file)
index 97cd363..0000000
Binary files a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_clone.gif and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_delete.gif b/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_delete.gif
deleted file mode 100644 (file)
index d521123..0000000
Binary files a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_delete.gif and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_general.gif b/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_general.gif
deleted file mode 100644 (file)
index 5f6358c..0000000
Binary files a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_general.gif and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_term.gif b/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_term.gif
deleted file mode 100644 (file)
index 5644c91..0000000
Binary files a/helm/DEVEL/pxp/pxp/doc/manual/html/pic/node_term.gif and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/x107.html b/helm/DEVEL/pxp/pxp/doc/manual/html/x107.html
deleted file mode 100644 (file)
index 102aba2..0000000
+++ /dev/null
@@ -1,1694 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Highlights of XML</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="What is XML?"
-HREF="c36.html"><LINK
-REL="PREVIOUS"
-TITLE="What is XML?"
-HREF="c36.html"><LINK
-REL="NEXT"
-TITLE="A complete example: The readme DTD"
-HREF="x468.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="c36.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 1. What is XML?</TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="x468.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN107"
->1.2. Highlights of XML</A
-></H1
-><P
->This section explains many of the features of XML, but not all, and some
-features not in detail. For a complete description, see the <A
-HREF="http://www.w3.org/TR/1998/REC-xml-19980210.html"
-TARGET="_top"
->XML
-specification</A
->.</P
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN111"
->1.2.1. The DTD and the instance</A
-></H2
-><P
->The DTD contains various declarations; in general you can only use a feature if
-you have previously declared it. The document instance file may contain the
-full DTD, but it is also possible to split the DTD into an internal and an
-external subset. A document must begin as follows if the full DTD is included:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;?xml version="1.0" encoding="<TT
-CLASS="REPLACEABLE"
-><I
->Your encoding</I
-></TT
->"?&gt;
-&lt;!DOCTYPE <TT
-CLASS="REPLACEABLE"
-><I
->root</I
-></TT
-> [
-  <TT
-CLASS="REPLACEABLE"
-><I
->Declarations</I
-></TT
->
-]&gt;</PRE
->
-
-These declarations are called the <I
-CLASS="EMPHASIS"
->internal subset</I
->. Note
-that the usage of entities and conditional sections is restricted within the
-internal subset.</P
-><P
->If the declarations are located in a different file, you can refer to this file
-as follows:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;?xml version="1.0" encoding="<TT
-CLASS="REPLACEABLE"
-><I
->Your encoding</I
-></TT
->"?&gt;
-&lt;!DOCTYPE <TT
-CLASS="REPLACEABLE"
-><I
->root</I
-></TT
-> SYSTEM "<TT
-CLASS="REPLACEABLE"
-><I
->file name</I
-></TT
->"&gt;</PRE
->
-
-The declarations in the file are called the <I
-CLASS="EMPHASIS"
->external
-subset</I
->. The file name is called the <I
-CLASS="EMPHASIS"
->system
-identifier</I
->. 
-It is also possible to refer to the file by a so-called
-<I
-CLASS="EMPHASIS"
->public identifier</I
->, but most XML applications won't use
-this feature.</P
-><P
->You can also specify both internal and external subsets. In this case, the
-declarations of both subsets are mixed, and if there are conflicts, the
-declaration of the internal subset overrides those of the external subset with
-the same name. This looks as follows:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;?xml version="1.0" encoding="<TT
-CLASS="REPLACEABLE"
-><I
->Your encoding</I
-></TT
->"?&gt;
-&lt;!DOCTYPE <TT
-CLASS="REPLACEABLE"
-><I
->root</I
-></TT
->  SYSTEM "<TT
-CLASS="REPLACEABLE"
-><I
->file name</I
-></TT
->" [
-  <TT
-CLASS="REPLACEABLE"
-><I
->Declarations</I
-></TT
->
-]&gt;</PRE
-></P
-><P
->The XML declaration (the string beginning with <TT
-CLASS="LITERAL"
->&lt;?xml</TT
-> and
-ending at <TT
-CLASS="LITERAL"
->?&gt;</TT
->) should specify the encoding of the
-file. Common values are UTF-8, and the ISO-8859 series of character sets. Note
-that every file parsed by the XML processor can begin with an XML declaration
-and that every file may have its own encoding.</P
-><P
->The name of the root element must be mentioned directly after the
-<TT
-CLASS="LITERAL"
->DOCTYPE</TT
-> string. This means that a full document instance
-looks like
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;?xml version="1.0" encoding="<TT
-CLASS="REPLACEABLE"
-><I
->Your encoding</I
-></TT
->"?&gt;
-&lt;!DOCTYPE <TT
-CLASS="REPLACEABLE"
-><I
->root</I
-></TT
->  SYSTEM "<TT
-CLASS="REPLACEABLE"
-><I
->file name</I
-></TT
->" [
-  <TT
-CLASS="REPLACEABLE"
-><I
->Declarations</I
-></TT
->
-]&gt;
-
-&lt;<TT
-CLASS="REPLACEABLE"
-><I
->root</I
-></TT
->&gt;
-  <TT
-CLASS="REPLACEABLE"
-><I
->inner contents</I
-></TT
->
-&lt;/<TT
-CLASS="REPLACEABLE"
-><I
->root</I
-></TT
->&gt;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN146"
->1.2.2. Reserved characters</A
-></H2
-><P
->Some characters are generally reserved to indicate markup such that they cannot
-be used for character data. These characters are &lt;, &gt;, and
-&amp;. Furthermore, single and double quotes are sometimes reserved. If you
-want to include such a character as character, write it as follows:
-
-<P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->&amp;lt;</TT
-> instead of &lt;</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->&amp;gt;</TT
-> instead of &gt;</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->&amp;amp;</TT
-> instead of &amp;</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->&amp;apos;</TT
-> instead of '</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->&amp;quot;</TT
-> instead of "</P
-></LI
-></UL
->
-
-All other characters are free in the document instance. It is possible to
-include a character by its position in the Unicode alphabet: 
-
-<PRE
-CLASS="PROGRAMLISTING"
->&amp;#<TT
-CLASS="REPLACEABLE"
-><I
->n</I
-></TT
->;</PRE
->
-
-where <TT
-CLASS="REPLACEABLE"
-><I
->n</I
-></TT
-> is the decimal number of the
-character. Alternatively, you can specify the character by its hexadecimal
-number: 
-
-<PRE
-CLASS="PROGRAMLISTING"
->&amp;#x<TT
-CLASS="REPLACEABLE"
-><I
->n</I
-></TT
->;</PRE
->
-
-In the scope of declarations, the character % is no longer free. To include it
-as character, you must use the notations <TT
-CLASS="LITERAL"
->&amp;#37;</TT
-> or
-<TT
-CLASS="LITERAL"
->&amp;#x25;</TT
->.</P
-><P
->Note that besides &amp;lt;, &amp;gt;, &amp;amp;,
-&amp;apos;, and &amp;quot; there are no predefines character entities. This is
-different from HTML which defines a list of characters that can be referenced
-by name (e.g. &amp;auml; for Ã¤); however, if you prefer named characters, you
-can declare such entities yourself (see below).</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN173"
->1.2.3. Elements and ELEMENT declarations</A
-></H2
-><P
->Elements structure the document instance in a hierarchical way. There is a
-top-level element, the <I
-CLASS="EMPHASIS"
->root element</I
->, which contains a
-sequence of inner elements and character sections. The inner elements are
-structured in the same way. Every element has an <I
-CLASS="EMPHASIS"
->element
-type</I
->. The beginning of the element is indicated by a <I
-CLASS="EMPHASIS"
->start
-tag</I
->, written
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;<TT
-CLASS="REPLACEABLE"
-><I
->element-type</I
-></TT
->&gt;</PRE
->
-
-and the element continues until the corresponding <I
-CLASS="EMPHASIS"
->end tag</I
->
-is reached:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;/<TT
-CLASS="REPLACEABLE"
-><I
->element-type</I
-></TT
->&gt;</PRE
->
-
-In XML, it is not allowed to omit start or end tags, even if the DTD would
-permit this. Note that there are no special rules how to interpret spaces or
-newlines near start or end tags; all spaces and newlines count.</P
-><P
->Every element type must be declared before it can be used. The declaration
-consists of two parts: the ELEMENT declaration describes the content model,
-i.e. which inner elements are allowed; the ATTLIST declaration describes the
-attributes of the element.</P
-><P
->An element can simply allow everything as content. This is written:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;!ELEMENT <TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
-> ANY&gt;</PRE
->
-
-On the opposite, an element can be forced to be empty; declared by:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;!ELEMENT <TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
-> EMPTY&gt;</PRE
->
-
-Note that there is an abbreviated notation for empty element instances:
-<TT
-CLASS="LITERAL"
->&lt;<TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->/&gt;</TT
->. </P
-><P
->There are two more sophisticated forms of declarations: so-called
-<I
-CLASS="EMPHASIS"
->mixed declarations</I
->, and <I
-CLASS="EMPHASIS"
->regular
-expressions</I
->. An element with mixed content contains character data
-interspersed with inner elements, and the set of allowed inner elements can be
-specified. In contrast to this, a regular expression declaration does not allow
-character data, but the inner elements can be described by the more powerful
-means of regular expressions.</P
-><P
->A declaration for mixed content looks as follows:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;!ELEMENT <TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
-> (#PCDATA | <TT
-CLASS="REPLACEABLE"
-><I
->element<SUB
->1</SUB
-></I
-></TT
-> | ... | <TT
-CLASS="REPLACEABLE"
-><I
->element<SUB
->n</SUB
-></I
-></TT
-> )*&gt;</PRE
->
-
-or if you do not want to allow any inner element, simply
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;!ELEMENT <TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
-> (#PCDATA)&gt;</PRE
-></P
-><BLOCKQUOTE
-CLASS="BLOCKQUOTE"
-><P
-><B
->Example</B
-></P
-><P
->If element type <TT
-CLASS="LITERAL"
->q</TT
-> is declared as
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT q (#PCDATA | r | s)*&#62;</PRE
->
-
-this is a legal instance:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;q&#62;This is character data&#60;r&#62;&#60;/r&#62;with &#60;s&#62;&#60;/s&#62;inner elements&#60;/q&#62;</PRE
->
-
-But this is illegal because <TT
-CLASS="LITERAL"
->t</TT
-> has not been enumerated in the
-declaration:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;q&#62;This is character data&#60;r&#62;&#60;/r&#62;with &#60;t&#62;&#60;/t&#62;inner elements&#60;/q&#62;</PRE
-></P
-></BLOCKQUOTE
-><P
->The other form uses a regular expression to describe the possible contents:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;!ELEMENT <TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
-> <TT
-CLASS="REPLACEABLE"
-><I
->regexp</I
-></TT
->&gt;</PRE
->
-
-The following well-known regexp operators are allowed:
-
-<P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
-><TT
-CLASS="REPLACEABLE"
-><I
->element-name</I
-></TT
-></TT
-></P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->(<TT
-CLASS="REPLACEABLE"
-><I
->subexpr<SUB
->1</SUB
-></I
-></TT
-> ,</TT
-> ... <TT
-CLASS="LITERAL"
->, <TT
-CLASS="REPLACEABLE"
-><I
->subexpr<SUB
->n</SUB
-></I
-></TT
-> )</TT
-></P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->(<TT
-CLASS="REPLACEABLE"
-><I
->subexpr<SUB
->1</SUB
-></I
-></TT
-> |</TT
-> ... <TT
-CLASS="LITERAL"
->| <TT
-CLASS="REPLACEABLE"
-><I
->subexpr<SUB
->n</SUB
-></I
-></TT
-> )</TT
-></P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
-><TT
-CLASS="REPLACEABLE"
-><I
->subexpr</I
-></TT
->*</TT
-></P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
-><TT
-CLASS="REPLACEABLE"
-><I
->subexpr</I
-></TT
->+</TT
-></P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
-><TT
-CLASS="REPLACEABLE"
-><I
->subexpr</I
-></TT
->?</TT
-></P
-></LI
-></UL
->
-
-The <TT
-CLASS="LITERAL"
->,</TT
-> operator indicates a sequence of sub-models, the
-<TT
-CLASS="LITERAL"
->|</TT
-> operator describes alternative sub-models. The
-<TT
-CLASS="LITERAL"
->*</TT
-> indicates zero or more repetitions, and
-<TT
-CLASS="LITERAL"
->+</TT
-> one or more repetitions. Finally, <TT
-CLASS="LITERAL"
->?</TT
-> can
-be used for optional sub-models. As atoms the regexp can contain names of
-elements; note that it is not allowed to include <TT
-CLASS="LITERAL"
->#PCDATA</TT
->.</P
-><P
->The exact syntax of the regular expressions is rather strange. This can be
-explained best by a list of constraints:
-
-<P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
->The outermost expression must not be
-<TT
-CLASS="LITERAL"
-><TT
-CLASS="REPLACEABLE"
-><I
->element-name</I
-></TT
-></TT
->. </P
-><P
-><I
-CLASS="EMPHASIS"
->Illegal:</I
-> 
-<TT
-CLASS="LITERAL"
->&#60;!ELEMENT x y&#62;</TT
->; this must be written as
-<TT
-CLASS="LITERAL"
->&#60;!ELEMENT x (y)&#62;</TT
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->For the unary operators <TT
-CLASS="LITERAL"
-><TT
-CLASS="REPLACEABLE"
-><I
->subexpr</I
-></TT
->*</TT
->,
-<TT
-CLASS="LITERAL"
-><TT
-CLASS="REPLACEABLE"
-><I
->subexpr</I
-></TT
->+</TT
->, and
-<TT
-CLASS="LITERAL"
-><TT
-CLASS="REPLACEABLE"
-><I
->subexpr</I
-></TT
->?</TT
->, the
-<TT
-CLASS="LITERAL"
-><TT
-CLASS="REPLACEABLE"
-><I
->subexpr</I
-></TT
-></TT
-> must not be again an
-unary operator.</P
-><P
-><I
-CLASS="EMPHASIS"
->Illegal:</I
-> 
-<TT
-CLASS="LITERAL"
->&#60;!ELEMENT x y**&#62;</TT
->; this must be written as
-<TT
-CLASS="LITERAL"
->&#60;!ELEMENT x (y*)*&#62;</TT
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->Between <TT
-CLASS="LITERAL"
->)</TT
-> and one of the unary operatory
-<TT
-CLASS="LITERAL"
->*</TT
->, <TT
-CLASS="LITERAL"
->+</TT
->, or <TT
-CLASS="LITERAL"
->?</TT
->, there must
-not be whitespace.</P
-><P
-><I
-CLASS="EMPHASIS"
->Illegal:</I
-> 
-<TT
-CLASS="LITERAL"
->&#60;!ELEMENT x (y|z) *&#62;</TT
->; this must be written as
-<TT
-CLASS="LITERAL"
->&#60;!ELEMENT x (y|z)*&#62;</TT
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->There is the additional constraint that the
-right parenthsis must be contained in the same entity as the left parenthesis;
-see the section about parsed entities below.</P
-></LI
-></UL
->&#13;</P
-><P
->Note that there is another restriction on regular expressions which must be
-deterministic. This means that the parser must be able to see by looking at the
-next token which alternative is actually used, or whether the repetition
-stops. The reason for this is simply compatability with SGML (there is no
-intrinsic reason for this rule; XML can live without this restriction).</P
-><BLOCKQUOTE
-CLASS="BLOCKQUOTE"
-><P
-><B
->Example</B
-></P
-><P
->The elements are declared as follows:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT q (r?, (s | t)+)&#62;
-&#60;!ELEMENT r (#PCDATA)&#62;
-&#60;!ELEMENT s EMPTY&#62;
-&#60;!ELEMENT t (q | r)&#62;</PRE
->
-
-This is a legal instance:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;q&#62;&#60;r&#62;Some characters&#60;/r&#62;&#60;s/&#62;&#60;/q&#62;</PRE
->
-
-(Note: <TT
-CLASS="LITERAL"
->&lt;s/&gt;</TT
-> is an abbreviation for
-<TT
-CLASS="LITERAL"
->&lt;s&gt;&lt;/s&gt;</TT
->.)
-
-It would be illegal to leave <TT
-CLASS="LITERAL"
->&#60;s/&#62;</TT
-> out because at
-least one instance of <TT
-CLASS="LITERAL"
->s</TT
-> or <TT
-CLASS="LITERAL"
->t</TT
-> must be
-present. It would be illegal, too, if characters existed outside the
-<TT
-CLASS="LITERAL"
->r</TT
-> element; the only exception is white space. -- This is
-legal, too:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;q&#62;&#60;s/&#62;&#60;t&#62;&#60;q&#62;&#60;s/&#62;&#60;/q&#62;&#60;/t&#62;&#60;/q&#62;</PRE
-></P
-></BLOCKQUOTE
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN304"
->1.2.4. Attribute lists and ATTLIST declarations</A
-></H2
-><P
->Elements may have attributes. These are put into the start tag of an element as
-follows:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;<TT
-CLASS="REPLACEABLE"
-><I
->element-name</I
-></TT
-> <TT
-CLASS="REPLACEABLE"
-><I
->attribute<SUB
->1</SUB
-></I
-></TT
->="<TT
-CLASS="REPLACEABLE"
-><I
->value<SUB
->1</SUB
-></I
-></TT
->" ... <TT
-CLASS="REPLACEABLE"
-><I
->attribute<SUB
->n</SUB
-></I
-></TT
->="<TT
-CLASS="REPLACEABLE"
-><I
->value<SUB
->n</SUB
-></I
-></TT
->"&gt;</PRE
->
-
-Instead of
-<TT
-CLASS="LITERAL"
->"<TT
-CLASS="REPLACEABLE"
-><I
->value<SUB
->k</SUB
-></I
-></TT
->"</TT
->
-it is also possible to use single quotes as in
-<TT
-CLASS="LITERAL"
->'<TT
-CLASS="REPLACEABLE"
-><I
->value<SUB
->k</SUB
-></I
-></TT
->'</TT
->.
-Note that you cannot use double quotes literally within the value of the
-attribute if double quotes are the delimiters; the same applies to single
-quotes. You can generally not use &lt; and &amp; as characters in attribute
-values. It is possible to include the paraphrases &amp;lt;, &amp;gt;,
-&amp;amp;, &amp;apos;, and &amp;quot; (and any other reference to a general
-entity as long as the entity is not defined by an external file) as well as
-&amp;#<TT
-CLASS="REPLACEABLE"
-><I
->n</I
-></TT
->;.</P
-><P
->Before you can use an attribute you must declare it. An ATTLIST declaration
-looks as follows:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;!ATTLIST <TT
-CLASS="REPLACEABLE"
-><I
->element-name</I
-></TT
-> 
-          <TT
-CLASS="REPLACEABLE"
-><I
->attribute-name</I
-></TT
-> <TT
-CLASS="REPLACEABLE"
-><I
->attribute-type</I
-></TT
-> <TT
-CLASS="REPLACEABLE"
-><I
->attribute-default</I
-></TT
->
-          ...
-          <TT
-CLASS="REPLACEABLE"
-><I
->attribute-name</I
-></TT
-> <TT
-CLASS="REPLACEABLE"
-><I
->attribute-type</I
-></TT
-> <TT
-CLASS="REPLACEABLE"
-><I
->attribute-default</I
-></TT
->
-&gt;</PRE
->
-
-There are a lot of types, but most important are:
-
-<P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->CDATA</TT
->: Every string is allowed as attribute value.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->NMTOKEN</TT
->: Every nametoken is allowed as attribute
-value. Nametokens consist (mainly) of letters, digits, ., :, -, _ in arbitrary
-order.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->NMTOKENS</TT
->: A space-separated list of nametokens is allowed as
-attribute value.</P
-></LI
-></UL
->
-
-The most interesting default declarations are:
-
-<P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->#REQUIRED</TT
->: The attribute must be specified.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->#IMPLIED</TT
->: The attribute can be specified but also can be
-left out. The application can find out whether the attribute was present or
-not. </P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->"<TT
-CLASS="REPLACEABLE"
-><I
->value</I
-></TT
->"</TT
-> or
-<TT
-CLASS="LITERAL"
->'<TT
-CLASS="REPLACEABLE"
-><I
->value</I
-></TT
->'</TT
->: This particular value is
-used as default if the attribute is omitted in the element.</P
-></LI
-></UL
-></P
-><BLOCKQUOTE
-CLASS="BLOCKQUOTE"
-><P
-><B
->Example</B
-></P
-><P
->This is a valid attribute declaration for element type <TT
-CLASS="LITERAL"
->r</TT
->:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ATTLIST r 
-          x CDATA    #REQUIRED
-          y NMTOKEN  #IMPLIED
-          z NMTOKENS "one two three"&#62;</PRE
->
-
-This means that <TT
-CLASS="LITERAL"
->x</TT
-> is a required attribute that cannot be
-left out, while <TT
-CLASS="LITERAL"
->y</TT
-> and <TT
-CLASS="LITERAL"
->z</TT
-> are optional. The
-XML parser indicates the application whether <TT
-CLASS="LITERAL"
->y</TT
-> is present or
-not, but if <TT
-CLASS="LITERAL"
->z</TT
-> is missing the default value
-"one two three" is returned automatically. </P
-><P
->This is a valid example of these attributes:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;r x="He said: &#38;quot;I don't like quotes!&#38;quot;" y='1'&#62;</PRE
-></P
-></BLOCKQUOTE
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN368"
->1.2.5. Parsed entities</A
-></H2
-><P
->Elements describe the logical structure of the document, while
-<I
-CLASS="EMPHASIS"
->entities</I
-> determine the physical structure. Entities are
-the pieces of text the parser operates on, mostly files and macros. Entities
-may be <I
-CLASS="EMPHASIS"
->parsed</I
-> in which case the parser reads the text and
-interprets it as XML markup, or <I
-CLASS="EMPHASIS"
->unparsed</I
-> which simply
-means that the data of the entity has a foreign format (e.g. a GIF icon).</P
-><P
->If the parsed entity is going to be used as part of the DTD, it
-is called a <I
-CLASS="EMPHASIS"
->parameter entity</I
->. You can declare a parameter
-entity with a fixed text as content by:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;!ENTITY % <TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
-> "<TT
-CLASS="REPLACEABLE"
-><I
->value</I
-></TT
->"&gt;</PRE
->
-
-Within the DTD, you can <I
-CLASS="EMPHASIS"
->refer to</I
-> this entity, i.e. read
-the text of the entity, by:
-
-<PRE
-CLASS="PROGRAMLISTING"
->%<TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->;</PRE
->
-
-Such entities behave like macros, i.e. when they are referred to, the
-macro text is inserted and read instead of the original text.
-
-<BLOCKQUOTE
-CLASS="BLOCKQUOTE"
-><P
-><B
->Example</B
-></P
-><P
->For example, you can declare two elements with the same content model by:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ENTITY % model "a | b | c"&#62;
-&#60;!ELEMENT x (%model;)&#62;
-&#60;!ELEMENT y (%model;)&#62;</PRE
->&#13;</P
-></BLOCKQUOTE
->
-
-If the contents of the entity are given as string constant, the entity is
-called an <I
-CLASS="EMPHASIS"
->internal</I
-> entity. It is also possible to name a
-file to be used as content (an <I
-CLASS="EMPHASIS"
->external</I
-> entity):
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;!ENTITY % <TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
-> SYSTEM "<TT
-CLASS="REPLACEABLE"
-><I
->file name</I
-></TT
->"&gt;</PRE
->
-
-There are some restrictions for parameter entities:
-
-<P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
->If the internal parameter entity contains the first token of a declaration
-(i.e. <TT
-CLASS="LITERAL"
->&lt;!</TT
->), it must also contain the last token of the
-declaration, i.e. the <TT
-CLASS="LITERAL"
->&gt;</TT
->. This means that the entity
-either contains a whole number of complete declarations, or some text from the
-middle of one declaration.</P
-><P
-><I
-CLASS="EMPHASIS"
->Illegal:</I
->
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ENTITY % e "(a | b | c)&#62;"&#62;
-&#60;!ELEMENT x %e;</PRE
-> Because <TT
-CLASS="LITERAL"
->&lt;!</TT
-> is contained in the main
-entity, and the corresponding <TT
-CLASS="LITERAL"
->&gt;</TT
-> is contained in the
-entity <TT
-CLASS="LITERAL"
->e</TT
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->If the internal parameter entity contains a left paranthesis, it must also
-contain the corresponding right paranthesis.</P
-><P
-><I
-CLASS="EMPHASIS"
->Illegal:</I
->
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ENTITY % e "(a | b | c"&#62;
-&#60;!ELEMENT x %e;)&#62;</PRE
-> Because <TT
-CLASS="LITERAL"
->(</TT
-> is contained in the entity 
-<TT
-CLASS="LITERAL"
->e</TT
->, and the corresponding <TT
-CLASS="LITERAL"
->)</TT
-> is
-contained in the main entity.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->When reading text from an entity, the parser automatically inserts one space
-character before the entity text and one space character after the entity
-text. However, this rule is not applied within the definition of another
-entity.</P
-><P
-><I
-CLASS="EMPHASIS"
->Legal:</I
->
-<PRE
-CLASS="PROGRAMLISTING"
-> 
-&#60;!ENTITY % suffix "gif"&#62; 
-&#60;!ENTITY iconfile 'icon.%suffix;'&#62;</PRE
-> Because <TT
-CLASS="LITERAL"
->%suffix;</TT
-> is referenced within
-the definition text for <TT
-CLASS="LITERAL"
->iconfile</TT
->, no additional spaces are
-added.</P
-><P
-><I
-CLASS="EMPHASIS"
->Illegal:</I
->
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ENTITY % suffix "test"&#62;
-&#60;!ELEMENT x.%suffix; ANY&#62;</PRE
->
-Because <TT
-CLASS="LITERAL"
->%suffix;</TT
-> is referenced outside the definition
-text of another entity, the parser replaces <TT
-CLASS="LITERAL"
->%suffix;</TT
-> by
-<TT
-CLASS="LITERAL"
-><TT
-CLASS="REPLACEABLE"
-><I
->space</I
-></TT
->test<TT
-CLASS="REPLACEABLE"
-><I
->space</I
-></TT
-></TT
->. </P
-><P
-><I
-CLASS="EMPHASIS"
->Illegal:</I
->
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ENTITY % e "(a | b | c)"&#62;
-&#60;!ELEMENT x %e;*&#62;</PRE
-> Because there is a whitespace between <TT
-CLASS="LITERAL"
->)</TT
->
-and <TT
-CLASS="LITERAL"
->*</TT
->, which is illegal.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->An external parameter entity must always consist of a whole number of complete
-declarations.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->In the internal subset of the DTD, a reference to a parameter entity (internal
-or external) is only allowed at positions where a new declaration can start.</P
-></LI
-></UL
-></P
-><P
->If the parsed entity is going to be used in the document instance, it is called
-a <I
-CLASS="EMPHASIS"
->general entity</I
->. Such entities can be used as
-abbreviations for frequent phrases, or to include external files. Internal
-general entities are declared as follows:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;!ENTITY <TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
-> "<TT
-CLASS="REPLACEABLE"
-><I
->value</I
-></TT
->"&gt;</PRE
->
-
-External general entities are declared this way:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;!ENTITY <TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
-> SYSTEM "<TT
-CLASS="REPLACEABLE"
-><I
->file name</I
-></TT
->"&gt;</PRE
->
-
-References to general entities are written as:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#38;<TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->;</PRE
->
-
-The main difference between parameter and general entities is that the former
-are only recognized in the DTD and that the latter are only recognized in the
-document instance. As the DTD is parsed before the document, the parameter
-entities are expanded first; for example it is possible to use the content of a
-parameter entity as the name of a general entity:
-<TT
-CLASS="LITERAL"
->&amp;#38;%name;;</TT
-><A
-NAME="AEN445"
-HREF="#FTN.AEN445"
->[1]</A
->.</P
-><P
->General entities must respect the element hierarchy. This means that there must
-be an end tag for every start tag in the entity value, and that end tags
-without corresponding start tags are not allowed.</P
-><BLOCKQUOTE
-CLASS="BLOCKQUOTE"
-><P
-><B
->Example</B
-></P
-><P
->If the author of a document changes sometimes, it is worthwhile to set up a
-general entity containing the names of the authors. If the author changes, you
-need only to change the definition of the entity, and do not need to check all
-occurrences of authors' names:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ENTITY authors "Gerd Stolpmann"&#62;</PRE
->
-
-In the document text, you can now refer to the author names by writing
-<TT
-CLASS="LITERAL"
->&amp;authors;</TT
->.</P
-><P
-><I
-CLASS="EMPHASIS"
->Illegal:</I
->
-The following two entities are illegal because the elements in the definition
-do not nest properly:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ENTITY lengthy-tag "&#60;section textcolor='white' background='graphic'&#62;"&#62;
-&#60;!ENTITY nonsense    "&#60;a&#62;&#60;/b&#62;"&#62;</PRE
-></P
-></BLOCKQUOTE
-><P
->Earlier in this introduction we explained that there are substitutes for
-reserved characters: &amp;lt;, &amp;gt;, &amp;amp;, &amp;apos;, and
-&amp;quot;. These are simply predefined general entities; note that they are
-the only predefined entities. It is allowed to define these entities again
-as long as the meaning is unchanged.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN463"
->1.2.6. Notations and unparsed entities</A
-></H2
-><P
->Unparsed entities have a foreign format and can thus not be read by the XML
-parser. Unparsed entities are always external. The format of an unparsed entity
-must have been declared, such a format is called a
-<I
-CLASS="EMPHASIS"
->notation</I
->. The entity can then be declared by referring to
-this notation. As unparsed entities do not contain XML text, it is not possible
-to include them directly into the document; you can only declare attributes
-such that names of unparsed entities are acceptable values.</P
-><P
->As you can see, unparsed entities are too complicated in order to have any
-purpose. It is almost always better to simply pass the name of the data file as
-normal attribute value, and let the application recognize and process the
-foreign format. </P
-></DIV
-></DIV
-><H3
-CLASS="FOOTNOTES"
->Notes</H3
-><TABLE
-BORDER="0"
-CLASS="FOOTNOTES"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="LEFT"
-VALIGN="TOP"
-WIDTH="5%"
-><A
-NAME="FTN.AEN445"
-HREF="x107.html#AEN445"
->[1]</A
-></TD
-><TD
-ALIGN="LEFT"
-VALIGN="TOP"
-WIDTH="95%"
-><P
->This construct is only
-allowed within the definition of another entity; otherwise extra spaces would
-be added (as explained above). Such indirection is not recommended.</P
-><P
->Complete example:
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ENTITY % variant "a"&#62;      &#60;!-- or "b" --&#62;
-&#60;!ENTITY text-a "This is text A."&#62;
-&#60;!ENTITY text-b "This is text B."&#62;
-&#60;!ENTITY text "&#38;#38;text-%variant;;"&#62;</PRE
->
-You can now write <TT
-CLASS="LITERAL"
->&amp;text;</TT
-> in the document instance, and
-depending on the value of <TT
-CLASS="LITERAL"
->variant</TT
-> either
-<TT
-CLASS="LITERAL"
->text-a</TT
-> or <TT
-CLASS="LITERAL"
->text-b</TT
-> is inserted.</P
-></TD
-></TR
-></TABLE
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="c36.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="x468.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->What is XML?</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="c36.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->A complete example: The <I
-CLASS="EMPHASIS"
->readme</I
-> DTD</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/x1439.html b/helm/DEVEL/pxp/pxp/doc/manual/html/x1439.html
deleted file mode 100644 (file)
index 2677305..0000000
+++ /dev/null
@@ -1,464 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->The class type extension</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="The objects representing the document"
-HREF="c893.html"><LINK
-REL="PREVIOUS"
-TITLE="The class type node"
-HREF="x939.html"><LINK
-REL="NEXT"
-TITLE="Details of the mapping from XML text to the tree representation"
-HREF="x1496.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="x939.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 3. The objects representing the document</TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="x1496.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN1439"
->3.3. The class type <TT
-CLASS="LITERAL"
->extension</TT
-></A
-></H1
-><P
->&#13;<PRE
-CLASS="PROGRAMLISTING"
->class type [ 'node ] extension =
-  object ('self)
-    method clone : 'self
-      (* "clone" should return an exact deep copy of the object. *)
-    method node : 'node
-      (* "node" returns the corresponding node of this extension. This method
-       * intended to return exactly what previously has been set by "set_node".
-       *)
-    method set_node : 'node -&#62; unit
-      (* "set_node" is invoked once the extension is associated to a new
-       * node object.
-       *)
-  end</PRE
->
-
-This is the type of classes used for node extensions. For every node of the
-document tree, there is not only the <TT
-CLASS="LITERAL"
->node</TT
-> object, but also
-an <TT
-CLASS="LITERAL"
->extension</TT
-> object. The latter has minimal
-functionality; it has only the necessary methods to be attached to the node
-object containing the details of the node instance. The extension object is
-called extension because its purpose is extensibility.</P
-><P
->For some reasons, it is impossible to derive the
-<TT
-CLASS="LITERAL"
->node</TT
-> classes (i.e. <TT
-CLASS="LITERAL"
->element_impl</TT
-> and
-<TT
-CLASS="LITERAL"
->data_impl</TT
->) such that the subclasses can be extended by new
-new methods. But
-subclassing nodes is a great feature, because it allows the user to provide
-different classes for different types of nodes. The extension objects are a
-workaround that is as powerful as direct subclassing, the costs are
-some notation overhead.</P
-><DIV
-CLASS="FIGURE"
-><A
-NAME="EXTENSION-GENERAL"
-></A
-><P
-><B
->Figure 3-6. The structure of nodes and extensions</B
-></P
-><P
-><IMG
-SRC="pic/extension_general.gif"></P
-></DIV
-><P
->The picture shows how the nodes and extensions are linked
-together. Every node has a reference to its extension, and every extension has
-a reference to its node. The methods <TT
-CLASS="LITERAL"
->extension</TT
-> and
-<TT
-CLASS="LITERAL"
->node</TT
-> follow these references; a typical phrase is 
-
-<PRE
-CLASS="PROGRAMLISTING"
->self # node # attribute "xy"</PRE
->
-
-to get the value of an attribute from a method defined in the extension object;
-or 
-
-<PRE
-CLASS="PROGRAMLISTING"
->self # node # iter
-  (fun n -&gt; n # extension # my_method ...)</PRE
->
-
-to iterate over the subnodes and to call <TT
-CLASS="LITERAL"
->my_method</TT
-> of the
-corresponding extension objects.</P
-><P
->Note that extension objects do not have references to subnodes
-(or "subextensions") themselves; in order to get one of the children of an
-extension you must first go to the node object, then get the child node, and
-finally reach the extension that is logically the child of the extension you
-started with.</P
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1460"
->3.3.1. How to define an extension class</A
-></H2
-><P
->At minimum, you must define the methods
-<TT
-CLASS="LITERAL"
->clone</TT
->, <TT
-CLASS="LITERAL"
->node</TT
->, and
-<TT
-CLASS="LITERAL"
->set_node</TT
-> such that your class is compatible with the type
-<TT
-CLASS="LITERAL"
->extension</TT
->. The method <TT
-CLASS="LITERAL"
->set_node</TT
-> is called
-during the initialization of the node, or after a node has been cloned; the
-node object invokes <TT
-CLASS="LITERAL"
->set_node</TT
-> on the extension object to tell
-it that this node is now the object the extension is linked to. The extension
-must return the node object passed as argument of <TT
-CLASS="LITERAL"
->set_node</TT
->
-when the <TT
-CLASS="LITERAL"
->node</TT
-> method is called.</P
-><P
->The <TT
-CLASS="LITERAL"
->clone</TT
-> method must return a copy of the
-extension object; at least the object itself must be duplicated, but if
-required, the copy should deeply duplicate all objects and values that are
-referred by the extension, too. Whether this is required, depends on the
-application; <TT
-CLASS="LITERAL"
->clone</TT
-> is invoked by the node object when one of
-its cloning methods is called.</P
-><P
->A good starting point for an extension class:
-
-<PRE
-CLASS="PROGRAMLISTING"
->class custom_extension =
-  object (self)
-
-    val mutable node = (None : custom_extension node option)
-
-    method clone = {&#60; &#62;} 
-
-    method node =
-      match node with
-          None -&#62;
-            assert false
-        | Some n -&#62; n
-
-    method set_node n =
-      node &#60;- Some n
-
-  end</PRE
->
-
-This class is compatible with <TT
-CLASS="LITERAL"
->extension</TT
->. The purpose of
-defining such a class is, of course, adding further methods; and you can do it
-without restriction. </P
-><P
->Often, you want not only one extension class. In this case,
-it is the simplest way that all your classes (for one kind of document) have
-the same type (with respect to the interface; i.e. it does not matter if your
-classes differ in the defined private methods and instance variables, but
-public methods count). This approach avoids lots of coercions and problems with
-type incompatibilities. It is simple to implement:
-
-<PRE
-CLASS="PROGRAMLISTING"
->class custom_extension =
-  object (self)
-    val mutable node = (None : custom_extension node option)
-
-    method clone = ...      (* see above *)
-    method node = ...       (* see above *)
-    method set_node n = ... (* see above *)
-
-    method virtual my_method1 : ...
-    method virtual my_method2 : ...
-    ... (* etc. *)
-  end
-
-class custom_extension_kind_A =
-  object (self)
-    inherit custom_extension
-
-    method my_method1 = ...
-    method my_method2 = ...
-  end
-
-class custom_extension_kind_B =
-  object (self)
-    inherit custom_extension
-
-    method my_method1 = ...
-    method my_method2 = ...
-  end</PRE
->
-
-If a class does not need a method (e.g. because it does not make sense, or it
-would violate some important condition), it is possible to define the method
-and to always raise an exception when the method is invoked
-(e.g. <TT
-CLASS="LITERAL"
->assert false</TT
->).</P
-><P
->The latter is a strong recommendation: do not try to further
-specialize the types of extension objects. It is difficult, sometimes even
-impossible, and almost never worth-while.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1481"
->3.3.2. How to bind extension classes to element types</A
-></H2
-><P
->Once you have defined your extension classes, you can bind them
-to element types. The simplest case is that you have only one class and that
-this class is to be always used. The parsing functions in the module
-<TT
-CLASS="LITERAL"
->Pxp_yacc</TT
-> take a <TT
-CLASS="LITERAL"
->spec</TT
-> argument which
-can be customized. If your single class has the name <TT
-CLASS="LITERAL"
->c</TT
->,
-this argument should be 
-
-<PRE
-CLASS="PROGRAMLISTING"
->let spec =
-  make_spec_from_alist
-    ~data_exemplar:            (new data_impl c)
-    ~default_element_exemplar: (new element_impl c)
-    ~element_alist:            []
-    ()</PRE
->
-
-This means that data nodes will be created from the exemplar passed by
-~data_exemplar and that all element nodes will be made from the exemplar
-specified by ~default_element_exemplar. In ~element_alist, you can 
-pass that different exemplars are to be used for different element types; but
-this is an optional feature. If you do not need it, pass the empty list.</P
-><P
->Remember that an exemplar is a (node, extension) pair that serves as pattern
-when new nodes (and the corresponding extension objects) are added to the
-document tree. In this case, the exemplar contains <TT
-CLASS="LITERAL"
->c</TT
-> as
-extension, and when nodes are created, the exemplar is cloned, and cloning
-makes also a copy of <TT
-CLASS="LITERAL"
->c</TT
-> such that all nodes of the document
-tree will have a copy of <TT
-CLASS="LITERAL"
->c</TT
-> as extension.</P
-><P
->The <TT
-CLASS="LITERAL"
->~element_alist</TT
-> argument can bind
-specific element types to specific exemplars; as exemplars may be instances of
-different classes it is effectively possible to bind element types to
-classes. For example, if the element type "p" is implemented by class "c_p",
-and "q" is realized by "c_q", you can pass the following value:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let spec =
-  make_spec_from_alist
-    ~data_exemplar:            (new data_impl c)
-    ~default_element_exemplar: (new element_impl c)
-    ~element_alist:            
-      [ "p", new element_impl c_p;
-        "q", new element_impl c_q;
-      ]
-    ()</PRE
->
-
-The extension object <TT
-CLASS="LITERAL"
->c</TT
-> is still used for all data nodes and
-for all other element types.</P
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="x939.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="x1496.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->The class type <TT
-CLASS="LITERAL"
->node</TT
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="c893.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->Details of the mapping from XML text to the tree representation</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/x1496.html b/helm/DEVEL/pxp/pxp/doc/manual/html/x1496.html
deleted file mode 100644 (file)
index faea39f..0000000
+++ /dev/null
@@ -1,442 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Details of the mapping from XML text to the tree representation</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="The objects representing the document"
-HREF="c893.html"><LINK
-REL="PREVIOUS"
-TITLE="The class type extension"
-HREF="x1439.html"><LINK
-REL="NEXT"
-TITLE="Configuring and calling the parser"
-HREF="c1567.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="x1439.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 3. The objects representing the document</TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="c1567.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN1496"
->3.4. Details of the mapping from XML text to the tree representation</A
-></H1
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1498"
->3.4.1. The representation of character-free elements</A
-></H2
-><P
->If an element declaration does not allow the element to 
-contain character data, the following rules apply.</P
-><P
->If the element must be empty, i.e. it is declared with the
-keyword <TT
-CLASS="LITERAL"
->EMPTY</TT
->, the element instance must be effectively
-empty (it must not even contain whitespace characters). The parser guarantees
-that a declared <TT
-CLASS="LITERAL"
->EMPTY</TT
-> element does never contain a data
-node, even if the data node represents the empty string.</P
-><P
->If the element declaration only permits other elements to occur
-within that element but not character data, it is still possible to insert
-whitespace characters between the subelements. The parser ignores these
-characters, too, and does not create data nodes for them.</P
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->Example. </B
->Consider the following element types:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT x ( #PCDATA | z )* &#62;
-&#60;!ELEMENT y ( z )* &#62;
-&#60;!ELEMENT z EMPTY&#62;</PRE
->
-
-Only <TT
-CLASS="LITERAL"
->x</TT
-> may contain character data, the keyword
-<TT
-CLASS="LITERAL"
->#PCDATA</TT
-> indicates this. The other types are character-free. </P
-></DIV
-><P
->The XML term
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;x&#62;&#60;z/&#62; &#60;z/&#62;&#60;/x&#62;</PRE
->
-
-will be internally represented by an element node for <TT
-CLASS="LITERAL"
->x</TT
-> 
-with three subnodes: the first <TT
-CLASS="LITERAL"
->z</TT
-> element, a data node
-containing the space character, and the second <TT
-CLASS="LITERAL"
->z</TT
-> element. 
-In contrast to this, the term
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;y&#62;&#60;z/&#62; &#60;z/&#62;&#60;/y&#62;</PRE
->
-
-is represented by an  element node for <TT
-CLASS="LITERAL"
->y</TT
-> with only
-<I
-CLASS="EMPHASIS"
->two</I
-> subnodes, the two <TT
-CLASS="LITERAL"
->z</TT
-> elements. There
-is no data node for the space character because spaces are ignored in the
-character-free element <TT
-CLASS="LITERAL"
->y</TT
->.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1521"
->3.4.2. The representation of character data</A
-></H2
-><P
->The XML specification allows all Unicode characters in XML
-texts. This parser can be configured such that UTF-8 is used to represent the
-characters internally; however, the default character encoding is
-ISO-8859-1. (Currently, no other encodings are possible for the internal string
-representation; the type <TT
-CLASS="LITERAL"
->Pxp_types.rep_encoding</TT
-> enumerates
-the possible encodings. Principially, the parser could use any encoding that is
-ASCII-compatible, but there are currently only lexical analyzers for UTF-8 and
-ISO-8859-1. It is currently impossible to use UTF-16 or UCS-4 as internal
-encodings (or other multibyte encodings which are not ASCII-compatible) unless
-major parts of the parser are rewritten - unlikely...)</P
-><P
->The internal encoding may be different from the external encoding (specified
-in the XML declaration <TT
-CLASS="LITERAL"
->&lt;?xml ... encoding="..."?&gt;</TT
->); in
-this case the strings are automatically converted to the internal encoding.</P
-><P
->If the internal encoding is ISO-8859-1, it is possible that there are
-characters that cannot be represented. In this case, the parser ignores such
-characters and prints a warning (to the <TT
-CLASS="LITERAL"
->collect_warning</TT
->
-object that must be passed when the parser is called).</P
-><P
->The XML specification allows lines to be separated by single LF
-characters, by CR LF character sequences, or by single CR
-characters. Internally, these separators are always converted to single LF
-characters.</P
-><P
->The parser guarantees that there are never two adjacent data
-nodes; if necessary, data material that would otherwise be represented by
-several nodes is collapsed into one node. Note that you can still create node
-trees with adjacent data nodes; however, the parser does not return such trees.</P
-><P
->Note that CDATA sections are not represented specially; such
-sections are added to the current data material that being collected for the
-next data node.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1532"
->3.4.3. The representation of entities within documents</A
-></H2
-><P
-><I
-CLASS="EMPHASIS"
->Entities are not represented within
-documents!</I
-> If the parser finds an entity reference in the document
-content, the reference is immediately expanded, and the parser reads the
-expansion text instead of the reference.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1536"
->3.4.4. The representation of attributes</A
-></H2
-><P
->As attribute
-values are composed of Unicode characters, too, the same problems with the
-character encoding arise as for character material. Attribute values are
-converted to the internal encoding, too; and if there are characters that
-cannot be represented, these are dropped, and a warning is printed.</P
-><P
->Attribute values are normalized before they are returned by
-methods like <TT
-CLASS="LITERAL"
->attribute</TT
->. First, any remaining entity
-references are expanded; if necessary, expansion is performed recursively.
-Second, newline characters (any of LF, CR LF, or CR characters) are converted
-to single space characters. Note that especially the latter action is
-prescribed by the XML standard (but <TT
-CLASS="LITERAL"
-></TT
-> is not converted
-such that it is still possible to include line feeds into attributes).</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1542"
->3.4.5. The representation of processing instructions</A
-></H2
-><P
->Processing instructions are parsed to some extent: The first word of the
-PI is called the target, and it is stored separated from the rest of the PI:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;?target rest?&#62;</PRE
->
-
-The exact location where a PI occurs is not represented (by default). The
-parser puts the PI into the object that represents the embracing construct (an
-element, a DTD, or the whole document); that means you can find out which PIs
-occur in a certain element, in the DTD, or in the whole document, but you
-cannot lookup the exact position within the construct.</P
-><P
->If you require the exact location of PIs, it is possible to
-create extra nodes for them. This mode is controled by the option
-<TT
-CLASS="LITERAL"
->enable_pinstr_nodes</TT
->. The additional nodes have the node type
-<TT
-CLASS="LITERAL"
->T_pinstr <TT
-CLASS="REPLACEABLE"
-><I
->target</I
-></TT
-></TT
->, and are created
-from special exemplars contained in the <TT
-CLASS="LITERAL"
->spec</TT
-> (see
-pxp_document.mli).</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1551"
->3.4.6. The representation of comments</A
-></H2
-><P
->Normally, comments are not represented; they are dropped by
-default. However, if you require them, it is possible to create
-<TT
-CLASS="LITERAL"
->T_comment</TT
-> nodes for them. This mode can be specified by the
-option <TT
-CLASS="LITERAL"
->enable_comment_nodes</TT
->. Comment nodes are created from
-special exemplars contained in the <TT
-CLASS="LITERAL"
->spec</TT
-> (see
-pxp_document.mli). You can access the contents of comments through the 
-method <TT
-CLASS="LITERAL"
->comment</TT
->.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1558"
->3.4.7. The attributes <TT
-CLASS="LITERAL"
->xml:lang</TT
-> and
-<TT
-CLASS="LITERAL"
->xml:space</TT
-></A
-></H2
-><P
->These attributes are not supported specially; they are handled
-like any other attribute.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1563"
->3.4.8. And what about namespaces?</A
-></H2
-><P
->Currently, there is no special support for namespaces.
-However, the parser allows it that the colon occurs in names such that it is
-possible to implement namespaces on top of the current API.</P
-><P
->Some future release of PXP will support namespaces as built-in
-feature...</P
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="x1439.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="c1567.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->The class type <TT
-CLASS="LITERAL"
->extension</TT
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="c893.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->Configuring and calling the parser</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/x1629.html b/helm/DEVEL/pxp/pxp/doc/manual/html/x1629.html
deleted file mode 100644 (file)
index 06b1e60..0000000
+++ /dev/null
@@ -1,895 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Resolvers and sources</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="Configuring and calling the parser"
-HREF="c1567.html"><LINK
-REL="PREVIOUS"
-TITLE="Configuring and calling the parser"
-HREF="c1567.html"><LINK
-REL="NEXT"
-TITLE="The DTD classes"
-HREF="x1812.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="c1567.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 4. Configuring and calling the parser</TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="x1812.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN1629"
->4.2. Resolvers and sources</A
-></H1
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1631"
->4.2.1. Using the built-in resolvers (called sources)</A
-></H2
-><P
->The type <TT
-CLASS="LITERAL"
->source</TT
-> enumerates the two
-possibilities where the document to parse comes from.
-
-<PRE
-CLASS="PROGRAMLISTING"
->type source =
-    Entity of ((dtd -&gt; Pxp_entity.entity) * Pxp_reader.resolver)
-  | ExtID of (ext_id * Pxp_reader.resolver)</PRE
->
-
-You normally need not to worry about this type as there are convenience
-functions that create <TT
-CLASS="LITERAL"
->source</TT
-> values:
-
-
-            <P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->from_file s</TT
->: The document is read from
-file <TT
-CLASS="LITERAL"
->s</TT
->; you may specify absolute or relative path names.
-The file name must be encoded as UTF-8 string.</P
-><P
->There is an optional argument <TT
-CLASS="LITERAL"
->~system_encoding</TT
->
-specifying the character encoding which is used for the names of the file
-system. For example, if this encoding is ISO-8859-1 and <TT
-CLASS="LITERAL"
->s</TT
-> is
-also a ISO-8859-1 string, you can form the source:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let s_utf8  =  recode_string ~in_enc:`Enc_iso88591 ~out_enc:`Enc_utf8 s in
-from_file ~system_encoding:`Enc_iso88591 s_utf8</PRE
-></P
-><P
->This <TT
-CLASS="LITERAL"
->source</TT
-> has the advantage that
-it is able to resolve inner external entities; i.e. if your document includes
-data from another file (using the <TT
-CLASS="LITERAL"
->SYSTEM</TT
-> attribute), this
-mode will find that file. However, this mode cannot resolve
-<TT
-CLASS="LITERAL"
->PUBLIC</TT
-> identifiers nor <TT
-CLASS="LITERAL"
->SYSTEM</TT
-> identifiers
-other than "file:".</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->from_channel ch</TT
->: The document is read
-from the channel <TT
-CLASS="LITERAL"
->ch</TT
->. In general, this source also supports
-file URLs found in the document; however, by default only absolute URLs are
-understood. It is possible to associate an ID with the channel such that the
-resolver knows how to interpret relative URLs:
-
-<PRE
-CLASS="PROGRAMLISTING"
->from_channel ~id:(System "file:///dir/dir1/") ch</PRE
->
-
-There is also the ~system_encoding argument specifying how file names are
-encoded. - The example from above can also be written (but it is no
-longer possible to interpret relative URLs because there is no ~id argument,
-and computing this argument is relatively complicated because it must
-be a valid URL):
-
-<PRE
-CLASS="PROGRAMLISTING"
->let ch = open_in s in
-let src = from_channel ~system_encoding:`Enc_iso88591 ch in
-...;
-close_in ch</PRE
-></P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->from_string s</TT
->: The string
-<TT
-CLASS="LITERAL"
->s</TT
-> is the document to parse. This mode is not able to
-interpret file names of <TT
-CLASS="LITERAL"
->SYSTEM</TT
-> clauses, nor it can look up
-<TT
-CLASS="LITERAL"
->PUBLIC</TT
-> identifiers. </P
-><P
->Normally, the encoding of the string is detected as usual
-by analyzing the XML declaration, if any. However, it is also possible to
-specify the encoding directly:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let src = from_string ~fixenc:`ISO-8859-2 s</PRE
-></P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->ExtID (id, r)</TT
->: The document to parse
-is denoted by the identifier <TT
-CLASS="LITERAL"
->id</TT
-> (either a
-<TT
-CLASS="LITERAL"
->SYSTEM</TT
-> or <TT
-CLASS="LITERAL"
->PUBLIC</TT
-> clause), and this
-identifier is interpreted by the resolver <TT
-CLASS="LITERAL"
->r</TT
->. Use this mode
-if you have written your own resolver.</P
-><P
->Which character sets are possible depends on the passed
-resolver <TT
-CLASS="LITERAL"
->r</TT
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->Entity (get_entity, r)</TT
->: The document
-to parse is returned by the function invocation <TT
-CLASS="LITERAL"
->get_entity
-dtd</TT
->, where <TT
-CLASS="LITERAL"
->dtd</TT
-> is the DTD object to use (it may be
-empty). Inner external references occuring in this entity are resolved using
-the resolver <TT
-CLASS="LITERAL"
->r</TT
->.</P
-><P
->Which character sets are possible depends on the passed
-resolver <TT
-CLASS="LITERAL"
->r</TT
->.</P
-></LI
-></UL
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1682"
->4.2.2. The resolver API</A
-></H2
-><P
->A resolver is an object that can be opened like a file, but you
-do not pass the file name to the resolver, but the XML identifier of the entity
-to read from (either a <TT
-CLASS="LITERAL"
->SYSTEM</TT
-> or <TT
-CLASS="LITERAL"
->PUBLIC</TT
->
-clause). When opened, the resolver must return the
-<TT
-CLASS="LITERAL"
->Lexing.lexbuf</TT
-> that reads the characters.  The resolver can
-be closed, and it can be cloned. Furthermore, it is possible to tell the
-resolver which character set it should assume. - The following from Pxp_reader:
-
-<PRE
-CLASS="PROGRAMLISTING"
->exception Not_competent
-exception Not_resolvable of exn
-
-class type resolver =
-  object
-    method init_rep_encoding : rep_encoding -&#62; unit
-    method init_warner : collect_warnings -&#62; unit
-    method rep_encoding : rep_encoding
-    method open_in : ext_id -&#62; Lexing.lexbuf
-    method close_in : unit
-    method change_encoding : string -&#62; unit
-    method clone : resolver
-    method close_all : unit
-  end</PRE
->
-
-The resolver object must work as follows:</P
-><P
->            <P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
->When the parser is called, it tells the resolver the
-warner object and the internal encoding by invoking
-<TT
-CLASS="LITERAL"
->init_warner</TT
-> and <TT
-CLASS="LITERAL"
->init_rep_encoding</TT
->. The
-resolver should store these values. The method <TT
-CLASS="LITERAL"
->rep_encoding</TT
->
-should return the internal encoding.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->If the parser wants to read from the resolver, it invokes
-the method <TT
-CLASS="LITERAL"
->open_in</TT
->. Either the resolver succeeds, in which
-case the <TT
-CLASS="LITERAL"
->Lexing.lexbuf</TT
-> reading from the file or stream must
-be returned, or opening fails. In the latter case the method implementation
-should raise an exception (see below).</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->If the parser finishes reading, it calls the
-<TT
-CLASS="LITERAL"
->close_in</TT
-> method.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->If the parser finds a reference to another external
-entity in the input stream, it calls <TT
-CLASS="LITERAL"
->clone</TT
-> to get a second
-resolver which must be initially closed (not yet connected with an input
-stream).  The parser then invokes <TT
-CLASS="LITERAL"
->open_in</TT
-> and the other
-methods as described.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->If you already know the character set of the input
-stream, you should recode it to the internal encoding, and define the method
-<TT
-CLASS="LITERAL"
->change_encoding</TT
-> as an empty method.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->If you want to support multiple external character sets,
-the object must follow a much more complicated protocol. Directly after
-<TT
-CLASS="LITERAL"
->open_in</TT
-> has been called, the resolver must return a lexical
-buffer that only reads one byte at a time. This is only possible if you create
-the lexical buffer with <TT
-CLASS="LITERAL"
->Lexing.from_function</TT
->; the function
-must then always return 1 if the EOF is not yet reached, and 0 if EOF is
-reached. If the parser has read the first line of the document, it will invoke
-<TT
-CLASS="LITERAL"
->change_encoding</TT
-> to tell the resolver which character set to
-assume. From this moment, the object can return more than one byte at once. The
-argument of <TT
-CLASS="LITERAL"
->change_encoding</TT
-> is either the parameter of the
-"encoding" attribute of the XML declaration, or the empty string if there is
-not any XML declaration or if the declaration does not contain an encoding
-attribute. </P
-><P
->At the beginning the resolver must only return one
-character every time something is read from the lexical buffer. The reason for
-this is that you otherwise would not exactly know at which position in the
-input stream the character set changes.</P
-><P
->If you want automatic recognition of the character set,
-it is up to the resolver object to implement this.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->If an error occurs, the parser calls the method
-<TT
-CLASS="LITERAL"
->close_all</TT
-> for the top-level resolver; this method should
-close itself (if not already done) and all clones.</P
-></LI
-></UL
-></P
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->Exceptions. </B
->It is possible to chain resolvers such that when the first resolver is not able
-to open the entity, the other resolvers of the chain are tried in turn. The
-method <TT
-CLASS="LITERAL"
->open_in</TT
-> should raise the exception
-<TT
-CLASS="LITERAL"
->Not_competent</TT
-> to indicate that the next resolver should try
-to open the entity. If the resolver is able to handle the ID, but some other
-error occurs, the exception <TT
-CLASS="LITERAL"
->Not_resolvable</TT
-> should be raised
-to force that the chain breaks.
-         </P
-></DIV
-><P
->Example: How to define a resolver that is equivalent to
-from_string: ...</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1728"
->4.2.3. Predefined resolver components</A
-></H2
-><P
->There are some classes in Pxp_reader that define common resolver behaviour.
-
-<PRE
-CLASS="PROGRAMLISTING"
->class resolve_read_this_channel : 
-    ?id:ext_id -&#62; 
-    ?fixenc:encoding -&#62; 
-    ?auto_close:bool -&#62; 
-    in_channel -&#62; 
-        resolver</PRE
->
-
-Reads from the passed channel (it may be even a pipe). If the
-<TT
-CLASS="LITERAL"
->~id</TT
-> argument is passed to the object, the created resolver
-accepts only this ID. Otherwise all IDs are accepted.  - Once the resolver has
-been cloned, it does not accept any ID. This means that this resolver cannot
-handle inner references to external entities. Note that you can combine this
-resolver with another resolver that can handle inner references (such as
-resolve_as_file); see class 'combine' below.  - If you pass the
-<TT
-CLASS="LITERAL"
->~fixenc</TT
-> argument, the encoding of the channel is set to the
-passed value, regardless of any auto-recognition or any XML declaration. - If
-<TT
-CLASS="LITERAL"
->~auto_close = true</TT
-> (which is the default), the channel is
-closed after use. If <TT
-CLASS="LITERAL"
->~auto_close = false</TT
->, the channel is
-left open.
- </P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->class resolve_read_any_channel : 
-    ?auto_close:bool -&#62; 
-    channel_of_id:(ext_id -&#62; (in_channel * encoding option)) -&#62; 
-        resolver</PRE
->
-
-This resolver calls the function <TT
-CLASS="LITERAL"
->~channel_of_id</TT
-> to open a
-new channel for the passed <TT
-CLASS="LITERAL"
->ext_id</TT
->. This function must either
-return the channel and the encoding, or it must fail with Not_competent.  The
-function must return <TT
-CLASS="LITERAL"
->None</TT
-> as encoding if the default
-mechanism to recognize the encoding should be used. It must return
-<TT
-CLASS="LITERAL"
->Some e</TT
-> if it is already known that the encoding of the
-channel is <TT
-CLASS="LITERAL"
->e</TT
->.  If <TT
-CLASS="LITERAL"
->~auto_close = true</TT
->
-(which is the default), the channel is closed after use. If
-<TT
-CLASS="LITERAL"
->~auto_close = false</TT
->, the channel is left open.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->class resolve_read_url_channel :
-    ?base_url:Neturl.url -&#62;
-    ?auto_close:bool -&#62; 
-    url_of_id:(ext_id -&#62; Neturl.url) -&#62; 
-    channel_of_url:(Neturl.url -&#62; (in_channel * encoding option)) -&#62; 
-        resolver</PRE
->
-
-When this resolver gets an ID to read from, it calls the function
-<TT
-CLASS="LITERAL"
->~url_of_id</TT
-> to get the corresponding URL. This URL may be a
-relative URL; however, a URL scheme must be used which contains a path.  The
-resolver converts the URL to an absolute URL if necessary.  The second
-function, <TT
-CLASS="LITERAL"
->~channel_of_url</TT
->, is fed with the absolute URL as
-input. This function opens the resource to read from, and returns the channel
-and the encoding of the resource.</P
-><P
->Both functions, <TT
-CLASS="LITERAL"
->~url_of_id</TT
-> and
-<TT
-CLASS="LITERAL"
->~channel_of_url</TT
->, can raise Not_competent to indicate that
-the object is not able to read from the specified resource. However, there is a
-difference: A Not_competent from <TT
-CLASS="LITERAL"
->~url_of_id</TT
-> is left as it
-is, but a Not_competent from <TT
-CLASS="LITERAL"
->~channel_of_url</TT
-> is converted to
-Not_resolvable. So only <TT
-CLASS="LITERAL"
->~url_of_id</TT
-> decides which URLs are
-accepted by the resolver and which not.</P
-><P
->The function <TT
-CLASS="LITERAL"
->~channel_of_url</TT
-> must return
-<TT
-CLASS="LITERAL"
->None</TT
-> as encoding if the default mechanism to recognize the
-encoding should be used. It must return <TT
-CLASS="LITERAL"
->Some e</TT
-> if it is
-already known that the encoding of the channel is <TT
-CLASS="LITERAL"
->e</TT
->.</P
-><P
->If <TT
-CLASS="LITERAL"
->~auto_close = true</TT
-> (which is the default), the channel is
-closed after use. If <TT
-CLASS="LITERAL"
->~auto_close = false</TT
->, the channel is
-left open.</P
-><P
->Objects of this class contain a base URL relative to which relative URLs are
-interpreted. When creating a new object, you can specify the base URL by
-passing it as <TT
-CLASS="LITERAL"
->~base_url</TT
-> argument. When an existing object is
-cloned, the base URL of the clone is the URL of the original object. - Note
-that the term "base URL" has a strict definition in RFC 1808.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->class resolve_read_this_string : 
-    ?id:ext_id -&#62; 
-    ?fixenc:encoding -&#62; 
-    string -&#62; 
-        resolver</PRE
->
-
-Reads from the passed string. If the <TT
-CLASS="LITERAL"
->~id</TT
-> argument is passed
-to the object, the created resolver accepts only this ID. Otherwise all IDs are
-accepted. - Once the resolver has been cloned, it does not accept any ID. This
-means that this resolver cannot handle inner references to external
-entities. Note that you can combine this resolver with another resolver that
-can handle inner references (such as resolve_as_file); see class 'combine'
-below. - If you pass the <TT
-CLASS="LITERAL"
->~fixenc</TT
-> argument, the encoding of
-the string is set to the passed value, regardless of any auto-recognition or
-any XML declaration.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->class resolve_read_any_string : 
-    string_of_id:(ext_id -&#62; (string * encoding option)) -&#62; 
-        resolver</PRE
->
-
-This resolver calls the function <TT
-CLASS="LITERAL"
->~string_of_id</TT
-> to get the
-string for the passed <TT
-CLASS="LITERAL"
->ext_id</TT
->. This function must either
-return the string and the encoding, or it must fail with Not_competent.  The
-function must return <TT
-CLASS="LITERAL"
->None</TT
-> as encoding if the default
-mechanism to recognize the encoding should be used. It must return
-<TT
-CLASS="LITERAL"
->Some e</TT
-> if it is already known that the encoding of the
-string is <TT
-CLASS="LITERAL"
->e</TT
->.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->class resolve_as_file :
-    ?file_prefix:[ `Not_recognized | `Allowed | `Required ] -&#62;
-    ?host_prefix:[ `Not_recognized | `Allowed | `Required ] -&#62;
-    ?system_encoding:encoding -&#62;
-    ?url_of_id:(ext_id -&#62; Neturl.url) -&#62; 
-    ?channel_of_url: (Neturl.url -&#62; (in_channel * encoding option)) -&#62;
-    unit -&#62; 
-        resolver</PRE
->
-Reads from the local file system. Every file name is interpreted as
-file name of the local file system, and the referred file is read.</P
-><P
->The full form of a file URL is: file://host/path, where
-'host' specifies the host system where the file identified 'path'
-resides. host = "" or host = "localhost" are accepted; other values
-will raise Not_competent. The standard for file URLs is 
-defined in RFC 1738.</P
-><P
->Option <TT
-CLASS="LITERAL"
->~file_prefix</TT
->: Specifies how the "file:" prefix of
-file names is handled:
-            <P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->`Not_recognized:</TT
->The prefix is not
-recognized.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->`Allowed:</TT
-> The prefix is allowed but
-not required (the default).</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->`Required:</TT
-> The prefix is
-required.</P
-></LI
-></UL
-></P
-><P
->Option <TT
-CLASS="LITERAL"
->~host_prefix:</TT
-> Specifies how the "//host" phrase of
-file names is handled:
-            <P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->`Not_recognized:</TT
->The prefix is not
-recognized.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->`Allowed:</TT
-> The prefix is allowed but
-not required (the default).</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->`Required:</TT
-> The prefix is
-required.</P
-></LI
-></UL
-></P
-><P
->Option <TT
-CLASS="LITERAL"
->~system_encoding:</TT
-> Specifies the encoding of file
-names of the local file system. Default: UTF-8.</P
-><P
->Options <TT
-CLASS="LITERAL"
->~url_of_id</TT
->, <TT
-CLASS="LITERAL"
->~channel_of_url</TT
->: Not
-for the casual user!</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->class combine : 
-    ?prefer:resolver -&#62; 
-    resolver list -&#62; 
-        resolver</PRE
->
-
-Combines several resolver objects. If a concrete entity with an
-<TT
-CLASS="LITERAL"
->ext_id</TT
-> is to be opened, the combined resolver tries the
-contained resolvers in turn until a resolver accepts opening the entity
-(i.e. it does not raise Not_competent on open_in).</P
-><P
->Clones: If the 'clone' method is invoked before 'open_in', all contained
-resolvers are cloned separately and again combined. If the 'clone' method is 
-invoked after 'open_in' (i.e. while the resolver is open), additionally the
-clone of the active resolver is flagged as being preferred, i.e. it is tried
-first. </P
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="c1567.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="x1812.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->Configuring and calling the parser</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="c1567.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->The DTD classes</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/x1812.html b/helm/DEVEL/pxp/pxp/doc/manual/html/x1812.html
deleted file mode 100644 (file)
index 34f09c2..0000000
+++ /dev/null
@@ -1,517 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->The DTD classes</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="Configuring and calling the parser"
-HREF="c1567.html"><LINK
-REL="PREVIOUS"
-TITLE="Resolvers and sources"
-HREF="x1629.html"><LINK
-REL="NEXT"
-TITLE="Invoking the parser"
-HREF="x1818.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="x1629.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 4. Configuring and calling the parser</TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="x1818.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN1812"
->4.3. The DTD classes</A
-></H1
-><P
-><I
-CLASS="EMPHASIS"
->Sorry, not yet
-written. Perhaps the interface definition of Pxp_dtd expresses the same:</I
-></P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->&#13;(**********************************************************************)
-(*                                                                    *)
-(* Pxp_dtd:                                                           *)
-(*     Object model of document type declarations                     *)
-(*                                                                    *)
-(**********************************************************************)
-
-(* ======================================================================
- * OVERVIEW
- *
- * class dtd ............... represents the whole DTD, including element
- *                           declarations, entity declarations, notation
- *                           declarations, and processing instructions
- * class dtd_element ....... represents an element declaration consisting
- *                           of a content model and an attribute list
- *                           declaration
- * class dtd_notation ...... represents a notation declaration
- * class proc_instruction .. represents a processing instruction
- * ======================================================================
- *
- *)
-
-
-class dtd :
-  (* Creation:
-   *   new dtd
-   * creates a new, empty DTD object without any declaration, without a root
-   * element, without an ID.
-   *)
-  Pxp_types.collect_warnings -&gt; 
-  Pxp_types.rep_encoding -&gt;
-  object
-    method root : string option
-      (* get the name of the root element if present *)
-
-    method set_root : string -&gt; unit
-      (* set the name of the root element. This method can be invoked 
-       * only once
-       *)
-
-    method id : Pxp_types.dtd_id option
-      (* get the identifier for this DTD *)
-
-    method set_id : Pxp_types.dtd_id -&gt; unit
-      (* set the identifier. This method can be invoked only once *)
-
-    method encoding : Pxp_types.rep_encoding
-      (* returns the encoding used for character representation *)
-
-
-    method allow_arbitrary : unit
-      (* After this method has been invoked, the object changes its behaviour:
-       * - elements and notations that have not been added may be used in an
-       *   arbitrary way; the methods "element" and "notation" indicate this
-       *   by raising Undeclared instead of Validation_error.
-       *)
-
-    method disallow_arbitrary : unit
-
-    method arbitrary_allowed : bool
-      (* Returns whether arbitrary contents are allowed or not. *)
-
-    method standalone_declaration : bool
-      (* Whether there is a 'standalone' declaration or not. Strictly 
-       * speaking, this declaration is not part of the DTD, but it is
-       * included here because of practical reasons. 
-       * If not set, this property defaults to 'false'.
-       *)
-
-    method set_standalone_declaration : bool -&gt; unit
-      (* Sets the 'standalone' declaration. *)
-
-
-    method add_element : dtd_element -&gt; unit
-      (* add the given element declaration to this DTD. Raises Not_found
-       * if there is already an element declaration with the same name.
-       *)
-
-    method add_gen_entity : Pxp_entity.entity -&gt; bool -&gt; unit
-      (* add_gen_entity e extdecl:
-       * add the entity 'e' as general entity to this DTD (general entities
-       * are those represented by &amp;name;). If there is already a declaration
-       * with the same name, the second definition is ignored; as exception from
-       * this rule, entities with names "lt", "gt", "amp", "quot", and "apos"
-       * may only be redeclared with a definition that is equivalent to the
-       * standard definition; otherwise a Validation_error is raised.
-       *
-       * 'extdecl': 'true' indicates that the entity declaration occurs in
-       * an external entity. (Used for the standalone check.)
-       *)
-
-    method add_par_entity : Pxp_entity.entity -&gt; unit
-      (* add the given entity as parameter entity to this DTD (parameter
-       * entities are those represented by %name;). If there is already a 
-       * declaration with the same name, the second definition is ignored.
-       *)
-
-    method add_notation : dtd_notation -&gt; unit
-      (* add the given notation to this DTD. If there is already a declaration
-       * with the same name, a Validation_error is raised.
-       *)
-
-    method add_pinstr : proc_instruction -&gt; unit
-      (* add the given processing instruction to this DTD. *)
-
-    method element : string -&gt; dtd_element
-      (* looks up the element declaration with the given name. Raises 
-       * Validation_error if the element cannot be found. (If "allow_arbitrary"
-       * has been invoked before, Unrestricted is raised instead.)
-       *)
-
-    method element_names : string list
-      (* returns the list of the names of all element declarations. *)
-
-    method gen_entity : string -&gt; (Pxp_entity.entity * bool)
-      (* let e, extdecl = obj # gen_entity n:
-       * looks up the general entity 'e' with the name 'n'. Raises
-       * WF_error if the entity cannot be found.
-       * 'extdecl': indicates whether the entity declaration occured in an 
-       * external entity.
-       *)
-
-    method gen_entity_names : string list
-      (* returns the list of all general entity names *)
-
-    method par_entity : string -&gt; Pxp_entity.entity
-      (* looks up the parameter entity with the given name. Raises
-       * WF_error if the entity cannot be found.
-       *)
-
-    method par_entity_names : string list
-      (* returns the list of all parameter entity names *)
-
-    method notation : string -&gt; dtd_notation
-      (* looks up the notation declaration with the given name. Raises
-       * Validation_error if the notation cannot be found. (If "allow_arbitrary"
-       * has been invoked before, Unrestricted is raised instead.)
-       *)
-
-    method notation_names : string list
-      (* Returns the list of the names of all added notations *)
-
-    method pinstr : string -&gt; proc_instruction list
-      (* looks up all processing instructions with the given target.
-       * The "target" is the identifier following "&lt;?".
-       * Note: It is not possible to find out the exact position of the
-       * processing instruction.
-       *)
-
-    method pinstr_names : string list
-      (* Returns the list of the names (targets) of all added pinstrs *)
-
-    method validate : unit
-      (* ensures that the DTD is valid. This method is optimized such that
-       * actual validation is only performed if DTD has changed.
-       * If the DTD is invalid, mostly a Validation_error is raised,
-       * but other exceptions are possible, too.
-       *)
-
-    method only_deterministic_models : unit
-      (* Succeeds if all regexp content models are deterministic. 
-       * Otherwise Validation_error.
-       *)
-
-    method write : Pxp_types.output_stream -&gt; Pxp_types.encoding -&gt; bool -&gt; unit
-      (* write_compact_as_latin1 os enc doctype:
-       * Writes the DTD as 'enc'-encoded string to 'os'. If 'doctype', a 
-       * DTD like &lt;!DOCTYPE root [ ... ]&gt; is written. If 'not doctype',
-       * only the declarations are written (the material within the
-       * square brackets).
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -&gt; bool -&gt; unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-
-
-    (*----------------------------------------*)
-    method invalidate : unit
-      (* INTERNAL METHOD *)
-    method warner : Pxp_types.collect_warnings
-      (* INTERNAL METHOD *)
-  end
-
-
-
-(* ---------------------------------------------------------------------- *)
-
-and dtd_element : dtd -&gt; string -&gt; 
-  (* Creation:
-   *   new dtd_element init_dtd init_name:
-   * creates a new dtd_element object for init_dtd with init_name.
-   * The strings are represented in the same encoding as init_dtd.
-   *)
-  object
-
-    method name : string
-      (* returns the name of the declared element *)
-
-    method externally_declared : bool
-      (* returns whether the element declaration occurs in an external
-       * entity.
-       *)
-
-    method content_model : Pxp_types.content_model_type
-      (* get the content model of this element declaration, or Unspecified *)
-
-    method content_dfa : Pxp_dfa.dfa_definition option
-      (* return the DFA of the content model if there is a DFA, or None.
-       * A DFA exists only for regexp style content models which are
-       * deterministic.
-       *)
-
-    method set_cm_and_extdecl : Pxp_types.content_model_type -&gt; bool -&gt; unit
-      (* set_cm_and_extdecl cm extdecl:
-       * set the content model to 'cm'. Once the content model is not 
-       * Unspecified, it cannot be set to a different value again.
-       * Furthermore, it is set whether the element occurs in an external
-       * entity ('extdecl').
-       *)
-
-    method encoding : Pxp_types.rep_encoding
-      (* Return the encoding of the strings *)
-
-    method allow_arbitrary : unit
-      (* After this method has been invoked, the object changes its behaviour:
-       * - attributes that have not been added may be used in an
-       *   arbitrary way; the method "attribute" indicates this
-       *   by raising Undeclared instead of Validation_error.
-       *)
-
-    method disallow_arbitrary : unit
-
-    method arbitrary_allowed : bool
-      (* Returns whether arbitrary attributes are allowed or not. *)
-
-    method attribute : string -&gt; 
-                         Pxp_types.att_type * Pxp_types.att_default
-      (* get the type and default value of a declared attribute, or raise
-       * Validation_error if the attribute does not exist.
-       * If 'arbitrary_allowed', the exception Undeclared is raised instead
-       * of Validation_error.
-       *)
-
-    method attribute_violates_standalone_declaration : 
-               string -&gt; string option -&gt; bool
-      (* attribute_violates_standalone_declaration name v:
-       * Checks whether the attribute 'name' violates the "standalone"
-       * declaration if it has value 'v'.
-       * The method returns true if:
-       * - The attribute declaration occurs in an external entity, 
-       * and if one of the two conditions holds:
-       * - v = None, and there is a default for the attribute value
-       * - v = Some s, and the type of the attribute is not CDATA,
-       *   and s changes if normalized according to the rules of the
-       *   attribute type.
-       *
-       * The method raises Validation_error if the attribute does not exist.
-       * If 'arbitrary_allowed', the exception Undeclared is raised instead
-       * of Validation_error.
-       *)
-
-    method attribute_names : string list
-      (* get the list of all declared attributes *)
-
-    method names_of_required_attributes : string list
-      (* get the list of all attributes that are specified as required 
-       * attributes
-       *)
-
-    method id_attribute_name : string option
-      (* Returns the name of the attribute with type ID, or None. *)
-
-    method idref_attribute_names : string list
-      (* Returns the names of the attributes with type IDREF or IDREFS. *)
-
-    method add_attribute : string -&gt; 
-                           Pxp_types.att_type -&gt; 
-                          Pxp_types.att_default -&gt; 
-                          bool -&gt;
-                            unit
-      (* add_attribute name type default extdecl:
-       * add an attribute declaration for an attribute with the given name,
-       * type, and default value. If there is more than one declaration for
-       * an attribute name, the first declaration counts; the other declarations
-       * are ignored.
-       * 'extdecl': if true, the attribute declaration occurs in an external
-       * entity. This property is used to check the "standalone" attribute.
-       *)
-
-    method validate : unit
-      (* checks whether this element declaration (i.e. the content model and
-       * all attribute declarations) is valid for the associated DTD.
-       * Raises mostly Validation_error if the validation fails.
-       *)
-
-    method write : Pxp_types.output_stream -&gt; Pxp_types.encoding -&gt; unit
-      (* write_compact_as_latin1 os enc:
-       * Writes the &lt;!ELEMENT ... &gt; declaration to 'os' as 'enc'-encoded string.
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -&gt; unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-  end
-
-(* ---------------------------------------------------------------------- *)
-
-and dtd_notation : string -&gt; Pxp_types.ext_id -&gt; Pxp_types.rep_encoding -&gt;
-  (* Creation:
-   *    new dtd_notation a_name an_external_ID init_encoding
-   * creates a new dtd_notation object with the given name and the given
-   * external ID.
-   *)
-  object
-    method name : string
-    method ext_id : Pxp_types.ext_id
-    method encoding : Pxp_types.rep_encoding
-
-    method write : Pxp_types.output_stream -&gt; Pxp_types.encoding -&gt; unit
-      (* write_compact_as_latin1 os enc:
-       * Writes the &lt;!NOTATION ... &gt; declaration to 'os' as 'enc'-encoded 
-       * string.
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -&gt; unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-
-  end
-
-(* ---------------------------------------------------------------------- *)
-
-and proc_instruction : string -&gt; string -&gt; Pxp_types.rep_encoding -&gt;
-  (* Creation:
-   *   new proc_instruction a_target a_value
-   * creates a new proc_instruction object with the given target string and
-   * the given value string. 
-   * Note: A processing instruction is written as &lt;?target value?&gt;. 
-   *)
-  object
-    method target : string
-    method value : string
-    method encoding : Pxp_types.rep_encoding
-
-    method write : Pxp_types.output_stream -&gt; Pxp_types.encoding -&gt; unit
-      (* write os enc:
-       * Writes the &lt;?...?&gt; PI to 'os' as 'enc'-encoded string.
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -&gt; unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-
-    method parse_pxp_option : (string * string * (string * string) list)
-      (* Parses a PI containing a PXP option. Such PIs are formed like:
-       *   &lt;?target option-name option-att="value" option-att="value" ... ?&gt;
-       * The method returns a triple
-       *   (target, option-name, [option-att, value; ...])
-       * or raises Error.
-       *)
-
-  end
-
-;;&#13;</PRE
-></P
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="x1629.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="x1818.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->Resolvers and sources</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="c1567.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->Invoking the parser</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/x1818.html b/helm/DEVEL/pxp/pxp/doc/manual/html/x1818.html
deleted file mode 100644 (file)
index b289a36..0000000
+++ /dev/null
@@ -1,779 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Invoking the parser</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="Configuring and calling the parser"
-HREF="c1567.html"><LINK
-REL="PREVIOUS"
-TITLE="The DTD classes"
-HREF="x1812.html"><LINK
-REL="NEXT"
-TITLE="Updates"
-HREF="x1965.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="x1812.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 4. Configuring and calling the parser</TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="x1965.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN1818"
->4.4. Invoking the parser</A
-></H1
-><P
->Here a description of Pxp_yacc.</P
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1821"
->4.4.1. Defaults</A
-></H2
-><P
->The following defaults are available:
-
-<PRE
-CLASS="PROGRAMLISTING"
->val default_config : config
-val default_extension : ('a node extension) as 'a
-val default_spec : ('a node extension as 'a) spec</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1825"
->4.4.2. Parsing functions</A
-></H2
-><P
->In the following, the term "closed document" refers to
-an XML structure like
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;!DOCTYPE ... [ <TT
-CLASS="REPLACEABLE"
-><I
->declarations</I
-></TT
-> ] &gt;
-&lt;<TT
-CLASS="REPLACEABLE"
-><I
->root</I
-></TT
->&gt;
-...
-&lt;/<TT
-CLASS="REPLACEABLE"
-><I
->root</I
-></TT
->&gt;</PRE
->
-
-The term "fragment" refers to an XML structure like
-
-<PRE
-CLASS="PROGRAMLISTING"
->&lt;<TT
-CLASS="REPLACEABLE"
-><I
->root</I
-></TT
->&gt;
-...
-&lt;/<TT
-CLASS="REPLACEABLE"
-><I
->root</I
-></TT
->&gt;</PRE
->
-
-i.e. only to one isolated element instance.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->val parse_dtd_entity : config -&#62; source -&#62; dtd</PRE
->
-
-Parses the declarations which are contained in the entity, and returns them as
-<TT
-CLASS="LITERAL"
->dtd</TT
-> object.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->val extract_dtd_from_document_entity : config -&#62; source -&#62; dtd</PRE
->
-
-Extracts the DTD from a closed document. Both the internal and the external
-subsets are extracted and combined to one <TT
-CLASS="LITERAL"
->dtd</TT
-> object. This
-function does not parse the whole document, but only the parts that are
-necessary to extract the DTD.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->val parse_document_entity : 
-    ?transform_dtd:(dtd -&#62; dtd) -&#62;
-    ?id_index:('ext index) -&#62;
-    config -&#62; 
-    source -&#62; 
-    'ext spec -&#62; 
-        'ext document</PRE
->
-
-Parses a closed document and validates it against the DTD that is contained in
-the document (internal and external subsets). The option
-<TT
-CLASS="LITERAL"
->~transform_dtd</TT
-> can be used to transform the DTD in the
-document, and to use the transformed DTD for validation. If
-<TT
-CLASS="LITERAL"
->~id_index</TT
-> is specified, an index of all ID attributes is
-created.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->val parse_wfdocument_entity : 
-    config -&#62; 
-    source -&#62; 
-    'ext spec -&#62; 
-        'ext document</PRE
->
-
-Parses a closed document, but checks it only on well-formedness.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->val parse_content_entity  : 
-    ?id_index:('ext index) -&#62;
-    config -&#62;  
-    source -&#62; 
-    dtd -&#62; 
-    'ext spec -&#62; 
-        'ext node</PRE
->
-
-Parses a fragment, and validates the element.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->val parse_wfcontent_entity : 
-    config -&#62; 
-    source -&#62; 
-    'ext spec -&#62; 
-        'ext node</PRE
->
-
-Parses a fragment, but checks it only on well-formedness.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1851"
->4.4.3. Configuration options</A
-></H2
-><P
->&#13;<PRE
-CLASS="PROGRAMLISTING"
->type config =
-    { warner : collect_warnings;
-      errors_with_line_numbers : bool;
-      enable_pinstr_nodes : bool;
-      enable_super_root_node : bool;
-      enable_comment_nodes : bool;
-      encoding : rep_encoding;
-      recognize_standalone_declaration : bool;
-      store_element_positions : bool;
-      idref_pass : bool;
-      validate_by_dfa : bool;
-      accept_only_deterministic_models : bool;
-      ...
-    }</PRE
->
-
-<P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->warner:</TT
->The parser prints
-warnings by invoking the method <TT
-CLASS="LITERAL"
->warn</TT
-> for this warner
-object. (Default: all warnings are dropped)</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->errors_with_line_numbers:</TT
->If
-true, errors contain line numbers; if false, errors contain only byte
-positions. The latter mode is faster. (Default: true)</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->enable_pinstr_nodes:</TT
->If true,
-the parser creates extra nodes for processing instructions. If false,
-processing instructions are simply added to the element or document surrounding
-the instructions. (Default: false)</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->enable_super_root_node:</TT
->If
-true, the parser creates an extra node which is the parent of the root of the
-document tree. This node is called super root; it is an element with type
-<TT
-CLASS="LITERAL"
->T_super_root</TT
->. - If there are processing instructions outside
-the root element and outside the DTD, they are added to the super root instead
-of the document. - If false, the super root node is not created. (Default:
-false)</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->enable_comment_nodes:</TT
->If true,
-the parser creates nodes for comments with type <TT
-CLASS="LITERAL"
->T_comment</TT
->;
-if false, such nodes are not created. (Default: false)</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->encoding:</TT
->Specifies the
-internal encoding of the parser. Most strings are then represented according to
-this encoding; however there are some exceptions (especially
-<TT
-CLASS="LITERAL"
->ext_id</TT
-> values which are always UTF-8 encoded).
-(Default: `Enc_iso88591)</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->recognize_standalone_declaration:</TT
-> If true and if the parser is
-validating, the <TT
-CLASS="LITERAL"
->standalone="yes"</TT
-> declaration forces that it
-is checked whether the document is a standalone document. - If false, or if the
-parser is in well-formedness mode, such declarations are ignored.
-(Default: true)</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->store_element_positions:</TT
-> If
-true, for every non-data node the source position is stored. If false, the
-position information is lost. If available, you can get the positions of nodes
-by invoking the <TT
-CLASS="LITERAL"
->position</TT
-> method.
-(Default: true)</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->idref_pass:</TT
->If true and if
-there is an ID index, the parser checks whether every IDREF or IDREFS attribute
-refer to an existing node; this requires that the parser traverses the whole
-doument tree. If false, this check is left out. (Default: false)</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->validate_by_dfa:</TT
->If true and if
-the content model for an element type is deterministic, a deterministic finite
-automaton is used to validate whether the element contents match the content
-model of the type. If false, or if a DFA is not available, a backtracking
-algorithm is used for validation. (Default: true)</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->accept_only_deterministic_models:</TT
-> If true, only deterministic content
-models are accepted; if false, any syntactically correct content models can be
-processed. (Default: true)</P
-></LI
-></UL
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1895"
->4.4.4. Which configuration should I use?</A
-></H2
-><P
->First, I recommend to vary the default configuration instead of
-creating a new configuration record. For instance, to set
-<TT
-CLASS="LITERAL"
->idref_pass</TT
-> to <TT
-CLASS="LITERAL"
->true</TT
->, change the default
-as in:
-<PRE
-CLASS="PROGRAMLISTING"
->let config = { default_config with idref_pass = true }</PRE
->
-The background is that I can add more options to the record in future versions
-of the parser without breaking your programs.</P
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->Do I need extra nodes for processing instructions? </B
->By default, such nodes are not created. This does not mean that the
-processing instructions are lost; however, you cannot find out the exact
-location where they occur. For example, the following XML text
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;x&#62;&#60;?pi1?&#62;&#60;y/&#62;&#60;?pi2?&#62;&#60;/x&#62; </PRE
-> 
-
-will normally create one element node for <TT
-CLASS="LITERAL"
->x</TT
-> containing
-<I
-CLASS="EMPHASIS"
->one</I
-> subnode for <TT
-CLASS="LITERAL"
->y</TT
->. The processing
-instructions are attached to <TT
-CLASS="LITERAL"
->x</TT
-> in a separate hash table; you
-can access them using <TT
-CLASS="LITERAL"
->x # pinstr "pi1"</TT
-> and <TT
-CLASS="LITERAL"
->x #
-pinstr "pi2"</TT
->, respectively. The information is lost where the
-instructions occur within <TT
-CLASS="LITERAL"
->x</TT
->.</P
-></DIV
-><P
->If the option <TT
-CLASS="LITERAL"
->enable_pinstr_nodes</TT
-> is
-turned on, the parser creates extra nodes <TT
-CLASS="LITERAL"
->pi1</TT
-> and
-<TT
-CLASS="LITERAL"
->pi2</TT
-> such that the subnodes of <TT
-CLASS="LITERAL"
->x</TT
-> are now: 
-
-<PRE
-CLASS="PROGRAMLISTING"
->x # sub_nodes = [ pi1; y; pi2 ]</PRE
->
-
-The extra nodes contain the processing instructions in the usual way, i.e. you
-can access them using <TT
-CLASS="LITERAL"
->pi1 # pinstr "pi1"</TT
-> and <TT
-CLASS="LITERAL"
->pi2 #
-pinstr "pi2"</TT
->, respectively.</P
-><P
->Note that you will need an exemplar for the PI nodes (see
-<TT
-CLASS="LITERAL"
->make_spec_from_alist</TT
->).</P
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->Do I need a super root node? </B
->By default, there is no super root node. The
-<TT
-CLASS="LITERAL"
->document</TT
-> object refers directly to the node representing the
-root element of the document, i.e.
-
-<PRE
-CLASS="PROGRAMLISTING"
->doc # root = r</PRE
->
-
-if <TT
-CLASS="LITERAL"
->r</TT
-> is the root node. This is sometimes inconvenient: (1)
-Some algorithms become simpler if every node has a parent, even the root
-node. (2) Some standards such as XPath call the "root node" the node whose
-child represents the root of the document. (3) The super root node can serve
-as a container for processing instructions outside the root element. Because of
-these reasons, it is possible to create an extra super root node, whose child
-is the root node:
-
-<PRE
-CLASS="PROGRAMLISTING"
->doc # root = sr         &#38;&#38;
-sr # sub_nodes = [ r ]</PRE
->
-
-When extra nodes are also created for processing instructions, these nodes can
-be added to the super root node if they occur outside the root element (reason
-(3)), and the order reflects the order in the source text.</P
-></DIV
-><P
->Note that you will need an exemplar for the super root node
-(see <TT
-CLASS="LITERAL"
->make_spec_from_alist</TT
->).</P
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->What is the effect of the UTF-8 encoding? </B
->By default, the parser represents strings (with few
-exceptions) as ISO-8859-1 strings. These are well-known, and there are tools
-and fonts for this encoding.</P
-></DIV
-><P
->However, internationalization may require that you switch over
-to UTF-8 encoding. In most environments, the immediate effect will be that you
-cannot read strings with character codes &#62;= 160 any longer; your terminal will
-only show funny glyph combinations. It is strongly recommended to install
-Unicode fonts (<A
-HREF="http://czyborra.com/unifont/"
-TARGET="_top"
->GNU Unifont</A
->, 
-<A
-HREF="http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz"
-TARGET="_top"
->Markus Kuhn's fonts</A
->) and <A
-HREF="http://myweb.clark.net/pub/dickey/xterm/xterm.html"
-TARGET="_top"
->terminal emulators
-that can handle UTF-8 byte sequences</A
->. Furthermore, a Unicode editor may
-be helpful (such as <A
-HREF="ftp://metalab.unc.edu/pub/Linux/apps/editors/X/"
-TARGET="_top"
->Yudit</A
->). There are
-also <A
-HREF="http://www.cl.cam.ac.uk/~mgk25/unicode.html"
-TARGET="_top"
->FAQ</A
-> by
-Markus Kuhn.</P
-><P
->By setting <TT
-CLASS="LITERAL"
->encoding</TT
-> to
-<TT
-CLASS="LITERAL"
->`Enc_utf8</TT
-> all strings originating from the parsed XML
-document are represented as UTF-8 strings. This includes not only character
-data and attribute values but also element names, attribute names and so on, as
-it is possible to use any Unicode letter to form such names.  Strictly
-speaking, PXP is only XML-compliant if the UTF-8 mode is used; otherwise it
-will have difficulties when validating documents containing
-non-ISO-8859-1-names.</P
-><P
->This mode does not have any impact on the external
-representation of documents. The character set assumed when reading a document
-is set in the XML declaration, and character set when writing a document must
-be passed to the <TT
-CLASS="LITERAL"
->write</TT
-> method.</P
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->How do I check that nodes exist which are referred by IDREF attributes? </B
->First, you must create an index of all occurring ID
-attributes:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let index = new hash_index</PRE
->
-
-This index must be passed to the parsing function:
-
-<PRE
-CLASS="PROGRAMLISTING"
->parse_document_entity
-  ~id_index:(index :&#62; index)
-  config source spec</PRE
->
-
-Next, you must turn on the <TT
-CLASS="LITERAL"
->idref_pass</TT
-> mode:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let config = { default_config with idref_pass = true }</PRE
->
-
-Note that now the whole document tree will be traversed, and every node will be
-checked for IDREF and IDREFS attributes. If the tree is big, this may take some
-time.</P
-></DIV
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->What are deterministic content models? </B
->These type of models can speed up the validation checks;
-furthermore they ensure SGML-compatibility. In particular, a content model is
-deterministic if the parser can determine the actually used alternative by
-inspecting only the current token. For example, this element has
-non-deterministic contents:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT x ((u,v) | (u,y+) | v)&#62;</PRE
->
-
-If the first element in <TT
-CLASS="LITERAL"
->x</TT
-> is <TT
-CLASS="LITERAL"
->u</TT
->, the
-parser does not know which of the alternatives <TT
-CLASS="LITERAL"
->(u,v)</TT
-> or
-<TT
-CLASS="LITERAL"
->(u,y+)</TT
-> will work; the parser must also inspect the second
-element to be able to distinguish between the alternatives. Because such
-look-ahead (or "guessing") is required, this example is
-non-deterministic.</P
-></DIV
-><P
->The XML standard demands that content models must be
-deterministic. So it is recommended to turn the option
-<TT
-CLASS="LITERAL"
->accept_only_deterministic_models</TT
-> on; however, PXP can also
-process non-deterministic models using a backtracking algorithm.</P
-><P
->Deterministic models ensure that validation can be performed in
-linear time. In order to get the maximum benefits, PXP also implements a
-special validator that profits from deterministic models; this is the
-deterministic finite automaton (DFA). This validator is enabled per element
-type if the element type has a deterministic model and if the option
-<TT
-CLASS="LITERAL"
->validate_by_dfa</TT
-> is turned on.</P
-><P
->In general, I expect that the DFA method is faster than the
-backtracking method; especially in the worst case the DFA takes only linear
-time. However, if the content model has only few alternatives and the
-alternatives do not nest, the backtracking algorithm may be better.</P
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="x1812.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="x1965.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->The DTD classes</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="c1567.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->Updates</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/x1965.html b/helm/DEVEL/pxp/pxp/doc/manual/html/x1965.html
deleted file mode 100644 (file)
index 8fc8562..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Updates</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="Configuring and calling the parser"
-HREF="c1567.html"><LINK
-REL="PREVIOUS"
-TITLE="Invoking the parser"
-HREF="x1818.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="x1818.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 4. Configuring and calling the parser</TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
->&nbsp;</TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN1965"
->4.5. Updates</A
-></H1
-><P
-><I
-CLASS="EMPHASIS"
->Some (often later added) features that are otherwise
-not explained in the manual but worth to be mentioned.</I
-></P
-><P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
->Methods node_position, node_path, nth_node,
-previous_node, next_node for nodes: See pxp_document.mli</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
->Functions to determine the document order of nodes:
-compare, create_ord_index, ord_number, ord_compare: See pxp_document.mli</P
-></LI
-></UL
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="x1818.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->&nbsp;</TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->Invoking the parser</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="c1567.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->&nbsp;</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/x468.html b/helm/DEVEL/pxp/pxp/doc/manual/html/x468.html
deleted file mode 100644 (file)
index dc9cc1e..0000000
+++ /dev/null
@@ -1,474 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->A complete example: The readme DTD</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="What is XML?"
-HREF="c36.html"><LINK
-REL="PREVIOUS"
-TITLE="Highlights of XML"
-HREF="x107.html"><LINK
-REL="NEXT"
-TITLE="Using PXP"
-HREF="c533.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="x107.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 1. What is XML?</TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="c533.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="SECT.README.DTD"
->1.3. A complete example: The <I
-CLASS="EMPHASIS"
->readme</I
-> DTD</A
-></H1
-><P
->The reason for <I
-CLASS="EMPHASIS"
->readme</I
-> was that I often wrote two versions
-of files such as README and INSTALL which explain aspects of a distributed
-software archive; one version was ASCII-formatted, the other was written in
-HTML. Maintaining both versions means double amount of work, and changes
-of one version may be forgotten in the other version. To improve this situation
-I invented the <I
-CLASS="EMPHASIS"
->readme</I
-> DTD which allows me to maintain only
-one source written as XML document, and to generate the ASCII and the HTML
-version from it.</P
-><P
->In this section, I explain only the DTD. The <I
-CLASS="EMPHASIS"
->readme</I
-> DTD is
-contained in the <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-> distribution together with the two converters to
-produce ASCII and HTML. Another <A
-HREF="x738.html"
->section</A
-> of this manual describes the HTML
-converter.</P
-><P
->The documents have a simple structure: There are up to three levels of nested
-sections, paragraphs, item lists, footnotes, hyperlinks, and text emphasis. The
-outermost element has usually the type <TT
-CLASS="LITERAL"
->readme</TT
->, it is
-declared by
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT readme (sect1+)&#62;
-&#60;!ATTLIST readme
-          title CDATA #REQUIRED&#62;</PRE
->
-
-This means that this element contains one or more sections of the first level
-(element type <TT
-CLASS="LITERAL"
->sect1</TT
->), and that the element has a required
-attribute <TT
-CLASS="LITERAL"
->title</TT
-> containing character data (CDATA). Note that
-<TT
-CLASS="LITERAL"
->readme</TT
-> elements must not contain text data.</P
-><P
->The three levels of sections are declared as follows:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT sect1 (title,(sect2|p|ul)+)&#62;
-
-&#60;!ELEMENT sect2 (title,(sect3|p|ul)+)&#62;
-
-&#60;!ELEMENT sect3 (title,(p|ul)+)&#62;</PRE
->
-
-Every section has a <TT
-CLASS="LITERAL"
->title</TT
-> element as first subelement. After
-the title an arbitrary but non-empty sequence of inner sections, paragraphs and
-item lists follows. Note that the inner sections must belong to the next higher
-section level; <TT
-CLASS="LITERAL"
->sect3</TT
-> elements must not contain inner
-sections because there is no next higher level.</P
-><P
->Obviously, all three declarations allow paragraphs (<TT
-CLASS="LITERAL"
->p</TT
->) and
-item lists (<TT
-CLASS="LITERAL"
->ul</TT
->). The definition can be simplified at this
-point by using a parameter entity:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ENTITY % p.like "p|ul"&#62;
-
-&#60;!ELEMENT sect1 (title,(sect2|%p.like;)+)&#62;
-
-&#60;!ELEMENT sect2 (title,(sect3|%p.like;)+)&#62;
-
-&#60;!ELEMENT sect3 (title,(%p.like;)+)&#62;</PRE
->
-
-Here, the entity <TT
-CLASS="LITERAL"
->p.like</TT
-> is nothing but a macro abbreviating
-the same sequence of declarations; if new elements on the same level as
-<TT
-CLASS="LITERAL"
->p</TT
-> and <TT
-CLASS="LITERAL"
->ul</TT
-> are later added, it is
-sufficient only to change the entity definition. Note that there are some
-restrictions on the usage of entities in this context; most important, entities
-containing a left paranthesis must also contain the corresponding right
-paranthesis. </P
-><P
->Note that the entity <TT
-CLASS="LITERAL"
->p.like</TT
-> is a
-<I
-CLASS="EMPHASIS"
->parameter</I
-> entity, i.e. the ENTITY declaration contains a
-percent sign, and the entity is referred to by
-<TT
-CLASS="LITERAL"
->%p.like;</TT
->. This kind of entity must be used to abbreviate
-parts of the DTD; the <I
-CLASS="EMPHASIS"
->general</I
-> entities declared without
-percent sign and referred to as <TT
-CLASS="LITERAL"
->&amp;name;</TT
-> are not allowed
-in this context.</P
-><P
->The <TT
-CLASS="LITERAL"
->title</TT
-> element specifies the title of the section in
-which it occurs. The title is given as character data, optionally interspersed
-with line breaks (<TT
-CLASS="LITERAL"
->br</TT
->):
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT title (#PCDATA|br)*&#62;</PRE
->
-
-Compared with the <TT
-CLASS="LITERAL"
->title</TT
-> <I
-CLASS="EMPHASIS"
->attribute</I
-> of
-the <TT
-CLASS="LITERAL"
->readme</TT
-> element, this element allows inner markup
-(i.e. <TT
-CLASS="LITERAL"
->br</TT
->) while attribute values do not: It is an error if
-an attribute value contains the left angle bracket &lt; literally such that it
-is impossible to include inner elements. </P
-><P
->The paragraph element <TT
-CLASS="LITERAL"
->p</TT
-> has a structure similar to
-<TT
-CLASS="LITERAL"
->title</TT
->, but it allows more inner elements:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ENTITY % text "br|code|em|footnote|a"&#62;
-
-&#60;!ELEMENT p (#PCDATA|%text;)*&#62;</PRE
->
-
-Line breaks do not have inner structure, so they are declared as being empty:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT br EMPTY&#62;</PRE
->
-
-This means that really nothing is allowed within <TT
-CLASS="LITERAL"
->br</TT
->; you
-must always write <TT
-CLASS="LITERAL"
->&#60;br&#62;&#60;/br&#62;</TT
-> or abbreviated
-<TT
-CLASS="LITERAL"
->&#60;br/&#62;</TT
->.</P
-><P
->Code samples should be marked up by the <TT
-CLASS="LITERAL"
->code</TT
-> tag; emphasized
-text can be indicated by <TT
-CLASS="LITERAL"
->em</TT
->:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT code (#PCDATA)&#62;
-
-&#60;!ELEMENT em (#PCDATA|%text;)*&#62;</PRE
->
-
-That <TT
-CLASS="LITERAL"
->code</TT
-> elements are not allowed to contain further markup
-while <TT
-CLASS="LITERAL"
->em</TT
-> elements do is a design decision by the author of
-the DTD.</P
-><P
->Unordered lists simply consists of one or more list items, and a list item may
-contain paragraph-level material:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT ul (li+)&#62;
-
-&#60;!ELEMENT li (%p.like;)*&#62;</PRE
->
-
-Footnotes are described by the text of the note; this text may contain
-text-level markup. There is no mechanism to describe the numbering scheme of
-footnotes, or to specify how footnote references are printed.
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT footnote (#PCDATA|%text;)*&#62;</PRE
->
-
-Hyperlinks are written as in HTML. The anchor tag contains the text describing
-where the link points to, and the <TT
-CLASS="LITERAL"
->href</TT
-> attribute is the
-pointer (as URL). There is no way to describe locations of "hash marks". If the
-link refers to another <I
-CLASS="EMPHASIS"
->readme</I
-> document, the attribute
-<TT
-CLASS="LITERAL"
->readmeref</TT
-> should be used instead of <TT
-CLASS="LITERAL"
->href</TT
->.
-The reason is that the converted document has usually a different system
-identifier (file name), and the link to a converted document must be
-converted, too.
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ELEMENT a (#PCDATA)*&#62;
-&#60;!ATTLIST a 
-          href      CDATA #IMPLIED
-          readmeref CDATA #IMPLIED
-&#62;</PRE
->
-
-Note that although it is only sensible to specify one of the two attributes,
-the DTD has no means to express this restriction.</P
-><P
->So far the DTD. Finally, here is a document for it:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;?xml version="1.0" encoding="ISO-8859-1"?&#62;
-&#60;!DOCTYPE readme SYSTEM "readme.dtd"&#62;
-&#60;readme title="How to use the readme converters"&#62;
-&#60;sect1&#62;
-  &#60;title&#62;Usage&#60;/title&#62;
-  &#60;p&#62;
-    The &#60;em&#62;readme&#60;/em&#62; converter is invoked on the command line by:
-  &#60;/p&#62;
-  &#60;p&#62;
-    &#60;code&#62;readme [ -text | -html ] input.xml&#60;/code&#62;
-  &#60;/p&#62;
-  &#60;p&#62;
-    Here a list of options:
-  &#60;/p&#62;
-  &#60;ul&#62;
-    &#60;li&#62;
-      &#60;p&#62;&#60;code&#62;-text&#60;/code&#62;: specifies that ASCII output should be produced&#60;/p&#62;
-    &#60;/li&#62;
-    &#60;li&#62;
-      &#60;p&#62;&#60;code&#62;-html&#60;/code&#62;: specifies that HTML output should be produced&#60;/p&#62;
-    &#60;/li&#62;
-  &#60;/ul&#62;
-  &#60;p&#62;
-    The input file must be given on the command line. The converted output is
-    printed to &#60;em&#62;stdout&#60;/em&#62;.
-  &#60;/p&#62;
-&#60;/sect1&#62;
-&#60;sect1&#62;
-  &#60;title&#62;Author&#60;/title&#62;
-  &#60;p&#62;
-    The program has been written by
-    &#60;a href="mailto:Gerd.Stolpmann@darmstadt.netsurf.de"&#62;Gerd Stolpmann&#60;/a&#62;.
-  &#60;/p&#62;
-&#60;/sect1&#62;
-&#60;/readme&#62;</PRE
->&#13;</P
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="x107.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="c533.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->Highlights of XML</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="c36.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->Using <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/x550.html b/helm/DEVEL/pxp/pxp/doc/manual/html/x550.html
deleted file mode 100644 (file)
index f2dcdd7..0000000
+++ /dev/null
@@ -1,765 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->How to parse a document from an application</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="Using PXP"
-HREF="c533.html"><LINK
-REL="PREVIOUS"
-TITLE="Using PXP"
-HREF="c533.html"><LINK
-REL="NEXT"
-TITLE="Class-based processing of the node tree"
-HREF="x675.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="c533.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 2. Using <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-></TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="x675.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN550"
->2.2. How to parse a document from an application</A
-></H1
-><P
->Let me first give a rough overview of the object model of the parser. The
-following items are represented by objects:
-
-<P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><I
-CLASS="EMPHASIS"
->Documents:</I
-> The document representation is more or less the
-anchor for the application; all accesses to the parsed entities start here. It
-is described by the class <TT
-CLASS="LITERAL"
->document</TT
-> contained in the module
-<TT
-CLASS="LITERAL"
->Pxp_document</TT
->. You can get some global information, such
-as the XML declaration the document begins with, the DTD of the document,
-global processing instructions, and most important, the document tree. </P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><I
-CLASS="EMPHASIS"
->The contents of documents:</I
-> The contents have the structure
-of a tree: Elements contain other elements and text<A
-NAME="AEN562"
-HREF="#FTN.AEN562"
->[1]</A
->. 
-
-The common type to represent both kinds of content is <TT
-CLASS="LITERAL"
->node</TT
->
-which is a class type that unifies the properties of elements and character
-data. Every node has a list of children (which is empty if the element is empty
-or the node represents text); nodes may have attributes; nodes have always text
-contents. There are two implementations of <TT
-CLASS="LITERAL"
->node</TT
->, the class
-<TT
-CLASS="LITERAL"
->element_impl</TT
-> for elements, and the class
-<TT
-CLASS="LITERAL"
->data_impl</TT
-> for text data. You find these classes and class
-types in the module <TT
-CLASS="LITERAL"
->Pxp_document</TT
->, too.</P
-><P
->Note that attribute lists are represented by non-class values.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><I
-CLASS="EMPHASIS"
->The node extension:</I
-> For advanced usage, every node of the
-document may have an associated <I
-CLASS="EMPHASIS"
->extension</I
-> which is simply
-a second object. This object must have the three methods
-<TT
-CLASS="LITERAL"
->clone</TT
->, <TT
-CLASS="LITERAL"
->node</TT
->, and
-<TT
-CLASS="LITERAL"
->set_node</TT
-> as bare minimum, but you are free to add methods as
-you want. This is the preferred way to add functionality to the document
-tree<A
-NAME="AEN582"
-HREF="#FTN.AEN582"
->[2]</A
->. The class type <TT
-CLASS="LITERAL"
->extension</TT
-> is
-defined in <TT
-CLASS="LITERAL"
->Pxp_document</TT
->, too.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><I
-CLASS="EMPHASIS"
->The DTD:</I
-> Sometimes it is necessary to access the DTD of a
-document; the average application does not need this feature. The class
-<TT
-CLASS="LITERAL"
->dtd</TT
-> describes DTDs, and makes it possible to get
-representations of element, entity, and notation declarations as well as
-processing instructions contained in the DTD. This class, and
-<TT
-CLASS="LITERAL"
->dtd_element</TT
->, <TT
-CLASS="LITERAL"
->dtd_notation</TT
->, and
-<TT
-CLASS="LITERAL"
->proc_instruction</TT
-> can be found in the module
-<TT
-CLASS="LITERAL"
->Pxp_dtd</TT
->. There are a couple of classes representing
-different kinds of entities; these can be found in the module
-<TT
-CLASS="LITERAL"
->Pxp_entity</TT
->. </P
-></LI
-></UL
->
-
-Additionally, the following modules play a role:
-
-<P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><I
-CLASS="EMPHASIS"
->Pxp_yacc:</I
-> Here the main parsing functions such as
-<TT
-CLASS="LITERAL"
->parse_document_entity</TT
-> are located. Some additional types and
-functions allow the parser to be configured in a non-standard way.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><I
-CLASS="EMPHASIS"
->Pxp_types:</I
-> This is a collection of basic types and
-exceptions. </P
-></LI
-></UL
->
-
-There are some further modules that are needed internally but are not part of
-the API.</P
-><P
->Let the document to be parsed be stored in a file called
-<TT
-CLASS="LITERAL"
->doc.xml</TT
->. The parsing process is started by calling the
-function
-
-<PRE
-CLASS="PROGRAMLISTING"
->val parse_document_entity : config -&#62; source -&#62; 'ext spec -&#62; 'ext document</PRE
->
-
-defined in the module <TT
-CLASS="LITERAL"
->Pxp_yacc</TT
->. The first argument
-specifies some global properties of the parser; it is recommended to start with
-the <TT
-CLASS="LITERAL"
->default_config</TT
->. The second argument determines where the
-document to be parsed comes from; this may be a file, a channel, or an entity
-ID. To parse <TT
-CLASS="LITERAL"
->doc.xml</TT
->, it is sufficient to pass
-<TT
-CLASS="LITERAL"
->from_file "doc.xml"</TT
->. </P
-><P
->The third argument passes the object specification to use. Roughly
-speaking, it determines which classes implement the node objects of which
-element types, and which extensions are to be used. The <TT
-CLASS="LITERAL"
->'ext</TT
->
-polymorphic variable is the type of the extension. For the moment, let us
-simply pass <TT
-CLASS="LITERAL"
->default_spec</TT
-> as this argument, and ignore it.</P
-><P
->So the following expression parses <TT
-CLASS="LITERAL"
->doc.xml</TT
->:
-
-<PRE
-CLASS="PROGRAMLISTING"
->open Pxp_yacc
-let d = parse_document_entity default_config (from_file "doc.xml") default_spec</PRE
->
-
-Note that <TT
-CLASS="LITERAL"
->default_config</TT
-> implies that warnings are collected
-but not printed. Errors raise one of the exception defined in
-<TT
-CLASS="LITERAL"
->Pxp_types</TT
->; to get readable errors and warnings catch the
-exceptions as follows:
-
-<PRE
-CLASS="PROGRAMLISTING"
->class warner =
-  object 
-    method warn w =
-      print_endline ("WARNING: " ^ w)
-  end
-;;
-
-try
-  let config = { default_config with warner = new warner } in
-  let d = parse_document_entity config (from_file "doc.xml") default_spec
-  in
-    ...
-with
-   e -&#62;
-     print_endline (Pxp_types.string_of_exn e)</PRE
->
-
-Now <TT
-CLASS="LITERAL"
->d</TT
-> is an object of the <TT
-CLASS="LITERAL"
->document</TT
->
-class. If you want the node tree, you can get the root element by
-
-<PRE
-CLASS="PROGRAMLISTING"
->let root = d # root</PRE
->
-
-and if you would rather like to access the DTD, determine it by
-
-<PRE
-CLASS="PROGRAMLISTING"
->let dtd = d # dtd</PRE
->
-
-As it is more interesting, let us investigate the node tree now. Given the root
-element, it is possible to recursively traverse the whole tree. The children of
-a node <TT
-CLASS="LITERAL"
->n</TT
-> are returned by the method
-<TT
-CLASS="LITERAL"
->sub_nodes</TT
->, and the type of a node is returned by
-<TT
-CLASS="LITERAL"
->node_type</TT
->. This function traverses the tree, and prints the
-type of each node:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let rec print_structure n =
-  let ntype = n # node_type in
-  match ntype with
-    T_element name -&#62;
-      print_endline ("Element of type " ^ name);
-      let children = n # sub_nodes in
-      List.iter print_structure children
-  | T_data -&#62;
-      print_endline "Data"
-  | _ -&#62;
-      (* Other node types are not possible unless the parser is configured
-         differently.
-       *)
-      assert false</PRE
->
-
-You can call this function by
-
-<PRE
-CLASS="PROGRAMLISTING"
->print_structure root</PRE
->
-
-The type returned by <TT
-CLASS="LITERAL"
->node_type</TT
-> is either <TT
-CLASS="LITERAL"
->T_element
-name</TT
-> or <TT
-CLASS="LITERAL"
->T_data</TT
->. The <TT
-CLASS="LITERAL"
->name</TT
-> of the
-element type is the string included in the angle brackets. Note that only
-elements have children; data nodes are always leaves of the tree.</P
-><P
->There are some more methods in order to access a parsed node tree:
-
-<P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->n # parent</TT
->: Returns the parent node, or raises
-<TT
-CLASS="LITERAL"
->Not_found</TT
-> if the node is already the root</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->n # root</TT
->: Returns the root of the node tree. </P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->n # attribute a</TT
->: Returns the value of the attribute with
-name <TT
-CLASS="LITERAL"
->a</TT
->. The method returns a value for every
-<I
-CLASS="EMPHASIS"
->declared</I
-> attribute, independently of whether the attribute
-instance is defined or not. If the attribute is not declared,
-<TT
-CLASS="LITERAL"
->Not_found</TT
-> will be raised. (In well-formedness mode, every
-attribute is considered as being implicitly declared with type
-<TT
-CLASS="LITERAL"
->CDATA</TT
->.) </P
-><P
->The following return values are possible: <TT
-CLASS="LITERAL"
->Value s</TT
->, 
-<TT
-CLASS="LITERAL"
->Valuelist sl</TT
-> , and <TT
-CLASS="LITERAL"
->Implied_value</TT
->. 
-The first two value types indicate that the attribute value is available,
-either because there is a definition
-<TT
-CLASS="LITERAL"
-><TT
-CLASS="REPLACEABLE"
-><I
->a</I
-></TT
->="<TT
-CLASS="REPLACEABLE"
-><I
->value</I
-></TT
->"</TT
->
-in the XML text, or because there is a default value (declared in the
-DTD). Only if both the instance definition and the default declaration are
-missing, the latter value <TT
-CLASS="LITERAL"
->Implied_value</TT
-> will be returned.</P
-><P
->In the DTD, every attribute is typed. There are single-value types (CDATA, ID,
-IDREF, ENTITY, NMTOKEN, enumerations), in which case the method passes
-<TT
-CLASS="LITERAL"
->Value s</TT
-> back, where <TT
-CLASS="LITERAL"
->s</TT
-> is the normalized
-string value of the attribute. The other types (IDREFS, ENTITIES, NMTOKENS)
-represent list values, and the parser splits the XML literal into several
-tokens and returns these tokens as <TT
-CLASS="LITERAL"
->Valuelist sl</TT
->.</P
-><P
->Normalization means that entity references (the
-<TT
-CLASS="LITERAL"
->&amp;<TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->;</TT
-> tokens) and
-character references
-(<TT
-CLASS="LITERAL"
->&amp;#<TT
-CLASS="REPLACEABLE"
-><I
->number</I
-></TT
->;</TT
->) are replaced
-by the text they represent, and that white space characters are converted into
-plain spaces.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->n # data</TT
->: Returns the character data contained in the
-node. For data nodes, the meaning is obvious as this is the main content of
-data nodes. For element nodes, this method returns the concatenated contents of
-all inner data nodes.</P
-><P
->Note that entity references included in the text are resolved while they are
-being parsed; for example the text "a &#38;lt;&#38;gt; b" will be returned
-as "a &#60;&#62; b" by this method. Spaces of data nodes are always
-preserved. Newlines are preserved, but always converted to \n characters even
-if newlines are encoded as \r\n or \r. Normally you will never see two adjacent
-data nodes because the parser collapses all data material at one location into
-one node. (However, if you create your own tree or transform the parsed tree,
-it is possible to have adjacent data nodes.)</P
-><P
->Note that elements that do <I
-CLASS="EMPHASIS"
->not</I
-> allow #PCDATA as content
-will not have data nodes as children. This means that spaces and newlines, the
-only character material allowed for such elements, are silently dropped.</P
-></LI
-></UL
->
-
-For example, if the task is to print all contents of elements with type
-"valuable" whose attribute "priority" is "1", this function can help:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let rec print_valuable_prio1 n =
-  let ntype = n # node_type in
-  match ntype with
-    T_element "valuable" when n # attribute "priority" = Value "1" -&#62;
-      print_endline "Valuable node with priotity 1 found:";
-      print_endline (n # data)
-  | (T_element _ | T_data) -&#62;
-      let children = n # sub_nodes in
-      List.iter print_valuable_prio1 children
-  | _ -&#62;
-      assert false</PRE
->
-
-You can call this function by:
-
-<PRE
-CLASS="PROGRAMLISTING"
->print_valuable_prio1 root</PRE
->
-
-If you like a DSSSL-like style, you can make the function
-<TT
-CLASS="LITERAL"
->process_children</TT
-> explicit:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let rec print_valuable_prio1 n =
-
-  let process_children n =
-    let children = n # sub_nodes in
-    List.iter print_valuable_prio1 children 
-  in
-
-  let ntype = n # node_type in
-  match ntype with
-    T_element "valuable" when n # attribute "priority" = Value "1" -&#62;
-      print_endline "Valuable node with priority 1 found:";
-      print_endline (n # data)
-  | (T_element _ | T_data) -&#62;
-      process_children n
-  | _ -&#62;
-      assert false</PRE
->
-
-So far, O'Caml is now a simple "style-sheet language": You can form a big
-"match" expression to distinguish between all significant cases, and provide
-different reactions on different conditions. But this technique has
-limitations; the "match" expression tends to get larger and larger, and it is
-difficult to store intermediate values as there is only one big
-recursion. Alternatively, it is also possible to represent the various cases as
-classes, and to use dynamic method lookup to find the appropiate class. The
-next section explains this technique in detail.&#13;</P
-></DIV
-><H3
-CLASS="FOOTNOTES"
->Notes</H3
-><TABLE
-BORDER="0"
-CLASS="FOOTNOTES"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="LEFT"
-VALIGN="TOP"
-WIDTH="5%"
-><A
-NAME="FTN.AEN562"
-HREF="x550.html#AEN562"
->[1]</A
-></TD
-><TD
-ALIGN="LEFT"
-VALIGN="TOP"
-WIDTH="95%"
-><P
->Elements may
-also contain processing instructions. Unlike other document models, <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
->
-separates processing instructions from the rest of the text and provides a
-second interface to access them (method <TT
-CLASS="LITERAL"
->pinstr</TT
->). However,
-there is a parser option (<TT
-CLASS="LITERAL"
->enable_pinstr_nodes</TT
->) which changes
-the behaviour of the parser such that extra nodes for processing instructions
-are included into the tree.</P
-><P
->Furthermore, the tree does normally not contain nodes for XML comments;
-they are ignored by default. Again, there is an option
-(<TT
-CLASS="LITERAL"
->enable_comment_nodes</TT
->) changing this.</P
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
-VALIGN="TOP"
-WIDTH="5%"
-><A
-NAME="FTN.AEN582"
-HREF="x550.html#AEN582"
->[2]</A
-></TD
-><TD
-ALIGN="LEFT"
-VALIGN="TOP"
-WIDTH="95%"
-><P
->Due to the typing system it is more or less impossible to
-derive recursive classes in O'Caml. To get around this, it is common practice
-to put the modifiable or extensible part of recursive objects into parallel
-objects.</P
-></TD
-></TR
-></TABLE
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="c533.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="x675.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->Using <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="c533.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->Class-based processing of the node tree</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/x675.html b/helm/DEVEL/pxp/pxp/doc/manual/html/x675.html
deleted file mode 100644 (file)
index cf3f473..0000000
+++ /dev/null
@@ -1,538 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Class-based processing of the node tree</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="Using PXP"
-HREF="c533.html"><LINK
-REL="PREVIOUS"
-TITLE="How to parse a document from an application"
-HREF="x550.html"><LINK
-REL="NEXT"
-TITLE="Example: An HTML backend for the readme
-DTD"
-HREF="x738.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="x550.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 2. Using <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-></TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="x738.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN675"
->2.3. Class-based processing of the node tree</A
-></H1
-><P
->By default, the parsed node tree consists of objects of the same class; this is
-a good design as long as you want only to access selected parts of the
-document. For complex transformations, it may be better to use different
-classes for objects describing different element types.</P
-><P
->For example, if the DTD declares the element types <TT
-CLASS="LITERAL"
->a</TT
->,
-<TT
-CLASS="LITERAL"
->b</TT
->, and <TT
-CLASS="LITERAL"
->c</TT
->, and if the task is to convert
-an arbitrary document into a printable format, the idea is to define for every
-element type a separate class that has a method <TT
-CLASS="LITERAL"
->print</TT
->. The
-classes are <TT
-CLASS="LITERAL"
->eltype_a</TT
->, <TT
-CLASS="LITERAL"
->eltype_b</TT
->, and
-<TT
-CLASS="LITERAL"
->eltype_c</TT
->, and every class implements
-<TT
-CLASS="LITERAL"
->print</TT
-> such that elements of the type corresponding to the
-class are converted to the output format.</P
-><P
->The parser supports such a design directly. As it is impossible to derive
-recursive classes in O'Caml<A
-NAME="AEN688"
-HREF="#FTN.AEN688"
->[1]</A
->, the specialized element classes cannot be formed by
-simply inheriting from the built-in classes of the parser and adding methods
-for customized functionality. To get around this limitation, every node of the
-document tree is represented by <I
-CLASS="EMPHASIS"
->two</I
-> objects, one called
-"the node" and containing the recursive definition of the tree, one called "the
-extension". Every node object has a reference to the extension, and the
-extension has a reference to the node. The advantage of this model is that it
-is now possible to customize the extension without affecting the typing
-constraints of the recursive node definition.</P
-><P
->Every extension must have the three methods <TT
-CLASS="LITERAL"
->clone</TT
->,
-<TT
-CLASS="LITERAL"
->node</TT
->, and <TT
-CLASS="LITERAL"
->set_node</TT
->. The method
-<TT
-CLASS="LITERAL"
->clone</TT
-> creates a deep copy of the extension object and
-returns it; <TT
-CLASS="LITERAL"
->node</TT
-> returns the node object for this extension
-object; and <TT
-CLASS="LITERAL"
->set_node</TT
-> is used to tell the extension object
-which node is associated with it, this method is automatically called when the
-node tree is initialized. The following definition is a good starting point
-for these methods; usually <TT
-CLASS="LITERAL"
->clone</TT
-> must be further refined
-when instance variables are added to the class:
-
-<PRE
-CLASS="PROGRAMLISTING"
->class custom_extension =
-  object (self)
-
-    val mutable node = (None : custom_extension node option)
-
-    method clone = {&#60; &#62;} 
-    method node =
-      match node with
-          None -&#62;
-            assert false
-        | Some n -&#62; n
-    method set_node n =
-      node &#60;- Some n
-
-  end</PRE
->
-
-This part of the extension is usually the same for all classes, so it is a good
-idea to consider <TT
-CLASS="LITERAL"
->custom_extension</TT
-> as the super-class of the
-further class definitions. Continuining the example of above, we can define the
-element type classes as follows:
-
-<PRE
-CLASS="PROGRAMLISTING"
->class virtual custom_extension =
-  object (self)
-    ... clone, node, set_node defined as above ...
-
-    method virtual print : out_channel -&#62; unit
-  end
-
-class eltype_a =
-  object (self)
-    inherit custom_extension
-    method print ch = ...
-  end
-
-class eltype_b =
-  object (self)
-    inherit custom_extension
-    method print ch = ...
-  end
-
-class eltype_c =
-  object (self)
-    inherit custom_extension
-    method print ch = ...
-  end</PRE
->
-
-The method <TT
-CLASS="LITERAL"
->print</TT
-> can now be implemented for every element
-type separately. Note that you get the associated node by invoking
-
-<PRE
-CLASS="PROGRAMLISTING"
->self # node</PRE
->
-
-and you get the extension object of a node <TT
-CLASS="LITERAL"
->n</TT
-> by writing 
-
-<PRE
-CLASS="PROGRAMLISTING"
->n # extension</PRE
->
-
-It is guaranteed that 
-
-<PRE
-CLASS="PROGRAMLISTING"
->self # node # extension == self</PRE
->
-
-always holds.</P
-><P
->Here are sample definitions of the <TT
-CLASS="LITERAL"
->print</TT
->
-methods:
-
-<PRE
-CLASS="PROGRAMLISTING"
->class eltype_a =
-  object (self)
-    inherit custom_extension
-    method print ch = 
-      (* Nodes &#60;a&#62;...&#60;/a&#62; are only containers: *)
-      output_string ch "(";
-      List.iter
-        (fun n -&#62; n # extension # print ch)
-        (self # node # sub_nodes);
-      output_string ch ")";
-  end
-
-class eltype_b =
-  object (self)
-    inherit custom_extension
-    method print ch =
-      (* Print the value of the CDATA attribute "print": *)
-      match self # node # attribute "print" with
-        Value s       -&#62; output_string ch s
-      | Implied_value -&#62; output_string ch "&#60;missing&#62;"
-      | Valuelist l   -&#62; assert false   
-                         (* not possible because the att is CDATA *)
-  end
-
-class eltype_c =
-  object (self)
-    inherit custom_extension
-    method print ch = 
-      (* Print the contents of this element: *)
-      output_string ch (self # node # data)
-  end
-
-class null_extension =
-  object (self)
-    inherit custom_extension
-    method print ch = assert false
-  end</PRE
-></P
-><P
->The remaining task is to configure the parser such that these extension classes
-are actually used. Here another problem arises: It is not possible to
-dynamically select the class of an object to be created. As workaround,
-<SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-> allows the user to specify <I
-CLASS="EMPHASIS"
->exemplar objects</I
-> for
-the various element types; instead of creating the nodes of the tree by
-applying the <TT
-CLASS="LITERAL"
->new</TT
-> operator the nodes are produced by
-duplicating the exemplars. As object duplication preserves the class of the
-object, one can create fresh objects of every class for which previously an
-exemplar has been registered.</P
-><P
->Exemplars are meant as objects without contents, the only interesting thing is
-that exemplars are instances of a certain class. The creation of an exemplar
-for an element node can be done by:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let element_exemplar = new element_impl extension_exemplar</PRE
->
-
-And a data node exemplar is created by:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let data_exemplar = new data_impl extension_exemplar</PRE
->
-
-The classes <TT
-CLASS="LITERAL"
->element_impl</TT
-> and <TT
-CLASS="LITERAL"
->data_impl</TT
->
-are defined in the module <TT
-CLASS="LITERAL"
->Pxp_document</TT
->. The constructors
-initialize the fresh objects as empty objects, i.e. without children, without
-data contents, and so on. The <TT
-CLASS="LITERAL"
->extension_exemplar</TT
-> is the
-initial extension object the exemplars are associated with. </P
-><P
->Once the exemplars are created and stored somewhere (e.g. in a hash table), you
-can take an exemplar and create a concrete instance (with contents) by
-duplicating it. As user of the parser you are normally not concerned with this
-as this is part of the internal logic of the parser, but as background knowledge
-it is worthwhile to mention that the two methods
-<TT
-CLASS="LITERAL"
->create_element</TT
-> and <TT
-CLASS="LITERAL"
->create_data</TT
-> actually
-perform the duplication of the exemplar for which they are invoked,
-additionally apply modifications to the clone, and finally return the new
-object. Moreover, the extension object is copied, too, and the new node object
-is associated with the fresh extension object. Note that this is the reason why
-every extension object must have a <TT
-CLASS="LITERAL"
->clone</TT
-> method.</P
-><P
->The configuration of the set of exemplars is passed to the
-<TT
-CLASS="LITERAL"
->parse_document_entity</TT
-> function as third argument. In our
-example, this argument can be set up as follows:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let spec =
-  make_spec_from_alist
-    ~data_exemplar:            (new data_impl (new null_extension))
-    ~default_element_exemplar: (new element_impl (new null_extension))
-    ~element_alist:
-       [ "a",  new element_impl (new eltype_a);
-         "b",  new element_impl (new eltype_b);
-         "c",  new element_impl (new eltype_c);
-       ]
-    ()</PRE
->
-
-The <TT
-CLASS="LITERAL"
->~element_alist</TT
-> function argument defines the mapping
-from element types to exemplars as associative list. The argument
-<TT
-CLASS="LITERAL"
->~data_exemplar</TT
-> specifies the exemplar for data nodes, and
-the <TT
-CLASS="LITERAL"
->~default_element_exemplar</TT
-> is used whenever the parser
-finds an element type for which the associative list does not define an
-exemplar. </P
-><P
->The configuration is now complete. You can still use the same parsing
-functions, only the initialization is a bit different. For example, call the
-parser by:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let d = parse_document_entity default_config (from_file "doc.xml") spec</PRE
->
-
-Note that the resulting document <TT
-CLASS="LITERAL"
->d</TT
-> has a usable type;
-especially the <TT
-CLASS="LITERAL"
->print</TT
-> method we added is visible. So you can
-print your document by
-
-<PRE
-CLASS="PROGRAMLISTING"
->d # root # extension # print stdout</PRE
-></P
-><P
->This object-oriented approach looks rather complicated; this is mostly caused
-by working around some problems of the strict typing system of O'Caml. Some
-auxiliary concepts such as extensions were needed, but the practical
-consequences are low. In the next section, one of the examples of the
-distribution is explained, a converter from <I
-CLASS="EMPHASIS"
->readme</I
->
-documents to HTML.</P
-></DIV
-><H3
-CLASS="FOOTNOTES"
->Notes</H3
-><TABLE
-BORDER="0"
-CLASS="FOOTNOTES"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="LEFT"
-VALIGN="TOP"
-WIDTH="5%"
-><A
-NAME="FTN.AEN688"
-HREF="x675.html#AEN688"
->[1]</A
-></TD
-><TD
-ALIGN="LEFT"
-VALIGN="TOP"
-WIDTH="95%"
-><P
->The problem is that the subclass is
-usually not a subtype in this case because O'Caml has a contravariant subtyping
-rule. </P
-></TD
-></TR
-></TABLE
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="x550.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="x738.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->How to parse a document from an application</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="c533.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->Example: An HTML backend for the <I
-CLASS="EMPHASIS"
->readme</I
->
-DTD</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/x738.html b/helm/DEVEL/pxp/pxp/doc/manual/html/x738.html
deleted file mode 100644 (file)
index 6741801..0000000
+++ /dev/null
@@ -1,1036 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Example: An HTML backend for the readme
-DTD</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="Using PXP"
-HREF="c533.html"><LINK
-REL="PREVIOUS"
-TITLE="Class-based processing of the node tree"
-HREF="x675.html"><LINK
-REL="NEXT"
-TITLE="The objects representing the document"
-HREF="c893.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="x675.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 2. Using <SPAN
-CLASS="ACRONYM"
->PXP</SPAN
-></TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="c893.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="SECT.README.TO-HTML"
->2.4. Example: An HTML backend for the <I
-CLASS="EMPHASIS"
->readme</I
->
-DTD</A
-></H1
-><P
->The converter from <I
-CLASS="EMPHASIS"
->readme</I
-> documents to HTML
-documents follows strictly the approach to define one class per element
-type. The HTML code is similar to the <I
-CLASS="EMPHASIS"
->readme</I
-> source,
-because of this most elements can be converted in the following way: Given the
-input element 
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;e&#62;content&#60;/e&#62;</PRE
->
-
-the conversion text is the concatenation of a computed prefix, the recursively
-converted content, and a computed suffix. </P
-><P
->Only one element type cannot be handled by this scheme:
-<TT
-CLASS="LITERAL"
->footnote</TT
->. Footnotes are collected while they are found in
-the input text, and they are printed after the main text has been converted and
-printed. </P
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN747"
->2.4.1. Header</A
-></H2
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->open Pxp_types
-open Pxp_document</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN751"
->2.4.2. Type declarations</A
-></H2
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->class type footnote_printer =
-  object
-    method footnote_to_html : store_type -&gt; out_channel -&gt; unit
-  end
-
-and store_type =
-  object
-    method alloc_footnote : footnote_printer -&gt; int
-    method print_footnotes : out_channel -&gt; unit
-  end
-;;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN755"
->2.4.3. Class <TT
-CLASS="LITERAL"
->store</TT
-></A
-></H2
-><P
->The <TT
-CLASS="LITERAL"
->store</TT
-> is a container for footnotes. You can add a
-footnote by invoking <TT
-CLASS="LITERAL"
->alloc_footnote</TT
->; the argument is an
-object of the class <TT
-CLASS="LITERAL"
->footnote_printer</TT
->, the method returns the
-number of the footnote. The interesting property of a footnote is that it can
-be converted to HTML, so a <TT
-CLASS="LITERAL"
->footnote_printer</TT
-> is an object
-with a method <TT
-CLASS="LITERAL"
->footnote_to_html</TT
->. The class
-<TT
-CLASS="LITERAL"
->footnote</TT
-> which is defined below has a compatible method
-<TT
-CLASS="LITERAL"
->footnote_to_html</TT
-> such that objects created from it can be
-used as <TT
-CLASS="LITERAL"
->footnote_printer</TT
->s.</P
-><P
->The other method, <TT
-CLASS="LITERAL"
->print_footnotes</TT
-> prints the footnotes as
-definition list, and is typically invoked after the main material of the page
-has already been printed. Every item of the list is printed by
-<TT
-CLASS="LITERAL"
->footnote_to_html</TT
->.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->class store =
-  object (self)
-
-    val mutable footnotes = ( [] : (int * footnote_printer) list )
-    val mutable next_footnote_number = 1
-
-    method alloc_footnote n =
-      let number = next_footnote_number in
-      next_footnote_number &lt;- number+1;
-      footnotes &lt;- footnotes @ [ number, n ];
-      number
-
-    method print_footnotes ch =
-      if footnotes &lt;&gt; [] then begin
-       output_string ch "&lt;hr align=left noshade=noshade width=\"30%\"&gt;\n";
-       output_string ch "&lt;dl&gt;\n";
-       List.iter
-         (fun (_,n) -&gt; 
-            n # footnote_to_html (self : #store_type :&gt; store_type) ch)
-         footnotes;
-       output_string ch "&lt;/dl&gt;\n";
-      end
-
-  end
-;;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN772"
->2.4.4. Function <TT
-CLASS="LITERAL"
->escape_html</TT
-></A
-></H2
-><P
->This function converts the characters &lt;, &gt;, &amp;, and " to their HTML
-representation. For example, 
-<TT
-CLASS="LITERAL"
->escape_html "&lt;&gt;" = "&amp;lt;&amp;gt;"</TT
->. Other
-characters are left unchanged.
-
-<PRE
-CLASS="PROGRAMLISTING"
->let escape_html s =
-  Str.global_substitute
-    (Str.regexp "&lt;\\|&gt;\\|&amp;\\|\"")
-    (fun s -&gt;
-      match Str.matched_string s with
-        "&lt;" -&gt; "&amp;lt;"
-      | "&gt;" -&gt; "&amp;gt;"
-      | "&amp;" -&gt; "&amp;amp;"
-      | "\"" -&gt; "&amp;quot;"
-      | _ -&gt; assert false)
-    s
-;;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN778"
->2.4.5. Virtual class <TT
-CLASS="LITERAL"
->shared</TT
-></A
-></H2
-><P
->This virtual class is the abstract superclass of the extension classes shown
-below. It defines the standard methods <TT
-CLASS="LITERAL"
->clone</TT
->,
-<TT
-CLASS="LITERAL"
->node</TT
->, and <TT
-CLASS="LITERAL"
->set_node</TT
->, and declares the type
-of the virtual method <TT
-CLASS="LITERAL"
->to_html</TT
->. This method recursively
-traverses the whole element tree, and prints the converted HTML code to the
-output channel passed as second argument. The first argument is the reference
-to the global <TT
-CLASS="LITERAL"
->store</TT
-> object which collects the footnotes.
-
-<PRE
-CLASS="PROGRAMLISTING"
->class virtual shared =
-  object (self)
-
-    (* --- default_ext --- *)
-
-    val mutable node = (None : shared node option)
-
-    method clone = {&lt; &gt;} 
-    method node =
-      match node with
-          None -&gt;
-            assert false
-        | Some n -&gt; n
-    method set_node n =
-      node &lt;- Some n
-
-    (* --- virtual --- *)
-
-    method virtual to_html : store -&gt; out_channel -&gt; unit
-
-  end
-;;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN788"
->2.4.6. Class <TT
-CLASS="LITERAL"
->only_data</TT
-></A
-></H2
-><P
->This class defines <TT
-CLASS="LITERAL"
->to_html</TT
-> such that the character data of
-the current node is converted to HTML. Note that <TT
-CLASS="LITERAL"
->self</TT
-> is an
-extension object, <TT
-CLASS="LITERAL"
->self # node</TT
-> is the node object, and
-<TT
-CLASS="LITERAL"
->self # node # data</TT
-> returns the character data of the node. 
-
-<PRE
-CLASS="PROGRAMLISTING"
->class only_data =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      output_string ch (escape_html (self # node # data))
-  end
-;;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN797"
->2.4.7. Class <TT
-CLASS="LITERAL"
->readme</TT
-></A
-></H2
-><P
->This class converts elements of type <TT
-CLASS="LITERAL"
->readme</TT
-> to HTML. Such an
-element is (by definition) always the root element of the document. First, the
-HTML header is printed; the <TT
-CLASS="LITERAL"
->title</TT
-> attribute of the element
-determines the title of the HTML page. Some aspects of the HTML page can be
-configured by setting certain parameter entities, for example the background
-color, the text color, and link colors. After the header, the
-<TT
-CLASS="LITERAL"
->body</TT
-> tag, and the headline have been printed, the contents
-of the page are converted by invoking <TT
-CLASS="LITERAL"
->to_html</TT
-> on all
-children of the current node (which is the root node). Then, the footnotes are
-appended to this by telling the global <TT
-CLASS="LITERAL"
->store</TT
-> object to print
-the footnotes. Finally, the end tags of the HTML pages are printed.</P
-><P
->This class is an example how to access the value of an attribute: The value is
-determined by invoking <TT
-CLASS="LITERAL"
->self # node # attribute "title"</TT
->. As
-this attribute has been declared as CDATA and as being required, the value has
-always the form <TT
-CLASS="LITERAL"
->Value s</TT
-> where <TT
-CLASS="LITERAL"
->s</TT
-> is the
-string value of the attribute. </P
-><P
->You can also see how entity contents can be accessed. A parameter entity object
-can be looked up by <TT
-CLASS="LITERAL"
->self # node # dtd # par_entity "name"</TT
->,
-and by invoking <TT
-CLASS="LITERAL"
->replacement_text</TT
-> the value of the entity
-is returned after inner parameter and character entities have been
-processed. Note that you must use <TT
-CLASS="LITERAL"
->gen_entity</TT
-> instead of
-<TT
-CLASS="LITERAL"
->par_entity</TT
-> to access general entities.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->class readme =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      (* output header *)
-      output_string 
-       ch "&lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\"&gt;";
-      output_string
-       ch "&lt;!-- WARNING! This is a generated file, do not edit! --&gt;\n";
-      let title = 
-       match self # node # attribute "title" with
-           Value s -&gt; s
-         | _ -&gt; assert false
-      in
-      let html_header, _ =
-       try (self # node # dtd # par_entity "readme:html:header") 
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-      let html_trailer, _ =
-       try (self # node # dtd # par_entity "readme:html:trailer")
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-      let html_bgcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:bgcolor")
-            # replacement_text
-       with WF_error _ -&gt; "white", false in
-      let html_textcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:textcolor")
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-      let html_alinkcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:alinkcolor")
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-      let html_vlinkcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:vlinkcolor")
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-      let html_linkcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:linkcolor")
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-      let html_background, _ =
-       try (self # node # dtd # par_entity "readme:html:background")
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-
-      output_string ch "&lt;html&gt;&lt;header&gt;&lt;title&gt;\n";
-      output_string ch (escape_html title);
-      output_string ch "&lt;/title&gt;&lt;/header&gt;\n";
-      output_string ch "&lt;body ";
-      List.iter
-       (fun (name,value) -&gt;
-          if value &lt;&gt; "" then 
-            output_string ch (name ^ "=\"" ^ escape_html value ^ "\" "))
-       [ "bgcolor",    html_bgcolor;
-         "text",       html_textcolor;
-         "link",       html_linkcolor;
-         "alink",      html_alinkcolor;
-         "vlink",      html_vlinkcolor;
-       ];
-      output_string ch "&gt;\n";
-      output_string ch html_header;
-      output_string ch "&lt;h1&gt;";
-      output_string ch (escape_html title);
-      output_string ch "&lt;/h1&gt;\n";
-      (* process main content: *)
-      List.iter
-       (fun n -&gt; n # extension # to_html store ch)
-       (self # node # sub_nodes);
-      (* now process footnotes *)
-      store # print_footnotes ch;
-      (* trailer *)
-      output_string ch html_trailer;
-      output_string ch "&lt;/html&gt;\n";
-
-  end
-;;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN817"
->2.4.8. Classes <TT
-CLASS="LITERAL"
->section</TT
->, <TT
-CLASS="LITERAL"
->sect1</TT
->,
-<TT
-CLASS="LITERAL"
->sect2</TT
->, and <TT
-CLASS="LITERAL"
->sect3</TT
-></A
-></H2
-><P
->As the conversion process is very similar, the conversion classes of the three
-section levels are derived from the more general <TT
-CLASS="LITERAL"
->section</TT
->
-class. The HTML code of the section levels only differs in the type of the
-headline, and because of this the classes describing the section levels can be
-computed by replacing the class argument <TT
-CLASS="LITERAL"
->the_tag</TT
-> of
-<TT
-CLASS="LITERAL"
->section</TT
-> by the HTML name of the headline tag.</P
-><P
->Section elements are converted to HTML by printing a headline and then
-converting the contents of the element recursively. More precisely, the first
-sub-element is always a <TT
-CLASS="LITERAL"
->title</TT
-> element, and the other
-elements are the contents of the section. This structure is declared in the
-DTD, and it is guaranteed that the document matches the DTD. Because of this
-the title node can be separated from the rest without any checks.</P
-><P
->Both the title node, and the body nodes are then converted to HTML by calling
-<TT
-CLASS="LITERAL"
->to_html</TT
-> on them.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->class section the_tag =
-  object (self)
-    inherit shared
-
-    val tag = the_tag
-
-    method to_html store ch =
-      let sub_nodes = self # node # sub_nodes in
-      match sub_nodes with
-         title_node :: rest -&gt;
-           output_string ch ("&lt;" ^ tag ^ "&gt;\n");
-           title_node # extension # to_html store ch;
-           output_string ch ("\n&lt;/" ^ tag ^ "&gt;");
-           List.iter
-             (fun n -&gt; n # extension # to_html store ch)
-             rest
-       | _ -&gt;
-           assert false
-  end
-;;
-
-class sect1 = section "h1";;
-class sect2 = section "h3";;
-class sect3 = section "h4";;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN833"
->2.4.9. Classes <TT
-CLASS="LITERAL"
->map_tag</TT
->, <TT
-CLASS="LITERAL"
->p</TT
->,
-<TT
-CLASS="LITERAL"
->em</TT
->, <TT
-CLASS="LITERAL"
->ul</TT
->, <TT
-CLASS="LITERAL"
->li</TT
-></A
-></H2
-><P
->Several element types are converted to HTML by simply mapping them to
-corresponding HTML element types. The class <TT
-CLASS="LITERAL"
->map_tag</TT
->
-implements this, and the class argument <TT
-CLASS="LITERAL"
->the_target_tag</TT
->
-determines the tag name to map to. The output consists of the start tag, the
-recursively converted inner elements, and the end tag.
-
-<PRE
-CLASS="PROGRAMLISTING"
->class map_tag the_target_tag =
-  object (self)
-    inherit shared
-
-    val target_tag = the_target_tag
-
-    method to_html store ch =
-      output_string ch ("&lt;" ^ target_tag ^ "&gt;\n");
-      List.iter
-       (fun n -&gt; n # extension # to_html store ch)
-       (self # node # sub_nodes);
-      output_string ch ("\n&lt;/" ^ target_tag ^ "&gt;");
-  end
-;;
-
-class p = map_tag "p";;
-class em = map_tag "b";;
-class ul = map_tag "ul";;
-class li = map_tag "li";;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN844"
->2.4.10. Class <TT
-CLASS="LITERAL"
->br</TT
-></A
-></H2
-><P
->Element of type <TT
-CLASS="LITERAL"
->br</TT
-> are mapped to the same HTML type. Note
-that HTML forbids the end tag of <TT
-CLASS="LITERAL"
->br</TT
->.
-
-<PRE
-CLASS="PROGRAMLISTING"
->class br =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      output_string ch "&lt;br&gt;\n";
-      List.iter
-       (fun n -&gt; n # extension # to_html store ch)
-       (self # node # sub_nodes);
-  end
-;;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN851"
->2.4.11. Class <TT
-CLASS="LITERAL"
->code</TT
-></A
-></H2
-><P
->The <TT
-CLASS="LITERAL"
->code</TT
-> type is converted to a <TT
-CLASS="LITERAL"
->pre</TT
->
-section (preformatted text). As the meaning of tabs is unspecified in HTML,
-tabs are expanded to spaces.
-
-<PRE
-CLASS="PROGRAMLISTING"
->class code =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      let data = self # node # data in
-      (* convert tabs *)
-      let l = String.length data in
-      let rec preprocess i column =
-       (* this is very ineffective but comprehensive: *)
-       if i &lt; l then
-         match data.[i] with
-             '\t' -&gt;
-               let n = 8 - (column mod 8) in
-               String.make n ' ' ^ preprocess (i+1) (column + n)
-           | '\n' -&gt;
-               "\n" ^ preprocess (i+1) 0
-           | c -&gt;
-               String.make 1 c ^ preprocess (i+1) (column + 1)
-       else
-         ""
-      in
-      output_string ch "&lt;p&gt;&lt;pre&gt;";
-      output_string ch (escape_html (preprocess 0 0));
-      output_string ch "&lt;/pre&gt;&lt;/p&gt;";
-
-  end
-;;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN858"
->2.4.12. Class <TT
-CLASS="LITERAL"
->a</TT
-></A
-></H2
-><P
->Hyperlinks, expressed by the <TT
-CLASS="LITERAL"
->a</TT
-> element type, are converted
-to the HTML <TT
-CLASS="LITERAL"
->a</TT
-> type. If the target of the hyperlink is given
-by <TT
-CLASS="LITERAL"
->href</TT
->, the URL of this attribute can be used
-directly. Alternatively, the target can be given by
-<TT
-CLASS="LITERAL"
->readmeref</TT
-> in which case the ".html" suffix must be added to
-the file name. </P
-><P
->Note that within <TT
-CLASS="LITERAL"
->a</TT
-> only #PCDATA is allowed, so the contents
-can be converted directly by applying <TT
-CLASS="LITERAL"
->escape_html</TT
-> to the
-character data contents.
-
-<PRE
-CLASS="PROGRAMLISTING"
->class a =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      output_string ch "&lt;a ";
-      let href =
-       match self # node # attribute "href" with
-           Value v -&gt; escape_html v
-         | Valuelist _ -&gt; assert false
-         | Implied_value -&gt;
-             begin match self # node # attribute "readmeref" with
-                 Value v -&gt; escape_html v ^ ".html"
-               | Valuelist _ -&gt; assert false
-               | Implied_value -&gt;
-                   ""
-             end
-      in
-      if href &lt;&gt; "" then
-       output_string ch ("href=\""  ^ href ^ "\"");
-      output_string ch "&gt;";
-      output_string ch (escape_html (self # node # data));
-      output_string ch "&lt;/a&gt;";
-       
-  end
-;;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN870"
->2.4.13. Class <TT
-CLASS="LITERAL"
->footnote</TT
-></A
-></H2
-><P
->The <TT
-CLASS="LITERAL"
->footnote</TT
-> class has two methods:
-<TT
-CLASS="LITERAL"
->to_html</TT
-> to convert the footnote reference to HTML, and
-<TT
-CLASS="LITERAL"
->footnote_to_html</TT
-> to convert the footnote text itself.</P
-><P
->The footnote reference is converted to a local hyperlink; more precisely, to
-two anchor tags which are connected with each other. The text anchor points to
-the footnote anchor, and the footnote anchor points to the text anchor.</P
-><P
->The footnote must be allocated in the <TT
-CLASS="LITERAL"
->store</TT
-> object. By
-allocating the footnote, you get the number of the footnote, and the text of
-the footnote is stored until the end of the HTML page is reached when the
-footnotes can be printed. The <TT
-CLASS="LITERAL"
->to_html</TT
-> method stores simply
-the object itself, such that the <TT
-CLASS="LITERAL"
->footnote_to_html</TT
-> method is
-invoked on the same object that encountered the footnote.</P
-><P
->The <TT
-CLASS="LITERAL"
->to_html</TT
-> only allocates the footnote, and prints the
-reference anchor, but it does not print nor convert the contents of the
-note. This is deferred until the footnotes actually get printed, i.e. the
-recursive call of <TT
-CLASS="LITERAL"
->to_html</TT
-> on the sub nodes is done by
-<TT
-CLASS="LITERAL"
->footnote_to_html</TT
->. </P
-><P
->Note that this technique does not work if you make another footnote within a
-footnote; the second footnote gets allocated but not printed.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->class footnote =
-  object (self)
-    inherit shared
-
-    val mutable footnote_number = 0
-
-    method to_html store ch =
-      let number = 
-       store # alloc_footnote (self : #shared :&gt; footnote_printer) in
-      let foot_anchor = 
-       "footnote" ^ string_of_int number in
-      let text_anchor =
-       "textnote" ^ string_of_int number in
-      footnote_number &lt;- number;
-      output_string ch ( "&lt;a name=\"" ^ text_anchor ^ "\" href=\"#" ^ 
-                        foot_anchor ^ "\"&gt;[" ^ string_of_int number ^ 
-                        "]&lt;/a&gt;" )
-
-    method footnote_to_html store ch =
-      (* prerequisite: we are in a definition list &lt;dl&gt;...&lt;/dl&gt; *)
-      let foot_anchor = 
-       "footnote" ^ string_of_int footnote_number in
-      let text_anchor =
-       "textnote" ^ string_of_int footnote_number in
-      output_string ch ("&lt;dt&gt;&lt;a name=\"" ^ foot_anchor ^ "\" href=\"#" ^ 
-                       text_anchor ^ "\"&gt;[" ^ string_of_int footnote_number ^ 
-                       "]&lt;/a&gt;&lt;/dt&gt;\n&lt;dd&gt;");
-      List.iter
-       (fun n -&gt; n # extension # to_html store ch)
-       (self # node # sub_nodes);
-      output_string ch ("\n&lt;/dd&gt;")
-  end
-;;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN889"
->2.4.14. The specification of the document model</A
-></H2
-><P
->This code sets up the hash table that connects element types with the exemplars
-of the extension classes that convert the elements to HTML.
-
-<PRE
-CLASS="PROGRAMLISTING"
->open Pxp_yacc
-
-let tag_map =
-  make_spec_from_alist
-    ~data_exemplar:(new data_impl (new only_data))
-    ~default_element_exemplar:(new element_impl (new no_markup))
-    ~element_alist:
-      [ "readme", (new element_impl (new readme));
-       "sect1",  (new element_impl (new sect1));
-       "sect2",  (new element_impl (new sect2));
-       "sect3",  (new element_impl (new sect3));
-       "title",  (new element_impl (new no_markup));
-       "p",      (new element_impl (new p));
-       "br",     (new element_impl (new br));
-       "code",   (new element_impl (new code));
-       "em",     (new element_impl (new em));
-       "ul",     (new element_impl (new ul));
-       "li",     (new element_impl (new li));
-       "footnote", (new element_impl (new footnote : #shared :&gt; shared));
-       "a",      (new element_impl (new a));
-      ]
-    ()
-;;</PRE
-></P
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="x675.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="c893.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->Class-based processing of the node tree</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="c533.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->The objects representing the document</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/html/x939.html b/helm/DEVEL/pxp/pxp/doc/manual/html/x939.html
deleted file mode 100644 (file)
index cf177f8..0000000
+++ /dev/null
@@ -1,2337 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->The class type node</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.46"><LINK
-REL="HOME"
-TITLE="The PXP user's guide"
-HREF="index.html"><LINK
-REL="UP"
-TITLE="The objects representing the document"
-HREF="c893.html"><LINK
-REL="PREVIOUS"
-TITLE="The objects representing the document"
-HREF="c893.html"><LINK
-REL="NEXT"
-TITLE="The class type extension"
-HREF="x1439.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="markup.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->The PXP user's guide</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="c893.html"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 3. The objects representing the document</TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="x1439.html"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN939"
->3.2. The class type <TT
-CLASS="LITERAL"
->node</TT
-></A
-></H1
-><P
->&#13;From <TT
-CLASS="LITERAL"
->Pxp_document</TT
->:
-
-<PRE
-CLASS="PROGRAMLISTING"
->type node_type =
-  T_data
-| T_element of string
-| T_super_root
-| T_pinstr of string
-| T_comment
-<TT
-CLASS="REPLACEABLE"
-><I
->and some other, reserved types</I
-></TT
->
-;;
-
-class type [ 'ext ] node =
-  object ('self)
-    constraint 'ext = 'ext node #extension
-
-    <A
-NAME="TYPE-NODE-GENERAL.SIG"
-></A
->(* <A
-HREF="x939.html#TYPE-NODE-GENERAL"
-><I
-><I
->General observers</I
-></I
-></A
-> *)
-
-    method extension : 'ext
-    method dtd : dtd
-    method parent : 'ext node
-    method root : 'ext node
-    method sub_nodes : 'ext node list
-    method iter_nodes : ('ext node -&gt; unit) -&gt; unit
-    method iter_nodes_sibl : 
-           ('ext node option -&gt; 'ext node -&gt; 'ext node option -&gt; unit) -&gt; unit
-    method node_type : node_type
-    method encoding : Pxp_types.rep_encoding
-    method data : string
-    method position : (string * int * int)
-    method comment : string option
-    method pinstr : string -&gt; proc_instruction list
-    method pinstr_names : string list
-    method write : Pxp_types.output_stream -&#62; Pxp_types.encoding -&#62; unit
-
-    <A
-NAME="TYPE-NODE-ATTS.SIG"
-></A
->(* <A
-HREF="x939.html#TYPE-NODE-ATTS"
-><I
-><I
->Attribute observers</I
-></I
-></A
-> *)
-
-    method attribute : string -&gt; Pxp_types.att_value
-    method required_string_attribute : string -&gt; string
-    method optional_string_attribute : string -&gt; string option
-    method required_list_attribute : string -&gt; string list
-    method optional_list_attribute : string -&gt; string list
-    method attribute_names : string list
-    method attribute_type : string -&gt; Pxp_types.att_type
-    method attributes : (string * Pxp_types.att_value) list
-    method id_attribute_name : string
-    method id_attribute_value : string
-    method idref_attribute_names : string
-
-    <A
-NAME="TYPE-NODE-MODS.SIG"
-></A
->(* <A
-HREF="x939.html#TYPE-NODE-MODS"
-><I
-><I
->Modifying methods</I
-></I
-></A
-> *)
-
-    method add_node : ?force:bool -&gt; 'ext node -&gt; unit
-    method add_pinstr : proc_instruction -&gt; unit
-    method delete : unit
-    method set_nodes : 'ext node list -&gt; unit
-    method quick_set_attributes : (string * Pxp_types.att_value) list -&gt; unit
-    method set_comment : string option -&gt; unit
-
-    <A
-NAME="TYPE-NODE-CLONING.SIG"
-></A
->(* <A
-HREF="x939.html#TYPE-NODE-CLONING"
-><I
-><I
->Cloning methods</I
-></I
-></A
-> *)
-
-    method orphaned_clone : 'self
-    method orphaned_flat_clone : 'self
-    method create_element : 
-              ?position:(string * int * int) -&gt;
-              dtd -&gt; node_type -&gt; (string * string) list -&gt;
-                  'ext node
-    method create_data : dtd -&gt; string -&gt; 'ext node
-    method keep_always_whitespace_mode : unit
-
-    <A
-NAME="TYPE-NODE-WEIRD.SIG"
-></A
->(* <A
-HREF="x939.html#TYPE-NODE-WEIRD"
-><I
-><I
->Validating methods</I
-></I
-></A
-> *)
-
-    method local_validate : ?use_dfa:bool -&#62; unit -&#62; unit
-
-    (* ... Internal methods are undocumented. *)
-
-  end
-;;</PRE
->
-
-In the module <TT
-CLASS="LITERAL"
->Pxp_types</TT
-> you can find another type
-definition that is important in this context:
-
-<PRE
-CLASS="PROGRAMLISTING"
->type Pxp_types.att_value =
-    Value     of string
-  | Valuelist of string list
-  | Implied_value
-;;</PRE
-></P
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN958"
->3.2.1. The structure of document trees</A
-></H2
-><P
->A node represents either an element or a character data section. There are two
-classes implementing the two aspects of nodes: <TT
-CLASS="LITERAL"
->element_impl</TT
->
-and <TT
-CLASS="LITERAL"
->data_impl</TT
->. The latter class does not implement all
-methods because some methods do not make sense for data nodes.</P
-><P
->(Note: PXP also supports a mode which forces that processing instructions and
-comments are represented as nodes of the document tree. However, these nodes
-are instances of <TT
-CLASS="LITERAL"
->element_impl</TT
-> with node types
-<TT
-CLASS="LITERAL"
->T_pinstr</TT
-> and <TT
-CLASS="LITERAL"
->T_comment</TT
->,
-respectively. This mode must be explicitly configured; the basic representation
-knows only element and data nodes.)</P
-><P
->The following figure 
-(<A
-HREF="x939.html#NODE-TERM"
-><I
-><I
->A tree with element nodes, data nodes, and attributes</I
-><I
-></I
-></I
-></A
->) shows an example how
-a tree is constructed from element and data nodes. The circular areas 
-represent element nodes whereas the ovals denote data nodes. Only elements
-may have subnodes; data nodes are always leaves of the tree. The subnodes
-of an element can be either element or data nodes; in both cases the O'Caml
-objects storing the nodes have the class type <TT
-CLASS="LITERAL"
->node</TT
->.</P
-><P
->Attributes (the clouds in the picture) are not directly
-integrated into the tree; there is always an extra link to the attribute
-list. This is also true for processing instructions (not shown in the
-picture). This means that there are separated access methods for attributes and
-processing instructions.</P
-><DIV
-CLASS="FIGURE"
-><A
-NAME="NODE-TERM"
-></A
-><P
-><B
->Figure 3-1. A tree with element nodes, data nodes, and attributes</B
-></P
-><P
-><IMG
-SRC="pic/node_term.gif"></P
-></DIV
-><P
->Only elements, data sections, attributes and processing
-instructions (and comments, if configured) can, directly or indirectly, occur
-in the document tree. It is impossible to add entity references to the tree; if
-the parser finds such a reference, not the reference as such but the referenced
-text (i.e. the tree representing the structured text) is included in the
-tree.</P
-><P
->Note that the parser collapses as much data material into one
-data node as possible such that there are normally never two adjacent data
-nodes. This invariant is enforced even if data material is included by entity
-references or CDATA sections, or if a data sequence is interrupted by
-comments. So <TT
-CLASS="LITERAL"
->a &amp;amp; b &lt;-- comment --&gt; c &lt;![CDATA[
-&lt;&gt; d]]&gt;</TT
-> is represented by only one data node, for
-instance. However, you can create document trees manually which break this
-invariant; it is only the way the parser forms the tree.</P
-><DIV
-CLASS="FIGURE"
-><A
-NAME="NODE-GENERAL"
-></A
-><P
-><B
->Figure 3-2. Nodes are doubly linked trees</B
-></P
-><P
-><IMG
-SRC="pic/node_general.gif"></P
-></DIV
-><P
->The node tree has links in both directions: Every node has a link to its parent
-(if any), and it has links to the subnodes (see 
-figure <A
-HREF="x939.html#NODE-GENERAL"
-><I
-><I
->Nodes are doubly linked trees</I
-><I
-></I
-></I
-></A
->). Obviously,
-this doubly-linked structure simplifies the navigation in the tree; but has
-also some consequences for the possible operations on trees.</P
-><P
->Because every node must have at most <I
-CLASS="EMPHASIS"
->one</I
-> parent node,
-operations are illegal if they violate this condition. The following figure
-(<A
-HREF="x939.html#NODE-ADD"
-><I
-><I
->A node can only be added if it is a root</I
-><I
-></I
-></I
-></A
->) shows on the left side
-that node <TT
-CLASS="LITERAL"
->y</TT
-> is added to <TT
-CLASS="LITERAL"
->x</TT
-> as new subnode
-which is allowed because <TT
-CLASS="LITERAL"
->y</TT
-> does not have a parent yet. The
-right side of the picture illustrates what would happen if <TT
-CLASS="LITERAL"
->y</TT
->
-had a parent node; this is illegal because <TT
-CLASS="LITERAL"
->y</TT
-> would have two
-parents after the operation.</P
-><DIV
-CLASS="FIGURE"
-><A
-NAME="NODE-ADD"
-></A
-><P
-><B
->Figure 3-3. A node can only be added if it is a root</B
-></P
-><P
-><IMG
-SRC="pic/node_add.gif"></P
-></DIV
-><P
->The "delete" operation simply removes the links between two nodes. In the
-picture (<A
-HREF="x939.html#NODE-DELETE"
-><I
-><I
->A deleted node becomes the root of the subtree</I
-><I
-></I
-></I
-></A
->) the node
-<TT
-CLASS="LITERAL"
->x</TT
-> is deleted from the list of subnodes of
-<TT
-CLASS="LITERAL"
->y</TT
->. After that, <TT
-CLASS="LITERAL"
->x</TT
-> becomes the root of the
-subtree starting at this node.</P
-><DIV
-CLASS="FIGURE"
-><A
-NAME="NODE-DELETE"
-></A
-><P
-><B
->Figure 3-4. A deleted node becomes the root of the subtree</B
-></P
-><P
-><IMG
-SRC="pic/node_delete.gif"></P
-></DIV
-><P
->It is also possible to make a clone of a subtree; illustrated in 
-<A
-HREF="x939.html#NODE-CLONE"
-><I
-><I
->The clone of a subtree</I
-><I
-></I
-></I
-></A
->. In this case, the
-clone is a copy of the original subtree except that it is no longer a
-subnode. Because cloning never keeps the connection to the parent, the clones
-are called <I
-CLASS="EMPHASIS"
->orphaned</I
->.</P
-><DIV
-CLASS="FIGURE"
-><A
-NAME="NODE-CLONE"
-></A
-><P
-><B
->Figure 3-5. The clone of a subtree</B
-></P
-><P
-><IMG
-SRC="pic/node_clone.gif"></P
-></DIV
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1007"
->3.2.2. The methods of the class type <TT
-CLASS="LITERAL"
->node</TT
-></A
-></H2
-><A
-NAME="TYPE-NODE-GENERAL"
-></A
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->              <A
-HREF="x939.html#TYPE-NODE-GENERAL.SIG"
->General observers</A
->
-            . </B
->            <P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->extension</TT
->: The reference to the extension object which
-belongs to this node (see ...).</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->dtd</TT
->: Returns a reference to the global DTD. All nodes
-of a tree must share the same DTD.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->parent</TT
->: Get the father node. Raises
-<TT
-CLASS="LITERAL"
->Not_found</TT
-> in the case the node does not have a
-parent, i.e. the node is the root.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->root</TT
->: Gets the reference to the root node of the tree.
-Every node is contained in a tree with a root, so this method always 
-succeeds. Note that this method <I
-CLASS="EMPHASIS"
->searches</I
-> the root,
-which costs time proportional to the length of the path to the root.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->sub_nodes</TT
->: Returns references to the children. The returned
-list reflects the order of the children. For data nodes, this method returns
-the empty list.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->iter_nodes f</TT
->: Iterates over the children, and calls
-<TT
-CLASS="LITERAL"
->f</TT
-> for every child in turn. </P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->iter_nodes_sibl f</TT
->: Iterates over the children, and calls
-<TT
-CLASS="LITERAL"
->f</TT
-> for every child in turn. <TT
-CLASS="LITERAL"
->f</TT
-> gets as
-arguments the previous node, the current node, and the next node.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->node_type</TT
->: Returns either <TT
-CLASS="LITERAL"
->T_data</TT
-> which
-means that the node is a data node, or <TT
-CLASS="LITERAL"
->T_element n</TT
->
-which means that the node is an element of type <TT
-CLASS="LITERAL"
->n</TT
->. 
-If configured, possible node types are also <TT
-CLASS="LITERAL"
->T_pinstr t</TT
->
-indicating that the node represents a processing instruction with target
-<TT
-CLASS="LITERAL"
->t</TT
->, and <TT
-CLASS="LITERAL"
->T_comment</TT
-> in which case the node
-is a comment.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->encoding</TT
->: Returns the encoding of the strings.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->data</TT
->: Returns the character data of this node and all
-children, concatenated as one string. The encoding of the string is what
-the method <TT
-CLASS="LITERAL"
->encoding</TT
-> returns.
-- For data nodes, this method simply returns the represented characters.
-For elements, the meaning of the method has been extended such that it
-returns something useful, i.e. the effectively contained characters, without
-markup. (For <TT
-CLASS="LITERAL"
->T_pinstr</TT
-> and <TT
-CLASS="LITERAL"
->T_comment</TT
->
-nodes, the method returns the empty string.)</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->position</TT
->: If configured, this method returns the position of
-the element as triple (entity, line, byteposition). For data nodes, the
-position is not stored. If the position is not available the triple
-<TT
-CLASS="LITERAL"
->"?", 0, 0</TT
-> is returned.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->comment</TT
->: Returns <TT
-CLASS="LITERAL"
->Some text</TT
-> for comment
-nodes, and <TT
-CLASS="LITERAL"
->None</TT
-> for other nodes. The <TT
-CLASS="LITERAL"
->text</TT
->
-is everything between the comment delimiters <TT
-CLASS="LITERAL"
->&lt;--</TT
-> and
-<TT
-CLASS="LITERAL"
->--&gt;</TT
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->pinstr n</TT
->: Returns all processing instructions that are
-directly contained in this element and that have a <I
-CLASS="EMPHASIS"
->target</I
->
-specification of <TT
-CLASS="LITERAL"
->n</TT
->. The target is the first word after
-the <TT
-CLASS="LITERAL"
->&lt;?</TT
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->pinstr_names</TT
->: Returns the list of all targets of processing
-instructions directly contained in this element.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->write s enc</TT
->: Prints the node and all subnodes to the passed
-output stream as valid XML text, using the passed external encoding.</P
-></LI
-></UL
->
-            </P
-></DIV
-><A
-NAME="TYPE-NODE-ATTS"
-></A
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->              <A
-HREF="x939.html#TYPE-NODE-ATTS.SIG"
->Attribute observers</A
->
-            . </B
->            <P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->attribute n</TT
->: Returns the value of the attribute with name
-<TT
-CLASS="LITERAL"
->n</TT
->. This method returns a value for every declared 
-attribute, and it raises <TT
-CLASS="LITERAL"
->Not_found</TT
-> for any undeclared
-attribute. Note that it even returns a value if the attribute is actually
-missing but is declared as <TT
-CLASS="LITERAL"
->#IMPLIED</TT
-> or has a default
-value. - Possible values are:
-                  <P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->Implied_value</TT
->: The attribute has been declared with the
-keyword <TT
-CLASS="LITERAL"
->#IMPLIED</TT
->, and the attribute is missing in the
-attribute list of this element.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->Value s</TT
->: The attribute has been declared as type
-<TT
-CLASS="LITERAL"
->CDATA</TT
->, as <TT
-CLASS="LITERAL"
->ID</TT
->, as
-<TT
-CLASS="LITERAL"
->IDREF</TT
->, as <TT
-CLASS="LITERAL"
->ENTITY</TT
->, or as
-<TT
-CLASS="LITERAL"
->NMTOKEN</TT
->, or as enumeration or notation, and one of the two
-conditions holds: (1) The attribute value is present in the attribute list in
-which case the value is returned in the string <TT
-CLASS="LITERAL"
->s</TT
->. (2) The
-attribute has been omitted, and the DTD declared the attribute with a default
-value. The default value is returned in <TT
-CLASS="LITERAL"
->s</TT
->. 
-- Summarized, <TT
-CLASS="LITERAL"
->Value s</TT
-> is returned for non-implied, non-list 
-attribute values.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->Valuelist l</TT
->: The attribute has been declared as type
-<TT
-CLASS="LITERAL"
->IDREFS</TT
->, as <TT
-CLASS="LITERAL"
->ENTITIES</TT
->, or
-as <TT
-CLASS="LITERAL"
->NMTOKENS</TT
->, and one of the two conditions holds: (1) The
-attribute value is present in the attribute list in which case the
-space-separated tokens of the value are returned in the string list
-<TT
-CLASS="LITERAL"
->l</TT
->. (2) The attribute has been omitted, and the DTD declared
-the attribute with a default value. The default value is returned in
-<TT
-CLASS="LITERAL"
->l</TT
->. 
-- Summarized, <TT
-CLASS="LITERAL"
->Valuelist l</TT
-> is returned for all list-type
-attribute values.</P
-></LI
-></UL
->
-
-Note that before the attribute value is returned, the value is normalized. This
-means that newlines are converted to spaces, and that references to character
-entities (i.e. <TT
-CLASS="LITERAL"
->&amp;#<TT
-CLASS="REPLACEABLE"
-><I
->n</I
-></TT
->;</TT
->) and
-general entities
-(i.e. <TT
-CLASS="LITERAL"
->&amp;<TT
-CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->;</TT
->) are expanded;
-if necessary, expansion is performed recursively.</P
-><P
->In well-formedness mode, there is no DTD which could declare an
-attribute. Because of this, every occuring attribute is considered as a CDATA
-attribute.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->required_string_attribute n</TT
->: returns the Value attribute
-called n, or the Valuelist attribute as a string where the list elements
-are separated by spaces. If the attribute value is implied, or if the
-attribute does not exists, the method will fail. - This method is convenient
-if you expect a non-implied and non-list attribute value.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->optional_string_attribute n</TT
->: returns the Value attribute
-called n, or the Valuelist attribute as a string where the list elements
-are separated by spaces. If the attribute value is implied, or if the
-attribute does not exists, the method returns None. - This method is 
-convenient if you expect a non-list attribute value including the implied
-value.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->required_list_attribute n</TT
->: returns the Valuelist attribute
-called n, or the Value attribute as a list with a single element.
-If the attribute value is implied, or if the
-attribute does not exists, the method will fail. - This method is 
-convenient if you expect a list attribute value.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->optional_list_attribute n</TT
->: returns the Valuelist attribute
-called n, or the Value attribute as a list with a single element.
-If the attribute value is implied, or if the
-attribute does not exists, an empty list will be returned. - This method
-is convenient if you expect a list attribute value or the implied value.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->attribute_names</TT
->: returns the list of all attribute names of
-this element. As this is a validating parser, this list is equal to the
-list of declared attributes.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->attribute_type n</TT
->: returns the type of the attribute called
-<TT
-CLASS="LITERAL"
->n</TT
->. See the module <TT
-CLASS="LITERAL"
->Pxp_types</TT
-> for a
-description of the encoding of the types.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->attributes</TT
->: returns the list of pairs of names and values
-for all attributes of
-this element.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->id_attribute_name</TT
->: returns the name of the attribute that is
-declared with type ID. There is at most one such attribute. The method raises
-<TT
-CLASS="LITERAL"
->Not_found</TT
-> if there is no declared ID attribute for the
-element type.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->id_attribute_value</TT
->: returns the value of the attribute that
-is declared with type ID. There is at most one such attribute. The method raises
-<TT
-CLASS="LITERAL"
->Not_found</TT
-> if there is no declared ID attribute for the
-element type.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->idref_attribute_names</TT
->: returns the list of attribute names
-that are declared as IDREF or IDREFS.</P
-></LI
-></UL
->
-          </P
-></DIV
-><A
-NAME="TYPE-NODE-MODS"
-></A
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->              <A
-HREF="x939.html#TYPE-NODE-MODS.SIG"
->Modifying methods</A
->
-            . </B
->The following methods are only defined for element nodes (more exactly:
-the methods are defined for data nodes, too, but fail always).
-
-             <P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->add_node sn</TT
->: Adds sub node <TT
-CLASS="LITERAL"
->sn</TT
-> to the list
-of children. This operation is illustrated in the picture 
-<A
-HREF="x939.html#NODE-ADD"
-><I
-><I
->A node can only be added if it is a root</I
-><I
-></I
-></I
-></A
->. This method expects that
-<TT
-CLASS="LITERAL"
->sn</TT
-> is a root, and it requires that <TT
-CLASS="LITERAL"
->sn</TT
-> and
-the current object share the same DTD.</P
-><P
->Because <TT
-CLASS="LITERAL"
->add_node</TT
-> is the method the parser itself uses
-to add new nodes to the tree, it performs by default some simple validation
-checks: If the content model is a regular expression, it is not allowed to add
-data nodes to this node unless the new nodes consist only of whitespace. In
-this case, the new data nodes are silently dropped (you can change this by
-invoking <TT
-CLASS="LITERAL"
->keep_always_whitespace_mode</TT
->).</P
-><P
->If the document is flagged as stand-alone, these data nodes only
-containing whitespace are even forbidden if the element declaration is
-contained in an external entity. This case is detected and rejected.</P
-><P
->If the content model is <TT
-CLASS="LITERAL"
->EMPTY</TT
->, it is not allowed to
-add any data node unless the data node is empty. In this case, the new data
-node is silently dropped.</P
-><P
->These checks only apply if there is a DTD. In well-formedness mode, it is
-assumed that every element is declared with content model
-<TT
-CLASS="LITERAL"
->ANY</TT
-> which prohibits any validation check. Furthermore, you
-turn these checks off by passing <TT
-CLASS="LITERAL"
->~force:true</TT
-> as first
-argument.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->add_pinstr pi</TT
->: Adds the processing instruction
-<TT
-CLASS="LITERAL"
->pi</TT
-> to the list of processing instructions.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->delete</TT
->: Deletes this node from the tree. After this
-operation, this node is no longer the child of the former father node; and the
-node loses the connection to the father as well. This operation is illustrated
-by the figure <A
-HREF="x939.html#NODE-DELETE"
-><I
-><I
->A deleted node becomes the root of the subtree</I
-><I
-></I
-></I
-></A
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->set_nodes nl</TT
->: Sets the list of children to
-<TT
-CLASS="LITERAL"
->nl</TT
->. It is required that every member of <TT
-CLASS="LITERAL"
->nl</TT
->
-is a root, and that all members and the current object share the same DTD.
-Unlike <TT
-CLASS="LITERAL"
->add_node</TT
->, no validation checks are performed.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->quick_set_attributes atts</TT
->: sets the attributes of this
-element to <TT
-CLASS="LITERAL"
->atts</TT
->. It is <I
-CLASS="EMPHASIS"
->not</I
-> checked
-whether <TT
-CLASS="LITERAL"
->atts</TT
-> matches the DTD or not; it is up to the
-caller of this method to ensure this. (This method may be useful to transform
-the attribute values, i.e. apply a mapping to every attribute.)</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->set_comment text</TT
->: This method is only applicable to
-<TT
-CLASS="LITERAL"
->T_comment</TT
-> nodes; it sets the comment text contained by such
-nodes. </P
-></LI
-></UL
-></P
-></DIV
-><A
-NAME="TYPE-NODE-CLONING"
-></A
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->              <A
-HREF="x939.html#TYPE-NODE-CLONING.SIG"
->Cloning methods</A
->
-            . </B
->            <P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->orphaned_clone</TT
->: Returns a clone of the node and the complete
-tree below this node (deep clone). The clone does not have a parent (i.e. the
-reference to the parent node is <I
-CLASS="EMPHASIS"
->not</I
-> cloned). While
-copying the subtree, strings are skipped; it is likely that the original tree
-and the copy tree share strings. Extension objects are cloned by invoking
-the <TT
-CLASS="LITERAL"
->clone</TT
-> method on the original objects; how much of
-the extension objects is cloned depends on the implemention of this method.</P
-><P
->This operation is illustrated by the figure 
-<A
-HREF="x939.html#NODE-CLONE"
-><I
-><I
->The clone of a subtree</I
-><I
-></I
-></I
-></A
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->orphaned_flat_clone</TT
->: Returns a clone of the node,
-but sets the list of sub nodes to [], i.e. the sub nodes are not cloned.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><A
-NAME="TYPE-NODE-METH-CREATE-ELEMENT"
-></A
->
-<TT
-CLASS="LITERAL"
->create_element dtd nt al</TT
->: Returns a flat copy of this node
-(which must be an element) with the following modifications: The DTD is set to
-<TT
-CLASS="LITERAL"
->dtd</TT
->; the node type is set to <TT
-CLASS="LITERAL"
->nt</TT
->, and the
-new attribute list is set to <TT
-CLASS="LITERAL"
->al</TT
-> (given as list of
-(name,value) pairs). The copy does not have children nor a parent. It does not
-contain processing instructions. See 
-<A
-HREF="x939.html#TYPE-NODE-EX-CREATE-ELEMENT"
->the example below</A
->.</P
-><P
->Note that you can specify the position of the new node
-by the optional argument <TT
-CLASS="LITERAL"
->~position</TT
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><A
-NAME="TYPE-NODE-METH-CREATE-DATA"
-></A
->
-<TT
-CLASS="LITERAL"
->create_data dtd cdata</TT
->: Returns a flat copy of this node
-(which must be a data node) with the following modifications: The DTD is set to
-<TT
-CLASS="LITERAL"
->dtd</TT
->; the node type is set to <TT
-CLASS="LITERAL"
->T_data</TT
->; the
-attribute list is empty (data nodes never have attributes); the list of
-children and PIs is empty, too (same reason). The new node does not have a
-parent. The value <TT
-CLASS="LITERAL"
->cdata</TT
-> is the new character content of the
-node. See 
-<A
-HREF="x939.html#TYPE-NODE-EX-CREATE-DATA"
->the example below</A
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->keep_always_whitespace_mode</TT
->: Even data nodes which are
-normally dropped because they only contain ignorable whitespace, can added to
-this node once this mode is turned on. (This mode is useful to produce
-canonical XML.)</P
-></LI
-></UL
-></P
-></DIV
-><A
-NAME="TYPE-NODE-WEIRD"
-></A
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->              <A
-HREF="x939.html#TYPE-NODE-WEIRD.SIG"
->Validating methods</A
->
-            . </B
->There is one method which locally validates the node, i.e. checks whether the
-subnodes match the content model of this node.
-
-             <P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->local_validate</TT
->: Checks that this node conforms to the
-DTD by comparing the type of the subnodes with the content model for this
-node. (Applications need not call this method unless they add new nodes
-themselves to the tree.)</P
-></LI
-></UL
-></P
-></DIV
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1252"
->3.2.3. The class <TT
-CLASS="LITERAL"
->element_impl</TT
-></A
-></H2
-><P
->This class is an implementation of <TT
-CLASS="LITERAL"
->node</TT
-> which
-realizes element nodes:
-
-<PRE
-CLASS="PROGRAMLISTING"
->class [ 'ext ] element_impl : 'ext -&#62; [ 'ext ] node</PRE
->&#13;</P
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->Constructor. </B
->You can create a new instance by
-
-<PRE
-CLASS="PROGRAMLISTING"
->new element_impl <TT
-CLASS="REPLACEABLE"
-><I
->extension_object</I
-></TT
-></PRE
->
-
-which creates a special form of empty element which already contains a
-reference to the <TT
-CLASS="REPLACEABLE"
-><I
->extension_object</I
-></TT
->, but is
-otherwise empty. This special form is called an
-<I
-CLASS="EMPHASIS"
->exemplar</I
->. The purpose of exemplars is that they serve as
-patterns that can be duplicated and filled with data. The method
-<A
-HREF="x939.html#TYPE-NODE-METH-CREATE-ELEMENT"
-><TT
-CLASS="LITERAL"
->create_element</TT
-></A
-> is designed to perform this action.</P
-></DIV
-><A
-NAME="TYPE-NODE-EX-CREATE-ELEMENT"
-></A
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->Example. </B
->First, create an exemplar by
-
-<PRE
-CLASS="PROGRAMLISTING"
->let exemplar_ext = ... in
-let exemplar     = new element_impl exemplar_ext in</PRE
->
-
-The <TT
-CLASS="LITERAL"
->exemplar</TT
-> is not used in node trees, but only as
-a pattern when the element nodes are created:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let element = exemplar # <A
-HREF="x939.html#TYPE-NODE-METH-CREATE-ELEMENT"
->create_element</A
-> dtd (T_element name) attlist </PRE
->
-
-The <TT
-CLASS="LITERAL"
->element</TT
-> is a copy of <TT
-CLASS="LITERAL"
->exemplar</TT
->
-(even the extension <TT
-CLASS="LITERAL"
->exemplar_ext</TT
-> has been copied)
-which ensures that <TT
-CLASS="LITERAL"
->element</TT
-> and its extension are objects
-of the same class as the exemplars; note that you need not to pass a 
-class name or other meta information. The copy is initially connected 
-with the <TT
-CLASS="LITERAL"
->dtd</TT
->, it gets a node type, and the attribute list
-is filled. The <TT
-CLASS="LITERAL"
->element</TT
-> is now fully functional; it can
-be added to another element as child, and it can contain references to
-subnodes.</P
-></DIV
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1281"
->3.2.4. The class <TT
-CLASS="LITERAL"
->data_impl</TT
-></A
-></H2
-><P
->This class is an implementation of <TT
-CLASS="LITERAL"
->node</TT
-> which
-should be used for all character data nodes:
-
-<PRE
-CLASS="PROGRAMLISTING"
->class [ 'ext ] data_impl : 'ext -&#62; [ 'ext ] node</PRE
->&#13;</P
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->Constructor. </B
->You can create a new instance by
-
-<PRE
-CLASS="PROGRAMLISTING"
->new data_impl <TT
-CLASS="REPLACEABLE"
-><I
->extension_object</I
-></TT
-></PRE
->
-
-which creates an empty exemplar node which is connected to
-<TT
-CLASS="REPLACEABLE"
-><I
->extension_object</I
-></TT
->. The node does not contain a
-reference to any DTD, and because of this it cannot be added to node trees.</P
-></DIV
-><P
->To get a fully working data node, apply the method
-<A
-HREF="x939.html#TYPE-NODE-METH-CREATE-DATA"
-><TT
-CLASS="LITERAL"
->create_data</TT
-></A
-> to the exemplar (see example).</P
-><A
-NAME="TYPE-NODE-EX-CREATE-DATA"
-></A
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->Example. </B
->First, create an exemplar by
-
-<PRE
-CLASS="PROGRAMLISTING"
->let exemplar_ext = ... in
-let exemplar     = new exemplar_ext data_impl in</PRE
->
-
-The <TT
-CLASS="LITERAL"
->exemplar</TT
-> is not used in node trees, but only as
-a pattern when the data nodes are created:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let data_node = exemplar # <A
-HREF="x939.html#TYPE-NODE-METH-CREATE-DATA"
->create_data</A
-> dtd "The characters contained in the data node" </PRE
->
-
-The <TT
-CLASS="LITERAL"
->data_node</TT
-> is a copy of <TT
-CLASS="LITERAL"
->exemplar</TT
->.
-The copy is initially connected 
-with the <TT
-CLASS="LITERAL"
->dtd</TT
->, and it is filled with character material.
-The <TT
-CLASS="LITERAL"
->data_node</TT
-> is now fully functional; it can
-be added to an element as child.</P
-></DIV
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1308"
->3.2.5. The type <TT
-CLASS="LITERAL"
->spec</TT
-></A
-></H2
-><P
->The type <TT
-CLASS="LITERAL"
->spec</TT
-> defines a way to handle the details of
-creating nodes from exemplars.
-
-<PRE
-CLASS="PROGRAMLISTING"
->type 'ext spec
-constraint 'ext = 'ext node #extension
-
-val make_spec_from_mapping :
-      ?super_root_exemplar : 'ext node -&#62;
-      ?comment_exemplar : 'ext node -&#62;
-      ?default_pinstr_exemplar : 'ext node -&#62;
-      ?pinstr_mapping : (string, 'ext node) Hashtbl.t -&#62;
-      data_exemplar: 'ext node -&#62;
-      default_element_exemplar: 'ext node -&#62;
-      element_mapping: (string, 'ext node) Hashtbl.t -&#62; 
-      unit -&#62; 
-        'ext spec
-
-val make_spec_from_alist :
-      ?super_root_exemplar : 'ext node -&#62;
-      ?comment_exemplar : 'ext node -&#62;
-      ?default_pinstr_exemplar : 'ext node -&#62;
-      ?pinstr_alist : (string * 'ext node) list -&#62;
-      data_exemplar: 'ext node -&#62;
-      default_element_exemplar: 'ext node -&#62;
-      element_alist: (string * 'ext node) list -&#62; 
-      unit -&#62; 
-        'ext spec</PRE
->
-
-The two functions <TT
-CLASS="LITERAL"
->make_spec_from_mapping</TT
-> and
-<TT
-CLASS="LITERAL"
->make_spec_from_alist</TT
-> create <TT
-CLASS="LITERAL"
->spec</TT
->
-values. Both functions are functionally equivalent and the only difference is
-that the first function prefers hashtables and the latter associative lists to
-describe mappings from names to exemplars.</P
-><P
->You can specify exemplars for the various kinds of nodes that need to be
-generated when an XML document is parsed:
-             
-<P
-></P
-><UL
-COMPACT="COMPACT"
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->~super_root_exemplar</TT
->: This exemplar
-is used to create the super root. This special node is only created if the
-corresponding configuration option has been selected; it is the parent node of
-the root node which may be convenient if every working node must have a parent.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->~comment_exemplar</TT
->: This exemplar is
-used when a comment node must be created. Note that such nodes are only created
-if the corresponding configuration option is "on".</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->~default_pinstr_exemplar</TT
->: If a node
-for a processing instruction must be created, and the instruction is not listed
-in the table passed by <TT
-CLASS="LITERAL"
->~pinstr_mapping</TT
-> or
-<TT
-CLASS="LITERAL"
->~pinstr_alist</TT
->, this exemplar is used.
-Again the configuration option must be "on" in order to create such nodes at
-all. </P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->~pinstr_mapping</TT
-> or
-<TT
-CLASS="LITERAL"
->~pinstr_alist</TT
->: Map the target names of processing
-instructions to exemplars. These mappings are only used when nodes for
-processing instructions are created.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->~data_exemplar</TT
->: The exemplar for
-ordinary data nodes.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->~default_element_exemplar</TT
->: This
-exemplar is used if an element node must be created, but the element type
-cannot be found in the tables <TT
-CLASS="LITERAL"
->element_mapping</TT
-> or
-<TT
-CLASS="LITERAL"
->element_alist</TT
->.</P
-></LI
-><LI
-STYLE="list-style-type: disc"
-><P
-><TT
-CLASS="LITERAL"
->~element_mapping</TT
-> or
-<TT
-CLASS="LITERAL"
->~element_alist</TT
->: Map the element types to exemplars. These
-mappings are used to create element nodes.</P
-></LI
-></UL
->
-
-In most cases, you only want to create <TT
-CLASS="LITERAL"
->spec</TT
-> values to pass
-them to the parser functions found in <TT
-CLASS="LITERAL"
->Pxp_yacc</TT
->. However, it
-might be useful to apply <TT
-CLASS="LITERAL"
->spec</TT
-> values directly.</P
-><P
->The following functions create various types of nodes by selecting the
-corresponding exemplar from the passed <TT
-CLASS="LITERAL"
->spec</TT
-> value, and by
-calling <TT
-CLASS="LITERAL"
->create_element</TT
-> or <TT
-CLASS="LITERAL"
->create_data</TT
-> on
-the exemplar.
-
-<PRE
-CLASS="PROGRAMLISTING"
->val create_data_node : 
-      'ext spec -&#62; 
-      dtd -&#62; 
-      (* data material: *) string -&#62; 
-          'ext node
-
-val create_element_node : 
-      ?position:(string * int * int) -&#62;
-      'ext spec -&#62; 
-      dtd -&#62; 
-      (* element type: *) string -&#62; 
-      (* attributes: *) (string * string) list -&#62; 
-          'ext node
-
-val create_super_root_node :
-      ?position:(string * int * int) -&#62;
-      'ext spec -&#62; 
-       dtd -&#62; 
-           'ext node
-
-val create_comment_node :
-      ?position:(string * int * int) -&#62;
-      'ext spec -&#62; 
-      dtd -&#62; 
-      (* comment text: *) string -&#62; 
-          'ext node
-
-val create_pinstr_node :
-      ?position:(string * int * int) -&#62;
-      'ext spec -&#62; 
-      dtd -&#62; 
-      proc_instruction -&#62; 
-          'ext node</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1354"
->3.2.6. Examples</A
-></H2
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->Building trees. </B
->Here is the piece of code that creates the tree of
-the figure <A
-HREF="x939.html#NODE-TERM"
-><I
-><I
->A tree with element nodes, data nodes, and attributes</I
-><I
-></I
-></I
-></A
->. The extension
-object and the DTD are beyond the scope of this example.
-
-<PRE
-CLASS="PROGRAMLISTING"
->let exemplar_ext = ... (* some extension *) in
-let dtd = ... (* some DTD *) in
-
-let element_exemplar = new element_impl exemplar_ext in
-let data_exemplar    = new data_impl    exemplar_ext in
-
-let a1 = element_exemplar # create_element dtd (T_element "a") ["att", "apple"]
-and b1 = element_exemplar # create_element dtd (T_element "b") []
-and c1 = element_exemplar # create_element dtd (T_element "c") []
-and a2 = element_exemplar # create_element dtd (T_element "a") ["att", "orange"]
-in
-
-let cherries = data_exemplar # create_data dtd "Cherries" in
-let orange   = data_exemplar # create_data dtd "An orange" in
-
-a1 # add_node b1;
-a1 # add_node c1;
-b1 # add_node a2;
-b1 # add_node cherries;
-a2 # add_node orange;</PRE
->
-
-Alternatively, the last block of statements could also be written as:
-
-<PRE
-CLASS="PROGRAMLISTING"
->a1 # set_nodes [b1; c1];
-b1 # set_nodes [a2; cherries];
-a2 # set_nodes [orange];</PRE
->
-
-The root of the tree is <TT
-CLASS="LITERAL"
->a1</TT
->, i.e. it is true that
-
-<PRE
-CLASS="PROGRAMLISTING"
->x # root == a1</PRE
->
-
-for every x from { <TT
-CLASS="LITERAL"
->a1</TT
->, <TT
-CLASS="LITERAL"
->a2</TT
->,
-<TT
-CLASS="LITERAL"
->b1</TT
->, <TT
-CLASS="LITERAL"
->c1</TT
->, <TT
-CLASS="LITERAL"
->cherries</TT
->,
-<TT
-CLASS="LITERAL"
->orange</TT
-> }.</P
-></DIV
-><P
->Furthermore, the following properties hold:
-
-<PRE
-CLASS="PROGRAMLISTING"
->  a1 # attribute "att" = Value "apple"
-&#38; a2 # attribute "att" = Value "orange"
-
-&#38; cherries # data = "Cherries"
-&#38;   orange # data = "An orange"
-&#38;       a1 # data = "CherriesAn orange"
-
-&#38;       a1 # node_type = T_element "a"
-&#38;       a2 # node_type = T_element "a"
-&#38;       b1 # node_type = T_element "b"
-&#38;       c1 # node_type = T_element "c"
-&#38; cherries # node_type = T_data
-&#38;   orange # node_type = T_data
-
-&#38;       a1 # sub_nodes = [ b1; c1 ]
-&#38;       a2 # sub_nodes = [ orange ]
-&#38;       b1 # sub_nodes = [ a2; cherries ]
-&#38;       c1 # sub_nodes = []
-&#38; cherries # sub_nodes = []
-&#38;   orange # sub_nodes = []
-
-&#38;       a2 # parent == a1
-&#38;       b1 # parent == b1
-&#38;       c1 # parent == a1
-&#38; cherries # parent == b1
-&#38;   orange # parent == a2</PRE
-></P
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->Searching nodes. </B
->The following function searches all nodes of a tree 
-for which a certain condition holds:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let rec search p t =
-  if p t then
-    t :: search_list p (t # sub_nodes)
-  else
-    search_list p (t # sub_nodes)
-
-and search_list p l =
-  match l with
-    []      -&gt; []
-  | t :: l' -&gt; (search p t) @ (search_list p l')
-;;</PRE
-></P
-></DIV
-><P
->For example, if you want to search all elements of a certain
-type <TT
-CLASS="LITERAL"
->et</TT
->, the function <TT
-CLASS="LITERAL"
->search</TT
-> can be
-applied as follows:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let search_element_type et t =
-  search (fun x -&gt; x # node_type = T_element et) t
-;;</PRE
-></P
-><DIV
-CLASS="FORMALPARA"
-><P
-><B
->Getting attribute values. </B
->Suppose we have the declaration:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ATTLIST e a CDATA #REQUIRED
-            b CDATA #IMPLIED
-            c CDATA "12345"&#62;</PRE
->
-
-In this case, every element <TT
-CLASS="LITERAL"
->e</TT
-> must have an attribute 
-<TT
-CLASS="LITERAL"
->a</TT
->, otherwise the parser would indicate an error. If
-the O'Caml variable <TT
-CLASS="LITERAL"
->n</TT
-> holds the node of the tree 
-corresponding to the element, you can get the value of the attribute
-<TT
-CLASS="LITERAL"
->a</TT
-> by
-
-<PRE
-CLASS="PROGRAMLISTING"
->let value_of_a = n # required_string_attribute "a"</PRE
->
-
-which is more or less an abbreviation for 
-
-<PRE
-CLASS="PROGRAMLISTING"
->let value_of_a = 
-  match n # attribute "a" with
-    Value s -&#62; s
-  | _       -&#62; assert false</PRE
->
-
-- as the attribute is required, the <TT
-CLASS="LITERAL"
->attribute</TT
-> method always
-returns a <TT
-CLASS="LITERAL"
->Value</TT
->.</P
-></DIV
-><P
->In contrast to this, the attribute <TT
-CLASS="LITERAL"
->b</TT
-> can be
-omitted. In this case, the method <TT
-CLASS="LITERAL"
->required_string_attribute</TT
->
-works only if the attribute is there, and the method will fail if the attribute
-is missing. To get the value, you can apply the method
-<TT
-CLASS="LITERAL"
->optional_string_attribute</TT
->:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let value_of_b = n # optional_string_attribute "b"</PRE
->
-
-Now, <TT
-CLASS="LITERAL"
->value_of_b</TT
-> is of type <TT
-CLASS="LITERAL"
->string option</TT
->,
-and <TT
-CLASS="LITERAL"
->None</TT
-> represents the omitted attribute. Alternatively, 
-you could also use <TT
-CLASS="LITERAL"
->attribute</TT
->:
-
-<PRE
-CLASS="PROGRAMLISTING"
->let value_of_b = 
-  match n # attribute "b" with
-    Value s       -&#62; Some s
-  | Implied_value -&#62; None
-  | _             -&#62; assert false</PRE
-></P
-><P
->The attribute <TT
-CLASS="LITERAL"
->c</TT
-> behaves much like
-<TT
-CLASS="LITERAL"
->a</TT
->, because it has always a value. If the attribute is
-omitted, the default, here "12345", will be returned instead. Because of this,
-you can again use <TT
-CLASS="LITERAL"
->required_string_attribute</TT
-> to get the
-value.</P
-><P
->The type <TT
-CLASS="LITERAL"
->CDATA</TT
-> is the most general string
-type. The types <TT
-CLASS="LITERAL"
->NMTOKEN</TT
->, <TT
-CLASS="LITERAL"
->ID</TT
->,
-<TT
-CLASS="LITERAL"
->IDREF</TT
->, <TT
-CLASS="LITERAL"
->ENTITY</TT
->, and all enumerators and
-notations are special forms of string types that restrict the possible
-values. From O'Caml, they behave like <TT
-CLASS="LITERAL"
->CDATA</TT
->, i.e. you can
-use the methods <TT
-CLASS="LITERAL"
->required_string_attribute</TT
-> and
-<TT
-CLASS="LITERAL"
->optional_string_attribute</TT
->, too.</P
-><P
->In contrast to this, the types <TT
-CLASS="LITERAL"
->NMTOKENS</TT
->,
-<TT
-CLASS="LITERAL"
->IDREFS</TT
->, and <TT
-CLASS="LITERAL"
->ENTITIES</TT
-> mean lists of
-strings. Suppose we have the declaration:
-
-<PRE
-CLASS="PROGRAMLISTING"
->&#60;!ATTLIST f d NMTOKENS #REQUIRED
-            e NMTOKENS #IMPLIED&#62;</PRE
->
-
-The type <TT
-CLASS="LITERAL"
->NMTOKENS</TT
-> stands for lists of space-separated
-tokens; for example the value <TT
-CLASS="LITERAL"
->"1 abc 23ef"</TT
-> means the list
-<TT
-CLASS="LITERAL"
->["1"; "abc"; "23ef"]</TT
->. (Again, <TT
-CLASS="LITERAL"
->IDREFS</TT
->
-and <TT
-CLASS="LITERAL"
->ENTITIES</TT
-> have more restricted values.) To get the
-value of attribute <TT
-CLASS="LITERAL"
->d</TT
->, one can use
-
-<PRE
-CLASS="PROGRAMLISTING"
->let value_of_d = n # required_list_attribute "d"</PRE
->
-
-or
-
-<PRE
-CLASS="PROGRAMLISTING"
->let value_of_d = 
-  match n # attribute "d" with
-    Valuelist l -&#62; l
-  | _           -&#62; assert false</PRE
->
-As <TT
-CLASS="LITERAL"
->d</TT
-> is required, the attribute cannot be omitted, and 
-the <TT
-CLASS="LITERAL"
->attribute</TT
-> method returns always a
-<TT
-CLASS="LITERAL"
->Valuelist</TT
->. </P
-><P
->For optional attributes like <TT
-CLASS="LITERAL"
->e</TT
->, apply
-
-<PRE
-CLASS="PROGRAMLISTING"
->let value_of_e = n # optional_list_attribute "e"</PRE
->
-
-or
-
-<PRE
-CLASS="PROGRAMLISTING"
->let value_of_e = 
-  match n # attribute "e" with
-    Valuelist l   -&#62; l
-  | Implied_value -&#62; []
-  | _             -&#62; assert false</PRE
->
-
-Here, the case that the attribute is missing counts like the empty list.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN1435"
->3.2.7. Iterators</A
-></H2
-><P
->There are also several iterators in Pxp_document; please see
-the mli file for details. You can find examples for them in the
-"simple_transformation" directory.
-
-<PRE
-CLASS="PROGRAMLISTING"
->val find : ?deeply:bool -&#62; 
-           f:('ext node -&#62; bool) -&#62; 'ext node -&#62; 'ext node
-
-val find_all : ?deeply:bool -&#62;
-               f:('ext node -&#62; bool) -&#62; 'ext node -&#62; 'ext node list
-
-val find_element : ?deeply:bool -&#62;
-                   string -&#62; 'ext node -&#62; 'ext node
-
-val find_all_elements : ?deeply:bool -&#62;
-                        string -&#62; 'ext node -&#62; 'ext node list
-
-exception Skip
-val map_tree :  pre:('exta node -&#62; 'extb node) -&#62;
-               ?post:('extb node -&#62; 'extb node) -&#62;
-               'exta node -&#62; 
-                   'extb node
-
-
-val map_tree_sibl : 
-        pre: ('exta node option -&#62; 'exta node -&#62; 'exta node option -&#62; 
-                  'extb node) -&#62;
-       ?post:('extb node option -&#62; 'extb node -&#62; 'extb node option -&#62; 
-                  'extb node) -&#62;
-       'exta node -&#62; 
-           'extb node
-
-val iter_tree : ?pre:('ext node -&#62; unit) -&#62;
-                ?post:('ext node -&#62; unit) -&#62;
-                'ext node -&#62; 
-                    unit
-
-val iter_tree_sibl :
-       ?pre: ('ext node option -&#62; 'ext node -&#62; 'ext node option -&#62; unit) -&#62;
-       ?post:('ext node option -&#62; 'ext node -&#62; 'ext node option -&#62; unit) -&#62;
-       'ext node -&#62; 
-           unit</PRE
-></P
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="c893.html"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="x1439.html"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->The objects representing the document</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="c893.html"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->The class type <TT
-CLASS="LITERAL"
->extension</TT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/ps/markup.ps b/helm/DEVEL/pxp/pxp/doc/manual/ps/markup.ps
deleted file mode 100644 (file)
index 3a98c79..0000000
+++ /dev/null
@@ -1,8866 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
-%%Pages: 96
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 596 842
-%%DocumentFonts: Helvetica-Bold Times-Roman Times-Bold Times-Italic
-%%+ Courier Courier-Oblique Helvetica-BoldOblique Courier-Bold
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -f
-%DVIPSParameters: dpi=600, compressed
-%DVIPSSource:  TeX output 2000.08.30:1757
-%%BeginProcSet: texc.pro
-%!
-/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/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/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]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
-forall N/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
-% @@psencodingfile@{
-%   author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
-%   version = "0.6",
-%   date = "1 July 1998",
-%   filename = "8r.enc",
-%   email = "tex-fonts@@tug.org",
-%   docstring = "Encoding for TrueType or Type 1 fonts
-%                to be used with TeX."
-% @}
-% 
-% 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 + 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.
-% 
-% (4) Remaining positions left undefined are for use in (hopefully)
-% upward-compatible revisions, if someday more characters are generally
-% available.
-% 
-% (5) hyphen appears twice for compatibility with both 
-% ASCII and Windows.
-% 
-/TeXBase1Encoding [
-% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
-  /.notdef /dotaccent /fi /fl
-  /fraction /hungarumlaut /Lslash /lslash
-  /ogonek /ring /.notdef
-  /breve /minus /.notdef 
-% These are the only two remaining unencoded characters, so may as
-% well include them.
-  /Zcaron /zcaron 
-% 0x10
- /caron /dotlessi 
-% (unusual TeX characters available in, e.g., Lucida Bright)
- /dotlessj /ff /ffi /ffl 
- /.notdef /.notdef /.notdef /.notdef
- /.notdef /.notdef /.notdef /.notdef
- % very contentious; it's so painful not having quoteleft and quoteright
- % at 96 and 145 that we move the things normally found there to here.
- /grave /quotesingle 
-% 0x20 (ASCII begins)
- /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 % rubout; ASCII ends
-% 0x80
- /.notdef /.notdef /quotesinglbase /florin
- /quotedblbase /ellipsis /dagger /daggerdbl
- /circumflex /perthousand /Scaron /guilsinglleft
- /OE /.notdef /.notdef /.notdef
-% 0x90
- /.notdef /.notdef /.notdef /quotedblleft
- /quotedblright /bullet /endash /emdash
- /tilde /trademark /scaron /guilsinglright
- /oe /.notdef /.notdef /Ydieresis
-% 0xA0
- /.notdef % nobreakspace
- /exclamdown /cent /sterling
- /currency /yen /brokenbar /section
- /dieresis /copyright /ordfeminine /guillemotleft
- /logicalnot
- /hyphen % Y&Y (also at 45); Windows' softhyphen
- /registered
- /macron
-% 0xD0
- /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
-%!
-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]/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[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
-%!
-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/copypage{}N/p 3 def @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/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
-%!
-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
-TeXDict begin 39158280 55380996 1000 600 600 () @start
-/Fa 106[21 149[{TeXBase1Encoding ReEncodeFont}1 59.7758
-/Times-Roman rf /Fb 135[77 2[77 77 77 3[77 77 77 3[77
-3[77 77 77 99[{TeXBase1Encoding ReEncodeFont}11 129.116
-/Courier-Bold rf /Fc 134[65 65 2[65 65 65 65 1[65 65
-65 65 65 2[65 65 65 65 65 65 65 65 65 1[65 36[65 6[65
-65 65 49[{TeXBase1Encoding ReEncodeFont}25 107.597 /Courier-Bold
-rf /Fd 141[56 4[128 7[80 88 2[80 97[{TeXBase1Encoding ReEncodeFont}5
-143.462 /Helvetica-BoldOblique rf /Fe 147[21 4[37 1[33
-3[37 23[25 14[25 58[{TeXBase1Encoding ReEncodeFont}6
-74.7198 /Times-Italic rf /Ff 204[25 25 25 49[{
-TeXBase1Encoding ReEncodeFont}3 49.8132 /Times-Roman
-rf
-%DVIPSBitmapFont: Fg cmmi8 8 2
-/Fg 2 63 df<EE01C01607161FEE7F00ED01FCED07F0ED1FC0037FC7FCEC01FCEC07F0EC
-0FC0023FC8FC14FCEB03F8EB0FE0EB3F8001FEC9FCEA03F8EA0FE0EA3F8000FECAFC12F8
-12FEEA3F80EA0FE0EA03F8EA00FEEB3F80EB0FE0EB03F8EB00FC143FEC0FC0EC07F0EC01
-FCEC007FED1FC0ED07F0ED01FCED007FEE1FC0160716012A2B7AA537>60
-D<12E012F812FEEA3F80EA0FE0EA03F8EA00FEEB3F80EB0FE0EB03F8EB00FC143FEC0FC0
-EC07F0EC01FCEC007FED1FC0ED07F0ED01FCED007FEE1FC01607161FEE7F00ED01FCED07
-F0ED1FC0037FC7FCEC01FCEC07F0EC0FC0023FC8FC14FCEB03F8EB0FE0EB3F8001FEC9FC
-EA03F8EA0FE0EA3F8000FECAFC12F812E02A2B7AA537>62 D E
-%EndDVIPSBitmapFont
-/Fh 131[40 1[40 40 40 40 40 40 40 40 40 40 40 40 40 40
-40 40 1[40 40 40 1[40 40 40 40 40 1[40 5[40 3[40 40 40
-40 40 40 40 40 40 40 40 1[40 40 40 1[40 40 40 40 40 1[40
-40 40 40 40 40 1[40 4[40 1[40 1[40 40 40 40 40 40 40
-40 40 40 40 1[40 40 40 33[{TeXBase1Encoding ReEncodeFont}69
-67.2479 /Courier rf /Fi 105[37 28[37 37 54 37 37 21 29
-25 37 37 37 37 58 21 37 1[21 37 37 25 33 37 33 37 33
-7[54 54 3[46 5[54 66 46 2[25 2[42 2[50 50 54 5[21 21
-11[19 1[19 2[25 25 25 4[30 31[42 2[{TeXBase1Encoding ReEncodeFont}45
-74.7198 /Times-Roman rf /Fj 135[55 7[61 2[89 28 6[55
-3[55 27[66 69[{TeXBase1Encoding ReEncodeFont}7 99.6264
-/Helvetica-Bold rf /Fk 145[27 2[27 57[27 49[{
-TeXBase1Encoding ReEncodeFont}3 44.8318 /Courier-Oblique
-rf /Fl 135[50 3[50 50 3[50 50 3[50 50 3[50 1[50 50 2[50
-95[{TeXBase1Encoding ReEncodeFont}11 83.022 /Courier-Oblique
-rf
-%DVIPSBitmapFont: Fm cmmi10 10 2
-/Fm 2 63 df<EF0380EF0FC0173FEFFF80933803FE00EE0FF8EE3FE0EEFF80DB03FEC7FC
-ED0FF8ED3FE0EDFF80DA03FEC8FCEC0FF8EC3FE0ECFF80D903FEC9FCEB0FF8EB3FE0EBFF
-80D803FECAFCEA0FF8EA3FE0EA7F8000FECBFCA2EA7F80EA3FE0EA0FF8EA03FEC66C7EEB
-3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED3FE0ED0FF8ED03FE
-923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FC0170FEF0380323279AD41>60
-D<126012FCB4FCEA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FCEB01FF9038007F
-C0EC1FF0EC07FCEC01FF9138007FC0ED1FF0ED07FCED01FF9238007FC0EE1FF0EE07FCEE
-01FF9338007F80EF1FC0A2EF7F80933801FF00EE07FCEE1FF0EE7FC04B48C7FCED07FCED
-1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848CAFCEA
-07FCEA3FF0EA7FC048CBFC12FC1270323279AD41>62 D E
-%EndDVIPSBitmapFont
-/Fn 134[45 45 1[45 45 45 45 45 1[45 45 45 45 45 1[45
-45 45 45 45 45 45 45 45 45 1[45 5[45 2[45 8[45 5[45 2[45
-45 1[45 19[45 45 44[{TeXBase1Encoding ReEncodeFont}32
-74.7198 /Courier-Oblique rf
-%DVIPSBitmapFont: Fo cmmi9 9 2
-/Fo 2 63 df<171C177EEE01FEEE07FCEE1FF0EE7FC0923801FF00ED07FCED1FF0ED7FC0
-4A48C7FCEC07FCEC1FF0EC7FC04948C8FCEB07FCEB1FF0EB7FC04848C9FCEA07FCEA1FF0
-EA7FC048CAFCA2EA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FCEB01FF9038007F
-C0EC1FF0EC07FCEC01FF9138007FC0ED1FF0ED07FCED01FF9238007FC0EE1FF0EE07FCEE
-01FEEE007E171C2F2E7AA93C>60 D<127012FCB4FCEA7FC0EA1FF0EA07FCEA01FF38007F
-C0EB1FF0EB07FCEB01FF9038007FC0EC1FF0EC07FCEC01FF9138007FC0ED1FF0ED07FCED
-01FF9238007FC0EE1FF0EE07FCEE01FEA2EE07FCEE1FF0EE7FC0923801FF00ED07FCED1F
-F0ED7FC04A48C7FCEC07FCEC1FF0EC7FC04948C8FCEB07FCEB1FF0EB7FC04848C9FCEA07
-FCEA1FF0EA7FC048CAFC12FC12702F2E7AA93C>62 D E
-%EndDVIPSBitmapFont
-/Fp 134[66 66 93 66 73 40 66 47 1[73 73 73 106 33 2[33
-73 73 40 66 73 66 73 66 8[80 113 80 86 73 80 86 1[80
-1[86 100 73 2[33 86 1[73 80 86 86 1[86 1[73 5[66 66 66
-66 66 66 66 66 66 66 1[33 40 33 2[40 40 5[57 31[73 2[{
-TeXBase1Encoding ReEncodeFont}58 119.552 /Helvetica-Bold
-rf /Fq 129[45 45 45 45 45 45 45 45 45 45 45 45 45 45
-45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
-45 45 45 45 1[45 45 45 45 45 45 45 45 45 45 45 45 45
-45 45 1[45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
-45 45 45 45 1[45 45 45 45 45 45 45 45 45 45 45 45 45
-45 45 45 45 1[45 45 45 33[{TeXBase1Encoding ReEncodeFont}90
-74.7198 /Courier rf /Fr 134[37 37 55 37 42 23 32 32 1[42
-42 42 60 23 37 23 23 42 42 23 37 42 37 42 42 1[42 6[51
-69 1[60 46 42 2[51 1[55 69 46 2[28 3[51 60 55 1[51 1[42
-4[28 42 42 42 42 42 42 42 42 42 42 1[21 28 21 2[28 28
-6[28 30[42 2[{TeXBase1Encoding ReEncodeFont}58 83.022
-/Times-Italic rf /Fs 138[105 57 96 67 1[105 105 105 153
-48 1[48 48 105 105 57 96 105 96 105 96 8[115 163 1[124
-105 3[115 2[143 105 5[105 2[124 3[105 10[96 96 96 96
-2[48 43[105 2[{TeXBase1Encoding ReEncodeFont}35 172.154
-/Helvetica-Bold rf /Ft 106[23 29 29 25[33 33 48 33 33
-18 26 22 1[33 33 33 52 18 33 18 18 33 33 22 29 33 29
-33 29 8[48 3[41 37 2[37 6[22 1[48 12[18 10[18 17 1[17
-2[22 22 5[27 31[37 2[{TeXBase1Encoding ReEncodeFont}41
-66.4176 /Times-Roman rf /Fu 134[42 42 60 42 46 28 32
-37 1[46 42 46 69 23 46 1[23 46 42 28 37 46 37 46 42 9[83
-60 60 55 46 60 3[60 78 55 2[32 65 65 51 55 60 60 55 60
-1[42 6[42 1[42 42 42 42 42 42 2[21 28 21 4[28 39[{
-TeXBase1Encoding ReEncodeFont}53 83.022 /Times-Bold rf
-/Fv 27[37 58[63 42[45 40 1[40 37 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
-28 42 1[28 23 28 1[60 60 78 60 60 51 46 55 60 46 60 60
-74 51 60 1[28 60 60 46 51 60 55 55 60 1[37 47 47 47 23
-23 42 42 42 42 42 42 42 42 42 42 23 21 28 21 2[28 28
-28 65 69 1[42 34 28 29[46 46 2[{TeXBase1Encoding ReEncodeFont}90
-83.022 /Times-Roman rf /Fw 136[65 1[51 1[46 32 2[51 51
-1[23 2[23 51 51 1[46 51 2[46 8[55 3[51 3[55 11[60 9[28
-18[23 39[{TeXBase1Encoding ReEncodeFont}19 83.022 /Helvetica-Bold
-rf /Fx 134[80 80 112 80 88 48 80 56 1[88 88 88 128 40
-80 1[40 88 88 48 80 88 80 88 80 8[96 1[96 104 88 96 104
-2[112 104 120 88 2[40 104 112 1[96 104 104 1[104 6[48
-4[80 80 80 80 80 2[40 48 45[{TeXBase1Encoding ReEncodeFont}48
-143.462 /Helvetica-Bold rf /Fy 138[126 1[115 80 8[57
-126 126 1[115 126 11[138 2[149 126 3[138 6[57 26[57 6[57
-39[{TeXBase1Encoding ReEncodeFont}15 206.584 /Helvetica-Bold
-rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%BeginPaperSize: a4
-a4
-%%EndPaperSize
-
-%%EndSetup
-%%Page: 1 1
-1 0 bop Black Black 890 647 a Fy(The)58 b(PXP)f(user')-12
-b(s)58 b(guide)1384 2594 y Fx(Ger)m(d)39 b(Stolpmann)p
-Black Black eop
-%%Page: 2 2
-2 1 bop Black Black -2 579 a Fw(The)22 b(PXP)j(user')-5
-b(s)23 b(guide)-2 687 y Fv(by)d(Gerd)f(Stolpmann)-2 903
-y(Cop)o(yright)f(\251)j(1999,)e(2000)g(by)g(Gerd)h(Stolpmann)-2
-1135 y(PXP)h(is)g(a)g(v)n(alidating)d(parser)i(for)f(XML-1.0)g(which)h
-(has)g(been)g(written)g(entirely)f(in)h(Objecti)n(v)o(e)g(Caml.)-2
-1285 y Fw(Do)o(wnload)h(PXP:)j Fv(The)c(free)g(PXP)h(library)e(can)h
-(be)g(do)n(wnloaded)d(at)k(http://www)-5 b(.ocaml-programming)o(.de)o
-(/pack)o(age)o(s/.)15 b(This)-2 1393 y(user')-5 b(s)20
-b(guide)f(is)j(included.)c(Ne)n(west)j(releases)f(of)g(PXP)h(will)g(be)
-f(announced)e(in)i(The)g(OCaml)g(Link)g(Database)-2 1500
-y(\(http://www)-5 b(.npc.de/ocaml/linkdb)o(/\).)-2 1899
-y Fu(License)-2 2090 y Ft(This)16 b(document,)j(and)e(the)h(described)h
-(softw)o(are,)f("PXP",)e(are)i(cop)o(yright)i(by)d(Gerd)g(Stolpmann.)-2
-2198 y(Permission)h(is)e(hereby)j(granted,)f(free)g(of)f(char)o(ge,)h
-(to)f(an)o(y)h(person)f(obtaining)j(a)d(cop)o(y)h(of)f(this)h(document)
-g(and)g(the)f("PXP")g(softw)o(are)i(\(the)f("Softw)o(are"\),)g(to)f
-(deal)i(in)-2 2306 y(the)f(Softw)o(are)g(without)h(restriction,)g
-(including)h(without)e(limitation)i(the)e(rights)g(to)f(use,)g(cop)o(y)
-l(,)g(modify)l(,)g(mer)o(ge,)g(publish,)h(distrib)o(ute,)h(sublicense,)
-g(and/or)f(sell)-2 2414 y(copies)g(of)f(the)h(Softw)o(are,)g(and)g(to)f
-(permit)h(persons)f(to)h(whom)e(the)i(Softw)o(are)h(is)e(furnished)h
-(to)f(do)g(so,)g(subject)h(to)g(the)f(follo)n(wing)j(conditions:)-2
-2522 y(The)d(abo)o(v)o(e)h(cop)o(yright)h(notice)g(and)f(this)f
-(permission)h(notice)h(shall)f(be)g(included)h(in)e(all)h(copies)h(or)e
-(substantial)i(portions)g(of)e(the)g(Softw)o(are.)-2
-2630 y(The)g(Softw)o(are)h(is)f(pro)o(vided)i(\223as)e(is\224,)g
-(without)i(w)o(arranty)g(of)e(an)o(y)g(kind,)h(e)o(xpress)f(or)g
-(implied,)i(including)g(b)o(ut)e(not)h(limited)h(to)e(the)h(w)o
-(arranties)h(of)e(merchantability)l(,)-2 2737 y(\002tness)g(for)g(a)g
-(particular)j(purpose)e(and)g(noninfringement.)i(In)d(no)g(e)n(v)o(ent)
-h(shall)h(Gerd)e(Stolpmann)h(be)g(liable)h(for)e(an)o(y)g(claim,)h
-(damages)g(or)f(other)h(liability)l(,)i(whether)-2 2845
-y(in)d(an)g(action)i(of)e(contract,)i(tort)f(or)f(otherwise,)i(arising)
-f(from,)e(out)i(of)f(or)g(in)g(connection)j(with)e(the)f(Softw)o(are)i
-(or)e(the)h(use)f(or)g(other)h(dealings)h(in)e(the)h(softw)o(are.)p
-Black Black eop
-%%Page: 3 3
-3 2 bop Black Black -2 621 a Fs(T)-14 b(ab)n(le)48 b(of)g(Contents)396
-815 y Fu(I.)21 b(User')m(s)g(guide)p Black 4 w(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black 4 w(6)596
-943 y Fv(1.)f(What)g(is)h(XML?)p Black 4 w(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black 4 w(7)795 1051
-y(1.1.)e(Introduction)p Black 14 w(.)p Black Black -1
-w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black 4 w(7)994 1159
-y(1.1.1.)g(The)g("hello)h(w)o(orld")g(e)o(xample)p Black
-13 w(.)p Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black 4 w(7)994 1267 y(1.1.2.)f(XML)h(parsers)g(and)f
-(processors)p Black 3 w(.)p Black Black -2 w(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black 4 w(9)994 1375 y(1.1.3.)g(Discussion)p
-Black 9 w(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-4 w(9)795 1483 y(1.2.)g(Highlights)g(of)h(XML)p Black
-10 w(.)p Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(11)994
-1591 y(1.2.1.)f(The)g(DTD)i(and)e(the)i(instance)p Black
-15 w(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black 4 w(11)994 1699 y(1.2.2.)e(Reserv)o(ed)g(characters)p
-Black 19 w(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black 4 w(12)994 1807 y(1.2.3.)g(Elements)g(and)h
-(ELEMENT)f(declarations)p Black 7 w(.)p Black Black -2
-w(.)p Black Black(.)p Black Black(.)p Black Black -1
-w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(13)994
-1915 y(1.2.4.)g(Attrib)n(ute)g(lists)j(and)e(A)-9 b(TTLIST)19
-b(declarations)p Black 6 w(.)p Black Black -2 w(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black 4 w(15)994 2023 y(1.2.5.)g(P)o(arsed)g(entities)p
-Black 18 w(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black 4 w(16)994 2131 y(1.2.6.)g(Notations)g(and)h
-(unparsed)e(entities)p Black 14 w(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black 4 w(19)795 2238 y(1.3.)h(A)i(complete)e(e)o(xample:)g
-(The)h Fr(r)m(eadme)f Fv(DTD)p Black 3 w(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black 4 w(20)596 2346 y(2.)h(Using)g(PXP)p Black
-6 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black 4 w(24)795 2454 y(2.1.)f(V)-9 b(alidation)p
-Black 3 w(.)p Black Black -2 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(24)795
-2562 y(2.2.)19 b(Ho)n(w)h(to)g(parse)g(a)h(document)d(from)h(an)h
-(application)p Black 10 w(.)p Black Black -2 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(24)795
-2670 y(2.3.)f(Class-based)h(processing)f(of)h(the)g(node)g(tree)p
-Black 8 w(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(29)795
-2778 y(2.4.)f(Example:)g(An)h(HTML)g(back)o(end)f(for)g(the)i
-Fr(r)m(eadme)e Fv(DTD)p Black 3 w(.)p Black Black -1
-w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black 4 w(33)994 2886 y(2.4.1.)g(Header)p
-Black 9 w(.)p Black Black -2 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black 4 w(33)994 2994 y(2.4.2.)g(T)-7 b(ype)19
-b(declarations)p Black 14 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black 4 w(33)994 3102 y(2.4.3.)g(Class)i Fq(store)p Black
-11 w Fv(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black 4 w(34)994 3210 y(2.4.4.)e(Function)g
-Fq(escape_html)p Black Fv(.)p Black Black -2 w(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-4 w(35)994 3318 y(2.4.5.)g(V)-5 b(irtual)20 b(class)h
-Fq(shared)p Black 4 w Fv(.)p Black Black -2 w(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black 4 w(35)994 3426 y(2.4.6.)e(Class)i
-Fq(only_data)p Black 17 w Fv(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(36)994
-3534 y(2.4.7.)e(Class)i Fq(readme)p Black 8 w Fv(.)p
-Black Black -1 w(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black 4 w(36)994 3642 y(2.4.8.)e(Classes)i
-Fq(section)p Fv(,)f Fq(sect1)p Fv(,)f Fq(sect2)p Fv(,)h(and)g
-Fq(sect3)p Black 13 w Fv(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black 4 w(39)994 3749 y(2.4.9.)f(Classes)i
-Fq(map_tag)p Fv(,)f Fq(p)p Fv(,)g Fq(em)p Fv(,)g Fq(ul)p
-Fv(,)g Fq(li)p Black 16 w Fv(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(39)994
-3857 y(2.4.10.)e(Class)k Fq(br)p Black Fv(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black 4 w(40)994 3965 y(2.4.11.)c(Class)k
-Fq(code)p Black 13 w Fv(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black 4 w(40)994 4073 y(2.4.12.)c(Class)k
-Fq(a)p Black 4 w Fv(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(41)994
-4181 y(2.4.13.)c(Class)k Fq(footnote)p Black 1 w Fv(.)p
-Black Black -2 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black 4 w(42)994 4289
-y(2.4.14.)c(The)i(speci\002cation)f(of)h(the)g(document)f(model)p
-Black 12 w(.)p Black Black -2 w(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black 4 w(43)596 4397 y(3.)h(The)f(objects)h
-(representing)e(the)j(document)p Black 4 w(.)p Black
-Black -3 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-4 w(46)795 4505 y(3.1.)e(The)h Fq(document)f Fv(class)p
-Black 7 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black 4 w(46)795 4613 y(3.2.)g(The)h(class)h(type)f
-Fq(node)p Black 2 w Fv(.)p Black Black -2 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-4 w(47)994 4721 y(3.2.1.)f(The)g(structure)h(of)g(document)e(trees)p
-Black 3 w(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(49)994
-4829 y(3.2.2.)h(The)g(methods)h(of)f(the)i(class)g(type)f
-Fq(node)p Black 13 w Fv(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black 4 w(52)p Black 3842
-5278 a Fr(3)p Black eop
-%%Page: 4 4
-4 3 bop Black Black 994 579 a Fv(3.2.3.)19 b(The)g(class)j
-Fq(element_impl)p Black 2 w Fv(.)p Black Black -3 w(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black 4 w(56)994 687 y(3.2.4.)d(The)g(class)j Fq(data_impl)p
-Black 12 w Fv(.)p Black Black -2 w(.)p Black Black -1
-w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(57)994
-795 y(3.2.5.)d(The)g(type)h Fq(spec)p Black 5 w Fv(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black 4 w(58)994 903 y(3.2.6.)f(Examples)p Black
-5 w(.)p Black Black -3 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(60)994
-1011 y(3.2.7.)g(Iterators)p Black 12 w(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black 4 w(64)795 1119 y(3.3.)g(The)h(class)h(type)f Fq(extension)p
-Black 6 w Fv(.)p Black Black -2 w(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black 4 w(65)994 1226 y(3.3.1.)f(Ho)n(w)h(to)g(de\002ne)
-g(an)g(e)o(xtension)f(class)p Black 13 w(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black 4 w(66)994 1334
-y(3.3.2.)g(Ho)n(w)h(to)g(bind)f(e)o(xtension)g(classes)i(to)g(element)e
-(types)p Black 10 w(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-4 w(68)795 1442 y(3.4.)g(Details)i(of)f(the)g(mapping)e(from)i(XML)g
-(te)o(xt)g(to)g(the)g(tree)h(representation)p Black 13
-w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(69)994
-1550 y(3.4.1.)e(The)g(representation)g(of)g(character)n(-free)f
-(elements)p Black 9 w(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-4 w(69)994 1658 y(3.4.2.)h(The)g(representation)g(of)g(character)g
-(data)p Black 10 w(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black 4 w(70)994 1766
-y(3.4.3.)g(The)g(representation)g(of)g(entities)i(within)f(documents)p
-Black 12 w(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black 4 w(70)994 1874 y(3.4.4.)f(The)g(representation)g
-(of)g(attrib)n(utes)p Black 20 w(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black 4 w(71)994 1982 y(3.4.5.)g(The)g(representation)g(of)g
-(processing)g(instructions)p Black(.)p Black Black -1
-w(.)p Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black 4 w(71)994 2090 y(3.4.6.)g(The)g
-(representation)g(of)g(comments)p Black 7 w(.)p Black
-Black -1 w(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black 4 w(71)994 2198 y(3.4.7.)g(The)g(attrib)n(utes)i
-Fq(xml:lang)e Fv(and)h Fq(xml:space)p Black 10 w Fv(.)p
-Black Black -2 w(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black 4 w(72)994 2306 y(3.4.8.)f(And)g(what)h(about)g(namespaces?)p
-Black 12 w(.)p Black Black -2 w(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(72)596
-2414 y(4.)g(Con\002guring)e(and)h(calling)h(the)g(parser)p
-Black 11 w(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black 4 w(73)795 2522 y(4.1.)f(Ov)o(ervie)n(w)p
-Black 19 w(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(73)795
-2630 y(4.2.)g(Resolv)o(ers)h(and)g(sources)p Black 2
-w(.)p Black Black -1 w(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black 4 w(75)994 2737
-y(4.2.1.)f(Using)h(the)g(b)n(uilt-in)f(resolv)o(ers)h(\(called)f
-(sources\))p Black 5 w(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-4 w(75)994 2845 y(4.2.2.)g(The)g(resolv)o(er)g(API)p
-Black 11 w(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black 4 w(76)994 2953 y(4.2.3.)g(Prede\002ned)f(resolv)o(er)h
-(components)p Black 13 w(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black 4 w(78)795 3061
-y(4.3.)g(The)h(DTD)g(classes)p Black 1 w(.)p Black Black
-1 w(.)p Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(81)795
-3169 y(4.4.)f(In)m(v)n(oking)f(the)i(parser)p Black 14
-w(.)p Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(89)994
-3277 y(4.4.1.)f(Def)o(aults)p Black 10 w(.)p Black Black
--1 w(.)p Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black 4 w(89)994 3385 y(4.4.2.)g(P)o(arsing)g(functions)p
-Black 4 w(.)p Black Black -3 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black 4 w(90)994 3493 y(4.4.3.)g(Con\002guration)f(options)p
-Black 19 w(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black 4 w(91)994 3601 y(4.4.4.)h(Which)h
-(con\002guration)d(should)i(I)i(use?)p Black 18 w(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-4 w(93)795 3709 y(4.5.)e(Updates)p Black 10 w(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black 4 w(95)p Black 3842 5278 a
-Fr(4)p Black eop
-%%Page: 5 5
-5 4 bop Black Black -2 621 a Fs(List)48 b(of)g(Figures)396
-815 y Fv(3-1.)19 b(A)i(tree)f(with)h(element)e(nodes,)h(data)g(nodes,)f
-(and)g(attrib)n(utes)p Black 18 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black 4 w(49)396 923 y(3-2.)g(Nodes)h(are)g(doubly)f(link)o
-(ed)g(trees)p Black 15 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black 4 w(50)396
-1031 y(3-3.)g(A)i(node)e(can)h(only)g(be)g(added)f(if)h(it)h(is)g(a)g
-(root)p Black 5 w(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black 4 w(51)396 1139 y(3-4.)e(A)i(deleted)f(node)f
-(becomes)g(the)h(root)g(of)g(the)g(subtree)p Black 3
-w(.)p Black Black -1 w(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-4 w(51)396 1247 y(3-5.)f(The)h(clone)g(of)g(a)g(subtree)p
-Black 18 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black 4 w(52)396 1355 y(3-6.)f(The)h(structure)g
-(of)f(nodes)h(and)g(e)o(xtensions)p Black 18 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black 4 w(65)p Black 3842 5278 a Fr(5)p Black eop
-%%Page: 6 6
-6 5 bop Black Black 1241 647 a Fy(I.)58 b(User')-12 b(s)57
-b(guide)p Black Black eop
-%%Page: 7 7
-7 6 bop Black Black -2 621 a Fs(Chapter)48 b(1.)f(What)h(is)f(XML?)-2
-1055 y Fx(1.1.)39 b(Intr)m(oduction)396 1235 y Fv(XML)20
-b(\(short)g(for)f Fr(Extensible)h(Markup)g(Langua)o(g)o(e)p
-Fv(\))e(generalizes)h(the)h(idea)g(that)g(te)o(xt)g(documents)f(are)h
-(typically)396 1343 y(structured)f(in)h(sections,)g(sub-sections,)f
-(paragraphs,)f(and)i(so)g(on.)g(The)g(format)f(of)h(the)g(document)e
-(is)j(not)f(\002x)o(ed)g(\(as,)396 1451 y(for)g(e)o(xample,)e(in)j
-(HTML\),)e(b)n(ut)h(can)g(be)g(declared)f(by)h(a)h(so-called)e(DTD)i
-(\(document)c(type)j(de\002nition\).)f(The)g(DTD)396
-1559 y(describes)h(only)f(the)i(rules)f(ho)n(w)f(the)i(document)d(can)i
-(be)g(structured,)e(b)n(ut)j(not)e(ho)n(w)h(the)g(document)e(can)i(be)
-396 1667 y(processed.)f(F)o(or)h(e)o(xample,)e(if)j(you)e(w)o(ant)i(to)
-f(publish)f(a)i(book)e(that)h(uses)h(XML)f(markup,)e(you)h(will)i(need)
-f(a)g(processor)396 1775 y(that)h(con)m(v)o(erts)d(the)i(XML)g(\002le)h
-(into)f(a)h(printable)e(format)g(such)h(as)h(Postscript.)f(On)g(the)g
-(one)g(hand,)f(the)h(structure)f(of)396 1883 y(XML)h(documents)f(is)i
-(con\002gurable;)d(on)i(the)g(other)f(hand,)g(there)h(is)h(no)f(longer)
-f(a)h(canonical)f(interpretation)f(of)i(the)396 1991
-y(elements)g(of)g(the)g(document;)f(for)g(e)o(xample)g(one)h(XML)g(DTD)
-g(might)g(w)o(ant)g(that)g(paragraphes)e(are)i(delimited)g(by)396
-2099 y Fq(para)g Fv(tags,)h(and)e(another)g(DTD)h(e)o(xpects)g
-Fq(p)g Fv(tags)h(for)e(the)i(same)f(purpose.)e(As)j(a)g(result,)f(for)g
-(e)n(v)o(ery)e(DTD)j(a)f(ne)n(w)396 2206 y(processor)f(is)i(required.)
-396 2356 y(Although)e(XML)h(can)g(be)g(used)g(to)g(e)o(xpress)g
-(structured)f(te)o(xt)h(documents)e(it)j(is)g(not)f(limited)g(to)g
-(this)h(kind)e(of)396 2464 y(application.)g(F)o(or)h(e)o(xample,)e(XML)
-i(can)g(also)h(be)f(used)g(to)g(e)o(xchange)e(structured)h(data)h(o)o
-(v)o(er)f(a)h(netw)o(ork,)f(or)h(to)396 2572 y(simply)g(store)g
-(structured)f(data)h(in)g(\002les.)h(Note)f(that)h(XML)f(documents)e
-(cannot)i(contain)f(arbitrary)f(binary)h(data)396 2680
-y(because)g(some)g(characters)g(are)g(forbidden;)e(for)i(some)g
-(applications)g(you)f(need)h(to)h(encode)e(binary)g(data)h(as)h(te)o
-(xt)g(\(e.g.)396 2788 y(the)g(base)h(64)f(encoding\).)-2
-3116 y Fp(1.1.1.)35 b(The)f("hello)g(w)n(orld")e(e)n(xample)396
-3283 y Fv(The)20 b(follo)n(wing)f(e)o(xample)f(sho)n(ws)j(a)f(v)o(ery)f
-(simple)i(DTD,)f(and)f(a)i(corresponding)c(document)h(instance.)h(The)
-396 3391 y(document)f(is)k(structured)c(such)i(that)h(it)f(consists)h
-(of)f(sections,)g(and)g(that)g(sections)g(consist)h(of)f(paragraphs,)d
-(and)j(that)396 3499 y(paragraphs)e(contain)h(plain)h(te)o(xt:)396
-3679 y Fq(<!ELEMENT)44 b(document)f(\(section\)+>)396
-3777 y(<!ELEMENT)h(section)f(\(paragraph\)+>)396 3874
-y(<!ELEMENT)h(paragraph)f(\(#PCDATA\)>)396 4065 y Fv(The)20
-b(follo)n(wing)f(document)f(is)j(an)f(instance)g(of)g(this)h(DTD:)396
-4245 y Fq(<?xml)44 b(version="1.0")f(encoding="ISO-8859-1"?>)396
-4342 y(<!DOCTYPE)h(document)f(SYSTEM)h("simple.dtd">)396
-4439 y(<document>)486 4536 y(<section>)576 4633 y(<paragraph>This)e(is)
-i(a)h(paragraph)e(of)i(the)f(first)g(section.</paragraph>)576
-4731 y(<paragraph>This)e(is)i(another)g(paragraph)f(of)i(the)f(first)g
-(section.</paragraph>)486 4828 y(</section>)p Black 3839
-5278 a Fr(7)p Black eop
-%%Page: 8 8
-8 7 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black 486 579 a Fq(<section>)576 676 y(<paragraph>This)42
-b(is)i(the)h(only)f(paragraph)f(of)i(the)f(second)g
-(section.</paragraph>)486 773 y(</section>)396 870 y(</document>)396
-1061 y Fv(As)21 b(in)g(HTML)f(\(and,)f(of)h(course,)f(in)h(grand-f)o
-(ather)d(SGML\),)j(the)g("pieces")g(of)g(the)g(document)f(are)h
-(delimited)f(by)396 1169 y(element)h(braces,)f(i.e.)i(such)f(a)g(piece)
-g(be)o(gins)f(with)i Fo(<)p Fq(name-of-the-type-of-the-piece)p
-Fo(>)15 b Fv(and)20 b(ends)g(with)396 1277 y Fo(<)p Fq
-(/name-of-the-type-of-the-piece)p Fo(>)p Fv(,)15 b(and)20
-b(the)g(pieces)g(are)g(called)g Fr(elements)p Fv(.)g(Unlik)o(e)g(HTML)g
-(and)396 1385 y(SGML,)g(both)g(start)g(tags)h(and)f(end)f(tags)i
-(\(i.e.)f(the)g(delimiters)g(written)g(in)g(angle)g(brack)o(ets\))f
-(can)h(ne)n(v)o(er)f(be)h(left)g(out.)396 1493 y(F)o(or)g(e)o(xample,)f
-(HTML)h(calls)h(the)f(paragraphs)e(simply)i Fq(p)p Fv(,)g(and)f
-(because)h(paragraphs)e(ne)n(v)o(er)h(contain)g(paragraphs,)f(a)396
-1601 y(sequence)h(of)h(se)n(v)o(eral)g(paragraphs)e(can)i(be)g(written)
-g(as:)396 1781 y Fq(<p>First)44 b(paragraph)396 1878
-y(<p>Second)g(paragraph)396 2069 y Fv(This)21 b(is)g(not)f(possible)g
-(in)g(XML;)g(continuing)e(our)i(e)o(xample)e(abo)o(v)o(e)h(we)h(must)h
-(al)o(w)o(ays)f(write)396 2249 y Fq(<paragraph>First)42
-b(paragraph</paragraph>)396 2346 y(<paragraph>Second)g
-(paragraph</paragraph>)396 2537 y Fv(The)20 b(rationale)f(behind)g
-(that)h(is)i(to)e(\(1\))f(simplify)h(the)g(de)n(v)o(elopment)d(of)j
-(XML)h(parsers)f(\(you)e(need)i(not)g(con)m(v)o(ert)e(the)396
-2645 y(DTD)j(into)f(a)g(deterministic)f(\002nite)i(automaton)d(which)i
-(is)h(required)d(to)j(detect)f(omitted)f(tags\),)h(and)g(to)g(\(2\))g
-(mak)o(e)f(it)396 2753 y(possible)h(to)h(parse)e(the)i(document)d
-(independent)f(of)j(whether)f(the)i(DTD)f(is)h(kno)n(wn)e(or)h(not.)396
-2903 y(The)g(\002rst)h(line)f(of)g(our)g(sample)g(document,)396
-3083 y Fq(<?xml)44 b(version="1.0")f(encoding="ISO-8859-1"?>)396
-3274 y Fv(is)21 b(the)e(so-called)g Fr(XML)h(declar)o(ation)p
-Fv(.)d(It)j(e)o(xpresses)e(that)i(the)f(document)f(follo)n(ws)h(the)g
-(con)m(v)o(entions)e(of)i(XML)g(v)o(ersion)396 3382 y(1.0,)h(and)f
-(that)h(the)h(document)d(is)j(encoded)d(using)i(characters)f(from)g
-(the)i(ISO-8859-1)c(character)i(set)i(\(often)e(kno)n(wn)396
-3490 y(as)i("Latin)e(1",)g(mostly)h(used)f(in)h(W)-7
-b(estern)20 b(Europe\).)d(Although)h(the)i(XML)g(declaration)e(is)i
-(not)g(mandatory)-5 b(,)16 b(it)21 b(is)f(good)396 3598
-y(style)h(to)f(include)f(it;)i(e)n(v)o(erybody)c(sees)k(at)g(the)f
-(\002rst)h(glance)f(that)g(the)g(document)e(uses)j(XML)f(markup)f(and)g
-(not)h(the)396 3706 y(similar)n(-looking)e(HTML)i(and)g(SGML)g(markup)f
-(languages.)f(If)i(you)g(omit)g(the)g(XML)g(declaration,)e(the)j
-(parser)e(will)396 3813 y(assume)h(that)h(the)f(document)e(is)j
-(encoded)e(as)i(UTF-8)e(or)h(UTF-16)f(\(there)h(is)h(a)g(rule)e(that)i
-(mak)o(es)f(it)h(possible)f(to)396 3921 y(distinguish)f(between)h
-(UTF-8)g(and)f(UTF-16)g(automatically\);)g(these)h(are)g(encodings)f
-(of)h(Unicode')-5 b(s)19 b(uni)n(v)o(ersal)396 4029 y(character)g(set.)
-i(\(Note)f(that)g(PXP,)h(unlik)o(e)e(its)i(predecessor)e("Markup",)f
-(fully)i(supports)f(Unicode.\))396 4179 y(The)h(second)f(line,)396
-4359 y Fq(<!DOCTYPE)44 b(document)f(SYSTEM)h("simple.dtd">)396
-4550 y Fv(names)20 b(the)g(DTD)h(that)f(is)h(going)e(to)h(be)g(used)g
-(for)g(the)g(rest)h(of)f(the)g(document.)e(In)i(general,)f(it)i(is)g
-(possible)f(that)g(the)396 4658 y(DTD)h(consists)f(of)g(tw)o(o)h
-(parts,)f(the)g(so-called)f(e)o(xternal)g(and)h(the)g(internal)f
-(subset.)h("External")f(means)h(that)g(the)h(DTD)396
-4766 y(e)o(xists)g(as)g(a)f(second)g(\002le;)h("internal")e(means)h
-(that)g(the)g(DTD)h(is)g(included)d(in)j(the)f(same)g(\002le.)h(In)f
-(this)g(e)o(xample,)f(there)p Black 3842 5278 a Fr(8)p
-Black eop
-%%Page: 9 9
-9 8 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black 396 579 a Fv(is)g(only)f(an)g(e)o(xternal)f(subset,)h(and)g(the)g
-(system)g(identi\002er)g("simple.dtd")e(speci\002es)j(where)f(the)g
-(DTD)g(\002le)h(can)f(be)396 687 y(found.)e(System)j(identi\002ers)f
-(are)g(interpreted)e(as)j(URLs;)g(for)f(instance)g(this)g(w)o(ould)g
-(be)g(le)o(gal:)396 867 y Fq(<!DOCTYPE)44 b(document)f(SYSTEM)h
-("http://host/location/simple.dtd">)396 1058 y Fv(Please)21
-b(note)f(that)g(PXP)h(cannot)e(interpret)g(HTTP)i(identi\002ers)e(by)h
-(def)o(ault,)f(b)n(ut)i(it)g(is)g(possible)f(to)g(change)f(the)396
-1166 y(interpretation)f(of)i(system)h(identi\002ers.)396
-1315 y(The)f(w)o(ord)g(immediately)f(follo)n(wing)f Fq(DOCTYPE)i
-Fv(determines)f(which)g(of)h(the)g(declared)f(element)h(types)g(\(here)
-396 1423 y("document",)e("section",)h(and)h("paragraph"\))d(is)k(used)f
-(for)g(the)g(outermost)f(element,)g(the)h Fr(r)l(oot)h(element)q
-Fv(.)f(In)g(this)396 1531 y(e)o(xample)f(it)i(is)g Fq(document)f
-Fv(because)f(the)h(outermost)f(element)h(is)h(delimited)e(by)h
-Fo(<)p Fq(document)p Fo(>)f Fv(and)396 1639 y Fo(<)p
-Fq(/document)p Fo(>)p Fv(.)396 1789 y(The)h(DTD)g(consists)h(of)f
-(three)g(declarations)f(for)g(element)h(types:)g Fq(document)p
-Fv(,)f Fq(section)p Fv(,)g(and)h Fq(paragraph)p Fv(.)f(Such)396
-1896 y(a)i(declaration)d(has)j(tw)o(o)f(parts:)396 2077
-y Fo(<)p Fq(!ELEMENT)43 b Fn(name)i(content-model)p Fo(>)396
-2268 y Fv(The)20 b(content)f(model)h(is)h(a)f(re)o(gular)f(e)o
-(xpression)g(which)g(describes)h(the)g(possible)g(inner)f(structure)h
-(of)g(the)g(element.)396 2376 y(Here,)g Fq(document)f
-Fv(contains)h(one)g(or)g(more)f(sections,)h(and)g(a)g
-Fq(section)g Fv(contains)f(one)h(or)g(more)f(paragraphs.)f(Note)396
-2483 y(that)j(these)f(tw)o(o)g(element)g(types)g(are)g(not)g(allo)n
-(wed)f(to)i(contain)e(arbitrary)g(te)o(xt.)g(Only)h(the)g
-Fq(paragraph)g Fv(element)f(type)396 2591 y(is)i(declared)e(such)h
-(that)h(parsed)e(character)g(data)h(\(indicated)f(by)h(the)g(symbol)f
-Fq(#PCDATA)p Fv(\))g(is)i(permitted.)396 2741 y(See)g(belo)n(w)e(for)h
-(a)h(detailed)e(discussion)h(of)g(content)f(models.)-2
-3110 y Fp(1.1.2.)35 b(XML)e(par)n(ser)n(s)h(and)g(pr)n(ocessor)n(s)396
-3278 y Fv(XML)20 b(documents)f(are)h(human-readable,)c(b)n(ut)21
-b(this)f(is)h(not)f(the)h(main)e(purpose)g(of)h(this)h(language.)d(XML)
-i(has)g(been)396 3386 y(designed)f(such)h(that)g(documents)f(can)h(be)g
-(read)g(by)f(a)i(program)d(called)i(an)g Fr(XML)h(par)o(ser)r
-Fv(.)f(The)g(parser)g(checks)f(that)396 3494 y(the)h(document)f(is)i
-(well-formatted,)d(and)h(it)i(represents)f(the)g(document)e(as)j
-(objects)f(of)g(the)g(programming)d(language.)396 3602
-y(There)j(are)g(tw)o(o)g(aspects)h(when)e(checking)g(the)h(document:)e
-(First,)j(the)f(document)e(must)j(follo)n(w)e(some)h(basic)396
-3710 y(syntactic)g(rules,)g(such)g(as)h(that)f(tags)h(are)f(written)g
-(in)g(angle)g(brack)o(ets,)f(that)h(for)g(e)n(v)o(ery)f(start)h(tag)h
-(there)e(must)i(be)f(a)396 3818 y(corresponding)d(end)j(tag)g(and)f(so)
-i(on.)f(A)g(document)e(respecting)h(these)i(rules)f(is)h
-Fr(well-formed)r Fv(.)f(Second,)f(the)396 3926 y(document)f(must)j
-(match)e(the)i(DTD)f(in)g(which)g(case)h(the)f(document)e(is)j
-Fr(valid)r Fv(.)f(Man)o(y)f(parsers)h(check)f(only)h(on)396
-4034 y(well-formedness)e(and)i(ignore)f(the)h(DTD;)h(PXP)g(is)g
-(designed)e(such)g(that)i(it)g(can)f(e)n(v)o(en)f(v)n(alidate)g(the)i
-(document.)396 4183 y(A)g(parser)f(does)f(not)h(mak)o(e)g(a)h(sensible)
-f(application,)e(it)j(only)f(reads)g(XML)g(documents.)e(The)i(whole)g
-(application)396 4291 y(w)o(orking)f(with)h(XML-formatted)e(data)i(is)h
-(called)f(an)g Fr(XML)h(pr)l(ocessor)r Fv(.)f(Often)g(XML)g(processors)
-f(con)m(v)o(ert)396 4399 y(documents)g(into)h(another)e(format,)h(such)
-h(as)h(HTML)f(or)g(Postscript.)g(Sometimes)g(processors)f(e)o(xtract)g
-(data)h(of)g(the)396 4507 y(documents)f(and)g(output)g(the)i(processed)
-e(data)h(again)f(XML-formatted.)e(The)j(parser)g(can)g(help)f(the)i
-(application)396 4615 y(processing)e(the)h(document;)f(for)g(e)o
-(xample)g(it)i(can)f(pro)o(vide)e(means)i(to)g(access)h(the)f(document)
-e(in)j(a)f(speci\002c)h(manner)-5 b(.)396 4723 y(PXP)21
-b(supports)e(an)i(object-oriented)c(access)k(layer)e(specially)-5
-b(.)p Black 3842 5278 a Fr(9)p Black eop
-%%Page: 10 10
-10 9 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black -2 583 a Fp(1.1.3.)35 b(Discussion)396 751 y Fv(As)21
-b(we)g(ha)n(v)o(e)e(seen,)h(there)g(are)g(tw)o(o)h(le)n(v)o(els)f(of)g
-(description:)f(On)h(the)g(one)g(hand,)f(XML)h(can)g(de\002ne)f(rules)i
-(about)e(the)396 859 y(format)g(of)h(a)h(document)d(\(the)i(DTD\),)g
-(on)f(the)i(other)e(hand,)g(XML)h(e)o(xpresses)g(structured)f
-(documents.)f(There)h(are)h(a)396 967 y(number)f(of)h(possible)f
-(applications:)p Black 396 1199 a Ft(\225)p Black 60
-w Fv(XML)i(can)f(be)g(used)g(to)g(e)o(xpress)f(structured)g(te)o(xts.)h
-(Unlik)o(e)g(HTML,)g(there)g(is)h(no)e(canonical)g(interpretation;)g
-(one)479 1307 y(w)o(ould)h(ha)n(v)o(e)f(to)i(write)f(a)h(back)o(end)d
-(for)i(the)g(DTD)g(that)h(translates)f(the)g(structured)f(te)o(xts)h
-(into)g(a)h(format)e(that)479 1415 y(e)o(xisting)h(bro)n(wsers,)f
-(printers)g(etc.)i(understand.)c(The)j(adv)n(antage)e(of)i(a)h
-(self-de\002ned)e(document)f(format)h(is)i(that)f(it)479
-1523 y(is)h(possible)f(to)h(design)e(the)h(format)f(in)i(a)f(more)g
-(problem-oriented)c(w)o(ay)-5 b(.)20 b(F)o(or)f(e)o(xample,)g(if)h(the)
-h(task)f(is)h(to)g(e)o(xtract)479 1631 y(reports)f(from)f(a)h
-(database,)g(one)f(can)h(use)h(a)f(DTD)h(that)f(re\003ects)h(the)f
-(structure)f(of)h(the)g(report)f(or)h(the)g(database.)g(A)479
-1739 y(possible)g(approach)e(w)o(ould)i(be)g(to)g(ha)n(v)o(e)g(an)g
-(element)f(type)h(for)g(e)n(v)o(ery)f(database)g(table)h(and)g(for)g(e)
-n(v)o(ery)e(column.)479 1847 y(Once)i(the)g(DTD)h(has)f(been)g
-(designed,)e(the)j(report)e(procedure)e(can)j(be)g(splitted)h(up)e(in)i
-(a)f(part)g(that)h(selects)g(the)479 1955 y(database)f(ro)n(ws)g(and)g
-(outputs)f(them)h(as)h(an)f(XML)g(document)e(according)g(to)j(the)f
-(DTD,)g(and)g(in)g(a)g(part)g(that)479 2063 y(translates)h(the)f
-(document)e(into)i(other)f(formats.)g(Of)i(course,)e(the)h(latter)h
-(part)e(can)h(be)h(solv)o(ed)e(in)h(a)h(generic)e(w)o(ay)-5
-b(,)479 2170 y(e.g.)20 b(there)g(may)f(be)h(con\002gurable)e(back)o
-(ends)h(for)h(all)g(DTDs)h(that)f(follo)n(w)g(the)g(approach)e(and)i
-(ha)n(v)o(e)f(element)h(types)479 2278 y(for)g(tables)g(and)g(columns.)
-479 2428 y(XML)h(plays)f(the)g(role)g(of)g(a)g(con\002gurable)e
-(intermediate)h(format.)g(The)g(database)h(e)o(xtraction)e(function)h
-(can)h(be)479 2536 y(written)g(without)g(ha)n(ving)f(to)h(kno)n(w)f
-(the)h(details)h(of)f(typesetting;)f(the)h(back)o(ends)f(can)h(be)g
-(written)g(without)g(ha)n(ving)479 2644 y(to)h(kno)n(w)e(the)h(details)
-h(of)e(the)i(database.)479 2793 y(Of)g(course,)e(there)h(are)g
-(traditional)f(solutions.)g(One)h(can)g(de\002ne)g(an)g(ad)g(hoc)g
-(intermediate)e(te)o(xt)j(\002le)f(format.)f(This)479
-2901 y(disadv)n(antage)f(is)k(that)e(there)g(are)g(no)f(names)h(for)g
-(the)g(pieces)g(of)g(the)g(format,)f(and)h(that)g(such)g(formats)g
-(usually)f(lack)479 3009 y(of)h(documentation)d(because)j(of)g(this.)g
-(Another)f(solution)g(w)o(ould)h(be)g(to)g(ha)n(v)o(e)g(a)h(binary)e
-(representation,)e(either)j(as)479 3117 y(language-dependent)c(or)k
-(language-independent)14 b(structure)20 b(\(e)o(xample)e(of)i(the)g
-(latter)h(can)f(be)g(found)e(in)j(RPC)479 3225 y(implementations\).)d
-(The)i(disadv)n(antage)e(is)j(that)f(it)h(is)g(harder)e(to)i(vie)n(w)f
-(such)g(representations,)e(one)h(has)i(to)f(write)479
-3333 y(pretty)g(printers)f(for)h(this)g(purpose.)f(It)h(is)h(also)g
-(more)e(dif)n(\002cult)h(to)g(enter)g(test)h(data;)f(XML)g(is)h(plain)f
-(te)o(xt)g(that)h(can)f(be)479 3441 y(written)g(using)g(an)g(arbitrary)
-f(editor)g(\(Emacs)h(has)g(e)n(v)o(en)f(a)i(good)e(XML)h(mode,)f
-(PSGML\).)h(All)h(these)f(alternati)n(v)o(es)479 3549
-y(suf)n(fer)g(from)f(a)h(missing)g(structure)g(check)o(er)m(,)e(i.e.)i
-(the)h(programs)d(processing)h(these)h(formats)f(usually)h(do)g(not)479
-3657 y(check)g(the)g(input)f(\002le)i(or)f(input)g(object)f(in)i
-(detail;)f(XML)g(parsers)g(check)f(the)h(syntax)g(of)g(the)g(input)g
-(\(the)f(so-called)479 3765 y(well-formedness)f(check\),)h(and)h(the)g
-(adv)n(anced)e(parsers)i(lik)o(e)g(PXP)h(e)n(v)o(en)f(v)o(erify)e(that)
-j(the)f(structure)f(matches)h(the)479 3872 y(DTD)h(\(the)f(so-called)f
-(v)n(alidation\).)p Black 396 4022 a Ft(\225)p Black
-60 w Fv(XML)i(can)f(be)g(used)g(as)g(con\002gurable)e(communication)g
-(language.)g(A)i(fundamental)e(problem)h(of)h(e)n(v)o(ery)479
-4130 y(communication)e(is)j(that)f(sender)f(and)h(recei)n(v)o(er)f
-(must)h(follo)n(w)g(the)g(same)g(con)m(v)o(entions)e(about)h(the)h
-(language.)e(F)o(or)479 4238 y(data)i(e)o(xchange,)e(the)i(question)f
-(is)j(usually)d(which)h(data)g(records)f(and)h(\002elds)g(are)g(a)n(v)n
-(ailable,)g(ho)n(w)g(the)o(y)f(are)479 4346 y(syntactically)h
-(composed,)e(and)i(which)f(v)n(alues)h(are)g(possible)g(for)g(the)g(v)n
-(arious)f(\002elds.)h(Similar)h(questions)e(arise)479
-4454 y(for)h(te)o(xt)g(document)e(e)o(xchange.)g(XML)i(does)g(not)g
-(answer)g(these)g(problems)f(completely)-5 b(,)18 b(b)n(ut)i(it)h
-(reduces)e(the)479 4562 y(number)g(of)h(ambiguities)f(for)g(such)h(con)
-m(v)o(entions:)e(The)i(outlines)f(of)h(the)g(syntax)g(are)g
-(speci\002ed)g(by)g(the)g(DTD)g(\(b)n(ut)479 4669 y(not)g(necessarily)g
-(the)g(details\),)g(and)g(XML)g(introduces)e(canonical)h(names)h(for)g
-(the)g(components)e(of)i(documents)479 4777 y(such)g(that)h(it)f(is)i
-(simpler)d(to)i(describe)e(the)h(rest)h(of)f(the)g(syntax)g(and)f(the)h
-(semantics)h(informally)-5 b(.)p Black 3800 5278 a Fr(10)p
-Black eop
-%%Page: 11 11
-11 10 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black Black 396 579 a Ft(\225)p Black 60 w Fv(XML)f(is)g(a)g(data)f
-(storage)g(format.)f(Currently)-5 b(,)17 b(e)n(v)o(ery)h(softw)o(are)h
-(product)f(tends)h(to)h(use)f(its)i(o)n(wn)d(w)o(ay)i(to)f(store)h
-(data;)479 687 y(commercial)f(softw)o(are)h(often)f(does)h(not)g
-(describe)f(such)h(formats,)f(and)h(it)h(is)g(a)g(pain)e(to)i(inte)o
-(grate)e(such)h(softw)o(are)479 795 y(into)g(a)g(bigger)f(project.)f
-(XML)i(can)g(help)f(to)h(impro)o(v)o(e)e(this)j(situation)e(when)g(se)n
-(v)o(eral)g(applications)g(share)h(the)g(same)479 903
-y(syntax)g(of)g(data)g(\002les.)h(DTDs)f(are)g(then)g(neutral)g
-(instances)g(that)g(check)f(the)h(format)g(of)f(data)i(\002les)g
-(independent)c(of)479 1011 y(applications.)-2 1512 y
-Fx(1.2.)39 b(Highlights)e(of)i(XML)396 1692 y Fv(This)21
-b(section)f(e)o(xplains)f(man)o(y)g(of)h(the)g(features)f(of)h(XML,)g
-(b)n(ut)h(not)e(all,)i(and)f(some)g(features)f(not)h(in)g(detail.)g(F)o
-(or)g(a)396 1800 y(complete)f(description,)g(see)i(the)f(XML)g
-(speci\002cation)396 1908 y(\(http://www)-5 b(.w3.or)o
-(g/TR/1998/REC-xml-)o(19)o(98)o(02)o(10)o(.htm)o(l\).)-2
-2236 y Fp(1.2.1.)35 b(The)f(DTD)g(and)g(the)f(instance)396
-2404 y Fv(The)20 b(DTD)g(contains)g(v)n(arious)f(declarations;)g(in)h
-(general)f(you)h(can)g(only)f(use)i(a)f(feature)f(if)i(you)e(ha)n(v)o
-(e)h(pre)n(viously)396 2512 y(declared)f(it.)i(The)f(document)e
-(instance)i(\002le)h(may)e(contain)g(the)i(full)f(DTD,)g(b)n(ut)g(it)h
-(is)g(also)g(possible)f(to)g(split)h(the)f(DTD)396 2619
-y(into)g(an)g(internal)g(and)f(an)h(e)o(xternal)f(subset.)h(A)h
-(document)d(must)j(be)o(gin)e(as)h(follo)n(ws)g(if)h(the)f(full)g(DTD)g
-(is)h(included:)396 2800 y Fo(<)p Fq(?xml)44 b(version="1.0")f
-(encoding=")p Fn(Your)f(encoding)t Fq("?)p Fo(>)396 2897
-y(<)p Fq(!DOCTYPE)h Fn(root)i Fq([)486 2994 y Fn(Declarations)396
-3091 y Fq(])p Fo(>)396 3282 y Fv(These)20 b(declarations)f(are)h
-(called)g(the)h Fr(internal)e(subset)q Fv(.)i(Note)f(that)g(the)g
-(usage)g(of)g(entities)h(and)e(conditional)g(sections)396
-3390 y(is)i(restricted)f(within)g(the)g(internal)g(subset.)396
-3539 y(If)g(the)h(declarations)d(are)j(located)e(in)h(a)h(dif)n(ferent)
-e(\002le,)h(you)f(can)h(refer)g(to)g(this)h(\002le)g(as)g(follo)n(ws:)
-396 3720 y Fo(<)p Fq(?xml)44 b(version="1.0")f(encoding=")p
-Fn(Your)f(encoding)t Fq("?)p Fo(>)396 3817 y(<)p Fq(!DOCTYPE)h
-Fn(root)i Fq(SYSTEM)e(")p Fn(file)h(name)p Fq(")p Fo(>)396
-4008 y Fv(The)20 b(declarations)f(in)h(the)h(\002le)f(are)h(called)f
-(the)g Fr(e)n(xternal)g(subset)q Fv(.)g(The)g(\002le)h(name)f(is)h
-(called)f(the)g Fr(system)h(identi\002er)r Fv(.)e(It)396
-4116 y(is)i(also)g(possible)f(to)g(refer)g(to)g(the)g(\002le)h(by)f(a)g
-(so-called)g Fr(public)f(identi\002er)r Fv(,)g(b)n(ut)i(most)f(XML)g
-(applications)f(w)o(on')o(t)g(use)396 4223 y(this)i(feature.)396
-4373 y(Y)-9 b(ou)20 b(can)g(also)g(specify)g(both)f(internal)h(and)f(e)
-o(xternal)g(subsets.)i(In)e(this)i(case,)g(the)f(declarations)f(of)h
-(both)f(subsets)i(are)396 4481 y(mix)o(ed,)e(and)h(if)g(there)g(are)g
-(con\003icts,)g(the)g(declaration)f(of)h(the)g(internal)f(subset)i(o)o
-(v)o(errides)d(those)i(of)g(the)g(e)o(xternal)396 4589
-y(subset)h(with)f(the)g(same)h(name.)e(This)h(looks)g(as)h(follo)n(ws:)
-396 4769 y Fo(<)p Fq(?xml)44 b(version="1.0")f(encoding=")p
-Fn(Your)f(encoding)t Fq("?)p Fo(>)396 4866 y(<)p Fq(!DOCTYPE)h
-Fn(root)89 b Fq(SYSTEM)44 b(")p Fn(file)g(name)p Fq(")g([)p
-Black 3800 5278 a Fr(11)p Black eop
-%%Page: 12 12
-12 11 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black 486 579 a Fn(Declarations)396 676 y Fq(])p Fo(>)396
-909 y Fv(The)f(XML)g(declaration)f(\(the)h(string)g(be)o(ginning)d
-(with)k Fo(<)p Fq(?xml)e Fv(and)h(ending)f(at)i Fq(?)p
-Fo(>)p Fv(\))f(should)f(specify)g(the)h(encoding)396
-1016 y(of)g(the)g(\002le.)h(Common)e(v)n(alues)h(are)g(UTF-8,)f(and)h
-(the)g(ISO-8859)e(series)j(of)f(character)f(sets.)i(Note)f(that)g(e)n
-(v)o(ery)f(\002le)396 1124 y(parsed)h(by)f(the)i(XML)f(processor)f(can)
-h(be)o(gin)f(with)h(an)g(XML)h(declaration)d(and)i(that)g(e)n(v)o(ery)f
-(\002le)i(may)e(ha)n(v)o(e)h(its)h(o)n(wn)396 1232 y(encoding.)396
-1382 y(The)f(name)g(of)g(the)g(root)f(element)h(must)g(be)g(mentioned)f
-(directly)g(after)h(the)g Fq(DOCTYPE)g Fv(string.)f(This)i(means)e
-(that)i(a)396 1490 y(full)f(document)f(instance)g(looks)h(lik)o(e)396
-1670 y Fo(<)p Fq(?xml)44 b(version="1.0")f(encoding=")p
-Fn(Your)f(encoding)t Fq("?)p Fo(>)396 1767 y(<)p Fq(!DOCTYPE)h
-Fn(root)89 b Fq(SYSTEM)44 b(")p Fn(file)g(name)p Fq(")g([)486
-1864 y Fn(Declarations)396 1961 y Fq(])p Fo(>)396 2156
-y(<)p Fn(root)p Fo(>)486 2253 y Fn(inner)g(contents)396
-2350 y Fo(<)p Fq(/)p Fn(root)p Fo(>)-2 2802 y Fp(1.2.2.)35
-b(Reser)q(ved)h(c)o(haracter)n(s)396 2970 y Fv(Some)20
-b(characters)f(are)i(generally)d(reserv)o(ed)h(to)h(indicate)g(markup)e
-(such)i(that)g(the)o(y)g(cannot)f(be)h(used)g(for)g(character)396
-3078 y(data.)g(These)g(characters)f(are)h Fm(<)p Fv(,)h
-Fm(>)p Fv(,)f(and)f(&.)h(Furthermore,)e(single)i(and)g(double)e(quotes)
-i(are)g(sometimes)g(reserv)o(ed.)396 3186 y(If)g(you)g(w)o(ant)g(to)g
-(include)f(such)h(a)h(character)e(as)i(character)m(,)d(write)j(it)f(as)
-h(follo)n(ws:)p Black 396 3473 a Ft(\225)p Black 60 w
-Fq(&lt;)f Fv(instead)g(of)g Fm(<)p Black 396 3581 a Ft(\225)p
-Black 60 w Fq(&gt;)g Fv(instead)g(of)g Fm(>)p Black 396
-3689 a Ft(\225)p Black 60 w Fq(&amp;)g Fv(instead)g(of)g(&)p
-Black 396 3797 a Ft(\225)p Black 60 w Fq(&apos;)g Fv(instead)g(of)g(')p
-Black 396 3905 a Ft(\225)p Black 60 w Fq(&quot;)g Fv(instead)g(of)g(")
-396 4054 y(All)h(other)e(characters)h(are)g(free)g(in)g(the)g(document)
-e(instance.)i(It)g(is)i(possible)d(to)i(include)e(a)i(character)e(by)g
-(its)j(position)396 4162 y(in)f(the)f(Unicode)f(alphabet:)396
-4342 y Fq(&#)p Fn(n)p Fq(;)396 4533 y Fv(where)h Fl(n)g
-Fv(is)i(the)e(decimal)f(number)g(of)h(the)g(character)-5
-b(.)19 b(Alternati)n(v)o(ely)-5 b(,)18 b(you)h(can)h(specify)g(the)g
-(character)f(by)h(its)396 4641 y(he)o(xadecimal)e(number:)396
-4822 y Fq(&#x)p Fn(n)p Fq(;)p Black 3800 5278 a Fr(12)p
-Black eop
-%%Page: 13 13
-13 12 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black 396 579 a Fv(In)f(the)g(scope)g(of)g(declarations,)f(the)h
-(character)f(\045)i(is)g(no)f(longer)f(free.)g(T)-7 b(o)20
-b(include)g(it)h(as)f(character)m(,)f(you)g(must)h(use)396
-687 y(the)g(notations)g Fq(&#37;)g Fv(or)f Fq(&#x25;)p
-Fv(.)396 836 y(Note)h(that)h(besides)f(&lt;,)g(&gt;,)g(&amp;,)f
-(&apos;,)g(and)h(&quot;)f(there)h(are)g(no)g(prede\002nes)f(character)g
-(entities.)h(This)396 944 y(is)h(dif)n(ferent)e(from)g(HTML)h(which)g
-(de\002nes)g(a)g(list)i(of)d(characters)h(that)g(can)g(be)g(referenced)
-e(by)i(name)f(\(e.g.)h(&auml;)396 1052 y(for)g(\344\);)g(ho)n(we)n(v)o
-(er)m(,)e(if)i(you)g(prefer)e(named)i(characters,)f(you)g(can)h
-(declare)f(such)h(entities)h(yourself)e(\(see)h(belo)n(w\).)-2
-1422 y Fp(1.2.3.)35 b(Elements)g(and)f(ELEMENT)e(dec)n(larations)396
-1589 y Fv(Elements)20 b(structure)f(the)h(document)f(instance)g(in)i(a)
-f(hierarchical)f(w)o(ay)-5 b(.)20 b(There)f(is)i(a)g(top-le)n(v)o(el)d
-(element,)i(the)g Fr(r)l(oot)396 1697 y(element)q Fv(,)g(which)g
-(contains)g(a)g(sequence)f(of)h(inner)g(elements)f(and)h(character)f
-(sections.)h(The)g(inner)f(elements)h(are)396 1805 y(structured)f(in)h
-(the)f(same)h(w)o(ay)-5 b(.)20 b(Ev)o(ery)e(element)h(has)h(an)g
-Fr(element)f(type)p Fv(.)h(The)f(be)o(ginning)f(of)h(the)h(element)f
-(is)i(indicated)396 1913 y(by)f(a)h Fr(start)g(ta)o(g)p
-Fv(,)e(written)396 2093 y Fo(<)p Fn(element-type)p Fo(>)396
-2284 y Fv(and)h(the)g(element)g(continues)f(until)h(the)g
-(corresponding)d Fr(end)i(ta)o(g)h Fv(is)h(reached:)396
-2465 y Fo(<)p Fq(/)p Fn(element-type)p Fo(>)396 2655
-y Fv(In)f(XML,)f(it)i(is)f(not)g(allo)n(wed)f(to)h(omit)f(start)i(or)e
-(end)g(tags,)h(e)n(v)o(en)f(if)h(the)g(DTD)g(w)o(ould)f(permit)g(this.)
-h(Note)g(that)g(there)f(are)396 2763 y(no)h(special)g(rules)g(ho)n(w)g
-(to)g(interpret)g(spaces)g(or)g(ne)n(wlines)g(near)f(start)i(or)f(end)g
-(tags;)g(all)h(spaces)f(and)g(ne)n(wlines)g(count.)396
-2913 y(Ev)o(ery)f(element)h(type)f(must)i(be)f(declared)f(before)f(it)j
-(can)f(be)g(used.)g(The)g(declaration)f(consists)h(of)g(tw)o(o)h
-(parts:)f(the)396 3021 y(ELEMENT)f(declaration)f(describes)h(the)h
-(content)f(model,)f(i.e.)i(which)f(inner)g(elements)g(are)h(allo)n
-(wed;)f(the)h(A)-9 b(TTLIST)396 3129 y(declaration)19
-b(describes)h(the)g(attrib)n(utes)g(of)g(the)g(element.)396
-3278 y(An)g(element)g(can)g(simply)g(allo)n(w)g(e)n(v)o(erything)e(as)i
-(content.)f(This)i(is)g(written:)396 3458 y Fo(<)p Fq(!ELEMENT)43
-b Fn(name)i Fq(ANY)p Fo(>)396 3649 y Fv(On)20 b(the)h(opposite,)e(an)h
-(element)f(can)h(be)g(forced)f(to)i(be)f(empty;)f(declared)g(by:)396
-3829 y Fo(<)p Fq(!ELEMENT)43 b Fn(name)i Fq(EMPTY)p Fo(>)396
-4020 y Fv(Note)20 b(that)h(there)e(is)j(an)e(abbre)n(viated)e(notation)
-h(for)g(empty)g(element)h(instances:)g Fo(<)p Fn(name)p
-Fq(/)p Fo(>)p Fv(.)396 4170 y(There)g(are)g(tw)o(o)g(more)g
-(sophisticated)f(forms)g(of)h(declarations:)f(so-called)h
-Fr(mixed)g(declar)o(ations)p Fv(,)e(and)i Fr(r)m(e)m(gular)396
-4278 y(e)n(xpr)m(essions)p Fv(.)g(An)h(element)e(with)i(mix)o(ed)e
-(content)g(contains)g(character)g(data)h(interspersed)f(with)i(inner)e
-(elements,)396 4386 y(and)h(the)g(set)h(of)f(allo)n(wed)g(inner)f
-(elements)h(can)g(be)g(speci\002ed.)g(In)f(contrast)h(to)g(this,)h(a)g
-(re)o(gular)d(e)o(xpression)396 4494 y(declaration)h(does)h(not)g(allo)
-n(w)g(character)f(data,)h(b)n(ut)g(the)g(inner)f(elements)h(can)g(be)g
-(described)f(by)h(the)g(more)g(po)n(werful)396 4601 y(means)g(of)g(re)o
-(gular)f(e)o(xpressions.)396 4751 y(A)i(declaration)e(for)g(mix)o(ed)g
-(content)g(looks)h(as)h(follo)n(ws:)p Black 3800 5278
-a Fr(13)p Black eop
-%%Page: 14 14
-14 13 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black 396 579 a Fo(<)p Fq(!ELEMENT)43 b Fn(name)i Fq(\(#PCDATA)e(|)i
-Fn(element)1892 609 y Fk(1)1962 579 y Fq(|)g(...)f(|)h
-Fn(element)2636 609 y Fk(n)2707 579 y Fq(\)*)p Fo(>)396
-770 y Fv(or)20 b(if)h(you)e(do)h(not)g(w)o(ant)g(to)g(allo)n(w)g(an)o
-(y)g(inner)f(element,)h(simply)396 950 y Fo(<)p Fq(!ELEMENT)43
-b Fn(name)i Fq(\(#PCDATA\))p Fo(>)396 1279 y Fj(Example)479
-1426 y Fi(If)19 b(element)g(type)g Fh(q)g Fi(is)g(declared)h(as)479
-1596 y Fh(<!ELEMENT)44 b(q)c(\(#PCDATA)k(|)c(r)h(|)g(s\)*>)479
-1776 y Fi(this)19 b(is)f(a)h(le)o(gal)g(instance:)479
-1947 y Fh(<q>This)43 b(is)e(character)j(data<r></r>with)h(<s></s>inner)
-g(elements</q>)479 2127 y Fi(But)19 b(this)g(is)f(ille)o(gal)g(because)
-i Fh(t)f Fi(has)h(not)f(been)g(enumerated)i(in)e(the)g(declaration:)479
-2297 y Fh(<q>This)43 b(is)e(character)j(data<r></r>with)h(<t></t>inner)
-g(elements</q>)396 2571 y Fv(The)20 b(other)f(form)h(uses)g(a)h(re)o
-(gular)e(e)o(xpression)f(to)j(describe)e(the)h(possible)g(contents:)396
-2752 y Fo(<)p Fq(!ELEMENT)43 b Fn(name)i(regexp)p Fo(>)396
-2942 y Fv(The)20 b(follo)n(wing)f(well-kno)n(wn)f(re)o(ge)o(xp)g
-(operators)h(are)h(allo)n(wed:)p Black 396 3299 a Ft(\225)p
-Black 60 w Fn(element-name)p Black 396 3407 a Ft(\225)p
-Black 60 w Fq(\()p Fn(subexpr)839 3437 y Fk(1)910 3407
-y Fq(,)g Fv(...)g Fq(,)45 b Fn(subexpr)1463 3437 y Fk(n)1533
-3407 y Fq(\))p Black 396 3515 a Ft(\225)p Black 60 w
-Fq(\()p Fn(subexpr)839 3545 y Fk(1)910 3515 y Fq(|)20
-b Fv(...)g Fq(|)45 b Fn(subexpr)1463 3545 y Fk(n)1533
-3515 y Fq(\))p Black 396 3623 a Ft(\225)p Black 60 w
-Fn(subexpr)s Fq(*)p Black 396 3731 a Ft(\225)p Black
-60 w Fn(subexpr)s Fq(+)p Black 396 3839 a Ft(\225)p Black
-60 w Fn(subexpr)s Fq(?)396 3989 y Fv(The)20 b Fq(,)h
-Fv(operator)d(indicates)i(a)h(sequence)e(of)h(sub-models,)e(the)i
-Fq(|)h Fv(operator)d(describes)i(alternati)n(v)o(e)f(sub-models.)f(The)
-396 4096 y Fq(*)j Fv(indicates)f(zero)f(or)h(more)g(repetitions,)f(and)
-g Fq(+)i Fv(one)f(or)f(more)h(repetitions.)f(Finally)-5
-b(,)19 b Fq(?)i Fv(can)f(be)g(used)g(for)f(optional)396
-4204 y(sub-models.)g(As)i(atoms)f(the)g(re)o(ge)o(xp)e(can)i(contain)f
-(names)h(of)g(elements;)g(note)g(that)g(it)h(is)g(not)f(allo)n(wed)f
-(to)i(include)396 4312 y Fq(#PCDATA)p Fv(.)396 4462 y(The)f(e)o(xact)g
-(syntax)f(of)h(the)g(re)o(gular)f(e)o(xpressions)g(is)i(rather)e
-(strange.)h(This)g(can)g(be)g(e)o(xplained)f(best)h(by)g(a)g(list)i(of)
-396 4570 y(constraints:)p Black 396 4802 a Ft(\225)p
-Black 60 w Fv(The)e(outermost)f(e)o(xpression)g(must)h(not)g(be)g
-Fn(element-name)p Fv(.)p Black 3800 5278 a Fr(14)p Black
-eop
-%%Page: 15 15
-15 14 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black 479 579 a(Ille)m(gal:)e Fq(<!ELEMENT)43 b(x)i(y>)p
-Fv(;)21 b(this)f(must)h(be)f(written)g(as)h Fq(<!ELEMENT)43
-b(x)i(\(y\)>)p Fv(.)p Black 396 728 a Ft(\225)p Black
-60 w Fv(F)o(or)20 b(the)g(unary)f(operators)g Fn(subexpr)s
-Fq(*)p Fv(,)g Fn(subexpr)s Fq(+)p Fv(,)g(and)g Fn(subexpr)s
-Fq(?)p Fv(,)g(the)h Fn(subexpr)i Fv(must)f(not)f(be)g(again)f(an)479
-836 y(unary)g(operator)-5 b(.)479 986 y Fr(Ille)m(gal:)19
-b Fq(<!ELEMENT)43 b(x)i(y**>)p Fv(;)20 b(this)h(must)f(be)g(written)g
-(as)h Fq(<!ELEMENT)44 b(x)g(\(y*\)*>)p Fv(.)p Black 396
-1135 a Ft(\225)p Black 60 w Fv(Between)21 b Fq(\))f Fv(and)g(one)f(of)h
-(the)h(unary)d(operatory)g Fq(*)p Fv(,)j Fq(+)p Fv(,)f(or)g
-Fq(?)p Fv(,)g(there)g(must)g(not)g(be)g(whitespace.)479
-1285 y Fr(Ille)m(gal:)f Fq(<!ELEMENT)43 b(x)i(\(y|z\))f(*>)p
-Fv(;)21 b(this)f(must)h(be)f(written)g(as)h Fq(<!ELEMENT)43
-b(x)i(\(y|z\)*>)p Fv(.)p Black 396 1434 a Ft(\225)p Black
-60 w Fv(There)20 b(is)h(the)f(additional)f(constraint)g(that)h(the)h
-(right)e(parenthsis)g(must)i(be)f(contained)e(in)j(the)f(same)g(entity)
-g(as)h(the)479 1542 y(left)g(parenthesis;)e(see)i(the)f(section)g
-(about)f(parsed)h(entities)g(belo)n(w)-5 b(.)396 1733
-y(Note)20 b(that)g(there)g(is)h(another)e(restriction)g(on)h(re)o
-(gular)e(e)o(xpressions)h(which)h(must)g(be)g(deterministic.)f(This)h
-(means)g(that)396 1841 y(the)g(parser)g(must)g(be)g(able)g(to)h(see)g
-(by)e(looking)g(at)i(the)f(ne)o(xt)f(tok)o(en)h(which)f(alternati)n(v)o
-(e)g(is)i(actually)f(used,)g(or)f(whether)396 1949 y(the)h(repetition)f
-(stops.)i(The)f(reason)f(for)g(this)i(is)g(simply)f(compatability)f
-(with)h(SGML)g(\(there)g(is)h(no)f(intrinsic)f(reason)396
-2057 y(for)h(this)h(rule;)e(XML)i(can)f(li)n(v)o(e)g(without)f(this)i
-(restriction\).)396 2302 y Fj(Example)479 2449 y Fi(The)e(elements)g
-(are)g(declared)h(as)f(follo)n(ws:)479 2620 y Fh(<!ELEMENT)44
-b(q)c(\(r?,)i(\(s)f(|)g(t\)+\)>)479 2707 y(<!ELEMENT)j(r)c
-(\(#PCDATA\)>)479 2795 y(<!ELEMENT)k(s)c(EMPTY>)479 2882
-y(<!ELEMENT)k(t)c(\(q)i(|)e(r\)>)479 3062 y Fi(This)19
-b(is)f(a)h(le)o(gal)g(instance:)479 3233 y Fh(<q><r>Some)44
-b(characters</r><s/><)q(/q>)479 3413 y Fi(\(Note:)19
-b Fg(<)p Fh(s/)p Fg(>)g Fi(is)g(an)g(abbre)n(viation)h(for)f
-Fg(<)p Fh(s)p Fg(><)p Fh(/s)p Fg(>)p Fi(.\))g(It)f(w)o(ould)i(be)f
-(ille)o(gal)f(to)h(lea)o(v)o(e)g Fh(<s/>)h Fi(out)f(because)h(at)f
-(least)f(one)479 3510 y(instance)i(of)f Fh(s)g Fi(or)g
-Fh(t)g Fi(must)g(be)g(present.)g(It)f(w)o(ould)i(be)f(ille)o(gal,)f
-(too,)h(if)f(characters)i(e)o(xisted)f(outside)h(the)e
-Fh(r)i Fi(element;)f(the)g(only)479 3607 y(e)o(xception)h(is)f(white)g
-(space.)g(\226)g(This)f(is)h(le)o(gal,)f(too:)479 3778
-y Fh(<q><s/><t><q><s/><)q(/q>)q(</t)q(></)q(q>)-2 4230
-y Fp(1.2.4.)35 b(Attrib)n(ute)e(lists)h(and)g(A)-11 b(TTLIST)34
-b(dec)n(larations)396 4398 y Fv(Elements)20 b(may)g(ha)n(v)o(e)f
-(attrib)n(utes.)h(These)g(are)g(put)g(into)g(the)g(start)h(tag)f(of)g
-(an)g(element)g(as)h(follo)n(ws:)396 4578 y Fo(<)p Fn(element-name)43
-b(attribute)1444 4608 y Fk(1)1469 4578 y Fq(=")p Fn(value)1784
-4608 y Fk(1)1810 4578 y Fq(")i(...)f Fn(attribute)2484
-4608 y Fk(n)2509 4578 y Fq(=")p Fn(value)2824 4608 y
-Fk(n)2850 4578 y Fq(")p Fo(>)396 4769 y Fv(Instead)20
-b(of)g Fq(")p Fn(value)1017 4799 y Fk(k)1043 4769 y Fq(")g
-Fv(it)h(is)g(also)g(possible)f(to)g(use)g(single)g(quotes)g(as)h(in)f
-Fq(')p Fn(value)2817 4799 y Fk(k)2843 4769 y Fq(')p Fv(.)g(Note)h(that)
-f(you)f(cannot)g(use)396 4877 y(double)g(quotes)h(literally)g(within)g
-(the)g(v)n(alue)f(of)h(the)g(attrib)n(ute)g(if)h(double)d(quotes)i(are)
-g(the)g(delimiters;)g(the)g(same)p Black 3800 5278 a
-Fr(15)p Black eop
-%%Page: 16 16
-16 15 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black 396 579 a Fv(applies)f(to)h(single)f(quotes.)f(Y)-9
-b(ou)20 b(can)g(generally)e(not)i(use)g Fm(<)h Fv(and)e(&)i(as)g
-(characters)e(in)h(attrib)n(ute)g(v)n(alues.)g(It)g(is)396
-687 y(possible)g(to)h(include)e(the)h(paraphrases)e(&lt;,)j(&gt;,)f
-(&amp;,)f(&apos;,)g(and)h(&quot;)f(\(and)g(an)o(y)g(other)h(reference)e
-(to)j(a)396 795 y(general)e(entity)h(as)h(long)f(as)g(the)h(entity)f
-(is)h(not)e(de\002ned)h(by)f(an)i(e)o(xternal)d(\002le\))j(as)g(well)g
-(as)g(&#)p Fl(n)p Fv(;.)396 944 y(Before)f(you)f(can)h(use)h(an)f
-(attrib)n(ute)g(you)f(must)h(declare)g(it.)g(An)g(A)-9
-b(TTLIST)20 b(declaration)e(looks)i(as)h(follo)n(ws:)396
-1124 y Fo(<)p Fq(!ATTLIST)43 b Fn(element-name)845 1222
-y(attribute-name)f(attribute-type)h(attribute-default)845
-1319 y Fq(...)845 1416 y Fn(attribute-name)f(attribute-type)h
-(attribute-default)396 1513 y Fo(>)396 1704 y Fv(There)20
-b(are)g(a)g(lot)h(of)f(types,)f(b)n(ut)i(most)f(important)f(are:)p
-Black 396 2061 a Ft(\225)p Black 60 w Fq(CDATA)p Fv(:)h(Ev)o(ery)f
-(string)h(is)h(allo)n(wed)f(as)g(attrib)n(ute)g(v)n(alue.)p
-Black 396 2169 a Ft(\225)p Black 60 w Fq(NMTOKEN)p Fv(:)g(Ev)o(ery)f
-(nametok)o(en)f(is)j(allo)n(wed)f(as)g(attrib)n(ute)g(v)n(alue.)g
-(Nametok)o(ens)f(consist)h(\(mainly\))f(of)g(letters,)479
-2277 y(digits,)h(.,)h(:,)f(-,)g(_)h(in)f(arbitrary)f(order)-5
-b(.)p Black 396 2385 a Ft(\225)p Black 60 w Fq(NMTOKENS)p
-Fv(:)20 b(A)g(space-separated)f(list)i(of)f(nametok)o(ens)e(is)k(allo)n
-(wed)d(as)i(attrib)n(ute)f(v)n(alue.)396 2534 y(The)g(most)g
-(interesting)g(def)o(ault)f(declarations)g(are:)p Black
-396 2767 a Ft(\225)p Black 60 w Fq(#REQUIRED)p Fv(:)h(The)f(attrib)n
-(ute)h(must)g(be)h(speci\002ed.)p Black 396 2874 a Ft(\225)p
-Black 60 w Fq(#IMPLIED)p Fv(:)e(The)h(attrib)n(ute)f(can)g(be)h
-(speci\002ed)f(b)n(ut)h(also)g(can)f(be)h(left)g(out.)f(The)g
-(application)g(can)g(\002nd)g(out)h(whether)479 2982
-y(the)g(attrib)n(ute)g(w)o(as)h(present)f(or)g(not.)p
-Black 396 3090 a Ft(\225)p Black 60 w Fq(")p Fn(value)p
-Fq(")g Fv(or)f Fq(')p Fn(value)p Fq(')p Fv(:)h(This)g(particular)e(v)n
-(alue)i(is)g(used)g(as)h(def)o(ault)e(if)h(the)g(attrib)n(ute)g(is)g
-(omitted)g(in)g(the)g(element.)396 3378 y Fj(Example)479
-3525 y Fi(This)f(is)f(a)h(v)n(alid)g(attrib)o(ute)g(declaration)g(for)g
-(element)g(type)h Fh(r)p Fi(:)479 3695 y Fh(<!ATTLIST)44
-b(r)883 3782 y(x)c(CDATA)164 b(#REQUIRED)883 3870 y(y)40
-b(NMTOKEN)84 b(#IMPLIED)883 3957 y(z)40 b(NMTOKENS)k("one)d(two)h
-(three">)479 4137 y Fi(This)19 b(means)g(that)g Fh(x)g
-Fi(is)g(a)g(required)g(attrib)o(ute)f(that)h(cannot)h(be)f(left)g(out,)
-f(while)h Fh(y)g Fi(and)h Fh(z)f Fi(are)g(optional.)g(The)g(XML)g
-(parser)479 4235 y(indicates)h(the)f(application)g(whether)h
-Fh(y)f Fi(is)f(present)i(or)f(not,)f(b)o(ut)h(if)f Fh(z)h
-Fi(is)g(missing)g(the)g(def)o(ault)h(v)n(alue)f("one)h(tw)o(o)f(three")
-h(is)479 4332 y(returned)g(automatically)-5 b(.)479 4470
-y(This)19 b(is)f(a)h(v)n(alid)g(e)o(xample)h(of)f(these)g(attrib)o
-(utes:)479 4641 y Fh(<r)41 b(x="He)h(said:)h(&quot;I)f(don't)g(like)g
-(quotes!&quot;")j(y='1'>)p Black 3798 5278 a Fr(16)p
-Black eop
-%%Page: 17 17
-17 16 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black -2 583 a Fp(1.2.5.)35 b(P)l(ar)n(sed)g(entities)396
-751 y Fv(Elements)20 b(describe)f(the)i(logical)e(structure)h(of)g(the)
-g(document,)e(while)i Fr(entities)g Fv(determine)f(the)h(physical)g
-(structure.)396 859 y(Entities)h(are)f(the)g(pieces)g(of)g(te)o(xt)g
-(the)g(parser)g(operates)f(on,)h(mostly)g(\002les)h(and)f(macros.)f
-(Entities)h(may)g(be)g Fr(par)o(sed)i Fv(in)396 967 y(which)e(case)h
-(the)f(parser)f(reads)h(the)g(te)o(xt)h(and)e(interprets)g(it)i(as)g
-(XML)g(markup,)d(or)i Fr(unpar)o(sed)h Fv(which)e(simply)h(means)396
-1075 y(that)h(the)f(data)g(of)g(the)g(entity)g(has)g(a)h(foreign)d
-(format)h(\(e.g.)h(a)g(GIF)h(icon\).)396 1224 y(If)f(the)g(parsed)f
-(entity)g(is)i(going)e(to)h(be)g(used)f(as)i(part)e(of)h(the)g(DTD,)g
-(it)g(is)h(called)f(a)g Fr(par)o(ameter)f(entity)p Fv(.)h(Y)-9
-b(ou)19 b(can)h(declare)396 1332 y(a)h(parameter)e(entity)g(with)i(a)f
-(\002x)o(ed)g(te)o(xt)g(as)h(content)e(by:)396 1512 y
-Fo(<)p Fq(!ENTITY)44 b(\045)g Fn(name)g Fq(")p Fn(value)p
-Fq(")p Fo(>)396 1703 y Fv(W)m(ithin)20 b(the)h(DTD,)f(you)f(can)h
-Fr(r)m(efer)h(to)f Fv(this)h(entity)-5 b(,)19 b(i.e.)i(read)e(the)h(te)
-o(xt)g(of)g(the)h(entity)-5 b(,)19 b(by:)396 1883 y Fq(\045)p
-Fn(name)p Fq(;)396 2074 y Fv(Such)h(entities)h(beha)n(v)o(e)e(lik)o(e)h
-(macros,)f(i.e.)i(when)e(the)o(y)h(are)g(referred)e(to,)i(the)g(macro)g
-(te)o(xt)g(is)h(inserted)e(and)h(read)396 2182 y(instead)g(of)g(the)g
-(original)f(te)o(xt.)396 2478 y Fj(Example)479 2625 y
-Fi(F)o(or)g(e)o(xample,)g(you)h(can)f(declare)h(tw)o(o)f(elements)g
-(with)f(the)h(same)h(content)f(model)h(by:)479 2795 y
-Fh(<!ENTITY)43 b(\045)e(model)h("a)f(|)g(b)g(|)f(c">)479
-2882 y(<!ELEMENT)k(x)c(\(\045model;\)>)479 2970 y(<!ELEMENT)k(y)c
-(\(\045model;\)>)396 3202 y Fv(If)20 b(the)h(contents)e(of)h(the)g
-(entity)g(are)g(gi)n(v)o(en)f(as)i(string)f(constant,)f(the)h(entity)g
-(is)h(called)f(an)g Fr(internal)g Fv(entity)-5 b(.)19
-b(It)i(is)g(also)396 3310 y(possible)f(to)h(name)e(a)i(\002le)g(to)f
-(be)g(used)g(as)h(content)e(\(an)h Fr(e)n(xternal)g Fv(entity\):)396
-3490 y Fo(<)p Fq(!ENTITY)44 b(\045)g Fn(name)g Fq(SYSTEM)g(")p
-Fn(file)g(name)p Fq(")p Fo(>)396 3681 y Fv(There)20 b(are)g(some)g
-(restrictions)f(for)h(parameter)f(entities:)p Black 396
-4038 a Ft(\225)p Black 60 w Fv(If)h(the)h(internal)e(parameter)g
-(entity)g(contains)h(the)g(\002rst)h(tok)o(en)e(of)h(a)h(declaration)e
-(\(i.e.)g Fo(<)p Fq(!)p Fv(\),)h(it)h(must)f(also)h(contain)479
-4146 y(the)f(last)i(tok)o(en)d(of)h(the)g(declaration,)e(i.e.)j(the)f
-Fo(>)p Fv(.)g(This)g(means)g(that)h(the)f(entity)g(either)g(contains)f
-(a)i(whole)e(number)479 4254 y(of)h(complete)f(declarations,)g(or)h
-(some)g(te)o(xt)g(from)f(the)h(middle)g(of)g(one)f(declaration.)479
-4404 y Fr(Ille)m(gal:)479 4542 y Fq(<!ENTITY)44 b(\045)g(e)h("\(a)f(|)h
-(b)g(|)f(c\)>">)479 4639 y(<!ELEMENT)g(x)g(\045e;)479
-4789 y Fv(Because)21 b Fo(<)p Fq(!)f Fv(is)h(contained)e(in)h(the)g
-(main)g(entity)-5 b(,)19 b(and)h(the)g(corresponding)d
-Fo(>)j Fv(is)h(contained)e(in)h(the)h(entity)e Fq(e)p
-Fv(.)p Black 3797 5278 a Fr(17)p Black eop
-%%Page: 18 18
-18 17 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black Black 396 579 a Ft(\225)p Black 60 w Fv(If)f(the)h(internal)e
-(parameter)g(entity)g(contains)h(a)h(left)f(paranthesis,)f(it)i(must)f
-(also)h(contain)e(the)h(corresponding)d(right)479 687
-y(paranthesis.)479 836 y Fr(Ille)m(gal:)479 975 y Fq(<!ENTITY)44
-b(\045)g(e)h("\(a)f(|)h(b)g(|)f(c">)479 1072 y(<!ELEMENT)g(x)g
-(\045e;\)>)479 1222 y Fv(Because)21 b Fq(\()f Fv(is)h(contained)e(in)h
-(the)g(entity)g Fq(e)p Fv(,)h(and)e(the)i(corresponding)16
-b Fq(\))21 b Fv(is)g(contained)e(in)h(the)g(main)g(entity)-5
-b(.)p Black 396 1371 a Ft(\225)p Black 60 w Fv(When)20
-b(reading)e(te)o(xt)i(from)f(an)g(entity)-5 b(,)19 b(the)h(parser)f
-(automatically)f(inserts)i(one)g(space)f(character)g(before)f(the)i
-(entity)479 1479 y(te)o(xt)g(and)g(one)g(space)g(character)f(after)h
-(the)g(entity)g(te)o(xt.)f(Ho)n(we)n(v)o(er)m(,)f(this)j(rule)f(is)h
-(not)f(applied)f(within)h(the)g(de\002nition)479 1587
-y(of)g(another)f(entity)-5 b(.)479 1736 y Fr(Le)m(gal:)479
-1875 y Fq(<!ENTITY)44 b(\045)g(suffix)g("gif">)479 1972
-y(<!ENTITY)g(iconfile)f('icon.\045suffix;'>)479 2121
-y Fv(Because)21 b Fq(\045suffix;)e Fv(is)i(referenced)d(within)i(the)g
-(de\002nition)f(te)o(xt)h(for)g Fq(iconfile)p Fv(,)f(no)h(additional)f
-(spaces)h(are)479 2229 y(added.)479 2379 y Fr(Ille)m(gal:)479
-2517 y Fq(<!ENTITY)44 b(\045)g(suffix)g("test">)479 2615
-y(<!ELEMENT)g(x.\045suffix;)f(ANY>)479 2764 y Fv(Because)21
-b Fq(\045suffix;)e Fv(is)i(referenced)d(outside)i(the)g(de\002nition)f
-(te)o(xt)h(of)g(another)f(entity)-5 b(,)19 b(the)h(parser)g(replaces)
-479 2872 y Fq(\045suffix;)g Fv(by)f Fn(space)p Fq(test)p
-Fn(space)p Fv(.)479 3021 y Fr(Ille)m(gal:)479 3160 y
-Fq(<!ENTITY)44 b(\045)g(e)h("\(a)f(|)h(b)g(|)f(c\)">)479
-3257 y(<!ELEMENT)g(x)g(\045e;*>)479 3407 y Fv(Because)21
-b(there)e(is)j(a)e(whitespace)g(between)f Fq(\))i Fv(and)e
-Fq(*)p Fv(,)i(which)e(is)i(ille)o(gal.)p Black 396 3556
-a Ft(\225)p Black 60 w Fv(An)f(e)o(xternal)f(parameter)g(entity)h(must)
-g(al)o(w)o(ays)h(consist)f(of)g(a)h(whole)e(number)g(of)h(complete)f
-(declarations.)p Black 396 3664 a Ft(\225)p Black 60
-w Fv(In)h(the)g(internal)g(subset)g(of)g(the)g(DTD,)g(a)h(reference)d
-(to)j(a)f(parameter)f(entity)h(\(internal)f(or)h(e)o(xternal\))e(is)k
-(only)479 3772 y(allo)n(wed)e(at)h(positions)e(where)h(a)g(ne)n(w)g
-(declaration)f(can)h(start.)396 3963 y(If)g(the)f(parsed)g(entity)g(is)
-h(going)e(to)i(be)f(used)g(in)h(the)f(document)e(instance,)i(it)h(is)h
-(called)e(a)h Fr(g)o(ener)o(al)e(entity)p Fv(.)h(Such)g(entities)396
-4071 y(can)h(be)g(used)g(as)h(abbre)n(viations)d(for)i(frequent)e
-(phrases,)i(or)g(to)g(include)f(e)o(xternal)g(\002les.)i(Internal)e
-(general)g(entities)i(are)396 4179 y(declared)e(as)i(follo)n(ws:)396
-4359 y Fo(<)p Fq(!ENTITY)44 b Fn(name)g Fq(")p Fn(value)p
-Fq(")p Fo(>)396 4550 y Fv(External)19 b(general)g(entities)i(are)f
-(declared)f(this)i(w)o(ay:)396 4730 y Fo(<)p Fq(!ENTITY)44
-b Fn(name)g Fq(SYSTEM)g(")p Fn(file)g(name)p Fq(")p Fo(>)p
-Black 3800 5278 a Fr(18)p Black eop
-%%Page: 19 19
-19 18 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black 396 579 a Fv(References)f(to)g(general)f(entities)i(are)f
-(written)g(as:)396 759 y Fq(&)p Fn(name)p Fq(;)396 950
-y Fv(The)g(main)g(dif)n(ference)e(between)h(parameter)g(and)h(general)f
-(entities)h(is)i(that)e(the)g(former)f(are)h(only)f(recognized)f(in)j
-(the)396 1058 y(DTD)g(and)e(that)i(the)f(latter)g(are)g(only)g
-(recognized)e(in)i(the)g(document)e(instance.)i(As)h(the)f(DTD)g(is)i
-(parsed)d(before)g(the)396 1166 y(document,)f(the)i(parameter)f
-(entities)i(are)f(e)o(xpanded)d(\002rst;)k(for)f(e)o(xample)f(it)i(is)g
-(possible)f(to)g(use)h(the)f(content)f(of)h(a)396 1274
-y(parameter)f(entity)h(as)h(the)f(name)g(of)f(a)i(general)e(entity:)h
-Fq(&#38;\045name;;)2557 1241 y Ff(1)2580 1274 y Fv(.)396
-1423 y(General)g(entities)g(must)h(respect)e(the)i(element)e(hierarchy)
--5 b(.)17 b(This)k(means)f(that)g(there)g(must)g(be)g(an)g(end)g(tag)g
-(for)g(e)n(v)o(ery)396 1531 y(start)h(tag)f(in)h(the)f(entity)g(v)n
-(alue,)f(and)h(that)g(end)f(tags)i(without)e(corresponding)e(start)k
-(tags)f(are)g(not)g(allo)n(wed.)396 1777 y Fj(Example)479
-1924 y Fi(If)f(the)f(author)i(of)f(a)f(document)j(changes)f(sometimes,)
-f(it)f(is)g(w)o(orthwhile)h(to)g(set)f(up)i(a)e(general)i(entity)e
-(containing)i(the)f(names)479 2021 y(of)g(the)g(authors.)h(If)e(the)h
-(author)h(changes,)g(you)f(need)h(only)g(to)e(change)j(the)e
-(de\002nition)g(of)g(the)g(entity)-5 b(,)18 b(and)i(do)f(not)h(need)f
-(to)479 2118 y(check)h(all)f(occurrences)h(of)f(authors')h(names:)479
-2289 y Fh(<!ENTITY)43 b(authors)g("Gerd)f(Stolpmann">)479
-2469 y Fi(In)19 b(the)g(document)i(te)o(xt,)d(you)i(can)f(no)n(w)h
-(refer)e(to)h(the)g(author)h(names)f(by)h(writing)e Fh(&authors;)p
-Fi(.)479 2607 y Fe(Ille)m(gal:)h Fi(The)g(follo)n(wing)g(tw)o(o)g
-(entities)g(are)g(ille)o(gal)f(because)i(the)f(elements)g(in)g(the)g
-(de\002nition)g(do)g(not)h(nest)f(properly:)479 2778
-y Fh(<!ENTITY)43 b(lengthy-tag)i("<section)e(textcolor='white')j
-(background='graphi)q(c'>)q(">)479 2865 y(<!ENTITY)d(nonsense)165
-b("<a></b>">)396 3139 y Fv(Earlier)20 b(in)g(this)h(introduction)d(we)i
-(e)o(xplained)e(that)j(there)e(are)i(substitutes)f(for)g(reserv)o(ed)e
-(characters:)i(&lt;,)g(&gt;,)396 3247 y(&amp;,)f(&apos;,)h(and)f
-(&quot;.)g(These)h(are)g(simply)g(prede\002ned)e(general)h(entities;)i
-(note)f(that)g(the)o(y)g(are)g(the)g(only)396 3355 y(prede\002ned)e
-(entities.)j(It)f(is)h(allo)n(wed)f(to)g(de\002ne)g(these)g(entities)h
-(again)e(as)i(long)e(as)i(the)f(meaning)f(is)i(unchanged.)-2
-3725 y Fp(1.2.6.)35 b(Notations)g(and)e(unpar)n(sed)i(entities)396
-3892 y Fv(Unparsed)19 b(entities)i(ha)n(v)o(e)e(a)i(foreign)d(format)i
-(and)f(can)h(thus)g(not)g(be)g(read)g(by)g(the)g(XML)g(parser)-5
-b(.)20 b(Unparsed)f(entities)396 4000 y(are)h(al)o(w)o(ays)h(e)o
-(xternal.)e(The)h(format)f(of)h(an)g(unparsed)e(entity)i(must)g(ha)n(v)
-o(e)g(been)f(declared,)g(such)h(a)h(format)e(is)i(called)f(a)396
-4108 y Fr(notation)p Fv(.)f(The)g(entity)h(can)g(then)g(be)g(declared)f
-(by)h(referring)e(to)i(this)h(notation.)e(As)i(unparsed)d(entities)j
-(do)f(not)396 4216 y(contain)f(XML)i(te)o(xt,)e(it)i(is)h(not)d
-(possible)h(to)h(include)e(them)h(directly)f(into)h(the)g(document;)e
-(you)i(can)g(only)f(declare)396 4324 y(attrib)n(utes)h(such)g(that)h
-(names)e(of)h(unparsed)f(entities)h(are)h(acceptable)e(v)n(alues.)396
-4474 y(As)i(you)f(can)g(see,)g(unparsed)f(entities)h(are)g(too)g
-(complicated)f(in)h(order)f(to)h(ha)n(v)o(e)g(an)o(y)f(purpose.)g(It)h
-(is)h(almost)f(al)o(w)o(ays)396 4581 y(better)g(to)g(simply)g(pass)h
-(the)f(name)g(of)g(the)g(data)g(\002le)h(as)g(normal)e(attrib)n(ute)g
-(v)n(alue,)h(and)f(let)i(the)f(application)f(recognize)396
-4689 y(and)h(process)g(the)g(foreign)e(format.)p Black
-3800 5278 a Fr(19)p Black eop
-%%Page: 20 20
-20 19 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black -2 597 a Fx(1.3.)39 b(A)g(complete)f(e)n(xample:)g(The)h
-Fd(readme)k Fx(DTD)396 777 y Fv(The)20 b(reason)g(for)f
-Fr(r)m(eadme)h Fv(w)o(as)h(that)f(I)g(often)g(wrote)g(tw)o(o)g(v)o
-(ersions)f(of)h(\002les)h(such)f(as)h(README)g(and)e(INST)-8
-b(ALL)396 885 y(which)20 b(e)o(xplain)f(aspects)h(of)g(a)h(distrib)n
-(uted)e(softw)o(are)h(archi)n(v)o(e;)f(one)g(v)o(ersion)g(w)o(as)i
-(ASCII-formatted,)d(the)i(other)g(w)o(as)396 993 y(written)g(in)h
-(HTML.)e(Maintaining)g(both)g(v)o(ersions)h(means)f(double)g(amount)g
-(of)h(w)o(ork,)f(and)h(changes)f(of)h(one)f(v)o(ersion)396
-1101 y(may)h(be)g(for)o(gotten)e(in)i(the)g(other)f(v)o(ersion.)g(T)-7
-b(o)20 b(impro)o(v)o(e)e(this)j(situation)e(I)i(in)m(v)o(ented)d(the)i
-Fr(r)m(eadme)g Fv(DTD)g(which)f(allo)n(ws)396 1209 y(me)h(to)h
-(maintain)e(only)h(one)f(source)h(written)g(as)g(XML)h(document,)d(and)
-h(to)i(generate)e(the)h(ASCII)g(and)g(the)g(HTML)396
-1317 y(v)o(ersion)f(from)g(it.)396 1466 y(In)h(this)h(section,)f(I)g(e)
-o(xplain)f(only)g(the)i(DTD.)f(The)f Fr(r)m(eadme)h Fv(DTD)h(is)g
-(contained)d(in)j(the)f(PXP)h(distrib)n(ution)e(together)396
-1574 y(with)i(the)f(tw)o(o)g(con)m(v)o(erters)e(to)j(produce)d(ASCII)i
-(and)g(HTML.)g(Another)e(section)i(of)g(this)h(manual)e(describes)h
-(the)396 1682 y(HTML)g(con)m(v)o(erter)-5 b(.)396 1831
-y(The)20 b(documents)f(ha)n(v)o(e)g(a)i(simple)f(structure:)f(There)h
-(are)g(up)g(to)g(three)g(le)n(v)o(els)g(of)g(nested)g(sections,)g
-(paragraphs,)d(item)396 1939 y(lists,)22 b(footnotes,)c(hyperlinks,)g
-(and)h(te)o(xt)h(emphasis.)g(The)g(outermost)f(element)g(has)i(usually)
-e(the)h(type)g Fq(readme)p Fv(,)g(it)h(is)396 2047 y(declared)e(by)396
-2228 y Fq(<!ELEMENT)44 b(readme)f(\(sect1+\)>)396 2325
-y(<!ATTLIST)h(readme)845 2422 y(title)g(CDATA)g(#REQUIRED>)396
-2613 y Fv(This)21 b(means)f(that)g(this)h(element)e(contains)h(one)f
-(or)h(more)f(sections)i(of)f(the)g(\002rst)h(le)n(v)o(el)f(\(element)f
-(type)h Fq(sect1)p Fv(\),)f(and)396 2721 y(that)i(the)f(element)f(has)i
-(a)f(required)f(attrib)n(ute)h Fq(title)f Fv(containing)g(character)g
-(data)h(\(CD)m(A)-9 b(T)h(A\).)19 b(Note)h(that)h Fq(readme)396
-2829 y Fv(elements)f(must)g(not)g(contain)f(te)o(xt)h(data.)396
-2978 y(The)g(three)g(le)n(v)o(els)g(of)g(sections)g(are)g(declared)f
-(as)i(follo)n(ws:)396 3158 y Fq(<!ELEMENT)44 b(sect1)g
-(\(title,\(sect2|p|ul\)+\)>)396 3352 y(<!ELEMENT)g(sect2)g
-(\(title,\(sect3|p|ul\)+\)>)396 3547 y(<!ELEMENT)g(sect3)g
-(\(title,\(p|ul\)+\)>)396 3738 y Fv(Ev)o(ery)19 b(section)h(has)g(a)h
-Fq(title)f Fv(element)g(as)g(\002rst)h(subelement.)e(After)h(the)g
-(title)h(an)f(arbitrary)f(b)n(ut)h(non-empty)396 3846
-y(sequence)f(of)h(inner)g(sections,)g(paragraphs)e(and)h(item)i(lists)g
-(follo)n(ws.)f(Note)g(that)g(the)g(inner)g(sections)g(must)g(belong)f
-(to)396 3954 y(the)h(ne)o(xt)g(higher)f(section)h(le)n(v)o(el;)g
-Fq(sect3)g Fv(elements)f(must)i(not)f(contain)f(inner)g(sections)h
-(because)g(there)g(is)h(no)e(ne)o(xt)396 4061 y(higher)g(le)n(v)o(el.)
-396 4211 y(Ob)o(viously)-5 b(,)18 b(all)j(three)f(declarations)e(allo)n
-(w)j(paragraphs)d(\()p Fq(p)p Fv(\))h(and)h(item)g(lists)i(\()p
-Fq(ul)p Fv(\).)e(The)f(de\002nition)g(can)h(be)396 4319
-y(simpli\002ed)g(at)h(this)g(point)e(by)h(using)f(a)i(parameter)e
-(entity:)396 4499 y Fq(<!ENTITY)44 b(\045)g(p.like)g("p|ul">)396
-4693 y(<!ELEMENT)g(sect1)g(\(title,\(sect2|\045p.like;\)+\)>)p
-Black 3800 5278 a Fr(20)p Black eop
-%%Page: 21 21
-21 20 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black 396 579 a Fq(<!ELEMENT)44 b(sect2)g
-(\(title,\(sect3|\045p.like;\)+\)>)396 773 y(<!ELEMENT)g(sect3)g
-(\(title,\(\045p.like;\)+\)>)396 964 y Fv(Here,)20 b(the)g(entity)g
-Fq(p.like)g Fv(is)h(nothing)e(b)n(ut)h(a)g(macro)g(abbre)n(viating)d
-(the)j(same)h(sequence)e(of)h(declarations;)f(if)h(ne)n(w)396
-1072 y(elements)f(on)h(the)f(same)h(le)n(v)o(el)f(as)h
-Fq(p)g Fv(and)f Fq(ul)h Fv(are)f(later)h(added,)e(it)i(is)h(suf)n
-(\002cient)e(only)f(to)i(change)e(the)i(entity)f(de\002nition.)396
-1180 y(Note)h(that)h(there)e(are)i(some)f(restrictions)f(on)h(the)g
-(usage)g(of)g(entities)h(in)f(this)h(conte)o(xt;)e(most)h(important,)e
-(entities)396 1288 y(containing)h(a)h(left)h(paranthesis)e(must)h(also)
-h(contain)e(the)h(corresponding)d(right)i(paranthesis.)396
-1437 y(Note)h(that)h(the)f(entity)g Fq(p.like)g Fv(is)h(a)f
-Fr(par)o(ameter)i Fv(entity)-5 b(,)19 b(i.e.)h(the)g(ENTITY)g
-(declaration)e(contains)i(a)g(percent)f(sign,)396 1545
-y(and)h(the)g(entity)g(is)h(referred)e(to)h(by)g Fq(\045p.like;)p
-Fv(.)f(This)h(kind)g(of)f(entity)h(must)h(be)f(used)g(to)g(abbre)n
-(viate)e(parts)j(of)f(the)396 1653 y(DTD;)g(the)g Fr(g)o(ener)o(al)f
-Fv(entities)h(declared)e(without)h(percent)g(sign)h(and)f(referred)f
-(to)i(as)g Fq(&name;)f Fv(are)h(not)f(allo)n(wed)g(in)h(this)396
-1761 y(conte)o(xt.)396 1911 y(The)g Fq(title)g Fv(element)g
-(speci\002es)g(the)h(title)f(of)g(the)h(section)f(in)g(which)g(it)g
-(occurs.)g(The)f(title)i(is)h(gi)n(v)o(en)c(as)j(character)396
-2019 y(data,)f(optionally)f(interspersed)f(with)j(line)f(breaks)g(\()p
-Fq(br)p Fv(\):)396 2199 y Fq(<!ELEMENT)44 b(title)g(\(#PCDATA|br\)*>)
-396 2390 y Fv(Compared)19 b(with)h(the)g Fq(title)g Fr(attrib)n(ute)g
-Fv(of)g(the)h Fq(readme)e Fv(element,)h(this)g(element)g(allo)n(ws)g
-(inner)g(markup)e(\(i.e.)i Fq(br)p Fv(\))396 2498 y(while)g(attrib)n
-(ute)g(v)n(alues)g(do)g(not:)g(It)g(is)h(an)g(error)e(if)h(an)g(attrib)
-n(ute)g(v)n(alue)g(contains)f(the)h(left)h(angle)e(brack)o(et)g
-Fm(<)i Fv(literally)396 2605 y(such)f(that)g(it)h(is)h(impossible)d(to)
-h(include)g(inner)f(elements.)396 2755 y(The)h(paragraph)e(element)h
-Fq(p)i Fv(has)f(a)h(structure)e(similar)i(to)f Fq(title)p
-Fv(,)g(b)n(ut)g(it)h(allo)n(ws)f(more)g(inner)f(elements:)396
-2935 y Fq(<!ENTITY)44 b(\045)g(text)h("br|code|em|footnote|a">)396
-3129 y(<!ELEMENT)f(p)g(\(#PCDATA|\045text;\)*>)396 3320
-y Fv(Line)20 b(breaks)g(do)f(not)h(ha)n(v)o(e)g(inner)f(structure,)g
-(so)i(the)o(y)e(are)h(declared)f(as)i(being)e(empty:)396
-3500 y Fq(<!ELEMENT)44 b(br)g(EMPTY>)396 3691 y Fv(This)21
-b(means)f(that)g(really)g(nothing)e(is)j(allo)n(wed)f(within)g
-Fq(br)p Fv(;)g(you)f(must)i(al)o(w)o(ays)f(write)h Fq(<br></br>)e
-Fv(or)h(abbre)n(viated)396 3799 y Fq(<br/>)p Fv(.)396
-3949 y(Code)g(samples)h(should)e(be)h(mark)o(ed)f(up)h(by)f(the)h
-Fq(code)h Fv(tag;)f(emphasized)f(te)o(xt)h(can)g(be)g(indicated)f(by)h
-Fq(em)p Fv(:)396 4129 y Fq(<!ELEMENT)44 b(code)g(\(#PCDATA\)>)396
-4323 y(<!ELEMENT)g(em)g(\(#PCDATA|\045text;\)*>)396 4514
-y Fv(That)20 b Fq(code)g Fv(elements)g(are)g(not)g(allo)n(wed)g(to)g
-(contain)f(further)g(markup)f(while)i Fq(em)h Fv(elements)f(do)g(is)h
-(a)f(design)g(decision)396 4622 y(by)g(the)g(author)f(of)h(the)g(DTD.)
-396 4772 y(Unordered)e(lists)k(simply)d(consists)i(of)f(one)g(or)g
-(more)f(list)i(items,)g(and)e(a)i(list)g(item)g(may)e(contain)g
-(paragraph-le)n(v)o(el)396 4879 y(material:)p Black 3800
-5278 a Fr(21)p Black eop
-%%Page: 22 22
-22 21 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black 396 579 a Fq(<!ELEMENT)44 b(ul)g(\(li+\)>)396 773
-y(<!ELEMENT)g(li)g(\(\045p.like;\)*>)396 964 y Fv(F)o(ootnotes)19
-b(are)h(described)f(by)h(the)g(te)o(xt)g(of)g(the)g(note;)g(this)h(te)o
-(xt)f(may)g(contain)f(te)o(xt-le)n(v)o(el)g(markup.)f(There)h(is)i(no)
-396 1072 y(mechanism)e(to)i(describe)e(the)h(numbering)e(scheme)h(of)h
-(footnotes,)f(or)h(to)g(specify)g(ho)n(w)f(footnote)g(references)f(are)
-396 1180 y(printed.)396 1360 y Fq(<!ELEMENT)44 b(footnote)f
-(\(#PCDATA|\045text;\)*>)396 1551 y Fv(Hyperlinks)19
-b(are)h(written)g(as)h(in)f(HTML.)g(The)g(anchor)f(tag)h(contains)f
-(the)h(te)o(xt)g(describing)f(where)h(the)g(link)g(points)g(to,)396
-1659 y(and)g(the)g Fq(href)g Fv(attrib)n(ute)g(is)h(the)f(pointer)f
-(\(as)i(URL\).)f(There)f(is)j(no)d(w)o(ay)i(to)f(describe)f(locations)h
-(of)g("hash)g(marks".)f(If)396 1767 y(the)h(link)g(refers)g(to)g
-(another)f Fr(r)m(eadme)h Fv(document,)e(the)i(attrib)n(ute)g
-Fq(readmeref)f Fv(should)g(be)h(used)g(instead)g(of)g
-Fq(href)p Fv(.)396 1875 y(The)g(reason)g(is)h(that)f(the)g(con)m(v)o
-(erted)e(document)g(has)i(usually)g(a)h(dif)n(ferent)d(system)i
-(identi\002er)g(\(\002le)h(name\),)d(and)i(the)396 1983
-y(link)g(to)h(a)f(con)m(v)o(erted)e(document)g(must)i(be)g(con)m(v)o
-(erted,)e(too.)396 2163 y Fq(<!ELEMENT)44 b(a)g(\(#PCDATA\)*>)396
-2260 y(<!ATTLIST)g(a)845 2357 y(href)268 b(CDATA)44 b(#IMPLIED)845
-2454 y(readmeref)f(CDATA)h(#IMPLIED)396 2552 y(>)396
-2742 y Fv(Note)20 b(that)h(although)d(it)j(is)g(only)e(sensible)i(to)f
-(specify)g(one)f(of)h(the)g(tw)o(o)h(attrib)n(utes,)f(the)g(DTD)g(has)h
-(no)e(means)h(to)396 2850 y(e)o(xpress)g(this)g(restriction.)396
-3000 y(So)h(f)o(ar)f(the)g(DTD.)g(Finally)-5 b(,)19 b(here)h(is)h(a)g
-(document)d(for)i(it:)396 3180 y Fq(<?xml)44 b(version="1.0")f
-(encoding="ISO-8859-1"?>)396 3277 y(<!DOCTYPE)h(readme)f(SYSTEM)h
-("readme.dtd">)396 3374 y(<readme)g(title="How)f(to)i(use)f(the)g
-(readme)g(converters">)396 3471 y(<sect1>)486 3569 y
-(<title>Usage</title>)486 3666 y(<p>)576 3763 y(The)g(<em>readme</em>)e
-(converter)i(is)g(invoked)g(on)g(the)h(command)e(line)h(by:)486
-3860 y(</p>)486 3957 y(<p>)576 4054 y(<code>readme)e([)j(-text)f(|)h
-(-html)f(])g(input.xml</code>)486 4151 y(</p>)486 4248
-y(<p>)576 4346 y(Here)g(a)g(list)h(of)f(options:)486
-4443 y(</p>)486 4540 y(<ul>)576 4637 y(<li>)665 4734
-y(<p><code>-)396 4831 y(text</code>:)f(specifies)g(that)i(ASCII)f
-(output)f(should)h(be)h(produced</p>)p Black 3800 5278
-a Fr(22)p Black eop
-%%Page: 23 23
-23 22 bop Black 3028 67 a Fr(Chapter)19 b(1.)h(What)h(is)g(XML?)p
-Black 576 579 a Fq(</li>)576 676 y(<li>)665 773 y(<p><code>-)396
-870 y(html</code>:)43 b(specifies)g(that)i(HTML)f(output)g(should)f(be)
-i(produced</p>)576 967 y(</li>)486 1065 y(</ul>)486 1162
-y(<p>)576 1259 y(The)f(input)g(file)g(must)g(be)h(given)f(on)g(the)h
-(command)e(line.)h(The)h(converted)e(output)h(is)576
-1356 y(printed)f(to)i(<em>stdout</em>.)486 1453 y(</p>)396
-1550 y(</sect1>)396 1647 y(<sect1>)486 1745 y(<title>Author</title>)486
-1842 y(<p>)576 1939 y(The)f(program)g(has)g(been)g(written)g(by)576
-2036 y(<a)g(href="mailto:Gerd.Stolpmann@darmstadt.ne)o(tsurf.)o(de">Ge)
-o(rd)39 b(Stolpmann</a>.)486 2133 y(</p>)396 2230 y(</sect1>)396
-2327 y(</readme>)-2 2746 y Fx(Notes)p Black 396 2926
-a Fv(1.)p Black 70 w(This)20 b(construct)g(is)h(only)e(allo)n(wed)h
-(within)g(the)g(de\002nition)f(of)h(another)e(entity;)i(otherwise)g(e)o
-(xtra)f(spaces)i(w)o(ould)529 3034 y(be)f(added)f(\(as)i(e)o(xplained)d
-(abo)o(v)o(e\).)g(Such)i(indirection)e(is)j(not)f(recommended.)529
-3172 y Fi(Complete)f(e)o(xample:)529 3343 y Fh(<!ENTITY)43
-b(\045)e(variant)i("a">)243 b(<!-)42 b(or)f("b")g(->)529
-3430 y(<!ENTITY)i(text-a)g("This)f(is)f(text)h(A.">)529
-3518 y(<!ENTITY)h(text-b)g("This)f(is)f(text)h(B.">)529
-3605 y(<!ENTITY)h(text)f("&#38;text-\045variant)q(;;")q(>)529
-3785 y Fi(Y)-8 b(ou)19 b(can)h(no)n(w)f(write)f Fh(&text;)j
-Fi(in)e(the)g(document)h(instance,)f(and)h(depending)h(on)e(the)g(v)n
-(alue)g(of)g Fh(variant)i Fi(either)e Fh(text-a)i Fi(or)529
-3882 y Fh(text-b)g Fi(is)d(inserted.)p Black 3800 5278
-a Fr(23)p Black eop
-%%Page: 24 24
-24 23 bop Black Black -2 621 a Fs(Chapter)48 b(2.)f(Using)i(PXP)-2
-1055 y Fx(2.1.)39 b(V)-9 b(alidation)396 1235 y Fv(The)20
-b(parser)g(can)g(be)g(used)g(to)g Fr(validate)f Fv(a)i(document.)d
-(This)i(means)g(that)g(all)h(the)f(constraints)g(that)g(must)g(hold)g
-(for)f(a)396 1343 y(v)n(alid)h(document)e(are)i(actually)g(check)o(ed.)
-f(V)-9 b(alidation)19 b(is)i(the)f(def)o(ault)f(mode)h(of)g(PXP,)g
-(i.e.)h(e)n(v)o(ery)d(document)h(is)396 1451 y(v)n(alidated)g(while)i
-(it)f(is)i(being)d(parsed.)396 1600 y(In)h(the)g Fq(examples)g
-Fv(directory)e(of)i(the)g(distrib)n(ution)f(you)h(\002nd)g(the)g
-Fq(pxpvalidate)f Fv(application.)f(It)j(is)g(in)m(v)n(ok)o(ed)d(in)j
-(the)396 1708 y(follo)n(wing)e(w)o(ay:)396 1888 y Fq(pxpvalidate)43
-b([)i(-wf)f(])h Fn(file)p Fq(...)396 2079 y Fv(The)20
-b(\002les)h(mentioned)e(on)g(the)i(command)d(line)i(are)g(v)n
-(alidated,)f(and)h(e)n(v)o(ery)e(w)o(arning)h(and)h(e)n(v)o(ery)f
-(error)g(messages)h(are)396 2187 y(printed)f(to)i(stderr)-5
-b(.)396 2337 y(The)20 b(-wf)g(switch)h(modi\002es)e(the)i(beha)n(viour)
-d(such)i(that)g(a)h(well-formedness)d(parser)h(is)i(simulated.)f(In)g
-(this)g(mode,)f(the)396 2445 y(ELEMENT)-6 b(,)19 b(A)-9
-b(TTLIST)j(,)19 b(and)g(NO)m(T)-8 b(A)f(TION)20 b(declarations)f(of)h
-(the)g(DTD)g(are)g(ignored,)e(and)i(only)f(the)i(ENTITY)396
-2553 y(declarations)e(will)i(tak)o(e)f(ef)n(fect.)g(This)g(mode)f(is)i
-(intended)e(for)h(documents)e(lacking)h(a)i(DTD.)f(Please)h(note)f
-(that)g(the)396 2661 y(parser)g(still)h(scans)g(the)f(DTD)g(fully)g
-(and)g(will)h(report)e(all)h(errors)g(in)g(the)g(DTD;)h(such)f(checks)f
-(are)h(not)g(required)f(by)g(a)396 2769 y(well-formedness)f(parser)-5
-b(.)396 2918 y(The)20 b Fq(pxpvalidate)f Fv(application)g(is)i(the)f
-(simplest)h(sensible)f(program)e(using)i(PXP,)g(you)g(may)f(consider)g
-(it)i(as)396 3026 y("hello)f(w)o(orld")f(program.)-2
-3445 y Fx(2.2.)39 b(Ho)n(w)g(to)g(par)n(se)f(a)i(document)d(fr)m(om)i
-(an)g(application)396 3624 y Fv(Let)21 b(me)f(\002rst)h(gi)n(v)o(e)e(a)
-i(rough)d(o)o(v)o(ervie)n(w)g(of)i(the)h(object)e(model)g(of)h(the)h
-(parser)-5 b(.)19 b(The)h(follo)n(wing)f(items)h(are)h(represented)396
-3732 y(by)f(objects:)p Black 396 4055 a Ft(\225)p Black
-60 w Fr(Documents:)f Fv(The)h(document)e(representation)g(is)j(more)e
-(or)h(less)h(the)f(anchor)f(for)g(the)h(application;)f(all)i(accesses)g
-(to)479 4163 y(the)f(parsed)g(entities)h(start)f(here.)g(It)g(is)h
-(described)e(by)h(the)g(class)h Fq(document)f Fv(contained)e(in)j(the)f
-(module)479 4271 y Fq(Pxp_document)p Fv(.)f(Y)-9 b(ou)19
-b(can)h(get)h(some)f(global)f(information,)e(such)j(as)h(the)f(XML)h
-(declaration)d(the)j(document)479 4379 y(be)o(gins)f(with,)g(the)g(DTD)
-g(of)g(the)g(document,)e(global)i(processing)e(instructions,)h(and)h
-(most)g(important,)f(the)479 4487 y(document)f(tree.)p
-Black 396 4595 a Ft(\225)p Black 60 w Fr(The)j(contents)e(of)h
-(documents:)f Fv(The)h(contents)f(ha)n(v)o(e)h(the)g(structure)f(of)h
-(a)h(tree:)f(Elements)g(contain)f(other)g(elements)479
-4703 y(and)h(te)o(xt)744 4670 y Ff(1)768 4703 y Fv(.)h(The)e(common)g
-(type)h(to)g(represent)f(both)g(kinds)h(of)g(content)f(is)i
-Fq(node)f Fv(which)g(is)h(a)g(class)g(type)e(that)479
-4811 y(uni\002es)h(the)h(properties)d(of)i(elements)g(and)g(character)f
-(data.)h(Ev)o(ery)e(node)i(has)g(a)h(list)g(of)f(children)f(\(which)g
-(is)i(empty)p Black 3800 5278 a Fr(24)p Black eop
-%%Page: 25 25
-25 24 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 479 579 a Fv(if)h(the)f(element)g(is)h(empty)e(or)h(the)g(node)f
-(represents)h(te)o(xt\);)f(nodes)h(may)g(ha)n(v)o(e)f(attrib)n(utes;)h
-(nodes)g(ha)n(v)o(e)f(al)o(w)o(ays)i(te)o(xt)479 687
-y(contents.)d(There)g(are)g(tw)o(o)h(implementations)e(of)h
-Fq(node)p Fv(,)h(the)f(class)i Fq(element_impl)d Fv(for)h(elements,)g
-(and)g(the)h(class)479 795 y Fq(data_impl)h Fv(for)f(te)o(xt)h(data.)g
-(Y)-9 b(ou)20 b(\002nd)f(these)i(classes)g(and)f(class)h(types)f(in)g
-(the)g(module)f Fq(Pxp_document)p Fv(,)g(too.)479 944
-y(Note)h(that)h(attrib)n(ute)f(lists)h(are)f(represented)f(by)g
-(non-class)h(v)n(alues.)p Black 396 1094 a Ft(\225)p
-Black 60 w Fr(The)h(node)e(e)n(xtension:)g Fv(F)o(or)h(adv)n(anced)e
-(usage,)i(e)n(v)o(ery)e(node)i(of)f(the)i(document)d(may)i(ha)n(v)o(e)f
-(an)h(associated)479 1202 y Fr(e)n(xtension)g Fv(which)g(is)h(simply)f
-(a)g(second)f(object.)h(This)g(object)g(must)g(ha)n(v)o(e)g(the)g
-(three)g(methods)f Fq(clone)p Fv(,)g Fq(node)p Fv(,)h(and)479
-1310 y Fq(set_node)f Fv(as)h(bare)f(minimum,)e(b)n(ut)j(you)e(are)i
-(free)e(to)i(add)f(methods)f(as)i(you)f(w)o(ant.)g(This)g(is)i(the)e
-(preferred)e(w)o(ay)j(to)479 1417 y(add)g(functionality)e(to)i(the)h
-(document)d(tree)1746 1384 y Ff(2)1770 1417 y Fv(.)j(The)e(class)j
-(type)d Fq(extension)h Fv(is)h(de\002ned)e(in)h Fq(Pxp_document)p
-Fv(,)f(too.)p Black 396 1525 a Ft(\225)p Black 60 w Fr(The)i(DTD:)f
-Fv(Sometimes)g(it)h(is)g(necessary)e(to)i(access)f(the)h(DTD)f(of)g(a)h
-(document;)d(the)i(a)n(v)o(erage)f(application)g(does)479
-1633 y(not)h(need)g(this)g(feature.)f(The)h(class)h Fq(dtd)g
-Fv(describes)e(DTDs,)i(and)e(mak)o(es)h(it)h(possible)f(to)h(get)f
-(representations)e(of)479 1741 y(element,)i(entity)-5
-b(,)19 b(and)h(notation)e(declarations)h(as)i(well)g(as)g(processing)e
-(instructions)g(contained)f(in)j(the)f(DTD.)479 1849
-y(This)g(class,)g(and)f Fq(dtd_element)p Fv(,)g Fq(dtd_notation)p
-Fv(,)e(and)i Fq(proc_instruction)f Fv(can)h(be)h(found)e(in)i(the)f
-(module)479 1957 y Fq(Pxp_dtd)p Fv(.)h(There)f(are)h(a)h(couple)e(of)h
-(classes)h(representing)d(dif)n(ferent)h(kinds)g(of)h(entities;)h
-(these)f(can)g(be)g(found)f(in)479 2065 y(the)h(module)f
-Fq(Pxp_entity)p Fv(.)396 2214 y(Additionally)-5 b(,)18
-b(the)i(follo)n(wing)f(modules)g(play)h(a)g(role:)p Black
-396 2447 a Ft(\225)p Black 60 w Fr(Pxp_yacc:)e Fv(Here)i(the)h(main)e
-(parsing)h(functions)e(such)i(as)h Fq(parse_document_entity)c
-Fv(are)k(located.)e(Some)479 2555 y(additional)g(types)h(and)g
-(functions)f(allo)n(w)h(the)g(parser)f(to)i(be)f(con\002gured)e(in)i(a)
-h(non-standard)c(w)o(ay)-5 b(.)p Black 396 2663 a Ft(\225)p
-Black 60 w Fr(Pxp_types:)19 b Fv(This)h(is)h(a)g(collection)e(of)h
-(basic)g(types)g(and)g(e)o(xceptions.)396 2812 y(There)g(are)g(some)g
-(further)e(modules)i(that)g(are)g(needed)f(internally)g(b)n(ut)h(are)g
-(not)g(part)g(of)g(the)g(API.)396 2962 y(Let)h(the)f(document)e(to)i
-(be)h(parsed)e(be)h(stored)g(in)g(a)h(\002le)g(called)f
-Fq(doc.xml)p Fv(.)f(The)h(parsing)f(process)h(is)h(started)f(by)396
-3070 y(calling)g(the)g(function)396 3250 y Fq(val)45
-b(parse_document_entity)c(:)k(config)e(->)i(source)f(->)g('ext)g(spec)h
-(->)f('ext)g(document)396 3441 y Fv(de\002ned)19 b(in)i(the)f(module)f
-Fq(Pxp_yacc)p Fv(.)g(The)h(\002rst)h(ar)o(gument)d(speci\002es)i(some)g
-(global)g(properties)e(of)i(the)g(parser;)g(it)h(is)396
-3549 y(recommended)c(to)j(start)g(with)g(the)g Fq(default_config)p
-Fv(.)e(The)h(second)g(ar)o(gument)e(determines)i(where)g(the)h
-(document)396 3657 y(to)h(be)f(parsed)f(comes)h(from;)f(this)i(may)f
-(be)g(a)g(\002le,)h(a)g(channel,)d(or)i(an)g(entity)g(ID.)g(T)-7
-b(o)21 b(parse)f Fq(doc.xml)p Fv(,)f(it)i(is)g(suf)n(\002cient)396
-3764 y(to)g(pass)f Fq(from_file)44 b("doc.xml")p Fv(.)396
-3914 y(The)20 b(third)g(ar)o(gument)e(passes)i(the)h(object)e
-(speci\002cation)h(to)g(use.)g(Roughly)f(speaking,)g(it)i(determines)e
-(which)g(classes)396 4022 y(implement)g(the)h(node)g(objects)f(of)h
-(which)g(element)g(types,)f(and)h(which)g(e)o(xtensions)f(are)h(to)g
-(be)g(used.)g(The)g Fq('ext)396 4130 y Fv(polymorphic)d(v)n(ariable)i
-(is)j(the)e(type)f(of)h(the)h(e)o(xtension.)d(F)o(or)i(the)g(moment,)f
-(let)i(us)f(simply)g(pass)h Fq(default_spec)d Fv(as)396
-4238 y(this)j(ar)o(gument,)d(and)h(ignore)g(it.)396 4387
-y(So)i(the)f(follo)n(wing)e(e)o(xpression)h(parses)h
-Fq(doc.xml)p Fv(:)396 4567 y Fq(open)44 b(Pxp_yacc)396
-4664 y(let)h(d)f(=)h(parse_document_entity)c(default_config)i
-(\(from_file)g("doc.xml"\))g(de-)396 4762 y(fault_spec)p
-Black 3800 5278 a Fr(25)p Black eop
-%%Page: 26 26
-26 25 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 396 579 a Fv(Note)g(that)h Fq(default_config)d
-Fv(implies)i(that)h(w)o(arnings)e(are)h(collected)g(b)n(ut)g(not)g
-(printed.)e(Errors)h(raise)i(one)f(of)g(the)396 687 y(e)o(xception)f
-(de\002ned)g(in)h Fq(Pxp_types)p Fv(;)f(to)i(get)f(readable)f(errors)g
-(and)h(w)o(arnings)f(catch)h(the)g(e)o(xceptions)f(as)i(follo)n(ws:)396
-867 y Fq(class)44 b(warner)g(=)486 964 y(object)576 1061
-y(method)f(warn)i(w)f(=)665 1158 y(print_endline)f(\("WARNING:)g(")i(^)
-f(w\))486 1256 y(end)396 1353 y(;;)396 1547 y(try)486
-1644 y(let)g(config)g(=)h({)f(default_config)f(with)h(warner)g(=)h(new)
-f(warner)g(})g(in)486 1741 y(let)g(d)h(=)g(parse_document_entity)c
-(config)j(\(from_file)f("doc.xml"\))g(default_spec)486
-1838 y(in)576 1935 y(...)396 2033 y(with)531 2130 y(e)h(->)620
-2227 y(print_endline)f(\(Pxp_types.string_of_exn)e(e\))396
-2418 y Fv(No)n(w)20 b Fq(d)h Fv(is)g(an)f(object)g(of)g(the)g
-Fq(document)f Fv(class.)i(If)f(you)g(w)o(ant)g(the)g(node)f(tree,)h
-(you)g(can)g(get)g(the)g(root)f(element)h(by)396 2598
-y Fq(let)45 b(root)f(=)g(d)h(#)g(root)396 2789 y Fv(and)20
-b(if)g(you)g(w)o(ould)f(rather)h(lik)o(e)g(to)g(access)h(the)f(DTD,)g
-(determine)f(it)i(by)396 2969 y Fq(let)45 b(dtd)f(=)h(d)f(#)h(dtd)396
-3160 y Fv(As)21 b(it)g(is)g(more)f(interesting,)f(let)h(us)h(in)m(v)o
-(estigate)e(the)h(node)f(tree)h(no)n(w)-5 b(.)19 b(Gi)n(v)o(en)g(the)i
-(root)e(element,)g(it)i(is)h(possible)d(to)396 3268 y(recursi)n(v)o
-(ely)f(tra)n(v)o(erse)h(the)h(whole)f(tree.)g(The)g(children)g(of)g(a)h
-(node)f Fq(n)h Fv(are)f(returned)f(by)h(the)h(method)e
-Fq(sub_nodes)p Fv(,)g(and)396 3376 y(the)i(type)g(of)g(a)h(node)e(is)i
-(returned)d(by)i Fq(node_type)p Fv(.)f(This)i(function)d(tra)n(v)o
-(erses)i(the)g(tree,)g(and)g(prints)g(the)g(type)f(of)h(each)396
-3484 y(node:)396 3664 y Fq(let)45 b(rec)f(print_structure)e(n)j(=)486
-3761 y(let)f(ntype)g(=)h(n)g(#)f(node_type)g(in)486 3858
-y(match)g(ntype)g(with)576 3955 y(T_element)f(name)h(->)665
-4053 y(print_endline)f(\("Element)g(of)i(type)f(")h(^)f(name\);)665
-4150 y(let)h(children)e(=)i(n)f(#)h(sub_nodes)e(in)665
-4247 y(List.iter)h(print_structure)e(children)486 4344
-y(|)j(T_data)e(->)665 4441 y(print_endline)g("Data")486
-4538 y(|)i(_)f(->)665 4635 y(\(*)h(Other)f(node)g(types)g(are)g(not)h
-(possible)e(unless)h(the)g(parser)g(is)h(configured)800
-4733 y(differently.)710 4830 y(*\))p Black 3798 5278
-a Fr(26)p Black eop
-%%Page: 27 27
-27 26 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 665 579 a Fq(assert)44 b(false)396 770 y Fv(Y)-9
-b(ou)20 b(can)g(call)g(this)h(function)e(by)396 950 y
-Fq(print_structure)43 b(root)396 1141 y Fv(The)20 b(type)g(returned)e
-(by)i Fq(node_type)f Fv(is)i(either)f Fq(T_element)43
-b(name)21 b Fv(or)e Fq(T_data)p Fv(.)h(The)g Fq(name)g
-Fv(of)g(the)g(element)g(type)396 1249 y(is)h(the)g(string)e(included)g
-(in)i(the)f(angle)f(brack)o(ets.)h(Note)g(that)g(only)f(elements)h(ha)n
-(v)o(e)g(children;)f(data)h(nodes)f(are)h(al)o(w)o(ays)396
-1357 y(lea)n(v)o(es)h(of)e(the)i(tree.)396 1506 y(There)f(are)g(some)g
-(more)f(methods)g(in)i(order)e(to)h(access)h(a)f(parsed)g(node)f(tree:)
-p Black 396 1739 a Ft(\225)p Black 60 w Fq(n)45 b(#)g(parent)p
-Fv(:)19 b(Returns)h(the)h(parent)e(node,)g(or)h(raises)h
-Fq(Not_found)e Fv(if)h(the)g(node)g(is)h(already)e(the)h(root)p
-Black 396 1847 a Ft(\225)p Black 60 w Fq(n)45 b(#)g(root)p
-Fv(:)20 b(Returns)g(the)g(root)g(of)f(the)i(node)e(tree.)p
-Black 396 1955 a Ft(\225)p Black 60 w Fq(n)45 b(#)g(attribute)e(a)p
-Fv(:)21 b(Returns)f(the)g(v)n(alue)f(of)h(the)g(attrib)n(ute)g(with)h
-(name)e Fq(a)p Fv(.)i(The)e(method)g(returns)h(a)g(v)n(alue)g(for)479
-2063 y(e)n(v)o(ery)f Fr(declar)m(ed)j Fv(attrib)n(ute,)d(independently)
-e(of)j(whether)f(the)i(attrib)n(ute)e(instance)h(is)h(de\002ned)e(or)h
-(not.)g(If)g(the)479 2170 y(attrib)n(ute)g(is)h(not)f(declared,)f
-Fq(Not_found)g Fv(will)i(be)f(raised.)g(\(In)f(well-formedness)f(mode,)
-h(e)n(v)o(ery)g(attrib)n(ute)h(is)479 2278 y(considered)f(as)i(being)e
-(implicitly)h(declared)e(with)j(type)f Fq(CDATA)p Fv(.\))479
-2428 y(The)g(follo)n(wing)f(return)g(v)n(alues)g(are)i(possible:)f
-Fq(Value)44 b(s)p Fv(,)20 b Fq(Valuelist)43 b(sl)21 b
-Fv(,)f(and)g Fq(Implied_value)p Fv(.)e(The)i(\002rst)479
-2536 y(tw)o(o)h(v)n(alue)e(types)h(indicate)g(that)g(the)g(attrib)n
-(ute)g(v)n(alue)g(is)h(a)n(v)n(ailable,)e(either)h(because)g(there)f
-(is)i(a)g(de\002nition)479 2644 y Fn(a)p Fq(=")p Fn(value)p
-Fq(")f Fv(in)g(the)g(XML)g(te)o(xt,)g(or)g(because)g(there)f(is)i(a)g
-(def)o(ault)e(v)n(alue)h(\(declared)f(in)h(the)g(DTD\).)g(Only)g(if)g
-(both)479 2752 y(the)g(instance)g(de\002nition)f(and)h(the)g(def)o
-(ault)g(declaration)e(are)i(missing,)g(the)h(latter)f(v)n(alue)f
-Fq(Implied_value)g Fv(will)479 2860 y(be)h(returned.)479
-3009 y(In)g(the)g(DTD,)h(e)n(v)o(ery)d(attrib)n(ute)i(is)h(typed.)e
-(There)h(are)g(single-v)n(alue)e(types)i(\(CD)m(A)-9
-b(T)h(A,)20 b(ID,)g(IDREF)-7 b(,)21 b(ENTITY)-11 b(,)479
-3117 y(NMT)o(OKEN,)19 b(enumerations\),)f(in)i(which)g(case)g(the)h
-(method)d(passes)j Fq(Value)44 b(s)21 b Fv(back,)e(where)h
-Fq(s)g Fv(is)h(the)479 3225 y(normalized)e(string)g(v)n(alue)h(of)g
-(the)g(attrib)n(ute.)g(The)f(other)h(types)g(\(IDREFS,)g(ENTITIES,)f
-(NMT)o(OKENS\))479 3333 y(represent)g(list)j(v)n(alues,)d(and)h(the)g
-(parser)g(splits)h(the)f(XML)g(literal)h(into)e(se)n(v)o(eral)h(tok)o
-(ens)g(and)f(returns)h(these)g(tok)o(ens)479 3441 y(as)h
-Fq(Valuelist)44 b(sl)p Fv(.)479 3590 y(Normalization)19
-b(means)h(that)g(entity)g(references)e(\(the)i Fq(&)p
-Fn(name)p Fq(;)g Fv(tok)o(ens\))f(and)h(character)f(references)479
-3698 y(\()p Fq(&#)p Fn(number)s Fq(;)p Fv(\))g(are)h(replaced)f(by)g
-(the)i(te)o(xt)f(the)o(y)f(represent,)g(and)h(that)g(white)g(space)g
-(characters)f(are)i(con)m(v)o(erted)479 3806 y(into)f(plain)g(spaces.)p
-Black 396 3955 a Ft(\225)p Black 60 w Fq(n)45 b(#)g(data)p
-Fv(:)20 b(Returns)g(the)g(character)f(data)h(contained)f(in)h(the)g
-(node.)f(F)o(or)h(data)g(nodes,)f(the)h(meaning)f(is)i(ob)o(vious)479
-4063 y(as)g(this)g(is)g(the)f(main)g(content)f(of)h(data)g(nodes.)f(F)o
-(or)h(element)g(nodes,)f(this)i(method)e(returns)g(the)h(concatenated)
-479 4171 y(contents)g(of)g(all)g(inner)g(data)g(nodes.)479
-4321 y(Note)g(that)h(entity)f(references)e(included)h(in)h(the)h(te)o
-(xt)f(are)g(resolv)o(ed)f(while)h(the)o(y)f(are)h(being)g(parsed;)f
-(for)h(e)o(xample)479 4429 y(the)g(te)o(xt)h("a)f(&lt;&gt;)g(b")g(will)
-h(be)f(returned)e(as)j("a)g(<>)f(b")g(by)g(this)h(method.)d(Spaces)j
-(of)f(data)g(nodes)f(are)h(al)o(w)o(ays)479 4537 y(preserv)o(ed.)e(Ne)n
-(wlines)j(are)f(preserv)o(ed,)e(b)n(ut)i(al)o(w)o(ays)g(con)m(v)o
-(erted)e(to)i(\\n)h(characters)e(e)n(v)o(en)g(if)i(ne)n(wlines)e(are)i
-(encoded)479 4644 y(as)g(\\r\\n)f(or)g(\\r)-5 b(.)21
-b(Normally)e(you)g(will)i(ne)n(v)o(er)e(see)i(tw)o(o)f(adjacent)f(data)
-i(nodes)e(because)h(the)g(parser)f(collapses)h(all)h(data)479
-4752 y(material)f(at)h(one)e(location)h(into)g(one)f(node.)g(\(Ho)n(we)
-n(v)o(er)m(,)f(if)i(you)g(create)g(your)f(o)n(wn)g(tree)h(or)g
-(transform)f(the)h(parsed)479 4860 y(tree,)g(it)h(is)g(possible)f(to)h
-(ha)n(v)o(e)e(adjacent)h(data)g(nodes.\))p Black 3797
-5278 a Fr(27)p Black eop
-%%Page: 28 28
-28 27 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 479 579 a Fv(Note)g(that)h(elements)f(that)g(do)g
-Fr(not)h Fv(allo)n(w)f(#PCD)m(A)-9 b(T)h(A)20 b(as)h(content)e(will)i
-(not)f(ha)n(v)o(e)g(data)g(nodes)f(as)i(children.)e(This)479
-687 y(means)h(that)g(spaces)h(and)f(ne)n(wlines,)f(the)h(only)g
-(character)f(material)g(allo)n(wed)h(for)g(such)f(elements,)h(are)g
-(silently)479 795 y(dropped.)396 986 y(F)o(or)g(e)o(xample,)e(if)i(the)
-f(task)h(is)h(to)f(print)f(all)h(contents)f(of)g(elements)h(with)f
-(type)h("v)n(aluable")e(whose)h(attrib)n(ute)g("priority")396
-1094 y(is)i("1",)f(this)h(function)d(can)i(help:)396
-1274 y Fq(let)45 b(rec)f(print_valuable_prio1)d(n)k(=)486
-1371 y(let)f(ntype)g(=)h(n)g(#)f(node_type)g(in)486 1468
-y(match)g(ntype)g(with)576 1565 y(T_element)f("valuable")g(when)h(n)h
-(#)g(attribute)e("priority")g(=)i(Value)f("1")g(->)665
-1662 y(print_endline)f("Valuable)g(node)h(with)h(priotity)e(1)i
-(found:";)665 1759 y(print_endline)e(\(n)h(#)h(data\))486
-1857 y(|)g(\(T_element)e(_)h(|)h(T_data\))f(->)665 1954
-y(let)h(children)e(=)i(n)f(#)h(sub_nodes)e(in)665 2051
-y(List.iter)h(print_valuable_prio1)d(children)486 2148
-y(|)k(_)f(->)665 2245 y(assert)g(false)396 2436 y Fv(Y)-9
-b(ou)20 b(can)g(call)g(this)h(function)e(by:)396 2616
-y Fq(print_valuable_prio1)42 b(root)396 2807 y Fv(If)20
-b(you)g(lik)o(e)g(a)h(DSSSL-lik)o(e)f(style,)g(you)g(can)g(mak)o(e)f
-(the)h(function)f Fq(process_children)f Fv(e)o(xplicit:)396
-2987 y Fq(let)45 b(rec)f(print_valuable_prio1)d(n)k(=)486
-3182 y(let)f(process_children)e(n)j(=)576 3279 y(let)f(children)f(=)i
-(n)g(#)f(sub_nodes)g(in)576 3376 y(List.iter)f(print_valuable_prio1)e
-(children)486 3473 y(in)486 3667 y(let)j(ntype)g(=)h(n)g(#)f(node_type)
-g(in)486 3764 y(match)g(ntype)g(with)576 3862 y(T_element)f("valuable")
-g(when)h(n)h(#)g(attribute)e("priority")g(=)i(Value)f("1")g(->)665
-3959 y(print_endline)f("Valuable)g(node)h(with)h(priority)e(1)i
-(found:";)665 4056 y(print_endline)e(\(n)h(#)h(data\))486
-4153 y(|)g(\(T_element)e(_)h(|)h(T_data\))f(->)665 4250
-y(process_children)e(n)486 4347 y(|)j(_)f(->)665 4444
-y(assert)g(false)396 4635 y Fv(So)21 b(f)o(ar)m(,)e(O'Caml)h(is)i(no)n
-(w)d(a)i(simple)f("style-sheet)g(language":)e(Y)-9 b(ou)20
-b(can)g(form)f(a)h(big)g("match")g(e)o(xpression)e(to)396
-4743 y(distinguish)h(between)h(all)h(signi\002cant)e(cases,)i(and)f
-(pro)o(vide)e(dif)n(ferent)g(reactions)i(on)g(dif)n(ferent)e
-(conditions.)h(But)h(this)396 4851 y(technique)f(has)h(limitations;)g
-(the)h("match")e(e)o(xpression)g(tends)h(to)g(get)g(lar)o(ger)f(and)h
-(lar)o(ger)m(,)e(and)i(it)g(is)i(dif)n(\002cult)d(to)i(store)p
-Black 3800 5278 a Fr(28)p Black eop
-%%Page: 29 29
-29 28 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 396 579 a Fv(intermediate)f(v)n(alues)h(as)h(there)e(is)j(only)d
-(one)h(big)f(recursion.)g(Alternati)n(v)o(ely)-5 b(,)18
-b(it)j(is)g(also)f(possible)g(to)h(represent)e(the)396
-687 y(v)n(arious)g(cases)i(as)g(classes,)g(and)f(to)g(use)h(dynamic)d
-(method)h(lookup)g(to)h(\002nd)g(the)g(appropiate)e(class.)j(The)f(ne)o
-(xt)f(section)396 795 y(e)o(xplains)g(this)i(technique)e(in)h(detail.)
--2 1213 y Fx(2.3.)39 b(Class-based)e(pr)m(ocessing)g(of)j(the)f(node)f
-(tree)396 1393 y Fv(By)21 b(def)o(ault,)e(the)h(parsed)g(node)f(tree)h
-(consists)h(of)f(objects)g(of)g(the)g(same)g(class;)h(this)g(is)g(a)g
-(good)e(design)g(as)i(long)e(as)i(you)396 1501 y(w)o(ant)g(only)e(to)h
-(access)h(selected)f(parts)g(of)g(the)h(document.)c(F)o(or)j(comple)o
-(x)f(transformations,)e(it)k(may)f(be)g(better)g(to)g(use)396
-1609 y(dif)n(ferent)f(classes)i(for)f(objects)g(describing)e(dif)n
-(ferent)h(element)g(types.)396 1758 y(F)o(or)h(e)o(xample,)f(if)h(the)g
-(DTD)h(declares)e(the)i(element)e(types)h Fq(a)p Fv(,)h
-Fq(b)p Fv(,)f(and)g Fq(c)p Fv(,)g(and)g(if)g(the)g(task)h(is)g(to)f
-(con)m(v)o(ert)e(an)j(arbitrary)396 1866 y(document)d(into)i(a)h
-(printable)e(format,)g(the)h(idea)g(is)h(to)f(de\002ne)g(for)g(e)n(v)o
-(ery)f(element)g(type)h(a)g(separate)g(class)h(that)g(has)f(a)396
-1974 y(method)f Fq(print)p Fv(.)h(The)g(classes)h(are)f
-Fq(eltype_a)p Fv(,)f Fq(eltype_b)p Fv(,)g(and)h Fq(eltype_c)p
-Fv(,)f(and)h(e)n(v)o(ery)f(class)i(implements)396 2082
-y Fq(print)f Fv(such)g(that)g(elements)g(of)g(the)g(type)g
-(corresponding)d(to)j(the)g(class)i(are)e(con)m(v)o(erted)d(to)k(the)f
-(output)f(format.)396 2232 y(The)h(parser)g(supports)f(such)h(a)g
-(design)g(directly)-5 b(.)19 b(As)i(it)g(is)g(impossible)e(to)i(deri)n
-(v)o(e)d(recursi)n(v)o(e)h(classes)i(in)g(O'Caml)3703
-2198 y Ff(3)3727 2232 y Fv(,)g(the)396 2340 y(specialized)f(element)f
-(classes)j(cannot)d(be)h(formed)f(by)g(simply)h(inheriting)f(from)g
-(the)h(b)n(uilt-in)g(classes)h(of)f(the)g(parser)396
-2447 y(and)g(adding)f(methods)g(for)g(customized)g(functionality)-5
-b(.)18 b(T)-7 b(o)20 b(get)g(around)f(this)h(limitation,)g(e)n(v)o(ery)
-f(node)g(of)h(the)396 2555 y(document)e(tree)j(is)g(represented)d(by)i
-Fr(two)h Fv(objects,)e(one)h(called)g("the)g(node")f(and)h(containing)e
-(the)i(recursi)n(v)o(e)396 2663 y(de\002nition)f(of)h(the)g(tree,)g
-(one)g(called)g("the)g(e)o(xtension".)e(Ev)o(ery)h(node)g(object)h(has)
-g(a)h(reference)e(to)h(the)g(e)o(xtension,)f(and)396
-2771 y(the)h(e)o(xtension)f(has)i(a)f(reference)f(to)h(the)g(node.)f
-(The)h(adv)n(antage)e(of)i(this)h(model)e(is)i(that)g(it)g(is)g(no)n(w)
-e(possible)h(to)396 2879 y(customize)g(the)g(e)o(xtension)f(without)g
-(af)n(fecting)g(the)h(typing)f(constraints)g(of)h(the)h(recursi)n(v)o
-(e)d(node)h(de\002nition.)396 3029 y(Ev)o(ery)g(e)o(xtension)g(must)h
-(ha)n(v)o(e)g(the)g(three)g(methods)f Fq(clone)p Fv(,)g
-Fq(node)p Fv(,)h(and)g Fq(set_node)p Fv(.)f(The)h(method)f
-Fq(clone)h Fv(creates)396 3137 y(a)h(deep)e(cop)o(y)h(of)g(the)g(e)o
-(xtension)f(object)g(and)h(returns)f(it;)i Fq(node)f
-Fv(returns)g(the)g(node)f(object)h(for)f(this)i(e)o(xtension)e(object;)
-396 3244 y(and)h Fq(set_node)f Fv(is)i(used)f(to)h(tell)g(the)f(e)o
-(xtension)f(object)g(which)h(node)f(is)i(associated)f(with)g(it,)h
-(this)g(method)e(is)396 3352 y(automatically)g(called)h(when)g(the)g
-(node)f(tree)h(is)h(initialized.)f(The)g(follo)n(wing)e(de\002nition)h
-(is)i(a)g(good)e(starting)h(point)396 3460 y(for)g(these)g(methods;)f
-(usually)h Fq(clone)g Fv(must)g(be)g(further)f(re\002ned)g(when)h
-(instance)g(v)n(ariables)f(are)h(added)f(to)h(the)h(class:)396
-3640 y Fq(class)44 b(custom_extension)e(=)486 3738 y(object)i(\(self\))
-576 3932 y(val)g(mutable)g(node)g(=)g(\(None)g(:)h(custom_extension)d
-(node)i(option\))576 4126 y(method)f(clone)h(=)h({<)g(>})576
-4223 y(method)e(node)i(=)665 4320 y(match)f(node)g(with)845
-4418 y(None)g(->)934 4515 y(assert)g(false)755 4612 y(|)h(Some)f(n)g
-(->)h(n)576 4709 y(method)e(set_node)h(n)h(=)665 4806
-y(node)f(<-)h(Some)f(n)p Black 3800 5278 a Fr(29)p Black
-eop
-%%Page: 30 30
-30 29 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 486 676 a Fq(end)396 867 y Fv(This)h(part)e(of)h(the)h(e)o
-(xtension)d(is)j(usually)f(the)g(same)h(for)e(all)i(classes,)g(so)g(it)
-g(is)g(a)f(good)f(idea)h(to)g(consider)396 975 y Fq(custom_extension)e
-Fv(as)j(the)f(super)n(-class)g(of)g(the)h(further)d(class)j
-(de\002nitions.)e(Continuining)f(the)j(e)o(xample)d(of)396
-1083 y(abo)o(v)o(e,)h(we)h(can)g(de\002ne)g(the)g(element)g(type)f
-(classes)j(as)e(follo)n(ws:)396 1263 y Fq(class)44 b(virtual)g
-(custom_extension)e(=)486 1360 y(object)i(\(self\))576
-1457 y(...)g(clone,)g(node,)g(set_node)f(defined)h(as)g(above)g(...)576
-1652 y(method)f(virtual)h(print)g(:)h(out_channel)e(->)h(unit)486
-1749 y(end)396 1943 y(class)g(eltype_a)g(=)486 2040 y(object)g
-(\(self\))576 2137 y(inherit)f(custom_extension)576 2234
-y(method)g(print)h(ch)h(=)g(...)486 2332 y(end)396 2526
-y(class)f(eltype_b)g(=)486 2623 y(object)g(\(self\))576
-2720 y(inherit)f(custom_extension)576 2817 y(method)g(print)h(ch)h(=)g
-(...)486 2914 y(end)396 3109 y(class)f(eltype_c)g(=)486
-3206 y(object)g(\(self\))576 3303 y(inherit)f(custom_extension)576
-3400 y(method)g(print)h(ch)h(=)g(...)486 3497 y(end)396
-3688 y Fv(The)20 b(method)f Fq(print)h Fv(can)g(no)n(w)f(be)i
-(implemented)d(for)h(e)n(v)o(ery)g(element)h(type)g(separately)-5
-b(.)18 b(Note)i(that)h(you)e(get)h(the)396 3796 y(associated)g(node)f
-(by)h(in)m(v)n(oking)396 3976 y Fq(self)44 b(#)h(node)396
-4167 y Fv(and)20 b(you)f(get)h(the)h(e)o(xtension)d(object)i(of)g(a)h
-(node)e Fq(n)h Fv(by)g(writing)396 4347 y Fq(n)45 b(#)g(extension)396
-4538 y Fv(It)21 b(is)g(guaranteed)d(that)396 4718 y Fq(self)44
-b(#)h(node)f(#)h(extension)e(==)i(self)p Black 3800 5278
-a Fr(30)p Black eop
-%%Page: 31 31
-31 30 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 396 579 a Fv(al)o(w)o(ays)h(holds.)396 728 y(Here)f(are)g(sample)
-g(de\002nitions)g(of)g(the)g Fq(print)g Fv(methods:)396
-909 y Fq(class)44 b(eltype_a)g(=)486 1006 y(object)g(\(self\))576
-1103 y(inherit)f(custom_extension)576 1200 y(method)g(print)h(ch)h(=)
-665 1297 y(\(*)g(Nodes)f(<a>...</a>)f(are)h(only)g(containers:)f(*\))
-665 1394 y(output_string)g(ch)h("\(";)665 1491 y(List.iter)755
-1588 y(\(fun)g(n)h(->)f(n)h(#)g(extension)e(#)i(print)f(ch\))755
-1686 y(\(self)g(#)h(node)f(#)g(sub_nodes\);)665 1783
-y(output_string)f(ch)h("\)";)486 1880 y(end)396 2074
-y(class)g(eltype_b)g(=)486 2171 y(object)g(\(self\))576
-2268 y(inherit)f(custom_extension)576 2366 y(method)g(print)h(ch)h(=)
-665 2463 y(\(*)g(Print)f(the)g(value)g(of)h(the)f(CDATA)g(attribute)f
-("print":)h(*\))665 2560 y(match)g(self)g(#)h(node)f(#)h(attribute)e
-("print")h(with)755 2657 y(Value)g(s)314 b(->)44 b(output_string)f(ch)h
-(s)665 2754 y(|)h(Implied_value)e(->)h(output_string)f(ch)h
-("<missing>")665 2851 y(|)h(Valuelist)e(l)135 b(->)44
-b(assert)g(false)1517 2948 y(\(*)h(not)f(possible)f(because)h(the)g
-(att)h(is)f(CDATA)g(*\))486 3045 y(end)396 3240 y(class)g(eltype_c)g(=)
-486 3337 y(object)g(\(self\))576 3434 y(inherit)f(custom_extension)576
-3531 y(method)g(print)h(ch)h(=)665 3628 y(\(*)g(Print)f(the)g(contents)
-g(of)g(this)g(element:)g(*\))665 3725 y(output_string)f(ch)h(\(self)g
-(#)h(node)f(#)h(data\))486 3823 y(end)396 4017 y(class)f
-(null_extension)f(=)486 4114 y(object)h(\(self\))576
-4211 y(inherit)f(custom_extension)576 4308 y(method)g(print)h(ch)h(=)g
-(assert)e(false)486 4405 y(end)396 4638 y Fv(The)20 b(remaining)f(task)
-h(is)h(to)g(con\002gure)d(the)i(parser)g(such)g(that)g(these)g(e)o
-(xtension)f(classes)i(are)f(actually)g(used.)g(Here)396
-4746 y(another)f(problem)f(arises:)j(It)g(is)g(not)f(possible)g(to)g
-(dynamically)e(select)j(the)f(class)h(of)f(an)g(object)g(to)g(be)h
-(created.)e(As)396 4854 y(w)o(orkaround,)e(PXP)k(allo)n(ws)g(the)f
-(user)g(to)g(specify)g Fr(e)n(xemplar)g(objects)g Fv(for)f(the)h(v)n
-(arious)g(element)f(types;)h(instead)g(of)p Black 3800
-5278 a Fr(31)p Black eop
-%%Page: 32 32
-32 31 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 396 579 a Fv(creating)f(the)i(nodes)e(of)h(the)g(tree)g(by)g
-(applying)f(the)h Fq(new)g Fv(operator)e(the)j(nodes)e(are)h(produced)e
-(by)i(duplicating)e(the)396 687 y(e)o(x)o(emplars.)h(As)h(object)g
-(duplication)f(preserv)o(es)g(the)h(class)h(of)f(the)g(object,)f(one)h
-(can)g(create)g(fresh)g(objects)g(of)g(e)n(v)o(ery)396
-795 y(class)h(for)f(which)g(pre)n(viously)e(an)i(e)o(x)o(emplar)e(has)j
-(been)e(re)o(gistered.)396 944 y(Ex)o(emplars)g(are)h(meant)g(as)h
-(objects)f(without)f(contents,)g(the)h(only)g(interesting)f(thing)g(is)
-j(that)e(e)o(x)o(emplars)e(are)396 1052 y(instances)i(of)g(a)h(certain)
-f(class.)g(The)g(creation)f(of)h(an)h(e)o(x)o(emplar)d(for)h(an)h
-(element)g(node)f(can)h(be)g(done)f(by:)396 1232 y Fq(let)45
-b(element_exemplar)d(=)i(new)h(element_impl)e(extension_exemplar)396
-1423 y Fv(And)20 b(a)h(data)f(node)f(e)o(x)o(emplar)f(is)j(created)f
-(by:)396 1603 y Fq(let)45 b(data_exemplar)d(=)j(new)f(data_impl)g
-(extension_exemplar)396 1794 y Fv(The)20 b(classes)h
-Fq(element_impl)e Fv(and)h Fq(data_impl)f Fv(are)h(de\002ned)f(in)i
-(the)f(module)f Fq(Pxp_document)p Fv(.)f(The)396 1902
-y(constructors)h(initialize)h(the)g(fresh)g(objects)g(as)h(empty)e
-(objects,)h(i.e.)g(without)g(children,)e(without)i(data)g(contents,)f
-(and)396 2010 y(so)i(on.)e(The)h Fq(extension_exemplar)e
-Fv(is)j(the)f(initial)h(e)o(xtension)e(object)g(the)h(e)o(x)o(emplars)f
-(are)h(associated)g(with.)396 2160 y(Once)g(the)g(e)o(x)o(emplars)f
-(are)h(created)f(and)h(stored)g(some)n(where)f(\(e.g.)g(in)h(a)h(hash)f
-(table\),)f(you)h(can)g(tak)o(e)g(an)g(e)o(x)o(emplar)396
-2268 y(and)g(create)g(a)g(concrete)f(instance)h(\(with)g(contents\))f
-(by)h(duplicating)e(it.)j(As)g(user)f(of)g(the)g(parser)g(you)f(are)h
-(normally)396 2376 y(not)g(concerned)e(with)i(this)h(as)g(this)g(is)g
-(part)f(of)g(the)g(internal)f(logic)h(of)g(the)g(parser)m(,)f(b)n(ut)h
-(as)h(background)c(kno)n(wledge)h(it)396 2483 y(is)j(w)o(orthwhile)e
-(to)i(mention)e(that)h(the)g(tw)o(o)h(methods)e Fq(create_element)f
-Fv(and)i Fq(create_data)f Fv(actually)g(perform)396 2591
-y(the)h(duplication)f(of)g(the)i(e)o(x)o(emplar)d(for)h(which)h(the)o
-(y)f(are)h(in)m(v)n(ok)o(ed,)e(additionally)g(apply)i(modi\002cations)e
-(to)j(the)f(clone,)396 2699 y(and)g(\002nally)g(return)f(the)h(ne)n(w)g
-(object.)f(Moreo)o(v)o(er)m(,)f(the)i(e)o(xtension)e(object)i(is)h
-(copied,)e(too,)h(and)f(the)i(ne)n(w)f(node)f(object)396
-2807 y(is)i(associated)f(with)g(the)g(fresh)g(e)o(xtension)e(object.)i
-(Note)g(that)g(this)g(is)h(the)f(reason)g(why)f(e)n(v)o(ery)g(e)o
-(xtension)f(object)i(must)396 2915 y(ha)n(v)o(e)g(a)g
-Fq(clone)g Fv(method.)396 3065 y(The)g(con\002guration)e(of)i(the)g
-(set)h(of)f(e)o(x)o(emplars)e(is)j(passed)f(to)h(the)f
-Fq(parse_document_entity)d Fv(function)i(as)i(third)396
-3173 y(ar)o(gument.)d(In)i(our)f(e)o(xample,)g(this)h(ar)o(gument)e
-(can)i(be)g(set)h(up)f(as)h(follo)n(ws:)396 3353 y Fq(let)45
-b(spec)f(=)486 3450 y(make_spec_from_alist)576 3547 y(~data_exemplar:)
-535 b(\(new)44 b(data_impl)g(\(new)g(null_extension\)\))576
-3644 y(~default_element_exemplar:)c(\(new)k(element_impl)f(\(new)h
-(null_extension\)\))576 3741 y(~element_alist:)710 3838
-y([)h("a",)89 b(new)44 b(element_impl)f(\(new)h(eltype_a\);)800
-3935 y("b",)89 b(new)44 b(element_impl)f(\(new)h(eltype_b\);)800
-4033 y("c",)89 b(new)44 b(element_impl)f(\(new)h(eltype_c\);)710
-4130 y(])576 4227 y(\(\))396 4418 y Fv(The)20 b Fq(~element_alist)f
-Fv(function)f(ar)o(gument)g(de\002nes)i(the)g(mapping)e(from)h(element)
-h(types)g(to)g(e)o(x)o(emplars)f(as)396 4526 y(associati)n(v)o(e)h
-(list.)h(The)f(ar)o(gument)e Fq(~data_exemplar)g Fv(speci\002es)j(the)f
-(e)o(x)o(emplar)e(for)i(data)g(nodes,)f(and)h(the)396
-4634 y Fq(~default_element_exemplar)d Fv(is)k(used)f(whene)n(v)o(er)e
-(the)i(parser)g(\002nds)g(an)g(element)g(type)f(for)h(which)g(the)396
-4742 y(associati)n(v)o(e)g(list)h(does)f(not)g(de\002ne)g(an)g(e)o(x)o
-(emplar)-5 b(.)p Black 3800 5278 a Fr(32)p Black eop
-%%Page: 33 33
-33 32 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 396 579 a Fv(The)g(con\002guration)e(is)j(no)n(w)e(complete.)g(Y)
--9 b(ou)20 b(can)g(still)h(use)g(the)f(same)g(parsing)f(functions,)g
-(only)g(the)h(initialization)g(is)396 687 y(a)h(bit)f(dif)n(ferent.)f
-(F)o(or)g(e)o(xample,)g(call)i(the)f(parser)f(by:)396
-867 y Fq(let)45 b(d)f(=)h(parse_document_entity)c(default_config)i
-(\(from_file)g("doc.xml"\))g(spec)396 1058 y Fv(Note)20
-b(that)h(the)f(resulting)f(document)f Fq(d)j Fv(has)f(a)h(usable)f
-(type;)g(especially)f(the)i Fq(print)f Fv(method)e(we)j(added)e(is)i
-(visible.)396 1166 y(So)g(you)e(can)h(print)g(your)e(document)h(by)396
-1346 y Fq(d)45 b(#)g(root)f(#)g(extension)g(#)g(print)g(stdout)396
-1578 y Fv(This)21 b(object-oriented)c(approach)h(looks)i(rather)f
-(complicated;)g(this)h(is)i(mostly)d(caused)h(by)g(w)o(orking)e(around)
-h(some)396 1686 y(problems)g(of)h(the)g(strict)h(typing)e(system)h(of)g
-(O'Caml.)g(Some)g(auxiliary)f(concepts)g(such)h(as)h(e)o(xtensions)e
-(were)396 1794 y(needed,)g(b)n(ut)h(the)g(practical)g(consequences)e
-(are)i(lo)n(w)-5 b(.)20 b(In)g(the)g(ne)o(xt)f(section,)h(one)g(of)g
-(the)g(e)o(xamples)f(of)h(the)396 1902 y(distrib)n(ution)f(is)i(e)o
-(xplained,)d(a)j(con)m(v)o(erter)d(from)h Fr(r)m(eadme)h
-Fv(documents)e(to)i(HTML.)-2 2321 y Fx(2.4.)39 b(Example:)f(An)h(HTML)f
-(bac)m(kend)g(f)m(or)h(the)g Fd(readme)44 b Fx(DTD)396
-2501 y Fv(The)20 b(con)m(v)o(erter)e(from)h Fr(r)m(eadme)h
-Fv(documents)e(to)i(HTML)g(documents)f(follo)n(ws)h(strictly)g(the)g
-(approach)e(to)j(de\002ne)e(one)396 2609 y(class)i(per)f(element)g
-(type.)f(The)h(HTML)g(code)g(is)h(similar)f(to)g(the)h
-Fr(r)m(eadme)e Fv(source,)g(because)h(of)g(this)h(most)f(elements)396
-2716 y(can)g(be)g(con)m(v)o(erted)e(in)i(the)g(follo)n(wing)f(w)o(ay:)h
-(Gi)n(v)o(en)g(the)g(input)f(element)396 2897 y Fq(<e>content</e>)396
-3088 y Fv(the)h(con)m(v)o(ersion)e(te)o(xt)i(is)h(the)f(concatenation)e
-(of)i(a)h(computed)d(pre\002x,)h(the)h(recursi)n(v)o(ely)f(con)m(v)o
-(erted)e(content,)i(and)h(a)396 3195 y(computed)e(suf)n(\002x.)396
-3345 y(Only)i(one)g(element)f(type)h(cannot)f(be)h(handled)f(by)h(this)
-g(scheme:)g Fq(footnote)p Fv(.)f(F)o(ootnotes)g(are)h(collected)g
-(while)g(the)o(y)396 3453 y(are)g(found)f(in)h(the)g(input)g(te)o(xt,)g
-(and)f(the)o(y)h(are)g(printed)f(after)h(the)g(main)g(te)o(xt)g(has)g
-(been)g(con)m(v)o(erted)d(and)j(printed.)-2 3781 y Fp(2.4.1.)35
-b(Header)396 4021 y Fq(open)44 b(Pxp_types)396 4118 y(open)g
-(Pxp_document)-2 4571 y Fp(2.4.2.)35 b(T)-7 b(ype)34
-b(dec)n(larations)396 4811 y Fq(class)44 b(type)g(footnote_printer)f(=)
-p Black 3800 5278 a Fr(33)p Black eop
-%%Page: 34 34
-34 33 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 486 579 a Fq(object)576 676 y(method)43 b(footnote_to_html)g(:)h
-(store_type)f(-)p Fo(>)i Fq(out_channel)e(-)p Fo(>)h
-Fq(unit)486 773 y(end)396 967 y(and)h(store_type)e(=)486
-1065 y(object)576 1162 y(method)g(alloc_footnote)g(:)i
-(footnote_printer)d(-)p Fo(>)i Fq(int)576 1259 y(method)f
-(print_footnotes)g(:)h(out_channel)f(-)p Fo(>)i Fq(unit)486
-1356 y(end)396 1453 y(;;)-2 1906 y Fp(2.4.3.)35 b(Class)g
-Fc(store)396 2073 y Fv(The)20 b Fq(store)g Fv(is)h(a)g(container)d(for)
-i(footnotes.)f(Y)-9 b(ou)19 b(can)h(add)g(a)g(footnote)f(by)h(in)m(v)n
-(oking)e Fq(alloc_footnote)p Fv(;)g(the)396 2181 y(ar)o(gument)g(is)j
-(an)f(object)g(of)g(the)g(class)h Fq(footnote_printer)p
-Fv(,)d(the)i(method)f(returns)g(the)i(number)d(of)i(the)g(footnote.)396
-2289 y(The)g(interesting)f(property)f(of)i(a)h(footnote)d(is)k(that)e
-(it)h(can)f(be)g(con)m(v)o(erted)d(to)k(HTML,)e(so)i(a)g
-Fq(footnote_printer)d Fv(is)396 2397 y(an)i(object)g(with)g(a)h(method)
-e Fq(footnote_to_html)p Fv(.)f(The)i(class)h Fq(footnote)e
-Fv(which)h(is)h(de\002ned)e(belo)n(w)h(has)g(a)396 2505
-y(compatible)f(method)g Fq(footnote_to_html)f Fv(such)i(that)g(objects)
-g(created)f(from)h(it)h(can)f(be)g(used)g(as)396 2613
-y Fq(footnote_printer)p Fv(s.)396 2763 y(The)g(other)f(method,)g
-Fq(print_footnotes)f Fv(prints)i(the)g(footnotes)f(as)i(de\002nition)e
-(list,)i(and)f(is)h(typically)e(in)m(v)n(ok)o(ed)396
-2870 y(after)h(the)g(main)g(material)g(of)g(the)g(page)g(has)g(already)
-f(been)h(printed.)e(Ev)o(ery)h(item)h(of)g(the)h(list)g(is)g(printed)e
-(by)396 2978 y Fq(footnote_to_html)p Fv(.)396 3200 y
-Fq(class)44 b(store)g(=)486 3297 y(object)g(\(self\))576
-3491 y(val)g(mutable)g(footnotes)f(=)i(\()f([])h(:)f(\(int)h(*)f
-(footnote_printer\))e(list)i(\))576 3589 y(val)g(mutable)g
-(next_footnote_number)d(=)k(1)576 3783 y(method)e(alloc_footnote)g(n)i
-(=)665 3880 y(let)g(number)e(=)i(next_footnote_number)d(in)665
-3977 y(next_footnote_number)g Fo(<)p Fq(-)i(number+1;)665
-4074 y(footnotes)g Fo(<)p Fq(-)g(footnotes)f(@)i([)g(number,)e(n)i(];)
-665 4171 y(number)576 4366 y(method)e(print_footnotes)g(ch)h(=)665
-4463 y(if)h(footnotes)e Fo(<>)h Fq([])h(then)f(begin)396
-4560 y(output_string)f(ch)h(")p Fo(<)p Fq(hr)g(align=left)g
-(noshade=noshade)e(width=\\"30\045\\")p Fo(>)p Fq(\\n";)396
-4657 y(output_string)h(ch)h(")p Fo(<)p Fq(dl)p Fo(>)p
-Fq(\\n";)396 4754 y(List.iter)486 4851 y(\(fun)g(\(_,n\))g(-)p
-Fo(>)p Black 3800 5278 a Fr(34)p Black eop
-%%Page: 35 35
-35 34 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 620 579 a Fq(n)45 b(#)g(footnote_to_html)d(\(self)i(:)h
-(#store_type)e(:)p Fo(>)h Fq(store_type\))f(ch\))486
-676 y(footnotes;)396 773 y(output_string)g(ch)h(")p Fo(<)p
-Fq(/dl)p Fo(>)p Fq(\\n";)665 870 y(end)486 1065 y(end)396
-1162 y(;;)-2 1614 y Fp(2.4.4.)35 b(Function)f Fc(escape_html)396
-1782 y Fv(This)21 b(function)d(con)m(v)o(erts)h(the)h(characters)f
-Fm(<)p Fv(,)h Fm(>)p Fv(,)g(&,)g(and)g(")h(to)f(their)g(HTML)g
-(representation.)e(F)o(or)h(e)o(xample,)396 1890 y Fq(escape_html)43
-b(")p Fo(<>)p Fq(")h(=)h("&lt;&gt;")p Fv(.)19 b(Other)g(characters)h
-(are)g(left)g(unchanged.)396 2070 y Fq(let)45 b(escape_html)e(s)h(=)486
-2167 y(Str.global_substitute)576 2264 y(\(Str.regexp)f(")p
-Fo(<)p Fq(\\\\|)p Fo(>)p Fq(\\\\|&\\\\|\\""\))576 2362
-y(\(fun)h(s)g(-)p Fo(>)665 2459 y Fq(match)g(Str.matched_string)e(s)j
-(with)755 2556 y(")p Fo(<)p Fq(")f(-)p Fo(>)h Fq("&lt;")665
-2653 y(|)g(")p Fo(>)p Fq(")f(-)p Fo(>)h Fq("&gt;")665
-2750 y(|)g("&")f(-)p Fo(>)h Fq("&amp;")665 2847 y(|)g("\\"")f(-)p
-Fo(>)g Fq("&quot;")665 2944 y(|)h(_)g(-)p Fo(>)f Fq(assert)g(false\))
-576 3042 y(s)396 3139 y(;;)-2 3591 y Fp(2.4.5.)35 b(Vir)r(tual)f(c)n
-(lass)h Fc(shared)396 3759 y Fv(This)21 b(virtual)e(class)i(is)g(the)g
-(abstract)f(superclass)g(of)f(the)i(e)o(xtension)d(classes)k(sho)n(wn)d
-(belo)n(w)-5 b(.)19 b(It)i(de\002nes)f(the)g(standard)396
-3867 y(methods)f Fq(clone)p Fv(,)h Fq(node)p Fv(,)g(and)g
-Fq(set_node)p Fv(,)f(and)g(declares)h(the)g(type)g(of)g(the)g(virtual)g
-(method)e Fq(to_html)p Fv(.)i(This)396 3975 y(method)f(recursi)n(v)o
-(ely)f(tra)n(v)o(erses)i(the)g(whole)g(element)g(tree,)g(and)f(prints)h
-(the)g(con)m(v)o(erted)e(HTML)i(code)f(to)i(the)f(output)396
-4083 y(channel)f(passed)h(as)h(second)f(ar)o(gument.)d(The)j(\002rst)h
-(ar)o(gument)d(is)j(the)f(reference)f(to)h(the)g(global)f
-Fq(store)h Fv(object)g(which)396 4191 y(collects)h(the)f(footnotes.)396
-4371 y Fq(class)44 b(virtual)g(shared)g(=)486 4468 y(object)g(\(self\))
-576 4662 y(\(*)g(--)h(default_ext)e(--)h(*\))576 4857
-y(val)g(mutable)g(node)g(=)g(\(None)g(:)h(shared)f(node)g(option\))p
-Black 3800 5278 a Fr(35)p Black eop
-%%Page: 36 36
-36 35 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 576 676 a Fq(method)43 b(clone)h(=)h({)p Fo(<)f(>)p
-Fq(})576 773 y(method)f(node)i(=)665 870 y(match)f(node)g(with)845
-967 y(None)g(-)p Fo(>)934 1065 y Fq(assert)g(false)755
-1162 y(|)h(Some)f(n)g(-)p Fo(>)h Fq(n)576 1259 y(method)e(set_node)h(n)
-h(=)665 1356 y(node)f Fo(<)p Fq(-)h(Some)f(n)576 1550
-y(\(*)g(--)h(virtual)e(--)i(*\))576 1745 y(method)e(virtual)h(to_html)g
-(:)g(store)g(-)p Fo(>)h Fq(out_channel)e(-)p Fo(>)h Fq(unit)486
-1939 y(end)396 2036 y(;;)-2 2489 y Fp(2.4.6.)35 b(Class)g
-Fc(only_data)396 2656 y Fv(This)21 b(class)g(de\002nes)f
-Fq(to_html)f Fv(such)h(that)h(the)f(character)f(data)h(of)g(the)g
-(current)f(node)g(is)i(con)m(v)o(erted)d(to)i(HTML.)g(Note)396
-2764 y(that)h Fq(self)f Fv(is)h(an)f(e)o(xtension)f(object,)g
-Fq(self)44 b(#)h(node)20 b Fv(is)h(the)f(node)f(object,)h(and)f
-Fq(self)45 b(#)f(node)g(#)h(data)20 b Fv(returns)396
-2872 y(the)g(character)f(data)h(of)g(the)h(node.)396
-3052 y Fq(class)44 b(only_data)g(=)486 3149 y(object)g(\(self\))576
-3247 y(inherit)f(shared)576 3441 y(method)g(to_html)h(store)g(ch)h(=)
-665 3538 y(output_string)e(ch)h(\(escape_html)f(\(self)h(#)h(node)f(#)h
-(data\)\))486 3635 y(end)396 3732 y(;;)-2 4185 y Fp(2.4.7.)35
-b(Class)g Fc(readme)396 4353 y Fv(This)21 b(class)g(con)m(v)o(erts)d
-(elements)i(of)g(type)g Fq(readme)g Fv(to)g(HTML.)g(Such)f(an)h
-(element)g(is)h(\(by)f(de\002nition\))e(al)o(w)o(ays)j(the)396
-4461 y(root)f(element)f(of)h(the)g(document.)e(First,)j(the)f(HTML)g
-(header)f(is)j(printed;)d(the)h Fq(title)g Fv(attrib)n(ute)f(of)h(the)h
-(element)396 4568 y(determines)e(the)i(title)f(of)g(the)h(HTML)f(page.)
-f(Some)h(aspects)g(of)g(the)g(HTML)g(page)g(can)g(be)g(con\002gured)e
-(by)h(setting)396 4676 y(certain)h(parameter)f(entities,)h(for)g(e)o
-(xample)e(the)i(background)d(color)m(,)i(the)h(te)o(xt)g(color)m(,)f
-(and)h(link)g(colors.)f(After)h(the)396 4784 y(header)m(,)f(the)h
-Fq(body)g Fv(tag,)g(and)g(the)g(headline)f(ha)n(v)o(e)g(been)h
-(printed,)f(the)h(contents)f(of)h(the)g(page)g(are)g(con)m(v)o(erted)e
-(by)p Black 3798 5278 a Fr(36)p Black eop
-%%Page: 37 37
-37 36 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 396 579 a Fv(in)m(v)n(oking)e Fq(to_html)i Fv(on)g(all)g
-(children)f(of)h(the)g(current)f(node)g(\(which)h(is)h(the)f(root)f
-(node\).)g(Then,)g(the)h(footnotes)f(are)396 687 y(appended)f(to)j
-(this)f(by)g(telling)g(the)g(global)f Fq(store)h Fv(object)g(to)g
-(print)g(the)g(footnotes.)f(Finally)-5 b(,)19 b(the)h(end)g(tags)g(of)g
-(the)396 795 y(HTML)g(pages)g(are)g(printed.)396 944
-y(This)h(class)g(is)g(an)f(e)o(xample)f(ho)n(w)g(to)i(access)g(the)f(v)
-n(alue)f(of)h(an)g(attrib)n(ute:)g(The)g(v)n(alue)g(is)h(determined)d
-(by)i(in)m(v)n(oking)396 1052 y Fq(self)44 b(#)h(node)f(#)h(attribute)e
-("title")p Fv(.)20 b(As)h(this)f(attrib)n(ute)g(has)g(been)g(declared)f
-(as)i(CD)m(A)-9 b(T)h(A)20 b(and)g(as)h(being)396 1160
-y(required,)d(the)j(v)n(alue)e(has)i(al)o(w)o(ays)f(the)g(form)g
-Fq(Value)44 b(s)20 b Fv(where)g Fq(s)g Fv(is)h(the)g(string)e(v)n(alue)
-h(of)g(the)g(attrib)n(ute.)396 1310 y(Y)-9 b(ou)20 b(can)g(also)g(see)h
-(ho)n(w)f(entity)g(contents)f(can)h(be)g(accessed.)g(A)h(parameter)e
-(entity)g(object)h(can)g(be)g(look)o(ed)f(up)h(by)396
-1417 y Fq(self)44 b(#)h(node)f(#)h(dtd)f(#)h(par_entity)e("name")p
-Fv(,)20 b(and)f(by)h(in)m(v)n(oking)e Fq(replacement_text)g
-Fv(the)i(v)n(alue)g(of)396 1525 y(the)g(entity)g(is)h(returned)e(after)
-h(inner)f(parameter)g(and)g(character)g(entities)i(ha)n(v)o(e)f(been)f
-(processed.)g(Note)h(that)g(you)396 1633 y(must)g(use)h
-Fq(gen_entity)e Fv(instead)h(of)g Fq(par_entity)f Fv(to)h(access)h
-(general)e(entities.)396 1855 y Fq(class)44 b(readme)g(=)486
-1952 y(object)g(\(self\))576 2049 y(inherit)f(shared)576
-2244 y(method)g(to_html)h(store)g(ch)h(=)665 2341 y(\(*)g(output)f
-(header)f(*\))665 2438 y(output_string)396 2535 y(ch)i(")p
-Fo(<)p Fq(!DOCTYPE)e(HTML)h(PUBLIC)g(\\"-//W3C//DTD)e(HTML)j(3.2)f
-(Final//EN\\")p Fo(>)p Fq(";)665 2632 y(output_string)396
-2729 y(ch)h(")p Fo(<)p Fq(!-)f(WARNING!)f(This)h(is)h(a)g(generated)e
-(file,)h(do)g(not)h(edit!)f(-)p Fo(>)p Fq(\\n";)665 2826
-y(let)h(title)f(=)396 2923 y(match)g(self)g(#)h(node)f(#)h(attribute)e
-("title")h(with)576 3021 y(Value)g(s)g(-)p Fo(>)h Fq(s)486
-3118 y(|)g(_)f(-)p Fo(>)h Fq(assert)e(false)665 3215
-y(in)665 3312 y(let)i(html_header,)d(_)j(=)396 3409 y(try)g(\(self)f(#)
-g(node)g(#)h(dtd)f(#)h(par_entity)e("readme:html:header"\))934
-3506 y(#)i(replacement_text)396 3603 y(with)f(WF_error)g(_)h(-)p
-Fo(>)f Fq("",)g(false)g(in)665 3701 y(let)h(html_trailer,)d(_)j(=)396
-3798 y(try)g(\(self)f(#)g(node)g(#)h(dtd)f(#)h(par_entity)e
-("readme:html:trailer"\))934 3895 y(#)i(replacement_text)396
-3992 y(with)f(WF_error)g(_)h(-)p Fo(>)f Fq("",)g(false)g(in)665
-4089 y(let)h(html_bgcolor,)d(_)j(=)396 4186 y(try)g(\(self)f(#)g(node)g
-(#)h(dtd)f(#)h(par_entity)e("readme:html:bgcolor"\))934
-4283 y(#)i(replacement_text)396 4380 y(with)f(WF_error)g(_)h(-)p
-Fo(>)f Fq("white",)f(false)h(in)665 4478 y(let)h(html_textcolor,)d(_)j
-(=)396 4575 y(try)g(\(self)f(#)g(node)g(#)h(dtd)f(#)h(par_entity)e
-("readme:html:textcolor"\))934 4672 y(#)i(replacement_text)396
-4769 y(with)f(WF_error)g(_)h(-)p Fo(>)f Fq("",)g(false)g(in)665
-4866 y(let)h(html_alinkcolor,)d(_)i(=)p Black 3797 5278
-a Fr(37)p Black eop
-%%Page: 38 38
-38 37 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 396 579 a Fq(try)45 b(\(self)f(#)g(node)g(#)h(dtd)f(#)h
-(par_entity)e("readme:html:alinkcolor"\))934 676 y(#)i
-(replacement_text)396 773 y(with)f(WF_error)g(_)h(-)p
-Fo(>)f Fq("",)g(false)g(in)665 870 y(let)h(html_vlinkcolor,)d(_)i(=)396
-967 y(try)h(\(self)f(#)g(node)g(#)h(dtd)f(#)h(par_entity)e
-("readme:html:vlinkcolor"\))934 1065 y(#)i(replacement_text)396
-1162 y(with)f(WF_error)g(_)h(-)p Fo(>)f Fq("",)g(false)g(in)665
-1259 y(let)h(html_linkcolor,)d(_)j(=)396 1356 y(try)g(\(self)f(#)g
-(node)g(#)h(dtd)f(#)h(par_entity)e("readme:html:linkcolor"\))934
-1453 y(#)i(replacement_text)396 1550 y(with)f(WF_error)g(_)h(-)p
-Fo(>)f Fq("",)g(false)g(in)665 1647 y(let)h(html_background,)d(_)i(=)
-396 1745 y(try)h(\(self)f(#)g(node)g(#)h(dtd)f(#)h(par_entity)e
-("readme:html:background"\))934 1842 y(#)i(replacement_text)396
-1939 y(with)f(WF_error)g(_)h(-)p Fo(>)f Fq("",)g(false)g(in)665
-2133 y(output_string)f(ch)h(")p Fo(<)p Fq(html)p Fo(><)p
-Fq(header)p Fo(><)p Fq(title)p Fo(>)p Fq(\\n";)665 2230
-y(output_string)f(ch)h(\(escape_html)f(title\);)665 2327
-y(output_string)g(ch)h(")p Fo(<)p Fq(/title)p Fo(><)p
-Fq(/header)p Fo(>)p Fq(\\n";)665 2424 y(output_string)f(ch)h(")p
-Fo(<)p Fq(body)g(";)665 2522 y(List.iter)396 2619 y(\(fun)g
-(\(name,value\))f(-)p Fo(>)531 2716 y Fq(if)h(value)g
-Fo(<>)h Fq("")f(then)620 2813 y(output_string)f(ch)i(\(name)f(^)g
-("=\\"")g(^)h(escape_html)e(value)h(^)h("\\")f("\)\))396
-2910 y([)h("bgcolor",)178 b(html_bgcolor;)486 3007 y("text",)313
-b(html_textcolor;)486 3104 y("link",)g(html_linkcolor;)486
-3202 y("alink",)268 b(html_alinkcolor;)486 3299 y("vlink",)g
-(html_vlinkcolor;)396 3396 y(];)665 3493 y(output_string)43
-b(ch)h(")p Fo(>)p Fq(\\n";)665 3590 y(output_string)f(ch)h
-(html_header;)665 3687 y(output_string)f(ch)h(")p Fo(<)p
-Fq(h1)p Fo(>)p Fq(";)665 3784 y(output_string)f(ch)h(\(escape_html)f
-(title\);)665 3882 y(output_string)g(ch)h(")p Fo(<)p
-Fq(/h1)p Fo(>)p Fq(\\n";)665 3979 y(\(*)h(process)e(main)i(content:)e
-(*\))665 4076 y(List.iter)396 4173 y(\(fun)h(n)h(-)p
-Fo(>)f Fq(n)h(#)g(extension)e(#)i(to_html)e(store)h(ch\))396
-4270 y(\(self)g(#)h(node)f(#)h(sub_nodes\);)665 4367
-y(\(*)g(now)f(process)g(footnotes)f(*\))665 4464 y(store)h(#)h
-(print_footnotes)d(ch;)665 4561 y(\(*)j(trailer)e(*\))665
-4659 y(output_string)g(ch)h(html_trailer;)665 4756 y(output_string)f
-(ch)h(")p Fo(<)p Fq(/html)p Fo(>)p Fq(\\n";)p Black 3800
-5278 a Fr(38)p Black eop
-%%Page: 39 39
-39 38 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 486 579 a Fq(end)396 676 y(;;)-2 1129 y Fp(2.4.8.)35
-b(Classes)h Fc(section)p Fp(,)31 b Fc(sect1)p Fp(,)g
-Fc(sect2)p Fp(,)g(and)j Fc(sect3)396 1296 y Fv(As)21
-b(the)f(con)m(v)o(ersion)e(process)i(is)h(v)o(ery)e(similar)m(,)h(the)g
-(con)m(v)o(ersion)d(classes)22 b(of)e(the)g(three)g(section)f(le)n(v)o
-(els)i(are)f(deri)n(v)o(ed)396 1404 y(from)f(the)i(more)e(general)g
-Fq(section)h Fv(class.)h(The)e(HTML)h(code)g(of)g(the)g(section)g(le)n
-(v)o(els)g(only)f(dif)n(fers)h(in)g(the)g(type)g(of)396
-1512 y(the)g(headline,)f(and)h(because)f(of)h(this)h(the)f(classes)i
-(describing)c(the)i(section)g(le)n(v)o(els)g(can)g(be)h(computed)d(by)i
-(replacing)396 1620 y(the)g(class)i(ar)o(gument)17 b
-Fq(the_tag)j Fv(of)g Fq(section)g Fv(by)f(the)i(HTML)e(name)h(of)g(the)
-g(headline)f(tag.)396 1770 y(Section)h(elements)g(are)g(con)m(v)o
-(erted)e(to)i(HTML)g(by)g(printing)e(a)j(headline)e(and)h(then)f(con)m
-(v)o(erting)f(the)i(contents)f(of)h(the)396 1878 y(element)g(recursi)n
-(v)o(ely)-5 b(.)18 b(More)h(precisely)-5 b(,)19 b(the)h(\002rst)h
-(sub-element)e(is)i(al)o(w)o(ays)f(a)h Fq(title)f Fv(element,)f(and)h
-(the)g(other)396 1985 y(elements)g(are)g(the)g(contents)g(of)g(the)g
-(section.)g(This)g(structure)f(is)j(declared)c(in)j(the)f(DTD,)g(and)g
-(it)h(is)g(guaranteed)d(that)396 2093 y(the)i(document)f(matches)g(the)
-i(DTD.)f(Because)g(of)g(this)h(the)f(title)h(node)e(can)h(be)g
-(separated)f(from)g(the)h(rest)h(without)f(an)o(y)396
-2201 y(checks.)396 2351 y(Both)g(the)h(title)g(node,)e(and)g(the)h
-(body)f(nodes)h(are)g(then)f(con)m(v)o(erted)f(to)i(HTML)g(by)g
-(calling)g Fq(to_html)f Fv(on)h(them.)396 2572 y Fq(class)44
-b(section)g(the_tag)g(=)486 2670 y(object)g(\(self\))576
-2767 y(inherit)f(shared)576 2961 y(val)h(tag)g(=)h(the_tag)576
-3155 y(method)e(to_html)h(store)g(ch)h(=)665 3252 y(let)g(sub_nodes)e
-(=)i(self)f(#)g(node)h(#)f(sub_nodes)g(in)665 3350 y(match)g(sub_nodes)
-g(with)486 3447 y(title_node)f(::)i(rest)f(-)p Fo(>)576
-3544 y Fq(output_string)e(ch)j(\(")p Fo(<)p Fq(")f(^)g(tag)h(^)f(")p
-Fo(>)p Fq(\\n"\);)576 3641 y(title_node)f(#)h(extension)g(#)g(to_html)g
-(store)g(ch;)576 3738 y(output_string)e(ch)j(\("\\n)p
-Fo(<)p Fq(/")e(^)i(tag)f(^)h(")p Fo(>)p Fq("\);)576 3835
-y(List.iter)665 3932 y(\(fun)f(n)h(-)p Fo(>)f Fq(n)h(#)g(extension)e(#)
-i(to_html)e(store)h(ch\))665 4029 y(rest)396 4127 y(|)h(_)g(-)p
-Fo(>)576 4224 y Fq(assert)e(false)486 4321 y(end)396
-4418 y(;;)396 4612 y(class)h(sect1)g(=)h(section)f("h1";;)396
-4709 y(class)g(sect2)g(=)h(section)f("h3";;)396 4807
-y(class)g(sect3)g(=)h(section)f("h4";;)p Black 3800 5278
-a Fr(39)p Black eop
-%%Page: 40 40
-40 39 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black -2 583 a Fp(2.4.9.)35 b(Classes)h Fc(map_tag)p
-Fp(,)31 b Fc(p)p Fp(,)i Fc(em)p Fp(,)f Fc(ul)p Fp(,)h
-Fc(li)396 751 y Fv(Se)n(v)o(eral)20 b(element)f(types)h(are)g(con)m(v)o
-(erted)e(to)i(HTML)g(by)g(simply)g(mapping)e(them)i(to)g(corresponding)
-d(HTML)396 859 y(element)j(types.)g(The)f(class)j Fq(map_tag)d
-Fv(implements)g(this,)i(and)f(the)g(class)h(ar)o(gument)d
-Fq(the_target_tag)396 967 y Fv(determines)h(the)i(tag)f(name)f(to)i
-(map)e(to.)h(The)g(output)f(consists)i(of)f(the)g(start)h(tag,)f(the)g
-(recursi)n(v)o(ely)e(con)m(v)o(erted)g(inner)396 1075
-y(elements,)i(and)g(the)g(end)f(tag.)396 1255 y Fq(class)44
-b(map_tag)g(the_target_tag)e(=)486 1352 y(object)i(\(self\))576
-1449 y(inherit)f(shared)576 1643 y(val)h(target_tag)f(=)i
-(the_target_tag)576 1838 y(method)e(to_html)h(store)g(ch)h(=)665
-1935 y(output_string)e(ch)h(\(")p Fo(<)p Fq(")g(^)h(target_tag)e(^)i(")
-p Fo(>)p Fq(\\n"\);)665 2032 y(List.iter)396 2129 y(\(fun)f(n)h(-)p
-Fo(>)f Fq(n)h(#)g(extension)e(#)i(to_html)e(store)h(ch\))396
-2226 y(\(self)g(#)h(node)f(#)h(sub_nodes\);)665 2323
-y(output_string)e(ch)h(\("\\n)p Fo(<)p Fq(/")g(^)h(target_tag)e(^)h(")p
-Fo(>)p Fq("\);)486 2420 y(end)396 2518 y(;;)396 2712
-y(class)g(p)h(=)g(map_tag)e("p";;)396 2809 y(class)h(em)h(=)f(map_tag)g
-("b";;)396 2906 y(class)g(ul)h(=)f(map_tag)g("ul";;)396
-3003 y(class)g(li)h(=)f(map_tag)g("li";;)-2 3456 y Fp(2.4.10.)36
-b(Class)f Fc(br)396 3624 y Fv(Element)20 b(of)g(type)f
-Fq(br)i Fv(are)f(mapped)f(to)h(the)g(same)g(HTML)g(type.)g(Note)g(that)
-g(HTML)g(forbids)f(the)h(end)g(tag)g(of)g Fq(br)p Fv(.)396
-3804 y Fq(class)44 b(br)h(=)486 3901 y(object)f(\(self\))576
-3998 y(inherit)f(shared)576 4192 y(method)g(to_html)h(store)g(ch)h(=)
-665 4289 y(output_string)e(ch)h(")p Fo(<)p Fq(br)p Fo(>)p
-Fq(\\n";)665 4387 y(List.iter)396 4484 y(\(fun)g(n)h(-)p
-Fo(>)f Fq(n)h(#)g(extension)e(#)i(to_html)e(store)h(ch\))396
-4581 y(\(self)g(#)h(node)f(#)h(sub_nodes\);)486 4678
-y(end)396 4775 y(;;)p Black 3800 5278 a Fr(40)p Black
-eop
-%%Page: 41 41
-41 40 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black -2 583 a Fp(2.4.11.)36 b(Class)f Fc(code)396 751
-y Fv(The)20 b Fq(code)g Fv(type)g(is)h(con)m(v)o(erted)d(to)i(a)h
-Fq(pre)f Fv(section)g(\(preformatted)d(te)o(xt\).)i(As)i(the)g(meaning)
-d(of)i(tabs)h(is)g(unspeci\002ed)e(in)396 859 y(HTML,)h(tabs)g(are)h(e)
-o(xpanded)c(to)k(spaces.)396 1039 y Fq(class)44 b(code)g(=)486
-1136 y(object)g(\(self\))576 1233 y(inherit)f(shared)576
-1427 y(method)g(to_html)h(store)g(ch)h(=)665 1525 y(let)g(data)f(=)g
-(self)h(#)f(node)g(#)h(data)f(in)665 1622 y(\(*)h(convert)e(tabs)i(*\))
-665 1719 y(let)g(l)f(=)h(String.length)e(data)h(in)665
-1816 y(let)h(rec)f(preprocess)f(i)i(column)f(=)396 1913
-y(\(*)h(this)f(is)g(very)h(ineffective)e(but)h(comprehensive:)e(*\))396
-2010 y(if)j(i)f Fo(<)h Fq(l)g(then)486 2107 y(match)f(data.[i])f(with)
-665 2205 y('\\t')h(-)p Fo(>)396 2302 y Fq(let)h(n)f(=)h(8)g(-)f
-(\(column)g(mod)g(8\))h(in)396 2399 y(String.make)e(n)i(')g(')f(^)h
-(preprocess)e(\(i+1\))h(\(column)g(+)g(n\))576 2496 y(|)g('\\n')g(-)p
-Fo(>)396 2593 y Fq("\\n")g(^)h(preprocess)e(\(i+1\))h(0)576
-2690 y(|)g(c)h(-)p Fo(>)396 2787 y Fq(String.make)e(1)i(c)g(^)f
-(preprocess)f(\(i+1\))h(\(column)g(+)h(1\))396 2884 y(else)486
-2982 y("")665 3079 y(in)665 3176 y(output_string)e(ch)h(")p
-Fo(<)p Fq(p)p Fo(><)p Fq(pre)p Fo(>)p Fq(";)665 3273
-y(output_string)f(ch)h(\(escape_html)f(\(preprocess)g(0)i(0\)\);)665
-3370 y(output_string)e(ch)h(")p Fo(<)p Fq(/pre)p Fo(><)p
-Fq(/p)p Fo(>)p Fq(";)486 3564 y(end)396 3662 y(;;)-2
-4114 y Fp(2.4.12.)36 b(Class)f Fc(a)396 4282 y Fv(Hyperlinks,)19
-b(e)o(xpressed)g(by)g(the)i Fq(a)f Fv(element)g(type,)f(are)h(con)m(v)o
-(erted)e(to)i(the)g(HTML)g Fq(a)h Fv(type.)e(If)i(the)f(tar)o(get)f(of)
-h(the)396 4390 y(hyperlink)e(is)j(gi)n(v)o(en)d(by)i
-Fq(href)p Fv(,)g(the)g(URL)g(of)g(this)g(attrib)n(ute)g(can)g(be)g
-(used)g(directly)-5 b(.)18 b(Alternati)n(v)o(ely)-5 b(,)18
-b(the)i(tar)o(get)f(can)h(be)396 4498 y(gi)n(v)o(en)f(by)h
-Fq(readmeref)f Fv(in)i(which)e(case)i(the)f(".html")g(suf)n(\002x)f
-(must)i(be)f(added)f(to)h(the)g(\002le)h(name.)396 4647
-y(Note)f(that)h(within)f Fq(a)g Fv(only)g(#PCD)m(A)-9
-b(T)h(A)20 b(is)h(allo)n(wed,)e(so)i(the)f(contents)f(can)h(be)g(con)m
-(v)o(erted)e(directly)h(by)h(applying)396 4755 y Fq(escape_html)f
-Fv(to)i(the)f(character)f(data)h(contents.)p Black 3800
-5278 a Fr(41)p Black eop
-%%Page: 42 42
-42 41 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 396 579 a Fq(class)44 b(a)h(=)486 676 y(object)f(\(self\))576
-773 y(inherit)f(shared)576 967 y(method)g(to_html)h(store)g(ch)h(=)665
-1065 y(output_string)e(ch)h(")p Fo(<)p Fq(a)h(";)665
-1162 y(let)g(href)f(=)396 1259 y(match)g(self)g(#)h(node)f(#)h
-(attribute)e("href")h(with)576 1356 y(Value)g(v)g(-)p
-Fo(>)h Fq(escape_html)e(v)486 1453 y(|)i(Valuelist)e(_)i(-)p
-Fo(>)f Fq(assert)g(false)486 1550 y(|)h(Implied_value)d(-)p
-Fo(>)665 1647 y Fq(begin)i(match)g(self)g(#)h(node)f(#)h(attribute)e
-("readmeref")g(with)486 1745 y(Value)h(v)h(-)p Fo(>)f
-Fq(escape_html)f(v)i(^)f(".html")396 1842 y(|)h(Valuelist)e(_)i(-)p
-Fo(>)f Fq(assert)g(false)396 1939 y(|)h(Implied_value)e(-)p
-Fo(>)576 2036 y Fq("")665 2133 y(end)665 2230 y(in)665
-2327 y(if)i(href)f Fo(<>)g Fq("")h(then)396 2424 y(output_string)e(ch)h
-(\("href=\\"")88 b(^)45 b(href)f(^)h("\\""\);)665 2522
-y(output_string)e(ch)h(")p Fo(>)p Fq(";)665 2619 y(output_string)f(ch)h
-(\(escape_html)f(\(self)h(#)h(node)f(#)h(data\)\);)665
-2716 y(output_string)e(ch)h(")p Fo(<)p Fq(/a)p Fo(>)p
-Fq(";)486 2910 y(end)396 3007 y(;;)-2 3460 y Fp(2.4.13.)36
-b(Class)f Fc(footnote)396 3628 y Fv(The)20 b Fq(footnote)g
-Fv(class)h(has)f(tw)o(o)h(methods:)e Fq(to_html)g Fv(to)i(con)m(v)o
-(ert)d(the)i(footnote)f(reference)f(to)i(HTML,)g(and)396
-3736 y Fq(footnote_to_html)e Fv(to)j(con)m(v)o(ert)d(the)i(footnote)f
-(te)o(xt)h(itself.)396 3885 y(The)g(footnote)f(reference)f(is)j(con)m
-(v)o(erted)d(to)i(a)h(local)f(hyperlink;)e(more)h(precisely)-5
-b(,)19 b(to)h(tw)o(o)h(anchor)d(tags)j(which)e(are)396
-3993 y(connected)g(with)h(each)g(other)-5 b(.)19 b(The)h(te)o(xt)g
-(anchor)f(points)h(to)g(the)g(footnote)f(anchor)m(,)f(and)h(the)i
-(footnote)d(anchor)h(points)396 4101 y(to)i(the)f(te)o(xt)g(anchor)-5
-b(.)396 4250 y(The)20 b(footnote)f(must)h(be)g(allocated)f(in)i(the)f
-Fq(store)g Fv(object.)f(By)i(allocating)e(the)h(footnote,)f(you)g(get)h
-(the)g(number)f(of)396 4358 y(the)h(footnote,)f(and)g(the)i(te)o(xt)f
-(of)f(the)i(footnote)d(is)j(stored)f(until)g(the)g(end)g(of)g(the)g
-(HTML)g(page)f(is)j(reached)c(when)i(the)396 4466 y(footnotes)f(can)h
-(be)g(printed.)f(The)h Fq(to_html)f Fv(method)g(stores)i(simply)e(the)i
-(object)e(itself,)i(such)f(that)g(the)396 4574 y Fq(footnote_to_html)e
-Fv(method)h(is)i(in)m(v)n(ok)o(ed)e(on)g(the)i(same)f(object)g(that)g
-(encountered)d(the)k(footnote.)p Black 3800 5278 a Fr(42)p
-Black eop
-%%Page: 43 43
-43 42 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black 396 579 a Fv(The)g Fq(to_html)g Fv(only)f(allocates)h(the)h
-(footnote,)d(and)h(prints)h(the)g(reference)f(anchor)m(,)f(b)n(ut)i(it)
-h(does)f(not)g(print)g(nor)396 687 y(con)m(v)o(ert)e(the)j(contents)e
-(of)h(the)g(note.)g(This)g(is)h(deferred)d(until)j(the)f(footnotes)e
-(actually)i(get)g(printed,)f(i.e.)h(the)g(recursi)n(v)o(e)396
-795 y(call)h(of)f Fq(to_html)f Fv(on)h(the)g(sub)g(nodes)g(is)h(done)e
-(by)h Fq(footnote_to_html)p Fv(.)396 944 y(Note)g(that)h(this)f
-(technique)f(does)h(not)g(w)o(ork)f(if)i(you)e(mak)o(e)h(another)f
-(footnote)f(within)i(a)h(footnote;)d(the)i(second)396
-1052 y(footnote)f(gets)h(allocated)g(b)n(ut)g(not)g(printed.)396
-1274 y Fq(class)44 b(footnote)g(=)486 1371 y(object)g(\(self\))576
-1468 y(inherit)f(shared)576 1662 y(val)h(mutable)g(footnote_number)e(=)
-j(0)576 1857 y(method)e(to_html)h(store)g(ch)h(=)665
-1954 y(let)g(number)e(=)396 2051 y(store)h(#)h(alloc_footnote)d(\(self)
-i(:)h(#shared)f(:)p Fo(>)g Fq(footnote_printer\))e(in)665
-2148 y(let)j(foot_anchor)e(=)396 2245 y("footnote")g(^)i(string_of_int)
-e(number)h(in)665 2342 y(let)h(text_anchor)e(=)396 2439
-y("textnote")g(^)i(string_of_int)e(number)h(in)665 2537
-y(footnote_number)f Fo(<)p Fq(-)h(number;)665 2634 y(output_string)f
-(ch)h(\()h(")p Fo(<)p Fq(a)f(name=\\"")g(^)g(text_anchor)f(^)i("\\")f
-(href=\\"#")g(^)441 2731 y(foot_anchor)f(^)i("\\")p Fo(>)p
-Fq([")e(^)i(string_of_int)e(number)h(^)441 2828 y("])p
-Fo(<)p Fq(/a)p Fo(>)p Fq(")g(\))576 3022 y(method)f(footnote_to_html)g
-(store)h(ch)g(=)665 3119 y(\(*)h(prerequisite:)d(we)j(are)f(in)h(a)f
-(definition)g(list)g Fo(<)p Fq(dl)p Fo(>)p Fq(...)p Fo(<)p
-Fq(/dl)p Fo(>)e Fq(*\))665 3217 y(let)j(foot_anchor)e(=)396
-3314 y("footnote")g(^)i(string_of_int)e(footnote_number)f(in)665
-3411 y(let)j(text_anchor)e(=)396 3508 y("textnote")g(^)i(string_of_int)
-e(footnote_number)f(in)665 3605 y(output_string)h(ch)h(\(")p
-Fo(<)p Fq(dt)p Fo(><)p Fq(a)g(name=\\"")f(^)i(foot_anchor)e(^)h("\\")h
-(href=\\"#")e(^)396 3702 y(text_anchor)g(^)i("\\")p Fo(>)p
-Fq([")f(^)g(string_of_int)f(footnote_number)f(^)396 3799
-y("])p Fo(<)p Fq(/a)p Fo(><)p Fq(/dt)p Fo(>)p Fq(\\n)p
-Fo(<)p Fq(dd)p Fo(>)p Fq("\);)665 3896 y(List.iter)396
-3994 y(\(fun)i(n)h(-)p Fo(>)f Fq(n)h(#)g(extension)e(#)i(to_html)e
-(store)h(ch\))396 4091 y(\(self)g(#)h(node)f(#)h(sub_nodes\);)665
-4188 y(output_string)e(ch)h(\("\\n)p Fo(<)p Fq(/dd)p
-Fo(>)p Fq("\))486 4382 y(end)396 4479 y(;;)p Black 3800
-5278 a Fr(43)p Black eop
-%%Page: 44 44
-44 43 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black -2 583 a Fp(2.4.14.)36 b(The)d(speci\002cation)j(of)e(the)f
-(document)i(model)396 751 y Fv(This)21 b(code)e(sets)i(up)f(the)g(hash)
-g(table)g(that)h(connects)e(element)h(types)g(with)g(the)g(e)o(x)o
-(emplars)f(of)h(the)g(e)o(xtension)f(classes)396 859
-y(that)i(con)m(v)o(ert)d(the)i(elements)g(to)g(HTML.)396
-1039 y Fq(open)44 b(Pxp_yacc)396 1233 y(let)h(tag_map)e(=)486
-1330 y(make_spec_from_alist)576 1427 y(~data_exemplar:\(new)e
-(data_impl)j(\(new)g(only_data\)\))576 1525 y
-(~default_element_exemplar:\(new)39 b(element_impl)k(\(new)h
-(no_markup\)\))576 1622 y(~element_alist:)665 1719 y([)h("readme",)e
-(\(new)h(element_impl)f(\(new)h(readme\)\);)396 1816
-y("sect1",)89 b(\(new)44 b(element_impl)f(\(new)h(sect1\)\);)396
-1913 y("sect2",)89 b(\(new)44 b(element_impl)f(\(new)h(sect2\)\);)396
-2010 y("sect3",)89 b(\(new)44 b(element_impl)f(\(new)h(sect3\)\);)396
-2107 y("title",)89 b(\(new)44 b(element_impl)f(\(new)h(no_markup\)\);)
-396 2205 y("p",)269 b(\(new)44 b(element_impl)f(\(new)h(p\)\);)396
-2302 y("br",)224 b(\(new)44 b(element_impl)f(\(new)h(br\)\);)396
-2399 y("code",)134 b(\(new)44 b(element_impl)f(\(new)h(code\)\);)396
-2496 y("em",)224 b(\(new)44 b(element_impl)f(\(new)h(em\)\);)396
-2593 y("ul",)224 b(\(new)44 b(element_impl)f(\(new)h(ul\)\);)396
-2690 y("li",)224 b(\(new)44 b(element_impl)f(\(new)h(li\)\);)396
-2787 y("footnote",)f(\(new)h(element_impl)f(\(new)h(footnote)g(:)h
-(#shared)e(:)p Fo(>)i Fq(shared\)\);)396 2884 y("a",)269
-b(\(new)44 b(element_impl)f(\(new)h(a\)\);)665 2982 y(])576
-3079 y(\(\))396 3176 y(;;)-2 3678 y Fx(Notes)p Black
-396 3857 a Fv(1.)p Black 70 w(Elements)20 b(may)g(also)g(contain)f
-(processing)g(instructions.)g(Unlik)o(e)h(other)f(document)g(models,)g
-(PXP)i(separates)529 3965 y(processing)e(instructions)g(from)g(the)i
-(rest)f(of)g(the)g(te)o(xt)g(and)g(pro)o(vides)e(a)j(second)e(interf)o
-(ace)h(to)g(access)h(them)529 4073 y(\(method)e Fq(pinstr)p
-Fv(\).)g(Ho)n(we)n(v)o(er)m(,)f(there)h(is)j(a)e(parser)g(option)f(\()p
-Fq(enable_pinstr_nodes)p Fv(\))e(which)i(changes)g(the)529
-4181 y(beha)n(viour)f(of)i(the)g(parser)g(such)g(that)g(e)o(xtra)g
-(nodes)f(for)h(processing)e(instructions)i(are)g(included)e(into)i(the)
-h(tree.)529 4320 y Fi(Furthermore,)e(the)g(tree)g(does)g(normally)h
-(not)f(contain)h(nodes)g(for)e(XML)h(comments;)h(the)o(y)f(are)g
-(ignored)h(by)f(def)o(ault.)g(Again,)529 4417 y(there)g(is)g(an)g
-(option)h(\()p Fh(enable_comment_nodes)p Fi(\))25 b(changing)c(this.)p
-Black 396 4566 a Fv(2.)p Black 70 w(Due)f(to)h(the)f(typing)f(system)h
-(it)h(is)g(more)e(or)h(less)i(impossible)d(to)i(deri)n(v)o(e)d(recursi)
-n(v)o(e)h(classes)i(in)g(O'Caml.)f(T)-7 b(o)20 b(get)529
-4674 y(around)e(this,)j(it)g(is)g(common)d(practice)i(to)g(put)g(the)g
-(modi\002able)f(or)h(e)o(xtensible)f(part)h(of)g(recursi)n(v)o(e)f
-(objects)h(into)529 4782 y(parallel)g(objects.)p Black
-3800 5278 a Fr(44)p Black eop
-%%Page: 45 45
-45 44 bop Black 3136 67 a Fr(Chapter)20 b(2.)g(Using)g(PXP)p
-Black Black 396 579 a Fv(3.)p Black 70 w(The)g(problem)e(is)k(that)e
-(the)g(subclass)h(is)g(usually)e(not)h(a)h(subtype)e(in)h(this)h(case)f
-(because)g(O'Caml)g(has)h(a)529 687 y(contra)n(v)n(ariant)d(subtyping)g
-(rule.)p Black 3800 5278 a Fr(45)p Black eop
-%%Page: 46 46
-46 45 bop Black Black -2 621 a Fs(Chapter)48 b(3.)f(The)h(objects)g
-(representing)g(the)-2 845 y(document)396 1093 y Fr(This)21
-b(description)e(might)h(be)g(out-of-date)o(.)e(See)i(the)g(module)f
-(interface)h(\002les)g(for)h(updated)d(information.)-2
-1470 y Fx(3.1.)39 b(The)g Fb(document)44 b Fx(c)m(lass)396
-1722 y Fq(class)g([)h('ext)f(])h(document)e(:)486 1819
-y(Pxp_types.collect_warnings)d(->)486 1916 y(object)576
-2013 y(method)j(init_xml_version)g(:)h(string)g(->)h(unit)576
-2111 y(method)e(init_root)h(:)g('ext)h(node)f(->)g(unit)576
-2305 y(method)f(xml_version)g(:)i(string)576 2402 y(method)e
-(xml_standalone)g(:)i(bool)576 2499 y(method)e(dtd)i(:)f(dtd)576
-2596 y(method)f(root)i(:)f('ext)g(node)576 2791 y(method)f(encoding)h
-(:)h(Pxp_types.rep_encoding)576 2985 y(method)e(add_pinstr)h(:)g
-(proc_instruction)e(->)j(unit)576 3082 y(method)e(pinstr)h(:)h(string)f
-(->)g(proc_instruction)e(list)576 3179 y(method)h(pinstr_names)g(:)i
-(string)f(list)576 3373 y(method)f(write)h(:)h(Pxp_types.output_stream)
-c(->)k(Pxp_types.encoding)c(->)k(unit)486 3568 y(end)396
-3665 y(;;)396 3856 y Fv(The)20 b(methods)f(be)o(ginning)f(with)i
-Fq(init_)g Fv(are)g(only)g(for)f(internal)h(use)g(of)g(the)g(parser)-5
-b(.)p Black 396 4088 a Ft(\225)p Black 60 w Fq(xml_version)p
-Fv(:)19 b(returns)h(the)g(v)o(ersion)f(string)h(at)g(the)g(be)o
-(ginning)e(of)i(the)g(document.)e(F)o(or)i(e)o(xample,)f("1.0")g(is)479
-4196 y(returned)g(if)h(the)g(document)f(be)o(gins)g(with)h
-Fo(<)p Fq(?xml)44 b(version="1.0"?)p Fo(>)p Fv(.)p Black
-396 4304 a Ft(\225)p Black 60 w Fq(xml_standalone)p Fv(:)19
-b(returns)g(the)h(boolean)f(v)n(alue)g(of)h Fq(standalone)f
-Fv(declaration)g(in)h(the)h(XML)f(declaration.)e(If)479
-4412 y(the)i Fq(standalone)g Fv(attrib)n(ute)f(is)i(missing,)f
-Fq(false)g Fv(is)h(returned.)p Black 396 4520 a Ft(\225)p
-Black 60 w Fq(dtd)p Fv(:)g(returns)e(a)i(reference)d(to)i(the)h(global)
-e(DTD)h(object.)p Black 396 4628 a Ft(\225)p Black 60
-w Fq(root)p Fv(:)g(returns)g(a)g(reference)f(to)h(the)g(root)g
-(element.)p Black 396 4736 a Ft(\225)p Black 60 w Fq(encoding)p
-Fv(:)g(returns)f(the)h(internal)g(encoding)e(of)i(the)g(document.)e
-(This)i(means)g(that)g(all)h(strings)f(of)g(which)g(the)479
-4844 y(document)e(consists)j(are)f(encoded)f(in)h(this)h(character)e
-(set.)p Black 3798 5278 a Fr(46)p Black eop
-%%Page: 47 47
-47 46 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black Black 396 579 a Ft(\225)p
-Black 60 w Fq(pinstr)p Fv(:)g(returns)f(the)i(processing)d
-(instructions)i(outside)f(the)h(DTD)h(and)e(outside)h(the)g(root)g
-(element.)f(The)479 687 y(ar)o(gument)f(passed)i(to)h(the)f(method)f
-(names)g(a)i Fr(tar)m(g)o(et)q Fv(,)g(and)e(the)h(method)f(returns)g
-(all)i(instructions)e(with)i(this)g(tar)o(get.)479 795
-y(The)f(tar)o(get)f(is)j(the)e(\002rst)h(w)o(ord)e(inside)h
-Fo(<)p Fq(?)h Fv(and)e Fq(?)p Fo(>)p Fv(.)p Black 396
-903 a Ft(\225)p Black 60 w Fq(pinstr_names)p Fv(:)g(returns)g(the)i
-(names)e(of)h(the)h(processing)d(instructions)p Black
-396 1011 a Ft(\225)p Black 60 w Fq(add_pinstr)p Fv(:)h(adds)h(another)f
-(processing)g(instruction.)f(This)j(method)e(is)i(used)f(by)f(the)h
-(parser)g(itself)h(to)f(enter)g(the)479 1119 y(instructions)f(returned)
-g(by)h Fq(pinstr)p Fv(,)f(b)n(ut)h(you)g(can)g(also)g(enter)g
-(additional)f(instructions.)p Black 396 1226 a Ft(\225)p
-Black 60 w Fq(write)p Fv(:)h(writes)h(the)f(document)e(to)j(the)f
-(passed)g(stream)g(as)h(XML)f(te)o(xt)g(using)g(the)g(passed)g(\(e)o
-(xternal\))e(encoding.)479 1334 y(The)i(generated)f(te)o(xt)h(is)h(al)o
-(w)o(ays)f(v)n(alid)g(XML)g(and)g(can)g(be)g(parsed)g(by)f(PXP;)i(ho)n
-(we)n(v)o(er)m(,)d(the)i(te)o(xt)g(is)h(badly)479 1442
-y(formatted)e(\(this)h(is)h(not)f(a)h(pretty)e(printer\).)-2
-1861 y Fx(3.2.)39 b(The)g(c)m(lass)g(type)g Fb(node)396
-2041 y Fv(From)20 b Fq(Pxp_document)p Fv(:)396 2221 y
-Fq(type)44 b(node_type)g(=)486 2318 y(T_data)396 2415
-y(|)h(T_element)e(of)i(string)396 2512 y(|)g(T_super_root)396
-2609 y(|)g(T_pinstr)e(of)i(string)396 2706 y(|)g(T_comment)396
-2804 y Fn(and)g(some)f(other,)g(reserved)f(types)396
-2901 y Fq(;;)396 3095 y(class)h(type)g([)h('ext)f(])h(node)f(=)486
-3192 y(object)g(\('self\))576 3289 y(constraint)f('ext)h(=)h('ext)f
-(node)g(#extension)576 3484 y(\(*)g Fn(General)g(observers)f
-Fq(*\))576 3678 y(method)g(extension)h(:)g('ext)576 3775
-y(method)f(dtd)i(:)f(dtd)576 3872 y(method)f(parent)h(:)h('ext)f(node)
-576 3969 y(method)f(root)i(:)f('ext)g(node)576 4066 y(method)f
-(sub_nodes)h(:)g('ext)h(node)f(list)576 4164 y(method)f(iter_nodes)h(:)
-g(\('ext)g(node)g(-)p Fo(>)h Fq(unit\))f(-)p Fo(>)g Fq(unit)576
-4261 y(method)f(iter_nodes_sibl)g(:)889 4358 y(\('ext)h(node)h(option)e
-(-)p Fo(>)i Fq('ext)f(node)g(-)p Fo(>)g Fq('ext)h(node)f(option)g(-)p
-Fo(>)g Fq(unit\))g(-)396 4455 y Fo(>)h Fq(unit)576 4552
-y(method)e(node_type)h(:)g(node_type)576 4649 y(method)f(encoding)h(:)h
-(Pxp_types.rep_encoding)576 4746 y(method)e(data)i(:)f(string)576
-4843 y(method)f(position)h(:)h(\(string)e(*)i(int)f(*)h(int\))p
-Black 3797 5278 a Fr(47)p Black eop
-%%Page: 48 48
-48 47 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 576 579 a Fq(method)43
-b(comment)h(:)h(string)f(option)576 676 y(method)f(pinstr)h(:)h(string)
-f(-)p Fo(>)g Fq(proc_instruction)e(list)576 773 y(method)h
-(pinstr_names)g(:)i(string)f(list)576 870 y(method)f(write)h(:)h
-(Pxp_types.output_stream)c(->)k(Pxp_types.encoding)c(->)k(unit)576
-1065 y(\(*)f Fn(Attribute)f(observers)h Fq(*\))576 1259
-y(method)f(attribute)h(:)g(string)g(-)p Fo(>)h Fq(Pxp_types.att_value)
-576 1356 y(method)e(required_string_attribute)e(:)k(string)f(-)p
-Fo(>)g Fq(string)576 1453 y(method)f(optional_string_attribute)e(:)k
-(string)f(-)p Fo(>)g Fq(string)g(option)576 1550 y(method)f
-(required_list_attribute)e(:)k(string)f(-)p Fo(>)g Fq(string)g(list)576
-1647 y(method)f(optional_list_attribute)e(:)k(string)f(-)p
-Fo(>)g Fq(string)g(list)576 1745 y(method)f(attribute_names)g(:)h
-(string)g(list)576 1842 y(method)f(attribute_type)g(:)i(string)e(-)p
-Fo(>)i Fq(Pxp_types.att_type)576 1939 y(method)e(attributes)h(:)g
-(\(string)g(*)h(Pxp_types.att_value\))c(list)576 2036
-y(method)i(id_attribute_name)f(:)j(string)576 2133 y(method)e
-(id_attribute_value)f(:)j(string)576 2230 y(method)e
-(idref_attribute_names)f(:)i(string)576 2424 y(\(*)g
-Fn(Modifying)f(methods)h Fq(*\))576 2619 y(method)f(add_node)h(:)h
-(?force:bool)e(-)p Fo(>)h Fq('ext)g(node)g(-)p Fo(>)h
-Fq(unit)576 2716 y(method)e(add_pinstr)h(:)g(proc_instruction)e(-)p
-Fo(>)j Fq(unit)576 2813 y(method)e(delete)h(:)h(unit)576
-2910 y(method)e(set_nodes)h(:)g('ext)h(node)f(list)g(-)p
-Fo(>)g Fq(unit)576 3007 y(method)f(quick_set_attributes)f(:)j(\(string)
-e(*)i(Pxp_types.att_value\))c(list)j(-)p Fo(>)h Fq(unit)576
-3104 y(method)e(set_comment)g(:)i(string)f(option)g(-)p
-Fo(>)g Fq(unit)576 3299 y(\(*)g Fn(Cloning)g(methods)f
-Fq(*\))576 3493 y(method)g(orphaned_clone)g(:)i('self)576
-3590 y(method)e(orphaned_flat_clone)f(:)j('self)576 3687
-y(method)e(create_element)g(:)1024 3784 y(?position:\(string)f(*)j(int)
-f(*)h(int\))f(-)p Fo(>)1024 3882 y Fq(dtd)g(-)p Fo(>)h
-Fq(node_type)e(-)p Fo(>)h Fq(\(string)g(*)h(string\))e(list)h(-)p
-Fo(>)1203 3979 y Fq('ext)g(node)576 4076 y(method)f(create_data)g(:)i
-(dtd)f(-)p Fo(>)h Fq(string)f(-)p Fo(>)g Fq('ext)g(node)576
-4173 y(method)f(keep_always_whitespace_mode)e(:)j(unit)576
-4367 y(\(*)g Fn(Validating)f(methods)h Fq(*\))576 4561
-y(method)f(local_validate)g(:)i(?use_dfa:bool)d(->)j(unit)f(->)g(unit)
-576 4756 y(\(*)g(...)g(Internal)g(methods)g(are)g(undocumented.)f(*\))p
-Black 3800 5278 a Fr(48)p Black eop
-%%Page: 49 49
-49 48 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 486 579 a Fq(end)396
-676 y(;;)396 867 y Fv(In)g(the)g(module)f Fq(Pxp_types)g
-Fv(you)h(can)g(\002nd)g(another)e(type)i(de\002nition)f(that)h(is)i
-(important)c(in)j(this)f(conte)o(xt:)396 1047 y Fq(type)44
-b(Pxp_types.att_value)e(=)576 1144 y(Value)223 b(of)44
-b(string)486 1241 y(|)h(Valuelist)e(of)h(string)g(list)486
-1339 y(|)h(Implied_value)396 1436 y(;;)-2 1847 y Fp(3.2.1.)35
-b(The)f(structure)f(of)g(document)i(trees)396 2015 y
-Fv(A)21 b(node)e(represents)g(either)h(an)g(element)g(or)g(a)g
-(character)f(data)h(section.)g(There)g(are)g(tw)o(o)g(classes)h
-(implementing)d(the)396 2122 y(tw)o(o)j(aspects)f(of)g(nodes:)g
-Fq(element_impl)e Fv(and)i Fq(data_impl)p Fv(.)f(The)h(latter)g(class)h
-(does)f(not)g(implement)f(all)i(methods)396 2230 y(because)f(some)g
-(methods)f(do)h(not)g(mak)o(e)f(sense)i(for)e(data)h(nodes.)396
-2380 y(\(Note:)g(PXP)h(also)g(supports)e(a)h(mode)g(which)f(forces)h
-(that)g(processing)f(instructions)g(and)h(comments)f(are)396
-2488 y(represented)g(as)i(nodes)e(of)h(the)g(document)e(tree.)i(Ho)n
-(we)n(v)o(er)m(,)e(these)j(nodes)e(are)h(instances)g(of)g
-Fq(element_impl)f Fv(with)396 2596 y(node)g(types)h Fq(T_pinstr)g
-Fv(and)f Fq(T_comment)p Fv(,)g(respecti)n(v)o(ely)-5
-b(.)18 b(This)j(mode)e(must)h(be)g(e)o(xplicitly)g(con\002gured;)d(the)
-k(basic)396 2704 y(representation)d(kno)n(ws)i(only)f(element)h(and)f
-(data)h(nodes.\))396 2853 y(The)g(follo)n(wing)f(\002gure)g(\()p
-Fr(A)h(tr)m(ee)h(with)g(element)f(nodes,)f(data)g(nodes,)h(and)f
-(attrib)n(utes)p Fv(\))h(sho)n(ws)g(an)g(e)o(xample)f(ho)n(w)h(a)396
-2961 y(tree)g(is)i(constructed)c(from)h(element)h(and)f(data)i(nodes.)e
-(The)h(circular)f(areas)h(represent)f(element)h(nodes)f(whereas)h(the)
-396 3069 y(o)o(v)n(als)f(denote)f(data)i(nodes.)e(Only)h(elements)g
-(may)g(ha)n(v)o(e)g(subnodes;)f(data)h(nodes)g(are)g(al)o(w)o(ays)h
-(lea)n(v)o(es)f(of)h(the)f(tree.)g(The)396 3177 y(subnodes)g(of)h(an)g
-(element)g(can)g(be)g(either)g(element)f(or)h(data)g(nodes;)g(in)g
-(both)f(cases)i(the)g(O'Caml)f(objects)g(storing)f(the)396
-3285 y(nodes)h(ha)n(v)o(e)f(the)i(class)g(type)e Fq(node)p
-Fv(.)396 3434 y(Attrib)n(utes)h(\(the)g(clouds)g(in)g(the)g(picture\))f
-(are)h(not)g(directly)g(inte)o(grated)e(into)i(the)g(tree;)h(there)e
-(is)i(al)o(w)o(ays)g(an)f(e)o(xtra)g(link)396 3542 y(to)h(the)f(attrib)
-n(ute)g(list.)h(This)f(is)h(also)g(true)f(for)f(processing)g
-(instructions)g(\(not)h(sho)n(wn)f(in)h(the)h(picture\).)d(This)j
-(means)396 3650 y(that)g(there)e(are)h(separated)g(access)g(methods)g
-(for)f(attrib)n(utes)h(and)g(processing)f(instructions.)p
-Black 3800 5278 a Fr(49)p Black eop
-%%Page: 50 50
-50 49 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fu(Figur)o(e)g(3-1.)f(A)i
-(tr)o(ee)e(with)i(element)f(nodes,)h(data)e(nodes,)i(and)f(attrib)n
-(utes)396 2578 y
- currentpoint currentpoint translate 1 1 scale neg exch neg exch translate
- 396 2578 a @beginspecial 0 @llx 0 @lly
-329 @urx 218 @ury 3290 @rwi @setspecial
-%%BeginDocument: pic/node_term.ps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: src/pic/node_term.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Sun Aug 27 02:05:42 2000
-%%For: gerd@ice (Gerd Stolpmann)
-%%Orientation: Portrait
-%%BoundingBox: 0 0 329 218
-%%Pages: 0
-%%BeginSetup
-%%EndSetup
-%%Magnification: 0.8000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
--1.0 251.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Helvetica-Bold /Helvetica-Bold-iso isovec ReEncode
-/Helvetica /Helvetica-iso isovec ReEncode
-/Helvetica-Oblique /Helvetica-Oblique-iso isovec ReEncode
- /DrawEllipse {
-       /endangle exch def
-       /startangle exch def
-       /yrad exch def
-       /xrad exch def
-       /y exch def
-       /x exch def
-       /savematrix mtrx currentmatrix def
-       x y tr xrad yrad sc 0 0 1 startangle endangle arc
-       closepath
-       savematrix setmatrix
-       } def
-
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 5962 m -1000 -1000 l 7537 -1000 l 7537 5962 l cp clip
- 0.05039 0.05039 sc
-% Polyline
-7.500 slw
-n 1770 2700 m 1665 2700 1665 3045 105 arcto 4 {pop} repeat
-  1665 3150 2730 3150 105 arcto 4 {pop} repeat
-  2835 3150 2835 2805 105 arcto 4 {pop} repeat
-  2835 2700 1770 2700 105 arcto 4 {pop} repeat
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Ellipse
-n 2250 1125 225 225 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 1575 2025 225 225 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 2925 2025 225 225 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 900 2925 242 242 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Polyline
-n 420 3825 m 315 3825 315 4170 105 arcto 4 {pop} repeat
-  315 4275 1380 4275 105 arcto 4 {pop} repeat
-  1485 4275 1485 3930 105 arcto 4 {pop} repeat
-  1485 3825 420 3825 105 arcto 4 {pop} repeat
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 2085 1275 m 1582 1807 l gs col0 s gr 
-% Polyline
-n 2407 1297 m 2940 1800 l gs col0 s gr 
-% Polyline
-n 1417 2190 m 900 2692 l gs col0 s gr 
-% Polyline
-n 1740 2190 m 2257 2700 l gs col0 s gr 
-% Polyline
-n 892 3180 m 892 3825 l gs col0 s gr 
-% Polyline
-n 45 675 m 6525 675 l 6525 4950 l 45 4950 l cp gs col0 s gr 
-% Polyline
-n 2250 3600 m 2263 3597 l 2277 3594 l 2293 3592 l 2309 3589 l 2326 3586 l
- 2344 3583 l 2362 3580 l 2381 3578 l 2399 3575 l 2418 3572 l
- 2436 3569 l 2454 3566 l 2471 3563 l 2488 3561 l 2504 3558 l
- 2520 3555 l 2537 3552 l 2555 3548 l 2571 3545 l 2588 3541 l
- 2604 3537 l 2621 3533 l 2637 3528 l 2653 3524 l 2669 3520 l
- 2684 3517 l 2700 3514 l 2715 3512 l 2730 3510 l 2745 3510 l
- 2762 3511 l 2777 3512 l 2793 3514 l 2807 3517 l 2821 3520 l
- 2835 3524 l 2849 3528 l 2863 3532 l 2877 3537 l 2893 3542 l
- 2908 3548 l 2925 3555 l 2938 3561 l 2951 3568 l 2965 3575 l
- 2978 3584 l 2992 3593 l 3007 3602 l 3021 3612 l 3035 3623 l
- 3050 3633 l 3064 3643 l 3079 3652 l 3093 3661 l 3108 3670 l
- 3122 3677 l 3136 3684 l 3150 3690 l 3166 3696 l 3182 3701 l
- 3198 3706 l 3214 3710 l 3230 3713 l 3246 3716 l 3263 3719 l
- 3279 3721 l 3295 3724 l 3311 3726 l 3327 3729 l 3343 3731 l
- 3359 3733 l 3375 3735 l 3391 3736 l 3407 3737 l 3423 3738 l
- 3439 3738 l 3455 3738 l 3471 3738 l 3488 3737 l 3504 3737 l
- 3520 3736 l 3536 3736 l 3552 3735 l 3568 3735 l 3584 3735 l
- 3600 3735 l 3616 3735 l 3632 3735 l 3648 3734 l 3663 3734 l
- 3678 3733 l 3693 3732 l 3708 3731 l 3723 3730 l 3739 3729 l
- 3755 3729 l 3771 3729 l 3788 3730 l 3806 3732 l 3825 3735 l
- 3840 3738 l 3856 3741 l 3874 3745 l 3892 3749 l 3911 3753 l
- 3931 3757 l 3951 3762 l 3972 3767 l 3993 3772 l 4014 3777 l
- 4034 3782 l 4054 3787 l 4072 3793 l 4089 3799 l 4105 3805 l
- 4119 3811 l 4130 3818 l 4140 3825 l 4150 3835 l 4157 3846 l
- 4161 3858 l 4163 3870 l 4164 3883 l 4163 3897 l 4161 3911 l
- 4159 3925 l 4156 3939 l 4154 3952 l 4151 3966 l 4148 3979 l
- 4144 3992 l 4140 4005 l 4135 4018 l 4128 4031 l 4121 4045 l
- 4112 4058 l 4104 4073 l 4095 4087 l 4085 4101 l 4075 4116 l
- 4065 4129 l 4055 4143 l 4043 4155 l 4032 4166 l 4019 4176 l
- 4005 4185 l 3992 4192 l 3978 4197 l 3963 4202 l 3947 4206 l
- 3930 4210 l 3913 4213 l 3896 4216 l 3878 4218 l 3861 4220 l
- 3843 4222 l 3825 4224 l 3807 4226 l 3789 4228 l 3771 4229 l
- 3753 4230 l 3735 4230 l 3717 4230 l 3698 4228 l 3678 4226 l
- 3659 4224 l 3639 4220 l 3619 4216 l 3598 4212 l 3578 4208 l
- 3557 4203 l 3536 4199 l 3516 4195 l 3496 4191 l 3477 4189 l
- 3457 4187 l 3438 4185 l 3420 4185 l 3402 4185 l 3384 4186 l
- 3367 4188 l 3350 4190 l 3333 4193 l 3317 4196 l 3301 4200 l
- 3285 4203 l 3269 4207 l 3253 4211 l 3237 4214 l 3220 4218 l
- 3203 4221 l 3186 4224 l 3168 4227 l 3150 4230 l 3132 4233 l
- 3113 4236 l 3094 4239 l 3074 4242 l 3055 4246 l 3035 4249 l
- 3015 4253 l 2995 4257 l 2974 4260 l 2954 4264 l 2934 4267 l
- 2914 4270 l 2894 4272 l 2874 4274 l 2855 4275 l 2835 4275 l
- 2815 4275 l 2795 4274 l 2775 4272 l 2755 4270 l 2734 4268 l
- 2713 4265 l 2692 4262 l 2671 4259 l 2650 4256 l 2630 4252 l
- 2609 4249 l 2590 4245 l 2571 4242 l 2553 4238 l 2536 4234 l
- 2520 4230 l 2503 4225 l 2487 4219 l 2473 4213 l 2460 4207 l
- 2448 4200 l 2437 4192 l 2426 4185 l 2415 4178 l 2404 4170 l
- 2393 4163 l 2380 4157 l 2368 4151 l 2354 4145 l 2340 4140 l
- 2325 4135 l 2310 4131 l 2294 4128 l 2277 4125 l 2260 4122 l
- 2243 4120 l 2225 4118 l 2208 4115 l 2191 4113 l 2174 4110 l
- 2158 4107 l 2143 4104 l 2128 4100 l 2115 4095 l 2101 4089 l
- 2087 4083 l 2074 4076 l 2061 4070 l 2049 4063 l 2037 4056 l
- 2025 4049 l 2014 4042 l 2004 4034 l 1995 4025 l 1987 4016 l
- 1980 4005 l 1975 3993 l 1972 3980 l 1971 3965 l 1970 3949 l
- 1971 3932 l 1972 3915 l 1973 3898 l 1974 3881 l 1976 3865 l
- 1977 3850 l 1978 3837 l 1980 3825 l 1983 3812 l 1986 3801 l
- 1990 3792 l 1994 3784 l 1998 3776 l 2003 3768 l 2008 3761 l
- 2013 3752 l 2019 3744 l 2025 3735 l 2032 3726 l 2040 3717 l
- 2048 3707 l 2057 3698 l 2066 3688 l 2075 3678 l 2084 3669 l
- 2094 3660 l 2104 3652 l 2115 3645 l 2127 3639 l 2138 3633 l
- 2150 3628 l 2162 3624 l 2174 3620 l 2186 3617 l 2200 3613 l
- 2214 3609 l 2231 3604 l cp gs col0 s gr 
-% Polyline
-n 3645 1080 m 3660 1077 l 3677 1074 l 3694 1071 l 3713 1068 l 3733 1065 l
- 3754 1063 l 3775 1060 l 3798 1058 l 3820 1056 l 3843 1053 l
- 3866 1051 l 3889 1049 l 3912 1047 l 3934 1045 l 3955 1043 l
- 3976 1041 l 3996 1039 l 4015 1038 l 4033 1036 l 4050 1035 l
- 4071 1034 l 4090 1033 l 4109 1032 l 4127 1032 l 4144 1031 l
- 4161 1031 l 4177 1031 l 4193 1031 l 4209 1031 l 4225 1031 l
- 4241 1031 l 4257 1032 l 4273 1032 l 4289 1033 l 4304 1034 l
- 4320 1035 l 4337 1037 l 4354 1039 l 4371 1041 l 4387 1044 l
- 4403 1047 l 4419 1050 l 4435 1053 l 4450 1057 l 4466 1060 l
- 4481 1063 l 4497 1067 l 4513 1071 l 4529 1075 l 4545 1080 l
- 4561 1085 l 4577 1091 l 4592 1097 l 4607 1103 l 4622 1110 l
- 4637 1118 l 4651 1125 l 4666 1132 l 4681 1140 l 4697 1147 l
- 4713 1153 l 4731 1159 l 4750 1165 l 4770 1170 l 4787 1174 l
- 4804 1177 l 4823 1180 l 4842 1182 l 4863 1184 l 4884 1186 l
- 4906 1188 l 4928 1189 l 4950 1190 l 4972 1192 l 4994 1193 l
- 5016 1195 l 5037 1197 l 5058 1200 l 5077 1203 l 5096 1206 l
- 5113 1210 l 5130 1215 l 5148 1221 l 5165 1228 l 5181 1235 l
- 5197 1242 l 5212 1250 l 5228 1259 l 5243 1267 l 5257 1276 l
- 5272 1285 l 5286 1294 l 5299 1303 l 5312 1312 l 5324 1322 l
- 5336 1331 l 5346 1340 l 5355 1350 l 5365 1363 l 5373 1378 l
- 5380 1392 l 5386 1408 l 5390 1424 l 5394 1440 l 5398 1456 l
- 5401 1472 l 5402 1488 l 5403 1502 l 5403 1517 l 5400 1530 l
- 5395 1543 l 5389 1555 l 5381 1568 l 5372 1580 l 5363 1592 l
- 5354 1604 l 5343 1616 l 5331 1627 l 5318 1638 l 5303 1648 l
- 5286 1657 l 5265 1665 l 5251 1669 l 5235 1673 l 5219 1677 l
- 5201 1680 l 5182 1683 l 5162 1685 l 5141 1688 l 5119 1690 l
- 5097 1692 l 5075 1694 l 5053 1696 l 5030 1697 l 5008 1699 l
- 4986 1701 l 4964 1703 l 4943 1704 l 4921 1706 l 4901 1707 l
- 4880 1709 l 4860 1710 l 4840 1711 l 4819 1712 l 4799 1713 l
- 4779 1713 l 4758 1713 l 4738 1714 l 4717 1714 l 4697 1714 l
- 4676 1714 l 4655 1714 l 4635 1714 l 4614 1714 l 4594 1714 l
- 4573 1714 l 4553 1713 l 4533 1713 l 4513 1713 l 4494 1712 l
- 4474 1711 l 4455 1710 l 4434 1709 l 4413 1707 l 4392 1705 l
- 4372 1703 l 4351 1701 l 4331 1698 l 4311 1695 l 4291 1692 l
- 4271 1690 l 4251 1687 l 4231 1684 l 4211 1681 l 4191 1678 l
- 4172 1675 l 4152 1673 l 4133 1670 l 4114 1668 l 4095 1665 l
- 4074 1662 l 4053 1659 l 4033 1657 l 4012 1654 l 3992 1651 l
- 3972 1648 l 3951 1645 l 3931 1643 l 3911 1640 l 3891 1637 l
- 3872 1634 l 3852 1631 l 3833 1628 l 3815 1626 l 3797 1623 l
- 3780 1620 l 3761 1617 l 3743 1614 l 3725 1611 l 3708 1608 l
- 3692 1605 l 3675 1602 l 3659 1600 l 3643 1597 l 3627 1594 l
- 3612 1591 l 3597 1587 l 3582 1584 l 3568 1580 l 3555 1575 l
- 3541 1569 l 3527 1563 l 3514 1556 l 3501 1550 l 3489 1543 l
- 3477 1536 l 3465 1529 l 3454 1522 l 3444 1514 l 3435 1505 l
- 3427 1496 l 3420 1485 l 3415 1473 l 3412 1460 l 3411 1445 l
- 3410 1430 l 3411 1414 l 3412 1397 l 3413 1380 l 3414 1364 l
- 3416 1348 l 3417 1333 l 3418 1318 l 3420 1305 l 3423 1290 l
- 3425 1275 l 3428 1261 l 3431 1247 l 3434 1233 l 3437 1220 l
- 3442 1207 l 3447 1194 l 3455 1182 l 3465 1170 l 3474 1162 l
- 3483 1155 l 3493 1148 l 3504 1141 l 3515 1134 l 3526 1127 l
- 3538 1121 l 3550 1114 l 3563 1108 l 3577 1102 l 3591 1096 l
- 3607 1090 l 3625 1085 l cp gs col0 s gr 
-% Polyline
-n 2475 1215 m 2477 1217 l 2482 1221 l 2491 1229 l 2503 1239 l 2517 1252 l
- 2534 1267 l 2552 1282 l 2570 1296 l 2588 1310 l 2605 1322 l
- 2621 1332 l 2638 1342 l 2655 1350 l 2669 1356 l 2684 1362 l
- 2700 1368 l 2717 1374 l 2734 1380 l 2752 1386 l 2770 1392 l
- 2789 1398 l 2808 1403 l 2827 1409 l 2846 1415 l 2865 1420 l
- 2884 1425 l 2902 1429 l 2920 1433 l 2937 1436 l 2954 1438 l
- 2970 1440 l 2988 1441 l 3006 1441 l 3024 1440 l 3041 1439 l
- 3059 1437 l 3076 1434 l 3094 1431 l 3111 1428 l 3129 1425 l
- 3146 1421 l 3162 1417 l 3179 1414 l 3195 1409 l 3211 1405 l
- 3226 1400 l 3240 1395 l 3256 1388 l 3271 1380 l 3287 1370 l
- 3304 1358 l 3322 1344 l 3340 1329 l 3359 1314 l 3376 1299 l
- 3391 1286 l 3404 1275 l 3412 1267 l 3418 1262 l 3420 1260 l gs col0 s gr 
-% Polyline
-n 1125 3060 m 1126 3063 l 1127 3068 l 1129 3078 l 1132 3093 l 1136 3112 l
- 1141 3135 l 1146 3162 l 1153 3190 l 1159 3219 l 1166 3248 l
- 1173 3275 l 1180 3301 l 1187 3324 l 1193 3345 l 1200 3364 l
- 1207 3381 l 1215 3397 l 1224 3414 l 1234 3429 l 1245 3444 l
- 1256 3459 l 1267 3473 l 1279 3486 l 1291 3499 l 1304 3512 l
- 1316 3525 l 1329 3537 l 1342 3550 l 1355 3562 l 1368 3574 l
- 1382 3585 l 1396 3596 l 1410 3607 l 1425 3617 l 1441 3626 l
- 1457 3635 l 1473 3644 l 1490 3653 l 1507 3661 l 1524 3669 l
- 1542 3677 l 1559 3685 l 1577 3692 l 1595 3700 l 1613 3706 l
- 1631 3713 l 1649 3718 l 1668 3723 l 1687 3727 l 1704 3730 l
- 1723 3732 l 1743 3733 l 1764 3734 l 1788 3734 l 1814 3733 l
- 1841 3732 l 1869 3731 l 1898 3729 l 1926 3727 l 1952 3725 l
- 1975 3724 l 1993 3722 l 2008 3721 l 2017 3721 l 2022 3720 l
- 2025 3720 l gs col0 s gr 
-/Helvetica-iso ff 180.00 scf sf
-3600 1260 m
-gs 1 -1 sc (attributes:) col0 sh gr
-/Helvetica-iso ff 180.00 scf sf
-3600 1485 m
-gs 1 -1 sc ("att" -> Value "apple") col0 sh gr
-/Helvetica-iso ff 180.00 scf sf
-2250 3780 m
-gs 1 -1 sc (attributes:) col0 sh gr
-/Helvetica-Oblique-iso ff 180.00 scf sf
-390 4725 m
-gs 1 -1 sc (<a att="apple"><b><a att="orange">An orange</a>Cherries</b><c/></a>) col0 sh gr
-/Helvetica-iso ff 180.00 scf sf
-2250 4005 m
-gs 1 -1 sc ("att" -> Value "orange") col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-1815 3015 m
-gs 1 -1 sc ("Cherries") col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-375 4125 m
-gs 1 -1 sc ("An orange") col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-750 2985 m
-gs 1 -1 sc (<a>) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-1410 2085 m
-gs 1 -1 sc (<b>) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-2790 2070 m
-gs 1 -1 sc (<c>) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-2100 1200 m
-gs 1 -1 sc (<a>) col0 sh gr
-$F2psEnd
-rs
-
-%%EndDocument
- @endspecial 396 2578 a
- currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch
-neg exch translate
- 396 2578 a 357 x Fv(Only)g(elements,)g(data)g
-(sections,)g(attrib)n(utes)g(and)g(processing)e(instructions)i(\(and)f
-(comments,)g(if)h(con\002gured\))e(can,)396 3043 y(directly)i(or)g
-(indirectly)-5 b(,)18 b(occur)h(in)h(the)h(document)d(tree.)i(It)g(is)h
-(impossible)f(to)g(add)g(entity)g(references)f(to)h(the)g(tree;)g(if)
-396 3151 y(the)g(parser)g(\002nds)g(such)g(a)h(reference,)d(not)i(the)g
-(reference)f(as)i(such)f(b)n(ut)g(the)g(referenced)e(te)o(xt)i(\(i.e.)g
-(the)g(tree)396 3259 y(representing)e(the)j(structured)d(te)o(xt\))i
-(is)h(included)e(in)h(the)g(tree.)396 3409 y(Note)g(that)h(the)f
-(parser)f(collapses)i(as)g(much)e(data)h(material)g(into)g(one)f(data)h
-(node)f(as)i(possible)f(such)g(that)g(there)g(are)396
-3517 y(normally)f(ne)n(v)o(er)g(tw)o(o)h(adjacent)f(data)i(nodes.)e
-(This)h(in)m(v)n(ariant)f(is)i(enforced)d(e)n(v)o(en)h(if)i(data)f
-(material)f(is)j(included)c(by)396 3625 y(entity)i(references)f(or)h
-(CD)m(A)-9 b(T)h(A)20 b(sections,)g(or)g(if)h(a)f(data)g(sequence)f(is)
-j(interrupted)c(by)h(comments.)g(So)i Fq(a)44 b(&amp;)g(b)396
-3732 y Fo(<)p Fq(-)h(comment)e(-)p Fo(>)i Fq(c)f Fo(<)p
-Fq(![CDATA[)g Fo(<>)g Fq(d]])p Fo(>)20 b Fv(is)h(represented)d(by)i
-(only)g(one)f(data)h(node,)f(for)h(instance.)396 3840
-y(Ho)n(we)n(v)o(er)m(,)e(you)i(can)g(create)g(document)e(trees)i
-(manually)f(which)h(break)f(this)i(in)m(v)n(ariant;)d(it)j(is)g(only)f
-(the)g(w)o(ay)g(the)396 3948 y(parser)g(forms)f(the)h(tree.)p
-Black 3800 5278 a Fr(50)p Black eop
-%%Page: 51 51
-51 50 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fu(Figur)o(e)g(3-2.)f
-(Nodes)h(ar)o(e)g(doubly)g(link)o(ed)i(tr)o(ees)396 1537
-y
- currentpoint currentpoint translate 1 1 scale neg exch neg exch translate
- 396 1537 a @beginspecial 0 @llx 0 @lly 138 @urx 93
-@ury 1380 @rwi @setspecial
-%%BeginDocument: pic/node_general.ps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: src/pic/node_general.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Sun Aug 27 02:05:42 2000
-%%For: gerd@ice (Gerd Stolpmann)
-%%Orientation: Portrait
-%%BoundingBox: 0 0 138 93
-%%Pages: 0
-%%BeginSetup
-%%EndSetup
-%%Magnification: 0.8000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
--22.0 126.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
- /DrawEllipse {
-       /endangle exch def
-       /startangle exch def
-       /yrad exch def
-       /xrad exch def
-       /y exch def
-       /x exch def
-       /savematrix mtrx currentmatrix def
-       x y tr xrad yrad sc 0 0 1 startangle endangle arc
-       closepath
-       savematrix setmatrix
-       } def
-
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 3487 m -1000 -1000 l 4162 -1000 l 4162 3487 l cp clip
- 0.05039 0.05039 sc
-7.500 slw
-% Ellipse
-n 2025 2025 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 1350 2025 225 225 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 2700 2025 225 225 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 2025 1125 225 225 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Polyline
-gs  clippath
-1743 1345 m 1845 1275 l 1788 1385 l 1877 1284 l 1832 1244 l cp
-clip
-n 1380 1800 m 1845 1275 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 1743 1345 m 1845 1275 l 1788 1385 l 1765 1365 l 1743 1345 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-1384 1745 m 1282 1815 l 1339 1705 l 1250 1807 l 1295 1846 l cp
-clip
-n 1815 1207 m 1282 1815 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 1384 1745 m 1282 1815 l 1339 1705 l 1361 1725 l 1384 1745 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-2025 1470 m 2055 1350 l 2085 1470 l 2085 1335 l 2025 1335 l cp
-clip
-n 2055 1792 m 2055 1350 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 2025 1470 m 2055 1350 l 2085 1470 l 2055 1470 l 2025 1470 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-2010 1687 m 1980 1807 l 1950 1687 l 1950 1822 l 2010 1822 l cp
-clip
-n 1980 1350 m 1980 1807 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 2010 1687 m 1980 1807 l 1950 1687 l 1980 1687 l 2010 1687 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-2511 1750 m 2550 1867 l 2461 1782 l 2533 1896 l 2583 1864 l cp
-clip
-n 2190 1297 m 2550 1867 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 2511 1750 m 2550 1867 l 2461 1782 l 2486 1766 l 2511 1750 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-2262 1353 m 2220 1237 l 2312 1320 l 2237 1208 l 2187 1241 l cp
-clip
-n 2602 1807 m 2220 1237 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 2262 1353 m 2220 1237 l 2312 1320 l 2287 1337 l 2262 1353 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-n 450 675 m 3150 675 l 3150 2475 l 450 2475 l cp gs col0 s gr 
-/Courier ff 150.00 scf sf
-2377 1342 m
-gs 1 -1 sc (parent) col0 sh gr
-/Courier ff 150.00 scf sf
-645 1628 m
-gs 1 -1 sc (sub_nodes) col0 sh gr
-$F2psEnd
-rs
-
-%%EndDocument
- @endspecial 396 1537 a
- currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch
-neg exch translate
- 396 1537 a 357 x Fv(The)e(node)f(tree)h(has)h
-(links)f(in)g(both)g(directions:)f(Ev)o(ery)g(node)g(has)h(a)h(link)f
-(to)g(its)i(parent)d(\(if)h(an)o(y\),)f(and)g(it)i(has)g(links)f(to)396
-2002 y(the)g(subnodes)f(\(see)i(\002gure)e Fr(Nodes)h(ar)m(e)h(doubly)d
-(link)o(ed)i(tr)m(ees)p Fv(\).)h(Ob)o(viously)-5 b(,)18
-b(this)i(doubly-link)o(ed)d(structure)396 2110 y(simpli\002es)k(the)f
-(na)n(vigation)e(in)j(the)f(tree;)g(b)n(ut)g(has)h(also)f(some)g
-(consequences)f(for)g(the)h(possible)g(operations)f(on)h(trees.)396
-2259 y(Because)h(e)n(v)o(ery)d(node)i(must)g(ha)n(v)o(e)f(at)i(most)f
-Fr(one)g Fv(parent)f(node,)g(operations)g(are)h(ille)o(gal)g(if)g(the)o
-(y)f(violate)h(this)396 2367 y(condition.)e(The)i(follo)n(wing)f
-(\002gure)g(\()p Fr(A)h(node)g(can)f(only)h(be)g(added)f(if)i(it)g(is)g
-(a)f(r)l(oot)q Fv(\))g(sho)n(ws)h(on)e(the)i(left)f(side)h(that)f(node)
-396 2475 y Fq(y)h Fv(is)g(added)e(to)h Fq(x)h Fv(as)g(ne)n(w)f(subnode)
-e(which)i(is)h(allo)n(wed)f(because)f Fq(y)i Fv(does)f(not)g(ha)n(v)o
-(e)f(a)i(parent)e(yet.)h(The)g(right)f(side)i(of)396
-2583 y(the)f(picture)g(illustrates)g(what)h(w)o(ould)e(happen)g(if)h
-Fq(y)h Fv(had)e(a)i(parent)e(node;)g(this)i(is)g(ille)o(gal)f(because)f
-Fq(y)i Fv(w)o(ould)e(ha)n(v)o(e)h(tw)o(o)396 2691 y(parents)g(after)g
-(the)g(operation.)396 2923 y Fu(Figur)o(e)g(3-3.)f(A)i(node)f(can)g
-(only)g(be)h(added)g(if)f(it)h(is)g(a)f(r)o(oot)396 4165
-y
- currentpoint currentpoint translate 1 1 scale neg exch neg exch translate
- 396 4165 a @beginspecial 0 @llx 0 @lly 422 @urx 127
-@ury 4220 @rwi @setspecial
-%%BeginDocument: pic/node_add.ps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: src/pic/node_add.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Sun Aug 27 02:05:42 2000
-%%For: gerd@ice (Gerd Stolpmann)
-%%Orientation: Portrait
-%%BoundingBox: 0 0 422 127
-%%Pages: 0
-%%BeginSetup
-%%EndSetup
-%%Magnification: 0.8000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
--33.0 171.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
- /DrawEllipse {
-       /endangle exch def
-       /startangle exch def
-       /yrad exch def
-       /xrad exch def
-       /y exch def
-       /x exch def
-       /savematrix mtrx currentmatrix def
-       x y tr xrad yrad sc 0 0 1 startangle endangle arc
-       closepath
-       savematrix setmatrix
-       } def
-
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 4387 m -1000 -1000 l 10012 -1000 l 10012 4387 l cp clip
- 0.05039 0.05039 sc
-7.500 slw
-% Ellipse
-n 6141 1350 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 6141 2250 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 5426 2250 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 6856 2250 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 7571 2925 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 8524 2925 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 8047 2250 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 1866 1350 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 1866 2250 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 1151 2250 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 2581 2250 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 3296 2925 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 4249 2925 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 3772 2250 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 8325 1350 242 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Polyline
-gs  clippath
-5507 1945 m 5402 2017 l 5460 1904 l 5369 2008 l 5415 2049 l cp
-clip
-n 5910 1440 m 5402 2017 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 5507 1945 m 5402 2017 l 5460 1904 l 5484 1924 l 5507 1945 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-6134 1902 m 6101 2025 l 6072 1901 l 6070 2039 l 6132 2041 l cp
-clip
-n 6109 1590 m 6101 2025 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 6134 1902 m 6101 2025 l 6072 1901 l 6103 1901 l 6134 1902 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-6649 1952 m 6697 2070 l 6599 1989 l 6681 2100 l 6731 2064 l cp
-clip
-n 6307 1537 m 6697 2070 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 6649 1952 m 6697 2070 l 6599 1989 l 6624 1970 l 6649 1952 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-7696 2606 m 7602 2692 l 7645 2572 l 7568 2687 l 7619 2722 l cp
-clip
-n 7832 2347 m 7602 2692 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7696 2606 m 7602 2692 l 7645 2572 l 7671 2589 l 7696 2606 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-8306 2632 m 8349 2752 l 8255 2666 l 8332 2782 l 8383 2747 l cp
-clip
-n 8150 2452 m 8349 2752 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 8306 2632 m 8349 2752 l 8255 2666 l 8281 2649 l 8306 2632 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-5853 1564 m 5958 1492 l 5899 1605 l 5991 1501 l 5945 1460 l cp
-clip
-n 5490 2017 m 5958 1492 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 5853 1564 m 5958 1492 l 5899 1605 l 5876 1584 l 5853 1564 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-6140 1698 m 6173 1575 l 6201 1699 l 6204 1561 l 6142 1559 l cp
-clip
-n 6164 2010 m 6173 1575 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 6140 1698 m 6173 1575 l 6201 1699 l 6170 1699 l 6140 1698 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-6404 1588 m 6355 1470 l 6454 1551 l 6371 1440 l 6321 1476 l cp
-clip
-n 6768 2025 m 6355 1470 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 6404 1588 m 6355 1470 l 6454 1551 l 6429 1569 l 6404 1588 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-7784 2499 m 7880 2415 l 7835 2534 l 7914 2420 l 7863 2385 l cp
-clip
-n 7673 2715 m 7880 2415 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7784 2499 m 7880 2415 l 7835 2534 l 7810 2517 l 7784 2499 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-8263 2535 m 8222 2415 l 8315 2502 l 8240 2386 l 8188 2419 l cp
-clip
-n 8412 2707 m 8222 2415 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 8263 2535 m 8222 2415 l 8315 2502 l 8289 2519 l 8263 2535 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-1232 1945 m 1127 2017 l 1185 1904 l 1094 2008 l 1140 2049 l cp
-clip
-n 1635 1440 m 1127 2017 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 1232 1945 m 1127 2017 l 1185 1904 l 1209 1924 l 1232 1945 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-1859 1902 m 1826 2025 l 1797 1901 l 1795 2039 l 1857 2041 l cp
-clip
-n 1834 1590 m 1826 2025 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 1859 1902 m 1826 2025 l 1797 1901 l 1828 1902 l 1859 1902 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-2374 1952 m 2422 2070 l 2324 1989 l 2406 2100 l 2456 2064 l cp
-clip
-n 2032 1537 m 2422 2070 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 2374 1952 m 2422 2070 l 2324 1989 l 2349 1970 l 2374 1952 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-3421 2606 m 3327 2692 l 3370 2572 l 3293 2687 l 3344 2722 l cp
-clip
-n 3557 2347 m 3327 2692 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 3421 2606 m 3327 2692 l 3370 2572 l 3396 2589 l 3421 2606 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-4031 2632 m 4074 2752 l 3980 2666 l 4057 2782 l 4108 2747 l cp
-clip
-n 3875 2452 m 4074 2752 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 4031 2632 m 4074 2752 l 3980 2666 l 4006 2649 l 4031 2632 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-1578 1564 m 1683 1492 l 1624 1605 l 1716 1501 l 1670 1460 l cp
-clip
-n 1215 2017 m 1683 1492 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 1578 1564 m 1683 1492 l 1624 1605 l 1601 1584 l 1578 1564 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-1865 1698 m 1898 1575 l 1926 1699 l 1929 1561 l 1867 1559 l cp
-clip
-n 1889 2010 m 1898 1575 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 1865 1698 m 1898 1575 l 1926 1699 l 1895 1698 l 1865 1698 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-2129 1588 m 2080 1470 l 2179 1551 l 2096 1440 l 2046 1476 l cp
-clip
-n 2493 2025 m 2080 1470 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 2129 1588 m 2080 1470 l 2179 1551 l 2154 1569 l 2129 1588 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-3509 2499 m 3605 2415 l 3560 2534 l 3639 2420 l 3588 2385 l cp
-clip
-n 3398 2715 m 3605 2415 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 3509 2499 m 3605 2415 l 3560 2534 l 3535 2517 l 3509 2499 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-3988 2535 m 3947 2415 l 4040 2502 l 3965 2386 l 3913 2419 l cp
-clip
-n 4137 2707 m 3947 2415 l gs col7 0.75 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 3988 2535 m 3947 2415 l 4040 2502 l 4014 2519 l 3988 2535 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
- [60] 0 sd
-n 6387 1372 m 8023 2017 l gs col7 0.75 shd ef gr gs col0 s gr  [] 0 sd
-% Polyline
-n 4950 900 m 9000 900 l 9000 3375 l 4950 3375 l cp gs col0 s gr 
-% Polyline
- [60] 0 sd
-n 2112 1372 m 3748 2017 l gs col7 0.75 shd ef gr gs col0 s gr  [] 0 sd
-% Polyline
-n 675 900 m 4725 900 l 4725 3375 l 675 3375 l cp gs col0 s gr 
-% Polyline
-gs  clippath
-8119 1904 m 8055 2010 l 8061 1886 l 8022 2016 l 8079 2033 l cp
-clip
-n 8197 1545 m 8055 2010 l gs col0 s gr gr
-
-% arrowhead
-n 8119 1904 m 8055 2010 l 8061 1886 l 8090 1895 l 8119 1904 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-8214 1695 m 8280 1590 l 8271 1713 l 8313 1585 l 8256 1566 l cp
-clip
-n 8137 2025 m 8280 1590 l gs col0 s gr gr
-
-% arrowhead
-n 8214 1695 m 8280 1590 l 8271 1713 l 8243 1704 l 8214 1695 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-30.000 slw
-gs  clippath
-7687 2205 m 7502 2333 l 7594 2129 l 7410 2351 l 7503 2428 l cp
-clip
-n 7875 1500 m 7620 1965 l 7845 1920 l 7485 2355 l gs col0 s gr gr
-
-% arrowhead
-15.000 slw
-n 7687 2205 m 7502 2333 l 7594 2129 l 7618 2195 l 7687 2205 l  cp gs 0.00 setgray ef gr  col0 s
-/Courier-Bold ff 195.00 scf sf
-6094 1379 m
-gs 1 -1 sc (x) col0 sh gr
-/Courier-Bold ff 195.00 scf sf
-7991 2265 m
-gs 1 -1 sc (y) col0 sh gr
-/Courier-Bold ff 195.00 scf sf
-1819 1379 m
-gs 1 -1 sc (x) col0 sh gr
-/Courier-Bold ff 195.00 scf sf
-3716 2265 m
-gs 1 -1 sc (y) col0 sh gr
-/Courier ff 180.00 scf sf
-6459 1335 m
-gs 1 -1 sc (x # add_node y) col0 sh gr
-/Courier ff 180.00 scf sf
-2214 1365 m
-gs 1 -1 sc (x # add_node y) col0 sh gr
-$F2psEnd
-rs
-
-%%EndDocument
- @endspecial 396 4165 a
- currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch
-neg exch translate
- 396 4165 a 357 x Fv(The)g("delete")g(operation)
-e(simply)i(remo)o(v)o(es)f(the)h(links)g(between)f(tw)o(o)i(nodes.)e
-(In)h(the)g(picture)f(\()p Fr(A)i(deleted)e(node)396
-4629 y(becomes)h(the)g(r)l(oot)g(of)h(the)f(subtr)m(ee)p
-Fv(\))g(the)g(node)f Fq(x)i Fv(is)g(deleted)e(from)h(the)g(list)h(of)f
-(subnodes)f(of)h Fq(y)p Fv(.)g(After)g(that,)g Fq(x)396
-4737 y Fv(becomes)g(the)g(root)f(of)h(the)g(subtree)g(starting)g(at)g
-(this)h(node.)p Black 3800 5278 a Fr(51)p Black eop
-%%Page: 52 52
-52 51 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fu(Figur)o(e)g(3-4.)f(A)i
-(deleted)f(node)g(becomes)h(the)f(r)o(oot)f(of)h(the)g(subtr)o(ee)396
-1912 y
- currentpoint currentpoint translate 1 1 scale neg exch neg exch translate
- 396 1912 a @beginspecial 0 @llx 0 @lly 388 @urx
-138 @ury 3880 @rwi @setspecial
-%%BeginDocument: pic/node_delete.ps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: src/pic/node_delete.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Sun Aug 27 02:05:42 2000
-%%For: gerd@ice (Gerd Stolpmann)
-%%Orientation: Portrait
-%%BoundingBox: 0 0 388 138
-%%Pages: 0
-%%BeginSetup
-%%EndSetup
-%%Magnification: 0.8000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
--78.0 205.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
- /DrawEllipse {
-       /endangle exch def
-       /startangle exch def
-       /yrad exch def
-       /xrad exch def
-       /y exch def
-       /x exch def
-       /savematrix mtrx currentmatrix def
-       x y tr xrad yrad sc 0 0 1 startangle endangle arc
-       closepath
-       savematrix setmatrix
-       } def
-
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 5062 m -1000 -1000 l 10237 -1000 l 10237 5062 l cp clip
- 0.05039 0.05039 sc
-7.500 slw
-% Ellipse
-n 2700 2700 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 2250 3600 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 3150 3600 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Polyline
-gs  clippath
-2322 3272 m 2235 3360 l 2271 3242 l 2202 3358 l 2253 3388 l cp
-clip
-n 2535 2857 m 2235 3360 l gs col0 s gr gr
-
-% arrowhead
-n 2322 3272 m 2235 3360 l 2271 3242 l 2296 3257 l 2322 3272 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-2978 3298 m 3000 3420 l 2924 3323 l 2979 3446 l 3034 3421 l cp
-clip
-n 2782 2932 m 3000 3420 l gs col0 s gr gr
-
-% arrowhead
-n 2978 3298 m 3000 3420 l 2924 3323 l 2951 3310 l 2978 3298 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-2500 2998 m 2587 2910 l 2552 3029 l 2620 2912 l 2569 2882 l cp
-clip
-n 2317 3367 m 2587 2910 l gs col0 s gr gr
-
-% arrowhead
-n 2500 2998 m 2587 2910 l 2552 3029 l 2526 3013 l 2500 2998 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-2864 3009 m 2842 2887 l 2918 2984 l 2863 2861 l 2808 2886 l cp
-clip
-n 3060 3375 m 2842 2887 l gs col0 s gr gr
-
-% arrowhead
-n 2864 3009 m 2842 2887 l 2918 2984 l 2891 2997 l 2864 3009 l  cp gs col7 1.00 shd ef gr  col0 s
-% Ellipse
-n 2700 1800 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 2025 2700 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 3375 2700 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 6345 1800 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 5670 2700 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 7020 2700 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 8325 1800 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 7875 2700 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 8775 2700 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Polyline
-gs  clippath
-2707 2152 m 2737 2032 l 2767 2152 l 2767 2017 l 2707 2017 l cp
-clip
-n 2737 2460 m 2737 2032 l gs col0 s gr gr
-
-% arrowhead
-n 2707 2152 m 2737 2032 l 2767 2152 l 2737 2152 l 2707 2152 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-2692 2347 m 2662 2467 l 2632 2347 l 2632 2482 l 2692 2482 l cp
-clip
-n 2662 2032 m 2662 2467 l gs col0 s gr gr
-
-% arrowhead
-n 2692 2347 m 2662 2467 l 2632 2347 l 2662 2347 l 2692 2347 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-1 slj
-60.000 slw
-n 4050 2610 m 4725 2610 l gs col0 s gr 
-% Polyline
-n 4050 2745 m 4725 2745 l gs col0 s gr 
-% Polyline
-1 slc
-n 4500 2385 m 4950 2655 l 4500 2970 l gs col0 s gr 
-% Polyline
-0 slj
-0 slc
-7.500 slw
-gs  clippath
-2125 2394 m 2025 2467 l 2078 2355 l 1992 2459 l 2039 2498 l cp
-clip
-n 2490 1905 m 2025 2467 l gs col0 s gr gr
-
-% arrowhead
-n 2125 2394 m 2025 2467 l 2078 2355 l 2101 2375 l 2125 2394 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-3158 2426 m 3202 2542 l 3109 2461 l 3186 2571 l 3235 2537 l cp
-clip
-n 2827 2002 m 3202 2542 l gs col0 s gr gr
-
-% arrowhead
-n 3158 2426 m 3202 2542 l 3109 2461 l 3134 2443 l 3158 2426 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-2436 2039 m 2535 1965 l 2482 2077 l 2568 1972 l 2521 1934 l cp
-clip
-n 2115 2475 m 2535 1965 l gs col0 s gr gr
-
-% arrowhead
-n 2436 2039 m 2535 1965 l 2482 2077 l 2459 2058 l 2436 2039 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-2916 2073 m 2872 1957 l 2965 2038 l 2888 1928 l 2839 1962 l cp
-clip
-n 3255 2505 m 2872 1957 l gs col0 s gr gr
-
-% arrowhead
-n 2916 2073 m 2872 1957 l 2965 2038 l 2941 2055 l 2916 2073 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-5770 2394 m 5670 2467 l 5723 2355 l 5637 2459 l 5684 2498 l cp
-clip
-n 6135 1905 m 5670 2467 l gs col0 s gr gr
-
-% arrowhead
-n 5770 2394 m 5670 2467 l 5723 2355 l 5746 2375 l 5770 2394 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-6803 2426 m 6847 2542 l 6754 2461 l 6831 2571 l 6880 2537 l cp
-clip
-n 6472 2002 m 6847 2542 l gs col0 s gr gr
-
-% arrowhead
-n 6803 2426 m 6847 2542 l 6754 2461 l 6779 2443 l 6803 2426 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-6081 2039 m 6180 1965 l 6127 2077 l 6213 1972 l 6166 1934 l cp
-clip
-n 5760 2475 m 6180 1965 l gs col0 s gr gr
-
-% arrowhead
-n 6081 2039 m 6180 1965 l 6127 2077 l 6104 2058 l 6081 2039 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-6561 2073 m 6517 1957 l 6610 2038 l 6533 1928 l 6484 1962 l cp
-clip
-n 6900 2505 m 6517 1957 l gs col0 s gr gr
-
-% arrowhead
-n 6561 2073 m 6517 1957 l 6610 2038 l 6586 2055 l 6561 2073 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-7947 2372 m 7860 2460 l 7896 2342 l 7827 2458 l 7878 2488 l cp
-clip
-n 8160 1957 m 7860 2460 l gs col0 s gr gr
-
-% arrowhead
-n 7947 2372 m 7860 2460 l 7896 2342 l 7921 2357 l 7947 2372 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-8603 2398 m 8625 2520 l 8549 2423 l 8604 2546 l 8659 2521 l cp
-clip
-n 8407 2032 m 8625 2520 l gs col0 s gr gr
-
-% arrowhead
-n 8603 2398 m 8625 2520 l 8549 2423 l 8576 2410 l 8603 2398 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-8125 2098 m 8212 2010 l 8177 2129 l 8245 2012 l 8194 1982 l cp
-clip
-n 7942 2467 m 8212 2010 l gs col0 s gr gr
-
-% arrowhead
-n 8125 2098 m 8212 2010 l 8177 2129 l 8151 2113 l 8125 2098 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-8489 2109 m 8467 1987 l 8543 2084 l 8488 1961 l 8433 1986 l cp
-clip
-n 8685 2475 m 8467 1987 l gs col0 s gr gr
-
-% arrowhead
-n 8489 2109 m 8467 1987 l 8543 2084 l 8516 2097 l 8489 2109 l  cp gs col7 1.00 shd ef gr  col0 s
-/Courier ff 180.00 scf sf
-3960 2250 m
-gs 1 -1 sc (x # delete) col0 sh gr
-% Polyline
-1 slj
-1 slc
-45.000 slw
-n 2595 2362 m 2820 2137 l gs col0 s gr 
-% Polyline
-n 2595 2137 m 2820 2362 l gs col0 s gr 
-% Polyline
-0 slj
-0 slc
-7.500 slw
-n 1575 1350 m 9225 1350 l 9225 4050 l 1575 4050 l cp gs col0 s gr 
-/Courier-Bold ff 180.00 scf sf
-2640 2752 m
-gs 1 -1 sc (x) col0 sh gr
-/Courier-Bold ff 180.00 scf sf
-8280 1845 m
-gs 1 -1 sc (x) col0 sh gr
-/Courier-Bold ff 180.00 scf sf
-2655 1845 m
-gs 1 -1 sc (y) col0 sh gr
-/Courier-Bold ff 180.00 scf sf
-6300 1845 m
-gs 1 -1 sc (y) col0 sh gr
-$F2psEnd
-rs
-
-%%EndDocument
- @endspecial 396 1912 a
- currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch
-neg exch translate
- 396 1912 a 357 x Fv(It)g(is)h(also)e(possible)h
-(to)f(mak)o(e)h(a)g(clone)e(of)i(a)g(subtree;)f(illustrated)g(in)h
-Fr(The)f(clone)g(of)h(a)f(subtr)m(ee)p Fv(.)h(In)f(this)h(case,)g(the)f
-(clone)396 2377 y(is)i(a)g(cop)o(y)e(of)h(the)g(original)f(subtree)h(e)
-o(xcept)f(that)h(it)h(is)h(no)d(longer)g(a)i(subnode.)d(Because)i
-(cloning)f(ne)n(v)o(er)g(k)o(eeps)h(the)396 2485 y(connection)e(to)j
-(the)f(parent,)f(the)h(clones)g(are)g(called)g Fr(orphaned)r
-Fv(.)396 2717 y Fu(Figur)o(e)g(3-5.)f(The)i(clone)f(of)g(a)g(subtr)o
-(ee)396 4050 y
- currentpoint currentpoint translate 1 1 scale neg exch neg exch translate
- 396 4050 a @beginspecial 0 @llx 0 @lly
-388 @urx 138 @ury 3880 @rwi @setspecial
-%%BeginDocument: pic/node_clone.ps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: src/pic/node_clone.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Sun Aug 27 02:05:42 2000
-%%For: gerd@ice (Gerd Stolpmann)
-%%Orientation: Portrait
-%%BoundingBox: 0 0 388 138
-%%Pages: 0
-%%BeginSetup
-%%EndSetup
-%%Magnification: 0.8000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
--78.0 205.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
- /DrawEllipse {
-       /endangle exch def
-       /startangle exch def
-       /yrad exch def
-       /xrad exch def
-       /y exch def
-       /x exch def
-       /savematrix mtrx currentmatrix def
-       x y tr xrad yrad sc 0 0 1 startangle endangle arc
-       closepath
-       savematrix setmatrix
-       } def
-
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 5062 m -1000 -1000 l 10237 -1000 l 10237 5062 l cp clip
- 0.05039 0.05039 sc
-7.500 slw
-% Ellipse
-n 2700 1800 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 2025 2700 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 3375 2700 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 6345 1800 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 5670 2700 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 7020 2700 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 8325 1800 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 7875 2700 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 8775 2700 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 6345 2700 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 5895 3600 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 6795 3600 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 2700 2700 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 2250 3600 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 3150 3600 229 229 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Polyline
-1 slj
-60.000 slw
-n 4050 2610 m 4725 2610 l gs col0 s gr 
-% Polyline
-n 4050 2745 m 4725 2745 l gs col0 s gr 
-% Polyline
-1 slc
-n 4500 2385 m 4950 2655 l 4500 2970 l gs col0 s gr 
-% Polyline
-0 slj
-0 slc
-7.500 slw
-gs  clippath
-2125 2394 m 2025 2467 l 2078 2355 l 1992 2459 l 2039 2498 l cp
-clip
-n 2490 1905 m 2025 2467 l gs col0 s gr gr
-
-% arrowhead
-n 2125 2394 m 2025 2467 l 2078 2355 l 2101 2375 l 2125 2394 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-3158 2426 m 3202 2542 l 3109 2461 l 3186 2571 l 3235 2537 l cp
-clip
-n 2827 2002 m 3202 2542 l gs col0 s gr gr
-
-% arrowhead
-n 3158 2426 m 3202 2542 l 3109 2461 l 3134 2443 l 3158 2426 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-2436 2039 m 2535 1965 l 2482 2077 l 2568 1972 l 2521 1934 l cp
-clip
-n 2115 2475 m 2535 1965 l gs col0 s gr gr
-
-% arrowhead
-n 2436 2039 m 2535 1965 l 2482 2077 l 2459 2058 l 2436 2039 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-2916 2073 m 2872 1957 l 2965 2038 l 2888 1928 l 2839 1962 l cp
-clip
-n 3255 2505 m 2872 1957 l gs col0 s gr gr
-
-% arrowhead
-n 2916 2073 m 2872 1957 l 2965 2038 l 2941 2055 l 2916 2073 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-5770 2394 m 5670 2467 l 5723 2355 l 5637 2459 l 5684 2498 l cp
-clip
-n 6135 1905 m 5670 2467 l gs col0 s gr gr
-
-% arrowhead
-n 5770 2394 m 5670 2467 l 5723 2355 l 5746 2375 l 5770 2394 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-6803 2426 m 6847 2542 l 6754 2461 l 6831 2571 l 6880 2537 l cp
-clip
-n 6472 2002 m 6847 2542 l gs col0 s gr gr
-
-% arrowhead
-n 6803 2426 m 6847 2542 l 6754 2461 l 6779 2443 l 6803 2426 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-6081 2039 m 6180 1965 l 6127 2077 l 6213 1972 l 6166 1934 l cp
-clip
-n 5760 2475 m 6180 1965 l gs col0 s gr gr
-
-% arrowhead
-n 6081 2039 m 6180 1965 l 6127 2077 l 6104 2058 l 6081 2039 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-6561 2073 m 6517 1957 l 6610 2038 l 6533 1928 l 6484 1962 l cp
-clip
-n 6900 2505 m 6517 1957 l gs col0 s gr gr
-
-% arrowhead
-n 6561 2073 m 6517 1957 l 6610 2038 l 6586 2055 l 6561 2073 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-7947 2372 m 7860 2460 l 7896 2342 l 7827 2458 l 7878 2488 l cp
-clip
-n 8160 1957 m 7860 2460 l gs col0 s gr gr
-
-% arrowhead
-n 7947 2372 m 7860 2460 l 7896 2342 l 7921 2357 l 7947 2372 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-8603 2398 m 8625 2520 l 8549 2423 l 8604 2546 l 8659 2521 l cp
-clip
-n 8407 2032 m 8625 2520 l gs col0 s gr gr
-
-% arrowhead
-n 8603 2398 m 8625 2520 l 8549 2423 l 8576 2410 l 8603 2398 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-8125 2098 m 8212 2010 l 8177 2129 l 8245 2012 l 8194 1982 l cp
-clip
-n 7942 2467 m 8212 2010 l gs col0 s gr gr
-
-% arrowhead
-n 8125 2098 m 8212 2010 l 8177 2129 l 8151 2113 l 8125 2098 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-8489 2109 m 8467 1987 l 8543 2084 l 8488 1961 l 8433 1986 l cp
-clip
-n 8685 2475 m 8467 1987 l gs col0 s gr gr
-
-% arrowhead
-n 8489 2109 m 8467 1987 l 8543 2084 l 8516 2097 l 8489 2109 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-6352 2152 m 6382 2032 l 6412 2152 l 6412 2017 l 6352 2017 l cp
-clip
-n 6382 2460 m 6382 2032 l gs col0 s gr gr
-
-% arrowhead
-n 6352 2152 m 6382 2032 l 6412 2152 l 6382 2152 l 6352 2152 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-6337 2347 m 6307 2467 l 6277 2347 l 6277 2482 l 6337 2482 l cp
-clip
-n 6307 2032 m 6307 2467 l gs col0 s gr gr
-
-% arrowhead
-n 6337 2347 m 6307 2467 l 6277 2347 l 6307 2347 l 6337 2347 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-5967 3272 m 5880 3360 l 5916 3242 l 5847 3358 l 5898 3388 l cp
-clip
-n 6180 2857 m 5880 3360 l gs col0 s gr gr
-
-% arrowhead
-n 5967 3272 m 5880 3360 l 5916 3242 l 5941 3257 l 5967 3272 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-6623 3298 m 6645 3420 l 6569 3323 l 6624 3446 l 6679 3421 l cp
-clip
-n 6427 2932 m 6645 3420 l gs col0 s gr gr
-
-% arrowhead
-n 6623 3298 m 6645 3420 l 6569 3323 l 6596 3310 l 6623 3298 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-6145 2998 m 6232 2910 l 6197 3029 l 6265 2912 l 6214 2882 l cp
-clip
-n 5962 3367 m 6232 2910 l gs col0 s gr gr
-
-% arrowhead
-n 6145 2998 m 6232 2910 l 6197 3029 l 6171 3013 l 6145 2998 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-6509 3009 m 6487 2887 l 6563 2984 l 6508 2861 l 6453 2886 l cp
-clip
-n 6705 3375 m 6487 2887 l gs col0 s gr gr
-
-% arrowhead
-n 6509 3009 m 6487 2887 l 6563 2984 l 6536 2997 l 6509 3009 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-2707 2152 m 2737 2032 l 2767 2152 l 2767 2017 l 2707 2017 l cp
-clip
-n 2737 2460 m 2737 2032 l gs col0 s gr gr
-
-% arrowhead
-n 2707 2152 m 2737 2032 l 2767 2152 l 2737 2152 l 2707 2152 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-2692 2347 m 2662 2467 l 2632 2347 l 2632 2482 l 2692 2482 l cp
-clip
-n 2662 2032 m 2662 2467 l gs col0 s gr gr
-
-% arrowhead
-n 2692 2347 m 2662 2467 l 2632 2347 l 2662 2347 l 2692 2347 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-2322 3272 m 2235 3360 l 2271 3242 l 2202 3358 l 2253 3388 l cp
-clip
-n 2535 2857 m 2235 3360 l gs col0 s gr gr
-
-% arrowhead
-n 2322 3272 m 2235 3360 l 2271 3242 l 2296 3257 l 2322 3272 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-2978 3298 m 3000 3420 l 2924 3323 l 2979 3446 l 3034 3421 l cp
-clip
-n 2782 2932 m 3000 3420 l gs col0 s gr gr
-
-% arrowhead
-n 2978 3298 m 3000 3420 l 2924 3323 l 2951 3310 l 2978 3298 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-2500 2998 m 2587 2910 l 2552 3029 l 2620 2912 l 2569 2882 l cp
-clip
-n 2317 3367 m 2587 2910 l gs col0 s gr gr
-
-% arrowhead
-n 2500 2998 m 2587 2910 l 2552 3029 l 2526 3013 l 2500 2998 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-2864 3009 m 2842 2887 l 2918 2984 l 2863 2861 l 2808 2886 l cp
-clip
-n 3060 3375 m 2842 2887 l gs col0 s gr gr
-
-% arrowhead
-n 2864 3009 m 2842 2887 l 2918 2984 l 2891 2997 l 2864 3009 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-n 1575 1350 m 9225 1350 l 9225 4050 l 1575 4050 l cp gs col0 s gr 
-/Courier-Bold ff 180.00 scf sf
-2655 1845 m
-gs 1 -1 sc (y) col0 sh gr
-/Courier-Bold ff 180.00 scf sf
-6300 1845 m
-gs 1 -1 sc (y) col0 sh gr
-/Courier-Bold ff 180.00 scf sf
-6285 2752 m
-gs 1 -1 sc (x) col0 sh gr
-/Courier-Bold ff 180.00 scf sf
-2640 2752 m
-gs 1 -1 sc (x) col0 sh gr
-/Courier ff 180.00 scf sf
-3690 2025 m
-gs 1 -1 sc (let x' =) col0 sh gr
-/Courier ff 180.00 scf sf
-3690 2205 m
-gs 1 -1 sc (x # orphaned_clone) col0 sh gr
-/Courier-Bold ff 180.00 scf sf
-8235 1845 m
-gs 1 -1 sc (x') col0 sh gr
-$F2psEnd
-rs
-
-%%EndDocument
- @endspecial 396 4050 a
- currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch
-neg exch translate
- 396 4050 a -2 4627 a Fp(3.2.2.)35
-b(The)f(methods)g(of)f(the)h(c)n(lass)h(type)f Fc(node)p
-Black 3800 5278 a Fr(52)p Black eop
-%%Page: 53 53
-53 52 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fu(General)g(obser)o(v)o
-(ers)g(.)p Black 396 866 a Ft(\225)p Black 60 w Fq(extension)p
-Fv(:)g(The)f(reference)g(to)h(the)h(e)o(xtension)d(object)i(which)g
-(belongs)f(to)h(this)h(node)e(\(see)h(...\).)p Black
-396 974 a Ft(\225)p Black 60 w Fq(dtd)p Fv(:)h(Returns)f(a)g(reference)
-f(to)h(the)g(global)g(DTD.)g(All)h(nodes)e(of)h(a)h(tree)f(must)g
-(share)g(the)g(same)h(DTD.)p Black 396 1082 a Ft(\225)p
-Black 60 w Fq(parent)p Fv(:)f(Get)h(the)f(f)o(ather)f(node.)g(Raises)j
-Fq(Not_found)d Fv(in)i(the)f(case)g(the)h(node)e(does)h(not)f(ha)n(v)o
-(e)h(a)h(parent,)e(i.e.)h(the)479 1190 y(node)f(is)j(the)e(root.)p
-Black 396 1298 a Ft(\225)p Black 60 w Fq(root)p Fv(:)g(Gets)h(the)g
-(reference)d(to)i(the)h(root)e(node)g(of)h(the)g(tree.)g(Ev)o(ery)f
-(node)g(is)i(contained)e(in)h(a)h(tree)f(with)h(a)f(root,)f(so)479
-1406 y(this)h(method)f(al)o(w)o(ays)h(succeeds.)e(Note)i(that)g(this)g
-(method)e Fr(sear)m(c)o(hes)h Fv(the)h(root,)e(which)h(costs)h(time)g
-(proportional)d(to)479 1514 y(the)j(length)g(of)g(the)g(path)g(to)g
-(the)g(root.)p Black 396 1622 a Ft(\225)p Black 60 w
-Fq(sub_nodes)p Fv(:)g(Returns)g(references)e(to)j(the)f(children.)f
-(The)g(returned)g(list)i(re\003ects)g(the)f(order)f(of)h(the)g
-(children.)e(F)o(or)479 1730 y(data)i(nodes,)g(this)g(method)f(returns)
-g(the)i(empty)e(list.)p Black 396 1838 a Ft(\225)p Black
-60 w Fq(iter_nodes)43 b(f)p Fv(:)21 b(Iterates)f(o)o(v)o(er)f(the)h
-(children,)f(and)g(calls)i Fq(f)g Fv(for)e(e)n(v)o(ery)g(child)h(in)g
-(turn.)p Black 396 1945 a Ft(\225)p Black 60 w Fq(iter_nodes_sibl)43
-b(f)p Fv(:)20 b(Iterates)g(o)o(v)o(er)f(the)h(children,)f(and)h(calls)g
-Fq(f)h Fv(for)f(e)n(v)o(ery)e(child)i(in)h(turn.)e Fq(f)h
-Fv(gets)h(as)479 2053 y(ar)o(guments)d(the)j(pre)n(vious)d(node,)h(the)
-h(current)f(node,)g(and)h(the)g(ne)o(xt)f(node.)p Black
-396 2161 a Ft(\225)p Black 60 w Fq(node_type)p Fv(:)h(Returns)g(either)
-f Fq(T_data)h Fv(which)g(means)g(that)g(the)g(node)f(is)i(a)g(data)f
-(node,)f(or)h Fq(T_element)43 b(n)479 2269 y Fv(which)20
-b(means)g(that)g(the)g(node)f(is)j(an)e(element)f(of)h(type)g
-Fq(n)p Fv(.)g(If)g(con\002gured,)e(possible)i(node)f(types)h(are)g
-(also)479 2377 y Fq(T_pinstr)44 b(t)20 b Fv(indicating)f(that)h(the)h
-(node)e(represents)g(a)i(processing)e(instruction)g(with)h(tar)o(get)f
-Fq(t)p Fv(,)i(and)479 2485 y Fq(T_comment)f Fv(in)g(which)g(case)g(the)
-g(node)g(is)h(a)f(comment.)p Black 396 2593 a Ft(\225)p
-Black 60 w Fq(encoding)p Fv(:)g(Returns)g(the)g(encoding)e(of)i(the)g
-(strings.)p Black 396 2701 a Ft(\225)p Black 60 w Fq(data)p
-Fv(:)g(Returns)g(the)h(character)e(data)h(of)g(this)g(node)f(and)h(all)
-h(children,)d(concatenated)h(as)i(one)e(string.)h(The)479
-2809 y(encoding)e(of)i(the)h(string)e(is)j(what)e(the)g(method)f
-Fq(encoding)g Fv(returns.)g(-)i(F)o(or)e(data)h(nodes,)g(this)g(method)
-f(simply)479 2917 y(returns)h(the)g(represented)e(characters.)h(F)o(or)
-h(elements,)g(the)g(meaning)f(of)g(the)i(method)d(has)j(been)e(e)o
-(xtended)g(such)479 3025 y(that)i(it)f(returns)g(something)e(useful,)i
-(i.e.)g(the)g(ef)n(fecti)n(v)o(ely)f(contained)f(characters,)h(without)
-h(markup.)e(\(F)o(or)479 3133 y Fq(T_pinstr)i Fv(and)f
-Fq(T_comment)h Fv(nodes,)f(the)h(method)f(returns)g(the)h(empty)g
-(string.\))p Black 396 3241 a Ft(\225)p Black 60 w Fq(position)p
-Fv(:)g(If)g(con\002gured,)d(this)k(method)e(returns)g(the)h(position)g
-(of)g(the)g(element)g(as)g(triple)g(\(entity)-5 b(,)19
-b(line,)479 3349 y(byteposition\).)f(F)o(or)i(data)g(nodes,)f(the)h
-(position)g(is)h(not)f(stored.)f(If)h(the)g(position)g(is)h(not)f(a)n
-(v)n(ailable)f(the)i(triple)f Fq("?",)479 3456 y(0,)45
-b(0)20 b Fv(is)h(returned.)p Black 396 3564 a Ft(\225)p
-Black 60 w Fq(comment)p Fv(:)f(Returns)g Fq(Some)44 b(text)20
-b Fv(for)f(comment)g(nodes,)g(and)g Fq(None)h Fv(for)g(other)f(nodes.)g
-(The)h Fq(text)f Fv(is)i(e)n(v)o(erything)479 3672 y(between)f(the)g
-(comment)f(delimiters)g Fo(<)p Fq(-)i Fv(and)e Fq(-)p
-Fo(>)p Fv(.)p Black 396 3780 a Ft(\225)p Black 60 w Fq(pinstr)44
-b(n)p Fv(:)21 b(Returns)f(all)h(processing)d(instructions)i(that)g(are)
-g(directly)f(contained)g(in)h(this)h(element)e(and)h(that)g(ha)n(v)o(e)
-479 3888 y(a)h Fr(tar)m(g)o(et)h Fv(speci\002cation)d(of)h
-Fq(n)p Fv(.)g(The)g(tar)o(get)f(is)j(the)e(\002rst)h(w)o(ord)e(after)h
-(the)g Fo(<)p Fq(?)p Fv(.)p Black 396 3996 a Ft(\225)p
-Black 60 w Fq(pinstr_names)p Fv(:)f(Returns)h(the)g(list)i(of)e(all)g
-(tar)o(gets)g(of)g(processing)f(instructions)g(directly)g(contained)g
-(in)h(this)479 4104 y(element.)p Black 396 4212 a Ft(\225)p
-Black 60 w Fq(write)44 b(s)h(enc)p Fv(:)20 b(Prints)h(the)f(node)f(and)
-h(all)h(subnodes)d(to)j(the)f(passed)g(output)f(stream)h(as)h(v)n(alid)
-f(XML)g(te)o(xt,)g(using)479 4320 y(the)g(passed)h(e)o(xternal)e
-(encoding.)396 4511 y Fu(Attrib)n(ute)h(obser)o(v)o(ers)h(.)p
-Black 396 4743 a Ft(\225)p Black 60 w Fq(attribute)44
-b(n)p Fv(:)20 b(Returns)g(the)h(v)n(alue)e(of)h(the)g(attrib)n(ute)g
-(with)g(name)g Fq(n)p Fv(.)g(This)h(method)d(returns)i(a)g(v)n(alue)g
-(for)f(e)n(v)o(ery)479 4851 y(declared)g(attrib)n(ute,)h(and)f(it)i
-(raises)g Fq(Not_found)e Fv(for)h(an)o(y)f(undeclared)f(attrib)n(ute.)i
-(Note)g(that)g(it)h(e)n(v)o(en)e(returns)h(a)p Black
-3800 5278 a Fr(53)p Black eop
-%%Page: 54 54
-54 53 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 479 579 a Fv(v)n(alue)g(if)g(the)g
-(attrib)n(ute)g(is)h(actually)f(missing)g(b)n(ut)g(is)h(declared)e(as)i
-Fq(#IMPLIED)f Fv(or)g(has)g(a)h(def)o(ault)e(v)n(alue.)g(-)i(Possible)
-479 687 y(v)n(alues)f(are:)p Black 479 919 a Fa(\225)p
-Black 62 w Fq(Implied_value)p Fv(:)f(The)h(attrib)n(ute)g(has)g(been)g
-(declared)e(with)j(the)f(k)o(e)o(yw)o(ord)e Fq(#IMPLIED)p
-Fv(,)i(and)f(the)h(attrib)n(ute)g(is)562 1027 y(missing)g(in)h(the)f
-(attrib)n(ute)g(list)h(of)f(this)h(element.)p Black 479
-1135 a Fa(\225)p Black 62 w Fq(Value)44 b(s)p Fv(:)21
-b(The)f(attrib)n(ute)g(has)g(been)g(declared)e(as)j(type)f
-Fq(CDATA)p Fv(,)g(as)h Fq(ID)p Fv(,)f(as)h Fq(IDREF)p
-Fv(,)e(as)i Fq(ENTITY)p Fv(,)f(or)g(as)562 1243 y Fq(NMTOKEN)p
-Fv(,)g(or)g(as)g(enumeration)e(or)i(notation,)f(and)g(one)h(of)g(the)g
-(tw)o(o)h(conditions)d(holds:)i(\(1\))g(The)g(attrib)n(ute)562
-1351 y(v)n(alue)g(is)h(present)e(in)i(the)f(attrib)n(ute)g(list)h(in)f
-(which)g(case)h(the)f(v)n(alue)f(is)j(returned)c(in)i(the)h(string)e
-Fq(s)p Fv(.)i(\(2\))e(The)562 1459 y(attrib)n(ute)h(has)h(been)e
-(omitted,)g(and)h(the)g(DTD)g(declared)f(the)i(attrib)n(ute)e(with)i(a)
-f(def)o(ault)g(v)n(alue.)f(The)h(def)o(ault)562 1567
-y(v)n(alue)f(is)i(returned)d(in)i Fq(s)p Fv(.)g(-)g(Summarized,)d
-Fq(Value)44 b(s)20 b Fv(is)h(returned)d(for)h(non-implied,)e(non-list)i
-(attrib)n(ute)g(v)n(alues.)p Black 479 1675 a Fa(\225)p
-Black 62 w Fq(Valuelist)44 b(l)p Fv(:)20 b(The)g(attrib)n(ute)g(has)g
-(been)g(declared)f(as)i(type)e Fq(IDREFS)p Fv(,)h(as)h
-Fq(ENTITIES)p Fv(,)e(or)h(as)h Fq(NMTOKENS)p Fv(,)562
-1783 y(and)f(one)g(of)f(the)i(tw)o(o)f(conditions)f(holds:)h(\(1\))f
-(The)h(attrib)n(ute)g(v)n(alue)f(is)i(present)f(in)g(the)h(attrib)n
-(ute)e(list)j(in)e(which)562 1891 y(case)h(the)f(space-separated)e(tok)
-o(ens)i(of)g(the)g(v)n(alue)g(are)g(returned)e(in)j(the)f(string)g
-(list)h Fq(l)p Fv(.)f(\(2\))g(The)g(attrib)n(ute)g(has)562
-1999 y(been)g(omitted,)f(and)h(the)g(DTD)g(declared)f(the)h(attrib)n
-(ute)g(with)h(a)f(def)o(ault)g(v)n(alue.)f(The)h(def)o(ault)f(v)n(alue)
-h(is)h(returned)562 2107 y(in)g Fq(l)p Fv(.)f(-)g(Summarized,)f
-Fq(Valuelist)43 b(l)20 b Fv(is)i(returned)c(for)i(all)g(list-type)g
-(attrib)n(ute)g(v)n(alues.)396 2256 y(Note)g(that)h(before)d(the)j
-(attrib)n(ute)f(v)n(alue)f(is)i(returned,)d(the)i(v)n(alue)g(is)h
-(normalized.)d(This)j(means)e(that)i(ne)n(wlines)e(are)479
-2364 y(con)m(v)o(erted)f(to)i(spaces,)g(and)g(that)g(references)f(to)h
-(character)f(entities)i(\(i.e.)f Fq(&#)p Fn(n)p Fq(;)p
-Fv(\))g(and)f(general)g(entities)i(\(i.e.)479 2472 y
-Fq(&)p Fn(name)p Fq(;)p Fv(\))f(are)g(e)o(xpanded;)e(if)i(necessary)-5
-b(,)19 b(e)o(xpansion)f(is)j(performed)d(recursi)n(v)o(ely)-5
-b(.)479 2621 y(In)20 b(well-formedness)e(mode,)h(there)h(is)h(no)f(DTD)
-g(which)g(could)f(declare)h(an)g(attrib)n(ute.)f(Because)i(of)f(this,)g
-(e)n(v)o(ery)479 2729 y(occuring)f(attrib)n(ute)g(is)i(considered)e(as)
-i(a)f(CD)m(A)-9 b(T)h(A)21 b(attrib)n(ute.)p Black 396
-2879 a Ft(\225)p Black 60 w Fq(required_string_attribute)41
-b(n)p Fv(:)21 b(returns)e(the)h(V)-9 b(alue)20 b(attrib)n(ute)g(called)
-g(n,)g(or)g(the)g(V)-9 b(aluelist)20 b(attrib)n(ute)g(as)h(a)479
-2987 y(string)f(where)g(the)g(list)h(elements)f(are)g(separated)f(by)h
-(spaces.)g(If)h(the)f(attrib)n(ute)g(v)n(alue)f(is)i(implied,)e(or)h
-(if)h(the)479 3094 y(attrib)n(ute)f(does)g(not)g(e)o(xists,)g(the)g
-(method)f(will)i(f)o(ail.)g(-)f(This)g(method)f(is)i(con)m(v)o(enient)d
-(if)i(you)g(e)o(xpect)f(a)h(non-implied)479 3202 y(and)g(non-list)f
-(attrib)n(ute)h(v)n(alue.)p Black 396 3310 a Ft(\225)p
-Black 60 w Fq(optional_string_attribute)41 b(n)p Fv(:)21
-b(returns)e(the)h(V)-9 b(alue)20 b(attrib)n(ute)g(called)g(n,)g(or)g
-(the)g(V)-9 b(aluelist)20 b(attrib)n(ute)g(as)h(a)479
-3418 y(string)f(where)g(the)g(list)h(elements)f(are)g(separated)f(by)h
-(spaces.)g(If)h(the)f(attrib)n(ute)g(v)n(alue)f(is)i(implied,)e(or)h
-(if)h(the)479 3526 y(attrib)n(ute)f(does)g(not)g(e)o(xists,)g(the)g
-(method)f(returns)h(None.)f(-)h(This)h(method)e(is)i(con)m(v)o(enient)c
-(if)k(you)e(e)o(xpect)g(a)i(non-list)479 3634 y(attrib)n(ute)f(v)n
-(alue)g(including)e(the)i(implied)g(v)n(alue.)p Black
-396 3742 a Ft(\225)p Black 60 w Fq(required_list_attribute)41
-b(n)p Fv(:)20 b(returns)f(the)g(V)-9 b(aluelist)20 b(attrib)n(ute)f
-(called)g(n,)g(or)g(the)h(V)-9 b(alue)19 b(attrib)n(ute)g(as)h(a)g
-(list)479 3850 y(with)h(a)f(single)g(element.)g(If)g(the)g(attrib)n
-(ute)g(v)n(alue)f(is)i(implied,)f(or)g(if)g(the)g(attrib)n(ute)g(does)g
-(not)g(e)o(xists,)g(the)g(method)479 3958 y(will)h(f)o(ail.)g(-)f(This)
-g(method)f(is)i(con)m(v)o(enient)d(if)i(you)g(e)o(xpect)f(a)h(list)i
-(attrib)n(ute)d(v)n(alue.)p Black 396 4066 a Ft(\225)p
-Black 60 w Fq(optional_list_attribute)41 b(n)p Fv(:)20
-b(returns)f(the)g(V)-9 b(aluelist)20 b(attrib)n(ute)f(called)g(n,)g(or)
-g(the)h(V)-9 b(alue)19 b(attrib)n(ute)g(as)h(a)g(list)479
-4174 y(with)h(a)f(single)g(element.)g(If)g(the)g(attrib)n(ute)g(v)n
-(alue)f(is)i(implied,)f(or)g(if)g(the)g(attrib)n(ute)g(does)g(not)g(e)o
-(xists,)g(an)g(empty)g(list)479 4282 y(will)h(be)f(returned.)e(-)j
-(This)f(method)f(is)i(con)m(v)o(enient)d(if)i(you)f(e)o(xpect)h(a)g
-(list)i(attrib)n(ute)d(v)n(alue)h(or)g(the)g(implied)f(v)n(alue.)p
-Black 396 4390 a Ft(\225)p Black 60 w Fq(attribute_names)p
-Fv(:)g(returns)g(the)h(list)h(of)f(all)h(attrib)n(ute)f(names)g(of)g
-(this)g(element.)g(As)h(this)f(is)i(a)e(v)n(alidating)479
-4498 y(parser)m(,)f(this)i(list)g(is)g(equal)f(to)g(the)h(list)g(of)f
-(declared)f(attrib)n(utes.)p Black 396 4605 a Ft(\225)p
-Black 60 w Fq(attribute_type)43 b(n)p Fv(:)20 b(returns)g(the)g(type)g
-(of)g(the)g(attrib)n(ute)g(called)g Fq(n)p Fv(.)g(See)h(the)f(module)f
-Fq(Pxp_types)g Fv(for)g(a)479 4713 y(description)g(of)h(the)g(encoding)
-e(of)i(the)g(types.)p Black 396 4821 a Ft(\225)p Black
-60 w Fq(attributes)p Fv(:)f(returns)h(the)g(list)h(of)f(pairs)g(of)g
-(names)g(and)g(v)n(alues)g(for)f(all)i(attrib)n(utes)f(of)g(this)h
-(element.)p Black 3800 5278 a Fr(54)p Black eop
-%%Page: 55 55
-55 54 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black Black 396 579 a Ft(\225)p
-Black 60 w Fq(id_attribute_name)p Fv(:)e(returns)h(the)i(name)e(of)h
-(the)g(attrib)n(ute)g(that)g(is)h(declared)e(with)h(type)g(ID.)g(There)
-f(is)i(at)g(most)479 687 y(one)f(such)g(attrib)n(ute.)f(The)h(method)f
-(raises)i Fq(Not_found)e Fv(if)i(there)e(is)i(no)f(declared)f(ID)i
-(attrib)n(ute)e(for)h(the)g(element)479 795 y(type.)p
-Black 396 903 a Ft(\225)p Black 60 w Fq(id_attribute_value)p
-Fv(:)e(returns)h(the)i(v)n(alue)e(of)h(the)g(attrib)n(ute)g(that)g(is)h
-(declared)e(with)i(type)e(ID.)i(There)e(is)i(at)479 1011
-y(most)g(one)e(such)h(attrib)n(ute.)g(The)g(method)e(raises)j
-Fq(Not_found)e Fv(if)i(there)f(is)h(no)e(declared)g(ID)i(attrib)n(ute)f
-(for)f(the)479 1119 y(element)h(type.)p Black 396 1226
-a Ft(\225)p Black 60 w Fq(idref_attribute_names)p Fv(:)d(returns)h(the)
-h(list)i(of)e(attrib)n(ute)f(names)h(that)h(are)f(declared)f(as)i
-(IDREF)f(or)g(IDREFS.)396 1417 y Fu(Modifying)h(methods)h(.)f
-Fv(The)g(follo)n(wing)f(methods)g(are)h(only)f(de\002ned)g(for)h
-(element)f(nodes)h(\(more)f(e)o(xactly:)g(the)396 1525
-y(methods)g(are)i(de\002ned)e(for)g(data)h(nodes,)f(too,)h(b)n(ut)g(f)o
-(ail)h(al)o(w)o(ays\).)p Black 396 1758 a Ft(\225)p Black
-60 w Fq(add_node)44 b(sn)p Fv(:)20 b(Adds)g(sub)g(node)g
-Fq(sn)g Fv(to)g(the)g(list)i(of)e(children.)e(This)j(operation)d(is)j
-(illustrated)f(in)g(the)g(picture)g Fr(A)479 1866 y(node)f(can)h(only)g
-(be)g(added)f(if)h(it)h(is)h(a)e(r)l(oot)q Fv(.)g(This)h(method)e(e)o
-(xpects)g(that)h Fq(sn)h Fv(is)g(a)g(root,)e(and)g(it)i(requires)f
-(that)g Fq(sn)g Fv(and)479 1974 y(the)g(current)f(object)h(share)g(the)
-g(same)h(DTD.)479 2123 y(Because)g Fq(add_node)e Fv(is)i(the)f(method)f
-(the)h(parser)g(itself)h(uses)g(to)f(add)g(ne)n(w)g(nodes)f(to)h(the)h
-(tree,)e(it)i(performs)e(by)479 2231 y(def)o(ault)h(some)g(simple)g(v)n
-(alidation)f(checks:)g(If)h(the)h(content)e(model)g(is)i(a)g(re)o
-(gular)e(e)o(xpression,)f(it)j(is)g(not)f(allo)n(wed)f(to)479
-2339 y(add)h(data)g(nodes)f(to)i(this)g(node)e(unless)h(the)g(ne)n(w)g
-(nodes)g(consist)g(only)f(of)h(whitespace.)g(In)g(this)g(case,)h(the)f
-(ne)n(w)g(data)479 2447 y(nodes)g(are)g(silently)g(dropped)e(\(you)h
-(can)h(change)f(this)h(by)g(in)m(v)n(oking)e Fq
-(keep_always_whitespace_mode)p Fv(\).)479 2596 y(If)i(the)h(document)d
-(is)j(\003agged)e(as)i(stand-alone,)d(these)j(data)f(nodes)f(only)g
-(containing)g(whitespace)g(are)h(e)n(v)o(en)479 2704
-y(forbidden)e(if)i(the)h(element)e(declaration)g(is)i(contained)d(in)j
-(an)f(e)o(xternal)f(entity)-5 b(.)19 b(This)h(case)h(is)g(detected)f
-(and)479 2812 y(rejected.)479 2962 y(If)g(the)h(content)e(model)g(is)i
-Fq(EMPTY)p Fv(,)f(it)h(is)g(not)f(allo)n(wed)f(to)i(add)e(an)o(y)h
-(data)g(node)f(unless)h(the)g(data)g(node)g(is)h(empty)-5
-b(.)18 b(In)479 3070 y(this)j(case,)f(the)h(ne)n(w)f(data)g(node)f(is)i
-(silently)f(dropped.)479 3219 y(These)g(checks)g(only)f(apply)h(if)g
-(there)g(is)h(a)f(DTD.)h(In)f(well-formedness)e(mode,)h(it)i(is)g
-(assumed)e(that)i(e)n(v)o(ery)d(element)479 3327 y(is)j(declared)e
-(with)i(content)e(model)g Fq(ANY)h Fv(which)g(prohibits)f(an)o(y)g(v)n
-(alidation)g(check.)g(Furthermore,)f(you)h(turn)h(these)479
-3435 y(checks)g(of)n(f)f(by)h(passing)g Fq(~force:true)f
-Fv(as)i(\002rst)g(ar)o(gument.)p Black 396 3584 a Ft(\225)p
-Black 60 w Fq(add_pinstr)43 b(pi)p Fv(:)21 b(Adds)f(the)g(processing)f
-(instruction)g Fq(pi)h Fv(to)h(the)f(list)h(of)f(processing)f
-(instructions.)p Black 396 3692 a Ft(\225)p Black 60
-w Fq(delete)p Fv(:)h(Deletes)h(this)g(node)e(from)g(the)h(tree.)g
-(After)g(this)h(operation,)d(this)i(node)g(is)h(no)f(longer)e(the)j
-(child)e(of)h(the)479 3800 y(former)f(f)o(ather)g(node;)f(and)i(the)g
-(node)e(loses)j(the)e(connection)f(to)i(the)g(f)o(ather)f(as)h(well.)h
-(This)e(operation)f(is)j(illustrated)479 3908 y(by)f(the)g(\002gure)g
-Fr(A)g(deleted)g(node)f(becomes)g(the)i(r)l(oot)f(of)g(the)h(subtr)m
-(ee)p Fv(.)p Black 396 4016 a Ft(\225)p Black 60 w Fq(set_nodes)44
-b(nl)p Fv(:)20 b(Sets)h(the)f(list)i(of)e(children)e(to)j
-Fq(nl)p Fv(.)f(It)g(is)i(required)c(that)i(e)n(v)o(ery)f(member)g(of)h
-Fq(nl)g Fv(is)h(a)g(root,)e(and)479 4124 y(that)i(all)f(members)f(and)h
-(the)g(current)f(object)h(share)g(the)g(same)g(DTD.)g(Unlik)o(e)g
-Fq(add_node)p Fv(,)g(no)f(v)n(alidation)g(checks)479
-4232 y(are)h(performed.)p Black 396 4340 a Ft(\225)p
-Black 60 w Fq(quick_set_attributes)42 b(atts)p Fv(:)20
-b(sets)h(the)f(attrib)n(utes)h(of)e(this)i(element)f(to)g
-Fq(atts)p Fv(.)g(It)g(is)i Fr(not)f Fv(check)o(ed)479
-4448 y(whether)e Fq(atts)i Fv(matches)e(the)i(DTD)f(or)g(not;)g(it)h
-(is)g(up)f(to)g(the)g(caller)g(of)g(this)h(method)e(to)h(ensure)g
-(this.)g(\(This)479 4556 y(method)f(may)h(be)g(useful)g(to)g(transform)
-e(the)j(attrib)n(ute)f(v)n(alues,)f(i.e.)h(apply)f(a)i(mapping)d(to)j
-(e)n(v)o(ery)e(attrib)n(ute.\))p Black 396 4664 a Ft(\225)p
-Black 60 w Fq(set_comment)43 b(text)p Fv(:)20 b(This)h(method)e(is)i
-(only)e(applicable)g(to)h Fq(T_comment)g Fv(nodes;)f(it)i(sets)g(the)g
-(comment)d(te)o(xt)479 4772 y(contained)h(by)h(such)g(nodes.)p
-Black 3800 5278 a Fr(55)p Black eop
-%%Page: 56 56
-56 55 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fu(Cloning)g(methods)h(.)
-p Black 396 811 a Ft(\225)p Black 60 w Fq(orphaned_clone)p
-Fv(:)e(Returns)h(a)g(clone)g(of)g(the)g(node)f(and)h(the)g(complete)f
-(tree)h(belo)n(w)g(this)h(node)e(\(deep)g(clone\).)479
-919 y(The)h(clone)g(does)g(not)g(ha)n(v)o(e)f(a)i(parent)e(\(i.e.)h
-(the)g(reference)f(to)h(the)g(parent)f(node)g(is)j Fr(not)f
-Fv(cloned\).)d(While)j(cop)o(ying)479 1027 y(the)f(subtree,)g(strings)g
-(are)g(skipped;)f(it)i(is)g(lik)o(ely)f(that)h(the)f(original)f(tree)h
-(and)g(the)g(cop)o(y)f(tree)h(share)g(strings.)479 1135
-y(Extension)f(objects)h(are)g(cloned)f(by)h(in)m(v)n(oking)e(the)i
-Fq(clone)g Fv(method)f(on)h(the)g(original)f(objects;)h(ho)n(w)g(much)f
-(of)h(the)479 1243 y(e)o(xtension)f(objects)h(is)h(cloned)e(depends)g
-(on)h(the)g(implemention)e(of)i(this)h(method.)479 1393
-y(This)g(operation)d(is)j(illustrated)f(by)g(the)g(\002gure)f
-Fr(The)i(clone)e(of)i(a)f(subtr)m(ee)p Fv(.)p Black 396
-1542 a Ft(\225)p Black 60 w Fq(orphaned_flat_clone)p
-Fv(:)e(Returns)i(a)h(clone)e(of)h(the)g(node,)f(b)n(ut)h(sets)i(the)e
-(list)h(of)f(sub)g(nodes)g(to)g([],)g(i.e.)g(the)g(sub)479
-1650 y(nodes)g(are)g(not)g(cloned.)p Black 396 1758 a
-Ft(\225)p Black 81 w Fq(create_element)42 b(dtd)i(nt)h(al)p
-Fv(:)20 b(Returns)f(a)i(\003at)f(cop)o(y)f(of)g(this)i(node)d(\(which)h
-(must)h(be)f(an)h(element\))f(with)h(the)479 1866 y(follo)n(wing)f
-(modi\002cations:)g(The)h(DTD)g(is)h(set)g(to)f Fq(dtd)p
-Fv(;)h(the)f(node)f(type)h(is)h(set)g(to)f Fq(nt)p Fv(,)g(and)g(the)g
-(ne)n(w)g(attrib)n(ute)g(list)h(is)479 1974 y(set)g(to)f
-Fq(al)g Fv(\(gi)n(v)o(en)e(as)i(list)h(of)f(\(name,v)n(alue\))d
-(pairs\).)i(The)g(cop)o(y)g(does)h(not)f(ha)n(v)o(e)g(children)g(nor)g
-(a)h(parent.)f(It)h(does)f(not)479 2082 y(contain)g(processing)g
-(instructions.)g(See)i(the)f(e)o(xample)f(belo)n(w.)479
-2231 y(Note)h(that)h(you)e(can)h(specify)g(the)g(position)f(of)h(the)g
-(ne)n(w)g(node)f(by)h(the)g(optional)f(ar)o(gument)f
-Fq(~position)p Fv(.)p Black 396 2380 a Ft(\225)p Black
-81 w Fq(create_data)43 b(dtd)h(cdata)p Fv(:)20 b(Returns)g(a)h(\003at)g
-(cop)o(y)e(of)h(this)h(node)e(\(which)g(must)h(be)h(a)f(data)g(node\))f
-(with)h(the)479 2488 y(follo)n(wing)f(modi\002cations:)g(The)h(DTD)g
-(is)h(set)g(to)f Fq(dtd)p Fv(;)h(the)f(node)f(type)h(is)h(set)g(to)f
-Fq(T_data)p Fv(;)g(the)g(attrib)n(ute)g(list)h(is)479
-2596 y(empty)f(\(data)f(nodes)h(ne)n(v)o(er)f(ha)n(v)o(e)g(attrib)n
-(utes\);)h(the)g(list)h(of)f(children)f(and)h(PIs)h(is)g(empty)-5
-b(,)19 b(too)g(\(same)h(reason\).)f(The)479 2704 y(ne)n(w)h(node)f
-(does)h(not)g(ha)n(v)o(e)g(a)g(parent.)f(The)h(v)n(alue)g
-Fq(cdata)g Fv(is)h(the)f(ne)n(w)g(character)f(content)g(of)h(the)g
-(node.)f(See)i(the)479 2812 y(e)o(xample)e(belo)n(w.)p
-Black 396 2920 a Ft(\225)p Black 60 w Fq(keep_always_whitespace_mode)p
-Fv(:)e(Ev)o(en)i(data)h(nodes)f(which)h(are)g(normally)f(dropped)e
-(because)j(the)o(y)f(only)479 3028 y(contain)g(ignorable)f(whitespace,)
-h(can)h(added)e(to)i(this)h(node)d(once)h(this)i(mode)e(is)h(turned)f
-(on.)g(\(This)h(mode)f(is)h(useful)479 3136 y(to)h(produce)d(canonical)
-h(XML.\))396 3327 y Fu(V)-8 b(alidating)20 b(methods)h(.)f
-Fv(There)f(is)j(one)d(method)g(which)h(locally)f(v)n(alidates)h(the)g
-(node,)f(i.e.)i(checks)e(whether)g(the)396 3435 y(subnodes)g(match)h
-(the)g(content)f(model)g(of)h(this)h(node.)p Black 396
-3667 a Ft(\225)p Black 60 w Fq(local_validate)p Fv(:)e(Checks)h(that)g
-(this)h(node)e(conforms)f(to)j(the)f(DTD)g(by)g(comparing)e(the)i(type)
-g(of)g(the)479 3775 y(subnodes)e(with)i(the)g(content)e(model)h(for)g
-(this)h(node.)e(\(Applications)g(need)h(not)g(call)h(this)h(method)d
-(unless)h(the)o(y)g(add)479 3883 y(ne)n(w)h(nodes)g(themselv)o(es)f(to)
-i(the)f(tree.\))-2 4294 y Fp(3.2.3.)35 b(The)f(c)n(lass)h
-Fc(element_impl)396 4462 y Fv(This)21 b(class)g(is)g(an)f
-(implementation)e(of)i Fq(node)g Fv(which)g(realizes)g(element)g
-(nodes:)396 4642 y Fq(class)44 b([)h('ext)f(])h(element_impl)e(:)h
-('ext)g(->)h([)g('ext)f(])g(node)396 4875 y Fu(Constructor)-8
-b(.)19 b Fv(Y)-9 b(ou)20 b(can)g(create)f(a)i(ne)n(w)f(instance)g(by)p
-Black 3798 5278 a Fr(56)p Black eop
-%%Page: 57 57
-57 56 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fq(new)45
-b(element_impl)d Fn(extension_object)396 770 y Fv(which)20
-b(creates)g(a)h(special)f(form)f(of)h(empty)f(element)h(which)g
-(already)f(contains)g(a)i(reference)d(to)j(the)396 878
-y Fl(extension_object)p Fv(,)d(b)n(ut)i(is)h(otherwise)f(empty)-5
-b(.)18 b(This)j(special)f(form)f(is)i(called)f(an)g Fr(e)n(xemplar)r
-Fv(.)g(The)g(purpose)f(of)396 986 y(e)o(x)o(emplars)g(is)i(that)f(the)o
-(y)g(serv)o(e)f(as)i(patterns)f(that)g(can)g(be)g(duplicated)f(and)g
-(\002lled)i(with)f(data.)g(The)g(method)396 1094 y Fq(create_element)f
-Fv(is)i(designed)e(to)h(perform)e(this)j(action.)396
-1243 y Fu(Example.)f Fv(First,)h(create)f(an)g(e)o(x)o(emplar)e(by)396
-1423 y Fq(let)45 b(exemplar_ext)d(=)j(...)f(in)396 1520
-y(let)h(exemplar)222 b(=)45 b(new)f(element_impl)f(exemplar_ext)g(in)
-396 1711 y Fv(The)20 b Fq(exemplar)g Fv(is)h(not)f(used)f(in)i(node)e
-(trees,)h(b)n(ut)g(only)g(as)h(a)f(pattern)g(when)f(the)h(element)g
-(nodes)f(are)i(created:)396 1891 y Fq(let)45 b(element)e(=)i(exemplar)e
-(#)i(create_element)e(dtd)h(\(T_element)f(name\))h(attlist)396
-2082 y Fv(The)20 b Fq(element)g Fv(is)h(a)f(cop)o(y)g(of)g
-Fq(exemplar)f Fv(\(e)n(v)o(en)g(the)h(e)o(xtension)f
-Fq(exemplar_ext)g Fv(has)h(been)g(copied\))e(which)396
-2190 y(ensures)h(that)h Fq(element)f Fv(and)g(its)i(e)o(xtension)d(are)
-i(objects)f(of)h(the)f(same)h(class)h(as)f(the)g(e)o(x)o(emplars;)e
-(note)h(that)h(you)e(need)396 2298 y(not)i(to)g(pass)h(a)g(class)g
-(name)f(or)f(other)h(meta)g(information.)d(The)j(cop)o(y)g(is)h
-(initially)f(connected)e(with)j(the)f Fq(dtd)p Fv(,)g(it)h(gets)f(a)396
-2406 y(node)f(type,)h(and)g(the)g(attrib)n(ute)g(list)h(is)g(\002lled.)
-f(The)g Fq(element)g Fv(is)h(no)n(w)e(fully)h(functional;)e(it)j(can)f
-(be)g(added)f(to)i(another)396 2514 y(element)f(as)h(child,)e(and)h(it)
-h(can)f(contain)f(references)g(to)h(subnodes.)-2 2884
-y Fp(3.2.4.)35 b(The)f(c)n(lass)h Fc(data_impl)396 3051
-y Fv(This)21 b(class)g(is)g(an)f(implementation)e(of)i
-Fq(node)g Fv(which)g(should)f(be)h(used)g(for)f(all)i(character)e(data)
-h(nodes:)396 3232 y Fq(class)44 b([)h('ext)f(])h(data_impl)e(:)i('ext)f
-(->)g([)h('ext)f(])h(node)396 3464 y Fu(Constructor)-8
-b(.)19 b Fv(Y)-9 b(ou)20 b(can)g(create)f(a)i(ne)n(w)f(instance)g(by)
-396 3644 y Fq(new)45 b(data_impl)e Fn(extension_object)396
-3835 y Fv(which)20 b(creates)g(an)g(empty)g(e)o(x)o(emplar)e(node)h
-(which)h(is)h(connected)d(to)i Fl(extension_object)p
-Fv(.)e(The)i(node)f(does)396 3943 y(not)h(contain)f(a)i(reference)d(to)
-j(an)o(y)e(DTD,)h(and)g(because)f(of)h(this)h(it)g(cannot)e(be)h(added)
-f(to)i(node)e(trees.)396 4093 y(T)-7 b(o)21 b(get)f(a)g(fully)g(w)o
-(orking)f(data)h(node,)f(apply)g(the)h(method)f Fq(create_data)g
-Fv(to)h(the)g(e)o(x)o(emplar)f(\(see)h(e)o(xample\).)396
-4242 y Fu(Example.)g Fv(First,)h(create)f(an)g(e)o(x)o(emplar)e(by)396
-4422 y Fq(let)45 b(exemplar_ext)d(=)j(...)f(in)396 4519
-y(let)h(exemplar)222 b(=)45 b(new)f(exemplar_ext)f(data_impl)h(in)396
-4710 y Fv(The)20 b Fq(exemplar)g Fv(is)h(not)f(used)f(in)i(node)e
-(trees,)h(b)n(ut)g(only)g(as)h(a)f(pattern)g(when)f(the)h(data)g(nodes)
-g(are)g(created:)p Black 3797 5278 a Fr(57)p Black eop
-%%Page: 58 58
-58 57 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fq(let)45
-b(data_node)e(=)i(exemplar)e(#)i(create_data)e(dtd)h("The)g(characters)
-f(con-)396 676 y(tained)h(in)h(the)f(data)g(node")396
-867 y Fv(The)20 b Fq(data_node)f Fv(is)i(a)g(cop)o(y)e(of)h
-Fq(exemplar)p Fv(.)g(The)f(cop)o(y)h(is)h(initially)f(connected)e(with)
-j(the)f Fq(dtd)p Fv(,)g(and)f(it)i(is)h(\002lled)396
-975 y(with)f(character)e(material.)g(The)h Fq(data_node)f
-Fv(is)i(no)n(w)f(fully)g(functional;)e(it)j(can)f(be)g(added)f(to)h(an)
-h(element)e(as)i(child.)-2 1345 y Fp(3.2.5.)35 b(The)f(type)g
-Fc(spec)396 1512 y Fv(The)20 b(type)g Fq(spec)g Fv(de\002nes)g(a)g(w)o
-(ay)h(to)f(handle)f(the)h(details)h(of)f(creating)f(nodes)g(from)h(e)o
-(x)o(emplars.)396 1692 y Fq(type)44 b('ext)h(spec)396
-1790 y(constraint)e('ext)i(=)f('ext)g(node)h(#extension)396
-1984 y(val)g(make_spec_from_mapping)c(:)665 2081 y
-(?super_root_exemplar)h(:)i('ext)h(node)f(->)665 2178
-y(?comment_exemplar)e(:)j('ext)f(node)g(->)665 2275 y
-(?default_pinstr_exemplar)d(:)k('ext)f(node)g(->)665
-2372 y(?pinstr_mapping)f(:)h(\(string,)g('ext)g(node\))g(Hashtbl.t)f
-(->)665 2469 y(data_exemplar:)g('ext)h(node)g(->)665
-2567 y(default_element_exemplar:)d('ext)j(node)g(->)665
-2664 y(element_mapping:)e(\(string,)i('ext)g(node\))g(Hashtbl.t)f(->)
-665 2761 y(unit)h(->)755 2858 y('ext)g(spec)396 3052
-y(val)h(make_spec_from_alist)c(:)665 3149 y(?super_root_exemplar)h(:)i
-('ext)h(node)f(->)665 3247 y(?comment_exemplar)e(:)j('ext)f(node)g(->)
-665 3344 y(?default_pinstr_exemplar)d(:)k('ext)f(node)g(->)665
-3441 y(?pinstr_alist)f(:)i(\(string)e(*)i('ext)f(node\))g(list)g(->)665
-3538 y(data_exemplar:)f('ext)h(node)g(->)665 3635 y
-(default_element_exemplar:)d('ext)j(node)g(->)665 3732
-y(element_alist:)f(\(string)g(*)i('ext)f(node\))g(list)g(->)665
-3829 y(unit)g(->)755 3927 y('ext)g(spec)396 4117 y Fv(The)20
-b(tw)o(o)h(functions)d Fq(make_spec_from_mapping)f Fv(and)j
-Fq(make_spec_from_alist)d Fv(create)j Fq(spec)g Fv(v)n(alues.)396
-4225 y(Both)g(functions)f(are)h(functionally)e(equi)n(v)n(alent)h(and)g
-(the)i(only)e(dif)n(ference)f(is)j(that)g(the)f(\002rst)h(function)d
-(prefers)396 4333 y(hashtables)i(and)g(the)g(latter)g(associati)n(v)o
-(e)g(lists)h(to)g(describe)e(mappings)g(from)g(names)h(to)g(e)o(x)o
-(emplars.)396 4483 y(Y)-9 b(ou)20 b(can)g(specify)f(e)o(x)o(emplars)g
-(for)g(the)i(v)n(arious)e(kinds)g(of)h(nodes)g(that)g(need)g(to)g(be)g
-(generated)e(when)i(an)g(XML)396 4591 y(document)e(is)k(parsed:)p
-Black 3800 5278 a Fr(58)p Black eop
-%%Page: 59 59
-59 58 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black Black 396 579 a Ft(\225)p
-Black 60 w Fq(~super_root_exemplar)p Fv(:)e(This)i(e)o(x)o(emplar)e(is)
-j(used)f(to)h(create)f(the)g(super)f(root.)h(This)g(special)g(node)g
-(is)h(only)479 687 y(created)f(if)g(the)g(corresponding)d
-(con\002guration)h(option)h(has)h(been)g(selected;)g(it)h(is)g(the)f
-(parent)f(node)g(of)h(the)h(root)479 795 y(node)e(which)h(may)g(be)g
-(con)m(v)o(enient)d(if)k(e)n(v)o(ery)e(w)o(orking)f(node)i(must)g(ha)n
-(v)o(e)f(a)i(parent.)p Black 396 903 a Ft(\225)p Black
-60 w Fq(~comment_exemplar)p Fv(:)d(This)j(e)o(x)o(emplar)d(is)j(used)f
-(when)f(a)i(comment)e(node)g(must)h(be)g(created.)g(Note)g(that)g(such)
-479 1011 y(nodes)g(are)g(only)f(created)h(if)g(the)g(corresponding)d
-(con\002guration)h(option)h(is)i("on".)p Black 396 1119
-a Ft(\225)p Black 60 w Fq(~default_pinstr_exemplar)p
-Fv(:)c(If)j(a)h(node)e(for)g(a)i(processing)e(instruction)g(must)h(be)g
-(created,)f(and)h(the)479 1226 y(instruction)f(is)i(not)f(listed)h(in)f
-(the)g(table)h(passed)f(by)f Fq(~pinstr_mapping)g Fv(or)h
-Fq(~pinstr_alist)p Fv(,)e(this)j(e)o(x)o(emplar)479 1334
-y(is)g(used.)f(Again)f(the)i(con\002guration)c(option)i(must)h(be)g
-("on")g(in)g(order)f(to)i(create)e(such)h(nodes)g(at)h(all.)p
-Black 396 1442 a Ft(\225)p Black 60 w Fq(~pinstr_mapping)e
-Fv(or)g Fq(~pinstr_alist)p Fv(:)g(Map)h(the)g(tar)o(get)g(names)f(of)h
-(processing)f(instructions)g(to)479 1550 y(e)o(x)o(emplars.)g(These)h
-(mappings)e(are)i(only)g(used)g(when)f(nodes)h(for)f(processing)g
-(instructions)g(are)h(created.)p Black 396 1658 a Ft(\225)p
-Black 60 w Fq(~data_exemplar)p Fv(:)f(The)h(e)o(x)o(emplar)e(for)h
-(ordinary)f(data)i(nodes.)p Black 396 1766 a Ft(\225)p
-Black 60 w Fq(~default_element_exemplar)p Fv(:)d(This)j(e)o(x)o(emplar)
-e(is)k(used)e(if)g(an)g(element)g(node)f(must)h(be)g(created,)f(b)n(ut)
-i(the)479 1874 y(element)f(type)g(cannot)f(be)h(found)e(in)j(the)f
-(tables)g Fq(element_mapping)e Fv(or)i Fq(element_alist)p
-Fv(.)p Black 396 1982 a Ft(\225)p Black 60 w Fq(~element_mapping)e
-Fv(or)i Fq(~element_alist)p Fv(:)f(Map)h(the)g(element)f(types)h(to)h
-(e)o(x)o(emplars.)d(These)i(mappings)f(are)479 2090 y(used)h(to)h
-(create)e(element)h(nodes.)396 2239 y(In)g(most)g(cases,)h(you)e(only)h
-(w)o(ant)g(to)g(create)g Fq(spec)g Fv(v)n(alues)g(to)h(pass)f(them)g
-(to)g(the)h(parser)e(functions)g(found)f(in)396 2347
-y Fq(Pxp_yacc)p Fv(.)h(Ho)n(we)n(v)o(er)m(,)f(it)j(might)f(be)g(useful)
-g(to)g(apply)f Fq(spec)h Fv(v)n(alues)g(directly)-5 b(.)396
-2497 y(The)20 b(follo)n(wing)f(functions)f(create)i(v)n(arious)f(types)
-h(of)g(nodes)g(by)g(selecting)f(the)i(corresponding)16
-b(e)o(x)o(emplar)j(from)g(the)396 2605 y(passed)h Fq(spec)g
-Fv(v)n(alue,)g(and)f(by)h(calling)g Fq(create_element)e
-Fv(or)i Fq(create_data)f Fv(on)h(the)g(e)o(x)o(emplar)-5
-b(.)396 2785 y Fq(val)45 b(create_data_node)d(:)665 2882
-y('ext)i(spec)h(->)665 2979 y(dtd)g(->)665 3076 y(\(*)g(data)f
-(material:)f(*\))i(string)f(->)845 3173 y('ext)g(node)396
-3368 y(val)h(create_element_node)c(:)665 3465 y(?position:\(string)h(*)
-j(int)f(*)h(int\))f(->)665 3562 y('ext)g(spec)h(->)665
-3659 y(dtd)g(->)665 3756 y(\(*)g(element)e(type:)h(*\))h(string)f(->)
-665 3853 y(\(*)h(attributes:)e(*\))h(\(string)g(*)h(string\))e(list)h
-(->)845 3950 y('ext)g(node)396 4145 y(val)h(create_super_root_node)c(:)
-665 4242 y(?position:\(string)h(*)j(int)f(*)h(int\))f(->)665
-4339 y('ext)g(spec)h(->)710 4436 y(dtd)f(->)889 4533
-y('ext)h(node)396 4728 y(val)g(create_comment_node)c(:)665
-4825 y(?position:\(string)h(*)j(int)f(*)h(int\))f(->)p
-Black 3800 5278 a Fr(59)p Black eop
-%%Page: 60 60
-60 59 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 665 579 a Fq('ext)44
-b(spec)h(->)665 676 y(dtd)g(->)665 773 y(\(*)g(comment)e(text:)h(*\))h
-(string)f(->)845 870 y('ext)g(node)396 1065 y(val)h(create_pinstr_node)
-c(:)665 1162 y(?position:\(string)h(*)j(int)f(*)h(int\))f(->)665
-1259 y('ext)g(spec)h(->)665 1356 y(dtd)g(->)665 1453
-y(proc_instruction)d(->)845 1550 y('ext)i(node)-2 2003
-y Fp(3.2.6.)35 b(Examples)396 2171 y Fu(Building)22 b(tr)o(ees.)d
-Fv(Here)h(is)h(the)g(piece)e(of)h(code)g(that)g(creates)g(the)h(tree)f
-(of)g(the)g(\002gure)f Fr(A)i(tr)m(ee)g(with)f(element)g(nodes,)396
-2279 y(data)g(nodes,)f(and)g(attrib)n(utes)p Fv(.)h(The)g(e)o(xtension)
-f(object)h(and)f(the)h(DTD)h(are)f(be)o(yond)e(the)i(scope)g(of)g(this)
-g(e)o(xample.)396 2459 y Fq(let)45 b(exemplar_ext)d(=)j(...)f(\(*)h
-(some)f(extension)f(*\))i(in)396 2556 y(let)g(dtd)f(=)h(...)f(\(*)g
-(some)h(DTD)f(*\))g(in)396 2750 y(let)h(element_exemplar)d(=)i(new)h
-(element_impl)e(exemplar_ext)f(in)396 2847 y(let)j(data_exemplar)177
-b(=)44 b(new)h(data_impl)178 b(exemplar_ext)42 b(in)396
-3042 y(let)j(a1)f(=)h(element_exemplar)d(#)j(cre-)396
-3139 y(ate_element)e(dtd)i(\(T_element)e("a"\))h(["att",)g("apple"])396
-3236 y(and)h(b1)f(=)h(element_exemplar)d(#)j(create_element)d(dtd)i
-(\(T_element)g("b"\))g([])396 3333 y(and)h(c1)f(=)h(element_exemplar)d
-(#)j(create_element)d(dtd)i(\(T_element)g("c"\))g([])396
-3430 y(and)h(a2)f(=)h(element_exemplar)d(#)j(cre-)396
-3527 y(ate_element)e(dtd)i(\(T_element)e("a"\))h(["att",)g("orange"])
-396 3624 y(in)396 3819 y(let)h(cherries)e(=)i(data_exemplar)d(#)j
-(create_data)e(dtd)h("Cherries")g(in)396 3916 y(let)h(orange)133
-b(=)45 b(data_exemplar)d(#)j(create_data)e(dtd)h("An)h(orange")e(in)396
-4110 y(a1)i(#)f(add_node)g(b1;)396 4207 y(a1)h(#)f(add_node)g(c1;)396
-4304 y(b1)h(#)f(add_node)g(a2;)396 4401 y(b1)h(#)f(add_node)g
-(cherries;)396 4499 y(a2)h(#)f(add_node)g(orange;)396
-4689 y Fv(Alternati)n(v)o(ely)-5 b(,)18 b(the)i(last)h(block)f(of)g
-(statements)g(could)f(also)i(be)f(written)g(as:)396 4870
-y Fq(a1)45 b(#)f(set_nodes)g([b1;)g(c1];)p Black 3800
-5278 a Fr(60)p Black eop
-%%Page: 61 61
-61 60 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fq(b1)45
-b(#)f(set_nodes)g([a2;)g(cherries];)396 676 y(a2)h(#)f(set_nodes)g
-([orange];)396 867 y Fv(The)20 b(root)g(of)g(the)g(tree)g(is)h
-Fq(a1)p Fv(,)f(i.e.)g(it)h(is)g(true)f(that)396 1047
-y Fq(x)45 b(#)g(root)f(==)g(a1)396 1238 y Fv(for)20 b(e)n(v)o(ery)f(x)h
-(from)f({)i Fq(a1)p Fv(,)f Fq(a2)p Fv(,)g Fq(b1)p Fv(,)g
-Fq(c1)p Fv(,)g Fq(cherries)p Fv(,)g Fq(orange)f Fv(}.)396
-1388 y(Furthermore,)f(the)i(follo)n(wing)f(properties)f(hold:)486
-1568 y Fq(a1)44 b(#)h(attribute)e("att")h(=)h(Value)f("apple")396
-1665 y(&)h(a2)f(#)h(attribute)e("att")h(=)h(Value)f("orange")396
-1859 y(&)h(cherries)e(#)i(data)f(=)h("Cherries")396 1956
-y(&)135 b(orange)43 b(#)i(data)f(=)h("An)f(orange")396
-2053 y(&)314 b(a1)44 b(#)h(data)f(=)h("CherriesAn)e(orange")396
-2248 y(&)314 b(a1)44 b(#)h(node_type)e(=)i(T_element)e("a")396
-2345 y(&)314 b(a2)44 b(#)h(node_type)e(=)i(T_element)e("a")396
-2442 y(&)314 b(b1)44 b(#)h(node_type)e(=)i(T_element)e("b")396
-2539 y(&)314 b(c1)44 b(#)h(node_type)e(=)i(T_element)e("c")396
-2636 y(&)i(cherries)e(#)i(node_type)e(=)i(T_data)396
-2733 y(&)135 b(orange)43 b(#)i(node_type)e(=)i(T_data)396
-2928 y(&)314 b(a1)44 b(#)h(sub_nodes)e(=)i([)g(b1;)f(c1)h(])396
-3025 y(&)314 b(a2)44 b(#)h(sub_nodes)e(=)i([)g(orange)f(])396
-3122 y(&)314 b(b1)44 b(#)h(sub_nodes)e(=)i([)g(a2;)f(cherries)g(])396
-3219 y(&)314 b(c1)44 b(#)h(sub_nodes)e(=)i([])396 3316
-y(&)g(cherries)e(#)i(sub_nodes)e(=)i([])396 3413 y(&)135
-b(orange)43 b(#)i(sub_nodes)e(=)i([])396 3608 y(&)314
-b(a2)44 b(#)h(parent)f(==)g(a1)396 3705 y(&)314 b(b1)44
-b(#)h(parent)f(==)g(b1)396 3802 y(&)314 b(c1)44 b(#)h(parent)f(==)g(a1)
-396 3899 y(&)h(cherries)e(#)i(parent)f(==)g(b1)396 3996
-y(&)135 b(orange)43 b(#)i(parent)f(==)g(a2)396 4229 y
-Fu(Sear)o(ching)19 b(nodes.)g Fv(The)g(follo)n(wing)e(function)h
-(searches)h(all)g(nodes)g(of)g(a)g(tree)h(for)e(which)h(a)g(certain)g
-(condition)e(holds:)396 4409 y Fq(let)45 b(rec)f(search)g(p)g(t)h(=)486
-4506 y(if)f(p)h(t)g(then)576 4603 y(t)f(::)h(search_list)e(p)h(\(t)h(#)
-g(sub_nodes\))486 4700 y(else)576 4797 y(search_list)e(p)h(\(t)h(#)f
-(sub_nodes\))p Black 3800 5278 a Fr(61)p Black eop
-%%Page: 62 62
-62 61 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 676 a Fq(and)45
-b(search_list)e(p)h(l)h(=)486 773 y(match)f(l)h(with)576
-870 y([])268 b(-)p Fo(>)45 b Fq([])486 967 y(|)g(t)f(::)h(l')f(-)p
-Fo(>)h Fq(\(search)e(p)i(t\))f(@)h(\(search_list)e(p)i(l'\))396
-1065 y(;;)396 1297 y Fv(F)o(or)20 b(e)o(xample,)f(if)h(you)f(w)o(ant)i
-(to)f(search)g(all)h(elements)f(of)f(a)i(certain)f(type)f
-Fq(et)p Fv(,)i(the)f(function)e Fq(search)i Fv(can)g(be)g(applied)396
-1405 y(as)h(follo)n(ws:)396 1585 y Fq(let)45 b(search_element_type)c
-(et)k(t)f(=)486 1682 y(search)g(\(fun)g(x)h(-)p Fo(>)f
-Fq(x)h(#)f(node_type)g(=)g(T_element)g(et\))g(t)396 1779
-y(;;)396 2012 y Fu(Getting)20 b(attrib)n(ute)f(v)o(alues.)h
-Fv(Suppose)f(we)i(ha)n(v)o(e)f(the)g(declaration:)396
-2192 y Fq(<!ATTLIST)44 b(e)g(a)h(CDATA)f(#REQUIRED)934
-2289 y(b)h(CDATA)f(#IMPLIED)934 2386 y(c)h(CDATA)f("12345">)396
-2577 y Fv(In)20 b(this)h(case,)f(e)n(v)o(ery)f(element)h
-Fq(e)g Fv(must)h(ha)n(v)o(e)e(an)h(attrib)n(ute)g Fq(a)p
-Fv(,)g(otherwise)g(the)g(parser)g(w)o(ould)f(indicate)h(an)g(error)-5
-b(.)19 b(If)h(the)396 2685 y(O'Caml)h(v)n(ariable)e Fq(n)h
-Fv(holds)g(the)g(node)f(of)h(the)g(tree)h(corresponding)16
-b(to)21 b(the)f(element,)f(you)g(can)h(get)h(the)f(v)n(alue)f(of)h(the)
-396 2793 y(attrib)n(ute)g Fq(a)h Fv(by)396 2973 y Fq(let)45
-b(value_of_a)e(=)h(n)h(#)g(required_string_attribute)40
-b("a")396 3164 y Fv(which)20 b(is)h(more)e(or)h(less)i(an)e(abbre)n
-(viation)d(for)396 3344 y Fq(let)45 b(value_of_a)e(=)486
-3442 y(match)h(n)h(#)f(attribute)g("a")g(with)576 3539
-y(Value)g(s)g(->)h(s)486 3636 y(|)g(_)313 b(->)45 b(assert)f(false)396
-3827 y Fv(-)21 b(as)g(the)f(attrib)n(ute)g(is)h(required,)d(the)i
-Fq(attribute)f Fv(method)g(al)o(w)o(ays)i(returns)e(a)i
-Fq(Value)p Fv(.)396 3976 y(In)f(contrast)g(to)g(this,)h(the)f(attrib)n
-(ute)g Fq(b)g Fv(can)g(be)g(omitted.)g(In)f(this)i(case,)g(the)f
-(method)396 4084 y Fq(required_string_attribute)d Fv(w)o(orks)j(only)f
-(if)h(the)h(attrib)n(ute)f(is)h(there,)e(and)h(the)g(method)f(will)i(f)
-o(ail)f(if)h(the)396 4192 y(attrib)n(ute)f(is)h(missing.)f(T)-7
-b(o)20 b(get)h(the)f(v)n(alue,)f(you)g(can)h(apply)g(the)g(method)f
-Fq(optional_string_attribute)p Fv(:)396 4372 y Fq(let)45
-b(value_of_b)e(=)h(n)h(#)g(optional_string_attribute)40
-b("b")396 4563 y Fv(No)n(w)-5 b(,)20 b Fq(value_of_b)f
-Fv(is)i(of)f(type)g Fq(string)43 b(option)p Fv(,)20 b(and)f
-Fq(None)i Fv(represents)e(the)h(omitted)g(attrib)n(ute.)f(Alternati)n
-(v)o(ely)-5 b(,)396 4671 y(you)20 b(could)f(also)h(use)h
-Fq(attribute)p Fv(:)396 4851 y Fq(let)45 b(value_of_b)e(=)p
-Black 3800 5278 a Fr(62)p Black eop
-%%Page: 63 63
-63 62 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 486 579 a Fq(match)44
-b(n)h(#)f(attribute)g("b")g(with)576 676 y(Value)g(s)313
-b(->)45 b(Some)f(s)486 773 y(|)h(Implied_value)d(->)j(None)486
-870 y(|)g(_)582 b(->)45 b(assert)f(false)396 1103 y Fv(The)20
-b(attrib)n(ute)g Fq(c)h Fv(beha)n(v)o(es)e(much)g(lik)o(e)h
-Fq(a)p Fv(,)h(because)e(it)i(has)g(al)o(w)o(ays)f(a)h(v)n(alue.)e(If)h
-(the)g(attrib)n(ute)g(is)h(omitted,)f(the)g(def)o(ault,)396
-1211 y(here)g("12345",)e(will)j(be)f(returned)e(instead.)i(Because)g
-(of)g(this,)h(you)e(can)h(again)f(use)396 1319 y Fq
-(required_string_attribute)e Fv(to)j(get)g(the)h(v)n(alue.)396
-1468 y(The)f(type)g Fq(CDATA)g Fv(is)h(the)f(most)g(general)f(string)h
-(type.)g(The)g(types)g Fq(NMTOKEN)p Fv(,)f Fq(ID)p Fv(,)h
-Fq(IDREF)p Fv(,)g Fq(ENTITY)p Fv(,)f(and)h(all)396 1576
-y(enumerators)e(and)i(notations)f(are)h(special)h(forms)e(of)h(string)g
-(types)g(that)g(restrict)g(the)h(possible)f(v)n(alues.)f(From)396
-1684 y(O'Caml,)h(the)o(y)g(beha)n(v)o(e)f(lik)o(e)h Fq(CDATA)p
-Fv(,)g(i.e.)g(you)f(can)h(use)h(the)f(methods)f Fq
-(required_string_attribute)e Fv(and)396 1792 y Fq
-(optional_string_attribute)p Fv(,)g(too.)396 1941 y(In)j(contrast)g(to)
-g(this,)h(the)f(types)g Fq(NMTOKENS)p Fv(,)f Fq(IDREFS)p
-Fv(,)g(and)h Fq(ENTITIES)g Fv(mean)f(lists)j(of)e(strings.)g(Suppose)f
-(we)h(ha)n(v)o(e)396 2049 y(the)g(declaration:)396 2229
-y Fq(<!ATTLIST)44 b(f)g(d)h(NMTOKENS)e(#REQUIRED)934
-2327 y(e)i(NMTOKENS)e(#IMPLIED>)396 2517 y Fv(The)20
-b(type)g Fq(NMTOKENS)f Fv(stands)i(for)e(lists)j(of)e(space-separated)e
-(tok)o(ens;)i(for)f(e)o(xample)g(the)h(v)n(alue)g Fq("1)44
-b(abc)h(23ef")396 2625 y Fv(means)20 b(the)g(list)i Fq(["1";)44
-b("abc";)f("23ef"])p Fv(.)20 b(\(Again,)e Fq(IDREFS)i
-Fv(and)g Fq(ENTITIES)f Fv(ha)n(v)o(e)h(more)f(restricted)h(v)n
-(alues.\))396 2733 y(T)-7 b(o)21 b(get)f(the)g(v)n(alue)g(of)f(attrib)n
-(ute)h Fq(d)p Fv(,)h(one)e(can)h(use)396 2913 y Fq(let)45
-b(value_of_d)e(=)h(n)h(#)g(required_list_attribute)c("d")396
-3104 y Fv(or)396 3285 y Fq(let)k(value_of_d)e(=)486 3382
-y(match)h(n)h(#)f(attribute)g("d")g(with)576 3479 y(Valuelist)f(l)i(->)
-f(l)486 3576 y(|)h(_)493 b(->)44 b(assert)g(false)396
-3767 y Fv(As)21 b Fq(d)g Fv(is)g(required,)d(the)i(attrib)n(ute)g
-(cannot)f(be)h(omitted,)g(and)f(the)h Fq(attribute)g
-Fv(method)e(returns)i(al)o(w)o(ays)g(a)396 3875 y Fq(Valuelist)p
-Fv(.)396 4024 y(F)o(or)g(optional)f(attrib)n(utes)h(lik)o(e)h
-Fq(e)p Fv(,)f(apply)396 4204 y Fq(let)45 b(value_of_e)e(=)h(n)h(#)g
-(optional_list_attribute)c("e")396 4395 y Fv(or)396 4576
-y Fq(let)k(value_of_e)e(=)486 4673 y(match)h(n)h(#)f(attribute)g("e")g
-(with)576 4770 y(Valuelist)f(l)134 b(->)45 b(l)486 4867
-y(|)g(Implied_value)d(->)j([])p Black 3800 5278 a Fr(63)p
-Black eop
-%%Page: 64 64
-64 63 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 486 579 a Fq(|)45
-b(_)582 b(->)45 b(assert)f(false)396 770 y Fv(Here,)20
-b(the)g(case)h(that)f(the)g(attrib)n(ute)g(is)h(missing)f(counts)g(lik)
-o(e)g(the)h(empty)e(list.)-2 1139 y Fp(3.2.7.)35 b(Iterator)n(s)396
-1307 y Fv(There)20 b(are)g(also)g(se)n(v)o(eral)g(iterators)g(in)g
-(Pxp_document;)d(please)j(see)h(the)f(mli)h(\002le)f(for)g(details.)g
-(Y)-9 b(ou)20 b(can)g(\002nd)396 1415 y(e)o(xamples)f(for)h(them)g(in)g
-(the)g("simple_transformation")d(directory)-5 b(.)396
-1595 y Fq(val)45 b(find)f(:)g(?deeply:bool)f(->)889 1692
-y(f:\('ext)h(node)g(->)h(bool\))f(->)g('ext)g(node)h(->)f('ext)g(node)
-396 1887 y(val)h(find_all)e(:)i(?deeply:bool)e(->)1069
-1984 y(f:\('ext)g(node)i(->)f(bool\))g(->)h('ext)f(node)g(->)g('ext)h
-(node)f(list)396 2178 y(val)h(find_element)d(:)j(?deeply:bool)e(->)1248
-2275 y(string)h(->)g('ext)h(node)f(->)g('ext)g(node)396
-2469 y(val)h(find_all_elements)d(:)i(?deeply:bool)f(->)1472
-2567 y(string)h(->)h('ext)f(node)g(->)g('ext)h(node)f(list)396
-2761 y(exception)g(Skip)396 2858 y(val)h(map_tree)e(:)90
-b(pre:\('exta)43 b(node)h(->)g('extb)g(node\))g(->)1069
-2955 y(?post:\('extb)f(node)h(->)g('extb)g(node\))g(->)1069
-3052 y('exta)g(node)g(->)1248 3149 y('extb)g(node)396
-3441 y(val)h(map_tree_sibl)d(:)755 3538 y(pre:)i(\('exta)g(node)g
-(option)g(->)g('exta)g(node)h(->)f('exta)g(node)g(option)g(->)1203
-3635 y('extb)g(node\))g(->)710 3732 y(?post:\('extb)f(node)h(option)g
-(->)g('extb)g(node)h(->)f('extb)g(node)g(option)g(->)1203
-3829 y('extb)g(node\))g(->)710 3927 y('exta)g(node)g(->)889
-4024 y('extb)g(node)396 4218 y(val)h(iter_tree)e(:)i(?pre:\('ext)e
-(node)h(->)g(unit\))g(->)1114 4315 y(?post:\('ext)f(node)h(->)g(unit\))
-g(->)1114 4412 y('ext)g(node)g(->)1293 4509 y(unit)396
-4704 y(val)h(iter_tree_sibl)d(:)710 4801 y(?pre:)i(\('ext)g(node)g
-(option)g(->)h('ext)f(node)g(->)g('ext)h(node)f(option)g(->)g(unit\))g
-(->)p Black 3800 5278 a Fr(64)p Black eop
-%%Page: 65 65
-65 64 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 710 579 a Fq(?post:\('ext)43
-b(node)h(option)g(->)h('ext)f(node)g(->)g('ext)h(node)f(option)g(->)g
-(unit\))g(->)710 676 y('ext)g(node)g(->)889 773 y(unit)-2
-1358 y Fx(3.3.)39 b(The)g(c)m(lass)g(type)g Fb(extension)396
-1610 y Fq(class)44 b(type)g([)h('node)f(])h(extension)e(=)486
-1707 y(object)h(\('self\))576 1804 y(method)f(clone)h(:)h('self)665
-1901 y(\(*)g("clone")e(should)h(return)g(an)h(exact)f(deep)g(copy)g(of)
-g(the)h(object.)e(*\))576 1998 y(method)g(node)i(:)f('node)665
-2095 y(\(*)h("node")f(returns)f(the)i(corresponding)d(node)i(of)h(this)
-f(extension.)f(This)h(method)710 2193 y(*)h(intended)e(to)i(return)f
-(exactly)f(what)h(previ-)396 2290 y(ously)g(has)h(been)f(set)g(by)h
-("set_node".)710 2387 y(*\))576 2484 y(method)e(set_node)h(:)h('node)f
-(->)g(unit)665 2581 y(\(*)h("set_node")e(is)h(invoked)g(once)g(the)h
-(extension)e(is)h(associated)g(to)g(a)h(new)710 2678
-y(*)g(node)f(object.)710 2775 y(*\))486 2873 y(end)396
-3063 y Fv(This)21 b(is)g(the)f(type)g(of)g(classes)h(used)f(for)f(node)
-h(e)o(xtensions.)e(F)o(or)i(e)n(v)o(ery)f(node)g(of)h(the)g(document)e
-(tree,)i(there)g(is)h(not)396 3171 y(only)f(the)g Fq(node)g
-Fv(object,)f(b)n(ut)h(also)g(an)g Fq(extension)f Fv(object.)h(The)f
-(latter)i(has)f(minimal)f(functionality;)f(it)j(has)f(only)g(the)396
-3279 y(necessary)g(methods)f(to)h(be)g(attached)g(to)g(the)g(node)f
-(object)h(containing)e(the)j(details)f(of)g(the)g(node)f(instance.)h
-(The)396 3387 y(e)o(xtension)f(object)h(is)h(called)f(e)o(xtension)f
-(because)g(its)i(purpose)e(is)i(e)o(xtensibility)-5 b(.)396
-3537 y(F)o(or)20 b(some)g(reasons,)g(it)h(is)g(impossible)e(to)i(deri)n
-(v)o(e)d(the)j Fq(node)f Fv(classes)h(\(i.e.)f Fq(element_impl)f
-Fv(and)g Fq(data_impl)p Fv(\))g(such)396 3645 y(that)i(the)f
-(subclasses)g(can)g(be)g(e)o(xtended)f(by)g(ne)n(w)h(ne)n(w)g(methods.)
-f(But)i(subclassing)f(nodes)f(is)i(a)g(great)f(feature,)396
-3753 y(because)g(it)h(allo)n(ws)f(the)g(user)g(to)h(pro)o(vide)d(dif)n
-(ferent)g(classes)k(for)d(dif)n(ferent)g(types)h(of)g(nodes.)f(The)h(e)
-o(xtension)f(objects)396 3860 y(are)h(a)h(w)o(orkaround)c(that)j(is)i
-(as)e(po)n(werful)f(as)i(direct)f(subclassing,)f(the)h(costs)h(are)f
-(some)g(notation)f(o)o(v)o(erhead.)p Black 3800 5278
-a Fr(65)p Black eop
-%%Page: 66 66
-66 65 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fu(Figur)o(e)g(3-6.)f
-(The)i(structur)o(e)f(of)g(nodes)g(and)h(extensions)396
-1928 y
- currentpoint currentpoint translate 1 1 scale neg exch neg exch translate
- 396 1928 a @beginspecial 0 @llx 0 @lly 206 @urx
-140 @ury 2060 @rwi @setspecial
-%%BeginDocument: pic/extension_general.ps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: src/pic/extension_general.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Sun Aug 27 02:05:42 2000
-%%For: gerd@ice (Gerd Stolpmann)
-%%Orientation: Portrait
-%%BoundingBox: 0 0 206 140
-%%Pages: 0
-%%BeginSetup
-%%EndSetup
-%%Magnification: 0.8000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
--22.0 205.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
- /DrawEllipse {
-       /endangle exch def
-       /startangle exch def
-       /yrad exch def
-       /xrad exch def
-       /y exch def
-       /x exch def
-       /savematrix mtrx currentmatrix def
-       x y tr xrad yrad sc 0 0 1 startangle endangle arc
-       closepath
-       savematrix setmatrix
-       } def
-
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 5050 m -1000 -1000 l 5514 -1000 l 5514 5050 l cp clip
- 0.05039 0.05039 sc
-7.500 slw
-% Ellipse
-n 1575 2250 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 1575 3375 225 225 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 675 3375 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 2475 3375 229 229 0 360 DrawEllipse gs col7 0.75 shd ef gr gs col0 s gr
-
-% Ellipse
-n 3600 2475 180 180 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 2880 2475 180 180 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 4320 2475 186 186 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Ellipse
-n 3600 1485 186 186 0 360 DrawEllipse gs col7 0.50 shd ef gr gs col0 s gr
-
-% Polyline
-n 675 3150 m 1395 2385 l gs col0 s gr 
-% Polyline
-n 1575 2475 m 1575 3150 l gs col0 s gr 
-% Polyline
-n 1755 2385 m 2475 3150 l gs col0 s gr 
-% Polyline
- [60] 0 sd
-gs  clippath
-3288 1467 m 3412 1462 l 3305 1524 l 3435 1487 l 3418 1429 l cp
-clip
-n 1537 2010 m 3412 1462 l gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 3288 1467 m 3412 1462 l 3305 1524 l  col0 s
-% Polyline
- [60] 0 sd
-gs  clippath
-1796 2042 m 1672 2047 l 1779 1984 l 1649 2022 l 1666 2080 l cp
-clip
-n 3412 1537 m 1672 2047 l gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 1796 2042 m 1672 2047 l 1779 1984 l  col0 s
-% Polyline
- [60] 0 sd
-gs  clippath
-2584 2524 m 2707 2512 l 2604 2581 l 2731 2535 l 2711 2479 l cp
-933 3183 m 810 3195 l 913 3126 l 786 3172 l 806 3228 l cp
-clip
-n 810 3195 m 2707 2512 l gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 933 3183 m 810 3195 l 913 3126 l  col0 s
-% arrowhead
-n 2584 2524 m 2707 2512 l 2604 2581 l  col0 s
-% Polyline
- [60] 0 sd
-gs  clippath
-3319 2594 m 3442 2580 l 3340 2650 l 3467 2603 l 3446 2547 l cp
-1863 3203 m 1740 3217 l 1842 3147 l 1715 3194 l 1736 3250 l cp
-clip
-n 1740 3217 m 3442 2580 l gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 1863 3203 m 1740 3217 l 1842 3147 l  col0 s
-% arrowhead
-n 3319 2594 m 3442 2580 l 3340 2650 l  col0 s
-% Polyline
- [60] 0 sd
-gs  clippath
-4054 2626 m 4177 2610 l 4076 2682 l 4202 2632 l 4180 2577 l cp
-2763 3194 m 2640 3210 l 2741 3138 l 2615 3188 l 2637 3243 l cp
-clip
-n 2640 3210 m 4177 2610 l gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 2763 3194 m 2640 3210 l 2741 3138 l  col0 s
-% arrowhead
-n 4054 2626 m 4177 2610 l 4076 2682 l  col0 s
-/Courier-Bold ff 180.00 scf sf
-3555 1530 m
-gs 1 -1 sc (x) col0 sh gr
-/Courier-Bold ff 180.00 scf sf
-1530 2295 m
-gs 1 -1 sc (n) col0 sh gr
-/Courier ff 180.00 scf sf
-1658 1950 m
-gs 1 -1 sc  17.0 rot (n # extension) col0 sh gr
-/Courier ff 180.00 scf sf
-2475 1950 m
-gs 1 -1 sc  17.0 rot (x # node) col0 sh gr
-/Helvetica ff 180.00 scf sf
-1020 4050 m
-gs 1 -1 sc (The node tree) col0 sh gr
-/Helvetica ff 180.00 scf sf
-3225 3285 m
-gs 1 -1 sc (The extensions) col0 sh gr
-$F2psEnd
-rs
-
-%%EndDocument
- @endspecial 396 1928 a
- currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch
-neg exch translate
- 396 1928 a 357 x Fv(The)f(picture)f(sho)n(ws)i
-(ho)n(w)e(the)i(nodes)e(and)h(e)o(xtensions)f(are)h(link)o(ed)f
-(together)-5 b(.)19 b(Ev)o(ery)g(node)g(has)i(a)f(reference)f(to)h(its)
-396 2393 y(e)o(xtension,)f(and)g(e)n(v)o(ery)g(e)o(xtension)g(has)h(a)h
-(reference)d(to)j(its)g(node.)e(The)h(methods)f Fq(extension)g
-Fv(and)h Fq(node)g Fv(follo)n(w)396 2501 y(these)h(references;)e(a)h
-(typical)g(phrase)f(is)396 2681 y Fq(self)44 b(#)h(node)f(#)h
-(attribute)e("xy")396 2872 y Fv(to)21 b(get)f(the)g(v)n(alue)g(of)f(an)
-i(attrib)n(ute)e(from)h(a)g(method)f(de\002ned)g(in)h(the)h(e)o
-(xtension)d(object;)i(or)396 3053 y Fq(self)44 b(#)h(node)f(#)h(iter)
-486 3150 y(\(fun)f(n)h(-)p Fo(>)f Fq(n)h(#)f(extension)g(#)g(my_method)
-g(...\))396 3341 y Fv(to)21 b(iterate)f(o)o(v)o(er)f(the)h(subnodes)f
-(and)g(to)i(call)f Fq(my_method)f Fv(of)h(the)h(corresponding)16
-b(e)o(xtension)j(objects.)396 3490 y(Note)h(that)h(e)o(xtension)d
-(objects)i(do)g(not)g(ha)n(v)o(e)g(references)e(to)j(subnodes)e(\(or)g
-("sube)o(xtensions"\))f(themselv)o(es;)h(in)i(order)396
-3598 y(to)g(get)f(one)f(of)h(the)h(children)d(of)i(an)g(e)o(xtension)f
-(you)g(must)i(\002rst)g(go)e(to)i(the)f(node)f(object,)h(then)f(get)h
-(the)h(child)e(node,)396 3706 y(and)h(\002nally)g(reach)f(the)i(e)o
-(xtension)d(that)j(is)g(logically)e(the)h(child)g(of)g(the)g(e)o
-(xtension)f(you)g(started)h(with.)-2 4034 y Fp(3.3.1.)35
-b(Ho)n(w)f(to)f(de\002ne)h(an)g(e)n(xtension)i(c)n(lass)396
-4202 y Fv(At)21 b(minimum,)e(you)g(must)h(de\002ne)g(the)g(methods)f
-Fq(clone)p Fv(,)h Fq(node)p Fv(,)g(and)f Fq(set_node)h
-Fv(such)f(that)i(your)e(class)i(is)396 4310 y(compatible)e(with)h(the)h
-(type)e Fq(extension)p Fv(.)g(The)h(method)f Fq(set_node)g
-Fv(is)i(called)f(during)f(the)h(initialization)g(of)g(the)396
-4418 y(node,)f(or)h(after)g(a)h(node)e(has)h(been)g(cloned;)f(the)h
-(node)f(object)h(in)m(v)n(ok)o(es)f Fq(set_node)g Fv(on)h(the)g(e)o
-(xtension)f(object)h(to)g(tell)396 4526 y(it)h(that)f(this)h(node)e(is)
-i(no)n(w)f(the)g(object)g(the)g(e)o(xtension)f(is)i(link)o(ed)f(to.)g
-(The)f(e)o(xtension)g(must)h(return)f(the)i(node)e(object)396
-4633 y(passed)h(as)h(ar)o(gument)d(of)i Fq(set_node)f
-Fv(when)h(the)g Fq(node)g Fv(method)f(is)i(called.)p
-Black 3798 5278 a Fr(66)p Black eop
-%%Page: 67 67
-67 66 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fv(The)g
-Fq(clone)g Fv(method)f(must)h(return)f(a)i(cop)o(y)e(of)h(the)g(e)o
-(xtension)f(object;)h(at)g(least)h(the)f(object)g(itself)h(must)f(be)
-396 687 y(duplicated,)f(b)n(ut)h(if)g(required,)e(the)j(cop)o(y)e
-(should)g(deeply)g(duplicate)g(all)i(objects)f(and)g(v)n(alues)g(that)g
-(are)g(referred)e(by)396 795 y(the)i(e)o(xtension,)f(too.)h(Whether)f
-(this)i(is)g(required,)d(depends)h(on)h(the)g(application;)f
-Fq(clone)h Fv(is)h(in)m(v)n(ok)o(ed)d(by)i(the)g(node)396
-903 y(object)g(when)g(one)f(of)h(its)h(cloning)e(methods)g(is)i
-(called.)396 1052 y(A)g(good)e(starting)h(point)f(for)h(an)g(e)o
-(xtension)e(class:)396 1232 y Fq(class)44 b(custom_extension)e(=)486
-1329 y(object)i(\(self\))576 1524 y(val)g(mutable)g(node)g(=)g(\(None)g
-(:)h(custom_extension)d(node)i(option\))576 1718 y(method)f(clone)h(=)h
-({<)g(>})576 1912 y(method)e(node)i(=)665 2009 y(match)f(node)g(with)
-845 2107 y(None)g(->)934 2204 y(assert)g(false)755 2301
-y(|)h(Some)f(n)g(->)h(n)576 2495 y(method)e(set_node)h(n)h(=)665
-2592 y(node)f(<-)h(Some)f(n)486 2786 y(end)396 2977 y
-Fv(This)21 b(class)g(is)g(compatible)e(with)h Fq(extension)p
-Fv(.)f(The)h(purpose)e(of)i(de\002ning)f(such)h(a)h(class)g(is,)g(of)f
-(course,)f(adding)396 3085 y(further)g(methods;)g(and)h(you)f(can)h(do)
-g(it)h(without)e(restriction.)396 3235 y(Often,)h(you)f(w)o(ant)h(not)g
-(only)g(one)f(e)o(xtension)g(class.)i(In)f(this)h(case,)f(it)h(is)g
-(the)f(simplest)h(w)o(ay)f(that)g(all)h(your)e(classes)i(\(for)396
-3343 y(one)f(kind)f(of)h(document\))e(ha)n(v)o(e)i(the)g(same)g(type)g
-(\(with)g(respect)g(to)g(the)g(interf)o(ace;)g(i.e.)g(it)h(does)f(not)g
-(matter)g(if)g(your)396 3451 y(classes)i(dif)n(fer)d(in)h(the)g
-(de\002ned)f(pri)n(v)n(ate)h(methods)f(and)g(instance)h(v)n(ariables,)f
-(b)n(ut)h(public)g(methods)f(count\).)f(This)396 3559
-y(approach)g(a)n(v)n(oids)i(lots)h(of)f(coercions)f(and)h(problems)e
-(with)j(type)f(incompatibilities.)e(It)j(is)g(simple)f(to)g(implement:)
-396 3739 y Fq(class)44 b(custom_extension)e(=)486 3836
-y(object)i(\(self\))576 3933 y(val)g(mutable)g(node)g(=)g(\(None)g(:)h
-(custom_extension)d(node)i(option\))576 4127 y(method)f(clone)h(=)h
-(...)269 b(\(*)44 b(see)g(above)g(*\))576 4224 y(method)f(node)i(=)f
-(...)314 b(\(*)44 b(see)g(above)g(*\))576 4322 y(method)f(set_node)h(n)
-h(=)f(...)h(\(*)f(see)g(above)g(*\))576 4516 y(method)f(virtual)h
-(my_method1)f(:)i(...)576 4613 y(method)e(virtual)h(my_method2)f(:)i
-(...)576 4710 y(...)f(\(*)g(etc.)h(*\))486 4807 y(end)p
-Black 3797 5278 a Fr(67)p Black eop
-%%Page: 68 68
-68 67 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 676 a Fq(class)44
-b(custom_extension_kind_A)d(=)486 773 y(object)j(\(self\))576
-870 y(inherit)f(custom_extension)576 1065 y(method)g(my_method1)h(=)g
-(...)576 1162 y(method)f(my_method2)h(=)g(...)486 1259
-y(end)396 1453 y(class)g(custom_extension_kind_B)d(=)486
-1550 y(object)j(\(self\))576 1647 y(inherit)f(custom_extension)576
-1842 y(method)g(my_method1)h(=)g(...)576 1939 y(method)f(my_method2)h
-(=)g(...)486 2036 y(end)396 2227 y Fv(If)20 b(a)h(class)g(does)f(not)g
-(need)f(a)i(method)e(\(e.g.)g(because)h(it)h(does)e(not)h(mak)o(e)g
-(sense,)g(or)g(it)h(w)o(ould)f(violate)f(some)396 2335
-y(important)g(condition\),)f(it)j(is)g(possible)f(to)g(de\002ne)g(the)g
-(method)f(and)g(to)i(al)o(w)o(ays)f(raise)h(an)f(e)o(xception)e(when)i
-(the)396 2443 y(method)f(is)i(in)m(v)n(ok)o(ed)e(\(e.g.)g
-Fq(assert)44 b(false)p Fv(\).)396 2592 y(The)20 b(latter)g(is)i(a)e
-(strong)g(recommendation:)c(do)k(not)g(try)g(to)g(further)f(specialize)
-h(the)g(types)g(of)g(e)o(xtension)f(objects.)h(It)g(is)396
-2700 y(dif)n(\002cult,)g(sometimes)g(e)n(v)o(en)f(impossible,)g(and)h
-(almost)g(ne)n(v)o(er)f(w)o(orth-while.)-2 3070 y Fp(3.3.2.)35
-b(Ho)n(w)f(to)f(bind)h(e)n(xtension)h(c)n(lasses)h(to)d(element)i
-(types)396 3237 y Fv(Once)20 b(you)f(ha)n(v)o(e)h(de\002ned)f(your)g(e)
-o(xtension)g(classes,)i(you)e(can)h(bind)g(them)f(to)i(element)e
-(types.)h(The)g(simplest)h(case)f(is)396 3345 y(that)h(you)e(ha)n(v)o
-(e)g(only)h(one)f(class)j(and)d(that)i(this)f(class)h(is)h(to)e(be)g
-(al)o(w)o(ays)h(used.)e(The)h(parsing)f(functions)g(in)h(the)h(module)
-396 3453 y Fq(Pxp_yacc)f Fv(tak)o(e)g(a)h Fq(spec)f Fv(ar)o(gument)d
-(which)j(can)g(be)g(customized.)f(If)h(your)f(single)h(class)h(has)g
-(the)f(name)f Fq(c)p Fv(,)i(this)396 3561 y(ar)o(gument)d(should)h(be)
-396 3741 y Fq(let)45 b(spec)f(=)486 3839 y(make_spec_from_alist)576
-3936 y(~data_exemplar:)535 b(\(new)44 b(data_impl)g(c\))576
-4033 y(~default_element_exemplar:)c(\(new)k(element_impl)f(c\))576
-4130 y(~element_alist:)535 b([])576 4227 y(\(\))396 4418
-y Fv(This)21 b(means)f(that)g(data)g(nodes)f(will)i(be)f(created)g
-(from)f(the)h(e)o(x)o(emplar)e(passed)i(by)g(~data_e)o(x)o(emplar)d
-(and)j(that)g(all)396 4526 y(element)g(nodes)f(will)i(be)f(made)g(from)
-f(the)h(e)o(x)o(emplar)e(speci\002ed)i(by)g(~def)o(ault_element_e)o(x)o
-(emplar)-5 b(.)15 b(In)396 4634 y(~element_alist,)k(you)h(can)g(pass)g
-(that)h(dif)n(ferent)d(e)o(x)o(emplars)h(are)h(to)g(be)g(used)g(for)g
-(dif)n(ferent)e(element)i(types;)g(b)n(ut)g(this)396
-4742 y(is)h(an)g(optional)d(feature.)h(If)h(you)g(do)g(not)f(need)h
-(it,)h(pass)f(the)g(empty)g(list.)p Black 3800 5278 a
-Fr(68)p Black eop
-%%Page: 69 69
-69 68 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fv(Remember)f(that)i(an)f
-(e)o(x)o(emplar)e(is)j(a)g(\(node,)d(e)o(xtension\))h(pair)g(that)i
-(serv)o(es)f(as)h(pattern)e(when)h(ne)n(w)g(nodes)f(\(and)g(the)396
-687 y(corresponding)e(e)o(xtension)i(objects\))g(are)h(added)f(to)i
-(the)f(document)e(tree.)i(In)g(this)h(case,)f(the)g(e)o(x)o(emplar)f
-(contains)g Fq(c)i Fv(as)396 795 y(e)o(xtension,)e(and)g(when)h(nodes)f
-(are)i(created,)e(the)h(e)o(x)o(emplar)e(is)j(cloned,)e(and)h(cloning)f
-(mak)o(es)h(also)g(a)h(cop)o(y)e(of)h Fq(c)h Fv(such)396
-903 y(that)g(all)f(nodes)g(of)g(the)g(document)e(tree)i(will)h(ha)n(v)o
-(e)f(a)g(cop)o(y)g(of)g Fq(c)g Fv(as)h(e)o(xtension.)396
-1052 y(The)f Fq(~element_alist)f Fv(ar)o(gument)e(can)j(bind)g
-(speci\002c)g(element)g(types)g(to)g(speci\002c)g(e)o(x)o(emplars;)f
-(as)i(e)o(x)o(emplars)396 1160 y(may)f(be)g(instances)g(of)g(dif)n
-(ferent)f(classes)i(it)g(is)g(ef)n(fecti)n(v)o(ely)d(possible)i(to)h
-(bind)e(element)h(types)g(to)g(classes.)h(F)o(or)396
-1268 y(e)o(xample,)e(if)h(the)g(element)g(type)g("p")g(is)h
-(implemented)d(by)i(class)h("c_p",)e(and)h("q")g(is)h(realized)f(by)f
-("c_q",)h(you)f(can)396 1376 y(pass)i(the)f(follo)n(wing)f(v)n(alue:)
-396 1556 y Fq(let)45 b(spec)f(=)486 1653 y(make_spec_from_alist)576
-1750 y(~data_exemplar:)535 b(\(new)44 b(data_impl)g(c\))576
-1847 y(~default_element_exemplar:)c(\(new)k(element_impl)f(c\))576
-1945 y(~element_alist:)665 2042 y([)i("p",)f(new)g(element_impl)f(c_p;)
-755 2139 y("q",)h(new)g(element_impl)f(c_q;)665 2236
-y(])576 2333 y(\(\))396 2524 y Fv(The)20 b(e)o(xtension)f(object)h
-Fq(c)g Fv(is)h(still)h(used)e(for)f(all)i(data)f(nodes)f(and)h(for)g
-(all)g(other)g(element)f(types.)-2 3026 y Fx(3.4.)39
-b(Details)f(of)i(the)f(mapping)e(fr)m(om)i(XML)g(te)n(xt)g(to)g(the)g
-(tree)-2 3212 y(representation)-2 3540 y Fp(3.4.1.)c(The)f
-(representation)h(of)e(c)o(haracter)n(-free)h(elements)396
-3708 y Fv(If)20 b(an)g(element)g(declaration)f(does)h(not)f(allo)n(w)i
-(the)f(element)f(to)i(contain)e(character)g(data,)h(the)g(follo)n(wing)
-e(rules)j(apply)-5 b(.)396 3858 y(If)20 b(the)h(element)e(must)h(be)g
-(empty)-5 b(,)19 b(i.e.)h(it)h(is)g(declared)e(with)i(the)f(k)o(e)o(yw)
-o(ord)e Fq(EMPTY)p Fv(,)i(the)g(element)g(instance)g(must)g(be)396
-3965 y(ef)n(fecti)n(v)o(ely)f(empty)g(\(it)h(must)h(not)f(e)n(v)o(en)f
-(contain)g(whitespace)h(characters\).)e(The)i(parser)g(guarantees)e
-(that)j(a)f(declared)396 4073 y Fq(EMPTY)g Fv(element)g(does)g(ne)n(v)o
-(er)f(contain)g(a)h(data)g(node,)f(e)n(v)o(en)g(if)i(the)f(data)g(node)
-f(represents)h(the)g(empty)f(string.)396 4223 y(If)h(the)h(element)e
-(declaration)g(only)g(permits)h(other)f(elements)h(to)h(occur)e(within)
-h(that)g(element)g(b)n(ut)g(not)g(character)396 4331
-y(data,)g(it)h(is)g(still)g(possible)f(to)h(insert)f(whitespace)g
-(characters)f(between)g(the)h(subelements.)f(The)h(parser)g(ignores)f
-(these)396 4439 y(characters,)g(too,)h(and)g(does)f(not)h(create)g
-(data)g(nodes)g(for)f(them.)396 4588 y Fu(Example.)h
-Fv(Consider)g(the)g(follo)n(wing)f(element)g(types:)396
-4768 y Fq(<!ELEMENT)44 b(x)g(\()h(#PCDATA)f(|)g(z)h(\)*)f(>)396
-4865 y(<!ELEMENT)g(y)g(\()h(z)g(\)*)f(>)p Black 3800
-5278 a Fr(69)p Black eop
-%%Page: 70 70
-70 69 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fq(<!ELEMENT)44
-b(z)g(EMPTY>)396 770 y Fv(Only)20 b Fq(x)h Fv(may)e(contain)h
-(character)e(data,)i(the)h(k)o(e)o(yw)o(ord)d Fq(#PCDATA)h
-Fv(indicates)h(this.)h(The)f(other)f(types)h(are)396
-878 y(character)n(-free.)396 1027 y(The)g(XML)g(term)396
-1207 y Fq(<x><z/>)44 b(<z/></x>)396 1398 y Fv(will)21
-b(be)f(internally)f(represented)g(by)g(an)i(element)e(node)g(for)h
-Fq(x)g Fv(with)h(three)f(subnodes:)e(the)j(\002rst)g
-Fq(z)f Fv(element,)g(a)g(data)396 1506 y(node)f(containing)g(the)h
-(space)g(character)m(,)e(and)i(the)g(second)g Fq(z)g
-Fv(element.)g(In)f(contrast)h(to)g(this,)h(the)f(term)396
-1686 y Fq(<y><z/>)44 b(<z/></y>)396 1877 y Fv(is)21 b(represented)e(by)
-h(an)g(element)f(node)g(for)h Fq(y)h Fv(with)f(only)f
-Fr(two)i Fv(subnodes,)e(the)h(tw)o(o)g Fq(z)h Fv(elements.)e(There)h
-(is)h(no)f(data)396 1985 y(node)f(for)h(the)g(space)g(character)f
-(because)h(spaces)g(are)g(ignored)f(in)h(the)g(character)n(-free)e
-(element)i Fq(y)p Fv(.)-2 2355 y Fp(3.4.2.)35 b(The)f(representation)h
-(of)e(c)o(haracter)h(data)396 2523 y Fv(The)20 b(XML)g(speci\002cation)
-g(allo)n(ws)g(all)h(Unicode)e(characters)g(in)i(XML)f(te)o(xts.)g(This)
-g(parser)g(can)g(be)g(con\002gured)e(such)396 2631 y(that)j(UTF-8)e(is)
-i(used)f(to)h(represent)e(the)h(characters)f(internally;)g(ho)n(we)n(v)
-o(er)m(,)f(the)i(def)o(ault)g(character)e(encoding)h(is)396
-2738 y(ISO-8859-1.)e(\(Currently)-5 b(,)18 b(no)i(other)f(encodings)g
-(are)h(possible)g(for)f(the)i(internal)e(string)h(representation;)e
-(the)i(type)396 2846 y Fq(Pxp_types.rep_encoding)d Fv(enumerates)i(the)
-h(possible)g(encodings.)e(Principially)-5 b(,)19 b(the)h(parser)g
-(could)f(use)h(an)o(y)396 2954 y(encoding)e(that)j(is)g
-(ASCII-compatible,)d(b)n(ut)i(there)g(are)g(currently)e(only)i(le)o
-(xical)f(analyzers)h(for)f(UTF-8)h(and)396 3062 y(ISO-8859-1.)d(It)k
-(is)g(currently)d(impossible)i(to)g(use)h(UTF-16)e(or)h(UCS-4)g(as)h
-(internal)f(encodings)e(\(or)i(other)f(multibyte)396
-3170 y(encodings)g(which)g(are)h(not)g(ASCII-compatible\))e(unless)i
-(major)g(parts)g(of)g(the)g(parser)g(are)g(re)n(written)f(-)i(unlik)o
-(ely)-5 b(...\))396 3320 y(The)20 b(internal)g(encoding)e(may)h(be)h
-(dif)n(ferent)f(from)g(the)h(e)o(xternal)f(encoding)f(\(speci\002ed)i
-(in)g(the)g(XML)h(declaration)396 3428 y Fo(<)p Fq(?xml)44
-b(...)g(encoding="..."?)p Fo(>)p Fv(\);)18 b(in)j(this)f(case)h(the)f
-(strings)g(are)g(automatically)f(con)m(v)o(erted)f(to)i(the)g(internal)
-396 3535 y(encoding.)396 3685 y(If)g(the)h(internal)e(encoding)f(is)j
-(ISO-8859-1,)c(it)k(is)g(possible)f(that)g(there)g(are)g(characters)g
-(that)g(cannot)f(be)h(represented.)396 3793 y(In)g(this)h(case,)f(the)g
-(parser)g(ignores)f(such)h(characters)f(and)h(prints)g(a)h(w)o(arning)e
-(\(to)h(the)g Fq(collect_warning)e Fv(object)396 3901
-y(that)j(must)f(be)g(passed)g(when)g(the)g(parser)f(is)i(called\).)396
-4050 y(The)f(XML)g(speci\002cation)g(allo)n(ws)g(lines)h(to)f(be)g
-(separated)g(by)f(single)h(LF)h(characters,)e(by)h(CR)h(LF)g(character)
-396 4158 y(sequences,)e(or)h(by)g(single)g(CR)i(characters.)d
-(Internally)-5 b(,)18 b(these)i(separators)f(are)h(al)o(w)o(ays)h(con)m
-(v)o(erted)d(to)i(single)g(LF)396 4266 y(characters.)396
-4416 y(The)g(parser)g(guarantees)e(that)j(there)e(are)i(ne)n(v)o(er)d
-(tw)o(o)j(adjacent)e(data)h(nodes;)g(if)g(necessary)-5
-b(,)19 b(data)h(material)g(that)g(w)o(ould)396 4523 y(otherwise)g(be)g
-(represented)e(by)i(se)n(v)o(eral)g(nodes)f(is)i(collapsed)f(into)f
-(one)h(node.)f(Note)h(that)g(you)g(can)g(still)h(create)f(node)396
-4631 y(trees)h(with)f(adjacent)g(data)g(nodes;)f(ho)n(we)n(v)o(er)m(,)f
-(the)i(parser)g(does)f(not)h(return)f(such)h(trees.)p
-Black 3800 5278 a Fr(70)p Black eop
-%%Page: 71 71
-71 70 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black 396 579 a Fv(Note)g(that)h(CD)m(A)
--9 b(T)h(A)20 b(sections)g(are)g(not)g(represented)f(specially;)h(such)
-g(sections)g(are)g(added)f(to)h(the)h(current)d(data)396
-687 y(material)i(that)g(being)g(collected)f(for)h(the)g(ne)o(xt)f(data)
-h(node.)-2 1056 y Fp(3.4.3.)35 b(The)f(representation)h(of)e(entities)h
-(within)g(documents)396 1224 y Fr(Entities)21 b(ar)m(e)f(not)g(r)m(epr)
-m(esented)f(within)i(documents!)d Fv(If)i(the)h(parser)e(\002nds)h(an)h
-(entity)e(reference)g(in)h(the)g(document)396 1332 y(content,)f(the)h
-(reference)f(is)i(immediately)e(e)o(xpanded,)e(and)j(the)g(parser)g
-(reads)g(the)g(e)o(xpansion)e(te)o(xt)i(instead)g(of)g(the)396
-1440 y(reference.)-2 1810 y Fp(3.4.4.)35 b(The)f(representation)h(of)e
-(attrib)n(utes)396 1977 y Fv(As)21 b(attrib)n(ute)f(v)n(alues)g(are)g
-(composed)e(of)i(Unicode)f(characters,)g(too,)h(the)g(same)h(problems)d
-(with)j(the)f(character)396 2085 y(encoding)e(arise)j(as)g(for)e
-(character)g(material.)h(Attrib)n(ute)g(v)n(alues)g(are)g(con)m(v)o
-(erted)d(to)k(the)f(internal)f(encoding,)f(too;)i(and)396
-2193 y(if)h(there)e(are)i(characters)e(that)h(cannot)f(be)h
-(represented,)e(these)j(are)f(dropped,)e(and)h(a)i(w)o(arning)e(is)i
-(printed.)396 2343 y(Attrib)n(ute)f(v)n(alues)g(are)g(normalized)e
-(before)h(the)o(y)h(are)g(returned)e(by)i(methods)f(lik)o(e)h
-Fq(attribute)p Fv(.)f(First,)i(an)o(y)396 2451 y(remaining)e(entity)h
-(references)e(are)i(e)o(xpanded;)e(if)j(necessary)-5
-b(,)19 b(e)o(xpansion)f(is)j(performed)c(recursi)n(v)o(ely)-5
-b(.)18 b(Second,)396 2558 y(ne)n(wline)i(characters)f(\(an)o(y)g(of)h
-(LF)-7 b(,)21 b(CR)g(LF)-7 b(,)21 b(or)f(CR)h(characters\))e(are)h(con)
-m(v)o(erted)e(to)i(single)g(space)h(characters.)e(Note)396
-2666 y(that)i(especially)e(the)i(latter)f(action)g(is)h(prescribed)d
-(by)i(the)g(XML)g(standard)f(\(b)n(ut)41 b(is)21 b(not)f(con)m(v)o
-(erted)e(such)i(that)g(it)h(is)396 2774 y(still)h(possible)e(to)g
-(include)f(line)h(feeds)g(into)g(attrib)n(utes\).)-2
-3144 y Fp(3.4.5.)35 b(The)f(representation)h(of)e(pr)n(ocessing)h
-(instructions)396 3312 y Fv(Processing)20 b(instructions)f(are)h
-(parsed)g(to)g(some)g(e)o(xtent:)f(The)h(\002rst)h(w)o(ord)f(of)g(the)g
-(PI)g(is)i(called)e(the)g(tar)o(get,)f(and)g(it)i(is)396
-3420 y(stored)f(separated)f(from)g(the)i(rest)f(of)g(the)g(PI:)396
-3600 y Fq(<?target)44 b(rest?>)396 3791 y Fv(The)20 b(e)o(xact)g
-(location)f(where)h(a)g(PI)h(occurs)e(is)i(not)f(represented)f(\(by)g
-(def)o(ault\).)g(The)h(parser)f(puts)i(the)f(PI)g(into)g(the)396
-3899 y(object)g(that)g(represents)g(the)g(embracing)e(construct)h(\(an)
-h(element,)f(a)i(DTD,)f(or)g(the)g(whole)g(document\);)e(that)i(means)
-396 4007 y(you)g(can)g(\002nd)f(out)h(which)g(PIs)h(occur)e(in)h(a)h
-(certain)f(element,)f(in)h(the)h(DTD,)f(or)g(in)g(the)g(whole)g
-(document,)e(b)n(ut)i(you)396 4114 y(cannot)f(lookup)g(the)h(e)o(xact)g
-(position)f(within)h(the)g(construct.)396 4264 y(If)g(you)g(require)e
-(the)j(e)o(xact)e(location)h(of)g(PIs,)g(it)h(is)g(possible)f(to)g
-(create)g(e)o(xtra)g(nodes)f(for)h(them.)f(This)i(mode)e(is)396
-4372 y(controled)g(by)g(the)i(option)e Fq(enable_pinstr_nodes)p
-Fv(.)e(The)j(additional)f(nodes)g(ha)n(v)o(e)h(the)g(node)f(type)h
-Fq(T_pinstr)396 4480 y Fn(target)p Fv(,)g(and)f(are)i(created)e(from)g
-(special)h(e)o(x)o(emplars)f(contained)f(in)j(the)f Fq(spec)g
-Fv(\(see)g(pxp_document.mli\).)p Black 3800 5278 a Fr(71)p
-Black eop
-%%Page: 72 72
-72 71 bop Black 2225 67 a Fr(Chapter)20 b(3.)g(The)g(objects)g(r)m(epr)
-m(esenting)g(the)g(document)p Black -2 583 a Fp(3.4.6.)35
-b(The)f(representation)h(of)e(comments)396 751 y Fv(Normally)-5
-b(,)19 b(comments)g(are)h(not)g(represented;)e(the)o(y)i(are)g(dropped)
-e(by)h(def)o(ault.)h(Ho)n(we)n(v)o(er)m(,)e(if)i(you)f(require)g(them,)
-h(it)h(is)396 859 y(possible)f(to)h(create)e Fq(T_comment)h
-Fv(nodes)f(for)h(them.)f(This)i(mode)e(can)h(be)g(speci\002ed)g(by)g
-(the)g(option)396 967 y Fq(enable_comment_nodes)p Fv(.)d(Comment)j
-(nodes)f(are)h(created)g(from)f(special)h(e)o(x)o(emplars)f(contained)f
-(in)j(the)f Fq(spec)396 1075 y Fv(\(see)h(pxp_document.mli\).)15
-b(Y)-9 b(ou)19 b(can)h(access)h(the)f(contents)g(of)g(comments)f
-(through)f(the)i(method)f Fq(comment)p Fv(.)-2 1444 y
-Fp(3.4.7.)35 b(The)f(attrib)n(utes)f Fc(xml:lang)d Fp(and)k
-Fc(xml:space)396 1612 y Fv(These)20 b(attrib)n(utes)g(are)g(not)g
-(supported)f(specially;)h(the)o(y)f(are)h(handled)f(lik)o(e)h(an)o(y)g
-(other)f(attrib)n(ute.)-2 1982 y Fp(3.4.8.)35 b(And)f(what)f(about)h
-(namespaces?)396 2149 y Fv(Currently)-5 b(,)19 b(there)g(is)i(no)f
-(special)h(support)d(for)i(namespaces.)f(Ho)n(we)n(v)o(er)m(,)f(the)i
-(parser)g(allo)n(ws)g(it)h(that)f(the)h(colon)e(occurs)396
-2257 y(in)i(names)e(such)h(that)h(it)g(is)g(possible)f(to)g(implement)f
-(namespaces)g(on)h(top)g(of)g(the)g(current)f(API.)396
-2407 y(Some)h(future)f(release)h(of)g(PXP)h(will)g(support)e
-(namespaces)g(as)i(b)n(uilt-in)f(feature...)p Black 3800
-5278 a Fr(72)p Black eop
-%%Page: 73 73
-73 72 bop Black Black -2 621 a Fs(Chapter)48 b(4.)f(Con\002guring)j
-(and)e(calling)f(the)h(par)m(ser)-2 1055 y Fx(4.1.)39
-b(Over)q(vie)n(w)396 1235 y Fv(There)20 b(are)g(the)g(follo)n(wing)f
-(main)g(functions)g(in)m(v)n(oking)f(the)i(parser)g(\(in)g(Pxp_yacc\):)
-p Black 396 1558 a Ft(\225)p Black 60 w Fr(par)o(se_document_entity:)d
-Fv(Y)-9 b(ou)19 b(w)o(ant)i(to)f(parse)g(a)g(complete)g(and)f(closed)h
-(document)e(consisting)i(of)g(a)g(DTD)h(and)479 1666
-y(the)f(document)f(body;)g(the)h(body)f(is)i(v)n(alidated)e(against)g
-(the)h(DTD.)h(This)f(mode)f(is)i(interesting)f(if)g(you)f(ha)n(v)o(e)h
-(a)h(\002le)479 1835 y Fq(<!DOCTYPE)44 b(root)g(...)g([)h(...)f(])h(>)f
-(<root>)g(...)h(</root>)396 1984 y Fv(and)20 b(you)f(can)h(accept)g(an)
-o(y)f(DTD)i(that)f(is)h(included)e(in)h(the)g(\002le)h(\(e.g.)f
-(because)f(the)h(\002le)h(is)g(under)e(your)g(control\).)p
-Black 396 2092 a Ft(\225)p Black 60 w Fr(par)o(se_wfdocument_entity:)e
-Fv(Y)-9 b(ou)20 b(w)o(ant)g(to)g(parse)g(a)h(complete)e(and)h(closed)f
-(document)g(consisting)g(of)h(a)h(DTD)479 2200 y(and)f(the)g(document)e
-(body;)h(b)n(ut)h(the)h(body)d(is)k(not)d(v)n(alidated,)g(only)h(check)
-o(ed)e(for)i(well-formedness.)e(This)i(mode)f(is)479
-2308 y(preferred)f(if)j(v)n(alidation)d(costs)j(too)f(much)f(time)i(or)
-f(if)g(the)g(DTD)h(is)g(missing.)p Black 396 2416 a Ft(\225)p
-Black 60 w Fr(par)o(se_dtd_entity:)d Fv(Y)-9 b(ou)20
-b(w)o(ant)g(only)f(to)i(parse)e(an)i(entity)e(\(\002le\))i(containing)d
-(the)i(e)o(xternal)f(subset)h(of)g(a)h(DTD.)479 2524
-y(Sometimes)f(it)h(is)g(interesting)e(to)i(read)e(such)h(a)h(DTD,)f
-(for)g(e)o(xample)e(to)j(compare)d(it)j(with)g(the)f(DTD)g(included)f
-(in)h(a)479 2632 y(document,)e(or)i(to)g(apply)g(the)g(ne)o(xt)f(mode:)
-p Black 396 2740 a Ft(\225)p Black 60 w Fr(par)o(se_content_entity:)e
-Fv(Y)-9 b(ou)20 b(w)o(ant)g(only)g(to)g(parse)g(an)g(entity)g
-(\(\002le\))g(containing)e(a)j(fragment)d(of)i(a)h(document)479
-2848 y(body;)e(this)i(fragment)d(is)j(v)n(alidated)f(against)f(the)h
-(DTD)h(you)e(pass)i(to)f(the)g(function.)e(Especially)-5
-b(,)19 b(the)i(fragment)479 2956 y(must)g(not)e(ha)n(v)o(e)h(a)65
-b Fo(<)p Fq(!DOCTYPE)p Fo(>)19 b Fv(clause,)h(and)g(must)g(directly)g
-(be)o(gin)f(with)h(an)g(element.)f(The)h(element)g(is)479
-3064 y(v)n(alidated)f(against)h(the)g(DTD.)g(This)h(mode)e(is)i
-(interesting)e(if)i(you)e(w)o(ant)h(to)h(check)e(documents)f(against)i
-(a)h(\002x)o(ed,)479 3172 y(immutable)e(DTD.)p Black
-396 3280 a Ft(\225)p Black 60 w Fr(par)o(se_wfcontent_entity:)f
-Fv(This)i(function)f(also)h(parses)g(a)h(single)f(element)g(without)f
-(DTD,)h(b)n(ut)g(does)g(not)g(v)n(alidate)479 3388 y(it.)p
-Black 396 3495 a Ft(\225)p Black 60 w Fr(e)n(xtr)o(act_dtd_fr)l
-(om_document_entity:)15 b Fv(This)20 b(function)f(e)o(xtracts)g(the)i
-(DTD)f(from)f(a)i(closed)f(document)479 3603 y(consisting)g(of)g(a)g
-(DTD)h(and)e(a)i(document)d(body)-5 b(.)18 b(Both)j(the)f(internal)f
-(and)h(the)g(e)o(xternal)f(subsets)h(are)h(e)o(xtracted.)396
-3794 y(In)f(man)o(y)f(cases,)i Fq(parse_document_entity)c
-Fv(is)k(the)f(preferred)e(mode)i(to)g(parse)g(a)g(document)f(in)h(a)h
-(v)n(alidating)396 3902 y(w)o(ay)-5 b(,)20 b(and)g Fq
-(parse_wfdocument_entity)c Fv(is)22 b(the)e(mode)f(of)h(choice)f(to)i
-(parse)f(a)g(\002le)h(while)f(only)g(checking)e(for)396
-4010 y(well-formedness.)396 4160 y(There)i(are)g(a)g(number)f(of)h(v)n
-(ariations)f(of)h(these)g(modes.)f(One)h(important)f(application)g(of)h
-(a)g(parser)g(is)h(to)f(check)396 4268 y(documents)f(of)h(an)g
-(untrusted)f(source)g(against)h(a)g(\002x)o(ed)g(DTD.)g(One)g(solution)
-f(is)i(to)g(not)f(allo)n(w)g(the)g Fo(<)p Fq(!DOCTYPE)p
-Fo(>)396 4375 y Fv(clause)g(in)h(these)f(documents,)e(and)i(treat)g
-(the)h(document)d(lik)o(e)i(a)h(fragment)d(\(using)i(mode)f
-Fr(par)o(se_content_entity)p Fv(\).)396 4483 y(This)i(is)g(v)o(ery)e
-(simple,)h(b)n(ut)g(in\003e)o(xible;)f(users)i(of)e(such)h(a)h(system)f
-(cannot)f(e)n(v)o(en)h(de\002ne)f(additional)g(entities)i(to)396
-4591 y(abbre)n(viate)e(frequent)f(phrases)i(of)g(their)g(te)o(xt.)396
-4741 y(It)h(may)e(be)i(necessary)e(to)h(ha)n(v)o(e)g(a)h(more)e
-(intelligent)g(check)o(er)-5 b(.)20 b(F)o(or)g(e)o(xample,)e(it)j(is)g
-(also)g(possible)e(to)i(parse)f(the)396 4849 y(document)e(to)j(check)e
-(fully)-5 b(,)19 b(i.e.)h(with)h(DTD,)f(and)f(to)i(compare)d(this)j
-(DTD)f(with)h(the)f(prescribed)f(one.)g(In)h(order)f(to)p
-Black 3800 5278 a Fr(73)p Black eop
-%%Page: 74 74
-74 73 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 396 579 a Fv(fully)g(parse)g(the)g
-(document,)e(mode)h Fr(par)o(se_document_entity)e Fv(is)k(applied,)e
-(and)h(to)g(get)g(the)g(DTD)h(to)f(compare)f(with)396
-687 y(mode)g Fr(par)o(se_dtd_entity)f Fv(can)i(be)h(used.)396
-836 y(There)f(is)h(another)d(v)o(ery)i(important)e(con\002gurable)g
-(aspect)i(of)g(the)g(parser:)g(the)g(so-called)g(resolv)o(er)-5
-b(.)19 b(The)h(task)g(of)g(the)396 944 y(resolv)o(er)f(is)i(to)g
-(locate)f(the)g(contents)f(of)h(an)g(\(e)o(xternal\))f(entity)g(for)h
-(a)h(gi)n(v)o(en)e(entity)g(name,)h(and)f(to)i(mak)o(e)e(the)i
-(contents)396 1052 y(accessible)g(as)f(a)h(character)e(stream.)h
-(\(Furthermore,)d(it)k(also)f(normalizes)g(the)g(character)f(set;)i(b)n
-(ut)f(this)h(is)g(a)f(detail)h(we)396 1160 y(can)f(ignore)f(here.\))g
-(Consider)h(you)f(ha)n(v)o(e)h(a)g(\002le)h(called)f
-Fq("main.xml")f Fv(containing)396 1340 y Fq(<!ENTITY)44
-b(\045)g(sub)h(SYSTEM)f("sub/sub.xml">)396 1437 y(\045sub;)396
-1628 y Fv(and)20 b(a)h(\002le)f(stored)g(in)g(the)h(subdirectory)c
-Fq("sub")j Fv(with)h(name)e Fq("sub.xml")g Fv(containing)396
-1808 y Fq(<!ENTITY)44 b(\045)g(subsub)g(SYSTEM)g("subsub/subsub.xml">)
-396 1906 y(\045subsub;)396 2097 y Fv(and)20 b(a)g(\002le)h(stored)e(in)
-h(the)g(subdirectory)d Fq("subsub")j Fv(of)f Fq("sub")h
-Fv(with)g(name)f Fq("subsub.xml")g Fv(\(the)g(contents)h(of)f(this)396
-2204 y(\002le)i(do)f(not)g(matter\).)f(Here,)h(the)g(resolv)o(er)f
-(must)h(track)g(that)g(the)g(second)g(entity)g Fq(subsub)f
-Fv(is)i(located)f(in)g(the)h(directory)396 2312 y Fq("sub/subsub")p
-Fv(,)e(i.e.)h(the)g(dif)n(\002culty)f(is)i(to)g(interpret)e(the)h
-(system)g(\(\002le\))h(names)e(of)h(entities)h(relati)n(v)o(e)e(to)i
-(the)f(entities)396 2420 y(containing)f(them,)g(e)n(v)o(en)g(if)i(the)f
-(entities)h(are)f(deeply)f(nested.)396 2570 y(There)h(is)h(not)f(a)g
-(\002x)o(ed)g(resolv)o(er)f(already)g(doing)g(e)n(v)o(erything)e(right)
-j(-)g(resolving)f(entity)h(names)g(is)h(a)f(task)h(that)f(highly)396
-2678 y(depends)f(on)h(the)g(en)m(vironment.)d(The)j(XML)g
-(speci\002cation)f(only)h(demands)f(that)h Fq(SYSTEM)g
-Fv(entities)g(are)g(interpreted)396 2786 y(lik)o(e)h(URLs)g(\(which)e
-(is)i(not)f(v)o(ery)f(precise,)h(as)h(there)e(are)i(lots)f(of)g(URL)h
-(schemes)f(in)g(use\),)g(hoping)f(that)h(this)h(helps)396
-2894 y(o)o(v)o(ercoming)c(the)j(local)g(peculiarities)g(of)g(the)g(en)m
-(vironment;)d(the)k(idea)f(is)h(that)f(if)h(you)e(do)h(not)f(kno)n(w)h
-(your)396 3001 y(en)m(vironment)d(you)j(can)g(refer)f(to)h(other)g
-(entities)g(by)g(denoting)e(URLs)k(for)d(them.)h(I)g(think)g(that)g
-(this)h(interpretation)d(of)396 3109 y Fq(SYSTEM)i Fv(names)g(may)g(ha)
-n(v)o(e)f(some)h(applications)f(in)i(the)f(internet,)f(b)n(ut)h(it)h
-(is)g(not)f(the)g(\002rst)h(choice)f(in)g(general.)396
-3217 y(Because)h(of)f(this,)g(the)g(resolv)o(er)f(is)i(a)g(separate)f
-(module)e(of)i(the)h(parser)e(that)h(can)g(be)h(e)o(xchanged)c(by)j
-(another)f(one)g(if)396 3325 y(necessary;)h(more)f(precisely)-5
-b(,)19 b(the)h(parser)g(already)f(de\002nes)h(se)n(v)o(eral)f(resolv)o
-(ers.)396 3475 y(The)h(follo)n(wing)f(resolv)o(ers)g(do)h(already)f(e)o
-(xist:)p Black 396 3707 a Ft(\225)p Black 60 w Fv(Resolv)o(ers)h
-(reading)f(from)g(arbitrary)g(input)g(channels.)g(These)h(can)g(be)g
-(con\002gured)e(such)i(that)g(a)h(certain)f(ID)g(is)479
-3815 y(associated)g(with)h(the)f(channel;)f(in)h(this)h(case)g(inner)e
-(references)g(to)h(e)o(xternal)f(entities)i(can)f(be)g(resolv)o(ed.)e
-(There)i(is)479 3923 y(also)h(a)f(special)h(resolv)o(er)e(that)h
-(interprets)f(SYSTEM)i(IDs)f(as)h(URLs;)g(this)g(resolv)o(er)e(can)h
-(process)g(relati)n(v)o(e)479 4031 y(SYSTEM)h(names)e(and)h(determine)f
-(the)h(corresponding)d(absolute)i(URL.)p Black 396 4139
-a Ft(\225)p Black 60 w Fv(A)i(resolv)o(er)e(that)h(reads)g(al)o(w)o
-(ays)h(from)e(a)i(gi)n(v)o(en)d(O'Caml)j(string.)e(This)i(resolv)o(er)e
-(is)i(not)f(able)g(to)g(resolv)o(e)f(further)479 4247
-y(names)h(unless)g(the)h(string)f(is)h(not)f(associated)g(with)g(an)o
-(y)f(name,)h(i.e.)g(if)g(the)g(document)f(contained)f(in)j(the)f
-(string)479 4355 y(refers)g(to)g(an)g(e)o(xternal)f(entity)-5
-b(,)20 b(this)g(reference)f(cannot)g(be)h(follo)n(wed)f(in)h(this)h
-(case.)p Black 396 4463 a Ft(\225)p Black 60 w Fv(A)g(resolv)o(er)e
-(for)g(\002le)i(names.)f(The)g Fq(SYSTEM)g Fv(name)f(is)i(interpreted)e
-(as)i(\002le)f(URL)h(with)g(the)f(slash)h("/")f(as)h(separator)479
-4571 y(for)f(directories.)f(-)h(This)h(resolv)o(er)d(is)k(deri)n(v)o
-(ed)c(from)h(the)h(generic)f(URL)i(resolv)o(er)-5 b(.)396
-4720 y(The)20 b(interf)o(ace)f(a)i(resolv)o(er)e(must)h(ha)n(v)o(e)g
-(is)h(documented,)c(so)k(it)g(is)g(possible)f(to)g(write)g(your)f(o)n
-(wn)h(resolv)o(er)-5 b(.)19 b(F)o(or)396 4828 y(e)o(xample,)g(you)g
-(could)g(connect)g(the)h(parser)g(with)g(an)h(HTTP)f(client,)g(and)f
-(resolv)o(e)h(URLs)h(of)f(the)g(HTTP)g(namespace.)p Black
-3800 5278 a Fr(74)p Black eop
-%%Page: 75 75
-75 74 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 396 579 a Fv(The)g(resolv)o(er)f
-(classes)i(support)e(that)h(se)n(v)o(eral)g(independent)e(resolv)o(ers)
-h(are)h(combined)e(to)i(one)g(more)f(po)n(werful)396
-687 y(resolv)o(er;)g(thus)h(it)h(is)g(possible)f(to)h(combine)d(a)j
-(self-written)e(resolv)o(er)g(with)i(the)f(already)f(e)o(xisting)g
-(resolv)o(ers.)396 836 y(Note)h(that)h(the)f(e)o(xisting)f(resolv)o
-(ers)h(only)f(interpret)g Fq(SYSTEM)h Fv(names,)f(not)h
-Fq(PUBLIC)g Fv(names.)g(If)g(it)h(helps)f(you,)f(it)h(is)396
-944 y(possible)g(to)f(de\002ne)h(resolv)o(ers)e(for)h
-Fq(PUBLIC)h Fv(names,)f(too;)g(for)g(e)o(xample,)f(such)i(a)g(resolv)o
-(er)e(could)h(look)g(up)g(the)h(public)396 1052 y(name)g(in)g(a)h(hash)
-f(table,)g(and)f(map)h(it)h(to)f(a)h(system)f(name)g(which)g(is)h
-(passed)f(o)o(v)o(er)f(to)h(the)g(e)o(xisting)g(resolv)o(er)e(for)396
-1160 y(system)j(names.)e(It)i(is)g(relati)n(v)o(ely)e(simple)h(to)g
-(pro)o(vide)f(such)g(a)i(resolv)o(er)-5 b(.)-2 1579 y
-Fx(4.2.)39 b(Resolver)n(s)e(and)i(sour)m(ces)-2 1907
-y Fp(4.2.1.)c(Using)f(the)g(b)n(uilt-in)f(resolver)n(s)i(\(called)g
-(sour)n(ces\))396 2075 y Fv(The)20 b(type)g Fq(source)g
-Fv(enumerates)e(the)j(tw)o(o)f(possibilities)h(where)e(the)h(document)f
-(to)h(parse)g(comes)g(from.)396 2255 y Fq(type)44 b(source)g(=)576
-2352 y(Entity)f(of)i(\(\(dtd)f(-)p Fo(>)g Fq(Pxp_entity.entity\))e(*)j
-(Pxp_reader.resolver\))486 2449 y(|)g(ExtID)f(of)g(\(ext_id)g(*)g
-(Pxp_reader.resolver\))396 2640 y Fv(Y)-9 b(ou)20 b(normally)e(need)i
-(not)g(to)g(w)o(orry)f(about)h(this)g(type)g(as)h(there)f(are)g(con)m
-(v)o(enience)d(functions)i(that)h(create)g Fq(source)396
-2748 y Fv(v)n(alues:)p Black 396 3105 a Ft(\225)p Black
-60 w Fq(from_file)44 b(s)p Fv(:)20 b(The)g(document)e(is)j(read)f(from)
-f(\002le)i Fq(s)p Fv(;)g(you)e(may)h(specify)f(absolute)h(or)g(relati)n
-(v)o(e)f(path)h(names.)479 3213 y(The)g(\002le)h(name)f(must)g(be)g
-(encoded)e(as)j(UTF-8)f(string.)479 3362 y(There)g(is)h(an)f(optional)f
-(ar)o(gument)f Fq(~system_encoding)g Fv(specifying)g(the)j(character)d
-(encoding)h(which)g(is)i(used)479 3470 y(for)f(the)g(names)g(of)g(the)g
-(\002le)h(system.)f(F)o(or)g(e)o(xample,)e(if)j(this)g(encoding)d(is)j
-(ISO-8859-1)c(and)j Fq(s)g Fv(is)i(also)e(a)479 3578
-y(ISO-8859-1)e(string,)h(you)h(can)g(form)f(the)h(source:)479
-3717 y Fq(let)45 b(s_utf8)88 b(=)i(recode_string)42 b
-(~in_enc:`Enc_iso88591)g(~out_enc:`Enc_utf8)g(s)i(in)479
-3814 y(from_file)g(~system_encoding:`Enc_iso88591)39
-b(s_utf8)479 4005 y Fv(This)21 b Fq(source)e Fv(has)i(the)f(adv)n
-(antage)e(that)j(it)f(is)i(able)e(to)g(resolv)o(e)f(inner)h(e)o
-(xternal)f(entities;)h(i.e.)g(if)h(your)e(document)479
-4113 y(includes)g(data)g(from)g(another)f(\002le)i(\(using)f(the)g
-Fq(SYSTEM)g Fv(attrib)n(ute\),)g(this)g(mode)g(will)h(\002nd)f(that)h
-(\002le.)g(Ho)n(we)n(v)o(er)m(,)d(this)479 4221 y(mode)j(cannot)f
-(resolv)o(e)g Fq(PUBLIC)h Fv(identi\002ers)f(nor)h Fq(SYSTEM)g
-Fv(identi\002ers)f(other)h(than)g("\002le:".)p Black
-396 4370 a Ft(\225)p Black 60 w Fq(from_channel)43 b(ch)p
-Fv(:)21 b(The)e(document)g(is)i(read)e(from)h(the)g(channel)f
-Fq(ch)p Fv(.)h(In)g(general,)f(this)h(source)g(also)g(supports)479
-4478 y(\002le)h(URLs)g(found)e(in)h(the)g(document;)f(ho)n(we)n(v)o(er)
-m(,)e(by)j(def)o(ault)f(only)h(absolute)f(URLs)i(are)f(understood.)e
-(It)i(is)479 4586 y(possible)g(to)h(associate)f(an)g(ID)g(with)h(the)f
-(channel)f(such)h(that)g(the)g(resolv)o(er)f(kno)n(ws)h(ho)n(w)f(to)i
-(interpret)e(relati)n(v)o(e)479 4694 y(URLs:)479 4832
-y Fq(from_channel)43 b(~id:\(System)g("file:///dir/dir1/"\))f(ch)p
-Black 3800 5278 a Fr(75)p Black eop
-%%Page: 76 76
-76 75 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 396 579 a Fv(There)g(is)h(also)f
-(the)g(~system_encoding)e(ar)o(gument)f(specifying)i(ho)n(w)h(\002le)h
-(names)e(are)i(encoded.)d(-)i(The)g(e)o(xample)479 687
-y(from)f(abo)o(v)o(e)g(can)h(also)g(be)h(written)f(\(b)n(ut)f(it)i(is)g
-(no)f(longer)f(possible)h(to)g(interpret)f(relati)n(v)o(e)h(URLs)h
-(because)e(there)h(is)479 795 y(no)g(~id)g(ar)o(gument,)e(and)i
-(computing)d(this)k(ar)o(gument)d(is)j(relati)n(v)o(ely)e(complicated)g
-(because)g(it)i(must)f(be)h(a)f(v)n(alid)479 903 y(URL\):)479
-1041 y Fq(let)45 b(ch)f(=)h(open_in)e(s)i(in)479 1138
-y(let)g(src)f(=)h(from_channel)d(~system_encoding:`Enc_iso88591)e(ch)45
-b(in)479 1236 y(...;)479 1333 y(close_in)f(ch)p Black
-396 1482 a Ft(\225)p Black 60 w Fq(from_string)f(s)p
-Fv(:)21 b(The)f(string)g Fq(s)g Fv(is)h(the)g(document)d(to)i(parse.)g
-(This)g(mode)f(is)j(not)d(able)h(to)h(interpret)e(\002le)i(names)479
-1590 y(of)f Fq(SYSTEM)g Fv(clauses,)g(nor)g(it)h(can)f(look)f(up)h
-Fq(PUBLIC)f Fv(identi\002ers.)479 1740 y(Normally)-5
-b(,)19 b(the)h(encoding)e(of)i(the)g(string)g(is)h(detected)e(as)i
-(usual)f(by)g(analyzing)f(the)h(XML)g(declaration,)e(if)j(an)o(y)-5
-b(.)479 1847 y(Ho)n(we)n(v)o(er)m(,)18 b(it)j(is)g(also)g(possible)f
-(to)g(specify)g(the)g(encoding)e(directly:)479 1986 y
-Fq(let)45 b(src)f(=)h(from_string)e(~fixenc:`ISO-8859-2)e(s)p
-Black 396 2177 a Ft(\225)p Black 60 w Fq(ExtID)j(\(id,)g(r\))p
-Fv(:)21 b(The)f(document)e(to)i(parse)g(is)h(denoted)e(by)h(the)g
-(identi\002er)g Fq(id)g Fv(\(either)f(a)i Fq(SYSTEM)f
-Fv(or)g Fq(PUBLIC)479 2285 y Fv(clause\),)g(and)g(this)g(identi\002er)g
-(is)h(interpreted)d(by)i(the)g(resolv)o(er)f Fq(r)p Fv(.)i(Use)f(this)h
-(mode)e(if)i(you)e(ha)n(v)o(e)h(written)g(your)f(o)n(wn)479
-2393 y(resolv)o(er)-5 b(.)479 2542 y(Which)20 b(character)f(sets)j(are)
-e(possible)g(depends)e(on)i(the)g(passed)h(resolv)o(er)d
-Fq(r)p Fv(.)p Black 396 2692 a Ft(\225)p Black 60 w Fq(Entity)44
-b(\(get_entity,)f(r\))p Fv(:)20 b(The)g(document)e(to)j(parse)f(is)h
-(returned)d(by)i(the)g(function)f(in)m(v)n(ocation)479
-2800 y Fq(get_entity)43 b(dtd)p Fv(,)20 b(where)g Fq(dtd)g
-Fv(is)h(the)g(DTD)f(object)g(to)g(use)g(\(it)h(may)f(be)g(empty\).)f
-(Inner)f(e)o(xternal)h(references)479 2908 y(occuring)g(in)h(this)h
-(entity)e(are)i(resolv)o(ed)d(using)i(the)g(resolv)o(er)f
-Fq(r)p Fv(.)479 3057 y(Which)h(character)f(sets)j(are)e(possible)g
-(depends)e(on)i(the)g(passed)h(resolv)o(er)d Fq(r)p Fv(.)-2
-3510 y Fp(4.2.2.)35 b(The)f(resolver)g(API)396 3677 y
-Fv(A)21 b(resolv)o(er)e(is)i(an)f(object)g(that)g(can)g(be)g(opened)e
-(lik)o(e)j(a)f(\002le,)h(b)n(ut)f(you)f(do)h(not)g(pass)g(the)h(\002le)
-f(name)g(to)g(the)g(resolv)o(er)m(,)f(b)n(ut)396 3785
-y(the)h(XML)h(identi\002er)e(of)h(the)g(entity)g(to)h(read)e(from)g
-(\(either)h(a)g Fq(SYSTEM)g Fv(or)g Fq(PUBLIC)g Fv(clause\).)f(When)h
-(opened,)f(the)396 3893 y(resolv)o(er)g(must)h(return)f(the)i
-Fq(Lexing.lexbuf)d Fv(that)i(reads)g(the)h(characters.)e(The)g(resolv)o
-(er)g(can)h(be)h(closed,)e(and)h(it)396 4001 y(can)g(be)g(cloned.)f
-(Furthermore,)f(it)j(is)g(possible)f(to)g(tell)h(the)f(resolv)o(er)f
-(which)h(character)f(set)i(it)g(should)e(assume.)h(-)g(The)396
-4109 y(follo)n(wing)f(from)g(Pxp_reader:)396 4289 y Fq(exception)44
-b(Not_competent)396 4386 y(exception)g(Not_resolvable)e(of)j(exn)396
-4581 y(class)f(type)g(resolver)g(=)486 4678 y(object)576
-4775 y(method)f(init_rep_encoding)f(:)j(rep_encoding)e(->)h(unit)576
-4872 y(method)f(init_warner)g(:)i(collect_warnings)d(->)j(unit)p
-Black 3798 5278 a Fr(76)p Black eop
-%%Page: 77 77
-77 76 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 576 579 a Fq(method)43
-b(rep_encoding)g(:)i(rep_encoding)576 676 y(method)e(open_in)h(:)h
-(ext_id)f(->)g(Lexing.lexbuf)576 773 y(method)f(close_in)h(:)h(unit)576
-870 y(method)e(change_encoding)g(:)h(string)g(->)h(unit)576
-967 y(method)e(clone)h(:)h(resolver)576 1065 y(method)e(close_all)h(:)g
-(unit)486 1162 y(end)396 1353 y Fv(The)20 b(resolv)o(er)f(object)h
-(must)g(w)o(ork)f(as)i(follo)n(ws:)p Black 396 1627 a
-Ft(\225)p Black 60 w Fv(When)f(the)h(parser)e(is)i(called,)f(it)h
-(tells)g(the)f(resolv)o(er)f(the)h(w)o(arner)g(object)f(and)h(the)g
-(internal)g(encoding)e(by)i(in)m(v)n(oking)479 1735 y
-Fq(init_warner)f Fv(and)h Fq(init_rep_encoding)p Fv(.)d(The)j(resolv)o
-(er)f(should)g(store)i(these)f(v)n(alues.)f(The)h(method)479
-1843 y Fq(rep_encoding)f Fv(should)g(return)g(the)h(internal)g
-(encoding.)p Black 396 1950 a Ft(\225)p Black 60 w Fv(If)g(the)h
-(parser)e(w)o(ants)i(to)f(read)g(from)f(the)h(resolv)o(er)m(,)e(it)j
-(in)m(v)n(ok)o(es)f(the)g(method)f Fq(open_in)p Fv(.)g(Either)h(the)g
-(resolv)o(er)479 2058 y(succeeds,)g(in)g(which)g(case)g(the)h
-Fq(Lexing.lexbuf)d Fv(reading)h(from)g(the)h(\002le)h(or)f(stream)g
-(must)g(be)h(returned,)d(or)479 2166 y(opening)h(f)o(ails.)h(In)g(the)g
-(latter)h(case)f(the)h(method)d(implementation)g(should)h(raise)i(an)f
-(e)o(xception)e(\(see)j(belo)n(w\).)p Black 396 2274
-a Ft(\225)p Black 60 w Fv(If)f(the)h(parser)e(\002nishes)i(reading,)d
-(it)j(calls)g(the)f Fq(close_in)g Fv(method.)p Black
-396 2382 a Ft(\225)p Black 60 w Fv(If)g(the)h(parser)e(\002nds)h(a)h
-(reference)d(to)j(another)e(e)o(xternal)f(entity)i(in)h(the)f(input)f
-(stream,)h(it)h(calls)g Fq(clone)f Fv(to)g(get)h(a)479
-2490 y(second)f(resolv)o(er)f(which)g(must)h(be)h(initially)f(closed)g
-(\(not)f(yet)h(connected)f(with)h(an)g(input)f(stream\).)h(The)g
-(parser)479 2598 y(then)g(in)m(v)n(ok)o(es)f Fq(open_in)h
-Fv(and)f(the)i(other)e(methods)g(as)i(described.)p Black
-396 2706 a Ft(\225)p Black 60 w Fv(If)f(you)g(already)f(kno)n(w)g(the)h
-(character)f(set)i(of)f(the)g(input)g(stream,)f(you)h(should)f(recode)g
-(it)i(to)f(the)g(internal)479 2814 y(encoding,)e(and)i(de\002ne)f(the)i
-(method)d Fq(change_encoding)h Fv(as)i(an)f(empty)f(method.)p
-Black 396 2922 a Ft(\225)p Black 60 w Fv(If)h(you)g(w)o(ant)g(to)g
-(support)f(multiple)h(e)o(xternal)f(character)g(sets,)i(the)f(object)f
-(must)i(follo)n(w)e(a)i(much)e(more)479 3030 y(complicated)g(protocol.)
-f(Directly)i(after)g Fq(open_in)f Fv(has)i(been)e(called,)h(the)g
-(resolv)o(er)f(must)h(return)f(a)i(le)o(xical)f(b)n(uf)n(fer)479
-3138 y(that)h(only)e(reads)h(one)g(byte)f(at)i(a)g(time.)f(This)g(is)h
-(only)f(possible)f(if)i(you)e(create)h(the)g(le)o(xical)g(b)n(uf)n(fer)
-f(with)479 3246 y Fq(Lexing.from_function)p Fv(;)e(the)j(function)d
-(must)j(then)f(al)o(w)o(ays)h(return)e(1)i(if)f(the)h(EOF)g(is)g(not)f
-(yet)h(reached,)e(and)h(0)479 3354 y(if)i(EOF)f(is)h(reached.)e(If)h
-(the)g(parser)g(has)g(read)g(the)g(\002rst)h(line)f(of)g(the)h
-(document,)c(it)k(will)g(in)m(v)n(ok)o(e)479 3461 y Fq(change_encoding)
-e Fv(to)h(tell)h(the)f(resolv)o(er)f(which)h(character)e(set)j(to)g
-(assume.)f(From)f(this)i(moment,)e(the)h(object)479 3569
-y(can)g(return)f(more)h(than)f(one)h(byte)g(at)g(once.)g(The)g(ar)o
-(gument)d(of)j Fq(change_encoding)f Fv(is)i(either)e(the)i(parameter)d
-(of)479 3677 y(the)i("encoding")e(attrib)n(ute)i(of)g(the)g(XML)h
-(declaration,)d(or)i(the)g(empty)f(string)h(if)h(there)e(is)j(not)d(an)
-o(y)h(XML)479 3785 y(declaration)f(or)h(if)g(the)h(declaration)d(does)i
-(not)g(contain)f(an)h(encoding)e(attrib)n(ute.)479 3935
-y(At)j(the)f(be)o(ginning)e(the)i(resolv)o(er)f(must)h(only)g(return)f
-(one)g(character)g(e)n(v)o(ery)g(time)h(something)f(is)i(read)f(from)f
-(the)479 4043 y(le)o(xical)h(b)n(uf)n(fer)-5 b(.)19 b(The)h(reason)f
-(for)h(this)h(is)g(that)f(you)f(otherwise)h(w)o(ould)f(not)h(e)o
-(xactly)g(kno)n(w)f(at)h(which)g(position)f(in)479 4151
-y(the)h(input)g(stream)g(the)g(character)f(set)i(changes.)479
-4300 y(If)f(you)g(w)o(ant)g(automatic)f(recognition)f(of)i(the)g
-(character)f(set,)i(it)g(is)g(up)f(to)g(the)g(resolv)o(er)f(object)h
-(to)g(implement)f(this.)p Black 396 4449 a Ft(\225)p
-Black 60 w Fv(If)h(an)g(error)g(occurs,)f(the)h(parser)g(calls)g(the)h
-(method)d Fq(close_all)i Fv(for)f(the)h(top-le)n(v)o(el)f(resolv)o(er;)
-g(this)i(method)479 4557 y(should)e(close)i(itself)g(\(if)f(not)g
-(already)f(done\))f(and)i(all)h(clones.)396 4748 y Fu(Exceptions.)f
-Fv(It)h(is)g(possible)f(to)g(chain)g(resolv)o(ers)f(such)h(that)g(when)
-g(the)g(\002rst)h(resolv)o(er)e(is)i(not)f(able)g(to)g(open)f(the)396
-4856 y(entity)-5 b(,)20 b(the)g(other)f(resolv)o(ers)g(of)h(the)g
-(chain)g(are)g(tried)g(in)g(turn.)g(The)g(method)e Fq(open_in)i
-Fv(should)f(raise)i(the)f(e)o(xception)p Black 3797 5278
-a Fr(77)p Black eop
-%%Page: 78 78
-78 77 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 396 579 a Fq(Not_competent)f
-Fv(to)h(indicate)g(that)g(the)g(ne)o(xt)g(resolv)o(er)f(should)g(try)h
-(to)g(open)f(the)i(entity)-5 b(.)19 b(If)h(the)g(resolv)o(er)f(is)i
-(able)f(to)396 687 y(handle)f(the)i(ID,)f(b)n(ut)g(some)g(other)f
-(error)g(occurs,)g(the)i(e)o(xception)d Fq(Not_resolvable)g
-Fv(should)i(be)g(raised)g(to)g(force)396 795 y(that)h(the)f(chain)f
-(breaks.)396 944 y(Example:)g(Ho)n(w)h(to)h(de\002ne)e(a)i(resolv)o(er)
-e(that)h(is)h(equi)n(v)n(alent)e(to)h(from_string:)e(...)-2
-1314 y Fp(4.2.3.)35 b(Prede\002ned)f(resolver)h(components)396
-1482 y Fv(There)20 b(are)g(some)g(classes)h(in)f(Pxp_reader)e(that)j
-(de\002ne)e(common)g(resolv)o(er)f(beha)n(viour)-5 b(.)396
-1662 y Fq(class)44 b(resolve_read_this_channel)d(:)576
-1759 y(?id:ext_id)i(->)576 1856 y(?fixenc:encoding)f(->)576
-1953 y(?auto_close:bool)g(->)576 2050 y(in_channel)h(->)755
-2147 y(resolver)396 2338 y Fv(Reads)21 b(from)e(the)h(passed)g(channel)
-f(\(it)i(may)f(be)g(e)n(v)o(en)f(a)i(pipe\).)e(If)h(the)g
-Fq(~id)g Fv(ar)o(gument)e(is)j(passed)f(to)h(the)f(object,)f(the)396
-2446 y(created)h(resolv)o(er)f(accepts)h(only)f(this)i(ID.)f(Otherwise)
-g(all)h(IDs)f(are)g(accepted.)f(-)i(Once)f(the)g(resolv)o(er)f(has)h
-(been)396 2554 y(cloned,)f(it)h(does)g(not)f(accept)h(an)o(y)f(ID.)g
-(This)h(means)g(that)g(this)g(resolv)o(er)e(cannot)h(handle)g(inner)g
-(references)f(to)i(e)o(xternal)396 2662 y(entities.)h(Note)f(that)g
-(you)f(can)h(combine)f(this)i(resolv)o(er)e(with)h(another)f(resolv)o
-(er)g(that)h(can)g(handle)f(inner)g(references)396 2770
-y(\(such)h(as)h(resolv)o(e_as_\002le\);)d(see)j(class)g('combine')d
-(belo)n(w)-5 b(.)19 b(-)h(If)g(you)g(pass)g(the)h Fq(~fixenc)e
-Fv(ar)o(gument,)f(the)i(encoding)396 2878 y(of)g(the)g(channel)f(is)i
-(set)g(to)g(the)f(passed)g(v)n(alue,)f(re)o(gardless)g(of)h(an)o(y)f
-(auto-recognition)e(or)j(an)o(y)f(XML)h(declaration.)f(-)h(If)396
-2986 y Fq(~auto_close)43 b(=)i(true)20 b Fv(\(which)f(is)i(the)g(def)o
-(ault\),)e(the)h(channel)f(is)i(closed)f(after)g(use.)g(If)g
-Fq(~auto_close)43 b(=)396 3094 y(false)p Fv(,)20 b(the)g(channel)f(is)i
-(left)g(open.)396 3315 y Fq(class)44 b(resolve_read_any_channel)d(:)576
-3413 y(?auto_close:bool)h(->)576 3510 y(channel_of_id:\(ext_id)f(->)j
-(\(in_channel)f(*)i(encoding)f(option\)\))f(->)755 3607
-y(resolver)396 3798 y Fv(This)21 b(resolv)o(er)e(calls)h(the)h
-(function)d Fq(~channel_of_id)h Fv(to)h(open)f(a)i(ne)n(w)f(channel)f
-(for)g(the)h(passed)g Fq(ext_id)p Fv(.)g(This)396 3906
-y(function)f(must)h(either)g(return)f(the)h(channel)f(and)h(the)g
-(encoding,)e(or)i(it)g(must)h(f)o(ail)f(with)h(Not_competent.)c(The)396
-4014 y(function)i(must)h(return)f Fq(None)h Fv(as)h(encoding)d(if)j
-(the)f(def)o(ault)f(mechanism)g(to)h(recognize)f(the)h(encoding)e
-(should)h(be)396 4122 y(used.)g(It)i(must)e(return)g
-Fq(Some)44 b(e)20 b Fv(if)g(it)h(is)f(already)f(kno)n(wn)f(that)i(the)g
-(encoding)d(of)j(the)f(channel)g(is)i Fq(e)p Fv(.)e(If)h
-Fq(~auto_close)396 4230 y(=)45 b(true)19 b Fv(\(which)g(is)h(the)f(def)
-o(ault\),)f(the)i(channel)e(is)i(closed)f(after)g(use.)h(If)f
-Fq(~auto_close)43 b(=)h(false)p Fv(,)19 b(the)h(channel)e(is)396
-4337 y(left)j(open.)396 4559 y Fq(class)44 b(resolve_read_url_channel)d
-(:)576 4656 y(?base_url:Neturl.url)g(->)576 4753 y(?auto_close:bool)h
-(->)576 4851 y(url_of_id:\(ext_id)g(->)i(Neturl.url\))f(->)p
-Black 3800 5278 a Fr(78)p Black eop
-%%Page: 79 79
-79 78 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 576 579 a Fq
-(channel_of_url:\(Neturl.url)40 b(->)45 b(\(in_channel)e(*)h(encoding)g
-(option\)\))f(->)755 676 y(resolver)396 867 y Fv(When)20
-b(this)h(resolv)o(er)e(gets)h(an)h(ID)f(to)g(read)g(from,)f(it)i(calls)
-g(the)f(function)e Fq(~url_of_id)h Fv(to)i(get)f(the)g(corresponding)
-396 975 y(URL.)h(This)f(URL)h(may)f(be)g(a)g(relati)n(v)o(e)g(URL;)h
-(ho)n(we)n(v)o(er)m(,)c(a)k(URL)g(scheme)f(must)g(be)g(used)g(which)f
-(contains)h(a)h(path.)396 1083 y(The)f(resolv)o(er)f(con)m(v)o(erts)g
-(the)h(URL)h(to)f(an)g(absolute)f(URL)i(if)g(necessary)-5
-b(.)19 b(The)g(second)h(function,)396 1191 y Fq(~channel_of_url)p
-Fv(,)e(is)j(fed)f(with)h(the)f(absolute)f(URL)i(as)g(input.)e(This)h
-(function)f(opens)g(the)i(resource)e(to)h(read)396 1299
-y(from,)f(and)h(returns)f(the)h(channel)f(and)h(the)g(encoding)e(of)i
-(the)g(resource.)396 1448 y(Both)g(functions,)f Fq(~url_of_id)g
-Fv(and)h Fq(~channel_of_url)p Fv(,)e(can)i(raise)g(Not_competent)e(to)i
-(indicate)g(that)g(the)396 1556 y(object)g(is)h(not)f(able)g(to)g(read)
-g(from)f(the)h(speci\002ed)g(resource.)f(Ho)n(we)n(v)o(er)m(,)f(there)i
-(is)h(a)f(dif)n(ference:)f(A)h(Not_competent)396 1664
-y(from)f Fq(~url_of_id)g Fv(is)j(left)e(as)h(it)g(is,)g(b)n(ut)f(a)h
-(Not_competent)c(from)i Fq(~channel_of_url)g Fv(is)i(con)m(v)o(erted)c
-(to)396 1772 y(Not_resolv)n(able.)h(So)i(only)g Fq(~url_of_id)f
-Fv(decides)h(which)f(URLs)i(are)f(accepted)g(by)f(the)i(resolv)o(er)e
-(and)g(which)h(not.)396 1921 y(The)g(function)f Fq(~channel_of_url)f
-Fv(must)i(return)f Fq(None)h Fv(as)h(encoding)d(if)j(the)f(def)o(ault)f
-(mechanism)g(to)i(recognize)396 2029 y(the)f(encoding)f(should)g(be)h
-(used.)g(It)g(must)g(return)f Fq(Some)44 b(e)21 b Fv(if)g(it)f(is)i
-(already)d(kno)n(wn)f(that)j(the)f(encoding)e(of)i(the)396
-2137 y(channel)f(is)i Fq(e)p Fv(.)396 2287 y(If)f Fq(~auto_close)43
-b(=)i(true)20 b Fv(\(which)f(is)i(the)g(def)o(ault\),)e(the)h(channel)f
-(is)i(closed)f(after)g(use.)g(If)g Fq(~auto_close)43
-b(=)396 2395 y(false)p Fv(,)20 b(the)g(channel)f(is)i(left)g(open.)396
-2544 y(Objects)f(of)g(this)g(class)h(contain)e(a)h(base)g(URL)g(relati)
-n(v)o(e)f(to)h(which)g(relati)n(v)o(e)f(URLs)h(are)g(interpreted.)e
-(When)i(creating)e(a)396 2652 y(ne)n(w)i(object,)g(you)f(can)h(specify)
-f(the)i(base)f(URL)h(by)f(passing)f(it)i(as)g Fq(~base_url)e
-Fv(ar)o(gument.)f(When)i(an)g(e)o(xisting)396 2760 y(object)g(is)h
-(cloned,)e(the)h(base)g(URL)h(of)f(the)g(clone)g(is)h(the)f(URL)h(of)f
-(the)g(original)f(object.)h(-)g(Note)g(that)g(the)h(term)f("base)396
-2868 y(URL")h(has)f(a)h(strict)g(de\002nition)e(in)h(RFC)i(1808.)396
-3089 y Fq(class)44 b(resolve_read_this_string)d(:)576
-3187 y(?id:ext_id)i(->)576 3284 y(?fixenc:encoding)f(->)576
-3381 y(string)h(->)755 3478 y(resolver)396 3669 y Fv(Reads)21
-b(from)e(the)h(passed)g(string.)g(If)g(the)g Fq(~id)h
-Fv(ar)o(gument)c(is)k(passed)g(to)f(the)g(object,)g(the)g(created)f
-(resolv)o(er)g(accepts)396 3777 y(only)h(this)g(ID.)g(Otherwise)g(all)h
-(IDs)g(are)f(accepted.)f(-)h(Once)g(the)g(resolv)o(er)f(has)i(been)e
-(cloned,)g(it)i(does)f(not)g(accept)g(an)o(y)396 3885
-y(ID.)g(This)h(means)f(that)g(this)h(resolv)o(er)e(cannot)g(handle)g
-(inner)g(references)g(to)h(e)o(xternal)f(entities.)i(Note)f(that)g(you)
-f(can)396 3993 y(combine)g(this)i(resolv)o(er)e(with)h(another)f
-(resolv)o(er)g(that)h(can)g(handle)f(inner)g(references)g(\(such)h(as)h
-(resolv)o(e_as_\002le\);)396 4101 y(see)g(class)g('combine')d(belo)n(w)
--5 b(.)19 b(-)i(If)f(you)f(pass)i(the)f Fq(~fixenc)f
-Fv(ar)o(gument,)f(the)i(encoding)e(of)i(the)g(string)g(is)h(set)g(to)g
-(the)396 4209 y(passed)f(v)n(alue,)g(re)o(gardless)e(of)i(an)o(y)g
-(auto-recognition)c(or)k(an)o(y)f(XML)i(declaration.)396
-4430 y Fq(class)44 b(resolve_read_any_string)d(:)576
-4527 y(string_of_id:\(ext_id)g(->)k(\(string)e(*)i(encoding)e
-(option\)\))h(->)755 4625 y(resolver)p Black 3800 5278
-a Fr(79)p Black eop
-%%Page: 80 80
-80 79 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 396 579 a Fv(This)h(resolv)o(er)e
-(calls)h(the)h(function)d Fq(~string_of_id)h Fv(to)h(get)g(the)g
-(string)g(for)g(the)g(passed)g Fq(ext_id)p Fv(.)g(This)g(function)396
-687 y(must)g(either)g(return)f(the)i(string)e(and)h(the)g(encoding,)e
-(or)i(it)h(must)f(f)o(ail)h(with)f(Not_competent.)e(The)h(function)g
-(must)396 795 y(return)g Fq(None)h Fv(as)h(encoding)d(if)j(the)f(def)o
-(ault)g(mechanism)e(to)j(recognize)d(the)i(encoding)f(should)g(be)h
-(used.)g(It)g(must)396 903 y(return)f Fq(Some)44 b(e)21
-b Fv(if)g(it)f(is)i(already)d(kno)n(wn)f(that)j(the)f(encoding)e(of)i
-(the)g(string)g(is)h Fq(e)p Fv(.)396 1124 y Fq(class)44
-b(resolve_as_file)f(:)576 1222 y(?file_prefix:[)f(`Not_recognized)g(|)j
-(`Allowed)f(|)g(`Required)g(])g(->)576 1319 y(?host_prefix:[)e
-(`Not_recognized)g(|)j(`Allowed)f(|)g(`Required)g(])g(->)576
-1416 y(?system_encoding:encoding)c(->)576 1513 y(?url_of_id:\(ext_id)h
-(->)k(Neturl.url\))e(->)576 1610 y(?channel_of_url:)f(\(Neturl.url)h
-(->)h(\(in_channel)f(*)i(encoding)e(option\)\))h(->)576
-1707 y(unit)g(->)755 1804 y(resolver)396 1995 y Fv(Reads)21
-b(from)e(the)h(local)g(\002le)h(system.)f(Ev)o(ery)f(\002le)i(name)f
-(is)h(interpreted)d(as)j(\002le)g(name)f(of)f(the)i(local)f(\002le)h
-(system,)f(and)396 2103 y(the)g(referred)f(\002le)i(is)g(read.)396
-2253 y(The)f(full)g(form)f(of)h(a)h(\002le)g(URL)g(is:)g
-(\002le://host/path,)e(where)h('host')f(speci\002es)i(the)f(host)g
-(system)g(where)g(the)g(\002le)396 2361 y(identi\002ed)g('path')f
-(resides.)h(host)g(=)g("")h(or)f(host)g(=)h("localhost")e(are)h
-(accepted;)f(other)h(v)n(alues)f(will)i(raise)396 2468
-y(Not_competent.)d(The)i(standard)f(for)g(\002le)i(URLs)g(is)g
-(de\002ned)e(in)i(RFC)g(1738.)396 2618 y(Option)f Fq(~file_prefix)p
-Fv(:)e(Speci\002es)j(ho)n(w)f(the)g("\002le:")h(pre\002x)e(of)h(\002le)
-h(names)f(is)h(handled:)p Black 396 2850 a Ft(\225)p
-Black 60 w Fq(`Not_recognized:)p Fv(The)c(pre\002x)j(is)h(not)f
-(recognized.)p Black 396 2958 a Ft(\225)p Black 60 w
-Fq(`Allowed:)g Fv(The)f(pre\002x)h(is)h(allo)n(wed)e(b)n(ut)i(not)f
-(required)e(\(the)i(def)o(ault\).)p Black 396 3066 a
-Ft(\225)p Black 60 w Fq(`Required:)f Fv(The)h(pre\002x)g(is)h
-(required.)396 3257 y(Option)f Fq(~host_prefix:)e Fv(Speci\002es)j(ho)n
-(w)e(the)i("//host")f(phrase)f(of)h(\002le)h(names)f(is)h(handled:)p
-Black 396 3490 a Ft(\225)p Black 60 w Fq(`Not_recognized:)p
-Fv(The)c(pre\002x)j(is)h(not)f(recognized.)p Black 396
-3598 a Ft(\225)p Black 60 w Fq(`Allowed:)g Fv(The)f(pre\002x)h(is)h
-(allo)n(wed)e(b)n(ut)i(not)f(required)e(\(the)i(def)o(ault\).)p
-Black 396 3706 a Ft(\225)p Black 60 w Fq(`Required:)f
-Fv(The)h(pre\002x)g(is)h(required.)396 3896 y(Option)f
-Fq(~system_encoding:)e Fv(Speci\002es)i(the)g(encoding)e(of)i(\002le)h
-(names)f(of)g(the)g(local)g(\002le)h(system.)f(Def)o(ault:)396
-4004 y(UTF-8.)396 4154 y(Options)g Fq(~url_of_id)p Fv(,)f
-Fq(~channel_of_url)p Fv(:)f(Not)i(for)g(the)g(casual)g(user!)396
-4376 y Fq(class)44 b(combine)g(:)576 4473 y(?prefer:resolver)e(->)576
-4570 y(resolver)h(list)h(->)755 4667 y(resolver)p Black
-3800 5278 a Fr(80)p Black eop
-%%Page: 81 81
-81 80 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 396 579 a Fv(Combines)g(se)n(v)o
-(eral)f(resolv)o(er)g(objects.)h(If)g(a)h(concrete)e(entity)g(with)i
-(an)f Fq(ext_id)g Fv(is)h(to)f(be)g(opened,)f(the)h(combined)396
-687 y(resolv)o(er)f(tries)i(the)f(contained)f(resolv)o(ers)g(in)h(turn)
-g(until)g(a)g(resolv)o(er)f(accepts)h(opening)f(the)h(entity)g(\(i.e.)g
-(it)g(does)g(not)396 795 y(raise)h(Not_competent)c(on)j(open_in\).)396
-944 y(Clones:)h(If)f(the)g('clone')f(method)g(is)i(in)m(v)n(ok)o(ed)d
-(before)h('open_in',)e(all)k(contained)e(resolv)o(ers)g(are)h(cloned)f
-(separately)396 1052 y(and)h(again)f(combined.)f(If)i(the)g('clone')f
-(method)g(is)i(in)m(v)n(ok)o(ed)e(after)g('open_in')f(\(i.e.)i(while)g
-(the)g(resolv)o(er)f(is)i(open\),)396 1160 y(additionally)e(the)h
-(clone)f(of)h(the)h(acti)n(v)o(e)e(resolv)o(er)g(is)i(\003agged)f(as)g
-(being)g(preferred,)d(i.e.)k(it)f(is)i(tried)e(\002rst.)-2
-1662 y Fx(4.3.)39 b(The)g(DTD)g(c)m(lasses)396 1841 y
-Fr(Sorry)-5 b(,)21 b(not)f(yet)g(written.)h(P)-7 b(erhaps)20
-b(the)g(interface)g(de\002nition)e(of)j(Pxp_dtd)d(e)n(xpr)m(esses)j
-(the)f(same:)396 2063 y Fq(\(****************************************)o
-(******)o(******)o(******)o(******)o(*****)o(*\))396
-2160 y(\(*)3048 b(*\))396 2257 y(\(*)45 b(Pxp_dtd:)2643
-b(*\))396 2354 y(\(*)224 b(Object)44 b(model)g(of)g(document)g(type)g
-(declarations)939 b(*\))396 2452 y(\(*)3048 b(*\))396
-2549 y(\(****************************************)o(******)o(******)o
-(******)o(******)o(*****)o(*\))396 2743 y(\(*)45 b
-(======================================)o(======)o(======)o(======)o
-(======)o(=====)o(===)441 2840 y(*)g(OVERVIEW)441 2937
-y(*)441 3034 y(*)g(class)f(dtd)g(...............)e(represents)i(the)g
-(whole)g(DTD,)g(including)f(element)441 3132 y(*)1210
-b(declarations,)43 b(entity)h(declarations,)f(notation)441
-3229 y(*)1210 b(declarations,)43 b(and)h(processing)g(instructions)441
-3326 y(*)h(class)f(dtd_element)f(.......)g(represents)h(an)g(element)g
-(declaration)f(consisting)441 3423 y(*)1210 b(of)45 b(a)g(content)e
-(model)h(and)h(an)f(attribute)f(list)441 3520 y(*)1210
-b(declaration)441 3617 y(*)45 b(class)f(dtd_notation)f(......)g
-(represents)h(a)g(notation)g(declaration)441 3714 y(*)h(class)f
-(proc_instruction)e(..)i(represents)g(a)g(processing)f(instruction)441
-3811 y(*)i(======================================)o(======)o(======)o
-(======)o(======)o(=====)o(===)441 3909 y(*)441 4006
-y(*\))396 4297 y(class)f(dtd)h(:)486 4394 y(\(*)f(Creation:)531
-4491 y(*)134 b(new)44 b(dtd)531 4589 y(*)g(creates)g(a)h(new,)f(empty)g
-(DTD)g(object)g(without)g(any)g(declaration,)f(without)g(a)i(root)531
-4686 y(*)f(element,)g(without)g(an)g(ID.)531 4783 y(*\))p
-Black 3800 5278 a Fr(81)p Black eop
-%%Page: 82 82
-82 81 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 486 579 a Fq
-(Pxp_types.collect_warnings)40 b(-)p Fo(>)486 676 y Fq
-(Pxp_types.rep_encoding)h(-)p Fo(>)486 773 y Fq(object)576
-870 y(method)i(root)i(:)f(string)g(option)665 967 y(\(*)h(get)f(the)g
-(name)h(of)f(the)g(root)h(element)e(if)i(present)e(*\))576
-1162 y(method)g(set_root)h(:)h(string)e(-)p Fo(>)i Fq(unit)665
-1259 y(\(*)g(set)f(the)g(name)h(of)f(the)g(root)h(element.)e(This)h
-(method)g(can)g(be)h(invoked)710 1356 y(*)g(only)f(once)710
-1453 y(*\))576 1647 y(method)f(id)i(:)g(Pxp_types.dtd_id)d(option)665
-1745 y(\(*)j(get)f(the)g(identifier)g(for)g(this)g(DTD)g(*\))576
-1939 y(method)f(set_id)h(:)h(Pxp_types.dtd_id)d(-)p Fo(>)i
-Fq(unit)665 2036 y(\(*)h(set)f(the)g(identifier.)f(This)i(method)e(can)
-i(be)f(invoked)g(only)g(once)g(*\))576 2230 y(method)f(encoding)h(:)h
-(Pxp_types.rep_encoding)665 2327 y(\(*)g(returns)e(the)i(encoding)e
-(used)h(for)h(character)e(representation)g(*\))576 2619
-y(method)g(allow_arbitrary)g(:)h(unit)665 2716 y(\(*)h(After)f(this)g
-(method)g(has)g(been)g(invoked,)g(the)g(ob-)396 2813
-y(ject)g(changes)g(its)g(behaviour:)710 2910 y(*)h(-)f(elements)g(and)g
-(notations)g(that)g(have)g(not)g(been)g(added)g(may)h(be)f(used)g(in)h
-(an)710 3007 y(*)134 b(arbitrary)44 b(way;)g(the)g(methods)g("element")
-f(and)i("notation")e(indicate)g(this)710 3104 y(*)134
-b(by)45 b(raising)f(Undeclared)f(instead)g(of)i(Validation_error.)710
-3202 y(*\))576 3396 y(method)e(disallow_arbitrary)f(:)j(unit)576
-3590 y(method)e(arbitrary_allowed)f(:)j(bool)665 3687
-y(\(*)g(Returns)e(whether)h(arbitrary)f(contents)h(are)g(allowed)g(or)g
-(not.)h(*\))576 3882 y(method)e(standalone_declaration)f(:)i(bool)665
-3979 y(\(*)h(Whether)e(there)h(is)h(a)g('standalone')d(declaration)h
-(or)i(not.)f(Strictly)710 4076 y(*)h(speaking,)e(this)h(declaration)f
-(is)i(not)f(part)g(of)h(the)f(DTD,)g(but)h(it)f(is)710
-4173 y(*)h(included)e(here)h(because)g(of)h(practical)e(reasons.)710
-4270 y(*)i(If)f(not)h(set,)f(this)g(property)f(defaults)h(to)g
-('false'.)710 4367 y(*\))576 4561 y(method)f
-(set_standalone_declaration)e(:)k(bool)f(-)p Fo(>)g Fq(unit)665
-4659 y(\(*)h(Sets)f(the)g('standalone')f(declaration.)g(*\))p
-Black 3800 5278 a Fr(82)p Black eop
-%%Page: 83 83
-83 82 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 576 579 a Fq(method)43
-b(add_element)g(:)i(dtd_element)e(-)p Fo(>)h Fq(unit)665
-676 y(\(*)h(add)f(the)g(given)g(element)g(declaration)f(to)i(this)f
-(DTD.)g(Raises)g(Not_found)710 773 y(*)h(if)f(there)g(is)h(already)e
-(an)i(element)f(declaration)f(with)h(the)g(same)g(name.)710
-870 y(*\))576 1065 y(method)f(add_gen_entity)g(:)i(Pxp_entity.entity)d
-(-)p Fo(>)i Fq(bool)g(-)p Fo(>)g Fq(unit)665 1162 y(\(*)h
-(add_gen_entity)d(e)j(extdecl:)710 1259 y(*)g(add)f(the)g(entity)g('e')
-h(as)f(general)g(entity)g(to)g(this)g(DTD)h(\(general)e(entities)710
-1356 y(*)i(are)f(those)g(represented)f(by)i(&name;\).)e(If)i(there)f
-(is)g(already)g(a)g(declaration)710 1453 y(*)h(with)f(the)g(same)g
-(name,)g(the)h(second)f(definition)f(is)h(ignored;)g(as)g(excep-)396
-1550 y(tion)g(from)710 1647 y(*)h(this)f(rule,)g(entities)f(with)i
-(names)f("lt",)g("gt",)g("amp",)f("quot",)h(and)g("apos")710
-1745 y(*)h(may)f(only)g(be)h(redeclared)e(with)h(a)h(definition)e(that)
-h(is)h(equivalent)e(to)h(the)710 1842 y(*)h(standard)e(definition;)g
-(otherwise)h(a)g(Validation_error)e(is)j(raised.)710
-1939 y(*)710 2036 y(*)g('extdecl':)e('true')h(indicates)f(that)h(the)h
-(entity)e(declaration)g(occurs)h(in)710 2133 y(*)h(an)f(external)g
-(entity.)f(\(Used)h(for)h(the)f(standalone)f(check.\))710
-2230 y(*\))576 2424 y(method)g(add_par_entity)g(:)i(Pxp_entity.entity)d
-(-)p Fo(>)i Fq(unit)665 2522 y(\(*)h(add)f(the)g(given)g(entity)g(as)h
-(parameter)e(entity)h(to)g(this)h(DTD)f(\(parameter)710
-2619 y(*)h(entities)e(are)i(those)f(represented)f(by)h(\045name;\).)g
-(If)g(there)g(is)h(already)e(a)710 2716 y(*)i(declaration)e(with)h(the)
-g(same)g(name,)g(the)h(second)f(definition)f(is)h(ignored.)710
-2813 y(*\))576 3007 y(method)f(add_notation)g(:)i(dtd_notation)e(-)p
-Fo(>)h Fq(unit)665 3104 y(\(*)h(add)f(the)g(given)g(notation)g(to)g
-(this)h(DTD.)f(If)g(there)g(is)h(al-)396 3202 y(ready)f(a)h
-(declaration)710 3299 y(*)g(with)f(the)g(same)g(name,)g(a)h
-(Validation_error)d(is)j(raised.)710 3396 y(*\))576 3590
-y(method)e(add_pinstr)h(:)g(proc_instruction)e(-)p Fo(>)j
-Fq(unit)665 3687 y(\(*)g(add)f(the)g(given)g(processing)g(instruction)f
-(to)h(this)g(DTD.)g(*\))576 3882 y(method)f(element)h(:)h(string)f(-)p
-Fo(>)g Fq(dtd_element)665 3979 y(\(*)h(looks)f(up)g(the)h(element)e
-(declaration)g(with)h(the)h(given)f(name.)g(Raises)710
-4076 y(*)h(Validation_error)d(if)i(the)h(element)e(can-)396
-4173 y(not)i(be)f(found.)g(\(If)g("allow_arbitrary")710
-4270 y(*)h(has)f(been)g(invoked)g(before,)g(Unrestricted)e(is)j(raised)
-f(instead.\))710 4367 y(*\))576 4561 y(method)f(element_names)g(:)i
-(string)f(list)665 4659 y(\(*)h(returns)e(the)i(list)f(of)g(the)h
-(names)f(of)g(all)h(element)e(declarations.)g(*\))576
-4853 y(method)g(gen_entity)h(:)g(string)g(-)p Fo(>)g
-Fq(\(Pxp_entity.entity)e(*)j(bool\))p Black 3800 5278
-a Fr(83)p Black eop
-%%Page: 84 84
-84 83 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 665 579 a Fq(\(*)45
-b(let)f(e,)h(extdecl)e(=)i(obj)f(#)h(gen_entity)e(n:)710
-676 y(*)i(looks)f(up)g(the)h(general)e(entity)h('e')g(with)h(the)f
-(name)g('n'.)g(Raises)710 773 y(*)h(WF_error)e(if)i(the)f(entity)g
-(cannot)g(be)g(found.)710 870 y(*)h('extdecl':)e(indicates)g(whether)h
-(the)g(entity)g(declaration)f(occured)h(in)g(an)710 967
-y(*)h(external)e(entity.)710 1065 y(*\))576 1259 y(method)g
-(gen_entity_names)g(:)h(string)g(list)665 1356 y(\(*)h(returns)e(the)i
-(list)f(of)g(all)h(general)e(entity)h(names)g(*\))576
-1550 y(method)f(par_entity)h(:)g(string)g(-)p Fo(>)g
-Fq(Pxp_entity.entity)665 1647 y(\(*)h(looks)f(up)g(the)h(parameter)e
-(entity)h(with)g(the)g(given)g(name.)g(Raises)710 1745
-y(*)h(WF_error)e(if)i(the)f(entity)g(cannot)g(be)g(found.)710
-1842 y(*\))576 2036 y(method)f(par_entity_names)g(:)h(string)g(list)665
-2133 y(\(*)h(returns)e(the)i(list)f(of)g(all)h(parameter)e(entity)h
-(names)g(*\))576 2327 y(method)f(notation)h(:)h(string)e(-)p
-Fo(>)i Fq(dtd_notation)665 2424 y(\(*)g(looks)f(up)g(the)h(notation)e
-(declaration)g(with)h(the)h(given)f(name.)g(Raises)710
-2522 y(*)h(Validation_error)d(if)i(the)h(notation)e(can-)396
-2619 y(not)i(be)f(found.)g(\(If)g("allow_arbitrary")710
-2716 y(*)h(has)f(been)g(invoked)g(before,)g(Unrestricted)e(is)j(raised)
-f(instead.\))710 2813 y(*\))576 3007 y(method)f(notation_names)g(:)i
-(string)e(list)665 3104 y(\(*)i(Returns)e(the)i(list)f(of)g(the)h
-(names)f(of)g(all)h(added)f(notations)f(*\))576 3299
-y(method)g(pinstr)h(:)h(string)f(-)p Fo(>)g Fq(proc_instruction)e(list)
-665 3396 y(\(*)j(looks)f(up)g(all)h(processing)e(instructions)g(with)h
-(the)g(given)g(target.)710 3493 y(*)h(The)f("target")g(is)g(the)g
-(identifier)g(following)f(")p Fo(<)p Fq(?".)710 3590
-y(*)i(Note:)f(It)g(is)h(not)f(possible)g(to)g(find)g(out)h(the)f(exact)
-g(position)f(of)i(the)710 3687 y(*)g(processing)e(instruction.)710
-3784 y(*\))576 3979 y(method)g(pinstr_names)g(:)i(string)f(list)665
-4076 y(\(*)h(Returns)e(the)i(list)f(of)g(the)h(names)f(\(targets\))f
-(of)i(all)f(added)g(pinstrs)f(*\))576 4270 y(method)g(validate)h(:)h
-(unit)665 4367 y(\(*)g(ensures)e(that)i(the)f(DTD)g(is)h(valid.)f(This)
-g(method)g(is)g(optimized)f(such)h(that)710 4464 y(*)h(actual)f
-(validation)f(is)h(only)g(performed)g(if)g(DTD)h(has)f(changed.)710
-4561 y(*)h(If)f(the)h(DTD)f(is)g(invalid,)g(mostly)g(a)g
-(Validation_error)f(is)h(raised,)710 4659 y(*)h(but)f(other)g
-(exceptions)f(are)i(possible,)e(too.)710 4756 y(*\))p
-Black 3800 5278 a Fr(84)p Black eop
-%%Page: 85 85
-85 84 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 576 579 a Fq(method)43
-b(only_deterministic_models)e(:)k(unit)665 676 y(\(*)g(Succeeds)e(if)i
-(all)f(regexp)g(content)g(models)f(are)i(deterministic.)710
-773 y(*)g(Otherwise)e(Validation_error.)710 870 y(*\))576
-1065 y(method)g(write)h(:)h(Pxp_types.output_stream)c(-)p
-Fo(>)j Fq(Pxp_types.encoding)e(-)p Fo(>)j Fq(bool)f(-)396
-1162 y Fo(>)h Fq(unit)665 1259 y(\(*)g(write_compact_as_latin1)c(os)j
-(enc)h(doctype:)710 1356 y(*)g(Writes)f(the)g(DTD)g(as)h('enc'-encoded)
-d(string)i(to)h('os'.)f(If)g('doctype',)f(a)710 1453
-y(*)i(DTD)f(like)g Fo(<)p Fq(!DOCTYPE)f(root)i([)f(...)h(])p
-Fo(>)f Fq(is)g(written.)g(If)g('not)h(doctype',)710 1550
-y(*)g(only)f(the)g(declarations)f(are)h(written)g(\(the)g(material)g
-(within)g(the)710 1647 y(*)h(square)f(brackets\).)710
-1745 y(*\))576 1939 y(method)f(write_compact_as_latin1)e(:)k
-(Pxp_types.output_stream)c(-)p Fo(>)j Fq(bool)h(-)p Fo(>)f
-Fq(unit)665 2036 y(\(*)h(DEPRECATED)e(METHOD;)h(included)f(only)h(to)h
-(keep)f(compatibility)f(with)710 2133 y(*)i(older)f(versions)f(of)i
-(the)f(parser)710 2230 y(*\))576 2522 y
-(\(*---------------------------*\))576 2619 y(method)f(invalidate)h(:)g
-(unit)665 2716 y(\(*)h(INTERNAL)e(METHOD)h(*\))576 2813
-y(method)f(warner)h(:)h(Pxp_types.collect_warnings)665
-2910 y(\(*)g(INTERNAL)e(METHOD)h(*\))486 3007 y(end)396
-3396 y(\(*)h(--------------------------------------)o(------)o(---)39
-b(*\))396 3590 y(and)45 b(dtd_element)e(:)h(dtd)h(-)p
-Fo(>)f Fq(string)g(-)p Fo(>)486 3687 y Fq(\(*)g(Creation:)531
-3784 y(*)134 b(new)44 b(dtd_element)f(init_dtd)h(init_name:)531
-3882 y(*)g(creates)g(a)h(new)f(dtd_element)f(object)h(for)g(init_dtd)g
-(with)g(init_name.)531 3979 y(*)g(The)h(strings)e(are)i(represented)e
-(in)h(the)h(same)f(encoding)f(as)i(init_dtd.)531 4076
-y(*\))486 4173 y(object)576 4367 y(method)e(name)i(:)f(string)665
-4464 y(\(*)h(returns)e(the)i(name)f(of)g(the)h(declared)e(element)h
-(*\))576 4659 y(method)f(externally_declared)f(:)j(bool)665
-4756 y(\(*)g(returns)e(whether)h(the)g(element)g(declaration)f(occurs)h
-(in)g(an)h(external)710 4853 y(*)g(entity.)p Black 3800
-5278 a Fr(85)p Black eop
-%%Page: 86 86
-86 85 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 710 579 a Fq(*\))576
-773 y(method)43 b(content_model)g(:)i(Pxp_types.content_model_type)665
-870 y(\(*)g(get)f(the)g(content)g(model)g(of)h(this)f(element)f
-(declaration,)g(or)i(Unspecified)e(*\))576 1065 y(method)g(content_dfa)
-g(:)i(Pxp_dfa.dfa_definition)c(option)665 1162 y(\(*)k(return)f(the)g
-(DFA)g(of)h(the)f(content)g(model)g(if)g(there)g(is)h(a)f(DFA,)h(or)f
-(None.)710 1259 y(*)h(A)f(DFA)h(exists)f(only)g(for)g(regexp)g(style)g
-(content)g(models)f(which)h(are)710 1356 y(*)h(deterministic.)710
-1453 y(*\))576 1647 y(method)e(set_cm_and_extdecl)f(:)j
-(Pxp_types.content_model_type)40 b(-)p Fo(>)k Fq(bool)h(-)p
-Fo(>)f Fq(unit)665 1745 y(\(*)h(set_cm_and_extdecl)d(cm)i(extdecl:)710
-1842 y(*)h(set)f(the)g(content)g(model)g(to)h('cm'.)f(Once)g(the)g
-(content)g(model)g(is)g(not)710 1939 y(*)h(Unspecified,)e(it)h(cannot)g
-(be)g(set)h(to)f(a)h(different)e(value)h(again.)710 2036
-y(*)h(Furthermore,)e(it)h(is)h(set)f(whether)g(the)g(element)g(occurs)f
-(in)i(an)f(external)710 2133 y(*)h(entity)f(\('extdecl'\).)710
-2230 y(*\))576 2424 y(method)f(encoding)h(:)h(Pxp_types.rep_encoding)
-665 2522 y(\(*)g(Return)f(the)g(encoding)f(of)i(the)f(strings)g(*\))576
-2716 y(method)f(allow_arbitrary)g(:)h(unit)665 2813 y(\(*)h(After)f
-(this)g(method)g(has)g(been)g(invoked,)g(the)g(ob-)396
-2910 y(ject)g(changes)g(its)g(behaviour:)710 3007 y(*)h(-)f(attributes)
-g(that)g(have)g(not)g(been)g(added)g(may)h(be)f(used)g(in)h(an)710
-3104 y(*)134 b(arbitrary)44 b(way;)g(the)g(method)g("attribute")f
-(indicates)g(this)710 3202 y(*)134 b(by)45 b(raising)f(Undeclared)f
-(instead)g(of)i(Validation_error.)710 3299 y(*\))576
-3493 y(method)e(disallow_arbitrary)f(:)j(unit)576 3687
-y(method)e(arbitrary_allowed)f(:)j(bool)665 3784 y(\(*)g(Returns)e
-(whether)h(arbitrary)f(attributes)h(are)g(allowed)g(or)g(not.)g(*\))576
-3979 y(method)f(attribute)h(:)g(string)g(-)p Fo(>)1517
-4076 y Fq(Pxp_types.att_type)e(*)j(Pxp_types.att_default)665
-4173 y(\(*)g(get)f(the)g(type)h(and)f(default)g(value)g(of)g(a)h
-(declared)e(attribute,)g(or)i(raise)710 4270 y(*)g(Validation_error)d
-(if)i(the)h(attribute)e(does)h(not)h(exist.)710 4367
-y(*)g(If)f('arbitrary_allowed',)e(the)i(exception)f(Undeclared)h(is)g
-(raised)g(instead)710 4464 y(*)h(of)f(Validation_error.)710
-4561 y(*\))576 4756 y(method)f
-(attribute_violates_standalone_declaration)38 b(:)1069
-4853 y(string)44 b(-)p Fo(>)g Fq(string)g(option)g(-)p
-Fo(>)g Fq(bool)p Black 3798 5278 a Fr(86)p Black eop
-%%Page: 87 87
-87 86 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 665 579 a Fq(\(*)45
-b(attribute_violates_standalone_declarat)o(ion)39 b(name)44
-b(v:)710 676 y(*)h(Checks)f(whether)f(the)i(attribute)e('name')h
-(violates)f(the)i("standalone")710 773 y(*)g(declaration)e(if)h(it)h
-(has)f(value)g('v'.)710 870 y(*)h(The)f(method)g(returns)g(true)g(if:)
-710 967 y(*)h(-)f(The)h(attribute)e(declaration)g(occurs)h(in)g(an)h
-(external)e(entity,)710 1065 y(*)i(and)f(if)h(one)f(of)g(the)h(two)f
-(conditions)f(holds:)710 1162 y(*)i(-)f(v)h(=)g(None,)f(and)g(there)g
-(is)h(a)f(default)g(for)g(the)h(attribute)e(value)710
-1259 y(*)i(-)f(v)h(=)g(Some)f(s,)g(and)h(the)f(type)g(of)h(the)f
-(attribute)f(is)i(not)f(CDATA,)710 1356 y(*)134 b(and)45
-b(s)f(changes)g(if)h(normalized)e(according)g(to)i(the)f(rules)g(of)g
-(the)710 1453 y(*)134 b(attribute)44 b(type.)710 1550
-y(*)710 1647 y(*)h(The)f(method)g(raises)g(Validation_error)e(if)i(the)
-h(attribute)e(does)h(not)g(exist.)710 1745 y(*)h(If)f
-('arbitrary_allowed',)e(the)i(exception)f(Undeclared)h(is)g(raised)g
-(instead)710 1842 y(*)h(of)f(Validation_error.)710 1939
-y(*\))576 2133 y(method)f(attribute_names)g(:)h(string)g(list)665
-2230 y(\(*)h(get)f(the)g(list)h(of)f(all)g(declared)g(attributes)f(*\))
-576 2424 y(method)g(names_of_required_attributes)e(:)j(string)g(list)
-665 2522 y(\(*)h(get)f(the)g(list)h(of)f(all)g(attributes)g(that)g(are)
-g(specified)f(as)i(required)710 2619 y(*)g(attributes)710
-2716 y(*\))576 2910 y(method)e(id_attribute_name)f(:)j(string)f(option)
-665 3007 y(\(*)h(Returns)e(the)i(name)f(of)g(the)h(attribute)e(with)h
-(type)g(ID,)h(or)f(None.)g(*\))576 3202 y(method)f
-(idref_attribute_names)f(:)i(string)g(list)665 3299 y(\(*)h(Returns)e
-(the)i(names)f(of)g(the)h(attributes)e(with)h(type)g(IDREF)g(or)h
-(IDREFS.)e(*\))576 3493 y(method)g(add_attribute)g(:)i(string)f(-)p
-Fo(>)1607 3590 y Fq(Pxp_types.att_type)e(-)p Fo(>)531
-3687 y Fq(Pxp_types.att_default)f(-)p Fo(>)531 3784 y
-Fq(bool)j(-)p Fo(>)620 3882 y Fq(unit)665 3979 y(\(*)h(add_attribute)d
-(name)j(type)f(default)f(extdecl:)710 4076 y(*)i(add)f(an)h(attribute)e
-(declaration)g(for)h(an)h(attribute)e(with)h(the)h(given)e(name,)710
-4173 y(*)i(type,)f(and)g(default)g(value.)g(If)g(there)g(is)h(more)f
-(than)g(one)g(declaration)f(for)710 4270 y(*)i(an)f(attribute)g(name,)g
-(the)g(first)g(declara-)396 4367 y(tion)g(counts;)g(the)g(other)g
-(declarations)710 4464 y(*)h(are)f(ignored.)710 4561
-y(*)h('extdecl':)e(if)h(true,)g(the)h(attribute)e(declaration)g(occurs)
-h(in)g(an)h(external)710 4659 y(*)g(entity.)e(This)i(property)e(is)i
-(used)f(to)g(check)g(the)h("standalone")d(attribute.)710
-4756 y(*\))p Black 3797 5278 a Fr(87)p Black eop
-%%Page: 88 88
-88 87 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 576 579 a Fq(method)43
-b(validate)h(:)h(unit)665 676 y(\(*)g(checks)f(whether)f(this)h
-(element)g(declaration)f(\(i.e.)h(the)g(content)g(model)g(and)710
-773 y(*)h(all)f(attribute)f(declarations\))g(is)i(valid)f(for)g(the)g
-(associated)f(DTD.)710 870 y(*)i(Raises)f(mostly)f(Validation_error)g
-(if)h(the)g(validation)g(fails.)710 967 y(*\))576 1162
-y(method)f(write)h(:)h(Pxp_types.output_stream)c(-)p
-Fo(>)j Fq(Pxp_types.encoding)e(-)p Fo(>)j Fq(unit)665
-1259 y(\(*)g(write_compact_as_latin1)c(os)j(enc:)710
-1356 y(*)h(Writes)f(the)g Fo(<)p Fq(!ELEMENT)f(...)h
-Fo(>)h Fq(declaration)e(to)h('os')h(as)f('enc'-)396 1453
-y(encoded)g(string.)710 1550 y(*\))576 1745 y(method)f
-(write_compact_as_latin1)e(:)k(Pxp_types.output_stream)c(-)p
-Fo(>)j Fq(unit)665 1842 y(\(*)h(DEPRECATED)e(METHOD;)h(included)f(only)
-h(to)h(keep)f(compatibility)f(with)710 1939 y(*)i(older)f(versions)f
-(of)i(the)f(parser)710 2036 y(*\))486 2133 y(end)396
-2327 y(\(*)h(--------------------------------------)o(------)o(---)39
-b(*\))396 2522 y(and)45 b(dtd_notation)d(:)j(string)f(-)p
-Fo(>)g Fq(Pxp_types.ext_id)e(-)p Fo(>)j Fq(Pxp_types.rep_encoding)c(-)p
-Fo(>)486 2619 y Fq(\(*)j(Creation:)531 2716 y(*)179 b(new)44
-b(dtd_notation)f(a_name)h(an_external_ID)e(init_encoding)531
-2813 y(*)i(creates)g(a)h(new)f(dtd_notation)f(object)h(with)g(the)g
-(given)g(name)g(and)h(the)f(given)531 2910 y(*)g(external)g(ID.)531
-3007 y(*\))486 3104 y(object)576 3202 y(method)f(name)i(:)f(string)576
-3299 y(method)f(ext_id)h(:)h(Pxp_types.ext_id)576 3396
-y(method)e(encoding)h(:)h(Pxp_types.rep_encoding)576
-3590 y(method)e(write)h(:)h(Pxp_types.output_stream)c(-)p
-Fo(>)j Fq(Pxp_types.encoding)e(-)p Fo(>)j Fq(unit)665
-3687 y(\(*)g(write_compact_as_latin1)c(os)j(enc:)710
-3784 y(*)h(Writes)f(the)g Fo(<)p Fq(!NOTATION)f(...)h
-Fo(>)h Fq(declaration)e(to)h('os')g(as)h('enc'-encoded)710
-3882 y(*)g(string.)710 3979 y(*\))576 4173 y(method)e
-(write_compact_as_latin1)e(:)k(Pxp_types.output_stream)c(-)p
-Fo(>)j Fq(unit)665 4270 y(\(*)h(DEPRECATED)e(METHOD;)h(included)f(only)
-h(to)h(keep)f(compatibility)f(with)710 4367 y(*)i(older)f(versions)f
-(of)i(the)f(parser)710 4464 y(*\))486 4659 y(end)396
-4853 y(\(*)h(--------------------------------------)o(------)o(---)39
-b(*\))p Black 3800 5278 a Fr(88)p Black eop
-%%Page: 89 89
-89 88 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 396 676 a Fq(and)45
-b(proc_instruction)d(:)i(string)g(-)p Fo(>)h Fq(string)e(-)p
-Fo(>)i Fq(Pxp_types.rep_encoding)c(-)p Fo(>)486 773 y
-Fq(\(*)j(Creation:)531 870 y(*)134 b(new)44 b(proc_instruction)f
-(a_target)g(a_value)531 967 y(*)h(creates)g(a)h(new)f(proc_instruction)
-e(object)i(with)g(the)h(given)f(target)f(string)h(and)531
-1065 y(*)g(the)h(given)f(value)g(string.)531 1162 y(*)g(Note:)g(A)h
-(processing)e(instruction)g(is)i(written)e(as)i Fo(<)p
-Fq(?target)e(value?)p Fo(>)p Fq(.)531 1259 y(*\))486
-1356 y(object)576 1453 y(method)g(target)h(:)h(string)576
-1550 y(method)e(value)h(:)h(string)576 1647 y(method)e(encoding)h(:)h
-(Pxp_types.rep_encoding)576 1842 y(method)e(write)h(:)h
-(Pxp_types.output_stream)c(-)p Fo(>)j Fq(Pxp_types.encoding)e(-)p
-Fo(>)j Fq(unit)665 1939 y(\(*)g(write)f(os)g(enc:)710
-2036 y(*)h(Writes)f(the)g Fo(<)p Fq(?...?)p Fo(>)f Fq(PI)i(to)f('os')h
-(as)f('enc'-encoded)f(string.)710 2133 y(*\))576 2327
-y(method)g(write_compact_as_latin1)e(:)k(Pxp_types.output_stream)c(-)p
-Fo(>)j Fq(unit)665 2424 y(\(*)h(DEPRECATED)e(METHOD;)h(included)f(only)
-h(to)h(keep)f(compatibility)f(with)710 2522 y(*)i(older)f(versions)f
-(of)i(the)f(parser)710 2619 y(*\))576 2813 y(method)f(parse_pxp_option)
-g(:)h(\(string)g(*)h(string)e(*)i(\(string)f(*)g(string\))g(list\))665
-2910 y(\(*)h(Parses)f(a)g(PI)h(containing)e(a)i(PXP)f(option.)g(Such)g
-(PIs)g(are)g(formed)g(like:)710 3007 y(*)134 b Fo(<)p
-Fq(?target)44 b(option-name)f(option-att="value")f(option-att="value")f
-(...)k(?)p Fo(>)710 3104 y Fq(*)g(The)f(method)g(returns)g(a)g(triple)
-710 3202 y(*)134 b(\(target,)44 b(option-name,)f([option-att,)g(value;)
-g(...]\))710 3299 y(*)i(or)f(raises)g(Error.)710 3396
-y(*\))486 3590 y(end)396 3784 y(;;)-2 4286 y Fx(4.4.)39
-b(In)-6 b(v)l(oking)38 b(the)h(par)n(ser)396 4466 y Fv(Here)20
-b(a)h(description)e(of)h(Pxp_yacc.)-2 4794 y Fp(4.4.1.)35
-b(Defaults)p Black 3800 5278 a Fr(89)p Black eop
-%%Page: 90 90
-90 89 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 396 579 a Fv(The)g(follo)n(wing)f
-(def)o(aults)g(are)i(a)n(v)n(ailable:)396 759 y Fq(val)45
-b(default_config)d(:)j(config)396 856 y(val)g(default_extension)d(:)i
-(\('a)h(node)f(extension\))f(as)h('a)396 953 y(val)h(default_spec)d(:)j
-(\('a)f(node)h(extension)e(as)h('a\))h(spec)-2 1406 y
-Fp(4.4.2.)35 b(P)l(ar)n(sing)f(functions)396 1574 y Fv(In)20
-b(the)g(follo)n(wing,)f(the)h(term)g("closed)g(document")e(refers)h(to)
-i(an)f(XML)g(structure)f(lik)o(e)396 1754 y Fo(<)p Fq(!DOCTYPE)43
-b(...)i([)f Fn(declarations)f Fq(])i Fo(>)396 1851 y(<)p
-Fn(root)p Fo(>)396 1948 y Fq(...)396 2045 y Fo(<)p Fq(/)p
-Fn(root)p Fo(>)396 2236 y Fv(The)20 b(term)g("fragment")e(refers)i(to)g
-(an)g(XML)h(structure)e(lik)o(e)396 2416 y Fo(<)p Fn(root)p
-Fo(>)396 2513 y Fq(...)396 2611 y Fo(<)p Fq(/)p Fn(root)p
-Fo(>)396 2802 y Fv(i.e.)h(only)g(to)g(one)g(isolated)g(element)f
-(instance.)396 3023 y Fq(val)45 b(parse_dtd_entity)d(:)i(config)g(->)h
-(source)f(->)g(dtd)396 3214 y Fv(P)o(arses)21 b(the)f(declarations)f
-(which)h(are)g(contained)e(in)j(the)f(entity)-5 b(,)19
-b(and)h(returns)f(them)h(as)h Fq(dtd)f Fv(object.)396
-3436 y Fq(val)45 b(extract_dtd_from_document_entity)39
-b(:)45 b(config)f(->)g(source)g(->)g(dtd)396 3627 y Fv(Extracts)20
-b(the)g(DTD)h(from)e(a)h(closed)g(document.)e(Both)i(the)h(internal)e
-(and)h(the)g(e)o(xternal)f(subsets)h(are)h(e)o(xtracted)d(and)396
-3735 y(combined)g(to)i(one)f Fq(dtd)h Fv(object.)f(This)h(function)e
-(does)h(not)h(parse)f(the)h(whole)f(document,)f(b)n(ut)i(only)e(the)i
-(parts)g(that)g(are)396 3843 y(necessary)g(to)g(e)o(xtract)f(the)i
-(DTD.)396 4064 y Fq(val)45 b(parse_document_entity)c(:)576
-4161 y(?transform_dtd:\(dtd)g(->)k(dtd\))f(->)576 4259
-y(?id_index:\('ext)e(index\))i(->)576 4356 y(config)f(->)576
-4453 y(source)g(->)576 4550 y('ext)h(spec)g(->)755 4647
-y('ext)g(document)p Black 3800 5278 a Fr(90)p Black eop
-%%Page: 91 91
-91 90 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 396 579 a Fv(P)o(arses)h(a)g(closed)
-e(document)g(and)g(v)n(alidates)h(it)h(against)e(the)i(DTD)f(that)g(is)
-h(contained)e(in)h(the)h(document)d(\(internal)396 687
-y(and)i(e)o(xternal)f(subsets\).)h(The)g(option)f Fq(~transform_dtd)f
-Fv(can)i(be)g(used)g(to)g(transform)f(the)h(DTD)h(in)f(the)g(document,)
-396 795 y(and)g(to)g(use)h(the)f(transformed)e(DTD)i(for)g(v)n
-(alidation.)e(If)i Fq(~id_index)g Fv(is)h(speci\002ed,)e(an)h(inde)o(x)
-f(of)h(all)h(ID)f(attrib)n(utes)h(is)396 903 y(created.)396
-1124 y Fq(val)45 b(parse_wfdocument_entity)c(:)576 1222
-y(config)i(->)576 1319 y(source)g(->)576 1416 y('ext)h(spec)g(->)755
-1513 y('ext)g(document)396 1704 y Fv(P)o(arses)21 b(a)g(closed)e
-(document,)f(b)n(ut)j(checks)e(it)i(only)e(on)h(well-formedness.)396
-1926 y Fq(val)45 b(parse_content_entity)86 b(:)576 2023
-y(?id_index:\('ext)42 b(index\))i(->)576 2120 y(config)f(->)576
-2217 y(source)g(->)576 2314 y(dtd)h(->)576 2411 y('ext)g(spec)g(->)755
-2508 y('ext)g(node)396 2699 y Fv(P)o(arses)21 b(a)g(fragment,)d(and)h
-(v)n(alidates)h(the)g(element.)396 2921 y Fq(val)45 b
-(parse_wfcontent_entity)c(:)576 3018 y(config)i(->)576
-3115 y(source)g(->)576 3212 y('ext)h(spec)g(->)755 3310
-y('ext)g(node)396 3500 y Fv(P)o(arses)21 b(a)g(fragment,)d(b)n(ut)i
-(checks)g(it)g(only)g(on)g(well-formedness.)-2 3870 y
-Fp(4.4.3.)35 b(Con\002guration)f(options)396 4110 y Fq(type)44
-b(config)g(=)576 4207 y({)g(warner)g(:)h(collect_warnings;)665
-4304 y(errors_with_line_numbers)c(:)k(bool;)665 4401
-y(enable_pinstr_nodes)d(:)j(bool;)665 4499 y(enable_super_root_node)c
-(:)k(bool;)665 4596 y(enable_comment_nodes)d(:)i(bool;)665
-4693 y(encoding)g(:)g(rep_encoding;)665 4790 y
-(recognize_standalone_declaration)c(:)k(bool;)p Black
-3800 5278 a Fr(91)p Black eop
-%%Page: 92 92
-92 91 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 665 579 a Fq
-(store_element_positions)41 b(:)k(bool;)665 676 y(idref_pass)e(:)i
-(bool;)665 773 y(validate_by_dfa)e(:)h(bool;)665 870
-y(accept_only_deterministic_models)c(:)k(bool;)665 967
-y(...)576 1065 y(})p Black 396 1422 a Ft(\225)p Black
-60 w Fq(warner:)p Fv(The)19 b(parser)h(prints)f(w)o(arnings)h(by)f(in)m
-(v)n(oking)f(the)j(method)d Fq(warn)j Fv(for)e(this)i(w)o(arner)e
-(object.)h(\(Def)o(ault:)f(all)479 1530 y(w)o(arnings)h(are)g
-(dropped\))p Black 396 1637 a Ft(\225)p Black 60 w Fq
-(errors_with_line_numbers:)p Fv(If)c(true,)k(errors)f(contain)g(line)i
-(numbers;)d(if)j(f)o(alse,)f(errors)g(contain)f(only)g(byte)479
-1745 y(positions.)h(The)g(latter)g(mode)f(is)i(f)o(aster)-5
-b(.)21 b(\(Def)o(ault:)e(true\))p Black 396 1853 a Ft(\225)p
-Black 60 w Fq(enable_pinstr_nodes:)p Fv(If)e(true,)j(the)g(parser)f
-(creates)i(e)o(xtra)e(nodes)g(for)h(processing)f(instructions.)g(If)h
-(f)o(alse,)479 1961 y(processing)f(instructions)g(are)h(simply)g(added)
-f(to)i(the)f(element)f(or)h(document)f(surrounding)e(the)j
-(instructions.)479 2069 y(\(Def)o(ault:)g(f)o(alse\))p
-Black 396 2177 a Ft(\225)p Black 60 w Fq(enable_super_root_node:)p
-Fv(If)c(true,)k(the)g(parser)g(creates)g(an)g(e)o(xtra)g(node)f(which)g
-(is)j(the)e(parent)f(of)h(the)g(root)479 2285 y(of)g(the)g(document)f
-(tree.)h(This)g(node)f(is)i(called)f(super)g(root;)f(it)i(is)g(an)g
-(element)e(with)i(type)e Fq(T_super_root)p Fv(.)g(-)h(If)479
-2393 y(there)g(are)g(processing)f(instructions)g(outside)h(the)g(root)f
-(element)h(and)g(outside)f(the)i(DTD,)f(the)o(y)f(are)h(added)f(to)i
-(the)479 2501 y(super)f(root)f(instead)h(of)g(the)g(document.)e(-)j(If)
-f(f)o(alse,)g(the)g(super)g(root)g(node)f(is)i(not)f(created.)f(\(Def)o
-(ault:)h(f)o(alse\))p Black 396 2609 a Ft(\225)p Black
-60 w Fq(enable_comment_nodes:)p Fv(If)d(true,)i(the)i(parser)e(creates)
-h(nodes)g(for)f(comments)g(with)i(type)f Fq(T_comment)p
-Fv(;)f(if)479 2717 y(f)o(alse,)i(such)f(nodes)f(are)h(not)g(created.)f
-(\(Def)o(ault:)h(f)o(alse\))p Black 396 2825 a Ft(\225)p
-Black 60 w Fq(encoding:)p Fv(Speci\002es)f(the)i(internal)e(encoding)f
-(of)i(the)g(parser)-5 b(.)20 b(Most)g(strings)h(are)f(then)f
-(represented)g(according)479 2933 y(to)i(this)f(encoding;)f(ho)n(we)n
-(v)o(er)f(there)h(are)i(some)f(e)o(xceptions)e(\(especially)i
-Fq(ext_id)f Fv(v)n(alues)h(which)g(are)g(al)o(w)o(ays)479
-3041 y(UTF-8)g(encoded\).)e(\(Def)o(ault:)h(`Enc_iso88591\))p
-Black 396 3148 a Ft(\225)p Black 60 w Fq
-(recognize_standalone_declaration:)c Fv(If)21 b(true)e(and)h(if)h(the)f
-(parser)f(is)i(v)n(alidating,)e(the)479 3256 y Fq(standalone="yes")f
-Fv(declaration)h(forces)h(that)g(it)h(is)g(check)o(ed)e(whether)g(the)h
-(document)e(is)j(a)g(standalone)479 3364 y(document.)d(-)j(If)f(f)o
-(alse,)g(or)g(if)g(the)h(parser)e(is)i(in)g(well-formedness)d(mode,)h
-(such)h(declarations)f(are)h(ignored.)479 3472 y(\(Def)o(ault:)g
-(true\))p Black 396 3580 a Ft(\225)p Black 60 w Fq
-(store_element_positions:)d Fv(If)j(true,)g(for)f(e)n(v)o(ery)g
-(non-data)f(node)h(the)i(source)e(position)g(is)j(stored.)d(If)h(f)o
-(alse,)479 3688 y(the)g(position)g(information)e(is)j(lost.)f(If)g(a)n
-(v)n(ailable,)g(you)f(can)h(get)g(the)g(positions)g(of)g(nodes)f(by)h
-(in)m(v)n(oking)e(the)479 3796 y Fq(position)i Fv(method.)e(\(Def)o
-(ault:)i(true\))p Black 396 3904 a Ft(\225)p Black 60
-w Fq(idref_pass:)p Fv(If)e(true)i(and)g(if)g(there)g(is)h(an)f(ID)h
-(inde)o(x,)e(the)h(parser)f(checks)h(whether)f(e)n(v)o(ery)g(IDREF)i
-(or)e(IDREFS)479 4012 y(attrib)n(ute)h(refer)g(to)g(an)g(e)o(xisting)f
-(node;)h(this)g(requires)g(that)g(the)g(parser)g(tra)n(v)o(erses)g(the)
-g(whole)f(doument)g(tree.)h(If)479 4120 y(f)o(alse,)h(this)f(check)g
-(is)h(left)f(out.)g(\(Def)o(ault:)g(f)o(alse\))p Black
-396 4228 a Ft(\225)p Black 60 w Fq(validate_by_dfa:)p
-Fv(If)e(true)h(and)h(if)h(the)f(content)f(model)g(for)h(an)g(element)g
-(type)f(is)i(deterministic,)e(a)479 4336 y(deterministic)h(\002nite)g
-(automaton)e(is)j(used)f(to)h(v)n(alidate)e(whether)g(the)i(element)e
-(contents)h(match)f(the)i(content)479 4444 y(model)e(of)h(the)g(type.)g
-(If)g(f)o(alse,)g(or)g(if)g(a)g(DF)-6 b(A)21 b(is)g(not)f(a)n(v)n
-(ailable,)f(a)h(backtracking)e(algorithm)g(is)j(used)f(for)f(v)n
-(alidation.)479 4552 y(\(Def)o(ault:)h(true\))p Black
-396 4659 a Ft(\225)p Black 60 w Fq(accept_only_deterministic_models:)15
-b Fv(If)21 b(true,)e(only)h(deterministic)f(content)g(models)h(are)g
-(accepted;)f(if)479 4767 y(f)o(alse,)i(an)o(y)e(syntactically)h
-(correct)f(content)g(models)h(can)g(be)g(processed.)f(\(Def)o(ault:)g
-(true\))p Black 3800 5278 a Fr(92)p Black eop
-%%Page: 93 93
-93 92 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black -2 583 a Fp(4.4.4.)35
-b(Whic)o(h)f(con\002guration)g(should)g(I)f(use?)396
-751 y Fv(First,)21 b(I)f(recommend)e(to)i(v)n(ary)g(the)g(def)o(ault)f
-(con\002guration)f(instead)i(of)g(creating)f(a)i(ne)n(w)f
-(con\002guration)d(record.)i(F)o(or)396 859 y(instance,)h(to)g(set)h
-Fq(idref_pass)e Fv(to)i Fq(true)p Fv(,)e(change)g(the)i(def)o(ault)e
-(as)i(in:)396 1039 y Fq(let)45 b(config)e(=)i({)g(default_config)d
-(with)i(idref_pass)g(=)g(true)g(})396 1230 y Fv(The)20
-b(background)d(is)k(that)f(I)h(can)f(add)f(more)h(options)f(to)h(the)g
-(record)f(in)i(future)e(v)o(ersions)g(of)h(the)g(parser)f(without)396
-1338 y(breaking)g(your)f(programs.)396 1487 y Fu(Do)i(I)i(need)e(extra)
-f(nodes)i(f)n(or)f(pr)o(ocessing)g(instructions?)g Fv(By)g(def)o(ault,)
-g(such)g(nodes)f(are)h(not)g(created.)f(This)i(does)396
-1595 y(not)f(mean)g(that)g(the)g(processing)f(instructions)g(are)h
-(lost;)h(ho)n(we)n(v)o(er)m(,)d(you)h(cannot)g(\002nd)h(out)g(the)g(e)o
-(xact)g(location)f(where)396 1703 y(the)o(y)h(occur)-5
-b(.)19 b(F)o(or)h(e)o(xample,)e(the)j(follo)n(wing)d(XML)i(te)o(xt)396
-1883 y Fq(<x><?pi1?><y/><?pi2?></x>)396 2074 y Fv(will)h(normally)e
-(create)h(one)f(element)h(node)f(for)h Fq(x)g Fv(containing)e
-Fr(one)i Fv(subnode)f(for)g Fq(y)p Fv(.)h(The)g(processing)f
-(instructions)396 2182 y(are)h(attached)g(to)g Fq(x)h
-Fv(in)f(a)h(separate)e(hash)h(table;)h(you)e(can)h(access)h(them)e
-(using)h Fq(x)45 b(#)f(pinstr)g("pi1")20 b Fv(and)g Fq(x)44
-b(#)396 2290 y(pinstr)g("pi2")p Fv(,)20 b(respecti)n(v)o(ely)-5
-b(.)18 b(The)i(information)d(is)k(lost)g(where)f(the)g(instructions)f
-(occur)g(within)h Fq(x)p Fv(.)396 2439 y(If)g(the)h(option)d
-Fq(enable_pinstr_nodes)g Fv(is)j(turned)e(on,)h(the)g(parser)f(creates)
-i(e)o(xtra)e(nodes)g Fq(pi1)i Fv(and)e Fq(pi2)i Fv(such)f(that)396
-2547 y(the)g(subnodes)f(of)h Fq(x)h Fv(are)f(no)n(w:)396
-2728 y Fq(x)45 b(#)g(sub_nodes)e(=)i([)f(pi1;)g(y;)h(pi2)f(])396
-2919 y Fv(The)20 b(e)o(xtra)g(nodes)f(contain)g(the)h(processing)f
-(instructions)g(in)i(the)f(usual)g(w)o(ay)-5 b(,)20 b(i.e.)g(you)f(can)
-h(access)h(them)f(using)f Fq(pi1)396 3026 y(#)45 b(pinstr)f("pi1")20
-b Fv(and)f Fq(pi2)45 b(#)f(pinstr)g("pi2")p Fv(,)20 b(respecti)n(v)o
-(ely)-5 b(.)396 3176 y(Note)20 b(that)h(you)e(will)i(need)e(an)i(e)o(x)
-o(emplar)d(for)h(the)i(PI)f(nodes)g(\(see)g Fq(make_spec_from_alist)p
-Fv(\).)396 3325 y Fu(Do)g(I)i(need)e(a)h(super)g(r)o(oot)d(node?)i
-Fv(By)h(def)o(ault,)e(there)h(is)h(no)f(super)f(root)h(node.)f(The)h
-Fq(document)f Fv(object)h(refers)396 3433 y(directly)g(to)g(the)g(node)
-f(representing)f(the)j(root)e(element)h(of)g(the)g(document,)e(i.e.)396
-3613 y Fq(doc)45 b(#)f(root)g(=)h(r)396 3804 y Fv(if)21
-b Fq(r)f Fv(is)h(the)g(root)e(node.)g(This)h(is)i(sometimes)d(incon)m
-(v)o(enient:)f(\(1\))h(Some)h(algorithms)f(become)g(simpler)h(if)g(e)n
-(v)o(ery)f(node)396 3912 y(has)i(a)f(parent,)f(e)n(v)o(en)g(the)i(root)
-e(node.)g(\(2\))h(Some)g(standards)f(such)h(as)h(XP)o(ath)f(call)g(the)
-h("root)e(node")g(the)h(node)f(whose)396 4020 y(child)h(represents)f
-(the)i(root)e(of)h(the)g(document.)e(\(3\))i(The)g(super)f(root)h(node)
-f(can)h(serv)o(e)f(as)i(a)g(container)e(for)g(processing)396
-4128 y(instructions)g(outside)h(the)g(root)g(element.)f(Because)i(of)e
-(these)i(reasons,)e(it)i(is)g(possible)f(to)h(create)f(an)g(e)o(xtra)f
-(super)h(root)396 4236 y(node,)f(whose)h(child)g(is)h(the)f(root)g
-(node:)396 4416 y Fq(doc)45 b(#)f(root)g(=)h(sr)403 b(&&)396
-4513 y(sr)45 b(#)f(sub_nodes)g(=)g([)h(r)g(])396 4704
-y Fv(When)20 b(e)o(xtra)g(nodes)f(are)h(also)h(created)e(for)h
-(processing)f(instructions,)g(these)h(nodes)f(can)h(be)h(added)e(to)h
-(the)g(super)g(root)396 4812 y(node)f(if)h(the)o(y)e(occur)h(outside)g
-(the)g(root)g(element)g(\(reason)f(\(3\)\),)h(and)g(the)g(order)g
-(re\003ects)g(the)h(order)e(in)i(the)f(source)g(te)o(xt.)p
-Black 3800 5278 a Fr(93)p Black eop
-%%Page: 94 94
-94 93 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 396 579 a Fv(Note)g(that)h(you)e
-(will)i(need)e(an)i(e)o(x)o(emplar)d(for)h(the)i(super)e(root)h(node)f
-(\(see)h Fq(make_spec_from_alist)p Fv(\).)396 728 y Fu(What)g(is)h(the)
-g(effect)e(of)h(the)h(UTF-8)e(encoding?)h Fv(By)h(def)o(ault,)e(the)h
-(parser)g(represents)f(strings)h(\(with)g(fe)n(w)396
-836 y(e)o(xceptions\))e(as)j(ISO-8859-1)c(strings.)i(These)h(are)g
-(well-kno)n(wn,)d(and)j(there)f(are)h(tools)g(and)f(fonts)g(for)h(this)
-g(encoding.)396 986 y(Ho)n(we)n(v)o(er)m(,)e(internationalization)g
-(may)h(require)g(that)i(you)e(switch)h(o)o(v)o(er)f(to)i(UTF-8)e
-(encoding.)f(In)i(most)396 1094 y(en)m(vironments,)d(the)k(immediate)e
-(ef)n(fect)h(will)g(be)h(that)f(you)f(cannot)g(read)h(strings)g(with)g
-(character)f(codes)h(>=)h(160)e(an)o(y)396 1202 y(longer;)g(your)g
-(terminal)h(will)h(only)e(sho)n(w)h(funn)o(y)e(glyph)h(combinations.)f
-(It)i(is)h(strongly)e(recommended)e(to)k(install)396
-1310 y(Unicode)e(fonts)h(\(GNU)g(Unifont)f
-(\(http://czyborra.com/unifon)o(t/\),)c(Markus)k(K)o(uhn')-5
-b(s)19 b(fonts)396 1417 y(\(http://www)-5 b(.cl.cam.ac.uk/~mgk25)o(/do)
-m(wnlo)o(ad/u)o(cs-fo)o(nts.tar)g(.g)o(z\)\))14 b(and)20
-b(terminal)f(emulators)h(that)g(can)g(handle)396 1525
-y(UTF-8)g(byte)g(sequences)f(\(http://myweb)m(.clark.net/pub/d)o(ick)o
-(e)o(y)o(/xter)o(m/x)o(term.)o(html\))o(.)c(Furthermore,)i(a)k(Unicode)
-396 1633 y(editor)f(may)f(be)i(helpful)e(\(such)g(as)i(Y)-9
-b(udit)20 b(\(ftp://metalab)m(.unc.edu/pub)o(/Linu)o(x/ap)o(ps/ed)o
-(itors/X/\)\))o(.)15 b(There)k(are)h(also)396 1741 y(F)-6
-b(A)h(Q)21 b(\(http://www)-5 b(.cl.cam.ac.uk/~mgk25)o(/unico)o(de)o
-(.htm)o(l\))15 b(by)20 b(Markus)f(K)o(uhn.)396 1891 y(By)i(setting)f
-Fq(encoding)f Fv(to)i Fq(`Enc_utf8)e Fv(all)i(strings)f(originating)e
-(from)h(the)i(parsed)e(XML)h(document)e(are)396 1999
-y(represented)h(as)i(UTF-8)e(strings.)h(This)h(includes)e(not)h(only)f
-(character)g(data)h(and)g(attrib)n(ute)g(v)n(alues)g(b)n(ut)g(also)g
-(element)396 2107 y(names,)g(attrib)n(ute)g(names)g(and)f(so)i(on,)e
-(as)i(it)g(is)g(possible)f(to)h(use)f(an)o(y)f(Unicode)g(letter)i(to)f
-(form)f(such)h(names.)g(Strictly)396 2214 y(speaking,)f(PXP)i(is)g
-(only)e(XML-compliant)f(if)j(the)f(UTF-8)g(mode)f(is)i(used;)f
-(otherwise)g(it)h(will)g(ha)n(v)o(e)e(dif)n(\002culties)396
-2322 y(when)h(v)n(alidating)f(documents)f(containing)g
-(non-ISO-8859-1-names.)396 2472 y(This)j(mode)e(does)h(not)g(ha)n(v)o
-(e)f(an)o(y)h(impact)f(on)h(the)g(e)o(xternal)f(representation)f(of)i
-(documents.)f(The)g(character)g(set)396 2580 y(assumed)h(when)g
-(reading)e(a)j(document)d(is)j(set)g(in)g(the)f(XML)g(declaration,)e
-(and)i(character)f(set)i(when)e(writing)h(a)396 2688
-y(document)e(must)j(be)f(passed)g(to)g(the)g Fq(write)g
-Fv(method.)396 2837 y Fu(Ho)o(w)g(do)h(I)g(check)f(that)g(nodes)h
-(exist)f(which)h(ar)o(e)e(r)o(eferr)o(ed)g(by)i(IDREF)g(attrib)n(utes?)
-e Fv(First,)i(you)e(must)h(create)g(an)396 2945 y(inde)o(x)f(of)h(all)h
-(occurring)d(ID)i(attrib)n(utes:)396 3125 y Fq(let)45
-b(index)f(=)g(new)h(hash_index)396 3316 y Fv(This)21
-b(inde)o(x)e(must)h(be)g(passed)g(to)g(the)h(parsing)e(function:)396
-3496 y Fq(parse_document_entity)486 3593 y(~id_index:\(index)42
-b(:>)j(index\))486 3691 y(config)f(source)g(spec)396
-3882 y Fv(Ne)o(xt,)20 b(you)f(must)h(turn)g(on)g(the)g
-Fq(idref_pass)f Fv(mode:)396 4062 y Fq(let)45 b(config)e(=)i({)g
-(default_config)d(with)i(idref_pass)g(=)g(true)g(})396
-4253 y Fv(Note)20 b(that)h(no)n(w)e(the)i(whole)e(document)f(tree)j
-(will)g(be)f(tra)n(v)o(ersed,)f(and)g(e)n(v)o(ery)g(node)g(will)i(be)f
-(check)o(ed)f(for)h(IDREF)g(and)396 4361 y(IDREFS)h(attrib)n(utes.)f
-(If)g(the)g(tree)g(is)h(big,)f(this)h(may)f(tak)o(e)g(some)g(time.)396
-4510 y Fu(What)g(ar)o(e)g(deterministic)g(content)g(models?)g
-Fv(These)g(type)g(of)g(models)g(can)g(speed)f(up)h(the)g(v)n(alidation)
-f(checks;)396 4618 y(furthermore)f(the)o(y)h(ensure)g
-(SGML-compatibility)-5 b(.)18 b(In)i(particular)m(,)e(a)j(content)e
-(model)g(is)i(deterministic)e(if)i(the)f(parser)396 4726
-y(can)g(determine)f(the)h(actually)g(used)g(alternati)n(v)o(e)f(by)g
-(inspecting)g(only)h(the)g(current)f(tok)o(en.)g(F)o(or)h(e)o(xample,)e
-(this)396 4834 y(element)i(has)g(non-deterministic)e(contents:)p
-Black 3800 5278 a Fr(94)p Black eop
-%%Page: 95 95
-95 94 bop Black 2348 67 a Fr(Chapter)20 b(4.)g(Con\002guring)e(and)i
-(calling)f(the)h(par)o(ser)p Black 396 579 a Fq(<!ELEMENT)44
-b(x)g(\(\(u,v\))g(|)h(\(u,y+\))f(|)g(v\)>)396 770 y Fv(If)20
-b(the)h(\002rst)f(element)g(in)g Fq(x)h Fv(is)g Fq(u)p
-Fv(,)f(the)h(parser)e(does)h(not)g(kno)n(w)f(which)h(of)g(the)g
-(alternati)n(v)o(es)f Fq(\(u,v\))h Fv(or)g Fq(\(u,y+\))g
-Fv(will)396 878 y(w)o(ork;)g(the)g(parser)g(must)g(also)g(inspect)g
-(the)h(second)e(element)g(to)i(be)f(able)g(to)g(distinguish)g(between)f
-(the)h(alternati)n(v)o(es.)396 986 y(Because)h(such)f(look-ahead)d
-(\(or)j("guessing"\))e(is)k(required,)c(this)i(e)o(xample)f(is)i
-(non-deterministic.)396 1135 y(The)f(XML)g(standard)f(demands)g(that)i
-(content)e(models)g(must)i(be)f(deterministic.)f(So)h(it)h(is)g
-(recommended)c(to)k(turn)e(the)396 1243 y(option)g Fq
-(accept_only_deterministic_models)d Fv(on;)j(ho)n(we)n(v)o(er)m(,)f
-(PXP)j(can)f(also)h(process)e(non-deterministic)396 1351
-y(models)h(using)g(a)g(backtracking)e(algorithm.)396
-1500 y(Deterministic)i(models)g(ensure)f(that)h(v)n(alidation)f(can)h
-(be)g(performed)e(in)i(linear)g(time.)g(In)g(order)f(to)h(get)g(the)396
-1608 y(maximum)f(bene\002ts,)h(PXP)h(also)f(implements)f(a)i(special)f
-(v)n(alidator)f(that)h(pro\002ts)g(from)f(deterministic)h(models;)f
-(this)396 1716 y(is)i(the)g(deterministic)e(\002nite)h(automaton)f
-(\(DF)-6 b(A\).)19 b(This)i(v)n(alidator)d(is)k(enabled)d(per)g
-(element)h(type)g(if)g(the)g(element)396 1824 y(type)g(has)g(a)h
-(deterministic)e(model)h(and)f(if)i(the)f(option)f Fq(validate_by_dfa)f
-Fv(is)j(turned)e(on.)396 1974 y(In)h(general,)f(I)h(e)o(xpect)g(that)g
-(the)g(DF)-6 b(A)21 b(method)e(is)i(f)o(aster)f(than)g(the)g
-(backtracking)e(method;)g(especially)i(in)h(the)f(w)o(orst)396
-2082 y(case)h(the)f(DF)-6 b(A)21 b(tak)o(es)f(only)g(linear)f(time.)i
-(Ho)n(we)n(v)o(er)m(,)d(if)i(the)g(content)g(model)f(has)h(only)g(fe)n
-(w)g(alternati)n(v)o(es)f(and)h(the)396 2190 y(alternati)n(v)o(es)f(do)
-h(not)g(nest,)g(the)h(backtracking)c(algorithm)i(may)g(be)i(better)-5
-b(.)-2 2691 y Fx(4.5.)39 b(Updates)396 2871 y Fr(Some)20
-b(\(often)f(later)i(added\))d(featur)m(es)i(that)g(ar)m(e)h(otherwise)f
-(not)g(e)n(xplained)f(in)h(the)h(manual)d(b)n(ut)j(worth)f(to)g(be)396
-2979 y(mentioned.)p Black 396 3211 a Ft(\225)p Black
-60 w Fv(Methods)g(node_position,)d(node_path,)g(nth_node,)h(pre)n
-(vious_node,)e(ne)o(xt_node)h(for)j(nodes:)f(See)479
-3319 y(pxp_document.mli)p Black 396 3427 a Ft(\225)p
-Black 60 w Fv(Functions)h(to)g(determine)f(the)h(document)e(order)h(of)
-h(nodes:)f(compare,)g(create_ord_inde)o(x,)c(ord_number)m(,)479
-3535 y(ord_compare:)i(See)k(pxp_document.mli)p Black
-3800 5278 a Fr(95)p Black eop
-%%Page: 96 96
-96 95 bop Black Black Black Black eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/dtd.mli.ent b/helm/DEVEL/pxp/pxp/doc/manual/src/dtd.mli.ent
deleted file mode 100644 (file)
index f2e0eb8..0000000
+++ /dev/null
@@ -1,374 +0,0 @@
-<!ENTITY markup-dtd1.mli '
-
-(**********************************************************************)
-(*                                                                    *)
-(* Pxp_dtd:                                                           *)
-(*     Object model of document type declarations                     *)
-(*                                                                    *)
-(**********************************************************************)
-
-(* ======================================================================
- * OVERVIEW
- *
- * class dtd ............... represents the whole DTD, including element
- *                           declarations, entity declarations, notation
- *                           declarations, and processing instructions
- * class dtd_element ....... represents an element declaration consisting
- *                           of a content model and an attribute list
- *                           declaration
- * class dtd_notation ...... represents a notation declaration
- * class proc_instruction .. represents a processing instruction
- * ======================================================================
- *
- *)
-
-
-class dtd :
-  (* Creation:
-   *   new dtd
-   * creates a new, empty DTD object without any declaration, without a root
-   * element, without an ID.
-   *)
-  Pxp_types.collect_warnings -&gt; 
-  Pxp_types.rep_encoding -&gt;
-  object
-    method root : string option
-      (* get the name of the root element if present *)
-
-    method set_root : string -&gt; unit
-      (* set the name of the root element. This method can be invoked 
-       * only once
-       *)
-
-    method id : Pxp_types.dtd_id option
-      (* get the identifier for this DTD *)
-
-    method set_id : Pxp_types.dtd_id -&gt; unit
-      (* set the identifier. This method can be invoked only once *)
-
-    method encoding : Pxp_types.rep_encoding
-      (* returns the encoding used for character representation *)
-
-
-    method allow_arbitrary : unit
-      (* After this method has been invoked, the object changes its behaviour:
-       * - elements and notations that have not been added may be used in an
-       *   arbitrary way; the methods "element" and "notation" indicate this
-       *   by raising Undeclared instead of Validation_error.
-       *)
-
-    method disallow_arbitrary : unit
-
-    method arbitrary_allowed : bool
-      (* Returns whether arbitrary contents are allowed or not. *)
-
-    method standalone_declaration : bool
-      (* Whether there is a &apos;standalone&apos; declaration or not. Strictly 
-       * speaking, this declaration is not part of the DTD, but it is
-       * included here because of practical reasons. 
-       * If not set, this property defaults to &apos;false&apos;.
-       *)
-
-    method set_standalone_declaration : bool -&gt; unit
-      (* Sets the &apos;standalone&apos; declaration. *)
-
-
-    method add_element : dtd_element -&gt; unit
-      (* add the given element declaration to this DTD. Raises Not_found
-       * if there is already an element declaration with the same name.
-       *)
-
-    method add_gen_entity : Pxp_entity.entity -&gt; bool -&gt; unit
-      (* add_gen_entity e extdecl:
-       * add the entity &apos;e&apos; as general entity to this DTD (general entities
-       * are those represented by &amp;name;). If there is already a declaration
-       * with the same name, the second definition is ignored; as exception from
-       * this rule, entities with names "lt", "gt", "amp", "quot", and "apos"
-       * may only be redeclared with a definition that is equivalent to the
-       * standard definition; otherwise a Validation_error is raised.
-       *
-       * &apos;extdecl&apos;: &apos;true&apos; indicates that the entity declaration occurs in
-       * an external entity. (Used for the standalone check.)
-       *)
-
-    method add_par_entity : Pxp_entity.entity -&gt; unit
-      (* add the given entity as parameter entity to this DTD (parameter
-       * entities are those represented by &percent;name;). If there is already a 
-       * declaration with the same name, the second definition is ignored.
-       *)
-
-    method add_notation : dtd_notation -&gt; unit
-      (* add the given notation to this DTD. If there is already a declaration
-       * with the same name, a Validation_error is raised.
-       *)
-
-    method add_pinstr : proc_instruction -&gt; unit
-      (* add the given processing instruction to this DTD. *)
-
-    method element : string -&gt; dtd_element
-      (* looks up the element declaration with the given name. Raises 
-       * Validation_error if the element cannot be found. (If "allow_arbitrary"
-       * has been invoked before, Unrestricted is raised instead.)
-       *)
-
-    method element_names : string list
-      (* returns the list of the names of all element declarations. *)
-
-    method gen_entity : string -&gt; (Pxp_entity.entity * bool)
-      (* let e, extdecl = obj # gen_entity n:
-       * looks up the general entity &apos;e&apos; with the name &apos;n&apos;. Raises
-       * WF_error if the entity cannot be found.
-       * &apos;extdecl&apos;: indicates whether the entity declaration occured in an 
-       * external entity.
-       *)
-
-    method gen_entity_names : string list
-      (* returns the list of all general entity names *)
-
-    method par_entity : string -&gt; Pxp_entity.entity
-      (* looks up the parameter entity with the given name. Raises
-       * WF_error if the entity cannot be found.
-       *)
-
-    method par_entity_names : string list
-      (* returns the list of all parameter entity names *)
-
-    method notation : string -&gt; dtd_notation
-      (* looks up the notation declaration with the given name. Raises
-       * Validation_error if the notation cannot be found. (If "allow_arbitrary"
-       * has been invoked before, Unrestricted is raised instead.)
-       *)
-
-    method notation_names : string list
-      (* Returns the list of the names of all added notations *)
-
-    method pinstr : string -&gt; proc_instruction list
-      (* looks up all processing instructions with the given target.
-       * The "target" is the identifier following "&lt;?".
-       * Note: It is not possible to find out the exact position of the
-       * processing instruction.
-       *)
-
-    method pinstr_names : string list
-      (* Returns the list of the names (targets) of all added pinstrs *)
-
-    method validate : unit
-      (* ensures that the DTD is valid. This method is optimized such that
-       * actual validation is only performed if DTD has changed.
-       * If the DTD is invalid, mostly a Validation_error is raised,
-       * but other exceptions are possible, too.
-       *)
-
-    method only_deterministic_models : unit
-      (* Succeeds if all regexp content models are deterministic. 
-       * Otherwise Validation_error.
-       *)
-
-    method write : Pxp_types.output_stream -&gt; Pxp_types.encoding -&gt; bool -&gt; unit
-      (* write_compact_as_latin1 os enc doctype:
-       * Writes the DTD as &apos;enc&apos;-encoded string to &apos;os&apos;. If &apos;doctype&apos;, a 
-       * DTD like &lt;!DOCTYPE root [ ... ]&gt; is written. If &apos;not doctype&apos;,
-       * only the declarations are written (the material within the
-       * square brackets).
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -&gt; bool -&gt; unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-
-
-    (*----------------------------------------*)
-    method invalidate : unit
-      (* INTERNAL METHOD *)
-    method warner : Pxp_types.collect_warnings
-      (* INTERNAL METHOD *)
-  end
-
-'>
-<!ENTITY markup-dtd2.mli '
-
-(* ---------------------------------------------------------------------- *)
-
-and dtd_element : dtd -&gt; string -&gt; 
-  (* Creation:
-   *   new dtd_element init_dtd init_name:
-   * creates a new dtd_element object for init_dtd with init_name.
-   * The strings are represented in the same encoding as init_dtd.
-   *)
-  object
-
-    method name : string
-      (* returns the name of the declared element *)
-
-    method externally_declared : bool
-      (* returns whether the element declaration occurs in an external
-       * entity.
-       *)
-
-    method content_model : Pxp_types.content_model_type
-      (* get the content model of this element declaration, or Unspecified *)
-
-    method content_dfa : Pxp_dfa.dfa_definition option
-      (* return the DFA of the content model if there is a DFA, or None.
-       * A DFA exists only for regexp style content models which are
-       * deterministic.
-       *)
-
-    method set_cm_and_extdecl : Pxp_types.content_model_type -&gt; bool -&gt; unit
-      (* set_cm_and_extdecl cm extdecl:
-       * set the content model to &apos;cm&apos;. Once the content model is not 
-       * Unspecified, it cannot be set to a different value again.
-       * Furthermore, it is set whether the element occurs in an external
-       * entity (&apos;extdecl&apos;).
-       *)
-
-    method encoding : Pxp_types.rep_encoding
-      (* Return the encoding of the strings *)
-
-    method allow_arbitrary : unit
-      (* After this method has been invoked, the object changes its behaviour:
-       * - attributes that have not been added may be used in an
-       *   arbitrary way; the method "attribute" indicates this
-       *   by raising Undeclared instead of Validation_error.
-       *)
-
-    method disallow_arbitrary : unit
-
-    method arbitrary_allowed : bool
-      (* Returns whether arbitrary attributes are allowed or not. *)
-
-    method attribute : string -&gt; 
-                         Pxp_types.att_type * Pxp_types.att_default
-      (* get the type and default value of a declared attribute, or raise
-       * Validation_error if the attribute does not exist.
-       * If &apos;arbitrary_allowed&apos;, the exception Undeclared is raised instead
-       * of Validation_error.
-       *)
-
-    method attribute_violates_standalone_declaration : 
-               string -&gt; string option -&gt; bool
-      (* attribute_violates_standalone_declaration name v:
-       * Checks whether the attribute &apos;name&apos; violates the "standalone"
-       * declaration if it has value &apos;v&apos;.
-       * The method returns true if:
-       * - The attribute declaration occurs in an external entity, 
-       * and if one of the two conditions holds:
-       * - v = None, and there is a default for the attribute value
-       * - v = Some s, and the type of the attribute is not CDATA,
-       *   and s changes if normalized according to the rules of the
-       *   attribute type.
-       *
-       * The method raises Validation_error if the attribute does not exist.
-       * If &apos;arbitrary_allowed&apos;, the exception Undeclared is raised instead
-       * of Validation_error.
-       *)
-
-    method attribute_names : string list
-      (* get the list of all declared attributes *)
-
-    method names_of_required_attributes : string list
-      (* get the list of all attributes that are specified as required 
-       * attributes
-       *)
-
-    method id_attribute_name : string option
-      (* Returns the name of the attribute with type ID, or None. *)
-
-    method idref_attribute_names : string list
-      (* Returns the names of the attributes with type IDREF or IDREFS. *)
-
-    method add_attribute : string -&gt; 
-                           Pxp_types.att_type -&gt; 
-                          Pxp_types.att_default -&gt; 
-                          bool -&gt;
-                            unit
-      (* add_attribute name type default extdecl:
-       * add an attribute declaration for an attribute with the given name,
-       * type, and default value. If there is more than one declaration for
-       * an attribute name, the first declaration counts; the other declarations
-       * are ignored.
-       * &apos;extdecl&apos;: if true, the attribute declaration occurs in an external
-       * entity. This property is used to check the "standalone" attribute.
-       *)
-
-    method validate : unit
-      (* checks whether this element declaration (i.e. the content model and
-       * all attribute declarations) is valid for the associated DTD.
-       * Raises mostly Validation_error if the validation fails.
-       *)
-
-    method write : Pxp_types.output_stream -&gt; Pxp_types.encoding -&gt; unit
-      (* write_compact_as_latin1 os enc:
-       * Writes the &lt;!ELEMENT ... &gt; declaration to &apos;os&apos; as &apos;enc&apos;-encoded string.
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -&gt; unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-  end
-
-(* ---------------------------------------------------------------------- *)
-
-and dtd_notation : string -&gt; Pxp_types.ext_id -&gt; Pxp_types.rep_encoding -&gt;
-  (* Creation:
-   *    new dtd_notation a_name an_external_ID init_encoding
-   * creates a new dtd_notation object with the given name and the given
-   * external ID.
-   *)
-  object
-    method name : string
-    method ext_id : Pxp_types.ext_id
-    method encoding : Pxp_types.rep_encoding
-
-    method write : Pxp_types.output_stream -&gt; Pxp_types.encoding -&gt; unit
-      (* write_compact_as_latin1 os enc:
-       * Writes the &lt;!NOTATION ... &gt; declaration to &apos;os&apos; as &apos;enc&apos;-encoded 
-       * string.
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -&gt; unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-
-  end
-
-(* ---------------------------------------------------------------------- *)
-
-and proc_instruction : string -&gt; string -&gt; Pxp_types.rep_encoding -&gt;
-  (* Creation:
-   *   new proc_instruction a_target a_value
-   * creates a new proc_instruction object with the given target string and
-   * the given value string. 
-   * Note: A processing instruction is written as &lt;?target value?&gt;. 
-   *)
-  object
-    method target : string
-    method value : string
-    method encoding : Pxp_types.rep_encoding
-
-    method write : Pxp_types.output_stream -&gt; Pxp_types.encoding -&gt; unit
-      (* write os enc:
-       * Writes the &lt;?...?&gt; PI to &apos;os&apos; as &apos;enc&apos;-encoded string.
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -&gt; unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-
-    method parse_pxp_option : (string * string * (string * string) list)
-      (* Parses a PI containing a PXP option. Such PIs are formed like:
-       *   &lt;?target option-name option-att="value" option-att="value" ... ?&gt;
-       * The method returns a triple
-       *   (target, option-name, [option-att, value; ...])
-       * or raises Error.
-       *)
-
-  end
-
-;;
-
-'>
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/getcode.ml b/helm/DEVEL/pxp/pxp/doc/manual/src/getcode.ml
deleted file mode 100755 (executable)
index 4db6690..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#! /bin/sh
-# (*
-exec ocamlfattop "$0"
-*) directory ".";;
-
-open Str;;
-
-let name_re = regexp "(\\*\\$[ \t]*\\([a-zA-Z0-9.-]*\\)[ \t]*\\*)";;
-let subst_re = regexp "[<>&'%]";;
-
-let begin_entity name =
-  "<!ENTITY " ^  name ^ " '";;
-
-let end_entity () =
-  "'>\n"
-;;
-
-
-let text = ref "" in
-let within_entity = ref false in
-try
-  while true do
-    let line = read_line() in
-    if string_match name_re line 0 then begin
-      let name = matched_group 1 line in
-      if !within_entity then
-       text := !text ^ "\n" ^ end_entity();
-      within_entity := false;
-      if name <> "-" then begin
-       text := !text ^ begin_entity name;
-       within_entity := true
-      end
-    end
-    else
-      if !within_entity then begin
-       let line' =
-         global_substitute subst_re 
-           (fun s ->
-              let s' = matched_group 0 s in
-              match s' with
-                  "<" -> "&lt;"
-                | ">" -> "&gt;"
-                | "&" -> "&amp;"
-                | "'" -> "&apos;"
-                | "%" -> "&percent;"
-                | _ -> assert false)
-           line
-       in
-       text := !text ^ "\n" ^ line'
-      end
-  done;
-with End_of_file ->
-  if !within_entity then
-    text := !text ^ "\n" ^ end_entity();
-  print_string !text
-;;
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/markup.css b/helm/DEVEL/pxp/pxp/doc/manual/src/markup.css
deleted file mode 100644 (file)
index 67dfaec..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-.acronym { 
-  font-weight: bold;
-  color: #c71585
-}
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/markup.dsl b/helm/DEVEL/pxp/pxp/doc/manual/src/markup.dsl
deleted file mode 100644 (file)
index cd9b1e2..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
-
-<!-- The default is the print stylesheet. Call 'jade' with option '-ihtml'
-     to select the HTML stylesheet.
-  -->
-
-<!ENTITY % html "IGNORE">
-<![%html;[
-<!ENTITY % print "IGNORE">
-<!ENTITY docbook.dsl SYSTEM "docbook.dsl" CDATA dsssl>
-]]>
-<!ENTITY % print "INCLUDE">
-<![%print;[
-<!ENTITY docbook.dsl SYSTEM "docbook.dsl" CDATA dsssl>
-]]>
-]>
-<style-sheet>
-<style-specification use="docbook">
-<style-specification-body> 
-
-;; HTML:
-
-<![%html;[
-
-(define %footnotes-at-end%
-  ;; Should footnotes appear at the end of HTML pages?
-  #t)
-
-(define %html-ext% 
-  ;; Default extension for HTML output files
-  ".html")
-
-(define %root-filename%
-  ;; Name for the root HTML document
-  "index")
-
-(define %css-decoration%
-  ;; Enable CSS decoration of elements
-  #t)
-
-(define %stylesheet%
-  ;; Name of the stylesheet to use
-  "markup.css")
-
-(define %graphic-default-extension%
-  ;; Default extension for graphic FILEREFs
-  "gif")
-
-]]>
-
-;; printing:
-
-<![%print;[
-
-(define bop-footnotes
-  ;; Make "bottom-of-page" footnotes?
-  #t)
-
-(define %graphic-default-extension%
-  ;; Default extension for graphic FILEREFs
-  "ps")
-
-]]>
-
-;; both:
-
-(define %section-autolabel%
-   ;; Are sections enumerated?
-   #t)
-
-</style-specification-body>
-</style-specification>
-<external-specification id="docbook" document="docbook.dsl">
-</style-sheet>
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/markup.sgml b/helm/DEVEL/pxp/pxp/doc/manual/src/markup.sgml
deleted file mode 100644 (file)
index 1cb2064..0000000
+++ /dev/null
@@ -1,5109 +0,0 @@
-<!DOCTYPE book PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
-<!ENTITY markup "<acronym>PXP</acronym>">
-<!ENTITY pxp "<acronym>PXP</acronym>">
-<!ENTITY % readme.code.to-html SYSTEM "readme.ent">
-<!ENTITY apos "&#39;">
-<!ENTITY percent "&#37;">
-<!ENTITY % get.markup-yacc.mli SYSTEM "yacc.mli.ent">
-<!ENTITY % get.markup-dtd.mli SYSTEM "dtd.mli.ent">
-%readme.code.to-html;
-%get.markup-yacc.mli;
-%get.markup-dtd.mli;
-
-<!ENTITY fun "-&gt;">                       <!-- function type operator -->
-
-]>
-
-
-<book>
-
-  <title>The PXP user's guide</title>
-  <bookinfo>
-    <!-- <bookbiblio> -->
-    <authorgroup>
-      <author>
-       <firstname>Gerd</firstname>
-       <surname>Stolpmann</surname>
-       <authorblurb>
-         <para>
-        <address>
-          <email>gerd@gerd-stolpmann.de</email>
-        </address>
-      </para>
-       </authorblurb>
-      </author>
-    </authorgroup>
-    
-    <copyright>
-      <year>1999, 2000</year><holder>Gerd Stolpmann</holder>
-    </copyright>
-    <!-- </bookbiblio> -->
-
-    <abstract>
-      <para>
-&markup; is a validating parser for XML-1.0 which has been
-written entirely in Objective Caml.
-</para>
-      <formalpara>
-       <title>Download &markup;: </title>
-       <para>
-The free &markup; library can be downloaded at
-<ulink URL="http://www.ocaml-programming.de/packages/">
-http://www.ocaml-programming.de/packages/
-</ulink>. This user's guide is included.
-Newest releases of &markup; will be announced in
-<ulink URL="http://www.npc.de/ocaml/linkdb/">The OCaml Link
-Database</ulink>.
-</para>
-      </formalpara>
-    </abstract>
-
-    <legalnotice>
-      <title>License</title>
-      <para>
-This document, and the described software, "&markup;", are copyright by
-Gerd Stolpmann. 
-</para>
-
-<para>
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this document and the "&markup;" software (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:
-</para>
-      <para>
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-</para>
-      <para>
-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 Gerd Stolpmann be liable for any claim, damages or
-other liability, whether in an action of contract, tort or otherwise,
-arising from, out of or in connection with the Software or the use or
-other dealings in the software.
-</para>
-    </legalnotice>
-
-  </bookinfo>
-
-
-<!-- ********************************************************************** -->
-
-  <part>
-    <title>User's guide</title>
-    
-    <chapter>
-      <title>What is XML?</title>
-
-      <sect1>
-       <title>Introduction</title>
-
-       <para>XML (short for <emphasis>Extensible Markup Language</emphasis>)
-generalizes the idea that text documents are typically structured in sections,
-sub-sections, paragraphs, and so on. The format of the document is not fixed
-(as, for example, in HTML), but can be declared by a so-called DTD (document
-type definition). The DTD describes only the rules how the document can be
-structured, but not how the document can be processed. For example, if you want
-to publish a book that uses XML markup, you will need a processor that converts
-the XML file into a printable format such as Postscript. On the one hand, the
-structure of XML documents is configurable; on the other hand, there is no
-longer a canonical interpretation of the elements of the document; for example
-one XML DTD might want that paragraphes are delimited by
-<literal>para</literal> tags, and another DTD expects <literal>p</literal> tags
-for the same purpose. As a result, for every DTD a new processor is required.
-</para>
-
-       <para>
-Although XML can be used to express structured text documents it is not limited
-to this kind of application. For example, XML can also be used to exchange
-structured data over a network, or to simply store structured data in
-files. Note that XML documents cannot contain arbitrary binary data because
-some characters are forbidden; for some applications you need to encode binary
-data as text (e.g. the base 64 encoding).
-</para>
-
-
-       <sect2>
-         <title>The "hello world" example</title>
-       <para>
-The following example shows a very simple DTD, and a corresponding document
-instance. The document is structured such that it consists of sections, and
-that sections consist of paragraphs, and that paragraphs contain plain text:
-</para>
-
-       <programlisting>
-<![CDATA[<!ELEMENT document (section)+>
-<!ELEMENT section (paragraph)+>
-<!ELEMENT paragraph (#PCDATA)>
-]]>
-</programlisting>
-
-       <para>The following document is an instance of this DTD:</para>
-      
-       <programlisting>
-<![CDATA[<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE document SYSTEM "simple.dtd">
-<document>
-  <section>
-    <paragraph>This is a paragraph of the first section.</paragraph>
-    <paragraph>This is another paragraph of the first section.</paragraph>
-  </section>
-  <section>
-    <paragraph>This is the only paragraph of the second section.</paragraph>
-  </section>
-</document>
-]]>
-</programlisting>
-
-       <para>As in HTML (and, of course, in grand-father SGML), the "pieces" of
-the document are delimited by element braces, i.e. such a piece begins with
-<literal>&lt;name-of-the-type-of-the-piece&gt;</literal> and ends with
-<literal>&lt;/name-of-the-type-of-the-piece&gt;</literal>, and the pieces are
-called <emphasis>elements</emphasis>. Unlike HTML and SGML, both start tags and
-end tags (i.e. the delimiters written in angle brackets) can never be left
-out. For example, HTML calls the paragraphs simply <literal>p</literal>, and
-because paragraphs never contain paragraphs, a sequence of several paragraphs
-can be written as:
-
-<programlisting><![CDATA[<p>First paragraph 
-<p>Second paragraph]]></programlisting>
-
-This is not possible in XML; continuing our example above we must always write
-
-<programlisting><![CDATA[<paragraph>First paragraph</paragraph>
-<paragraph>Second paragraph</paragraph>]]></programlisting>
-
-The rationale behind that is to (1) simplify the development of XML parsers
-(you need not convert the DTD into a deterministic finite automaton which is
-required to detect omitted tags), and to (2) make it possible to parse the
-document independent of whether the DTD is known or not.
-</para>
-
-<para>
-The first line of our sample document,
-
-<programlisting>
-<![CDATA[<?xml version="1.0" encoding="ISO-8859-1"?>]]>
-</programlisting>
-
-is the so-called <emphasis>XML declaration</emphasis>. It expresses that the
-document follows the conventions of XML version 1.0, and that the document is
-encoded using characters from the ISO-8859-1 character set (often known as
-"Latin 1", mostly used in Western Europe). Although the XML declaration is not
-mandatory, it is good style to include it; everybody sees at the first glance
-that the document uses XML markup and not the similar-looking HTML and SGML
-markup languages. If you omit the XML declaration, the parser will assume
-that the document is encoded as UTF-8 or UTF-16 (there is a rule that makes
-it possible to distinguish between UTF-8 and UTF-16 automatically); these
-are encodings of Unicode's universal character set. (Note that &pxp;, unlike its
-predecessor "Markup", fully supports Unicode.)
-</para>
-
-<para>
-The second line,
-
-<programlisting>
-<![CDATA[<!DOCTYPE document SYSTEM "simple.dtd">]]>
-</programlisting>
-
-names the DTD that is going to be used for the rest of the document. In
-general, it is possible that the DTD consists of two parts, the so-called
-external and the internal subset. "External" means that the DTD exists as a
-second file; "internal" means that the DTD is included in the same file. In
-this example, there is only an external subset, and the system identifier
-"simple.dtd" specifies where the DTD file can be found. System identifiers are
-interpreted as URLs; for instance this would be legal:
-
-<programlisting>
-<![CDATA[<!DOCTYPE document SYSTEM "http://host/location/simple.dtd">]]>
-</programlisting>
-
-Please note that &pxp; cannot interpret HTTP identifiers by default, but it is
-possible to change the interpretation of system identifiers.
-</para>
-
-       <para>
-The word immediately following <literal>DOCTYPE</literal> determines which of
-the declared element types (here "document", "section", and "paragraph") is
-used for the outermost element, the <emphasis>root element</emphasis>. In this
-example it is <literal>document</literal> because the outermost element is
-delimited by <literal>&lt;document&gt;</literal> and
-<literal>&lt;/document&gt;</literal>. 
-</para>
-
-       <para>
-The DTD consists of three declarations for element types:
-<literal>document</literal>, <literal>section</literal>, and
-<literal>paragraph</literal>. Such a declaration has two parts:
-
-<programlisting>
-&lt;!ELEMENT <replaceable>name</replaceable> <replaceable>content-model</replaceable>&gt;
-</programlisting>
-
-The content model is a regular expression which describes the possible inner
-structure of the element. Here, <literal>document</literal> contains one or
-more sections, and a <literal>section</literal> contains one or more
-paragraphs. Note that these two element types are not allowed to contain
-arbitrary text. Only the <literal>paragraph</literal> element type is declared
-such that parsed character data (indicated by the symbol
-<literal>#PCDATA</literal>) is permitted.
-</para>
-
-       <para>
-See below for a detailed discussion of content models. 
-</para>
-       </sect2>
-
-       <sect2>
-         <title>XML parsers and processors</title>
-         <para>
-XML documents are human-readable, but this is not the main purpose of this
-language. XML has been designed such that documents can be read by a program
-called an <emphasis>XML parser</emphasis>. The parser checks that the document
-is well-formatted, and it represents the document as objects of the programming
-language. There are two aspects when checking the document: First, the document
-must follow some basic syntactic rules, such as that tags are written in angle
-brackets, that for every start tag there must be a corresponding end tag and so
-on. A document respecting these rules is
-<emphasis>well-formed</emphasis>. Second, the document must match the DTD in
-which case the document is <emphasis>valid</emphasis>. Many parsers check only
-on well-formedness and ignore the DTD; &pxp; is designed such that it can
-even validate the document.
-</para>
-
-         <para>
-A parser does not make a sensible application, it only reads XML
-documents. The whole application working with XML-formatted data is called an
-<emphasis>XML processor</emphasis>. Often XML processors convert documents into
-another format, such as HTML or Postscript. Sometimes processors extract data
-of the documents and output the processed data again XML-formatted. The parser
-can help the application processing the document; for example it can provide
-means to access the document in a specific manner. &pxp; supports an
-object-oriented access layer specially.
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Discussion</title>
-         <para>
-As we have seen, there are two levels of description: On the one hand, XML can
-define rules about the format of a document (the DTD), on the other hand, XML
-expresses structured documents. There are a number of possible applications:
-</para>
-
-         <itemizedlist mark="bullet" spacing="compact">
-           <listitem>
-             <para>
-XML can be used to express structured texts. Unlike HTML, there is no canonical
-interpretation; one would have to write a backend for the DTD that translates
-the structured texts into a format that existing browsers, printers
-etc. understand. The advantage of a self-defined document format is that it is
-possible to design the format in a more problem-oriented way. For example, if
-the task is to extract reports from a database, one can use a DTD that reflects
-the structure of the report or the database. A possible approach would be to
-have an element type for every database table and for every column. Once the
-DTD has been designed, the report procedure can be splitted up in a part that
-selects the database rows and outputs them as an XML document according to the
-DTD, and in a part that translates the document into other formats. Of course,
-the latter part can be solved in a generic way, e.g. there may be configurable
-backends for all DTDs that follow the approach and have element types for
-tables and columns.
-</para>
-             
-             <para>
-XML plays the role of a configurable intermediate format. The database
-extraction function can be written without having to know the details of
-typesetting; the backends can be written without having to know the details of
-the database.
-</para>
-
-             <para>
-Of course, there are traditional solutions. One can define an ad hoc
-intermediate text file format. This disadvantage is that there are no names for
-the pieces of the format, and that such formats usually lack of documentation
-because of this. Another solution would be to have a binary representation,
-either as language-dependent or language-independent structure (example of the
-latter can be found in RPC implementations). The disadvantage is that it is
-harder to view such representations, one has to write pretty printers for this
-purpose. It is also more difficult to enter test data; XML is plain text that
-can be written using an arbitrary editor (Emacs has even a good XML mode,
-PSGML). All these alternatives suffer from a missing structure checker,
-i.e. the programs processing these formats usually do not check the input file
-or input object in detail; XML parsers check the syntax of the input (the
-so-called well-formedness check), and the advanced parsers like &markup; even
-verify that the structure matches the DTD (the so-called validation).
-</para>
-             
-           </listitem>
-
-           <listitem>
-             <para>
-XML can be used as configurable communication language. A fundamental problem
-of every communication is that sender and receiver must follow the same
-conventions about the language. For data exchange, the question is usually
-which data records and fields are available, how they are syntactically
-composed, and which values are possible for the various fields. Similar
-questions arise for text document exchange. XML does not answer these problems
-completely, but it reduces the number of ambiguities for such conventions: The
-outlines of the syntax are specified by the DTD (but not necessarily the
-details), and XML introduces canonical names for the components of documents
-such that it is simpler to describe the rest of the syntax and the semantics
-informally.
-</para>
-           </listitem>
-
-           <listitem>
-             <para>
-XML is a data storage format. Currently, every software product tends to use
-its own way to store data; commercial software often does not describe such
-formats, and it is a pain to integrate such software into a bigger project. 
-XML can help to improve this situation when several applications share the same
-syntax of data files. DTDs are then neutral instances that check the format of
-data files independent of applications. 
-</para>
-           </listitem>
-
-         </itemizedlist>
-       </sect2>
-      </sect1>
-
-
-      <!-- ================================================== -->
-
-
-      <sect1>
-       <title>Highlights of XML</title>
-
-       <para>
-This section explains many of the features of XML, but not all, and some
-features not in detail. For a complete description, see the <ulink
-url="http://www.w3.org/TR/1998/REC-xml-19980210.html">XML
-specification</ulink>.
-</para>
-
-       <sect2>
-         <title>The DTD and the instance</title>
-         <para>
-The DTD contains various declarations; in general you can only use a feature if
-you have previously declared it. The document instance file may contain the
-full DTD, but it is also possible to split the DTD into an internal and an
-external subset. A document must begin as follows if the full DTD is included:
-
-<programlisting>
-&lt;?xml version="1.0" encoding="<replaceable>Your encoding</replaceable>"?&gt;
-&lt;!DOCTYPE <replaceable>root</replaceable> [
-  <replaceable>Declarations</replaceable>
-]&gt;
-</programlisting>
-
-These declarations are called the <emphasis>internal subset</emphasis>. Note
-that the usage of entities and conditional sections is restricted within the
-internal subset.
-</para>
-         <para>
-If the declarations are located in a different file, you can refer to this file
-as follows:
-
-<programlisting>
-&lt;?xml version="1.0" encoding="<replaceable>Your encoding</replaceable>"?&gt;
-&lt;!DOCTYPE <replaceable>root</replaceable> SYSTEM "<replaceable>file name</replaceable>"&gt;
-</programlisting>
-
-The declarations in the file are called the <emphasis>external
-subset</emphasis>. The file name is called the <emphasis>system
-identifier</emphasis>. 
-It is also possible to refer to the file by a so-called
-<emphasis>public identifier</emphasis>, but most XML applications won't use
-this feature.
-</para>
-         <para>
-You can also specify both internal and external subsets. In this case, the
-declarations of both subsets are mixed, and if there are conflicts, the
-declaration of the internal subset overrides those of the external subset with
-the same name. This looks as follows:
-
-<programlisting>
-&lt;?xml version="1.0" encoding="<replaceable>Your encoding</replaceable>"?&gt;
-&lt;!DOCTYPE <replaceable>root</replaceable>  SYSTEM "<replaceable>file name</replaceable>" [
-  <replaceable>Declarations</replaceable>
-]&gt;
-</programlisting>
-</para>
-
-         <para>
-The XML declaration (the string beginning with <literal>&lt;?xml</literal> and
-ending at <literal>?&gt;</literal>) should specify the encoding of the
-file. Common values are UTF-8, and the ISO-8859 series of character sets. Note
-that every file parsed by the XML processor can begin with an XML declaration
-and that every file may have its own encoding.
-</para>
-
-         <para>
-The name of the root element must be mentioned directly after the
-<literal>DOCTYPE</literal> string. This means that a full document instance
-looks like
-
-<programlisting>
-&lt;?xml version="1.0" encoding="<replaceable>Your encoding</replaceable>"?&gt;
-&lt;!DOCTYPE <replaceable>root</replaceable>  SYSTEM "<replaceable>file name</replaceable>" [
-  <replaceable>Declarations</replaceable>
-]&gt;
-
-&lt;<replaceable>root</replaceable>&gt;
-  <replaceable>inner contents</replaceable>
-&lt;/<replaceable>root</replaceable>&gt;
-</programlisting>
-</para>
-       </sect2>
-
-        <!-- ======================================== -->
-
-       <sect2>
-         <title>Reserved characters</title>
-         <para>
-Some characters are generally reserved to indicate markup such that they cannot
-be used for character data. These characters are &lt;, &gt;, and
-&amp;. Furthermore, single and double quotes are sometimes reserved. If you
-want to include such a character as character, write it as follows:
-
-<itemizedlist mark="bullet" spacing="compact">
-             <listitem>
-               <para>
-<literal>&amp;lt;</literal> instead of &lt;
-</para>
-             </listitem>
-             <listitem>
-               <para>
-<literal>&amp;gt;</literal> instead of &gt;
-</para>
-             </listitem>
-             <listitem>
-               <para>
-<literal>&amp;amp;</literal> instead of &amp;
-</para>
-             </listitem>
-             <listitem>
-               <para>
-<literal>&amp;apos;</literal> instead of '
-</para>
-             </listitem>
-             <listitem>
-               <para>
-<literal>&amp;quot;</literal> instead of "
-</para>
-             </listitem>
-           </itemizedlist>
-
-All other characters are free in the document instance. It is possible to
-include a character by its position in the Unicode alphabet: 
-
-<programlisting>
-&amp;#<replaceable>n</replaceable>;
-</programlisting>
-
-where <replaceable>n</replaceable> is the decimal number of the
-character. Alternatively, you can specify the character by its hexadecimal
-number: 
-
-<programlisting>
-&amp;#x<replaceable>n</replaceable>;
-</programlisting>
-
-In the scope of declarations, the character % is no longer free. To include it
-as character, you must use the notations <literal>&amp;#37;</literal> or
-<literal>&amp;#x25;</literal>.
-</para>
-
-         <para>Note that besides &amp;lt;, &amp;gt;, &amp;amp;,
-&amp;apos;, and &amp;quot; there are no predefines character entities. This is
-different from HTML which defines a list of characters that can be referenced
-by name (e.g. &amp;auml; for Ã¤); however, if you prefer named characters, you
-can declare such entities yourself (see below).</para>
-       </sect2>
-
-
-        <!-- ======================================== -->
-
-       <sect2>
-         <title>Elements and ELEMENT declarations</title>
-
-         <para>
-Elements structure the document instance in a hierarchical way. There is a
-top-level element, the <emphasis>root element</emphasis>, which contains a
-sequence of inner elements and character sections. The inner elements are
-structured in the same way. Every element has an <emphasis>element
-type</emphasis>. The beginning of the element is indicated by a <emphasis>start
-tag</emphasis>, written
-
-<programlisting>
-&lt;<replaceable>element-type</replaceable>&gt;
-</programlisting>
-
-and the element continues until the corresponding <emphasis>end tag</emphasis>
-is reached:
-
-<programlisting>
-&lt;/<replaceable>element-type</replaceable>&gt;
-</programlisting>
-
-In XML, it is not allowed to omit start or end tags, even if the DTD would
-permit this. Note that there are no special rules how to interpret spaces or
-newlines near start or end tags; all spaces and newlines count.
-</para>
-
-         <para>
-Every element type must be declared before it can be used. The declaration
-consists of two parts: the ELEMENT declaration describes the content model,
-i.e. which inner elements are allowed; the ATTLIST declaration describes the
-attributes of the element.
-</para>
-
-         <para>
-An element can simply allow everything as content. This is written:
-
-<programlisting>
-&lt!ELEMENT <replaceable>name</replaceable> ANY&gt;
-</programlisting>
-
-On the opposite, an element can be forced to be empty; declared by:
-
-<programlisting>
-&lt!ELEMENT <replaceable>name</replaceable> EMPTY&gt;
-</programlisting>
-
-Note that there is an abbreviated notation for empty element instances:
-<literal>&lt;<replaceable>name</replaceable>/&gt;</literal>. 
-</para>
-
-         <para>
-There are two more sophisticated forms of declarations: so-called
-<emphasis>mixed declarations</emphasis>, and <emphasis>regular
-expressions</emphasis>. An element with mixed content contains character data
-interspersed with inner elements, and the set of allowed inner elements can be
-specified. In contrast to this, a regular expression declaration does not allow
-character data, but the inner elements can be described by the more powerful
-means of regular expressions.
-</para>
-
-         <para>
-A declaration for mixed content looks as follows:
-
-<programlisting>
-&lt;!ELEMENT <replaceable>name</replaceable> (#PCDATA | <replaceable>element<subscript>1</subscript></replaceable> | ... | <replaceable>element<subscript>n</subscript></replaceable> )*&gt;
-</programlisting>
-
-or if you do not want to allow any inner element, simply
-
-<programlisting>
-&lt;!ELEMENT <replaceable>name</replaceable> (#PCDATA)&gt;
-</programlisting>
-</para>
-
-
-<blockquote>
-             <title>Example</title>
-             <para>
-If element type <literal>q</literal> is declared as
-
-<programlisting>
-<![CDATA[<!ELEMENT q (#PCDATA | r | s)*>]]>
-</programlisting>
-
-this is a legal instance:
-
-<programlisting>
-<![CDATA[<q>This is character data<r></r>with <s></s>inner elements</q>]]>
-</programlisting>
-
-But this is illegal because <literal>t</literal> has not been enumerated in the
-declaration:
-
-<programlisting>
-<![CDATA[<q>This is character data<r></r>with <t></t>inner elements</q>]]>
-</programlisting>
-</para>
-           </blockquote>
-         
-         <para>
-The other form uses a regular expression to describe the possible contents:
-
-<programlisting>
-&lt;!ELEMENT <replaceable>name</replaceable> <replaceable>regexp</replaceable>&gt;
-</programlisting>
-
-The following well-known regexp operators are allowed:
-
-<itemizedlist mark="bullet" spacing="compact">
-             <listitem>
-               <para>
-<literal><replaceable>element-name</replaceable></literal>
-</para>
-             </listitem>
-             
-             <listitem>
-               <para>
-<literal>(<replaceable>subexpr<subscript>1</subscript></replaceable> ,</literal> ... <literal>, <replaceable>subexpr<subscript>n</subscript></replaceable> )</literal>
-</para>
-             </listitem>
-             
-             <listitem>
-               <para>
-<literal>(<replaceable>subexpr<subscript>1</subscript></replaceable> |</literal> ... <literal>| <replaceable>subexpr<subscript>n</subscript></replaceable> )</literal>
-</para>
-             </listitem>
-             
-             <listitem>
-               <para>
-<literal><replaceable>subexpr</replaceable>*</literal>
-</para>
-             </listitem>
-             
-             <listitem>
-               <para>
-<literal><replaceable>subexpr</replaceable>+</literal>
-</para>
-             </listitem>
-             
-             <listitem>
-               <para>
-<literal><replaceable>subexpr</replaceable>?</literal>
-</para>
-             </listitem>
-           </itemizedlist>
-
-The <literal>,</literal> operator indicates a sequence of sub-models, the
-<literal>|</literal> operator describes alternative sub-models. The
-<literal>*</literal> indicates zero or more repetitions, and
-<literal>+</literal> one or more repetitions. Finally, <literal>?</literal> can
-be used for optional sub-models. As atoms the regexp can contain names of
-elements; note that it is not allowed to include <literal>#PCDATA</literal>.
-</para>
-
-         <para>
-The exact syntax of the regular expressions is rather strange. This can be
-explained best by a list of constraints:
-
-<itemizedlist mark="bullet" spacing="compact">
-             <listitem>
-               <para>
-The outermost expression must not be
-<literal><replaceable>element-name</replaceable></literal>. 
-</para>
-               <para><emphasis>Illegal:</emphasis> 
-<literal><![CDATA[<!ELEMENT x y>]]></literal>; this must be written as
-<literal><![CDATA[<!ELEMENT x (y)>]]></literal>.</para>
-             </listitem>
-             <listitem>
-               <para>
-For the unary operators <literal><replaceable>subexpr</replaceable>*</literal>,
-<literal><replaceable>subexpr</replaceable>+</literal>, and
-<literal><replaceable>subexpr</replaceable>?</literal>, the
-<literal><replaceable>subexpr</replaceable></literal> must not be again an
-unary operator.
-</para>
-               <para><emphasis>Illegal:</emphasis> 
-<literal><![CDATA[<!ELEMENT x y**>]]></literal>; this must be written as
-<literal><![CDATA[<!ELEMENT x (y*)*>]]></literal>.</para>
-      </listitem>
-             <listitem>
-               <para>
-Between <literal>)</literal> and one of the unary operatory
-<literal>*</literal>, <literal>+</literal>, or <literal>?</literal>, there must
-not be whitespace.</para>
-               <para><emphasis>Illegal:</emphasis> 
-<literal><![CDATA[<!ELEMENT x (y|z) *>]]></literal>; this must be written as
-<literal><![CDATA[<!ELEMENT x (y|z)*>]]></literal>.</para>
-             </listitem>
-             <listitem><para>There is the additional constraint that the
-right parenthsis must be contained in the same entity as the left parenthesis;
-see the section about parsed entities below.</para>
-             </listitem>
-           </itemizedlist>
-
-</para>
-
-<para>
-Note that there is another restriction on regular expressions which must be
-deterministic. This means that the parser must be able to see by looking at the
-next token which alternative is actually used, or whether the repetition
-stops. The reason for this is simply compatability with SGML (there is no
-intrinsic reason for this rule; XML can live without this restriction).
-</para>
-
-         <blockquote>
-           <title>Example</title>
-           <para>
-The elements are declared as follows:
-
-<programlisting>
-<![CDATA[<!ELEMENT q (r?, (s | t)+)>
-<!ELEMENT r (#PCDATA)>
-<!ELEMENT s EMPTY>
-<!ELEMENT t (q | r)>
-]]></programlisting>
-
-This is a legal instance:
-
-<programlisting>
-<![CDATA[<q><r>Some characters</r><s/></q>]]>
-</programlisting>
-
-(Note: <literal>&lt;s/&gt;</literal> is an abbreviation for
-<literal>&lt;s&gt;&lt;/s&gt;</literal>.)
-
-It would be illegal to leave <literal><![CDATA[<s/>]]></literal> out because at
-least one instance of <literal>s</literal> or <literal>t</literal> must be
-present. It would be illegal, too, if characters existed outside the
-<literal>r</literal> element; the only exception is white space. -- This is
-legal, too:
-
-<programlisting>
-<![CDATA[<q><s/><t><q><s/></q></t></q>]]>
-</programlisting>
-</para>
-         </blockquote>
-
-       </sect2>
-
-        <!-- ======================================== -->
-
-       <sect2>
-         <title>Attribute lists and ATTLIST declarations</title>
-         <para>
-Elements may have attributes. These are put into the start tag of an element as
-follows:
-
-<programlisting>
-&lt;<replaceable>element-name</replaceable> <replaceable>attribute<subscript>1</subscript></replaceable>="<replaceable>value<subscript>1</subscript></replaceable>" ... <replaceable>attribute<subscript>n</subscript></replaceable>="<replaceable>value<subscript>n</subscript></replaceable>"&gt;
-</programlisting>
-
-Instead of
-<literal>"<replaceable>value<subscript>k</subscript></replaceable>"</literal>
-it is also possible to use single quotes as in
-<literal>'<replaceable>value<subscript>k</subscript></replaceable>'</literal>.
-Note that you cannot use double quotes literally within the value of the
-attribute if double quotes are the delimiters; the same applies to single
-quotes. You can generally not use &lt; and &amp; as characters in attribute
-values. It is possible to include the paraphrases &amp;lt;, &amp;gt;,
-&amp;amp;, &amp;apos;, and &amp;quot; (and any other reference to a general
-entity as long as the entity is not defined by an external file) as well as
-&amp;#<replaceable>n</replaceable>;.
-</para>
-
-         <para>
-Before you can use an attribute you must declare it. An ATTLIST declaration
-looks as follows:
-
-<programlisting>
-&lt;!ATTLIST <replaceable>element-name</replaceable> 
-          <replaceable>attribute-name</replaceable> <replaceable>attribute-type</replaceable> <replaceable>attribute-default</replaceable>
-          ...
-          <replaceable>attribute-name</replaceable> <replaceable>attribute-type</replaceable> <replaceable>attribute-default</replaceable>
-&gt;
-</programlisting>
-
-There are a lot of types, but most important are:
-
-<itemizedlist mark="bullet" spacing="compact">
-             <listitem>
-               <para>
-<literal>CDATA</literal>: Every string is allowed as attribute value.
-</para>
-             </listitem>
-             <listitem>
-               <para>
-<literal>NMTOKEN</literal>: Every nametoken is allowed as attribute
-value. Nametokens consist (mainly) of letters, digits, ., :, -, _ in arbitrary
-order.
-</para>
-             </listitem>
-             <listitem>
-               <para>
-<literal>NMTOKENS</literal>: A space-separated list of nametokens is allowed as
-attribute value.
-</para>
-             </listitem>
-           </itemizedlist>
-
-The most interesting default declarations are:
-
-<itemizedlist mark="bullet" spacing="compact">
-             <listitem>
-               <para>
-<literal>#REQUIRED</literal>: The attribute must be specified.
-</para>
-             </listitem>
-             <listitem>
-               <para>
-<literal>#IMPLIED</literal>: The attribute can be specified but also can be
-left out. The application can find out whether the attribute was present or
-not. 
-</para>
-             </listitem>
-             <listitem>
-               <para>
-<literal>"<replaceable>value</replaceable>"</literal> or
-<literal>'<replaceable>value</replaceable>'</literal>: This particular value is
-used as default if the attribute is omitted in the element.
-</para>
-             </listitem>
-           </itemizedlist>
-</para>
-
-         <blockquote>
-           <title>Example</title>
-           <para>
-This is a valid attribute declaration for element type <literal>r</literal>:
-
-<programlisting>
-<![CDATA[<!ATTLIST r 
-          x CDATA    #REQUIRED
-          y NMTOKEN  #IMPLIED
-          z NMTOKENS "one two three">
-]]></programlisting>
-
-This means that <literal>x</literal> is a required attribute that cannot be
-left out, while <literal>y</literal> and <literal>z</literal> are optional. The
-XML parser indicates the application whether <literal>y</literal> is present or
-not, but if <literal>z</literal> is missing the default value
-"one two three" is returned automatically. 
-</para>
-
-           <para>
-This is a valid example of these attributes:
-
-<programlisting>
-<![CDATA[<r x="He said: &quot;I don't like quotes!&quot;" y='1'>]]>
-</programlisting>
-</para>
-         </blockquote>
-
-       </sect2>
-
-       <sect2>
-         <title>Parsed entities</title>
-         <para>
-Elements describe the logical structure of the document, while
-<emphasis>entities</emphasis> determine the physical structure. Entities are
-the pieces of text the parser operates on, mostly files and macros. Entities
-may be <emphasis>parsed</emphasis> in which case the parser reads the text and
-interprets it as XML markup, or <emphasis>unparsed</emphasis> which simply
-means that the data of the entity has a foreign format (e.g. a GIF icon).
-</para>
-
-         <para>If the parsed entity is going to be used as part of the DTD, it
-is called a <emphasis>parameter entity</emphasis>. You can declare a parameter
-entity with a fixed text as content by:
-
-<programlisting>
-&lt;!ENTITY % <replaceable>name</replaceable> "<replaceable>value</replaceable>"&gt;
-</programlisting>
-
-Within the DTD, you can <emphasis>refer to</emphasis> this entity, i.e. read
-the text of the entity, by:
-
-<programlisting>
-%<replaceable>name</replaceable>;
-</programlisting>
-
-Such entities behave like macros, i.e. when they are referred to, the
-macro text is inserted and read instead of the original text.
-
-<blockquote>
-             <title>Example</title>
-             <para>
-For example, you can declare two elements with the same content model by:
-
-<programlisting>
-<![CDATA[
-<!ENTITY % model "a | b | c">
-<!ELEMENT x (%model;)>
-<!ELEMENT y (%model;)>
-]]>
-</programlisting>
-
-</para>
-           </blockquote>
-
-If the contents of the entity are given as string constant, the entity is
-called an <emphasis>internal</emphasis> entity. It is also possible to name a
-file to be used as content (an <emphasis>external</emphasis> entity):
-
-<programlisting>
-&lt;!ENTITY % <replaceable>name</replaceable> SYSTEM "<replaceable>file name</replaceable>"&gt;
-</programlisting>
-
-There are some restrictions for parameter entities:
-
-<itemizedlist mark="bullet" spacing="compact">
-             <listitem>
-               <para>
-If the internal parameter entity contains the first token of a declaration
-(i.e. <literal>&lt;!</literal>), it must also contain the last token of the
-declaration, i.e. the <literal>&gt;</literal>. This means that the entity
-either contains a whole number of complete declarations, or some text from the
-middle of one declaration.
-</para>
-<para><emphasis>Illegal:</emphasis>
-<programlisting>
-<![CDATA[
-<!ENTITY % e "(a | b | c)>">
-<!ELEMENT x %e;
-]]></programlisting> Because <literal>&lt;!</literal> is contained in the main
-entity, and the corresponding <literal>&gt;</literal> is contained in the
-entity <literal>e</literal>.</para>
-             </listitem>
-             <listitem>
-               <para>
-If the internal parameter entity contains a left paranthesis, it must also
-contain the corresponding right paranthesis.
-</para>
-<para><emphasis>Illegal:</emphasis>
-<programlisting>
-<![CDATA[
-<!ENTITY % e "(a | b | c">
-<!ELEMENT x %e;)>
-]]></programlisting> Because <literal>(</literal> is contained in the entity 
-<literal>e</literal>, and the corresponding <literal>)</literal> is
-contained in the main entity.</para>
-             </listitem>
-             <listitem>
-               <para>
-When reading text from an entity, the parser automatically inserts one space
-character before the entity text and one space character after the entity
-text. However, this rule is not applied within the definition of another
-entity.</para>
-<para><emphasis>Legal:</emphasis>
-<programlisting>
-<![CDATA[ 
-<!ENTITY % suffix "gif"> 
-<!ENTITY iconfile 'icon.%suffix;'>
-]]></programlisting> Because <literal>%suffix;</literal> is referenced within
-the definition text for <literal>iconfile</literal>, no additional spaces are
-added.
-</para>
-<para><emphasis>Illegal:</emphasis>
-<programlisting>
-<![CDATA[
-<!ENTITY % suffix "test">
-<!ELEMENT x.%suffix; ANY>
-]]></programlisting>
-Because <literal>%suffix;</literal> is referenced outside the definition
-text of another entity, the parser replaces <literal>%suffix;</literal> by
-<literal><replaceable>space</replaceable>test<replaceable>space</replaceable></literal>. </para>
-<para><emphasis>Illegal:</emphasis>
-<programlisting>
-<![CDATA[
-<!ENTITY % e "(a | b | c)">
-<!ELEMENT x %e;*>
-]]></programlisting> Because there is a whitespace between <literal>)</literal>
-and <literal>*</literal>, which is illegal.</para>
-             </listitem>
-             <listitem>
-               <para>
-An external parameter entity must always consist of a whole number of complete
-declarations.
-</para>
-             </listitem>
-             <listitem>
-               <para>
-In the internal subset of the DTD, a reference to a parameter entity (internal
-or external) is only allowed at positions where a new declaration can start.
-</para>
-             </listitem>
-           </itemizedlist>
-</para>
-
-         <para>
-If the parsed entity is going to be used in the document instance, it is called
-a <emphasis>general entity</emphasis>. Such entities can be used as
-abbreviations for frequent phrases, or to include external files. Internal
-general entities are declared as follows:
-
-<programlisting>
-&lt;!ENTITY <replaceable>name</replaceable> "<replaceable>value</replaceable>"&gt;
-</programlisting>
-
-External general entities are declared this way:
-
-<programlisting>
-&lt;!ENTITY <replaceable>name</replaceable> SYSTEM "<replaceable>file name</replaceable>"&gt;
-</programlisting>
-
-References to general entities are written as:
-
-<programlisting>
-&<replaceable>name</replaceable>;
-</programlisting>
-
-The main difference between parameter and general entities is that the former
-are only recognized in the DTD and that the latter are only recognized in the
-document instance. As the DTD is parsed before the document, the parameter
-entities are expanded first; for example it is possible to use the content of a
-parameter entity as the name of a general entity:
-<literal>&amp;#38;%name;;</literal><footnote><para>This construct is only
-allowed within the definition of another entity; otherwise extra spaces would
-be added (as explained above). Such indirection is not recommended.
-</para>
-<para>Complete example:
-<programlisting>
-<![CDATA[
-<!ENTITY % variant "a">      <!-- or "b" -->
-<!ENTITY text-a "This is text A.">
-<!ENTITY text-b "This is text B.">
-<!ENTITY text "&#38;text-%variant;;">
-]]></programlisting>
-You can now write <literal>&amp;text;</literal> in the document instance, and
-depending on the value of <literal>variant</literal> either
-<literal>text-a</literal> or <literal>text-b</literal> is inserted.</para>
-</footnote>.
-</para>
-         <para>
-General entities must respect the element hierarchy. This means that there must
-be an end tag for every start tag in the entity value, and that end tags
-without corresponding start tags are not allowed.
-</para>
-
-         <blockquote>
-           <title>Example</title>
-           <para>
-If the author of a document changes sometimes, it is worthwhile to set up a
-general entity containing the names of the authors. If the author changes, you
-need only to change the definition of the entity, and do not need to check all
-occurrences of authors' names:
-
-<programlisting>
-<![CDATA[
-<!ENTITY authors "Gerd Stolpmann">
-]]>
-</programlisting>
-
-In the document text, you can now refer to the author names by writing
-<literal>&amp;authors;</literal>.
-</para>
-
-           <para>
-<emphasis>Illegal:</emphasis>
-The following two entities are illegal because the elements in the definition
-do not nest properly:
-
-<programlisting>
-<![CDATA[
-<!ENTITY lengthy-tag "<section textcolor='white' background='graphic'>">
-<!ENTITY nonsense    "<a></b>">
-]]></programlisting>
-</para>
-         </blockquote>
-
-         <para>
-Earlier in this introduction we explained that there are substitutes for
-reserved characters: &amp;lt;, &amp;gt;, &amp;amp;, &amp;apos;, and
-&amp;quot;. These are simply predefined general entities; note that they are
-the only predefined entities. It is allowed to define these entities again
-as long as the meaning is unchanged.
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Notations and unparsed entities</title>
-         <para>
-Unparsed entities have a foreign format and can thus not be read by the XML
-parser. Unparsed entities are always external. The format of an unparsed entity
-must have been declared, such a format is called a
-<emphasis>notation</emphasis>. The entity can then be declared by referring to
-this notation. As unparsed entities do not contain XML text, it is not possible
-to include them directly into the document; you can only declare attributes
-such that names of unparsed entities are acceptable values.
-</para>
-
-         <para>
-As you can see, unparsed entities are too complicated in order to have any
-purpose. It is almost always better to simply pass the name of the data file as
-normal attribute value, and let the application recognize and process the
-foreign format. 
-</para>
-       </sect2>
-
-      </sect1>
-
-
-      <!-- ================================================== -->
-
-
-      <sect1 id="sect.readme.dtd">
-       <title>A complete example: The <emphasis>readme</emphasis> DTD</title>
-       <para>
-The reason for <emphasis>readme</emphasis> was that I often wrote two versions
-of files such as README and INSTALL which explain aspects of a distributed
-software archive; one version was ASCII-formatted, the other was written in
-HTML. Maintaining both versions means double amount of work, and changes
-of one version may be forgotten in the other version. To improve this situation
-I invented the <emphasis>readme</emphasis> DTD which allows me to maintain only
-one source written as XML document, and to generate the ASCII and the HTML
-version from it.
-</para>
-
-       <para>
-In this section, I explain only the DTD. The <emphasis>readme</emphasis> DTD is
-contained in the &markup; distribution together with the two converters to
-produce ASCII and HTML. Another <link
-linkend="sect.readme.to-html">section</link> of this manual describes the HTML
-converter.
-</para>
-
-       <para>
-The documents have a simple structure: There are up to three levels of nested
-sections, paragraphs, item lists, footnotes, hyperlinks, and text emphasis. The
-outermost element has usually the type <literal>readme</literal>, it is
-declared by
-
-<programlisting>
-<![CDATA[<!ELEMENT readme (sect1+)>
-<!ATTLIST readme
-          title CDATA #REQUIRED>
-]]></programlisting>
-
-This means that this element contains one or more sections of the first level
-(element type <literal>sect1</literal>), and that the element has a required
-attribute <literal>title</literal> containing character data (CDATA). Note that
-<literal>readme</literal> elements must not contain text data.
-</para>
-
-       <para>
-The three levels of sections are declared as follows:
-
-<programlisting>
-<![CDATA[<!ELEMENT sect1 (title,(sect2|p|ul)+)>
-
-<!ELEMENT sect2 (title,(sect3|p|ul)+)>
-
-<!ELEMENT sect3 (title,(p|ul)+)>
-]]></programlisting>
-
-Every section has a <literal>title</literal> element as first subelement. After
-the title an arbitrary but non-empty sequence of inner sections, paragraphs and
-item lists follows. Note that the inner sections must belong to the next higher
-section level; <literal>sect3</literal> elements must not contain inner
-sections because there is no next higher level.
-</para>
-
-       <para>
-Obviously, all three declarations allow paragraphs (<literal>p</literal>) and
-item lists (<literal>ul</literal>). The definition can be simplified at this
-point by using a parameter entity:
-
-<programlisting>
-<![CDATA[<!ENTITY % p.like "p|ul">
-
-<!ELEMENT sect1 (title,(sect2|%p.like;)+)>
-
-<!ELEMENT sect2 (title,(sect3|%p.like;)+)>
-
-<!ELEMENT sect3 (title,(%p.like;)+)>
-]]></programlisting>
-
-Here, the entity <literal>p.like</literal> is nothing but a macro abbreviating
-the same sequence of declarations; if new elements on the same level as
-<literal>p</literal> and <literal>ul</literal> are later added, it is
-sufficient only to change the entity definition. Note that there are some
-restrictions on the usage of entities in this context; most important, entities
-containing a left paranthesis must also contain the corresponding right
-paranthesis. 
-</para>
-
-       <para>
-Note that the entity <literal>p.like</literal> is a
-<emphasis>parameter</emphasis> entity, i.e. the ENTITY declaration contains a
-percent sign, and the entity is referred to by
-<literal>%p.like;</literal>. This kind of entity must be used to abbreviate
-parts of the DTD; the <emphasis>general</emphasis> entities declared without
-percent sign and referred to as <literal>&amp;name;</literal> are not allowed
-in this context.
-</para>
-
-       <para>
-The <literal>title</literal> element specifies the title of the section in
-which it occurs. The title is given as character data, optionally interspersed
-with line breaks (<literal>br</literal>):
-
-<programlisting>
-<![CDATA[<!ELEMENT title (#PCDATA|br)*>
-]]></programlisting>
-
-Compared with the <literal>title</literal> <emphasis>attribute</emphasis> of
-the <literal>readme</literal> element, this element allows inner markup
-(i.e. <literal>br</literal>) while attribute values do not: It is an error if
-an attribute value contains the left angle bracket &lt; literally such that it
-is impossible to include inner elements. 
-</para>
-
-       <para>
-The paragraph element <literal>p</literal> has a structure similar to
-<literal>title</literal>, but it allows more inner elements:
-
-<programlisting>
-<![CDATA[<!ENTITY % text "br|code|em|footnote|a">
-
-<!ELEMENT p (#PCDATA|%text;)*>
-]]></programlisting>
-
-Line breaks do not have inner structure, so they are declared as being empty:
-
-<programlisting>
-<![CDATA[<!ELEMENT br EMPTY>
-]]></programlisting>
-
-This means that really nothing is allowed within <literal>br</literal>; you
-must always write <literal><![CDATA[<br></br>]]></literal> or abbreviated
-<literal><![CDATA[<br/>]]></literal>.
-</para>
-
-       <para>
-Code samples should be marked up by the <literal>code</literal> tag; emphasized
-text can be indicated by <literal>em</literal>:
-
-<programlisting>
-<![CDATA[<!ELEMENT code (#PCDATA)>
-
-<!ELEMENT em (#PCDATA|%text;)*>
-]]></programlisting>
-
-That <literal>code</literal> elements are not allowed to contain further markup
-while <literal>em</literal> elements do is a design decision by the author of
-the DTD.
-</para>
-
-       <para>
-Unordered lists simply consists of one or more list items, and a list item may
-contain paragraph-level material:
-
-<programlisting>
-<![CDATA[<!ELEMENT ul (li+)>
-
-<!ELEMENT li (%p.like;)*>
-]]></programlisting>
-
-Footnotes are described by the text of the note; this text may contain
-text-level markup. There is no mechanism to describe the numbering scheme of
-footnotes, or to specify how footnote references are printed.
-
-<programlisting>
-<![CDATA[<!ELEMENT footnote (#PCDATA|%text;)*>
-]]></programlisting>
-
-Hyperlinks are written as in HTML. The anchor tag contains the text describing
-where the link points to, and the <literal>href</literal> attribute is the
-pointer (as URL). There is no way to describe locations of "hash marks". If the
-link refers to another <emphasis>readme</emphasis> document, the attribute
-<literal>readmeref</literal> should be used instead of <literal>href</literal>.
-The reason is that the converted document has usually a different system
-identifier (file name), and the link to a converted document must be
-converted, too.
-
-<programlisting>
-<![CDATA[<!ELEMENT a (#PCDATA)*>
-<!ATTLIST a 
-          href      CDATA #IMPLIED
-          readmeref CDATA #IMPLIED
->
-]]></programlisting>
-
-Note that although it is only sensible to specify one of the two attributes,
-the DTD has no means to express this restriction.
-</para>
-
-<para>
-So far the DTD. Finally, here is a document for it:
-
-<programlisting>
-<![CDATA[
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE readme SYSTEM "readme.dtd">
-<readme title="How to use the readme converters">
-<sect1>
-  <title>Usage</title>
-  <p>
-    The <em>readme</em> converter is invoked on the command line by:
-  </p>
-  <p>
-    <code>readme [ -text | -html ] input.xml</code>
-  </p>
-  <p>
-    Here a list of options:
-  </p>
-  <ul>
-    <li>
-      <p><code>-text</code>: specifies that ASCII output should be produced</p>
-    </li>
-    <li>
-      <p><code>-html</code>: specifies that HTML output should be produced</p>
-    </li>
-  </ul>
-  <p>
-    The input file must be given on the command line. The converted output is
-    printed to <em>stdout</em>.
-  </p>
-</sect1>
-<sect1>
-  <title>Author</title>
-  <p>
-    The program has been written by
-    <a href="mailto:Gerd.Stolpmann@darmstadt.netsurf.de">Gerd Stolpmann</a>.
-  </p>
-</sect1>
-</readme>
-]]></programlisting>
-
-</para>
-
-
-      </sect1>
-    </chapter>
-
-<!-- ********************************************************************** -->
-
-    <chapter>
-      <title>Using &markup;</title>
-
-      <sect1>
-       <title>Validation</title>
-       <para>
-The parser can be used to <emphasis>validate</emphasis> a document. This means
-that all the constraints that must hold for a valid document are actually
-checked. Validation is the default mode of &markup;, i.e. every document is
-validated while it is being parsed.
-</para>
-
-       <para>
-In the <literal>examples</literal> directory of the distribution you find the
-<literal>pxpvalidate</literal> application. It is invoked in the following way:
-
-<programlisting>
-pxpvalidate [ -wf ] <replaceable>file</replaceable>...
-</programlisting>
-
-The files mentioned on the command line are validated, and every warning and
-every error messages are printed to stderr.
-</para>
-
-       <para>
-The -wf switch modifies the behaviour such that a well-formedness parser is
-simulated. In this mode, the ELEMENT, ATTLIST, and NOTATION declarations of the
-DTD are ignored, and only the ENTITY declarations will take effect. This mode
-is intended for documents lacking a DTD. Please note that the parser still
-scans the DTD fully and will report all errors in the DTD; such checks are not
-required by a well-formedness parser.
-</para>
-
-       <para>
-The <literal>pxpvalidate</literal> application is the simplest sensible program
-using &markup;, you may consider it as "hello world" program. 
-</para>
-      </sect1>
-
-
-      <!-- ================================================== -->
-
-
-      <sect1>
-       <title>How to parse a document from an application</title>
-       <para>
-Let me first give a rough overview of the object model of the parser. The
-following items are represented by objects:
-
-<itemizedlist mark="bullet" spacing="compact">
-           <listitem>
-             <para>
-<emphasis>Documents:</emphasis> The document representation is more or less the
-anchor for the application; all accesses to the parsed entities start here. It
-is described by the class <literal>document</literal> contained in the module
-<literal>Pxp_document</literal>. You can get some global information, such
-as the XML declaration the document begins with, the DTD of the document,
-global processing instructions, and most important, the document tree. 
-</para>
-           </listitem>
-
-           <listitem>
-             <para>
-<emphasis>The contents of documents:</emphasis> The contents have the structure
-of a tree: Elements contain other elements and text<footnote><para>Elements may
-also contain processing instructions. Unlike other document models, &markup;
-separates processing instructions from the rest of the text and provides a
-second interface to access them (method <literal>pinstr</literal>). However,
-there is a parser option (<literal>enable_pinstr_nodes</literal>) which changes
-the behaviour of the parser such that extra nodes for processing instructions
-are included into the tree.</para>
-<para>Furthermore, the tree does normally not contain nodes for XML comments;
-they are ignored by default. Again, there is an option
-(<literal>enable_comment_nodes</literal>) changing this.</para>
-</footnote>. 
-
-The common type to represent both kinds of content is <literal>node</literal>
-which is a class type that unifies the properties of elements and character
-data. Every node has a list of children (which is empty if the element is empty
-or the node represents text); nodes may have attributes; nodes have always text
-contents. There are two implementations of <literal>node</literal>, the class
-<literal>element_impl</literal> for elements, and the class
-<literal>data_impl</literal> for text data. You find these classes and class
-types in the module <literal>Pxp_document</literal>, too.
-</para>
-
-             <para>
-Note that attribute lists are represented by non-class values.
-</para>
-           </listitem>
-
-           <listitem>
-             <para>
-<emphasis>The node extension:</emphasis> For advanced usage, every node of the
-document may have an associated <emphasis>extension</emphasis> which is simply
-a second object. This object must have the three methods
-<literal>clone</literal>, <literal>node</literal>, and
-<literal>set_node</literal> as bare minimum, but you are free to add methods as
-you want. This is the preferred way to add functionality to the document
-tree<footnote><para>Due to the typing system it is more or less impossible to
-derive recursive classes in O'Caml. To get around this, it is common practice
-to put the modifiable or extensible part of recursive objects into parallel
-objects.</para> </footnote>. The class type <literal>extension</literal> is
-defined in <literal>Pxp_document</literal>, too.
-</para>
-           </listitem>
-
-           <listitem>
-             <para>
-<emphasis>The DTD:</emphasis> Sometimes it is necessary to access the DTD of a
-document; the average application does not need this feature. The class
-<literal>dtd</literal> describes DTDs, and makes it possible to get
-representations of element, entity, and notation declarations as well as
-processing instructions contained in the DTD. This class, and
-<literal>dtd_element</literal>, <literal>dtd_notation</literal>, and
-<literal>proc_instruction</literal> can be found in the module
-<literal>Pxp_dtd</literal>. There are a couple of classes representing
-different kinds of entities; these can be found in the module
-<literal>Pxp_entity</literal>. 
-</para>
-           </listitem>
-         </itemizedlist>
-
-Additionally, the following modules play a role:
-
-<itemizedlist mark="bullet" spacing="compact">
-           <listitem>
-             <para>
-<emphasis>Pxp_yacc:</emphasis> Here the main parsing functions such as
-<literal>parse_document_entity</literal> are located. Some additional types and
-functions allow the parser to be configured in a non-standard way.
-</para>
-           </listitem>
-
-           <listitem>
-             <para>
-<emphasis>Pxp_types:</emphasis> This is a collection of basic types and
-exceptions. 
-</para>
-           </listitem>
-         </itemizedlist>
-
-There are some further modules that are needed internally but are not part of
-the API.
-</para>
-
-       <para>
-Let the document to be parsed be stored in a file called
-<literal>doc.xml</literal>. The parsing process is started by calling the
-function
-
-<programlisting>
-val parse_document_entity : config -> source -> 'ext spec -> 'ext document
-</programlisting>
-
-defined in the module <literal>Pxp_yacc</literal>. The first argument
-specifies some global properties of the parser; it is recommended to start with
-the <literal>default_config</literal>. The second argument determines where the
-document to be parsed comes from; this may be a file, a channel, or an entity
-ID. To parse <literal>doc.xml</literal>, it is sufficient to pass
-<literal>from_file "doc.xml"</literal>. 
-</para>
-
-       <para>
-The third argument passes the object specification to use. Roughly
-speaking, it determines which classes implement the node objects of which
-element types, and which extensions are to be used. The <literal>'ext</literal>
-polymorphic variable is the type of the extension. For the moment, let us
-simply pass <literal>default_spec</literal> as this argument, and ignore it.
-</para>
-
-       <para>
-So the following expression parses <literal>doc.xml</literal>:
-
-<programlisting>
-open Pxp_yacc
-let d = parse_document_entity default_config (from_file "doc.xml") default_spec
-</programlisting>
-
-Note that <literal>default_config</literal> implies that warnings are collected
-but not printed. Errors raise one of the exception defined in
-<literal>Pxp_types</literal>; to get readable errors and warnings catch the
-exceptions as follows:
-
-<programlisting>
-<![CDATA[class warner =
-  object 
-    method warn w =
-      print_endline ("WARNING: " ^ w)
-  end
-;;
-
-try
-  let config = { default_config with warner = new warner } in
-  let d = parse_document_entity config (from_file "doc.xml") default_spec
-  in
-    ...
-with
-   e ->
-     print_endline (Pxp_types.string_of_exn e)
-]]></programlisting>
-
-Now <literal>d</literal> is an object of the <literal>document</literal>
-class. If you want the node tree, you can get the root element by
-
-<programlisting>
-let root = d # root
-</programlisting>
-
-and if you would rather like to access the DTD, determine it by
-
-<programlisting>
-let dtd = d # dtd
-</programlisting>
-
-As it is more interesting, let us investigate the node tree now. Given the root
-element, it is possible to recursively traverse the whole tree. The children of
-a node <literal>n</literal> are returned by the method
-<literal>sub_nodes</literal>, and the type of a node is returned by
-<literal>node_type</literal>. This function traverses the tree, and prints the
-type of each node:
-
-<programlisting>
-<![CDATA[let rec print_structure n =
-  let ntype = n # node_type in
-  match ntype with
-    T_element name ->
-      print_endline ("Element of type " ^ name);
-      let children = n # sub_nodes in
-      List.iter print_structure children
-  | T_data ->
-      print_endline "Data"
-  | _ ->
-      (* Other node types are not possible unless the parser is configured
-         differently.
-       *)
-      assert false
-]]></programlisting>
-
-You can call this function by
-
-<programlisting>
-print_structure root
-</programlisting>
-
-The type returned by <literal>node_type</literal> is either <literal>T_element
-name</literal> or <literal>T_data</literal>. The <literal>name</literal> of the
-element type is the string included in the angle brackets. Note that only
-elements have children; data nodes are always leaves of the tree.
-</para>
-
-       <para>
-There are some more methods in order to access a parsed node tree:
-
-<itemizedlist mark="bullet" spacing="compact">
-           <listitem>
-             <para>
-<literal>n # parent</literal>: Returns the parent node, or raises
-<literal>Not_found</literal> if the node is already the root
-</para>
-           </listitem>
-           <listitem>
-             <para>
-<literal>n # root</literal>: Returns the root of the node tree. 
-</para>
-           </listitem>
-           <listitem>
-             <para>
-<literal>n # attribute a</literal>: Returns the value of the attribute with
-name <literal>a</literal>. The method returns a value for every
-<emphasis>declared</emphasis> attribute, independently of whether the attribute
-instance is defined or not. If the attribute is not declared,
-<literal>Not_found</literal> will be raised. (In well-formedness mode, every
-attribute is considered as being implicitly declared with type
-<literal>CDATA</literal>.) 
-</para>
-
-<para>
-The following return values are possible: <literal>Value s</literal>, 
-<literal>Valuelist sl</literal> , and <literal>Implied_value</literal>. 
-The first two value types indicate that the attribute value is available,
-either because there is a definition
-<literal><replaceable>a</replaceable>="<replaceable>value</replaceable>"</literal>
-in the XML text, or because there is a default value (declared in the
-DTD). Only if both the instance definition and the default declaration are
-missing, the latter value <literal>Implied_value</literal> will be returned.
-</para>
-
-<para>
-In the DTD, every attribute is typed. There are single-value types (CDATA, ID,
-IDREF, ENTITY, NMTOKEN, enumerations), in which case the method passes
-<literal>Value s</literal> back, where <literal>s</literal> is the normalized
-string value of the attribute. The other types (IDREFS, ENTITIES, NMTOKENS)
-represent list values, and the parser splits the XML literal into several
-tokens and returns these tokens as <literal>Valuelist sl</literal>.
-</para>
-
-<para>
-Normalization means that entity references (the
-<literal>&amp;<replaceable>name</replaceable>;</literal> tokens) and
-character references
-(<literal>&amp;#<replaceable>number</replaceable>;</literal>) are replaced
-by the text they represent, and that white space characters are converted into
-plain spaces.
-</para>
-           </listitem>
-           <listitem>
-             <para>
-<literal>n # data</literal>: Returns the character data contained in the
-node. For data nodes, the meaning is obvious as this is the main content of
-data nodes. For element nodes, this method returns the concatenated contents of
-all inner data nodes.
-</para>
-             <para>
-Note that entity references included in the text are resolved while they are
-being parsed; for example the text <![CDATA["a &lt;&gt; b"]]> will be returned
-as <![CDATA["a <> b"]]> by this method. Spaces of data nodes are always
-preserved. Newlines are preserved, but always converted to \n characters even
-if newlines are encoded as \r\n or \r. Normally you will never see two adjacent
-data nodes because the parser collapses all data material at one location into
-one node. (However, if you create your own tree or transform the parsed tree,
-it is possible to have adjacent data nodes.)
-</para>
-             <para>
-Note that elements that do <emphasis>not</emphasis> allow #PCDATA as content
-will not have data nodes as children. This means that spaces and newlines, the
-only character material allowed for such elements, are silently dropped.
-</para>
-           </listitem>
-         </itemizedlist>
-
-For example, if the task is to print all contents of elements with type
-"valuable" whose attribute "priority" is "1", this function can help:
-
-<programlisting>
-<![CDATA[let rec print_valuable_prio1 n =
-  let ntype = n # node_type in
-  match ntype with
-    T_element "valuable" when n # attribute "priority" = Value "1" ->
-      print_endline "Valuable node with priotity 1 found:";
-      print_endline (n # data)
-  | (T_element _ | T_data) ->
-      let children = n # sub_nodes in
-      List.iter print_valuable_prio1 children
-  | _ ->
-      assert false
-]]></programlisting>
-
-You can call this function by:
-
-<programlisting>
-print_valuable_prio1 root
-</programlisting>
-
-If you like a DSSSL-like style, you can make the function
-<literal>process_children</literal> explicit:
-
-<programlisting>
-<![CDATA[let rec print_valuable_prio1 n =
-
-  let process_children n =
-    let children = n # sub_nodes in
-    List.iter print_valuable_prio1 children 
-  in
-
-  let ntype = n # node_type in
-  match ntype with
-    T_element "valuable" when n # attribute "priority" = Value "1" ->
-      print_endline "Valuable node with priority 1 found:";
-      print_endline (n # data)
-  | (T_element _ | T_data) ->
-      process_children n
-  | _ ->
-      assert false
-]]></programlisting>
-
-So far, O'Caml is now a simple "style-sheet language": You can form a big
-"match" expression to distinguish between all significant cases, and provide
-different reactions on different conditions. But this technique has
-limitations; the "match" expression tends to get larger and larger, and it is
-difficult to store intermediate values as there is only one big
-recursion. Alternatively, it is also possible to represent the various cases as
-classes, and to use dynamic method lookup to find the appropiate class. The
-next section explains this technique in detail.
-
-</para>
-      </sect1>
-
-
-      <!-- ================================================== -->
-
-
-      <sect1>
-       <title>Class-based processing of the node tree</title>
-       <para>
-By default, the parsed node tree consists of objects of the same class; this is
-a good design as long as you want only to access selected parts of the
-document. For complex transformations, it may be better to use different
-classes for objects describing different element types.
-</para>
-
-       <para>
-For example, if the DTD declares the element types <literal>a</literal>,
-<literal>b</literal>, and <literal>c</literal>, and if the task is to convert
-an arbitrary document into a printable format, the idea is to define for every
-element type a separate class that has a method <literal>print</literal>. The
-classes are <literal>eltype_a</literal>, <literal>eltype_b</literal>, and
-<literal>eltype_c</literal>, and every class implements
-<literal>print</literal> such that elements of the type corresponding to the
-class are converted to the output format.
-</para>
-
-       <para>
-The parser supports such a design directly. As it is impossible to derive
-recursive classes in O'Caml<footnote><para>The problem is that the subclass is
-usually not a subtype in this case because O'Caml has a contravariant subtyping
-rule. </para> </footnote>, the specialized element classes cannot be formed by
-simply inheriting from the built-in classes of the parser and adding methods
-for customized functionality. To get around this limitation, every node of the
-document tree is represented by <emphasis>two</emphasis> objects, one called
-"the node" and containing the recursive definition of the tree, one called "the
-extension". Every node object has a reference to the extension, and the
-extension has a reference to the node. The advantage of this model is that it
-is now possible to customize the extension without affecting the typing
-constraints of the recursive node definition.
-</para>
-
-       <para>
-Every extension must have the three methods <literal>clone</literal>,
-<literal>node</literal>, and <literal>set_node</literal>. The method
-<literal>clone</literal> creates a deep copy of the extension object and
-returns it; <literal>node</literal> returns the node object for this extension
-object; and <literal>set_node</literal> is used to tell the extension object
-which node is associated with it, this method is automatically called when the
-node tree is initialized. The following definition is a good starting point
-for these methods; usually <literal>clone</literal> must be further refined
-when instance variables are added to the class:
-
-<programlisting>
-<![CDATA[class custom_extension =
-  object (self)
-
-    val mutable node = (None : custom_extension node option)
-
-    method clone = {< >} 
-    method node =
-      match node with
-          None ->
-            assert false
-        | Some n -> n
-    method set_node n =
-      node <- Some n
-
-  end
-]]>
-</programlisting>
-
-This part of the extension is usually the same for all classes, so it is a good
-idea to consider <literal>custom_extension</literal> as the super-class of the
-further class definitions. Continuining the example of above, we can define the
-element type classes as follows:
-
-<programlisting>
-<![CDATA[class virtual custom_extension =
-  object (self)
-    ... clone, node, set_node defined as above ...
-
-    method virtual print : out_channel -> unit
-  end
-
-class eltype_a =
-  object (self)
-    inherit custom_extension
-    method print ch = ...
-  end
-
-class eltype_b =
-  object (self)
-    inherit custom_extension
-    method print ch = ...
-  end
-
-class eltype_c =
-  object (self)
-    inherit custom_extension
-    method print ch = ...
-  end
-]]></programlisting>
-
-The method <literal>print</literal> can now be implemented for every element
-type separately. Note that you get the associated node by invoking
-
-<programlisting>
-self # node
-</programlisting>
-
-and you get the extension object of a node <literal>n</literal> by writing 
-
-<programlisting>
-n # extension
-</programlisting>
-
-It is guaranteed that 
-
-<programlisting>
-self # node # extension == self
-</programlisting>
-
-always holds.
-</para>
-
-       <para>Here are sample definitions of the <literal>print</literal>
-methods:
-
-<programlisting><![CDATA[
-class eltype_a =
-  object (self)
-    inherit custom_extension
-    method print ch = 
-      (* Nodes <a>...</a> are only containers: *)
-      output_string ch "(";
-      List.iter
-        (fun n -> n # extension # print ch)
-        (self # node # sub_nodes);
-      output_string ch ")";
-  end
-
-class eltype_b =
-  object (self)
-    inherit custom_extension
-    method print ch =
-      (* Print the value of the CDATA attribute "print": *)
-      match self # node # attribute "print" with
-        Value s       -> output_string ch s
-      | Implied_value -> output_string ch "<missing>"
-      | Valuelist l   -> assert false   
-                         (* not possible because the att is CDATA *)
-  end
-
-class eltype_c =
-  object (self)
-    inherit custom_extension
-    method print ch = 
-      (* Print the contents of this element: *)
-      output_string ch (self # node # data)
-  end
-
-class null_extension =
-  object (self)
-    inherit custom_extension
-    method print ch = assert false
-  end
-]]></programlisting>
-</para>
-
-
-       <para>
-The remaining task is to configure the parser such that these extension classes
-are actually used. Here another problem arises: It is not possible to
-dynamically select the class of an object to be created. As workaround,
-&markup; allows the user to specify <emphasis>exemplar objects</emphasis> for
-the various element types; instead of creating the nodes of the tree by
-applying the <literal>new</literal> operator the nodes are produced by
-duplicating the exemplars. As object duplication preserves the class of the
-object, one can create fresh objects of every class for which previously an
-exemplar has been registered.
-</para>
-
-       <para>
-Exemplars are meant as objects without contents, the only interesting thing is
-that exemplars are instances of a certain class. The creation of an exemplar
-for an element node can be done by:
-
-<programlisting>
-let element_exemplar = new element_impl extension_exemplar
-</programlisting>
-
-And a data node exemplar is created by:
-
-<programlisting>
-let data_exemplar = new data_impl extension_exemplar
-</programlisting>
-
-The classes <literal>element_impl</literal> and <literal>data_impl</literal>
-are defined in the module <literal>Pxp_document</literal>. The constructors
-initialize the fresh objects as empty objects, i.e. without children, without
-data contents, and so on. The <literal>extension_exemplar</literal> is the
-initial extension object the exemplars are associated with. 
-</para>
-
-       <para>
-Once the exemplars are created and stored somewhere (e.g. in a hash table), you
-can take an exemplar and create a concrete instance (with contents) by
-duplicating it. As user of the parser you are normally not concerned with this
-as this is part of the internal logic of the parser, but as background knowledge
-it is worthwhile to mention that the two methods
-<literal>create_element</literal> and <literal>create_data</literal> actually
-perform the duplication of the exemplar for which they are invoked,
-additionally apply modifications to the clone, and finally return the new
-object. Moreover, the extension object is copied, too, and the new node object
-is associated with the fresh extension object. Note that this is the reason why
-every extension object must have a <literal>clone</literal> method.
-</para>
-
-       <para>
-The configuration of the set of exemplars is passed to the
-<literal>parse_document_entity</literal> function as third argument. In our
-example, this argument can be set up as follows:
-
-<programlisting>
-<![CDATA[let spec =
-  make_spec_from_alist
-    ~data_exemplar:            (new data_impl (new null_extension))
-    ~default_element_exemplar: (new element_impl (new null_extension))
-    ~element_alist:
-       [ "a",  new element_impl (new eltype_a);
-         "b",  new element_impl (new eltype_b);
-         "c",  new element_impl (new eltype_c);
-       ]
-    ()
-]]></programlisting>
-
-The <literal>~element_alist</literal> function argument defines the mapping
-from element types to exemplars as associative list. The argument
-<literal>~data_exemplar</literal> specifies the exemplar for data nodes, and
-the <literal>~default_element_exemplar</literal> is used whenever the parser
-finds an element type for which the associative list does not define an
-exemplar. 
-</para>
-
-       <para>
-The configuration is now complete. You can still use the same parsing
-functions, only the initialization is a bit different. For example, call the
-parser by:
-
-<programlisting>
-let d = parse_document_entity default_config (from_file "doc.xml") spec
-</programlisting>
-
-Note that the resulting document <literal>d</literal> has a usable type;
-especially the <literal>print</literal> method we added is visible. So you can
-print your document by
-
-<programlisting>
-d # root # extension # print stdout
-</programlisting>
-</para>
-
-       <para>
-This object-oriented approach looks rather complicated; this is mostly caused
-by working around some problems of the strict typing system of O'Caml. Some
-auxiliary concepts such as extensions were needed, but the practical
-consequences are low. In the next section, one of the examples of the
-distribution is explained, a converter from <emphasis>readme</emphasis>
-documents to HTML.
-</para>
-
-      </sect1>
-
-
-      <!-- ================================================== -->
-
-
-      <sect1 id="sect.readme.to-html">
-       <title>Example: An HTML backend for the <emphasis>readme</emphasis>
-DTD</title>
-
-       <para>The converter from <emphasis>readme</emphasis> documents to HTML
-documents follows strictly the approach to define one class per element
-type. The HTML code is similar to the <emphasis>readme</emphasis> source,
-because of this most elements can be converted in the following way: Given the
-input element 
-
-<programlisting>
-<![CDATA[<e>content</e>]]>
-</programlisting>
-
-the conversion text is the concatenation of a computed prefix, the recursively
-converted content, and a computed suffix. 
-</para>
-
-       <para>
-Only one element type cannot be handled by this scheme:
-<literal>footnote</literal>. Footnotes are collected while they are found in
-the input text, and they are printed after the main text has been converted and
-printed. 
-</para>
-
-       <sect2>
-         <title>Header</title>
-         <para>
-<programlisting>&readme.code.header;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Type declarations</title>
-         <para>
-<programlisting>&readme.code.footnote-printer;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Class <literal>store</literal></title>
-         <para>
-The <literal>store</literal> is a container for footnotes. You can add a
-footnote by invoking <literal>alloc_footnote</literal>; the argument is an
-object of the class <literal>footnote_printer</literal>, the method returns the
-number of the footnote. The interesting property of a footnote is that it can
-be converted to HTML, so a <literal>footnote_printer</literal> is an object
-with a method <literal>footnote_to_html</literal>. The class
-<literal>footnote</literal> which is defined below has a compatible method
-<literal>footnote_to_html</literal> such that objects created from it can be
-used as <literal>footnote_printer</literal>s.
-</para>
-         <para>
-The other method, <literal>print_footnotes</literal> prints the footnotes as
-definition list, and is typically invoked after the main material of the page
-has already been printed. Every item of the list is printed by
-<literal>footnote_to_html</literal>.
-</para>
-
-         <para>
-<programlisting>&readme.code.store;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Function <literal>escape_html</literal></title>
-         <para>
-This function converts the characters &lt;, &gt;, &amp;, and " to their HTML
-representation. For example, 
-<literal>escape_html "&lt;&gt;" = "&amp;lt;&amp;gt;"</literal>. Other
-characters are left unchanged.
-
-<programlisting>&readme.code.escape-html;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Virtual class <literal>shared</literal></title>
-         <para>
-This virtual class is the abstract superclass of the extension classes shown
-below. It defines the standard methods <literal>clone</literal>,
-<literal>node</literal>, and <literal>set_node</literal>, and declares the type
-of the virtual method <literal>to_html</literal>. This method recursively
-traverses the whole element tree, and prints the converted HTML code to the
-output channel passed as second argument. The first argument is the reference
-to the global <literal>store</literal> object which collects the footnotes.
-
-<programlisting>&readme.code.shared;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Class <literal>only_data</literal></title>
-         <para>
-This class defines <literal>to_html</literal> such that the character data of
-the current node is converted to HTML. Note that <literal>self</literal> is an
-extension object, <literal>self # node</literal> is the node object, and
-<literal>self # node # data</literal> returns the character data of the node. 
-
-<programlisting>&readme.code.only-data;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Class <literal>readme</literal></title>
-         <para>
-This class converts elements of type <literal>readme</literal> to HTML. Such an
-element is (by definition) always the root element of the document. First, the
-HTML header is printed; the <literal>title</literal> attribute of the element
-determines the title of the HTML page. Some aspects of the HTML page can be
-configured by setting certain parameter entities, for example the background
-color, the text color, and link colors. After the header, the
-<literal>body</literal> tag, and the headline have been printed, the contents
-of the page are converted by invoking <literal>to_html</literal> on all
-children of the current node (which is the root node). Then, the footnotes are
-appended to this by telling the global <literal>store</literal> object to print
-the footnotes. Finally, the end tags of the HTML pages are printed.
-</para>
-
-         <para>
-This class is an example how to access the value of an attribute: The value is
-determined by invoking <literal>self # node # attribute "title"</literal>. As
-this attribute has been declared as CDATA and as being required, the value has
-always the form <literal>Value s</literal> where <literal>s</literal> is the
-string value of the attribute. 
-</para>
-
-         <para>
-You can also see how entity contents can be accessed. A parameter entity object
-can be looked up by <literal>self # node # dtd # par_entity "name"</literal>,
-and by invoking <literal>replacement_text</literal> the value of the entity
-is returned after inner parameter and character entities have been
-processed. Note that you must use <literal>gen_entity</literal> instead of
-<literal>par_entity</literal> to access general entities.
-</para>
-
-         <para>
-<programlisting>&readme.code.readme;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Classes <literal>section</literal>, <literal>sect1</literal>,
-<literal>sect2</literal>, and <literal>sect3</literal></title>
-         <para>
-As the conversion process is very similar, the conversion classes of the three
-section levels are derived from the more general <literal>section</literal>
-class. The HTML code of the section levels only differs in the type of the
-headline, and because of this the classes describing the section levels can be
-computed by replacing the class argument <literal>the_tag</literal> of
-<literal>section</literal> by the HTML name of the headline tag.
-</para>
-
-         <para>
-Section elements are converted to HTML by printing a headline and then
-converting the contents of the element recursively. More precisely, the first
-sub-element is always a <literal>title</literal> element, and the other
-elements are the contents of the section. This structure is declared in the
-DTD, and it is guaranteed that the document matches the DTD. Because of this
-the title node can be separated from the rest without any checks.
-</para>
-
-         <para>
-Both the title node, and the body nodes are then converted to HTML by calling
-<literal>to_html</literal> on them.
-</para>
-
-         <para>
-<programlisting>&readme.code.section;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Classes <literal>map_tag</literal>, <literal>p</literal>,
-<literal>em</literal>, <literal>ul</literal>, <literal>li</literal></title>
-         <para>
-Several element types are converted to HTML by simply mapping them to
-corresponding HTML element types. The class <literal>map_tag</literal>
-implements this, and the class argument <literal>the_target_tag</literal>
-determines the tag name to map to. The output consists of the start tag, the
-recursively converted inner elements, and the end tag.
-
-<programlisting>&readme.code.map-tag;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Class <literal>br</literal></title>
-         <para>
-Element of type <literal>br</literal> are mapped to the same HTML type. Note
-that HTML forbids the end tag of <literal>br</literal>.
-
-<programlisting>&readme.code.br;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Class <literal>code</literal></title>
-         <para>
-The <literal>code</literal> type is converted to a <literal>pre</literal>
-section (preformatted text). As the meaning of tabs is unspecified in HTML,
-tabs are expanded to spaces.
-
-<programlisting>&readme.code.code;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Class <literal>a</literal></title>
-         <para>
-Hyperlinks, expressed by the <literal>a</literal> element type, are converted
-to the HTML <literal>a</literal> type. If the target of the hyperlink is given
-by <literal>href</literal>, the URL of this attribute can be used
-directly. Alternatively, the target can be given by
-<literal>readmeref</literal> in which case the ".html" suffix must be added to
-the file name. 
-</para>
-
-         <para>
-Note that within <literal>a</literal> only #PCDATA is allowed, so the contents
-can be converted directly by applying <literal>escape_html</literal> to the
-character data contents.
-
-<programlisting>&readme.code.a;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Class <literal>footnote</literal></title>
-         <para>
-The <literal>footnote</literal> class has two methods:
-<literal>to_html</literal> to convert the footnote reference to HTML, and
-<literal>footnote_to_html</literal> to convert the footnote text itself.
-</para>
-
-         <para>
-The footnote reference is converted to a local hyperlink; more precisely, to
-two anchor tags which are connected with each other. The text anchor points to
-the footnote anchor, and the footnote anchor points to the text anchor.
-</para>
-
-         <para>
-The footnote must be allocated in the <literal>store</literal> object. By
-allocating the footnote, you get the number of the footnote, and the text of
-the footnote is stored until the end of the HTML page is reached when the
-footnotes can be printed. The <literal>to_html</literal> method stores simply
-the object itself, such that the <literal>footnote_to_html</literal> method is
-invoked on the same object that encountered the footnote.
-</para>
-
-         <para>
-The <literal>to_html</literal> only allocates the footnote, and prints the
-reference anchor, but it does not print nor convert the contents of the
-note. This is deferred until the footnotes actually get printed, i.e. the
-recursive call of <literal>to_html</literal> on the sub nodes is done by
-<literal>footnote_to_html</literal>. 
-</para>
-
-         <para>
-Note that this technique does not work if you make another footnote within a
-footnote; the second footnote gets allocated but not printed.
-</para>
-
-         <para>
-<programlisting>&readme.code.footnote;</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>The specification of the document model</title>
-         <para>
-This code sets up the hash table that connects element types with the exemplars
-of the extension classes that convert the elements to HTML.
-
-<programlisting>&readme.code.tag-map;</programlisting>
-</para>
-       </sect2>
-
-<!-- <![RCDATA[&readme.code.to-html;]]> -->
-      </sect1>
-
-    </chapter>
-
-<!-- ********************************************************************** -->
-
-    <chapter>
-      <title>The objects representing the document</title>
-
-      <para>
-<emphasis>This description might be out-of-date. See the module interface files
-for updated information.</emphasis></para>
-
-      <sect1>
-       <title>The <literal>document</literal> class</title>
-       <para>
-<programlisting>
-<![CDATA[
-class [ 'ext ] document :
-  Pxp_types.collect_warnings -> 
-  object
-    method init_xml_version : string -> unit
-    method init_root : 'ext node -> unit
-
-    method xml_version : string
-    method xml_standalone : bool
-    method dtd : dtd
-    method root : 'ext node
-
-    method encoding : Pxp_types.rep_encoding
-
-    method add_pinstr : proc_instruction -> unit
-    method pinstr : string -> proc_instruction list
-    method pinstr_names : string list
-
-    method write : Pxp_types.output_stream -> Pxp_types.encoding -> unit
-
-  end
-;;
-]]>
-</programlisting>
-
-The methods beginning with <literal>init_</literal> are only for internal use
-of the parser.
-</para>
-
-       <itemizedlist mark="bullet" spacing="compact">
-         <listitem>
-           <para>
-<literal>xml_version</literal>: returns the version string at the beginning of
-the document. For example, "1.0" is returned if the document begins with
-<literal>&lt;?xml version="1.0"?&gt;</literal>.</para>
-         </listitem>
-         <listitem>
-           <para>
-<literal>xml_standalone</literal>: returns the boolean value of
-<literal>standalone</literal> declaration in the XML declaration. If the
-<literal>standalone</literal> attribute is missing, <literal>false</literal> is
-returned. </para>
-         </listitem>
-         <listitem>
-           <para>
-<literal>dtd</literal>: returns a reference to the global DTD object.</para>
-         </listitem>
-         <listitem>
-           <para>
-<literal>root</literal>: returns a reference to the root element.</para>
-         </listitem>
-         <listitem>
-           <para>
-<literal>encoding</literal>: returns the internal encoding of the
-document. This means that all strings of which the document consists are
-encoded in this character set.
-</para>
-         </listitem>
-         <listitem>
-           <para>
-<literal>pinstr</literal>: returns the processing instructions outside the DTD
-and outside the root element. The argument passed to the method names a
-<emphasis>target</emphasis>, and the method returns all instructions with this
-target. The target is the first word inside <literal>&lt;?</literal> and
-<literal>?&gt;</literal>.</para>
-         </listitem>
-         <listitem>
-           <para>
-<literal>pinstr_names</literal>: returns the names of the processing instructions</para>
-         </listitem>
-         <listitem>
-           <para>
-<literal>add_pinstr</literal>: adds another processing instruction. This method
-is used by the parser itself to enter the instructions returned by
-<literal>pinstr</literal>, but you can also enter additional instructions.
-</para>
-         </listitem>
-         <listitem>
-           <para>
-<literal>write</literal>: writes the document to the passed stream as XML
-text using the passed (external) encoding. The generated text is always valid
-XML and can be parsed by PXP; however, the text is badly formatted (this is not
-a pretty printer).</para>
-         </listitem>
-       </itemizedlist>
-      </sect1>
-
-<!-- ********************************************************************** -->
-
-      <sect1>
-       <title>The class type <literal>node</literal></title>
-       <para>
-
-From <literal>Pxp_document</literal>:
-
-<programlisting>
-type node_type =
-  T_data
-| T_element of string
-| T_super_root
-| T_pinstr of string
-| T_comment
-<replaceable>and some other, reserved types</replaceable>
-;;
-
-class type [ 'ext ] node =
-  object ('self)
-    constraint 'ext = 'ext node #extension
-
-    <anchor id="type-node-general.sig"
-   >(* <link linkend="type-node-general" endterm="type-node-general.title"
-       ></link> *)
-
-    method extension : 'ext
-    method dtd : dtd
-    method parent : 'ext node
-    method root : 'ext node
-    method sub_nodes : 'ext node list
-    method iter_nodes : ('ext node &fun; unit) &fun; unit
-    method iter_nodes_sibl : 
-           ('ext node option &fun; 'ext node &fun; 'ext node option &fun; unit) &fun; unit
-    method node_type : node_type
-    method encoding : Pxp_types.rep_encoding
-    method data : string
-    method position : (string * int * int)
-    method comment : string option
-    method pinstr : string &fun; proc_instruction list
-    method pinstr_names : string list
-    method write : Pxp_types.output_stream -> Pxp_types.encoding -> unit
-
-    <anchor id="type-node-atts.sig"
-   >(* <link linkend="type-node-atts" endterm="type-node-atts.title"
-       ></link> *)
-
-    method attribute : string &fun; Pxp_types.att_value
-    method required_string_attribute : string &fun; string
-    method optional_string_attribute : string &fun; string option
-    method required_list_attribute : string &fun; string list
-    method optional_list_attribute : string &fun; string list
-    method attribute_names : string list
-    method attribute_type : string &fun; Pxp_types.att_type
-    method attributes : (string * Pxp_types.att_value) list
-    method id_attribute_name : string
-    method id_attribute_value : string
-    method idref_attribute_names : string
-
-    <anchor id="type-node-mods.sig"
-   >(* <link linkend="type-node-mods" endterm="type-node-mods.title"
-       ></link> *)
-
-    method add_node : ?force:bool &fun; 'ext node &fun; unit
-    method add_pinstr : proc_instruction &fun; unit
-    method delete : unit
-    method set_nodes : 'ext node list &fun; unit
-    method quick_set_attributes : (string * Pxp_types.att_value) list &fun; unit
-    method set_comment : string option &fun; unit
-
-    <anchor id="type-node-cloning.sig"
-   >(* <link linkend="type-node-cloning" endterm="type-node-cloning.title"
-       ></link> *)
-
-    method orphaned_clone : 'self
-    method orphaned_flat_clone : 'self
-    method create_element : 
-              ?position:(string * int * int) &fun;
-              dtd &fun; node_type &fun; (string * string) list &fun;
-                  'ext node
-    method create_data : dtd &fun; string &fun; 'ext node
-    method keep_always_whitespace_mode : unit
-
-    <anchor id="type-node-weird.sig"
-   >(* <link linkend="type-node-weird" endterm="type-node-weird.title"
-       ></link> *)
-
-    method local_validate : ?use_dfa:bool -> unit -> unit
-
-    (* ... Internal methods are undocumented. *)
-
-  end
-;;
-</programlisting>
-
-In the module <literal>Pxp_types</literal> you can find another type
-definition that is important in this context:
-
-<programlisting>
-type Pxp_types.att_value =
-    Value     of string
-  | Valuelist of string list
-  | Implied_value
-;;
-</programlisting>
-</para>
-
-       <sect2>
-         <title>The structure of document trees</title>
-
-<para>
-A node represents either an element or a character data section. There are two
-classes implementing the two aspects of nodes: <literal>element_impl</literal>
-and <literal>data_impl</literal>. The latter class does not implement all
-methods because some methods do not make sense for data nodes.
-</para>
-
-<para>
-(Note: PXP also supports a mode which forces that processing instructions and
-comments are represented as nodes of the document tree. However, these nodes
-are instances of <literal>element_impl</literal> with node types
-<literal>T_pinstr</literal> and <literal>T_comment</literal>,
-respectively. This mode must be explicitly configured; the basic representation
-knows only element and data nodes.)
-</para>
-
-       <para>The following figure 
-(<link linkend="node-term" endterm="node-term"></link>) shows an example how
-a tree is constructed from element and data nodes. The circular areas 
-represent element nodes whereas the ovals denote data nodes. Only elements
-may have subnodes; data nodes are always leaves of the tree. The subnodes
-of an element can be either element or data nodes; in both cases the O'Caml
-objects storing the nodes have the class type <literal>node</literal>.</para>
-
-       <para>Attributes (the clouds in the picture) are not directly
-integrated into the tree; there is always an extra link to the attribute
-list. This is also true for processing instructions (not shown in the
-picture). This means that there are separated access methods for attributes and
-processing instructions.</para>
-
-<figure id="node-term" float="1">
-<title>A tree with element nodes, data nodes, and attributes</title>
-<graphic fileref="pic/node_term" format="GIF"></graphic>
-</figure>
-
-       <para>Only elements, data sections, attributes and processing
-instructions (and comments, if configured) can, directly or indirectly, occur
-in the document tree. It is impossible to add entity references to the tree; if
-the parser finds such a reference, not the reference as such but the referenced
-text (i.e. the tree representing the structured text) is included in the
-tree.</para>
-
-       <para>Note that the parser collapses as much data material into one
-data node as possible such that there are normally never two adjacent data
-nodes. This invariant is enforced even if data material is included by entity
-references or CDATA sections, or if a data sequence is interrupted by
-comments. So <literal>a &amp;amp; b &lt;-- comment --&gt; c &lt;![CDATA[
-&lt;&gt; d]]&gt;</literal> is represented by only one data node, for
-instance. However, you can create document trees manually which break this
-invariant; it is only the way the parser forms the tree.
-</para> 
-
-<figure id="node-general" float="1">
-<title>Nodes are doubly linked trees</title>
-<graphic fileref="pic/node_general" format="GIF"></graphic>
-</figure>
-
-       <para>
-The node tree has links in both directions: Every node has a link to its parent
-(if any), and it has links to the subnodes (see 
-figure <link linkend="node-general" endterm="node-general"></link>). Obviously,
-this doubly-linked structure simplifies the navigation in the tree; but has
-also some consequences for the possible operations on trees.</para>
-
-       <para>
-Because every node must have at most <emphasis>one</emphasis> parent node,
-operations are illegal if they violate this condition. The following figure
-(<link linkend="node-add" endterm="node-add"></link>) shows on the left side
-that node <literal>y</literal> is added to <literal>x</literal> as new subnode
-which is allowed because <literal>y</literal> does not have a parent yet. The
-right side of the picture illustrates what would happen if <literal>y</literal>
-had a parent node; this is illegal because <literal>y</literal> would have two
-parents after the operation.</para>
-
-<figure id="node-add" float="1">
-<title>A node can only be added if it is a root</title>
-<graphic fileref="pic/node_add" format="GIF">
-</graphic>
-</figure>
-
-       <para>
-The "delete" operation simply removes the links between two nodes. In the
-picture (<link linkend="node-delete" endterm="node-delete"></link>) the node
-<literal>x</literal> is deleted from the list of subnodes of
-<literal>y</literal>. After that, <literal>x</literal> becomes the root of the
-subtree starting at this node.</para>
-
-<figure id="node-delete" float="1">
-<title>A deleted node becomes the root of the subtree</title>
-<graphic fileref="pic/node_delete" format="GIF"></graphic>
-</figure>
-
-       <para>
-It is also possible to make a clone of a subtree; illustrated in 
-<link linkend="node-clone" endterm="node-clone"></link>. In this case, the
-clone is a copy of the original subtree except that it is no longer a
-subnode. Because cloning never keeps the connection to the parent, the clones
-are called <emphasis>orphaned</emphasis>.
-</para>
-
-<figure id="node-clone" float="1">
-<title>The clone of a subtree</title>
-<graphic fileref="pic/node_clone" format="GIF"></graphic>
-</figure>
-       </sect2>
-
-       <sect2>
-         <title>The methods of the class type <literal>node</literal></title>
-
-         <anchor id="type-node-general">
-         <formalpara>
-           <title id="type-node-general.title">
-              <link linkend="type-node-general.sig">General observers</link>
-            </title>
-
-           <para>
-             <itemizedlist mark="bullet" spacing="compact">
-               <listitem>
-                 <para>
-<literal>extension</literal>: The reference to the extension object which
-belongs to this node (see ...).</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>dtd</literal>: Returns a reference to the global DTD. All nodes
-of a tree must share the same DTD.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>parent</literal>: Get the father node. Raises
-<literal>Not_found</literal> in the case the node does not have a
-parent, i.e. the node is the root.</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>root</literal>: Gets the reference to the root node of the tree.
-Every node is contained in a tree with a root, so this method always 
-succeeds. Note that this method <emphasis>searches</emphasis> the root,
-which costs time proportional to the length of the path to the root.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>sub_nodes</literal>: Returns references to the children. The returned
-list reflects the order of the children. For data nodes, this method returns
-the empty list.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>iter_nodes f</literal>: Iterates over the children, and calls
-<literal>f</literal> for every child in turn. 
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>iter_nodes_sibl f</literal>: Iterates over the children, and calls
-<literal>f</literal> for every child in turn. <literal>f</literal> gets as
-arguments the previous node, the current node, and the next node.</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>node_type</literal>: Returns either <literal>T_data</literal> which
-means that the node is a data node, or <literal>T_element n</literal>
-which means that the node is an element of type <literal>n</literal>. 
-If configured, possible node types are also <literal>T_pinstr t</literal>
-indicating that the node represents a processing instruction with target
-<literal>t</literal>, and <literal>T_comment</literal> in which case the node
-is a comment.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>encoding</literal>: Returns the encoding of the strings.</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>data</literal>: Returns the character data of this node and all
-children, concatenated as one string. The encoding of the string is what
-the method <literal>encoding</literal> returns.
-- For data nodes, this method simply returns the represented characters.
-For elements, the meaning of the method has been extended such that it
-returns something useful, i.e. the effectively contained characters, without
-markup. (For <literal>T_pinstr</literal> and <literal>T_comment</literal>
-nodes, the method returns the empty string.)
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>position</literal>: If configured, this method returns the position of
-the element as triple (entity, line, byteposition). For data nodes, the
-position is not stored. If the position is not available the triple
-<literal>"?", 0, 0</literal> is returned.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>comment</literal>: Returns <literal>Some text</literal> for comment
-nodes, and <literal>None</literal> for other nodes. The <literal>text</literal>
-is everything between the comment delimiters <literal>&lt;--</literal> and
-<literal>--&gt;</literal>.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>pinstr n</literal>: Returns all processing instructions that are
-directly contained in this element and that have a <emphasis>target</emphasis>
-specification of <literal>n</literal>. The target is the first word after
-the <literal>&lt;?</literal>.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>pinstr_names</literal>: Returns the list of all targets of processing
-instructions directly contained in this element.</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>write s enc</literal>: Prints the node and all subnodes to the passed
-output stream as valid XML text, using the passed external encoding.
-</para>
-               </listitem>
-             </itemizedlist>
-            </para>
-         </formalpara>
-
-         <anchor id="type-node-atts">
-         <formalpara>
-           <title id="type-node-atts.title">
-              <link linkend="type-node-atts.sig">Attribute observers</link>
-            </title>
-           <para>
-             <itemizedlist mark="bullet" spacing="compact">
-               <listitem>
-                 <para>
-<literal>attribute n</literal>: Returns the value of the attribute with name
-<literal>n</literal>. This method returns a value for every declared 
-attribute, and it raises <literal>Not_found</literal> for any undeclared
-attribute. Note that it even returns a value if the attribute is actually
-missing but is declared as <literal>#IMPLIED</literal> or has a default
-value. - Possible values are:
-                  <itemizedlist mark="bullet" spacing="compact">
-                     <listitem>
-                       <para>
-<literal>Implied_value</literal>: The attribute has been declared with the
-keyword <literal>#IMPLIED</literal>, and the attribute is missing in the
-attribute list of this element.</para>
-                     </listitem>
-                     <listitem>
-                       <para>
-<literal>Value s</literal>: The attribute has been declared as type
-<literal>CDATA</literal>, as <literal>ID</literal>, as
-<literal>IDREF</literal>, as <literal>ENTITY</literal>, or as
-<literal>NMTOKEN</literal>, or as enumeration or notation, and one of the two
-conditions holds: (1) The attribute value is present in the attribute list in
-which case the value is returned in the string <literal>s</literal>. (2) The
-attribute has been omitted, and the DTD declared the attribute with a default
-value. The default value is returned in <literal>s</literal>. 
-- Summarized, <literal>Value s</literal> is returned for non-implied, non-list 
-attribute values.
-</para>
-                     </listitem>
-                     <listitem>
-                       <para>
-<literal>Valuelist l</literal>: The attribute has been declared as type
-<literal>IDREFS</literal>, as <literal>ENTITIES</literal>, or
-as <literal>NMTOKENS</literal>, and one of the two conditions holds: (1) The
-attribute value is present in the attribute list in which case the
-space-separated tokens of the value are returned in the string list
-<literal>l</literal>. (2) The attribute has been omitted, and the DTD declared
-the attribute with a default value. The default value is returned in
-<literal>l</literal>. 
-- Summarized, <literal>Valuelist l</literal> is returned for all list-type
-attribute values.
-</para>
-                     </listitem>
-                   </itemizedlist>
-
-Note that before the attribute value is returned, the value is normalized. This
-means that newlines are converted to spaces, and that references to character
-entities (i.e. <literal>&amp;#<replaceable>n</replaceable>;</literal>) and
-general entities
-(i.e. <literal>&amp;<replaceable>name</replaceable>;</literal>) are expanded;
-if necessary, expansion is performed recursively.
-</para>
-
-<para>
-In well-formedness mode, there is no DTD which could declare an
-attribute. Because of this, every occuring attribute is considered as a CDATA
-attribute.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>required_string_attribute n</literal>: returns the Value attribute
-called n, or the Valuelist attribute as a string where the list elements
-are separated by spaces. If the attribute value is implied, or if the
-attribute does not exists, the method will fail. - This method is convenient
-if you expect a non-implied and non-list attribute value.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>optional_string_attribute n</literal>: returns the Value attribute
-called n, or the Valuelist attribute as a string where the list elements
-are separated by spaces. If the attribute value is implied, or if the
-attribute does not exists, the method returns None. - This method is 
-convenient if you expect a non-list attribute value including the implied
-value.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>required_list_attribute n</literal>: returns the Valuelist attribute
-called n, or the Value attribute as a list with a single element.
-If the attribute value is implied, or if the
-attribute does not exists, the method will fail. - This method is 
-convenient if you expect a list attribute value.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>optional_list_attribute n</literal>: returns the Valuelist attribute
-called n, or the Value attribute as a list with a single element.
-If the attribute value is implied, or if the
-attribute does not exists, an empty list will be returned. - This method
-is convenient if you expect a list attribute value or the implied value.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>attribute_names</literal>: returns the list of all attribute names of
-this element. As this is a validating parser, this list is equal to the
-list of declared attributes.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>attribute_type n</literal>: returns the type of the attribute called
-<literal>n</literal>. See the module <literal>Pxp_types</literal> for a
-description of the encoding of the types.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>attributes</literal>: returns the list of pairs of names and values
-for all attributes of
-this element.</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>id_attribute_name</literal>: returns the name of the attribute that is
-declared with type ID. There is at most one such attribute. The method raises
-<literal>Not_found</literal> if there is no declared ID attribute for the
-element type.</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>id_attribute_value</literal>: returns the value of the attribute that
-is declared with type ID. There is at most one such attribute. The method raises
-<literal>Not_found</literal> if there is no declared ID attribute for the
-element type.</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>idref_attribute_names</literal>: returns the list of attribute names
-that are declared as IDREF or IDREFS.</para>
-               </listitem>
-             </itemizedlist>
-          </para>
-         </formalpara>
-         
-         <anchor id="type-node-mods">
-         <formalpara>
-           <title id="type-node-mods.title">
-              <link linkend="type-node-mods.sig">Modifying methods</link>
-            </title>
-           
-           <para>
-The following methods are only defined for element nodes (more exactly:
-the methods are defined for data nodes, too, but fail always).
-
-             <itemizedlist mark="bullet" spacing="compact">
-               <listitem>
-                 <para>
-<literal>add_node sn</literal>: Adds sub node <literal>sn</literal> to the list
-of children. This operation is illustrated in the picture 
-<link linkend="node-add" endterm="node-add"></link>. This method expects that
-<literal>sn</literal> is a root, and it requires that <literal>sn</literal> and
-the current object share the same DTD.
-</para>
-
-<para>Because <literal>add_node</literal> is the method the parser itself uses
-to add new nodes to the tree, it performs by default some simple validation
-checks: If the content model is a regular expression, it is not allowed to add
-data nodes to this node unless the new nodes consist only of whitespace. In
-this case, the new data nodes are silently dropped (you can change this by
-invoking <literal>keep_always_whitespace_mode</literal>).
-</para>
-
-<para>If the document is flagged as stand-alone, these data nodes only
-containing whitespace are even forbidden if the element declaration is
-contained in an external entity. This case is detected and rejected.</para>
-
-<para>If the content model is <literal>EMPTY</literal>, it is not allowed to
-add any data node unless the data node is empty. In this case, the new data
-node is silently dropped.
-</para>
-
-<para>These checks only apply if there is a DTD. In well-formedness mode, it is
-assumed that every element is declared with content model
-<literal>ANY</literal> which prohibits any validation check. Furthermore, you
-turn these checks off by passing <literal>~force:true</literal> as first
-argument.</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>add_pinstr pi</literal>: Adds the processing instruction
-<literal>pi</literal> to the list of processing instructions.
-</para>
-               </listitem>
-
-               <listitem>
-                 <para>
-<literal>delete</literal>: Deletes this node from the tree. After this
-operation, this node is no longer the child of the former father node; and the
-node loses the connection to the father as well. This operation is illustrated
-by the figure <link linkend="node-delete" endterm="node-delete"></link>.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>set_nodes nl</literal>: Sets the list of children to
-<literal>nl</literal>. It is required that every member of <literal>nl</literal>
-is a root, and that all members and the current object share the same DTD.
-Unlike <literal>add_node</literal>, no validation checks are performed.
-</para>
-             </listitem>
-             <listitem>
-                 <para>
-<literal>quick_set_attributes atts</literal>: sets the attributes of this
-element to <literal>atts</literal>. It is <emphasis>not</emphasis> checked
-whether <literal>atts</literal> matches the DTD or not; it is up to the
-caller of this method to ensure this. (This method may be useful to transform
-the attribute values, i.e. apply a mapping to every attribute.)
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>set_comment text</literal>: This method is only applicable to
-<literal>T_comment</literal> nodes; it sets the comment text contained by such
-nodes. </para>
-               </listitem>
-             </itemizedlist>
-</para>
-         </formalpara>
-         
-         <anchor id="type-node-cloning">
-         <formalpara>
-           <title id="type-node-cloning.title">
-              <link linkend="type-node-cloning.sig">Cloning methods</link>
-            </title>
-
-           <para>
-             <itemizedlist mark="bullet" spacing="compact">
-               <listitem>
-                 <para>
-<literal>orphaned_clone</literal>: Returns a clone of the node and the complete
-tree below this node (deep clone). The clone does not have a parent (i.e. the
-reference to the parent node is <emphasis>not</emphasis> cloned). While
-copying the subtree, strings are skipped; it is likely that the original tree
-and the copy tree share strings. Extension objects are cloned by invoking
-the <literal>clone</literal> method on the original objects; how much of
-the extension objects is cloned depends on the implemention of this method.
-</para>
-                 <para>This operation is illustrated by the figure 
-<link linkend="node-clone" endterm="node-clone"></link>.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>orphaned_flat_clone</literal>: Returns a clone of the node,
-but sets the list of sub nodes to [], i.e. the sub nodes are not cloned.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<anchor id="type-node-meth-create-element">
-<literal>create_element dtd nt al</literal>: Returns a flat copy of this node
-(which must be an element) with the following modifications: The DTD is set to
-<literal>dtd</literal>; the node type is set to <literal>nt</literal>, and the
-new attribute list is set to <literal>al</literal> (given as list of
-(name,value) pairs). The copy does not have children nor a parent. It does not
-contain processing instructions. See 
-<link linkend="type-node-ex-create-element">the example below</link>.
-</para>
-
-                 <para>Note that you can specify the position of the new node
-by the optional argument <literal>~position</literal>.</para>
-               </listitem>
-               <listitem>
-                 <para>
-<anchor id="type-node-meth-create-data">
-<literal>create_data dtd cdata</literal>: Returns a flat copy of this node
-(which must be a data node) with the following modifications: The DTD is set to
-<literal>dtd</literal>; the node type is set to <literal>T_data</literal>; the
-attribute list is empty (data nodes never have attributes); the list of
-children and PIs is empty, too (same reason). The new node does not have a
-parent. The value <literal>cdata</literal> is the new character content of the
-node. See 
-<link linkend="type-node-ex-create-data">the example below</link>.
-</para>
-               </listitem>
-               <listitem>
-                 <para>
-<literal>keep_always_whitespace_mode</literal>: Even data nodes which are
-normally dropped because they only contain ignorable whitespace, can added to
-this node once this mode is turned on. (This mode is useful to produce
-canonical XML.)
-</para>
-               </listitem>
-             </itemizedlist>
-</para>
-         </formalpara>
-         
-         <anchor id="type-node-weird">
-         <formalpara>
-           <title id="type-node-weird.title">
-              <link linkend="type-node-weird.sig">Validating methods</link>
-            </title>
-           <para>
-There is one method which locally validates the node, i.e. checks whether the
-subnodes match the content model of this node.
-
-             <itemizedlist mark="bullet" spacing="compact">
-               <listitem>
-                 <para>
-<literal>local_validate</literal>: Checks that this node conforms to the
-DTD by comparing the type of the subnodes with the content model for this
-node. (Applications need not call this method unless they add new nodes
-themselves to the tree.)
-</para>
-               </listitem>
-             </itemizedlist>
-</para>
-         </formalpara>
-       </sect2>
-
-       <sect2>
-         <title>The class <literal>element_impl</literal></title>
-         <para>
-This class is an implementation of <literal>node</literal> which
-realizes element nodes:
-
-<programlisting>
-<![CDATA[
-class [ 'ext ] element_impl : 'ext -> [ 'ext ] node
-]]>
-</programlisting>
-
-</para>
-         <formalpara>
-           <title>Constructor</title>
-           <para>
-You can create a new instance by
-
-<programlisting>
-new element_impl <replaceable>extension_object</replaceable>
-</programlisting>
-
-which creates a special form of empty element which already contains a
-reference to the <replaceable>extension_object</replaceable>, but is
-otherwise empty. This special form is called an
-<emphasis>exemplar</emphasis>. The purpose of exemplars is that they serve as
-patterns that can be duplicated and filled with data. The method
-<link linkend="type-node-meth-create-element">
-<literal>create_element</literal></link> is designed to perform this action.
-</para>
-         </formalpara>
-
-         <anchor id="type-node-ex-create-element">
-         <formalpara>
-           <title>Example</title>
-
-           <para>First, create an exemplar by
-
-<programlisting>
-let exemplar_ext = ... in
-let exemplar     = new element_impl exemplar_ext in
-</programlisting>
-
-The <literal>exemplar</literal> is not used in node trees, but only as
-a pattern when the element nodes are created:
-
-<programlisting>
-let element = exemplar # <link linkend="type-node-meth-create-element">create_element</link> dtd (T_element name) attlist 
-</programlisting>
-
-The <literal>element</literal> is a copy of <literal>exemplar</literal>
-(even the extension <literal>exemplar_ext</literal> has been copied)
-which ensures that <literal>element</literal> and its extension are objects
-of the same class as the exemplars; note that you need not to pass a 
-class name or other meta information. The copy is initially connected 
-with the <literal>dtd</literal>, it gets a node type, and the attribute list
-is filled. The <literal>element</literal> is now fully functional; it can
-be added to another element as child, and it can contain references to
-subnodes.
-</para>
-         </formalpara>
-
-       </sect2>
-
-       <sect2>
-         <title>The class <literal>data_impl</literal></title>
-         <para>
-This class is an implementation of <literal>node</literal> which
-should be used for all character data nodes:
-
-<programlisting>
-<![CDATA[
-class [ 'ext ] data_impl : 'ext -> [ 'ext ] node
-]]>
-</programlisting>
-
-</para>
-
-         <formalpara>
-           <title>Constructor</title>
-           <para>
-You can create a new instance by
-
-<programlisting>
-new data_impl <replaceable>extension_object</replaceable>
-</programlisting>
-
-which creates an empty exemplar node which is connected to
-<replaceable>extension_object</replaceable>. The node does not contain a
-reference to any DTD, and because of this it cannot be added to node trees.
-</para>
-         </formalpara>
-           
-         <para>To get a fully working data node, apply the method
-<link linkend="type-node-meth-create-data"><literal>create_data</literal>
-</link> to the exemplar (see example).
-</para>
-
-         <anchor id="type-node-ex-create-data">
-         <formalpara>
-           <title>Example</title>
-
-           <para>First, create an exemplar by
-
-<programlisting>
-let exemplar_ext = ... in
-let exemplar     = new exemplar_ext data_impl in
-</programlisting>
-
-The <literal>exemplar</literal> is not used in node trees, but only as
-a pattern when the data nodes are created:
-
-<programlisting>
-let data_node = exemplar # <link
-                                linkend="type-node-meth-create-data">create_data</link> dtd "The characters contained in the data node" 
-</programlisting>
-
-The <literal>data_node</literal> is a copy of <literal>exemplar</literal>.
-The copy is initially connected 
-with the <literal>dtd</literal>, and it is filled with character material.
-The <literal>data_node</literal> is now fully functional; it can
-be added to an element as child.
-</para>
-         </formalpara>
-       </sect2>
-
-       <sect2>
-         <title>The type <literal>spec</literal></title>
-         <para>
-The type <literal>spec</literal> defines a way to handle the details of
-creating nodes from exemplars.
-
-<programlisting><![CDATA[
-type 'ext spec
-constraint 'ext = 'ext node #extension
-
-val make_spec_from_mapping :
-      ?super_root_exemplar : 'ext node ->
-      ?comment_exemplar : 'ext node ->
-      ?default_pinstr_exemplar : 'ext node ->
-      ?pinstr_mapping : (string, 'ext node) Hashtbl.t ->
-      data_exemplar: 'ext node ->
-      default_element_exemplar: 'ext node ->
-      element_mapping: (string, 'ext node) Hashtbl.t -> 
-      unit -> 
-        'ext spec
-
-val make_spec_from_alist :
-      ?super_root_exemplar : 'ext node ->
-      ?comment_exemplar : 'ext node ->
-      ?default_pinstr_exemplar : 'ext node ->
-      ?pinstr_alist : (string * 'ext node) list ->
-      data_exemplar: 'ext node ->
-      default_element_exemplar: 'ext node ->
-      element_alist: (string * 'ext node) list -> 
-      unit -> 
-        'ext spec
-]]></programlisting>
-
-The two functions <literal>make_spec_from_mapping</literal> and
-<literal>make_spec_from_alist</literal> create <literal>spec</literal>
-values. Both functions are functionally equivalent and the only difference is
-that the first function prefers hashtables and the latter associative lists to
-describe mappings from names to exemplars.
-</para>
-
-<para>
-You can specify exemplars for the various kinds of nodes that need to be
-generated when an XML document is parsed:
-             
-<itemizedlist mark="bullet" spacing="compact">
-             <listitem>
-               <para><literal>~super_root_exemplar</literal>: This exemplar
-is used to create the super root. This special node is only created if the
-corresponding configuration option has been selected; it is the parent node of
-the root node which may be convenient if every working node must have a parent.</para>
-             </listitem>
-             <listitem>
-               <para><literal>~comment_exemplar</literal>: This exemplar is
-used when a comment node must be created. Note that such nodes are only created
-if the corresponding configuration option is "on".
-</para>
-             </listitem>
-             <listitem>
-               <para><literal>~default_pinstr_exemplar</literal>: If a node
-for a processing instruction must be created, and the instruction is not listed
-in the table passed by <literal>~pinstr_mapping</literal> or
-<literal>~pinstr_alist</literal>, this exemplar is used.
-Again the configuration option must be "on" in order to create such nodes at
-all. 
-</para>
-             </listitem>
-             <listitem>
-               <para><literal>~pinstr_mapping</literal> or
-<literal>~pinstr_alist</literal>: Map the target names of processing
-instructions to exemplars. These mappings are only used when nodes for
-processing instructions are created.</para>
-             </listitem>
-             <listitem>
-               <para><literal>~data_exemplar</literal>: The exemplar for
-ordinary data nodes.</para>
-             </listitem>
-             <listitem>
-               <para><literal>~default_element_exemplar</literal>: This
-exemplar is used if an element node must be created, but the element type
-cannot be found in the tables <literal>element_mapping</literal> or
-<literal>element_alist</literal>.</para>
-             </listitem>
-             <listitem>
-               <para><literal>~element_mapping</literal> or
-<literal>~element_alist</literal>: Map the element types to exemplars. These
-mappings are used to create element nodes.</para>
-             </listitem>
-           </itemizedlist>
-
-In most cases, you only want to create <literal>spec</literal> values to pass
-them to the parser functions found in <literal>Pxp_yacc</literal>. However, it
-might be useful to apply <literal>spec</literal> values directly.
-</para>
-
-<para>The following functions create various types of nodes by selecting the
-corresponding exemplar from the passed <literal>spec</literal> value, and by
-calling <literal>create_element</literal> or <literal>create_data</literal> on
-the exemplar.
-
-<programlisting><![CDATA[
-val create_data_node : 
-      'ext spec -> 
-      dtd -> 
-      (* data material: *) string -> 
-          'ext node
-
-val create_element_node : 
-      ?position:(string * int * int) ->
-      'ext spec -> 
-      dtd -> 
-      (* element type: *) string -> 
-      (* attributes: *) (string * string) list -> 
-          'ext node
-
-val create_super_root_node :
-      ?position:(string * int * int) ->
-      'ext spec -> 
-       dtd -> 
-           'ext node
-
-val create_comment_node :
-      ?position:(string * int * int) ->
-      'ext spec -> 
-      dtd -> 
-      (* comment text: *) string -> 
-          'ext node
-
-val create_pinstr_node :
-      ?position:(string * int * int) ->
-      'ext spec -> 
-      dtd -> 
-      proc_instruction -> 
-          'ext node
-]]></programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Examples</title>
-
-         <formalpara>
-           <title>Building trees.</title>
-
-           <para>Here is the piece of code that creates the tree of
-the figure <link linkend="node-term" endterm="node-term"></link>. The extension
-object and the DTD are beyond the scope of this example.
-
-<programlisting>
-let exemplar_ext = ... (* some extension *) in
-let dtd = ... (* some DTD *) in
-
-let element_exemplar = new element_impl exemplar_ext in
-let data_exemplar    = new data_impl    exemplar_ext in
-
-let a1 = element_exemplar # create_element dtd (T_element "a") ["att", "apple"]
-and b1 = element_exemplar # create_element dtd (T_element "b") []
-and c1 = element_exemplar # create_element dtd (T_element "c") []
-and a2 = element_exemplar # create_element dtd (T_element "a") ["att", "orange"]
-in
-
-let cherries = data_exemplar # create_data dtd "Cherries" in
-let orange   = data_exemplar # create_data dtd "An orange" in
-
-a1 # add_node b1;
-a1 # add_node c1;
-b1 # add_node a2;
-b1 # add_node cherries;
-a2 # add_node orange;
-</programlisting>
-
-Alternatively, the last block of statements could also be written as:
-
-<programlisting>
-a1 # set_nodes [b1; c1];
-b1 # set_nodes [a2; cherries];
-a2 # set_nodes [orange];
-</programlisting>
-
-The root of the tree is <literal>a1</literal>, i.e. it is true that
-
-<programlisting>
-x # root == a1
-</programlisting>
-
-for every x from { <literal>a1</literal>, <literal>a2</literal>,
-<literal>b1</literal>, <literal>c1</literal>, <literal>cherries</literal>,
-<literal>orange</literal> }.
-</para>
-         </formalpara>
-         <para>
-Furthermore, the following properties hold:
-
-<programlisting>
-  a1 # attribute "att" = Value "apple"
-& a2 # attribute "att" = Value "orange"
-
-& cherries # data = "Cherries"
-&   orange # data = "An orange"
-&       a1 # data = "CherriesAn orange"
-
-&       a1 # node_type = T_element "a"
-&       a2 # node_type = T_element "a"
-&       b1 # node_type = T_element "b"
-&       c1 # node_type = T_element "c"
-& cherries # node_type = T_data
-&   orange # node_type = T_data
-
-&       a1 # sub_nodes = [ b1; c1 ]
-&       a2 # sub_nodes = [ orange ]
-&       b1 # sub_nodes = [ a2; cherries ]
-&       c1 # sub_nodes = []
-& cherries # sub_nodes = []
-&   orange # sub_nodes = []
-
-&       a2 # parent == a1
-&       b1 # parent == b1
-&       c1 # parent == a1
-& cherries # parent == b1
-&   orange # parent == a2
-</programlisting>
-</para>
-         <formalpara>
-           <title>Searching nodes.</title>
-
-           <para>The following function searches all nodes of a tree 
-for which a certain condition holds:
-
-<programlisting>
-let rec search p t =
-  if p t then
-    t :: search_list p (t # sub_nodes)
-  else
-    search_list p (t # sub_nodes)
-
-and search_list p l =
-  match l with
-    []      -&gt; []
-  | t :: l' -&gt; (search p t) @ (search_list p l')
-;;
-</programlisting>
-</para>
-         </formalpara>
-
-         <para>For example, if you want to search all elements of a certain
-type <literal>et</literal>, the function <literal>search</literal> can be
-applied as follows:
-
-<programlisting>
-let search_element_type et t =
-  search (fun x -&gt; x # node_type = T_element et) t
-;;
-</programlisting>
-</para>
-
-         <formalpara>
-           <title>Getting attribute values.</title>
-
-           <para>Suppose we have the declaration:
-
-<programlisting><![CDATA[
-<!ATTLIST e a CDATA #REQUIRED
-            b CDATA #IMPLIED
-            c CDATA "12345">]]>
-</programlisting>
-
-In this case, every element <literal>e</literal> must have an attribute 
-<literal>a</literal>, otherwise the parser would indicate an error. If
-the O'Caml variable <literal>n</literal> holds the node of the tree 
-corresponding to the element, you can get the value of the attribute
-<literal>a</literal> by
-
-<programlisting>
-let value_of_a = n # required_string_attribute "a"
-</programlisting>
-
-which is more or less an abbreviation for 
-
-<programlisting><![CDATA[
-let value_of_a = 
-  match n # attribute "a" with
-    Value s -> s
-  | _       -> assert false]]>
-</programlisting>
-
-- as the attribute is required, the <literal>attribute</literal> method always
-returns a <literal>Value</literal>.
-</para>
-         </formalpara>
-         
-         <para>In contrast to this, the attribute <literal>b</literal> can be
-omitted. In this case, the method <literal>required_string_attribute</literal>
-works only if the attribute is there, and the method will fail if the attribute
-is missing. To get the value, you can apply the method
-<literal>optional_string_attribute</literal>:
-
-<programlisting>
-let value_of_b = n # optional_string_attribute "b"
-</programlisting>
-
-Now, <literal>value_of_b</literal> is of type <literal>string option</literal>,
-and <literal>None</literal> represents the omitted attribute. Alternatively, 
-you could also use <literal>attribute</literal>:
-
-<programlisting><![CDATA[
-let value_of_b = 
-  match n # attribute "b" with
-    Value s       -> Some s
-  | Implied_value -> None
-  | _             -> assert false]]>
-</programlisting>
-</para>
-
-         <para>The attribute <literal>c</literal> behaves much like
-<literal>a</literal>, because it has always a value. If the attribute is
-omitted, the default, here "12345", will be returned instead. Because of this,
-you can again use <literal>required_string_attribute</literal> to get the
-value.
-</para>
-
-         <para>The type <literal>CDATA</literal> is the most general string
-type. The types <literal>NMTOKEN</literal>, <literal>ID</literal>,
-<literal>IDREF</literal>, <literal>ENTITY</literal>, and all enumerators and
-notations are special forms of string types that restrict the possible
-values. From O'Caml, they behave like <literal>CDATA</literal>, i.e. you can
-use the methods <literal>required_string_attribute</literal> and
-<literal>optional_string_attribute</literal>, too.
-</para>
-
-         <para>In contrast to this, the types <literal>NMTOKENS</literal>,
-<literal>IDREFS</literal>, and <literal>ENTITIES</literal> mean lists of
-strings. Suppose we have the declaration:
-
-<programlisting><![CDATA[
-<!ATTLIST f d NMTOKENS #REQUIRED
-            e NMTOKENS #IMPLIED>]]>
-</programlisting>
-
-The type <literal>NMTOKENS</literal> stands for lists of space-separated
-tokens; for example the value <literal>"1 abc 23ef"</literal> means the list
-<literal>["1"; "abc"; "23ef"]</literal>. (Again, <literal>IDREFS</literal>
-and <literal>ENTITIES</literal> have more restricted values.) To get the
-value of attribute <literal>d</literal>, one can use
-
-<programlisting>
-let value_of_d = n # required_list_attribute "d"
-</programlisting>
-
-or
-
-<programlisting><![CDATA[
-let value_of_d = 
-  match n # attribute "d" with
-    Valuelist l -> l
-  | _           -> assert false]]>
-</programlisting>
-As <literal>d</literal> is required, the attribute cannot be omitted, and 
-the <literal>attribute</literal> method returns always a
-<literal>Valuelist</literal>. 
-</para>
-
-         <para>For optional attributes like <literal>e</literal>, apply
-
-<programlisting>
-let value_of_e = n # optional_list_attribute "e"
-</programlisting>
-
-or
-
-<programlisting><![CDATA[
-let value_of_e = 
-  match n # attribute "e" with
-    Valuelist l   -> l
-  | Implied_value -> []
-  | _             -> assert false]]>
-</programlisting>
-
-Here, the case that the attribute is missing counts like the empty list.
-</para>
-
-       </sect2>
-
-
-       <sect2>
-         <title>Iterators</title>
-
-         <para>There are also several iterators in Pxp_document; please see
-the mli file for details. You can find examples for them in the
-"simple_transformation" directory.
-
-<programlisting><![CDATA[
-val find : ?deeply:bool -> 
-           f:('ext node -> bool) -> 'ext node -> 'ext node
-
-val find_all : ?deeply:bool ->
-               f:('ext node -> bool) -> 'ext node -> 'ext node list
-
-val find_element : ?deeply:bool ->
-                   string -> 'ext node -> 'ext node
-
-val find_all_elements : ?deeply:bool ->
-                        string -> 'ext node -> 'ext node list
-
-exception Skip
-val map_tree :  pre:('exta node -> 'extb node) ->
-               ?post:('extb node -> 'extb node) ->
-               'exta node -> 
-                   'extb node
-
-
-val map_tree_sibl : 
-        pre: ('exta node option -> 'exta node -> 'exta node option -> 
-                  'extb node) ->
-       ?post:('extb node option -> 'extb node -> 'extb node option -> 
-                  'extb node) ->
-       'exta node -> 
-           'extb node
-
-val iter_tree : ?pre:('ext node -> unit) ->
-                ?post:('ext node -> unit) ->
-                'ext node -> 
-                    unit
-
-val iter_tree_sibl :
-       ?pre: ('ext node option -> 'ext node -> 'ext node option -> unit) ->
-       ?post:('ext node option -> 'ext node -> 'ext node option -> unit) ->
-       'ext node -> 
-           unit
-]]></programlisting>
-</para>
-       </sect2>
-
-      </sect1>
-
-<!-- ********************************************************************** -->
-
-      <sect1>
-       <title>The class type <literal>extension</literal></title>
-       <para>
-
-<programlisting>
-<![CDATA[
-class type [ 'node ] extension =
-  object ('self)
-    method clone : 'self
-      (* "clone" should return an exact deep copy of the object. *)
-    method node : 'node
-      (* "node" returns the corresponding node of this extension. This method
-       * intended to return exactly what previously has been set by "set_node".
-       *)
-    method set_node : 'node -> unit
-      (* "set_node" is invoked once the extension is associated to a new
-       * node object.
-       *)
-  end
-]]>
-</programlisting>
-
-This is the type of classes used for node extensions. For every node of the
-document tree, there is not only the <literal>node</literal> object, but also
-an <literal>extension</literal> object. The latter has minimal
-functionality; it has only the necessary methods to be attached to the node
-object containing the details of the node instance. The extension object is
-called extension because its purpose is extensibility.</para>
-
-       <para>For some reasons, it is impossible to derive the
-<literal>node</literal> classes (i.e. <literal>element_impl</literal> and
-<literal>data_impl</literal>) such that the subclasses can be extended by new
-new methods. But
-subclassing nodes is a great feature, because it allows the user to provide
-different classes for different types of nodes. The extension objects are a
-workaround that is as powerful as direct subclassing, the costs are
-some notation overhead.
-</para>
-
-<figure id="extension-general" float="1">
-<title>The structure of nodes and extensions</title>
-<graphic fileref="pic/extension_general" format="GIF">
-</graphic>
-</figure>
-
-       <para>The picture shows how the nodes and extensions are linked
-together. Every node has a reference to its extension, and every extension has
-a reference to its node. The methods <literal>extension</literal> and
-<literal>node</literal> follow these references; a typical phrase is 
-
-<programlisting>
-self # node # attribute "xy"
-</programlisting>
-
-to get the value of an attribute from a method defined in the extension object;
-or 
-
-<programlisting>
-self # node # iter
-  (fun n -&gt; n # extension # my_method ...)
-</programlisting>
-
-to iterate over the subnodes and to call <literal>my_method</literal> of the
-corresponding extension objects.
-</para>
-
-       <para>Note that extension objects do not have references to subnodes
-(or "subextensions") themselves; in order to get one of the children of an
-extension you must first go to the node object, then get the child node, and
-finally reach the extension that is logically the child of the extension you
-started with.</para>
-
-       <sect2>
-         <title>How to define an extension class</title>
-
-         <para>At minimum, you must define the methods
-<literal>clone</literal>, <literal>node</literal>, and
-<literal>set_node</literal> such that your class is compatible with the type
-<literal>extension</literal>. The method <literal>set_node</literal> is called
-during the initialization of the node, or after a node has been cloned; the
-node object invokes <literal>set_node</literal> on the extension object to tell
-it that this node is now the object the extension is linked to. The extension
-must return the node object passed as argument of <literal>set_node</literal>
-when the <literal>node</literal> method is called.</para>
-
-         <para>The <literal>clone</literal> method must return a copy of the
-extension object; at least the object itself must be duplicated, but if
-required, the copy should deeply duplicate all objects and values that are
-referred by the extension, too. Whether this is required, depends on the
-application; <literal>clone</literal> is invoked by the node object when one of
-its cloning methods is called.</para>
-
-         <para>A good starting point for an extension class:
-
-<programlisting>
-<![CDATA[class custom_extension =
-  object (self)
-
-    val mutable node = (None : custom_extension node option)
-
-    method clone = {< >} 
-
-    method node =
-      match node with
-          None ->
-            assert false
-        | Some n -> n
-
-    method set_node n =
-      node <- Some n
-
-  end
-]]>
-</programlisting>
-
-This class is compatible with <literal>extension</literal>. The purpose of
-defining such a class is, of course, adding further methods; and you can do it
-without restriction. 
-</para>
-
-         <para>Often, you want not only one extension class. In this case,
-it is the simplest way that all your classes (for one kind of document) have
-the same type (with respect to the interface; i.e. it does not matter if your
-classes differ in the defined private methods and instance variables, but
-public methods count). This approach avoids lots of coercions and problems with
-type incompatibilities. It is simple to implement:
-
-<programlisting>
-<![CDATA[class custom_extension =
-  object (self)
-    val mutable node = (None : custom_extension node option)
-
-    method clone = ...      (* see above *)
-    method node = ...       (* see above *)
-    method set_node n = ... (* see above *)
-
-    method virtual my_method1 : ...
-    method virtual my_method2 : ...
-    ... (* etc. *)
-  end
-
-class custom_extension_kind_A =
-  object (self)
-    inherit custom_extension
-
-    method my_method1 = ...
-    method my_method2 = ...
-  end
-
-class custom_extension_kind_B =
-  object (self)
-    inherit custom_extension
-
-    method my_method1 = ...
-    method my_method2 = ...
-  end
-]]>
-</programlisting>
-
-If a class does not need a method (e.g. because it does not make sense, or it
-would violate some important condition), it is possible to define the method
-and to always raise an exception when the method is invoked
-(e.g. <literal>assert false</literal>).
-</para>
-
-         <para>The latter is a strong recommendation: do not try to further
-specialize the types of extension objects. It is difficult, sometimes even
-impossible, and almost never worth-while.</para>
-       </sect2>
-
-       <sect2>
-         <title>How to bind extension classes to element types</title>
-
-         <para>Once you have defined your extension classes, you can bind them
-to element types. The simplest case is that you have only one class and that
-this class is to be always used. The parsing functions in the module
-<literal>Pxp_yacc</literal> take a <literal>spec</literal> argument which
-can be customized. If your single class has the name <literal>c</literal>,
-this argument should be 
-
-<programlisting>
-let spec =
-  make_spec_from_alist
-    ~data_exemplar:            (new data_impl c)
-    ~default_element_exemplar: (new element_impl c)
-    ~element_alist:            []
-    ()
-</programlisting>
-
-This means that data nodes will be created from the exemplar passed by
-~data_exemplar and that all element nodes will be made from the exemplar
-specified by ~default_element_exemplar. In ~element_alist, you can 
-pass that different exemplars are to be used for different element types; but
-this is an optional feature. If you do not need it, pass the empty list.
-</para>
-
-<para>
-Remember that an exemplar is a (node, extension) pair that serves as pattern
-when new nodes (and the corresponding extension objects) are added to the
-document tree. In this case, the exemplar contains <literal>c</literal> as
-extension, and when nodes are created, the exemplar is cloned, and cloning
-makes also a copy of <literal>c</literal> such that all nodes of the document
-tree will have a copy of <literal>c</literal> as extension.
-</para>
-
-         <para>The <literal>~element_alist</literal> argument can bind
-specific element types to specific exemplars; as exemplars may be instances of
-different classes it is effectively possible to bind element types to
-classes. For example, if the element type "p" is implemented by class "c_p",
-and "q" is realized by "c_q", you can pass the following value:
-
-<programlisting>
-let spec =
-  make_spec_from_alist
-    ~data_exemplar:            (new data_impl c)
-    ~default_element_exemplar: (new element_impl c)
-    ~element_alist:            
-      [ "p", new element_impl c_p;
-        "q", new element_impl c_q;
-      ]
-    ()
-</programlisting>
-
-The extension object <literal>c</literal> is still used for all data nodes and
-for all other element types.
-</para>
-
-       </sect2>
-
-      </sect1>
-
-<!-- ********************************************************************** -->
-
-      <sect1>
-       <title>Details of the mapping from XML text to the tree representation
-</title>
-
-       <sect2>
-         <title>The representation of character-free elements</title>
-
-         <para>If an element declaration does not allow the element to 
-contain character data, the following rules apply.</para>
-
-         <para>If the element must be empty, i.e. it is declared with the
-keyword <literal>EMPTY</literal>, the element instance must be effectively
-empty (it must not even contain whitespace characters). The parser guarantees
-that a declared <literal>EMPTY</literal> element does never contain a data
-node, even if the data node represents the empty string.</para>
-
-         <para>If the element declaration only permits other elements to occur
-within that element but not character data, it is still possible to insert
-whitespace characters between the subelements. The parser ignores these
-characters, too, and does not create data nodes for them.</para>
-
-         <formalpara>
-           <title>Example.</title>
-
-           <para>Consider the following element types:
-
-<programlisting><![CDATA[
-<!ELEMENT x ( #PCDATA | z )* >
-<!ELEMENT y ( z )* >
-<!ELEMENT z EMPTY>
-]]></programlisting>
-
-Only <literal>x</literal> may contain character data, the keyword
-<literal>#PCDATA</literal> indicates this. The other types are character-free. 
-</para>
-         </formalpara>
-
-         <para>The XML term
-
-<programlisting><![CDATA[
-<x><z/> <z/></x>
-]]></programlisting>
-
-will be internally represented by an element node for <literal>x</literal> 
-with three subnodes: the first <literal>z</literal> element, a data node
-containing the space character, and the second <literal>z</literal> element. 
-In contrast to this, the term
-
-<programlisting><![CDATA[
-<y><z/> <z/></y>
-]]></programlisting>
-
-is represented by an  element node for <literal>y</literal> with only
-<emphasis>two</emphasis> subnodes, the two <literal>z</literal> elements. There
-is no data node for the space character because spaces are ignored in the
-character-free element <literal>y</literal>.
-</para>
-
-       </sect2>
-
-       <sect2>
-         <title>The representation of character data</title>
-
-         <para>The XML specification allows all Unicode characters in XML
-texts. This parser can be configured such that UTF-8 is used to represent the
-characters internally; however, the default character encoding is
-ISO-8859-1. (Currently, no other encodings are possible for the internal string
-representation; the type <literal>Pxp_types.rep_encoding</literal> enumerates
-the possible encodings. Principially, the parser could use any encoding that is
-ASCII-compatible, but there are currently only lexical analyzers for UTF-8 and
-ISO-8859-1. It is currently impossible to use UTF-16 or UCS-4 as internal
-encodings (or other multibyte encodings which are not ASCII-compatible) unless
-major parts of the parser are rewritten - unlikely...)
-</para>
-
-<para>
-The internal encoding may be different from the external encoding (specified
-in the XML declaration <literal>&lt;?xml ... encoding="..."?&gt;</literal>); in
-this case the strings are automatically converted to the internal encoding.
-</para>
-
-<para>
-If the internal encoding is ISO-8859-1, it is possible that there are
-characters that cannot be represented. In this case, the parser ignores such
-characters and prints a warning (to the <literal>collect_warning</literal>
-object that must be passed when the parser is called).
-</para>
-
-         <para>The XML specification allows lines to be separated by single LF
-characters, by CR LF character sequences, or by single CR
-characters. Internally, these separators are always converted to single LF
-characters.</para>
-
-         <para>The parser guarantees that there are never two adjacent data
-nodes; if necessary, data material that would otherwise be represented by
-several nodes is collapsed into one node. Note that you can still create node
-trees with adjacent data nodes; however, the parser does not return such trees.
-</para>
-
-         <para>Note that CDATA sections are not represented specially; such
-sections are added to the current data material that being collected for the
-next data node.</para>
-       </sect2>
-
-
-       <sect2>
-         <title>The representation of entities within documents</title>
-
-         <para><emphasis>Entities are not represented within
-documents!</emphasis> If the parser finds an entity reference in the document
-content, the reference is immediately expanded, and the parser reads the
-expansion text instead of the reference.
-</para>
-       </sect2>
-
-       <sect2>
-         <title>The representation of attributes</title> <para>As attribute
-values are composed of Unicode characters, too, the same problems with the
-character encoding arise as for character material. Attribute values are
-converted to the internal encoding, too; and if there are characters that
-cannot be represented, these are dropped, and a warning is printed.</para>
-
-         <para>Attribute values are normalized before they are returned by
-methods like <literal>attribute</literal>. First, any remaining entity
-references are expanded; if necessary, expansion is performed recursively.
-Second, newline characters (any of LF, CR LF, or CR characters) are converted
-to single space characters. Note that especially the latter action is
-prescribed by the XML standard (but <literal>&#10;</literal> is not converted
-such that it is still possible to include line feeds into attributes).
-</para>
-       </sect2>
-
-       <sect2>
-         <title>The representation of processing instructions</title>
-<para>Processing instructions are parsed to some extent: The first word of the
-PI is called the target, and it is stored separated from the rest of the PI:
-
-<programlisting><![CDATA[
-<?target rest?>
-]]></programlisting>
-
-The exact location where a PI occurs is not represented (by default). The
-parser puts the PI into the object that represents the embracing construct (an
-element, a DTD, or the whole document); that means you can find out which PIs
-occur in a certain element, in the DTD, or in the whole document, but you
-cannot lookup the exact position within the construct.
-</para>
-
-         <para>If you require the exact location of PIs, it is possible to
-create extra nodes for them. This mode is controled by the option
-<literal>enable_pinstr_nodes</literal>. The additional nodes have the node type
-<literal>T_pinstr <replaceable>target</replaceable></literal>, and are created
-from special exemplars contained in the <literal>spec</literal> (see
-pxp_document.mli).</para>
-       </sect2>
-
-       <sect2>
-         <title>The representation of comments</title> 
-
-<para>Normally, comments are not represented; they are dropped by
-default. However, if you require them, it is possible to create
-<literal>T_comment</literal> nodes for them. This mode can be specified by the
-option <literal>enable_comment_nodes</literal>. Comment nodes are created from
-special exemplars contained in the <literal>spec</literal> (see
-pxp_document.mli). You can access the contents of comments through the 
-method <literal>comment</literal>.</para>
-       </sect2>
-
-       <sect2>
-         <title>The attributes <literal>xml:lang</literal> and
-<literal>xml:space</literal></title>
-
-         <para>These attributes are not supported specially; they are handled
-like any other attribute.</para>
-       </sect2>
-
-
-       <sect2>
-         <title>And what about namespaces?</title>
-         <para>Currently, there is no special support for namespaces.
-However, the parser allows it that the colon occurs in names such that it is
-possible to implement namespaces on top of the current API.</para>
-
-         <para>Some future release of PXP will support namespaces as built-in
-feature...</para>
-       </sect2>
-
-      </sect1>
-
-    </chapter>
-
-<!-- ********************************************************************** -->
-
-    <chapter>
-      <title>Configuring and calling the parser</title>
-
-<!--
-      <para>
-<emphasis>
-Sorry, this chapter has not yet been written. For an introduction into parser
-configuration, see the previous chapters. As a first approximation, the
-interface definition of Markup_yacc outlines what could go here.
-</emphasis>
-</para>
--->
-
-<!--
-      <para>
-<programlisting>&markup-yacc.mli;</programlisting>
-</para>
--->
-
-      <sect1>
-       <title>Overview</title>
-       <para>
-There are the following main functions invoking the parser (in Pxp_yacc):
-
-          <itemizedlist mark="bullet" spacing="compact">
-           <listitem>
-             <para><emphasis>parse_document_entity:</emphasis> You want to
-parse a complete and closed document consisting of a DTD and the document body;
-the body is validated against the DTD. This mode is interesting if you have a
-file
-
-<programlisting><![CDATA[
-<!DOCTYPE root ... [ ... ] > <root> ... </root>
-]]></programlisting>
-
-and you can accept any DTD that is included in the file (e.g. because the file
-is under your control).
-</para>
-           </listitem>
-           <listitem>
-             <para><emphasis>parse_wfdocument_entity:</emphasis> You want to
-parse a complete and closed document consisting of a DTD and the document body;
-but the body is not validated, only checked for well-formedness. This mode is
-preferred if validation costs too much time or if the DTD is missing.
-</para>
-           </listitem>
-           <listitem>
-             <para><emphasis>parse_dtd_entity:</emphasis> You want only to
-parse an entity (file) containing the external subset of a DTD. Sometimes it is
-interesting to read such a DTD, for example to compare it with the DTD included
-in a document, or to apply the next mode:
-</para>
-           </listitem>
-           <listitem>
-             <para><emphasis>parse_content_entity:</emphasis> You want only to
-parse an entity (file) containing a fragment of a document body; this fragment
-is validated against the DTD you pass to the function. Especially, the fragment
-must not have a <literal> &lt;!DOCTYPE&gt;</literal> clause, and must directly
-begin with an element.  The element is validated against the DTD.  This mode is
-interesting if you want to check documents against a fixed, immutable DTD.
-</para>
-           </listitem>
-           <listitem>
-             <para><emphasis>parse_wfcontent_entity:</emphasis> This function
-also parses a single element without DTD, but does not validate it.</para>
-           </listitem>
-           <listitem>
-             <para><emphasis>extract_dtd_from_document_entity:</emphasis> This
-function extracts the DTD from a closed document consisting of a DTD and a
-document body. Both the internal and the external subsets are extracted.</para>
-           </listitem>
-         </itemizedlist>
-</para>
-
-<para>
-In many cases, <literal>parse_document_entity</literal> is the preferred mode
-to parse a document in a validating way, and
-<literal>parse_wfdocument_entity</literal> is the mode of choice to parse a
-file while only checking for well-formedness.
-</para>
-
-<para>
-There are a number of variations of these modes. One important application of a
-parser is to check documents of an untrusted source against a fixed DTD. One
-solution is to not allow the <literal>&lt;!DOCTYPE&gt;</literal> clause in
-these documents, and treat the document like a fragment (using mode
-<emphasis>parse_content_entity</emphasis>). This is very simple, but
-inflexible; users of such a system cannot even define additional entities to
-abbreviate frequent phrases of their text.
-</para>
-
-<para>
-It may be necessary to have a more intelligent checker. For example, it is also
-possible to parse the document to check fully, i.e. with DTD, and to compare
-this DTD with the prescribed one. In order to fully parse the document, mode
-<emphasis>parse_document_entity</emphasis> is applied, and to get the DTD to
-compare with mode <emphasis>parse_dtd_entity</emphasis> can be used.
-</para>
-
-<para>
-There is another very important configurable aspect of the parser: the
-so-called resolver. The task of the resolver is to locate the contents of an
-(external) entity for a given entity name, and to make the contents accessible
-as a character stream. (Furthermore, it also normalizes the character set;
-but this is a detail we can ignore here.) Consider you have a file called
-<literal>"main.xml"</literal> containing 
-
-<programlisting><![CDATA[
-<!ENTITY % sub SYSTEM "sub/sub.xml">
-%sub;
-]]></programlisting>
-
-and a file stored in the subdirectory <literal>"sub"</literal> with name
-<literal>"sub.xml"</literal> containing
-
-<programlisting><![CDATA[
-<!ENTITY % subsub SYSTEM "subsub/subsub.xml">
-%subsub;
-]]></programlisting>
-
-and a file stored in the subdirectory <literal>"subsub"</literal> of
-<literal>"sub"</literal> with name <literal>"subsub.xml"</literal> (the
-contents of this file do not matter). Here, the resolver must track that
-the second entity <literal>subsub</literal> is located in the directory
-<literal>"sub/subsub"</literal>, i.e. the difficulty is to interpret the
-system (file) names of entities relative to the entities containing them,
-even if the entities are deeply nested.
-</para>
-
-<para>
-There is not a fixed resolver already doing everything right - resolving entity
-names is a task that highly depends on the environment. The XML specification
-only demands that <literal>SYSTEM</literal> entities are interpreted like URLs
-(which is not very precise, as there are lots of URL schemes in use), hoping
-that this helps overcoming the local peculiarities of the environment; the idea
-is that if you do not know your environment you can refer to other entities by
-denoting URLs for them. I think that this interpretation of
-<literal>SYSTEM</literal> names may have some applications in the internet, but
-it is not the first choice in general. Because of this, the resolver is a
-separate module of the parser that can be exchanged by another one if
-necessary; more precisely, the parser already defines several resolvers.
-</para>
-
-<para>
-The following resolvers do already exist:
-
-          <itemizedlist mark="bullet" spacing="compact">
-           <listitem>
-             <para>Resolvers reading from arbitrary input channels. These
-can be configured such that a certain ID is associated with the channel; in
-this case inner references to external entities can be resolved. There is also
-a special resolver that interprets SYSTEM IDs as URLs; this resolver can
-process relative SYSTEM names and determine the corresponding absolute URL.
-</para>
-           </listitem>
-           <listitem>
-             <para>A resolver that reads always from a given O'Caml
-string. This resolver is not able to resolve further names unless the string is
-not associated with any name, i.e. if the document contained in the string
-refers to an external entity, this reference cannot be followed in this
-case.</para>
-           </listitem>
-           <listitem>
-             <para>A resolver for file names. The <literal>SYSTEM</literal>
-name is interpreted as file URL with the slash "/" as separator for
-directories. - This resolver is derived from the generic URL resolver.</para>
-           </listitem>
-         </itemizedlist>
-
-The interface a resolver must have is documented, so it is possible to write
-your own resolver. For example, you could connect the parser with an HTTP
-client, and resolve URLs of the HTTP namespace. The resolver classes support
-that several independent resolvers are combined to one more powerful resolver;
-thus it is possible to combine a self-written resolver with the already
-existing resolvers.
-</para>
-
-<para>
-Note that the existing resolvers only interpret <literal>SYSTEM</literal>
-names, not <literal>PUBLIC</literal> names. If it helps you, it is possible to
-define resolvers for <literal>PUBLIC</literal> names, too; for example, such a
-resolver could look up the public name in a hash table, and map it to a system
-name which is passed over to the existing resolver for system names. It is
-relatively simple to provide such a resolver.
-</para>
-
-
-      </sect1>
-
-      <sect1>
-       <title>Resolvers and sources</title>
-       
-       <sect2>
-         <title>Using the built-in resolvers (called sources)</title>
-
-         <para>The type <literal>source</literal> enumerates the two
-possibilities where the document to parse comes from.
-
-<programlisting>
-type source =
-    Entity of ((dtd -&gt; Pxp_entity.entity) * Pxp_reader.resolver)
-  | ExtID of (ext_id * Pxp_reader.resolver)
-</programlisting>
-
-You normally need not to worry about this type as there are convenience
-functions that create <literal>source</literal> values:
-
-
-            <itemizedlist mark="bullet" spacing="compact">
-             <listitem>
-               <para><literal>from_file s</literal>: The document is read from
-file <literal>s</literal>; you may specify absolute or relative path names.
-The file name must be encoded as UTF-8 string.
-</para>
-
-<para>There is an optional argument <literal>~system_encoding</literal>
-specifying the character encoding which is used for the names of the file
-system. For example, if this encoding is ISO-8859-1 and <literal>s</literal> is
-also a ISO-8859-1 string, you can form the source:
-
-<programlisting><![CDATA[
-let s_utf8  =  recode_string ~in_enc:`Enc_iso88591 ~out_enc:`Enc_utf8 s in
-from_file ~system_encoding:`Enc_iso88591 s_utf8
-]]></programlisting>
-</para>
-
-<para>
-This <literal>source</literal> has the advantage that
-it is able to resolve inner external entities; i.e. if your document includes
-data from another file (using the <literal>SYSTEM</literal> attribute), this
-mode will find that file. However, this mode cannot resolve
-<literal>PUBLIC</literal> identifiers nor <literal>SYSTEM</literal> identifiers
-other than "file:".
-</para>
-             </listitem>
-             <listitem>
-               <para><literal>from_channel ch</literal>: The document is read
-from the channel <literal>ch</literal>. In general, this source also supports
-file URLs found in the document; however, by default only absolute URLs are
-understood. It is possible to associate an ID with the channel such that the
-resolver knows how to interpret relative URLs:
-
-<programlisting>
-from_channel ~id:(System "file:///dir/dir1/") ch
-</programlisting>
-
-There is also the ~system_encoding argument specifying how file names are
-encoded. - The example from above can also be written (but it is no
-longer possible to interpret relative URLs because there is no ~id argument,
-and computing this argument is relatively complicated because it must
-be a valid URL):
-
-<programlisting>
-let ch = open_in s in
-let src = from_channel ~system_encoding:`Enc_iso88591 ch in
-...;
-close_in ch
-</programlisting>
-</para>
-             </listitem>
-             <listitem>
-               <para><literal>from_string s</literal>: The string
-<literal>s</literal> is the document to parse. This mode is not able to
-interpret file names of <literal>SYSTEM</literal> clauses, nor it can look up
-<literal>PUBLIC</literal> identifiers. </para> 
-
-               <para>Normally, the encoding of the string is detected as usual
-by analyzing the XML declaration, if any. However, it is also possible to
-specify the encoding directly:
-
-<programlisting>
-let src = from_string ~fixenc:`ISO-8859-2 s
-</programlisting>
-</para>
-             </listitem>
-             <listitem>
-               <para><literal>ExtID (id, r)</literal>: The document to parse
-is denoted by the identifier <literal>id</literal> (either a
-<literal>SYSTEM</literal> or <literal>PUBLIC</literal> clause), and this
-identifier is interpreted by the resolver <literal>r</literal>. Use this mode
-if you have written your own resolver.</para>
-               <para>Which character sets are possible depends on the passed
-resolver <literal>r</literal>.</para>
-             </listitem>
-             <listitem>
-               <para><literal>Entity (get_entity, r)</literal>: The document
-to parse is returned by the function invocation <literal>get_entity
-dtd</literal>, where <literal>dtd</literal> is the DTD object to use (it may be
-empty). Inner external references occuring in this entity are resolved using
-the resolver <literal>r</literal>.</para>
-               <para>Which character sets are possible depends on the passed
-resolver <literal>r</literal>.</para>
-             </listitem>
-           </itemizedlist></para>
-       </sect2>
-
-
-       <sect2>
-         <title>The resolver API</title>
-
-         <para>A resolver is an object that can be opened like a file, but you
-do not pass the file name to the resolver, but the XML identifier of the entity
-to read from (either a <literal>SYSTEM</literal> or <literal>PUBLIC</literal>
-clause). When opened, the resolver must return the
-<literal>Lexing.lexbuf</literal> that reads the characters.  The resolver can
-be closed, and it can be cloned. Furthermore, it is possible to tell the
-resolver which character set it should assume. - The following from Pxp_reader:
-
-<programlisting><![CDATA[
-exception Not_competent
-exception Not_resolvable of exn
-
-class type resolver =
-  object
-    method init_rep_encoding : rep_encoding -> unit
-    method init_warner : collect_warnings -> unit
-    method rep_encoding : rep_encoding
-    method open_in : ext_id -> Lexing.lexbuf
-    method close_in : unit
-    method change_encoding : string -> unit
-    method clone : resolver
-    method close_all : unit
-  end
-]]></programlisting>
-
-The resolver object must work as follows:</para>
-
-<para>
-            <itemizedlist mark="bullet" spacing="compact">
-             <listitem>
-               <para>When the parser is called, it tells the resolver the
-warner object and the internal encoding by invoking
-<literal>init_warner</literal> and <literal>init_rep_encoding</literal>. The
-resolver should store these values. The method <literal>rep_encoding</literal>
-should return the internal encoding.
-</para>
-             </listitem>
-             <listitem>
-               <para>If the parser wants to read from the resolver, it invokes
-the method <literal>open_in</literal>. Either the resolver succeeds, in which
-case the <literal>Lexing.lexbuf</literal> reading from the file or stream must
-be returned, or opening fails. In the latter case the method implementation
-should raise an exception (see below).</para>
-             </listitem>
-             <listitem>
-               <para>If the parser finishes reading, it calls the
-<literal>close_in</literal> method.</para>
-             </listitem>
-             <listitem>
-               <para>If the parser finds a reference to another external
-entity in the input stream, it calls <literal>clone</literal> to get a second
-resolver which must be initially closed (not yet connected with an input
-stream).  The parser then invokes <literal>open_in</literal> and the other
-methods as described.</para>
-             </listitem>
-             <listitem>
-               <para>If you already know the character set of the input
-stream, you should recode it to the internal encoding, and define the method
-<literal>change_encoding</literal> as an empty method.</para>
-             </listitem>
-             <listitem>
-               <para>If you want to support multiple external character sets,
-the object must follow a much more complicated protocol. Directly after
-<literal>open_in</literal> has been called, the resolver must return a lexical
-buffer that only reads one byte at a time. This is only possible if you create
-the lexical buffer with <literal>Lexing.from_function</literal>; the function
-must then always return 1 if the EOF is not yet reached, and 0 if EOF is
-reached. If the parser has read the first line of the document, it will invoke
-<literal>change_encoding</literal> to tell the resolver which character set to
-assume. From this moment, the object can return more than one byte at once. The
-argument of <literal>change_encoding</literal> is either the parameter of the
-"encoding" attribute of the XML declaration, or the empty string if there is
-not any XML declaration or if the declaration does not contain an encoding
-attribute. </para>
-
-               <para>At the beginning the resolver must only return one
-character every time something is read from the lexical buffer. The reason for
-this is that you otherwise would not exactly know at which position in the
-input stream the character set changes.</para>
-
-               <para>If you want automatic recognition of the character set,
-it is up to the resolver object to implement this.</para>
-             </listitem>
-
-             <listitem><para>If an error occurs, the parser calls the method
-<literal>close_all</literal> for the top-level resolver; this method should
-close itself (if not already done) and all clones.</para>
-             </listitem>
-           </itemizedlist>
-</para>
-         <formalpara><title>Exceptions</title>
-           <para>
-It is possible to chain resolvers such that when the first resolver is not able
-to open the entity, the other resolvers of the chain are tried in turn. The
-method <literal>open_in</literal> should raise the exception
-<literal>Not_competent</literal> to indicate that the next resolver should try
-to open the entity. If the resolver is able to handle the ID, but some other
-error occurs, the exception <literal>Not_resolvable</literal> should be raised
-to force that the chain breaks.
-         </para>
-         </formalpara>
-
-       <para>Example: How to define a resolver that is equivalent to
-from_string: ...</para>
-
-       </sect2>
-       
-       <sect2>
-         <title>Predefined resolver components</title>
-         <para>
-There are some classes in Pxp_reader that define common resolver behaviour.
-
-<programlisting><![CDATA[
-class resolve_read_this_channel : 
-    ?id:ext_id -> 
-    ?fixenc:encoding -> 
-    ?auto_close:bool -> 
-    in_channel -> 
-        resolver
-]]></programlisting>
-
-Reads from the passed channel (it may be even a pipe). If the
-<literal>~id</literal> argument is passed to the object, the created resolver
-accepts only this ID. Otherwise all IDs are accepted.  - Once the resolver has
-been cloned, it does not accept any ID. This means that this resolver cannot
-handle inner references to external entities. Note that you can combine this
-resolver with another resolver that can handle inner references (such as
-resolve_as_file); see class 'combine' below.  - If you pass the
-<literal>~fixenc</literal> argument, the encoding of the channel is set to the
-passed value, regardless of any auto-recognition or any XML declaration. - If
-<literal>~auto_close = true</literal> (which is the default), the channel is
-closed after use. If <literal>~auto_close = false</literal>, the channel is
-left open.
- </para>
-
-         <para>
-<programlisting><![CDATA[
-class resolve_read_any_channel : 
-    ?auto_close:bool -> 
-    channel_of_id:(ext_id -> (in_channel * encoding option)) -> 
-        resolver
-]]></programlisting>
-
-This resolver calls the function <literal>~channel_of_id</literal> to open a
-new channel for the passed <literal>ext_id</literal>. This function must either
-return the channel and the encoding, or it must fail with Not_competent.  The
-function must return <literal>None</literal> as encoding if the default
-mechanism to recognize the encoding should be used. It must return
-<literal>Some e</literal> if it is already known that the encoding of the
-channel is <literal>e</literal>.  If <literal>~auto_close = true</literal>
-(which is the default), the channel is closed after use. If
-<literal>~auto_close = false</literal>, the channel is left open.
-</para>
-
-         <para>
-<programlisting><![CDATA[
-class resolve_read_url_channel :
-    ?base_url:Neturl.url ->
-    ?auto_close:bool -> 
-    url_of_id:(ext_id -> Neturl.url) -> 
-    channel_of_url:(Neturl.url -> (in_channel * encoding option)) -> 
-        resolver
-]]></programlisting>
-
-When this resolver gets an ID to read from, it calls the function
-<literal>~url_of_id</literal> to get the corresponding URL. This URL may be a
-relative URL; however, a URL scheme must be used which contains a path.  The
-resolver converts the URL to an absolute URL if necessary.  The second
-function, <literal>~channel_of_url</literal>, is fed with the absolute URL as
-input. This function opens the resource to read from, and returns the channel
-and the encoding of the resource.
-</para>
-<para>
-Both functions, <literal>~url_of_id</literal> and
-<literal>~channel_of_url</literal>, can raise Not_competent to indicate that
-the object is not able to read from the specified resource. However, there is a
-difference: A Not_competent from <literal>~url_of_id</literal> is left as it
-is, but a Not_competent from <literal>~channel_of_url</literal> is converted to
-Not_resolvable. So only <literal>~url_of_id</literal> decides which URLs are
-accepted by the resolver and which not.
-</para>
-<para>
-The function <literal>~channel_of_url</literal> must return
-<literal>None</literal> as encoding if the default mechanism to recognize the
-encoding should be used. It must return <literal>Some e</literal> if it is
-already known that the encoding of the channel is <literal>e</literal>.
-</para>
-<para>
-If <literal>~auto_close = true</literal> (which is the default), the channel is
-closed after use. If <literal>~auto_close = false</literal>, the channel is
-left open.
-</para>
-<para>
-Objects of this class contain a base URL relative to which relative URLs are
-interpreted. When creating a new object, you can specify the base URL by
-passing it as <literal>~base_url</literal> argument. When an existing object is
-cloned, the base URL of the clone is the URL of the original object. - Note
-that the term "base URL" has a strict definition in RFC 1808.
-</para>
-
-         <para>
-<programlisting><![CDATA[
-class resolve_read_this_string : 
-    ?id:ext_id -> 
-    ?fixenc:encoding -> 
-    string -> 
-        resolver
-]]></programlisting>
-
-Reads from the passed string. If the <literal>~id</literal> argument is passed
-to the object, the created resolver accepts only this ID. Otherwise all IDs are
-accepted. - Once the resolver has been cloned, it does not accept any ID. This
-means that this resolver cannot handle inner references to external
-entities. Note that you can combine this resolver with another resolver that
-can handle inner references (such as resolve_as_file); see class 'combine'
-below. - If you pass the <literal>~fixenc</literal> argument, the encoding of
-the string is set to the passed value, regardless of any auto-recognition or
-any XML declaration.
-</para>
-
-         <para>
-<programlisting><![CDATA[
-class resolve_read_any_string : 
-    string_of_id:(ext_id -> (string * encoding option)) -> 
-        resolver
-]]></programlisting>
-
-This resolver calls the function <literal>~string_of_id</literal> to get the
-string for the passed <literal>ext_id</literal>. This function must either
-return the string and the encoding, or it must fail with Not_competent.  The
-function must return <literal>None</literal> as encoding if the default
-mechanism to recognize the encoding should be used. It must return
-<literal>Some e</literal> if it is already known that the encoding of the
-string is <literal>e</literal>.
-</para>
-
-         <para>
-<programlisting><![CDATA[
-class resolve_as_file :
-    ?file_prefix:[ `Not_recognized | `Allowed | `Required ] ->
-    ?host_prefix:[ `Not_recognized | `Allowed | `Required ] ->
-    ?system_encoding:encoding ->
-    ?url_of_id:(ext_id -> Neturl.url) -> 
-    ?channel_of_url: (Neturl.url -> (in_channel * encoding option)) ->
-    unit -> 
-        resolver
-]]></programlisting>
-Reads from the local file system. Every file name is interpreted as
-file name of the local file system, and the referred file is read.
-</para>
-<para>
-The full form of a file URL is: file://host/path, where
-'host' specifies the host system where the file identified 'path'
-resides. host = "" or host = "localhost" are accepted; other values
-will raise Not_competent. The standard for file URLs is 
-defined in RFC 1738.
-</para>
-<para>
-Option <literal>~file_prefix</literal>: Specifies how the "file:" prefix of
-file names is handled:
-            <itemizedlist mark="bullet" spacing="compact">
-             <listitem>
-               <para><literal>`Not_recognized:</literal>The prefix is not
-recognized.</para>
-             </listitem>
-             <listitem>
-               <para><literal>`Allowed:</literal> The prefix is allowed but
-not required (the default).</para>
-             </listitem>
-             <listitem>
-               <para><literal>`Required:</literal> The prefix is
-required.</para>
-             </listitem>
-           </itemizedlist>
-</para>
-<para>
-Option <literal>~host_prefix:</literal> Specifies how the "//host" phrase of
-file names is handled:
-            <itemizedlist mark="bullet" spacing="compact">
-             <listitem>
-               <para><literal>`Not_recognized:</literal>The prefix is not
-recognized.</para>
-             </listitem>
-             <listitem>
-               <para><literal>`Allowed:</literal> The prefix is allowed but
-not required (the default).</para>
-             </listitem>
-             <listitem>
-               <para><literal>`Required:</literal> The prefix is
-required.</para>
-             </listitem>
-           </itemizedlist>
-</para>
-<para>
-Option <literal>~system_encoding:</literal> Specifies the encoding of file
-names of the local file system. Default: UTF-8.
-</para>
-<para>
-Options <literal>~url_of_id</literal>, <literal>~channel_of_url</literal>: Not
-for the casual user!
-</para>
-
-         <para>
-<programlisting><![CDATA[
-class combine : 
-    ?prefer:resolver -> 
-    resolver list -> 
-        resolver
-]]></programlisting>
-
-Combines several resolver objects. If a concrete entity with an
-<literal>ext_id</literal> is to be opened, the combined resolver tries the
-contained resolvers in turn until a resolver accepts opening the entity
-(i.e. it does not raise Not_competent on open_in).
-</para>
-<para>
-Clones: If the 'clone' method is invoked before 'open_in', all contained
-resolvers are cloned separately and again combined. If the 'clone' method is 
-invoked after 'open_in' (i.e. while the resolver is open), additionally the
-clone of the active resolver is flagged as being preferred, i.e. it is tried
-first. 
-</para>
-
-       </sect2>
-      </sect1>
-
-      <sect1>
-       <title>The DTD classes</title> <para><emphasis>Sorry, not yet
-written. Perhaps the interface definition of Pxp_dtd expresses the same:
-</emphasis></para>
-       <para>
-<programlisting>&markup-dtd1.mli;&markup-dtd2.mli;</programlisting>
-</para>
-      </sect1>
-
-      <sect1>
-       <title>Invoking the parser</title>
-
-       <para>Here a description of Pxp_yacc.</para>
-
-       <sect2>
-         <title>Defaults</title>
-         <para>The following defaults are available:
-
-<programlisting>
-val default_config : config
-val default_extension : ('a node extension) as 'a
-val default_spec : ('a node extension as 'a) spec
-</programlisting>
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Parsing functions</title>
-         <para>In the following, the term "closed document" refers to
-an XML structure like
-
-<programlisting>
-&lt;!DOCTYPE ... [ <replaceable>declarations</replaceable> ] &gt;
-&lt;<replaceable>root</replaceable>&gt;
-...
-&lt;/<replaceable>root</replaceable>&gt;
-</programlisting>
-
-The term "fragment" refers to an XML structure like
-
-<programlisting>
-&lt;<replaceable>root</replaceable>&gt;
-...
-&lt;/<replaceable>root</replaceable>&gt;
-</programlisting>
-
-i.e. only to one isolated element instance.
-</para>
-
-         <para>
-<programlisting><![CDATA[
-val parse_dtd_entity : config -> source -> dtd
-]]></programlisting>
-
-Parses the declarations which are contained in the entity, and returns them as
-<literal>dtd</literal> object.
-</para>
-
-         <para>
-<programlisting><![CDATA[
-val extract_dtd_from_document_entity : config -> source -> dtd
-]]></programlisting>
-
-Extracts the DTD from a closed document. Both the internal and the external
-subsets are extracted and combined to one <literal>dtd</literal> object. This
-function does not parse the whole document, but only the parts that are
-necessary to extract the DTD.
-</para>
-
-         <para>
-<programlisting><![CDATA[
-val parse_document_entity : 
-    ?transform_dtd:(dtd -> dtd) ->
-    ?id_index:('ext index) ->
-    config -> 
-    source -> 
-    'ext spec -> 
-        'ext document
-]]></programlisting>
-
-Parses a closed document and validates it against the DTD that is contained in
-the document (internal and external subsets). The option
-<literal>~transform_dtd</literal> can be used to transform the DTD in the
-document, and to use the transformed DTD for validation. If
-<literal>~id_index</literal> is specified, an index of all ID attributes is
-created.
-</para>
-
-         <para>
-<programlisting><![CDATA[
-val parse_wfdocument_entity : 
-    config -> 
-    source -> 
-    'ext spec -> 
-        'ext document
-]]></programlisting>
-
-Parses a closed document, but checks it only on well-formedness.
-</para>
-
-         <para>
-<programlisting><![CDATA[
-val parse_content_entity  : 
-    ?id_index:('ext index) ->
-    config ->  
-    source -> 
-    dtd -> 
-    'ext spec -> 
-        'ext node
-]]></programlisting>
-
-Parses a fragment, and validates the element.
-</para>
-
-         <para>
-<programlisting><![CDATA[
-val parse_wfcontent_entity : 
-    config -> 
-    source -> 
-    'ext spec -> 
-        'ext node
-]]></programlisting>
-
-Parses a fragment, but checks it only on well-formedness.
-</para>
-       </sect2>
-
-       <sect2>
-         <title>Configuration options</title>
-         <para>
-
-<programlisting><![CDATA[
-type config =
-    { warner : collect_warnings;
-      errors_with_line_numbers : bool;
-      enable_pinstr_nodes : bool;
-      enable_super_root_node : bool;
-      enable_comment_nodes : bool;
-      encoding : rep_encoding;
-      recognize_standalone_declaration : bool;
-      store_element_positions : bool;
-      idref_pass : bool;
-      validate_by_dfa : bool;
-      accept_only_deterministic_models : bool;
-      ...
-    }
-]]></programlisting>
-
-<itemizedlist mark="bullet" spacing="compact">
-             <listitem><para><literal>warner:</literal>The parser prints
-warnings by invoking the method <literal>warn</literal> for this warner
-object. (Default: all warnings are dropped)</para>
-             </listitem>
-             <listitem><para><literal>errors_with_line_numbers:</literal>If
-true, errors contain line numbers; if false, errors contain only byte
-positions. The latter mode is faster. (Default: true)</para>
-             </listitem>
-             <listitem><para><literal>enable_pinstr_nodes:</literal>If true,
-the parser creates extra nodes for processing instructions. If false,
-processing instructions are simply added to the element or document surrounding
-the instructions. (Default: false)</para>
-             </listitem>
-             <listitem><para><literal>enable_super_root_node:</literal>If
-true, the parser creates an extra node which is the parent of the root of the
-document tree. This node is called super root; it is an element with type
-<literal>T_super_root</literal>. - If there are processing instructions outside
-the root element and outside the DTD, they are added to the super root instead
-of the document. - If false, the super root node is not created. (Default:
-false)</para>
-             </listitem>
-             <listitem><para><literal>enable_comment_nodes:</literal>If true,
-the parser creates nodes for comments with type <literal>T_comment</literal>;
-if false, such nodes are not created. (Default: false)</para>
-             </listitem>
-             <listitem><para><literal>encoding:</literal>Specifies the
-internal encoding of the parser. Most strings are then represented according to
-this encoding; however there are some exceptions (especially
-<literal>ext_id</literal> values which are always UTF-8 encoded).
-(Default: `Enc_iso88591)</para>
-             </listitem>
-             <listitem><para><literal>
-recognize_standalone_declaration:</literal> If true and if the parser is
-validating, the <literal>standalone="yes"</literal> declaration forces that it
-is checked whether the document is a standalone document. - If false, or if the
-parser is in well-formedness mode, such declarations are ignored.
-(Default: true)
-</para>
-             </listitem>
-             <listitem><para><literal>store_element_positions:</literal> If
-true, for every non-data node the source position is stored. If false, the
-position information is lost. If available, you can get the positions of nodes
-by invoking the <literal>position</literal> method.
-(Default: true)</para>
-             </listitem>
-             <listitem><para><literal>idref_pass:</literal>If true and if
-there is an ID index, the parser checks whether every IDREF or IDREFS attribute
-refer to an existing node; this requires that the parser traverses the whole
-doument tree. If false, this check is left out. (Default: false)</para>
-             </listitem>
-             <listitem><para><literal>validate_by_dfa:</literal>If true and if
-the content model for an element type is deterministic, a deterministic finite
-automaton is used to validate whether the element contents match the content
-model of the type. If false, or if a DFA is not available, a backtracking
-algorithm is used for validation. (Default: true)
-</para>
-             </listitem>
-             <listitem><para><literal>
-accept_only_deterministic_models:</literal> If true, only deterministic content
-models are accepted; if false, any syntactically correct content models can be
-processed. (Default: true)</para>
-             </listitem>
-           </itemizedlist></para>
-       </sect2>
-
-       <sect2>
-         <title>Which configuration should I use?</title>
-         <para>First, I recommend to vary the default configuration instead of
-creating a new configuration record. For instance, to set
-<literal>idref_pass</literal> to <literal>true</literal>, change the default
-as in:
-<programlisting>
-let config = { default_config with idref_pass = true }
-</programlisting>
-The background is that I can add more options to the record in future versions
-of the parser without breaking your programs.</para>
-
-         <formalpara>
-           <title>Do I need extra nodes for processing instructions?</title>
-<para>By default, such nodes are not created. This does not mean that the
-processing instructions are lost; however, you cannot find out the exact
-location where they occur. For example, the following XML text
-
-<programlisting><![CDATA[
-<x><?pi1?><y/><?pi2?></x> 
-]]></programlisting> 
-
-will normally create one element node for <literal>x</literal> containing
-<emphasis>one</emphasis> subnode for <literal>y</literal>. The processing
-instructions are attached to <literal>x</literal> in a separate hash table; you
-can access them using <literal>x # pinstr "pi1"</literal> and <literal>x #
-pinstr "pi2"</literal>, respectively. The information is lost where the
-instructions occur within <literal>x</literal>.
-</para>
-         </formalpara>
-
-           <para>If the option <literal>enable_pinstr_nodes</literal> is
-turned on, the parser creates extra nodes <literal>pi1</literal> and
-<literal>pi2</literal> such that the subnodes of <literal>x</literal> are now: 
-
-<programlisting><![CDATA[
-x # sub_nodes = [ pi1; y; pi2 ]
-]]></programlisting>
-
-The extra nodes contain the processing instructions in the usual way, i.e. you
-can access them using <literal>pi1 # pinstr "pi1"</literal> and <literal>pi2 #
-pinstr "pi2"</literal>, respectively.
-</para>
-
-         <para>Note that you will need an exemplar for the PI nodes (see
-<literal>make_spec_from_alist</literal>).</para> 
-
-         <formalpara>
-           <title>Do I need a super root node?</title>
-           <para>By default, there is no super root node. The
-<literal>document</literal> object refers directly to the node representing the
-root element of the document, i.e.
-
-<programlisting><![CDATA[
-doc # root = r
-]]></programlisting>
-
-if <literal>r</literal> is the root node. This is sometimes inconvenient: (1)
-Some algorithms become simpler if every node has a parent, even the root
-node. (2) Some standards such as XPath call the "root node" the node whose
-child represents the root of the document. (3) The super root node can serve
-as a container for processing instructions outside the root element. Because of
-these reasons, it is possible to create an extra super root node, whose child
-is the root node:
-
-<programlisting><![CDATA[
-doc # root = sr         &&
-sr # sub_nodes = [ r ]
-]]></programlisting>
-
-When extra nodes are also created for processing instructions, these nodes can
-be added to the super root node if they occur outside the root element (reason
-(3)), and the order reflects the order in the source text.</para>
-         </formalpara>
-
-         <para>Note that you will need an exemplar for the super root node
-(see <literal>make_spec_from_alist</literal>).</para>
-
-         <formalpara>
-           <title>What is the effect of the UTF-8 encoding?</title>
-           <para>By default, the parser represents strings (with few
-exceptions) as ISO-8859-1 strings. These are well-known, and there are tools
-and fonts for this encoding.</para>
-         </formalpara>
-         <para>However, internationalization may require that you switch over
-to UTF-8 encoding. In most environments, the immediate effect will be that you
-cannot read strings with character codes >= 160 any longer; your terminal will
-only show funny glyph combinations. It is strongly recommended to install
-Unicode fonts (<ulink URL="http://czyborra.com/unifont/">GNU Unifont</ulink>, 
-<ulink URL="http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz">
-Markus Kuhn's fonts</ulink>) and <ulink
-URL="http://myweb.clark.net/pub/dickey/xterm/xterm.html">terminal emulators
-that can handle UTF-8 byte sequences</ulink>. Furthermore, a Unicode editor may
-be helpful (such as <ulink
-URL="ftp://metalab.unc.edu/pub/Linux/apps/editors/X/">Yudit</ulink>). There are
-also <ulink URL="http://www.cl.cam.ac.uk/~mgk25/unicode.html">FAQ</ulink> by
-Markus Kuhn.
-</para>
-         <para>By setting <literal>encoding</literal> to
-<literal>`Enc_utf8</literal> all strings originating from the parsed XML
-document are represented as UTF-8 strings. This includes not only character
-data and attribute values but also element names, attribute names and so on, as
-it is possible to use any Unicode letter to form such names.  Strictly
-speaking, PXP is only XML-compliant if the UTF-8 mode is used; otherwise it
-will have difficulties when validating documents containing
-non-ISO-8859-1-names.
-</para>
-
-         <para>This mode does not have any impact on the external
-representation of documents. The character set assumed when reading a document
-is set in the XML declaration, and character set when writing a document must
-be passed to the <literal>write</literal> method.
-</para>
-
-         <formalpara>
-           <title>How do I check that nodes exist which are referred by IDREF attributes?</title>
-           <para>First, you must create an index of all occurring ID
-attributes:
-
-<programlisting><![CDATA[
-let index = new hash_index
-]]></programlisting>
-
-This index must be passed to the parsing function:
-
-<programlisting><![CDATA[
-parse_document_entity
-  ~id_index:(index :> index)
-  config source spec
-]]></programlisting>
-
-Next, you must turn on the <literal>idref_pass</literal> mode:
-
-<programlisting><![CDATA[
-let config = { default_config with idref_pass = true }
-]]></programlisting>
-
-Note that now the whole document tree will be traversed, and every node will be
-checked for IDREF and IDREFS attributes. If the tree is big, this may take some
-time.
-</para>
-         </formalpara>
-
-         <formalpara>
-           <title>What are deterministic content models?</title>
-           <para>These type of models can speed up the validation checks;
-furthermore they ensure SGML-compatibility. In particular, a content model is
-deterministic if the parser can determine the actually used alternative by
-inspecting only the current token. For example, this element has
-non-deterministic contents:
-
-<programlisting><![CDATA[
-<!ELEMENT x ((u,v) | (u,y+) | v)>
-]]></programlisting>
-
-If the first element in <literal>x</literal> is <literal>u</literal>, the
-parser does not know which of the alternatives <literal>(u,v)</literal> or
-<literal>(u,y+)</literal> will work; the parser must also inspect the second
-element to be able to distinguish between the alternatives. Because such
-look-ahead (or "guessing") is required, this example is
-non-deterministic.</para>
-         </formalpara>
-
-         <para>The XML standard demands that content models must be
-deterministic. So it is recommended to turn the option
-<literal>accept_only_deterministic_models</literal> on; however, PXP can also
-process non-deterministic models using a backtracking algorithm.</para>
-
-         <para>Deterministic models ensure that validation can be performed in
-linear time. In order to get the maximum benefits, PXP also implements a
-special validator that profits from deterministic models; this is the
-deterministic finite automaton (DFA). This validator is enabled per element
-type if the element type has a deterministic model and if the option
-<literal>validate_by_dfa</literal> is turned on.</para>
-
-         <para>In general, I expect that the DFA method is faster than the
-backtracking method; especially in the worst case the DFA takes only linear
-time. However, if the content model has only few alternatives and the
-alternatives do not nest, the backtracking algorithm may be better.</para>
-
-       </sect2>
-
-
-      </sect1>
-
-
-      <sect1>
-       <title>Updates</title> 
-
-       <para><emphasis>Some (often later added) features that are otherwise
-not explained in the manual but worth to be mentioned.</emphasis></para>
-
-       <itemizedlist mark="bullet" spacing="compact">
-         <listitem><para>Methods node_position, node_path, nth_node,
-previous_node, next_node for nodes: See pxp_document.mli</para>
-         </listitem>
-         <listitem><para>Functions to determine the document order of nodes:
-compare, create_ord_index, ord_number, ord_compare: See pxp_document.mli</para>
-         </listitem>
-       </itemizedlist>
-      </sect1>
-
-    </chapter>
-  </part>
-</book>
-
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/pic/extension_general.fig b/helm/DEVEL/pxp/pxp/doc/manual/src/pic/extension_general.fig
deleted file mode 100644 (file)
index 445095f..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#FIG 3.2
-Portrait
-Center
-Metric
-A4      
-100.00
-Single
--2
-1200 2
-1 3 0 1 0 7 100 0 15 0.000 1 0.0000 1575 2250 229 229 1575 2250 1800 2295
-1 3 0 1 0 7 100 0 15 0.000 1 0.0000 1575 3375 225 225 1575 3375 1800 3375
-1 3 0 1 0 7 100 0 15 0.000 1 0.0000 675 3375 229 229 675 3375 900 3420
-1 3 0 1 0 7 100 0 15 0.000 1 0.0000 2475 3375 229 229 2475 3375 2700 3420
-1 3 0 1 0 7 100 0 10 0.000 1 0.0000 3600 2475 180 180 3600 2475 3780 2475
-1 3 0 1 0 7 100 0 10 0.000 1 0.0000 2880 2475 180 180 2880 2475 3060 2475
-1 3 0 1 0 7 100 0 10 0.000 1 0.0000 4320 2475 186 186 4320 2475 4500 2520
-1 3 0 1 0 7 100 0 10 0.000 1 0.0000 3600 1485 186 186 3600 1485 3780 1530
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        675 3150 1395 2385
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        1575 2475 1575 3150
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        1755 2385 2475 3150
-2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1537 2010 3412 1462
-2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        3412 1537 1672 2047
-2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 1 2
-       0 0 1.00 60.00 120.00
-       0 0 1.00 60.00 120.00
-        810 3195 2707 2512
-2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 1 2
-       0 0 1.00 60.00 120.00
-       0 0 1.00 60.00 120.00
-        1740 3217 3442 2580
-2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 1 2
-       0 0 1.00 60.00 120.00
-       0 0 1.00 60.00 120.00
-        2640 3210 4177 2610
-4 0 0 80 0 14 12 0.0000 4 75 105 3555 1530 x\001
-4 0 0 80 0 14 12 0.0000 4 75 105 1530 2295 n\001
-4 0 0 80 0 12 12 0.2967 4 135 1365 1658 1950 n # extension\001
-4 0 0 80 0 12 12 0.2967 4 135 840 2475 1950 x # node\001
-4 0 0 80 0 16 12 0.0000 4 135 1140 1020 4050 The node tree\001
-4 0 0 80 0 16 12 0.0000 4 135 1245 3225 3285 The extensions\001
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_add.fig b/helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_add.fig
deleted file mode 100644 (file)
index 0716834..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#FIG 3.2
-Portrait
-Center
-Metric
-A4      
-100.00
-Single
--2
-1200 2
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 6141 1350 242 229 6141 1350 6379 1395
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 6141 2250 242 229 6141 2250 6379 2295
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 5426 2250 242 229 5426 2250 5665 2295
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 6856 2250 242 229 6856 2250 7094 2295
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 7571 2925 242 229 7571 2925 7809 2970
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 8524 2925 242 229 8524 2925 8762 2970
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 8047 2250 242 229 8047 2250 8285 2295
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 1866 1350 242 229 1866 1350 2104 1395
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 1866 2250 242 229 1866 2250 2104 2295
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 1151 2250 242 229 1151 2250 1390 2295
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 2581 2250 242 229 2581 2250 2819 2295
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 3296 2925 242 229 3296 2925 3534 2970
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 4249 2925 242 229 4249 2925 4487 2970
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 3772 2250 242 229 3772 2250 4010 2295
-1 1 0 1 0 7 100 0 15 0.000 1 0.0000 8325 1350 242 229 8325 1350 8563 1395
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 61.76 123.53
-        5910 1440 5402 2017
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 61.76 123.53
-        6109 1590 6101 2025
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 61.76 123.53
-        6307 1537 6697 2070
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 61.76 123.53
-        7832 2347 7602 2692
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 61.76 123.53
-        8150 2452 8349 2752
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 61.76 123.53
-        5490 2017 5958 1492
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 61.76 123.53
-        6164 2010 6173 1575
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 61.76 123.53
-        6768 2025 6355 1470
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 61.76 123.53
-        7673 2715 7880 2415
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 61.76 123.53
-        8412 2707 8222 2415
-2 1 1 1 0 7 95 0 15 4.000 0 0 -1 0 0 2
-        6387 1372 8023 2017
-2 2 0 1 0 7 95 0 -1 0.000 0 0 -1 0 0 5
-        4950 900 9000 900 9000 3375 4950 3375 4950 900
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 61.75 123.51
-        1635 1440 1127 2017
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 61.75 123.51
-        1834 1590 1826 2025
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 61.75 123.51
-        2032 1537 2422 2070
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 61.75 123.51
-        3557 2347 3327 2692
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 61.75 123.51
-        3875 2452 4074 2752
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 61.75 123.51
-        1215 2017 1683 1492
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 61.75 123.51
-        1889 2010 1898 1575
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 61.75 123.51
-        2493 2025 2080 1470
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 61.75 123.51
-        3398 2715 3605 2415
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 61.75 123.51
-        4137 2707 3947 2415
-2 1 1 1 0 7 95 0 15 4.000 0 0 -1 0 0 2
-        2112 1372 3748 2017
-2 2 0 1 0 7 95 0 -1 0.000 0 0 -1 0 0 5
-        675 900 4725 900 4725 3375 675 3375 675 900
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        8197 1545 8055 2010
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        8137 2025 8280 1590
-2 1 0 3 0 7 95 0 -1 0.000 0 0 -1 1 0 4
-       2 1 2.00 120.00 180.00
-        7875 1500 7620 1965 7845 1920 7485 2355
-4 0 0 95 0 14 13 0.0000 4 79 111 6094 1379 x\001
-4 0 0 95 0 14 13 0.0000 4 111 111 7991 2265 y\001
-4 0 0 95 0 14 13 0.0000 4 79 111 1819 1379 x\001
-4 0 0 95 0 14 13 0.0000 4 111 111 3716 2265 y\001
-4 0 0 95 0 12 12 0.0000 4 150 1470 6459 1335 x # add_node y\001
-4 0 0 95 0 12 12 0.0000 4 150 1470 2214 1365 x # add_node y\001
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_clone.fig b/helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_clone.fig
deleted file mode 100644 (file)
index ed1865f..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-#FIG 3.2
-Portrait
-Center
-Metric
-A4      
-100.00
-Single
--2
-1200 2
-1 3 0 1 0 7 95 0 15 4.000 1 0.0000 2700 1800 229 229 2700 1800 2925 1845
-1 3 0 1 0 7 95 0 15 4.000 1 0.0000 2025 2700 229 229 2025 2700 2250 2745
-1 3 0 1 0 7 95 0 15 4.000 1 0.0000 3375 2700 229 229 3375 2700 3600 2745
-1 3 0 1 0 7 95 0 15 4.000 1 0.0000 6345 1800 229 229 6345 1800 6570 1845
-1 3 0 1 0 7 95 0 15 4.000 1 0.0000 5670 2700 229 229 5670 2700 5895 2745
-1 3 0 1 0 7 95 0 15 4.000 1 0.0000 7020 2700 229 229 7020 2700 7245 2745
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 8325 1800 229 229 8325 1800 8550 1845
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 7875 2700 229 229 7875 2700 8100 2745
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 8775 2700 229 229 8775 2700 9000 2745
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 6345 2700 229 229 6345 2700 6570 2745
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 5895 3600 229 229 5895 3600 6120 3645
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 6795 3600 229 229 6795 3600 7020 3645
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 2700 2700 229 229 2700 2700 2925 2745
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 2250 3600 229 229 2250 3600 2475 3645
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 3150 3600 229 229 3150 3600 3375 3645
-2 1 0 5 0 7 95 0 -1 12.000 1 0 -1 0 0 2
-        4050 2610 4725 2610
-2 1 0 5 0 7 95 0 -1 12.000 1 0 -1 0 0 2
-        4050 2745 4725 2745
-2 1 0 5 0 7 95 0 -1 12.000 1 1 -1 0 0 3
-        4500 2385 4950 2655 4500 2970
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        2490 1905 2025 2467
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        2827 2002 3202 2542
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        2115 2475 2535 1965
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        3255 2505 2872 1957
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        6135 1905 5670 2467
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        6472 2002 6847 2542
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        5760 2475 6180 1965
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        6900 2505 6517 1957
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        8160 1957 7860 2460
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        8407 2032 8625 2520
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        7942 2467 8212 2010
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        8685 2475 8467 1987
-2 2 0 1 0 7 80 0 -1 4.000 0 0 -1 0 0 5
-        1575 1350 9225 1350 9225 4050 1575 4050 1575 1350
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        6382 2460 6382 2032
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        6307 2032 6307 2467
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        6180 2857 5880 3360
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        6427 2932 6645 3420
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        5962 3367 6232 2910
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        6705 3375 6487 2887
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        2737 2460 2737 2032
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        2662 2032 2662 2467
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        2535 2857 2235 3360
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        2782 2932 3000 3420
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        2317 3367 2587 2910
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        3060 3375 2842 2887
-4 0 0 80 0 14 12 0.0000 4 105 105 2655 1845 y\001
-4 0 0 80 0 14 12 0.0000 4 105 105 6300 1845 y\001
-4 0 0 80 0 14 12 0.0000 4 75 105 6285 2752 x\001
-4 0 0 80 0 14 12 0.0000 4 75 105 2640 2752 x\001
-4 0 0 80 0 12 12 0.0000 4 105 840 3690 2025 let x' =\001
-4 0 0 80 0 12 12 0.0000 4 150 1890 3690 2205 x # orphaned_clone\001
-4 0 0 80 0 14 12 0.0000 4 105 210 8235 1845 x'\001
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_delete.fig b/helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_delete.fig
deleted file mode 100644 (file)
index a9fc87e..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-#FIG 3.2
-Portrait
-Center
-Metric
-A4      
-100.00
-Single
--2
-1200 2
-6 2550 2092 2865 2407
-2 1 0 4 0 7 80 0 -1 0.000 1 1 -1 0 0 2
-        2595 2362 2820 2137
-2 1 0 4 0 7 80 0 -1 0.000 1 1 -1 0 0 2
-        2595 2137 2820 2362
--6
-6 1980 2430 3420 3870
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 2700 2700 229 229 2700 2700 2925 2745
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 2250 3600 229 229 2250 3600 2475 3645
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 3150 3600 229 229 3150 3600 3375 3645
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        2535 2857 2235 3360
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        2782 2932 3000 3420
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        2317 3367 2587 2910
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        3060 3375 2842 2887
--6
-1 3 0 1 0 7 95 0 15 4.000 1 0.0000 2700 1800 229 229 2700 1800 2925 1845
-1 3 0 1 0 7 95 0 15 4.000 1 0.0000 2025 2700 229 229 2025 2700 2250 2745
-1 3 0 1 0 7 95 0 15 4.000 1 0.0000 3375 2700 229 229 3375 2700 3600 2745
-1 3 0 1 0 7 95 0 15 4.000 1 0.0000 6345 1800 229 229 6345 1800 6570 1845
-1 3 0 1 0 7 95 0 15 4.000 1 0.0000 5670 2700 229 229 5670 2700 5895 2745
-1 3 0 1 0 7 95 0 15 4.000 1 0.0000 7020 2700 229 229 7020 2700 7245 2745
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 8325 1800 229 229 8325 1800 8550 1845
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 7875 2700 229 229 7875 2700 8100 2745
-1 3 0 1 0 7 95 0 10 4.000 1 0.0000 8775 2700 229 229 8775 2700 9000 2745
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        2737 2460 2737 2032
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        2662 2032 2662 2467
-2 1 0 5 0 7 95 0 -1 12.000 1 0 -1 0 0 2
-        4050 2610 4725 2610
-2 1 0 5 0 7 95 0 -1 12.000 1 0 -1 0 0 2
-        4050 2745 4725 2745
-2 1 0 5 0 7 95 0 -1 12.000 1 1 -1 0 0 3
-        4500 2385 4950 2655 4500 2970
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        2490 1905 2025 2467
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        2827 2002 3202 2542
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        2115 2475 2535 1965
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        3255 2505 2872 1957
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        6135 1905 5670 2467
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        6472 2002 6847 2542
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        5760 2475 6180 1965
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        6900 2505 6517 1957
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        8160 1957 7860 2460
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        8407 2032 8625 2520
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        7942 2467 8212 2010
-2 1 0 1 0 7 95 0 -1 4.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        8685 2475 8467 1987
-2 2 0 1 0 7 80 0 -1 4.000 0 0 -1 0 0 5
-        1575 1350 9225 1350 9225 4050 1575 4050 1575 1350
-4 0 0 80 0 14 12 0.0000 4 75 105 2640 2752 x\001
-4 0 0 95 0 12 12 0.0000 4 135 1050 3960 2250 x # delete\001
-4 0 0 80 0 14 12 0.0000 4 75 105 8280 1845 x\001
-4 0 0 80 0 14 12 0.0000 4 105 105 2655 1845 y\001
-4 0 0 80 0 14 12 0.0000 4 105 105 6300 1845 y\001
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_general.fig b/helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_general.fig
deleted file mode 100644 (file)
index 231e76d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#FIG 3.2
-Portrait
-Center
-Metric
-A4      
-100.00
-Single
--2
-1200 2
-1 3 0 1 0 7 100 0 15 0.000 1 0.0000 2025 2025 229 229 2025 2025 2250 2070
-1 3 0 1 0 7 100 0 15 0.000 1 0.0000 1350 2025 225 225 1350 2025 1575 2025
-1 3 0 1 0 7 100 0 15 0.000 1 0.0000 2700 2025 225 225 2700 2025 2925 2025
-1 3 0 1 0 7 100 0 15 0.000 1 0.0000 2025 1125 225 225 2025 1125 2250 1125
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        1380 1800 1845 1275
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        1815 1207 1282 1815
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        2055 1792 2055 1350
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        1980 1350 1980 1807
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 1 1.00 60.00 120.00
-        2190 1297 2550 1867
-2 1 0 1 0 7 100 0 15 0.000 0 0 -1 1 0 2
-       1 0 1.00 60.00 120.00
-        2602 1807 2220 1237
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        450 675 3150 675 3150 2475 450 2475 450 675
-4 0 0 100 0 12 10 0.0000 4 120 540 2377 1342 parent\001
-4 0 0 100 0 12 10 0.0000 4 105 810 645 1628 sub_nodes\001
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_term.fig b/helm/DEVEL/pxp/pxp/doc/manual/src/pic/node_term.fig
deleted file mode 100644 (file)
index 54965fe..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#FIG 3.2
-Portrait
-Center
-Metric
-A4      
-100.00
-Single
--2
-1200 2
-6 1665 2700 2835 3150
-2 4 0 1 0 7 100 0 15 0.000 0 0 7 0 0 5
-        2835 3150 2835 2700 1665 2700 1665 3150 2835 3150
-4 0 0 80 0 18 12 0.0000 4 135 930 1815 3015 "Cherries"\001
--6
-1 3 0 1 0 7 100 0 15 0.000 1 0.0000 2250 1125 225 225 2250 1125 2475 1125
-1 3 0 1 0 7 100 0 15 0.000 1 0.0000 1575 2025 225 225 1575 2025 1800 2025
-1 3 0 1 0 7 100 0 15 0.000 1 0.0000 2925 2025 225 225 2925 2025 3150 2025
-1 3 0 1 0 7 100 0 15 0.000 1 0.0000 900 2925 242 242 900 2925 1125 3015
-2 4 0 1 0 7 100 0 15 0.000 0 0 7 0 0 5
-        1485 4275 1485 3825 315 3825 315 4275 1485 4275
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        2085 1275 1582 1807
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        2407 1297 2940 1800
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        1417 2190 900 2692
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        1740 2190 2257 2700
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        892 3180 892 3825
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        45 675 6525 675 6525 4950 45 4950 45 675
-3 3 0 1 0 7 100 0 -1 0.000 0 0 0 22
-        2115 3645 2250 3600 2520 3555 2745 3510 2925 3555 3150 3690
-        3375 3735 3600 3735 3825 3735 4140 3825 4140 4005 4005 4185
-        3735 4230 3420 4185 3150 4230 2835 4275 2520 4230 2340 4140
-        2115 4095 1980 4005 1980 3825 2025 3735
-        -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
-        -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
-        -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
-3 3 0 1 0 7 100 0 -1 0.000 0 0 0 17
-        3465 1170 3645 1080 4050 1035 4320 1035 4545 1080 4770 1170
-        5130 1215 5355 1350 5400 1530 5265 1665 4860 1710 4455 1710
-        4095 1665 3780 1620 3555 1575 3420 1485 3420 1305
-        -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
-        -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
-        -1.000
-3 2 0 1 0 7 100 0 -1 0.000 0 0 0 5
-        2475 1215 2655 1350 2970 1440 3240 1395 3420 1260
-        0.000 -1.000 -1.000 -1.000 0.000
-3 2 0 1 0 7 100 0 -1 0.000 0 0 0 5
-        1125 3060 1215 3397 1410 3607 1687 3727 2025 3720
-        0.000 -1.000 -1.000 -1.000 0.000
-4 0 0 80 0 18 12 0.0000 4 180 1065 375 4125 "An orange"\001
-4 0 0 80 0 18 12 0.0000 4 90 315 750 2985 <a>\001
-4 0 0 80 0 18 12 0.0000 4 135 315 1410 2085 <b>\001
-4 0 0 80 0 18 12 0.0000 4 90 315 2790 2070 <c>\001
-4 0 0 80 0 18 12 0.0000 4 90 315 2100 1200 <a>\001
-4 0 0 100 0 16 12 0.0000 4 135 795 3600 1260 attributes:\001
-4 0 0 100 0 16 12 0.0000 4 180 1680 3600 1485 "att" -> Value "apple"\001
-4 0 0 100 0 16 12 0.0000 4 135 795 2250 3780 attributes:\001
-4 0 0 100 0 17 12 0.0000 4 180 5910 390 4725 <a att="apple"><b><a att="orange">An orange</a>Cherries</b><c/></a>\001
-4 0 0 100 0 16 12 0.0000 4 180 1800 2250 4005 "att" -> Value "orange"\001
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/readme.ent b/helm/DEVEL/pxp/pxp/doc/manual/src/readme.ent
deleted file mode 100644 (file)
index e9fdfc3..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-<!ENTITY readme.code.header '
-open Pxp_types
-open Pxp_document
-'>
-<!ENTITY readme.code.footnote-printer '
-class type footnote_printer =
-  object
-    method footnote_to_html : store_type -&gt; out_channel -&gt; unit
-  end
-
-and store_type =
-  object
-    method alloc_footnote : footnote_printer -&gt; int
-    method print_footnotes : out_channel -&gt; unit
-  end
-;;
-'>
-<!ENTITY readme.code.store '
-class store =
-  object (self)
-
-    val mutable footnotes = ( [] : (int * footnote_printer) list )
-    val mutable next_footnote_number = 1
-
-    method alloc_footnote n =
-      let number = next_footnote_number in
-      next_footnote_number &lt;- number+1;
-      footnotes &lt;- footnotes @ [ number, n ];
-      number
-
-    method print_footnotes ch =
-      if footnotes &lt;&gt; [] then begin
-       output_string ch "&lt;hr align=left noshade=noshade width=\"30&percent;\"&gt;\n";
-       output_string ch "&lt;dl&gt;\n";
-       List.iter
-         (fun (_,n) -&gt; 
-            n # footnote_to_html (self : #store_type :&gt; store_type) ch)
-         footnotes;
-       output_string ch "&lt;/dl&gt;\n";
-      end
-
-  end
-;;
-'>
-<!ENTITY readme.code.escape-html '
-let escape_html s =
-  Str.global_substitute
-    (Str.regexp "&lt;\\|&gt;\\|&amp;\\|\"")
-    (fun s -&gt;
-      match Str.matched_string s with
-        "&lt;" -&gt; "&amp;lt;"
-      | "&gt;" -&gt; "&amp;gt;"
-      | "&amp;" -&gt; "&amp;amp;"
-      | "\"" -&gt; "&amp;quot;"
-      | _ -&gt; assert false)
-    s
-;;
-'>
-<!ENTITY readme.code.shared '
-class virtual shared =
-  object (self)
-
-    (* --- default_ext --- *)
-
-    val mutable node = (None : shared node option)
-
-    method clone = {&lt; &gt;} 
-    method node =
-      match node with
-          None -&gt;
-            assert false
-        | Some n -&gt; n
-    method set_node n =
-      node &lt;- Some n
-
-    (* --- virtual --- *)
-
-    method virtual to_html : store -&gt; out_channel -&gt; unit
-
-  end
-;;
-'>
-<!ENTITY readme.code.only-data '
-class only_data =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      output_string ch (escape_html (self # node # data))
-  end
-;;
-'>
-<!ENTITY readme.code.no-markup '
-class no_markup =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      List.iter
-       (fun n -&gt; n # extension # to_html store ch)
-       (self # node # sub_nodes)
-  end
-;;
-'>
-<!ENTITY readme.code.readme '
-class readme =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      (* output header *)
-      output_string 
-       ch "&lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\"&gt;";
-      output_string
-       ch "&lt;!-- WARNING! This is a generated file, do not edit! --&gt;\n";
-      let title = 
-       match self # node # attribute "title" with
-           Value s -&gt; s
-         | _ -&gt; assert false
-      in
-      let html_header, _ =
-       try (self # node # dtd # par_entity "readme:html:header") 
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-      let html_trailer, _ =
-       try (self # node # dtd # par_entity "readme:html:trailer")
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-      let html_bgcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:bgcolor")
-            # replacement_text
-       with WF_error _ -&gt; "white", false in
-      let html_textcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:textcolor")
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-      let html_alinkcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:alinkcolor")
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-      let html_vlinkcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:vlinkcolor")
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-      let html_linkcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:linkcolor")
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-      let html_background, _ =
-       try (self # node # dtd # par_entity "readme:html:background")
-            # replacement_text
-       with WF_error _ -&gt; "", false in
-
-      output_string ch "&lt;html&gt;&lt;header&gt;&lt;title&gt;\n";
-      output_string ch (escape_html title);
-      output_string ch "&lt;/title&gt;&lt;/header&gt;\n";
-      output_string ch "&lt;body ";
-      List.iter
-       (fun (name,value) -&gt;
-          if value &lt;&gt; "" then 
-            output_string ch (name ^ "=\"" ^ escape_html value ^ "\" "))
-       [ "bgcolor",    html_bgcolor;
-         "text",       html_textcolor;
-         "link",       html_linkcolor;
-         "alink",      html_alinkcolor;
-         "vlink",      html_vlinkcolor;
-       ];
-      output_string ch "&gt;\n";
-      output_string ch html_header;
-      output_string ch "&lt;h1&gt;";
-      output_string ch (escape_html title);
-      output_string ch "&lt;/h1&gt;\n";
-      (* process main content: *)
-      List.iter
-       (fun n -&gt; n # extension # to_html store ch)
-       (self # node # sub_nodes);
-      (* now process footnotes *)
-      store # print_footnotes ch;
-      (* trailer *)
-      output_string ch html_trailer;
-      output_string ch "&lt;/html&gt;\n";
-
-  end
-;;
-'>
-<!ENTITY readme.code.section '
-class section the_tag =
-  object (self)
-    inherit shared
-
-    val tag = the_tag
-
-    method to_html store ch =
-      let sub_nodes = self # node # sub_nodes in
-      match sub_nodes with
-         title_node :: rest -&gt;
-           output_string ch ("&lt;" ^ tag ^ "&gt;\n");
-           title_node # extension # to_html store ch;
-           output_string ch ("\n&lt;/" ^ tag ^ "&gt;");
-           List.iter
-             (fun n -&gt; n # extension # to_html store ch)
-             rest
-       | _ -&gt;
-           assert false
-  end
-;;
-
-class sect1 = section "h1";;
-class sect2 = section "h3";;
-class sect3 = section "h4";;
-'>
-<!ENTITY readme.code.map-tag '
-class map_tag the_target_tag =
-  object (self)
-    inherit shared
-
-    val target_tag = the_target_tag
-
-    method to_html store ch =
-      output_string ch ("&lt;" ^ target_tag ^ "&gt;\n");
-      List.iter
-       (fun n -&gt; n # extension # to_html store ch)
-       (self # node # sub_nodes);
-      output_string ch ("\n&lt;/" ^ target_tag ^ "&gt;");
-  end
-;;
-
-class p = map_tag "p";;
-class em = map_tag "b";;
-class ul = map_tag "ul";;
-class li = map_tag "li";;
-'>
-<!ENTITY readme.code.br '
-class br =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      output_string ch "&lt;br&gt;\n";
-      List.iter
-       (fun n -&gt; n # extension # to_html store ch)
-       (self # node # sub_nodes);
-  end
-;;
-'>
-<!ENTITY readme.code.code '
-class code =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      let data = self # node # data in
-      (* convert tabs *)
-      let l = String.length data in
-      let rec preprocess i column =
-       (* this is very ineffective but comprehensive: *)
-       if i &lt; l then
-         match data.[i] with
-             &apos;\t&apos; -&gt;
-               let n = 8 - (column mod 8) in
-               String.make n &apos; &apos; ^ preprocess (i+1) (column + n)
-           | &apos;\n&apos; -&gt;
-               "\n" ^ preprocess (i+1) 0
-           | c -&gt;
-               String.make 1 c ^ preprocess (i+1) (column + 1)
-       else
-         ""
-      in
-      output_string ch "&lt;p&gt;&lt;pre&gt;";
-      output_string ch (escape_html (preprocess 0 0));
-      output_string ch "&lt;/pre&gt;&lt;/p&gt;";
-
-  end
-;;
-'>
-<!ENTITY readme.code.a '
-class a =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      output_string ch "&lt;a ";
-      let href =
-       match self # node # attribute "href" with
-           Value v -&gt; escape_html v
-         | Valuelist _ -&gt; assert false
-         | Implied_value -&gt;
-             begin match self # node # attribute "readmeref" with
-                 Value v -&gt; escape_html v ^ ".html"
-               | Valuelist _ -&gt; assert false
-               | Implied_value -&gt;
-                   ""
-             end
-      in
-      if href &lt;&gt; "" then
-       output_string ch ("href=\""  ^ href ^ "\"");
-      output_string ch "&gt;";
-      output_string ch (escape_html (self # node # data));
-      output_string ch "&lt;/a&gt;";
-       
-  end
-;;
-'>
-<!ENTITY readme.code.footnote '
-class footnote =
-  object (self)
-    inherit shared
-
-    val mutable footnote_number = 0
-
-    method to_html store ch =
-      let number = 
-       store # alloc_footnote (self : #shared :&gt; footnote_printer) in
-      let foot_anchor = 
-       "footnote" ^ string_of_int number in
-      let text_anchor =
-       "textnote" ^ string_of_int number in
-      footnote_number &lt;- number;
-      output_string ch ( "&lt;a name=\"" ^ text_anchor ^ "\" href=\"#" ^ 
-                        foot_anchor ^ "\"&gt;[" ^ string_of_int number ^ 
-                        "]&lt;/a&gt;" )
-
-    method footnote_to_html store ch =
-      (* prerequisite: we are in a definition list &lt;dl&gt;...&lt;/dl&gt; *)
-      let foot_anchor = 
-       "footnote" ^ string_of_int footnote_number in
-      let text_anchor =
-       "textnote" ^ string_of_int footnote_number in
-      output_string ch ("&lt;dt&gt;&lt;a name=\"" ^ foot_anchor ^ "\" href=\"#" ^ 
-                       text_anchor ^ "\"&gt;[" ^ string_of_int footnote_number ^ 
-                       "]&lt;/a&gt;&lt;/dt&gt;\n&lt;dd&gt;");
-      List.iter
-       (fun n -&gt; n # extension # to_html store ch)
-       (self # node # sub_nodes);
-      output_string ch ("\n&lt;/dd&gt;")
-  end
-;;
-'>
-<!ENTITY readme.code.tag-map '
-open Pxp_yacc
-
-let tag_map =
-  make_spec_from_alist
-    ~data_exemplar:(new data_impl (new only_data))
-    ~default_element_exemplar:(new element_impl (new no_markup))
-    ~element_alist:
-      [ "readme", (new element_impl (new readme));
-       "sect1",  (new element_impl (new sect1));
-       "sect2",  (new element_impl (new sect2));
-       "sect3",  (new element_impl (new sect3));
-       "title",  (new element_impl (new no_markup));
-       "p",      (new element_impl (new p));
-       "br",     (new element_impl (new br));
-       "code",   (new element_impl (new code));
-       "em",     (new element_impl (new em));
-       "ul",     (new element_impl (new ul));
-       "li",     (new element_impl (new li));
-       "footnote", (new element_impl (new footnote : #shared :&gt; shared));
-       "a",      (new element_impl (new a));
-      ]
-    ()
-;;
-'>
diff --git a/helm/DEVEL/pxp/pxp/doc/manual/src/yacc.mli.ent b/helm/DEVEL/pxp/pxp/doc/manual/src/yacc.mli.ent
deleted file mode 100644 (file)
index 604918b..0000000
+++ /dev/null
@@ -1,376 +0,0 @@
-<!ENTITY markup-yacc.mli '
-
-open Pxp_types
-open Pxp_dtd
-open Pxp_document
-
-exception ID_not_unique
-
-class type [ &apos;ext ] index =
-object 
-  (* The type of indexes over the ID attributes of the elements. This type
-   * is the minimum requirement needed by the parser to create such an index.
-   *)
-  constraint &apos;ext = &apos;ext node #extension
-  method add : string -&gt; &apos;ext node -&gt; unit
-    (* Add the passed node to the index. If there is already an ID with
-     * the passed string value, the exception ID_not_unique should be
-     * raised. (But the index is free also to accept several identical IDs.)
-     *)
-  method find : string -&gt; &apos;ext node
-    (* Finds the node with the passed ID value, or raises Not_found *)
-end
-;;
-
-
-class [ &apos;ext ] hash_index : 
-object 
-  (* This is a simple implementation of &apos;index&apos; using a hash table. *)
-  constraint &apos;ext = &apos;ext node #extension
-  method add : string -&gt; &apos;ext node -&gt; unit
-    (* See above. *)
-  method find : string -&gt; &apos;ext node
-    (* See above. *)
-  method index : (string, &apos;ext node) Hashtbl.t
-    (* Returns the hash table. *)
-end
-;;
-
-
-type config =
-    { warner : collect_warnings;
-         (* An object that collects warnings. *)
-
-      errors_with_line_numbers : bool;
-         (* Whether error messages contain line numbers or not. The parser
-         * is 10 to 20 per cent faster if line numbers are turned off;
-         * you get only byte positions in this case.
-         *)
-
-      enable_pinstr_nodes : bool;
-         (* true: turns a special mode for processing instructions on. Normally,
-         * you cannot determine the exact location of a PI; you only know
-         * in which element the PI occurs. This mode makes it possible
-         * to find the exact location out: Every PI is artificially wrapped
-         * by a special node with type T_pinstr. For example, if the XML text
-         * is &lt;a&gt;&lt;?x?&gt;&lt;?y?&gt;&lt;/a&gt;, the parser normally produces only an element
-         * object for "a", and puts the PIs "x" and "y" into it (without
-         * order). In this mode, the object "a" will contain two objects
-         * with type T_pinstr, and the first object will contain "x", and the
-         * second "y": the object tree looks like
-         * - Node with type = T_element "a"
-         *   - Node with type = T_pinstr "x"
-         *     + contains processing instruction "x"
-         *   - Node with type = T_pinstr "y"
-         *     + contains processing instruction "y"
-         *
-         * Notes:
-         * (1) In past versions of PXP this mode was called
-         *     processing_instructions_inline, and it produced nodes of
-         *     type T_element "-pi" instead of T_pinstr.
-         * (2) The T_pinstr nodes are created from the pinstr exemplars
-         *     in your spec
-         *)
-
-      enable_super_root_node : bool;
-         (* true: the topmost element of the XML tree is not the root element,
-         * but the so-called super root. The root element is a son of the
-         * super root. The super root is a node with type T_super_root.
-         * The following behaviour changes, too:
-         * - PIs occurring outside the root element and outside the DTD are
-         *   added to the super root instead of the document object
-         * - If enable_pinstr_nodes is also turned on, the PI wrappers
-         *   are added to the super root
-         *
-         * For example, the document
-         *   &lt;?x?&gt;&lt;a&gt;y&lt;/a&gt;&lt;?y?&gt;
-         * is normally represented by:
-         * - document object
-         *   + contains PIs x and y
-         *   - reference to root node with type = T_element "a"
-         *     - node with type = T_data: contains "y"
-         * With enabled super root node:
-         * - document object
-         *   - reference to super root node with type = T_super_root
-         *     + contains PIs x and y
-         *     - root node with type = T_element "a"
-         *       - node with type = T_data: contains "y"
-         * If also enable_pinstr_nodes:
-         * - document object
-         *   - reference to super root node with type = T_super_root
-         *     - node with type = T_pinstr "x"
-         *       + contains PI "x"
-         *     - root node with type = T_element "a"
-         *       - node with type = T_data: contains "y"
-         *     - node with type = T_pinstr "y"
-         *       + contains PI "y"
-         * Notes:
-         * (1) In previous versions of PXP this mode was called
-         *     virtual_root, and it produced an additional node of type
-         *     T_element "-vr" instead of T_super_root.
-         * (2) The T_super_root node is created from the super root exemplar
-         *     in your spec.
-         *)
-
-      enable_comment_nodes : bool;
-         (* When enabled, comments are represented as nodes with type =
-         * T_comment.
-         * To access the contents of comments, use the method "comment"
-         * for the comment nodes. 
-         * These nodes behave like elements; however, they are normally
-         * empty and do not have attributes. Note that it is possible to
-         * add children to comment nodes and to set attributes, but it is
-         * strongly recommended not to do so. There are no checks on
-         * such abnormal use, because they would cost too
-         * much time, even when no comment nodes are generated at all.
-         *
-         * Comment nodes should be disabled unless you must parse a 
-         * third-party XML text which uses comments as another data
-         * container.
-         *
-         * The nodes of type T_comment are created from the comment exemplars
-         * in your spec.
-         *)
-
-      encoding : rep_encoding;
-        (* Specifies the encoding used for the *internal* representation
-        * of any character data.
-        * Note that the default is still Enc_iso88591.
-        *)
-
-      recognize_standalone_declaration : bool;
-        (* Whether the "standalone" declaration is recognized or not.
-        * This option does not have an effect on well-formedness parsing:
-        * in this case such declarations are never recognized.
-        *
-        * Recognizing the "standalone" declaration means that the 
-        * value of the declaration is scanned and passed to the DTD,
-        * and that the "standalone-check" is performed. 
-        *
-        * Standalone-check: If a document is flagged standalone=&apos;yes&apos; 
-        * some additional constraints apply. The idea is that a parser
-        * without access to any external document subsets can still parse
-        * the document, and will still return the same values as the parser
-        * with such access. For example, if the DTD is external and if
-        * there are attributes with default values, it is checked that there
-        * is no element instance where these attributes are omitted - the
-        * parser would return the default value but this requires access to
-        * the external DTD subset.
-        *)
-
-      store_element_positions : bool;
-        (* Whether the file name, the line and the column of the
-        * beginning of elements are stored in the element nodes.
-        * This option may be useful to generate error messages.
-        * 
-        * Positions are only stored for:
-        * - Elements
-        * - Wrapped processing instructions (see enable_pinstr_nodes)
-        * For all other node types, no position is stored.
-        *
-        * You can access positions by the method "position" of nodes.
-        *)
-
-      idref_pass : bool;
-        (* Whether the parser does a second pass and checks that all
-        * IDREF and IDREFS attributes contain valid references.
-        * This option works only if an ID index is available. To create
-        * an ID index, pass an index object as id_index argument to the
-        * parsing functions (such as parse_document_entity; see below).
-        *
-        * "Second pass" does not mean that the XML text is again parsed;
-        * only the existing document tree is traversed, and the check
-        * on bad IDREF/IDREFS attributes is performed for every node.
-        *)
-
-      validate_by_dfa : bool;
-        (* If true, and if DFAs are available for validation, the DFAs will
-        * actually be used for validation.
-        * If false, or if no DFAs are available, the standard backtracking
-        * algorithm will be used.
-        * DFA = deterministic finite automaton.
-        *
-        * DFAs are only available if accept_only_deterministic_models is
-        * "true" (because in this case, it is relatively cheap to construct
-        * the DFAs). DFAs are a data structure which ensures that validation
-        * can always be performed in linear time.
-        *
-        * I strongly recommend using DFAs; however, there are examples
-        * for which validation by backtracking is faster.
-        *)
-
-      accept_only_deterministic_models : bool;
-        (* Whether only deterministic content models are accepted in DTDs. *)
-
-      (* The following options are not implemented, or only for internal
-       * use.
-       *)
-
-      debugging_mode : bool;
-    }
-
-
-type source =
-    Entity of ((dtd -&gt; Pxp_entity.entity) * Pxp_reader.resolver)
-  | ExtID of (ext_id * Pxp_reader.resolver)
-
-val from_channel : 
-      ?system_encoding:encoding -&gt; ?id:ext_id -&gt; ?fixenc:encoding -&gt; 
-      in_channel -&gt; source
-
-val from_string :
-      ?fixenc:encoding -&gt; string -&gt; source
-
-val from_file :
-      ?system_encoding:encoding -&gt; string -&gt; source
-
-(* Notes on sources (version 2):
- *
- * Sources specify where the XML text to parse comes from. Sources not only
- * represent character streams, but also external IDs (i.e. SYSTEM or PUBLIC
- * names), and they are interpreted as a specific encoding of characters.
- * A source should be associated with an external ID, because otherwise
- * it is not known how to handle relative names.
- *
- * There are two primary sources, Entity and ExtID, and several functions
- * for derived sources. First explanations for the functions:
- *
- * from_channel: The XML text is read from an in_channel. By default, the
- *   channel is not associated with an external ID, and it is impossible
- *   to resolve relative SYSTEM IDs found in the document.
- *   If the ?id argument is passed, it is assumed that the channel has this
- *   external ID. If relative SYSTEM IDs occur in the document, they can
- *   be interpreted; however, it is only possible to read from "file:"
- *   IDs.
- *   By default, the channel automatically detects the encoding. You can
- *   set a fixed encoding by passing the ?fixenc argument.
- *
- * from_string: The XML text is read from a string.
- *   It is impossible to read from any external entity whose reference is found
- *   in the string.
- *   By default, the encoding of the string is detected automatically. You can
- *   set a fixed encoding by passing the ?fixenc argument.
- *
- * from_file: The XML text is read from the file whose file name is
- *   passed to the function (as UTF-8 string).
- *   Relative system IDs can be interpreted by this function.
- *   The ?system_encoding argument specifies the character encoding used
- *   for file names (sic!). By default, UTF-8 is assumed.
- *
- * Examples:
- *
- * from_file "/tmp/file.xml": 
- *   reads from this file, which is assumed to have the ID 
- *   SYSTEM "file://localhost/tmp/file.xml".
- *
- * let ch = open_in "/tmp/file.xml" in
- * from_channel ~id:(System "file://localhost/tmp/file.xml") ch
- *   This does the same, but uses a channel.
- *
- * from_channel ~id:(System "http://host/file.xml")
- *              ch
- *   reads from the channel ch, and it is assumed that the ID is
- *   SYSTEM "http://host/file.xml". If there is any relative SYSTEM ID,
- *   it will be interpreted relative to this location; however, there is
- *   no way to read via HTTP.
- *   If there is any "file:" SYSTEM ID, it is possible to read the file.
- *
- * The primary sources:
- *
- * - ExtID(x,r): The identifier x (either the SYSTEM or the PUBLIC name) of the
- *   entity to read from is passed to the resolver, and the resolver finds
- *   the entity and opens it.
- *   The intention of this option is to allow customized
- *   resolvers to interpret external identifiers without any restriction.
- *   The Pxp_reader module contains several classes allowing the user to
- *   compose such a customized resolver from predefined components.
- *
- *   ExtID is the interface of choice for own extensions to resolvers.
- *
- * - Entity(m,r): You can implementy every behaviour by using a customized
- *   entity class. Once the DTD object d is known that will be used during
- *   parsing, the entity  e = m d  is determined and used together with the
- *   resolver r.
- *   This is only for hackers.
- *)
-
-
-
-val default_config : config
-  (* - Warnings are thrown away
-   * - Error messages will contain line numbers
-   * - Neither T_super_root nor T_pinstr nor T_comment nodes are generated
-   * - The internal encoding is ISO-8859-1
-   * - The standalone declaration is checked
-   * - Element positions are stored
-   * - The IDREF pass is left out
-   * - If available, DFAs are used for validation
-   * - Only deterministic content models are accepted
-   *) 
-
-val default_extension : (&apos;a node extension) as &apos;a
-  (* A "null" extension; an extension that does not extend the functionality *)
-
-val default_spec : (&apos;a node extension as &apos;a) spec
-  (* Specifies that you do not want to use extensions. *)
-
-val parse_dtd_entity : config -&gt; source -&gt; dtd
-  (* Parse an entity containing a DTD (external subset), and return this DTD. *)
-
-val extract_dtd_from_document_entity : config -&gt; source -&gt; dtd
-  (* Parses a closed document, i.e. a document beginning with &lt;!DOCTYPE...&gt;,
-   * and returns the DTD contained in the document.
-   * The parts of the document outside the DTD are actually not parsed,
-   * i.e. parsing stops when all declarations of the DTD have been read.
-   *)
-
-val parse_document_entity : 
-  ?transform_dtd:(dtd -&gt; dtd) -&gt;
-  ?id_index:(&apos;ext index) -&gt;
-  config -&gt; source -&gt; &apos;ext spec -&gt; &apos;ext document
-  (* Parse a closed document, i.e. a document beginning with &lt;!DOCTYPE...&gt;,
-   * and validate the contents of the document against the DTD contained
-   * and/or referenced in the document.
-   *
-   * If the optional argument ~transform_dtd is passed, the following 
-   * modification applies: After the DTD (both the internal and external
-   * subsets) has been parsed, the function ~transform_dtd is called,
-   * and the resulting DTD is actually used to validate the document.
-   *
-   * If the optional argument ~transform_dtd is missing, the parser
-   * behaves in the same way as if the identity were passed as ~transform_dtd.
-   *
-   * If the optional argument ~id_index is present, the parser adds
-   * any ID attribute to the passed index. An index is required to detect
-   * violations of the uniqueness of IDs.
-   *)
-
-val parse_wfdocument_entity : 
-  config -&gt; source -&gt; &apos;ext spec -&gt; &apos;ext document
-  (* Parse a closed document (see parse_document_entity), but do not
-   * validate it. Only checks on well-formedness are performed.
-   *)
-
-val parse_content_entity  : 
-  ?id_index:(&apos;ext index) -&gt;
-  config -&gt; source -&gt; dtd -&gt; &apos;ext spec -&gt; &apos;ext node
-  (* Parse a file representing a well-formed fragment of a document. The
-   * fragment must be a single element (i.e. something like &lt;a&gt;...&lt;/a&gt;;
-   * not a sequence like &lt;a&gt;...&lt;/a&gt;&lt;b&gt;...&lt;/b&gt;). The element is validated
-   * against the passed DTD, but it is not checked whether the element is
-   * the root element specified in the DTD.
-   *
-   * If the optional argument ~id_index is present, the parser adds
-   * any ID attribute to the passed index. An index is required to detect
-   * violations of the uniqueness of IDs.
-   *)
-
-val parse_wfcontent_entity : 
-  config -&gt; source -&gt; &apos;ext spec -&gt; &apos;ext node
-  (* Parse a file representing a well-formed fragment of a document
-   * (see parse_content_entity). The fragment is not validated, only
-   * checked for well-formedness.
-   *)
-  
-
-'>
diff --git a/helm/DEVEL/pxp/pxp/examples/Makefile b/helm/DEVEL/pxp/pxp/examples/Makefile
deleted file mode 100644 (file)
index 9343857..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-.PHONY: all
-all:
-
-.PHONY: clean
-clean:
-
-.PHONY: CLEAN
-CLEAN: clean
-       $(MAKE) -C xmlforms CLEAN
-       $(MAKE) -C validate CLEAN
-       $(MAKE) -C readme CLEAN
-       $(MAKE) -C simple_transformation CLEAN
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~
-       $(MAKE) -C xmlforms distclean
-       $(MAKE) -C validate distclean
-       $(MAKE) -C readme distclean
-       $(MAKE) -C simple_transformation distclean
-
-
diff --git a/helm/DEVEL/pxp/pxp/examples/readme/.cvsignore b/helm/DEVEL/pxp/pxp/examples/readme/.cvsignore
deleted file mode 100644 (file)
index 2395c19..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-*.cmi
-*.cmo
-*.cma
-*.cmx
-*.o
-*.a
-*.cmxa
-depend
-depend.pkg
-
diff --git a/helm/DEVEL/pxp/pxp/examples/readme/Makefile b/helm/DEVEL/pxp/pxp/examples/readme/Makefile
deleted file mode 100644 (file)
index df5f6ed..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# make readme:         make bytecode executable
-# make readme.opt:     make native executable
-# make clean:          remove intermediate files
-# make CLEAN:           remove intermediate files (recursively)
-# make distclean:      remove any superflous files
-# make install
-#----------------------------------------------------------------------
-
-BIN = /usr/local/bin
-
-.PHONY: readme
-readme:
-       $(MAKE) -f Makefile.code readme
-
-.PHONY: readme.opt
-readme.opt:
-       $(MAKE) -f Makefile.code readme.opt
-
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa
-
-.PHONY: CLEAN
-CLEAN: clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~ depend depend.pkg
-       rm -f readme readme.opt
-
-.PHONY: install
-install:
-       cp readme $(BIN)
diff --git a/helm/DEVEL/pxp/pxp/examples/readme/Makefile.code b/helm/DEVEL/pxp/pxp/examples/readme/Makefile.code
deleted file mode 100644 (file)
index 0514ddf..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#----------------------------------------------------------------------
-# specific rules for this package:
-
-OBJECTS  = to_html.cmo to_text.cmo
-XOBJECTS = $(OBJECTS:.cmo=.cmx)
-ARCHIVE  = readme.cma
-XARCHIVE = readme.cmxa
-NAME     = readme
-REQUIRES = str pxp
-
-readme: $(ARCHIVE) main.cmo
-       ocamlfind ocamlc -o readme -custom -package "$(REQUIRES)" \
-               -linkpkg $(ARCHIVE) main.cmo 
-
-readme.opt: $(XARCHIVE) main.cmx
-       ocamlfind ocamlopt -o readme.opt -custom -package "$(REQUIRES)" \
-               -linkpkg $(XARCHIVE) main.cmx
-
-$(ARCHIVE): $(OBJECTS)
-       $(OCAMLC) -a -o $(ARCHIVE) $(OBJECTS)
-
-$(XARCHIVE): $(XOBJECTS)
-       $(OCAMLOPT) -a -o $(XARCHIVE) $(XOBJECTS)
-
-#----------------------------------------------------------------------
-# general rules:
-
-OPTIONS   =
-OCAMLC    = ocamlc -g $(OPTIONS) $(ROPTIONS)
-OCAMLOPT  = ocamlopt -p $(OPTIONS) $(ROPTIONS)
-OCAMLDEP  = ocamldep $(OPTIONS)
-OCAMLFIND = ocamlfind
-
-depend: *.ml *.mli 
-       $(OCAMLDEP) *.ml *.mli >depend
-
-depend.pkg: Makefile
-       $(OCAMLFIND) use -p ROPTIONS= $(REQUIRES) >depend.pkg
-
-.SUFFIXES: .cmo .cmi .cmx .ml .mli .mll .mly
-
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-.ml.cmo:
-       $(OCAMLC) -c $<
-
-.mli.cmi:
-       $(OCAMLC) -c $<
-
-.mll.ml:
-       ocamllex $<
-
-*.mli:
-
-include depend
-include depend.pkg
diff --git a/helm/DEVEL/pxp/pxp/examples/readme/main.ml b/helm/DEVEL/pxp/pxp/examples/readme/main.ml
deleted file mode 100644 (file)
index 4e3837a..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Pxp_types
-open Pxp_document
-open Pxp_yacc
-
-
-let rec print_error e =
-  prerr_endline(string_of_exn e)
-;;
-
-
-let run f a =
-  try f a with
-      e -> print_error e
-;;
-
-
-let convert_to_html filename =
-  (* read in style definition *)
-  let document =
-    parse_document_entity
-      { default_config with encoding = `Enc_iso88591 }
-      (from_file filename)
-      To_html.tag_map
-  in
-  let root = document # root in
-  let store = new To_html.store in
-  root # extension # to_html store stdout
-;;
-
-
-let convert_to_text filename =
-  (* read in style definition *)
-  let document =
-    parse_document_entity
-      default_config
-      (from_file filename)
-      To_text.tag_map
-  in
-  let root = document # root in
-  let store = new To_text.store in
-  let box = new To_text.box 79 79 in
-  root # extension # to_box store box;
-  box # output 0 0 stdout
-;;
-
-
-let main() =
-  let want_html = ref false in
-  let want_text = ref false in
-  let filename = ref None in
-  Arg.parse
-      [ "-html", Arg.Set want_html, 
-             "  convert file to html";
-       "-text", Arg.Set want_text,
-             "  convert file to text";
-      ]
-      (fun s -> 
-        match !filename with
-            None -> filename := Some s
-          | Some _ ->
-              raise (Arg.Bad "Multiple arguments not allowed."))
-      "usage: readme [ -text | -html ] input.xml >output";
-  let fn =
-    match !filename with
-       None -> 
-         prerr_endline "readme: no input";
-         exit 1
-      | Some s -> s
-  in
-  match !want_html, !want_text with
-      true, false ->
-       run convert_to_html fn
-    | false, true ->
-       run convert_to_text fn
-    | _ ->
-       prerr_endline ("readme: Please select exactly one output format")
-;;
-
-main();;
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:31  lpadovan
- * Initial revision
- *
- * Revision 1.5  2000/07/08 17:58:17  gerd
- *     Updated because of PXP API changes.
- *
- * Revision 1.4  2000/06/04 20:25:38  gerd
- *     Updates because of renamed PXP modules.
- *
- * Revision 1.3  2000/05/01 16:46:40  gerd
- *     Using the new error formatter.
- *
- * Revision 1.2  1999/08/23 16:54:19  gerd
- *     Minor changes.
- *
- * Revision 1.1  1999/08/22 22:29:32  gerd
- *     Initial revision.
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/examples/readme/readme.dtd b/helm/DEVEL/pxp/pxp/examples/readme/readme.dtd
deleted file mode 100644 (file)
index 8ff6a9f..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<!-- $Id -->
-
-<!ENTITY % p.like "p|ul">
-<!ENTITY % text   "br|code|em|footnote|a">
-
-<!ELEMENT readme (sect1+)>
-<!ATTLIST readme
-          title CDATA #REQUIRED>
-
-<!ELEMENT sect1 (title,(sect2|%p.like;)+)>
-
-<!ELEMENT sect2 (title,(sect3|%p.like;)+)>
-
-<!ELEMENT sect3 (title,(%p.like;)+)>
-
-<!ELEMENT title (#PCDATA|br)*>
-
-<!ELEMENT p (#PCDATA|%text;)*>
-
-<!ELEMENT br EMPTY>
-
-<!ELEMENT code (#PCDATA)>
-
-<!ELEMENT em (#PCDATA|%text;)*>
-
-<!ELEMENT ul (li+)>
-
-<!ELEMENT li (%p.like;)*>
-
-<!ELEMENT footnote (#PCDATA|%text;)*>
-
-<!ELEMENT a (#PCDATA)*>
-<!ATTLIST a 
-          href      CDATA #IMPLIED
-          readmeref CDATA #IMPLIED
->
-
-
diff --git a/helm/DEVEL/pxp/pxp/examples/readme/to_html.ml b/helm/DEVEL/pxp/pxp/examples/readme/to_html.ml
deleted file mode 100644 (file)
index f717b22..0000000
+++ /dev/null
@@ -1,432 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-(*$ readme.code.header *)
-open Pxp_types
-open Pxp_document
-(*$-*)
-
-
-(*$ readme.code.footnote-printer *)
-class type footnote_printer =
-  object
-    method footnote_to_html : store_type -> out_channel -> unit
-  end
-
-and store_type =
-  object
-    method alloc_footnote : footnote_printer -> int
-    method print_footnotes : out_channel -> unit
-  end
-;;
-(*$-*)
-
-
-(*$ readme.code.store *)
-class store =
-  object (self)
-
-    val mutable footnotes = ( [] : (int * footnote_printer) list )
-    val mutable next_footnote_number = 1
-
-    method alloc_footnote n =
-      let number = next_footnote_number in
-      next_footnote_number <- number+1;
-      footnotes <- footnotes @ [ number, n ];
-      number
-
-    method print_footnotes ch =
-      if footnotes <> [] then begin
-       output_string ch "<hr align=left noshade=noshade width=\"30%\">\n";
-       output_string ch "<dl>\n";
-       List.iter
-         (fun (_,n) -> 
-            n # footnote_to_html (self : #store_type :> store_type) ch)
-         footnotes;
-       output_string ch "</dl>\n";
-      end
-
-  end
-;;
-(*$-*)
-
-
-
-(*$ readme.code.escape-html *)
-let escape_html s =
-  Str.global_substitute
-    (Str.regexp "<\\|>\\|&\\|\"")
-    (fun s ->
-      match Str.matched_string s with
-        "<" -> "&lt;"
-      | ">" -> "&gt;"
-      | "&" -> "&amp;"
-      | "\"" -> "&quot;"
-      | _ -> assert false)
-    s
-;;
-(*$-*)
-
-
-(*$ readme.code.shared *)
-class virtual shared =
-  object (self)
-
-    (* --- default_ext --- *)
-
-    val mutable node = (None : shared node option)
-
-    method clone = {< >} 
-    method node =
-      match node with
-          None ->
-            assert false
-        | Some n -> n
-    method set_node n =
-      node <- Some n
-
-    (* --- virtual --- *)
-
-    method virtual to_html : store -> out_channel -> unit
-
-  end
-;;
-(*$-*)
-
-
-(*$ readme.code.only-data *)
-class only_data =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      output_string ch (escape_html (self # node # data))
-  end
-;;
-(*$-*)
-
-
-(*$ readme.code.no-markup *)
-class no_markup =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      List.iter
-       (fun n -> n # extension # to_html store ch)
-       (self # node # sub_nodes)
-  end
-;;
-(*$-*)
-
-
-(*$ readme.code.readme *)
-class readme =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      (* output header *)
-      output_string 
-       ch "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">";
-      output_string
-       ch "<!-- WARNING! This is a generated file, do not edit! -->\n";
-      let title = 
-       match self # node # attribute "title" with
-           Value s -> s
-         | _ -> assert false
-      in
-      let html_header, _ =
-       try (self # node # dtd # par_entity "readme:html:header") 
-            # replacement_text
-       with WF_error _ -> "", false in
-      let html_trailer, _ =
-       try (self # node # dtd # par_entity "readme:html:trailer")
-            # replacement_text
-       with WF_error _ -> "", false in
-      let html_bgcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:bgcolor")
-            # replacement_text
-       with WF_error _ -> "white", false in
-      let html_textcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:textcolor")
-            # replacement_text
-       with WF_error _ -> "", false in
-      let html_alinkcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:alinkcolor")
-            # replacement_text
-       with WF_error _ -> "", false in
-      let html_vlinkcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:vlinkcolor")
-            # replacement_text
-       with WF_error _ -> "", false in
-      let html_linkcolor, _ =
-       try (self # node # dtd # par_entity "readme:html:linkcolor")
-            # replacement_text
-       with WF_error _ -> "", false in
-      let html_background, _ =
-       try (self # node # dtd # par_entity "readme:html:background")
-            # replacement_text
-       with WF_error _ -> "", false in
-
-      output_string ch "<html><header><title>\n";
-      output_string ch (escape_html title);
-      output_string ch "</title></header>\n";
-      output_string ch "<body ";
-      List.iter
-       (fun (name,value) ->
-          if value <> "" then 
-            output_string ch (name ^ "=\"" ^ escape_html value ^ "\" "))
-       [ "bgcolor",    html_bgcolor;
-         "text",       html_textcolor;
-         "link",       html_linkcolor;
-         "alink",      html_alinkcolor;
-         "vlink",      html_vlinkcolor;
-       ];
-      output_string ch ">\n";
-      output_string ch html_header;
-      output_string ch "<h1>";
-      output_string ch (escape_html title);
-      output_string ch "</h1>\n";
-      (* process main content: *)
-      List.iter
-       (fun n -> n # extension # to_html store ch)
-       (self # node # sub_nodes);
-      (* now process footnotes *)
-      store # print_footnotes ch;
-      (* trailer *)
-      output_string ch html_trailer;
-      output_string ch "</html>\n";
-
-  end
-;;
-(*$-*)
-
-
-(*$ readme.code.section *)
-class section the_tag =
-  object (self)
-    inherit shared
-
-    val tag = the_tag
-
-    method to_html store ch =
-      let sub_nodes = self # node # sub_nodes in
-      match sub_nodes with
-         title_node :: rest ->
-           output_string ch ("<" ^ tag ^ ">\n");
-           title_node # extension # to_html store ch;
-           output_string ch ("\n</" ^ tag ^ ">");
-           List.iter
-             (fun n -> n # extension # to_html store ch)
-             rest
-       | _ ->
-           assert false
-  end
-;;
-
-class sect1 = section "h1";;
-class sect2 = section "h3";;
-class sect3 = section "h4";;
-(*$-*)
-
-
-(*$ readme.code.map-tag *)
-class map_tag the_target_tag =
-  object (self)
-    inherit shared
-
-    val target_tag = the_target_tag
-
-    method to_html store ch =
-      output_string ch ("<" ^ target_tag ^ ">\n");
-      List.iter
-       (fun n -> n # extension # to_html store ch)
-       (self # node # sub_nodes);
-      output_string ch ("\n</" ^ target_tag ^ ">");
-  end
-;;
-
-class p = map_tag "p";;
-class em = map_tag "b";;
-class ul = map_tag "ul";;
-class li = map_tag "li";;
-(*$-*)
-
-
-(*$ readme.code.br *)
-class br =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      output_string ch "<br>\n";
-      List.iter
-       (fun n -> n # extension # to_html store ch)
-       (self # node # sub_nodes);
-  end
-;;
-(*$-*)
-
-
-(*$ readme.code.code *)
-class code =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      let data = self # node # data in
-      (* convert tabs *)
-      let l = String.length data in
-      let rec preprocess i column =
-       (* this is very ineffective but comprehensive: *)
-       if i < l then
-         match data.[i] with
-             '\t' ->
-               let n = 8 - (column mod 8) in
-               String.make n ' ' ^ preprocess (i+1) (column + n)
-           | '\n' ->
-               "\n" ^ preprocess (i+1) 0
-           | c ->
-               String.make 1 c ^ preprocess (i+1) (column + 1)
-       else
-         ""
-      in
-      output_string ch "<p><pre>";
-      output_string ch (escape_html (preprocess 0 0));
-      output_string ch "</pre></p>";
-
-  end
-;;
-(*$-*)
-
-
-(*$ readme.code.a *)
-class a =
-  object (self)
-    inherit shared
-
-    method to_html store ch =
-      output_string ch "<a ";
-      let href =
-       match self # node # attribute "href" with
-           Value v -> escape_html v
-         | Valuelist _ -> assert false
-         | Implied_value ->
-             begin match self # node # attribute "readmeref" with
-                 Value v -> escape_html v ^ ".html"
-               | Valuelist _ -> assert false
-               | Implied_value ->
-                   ""
-             end
-      in
-      if href <> "" then
-       output_string ch ("href=\""  ^ href ^ "\"");
-      output_string ch ">";
-      output_string ch (escape_html (self # node # data));
-      output_string ch "</a>";
-       
-  end
-;;
-(*$-*)
-
-
-(*$ readme.code.footnote *)
-class footnote =
-  object (self)
-    inherit shared
-
-    val mutable footnote_number = 0
-
-    method to_html store ch =
-      let number = 
-       store # alloc_footnote (self : #shared :> footnote_printer) in
-      let foot_anchor = 
-       "footnote" ^ string_of_int number in
-      let text_anchor =
-       "textnote" ^ string_of_int number in
-      footnote_number <- number;
-      output_string ch ( "<a name=\"" ^ text_anchor ^ "\" href=\"#" ^ 
-                        foot_anchor ^ "\">[" ^ string_of_int number ^ 
-                        "]</a>" )
-
-    method footnote_to_html store ch =
-      (* prerequisite: we are in a definition list <dl>...</dl> *)
-      let foot_anchor = 
-       "footnote" ^ string_of_int footnote_number in
-      let text_anchor =
-       "textnote" ^ string_of_int footnote_number in
-      output_string ch ("<dt><a name=\"" ^ foot_anchor ^ "\" href=\"#" ^ 
-                       text_anchor ^ "\">[" ^ string_of_int footnote_number ^ 
-                       "]</a></dt>\n<dd>");
-      List.iter
-       (fun n -> n # extension # to_html store ch)
-       (self # node # sub_nodes);
-      output_string ch ("\n</dd>")
-  end
-;;
-(*$-*)
-
-
-(**********************************************************************)
-
-(*$ readme.code.tag-map *)
-open Pxp_yacc
-
-let tag_map =
-  make_spec_from_alist
-    ~data_exemplar:(new data_impl (new only_data))
-    ~default_element_exemplar:(new element_impl (new no_markup))
-    ~element_alist:
-      [ "readme", (new element_impl (new readme));
-       "sect1",  (new element_impl (new sect1));
-       "sect2",  (new element_impl (new sect2));
-       "sect3",  (new element_impl (new sect3));
-       "title",  (new element_impl (new no_markup));
-       "p",      (new element_impl (new p));
-       "br",     (new element_impl (new br));
-       "code",   (new element_impl (new code));
-       "em",     (new element_impl (new em));
-       "ul",     (new element_impl (new ul));
-       "li",     (new element_impl (new li));
-       "footnote", (new element_impl (new footnote : #shared :> shared));
-       "a",      (new element_impl (new a));
-      ]
-    ()
-;;
-(*$-*)
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:31  lpadovan
- * Initial revision
- *
- * Revision 1.6  2000/08/22 14:34:25  gerd
- *     Using make_spec_from_alist instead of make_spec_from_mapping.
- *
- * Revision 1.5  2000/08/18 21:15:14  gerd
- *     Update because of PXP API change: par_entity raises WF_error
- * instead of Validation error if the entity is not defined.
- *     Further minor updates.
- *
- * Revision 1.4  2000/07/08 17:58:17  gerd
- *     Updated because of PXP API changes.
- *
- * Revision 1.3  2000/06/04 20:25:38  gerd
- *     Updates because of renamed PXP modules.
- *
- * Revision 1.2  1999/09/12 20:09:32  gerd
- *     Added section marks.
- *
- * Revision 1.1  1999/08/22 22:29:32  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/examples/readme/to_text.ml b/helm/DEVEL/pxp/pxp/examples/readme/to_text.ml
deleted file mode 100644 (file)
index fc45f45..0000000
+++ /dev/null
@@ -1,599 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Pxp_types
-open Pxp_document
-
-
-(**********************************************************************)
-(* The box class represents formatted text                            *)
-(**********************************************************************)
-
-class type formatted_text =
-  object
-    method output : int -> int -> out_channel -> unit
-       (* output initial_indent indent ch:
-        * 'initial_indent' is how far the first line should be indented;
-        * 'indent' how far the rest. 'ch' is the channel on which the lines
-        * are to be printed.
-        *)
-
-    method multiline : bool
-        (* whether the box occupies multiple lines *)
-
-    method width_of_last_line : int
-        (* returns the width of the last line *)
-  end
-;;
-
-
-type text =
-    Text of string
-  | Box of formatted_text
-;;
-
-
-let textwidth tl =
-  let rec compute tl r =
-    match tl with
-       [] -> r
-      | t :: tl' ->
-         begin match t with
-             Text s ->
-                compute tl' (r + String.length s)
-           | Box b ->
-               if b # multiline then
-                 compute tl' (b # width_of_last_line)
-               else
-                 compute tl' (r + b # width_of_last_line)
-         end
-  in
-  compute (List.rev tl) 0
-;;
-
-
-class box the_initial_width the_width =
-  object (self)
-
-    (* The 'initial_width' is the width that is available on the first
-     * line of output; the 'width' is the width that is available in the
-     * rest.
-     *)
-
-    val initial_width = the_initial_width
-    val width = the_width
-
-    (* state: *)
-
-    val mutable space_added = false
-    val mutable linefeed_added = false
-    val mutable is_first_line = true
-    val mutable lines = []
-        (* lines in reverse order (first line = last element) *)
-    val mutable current_line = []
-        (* not member of 'lines'; again reverse order *)
-    val mutable current_indent = 0
-
-    method add_space =
-      if not space_added then begin
-       space_added <- true;
-       linefeed_added <- true;
-       current_line <- Text " " :: current_line
-      end
-
-    method ignore_space =
-      space_added <- true;
-      linefeed_added <- true
-
-    method add_linefeed =
-      if not linefeed_added then begin
-       linefeed_added <- true;
-       if not space_added then
-         current_line <- Text " " :: current_line
-      end
-
-    method ignore_linefeed =
-      linefeed_added <- true
-
-    method add_newline =
-      lines <- current_line :: lines;
-      current_line <- [];
-      space_added <- true;
-      linefeed_added <- true;
-      is_first_line <- false;
-      current_indent <- 0;
-
-    method add_word s =
-      (* first try to add 's' to 'current_line' *)
-      let current_line' = Text s :: current_line in
-      let current_width =
-       if is_first_line then initial_width else width in
-      if textwidth current_line' + current_indent <= current_width then begin
-       (* ok, the line does not become too long *)
-       current_line <- current_line';
-       space_added <- false;
-       linefeed_added <- false
-      end
-      else begin
-       (* The line would be too long. *)
-       lines <- current_line :: lines;
-       current_line <- [Text s];
-       space_added <- false;
-       linefeed_added <- false;
-       is_first_line <- false;
-       current_indent <- 0;
-      end
-
-    method add_box b =
-      current_line <- Box b :: current_line;
-      space_added <- false;
-      linefeed_added <- false;
-
-    method width_of_last_line =
-      textwidth current_line + current_indent
-
-
-    method available_width =
-      let current_width =
-       if is_first_line then initial_width else width in
-      current_width - textwidth current_line - current_indent
-  
-
-    method multiline =
-      lines <> [] or
-      (List.exists 
-        (function 
-             Text _ -> false
-           | Box b -> b # multiline) 
-        current_line)
-
-    method output initial_indent indent ch =
-      let eff_lines =
-       List.rev
-         (current_line :: lines) in
-      let rec out_lines cur_indent ll =
-       match ll with
-           [] ->  ()
-         | l :: ll' ->
-             output_string ch (String.make cur_indent ' ');
-             List.iter
-               (function
-                    Text s ->
-                      output_string ch s
-                  | Box b ->
-                      b # output 0 indent ch
-               )
-               (List.rev l);
-             if ll' <> [] then 
-               output_string ch "\n";
-             out_lines indent ll'
-      in
-      out_lines initial_indent eff_lines
-  end
-;;
-
-
-class listitem_box listmark indent totalwidth =
-  let initial_newline = String.length listmark >= indent in
-  object (self)
-    inherit box totalwidth (totalwidth - indent) as super
-
-    val extra_indent = indent
-
-    initializer
-    self # add_word listmark;
-    if initial_newline then
-      self # add_newline
-    else begin
-      current_line <- Text (String.make (indent - String.length listmark) ' ')
-                      :: current_line;
-      space_added <- true;
-      linefeed_added <- true;
-    end
-
-
-    method output initial_indent indent ch =
-      super # output initial_indent (indent + extra_indent) ch
-  end
-;;
-      
-
-(**********************************************************************)
-(* Footnotes etc.                                                     *)
-(**********************************************************************)
-
-
-class type footnote_printer =
-  object
-    method footnote_to_box : store_type -> box -> unit
-  end
-
-and store_type =
-  object
-    method alloc_footnote : footnote_printer -> int
-    method print_footnotes : box -> unit
-  end
-;;
-
-
-class store =
-  object (self)
-
-    val mutable footnotes = ( [] : (int * footnote_printer) list )
-    val mutable next_footnote_number = 1
-
-    method alloc_footnote n =
-      let number = next_footnote_number in
-      next_footnote_number <- number+1;
-      footnotes <- footnotes @ [ number, n ];
-      number
-
-    method print_footnotes (b : box) =
-      if footnotes <> [] then begin
-       b # add_newline;
-       b # add_newline;
-       let w = b # available_width in
-       b # add_word (String.make (w/3) '-');
-       b # add_newline;
-       b # add_newline;
-       List.iter
-         (fun (_,n) -> 
-            n # footnote_to_box (self : #store_type :> store_type) b)
-         footnotes;
-       b # add_newline;
-      end
-  end
-;;
-
-
-
-(**********************************************************************)
-(* The extension objects                                              *)
-(**********************************************************************)
-
-
-class virtual shared =
-  object (self)
-
-    (* --- default_ext --- *)
-
-    val mutable node = (None : shared node option)
-
-    method clone = {< >} 
-    method node =
-      match node with
-          None ->
-            assert false
-        | Some n -> n
-    method set_node n =
-      node <- Some n
-
-    (* --- virtual --- *)
-
-    method virtual to_box : store -> box -> unit
-      (* to_box store b:
-       * formats the element using box 'b' 
-       *)
-  end
-;;
-
-
-class only_data =
-  object (self)
-    inherit shared
-
-    val white_space_re = Str.regexp "[ \t]+\\|\n"
-
-    method to_box store b =
-      let s = self # node # data in
-      let splitted = Str.full_split white_space_re s in
-      List.iter
-       (function
-            Str.Delim "\n" ->
-              b # add_linefeed
-          | Str.Delim _ ->
-              b # add_space
-          | Str.Text s ->
-              b # add_word s)
-       splitted
-  end
-;;
-
-
-class no_markup =
-  object (self)
-    inherit shared
-
-    method to_box store b =
-      List.iter
-       (fun n -> n # extension # to_box store b)
-       (self # node # sub_nodes)
-  end
-;;
-
-
-class readme =
-  object (self)
-    inherit shared
-
-    method to_box store b =
-      let title = 
-       match self # node # attribute "title" with
-           Value s -> s
-         | _ -> assert false
-      in
-      let w = b # available_width in
-      let line = String.make (w-1) '*' in
-      b # add_word line;
-      b # add_newline;
-      b # add_word title;
-      b # add_newline;
-      b # add_word line;
-      b # add_newline;
-      b # add_newline;
-      (* process main content: *)
-      List.iter
-       (fun n -> n # extension # to_box store b)
-       (self # node # sub_nodes);
-      (* now process footnotes *)
-      store # print_footnotes b;
-      (* trailer *)
-      b # add_newline;
-  end
-;;
-
-
-class section the_tag =
-  object (self)
-    inherit shared
-
-    val tag = the_tag
-
-    method to_box store b =
-      let sub_nodes = self # node # sub_nodes in
-      match sub_nodes with
-         title_node :: rest ->
-           b # add_newline;
-           let w = b # available_width in
-           let line = String.make (w-1) tag in
-           b # add_word line;
-           b # add_newline;
-           b # add_word (title_node # data);
-           b # add_newline;
-           b # add_word line;
-           b # add_newline;
-           List.iter
-             (fun n -> 
-                n # extension # to_box store b)
-             rest;
-       | _ ->
-           assert false
-  end
-;;
-
-class sect1 = section '=';;
-class sect2 = section '-';;
-class sect3 = section ':';;
-
-
-class p =
-  object (self)
-    inherit shared
-  
-    method to_box store b =
-      let within_list = 
-       match self # node # parent # node_type with
-           T_element "li" -> true
-         | T_element _    -> false 
-         | _ -> assert false
-      in
-      if not within_list then
-       b # add_newline;
-      let w = b # available_width in
-      let b' = new box w w in
-      b' # ignore_space;
-      List.iter
-       (fun n -> n # extension # to_box store b')
-       (self # node # sub_nodes);
-      b # add_box (b' :> formatted_text);
-      b # add_newline;
-  end
-;;
-
-
-class li =
-  object (self)
-    inherit shared
-  
-    method to_box store b =
-      b # add_newline;
-      let w = b # available_width in
-      let b' = new listitem_box "-" 3 w in
-      b' # ignore_space;
-      List.iter
-       (fun n -> n # extension # to_box store b')
-       (self # node # sub_nodes);
-      b # add_box (b' :> formatted_text);
-  end
-;;
-
-
-class code =
-  object (self)
-    inherit shared
-  
-    method to_box store b =
-      b # add_newline;
-      let w = b # available_width in
-      let b' = new box w w in
-      b' # ignore_space;
-      let data = self # node # data in
-      (* convert tabs *)
-      let l = String.length data in
-      let rec add s i column =
-       (* this is very ineffective but comprehensive: *)
-       if i < l then
-         match data.[i] with
-             '\t' ->
-               let n = 8 - (column mod 8) in
-               add (s ^ String.make n ' ') (i+1) (column + n)
-           | '\n' ->
-               b' # add_word s;
-               b' # add_newline;
-               add "" (i+1) 0
-           | c ->
-               add (s ^ String.make 1 c) (i+1) (column + 1)
-       else
-         if s <> "" then begin
-           b' # add_word s;
-           b' # add_newline;
-         end
-      in
-      add "" 0 0;
-      b # add_box (b' :> formatted_text);
-      b # add_newline;
-  end
-;;
-
-
-class br =
-  object (self)
-    inherit shared
-
-    method to_box store b =
-      b # add_newline;
-  end
-;;
-
-
-class footnote =
-  object (self)
-    inherit shared
-
-    val mutable footnote_number = 0
-
-    method to_box store b =
-      let number = 
-       store # alloc_footnote (self : #shared :> footnote_printer) in
-      footnote_number <- number;
-      b # add_space;
-      b # add_word ("[" ^ string_of_int number ^ "]");
-
-    method footnote_to_box store b =
-      let w = b # available_width in
-      let n = "[" ^ string_of_int footnote_number ^ "]" in
-      let b' = new listitem_box n 6 w in
-      b' # ignore_space;
-      List.iter
-       (fun n -> n # extension # to_box store b')
-       (self # node # sub_nodes);
-      b # add_box (b' :> formatted_text);
-      b # add_newline;
-      b # add_newline;
-  end
-;;
-
-
-class a =
-  object (self)
-    inherit shared
-
-    val mutable footnote_number = 0
-    val mutable a_href = ""
-
-    method to_box store b =
-      let href =
-       match self # node # attribute "href" with
-           Value v -> "see " ^ v
-         | Valuelist _ -> assert false
-         | Implied_value ->
-             begin match self # node # attribute "readmeref" with
-                 Value v -> "see file " ^ v 
-               | Valuelist _ -> assert false
-               | Implied_value ->
-                   ""
-             end
-      in
-      a_href <- href;
-      List.iter
-       (fun n -> n # extension # to_box store b)
-       (self # node # sub_nodes);
-      if href <> "" then begin
-       let number = 
-         store # alloc_footnote (self : #shared :> footnote_printer) in
-       footnote_number <- number;
-       b # add_space;
-       b # add_word ("[" ^ string_of_int number ^ "]");
-      end
-
-    method footnote_to_box store b =
-      if a_href <> "" then begin
-       let w = b # available_width in
-       let n = "[" ^ string_of_int footnote_number ^ "]" in
-       let b' = new listitem_box n 6 w in
-       b' # ignore_space;
-       b' # add_word a_href;
-       b # add_box (b' :> formatted_text);
-       b # add_newline;
-       b # add_newline;
-      end      
-  end
-;;
-
-(**********************************************************************)
-
-open Pxp_yacc
-
-let tag_map =
-  make_spec_from_alist
-    ~data_exemplar:(new data_impl (new only_data))
-    ~default_element_exemplar:(new element_impl (new no_markup))
-    ~element_alist:
-       [ "readme",   (new element_impl (new readme));
-        "sect1",    (new element_impl (new sect1));
-        "sect2",    (new element_impl (new sect2));
-        "sect3",    (new element_impl (new sect3));
-        "title",    (new element_impl (new no_markup));
-        "p",        (new element_impl (new p));
-        "br",       (new element_impl (new br));
-        "code",     (new element_impl (new code));
-        "em",       (new element_impl (new no_markup));
-        "ul",       (new element_impl (new no_markup));
-        "li",       (new element_impl (new li));
-        "footnote", (new element_impl (new footnote : #shared :> shared));
-        "a",        (new element_impl (new a : #shared :> shared));
-       ]
-    ()
-;;
-
-
-    
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:31  lpadovan
- * Initial revision
- *
- * Revision 1.5  2000/08/22 14:34:25  gerd
- *     Using make_spec_from_alist instead of make_spec_from_mapping.
- *
- * Revision 1.4  2000/08/18 21:15:25  gerd
- *     Minor updates because of PXP API changes.
- *
- * Revision 1.3  2000/07/08 17:58:17  gerd
- *     Updated because of PXP API changes.
- *
- * Revision 1.2  2000/06/04 20:25:38  gerd
- *     Updates because of renamed PXP modules.
- *
- * Revision 1.1  1999/08/22 22:29:32  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/examples/simple_transformation/Makefile b/helm/DEVEL/pxp/pxp/examples/simple_transformation/Makefile
deleted file mode 100644 (file)
index 27be18c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-all: print sort delcol
-
-print: print.ml
-       ocamlfind ocamlc -o print -package pxp -linkpkg -custom \
-               -predicates pxp_without_utf8 print.ml
-
-sort: sort.ml
-       ocamlfind ocamlc -o sort -package pxp -linkpkg -custom \
-               -predicates pxp_without_utf8 sort.ml
-
-delcol: delcol.ml
-       ocamlfind ocamlc -o delcol -package pxp -linkpkg -custom \
-               -predicates pxp_without_utf8 delcol.ml
-
-clean:
-       rm -f *.cmo *.cma *.cmi *.cmxa *.a *.o
-
-distclean: clean
-       rm -f *~ print sort delcol
-
-CLEAN: clean
diff --git a/helm/DEVEL/pxp/pxp/examples/simple_transformation/README b/helm/DEVEL/pxp/pxp/examples/simple_transformation/README
deleted file mode 100644 (file)
index 5b92128..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Usage:
-       sort -by phone <sample.xml | print
-
-once sort and print are compiled.
-
-These examples illustrate iter_tree, map_tree and find_element.
-
-
-sort:  reads an XML file from stdin, sorts the records, and prints the
-       result as XML.
-delcol: reads an XML file from stdin, deletes a column from all records,
-       and prints the result as XML.
-print: reads an XML file from stdin, and pretty-prints the file
-
-The XML file must not contain a DTD. The programs assume the fixed DTD
-record.dtd.
-
diff --git a/helm/DEVEL/pxp/pxp/examples/simple_transformation/delcol.ml b/helm/DEVEL/pxp/pxp/examples/simple_transformation/delcol.ml
deleted file mode 100644 (file)
index 57c3327..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* Read a record-list, delete a column, and print it as XML *)
-open Pxp_types;;
-open Pxp_document;;
-open Pxp_yacc;;
-
-let delcol col tree =
-  map_tree
-    ~pre:
-      (fun n -> 
-        match n # node_type with
-            T_element name when name = col ->
-              raise Skip
-          | _ -> n # orphaned_flat_clone)
-    tree
-;;
-
-
-let main() =
-  let column = ref "" in
-  Arg.parse
-      [ "-col", Arg.String (fun s -> column := s),
-           " (last-name|first-name|phone)";
-      ]
-      (fun _ -> raise (Arg.Bad "Bad usage"))
-      "usage: sort [ options ]";
-  if !column = "" then (
-    prerr_endline "Column not specified!";
-    exit 1;
-  );
-  if not(List.mem !column ["last-name"; "first-name"; "phone"]) then (
-    prerr_endline ("Unknown column: " ^ !column);
-    exit 1
-  );
-  try
-    let dtd = parse_dtd_entity default_config (from_file "record.dtd") in
-    let tree = 
-      parse_content_entity default_config (from_channel stdin) dtd default_spec
-    in
-    print_endline "<?xml encoding='ISO-8859-1'?>";
-    (delcol !column tree) # write (Out_channel stdout) `Enc_iso88591
-  with
-      x ->
-       prerr_endline(string_of_exn x);
-       exit 1
-;;
-
-
-main();;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/08/24 09:42:52  gerd
- *     Updated a comment.
- *
- * Revision 1.1  2000/08/24 09:39:59  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/examples/simple_transformation/print.ml b/helm/DEVEL/pxp/pxp/examples/simple_transformation/print.ml
deleted file mode 100644 (file)
index 56f5fb6..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* Read a record-list structure and print it *)
-open Pxp_types;;
-open Pxp_document;;
-open Pxp_yacc;;
-
-let print tree =
-  iter_tree
-    ~pre:
-      (fun n ->
-        match n # node_type with
-            T_element "last-name" ->
-              print_endline ("Last name: " ^ n # data)
-          | T_element "first-name" ->
-              print_endline ("First name: " ^ n # data)
-          | T_element "phone" ->
-              print_endline ("Telephone number: " ^ n # data)
-          | _ ->
-              ())
-    ~post:
-      (fun n ->
-        match n # node_type with
-            T_element "record" -> 
-              print_newline()
-          | _ ->
-              ())
-    tree
-;;
-
-let main() =
-  try
-    let dtd = parse_dtd_entity default_config (from_file "record.dtd") in
-    let tree = 
-      parse_content_entity default_config (from_channel stdin) dtd default_spec in
-    print tree
-  with
-      x ->
-       prerr_endline(string_of_exn x);
-       exit 1
-;;
-
-
-main();;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/08/22 21:57:43  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/examples/simple_transformation/record.dtd b/helm/DEVEL/pxp/pxp/examples/simple_transformation/record.dtd
deleted file mode 100644 (file)
index b054ccd..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!ELEMENT record-list (record*)>
-<!ELEMENT record (last-name?, first-name?, phone?)>
-<!ELEMENT last-name (#PCDATA)>
-<!ELEMENT first-name (#PCDATA)>
-<!ELEMENT phone (#PCDATA)>
diff --git a/helm/DEVEL/pxp/pxp/examples/simple_transformation/sample.xml b/helm/DEVEL/pxp/pxp/examples/simple_transformation/sample.xml
deleted file mode 100644 (file)
index 00d36b0..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-<record-list>
-  <record>
-    <last-name>Stolpmann</last-name>
-    <first-name>Gerd</first-name>
-    <phone>997705</phone>
-  </record>
-  <record>
-    <last-name>Smith</last-name>
-    <first-name>Jack</first-name>
-    <phone>12345</phone>
-  </record>
-  <record>
-    <last-name>Ãœtzgür</last-name>
-    <first-name>xxx</first-name>
-    <phone>7654</phone>
-  </record>
-</record-list>
diff --git a/helm/DEVEL/pxp/pxp/examples/simple_transformation/sort.ml b/helm/DEVEL/pxp/pxp/examples/simple_transformation/sort.ml
deleted file mode 100644 (file)
index 297730f..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* Read a record-list, sort it, and print it as XML *)
-open Pxp_types;;
-open Pxp_document;;
-open Pxp_yacc;;
-
-let sort by tree =
-  map_tree
-    ~pre:
-      (fun n -> n # orphaned_flat_clone)
-    ~post:
-      (fun n ->
-        match n # node_type with
-            T_element "record-list" ->
-              let l = n # sub_nodes in
-              let l' = List.sort
-                         (fun a b ->
-                            let a_string = 
-                              try (find_element by a) # data 
-                              with Not_found -> "" in
-                            let b_string = 
-                              try (find_element by b) # data 
-                              with Not_found -> "" in
-                            Pervasives.compare a_string b_string)
-                         l in
-              n # set_nodes l';
-              n
-          | _ ->
-              n)
-    tree
-;;
-
-
-let main() =
-  let criterion = ref "last-name" in
-  Arg.parse
-      [ "-by", Arg.String (fun s -> criterion := s),
-           " (last-name|first-name|phone)";
-      ]
-      (fun _ -> raise (Arg.Bad "Bad usage"))
-      "usage: sort [ options ]";
-  if not(List.mem !criterion ["last-name"; "first-name"; "phone"]) then (
-    prerr_endline ("Unknown criterion: " ^ !criterion);
-    exit 1
-  );
-  try
-    let dtd = parse_dtd_entity default_config (from_file "record.dtd") in
-    let tree = 
-      parse_content_entity default_config (from_channel stdin) dtd default_spec
-    in
-    print_endline "<?xml encoding='ISO-8859-1'?>";
-    (sort !criterion tree) # write (Out_channel stdout) `Enc_iso88591
-  with
-      x ->
-       prerr_endline(string_of_exn x);
-       exit 1
-;;
-
-
-main();;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/08/30 16:05:44  gerd
- *     Minor update
- *
- * Revision 1.2  2000/08/24 09:40:11  gerd
- *     Allow that columns are missing.
- *
- * Revision 1.1  2000/08/22 21:57:44  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/examples/validate/.cvsignore b/helm/DEVEL/pxp/pxp/examples/validate/.cvsignore
deleted file mode 100644 (file)
index e125622..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-*.cmi
-*.cmo
-*.cma
-*.cmx
-*.o
-*.a
-*.cmxa
-*.new
-*.mlf
-*.ml0
-depend
-depend.pkg
-
diff --git a/helm/DEVEL/pxp/pxp/examples/validate/Makefile b/helm/DEVEL/pxp/pxp/examples/validate/Makefile
deleted file mode 100644 (file)
index 64b6918..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# make validate:        make bytecode executable
-# make validate.opt:    make native executable
-# make clean:          remove intermediate files (in this directory)
-# make CLEAN:           remove intermediate files (recursively)
-# make distclean:      remove any superflous files (recursively)
-#----------------------------------------------------------------------
-
-pxpvalidate: validate.ml
-       ocamlfind ocamlc -o pxpvalidate -package "pxp" -linkpkg validate.ml
-
-pxpvalidate.opt: validate.ml
-       ocamlfind ocamlopt -o pxpvalidate.opt -package "pxp" -linkpkg validate.ml
-
-#----------------------------------------------------------------------
-.PHONY: all
-all:
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa 
-
-.PHONY: CLEAN
-CLEAN: clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~
-       rm -f pxpvalidate pxpvalidate.opt
diff --git a/helm/DEVEL/pxp/pxp/examples/validate/validate.ml b/helm/DEVEL/pxp/pxp/examples/validate/validate.ml
deleted file mode 100644 (file)
index 3bb83d2..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-open Pxp_document;;
-open Pxp_yacc;;
-open Pxp_types;;
-
-let error_happened = ref false;;
-
-let print_error e =
-  print_endline (string_of_exn e)
-;;
-
-class warner =
-  object 
-    method warn w =
-      print_endline ("WARNING: " ^ w)
-  end
-;;
-
-let parse debug wf iso88591 filename =
-  try 
-    (* Parse the document: *)
-    let parse_fn =
-      if wf then parse_wfdocument_entity 
-      else 
-       let index = new hash_index in
-       parse_document_entity 
-         ?transform_dtd:None 
-         ~id_index:(index :> 'ext index)
-    in
-    let doc =
-      parse_fn
-         { default_config with 
-             debugging_mode = debug;
-             encoding = if iso88591 then `Enc_iso88591 else `Enc_utf8;
-             idref_pass = true;
-             warner = new warner
-          }
-         (from_file filename)
-         default_spec 
-    in
-    ()
-  with
-      e ->
-       (* Print error; remember that there was an error *)
-       error_happened := true;
-       print_error e
-;;
-
-
-let main() =
-  let debug = ref false in
-  let wf = ref false in
-  let iso88591 = ref false in
-  let files = ref [] in
-  Arg.parse
-      [ "-d",   Arg.Set debug, 
-           "             turn debugging mode on";
-       "-wf",  Arg.Set wf,    
-            "            check only on well-formedness";
-        "-iso-8859-1", Arg.Set iso88591, 
-                    "    use ISO-8859-1 as internal encoding instead of UTF-8";
-      ]
-      (fun x -> files := x :: !files)
-      "
-usage: pxpvalidate [options] file ...
-
-- checks the validity of XML documents. See below for list of options.
-
-<title>PXP - The XML parser for Objective Caml</title>
-
-List of options:";
-  files := List.rev !files;
-  List.iter (parse !debug !wf !iso88591) !files;
-;;
-
-
-main();
-if !error_happened then exit(1);;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:31  lpadovan
- * Initial revision
- *
- * Revision 1.10  2000/08/30 15:58:41  gerd
- *     Updated.
- *
- * Revision 1.9  2000/07/14 14:57:30  gerd
- *     Updated: warner
- *
- * Revision 1.8  2000/07/14 14:13:15  gerd
- *     Cosmetic changes.
- *
- * Revision 1.7  2000/07/14 14:11:06  gerd
- *     Updated because of changes of the PXP API.
- *
- * Revision 1.6  2000/07/08 21:53:00  gerd
- *     Updated because of PXP interface changes.
- *
- * Revision 1.5  2000/06/04 20:21:55  gerd
- *     Updated to new module names.
- *
- * Revision 1.4  2000/05/01 16:44:57  gerd
- *     Added check for ID uniqueness.
- *     Using new error formatter.
- *
- * Revision 1.3  1999/11/09 22:27:30  gerd
- *     The programs returns now an exit code of 1 if one of the
- * XML files produces an error.
- *
- * Revision 1.2  1999/09/01 23:09:56  gerd
- *     Added the option -wf that switches to well-formedness checking
- * instead of validation.
- *
- * Revision 1.1  1999/08/14 22:20:53  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/.cvsignore b/helm/DEVEL/pxp/pxp/examples/xmlforms/.cvsignore
deleted file mode 100644 (file)
index e125622..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-*.cmi
-*.cmo
-*.cma
-*.cmx
-*.o
-*.a
-*.cmxa
-*.new
-*.mlf
-*.ml0
-depend
-depend.pkg
-
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/Makefile b/helm/DEVEL/pxp/pxp/examples/xmlforms/Makefile
deleted file mode 100644 (file)
index 5a0ba32..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# make xmlforms:       make bytecode executable
-# make xmlforms.opt:   make native executable
-# make clean:          remove intermediate files
-# make CLEAN:           remove intermediate files (recursively)
-# make distclean:      remove any superflous files
-# make release:        cleanup, create archive, tag CVS module 
-#                      (for developers)
-#----------------------------------------------------------------------
-
-.PHONY: xmlforms
-xmlforms:
-       $(MAKE) -f Makefile.code xmlforms
-
-.PHONY: xmlforms.opt
-xmlforms.opt:
-       $(MAKE) -f Makefile.code xmlforms.opt
-
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa
-
-.PHONY: CLEAN
-CLEAN: clean
-       $(MAKE) -C styles CLEAN
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~ depend depend.pkg
-       rm -f xmlforms xmlforms.opt
-       $(MAKE) -C styles distclean
-
-
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/Makefile.code b/helm/DEVEL/pxp/pxp/examples/xmlforms/Makefile.code
deleted file mode 100644 (file)
index f996740..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#----------------------------------------------------------------------
-# specific rules for this package:
-
-OBJECTS  = ds_context.cmo ds_style.cmo
-XOBJECTS = $(OBJECTS:.cmo=.cmx)
-ARCHIVE  = xmlforms.cma
-XARCHIVE = xmlforms.cmxa
-NAME     = xmlforms
-REQUIRES = camltk str pxp
-
-xmlforms: $(ARCHIVE) ds_app.cmo
-       ocamlfind ocamlc -g -o xmlforms -custom -package "$(REQUIRES)" \
-               -linkpkg $(ARCHIVE) ds_app.cmo 
-
-xmlform.opt: $(XARCHIVE) ds_app.cmx
-       ocamlfind ocamlopt -o xmlforms.opt -custom -package "$(REQUIRES)" \
-               -linkpkg $(XARCHIVE) ds_app.cmx
-
-$(ARCHIVE): $(OBJECTS)
-       $(OCAMLC) -a -o $(ARCHIVE) $(OBJECTS)
-
-$(XARCHIVE): $(XOBJECTS)
-       $(OCAMLOPT) -a -o $(XARCHIVE) $(XOBJECTS)
-
-#----------------------------------------------------------------------
-# general rules:
-
-OPTIONS   =
-OCAMLC    = ocamlc -g $(OPTIONS) $(ROPTIONS)
-OCAMLOPT  = ocamlopt -p $(OPTIONS) $(ROPTIONS)
-OCAMLDEP  = ocamldep $(OPTIONS)
-OCAMLFIND = ocamlfind
-
-depend: *.ml *.mli 
-       $(OCAMLDEP) *.ml *.mli >depend
-
-depend.pkg: Makefile
-       $(OCAMLFIND) use -p ROPTIONS= $(REQUIRES) >depend.pkg
-
-.SUFFIXES: .cmo .cmi .cmx .ml .mli .mll .mly
-
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-.ml.cmo:
-       $(OCAMLC) -c $<
-
-.mli.cmi:
-       $(OCAMLC) -c $<
-
-.mll.ml:
-       ocamllex $<
-
-*.mli:
-
-include depend
-include depend.pkg
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/README b/helm/DEVEL/pxp/pxp/examples/xmlforms/README
deleted file mode 100644 (file)
index 806a409..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
------------------------------------------------------------------------------
-xmlforms
------------------------------------------------------------------------------
-
-THE IDEA:
-
-This example uses XML for two purposes:
-
-- The "story" and layout of the application is specified in XML
-- The data records are stored in XML
-
-An "application" is a set of "masks" or sequences of masks, and every mask
-is thought as a visible page of the application, containing layout
-elements and functional elements. Layout is specified in TeX-style using
-hboxes, vboxes, hspaces, vspaces. Functional elements are "entries" (input
-box for a string with one line), "textboxes" (input boxes with several
-lines), and buttons.
-
-See styles/ds-style.dtd for the DTD of an application specification, and
-the other xml files in this directory for examples.
-
-The entries and textboxes are bound to "slots", i.e. string variables. If
-the application is started, the slots are read from a file, and if the
-user presses a special "save" button, the slots are stored into this file.
-The format of this data file is again XML; the simplistic DTD can be found
-in styles/ds-object.dtd.
-
-
-THE IMPLEMENTATION:
-
-There is currently a mapping of the specifications to ocamltk, done by a
-program called "xmlforms".
-
-
-HOW TO COMPILE:
-
-It is assumed that "findlib" is present on your system; see ABOUT-FINDLIB
-in the toplevel directory.
-The "markup" module must have been installed.
-
-- "make xmlforms" produces a bytecode executable "xmlforms"
-- "make xmlforms.opt" produces a native executable "xmlforms.opt"
-
-Note that you cannot start the executables directly:
-
-
-HOW TO START AN APPLICATION:
-
-As "xmlforms" is a generic executable, there is a simple mechanism to bind
-it to a specific instance of an application. For example, in the "styles"
-subdirectory there is the application specification "crazy-style.xml". To
-start it, make a symlink called "crazy" referring to the "xmlforms"
-binary, set the environment variable DATASHEETS to the directory where the
-DTDs and XML files can be found, and start "crazy":
-
-       ln -s ../xmlforms crazy
-       DATASHEETS=. crazy my-record.xml
-
-(If you do not set DATASHEETS, a default directory, normally
-"/opt/xmlforms/lib" is used.)
-
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/ds_app.ml b/helm/DEVEL/pxp/pxp/examples/xmlforms/ds_app.ml
deleted file mode 100644 (file)
index 55589ea..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Tk
-open Pxp_types
-open Pxp_document
-open Pxp_yacc
-open Ds_context
-open Ds_style
-
-
-let installdir       =
-  try Sys.getenv "DATASHEETS" with
-      Not_found -> "/opt/xmlforms/lib"
-let style_sysid      = ref ""
-let object_dtd_sysid = Filename.concat installdir "ds-object.dtd"
-let object_dtd_root  = "record" 
-
-
-let rec print_error e =
-  print_endline (string_of_exn e)
-;;
-
-
-let run f arg1 arg2 =
-  try f arg1 arg2 with
-      e -> print_error e
-;;
-
-
-let edit filename cmd =
-  (* read in style definition *)
-  let index = new hash_index in
-  let style =
-    parse_document_entity
-      ~id_index:(index :> 'ext index)
-      default_config
-      (from_file !style_sysid)
-      tag_map
-  in
-  let root = style # root in
-  root # extension # prepare (index :> 'ext index);
-
-  let obj_dtd =
-    parse_dtd_entity
-      default_config
-      (from_file object_dtd_sysid)
-  in
-  obj_dtd # set_root object_dtd_root;
-
-  let topframe = openTk() in
-  let context = new context filename obj_dtd index root topframe in
-
-  Toplevel.configure topframe [ Width (Centimeters 20.0);
-                                Height (Centimeters 12.0);
-                              ];
-  Pack.propagate_set topframe false;
-  Wm.title_set topframe cmd;
-  context # goto (root # extension # start_node_name);
-  mainLoop()
-;;
-
-
-let main() =
-  let cmd = Filename.basename Sys.argv.(0) in
-  match Sys.argv with
-      [| _; filename |] ->
-       style_sysid := Filename.concat installdir (cmd ^ "-style.xml");
-       run edit filename cmd
-    | _ ->
-       prerr_endline ("usage: " ^ cmd ^ " filename");
-       exit(1)
-;;
-
-main();;
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.6  2000/07/16 19:36:03  gerd
- *     Updated.
- *
- * Revision 1.5  2000/07/08 22:03:11  gerd
- *     Updates because of PXP interface changes.
- *
- * Revision 1.4  2000/06/04 20:29:19  gerd
- *     Updates because of renamed PXP modules.
- *
- * Revision 1.3  2000/05/01 16:48:45  gerd
- *     Using the new error formatter.
- *
- * Revision 1.2  1999/12/17 21:34:29  gerd
- *     The name of the root element is set to "record" in the
- * object_dtd; otherwise the parser would not check that the root
- * element is the right element.
- *
- * Revision 1.1  1999/08/21 19:11:05  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/ds_context.ml b/helm/DEVEL/pxp/pxp/examples/xmlforms/ds_context.ml
deleted file mode 100644 (file)
index 453ca00..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Pxp_types
-open Pxp_document
-open Pxp_yacc
-
-let empty_record = new element_impl (Pxp_yacc.default_extension);;
-let empty_dnode = new data_impl Pxp_yacc.default_extension;;
-
-class context the_filename the_obj_dtd the_index the_root the_topframe =
-  object (self)
-    val filename = the_filename
-    val obj_dtd = the_obj_dtd
-    val node_index = the_index
-    val mutable obj = empty_record # create_element
-                       the_obj_dtd (T_element "record") []
-    val root = the_root
-    val topframe = the_topframe
-    val mutable wdg = None
-
-    val mutable history = ( [| |] : string array )
-    val mutable index = 0
-
-    initializer
-      self # load_obj
-
-    method obj = obj
-
-    (* history *)
-
-    method private leave_node =
-      begin match wdg with
-         None -> ()
-       | Some w -> Tk.destroy w
-      end;
-      wdg <- None
-
-    method private enter_node =
-      let where = history.(index) in
-      let n =
-       try node_index # find where with
-           Not_found -> failwith ("Mask not found: " ^ where) in
-      let w = n # extension # create_widget topframe self in
-      Tk.pack [w] (n # extension # pack_opts @ [ Tk.Expand true] );
-      wdg <- Some w
-
-
-
-    method previous =
-      if index > 0 then
-       index <- index - 1
-      else
-       raise Not_found;
-      self # leave_node;
-      self # enter_node;
-
-
-    method next =
-      if index < Array.length history - 1 then
-       index <- index + 1
-      else
-       raise Not_found;
-      self # leave_node;
-      self # enter_node;
-
-
-    method goto where =
-      assert (index <= Array.length history);
-      self # leave_node;
-      let persisting_history =
-       if index < Array.length history then
-         Array.sub history 0 (index+1)
-       else
-         history
-      in
-      history <- Array.concat [ persisting_history; [| where |] ];
-      index <- Array.length history - 1;
-      self # enter_node;
-
-
-    method current =
-      if index < Array.length history then
-       history.(index)
-      else
-       raise Not_found
-
-
-    (* read, write the slots of object *)
-
-    method search_slot name =
-      let rec search n =
-       match n # node_type with
-           T_element "string" ->
-             if n # required_string_attribute "name" = name then
-               n
-             else raise Not_found
-         | T_element _ ->
-             search_list (n # sub_nodes)
-         | T_data ->
-             raise Not_found
-         | _ ->
-             assert false
-             
-       and search_list l =
-         match l with
-            x :: l' ->
-              (try search x with Not_found -> search_list l')
-          | [] ->
-              raise Not_found
-      in
-      search obj
-
-    method get_slot name =
-      let d = (self # search_slot name) # data in
-      d
-
-    method set_slot name value =
-      let dtd = obj # dtd in
-      begin try
-       let n = self # search_slot name in
-       n # delete
-      with
-         Not_found -> ()
-      end;
-      let e_string = empty_record # create_element dtd (T_element "string")
-               [ "name", name ] in
-      let dnode = empty_dnode # create_data dtd value in
-      e_string # add_node dnode;
-      e_string # local_validate();
-      obj # add_node e_string;
-      assert(self # get_slot name = value)
-
-    (* load, save object *)
-
-
-    method load_obj =
-      if Sys.file_exists filename then begin
-       obj <- parse_content_entity
-         default_config
-         (from_file filename)
-         obj_dtd
-         default_spec
-      end
-      else begin
-       print_string "New file!\n";
-       flush stdout
-      end
-
-
-    method save_obj =
-      let fd = open_out filename in
-      try
-
-       let re1 = Str.regexp "&" in
-       let re2 = Str.regexp "<" in
-       let re3 = Str.regexp "'" in
-       let re4 = Str.regexp ">" in
-       let protect s =
-         let s1 = Str.global_replace re1 "&amp;" s in
-         let s2 = Str.global_replace re2 "&lt;" s1 in
-         let s3 = Str.global_replace re3 "&apos;" s2 in
-         let s4 = Str.global_replace re2 "&gt;" s1 in
-         s3
-       in
-
-       let rec iterate (n : 'node extension node as 'node) =
-         match n # node_type with
-             T_data ->
-               output_string fd (protect (n # data))
-           | T_element name ->
-               output_string fd ("<" ^ name ^ "\n");
-               let anames = n # attribute_names in
-               List.iter
-                 (fun aname ->
-                    let aval = n # attribute aname in
-                    let v =
-                      match aval with
-                          Value s ->
-                            aname ^ "='" ^ protect s ^ "'\n"
-                        | Valuelist l ->
-                            aname ^ "='" ^ String.concat " " (List.map protect l) ^ "'\n"
-                        | Implied_value ->
-                            ""
-                    in
-                    output_string fd v)
-                 anames;
-               output_string fd ">";
-               List.iter iterate (n # sub_nodes);
-               output_string fd ("</" ^ name ^ "\n>");
-           | _ ->
-               assert false
-       in
-
-       output_string fd "<?xml version='1.0' encoding='ISO-8859-1'?>\n";
-       iterate obj;
-       close_out fd
-      with
-         e ->
-           close_out fd;
-           raise e
-
-  end
-;;
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:31  lpadovan
- * Initial revision
- *
- * Revision 1.7  2000/08/30 15:58:49  gerd
- *     Updated.
- *
- * Revision 1.6  2000/07/23 20:25:05  gerd
- *     Update because of API change: local_validate.
- *
- * Revision 1.5  2000/07/16 19:36:03  gerd
- *     Updated.
- *
- * Revision 1.4  2000/07/08 22:03:11  gerd
- *     Updates because of PXP interface changes.
- *
- * Revision 1.3  2000/06/04 20:29:19  gerd
- *     Updates because of renamed PXP modules.
- *
- * Revision 1.2  2000/05/30 00:09:08  gerd
- *     Minor fix.
- *
- * Revision 1.1  1999/08/21 19:11:05  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/ds_style.ml b/helm/DEVEL/pxp/pxp/examples/xmlforms/ds_style.ml
deleted file mode 100644 (file)
index 08d0daa..0000000
+++ /dev/null
@@ -1,778 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Pxp_types
-open Pxp_document
-open Ds_context
-
-
-let get_dimension s =
-  let re = Str.regexp "\\([0-9]*\\(.[0-9]+\\)?\\)[ \t\n]*\\(px\\|cm\\|in\\|mm\\|pt\\)" in
-  if Str.string_match re s 0 then begin
-    let number = Str.matched_group 1 s in
-    let dim = Str.matched_group 3 s in
-    match dim with
-       "px" -> Tk.Pixels (int_of_float (float_of_string number))
-      | "cm" -> Tk.Centimeters (float_of_string number)
-      | "in" -> Tk.Inches (float_of_string number)
-      | "mm" -> Tk.Millimeters (float_of_string number)
-      | "pt" -> Tk.PrinterPoint (float_of_string number)
-      | _ -> assert false
-  end
-  else
-    failwith ("Bad dimension: " ^ s)
-;;
-
-
-class virtual shared =
-  object(self)
-
-    (* --- default_ext --- *)
-
-    val mutable node = (None : shared node option)
-
-    method clone = {< >}
-    method node =
-      match node with
-          None ->
-            assert false
-        | Some n -> n
-    method set_node n =
-      node <- Some n
-
-    (* --- shared attributes: color & font settings --- *)
-
-    val mutable fgcolor = (None : string option)
-    val mutable bgcolor = (None : string option)
-    val mutable font = (None : string option)
-
-    method fgcolor =
-      (* Get the foreground color: If there is a local value, return it;
-       * otherwise ask parent node
-       *)
-      match fgcolor with
-         Some c -> c
-       | None   -> try self # node # parent # extension # fgcolor with
-                   Not_found -> failwith "#fgcolor"
-
-    method bgcolor =
-      (* Get the background color: If there is a local value, return it;
-       * otherwise ask parent node
-       *)
-      match bgcolor with
-         Some c -> c
-       | None   -> try self # node # parent # extension # bgcolor with
-                   Not_found -> failwith "#bgcolor"
-
-    method font =
-      (* Get the current font: If there is a local value, return it;
-       * otherwise ask parent node
-       *)
-      match font with
-         Some c -> c
-       | None   -> try self # node # parent # extension # font with
-                   Not_found -> failwith "#font"
-
-    method private init_color_and_font =
-      let get_color n =
-       try
-         match self # node # attribute n with
-             Value v -> Some v
-           | Implied_value -> None
-           | _ -> assert false
-       with Not_found -> None in
-      fgcolor <- get_color "fgcolor";
-      bgcolor <- get_color "bgcolor";
-      font    <- get_color "font";      (* sic! *)
-
-
-    method private bg_color_opt =
-      [ Tk.Background (Tk.NamedColor (self # bgcolor)) ]
-
-    method private fg_color_opt =
-      [ Tk.Foreground (Tk.NamedColor (self # fgcolor)) ]
-
-    method private font_opt =
-      [ Tk.Font (self # font) ]
-
-    (* --- virtual --- *)
-
-    method virtual prepare : shared Pxp_yacc.index -> unit
-    method virtual create_widget : Widget.widget -> context -> Widget.widget
-
-    method pack_opts = ( [] : Tk.options list )
-    method xstretchable = false
-    method ystretchable = false
-
-    method accept (c:context) = ()
-
-    method private get_mask =
-      (* find parent which is a mask *)
-      let rec search n =
-       match n # node_type with
-           T_element "mask" ->
-             n # extension
-         | T_element _ ->
-             search (n # parent)
-         | _ ->
-             assert false
-      in
-      search (self # node)
-
-
-    method private accept_mask (c:context) =
-      let rec iterate n =
-       n # extension # accept c;
-       List.iter iterate (n # sub_nodes)
-      in
-      iterate (self # get_mask # node)
-
-
-    method start_node_name =
-      (failwith "#start_node_name" : string)
-
-    (* --- debug --- *)
-
-    method private name =
-      let nt = self # node # node_type in
-      match nt with
-         T_element n -> n
-       | T_data      -> "#PCDATA"
-       | _           -> assert false
-
-  end
-;;
-
-
-class default =
-  object (self)
-    inherit shared
-
-    method prepare idx =
-      self # init_color_and_font
-
-    method create_widget w c =
-      failwith "default # create_widget"
-  end
-;;
-
-
-let dummy_node = new element_impl (new default);;
-
-class application =
-  object (self)
-    inherit shared
-
-    val mutable start_node = dummy_node
-
-    method prepare idx =
-      (* prepare this node *)
-      self # init_color_and_font;
-      if fgcolor = None then fgcolor <- Some "black";
-      if bgcolor = None then bgcolor <- Some "white";
-      if font = None then font <- Some "fixed";
-      let start =
-       match self # node # attribute "start" with
-           Value v -> v
-         | _       -> assert false in
-      start_node <- (try idx # find start with
-         Not_found -> failwith "Start node not found");
-      (* iterate over the subtree *)
-      let rec iterate n =
-       n # extension # prepare idx;
-       List.iter iterate (n # sub_nodes)
-      in
-      List.iter iterate (self # node # sub_nodes)
-
-
-    method start_node_name =
-      match self # node # attribute "start" with
-         Value v -> v
-       | _       -> assert false
-
-    method create_widget w c =
-      start_node # extension # create_widget w c
-
-    method pack_opts =
-      start_node # extension # pack_opts
-  end
-;;
-
-
-class sequence =
-  object (self)
-    inherit shared
-
-    method prepare idx =
-      self # init_color_and_font;
-
-    method create_widget w c =
-      let node = List.hd (self # node # sub_nodes) in
-      node # extension # create_widget w c
-
-    method pack_opts =
-      let node = List.hd (self # node # sub_nodes) in
-      node # extension # pack_opts
-  end
-;;
-
-
-class vbox =
-  object (self)
-    inherit shared
-
-    val mutable att_halign = "left"
-
-    method prepare idx =
-      self # init_color_and_font;
-      match self # node # attribute "halign" with
-         Value v -> att_halign <- v
-       | _ -> assert false
-
-    method create_widget w c =
-      let f = Frame.create w (self # bg_color_opt) in
-      let nodes = self # node # sub_nodes in
-      let options =
-       match att_halign with
-           "left"     -> [ Tk.Anchor Tk.W ]
-         | "right"    -> [ Tk.Anchor Tk.E ]
-         | "center"   -> [ Tk.Anchor Tk.Center ]
-         | _ -> assert false
-      in
-      List.iter
-       (fun n ->
-          let opts = n # extension # pack_opts in
-          let wdg = n # extension # create_widget f c in
-          Tk.pack [wdg] (options @ opts);
-       )
-       nodes;
-      f
-
-    method pack_opts =
-      match self # xstretchable, self # ystretchable with
-         true, false  -> [ Tk.Fill Tk.Fill_X; (* Tk.Expand true *) ]
-       | false, true  -> [ Tk.Fill Tk.Fill_Y;  (* Tk.Expand true *) ]
-       | true, true   -> [ Tk.Fill Tk.Fill_Both; (* Tk.Expand true *) ]
-       | false, false -> []
-
-    method xstretchable =
-      let nodes = self # node # sub_nodes in
-      List.exists (fun n -> n # extension # xstretchable) nodes
-
-    method ystretchable =
-      let nodes = self # node # sub_nodes in
-      List.exists (fun n -> n # extension # ystretchable) nodes
-
-  end
-
-;;
-
-
-class mask =
-  object (self)
-
-    inherit vbox
-
-    method prepare idx =
-      self # init_color_and_font;
-      att_halign <- "left"
-  end
-;;
-
-
-class hbox =
-  object (self)
-    inherit shared
-
-    val mutable att_width = None
-    val mutable att_halign = "left"
-    val mutable att_valign = "top"
-
-    method prepare idx =
-      self # init_color_and_font;
-      begin match self # node # attribute "halign" with
-         Value v -> att_halign <- v
-       | _ -> assert false
-      end;
-      begin match self # node # attribute "valign" with
-         Value v -> att_valign <- v
-       | _ -> assert false
-      end;
-      begin match self # node # attribute "width" with
-         Value v       -> att_width <- Some (get_dimension v)
-       | Implied_value -> att_width <- None
-       | _ -> assert false
-      end
-
-    method create_widget w c =
-      let f1 = Frame.create w (self # bg_color_opt) in
-      let f_extra =
-       match att_width with
-           None    -> []
-         | Some wd ->
-             [ Canvas.create f1
-                 ( [ Tk.Width wd; Tk.Height (Tk.Pixels 0);
-                     Tk.Relief Tk.Flat;
-                     Tk.HighlightThickness (Tk.Pixels 0);
-                   ] @
-                   self # bg_color_opt ) ]
-      in
-      let f2 = Frame.create f1 (self # bg_color_opt) in
-      let nodes = self # node # sub_nodes in
-
-      let outer_pack_opts =
-       match att_halign with
-           "left"     -> [ Tk.Anchor Tk.W ]
-         | "right"    -> [ Tk.Anchor Tk.E ]
-         | "center"   -> [ Tk.Anchor Tk.Center ]
-         | _ -> assert false
-      in
-      let inner_pack_opts =
-       match att_valign with
-           "top"      -> [ Tk.Anchor Tk.N ]
-         | "bottom"   -> [ Tk.Anchor Tk.S ]
-         | "center"   -> [ Tk.Anchor Tk.Center ]
-         | _ -> assert false
-      in
-      List.iter
-       (fun n ->
-          let opts = n # extension # pack_opts in
-          let wdg = n # extension # create_widget f2 c in
-          Tk.pack [wdg] (inner_pack_opts @ [ Tk.Side Tk.Side_Left ] @ opts);
-       )
-       nodes;
-      let extra_opts = self # pack_opts in
-      Tk.pack (f_extra @ [f2]) (outer_pack_opts @ extra_opts);
-      f1
-
-    method pack_opts =
-      match self # xstretchable, self # ystretchable with
-         true, false  -> [ Tk.Fill Tk.Fill_X;  (* Tk.Expand true *) ]
-       | false, true  -> [ Tk.Fill Tk.Fill_Y;  (* Tk.Expand true *) ]
-       | true, true   -> [ Tk.Fill Tk.Fill_Both;  (* Tk.Expand true *) ]
-       | false, false -> []
-
-    method xstretchable =
-      let nodes = self # node # sub_nodes in
-      List.exists (fun n -> n # extension # xstretchable) nodes
-
-    method ystretchable =
-      let nodes = self # node # sub_nodes in
-      List.exists (fun n -> n # extension # ystretchable) nodes
-
-  end
-;;
-
-class vspace =
-  object (self)
-    inherit shared
-
-    val mutable att_height = Tk.Pixels 0
-    val mutable att_fill  = false
-
-    method prepare idx =
-      self # init_color_and_font;
-      begin match self # node # attribute "height" with
-         Value v       -> att_height <- get_dimension v
-       | _ -> assert false
-      end;
-      begin match self # node # attribute "fill" with
-         Value "yes" -> att_fill <- true
-       | Value "no"  -> att_fill <- false
-       | _ -> assert false
-      end
-
-
-    method create_widget w c =
-      let f = Frame.create w ( self # bg_color_opt ) in
-      let strut =
-       Canvas.create f
-         ( [ Tk.Height att_height; Tk.Width (Tk.Pixels 0);
-             Tk.Relief Tk.Flat;
-             Tk.HighlightThickness (Tk.Pixels 0);
-           ] @
-           self # bg_color_opt ) in
-      if att_fill then
-       Tk.pack [strut] [Tk.Fill Tk.Fill_Y; Tk.Expand true]
-      else
-       Tk.pack [strut] [];
-      f
-
-    method pack_opts =
-      if att_fill then [ Tk.Fill Tk.Fill_Y; Tk.Expand true ] else []
-
-    method ystretchable = att_fill
-  end
-;;
-
-class hspace =
-  object (self)
-    inherit shared
-
-
-    val mutable att_width = Tk.Pixels 0
-    val mutable att_fill  = false
-
-    method prepare idx =
-      self # init_color_and_font;
-      begin match self # node # attribute "width" with
-         Value v       -> att_width <- get_dimension v
-       | _ -> assert false
-      end;
-      begin match self # node # attribute "fill" with
-         Value "yes" -> att_fill <- true
-       | Value "no"  -> att_fill <- false
-       | _ -> assert false
-      end
-
-
-    method create_widget w c =
-      let f = Frame.create w ( self # bg_color_opt ) in
-      let strut =
-       Canvas.create f
-         ( [ Tk.Width att_width; Tk.Height (Tk.Pixels 0);
-             Tk.Relief Tk.Flat;
-             Tk.HighlightThickness (Tk.Pixels 0);
-           ] @
-           self # bg_color_opt ) in
-      if att_fill then
-       Tk.pack [strut] [Tk.Fill Tk.Fill_X; Tk.Expand true]
-      else
-       Tk.pack [strut] [];
-      f
-
-    method pack_opts =
-      if att_fill then [ Tk.Fill Tk.Fill_X; Tk.Expand true ] else []
-
-    method xstretchable = att_fill
-  end
-;;
-
-class label =
-  object (self)
-    inherit shared
-
-    val mutable att_textwidth = (-1)
-    val mutable att_halign = "left"
-
-    method prepare idx =
-      self # init_color_and_font;
-      att_textwidth <- (match self # node # attribute "textwidth" with
-                           Value v ->
-                             let w = try int_of_string v
-                             with _ -> failwith ("Not an integer: " ^ v) in
-                             w
-                         | Implied_value ->
-                             (-1)
-                         | _ -> assert false);
-      att_halign <- (match self # node # attribute "halign" with
-                        Value v -> v
-                      | _ -> assert false);
-
-
-    method create_widget w c =
-      let opts_textwidth = if att_textwidth < 0 then [] else
-                                              [ Tk.TextWidth att_textwidth ] in
-      let opts_halign =
-       match att_halign with
-           "left"     -> [ Tk.Anchor Tk.W ]
-         | "right"    -> [ Tk.Anchor Tk.E ]
-         | "center"   -> [ Tk.Anchor Tk.Center ]
-         | _ -> assert false
-      in
-      let opts_content =
-       [ Tk.Text (self # node # data) ] in
-      let label = Label.create w (opts_textwidth @ opts_halign @
-                                 opts_content @ self # bg_color_opt @
-                                 self # fg_color_opt @ self # font_opt) in
-      label
-
-  end
-;;
-
-class entry =
-  object (self)
-    inherit shared
-
-    val mutable tv = lazy (Textvariable.create())
-    val mutable att_textwidth = (-1)
-    val mutable att_slot = ""
-
-    method prepare idx =
-      self # init_color_and_font;
-      tv <- lazy (Textvariable.create());
-      att_textwidth <- (match self # node # attribute "textwidth" with
-                           Value v ->
-                             let w = try int_of_string v
-                             with _ -> failwith ("Not an integer: " ^ v) in
-                             w
-                         | Implied_value ->
-                             (-1)
-                         | _ -> assert false);
-      att_slot <- (match self # node # attribute "slot" with
-         Value v -> v
-       | _ -> assert false);
-
-    method create_widget w c =
-      let opts_textwidth = if att_textwidth < 0 then [] else
-                                              [ Tk.TextWidth att_textwidth ] in
-      let e = Entry.create w ( [ Tk.TextVariable (Lazy.force tv) ] @
-                              self # fg_color_opt @
-                              self # bg_color_opt @
-                              self # font_opt @
-                              opts_textwidth
-                            ) in
-      let s =
-       try c # get_slot att_slot with
-           Not_found -> self # node # data in
-      Textvariable.set (Lazy.force tv) s;
-      e
-
-    method accept c =
-      c # set_slot att_slot (Textvariable.get (Lazy.force tv))
-
-  end
-;;
-
-class textbox =
-  object (self)
-    inherit shared
-
-    val mutable att_textwidth = (-1)
-    val mutable att_textheight = (-1)
-    val mutable att_slot = ""
-    val mutable last_widget = None
-
-    method prepare idx =
-      self # init_color_and_font;
-      att_textwidth <- (match self # node # attribute "textwidth" with
-                           Value v ->
-                             let w = try int_of_string v
-                             with _ -> failwith ("Not an integer: " ^ v) in
-                             w
-                         | Implied_value ->
-                             (-1)
-                         | _ -> assert false);
-      att_textheight <- (match self # node # attribute "textheight" with
-                           Value v ->
-                             let w = try int_of_string v
-                             with _ -> failwith ("Not an integer: " ^ v) in
-                             w
-                         | Implied_value ->
-                             (-1)
-                         | _ -> assert false);
-      att_slot <- (match self # node # attribute "slot" with
-                      Value v -> v
-                    | Implied_value -> ""
-                    | _ -> assert false);
-
-
-    method create_widget w c =
-      let opts_textwidth = if att_textwidth < 0 then [] else
-                                              [ Tk.TextWidth att_textwidth ] in
-      let opts_textheight = if att_textheight < 0 then [] else
-                                           [ Tk.TextHeight att_textheight ] in
-      let f = Frame.create w (self # bg_color_opt) in
-      let vscrbar = Scrollbar.create f [ Tk.Orient Tk.Vertical ] in
-      let e = Text.create f ( [ ] @
-                             self # fg_color_opt @
-                             self # bg_color_opt @
-                             self # font_opt @
-                             opts_textwidth @ opts_textheight
-                           ) in
-      last_widget <- Some e;
-      Scrollbar.configure vscrbar [ Tk.ScrollCommand
-                                     (fun s -> Text.yview e s);
-                                   Tk.Width (Tk.Pixels 9) ];
-      Text.configure e [ Tk.YScrollCommand
-                          (fun a b -> Scrollbar.set vscrbar a b) ];
-      let s =
-       if att_slot <> "" then
-         try c # get_slot att_slot with
-             Not_found -> self # node # data 
-       else 
-         self # node # data 
-      in
-      (* Text.insert appends always a newline to the last line; so strip 
-       * an existing newline first
-       *)
-      let s' = 
-       if s <> "" & s.[String.length s - 1] = '\n' then
-         String.sub s 0 (String.length s - 1)
-       else 
-         s in
-      Text.insert e (Tk.TextIndex(Tk.End,[])) s' [];
-      if att_slot = "" then
-       Text.configure e [ Tk.State Tk.Disabled ];
-      Tk.pack [e] [ Tk.Side Tk.Side_Left ];
-      Tk.pack [vscrbar] [ Tk.Side Tk.Side_Left; Tk.Fill Tk.Fill_Y ];
-      f
-
-    method accept c =
-      if att_slot <> "" then
-       match last_widget with
-           None -> ()
-         | Some w ->
-             let s =
-               Text.get
-                 w
-                 (Tk.TextIndex(Tk.LineChar(1,0),[]))
-                 (Tk.TextIndex(Tk.End,[])) in
-             c # set_slot att_slot s
-
-  end
-;;
-
-class button =
-  object (self)
-    inherit shared
-
-    val mutable att_label = ""
-    val mutable att_action = ""
-    val mutable att_goto = ""
-
-    method prepare idx =
-      self # init_color_and_font;
-      att_label <- (match self # node # attribute "label" with
-                       Value v -> v
-                     | _ -> assert false);
-      att_action <- (match self # node # attribute "action" with
-                        Value v -> v
-                      | _ -> assert false);
-      att_goto <- (match self # node # attribute "goto" with
-                      Value v -> v
-                    | Implied_value -> ""
-                    | _ -> assert false);
-      if att_action = "goto" then begin
-       try let _ = idx # find att_goto in () with
-           Not_found -> failwith ("Target `" ^ att_goto ^ "' not found")
-      end;
-      if att_action = "list-prev" or att_action = "list-next" then begin
-       let m = self # get_mask in
-       if m # node # parent # node_type <> T_element "sequence" then
-         failwith ("action " ^ att_action ^ " must not be used out of <sequence>");
-      end;
-
-
-    method create_widget w c =
-      let cmd () =
-       self # accept_mask c;
-       match att_action with
-           "goto" ->
-             c # goto att_goto
-         | "save" ->
-             c # save_obj
-         | "exit" ->
-             Protocol.closeTk()
-         | "save-exit" ->
-             c # save_obj;
-             Protocol.closeTk()
-         | "list-prev" ->
-             let m = self # get_mask # node in
-             let s = m # parent in
-             let rec search l =
-               match l with
-                   x :: y :: l' ->
-                     if y == m then
-                       match x # attribute "name" with
-                           Value s -> c # goto s
-                         | _ -> assert false
-                     else
-                       search (y :: l')
-                 | _ -> ()
-             in
-             search (s # sub_nodes)
-         | "list-next" ->
-             let m = self # get_mask # node in
-             let s = m # parent in
-             let rec search l =
-               match l with
-                   x :: y :: l' ->
-                     if x == m then
-                       match y # attribute "name" with
-                           Value s -> c # goto s
-                         | _ -> assert false
-                     else
-                       search (y :: l')
-                 | _ -> ()
-             in
-             search (s # sub_nodes)
-         | "hist-prev" ->
-             (try c # previous with Not_found -> ())
-         | "hist-next" ->
-             (try c # next with Not_found -> ())
-         | _ -> ()
-      in
-      let b = Button.create w ( [ Tk.Text att_label; Tk.Command cmd ] @
-                               self # fg_color_opt @
-                               self # bg_color_opt @
-                               self # font_opt ) in
-      b
-
-
-  end
-;;
-
-
-(**********************************************************************)
-
-open Pxp_yacc
-
-let tag_map =
-  make_spec_from_mapping
-    ~data_exemplar:(new data_impl (new default))
-    ~default_element_exemplar:(new element_impl (new default))
-    ~element_mapping:
-       (let m = Hashtbl.create 50 in
-       Hashtbl.add m "application"
-                     (new element_impl (new application));
-       Hashtbl.add m "sequence"
-                     (new element_impl (new sequence));
-       Hashtbl.add m "mask"
-                     (new element_impl (new mask));
-       Hashtbl.add m "vbox"
-                     (new element_impl (new vbox));
-       Hashtbl.add m "hbox"
-                     (new element_impl (new hbox));
-       Hashtbl.add m "vspace"
-                     (new element_impl (new vspace));
-       Hashtbl.add m "hspace"
-                     (new element_impl (new hspace));
-       Hashtbl.add m "label"
-                     (new element_impl (new label));
-       Hashtbl.add m "entry"
-                     (new element_impl (new entry));
-       Hashtbl.add m "textbox"
-                     (new element_impl (new textbox));
-       Hashtbl.add m "button"
-                     (new element_impl (new button));
-       m)
-    ()
-;;
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:31  lpadovan
- * Initial revision
- *
- * Revision 1.5  2000/08/30 15:58:49  gerd
- *     Updated.
- *
- * Revision 1.4  2000/07/16 19:36:03  gerd
- *     Updated.
- *
- * Revision 1.3  2000/07/08 22:03:11  gerd
- *     Updates because of PXP interface changes.
- *
- * Revision 1.2  2000/06/04 20:29:19  gerd
- *     Updates because of renamed PXP modules.
- *
- * Revision 1.1  1999/08/21 19:11:05  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/styles/Makefile b/helm/DEVEL/pxp/pxp/examples/xmlforms/styles/Makefile
deleted file mode 100644 (file)
index c0068a5..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-.PHONY: all
-all:
-
-.PHONY: clean
-clean:
-
-.PHONY: CLEAN
-CLEAN: clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~
-
-.PHONY: symlinks
-symlinks:
-       for x in *-style.xml; do ln -s ../xmlforms $${x%-style.xml} || true; done
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/styles/address-style.xml b/helm/DEVEL/pxp/pxp/examples/xmlforms/styles/address-style.xml
deleted file mode 100644 (file)
index d3af5da..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- $Id$ -->
-
-<!DOCTYPE application SYSTEM "ds-style.dtd" [
-<!ENTITY h1.font  '-*-helvetica-bold-r-*-*-18-*-*-*-*-*-*-*'>
-<!ENTITY h2.font  '-*-helvetica-bold-r-*-*-14-*-*-*-*-*-*-*'>
-<!ENTITY h3.font  '-*-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*'>
-<!ENTITY dfl.font '-*-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*'>
-<!ENTITY dfl.bold.font '-*-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*'>
-<!ENTITY in.font  '-*-lucidatypewriter-medium-r-*-*-12-*-*-*-*-*-*-*'>
-
-<!ENTITY bg.button 'lightblue'>
-<!ENTITY bg.hilfe  '#E0E0E0'>
-<!ENTITY fg.hilfe  'black'>
-
-<!ENTITY headline
-  '<vbox>
-     <label font="&h2.font;" fgcolor="darkgreen">More about person...</label>
-     <vspace height="2mm"/>
-     <hbox>
-        <hbox bgcolor="black">
-           <hspace width="18cm"/>
-           <vbox><vspace height="2px"/></vbox>
-        </hbox>
-        <hspace width="5mm"/>
-     </hbox>
-     <vspace height="3mm"/>
-   </vbox>'>
-
-<!ENTITY help.headline
-  '<vbox>
-     <label font="&h2.font;" fgcolor="darkgreen">Help</label>
-     <vspace height="2mm"/>
-     <hbox>
-        <hbox bgcolor="black">
-           <hspace width="18cm"/>
-           <vbox><vspace height="2px"/></vbox>
-        </hbox>
-        <hspace width="5mm"/>
-     </hbox>
-     <vspace height="3mm"/>
-   </vbox>'>
-
-<!ENTITY info.headline
-  '<vbox>
-     <label font="&h2.font;" fgcolor="darkgreen">About xmlforms</label>
-     <vspace height="2mm"/>
-     <hbox>
-        <hbox bgcolor="black">
-           <hspace width="18cm"/>
-           <vbox><vspace height="2px"/></vbox>
-        </hbox>
-        <hspace width="5mm"/>
-     </hbox>
-     <vspace height="3mm"/>
-   </vbox>'>
-
-<!ENTITY footline
-  '<vbox>
-     <hbox>
-        <hbox bgcolor="black">
-           <hspace width="18cm"/>
-           <vbox><vspace height="2px"/></vbox>
-        </hbox>
-        <hspace width="5mm"/>
-     </hbox>
-     <vspace height="2mm"/>
-     <hbox>
-       <button bgcolor="&bg.button;" label="Previous" action="list-prev"/>
-       <button bgcolor="&bg.button;" label="Next" action="list-next"/>
-       <hspace width="0pt" fill="yes"/>
-       <button bgcolor="&bg.button;" label="Home" goto="start-page"/>
-       <hspace width="5mm"/>
-      </hbox>
-   </vbox>'>
-
-<!ENTITY help.footline
-  '<vbox>
-     <hbox>
-        <hbox bgcolor="black">
-           <hspace width="18cm"/>
-           <vbox><vspace height="2px"/></vbox>
-        </hbox>
-        <hspace width="5mm"/>
-     </hbox>
-     <vspace height="2mm"/>
-     <hbox>
-       <button bgcolor="&bg.button;" label="Back" action="hist-prev"/>
-       <hspace width="0pt" fill="yes"/>
-      </hbox>
-   </vbox>'>
-
-<!ENTITY info.footline '&help.footline;'>
-
-]>
-
-<!-- ***************************************************************** -->
-<!-- ************************               ************************** -->
-<!-- ************************ Starting page ************************** -->
-<!-- ************************               ************************** -->
-<!-- ***************************************************************** -->
-
-<application start="start-page"
-             font="&dfl.font;"
->
-
-  <mask name="start-page">
-    <vspace height="5mm"/>
-    <hbox>
-      <hspace width="5mm"/>
-      <vbox>
-       <vbox font="&h1.font;">
-         <label>A sample xmlforms application:</label>
-         <label>Address editor</label>
-       </vbox>
-       <vspace height="1cm"/>
-       <vbox>
-         <hbox>
-           <hbox width="6cm" halign="right">
-             <label>Name:</label>
-           </hbox>
-           <entry font="&in.font;" textwidth="40" slot="person.name"/>
-         </hbox>
-         <hbox>
-           <hbox width="6cm" halign="right">
-             <label>Postal address:</label>
-           </hbox>
-           <textbox font="&in.font;" 
-                    textwidth="40" 
-                    textheight="5"
-                    slot="person.address"/>
-         </hbox>
-         <hbox>
-           <hbox width="6cm" halign="right">
-             <label>Email:</label>
-           </hbox>
-           <entry font="&in.font;" textwidth="40" slot="person.email"/>
-         </hbox>
-         <hbox>
-           <hbox width="6cm" halign="right">
-             <label>Telephone number:</label>
-           </hbox>
-           <entry font="&in.font;" textwidth="20" slot="person.phone-number"/>
-         </hbox>
-       </vbox>
-       <vspace height="1cm"/>
-       <hbox>
-         <hspace width="3cm"/>
-         <hbox width="8cm">
-           <vbox>
-             <button bgcolor="&bg.button;"
-                     label="More about this person..."
-                     goto="person-list"/>
-             <button bgcolor="&bg.button;"
-                     label="Save"
-                     action="save"/>
-           </vbox>
-          </hbox>
-          <hbox>
-            <vbox>
-              <button bgcolor="&bg.button;"
-                     label="Info..."
-                     goto="info"/>
-             <button bgcolor="&bg.button;"
-                     label="Exit (without saving)"
-                     action="exit"/>
-            </vbox>
-          </hbox>
-       </hbox>
-       <vspace height="0px" fill="yes"/>
-       <hbox>
-         <hspace width="0px" fill="yes"/>
-       </hbox>
-      </vbox>
-    </hbox>
-  </mask>
-
-  <!-- ***************************************************************** -->
-  <!-- **********************               **************************** -->
-  <!-- ********************** More about... **************************** -->
-  <!-- **********************               **************************** -->
-  <!-- ***************************************************************** -->
-
-  <sequence name="person-list">
-    <mask name="Department">
-      <!-- ************************** HEADER ************************** -->
-      <vspace height="5mm"/>
-      <hbox>
-       <hspace width="5mm"/>
-       <vbox>
-         &headline;
-         <!-- ************************** CONTENT ************************* -->
-         <label font="&h1.font;">Department</label>
-         <vspace height="3mm"/>
-         <label>The person is working in this department:</label>
-         <hbox>
-           <hspace width="1cm"/>
-           <entry font="&in.font;"
-                  textwidth="70"
-                  slot="person.department"/>
-         </hbox>
-         <vspace height="3mm"/>
-         <label>The project he/she is working for:</label>
-         <hbox>
-           <hspace width="1cm"/>
-           <textbox font="&in.font;"
-                    textwidth="70"
-                    textheight="5"
-                    slot="person.project"/>
-         </hbox>
-         <vspace height="3mm"/>
-         <button bgcolor="&bg.button;"
-                 label="Help"
-                 goto="help.department"/>
-         <!-- ************************************************************ -->
-       </vbox>
-      </hbox>
-      <!-- ************************** FOOTER ************************** -->
-      <vspace height="0px" fill="yes"/>
-      <hbox>
-       <hspace width="5mm"/>
-       &footline;
-      </hbox>
-    </mask>
-
-
-    <mask name="business-contacts">
-      <!-- ************************** HEADER ************************** -->
-      <vspace height="5mm"/>
-      <hbox>
-       <hspace width="5mm"/>
-       <vbox>
-         &headline;
-         <!-- ************************** CONTENT ************************* -->
-         <label font="&h1.font;">Business Contacts</label>
-         <vspace height="3mm"/>
-         <label>Notes about contacts:</label>
-         <hbox>
-           <hspace width="1cm"/>
-           <textbox font="&in.font;"
-                    textwidth="70"
-                    textheight="10"
-                    slot="person.contacts"/>
-         </hbox>
-         <vspace height="3mm"/>
-         <button bgcolor="&bg.button;"
-                 label="Help"
-                 goto="help.business-contacts"/>
-         <!-- ************************************************************ -->
-       </vbox>
-      </hbox>
-      <!-- ************************** FOOTER ************************** -->
-      <vspace height="0px" fill="yes"/>
-      <hbox>
-       <hspace width="5mm"/>
-       &footline;
-      </hbox>
-    </mask>
-
-  </sequence>
-
-  <!-- ***************************************************************** -->
-  <!-- *****************************       ***************************** -->
-  <!-- ***************************** Help  ***************************** -->
-  <!-- *****************************       ***************************** -->
-  <!-- ***************************************************************** -->
-
-  <mask name="help.department">
-    <!-- ************************** HEADER ************************** -->
-    <vspace height="5mm"/>
-    <hbox>
-      <hspace width="5mm"/>
-      <vbox>
-       &help.headline;
-       <!-- ************************** CONTENT ************************* -->
-       <label font="&h1.font;">Department</label>
-       <vspace height="3mm"/>
-        <textbox fgcolor="&fg.hilfe;"
-                bgcolor="&bg.hilfe;"
-                textheight="15"
-                textwidth="70"
->The help system should be designed to help you filling out your form, but
-writing help texts is so stupid...
-</textbox>
-       <!-- ************************************************************ -->
-      </vbox>
-    </hbox>
-    <!-- ************************** FOOTER ************************** -->
-    <vspace height="0px" fill="yes"/>
-    <hbox>
-      <hspace width="5mm"/>
-      &help.footline;
-    </hbox>
-  </mask>
-
-  <mask name="help.business-contacts">
-    <!-- ************************** HEADER ************************** -->
-    <vspace height="5mm"/>
-    <hbox>
-      <hspace width="5mm"/>
-      <vbox>
-       &help.headline;
-       <!-- ************************** CONTENT ************************* -->
-       <label font="&h1.font;">Business Contacts</label>
-       <vspace height="3mm"/>
-        <textbox fgcolor="&fg.hilfe;"
-                bgcolor="&bg.hilfe;"
-                textheight="15"
-                textwidth="70"
->It is often helpful to remember the last telephone and/or email contacts
-quickly.
-</textbox>
-       <!-- ************************************************************ -->
-      </vbox>
-    </hbox>
-    <!-- ************************** FOOTER ************************** -->
-    <vspace height="0px" fill="yes"/>
-    <hbox>
-      <hspace width="5mm"/>
-      &help.footline;
-    </hbox>
-  </mask>
-
-  <!-- ***************************************************************** -->
-  <!-- ***************************************************************** -->
-  <!-- ****************************** Info ***************************** -->
-  <!-- ***************************************************************** -->
-  <!-- ***************************************************************** -->
-
-  <mask name="info">
-    <!-- ************************** HEADER ************************** -->
-    <vspace height="5mm"/>
-    <hbox>
-      <hspace width="5mm"/>
-      <vbox>
-       &info.headline;
-       <!-- ************************** CONTENT ************************* -->
-       <vspace height="3mm"/>
-        <textbox fgcolor="&fg.hilfe;"
-                bgcolor="&bg.hilfe;"
-                textheight="15"
-                textwidth="70"
-><![CDATA[About "xmlforms":
-Version <unknown>,
-written by Gerd Stolpmann
-
-Contact: Gerd.Stolpmann@darmstadt.netsurf.de
-]]></textbox>
-       <!-- ************************************************************ -->
-      </vbox>
-    </hbox>
-    <!-- ************************** FOOTER ************************** -->
-    <vspace height="0px" fill="yes"/>
-    <hbox>
-      <hspace width="5mm"/>
-      &info.footline;
-    </hbox>
-  </mask>
-
-
-</application>
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/styles/crazy-style.xml b/helm/DEVEL/pxp/pxp/examples/xmlforms/styles/crazy-style.xml
deleted file mode 100644 (file)
index cce8df0..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE application SYSTEM "./ds-style.dtd" [
-  <!ENTITY vz '<button label="&lt;" action="list-prev"/>
-               <button label=">" action="list-next"/>
-               <button label="exit" goto="first"/>'>
-]
->
-
-<application start="first">
-<mask name="first" font="-*-lucidatypewriter-medium-r-*-*-12-*-*-*-*-*-*-*">
-<vbox halign="right">
-<label>one</label>
-<label bgcolor="green">Number two</label>
-<hbox width="4cm" halign="center" valign="bottom" bgcolor="red" fgcolor="blue">
-<vbox>
-<label>a1</label>
-<vspace height="1cm"/>
-<label>a2</label>
-</vbox>
-<label>b
-c</label>
-</hbox>
-</vbox>
-<textbox slot="q" textheight="5" textwidth="60">A Text</textbox>
-<button label="sequence" goto="seq"/>
-<label bgcolor="blue">A very long label, bigger than the box</label>
-<vspace height="2cm" fill="yes"/>
-<hbox><button label="left" bgcolor="yellow" goto="second"/><hspace width="0px" fill="yes"/>
-<entry slot="a" textwidth="10" fgcolor="red">right</entry>
-</hbox>
-</mask>
-
-<mask name="second">
-<button label="main" bgcolor="yellow" goto="first"/>
-<button label="previous" action="hist-prev"/>
-<button label="save" action="save"/>
-</mask>
-
-<sequence name="seq">
-<mask name="n1">
-<label>n1</label>
-&vz;
-</mask>
-<mask name="n2">
-<label>n2</label>
-&vz;
-</mask>
-<mask name="n3">
-<label>n3</label>
-&vz;
-</mask>
-<mask name="n4">
-<label>n4</label>
-&vz;
-</mask>
-<mask name="n5">
-<label>n5</label>
-&vz;
-</mask>
-</sequence>
-
-</application>
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/styles/ds-object.dtd b/helm/DEVEL/pxp/pxp/examples/xmlforms/styles/ds-object.dtd
deleted file mode 100644 (file)
index 750300c..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-<!-- $Id$ -->
-
-<!ELEMENT record (string)*>
-
-<!ELEMENT string (#PCDATA)>
-<!ATTLIST string
-          name ID #REQUIRED>
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/styles/ds-style.dtd b/helm/DEVEL/pxp/pxp/examples/xmlforms/styles/ds-style.dtd
deleted file mode 100644 (file)
index 2f8b7a2..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-<!-- $Id$ -->
-
-<!-- entities describing content models -->
-
-<!ENTITY % vertical.only    "vspace">
-<!ENTITY % horizontal.only  "hspace">
-<!ENTITY % mixed            "vbox|hbox|label|entry|textbox|button">
-
-
-<!-- entities describing attribute type -->
-
-<!ENTITY % att.valign       "(top|bottom|center)">
-<!ENTITY % att.halign       "(left|right|center)">
-
-
-<!ENTITY % default.atts     "bgcolor CDATA   #IMPLIED
-                             fgcolor CDATA   #IMPLIED
-                             font    CDATA   #IMPLIED">
-
-<!-- "bgcolor", "fgcolor", and "font" are attribute applicable to every
-     element. They set the background color, foreground color, resp. the
-     font of the element and all sub elements that do not specifiy another
-     value.
-     Colors: all X windows names are allowed, e.g. "black", "white",
-     "lavenderblush", or "#A0B1C2".
-     Font: again X windows font names
-  -->
-
-
-<!ELEMENT application (mask|sequence)+>
-<!ATTLIST application
-          start IDREF #REQUIRED
-          %default.atts;
->
-
-<!-- An "application" is the top-level element. The "start" attribute must 
-     contain the name of the mask or mask sequence to start with.
-  -->
-
-
-<!ELEMENT sequence (mask)+>
-<!ATTLIST sequence
-          name ID #REQUIRED
-          %default.atts;
->
-
-<!-- A "sequence" of masks. In a sequence, you can use the special button
-     actions "list-prev" and "list-next" that go to the previous mask resp.
-     the next mask of the sequence.
-  -->
-
-
-<!ELEMENT mask (%vertical.only;|%horizontal.only;|%mixed;)*>
-<!ATTLIST mask
-          name ID #REQUIRED
-          %default.atts;
->
-
-<!-- A "mask" contains layout and functional elements of a visible page. -->
-
-
-<!ELEMENT vbox (%vertical.only;|%mixed;)*>
-<!ATTLIST vbox
-          halign %att.halign; "left"
-          %default.atts;
->
-
-<!-- A "vbox" (vertical box) renders the inner material in vertical direction.
-     The "halign" attribute specifies whether the inner material should be
-     left-aligned, right-aligned, or centered.
-  -->
-
-<!ELEMENT hbox (%horizontal.only;|%mixed;)*>
-<!ATTLIST hbox
-          width CDATA         #IMPLIED
-          halign %att.halign; "left"
-          valign %att.valign; "top"
-          %default.atts;
->
-
-<!-- An "hbox" (horizontal box) renders the inner material in horizontal
-     direction. The "valign" attribute specifies whether the inner material 
-     should be top-aligned, bottom-aligned, or centered.
-     Normally, the width of an hbox is the sum of its members, but you can
-     also widen a box by specifying the "width" attribute. This is a number
-     with a dimension, e.g. "10.5 cm", "105 mm", "4.13 in". Other dimensions
-     are "pt" (points) and "px" (pixels).
-     If "width" is given, you may also set "halign" (see vbox for possible
-     values).
-  -->
-
-<!ELEMENT vspace EMPTY>
-<!ATTLIST vspace
-          height CDATA      #REQUIRED
-          fill  (yes|no)    "no"
-          %default.atts;
->
-
-<!-- "vspace" is a vertical space of given "height" (again a number with a 
-     dimension, see hbox). 
-     If "fill" is "yes", the space is extended as much as possible.
-  -->
-
-<!ELEMENT hspace EMPTY>
-<!ATTLIST hspace
-          width CDATA       #REQUIRED
-          fill  (yes|no)    "no"
-          %default.atts;
->
-
-<!-- "hspace" is a horizontal space of given "width" (again a number with a 
-     dimension, see hbox). 
-     If "fill" is "yes", the space is extended as much as possible.
-  -->
-
-<!ELEMENT label (#PCDATA)>
-<!ATTLIST label
-          textwidth CDATA    #IMPLIED
-          halign %att.halign; "left"
-          %default.atts;
->
-
-<!-- A "label" is a piece of constant text. The text is included as #PCDATA
-     in the element. 
-     You may set "textwidth" to a (dimensionless) number to specify a fixed
-     width. In this case, "halign" determines the horizontal alignment.
-  -->
-
-<!ELEMENT entry (#PCDATA)>
-<!ATTLIST entry
-          textwidth CDATA   #REQUIRED
-          slot      NMTOKEN #REQUIRED
-          %default.atts;
->
-
-<!-- An "entry" is an editable text line. "textwidth" specifies the width of
-     the visible line (but the contents can be longer). "slot" is the name of
-     a slot that is associated with the element.
-     If the element contains #PCDATA, this is used as default value if 
-     the slot has not yet been filled.
-  -->
-
-<!ELEMENT textbox (#PCDATA)>
-<!ATTLIST textbox
-          textwidth  CDATA   #REQUIRED
-          textheight CDATA   #REQUIRED
-          slot       NMTOKEN #IMPLIED
-          %default.atts;
->
-
-<!-- A "textbox" is a text box with dimensions "textwidth" and "textheight"
-     (both dimensionless number). 
-     "slot" is the name of a slot that is associated with the element.
-     If the element contains #PCDATA, this is used as default value if 
-     the slot has not yet been filled.
-     If you omit "slot", the #PCDATA is displayed read-only.
-  -->
-
-<!ELEMENT button EMPTY>
-<!ATTLIST button
-          label  CDATA        #REQUIRED
-          action (goto|save|exit|save-exit|list-prev|list-next|
-                  hist-prev|hist-next) "goto"
-          goto   IDREF        #IMPLIED
-          %default.atts;
->
-
-<!-- A "button" is specified as follows:
-     - "label" is what is written on the button
-     - "action" specifies what to if the button is pressed:
-       - "goto":  jump to another mask or mask sequence whose name is given
-                  in the attribute "goto"
-       - "save":  save the record
-       - "exit":  exit the application
-       - "save-exit": save, then exit
-       - "list-prev": jump to the previous mask in the sequence
-       - "list-next": jump to the next mask in the sequence
-       - "hist-prev": jump to the mask that has actually been the predecessor
-       - "hist-next": jump to the mask that has actually been the successor
-  -->
-
-
diff --git a/helm/DEVEL/pxp/pxp/examples/xmlforms/styles/mini-style.xml b/helm/DEVEL/pxp/pxp/examples/xmlforms/styles/mini-style.xml
deleted file mode 100644 (file)
index 844235c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE application SYSTEM "./ds-style.dtd" [
-]>
-
-<application start="first">
-<mask name="first" font="-*-lucidatypewriter-medium-r-*-*-12-*-*-*-*-*-*-*">
-<label>This is a label</label>
-</mask>
-</application>
diff --git a/helm/DEVEL/pxp/pxp/lexers/Makefile b/helm/DEVEL/pxp/pxp/lexers/Makefile
deleted file mode 100644 (file)
index 63ade70..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-all_iso88591: generate_iso88591
-       $(MAKE) -f Makefile.code all_iso88591
-
-opt_iso88591: generate_iso88591
-       $(MAKE) -f Makefile.code opt_iso88591
-
-all_utf8: generate_utf8
-       $(MAKE) -f Makefile.code all_utf8
-
-opt_utf8: generate_utf8
-       $(MAKE) -f Makefile.code opt_utf8
-
-
-
-generate_iso88591:
-       $(MAKE) -f Makefile.generate all_iso88591
-       rm -f objects_iso88591 objects_utf8
-       $(MAKE) -f Makefile.generate objects_iso88591
-       touch objects_utf8
-       $(MAKE) -f Makefile.generate depend
-
-generate_utf8:
-       $(MAKE) -f Makefile.generate all_utf8
-       rm -f objects_iso88591 objects_utf8
-       $(MAKE) -f Makefile.generate objects_utf8
-       touch objects_iso88591
-       $(MAKE) -f Makefile.generate depend
-
-
-
-clean:
-       touch depend objects
-       $(MAKE) -f Makefile.code clean
-       $(MAKE) -f Makefile.generate clean
diff --git a/helm/DEVEL/pxp/pxp/lexers/Makefile.code b/helm/DEVEL/pxp/pxp/lexers/Makefile.code
deleted file mode 100644 (file)
index 781f296..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-
-LARCHIVE_iso88591  = pxp_lex_iso88591.cma
-LARCHIVE_utf8      = pxp_lex_utf8.cma
-XLARCHIVE_iso88591 = $(LARCHIVE_iso88591:.cma=.cmxa)
-XLARCHIVE_utf8     = $(LARCHIVE_utf8:.cma=.cmxa)
-
-# LOBJECTS_* and XLOBJECTS_* are included from "objects_*":
-include objects_iso88591
-include objects_utf8
-
-#----------------------------------------------------------------------
-
-all_iso88591: $(LARCHIVE_iso88591)
-opt_iso88591: $(XLARCHIVE_iso88591)
-all_utf8:     $(LARCHIVE_utf8)
-opt_utf8:     $(XLARCHIVE_utf8)
-
-$(LARCHIVE_iso88591): $(LOBJECTS_iso88591)
-       $(OCAMLC) -a -o $(LARCHIVE_iso88591) $(LOBJECTS_iso88591)
-
-$(XLARCHIVE_iso88591): $(XLOBJECTS_iso88591)
-       $(OCAMLOPT) -a -o $(XLARCHIVE_iso88591) $(XLOBJECTS_iso88591)
-
-$(LARCHIVE_utf8): $(LOBJECTS_utf8)
-       $(OCAMLC) -a -o $(LARCHIVE_utf8) $(LOBJECTS_utf8)
-
-$(XLARCHIVE_utf8): $(XLOBJECTS_utf8)
-       $(OCAMLOPT) -a -o $(XLARCHIVE_utf8) $(XLOBJECTS_utf8)
-
-#----------------------------------------------------------------------
-# general rules:
-
-OPTIONS   =
-OCAMLC    = ocamlfind ocamlc -g -I .. -package netstring $(OPTIONS)
-OCAMLOPT  = ocamlfind ocamlopt -p -I .. -package netstring $(OPTIONS) 
-
-.SUFFIXES: .cmo .cmi .cmx .ml .mli 
-
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-.ml.cmo:
-       $(OCAMLC) -c $<
-
-.mli.cmi:
-       $(OCAMLC) -c $<
-
-
-*.mli:
-
-clean:
-       rm -f *.cmo *.cmx *.cma *.cmxa *.cmi *.o *.a
-
-include depend
diff --git a/helm/DEVEL/pxp/pxp/lexers/Makefile.generate b/helm/DEVEL/pxp/pxp/lexers/Makefile.generate
deleted file mode 100644 (file)
index 8ee39cb..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-LEXERSRC = pxp_lex_misc.src \
-          pxp_lex_document.src \
-          pxp_lex_content.src \
-          pxp_lex_within_tag.src \
-          pxp_lex_document_type.src \
-          pxp_lex_declaration.src \
-          pxp_lex_dtd_string.src \
-          pxp_lex_content_string.src \
-          pxp_lex_name_string.src 
-
-OTHERSRC = open_pxp_lex_aux_iso88591.src \
-          pxp_lex_aux.src \
-          pxp_lex_defs_iso88591.def
-
-LEXERMLL_iso88591 = $(LEXERSRC:.src=_iso88591.mll)
-LEXERMLL_utf8     = $(LEXERSRC:.src=_utf8.mll)
-
-LEXERML_iso88591  = $(LEXERSRC:.src=_iso88591.ml)
-LEXERML_utf8      = $(LEXERSRC:.src=_utf8.ml)
-
-LEXERCMO_iso88591 = pxp_lex_aux_iso88591.cmo $(LEXERSRC:.src=_iso88591.cmo)
-LEXERCMO_utf8     = pxp_lex_aux_utf8.cmo     $(LEXERSRC:.src=_utf8.cmo)
-
-LEXERCMX_iso88591 = $(LEXERCMO_iso88591:.cmo=.cmx)
-LEXERCMX_utf8     = $(LEXERCMO_utf8:.cmo=.cmx)
-
-.PHONY: all_iso88591
-all_iso88591: iso88591_done 
-
-.PHONY: all_utf8
-all_utf8: utf8_done
-
-iso88591_done: $(LEXERSRC) $(OTHERSRC)
-       ../tools/insert_variant -variant iso88591 $(LEXERSRC)
-       for file in $(LEXERMLL_iso88591); do ocamllex $$file; done
-       touch iso88591_done
-
-utf8_done: $(LEXERSRC) $(OTHERSRC) pxp_lex_defs_utf8.def
-       ../tools/insert_variant -variant utf8 $(LEXERSRC)
-       for file in $(LEXERMLL_utf8); do ocamllex $$file; done
-       touch utf8_done
-
-pxp_lex_defs_utf8.def: pxp_lex_defs_generic.def pxp_lex_defs_drv_utf8.def
-       ../tools/ucs2_to_utf8/ucs2_to_utf8 <pxp_lex_defs_generic.def \
-                                  >pxp_lex_defs_utf8.def || \
-               rm -f pxp_lex_defs_utf8.def
-       cat pxp_lex_defs_drv_utf8.def >>pxp_lex_defs_utf8.def
-
-objects_iso88591:
-       echo LOBJECTS_iso88591  = $(LEXERCMO_iso88591)  >objects_iso88591
-       echo XLOBJECTS_iso88591 = $(LEXERCMX_iso88591) >>objects_iso88591
-
-objects_utf8:
-       echo LOBJECTS_utf8  = $(LEXERCMO_utf8)  >objects_utf8
-       echo XLOBJECTS_utf8 = $(LEXERCMX_utf8) >>objects_utf8
-
-depend: *.ml *.mli 
-       ocamldep *.ml *.mli >depend
-
-.PHONY: clean
-clean:
-       rm -f $(LEXERMLL_iso88591) $(LEXERML_iso88591) iso88591_done \
-             $(LEXERMLL_utf8)     $(LEXERML_utf8)     utf8_done \
-             pxp_lex_defs_utf8.def \
-             objects_iso88591 objects_utf8 depend
-
-*.mli:
diff --git a/helm/DEVEL/pxp/pxp/lexers/objects b/helm/DEVEL/pxp/pxp/lexers/objects
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/pxp/pxp/lexers/open_pxp_lex_aux_iso88591.src b/helm/DEVEL/pxp/pxp/lexers/open_pxp_lex_aux_iso88591.src
deleted file mode 100644 (file)
index 2377aff..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Pxp_lex_aux_iso88591
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/open_pxp_lex_aux_utf8.src b/helm/DEVEL/pxp/pxp/lexers/open_pxp_lex_aux_utf8.src
deleted file mode 100644 (file)
index 7c1b12a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Pxp_lex_aux_utf8
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/open_pxp_lex_misc_iso88591.src b/helm/DEVEL/pxp/pxp/lexers/open_pxp_lex_misc_iso88591.src
deleted file mode 100644 (file)
index 104eb9b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Pxp_lex_misc_iso88591
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/open_pxp_lex_misc_utf8.src b/helm/DEVEL/pxp/pxp/lexers/open_pxp_lex_misc_utf8.src
deleted file mode 100644 (file)
index fc545f2..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Pxp_lex_misc_utf8
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_aux.src b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_aux.src
deleted file mode 100644 (file)
index 2ab21a3..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-  class dummy_entity = object end
-
-  let dummy_entity = ( new dummy_entity : entity_id )
-
-  (* The following tokens are pre-allocated to reduce the load on the
-   * GC.
-   *)
-
-  let tok_Doctype__Document_type = Doctype dummy_entity, Document_type
-  let tok_Ignore__Document       = Ignore, Document
-  let tok_Ignore__Within_tag     = Ignore, Within_tag
-  let tok_Ignore__Document_type  = Ignore, Document_type
-  let tok_Ignore__Declaration    = Ignore, Declaration
-  let tok_Ignore__Ignored        = Ignore, Ignored_section
-  let tok_Eof__Document          = Eof, Document
-  let tok_Eof__Content           = Eof, Content
-  let tok_Eof__Within_tag        = Eof, Within_tag
-  let tok_Eof__Document_type     = Eof, Document_type
-  let tok_Eof__Declaration       = Eof, Declaration
-  let tok_Eof__Ignored           = Eof, Ignored_section
-  let tok_LineEndCRLF__Content   = LineEnd "\r\n", Content
-  let tok_LineEndCR__Content     = LineEnd "\r", Content
-  let tok_LineEndLF__Content     = LineEnd "\n", Content
-  let tok_CharDataRBRACKET__Content = CharData "]", Content
-  let tok_Eq__Within_tag         = Eq, Within_tag
-  let tok_Rangle__Content        = Rangle, Content
-  let tok_Rangle_empty__Content  = Rangle_empty, Content
-  let tok_Dtd_begin__Declaration = Dtd_begin dummy_entity, Declaration
-  let tok_Doctype_rangle__Document = Doctype_rangle dummy_entity, Document
-  let tok_Percent__Declaration   = Percent, Declaration
-  let tok_Plus__Declaration      = Plus, Declaration
-  let tok_Star__Declaration      = Star, Declaration
-  let tok_Bar__Declaration       = Bar, Declaration
-  let tok_Comma__Declaration     = Comma, Declaration
-  let tok_Qmark__Declaration     = Qmark, Declaration
-  let tok_Lparen__Declaration    = Lparen dummy_entity, Declaration
-  let tok_RparenPlus__Declaration   = RparenPlus dummy_entity, Declaration
-  let tok_RparenStar__Declaration   = RparenStar dummy_entity, Declaration
-  let tok_RparenQmark__Declaration  = RparenQmark dummy_entity, Declaration
-  let tok_Rparen__Declaration    = Rparen dummy_entity, Declaration
-  let tok_Required__Declaration  = Required, Declaration
-  let tok_Implied__Declaration   = Implied, Declaration
-  let tok_Fixed__Declaration     = Fixed, Declaration
-  let tok_Pcdata__Declaration    = Pcdata, Declaration
-  let tok_Decl_element__Declaration  = Decl_element dummy_entity, Declaration
-  let tok_Decl_attlist__Declaration  = Decl_attlist dummy_entity, Declaration
-  let tok_Decl_entity__Declaration   = Decl_entity dummy_entity, Declaration
-  let tok_Decl_notation__Declaration = Decl_notation dummy_entity, Declaration
-  let tok_Conditional_begin__Declaration = Conditional_begin dummy_entity, 
-                                           Declaration 
-  let tok_Conditional_begin__Ignored     = Conditional_begin dummy_entity, 
-                                           Ignored_section
-  let tok_Conditional_end__Declaration   = Conditional_end dummy_entity, 
-                                           Declaration
-  let tok_Conditional_end__Ignored       = Conditional_end dummy_entity, 
-                                           Ignored_section
-  let tok_Conditional_body__Declaration  = Conditional_body dummy_entity, 
-                                           Declaration
-  let tok_Decl_rangle__Declaration   = Decl_rangle dummy_entity, Declaration
-  let tok_Dtd_end__Document_type     = Dtd_end dummy_entity, Document_type
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/08/18 20:19:59  gerd
- *     Comments return different comment tokens.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_aux_iso88591.ml b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_aux_iso88591.ml
deleted file mode 100644 (file)
index 07f8c45..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* NOTE: Currently, this module is *identical* to Pxp_lex_aux_utf8 *)
-
-  open Pxp_types
-  open Pxp_lexer_types
-
-  let get_name_end s k =
-    (* Get the index of the end+1 of the name beginning at position k *)
-    let l = String.length s in
-    let rec find j =
-      if j < l then
-       match s.[j] with
-         | ('\009'|'\010'|'\013'|'\032') -> j
-         |_                              -> find (j+1)
-      else
-       l
-    in
-    find k
-
-  let get_ws_end s k =
-    let l =  String.length s in
-    let rec find j =
-      if j < l then
-       match s.[j] with
-           (' '|'\t'|'\r'|'\n') -> find (j+1)
-         | _                    -> j
-      else
-       l
-    in
-    find k
-
-  let scan_pi pi xml_scanner =
-    let s = String.sub pi 2 (String.length pi - 4) in
-            (* the PI without the leading "<?" and the trailing "?>" *)
-    let xml_lexbuf = Lexing.from_string (s ^ " ") in
-      (* Add space because the lexer expects whitespace after every
-       * clause; by adding a space there is always whitespace at the 
-       * end of the string.
-       *)
-
-    (* The first word of a PI must be a name: Extract it. *)
-
-    let s_name, s_len =
-      match xml_scanner xml_lexbuf with
-         Pro_name n -> 
-           let ltok = String.length (Lexing.lexeme xml_lexbuf) in
-           if String.length n = ltok then
-              (* No whitespace after the name *)
-             raise (WF_error ("Bad processing instruction"));
-           n, ltok
-       | _ -> raise (WF_error ("Bad processing instruction"))
-    in
-
-    (* Note: s_len is the length of s_name + the whitespace following s_name *)
-
-    match s_name with
-       "xml" -> begin
-         (* It is a <?xml ...?> PI: Get the other tokens *)
-         let rec collect () =
-           let t = xml_scanner xml_lexbuf in
-           (* prerr_endline (string_of_int (Lexing.lexeme_end xml_lexbuf)); *)
-           if t = Pro_eof then
-             []
-           else
-             t :: collect()
-         in
-         PI_xml (collect())
-       end
-      | _ -> 
-         let len_param = String.length s - s_len in
-         (* It is possible that len_param = -1 *)
-         if len_param >= 1 then
-           PI(s_name, String.sub s s_len len_param)
-         else
-           PI(s_name, "")
-
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/05/29 23:53:12  gerd
- *     Updated because Markup_* modules have been renamed to Pxp_*.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_aux_utf8.ml b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_aux_utf8.ml
deleted file mode 100644 (file)
index 0b2c577..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* NOTE: Currently, this module is *identical* to Pxp_lex_aux_iso88591 *)
-
-  open Pxp_types
-  open Pxp_lexer_types
-
-  let get_name_end s k =
-    (* Get the index of the end+1 of the name beginning at position k *)
-    let l = String.length s in
-    let rec find j =
-      if j < l then
-       match s.[j] with
-         | ('\009'|'\010'|'\013'|'\032') -> j
-         |_                              -> find (j+1)
-      else
-       l
-    in
-    find k
-
-  let get_ws_end s k =
-    let l =  String.length s in
-    let rec find j =
-      if j < l then
-       match s.[j] with
-           (' '|'\t'|'\r'|'\n') -> find (j+1)
-         | _                    -> j
-      else
-       l
-    in
-    find k
-
-  let scan_pi pi xml_scanner =
-    let s = String.sub pi 2 (String.length pi - 4) in
-            (* the PI without the leading "<?" and the trailing "?>" *)
-    let xml_lexbuf = Lexing.from_string (s ^ " ") in
-      (* Add space because the lexer expects whitespace after every
-       * clause; by adding a space there is always whitespace at the 
-       * end of the string.
-       *)
-
-    (* The first word of a PI must be a name: Extract it. *)
-
-    let s_name, s_len =
-      match xml_scanner xml_lexbuf with
-         Pro_name n -> 
-           let ltok = String.length (Lexing.lexeme xml_lexbuf) in
-           if String.length n = ltok then
-              (* No whitespace after the name *)
-             raise (WF_error ("Bad processing instruction"));
-           n, ltok
-       | _ -> raise (WF_error ("Bad processing instruction"))
-    in
-
-    (* Note: s_len is the length of s_name + the whitespace following s_name *)
-
-    match s_name with
-       "xml" -> begin
-         (* It is a <?xml ...?> PI: Get the other tokens *)
-         let rec collect () =
-           let t = xml_scanner xml_lexbuf in
-           (* prerr_endline (string_of_int (Lexing.lexeme_end xml_lexbuf)); *)
-           if t = Pro_eof then
-             []
-           else
-             t :: collect()
-         in
-         PI_xml (collect())
-       end
-      | _ -> 
-         let len_param = String.length s - s_len in
-         (* It is possible that len_param = -1 *)
-         if len_param >= 1 then
-           PI(s_name, String.sub s s_len len_param)
-         else
-           PI(s_name, "")
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/05/29 23:53:12  gerd
- *     Updated because Markup_* modules have been renamed to Pxp_*.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_content.src b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_content.src
deleted file mode 100644 (file)
index 3df2025..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-{
-  open Pxp_types
-  open Pxp_lexer_types
-
-#insert pxp_lex_aux.src
-
-#insert open_pxp_lex_aux_*.src
-#insert open_pxp_lex_misc_*.src
-
-}
-
-#insert pxp_lex_defs_*.def
-
-rule scan_content = parse
-    "<?" pi_string "?>"
-      { scan_pi (Lexing.lexeme lexbuf) scan_xml_pi, Content }
-  | "<?"
-      { raise (WF_error ("Illegal processing instruction")) }
-  | "<!--"
-      { Comment_begin, Content_comment }
-  | '<' '/'? name
-      (* One rule for Tag_beg and Tag_end saves transitions. *)
-      { let s = Lexing.lexeme lexbuf in
-       if s.[1] = '/' then
-         Tag_end (String.sub s 2 (String.length s - 2), dummy_entity), 
-         Within_tag 
-       else
-         Tag_beg (String.sub s 1 (String.length s - 1), dummy_entity), 
-         Within_tag 
-      }
-  | "<![CDATA[" cdata_string "]]>"
-      { let s = Lexing.lexeme lexbuf in
-       Cdata (String.sub s 9 (String.length s - 12)), Content }
-  | "<!"
-      { raise (WF_error "Declaration either malformed or not allowed in this context") 
-      }
-  | "<"
-      { raise (WF_error ("The left angle bracket '<' must be written as '&lt;'"))
-      }
-  | "&#" ascii_digit+ ";"
-      { let s = Lexing.lexeme lexbuf in
-       CRef (int_of_string (String.sub s 2 (String.length s - 3))), Content }
-  | "&#x" ascii_hexdigit+ ";"
-      { let s = Lexing.lexeme lexbuf in
-       CRef (int_of_string ("0x" ^ String.sub s 3 (String.length s - 4))), Content }
-  | "&" name ";"
-      { let s = Lexing.lexeme lexbuf in
-       ERef (String.sub s 1 (String.length s - 2)), Content }
-  | "&" 
-      { raise (WF_error ("The ampersand '&' must be written as '&amp;'"))
-      }
-
-  (* LineEnd: Depending on whether we are reading from a primary source
-   * (file) or from the replacement text of an internal entity, line endings
-   * must be normalized (converted to \n) or not.
-   * The entity classes do that. The yacc parser will never see LineEnd;
-   * this token is always converted to the appropriate CharData token.
-   *)
-
-  | '\013' '\010'
-      { tok_LineEndCRLF__Content }
-  | '\013'
-      { tok_LineEndCR__Content }
-  | '\010'
-      { tok_LineEndLF__Content }
-  | eof
-      { tok_Eof__Content }
-  | "]]>" 
-      { raise (WF_error ("The sequence ']]>' must be written as ']]&gt;'"))
-      }
-  | "]"
-      { tok_CharDataRBRACKET__Content }
-  | normal_character+
-      { let s = Lexing.lexeme lexbuf in
-       CharData s, Content 
-      }
-  | _
-      { raise Netconversion.Malformed_code }
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.4  2000/08/18 20:19:59  gerd
- *     Comments return different comment tokens.
- *
- * Revision 1.3  2000/08/14 22:18:34  gerd
- *     Bad_character_stream -> Netconversion.Malformed_code
- *
- * Revision 1.2  2000/05/29 23:53:12  gerd
- *     Updated because Markup_* modules have been renamed to Pxp_*.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_content_string.src b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_content_string.src
deleted file mode 100644 (file)
index 1eb76a4..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-{
-  open Pxp_types
-  open Pxp_lexer_types
-
-#insert open_pxp_lex_aux_*.src
-#insert pxp_lex_aux.src
-
-}
-
-#insert pxp_lex_defs_*.def
-
-(* This lexer is used to expand and normalize attribute values: *)
-
-rule scan_content_string = parse
-    '&' name ';'
-      { let s = Lexing.lexeme lexbuf in
-       ERef (String.sub s 1 (String.length s - 2)) }
-  | "&#" ascii_digit+ ";"
-      { let s = Lexing.lexeme lexbuf in
-       CRef (int_of_string (String.sub s 2 (String.length s - 3))) }
-  | "&#x" ascii_hexdigit+ ";"
-      { let s = Lexing.lexeme lexbuf in
-       CRef (int_of_string ("0x" ^ String.sub s 3 (String.length s - 4))) }
-  | '&'
-      { raise(WF_error("The character '&' must be written as '&amp;'")) }
-  | printable_character_except_amp_lt+
-      { CharData (Lexing.lexeme lexbuf) }
-  | '\009'
-      { CRef 32 }
-  | '\013' '\010'
-      { CRef(-1)   (* A special case *)
-      }
-  | '\013'
-      { CRef 32 }
-  | '\010'
-      { CRef 32 }
-  | '<'
-      { 
-       (* Depending on the situation, '<' may be legal or not: *)
-       CharData "<" 
-      }
-  | eof
-      { Eof }
-  | _
-      { raise Netconversion.Malformed_code }
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/08/14 22:18:34  gerd
- *     Bad_character_stream -> Netconversion.Malformed_code
- *
- * Revision 1.2  2000/05/29 23:53:12  gerd
- *     Updated because Markup_* modules have been renamed to Pxp_*.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_declaration.src b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_declaration.src
deleted file mode 100644 (file)
index 4f53d97..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-{
-  open Pxp_types
-  open Pxp_lexer_types
-
-#insert pxp_lex_aux.src
-
-#insert open_pxp_lex_aux_*.src
-#insert open_pxp_lex_misc_*.src
-
-}
-
-#insert pxp_lex_defs_*.def
-
-(* scan_declaration: after "[" in DTD until matching "]" *)
-
-rule scan_declaration = parse
-    ws+
-      { tok_Ignore__Declaration }
-  | '%' name ';'
-      { let s = Lexing.lexeme lexbuf in
-       (PERef (String.sub s 1 (String.length s - 2))), Declaration }
-  | '%'
-      { tok_Percent__Declaration }
-  | '&' 
-      { raise(WF_error("References to general entities not allowed in DTDs")) }
-  | name
-      { Name (Lexing.lexeme lexbuf), Declaration }
-  | nmtoken
-      { Nametoken (Lexing.lexeme lexbuf), Declaration }
-  | '+'
-      { tok_Plus__Declaration }
-  | '*'
-      { tok_Star__Declaration }
-  | '|'
-      { tok_Bar__Declaration }
-  | ','
-      { tok_Comma__Declaration }
-  | '?'
-      { tok_Qmark__Declaration }
-  | '('
-      { tok_Lparen__Declaration }
-  | ")+" 
-      { tok_RparenPlus__Declaration }
-  | ")*" 
-      { tok_RparenStar__Declaration }
-  | ")?"
-      { tok_RparenQmark__Declaration }
-  | ')'
-      { tok_Rparen__Declaration }
-  | "#REQUIRED"
-      { tok_Required__Declaration }
-  | "#IMPLIED"
-      { tok_Implied__Declaration }
-  | "#FIXED"
-      { tok_Fixed__Declaration }
-  | "#PCDATA"
-      { tok_Pcdata__Declaration }
-  | "<!ELEMENT"
-      { tok_Decl_element__Declaration }
-  | "<!ATTLIST"
-      { tok_Decl_attlist__Declaration }
-  | "<!ENTITY"
-      { tok_Decl_entity__Declaration }
-  | "<!NOTATION"
-      { tok_Decl_notation__Declaration }
-  | "<!--"
-      { Comment_begin, Decl_comment }
-  | "<!["
-      { tok_Conditional_begin__Declaration }
-  | "]]>"
-      { tok_Conditional_end__Declaration }
-  | "["
-      { tok_Conditional_body__Declaration }
-
-  (* TODO: PIs modified *) 
-
-  | "<?" pi_string "?>"
-      { scan_pi (Lexing.lexeme lexbuf) scan_xml_pi, Declaration }
-  | "<?"
-      { raise (WF_error ("Illegal processing instruction")) }
-  | '"' [^ '"']* '"'
-      { let s = Lexing.lexeme lexbuf in
-        (* Check that characters are well-formed: *)
-       ignore(scan_characters (Lexing.from_string s));
-       (Unparsed_string (String.sub s 1 (String.length s - 2))), Declaration }
-  | '"'
-      { raise (WF_error ("Cannot find the second quotation mark"))
-      }
-  | "'" [^ '\'']* "'"
-      { let s = Lexing.lexeme lexbuf in
-        (* Check that characters are well-formed: *)
-       ignore(scan_characters (Lexing.from_string s));
-       (Unparsed_string (String.sub s 1 (String.length s - 2))), Declaration }
-  | "'"
-      { raise (WF_error ("Cannot find the second quotation mark"))
-      }
-  | '>'
-      { tok_Decl_rangle__Declaration }
-  | ']'
-      { tok_Dtd_end__Document_type }
-  | eof
-      { tok_Eof__Declaration }
-  | "<!"
-      { raise (WF_error "Declaration either malformed or not allowed in this context") 
-      }
-  | character
-      { raise (WF_error("Illegal token or character")) }
-  | _
-      { raise Netconversion.Malformed_code }
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.4  2000/08/18 20:19:59  gerd
- *     Comments return different comment tokens.
- *
- * Revision 1.3  2000/08/14 22:18:34  gerd
- *     Bad_character_stream -> Netconversion.Malformed_code
- *
- * Revision 1.2  2000/05/29 23:53:12  gerd
- *     Updated because Markup_* modules have been renamed to Pxp_*.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_defs_drv_utf8.def b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_defs_drv_utf8.def
deleted file mode 100644 (file)
index dc108ef..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-let ws = [ ' ' '\t' '\r' '\n' ]
-
-let ascii_digit = ['0'-'9']
-
-let ascii_hexdigit = ['0'-'9' 'a'-'h' 'A'-'H']
-
-let namechar = letter | digit | '.' | ':' | '-' | '_' | combiningChar | extender
-
-let name = ( letter | '_' | ':' ) namechar*
-
-let nmtoken = namechar+
-
-(* Valid characters are:
- * #9, #10, #13, #32-#xD7FF, #xE000-#xFFFD, #x10000-#x10FFFF
- *
- * #xD7FF as UTF-8 sequence:
- * 1110xxxx 10xxxxxx 10xxxxxx
- * 1110...D 10...7.. 10.F...F  = ED 9F BF
- *
- * #xE000 as UTF-8 sequence:
- * 1110xxxx 10xxxxxx 10xxxxxx
- * 1110...E 10...0.. 10.0...0  = EE 80 80
- *
- * UTF-8 sequence CF BE BF as character:
- * 1110xxxx 10xxxxxx 10xxxxxx
- * 1110...F 10111110 10111111  = #FFBF
- *
- * #xFFFD as UTF-8 sequence:
- * 1110xxxx 10xxxxxx 10xxxxxx
- * 1110...F 10...F.. 10.F...D  = EF BF BD
- *
- * #x010000 as UTF-8 sequence:
- * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
- * 111100.. 10.1...0 10...0.. 10.0...0 = F0 90 80 80
- *
- * #x10FFFF as UTF-8 sequence:
- * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
- * 111101.. 10.0...F 10...F.. 10.F...F = F4 8F BF BF
- *)
-
-
-let non_ascii_character = 
-  ['\192'-'\223'] ['\128'-'\191']                     (* #x80-#x7FF *)
-| ['\224'-'\236'] ['\128'-'\191'] ['\128'-'\191']     (* #x800-#xCFFF *)
-| '\237'          ['\128'-'\159'] ['\128'-'\191']     (* #xD000-#xD7FF *)
-| '\238'          ['\128'-'\191'] ['\128'-'\191']     (* #xE000-#xEFFF *)
-| '\239'          ['\128'-'\190'] ['\128'-'\191']     (* #xF000-#xFFBF *)
-| '\239'          '\191'          ['\128'-'\189']     (* #xFFC0-#xFFFD *)
-| '\240'          ['\144'-'\191'] ['\128'-'\191'] ['\128'-'\191']     
-                                                      (* #x010000-#x03FFFF *)
-| ['\241'-'\243'] ['\128'-'\191'] ['\128'-'\191'] ['\128'-'\191'] 
-                                                      (* #x040000-#x0FFFFF *)
-| '\244'          ['\128'-'\143'] ['\128'-'\191'] ['\128'-'\191'] 
-                                                      (* #x100000-#10FFFFF *)
-
-let character =
-  [ '\009' '\010' '\013' '\032'-'\127' ]
-| non_ascii_character
-
-
-let character_except_question_mark =                    (* '?' = '\063' *)
-  [ '\009' '\010' '\013' '\032'-'\062' '\064'-'\127' ]
-| non_ascii_character
-
-
-let character_except_right_angle_bracket =              (* '>' = '\062' *)
-  [ '\009' '\010' '\013' '\032'-'\061' '\063'-'\127' ]
-| non_ascii_character
-
-
-let character_except_minus =                            (* '-' = '\045' *)
-  [ '\009' '\010' '\013' '\032'-'\044' '\046'-'\127' ]
-| non_ascii_character
-
-
-let character_except_quot =                             (* '"' = '\034' *)
-  [ '\009' '\010' '\013' '\032'-'\033' '\035'-'\255' ]
-| non_ascii_character
-
-
-let character_except_apos =                             (* '\'' = '\039' *)
-  [ '\009' '\010' '\013' '\032'-'\038' '\040'-'\255' ]
-| non_ascii_character
-
-
-let pi_string = character_except_question_mark* 
-                ( '?' character_except_right_angle_bracket 
-                      character_except_question_mark* )* 
-                '?'?
-
-
-let comment_string = character_except_minus* 
-                     ('-' character_except_minus+ )*
-
-
-let normal_character = 
-  (* Character except '&' = '\038', '<' = '\060', ']' = '\093', and CR LF *)
-  [ '\009' '\032'-'\037' '\039'-'\059' '\061'-'\092' '\094'-'\127' ]
-| non_ascii_character
-
-
-let character_except_rbracket =                               (* ']' = '\093' *)
-  [ '\009' '\010' '\013' '\032'-'\092' '\094'-'\127' ]
-| non_ascii_character
-
-
-let character_except_rbracket_rangle =          (* ']' = '\093', '>' = '\062' *)
-  [ '\009' '\010' '\013' '\032'-'\061' '\063'-'\092' '\094'-'\127' ]
-| non_ascii_character
-
-
-let cdata_string = 
-  character_except_rbracket*
-  ( "]" character_except_rbracket+ |
-    "]]" ']'* character_except_rbracket_rangle character_except_rbracket*
-  )*
-  ']'*
-
-
-let printable_character_except_amp_lt =
-  (* '&' = '\038', '<' = '\060' *)
-  [ '\032'-'\037' '\039'-'\059' '\061'-'\127']
-| non_ascii_character
-
-
-let printable_character_except_amp_percent =
-  (* '%' = '\037', '&' = '\038' *)
-  [ '\032'-'\036' '\039'-'\127']
-| non_ascii_character
-
-
-let character_except_special =
-  (* '<'=060, ']'=093, '"'=034, '\''=039 *)
-  [ '\009' '\010' '\013' '\032'-'\033' '\035'-'\038' '\040'-'\059' 
-                         '\061'-'\092' '\094'-'\127' ]
-| non_ascii_character
-
-  
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/08/26 19:58:08  gerd
- *     Bugfix in character_except_apos. The bug caused that attribute
- * values delimited by &apos; could not be scanned at all.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_defs_generic.def b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_defs_generic.def
deleted file mode 100644 (file)
index aeece89..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(*****************************************************************)
-(*          Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>        *)
-(*                           14/05/2000                          *)
-(*                                                               *)
-(* These are taken from the appendix B of the XML reccomendation *)
-(*                                                               *)
-(*****************************************************************)
-
-(* 85 *)
-let baseChar =
-   [#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6] | [#x00D8-#x00F6]
- | [#x00F8-#x00FF] | [#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148]
- | [#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5]
- | [#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1] | #x0386
- | [#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE]
- | [#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 | [#x03E2-#x03F3]
- | [#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481]
- | [#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB]
- | [#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559
- | [#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A]
- | [#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE]
- | [#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] | #x093D
- | [#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8]
- | [#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD]
- | [#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] | [#x0A0F-#x0A10]
- | [#x0A13-#x0A28] | [#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36]
- | [#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74]
- | [#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8]
- | [#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD | #x0AE0
- | [#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] | [#x0B2A-#x0B30]
- | [#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D | [#x0B5C-#x0B5D]
- | [#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] | [#x0B92-#x0B95]
- | [#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] | [#x0BA3-#x0BA4]
- | [#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C]
- | [#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] | [#x0C35-#x0C39]
- | [#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] | [#x0C92-#x0CA8]
- | [#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE | [#x0CE0-#x0CE1]
- | [#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] | [#x0D2A-#x0D39]
- | [#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | [#x0E32-#x0E33]
- | [#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | [#x0E87-#x0E88] | #x0E8A
- | #x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] | [#x0EA1-#x0EA3] | #x0EA5
- | #x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] | #x0EB0 | [#x0EB2-#x0EB3]
- | #x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] | [#x0F49-#x0F69]
- | [#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | [#x1102-#x1103]
- | [#x1105-#x1107] | #x1109 | [#x110B-#x110C] | [#x110E-#x1112] | #x113C
- | #x113E | #x1140 | #x114C | #x114E | #x1150 | [#x1154-#x1155] | #x1159
- | [#x115F-#x1161] | #x1163 | #x1165 | #x1167 | #x1169 | [#x116D-#x116E]
- | [#x1172-#x1173] | #x1175 | #x119E | #x11A8 | #x11AB | [#x11AE-#x11AF]
- | [#x11B7-#x11B8] | #x11BA | [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9
- | [#x1E00-#x1E9B] | [#x1EA0-#x1EF9] | [#x1F00-#x1F15] | [#x1F18-#x1F1D]
- | [#x1F20-#x1F45] | [#x1F48-#x1F4D] | [#x1F50-#x1F57] | #x1F59 | #x1F5B
- | #x1F5D | [#x1F5F-#x1F7D] | [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE
- | [#x1FC2-#x1FC4] | [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB]
- | [#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126
- | [#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094]
- | [#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3] 
-;;
-
-(* 86 *)
-let ideographic = [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029] ;;
-
-(* 84 *)
-let letter = baseChar | ideographic ;;
-
-(* 87 *)
-let combiningChar =
-   [#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486] | [#x0591-#x05A1]
- | [#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4
- | [#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF]
- | [#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] | [#x0901-#x0903]
- | #x093C | [#x093E-#x094C] | #x094D | [#x0951-#x0954] | [#x0962-#x0963]
- | [#x0981-#x0983] | #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4]
- | [#x09C7-#x09C8] | [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | #x0A02
- | #x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48]
- | [#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC
- | [#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03]
- | #x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D]
- | [#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8]
- | [#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44]
- | [#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83]
- | [#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6]
- | [#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D]
- | #x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1
- | [#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19]
- | #x0F35 | #x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84]
- | [#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD]
- | [#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F]
- | #x3099 | #x309A
-;;
-
-(* 88 *)
-let digit =
-   [#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | [#x0966-#x096F]
- | [#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | [#x0B66-#x0B6F]
- | [#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | [#x0D66-#x0D6F]
- | [#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29]
-;;
-
-(* 89 *)
-let extender =
-   #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | #x3005
- | [#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE]
-;;
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_defs_iso88591.def b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_defs_iso88591.def
deleted file mode 100644 (file)
index b57da24..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-let ws = [ ' ' '\t' '\r' '\n' ]
-
-(* Note: ISO-8859-1 charset does not have 'combining characters' *)
-
-let letter = ['A'-'Z' 'a'-'z' '\192'-'\214' '\216'-'\246' '\248'-'\255']
-let extender = '\183'
-let digit = ['0'-'9']
-let ascii_digit = ['0'-'9']
-let ascii_hexdigit = ['0'-'9' 'A'-'F' 'a'-'f']
-let namechar = letter | digit | '.' | ':' | '-' | '_' | extender
-let name = ( letter | '_' | ':' ) namechar*
-let nmtoken = namechar+
-
-let character = ['\009' '\010' '\013' '\032'-'\255']
-
-let character_except_question_mark =                    (* '?' = '\063' *)
-  [ '\009' '\010' '\013' '\032'-'\062' '\064'-'\255' ]
-
-let character_except_right_angle_bracket =              (* '>' = '\062' *)
-  [ '\009' '\010' '\013' '\032'-'\061' '\063'-'\255' ]
-
-let character_except_minus =                            (* '-' = '\045' *)
-  [ '\009' '\010' '\013' '\032'-'\044' '\046'-'\255' ]
-
-let character_except_quot =                             (* '"' = '\034' *)
-  [ '\009' '\010' '\013' '\032'-'\033' '\035'-'\255' ]
-
-let character_except_apos =                             (* '\'' = '\039' *)
-  [ '\009' '\010' '\013' '\032'-'\038' '\040'-'\255' ]
-
-let pi_string = character_except_question_mark* 
-                ( '?' character_except_right_angle_bracket 
-                      character_except_question_mark* )* 
-                '?'?
-
-let comment_string = character_except_minus* 
-                     ('-' character_except_minus+ )*
-
-let normal_character = 
-  [^ '&' '<' ']' '\000'-'\008' '\010'-'\031']
-
-let character_except_rbracket =                               (* ']' = '\093' *)
-  [ '\009' '\010' '\013' '\032'-'\092' '\094'-'\255' ]
-
-let character_except_rbracket_rangle =          (* ']' = '\093', '>' = '\062' *)
-  [ '\009' '\010' '\013' '\032'-'\061' '\063'-'\092' '\094'-'\255' ]
-
-let cdata_string = 
-  character_except_rbracket*
-  ( "]" character_except_rbracket+ |
-    "]]" ']'* character_except_rbracket_rangle character_except_rbracket*
-  )*
-  ']'*
-(* cdata_string = char* - ( char* ']]>' char* ) *)
-
-let printable_character_except_amp_lt =
-  (* '&' = '\038', '<' = '\060' *)
-  [ '\032'-'\037' '\039'-'\059' '\061'-'\255']
-
-let printable_character_except_amp_percent =
-  (* '%' = '\037', '&' = '\038' *)
-  [ '\032'-'\036' '\039'-'\255']
-
-let character_except_special =
-  (* '<'=060, ']'=093, '"'=034, '\''=039 *)
-  [ '\009' '\010' '\013' '\032'-'\033' '\035'-'\038' '\040'-'\059' 
-                         '\061'-'\092' '\094'-'\255' ]
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_document.src b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_document.src
deleted file mode 100644 (file)
index 33310c1..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-{
-  open Pxp_types
-  open Pxp_lexer_types
-
-#insert pxp_lex_aux.src
-
-#insert open_pxp_lex_aux_*.src
-#insert open_pxp_lex_misc_*.src
-
-}
-
-#insert pxp_lex_defs_*.def
-
-
-(* scan_document: Lexer for the outermost structures *)
-
-rule scan_document = parse
-    "<?" pi_string "?>"
-      { scan_pi (Lexing.lexeme lexbuf) scan_xml_pi, Document }
-  | "<?"
-      { raise (WF_error ("Illegal processing instruction")) }
-  | "<!DOCTYPE"
-      { tok_Doctype__Document_type }
-  | "<!--" 
-      { Comment_begin, Document_comment }
-  | "<!"
-      { raise (WF_error "Declaration either malformed or not allowed in this context") 
-      }
-  | "<" name
-      { let s = Lexing.lexeme lexbuf in
-       Tag_beg (String.sub s 1 (String.length s - 1), dummy_entity), Within_tag
-      }
-  | '<'
-      { raise (WF_error ("Illegal token")) }
-  | ws+
-      { tok_Ignore__Document }
-  | eof
-      { tok_Eof__Document }
-  | character
-      { raise (WF_error ("Content not allowed here")) }
-  | _
-      { raise Netconversion.Malformed_code }
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.4  2000/08/18 20:19:59  gerd
- *     Comments return different comment tokens.
- *
- * Revision 1.3  2000/08/14 22:18:34  gerd
- *     Bad_character_stream -> Netconversion.Malformed_code
- *
- * Revision 1.2  2000/05/29 23:53:12  gerd
- *     Updated because Markup_* modules have been renamed to Pxp_*.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_document_type.src b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_document_type.src
deleted file mode 100644 (file)
index c775883..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-{
-  open Pxp_types
-  open Pxp_lexer_types
-
-#insert open_pxp_lex_aux_*.src
-#insert pxp_lex_aux.src
-
-}
-
-#insert pxp_lex_defs_*.def
-
-
-(* scan_document_type: after "<!DOCTYPE" until matching ">" *)
-
-rule scan_document_type = parse
-    name
-      { let s = Lexing.lexeme lexbuf in
-       Name s, Document_type }
-  | ws+
-      { tok_Ignore__Document_type }
-  | '"' character_except_quot* '"'
-      { let s = Lexing.lexeme lexbuf in
-       (Unparsed_string (String.sub s 1 (String.length s - 2))), Document_type }
-  | '"'
-      { raise (WF_error ("Cannot find the second quotation mark"))
-      }
-  | "'" character_except_apos* "'"
-      { let s = Lexing.lexeme lexbuf in
-       (Unparsed_string (String.sub s 1 (String.length s - 2))), Document_type }
-  | "'"
-      { raise (WF_error ("Cannot find the second quotation mark"))
-      }
-  | '['
-      { tok_Dtd_begin__Declaration }
-  | '>'
-      { tok_Doctype_rangle__Document }
-  | eof
-      { tok_Eof__Document_type }
-  | '&' 
-      { raise (WF_error("References to general entities not allowed here")) }
-  | '%' 
-      { raise (WF_error("References to parameter entities not allowed here")) }
-  | character
-      { raise (WF_error("Content not allowed here")) }
-  | _
-      { raise Netconversion.Malformed_code }
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/08/14 22:18:34  gerd
- *     Bad_character_stream -> Netconversion.Malformed_code
- *
- * Revision 1.2  2000/05/29 23:53:12  gerd
- *     Updated because Markup_* modules have been renamed to Pxp_*.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_dtd_string.src b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_dtd_string.src
deleted file mode 100644 (file)
index 1fb11e6..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-{
-  open Pxp_types
-  open Pxp_lexer_types
-
-#insert open_pxp_lex_aux_*.src
-#insert pxp_lex_aux.src
-
-}
-
-#insert pxp_lex_defs_*.def
-(* The following scanner is used to determine the replacement text of
- * internal entities:
- *)
-
-rule scan_dtd_string = parse
-    '%' name ';'
-      { let s = Lexing.lexeme lexbuf in
-       PERef (String.sub s 1 (String.length s - 2)) }
-  | '%'
-      { raise(WF_error("The character '%' must be written as '&#37;'")) }
-  | '&' name ';'
-      { let s = Lexing.lexeme lexbuf in
-       ERef (String.sub s 1 (String.length s - 2)) }
-  | "&#" ascii_digit+ ";"
-      { let s = Lexing.lexeme lexbuf in
-       CRef (int_of_string (String.sub s 2 (String.length s - 3))) }
-  | "&#x" ascii_hexdigit+ ";"
-      { let s = Lexing.lexeme lexbuf in
-       CRef (int_of_string ("0x" ^ String.sub s 3 (String.length s - 4))) }
-  | '&'
-      { raise(WF_error("The character '&' must be written as '&amp;'")) }
-  | '\013' '\010'
-      { CRef(-1) }
-  | '\013'
-      { CRef(-2) }
-  | '\010'
-      { CRef(-3) }
-  | '\009'
-      { CharData "\009" }
-  | printable_character_except_amp_percent+
-      { CharData (Lexing.lexeme lexbuf) }
-  | eof
-      { Eof }
-  | _
-      { raise Netconversion.Malformed_code }
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/08/14 22:18:34  gerd
- *     Bad_character_stream -> Netconversion.Malformed_code
- *
- * Revision 1.2  2000/05/29 23:53:12  gerd
- *     Updated because Markup_* modules have been renamed to Pxp_*.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_misc.src b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_misc.src
deleted file mode 100644 (file)
index 2a0d29f..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-{
-  open Pxp_types
-  open Pxp_lexer_types
-
-#insert open_pxp_lex_aux_*.src
-#insert pxp_lex_aux.src
-
-}
-
-#insert pxp_lex_defs_*.def
-
-(* The remaining, smaller lexers *)
-
-rule scan_characters = parse
-  character*
-    { () }
-| eof 
-    { () }
-| _
-    { raise Netconversion.Malformed_code }
-
-
-and scan_xml_pi = parse
-    name ws*
-      { let s = Lexing.lexeme lexbuf in
-       let j = get_name_end s 0 in
-       Pro_name (String.sub s 0 j)
-      }
-  | "=" ws*
-      { Pro_eq }
-  | "'" character_except_apos* "'" ws+
-      { let s = Lexing.lexeme lexbuf in
-       let j = String.index_from s 1 '\'' in
-       Pro_string (String.sub s 1 (j-1))
-      }
-  | "'"
-      { raise (WF_error ("Cannot find the second quotation mark"))
-      }
-  | '"' character_except_quot* '"' ws+
-      { let s = Lexing.lexeme lexbuf in
-       let j = String.index_from s 1 '"' in
-       Pro_string (String.sub s 1 (j-1))
-      }
-  | '"'
-      { raise (WF_error ("Cannot find the second quotation mark"))
-      }
-  | eof
-      { Pro_eof }
-  | character
-      { (* prerr_endline (Lexing.lexeme lexbuf); *)
-       raise (WF_error("Illegal token or character")) 
-      }
-  | _ 
-      { raise Netconversion.Malformed_code }
-
-and scan_only_xml_decl = parse
-    "<?xml" ws+ pi_string "?>"
-      { scan_pi (Lexing.lexeme lexbuf) scan_xml_pi }
-  | ""
-      { Eof }
-
-and scan_for_crlf = parse
-  | '\013' '\010'
-      { CharData "\n" }
-  | '\013'
-      { CharData "\n" }
-  | '\010'
-      { CharData "\n" }
-  | [^ '\010' '\013' ]+
-      { CharData (Lexing.lexeme lexbuf) }
-  | eof 
-      { Eof }
-
-and scan_content_comment = parse
-    "-->"
-      { Comment_end, Content }
-  | "--"
-      { raise (WF_error "Double hyphens are illegal inside comments") }
-  | "-"
-      { Comment_material "-", Content_comment }
-  | character_except_minus+
-      { Comment_material(Lexing.lexeme lexbuf), Content_comment }
-  | eof
-      { Eof, Content_comment }
-  | _
-      { raise Netconversion.Malformed_code }
-
-
-(* In declarations, comments are always thrown away. *)
-
-and scan_decl_comment = parse
-    "-->"
-      { Comment_end, Declaration }
-  | "--"
-      { raise (WF_error "Double hyphens are illegal inside comments") }
-  | "-"
-      { Comment_material "", Decl_comment }
-  | character_except_minus+
-      { Comment_material "", Decl_comment }
-  | eof
-      { Eof, Decl_comment }
-  | _
-      { raise Netconversion.Malformed_code }
-
-
-and scan_document_comment = parse
-    "-->"
-      { Comment_end, Document }
-  | "--"
-      { raise (WF_error "Double hyphens are illegal inside comments") }
-  | "-"
-      { Comment_material "-", Document_comment }
-  | character_except_minus+
-      { Comment_material(Lexing.lexeme lexbuf), Document_comment }
-  | eof
-      { Eof, Document_comment }
-  | _
-      { raise Netconversion.Malformed_code }
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.4  2000/08/18 20:19:59  gerd
- *     Comments return different comment tokens.
- *
- * Revision 1.3  2000/08/14 22:18:34  gerd
- *     Bad_character_stream -> Netconversion.Malformed_code
- *
- * Revision 1.2  2000/05/29 23:53:12  gerd
- *     Updated because Markup_* modules have been renamed to Pxp_*.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_name_string.src b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_name_string.src
deleted file mode 100644 (file)
index 57a0d54..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-{
-  open Pxp_types
-  open Pxp_lexer_types
-
-#insert open_pxp_lex_aux_*.src
-#insert pxp_lex_aux.src
-
-}
-
-#insert pxp_lex_defs_*.def
-
-rule scan_name_string = parse
-    name
-      { Name (Lexing.lexeme lexbuf) }
-  | ws+
-      { Ignore }
-  | nmtoken
-      { Nametoken (Lexing.lexeme lexbuf) }
-  | eof
-      { Eof }
-  | character
-      { CharData (Lexing.lexeme lexbuf) }
-  | _
-      { raise Netconversion.Malformed_code }
-
-
-and scan_ignored_section = parse
-  | "<!["
-      { tok_Conditional_begin__Ignored }
-  | "]]>"
-      { tok_Conditional_end__Ignored }
-  | "<!--" comment_string "-->"
-      { tok_Ignore__Ignored }
-  | '"' character_except_quot* '"'
-      { tok_Ignore__Ignored }
-  | "'" character_except_apos* "'"
-      { tok_Ignore__Ignored }
-  | eof
-      { tok_Eof__Ignored }
-  | character_except_special+
-      { tok_Ignore__Ignored }
-  | "<"
-      { tok_Ignore__Ignored }
-  | "]"
-      { tok_Ignore__Ignored }
-  | "'"
-      { tok_Ignore__Ignored }
-  | "\""
-      { tok_Ignore__Ignored }
-  | _
-      { raise Netconversion.Malformed_code }
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/08/14 22:18:34  gerd
- *     Bad_character_stream -> Netconversion.Malformed_code
- *
- * Revision 1.2  2000/05/29 23:53:12  gerd
- *     Updated because Markup_* modules have been renamed to Pxp_*.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_within_tag.src b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_within_tag.src
deleted file mode 100644 (file)
index 39697b0..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-{
-  open Pxp_types
-  open Pxp_lexer_types
-
-#insert open_pxp_lex_aux_*.src
-#insert pxp_lex_aux.src
-
-}
-
-#insert pxp_lex_defs_*.def
-
-
-rule scan_within_tag = parse
-    ws+
-      { tok_Ignore__Within_tag }
-  | name
-      { Name (Lexing.lexeme lexbuf ), Within_tag }
-  | '='
-      { tok_Eq__Within_tag }
-  | '"' character_except_quot* '"'
-      { let s = Lexing.lexeme lexbuf in
-       let v = String.sub s 1 (String.length s - 2) in
-       Attval v, Within_tag }
-  | '"'
-      { raise (WF_error ("Cannot find the second quotation mark"))
-      }
-  | "'" character_except_apos* "'"
-      { let s = Lexing.lexeme lexbuf in
-       let v = String.sub s 1 (String.length s - 2) in
-       Attval v, Within_tag }
-  | "'"
-      { raise (WF_error ("Cannot find the second quotation mark"))
-      }
-  | '>'
-      { tok_Rangle__Content }
-  | "/>"
-      { tok_Rangle_empty__Content }
-  | eof
-      { tok_Eof__Within_tag }
-  | character
-      { raise (WF_error ("Illegal inside tags")) }
-  | _
-      { raise Netconversion.Malformed_code }
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/08/14 22:18:34  gerd
- *     Bad_character_stream -> Netconversion.Malformed_code
- *
- * Revision 1.2  2000/05/29 23:53:12  gerd
- *     Updated because Markup_* modules have been renamed to Pxp_*.
- *
- * Revision 1.1  2000/05/20 20:33:25  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/m2parsergen/Makefile b/helm/DEVEL/pxp/pxp/m2parsergen/Makefile
deleted file mode 100644 (file)
index 78f5359..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-# make all:            make bytecode executable
-# make clean:          remove intermediate files (in this directory)
-# make CLEAN:           remove intermediate files (recursively)
-
-#----------------------------------------------------------------------
-
-SRC = ast.ml lexer.ml parser.ml generator.ml
-OBJ = $(SRC:.ml=.cmo)
-
-#----------------------------------------------------------------------
-
-
-.PHONY: all
-all: m2parsergen
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa lexer.ml parser.ml \
-             parser.mli
-
-.PHONY: CLEAN
-CLEAN: clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~ depend depend.pkg m2parsergen a.out x.ml
-
-#----------------------------------------------------------------------
-# general rules:
-
-OPTIONS   =
-OCAMLC    = ocamlc -g $(OPTIONS) $(ROPTIONS)
-OCAMLOPT  = ocamlopt -p $(OPTIONS) $(ROPTIONS)
-OCAMLDEP  = ocamldep $(OPTIONS)
-OCAMLFIND = ocamlfind
-
-#----------------------------------------------------------------------
-
-depend: $(SRC) 
-       $(OCAMLDEP) $(SRC) >depend
-
-m2parsergen: $(OBJ)
-       $(OCAMLC) -o m2parsergen $(OBJ)
-
-.SUFFIXES: .cmo .cmi .cmx .ml .mli .mll .mly
-
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-.ml.cmo:
-       $(OCAMLC) -c $<
-
-.mli.cmi:
-       $(OCAMLC) -c $<
-
-.mll.ml:
-       ocamllex $<
-
-.mly.ml:
-       ocamlyacc $<
-
-include depend
diff --git a/helm/DEVEL/pxp/pxp/m2parsergen/README b/helm/DEVEL/pxp/pxp/m2parsergen/README
deleted file mode 100644 (file)
index cccf7aa..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-----------------------------------------------------------------------
-m2parsergen
-----------------------------------------------------------------------
-
-This is a parser generator for top-down (or recursively descending) parsers.
-The input file must be structured as follows:
-
----------------------------------------- Begin of file
-
-<OCAML TEXT ("preamble")>
-
-%%
-
-<DECLARATIONS>
-
-%%
-
-<RULES>
-
-%%
-
-<OCAML TEXT ("postamble")>
-
----------------------------------------- End of file
-
-The two-character combination %% separates the various sections. The
-text before the first %% and after the last %% will be copied verbatim
-to the output file.
-
-Within the declarations and rules sections you must use /* ... */ as
-comment braces.
-
-There are two types of declarations:
-
-%token Name
-
-declares that Name is a token without associated value, and
-
-%token <> Name
-
-declares that Name is a token with associated value (i.e. Name x).
-
-In contrast to ocamlyacc, you need not to specify a type. This is a
-fundamental difference, because m2parsergen will not generate a type
-declaration for a "token" type; you must do this yourself.
-
-You need not to declare start symbols; every grammar rule may be used
-as start symbol.
-
-The rules look like:
-
-name_of_rule(arg1, arg2, ...):
-  label1:symbol1 label2:symbol2 ... {{ CODE }}
-| label1:symbol1 label2:symbol2 ... {{ CODE }}
-...
-| label1:symbol1 label2:symbol2 ... {{ CODE }}
-
-The rules may have arguments (note that you must write the
-parantheses, even if the rule does not have arguments). Here, arg1,
-arg2, ... are the formal names of the arguments; you may refer to them
-in OCaml code.
-
-Furthermore, the symbols may have labels (you can leave the labels
-out). You can refer to the value associated with a symbol by its
-label, i.e. there is an OCaml variable with the same name as the label
-prescribes, and this variable contains the value.
-
-The OCaml code must be embraced by {{ and }}, and these separators
-must not occur within the code.
-
-EXAMPLE:
-
-prefix_term():
-  Plus_symbol Left_paren v1:prefix_term() Comma v2:prefix_term() Right_paren
-    {{ v1 + v2 }}
-| Times_symbol Left_paren v1:prefix_term() Comma v2:prefix_term() Right_paren
-    {{ v1 * v2 }}
-| n:Number
-    {{ n }}
-
-As you can see in the example, you must pass values for the arguments
-if you call non-terminal symbols (here, the argument list is empty: ()).
-
-The generated parsers behave as follows:
-
-- A rule is applicable to a token sequence if the first token is
-  matched by the rule.
-
-  In the example: prefix_term is applicable if the first token of a
-  sequence is either Plus_symbol, Times_symbol, or Number.
-
-- One branch of the applicable rule is selected: it is the first
-  branch that matches the first token. THE OTHER TOKENS DO NOT HAVE
-  ANY EFFECT ON BRANCH SELECTION!
-
-  For instance, in the following rule the second branch is never
-  selected, because only the A is used to select the branch:
-
-  a():
-    A B {{ ... }}
-  | A C {{ ... }}
-
-- Once a branch is selected, it is checked whether the branch matches
-  the token sequence. If this check succeeds, the code section of the
-  branch is executed, and the resulting value is returned to the
-  caller.
-  If the check fails, the exception Parsing.Parse_error is raised.
-  Normally, this exception is not caught, and will force the parser
-  to stop.
-
-  The check in detail:
-
-  If the rule demands a terminal, there a must be exactly this
-  terminal at the corresponding location in the token sequence.
-
-  If the rule demands a non-terminal, it is checked whether the rule
-  for to this non-terminal is applicable. If so, the branch
-  is selected, and recursively checked. If the rule is not applicable,
-  the check fails immediately.
-
-- THERE IS NO BACKTRACKING! 
-
-  Note that the following works (but the construction is resolved at
-  generation time):
-
-  rule1() =
-     rule2() A B ... {{ ... }}
-
-  rule2() =
-     C {{ ... }}
-   | D {{ ... }}
-
-  In this case, the (only) branch of rule1 is selected if the next
-  token is C or D.
-
----
-
-
-
-*** Options and repetitions ***
-
-Symbols can be tagged as being optional, or to occur repeatedly:
-
-rule():
-  Name whitespace()* Question_mark?
-
-- "*": The symbol matches zero or more occurrences.
-
-- "?": The symbol matches zero or one occurrence.
-
-This is done as follows:
-
-- terminal*: The maximum number of consecutive tokens <terminal> are
-             matched.
-- non-terminal*: The maximum number of the subsequences matching
-                 <non-terminal> are matched. Before another
-                 subsequence is matched, it is checked whether the
-                 rule for <non-terminal> is applicable. If so, the
-                 rule is invoked and must succeed (otherwise Parsing.
-                Parse_error). If not, the loop is exited.
-
-- terminal?: If the next token is <terminal>, it is matched. If not,
-             no token is matched.
-
-- non-terminal?: It is checked whether the rule for <non-terminal>
-                 is applicable. If so, the rule is invoked, and
-                 matches a sequence of tokens. If not, no token is
-                matched.
-
-You may refer to repeated or optional symbols by labels. In this case,
-the label is associated with lists of values, or optional values, 
-respectively:
-
-rule():
-  A  lab:other()*  lab':unlikely()?
-    {{ let n = List.length lab in ... 
-       match lab' with
-         None -> ...
-       | Some v -> ... 
-    }}
-
-A different scheme is applied if the symbol is a token without
-associated value (%token Name, and NOT %token <> Name):
-
-rule():
-  A lab:B* lab':C?
-
-Here, "lab" becomes an integer variable counting the number of Bs, and
-"lab'" becomes a boolean variable denoting whether there is a C or not.
-
-
-*** Early let-binding ***
-
-You may put some OCaml code directly after the first symbol of a
-branch:
-
-rule():
-  A $ {{ let-binding }} C D ... {{ ... }}
-
-The code brace {{ let-binding }} must be preceded by a dollar
-sign. You can put "let ... = ... in" statements into this brace:
-
-rule1():
-  n:A $ {{ let twice = 2 * n in }} rule2(twice) {{ ... }}
-
-This code is executed once the branch is selected.
-
-
-*** Very early let-binding ***
-
-This is also possible:
-
-rule():
-  $ {{ CODE }}
-  A
-  ...
-
-The CODE is executed right when the branch is selected, and before any
-other happens. (Only for hacks!)
-
-
-
-*** Computed rules ***
-
-rule():
-  A $ {{ let followup = ... some function ... in }} [ followup ]() 
-    {{ ... }}
-
-Between [ and ], you can refer to the O'Caml name of *any* function.
-Here, the function "followup" is bound in the let-binding.
-
-
-*** Error handling ***
-
-If a branch is already selected, but the check fails whether the other
-symbols of the branch match, it is possible to catch the resulting
-exception and to find out at which position the failure has occurred.
-
-rule():
-  x:A y:B z:C {{ ... }} ? {{ ERROR-CODE }}
-
-After a question mark, it is allowed to append another code
-brace. This code is executed if the branch check fails (but not if the
-branch is not selected nor if no branches are selected). The string
-variable !yy_position contains the label of the symbol that caused the
-failure (or it contains the empty string if the symbol does not have a
-label). 
-
-Example:
-
-rule():
-  x:A y:B z:C {{ print_endline "SUCCESS" }} ? {{ print_endline !yy_position }}
-
-If the token sequence is A B C, "SUCCESS" will be printed. If the
-sequence is A C, the second symbol fails, and "y" will be printed. If
-the sequence is A B D, the third symbol fails, and "z" will be
-printed. If the sequence is B, the rule will be never selected because
-it is not applicable.
-
-
-
-*** Error recovery ***
-
-You may call the functions yy_current, yy_get_next, or one of the
-parse_* functions in the error brace to recover from the error
-(e.g. to move ahead until a certain token is reached). See below.
-
-
-
-*** How to call the parser ***
-
-The rules are rewritten into a OCaml let-binding:
-
-let rec parse_<rule1> ... = ...
-    and parse_<rule2> ... = ...
-    ...
-    and parse_<ruleN> ... = ...
-in
-
-i.e. there are lots of functions, and the name of the functions are
-"parse_" plus the name of the rules. You can call every function.
-
-The first two arguments of the functions have a special meaning; the
-other arguments are the arguments coming from the rule description:
-
-rule(a,b):
-  ...
-
-===>
-
-let rec parse_rule yy_current yy_get_next a b = ...
-
-The first argument, yy_current, is a function that returns the current
-token. The second arguments, yy_get_next, is a function that switches
-to the next token, and returns it.
-
-If the tokens are stored in a list, this may be a definition:
-
-let input = ref [ Token1; Token2; ... ] in
-let yy_current() = List.hd !input in
-let yy_get_next () =
-  input := List.tl !input;
-  List.hd !input
-
-When you call one of the parser functions, the current token must
-already be loaded, i.e. yy_current returns the first token to match by
-the function.
-
-After the functions has returned, the current token is the token
-following the sequence of tokens that have been matched by the
-function.
-
-The function returns the value computed by the OCaml code brace of the
-rule (or the value of the error brace).
-
-If the rule is not applicable, the exception Not_found is raised.
-
-If the rule is applicable, but it does not match, the exception
-Parsing.Parse_error is raised.
diff --git a/helm/DEVEL/pxp/pxp/m2parsergen/ast.ml b/helm/DEVEL/pxp/pxp/m2parsergen/ast.ml
deleted file mode 100644 (file)
index 219dd0c..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-type declaration =
-    D_token of string                         (* D_token name *)
-  | D_typed_token of string                   (* D_typed_token name *)
-;;
-
-type symbol =
-    U_symbol of (string * string option)      (* U_symbol(token, label) *)
-  | L_symbol of (string * string list * string option)
-                                        (* L_symbol(token, args, label) *)
-  | L_indirect of (string * string list * string option)
-;;
-
-
-type modifier =
-    Exact
-  | Option
-  | Repetition
-;;
-
-
-type pattern =
-    { pat_symbol : symbol;
-      pat_modifier : modifier;
-    }
-
-
-type branch = 
-    { branch_selector : symbol;
-      branch_early_code : (string * int * int);
-      branch_binding_code : (string * int * int);
-      branch_pattern : pattern list;
-      branch_result_code : (string * int * int);
-      branch_error_code : (string * int * int) option;
-    }
-;;
-
-type rule =
-    { rule_name : string;
-      rule_arguments : string list;           (* List of names *)
-      rule_branches : branch list;
-    }
-;;
-
-type text =
-    { text_decls : declaration list;
-      text_rules : rule list;
-    }
-;;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/05/09 00:03:22  gerd
- *     Added [ ml_name ] symbols, where ml_name is an arbitrary
- * OCaml identifier.
- *
- * Revision 1.2  2000/05/08 22:03:01  gerd
- *     It is now possible to have a $ {{ }} sequence right BEFORE
- * the first token. This code is executed just after the first token
- * has been recognized.
- *
- * Revision 1.1  2000/05/06 17:36:17  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/m2parsergen/generator.ml b/helm/DEVEL/pxp/pxp/m2parsergen/generator.ml
deleted file mode 100644 (file)
index 4301f22..0000000
+++ /dev/null
@@ -1,920 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Parser
-open Ast
-
-(* Overall scheme:
- *
- * The rules are translated to:
- *
- * let rec parse_<rule1> ... = ...
- *     and parse_<rule2> ... = ...
- *     and ...
- *     and parse_<ruleN> ... = ...
- * in
- *
- * Every rule has at least two arguments: 'current' and 'get_next'.
- * 'current()' is the token that should match the first symbol of the
- * rule. 'get_next()' returns the next token.
- *
- * The rules may have further user arguments; these are the next arguments
- * in turn.
- *
- * The rules return the user value. After they have returned to the caller 
- * the current token is the token that follows the sequence of tokens 
- * matching the rule.
- *
- * The rules will raise:
- *  - Not_found if the first token does not match
- *  - Parsing.Parse_error if the rest does not match.
- *
- * Rule scheme:
- *
- * rule(arg1,arg2,...):
- *   (l1:x1)
- *   {{ let-CODE }}
- *   (l2:y2(name1,...)) y3 ... 
- *   {{ CODE }}
- *   ? {{ ?-CODE }}
- * | x2 ...
- * | ...
- * | xN
- *
- * let parse_<rule> current get_next arg1 arg2 ... =
- *   match current() with
- *     S(x1) -> ...
- *   | S(x2) -> ...
- *   | ...
- *   | S(xN) -> ...
-*    | _ -> raise Not_found
- *
- * Here, S(xi) denotes the set of tokens matched by xi without all tokens
- * already matched by x1 to x(i-1). (If S(xi) = empty, a warning is printed,
- * and this branch of the rule is omitted.)
- *
- * S(xi) may be a set because xi may be a reference to another rule. In this
- * case, S(xi) bases on the set of tokens that match the first symbol of 
- * the other rule. (In general, S(xi) must be computed recursively.)
- *
- * If the "?" clause is present, every branch is embraced by the following:
- *
- * let position = ref "<Label of x1>" in
- * ( try ... 
- *   with Parsing.Parse_error -> ( <<?-CODE>> )
- * )
- * 
- * Next: The "..." is
- *
- * OPTIONAL: let <l1> = parse_<rule(x1)> in
- * <<let-CODE>>
- * M(y1)
- * M(y2)
- * ...
- * M(yN)
- * <<CODE>>
- *
- * If x1 is a rule invocation, it is now parsed, and the result is bound
- * to a variable.
- *
- * Note: After x1 has matched, the Caml variable <l1> must be either
- * bound to the result of the sub parsing, or to the value associated
- * with the token (if any). The latter is already done in the main
- * "match" statement, i.e. "match ... with S(x1) -> ..." is actually
- * "match ... with Token1 <l1> -> ...".
- *
- * Note: After calling parse_<rule(x1)> the exception Not_found is NEVER
- * converted to Parsing.Parse_error. It is simply not possible that this
- * happens.
-
- * For every remaining symbol yi of the rule, a matching statement M(yi)
- * is produced. These statements have the form:
- *
- * OPTIONAL: position := "<Label of yi>";
- * CASE: yi is a token without associated value
- *     let yy_i = get_next()  OR  current() in
- *     if yy_i <> Token(yi) then raise Parsing.Parse_error;
- * CASE: yi is a token with value
- *     let yy_i = get_next()  OR  current() in
- *     let <li> = match yy_i with Token x -> x | _ -> raise Parsing.Parse_error 
- *     in
- * CASE: yi is a rule invocation
- *     OPTIONAL: let _ = get_next() in
- *     let <li> = try parse_<rule(yi)> 
- *                with Not_found -> raise Parsing.Parse_error in
- *
- * yy_i is get_next() if y(i-1) was a token, and yy_i is current() if
- * y(i-1) was a rule invocation.
- *
- * Repetitions:
- *
- * If yi = (yi')*:
- *
- * CASE no label given:
- *
- * ( try 
- *     while true do 
- *       M(yi') with the modification that top-level mismatches raise
- *              Not_found instead of Parsing.Parse_error
- *     done
- *   with Not_found -> ()
- * )
- *
- * CASE a label <li> is given: The list of results must be bound to <li>!
- *
- * let yy_list = ref [] in
- * ( try 
- *     while true do
- *       let yy_first = M(yi') (with some modifications) in
- *       yy_list := yy_first :: !yy_list;
- *     done
- *   with Not_found -> ()
- * );
- * let <li> = List.rev !yy_list in
- *
- * Note that this scheme minimizes stack and heap allocations.
- *
- * Options:
- *
- * If yi = (yi')?:
- *
- * CASE no label given:
- *
- * ( try 
- *     M(yi') with the modification that top-level mismatches raise
- *            Not_found instead of Parsing.Parse_error
- *   with Not_found -> ()
- * )
- *
- * CASE a label <li> is given: The optional result must be bound to <li>!
- *
- * let <li> =
- *   try 
- *     Some( M(yi') (with some modifications) )
- *   with Not_found -> None
- * );
- *)
-
-
-let lookup_rule tree name =
-  try
-    List.find (fun r -> r.rule_name = name) tree.text_rules
-  with
-      Not_found ->
-       failwith ("Rule `" ^ name ^ "' not found")
-;;
-
-
-let is_typed tree name =
-  (* Find out whether the token 'name' is typed or not *)
-  let decl =
-    try
-      List.find (fun d -> match d with
-                    D_token n -> n = name
-                  | D_typed_token n -> n = name
-               )
-       tree.text_decls
-    with
-       Not_found -> 
-         failwith ("Token `" ^ name ^ "' not found")
-  in
-  match decl with
-      D_token _ -> false
-    | D_typed_token _ -> true
-;;
-
-
-let label_of_symbol tree sym =
-  match sym with
-      U_symbol (tok, lab) -> 
-       (* if is_typed tree tok then lab else None *)
-       lab
-    | L_symbol (_, _, lab) -> lab
-    | L_indirect (_, _, lab) -> lab
-;;
-
-
-let is_untyped_U_symbol tree sym =
-  match sym with
-      U_symbol (tok, _) -> 
-       not(is_typed tree tok)
-    | L_symbol (_, _, _) -> false
-    | L_indirect (_, _, _) -> false
-;;
-
-
-
-let rec set_of_list l =
-  (* Removes duplicate members of l *)
-  match l with
-      [] -> []
-    | x :: l' -> if List.mem x l' then set_of_list l' else x :: (set_of_list l')
-;;
-
-
-let selector_set_of_rule tree name =
-  (* Determines the set of tokens that match the first symbol of a rule *)
-  
-  let rec collect visited_rules name =
-    if List.mem name visited_rules then
-      []
-    else
-      let r = lookup_rule tree name in
-      List.flatten
-       (List.map
-          (fun branch ->
-             match branch.branch_selector with
-                 U_symbol (tok_name,_) ->
-                   [ tok_name ]
-               | L_symbol (rule_name, _, _) ->
-                   collect (name :: visited_rules) rule_name
-               | L_indirect (_, _, _) ->
-                   failwith("The first symbol in rule `" ^ name ^ 
-                            "' is an indirect call; this is not allowed")
-          )
-          r.rule_branches
-       )
-  in
-  set_of_list (collect [] name)
-;;
-
-
-let output_code_location b file_name (_, line, column) = 
-  Buffer.add_string b "\n";
-  Buffer.add_string b ("# " ^ string_of_int line ^ " \"" ^
-                      file_name ^ "\"\n");
-  Buffer.add_string b (String.make column ' ')
-;;
-
-
-let phantasy_line = ref 100000;;
-
-let output_code b file_name ((code, line, column) as triple) = 
-  if code <> "" then begin
-    output_code_location b file_name triple;
-    Buffer.add_string b code;
-    Buffer.add_string b ("\n# " ^ string_of_int !phantasy_line ^ " \"<Generated Code>\"\n");
-    phantasy_line := !phantasy_line + 10000;
-  end
-;;
-
-
-let process_branch b file_name tree branch =
-
-  let make_rule_invocation called_rule args lab allow_not_found =
-    (* Produces: let <label> = parse_<called_rule> ... args in 
-     * If not allow_not_found, the exception Not_found is caught and
-     * changed into Parsing.Parse_error.
-     *)
-    let r = lookup_rule tree called_rule in
-    if List.length r.rule_arguments <> List.length args then
-      failwith("Calling rule `" ^ called_rule ^ "' with the wrong number of arguments!");
-
-    Buffer.add_string b "let ";
-    begin match lab with
-       None   -> Buffer.add_string b "_"
-      | Some l -> Buffer.add_string b l
-    end;
-    Buffer.add_string b " = ";
-    if not allow_not_found then
-      Buffer.add_string b "try ";
-    Buffer.add_string b "parse_";
-    Buffer.add_string b called_rule;
-    Buffer.add_string b " yy_current yy_get_next";
-    List.iter
-      (fun a -> Buffer.add_string b " ";
-               Buffer.add_string b a;
-      )
-      args;
-    if not allow_not_found then
-      Buffer.add_string b " with Not_found -> raise Parsing.Parse_error";
-    Buffer.add_string b " in\n"
-  in
-
-  let make_indirect_rule_invocation ml_name args lab allow_not_found =
-    (* Produces: let <label> = ml_name ... args in 
-     * If not allow_not_found, the exception Not_found is caught and
-     * changed into Parsing.Parse_error.
-     *)
-    Buffer.add_string b "let ";
-    begin match lab with
-       None   -> Buffer.add_string b "_"
-      | Some l -> Buffer.add_string b l
-    end;
-    Buffer.add_string b " = ";
-    if not allow_not_found then
-      Buffer.add_string b "try ";
-    Buffer.add_string b ml_name;
-    Buffer.add_string b " yy_current yy_get_next";
-    List.iter
-      (fun a -> Buffer.add_string b " ";
-               Buffer.add_string b a;
-      )
-      args;
-    if not allow_not_found then
-      Buffer.add_string b " with Not_found -> raise Parsing.Parse_error";
-    Buffer.add_string b " in\n"
-  in
-
-  let process_symbol sym previous_was_token allow_not_found =
-    match sym with
-       U_symbol(tok, lab) ->
-         (* Distinguish between simple tokens and typed tokens *)
-         if is_typed tree tok then begin
-           (* Typed token *)
-           Buffer.add_string b "let ";
-           begin match lab with
-               None   -> Buffer.add_string b "_"
-             | Some l -> Buffer.add_string b l
-           end;
-           Buffer.add_string b " = match ";
-           if previous_was_token then
-             Buffer.add_string b "yy_get_next()"
-           else
-             Buffer.add_string b "yy_current()";
-           Buffer.add_string b " with ";
-           Buffer.add_string b tok;
-           Buffer.add_string b " x -> x | _ -> raise ";
-           if allow_not_found then
-             Buffer.add_string b "Not_found"
-           else
-             Buffer.add_string b "Parsing.Parse_error";
-           Buffer.add_string b " in\n";
-         end
-         else begin
-           (* Simple token *)
-           Buffer.add_string b "if (";
-           if previous_was_token then
-             Buffer.add_string b "yy_get_next()"
-           else
-             Buffer.add_string b "yy_current()";
-           Buffer.add_string b ") <> ";
-           Buffer.add_string b tok;
-           Buffer.add_string b " then raise ";
-           if allow_not_found then
-             Buffer.add_string b "Not_found;\n"
-           else
-             Buffer.add_string b "Parsing.Parse_error;\n"
-         end
-      | L_symbol(called_rule, args, lab) ->
-         if previous_was_token then
-           Buffer.add_string b "ignore(yy_get_next());\n";
-         make_rule_invocation called_rule args lab allow_not_found
-      | L_indirect(ml_name, args, lab) ->
-         if previous_was_token then
-           Buffer.add_string b "ignore(yy_get_next());\n";
-         make_indirect_rule_invocation ml_name args lab allow_not_found
-  in
-
-  let process_pattern (current_position, previous_was_token) pat =
-    (* Assign "position" if necessary. *)
-    let new_position =
-      if branch.branch_error_code <> None then begin
-       match pat.pat_symbol with
-           U_symbol(_,Some l)   -> l
-         | L_symbol(_,_,Some l) -> l
-         | L_indirect(_,_,Some l) -> l
-         | _ -> ""
-      end
-      else ""
-    in
-    if new_position <> current_position then begin
-      Buffer.add_string b "yy_position := \"";
-      Buffer.add_string b new_position;
-      Buffer.add_string b "\";\n";
-    end;
-
-    let this_is_token =
-      match pat.pat_symbol with
-         U_symbol(_,_)   -> pat.pat_modifier = Exact
-       | L_symbol(_,_,_) -> false
-       | L_indirect(_,_,_) -> false
-    in
-
-    (* First distinguish between Exact, Option, and Repetition: *)
-    begin match pat.pat_modifier with
-       Exact ->
-         process_symbol pat.pat_symbol previous_was_token false
-      | Option ->
-         begin match label_of_symbol tree pat.pat_symbol with
-             None ->
-               (* CASE: optional symbol without label *)
-               (* OPTIMIZATION: If the symbol is
-                * a token, the loop becomes very simple.
-                *)
-               if (match pat.pat_symbol with 
-                       U_symbol(t,_) -> not (is_typed tree t) | _ -> false) 
-               then begin
-                 let tok = match pat.pat_symbol with 
-                              U_symbol(t,_) -> t | _ -> assert false in
-                 (* Optimized case *)
-                 Buffer.add_string b "if ";
-                 if previous_was_token then
-                   Buffer.add_string b "yy_get_next()"
-                 else
-                   Buffer.add_string b "yy_current()";
-                 Buffer.add_string b " = ";
-                 Buffer.add_string b tok;
-                 Buffer.add_string b " then ignore(yy_get_next());\n";
-               end
-               else begin
-                 (* General, non-optimized case: *)
-                 Buffer.add_string b "( try (";
-                 process_symbol pat.pat_symbol previous_was_token true;
-                 Buffer.add_string b "ignore(yy_get_next());\n";
-                 Buffer.add_string b ") with Not_found -> ());\n";
-               end
-           | Some l ->
-               (* CASE: optional symbol with label *)
-               if is_untyped_U_symbol tree pat.pat_symbol then begin
-                 (* SUBCASE: The label becomes a boolean variable *)
-                 Buffer.add_string b "let ";
-                 Buffer.add_string b l;
-                 Buffer.add_string b " = try (";
-                 process_symbol pat.pat_symbol previous_was_token true;
-                 Buffer.add_string b ");\n";
-                 Buffer.add_string b "ignore(yy_get_next());\n";
-                 Buffer.add_string b "true with Not_found -> false in\n";
-               end
-               else begin
-                 (* SUBCASE: the symbol has a value *)
-                 Buffer.add_string b "let ";
-                 Buffer.add_string b l;
-                 Buffer.add_string b " = try let yy_tok = Some(";
-                 process_symbol pat.pat_symbol previous_was_token true;
-                 Buffer.add_string b l;
-                 Buffer.add_string b ") in\n";
-                 
-                 if (match pat.pat_symbol with
-                         U_symbol(_,_) -> true | _ -> false) then
-                   Buffer.add_string b "ignore(yy_get_next());\n";
-                 
-                 Buffer.add_string b "yy_tok with Not_found -> None in\n";
-               end
-         end
-      | Repetition ->
-         begin match label_of_symbol tree pat.pat_symbol with
-             None ->
-               (* CASE: repeated symbol without label *)
-               (* OPTIMIZATION: If the symbol is
-                * a token, the loop becomes very simple.
-                *)
-               if (match pat.pat_symbol with 
-                       U_symbol(t,_) -> not (is_typed tree t) | _ -> false) 
-               then begin
-                 let tok = match pat.pat_symbol with 
-                              U_symbol(t,_) -> t | _ -> assert false in
-                 if previous_was_token then begin
-                   (* Optimized case I *)
-                   Buffer.add_string b "while yy_get_next() = ";
-                   Buffer.add_string b tok;
-                   Buffer.add_string b " do () done;\n";
-                 end
-                 else begin
-                   (* Optimized case II *)
-                   Buffer.add_string b "if yy_current() = ";
-                   Buffer.add_string b tok;
-                   Buffer.add_string b " then (";
-                   Buffer.add_string b "while yy_get_next() = ";
-                   Buffer.add_string b tok;
-                   Buffer.add_string b " do () done);\n";
-                 end
-               end
-               else begin
-                 (* General, non-optimized case: *)
-                 if previous_was_token then
-                   Buffer.add_string b "ignore(yy_get_next());\n";
-                 Buffer.add_string b "( try while true do (";
-                 process_symbol pat.pat_symbol false true;
-
-                 if (match pat.pat_symbol with
-                        U_symbol(_,_) -> true | _ -> false) then
-                   Buffer.add_string b "ignore(yy_get_next());\n"
-                 else
-                   Buffer.add_string b "();\n";
-
-                 Buffer.add_string b ") done with Not_found -> ());\n";
-               end
-           | Some l ->
-               (* CASE: repeated symbol with label *)
-               if is_untyped_U_symbol tree pat.pat_symbol then begin
-                 (* SUBCASE: The label becomes an integer variable *)
-                 if previous_was_token then
-                   Buffer.add_string b "ignore(yy_get_next());\n";
-                 Buffer.add_string b "let yy_counter = ref 0 in\n";
-                 Buffer.add_string b "( try while true do \n";
-                 process_symbol pat.pat_symbol false true;
-                 Buffer.add_string b "incr yy_counter;\n";
-                 
-                 if (match pat.pat_symbol with
-                         U_symbol(_,_) -> true | _ -> false) then
-                   Buffer.add_string b "ignore(yy_get_next());\n";
-                 
-                 Buffer.add_string b "done with Not_found -> ());\n";
-                 Buffer.add_string b "let ";
-                 Buffer.add_string b l;
-                 Buffer.add_string b " = !yy_counter in\n";
-               end
-               else begin
-                 (* SUBCASE: the symbol has a value *)
-                 if previous_was_token then
-                   Buffer.add_string b "ignore(yy_get_next());\n";
-                 Buffer.add_string b "let yy_list = ref [] in\n";
-                 Buffer.add_string b "( try while true do \n";
-                 process_symbol pat.pat_symbol false true;
-                 Buffer.add_string b "yy_list := ";
-                 Buffer.add_string b l;
-                 Buffer.add_string b " :: !yy_list;\n";
-                 
-                 if (match pat.pat_symbol with
-                         U_symbol(_,_) -> true | _ -> false) then
-                   Buffer.add_string b "ignore(yy_get_next());\n";
-                 
-                 Buffer.add_string b "done with Not_found -> ());\n";
-                 Buffer.add_string b "let ";
-                 Buffer.add_string b l;
-                 Buffer.add_string b " = List.rev !yy_list in\n";
-               end
-         end
-    end;
-
-    (* Continue: *)
-    (new_position, this_is_token)
-  in
-
-
-  let process_inner_branch current_position =
-    (* If there is "early code", run this now: *)
-    output_code b file_name branch.branch_early_code;
-    Buffer.add_string b "\n";
-
-    (* If the first symbol is a rule invocation, call the corresponding
-     * parser function now.
-     *)
-    let previous_was_token =
-      begin match branch.branch_selector with
-         U_symbol(_,_) -> 
-           true
-       | L_symbol(called_rule, args, lab) ->
-           make_rule_invocation called_rule args lab true;
-           false
-       | L_indirect(_,_,_) -> 
-           failwith("The first symbol in some rule is an indirect call; this is not allowed")
-      end
-    in
-
-    (* Now output the "let-CODE". *)
-    output_code b file_name branch.branch_binding_code;
-    Buffer.add_string b "\n";
-
-    (* Process the other symbols in turn: *)
-    let (_, previous_was_token') =
-      (List.fold_left
-        process_pattern
-        (current_position, previous_was_token)
-        branch.branch_pattern
-      )
-    in
-
-    (* Special case: 
-     *
-     * If previous_was_token', we must invoke yy_get_next one more time.
-     * This is deferred until "CODE" is executed to give this code 
-     * the chance to make the next token available (in XML, the next token
-     * might come from a different entity, and "CODE" must switch to this
-     * entity).
-     *)
-
-    (* Now output "CODE": *)
-    Buffer.add_string b "let result = \n";
-    output_code b file_name branch.branch_result_code;
-    Buffer.add_string b "\nin\n";
-
-    if previous_was_token' then
-      Buffer.add_string b "ignore(yy_get_next());\nresult\n"
-    else
-      Buffer.add_string b "result\n"
-  in
-
-  (* If we have a ? clause, generate now the "try" statement *)
-  match branch.branch_error_code with
-      None ->
-       Buffer.add_string b "( ";
-       process_inner_branch "";
-       Buffer.add_string b " )";
-    | Some code ->
-
-       (* let position = ref "<label>" in *)
-
-       Buffer.add_string b "let yy_position = ref \"";
-       let current_position =
-         match branch.branch_selector with
-             U_symbol(_,_) -> ""
-           | L_symbol(_,_,None) -> ""
-           | L_symbol(_,_,Some l) -> l
-           | L_indirect(_,_,None) -> ""
-           | L_indirect(_,_,Some l) -> l
-       in
-       Buffer.add_string b current_position;
-       Buffer.add_string b "\" in\n";
-       
-       (* The "try" statement: *)
-
-       Buffer.add_string b "( try (\n";
-
-       process_inner_branch current_position;
-
-       Buffer.add_string b "\n) with Parsing.Parse_error -> (\n";
-       output_code b file_name code;
-       Buffer.add_string b "\n))\n"
-;;
-
-
-let process b file_name tree =
-  (* Iterate over the rules and output the parser functions: *)
-  let is_first = ref true in
-  List.iter
-    (fun r ->
-
-       (* Generate the function header: *)
-
-       if !is_first then
-        Buffer.add_string b "let rec "
-       else
-        Buffer.add_string b "and ";
-       is_first := false;
-       Buffer.add_string b "parse_";
-       Buffer.add_string b r.rule_name;
-       Buffer.add_string b " yy_current yy_get_next";
-       List.iter
-        (fun arg -> Buffer.add_string b " ";
-                    Buffer.add_string b arg)
-        r.rule_arguments;
-       Buffer.add_string b " =\n";
-
-       (* Generate the "match" statement: *)
-
-       Buffer.add_string b "match yy_current() with\n";
-       let s_done = ref [] in
-       (* s_done: The set of already matched tokens *)
-
-       List.iter
-        (fun branch ->
-           match branch.branch_selector with
-               U_symbol(tok, lab) ->
-                 (* A simple token *)
-                 if List.mem tok !s_done then begin
-                   prerr_endline("WARNING: In rule `" ^ r.rule_name ^ 
-                                 "': Match for token `" ^
-                                 tok ^ "' hidden by previous match");
-                 end
-                 else
-                   if is_typed tree tok then begin
-                     match lab with
-                         None ->
-                           Buffer.add_string b "| ";
-                           Buffer.add_string b tok;
-                           Buffer.add_string b " _ -> ";
-                           process_branch b file_name tree branch;
-                           Buffer.add_string b "\n";
-                           s_done := tok :: !s_done;
-                       | Some l ->
-                           Buffer.add_string b "| ";
-                           Buffer.add_string b tok;
-                           Buffer.add_string b " ";
-                           Buffer.add_string b l;
-                           Buffer.add_string b " -> ";
-                           process_branch b file_name tree branch;
-                           Buffer.add_string b "\n";
-                           s_done := tok :: !s_done;
-                 end
-                 else begin
-                   Buffer.add_string b "| ";
-                   Buffer.add_string b tok;
-                   Buffer.add_string b " -> ";
-                   process_branch b file_name tree branch;
-                   Buffer.add_string b "\n";
-                   s_done := tok :: !s_done;
-                 end
-             | L_symbol(called_rule, args, lab) ->
-                 (* An invocation of a rule *)
-                 let s_rule = selector_set_of_rule tree called_rule in
-                 let s_rule' =
-                   List.filter
-                     (fun tok ->
-                        if List.mem tok !s_done then begin
-                          prerr_endline("WARNING: In rule `" ^ r.rule_name ^ 
-                                        "': Match for token `" ^
-                                        tok ^ "' hidden by previous match");
-                          false
-                        end
-                        else true)
-                     s_rule in
-                 if s_rule' <> [] then begin
-                   Buffer.add_string b "| ( ";
-                   let is_first = ref true in
-                   List.iter
-                     (fun tok ->
-                        if not !is_first then
-                          Buffer.add_string b " | ";
-                        is_first := false;
-                        Buffer.add_string b tok;
-                        if is_typed tree tok then
-                          Buffer.add_string b " _";
-                     )
-                     s_rule';
-                   Buffer.add_string b ") -> ";
-                   process_branch b file_name tree branch;
-                   Buffer.add_string b "\n";
-                   s_done := s_rule' @ !s_done;
-                 end
-             | L_indirect(ml_name, args, lab) ->
-                 (* An invocation of an indirect rule *)
-                 failwith("The first symbol in rule `" ^ r.rule_name ^ 
-                          "' is an indirect call; this is not allowed")
-        )
-        r.rule_branches;
-
-       Buffer.add_string b "\n| _ -> raise Not_found\n";
-    )
-    tree.text_rules;
-
-  Buffer.add_string b " in\n"
-;;
-
-
-let count_lines s =
-  (* returns number of lines in s, number of columns of the last line *)
-  let l = String.length s in
-
-  let rec count n k no_cr no_lf =
-    let next_cr = 
-      if no_cr then
-        (-1)
-      else
-        try String.index_from s k '\013' with Not_found -> (-1) in
-    let next_lf = 
-      if no_lf then
-        (-1)
-      else
-        try String.index_from s k '\010' with Not_found -> (-1) in
-    if next_cr >= 0 & (next_lf < 0 or next_cr < next_lf) then begin
-      if next_cr+1 < l & s.[next_cr+1] = '\010' then
-        count (n+1) (next_cr+2) false (next_lf < 0)
-      else
-        count (n+1) (next_cr+1) false (next_lf < 0)
-    end
-    else if next_lf >= 0 then begin
-      count (n+1) (next_lf+1) (next_cr < 0) false
-    end
-    else
-      n, (l - k)
-
-  in
-  count 0 0 false false
-;;
-
-
-type scan_context =
-    { mutable old_line : int;
-      mutable old_column : int;
-      mutable line : int;
-      mutable column : int;
-    }
-;;
-
-
-let rec next_token context lexbuf =
-  let t = Lexer.scan_file lexbuf in
-  let line = context.line in
-  let column = context.column in
-  context.old_line <- line;
-  context.old_column <- column;
-  let n_lines, n_columns = count_lines (Lexing.lexeme lexbuf) in
-  if n_lines > 0 then begin
-    context.line <- line + n_lines;
-    context.column <- n_columns;
-  end 
-  else 
-    context.column <- column + n_columns;
-  match t with
-      Space -> next_token context lexbuf
-    | Code(s,_,_) -> Code(s,line,column + 2)
-    | Eof   -> failwith "Unexpected end of file"
-    | _     -> t
-;;
-
-
-let parse_and_generate ch =
-  let b = Buffer.create 20000 in
-
-  let rec find_sep context lexbuf =
-    let t = Lexer.scan_header lexbuf in
-    let line = context.line in
-    let column = context.column in
-    context.old_line <- line;
-    context.old_column <- column;
-    let n_lines, n_columns = count_lines (Lexing.lexeme lexbuf) in
-    if n_lines > 0 then begin
-      context.line <- line + n_lines;
-      context.column <- n_columns;
-    end 
-    else 
-      context.column <- column + n_columns;
-    match t with
-       Code(s,_,_) -> 
-         Buffer.add_string b s;
-          find_sep context lexbuf
-      | Eof    -> failwith "Unexpected end of file"
-      | Separator -> ()
-      | _         -> assert false
-  in
-
-  let rec find_rest context lexbuf =
-    let t = Lexer.scan_header lexbuf in
-    let line = context.line in
-    let column = context.column in
-    context.old_line <- line;
-    context.old_column <- column;
-    let n_lines, n_columns = count_lines (Lexing.lexeme lexbuf) in
-    if n_lines > 0 then begin
-      context.line <- line + n_lines;
-      context.column <- n_columns;
-    end 
-    else 
-      context.column <- column + n_columns;
-    match t with
-       Code(s,_,_) -> 
-         Buffer.add_string b s;
-          find_rest context lexbuf
-      | Eof    -> ()
-      | _      -> assert false
-  in
-
-  (* First read until '%%' *)
-  let lexbuf = Lexing.from_channel ch in
-  let context = { old_line = 0; old_column = 0; line = 1; column = 0 } in
-  let file_name = "stdin" in
-  try
-    output_code_location b file_name ("", 1, 0);
-    find_sep context lexbuf;
-    (* Parse the following text *)
-    let text = (Parser.text (next_token context) lexbuf : Ast.text) in
-    (* Process it: *)
-    process b file_name text;
-    (* Read rest *)
-    output_code_location b file_name ("", context.line, context.column);
-    find_rest context lexbuf;
-    (* Output everything: *)
-    print_string (Buffer.contents b)
-  with
-      any ->
-       Printf.eprintf 
-         "Error at line %d column %d: %s\n"
-         context.old_line
-         context.old_column
-         (Printexc.to_string any);
-       exit 1
-;;
-
-
-parse_and_generate stdin;;
-exit 0;;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.7  2000/08/17 00:33:02  gerd
- *     Bugfix: tok* and tok? work now if tok is an untyped token
- * without label.
- *
- * Revision 1.6  2000/05/14 20:59:24  gerd
- *     Added "phantasy line numbers" to help finding errorneous locations.
- *
- * Revision 1.5  2000/05/14 20:41:58  gerd
- *     x: Token?   means: if Token is detected x=true else x=false.
- *     x: Token*   means: x becomes the number of ocurrences of Token.
- *
- * Revision 1.4  2000/05/09 00:03:22  gerd
- *     Added [ ml_name ] symbols, where ml_name is an arbitrary
- * OCaml identifier.
- *
- * Revision 1.3  2000/05/08 22:03:01  gerd
- *     It is now possible to have a $ {{ }} sequence right BEFORE
- * the first token. This code is executed just after the first token
- * has been recognized.
- *
- * Revision 1.2  2000/05/06 21:51:08  gerd
- *     Numerous bugfixes.
- *
- * Revision 1.1  2000/05/06 17:36:17  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/m2parsergen/lexer.mll b/helm/DEVEL/pxp/pxp/m2parsergen/lexer.mll
deleted file mode 100644 (file)
index a016897..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-{
-  open Parser
-}
-
-rule scan_file = parse
-    "/*" [^ '*']* ('*'+ [^ '/' '*'] [^ '*']* )* '*'* "*/"
-      { Space }
-  | "%token"
-      { Token }
-  | "<" [' ' '\t' '\r' '\n']* ">"
-      { Type 
-      }
-  | [ 'a'-'z' ] [ 'a'-'z' 'A'-'Z' '0'-'9' '_' ]*
-      { let s = Lexing.lexeme lexbuf in
-       Lname s
-      }
-  | [ 'A'-'Z' ] [ 'a'-'z' 'A'-'Z' '0'-'9' '_' ]*
-      { let s = Lexing.lexeme lexbuf in
-       Uname s
-      }
-  | "%%"
-      { Separator }
-  | "("
-      { Lparen }
-  | ","
-      { Comma }
-  | ")"
-      { Rparen }
-  | "[" 
-      { Lbracket }
-  | "]" 
-      { Rbracket }
-  | ":"
-      { Colon }
-  | "{{" [^ '}']* ( '}' [^ '}']+ )* "}}"
-      { let s = Lexing.lexeme lexbuf in
-       Code (String.sub s 2 (String.length s - 4), 0, 0)
-      }
-  | "?"
-      { Error }
-  | "|"
-      { Alt }
-  | "+"
-      { Loop_plus }
-  | "*"
-      { Loop_star }
-  | [' ' '\t' '\r' '\n']+
-      { Space }
-  | "$"
-      { Dollar }
-  | eof
-      { Eof }
-
-and scan_header = parse
-    "%%"
-      { Separator }
-  | "%"
-      { Code("%", 0, 0) }
-  | [^ '%']*
-      { Code(Lexing.lexeme lexbuf, 0, 0) }
-  | eof
-      { Eof }
-
-and scan_rest = parse
-    _*
-      { Code(Lexing.lexeme lexbuf, 0, 0) }
-  | eof 
-      { Eof }
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/05/09 00:03:22  gerd
- *     Added [ ml_name ] symbols, where ml_name is an arbitrary
- * OCaml identifier.
- *
- * Revision 1.2  2000/05/06 21:51:24  gerd
- *     New symbol Dollar.
- *
- * Revision 1.1  2000/05/06 17:36:17  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/m2parsergen/parser.mly b/helm/DEVEL/pxp/pxp/m2parsergen/parser.mly
deleted file mode 100644 (file)
index 7497c3a..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/* $Id$
- * ----------------------------------------------------------------------
- *
- */
-
-%{
-  open Ast
-
-%}
-
-%token Space
-%token Token
-%token Type
-%token <string> Lname
-%token <string> Uname
-%token Separator
-%token Lparen
-%token Rparen
-%token Comma
-%token Colon
-%token <string * int * int> Code
-%token Error
-%token Alt
-%token Loop_plus
-%token Loop_star
-%token Dollar
-%token Lbracket
-%token Rbracket%token Eof
-
-%start text
-%type <Ast.text> text
-
-%%
-
-text:
-  declarations rules
-    { { text_decls = $1; text_rules = $2; } }
-
-declarations:
-  declaration declarations
-    { $1 :: $2 }
-| Separator
-    { [] }
-
-declaration:
-  Token Uname
-    { D_token $2 }
-| Token Type Uname
-    { D_typed_token $3 }
-
-rules:
-  rule rules
-    { $1 :: $2 }
-| Separator
-    { [] }
-
-rule:
-  Lname Lparen formal_arguments Colon branches
-    { { rule_name = $1;
-       rule_arguments = $3;
-       rule_branches = $5;
-      }
-    }
-
-formal_arguments:
-  Rparen
-    { [] }
-| Lname comma_formal_arguments
-    { $1 :: $2 }
-
-comma_formal_arguments:
-  Comma Lname comma_formal_arguments
-    { $2 :: $3 }
-| Rparen
-    { [] }
-
-branches:
-  branch alt_branches
-    { $1 :: $2 }
-
-alt_branches:
-  Alt branch alt_branches
-    { $2 :: $3 }
-|
-    { [] }
-
-branch:
-  simple_branch
-    { $1 }
-| Dollar Code simple_branch
-    { { $3 with branch_early_code = $2 } }
-
-simple_branch:
-  symbol Dollar Code patterns Code opt_error_handler
-    { { branch_selector = $1;
-        branch_early_code = ("",0,0);
-       branch_binding_code = $3;
-       branch_pattern = $4;
-       branch_result_code = $5;
-       branch_error_code = $6;
-      }
-    }
-| symbol patterns Code opt_error_handler
-    { { branch_selector = $1;
-        branch_early_code = ("",0,0);
-       branch_binding_code = ("", 0, 0);
-       branch_pattern = $2;
-       branch_result_code = $3;
-       branch_error_code = $4;
-      }
-    }
-
-patterns:
-  pattern patterns
-    { $1 :: $2 }
-| 
-    { [] }
-
-pattern:
-  symbol Loop_star
-    { { pat_symbol = $1;
-       pat_modifier = Repetition;
-      }
-    }
-| symbol Error
-    { { pat_symbol = $1;
-       pat_modifier = Option;
-      }
-    }
-| symbol
-    { { pat_symbol = $1;
-       pat_modifier = Exact;
-      }
-    }
-
-symbol:
-  Lname Colon Uname
-    { U_symbol($3, Some $1) }
-| Lname Colon Lname Lparen actual_arguments 
-    { L_symbol($3, $5, Some $1) }
-| Lname Colon Lbracket Lname Rbracket Lparen actual_arguments 
-    { L_indirect($4, $7, Some $1) }
-| Uname
-    { U_symbol($1, None) }
-| Lname Lparen actual_arguments 
-    { L_symbol($1, $3, None) }
-| Lbracket Lname Rbracket Lparen actual_arguments 
-    { L_indirect($2, $5, None) }
-
-
-actual_arguments:
-  Rparen
-    { [] }
-| Lname comma_actual_arguments
-    { $1 :: $2 }
-
-comma_actual_arguments:
-  Rparen
-    { [] }
-| Comma Lname comma_actual_arguments
-    { $2 :: $3 }
-
-opt_error_handler:
-  Error Code
-    { Some $2 }
-| 
-    { None }
-
-%%
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.4  2000/05/09 00:03:22  gerd
- *     Added [ ml_name ] symbols, where ml_name is an arbitrary
- * OCaml identifier.
- *
- * Revision 1.3  2000/05/08 22:03:01  gerd
- *     It is now possible to have a $ {{ }} sequence right BEFORE
- * the first token. This code is executed just after the first token
- * has been recognized.
- *
- * Revision 1.2  2000/05/06 21:51:46  gerd
- *     New Dollar tag.
- *
- * Revision 1.1  2000/05/06 17:36:17  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/m2parsergen/x.m2y b/helm/DEVEL/pxp/pxp/m2parsergen/x.m2y
deleted file mode 100644 (file)
index 3fa80b0..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-
-type token =
-  A | B | C of int | EOF
-;;
-
-%%
-
-%token A
-%token B
-%token <> C
-%token EOF
-
-%%
-
-r():
-  one:s()
-  {{ }}
-  b:B
-  two:B?
-  three:s()
-  {{ prerr_endline ("Result: " ^ string_of_int three) }}
-? {{ prerr_endline ("ERROR: " ^ !yy_position) }}
-
-s():
-  A 
-  {{ }}
-  {{ prerr_endline "A"; 0 }}
-| B 
-  {{ }}
-  {{ prerr_endline "B"; 0 }}
-| n:C
-  {{ }}
-  {{ prerr_endline ("C: " ^ string_of_int n); n }}
-%%
-
-let input = ref [ A; B; B; B; C 5; EOF ] in
-let current() = List.hd !input in
-let next_token () =
-  prerr_endline "get_next";
-  input := List.tl !input;
-  List.hd !input
-in
-parse_r current next_token
-;;
-
diff --git a/helm/DEVEL/pxp/pxp/pxp_aux.ml b/helm/DEVEL/pxp/pxp/pxp_aux.ml
deleted file mode 100644 (file)
index aa1212b..0000000
+++ /dev/null
@@ -1,651 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- * Some auxiliary functions 
- *)
-
-(**********************************************************************)
-(* Lexing *)
-
-
-open Pxp_types
-open Pxp_lexer_types
-open Pxp_lexers
-open Netconversion
-
-let character enc warner k =
-  assert (k>=0);
-  if (k >= 0xd800 & k < 0xe000) or (k >= 0xfffe & k <= 0xffff) or k > 0x10ffff
-     or (k < 8) or (k = 11) or (k = 12) or (k >= 14 & k <= 31)
-  then
-    raise (WF_error("Code point " ^ string_of_int k ^ 
-                   " outside the accepted range of code points"));
-
-  try
-    makechar (enc : rep_encoding :> encoding) k
-  with
-      Not_found ->
-       warner # warn ("Code point cannot be represented in internal encoding: "
-                      ^ string_of_int k);
-       ""
-;;
-
-
-let check_name warner name =
-  (* produces a warning for names beginning with "xml". *)
-  if String.length name >= 3 then begin
-    match String.sub name 0 3 with
-       ("xml" | "xmL" | "xMl" | "xML" | "Xml" | "XmL" | "XMl" | "XML") ->
-         warner # warn ("Name is reserved for future extensions: " ^ name)
-      | _ ->
-         ()
-  end
-;;
-
-
-let tokens_of_content_string lexerset s =
-  (* tokenizes general entities and character entities *)
-  let lexbuf = Lexing.from_string s in
-  let rec next_token () =
-    match lexerset.scan_content_string lexbuf with
-       Eof -> []
-      | tok -> tok :: next_token()
-  in
-  next_token()
-;;
-
-
-let rec expand_attvalue_with_rec_check lexerset dtd s warner entities norm_crlf =
-  (* recursively expands general entities and character entities;
-   * checks "standalone" document declaration;
-   * normalizes whitespace
-   *)
-  let toklist = tokens_of_content_string lexerset s in
-  let rec expand tl =
-    match tl with
-       [] -> ""
-      | ERef n :: tl' ->
-         if List.mem n entities then
-           raise(WF_error("Recursive reference to general entity `" ^ n ^ "'"));
-         let en, extdecl = dtd # gen_entity n in
-         if dtd # standalone_declaration && extdecl then
-           raise(Validation_error("Reference to entity `" ^ n ^ 
-                                  "' violates standalone declaration"));
-         let rtext, rtext_contains_ext_refs = en # replacement_text in
-         if rtext_contains_ext_refs then
-           raise(Validation_error("Found reference to external entity in attribute value"));
-         expand_attvalue_with_rec_check 
-           lexerset dtd rtext warner (n :: entities) false    ^    expand tl'
-      | CRef(-1) :: tl' ->
-         if norm_crlf then
-           " " ^ expand tl'
-         else
-           "  " ^ expand tl'
-      | CRef n :: tl' ->
-         character lexerset.lex_encoding warner n ^ expand tl'
-      | CharData "<" :: tl' ->
-         raise 
-           (WF_error
-              ("Attribute value contains character '<' literally"))
-      | CharData x :: tl' ->
-         x ^ expand tl'
-      | _ -> assert false
-  in
-  expand toklist
-;;
-
-
-let expand_attvalue lexerset dtd s warner norm_crlf =
-  (* norm_crlf: whether the sequence CRLF is recognized as one character or
-   * not (i.e. two characters)
-   *)
-  expand_attvalue_with_rec_check lexerset dtd s warner [] norm_crlf
-;;
-
-
-let count_lines s =
-  (* returns number of lines in s, number of columns of the last line *)
-  let l = String.length s in
-
-  let rec count n k no_cr no_lf =
-    let next_cr = 
-      if no_cr then
-       (-1)
-      else
-       try String.index_from s k '\013' with Not_found -> (-1) in
-    let next_lf = 
-      if no_lf then
-       (-1)
-      else
-       try String.index_from s k '\010' with Not_found -> (-1) in
-    if next_cr >= 0 & (next_lf < 0 or next_cr < next_lf) then begin
-      if next_cr+1 < l & s.[next_cr+1] = '\010' then
-       count (n+1) (next_cr+2) false (next_lf < 0)
-      else
-       count (n+1) (next_cr+1) false (next_lf < 0)
-    end
-    else if next_lf >= 0 then begin
-      count (n+1) (next_lf+1) (next_cr < 0) false
-    end
-    else
-      n, (l - k)
-
-  in
-  count 0 0 false false
-;;
-
-
-let tokens_of_xml_pi lexers s =
-  let lexbuf = Lexing.from_string (s ^ " ") in
-  let rec collect () =
-    let t = lexers.scan_xml_pi lexbuf in
-    match t with
-       Pro_eof -> []
-      | _       -> t :: collect()
-  in
-  collect()
-;;
-
-
-let decode_xml_pi pl =
-  (* 'pl' must consist of name="value" or name='value' pairs which are returned
-   * as list of pairs.
-   * The "value" is returned as it is; no substitution of &entities; happens.
-   *)
-  let rec decode pl =
-    match pl with
-       Pro_name name :: Pro_eq :: Pro_string value :: pl' ->
-         (name, value) :: decode pl'
-      | [] ->
-         []
-      | _ ->
-         raise (WF_error("Bad XML processing instruction"))
-  in
-  decode pl
-;;
-
-
-let decode_doc_xml_pi pl =
-  match pl with
-      [ "version", v ]                                  -> (v, None, None)
-    | [ "version", v; "encoding", e ]                   -> (v, Some e, None)
-    | [ "version", v; "standalone", s ]                 -> (v, None, Some s)
-    | [ "version", v; "encoding", e; "standalone", s ]  -> (v, Some e, Some s)
-    | _ ->
-       raise(WF_error("Bad XML declaration"))
-;;
-
-
-let check_text_xml_pi pl =
-  match pl with
-    | [ "version", v; "encoding", e ] -> ()
-    | [ "encoding", e ]  -> ()
-    | _ ->
-       raise(WF_error("Bad XML declaration"))
-;;
-
-
-let check_version_num s =
-  let l = String.length s in
-  for i = 0 to l - 1 do
-    match s.[i] with
-       ('a'..'z'|'A'..'Z'|'0'..'9'|
-        '-'|'_'|'.'|':') -> ()
-      | _ ->
-         raise(WF_error("Bad XML version string"))
-  done
-;;
-
-
-let check_public_id s =
-  let l = String.length s in
-  for i = 0 to l - 1 do
-    match s.[i] with
-       (' '|'\013'|'\010'|'a'..'z'|'A'..'Z'|'0'..'9'|
-        '-'|'\''|'('|')'|'+'|','|'.'|'/'|':'|'='|'?'|
-        ';'|'!'|'*'|'#'|'@'|'$'|'_'|'%') -> ()
-      | _ ->
-         raise(WF_error("Illegal character in PUBLIC identifier"))
-  done
-;;
-
-
-(**********************************************************************)
-(* list functions *)
-
-
-let rec check_dups l =
-  match l with
-      [] -> false
-    | c :: l' -> 
-       if List.mem c l' then true else check_dups l'
-;;
-
-
-let rec count pred l =
-  match l with
-      [] -> 0
-    | x :: l' -> 
-       if pred x then  1 + (count pred l') else count pred l'
-;;
-
-
-(**********************************************************************)
-(* attributes *)
-
-let check_attribute_value_lexically lexerset x t v =
-  (* raises x if the attribute value v does not match the lexical rules
-   * for attribute type t:
-   * - t = A_id: v must be a <name>
-   * - t = A_idref: v must match <name>
-   * - t = A_idrefs: v must match <names>
-   * - t = A_entity: v must match <name>
-   * - t = A_entities: v must match <names>
-   * - t = A_nmtoken: v must match <nmtoken>
-   * - t = A_nmtokens: v must match <nmtokens>
-   * - t = A_notation _: v must match <name>
-   * - t = A_enum _: v must match <nmtoken>
-   * - t = A_cdata: not checked
-   *)
-  let lexbuf = Lexing.from_string v in
-  let rec get_name_list() =
-    match lexerset.scan_name_string lexbuf with
-       Eof    -> []
-      | Ignore -> get_name_list()
-      | tok    -> tok :: get_name_list()
-  in
-  let l = get_name_list() in
-  match t with
-      (A_id | A_idref | A_entity | A_notation _) ->
-       begin match l with
-           [ Name n ] -> ()
-         | _          -> raise (Lazy.force x)
-       end
-    | (A_idrefs | A_entities) ->
-       if List.exists (fun tok -> 
-                         match tok with
-                             Name _ -> false
-                           | _ -> true) l then
-         raise (Lazy.force x)
-    | (A_nmtoken | A_enum _) ->
-       begin match l with
-           [ Name n ]      -> ()
-         | [ Nametoken n ] -> ()
-         | _               -> raise (Lazy.force x)
-       end
-    | A_nmtokens ->
-       if List.exists (fun tok -> 
-                         match tok with
-                             Name _ -> false
-                           | Nametoken _ -> false
-                           | _ -> true
-                      ) l then
-         raise (Lazy.force x)
-    | _ -> ()
-;;
-
-
-let split_attribute_value lexerset v =
-  (* splits 'v' into a list of names or nmtokens. The white space separating
-   * the names/nmtokens in 'v' is suppressed and not returned.
-   *)
-  let lexbuf = Lexing.from_string v in
-  let rec get_name_list() =
-    match lexerset.scan_name_string lexbuf with
-       Eof         -> []
-      | Ignore      -> get_name_list()
-      | Name s      -> s :: get_name_list()
-      | Nametoken s -> s :: get_name_list()
-      | _           -> raise(Validation_error("Illegal attribute value"))
-  in
-  get_name_list()
-;;
-
-
-let normalize_line_separators lexerset s =
-  let lexbuf = Lexing.from_string s in
-  let rec get_string() =
-    match lexerset.scan_for_crlf lexbuf with
-       Eof        -> ""
-      | CharData s -> s ^ get_string()
-      | _          -> assert false
-  in
-  get_string()
-;;
-
-
-let value_of_attribute lexerset dtd n atype v =
-  (* The attribute with name 'n', type 'atype' and string value 'v' is
-   * decomposed, and the att_value is returned:
-   * - It is checked whether 'v' conforms to the lexical rules for attributes
-   *   of type 'atype'
-   * - If 'atype <> A_cdata', leading and trailing spaces are removed from 'v'.
-   * - If 'atype = A_notation d', it is checked if 'v' matches one of the
-   *   notation names contained in d.
-   * - If 'atype = A_enum d', it is checked whether 'v' matches one of the
-   *   tokens from d
-   * - If 'atype' refers to a "single-value" type, the value is retured as
-   *   Value u, where u is the normalized value. If 'atype' refers to a 
-   *   "list" type, the value if returned as Valuelist l, where l contains
-   *   the tokens.
-   *
-   * Note that this function does not implement all normalization rules.
-   * It is expected that the string passed as 'v' is already preprocessed;
-   * i.e. character and entity references are resolved, and the substitution
-   * of white space characters by space characters has already been performed.
-   * If these requirements are met, the value returned by this function
-   * will be perfectly normalized.
-   *
-   * Further checks:
-   * - ENTITY and ENTITIES values: It is checked whether there is an
-   *   unparsed general entity
-   * [ Other checks planned: ID, IDREF, IDREFS but not yet implemented ]
-   *)
-
-  let lexical_error() =
-    lazy (raise(Validation_error("Attribute `" ^ n ^ "' is lexically malformed"))) in
-
-  let remove_leading_and_trailing_spaces u =
-    (* Precondition: 'u' matches <name> or <nmtoken> *)
-    match split_attribute_value lexerset u with
-       [ u' ] -> u'
-      | _      -> assert false
-  in
-
-  let check_ndata_entity u =
-    let en, extdecl = dtd # gen_entity u in  (* or Validation_error *)
-    if not (en # is_ndata) then
-      raise(Validation_error("Reference to entity `" ^ u ^ 
-                            "': NDATA entity expected"));
-    if dtd # standalone_declaration && extdecl then
-      raise(Validation_error("Reference to entity `" ^ u ^ 
-                            "' violates standalone declaration"));
-  in
-
-  match atype with
-      A_cdata ->
-       Value v
-
-    | (A_id | A_idref | A_nmtoken) ->
-       check_attribute_value_lexically lexerset (lexical_error()) atype v;
-       Value (remove_leading_and_trailing_spaces v)
-    | A_entity ->
-       check_attribute_value_lexically lexerset (lexical_error()) atype v;
-       let v' = remove_leading_and_trailing_spaces v in
-       check_ndata_entity v';
-       Value v'
-
-    | (A_idrefs | A_nmtokens) ->
-       check_attribute_value_lexically lexerset (lexical_error()) atype v;
-       Valuelist (split_attribute_value lexerset v)
-
-    | A_entities ->
-       check_attribute_value_lexically lexerset (lexical_error()) atype v;
-       let l = split_attribute_value lexerset v in
-       List.iter check_ndata_entity l;
-       Valuelist l
-
-    | A_notation nl ->
-       check_attribute_value_lexically lexerset (lexical_error()) atype v;
-       let v' = remove_leading_and_trailing_spaces v in
-       if not (List.mem v' nl) then
-         raise(Validation_error
-                 ("Attribute `" ^ n ^ 
-                  "' does not match one of the declared notation names"));
-       Value v'
-
-    | A_enum enuml ->
-       check_attribute_value_lexically lexerset (lexical_error()) atype v;
-       let v' = remove_leading_and_trailing_spaces v in
-       if not (List.mem v' enuml) then
-         raise(Validation_error
-                 ("Attribute `" ^ n ^ 
-                  "' does not match one of the declared enumerator tokens"));
-       Value v'
-;;
-
-
-let normalization_changes_value lexerset atype v =
-  (* Returns true if:
-   * - 'atype' is a "single-value" type, and the normalization of the string
-   *   value 'v' of this type discards leading and/or trailing spaces
-   * - 'atype' is a "list" type, and the normalization of the string value
-   *   'v' of this type discards leading and/or trailing spaces, or spaces
-   *   separating the tokens of the list (i.e. the normal form is that
-   *   the tokens are separated by exactly one space character).
-   *
-   * Note: It is assumed that TABs, CRs, and LFs in 'v' are already converted
-   * to spaces.
-   *)
-
-  match atype with
-      A_cdata -> 
-       false
-
-    | (A_id | A_idref | A_entity | A_nmtoken | A_notation _ | A_enum _) ->
-       (* Return 'true' if the first or last character is a space.
-        * The following check works for both ISO-8859-1 and UTF-8.
-        *)
-       v <> "" && (v.[0] = ' ' || v.[String.length v - 1] = ' ')
-
-    | (A_idrefs | A_entities | A_nmtokens) ->
-       (* Split the list, and concatenate the tokens as required by
-        * the normal form. Return 'true' if this operation results in 
-        * a different string than 'v'.
-        * This check works for both ISO-8859-1 and UTF-8.
-        *)
-       let l = split_attribute_value lexerset v in
-       let v' = String.concat " " l in
-       v <> v'
-;;
-
-
-(**********************************************************************)
-
-let write_markup_string ~(from_enc:rep_encoding) ~to_enc os s =
-  (* Write the 'from_enc'-encoded string 's' as 'to_enc'-encoded string to
-   * 'os'. All characters are written as they are.
-   *)
-  let s' =
-    if to_enc = (from_enc :> encoding)
-    then s 
-    else recode_string 
-                ~in_enc:(from_enc :> encoding)
-                ~out_enc:to_enc
-                ~subst:(fun n -> 
-                          failwith 
-                            ("Pxp_aux.write_markup_string: Cannot represent " ^
-                             "code point " ^ string_of_int n))
-                s
-  in
-  write os s' 0 (String.length s')
-;;
-
-
-let write_data_string ~(from_enc:rep_encoding) ~to_enc os content =
-  (* Write the 'from_enc'-encoded string 's' as 'to_enc'-encoded string to
-   * 'os'. The characters '&', '<', '>', '"', '%' and every character that
-   * cannot be represented in 'to_enc' are paraphrased as entity reference
-   * "&...;".
-   *)
-  let convert_ascii s =
-    (* Convert the ASCII-encoded string 's'. Note that 'from_enc' is
-     * always ASCII-compatible
-     *)
-    if to_enc = (from_enc :> encoding) 
-    then s
-    else
-      recode_string
-        ~in_enc:(from_enc :> encoding)
-        ~out_enc:to_enc
-        ~subst:(fun n -> assert false)
-       s
-  in
-
-  let write_ascii s =
-    (* Write the ASCII-encoded string 's' *)
-    let s' = convert_ascii s in
-    write os s' 0 (String.length s')
-  in
-      
-  let write_part j l =
-    (* Writes the substring of 'content' beginning at pos 'j' with length 'l'
-     *)
-    if to_enc = (from_enc :> encoding) then
-      write os content j l
-    else begin
-      let s' = recode_string 
-                ~in_enc:(from_enc :> encoding)
-                ~out_enc:to_enc
-                ~subst:(fun n -> 
-                          convert_ascii ("&#" ^ string_of_int n ^ ";"))
-                (String.sub content j l)
-      in
-      write os s' 0 (String.length s')
-    end
-  in
-
-  let i = ref 0 in
-  for k = 0 to String.length content - 1 do
-    match content.[k] with
-       ('&' | '<' | '>' | '"' | '%') as c ->
-         if !i < k then
-           write_part !i (k - !i);
-         begin match c with
-             '&' -> write_ascii "&amp;"
-           | '<' -> write_ascii "&lt;"
-           | '>' -> write_ascii "&gt;"
-           | '"' -> write_ascii "&quot;"
-           | '%' -> write_ascii "&#37;"  (* reserved in DTDs *)
-           | _   -> assert false
-         end;
-         i := k+1
-      | _ -> ()
-  done;
-  if !i < String.length content then
-    write_part !i (String.length content - !i)
-;;
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.6  2000/08/14 22:24:55  gerd
- *     Moved the module Pxp_encoding to the netstring package under
- * the new name Netconversion.
- *
- * Revision 1.5  2000/07/25 00:30:01  gerd
- *     Added support for pxp:dtd PI options.
- *
- * Revision 1.4  2000/07/16 18:31:09  gerd
- *     The exception Illegal_character has been dropped.
- *
- * Revision 1.3  2000/07/16 16:33:57  gerd
- *     New function write_markup_string: Handles the encoding
- * of the string.
- *
- * Revision 1.2  2000/07/08 22:15:45  gerd
- *     [Merging 0.2.10:] write_data_string: The character '%' is special, too.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_aux.ml:
- *
- * Revision 1.12  2000/05/27 19:08:30  gerd
- *     Added functionality to check standalone declaration:
- *
- *     expand_attvalue: Checks whether included entities violate the
- * stand-alone declaration.
- *
- *     value_of_attribute: Checks whether ENTITY/ENTITIES values violate
- * this declaration. (Furthermore, it is checked whether the NDATA
- * entity exists - this has been forgotten in previous versions.)
- *
- *     value_of_attribute/check_attribute_value_lexically: improved.
- *
- *     New function normalization_changes_value: helps detecting
- * one case which violates the standalone declaration.
- *
- * Revision 1.11  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.10  2000/05/01 20:41:56  gerd
- *     New function write_data_string.
- *
- * Revision 1.9  2000/04/30 18:11:31  gerd
- *     New function normalize_line_separators.
- *     In function expand_attvalue: New argument norm_crlf. If the attvalue
- * is read directly from a file, the sequence CR LF must be converted to a
- * single space. If the attvalue is read from a replacement text, CR LF has
- * already converted to a single LF, and CR LF, if still occurring, must be
- * converted to two spaces. The caller can indicate the case by passing
- * true/false as norm_crlf.
- *
- * Revision 1.8  1999/09/01 22:51:07  gerd
- *     Added functions.
- *     'character' raises Illegal_character if characters are found that
- * do not match the production Char.
- *
- * Revision 1.7  1999/09/01 16:17:37  gerd
- *     Added function 'check_name'.
- *
- * Revision 1.6  1999/08/15 20:33:19  gerd
- *     Added: a function that checks public identifiers. Only certain
- * characters may occur in these identifiers.
- *     Control characters are rejected by the "character" function.
- *     Bugfix: recursive entity references are detected in attribute
- * expansion
- *
- * Revision 1.5  1999/08/15 02:18:02  gerd
- *     That '<' is not allowed in attribute values, is a violation
- * of well-formedness, not of the validity; so WF_error is raised.
- *
- * Revision 1.4  1999/08/15 00:20:37  gerd
- *     When expanding attribute values, references to parameter
- * entities are now resolved by the method "replacement_text" which
- * has an additional return value, and no longer by "attlist_replacement_text".
- * The new return value indicates whether references to external entities
- * have been resolved (directly or indirectly); this is allowed at some
- * locations but not in attribute values.
- *
- * Revision 1.3  1999/08/14 22:05:53  gerd
- *     Several functions have now a "warner" as argument which is
- * an object with a "warn" method. This is used to warn about characters
- * that cannot be represented in the Latin 1 alphabet.
- *
- * Revision 1.2  1999/08/10 21:35:06  gerd
- *     The XML/encoding declaration at the beginning of entities is
- * evaluated. In particular, entities have now a method "xml_declaration"
- * which returns the name/value pairs of such a declaration. The "encoding"
- * setting is interpreted by the entity itself; "version", and "standalone"
- * are interpreted by Markup_yacc.parse_document_entity. Other settings
- * are ignored (this does not conform to the standard; the standard prescribes
- * that "version" MUST be given in the declaration of document; "standalone"
- * and "encoding" CAN be declared; no other settings are allowed).
- *     TODO: The user should be warned if the standard is not exactly
- * fulfilled. -- The "standalone" property is not checked yet.
- *
- * Revision 1.1  1999/08/10 00:35:50  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_codewriter.ml b/helm/DEVEL/pxp/pxp/pxp_codewriter.ml
deleted file mode 100644 (file)
index a6ab0db..0000000
+++ /dev/null
@@ -1,518 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-open Pxp_document
-open Pxp_yacc
-open Pxp_dtd
-open Pxp_types
-
-let write_expr_ext_id out extid =
-  match extid with
-      System s ->
-       output_string out ("(Pxp_types.System\"" ^ String.escaped s ^ "\")")
-    | Public(s,t) ->
-       output_string out ("(Pxp_types.Public(\"" ^ String.escaped s ^ 
-                          "\",\"" ^
-                          String.escaped t ^ "\"))")
-    | Anonymous ->
-       output_string out "Pxp_types.Anonymous"
-;;
-
-
-let rec write_expr_content_model out cm =
-  match cm with
-      Unspecified -> output_string out "Pxp_types.Unspecified"
-    | Empty       -> output_string out "Pxp_types.Empty"
-    | Any         -> output_string out "Pxp_types.Any"
-    | Mixed msl   -> output_string out "(Pxp_types.Mixed [";
-                    List.iter
-                      (fun ms ->
-                         write_expr_mixed_spec out ms;
-                         output_string out "; ";
-                      )
-                      msl;
-                    output_string out "])";
-    | Regexp re   -> output_string out "(Pxp_types.Regexp ";
-                    write_expr_regexp_spec out re;
-                    output_string out ")";
-
-and write_expr_mixed_spec out ms =
-  match ms with
-      MPCDATA  -> output_string out "Pxp_types.MPCDATA"
-    | MChild s -> output_string out ("(Pxp_types.MChild \"" ^
-                                    String.escaped s ^ "\")")
-
-and write_expr_regexp_spec out re =
-  match re with
-      Optional re'  -> output_string out "(Pxp_types.Optional ";
-                      write_expr_regexp_spec out re';
-                      output_string out ")";
-    | Repeated re'  -> output_string out "(Pxp_types.Repeated ";
-                      write_expr_regexp_spec out re';
-                      output_string out ")";
-    | Repeated1 re' -> output_string out "(Pxp_types.Repeated1 ";
-                      write_expr_regexp_spec out re';
-                      output_string out ")";
-    | Alt rel       -> output_string out "(Pxp_types.Alt [";
-                      List.iter
-                        (fun re' ->
-                           write_expr_regexp_spec out re';
-                           output_string out "; ";
-                        )
-                        rel;
-                      output_string out "])";
-    | Seq rel       -> output_string out "(Pxp_types.Seq [";
-                      List.iter
-                        (fun re' ->
-                           write_expr_regexp_spec out re';
-                           output_string out "; ";
-                        )
-                        rel;
-                      output_string out "])";
-    | Child s       -> output_string out ("(Pxp_types.Child \"" ^ 
-                                         String.escaped s ^ "\")")
-;;
-
-
-let write_expr_att_type out at =
-  match at with
-      A_cdata       -> output_string out "Pxp_types.A_cdata"
-    | A_id          -> output_string out "Pxp_types.A_id"
-    | A_idref       -> output_string out "Pxp_types.A_idref"
-    | A_idrefs      -> output_string out "Pxp_types.A_idrefs"
-    | A_entity      -> output_string out "Pxp_types.A_entity"
-    | A_entities    -> output_string out "Pxp_types.A_entities"
-    | A_nmtoken     -> output_string out "Pxp_types.A_nmtoken"
-    | A_nmtokens    -> output_string out "Pxp_types.A_nmtokens"
-    | A_notation sl -> output_string out "(Pxp_types.A_notation [";
-                      List.iter
-                        (fun s ->
-                           output_string out ("\"" ^ 
-                                              String.escaped s ^ "\"; "))
-                        sl;
-                      output_string out "])";
-    | A_enum sl     -> output_string out "(Pxp_types.A_enum [";
-                      List.iter
-                        (fun s ->
-                           output_string out ("\"" ^ 
-                                              String.escaped s ^ "\"; "))
-                        sl;
-                      output_string out "])";
-;;
-
-
-let write_expr_att_default out ad =
-  match ad with
-      D_required  -> output_string out "Pxp_types.D_required"
-    | D_implied   -> output_string out "Pxp_types.D_implied"
-    | D_default s -> output_string out ("(Pxp_types.D_default \"" ^
-                                       String.escaped s ^ "\")")
-    | D_fixed s   -> output_string out ("(Pxp_types.D_fixed \"" ^
-                                       String.escaped s ^ "\")")
-;;
-
-
-let write_expr_att_value out av =
-  match av with
-      Value s       -> output_string out ("(Pxp_types.Value \"" ^
-                                         String.escaped s ^ "\")")
-    | Valuelist sl  -> output_string out ("(Pxp_types.Valuelist [");
-                      List.iter
-                        (fun s ->
-                           output_string out ("\"" ^ String.escaped s ^ 
-                                              "\"; ")
-                        )
-                        sl;
-                      output_string out "])";
-    | Implied_value -> output_string out "Pxp_types.Implied_value"
-;;
-
-
-let ocaml_encoding enc =
-  match enc with
-      `Enc_utf8      -> "`Enc_utf8"
-    | `Enc_utf16     -> "`Enc_utf16"
-    | `Enc_utf16_le  -> "`Enc_utf16_le"
-    | `Enc_utf16_be  -> "`Enc_utf16_be"
-    | `Enc_iso88591  -> "`Enc_iso88591"
-;;
-
-
-let write_expr_new_pi out pi =
-  output_string out ("(new Pxp_dtd.proc_instruction \"" ^
-                    String.escaped(pi # target) ^ "\" \"" ^
-                    String.escaped(pi # value) ^ "\" " ^ 
-                    ocaml_encoding(pi # encoding) ^ ")")
-;;
-
-
-let write_expr_node_type out nt =
-  match nt with
-      T_data       -> output_string out "Pxp_document.T_data"
-    | T_element s  -> output_string out ("(Pxp_document.T_element \"" ^
-                                        String.escaped s ^ "\")")
-    | T_super_root -> output_string out "Pxp_document.T_super_root"
-    | T_pinstr s   -> output_string out ("(Pxp_document.T_pinstr \"" ^
-                                        String.escaped s ^ "\")")
-    | T_comment    -> output_string out "Pxp_document.T_comment"
-    | _            -> assert false
-;;
-
-
-let write_local_dtd out (dtd : dtd) =
-  (* Outputs "let mkdtd warner = ... in" to 'out' *)
-  output_string out "let mkdtd warner =\n";
-  output_string out ("let encoding = " ^ ocaml_encoding (dtd # encoding) ^ 
-                     " in\n");
-  output_string out "let dtdobj = new Pxp_dtd.dtd warner encoding in\n";
-  
-  (* Set the ID: *)
-  output_string out "dtdobj # set_id ";
-  begin match dtd # id with
-      None -> ()
-    | Some(External x) -> 
-       output_string out "(Pxp_types.External ";
-       write_expr_ext_id out x;
-       output_string out ");\n"
-    | Some(Derived x) ->  
-       output_string out "(Pxp_types.Derived ";
-       write_expr_ext_id out x;
-       output_string out ");\n"
-    | Some Internal ->   
-       output_string out "Pxp_types.Internal;\n";
-  end;
-
-  (* Set standalone declaration: *)
-  output_string out ("dtdobj # set_standalone_declaration " ^
-                     string_of_bool (dtd # standalone_declaration) ^ ";\n");
-
-  (* Add notations: *)
-  List.iter
-    (fun noname ->
-       let no = dtd # notation noname in
-       output_string out ("let no = new Pxp_dtd.dtd_notation \"" ^
-                         String.escaped noname ^ "\" ");
-       write_expr_ext_id out (no # ext_id);
-       output_string out " encoding in\n";
-       output_string out "dtdobj # add_notation no;\n";
-    )
-    (List.sort Pervasives.compare (dtd # notation_names));
-
-  (* Add unparsed entities: *)
-  List.iter
-    (fun enname ->
-       let en, _ = dtd # gen_entity enname in
-       if en # is_ndata then begin
-        let ext_id = en # ext_id in
-        let notation = en # notation in
-        let encoding = en # encoding in
-        output_string out ("let ndata = new Pxp_entity.ndata_entity \"" ^
-                           String.escaped enname ^ "\" ");
-        write_expr_ext_id out ext_id;
-        output_string out ("\"" ^ String.escaped notation ^ "\" " ^ 
-                           ocaml_encoding encoding ^ " in \n");
-        output_string out "dtdobj # add_gen_entity (ndata :> Pxp_entity.entity) false;\n";
-       end;
-    )
-    (List.sort Pervasives.compare (dtd # gen_entity_names));
-
-
-  (* Add elements: *)
-  List.iter
-    (fun elname ->
-       (* Create the element 'el': *)
-       let el = dtd # element elname in
-       output_string out ("let el = new Pxp_dtd.dtd_element dtdobj \"" ^
-                         String.escaped elname ^ "\" in\n");
-       output_string out "let cm = ";
-       write_expr_content_model out (el # content_model);
-       output_string out " in\n";
-       output_string out "el # set_cm_and_extdecl cm false;\n";
-       (* Add attributes: *)
-       List.iter
-        (fun attname ->
-           let atttype, attdefault = el # attribute attname in
-           output_string out ("el # add_attribute \"" ^ 
-                              String.escaped attname ^ "\" ");
-           write_expr_att_type out atttype;
-           output_string out " ";
-           write_expr_att_default out attdefault;
-           output_string out " false;\n";
-        )
-        (List.sort Pervasives.compare (el # attribute_names));
-
-       (* Allow arbitrary? *)
-       if el # arbitrary_allowed then
-         output_string out "el # allow_arbitrary;\n"
-       else
-         output_string out "el # disallow_arbitrary;\n";
-
-       (* Validate: *)
-       output_string out "el # validate;\n";
-       (* Add the element 'el' to 'dtdobj': *)
-       output_string out "dtdobj # add_element el;\n";
-    )
-    (List.sort Pervasives.compare (dtd # element_names));
-
-  (* Add processing instructions: *)
-  List.iter
-    (fun target ->
-       let pilist = dtd # pinstr target in
-       List.iter
-        (fun pi ->
-           output_string out "let pi = ";
-           write_expr_new_pi out pi;
-           output_string out " in\n";
-           output_string out "dtdobj # add_pinstr pi;\n";
-        )
-        pilist;
-    )
-    (List.sort Pervasives.compare (dtd # pinstr_names));
-
-  (* Set the name of the root element: *)
-  begin match dtd # root with
-      None -> ()
-    | Some rootname ->
-       output_string out ("dtdobj # set_root \"" ^
-                          String.escaped rootname ^ "\";\n")
-  end;
-
-  (* Special options: *)
-  if dtd # arbitrary_allowed then
-    output_string out "dtdobj # allow_arbitrary;\n"
-  else
-    output_string out "dtdobj # disallow_arbitrary;\n";
-
-  (* Return dtdobj: *)
-  output_string out "dtdobj in\n"
-;;
-
-
-let rec write_local_subtree out n =
-  (* Outputs the term generating the subtree *)
-  
-  output_string out "let nt = ";
-  write_expr_node_type out (n # node_type);
-  output_string out " in\n";
-
-  begin match n # node_type with
-      T_data ->
-       output_string out ("let t = Pxp_document.create_data_node spec dtd \"" ^
-                          String.escaped (n # data) ^ "\" in\n")
-    | T_element elname ->
-       let loc, line, col = n # position in
-       output_string out
-         ("let pos = \"" ^ String.escaped loc ^ "\", " ^ 
-          string_of_int line ^ ", " ^ 
-          string_of_int col ^ " in\n");
-       output_string out 
-          ("let t = Pxp_document.create_element_node ~position:pos spec dtd \"" ^
-           String.escaped elname ^ "\" [ ");
-       List.iter
-         (fun (name,value) ->
-            begin match value with
-                Value s -> 
-                  output_string out ("\"" ^ String.escaped name ^ "\", ");
-                  output_string out ("\"" ^ String.escaped s ^ "\"; ")
-              | Valuelist sl ->
-                  output_string out ("\"" ^ String.escaped name ^ "\", ");
-                  output_string out ("\"" ^ 
-                                     String.escaped (String.concat " " sl) ^ 
-                                     "\"; ")
-              | Implied_value ->
-                  ()
-            end
-         )
-         (n # attributes);
-       output_string out " ] in\n";
-    | T_super_root ->
-       let loc, line, col = n # position in
-       output_string out
-         ("let pos = \"" ^ String.escaped loc ^ "\", " ^ 
-          string_of_int line ^ ", " ^ 
-          string_of_int col ^ " in\n");
-       output_string out 
-          ("let t = Pxp_document.create_super_root_node ~position:pos spec dtd in\n")
-    | T_pinstr piname ->
-       let loc, line, col = n # position in
-       output_string out
-         ("let pos = \"" ^ String.escaped loc ^ "\", " ^ 
-          string_of_int line ^ ", " ^ 
-          string_of_int col ^ " in\n");
-       output_string out "let pi = ";
-       write_expr_new_pi out (List.hd (n # pinstr piname));
-       output_string out " in\n";
-       output_string out 
-          ("let t = Pxp_document.create_pinstr_node ~position:pos spec dtd pi in\n")
-    | T_comment ->
-       let loc, line, col = n # position in
-       output_string out
-         ("let pos = \"" ^ String.escaped loc ^ "\", " ^ 
-          string_of_int line ^ ", " ^ 
-          string_of_int col ^ " in\n");
-       output_string out "let comment = ";
-       ( match n # comment with
-             None   -> assert false
-           | Some c -> output_string out ("\"" ^ String.escaped c ^ "\"")
-       );
-       output_string out " in\n";
-       output_string out 
-          ("let t = Pxp_document.create_comment_node ~position:pos spec dtd comment in\n")
-    | _ ->
-       assert false
-  end;
-
-  (* Add processing instructions: *)
-  begin match n # node_type with
-      T_pinstr _ ->
-       ()
-    | _ ->
-       List.iter
-         (fun target ->
-            let pilist = n # pinstr target in
-            List.iter
-              (fun pi ->
-                 output_string out "let pi = ";
-                 write_expr_new_pi out pi;
-                 output_string out " in\n";
-                 output_string out "add_pinstr t pi;\n";
-              )
-              pilist;
-         )
-         (List.sort Pervasives.compare (n # pinstr_names));
-  end;
-       
-  (* Add the sub nodes: *)
-  n # iter_nodes
-    (fun n' ->
-       output_string out "add_node t (\n";
-       write_local_subtree out n';
-       output_string out ");\n";
-    );
-
-  (* Validate: *)
-  output_string out "local_validate t;\n";
-
-  (* Return: *)
-  output_string out "t\n"
-;;
-
-
-let write_local_document out (d : 'ext document) =
-  (* Outputs "let mkdoc warner spec = ... in" *)
-  
-  output_string out "let mkdoc warner spec =\n";
-  output_string out "let doc = new Pxp_document.document warner in\n";
-  output_string out ("doc # init_xml_version \"" ^
-                    String.escaped (d # xml_version) ^ "\";\n");
-  write_local_dtd out (d # dtd);
-  output_string out "let dtd = mkdtd warner in\n";
-  output_string out "let root = ";
-  write_local_subtree out (d # root);
-  output_string out " in\n";
-  output_string out "doc # init_root root;\n";
-
-  (* Add processing instructions: *)
-  List.iter
-    (fun target ->
-       let pilist = d # pinstr target in
-       List.iter
-        (fun pi ->
-           output_string out "let pi = ";
-           write_expr_new_pi out pi;
-           output_string out " in\n";
-           output_string out "doc # add_pinstr pi;\n";
-        )
-        pilist;
-    )
-    (List.sort Pervasives.compare (d # pinstr_names));
-  
-  (* Return the result: *)
-  output_string out "doc in\n"
-;;
-
-
-let write_helpers out =
-  output_string out "let add_node t n = (t : 'ext Pxp_document.node) # add_node (n : 'ext Pxp_document.node) in\n";
-  output_string out "let add_pinstr t pi = (t : 'ext Pxp_document.node) # add_pinstr (pi : Pxp_dtd.proc_instruction) in\n";
-  output_string out "let local_validate t = (t : 'ext Pxp_document.node) # local_validate ()in\n"
-;;
-
-
-let write_document out d =
-  output_string out "let create_document warner spec =\n";
-  write_helpers out;
-  write_local_document out d;
-  output_string out "mkdoc warner spec;;\n"
-;;
-
-
-let write_dtd out dtd =
-  output_string out "let create_dtd warner =\n";
-  write_local_dtd out dtd;
-  output_string out "mkdtd warner;;\n"
-;;
-
-
-let write_subtree out t =
-  output_string out "let create_subtree dtd spec =\n";
-  write_helpers out;
-  write_local_subtree out t;
-  output_string out "mktree dtd spec;;\n"
-;;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.7  2000/08/30 15:48:07  gerd
- *     Minor update.
- *
- * Revision 1.6  2000/08/18 20:16:59  gerd
- *     Updates because of new node types T_comment, T_pinstr, T_super_root.
- *
- * Revision 1.5  2000/07/23 02:16:51  gerd
- *     Changed signature of local_validate.
- *
- * Revision 1.4  2000/07/09 17:59:35  gerd
- *     Updated: The position of element nodes is also written.
- *
- * Revision 1.3  2000/07/09 00:30:00  gerd
- *     Notations are written before they are used.
- *     Unparsed entities are included.
- *     Further changes.
- *
- * Revision 1.2  2000/07/08 22:59:14  gerd
- *     [Merging 0.2.10:] Improved: The resulting code can be compiled
- * faster, and the compiler is less hungry on memory.
- *     Updated because of PXP interface changes.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_codewriter.ml:
- *
- * Revision 1.1  2000/03/11 22:57:28  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_codewriter.mli b/helm/DEVEL/pxp/pxp/pxp_codewriter.mli
deleted file mode 100644 (file)
index e04bd8a..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-open Pxp_document
-open Pxp_yacc
-open Pxp_dtd
-
-val write_document : out_channel -> 'ext document -> unit
-    (* Writes O'Caml code to the out_channel that is a top-level function
-     * creating a fresh document which is equal to the passed document:
-     *
-     * "let create_document warner spec = ...;;"
-     *
-     * If you compile the code and call "create_document warner map"  the 
-     * function creates a document tree which is (almost) equal to the 
-     * passed document.
-     * 
-     * The following properties may not be equal:
-     * - Parsed entities
-     * - Whether a declaration occurs in an external entity or not
-     * 
-     * 'warner': a collect_warnings object
-     * 'spec': a Pxp_document.spec
-     *)
-
-  
-val write_dtd : out_channel -> dtd -> unit
-    (* Writes O'Caml code to the out_channel that is a top-level function
-     * creating a fresh DTD which is equal to the passed DTD:
-     *
-     * "let create_dtd warner = ...;;"
-     *
-     * If you compile the code and call "create_dtd warner"  the 
-     * function creates a DTD object which is (almost) equal to the 
-     * passed object.
-     * 
-     * The following properties may not be equal:
-     * - Parsed entities
-     * - Whether a declaration occurs in an external entity or not
-     * 
-     * 'warner': a collect_warnings object
-     *)
-
-val write_subtree : out_channel -> 'ext node -> unit
-    (* Writes O'Caml code to the out_channel that is a top-level function
-     * creating a fresh node tree which is equal to the passed tree:
-     *
-     * "let create_subtree dtd map = ...;;"
-     *
-     * If you compile the code and call "create_subtree dtd map"  the 
-     * function creates a DTD object which is equal to the passed object.
-     * 
-     * 'dtd': a DTD object
-     * 'map': a domspec
-     *)
-
-
-  
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/07/09 00:30:14  gerd
- *     Updated.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_codewriter.mli:
- *
- * Revision 1.1  2000/03/11 22:57:28  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_dfa.ml b/helm/DEVEL/pxp/pxp/pxp_dfa.ml
deleted file mode 100644 (file)
index b7baeb4..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-module StringOrd = struct
-  type t = string
-  let compare = (compare : string -> string -> int)
-end;;
-
-module StringMap = Map.Make(StringOrd);;
-  (* 'a StringMap.t: the type of maps (dictionaries) from string to 'a *)
-
-module Graph = struct
-  type vertex =
-      { mutable edges_out : (string * vertex) list;
-       mutable edges_out_map : vertex StringMap.t;
-       mutable edges_in : (vertex * string) list;
-       mutable graph : graph;
-       mutable id : int;
-      }
-  and graph =
-      { mutable vertexes : vertex list;
-       mutable mid : int;   (* maximum id + 1 *)
-      }
-
-  exception Edge_not_unique
-
-  let create () =
-    { vertexes = [];
-      mid = 0;
-    }
-
-  let new_vertex g =
-    let v =
-      { edges_out = [];
-       edges_out_map = StringMap.empty;
-       edges_in = [];
-       graph = g;
-       id = g.mid;
-      } in
-    g.vertexes <- v :: g.vertexes;
-    g.mid <- g.mid + 1;
-    v
-
-  let new_edge v_from e v_to =
-    if v_from.graph != v_to.graph then
-      invalid_arg "Pxp_dfa.Graph.new_edge";
-    try 
-      let v = StringMap.find e v_from.edges_out_map in
-      if v != v_to then
-       raise Edge_not_unique;
-    with
-       Not_found ->
-         v_from.edges_out     <- (e, v_to) :: v_from.edges_out;
-         v_from.edges_out_map <- StringMap.add e v_to v_from.edges_out_map;
-         v_to.edges_in        <- (v_from, e) :: v_to.edges_in;
-         ()
-
-  let graph_of_vertex v = v.graph
-
-  let union g1 g2 =
-    List.iter
-      (fun v ->
-        v.graph <- g1;
-        v.id <- v.id + g1.mid;
-      )
-      g2.vertexes;
-    g1.vertexes <- g2.vertexes @ g1.vertexes;
-    g1.mid <- g1.mid + g2.mid;
-    g2.vertexes <- [];
-    g2.mid <- 0
-
-  let outgoing_edges v =
-    v.edges_out
-
-  let ingoing_edges v =
-    v.edges_in
-
-  let follow_edge v e =
-    StringMap.find e v.edges_out_map  (* or raise Not_found *)
-end
-;;
-
-
-module VertexOrd = struct
-  type t = Graph.vertex
-  let compare v1 v2 =
-    if v1.Graph.graph != v2.Graph.graph then
-      invalid_arg "Pxp_dfa.VertexOrd.compare";
-    compare v1.Graph.id v2.Graph.id
-end
-;;
-
-module VertexSet = Set.Make(VertexOrd);;
-
-
-type dfa_definition =
-    { dfa_graph : Graph.graph;
-      dfa_start : Graph.vertex;
-      dfa_stops : VertexSet.t;
-      dfa_null  : bool;
-    }
-;;
-
-(**********************************************************************)
-
-(* Now that we have all the auxiliary data types, it is time for the
- * algorithm that transforms regexps to DFAs.
- *)
-
-open Pxp_types
-
-let dfa_of_regexp_content_model re =
-  let rec get_dfa re =
-    match re with
-       Child e ->
-         let g = Graph.create() in
-         let v1 = Graph.new_vertex g in
-         let v2 = Graph.new_vertex g in
-         Graph.new_edge v1 e v2;
-         { dfa_graph = g;
-           dfa_start = v1;
-           dfa_stops = VertexSet.singleton v2;
-           dfa_null = false;
-         }
-         
-      | Seq [] ->
-         invalid_arg "Pxp_dfa.dfa_of_regexp_content_model"
-      | Seq [re'] ->
-         get_dfa re'
-      | Seq (re1 :: seq2) ->
-         let dfa1 = get_dfa re1 in
-         let dfa2 = get_dfa (Seq seq2) in
-         (* Merge the two graphs. The result is in dfa1.dfa_graph: *)
-         Graph.union dfa1.dfa_graph dfa2.dfa_graph;
-         (* Concatenation I: Add additional edges to the graph such
-          * that if w1 matches dfa1, and w2 matches dfa2, and w2 is not
-          * empty, w1w2 will match the merged DFAs.
-          *)
-         List.iter
-           (fun (e,v') ->
-              VertexSet.iter
-                (fun v ->
-                   Graph.new_edge v e v')
-                dfa1.dfa_stops
-           )
-           (Graph.outgoing_edges dfa2.dfa_start);
-         (* Concatenation II: If the emtpy string matches dfa2, the stop
-          * nodes of dfa1 remain stop nodes.
-          *)
-         let stops =
-           if dfa2.dfa_null then
-             VertexSet.union dfa1.dfa_stops dfa2.dfa_stops
-           else
-             dfa2.dfa_stops
-         in
-         (* The resulting DFA: *)
-         { dfa_graph = dfa1.dfa_graph;
-           dfa_start = dfa1.dfa_start;
-           dfa_stops = stops;
-           dfa_null  = dfa1.dfa_null && dfa2.dfa_null;
-         }
-
-      | Alt [] ->
-         invalid_arg "Pxp_dfa.dfa_of_regexp_content_model"
-      | Alt [re'] ->
-         get_dfa re'
-      | Alt alt ->
-         let dfa_alt = List.map get_dfa alt in
-         (* Merge the graphs. The result is in g: *)
-         let g = (List.hd dfa_alt).dfa_graph in
-         List.iter
-           (fun dfa ->
-              Graph.union g dfa.dfa_graph
-           )
-           (List.tl dfa_alt);
-         (* Get the new start node: *)
-         let start = Graph.new_vertex g in
-         (* Add the new edges starting at 'start': *)
-         List.iter
-           (fun dfa ->
-              List.iter
-                (fun (e, v) ->
-                   Graph.new_edge start e v)
-                (Graph.outgoing_edges dfa.dfa_start)
-           )
-           dfa_alt;
-         (* If one of the old start nodes was a stop node, the new start
-          * node will be a stop node, too.
-          *)
-         let null = List.exists (fun dfa -> dfa.dfa_null) dfa_alt in
-         let stops =
-           List.fold_left
-             (fun s dfa -> VertexSet.union s dfa.dfa_stops)
-             VertexSet.empty
-             dfa_alt in
-         let stops' =
-           if null then
-             VertexSet.union stops (VertexSet.singleton start)
-           else
-             stops in
-         (* The resulting DFA: *)
-         { dfa_graph = g;
-           dfa_start = start;
-           dfa_stops = stops';
-           dfa_null  = null;
-         }
-
-      | Optional re' ->
-         let dfa' = get_dfa re' in
-         if dfa'.dfa_null then
-           (* simple case *)
-           dfa'
-         else begin
-           (* Optimization possible: case ingoing_edges dfa_start = [] *)
-           let start = Graph.new_vertex dfa'.dfa_graph in
-           List.iter
-             (fun (e, v) ->
-                Graph.new_edge start e v)
-             (Graph.outgoing_edges dfa'.dfa_start);
-           
-           (* The resulting DFA: *)
-           { dfa_graph = dfa'.dfa_graph;
-             dfa_start = start;
-             dfa_stops = VertexSet.union dfa'.dfa_stops 
-                                         (VertexSet.singleton start);
-             dfa_null  = true;
-           }
-         end
-
-      | Repeated1 re' ->
-         let dfa' = get_dfa re' in
-         List.iter
-           (fun (e, v') ->
-              VertexSet.iter
-                (fun v ->
-                   Graph.new_edge v e v')
-                dfa'.dfa_stops
-           )
-           (Graph.outgoing_edges dfa'.dfa_start);
-
-           (* The resulting DFA: *)
-           { dfa_graph = dfa'.dfa_graph;
-             dfa_start = dfa'.dfa_start;
-             dfa_stops = dfa'.dfa_stops;
-             dfa_null  = dfa'.dfa_null;
-           }
-
-      | Repeated re' ->
-         get_dfa (Optional (Repeated1 re'))
-
-  in
-  try
-    get_dfa re
-  with
-      Graph.Edge_not_unique -> raise Not_found
-;;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/07/23 02:16:08  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_dfa.mli b/helm/DEVEL/pxp/pxp/pxp_dfa.mli
deleted file mode 100644 (file)
index 515eace..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-module Graph : sig
-  type graph
-  type vertex
-
-  (* A directed graph whose edges are marked with strings (= element types)
-   * and with the constraint that for a given vertex and a given element
-   * type the edge must be unique.
-   *)
-
-  exception Edge_not_unique
-
-  val create : unit -> graph
-      (* Creates an empty graph *)
-
-  val new_vertex : graph -> vertex
-      (* Adds a new vertex to the graph, and returns the vertex *)
-
-  val new_edge : vertex -> string -> vertex -> unit
-      (* new_edge v_from etype v_to:
-       * Adds a new edge from vertex v_from to vertex v_to, marked with
-       * etype.
-       * Raises Edge_not_unique if there is already an edge etype starting
-       * at v_from to a different vertex than v_to.
-       *)
-
-  val graph_of_vertex : vertex -> graph
-      (* Returns the graph the passed vertex is contained in. *)
-
-  val union : graph -> graph -> unit
-      (* union g1 g2:
-       * Moves the vertexes and edged found in g2 to g1.
-       * After that, g2 is empty again.
-       *)
-
-  val outgoing_edges : vertex -> (string * vertex) list
-      (* Returns the list of outgoing edges starting in the passed vertex *)
-
-  val follow_edge : vertex -> string -> vertex
-      (* Follows the edge starting in the passed vertex which is marked
-       * with the passed element type.
-       * Raises Not_found if there is no such edge.
-       *)
-
-  val ingoing_edges : vertex -> (vertex * string) list
-      (* Returns the list of ingoing edges ending in the passed vertex *)
-end
-
-module VertexSet : Set.S with type elt = Graph.vertex
-
-
-type dfa_definition =
-    { dfa_graph : Graph.graph;
-      dfa_start : Graph.vertex;   (* Where the automaton starts *)
-      dfa_stops : VertexSet.t;    (* Where the automaton may stop *)
-      dfa_null  : bool;           (* Whether dfa_start member of dfa_stops *)
-    }
-
-val dfa_of_regexp_content_model : Pxp_types.regexp_spec -> dfa_definition
-  (* Computes the DFA or raises Not_found if it does not exist *)
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/07/23 02:16:08  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_document.ml b/helm/DEVEL/pxp/pxp/pxp_document.ml
deleted file mode 100644 (file)
index 1f1d4cf..0000000
+++ /dev/null
@@ -1,1985 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-open Pxp_types
-open Pxp_lexer_types
-open Pxp_dtd
-open Pxp_aux
-open Pxp_dfa
-
-
-exception Skip
-
-type node_type =
-    T_element of string
-  | T_data
-  | T_super_root
-  | T_pinstr of string
-  | T_comment
-  | T_none
-  | T_attribute of string
-  | T_namespace of string
-;;
-
-
-class type ['node] extension =
-  object ('self)
-    method clone : 'self
-    method node : 'node
-    method set_node : 'node -> unit
-  end
-;;
-
-
-class type [ 'ext ] node =
-  object ('self)
-    constraint 'ext = 'ext node #extension
-    method extension : 'ext
-    method delete : unit
-    method parent : 'ext node
-    method root : 'ext node
-    method orphaned_clone : 'self
-    method orphaned_flat_clone : 'self
-    method add_node : ?force:bool -> 'ext node -> unit
-    method add_pinstr : proc_instruction -> unit
-    method pinstr : string -> proc_instruction list
-    method pinstr_names : string list
-    method node_position : int
-    method node_path : int list
-    method sub_nodes : 'ext node list
-    method iter_nodes : ('ext node -> unit) -> unit
-    method iter_nodes_sibl :
-      ('ext node option -> 'ext node -> 'ext node option -> unit) -> unit
-    method nth_node : int -> 'ext node
-    method previous_node : 'ext node
-    method next_node : 'ext node
-    method set_nodes : 'ext node list -> unit
-    method data : string
-    method node_type : node_type
-    method position : (string * int * int)
-    method attribute : string -> att_value
-    method attribute_names : string list
-    method attribute_type : string -> att_type
-    method attributes : (string * Pxp_types.att_value) list
-    method required_string_attribute : string -> string
-    method required_list_attribute : string -> string list
-    method optional_string_attribute : string -> string option
-    method optional_list_attribute : string -> string list
-    method id_attribute_name : string
-    method id_attribute_value : string
-    method idref_attribute_names : string list
-    method quick_set_attributes : (string * Pxp_types.att_value) list -> unit
-    method attributes_as_nodes : 'ext node list
-    method set_comment : string option -> unit
-    method comment : string option
-    method dtd : dtd
-    method encoding : rep_encoding
-    method create_element :
-                   ?position:(string * int * int) ->
-                   dtd -> node_type -> (string * string) list -> 'ext node
-    method create_data : dtd -> string -> 'ext node
-    method local_validate : ?use_dfa:bool -> unit -> unit
-    method keep_always_whitespace_mode : unit
-    method write : output_stream -> encoding -> unit
-    method write_compact_as_latin1 : output_stream -> unit
-    method internal_adopt : 'ext node option -> int -> unit
-    method internal_set_pos : int -> unit
-    method internal_delete : 'ext node -> unit
-    method internal_init : (string * int * int) ->
-                           dtd -> string -> (string * string) list -> unit
-    method internal_init_other : (string * int * int) ->
-                                 dtd -> node_type -> unit
-  end
-;;
-
-type 'ext spec_table =
-    { mapping : (string, 'ext node) Hashtbl.t;
-      data_node : 'ext node;
-      default_element : 'ext node;
-      super_root_node : 'ext node option;
-      pinstr_mapping : (string, 'ext node) Hashtbl.t;
-      default_pinstr_node : 'ext node option;
-      comment_node : 'ext node option;
-    }
-;;
-
-type 'ext spec =
-  Spec_table of 'ext spec_table
-;;
-
-
-let make_spec_from_mapping
-      ?super_root_exemplar 
-      ?comment_exemplar
-      ?default_pinstr_exemplar 
-      ?pinstr_mapping
-      ~data_exemplar ~default_element_exemplar ~element_mapping () =
-  Spec_table
-    { mapping = element_mapping;
-      data_node = data_exemplar;
-      default_element = default_element_exemplar;
-      super_root_node = super_root_exemplar;
-      comment_node = comment_exemplar;
-      default_pinstr_node = default_pinstr_exemplar;
-      pinstr_mapping =
-       (match pinstr_mapping with
-            None -> Hashtbl.create 1
-          | Some m -> m
-       )
-    }
-;;
-
-
-let make_spec_from_alist
-      ?super_root_exemplar 
-      ?comment_exemplar
-      ?default_pinstr_exemplar 
-      ?(pinstr_alist = [])
-      ~data_exemplar ~default_element_exemplar ~element_alist () =
-  let m = List.length  pinstr_alist in
-  let pinstr_mapping = Hashtbl.create m in
-  List.iter
-    (fun (name,ex) -> Hashtbl.add pinstr_mapping name ex)
-    pinstr_alist;
-  let n = List.length  element_alist in
-  let element_mapping = Hashtbl.create m in
-  List.iter
-    (fun (name,ex) -> Hashtbl.add element_mapping name ex)
-    element_alist;
-  make_spec_from_mapping
-    ?super_root_exemplar:      super_root_exemplar
-    ?comment_exemplar:         comment_exemplar
-    ?default_pinstr_exemplar:  default_pinstr_exemplar
-    ~pinstr_mapping:           pinstr_mapping
-    ~data_exemplar:            data_exemplar
-    ~default_element_exemplar: default_element_exemplar
-    ~element_mapping:          element_mapping
-    ()
-;;
-
-(**********************************************************************)
-
-exception Found;;
-
-let validate_content ?(use_dfa=None) model (el : 'a node) =
-  (* checks that the nodes of 'el' matches the DTD. Returns 'true'
-   * on success and 'false' on failure.
-   *)
-
-  let rec is_empty cl =
-    (* Whether the node list counts as empty or not. *)
-    match cl with
-       [] -> true
-      | n :: cl' ->
-         ( match n # node_type with
-             | T_element _     -> false
-             | _               -> is_empty cl'    (* ignore other nodes *)
-         )
-  in
-
-  let rec run_regexp cl ml =
-    (* Validates regexp content models ml against instances cl. This
-     * function works for deterministic and non-determninistic models.
-     * The implementation uses backtracking and may sometimes be slow.
-     *
-     * cl:   the list of children that will have to be matched
-     * ml:   the list of regexps that will have to match (to be read as
-     *       sequence)
-     * returns () meaning that no match has been found, or raises Found.
-     *)
-    match ml with
-       [] ->
-         if cl = [] then raise Found;      (* Frequent case *)
-         if is_empty cl then raise Found;  (* General condition *)
-      | Seq seq :: ml' ->
-         assert (seq <> []);     (* necessary to ensure termination *)
-         run_regexp cl (seq @ ml')
-      | Alt alts :: ml' ->
-         let rec find alts =
-           match alts with
-               [] -> ()
-             | alt :: alts' ->
-                 run_regexp cl (alt :: ml');
-                 find alts'
-         in
-         assert (alts <> []);      (* Alt [] matches nothing *)
-         find alts
-      | Repeated re :: ml' ->
-         let rec norm re =     (* to avoid infinite loops *)
-           match re with
-               Repeated subre  -> norm subre    (* necessary *)
-             | Optional subre  -> norm subre    (* necessary *)
-             | Repeated1 subre -> norm subre    (* an optimization *)
-             | _               -> re
-         in
-         let re' = norm re in
-         run_regexp cl (re' :: Repeated re' :: ml');
-         run_regexp cl ml'
-      | Repeated1 re :: ml' ->
-         run_regexp cl (re :: Repeated re :: ml')
-      | Optional re :: ml' ->
-         run_regexp cl (re :: ml');
-         run_regexp cl ml';
-      | Child chld :: ml' ->
-         match cl with
-             [] ->
-               ()
-           | sub_el :: cl' ->
-               begin match sub_el # node_type with
-                   T_data ->                       (* Ignore data *)
-                     run_regexp cl' ml
-                     (* Note: It can happen that we find a data node here
-                      * if the 'keep_always_whitespace' mode is turned on.
-                      *)
-                 | T_element nt ->
-                     if nt = chld then run_regexp cl' ml'
-                 | _ ->                            (* Ignore this element *)
-                     run_regexp cl' ml
-               end
-  in
-
-  let run_dfa cl dfa =
-    (* Validates regexp content models ml against instances cl. This
-     * function works ONLY for deterministic models.
-     * The implementation executes the automaton.
-     *)
-    let current_vertex = ref dfa.dfa_start in
-    let rec next_step cl =
-      match cl with
-         el :: cl' ->
-           begin match el # node_type with
-               T_data ->                       (* Ignore data *)
-                 next_step cl'
-                   (* Note: It can happen that we find a data node here
-                    * if the 'keep_always_whitespace' mode is turned on.
-                    *)
-             | T_element nt ->
-                 begin try
-                   current_vertex := Graph.follow_edge !current_vertex nt;
-                   next_step cl'
-                 with
-                     Not_found -> false
-                 end
-             | _ ->                         (* Ignore this node *)
-                 next_step cl'
-           end
-       | [] ->
-           VertexSet.mem !current_vertex dfa.dfa_stops
-    in
-    next_step cl
-  in   
-
-  match model with
-      Unspecified -> true
-    | Any -> true
-    | Empty ->
-       let cl = el # sub_nodes in
-       is_empty cl 
-    | Mixed (MPCDATA :: mix) ->
-       let mix' = List.map (function
-                                MPCDATA -> assert false
-                              | MChild x -> x)
-                           mix in
-       begin try
-         el # iter_nodes
-           (fun sub_el ->
-              let nt = sub_el # node_type in
-              match nt with
-              | T_element name ->
-                  if not (List.mem name mix') then raise Not_found;
-              | _ -> ()
-           );
-         true
-       with
-           Not_found ->
-             false
-       end
-    | Regexp re ->
-       let cl = el # sub_nodes in
-       begin match use_dfa with
-           None ->
-             (* General backtracking implementation: *)
-             begin try
-               run_regexp cl [re];
-               false
-             with
-                 Found -> true
-             end
-         | Some dfa ->
-             run_dfa cl dfa
-       end
-
-    | _ -> assert false
-;;
-
-(**********************************************************************)
-
-
-class virtual ['ext] node_impl an_ext =
-  object (self)
-    constraint 'ext = 'ext node #extension
-
-    val mutable parent = (None : 'ext node option)
-    val mutable node_position = -1
-    val mutable dtd = (None : dtd option)
-    val mutable extension = an_ext
-
-    initializer
-      extension # set_node (self : 'ext #node  :> 'ext node)
-
-
-    method extension = (extension : 'ext)
-
-    method delete =
-      match parent with
-         None -> ()
-       | Some p -> p # internal_delete (self : 'ext #node :> 'ext node)
-
-    method parent =
-      match parent with
-         None -> raise Not_found
-       | Some p -> p
-
-    method root =
-      match parent with
-         None -> (self : 'ext #node :> 'ext node)
-       | Some p -> p # root
-
-    method node_position = 
-      if node_position >= 0 then node_position else
-       raise Not_found
-
-    method node_path =
-      let rec collect n path =
-       try
-         let p = n # node_position in
-         collect (n # parent) (p :: path)
-       with
-           Not_found -> 
-             (* n is the root *)
-             path
-      in
-      collect (self : 'ext #node :> 'ext node) []
-
-    method previous_node =
-      self # parent # nth_node (self # node_position - 1)
-
-    method next_node =
-      self # parent # nth_node (self # node_position + 1)
-
-    method orphaned_clone =
-      let x = extension # clone in
-      let n =
-       {< parent = None;
-          node_position = -1;
-          extension = x;
-       >} in
-      x # set_node (n : 'ext #node  :> 'ext node);
-      n
-
-    method orphaned_flat_clone =
-      let x = extension # clone in
-      let n =
-       {< parent = None;
-          node_position = -1;
-          extension = x;
-       >} in
-      x # set_node (n : 'ext #node  :> 'ext node);
-      n
-
-    method dtd =
-      match dtd with
-         None -> failwith "Pxp_document.node_impl#dtd: No DTD available"
-       | Some d -> d
-
-    method encoding =
-      match dtd with
-         None -> failwith "Pxp_document.node_impl#encoding: No DTD available"
-       | Some d -> d # encoding
-
-    method internal_adopt (new_parent : 'ext node option) pos =
-      begin match parent with
-         None -> ()
-       | Some p ->
-           if new_parent <> None then
-             failwith "Pxp_document.node_impl#internal_adopt: Tried to add a bound element"
-      end;
-      parent <- new_parent;
-      node_position <- pos
-
-    method internal_set_pos pos =
-      node_position <- pos
-
-    method virtual add_node : ?force:bool -> 'ext node -> unit
-    method virtual add_pinstr : proc_instruction -> unit
-    method virtual sub_nodes : 'ext node list
-    method virtual pinstr : string -> proc_instruction list
-    method virtual pinstr_names : string list
-    method virtual iter_nodes : ('ext node -> unit) -> unit
-    method virtual iter_nodes_sibl : ('ext node option -> 'ext node -> 'ext node option -> unit) -> unit
-    method virtual nth_node : int -> 'ext node
-    method virtual set_nodes : 'ext node list -> unit
-    method virtual data : string
-    method virtual node_type : node_type
-    method virtual position : (string * int * int)
-    method virtual attribute : string -> att_value
-    method virtual attribute_names : string list
-    method virtual attribute_type : string -> att_type
-    method virtual attributes : (string * Pxp_types.att_value) list
-    method virtual required_string_attribute : string -> string
-    method virtual required_list_attribute : string -> string list
-    method virtual optional_string_attribute : string -> string option
-    method virtual optional_list_attribute : string -> string list
-    method virtual quick_set_attributes : (string * Pxp_types.att_value) list -> unit
-    method virtual attributes_as_nodes : 'ext node list
-    method virtual set_comment : string option -> unit
-    method virtual comment : string option
-    method virtual create_element : 
-                   ?position:(string * int * int) ->
-                   dtd -> node_type -> (string * string) list -> 'ext node
-    method virtual create_data : dtd -> string -> 'ext node
-    method virtual keep_always_whitespace_mode : unit
-    method virtual write : output_stream -> encoding -> unit
-    method virtual write_compact_as_latin1 : output_stream -> unit
-    method virtual local_validate : ?use_dfa:bool -> unit -> unit
-    method virtual internal_delete : 'ext node -> unit
-    method virtual internal_init : (string * int * int) ->
-                                dtd -> string -> (string * string) list -> unit
-    method virtual internal_init_other : (string * int * int) ->
-                                         dtd -> node_type -> unit
-  end
-;;
-
-
-(**********************************************************************)
-
-let no_position = ("?", 0, 0) ;;
-
-
-class ['ext] data_impl an_ext : ['ext] node =
-  object (self)
-    inherit ['ext] node_impl an_ext
-    val mutable content = ("" : string)
-
-    method position = no_position
-
-    method add_node ?(force=false) _ =
-      failwith "method 'add_node' not applicable to data node"
-    method add_pinstr _ =
-      failwith "method 'add_pinstr' not applicable to data node"
-    method pinstr _ = []
-    method pinstr_names = []
-    method sub_nodes = []
-    method iter_nodes _ = ()
-    method iter_nodes_sibl _ = ()
-    method nth_node _ = raise Not_found
-    method set_nodes _ =
-      failwith "method 'set_nodes' not applicable to data node"
-    method data = content
-    method node_type = T_data
-    method attribute _ = raise Not_found
-    method attribute_names = []
-    method attribute_type _ = raise Not_found
-    method attributes = []
-    method required_string_attribute _ =
-      failwith "Markup.document, method required_string_attribute: not found"
-    method required_list_attribute _ =
-      failwith "Markup.document, method required_list_attribute: not found"
-    method optional_string_attribute _ = None
-    method optional_list_attribute _ = []
-    method id_attribute_name = raise Not_found
-    method id_attribute_value = raise Not_found
-    method idref_attribute_names = []
-    method quick_set_attributes _ =
-      failwith "method 'quick_set_attributes' not applicable to data node"
-    method attributes_as_nodes = []
-    method comment = None
-    method set_comment c =
-      match c with
-         None -> ()
-       | Some _ -> failwith "method 'set_comment' not applicable to data node"
-    method create_element ?position _ _ _ =
-      failwith "method 'create_element' not applicable to data node"
-    method create_data new_dtd new_str =
-      let x = extension # clone in
-      let n =
-      ( {< parent = None;
-          extension = x;
-          dtd = Some new_dtd;
-          content = new_str;
-       >}
-       : 'ext #node :> 'ext node) in
-      x # set_node n;
-      n
-    method local_validate ?use_dfa () = ()
-    method keep_always_whitespace_mode = ()
-
-
-    method write os enc =
-      let encoding = self # encoding in
-      write_data_string ~from_enc:encoding ~to_enc:enc os content
-
-
-    method write_compact_as_latin1 os =
-      self # write os `Enc_iso88591
-       
-    method internal_delete _ =
-      assert false
-    method internal_init _ _ _ _ =
-      assert false
-    method internal_init_other _ _ _ =
-      assert false
-  end
-;;
-
-
-(**********************************************************************)
-
-class ['ext] attribute_impl ~element ~name value dtd =
-  (object (self)
-     val mutable parent = (None : 'ext node option)
-     val mutable dtd = dtd
-     val mutable element_name = element
-     val mutable att_name = name
-     val mutable att_value = value
-                              
-     method parent = 
-       match parent with
-          None -> raise Not_found
-        | Some p -> p
-            
-     method root =
-       match parent with
-          None -> (self : 'ext #node :> 'ext node)
-        | Some p -> p # root
-            
-     method internal_adopt new_parent _ =
-       parent <- new_parent
-
-     method orphaned_clone =
-       {< parent = None >}
-       
-     method orphaned_flat_clone =
-       {< parent = None >}
-       
-     method dtd = dtd
-                   
-     method encoding = dtd # encoding
-                        
-     method node_type = T_attribute att_name
-                         
-     method attribute n =
-       if n = att_name then att_value else raise Not_found
-        
-     method attribute_names = [ att_name ]
-                               
-     method attribute_type n =
-       let eltype = dtd # element element_name in
-       ( try
-          let atype, adefault = eltype # attribute n in
-          atype
-        with
-            Undeclared ->
-              A_cdata
-       )
-                      
-     method attributes = [ att_name, att_value ]
-                          
-     method required_string_attribute n =
-       if n = att_name then
-        match att_value with
-            Value s -> s
-          | Valuelist l -> String.concat " " l
-          | Implied_value -> raise Not_found
-       else
-        failwith "Pxp_document.attribute_impl#required_string_attribute: not found"
-
-        
-     method required_list_attribute n =
-       if n = att_name then
-        match att_value with
-            Value s -> [ s ]
-          | Valuelist l -> l
-          | Implied_value -> raise Not_found
-       else
-        failwith "Pxp_document.attribute_impl#required_list_attribute: not found"
-        
-     method optional_string_attribute n =
-       if n = att_name then
-        match att_value with
-            Value s -> Some s
-          | Valuelist l -> Some(String.concat " " l)
-          | Implied_value -> None
-       else
-        None
-        
-     method optional_list_attribute n =
-       if n = att_name then
-        match att_value with
-            Value s -> [ s ]
-          | Valuelist l -> l
-          | Implied_value -> []
-       else
-        []
-        
-    (* Senseless methods: *)
-        
-     method sub_nodes = []
-     method pinstr _ = []
-     method pinstr_names = []
-     method iter_nodes _ = ()
-     method iter_nodes_sibl _ = ()
-     method nth_node _ = raise Not_found
-     method data = ""
-     method position = ("?",0,0)
-     method comment = None
-     method local_validate ?use_dfa () = ()
-                                          
-    (* Non-applicable methods: *)
-                                          
-     method extension =
-       failwith "Pxp_document.attribute_impl#extension: not applicable"
-     method delete =
-       failwith "Pxp_document.attribute_impl#delete: not applicable"
-     method node_position =
-       failwith "Pxp_document.attribute_impl#node_position: not applicable"
-     method node_path =
-       failwith "Pxp_document.attribute_impl#node_path: not applicable"
-     method previous_node = 
-       failwith "Pxp_document.attribute_impl#previous_node: not applicable"
-     method next_node = 
-       failwith "Pxp_document.attribute_impl#next_node: not applicable"
-     method internal_set_pos _ =
-       failwith "Pxp_document.attribute_impl#internal_set_pos: not applicable"
-     method internal_delete _ =
-       failwith "Pxp_document.attribute_impl#internal_delete: not applicable"
-     method internal_init _ _ _ _ =
-       failwith "Pxp_document.attribute_impl#internal_init: not applicable"
-     method internal_init_other _ _ _ =
-       failwith "Pxp_document.attribute_impl#internal_init_other: not applicable"
-     method add_node ?force _ =
-       failwith "Pxp_document.attribute_impl#add_node: not applicable"
-     method add_pinstr _ =
-       failwith "Pxp_document.attribute_impl#add_pinstr: not applicable"
-     method set_nodes _ =
-       failwith "Pxp_document.attribute_impl#set_nodes: not applicable"
-     method quick_set_attributes _ =
-       failwith "Pxp_document.attribute_impl#quick_set_attributes: not applicable"
-     method attributes_as_nodes =
-       failwith "Pxp_document.attribute_impl#dattributes_as_nodes: not applicable"
-     method set_comment c =
-       if c <> None then
-        failwith "Pxp_document.attribute_impl#set_comment: not applicable"
-     method create_element ?position _ _ _ =
-       failwith "Pxp_document.attribute_impl#create_element: not applicable"
-     method create_data _ _ =
-       failwith "Pxp_document.attribute_impl#create_data: not applicable"
-     method keep_always_whitespace_mode =
-       failwith "Pxp_document.attribute_impl#keep_always_whitespace_mode: not applicable"
-     method write _ _ =
-       failwith "Pxp_document.attribute_impl#write: not applicable"
-     method write_compact_as_latin1 _ =
-       failwith "Pxp_document.attribute_impl#write_compact_as_latin1: not applicable"
-     method id_attribute_name =
-       failwith "Pxp_document.attribute_impl#id_attribute_name: not applicable"
-     method id_attribute_value =
-       failwith "Pxp_document.attribute_impl#id_attribute_value: not applicable"
-     method idref_attribute_names =
-       failwith "Pxp_document.attribute_impl#idref_attribute_names: not applicable"
-   end
-     : ['ext] node)
-;;
-
-(**********************************************************************)
-
-class ['ext] element_impl an_ext : ['ext] node =
-    object (self:'self)
-      inherit ['ext] node_impl an_ext as super
-
-      val mutable content_model = Any
-      val mutable content_dfa = lazy None
-      val mutable ext_decl = false
-      val mutable ntype = T_none
-      val mutable id_att_name = None
-      val mutable idref_att_names = []
-      val mutable rev_nodes = ([] : 'c list)
-      val mutable nodes = (None : 'c list option)
-      val mutable array = (None : 'c array option)
-      val mutable size = 0
-      val mutable attributes = []
-      val mutable att_nodes = []
-      val mutable comment = None
-      val pinstr = lazy (Hashtbl.create 10 : (string,proc_instruction) Hashtbl.t)
-      val mutable keep_always_whitespace = false
-
-      val mutable position = no_position
-
-      method comment = comment
-
-      method set_comment c =
-       if ntype = T_comment then
-         comment <- c
-       else
-         failwith "set_comment: not applicable to node types other than T_comment"
-
-      method attributes = attributes
-
-      method position = position
-
-      method private error_name =
-       match ntype with
-           T_element n -> "Element `" ^ n ^ "'"
-         | T_super_root -> "Super root"
-         | T_pinstr n -> "Wrapper element for processing instruction `" ^ n ^ 
-             "'"
-         | T_comment -> "Wrapper element for comment"
-         | T_none -> "NO element"
-         | T_attribute _ -> assert false
-         | T_namespace _ -> assert false
-         | T_data -> assert false
-
-      method add_node ?(force = false) n =
-       let only_whitespace s =
-         (* Checks that the string "s" contains only whitespace. On failure,
-          * Validation_error is raised.
-          *)
-         let l = String.length s in
-         if l < 100 then begin
-           for i=0 to l - 1 do  (* for loop is faster for small 'l' *)
-             match s.[i] with
-                 ('\009'|'\010'|'\013'|'\032') -> ()
-               | _ ->
-                   raise(Validation_error(self # error_name ^ 
-                                          " must not have character contents"));
-           done
-         end
-         else begin
-           let lexbuf = Lexing.from_string s in
-           let lexerset = Pxp_lexers.get_lexer_set (self # dtd # encoding) in
-           let t = lexerset.scan_name_string lexbuf in
-           if t <> Ignore or
-             (lexerset.scan_name_string lexbuf <> Eof)
-           then
-             raise(Validation_error(self # error_name ^
-                                    " must not have character contents"));
-           ()
-         end
-       in
-       (* general DTD check: *)
-       begin match dtd with
-           None -> ()
-         | Some d -> if n # dtd != d then
-             failwith "Pxp_document.element_impl # add_node: the sub node has a different DTD";
-       end;
-       (* specific checks: *)
-       try
-         begin match n # node_type with
-             T_data ->
-               begin match content_model with
-                   Any         -> ()
-                 | Unspecified -> ()
-                 | Empty       -> 
-                     if not force then begin
-                       if n # data <> "" then
-                         raise(Validation_error(self # error_name ^ 
-                                                " must be empty"));
-                       raise Skip
-                     end
-                 | Mixed _     -> ()
-                 | Regexp _    -> 
-                     if not force then begin
-                       only_whitespace (n # data);
-                       (* TODO: following check faster *)
-                       if n # dtd # standalone_declaration &&
-                         n # data <> ""
-                       then begin
-                         (* The standalone declaration is violated if the
-                          * element declaration is contained in an external
-                          * entity.
-                          *)
-                         if ext_decl then
-                           raise
-                             (Validation_error
-                                (self # error_name ^ 
-                                 " violates standalone declaration"  ^
-                                 " because extra white space separates" ^ 
-                                 " the sub elements"));
-                       end;
-                       if not keep_always_whitespace then raise Skip
-                     end
-               end
-           | _ ->
-               ()
-         end;
-         (* all OK, so add this node: *)
-         n # internal_adopt (Some (self : 'ext #node :> 'ext node)) size;
-         rev_nodes <- n :: rev_nodes;
-         nodes <- None;
-         array <- None;
-         size <- size + 1
-       with Skip ->
-         ()
-
-      method add_pinstr pi =
-       begin match dtd with
-           None -> ()
-         | Some d -> 
-             if pi # encoding <> d # encoding then
-               failwith "Pxp_document.element_impl # add_pinstr: Inconsistent encodings";
-       end;
-       let name = pi # target in
-       Hashtbl.add (Lazy.force pinstr) name pi
-
-      method pinstr name =
-       Hashtbl.find_all (Lazy.force pinstr) name
-
-      method pinstr_names =
-       let l = ref [] in
-       Hashtbl.iter
-         (fun n _ -> l := n :: !l)
-         (Lazy.force pinstr);
-       !l
-
-      method sub_nodes =
-       match nodes with
-           None ->
-             let cl = List.rev rev_nodes in
-             nodes <- Some cl;
-             cl
-         | Some cl ->
-             cl
-
-      method iter_nodes f =
-       let cl = self # sub_nodes in
-       List.iter f cl
-
-      method iter_nodes_sibl f =
-       let cl = self # sub_nodes in
-       let rec next last_node l =
-         match l with
-             [] -> ()
-           | [x] ->
-               f last_node x None
-           | x :: y :: l' ->
-               f last_node x (Some y);
-               next (Some x) l'
-       in
-       next None cl
-
-      method nth_node p =
-       if p < 0 or p >= size then raise Not_found;
-       if array = None then
-         array <- Some (Array.of_list (self # sub_nodes));
-       match array with
-           None -> assert false
-         | Some a ->
-             a.(p)
-
-      method set_nodes nl =
-       let old_size = size in
-       List.iter
-         (fun n -> n # internal_adopt None (-1))
-         rev_nodes;
-       begin try
-         size <- 0;
-         List.iter
-           (fun n -> n # internal_adopt 
-                           (Some (self : 'ext #node :> 'ext node))
-                           size;
-                     size <- size + 1)
-           nl
-       with
-           e ->
-             (* revert action as much as possible *)
-             List.iter
-               (fun n -> n # internal_adopt None (-1))
-               rev_nodes;
-             size <- old_size;
-             let pos = ref (size-1) in
-             List.iter
-               (fun n -> n # internal_adopt 
-                               (Some (self : 'ext #node :> 'ext node))
-                               !pos;
-                         decr pos
-               )
-               rev_nodes;
-             (* [TODO] Note: there may be bad members in nl *)
-             raise e
-       end;
-       rev_nodes <- List.rev nl;
-       array <- None;
-       nodes <- None
-
-
-      method orphaned_clone : 'self =
-       let sub_clones =
-         List.map
-           (fun m ->
-              m # orphaned_clone)
-           rev_nodes 
-       in
-
-       let x = extension # clone in
-       let n =
-         {< parent = None;
-            node_position = -1;
-            extension = x;
-            rev_nodes = sub_clones;
-            nodes = None;
-            array = None;
-         >} in 
-
-       let pos = ref (size - 1) in
-       List.iter
-         (fun m -> m # internal_adopt 
-                     (Some (n : 'ext #node :> 'ext node)) 
-                     !pos;
-                   decr pos
-         )
-         sub_clones;
-
-       x # set_node (n : 'ext #node  :> 'ext node);
-       n
-
-      method orphaned_flat_clone : 'self =
-       let x = extension # clone in
-       let n =
-         {< parent = None;
-            node_position = -1;
-            extension = x;
-            rev_nodes = [];
-            nodes = None;
-            size = 0;
-            array = None;
-         >} in 
-
-       x # set_node (n : 'ext #node  :> 'ext node);
-       n
-
-
-      method internal_delete n =
-       rev_nodes <- List.filter (fun n' -> n' != n) rev_nodes;
-       size <- size - 1;
-       let p = ref (size-1) in
-       List.iter
-         (fun n' -> n' # internal_set_pos !p; decr p)
-         rev_nodes;
-       nodes <- None;
-       n # internal_adopt None (-1);
-       
-
-      method data =
-       let cl = self # sub_nodes in
-       String.concat "" (List.map (fun n -> n # data) cl)
-
-      method node_type = ntype
-
-
-      method attribute n =
-       List.assoc n attributes
-
-      method attribute_names =
-       List.map fst attributes
-
-      method attribute_type n =
-       match ntype with
-           T_element name ->
-             let d =
-               match dtd with
-                   None -> assert false 
-                 | Some d -> d in
-             let eltype = d # element name in
-             ( try
-                 let atype, adefault = eltype # attribute n in
-                 atype
-               with
-                   Undeclared ->
-                     A_cdata
-             )
-         | _ ->
-             failwith "attribute_type: not available for non-element nodes"
-
-
-      method required_string_attribute n =
-       try
-         match List.assoc n attributes with
-             Value s -> s
-           | Valuelist l -> String.concat " " l
-           | Implied_value -> raise Not_found
-       with
-           Not_found ->
-             failwith "Pxp_document, method required_string_attribute: not found"
-
-      method optional_string_attribute n =
-       try
-         match List.assoc n attributes with
-             Value s -> Some s
-           | Valuelist l -> Some (String.concat " " l)
-           | Implied_value -> None
-       with
-           Not_found ->
-             None
-
-      method required_list_attribute n =
-       try
-         match List.assoc n attributes with
-             Value s -> [ s ]
-           | Valuelist l -> l
-           | Implied_value -> raise Not_found
-       with
-           Not_found ->
-             failwith "Markup.document, method required_list_attribute: not found"
-
-      method optional_list_attribute n =
-       try
-         match List.assoc n attributes with
-             Value s -> [ s ]
-           | Valuelist l -> l
-           | Implied_value -> []
-       with
-           Not_found ->
-             []
-
-      method id_attribute_name =
-       match id_att_name with
-           None -> raise Not_found
-         | Some name -> name
-
-      method id_attribute_value =
-       match id_att_name with
-           None -> raise Not_found
-         | Some name ->
-             begin match List.assoc name attributes (* may raise Not_found *)
-             with
-                 Value s -> s
-               | _ -> raise Not_found
-             end
-
-
-      method idref_attribute_names = idref_att_names
-
-
-      method quick_set_attributes atts =
-       match ntype with
-           T_element _ ->
-             attributes <- atts;
-             att_nodes <- []
-         | _ ->
-             failwith "quick_set_attributes: not applicable for non-element node"
-
-
-      method attributes_as_nodes =
-       match att_nodes with
-           [] when attributes = [] ->
-             []
-         | [] ->
-             let dtd = self # dtd in
-             let element_name =
-               match ntype with
-                   T_element n -> n
-                 | _ ->
-                     assert false in
-             let l =
-               List.map
-                 (fun (n,v) ->
-                    new attribute_impl 
-                      ~element:element_name
-                      ~name:n
-                      v
-                      dtd)
-                 attributes in
-             att_nodes <- l;
-             l
-         | _ ->
-             att_nodes
-
-
-      method create_element 
-                       ?(position = no_position) new_dtd new_type new_attlist =
-       let x = extension # clone in
-       let obj = ( {< parent = None;
-                      extension = x;
-                      pinstr = lazy (Hashtbl.create 10)
-                   >}
-                   : 'ext #node :> 'ext node
-                 ) in
-       x # set_node obj;
-       match new_type with
-           T_data ->
-             failwith "create_element: Cannot create T_data node"
-         | T_element name ->
-             obj # internal_init position new_dtd name new_attlist;
-             obj
-         | (T_comment | T_pinstr _ | T_super_root | T_none) ->
-             obj # internal_init_other position new_dtd new_type;
-             obj
-         | _ ->
-             failwith "create_element: Cannot create such node"
-
-
-      method internal_init_other new_pos new_dtd new_ntype =
-       (* resets the contents of the object *)
-       parent <- None;
-       rev_nodes <- [];
-       nodes <- None;
-       ntype <- new_ntype;
-       position <- new_pos;
-       content_model <- Any;
-       content_dfa <- lazy None;
-       attributes <- [];
-       att_nodes <- [];
-       dtd <- Some new_dtd;
-       ext_decl <- false;
-       id_att_name <- None;
-       idref_att_names <- [];
-       comment <- None;
-
-
-      method internal_init new_pos new_dtd new_name new_attlist =
-       (* ONLY FOR T_Element NODES!!! *)
-       (* resets the contents of the object *)
-       parent <- None;
-       rev_nodes <- [];
-       nodes <- None;
-       ntype <- T_element new_name;
-       position <- new_pos;
-       comment <- None;
-       att_nodes <- [];
-
-       let lexerset = Pxp_lexers.get_lexer_set (new_dtd # encoding) in
-       let sadecl = new_dtd # standalone_declaration in
-
-       (* First validate the element name and the attributes: *)
-       (* Well-Formedness Constraint: Unique Att Spec *)
-       let rec check_uniqueness al =
-         match al with
-             [] -> ()
-           | (n, av) :: al' ->
-               if List.mem_assoc n al' then
-                 raise (WF_error("Attribute `" ^ n ^ "' occurs twice in element `" ^ new_name ^ "'"));
-               check_uniqueness al'
-       in
-       check_uniqueness new_attlist;
-       (* Validity Constraint: Element Valid [element has been declared] *)
-       try
-         let eltype = new_dtd # element new_name in
-         content_model <- eltype # content_model;
-         content_dfa   <- lazy(eltype # content_dfa);
-         ext_decl <- eltype # externally_declared;
-         id_att_name <- eltype # id_attribute_name;
-         idref_att_names <- eltype # idref_attribute_names;
-         (* Validity Constraint: Attribute Value Type *)
-         (* Validity Constraint: Fixed Attribute Default *)
-         (* Validity Constraint: Standalone Document Declaration (partly) *)
-         let undeclared_attlist = ref [] in
-         let new_attlist' =
-           List.map
-             (fun (n,v) ->
-                try
-                  (* Get type, default, and the normalized attribute
-                   * value 'av':
-                   *)
-                  let atype, adefault = eltype # attribute n in
-                  let av = value_of_attribute lexerset new_dtd n atype v in
-                  (* If necessary, check whether normalization violates
-                   * the standalone declaration.
-                   *)
-                  if sadecl &&
-                      eltype # 
-                       attribute_violates_standalone_declaration n (Some v)
-                  then
-                    raise
-                      (Validation_error
-                         ("Attribute `" ^ n ^ "' of element type `" ^
-                          new_name ^ "' violates standalone declaration"));
-                  (* If the default is "fixed", check that. *)
-                  begin match adefault with
-                      (D_required | D_implied) -> ()
-                    | D_default _ -> ()
-                    | D_fixed u ->
-                        let uv = value_of_attribute 
-                                         lexerset new_dtd "[default]" atype u in
-                        if av <> uv then
-                          raise
-                            (Validation_error
-                               ("Attribute `" ^ n ^ 
-                                "' is fixed, but has here a different value"));
-                  end;
-                  n,av
-                with
-                    Undeclared ->
-                      (* raised by method "# attribute" *)
-                       undeclared_attlist :=
-                         (n, value_of_attribute lexerset new_dtd n A_cdata v) ::
-                         !undeclared_attlist;
-                       n, Implied_value        (* does not matter *)
-             )
-             new_attlist in
-         (* Validity Constraint: Required Attribute *)
-         (* Validity Constraint: Standalone Document Declaration (partly) *)
-         (* Add attributes with default values *)
-         let new_attlist'' =
-           List.map
-             (fun n ->
-                try
-                  n, List.assoc n new_attlist'
-                with
-                    Not_found ->
-                      (* Check standalone declaration: *)
-                      if sadecl &&
-                           eltype # 
-                           attribute_violates_standalone_declaration
-                           n None then
-                        raise
-                          (Validation_error
-                             ("Attribute `" ^ n ^ "' of element type `" ^
-                              new_name ^ "' violates standalone declaration"));
-                      (* add default value or Implied *)
-                      let atype, adefault = eltype # attribute n in
-                      match adefault with
-                          D_required ->
-                            raise(Validation_error("Required attribute `" ^ n ^ "' is missing"))
-                        | D_implied ->
-                            n, Implied_value
-                        | D_default v ->
-                            n, value_of_attribute lexerset new_dtd n atype v
-                        | D_fixed v ->
-                            n, value_of_attribute lexerset new_dtd n atype v
-             )
-             (eltype # attribute_names)
-         in
-         dtd <- Some new_dtd;
-         attributes <- new_attlist'' @ !undeclared_attlist;
-       with
-           Undeclared ->
-             (* The DTD allows arbitrary attributes/contents for this
-              * element
-              *)
-             dtd <- Some new_dtd;
-             attributes <- List.map (fun (n,v) -> n, Value v) new_attlist;
-             content_model <- Any;
-             content_dfa <- lazy None;
-
-      method local_validate ?(use_dfa=false) () =
-       (* validates that the content of this element matches the model *)
-       let dfa = if use_dfa then Lazy.force content_dfa else None in
-       if not (validate_content 
-                 ~use_dfa:dfa
-                 content_model 
-                 (self : 'ext #node :> 'ext node)) then
-         raise(Validation_error(self # error_name ^ 
-                                " does not match its content model"))
-
-
-      method create_data _ _ =
-       failwith "method 'create_data' not applicable to element node"
-
-      method keep_always_whitespace_mode =
-       keep_always_whitespace <- true
-
-      method write os enc =
-       let encoding = self # encoding in
-       let wms = 
-         write_markup_string ~from_enc:encoding ~to_enc:enc os in
-
-       begin match ntype with
-           T_element name ->
-             wms ("<" ^ name);
-             List.iter
-               (fun (aname, avalue) ->
-                  match avalue with
-                      Implied_value -> ()
-                    | Value v ->
-                        wms ("\n" ^ aname ^ "=\"");
-                        write_data_string ~from_enc:encoding ~to_enc:enc os v;
-                        wms "\"";
-                    | Valuelist l ->
-                        let v = String.concat " " l in
-                        wms ("\n" ^ aname ^ "=\"");
-                        write_data_string ~from_enc:encoding ~to_enc:enc os v;
-                        wms "\"";
-               )
-               attributes;
-             wms "\n>";
-         | _ ->
-             ()
-       end;
-
-       Hashtbl.iter
-         (fun n pi ->
-            pi # write os enc
-         )
-         (Lazy.force pinstr);
-       List.iter 
-         (fun n -> n # write os enc)
-         (self # sub_nodes);
-
-       begin match ntype with
-           T_element name ->
-             wms ("</" ^ name ^ "\n>");
-         | _ ->
-             ()
-       end
-
-       (* TODO: How to write comments? The comment string may contain
-        * illegal characters or "--".
-        *)
-
-
-      method write_compact_as_latin1 os =
-       self # write os `Enc_iso88591
-
-    end
-;;
-
-
-let spec_table_find_exemplar tab eltype =
-  try
-    Hashtbl.find tab.mapping eltype
-  with
-      Not_found -> tab.default_element
-;;
-
-
-let create_data_node spec dtd str =
-  match spec with
-      Spec_table tab ->
-       let exemplar = tab.data_node in
-       exemplar # create_data dtd str
-;;
-
-
-let create_element_node ?position spec dtd eltype atts =
-   match spec with
-      Spec_table tab ->
-       let exemplar = spec_table_find_exemplar tab eltype in
-       exemplar # create_element ?position:position dtd (T_element eltype) atts
-;;
-
-
-let create_super_root_node ?position spec dtd =
-    match spec with
-      Spec_table tab ->
-       ( match tab.super_root_node with
-             None -> 
-               failwith "Pxp_document.create_super_root_node: No exemplar"
-           | Some x -> 
-               x # create_element ?position:position dtd T_super_root []
-       )
-;;
-
-let create_no_node ?position spec dtd =
-    match spec with
-      Spec_table tab ->
-       let x = tab.default_element in
-       x # create_element ?position:position dtd T_none []
-;;
-
-
-let create_comment_node ?position spec dtd text =
-  match spec with
-      Spec_table tab ->
-       ( match tab.comment_node with
-             None ->
-               failwith "Pxp_document.create_comment_node: No exemplar"
-           | Some x ->
-               let e = x # create_element ?position:position dtd T_comment [] 
-               in
-               e # set_comment (Some text);
-               e
-       )
-;;
-       
-    
-let create_pinstr_node ?position spec dtd pi =
-  let target = pi # target in
-  let exemplar =
-    match spec with
-       Spec_table tab ->
-         ( try 
-             Hashtbl.find tab.pinstr_mapping target
-           with
-               Not_found ->
-                 ( match tab.default_pinstr_node with
-                       None -> 
-                         failwith 
-                           "Pxp_document.create_pinstr_node: No exemplar"
-                     | Some x -> x
-                 )
-         )
-  in
-  let el = 
-    exemplar # create_element ?position:position dtd (T_pinstr target) [] in
-  el # add_pinstr pi;
-  el
-;;
-
-
-let find ?(deeply=false) f base =
-  let rec search_flat children =
-    match children with
-       [] -> raise Not_found
-      | n :: children' ->
-         if f n then n else search_flat children'
-  in
-  let rec search_deep children =
-    match children with
-       [] -> raise Not_found
-      | n :: children' ->
-         if f n then
-           n 
-         else
-           try search_deep (n # sub_nodes)
-           with Not_found -> search_deep children'
-  in
-  (if deeply then search_deep else search_flat)
-  (base # sub_nodes)
-;;
-
-
-let find_all ?(deeply=false) f base =
-  let rec search_flat children =
-    match children with
-       [] -> []
-      | n :: children' ->
-         if f n then n :: search_flat children' else search_flat children'
-  in
-  let rec search_deep children =
-    match children with
-       [] -> []
-      | n :: children' ->
-         let rest =
-           search_deep (n # sub_nodes) @ search_deep children' in
-         if f n then
-           n :: rest
-         else
-           rest
-  in
-  (if deeply then search_deep else search_flat)
-  (base # sub_nodes)
-;;
-
-
-let find_element ?deeply eltype base =
-  find 
-    ?deeply:deeply 
-    (fun n -> 
-       match n # node_type with
-          T_element name -> name = eltype
-        | _              -> false)
-    base
-;;
-
-
-let find_all_elements ?deeply eltype base =
-  find_all
-    ?deeply:deeply 
-    (fun n -> 
-       match n # node_type with
-          T_element name -> name = eltype
-        | _              -> false)
-    base
-;;
-
-
-exception Skip;;
-
-let map_tree ~pre ?(post=(fun x -> x)) base =
-  let rec map_rec n =
-    (try
-      let n' = pre n in
-      if n' # node_type <> T_data then begin
-       let children = n # sub_nodes in
-       let children' = map_children children in
-       n' # set_nodes children';
-      end;
-      post n'
-    with
-       Skip -> raise Not_found
-    )
-  and map_children l =
-    match l with
-       [] -> []
-      | child :: l' ->
-         (try 
-            let child' = map_rec child in
-            child' :: map_children l'
-          with
-              Not_found ->
-                map_children l'
-         )
-  in
-  map_rec base
-;;
-
-
-let map_tree_sibl ~pre ?(post=(fun _ x _ -> x)) base =
-  let rec map_rec l n r =
-    (try
-      let n' = pre l n r in
-      if n' # node_type <> T_data then begin
-       let children = n # sub_nodes in
-       let children' = map_children None children in
-       let children'' = postprocess_children None children' in
-       n' # set_nodes children'';
-      end;
-      n'
-    with
-       Skip -> raise Not_found
-    )
-  and map_children predecessor l =
-    (match l with
-        [] -> []
-       | child :: l' ->
-          let successor =
-            match l' with
-                []    -> None
-             | x :: _ -> Some x in
-          (try 
-             let child' = map_rec predecessor child successor in
-             child' :: map_children (Some child) l'
-           with
-               Not_found ->
-                 map_children (Some child) l'
-          )
-    )
-  and postprocess_children predecessor l =
-    (match l with
-        [] -> []
-       | child :: l' ->
-          let successor =
-            match l' with
-                []     -> None
-              | x :: _ -> Some x in
-          (try 
-             let child' = post predecessor child successor in
-             child' :: postprocess_children (Some child) l'
-           with
-               Skip ->
-                 postprocess_children (Some child) l'
-          )
-    )
-  in
-  let base' = map_rec None base None in
-  try post None base' None with Skip -> raise Not_found
-;;
-
-
-let iter_tree ?(pre=(fun x -> ())) ?(post=(fun x -> ())) base =
-  let rec iter_rec n =
-    (try
-      pre n;
-      let children = n # sub_nodes in
-      iter_children children;
-      post n
-    with
-       Skip -> raise Not_found
-    )
-  and iter_children l =
-    match l with
-       [] -> []
-      | child :: l' ->
-         (try 
-            iter_rec child;
-            iter_children l'
-          with
-              Not_found ->
-                iter_children l'
-         )
-  in
-  iter_rec base
-;;
-
-
-let iter_tree_sibl ?(pre=(fun _ _ _ -> ())) ?(post=(fun _ _ _ -> ())) base =
-  let rec iter_rec l n r =
-    (try
-      pre l n r;
-      let children = n # sub_nodes in
-      iter_children None children;
-      post l n r
-    with
-       Skip -> raise Not_found
-    )
-  and iter_children predecessor l =
-    (match l with
-        [] -> []
-       | child :: l' ->
-          let successor =
-            match l' with
-                []    -> None
-             | x :: _ -> Some x in
-          (try 
-             iter_rec predecessor child successor;
-             iter_children (Some child) l'
-           with
-               Not_found ->
-                 iter_children (Some child) l'
-          )
-    )
-  in
-  iter_rec None base None
-;;
-
-
-let compare a b =
-  let rec cmp p1 p2 =
-    match p1, p2 with
-       [], []         -> 0
-      | [], _          -> -1
-      | _, []          -> 1
-      | x::p1', y::p2' -> if x = y then cmp p1' p2' else x - y
-  in
-
-  let a_path = a # node_path in
-  let b_path = b # node_path in
-
-  cmp a_path b_path
-;;
-
-
-type 'ext ord_index = ('ext node, int) Hashtbl.t;;
-
-let create_ord_index base =
-  let n = ref 0 in
-  iter_tree ~pre:(fun _ -> incr n) base;
-  let idx = Hashtbl.create !n in
-  let k = ref 0 in
-  iter_tree ~pre:(fun node -> Hashtbl.add idx node !k; incr k) base;
-  idx
-;;
-
-
-let ord_number idx node =
-  Hashtbl.find idx node
-;;
-
-let ord_compare idx a b =
-  let ord_a = Hashtbl.find idx a in
-  let ord_b = Hashtbl.find idx b in
-  ord_a - ord_b
-;;
-
-class ['ext] document the_warner =
-  object (self)
-    val mutable xml_version = "1.0"
-    val mutable dtd = (None : dtd option)
-    val mutable root = (None : 'ext node option)
-
-    val pinstr = lazy (Hashtbl.create 10 : (string,proc_instruction) Hashtbl.t)
-    val warner = (the_warner : collect_warnings)
-
-    method init_xml_version s = 
-      if s <> "1.0" then
-       warner # warn ("XML version '" ^ s ^ "' not supported");
-      xml_version <- s
-
-    method init_root r = 
-      let dtd_r = r # dtd in
-      match r # node_type with
-
-       (**************** CASE: We have a super root element ***************)
-
-       | T_super_root ->
-           if not (dtd_r # arbitrary_allowed) then begin
-             match dtd_r # root with
-                 Some declared_root_element_name ->
-                   let real_root_element =
-                     try
-                       List.find
-                         (fun r' -> 
-                            match r' # node_type with
-                              | T_element _     -> true
-                              | _               -> false)
-                         (r # sub_nodes)
-                     with
-                         Not_found ->
-                           failwith "Pxp_document.document#init_root: Super root does not contain root element"
-                             (* TODO: Check also that there is at most one
-                              * element in the super root node
-                              *)
-
-                   in
-                   let real_root_element_name =
-                     match real_root_element # node_type with 
-                         T_element name -> name
-                       | _              -> assert false
-                   in
-                   if real_root_element_name <> declared_root_element_name then
-                     raise
-                       (Validation_error ("The root element is `" ^ 
-                                          real_root_element_name ^ 
-                                          "' but is declared as `" ^
-                                          declared_root_element_name))
-               | None -> ()
-           end;
-           (* All is okay, so store dtd and root node: *)
-           dtd <- Some dtd_r;
-           root <- Some r
-
-       (**************** CASE: No super root element **********************)
-
-       | T_element root_element_name ->
-           if not (dtd_r # arbitrary_allowed) then begin
-             match dtd_r # root with
-                 Some declared_root_element_name ->
-                   if root_element_name <> declared_root_element_name then
-                     raise
-                       (Validation_error ("The root element is `" ^ 
-                                          root_element_name ^ 
-                                          "' but is declared as `" ^
-                                          declared_root_element_name))
-               | None ->
-                   (* This may happen if you initialize your DTD yourself.
-                    * The value 'None' means that the method 'set_root' was
-                    * never called for the DTD; we interpret it here as:
-                    * The root element does not matter.
-                    *)
-                   ()
-           end;
-           (* All is okay, so store dtd and root node: *)
-           dtd <- Some dtd_r;
-           root <- Some r
-
-       | _ ->
-           failwith "Pxp_document.document#init_root: the root node must be an element or super-root"
-
-    method xml_version = xml_version
-
-    method xml_standalone = 
-      match dtd with
-         None -> false
-       | Some d -> d # standalone_declaration
-
-    method dtd =
-      match dtd with
-         None -> failwith "Pxp_document.document#dtd: Document has no DTD"
-       | Some d -> d
-
-    method encoding =
-      match dtd with
-         None -> failwith "Pxp_document.document#encoding: Document has no DTD"
-       | Some d -> d # encoding
-
-    method root =
-      match root with
-         None -> failwith "Pxp_document.document#root: Document has no root element"
-       | Some r -> r
-
-    method add_pinstr pi =
-      begin match dtd with
-         None -> ()
-       | Some d -> 
-           if pi # encoding <> d # encoding then
-             failwith "Pxp_document.document # add_pinstr: Inconsistent encodings";
-      end;
-      let name = pi # target in
-      Hashtbl.add (Lazy.force pinstr) name pi
-
-    method pinstr name =
-      Hashtbl.find_all (Lazy.force pinstr) name
-
-    method pinstr_names =
-      let l = ref [] in
-      Hashtbl.iter
-       (fun n _ -> l := n :: !l)
-       (Lazy.force pinstr);
-      !l
-
-    method write os enc =
-      let encoding = self # encoding in
-      let wms = 
-       write_markup_string ~from_enc:encoding ~to_enc:enc os in
-
-      let r = self # root in
-      wms ("<?xml version='1.0' encoding='" ^ 
-          Netconversion.string_of_encoding enc ^ 
-          "'?>\n");
-      ( match self # dtd # root with
-           None ->
-             self # dtd # write os enc false
-         | Some _ ->
-             self # dtd # write os enc true
-      );
-      Hashtbl.iter
-       (fun n pi ->
-          pi # write os enc
-       )
-       (Lazy.force pinstr);
-      r # write os enc;
-      wms "\n";
-           
-    method write_compact_as_latin1 os =
-      self # write os `Enc_iso88591
-
-  end
-;;
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.14  2000/08/30 15:47:52  gerd
- *     Implementation of pxp_document.mli rev 1.10.
- *
- * Revision 1.13  2000/08/26 23:29:10  gerd
- *     Implementations for the changed in rev 1.9 of pxp_document.mli.
- *
- * Revision 1.12  2000/08/18 20:14:00  gerd
- *     New node_types: T_super_root, T_pinstr, T_comment, (T_attribute),
- * (T_none), (T_namespace).
- *
- * Revision 1.11  2000/08/14 22:24:55  gerd
- *     Moved the module Pxp_encoding to the netstring package under
- * the new name Netconversion.
- *
- * Revision 1.10  2000/07/23 02:16:34  gerd
- *     Support for DFAs.
- *
- * Revision 1.9  2000/07/16 19:37:09  gerd
- *     Simplification.
- *
- * Revision 1.8  2000/07/16 17:50:01  gerd
- *     Fixes in 'write'
- *
- * Revision 1.7  2000/07/16 16:34:41  gerd
- *     New method 'write', the successor of 'write_compact_as_latin1'.
- *
- * Revision 1.6  2000/07/14 13:56:11  gerd
- *     Added methods id_attribute_name, id_attribute_value,
- * idref_attribute_names.
- *
- * Revision 1.5  2000/07/09 17:51:14  gerd
- *     Element nodes can store positions.
- *
- * Revision 1.4  2000/07/08 23:04:06  gerd
- *     [Merging 0.2.10:] Bugfix: allow_undeclared_attribute
- *
- * Revision 1.3  2000/07/04 22:10:06  gerd
- *     Implemented rev 1.3 of pxp_document.mli in a straight-
- * forward fashion.
- *
- * Revision 1.2  2000/06/14 22:19:06  gerd
- *     Added checks such that it is impossible to mix encodings.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_document.ml:
- *
- * Revision 1.19  2000/05/27 19:14:42  gerd
- *     value_of_attribute: this function has been moved to
- * markup_aux.ml.
- *
- *     Added the following checks whether there is a violation
- * against the standalone declaration:
- *     - Externally declared elements with regexp content model
- *       must not contain extra white space
- *     - The effect of normalization of externally declared attributes
- *       must not depend on the type of the attributes
- *     - Declared default values of externally declared attributes
- *       must not have an effect on the value of the attributes.
- *
- *     Removed the method init_xml_standalone. It is now stored in
- * the DTD whether there is a standalone declaration.
- *
- * Revision 1.18  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.17  2000/05/06 23:12:20  gerd
- *     Allow undeclared attributes.
- *
- * Revision 1.16  2000/05/01 20:42:28  gerd
- *     New method write_compact_as_latin1.
- *
- * Revision 1.15  2000/04/30 18:15:22  gerd
- *     In function validate_content: Special handling of the pseudo
- * nodes "-pi" and "-vr".
- *     Method init_root, class document: Recognizes whether the
- * root is virtual or real. The check on the root element name is different
- * in each case.
- *     New method keep_always_whitespace_mode: Turns a special mode
- * on in which ignorable whitespace is included into the document.
- *
- * Revision 1.14  2000/03/11 22:58:15  gerd
- *     Updated to support Markup_codewriter.
- *
- * Revision 1.13  2000/01/27 21:51:56  gerd
- *     Added method 'attributes'.
- *
- * Revision 1.12  2000/01/27 21:19:34  gerd
- *     Added methods.
- *     Bugfix: 'orphaned_clone' performs now really a clone.
- *
- * Revision 1.11  2000/01/20 21:57:58  gerd
- *     Bugfix: method set_nodes does no longer add the new subnodes
- * in the reverse order.
- *
- * Revision 1.10  1999/12/17 21:35:37  gerd
- *     Bugfix: If the name of the root element is not specified in
- * the DTD, the document does not check whether the root element is a
- * specific element.
- *
- * Revision 1.9  1999/11/09 22:22:01  gerd
- *     The "document" classes now checks that the root element is the
- * same as the declared root element. Thanks to Claudio Sacerdoti Coen
- * for his bug report.
- *
- * Revision 1.8  1999/09/01 22:51:40  gerd
- *     Added methods to store processing instructions.
- *
- * Revision 1.7  1999/09/01 16:19:18  gerd
- *     Added some warnings.
- *     If an element type has the content model EMPTY, it is now strictly
- * checked that the element instance is really empty. Especially, white space
- * is NOT allowed in such instances.
- *
- * Revision 1.6  1999/08/19 21:58:59  gerd
- *     Added method "reset_finder". This is not very convincing, but
- * currently the simplest way to update the ID hash table.
- *
- * Revision 1.5  1999/08/19 01:08:15  gerd
- *     Added method "find" that searches node by ID in the whole
- * tree.
- *     Bugfix: After the extension has been cloned, the "set_node" method
- * is invoked telling the clone to which node it is associated.
- *
- * Revision 1.4  1999/08/15 13:52:52  gerd
- *     Bugfix: WF_error "Attribute x occurs twice in element [unnamed]"
- * no longer possible; instead of "[unnamed]" the actual name is printed.
- *     Improved some of the error messages.
- *
- * Revision 1.3  1999/08/15 02:19:01  gerd
- *     If the DTD allows arbitrary elements, unknown elements are not
- * rejected.
- *
- * Revision 1.2  1999/08/11 14:54:23  gerd
- *     Optimizations: The hashtable for the 'pinstr' variable is only
- * created on demand. -- The 'only_whitespace' function uses a simple "for"
- * loop is the string is small and a lexer if the string is big.
- *
- * Revision 1.1  1999/08/10 00:35:50  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_document.mli b/helm/DEVEL/pxp/pxp/pxp_document.mli
deleted file mode 100644 (file)
index 67c6e4d..0000000
+++ /dev/null
@@ -1,838 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-(**********************************************************************)
-(*                                                                    *)
-(* Pxp_document:                                                      *)
-(*     Object model of the document/element instances                 *)
-(*                                                                    *)
-(**********************************************************************)
-
-
-(* ======================================================================
- * OVERVIEW
- *
- * class type node ............. The common class type of the nodes of
- *                               the element tree. Nodes are either
- *                               elements (inner nodes) or data nodes
- *                               (leaves)
- * class type extension ........ The minimal properties of the so-called
- *                               extensions of the nodes: Nodes can be
- *                               customized by applying a class parameter
- *                               that adds methods/values to nodes.
- * class data_impl : node ...... Implements data nodes.
- * class element_impl : node ... Implements element nodes
- * class document .............. A document is an element with some additional
- *                               properties
- *
- * ======================================================================
- *
- * THE STRUCTURE OF NODE TREES:
- *
- * Every node except the root node has a parent node. The parent node is
- * always an element, because data nodes never contain other nodes.
- * In the other direction, element nodes may have children; both elements
- * and data nodes are possible as children.
- * Every node knows its parent (if any) and all its children (if any);
- * the linkage is maintained in both directions. A node without a parent
- * is called a root.
- * It is not possible that a node is the child of two nodes (two different nodes
- * or a multiple child of the same node).
- * You can break the connection between a node and its parent; the method
- * "delete" performs this operations and deletes the node from the parent's
- * list of children. The node is now a root, for itself and for all
- * subordinate nodes. In this context, the node is also called an orphan,
- * because it has lost its parent (this is a bit misleading because the
- * parent is not always the creator of a node).
- * In order to simplify complex operations, you can also set the list of
- * children of an element. Nodes that have been children before are unchanged;
- * new nodes are added (and the linkage is set up), nodes no more occurring
- * in the list are handled if they have been deleted.
- * If you try to add a node that is not a root (either by an "add" or by a
- * "set" operation) the operation fails.
- *
- * CREATION OF NODES
- *
- * The class interface supports creation of nodes by cloning a so-called
- * exemplar. The idea is that it is sometimes useful to implement different
- * element types by different classes, and to implement this by looking up
- * exemplars.
- * Imagine you have three element types A, B, and C, and three classes
- * a, b, and c implementing the node interface (for example, by providing
- * different extensions, see below). The XML parser can be configured to
- * have a lookup table
- *   { A --> a0,  B --> b0, C --> c0 }
- * where a0, b0, c0 are exemplars of the classes a, b, and c, i.e. empty
- * objects belonging to these classes. If the parser finds an instance of
- * A, it looks up the exemplar a0 of A and clones it (actually, the method
- * "create_element" performs this for elements, and "create_data" for data
- * nodes). Clones belong to the same class as the original nodes, so the
- * instances of the elements have the same classes as the configured
- * exemplars.
- * Note: This technique assumes that the interface of all exemplars is the
- * same!
- *
- * THE EXTENSION
- *
- * The class type node and all its implementations have a class parameter
- * 'ext which must at least fulfil the properties of the class type "extension".
- * The idea is that you can add properties, for example:
- *
- * class my_extension =
- *   object
- *     (* minimal properties required by class type "extension": *)
- *     method clone = ...
- *     method node = ...
- *     method set_node n = ...
- *     (* here my own methods: *)
- *     method do_this_and_that ...
- *   end
- *
- * class my_element_impl = [ my_extension ] element_impl
- * class my_data_impl    = [ my_extension ] data_impl
- *
- * The whole XML parser is parameterized with 'ext, so your extension is
- * visible everywhere (this is the reason why extensibility is solved by
- * parametric polymorphism and not by inclusive polymorphism (subtyping)).
- *
- *
- * SOME COMPLICATED TYPE EXPRESSIONS
- *
- * Sometimes the following type expressions turn out to be necessary:
- *
- * 'a node extension as 'a
- *      This is the type of an extension that belongs to a node that
- *      has an extension that is the same as we started with.
- *
- * 'a extension node as 'a
- *      This is the type of a node that has an extension that belongs to a
- *      node of the type we started with.
- *
- *
- * DOCUMENTS
- * ...
- *
- * ======================================================================
- *
- * SIMPLE USAGE: ...
- *)
-
-
-open Pxp_dtd
-
-
-type node_type =
-  (* The basic and most important node types:
-   * - T_element element_type   is the type of element nodes
-   * - T_data                   is the type of text data nodes
-   * By design of the parser, neither CDATA sections nor entity references
-   * are represented in the node tree; so there are no types for them.
-   *)
-    T_element of string
-  | T_data
-
-  (* The following types are extensions to my original design. They have mainly
-   * been added to simplify the implementation of standards (such as
-   * XPath) that require that nodes of these types are included into the
-   * main document tree.
-   * There are options (see Pxp_yacc) forcing the parser to insert such
-   * nodes; in this case, the nodes are actually element nodes serving
-   * as wrappers for the additional data structures. The options are:
-   * enable_super_root_node, enable_pinstr_nodes, enable_comment_nodes.
-   * By default, such nodes are not created.
-   *)
-  | T_super_root
-  | T_pinstr of string                  (* The string is the target of the PI *)
-  | T_comment
-
-  (* The following types are fully virtual. This means that it is impossible
-   * to make the parser insert such nodes. However, these types might be
-   * practical when defining views on the tree.
-   * Note that the list of virtual node types will be extended if necessary.
-   *)
-  | T_none
-  | T_attribute of string          (* The string is the name of the attribute *)
-  | T_namespace of string               (* The string is the namespace prefix *)
-;;
-
-
-class type [ 'node ] extension =
-  object ('self)
-    method clone : 'self
-      (* "clone" should return an exact deep copy of the object. *)
-    method node : 'node
-      (* "node" returns the corresponding node of this extension. This method
-       * intended to return exactly what previously has been set by "set_node".
-       *)
-    method set_node : 'node -> unit
-      (* "set_node" is invoked once the extension is associated to a new
-       * node object.
-       *)
-  end
-;;
-
-
-class type [ 'ext ] node =
-  object ('self)
-    constraint 'ext = 'ext node #extension
-
-    method extension : 'ext
-      (* Return the extension of this node: *)
-
-    method delete : unit
-      (* Delete this node from the parent's list of sub nodes. This node gets
-       * orphaned.
-       * 'delete' does nothing if this node does not have a parent.
-       *)
-
-    method parent : 'ext node
-      (* Get the parent, or raise Not_found if this node is an orphan. *)
-
-    method root : 'ext node
-      (* Get the direct or indirect parent that does not have a parent itself,
-       * i.e. the root of the tree.
-       *)
-
-    method orphaned_clone : 'self
-      (* return an exact clone of this element and all sub nodes (deep copy)
-       * except string values which are shared by this node and the clone.
-       * The other exception is that the clone has no parent (i.e. it is now
-       * a root).
-       *)
-
-    method orphaned_flat_clone : 'self
-      (* return a clone of this element where all subnodes are omitted.
-       * The type of the node, and the attributes are the same as in the
-       * original node.
-       * The clone has no parent.
-       *)
-
-    method add_node : ?force:bool -> 'ext node -> unit
-      (* Append new sub nodes -- mainly used by the parser itself, but
-       * of course open for everybody. If an element is added, it must be
-       * an orphan (i.e. does not have a parent node); and after addition
-       * *this* node is the new parent.
-       * The method performs some basic validation checks if the current node
-       * has a regular expression as content model, or is EMPTY. You can
-       * turn these checks off by passing ~force:true to the method.
-       *)
-
-    method add_pinstr : proc_instruction -> unit
-      (* Add a processing instruction to the set of processing instructions of
-       * this node. Usually only elements contain processing instructions.
-       *)
-
-    method pinstr : string -> proc_instruction list
-      (* Get all processing instructions with the passed name *)
-
-    method pinstr_names : string list
-      (* Get a list of all names of processing instructions *)
-
-    method node_position : int
-      (* Returns the position of this node among all children of the parent
-       * node. Positions are counted from 0.
-       * Raises Not_found if the node is the root node.
-       *)
-
-    method node_path : int list
-      (* Returns the list of node positions of the ancestors of this node,
-       * including this node. The first list element is the node position
-       * of this child of the root, and the last list element is the 
-       * node position of this node.
-       * Returns [] if the node is the root node.
-       *)
-
-    method sub_nodes : 'ext node list
-      (* Get the list of sub nodes *)
-
-    method iter_nodes : ('ext node -> unit) -> unit
-      (* iterate over the sub nodes *)
-
-    method iter_nodes_sibl :
-      ('ext node option -> 'ext node -> 'ext node option -> unit) -> unit
-      (* Here every iteration step can also access to the previous and to the
-       * following node if present.
-       *)
-
-    method nth_node : int -> 'ext node
-      (* Returns the n-th sub node of this node, n >= 0. Raises Not_found
-       * if the index is out of the valid range.
-       * Note that the first invocation of this method requires additional
-       * overhead.
-       *)
-
-    method previous_node : 'ext node
-    method next_node : 'ext node
-      (* Return the previous and next nodes, respectively. These methods are
-       * equivalent to 
-       * - parent # nth_node (self # node_position - 1) and
-       * - parent # nth_node (self # node_position + 1), respectively.
-       *)
-
-    method set_nodes : 'ext node list -> unit
-      (* Set the list of sub nodes. Elements that are no longer sub nodes gets
-       * orphaned, and all new elements that previously were not sub nodes
-       * must have been orphaned.
-       *)
-
-    method data : string
-      (* Get the data string of this node. For data nodes, this string is just
-       * the content. For elements, this string is the concatenation of all
-       * subordinate data nodes.
-       *)
-
-    method node_type : node_type
-      (* Get the name of the element type. *)
-
-    method position : (string * int * int)
-      (* Return the name of the entity, the line number, and the column
-       * position (byte offset) of the beginning of the element.
-       * Only available if the element has been created with position
-       * information.
-       * Returns "?",0,0 if not available. (Note: Line number 0 is not
-       * possible otherwise.)
-       *)
-
-    method attribute : string -> Pxp_types.att_value
-    method attribute_names : string list
-    method attribute_type : string -> Pxp_types.att_type
-    method attributes : (string * Pxp_types.att_value) list
-      (* Get a specific attribute; get the names of all attributes; get the
-       * type of a specific attribute; get names and values of all attributes.
-       * Only elements have attributes.
-       * Note: If the DTD allows arbitrary for this element, "attribute_type"
-       * raises Undeclared.
-       *)
-
-    method required_string_attribute : string -> string
-    method required_list_attribute : string -> string list
-      (* Return the attribute or fail if the attribute is not present:
-       * The first version passes the value always as string back;
-       * the second version always as list.
-       *)
-
-    method optional_string_attribute : string -> string option
-    method optional_list_attribute : string -> string list
-      (* Return some attribute value or return None if the attribute is not
-       *  present:
-       * The first version passes the value always as string back;
-       * the second version always as list.
-       *)
-
-    method id_attribute_name : string
-    method id_attribute_value : string
-      (* Return the name and value of the ID attribute. The methods may
-       * raise Not_found if there is no ID attribute in the DTD, or no
-       * ID attribute in the element, respectively.
-       *)
-
-    method idref_attribute_names : string list
-      (* Returns the list of attribute names of IDREF or IDREFS type. *)
-
-    method quick_set_attributes : (string * Pxp_types.att_value) list -> unit
-      (* Sets the attributes but does not check whether they match the DTD.
-       *)
-
-    method attributes_as_nodes : 'ext node list
-      (* Experimental feature: Return the attributes as node list. Every node
-       * has type T_attribute n, and contains only the single attribute n.
-       * This node list is computed on demand, so the first invocation of this
-       * method will create the list, and following invocations will only
-       * return the existing list.
-       *)
-
-    method set_comment : string option -> unit
-      (* Sets the comment string; only applicable for T_comment nodes *)
-
-    method comment : string option
-      (* Get the comment string.
-       * Returns always None for nodes with a type other than T_comment.
-       *)
-
-    method dtd : dtd
-      (* Get the DTD. Fails if no DTD is specified (which is impossible if
-       * 'create_element' or 'create_data' have been used to create this
-       * object)
-       *)
-
-    method encoding : Pxp_types.rep_encoding
-      (* Get the encoding which is always the same as the encoding of the
-       * DTD. See also method 'dtd' (Note: This method fails, too, if
-       * no DTD is present.)
-       *)
-
-    method create_element : 
-             ?position:(string * int * int) ->
-             dtd -> node_type -> (string * string) list -> 'ext node
-      (* create an "empty copy" of this element:
-       * - new DTD
-       * - new node type (which must not be T_data)
-       * - new attribute list
-       * - empty list of nodes
-       *)
-
-    method create_data : dtd -> string -> 'ext node
-      (* create an "empty copy" of this data node: *)
-
-    method local_validate : 
-             ?use_dfa:bool ->
-             unit -> unit
-      (* Check that this element conforms to the DTD. 
-       * Option ~use_dfa: If true, the deterministic finite automaton of
-       *   regexp content models is used for validation, if available.
-       *   Defaults to false.
-       *)
-
-    method keep_always_whitespace_mode : unit
-      (* Normally, add_node does not accept data nodes when the DTD does not
-       * allow data nodes or only whitespace ("ignorable whitespace").
-       * Once you have invoked this method, ignorable whitespace is forced
-       * to be included into the document.
-       *)
-
-    method write : Pxp_types.output_stream -> Pxp_types.encoding -> unit
-      (* Write the contents of this node and the subtrees to the passed
-       * output stream; the passed encoding is used. The format
-       * is compact (the opposite of "pretty printing").
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -> unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-
-
-    (* ---------------------------------------- *)
-    (* The methods 'find' and 'reset_finder' are no longer supported.
-     * The functionality is provided by the configurable index object
-     * (see Pxp_yacc).
-     *)
-
-
-    (* ---------------------------------------- *)
-    (* internal methods: *)
-    method internal_adopt : 'ext node option -> int -> unit
-    method internal_set_pos : int -> unit
-    method internal_delete : 'ext node -> unit
-    method internal_init : (string * int * int) ->
-                           dtd -> string -> (string * string) list -> unit
-    method internal_init_other : (string * int * int) ->
-                                 dtd -> node_type -> unit
-  end
-;;
-
-
-class [ 'ext ] data_impl : 'ext -> [ 'ext ] node
-    (* Creation:
-     *   new data_impl an_extension
-     * creates a new data node with the given extension and the empty string
-     * as content.
-     *)
-;;
-
-
-class [ 'ext ] element_impl : 'ext -> [ 'ext ] node
-    (* Creation:
-     *   new element_impl an_extension
-     * creates a new empty element node with the given extension.
-     *)
-;;
-
-
-(* Attribute and namespace nodes are experimental: *)
-
-class [ 'ext ] attribute_impl : 
-  element:string -> name:string -> Pxp_types.att_value -> dtd -> [ 'ext ] node
-
-    (* Creation:
-     *   new attribute_impl element_name attribute_name attribute_value dtd
-     * Note that attribute nodes do intentionally not have extensions.
-     *)
-
-(* Once namespaces get implemented:
-class [ 'ext ] namespace_impl : 
-  prefix:string -> name:string -> dtd -> [ 'ext ] node
-*)
-
-(********************************** spec *********************************)
-
-type 'ext spec
-constraint 'ext = 'ext node #extension
-    (* Contains the exemplars used for the creation of new nodes
-     *)
-
-
-val make_spec_from_mapping :
-      ?super_root_exemplar : 'ext node ->
-      ?comment_exemplar : 'ext node ->
-      ?default_pinstr_exemplar : 'ext node ->
-      ?pinstr_mapping : (string, 'ext node) Hashtbl.t ->
-      data_exemplar: 'ext node ->
-      default_element_exemplar: 'ext node ->
-      element_mapping: (string, 'ext node) Hashtbl.t -> 
-      unit -> 
-        'ext spec
-    (* Specifies:
-     * - For new data nodes, the ~data_exemplar must be used
-     * - For new element nodes: If the element type is mentioned in the
-     *   ~element_mapping hash table, the exemplar found in this table is
-     *   used. Otherwise, the ~default_element_exemplar is used.
-     * Optionally:
-     * - You may also specify exemplars for super root nodes, for comments
-     *   and for processing instructions
-     *)
-
-val make_spec_from_alist :
-      ?super_root_exemplar : 'ext node ->
-      ?comment_exemplar : 'ext node ->
-      ?default_pinstr_exemplar : 'ext node ->
-      ?pinstr_alist : (string * 'ext node) list ->
-      data_exemplar: 'ext node ->
-      default_element_exemplar: 'ext node ->
-      element_alist: (string * 'ext node) list -> 
-      unit -> 
-        'ext spec
-    (* This is a convenience function: You can pass the mappings from 
-     * elements and PIs to exemplar by associative lists.
-     *)
-
-val create_data_node : 
-      'ext spec -> dtd -> string -> 'ext node
-val create_element_node : 
-      ?position:(string * int * int) ->
-      'ext spec -> dtd -> string -> (string * string) list -> 'ext node
-val create_super_root_node :
-      ?position:(string * int * int) ->
-      'ext spec -> dtd -> 'ext node
-val create_comment_node :
-      ?position:(string * int * int) ->
-      'ext spec -> dtd -> string -> 'ext node
-val create_pinstr_node :
-      ?position:(string * int * int) ->
-      'ext spec -> dtd -> proc_instruction -> 'ext node
-  (* These functions use the exemplars contained in a spec and create fresh
-   * node objects from them.
-   *)
-
-val create_no_node : 
-       ?position:(string * int * int) -> 'ext spec -> dtd -> 'ext node
-  (* Creates a T_none node with limited functionality *)
-
-(*********************** Ordering of nodes ******************************)
-
-val compare : 'ext node -> 'ext node -> int
-  (* Returns -1 if the first node is before the second node, or +1 if the
-   * first node is after the second node, or 0 if both nodes are identical.
-   * If the nodes are unrelated (do not have a common ancestor), the result
-   * is undefined.
-   * This test is rather slow.
-   *)
-
-type 'ext ord_index
-constraint 'ext = 'ext node #extension
-  (* The type of ordinal indexes *)
-
-val create_ord_index : 'ext node -> 'ext ord_index
-  (* Creates an ordinal index for the subtree starting at the passed node.
-   * This index assigns to every node an ordinal number (beginning with 0) such
-   * that nodes are numbered upon the order of the first character in the XML
-   * representation (document order).
-   * Note that the index is not automatically updated when the tree is
-   * modified.
-   *)
-
-val ord_number : 'ext ord_index -> 'ext node -> int
-  (* Returns the ordinal number of the node, or raises Not_found *)
-
-val ord_compare : 'ext ord_index -> 'ext node -> 'ext node -> int
-  (* Compares two nodes like 'compare':
-   * Returns -1 if the first node is before the second node, or +1 if the
-   * first node is after the second node, or 0 if both nodes are identical.
-   * If one of the nodes does not occur in the ordinal index, Not_found
-   * is raised.
-   * This test is much faster than 'compare'.
-   *)
-
-
-(***************************** Iterators ********************************)
-
-val find : ?deeply:bool -> 
-           f:('ext node -> bool) -> 'ext node -> 'ext node
-  (* Searches the first node for which the predicate f is true, and returns
-   * it. Raises Not_found if there is no such node.
-   * By default, ~deeply=false. In this case, only the children of the
-   * passed node are searched.
-   * If passing ~deeply=true, the children are searched recursively
-   * (depth-first search).
-   *)
-
-val find_all : ?deeply:bool ->
-               f:('ext node -> bool) -> 'ext node -> 'ext node list
-  (* Searches all nodes for which the predicate f is true, and returns them.
-   * By default, ~deeply=false. In this case, only the children of the
-   * passed node are searched.
-   * If passing ~deeply=true, the children are searched recursively
-   * (depth-first search).
-   *)
-
-val find_element : ?deeply:bool ->
-                   string -> 'ext node -> 'ext node
-  (* Searches the first element with the passed element type.
-   * By default, ~deeply=false. In this case, only the children of the
-   * passed node are searched.
-   * If passing ~deeply=true, the children are searched recursively
-   * (depth-first search).
-   *)
-
-val find_all_elements : ?deeply:bool ->
-                        string -> 'ext node -> 'ext node list
-  (* Searches all elements with the passed element type.
-   * By default, ~deeply=false. In this case, only the children of the
-   * passed node are searched.
-   * If passing ~deeply=true, the children are searched recursively
-   * (depth-first search).
-   *)
-
-exception Skip
-val map_tree :  pre:('exta node -> 'extb node) ->
-               ?post:('extb node -> 'extb node) ->
-               'exta node -> 
-                   'extb node
-  (* Traverses the passed node and all children recursively. After entering
-   * a node, the function ~pre is called. The result of this function must
-   * be a new node; it must not have children nor a parent (you can simply
-   * pass (fun n -> n # orphaned_flat_clone) as ~pre).
-   * After that, the children are processed in the same way (from left to
-   * right); the results of the transformation will be added to the
-   * new node as new children.
-   * Now, the ~post function is invoked with this node as argument, and
-   * the result is the result of the function (~post should return a root
-   * node, too; if not specified, the identity is the ~post function).
-   * Both ~pre and ~post may raise Skip, which causes that the node is
-   * left out. If the top node is skipped, the exception Not_found is
-   * raised.
-   *)
-
-val map_tree_sibl : 
-        pre: ('exta node option -> 'exta node -> 'exta node option -> 
-                  'extb node) ->
-       ?post:('extb node option -> 'extb node -> 'extb node option -> 
-                  'extb node) ->
-       'exta node -> 
-           'extb node
-   (* Works like map_tree, but the function ~pre and ~post have additional
-    * arguments:
-    * - ~pre l n r: The node n is the node to map, and l is the previous
-    *   node, and r is the next node (both None if not present). l and r
-    *   are both nodes before the transformation.
-    * - ~post l n r: The node n is the node which is the result of ~pre
-    *   plus adding children. l and r are again the previous and the next
-    *   node, respectively, but after being transformed.
-    *)
-
-val iter_tree : ?pre:('ext node -> unit) ->
-                ?post:('ext node -> unit) ->
-                'ext node -> 
-                    unit
-   (* Iterates only instead of mapping the nodes. *)
-
-val iter_tree_sibl :
-       ?pre: ('ext node option -> 'ext node -> 'ext node option -> unit) ->
-       ?post:('ext node option -> 'ext node -> 'ext node option -> unit) ->
-       'ext node -> 
-           unit
-   (* Iterates only instead of mapping the nodes. *)
-
-
-(******************************* document ********************************)
-
-
-class [ 'ext ] document :
-  Pxp_types.collect_warnings -> 
-  object
-    (* Documents: These are containers for root elements and for DTDs.
-     * 
-     * Important invariant: A document is either empty (no root element,
-     * no DTD), or it has both a root element and a DTD.
-     *
-     * A fresh document created by 'new' is empty.
-     *)
-
-    method init_xml_version : string -> unit
-       (* Set the XML version string of the XML declaration. *)
-
-    method init_root : 'ext node -> unit
-       (* Set the root element. It is expected that the root element has
-        * a DTD.
-        * Note that 'init_root' checks whether the passed root element
-        * has the type expected by the DTD. The check takes into account
-        * that the root element might be a virtual root node.
-        *)
-
-    method xml_version : string
-      (* Returns the XML version from the XML declaration. Returns "1.0"
-       * if the declaration is missing.
-       *)
-
-    method xml_standalone : bool
-      (* Returns whether this document is declared as being standalone.
-       * This method returns the same value as 'standalone_declaration'
-       * of the DTD (if there is a DTD).
-       * Returns 'false' if there is no DTD.
-       *)
-
-    method dtd : dtd
-      (* Returns the DTD of the root element. 
-       * Fails if there is no root element.
-       *)
-
-    method encoding : Pxp_types.rep_encoding
-      (* Returns the string encoding of the document = the encoding of
-       * the root element = the encoding of the element tree = the
-       * encoding of the DTD.
-       * Fails if there is no root element.
-       *)
-
-    method root : 'ext node
-      (* Returns the root element, or fails if there is not any. *)
-
-    method add_pinstr : proc_instruction -> unit
-      (* Adds a processing instruction to the document container.
-       * The parser does this for PIs occurring outside the DTD and outside
-       * the root element.
-       *)
-
-    method pinstr : string -> proc_instruction list
-      (* Return all PIs for a passed target string. *)
-
-    method pinstr_names : string list
-      (* Return all target strings of all PIs. *)
-
-    method write : Pxp_types.output_stream -> Pxp_types.encoding -> unit
-      (* Write the document to the passed
-       * output stream; the passed encoding used. The format
-       * is compact (the opposite of "pretty printing").
-       * If a DTD is present, the DTD is included into the internal subset.
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -> unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-
-  end
-;;
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.10  2000/08/30 15:47:37  gerd
- *     New method node_path.
- *     New function compare.
- *     New type ord_index with functions.
- *
- * Revision 1.9  2000/08/26 23:27:53  gerd
- *     New function: make_spec_from_alist.
- *     New iterators: find, find_all, find_element, find_all_elements,
- * map_tree, map_tree_sibl, iter_tree, iter_tree_sibl.
- *     New node methods: node_position, nth_node, previous_node,
- * next_node.
- *     Attribute and namespace types have now a string argument:
- * the name/prefix. I hope this simplifies the handling of view nodes.
- *     First implementation of view nodes: attribute_impl. The
- * method attributes_as_nodes returns the attributes wrapped into
- * T_attribute nodes which reside outside the document tree.
- *
- * Revision 1.8  2000/08/18 20:14:00  gerd
- *     New node_types: T_super_root, T_pinstr, T_comment, (T_attribute),
- * (T_none), (T_namespace).
- *
- * Revision 1.7  2000/07/23 02:16:34  gerd
- *     Support for DFAs.
- *
- * Revision 1.6  2000/07/16 16:34:41  gerd
- *     New method 'write', the successor of 'write_compact_as_latin1'.
- *
- * Revision 1.5  2000/07/14 13:56:11  gerd
- *     Added methods id_attribute_name, id_attribute_value,
- * idref_attribute_names.
- *
- * Revision 1.4  2000/07/09 17:51:14  gerd
- *     Element nodes can store positions.
- *
- * Revision 1.3  2000/07/04 22:05:10  gerd
- *     New functions make_spec_from_mapping, create_data_node,
- * create_element_node.
- *
- * Revision 1.2  2000/06/14 22:19:06  gerd
- *     Added checks such that it is impossible to mix encodings.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_document.mli:
- *
- * Revision 1.13  2000/05/27 19:15:08  gerd
- *     Removed the method init_xml_standalone.
- *
- * Revision 1.12  2000/05/01 20:42:34  gerd
- *         New method write_compact_as_latin1.
- *
- * Revision 1.11  2000/04/30 18:15:57  gerd
- *     Beautifications.
- *     New method keep_always_whitespace_mode.
- *
- * Revision 1.10  2000/03/11 22:58:15  gerd
- *     Updated to support Markup_codewriter.
- *
- * Revision 1.9  2000/01/27 21:51:56  gerd
- *     Added method 'attributes'.
- *
- * Revision 1.8  2000/01/27 21:19:07  gerd
- *     Added further methods.
- *
- * Revision 1.7  1999/11/09 22:20:14  gerd
- *     Removed method init_dtd from class "document". The DTD is
- * implicitly passed to the document by the root element.
- *
- * Revision 1.6  1999/09/01 22:51:40  gerd
- *     Added methods to store processing instructions.
- *
- * Revision 1.5  1999/09/01 16:19:57  gerd
- *     The "document" class has now a "warner" as class argument.
- *
- * Revision 1.4  1999/08/19 21:59:13  gerd
- *     Added method "reset_finder".
- *
- * Revision 1.3  1999/08/19 01:08:29  gerd
- *     Added method "find".
- *
- * Revision 1.2  1999/08/15 02:19:41  gerd
- *     Some new explanations: That unknown elements are not rejected
- * if the DTD allows them.
- *
- * Revision 1.1  1999/08/10 00:35:51  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_dtd.ml b/helm/DEVEL/pxp/pxp/pxp_dtd.ml
deleted file mode 100644 (file)
index ee62c4f..0000000
+++ /dev/null
@@ -1,1090 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-open Pxp_types
-open Pxp_lexer_types
-open Pxp_lexers
-open Pxp_entity
-open Pxp_aux
-open Pxp_dfa
-
-(**********************************************************************)
-
-class dtd  the_warner init_encoding =
-  object (self)
-    val mutable root = (None : string option)
-    val mutable id =   (None : dtd_id option)
-
-    val warner       = (the_warner : collect_warnings)
-    val encoding     = init_encoding
-    val lexerset     = Pxp_lexers.get_lexer_set init_encoding
-
-    val elements     = (Hashtbl.create 100 : (string,dtd_element) Hashtbl.t)
-    val gen_entities = (Hashtbl.create 100 : (string,entity * bool) Hashtbl.t)
-    val par_entities = (Hashtbl.create 100 : (string,entity) Hashtbl.t)
-    val notations    = (Hashtbl.create 100 : (string,dtd_notation) Hashtbl.t)
-    val pinstr       = (Hashtbl.create 100 : (string,proc_instruction) Hashtbl.t)
-    val mutable element_names = []
-    val mutable gen_entity_names = []
-    val mutable par_entity_names = []
-    val mutable notation_names = []
-    val mutable pinstr_names = []
-
-    val mutable allow_arbitrary = false
-    val mutable standalone_declaration = false
-
-    val mutable validated = false
-
-    initializer
-    let w = new drop_warnings in
-    self # add_gen_entity 
-      (new internal_entity self "lt"   w "&#38;#60;" false false false encoding)
-      false;
-    self # add_gen_entity 
-      (new internal_entity self "gt"   w "&#62;"     false false false encoding)
-      false;
-    self # add_gen_entity 
-      (new internal_entity self "amp"  w "&#38;#38;" false false false encoding)
-      false;
-    self # add_gen_entity 
-      (new internal_entity self "apos" w "&#39;"     false false false encoding)
-      false;
-    self # add_gen_entity 
-      (new internal_entity self "quot" w "&#34;"     false false false encoding)
-      false;
-
-
-    method encoding = encoding
-
-    method warner = warner
-
-    method set_root r =
-      if root = None then
-       root <- Some r
-      else
-       assert false
-
-
-    method set_id j =
-      if id = None then
-       id <- Some j
-      else
-       assert false
-
-
-    method standalone_declaration = standalone_declaration
-
-    method set_standalone_declaration b =
-      standalone_declaration <- b
-
-    method allow_arbitrary =
-      allow_arbitrary <- true
-
-    method disallow_arbitrary =
-      allow_arbitrary <- false
-
-    method arbitrary_allowed = allow_arbitrary
-
-    method root = root
-    method id = id
-
-
-    method add_element el =
-      (* raises Not_found if 'el' has already been added *)
-      (* Note: 'el' is encoded in the same way as 'self'! *)
-      let name = el # name in
-      check_name warner name;
-      if Hashtbl.mem elements name then
-       raise Not_found;
-      Hashtbl.add elements name el;
-      element_names <- name :: element_names;
-      validated <- false
-
-
-    method add_gen_entity en extdecl =
-      (* The following is commented out; perhaps there should be an option
-       * to reactivate it on demand
-       *)
-      (* raises Validation_error if the predefines entities 'lt', 'gt', 'amp',
-       * 'quot', and 'apos' are redeclared with an improper value.
-       *)
-      if en # encoding <> encoding then
-       failwith "Pxp_dtd.dtd # add_gen_entity: Inconsistent encodings";
-      let name = en # name in
-      check_name warner name;
-      if Hashtbl.mem gen_entities name then begin
-       if List.mem name [ "lt"; "gt"; "amp"; "quot"; "apos" ] then begin
-         (* These are allowed to be declared several times *)
-         let (rt,_) = en # replacement_text in
-         let toks = tokens_of_content_string lexerset rt in
-         try
-           begin match toks with
-             [CRef 60]       -> if name <> "lt"   then raise Not_found
-           | [CharData ">"]  -> if name <> "gt"   then raise Not_found
-           | [CRef 62]       -> if name <> "gt"   then raise Not_found
-           | [CRef 38]       -> if name <> "amp"  then raise Not_found
-           | [CharData "'"]  -> if name <> "apos" then raise Not_found
-           | [CRef 39]       -> if name <> "apos" then raise Not_found
-           | [CharData "\""] -> if name <> "quot" then raise Not_found
-           | [CRef 34]       -> if name <> "quot" then raise Not_found
-           | _               -> raise Not_found
-           end
-         with
-             Not_found ->
-               raise (Validation_error("Predefined entity `" ^ name ^
-                                       "' redeclared"))
-       end
-       else
-         warner # warn ("Entity `" ^ name ^ "' declared twice")
-      end
-      else begin
-       Hashtbl.add gen_entities name (en, extdecl);
-       gen_entity_names <- name :: gen_entity_names
-      end
-
-
-    method add_par_entity en =
-      if en # encoding <> encoding then
-       failwith "Pxp_dtd.dtd # add_par_entity: Inconsistent encodings";
-      let name = en # name in
-      check_name warner name;
-      if not (Hashtbl.mem par_entities name) then begin
-       Hashtbl.add par_entities name en;
-       par_entity_names <- name :: par_entity_names
-      end
-      else
-       warner # warn ("Entity `" ^ name ^ "' declared twice")
-
-
-    method add_notation no =
-      (* raises Validation_error if 'no' already added *)
-      if no # encoding <> encoding then
-       failwith "Pxp_dtd.dtd # add_notation: Inconsistent encodings";
-      let name = no # name in
-      check_name warner name;
-      if Hashtbl.mem notations name then
-       raise (Validation_error("Notation `" ^ name ^ "' declared twice"));
-      Hashtbl.add notations name no;
-      notation_names <- name :: notation_names
-
-
-    method add_pinstr pi =
-      if pi # encoding <> encoding then
-       failwith "Pxp_dtd.dtd # add_pinstr: Inconsistent encodings";
-      let name = pi # target in
-      check_name warner name;
-
-      if String.length name >= 4 && String.sub name 0 4 = "pxp:" then begin
-       match name with
-           "pxp:dtd" -> 
-             let _, optname, atts = pi # parse_pxp_option in
-             begin match optname with
-                 "optional-element-and-notation-declarations" ->
-                   self # allow_arbitrary
-               | "optional-attribute-declarations" ->
-                   let lexers = Pxp_lexers.get_lexer_set encoding in
-                   let el_string = 
-                     try List.assoc "elements" atts
-                     with Not_found ->
-                       raise(Error("Missing `elements' attribute for pxp:dtd"))
-                   in
-                   let el = split_attribute_value lexers el_string in
-                   List.iter
-                     (fun e_name ->
-                        let e =
-                          try Hashtbl.find elements e_name
-                          with
-                              Not_found ->
-                                raise(Error("Reference to unknown element `" ^
-                                            e_name ^ "'"))
-                        in
-                        e # allow_arbitrary
-                     )
-                     el
-               | _ ->
-                   raise(Error("Unknown PXP option `" ^ 
-                               optname ^ "'"))
-             end
-         | _ ->
-             raise(Error("The processing instruction target `" ^ 
-                         name ^ "' is not defined by this PXP version"))
-      end
-      else begin
-       (*----------------------------------------------------------------------
-        * SUPPORT FOR DEPRECATED PI OPTIONS:
-        * - <?xml:allow_undeclared_elements_and_notations?>
-        *   is now <?pxp:dtd optional-element-and-notation-declarations?>
-        * - <?xml:allow_undeclared_attributes <elementname>?>
-        *   is now <?pxp:dtd optional-attribute-declarations 
-        *            elements='<elementname> ...'?>
-        * Please update your DTDs! Alternatively, you may uncommment the
-        * following piece of code.
-        *)
-(*         if name = "xml:allow_undeclared_elements_and_notations" then *)
-(*           self # allow_arbitrary; *)
-(*         if name = "xml:allow_undeclared_attributes" then begin *)
-(*           let v = pi # value in *)
-(*           let e =  *)
-(*             try *)
-(*               Hashtbl.find elements v *)
-(*             with *)
-(*                 Not_found -> *)
-(*                   raise(Validation_error("Reference to undeclared element `"*)
-(*                   ^ v ^ "'")) *)
-(*           in *)
-(*           e # allow_arbitrary; *)
-(*         end; *)
-       (*----------------------------------------------------------------------
-        *)
-       ()
-      end;
-      Hashtbl.add pinstr name pi;
-      pinstr_names <- name :: pinstr_names;
-
-
-    method element name =
-      (* returns the element 'name' or raises Validation_error if not found *)
-      try
-       Hashtbl.find elements name
-      with
-         Not_found ->
-           if allow_arbitrary then
-             raise Undeclared
-           else
-             raise(Validation_error("Reference to undeclared element `" ^ name ^ "'"))
-
-    method element_names =
-      (* returns the list of all names of element declarations *)
-      element_names
-
-
-    method gen_entity name =
-      (* returns the entity 'name' or raises WF_error if not found *)
-      try
-       Hashtbl.find gen_entities name
-      with
-         Not_found ->
-           raise(WF_error("Reference to undeclared general entity `" ^ name ^ "'"))
-
-
-    method gen_entity_names = gen_entity_names
-
-
-    method par_entity name =
-      (* returns the entity 'name' or raises WF_error if not found *)
-      try
-       Hashtbl.find par_entities name
-      with
-         Not_found ->
-           raise(WF_error("Reference to undeclared parameter entity `" ^ name ^ "'"))
-
-
-    method par_entity_names = par_entity_names
-
-
-    method notation name =
-      (* returns the notation 'name' or raises Validation_error if not found *)
-      try
-       Hashtbl.find notations name
-      with
-         Not_found ->
-           if allow_arbitrary then
-             raise Undeclared
-           else
-             raise(Validation_error("Reference to undeclared notation `" ^ name ^ "'"))
-
-
-    method notation_names = notation_names
-
-
-    method pinstr name =
-      (* returns the list of all processing instructions contained in the DTD
-       * with target 'name'
-       *)
-      Hashtbl.find_all pinstr name
-
-
-    method pinstr_names = pinstr_names
-
-    method write os enc doctype = 
-      let wms = 
-       write_markup_string ~from_enc:encoding ~to_enc:enc os in
-
-      let write_sysid s =
-       if String.contains s '"' then
-         wms ("'" ^ s ^ "'")
-       else
-         wms ("\"" ^ s ^ "\"");
-      in
-
-      if doctype then begin
-       wms "<!DOCTYPE ";
-       ( match root with
-           None -> failwith "#write: DTD without root";
-         | Some r -> wms r
-       );
-       wms " [\n";
-      end;
-
-      (* Notations: *)
-      List.iter
-       (fun name ->
-          let notation = 
-            try Hashtbl.find notations name with Not_found -> assert false in
-          notation # write os enc)
-       (List.sort compare notation_names);
-
-      (* Unparsed entities: *)
-      List.iter
-       (fun name ->
-          let ent,_ = 
-            try Hashtbl.find gen_entities name with Not_found -> assert false 
-          in
-          if ent # is_ndata then begin
-            let xid = ent # ext_id in
-            let notation = ent # notation in
-            wms ("<!ENTITY " ^ name ^ " " );
-            ( match xid with
-                  System s ->
-                    wms "SYSTEM ";
-                    write_sysid s;
-                | Public (p,s) ->
-                    wms "PUBLIC ";
-                    write_sysid p;
-                    if (s <> "") then begin
-                      wms " ";
-                      write_sysid s;
-                    end;
-                | Anonymous ->
-                    failwith "#write: External ID Anonymous cannot be represented"
-            );
-            wms (" NDATA " ^ notation ^ ">\n");
-          end
-       )
-       (List.sort compare gen_entity_names);
-
-      (* Elements: *)
-      List.iter
-       (fun name ->
-          let element = 
-            try Hashtbl.find elements name with Not_found -> assert false in
-          element # write os enc)
-       (List.sort compare element_names);
-
-      (* Processing instructions: *)
-      List.iter
-       (fun name ->
-          let pi = 
-            try Hashtbl.find pinstr name with Not_found -> assert false in
-          pi # write os enc)
-       (List.sort compare pinstr_names);
-
-      if doctype then 
-       wms "]>\n";
-
-    method write_compact_as_latin1 os doctype = 
-      self # write os `Enc_iso88591 doctype
-
-
-
-    (************************************************************)
-    (*                    VALIDATION                            *)
-    (************************************************************)
-
-    method only_deterministic_models =
-      Hashtbl.iter
-       (fun n el ->
-          let cm = el # content_model in
-          match cm with
-              Regexp _ ->
-                if el # content_dfa = None then
-                  raise(Validation_error("The content model of element `" ^
-                                         n ^ "' is not deterministic"))
-            | _ ->
-                ()
-       )
-       elements;
-      
-
-    method validate =
-      if validated or allow_arbitrary then
-       ()
-      else begin
-       (* Validity constraint: Notations in NDATA entity declarations must
-        * be declared
-        *)
-       List.iter
-         (fun name ->
-            let ent,_ = 
-              try Hashtbl.find gen_entities name with Not_found -> assert false 
-            in
-            if ent # is_ndata then begin
-              let xid = ent # ext_id in
-              let notation = ent # notation in
-              try
-                ignore(self # notation notation)
-                  (* Raises Validation_error if the constraint is violated *)
-              with
-                  Undeclared -> ()
-            end
-         )
-         gen_entity_names;
-
-       (* Validate the elements: *)
-       Hashtbl.iter
-         (fun n el ->
-            el # validate)
-         elements;
-
-       (* Check the root element: *)
-       (* TODO: Check if this piece of code is executed at all! *)
-       begin match root with
-           None -> ()
-         | Some r ->
-             begin try
-               let _ = Hashtbl.find elements r in ()
-             with
-                 Not_found ->
-                   raise(Validation_error("The root element is not declared"))
-             end
-       end;
-       validated <- true;
-      end
-
-    method invalidate =
-      validated <- false
-
-    (************************************************************)
-
-  end
-
-
-(**********************************************************************)
-
-and dtd_element the_dtd the_name =
-  object (self)
-    val dtd = (the_dtd : dtd)
-    val name = the_name
-    val lexerset = Pxp_lexers.get_lexer_set (the_dtd # encoding)
-    val mutable content_model = Unspecified
-    val mutable content_model_validated = false
-    val mutable content_dfa = lazy None
-
-    val mutable externally_declared = false
-
-    val mutable attributes = 
-           ([] : (string * ((att_type * att_default) * bool)) list)
-    val mutable attributes_validated = false
-
-    val mutable id_att_name = None
-    val mutable idref_att_names = []
-
-    val mutable allow_arbitrary = false
-
-    method name = name
-
-    method set_cm_and_extdecl m extdecl =
-      if content_model = Unspecified then begin
-       content_model <- m;
-       content_model_validated <- false;
-       content_dfa <- lazy (self # compute_content_dfa);
-       externally_declared <- extdecl;
-       dtd # invalidate
-      end
-      else
-       raise(Validation_error("Element `" ^ name ^ "' has already a content model"))
-
-    method content_model = content_model
-
-    method content_dfa = Lazy.force content_dfa
-      
-    method private compute_content_dfa =
-      match content_model with
-         Regexp re ->
-           ( try Some (dfa_of_regexp_content_model re)
-             with Not_found -> None
-           )
-       | _ ->
-           None
-
-    method externally_declared = externally_declared
-
-    method encoding = dtd # encoding
-
-    method allow_arbitrary =
-      allow_arbitrary <- true
-
-    method disallow_arbitrary =
-      allow_arbitrary <- false
-
-    method arbitrary_allowed = allow_arbitrary
-
-    method add_attribute aname t d extdecl =
-      if aname <> "xml:lang" & aname <> "xml:space" then
-       check_name (dtd#warner) aname;
-      if List.mem_assoc aname attributes then
-       dtd # warner # warn ("More than one declaration for attribute `" ^
-                            aname ^ "' of element type `" ^ name ^ "'")
-      else begin
-       begin match aname with
-           "xml:space" ->
-             begin match t with
-                 A_enum l ->
-                   let l' = Sort.list ( <= ) l in
-                   if l' <> [ "default"; "preserve" ] then
-                     raise(Validation_error("Declaration of attribute `xml:space' does not conform to XML specification"))
-               | _ ->
-                   raise(Validation_error("Declaration of attribute `xml:space' does not conform to XML specification"))
-             end
-         | _ -> ()
-       end; 
-       begin match t with
-           A_id ->
-             id_att_name <- Some aname;
-         | (A_idref | A_idrefs) ->
-             idref_att_names <- aname :: idref_att_names
-         | _ ->
-             ()
-       end;
-       attributes <- (aname, ((t,d),extdecl)) :: attributes;
-       attributes_validated <- false;
-       dtd # invalidate;
-      end
-
-    method attribute attname =
-      try
-       fst (List.assoc attname attributes)
-      with
-         Not_found ->
-           if allow_arbitrary then
-             raise Undeclared
-           else
-             raise(Validation_error("Attribute `" ^ attname ^ "' of element `"
-                                    ^ name ^ "' not declared"))
-
-    method attribute_violates_standalone_declaration attname v =
-      try
-       let (atype, adefault), extdecl = List.assoc attname attributes in
-       extdecl &&
-       ( match v with
-             None -> 
-               adefault <> D_required && adefault <> D_implied
-               (* i.e. adefault matches D_default or D_fixed *)
-           | Some s ->
-               atype <> A_cdata &&
-               normalization_changes_value lexerset atype s
-       )
-      with
-         Not_found ->
-           if allow_arbitrary then
-             raise Undeclared
-           else
-             raise(Validation_error("Attribute `" ^ attname ^ "' of element `"
-                                    ^ name ^ "' not declared"))
-
-
-    method attribute_names =
-      List.map fst attributes
-
-    method names_of_required_attributes =
-      List.flatten
-       (List.map
-          (fun (n,((t,d),_)) ->
-             if d = D_required then
-               [n]
-             else
-               [])
-          attributes)
-
-    method id_attribute_name = id_att_name
-
-    method idref_attribute_names = idref_att_names
-
-
-    method write os enc = 
-      let encoding = self # encoding in
-      let wms = 
-       write_markup_string ~from_enc:encoding ~to_enc:enc os in
-
-      let rec write_contentspec cs =
-       match cs with
-           Unspecified ->
-             failwith "#write: Unspecified content model found"
-         | Empty ->
-             wms "EMPTY"
-         | Any ->
-             wms "ANY"
-         | Mixed ml ->
-             wms "(";
-             write_mixedspec_list ml;
-             wms ")*";
-         | Regexp re ->
-             write_children re false
-
-      and write_mixedspec_list ml =
-       match ml with
-           MPCDATA :: ml' ->
-             wms "#PCDATA";
-             if ml' <> [] then wms "|";
-             write_mixedspec_list ml';
-         | MChild s :: ml' ->
-             wms s;
-             if ml' <> [] then wms "|";
-             write_mixedspec_list ml';
-         | [] ->
-             ()
-
-      and write_children re cp =
-       match re with
-           Optional re' ->
-             let p = needs_parens re' in
-             if p then wms "(";
-             write_children re' cp;
-             if p then wms ")";
-             wms "?";
-         | Repeated re' ->
-             let p = needs_parens re' in
-             if p then wms "(";
-             write_children re' cp;
-             if p then wms ")";
-             wms "*";
-         | Repeated1 re' ->
-             let p = needs_parens re' in
-             if p then wms "(";
-             write_children re' cp;
-             if p then wms ")";
-             wms "+";
-         | Alt re' ->
-             wms "(";
-             ( match re' with
-                   re1' :: rer' ->
-                     write_children re1' true;
-                     List.iter
-                       (fun ren' ->
-                          wms "|";
-                          write_children ren' true;
-                       )
-                       rer';
-                 | [] ->
-                     failwith "#write: Illegal content model"
-             );
-             wms ")";
-         | Seq re' ->
-             wms "(";
-             ( match re' with
-                   re1' :: rer' ->
-                     write_children re1' true;
-                     List.iter
-                       (fun ren' ->
-                          wms ",";
-                          write_children ren' true;
-                       )
-                       rer';
-                 | [] ->
-                     failwith "#write: Illegal content model"
-             );
-             wms ")";
-         | Child ch ->
-             if not cp then wms "(";
-             wms ch;
-             if not cp then wms ")";
-
-      and needs_parens re =
-       match re with
-           (Optional _ | Repeated _ | Repeated1 _ ) -> true
-         | _ -> false
-      in
-
-      wms ("<!ELEMENT " ^ name ^ " ");
-      write_contentspec content_model;
-      wms ">\n";
-
-      wms ("<!ATTLIST " ^ name);
-      List.iter
-       (fun (n,((t,d),_)) ->
-          wms ("\n  " ^ n);
-          ( match t with
-                A_cdata       -> wms " CDATA";
-              | A_id          -> wms " ID";
-              | A_idref       -> wms " IDREF";
-              | A_idrefs      -> wms " IDREFS";
-              | A_entity      -> wms " ENTITY";
-              | A_entities    -> wms " ENTITIES";
-              | A_nmtoken     -> wms " NMTOKEN";
-              | A_nmtokens    -> wms " NMTOKENS";
-              | A_notation nl -> 
-                  wms " NOTATION (";
-                  ( match nl with
-                        nl1:: nl' ->
-                          wms nl1;
-                          List.iter
-                            (fun n ->
-                               wms ("|" ^ n);
-                            )
-                            nl'
-                      | [] ->
-                          failwith "#write: Illegal content model";
-                  );
-                  wms ")";
-              | A_enum el     ->
-                  wms " (";
-                  ( match el with
-                        el1:: el' ->
-                          wms el1;
-                          List.iter
-                            (fun e ->
-                               wms ("|" ^ e);
-                            )
-                            el'
-                      | [] ->
-                          failwith "#write: Illegal content model";
-                  );
-                  wms ")";
-          );
-          ( match d with
-                D_required -> wms " #REQUIRED"
-              | D_implied  -> wms " #IMPLIED"
-              | D_default s ->
-                  wms " \"";
-                  write_data_string ~from_enc:encoding ~to_enc:enc os s;
-                  wms "\"";
-              | D_fixed s ->
-                  wms " FIXED \"";
-                  write_data_string ~from_enc:encoding ~to_enc:enc os s;
-                  wms "\"";
-          );
-       )
-       attributes;
-
-      wms ">\n";
-
-    method write_compact_as_latin1 os = 
-      self # write os `Enc_iso88591
-
-    (************************************************************)
-    (*                    VALIDATION                            *)
-    (************************************************************)
-
-    method validate =
-      self # validate_attributes();
-      self # validate_content_model()
-
-    method private validate_attributes() =
-      if attributes_validated then
-       ()
-      else begin
-       (* Validity Constraint: One ID per Element Type *)
-       let n = count (fun (n,((t,d),_)) -> t = A_id) attributes in
-       if n > 1 then
-         raise(Validation_error("More than one ID attribute for element `" ^ name ^ "'"));
-       (* Validity Constraint: ID Attribute Default *)
-       if List.exists
-            (fun (n,((t,d),_)) ->
-               t = A_id & (d <> D_required & d <> D_implied))
-            attributes
-       then
-         raise(Validation_error("ID attribute must be #IMPLIED or #REQUIRED; element `" ^ name ^ "'"));
-       (* Validity Constraint: One Notation per Element Type *)
-       let n = count (fun (n,((t,d),_)) ->
-                        match t with A_notation _ -> true | _ -> false)
-                     attributes in
-       if n > 1 then
-         raise(Validation_error("More than one NOTATION attribute for element `" ^ name ^ "'"));
-       (* Validity Constraint: Notation Attributes [second part] *)
-       List.iter
-         (fun (n,((t,d),_)) ->
-            match t with
-                A_notation l ->
-                  List.iter
-                    (fun nname ->
-                       let _ = dtd # notation nname in ())
-                    l
-              | _ -> ())
-         attributes;
-       (* Validity Constraint: Attribute Default Legal *)
-       List.iter
-         (fun (n,((t,d),_)) ->
-
-            let check v =
-              let lexical_error() =
-                lazy (raise(Validation_error("Default value for attribute `" ^ n ^ "' is lexically malformed"))) in
-              check_attribute_value_lexically lexerset (lexical_error()) t v;
-              begin match t with
-                  (A_entity|A_entities) ->
-                    List.iter
-                      (fun nd ->
-                         let en, extdecl = dtd # gen_entity nd in
-                         if not (en # is_ndata) then
-                           raise(Validation_error("Attribute default value must be the name of an NDATA entity; attribute `" ^ n ^ "' in declaration for element `" ^ name ^ "'"));
-(*                       if dtd # standalone_declaration && extdecl then
-                           raise(Validation_error("Attribute default value violates the standalone declaration; attribute `" ^ n ^ "' in declaration for element `" ^ name ^ "'")); 
--- This is checked anyway when the attribute value is normalized
-*)
-                      )
-                      (split_attribute_value lexerset v)
-                | A_notation nl ->
-                    if not (List.mem v nl) then
-                      raise(Validation_error("Illegal default value for attribute `" ^ n ^ "' in declaration for element `" ^ name ^ "'"));
-                | A_enum nl ->
-                    if not (List.mem v nl) then
-                      raise(Validation_error("Illegal default value for attribute `" ^ n ^ "' in declaration for element `" ^ name ^ "'"));
-                | _          -> ()
-              end
-            in
-
-            match d with
-                D_required -> ()
-              | D_implied -> ()
-              | D_default v -> check v
-              | D_fixed v   -> check v
-         )
-         attributes;
-
-       (* Ok: This element declaration is valid *)
-       attributes_validated <- true;
-
-      end
-
-    method private validate_content_model () =
-      (* checks:
-       * - Validity Constraint: No Duplicate Types
-       * It is not an error if there is a child in the declaration for which
-       * no element declaration is provided.
-       *)
-      match content_model with
-         Unspecified ->
-           dtd # warner # warn ("Element type `" ^ name ^ "' mentioned but not declared");
-           ()
-       | Empty -> ()
-       | Any -> ()
-       | Mixed (pcdata :: l) ->
-           (* MPCDATA is always the first element by construction *)
-           assert (pcdata = MPCDATA);
-           if check_dups l then
-             raise (Validation_error("Double children in declaration for element `" ^ name ^ "'"))
-       | Regexp _ -> ()
-       | _ -> assert false
-
-
-
-    (************************************************************)
-
-  end
-
-and dtd_notation the_name the_xid init_encoding =
-object (self)
-    val name = the_name
-    val xid = (the_xid : ext_id)
-    val encoding = (init_encoding : Pxp_types.rep_encoding)
-    method name = name
-    method ext_id = xid
-    method encoding = encoding
-
-    method write os enc = 
-      let wms = 
-       write_markup_string ~from_enc:encoding ~to_enc:enc os in
-
-      let write_sysid s =
-       if String.contains s '"' then
-         wms ("'" ^ s ^ "'")
-       else
-         wms ("\"" ^ s ^ "\"");
-      in
-
-      wms ("<!NOTATION " ^ name ^ " ");
-      ( match xid with
-           System s ->
-             wms "SYSTEM ";
-             write_sysid s;
-         | Public (p,s) ->
-             wms "PUBLIC ";
-             write_sysid p;
-             if (s <> "") then begin
-               wms " ";
-               write_sysid s;
-             end;
-         | Anonymous ->
-             failwith "#write: External ID Anonymous cannot be represented"
-      );
-      wms ">\n";
-
-    method write_compact_as_latin1 os = 
-      self # write os `Enc_iso88591 
-
-  end
-
-and proc_instruction the_target the_value init_encoding =
-object (self)
-    val target = the_target
-    val value = (the_value : string)
-    val encoding = (init_encoding : Pxp_types.rep_encoding)
-
-    initializer
-      match target with
-         ("xml"|"xmL"|"xMl"|"xML"|"Xml"|"XmL"|"XMl"|"XML") ->
-           (* This is an error, not a warning, because I do not have a
-            * "warner" object by hand.
-            *)
-           raise(WF_error("Reserved processing instruction"))
-       | _ -> ()
-
-    method target = target
-    method value = value
-    method encoding = encoding
-
-    method write os enc = 
-      let wms = 
-       write_markup_string ~from_enc:encoding ~to_enc:enc os in
-
-      wms "<?";
-      wms target;
-      wms " ";
-      wms value;
-      wms "?>";
-
-    method write_compact_as_latin1 os = 
-      self # write os `Enc_iso88591
-
-    method parse_pxp_option =
-      let lexers = get_lexer_set encoding in
-      try
-       let toks = tokens_of_xml_pi lexers value in   (* may raise WF_error *)
-       begin match toks with
-           (Pro_name option_name) :: toks' ->
-             let atts = decode_xml_pi toks' in       (* may raise WF_error *)
-             (target, option_name, atts)
-         | _ ->
-             raise(Error("Bad PXP processing instruction"))
-       end
-      with
-         WF_error _ ->
-           raise(Error("Bad PXP processing instruction"))
-
-  end
-;;
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.10  2000/08/18 21:18:45  gerd
- *     Updated wrong comments for methods par_entity and gen_entity.
- * These can raise WF_error and not Validation_error, and this is the
- * correct behaviour.
- *
- * Revision 1.9  2000/07/25 00:30:01  gerd
- *     Added support for pxp:dtd PI options.
- *
- * Revision 1.8  2000/07/23 02:16:34  gerd
- *     Support for DFAs.
- *
- * Revision 1.7  2000/07/16 17:50:01  gerd
- *     Fixes in 'write'
- *
- * Revision 1.6  2000/07/16 16:34:41  gerd
- *     New method 'write', the successor of 'write_compact_as_latin1'.
- *
- * Revision 1.5  2000/07/14 13:56:48  gerd
- *     Added methods id_attribute_name and idref_attribute_names.
- *
- * Revision 1.4  2000/07/09 00:13:37  gerd
- *     Added methods gen_entity_names, par_entity_names.
- *
- * Revision 1.3  2000/07/04 22:10:55  gerd
- *     Update: collect_warnings -> drop_warnings.
- *     Update: Case ext_id = Anonymous.
- *
- * Revision 1.2  2000/06/14 22:19:06  gerd
- *     Added checks such that it is impossible to mix encodings.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- *
- * Revision 1.18  2000/05/28 17:24:55  gerd
- *     Bugfixes.
- *
- * Revision 1.17  2000/05/27 19:21:25  gerd
- *     Implemented the changes of rev. 1.10 of markup_dtd.mli.
- *
- * Revision 1.16  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.15  2000/05/14 21:50:07  gerd
- *     Updated: change in internal_entity.
- *
- * Revision 1.14  2000/05/06 23:08:46  gerd
- *     It is possible to allow undeclared attributes.
- *
- * Revision 1.13  2000/05/01 20:42:46  gerd
- *         New method write_compact_as_latin1.
- *
- * Revision 1.12  2000/05/01 15:16:57  gerd
- *     The errors "undeclared parameter/general entities" are
- * well-formedness errors, not validation errors.
- *
- * Revision 1.11  2000/03/11 22:58:15  gerd
- *     Updated to support Markup_codewriter.
- *
- * Revision 1.10  2000/01/20 20:53:47  gerd
- *     Changed such that it runs with Markup_entity's new interface.
- *
- * Revision 1.9  1999/11/09 22:15:41  gerd
- *     Added method "arbitrary_allowed".
- *
- * Revision 1.8  1999/09/01 22:52:22  gerd
- *     If 'allow_arbitrary' is in effect, no validation happens anymore.
- *
- * Revision 1.7  1999/09/01 16:21:24  gerd
- *     Added several warnings.
- *     The attribute type of "xml:space" is now strictly checked.
- *
- * Revision 1.6  1999/08/15 20:34:21  gerd
- *     Improved error messages.
- *     Bugfix: It is no longer allowed to create processing instructions
- * with target "xml".
- *
- * Revision 1.5  1999/08/15 02:20:16  gerd
- *     New feature: a DTD can allow arbitrary elements.
- *
- * Revision 1.4  1999/08/15 00:21:39  gerd
- *     Comments have been updated.
- *
- * Revision 1.3  1999/08/14 22:12:52  gerd
- *         Several functions have now a "warner" as argument which is
- * an object with a "warn" method. This is used to warn about characters
- * that cannot be represented in the Latin 1 alphabet.
- *     Bugfix: if two general entities with the same name are definied,
- * the first counts, not the second.
- *
- * Revision 1.2  1999/08/11 14:56:35  gerd
- *     Declaration of the predfined entities {lt,gt,amp,quot,apos}
- * is no longer forbidden; but the original definition cannot be overriddden.
- *     TODO: If these entities are redeclared with problematic values,
- * the user should be warned.
- *
- * Revision 1.1  1999/08/10 00:35:51  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_dtd.mli b/helm/DEVEL/pxp/pxp/pxp_dtd.mli
deleted file mode 100644 (file)
index 1c347fb..0000000
+++ /dev/null
@@ -1,476 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-(*$ markup-dtd1.mli *)
-
-(**********************************************************************)
-(*                                                                    *)
-(* Pxp_dtd:                                                           *)
-(*     Object model of document type declarations                     *)
-(*                                                                    *)
-(**********************************************************************)
-
-(* ======================================================================
- * OVERVIEW
- *
- * class dtd ............... represents the whole DTD, including element
- *                           declarations, entity declarations, notation
- *                           declarations, and processing instructions
- * class dtd_element ....... represents an element declaration consisting
- *                           of a content model and an attribute list
- *                           declaration
- * class dtd_notation ...... represents a notation declaration
- * class proc_instruction .. represents a processing instruction
- * ======================================================================
- *
- *)
-
-
-class dtd :
-  (* Creation:
-   *   new dtd
-   * creates a new, empty DTD object without any declaration, without a root
-   * element, without an ID.
-   *)
-  Pxp_types.collect_warnings -> 
-  Pxp_types.rep_encoding ->
-  object
-    method root : string option
-      (* get the name of the root element if present *)
-
-    method set_root : string -> unit
-      (* set the name of the root element. This method can be invoked 
-       * only once
-       *)
-
-    method id : Pxp_types.dtd_id option
-      (* get the identifier for this DTD *)
-
-    method set_id : Pxp_types.dtd_id -> unit
-      (* set the identifier. This method can be invoked only once *)
-
-    method encoding : Pxp_types.rep_encoding
-      (* returns the encoding used for character representation *)
-
-
-    method allow_arbitrary : unit
-      (* After this method has been invoked, the object changes its behaviour:
-       * - elements and notations that have not been added may be used in an
-       *   arbitrary way; the methods "element" and "notation" indicate this
-       *   by raising Undeclared instead of Validation_error.
-       *)
-
-    method disallow_arbitrary : unit
-
-    method arbitrary_allowed : bool
-      (* Returns whether arbitrary contents are allowed or not. *)
-
-    method standalone_declaration : bool
-      (* Whether there is a 'standalone' declaration or not. Strictly 
-       * speaking, this declaration is not part of the DTD, but it is
-       * included here because of practical reasons. 
-       * If not set, this property defaults to 'false'.
-       *)
-
-    method set_standalone_declaration : bool -> unit
-      (* Sets the 'standalone' declaration. *)
-
-
-    method add_element : dtd_element -> unit
-      (* add the given element declaration to this DTD. Raises Not_found
-       * if there is already an element declaration with the same name.
-       *)
-
-    method add_gen_entity : Pxp_entity.entity -> bool -> unit
-      (* add_gen_entity e extdecl:
-       * add the entity 'e' as general entity to this DTD (general entities
-       * are those represented by &name;). If there is already a declaration
-       * with the same name, the second definition is ignored; as exception from
-       * this rule, entities with names "lt", "gt", "amp", "quot", and "apos"
-       * may only be redeclared with a definition that is equivalent to the
-       * standard definition; otherwise a Validation_error is raised.
-       *
-       * 'extdecl': 'true' indicates that the entity declaration occurs in
-       * an external entity. (Used for the standalone check.)
-       *)
-
-    method add_par_entity : Pxp_entity.entity -> unit
-      (* add the given entity as parameter entity to this DTD (parameter
-       * entities are those represented by %name;). If there is already a 
-       * declaration with the same name, the second definition is ignored.
-       *)
-
-    method add_notation : dtd_notation -> unit
-      (* add the given notation to this DTD. If there is already a declaration
-       * with the same name, a Validation_error is raised.
-       *)
-
-    method add_pinstr : proc_instruction -> unit
-      (* add the given processing instruction to this DTD. *)
-
-    method element : string -> dtd_element
-      (* looks up the element declaration with the given name. Raises 
-       * Validation_error if the element cannot be found. (If "allow_arbitrary"
-       * has been invoked before, Unrestricted is raised instead.)
-       *)
-
-    method element_names : string list
-      (* returns the list of the names of all element declarations. *)
-
-    method gen_entity : string -> (Pxp_entity.entity * bool)
-      (* let e, extdecl = obj # gen_entity n:
-       * looks up the general entity 'e' with the name 'n'. Raises
-       * WF_error if the entity cannot be found.
-       * 'extdecl': indicates whether the entity declaration occured in an 
-       * external entity.
-       *)
-
-    method gen_entity_names : string list
-      (* returns the list of all general entity names *)
-
-    method par_entity : string -> Pxp_entity.entity
-      (* looks up the parameter entity with the given name. Raises
-       * WF_error if the entity cannot be found.
-       *)
-
-    method par_entity_names : string list
-      (* returns the list of all parameter entity names *)
-
-    method notation : string -> dtd_notation
-      (* looks up the notation declaration with the given name. Raises
-       * Validation_error if the notation cannot be found. (If "allow_arbitrary"
-       * has been invoked before, Unrestricted is raised instead.)
-       *)
-
-    method notation_names : string list
-      (* Returns the list of the names of all added notations *)
-
-    method pinstr : string -> proc_instruction list
-      (* looks up all processing instructions with the given target.
-       * The "target" is the identifier following "<?".
-       * Note: It is not possible to find out the exact position of the
-       * processing instruction.
-       *)
-
-    method pinstr_names : string list
-      (* Returns the list of the names (targets) of all added pinstrs *)
-
-    method validate : unit
-      (* ensures that the DTD is valid. This method is optimized such that
-       * actual validation is only performed if DTD has changed.
-       * If the DTD is invalid, mostly a Validation_error is raised,
-       * but other exceptions are possible, too.
-       *)
-
-    method only_deterministic_models : unit
-      (* Succeeds if all regexp content models are deterministic. 
-       * Otherwise Validation_error.
-       *)
-
-    method write : Pxp_types.output_stream -> Pxp_types.encoding -> bool -> unit
-      (* write_compact_as_latin1 os enc doctype:
-       * Writes the DTD as 'enc'-encoded string to 'os'. If 'doctype', a 
-       * DTD like <!DOCTYPE root [ ... ]> is written. If 'not doctype',
-       * only the declarations are written (the material within the
-       * square brackets).
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -> bool -> unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-
-
-    (*----------------------------------------*)
-    method invalidate : unit
-      (* INTERNAL METHOD *)
-    method warner : Pxp_types.collect_warnings
-      (* INTERNAL METHOD *)
-  end
-
-(*$-*)
-
-(*$ markup-dtd2.mli *)
-
-(* ---------------------------------------------------------------------- *)
-
-and dtd_element : dtd -> string -> 
-  (* Creation:
-   *   new dtd_element init_dtd init_name:
-   * creates a new dtd_element object for init_dtd with init_name.
-   * The strings are represented in the same encoding as init_dtd.
-   *)
-  object
-
-    method name : string
-      (* returns the name of the declared element *)
-
-    method externally_declared : bool
-      (* returns whether the element declaration occurs in an external
-       * entity.
-       *)
-
-    method content_model : Pxp_types.content_model_type
-      (* get the content model of this element declaration, or Unspecified *)
-
-    method content_dfa : Pxp_dfa.dfa_definition option
-      (* return the DFA of the content model if there is a DFA, or None.
-       * A DFA exists only for regexp style content models which are
-       * deterministic.
-       *)
-
-    method set_cm_and_extdecl : Pxp_types.content_model_type -> bool -> unit
-      (* set_cm_and_extdecl cm extdecl:
-       * set the content model to 'cm'. Once the content model is not 
-       * Unspecified, it cannot be set to a different value again.
-       * Furthermore, it is set whether the element occurs in an external
-       * entity ('extdecl').
-       *)
-
-    method encoding : Pxp_types.rep_encoding
-      (* Return the encoding of the strings *)
-
-    method allow_arbitrary : unit
-      (* After this method has been invoked, the object changes its behaviour:
-       * - attributes that have not been added may be used in an
-       *   arbitrary way; the method "attribute" indicates this
-       *   by raising Undeclared instead of Validation_error.
-       *)
-
-    method disallow_arbitrary : unit
-
-    method arbitrary_allowed : bool
-      (* Returns whether arbitrary attributes are allowed or not. *)
-
-    method attribute : string -> 
-                         Pxp_types.att_type * Pxp_types.att_default
-      (* get the type and default value of a declared attribute, or raise
-       * Validation_error if the attribute does not exist.
-       * If 'arbitrary_allowed', the exception Undeclared is raised instead
-       * of Validation_error.
-       *)
-
-    method attribute_violates_standalone_declaration : 
-               string -> string option -> bool
-      (* attribute_violates_standalone_declaration name v:
-       * Checks whether the attribute 'name' violates the "standalone"
-       * declaration if it has value 'v'.
-       * The method returns true if:
-       * - The attribute declaration occurs in an external entity, 
-       * and if one of the two conditions holds:
-       * - v = None, and there is a default for the attribute value
-       * - v = Some s, and the type of the attribute is not CDATA,
-       *   and s changes if normalized according to the rules of the
-       *   attribute type.
-       *
-       * The method raises Validation_error if the attribute does not exist.
-       * If 'arbitrary_allowed', the exception Undeclared is raised instead
-       * of Validation_error.
-       *)
-
-    method attribute_names : string list
-      (* get the list of all declared attributes *)
-
-    method names_of_required_attributes : string list
-      (* get the list of all attributes that are specified as required 
-       * attributes
-       *)
-
-    method id_attribute_name : string option
-      (* Returns the name of the attribute with type ID, or None. *)
-
-    method idref_attribute_names : string list
-      (* Returns the names of the attributes with type IDREF or IDREFS. *)
-
-    method add_attribute : string -> 
-                           Pxp_types.att_type -> 
-                          Pxp_types.att_default -> 
-                          bool ->
-                            unit
-      (* add_attribute name type default extdecl:
-       * add an attribute declaration for an attribute with the given name,
-       * type, and default value. If there is more than one declaration for
-       * an attribute name, the first declaration counts; the other declarations
-       * are ignored.
-       * 'extdecl': if true, the attribute declaration occurs in an external
-       * entity. This property is used to check the "standalone" attribute.
-       *)
-
-    method validate : unit
-      (* checks whether this element declaration (i.e. the content model and
-       * all attribute declarations) is valid for the associated DTD.
-       * Raises mostly Validation_error if the validation fails.
-       *)
-
-    method write : Pxp_types.output_stream -> Pxp_types.encoding -> unit
-      (* write_compact_as_latin1 os enc:
-       * Writes the <!ELEMENT ... > declaration to 'os' as 'enc'-encoded string.
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -> unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-  end
-
-(* ---------------------------------------------------------------------- *)
-
-and dtd_notation : string -> Pxp_types.ext_id -> Pxp_types.rep_encoding ->
-  (* Creation:
-   *    new dtd_notation a_name an_external_ID init_encoding
-   * creates a new dtd_notation object with the given name and the given
-   * external ID.
-   *)
-  object
-    method name : string
-    method ext_id : Pxp_types.ext_id
-    method encoding : Pxp_types.rep_encoding
-
-    method write : Pxp_types.output_stream -> Pxp_types.encoding -> unit
-      (* write_compact_as_latin1 os enc:
-       * Writes the <!NOTATION ... > declaration to 'os' as 'enc'-encoded 
-       * string.
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -> unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-
-  end
-
-(* ---------------------------------------------------------------------- *)
-
-and proc_instruction : string -> string -> Pxp_types.rep_encoding ->
-  (* Creation:
-   *   new proc_instruction a_target a_value
-   * creates a new proc_instruction object with the given target string and
-   * the given value string. 
-   * Note: A processing instruction is written as <?target value?>. 
-   *)
-  object
-    method target : string
-    method value : string
-    method encoding : Pxp_types.rep_encoding
-
-    method write : Pxp_types.output_stream -> Pxp_types.encoding -> unit
-      (* write os enc:
-       * Writes the <?...?> PI to 'os' as 'enc'-encoded string.
-       *)
-
-    method write_compact_as_latin1 : Pxp_types.output_stream -> unit
-      (* DEPRECATED METHOD; included only to keep compatibility with
-       * older versions of the parser
-       *)
-
-    method parse_pxp_option : (string * string * (string * string) list)
-      (* Parses a PI containing a PXP option. Such PIs are formed like:
-       *   <?target option-name option-att="value" option-att="value" ... ?>
-       * The method returns a triple
-       *   (target, option-name, [option-att, value; ...])
-       * or raises Error.
-       *)
-
-  end
-
-;;
-
-(*$-*)
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.8  2000/08/18 21:18:45  gerd
- *     Updated wrong comments for methods par_entity and gen_entity.
- * These can raise WF_error and not Validation_error, and this is the
- * correct behaviour.
- *
- * Revision 1.7  2000/07/25 00:30:01  gerd
- *     Added support for pxp:dtd PI options.
- *
- * Revision 1.6  2000/07/23 02:16:33  gerd
- *     Support for DFAs.
- *
- * Revision 1.5  2000/07/16 16:34:41  gerd
- *     New method 'write', the successor of 'write_compact_as_latin1'.
- *
- * Revision 1.4  2000/07/14 13:56:49  gerd
- *     Added methods id_attribute_name and idref_attribute_names.
- *
- * Revision 1.3  2000/07/09 00:13:37  gerd
- *     Added methods gen_entity_names, par_entity_names.
- *
- * Revision 1.2  2000/06/14 22:19:06  gerd
- *     Added checks such that it is impossible to mix encodings.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_dtd.ml:
- *
- * Revision 1.11  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.10  2000/05/27 19:20:38  gerd
- *     Changed the interfaces for the standalone check: New
- * methods: standalone_declaration, set_standalone_declaration,
- * externally_declared, attribute_violates_standalone_declaration.
- *     The method set_content_model has been renamed to
- * set_cm_and_extdecl; it now initializes also whether the element
- * has been declared in an external entity.
- *     Methods add_gen_entity and gen_entity pass an additional
- * boolean argument containing whether the declaration of the
- * general entity happened in an external entity.
- *     Method add_attribute expects this argument, too, which
- * states whether the declaration of the attribute happened in an
- * external entity.
- *
- * Revision 1.9  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.8  2000/05/06 23:10:26  gerd
- *     allow_arbitrary for elements, too.
- *
- * Revision 1.7  2000/05/01 20:42:52  gerd
- *         New method write_compact_as_latin1.
- *
- * Revision 1.6  2000/03/11 22:58:15  gerd
- *     Updated to support Markup_codewriter.
- *
- * Revision 1.5  2000/02/22 02:32:02  gerd
- *     Updated.
- *
- * Revision 1.4  1999/11/09 22:15:41  gerd
- *     Added method "arbitrary_allowed".
- *
- * Revision 1.3  1999/09/01 16:21:56  gerd
- *     "dtd" classes have now an argument that passes a "warner".
- *
- * Revision 1.2  1999/08/15 02:20:23  gerd
- *         New feature: a DTD can allow arbitrary elements.
- *
- * Revision 1.1  1999/08/10 00:35:51  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_entity.ml b/helm/DEVEL/pxp/pxp/pxp_entity.ml
deleted file mode 100644 (file)
index 94b21ae..0000000
+++ /dev/null
@@ -1,1292 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-
-(* TODO:
- * - Wie verhindert man, dass ein internal entity eine XML-Dekl. im 
- *   replacement text akzeptiert?
- *)
-
-
-open Pxp_types
-open Pxp_lexer_types
-open Pxp_aux
-open Pxp_reader
-
-(* Hierarchy of parsing layers:
- *
- * - Parser: Pxp_yacc
- *   + gets input stream from the main entity object
- *   + checks most of the grammar
- *   + creates the DTD object as side-effect
- *   + creates the element tree as side-effect
- *   + creates further entity objects that are entered into the DTD
- * - Entity layer: Pxp_entity
- *   + gets input stream from the lexers, or another entity object
- *   + handles entity references: if a reference is encountered the
- *     input stream is redirected such that the tokens come from the
- *     referenced entity object
- *   + handles conditional sections
- * - Lexer layer: Pxp_lexers
- *   + gets input from lexbuffers created by resolvers
- *   + different lexers for different lexical contexts
- *   + a lexer returns pairs (token,lexid), where token is the scanned
- *     token, and lexid is the name of the lexer that must be used for
- *     the next token
- * - Resolver layer: Pxp_entity
- *   + a resolver creates the lexbuf from some character source
- *   + a resolver recodes the input and handles the encoding scheme
- *)
-
-(**********************************************************************)
-
-(* Variables of type 'state' are used to insert Begin_entity and End_entity
- * tokens into the stream.
- * - At_beginning: Nothing has been read so far
- * - First_token tok: A Begin_entity has been inserted; and the next token
- *   is 'tok' which is not Eof. (Begin_entity/End_entity must not be inserted
- *   if the entity is empty.)
- * - In_stream: After the first token has been read, but befor Eof.
- * - At_end: Eof has been read, and End_entity has been returned.
- *)
-
-type state =
-    At_beginning
-  | Inserted_begin_entity
-  | At_end
-;;
-
-
-(**********************************************************************)
-
-class virtual entity the_dtd the_name the_warner 
-              init_errors_with_line_numbers init_encoding =
-  object (self)
-    (* This class prescribes the type of all entity objects. Furthermore,
-     * the default 'next_token' mechanism is implemented.
-     *)
-
-    (* 'init_errors_with_line_numbers': whether error messages contain line
-     * numbers or not.
-     * Calculating line numbers is expensive.
-     *)
-
-    val mutable dtd = the_dtd
-    val mutable name = the_name
-    val mutable warner = the_warner
-
-    val encoding = (init_encoding : rep_encoding)
-    val lexerset = Pxp_lexers.get_lexer_set init_encoding
-
-    method encoding = encoding
-    (* method lexerset = lexerset *)
-
-    val mutable manager = None
-      (* The current entity_manager, see below *)
-
-    method private manager = 
-      ( match manager with
-           None -> assert false
-         | Some m -> m
-      : < current_entity : entity; 
-         pop_entity : unit;
-         push_entity : entity -> unit >
-      )
-
-    method set_manager m = manager <- Some m
-
-
-    val mutable lexbuf = Lexing.from_string ""
-      (* The lexical buffer currently used as character source. *)
-
-    val mutable prolog = None
-      (* Stores the initial <?xml ...?> token as PI_xml *)
-
-    val mutable prolog_pairs = []
-      (* If prolog <> None, these are the (name,value) pairs of the
-       * processing instruction.
-       *)
-
-
-    val mutable lex_id = Document
-      (* The name of the lexer that should be used for the next token *)
-
-    method set_lex_id id = lex_id <- lex_id
-
-
-
-    val mutable force_parameter_entity_parsing = false
-      (* 'true' forces that inner entities will always be embraced by
-       *        Begin_entity and End_entity.
-       * 'false': the inner entity itself decides this
-       *)
-
-    val mutable check_text_declaration = true
-      (* 'true': It is checked that the <?xml..?> declaration matches the
-       *         production TextDecl.
-       *)
-
-    val mutable normalize_newline = true
-      (* Whether this entity converts CRLF or CR to LF, or not *)
-
-
-    val mutable line = 1     (* current line *)
-    val mutable column = 0   (* current column *)
-    val mutable pos = 0      (* current absolute character position *)
-    val errors_with_line_numbers = init_errors_with_line_numbers
-
-    val mutable p_line = 1
-    val mutable p_column = 1
-
-    method line = p_line
-    method column = p_column
-
-
-    val mutable counts_as_external = false
-
-    method counts_as_external = counts_as_external
-        (* Whether the entity counts as external (for the standalone check). *)
-
-    method set_counts_as_external =
-      counts_as_external <- true
-
-
-    val mutable last_token = Bof
-      (* XXX
-       * These two variables are used to check that between certain pairs of
-       * tokens whitespaces exist. 'last_token' is simply the last token,
-       * but not Ignore, and not PERef (which both represent whitespace).
-       * 'space_seen' records whether Ignore or PERef was seen between this
-       * token and 'last_token'.
-       *)
-
-    val mutable deferred_token = None
-      (* If you set this to Some tl, the next invocations of 
-       * next_token_from_entity will return the tokens in tl.
-       * This makes it possible to insert tokens into the stream.
-       *)
-
-    val mutable debug = false
-
-    method is_ndata = false
-      (* Returns if this entity is an NDATA (unparsed) entity *)
-
-    method name = name
-
-    method virtual open_entity : bool -> lexers -> unit
-       (* open_entity force_parsing lexid:
-        * opens the entity, and the first token is scanned by the lexer
-        * 'lexid'. 'force_parsing' forces that Begin_entity and End_entity
-        * tokens embrace the inner tokens of the entity; otherwise this
-        * depends on the entity.
-        * By opening an entity, reading tokens from it, and finally closing
-        * the entity, the inclusion methods "Included",
-        * "Included if validating", and "Included as PE" can be carried out.
-        * Which method is chosen depends on the 'lexid', i.e. the lexical
-        * context: 'lexid = Content' performs "Included (if validating)" (we
-        * are always validating); 'lexid = Declaration' performs
-        * "Included as PE". The difference is which tokens are recognized,
-        * and how spaces are handled.
-        * 'force_parsing' causes that a Begin_entity token is inserted before
-        * and an End_entity token is inserted after the entity. The yacc
-        * rules allow the Begin_entity ... End_entity brace only at certain
-        * positions; this is used to restrict the possible positions where
-        * entities may be included, and to guarantee that the entity matches
-        * a certain production of the grammar ("parsed entities").
-        * 'open_entity' is currently invoked with 'force_parsing = true'
-        * for toplevel nodes, for inclusion of internal general entities,
-        * and for inclusion of parameter entities into document entities.
-        * 'force_parsing = false' is used for all other cases: External
-        * entities add the Begin_entity/End_entity tokens anyway; internal
-        * entities do not. Especially internal parameter entities referenced
-        * from non-document entities do not add these tokens.
-        *)
-
-    method virtual close_entity : lexers
-       (* close_entity:
-        * closes the entity and returns the name of the lexer that must
-        * be used to scan the next token.
-        *)
-
-    method virtual replacement_text : (string * bool)
-       (* replacement_text:
-        * returns the replacement text of the entity, and as second value,
-        * whether the replacement text was constructed by referencing
-        * external entities (directly or indirectly).
-        * This method implements the inclusion method "Included in Literal".
-        *)
-
-
-    method lexbuf = lexbuf
-
-
-    method xml_declaration =
-      (* return the (name,value) pairs of the initial <?xml name=value ...?>
-       * processing instruction.
-       *)
-      match prolog with
-         None ->
-           None
-       | Some p ->
-           Some prolog_pairs
-
-
-    method set_debugging_mode m =
-      debug <- m
-
-    method private virtual set_encoding : string -> unit
-
-
-    method full_name =
-      name
-
-
-    method next_token =
-      (* read next token from this entity *)
-
-      match deferred_token with
-         Some toklist ->
-           ( match toklist with
-                 [] -> 
-                   deferred_token <- None;
-                   self # next_token
-               | tok :: toklist' ->
-                   deferred_token <- Some toklist';
-                   if debug then
-                     prerr_endline ("- Entity " ^ name ^ ": " ^ string_of_tok tok ^ " (deferred)");
-                   tok
-           )
-       | None -> begin
-            let this_line = line
-            and this_column = column in
-           let this_pos = pos in
-           p_line <- this_line;
-           p_column <- this_column;
-           (* Read the next token from the appropriate lexer lex_id, and get the
-            * name lex_id' of the next lexer to be used.
-            *)
-           let tok, lex_id' =
-             match lex_id with
-                 Document         -> lexerset.scan_document lexbuf
-               | Document_type    -> lexerset.scan_document_type lexbuf
-               | Content          -> lexerset.scan_content lexbuf
-               | Within_tag       -> lexerset.scan_within_tag lexbuf
-               | Declaration      -> lexerset.scan_declaration lexbuf
-               | Content_comment  -> lexerset.scan_content_comment lexbuf
-               | Decl_comment     -> lexerset.scan_decl_comment lexbuf
-               | Document_comment -> lexerset.scan_document_comment lexbuf
-               | Ignored_section  -> assert false
-                     (* Ignored_section: only used by method next_ignored_token *)
-           in
-           if debug then
-             prerr_endline ("- Entity " ^ name ^ ": " ^ string_of_tok tok);
-           (* Find out the number of lines and characters of the last line: *)
-           let n_lines, n_columns =
-             if errors_with_line_numbers then
-               count_lines (Lexing.lexeme lexbuf)
-             else
-               0, (Lexing.lexeme_end lexbuf - Lexing.lexeme_start lexbuf)
-           in
-           line <- this_line + n_lines;
-           column <- if n_lines = 0 then this_column + n_columns else n_columns;
-           pos <- Lexing.lexeme_end lexbuf;
-           lex_id <- lex_id';
-           (* Throw Ignore and Comment away; Interpret entity references: *)
-           (* NOTE: Of course, references to general entities are not allowed
-            * everywhere; parameter references, too. This is already done by the
-            * lexers, i.e. &name; and %name; are recognized only where they
-            * are allowed.
-            *)
-
-           (* TODO: last_token is only used to detect Bof. Can be simplified *)
-
-           let at_bof = (last_token = Bof) in
-           last_token <- tok;
-
-           let tok' =
-             match tok with
-
-          (* Entity references: *)
-
-               | ERef n    -> 
-                    let en, extdecl = dtd # gen_entity n in
-                   if dtd # standalone_declaration && extdecl then
-                     raise
-                       (Validation_error
-                          ("Reference to entity `" ^ n ^ 
-                           "' violates standalone declaration"));
-                   en # set_debugging_mode debug;
-                   en # open_entity true lex_id;
-                   self # manager # push_entity en;
-                   en # next_token;
-               | PERef n   -> 
-                   let en = dtd # par_entity n in
-                   en # set_debugging_mode debug;
-                   en # open_entity force_parameter_entity_parsing lex_id;
-                   self # manager # push_entity en;
-                   en # next_token;
-
-          (* Convert LineEnd to CharData *)
-               | LineEnd s -> 
-                   if normalize_newline then 
-                     CharData "\n"
-                   else
-                     CharData s
-
-          (* Also normalize CDATA sections *)
-               | Cdata value as cd ->
-                   if normalize_newline then 
-                     Cdata(normalize_line_separators lexerset value)
-                   else
-                     cd
-
-          (* If there are CRLF sequences in a PI value, normalize them, too *)
-               | PI(name,value) as pi ->
-                   if normalize_newline then
-                     PI(name, normalize_line_separators lexerset value)
-                   else
-                     pi
-         
-          (* Attribute values: If they are already normalized, they are turned
-          * into Attval_nl_normalized. This is detected by other code.
-          *)
-               | Attval value as av ->
-                   if normalize_newline then
-                     av
-                   else
-                     Attval_nl_normalized value
-
-          (* Another CRLF normalization case: Unparsed_string *)
-               | Unparsed_string value as ustr ->
-                   if normalize_newline then
-                     Unparsed_string(normalize_line_separators lexerset value)
-                   else
-                     ustr
-                     
-          (* These tokens require that the entity_id parameter is set: *)
-               | Doctype _      -> Doctype       (self :> entity_id)
-               | Doctype_rangle _ ->Doctype_rangle(self :> entity_id)
-               | Dtd_begin _    -> Dtd_begin     (self :> entity_id)
-               | Dtd_end _      -> Dtd_end       (self :> entity_id)
-               | Decl_element _ -> Decl_element  (self :> entity_id)
-               | Decl_attlist _ -> Decl_attlist  (self :> entity_id)
-               | Decl_entity _  -> Decl_entity   (self :> entity_id)
-               | Decl_notation _ ->Decl_notation (self :> entity_id)
-               | Decl_rangle _  -> Decl_rangle   (self :> entity_id)
-               | Lparen _       -> Lparen        (self :> entity_id)
-               | Rparen _       -> Rparen        (self :> entity_id)
-               | RparenPlus _   -> RparenPlus    (self :> entity_id)
-               | RparenStar _   -> RparenStar    (self :> entity_id)
-               | RparenQmark _  -> RparenQmark   (self :> entity_id)
-               | Conditional_begin _ -> Conditional_begin (self :> entity_id)
-               | Conditional_body _  -> Conditional_body  (self :> entity_id)
-               | Conditional_end _   -> Conditional_end   (self :> entity_id)
-               | Tag_beg (n,_)  -> Tag_beg (n, (self :> entity_id))
-               | Tag_end (n,_)  -> Tag_end (n, (self :> entity_id))
-
-          (* End of file: *)
-
-               | Eof       -> 
-                   if debug then begin
-                     prerr_endline ("- Entity " ^ name ^ " # handle_eof");
-                     let tok = self # handle_eof in
-                     prerr_endline ("- Entity " ^ name ^ " # handle_eof: returns " ^ string_of_tok tok);
-                     tok
-                   end
-                   else
-                     self # handle_eof;
-                   
-          (* The default case. *)
-
-               | _         -> 
-                    tok
-
-           in
-           if at_bof & tok <> Eof
-           then begin
-             if debug then
-               prerr_endline ("- Entity " ^ name ^ " # handle_bof");
-             self # handle_bof tok'
-           end
-           else
-             tok'
-         end
-
-
-    (* 'handle_bof' and 'handle_eof' can be used as hooks. Behaviour:
-     *
-     * - Normally, the first token t is read in, and 'handle_bof t' is
-     *   called. The return value of this method is what is returned to
-     *   the user.
-     * - If the EOF has been reached, 'handle_eof' is called. 
-     * - BUT: If the first token is already EOF, 'handle_eof' is called
-     *   ONLY, and 'handle_bof' is NOT called.
-     *
-     * The default implementations:
-     * - handle_bof: does nothing
-     * - handle_eof: Pops the previous entity from the stack, switches back
-     *   to this entity, and returns the next token of this entity.
-     *)
-
-
-    method private handle_bof tok =
-      tok
-
-
-    method private handle_eof =
-      let mng = self # manager in
-      begin try
-       mng # pop_entity;
-       let next_lex_id = self # close_entity in
-       let en = mng # current_entity in
-       en # set_lex_id next_lex_id;
-       en # next_token
-      with
-         Stack.Empty ->
-           (* The outermost entity is at EOF *)
-           Eof
-      end
-
-
-    method next_ignored_token =
-        (* used after <![ IGNORE *)
-
-      (* TODO: Do we need a test on deferred tokens here? *)
-
-        let this_line = line
-        and this_column = column in
-       let this_pos = pos in
-       let tok, lex_id' = lexerset.scan_ignored_section lexbuf in
-       if debug then
-         prerr_endline ("- Entity " ^ name ^ ": " ^ string_of_tok tok ^ " (Ignored)");
-       let n_lines, n_columns = count_lines (Lexing.lexeme lexbuf) in
-       line <- this_line + n_lines;
-       column <- if n_lines = 0 then this_column + n_columns else n_columns;
-       pos <- Lexing.lexeme_end lexbuf;
-       match tok with
-         | Conditional_begin _ -> Conditional_begin (self :> entity_id)
-         | Conditional_end _   -> Conditional_end   (self :> entity_id)
-         | _                   -> tok
-
-
-    method process_xmldecl pl =
-      (* The parser calls this method just after the XML declaration
-       * <?xml ...?> has been detected.
-       * 'pl': This is the argument of the PI_xml token.
-       *)
-      if debug then
-       prerr_endline ("- Entity " ^ name ^ " # process_xmldecl");
-      prolog <- Some pl;
-      prolog_pairs <- decode_xml_pi pl;
-      if check_text_declaration then
-       check_text_xml_pi prolog_pairs;
-      begin
-       try
-         let e = List.assoc "encoding" prolog_pairs in
-         self # set_encoding e
-       with
-           Not_found ->
-             self # set_encoding ""
-      end;
-
-
-    method process_missing_xmldecl =
-      (* The parser calls this method if the XML declaration is missing *)
-      if debug then
-       prerr_endline ("- Entity " ^ name ^ " # process_missing_xmldecl");
-      self # set_encoding ""
-
-
-    (* Methods for NDATA entities only: *)
-    method ext_id = (assert false : ext_id)
-    method notation = (assert false : string)
-
-  end
-;;
-
-
-class ndata_entity the_name the_ext_id the_notation init_encoding =
-  object (self)
-    (* An NDATA entity is very restricted; more or less you can only find out
-     * its external ID and its notation.
-     *)
-
-    val mutable name = the_name
-    val mutable ext_id = the_ext_id
-    val mutable notation = the_notation
-    val encoding = (init_encoding : rep_encoding)
-
-    method name = (name : string)
-    method ext_id = (ext_id : ext_id)
-    method notation = (notation : string)
-
-    method is_ndata = true
-
-    method encoding = encoding
-
-
-    val mutable counts_as_external = false
-
-    method counts_as_external = counts_as_external
-        (* Whether the entity counts as external (for the standalone check). *)
-
-    method set_counts_as_external =
-      counts_as_external <- true
-
-
-    method set_manager (m : < current_entity : entity; 
-                             pop_entity : unit;
-                             push_entity : entity -> unit >) = 
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : unit )
-
-    method set_lex_id (id : lexers) =
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : unit )
-
-    method line =
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : int )
-
-    method column =
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : int )
-
-    method full_name =
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : string )
-
-    method private set_encoding (_:string) =
-      assert false
-
-    method xml_declaration = (None : (string*string) list option)
-
-    method set_debugging_mode (_:bool) = ()
-
-    method open_entity (_:bool) (_:lexers) =
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : unit )
-
-    method close_entity =
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : lexers )
-
-    method replacement_text =
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : (string * bool) )
-
-    method lexbuf =
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : Lexing.lexbuf )
-
-    method next_token =
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : token )
-
-    method next_ignored_token =
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : token )
-
-    method process_xmldecl (pl:prolog_token list) =
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : unit )
-
-    method process_missing_xmldecl =
-      ( raise (Validation_error ("Invalid reference to NDATA entity " ^ name))
-         : unit )
-
-  end
-;;
-
-
-class external_entity the_resolver the_dtd the_name the_warner the_ext_id
-                      the_p_special_empty_entities
-                     init_errors_with_line_numbers
-                     init_encoding
-  =
-  object (self)
-    inherit entity
-              the_dtd the_name the_warner init_errors_with_line_numbers
-             init_encoding
-            as super
-
-    (* An external entity gets the lexbuf that is used as character source
-     * from a resolver.
-     * Furthermore, before the first token an Begin_entity is inserted, and
-     * before Eof an End_entity token is inserted into the stream. This done
-     * always regardless of the argument 'force_parsing' of the method
-     * 'open_entity'.
-     *
-     * 'the_p_internal_subset': see class internal_entity
-     * 'the_p_special_empty_entities': if true, a Begin_entity/End_entity
-     * brace is left out if the entity is otherwise empty.
-     *)
-
-    val resolver = (the_resolver : resolver)
-    val ext_id = (the_ext_id : ext_id)
-
-    val p_special_empty_entities = (the_p_special_empty_entities : bool)
-
-    val mutable resolver_is_open = false
-      (* Track if the resolver is open. This is also used to find recursive
-       * references of entities.
-       *)
-
-    val mutable state = At_beginning
-
-    initializer
-      counts_as_external <- true;
-
-
-    method private set_encoding e =
-      assert resolver_is_open;
-      resolver # change_encoding e
-
-
-    method full_name =
-      name ^
-      match ext_id with
-         System s    -> " = SYSTEM \"" ^ s ^ "\""
-       | Public(p,s) -> " = PUBLIC \"" ^ p ^ "\" \"" ^ s ^ "\""
-       | Anonymous   -> " = ANONYMOUS"
-
-
-    method open_entity force_parsing init_lex_id =
-      (* Note that external entities are always parsed, i.e. Begin_entity
-       * and End_entity tokens embrace the inner tokens to force that
-       * the entity is only called where the syntax allows it.
-       *)
-      if resolver_is_open then
-       raise(Validation_error("Recursive reference to entity `" ^ name ^ "'"));
-      let lex = 
-       try
-         resolver # open_in ext_id 
-       with
-           Pxp_reader.Not_competent ->
-             raise(Error ("No input method available for this external entity: " ^ 
-                       self # full_name))
-         | Pxp_reader.Not_resolvable Not_found ->
-             raise(Error ("Unable to open the external entity: " ^ 
-                          self # full_name))
-         | Pxp_reader.Not_resolvable e ->
-             raise(Error ("Unable to open the external entity: " ^ 
-                          self # full_name ^ "; reason: " ^ 
-                          string_of_exn e))
-      in
-      resolver_is_open <- true;
-      lexbuf  <- lex;
-      prolog  <- None;
-      lex_id  <- init_lex_id;
-      state <- At_beginning;
-      line <- 1;
-      column <- 0;
-      pos <- 0;
-      last_token <- Bof;
-      normalize_newline <- true;
-
-
-    method private handle_bof tok =
-      (* This hook is only called if the stream is not empty. *)
-      deferred_token <- Some [ tok ];
-      state <- Inserted_begin_entity;
-      Begin_entity
-
-
-    method private handle_eof =
-      (* This hook is called if the end of  the stream is reached *)
-      match state with
-         At_beginning ->
-           (* This is only possible if the stream is empty. *)
-           if p_special_empty_entities then begin
-             (* Continue immediately with the next token *)
-             state <- At_end;
-             super # handle_eof
-           end
-           else begin
-             (* Insert Begin_entity / End_entity *)
-             deferred_token <- Some [ End_entity ];
-             state <- At_end;
-             Begin_entity;
-             (* After these two token have been processed, the lexer
-              * is called again, and it will return another Eof.
-              *)
-           end
-       | Inserted_begin_entity ->
-           (* Insert End_entity, too. *)
-           state <- At_end;
-           End_entity;
-       | At_end ->
-           (* Continue with the next token: *)
-           super # handle_eof
-
-
-    method close_entity =
-      if not resolver_is_open then
-       failwith ("External entity " ^ name ^ " not open");
-      resolver # close_in;
-      resolver_is_open <- false;
-      lex_id
-
-
-    method replacement_text =
-      (* Return the replacement text of the entity. The method used for this
-       * is more or less the same as for internal entities; i.e. character
-       * and parameter entities are resolved immediately. In addition to that,
-       * external entities may begin with an "xml" processing instruction
-       * which is considered not to be part of the replacement text.
-       *)
-      if resolver_is_open then
-       raise(Validation_error("Recursive reference to entity `" ^ name ^ "'"));
-      let lex = resolver # open_in ext_id in
-      resolver_is_open <- true;
-      lexbuf  <- lex;
-      prolog  <- None;
-      (* arbitrary:    lex_id  <- init_lex_id; *)
-      state <- At_beginning;
-      line <- 1;
-      column <- 0;
-      pos <- 0;
-      last_token <- Bof;
-      (* First check if the first token of 'lex' is <?xml...?> *)
-      begin match lexerset.scan_only_xml_decl lex with
-         PI_xml pl ->
-           self # process_xmldecl pl
-       | Eof ->
-           (* This only means that the first token was not <?xml...?>;
-            * the "Eof" token represents the empty string.
-            *)
-           self # process_missing_xmldecl
-       | _ ->
-           (* Must not happen. *)
-           assert false
-      end;
-      (* Then create the replacement text. *)
-      let rec scan_and_expand () =
-       match lexerset.scan_dtd_string lexbuf with
-           ERef n -> "&" ^ n ^ ";" ^ scan_and_expand()
-         | CRef(-1) -> "\n" ^ scan_and_expand()
-         | CRef(-2) -> "\n" ^ scan_and_expand()
-         | CRef(-3) -> "\n" ^ scan_and_expand()
-         | CRef k -> character encoding warner k ^ scan_and_expand()
-         | CharData x -> x ^ scan_and_expand()
-         | PERef n ->
-             let en = dtd # par_entity n in
-             let (x,_) = en # replacement_text in
-             x ^ scan_and_expand()
-         | Eof ->
-             ""
-         | _ ->
-             assert false
-      in
-      let rtext = scan_and_expand() in
-      resolver # close_in;
-      resolver_is_open <- false;
-      rtext, true
-       (* TODO:
-        * - The replaced text is not parsed [VALIDATION WEAKNESS]
-        *)
-  end
-;;
-
-
-class document_entity  the_resolver the_dtd the_name the_warner the_ext_id
-                       init_errors_with_line_numbers
-                      init_encoding
-  =
-  object (self)
-    inherit external_entity  the_resolver the_dtd the_name the_warner
-                             the_ext_id false init_errors_with_line_numbers
-                            init_encoding
-
-    (* A document entity is an external entity that does not allow
-     * conditional sections, and that forces that internal parameter entities
-     * are properly nested.
-     *)
-
-    initializer
-    force_parameter_entity_parsing <- true;
-    check_text_declaration <- false;
-
-    method counts_as_external = false
-      (* Document entities count never as external! *)
-  end
-;;
-
-
-class internal_entity the_dtd the_name the_warner the_literal_value
-                      the_p_internal_subset init_errors_with_line_numbers
-                      init_is_parameter_entity
-                     init_encoding
-  =
-  (* An internal entity uses a "literal entity value" as character source.
-   * This value is first expanded and preprocessed, i.e. character and
-   * parameter references are expanded.
-   *
-   * 'the_p_internal_subset': indicates that the entity is declared in the
-   * internal subset. Such entity declarations are not allowed to contain
-   * references to parameter entities.
-   * 'init_is_parameter_entity': whether this is a parameter entity or not
-   *)
-
-  object (self)
-    inherit entity
-              the_dtd the_name the_warner init_errors_with_line_numbers
-             init_encoding
-           as super
-
-    val p_internal_subset = the_p_internal_subset
-
-    val mutable replacement_text = ""
-    val mutable contains_external_references = false
-    val mutable p_parsed_actually = false
-    val mutable is_open = false
-    val mutable state = At_beginning
-    val mutable is_parameter_entity = init_is_parameter_entity
-
-
-    initializer
-    let lexbuf = Lexing.from_string the_literal_value in
-    let rec scan_and_expand () =
-      match lexerset.scan_dtd_string lexbuf with
-         ERef n -> "&" ^ n ^ ";" ^ scan_and_expand()
-       | CRef(-1) -> "\r\n" ^ scan_and_expand()
-       | CRef(-2) -> "\r" ^ scan_and_expand()
-       | CRef(-3) -> "\n" ^ scan_and_expand()
-       | CRef k -> character encoding warner k ^ scan_and_expand()
-       | CharData x -> x ^ scan_and_expand()
-       | PERef n ->
-           if p_internal_subset then
-             raise(WF_error("Restriction of the internal subset: parameter entity not allowed here"));
-           let en = dtd # par_entity n in
-           let (x, extref) = en # replacement_text in
-           contains_external_references <-
-             contains_external_references or extref;
-           x ^ scan_and_expand()
-       | Eof ->
-           ""
-       | _ ->
-           assert false
-    in
-    is_open <- true;
-    replacement_text <- scan_and_expand();
-    is_open <- false;
-    normalize_newline <- false;
-    counts_as_external <- false;
-
-
-    method process_xmldecl (pl:prolog_token list) =
-      raise(Validation_error("The encoding cannot be changed in internal entities"))
-
-
-    method process_missing_xmldecl =
-      ()
-
-
-    method private set_encoding e =
-      (* Ignored if e = "" *)
-      assert(e = "");
-
-
-    method open_entity force_parsing init_lex_id =
-      if is_open then
-       raise(Validation_error("Recursive reference to entity `" ^ name ^ "'"));
-
-      p_parsed_actually <- force_parsing;
-      lexbuf  <- Lexing.from_string 
-                  (if is_parameter_entity then
-                     (" " ^ replacement_text ^ " ")
-                   else
-                     replacement_text);
-      prolog  <- None;
-      lex_id  <- init_lex_id;
-      state <- At_beginning;
-      is_open <- true;
-      line <- 1;
-      column <- 0;
-      pos <- 0;
-      last_token <- Eof;
-
-
-    method private handle_bof tok =
-      (* This hook is only called if the stream is not empty. *)
-      if p_parsed_actually then begin
-       deferred_token <- Some [ tok ];
-       state <- Inserted_begin_entity;
-       Begin_entity
-      end
-      else begin
-       state <- At_end;
-       tok
-      end
-
-
-    method private handle_eof =
-      (* This hook is called if the end of  the stream is reached *)
-      match state with
-         At_beginning ->
-           (* This is only possible if the stream is empty. *)
-           if p_parsed_actually then begin
-             (* Insert Begin_entity / End_entity *)
-             deferred_token <- Some [ End_entity ];
-             state <- At_end;
-             Begin_entity;
-             (* After these two token have been processed, the lexer
-              * is called again, and it will return another Eof.
-              *)
-           end
-           else begin
-             (* Continue immediately with the next token *)
-             state <- At_end;
-             super # handle_eof
-           end
-       | Inserted_begin_entity ->
-           (* Insert End_entity, too. *)
-           state <- At_end;
-           End_entity;
-       | At_end ->
-           (* Continue with the next token: *)
-           super # handle_eof
-
-
-    method close_entity =
-      if not is_open then
-       failwith ("Internal entity " ^ name ^ " not open");
-      is_open <- false;
-      lex_id
-
-
-    method replacement_text =
-      if is_open then
-       raise(Validation_error("Recursive reference to entity `" ^ name ^ "'"));
-      replacement_text, contains_external_references
-  end
-;;
-
-(**********************************************************************)
-
-(* An 'entity_manager' is a stack of entities, where the topmost entity
- * is the currently active entity, the second entity is the entity that
- * referred to the active entity, and so on.
- *
- * The entity_manager can communicate with the currently active entity.
- *
- * The entity_manager provides an interface for the parser; the functions
- * returning the current token and the next token are exported.
- *)
-
-class entity_manager (init_entity : entity) =
-  object (self)
-    val mutable entity_stack = Stack.create()
-    val mutable current_entity = init_entity
-    val mutable current_entity's_full_name = lazy (init_entity # full_name)
-                                  
-    val mutable yy_get_next_ref = ref (fun () -> assert false)
-
-    initializer
-      init_entity # set_manager (self :> 
-                                < current_entity : entity; 
-                                  pop_entity : unit;
-                                  push_entity : entity -> unit >
-                               );
-      yy_get_next_ref := (fun () -> init_entity # next_token)
-
-    method push_entity e =
-      e # set_manager (self :> 
-                      < current_entity : entity; 
-                        pop_entity : unit;
-                        push_entity : entity -> unit >
-                     );
-      Stack.push (current_entity, current_entity's_full_name) entity_stack;
-      current_entity <- e;
-      current_entity's_full_name <- lazy (e # full_name);
-      yy_get_next_ref := (fun () -> e # next_token);
-
-    method pop_entity =
-      (* May raise Stack.Empty *)
-      let e, e_name = Stack.pop entity_stack in
-      current_entity <- e;
-      current_entity's_full_name <- e_name;
-      yy_get_next_ref := (fun () -> e # next_token);
-
-
-
-    method position_string =
-      (* Gets a string describing the position of the last token;
-       * includes an entity backtrace
-       *)
-      let b = Buffer.create 200 in
-      Buffer.add_string b
-       ("In entity " ^ current_entity # full_name
-        ^ ", at line " ^ string_of_int (current_entity # line)
-        ^ ", position " ^ string_of_int (current_entity # column)
-        ^ ":\n");
-      Stack.iter
-       (fun (e, e_name) ->
-          Buffer.add_string b 
-            ("Called from entity " ^ Lazy.force e_name
-             ^ ", line " ^ string_of_int (e # line)
-             ^  ", position " ^ string_of_int (e # column)
-             ^ ":\n");
-       )
-       entity_stack;
-      Buffer.contents b
-
-
-    method position =
-      (* Returns the triple (full_name, line, column) of the last token *)
-      Lazy.force current_entity's_full_name, 
-      current_entity # line,
-      current_entity # column
-
-
-    method current_entity_counts_as_external =
-      (* Whether the current entity counts as external to the main
-       * document for the purpose of stand-alone checks.
-       *)
-      (* TODO: improve performance *)
-      let is_external = ref false in
-      let check (e, _) =
-       if e # counts_as_external then begin
-         is_external := true;
-       end;
-      in
-      check (current_entity,());
-      Stack.iter check entity_stack;
-      !is_external
-
-
-    method current_entity  = current_entity
-
-    method yy_get_next_ref = yy_get_next_ref
-
-  end
-;;
-
-      
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.6  2000/07/14 13:55:00  gerd
- *     Cosmetic changes.
- *
- * Revision 1.5  2000/07/09 17:51:50  gerd
- *     Entities return now the beginning of a token as its
- * position.
- *     New method 'position' for entity_manager.
- *
- * Revision 1.4  2000/07/09 01:05:04  gerd
- *     Exported methods 'ext_id' and 'notation' anyway.
- *
- * Revision 1.3  2000/07/08 16:28:05  gerd
- *     Updated: Exception 'Not_resolvable' is taken into account.
- *
- * Revision 1.2  2000/07/04 22:12:47  gerd
- *     Update: Case ext_id = Anonymous.
- *     Update: Handling of the exception Not_competent when reading
- * from a resolver.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_entity.ml:
- *
- * Revision 1.27  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.26  2000/05/28 17:24:55  gerd
- *     Bugfixes.
- *
- * Revision 1.25  2000/05/27 19:23:32  gerd
- *     The entities store whether they count as external with
- * respect to the standalone check: New methods counts_as_external
- * and set_counts_as_external.
- *     The entity manager can find out whether the current
- * entity counts as external: method current_entity_counts_as_external.
- *
- * Revision 1.24  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.23  2000/05/14 21:51:24  gerd
- *     Change: Whitespace is handled by the grammar, and no longer
- * by the entity.
- *
- * Revision 1.22  2000/05/14 17:50:54  gerd
- *     Updates because of changes in the token type.
- *
- * Revision 1.21  2000/05/09 00:02:44  gerd
- *     Conditional sections are now recognized by the parser.
- * There seem some open questions; see the TODO comments!
- *
- * Revision 1.20  2000/05/08 21:58:22  gerd
- *     Introduced entity_manager as communication object between
- * the parser and the currently active entity.
- *     New hooks handle_bof and handle_eof.
- *     Removed "delegated entities". The entity manager contains
- * the stack of open entities.
- *     Changed the way Begin_entity and End_entity are inserted.
- * This is now done by handle_bof and handle_eof.
- *     The XML declaration is no longer detected by the entity.
- * This is now done by the parser.
- *
- * Revision 1.19  2000/05/01 15:18:44  gerd
- *     Improved CRLF handling in the replacement text of entities.
- *     Changed one error message.
- *
- * Revision 1.18  2000/04/30 18:18:39  gerd
- *     Bugfixes: The conversion of CR and CRLF to LF is now hopefully
- * done right. The new variable "normalize_newline" indicates whether
- * normalization must happen for that type of entity. The normalization
- * if actually carried out separately for every token that needs it.
- *
- * Revision 1.17  2000/03/13 23:42:38  gerd
- *     Removed the resolver classes, and put them into their
- * own module (Markup_reader).
- *
- * Revision 1.16  2000/02/22 01:06:58  gerd
- *     Bugfix: Resolvers are properly re-initialized. This bug caused
- * that entities could not be referenced twice in the same document.
- *
- * Revision 1.15  2000/01/20 20:54:11  gerd
- *     New config.errors_with_line_numbers.
- *
- * Revision 1.14  2000/01/08 18:59:03  gerd
- *     Corrected the string resolver.
- *
- * Revision 1.13  1999/09/01 22:58:23  gerd
- *     Method warn_not_latin1 raises Illegal_character if the character
- * does not match the Char production.
- *     External entities that are not document entities check if the
- * <?xml...?> declaration at the beginning matches the TextDecl production.
- *     Method xml_declaration has type ... list option, not ... list.
- *     Tag_beg and Tag_end now carry an entity_id with them.
- *     The code to check empty entities has changed. That the Begin_entity/
- * End_entity pair is not to be added must be explicitly turned on. See the
- * description of empty entity handling in design.txt.
- *     In internal subsets entity declarations are not allowed to refer
- * to parameter entities. The internal_entity class can do this now.
- *     The p_parsed parameter of internal_entity has gone. It was simply
- * superflous.
- *
- * Revision 1.12  1999/09/01 16:24:13  gerd
- *     The method replacement_text returns the text as described for
- * "included in literal". The former behaviour has been dropped to include
- * a leading and a trailing space character for parameter entities.
- *     Bugfix: When general entities are included, they are always parsed.
- *
- * Revision 1.11  1999/08/31 19:13:31  gerd
- *     Added checks on proper PE nesting. The idea is that tokens such
- * as Decl_element and Decl_rangle carry an entity ID with them. This ID
- * is simply an object of type < >, i.e. you can only test on identity.
- * The lexer always produces tokens with a dummy ID because it does not
- * know which entity is the current one. The entity layer replaces the dummy
- * ID with the actual ID. The parser checks that the IDs of pairs such as
- * Decl_element and Decl_rangle are the same; otherwise a Validation_error
- * is produced.
- *
- * Revision 1.10  1999/08/19 01:06:41  gerd
- *     Improved error messages: external entities print their
- * ext id, too
- *
- * Revision 1.9  1999/08/15 20:35:48  gerd
- *     Improved error messages.
- *     Before the tokens Plus, Star, Qmark space is not allowed any longer.
- *     Detection of recursive entity references is a bit cleaner.
- *
- * Revision 1.8  1999/08/15 15:33:44  gerd
- *     Revised whitespace checking: At certain positions there must be
- * white space. These checks cannot be part of the lexer, as %entity; counts
- * as white space. They cannot be part of the yacc parser because one look-ahead
- * token would not suffice if we did that. So these checks must be done by the
- * entity layer. Luckily, the rules are simple: There are simply a number of
- * token pairs between which white space must occur independently of where
- * these token have been found. Two variables, "space_seen", and "last_token"
- * have been added in order to check these rules.
- *
- * Revision 1.7  1999/08/15 00:41:06  gerd
- *     The [ token of conditional sections is now allowed to occur
- * in a different entity.
- *
- * Revision 1.6  1999/08/15 00:29:02  gerd
- *     The method "attlist_replacement_text" has gone. There is now a
- * more general "replacement_text" method that computes the replacement
- * text for both internal and external entities. Additionally, this method
- * returns whether references to external entities have been resolved;
- * this is checked in the cases where formerly "attlist_replacement_text"
- * was used as it is not allowed everywhere.
- *     Entities have a new slot "need_spaces" that indicates that the
- * next token must be white space or a parameter reference. The problem
- * was that "<!ATTLIST%e;" is legal because when including parameter
- * entities white space is added implicitly. Formerly, the white space
- * was expected by the underlying lexer; now the lexer does not check
- * anymore that "<!ATTLIST" is followed by white space because the lexer
- * cannot handle parameter references. Because of this, the check on
- * white space must be done by the entity.
- *
- * Revision 1.5  1999/08/14 22:57:19  gerd
- *     It is allowed that external entities are empty because the
- * empty string is well-parsed for both declarations and contents. Empty
- * entities can be referenced anywhere because the references are replaced
- * by nothing. Because of this, the Begin_entity...End_entity brace is only
- * inserted if the entity is non-empty. (Otherwise references to empty
- * entities would not be allowed anywhere.)
- *     As a consequence, the grammar has been changed such that a
- * single Eof is equivalent to Begin_entity,End_entity without content.
- *
- * Revision 1.4  1999/08/14 22:11:19  gerd
- *         Several objects have now a "warner" as argument which is
- * an object with a "warn" method. This is used to warn about characters
- * that cannot be represented in the Latin 1 alphabet.
- *     Previously, the resolvers had features in order to warn about
- * such characters; this has been removed.
- *     UTF-8 streams can be read even if they contain characters
- * that cannot be represented by 16 bits.
- *     The buffering used in the resolvers is now solved in a
- * cleaner way; the number of characters that are expected to be read
- * from a source can be limited. This removes a bug with UTF-16 streams
- * that previously lead to wrong exceptions; and the buffering is more
- * efficient, too.
- *
- * Revision 1.3  1999/08/11 14:58:53  gerd
- *     Some more names for encodings are allowed, such as "utf8" instead
- * of the standard name "UTF-8".
- *     'resolve_as_file' interprets relative file names as relative to
- * the "parent" resolver.
- *
- * Revision 1.2  1999/08/10 21:35:07  gerd
- *     The XML/encoding declaration at the beginning of entities is
- * evaluated. In particular, entities have now a method "xml_declaration"
- * which returns the name/value pairs of such a declaration. The "encoding"
- * setting is interpreted by the entity itself; "version", and "standalone"
- * are interpreted by Markup_yacc.parse_document_entity. Other settings
- * are ignored (this does not conform to the standard; the standard prescribes
- * that "version" MUST be given in the declaration of document; "standalone"
- * and "encoding" CAN be declared; no other settings are allowed).
- *     TODO: The user should be warned if the standard is not exactly
- * fulfilled. -- The "standalone" property is not checked yet.
- *
- * Revision 1.1  1999/08/10 00:35:51  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_lexer_types.ml b/helm/DEVEL/pxp/pxp/pxp_lexer_types.ml
deleted file mode 100644 (file)
index 988e9d0..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-type lexers =
-    Document
-  | Document_type
-  | Content
-  | Within_tag
-  | Declaration
-  | Content_comment
-  | Decl_comment
-  | Document_comment
-  | Ignored_section
-
-
-type prolog_token =
-    Pro_name of string
-  | Pro_eq                  (* "=" *)
-  | Pro_string of string    (* "..." or '...' *)
-  | Pro_eof
-
-
-type entity_id = < >
-  (* The class without properties; but you can still compare if two objects
-   * are the same.
-   *)
-
-type token = 
-  | Begin_entity             (* Beginning of entity *)
-  | End_entity               (* End of entity *)
-  | Comment_begin            (* <!-- *)
-  | Comment_material of string (* within a comment *)
-  | Comment_end              (* --> *)
-  | Ignore                   (* ignored whitespace *)
-  | Eq                       (* = *)
-  | Rangle                   (* > as tag delimiter *)
-  | Rangle_empty             (* /> as tag delimiter *)
-  | Percent                  (* % followed by space in declaration *)
-  | Plus                     (* + in declaration *)
-  | Star                     (* * in declaration *)
-  | Bar                      (* | in declaration *)
-  | Comma                    (* , in declaration *)
-  | Qmark                    (* ? in declaration *)
-  | Pcdata                   (* #PCDATA in declaration *)
-  | Required                 (* #REQUIRED in declaration *)
-  | Implied                  (* #IMPLIED in declaration *)
-  | Fixed                    (* #FIXED in declaration *)
-  | Bof                      (* A marker for 'beginning of file' *)
-  | Eof                      (* End of file *)
-  | Conditional_begin of entity_id  (* <![ in declaration *)
-  | Conditional_body  of entity_id  (* [ in declaration *)
-  | Conditional_end   of entity_id  (* ]]> in declaration *)
-  | Doctype        of entity_id  (* <!DOCTYPE *)
-  | Doctype_rangle of entity_id  (* > as DOCTYPE delimiter *)
-  | Dtd_begin      of entity_id  (* '[' after DOCTYPE *)
-  | Dtd_end        of entity_id  (* ']' *)
-  | Decl_element   of entity_id  (* <!ELEMENT *)
-  | Decl_attlist   of entity_id  (* <!ATTLIST *)
-  | Decl_entity    of entity_id  (* <!ENTITY *)
-  | Decl_notation  of entity_id  (* <!NOTATION *)
-  | Decl_rangle    of entity_id  (* > *)
-  | Lparen         of entity_id  (* ( in declaration *)
-  | Rparen         of entity_id  (* ) in declaration *)
-  | RparenPlus     of entity_id  (* )+ in declaration *)
-  | RparenStar     of entity_id  (* )* in declaration *)
-  | RparenQmark    of entity_id  (* )? in declaration *)
-      
-  | Tag_beg of (string*entity_id)     (* <name *)
-  | Tag_end of (string*entity_id)     (* </name *)
-
-  | PI        of (string*string)      (* <?name ... ?> *)
-  | PI_xml    of (prolog_token list)  (* <?xml ...?> *)
-  | Cdata     of string               (* <![CDATA[...]]> *)
-  | CRef      of int                  (* &#digits; *)
-  | ERef      of string               (* &name; *)
-  | PERef     of string               (* %name; *)
-  | CharData  of string             (* any characters not otherwise matching *)
-  | LineEnd   of string
-  | Name      of string               (* name *)
-  | Nametoken of string               (* nmtoken but not name *)
-  | Attval    of string           (* attribute value; may contain entity refs *)
-  | Attval_nl_normalized of string
-  | Unparsed_string      of string    (* "data" or 'data' *)
-      
-
-(**********************************************************************)
-(* debugging *)
-
-let string_of_tok tok =
-  match tok with
-    Begin_entity -> "Begin_entity"
-  | End_entity -> "End_entity"
-  | Doctype _ -> "Doctype"
-  | Doctype_rangle _ -> "Doctype_rangle"
-  | Comment_begin -> "Comment_begin"
-  | Comment_end -> "Comment_end"
-  | Comment_material _ -> "Comment_material"
-  | Rangle -> "Rangle"
-  | Rangle_empty -> "Rangle_empty"
-  | Ignore -> "Ignore"
-  | Eq -> "Eq"
-  | Dtd_begin _ -> "Dtd_begin"
-  | Dtd_end _ -> "Dtd_end"
-  | Conditional_begin _ -> "Conditional_begin"
-  | Conditional_body _ -> "Conditional_body"
-  | Conditional_end _ -> "Conditional_end"
-  | Percent -> "Percent"
-  | Lparen _ -> "Lparen"
-  | Rparen _ -> "Rparen"
-  | Plus -> "Plus"
-  | Star -> "Star"
-  | Bar -> "Bar"
-  | Comma -> "Comma"
-  | Qmark -> "Qmark"
-  | Pcdata -> "Pcdata"
-  | Required -> "Required"
-  | Implied -> "Implied"
-  | Fixed -> "Fixed"
-  | Decl_element _ -> "Decl_element"
-  | Decl_attlist _ -> "Decl_attlist"
-  | Decl_entity _ -> "Decl_entity"
-  | Decl_notation _ -> "Decl_notation"
-  | Decl_rangle _ -> "Decl_rangle"
-  | RparenPlus _ -> "RparenPlus"
-  | RparenStar _ -> "RparenStar"
-  | RparenQmark _ -> "RparenQmark"
-  | Bof -> "Bof"
-  | Eof -> "Eof"
-  | PI _ -> "PI"
-  | PI_xml _ -> "PI_xml"
-  | Tag_beg _ -> "Tag_beg"
-  | Tag_end _ -> "Tag_end"
-  | Cdata _ -> "Cdata"
-  | CRef _ -> "CRef"
-  | ERef _ -> "ERef"
-  | PERef _ -> "PERef"
-  | CharData _ -> "CharData"
-  | Name _ -> "Name" 
-  | Nametoken _ -> "Nametoken" 
-  | Attval _ -> "Attval" 
-  | Attval_nl_normalized _ -> "Attval_nl_normalized"
-  | Unparsed_string _ -> "Unparsed_string" 
-  | LineEnd _ -> "LineEnd"
-
-
-type lexer_set =
-    { lex_encoding         : Pxp_types.rep_encoding;
-      scan_document        : Lexing.lexbuf -> (token * lexers);
-      scan_content         : Lexing.lexbuf -> (token * lexers);
-      scan_within_tag      : Lexing.lexbuf -> (token * lexers);
-      scan_document_type   : Lexing.lexbuf -> (token * lexers);
-      scan_declaration     : Lexing.lexbuf -> (token * lexers);
-      scan_content_comment : Lexing.lexbuf -> (token * lexers);
-      scan_decl_comment    : Lexing.lexbuf -> (token * lexers);
-      scan_document_comment: Lexing.lexbuf -> (token * lexers);
-      scan_ignored_section : Lexing.lexbuf -> (token * lexers);
-      scan_xml_pi          : Lexing.lexbuf -> prolog_token;
-      scan_dtd_string      : Lexing.lexbuf -> token;
-      scan_content_string  : Lexing.lexbuf -> token;
-      scan_name_string     : Lexing.lexbuf -> token;
-      scan_only_xml_decl   : Lexing.lexbuf -> token;
-      scan_for_crlf        : Lexing.lexbuf -> token;
-    }
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/08/18 20:14:31  gerd
- *     Comment -> Comment_begin, Comment_material, Comment_end.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_lexer_types.ml:
- *
- * Revision 1.6  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.5  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.4  2000/05/14 17:45:36  gerd
- *     Bugfix.
- *
- * Revision 1.3  2000/05/14 17:35:12  gerd
- *     Conditional_begin, _end, and _body have an entity_id.
- *
- * Revision 1.2  2000/05/08 21:59:06  gerd
- *     New token Bof (beginning of file).
- *
- * Revision 1.1  2000/05/06 23:21:49  gerd
- *     Initial revision.
- *
- *
- * ======================================================================
- *
- * DERIVED FROM REVISION 1.4 of markup_lexer_types_shadow.ml
- *
- * Revision 1.4  2000/04/30 18:19:04  gerd
- *     Added new tokens.
- *
- * Revision 1.3  1999/08/31 19:13:31  gerd
- *     Added checks on proper PE nesting. The idea is that tokens such
- * as Decl_element and Decl_rangle carry an entity ID with them. This ID
- * is simply an object of type < >, i.e. you can only test on identity.
- * The lexer always produces tokens with a dummy ID because it does not
- * know which entity is the current one. The entity layer replaces the dummy
- * ID with the actual ID. The parser checks that the IDs of pairs such as
- * Decl_element and Decl_rangle are the same; otherwise a Validation_error
- * is produced.
- *
- * Revision 1.2  1999/08/10 21:35:08  gerd
- *     The XML/encoding declaration at the beginning of entities is
- * evaluated. In particular, entities have now a method "xml_declaration"
- * which returns the name/value pairs of such a declaration. The "encoding"
- * setting is interpreted by the entity itself; "version", and "standalone"
- * are interpreted by Markup_yacc.parse_document_entity. Other settings
- * are ignored (this does not conform to the standard; the standard prescribes
- * that "version" MUST be given in the declaration of document; "standalone"
- * and "encoding" CAN be declared; no other settings are allowed).
- *     TODO: The user should be warned if the standard is not exactly
- * fulfilled. -- The "standalone" property is not checked yet.
- *
- * Revision 1.1  1999/08/10 00:35:51  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_lexer_types.mli b/helm/DEVEL/pxp/pxp/pxp_lexer_types.mli
deleted file mode 100644 (file)
index 9e7c2d8..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-type lexers =
-    Document
-  | Document_type
-  | Content
-  | Within_tag
-  | Declaration
-  | Content_comment
-  | Decl_comment
-  | Document_comment
-  | Ignored_section
-
-
-type prolog_token =
-    Pro_name of string
-  | Pro_eq                  (* "=" *)
-  | Pro_string of string    (* "..." or '...' *)
-  | Pro_eof
-
-type entity_id = < >
-  (* The class without properties; but you can still compare if two objects
-   * are the same.
-   *)
-
-type token = 
-  | Begin_entity             (* Beginning of entity *)
-  | End_entity               (* End of entity *)
-  | Comment_begin            (* <!-- *)
-  | Comment_material of string (* within a comment *)
-  | Comment_end              (* --> *)
-  | Ignore                   (* ignored whitespace *)
-  | Eq                       (* = *)
-  | Rangle                   (* > as tag delimiter *)
-  | Rangle_empty             (* /> as tag delimiter *)
-  | Percent                  (* % followed by space in declaration *)
-  | Plus                     (* + in declaration *)
-  | Star                     (* * in declaration *)
-  | Bar                      (* | in declaration *)
-  | Comma                    (* , in declaration *)
-  | Qmark                    (* ? in declaration *)
-  | Pcdata                   (* #PCDATA in declaration *)
-  | Required                 (* #REQUIRED in declaration *)
-  | Implied                  (* #IMPLIED in declaration *)
-  | Fixed                    (* #FIXED in declaration *)
-  | Bof                      (* A marker for 'beginning of file' *)
-  | Eof                      (* End of file *)
-  | Conditional_begin of entity_id  (* <![ in declaration *)
-  | Conditional_body  of entity_id  (* [ in declaration *)
-  | Conditional_end   of entity_id  (* ]]> in declaration *)
-  | Doctype        of entity_id  (* <!DOCTYPE *)
-  | Doctype_rangle of entity_id  (* > as DOCTYPE delimiter *)
-  | Dtd_begin      of entity_id  (* '[' after DOCTYPE *)
-  | Dtd_end        of entity_id  (* ']' *)
-  | Decl_element   of entity_id  (* <!ELEMENT *)
-  | Decl_attlist   of entity_id  (* <!ATTLIST *)
-  | Decl_entity    of entity_id  (* <!ENTITY *)
-  | Decl_notation  of entity_id  (* <!NOTATION *)
-  | Decl_rangle    of entity_id  (* > *)
-  | Lparen         of entity_id  (* ( in declaration *)
-  | Rparen         of entity_id  (* ) in declaration *)
-  | RparenPlus     of entity_id  (* )+ in declaration *)
-  | RparenStar     of entity_id  (* )* in declaration *)
-  | RparenQmark    of entity_id  (* )? in declaration *)
-      
-  | Tag_beg of (string*entity_id)     (* <name *)
-  | Tag_end of (string*entity_id)     (* </name *)
-
-  | PI        of (string*string)      (* <?name ... ?> *)
-  | PI_xml    of (prolog_token list)  (* <?xml ...?> *)
-  | Cdata     of string               (* <![CDATA[...]]> *)
-  | CRef      of int                  (* &#digits; *)
-  | ERef      of string               (* &name; *)
-  | PERef     of string               (* %name; *)
-  | CharData  of string             (* any characters not otherwise matching *)
-  | LineEnd   of string
-  | Name      of string               (* name *)
-  | Nametoken of string               (* nmtoken but not name *)
-  | Attval    of string           (* attribute value; may contain entity refs *)
-  | Attval_nl_normalized of string
-  | Unparsed_string      of string    (* "data" or 'data' *)
-      
-
-val string_of_tok : token -> string
-
-
-type lexer_set =
-    { lex_encoding         : Pxp_types.rep_encoding;
-      scan_document        : Lexing.lexbuf -> (token * lexers);
-      scan_content         : Lexing.lexbuf -> (token * lexers);
-      scan_within_tag      : Lexing.lexbuf -> (token * lexers);
-      scan_document_type   : Lexing.lexbuf -> (token * lexers);
-      scan_declaration     : Lexing.lexbuf -> (token * lexers);
-      scan_content_comment : Lexing.lexbuf -> (token * lexers);
-      scan_decl_comment    : Lexing.lexbuf -> (token * lexers);
-      scan_document_comment: Lexing.lexbuf -> (token * lexers);
-      scan_ignored_section : Lexing.lexbuf -> (token * lexers);
-      scan_xml_pi          : Lexing.lexbuf -> prolog_token;
-      scan_dtd_string      : Lexing.lexbuf -> token;
-      scan_content_string  : Lexing.lexbuf -> token;
-      scan_name_string     : Lexing.lexbuf -> token;
-      scan_only_xml_decl   : Lexing.lexbuf -> token;
-      scan_for_crlf        : Lexing.lexbuf -> token;
-    }
-
-(* lexer_set: Every internal encoding has its own set of lexer functions *)
-
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/08/18 20:14:31  gerd
- *     Comment -> Comment_begin, Comment_material, Comment_end.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_lexer_types.mli:
- *
- * Revision 1.5  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.4  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.3  2000/05/14 17:35:12  gerd
- *     Conditional_begin, _end, and _body have an entity_id.
- *
- * Revision 1.2  2000/05/08 21:59:17  gerd
- *         New token Bof (beginning of file).
- *
- * Revision 1.1  2000/05/06 23:21:49  gerd
- *     Initial revision.
- *
- *
- * ======================================================================
- *
- * DERIVED FROM REVISION 1.3 of markup_lexer_types_shadow.mli
- *
- * Revision 1.3  1999/08/31 19:13:31  gerd
- *     Added checks on proper PE nesting. The idea is that tokens such
- * as Decl_element and Decl_rangle carry an entity ID with them. This ID
- * is simply an object of type < >, i.e. you can only test on identity.
- * The lexer always produces tokens with a dummy ID because it does not
- * know which entity is the current one. The entity layer replaces the dummy
- * ID with the actual ID. The parser checks that the IDs of pairs such as
- * Decl_element and Decl_rangle are the same; otherwise a Validation_error
- * is produced.
- *
- * Revision 1.2  1999/08/10 21:35:09  gerd
- *     The XML/encoding declaration at the beginning of entities is
- * evaluated. In particular, entities have now a method "xml_declaration"
- * which returns the name/value pairs of such a declaration. The "encoding"
- * setting is interpreted by the entity itself; "version", and "standalone"
- * are interpreted by Markup_yacc.parse_document_entity. Other settings
- * are ignored (this does not conform to the standard; the standard prescribes
- * that "version" MUST be given in the declaration of document; "standalone"
- * and "encoding" CAN be declared; no other settings are allowed).
- *     TODO: The user should be warned if the standard is not exactly
- * fulfilled. -- The "standalone" property is not checked yet.
- *
- * Revision 1.1  1999/08/10 00:35:51  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_lexers.ml b/helm/DEVEL/pxp/pxp/pxp_lexers.ml
deleted file mode 100644 (file)
index ce6e7b3..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright 1999 by Gerd Stolpmann. See LICENSE for details.
- *)
-
-
-open Pxp_types
-open Pxp_lexer_types
-
-let lexer_set_iso88591 = 
-  { lex_encoding         = `Enc_iso88591;
-    scan_document        = Pxp_lex_document_iso88591.scan_document;
-    scan_content         = Pxp_lex_content_iso88591.scan_content;
-    scan_within_tag      = Pxp_lex_within_tag_iso88591.scan_within_tag;
-    scan_document_type   = Pxp_lex_document_type_iso88591.
-                            scan_document_type;
-    scan_declaration     = Pxp_lex_declaration_iso88591.scan_declaration;
-    scan_content_comment  = Pxp_lex_misc_iso88591.scan_content_comment;
-    scan_decl_comment     = Pxp_lex_misc_iso88591.scan_decl_comment;
-    scan_document_comment = Pxp_lex_misc_iso88591.scan_document_comment;
-    scan_ignored_section = Pxp_lex_name_string_iso88591.
-                             scan_ignored_section;
-    scan_xml_pi          = Pxp_lex_misc_iso88591.scan_xml_pi;
-    scan_dtd_string      = Pxp_lex_dtd_string_iso88591.scan_dtd_string;
-    scan_content_string  = Pxp_lex_content_string_iso88591.
-                            scan_content_string;
-    scan_name_string     = Pxp_lex_name_string_iso88591.scan_name_string;
-    scan_only_xml_decl   = Pxp_lex_misc_iso88591.scan_only_xml_decl;
-    scan_for_crlf        = Pxp_lex_misc_iso88591.scan_for_crlf;
-  }
-;;
-
-
-let lexer_set_utf8 = ref None
-;;
-
-
-let init_utf8 ls =
-  lexer_set_utf8 := Some ls
-;;
-
-
-let get_lexer_set enc =
-  match enc with
-      `Enc_iso88591 -> lexer_set_iso88591
-    | `Enc_utf8 ->
-       ( match !lexer_set_utf8 with
-             None ->
-               failwith ("Pxp_lexers: UTF-8 lexers not initialized")
-           | Some ls ->
-               ls
-       )
-    | _ ->
-       failwith ("Pxp_lexers: This type of internal encoding is not supported")
-;;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.4  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * Revision 1.3  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.2  2000/05/23 00:09:44  gerd
- *     The UTF-8 lexer set is no longer initialized here. It is done
- * in the new module Pxp_utf8. Reason: You can link without UTF-8 support.
- *
- * Revision 1.1  2000/05/20 20:30:50  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_lexers.mli b/helm/DEVEL/pxp/pxp/pxp_lexers.mli
deleted file mode 100644 (file)
index d8eabf6..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright 1999 by Gerd Stolpmann. See LICENSE for details.
- *)
-
-
-open Pxp_types
-open Pxp_lexer_types
-
-val get_lexer_set : rep_encoding -> lexer_set
-  (* Return the set of lexer functions that is able to handle the passed
-   * encoding.
-   *)
-
-val init_utf8 : lexer_set -> unit
-  (* Internally used. *)
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.4  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * Revision 1.3  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.2  2000/05/23 00:09:44  gerd
- *     The UTF-8 lexer set is no longer initialized here. It is done
- * in the new module Pxp_utf8. Reason: You can link without UTF-8 support.
- *
- * Revision 1.1  2000/05/20 20:30:50  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_reader.ml b/helm/DEVEL/pxp/pxp/pxp_reader.ml
deleted file mode 100644 (file)
index 83add26..0000000
+++ /dev/null
@@ -1,730 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-open Pxp_types;;
-exception Not_competent;;
-exception Not_resolvable of exn;;
-
-class type resolver =
-  object
-    method init_rep_encoding : rep_encoding -> unit
-    method init_warner : collect_warnings -> unit
-    method rep_encoding : rep_encoding
-    method open_in : ext_id -> Lexing.lexbuf
-    method close_in : unit
-    method close_all : unit
-    method change_encoding : string -> unit
-    method clone : resolver
-  end
-;;
-
-
-class virtual resolve_general 
- =
-  object (self)
-    val mutable internal_encoding = `Enc_utf8
-
-    val mutable encoding = `Enc_utf8
-    val mutable encoding_requested = false
-
-    val mutable warner = new drop_warnings
-
-    val mutable enc_initialized = false
-    val mutable wrn_initialized = false
-
-    val mutable clones = []
-
-    method init_rep_encoding e =
-      internal_encoding <- e;
-      enc_initialized <- true;
-
-    method init_warner w =
-      warner <- w;
-      wrn_initialized <- true;
-
-    method rep_encoding = (internal_encoding :> rep_encoding)
-
-(*
-    method clone =
-      ( {< encoding = `Enc_utf8;
-          encoding_requested = false;
-       >}
-       : # resolver :> resolver )
-*)
-
-    method private warn (k:int) =
-      (* Called if a character not representable has been found.
-       * k is the character code.
-       *)
-       if k < 0xd800 or (k >= 0xe000 & k <= 0xfffd) or
-          (k >= 0x10000 & k <= 0x10ffff) then begin
-            warner # warn ("Code point cannot be represented: " ^ string_of_int k);
-          end
-       else
-         raise (WF_error("Code point " ^ string_of_int k ^ 
-                   " outside the accepted range of code points"))
-
-
-    method private autodetect s =
-      (* s must be at least 4 bytes long. The slot 'encoding' is
-       * set to:
-       * "UTF-16-BE": UTF-16/UCS-2 encoding big endian
-       * "UTF-16-LE": UTF-16/UCS-2 encoding little endian
-       * "UTF-8":     UTF-8 encoding
-       *)
-      if String.length s < 4 then
-       encoding <- `Enc_utf8
-      else if String.sub s 0 2 = "\254\255" then
-       encoding <- `Enc_utf16
-         (* Note: Netconversion.recode will detect the big endianess, too *)
-      else if String.sub s 0 2 = "\255\254" then
-       encoding <- `Enc_utf16
-         (* Note: Netconversion.recode will detect the little endianess, too *)
-      else
-       encoding <- `Enc_utf8
-
-
-    method private virtual next_string : string -> int -> int -> int
-    method private virtual init_in : ext_id -> unit
-    method virtual close_in : unit
-
-    method close_all =
-      List.iter (fun r -> r # close_in) clones
-
-    method open_in xid =
-      assert(enc_initialized && wrn_initialized);
-
-      encoding <- `Enc_utf8;
-      encoding_requested <- false;
-      self # init_in xid;         (* may raise Not_competent *)
-      (* init_in: may already set 'encoding' *)
-
-      let buffer_max = 512 in
-      let buffer = String.make buffer_max ' ' in
-      let buffer_len = ref 0 in
-      let buffer_end = ref false in
-      let fillup () =
-       if not !buffer_end & !buffer_len < buffer_max then begin
-         let l =
-           self # next_string buffer !buffer_len (buffer_max - !buffer_len) in
-         if l = 0 then
-           buffer_end := true
-         else begin
-           buffer_len := !buffer_len + l
-         end
-       end
-      in
-      let consume n =
-       let l = !buffer_len - n in
-       String.blit buffer n buffer 0 l;
-       buffer_len := l
-      in
-
-      fillup();
-      if not encoding_requested then self # autodetect buffer;
-
-      Lexing.from_function
-       (fun s n ->
-          (* TODO: if encoding = internal_encoding, it is possible to
-           * avoid copying buffer to s because s can be directly used
-           * as buffer.
-           *)
-
-          fillup();
-          if !buffer_len = 0 then
-            0
-          else begin
-            let m_in  = !buffer_len in
-            let m_max = if encoding_requested then n else 1 in
-            let n_in, n_out, encoding' =
-              if encoding = (internal_encoding : rep_encoding :> encoding) &&
-                 encoding_requested
-              then begin
-                (* Special case encoding = internal_encoding *)
-                String.blit buffer 0 s 0 m_in;
-                m_in, m_in, encoding
-              end
-              else
-                Netconversion.recode
-                  ~in_enc:encoding
-                  ~in_buf:buffer
-                  ~in_pos:0
-                  ~in_len:m_in
-                  ~out_enc:(internal_encoding : rep_encoding :> encoding)
-                  ~out_buf:s
-                  ~out_pos:0
-                  ~out_len:n
-                  ~max_chars:m_max
-                  ~subst:(fun k -> self # warn k; "")
-            in
-            if n_in = 0 then
-              (* An incomplete character at the end of the stream: *)
-              raise Netconversion.Malformed_code;
-              (* failwith "Badly encoded character"; *)
-            encoding <- encoding';
-            consume n_in;
-            assert(n_out <> 0);
-            n_out
-          end)
-
-    method change_encoding enc =
-      if not encoding_requested then begin
-       if enc <> "" then begin
-         match Netconversion.encoding_of_string enc with
-             `Enc_utf16 ->
-               (match encoding with
-                    (`Enc_utf16_le | `Enc_utf16_be) -> ()
-                  | `Enc_utf16 -> assert false
-                  | _ ->
-                      raise(WF_error "Encoding of data stream and encoding declaration mismatch")
-               )
-           | e ->
-               encoding <- e
-       end;
-       (* else: the autodetected encoding counts *)
-       encoding_requested <- true;
-      end;
-  end
-;;
-
-
-class resolve_read_any_channel ?(auto_close=true) ~channel_of_id =
-  object (self)
-    inherit resolve_general as super
-
-    val f_open = channel_of_id
-    val mutable current_channel = None
-    val auto_close = auto_close
-
-    method private init_in (id:ext_id) =
-      if current_channel <> None then
-       failwith "Pxp_reader.resolve_read_any_channel # init_in";
-      let ch, enc_opt = f_open id in       (* may raise Not_competent *)
-      begin match enc_opt with
-         None     -> ()
-       | Some enc -> encoding <- enc; encoding_requested <- true
-      end;
-      current_channel <- Some ch;
-
-    method private next_string s ofs len =
-      match current_channel with
-         None -> failwith "Pxp_reader.resolve_read_any_channel # next_string"
-       | Some ch ->
-           input ch s ofs len
-
-    method close_in =
-      match current_channel with
-         None -> ()
-       | Some ch ->
-           if auto_close then close_in ch;
-           current_channel <- None
-
-    method clone =
-      let c = new resolve_read_any_channel 
-               ?auto_close:(Some auto_close) f_open in
-      c # init_rep_encoding internal_encoding;
-      c # init_warner warner;
-      clones <- c :: clones;
-      (c :> resolver)
-
-  end
-;;
-
-
-class resolve_read_this_channel1 is_stale ?id ?fixenc ?auto_close ch =
-
-  let getchannel = ref (fun xid -> assert false) in
-
-  object (self)
-    inherit resolve_read_any_channel 
-              ?auto_close:auto_close 
-             (fun xid -> !getchannel xid)
-             as super
-
-    val mutable is_stale = is_stale
-      (* The channel can only be read once. To avoid that the channel
-       * is opened several times, the flag 'is_stale' is set after the
-       * first time.
-       *)
-
-    val fixid = id
-    val fixenc = fixenc
-    val fixch = ch
-
-    initializer
-      getchannel := self # getchannel
-
-    method private getchannel xid =
-      begin match fixid with
-         None -> ()
-       | Some bound_xid -> 
-           if xid <> bound_xid then raise Not_competent
-      end;
-      ch, fixenc
-
-    method private init_in (id:ext_id) =
-      if is_stale then
-       raise Not_competent
-      else begin
-       super # init_in id;
-       is_stale <- true
-      end
-
-    method close_in =
-      current_channel <- None
-
-    method clone =
-      let c = new resolve_read_this_channel1 
-               is_stale 
-               ?id:fixid ?fixenc:fixenc ?auto_close:(Some auto_close) fixch
-      in
-      c # init_rep_encoding internal_encoding;
-      c # init_warner warner;
-      clones <- c :: clones;
-      (c :> resolver)
-
-  end
-;;
-
-
-class resolve_read_this_channel =
-  resolve_read_this_channel1 false
-;;
-
-
-class resolve_read_any_string ~string_of_id =
-  object (self)
-    inherit resolve_general as super
-
-    val f_open = string_of_id
-    val mutable current_string = None
-    val mutable current_pos    = 0
-
-    method private init_in (id:ext_id) =
-      if current_string <> None then
-       failwith "Pxp_reader.resolve_read_any_string # init_in";
-      let s, enc_opt = f_open id in       (* may raise Not_competent *)
-      begin match enc_opt with
-         None     -> ()
-       | Some enc -> encoding <- enc; encoding_requested <- true
-      end;
-      current_string <- Some s;
-      current_pos    <- 0;
-
-    method private next_string s ofs len =
-      match current_string with
-         None -> failwith "Pxp_reader.resolve_read_any_string # next_string"
-       | Some str ->
-           let l = min len (String.length str - current_pos) in
-           String.blit str current_pos s ofs l;
-           current_pos <- current_pos + l;
-           l
-
-    method close_in =
-      match current_string with
-         None -> ()
-       | Some _ ->
-           current_string <- None
-
-    method clone =
-      let c = new resolve_read_any_string f_open in
-      c # init_rep_encoding internal_encoding;
-      c # init_warner warner;
-      clones <- c :: clones;
-      (c :> resolver)
-  end
-;;
-
-
-class resolve_read_this_string1 is_stale ?id ?fixenc str =
-
-  let getstring = ref (fun xid -> assert false) in
-
-  object (self)
-    inherit resolve_read_any_string (fun xid -> !getstring xid) as super
-
-    val is_stale = is_stale
-      (* For some reasons, it is not allowed to open a clone of the resolver 
-       * a second time when the original resolver is already open.
-       *)
-
-    val fixid = id
-    val fixenc = fixenc
-    val fixstr = str
-
-    initializer
-      getstring := self # getstring
-
-    method private getstring xid =
-      begin match fixid with
-         None -> ()
-       | Some bound_xid -> 
-           if xid <> bound_xid then raise Not_competent
-      end;
-      fixstr, fixenc
-
-
-    method private init_in (id:ext_id) =
-      if is_stale then
-       raise Not_competent
-      else
-       super # init_in id
-
-    method clone =
-      let c = new resolve_read_this_string1 
-               (is_stale or current_string <> None) 
-               ?id:fixid ?fixenc:fixenc fixstr
-      in
-      c # init_rep_encoding internal_encoding;
-      c # init_warner warner;
-      clones <- c :: clones;
-      (c :> resolver)
-  end
-;;
-
-
-class resolve_read_this_string =
-  resolve_read_this_string1 false
-;;
-
-
-class resolve_read_url_channel 
-  ?(base_url = Neturl.null_url)
-  ?auto_close
-  ~url_of_id
-  ~channel_of_url 
-
-  : resolver
-  =
-
-  let getchannel = ref (fun xid -> assert false) in
-
-  object (self)
-    inherit resolve_read_any_channel 
-              ?auto_close:auto_close 
-             (fun xid -> !getchannel xid) 
-             as super
-
-    val base_url = base_url
-    val mutable own_url = Neturl.null_url
-
-    val url_of_id = url_of_id
-    val channel_of_url = channel_of_url
-
-
-    initializer
-      getchannel := self # getchannel
-
-    method private getchannel xid =
-      let rel_url = url_of_id xid in    (* may raise Not_competent *)
-
-      try
-       (* Now compute the absolute URL: *)
-       let abs_url = Neturl.apply_relative_url base_url rel_url in
-                      (* may raise Malformed_URL *)
-
-       (* Simple check whether 'abs_url' is really absolute: *)
-       if not(Neturl.url_provides ~scheme:true abs_url) 
-       then raise Not_competent;
-
-       own_url <- abs_url;
-        (* FIXME: Copy 'abs_url' ? *)
-
-       (* Get and return the channel: *)
-       channel_of_url abs_url            (* may raise Not_competent *)
-      with
-         Neturl.Malformed_URL -> raise (Not_resolvable Neturl.Malformed_URL)
-       | Not_competent        -> raise (Not_resolvable Not_found)
-
-    method clone =
-      let c = 
-       new resolve_read_url_channel 
-         ?base_url:(Some own_url) 
-         ?auto_close:(Some auto_close)
-         ~url_of_id:url_of_id 
-         ~channel_of_url:channel_of_url
-      in
-      c # init_rep_encoding internal_encoding;
-      c # init_warner warner;
-      clones <- c :: clones;
-      (c :> resolve_read_url_channel)
-  end
-;;
-
-
-type spec = [ `Not_recognized | `Allowed | `Required ]
-
-class resolve_as_file
-  ?(file_prefix = (`Allowed :> spec))
-  ?(host_prefix = (`Allowed :> spec))
-  ?(system_encoding = `Enc_utf8) 
-  ?url_of_id:passed_url_of_id
-  ?channel_of_url:passed_channel_of_url
-  ()
-  =
-
-  let url_syntax =
-    let enable_if =
-      function
-         `Not_recognized  -> Neturl.Url_part_not_recognized
-       | `Allowed         -> Neturl.Url_part_allowed
-       | `Required        -> Neturl.Url_part_required
-    in
-    { Neturl.null_url_syntax with
-       Neturl.url_enable_scheme = enable_if file_prefix;
-       Neturl.url_enable_host   = enable_if host_prefix;
-       Neturl.url_enable_path   = Neturl.Url_part_required;
-       Neturl.url_accepts_8bits = true;
-    } 
-  in
-
-  let base_url_syntax = 
-    { Neturl.null_url_syntax with
-       Neturl.url_enable_scheme = Neturl.Url_part_required;
-       Neturl.url_enable_host   = Neturl.Url_part_allowed;
-       Neturl.url_enable_path   = Neturl.Url_part_required;
-       Neturl.url_accepts_8bits = true;
-    } 
-  in
-
-  let default_base_url =
-    Neturl.make_url
-      ~scheme: "file"
-      ~host:   ""
-      ~path:   (Neturl.split_path (Sys.getcwd() ^ "/"))
-      base_url_syntax
-  in
-
-  let file_url_of_id xid =
-    let file_url_of_sysname sysname =
-      (* By convention, we can assume that sysname is a URL conforming
-       * to RFC 1738 with the exception that it may contain non-ASCII
-       * UTF-8 characters. 
-       *)
-      try
-       Neturl.url_of_string url_syntax sysname 
-          (* may raise Malformed_URL *)
-      with
-         Neturl.Malformed_URL -> raise Not_competent
-    in
-    let url =
-      match xid with
-         Anonymous          -> raise Not_competent
-       | Public (_,sysname) -> if sysname <> "" then file_url_of_sysname sysname
-                                                 else raise Not_competent
-       | System sysname     -> file_url_of_sysname sysname
-    in
-    let scheme =
-      try Neturl.url_scheme url with Not_found -> "file" in
-    let host =
-      try Neturl.url_host url with Not_found -> "" in
-    
-    if scheme <> "file" then raise Not_competent;
-    if host <> "" && host <> "localhost" then raise Not_competent;
-    
-    url
-  in
-
-  let channel_of_file_url url =
-    try
-      let path_utf8 =
-       try Neturl.join_path (Neturl.url_path ~encoded:false url)
-       with Not_found -> raise Not_competent
-      in
-      
-      let path = 
-       Netconversion.recode_string
-         ~in_enc:  `Enc_utf8
-         ~out_enc: system_encoding
-         path_utf8 in
-        (* May raise Bad_character_stream *)
-      
-      open_in_bin path, None
-       (* May raise Sys_error *)
-
-    with
-      | Netconversion.Malformed_code -> assert false
-           (* should not happen *)
-
-  in
-
-  let url_of_id id =
-    match passed_url_of_id with
-       None -> 
-         file_url_of_id id
-      | Some f -> 
-         begin 
-           try f id
-           with 
-               Not_competent -> file_url_of_id id
-         end
-  in
-
-  let channel_of_url url =
-    match passed_channel_of_url with
-       None -> 
-         channel_of_file_url url
-      | Some f -> 
-         begin 
-           try f url
-           with 
-               Not_competent -> channel_of_file_url url
-         end
-  in
-  
-  resolve_read_url_channel 
-    ~base_url:       default_base_url
-    ~auto_close:     true
-    ~url_of_id:      url_of_id
-    ~channel_of_url: channel_of_url
-;;
-
-
-class combine ?prefer rl =
-  object (self)
-    val prefered_resolver = prefer
-    val resolvers = (rl : resolver list)
-    val mutable internal_encoding = `Enc_utf8
-    val mutable warner = new drop_warnings
-    val mutable active_resolver = None
-    val mutable clones = []
-
-    method init_rep_encoding enc =
-      List.iter
-       (fun r -> r # init_rep_encoding enc)
-       rl;
-      internal_encoding <- enc
-
-    method init_warner w =
-      List.iter
-       (fun r -> r # init_warner w)
-       rl;
-      warner <- w;
-
-    method rep_encoding = internal_encoding
-      (* CAUTION: This may not be the truth! *)
-
-    method open_in xid =
-      let rec find_competent_resolver rl =
-       match rl with
-           r :: rl' ->
-             begin try 
-               r, (r # open_in xid)
-             with
-                 Not_competent -> find_competent_resolver rl'
-             end;
-         | [] ->
-             raise Not_competent
-      in
-
-      if active_resolver <> None then failwith "Pxp_reader.combine # open_in";
-      let r, lb = 
-       match prefered_resolver with
-           None ->   find_competent_resolver resolvers 
-         | Some r -> find_competent_resolver (r :: resolvers)
-      in
-      active_resolver <- Some r;
-      lb
-
-    method close_in =
-      match active_resolver with
-         None   -> ()
-       | Some r -> r # close_in;
-                   active_resolver <- None
-
-    method close_all =
-      List.iter (fun r -> r # close_in) clones
-
-    method change_encoding (enc:string) =
-      match active_resolver with
-         None   -> failwith "Pxp_reader.combine # change_encoding"
-       | Some r -> r # change_encoding enc
-
-    method clone =
-      let c =
-       match active_resolver with
-           None   -> 
-             new combine ?prefer:None (List.map (fun q -> q # clone) resolvers)
-         | Some r -> 
-             let r' = r # clone in
-             new combine 
-               ?prefer:(Some r')
-               (List.map 
-                  (fun q -> if q == r then r' else q # clone) 
-                  resolvers)
-      in
-      c # init_rep_encoding internal_encoding;
-      c # init_warner warner;
-      clones <- c :: clones;
-      c
-  end
-
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.9  2000/08/14 22:24:55  gerd
- *     Moved the module Pxp_encoding to the netstring package under
- * the new name Netconversion.
- *
- * Revision 1.8  2000/07/16 18:31:09  gerd
- *     The exception Illegal_character has been dropped.
- *
- * Revision 1.7  2000/07/09 15:32:01  gerd
- *     Fix in resolve_this_channel, resolve_this_string
- *
- * Revision 1.6  2000/07/09 01:05:33  gerd
- *     New methode 'close_all' that closes the clones, too.
- *
- * Revision 1.5  2000/07/08 16:24:56  gerd
- *     Introduced the exception 'Not_resolvable' to indicate that
- * 'combine' should not try the next resolver of the list.
- *
- * Revision 1.4  2000/07/06 23:04:46  gerd
- *     Quick fix for 'combine': The active resolver is "prefered",
- * but the other resolvers are also used.
- *
- * Revision 1.3  2000/07/06 21:43:45  gerd
- *     Fix: Public(_,name) is now treated as System(name) if
- * name is non-empty.
- *
- * Revision 1.2  2000/07/04 22:13:30  gerd
- *     Implemented the new API rev. 1.2 of pxp_reader.mli.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_reader.ml:
- *
- * Revision 1.3  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.2  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.1  2000/03/13 23:41:44  gerd
- *     Initial revision; this code was formerly part of Markup_entity.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_reader.mli b/helm/DEVEL/pxp/pxp/pxp_reader.mli
deleted file mode 100644 (file)
index 27a3680..0000000
+++ /dev/null
@@ -1,388 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-open Pxp_types;;
-
-exception Not_competent;;
-  (* Raised by the 'open_in' method if the object does not know how to 
-   * handle the passed external ID.
-   *)
-
-exception Not_resolvable of exn;;
-  (* Indicates that one resolver was competent, but there was an error
-   * while resolving the external ID. The passed exception explains the
-   * reason.
-   * Not_resolvable(Not_found) serves as indicator for an unknown reason.
-   *)
-
-
-(* The class type 'resolver' is the official type of all "resolvers". 
- * Resolvers take file names (or better, external identifiers) and 
- * return lexbufs, scanning the file for tokens. Resolvers may be
- * cloned, and clones can interpret relative file names relative to
- * their creator.
- *
- * Example of the latter:
- *
- * Resolver r reads from file:/dir/f1.xml
- *
- * <tag>some XML text
- * &e;                       -----> Entity e is bound to "subdir/f2.xml"
- * </tag>                           Step (1): let r' = "clone of r"
- *                                  Step (2): open file "subdir/f2.xml"
- *
- * r' must still know the directory of the file r is reading, otherwise
- * it would not be able to resolve "subdir/f2.xml" = "file:/dir/subdir/f2.xml".
- *
- * Actually, this example can be coded as:
- *
- * let r = new resolve_as_file in
- * let lbuf = r # open_in "file:/dir/f1.xml" in
- * ... read from lbuf ...
- * let r' = r # clone in
- * let lbuf' = r' # open_in "subdir/f2.xml" in
- * ... read from lbuf' ...
- * r' # close_in;
- * ... read from lbuf ...
- * r # close_in;
- *)
-
-class type resolver =
-  object
-    (* A resolver can open an input source, and returns this source as
-     * Lexing.lexbuf.
-     *
-     * After creating a resolver, one must invoke the two methods
-     * init_rep_encoding and init_warner to set the internal encoding of 
-     * strings and the warner object, respectively. This is normally
-     * done by the parsing functions in Pxp_yacc.
-     * It is not necessary to invoke these two methods for a fresh
-     * clone.
-     *
-     * It is possible that the character encoding of the source and the
-     * internal encoding of the parser are different. To cope with this,
-     * one of the tasks of the resolver is to recode the characters of
-     * the input source into the internal character encoding.
-     *
-     * Note that there are several ways of determining the encoding of the
-     * input: (1) It is possible that the transport protocol (e.g. HTTP)
-     * transmits the encoding, and (2) it is possible to inspect the beginning
-     * of the file, and to analyze:
-     * (2.1) The first two bytes indicate whether UTF-16 is used
-     * (2.2) Otherwise, one can assume that an ASCII-compatible character
-     *       set is used. It is now possible to read the XML declaration
-     *       <?xml ... encoding="xyz" ...?>. The encoding found here is
-     *       to be used.
-     * (2.3) If the XML declaration is missing, the encoding is UTF-8.
-     * The resolver needs only to distinguish between cases (1), (2.1),
-     * and the rest.
-     * The details of analyzing whether (2.2) or (2.3) applies are programmed 
-     * elsewhere, and the resolver will be told the result (see below).
-     *
-     * A resolver is like a file: it must be opened before one can work
-     * with it, and it should be closed after all operations on it have been
-     * done. The method 'open_in' is called with the external ID as argument
-     * and it must return the lexbuf reading from the external resource.
-     * The method 'close_in' does not require an argument.
-     *
-     * It is allowed to re-open a resolver after it has been closed. It is
-     * forbidden to open a resolver again while it is open.
-     * It is allowed to close a resolver several times: If 'close_in' is
-     * invoked while the resolver is already closed, nothing happens.
-     *
-     * The method 'open_in' may raise Not_competent to indicate that this
-     * resolver is not able to open this type of IDs.
-     *
-     * The method 'change_encoding' is called from the parser after the
-     * analysis of case (2) has been done; the argument is either the
-     * string name of the encoding, or the empty string to indicate
-     * that no XML declaration was found. It is guaranteed that 
-     * 'change_encoding' is invoked after only a few tokens of the 
-     * file. The resolver should react as follows:
-     * - If case (1) applies:   Ignore the encoding passed to 'change_encoding'.
-     * - If case (2.1) applies: The encoding passed to 'change_encoding' must
-     *                          be compatible with UTF-16. This should be
-     *                          checked, and violations should be reported.
-     * - Else:                  If the passed encoding is "", assume UTF-8.
-     *                          Otherwise, assume the passed encoding.
-     *
-     * The following rule helps synchronizing the lexbuf with the encoding:
-     * If the resolver has been opened, but 'change_encoding' has not yet
-     * been invoked, the lexbuf contains at most one character (which may
-     * be represented by multiple bytes); i.e. the lexbuf is created by
-     * Lexing.from_function, and the function puts only one character into
-     * the buffer at once.
-     * After 'change_encoding' has been invoked, there is no longer a limit
-     * on the lexbuf size.
-     *
-     * The reason for this rule is that you know exactly the character where
-     * the encoding changes to the encoding passed by 'change_encoding'.
-     *
-     * The method 'clone' may be invoked for open or closed resolvers.
-     * Basically, 'clone' returns a new resolver which is always closed.
-     * If the original resolver is closed, the clone is simply a clone.
-     * If the original resolver is open at the moment of cloning:
-     * If the clone is later opened for a relative system ID (i.e. relative
-     * URL), the clone must interpret this ID relative to the ID of the
-     * original resolver.
-     *)
-    method init_rep_encoding : rep_encoding -> unit
-    method init_warner : collect_warnings -> unit
-
-    method rep_encoding : rep_encoding
-
-    method open_in : ext_id -> Lexing.lexbuf
-      (* May raise Not_competent if the object does not know how to handle
-       * this ext_id.
-       *)
-    method close_in : unit
-    method change_encoding : string -> unit
-
-
-    (* Every resolver can be cloned. The clone does not inherit the connection
-     * with the external object, i.e. it is initially closed.
-     *)
-    method clone : resolver
-
-    method close_all : unit
-      (* Closes this resolver and every clone *)
-
-  end
-;;
-
-(* Note: resolve_general is no longer exported. In most cases, the classes
- * resolve_read_any_channel or resolve_read_any_string are applicable, too,
- * and much easier to configure.
- *)
-
-
-(* The next classes are resolvers for concrete input sources. *)
-
-class resolve_read_this_channel : 
-  ?id:ext_id -> ?fixenc:encoding -> ?auto_close:bool -> 
-  in_channel -> resolver;;
-
-  (* Reads from the passed channel (it may be even a pipe). If the ~id
-   * argument is passed to the object, the created resolver accepts only
-   * this ID. Otherwise all IDs are accepted.
-   * Once the resolver has been cloned, it does not accept any ID. This
-   * means that this resolver cannot handle inner references to external
-   * entities. Note that you can combine this resolver with another resolver
-   * that can handle inner references (such as resolve_as_file); see
-   * class 'combine' below.
-   * If you pass the ~fixenc argument, the encoding of the channel is
-   * set to the passed value, regardless of any auto-recognition or
-   * any XML declaration.
-   * If ?auto_close = true (which is the default), the channel is
-   * closed after use. If ?auto_close = false, the channel is left open.
-   *)
-
-
-class resolve_read_any_channel : 
-  ?auto_close:bool -> 
-  channel_of_id:(ext_id -> (in_channel * encoding option)) -> 
-  resolver;;
-
-  (* resolve_read_any_channel f_open:
-   * This resolver calls the function f_open to open a new channel for
-   * the passed ext_id. This function must either return the channel and
-   * the encoding, or it must fail with Not_competent.
-   * The function must return None as encoding if the default mechanism to
-   * recognize the encoding should be used. It must return Some e if it is
-   * already known that the encoding of the channel is e.
-   * If ?auto_close = true (which is the default), the channel is
-   * closed after use. If ?auto_close = false, the channel is left open.
-   *)
-
-
-class resolve_read_url_channel :
-  ?base_url:Neturl.url ->
-  ?auto_close:bool -> 
-  url_of_id:(ext_id -> Neturl.url) -> 
-  channel_of_url:(Neturl.url -> (in_channel * encoding option)) -> 
-    resolver;;
-
-  (* resolve_read_url_channel url_of_id channel_of_url:
-   *
-   * When this resolver gets an ID to read from, it calls the function
-   * ~url_of_id to get the corresponding URL. This URL may be a relative
-   * URL; however, a URL scheme must be used which contains a path.
-   * The resolver converts the URL to an absolute URL if necessary.
-   * The second function, ~channel_of_url, is fed with the absolute URL
-   * as input. This function opens the resource to read from, and returns
-   * the channel and the encoding of the resource.
-   *
-   * Both functions, ~url_of_id and ~channel_of_url, can raise
-   * Not_competent to indicate that the object is not able to read from
-   * the specified resource. However, there is a difference: A Not_competent
-   * from ~url_of_id is left as it is, but a Not_competent from ~channel_of_url
-   * is converted to Not_resolvable. So only ~url_of_id decides which URLs
-   * are accepted by the resolver and which not.
-   *
-   * The function ~channel_of_url must return None as encoding if the default 
-   * mechanism to recognize the encoding should be used. It must return
-   * Some e if it is already known that the encoding of the channel is e.
-   *
-   * If ?auto_close = true (which is the default), the channel is
-   * closed after use. If ?auto_close = false, the channel is left open.
-   * 
-   * Objects of this class contain a base URL relative to which relative
-   * URLs are interpreted. When creating a new object, you can specify
-   * the base URL by passing it as ~base_url argument. When an existing
-   * object is cloned, the base URL of the clone is the URL of the original
-   * object.
-   *
-   * Note that the term "base URL" has a strict definition in RFC 1808.
-   *)
-
-
-class resolve_read_this_string : 
-  ?id:ext_id -> ?fixenc:encoding -> string -> resolver;;
-
-  (* Reads from the passed string. If the ~id
-   * argument is passed to the object, the created resolver accepts only
-   * this ID. Otherwise all IDs are accepted.
-   * Once the resolver has been cloned, it does not accept any ID. This
-   * means that this resolver cannot handle inner references to external
-   * entities. Note that you can combine this resolver with another resolver
-   * that can handle inner references (such as resolve_as_file); see
-   * class 'combine' below.
-   * If you pass the ~fixenc argument, the encoding of the string is
-   * set to the passed value, regardless of any auto-recognition or
-   * any XML declaration.
-   *)
-
-
-class resolve_read_any_string : 
-  string_of_id:(ext_id -> (string * encoding option)) -> resolver;;
-
-  (* resolver_read_any_string f_open:
-   * This resolver calls the function f_open to get the string for
-   * the passed ext_id. This function must either return the string and
-   * the encoding, or it must fail with Not_competent.
-   * The function must return None as encoding if the default mechanism to
-   * recognize the encoding should be used. It must return Some e if it is
-   * already known that the encoding of the string is e.
-   *)
-
-
-class resolve_as_file :
-  ?file_prefix:[ `Not_recognized | `Allowed | `Required ] ->
-  ?host_prefix:[ `Not_recognized | `Allowed | `Required ] ->
-  ?system_encoding:encoding ->
-  ?url_of_id:(ext_id -> Neturl.url) -> 
-  ?channel_of_url: (Neturl.url -> (in_channel * encoding option)) ->
-  unit -> 
-  resolver;;
-
-  (* Reads from the local file system. Every file name is interpreted as
-   * file name of the local file system, and the referred file is read.
-   *
-   * The full form of a file URL is: file://host/path, where
-   * 'host' specifies the host system where the file identified 'path'
-   * resides. host = "" or host = "localhost" are accepted; other values
-   * will raise Not_competent. The standard for file URLs is 
-   * defined in RFC 1738.
-   *
-   * Option ~file_prefix: Specifies how the "file:" prefix of file names
-   * is handled:
-   * `Not_recognized:  The prefix is not recognized.
-   * `Allowed:         The prefix is allowed but not required (the default).
-   * `Required:        The prefix is required.
-   *
-   * Option ~host_prefix: Specifies how the "//host" phrase of file names
-   * is handled:
-   * `Not_recognized:  The phrase is not recognized.
-   * `Allowed:         The phrase is allowed but not required (the default).
-   * `Required:        The phrase is required.
-   *
-   * Option ~system_encoding: Specifies the encoding of file names of
-   * the local file system. Default: UTF-8.
-   *
-   * Options ~url_of_id, ~channel_of_url: Not for the end user!
-   *)
-
-
-class combine : ?prefer:resolver -> resolver list -> resolver;;
-  
-  (* Combines several resolver objects. If a concrete entity with an
-   * ext_id is to be opened, the combined resolver tries the contained
-   * resolvers in turn until a resolver accepts opening the entity
-   * (i.e. it does not raise Not_competent on open_in).
-   *
-   * Clones: If the 'clone' method is invoked before 'open_in', all contained
-   * resolvers are cloned and again combined. If the 'clone' method is 
-   * invoked after 'open_in' (i.e. while the resolver is open), only the
-   * active resolver is cloned.
-   *) 
-
-(* EXAMPLES OF RESOLVERS:
- *
- * let r1 = new resolve_as_file
- *   - r1 can open all local files
- *
- * let r2 = new resolve_read_this_channel 
- *            ~id:"file:/dir/f.xml" 
- *            (open_in "/dir/f.xml")
- *   - r2 can only read /dir/f.xml of the local file system. If this file
- *     contains references to other files, r2 will fail
- *
- * let r3 = new combine [ r2; r1 ]
- *   - r3 reads /dir/f.xml of the local file system by calling r2, and all
- *     other files by calling r1
- *)
-
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.5  2000/07/09 01:05:33  gerd
- *     New methode 'close_all' that closes the clones, too.
- *
- * Revision 1.4  2000/07/08 16:24:56  gerd
- *     Introduced the exception 'Not_resolvable' to indicate that
- * 'combine' should not try the next resolver of the list.
- *
- * Revision 1.3  2000/07/06 23:04:46  gerd
- *     Quick fix for 'combine': The active resolver is "prefered",
- * but the other resolvers are also used.
- *
- * Revision 1.2  2000/07/04 22:06:49  gerd
- *     MAJOR CHANGE: Complete redesign of the reader classes.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_reader.mli:
- *
- * Revision 1.3  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.2  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.1  2000/03/13 23:41:54  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_types.ml b/helm/DEVEL/pxp/pxp/pxp_types.ml
deleted file mode 100644 (file)
index e8a8eac..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright 1999 by Gerd Stolpmann. See LICENSE for details.
- *)
-
-type ext_id =
-    System of string
-  | Public of (string * string)
-  | Anonymous
-
-
-type dtd_id =
-    External of ext_id
-  | Derived of ext_id
-  | Internal
-;;
-
-type content_model_type =
-    Unspecified
-  | Empty
-  | Any
-  | Mixed of mixed_spec list
-  | Regexp of regexp_spec
-
-and mixed_spec =
-    MPCDATA
-  | MChild of string
-
-and regexp_spec =
-    Optional of regexp_spec
-  | Repeated of regexp_spec
-  | Repeated1 of regexp_spec
-  | Alt of regexp_spec list
-  | Seq of regexp_spec list
-  | Child of string
-;;
-
-
-type att_type =
-    A_cdata
-  | A_id
-  | A_idref
-  | A_idrefs
-  | A_entity
-  | A_entities
-  | A_nmtoken
-  | A_nmtokens
-  | A_notation of string list
-  | A_enum of string list
-;;
-
-
-type att_default =
-    D_required
-  | D_implied
-  | D_default of string  (* The default value is already expanded *)
-  | D_fixed of string    (* The default value is already expanded *)
-;;
-
-
-type att_value =
-    Value of string
-  | Valuelist of string list
-  | Implied_value
-;;
-
-
-class type collect_warnings =
-  object 
-    method warn : string -> unit
-  end
-;;
-
-
-class drop_warnings =
-  object 
-    method warn (w:string) = ()
-  end
-;;
-
-
-type encoding = Netconversion.encoding;;
-
-type rep_encoding =
-  (* The subset of 'encoding' that may be used for internal representation
-   * of strings.
-   *)
-  [  `Enc_utf8       (* UTF-8 *)
-  |  `Enc_iso88591   (* ISO-8859-1 *)
-  ]
-;;
-
-
-exception Validation_error of string
-
-exception WF_error of string
-
-exception Error of string
-
-exception Character_not_supported
-
-exception At of (string * exn)
-
-exception Undeclared
-
-
-let rec string_of_exn x0 =
-  match x0 with
-      At (s, x) ->
-        s ^ string_of_exn x
-    | Validation_error s ->
-        "ERROR (Validity constraint): "  ^ s
-    | WF_error s ->
-        "ERROR (Well-formedness constraint): " ^ s
-    | Error s ->
-       "ERROR: " ^ s
-    | Character_not_supported ->
-        "RESTRICTION: Character not supported"
-    | Netconversion.Malformed_code ->
-        "ERROR: Bad character stream"
-    | Undeclared ->
-        "INFORMATION: Undeclared"
-    | Parsing.Parse_error ->
-       "SYNTAX ERROR"
-    | _ ->
-        "Other exception: " ^ Printexc.to_string x0
-;;
-
-
-type output_stream =
-    Out_buffer of Buffer.t
-  | Out_channel of out_channel
-  | Out_function of (string -> int -> int -> unit)
-;;
-
-
-let write os str pos len =
-  match os with
-      Out_buffer b -> Buffer.add_substring b str pos len
-    | Out_channel ch -> output ch str pos len
-    | Out_function f -> f str pos len
-;;
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.7  2000/08/14 22:24:55  gerd
- *     Moved the module Pxp_encoding to the netstring package under
- * the new name Netconversion.
- *
- * Revision 1.6  2000/07/27 00:41:15  gerd
- *     new 8 bit codes
- *
- * Revision 1.5  2000/07/16 18:31:09  gerd
- *     The exception Illegal_character has been dropped.
- *
- * Revision 1.4  2000/07/14 21:25:27  gerd
- *     Simplified the type 'collect_warnings'.
- *
- * Revision 1.3  2000/07/08 16:23:50  gerd
- *     Added the exception 'Error'.
- *
- * Revision 1.2  2000/07/04 22:14:05  gerd
- *     Implemented the changes of rev. 1.2 of pxp_types.mli.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_types.ml:
- *
- * Revision 1.7  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.6  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.5  2000/05/01 20:43:19  gerd
- *     New type output_stream; new function 'write'.
- *
- * Revision 1.4  1999/09/01 16:25:35  gerd
- *     Dropped Illegal_token and Content_not_allowed_here. WF_error can
- * be used instead.
- *
- * Revision 1.3  1999/08/15 02:22:33  gerd
- *     Added exception Undeclared.
- *
- * Revision 1.2  1999/08/14 22:14:58  gerd
- *     New class "collect_warnings".
- *
- * Revision 1.1  1999/08/10 00:35:52  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_types.mli b/helm/DEVEL/pxp/pxp/pxp_types.mli
deleted file mode 100644 (file)
index e8b4711..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright 1999 by Gerd Stolpmann. See LICENSE for details.
- *)
-
-
-type ext_id =
-    System of string
-  | Public of (string * string)
-  | Anonymous
-
-  (* external identifiers are either "system identifiers" (filenames or URLs),
-   * or "public identifiers" Public(id,sysid) where "id" is the representation
-   * of the public ID, and "sysid" a fallback system ID, or the empty string.
-   *
-   * New in PXP: Sometimes the external ID is not known. This case can be
-   * referred to as Anonymous ID.
-   *
-   * Encoding: The identifiers are _always_ encoded as UTF8 strings,
-   * regardless of whether another encoding is configured for the parser.
-   * TODO: umsetzen
-   *)
-
-
-type dtd_id =
-    External of ext_id       (* DTD is completely external *)
-  | Derived of ext_id        (* DTD is derived from an external DTD *)
-  | Internal                 (* DTD is completely internal *)
-;;
-
-type content_model_type =
-    Unspecified              (* A specification of the model has not yet been
-                             * found
-                             *)
-  | Empty                    (* Nothing is allowed as content *)
-  | Any                      (* Everything is allowed as content *)
-  | Mixed of mixed_spec list (* The contents consist of elements and PCDATA 
-                             * in arbitrary order. What is allowed in
-                             * particular is given as mixed_spec.
-                             *)
-  | Regexp of regexp_spec    (* The contents are elements following this regular
-                             * expression
-                             *)
-
-and mixed_spec =
-    MPCDATA                  (* PCDATA children are allowed *)
-  | MChild of string         (* This kind of Element is allowed *)
-
-and regexp_spec =
-    Optional of regexp_spec  (* subexpression? *)
-  | Repeated of regexp_spec  (* subexpression* *)
-  | Repeated1 of regexp_spec (* subexpression+ *)
-  | Alt of regexp_spec list  (* subexpr1 | subexpr2 | ... | subexprN *)
-  | Seq of regexp_spec list  (* subexpr1 , subexpr2 , ... , subexprN *)
-  | Child of string          (* This kind of Element is allowed here *)
-;;
-
-
-type att_type =
-    A_cdata                    (* CDATA *)
-  | A_id                       (* ID *)
-  | A_idref                    (* IDREF *)
-  | A_idrefs                   (* IDREFS *)
-  | A_entity                   (* ENTITY *)
-  | A_entities                 (* ENTiTIES *)
-  | A_nmtoken                  (* NMTOKEN *)
-  | A_nmtokens                 (* NMTOKENS *)
-  | A_notation of string list  (* NOTATION (name1 | name2 | ... | nameN) *)
-  | A_enum of string list      (* (name1 | name2 | ... | nameN) *)
-;;
-
-
-type att_default =
-    D_required           (* #REQUIRED *)
-  | D_implied            (* #IMPLIED *)
-  | D_default of string  (* <value> -- The value is already expanded *)
-  | D_fixed of string    (* FIXED <value> -- The value is already expanded *)
-;;
-
-
-type att_value =
-    Value of string           (* a single value *)
-  | Valuelist of string list  (* a list of values *)
-  | Implied_value             (* a value left out *)
-;;
-
-
-class type collect_warnings =
-  object 
-    method warn : string -> unit
-  end
-;;
-
-
-class drop_warnings : collect_warnings;;
-
-
-type encoding = Netconversion.encoding;;
-  (* We accept all encodings for character sets which are defined in
-   * Netconversion (package netstring).
-   *)
-
-type rep_encoding =
-  (* The subset of 'encoding' that may be used for internal representation
-   * of strings.
-   * Note: The following encodings are ASCII-compatible! This is an important
-   * property used throghout the whole PXP code.
-   *)
-  [ `Enc_utf8       (* UTF-8 *)
-  | `Enc_iso88591   (* ISO-8859-1 *)
-  ]
-;;
-
-
-exception Validation_error of string
-  (* Violation of a validity constraint *)
-
-exception WF_error of string
-  (* Violation of a well-formedness constraint *)
-
-exception Error of string
-  (* Other error *)
-
-exception Character_not_supported
-
-exception At of (string * exn)
-  (* The string is a description where the exn happened. The exn value can
-   * again be At(_,_) (for example, when an entity within an entity causes
-   * the error).
-   *)
-
-exception Undeclared
-  (* Indicates that declaration is available and because of this every kind
-   * of usage is allowed.
-   *)
-
-val string_of_exn : exn -> string
-  (* Converts a Markup exception into a readable string *)
-
-
-type output_stream =
-    Out_buffer of Buffer.t
-  | Out_channel of out_channel
-  | Out_function of (string -> int -> int -> unit)
-
-val write : output_stream -> string -> int -> int -> unit
-  (* write os s pos len: Writes the string to the buffer/channel/stream *)
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.8  2000/08/14 22:24:55  gerd
- *     Moved the module Pxp_encoding to the netstring package under
- * the new name Netconversion.
- *
- * Revision 1.7  2000/07/27 00:41:15  gerd
- *     new 8 bit codes
- *
- * Revision 1.6  2000/07/16 18:31:09  gerd
- *     The exception Illegal_character has been dropped.
- *
- * Revision 1.5  2000/07/16 16:34:21  gerd
- *     Updated comments.
- *
- * Revision 1.4  2000/07/14 21:25:27  gerd
- *     Simplified the type 'collect_warnings'.
- *
- * Revision 1.3  2000/07/08 16:23:50  gerd
- *     Added the exception 'Error'.
- *
- * Revision 1.2  2000/07/04 22:08:26  gerd
- *     type ext_id: New variant Anonymous. - The System and Public
- * variants are now encoded as UTF-8.
- *     collect_warnings is now a class type only. New class
- * drop_warnings.
- *     New functions  encoding_of_string and string_of_encoding.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from Markup_types.mli:
- *
- * Revision 1.7  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.6  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.5  2000/05/01 20:43:25  gerd
- *         New type output_stream; new function 'write'.
- *
- * Revision 1.4  1999/09/01 16:25:35  gerd
- *     Dropped Illegal_token and Content_not_allowed_here. WF_error can
- * be used instead.
- *
- * Revision 1.3  1999/08/15 02:22:40  gerd
- *         Added exception Undeclared.
- *
- * Revision 1.2  1999/08/14 22:15:17  gerd
- *         New class "collect_warnings".
- *
- * Revision 1.1  1999/08/10 00:35:52  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_utf8.ml b/helm/DEVEL/pxp/pxp/pxp_utf8.ml
deleted file mode 100644 (file)
index f0a9462..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-open Pxp_types;;
-open Pxp_lexer_types;;
-
-Pxp_lexers.init_utf8 
-  { lex_encoding         = `Enc_utf8;
-    scan_document        = Pxp_lex_document_utf8.scan_document;
-    scan_content         = Pxp_lex_content_utf8.scan_content;
-    scan_within_tag      = Pxp_lex_within_tag_utf8.scan_within_tag;
-    scan_document_type   = Pxp_lex_document_type_utf8.
-                            scan_document_type;
-    scan_declaration     = Pxp_lex_declaration_utf8.scan_declaration;
-    scan_content_comment  = Pxp_lex_misc_utf8.scan_content_comment;
-    scan_decl_comment     = Pxp_lex_misc_utf8.scan_decl_comment;
-    scan_document_comment = Pxp_lex_misc_utf8.scan_document_comment;
-    scan_ignored_section = Pxp_lex_name_string_utf8.scan_ignored_section;
-    scan_xml_pi          = Pxp_lex_misc_utf8.scan_xml_pi;
-    scan_dtd_string      = Pxp_lex_dtd_string_utf8.scan_dtd_string;
-    scan_content_string  = Pxp_lex_content_string_utf8.
-                            scan_content_string;
-    scan_name_string     = Pxp_lex_name_string_utf8.scan_name_string;
-    scan_only_xml_decl   = Pxp_lex_misc_utf8.scan_only_xml_decl;
-    scan_for_crlf        = Pxp_lex_misc_utf8.scan_for_crlf;
-  }
-;;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.3  2000/06/04 20:31:44  gerd
- *     Updated.
- *
- * Revision 1.2  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.1  2000/05/23 00:08:48  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_utf8.mli b/helm/DEVEL/pxp/pxp/pxp_utf8.mli
deleted file mode 100644 (file)
index 42cb033..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* This is a module without interface. Its initialization part sets up
- * the UTF-8 lexers.
- * Link with this module if you want to use the UTF-8 lexers!
- *)
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.1  2000/05/23 00:08:48  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_yacc.m2y b/helm/DEVEL/pxp/pxp/pxp_yacc.m2y
deleted file mode 100644 (file)
index 91de7cd..0000000
+++ /dev/null
@@ -1,2528 +0,0 @@
-(* $Id$ -*- tuareg -*-
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-open Parsing
-open Pxp_types
-open Pxp_lexer_types
-open Pxp_dtd
-open Pxp_entity
-open Pxp_document
-open Pxp_aux
-
-(* Some types from the interface definition: *)
-
-exception ID_not_unique
-
-class type [ 'ext ] index =
-object 
-  constraint 'ext = 'ext node #extension
-  method add : string -> 'ext node -> unit
-  method find : string -> 'ext node
-end
-
-
-type config =
-    { warner : collect_warnings;
-      errors_with_line_numbers : bool;
-      enable_pinstr_nodes : bool;
-      enable_super_root_node : bool;
-      enable_comment_nodes : bool;
-      encoding : rep_encoding;
-      recognize_standalone_declaration : bool;
-      store_element_positions : bool;
-      idref_pass : bool;
-      validate_by_dfa : bool;
-      accept_only_deterministic_models : bool;
-      debugging_mode : bool;
-    }
-
-type source =
-    Entity of ((dtd -> Pxp_entity.entity) * Pxp_reader.resolver)
-  | ExtID of (ext_id * Pxp_reader.resolver)
-
-
-type start_symbol =
-    Ext_document
-  | Ext_declarations
-  | Ext_element
-
-
-type context =
-    { mutable current : unit -> token;  (* get the current token *)
-      mutable get_next : unit -> token; (* go on to the next token; return it *)
-      mutable current_token : token;    (* This is the current token *)
-      mutable manager : entity_manager; (* The entity manager *)
-    }
-
-
-let make_context entity_manager =
-  let c =
-    { current = (fun _ -> assert false);
-      get_next = (fun _ -> assert false);
-      current_token = Eof;
-      manager = entity_manager;
-    }
-  in
-  (* Note that the function which is stored in get_next_ref can be changed
-   * as a side-effect when an entity is opened or closed. The function in
-   * c.get_next must be programmed such that always the current "get_next"
-   * function is executed.
-   *)
-  let get_next_ref = entity_manager # yy_get_next_ref in
-  c.current  <- (fun () -> c.current_token);
-  c.get_next <- (fun () -> let tok = !get_next_ref() in
-                          c.current_token <- tok;
-                          tok);
-  ignore(c.get_next());
-  c
-;;
-
-
-let from_channel ?system_encoding ?id:init_id ?fixenc ch =
-
-  (* Reading from a channel works by modifying the algorithm of
-   * resolve_as_file.
-   *)
-
-  let url_syntax =      (* A syntax suitable for "file" URLs *)
-    { Neturl.null_url_syntax with
-       Neturl.url_enable_scheme = Neturl.Url_part_allowed;
-       Neturl.url_enable_host   = Neturl.Url_part_allowed;
-       Neturl.url_enable_path   = Neturl.Url_part_required;
-       Neturl.url_accepts_8bits = true;
-    } 
-  in
-
-  let an_url =
-    Neturl.make_url
-      ~scheme: "file"
-      ~host:   ""
-      ~path:   [ "" ]
-      url_syntax
-  in
-
-  let init_channel_done = ref false in
-    (* Whether the first access to this source has already happened. *)
-
-  (* The task of url_of_id is:
-   * - When it is called the first time, and no init_id is present,
-   *   the URL file:/// is passed back (an_url). This forces that
-   *   absolute path names /path/dir/... will be interpreted as 
-   *   file path names. (But relative path names will not work.)
-   * - If an init_id has been passed, we can assume that the opened URL
-   *   is exactly this init_id. By raising Not_competent it is indicated
-   *   that the standard method is to be used for the interpretation of
-   *   the URL.
-   * - Otherwise, the channel is already being read, and thus cannot again
-   *   opened. (This case is handled in channel_of_url.)
-   *)
-
-  let url_of_id xid =
-    if !init_channel_done then begin
-      (* Use the normal way of determining the URL of the ID: *)
-      raise Pxp_reader.Not_competent
-    end
-    else begin
-      match init_id with
-         None -> 
-           an_url
-             (* If the channel is not associated with any URL: Simply pass 
-              * the URL file:/// back. 
-              *)
-       | Some the_init_id ->
-           assert (the_init_id = xid);
-           raise Pxp_reader.Not_competent
-             (* If the channel is associated with a URL, the corresponding
-              * ID must be passed when the first invocation happens.
-              *)
-    end
-  in
-
-  (* The task of channel_of_url:
-   * - If it is called the first time ("else"), the channel is returned
-   * - Otherwise, the channel is already being read, and thus cannot again
-   *   opened. By raising Not_competent it is signaled that the 
-   *   resolve_as_file object must not continue to open the URL.
-   *)
-
-  let channel_of_url url =
-    if !init_channel_done then
-      raise Pxp_reader.Not_competent
-    else begin
-      init_channel_done := true;
-      ch, fixenc
-    end
-  in
-
-  let r =
-    new Pxp_reader.resolve_as_file 
-      ?system_encoding:system_encoding
-      ~url_of_id:url_of_id
-      ~channel_of_url:channel_of_url
-      ()
-  in
-
-  let init_xid =
-    match init_id with
-       None   -> Anonymous
-      | Some id -> 
-         (* Note: 'id' may be illegal (malformed); in this case, the first
-          * invocation of url_of_id will raise Not_competent, and the 'open_in'
-          * method will fail.
-          *)
-         id
-  in
-
-  ExtID(init_xid, r)
-;;
-
-
-let from_file ?system_encoding utf8_filename =
-  
-  let r =
-    new Pxp_reader.resolve_as_file 
-      ?system_encoding:system_encoding
-      ()
-  in
-
-  let utf8_abs_filename =
-    if utf8_filename <> "" && utf8_filename.[0] = '/' then
-      utf8_filename
-    else
-      Sys.getcwd() ^ "/" ^ utf8_filename
-  in
-
-  let syntax = { Neturl.ip_url_syntax with Neturl.url_accepts_8bits = true } in
-  let url = Neturl.make_url 
-             ~scheme:"file" 
-             ~host:"localhost" 
-             ~path:(Neturl.split_path utf8_abs_filename) 
-             syntax
-  in
-
-  let xid = System (Neturl.string_of_url url) in
-    
-
-  ExtID(xid, r)
-;;
-
-
-let from_string ?fixenc s =
-  let r =
-    new Pxp_reader.resolve_read_this_string ?fixenc:fixenc s in
-  ExtID(Anonymous, r)
-;;
-
-
-(**********************************************************************)
-
-class ['ext] parser_object
-  init_doc init_dtd init_extend_dtd init_config init_resolver init_spec 
-  init_process_xmldecl transform_dtd id_index
-  =
-  object (self)
-
-      (* Note that the 'ext parameter has been the motivation to make the
-       * parser a class.
-       *)
-
-    val mutable dtd = init_dtd
-       (* The DTD being parsed; or the DTD currently assumed *)
-
-    val extend_dtd = init_extend_dtd
-       (* Whether the DTD should be extended by ELEMENT, ATTLIST, and
-        * NOTATION declarations or not. (True for validating mode,
-        * false for well-formedness mode.)
-        *)
-
-    val transform_dtd = transform_dtd
-        (* A function transforming the DTD *)
-
-    val id_index = (id_index : 'ext index option)
-        (* The ID index or None *)
-
-    val process_xmldecl = init_process_xmldecl
-        (* Whether the XML declaration is parsed and the found XML version
-        * and standalone declaration are passed to 'doc'.
-        *)
-
-    val lexerset = Pxp_lexers.get_lexer_set (init_config.encoding)
-
-    val doc = init_doc
-        (* The current document *)
-
-    method doc = (doc : 'ext document)
-
-    val resolver = init_resolver
-        (* The resolver for external IDs *)
-
-    val config = init_config
-        (* The current configuration *)
-
-    val elstack = (Stack.create() : ('ext node * entity_id) Stack.t)
-       (* The element stack containing all open elements, i.e. elements that
-       * have begun by a start tag but that have not been finished (end tag).
-       * If the parser sees a start tag, it creates the element and pushes it
-       * on top of this stack. If the parser recognizes an end tag, it pulls
-       * one element from the stack and checks if it has the same name as
-       * given with the end tag.
-       *
-       * At initialization time, a special element is pushed on the stack,
-       * the so-called super root. It is always the bottommost
-       * element of the stack, and serves as a guard.
-       * [See "initializer" below.]
-       *)
-                   
-    method current =
-        (* Get the top element of the element stack *)
-        try
-          fst(Stack.top elstack)
-       with
-           Stack.Empty -> assert false
-               (* Not possible, because the super root is always the element 
-                * at the bottom of the stack.
-                *)
-
-    val mutable n_tags_open = 0
-       (* Number of begin tags that have been parsed and whose corresponding
-        * end tags have not yet been parsed
-        *)
-
-    val mutable p_internal_subset = false
-        (* true while parsing the internal subset - there are some additional
-        * constraints for internal subsets, and because of this it must
-        * be known whether the current declaration is contained in the
-        * internal or external subset of the DTD.
-        *)
-
-    val mutable root = None
-        (* Contains the root element (topmost element) while it is being parsed
-        * and after it has been parsed.
-        * This variable is None before the root element is seen.
-        *)
-
-    method root = root
-
-    val spec = init_spec
-        (* A hashtable that contains exemplar objects for the various element
-        * types. If an element is parsed, the exemplar is looked up and
-        * "cloned" (by the "create" method)
-        *)
-
-    val mutable current_data = []
-       (* Collects character data. *)
-
-    method collect_data s =
-        (* Collects the character material 's' *)
-        current_data <- s :: current_data
-
-    method save_data =
-      (* Puts the material collected in 'current_data' into a new
-       * node, and appends this node as new sub node to 'current'
-       *)
-      match current_data with
-         [] ->
-           ()
-       | [ str ] ->
-           if str <> "" then
-             self # current # add_node (create_data_node spec dtd str);
-           current_data <- []
-       | _ ->
-           let count = List.fold_left 
-                         (fun acc s -> acc + String.length s) 
-                         0
-                         current_data in
-           let str = String.create count in
-           let pos = ref count in
-           List.iter
-             (fun s ->
-                let l = String.length s in
-                pos := !pos - l;
-                String.blit
-                ~src:s
-                ~src_pos:0
-                ~dst:str
-                ~dst_pos:(!pos)
-                ~len:l
-             )
-             current_data;
-           assert(!pos = 0);
-           if str <> "" then
-             self # current # add_node (create_data_node spec dtd str);
-           current_data <- []
-             
-
-    method only_whitespace data =
-       (* Checks that the string "data" contains only whitespace. On failure,
-        * Validation_error is raised.
-        *)
-      let lexbuf = Lexing.from_string data in
-      let t1 = lexerset.scan_name_string lexbuf in
-      if t1 <> Ignore then
-       raise(WF_error("Data not allowed here"));
-      let t2 = lexerset.scan_name_string lexbuf in
-      if t2 <> Eof then
-       raise(WF_error("Data not allowed here"));
-      ()
-
-    initializer
-      (* CHECKS: *)
-      if config.encoding <> dtd # encoding then
-       failwith("Encoding mismatch");
-
-      (* --- Initialize 'elstack': Push the super-root on the stack. *)
-      let super_root = 
-       if config.enable_super_root_node then
-         create_super_root_node spec dtd 
-       else
-         (* because spec may not contain an exemplar for the super root: *)
-         create_no_node spec dtd
-      in
-      (* Move the super root or the emulation to the stack: *)
-      Stack.push (super_root, (self :> entity_id)) elstack;
-
-
-
-      (********* Here the method "parse" begins. The grammar below is
-       *         transformed to a local function of this method
-       *)
-
-      method parse context start_symbol =
-
-       let parse_ignored_section yy_current yy_get_next =
-         (* A special parser which should be used after <![IGNORE[.
-          * It parses until the corresponding ]]> is found.
-          *)
-
-          while yy_current() = Ignore do
-           ignore(yy_get_next());
-         done;
-
-         ( match yy_current() with
-             Conditional_body _ -> ()
-           | _                  -> raise Parsing.Parse_error;
-         );
-
-         let en = context.manager # current_entity in
-         let llev = ref 1 in
-         while !llev >= 1 do
-           let igntok = en # next_ignored_token in
-           (* next_ignored_token: uses a special lexer that only
-            * recognizes Conditional_begin and Conditional_end;
-            * other character combinations are ignored.
-            *)
-           (* NOTE: next_ignored_token works much like yy_get_next,
-            * but it does not set the current token!
-            *)
-           match igntok with
-               Conditional_begin _ ->
-                 llev := !llev + 1
-             | Conditional_end _ ->
-                 llev := !llev - 1;
-                 (* Because the loop may be exited now: *)
-                 context.current_token <- igntok;
-             | (End_entity | Eof) ->
-                 raise Parsing.Parse_error
-             | _ ->
-                 ()
-         done;
-         
-       in
-
-
-       let check_and_parse_xmldecl xmldecl =
-         if process_xmldecl then begin
-           let v, _, s = decode_doc_xml_pi (decode_xml_pi xmldecl) in
-           check_version_num v;
-           doc # init_xml_version v;
-           let v = match s with
-               None -> false
-             | Some "yes" -> true
-             | Some "no" -> false
-             | _ -> raise (WF_error("Illegal 'standalone' declaration"))
-           in
-           if config.recognize_standalone_declaration then 
-             dtd # set_standalone_declaration v
-         end
-       in
-
-       let recode_utf8 s =
-         (* Recode 's' to UTF-8 *)
-         if config.encoding = `Enc_utf8 then
-           s   (* No recoding necessary *)
-         else
-           Netconversion.recode_string 
-             ~in_enc:(config.encoding :> encoding) ~out_enc:`Enc_utf8 s
-       in
-
-       
-%%
-
-/* The following grammar looks similar to ocamlyacc grammars, but 
- * ocamlyacc is actually not used to transform the grammar into a parser. 
- * Instead, the parser generator m2parsergen is applied.
- *
- * The format of the grammar is different (see m2parsergen/README), 
- * but I hope that you can understand most features immediately. 
- *
- * The type of the parser is different: m2parsergen creates a top-down
- * parser while ocamlyacc generates a LALR-1 parser.
- *
- * The way the generated code is called is different: ocamlyacc produces
- * lots of top-level definitions whereas m2parsergen generates only 
- * a local let-in-phrase. This is explained in the already mentioned
- * README file.
- */ 
-
-/* See Pxp_types.ml for comments to the various tokens */
-
-%token Begin_entity
-%token End_entity
-%token Comment_begin
-%token Comment_end
-%token Ignore
-%token Eq
-%token Rangle
-%token Rangle_empty
-%token <> Conditional_begin
-%token <> Conditional_body
-%token <> Conditional_end
-%token Percent
-%token Plus
-%token Star
-%token Bar
-%token Comma
-%token Qmark
-%token Pcdata
-%token Required
-%token Implied
-%token Fixed
-%token Eof
-
-%token <> Comment_material
-%token <> Doctype
-%token <> Doctype_rangle
-%token <> Dtd_begin
-%token <> Dtd_end
-%token <> Decl_element
-%token <> Decl_attlist
-%token <> Decl_entity
-%token <> Decl_notation
-%token <> Decl_rangle
-%token <> Lparen
-%token <> Rparen
-%token <> RparenPlus
-%token <> RparenStar
-%token <> RparenQmark
-
-%token <> Tag_beg
-%token <> Tag_end
-
-%token <> PI
-%token <> PI_xml
-%token <> Cdata
-%token <> CRef
-%token <> ERef
-%token <> PERef
-%token <> CharData
-%token <> LineEnd
-%token <> Name
-%token <> Nametoken
-%token <> Attval
-%token <> Attval_nl_normalized
-%token <> Unparsed_string
-
-/* START SYMBOLS:
- *
- * "ext_document":       parses a complete XML document (i.e. containing a
- *                       <!DOCTYPE..> and an element)
- * "ext_declarations":   parses an "external DTD subset", i.e. a sequence
- *                       of declarations
- * "ext_element":        parses a single element (no <!DOCTYPE...> allowed);
- *                       the element needs not to be the root element of the
- *                       DTD
- *
- * The functions corresponding to these symbols return always () because
- * they only have side-effects.
- */
-
-/* SOME GENERAL COMMENTS:
- *
- * The parser does not get its tokens from the lexers directly. Instead of
- * this, there is an entity object between the parser and the lexers. This
- * object already handles:
- *
- * - References to general and parameter entities. The token stream is
- *   modified such that tokens automatically come from the referenced entities.
- *   External parameter entities and all general entities are embraced by
- *   the two special tokens Begin_entity and End_entity. The parser must
- *   check that these braces are correctly nested.
- */
-
-%%
-
-
-ext_document():
-  Begin_entity 
-  doc_xmldecl_then_misc_then_prolog_then_rest() End_entity
-    {{
-      if n_tags_open <> 0 then
-       raise(WF_error("Missing end tag"))
-    }}
-
-
-/* In the following rule, we must find out whether there is an XML declaration
- * or not, and directly after that either "process_xmldecl" or 
- * "process_missing_xmldecl" of the current entity must be called.
- * AND IT MUST BE DIRECTLY! Because of this, the invocation is carried out
- * in the "$" clause immediately following the first token.
- *
- * TODO: This is not enough. The first token may be a tag, and the tag
- * may already contain non-ASCII characters. (But in this case, the resolvers
- * assume UTF8, and they are right...)
- */
-
-doc_xmldecl_then_misc_then_prolog_then_rest():
-  pl:PI_xml 
-  $ {{ context.manager # current_entity # process_xmldecl pl; 
-       check_and_parse_xmldecl pl;
-    }}
-  misc()* doc_prolog_then_rest()
-    {{ () }}
-
-| $ {{ context.manager # current_entity # process_missing_xmldecl; }}
-  misc() misc()* doc_prolog_then_rest()
-    {{ () }}
-
-| $ {{ context.manager # current_entity # process_missing_xmldecl; }}
-  doctypedecl() misc()* contents_start()
-    {{ () }}
-
-| $ {{ context.manager # current_entity # process_missing_xmldecl; }}
-  contents_start()
-    {{ () }}
-
-
-doc_prolog_then_rest():
-  doctypedecl() misc()* contents_start()
-    {{ () }}
-| contents_start() 
-    {{ () }}
-
-ext_element():
-  Begin_entity el_xmldecl_then_misc_then_rest() End_entity
-    {{
-      if n_tags_open <> 0 then
-       raise(WF_error("Missing end tag"))
-    }}
-
-
-/* See comment for doc_mldecl_then_misc_then_prolog_then_rest. */
-
-el_xmldecl_then_misc_then_rest():
-  pl:PI_xml
-  $ {{ context.manager # current_entity # process_xmldecl pl; }}
-  misc()* contents_start() 
-    {{ () }}
-
-| $ {{ context.manager # current_entity # process_missing_xmldecl; }}
-  misc() misc()* contents_start() 
-    {{ () }}
-
-| $ {{ context.manager # current_entity # process_missing_xmldecl; }}
-  contents_start()
-    {{ () }}
-
-
-ext_declarations():
-  /* Parses a sequence of declarations given by an entity. As side-effect,
-   * the parsed declarations are put into the dtd object.
-   */
-  Begin_entity decl_xmldecl_then_rest() 
-   {{ () }}
-| Eof
-   {{ () }}
-
-
-decl_xmldecl_then_rest():
-  /* Note: This rule is also called from declaration()! */
-  pl:PI_xml
-  $ {{ context.manager # current_entity # process_xmldecl pl; 
-    }}
-  declaration()* End_entity
-   {{ () }}
-
-| $ {{ context.manager # current_entity # process_missing_xmldecl; }}
-  declaration() declaration()* End_entity
-   {{ () }}
-
-| $ {{ context.manager # current_entity # process_missing_xmldecl; }}
-  End_entity
-   {{ () }}
-
-
-misc():
-  pi()
-    {{ () }}
-| data: CharData
-    /* In this context, the lexers sometimes do not recognize white space; 
-     * instead CharData tokens containing white space are delivered.
-     */
-    {{ self # only_whitespace data }}
-| Ignore
-    {{ () }}
-| comment()
-    {{ () }}
-
-
-/********************* DOCUMENT TYPE DECLARATION *************************/
-
-doctypedecl():
-  /* parses from <!DOCTYPE to >. As side-effect, first the declarations of
-   * the internal DTD (if any) are put into !!on_dtd, then the declarations
-   * of the external DTD (if any) are put into this DTD object.
-   */
-  doctype_entid:  Doctype 
-             ws:  Ignore Ignore*
-                  doctypedecl_material (doctype_entid)
-    {{ () }}
-  ? {{ match !yy_position with
-          "ws" -> raise(WF_error("Whitespace is missing after `DOCTYPE'"))
-        | _    -> raise(WF_error("Bad DOCTYPE declaration"))
-     }}
-
-
-/* TRICK: 
- *   ws: Ignore? Ignore* 
- * is meant seriously. The effect is that ws becomes a boolean variable
- * which is true if there is an Ignore token and false otherwise.
- * This construct is faster than just 
- *   ws: Ignore*
- * in which case ws becomes an integer variable containing the number of
- * Ignore tokens. Counting the number of tokens is slower than only checking
- * the existence.
- *
- * We need the information whether there is an Ignore token (representing
- * white space), because white space is only obligatory if also an identifier
- * for the external subset is parsed; this conditional syntax constraint is 
- * simply programmed in the body of the grammar rule.
- */
-
-doctypedecl_material(doctype_entid):
-  root_name:             Name
-  ws:                    Ignore? Ignore*
-  external_subset:       external_id()? 
-                         Ignore*
-  internal_subset:       internal_dtd()? 
-                         Ignore*
-  doctype_rangle_entid:  Doctype_rangle
-    {{ 
-      if doctype_entid != doctype_rangle_entid then
-       raise (Validation_error("Entities not properly nested with DOCTYPE declaration"));
-      dtd # set_root root_name;
-      begin match external_subset, internal_subset with
-         None, None      -> ()         (* no DTD means no ID *)
-       | None, Some _    -> dtd # set_id Internal
-       | Some id, None   -> dtd # set_id (External id)
-       | Some id, Some _ -> dtd # set_id (Derived id)
-      end;
-      (* Get now the external doctype declaration. Note that the internal
-       * subset has precedence and must be read first.
-       *)
-      begin match external_subset with
-         None -> ()
-       | Some id ->
-           if not ws then
-             raise(WF_error("Whitespace is missing after `DOCTYPE " ^ 
-                            root_name ^ "'"));
-           let r' = resolver # clone in
-           let pobj =
-             new parser_object
-               (new document config.warner)
-               dtd
-               extend_dtd
-               config
-               r'
-               spec
-               process_xmldecl
-               (fun x -> x)
-               None
-           in
-           let en = new external_entity r' dtd "[dtd]"
-                        config.warner id false config.errors_with_line_numbers
-                        config.encoding
-           in
-           en # set_debugging_mode (config.debugging_mode);
-           let mgr = new entity_manager en in
-           en # open_entity true Declaration;
-           try
-             let context = make_context mgr in
-             pobj # parse context Ext_declarations;
-             ignore(en # close_entity);
-           with
-               error ->
-                 ignore(en # close_entity);
-                 r' # close_all;
-                 let pos = mgr # position_string in
-                 raise (At(pos, error))
-      end;
-      dtd # validate
-    }}
-  ? {{
-       match !yy_position with
-          "doctype_rangle_entid" -> raise(WF_error("`>' expected"))
-        | _                      -> raise(WF_error("Bad DOCTYPE declaration"))
-    }}
-
-/* Note that there are no keywords for SYSTEM or PUBLIC, as these would
- * be difficult to recognize in the lexical contexts. Because of this, 
- * SYSTEM/PUBLIC is parsed as name, and the rule for everything after
- * SYSTEM/PUBLIC is computed dynamically.
- */
-
-external_id():
-  tok:Name 
-  $ {{ 
-       let followup = 
-        match tok with
-            "SYSTEM" -> parse_system_id
-                           (* Apply the rule system_id (below) to parse the
-                           * rest of the ID 
-                           *)
-          | "PUBLIC" -> parse_public_id
-                           (* Apply the rule public_id (below) to parse the
-                           * rest of the ID 
-                           *)
-          | _        -> raise(WF_error("SYSTEM or PUBLIC expected"))
-       in
-     }}
-  ws:Ignore Ignore*
-  r:[followup]()
-    {{ r }}
-  ? {{ match !yy_position with
-          "ws" -> raise(WF_error("Whitespace is missing after " ^ tok))
-        | _    -> raise(WF_error("Bad SYSTEM or PUBLIC identifier"))
-    }}
-
-
-system_id():
-  str:Unparsed_string 
-    {{ System (recode_utf8 str) }}
-
-
-public_id():
-  str1: Unparsed_string 
-    ws: Ignore Ignore*
-  str2: Unparsed_string
-    {{ check_public_id str1;
-       Public(recode_utf8 str1, recode_utf8 str2)
-    }}
-  ? {{ match !yy_position with
-          "ws" -> raise(WF_error("Whitespace is missing between the literals of the PUBLIC identifier"))
-        | _    -> raise(WF_error("Bad PUBLIC identifier"))
-    }}
-
-
-/* The internal subset: "[" declaration* "]". While parsing the declarations
- * the object variable p_internal_subset must be true; however, if there
- * are entity references, this variable must be reset to false during
- * the entity. (See the rule for "declaration" below.)
- */
-
-internal_dtd():
-  dtd_begin_entid:    internal_dtd_begin() 
-                      declaration()* 
-  dtd_end_entid:      internal_dtd_end()
-    {{ 
-      if dtd_begin_entid != dtd_end_entid then
-       raise(Validation_error("Entities not properly nested with internal DTD subset"))
-    }}
-  ? {{ match !yy_position with
-          "dtd_end_entid" -> raise(WF_error("`]' expected"))
-        | _               -> raise(WF_error("Bad internal DTD subset"))
-    }}
-
-
-internal_dtd_begin():
-  Dtd_begin
-    {{ assert (not p_internal_subset);
-       p_internal_subset <- true }}
-
-
-internal_dtd_end():
-  Dtd_end
-    {{ assert p_internal_subset;
-       p_internal_subset <- false }}
-
-
-declaration():
-  /* Parses a single declaration (or processing instruction). As side-effect
-   * the parsed declaration is stored into the dtd object.
-   */
-  elementdecl()
-    {{ () }}
-| attlistdecl()
-    {{ () }}
-| entid:Decl_entity ws:Ignore Ignore* e:entitydecl(entid)
-    {{ () }}
-  ? {{ match !yy_position with
-          "ws" -> raise(WF_error("Whitespace is missing after ENTITY")) 
-        | "e"  -> raise(WF_error("Name or `%' expected"))
-        | _    -> raise(WF_error("Bad entity declaration"))
-    }}
-| notationdecl()
-    {{ () }}
-| pi: PI
-    {{ let target, value = pi in
-       let pi = new proc_instruction target value config.encoding in
-       dtd # add_pinstr pi
-    }}
-| Ignore
-    {{ () }}
-| Comment_begin Comment_material* ce:Comment_end
-    {{ () }}
-  ? {{ match !yy_position with
-          "ce" -> raise(WF_error("`-->' expected"))
-        | _    -> raise(WF_error("Bad comment"))
-    }}
-| Begin_entity
-  $ {{ (* Set 'p_internal_subset' to 'false' until the matching 'end_entity'
-       * rule is parsed. This allows unrestricted usage of parameter entities
-       * within declarations of internal entities.
-       *)
-       let old_p_internal_subset = p_internal_subset in
-       p_internal_subset <- false;
-    }}
-  decl_xmldecl_then_rest()
-    {{ (* Restore the old value of 'p_internal_subset'. *)
-       p_internal_subset <- old_p_internal_subset;
-       ()
-    }}
-| begin_entid:Conditional_begin
-  $ {{ (* Check whether conditional sections are allowed at this position. *)
-       if p_internal_subset then 
-        raise(WF_error("Restriction of the internal subset: Conditional sections not allowed"));
-     }}
-  Ignore*
-  cond:conditional_section()  end_entid:Conditional_end
-    {{ (* Check whether Conditional_begin and Conditional_end are in the same
-       * entity. (This restriction is explained in the file SPECS.)
-       *)
-       if begin_entid != end_entid then
-        raise(Validation_error("The first and the last token of conditional sections must be in the same entity (additional restriction of this parser)"));
-    }}
-  ? {{ match !yy_position with
-          "end_entid" -> raise(WF_error("`>]>' expected"))
-        | "cond"      -> raise(WF_error("INCLUDE or IGNORE expected"))
-        | _           -> raise(WF_error("Bad conditional section"))
-    }}
-
-/* The tokens INCLUDE/IGNORE are scanned as names, and the selection of the
- * right parsing rule is dynamic.
- * Note that parse_ignored_section is not defined by a grammar rule but
- * by a conventional let-binding above.
- */
-
-conditional_section():
-  include_or_ignore:Name
-  $ {{ let parsing_function =
-        match include_or_ignore with
-            "INCLUDE"  -> parse_included_section
-                           (* invoke rule "included_section" below *)
-          | "IGNORE"   -> parse_ignored_section
-                           (* invoke function "parse_ignored_section" *)
-          | _          -> raise(WF_error("INCLUDE or IGNORE expected"))
-       in
-    }}
-  [ parsing_function ] ()  
-    {{ () }}
-  ? {{ raise(WF_error("Bad conditional section")) }}
-
-included_section():
-  Conditional_body declaration()*  
-    {{ () }}
-| Ignore Ignore* Conditional_body declaration()*  
-    {{ () }}
-
-
-/*************************** ELEMENT DECLARATIONS ********************/
-
-elementdecl():
-  /* parses <!ELEMENT ... >. Puts the parsed element type as side-effect into
-   * dtd.
-   */
-  decl_element_entid:      Decl_element 
-  $ {{ let extdecl = context.manager # current_entity_counts_as_external in
-     }}
-  ws1:                     Ignore Ignore*
-  name:                    Name 
-  ws2:                     Ignore Ignore*
-  content_model:           contentspec() 
-                           Ignore*
-  decl_rangle_entid:       Decl_rangle
-    {{
-      if decl_element_entid != decl_rangle_entid then
-       raise (Validation_error "Entities not properly nested with ELEMENT declaration");
-      if extend_dtd then begin
-       let el = new dtd_element dtd name in
-       (* It is allowed that an <!ATTLIST...>  precedes the corresponding
-        * <!ELEMENT...>. Because of this it is possible that there is already
-        * an element called 'name' in the DTD, and we only must set the content
-        * model of this element.
-        *)
-       try
-         dtd # add_element el;
-         el # set_cm_and_extdecl content_model extdecl;
-       with
-           Not_found ->  (* means: there is already an element 'name' *)
-             let el' = dtd # element name in
-             el' # set_cm_and_extdecl content_model extdecl;
-              (* raises Validation_error if el' already has a content model *)
-      end
-    }}
-  ? {{ match !yy_position with
-          ("ws1"|"ws2")   -> raise(WF_error("Whitespace is missing"))
-        | "name"          -> raise(WF_error("The name of the element is expected here"))
-        | "content_model" -> raise(WF_error("Content model expression expected"))
-        | "decl_rangle_entid" -> raise(WF_error("`>' expected"))
-        | _                   -> raise(WF_error("Bad element type declaration"))
-    }}
-
-contentspec():
-  /* parses a content model and returns it (type content_model_type) */
-  name: Name   /* EMPTY or ANY */
-    {{ match name with
-         "EMPTY" -> Empty
-       | "ANY"   -> Any
-       | _       -> raise(WF_error("EMPTY, ANY, or a subexpression expected"))
-    }}
-| entid:Lparen  Ignore*  term:mixed_or_regexp(entid)
-    {{ term }}
-  ? {{ raise(WF_error("Bad content model expression")) }}
-
-
-/* Many of the following rules have an lparen_entid argument. This is the
- * internal ID of the entity containing the corresponding left parenthesis;
- * by comparing it with the ID of the entity of the right parenthesis the
- * contraint is implemented that both parentheses must be in the same entity.
- */
-
-mixed_or_regexp(lparen_entid):
-  re: choice_or_seq(lparen_entid)
-    {{ Regexp re }}
-| m: mixed(lparen_entid)
-    {{ m }}
-
-
-multiplier():
-  /* returns one of the multiplier symbols (?,*,+) */
-  Plus
-    {{ Plus }}
-| Star
-    {{ Star }}
-| Qmark
-    {{ Qmark }}
-
-
-mixed (lparen_entid) :
-                   Pcdata 
-                   Ignore*
-  material:        mixed_alternatives_top()
-    {{ 
-      let rest, rparen_entid = material in
-      if lparen_entid != rparen_entid then
-       raise (Validation_error "Entities not properly nested with parentheses");
-      Mixed (MPCDATA :: rest)
-    }}
-  ? {{ raise(WF_error("Bad content model expression")) }}
-
-
-mixed_alternatives_top():
-  entid: Rparen
-    {{ [], entid }}
-| entid: RparenStar
-    {{ [], entid }}
-| Bar Ignore* name:Name Ignore* names:mixed_alternative()* entid:RparenStar
-    {{ 
-       (MChild name :: names), entid
-    }}
-  ? {{ match !yy_position with
-          "name"  -> raise(WF_error("Name expected"))
-        | "entid" -> raise(WF_error("`)*' expected"))
-        | _       -> raise(WF_error("Bad content model expression"))
-    }}
-
-
-mixed_alternative() :
-  Bar Ignore* name:Name Ignore*
-    {{ MChild name }}
-  ? {{ match !yy_position with
-          "name" -> raise(WF_error("Name expected"))
-        | _      -> raise(WF_error("Bad content model expression"))
-    }}
-
-
-
-choice_or_seq (lparen_entid):
-  /* parses either a regular expression, or a mixed expression. Returns
-   * Mixed spec or Regexp spec (content_model_type).
-   * Which kind of expression (regexp or mixed) is being read is recognized
-   * after the first subexpression has been parsed; the other subexpressions
-   * must be of the same kind.
-   */
-  re:     cp() 
-          Ignore*
-  factor: choice_or_seq_factor()
-    {{
-      let (finalmark,subexpr), rparen_entid = factor in
-      if lparen_entid != rparen_entid then
-       raise (Validation_error "Entities not properly nested with parentheses");
-      (* Check that the other subexpressions are "regexp", too, and
-       * merge them with the first.
-       *)
-      let re' =
-       match subexpr with
-           Alt []  ->  re
-         | Alt alt -> Alt (re :: alt)
-         | Seq seq -> Seq (re :: seq)
-         | _       -> assert false
-      in
-      (* Interpret the finalmark. *)
-      match finalmark with
-         Ignore -> re'
-       | Plus   -> Repeated1 re'
-       | Star   -> Repeated re'
-       | Qmark  -> Optional re'
-       | _      -> assert false
-    }}
-  ? {{ raise(WF_error("Bad content model expression")) }}
-
-choice_or_seq_factor():
-  /* Parses "|<subexpr>|...)" or ",<subexpr>,...)", both forms optionally
-   * followed by ?, *, or +.
-   * Returns ((finalmark, expr), rparen_entid), where
-   * - finalmark is the character after the right parenthesis or Ignore
-   * - expr is either
-   *   Alt []              meaning that only ")" has been found
-   *   Alt non_empty_list  meaning that the subexpressions are separated by '|'
-   *   Seq non_empty_list  meaning that the subexpressions are separated by ','
-   */
-  entid:Rparen
-    {{ (Ignore, Alt []), entid }}
-| entid:RparenPlus
-    {{ (Plus, Alt []), entid }}
-| entid:RparenStar
-    {{ (Star, Alt []), entid }}
-| entid:RparenQmark
-    {{ (Qmark, Alt []), entid }}
-| Bar Ignore* re:cp() Ignore* factor:choice_or_seq_factor()
-    {{ 
-      let (finalmark, subexpr), rparen_entid = factor in
-      begin match subexpr with
-         Alt []  -> (finalmark, (Alt [re])), rparen_entid
-       | Alt alt -> (finalmark, (Alt (re :: alt))), rparen_entid
-       | _       -> raise(WF_error("It is not allowed to mix alternatives and sequences"))
-      end
-    }}
-  ? {{ raise(WF_error("Bad content model expression")) }}
-| Comma Ignore* re:cp() Ignore* factor:choice_or_seq_factor()
-    {{
-      let (finalmark, subexpr), rparen_entid = factor in
-      begin match subexpr with
-         Alt []  -> (finalmark, (Seq [re])), rparen_entid
-       | Seq seq -> (finalmark, (Seq (re :: seq))), rparen_entid
-       | _       -> raise(WF_error("It is not allowed to mix alternatives and sequences"))
-      end
-    }}
-  ? {{ raise(WF_error("Bad content model expression")) }}
-
-cp():
-  /* parse either a name, or a parenthesized subexpression "(...)"  */
-  name:Name  m:multiplier()?
-    {{ match m with
-         None       -> Child name
-       | Some Plus  -> Repeated1 (Child name)
-       | Some Star  -> Repeated  (Child name)
-       | Some Qmark -> Optional  (Child name)
-       | _          -> assert false
-    }}
-  ? {{ raise(WF_error("Bad content model expression")) }}
-| entid:Lparen Ignore* m:choice_or_seq(entid)
-    {{ m }}
-  ? {{ raise(WF_error("Bad content model expression")) }}
-
-
-/********************* ATTRIBUTE LIST DECLARATION ***********************/
-
-attlistdecl():
-  /* parses <!ATTLIST ... >. Enters the attribute list in dtd as side-
-   * effect.
-   */
-  decl_attlist_entid: Decl_attlist 
-  $ {{ let extdecl = context.manager # current_entity_counts_as_external in
-    }}
-  ws1:                Ignore Ignore*
-  el_name:            Name 
-  ws:                 Ignore? Ignore*
-  factor:             attdef_factor()
-    {{ 
-      let at_list, decl_rangle_entid = factor in
-
-      if decl_attlist_entid != decl_rangle_entid then
-       raise (Validation_error "Entities not properly nested with ATTLIST declaration");
-
-      if not ws && at_list <> [] then begin
-       match at_list with
-           (name,_,_) :: _ ->
-             (* This is normally impossible, because the lexer demands 
-              * some other token between two names.
-              *)
-             raise(WF_error("Whitespace is missing before `" ^ name ^ "'"));
-         | _ -> assert false
-      end;
-
-      if extend_dtd then begin
-       let new_el = new dtd_element dtd el_name in
-       (* Note that it is allowed that <!ATTLIST...> precedes the corresponding
-        * <!ELEMENT...> declaration. In this case we add the element declaration
-        * already to the DTD but leave the content model unspecified.
-        *)
-       let el =
-         try
-           dtd # add_element new_el;
-           new_el
-         with
-             Not_found ->  (* already added *)
-               let old_el = dtd # element el_name in
-               if old_el # attribute_names <>  [] then
-                 config.warner # warn ("More than one ATTLIST declaration for element type `" ^
-                                       el_name ^ "'");
-               old_el
-       in
-       List.iter
-         (fun (a_name, a_type, a_default) ->
-            el # add_attribute a_name a_type a_default extdecl)
-         at_list
-      end
-    }}
-  ? {{ match !yy_position with
-          "ws1"     -> raise(WF_error("Whitespace is missing after ATTLIST"))
-        | "el_name" -> raise(WF_error("The name of the element is expected here"))
-        | "factor"  -> raise(WF_error("Another attribute name or `>' expected"))
-        | _         -> raise(WF_error("Bad attribute declaration"))
-    }}
-
-
-attdef_factor():
-  /* parses a list of triples <name> <type> <default value> and returns the
-   * list as (string * att_type * att_default) list.
-   */
-  attdef:attdef()   ws:Ignore?   Ignore*   factor:attdef_factor()
-    {{ 
-      let attdef_rest, decl_rangle_entid = factor in
-      if not ws && attdef_rest <> [] then begin
-       match attdef_rest with
-           (name,_,_) :: _ ->
-             raise(WF_error("Missing whitespace before `" ^ name ^ "'"));
-         | _ -> assert false
-      end;
-      (attdef :: attdef_rest), decl_rangle_entid }}
-  ? {{ match !yy_position with
-        | "factor"  -> raise(WF_error("Another attribute name or `>' expected"))
-        | _         -> raise(WF_error("Bad attribute declaration"))
-    }}
-| entid:Decl_rangle
-    {{ [], entid }}
-
-
-attdef():
-  /* Parses a single triple */
-  name:     Name 
-  ws1:      Ignore Ignore*
-  tp:       atttype() 
-  ws2:      Ignore Ignore*
-  default:  defaultdecl()
-    {{ (name,tp,default) }}
-  ? {{ match !yy_position with
-          ("ws1"|"ws2") -> raise(WF_error("Whitespace is missing"))
-        | "tp"          -> raise(WF_error("Type of attribute or `(' expected"))
-        | "default"     -> raise(WF_error("#REQUIRED, #IMPLIED, #FIXED or a string literal expected"))
-        | _             -> raise(WF_error("Bad attribute declaration"))
-    }}
-
-atttype():
-  /* Parses an attribute type and returns it as att_type. */
-  name:      Name 
-  $ {{ let followup = 
-        if name = "NOTATION" then 
-          parse_notation
-        else
-          parse_never
-       in
-     }}
-  nota:      [followup]()?
-    {{ 
-       match name with
-         "CDATA"    -> A_cdata
-       | "ID"       -> A_id
-       | "IDREF"    -> A_idref
-       | "IDREFS"   -> A_idrefs
-       | "ENTITY"   -> A_entity
-       | "ENTITIES" -> A_entities
-       | "NMTOKEN"  -> A_nmtoken
-       | "NMTOKENS" -> A_nmtokens
-       | "NOTATION" ->
-           (match nota with
-                None   -> raise(WF_error("Error in NOTATION type (perhaps missing whitespace after NOTATION?)"))
-              | Some n -> n
-            )
-       | _          -> raise(WF_error("One of CDATA, ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS, NOTATION, or a subexpression expected"))
-    }}
-  ? {{ raise(WF_error("Bad attribute declaration (perhaps missing whitespace after NOTATION)")) }}
-
-|         Lparen 
-          Ignore* 
-  name:   name_or_nametoken() 
-          Ignore* 
-  names:  nmtoken_factor()* 
-  rp:     Rparen
-    /* Enumeration */
-    {{ A_enum(name :: names) }}
-  ? {{ match !yy_position with
-          "name"  -> raise(WF_error("Name expected"))
-        | "names" -> raise(WF_error("`|' and more names expected, or `)'"))
-        | "rp"    -> raise(WF_error("`|' and more names expected, or `)'"))
-        | _       -> raise(WF_error("Bad enumeration type"))
-    }}
-
-
-never():
-  /* The always failing rule */
-  $ {{ raise Not_found; }}
-  Doctype   /* questionable */
-    {{ A_cdata    (* Does not matter *)
-    }}
-
-
-notation():
-         Ignore Ignore*
-  lp:    Lparen 
-         Ignore*
-  name:  Name 
-         Ignore* 
-  names: notation_factor()* 
-  rp:    Rparen
-    {{ A_notation(name :: names) }}
-  ? {{ match !yy_position with
-          "lp"    -> raise(WF_error("`(' expected"))
-        | "name"  -> raise(WF_error("Name expected"))
-        | "names" -> raise(WF_error("`|' and more names expected, or `)'"))
-        | "rp"    -> raise(WF_error("`|' and more names expected, or `)'"))
-        | _       -> raise(WF_error("Bad NOTATION type"))
-    }}
-
-
-notation_factor():
-  /* Parse "|<name>" and return the name */
-  Bar Ignore* name:Name Ignore*
-    {{ name }}
-  ? {{ match !yy_position with
-          "name" -> raise(WF_error("Name expected"))
-        | _      -> raise(WF_error("Bad NOTATION type"))
-    }}
-
-nmtoken_factor():
-  /* Parse "|<nmtoken>" and return the nmtoken */
-  Bar Ignore* n:name_or_nametoken() Ignore*
-    {{ n }}
-  ? {{ match !yy_position with
-          "n" -> raise(WF_error("Nametoken expected"))
-        | _   -> raise(WF_error("Bad enumeration type"))
-    }}
-
-
-name_or_nametoken():
-  n:Name      {{ n }}
-| n:Nametoken {{ n }}
-
-
-/* The default values must be expanded and normalized. This has been implemented
- * by the function expand_attvalue.
- */
-
-
-defaultdecl():
-  /* Parse the default value for an attribute and return it as att_default */
-  Required
-    {{ D_required }}
-| Implied
-    {{ D_implied }}
-| Fixed ws:Ignore Ignore* str:Unparsed_string
-    {{ D_fixed (expand_attvalue lexerset dtd str config.warner false) }}
-  ? {{ match !yy_position with
-          "ws"  -> raise(WF_error("Whitespace is missing after #FIXED"))
-        | "str" -> raise(WF_error("String literal expected"))
-        | _     -> raise(WF_error("Bad #FIXED default value"))
-    }}
-| str:Unparsed_string
-    {{ D_default (expand_attvalue lexerset dtd str config.warner false) }}
-
-
-/**************************** ENTITY DECLARATION ***********************/
-
-entitydecl(decl_entity_entid):
-  /* parses everything _after_ <!ENTITY until the matching >. The parsed 
-   * entity declaration is entered into the dtd object as side-effect.
-   */
-  name:               Name 
-  $ {{ let extdecl = context.manager # current_entity_counts_as_external in
-    }}
-  ws:                 Ignore Ignore* 
-  material:           entitydef() 
-                      Ignore*
-  decl_rangle_entid:  Decl_rangle     
-    /* A general entity */
-    {{
-       if decl_entity_entid != decl_rangle_entid then
-        raise (Validation_error "Entities not properly nested with ENTITY declaration");
-      let en =
-       (* Distinguish between
-         * - internal entities
-         * - external entities
-         * - NDATA (unparsed) entities
-         *)
-       match material with
-           (Some s, None,     None)   ->
-             new internal_entity dtd name config.warner s p_internal_subset
-                 config.errors_with_line_numbers false config.encoding
-         | (None,   Some xid, None)   ->
-             new external_entity (resolver # clone) dtd name config.warner
-                                  xid false config.errors_with_line_numbers
-                                 config.encoding
-
-         | (None,   Some xid, Some n) ->
-             (new ndata_entity name xid n config.encoding :> entity)
-         | _ -> assert false
-      in
-      dtd # add_gen_entity en extdecl
-    }}
-  ? {{ match !yy_position with
-          "ws"                -> raise(WF_error("Whitespace is missing"))
-        | "material"          -> raise(WF_error("String literal or identifier expected"))
-        | "decl_rangle_entid" -> raise(WF_error("`>' expected"))
-        | _                   -> raise(WF_error("Bad entity declaration"))
-    }}
-
-|                     Percent 
-  $ {{ let extdecl = context.manager # current_entity_counts_as_external in
-    }}
-  ws1:                Ignore Ignore* 
-  name:               Name 
-  ws2:                Ignore Ignore* 
-  material:           pedef() 
-                      Ignore* 
-  decl_rangle_entid:  Decl_rangle
-    /* A parameter entity */
-    {{ 
-      if decl_entity_entid != decl_rangle_entid then
-        raise (Validation_error "Entities not properly nested with ENTITY declaration");
-      let en =
-       (* Distinguish between internal and external entities *)
-       match material with
-           (Some s, None)   ->
-             new internal_entity dtd name config.warner s p_internal_subset
-                 config.errors_with_line_numbers true config.encoding
-         | (None,   Some xid)   ->
-             new external_entity (resolver # clone) dtd name config.warner
-                                  xid true config.errors_with_line_numbers
-                                 config.encoding
-         | _ -> assert false
-      in
-
-      (* The following two lines force that even internal entities count
-       * as external (for the standalone check) if the declaration of 
-       * the internal entity occurs in an external entity.
-       *)
-      if extdecl then
-       en # set_counts_as_external;
-
-      dtd # add_par_entity en;
-    }}
-  ? {{ match !yy_position with
-          ("ws1"|"ws2")       -> raise(WF_error("Whitespace is missing"))
-        | "material"          -> raise(WF_error("String literal or identifier expected"))
-        | "decl_rangle_entid" -> raise(WF_error("`>' expected"))
-        | _                   -> raise(WF_error("Bad entity declaration"))
-    }}
-
-
-entitydef():
-  /* parses the definition value of a general entity. Returns either:
-   * - (Some s, None,   None)    meaning the definition of an internal entity
-   *                               with (literal) value s has been found
-   * - (None,   Some x, None)    meaning that an external parsed entity with
-   *                               external ID x has been found
-   * - (None,   Some x, Some n)  meaning that an unparsed entity with
-   *                               external ID x and notations n has been found
-   */
-  str:Unparsed_string
-    {{ Some str, None, None }}
-| id:external_id()   ws:Ignore?  Ignore*  decl:ndatadecl()?
-    {{  if not ws  && decl <> None then
-         raise(WF_error("Whitespace missing before `NDATA'"));
-       None, Some id, decl 
-    }}
-
-
-pedef():
-  /* parses the definition value of a parameter entity. Returns either:
-   * - (Some s, None)     meaning that the definition of an internal entity
-   *                        with (literal) value s has been found
-   * - (None,   Some x)   meaning that an external ID x has been found
-   */
-  str:Unparsed_string
-    {{ Some str, None }}
-| id:external_id()
-    {{ None, Some id }}
-
-
-ndatadecl():
-  /* Parses either NDATA "string" or the empty string; returns Some "string"
-   * in the former, None in the latter case.
-   */
-  ndata:Name ws:Ignore Ignore* name:Name
-    {{ if ndata = "NDATA" then
-       name
-      else
-       raise(WF_error("NDATA expected"))
-    }}
-  ? {{ match !yy_position with
-          "ws"   -> raise(WF_error("Whitespace is missing after NDATA"))
-        | "name" -> raise(WF_error("Name expected"))
-        | _      -> raise(WF_error("Bad NDATA declaration"))
-    }}
-
-/**************************** NOTATION DECLARATION *******************/
-
-notationdecl():
-  /* parses <!NOTATION ... > and enters the notation declaration into the
-   * dtd object as side-effect
-   */
-  decl_notation_entid: Decl_notation 
-  ws1:                 Ignore Ignore*
-  name:                Name 
-  ws2:                 Ignore Ignore*
-  sys_or_public:       Name /* SYSTEM or PUBLIC */ 
-  ws3:                 Ignore Ignore*
-  str1:                Unparsed_string 
-  ws:                  Ignore? Ignore*
-  str2:                Unparsed_string? 
-                       Ignore*
-  decl_rangle_entid:   Decl_rangle
-    {{ 
-      if decl_notation_entid != decl_rangle_entid then
-       raise (Validation_error "Entities not properly nested with NOTATION declaration");
-      let xid =
-       (* Note that it is allowed that PUBLIC is only followed by one
-        * string literal
-        *)
-       match sys_or_public with
-           "SYSTEM" ->
-             if str2 <> None then raise(WF_error("SYSTEM must be followed only by one argument"));
-             System (recode_utf8 str1)
-         | "PUBLIC" ->
-             begin match str2 with
-                 None ->
-                   check_public_id str1;
-                   Public(recode_utf8 str1,"")
-               | Some p ->
-                   if not ws then
-                     raise(WF_error("Missing whitespace between the string literals of the `PUBLIC' id"));
-                   check_public_id str1;
-                   Public(recode_utf8 str1, recode_utf8 p)
-             end
-         | _ -> raise(WF_error("PUBLIC or SYSTEM expected"))
-      in
-      if extend_dtd then begin
-       let no = new dtd_notation name xid config.encoding in
-       dtd # add_notation no
-      end
-    }}
-  ? {{ match !yy_position with
-          ("ws1"|"ws2"|"ws3") -> raise(WF_error("Whitespace is missing"))
-        | "name"              -> raise(WF_error("Name expected"))
-        | "sys_or_public"     -> raise(WF_error("SYSTEM or PUBLIC expected"))
-        | ("str1"|"str2")     -> raise(WF_error("String literal expected"))
-        | "decl_rangle_entid" -> raise(WF_error("`>' expected"))
-        | _                   -> raise(WF_error("Bad NOTATION declaration"))
-    }}
-
-/****************************** ELEMENTS **************************/
-
-/* In the following rules, the number of error rules is reduced to
- * improve the performance of the parser.
- */
-
-
-contents_start():
-  /* parses <element>...</element> misc*, i.e. exactly one element followed
-   * optionally by white space or processing instructions.
-   * The element is entered into the global variables as follows:
-   * - If elstack is non-empty, the parsed element is added as new child to
-   *   the top element of the stack.
-   * - If elstack is empty, the root_examplar object is modified rather than
-   *   that a new element is created. If additionally the variable root is
-   *   None, it is assigned Some root_examplar.
-   * Note that the modification of the root_exemplar is done by the method
-   * internal_init.
-   * The reason why the root element is modified rather than newly created
-   * is a typing requirement. It must be possible that the class of the root
-   * is derived from the original class element_impl, i.e. the user must be
-   * able to add additional methods. If we created a new root object, we
-   * would have to denote to which class the new object belongs; the root
-   * would always be an 'element_impl' object (and not a derived object).
-   * If we instead cloned an  exemplar object and modified it by the
-   * "create" method, the root object would belong to the same class as the
-   * exemplar (good), but the type of the parsing function would always
-   * state that an 'element_impl' was created (because we can pass the new
-   * object only back via a global variable). The only solution is to
-   * modify the object that has been passed to the parsing function directly.
-   */
-  $ {{ dtd <- transform_dtd dtd; }}
-  start_tag() content()*
-    {{ () }}
-
-
-content():
-  /* parses: start tags, end tags, content, or processing
-   * instructions. That the tags are properly nested is dynamically checked.
-   * As result, recognized elements are added to their parent elements,
-   * content is added to the element containing it, and processing instructions
-   * are entered into the element embracing them. (All as side-effects.)
-   */
-  start_tag()
-    {{ () }}
-| end_tag()
-    {{ () }}
-| char_data()
-    {{ () }}
-| cref()
-    {{ () }}
-| pi()
-    {{ () }}
-| entity_ref()
-    {{ () }}
-| comment()
-    {{ () }}
-
-
-entity_ref():
-   Begin_entity eref_xmldecl_then_rest()
-    {{ if n_tags_open = 0 then
-       raise(WF_error("Entity reference not allowed here"))
-    }}
-
-
-/* See comment for doc_mldecl_then_misc_then_prolog_then_rest. */
-
-eref_xmldecl_then_rest():
-  pl:PI_xml
-  $ {{ context.manager # current_entity # process_xmldecl pl; 
-    }}
-  content()* End_entity
-    {{ () }}
-
-| $ {{ context.manager # current_entity # process_missing_xmldecl; }}
-  content() content()* End_entity
-    {{ () }}
-
-| $ {{ context.manager # current_entity # process_missing_xmldecl; }}
-  End_entity
-    {{ () }}
-
-
-start_tag():
-  /* parses <element attribute-values> or <element attribute-values/>.
-   *
-   * EFFECT: If elstack is non-empty, the element is added to the
-   * top element of the stack as new child, and the element
-   * is pushed on the stack. If elstack is empty, the root_exemplar is
-   * modified and gets the parsed name and attribute list. The root_exemplar
-   * is pushed on the stack. If additionally the variable root is empty, too,
-   * this variable is initialized.
-   * If the <element ... /> form has been parsed, no element is pushed
-   * on the stack.
-   */
-  tag:        Tag_beg
-    $ {{ let position =
-          if config.store_element_positions then
-            Some(context.manager # position)
-          else
-            None
-        in
-       }}
-  ws:         Ignore? Ignore*
-  attlist:    attribute()* 
-  emptiness:  start_tag_rangle()
-  /* Note: it is guaranteed that there is whitespace between Tag_beg and
-   * the name of the first attribute, because there must be some separator.
-   * So we need not to check ws!
-   */
-    {{ 
-      let rec check_attlist al =
-       match al with
-           (nv1, num1) :: al' ->
-             if not num1 && al' <> [] then begin
-               match al with
-                   ((n1,_),_) :: ((n2,_),_) :: _ ->
-                     raise(WF_error("Whitespace is missing between attributes `" ^
-                                    n1 ^ "' and `" ^ n2 ^ "'"))
-                 | _ -> assert false
-             end;
-             check_attlist al'
-         | [] -> ()
-      in
-      check_attlist attlist;
-               
-      let name, tag_beg_entid = tag in
-      let attlist' = List.map (fun (nv,_) -> nv) attlist in
-      let d =
-       create_element_node ?position:position spec dtd name attlist' in
-
-      begin match id_index with
-         None -> ()
-       | Some idx ->
-           (* Put the ID attribute into the index, if present *)
-           begin try 
-             let v = d # id_attribute_value in  (* may raise Not_found *)
-             idx # add v d                      (* may raise ID_not_unique *)
-           with
-               Not_found ->
-                 (* No ID attribute *)
-                 ()
-             | ID_not_unique ->
-                 (* There is already an ID with the same value *)
-                 raise(Validation_error("ID not unique"))
-           end
-      end;
-
-      if n_tags_open = 0 then begin
-       if root = None then begin
-         (* We have found the begin tag of the root element. *)
-         if config.enable_super_root_node then begin
-           (* The user wants the super root instead of the real root.
-            * The real root element becomes the child of the VR.
-            *)
-           (* Assertion: self # current is the super root *)
-           assert (self # current # node_type = T_super_root);
-           root <- Some (self # current);
-           self # current # add_node d;
-           doc # init_root (self # current);
-         end
-         else begin
-           (* Normal behaviour: The user wants to get the real root. *)
-           root <- Some d;
-           doc # init_root d;
-         end;
-       end
-       else
-         (* We have found a second topmost element. This is illegal. *)
-         raise(WF_error("Document must consist of only one toplevel element"))
-      end
-      else begin
-       (* We have found some inner begin tag. *)
-       self # save_data;        (* Save outstanding data material first *)
-       self # current # add_node d
-      end;
-
-      if emptiness then
-       (* An empty tag like <a/>. *)
-       d # local_validate ~use_dfa:config.validate_by_dfa ()
-      else begin
-       (* A non-empty tag. *)
-       Stack.push (d, tag_beg_entid) elstack;
-       n_tags_open <- n_tags_open + 1;
-      end;
-    }}
-  ? {{ match !yy_position with
-          "attlist"   -> raise(WF_error("Bad attribute list"))
-        | "emptiness" -> raise(WF_error("`>' or `/>' expected"))
-        | _           -> raise(WF_error("Bad start tag"))
-    }}
-
-
-attribute():
-  /* Parses name="value"  */
-  n:Name Ignore* Eq Ignore* v:attval() ws:Ignore? Ignore*
-    {{ (n,v), ws }}
-
-
-attval():
-  v:Attval
-    {{ expand_attvalue lexerset dtd v config.warner true }}
-| v:Attval_nl_normalized
-    {{ expand_attvalue lexerset dtd v config.warner false }}
-
-
-start_tag_rangle():
-  Rangle       {{ false }}
-| Rangle_empty {{ true }}
-
-
-end_tag():
-  /* parses </element>.
-   * Pops the top element from the elstack and checks if it is the same
-   * element.
-   */
-  tag:Tag_end  Ignore*  Rangle
-    {{ let name, tag_end_entid = tag in
-       if n_tags_open = 0 then
-        raise(WF_error("End-tag without start-tag"));
-
-       self # save_data;        (* Save outstanding data material first *)
-
-       let x, tag_beg_entid = Stack.pop elstack in
-       let x_name =
-        match x # node_type with
-          | T_element n -> n
-          | _ -> assert false
-       in
-       if name <> x_name then
-        raise(WF_error("End-tag does not match start-tag"));
-       if tag_beg_entid != tag_end_entid then
-        raise(WF_error("End-tag not in the same entity as the start-tag"));
-       x # local_validate ~use_dfa:config.validate_by_dfa ();
-       
-       n_tags_open <- n_tags_open - 1;
-       
-       assert (n_tags_open >= 0);
-
-    }}
-
-char_data():
-  /* Parses any literal characters not otherwise matching, and adds the
-   * characters to the top element of elstack.
-   * If elstack is empty, it is assumed that there is no surrounding
-   * element, and any non-white space character is forbidden.
-   */
-  data:CharData
-    {{ 
-      if n_tags_open = 0 then
-       (* only white space is allowed *)
-       self # only_whitespace data
-      else
-       self # collect_data data
-          (* We collect the chardata material until the next end tag is
-          * reached. Then the collected material will concatenated and
-          * stored as a single T_data node (see end_tag rule above)
-          * using save_data.
-          *)
-    }}
-| data:Cdata
-    {{ 
-      if n_tags_open = 0 then
-       raise (WF_error("CDATA section not allowed here"));
-      self # collect_data data
-          (* Also collect CDATA material *)
-    }}
-
-cref():
-  /* Parses &#...; and adds the character to the top element of elstack. */
-  code:CRef
-    {{ 
-       if n_tags_open = 0 then
-        (* No surrounding element: character references are not allowed *)
-        raise(WF_error("Character reference not allowed here"));
-       self # collect_data (character config.encoding config.warner code)
-          (* Also collect character references *)
-    }}
-
-pi():
-  /* Parses <?...?> (but not <?xml white-space ... ?>).
-   * If there is a top element in elstack, the processing instruction is added
-   * to this element.
-   */
-  pi: PI
-    {{ 
-      let position =
-       if config.store_element_positions then
-         Some(context.manager # position)
-       else
-         None
-      in
-      let target,value = pi in
-
-      if n_tags_open = 0 & not config.enable_super_root_node
-      then
-       doc # add_pinstr (new proc_instruction target value config.encoding)
-      else begin
-       (* Special case: if processing instructions are processed inline,
-        * they are wrapped into T_pinstr nodes.
-        *)
-       if config.enable_pinstr_nodes then begin
-         self # save_data;        (* Save outstanding data material first *)
-         let pinstr = new proc_instruction target value config.encoding in
-         let wrapper = create_pinstr_node 
-                         ?position:position spec dtd pinstr in
-         wrapper # local_validate();                (* succeeds always   *)
-         self # current # add_node wrapper;
-       end
-       else
-         (* Normal behaviour: Add the PI to the parent element. *)
-         self # current # add_pinstr 
-                            (new proc_instruction target value config.encoding)
-      end
-    }}
-
-
-comment():
-  /* Parses <!-- ... -->
-   */
-  Comment_begin
-  $ {{ 
-      let position =
-       if config.enable_comment_nodes && config.store_element_positions then
-         Some(context.manager # position)
-       else
-         None
-      in
-    }}
-  mat: Comment_material*
-  ce: Comment_end
-    {{
-      if config.enable_comment_nodes then begin
-       self # save_data;        (* Save outstanding data material first *)
-       let comment_text = String.concat "" mat in
-       let wrapper = create_comment_node 
-                       ?position:position spec dtd comment_text in
-       wrapper # local_validate();                (* succeeds always   *)
-       self # current # add_node wrapper;
-      end
-    }}
-  ? {{ match !yy_position with
-        | "ce"  -> raise(WF_error("`-->' expected"))
-        | _     -> raise(WF_error("Bad comment"))
-    }}
-
-
-%%
-   (* The method "parse" continues here... *)
-
-   try
-     match start_symbol with
-        Ext_document ->
-          parse_ext_document context.current context.get_next 
-       | Ext_declarations ->
-          parse_ext_declarations context.current context.get_next 
-       | Ext_element ->
-          parse_ext_element context.current context.get_next
-   with
-       Not_found ->
-        raise Parsing.Parse_error
-
-  (*********** The method "parse" ends here *************)
-
-
-(**********************************************************************)
-
-(* Here ends the class definition: *)
-end
-;;
-
-(**********************************************************************)
-
-open Pxp_reader;;
-
-
-class default_ext =
-  object(self)
-    val mutable node = (None : ('a extension node as 'a) option)
-    method clone = {< >}
-    method node =
-      match node with
-         None ->
-           assert false
-       | Some n -> n
-    method set_node n =
-      node <- Some n
-  end
-;;
-
-
-let default_extension = new default_ext;;
-
-let default_spec =
-  make_spec_from_mapping
-    ~super_root_exemplar:      (new element_impl default_extension)
-    ~comment_exemplar:         (new element_impl default_extension)
-    ~default_pinstr_exemplar:  (new element_impl default_extension)
-    ~data_exemplar:            (new data_impl default_extension)
-    ~default_element_exemplar: (new element_impl default_extension)
-    ~element_mapping:          (Hashtbl.create 1)
-    ()
-;;
-
-
-let idref_pass id_index root =
-  let error t att value =
-    let name =
-      match t # node_type with
-         T_element name -> name
-       | _ -> assert false
-    in
-    let text =
-      "Attribute `" ^ att ^ "' of element `" ^ name ^ 
-      "' refers to unknown ID `" ^ value ^ "'" in
-    let pos_ent, pos_line, pos_col = t # position in
-    if pos_line = 0 then
-      raise(Validation_error text)
-    else
-      raise(At("In entity " ^ pos_ent ^ " at line " ^
-              string_of_int pos_line ^ ", position " ^ string_of_int pos_col ^
-              ":\n",
-              Validation_error text))
-  in
-    
-  let rec check_tree t =
-    let idref_atts = t # idref_attribute_names in
-    List.iter
-      (fun att ->
-        match t # attribute att with
-            Value s ->
-              begin try ignore(id_index # find s) with
-                  Not_found ->
-                    error t att s
-              end
-          | Valuelist l ->
-              List.iter
-                (fun s ->
-                   try ignore(id_index # find s) with
-                       Not_found ->
-                         error t att s
-                )
-                l
-          | Implied_value -> ()
-      )
-      idref_atts;
-    List.iter check_tree (t # sub_nodes)
-  in
-  check_tree root
-;;
-
-
-exception Return_DTD of dtd;;
-  (* Used by extract_dtd_from_document_entity to jump out of the parser *)
-
-
-let call_parser ~configuration:cfg 
-                ~source:src 
-               ~dtd 
-               ~extensible_dtd 
-               ~document:doc 
-               ~specification:spec 
-               ~process_xmldecl 
-               ~transform_dtd
-                ~(id_index : 'ext #index option)
-               ~use_document_entity
-                ~entry 
-               ~init_lexer =
-  let e = cfg.errors_with_line_numbers in
-  let w = cfg.warner in
-  let r, en =
-    match src with
-       Entity(m,r')  -> r', m dtd
-      | ExtID(xid,r') -> r', 
-                        if use_document_entity then
-                           new document_entity 
-                            r' dtd "[toplevel]" w xid e
-                             cfg.encoding
-                        else
-                           new external_entity 
-                            r' dtd "[toplevel]" w xid false e
-                             cfg.encoding
-  in
-  r # init_rep_encoding cfg.encoding;
-  r # init_warner w;
-  en # set_debugging_mode (cfg.debugging_mode);
-  let pobj =
-    new parser_object
-      doc
-      dtd
-      extensible_dtd
-      cfg
-      r
-      spec
-      process_xmldecl
-      transform_dtd
-      (id_index :> 'ext index option)
-  in
-  let mgr = new entity_manager en in
-  en # open_entity true init_lexer;
-  begin try
-    let context = make_context mgr in
-    pobj # parse context entry;
-    ignore(en # close_entity);
-  with
-      Return_DTD d ->
-       ignore(en # close_entity);
-       raise(Return_DTD d)
-    | error ->
-       ignore(en # close_entity);
-       r # close_all;
-       let pos = mgr # position_string in
-       raise (At(pos, error))
-  end;
-  if cfg.idref_pass then begin
-    match id_index with
-       None -> ()
-      | Some idx ->
-         ( match pobj # root with
-               None -> ()
-             | Some root ->
-                 idref_pass idx root;
-         )
-  end;
-  pobj
-
-
-let parse_dtd_entity cfg src =
-  (* Parse a DTD given as separate entity. *)
-  let dtd = new dtd cfg.warner cfg.encoding in
-  let doc = new document cfg.warner in
-  let pobj =
-    call_parser 
-      ~configuration:cfg 
-      ~source:src 
-      ~dtd:dtd 
-      ~extensible_dtd:true         (* Extend the DTD by parsed declarations *)
-      ~document:doc 
-      ~specification:default_spec 
-      ~process_xmldecl:false       (* The XML declaration is ignored 
-                                   * (except 'encoding') 
-                                   *)
-      ~transform_dtd:(fun x -> x)  (* Do not transform the DTD *)
-      ~id_index: None
-      ~use_document_entity:false
-      ~entry:Ext_declarations      (* Entry point of the grammar *)
-      ~init_lexer:Declaration      (* The initially used lexer *)
-  in
-  dtd # validate;
-  if cfg.accept_only_deterministic_models then dtd # only_deterministic_models;
-  dtd
-;;
-
-
-let parse_content_entity ?id_index cfg src dtd spec =
-  (* Parse an element given as separate entity *)
-  dtd # validate;            (* ensure that the DTD is valid *)
-  if cfg.accept_only_deterministic_models then dtd # only_deterministic_models;
-  let doc = new document cfg.warner in
-  let pobj =
-    call_parser
-      ~configuration:cfg 
-      ~source:src 
-      ~dtd:dtd 
-      ~extensible_dtd:true         (* Extend the DTD by parsed declarations *)
-      ~document:doc 
-      ~specification:spec 
-      ~process_xmldecl:false       (* The XML declaration is ignored 
-                                   * (except 'encoding') 
-                                   *)
-      ~transform_dtd:(fun x -> x)  (* Do not transform the DTD *)
-      ~id_index:(id_index :> 'ext index option)
-      ~use_document_entity:false
-      ~entry:Ext_element           (* Entry point of the grammar *)
-      ~init_lexer:Content          (* The initially used lexer *)
-  in
-  match pobj # root with
-      Some r -> r
-    | None -> raise(WF_error("No root element"))
-;;
-
-
-let parse_wfcontent_entity cfg src spec =
-  let dtd = new dtd cfg.warner cfg.encoding in
-  dtd # allow_arbitrary;
-  let doc = new document cfg.warner in
-  let pobj =
-    call_parser
-      ~configuration:cfg 
-      ~source:src 
-      ~dtd:dtd 
-      ~extensible_dtd:false        (* Do not extend the DTD *)
-      ~document:doc 
-      ~specification:spec 
-      ~process_xmldecl:false       (* The XML declaration is ignored 
-                                   * (except 'encoding') 
-                                   *)
-      ~transform_dtd:(fun x -> x)  (* Do not transform the DTD *)
-      ~id_index:None
-      ~use_document_entity:false
-      ~entry:Ext_element           (* Entry point of the grammar *)
-      ~init_lexer:Content          (* The initially used lexer *)
-  in
-  match pobj # root with
-      Some r -> r
-    | None -> raise(WF_error("No root element"))
-;;
-
-
-let iparse_document_entity ?(transform_dtd = (fun x -> x)) 
-                           ?id_index
-                           cfg0 src spec p_wf =
-  (* Parse an element given as separate entity *)
-  (* p_wf: 'true' if in well-formedness mode, 'false' if in validating mode *)
-  let cfg = { cfg0 with
-               recognize_standalone_declaration = 
-                   cfg0.recognize_standalone_declaration && (not p_wf) 
-            } in
-  let dtd = new dtd cfg.warner cfg.encoding in
-  if p_wf then
-    dtd # allow_arbitrary;
-  let doc = new document cfg.warner in
-  let pobj =
-    call_parser 
-      ~configuration:cfg 
-      ~source:src 
-      ~dtd:dtd 
-      ~extensible_dtd:(not p_wf)   (* Extend the DTD by parsed declarations
-                                   * only if in validating mode
-                                   *)
-      ~document:doc 
-      ~specification:spec 
-      ~process_xmldecl:true        (* The XML declaration is processed *)
-                                   (* TODO: change to 'not p_wf' ? *)
-      ~transform_dtd:(fun dtd -> 
-                       let dtd' = transform_dtd dtd in
-                       if cfg.accept_only_deterministic_models then 
-                         dtd' # only_deterministic_models;
-                       dtd')
-
-      ~id_index:(id_index :> 'ext index option)
-      ~use_document_entity:true
-      ~entry:Ext_document          (* Entry point of the grammar *)
-      ~init_lexer:Document         (* The initially used lexer *)
-  in
-  pobj # doc
-;;
-
-
-let parse_document_entity ?(transform_dtd = (fun x -> x)) 
-                          ?id_index
-                          cfg src spec =
-  iparse_document_entity 
-    ~transform_dtd:transform_dtd 
-    ?id_index:(id_index : 'ext #index option :> 'ext index option)
-    cfg src spec false;;
-
-let parse_wfdocument_entity cfg src spec =
-  iparse_document_entity cfg src spec true;;
-
-let extract_dtd_from_document_entity cfg src =
-  let transform_dtd dtd = raise (Return_DTD dtd) in
-  try
-    let doc = parse_document_entity 
-               ~transform_dtd:transform_dtd
-               cfg
-               src
-               default_spec in
-    (* Should not happen: *)
-    doc # dtd
-  with
-      Return_DTD dtd ->
-       (* The normal case: *)
-       dtd
-;;
-
-
-let default_config =
-  let w = new drop_warnings in
-  { warner = w;
-    errors_with_line_numbers = true;
-    enable_pinstr_nodes = false;
-    enable_super_root_node = false;
-    enable_comment_nodes = false;
-    encoding = `Enc_iso88591;
-    recognize_standalone_declaration = true;
-    store_element_positions = true;
-    idref_pass = false;
-    validate_by_dfa = true;
-    accept_only_deterministic_models = true;
-    debugging_mode = false;
-  }
-
-
-class  [ 'ext ] hash_index =
-object 
-  constraint 'ext = 'ext node #extension
-  val ht = (Hashtbl.create 100 : (string, 'ext node) Hashtbl.t)
-  method add s n =
-    try
-      ignore(Hashtbl.find ht s);
-      raise ID_not_unique
-    with
-       Not_found ->
-         Hashtbl.add ht s n
-
-  method find s = Hashtbl.find ht s
-  method index = ht
-end
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:29  lpadovan
- * Initial revision
- *
- * Revision 1.14  2000/08/26 23:23:14  gerd
- *     Bug: from_file must not interpret the file name as URL path.
- *     Bug: When PI and comment nodes are generated, the collected data
- * material must be saved first.
- *
- * Revision 1.13  2000/08/19 21:30:03  gerd
- *     Improved the error messages of the parser
- *
- * Revision 1.12  2000/08/18 20:16:25  gerd
- *     Implemented that Super root nodes, pinstr nodes and comment
- * nodes are included into the document tree.
- *
- * Revision 1.11  2000/08/14 22:24:55  gerd
- *     Moved the module Pxp_encoding to the netstring package under
- * the new name Netconversion.
- *
- * Revision 1.10  2000/07/23 02:16:33  gerd
- *     Support for DFAs.
- *
- * Revision 1.9  2000/07/14 13:57:29  gerd
- *     Added the id_index feature.
- *
- * Revision 1.8  2000/07/09 17:52:45  gerd
- *     New implementation for current_data.
- *     The position of elements is stored on demand.
- *
- * Revision 1.7  2000/07/09 01:00:35  gerd
- *     Improvement: It is now guaranteed that only one data node
- * is added for consecutive character material.
- *
- * Revision 1.6  2000/07/08 16:27:29  gerd
- *     Cleaned up the functions calling the parser.
- *     New parser argument: transform_dtd.
- *     Implementations for 'extract_dtd_from_document_entity' and
- * 'parse_wfcontent_entity'.
- *
- * Revision 1.5  2000/07/06 23:05:18  gerd
- *     Initializations of resolvers were missing.
- *
- * Revision 1.4  2000/07/06 22:11:01  gerd
- *     Fix: The creation of the non-virtual root element is protected
- * in the same way as the virtual root element.
- *
- * Revision 1.3  2000/07/04 22:15:18  gerd
- *     Change: Using the new resolver capabilities.
- *     Still incomplete: the new extraction and parsing functions.
- *
- * Revision 1.2  2000/06/14 22:19:06  gerd
- *     Added checks such that it is impossible to mix encodings.
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_yacc.m2y:
- *
- * Revision 1.9  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.8  2000/05/27 19:26:19  gerd
- *     Change: The XML declaration is interpreted right after
- * it has been parsed (no longer after the document): new function
- * check_and_parse_xmldecl.
- *     When elements, attributes, and entities are declared
- * it is stored whether the declaration happens in an external
- * entity (for the standalone check).
- *     The option recognize_standalone_declaration is interpreted.
- *
- * Revision 1.7  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.6  2000/05/14 21:51:24  gerd
- *     Change: Whitespace is handled by the grammar, and no longer
- * by the entity.
- *
- * Revision 1.5  2000/05/14 17:50:54  gerd
- *     Updates because of changes in the token type.
- *
- * Revision 1.4  2000/05/11 22:09:17  gerd
- *     Fixed the remaining problems with conditional sections.
- * This seems to be also a weakness of the XML spec!
- *
- * Revision 1.3  2000/05/09 00:02:44  gerd
- *     Conditional sections are now recognized by the parser.
- * There seem some open questions; see the TODO comments!
- *
- * Revision 1.2  2000/05/08 22:01:44  gerd
- *     Introduced entity managers (see markup_entity.ml).
- *     The XML declaration is now recognized by the parser. If such
- * a declaration is found, the method process_xmldecl of the currently
- * active entity is called. If the first token is not an XML declaration,
- * the method process_missing_xmldecl is called instead.
- *     Some minor changes.
- *
- * Revision 1.1  2000/05/06 23:21:49  gerd
- *     Initial revision.
- *
- *     
- * ======================================================================
- *
- * COPIED FROM REVISION 1.19 OF markup_yacc.mly
- *
- * Revision 1.19  2000/05/01 15:20:08  gerd
- *     "End tag matches start tag" is checked before "End tag in the
- * same entity as start tag".
- *
- * Revision 1.18  2000/04/30 18:23:08  gerd
- *     Bigger change: Introduced the concept of virtual roots. First,
- * this reduces the number of checks. Second, it makes it possible to
- * return the virtual root to the caller instead of the real root (new
- * config options 'virtual_root' and 'processing_instructions_inline').
- *     Minor changes because of better CR/CRLF handling.
- *
- * Revision 1.17  2000/03/13 23:47:46  gerd
- *     Updated because of interface changes. (See markup_yacc_shadow.mli
- * rev. 1.8)
- *
- * Revision 1.16  2000/01/20 20:54:43  gerd
- *     New config.errors_with_line_numbers.
- *
- * Revision 1.15  1999/12/17 22:27:58  gerd
- *     Bugfix: The value of 'p_internal_subset' (an instance
- * variable of the parser object) is to true when the internal subset
- * begins, and is set to false when this subset ends. The error was
- * that references to external entities within this subset did not
- * set 'p_internal_subset' to false; this is now corrected by introducing
- * the 'p_internal_subset_stack'.
- *     This is a typical example of how the code gets more and
- * more complicated and that it is very difficult to really understand
- * what is going on.
- *
- * Revision 1.14  1999/11/09 22:23:37  gerd
- *     Removed the invocation of "init_dtd" of the root document.
- * This method is no longer available. The DTD is also passed to the
- * document object by the root element, so nothing essential changes.
- *
- * Revision 1.13  1999/10/25 23:37:09  gerd
- *     Bugfix: The warning "More than one ATTLIST declaration for element
- * type ..." is only generated if an ATTLIST is found while there are already
- * attributes for the element.
- *
- * Revision 1.12  1999/09/01 23:08:38  gerd
- *     New frontend function: parse_wf_document. This simply uses
- * a DTD that allows anything, and by the new parameter "extend_dtd" it is
- * avoided that element, attlist, and notation declarations are added to this
- * DTD. The idea is that this function simulates a well-formedness parser.
- *     Tag_beg, Tag_end carry the entity_id. The "elstack" stores the
- * entity_id of the stacked tag. This was necessary because otherwise there
- * are some examples to produces incorrectly nested elements.
- *     p_internal_subset is a variable that stores whether the internal
- * subset is being parsed. This is important beacause entity declarations in
- * internal subsets are not allowed to contain parameter references.
- *     It is checked if the "elstack" is empty after all has been parsed.
- *     Processing instructions outside DTDs and outside elements are now
- * added to the document.
- *     The rules of mixed and regexp style content models have been
- * separated. The code is now much simpler.
- *     Entity references outside elements are detected and rejected.
- *
- * Revision 1.11  1999/09/01 16:26:08  gerd
- *     Improved the quality of error messages.
- *
- * Revision 1.10  1999/08/31 19:13:31  gerd
- *     Added checks on proper PE nesting. The idea is that tokens such
- * as Decl_element and Decl_rangle carry an entity ID with them. This ID
- * is simply an object of type < >, i.e. you can only test on identity.
- * The lexer always produces tokens with a dummy ID because it does not
- * know which entity is the current one. The entity layer replaces the dummy
- * ID with the actual ID. The parser checks that the IDs of pairs such as
- * Decl_element and Decl_rangle are the same; otherwise a Validation_error
- * is produced.
- *
- * Revision 1.9  1999/08/15 20:42:01  gerd
- *     Corrected a misleading message.
- *
- * Revision 1.8  1999/08/15 20:37:34  gerd
- *     Improved error messages.
- *     Bugfix: While parsing document entities, the subclass document_entity is
- * now used instead of external_entity. The rules in document entities are a bit
- * stronger.
- *
- * Revision 1.7  1999/08/15 14:03:59  gerd
- *     Empty documents are not allowed.
- *     "CDATA section not allowed here" is a WF_error, not a Validation_
- * error.
- *
- * Revision 1.6  1999/08/15 02:24:19  gerd
- *     Removed some grammar rules that were used for testing.
- *     Documents without DTD can now have arbitrary elements (formerly
- * they were not allowed to have any element).
- *
- * Revision 1.5  1999/08/14 22:57:20  gerd
- *     It is allowed that external entities are empty because the
- * empty string is well-parsed for both declarations and contents. Empty
- * entities can be referenced anywhere because the references are replaced
- * by nothing. Because of this, the Begin_entity...End_entity brace is only
- * inserted if the entity is non-empty. (Otherwise references to empty
- * entities would not be allowed anywhere.)
- *     As a consequence, the grammar has been changed such that a
- * single Eof is equivalent to Begin_entity,End_entity without content.
- *
- * Revision 1.4  1999/08/14 22:20:01  gerd
- *         The "config" slot has now a component "warner" which is
- * an object with a "warn" method. This is used to warn about characters
- * that cannot be represented in the Latin 1 alphabet.
- *         Furthermore, there is a new component "debugging_mode".
- *         Some Parse_error exceptions have been changed into Validation_error.
- *         The interfaces of functions/classes imported from other modules
- * have changed; the invocations have been adapted.
- *         Contents may contain CDATA sections that have been forgotten.
- *
- * Revision 1.3  1999/08/11 15:00:41  gerd
- *     The Begin_entity ... End_entity brace is also possible in
- * 'contents'.
- *     The configuration passed to the parsing object contains always
- * the resolver that is actually used.
- *
- * Revision 1.2  1999/08/10 21:35:12  gerd
- *     The XML/encoding declaration at the beginning of entities is
- * evaluated. In particular, entities have now a method "xml_declaration"
- * which returns the name/value pairs of such a declaration. The "encoding"
- * setting is interpreted by the entity itself; "version", and "standalone"
- * are interpreted by Markup_yacc.parse_document_entity. Other settings
- * are ignored (this does not conform to the standard; the standard prescribes
- * that "version" MUST be given in the declaration of document; "standalone"
- * and "encoding" CAN be declared; no other settings are allowed).
- *     TODO: The user should be warned if the standard is not exactly
- * fulfilled. -- The "standalone" property is not checked yet.
- *
- * Revision 1.1  1999/08/10 00:35:52  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/pxp_yacc.mli b/helm/DEVEL/pxp/pxp/pxp_yacc.mli
deleted file mode 100644 (file)
index cb987a8..0000000
+++ /dev/null
@@ -1,488 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- * PXP: The polymorphic XML parser for Objective Caml.
- * Copyright by Gerd Stolpmann. See LICENSE for details.
- *)
-
-
-(*$ markup-yacc.mli *)
-
-open Pxp_types
-open Pxp_dtd
-open Pxp_document
-
-exception ID_not_unique
-
-class type [ 'ext ] index =
-object 
-  (* The type of indexes over the ID attributes of the elements. This type
-   * is the minimum requirement needed by the parser to create such an index.
-   *)
-  constraint 'ext = 'ext node #extension
-  method add : string -> 'ext node -> unit
-    (* Add the passed node to the index. If there is already an ID with
-     * the passed string value, the exception ID_not_unique should be
-     * raised. (But the index is free also to accept several identical IDs.)
-     *)
-  method find : string -> 'ext node
-    (* Finds the node with the passed ID value, or raises Not_found *)
-end
-;;
-
-
-class [ 'ext ] hash_index : 
-object 
-  (* This is a simple implementation of 'index' using a hash table. *)
-  constraint 'ext = 'ext node #extension
-  method add : string -> 'ext node -> unit
-    (* See above. *)
-  method find : string -> 'ext node
-    (* See above. *)
-  method index : (string, 'ext node) Hashtbl.t
-    (* Returns the hash table. *)
-end
-;;
-
-
-type config =
-    { warner : collect_warnings;
-         (* An object that collects warnings. *)
-
-      errors_with_line_numbers : bool;
-         (* Whether error messages contain line numbers or not. The parser
-         * is 10 to 20 per cent faster if line numbers are turned off;
-         * you get only byte positions in this case.
-         *)
-
-      enable_pinstr_nodes : bool;
-         (* true: turns a special mode for processing instructions on. Normally,
-         * you cannot determine the exact location of a PI; you only know
-         * in which element the PI occurs. This mode makes it possible
-         * to find the exact location out: Every PI is artificially wrapped
-         * by a special node with type T_pinstr. For example, if the XML text
-         * is <a><?x?><?y?></a>, the parser normally produces only an element
-         * object for "a", and puts the PIs "x" and "y" into it (without
-         * order). In this mode, the object "a" will contain two objects
-         * with type T_pinstr, and the first object will contain "x", and the
-         * second "y": the object tree looks like
-         * - Node with type = T_element "a"
-         *   - Node with type = T_pinstr "x"
-         *     + contains processing instruction "x"
-         *   - Node with type = T_pinstr "y"
-         *     + contains processing instruction "y"
-         *
-         * Notes:
-         * (1) In past versions of PXP this mode was called
-         *     processing_instructions_inline, and it produced nodes of
-         *     type T_element "-pi" instead of T_pinstr.
-         * (2) The T_pinstr nodes are created from the pinstr exemplars
-         *     in your spec
-         *)
-
-      enable_super_root_node : bool;
-         (* true: the topmost element of the XML tree is not the root element,
-         * but the so-called super root. The root element is a son of the
-         * super root. The super root is a node with type T_super_root.
-         * The following behaviour changes, too:
-         * - PIs occurring outside the root element and outside the DTD are
-         *   added to the super root instead of the document object
-         * - If enable_pinstr_nodes is also turned on, the PI wrappers
-         *   are added to the super root
-         *
-         * For example, the document
-         *   <?x?><a>y</a><?y?>
-         * is normally represented by:
-         * - document object
-         *   + contains PIs x and y
-         *   - reference to root node with type = T_element "a"
-         *     - node with type = T_data: contains "y"
-         * With enabled super root node:
-         * - document object
-         *   - reference to super root node with type = T_super_root
-         *     + contains PIs x and y
-         *     - root node with type = T_element "a"
-         *       - node with type = T_data: contains "y"
-         * If also enable_pinstr_nodes:
-         * - document object
-         *   - reference to super root node with type = T_super_root
-         *     - node with type = T_pinstr "x"
-         *       + contains PI "x"
-         *     - root node with type = T_element "a"
-         *       - node with type = T_data: contains "y"
-         *     - node with type = T_pinstr "y"
-         *       + contains PI "y"
-         * Notes:
-         * (1) In previous versions of PXP this mode was called
-         *     virtual_root, and it produced an additional node of type
-         *     T_element "-vr" instead of T_super_root.
-         * (2) The T_super_root node is created from the super root exemplar
-         *     in your spec.
-         *)
-
-      enable_comment_nodes : bool;
-         (* When enabled, comments are represented as nodes with type =
-         * T_comment.
-         * To access the contents of comments, use the method "comment"
-         * for the comment nodes. 
-         * These nodes behave like elements; however, they are normally
-         * empty and do not have attributes. Note that it is possible to
-         * add children to comment nodes and to set attributes, but it is
-         * strongly recommended not to do so. There are no checks on
-         * such abnormal use, because they would cost too
-         * much time, even when no comment nodes are generated at all.
-         *
-         * Comment nodes should be disabled unless you must parse a 
-         * third-party XML text which uses comments as another data
-         * container.
-         *
-         * The nodes of type T_comment are created from the comment exemplars
-         * in your spec.
-         *)
-
-      encoding : rep_encoding;
-        (* Specifies the encoding used for the *internal* representation
-        * of any character data.
-        * Note that the default is still Enc_iso88591.
-        *)
-
-      recognize_standalone_declaration : bool;
-        (* Whether the "standalone" declaration is recognized or not.
-        * This option does not have an effect on well-formedness parsing:
-        * in this case such declarations are never recognized.
-        *
-        * Recognizing the "standalone" declaration means that the 
-        * value of the declaration is scanned and passed to the DTD,
-        * and that the "standalone-check" is performed. 
-        *
-        * Standalone-check: If a document is flagged standalone='yes' 
-        * some additional constraints apply. The idea is that a parser
-        * without access to any external document subsets can still parse
-        * the document, and will still return the same values as the parser
-        * with such access. For example, if the DTD is external and if
-        * there are attributes with default values, it is checked that there
-        * is no element instance where these attributes are omitted - the
-        * parser would return the default value but this requires access to
-        * the external DTD subset.
-        *)
-
-      store_element_positions : bool;
-        (* Whether the file name, the line and the column of the
-        * beginning of elements are stored in the element nodes.
-        * This option may be useful to generate error messages.
-        * 
-        * Positions are only stored for:
-        * - Elements
-        * - Wrapped processing instructions (see enable_pinstr_nodes)
-        * For all other node types, no position is stored.
-        *
-        * You can access positions by the method "position" of nodes.
-        *)
-
-      idref_pass : bool;
-        (* Whether the parser does a second pass and checks that all
-        * IDREF and IDREFS attributes contain valid references.
-        * This option works only if an ID index is available. To create
-        * an ID index, pass an index object as id_index argument to the
-        * parsing functions (such as parse_document_entity; see below).
-        *
-        * "Second pass" does not mean that the XML text is again parsed;
-        * only the existing document tree is traversed, and the check
-        * on bad IDREF/IDREFS attributes is performed for every node.
-        *)
-
-      validate_by_dfa : bool;
-        (* If true, and if DFAs are available for validation, the DFAs will
-        * actually be used for validation.
-        * If false, or if no DFAs are available, the standard backtracking
-        * algorithm will be used.
-        * DFA = deterministic finite automaton.
-        *
-        * DFAs are only available if accept_only_deterministic_models is
-        * "true" (because in this case, it is relatively cheap to construct
-        * the DFAs). DFAs are a data structure which ensures that validation
-        * can always be performed in linear time.
-        *
-        * I strongly recommend using DFAs; however, there are examples
-        * for which validation by backtracking is faster.
-        *)
-
-      accept_only_deterministic_models : bool;
-        (* Whether only deterministic content models are accepted in DTDs. *)
-
-      (* The following options are not implemented, or only for internal
-       * use.
-       *)
-
-      debugging_mode : bool;
-    }
-
-
-type source =
-    Entity of ((dtd -> Pxp_entity.entity) * Pxp_reader.resolver)
-  | ExtID of (ext_id * Pxp_reader.resolver)
-
-val from_channel : 
-      ?system_encoding:encoding -> ?id:ext_id -> ?fixenc:encoding -> 
-      in_channel -> source
-
-val from_string :
-      ?fixenc:encoding -> string -> source
-
-val from_file :
-      ?system_encoding:encoding -> string -> source
-
-(* Notes on sources (version 2):
- *
- * Sources specify where the XML text to parse comes from. Sources not only
- * represent character streams, but also external IDs (i.e. SYSTEM or PUBLIC
- * names), and they are interpreted as a specific encoding of characters.
- * A source should be associated with an external ID, because otherwise
- * it is not known how to handle relative names.
- *
- * There are two primary sources, Entity and ExtID, and several functions
- * for derived sources. First explanations for the functions:
- *
- * from_channel: The XML text is read from an in_channel. By default, the
- *   channel is not associated with an external ID, and it is impossible
- *   to resolve relative SYSTEM IDs found in the document.
- *   If the ?id argument is passed, it is assumed that the channel has this
- *   external ID. If relative SYSTEM IDs occur in the document, they can
- *   be interpreted; however, it is only possible to read from "file:"
- *   IDs.
- *   By default, the channel automatically detects the encoding. You can
- *   set a fixed encoding by passing the ?fixenc argument.
- *
- * from_string: The XML text is read from a string.
- *   It is impossible to read from any external entity whose reference is found
- *   in the string.
- *   By default, the encoding of the string is detected automatically. You can
- *   set a fixed encoding by passing the ?fixenc argument.
- *
- * from_file: The XML text is read from the file whose file name is
- *   passed to the function (as UTF-8 string).
- *   Relative system IDs can be interpreted by this function.
- *   The ?system_encoding argument specifies the character encoding used
- *   for file names (sic!). By default, UTF-8 is assumed.
- *
- * Examples:
- *
- * from_file "/tmp/file.xml": 
- *   reads from this file, which is assumed to have the ID 
- *   SYSTEM "file://localhost/tmp/file.xml".
- *
- * let ch = open_in "/tmp/file.xml" in
- * from_channel ~id:(System "file://localhost/tmp/file.xml") ch
- *   This does the same, but uses a channel.
- *
- * from_channel ~id:(System "http://host/file.xml")
- *              ch
- *   reads from the channel ch, and it is assumed that the ID is
- *   SYSTEM "http://host/file.xml". If there is any relative SYSTEM ID,
- *   it will be interpreted relative to this location; however, there is
- *   no way to read via HTTP.
- *   If there is any "file:" SYSTEM ID, it is possible to read the file.
- *
- * The primary sources:
- *
- * - ExtID(x,r): The identifier x (either the SYSTEM or the PUBLIC name) of the
- *   entity to read from is passed to the resolver, and the resolver finds
- *   the entity and opens it.
- *   The intention of this option is to allow customized
- *   resolvers to interpret external identifiers without any restriction.
- *   The Pxp_reader module contains several classes allowing the user to
- *   compose such a customized resolver from predefined components.
- *
- *   ExtID is the interface of choice for own extensions to resolvers.
- *
- * - Entity(m,r): You can implementy every behaviour by using a customized
- *   entity class. Once the DTD object d is known that will be used during
- *   parsing, the entity  e = m d  is determined and used together with the
- *   resolver r.
- *   This is only for hackers.
- *)
-
-
-
-val default_config : config
-  (* - Warnings are thrown away
-   * - Error messages will contain line numbers
-   * - Neither T_super_root nor T_pinstr nor T_comment nodes are generated
-   * - The internal encoding is ISO-8859-1
-   * - The standalone declaration is checked
-   * - Element positions are stored
-   * - The IDREF pass is left out
-   * - If available, DFAs are used for validation
-   * - Only deterministic content models are accepted
-   *) 
-
-val default_extension : ('a node extension) as 'a
-  (* A "null" extension; an extension that does not extend the functionality *)
-
-val default_spec : ('a node extension as 'a) spec
-  (* Specifies that you do not want to use extensions. *)
-
-val parse_dtd_entity : config -> source -> dtd
-  (* Parse an entity containing a DTD (external subset), and return this DTD. *)
-
-val extract_dtd_from_document_entity : config -> source -> dtd
-  (* Parses a closed document, i.e. a document beginning with <!DOCTYPE...>,
-   * and returns the DTD contained in the document.
-   * The parts of the document outside the DTD are actually not parsed,
-   * i.e. parsing stops when all declarations of the DTD have been read.
-   *)
-
-val parse_document_entity : 
-  ?transform_dtd:(dtd -> dtd) ->
-  ?id_index:('ext index) ->
-  config -> source -> 'ext spec -> 'ext document
-  (* Parse a closed document, i.e. a document beginning with <!DOCTYPE...>,
-   * and validate the contents of the document against the DTD contained
-   * and/or referenced in the document.
-   *
-   * If the optional argument ~transform_dtd is passed, the following 
-   * modification applies: After the DTD (both the internal and external
-   * subsets) has been parsed, the function ~transform_dtd is called,
-   * and the resulting DTD is actually used to validate the document.
-   *
-   * If the optional argument ~transform_dtd is missing, the parser
-   * behaves in the same way as if the identity were passed as ~transform_dtd.
-   *
-   * If the optional argument ~id_index is present, the parser adds
-   * any ID attribute to the passed index. An index is required to detect
-   * violations of the uniqueness of IDs.
-   *)
-
-val parse_wfdocument_entity : 
-  config -> source -> 'ext spec -> 'ext document
-  (* Parse a closed document (see parse_document_entity), but do not
-   * validate it. Only checks on well-formedness are performed.
-   *)
-
-val parse_content_entity  : 
-  ?id_index:('ext index) ->
-  config -> source -> dtd -> 'ext spec -> 'ext node
-  (* Parse a file representing a well-formed fragment of a document. The
-   * fragment must be a single element (i.e. something like <a>...</a>;
-   * not a sequence like <a>...</a><b>...</b>). The element is validated
-   * against the passed DTD, but it is not checked whether the element is
-   * the root element specified in the DTD.
-   *
-   * If the optional argument ~id_index is present, the parser adds
-   * any ID attribute to the passed index. An index is required to detect
-   * violations of the uniqueness of IDs.
-   *)
-
-val parse_wfcontent_entity : 
-  config -> source -> 'ext spec -> 'ext node
-  (* Parse a file representing a well-formed fragment of a document
-   * (see parse_content_entity). The fragment is not validated, only
-   * checked for well-formedness.
-   *)
-  
-
-(*$-*)
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1  2000/11/17 09:57:30  lpadovan
- * Initial revision
- *
- * Revision 1.7  2000/08/18 20:15:43  gerd
- *     Config options:
- * - enable_super_root_nodes: new name for virtual_root
- * - enable_pinstr_nodes: new name for processing_instructions_inline
- * - enable_comment_nodes: new option
- *     Updated comments for various options.
- *
- * Revision 1.6  2000/07/23 02:16:33  gerd
- *     Support for DFAs.
- *
- * Revision 1.5  2000/07/14 13:57:29  gerd
- *     Added the id_index feature.
- *
- * Revision 1.4  2000/07/09 17:52:54  gerd
- *     New option store_element_positions.
- *
- * Revision 1.3  2000/07/08 16:26:21  gerd
- *     Added the signatures of the functions
- * 'extract_dtd_from_document_entity' and 'parse_wfcontent_entity'.
- * Updated the signature of 'parse_document_entity': New optional
- * argument 'transform_dtd'.
- *     Updated the comments.
- *
- * Revision 1.2  2000/07/04 22:09:03  gerd
- *     MAJOR CHANGE: Redesign of the interface (not yet complete).
- *
- * Revision 1.1  2000/05/29 23:48:38  gerd
- *     Changed module names:
- *             Markup_aux          into Pxp_aux
- *             Markup_codewriter   into Pxp_codewriter
- *             Markup_document     into Pxp_document
- *             Markup_dtd          into Pxp_dtd
- *             Markup_entity       into Pxp_entity
- *             Markup_lexer_types  into Pxp_lexer_types
- *             Markup_reader       into Pxp_reader
- *             Markup_types        into Pxp_types
- *             Markup_yacc         into Pxp_yacc
- * See directory "compatibility" for (almost) compatible wrappers emulating
- * Markup_document, Markup_dtd, Markup_reader, Markup_types, and Markup_yacc.
- *
- * ======================================================================
- * Old logs from markup_yacc.mli:
- *
- * Revision 1.4  2000/05/29 21:14:57  gerd
- *     Changed the type 'encoding' into a polymorphic variant.
- *
- * Revision 1.3  2000/05/27 19:24:01  gerd
- *     New option: recognize_standalone_declaration.
- *
- * Revision 1.2  2000/05/20 20:31:40  gerd
- *     Big change: Added support for various encodings of the
- * internal representation.
- *
- * Revision 1.1  2000/05/06 23:21:49  gerd
- *     Initial revision.
- *
- * Revision 1.9  2000/04/30 18:23:38  gerd
- *     New config options 'processing_instructions_inline' and
- * 'virtual_root'.
- *
- * Revision 1.8  2000/03/13 23:46:46  gerd
- *     Change: The 'resolver' component of the 'config' type has
- * disappeared. Instead, there is a new resolver component in the Entity
- * and ExtID values of 'source'. I hope that this makes clearer that the
- * resolver has only an effect if used together with Entity and ExtID
- * sources.
- *     Change: The Entity value can now return the entity dependent
- * on the DTD that is going to be used.
- *
- * Revision 1.7  2000/02/22 02:32:02  gerd
- *     Updated.
- *
- * Revision 1.6  2000/02/22 01:52:45  gerd
- *     Added documentation.
- *
- * Revision 1.5  2000/01/20 20:54:43  gerd
- *     New config.errors_with_line_numbers.
- *
- * Revision 1.4  1999/09/01 23:09:10  gerd
- *     New function parse_wf_entity that simulates a well-formedness
- * parser.
- *
- * Revision 1.3  1999/09/01 16:26:36  gerd
- *     Added an empty line. This is *really* a big change.
- *
- * Revision 1.2  1999/08/14 22:20:27  gerd
- *         The "config" slot has now a component "warner"which is
- * an object with a "warn" method. This is used to warn about characters
- * that cannot be represented in the Latin 1 alphabet.
- *         Furthermore, there is a new component "debugging_mode".
- *
- * Revision 1.1  1999/08/10 00:35:52  gerd
- *     Initial revision.
- *
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/rtests/MISSING_TESTS b/helm/DEVEL/pxp/pxp/rtests/MISSING_TESTS
deleted file mode 100644 (file)
index 386830b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-- Conditional sections:
-
-  Conditional_begin and Conditional_end must be in the same entity.
-
-- NDATA: check whether ENTITY attributes refer only to declared
-  NDATA entities
diff --git a/helm/DEVEL/pxp/pxp/rtests/Makefile b/helm/DEVEL/pxp/pxp/rtests/Makefile
deleted file mode 100644 (file)
index 653aaf2..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-.PHONY: all
-all:
-       $(MAKE) -C reader
-       $(MAKE) -C write
-       $(MAKE) -C codewriter
-       $(MAKE) -C canonxml
-       $(MAKE) -C negative
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.cmxa
-
-.PHONY: CLEAN
-CLEAN: clean
-       $(MAKE) -C reader clean
-       $(MAKE) -C write clean
-       $(MAKE) -C codewriter clean
-       $(MAKE) -C canonxml clean
-       $(MAKE) -C negative clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~
-       rm -f dumpfiles
-       $(MAKE) -C reader distclean
-       $(MAKE) -C write distclean
-       $(MAKE) -C codewriter distclean
-       $(MAKE) -C canonxml distclean
-       $(MAKE) -C negative distclean
-
-dumpfiles: dumpfiles.ml
-       ocamlc -o dumpfiles dumpfiles.ml
diff --git a/helm/DEVEL/pxp/pxp/rtests/README b/helm/DEVEL/pxp/pxp/rtests/README
deleted file mode 100644 (file)
index 5c56b7a..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-----------------------------------------------------------------------
-(Anti) Regression tests
-----------------------------------------------------------------------
-
-- To build the tests, "markup" must already be compiled in ..
-  Do "make" to start the compilation.
-
-- To run the tests:
-  ./run
-
-- Program dumpfiles: Do "make dumpfiles" to create it.
-  It takes XML file names on the command line, and writes a Latex
-  document on stdout. The document shows the contents of all files.
-  EXAMPLE:
-  $ ./dumpfiles canonxml/data_jclark_valid/ext-sa/*.* >x.tex
-  $ latex x
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/Makefile b/helm/DEVEL/pxp/pxp/rtests/canonxml/Makefile
deleted file mode 100644 (file)
index afbefb3..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# make validate:        make bytecode executable
-# make validate.opt:    make native executable
-# make clean:          remove intermediate files (in this directory)
-# make CLEAN:           remove intermediate files (recursively)
-# make distclean:      remove any superflous files (recursively)
-#----------------------------------------------------------------------
-
-OCAMLPATH=../..
-
-test_canonxml: test_canonxml.ml
-       ocamlfind ocamlc -g -custom -o test_canonxml -package .,str -linkpkg test_canonxml.ml
-
-#----------------------------------------------------------------------
-.PHONY: all
-all:
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa out.xml
-
-.PHONY: CLEAN
-CLEAN: clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~
-       rm -f test_canonxml
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/README b/helm/DEVEL/pxp/pxp/rtests/canonxml/README
deleted file mode 100644 (file)
index c4c3303..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-----------------------------------------------------------------------
-Regression test "canonxml":
-----------------------------------------------------------------------
-
-- An XML file is parsed, and the contents are printed in a canonical
-  format.
-
-- The output is compared with a reference file. The test is only
-  passed if the output and the reference are equal.
-
-- Test data "data_jclark_valid":
-  Contains the samples by James Clark that are valid. The subdirectories:
-  - sa:           standalone documents
-  - not-sa:       non-standalone document (with external DTD)
-  - ext-sa:       non-standalone document (with other external entity)
-
-  Tests that are not passed have been moved into the *-problems directories.
-  The reason is typically that characters have been used not in the 
-  Latin 1 character set.
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/001.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/001.ent
deleted file mode 100644 (file)
index 0b7088e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Data
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/001.xml
deleted file mode 100644 (file)
index e4cc432..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e SYSTEM "001.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/002.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/002.ent
deleted file mode 100644 (file)
index 45f6d8e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Data
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/002.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/002.xml
deleted file mode 100644 (file)
index 2ee5988..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e SYSTEM "002.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/003.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/003.ent
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/003.xml
deleted file mode 100644 (file)
index 407a4a1..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e SYSTEM "003.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/004.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/004.ent
deleted file mode 100644 (file)
index 0b7088e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Data
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/004.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/004.xml
deleted file mode 100644 (file)
index c3cdbd0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e SYSTEM "004.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/005.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/005.ent
deleted file mode 100644 (file)
index c6e97f8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<e/><e/><e/>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/005.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/005.xml
deleted file mode 100644 (file)
index 66b8a91..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (e*)>
-<!ELEMENT e EMPTY>
-<!ENTITY e SYSTEM "005.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/006.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/006.ent
deleted file mode 100644 (file)
index 2846b57..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-Data
-<e/>
-More data
-<e/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/006.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/006.xml
deleted file mode 100644 (file)
index b8f42b4..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA|e)*>
-<!ELEMENT e EMPTY>
-<!ENTITY e SYSTEM "006.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/007.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/007.ent
deleted file mode 100644 (file)
index ab1d696..0000000
Binary files a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/007.ent and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/007.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/007.xml
deleted file mode 100644 (file)
index 50416ed..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e SYSTEM "007.ent">
-]>
-<doc>X&e;Z</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/008.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/008.ent
deleted file mode 100644 (file)
index c6ca61f..0000000
Binary files a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/008.ent and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/008.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/008.xml
deleted file mode 100644 (file)
index 565f947..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e SYSTEM "008.ent">
-]>
-<doc>X&e;Z</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/009.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/009.ent
deleted file mode 100644 (file)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/009.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/009.xml
deleted file mode 100644 (file)
index 8119aa0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e SYSTEM "009.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/010.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/010.ent
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/010.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/010.xml
deleted file mode 100644 (file)
index 5c19ba2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e SYSTEM "010.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/011.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/011.ent
deleted file mode 100644 (file)
index cf7711b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-xyzzy
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/011.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/011.xml
deleted file mode 100644 (file)
index c43795c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e PUBLIC "a not very interesting file" "011.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/012.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/012.ent
deleted file mode 100644 (file)
index 8eb1fb9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-&e4;
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/012.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/012.xml
deleted file mode 100644 (file)
index 42d538f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e1 "&e2;">
-<!ENTITY e2 "&e3;">
-<!ENTITY e3 SYSTEM "012.ent">
-<!ENTITY e4 "&e5;">
-<!ENTITY e5 "(e5)">
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&e1;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/013.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/013.ent
deleted file mode 100644 (file)
index 7f25c50..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<e/>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/013.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/013.xml
deleted file mode 100644 (file)
index e7f221f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (e)>
-<!ELEMENT e (#PCDATA)>
-<!ATTLIST e
-  a1 CDATA "a1 default"
-  a2 NMTOKENS "a2 default"
->
-<!ENTITY x SYSTEM "013.ent">
-]>
-<doc>&x;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/014.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/014.ent
deleted file mode 100644 (file)
index 470fd6f..0000000
Binary files a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/014.ent and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/014.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/014.xml
deleted file mode 100644 (file)
index 6b068d7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e SYSTEM "014.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/001.xml
deleted file mode 100644 (file)
index 0a7acf8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>Data&#10;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/002.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/002.xml
deleted file mode 100644 (file)
index d4a445e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>Data</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/003.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/004.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/004.xml
deleted file mode 100644 (file)
index 0a7acf8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>Data&#10;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/005.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/005.xml
deleted file mode 100644 (file)
index 6e293aa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><e></e><e></e><e></e></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/006.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/006.xml
deleted file mode 100644 (file)
index 04b6fc8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>Data&#10;<e></e>&#10;More data&#10;<e></e>&#10;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/007.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/007.xml
deleted file mode 100644 (file)
index ab2a74c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>XYZ</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/008.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/008.xml
deleted file mode 100644 (file)
index ab2a74c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>XYZ</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/009.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/009.xml
deleted file mode 100644 (file)
index a79dff6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&#10;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/010.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/010.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/011.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/011.xml
deleted file mode 100644 (file)
index bf275ad..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>xyzzy&#10;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/012.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/012.xml
deleted file mode 100644 (file)
index 81a251c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>(e5)</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/013.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/013.xml
deleted file mode 100644 (file)
index 524d94e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><e a1="a1 default" a2="a2 default"></e></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/014.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/ext-sa/out/014.xml
deleted file mode 100644 (file)
index 71c6dc3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>data</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/001.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/001.ent
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/001.xml
deleted file mode 100644 (file)
index 8419329..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc SYSTEM "001.ent" [
-<!ELEMENT doc EMPTY>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/002.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/002.ent
deleted file mode 100644 (file)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/002.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/002.xml
deleted file mode 100644 (file)
index f497ac8..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc SYSTEM "002.ent" [
-<!ELEMENT doc EMPTY>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/003-1.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/003-1.ent
deleted file mode 100644 (file)
index f7af6e8..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc EMPTY>
-<!ENTITY % e SYSTEM "003-2.ent">
-<!ATTLIST doc a1 CDATA %e; "v1">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/003-2.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/003-2.ent
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/003.xml
deleted file mode 100644 (file)
index 465dafe..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "003-1.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/004-1.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/004-1.ent
deleted file mode 100644 (file)
index a988ade..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!ELEMENT doc EMPTY>
-<!ENTITY % e1 SYSTEM "004-2.ent">
-<!ENTITY % e2 "%e1;">
-%e1;
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/004-2.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/004-2.ent
deleted file mode 100644 (file)
index f2ed894..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ATTLIST doc a1 CDATA "value">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/004.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/004.xml
deleted file mode 100644 (file)
index 95c9a92..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "004-1.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/005-1.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/005-1.ent
deleted file mode 100644 (file)
index 6e224b5..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc EMPTY>
-<!ENTITY % e SYSTEM "005-2.ent">
-%e;
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/005-2.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/005-2.ent
deleted file mode 100644 (file)
index 8611eaf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ATTLIST doc a1 CDATA "v1">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/005.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/005.xml
deleted file mode 100644 (file)
index 9b87d9e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "005-1.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/006.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/006.ent
deleted file mode 100644 (file)
index c9f9cfe..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ELEMENT doc EMPTY>
-<!ATTLIST doc a1 CDATA "w1" a2 CDATA "w2">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/006.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/006.xml
deleted file mode 100644 (file)
index 3b9f3d3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc SYSTEM "006.ent" [
-<!ATTLIST doc a1 CDATA "v1">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/007.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/007.ent
deleted file mode 100644 (file)
index a26a45e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA "v1">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/007.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/007.xml
deleted file mode 100644 (file)
index 1c5bc80..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "007.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/008.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/008.ent
deleted file mode 100644 (file)
index a26a45e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA "v1">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/008.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/008.xml
deleted file mode 100644 (file)
index 0138562..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc PUBLIC "whatever" "008.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/009.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/009.ent
deleted file mode 100644 (file)
index a26a45e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA "v1">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/009.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/009.xml
deleted file mode 100644 (file)
index a000855..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc PUBLIC "whatever" "009.ent" [
-<!ATTLIST doc a2 CDATA "v2">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/010.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/010.ent
deleted file mode 100644 (file)
index e4c75bb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA "v2">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/010.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/010.xml
deleted file mode 100644 (file)
index 0cbf093..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc SYSTEM "010.ent" [
-<!ATTLIST doc a1 CDATA "v1">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/011.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/011.ent
deleted file mode 100644 (file)
index a26a45e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA "v1">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/011.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/011.xml
deleted file mode 100644 (file)
index a105cc5..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY % e SYSTEM "011.ent">
-%e;
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/012.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/012.ent
deleted file mode 100644 (file)
index 2714b33..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA "v1">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/012.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/012.xml
deleted file mode 100644 (file)
index 832359c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY % e SYSTEM "012.ent">
-%e;
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/013.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/013.ent
deleted file mode 100644 (file)
index 0fce054..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<![ INCLUDE [
-<!ATTLIST doc a1 CDATA "v1">
-]]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/013.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/013.xml
deleted file mode 100644 (file)
index 0430cc9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "013.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/014.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/014.ent
deleted file mode 100644 (file)
index 827e12e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<![ %e; [
-<!ATTLIST doc a1 CDATA "v1">
-]]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/014.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/014.xml
deleted file mode 100644 (file)
index 8ce35a3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc SYSTEM "014.ent" [
-<!ENTITY % e "INCLUDE">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/015.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/015.ent
deleted file mode 100644 (file)
index 9089b1c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<![ %e; [
-<!ATTLIST doc a1 CDATA "v1">
-]]>
-<!ATTLIST doc a2 CDATA "v2">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/015.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/015.xml
deleted file mode 100644 (file)
index 2e0103e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc SYSTEM "015.ent" [
-<!ENTITY % e "IGNORE">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/016.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/016.ent
deleted file mode 100644 (file)
index 7a11d00..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<![%e;[
-<!ATTLIST doc a1 CDATA "v1">
-]]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/016.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/016.xml
deleted file mode 100644 (file)
index 4340c9e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc SYSTEM "016.ent" [
-<!ENTITY % e "INCLUDE">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/017.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/017.ent
deleted file mode 100644 (file)
index 6718e5c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e "<!ATTLIST doc a1 CDATA 'v1'>">
-%e;
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/017.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/017.xml
deleted file mode 100644 (file)
index e2d218a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "017.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/018.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/018.ent
deleted file mode 100644 (file)
index ecaa135..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e "'v1'">
-<!ATTLIST doc a1 CDATA %e;>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/018.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/018.xml
deleted file mode 100644 (file)
index e27f48b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "018.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/019.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/019.ent
deleted file mode 100644 (file)
index 7d56007..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e "'v1'">
-<!ATTLIST doc a1 CDATA%e;>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/019.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/019.xml
deleted file mode 100644 (file)
index f9e9301..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "019.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/020.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/020.ent
deleted file mode 100644 (file)
index c681b50..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ENTITY % e "doc">
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST%e;a1 CDATA "v1">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/020.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/020.xml
deleted file mode 100644 (file)
index e009e38..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "020.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/021.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/021.ent
deleted file mode 100644 (file)
index 22d7134..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ENTITY % e "doc a1 CDATA">
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST %e; "v1">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/021.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/021.xml
deleted file mode 100644 (file)
index 77789b6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "021.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/022.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/022.ent
deleted file mode 100644 (file)
index 13bab79..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ENTITY % e "INCLUDE[">
-<!ELEMENT doc (#PCDATA)>
-<![ %e; <!ATTLIST doc a1 CDATA "v1"> ]]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/022.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/022.xml
deleted file mode 100644 (file)
index 62bad5d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "022.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/023.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/023.ent
deleted file mode 100644 (file)
index 4498d84..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e1 "do">
-<!ENTITY % e2 "c">
-<!ENTITY % e3 "%e1;%e2;">
-<!ATTLIST %e3; a1 CDATA "v1">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/023.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/023.xml
deleted file mode 100644 (file)
index 2a8d4d9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "023.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/024.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/024.ent
deleted file mode 100644 (file)
index 02c1878..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e1 "'v1'">
-<!ENTITY % e2 'a1 CDATA %e1;'>
-<!ATTLIST doc %e2;>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/024.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/024.xml
deleted file mode 100644 (file)
index 2121cae..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "024.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/025.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/025.ent
deleted file mode 100644 (file)
index d0ee124..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!ELEMENT doc EMPTY>
-<!ENTITY % e "x">
-<!ENTITY % e "y">
-<!ENTITY % v "'%e;'">
-<!ATTLIST doc a1 CDATA %v;>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/025.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/025.xml
deleted file mode 100644 (file)
index 8d5bf3e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "025.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/026.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/026.ent
deleted file mode 100644 (file)
index 1e35698..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ATTLIST doc a1 CDATA "w1">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/026.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/026.xml
deleted file mode 100644 (file)
index 2b320cc..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc ANY>
-<!ENTITY % e SYSTEM "026.ent">
-%e;
-<!ATTLIST doc a1 CDATA "x1" a2 CDATA "x2">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/027.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/027.ent
deleted file mode 100644 (file)
index 36a5466..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ENTITY % e "">
-<!ELEMENT doc (#PCDATA %e;)>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/027.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/027.xml
deleted file mode 100644 (file)
index cab657f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "027.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/028.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/028.ent
deleted file mode 100644 (file)
index 0b84263..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<![INCLUDE[<!ATTLIST doc a1 CDATA "v1">]]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/028.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/028.xml
deleted file mode 100644 (file)
index 70a6cf2..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "028.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/029.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/029.ent
deleted file mode 100644 (file)
index 6ba25e7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<![IGNORE[<!ATTLIST doc a1 CDATA "v1">]]>
-<!ATTLIST doc a1 CDATA "v2">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/029.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/029.xml
deleted file mode 100644 (file)
index 4e69c41..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "029.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/030.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/030.ent
deleted file mode 100644 (file)
index f623441..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<![IGNORE[]]>
-<![INCLUDE[]]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/030.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/030.xml
deleted file mode 100644 (file)
index 376e84c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "030.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/031-1.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/031-1.ent
deleted file mode 100644 (file)
index 8fd57b7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e SYSTEM "031-2.ent">
-<!ENTITY e "<![CDATA[%e;]]>">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/031-2.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/031-2.ent
deleted file mode 100644 (file)
index 8611eaf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ATTLIST doc a1 CDATA "v1">
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/031.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/031.xml
deleted file mode 100644 (file)
index 5a94354..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "031-1.ent">
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/001.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/002.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/002.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/003.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/004.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/004.xml
deleted file mode 100644 (file)
index bdc39e2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="value"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/005.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/005.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/006.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/006.xml
deleted file mode 100644 (file)
index d07627d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1" a2="w2"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/007.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/007.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/008.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/008.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/009.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/009.xml
deleted file mode 100644 (file)
index 7293fb6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1" a2="v2"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/010.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/010.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/011.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/011.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/012.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/012.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/013.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/013.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/014.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/014.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/015.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/015.xml
deleted file mode 100644 (file)
index 131a32f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a2="v2"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/016.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/016.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/017.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/017.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/018.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/018.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/019.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/019.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/020.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/020.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/021.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/021.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/022.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/022.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/023.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/023.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/024.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/024.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/025.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/025.xml
deleted file mode 100644 (file)
index eb3f967..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="x"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/026.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/026.xml
deleted file mode 100644 (file)
index 71c0202..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="w1" a2="x2"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/027.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/027.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/028.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/028.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/029.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/029.xml
deleted file mode 100644 (file)
index 7ac8b2b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v2"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/030.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/030.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/031.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/not-sa/out/031.xml
deleted file mode 100644 (file)
index 03a6c3f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&lt;!ATTLIST doc a1 CDATA &quot;v1&quot;&gt;&#10;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/001.xml
deleted file mode 100644 (file)
index d1e11b7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/002.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/002.xml
deleted file mode 100644 (file)
index 671db91..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc ></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/003.xml
deleted file mode 100644 (file)
index 8130204..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc >
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/004.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/004.xml
deleted file mode 100644 (file)
index c805282..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA #IMPLIED>
-]>
-<doc a1="v1"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/005.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/005.xml
deleted file mode 100644 (file)
index 9b203e7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA #IMPLIED>
-]>
-<doc a1 = "v1"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/006.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/006.xml
deleted file mode 100644 (file)
index 13c9477..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA #IMPLIED>
-]>
-<doc a1='v1'></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/007.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/007.xml
deleted file mode 100644 (file)
index 1bb7d38..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#32;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/008.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/008.xml
deleted file mode 100644 (file)
index e4b9ab7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&amp;&lt;&gt;&quot;&apos;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/009.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/009.xml
deleted file mode 100644 (file)
index 1fbdc30..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#x20;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/010.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/010.xml
deleted file mode 100644 (file)
index a964d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA #IMPLIED>
-]>
-<doc a1="v1" ></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/011.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/011.xml
deleted file mode 100644 (file)
index 8f99e5f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA #IMPLIED a2 CDATA #IMPLIED>
-]>
-<doc a1="v1" a2="v2"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/012.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/012.xml
deleted file mode 100644 (file)
index 7c07c88..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc : CDATA #IMPLIED>
-]>
-<doc :="v1"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/013.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/013.xml
deleted file mode 100644 (file)
index 1cf6401..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc _.-0123456789 CDATA #IMPLIED>
-]>
-<doc _.-0123456789="v1"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/014.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/014.xml
deleted file mode 100644 (file)
index 244ec80..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc abcdefghijklmnopqrstuvwxyz CDATA #IMPLIED>
-]>
-<doc abcdefghijklmnopqrstuvwxyz="v1"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/015.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/015.xml
deleted file mode 100644 (file)
index 011275b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc ABCDEFGHIJKLMNOPQRSTUVWXYZ CDATA #IMPLIED>
-]>
-<doc ABCDEFGHIJKLMNOPQRSTUVWXYZ="v1"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/016.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/016.xml
deleted file mode 100644 (file)
index d863f85..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc><?pi?></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/017.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/017.xml
deleted file mode 100644 (file)
index 3ace15b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc><?pi some data ? > <??></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/018.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/018.xml
deleted file mode 100644 (file)
index 5b3bf06..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc><![CDATA[<foo>]]></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/019.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/019.xml
deleted file mode 100644 (file)
index 1e935d4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc><![CDATA[<&]]></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/020.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/020.xml
deleted file mode 100644 (file)
index e8525e6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc><![CDATA[<&]>]]]></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/021.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/021.xml
deleted file mode 100644 (file)
index 6923ee2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc><!-- a comment --></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/022.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/022.xml
deleted file mode 100644 (file)
index a510a7f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc><!-- a comment ->--></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/023.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/023.xml
deleted file mode 100644 (file)
index 835e909..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e "">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/024.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/024.xml
deleted file mode 100644 (file)
index 9ba2f0e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (foo)>
-<!ELEMENT foo (#PCDATA)>
-<!ENTITY e "&#60;foo></foo>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/025.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/025.xml
deleted file mode 100644 (file)
index 6c78b2e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (foo*)>
-<!ELEMENT foo (#PCDATA)>
-]>
-<doc><foo/><foo></foo></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/026.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/026.xml
deleted file mode 100644 (file)
index 4d71396..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (foo*)>
-<!ELEMENT foo EMPTY>
-]>
-<doc><foo/><foo></foo></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/027.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/027.xml
deleted file mode 100644 (file)
index dcd3a9a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (foo*)>
-<!ELEMENT foo ANY>
-]>
-<doc><foo/><foo></foo></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/028.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/028.xml
deleted file mode 100644 (file)
index 24e4ec0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/029.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/029.xml
deleted file mode 100644 (file)
index 70e9ffb..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/030.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/030.xml
deleted file mode 100644 (file)
index a171155..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version = "1.0"?>
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/031.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/031.xml
deleted file mode 100644 (file)
index d97d137..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version='1.0' encoding="UTF-8"?>
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/032.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/032.xml
deleted file mode 100644 (file)
index 57ceada..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version='1.0' standalone='yes'?>
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/033.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/033.xml
deleted file mode 100644 (file)
index e3ce40e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version='1.0' encoding="UTF-8" standalone='yes'?>
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/034.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/034.xml
deleted file mode 100644 (file)
index 832e9d9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/035.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/035.xml
deleted file mode 100644 (file)
index a3500fd..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc />
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/036.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/036.xml
deleted file mode 100644 (file)
index ceacd4d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
-<?pi data?>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/037.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/037.xml
deleted file mode 100644 (file)
index e3add8e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
-<!-- comment -->
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/038.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/038.xml
deleted file mode 100644 (file)
index 087662d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!-- comment -->
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/039.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/039.xml
deleted file mode 100644 (file)
index 84c5b93..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?pi data?>
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/040.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/040.xml
deleted file mode 100644 (file)
index 4482f2c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA #IMPLIED>
-]>
-<doc a1="&quot;&lt;&amp;&gt;&apos;"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/041.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/041.xml
deleted file mode 100644 (file)
index 80bb2da..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA #IMPLIED>
-]>
-<doc a1="&#65;"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/042.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/042.xml
deleted file mode 100644 (file)
index 5cb4bbe..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#00000000000000000000000000000000065;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/043.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/043.xml
deleted file mode 100644 (file)
index 4774e5a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ATTLIST doc a1 CDATA #IMPLIED>
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc a1="foo
-bar"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/044.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/044.xml
deleted file mode 100644 (file)
index 8321a14..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (e*)>
-<!ELEMENT e EMPTY>
-<!ATTLIST e a1 CDATA "v1" a2 CDATA "v2" a3 CDATA #IMPLIED>
-]>
-<doc>
-<e a3="v3"/>
-<e a1="w1"/>
-<e a2="w2" a3="v3"/>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/045.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/045.xml
deleted file mode 100644 (file)
index 2d70b32..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA "v1">
-<!ATTLIST doc a1 CDATA "z1">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/046.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/046.xml
deleted file mode 100644 (file)
index 79e039b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA "v1">
-<!ATTLIST doc a2 CDATA "v2">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/047.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/047.xml
deleted file mode 100644 (file)
index 6dd4ddf..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>X
-Y</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/048.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/048.xml
deleted file mode 100644 (file)
index e0c6caf..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>]</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/049.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/049.xml
deleted file mode 100644 (file)
index 8cec20d..0000000
Binary files a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/049.xml and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/050.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/050.xml
deleted file mode 100644 (file)
index 00e7a78..0000000
Binary files a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/050.xml and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/051.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/051.xml
deleted file mode 100644 (file)
index 1202e50..0000000
Binary files a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/051.xml and /dev/null differ
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/052.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/052.xml
deleted file mode 100644 (file)
index 69c9902..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>ð€€ô¿½</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/053.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/053.xml
deleted file mode 100644 (file)
index d8718a4..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "<e/>">
-<!ELEMENT doc (e)>
-<!ELEMENT e EMPTY>
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/054.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/054.xml
deleted file mode 100644 (file)
index 638693b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-
-
-<doc
-></doc
->
-
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/055.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/055.xml
deleted file mode 100644 (file)
index a1a2a7a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<?pi  data?>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/056.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/056.xml
deleted file mode 100644 (file)
index 1aa0813..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#x0000000000000000000000000000000000000041;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/057.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/057.xml
deleted file mode 100644 (file)
index 796ec2d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (a*)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/058.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/058.xml
deleted file mode 100644 (file)
index f0830bf..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ATTLIST doc a1 NMTOKENS #IMPLIED>
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc a1=" 1    2       "></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/059.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/059.xml
deleted file mode 100644 (file)
index 07604ef..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (e*)>
-<!ELEMENT e EMPTY>
-<!ATTLIST e a1 CDATA #IMPLIED a2 CDATA #IMPLIED a3 CDATA #IMPLIED>
-]>
-<doc>
-<e a1="v1" a2="v2" a3="v3"/>
-<e a1="w1" a2="v2"/>
-<e a1="v1" a2="w2" a3="v3"/>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/060.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/060.xml
deleted file mode 100644 (file)
index fc20976..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>X&#10;Y</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/061.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/061.xml
deleted file mode 100644 (file)
index 65f6d4d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#163;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/062.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/062.xml
deleted file mode 100644 (file)
index 5f4aab7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#xe40;&#xe08;&#xe21;ส์</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/063.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/063.xml
deleted file mode 100644 (file)
index a6dcdc6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE à¹€à¸ˆà¸¡à¸ªà¹Œ [
-<!ELEMENT à¹€à¸ˆà¸¡à¸ªà¹Œ (#PCDATA)>
-]>
-<เจมส์></เจมส์>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/064.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/064.xml
deleted file mode 100644 (file)
index c59acf8..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#x10000;&#x10FFFD;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/065.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/065.xml
deleted file mode 100644 (file)
index 1156e6d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "&#60;">
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/066.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/066.xml
deleted file mode 100644 (file)
index f332ffc..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA #IMPLIED>
-<!-- 34 is double quote -->
-<!ENTITY e1 "&#34;">
-]>
-<doc a1="&e1;"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/067.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/067.xml
deleted file mode 100644 (file)
index 470ee63..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#13;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/068.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/068.xml
deleted file mode 100644 (file)
index e1f87a9..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e "&#13;">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/069.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/069.xml
deleted file mode 100644 (file)
index 8f4c458..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!NOTATION n PUBLIC "whatever">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/070.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/070.xml
deleted file mode 100644 (file)
index 61a6d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY % e "<!ELEMENT doc (#PCDATA)>">
-%e;
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/071.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/071.xml
deleted file mode 100644 (file)
index b07de8c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a ID #IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/072.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/072.xml
deleted file mode 100644 (file)
index 68d5170..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a IDREF #IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/073.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/073.xml
deleted file mode 100644 (file)
index 8466a10..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a IDREFS #IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/074.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/074.xml
deleted file mode 100644 (file)
index d88455f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a ENTITY #IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/075.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/075.xml
deleted file mode 100644 (file)
index fd73101..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a ENTITIES #IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/076.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/076.xml
deleted file mode 100644 (file)
index 7f3d037..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a NOTATION (n1|n2) #IMPLIED>
-<!NOTATION n1 SYSTEM "http://www.w3.org/">
-<!NOTATION n2 SYSTEM "http://www.w3.org/">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/077.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/077.xml
deleted file mode 100644 (file)
index fb7b9fa..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a (1|2) #IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/078.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/078.xml
deleted file mode 100644 (file)
index 6f8ce37..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA #REQUIRED>
-]>
-<doc a="v"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/079.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/079.xml
deleted file mode 100644 (file)
index b647d0d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA #FIXED "v">
-]>
-<doc a="v"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/080.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/080.xml
deleted file mode 100644 (file)
index e644746..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA #FIXED "v">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/081.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/081.xml
deleted file mode 100644 (file)
index e17bb75..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (a, b, c)>
-<!ELEMENT a (a?)>
-<!ELEMENT b (b*)>
-<!ELEMENT c (a | b)+>
-]>
-<doc><a/><b/><c><a/></c></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/082.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/082.xml
deleted file mode 100644 (file)
index 055e0c2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY % e SYSTEM "e.dtd">
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/083.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/083.xml
deleted file mode 100644 (file)
index 1451165..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY % e PUBLIC 'whatever' "e.dtd">
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/084.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/084.xml
deleted file mode 100644 (file)
index c36bba2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE doc [<!ELEMENT doc (#PCDATA)>]><doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/085.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/085.xml
deleted file mode 100644 (file)
index d173b8b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e "<foo>">
-<!ENTITY e "">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/086.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/086.xml
deleted file mode 100644 (file)
index 1f82c22..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e "">
-<!ENTITY e "<foo>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/087.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/087.xml
deleted file mode 100644 (file)
index d3c7e39..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "<foo/&#62;">
-<!ELEMENT doc (foo)>
-<!ELEMENT foo EMPTY>
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/088.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/088.xml
deleted file mode 100644 (file)
index 7bd0e81..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e "&lt;foo>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/089.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/089.xml
deleted file mode 100644 (file)
index e144c75..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "&#x10000;&#x10FFFD;&#x10FFFF;">
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/090.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/090.xml
deleted file mode 100644 (file)
index f349eef..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE doc [
-<!ATTLIST e a NOTATION (n) #IMPLIED>
-<!ELEMENT doc (e)*>
-<!ELEMENT e (#PCDATA)>
-<!NOTATION n PUBLIC "whatever">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/091.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/091.xml
deleted file mode 100644 (file)
index a779ce8..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE doc [
-<!NOTATION n SYSTEM "http://www.w3.org/">
-<!ENTITY e SYSTEM "http://www.w3.org/" NDATA n>
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a ENTITY "e">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/092.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/092.xml
deleted file mode 100644 (file)
index 4e8eb6c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (a)*>
-<!ELEMENT a EMPTY>
-]>
-<doc>
-<a/>
-    <a/>       <a/>
-
-
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/093.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/093.xml
deleted file mode 100644 (file)
index 300578e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>
-
-
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/094.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/094.xml
deleted file mode 100644 (file)
index 09045d9..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY % e "foo">
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 CDATA "%e;">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/095.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/095.xml
deleted file mode 100644 (file)
index f6e1287..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ATTLIST doc a1 CDATA #IMPLIED>
-<!ATTLIST doc a1 NMTOKENS #IMPLIED>
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc a1="1  2"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/096.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/096.xml
deleted file mode 100644 (file)
index 5fd635d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ATTLIST doc a1 NMTOKENS " 1          2       ">
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/097.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/097.ent
deleted file mode 100644 (file)
index 8bb4305..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ATTLIST doc a2 CDATA #IMPLIED>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/097.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/097.xml
deleted file mode 100644 (file)
index 74b636f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e SYSTEM "097.ent">
-<!ATTLIST doc a1 CDATA "v1">
-%e;
-<!ATTLIST doc a2 CDATA "v2">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/098.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/098.xml
deleted file mode 100644 (file)
index 881de4e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc><?pi x
-y?></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/099.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/099.xml
deleted file mode 100644 (file)
index 64db61f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/100.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/100.xml
deleted file mode 100644 (file)
index 033855e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e PUBLIC ";!*#@$_%" "100.xml">
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/101.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/101.xml
deleted file mode 100644 (file)
index efd9efe..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e "&#34;">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/102.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/102.xml
deleted file mode 100644 (file)
index e034d04..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA #IMPLIED>
-]>
-<doc a="&#34;"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/103.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/103.xml
deleted file mode 100644 (file)
index 6b21a13..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#60;doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/104.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/104.xml
deleted file mode 100644 (file)
index 6469bc6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA #IMPLIED>
-]>
-<doc a="x      y"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/105.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/105.xml
deleted file mode 100644 (file)
index 3acc97c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA #IMPLIED>
-]>
-<doc a="x&#9;y"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/106.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/106.xml
deleted file mode 100644 (file)
index 4f3e8c8..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA #IMPLIED>
-]>
-<doc a="x&#10;y"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/107.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/107.xml
deleted file mode 100644 (file)
index 2a58153..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA #IMPLIED>
-]>
-<doc a="x&#13;y"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/108.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/108.xml
deleted file mode 100644 (file)
index 938f287..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e "
-">
-<!ATTLIST doc a CDATA #IMPLIED>
-]>
-<doc a="x&e;y"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/109.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/109.xml
deleted file mode 100644 (file)
index dcf2686..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA #IMPLIED>
-]>
-<doc a=""></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/110.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/110.xml
deleted file mode 100644 (file)
index c6a3a87..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e "&#13;&#10;">
-<!ATTLIST doc a CDATA #IMPLIED>
-]>
-<doc a="x&e;y"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/111.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/111.xml
deleted file mode 100644 (file)
index b4cdca6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a NMTOKENS #IMPLIED>
-]>
-<doc a="&#32;x&#32;&#32;y&#32;"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/112.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/112.xml
deleted file mode 100644 (file)
index 7924e67..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (a | b)>
-<!ELEMENT a (#PCDATA)>
-]>
-<doc><a></a></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/113.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/113.xml
deleted file mode 100644 (file)
index 51d2e6d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST e a CDATA #IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/114.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/114.xml
deleted file mode 100644 (file)
index f706b1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e "<![CDATA[&foo;]]>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/115.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/115.xml
deleted file mode 100644 (file)
index cacac33..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e1 "&e2;">
-<!ENTITY e2 "v">
-]>
-<doc>&e1;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/116.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/116.xml
deleted file mode 100644 (file)
index 7a174cf..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc><![CDATA[
-]]></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/117.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/117.xml
deleted file mode 100644 (file)
index 23c8406..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY rsqb "]">
-]>
-<doc>&rsqb;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/118.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/118.xml
deleted file mode 100644 (file)
index 068db63..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY rsqb "]]">
-]>
-<doc>&rsqb;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/119.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/119.xml
deleted file mode 100644 (file)
index dafff48..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc ANY>
-]>
-<doc><!-- -á --></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/001.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/002.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/002.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/003.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/004.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/004.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/005.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/005.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/006.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/006.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/007.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/007.xml
deleted file mode 100644 (file)
index 97cf3e3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc> </doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/008.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/008.xml
deleted file mode 100644 (file)
index 3ea232c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&amp;&lt;&gt;&quot;'</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/009.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/009.xml
deleted file mode 100644 (file)
index 97cf3e3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc> </doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/010.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/010.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/011.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/011.xml
deleted file mode 100644 (file)
index 7293fb6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1" a2="v2"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/012.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/012.xml
deleted file mode 100644 (file)
index 5a0c983..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc :="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/013.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/013.xml
deleted file mode 100644 (file)
index c9c7ec5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc _.-0123456789="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/014.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/014.xml
deleted file mode 100644 (file)
index ac6b28f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc abcdefghijklmnopqrstuvwxyz="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/015.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/015.xml
deleted file mode 100644 (file)
index 8e216eb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc ABCDEFGHIJKLMNOPQRSTUVWXYZ="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/016.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/016.xml
deleted file mode 100644 (file)
index 4fc7692..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><?pi ?></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/017.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/017.xml
deleted file mode 100644 (file)
index 3b9a2f8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><?pi some data ? > <??></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/018.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/018.xml
deleted file mode 100644 (file)
index a547101..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&lt;foo&gt;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/019.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/019.xml
deleted file mode 100644 (file)
index 05d4e2f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&lt;&amp;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/020.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/020.xml
deleted file mode 100644 (file)
index 95ae08a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&lt;&amp;]&gt;]</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/021.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/021.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/022.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/022.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/023.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/023.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/024.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/024.xml
deleted file mode 100644 (file)
index a9aa207..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><foo></foo></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/025.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/025.xml
deleted file mode 100644 (file)
index de0f566..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><foo></foo><foo></foo></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/026.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/026.xml
deleted file mode 100644 (file)
index de0f566..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><foo></foo><foo></foo></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/027.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/027.xml
deleted file mode 100644 (file)
index de0f566..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><foo></foo><foo></foo></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/028.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/028.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/029.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/029.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/030.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/030.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/031.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/031.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/032.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/032.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/033.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/033.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/034.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/034.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/035.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/035.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/036.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/036.xml
deleted file mode 100644 (file)
index 2bcfb06..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc><?pi data?>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/037.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/037.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/038.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/038.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/039.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/039.xml
deleted file mode 100644 (file)
index 82d117d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?pi data?><doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/040.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/040.xml
deleted file mode 100644 (file)
index d79cfe1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="&quot;&lt;&amp;&gt;'"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/041.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/041.xml
deleted file mode 100644 (file)
index 6f2cd58..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="A"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/042.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/042.xml
deleted file mode 100644 (file)
index f683039..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>A</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/043.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/043.xml
deleted file mode 100644 (file)
index e162b76..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="foo bar"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/044.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/044.xml
deleted file mode 100644 (file)
index 78028b7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&#10;<e a1="v1" a2="v2" a3="v3"></e>&#10;<e a1="w1" a2="v2"></e>&#10;<e a1="v1" a2="w2" a3="v3"></e>&#10;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/045.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/045.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/046.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/046.xml
deleted file mode 100644 (file)
index 7293fb6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1" a2="v2"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/047.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/047.xml
deleted file mode 100644 (file)
index b327ebd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>X&#10;Y</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/048.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/048.xml
deleted file mode 100644 (file)
index ced7d02..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>]</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/049.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/049.xml
deleted file mode 100644 (file)
index 7cc53f9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>£</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/050.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/050.xml
deleted file mode 100644 (file)
index 33703c7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>เจมส์</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/051.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/051.xml
deleted file mode 100644 (file)
index cfeb5a5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<เจมส์></เจมส์>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/052.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/052.xml
deleted file mode 100644 (file)
index f5a0484..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>ð€€ô¿½</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/053.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/053.xml
deleted file mode 100644 (file)
index c408384..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><e></e></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/054.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/054.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/055.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/055.xml
deleted file mode 100644 (file)
index 82d117d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?pi data?><doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/056.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/056.xml
deleted file mode 100644 (file)
index f683039..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>A</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/057.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/057.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/058.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/058.xml
deleted file mode 100644 (file)
index f898cc8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="1 2"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/059.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/059.xml
deleted file mode 100644 (file)
index 78028b7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&#10;<e a1="v1" a2="v2" a3="v3"></e>&#10;<e a1="w1" a2="v2"></e>&#10;<e a1="v1" a2="w2" a3="v3"></e>&#10;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/060.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/060.xml
deleted file mode 100644 (file)
index b327ebd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>X&#10;Y</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/061.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/061.xml
deleted file mode 100644 (file)
index 7cc53f9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>£</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/062.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/062.xml
deleted file mode 100644 (file)
index 33703c7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>เจมส์</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/063.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/063.xml
deleted file mode 100644 (file)
index cfeb5a5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<เจมส์></เจมส์>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/064.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/064.xml
deleted file mode 100644 (file)
index f5a0484..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>ð€€ô¿½</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/065.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/065.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/066.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/066.xml
deleted file mode 100644 (file)
index 7597d31..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="&quot;"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/067.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/067.xml
deleted file mode 100644 (file)
index 4bbdad4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&#13;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/068.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/068.xml
deleted file mode 100644 (file)
index 4bbdad4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&#13;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/069.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/069.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/070.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/070.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/071.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/071.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/072.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/072.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/073.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/073.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/074.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/074.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/075.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/075.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/076.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/076.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/077.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/077.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/078.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/078.xml
deleted file mode 100644 (file)
index fcab0cd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="v"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/079.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/079.xml
deleted file mode 100644 (file)
index fcab0cd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="v"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/080.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/080.xml
deleted file mode 100644 (file)
index fcab0cd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="v"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/081.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/081.xml
deleted file mode 100644 (file)
index e356e7e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><a></a><b></b><c><a></a></c></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/082.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/082.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/083.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/083.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/084.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/084.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/085.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/085.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/086.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/086.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/087.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/087.xml
deleted file mode 100644 (file)
index a9aa207..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><foo></foo></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/088.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/088.xml
deleted file mode 100644 (file)
index a547101..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&lt;foo&gt;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/089.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/089.xml
deleted file mode 100644 (file)
index e01d86e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>ð€€ô¿½ô¿¿</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/090.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/090.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/091.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/091.xml
deleted file mode 100644 (file)
index dd3bbed..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="e"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/092.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/092.xml
deleted file mode 100644 (file)
index 87269f7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&#10;<a></a>&#10;    <a></a>&#9;<a></a>&#10;&#10;&#10;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/093.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/093.xml
deleted file mode 100644 (file)
index 631bfde..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&#10;&#10;&#10;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/094.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/094.xml
deleted file mode 100644 (file)
index 636ab47..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="%e;"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/095.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/095.xml
deleted file mode 100644 (file)
index a20706e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="1  2"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/096.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/096.xml
deleted file mode 100644 (file)
index f898cc8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="1 2"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/097.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/097.xml
deleted file mode 100644 (file)
index e05cfe6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/098.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/098.xml
deleted file mode 100644 (file)
index f6408de..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<doc><?pi x
-y?></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/099.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/099.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/100.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/100.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/101.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/101.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/102.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/102.xml
deleted file mode 100644 (file)
index 6e66b8d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="&quot;"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/103.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/103.xml
deleted file mode 100644 (file)
index 96495d4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&lt;doc&gt;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/104.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/104.xml
deleted file mode 100644 (file)
index cc3def3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="x y"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/105.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/105.xml
deleted file mode 100644 (file)
index 5aed3d6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="x&#9;y"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/106.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/106.xml
deleted file mode 100644 (file)
index 1197d2f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="x&#10;y"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/107.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/107.xml
deleted file mode 100644 (file)
index 288f23c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="x&#13;y"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/108.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/108.xml
deleted file mode 100644 (file)
index cc3def3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="x y"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/109.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/109.xml
deleted file mode 100644 (file)
index c43bdf9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a=""></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/110.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/110.xml
deleted file mode 100644 (file)
index a92237b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="x  y"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/111.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/111.xml
deleted file mode 100644 (file)
index cc3def3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="x y"></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/112.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/112.xml
deleted file mode 100644 (file)
index c82f47b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><a></a></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/113.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/113.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/114.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/114.xml
deleted file mode 100644 (file)
index 8e0722a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&amp;foo;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/115.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/115.xml
deleted file mode 100644 (file)
index 682b814..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>v</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/116.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/116.xml
deleted file mode 100644 (file)
index a79dff6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&#10;</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/117.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/117.xml
deleted file mode 100644 (file)
index ced7d02..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>]</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/118.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/118.xml
deleted file mode 100644 (file)
index 31e37a9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>]]</doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/119.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_jclark_valid/sa/out/119.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/001.xml
deleted file mode 100644 (file)
index b13acd2..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE any [
-
-<!ENTITY x PUBLIC "x" "" NDATA p>
-<!ENTITY y PUBLIC "x" "" NDATA p>
-<!ENTITY z PUBLIC "x" "" NDATA p>
-
-<!NOTATION p PUBLIC "image/gif">
-<!NOTATION q PUBLIC "image/jpeg">
-<!NOTATION r PUBLIC "image/png">
-
-<!ELEMENT el EMPTY>
-<!ATTLIST el        
-          cdata     CDATA     #IMPLIED
-          id        ID        #IMPLIED
-          idref     IDREF     #IMPLIED
-          idrefs    IDREFS    #IMPLIED
-          entity    ENTITY    #IMPLIED
-          entities  ENTITIES  #IMPLIED
-          nmtoken   NMTOKEN   #IMPLIED
-          nmtokens  NMTOKENS  #IMPLIED
-          enum      (a|b|c)   #IMPLIED
-          notation  NOTATION (p|q|r)  #IMPLIED
->
-
-<!ELEMENT any ANY>
-]>
-
-<any>
-  <el cdata="a b c"/>
-  <el cdata=" a b c "/>
-  <el cdata="  a  b  c  "/>
-  <el id="A"/>
-  <el id=" B "/>
-  <el id="  C  "/>
-  <el idref="C"/>
-  <el idref=" A "/>
-  <el idref="  B  "/>
-  <el idrefs="A B C"/>
-  <el idrefs=" A B C "/>
-  <el idrefs="  A  B  C  "/>
-  <el entity="x"/>
-  <el entity=" x "/>
-  <el entity="  x  "/>
-  <el entities="x y z"/>
-  <el entities=" x y z "/>
-  <el entities="  x  y  z  "/>
-  <el nmtoken="a"/>
-  <el nmtoken=" a "/>
-  <el nmtoken="  a  "/>
-  <el nmtokens="a b c"/>
-  <el nmtokens=" a b c "/>
-  <el nmtokens="  a  b  c  "/>
-  <el enum="a"/>
-  <el enum=" a "/>
-  <el enum="  a  "/>
-  <el notation="p"/>
-  <el notation=" p "/>
-  <el notation="  p  "/>
-</any>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/002.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/002.xml
deleted file mode 100644 (file)
index 759207a..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE any [
-
-<!ELEMENT el EMPTY>
-<!ATTLIST el        
-          cdata     CDATA     #IMPLIED
-          nmtoken   NMTOKEN   #IMPLIED
-          nmtokens  NMTOKENS  #IMPLIED
->
-<!ELEMENT any ANY>
-]>
-
-<any>
-  <el cdata="a
-b
-c      d
-e "/>
-  <el nmtoken=" a  "/>
-  <el nmtoken="
-a
-"/>
-  <el nmtoken="
-a
-"/>
-  <el nmtoken="        a       "/>
-  <el nmtokens=" a b c "/>
-  <el nmtokens="
-a
-b
-c
-"/>
-  <el nmtokens="
-a
-b
-c
-"/>
-  <el nmtokens="       a       b       c       "/>
-</any>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/003.xml
deleted file mode 100644 (file)
index 1335a77..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE any [
-
-<!ELEMENT el EMPTY>
-<!ATTLIST el        
-          cdata     CDATA     #IMPLIED
-          nmtoken   NMTOKEN   #IMPLIED
-          nmtokens  NMTOKENS  #IMPLIED
->
-<!ELEMENT any ANY>
-
-<!ENTITY elinstance
-  '<el cdata="a
-b
-c      d
-e "/>
-  <el nmtoken=" a  "/>
-  <el nmtoken="
-a
-"/>
-  <el nmtoken="
-a
-"/>
-  <el nmtoken="        a       "/>
-  <el nmtokens=" a b c "/>
-  <el nmtokens="
-a
-b
-c
-"/>
-  <el nmtokens="
-a
-b
-c
-"/>
-  <el nmtokens="       a       b       c       "/>'>
-]>
-
-<any>&elinstance;</any>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/004.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/004.xml
deleted file mode 100644 (file)
index 7cad5de..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE any [
-
-<!ELEMENT el EMPTY>
-<!ATTLIST el        
-          cdata     CDATA     #IMPLIED
->
-<!ELEMENT any ANY>
-
-<!ENTITY elinstance
-  '<el cdata="a&#13;
-b"/>'>
-]>
-
-<any>&elinstance;</any>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/005.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/005.xml
deleted file mode 100644 (file)
index 7f05469..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE any [
-
-<!ELEMENT el EMPTY>
-<!ATTLIST el        
-          cdata     CDATA     #IMPLIED
-          nmtoken   NMTOKEN   #IMPLIED
-          nmtokens  NMTOKENS  #IMPLIED
->
-<!ELEMENT any ANY>
-]>
-
-<any>
-  <el cdata="a&#10;b&#13;c&#9;d&#13;&#10;e&#32;"/>
-  <el nmtoken="&#32;a&#32;"/>
-  <el nmtoken="&#10;a&#10;"/>
-  <el nmtoken="&#13;a&#13;"/>
-  <el nmtoken="&#9;a&#9;"/>
-  <el nmtokens="&#32;a&#32;b&#32;c&#32;"/>
-  <el nmtokens="&#10;a&#10;b&#10;c&#10;"/>
-  <el nmtokens="&#13;a&#13;b&#13;c&#13;"/>
-  <el nmtokens="&#9;a&#9;b&#9;c&#9;"/>
-</any>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/006.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/006.xml
deleted file mode 100644 (file)
index 8f1287c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE any [
-
-<!ELEMENT el EMPTY>
-<!ATTLIST el        
-          nmtoken   NMTOKEN   #FIXED "a"
-          nmtokens  NMTOKENS  #FIXED "a b c"
->
-<!ELEMENT any ANY>
-]>
-
-<any>
-  <el nmtoken="
-a
-"/>
-  <el nmtokens="
-a
-b
-c
-"/>
-</any>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/007.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/007.xml
deleted file mode 100644 (file)
index 9cecac2..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE any [
-
-<!ELEMENT el EMPTY>
-<!ATTLIST el        
-          nmtoken   NMTOKEN   #FIXED "
-a
-"
-          nmtokens  NMTOKENS  #FIXED "a
-b
-c"
->
-<!ELEMENT any ANY>
-]>
-
-<any>
-  <el nmtoken="
-a
-"/>
-  <el nmtokens="
-a
-b
-c
-"/>
-</any>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/INDEX b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/INDEX
deleted file mode 100644 (file)
index e8fccb0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-001.xml                tests whether additional white space in attribute value
-               is removed during normalization for every att type but
-               not for CDATA
-002.xml                tests whether TABs, CRs, LFs, and CRLFs are converted
-               to spaces (only for CDATA, NMTOKEN, NMTOKENS)
-003.xml                similar to 002.xml, but the attribute values occur
-               in internal entities
-004.xml                tests whether CRLF normalization happens only once
-005.xml                tests whether spaces, TABs, LFs, CRs, and CRLFs are correctly
-               processed if they are written as character references
-006.xml                tests whether normalization is done before #FIXED comparison
-007.xml                tests whether normalization is done before #FIXED comparison
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/001.xml
deleted file mode 100644 (file)
index 818ca6e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<any>&#10;  <el cdata="a b c"></el>&#10;  <el cdata=" a b c "></el>&#10;  <el cdata="  a  b  c  "></el>&#10;  <el id="A"></el>&#10;  <el id="B"></el>&#10;  <el id="C"></el>&#10;  <el idref="C"></el>&#10;  <el idref="A"></el>&#10;  <el idref="B"></el>&#10;  <el idrefs="A B C"></el>&#10;  <el idrefs="A B C"></el>&#10;  <el idrefs="A B C"></el>&#10;  <el entity="x"></el>&#10;  <el entity="x"></el>&#10;  <el entity="x"></el>&#10;  <el entities="x y z"></el>&#10;  <el entities="x y z"></el>&#10;  <el entities="x y z"></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtokens="a b c"></el>&#10;  <el nmtokens="a b c"></el>&#10;  <el nmtokens="a b c"></el>&#10;  <el enum="a"></el>&#10;  <el enum="a"></el>&#10;  <el enum="a"></el>&#10;  <el notation="p"></el>&#10;  <el notation="p"></el>&#10;  <el notation="p"></el>&#10;</any>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/002.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/002.xml
deleted file mode 100644 (file)
index 5167ac3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<any>&#10;  <el cdata="a b c d e "></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtokens="a b c"></el>&#10;  <el nmtokens="a b c"></el>&#10;  <el nmtokens="a b c"></el>&#10;  <el nmtokens="a b c"></el>&#10;</any>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/003.xml
deleted file mode 100644 (file)
index 782bcfb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<any><el cdata="a b c d e "></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtokens="a b c"></el>&#10;  <el nmtokens="a b c"></el>&#10;  <el nmtokens="a b c"></el>&#10;  <el nmtokens="a b c"></el></any>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/004.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/004.xml
deleted file mode 100644 (file)
index 1b1c171..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<any><el cdata="a  b"></el></any>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/005.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/005.xml
deleted file mode 100644 (file)
index 1f722da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<any>&#10;  <el cdata="a&#10;b&#13;c&#9;d&#13;&#10;e "></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtoken="a"></el>&#10;  <el nmtokens="a b c"></el>&#10;  <el nmtokens="a b c"></el>&#10;  <el nmtokens="a b c"></el>&#10;  <el nmtokens="a b c"></el>&#10;</any>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/006.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/006.xml
deleted file mode 100644 (file)
index 3aefc89..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<any>&#10;  <el nmtoken="a" nmtokens="a b c"></el>&#10;  <el nmtoken="a" nmtokens="a b c"></el>&#10;</any>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/007.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/att_normalization/out/007.xml
deleted file mode 100644 (file)
index 3aefc89..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<any>&#10;  <el nmtoken="a" nmtokens="a b c"></el>&#10;  <el nmtoken="a" nmtokens="a b c"></el>&#10;</any>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/001.xml
deleted file mode 100644 (file)
index 4523f1b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE schema [
-<!ELEMENT schema ANY>
-<!ELEMENT element ANY>
-<!ATTLIST element minOccurs CDATA #IMPLIED>
-]>
-<schema>
-       <element minOccurs='0'/>
-       <element minOccurs='0'/>
-</schema>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/002+.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/002+.xml
deleted file mode 100644 (file)
index 81a22e2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE x [
-<!ELEMENT x ANY>
-]>
-<x/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/003.xml
deleted file mode 100644 (file)
index 45cd7eb..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE a [
-<!ELEMENT a ANY>
-<?pi 0?>
-]>
-<?pi 1?>
-<a>
-  <?pi 2?>
-  <a>
-    <?pi 3?>
-  </a>
-  <?pi 4?>
-</a>
-<?pi 5?>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/INDEX b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/INDEX
deleted file mode 100644 (file)
index 56368c5..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-This directory contains real regression tests, i.e. it is tested whether
-reported bugs have been fixed.
-
-001.xml                2000-08-26: Haruo's single quote bug. Attvalues delimited
-               by single quotes did not work for the UTF-8 lexer.
-002+.xml       2000-08-26: Haruo's file-names-are-not-URLs bug. from_file
-               interpreted the file name as URL-encoded string. "002+.xml"
-               because the "+" must not be decoded as space.
-003.xml                2000-08-26: Alain's bug that data nodes must not be merged
-               where PI nodes are created. In the "comments" directory
-               there is another test for the case that comments delimit
-               data material
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/out/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/out/001.xml
deleted file mode 100644 (file)
index e9d83b3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<schema>&#10;&#9;<element minOccurs="0"></element>&#10;&#9;<element minOccurs="0"></element>&#10;</schema>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/out/002+.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/out/002+.xml
deleted file mode 100644 (file)
index 794447b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<x></x>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/out/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/bugfixes/out/003.xml
deleted file mode 100644 (file)
index 22bd710..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?pi 1?><a>&#10;  <?pi 2?>&#10;  <a>&#10;    <?pi 3?>&#10;  </a>&#10;  <?pi 4?>&#10;</a><?pi 5?>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/comments/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/comments/001.xml
deleted file mode 100644 (file)
index fcb4a00..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE a [
-<!ELEMENT a ANY>
-<!-- Comment 0 -->
-]>
-<!-- Comment 1 -->
-<a>
-  <!-- Comment -2 -->
-  <a>
-    <!-- Comment 3 -->
-  </a>
-  <!-- Comment 4 -->
-</a>
-<!-- Comment 5 -->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/comments/INDEX b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/comments/INDEX
deleted file mode 100644 (file)
index 0df471f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-001            Checks whether enable_comment_nodes works
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/comments/out/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/comments/out/001.xml
deleted file mode 100644 (file)
index f03911d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!-- Comment 1 --><a>&#10;  <!-- Comment -2 -->&#10;  <a>&#10;    <!-- Comment 3 -->&#10;  </a>&#10;  <!-- Comment 4 -->&#10;</a><!-- Comment 5 -->
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/001.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/001.ent
deleted file mode 100644 (file)
index fde4af2..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ELEMENT doc EMPTY>
-<![IGNORE[<!ATTLIST doc att CDATA #REQUIRED>]]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/001.xml
deleted file mode 100644 (file)
index 02ef0bb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "001.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/002.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/002.ent
deleted file mode 100644 (file)
index 19c0206..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!ELEMENT doc EMPTY>
-<!-- Only a precondition check for test 003: the first ATTLIST counts -->
-<!ATTLIST doc att CDATA #IMPLIED>
-<!ATTLIST doc att CDATA #REQUIRED>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/002.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/002.xml
deleted file mode 100644 (file)
index 0c5372c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "002.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/003.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/003.ent
deleted file mode 100644 (file)
index 90bda5f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc EMPTY>
-<![INCLUDE[<!ATTLIST doc att CDATA #IMPLIED>]]>
-<!ATTLIST doc att CDATA #REQUIRED>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/003.xml
deleted file mode 100644 (file)
index c4b33e4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "003.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/004.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/004.ent
deleted file mode 100644 (file)
index 8ab5697..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc EMPTY>
-<!ENTITY % e "IGNORE">
-<![%e;[<!ATTLIST doc att CDATA #REQUIRED>]]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/004.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/004.xml
deleted file mode 100644 (file)
index 740d173..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "004.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/005.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/005.ent
deleted file mode 100644 (file)
index bd26a54..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!ELEMENT doc EMPTY>
-<!ENTITY % e "INCLUDE">
-<![%e;[<!ATTLIST doc att CDATA #IMPLIED>]]>
-<!ATTLIST doc att CDATA #REQUIRED>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/005.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/005.xml
deleted file mode 100644 (file)
index aa3a8f9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "005.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/006.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/006.ent
deleted file mode 100644 (file)
index 7ff3cdd..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc EMPTY>
-<![IGNORE[This is illegal here]]>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/006.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/006.xml
deleted file mode 100644 (file)
index bd2ee32..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "006.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/007.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/007.ent
deleted file mode 100644 (file)
index 180c6b0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!ELEMENT doc EMPTY>
-<!ENTITY % e "]]>">
-<![IGNORE[%e;]]>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/007.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/007.xml
deleted file mode 100644 (file)
index 1c5bc80..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "007.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/008.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/008.ent
deleted file mode 100644 (file)
index e36d707..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!ELEMENT doc EMPTY>
-<![IGNORE[<!ENTITY e "]]>">]]>
-<![IGNORE[<!ENTITY e ']]>'>]]>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/008.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/008.xml
deleted file mode 100644 (file)
index c140c0a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "008.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/009.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/009.ent
deleted file mode 100644 (file)
index 617d3d9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc EMPTY>
-<![IGNORE[<!-- ]]> -->]]>
-<![IGNORE[x <!-- ]]> -->]]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/009.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/009.xml
deleted file mode 100644 (file)
index c75bbb6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "009.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/010.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/010.ent
deleted file mode 100644 (file)
index 9a72698..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!ELEMENT doc EMPTY>
-<![IGNORE[x <![IGNORE[xxx]]>]]>
-<![IGNORE[<![IGNORE[xxx]]>]]>
-<![IGNORE[x <![INCLUDE[xxx]]>]]>
-<![IGNORE[<![INCLUDE[xxx]]>]]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/010.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/010.xml
deleted file mode 100644 (file)
index 93b5cf6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "010.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/011.ent b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/011.ent
deleted file mode 100644 (file)
index e24aad1..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!ELEMENT doc EMPTY>
-<![INCLUDE[ <![INCLUDE[ <!ATTLIST doc att CDATA #IMPLIED> ]]> 
-            <![IGNORE[ xxx ]]> 
-]]>
-<!ATTLIST doc att CDATA #REQUIRED>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/011.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/011.xml
deleted file mode 100644 (file)
index 587ab5d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "011.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/INDEX b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/INDEX
deleted file mode 100644 (file)
index 0360292..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-001    IGNORE works: <![IGNORE[ ... ]]>
-002    [precondition for 003] The first ATTLIST declaration for the same
-       attribute counts
-003    INCLUDE works: <![INCLUDE[ ... ]]>
-004    IGNORE works: <![%e;[ ... ]]> with e="IGNORE"
-005    INCLUDE works: <![%e;[ ... ]]> with e="INCLUDE"
-006    IGNORE works: <![IGNORE[ ... ]]> ignoring a section that would
-       be illegal
-007    Within ignored sections references to parameter references are
-       not resolved.
-       NOTE: You cannot derive this directly from the XML spec. because a 
-       precise definition what "ignoring" means is missing. This property
-       is an interpretation of the statement about reliable parsing in
-       section 3.4.
-008    Ignored sections may contain string literals containing "]]>".
-       NOTE: same problem with XML spec as 007
-009    Ignored sections may contain comments containing "]]>".
-       NOTE: same problem with XML spec as 007
-010    Nested conditional sections with outermost IGNORE
-011    Nested conditional sections with outermost INCLUDE
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/001.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/002.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/002.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/003.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/004.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/004.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/005.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/005.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/006.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/006.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/007.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/007.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/008.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/008.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/009.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/009.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/010.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/010.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/011.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/conditional/out/011.xml
deleted file mode 100644 (file)
index 7e8f183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/001.xml
deleted file mode 100644 (file)
index 0915363..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE a [
-  <!ELEMENT a ANY>
-  <?pxp:dtd optional-element-and-notation-declarations?>
-]>
-<a><b/></a>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/002.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/002.xml
deleted file mode 100644 (file)
index e993d3a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE a [
-  <!ELEMENT a ANY>
-  <?pxp:dtd optional-element-and-notation-declarations?>
-]>
-<a><b att1="1" att2=" 1 2 3 "/></a>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/003.xml
deleted file mode 100644 (file)
index c0bfad4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE a [
-  <!ELEMENT a (b)>
-  <?pxp:dtd optional-element-and-notation-declarations?>
-]>
-<a><b/></a>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/004.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/004.xml
deleted file mode 100644 (file)
index 889604d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE a [
-  <?pxp:dtd optional-element-and-notation-declarations?>
-]>
-<a><b/></a>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/005.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/005.xml
deleted file mode 100644 (file)
index 609962b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE a [
-  <!ELEMENT a ANY>
-  <!ENTITY x SYSTEM "sample" NDATA m>
-  <?pxp:dtd optional-element-and-notation-declarations?>
-]>
-<a/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/006.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/006.xml
deleted file mode 100644 (file)
index 265d272..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE a [
-  <!ELEMENT a ANY>
-  <!ATTLIST a g ENTITY #IMPLIED>
-  <!ENTITY x SYSTEM "sample" NDATA m>
-  <?pxp:dtd optional-element-and-notation-declarations?>
-]>
-<a g="x"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/007.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/007.xml
deleted file mode 100644 (file)
index 56fce53..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE a [
-  <!ELEMENT a ANY>
-  <?pxp:dtd optional-attribute-declarations elements="a"?>
-]>
-<a x="y"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/INDEX b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/INDEX
deleted file mode 100644 (file)
index 21b68b9..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?pxp:dtd optional-element-and-notation-declarations?>
-
-001.xml                Whether it works for undeclared elements
-002.xml                Whether it works for undeclared elements with attributes
-003.xml                Whether it works for undeclared elements in declarations
-004.xml                Whether it works for undeclared root elements
-005.xml                Whether it works for undeclared notations
-006.xml                Whether it works for undeclared notations which are actually
-               referred to
-
-<?pxp:dtd optional-attribute-declarations?>
-
-007.xml                Whether it works
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/001.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/001.xml
deleted file mode 100644 (file)
index 61040a8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<a><b></b></a>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/002.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/002.xml
deleted file mode 100644 (file)
index d894fe8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<a><b att1="1" att2=" 1 2 3 "></b></a>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/003.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/003.xml
deleted file mode 100644 (file)
index 61040a8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<a><b></b></a>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/004.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/004.xml
deleted file mode 100644 (file)
index 61040a8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<a><b></b></a>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/005.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/005.xml
deleted file mode 100644 (file)
index 7df325b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<a></a>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/006.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/006.xml
deleted file mode 100644 (file)
index f5d7bec..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<a g="x"></a>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/007.xml b/helm/DEVEL/pxp/pxp/rtests/canonxml/data_valid/optional_decls/out/007.xml
deleted file mode 100644 (file)
index 8685a8a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<a x="y"></a>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/run_canonxml b/helm/DEVEL/pxp/pxp/rtests/canonxml/run_canonxml
deleted file mode 100755 (executable)
index 2c40807..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#! /bin/bash
-
-check_dir () {
-    dir="$1"
-    shift
-    xmlfiles=`cd $dir && echo *.xml`
-    for file in $xmlfiles; do
-        echo -n "File $dir/$file: "
-       ./test_canonxml "$@" "$dir/$file" >out.xml
-       if cmp out.xml "$dir/out/$file"; then
-           echo "OK"
-       else
-           echo "NOT OK"
-           read
-       fi
-    done
-}
-
-check_dir "data_valid/conditional"
-check_dir "data_valid/att_normalization"
-check_dir "data_valid/optional_decls"
-check_dir "data_valid/comments" -comments
-check_dir "data_valid/bugfixes"
-
-#check_dir "data_jclark_valid/sa-problems"
-#check_dir "data_jclark_valid/ext-sa-problems"
-check_dir "data_jclark_valid/sa"
-check_dir "data_jclark_valid/not-sa"
-check_dir "data_jclark_valid/ext-sa"
-
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/canonxml/test_canonxml.ml b/helm/DEVEL/pxp/pxp/rtests/canonxml/test_canonxml.ml
deleted file mode 100644 (file)
index ef83a28..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-open Pxp_document;;
-open Pxp_yacc;;
-open Pxp_types;;
-
-let error_happened = ref false;;
-
-let rec prerr_error e =
-  prerr_endline (string_of_exn e)
-;;
-
-class warner =
-  object 
-    method warn w =
-      prerr_endline ("WARNING: " ^ w)
-  end
-;;
-
-let outbuf = String.create 8192;;
-
-let output_utf8 config s =
-  match config.encoding  with
-      `Enc_utf8 ->
-       print_string s
-    | `Enc_iso88591 ->
-       for i = 0 to String.length s - 1 do
-         let c = Char.code(s.[i]) in
-         if c <= 127 then
-           print_char(Char.chr(c))
-         else begin
-           print_char(Char.chr(0xc0 lor (c lsr 6)));
-           print_char(Char.chr(0x80 lor (c land 0x3f)));
-         end
-       done
-    | _ -> assert false
-;;
-
-
-let re = Str.regexp "[&<>\"\009\010\013]";;
-
-let escaped s =
-  Str.global_substitute 
-    re
-    (fun _ ->
-       match Str.matched_string s with
-          "&"    -> "&amp;"
-        | "<"    -> "&lt;"
-        | ">"    -> "&gt;"
-        | "\""   -> "&quot;"
-        | "\009" -> "&#9;"
-        | "\010" -> "&#10;"
-        | "\013" -> "&#13;"
-        | _      -> assert false
-    )
-    s
-;;
-
-
-let rec output_xml config n =
-  match n # node_type with
-      T_super_root ->
-       n # iter_nodes (output_xml config)
-    | T_pinstr pi_name ->
-       let [ pi ] = n # pinstr pi_name in
-       output_utf8 config "<?";
-       output_utf8 config (pi # target);
-       output_utf8 config " ";
-       output_utf8 config (pi # value);
-       output_utf8 config "?>";
-    | T_element name ->
-       output_utf8 config "<";
-       output_utf8 config name;
-       let sorted_attnames = 
-         Sort.list ( <= ) (n # attribute_names) in
-       List.iter
-         (fun attname ->
-            match n # attribute attname with
-                Value v ->
-                  output_utf8 config " ";
-                  output_utf8 config attname;
-                  output_utf8 config "=\"";
-                  output_utf8 config (escaped v);
-                  output_utf8 config "\"";
-              | Valuelist vl ->
-                  let v = String.concat " " vl in
-                  output_utf8 config " ";
-                  output_utf8 config attname;
-                  output_utf8 config "=\"";
-                  output_utf8 config (escaped v);
-                  output_utf8 config "\"";
-              | Implied_value -> 
-                  ()
-         )
-         sorted_attnames;
-       output_utf8 config ">";
-       n # iter_nodes (output_xml config);
-       output_utf8 config "</";
-       output_utf8 config name;
-       output_utf8 config ">";
-    | T_data ->
-       let v = n # data in
-       output_utf8 config (escaped v)
-    | T_comment ->
-       let v =
-         match n # comment with
-             None -> assert false
-           | Some x -> x
-       in
-       output_utf8 config ("<!--" ^ v ^ "-->")
-    | _ -> 
-       assert false
-;;
-
-
-let parse debug wf iso88591 comments filename =
-  let spec =
-    let e = new element_impl default_extension in
-    e # keep_always_whitespace_mode;
-    make_spec_from_mapping
-      ~super_root_exemplar:      e
-      ~default_pinstr_exemplar:  e
-      ~comment_exemplar:         e
-      ~data_exemplar:            (new data_impl default_extension)
-      ~default_element_exemplar: e
-      ~element_mapping:          (Hashtbl.create 1)
-      ()
-  in
-  let config =
-      { default_config with 
-         warner = new warner;
-         debugging_mode = debug;
-         enable_pinstr_nodes = true;
-         enable_super_root_node = true;
-         enable_comment_nodes = comments;
-         encoding = if iso88591 then `Enc_iso88591 else `Enc_utf8;
-         idref_pass = true;
-      }
-  in
-  try 
-    let parse_fn =
-      if wf then parse_wfdocument_entity 
-      else 
-       let index = new hash_index in
-       parse_document_entity 
-         ?transform_dtd:None 
-         ~id_index:(index :> 'ext index)
-    in
-    let tree =
-      parse_fn
-        config
-       (from_file filename)
-       spec 
-    in
-    output_xml config (tree # root)
-  with
-      e ->
-       error_happened := true;
-       prerr_error e
-;;
-
-
-let main() =
-  let debug = ref false in
-  let wf = ref false in
-  let iso88591 = ref false in
-  let comments = ref false in
-  let files = ref [] in
-  Arg.parse
-      [ "-d",   Arg.Set debug, 
-          "          turn debugging mode on";
-       "-wf",  Arg.Set wf,    
-            "         check only on well-formedness";
-       "-iso-8859-1", Arg.Set iso88591, 
-                    " use ISO-8859-1 as internal encoding instead of UTF-8";
-       "-comments", Arg.Set comments, 
-                 "   output comments, too";
-      ]
-      (fun x -> files := x :: !files)
-      "
-usage: test_canonxml [options] file ...
-
-List of options:";
-  files := List.rev !files;
-  List.iter (parse !debug !wf !iso88591 !comments) !files;
-;;
-
-
-main();
-if !error_happened then exit(1);;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:32  lpadovan
- * Initial revision
- *
- * Revision 1.8  2000/08/17 00:51:57  gerd
- *     Added -comments option to test enable_comment_nodes.
- *
- * Revision 1.7  2000/08/16 23:44:17  gerd
- *     Updates because of changes of the PXP API.
- *
- * Revision 1.6  2000/07/14 14:56:55  gerd
- *     Updated: warner.
- *
- * Revision 1.5  2000/07/14 14:17:58  gerd
- *     Updated because of iterface changes.
- *
- * Revision 1.4  2000/07/09 01:06:20  gerd
- *     Updated.
- *
- * Revision 1.3  2000/06/04 20:31:03  gerd
- *     Updates because of renamed PXP modules.
- *
- * Revision 1.2  2000/05/20 20:34:28  gerd
- *     Changed for UTF-8 support.
- *
- * Revision 1.1  2000/04/30 20:13:01  gerd
- *     Initial revision.
- *
- * Revision 1.3  1999/11/09 22:27:30  gerd
- *     The programs returns now an exit code of 1 if one of the
- * XML files produces an error.
- *
- * Revision 1.2  1999/09/01 23:09:56  gerd
- *     Added the option -wf that switches to well-formedness checking
- * instead of validation.
- *
- * Revision 1.1  1999/08/14 22:20:53  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/rtests/codewriter/Makefile b/helm/DEVEL/pxp/pxp/rtests/codewriter/Makefile
deleted file mode 100644 (file)
index bacc75c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# make validate:        make bytecode executable
-# make validate.opt:    make native executable
-# make clean:          remove intermediate files (in this directory)
-# make CLEAN:           remove intermediate files (recursively)
-# make distclean:      remove any superflous files (recursively)
-#----------------------------------------------------------------------
-
-OCAMLPATH=../..
-
-compile: compile.ml
-       ocamlfind ocamlc -g -custom -o compile -package .,str -linkpkg compile.ml
-
-#----------------------------------------------------------------------
-.PHONY: all
-all:
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa sample sample.ml out1 out2
-
-.PHONY: CLEAN
-CLEAN: clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~
-       rm -f compile
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/codewriter/compile.ml b/helm/DEVEL/pxp/pxp/rtests/codewriter/compile.ml
deleted file mode 100644 (file)
index 1bd6e22..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-open Pxp_document;;
-open Pxp_yacc;;
-open Pxp_types;;
-
-let error_happened = ref false;;
-
-let rec prerr_error e =
-  prerr_endline (string_of_exn e)
-;;
-
-
-class warner =
-  object 
-    method warn w =
-      prerr_endline ("WARNING: " ^ w)
-  end
-;;
-
-
-let compile in_filename out_filename print super_root pis comments =
-  let spec =
-    let e = new element_impl default_extension in
-    make_spec_from_mapping
-      ~super_root_exemplar:      e
-      ~default_pinstr_exemplar:  e
-      ~comment_exemplar:         e
-      ~data_exemplar:            (new data_impl default_extension)
-      ~default_element_exemplar: e
-      ~element_mapping:          (Hashtbl.create 1)
-      ()
-  in
-  let config =
-      { default_config with 
-         encoding = `Enc_utf8;
-         warner = new warner;
-         enable_super_root_node = super_root;
-         enable_pinstr_nodes = pis;
-         enable_comment_nodes = comments;
-      }
-  in
-  try 
-    let tree =
-      parse_document_entity
-        config
-       (from_file in_filename)
-       spec 
-    in
-    
-    let ch = open_out out_filename in
-    Pxp_codewriter.write_document ch tree;
-    output_string ch "(create_document (new Pxp_types.drop_warnings) Pxp_yacc.default_spec) # write (Pxp_types.Out_channel stdout) `Enc_utf8;;\n";
-    close_out ch;
-
-    if print then
-      tree # write (Out_channel stdout) `Enc_utf8;
-  with
-      e ->
-       error_happened := true;
-       prerr_error e
-;;
-
-
-let main() =
-  let in_file = ref "" in
-  let out_file = ref "" in
-  let print_file = ref false in
-  let super_root = ref false in
-  let pis = ref false in
-  let comments = ref false in
-  Arg.parse
-      [ "-in", (Arg.String (fun s -> in_file := s)),
-            " <file>      Set the XML file to read";
-       "-out", (Arg.String (fun s -> out_file := s)),
-            " <file>     Set the Ocaml file to write";
-       "-print", (Arg.Set print_file),
-              "          Print the XML file in standard form";
-       "-super-root", Arg.Set super_root,
-                   "     Generate a super root node";
-       "-pis", Arg.Set pis,
-            "            Generate wrapper nodes for processing instructions";
-       "-comments", Arg.Set comments,
-                 "       Generate nodes for comments";
-      ]
-      (fun x -> raise (Arg.Bad "Unexpected argument"))
-      "
-usage: compile [ options ]
-
-List of options:";
-  if !in_file = "" then begin
-    prerr_endline "No input file specified.";
-    exit 1
-  end;
-  if !out_file = "" then begin
-    prerr_endline "No output file specified.";
-    exit 1
-  end;
-  compile !in_file !out_file !print_file !super_root !pis !comments
-;;
-
-
-main();
-if !error_happened then exit(1);;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:35  lpadovan
- * Initial revision
- *
- * Revision 1.4  2000/08/17 01:20:15  gerd
- *     Update: Also tested whether super root nodes, pinstr nodes
- * and comment nodes work.
- *     Note: comment nodes are not fully tested yet.
- *
- * Revision 1.3  2000/08/16 23:44:19  gerd
- *     Updates because of changes of the PXP API.
- *
- * Revision 1.2  2000/07/16 17:54:15  gerd
- *     Updated because of PXP interface changes.
- *
- * Revision 1.1  2000/07/09 00:33:32  gerd
- *     Initial revision.
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/rtests/codewriter/run_codewriter b/helm/DEVEL/pxp/pxp/rtests/codewriter/run_codewriter
deleted file mode 100755 (executable)
index 08e0a42..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#! /bin/sh
-
-./test_codewriter sample001.xml
diff --git a/helm/DEVEL/pxp/pxp/rtests/codewriter/sample001.xml b/helm/DEVEL/pxp/pxp/rtests/codewriter/sample001.xml
deleted file mode 100644 (file)
index 4516b71..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE a [
-
-<!ELEMENT a (b | (c, d)* | (e, f)+ | g?)>
-<!ELEMENT b (#PCDATA | a)*>
-<!ELEMENT c EMPTY>
-<!ELEMENT d ANY>
-<!ELEMENT e EMPTY>
-<!ELEMENT f EMPTY>
-<!ELEMENT g EMPTY>
-
-<!ATTLIST a u CDATA #IMPLIED
-            v NMTOKEN "huhu"
-            w (q|p)   #REQUIRED
-            x NOTATION (n1|n2) "n1"
-            y ENTITY #IMPLIED>
-
-<!NOTATION n1 SYSTEM "/bin/n1-processor">
-<!NOTATION n2 SYSTEM "/bin/n2-processor">
-
-<!ENTITY u1 SYSTEM "file-u1" NDATA n1>
-<!ENTITY u2 SYSTEM "file-u2" NDATA n2>
-
-<!-- comment 1 -->
-<?pi1 args ...?>
-]>
-
-<!-- comment 2 -->
-<a u="1" w="q" x="n2">
-  <!-- comment 3 -->
-  <b>
-    <?pi2 args ...?>
-    This is text!
-    <a w="p" y="u1">
-      <c/>
-      <d/>
-    </a>
-  </b>
-  <!-- comment 4 -->
-</a>
-
-<!-- comment 5 -->
-<?pi3 args ...?>
-<!-- comment 6 -->
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/codewriter/test_codewriter b/helm/DEVEL/pxp/pxp/rtests/codewriter/test_codewriter
deleted file mode 100755 (executable)
index 769b6b9..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#! /bin/sh
-
-set -e
-
-sample="$1"
-echo "Testing $sample:"
-./compile -in "$sample" -out "sample.ml" -print -super-root -pis -comments >"out1"
-echo "- code written to sample.ml, formatted data to out1"
-OCAMLPATH=../.. ocamlfind ocamlc -package . -linkpkg -custom sample.ml -o sample
-echo "- sample.ml compiled to sample"
-./sample >out2
-echo "- re-read data written to out2"
-if cmp out1 out2; then
-    echo "- out1 and out2 are identical! OK"
-else
-    echo "- out1 and out2 differ! FAILURE!"
-    exit 1
-fi
diff --git a/helm/DEVEL/pxp/pxp/rtests/dumpfiles.ml b/helm/DEVEL/pxp/pxp/rtests/dumpfiles.ml
deleted file mode 100644 (file)
index d5f9e50..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-let dump_file name =
-  let ch = open_in_bin name in
-  let len = in_channel_length ch in
-  let sin = String.create len in
-  really_input ch sin 0 len;
-  close_in ch;
-
-  Printf.printf "\\noindent\\begin{minipage}{5.5cm}\n";
-  (* Printf.printf "\\rule{5.5cm}{1pt}\n"; *)
-  Printf.printf "\\footnotesize\\bf File %s:\\\\\n" name;
-  Printf.printf "\\tt{}";
-  
-  for i = 0 to len - 1 do
-    match sin.[i] with
-       ('\000'..'\008'|'\011'|'\012'|'\014'..'\031'|'\127'..'\255') as c ->
-         Printf.printf "{\\sl (%02x)}\\linebreak[2]" (Char.code c)
-      | '\009' ->
-         Printf.printf "{\\sl HT}\\linebreak[3]"
-      | '\010' ->
-         Printf.printf "{\\sl LF}\\\\\n"
-      | '\013' ->
-         Printf.printf "{\\sl CR}";
-         if not(i < len - 1 && sin.[i+1] = '\010') then
-           Printf.printf "\\\\\n";
-      | ' ' ->
-         Printf.printf "\\symbol{32}\\linebreak[3]"
-
-      | ('"'|'#'|'$'|'%'|'&'|'-'|'<'|'>'|'['|'\\'|']'|'^'|'_'|'`'|
-        '{'|'|'|'}'|'~') as c ->
-         Printf.printf "\\symbol{%d}\\linebreak[2]" (Char.code c)
-      | c ->
-         print_char c;
-         print_string "\\linebreak[0]"
-  done;
-
-  Printf.printf "\\mbox{}\\\\\n";
-  Printf.printf "\\rule{5.5cm}{1pt}\n";
-  Printf.printf "\\end{minipage}\n"
-;;
-
-
-print_endline "\\documentclass[a4paper]{article}";
-print_endline "\\usepackage{multicol}";
-print_endline "\\begin{document}";
-print_endline "\\begin{multicols}{2}";
-for i = 1 to Array.length(Sys.argv)-1 do
-  dump_file Sys.argv.(i)
-done;
-print_endline "\\end{multicols}";
-print_endline "\\end{document}"
-;;
-
-
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/Makefile b/helm/DEVEL/pxp/pxp/rtests/negative/Makefile
deleted file mode 100644 (file)
index 2e8842c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# make test_negative:   make bytecode executable
-# make clean:          remove intermediate files (in this directory)
-# make CLEAN:           remove intermediate files (recursively)
-# make distclean:      remove any superflous files (recursively)
-#----------------------------------------------------------------------
-
-OCAMLPATH=../..
-
-test_negative: test_negative.ml
-       ocamlfind ocamlc -custom -o test_negative -package .,str -linkpkg test_negative.ml
-
-#----------------------------------------------------------------------
-.PHONY: all
-all:
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa current.out
-
-.PHONY: CLEAN
-CLEAN: clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~
-       rm -f test_negative 
-
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/README b/helm/DEVEL/pxp/pxp/rtests/negative/README
deleted file mode 100644 (file)
index cfdaf38..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-----------------------------------------------------------------------
-Regression test "negative":
-----------------------------------------------------------------------
-
-- An errorneous XML file is parsed, and the error message is printed.
-
-- The output is compared with a reference file. The test is only
-  passed if the output and the reference are equal.
-
-- Test data "data_jclark_notwf":
-  Contains the samples by James Clark that are not well-formed. 
-  The subdirectories:
-  - sa:           standalone documents
-  - not-sa:       non-standalone document (with external DTD)
-  - ext-sa:       non-standalone document (with other external entity)
-
-- Test data "data_jclark_invalid":
-  Contains the samples by James Clark that are invalid.
-
-- Tests that are not passed have been moved into the *-problems directories.
-  The reason is typically that characters have been used not in the 
-  Latin 1 character set.
-
-- Test data "data_notwf":
-  Contains own tests with samples that are not well-formed.
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/001.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/001.out
deleted file mode 100644 (file)
index 2d51ff6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/001.xml", at line 5, position 3:
-ERROR (Validity constraint): The root element is `b' but is declared as `a
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/001.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/001.xml
deleted file mode 100644 (file)
index 9a346e7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE a [
-<!ELEMENT a ANY>
-<!ELEMENT b ANY>
-]>
-<b>x</b>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/010.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/010.out
deleted file mode 100644 (file)
index 8a2f8d6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/010.xml", at line 7, position 14:
-ERROR (Validity constraint): Attribute `id' is lexically malformed
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/010.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/010.xml
deleted file mode 100644 (file)
index 16e0e23..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el id ID #IMPLIED>
-]>
-
-<el id="100"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/011.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/011.out
deleted file mode 100644 (file)
index a03a204..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/011.xml", at line 10, position 17:
-ERROR (Validity constraint): ID not unique
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/011.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/011.xml
deleted file mode 100644 (file)
index 6aa3091..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ELEMENT el EMPTY>
-<!ATTLIST el id ID #IMPLIED>
-]>
-
-<any>
-  <el id="x100"/>
-  <el id="x100"/>
-</any>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/012.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/012.out
deleted file mode 100644 (file)
index 1870963..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-WARNING: More than one ATTLIST declaration for element type `el'
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/012.xml", at line 6, position 1:
-ERROR (Validity constraint): More than one ID attribute for element `el'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/012.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/012.xml
deleted file mode 100644 (file)
index d5bd7fa..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el id1 ID #IMPLIED>
-<!ATTLIST el id2 ID #IMPLIED>
-]>
-
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/013.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/013.out
deleted file mode 100644 (file)
index 98092c3..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/013.xml", at line 5, position 1:
-ERROR (Validity constraint): ID attribute must be #IMPLIED or #REQUIRED; element `el'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/013.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/013.xml
deleted file mode 100644 (file)
index 7d321a4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el id ID "a">
-]>
-
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/014.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/014.out
deleted file mode 100644 (file)
index ec1247b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/014.xml", at line 5, position 1:
-ERROR (Validity constraint): ID attribute must be #IMPLIED or #REQUIRED; element `el'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/014.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/014.xml
deleted file mode 100644 (file)
index a56220d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el id ID #FIXED "a">
-]>
-
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/015.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/015.out
deleted file mode 100644 (file)
index 18dd9c9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/015.xml", at line 7, position 17:
-ERROR (Validity constraint): Attribute `idref' is lexically malformed
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/015.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/015.xml
deleted file mode 100644 (file)
index d707f89..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el idref IDREF #IMPLIED>
-]>
-
-<el idref="100"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/016.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/016.out
deleted file mode 100644 (file)
index 4192286..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/016.xml", at line 7, position 22:
-ERROR (Validity constraint): Attribute `idrefs' is lexically malformed
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/016.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/016.xml
deleted file mode 100644 (file)
index 7ea9455..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el idrefs IDREFS #IMPLIED>
-]>
-
-<el idrefs="100 200"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/017.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/017.out
deleted file mode 100644 (file)
index 97115e6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/017.xml" at line 12, position 2:
-ERROR (Validity constraint): Attribute `idref' of element `el' refers to unknown ID `a20'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/017.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/017.xml
deleted file mode 100644 (file)
index da6e582..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ELEMENT el EMPTY>
-<!ATTLIST el id ID #IMPLIED
-             idref IDREF #IMPLIED
->
-]>
-
-<any>
-  <el id="a10"/>
-  <el idref="a20"/>
-</any>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/018.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/018.out
deleted file mode 100644 (file)
index 8d761c9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/018.xml" at line 12, position 2:
-ERROR (Validity constraint): Attribute `idrefs' of element `el' refers to unknown ID `a20'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/018.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/018.xml
deleted file mode 100644 (file)
index c3f011b..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ELEMENT el EMPTY>
-<!ATTLIST el id ID #IMPLIED
-             idrefs IDREFS #IMPLIED
->
-]>
-
-<any>
-  <el id="a10"/>
-  <el idrefs="a10 a20"/>
-</any>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/019.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/019.out
deleted file mode 100644 (file)
index 6617245..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/019.xml", at line 6, position 1:
-ERROR (Validity constraint): Reference to undeclared notation `x'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/019.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/019.xml
deleted file mode 100644 (file)
index e10ed94..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ENTITY ndata SYSTEM "" NDATA x>
-<!ELEMENT el EMPTY>
-<!ATTLIST el ent ENTITY #IMPLIED>
-]>
-
-<el ent="10"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/020.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/020.out
deleted file mode 100644 (file)
index a95a6a7..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/020.xml", at line 6, position 1:
-ERROR (Validity constraint): Reference to undeclared notation `x'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/020.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/020.xml
deleted file mode 100644 (file)
index 4f696dd..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ENTITY ndata SYSTEM "" NDATA x>
-<!ELEMENT el EMPTY>
-<!ATTLIST el ents ENTITIES #IMPLIED>
-]>
-
-<el ents="a 10"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/021.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/021.out
deleted file mode 100644 (file)
index bb950c7..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/021.xml", at line 6, position 1:
-ERROR (Validity constraint): Reference to undeclared notation `x'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/021.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/021.xml
deleted file mode 100644 (file)
index 64662ac..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ENTITY ndata SYSTEM "" NDATA x>
-<!ELEMENT el EMPTY>
-<!ATTLIST el ent ENTITY #IMPLIED>
-]>
-
-<el ent="x"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/022.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/022.out
deleted file mode 100644 (file)
index 2b8e091..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/022.xml", at line 6, position 1:
-ERROR (Validity constraint): Reference to undeclared notation `x'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/022.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/022.xml
deleted file mode 100644 (file)
index 3e8fe89..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ENTITY ndata SYSTEM "" NDATA x>
-<!ELEMENT el EMPTY>
-<!ATTLIST el ents ENTITIES #IMPLIED>
-]>
-
-<el ents="ndata a"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/023.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/023.out
deleted file mode 100644 (file)
index 4775ce1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/023.xml", at line 6, position 13:
-ERROR (Validity constraint): Attribute `nm' is lexically malformed
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/023.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/023.xml
deleted file mode 100644 (file)
index acf09e1..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el nm NMTOKEN #IMPLIED>
-]>
-<el nm="[]"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/024.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/024.out
deleted file mode 100644 (file)
index ad436a1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/024.xml", at line 6, position 17:
-ERROR (Validity constraint): Attribute `nms' is lexically malformed
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/024.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/024.xml
deleted file mode 100644 (file)
index cdeabbc..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el nms NMTOKENS #IMPLIED>
-]>
-<el nms="10 []"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/025.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/025.out
deleted file mode 100644 (file)
index f832e5d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/025.xml", at line 5, position 1:
-ERROR (Validity constraint): Default value for attribute `idref' is lexically malformed
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/025.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/025.xml
deleted file mode 100644 (file)
index 6b5531c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el idref IDREF "100">
-]>
-
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/026.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/026.out
deleted file mode 100644 (file)
index 2e311ed..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/026.xml", at line 5, position 1:
-ERROR (Validity constraint): Default value for attribute `idrefs' is lexically malformed
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/026.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/026.xml
deleted file mode 100644 (file)
index 75757c4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el idrefs IDREFS "100 200">
-]>
-
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/027.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/027.out
deleted file mode 100644 (file)
index f753d46..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/027.xml", at line 6, position 1:
-ERROR (Validity constraint): Reference to undeclared notation `x'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/027.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/027.xml
deleted file mode 100644 (file)
index 9c1fffb..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ENTITY ndata SYSTEM "" NDATA x>
-<!ELEMENT el EMPTY>
-<!ATTLIST el ent ENTITY "10">
-]>
-
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/028.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/028.out
deleted file mode 100644 (file)
index b8c4c83..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/028.xml", at line 6, position 1:
-ERROR (Validity constraint): Reference to undeclared notation `x'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/028.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/028.xml
deleted file mode 100644 (file)
index 2165803..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ENTITY ndata SYSTEM "" NDATA x>
-<!ELEMENT el EMPTY>
-<!ATTLIST el ents ENTITIES "a 10">
-]>
-
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/029.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/029.out
deleted file mode 100644 (file)
index 3e71466..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/029.xml", at line 5, position 1:
-ERROR (Validity constraint): Default value for attribute `nm' is lexically malformed
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/029.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/029.xml
deleted file mode 100644 (file)
index a9cc68f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el nm NMTOKEN "[]">
-]>
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/030.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/030.out
deleted file mode 100644 (file)
index 1c25ca8..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/030.xml", at line 5, position 1:
-ERROR (Validity constraint): Default value for attribute `nms' is lexically malformed
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/030.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/030.xml
deleted file mode 100644 (file)
index da8a26c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el nms NMTOKENS "10 []">
-]>
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/031.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/031.out
deleted file mode 100644 (file)
index 07ff0ff..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/031.xml", at line 6, position 1:
-ERROR (Validity constraint): Reference to undeclared notation `jpeg'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/031.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/031.xml
deleted file mode 100644 (file)
index 16d3b3b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!NOTATION gif PUBLIC "image/gif">
-<!ELEMENT el EMPTY>
-<!ATTLIST el n NOTATION (gif|jpeg) #IMPLIED>
-]>
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/032.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/032.out
deleted file mode 100644 (file)
index 5a5b4b6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/032.xml", at line 6, position 1:
-ERROR (Validity constraint): Illegal default value for attribute `n' in declaration for element `el'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/032.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/032.xml
deleted file mode 100644 (file)
index f4e2d4d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!NOTATION gif PUBLIC "image/gif">
-<!ELEMENT el EMPTY>
-<!ATTLIST el n NOTATION (gif) "jpeg">
-]>
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/033.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/033.out
deleted file mode 100644 (file)
index de96bda..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/033.xml", at line 7, position 14:
-ERROR (Validity constraint): Attribute `n' does not match one of the declared notation names
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/033.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/033.xml
deleted file mode 100644 (file)
index 0ca58da..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!NOTATION gif PUBLIC "image/gif">
-<!ELEMENT el EMPTY>
-<!ATTLIST el n NOTATION (gif) #IMPLIED>
-]>
-<el n="jpeg"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/034.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/034.out
deleted file mode 100644 (file)
index e1cca97..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/034.xml", at line 8, position 1:
-ERROR (Validity constraint): More than one NOTATION attribute for element `el'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/034.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/034.xml
deleted file mode 100644 (file)
index 10ee38f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!NOTATION gif PUBLIC "image/gif">
-<!ELEMENT el EMPTY>
-<!ATTLIST el n NOTATION (gif) #IMPLIED
-             m NOTATION (gif) #IMPLIED
->
-]>
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/035.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/035.out
deleted file mode 100644 (file)
index 9c3ea45..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/035.xml", at line 5, position 1:
-ERROR (Validity constraint): Illegal default value for attribute `enum' in declaration for element `el'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/035.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/035.xml
deleted file mode 100644 (file)
index a42060c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el enum (a|b|c) "d">
-]>
-
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/036.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/036.out
deleted file mode 100644 (file)
index 39e3f77..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/036.xml", at line 7, position 14:
-ERROR (Validity constraint): Attribute `enum' does not match one of the declared enumerator tokens
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/036.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/036.xml
deleted file mode 100644 (file)
index 12cf01d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el enum (a|b|c) #IMPLIED>
-]>
-
-<el enum="d"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/037.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/037.out
deleted file mode 100644 (file)
index afa614c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/037.xml", at line 7, position 5:
-ERROR (Validity constraint): Required attribute `x' is missing
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/037.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/037.xml
deleted file mode 100644 (file)
index 2619e60..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el x CDATA #REQUIRED>
-]>
-
-<el/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/038.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/038.out
deleted file mode 100644 (file)
index 902d7cd..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/038.xml", at line 7, position 13:
-ERROR (Validity constraint): Attribute `x' is fixed, but has here a different value
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/038.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/038.xml
deleted file mode 100644 (file)
index 2ad30db..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE el [
-<!ELEMENT el EMPTY>
-<!ATTLIST el x CDATA #FIXED "abc">
-]>
-
-<el x="def"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/060.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/060.ent
deleted file mode 100644 (file)
index 8c23f3e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ATTLIST el v3 CDATA "ghi">
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/060.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/060.out
deleted file mode 100644 (file)
index 29296ae..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-WARNING: More than one ATTLIST declaration for element type `el'
-WARNING: More than one ATTLIST declaration for element type `el'
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/060.xml", at line 17, position 12:
-ERROR (Validity constraint): Attribute `v3' of element type `el' violates standalone declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/060.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/060.xml
deleted file mode 100644 (file)
index 1cc0f2d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ELEMENT el EMPTY>
-<!ATTLIST el v1 CDATA "abc">
-<!ENTITY % declare_v2 '<!ATTLIST el v2 CDATA "def">'>
-%declare_v2;
-<!ENTITY % declare_v3 SYSTEM "060.ent">
-%declare_v3;
-]>
-
-<any>
-  <any><el v1="ABC" v2="DEF" v3="GHI"/></any>
-  <any><el v2="DEF" v3="GHI"/></any>
-  <any><el v3="GHI"/></any>
-  <any><el/></any>
-</any>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/061.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/061.ent
deleted file mode 100644 (file)
index 03674e9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ENTITY % declare_v3 '<!ATTLIST el v3 CDATA "ghi">'>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/061.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/061.out
deleted file mode 100644 (file)
index 40d1d07..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-WARNING: More than one ATTLIST declaration for element type `el'
-WARNING: More than one ATTLIST declaration for element type `el'
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/061.xml", at line 18, position 12:
-ERROR (Validity constraint): Attribute `v3' of element type `el' violates standalone declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/061.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/061.xml
deleted file mode 100644 (file)
index 226df78..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ELEMENT el EMPTY>
-<!ATTLIST el v1 CDATA "abc">
-<!ENTITY % declare_v2 '<!ATTLIST el v2 CDATA "def">'>
-%declare_v2;
-<!ENTITY % declare_declare_v3 SYSTEM "061.ent">
-%declare_declare_v3;
-%declare_v3;
-]>
-
-<any>
-  <any><el v1="ABC" v2="DEF" v3="GHI"/></any>
-  <any><el v2="DEF" v3="GHI"/></any>
-  <any><el v3="GHI"/></any>
-  <any><el/></any>
-</any>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/062.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/062.ent
deleted file mode 100644 (file)
index 8c23f3e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ATTLIST el v3 CDATA "ghi">
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/062.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/062.out
deleted file mode 100644 (file)
index b026613..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-WARNING: More than one ATTLIST declaration for element type `el'
-WARNING: More than one ATTLIST declaration for element type `el'
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/062.xml", at line 15, position 12:
-ERROR (Validity constraint): Attribute `v3' of element type `el' violates standalone declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/062.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/062.xml
deleted file mode 100644 (file)
index 458ac28..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<!DOCTYPE any SYSTEM "062.ent" [
-<!ELEMENT any ANY>
-<!ELEMENT el EMPTY>
-<!ATTLIST el v1 CDATA "abc">
-<!ENTITY % declare_v2 '<!ATTLIST el v2 CDATA "def">'>
-%declare_v2;
-]>
-
-<any>
-  <any><el v1="ABC" v2="DEF" v3="GHI"/></any>
-  <any><el v2="DEF" v3="GHI"/></any>
-  <any><el v3="GHI"/></any>
-  <any><el/></any>
-</any>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/063.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/063.ent
deleted file mode 100644 (file)
index 2d72317..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ENTITY e3 "ghi">
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/063.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/063.out
deleted file mode 100644 (file)
index 275ca29..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/063.xml", at line 15, position 2:
-ERROR (Validity constraint): Reference to entity `e3' violates standalone declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/063.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/063.xml
deleted file mode 100644 (file)
index 18b7061..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ENTITY e1 "abc">
-<!ENTITY % declare_e2 '<!ENTITY e2 "def">'>
-%declare_e2;
-<!ENTITY % declare_e3 SYSTEM "063.ent">
-%declare_e3;
-]>
-
-<any>
-  &e1;
-  &e2;
-  &e3;
-</any>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/064.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/064.ent
deleted file mode 100644 (file)
index 2d72317..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ENTITY e3 "ghi">
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/064.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/064.out
deleted file mode 100644 (file)
index d825206..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/064.xml", at line 17, position 10:
-ERROR (Validity constraint): Reference to entity `e3' violates standalone declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/064.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/064.xml
deleted file mode 100644 (file)
index 4fb66cd..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ENTITY e1 "abc">
-<!ENTITY % declare_e2 '<!ENTITY e2 "def">'>
-%declare_e2;
-<!ENTITY % declare_e3 SYSTEM "064.ent">
-%declare_e3;
-<!ELEMENT el EMPTY>
-<!ATTLIST el att CDATA #IMPLIED>
-]>
-
-<any>
-  <el att="&e1;"/>
-  <el att="&e2;"/>
-  <el att="&e3;"/>
-</any>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/065.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/065.ent
deleted file mode 100644 (file)
index 2d72317..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ENTITY e3 "ghi">
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/065.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/065.out
deleted file mode 100644 (file)
index e2591c6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/065.xml", at line 13, position 24:
-ERROR (Validity constraint): Reference to entity `e3' violates standalone declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/065.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/065.xml
deleted file mode 100644 (file)
index 3a52645..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ENTITY e1 "abc">
-<!ENTITY % declare_e2 '<!ENTITY e2 "def">'>
-%declare_e2;
-<!ENTITY % declare_e3 SYSTEM "065.ent">
-%declare_e3;
-<!ELEMENT el EMPTY>
-<!ATTLIST el att1 CDATA "&e1;"
-             att2 CDATA "&e2;"
-             att3 CDATA "&e3;"
->
-]>
-
-<any>
-  <el att1="1" att2="2" att3="3"/>
-  <el att2="2" att3="3"/>
-  <el att3="3"/>
-  <el/>
-</any>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/066.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/066.ent
deleted file mode 100644 (file)
index 136d73e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ENTITY e3 SYSTEM "ghi" NDATA n3>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/066.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/066.out
deleted file mode 100644 (file)
index d14209f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/066.xml", at line 13, position 1:
-ERROR (Validity constraint): Reference to undeclared notation `n3'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/066.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/066.xml
deleted file mode 100644 (file)
index a1cd7a6..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ENTITY e1 SYSTEM "abc" NDATA n1>
-<!ENTITY % declare_e2 '<!ENTITY e2 SYSTEM "def" NDATA n2>'>
-%declare_e2;
-<!ENTITY % declare_e3 SYSTEM "066.ent">
-%declare_e3;
-<!ELEMENT el EMPTY>
-<!ATTLIST el att ENTITY #IMPLIED
->
-]>
-
-<any>
-  <any><el att="e1"/></any>
-  <any><el att="e2"/></any>
-  <any><el att="e3"/></any>
-</any>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/067.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/067.ent
deleted file mode 100644 (file)
index 136d73e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ENTITY e3 SYSTEM "ghi" NDATA n3>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/067.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/067.out
deleted file mode 100644 (file)
index 117eda9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/067.xml", at line 15, position 1:
-ERROR (Validity constraint): Reference to undeclared notation `n3'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/067.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/067.xml
deleted file mode 100644 (file)
index bb4edd3..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ENTITY e1 SYSTEM "abc" NDATA n1>
-<!ENTITY % declare_e2 '<!ENTITY e2 SYSTEM "def" NDATA n2>'>
-%declare_e2;
-<!ENTITY % declare_e3 SYSTEM "067.ent">
-%declare_e3;
-<!ELEMENT el EMPTY>
-<!ATTLIST el att1 ENTITY "e1"
-             att2 ENTITY "e2"
-             att3 ENTITY "e3"
->
-]>
-
-<any>
-  <any><el att1="e1" att2="e1" att3="e1"/></any>
-  <any><el att2="e1" att3="e1"/></any>
-  <any><el att3="e1"/></any>
-  <any><el/></any>
-</any>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/068.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/068.ent
deleted file mode 100644 (file)
index 5a19ad8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ATTLIST el v3 NMTOKEN #IMPLIED>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/068.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/068.out
deleted file mode 100644 (file)
index 3942556..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-WARNING: More than one ATTLIST declaration for element type `el'
-WARNING: More than one ATTLIST declaration for element type `el'
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/068.xml", at line 19, position 23:
-ERROR (Validity constraint): Attribute `v3' of element type `el' violates standalone declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/068.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/068.xml
deleted file mode 100644 (file)
index 31c29f8..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ELEMENT el EMPTY>
-<!ATTLIST el v1 NMTOKEN #IMPLIED>
-<!ENTITY % declare_v2 '<!ATTLIST el v2 NMTOKEN #IMPLIED>'>
-%declare_v2;
-<!ENTITY % declare_v3 SYSTEM "068.ent">
-%declare_v3;
-]>
-
-<any>
-  <any><el v1="abc"/></any>
-  <any><el v2="abc"/></any>
-  <any><el v3="abc"/></any>
-  <any><el v1=" abc "/></any>
-  <any><el v2=" abc "/></any>
-  <any><el v3=" abc "/></any>
-</any>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/069.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/069.ent
deleted file mode 100644 (file)
index 4bad199..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ATTLIST el v3 NMTOKENS #IMPLIED>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/069.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/069.out
deleted file mode 100644 (file)
index ca71500..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-WARNING: More than one ATTLIST declaration for element type `el'
-WARNING: More than one ATTLIST declaration for element type `el'
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/069.xml", at line 19, position 27:
-ERROR (Validity constraint): Attribute `v3' of element type `el' violates standalone declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/069.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/069.xml
deleted file mode 100644 (file)
index a0f1b70..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ELEMENT el EMPTY>
-<!ATTLIST el v1 NMTOKENS #IMPLIED>
-<!ENTITY % declare_v2 '<!ATTLIST el v2 NMTOKENS #IMPLIED>'>
-%declare_v2;
-<!ENTITY % declare_v3 SYSTEM "069.ent">
-%declare_v3;
-]>
-
-<any>
-  <any><el v1="abc def"/></any>
-  <any><el v2="abc def"/></any>
-  <any><el v3="abc def"/></any>
-  <any><el v1=" abc def "/></any>
-  <any><el v2=" abc def "/></any>
-  <any><el v3=" abc def "/></any>
-</any>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/070.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/070.ent
deleted file mode 100644 (file)
index 1792bb9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ELEMENT outer3 (inner)>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/070.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/070.out
deleted file mode 100644 (file)
index 4bbfb52..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/070.xml", at line 19, position 32:
-ERROR (Validity constraint): Element `outer3' violates standalone declaration because extra white space separates the sub elements
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/070.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/070.xml
deleted file mode 100644 (file)
index 85e400a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<!DOCTYPE any [
-<!ELEMENT any ANY>
-<!ELEMENT inner EMPTY>
-<!ELEMENT outer1 (inner)>
-<!ENTITY % declare_outer2 '<!ELEMENT outer2 (inner)>'>
-%declare_outer2;
-<!ENTITY % declare_outer3 SYSTEM "070.ent">
-%declare_outer3;
-]>
-
-<any>
-  <any><outer1><inner/></outer1></any>
-  <any><outer2><inner/></outer2></any>
-  <any><outer3><inner/></outer3></any>
-  <any><outer1><inner/> </outer1></any>
-  <any><outer2><inner/> </outer2></any>
-  <any><outer3><inner/> </outer3></any>
-</any>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/080.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/080.out
deleted file mode 100644 (file)
index 174afa0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/080.xml", at line 4, position 0:
-ERROR (Validity constraint): The content model of element `b' is not deterministic
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/080.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/080.xml
deleted file mode 100644 (file)
index 8deeef4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE a [
-<!ELEMENT a ANY>
-<!ELEMENT b ((a,b)|a+)>]>
-<a/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/081.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/081.out
deleted file mode 100644 (file)
index 1f3cfaa..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_invalid/081.xml", at line 4, position 0:
-ERROR (Validity constraint): The content model of element `b' is not deterministic
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/081.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/081.xml
deleted file mode 100644 (file)
index 293eeae..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE a [
-<!ELEMENT a ANY>
-<!ELEMENT b ((b|a+),a)>]>
-<a/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/INDEX b/helm/DEVEL/pxp/pxp/rtests/negative/data_invalid/INDEX
deleted file mode 100644 (file)
index e2090fd..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-----------------------------------------
-Root element
-----------------------------------------
-
-001.xml                Declared root element type matches actual root element type
-
-----------------------------------------
-Attributes
-----------------------------------------
-
-010.xml                ID attributes must match the Name production (not nmtoken)
-011.xml                ID attributes uniquely identify the element bearing them
-               *** TODO ***
-012.xml                No element type must have several ID attributes declared
-013.xml                No ID attribute must have a default
-014.xml                No ID attribute must have a default (FIXED)
-015.xml                Attributes of type IDREF must match the Name production
-016.xml                Attributes of type IDREFS must match the Names production
-017.xml                Attributes of type IDREF must match the value of an ID
-               attribute
-               *** TODO ***
-018.xml                Attributes of type IDREFS must match the values of ID
-               attributes
-               *** TODO ***
-019.xml                Attributes of type ENTITY must match the Name production
-020.xml                Attributes of type ENTITIES must match the Names production
-021.xml                Attributes of type ENTITY must match an unparsed entity
-022.xml                Attributes of type ENTITIES must match unparsed entities
-023.xml                Attributes of type NMTOKEN must match the nmtoken production
-024.xml                Attributes of type NMTOKENS must match the nmtokens production
-025.xml                like 015.xml, but the default value is tested
-026.xml                like 016.xml, but the default value is tested
-027.xml                like 019.xml, but the default value is tested
-028.xml                like 020.xml, but the default value is tested
-029.xml                like 023.xml, but the default value is tested
-030.xml                like 024.xml, but the default value is tested
-031.xml                all notation names in the declaration must have been declared
-032.xml                Values of NOTATION type must match one declared value
-033.xml                Values of NOTATION type must match one declared value
-034.xml                Only one NOTATION attribute per element
-035.xml                Values of enum type must match one of the declared values
-036.xml                Values of enum type must match one of the declared values
-037.xml                missing #REQUIRED attribute
-038.xml                #FIXED attributes must match the declared default
-
-----------------------------------------
-Standalone declaration
-----------------------------------------
-
-060.xml                Externally declared default values are rejected
-061.xml                variant of 060.xml (internal entity within external entity)
-062.xml                variant of 060.xml (external subset of DTD)
-063.xml                Externally declared parsed general entities are rejected
-               (entity ref occurs in main text)
-064.xml                Externally declared parsed general entities are rejected
-               (entity ref occurs in attribute value)
-065.xml                Externally declared parsed general entities are rejected
-               (entity ref occurs in attribute default)
-               *** THINK ABOUT THIS CASE AGAIN ***
-066.xml                Externally declared unparsed entities are rejected
-               (entity ref occurs in attribute value)
-067.xml        Externally declared unparsed entities are rejected
-               (entity ref occurs in attribute default)
-068.xml                Externally declared NMTOKEN attributes require normal form
-069.xml                Externally declared NMTOKENS attributes require normal form
-070.xml                Externally declared elements with regexp content model
-               do not like extra white space
-
-----------------------------------------
-Deterministics models
-----------------------------------------
-
-080.xml                One example
-081.xml                Another example
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/001.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/001.ent
deleted file mode 100644 (file)
index fea9c4e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ELEMENT doc EMPTY>
-<!ENTITY % e "<!--">
-%e; -->
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/001.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/001.out
deleted file mode 100644 (file)
index 074f8ea..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_invalid/001.xml", at line 1, position 30:
-In entity [dtd] = SYSTEM "001.ent", at line 3, position 3:
-ERROR (Well-formedness constraint): `-->' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/001.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/001.xml
deleted file mode 100644 (file)
index 02ef0bb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "001.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/002.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/002.ent
deleted file mode 100644 (file)
index 35b4309..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ENTITY % e "(#PCDATA">
-<!ELEMENT doc %e;)>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/002.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/002.out
deleted file mode 100644 (file)
index 2883a32..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_invalid/002.xml", at line 1, position 30:
-In entity [dtd] = SYSTEM "002.ent", at line 2, position 18:
-ERROR (Validity constraint): Entities not properly nested with parentheses
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/002.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/002.xml
deleted file mode 100644 (file)
index 0c5372c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "002.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/003.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/003.ent
deleted file mode 100644 (file)
index 3610f12..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ENTITY % e "<!ELEMENT ">
-%e; doc (#PCDATA)>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/003.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/003.out
deleted file mode 100644 (file)
index 9125d01..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_invalid/003.xml", at line 1, position 30:
-In entity [dtd] = SYSTEM "003.ent", at line 2, position 17:
-ERROR (Validity constraint): Entities not properly nested with ELEMENT declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/003.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/003.xml
deleted file mode 100644 (file)
index c4b33e4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "003.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/004.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/004.ent
deleted file mode 100644 (file)
index 3127263..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!ENTITY % e1 "<!ELEMENT ">
-<!ENTITY % e2 ">">
-%e1; doc (#PCDATA) %e2;
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/004.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/004.out
deleted file mode 100644 (file)
index f7b93fc..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_invalid/004.xml", at line 1, position 30:
-In entity e2, at line 1, position 1:
-Called from entity [dtd] = SYSTEM "004.ent", line 3, position 19:
-ERROR (Validity constraint): Entities not properly nested with ELEMENT declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/004.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/004.xml
deleted file mode 100644 (file)
index 740d173..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "004.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/005.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/005.ent
deleted file mode 100644 (file)
index 3326c04..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ENTITY % e ">">
-<!ELEMENT doc (#PCDATA) %e;
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/005.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/005.out
deleted file mode 100644 (file)
index d146659..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_invalid/005.xml", at line 1, position 30:
-In entity e, at line 1, position 1:
-Called from entity [dtd] = SYSTEM "005.ent", line 2, position 24:
-ERROR (Validity constraint): Entities not properly nested with ELEMENT declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/005.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/005.xml
deleted file mode 100644 (file)
index aa3a8f9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "005.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/006.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/006.ent
deleted file mode 100644 (file)
index 4bd7314..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ENTITY % e "(#PCDATA)>">
-<!ELEMENT doc %e;
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/006.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/006.out
deleted file mode 100644 (file)
index fa7403c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_invalid/006.xml", at line 1, position 30:
-In entity e, at line 1, position 10:
-Called from entity [dtd] = SYSTEM "006.ent", line 2, position 14:
-ERROR (Validity constraint): Entities not properly nested with ELEMENT declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/006.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_invalid/006.xml
deleted file mode 100644 (file)
index bd2ee32..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "006.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/001.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/001.ent
deleted file mode 100644 (file)
index 378a207..0000000
+++ /dev/null
@@ -1 +0,0 @@
-&e;
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/001.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/001.out
deleted file mode 100644 (file)
index 57edec3..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/ext-sa/001.xml", at line 3, position 1:
-ERROR (Validity constraint): The root element is not declared
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/001.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/001.xml
deleted file mode 100644 (file)
index 673dc58..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e SYSTEM "001.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/002.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/002.ent
deleted file mode 100644 (file)
index c7bec63..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-data
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/002.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/002.out
deleted file mode 100644 (file)
index 65e741d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e = SYSTEM "002.ent", at line 1, position 0:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/ext-sa/002.xml", line 5, position 5:
-ERROR (Well-formedness constraint): Bad XML declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/002.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/002.xml
deleted file mode 100644 (file)
index 2ee5988..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e SYSTEM "002.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/003.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/003.ent
deleted file mode 100644 (file)
index a0d0d04..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0"?><?xml version="1.0"?>
-data
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/003.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/003.out
deleted file mode 100644 (file)
index 1d090c7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e = SYSTEM "003.ent", at line 1, position 0:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/ext-sa/003.xml", line 5, position 5:
-ERROR (Well-formedness constraint): Bad XML declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/003.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/ext-sa/003.xml
deleted file mode 100644 (file)
index 407a4a1..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e SYSTEM "003.ent">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/001.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/001.ent
deleted file mode 100644 (file)
index b0292fc..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<![ INCLUDE [
-<!ELEMENT doc (#PCDATA)>
-]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/001.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/001.out
deleted file mode 100644 (file)
index 577cce2..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/not-sa/001.xml", at line 1, position 30:
-In entity [dtd] = SYSTEM "001.ent", at line 3, position 0:
-ERROR (Well-formedness constraint): `>]>' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/001.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/001.xml
deleted file mode 100644 (file)
index 02ef0bb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "001.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/002.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/002.out
deleted file mode 100644 (file)
index 8cb6783..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 1:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/not-sa/002.xml", line 4, position 0:
-ERROR (Well-formedness constraint): `]' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/002.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/002.xml
deleted file mode 100644 (file)
index a0a538d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e "<?xml version='1.0' encoding='UTF-8'?>">
-%e;
-]>
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/003.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/003.ent
deleted file mode 100644 (file)
index 5b49337..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<![ IGNORE [
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/003.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/003.out
deleted file mode 100644 (file)
index 9c5bd24..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/not-sa/003.xml", at line 1, position 30:
-In entity [dtd] = SYSTEM "003.ent", at line 2, position 11:
-ERROR (Well-formedness constraint): Bad conditional section
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/003.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/003.xml
deleted file mode 100644 (file)
index c4b33e4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "003.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/004.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/004.ent
deleted file mode 100644 (file)
index fcce6e0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-<![ INCLUDE [
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/004.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/004.out
deleted file mode 100644 (file)
index 3c164bc..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/not-sa/004.xml", at line 1, position 30:
-In entity [dtd] = SYSTEM "004.ent", at line 3, position 0:
-ERROR (Well-formedness constraint): `>]>' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/004.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/004.xml
deleted file mode 100644 (file)
index 740d173..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "004.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/005.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/005.ent
deleted file mode 100644 (file)
index aae8559..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
-%e;
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/005.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/005.out
deleted file mode 100644 (file)
index da38b03..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/not-sa/005.xml", at line 1, position 30:
-In entity [dtd] = SYSTEM "005.ent", at line 2, position 0:
-ERROR (Well-formedness constraint): Reference to undeclared parameter entity `e'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/005.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/005.xml
deleted file mode 100644 (file)
index aa3a8f9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "005.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/006.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/006.ent
deleted file mode 100644 (file)
index b60f41c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<![INCLUDE
-<!ELEMENT doc (#PCDATA)>
-]]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/006.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/006.out
deleted file mode 100644 (file)
index edc29ea..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/not-sa/006.xml", at line 1, position 30:
-In entity [dtd] = SYSTEM "006.ent", at line 2, position 0:
-ERROR (Well-formedness constraint): Bad conditional section
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/006.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/006.xml
deleted file mode 100644 (file)
index bd2ee32..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "006.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/007.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/007.ent
deleted file mode 100644 (file)
index 62a92ed..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/007.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/007.out
deleted file mode 100644 (file)
index e8b088d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/not-sa/007.xml", at line 1, position 30:
-In entity [dtd] = SYSTEM "007.ent", at line 1, position 0:
-ERROR (Well-formedness constraint): Declaration either malformed or not allowed in this context
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/007.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/007.xml
deleted file mode 100644 (file)
index 1c5bc80..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "007.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/008.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/008.ent
deleted file mode 100644 (file)
index 11172a9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!ELEMENT doc ANY>
-<!ENTITY e "100%">
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/008.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/008.out
deleted file mode 100644 (file)
index 7370c42..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/not-sa/008.xml", at line 1, position 30:
-In entity [dtd] = SYSTEM "008.ent", at line 2, position 17:
-ERROR (Well-formedness constraint): The character '%' must be written as '&#37;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/008.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/not-sa/008.xml
deleted file mode 100644 (file)
index c140c0a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc SYSTEM "008.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa-problems/140.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa-problems/140.xml
deleted file mode 100644 (file)
index 062b213..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "<&#x309a;></&#x309a;>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa-problems/141.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa-problems/141.xml
deleted file mode 100644 (file)
index 6d864a3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "<X&#xe5c;></X&#xe5c;>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/001.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/001.out
deleted file mode 100644 (file)
index bff9b82..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/001.xml", at line 3, position 0:
-ERROR (Well-formedness constraint): Illegal inside tags
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/001.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/001.xml
deleted file mode 100644 (file)
index 253fea6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<doc>
-<doc
-?
-<a</a>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/002.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/002.out
deleted file mode 100644 (file)
index c6d2a49..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/002.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): The left angle bracket '<' must be written as '&lt;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/002.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/002.xml
deleted file mode 100644 (file)
index 6ca801a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<doc>
-<.doc></.doc>
-</doc>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/003.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/003.out
deleted file mode 100644 (file)
index 65fd8ef..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/003.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): Illegal token or character
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/003.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/003.xml
deleted file mode 100644 (file)
index 07a534d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><? ?></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/004.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/004.out
deleted file mode 100644 (file)
index 18d0d66..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/004.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): Illegal processing instruction
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/004.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/004.xml
deleted file mode 100644 (file)
index f89e662..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><?target some data></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/005.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/005.out
deleted file mode 100644 (file)
index f5ece68..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/005.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): Illegal processing instruction
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/005.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/005.xml
deleted file mode 100644 (file)
index 16127dc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><?target some data?</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/006.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/006.out
deleted file mode 100644 (file)
index 06dd728..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/006.xml", at line 1, position 20:
-ERROR (Well-formedness constraint): Double hyphens are illegal inside comments
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/006.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/006.xml
deleted file mode 100644 (file)
index 789d0b8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><!-- a comment -- another --></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/007.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/007.out
deleted file mode 100644 (file)
index dccf064..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/007.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): The ampersand '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/007.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/007.xml
deleted file mode 100644 (file)
index 2b017e3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&amp no refc</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/008.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/008.out
deleted file mode 100644 (file)
index fc16241..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/008.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): The ampersand '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/008.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/008.xml
deleted file mode 100644 (file)
index 3117de4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&.entity;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/009.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/009.out
deleted file mode 100644 (file)
index 74802e5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/009.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): The ampersand '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/009.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/009.xml
deleted file mode 100644 (file)
index 62f9239..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&#RE;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/010.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/010.out
deleted file mode 100644 (file)
index c7c12d0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/010.xml", at line 1, position 7:
-ERROR (Well-formedness constraint): The ampersand '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/010.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/010.xml
deleted file mode 100644 (file)
index 44a48f9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>A & B</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/011.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/011.out
deleted file mode 100644 (file)
index af9e50e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/011.xml", at line 1, position 7:
-ERROR (Well-formedness constraint): Bad attribute list
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/011.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/011.xml
deleted file mode 100644 (file)
index ae41758..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/012.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/012.out
deleted file mode 100644 (file)
index 5447f51..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/012.xml", at line 1, position 8:
-ERROR (Well-formedness constraint): Bad attribute list
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/012.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/012.xml
deleted file mode 100644 (file)
index d4ffd74..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1=v1></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/013.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/013.out
deleted file mode 100644 (file)
index 701c4aa..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/013.xml", at line 1, position 8:
-ERROR (Well-formedness constraint): Cannot find the second quotation mark
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/013.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/013.xml
deleted file mode 100644 (file)
index c436a25..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1'></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/014.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/014.out
deleted file mode 100644 (file)
index c38c1d4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/014.xml", at line 1, position 8:
-ERROR (Well-formedness constraint): Attribute value contains character '<' literally
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/014.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/014.xml
deleted file mode 100644 (file)
index 0482941..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="<foo>"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/015.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/015.out
deleted file mode 100644 (file)
index a7826ec..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/015.xml", at line 1, position 8:
-ERROR (Well-formedness constraint): Bad attribute list
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/015.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/015.xml
deleted file mode 100644 (file)
index 6f6f32f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1=></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/016.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/016.out
deleted file mode 100644 (file)
index c7e489f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/016.xml", at line 1, position 13:
-ERROR (Well-formedness constraint): `>' or `/>' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/016.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/016.xml
deleted file mode 100644 (file)
index 6a69ddb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="v1" "v2"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/017.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/017.out
deleted file mode 100644 (file)
index 9ad92fb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/017.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): Declaration either malformed or not allowed in this context
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/017.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/017.xml
deleted file mode 100644 (file)
index 9474c49..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><![CDATA[</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/018.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/018.out
deleted file mode 100644 (file)
index 9fd2963..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/018.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): Declaration either malformed or not allowed in this context
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/018.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/018.xml
deleted file mode 100644 (file)
index cdbf8b3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><![CDATA [ stuff]]></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/019.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/019.out
deleted file mode 100644 (file)
index 5e1846c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/019.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): The left angle bracket '<' must be written as '&lt;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/019.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/019.xml
deleted file mode 100644 (file)
index 7205628..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/020.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/020.out
deleted file mode 100644 (file)
index 8e64d37..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/020.xml", at line 1, position 8:
-ERROR (Well-formedness constraint): The character '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/020.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/020.xml
deleted file mode 100644 (file)
index d672b1c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="A & B"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/021.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/021.out
deleted file mode 100644 (file)
index d6e979c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/021.xml", at line 1, position 8:
-ERROR (Well-formedness constraint): The character '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/021.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/021.xml
deleted file mode 100644 (file)
index c5d1e39..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="a&b"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/022.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/022.out
deleted file mode 100644 (file)
index f16b0e4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/022.xml", at line 1, position 8:
-ERROR (Well-formedness constraint): The character '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/022.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/022.xml
deleted file mode 100644 (file)
index c47a4d6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a1="&#123:"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/023.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/023.out
deleted file mode 100644 (file)
index dca9b94..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/023.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): Illegal inside tags
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/023.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/023.xml
deleted file mode 100644 (file)
index 9d1ecd8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc 12="34"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/024.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/024.out
deleted file mode 100644 (file)
index a6cec01..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/024.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): The left angle bracket '<' must be written as '&lt;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/024.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/024.xml
deleted file mode 100644 (file)
index 3e56727..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<doc>
-<123></123>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/025.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/025.out
deleted file mode 100644 (file)
index 8992cdf..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/025.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): The sequence ']]>' must be written as ']]&gt;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/025.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/025.xml
deleted file mode 100644 (file)
index 9ad4266..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>]]></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/026.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/026.out
deleted file mode 100644 (file)
index 6f3ff05..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/026.xml", at line 1, position 6:
-ERROR (Well-formedness constraint): The sequence ']]>' must be written as ']]&gt;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/026.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/026.xml
deleted file mode 100644 (file)
index 5543609..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>]]]></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/027.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/027.out
deleted file mode 100644 (file)
index 5274a84..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/027.xml", at line 4, position 0:
-ERROR (Well-formedness constraint): `-->' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/027.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/027.xml
deleted file mode 100644 (file)
index 0ae9fa6..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<doc>
-<!-- abc
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/028.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/028.out
deleted file mode 100644 (file)
index 2f4e3b3..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/028.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Illegal processing instruction
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/028.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/028.xml
deleted file mode 100644 (file)
index 278098e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<doc>
-<?a pi that is not closed
-</doc>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/029.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/029.out
deleted file mode 100644 (file)
index 8482668..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/029.xml", at line 1, position 9:
-ERROR (Well-formedness constraint): The sequence ']]>' must be written as ']]&gt;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/029.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/029.xml
deleted file mode 100644 (file)
index d5e881d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>abc]]]>def</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/030.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/030.out
deleted file mode 100644 (file)
index f4bdf54..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/030.xml", at line 1, position 18:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/030.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/030.xml
deleted file mode 100644 (file)
index cadbbcc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>A form feed (\f) is not legal in data</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/031.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/031.out
deleted file mode 100644 (file)
index 7d6ed42..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/031.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): Illegal processing instruction
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/031.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/031.xml
deleted file mode 100644 (file)
index 3a3d82a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><?pi a form feed (\f) is not allowed in a pi?></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/032.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/032.out
deleted file mode 100644 (file)
index ea5ebf7..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/032.xml", at line 1, position 23:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/032.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/032.xml
deleted file mode 100644 (file)
index c9981ad..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><!-- a form feed (\f) is not allowed in a comment --></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/033.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/033.out
deleted file mode 100644 (file)
index 61b6001..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/033.xml", at line 1, position 8:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/033.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/033.xml
deleted file mode 100644 (file)
index ea1693c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>abc\edef</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/034.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/034.out
deleted file mode 100644 (file)
index 48ee600..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/034.xml", at line 1, position 4:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/034.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/034.xml
deleted file mode 100644 (file)
index 84841f4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc\f>A form-feed is not white space or a name character</doc\f>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/035.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/035.out
deleted file mode 100644 (file)
index 9798306..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/035.xml", at line 1, position 7:
-ERROR (Well-formedness constraint): The left angle bracket '<' must be written as '&lt;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/035.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/035.xml
deleted file mode 100644 (file)
index 7032f9a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>1 < 2 but not in XML</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/036.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/036.out
deleted file mode 100644 (file)
index 63baee3..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/036.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Data not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/036.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/036.xml
deleted file mode 100644 (file)
index b3259d0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<doc></doc>
-Illegal data
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/037.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/037.out
deleted file mode 100644 (file)
index bdeb907..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/037.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Character reference not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/037.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/037.xml
deleted file mode 100644 (file)
index 356448a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<doc></doc>
-&#32;
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/038.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/038.out
deleted file mode 100644 (file)
index 9c9acf3..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/038.xml", at line 1, position 29:
-ERROR (Well-formedness constraint): Attribute `x' occurs twice in element `doc'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/038.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/038.xml
deleted file mode 100644 (file)
index 0590e53..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc x="foo" y="bar" x="baz"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/039.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/039.out
deleted file mode 100644 (file)
index 3227cb0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/039.xml", at line 1, position 12:
-ERROR (Well-formedness constraint): End-tag does not match start-tag
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/039.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/039.xml
deleted file mode 100644 (file)
index 971effa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><a></aa></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/040.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/040.out
deleted file mode 100644 (file)
index e58e599..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/040.xml", at line 2, position 5:
-ERROR (Well-formedness constraint): Document must consist of only one toplevel element
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/040.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/040.xml
deleted file mode 100644 (file)
index 7591d8b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<doc></doc>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/041.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/041.out
deleted file mode 100644 (file)
index c90cfad..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/041.xml", at line 2, position 5:
-ERROR (Well-formedness constraint): Document must consist of only one toplevel element
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/041.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/041.xml
deleted file mode 100644 (file)
index 405efd3..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<doc/>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/042.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/042.out
deleted file mode 100644 (file)
index ea78b5e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/042.xml", at line 1, position 11:
-SYNTAX ERROR
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/042.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/042.xml
deleted file mode 100644 (file)
index 1247cc8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc/></doc/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/043.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/043.out
deleted file mode 100644 (file)
index 24860aa..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/043.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Data not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/043.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/043.xml
deleted file mode 100644 (file)
index 5cc527c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<doc/>
-Illegal data
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/044.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/044.out
deleted file mode 100644 (file)
index 573b7c4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/044.xml", at line 1, position 12:
-ERROR (Well-formedness constraint): Document must consist of only one toplevel element
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/044.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/044.xml
deleted file mode 100644 (file)
index b71d062..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc/><doc/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/045.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/045.out
deleted file mode 100644 (file)
index 78a1ed3..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/045.xml", at line 2, position 2:
-ERROR (Well-formedness constraint): Illegal inside tags
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/045.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/045.xml
deleted file mode 100644 (file)
index f7540e8..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<doc>
-<a/
-</doc>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/046.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/046.out
deleted file mode 100644 (file)
index 790f167..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/046.xml", at line 2, position 2:
-ERROR (Well-formedness constraint): Illegal inside tags
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/046.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/046.xml
deleted file mode 100644 (file)
index d5d901e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<doc>
-<a/</a>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/047.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/047.out
deleted file mode 100644 (file)
index 6b2fd78..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/047.xml", at line 2, position 3:
-ERROR (Well-formedness constraint): Illegal inside tags
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/047.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/047.xml
deleted file mode 100644 (file)
index 00ae523..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<doc>
-<a / >
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/048.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/048.out
deleted file mode 100644 (file)
index 4d54039..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/048.xml", at line 3, position 0:
-ERROR (Well-formedness constraint): CDATA section not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/048.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/048.xml
deleted file mode 100644 (file)
index 9092ffa..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<doc>
-</doc>
-<![CDATA[]]>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/049.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/049.out
deleted file mode 100644 (file)
index 260dee4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/049.xml", at line 3, position 15:
-ERROR (Well-formedness constraint): End-tag does not match start-tag
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/049.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/049.xml
deleted file mode 100644 (file)
index e5a6b70..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<doc>
-<a><![CDATA[xyz]]]></a>
-<![CDATA[]]></a>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/050.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/050.out
deleted file mode 100644 (file)
index b813938..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/050.xml", at line 1, position 0:
-SYNTAX ERROR
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/050.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/050.xml
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/051.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/051.out
deleted file mode 100644 (file)
index 15e4f65..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/051.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Declaration either malformed or not allowed in this context
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/051.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/051.xml
deleted file mode 100644 (file)
index 19f13de..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!-- a comment -->
-<![CDATA[]]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/052.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/052.out
deleted file mode 100644 (file)
index 331a4c3..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/052.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Content not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/052.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/052.xml
deleted file mode 100644 (file)
index b3fe376..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!-- a comment -->
-&#32;
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/053.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/053.out
deleted file mode 100644 (file)
index 88a0dda..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/053.xml", at line 1, position 10:
-ERROR (Well-formedness constraint): End-tag does not match start-tag
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/053.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/053.xml
deleted file mode 100644 (file)
index bf5c6d5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc></DOC>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/054.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/054.out
deleted file mode 100644 (file)
index e20db32..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/054.xml", at line 2, position 36:
-ERROR (Well-formedness constraint): Whitespace is missing between the literals of the PUBLIC identifier
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/054.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/054.xml
deleted file mode 100644 (file)
index f4d24e2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY foo PUBLIC "some public id">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/055.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/055.out
deleted file mode 100644 (file)
index 9d9f52d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/055.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Illegal token or character
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/055.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/055.xml
deleted file mode 100644 (file)
index ae922ee..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc [
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/056.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/056.out
deleted file mode 100644 (file)
index ba062b0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/056.xml", at line 1, position 14:
-ERROR (Well-formedness constraint): Content not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/056.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/056.xml
deleted file mode 100644 (file)
index b4a32cb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc -- a comment -- []>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/057.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/057.out
deleted file mode 100644 (file)
index 66ab6fa..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/057.xml", at line 2, position 22:
-ERROR (Well-formedness constraint): `>' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/057.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/057.xml
deleted file mode 100644 (file)
index af3b264..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "whatever" -- a comment -->
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/058.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/058.out
deleted file mode 100644 (file)
index 4a42cd2..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/058.xml", at line 3, position 21:
-ERROR (Well-formedness constraint): `|' and more names expected, or `)'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/058.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/058.xml
deleted file mode 100644 (file)
index 6b525cf..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 (foo,bar) #IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/059.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/059.out
deleted file mode 100644 (file)
index a31204f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/059.xml", at line 3, position 25:
-ERROR (Well-formedness constraint): #REQUIRED, #IMPLIED, #FIXED or a string literal expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/059.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/059.xml
deleted file mode 100644 (file)
index 4a5c956..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 NMTOKEN v1>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/060.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/060.out
deleted file mode 100644 (file)
index 295f543..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/060.xml", at line 3, position 21:
-ERROR (Well-formedness constraint): One of CDATA, ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS, NOTATION, or a subexpression expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/060.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/060.xml
deleted file mode 100644 (file)
index 3ddde34..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 NAME #IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/061.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/061.out
deleted file mode 100644 (file)
index 1545e27..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/061.xml", at line 2, position 28:
-ERROR (Well-formedness constraint): Whitespace is missing between the literals of the PUBLIC identifier
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/061.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/061.xml
deleted file mode 100644 (file)
index d58093d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e PUBLIC "whatever""e.ent">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/062.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/062.out
deleted file mode 100644 (file)
index 581d3bb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/062.xml", at line 2, position 12:
-ERROR (Well-formedness constraint): Whitespace is missing
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/062.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/062.xml
deleted file mode 100644 (file)
index 4f091e4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY foo"some text">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/063.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/063.out
deleted file mode 100644 (file)
index 128b191..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/063.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Restriction of the internal subset: Conditional sections not allowed
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/063.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/063.xml
deleted file mode 100644 (file)
index f9bd03c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<![INCLUDE[ ]]>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/064.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/064.out
deleted file mode 100644 (file)
index ad7f21c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/064.xml", at line 3, position 20:
-ERROR (Well-formedness constraint): Whitespace is missing
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/064.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/064.xml
deleted file mode 100644 (file)
index f8d5894..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST e a1 CDATA"foo">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/065.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/065.out
deleted file mode 100644 (file)
index 4675f75..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/065.xml", at line 3, position 16:
-ERROR (Well-formedness constraint): Whitespace is missing
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/065.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/065.xml
deleted file mode 100644 (file)
index 29dc6e5..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1(foo|bar) #IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/066.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/066.out
deleted file mode 100644 (file)
index 0812fc4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/066.xml", at line 3, position 26:
-ERROR (Well-formedness constraint): Whitespace is missing
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/066.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/066.xml
deleted file mode 100644 (file)
index 04dbdb7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 (foo|bar)#IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/067.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/067.out
deleted file mode 100644 (file)
index 4ed7110..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/067.xml", at line 3, position 22:
-ERROR (Well-formedness constraint): Whitespace is missing
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/067.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/067.xml
deleted file mode 100644 (file)
index de12579..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 (foo)"foo">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/068.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/068.out
deleted file mode 100644 (file)
index 186ea42..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/068.xml", at line 3, position 25:
-ERROR (Well-formedness constraint): Error in NOTATION type (perhaps missing whitespace after NOTATION?)
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/068.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/068.xml
deleted file mode 100644 (file)
index 9f4a009..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a1 NOTATION(foo) #IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/069.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/069.out
deleted file mode 100644 (file)
index d508784..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/069.xml", at line 4, position 38:
-ERROR (Well-formedness constraint): Whitespace missing before `NDATA'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/069.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/069.xml
deleted file mode 100644 (file)
index a3ac7ea..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!NOTATION eps SYSTEM "eps.exe">
-<!-- missing space before NDATA -->
-<!ENTITY foo SYSTEM "foo.eps"NDATA eps>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/070.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/070.out
deleted file mode 100644 (file)
index d0813ed..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/070.xml", at line 1, position 40:
-ERROR (Well-formedness constraint): Double hyphens are illegal inside comments
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/070.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/070.xml
deleted file mode 100644 (file)
index a3ec12f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!-- a comment ending with three dashes --->
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/071.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/071.out
deleted file mode 100644 (file)
index 01100f9..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-In entity e3, at line 1, position 0:
-Called from entity e2, line 1, position 0:
-Called from entity e1, line 1, position 0:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/071.xml", line 6, position 5:
-ERROR (Validity constraint): Recursive reference to entity `e1'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/071.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/071.xml
deleted file mode 100644 (file)
index 8fe3ef7..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e1 "&e2;">
-<!ENTITY e2 "&e3;">
-<!ENTITY e3 "&e1;">
-]>
-<doc>&e1;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/072.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/072.out
deleted file mode 100644 (file)
index 5534c5c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/072.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): Reference to undeclared general entity `foo'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/072.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/072.xml
deleted file mode 100644 (file)
index 65fd17c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&foo;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/073.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/073.out
deleted file mode 100644 (file)
index 855179a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/073.xml", at line 4, position 5:
-ERROR (Well-formedness constraint): Reference to undeclared general entity `f'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/073.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/073.xml
deleted file mode 100644 (file)
index cd61644..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "whatever">
-]>
-<doc>&f;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/074.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/074.out
deleted file mode 100644 (file)
index 5cf7301..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 5:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/074.xml", line 5, position 5:
-ERROR (Well-formedness constraint): End-tag not in the same entity as the start-tag
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/074.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/074.xml
deleted file mode 100644 (file)
index dca3f11..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "</foo><foo>">
-]>
-<doc>
-<foo>&e;</foo>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/075.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/075.out
deleted file mode 100644 (file)
index ed842c9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/075.xml", at line 6, position 7:
-ERROR (Well-formedness constraint): Recursive reference to general entity `e1'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/075.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/075.xml
deleted file mode 100644 (file)
index 9784de3..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e1 "&e2;">
-<!ENTITY e2 "&e3;">
-<!ENTITY e3 "&e1;">
-]>
-<doc a="&e1;"></doc>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/076.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/076.out
deleted file mode 100644 (file)
index 63a0d38..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/076.xml", at line 1, position 7:
-ERROR (Well-formedness constraint): Reference to undeclared general entity `foo'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/076.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/076.xml
deleted file mode 100644 (file)
index 4064194..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="&foo;"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/077.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/077.out
deleted file mode 100644 (file)
index 6c854b7..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/077.xml", at line 4, position 7:
-ERROR (Well-formedness constraint): Reference to undeclared general entity `bar'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/077.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/077.xml
deleted file mode 100644 (file)
index 36f3391..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY foo "&bar;">
-]>
-<doc a="&foo;"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/078.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/078.out
deleted file mode 100644 (file)
index fffb553..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/078.xml", at line 3, position 22:
-ERROR (Well-formedness constraint): Reference to undeclared general entity `foo'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/078.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/078.xml
deleted file mode 100644 (file)
index e3af2f2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA "&foo;">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/079.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/079.out
deleted file mode 100644 (file)
index 5469d59..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/079.xml", at line 6, position 22:
-ERROR (Well-formedness constraint): Recursive reference to general entity `e1'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/079.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/079.xml
deleted file mode 100644 (file)
index c778a80..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e1 "&e2;">
-<!ENTITY e2 "&e3;">
-<!ENTITY e3 "&e1;">
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA "&e1;">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/080.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/080.out
deleted file mode 100644 (file)
index aadb4b7..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/080.xml", at line 6, position 29:
-ERROR (Well-formedness constraint): Recursive reference to general entity `e1'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/080.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/080.xml
deleted file mode 100644 (file)
index 4949e99..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e1 "&e2;">
-<!ENTITY e2 "&e3;">
-<!ENTITY e3 "&e1;">
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA #FIXED "&e1;">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/081.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/081.out
deleted file mode 100644 (file)
index cdaf257..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/081.xml", at line 4, position 7:
-Other exception: Sys_error("/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/nul: No such file or directory")
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/081.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/081.xml
deleted file mode 100644 (file)
index 3be7e41..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e SYSTEM "nul">
-]>
-<doc a="&e;"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/082.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/082.out
deleted file mode 100644 (file)
index 72a6b3a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/082.xml", at line 4, position 22:
-Other exception: Sys_error("/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/nul: No such file or directory")
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/082.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/082.xml
deleted file mode 100644 (file)
index f99640f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e SYSTEM "nul">
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA "&e;">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/083.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/083.out
deleted file mode 100644 (file)
index 0744b43..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/083.xml", at line 4, position 5:
-ERROR (Validity constraint): Invalid reference to NDATA entity e
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/083.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/083.xml
deleted file mode 100644 (file)
index 8d6ff96..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e SYSTEM "nul" NDATA n>
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/084.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/084.out
deleted file mode 100644 (file)
index 3a09c34..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/084.xml", at line 4, position 22:
-ERROR (Validity constraint): Invalid reference to NDATA entity e
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/084.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/084.xml
deleted file mode 100644 (file)
index 5b10fb9..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e SYSTEM "nul" NDATA n>
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA "&e;">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/085.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/085.out
deleted file mode 100644 (file)
index 87ff19d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/085.xml", at line 1, position 25:
-ERROR (Well-formedness constraint): Illegal character in PUBLIC identifier
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/085.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/085.xml
deleted file mode 100644 (file)
index 1d64364..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE doc PUBLIC "[" "null.ent">
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/086.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/086.out
deleted file mode 100644 (file)
index 63bb4a1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/086.xml", at line 2, position 24:
-ERROR (Well-formedness constraint): Illegal character in PUBLIC identifier
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/086.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/086.xml
deleted file mode 100644 (file)
index 454893a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY foo PUBLIC "[" "null.xml">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/087.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/087.out
deleted file mode 100644 (file)
index 4dc1495..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/087.xml", at line 2, position 36:
-ERROR (Well-formedness constraint): Illegal character in PUBLIC identifier
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/087.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/087.xml
deleted file mode 100644 (file)
index 01e8760..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!NOTATION foo PUBLIC "[" "null.ent">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/088.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/088.out
deleted file mode 100644 (file)
index 574049d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/088.xml", at line 6, position 7:
-ERROR (Well-formedness constraint): Cannot find the second quotation mark
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/088.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/088.xml
deleted file mode 100644 (file)
index a581de8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA #IMPLIED>
-<!ENTITY e '"'>
-]>
-<doc a="&e;></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/089.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/089.out
deleted file mode 100644 (file)
index 6640fe9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/089.xml", at line 2, position 32:
-ERROR (Well-formedness constraint): `>' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/089.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/089.xml
deleted file mode 100644 (file)
index a788aab..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY % foo SYSTEM "foo.xml" NDATA bar>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/090.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/090.out
deleted file mode 100644 (file)
index 82d8758..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 7:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/090.xml", line 4, position 5:
-ERROR (Well-formedness constraint): Attribute value contains character '<' literally
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/090.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/090.xml
deleted file mode 100644 (file)
index f82c238..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "<foo a='&#60;'></foo>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/091.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/091.out
deleted file mode 100644 (file)
index 9b96ad6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/091.xml", at line 3, position 32:
-ERROR (Well-formedness constraint): `>' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/091.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/091.xml
deleted file mode 100644 (file)
index 9601dcb..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!NOTATION n SYSTEM "n">
-<!ENTITY % foo SYSTEM "foo.xml" NDATA n>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/092.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/092.out
deleted file mode 100644 (file)
index b32fb9a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 7:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/092.xml", line 4, position 5:
-ERROR (Well-formedness constraint): The character '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/092.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/092.xml
deleted file mode 100644 (file)
index a867ecd..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "<foo a='&#38;'></foo>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/093.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/093.out
deleted file mode 100644 (file)
index eda559a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/093.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): The ampersand '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/093.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/093.xml
deleted file mode 100644 (file)
index a5f8638..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>&#X58;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/094.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/094.out
deleted file mode 100644 (file)
index 0422cf8..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/094.xml", at line 1, position 0:
-ERROR (Well-formedness constraint): Bad XML declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/094.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/094.xml
deleted file mode 100644 (file)
index 483ed52..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml VERSION="1.0"?>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/095.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/095.out
deleted file mode 100644 (file)
index 9f39293..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/095.xml", at line 1, position 0:
-ERROR (Well-formedness constraint): Bad XML declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/095.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/095.xml
deleted file mode 100644 (file)
index ba2cbe8..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml encoding="UTF-8" version="1.0"?>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/096.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/096.out
deleted file mode 100644 (file)
index 17a3a1b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/096.xml", at line 1, position 0:
-ERROR (Well-formedness constraint): Cannot find the second quotation mark
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/096.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/096.xml
deleted file mode 100644 (file)
index f41eaba..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0"encoding="UTF-8" ?>
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/097.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/097.out
deleted file mode 100644 (file)
index 3e512b4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/097.xml", at line 1, position 0:
-ERROR (Well-formedness constraint): Cannot find the second quotation mark
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/097.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/097.xml
deleted file mode 100644 (file)
index 3b95065..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0' encoding="UTF-8" ?>
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/098.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/098.out
deleted file mode 100644 (file)
index 0e7f223..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/098.xml", at line 1, position 0:
-ERROR (Well-formedness constraint): Bad XML declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/098.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/098.xml
deleted file mode 100644 (file)
index 9627acb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" version="1.0"?>
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/099.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/099.out
deleted file mode 100644 (file)
index e7471f8..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/099.xml", at line 1, position 0:
-ERROR (Well-formedness constraint): Bad XML declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/099.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/099.xml
deleted file mode 100644 (file)
index 02637f0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" valid="no" ?>
-<doc></doc>
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/100.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/100.out
deleted file mode 100644 (file)
index c4ec738..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/100.xml", at line 1, position 0:
-ERROR (Well-formedness constraint): Illegal 'standalone' declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/100.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/100.xml
deleted file mode 100644 (file)
index 38beda8..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" standalone="YES" ?>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/101.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/101.out
deleted file mode 100644 (file)
index 8c31631..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/101.xml", at line 1, position 0:
-Other exception: Failure("Netconversion.encoding_of_string: unknown encoding")
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/101.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/101.xml
deleted file mode 100644 (file)
index 6191a80..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding=" UTF-8"?>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/102.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/102.out
deleted file mode 100644 (file)
index 895c6b8..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/102.xml", at line 1, position 0:
-ERROR (Well-formedness constraint): Bad XML version string
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/102.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/102.xml
deleted file mode 100644 (file)
index a4cde40..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0 " ?>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/103.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/103.out
deleted file mode 100644 (file)
index 86dda33..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/103.xml", at line 4, position 13:
-ERROR (Well-formedness constraint): End-tag does not match start-tag
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/103.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/103.xml
deleted file mode 100644 (file)
index fc5d152..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "&#60;foo>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/104.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/104.out
deleted file mode 100644 (file)
index b3c9bbb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/104.xml", at line 4, position 13:
-ERROR (Well-formedness constraint): End-tag not in the same entity as the start-tag
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/104.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/104.xml
deleted file mode 100644 (file)
index b35b90e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "<foo>">
-]>
-<doc>&e;</foo></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/105.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/105.out
deleted file mode 100644 (file)
index 146e980..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/105.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Declaration either malformed or not allowed in this context
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/105.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/105.xml
deleted file mode 100644 (file)
index 5f60551..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?pi stuff?>
-<![CDATA[]]>
-<doc>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/106.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/106.out
deleted file mode 100644 (file)
index cec4501..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/106.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Content not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/106.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/106.xml
deleted file mode 100644 (file)
index 87c56d7..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?pi data?>
-&#32;<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/107.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/107.out
deleted file mode 100644 (file)
index 8f6919d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/107.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Restriction of the internal subset: Conditional sections not allowed
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/107.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/107.xml
deleted file mode 100644 (file)
index 2a69906..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<![CDATA[]]>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/108.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/108.out
deleted file mode 100644 (file)
index bbca44b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/108.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Declaration either malformed or not allowed in this context
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/108.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/108.xml
deleted file mode 100644 (file)
index 187b07f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<doc>
-<![CDATA [  ]]>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/109.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/109.out
deleted file mode 100644 (file)
index bf1f79a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/109.xml", at line 4, position 0:
-ERROR (Well-formedness constraint): Content not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/109.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/109.xml
deleted file mode 100644 (file)
index 33b1cf3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "<doc></doc>">
-]>
-&e;
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/110.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/110.out
deleted file mode 100644 (file)
index 4176538..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/110.xml", at line 5, position 3:
-ERROR (Well-formedness constraint): Entity reference not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/110.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/110.xml
deleted file mode 100644 (file)
index 4d7bf99..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "">
-]>
-<doc></doc>
-&e;
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/111.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/111.out
deleted file mode 100644 (file)
index be02f88..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/111.xml", at line 4, position 5:
-ERROR (Well-formedness constraint): Illegal inside tags
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/111.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/111.xml
deleted file mode 100644 (file)
index 530c6cc..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "foo='bar'">
-]>
-<doc &e;></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/112.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/112.out
deleted file mode 100644 (file)
index 5361f56..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/112.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Declaration either malformed or not allowed in this context
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/112.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/112.xml
deleted file mode 100644 (file)
index 13cfcc5..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<doc>
-<![cdata[data]]>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/113.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/113.out
deleted file mode 100644 (file)
index 23c9284..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/113.xml", at line 2, position 18:
-ERROR (Well-formedness constraint): The character '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/113.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/113.xml
deleted file mode 100644 (file)
index 899102b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY % foo "&">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/114.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/114.out
deleted file mode 100644 (file)
index 06be1fd..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/114.xml", at line 2, position 16:
-ERROR (Well-formedness constraint): The character '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/114.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/114.xml
deleted file mode 100644 (file)
index 32d6d07..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY foo "&">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/115.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/115.out
deleted file mode 100644 (file)
index 54a9241..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/115.xml", at line 4, position 7:
-ERROR (Well-formedness constraint): The character '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/115.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/115.xml
deleted file mode 100644 (file)
index af014a0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "&#38;">
-]>
-<doc a="&e;"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/116.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/116.out
deleted file mode 100644 (file)
index bebbe2c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 0:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/116.xml", line 4, position 5:
-ERROR (Well-formedness constraint): The ampersand '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/116.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/116.xml
deleted file mode 100644 (file)
index ce37ca0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "&#38;#9">
-]>
-<doc>&e;7;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/117.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/117.out
deleted file mode 100644 (file)
index 2b613d7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 0:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/117.xml", line 4, position 5:
-ERROR (Well-formedness constraint): The ampersand '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/117.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/117.xml
deleted file mode 100644 (file)
index 5ba4eb0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "&#38;">
-]>
-<doc>&e;#97;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/118.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/118.out
deleted file mode 100644 (file)
index fda0ee4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/118.xml", at line 4, position 5:
-ERROR (Well-formedness constraint): The ampersand '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/118.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/118.xml
deleted file mode 100644 (file)
index 49b4b8c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "#">
-]>
-<doc>&&e;97;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/119.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/119.out
deleted file mode 100644 (file)
index 0c3a84a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 0:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/119.xml", line 5, position 0:
-ERROR (Well-formedness constraint): The ampersand '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/119.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/119.xml
deleted file mode 100644 (file)
index 7ee56be..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "&#38;">
-]>
-<doc>
-&e;#38;
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/120.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/120.out
deleted file mode 100644 (file)
index 4b1ff9c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 0:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/120.xml", line 5, position 0:
-ERROR (Well-formedness constraint): The ampersand '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/120.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/120.xml
deleted file mode 100644 (file)
index ae8f55a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "&#38;">
-]>
-<doc>
-&e;
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/121.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/121.out
deleted file mode 100644 (file)
index 1daf3a8..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/121.xml", at line 2, position 9:
-ERROR (Well-formedness constraint): Illegal token or character
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/121.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/121.xml
deleted file mode 100644 (file)
index 63ecbe4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY #DEFAULT "default">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/122.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/122.out
deleted file mode 100644 (file)
index 8d65e69..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/122.xml", at line 2, position 27:
-ERROR (Well-formedness constraint): It is not allowed to mix alternatives and sequences
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/122.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/122.xml
deleted file mode 100644 (file)
index e8a7082..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (a, (b) | c)?>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/123.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/123.out
deleted file mode 100644 (file)
index 50f7364..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/123.xml", at line 2, position 22:
-ERROR (Well-formedness constraint): `>' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/123.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/123.xml
deleted file mode 100644 (file)
index f2dc633..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc ((doc?)))>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/124.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/124.out
deleted file mode 100644 (file)
index 9d1931c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/124.xml", at line 2, position 19:
-ERROR (Well-formedness constraint): Bad content model expression
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/124.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/124.xml
deleted file mode 100644 (file)
index 1abde7b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (doc|#PCDATA)*>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/125.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/125.out
deleted file mode 100644 (file)
index adb0e6e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/125.xml", at line 2, position 16:
-ERROR (Well-formedness constraint): Bad content model expression
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/125.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/125.xml
deleted file mode 100644 (file)
index 15519d4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc ((#PCDATA))>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/126.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/126.out
deleted file mode 100644 (file)
index 8a93b34..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/126.xml", at line 2, position 22:
-ERROR (Well-formedness constraint): Bad content model expression
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/126.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/126.xml
deleted file mode 100644 (file)
index b6cdb0c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)+>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/127.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/127.out
deleted file mode 100644 (file)
index 9deb084..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/127.xml", at line 2, position 22:
-ERROR (Well-formedness constraint): Bad content model expression
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/127.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/127.xml
deleted file mode 100644 (file)
index 557df35..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)?>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/128.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/128.out
deleted file mode 100644 (file)
index 3fa460a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/128.xml", at line 2, position 14:
-ERROR (Well-formedness constraint): EMPTY, ANY, or a subexpression expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/128.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/128.xml
deleted file mode 100644 (file)
index e8f8543..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc CDATA>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/129.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/129.out
deleted file mode 100644 (file)
index 0762512..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/129.xml", at line 2, position 14:
-ERROR (Well-formedness constraint): Content model expression expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/129.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/129.xml
deleted file mode 100644 (file)
index 6471a8d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc - - (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/130.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/130.out
deleted file mode 100644 (file)
index 6cd8d45..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/130.xml", at line 2, position 21:
-ERROR (Well-formedness constraint): `>' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/130.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/130.xml
deleted file mode 100644 (file)
index a4f0e86..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (doc?) +(foo)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/131.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/131.out
deleted file mode 100644 (file)
index 4bc40b0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/131.xml", at line 2, position 21:
-ERROR (Well-formedness constraint): `>' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/131.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/131.xml
deleted file mode 100644 (file)
index 783537f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (doc?) -(foo)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/132.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/132.out
deleted file mode 100644 (file)
index cf96a2b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/132.xml", at line 2, position 41:
-ERROR (Well-formedness constraint): It is not allowed to mix alternatives and sequences
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/132.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/132.xml
deleted file mode 100644 (file)
index 00823ff..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (a, (b, c), (d, (e, f) | g))?>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/133.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/133.out
deleted file mode 100644 (file)
index 9910ede..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/133.xml", at line 2, position 17:
-ERROR (Well-formedness constraint): Bad content model expression
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/133.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/133.xml
deleted file mode 100644 (file)
index d7444eb..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (a *)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/134.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/134.out
deleted file mode 100644 (file)
index ebb96aa..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/134.xml", at line 2, position 18:
-ERROR (Well-formedness constraint): `>' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/134.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/134.xml
deleted file mode 100644 (file)
index 78b1a59..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (a) *>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/135.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/135.out
deleted file mode 100644 (file)
index 9a95cbd..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/135.xml", at line 2, position 17:
-ERROR (Well-formedness constraint): References to general entities not allowed in DTDs
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/135.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/135.xml
deleted file mode 100644 (file)
index 6e2421e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (a & b)?>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/136.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/136.out
deleted file mode 100644 (file)
index 3af635a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/136.xml", at line 2, position 14:
-ERROR (Well-formedness constraint): EMPTY, ANY, or a subexpression expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/136.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/136.xml
deleted file mode 100644 (file)
index a1a0b2e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc O O (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/137.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/137.out
deleted file mode 100644 (file)
index b5659d7..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/137.xml", at line 2, position 13:
-ERROR (Well-formedness constraint): Whitespace is missing
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/137.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/137.xml
deleted file mode 100644 (file)
index de472bd..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc(#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/138.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/138.out
deleted file mode 100644 (file)
index 405657a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/138.xml", at line 2, position 19:
-ERROR (Well-formedness constraint): Bad content model expression
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/138.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/138.xml
deleted file mode 100644 (file)
index d81dd54..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (doc*?)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/139.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/139.out
deleted file mode 100644 (file)
index a376e2b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/139.xml", at line 2, position 15:
-ERROR (Well-formedness constraint): Bad content model expression
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/139.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/139.xml
deleted file mode 100644 (file)
index 2c6c92e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc ()>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/140.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/140.out
deleted file mode 100644 (file)
index abf07ef..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 0:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/140.xml", line 4, position 5:
-ERROR (Well-formedness constraint): The left angle bracket '<' must be written as '&lt;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/140.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/140.xml
deleted file mode 100644 (file)
index 062b213..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "<&#x309a;></&#x309a;>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/141.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/141.out
deleted file mode 100644 (file)
index cbd6185..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 2:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/141.xml", line 4, position 5:
-ERROR (Well-formedness constraint): Illegal inside tags
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/141.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/141.xml
deleted file mode 100644 (file)
index 6d864a3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "<X&#xe5c;></X&#xe5c;>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/142.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/142.out
deleted file mode 100644 (file)
index 88943b2..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/142.xml", at line 4, position 5:
-ERROR (Well-formedness constraint): Code point 0 outside the accepted range of code points
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/142.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/142.xml
deleted file mode 100644 (file)
index 57517d2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#0;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/143.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/143.out
deleted file mode 100644 (file)
index d1b511b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/143.xml", at line 4, position 5:
-ERROR (Well-formedness constraint): Code point 31 outside the accepted range of code points
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/143.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/143.xml
deleted file mode 100644 (file)
index 52c25d7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#31;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/144.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/144.out
deleted file mode 100644 (file)
index d67fe5a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/144.xml", at line 4, position 5:
-ERROR (Well-formedness constraint): Code point 65535 outside the accepted range of code points
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/144.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/144.xml
deleted file mode 100644 (file)
index 0f98e23..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#xFFFF;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/145.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/145.out
deleted file mode 100644 (file)
index 4c79e18..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/145.xml", at line 4, position 5:
-ERROR (Well-formedness constraint): Code point 55296 outside the accepted range of code points
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/145.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/145.xml
deleted file mode 100644 (file)
index 4909796..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#xD800;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/146.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/146.out
deleted file mode 100644 (file)
index f90c91c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/146.xml", at line 4, position 5:
-ERROR (Well-formedness constraint): Code point 1114112 outside the accepted range of code points
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/146.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/146.xml
deleted file mode 100644 (file)
index 53e9875..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&#x110000;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/147.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/147.out
deleted file mode 100644 (file)
index 41035fe..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/147.xml", at line 2, position 0:
-SYNTAX ERROR
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/147.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/147.xml
deleted file mode 100644 (file)
index 93fa1ee..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-<?xml version="1.0"?>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/148.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/148.out
deleted file mode 100644 (file)
index c42a3e9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/148.xml", at line 2, position 0:
-SYNTAX ERROR
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/148.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/148.xml
deleted file mode 100644 (file)
index a1623d5..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!-- -->
-<?xml version="1.0"?>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/149.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/149.out
deleted file mode 100644 (file)
index 71e2832..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/149.xml", at line 3, position 0:
-ERROR (Well-formedness constraint): `]' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/149.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/149.xml
deleted file mode 100644 (file)
index 0632eb7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<?xml version="1.0"?>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/150.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/150.out
deleted file mode 100644 (file)
index 160ef30..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/150.xml", at line 2, position 0:
-SYNTAX ERROR
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/150.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/150.xml
deleted file mode 100644 (file)
index e7c6e8c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<doc>
-<?xml version="1.0"?>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/151.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/151.out
deleted file mode 100644 (file)
index 444e8d6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/151.xml", at line 3, position 0:
-SYNTAX ERROR
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/151.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/151.xml
deleted file mode 100644 (file)
index fd9616c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<doc>
-</doc>
-<?xml version="1.0"?>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/152.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/152.out
deleted file mode 100644 (file)
index 211ee8a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/152.xml", at line 1, position 0:
-ERROR (Well-formedness constraint): Bad XML declaration
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/152.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/152.xml
deleted file mode 100644 (file)
index 3245b2e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml encoding="UTF-8"?>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/153.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/153.out
deleted file mode 100644 (file)
index 923e998..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 0:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/153.xml", line 5, position 5:
-SYNTAX ERROR
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/153.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/153.xml
deleted file mode 100644 (file)
index 07bd8df..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e "<?xml encoding='UTF-8'?>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/154.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/154.out
deleted file mode 100644 (file)
index c8d7702..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/154.xml", at line 1, position 0:
-ERROR (Well-formedness constraint): Reserved processing instruction
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/154.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/154.xml
deleted file mode 100644 (file)
index f58969c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?XML version="1.0"?>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/155.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/155.out
deleted file mode 100644 (file)
index 36fc528..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/155.xml", at line 1, position 0:
-ERROR (Well-formedness constraint): Reserved processing instruction
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/155.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/155.xml
deleted file mode 100644 (file)
index 87eccf0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xmL version="1.0"?>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/156.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/156.out
deleted file mode 100644 (file)
index 88abf6a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/156.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Reserved processing instruction
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/156.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/156.xml
deleted file mode 100644 (file)
index 98e2c4b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<doc>
-<?xMl version="1.0"?>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/157.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/157.out
deleted file mode 100644 (file)
index 793da43..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/157.xml", at line 2, position 0:
-ERROR (Well-formedness constraint): Reserved processing instruction
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/157.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/157.xml
deleted file mode 100644 (file)
index 363821a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<doc>
-<?xmL?>
-</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/158.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/158.out
deleted file mode 100644 (file)
index 1bfd00d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/158.xml", at line 4, position 10:
-ERROR (Well-formedness constraint): Illegal token or character
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/158.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/158.xml
deleted file mode 100644 (file)
index ebbeb51..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!NOTATION gif PUBLIC "image/gif" "">
-<!ATTLIST #NOTATION gif a1 CDATA #IMPLIED>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/159.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/159.out
deleted file mode 100644 (file)
index 83264a9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/159.xml", at line 3, position 38:
-ERROR (Well-formedness constraint): The character '&' must be written as '&amp;'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/159.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/159.xml
deleted file mode 100644 (file)
index 3a017ef..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY e "<![CDATA[Tim & Michael]]>">
-]>
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/160.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/160.out
deleted file mode 100644 (file)
index 1669390..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/160.xml", at line 4, position 18:
-ERROR (Well-formedness constraint): Restriction of the internal subset: parameter entity not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/160.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/160.xml
deleted file mode 100644 (file)
index 7e33116..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e "">
-<!ENTITY foo "%e;">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/161.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/161.out
deleted file mode 100644 (file)
index 0d78a8d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 9:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/161.xml", line 3, position 15:
-ERROR (Well-formedness constraint): Bad content model expression
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/161.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/161.xml
deleted file mode 100644 (file)
index e256995..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY % e "#PCDATA">
-<!ELEMENT doc (%e;)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/162.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/162.out
deleted file mode 100644 (file)
index f06c269..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/162.xml", at line 4, position 20:
-ERROR (Well-formedness constraint): Restriction of the internal subset: parameter entity not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/162.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/162.xml
deleted file mode 100644 (file)
index d1336da..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e1 "">
-<!ENTITY % e2 "%e1;">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/163.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/163.out
deleted file mode 100644 (file)
index b7fb7b0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/163.xml", at line 5, position 0:
-ERROR (Well-formedness constraint): Content not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/163.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/163.xml
deleted file mode 100644 (file)
index bb35a7b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e "">
-]>
-%e;
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/164.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/164.out
deleted file mode 100644 (file)
index 6151b95..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/164.xml", at line 4, position 2:
-ERROR (Well-formedness constraint): References to parameter entities not allowed here
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/164.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/164.xml
deleted file mode 100644 (file)
index 31da4ff..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e "">
-] %e; >
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/165.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/165.out
deleted file mode 100644 (file)
index 981b8a0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/165.xml", at line 2, position 8:
-ERROR (Well-formedness constraint): Whitespace is missing after ENTITY
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/165.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/165.xml
deleted file mode 100644 (file)
index 9b5198e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY% e "">
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/166.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/166.out
deleted file mode 100644 (file)
index 7ade465..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/166.xml", at line 1, position 0:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/166.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/166.xml
deleted file mode 100644 (file)
index 60f66f8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>ï¿¿</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/167.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/167.out
deleted file mode 100644 (file)
index 56d06ae..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/167.xml", at line 1, position 0:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/167.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/167.xml
deleted file mode 100644 (file)
index fc536a1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>￾</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/168.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/168.out
deleted file mode 100644 (file)
index 41163ea..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/168.xml", at line 1, position 0:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/168.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/168.xml
deleted file mode 100644 (file)
index ce8b4d7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>í €</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/169.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/169.out
deleted file mode 100644 (file)
index 623ad46..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/169.xml", at line 1, position 0:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/169.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/169.xml
deleted file mode 100644 (file)
index 6c1a0bf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>í°€</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/170.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/170.out
deleted file mode 100644 (file)
index 29011da..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/170.xml", at line 1, position 0:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/170.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/170.xml
deleted file mode 100644 (file)
index 6d02d89..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc>÷€€€</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/171.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/171.out
deleted file mode 100644 (file)
index 7ccaffa..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/171.xml", at line 1, position 5:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/171.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/171.xml
deleted file mode 100644 (file)
index 7fa118b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<!-- ï¿¿ -->
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/172.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/172.out
deleted file mode 100644 (file)
index 8b7d0ab..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/172.xml", at line 1, position 0:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/172.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/172.xml
deleted file mode 100644 (file)
index 434f799..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?pi ï¿¿?>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/173.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/173.out
deleted file mode 100644 (file)
index 25ef8fd..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/173.xml", at line 1, position 7:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/173.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/173.xml
deleted file mode 100644 (file)
index ab5a447..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc a="ï¿¿"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/174.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/174.out
deleted file mode 100644 (file)
index faec5b2..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/174.xml", at line 1, position 5:
-ERROR (Well-formedness constraint): Declaration either malformed or not allowed in this context
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/174.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/174.xml
deleted file mode 100644 (file)
index b7f3db9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<doc><![CDATA[ï¿¿]]></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/175.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/175.out
deleted file mode 100644 (file)
index 0f0e72c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/175.xml", at line 3, position 18:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/175.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/175.xml
deleted file mode 100644 (file)
index 6d13a21..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ENTITY % e "ï¿¿">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/176.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/176.out
deleted file mode 100644 (file)
index b1940a1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/176.xml", at line 5, position 0:
-ERROR (Well-formedness constraint): Missing end tag
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/176.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/176.xml
deleted file mode 100644 (file)
index 9c8e2e4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/177.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/177.out
deleted file mode 100644 (file)
index 58d032c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/177.xml", at line 4, position 6:
-ERROR: Bad character stream
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/177.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/177.xml
deleted file mode 100644 (file)
index bde27a6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>Aï¿¿</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/178.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/178.out
deleted file mode 100644 (file)
index 4f32440..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/178.xml", at line 5, position 7:
-ERROR (Well-formedness constraint): Cannot find the second quotation mark
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/178.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/178.xml
deleted file mode 100644 (file)
index ba36a31..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA #IMPLIED>
-]>
-<doc a="&#34;></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/179.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/179.out
deleted file mode 100644 (file)
index 3174804..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/179.xml", at line 2, position 11:
-ERROR (Well-formedness constraint): Cannot find the second quotation mark
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/179.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/179.xml
deleted file mode 100644 (file)
index e59d926..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "&#34;>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/180.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/180.out
deleted file mode 100644 (file)
index 15cabef..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/180.xml", at line 3, position 22:
-ERROR (Well-formedness constraint): Reference to undeclared general entity `e'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/180.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/180.xml
deleted file mode 100644 (file)
index d51b190..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA "&e;">
-<!ENTITY e "v">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/181.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/181.out
deleted file mode 100644 (file)
index b9c2569..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 0:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/181.xml", line 5, position 5:
-ERROR (Well-formedness constraint): Declaration either malformed or not allowed in this context
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/181.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/181.xml
deleted file mode 100644 (file)
index c438f1b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "&#60;![CDATA[">
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&e;]]></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/182.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/182.out
deleted file mode 100644 (file)
index e54bfb9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-In entity e, at line 1, position 4:
-Called from entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/182.xml", line 5, position 5:
-ERROR (Well-formedness constraint): `-->' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/182.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/182.xml
deleted file mode 100644 (file)
index 106df72..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e "&#60;!--">
-<!ELEMENT doc (#PCDATA)>
-]>
-<doc>&e;--></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/183.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/183.out
deleted file mode 100644 (file)
index 5d8c43d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/183.xml", at line 2, position 28:
-ERROR (Well-formedness constraint): `)*' expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/183.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/183.xml
deleted file mode 100644 (file)
index 85ddfc8..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA | foo*)* >
-<!ELEMENT foo EMPTY>
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/184.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/184.out
deleted file mode 100644 (file)
index 3b62191..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/184.xml", at line 2, position 25:
-ERROR (Well-formedness constraint): Name expected
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/184.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/184.xml
deleted file mode 100644 (file)
index f875392..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ELEMENT doc (#PCDATA | (foo))* >
-<!ELEMENT foo EMPTY>
-]>
-<doc></doc>
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/185.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/185.ent
deleted file mode 100644 (file)
index fdd8077..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<!ELEMENT doc (#PCDATA)>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/185.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/185.out
deleted file mode 100644 (file)
index 53d52c7..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/185.xml", at line 3, position 5:
-ERROR (Well-formedness constraint): Reference to undeclared general entity `e'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/185.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/185.xml
deleted file mode 100644 (file)
index ea2f6d7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-<!DOCTYPE doc SYSTEM "185.ent">
-<doc>&e;</doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/186.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/186.out
deleted file mode 100644 (file)
index 6fa931a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_jclark_notwf/sa/186.xml", at line 5, position 15:
-ERROR (Well-formedness constraint): Whitespace is missing between attributes `b' and `d'
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/186.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/186.xml
deleted file mode 100644 (file)
index 0bbacca..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE a [
-<!ELEMENT a EMPTY>
-<!ATTLIST a b CDATA #IMPLIED d CDATA #IMPLIED>
-]>
-<a b="c"d="e"/>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/null.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_jclark_notwf/sa/null.ent
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/001.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/001.out
deleted file mode 100644 (file)
index 8b203de..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_notwf/sa/001.xml", at line 4, position 7:
-ERROR (Validity constraint): Found reference to external entity in attribute value
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/001.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/001.xml
deleted file mode 100644 (file)
index 56b5100..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e SYSTEM "null.ent">
-]>
-<doc a="&e;"></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/002.out b/helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/002.out
deleted file mode 100644 (file)
index ea6c1f9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-In entity [toplevel] = SYSTEM "file://localhost/home/gerd/ocaml/smcvs/ocamlpkg/markup/rtests/negative/data_notwf/sa/002.xml", at line 4, position 22:
-ERROR (Validity constraint): Found reference to external entity in attribute value
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/002.xml b/helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/002.xml
deleted file mode 100644 (file)
index f247879..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE doc [
-<!ENTITY e SYSTEM "null.ent">
-<!ELEMENT doc (#PCDATA)>
-<!ATTLIST doc a CDATA "&e;">
-]>
-<doc></doc>
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/null.ent b/helm/DEVEL/pxp/pxp/rtests/negative/data_notwf/sa/null.ent
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/run_negative b/helm/DEVEL/pxp/pxp/rtests/negative/run_negative
deleted file mode 100755 (executable)
index 3c58a4e..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-#! /bin/bash
-
-# $Id$
-
-
-t=./test_negative
-
-init_test () {
-    # $1: Options for test_negative
-    # $2: Path to test record
-    options="$1"
-    input="$2"
-    output=`dirname $input`/`basename $input .xml`.out
-    if  [ -f "$output" ]; then
-       echo "Test $input already initialized; skipping"
-    else
-       $t $options "$input" >"$output"
-       echo Test $input initialized.
-    fi
-}
-
-
-check_test () {
-    # $1: Options for test_negative
-    # $2: Path to test record
-    options="$1"
-    input="$2"
-    output=`dirname $input`/`basename $input .xml`.out
-    $t $options "$input" >current.out
-    if [ -f "$output" ]; then
-       if cmp "$output" current.out; then
-           echo Test $input OK
-       else
-           echo Test $input FAILED!!!
-       fi
-    else
-       echo Test $input still uninitialized
-       echo - OUTPUT:
-       cat current.out
-    fi
-}
-
-
-for_directory () {
-    what="$1"
-    shift
-    options="$1"
-    shift
-    while [ $# -gt 0 ]; do
-       input="$1"
-       shift
-       if [ -f "$input" ]; then
-           $what "$options" "$input"
-       else
-           if [ -d "$input" ]; then
-               for ent in $input/*.xml; do
-                   for_directory $what "$options" $ent
-               done
-           else
-               echo "Not found: $input" >&2
-           fi
-       fi
-    done
-}
-
-
-usage () {
-    cat <<EOF >&2
-usage: $0 [ -init -wf ] file ... dir ...
-EOF
-    exit 1
-}
-
-
-action="check_test"
-options=""
-while true; do
-    case "x$1" in
-       x-init)
-           action="init_test"
-           shift
-           ;;
-       x-wf)
-           options="$options -wf"
-           shift
-           ;;
-       x-*)
-           usage
-           ;;
-       *)
-           break
-           ;;
-    esac
-done
-
-
-if [ $# -gt 0 ]; then
-    for_directory $action "$options" "$@"
-else
-    for_directory $action -wf \
-       data_jclark_notwf/ext-sa data_jclark_notwf/not-sa data_jclark_notwf/sa \
-       data_notwf/sa
-    for_directory $action "" \
-       data_jclark_invalid data_invalid
-fi
-
-# ======================================================================
-# $Log$
-# Revision 1.1  2000/11/17 09:57:33  lpadovan
-# Initial revision
-#
-# Revision 1.2  2000/05/01 16:23:39  gerd
-#      Added data_invalid.
-#
-# Revision 1.1  2000/05/01 15:58:50  gerd
-#      Initial revision.
-#
diff --git a/helm/DEVEL/pxp/pxp/rtests/negative/test_negative.ml b/helm/DEVEL/pxp/pxp/rtests/negative/test_negative.ml
deleted file mode 100644 (file)
index 13f049c..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-open Pxp_document;;
-open Pxp_yacc;;
-open Pxp_types;;
-
-let error_happened = ref false;;
-
-let rec print_error e =
-  print_endline (string_of_exn e)
-;;
-
-class warner =
-  object 
-    method warn w =
-      print_endline ("WARNING: " ^ w)
-  end
-;;
-
-let parse debug wf iso88591 filename =
-  try 
-  let config =
-      { default_config with 
-         warner = new warner;
-          debugging_mode = debug;
-          encoding = if iso88591 then `Enc_iso88591 else `Enc_utf8;
-         idref_pass = true;
-      }
-  in
-    let parse_fn =
-      if wf then parse_wfdocument_entity 
-      else 
-       let index = new hash_index in
-       parse_document_entity 
-         ?transform_dtd:None 
-         ~id_index:(index :> 'ext index)
-    in
-    let tree =
-      parse_fn
-       config
-       (from_file filename)
-       default_spec
-    in
-    print_endline "Parsed without error";
-  with
-      e ->
-       error_happened := true;
-       print_error e
-;;
-
-
-let main() =
-  let debug = ref false in
-  let wf = ref false in
-  let iso88591 = ref false in
-  let files = ref [] in
-  Arg.parse
-      [ "-d",   Arg.Set debug, "turn debugging mode on";
-       "-wf",  Arg.Set wf,    "check only on well-formedness";
-        "-iso-8859-1", Arg.Set iso88591, "use ISO-8859-1 as internal encoding instead of UTF-8";
-      ]
-      (fun x -> files := x :: !files)
-      "
-usage: test_negative [options] file ...
-
-List of options:";
-  files := List.rev !files;
-  List.iter (parse !debug !wf !iso88591) !files;
-;;
-
-
-main();
-if !error_happened then exit(1);;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:33  lpadovan
- * Initial revision
- *
- * Revision 1.6  2000/07/14 14:57:12  gerd
- *     Updated: warner
- *
- * Revision 1.5  2000/07/14 14:20:11  gerd
- *     Updated because of PXP interface changes.
- *
- * Revision 1.4  2000/07/09 01:49:09  gerd
- *     Updated because of PXP interface changes.
- *
- * Revision 1.3  2000/06/04 20:31:21  gerd
- *     Updates because of renamed PXP modules.
- *
- * Revision 1.2  2000/05/28 17:23:22  gerd
- *     Updated.
- *
- * Revision 1.1  2000/05/01 15:58:50  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/rtests/reader/Makefile b/helm/DEVEL/pxp/pxp/rtests/reader/Makefile
deleted file mode 100644 (file)
index b1f204f..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# make validate:        make bytecode executable
-# make validate.opt:    make native executable
-# make clean:          remove intermediate files (in this directory)
-# make CLEAN:           remove intermediate files (recursively)
-# make distclean:      remove any superflous files (recursively)
-#----------------------------------------------------------------------
-
-OCAMLPATH=../..
-
-test_reader: test_reader.ml
-       ocamllex minilex.mll
-       ocamlfind ocamlc -custom -o test_reader -package .,unix,threads \
-               -linkpkg -thread -noautolink \
-               -g minilex.ml test_reader.ml
-
-#----------------------------------------------------------------------
-.PHONY: all
-all:
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa minilex.ml
-
-.PHONY: CLEAN
-CLEAN: clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~
-       rm -f test_reader
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/reader/minilex.mll b/helm/DEVEL/pxp/pxp/rtests/reader/minilex.mll
deleted file mode 100644 (file)
index 1c9fbec..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-{ }
-rule nextchar = parse 
-    _ 
-      { Some (Lexing.lexeme lexbuf).[0] }
-  | eof
-      { None }
-{ }
diff --git a/helm/DEVEL/pxp/pxp/rtests/reader/t100.dat b/helm/DEVEL/pxp/pxp/rtests/reader/t100.dat
deleted file mode 100644 (file)
index ad47100..0000000
+++ /dev/null
@@ -1 +0,0 @@
-0123456789
\ No newline at end of file
diff --git a/helm/DEVEL/pxp/pxp/rtests/reader/test_reader.ml b/helm/DEVEL/pxp/pxp/rtests/reader/test_reader.ml
deleted file mode 100644 (file)
index f01edf5..0000000
+++ /dev/null
@@ -1,455 +0,0 @@
-open Pxp_reader;;
-open Pxp_types;;
-open Minilex;;
-
-let make_channel s =
-  (* Returns a channel reading the bytes from the string s *)
-  let rd, wr = Unix.pipe() in
-  let ch_rd = Unix.in_channel_of_descr rd in
-  let ch_wr = Unix.out_channel_of_descr wr in
-  ignore
-    (Thread.create
-       (fun () ->
-          output_string ch_wr s;
-          close_out ch_wr;
-       )
-       ()
-    );
-  ch_rd
-;;
-
-(**********************************************************************)
-
-let t001 () =
-  (* Reads from a string (without recoding it), checks the lexbuf size *)
-  let s = "0123456789abc" in
-  let r = new resolve_read_this_string s in
-  r # init_rep_encoding `Enc_iso88591;
-  r # init_warner (new drop_warnings);
-  let lb = r # open_in Anonymous in
-  let c = nextchar lb in
-  assert (c = Some '0');
-  assert (lb.Lexing.lex_curr_pos = lb.Lexing.lex_buffer_len);
-  (* Note: the end of lb.lex_buffer is filled up, so lb.lex_curr_pos must
-   * now be at the end of the buffer indicating that the buffer is now
-   * empty.
-   *)
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  let c = nextchar lb in
-  assert (c = Some '9');
-  assert (lb.Lexing.lex_curr_pos = lb.Lexing.lex_buffer_len);
-  r # change_encoding "";
-  let c = nextchar lb in
-  assert (c = Some 'a');
-  assert (lb.Lexing.lex_curr_pos < lb.Lexing.lex_buffer_len);
-  ignore(nextchar lb);
-  let c = nextchar lb in
-  assert (c = Some 'c');
-  let c = nextchar lb in
-  assert (c = None);
-  r # close_in;
-  true
-;;
-
-
-let t002 () =
-  (* Like t001, but reads from a channel *)
-  let ch = make_channel "0123456789abc" in
-  let r = new resolve_read_this_channel ch in
-  r # init_rep_encoding `Enc_iso88591;
-  r # init_warner (new drop_warnings);
-  let lb = r # open_in Anonymous in
-  let c = nextchar lb in
-  assert (c = Some '0');
-  assert (lb.Lexing.lex_curr_pos = lb.Lexing.lex_buffer_len);
-  (* Note: the end of lb.lex_buffer is filled up, so lb.lex_curr_pos must
-   * now be at the end of the buffer indicating that the buffer is now
-   * empty.
-   *)
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  ignore(nextchar lb);
-  let c = nextchar lb in
-  assert (c = Some '9');
-  assert (lb.Lexing.lex_curr_pos = lb.Lexing.lex_buffer_len);
-  r # change_encoding "";
-  let c = nextchar lb in
-  assert (c = Some 'a');
-  assert (lb.Lexing.lex_curr_pos < lb.Lexing.lex_buffer_len);
-  ignore(nextchar lb);
-  let c = nextchar lb in
-  assert (c = Some 'c');
-  let c = nextchar lb in
-  assert (c = None);
-  r # close_in;
-  true
-;;
-
-
-let t003 () =
-  (* Tests non-automatic encoding conversion from ISO-8859-1 to UTF-8 *)
-  let s = "0«»°áàâãäÃÀÂÃÄéèêëíìîïÃÌÎÃóòôõøöÓÒÔÕØÖúùûüýÿÃßç¡¿ñÑ" in
-  let r = new resolve_read_this_string ~fixenc:`Enc_iso88591 s in
-  r # init_rep_encoding `Enc_utf8;
-  r # init_warner (new drop_warnings);
-  let lb = r # open_in Anonymous in
-  let c = ref (nextchar lb) in
-  assert (!c = Some '0');
-  assert (lb.Lexing.lex_curr_pos < lb.Lexing.lex_buffer_len);
-  (* Note: because we initialize the resolver with ~fixenc, the resolver can
-   * fill the buffer with more than one byte from the beginning.
-   *)
-  let u = ref "" in
-  while !c <> None do
-    ( match !c with
-         Some x -> u := !u ^ String.make 1 x
-       | None -> ()
-    );
-    c := nextchar lb
-  done;
-  r # close_in;
-  !u = "0\194\171\194\187\194\176\195\161\195\160\195\162\195\163\195\164\195\129\195\128\195\130\195\131\195\132\195\169\195\168\195\170\195\171\195\173\195\172\195\174\195\175\195\141\195\140\195\142\195\143\195\179\195\178\195\180\195\181\195\184\195\182\195\147\195\146\195\148\195\149\195\152\195\150\195\186\195\185\195\187\195\188\195\189\195\191\195\157\195\159\195\167\194\161\194\191\195\177\195\145"
-;;
-
-
-let t004 () =
-  (* Tests non-automatic encoding conversion from UTF-8 to ISO-8859-1 *)
-  let s = "0\194\171\194\187\194\176\195\161\195\160\195\162\195\163\195\164\195\129\195\128\195\130\195\131\195\132\195\169\195\168\195\170\195\171\195\173\195\172\195\174\195\175\195\141\195\140\195\142\195\143\195\179\195\178\195\180\195\181\195\184\195\182\195\147\195\146\195\148\195\149\195\152\195\150\195\186\195\185\195\187\195\188\195\189\195\191\195\157\195\159\195\167\194\161\194\191\195\177\195\145" in
-  let r = new resolve_read_this_string ~fixenc:`Enc_utf8 s in
-  r # init_rep_encoding `Enc_iso88591;
-  r # init_warner (new drop_warnings);
-  let lb = r # open_in Anonymous in
-  let c = ref (nextchar lb) in
-  assert (!c = Some '0');
-  assert (lb.Lexing.lex_curr_pos < lb.Lexing.lex_buffer_len);
-  (* Note: because we initialize the resolver with ~fixenc, the resolver can
-   * fill the buffer with more than one byte from the beginning.
-   *)
-  let u = ref "" in
-  while !c <> None do
-    ( match !c with
-         Some x -> u := !u ^ String.make 1 x
-       | None -> ()
-    );
-    c := nextchar lb
-  done;
-  r # close_in;
-  !u = "0«»°áàâãäÃÀÂÃÄéèêëíìîïÃÌÎÃóòôõøöÓÒÔÕØÖúùûüýÿÃßç¡¿ñÑ"
-;;
-
-
-let t005 () =
-  (* Tests automatic encoding conversion from UTF-8 to ISO-8859-1 *)
-  let s = "0\194\171\194\187\194\176\195\161\195\160\195\162\195\163\195\164\195\129\195\128\195\130\195\131\195\132\195\169\195\168\195\170\195\171\195\173\195\172\195\174\195\175\195\141\195\140\195\142\195\143\195\179\195\178\195\180\195\181\195\184\195\182\195\147\195\146\195\148\195\149\195\152\195\150\195\186\195\185\195\187\195\188\195\189\195\191\195\157\195\159\195\167\194\161\194\191\195\177\195\145" in
-  let r = new resolve_read_this_string s in
-  r # init_rep_encoding `Enc_iso88591;
-  r # init_warner (new drop_warnings);
-  let lb = r # open_in Anonymous in
-  let c = ref (nextchar lb) in
-  assert (!c = Some '0');
-  assert (lb.Lexing.lex_curr_pos = lb.Lexing.lex_buffer_len);
-  let u = ref "" in
-  while !c <> None do
-    ( match !c with
-         Some x -> u := !u ^ String.make 1 x
-       | None -> ()
-    );
-    c := nextchar lb
-  done;
-  r # close_in;
-  !u = "0«»°áàâãäÃÀÂÃÄéèêëíìîïÃÌÎÃóòôõøöÓÒÔÕØÖúùûüýÿÃßç¡¿ñÑ"
-;;
-
-
-let t006 () =
-  (* Tests automatic encoding conversion from UTF-16-BE to UTF-8 
-   * This variant invokes change_encoding early.
-   *)
-  let s = "\254\255\0000\000«\000»\000°\000á\000à\000â\000ã\000ä\000Ã\000À\000Â\000Ã\000Ä\000é\000è\000ê\000ë\000í\000ì\000î\000ï\000Ã\000ÃŒ\000ÃŽ\000Ã\000ó\000ò\000ô\000õ\000ø\000ö\000Ó\000Ã’\000Ô\000Õ\000Ø\000Ö\000ú\000ù\000û\000ü\000ý\000ÿ\000Ã\000ß\000ç\000¡\000¿\000ñ\000Ñ" in
-  let r = new resolve_read_this_string s in
-  r # init_rep_encoding `Enc_utf8;
-  r # init_warner (new drop_warnings);
-  let lb = r # open_in Anonymous in
-  let c = ref (nextchar lb) in
-  assert (!c = Some '0');
-  assert (lb.Lexing.lex_curr_pos = lb.Lexing.lex_buffer_len);
-  r # change_encoding "";
-  let u = ref "" in
-  while !c <> None do
-    ( match !c with
-         Some x -> u := !u ^ String.make 1 x
-       | None -> ()
-    );
-    c := nextchar lb
-  done;
-  r # close_in;
-  !u = "0\194\171\194\187\194\176\195\161\195\160\195\162\195\163\195\164\195\129\195\128\195\130\195\131\195\132\195\169\195\168\195\170\195\171\195\173\195\172\195\174\195\175\195\141\195\140\195\142\195\143\195\179\195\178\195\180\195\181\195\184\195\182\195\147\195\146\195\148\195\149\195\152\195\150\195\186\195\185\195\187\195\188\195\189\195\191\195\157\195\159\195\167\194\161\194\191\195\177\195\145"
-;;
-
-
-let t007 () =
-  (* Tests automatic encoding conversion from UTF-16-BE to UTF-8 
-   * This variant does not invoke change_encoding
-   *)
-  let s = "\254\255\0000\000«\000»\000°\000á\000à\000â\000ã\000ä\000Ã\000À\000Â\000Ã\000Ä\000é\000è\000ê\000ë\000í\000ì\000î\000ï\000Ã\000ÃŒ\000ÃŽ\000Ã\000ó\000ò\000ô\000õ\000ø\000ö\000Ó\000Ã’\000Ô\000Õ\000Ø\000Ö\000ú\000ù\000û\000ü\000ý\000ÿ\000Ã\000ß\000ç\000¡\000¿\000ñ\000Ñ" in
-  let r = new resolve_read_this_string s in
-  r # init_rep_encoding `Enc_utf8;
-  r # init_warner (new drop_warnings);
-  let lb = r # open_in Anonymous in
-  let c = ref (nextchar lb) in
-  assert (!c = Some '0');
-  assert (lb.Lexing.lex_curr_pos = lb.Lexing.lex_buffer_len);
-  let u = ref "" in
-  while !c <> None do
-    ( match !c with
-         Some x -> u := !u ^ String.make 1 x
-       | None -> ()
-    );
-    c := nextchar lb
-  done;
-  r # close_in;
-  !u = "0\194\171\194\187\194\176\195\161\195\160\195\162\195\163\195\164\195\129\195\128\195\130\195\131\195\132\195\169\195\168\195\170\195\171\195\173\195\172\195\174\195\175\195\141\195\140\195\142\195\143\195\179\195\178\195\180\195\181\195\184\195\182\195\147\195\146\195\148\195\149\195\152\195\150\195\186\195\185\195\187\195\188\195\189\195\191\195\157\195\159\195\167\194\161\194\191\195\177\195\145"
-;;
-
-(**********************************************************************)
-
-let t100 () =
-  (* Reads from a file without recoding it *)
-  let r = new resolve_as_file () in
-  r # init_rep_encoding `Enc_utf8;
-  r # init_warner (new drop_warnings);
-  let cwd = Sys.getcwd() in
-  let lb = r # open_in (System ("file://localhost" ^ cwd ^ "/t100.dat")) in
-  let c = nextchar lb in
-  assert (c = Some '0');
-  assert (lb.Lexing.lex_curr_pos = lb.Lexing.lex_buffer_len);
-  (* Note: the end of lb.lex_buffer is filled up, so lb.lex_curr_pos must
-   * now be at the end of the buffer indicating that the buffer is now
-   * empty.
-   *)
-  for i = 1 to 8 do
-    ignore(nextchar lb);
-  done;
-  let c = nextchar lb in
-  assert (c = Some '9');
-  r # close_in;
-  true
-;;
-
-let t101 () =
-  (* Reads from a file without recoding it *)
-  let r = new resolve_as_file () in
-  r # init_rep_encoding `Enc_utf8;
-  r # init_warner (new drop_warnings);
-  let cwd = Sys.getcwd() in
-  let lb = r # open_in (System ("//localhost" ^ cwd ^ "/t100.dat")) in
-  let c = nextchar lb in
-  assert (c = Some '0');
-  assert (lb.Lexing.lex_curr_pos = lb.Lexing.lex_buffer_len);
-  (* Note: the end of lb.lex_buffer is filled up, so lb.lex_curr_pos must
-   * now be at the end of the buffer indicating that the buffer is now
-   * empty.
-   *)
-  for i = 1 to 8 do
-    ignore(nextchar lb);
-  done;
-  let c = nextchar lb in
-  assert (c = Some '9');
-  r # close_in;
-  true
-;;
-
-let t102 () =
-  (* Reads from a file without recoding it *)
-  let r = new resolve_as_file () in
-  r # init_rep_encoding `Enc_utf8;
-  r # init_warner (new drop_warnings);
-  let cwd = Sys.getcwd() in
-  let lb = r # open_in (System (cwd ^ "/t100.dat")) in
-  let c = nextchar lb in
-  assert (c = Some '0');
-  assert (lb.Lexing.lex_curr_pos = lb.Lexing.lex_buffer_len);
-  (* Note: the end of lb.lex_buffer is filled up, so lb.lex_curr_pos must
-   * now be at the end of the buffer indicating that the buffer is now
-   * empty.
-   *)
-  for i = 1 to 8 do
-    ignore(nextchar lb);
-  done;
-  let c = nextchar lb in
-  assert (c = Some '9');
-  r # close_in;
-  true
-;;
-
-let t103 () =
-  (* Reads from a file without recoding it *)
-  let r = new resolve_as_file () in
-  r # init_rep_encoding `Enc_utf8;
-  r # init_warner (new drop_warnings);
-  let lb = r # open_in (System "t100.dat") in
-  let c = nextchar lb in
-  assert (c = Some '0');
-  assert (lb.Lexing.lex_curr_pos = lb.Lexing.lex_buffer_len);
-  (* Note: the end of lb.lex_buffer is filled up, so lb.lex_curr_pos must
-   * now be at the end of the buffer indicating that the buffer is now
-   * empty.
-   *)
-  for i = 1 to 8 do
-    ignore(nextchar lb);
-  done;
-  let c = nextchar lb in
-  assert (c = Some '9');
-  r # close_in;
-  true
-;;
-
-(**********************************************************************)
-
-let t110 () =
-  (* Checks whether relative URLs are properly handled *)
-  let r = new resolve_as_file () in
-  r # init_rep_encoding `Enc_utf8;
-  r # init_warner (new drop_warnings);
-  let lb = r # open_in (System "t100.dat") in
-  let c = nextchar lb in
-  assert (c = Some '0');
-  assert (lb.Lexing.lex_curr_pos = lb.Lexing.lex_buffer_len);
-  (* Note: the end of lb.lex_buffer is filled up, so lb.lex_curr_pos must
-   * now be at the end of the buffer indicating that the buffer is now
-   * empty.
-   *)
-  for i = 1 to 8 do
-    ignore(nextchar lb);
-  done;
-  let r' = r # clone in
-  let lb' = r' # open_in (System "t100.dat") in
-  let c = nextchar lb' in
-  assert (c = Some '0');
-  for i = 1 to 8 do
-    ignore(nextchar lb');
-  done;
-  let c = nextchar lb' in
-  assert (c = Some '9');
-  r' # close_in;
-  let c = nextchar lb in
-  assert (c = Some '9');
-  r # close_in;
-  true
-;;
-
-(**********************************************************************)
-(* Tests whether the encoding handling of System IDs is okay *)
-
-let t200 () =
-  (* Check the technique for the following tests:
-   * [Checks also 'combine' to some extent.)
-   *)
-  let r1 = new resolve_read_this_string
-            ~id:(System "b.xml")
-            ~fixenc:`Enc_iso88591
-            "ae" in
-  let r2 = new resolve_read_this_string
-            ~id:(System "a.xml")
-            ~fixenc:`Enc_iso88591
-            "<!DOCTYPE a [ <!ELEMENT a ANY> <!ENTITY ae SYSTEM 'b.xml'> ]> <a>&ae;</a>" in
-  let r = new combine [ r1; r2 ] in
-  (* It should now be possible to resolve &ae; *)
-  let _ =
-    Pxp_yacc.parse_document_entity 
-      { Pxp_yacc.default_config with Pxp_yacc.encoding = `Enc_iso88591 }
-      (Pxp_yacc.ExtID(System "a.xml", r))
-      Pxp_yacc.default_spec
-  in
-  true
-;;
-
-
-let t201 () =
-  (* Check that System IDs are converted to UTF-8. rep_encoding = ISO-8859-1 *)
-  let r1 = new resolve_read_this_string
-            ~id:(System "\195\164.xml")      (* This is an UTF-8 "ä"! *)
-            ~fixenc:`Enc_iso88591
-            "ae" in
-  let r2 = new resolve_read_this_string
-            ~id:(System "a.xml")
-            ~fixenc:`Enc_iso88591
-            "<!DOCTYPE a [ <!ELEMENT a ANY> <!ENTITY ae SYSTEM 'ä.xml'> ]> <a>&ae;</a>" in
-  let r = new combine [ r1; r2 ] in
-  (* It should now be possible to resolve &ae; *)
-  let _ =
-    Pxp_yacc.parse_document_entity 
-      { Pxp_yacc.default_config with Pxp_yacc.encoding = `Enc_iso88591 }
-      (Pxp_yacc.ExtID(System "a.xml", r))
-      Pxp_yacc.default_spec
-  in
-  true
-;;
-
-
-let t202 () =
-  (* Check that System IDs are converted to UTF-8. rep_encoding = UTF-8 *)
-  let r1 = new resolve_read_this_string
-            ~id:(System "\195\164.xml")
-            ~fixenc:`Enc_iso88591
-            "ae" in
-  let r2 = new resolve_read_this_string
-            ~id:(System "a.xml")
-            ~fixenc:`Enc_iso88591
-            "<!DOCTYPE a [ <!ELEMENT a ANY> <!ENTITY ae SYSTEM 'ä.xml'> ]> <a>&ae;</a>" in
-  let r = new combine [ r1; r2 ] in
-  (* It should now be possible to resolve &ae; *)
-  let _ =
-    Pxp_yacc.parse_document_entity 
-      { Pxp_yacc.default_config with Pxp_yacc.encoding = `Enc_utf8 }
-      (Pxp_yacc.ExtID(System "a.xml", r))
-      Pxp_yacc.default_spec
-  in
-  true
-;;
-
-(**********************************************************************)
-
-let test f n =
-  try
-    print_string ("Reader test " ^ n);
-    flush stdout;
-    if f() then
-      print_endline " ok"
-    else
-      print_endline " FAILED!!!!";
-  with
-      error ->
-       print_endline (" FAILED: " ^ string_of_exn error)
-;;
-
-test t001 "001";;
-test t002 "002";;
-test t003 "003";;
-test t004 "004";;
-test t005 "005";;
-test t006 "006";;
-test t007 "007";;
-
-test t100 "100";;
-test t101 "101";;
-test t102 "102";;
-test t103 "103";;
-
-test t110 "110";;
-
-test t200 "200";;
-test t201 "201";;
-test t202 "202";;
diff --git a/helm/DEVEL/pxp/pxp/rtests/run b/helm/DEVEL/pxp/pxp/rtests/run
deleted file mode 100755 (executable)
index 11b573c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#! /bin/sh
-
-set -e
-
-(cd reader && ./test_reader)
-(cd canonxml && ./run_canonxml)
-(cd write && ./run_write)
-(cd codewriter && ./run_codewriter)
-(cd negative && ./run_negative)
diff --git a/helm/DEVEL/pxp/pxp/rtests/write/Makefile b/helm/DEVEL/pxp/pxp/rtests/write/Makefile
deleted file mode 100644 (file)
index 634b272..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# make validate:        make bytecode executable
-# make validate.opt:    make native executable
-# make clean:          remove intermediate files (in this directory)
-# make CLEAN:           remove intermediate files (recursively)
-# make distclean:      remove any superflous files (recursively)
-#----------------------------------------------------------------------
-
-OCAMLPATH=../..
-
-test_write: test_write.ml
-       ocamlfind ocamlc -g -custom -o test_write -package .,str -linkpkg test_write.ml
-
-#----------------------------------------------------------------------
-.PHONY: all
-all:
-
-.PHONY: clean
-clean:
-       rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa out1 out2 out3
-
-.PHONY: CLEAN
-CLEAN: clean
-
-.PHONY: distclean
-distclean: clean
-       rm -f *~
-       rm -f test_write
-
diff --git a/helm/DEVEL/pxp/pxp/rtests/write/run_write b/helm/DEVEL/pxp/pxp/rtests/write/run_write
deleted file mode 100755 (executable)
index 1c43acb..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#! /bin/bash
-
-test_sample () {
-    file="$1"
-    echo -n "Testing $file... "
-    ./test_write -in "$file" >out1
-    ./test_write -in out1    >out2
-    ./test_write -in out2    >out3
-    if cmp out1 out3; then
-       echo "OK"
-    else
-       echo "FAILED"
-    fi
-}
-
-
-test_sample "sample001.xml"
diff --git a/helm/DEVEL/pxp/pxp/rtests/write/sample001.xml b/helm/DEVEL/pxp/pxp/rtests/write/sample001.xml
deleted file mode 100644 (file)
index 4973505..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE a [
-
-<!ELEMENT a (b | (c, d)* | (e, f)+ | g?)>
-<!ELEMENT b (#PCDATA | a)*>
-<!ELEMENT c EMPTY>
-<!ELEMENT d ANY>
-<!ELEMENT e EMPTY>
-<!ELEMENT f EMPTY>
-<!ELEMENT g EMPTY>
-
-<!ATTLIST a u CDATA #IMPLIED
-            v NMTOKEN "huhu"
-            w (q|p)   #REQUIRED
-            x NOTATION (n1|n2) "n1"
-            y ENTITY #IMPLIED>
-
-<!NOTATION n1 SYSTEM "/bin/n1-processor">
-<!NOTATION n2 SYSTEM "/bin/n2-processor">
-
-<!ENTITY u1 SYSTEM "file-u1" NDATA n1>
-<!ENTITY u2 SYSTEM "file-u2" NDATA n2>
-
-<?pi1 args ...?>
-]>
-
-<a u="1" w="q" x="n2">
-  <b>
-    <?pi2 args ...?>
-    This is text!
-    <a w="p" y="u1">
-      <c/>
-      <d/>
-    </a>
-  </b>
-</a>
-
-<?pi3 args ...?>
diff --git a/helm/DEVEL/pxp/pxp/rtests/write/test_write.ml b/helm/DEVEL/pxp/pxp/rtests/write/test_write.ml
deleted file mode 100644 (file)
index 48defd2..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-
-open Pxp_document;;
-open Pxp_yacc;;
-open Pxp_types;;
-
-let error_happened = ref false;;
-
-let rec prerr_error e =
-  prerr_endline (string_of_exn e)
-;;
-
-class warner =
-  object 
-    method warn w =
-      prerr_endline ("WARNING: " ^ w)
-  end
-;;
-
-let parse_and_write in_filename =
-  let spec =
-    let e = new element_impl default_extension in
-    make_spec_from_mapping
-      ~super_root_exemplar:      e
-      ~default_pinstr_exemplar:  e
-      ~data_exemplar:            (new data_impl default_extension)
-      ~default_element_exemplar: e
-      ~element_mapping:          (Hashtbl.create 1)
-      ()
-  in
-  let config =
-      { default_config with 
-         warner = new warner;
-         enable_pinstr_nodes = true;
-         enable_super_root_node = true;
-         encoding = `Enc_utf8;
-      }
-  in
-  try 
-    let tree =
-      parse_document_entity
-        config
-       (from_file in_filename)
-       spec 
-    in
-    
-    tree # write (Out_channel stdout) `Enc_utf8;
-  with
-      e ->
-       error_happened := true;
-       prerr_error e
-;;
-
-
-let main() =
-  let in_file = ref "" in
-  Arg.parse
-      [ "-in", (Arg.String (fun s -> in_file := s)),
-            " <file>      Set the XML file to read";
-      ]
-      (fun x -> raise (Arg.Bad "Unexpected argument"))
-      "
-usage: test_write [ options ]
-
-List of options:";
-  if !in_file = "" then begin
-    prerr_endline "No input file specified.";
-    exit 1
-  end;
-  parse_and_write !in_file 
-;;
-
-
-main();
-if !error_happened then exit(1);;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:35  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/08/16 23:44:21  gerd
- *     Updates because of changes of the PXP API.
- *
- * Revision 1.1  2000/07/16 17:50:39  gerd
- *     Initial revision.
- *
- *)
diff --git a/helm/DEVEL/pxp/pxp/tools/collect_files b/helm/DEVEL/pxp/pxp/tools/collect_files
deleted file mode 100755 (executable)
index d1770eb..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#! /bin/sh
-#
-# $Id$
-# ----------------------------------------------------------------------
-#
-# usage: collect_files file ...
-#
-# Prints the names of the files passed as arguments which actually
-# exist and are regular files.
-
-for x in "$@"; do
-    if [ -f "$x" ]; then
-       echo "$x"
-    fi
-done
-
-# ======================================================================
-#
-# $Log$
-# Revision 1.1  2000/11/17 09:57:35  lpadovan
-# Initial revision
-#
-# Revision 1.1  2000/07/27 21:07:26  gerd
-#      Initial revision.
-#
diff --git a/helm/DEVEL/pxp/pxp/tools/insert_variant b/helm/DEVEL/pxp/pxp/tools/insert_variant
deleted file mode 100755 (executable)
index cb592bb..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-#! /bin/sh
-# (*
-exec ocaml "$0" "$@"
-*) directory ".";;
-
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-let get_arg variant insert_line =
-  (* returns the argument of an "#insert" line *)
-  let s = ref "" in
-  for i = 8 to String.length insert_line - 1 do
-    match insert_line.[i] with
-       ' ' -> ()
-      | '*' ->
-         (* replace '*' with 'variant' *)
-         s := !s ^ variant
-      | c ->
-         s := !s ^ String.make 1 c
-  done;
-  !s
-;;
-
-
-let edit_file variant name =
-  let basename = Filename.chop_suffix name ".src" in
-  let mllname = basename ^ "_" ^ variant ^ ".mll" in
-  let chin = open_in name in
-  let chout = open_out mllname in
-  output_string chout "(* File generated by insert_variant; DO NOT EDIT! *)\n";
-  begin try
-    while true do
-      let line = input_line chin in
-      (* We do not have Str here. *)
-      if String.length line >= 8 & String.sub line 0 8 = "#insert " then begin
-       let insname = get_arg variant line in
-       (* Copy the file 'insname' to chout *)
-       let chcopy = open_in insname in
-       let n = in_channel_length chcopy in
-       let s = String.create n in
-       really_input chcopy s 0 n;
-       close_in chcopy;
-       output_string chout s;
-      end
-      else begin
-       output_string chout line;
-       output_char chout '\n';
-      end
-    done
-  with
-      End_of_file -> ()
-  end;
-  close_in chin;
-  close_out chout
-;;
-
-
-let main() =
-  let variant = ref "" in
-  let files = ref [] in
-  Arg.current := 0;          (* Because of a OCaml-3.00 bug *)
-  Arg.parse
-      [ "-variant", Arg.String (fun s -> variant := s),
-               "<name>  Set the variant (character encoding)";
-      ]
-      (fun s -> files := !files @ [s])
-      "insert_variant [ options ] file.src ...
-
-Reads the files, replaces the #insert lines by the referred files, and 
-writes the file file_variant.mll. 
-
-The #insert lines include the specified file into the source. The
-asterisk (*) is replaced by the name of the variant.
-
-Options:
-";
-  
-  if !variant = "" then 
-    failwith "No variant specified!";
-
-  List.iter 
-    (fun name -> edit_file !variant name)
-    !files
-;;
-
-
-main();;
-
-(* ======================================================================
- * History:
- * 
- * $Log$
- * Revision 1.1  2000/11/17 09:57:35  lpadovan
- * Initial revision
- *
- * Revision 1.2  2000/05/20 21:14:33  gerd
- *     Workaround for an OCaml 3.00 bug.
- *
- * Revision 1.1  2000/05/20 20:30:15  gerd
- *     Initial revision.
- *
- * 
- *)
diff --git a/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/.cvsignore b/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/.cvsignore
deleted file mode 100644 (file)
index deb5b7f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-*.cmo
-*.cmx
-*.cmi
-
diff --git a/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/Makefile b/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/Makefile
deleted file mode 100644 (file)
index 504cfe5..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#(******************************************************)
-#(*    Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>   *)
-#(*                   14/05/2000                       *)
-#(******************************************************)
-
-OCAMLC = ocamlc 
-OCAMLOPT = ocamlopt 
-OCAMLDEP = ocamldep
-OCAMLLEX = ocamllex
-OCAMLYACC = ocamlyacc
-
-all: ucs2_to_utf8
-opt: ucs2_to_utf8.opt
-
-DEPOBJS = ucs2_to_utf8.ml lexer.ml parser.ml parser.mli types.ml
-
-UCS2_TO_UTF8OBJS = types.cmo lexer.cmo parser.cmo ucs2_to_utf8.cmo
-UCS2_TO_UTF8OPTOBJS = types.cmx lexer.cmx parser.cmx ucs2_to_utf8.cmx
-
-lexer.ml:
-       $(OCAMLLEX) lexer.mll
-
-parser.ml:
-       $(OCAMLYACC) parser.mly
-
-parser.mli:
-       $(OCAMLYACC) parser.mly
-
-depend: lexer.ml parser.ml parser.mli
-       $(OCAMLDEP) $(DEPOBJS) > depend
-ucs2_to_utf8: $(UCS2_TO_UTF8OBJS)
-       $(OCAMLC) -o ucs2_to_utf8 $(UCS2_TO_UTF8OBJS)
-
-ucs2_to_utf8.opt: $(UCS2_TO_UTF8OPTOBJS)
-       $(OCAMLOPT) -o ucs2_to_utf8.opt $(UCS2_TO_UTF8OPTOBJS)
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo:
-       $(OCAMLC) -c $<
-.mli.cmi:
-       $(OCAMLC) -c $<
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o lexer.ml parser.ml parser.mli \
-       ucs2_to_utf8 ucs2_to_utf8.opt
-
-include depend
diff --git a/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/README b/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/README
deleted file mode 100644 (file)
index d02ae8c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-(******************************************************)
-(*    Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>   *)
-(*                   14/05/2000                       *)
-(******************************************************)
-
-How to compile: "make clean && make depend && make && make opt"
-
-Usage: "cat input.mll | ./ucs2_to_utf8 > output.mll"
- where in input.mll there are definitions of ucs2 regular expressions
- and in output.mll there are the same utf8 regular expressions in the
- format expected by ocamllex
-
- See input/input.mll for an example (the definitions are taken from the
- appendix B of the XML reccomendation) and input/example.mll for a
- smaller one.
diff --git a/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/lexer.mll b/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/lexer.mll
deleted file mode 100644 (file)
index dfbeb5a..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-(******************************************************)
-(*    Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>   *)
-(*                   14/05/2000                       *)
-(******************************************************)
-
-open Parser
-
-let comment_depth = ref 0;;
-
-let charint_of_lexeme l =
- String.set l 0 '0' ;
- int_of_string l
-;;
-}
-
-let digit = ['0'-'9']|['A'-'F']
-
-rule token =
- parse
-    [' ' '\t' '\n']                           { token lexbuf }
-  | "let"                                     { LET }
-  | (['a'-'z']|'_')(['a'-'z']|['A'-'Z']|'_'|['0'-'9']|'\'')*
-                                              { IDENT (Lexing.lexeme lexbuf) }
-  | '='                                       { EQ }
-  | ";;"                                      { END_OF_LET }
-  | "|"                                       { PIPE }
-  | '['                                       { LBRACKET }
-  | ']'                                       { RBRACKET }
-  | '-'                                       { RANGE }
-  | "(*"                                      { incr comment_depth ;
-                                                comment lexbuf
-                                              }
-  | "#x" digit digit digit digit              { CHAR (charint_of_lexeme (Lexing.lexeme lexbuf)) }
-  | eof                                       { EOF }
-
-and comment =
- parse
-    "(*" { incr comment_depth ; comment lexbuf }
-  | "*)" { decr comment_depth ;
-           if !comment_depth = 0 then token lexbuf else comment lexbuf
-         }
-  | _    { comment lexbuf }
diff --git a/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/parser.mly b/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/parser.mly
deleted file mode 100644 (file)
index 2fba775..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/******************************************************/
-/*    Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>   */
-/*                   14/05/2000                       */
-/******************************************************/
-
-%token <int>CHAR
-%token <string>IDENT
-%token LET
-%token EQ
-%token END_OF_LET
-%token RBRACKET
-%token PIPE
-%token LBRACKET
-%token RANGE
-%token EOF
-%start main
-%type <Types.definition list> main
-
-%%
-
-main:
-   EOF              { [] }
- | declaration main { $1::$2 }
-;
-
-declaration:
-   LET IDENT EQ regexp END_OF_LET
-      { { Types.id = $2 ; Types.rel = $4 } }
-;
-
-regexp:
-   regexptoken PIPE regexp  { $1::$3 }
- | regexptoken              { [$1] }
-;
-
-regexptoken:
-   CHAR                               { Types.Char $1 }
- | LBRACKET CHAR RANGE CHAR RBRACKET  { Types.Interval ($2,$4) }
- | IDENT                              { Types.Identifier $1 }
-;
diff --git a/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/types.ml b/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/types.ml
deleted file mode 100644 (file)
index e2da7dc..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-(******************************************************)
-(*    Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>   *)
-(*                   14/05/2000                       *)
-(******************************************************)
-
-type regexp =
-   Char of int
- | Interval of int * int      (* lower bound, upper bound *)
- | Identifier of string
- | Concat of regexp list list (* concatenation of disjunctions *)
-;;
-
-type definition = { id : string ; rel : regexp list } ;;
diff --git a/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/ucs2_to_utf8.ml b/helm/DEVEL/pxp/pxp/tools/ucs2_to_utf8/ucs2_to_utf8.ml
deleted file mode 100644 (file)
index 1512d23..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-(******************************************************)
-(*    Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>   *)
-(*                   14/05/2000                       *)
-(******************************************************)
-
-(* Surrogate Pairs are not accepted in XML files (is it true???) *)
-exception SurrogatePairs;;
-
-(* Interval (n,m) where n >m m *)
-exception InvalidInterval of int * int;;
-
-(* Given an ucs2 character code, returns it in utf8 *)
-(* (as a concatenation of characters)               *)
-let char_ucs2_to_utf8 =
- function
-    n when n >= 0xD800 && n <= 0xDFFF -> raise SurrogatePairs
-  | n when n <= 0x007F -> Types.Char n
-  | n when n <= 0x07FF ->
-     Types.Concat
-      [[Types.Char (n lsr  6 land 0b00011111 lor 0b11000000)] ;
-       [Types.Char (n        land 0b00111111 lor 0b10000000)]]
-  | n ->
-     Types.Concat
-      [[Types.Char (n lsr 12 land 0b00001111 lor 0b11100000)] ;
-       [Types.Char (n lsr  6 land 0b00111111 lor 0b10000000)] ;
-       [Types.Char (n        land 0b00111111 lor 0b10000000)]]
-;;
-
-(*CSC: Two functions for debugging pourposes only
-
-let char_ucs2_to_utf8 =
- function
-    n when n >= 0xD800 && n <= 0xDFFF -> assert false
-  | n when n <= 0x007F -> [[n]]
-  | n when n <= 0x07FF ->
-     [[(n lsr  6 land 0b00011111 lor 0b11000000)] ;
-      [(n        land 0b00111111 lor 0b10000000)]]
-  | n ->
-     [[(n lsr 12 land 0b00001111 lor 0b11100000)] ;
-      [(n lsr  6 land 0b00111111 lor 0b10000000)] ;
-      [(n        land 0b00111111 lor 0b10000000)]]
-;;
-
-let rec bprint =
- function
-    0 -> ""
-  | n -> bprint (n / 2) ^ string_of_int (n mod 2)
-;;
-*)
-
-(* A few useful functions *)
-let rec mklist e =
- function
-    0 -> []
-  | n -> e::(mklist e (n - 1))
-;;
-
-let sup =
- let t = Types.Char 0b10111111 in
-  function
-     1 -> t
-   | n -> Types.Concat (mklist [t] n)
-;;
-
-let rec inf =
- let b = Types.Char 0b10000000 in
-  function
-     1 -> [[b]]
-   | n -> mklist [b] n
-;;
-
-let mysucc =
- function
-    [Types.Char n] -> n + 1
-  | _ -> assert false
-;;
-
-let mypred =
- function
-    [Types.Char n] -> n - 1
-  | _ -> assert false
-;;
-
-(* Given two utf8-encoded extremes of an interval character code      *)
-(* whose 'length' is the same, it returns the utf8 regular expression *)
-(* matching all the characters in the interval                        *)
-let rec same_length_ucs2_to_utf8 =
- let module T = Types in
-  function
-     (T.Char n, T.Char m) when n = m -> [T.Char n]
-   | (T.Char n, T.Char m) -> [T.Interval (n,m)]
-   | (T.Concat [hen ; [tln]], T.Concat [hem ; [tlm]]) when hen = hem ->
-      [T.Concat [hen ; same_length_ucs2_to_utf8 (tln,tlm)]]
-   | (T.Concat [hen ; [tln]], T.Concat ([hem ; [tlm]] as e2)) ->
-      (T.Concat [hen ; same_length_ucs2_to_utf8 (tln,sup 1)]) ::
-      (let shen = mysucc hen
-       and phem = mypred hem in
-       let succhen = [T.Char shen] in
-        if succhen = hem then
-         same_length_ucs2_to_utf8 (T.Concat (succhen::(inf 1)), T.Concat e2)
-        else
-         (T.Concat [[T.Interval (shen, phem)] ;
-          [T.Interval (0b10000000,0b10111111)]])::
-           same_length_ucs2_to_utf8 (T.Concat (hem::(inf 1)), T.Concat e2)
-      )
-    (*same_length_ucs2_to_utf8 (T.Concat ((mysucc hen)::(inf 1)), T.Concat e2)*)
-   | (T.Concat (hen::tln), T.Concat (hem::tlm)) when hen = hem ->
-      [T.Concat [hen ; same_length_ucs2_to_utf8 (T.Concat tln, T.Concat tlm)]]
-   | (T.Concat (hen::tln), T.Concat ((hem::tlm) as e2)) ->
-      let n = List.length tln in
-       (T.Concat
-        [hen ; same_length_ucs2_to_utf8 (T.Concat tln,sup n)]) ::
-         (let shen = mysucc hen
-          and phem = mypred hem in
-          let succhen = [T.Char shen] in
-           if succhen = hem then
-            same_length_ucs2_to_utf8 (T.Concat (succhen::(inf n)), T.Concat e2)
-           else
-            (T.Concat [[T.Interval (shen, phem)] ;
-             [T.Interval (0b10000000,0b10111111)] ;
-             [T.Interval (0b10000000,0b10111111)]]
-            )::
-             same_length_ucs2_to_utf8 (T.Concat (hem::(inf n)), T.Concat e2)
-       )
-     (*same_length_ucs2_to_utf8 (T.Concat ((mysucc hen)::(inf n)),T.Concat e2)*)
-   | _ -> assert false
-;;
-
-(* Given an interval of ucs2 characters, splits *)
-(* the list in subintervals whose extremes has  *)
-(* the same utf8 encoding length and, for each  *)
-(* extreme, calls same_length_ucs2_to_utf8      *)
-let rec seq_ucs2_to_utf8 =
- function
-    (n,_) when n >= 0xD800 && n <= 0xDFFF -> raise SurrogatePairs
-  | (_,n) when n >= 0xD800 && n <= 0xDFFF -> raise SurrogatePairs
-  | (n,m) when n > m -> raise (InvalidInterval (n,m))
-  | (n,m) when n = m -> [char_ucs2_to_utf8 n]
-  | (n,m) when n <= 0x07F && m > 0x07F ->
-      (seq_ucs2_to_utf8 (n,0x07F)) @ (seq_ucs2_to_utf8 (0x080,m))
-  | (n,m) when n <= 0x07FF && m > 0x07FF ->
-      (seq_ucs2_to_utf8 (n,0x07FF)) @ (seq_ucs2_to_utf8 (0x0800,m))
-  | (n,m) ->
-      let utf8n = char_ucs2_to_utf8 n
-      and utf8m = char_ucs2_to_utf8 m in
-       same_length_ucs2_to_utf8 (utf8n,utf8m)
-;;
-
-(* Given an ucs2 regual expression, returns  *)
-(* the corresponding utf8 regular expression *)
-let ucs2_to_utf8 { Types.id = id ; Types.rel = rel } =
- let rec aux re l2 =
-  match re with
-     Types.Char i -> char_ucs2_to_utf8 i :: l2
-   | Types.Interval (l,u) -> seq_ucs2_to_utf8 (l,u) @ l2
-   | Types.Identifier _ as i -> i :: l2
-   | Types.Concat rell ->
-      let foo rel = List.fold_right aux rel [] in
-       Types.Concat (List.map foo rell) :: l2
- in
-  { Types.id = id ; Types.rel = List.fold_right aux rel [] }
-;;
-
-(* The function actually used to produce the output *)
-let output = print_string ;;
-
-(* padded_string_of_int i returns the string representing the        *)
-(* integer i (i < 256) using exactly 3 digits (example: 13 -> "013") *)
-let padded_string_of_int i =
- if i < 10 then
-  "00" ^ string_of_int i
- else if i < 100 then
-  "0" ^ string_of_int i
- else
-  string_of_int i
-;;
-
-(* Two functions useful to print a definition *)
-let rec print_disjunction ?(first = true) =
- function
-    [] -> ()
-  | he::tl ->
-     if not first then output " | " ;
-     print_re he ;
-     print_disjunction ~first:false tl
-and print_re =
- function
-    Types.Char i -> output ("'\\" ^ padded_string_of_int i ^ "'")
-  | Types.Interval (l,u) ->
-     output ("['\\" ^ padded_string_of_int l ^ "'-'\\" ^
-      padded_string_of_int u ^ "']")
-  | Types.Identifier i -> output i
-  | Types.Concat rell ->
-     let foo rel =
-      if List.length rel > 1 then
-       (output "(" ; print_disjunction rel ; output ")")
-      else
-       print_disjunction rel
-     in
-      List.iter foo rell
-;;
-
-(* print_definition prints a definition in the format expected by ocamllex *)
-let print_definition { Types.id = id ; Types.rel = rel } =
- output ("let " ^ id ^ " =\n   ") ;
- print_disjunction rel ;
- output "\n\n"
-;;
-
-(* main *)
-let _ =
- let lexbuf = Lexing.from_channel stdin in
-  let ucs2_result = Parser.main Lexer.token lexbuf in
-   List.iter print_definition (List.map ucs2_to_utf8 ucs2_result)
-;;
diff --git a/helm/EXPORT/cshrc b/helm/EXPORT/cshrc
deleted file mode 100755 (executable)
index e5519d7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-setenv PATH /home/projects/helm/EXPORT/INSTALLED_V7/usr/local/bin:$PATH
-
-# Per uris_of_filenames.pl
-setenv PATH /home/projects/helm/V7/interface:$PATH
diff --git a/helm/EXPORT/export_Bordeaux_EXCEPTIONS/Makefile b/helm/EXPORT/export_Bordeaux_EXCEPTIONS/Makefile
deleted file mode 100644 (file)
index 484f097..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-all: objects theories
-
-objects:
-       coqc -R EXCEPTIONS Bordeaux.EXCEPTIONS EXCEPTIONS/*.v
-       echo "Load Verbose prova_Bordeaux_EXCEPTIONS." | coqtop.byte -R EXCEPTIONS Bordeaux.EXCEPTIONS
-
-theories:
-       ./exporttheories.sh
-
-clean:
-       rm -f *.vo EXCEPTIONS/*.vo
diff --git a/helm/EXPORT/export_Bordeaux_EXCEPTIONS/exporttheories.sh b/helm/EXPORT/export_Bordeaux_EXCEPTIONS/exporttheories.sh
deleted file mode 100755 (executable)
index 5328273..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-echo "Exporting theory $1";
-
-for i in EXCEPTIONS/*.v
- do
-  basename=$(basename $i | sed s/\\.v//)
-  cat $i | ../mktheory.pl "Bordeaux/EXCEPTIONS/$basename" > \
-   examples/Bordeaux/EXCEPTIONS/$basename.theory.xml
- done
diff --git a/helm/EXPORT/export_Bordeaux_EXCEPTIONS/prova_Bordeaux_EXCEPTIONS.v b/helm/EXPORT/export_Bordeaux_EXCEPTIONS/prova_Bordeaux_EXCEPTIONS.v
deleted file mode 100644 (file)
index 07c14ef..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Require Export Xml.
-
-Require leavemult.
-
-Print XML Module Disk "examples" leavemult.
diff --git a/helm/EXPORT/export_Marseille_CCS/Makefile b/helm/EXPORT/export_Marseille_CCS/Makefile
deleted file mode 100644 (file)
index 7c30db4..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-all: objects theories
-
-objects:
-       coqc -R CCS Marseille.CCS CCS/*.v
-       echo "Load Verbose prova_Marseille_CCS." | coqtop.byte -R CCS Marseille.CCS
-
-theories:
-       ./exporttheories.sh
-
-clean:
-       rm -f *.vo CCS/*.vo
diff --git a/helm/EXPORT/export_Marseille_CCS/exporttheories.sh b/helm/EXPORT/export_Marseille_CCS/exporttheories.sh
deleted file mode 100755 (executable)
index 24fce6c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-echo "Exporting theory $1";
-
-for i in CCS/*.v
- do
-  basename=$(basename $i | sed s/\\.v//)
-  cat $i | ../mktheory.pl "Marseille/CCS/$basename" > \
-   examples/Marseille/CCS/$basename.theory.xml
- done
diff --git a/helm/EXPORT/export_Marseille_CCS/prova_Marseille_CCS.v b/helm/EXPORT/export_Marseille_CCS/prova_Marseille_CCS.v
deleted file mode 100644 (file)
index e440667..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Require Export Xml.
-
-Require Trans_Sys.
-
-Print XML Module Disk "examples" Trans_Sys.
diff --git a/helm/EXPORT/export_Nijmegen_Rem/Makefile b/helm/EXPORT/export_Nijmegen_Rem/Makefile
deleted file mode 100644 (file)
index 3421cc0..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-all: objects theories
-
-objects:
-       coqc -R Rem Nijmegen.Rem Rem/*.v
-       echo "Load Verbose prova_Nijmegen_Rem." | coqtop.byte -R Rem Nijmegen.Rem
-
-theories:
-       ./exporttheories.sh
-
-clean:
-       rm -f *.vo Rem/*.vo
diff --git a/helm/EXPORT/export_Nijmegen_Rem/exporttheories.sh b/helm/EXPORT/export_Nijmegen_Rem/exporttheories.sh
deleted file mode 100755 (executable)
index 8e64b90..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-echo "Exporting theory $1";
-
-for i in Rem/*.v
- do
-  basename=$(basename $i | sed s/\\.v//)
-  cat $i | ../mktheory.pl "Nijmegen/Rem/$basename" > \
-   examples/Nijmegen/Rem/$basename.theory.xml
- done
diff --git a/helm/EXPORT/export_Nijmegen_Rem/prova_Nijmegen_Rem.v b/helm/EXPORT/export_Nijmegen_Rem/prova_Nijmegen_Rem.v
deleted file mode 100644 (file)
index 04244aa..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Require Export Xml.
-
-Require Rem.
-
-Print XML Module Disk "examples" Rem.
diff --git a/helm/EXPORT/export_Paris_ZF/Makefile b/helm/EXPORT/export_Paris_ZF/Makefile
deleted file mode 100644 (file)
index ee2f95e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-all: objects theories
-
-objects:
-       coqc -R ZF/src Paris.ZF ZF/src/nothing.v
-       coqc -R ZF/src Paris.ZF ZF/src/useful.v
-       coqc -R ZF/src Paris.ZF ZF/src/ZFbasis.v
-       coqc -R ZF/src Paris.ZF ZF/src/axs_extensionnalite.v
-       coqc -R ZF/src Paris.ZF ZF/src/axs_paire.v
-       coqc -R ZF/src Paris.ZF ZF/src/axs_reunion.v
-       coqc -R ZF/src Paris.ZF ZF/src/axs_parties.v
-       coqc -R ZF/src Paris.ZF ZF/src/axs_comprehension.v
-       coqc -R ZF/src Paris.ZF ZF/src/axs_remplacement.v
-       coqc -R ZF/src Paris.ZF ZF/src/couples.v
-       coqc -R ZF/src Paris.ZF ZF/src/applications.v
-       coqc -R ZF/src Paris.ZF ZF/src/axs_choice.v
-       coqc -R ZF/src Paris.ZF ZF/src/axs_fundation.v
-       coqc -R ZF/src Paris.ZF ZF/src/ZFrelations.v
-       coqc -R ZF/src Paris.ZF ZF/src/MSetBasis.v
-       echo "Load Verbose prova_Paris_ZF." | coqtop.byte -R ZF/src Paris.ZF
-
-theories:
-       ./exporttheories.sh
-
-clean:
-       rm -f *.vo ZF/src/*.vo
diff --git a/helm/EXPORT/export_Paris_ZF/exporttheories.sh b/helm/EXPORT/export_Paris_ZF/exporttheories.sh
deleted file mode 100755 (executable)
index 3a0db3d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-echo "Exporting theory $1";
-
-for i in ZF/src/*.v
- do
-  basename=$(basename $i | sed s/\\.v//)
-  cat $i | ../mktheory.pl "Paris/ZF/$basename" > \
-   examples/Paris/ZF/$basename.theory.xml
- done
diff --git a/helm/EXPORT/export_Paris_ZF/prova_Paris_ZF.v b/helm/EXPORT/export_Paris_ZF/prova_Paris_ZF.v
deleted file mode 100644 (file)
index 03f5942..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-Require Export Xml.
-
-Require nothing.
-Require useful.
-Require ZFbasis.
-Require axs_extensionnalite.
-Require axs_paire .
-Require axs_reunion.
-Require axs_parties.
-Require axs_comprehension.
-Require axs_remplacement.
-Require couples.
-Require applications .
-Require axs_choice.
-Require axs_fundation.
-Require ZFrelations.
-Require MSetBasis .
-
-Print XML Module Disk "examples" nothing.
-Print XML Module Disk "examples" useful.
-Print XML Module Disk "examples" ZFbasis.
-Print XML Module Disk "examples" axs_extensionnalite.
-Print XML Module Disk "examples" axs_paire .
-Print XML Module Disk "examples" axs_reunion.
-Print XML Module Disk "examples" axs_parties.
-Print XML Module Disk "examples" axs_comprehension.
-Print XML Module Disk "examples" axs_remplacement.
-Print XML Module Disk "examples" couples.
-Print XML Module Disk "examples" applications .
-Print XML Module Disk "examples" axs_choice.
-Print XML Module Disk "examples" axs_fundation.
-Print XML Module Disk "examples" ZFrelations.
-Print XML Module Disk "examples" MSetBasis .
diff --git a/helm/EXPORT/export_Rocq_CHECKER/Makefile b/helm/EXPORT/export_Rocq_CHECKER/Makefile
deleted file mode 100644 (file)
index 76fe930..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-all: objects theories
-
-objects:
-       coqc -R CHECKER Rocq.CHECKER CHECKER/Functions.v CHECKER/Checker.v
-       echo "Load Verbose prova_Rocq_CHECKER." | coqtop.byte -R CHECKER Rocq.CHECKER
-
-theories:
-       ./exporttheories.sh
-
-clean:
-       rm -f *.vo CHECKER/*.vo
diff --git a/helm/EXPORT/export_Rocq_CHECKER/exporttheories.sh b/helm/EXPORT/export_Rocq_CHECKER/exporttheories.sh
deleted file mode 100755 (executable)
index e015204..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-echo "Exporting theory $1";
-
-for i in CHECKER/*.v
- do
-  basename=$(basename $i | sed s/\\.v//)
-  cat $i | ../mktheory.pl "Rocq/CHECKER/$basename" > \
-   examples/Rocq/CHECKER/$basename.theory.xml
- done
diff --git a/helm/EXPORT/export_Rocq_CHECKER/prova_Rocq_CHECKER.v b/helm/EXPORT/export_Rocq_CHECKER/prova_Rocq_CHECKER.v
deleted file mode 100644 (file)
index 1905884..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Require Export Xml.
-
-Require Functions.
-Require Checker.
-
-Print XML Module Disk "examples" Functions.
-Print XML Module Disk "examples" Checker.
diff --git a/helm/EXPORT/export_Rocq_HIGMAN/Makefile b/helm/EXPORT/export_Rocq_HIGMAN/Makefile
deleted file mode 100644 (file)
index f5161ba..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-all: objects theories
-
-objects:
-       coqc -R HIGMAN Rocq.HIGMAN HIGMAN/*.v
-       echo "Load Verbose prova_Rocq_HIGMAN." | coqtop.byte -R HIGMAN Rocq.HIGMAN
-
-theories:
-       ./exporttheories.sh
-
-clean:
-       rm -f *.vo HIGMAN/*.vo
diff --git a/helm/EXPORT/export_Rocq_HIGMAN/exporttheories.sh b/helm/EXPORT/export_Rocq_HIGMAN/exporttheories.sh
deleted file mode 100755 (executable)
index d192816..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-echo "Exporting theory $1";
-
-for i in HIGMAN/*.v
- do
-  basename=$(basename $i | sed s/\\.v//)
-  cat $i | ../mktheory.pl "Rocq/HIGMAN/$basename" > \
-   examples/Rocq/HIGMAN/$basename.theory.xml
- done
diff --git a/helm/EXPORT/export_Rocq_HIGMAN/prova_Rocq_HIGMAN.v b/helm/EXPORT/export_Rocq_HIGMAN/prova_Rocq_HIGMAN.v
deleted file mode 100644 (file)
index 9abc11a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Require Export Xml.
-
-Require Higman.
-
-Print XML Module Disk "examples" Higman.
diff --git a/helm/EXPORT/export_Rocq_SHUFFLE/Makefile b/helm/EXPORT/export_Rocq_SHUFFLE/Makefile
deleted file mode 100644 (file)
index ba2ab57..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-all: objects theories
-
-objects:
-       coqc -R SHUFFLE Rocq.SHUFFLE SHUFFLE/Words.v
-       coqc -R SHUFFLE Rocq.SHUFFLE SHUFFLE/Alternate.v
-       coqc -R SHUFFLE Rocq.SHUFFLE SHUFFLE/Opposite.v
-       coqc -R SHUFFLE Rocq.SHUFFLE SHUFFLE/Paired.v
-       coqc -R SHUFFLE Rocq.SHUFFLE SHUFFLE/Shuffle.v
-       coqc -R SHUFFLE Rocq.SHUFFLE SHUFFLE/Gilbreath.v
-       echo "Load Verbose prova_Rocq_SHUFFLE." | coqtop.byte -R SHUFFLE Rocq.SHUFFLE
-
-theories:
-       ./exporttheories.sh
-
-clean:
-       rm -f *.vo SHUFFLE/*.vo
diff --git a/helm/EXPORT/export_Rocq_SHUFFLE/exporttheories.sh b/helm/EXPORT/export_Rocq_SHUFFLE/exporttheories.sh
deleted file mode 100755 (executable)
index acd865a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-echo "Exporting theory $1";
-
-for i in SHUFFLE/*.v
- do
-  basename=$(basename $i | sed s/\\.v//)
-  cat $i | ../mktheory.pl "Rocq/SHUFFLE/$basename" > \
-   examples/Rocq/SHUFFLE/$basename.theory.xml
- done
diff --git a/helm/EXPORT/export_Rocq_SHUFFLE/prova_Rocq_SHUFFLE.v b/helm/EXPORT/export_Rocq_SHUFFLE/prova_Rocq_SHUFFLE.v
deleted file mode 100644 (file)
index 1b17a93..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Require Export Xml.
-
-Require Alternate.
-Require Gilbreath.
-Require Opposite.
-Require Paired.
-Require Shuffle.
-Require Words.
-
-
-Print XML Module Disk "examples" Alternate.
-Print XML Module Disk "examples" Gilbreath.
-Print XML Module Disk "examples" Opposite.
-Print XML Module Disk "examples" Paired.
-Print XML Module Disk "examples" Shuffle.
-Print XML Module Disk "examples" Words.
diff --git a/helm/EXPORT/export_Utrecht_Ramsey/Makefile b/helm/EXPORT/export_Utrecht_Ramsey/Makefile
deleted file mode 100644 (file)
index 576b198..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-all: objects theories
-
-objects:
-       coqc -R Ramsey Utrecht.Ramsey Ramsey/*.v
-       echo "Load Verbose prova_Utrecht_Ramsey." | coqtop.byte -R Ramsey Utrecht.Ramsey
-
-theories:
-       ./exporttheories.sh
-
-clean:
-       rm -f *.vo Ramsey/*.vo
diff --git a/helm/EXPORT/export_Utrecht_Ramsey/exporttheories.sh b/helm/EXPORT/export_Utrecht_Ramsey/exporttheories.sh
deleted file mode 100755 (executable)
index b2dd5f8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-echo "Exporting theory $1";
-
-for i in Ramsey/*.v
- do
-  basename=$(basename $i | sed s/\\.v//)
-  cat $i | ../mktheory.pl "Utrecht/Ramsey/$basename" > \
-   examples/Utrecht/Ramsey/$basename.theory.xml
- done
diff --git a/helm/EXPORT/export_Utrecht_Ramsey/prova_Utrecht_Ramsey.v b/helm/EXPORT/export_Utrecht_Ramsey/prova_Utrecht_Ramsey.v
deleted file mode 100644 (file)
index aa0500f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Require Export Xml.
-
-Require Ramsey.
-
-Print XML Module Disk "examples" Ramsey.
diff --git a/helm/EXPORT/exportcoq/Makefile b/helm/EXPORT/exportcoq/Makefile
deleted file mode 100644 (file)
index 5026ec5..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-all: objects theories
-
-objects:
-       echo "Load Verbose provacoq." | coqtop.byte
-
-theories:
-       ./exporttheories.sh
diff --git a/helm/EXPORT/exportcoq/export_contrib_theory.sh b/helm/EXPORT/exportcoq/export_contrib_theory.sh
deleted file mode 100755 (executable)
index afc1918..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-echo "Exporting theory $1";
-
-for i in ../V7/contrib/$1/*.v
- do
-  basename=$(basename $i | sed s/\\.v//)
-  cat $i | ../mktheory.pl "Coq/$1/$basename" 0 > \
-   examples/Coq/$1/$basename.theory.xml
-#  cat $i | ../mktheory.pl "Coq/$1/$basename" 1 > \
-#   examples/Coq/$1/"$basename"_with_types.theory.xml
- done
diff --git a/helm/EXPORT/exportcoq/export_theory_theory.sh b/helm/EXPORT/exportcoq/export_theory_theory.sh
deleted file mode 100755 (executable)
index 1a23583..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-echo "Exporting theory $1";
-
-for i in ../V7/theories/$1/*.v
- do
-  basename=$(basename $i | sed s/\\.v//)
-  cat $i | ../mktheory.pl "Coq/$1/$basename" 0 > \
-   examples/Coq/$1/$basename.theory.xml
-#  cat $i | ../mktheory.pl "Coq/$1/$basename" 1 > \
-#   examples/Coq/$1/"$basename"_with_types.theory.xml
- done
diff --git a/helm/EXPORT/exportcoq/exporttheories.sh b/helm/EXPORT/exportcoq/exporttheories.sh
deleted file mode 100755 (executable)
index 5fdc473..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-./export_theory_theory.sh Arith
-./export_theory_theory.sh Bool
-./export_theory_theory.sh Init
-./export_theory_theory.sh Lists
-./export_theory_theory.sh Logic
-./export_theory_theory.sh Reals
-./export_theory_theory.sh Relations
-./export_theory_theory.sh Sets
-#./export_theory_theory.sh SORTING
-#./export_theory_theory.sh TREES
-./export_theory_theory.sh Wellfounded
-./export_theory_theory.sh Zarith
-
-./export_contrib_theory.sh omega
-./export_contrib_theory.sh ring
diff --git a/helm/EXPORT/exportcoq/provacoq.v b/helm/EXPORT/exportcoq/provacoq.v
deleted file mode 100644 (file)
index 99b52eb..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-Load Verbose provacoqArith.
-Load Verbose provacoqBool.
-Load Verbose provacoqInit.
-Load Verbose provacoqLists.
-Load Verbose provacoqLogic.
-Load Verbose provacoqReals.
-Load Verbose provacoqRelations.
-Load Verbose provacoqSets.
-(*Load Verbose provacoqSorting.*)
-(*Load Verbose provacoqTrees.*)
-Load Verbose provacoqZArith.
-
-Load Verbose provacoqcontribRing.
-Load Verbose provacoqcontribOmega.
diff --git a/helm/EXPORT/exportcoq/provacoqArith.v b/helm/EXPORT/exportcoq/provacoqArith.v
deleted file mode 100644 (file)
index 1fdc4f9..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-Require Export Xml.
-
-Require Arith.
-Require Compare.
-Require Compare_dec.
-(*Require Div.*)
-Require Div2.
-Require EqNat.
-Require Euclid_def.
-Require Euclid_proof.
-Require Peano_dec.
-
-Print XML Module Disk "examples" Arith.
-Print XML Module Disk "examples" Between.
-Print XML Module Disk "examples" Compare.
-Print XML Module Disk "examples" Compare_dec.
-(*Print XML Module Disk "examples" Div.*)
-Print XML Module Disk "examples" Div2.
-Print XML Module Disk "examples" EqNat.
-Print XML Module Disk "examples" Euclid_def.
-Print XML Module Disk "examples" Euclid_proof.
-Print XML Module Disk "examples" Even.
-Print XML Module Disk "examples" Gt.
-Print XML Module Disk "examples" Le.
-Print XML Module Disk "examples" Lt.
-Print XML Module Disk "examples" Min.
-Print XML Module Disk "examples" Minus.
-Print XML Module Disk "examples" Mult.
-Print XML Module Disk "examples" Peano_dec.
-Print XML Module Disk "examples" Plus.
-Print XML Module Disk "examples" Wf_nat.
diff --git a/helm/EXPORT/exportcoq/provacoqBool.v b/helm/EXPORT/exportcoq/provacoqBool.v
deleted file mode 100644 (file)
index a898237..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Require Export Xml.
-
-Require Bool.
-Require DecBool.
-Require IfProp.
-Require Sumbool.
-Require Zerob.
-
-Print XML Module Disk "examples" Bool.
-Print XML Module Disk "examples" DecBool.
-Print XML Module Disk "examples" IfProp.
-Print XML Module Disk "examples" Sumbool.
-Print XML Module Disk "examples" Zerob.
diff --git a/helm/EXPORT/exportcoq/provacoqInit.v b/helm/EXPORT/exportcoq/provacoqInit.v
deleted file mode 100644 (file)
index d40ea3e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Require Export Xml.
-
-Print XML Module Disk "examples" Datatypes.
-Print XML Module Disk "examples" DatatypesSyntax.
-Print XML Module Disk "examples" Logic.
-Print XML Module Disk "examples" LogicSyntax.
-Print XML Module Disk "examples" Specif.
-Print XML Module Disk "examples" SpecifSyntax.
-Print XML Module Disk "examples" Peano.
-Print XML Module Disk "examples" Wf.
-Print XML Module Disk "examples" Prelude.
-Print XML Module Disk "examples" Logic_Type.
-Print XML Module Disk "examples" Logic_TypeSyntax.
diff --git a/helm/EXPORT/exportcoq/provacoqLists.v b/helm/EXPORT/exportcoq/provacoqLists.v
deleted file mode 100644 (file)
index 91b74ef..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-Require Export Xml.
-
-Require List.
-Require ListSet.
-Require PolyList.
-(*Require PolyListSyntax.*)
-Require Streams.
-Require TheoryList.
-
-Print XML Module Disk "examples" List.
-Print XML Module Disk "examples" ListSet.
-Print XML Module Disk "examples" PolyList.
-(*Print XML Module Disk "examples" PolyListSyntax.*)
-Print XML Module Disk "examples" Streams.
-Print XML Module Disk "examples" TheoryList.
diff --git a/helm/EXPORT/exportcoq/provacoqLogic.v b/helm/EXPORT/exportcoq/provacoqLogic.v
deleted file mode 100644 (file)
index e2296a5..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Export Xml.
-
-Require Classical.
-Require Classical_Pred_Set.
-Require Classical_Pred_Type.
-Require Classical_Prop.
-Require Classical_Type.
-Require Eqdep.
-Require Eqdep_dec.
-
-Print XML Module Disk "examples" Classical.
-Print XML Module Disk "examples" Classical_Pred_Set.
-Print XML Module Disk "examples" Classical_Pred_Type.
-Print XML Module Disk "examples" Classical_Prop.
-Print XML Module Disk "examples" Classical_Type.
-Print XML Module Disk "examples" Eqdep.
-Print XML Module Disk "examples" Eqdep_dec.
diff --git a/helm/EXPORT/exportcoq/provacoqReals.v b/helm/EXPORT/exportcoq/provacoqReals.v
deleted file mode 100644 (file)
index 445f9f9..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-Require Export Xml.
-
-Require R_Ifp.
-Require Raxioms.
-Require Rdefinitions.
-Require Rbase.
-Require Rbasic_fun.
-Require Rderiv.
-Require Reals.
-Require Rfunctions.
-Require Rlimit.
-Require TypeSyntax.
-
-Print XML Module Disk "examples" R_Ifp.
-Print XML Module Disk "examples" Raxioms.
-Print XML Module Disk "examples" Rdefinitions.
-Print XML Module Disk "examples" Rbase.
-Print XML Module Disk "examples" Rbasic_fun.
-Print XML Module Disk "examples" Rderiv.
-Print XML Module Disk "examples" Reals.
-Print XML Module Disk "examples" Rfunctions.
-Print XML Module Disk "examples" Rlimit.
-Print XML Module Disk "examples" TypeSyntax.
diff --git a/helm/EXPORT/exportcoq/provacoqRelations.v b/helm/EXPORT/exportcoq/provacoqRelations.v
deleted file mode 100644 (file)
index c588b30..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-Require Export Xml.
-
-Require Newman.
-Require Operators_Properties.
-Require Relation_Definitions.
-Require Relation_Operators.
-Require Relations.
-Require Rstar.
-(*Require Disjoint_Union.*)
-(*Require Inclusion.*)
-(*Require Inverse_Image.*)
-(*Require Lexicographic_Exponentiation.*)
-(*Require Lexicographic_Product.*)
-(*Require Transitive_Closure.*)
-(*Require Union.*)
-(*Require Well_Ordering.*)
-(*Require Wellfounded.*)
-
-Print XML Module Disk "examples" Newman.
-Print XML Module Disk "examples" Operators_Properties.
-Print XML Module Disk "examples" Relation_Definitions.
-Print XML Module Disk "examples" Relation_Operators.
-Print XML Module Disk "examples" Relations.
-Print XML Module Disk "examples" Rstar.
-(*Print XML Module Disk "examples/WELLFOUNDED" Disjoint_Union.*)
-(*Print XML Module Disk "examples/WELLFOUNDED" Inclusion.*)
-(*Print XML Module Disk "examples/WELLFOUNDED" Inverse_Image.*)
-(*Print XML Module Disk "examples/WELLFOUNDED" Lexicographic_Exponentiation.*)
-(*Print XML Module Disk "examples/WELLFOUNDED" Lexicographic_Product.*)
-(*Print XML Module Disk "examples/WELLFOUNDED" Transitive_Closure.*)
-(*Print XML Module Disk "examples/WELLFOUNDED" Union.*)
-(*Print XML Module Disk "examples/WELLFOUNDED" Well_Ordering.*)
-(*Print XML Module Disk "examples/WELLFOUNDED" Wellfounded.*)
diff --git a/helm/EXPORT/exportcoq/provacoqSets.v b/helm/EXPORT/exportcoq/provacoqSets.v
deleted file mode 100644 (file)
index 9502861..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-Require Export Xml.
-
-Require Classical_sets.
-Require Constructive_sets.
-Require Cpo.
-Require Ensembles.
-Require Finite_sets.
-Require Finite_sets_facts.
-Require Image.
-Require Infinite_sets.
-Require Integers.
-Require Multiset.
-Require Partial_Order.
-Require Permut.
-(*Require CSCPermut.*)
-Require Powerset.
-Require Powerset_Classical_facts.
-Require Powerset_facts.
-Require Relations_1.
-Require Relations_1_facts.
-Require Relations_2.
-Require Relations_2_facts.
-Require Relations_3.
-Require Relations_3_facts.
-Require Uniset.
-
-Print XML Module Disk "examples" Classical_sets.
-Print XML Module Disk "examples" Constructive_sets.
-Print XML Module Disk "examples" Cpo.
-Print XML Module Disk "examples" Ensembles.
-Print XML Module Disk "examples" Finite_sets.
-Print XML Module Disk "examples" Finite_sets_facts.
-Print XML Module Disk "examples" Image.
-Print XML Module Disk "examples" Infinite_sets.
-Print XML Module Disk "examples" Integers.
-Print XML Module Disk "examples" Multiset.
-Print XML Module Disk "examples" Partial_Order.
-Print XML Module Disk "examples" Permut.
-Print XML Module Disk "examples" Powerset.
-Print XML Module Disk "examples" Powerset_Classical_facts.
-Print XML Module Disk "examples" Powerset_facts.
-Print XML Module Disk "examples" Relations_1.
-Print XML Module Disk "examples" Relations_1_facts.
-Print XML Module Disk "examples" Relations_2.
-Print XML Module Disk "examples" Relations_2_facts.
-Print XML Module Disk "examples" Relations_3.
-Print XML Module Disk "examples" Relations_3_facts.
-Print XML Module Disk "examples" Uniset.
diff --git a/helm/EXPORT/exportcoq/provacoqSorting.v b/helm/EXPORT/exportcoq/provacoqSorting.v
deleted file mode 100644 (file)
index ff940fd..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-(*
-Require Export Xml.
-
-Require Generic.
-Require Heap.
-Require Permutation.
-Require Sorting.
-
-Print XML Module Disk "examples" Generic.
-Print XML Module Disk "examples" Heap.
-Print XML Module Disk "examples" Permutation.
-Print XML Module Disk "examples" Sorting.
-*)
diff --git a/helm/EXPORT/exportcoq/provacoqTrees.v b/helm/EXPORT/exportcoq/provacoqTrees.v
deleted file mode 100644 (file)
index a90b041..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-(*
-Require Export Xml.
-
-Require Btree.
-
-Print XML Module Disk "examples" Btree.
-*)
diff --git a/helm/EXPORT/exportcoq/provacoqZArith.v b/helm/EXPORT/exportcoq/provacoqZArith.v
deleted file mode 100644 (file)
index ff43bbd..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Require Export Xml.
-
-Require Wf_Z.
-Require ZArith.
-Require ZArith_dec.
-Require Zmisc.
-Require Zsyntax.
-Require auxiliary.
-Require fast_integer.
-Require zarith_aux.
-
-Print XML Module Disk "examples" Wf_Z.
-Print XML Module Disk "examples" ZArith.
-Print XML Module Disk "examples" ZArith_dec.
-Print XML Module Disk "examples" Zmisc.
-Print XML Module Disk "examples" Zsyntax.
-Print XML Module Disk "examples" auxiliary.
-Print XML Module Disk "examples" fast_integer.
-Print XML Module Disk "examples" zarith_aux.
diff --git a/helm/EXPORT/exportcoq/provacoqcontribOmega.v b/helm/EXPORT/exportcoq/provacoqcontribOmega.v
deleted file mode 100644 (file)
index 04d2994..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Require Export Xml.
-
-Require Omega.
-Require Zlogarithm.
-Require OmegaSyntax.
-Require Zpower.
-
-Print XML Module Disk "examples" Omega.
-Print XML Module Disk "examples" Zlogarithm.
-Print XML Module Disk "examples" OmegaSyntax.
-Print XML Module Disk "examples" Zpower.
diff --git a/helm/EXPORT/exportcoq/provacoqcontribRing.v b/helm/EXPORT/exportcoq/provacoqcontribRing.v
deleted file mode 100644 (file)
index bfc2633..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Export Xml.
-
-Require ArithRing.
-Require Quote.
-Require Ring.
-Require Ring_abstract.
-Require Ring_normalize.
-Require Ring_theory.
-Require ZArithRing.
-
-Print XML Module Disk "examples" ArithRing.
-Print XML Module Disk "examples" Quote.
-Print XML Module Disk "examples" Ring.
-Print XML Module Disk "examples" Ring_abstract.
-Print XML Module Disk "examples" Ring_normalize.
-Print XML Module Disk "examples" Ring_theory.
-Print XML Module Disk "examples" ZArithRing.
diff --git a/helm/EXPORT/exportcsczfc/Makefile b/helm/EXPORT/exportcsczfc/Makefile
deleted file mode 100644 (file)
index 7016b28..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-all: objects theories
-
-objects:
-       coqc -R csc_zfc csc_zfc csc_zfc/*.v
-       echo "Load Verbose provacsczfc." | ~/V7/bin/coqtop.byte -R csc_zfc csc_zfc
-
-theories:
-       ./exporttheories.sh
-
-clean:
-       rm -f *.vo csc_zfc/*.vo
diff --git a/helm/EXPORT/exportcsczfc/csc_zfc/.cvsignore b/helm/EXPORT/exportcsczfc/csc_zfc/.cvsignore
deleted file mode 100644 (file)
index 4199568..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.vo
diff --git a/helm/EXPORT/exportcsczfc/csc_zfc/csc_eqdep.v b/helm/EXPORT/exportcsczfc/csc_zfc/csc_eqdep.v
deleted file mode 100644 (file)
index 8019c08..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Section Dependent_equality.
-
-Variable U:Type.
-Variable P:U->Type.
-
-Inductive eq_depT [p:U;x:(P p)] : (q:U)(P q)->Prop :=
-   eq_depT_intro : (eq_depT p x p x).
-
-End Dependent_equality.
diff --git a/helm/EXPORT/exportcsczfc/csc_zfc/csc_zfc.v b/helm/EXPORT/exportcsczfc/csc_zfc/csc_zfc.v
deleted file mode 100644 (file)
index a109239..0000000
+++ /dev/null
@@ -1,1566 +0,0 @@
-(******************************************************************************)
-(*                      Zermelo Set Theory + atomic sets                      *)
-(*                                                                            *)
-(*                           Claudio Sacerdoti Coen                           *)
-(*                                                                            *)
-(*    Based on                                                                *)
-(*                                                                            *)
-(*                            Zermolo Set Theory                              *)
-(*                                                                            *)
-(*                              Benjamin Werner                               *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* This is an extension of Benjamin's encoding of usual Set Theory where I    *)
-(* assume the existence of exactly one atomic set for each object t of type T *)
-(* where T is a Type in Coq: if (t:T) and (T:Type) then ((atom T t):Ens)      *)
-(* The usual axioms of set theory are modified so that they work in the       *)
-(* usual way if applied to "normal" sets, and in a reasonable way when        *)
-(* applied to atomic sets (for example (Union (atom T t) E) is equal to E for *)
-(* each non-atomic set E)                                                     *)
-(* All this has been already studied by Fraenkel and Mostowski in the '40,    *)
-(* but with totally different goals (in order to proove some independence     *)
-(* results in set theory)                                                     *)
-
-(* This is the introduction to the original encoding of Benjamin:             *)
-(*    This is an encoding of usual Set Theory, simillar to Peter Aczel's work *)
-(*    in the early 80's. The main difference is that the propositions here    *)
-(*    live in the impredicative world of "Prop". Thus, priority is given to   *)
-(*    expressivity against constructivity.                                    *)
-(*                                                                            *)
-(*    Since the definition of Sets is the same for both approaches, I added   *)
-(*    most  of Aczel's encoding of CZF at the end of the file. Many           *)
-(*    definitions are common to both aproaches.                               *)
-
-(* In this work only the encoding of ZFC (and not that of CZF) has been       *)
-(* developed, but it should be straightforward to do.                         *)
-
-Require csc_eqdep.
-
-(******************************************************************************)
-(*                          Useful data types                                 *)
-(******************************************************************************)
-
-Inductive Set F := .
-
-Inductive Set Un := void : Un.
-
-(* Existential quantification *)
-Inductive EXType [P:Type; Q:P->Prop]: Prop :=
- EXTypei : (x:P)(Q x)->(EXType P Q).
-
-(* Sigma types -- i.e. computational existentials *)
-Inductive sig [A:Type;P:A->Prop] : Type :=
- exist : (x:A)(P x)->(sig A P).
-
-(* Existential on the Type level *)
-Inductive depprod [A:Type; P : A->Type] : Type :=
- dep_i : (x:A)(P x)->(depprod A P).
-
-(* Cartesian product in Type *)
-Inductive prod_t [A,B:Type] : Type :=
- pair_t : A->B->(prod_t A B).
-
-(******************************************************************************)
-(*                         Definition of Ens, EQ, IN                          *)
-(******************************************************************************)
-
-(* The type representing sets  (Ensemble = french for set) *)
-Inductive Ens : Type :=
-   sup : (A:Type)(A->Ens)->Ens
- | atom : (A:Type)A->Ens.
-
-(* Recursive Definition of the extentional equality on sets *)
-Definition EQ : Ens -> Ens -> Prop.
-Induction 1.
-Intros A f eq1.
-Induction 1.
-Intros B g eq2.
-Apply and.
-Exact (x:A)
-        (EXType ? [y:B](eq1 x (g y))).
-Exact (y:B)
-        (EXType ? [x:A](eq1 x (g y))).
-
-Intros A' a'.
-Exact False.
-
-Intros A a.
-Induction 1.
-Intros A' f eq1.
-Exact False.
-
-Intros.
-(*Exact (X == X0).*)
-Exact (eq_depT Type [A:Type]A A a A0 y).
-Save.
-
-Transparent EQ.
-
-(* Membership on sets *)
-Definition IN: Ens -> Ens -> Prop :=
-[E1,E2:Ens]
-  Cases E2 of
-    (sup A f) => (EXType ? [y:A](EQ E1 (f y)))
-  | (atom A a) => False
-  end.
-Transparent IN.
-
-
-(******************************************************************************)
-(*                                  INCLUSION                                 *)
-(******************************************************************************)
-
-Definition INC : Ens -> Ens -> Prop :=
- [E1,E2:Ens]
- Cases E1 E2 of
-   (sup A f)  (sup B g)  => (E:Ens)(IN E E1)->(IN E E2)
- | (sup A f)  (atom B b) => False
- | (atom A a) (sup B g)  => False      (* ??? or True?  *)
- | (atom A a) (atom B b) => (EQ E1 E2) (* ??? or False? *)
- end.
-
-(* EQ is an equivalence relation  *)
-
-Theorem EQ_refl : (E:Ens)(EQ E E).
-Induction E.
-Intros; Split; Simpl; Intro.
-Exists x; Exact (H x).
-Exists y; Exact (H y).
-Intros; Simpl; Constructor 1.
-Qed.
-
-Theorem EQ_tran : (E1,E2,E3:Ens)(EQ E1 E2)->(EQ E2 E3)->(EQ E1 E3).
-Induction E1; [Intros A1 f1 r1 | Intros A1 a1]  ;
-Induction E2; [Intros A2 f2 r2 | Intros A2 a2 | Intros A2 f2 r2 | Intros A2 a2];
-Induction E3; [Intros A3 f3 r3 | Auto | Contradiction | Auto |
- Auto | Contradiction | Auto | Intros A3 a3].
-Simpl; Intros e1 e2; Split; Elim e1; Intros I1 I2; Elim e2; Intros I3 I4;
- [ Intros a1; Elim (I1 a1) ; Intros a2 ; Elim (I3 a2) ; Intros a3 ; Exists a3 |
-   Intros a3; Elim (I4 a3) ; Intros a2 ; Elim (I2 a2) ; Intros a1 ; Exists a1 ];
- Apply r1 with (f2 a2); Assumption.
-
-Simpl ; Intros; Inversion H; Inversion H0; Assumption.
-Qed.
-
-Theorem EQ_sym : (E1,E2:Ens)(EQ E1 E2)->(EQ E2 E1).
-Induction E1 ; [ Intros A1 f1 r1 | Intros A1 a1 ];
-Induction E2 ; [Intros A2 f2 r2 | Contradiction | Contradiction |Intros A2 a2].
-
-Induction 1; Intros e1 e2; Split;
- [ Intros a2; Elim (e2 a2); Intros a1 H1; Exists a1 |
-   Intros a1; Elim (e1 a1); Intros a2 H2; Exists a2 ] ; Apply r1; Assumption.
-Destruct 1; Apply EQ_refl.
-Qed.
-
-Theorem EQ_INC : (E,E':Ens)(EQ E E')->(INC E E').
-Induction E ; [Intros A f r | Intros A a] ; Induction E' ;
- [Intros A' f' r' | Contradiction | Contradiction | Intros A' a'].
-Simpl; Destruct 1; Intros e1 e2.
-Intros C; Induction 1; Intros a ea; Elim (e1 a); Intros a' ea'; Exists a'.
-Apply EQ_tran with (f a); Assumption.
-Destruct 1; Hnf; Constructor 1.
-Qed.
-
-Hints Resolve EQ_sym EQ_refl EQ_INC : zfc.
-
-Theorem INC_EQ : (E,E':Ens)(INC E E')->(INC E' E)->(EQ E E').
-Induction E ; [Intros A f r | Intros A a] ; Induction E' ;
- [Intros A' f' r' | Auto | Auto | Auto].
-Unfold INC; Simpl; Intros I1 I2; Split.
-Intros a; Apply I1; Exists a; Apply EQ_refl.
-Intros a'; Cut (EXType A [x:A](EQ (f' a')(f x))).
-Induction 1; Intros a ea; Exists a; Apply EQ_sym; Exact ea.
-Apply I2; Exists a'; Apply EQ_refl.
-Qed.
-
-Hints Resolve INC_EQ : zfc.
-
-(* Membership is extentional (i.e. is stable w.r.t. EQ)   *)
-
-Theorem IN_sound_left :
-                (E,E',E'':Ens)
-                  (EQ E E')->(IN E E'')->(IN E' E'').
-Induction E''; [Intros A'' f'' r'' e | Intros A'' a'' e]; Simpl.
-Induction 1; Intros a'' p; Exists a''; Apply EQ_tran with E;
- [Apply EQ_sym; Assumption | Assumption].
-
-Intro; Assumption.
-Qed.
-
-Theorem IN_sound_right :
-                (E,E',E'':Ens)
-                   (EQ E' E'')->(IN E E')->(IN E E'').
-Induction E'; [Intros A' f' r' | Intros A' a']; Induction E'';
- [Intros A'' f'' r'' | Intros A'' a'' | Intros A'' f'' r'' | Intros A'' a''];
- Simpl.
-Induction 1; Intros e1 e2; Induction 1; Intros a' e'; Elim (e1 a');
- Intros a'' e''; Exists a''; Apply EQ_tran with (f' a'); Assumption.
-Intros; Assumption.
-Intros; Elim H.
-Intros; Assumption.
-Qed.
-
-(* Inclusion is reflexive, transitive, extentional *)
-
-Theorem INC_refl : (E:Ens)(INC E E).
-Induction E; Auto with zfc.
-Qed.
-
-Theorem INC_tran : (E,E',E'':Ens)(INC E E')->(INC E' E'')->(INC E E'').
-Induction E; Induction E'; Induction E''; Simpl;
- Auto Orelse Contradiction Orelse (Intros; Elim H0; Assumption).
-Qed.
-
-Theorem INC_sound_left :
-               (E,E',E'':Ens)
-                  (EQ E E')->(INC E E'')->(INC E' E'').
-Induction E; [Intros A f r | Intros A a]; Induction E';
- [Intros A' f' r' | Intros A' a' | Intros A' f' r' | Intros A' a'];
- Induction E''; [Intros A'' f'' r'' | Contradiction | Contradiction |
- Contradiction | Contradiction | Contradiction | Contradiction |
- Intros A'' a''].
-Unfold INC; Intros; Apply H0; Apply IN_sound_right with (sup A' f');
- Auto with zfc.
-Destruct 1; Auto.
-Qed.
-
-Theorem INC_sound_right :
-               (E,E',E'':Ens)
-                 (EQ E' E'')->(INC E E')->(INC E E'').
-Induction E; [Intros A f r | Intros A a]; Induction E';
- [Intros A' f' r' | Intros A' a' | Intros A' f' r' | Intros A' a'];
- Induction E''; [Intros A'' f'' r'' | Contradiction | Contradiction |
- Contradiction | Contradiction | Contradiction | Contradiction |
- Intros A'' a''].
-Unfold INC; Intros;  Apply IN_sound_right with (sup A' f');
- [Assumption | Apply H0; Assumption].
-Destruct 1; Auto.
-Qed.
-
-(******************************************************************************)
-(*                                THE EMPTY SET                               *)
-(******************************************************************************)
-
-(* The empty set  (vide = french for empty)   *)
-Definition Vide : Ens :=
- (sup F [f:F]<Ens>Cases f of end).
-
-Theorem Vide_est_vide : (E:Ens)(IN E Vide)->F.
-Unfold Vide; Simpl; Intros E H; Cut False.
-Induction 1.
-Elim H; Intros x; Elim x.
-Qed.
-
-(* CSC: This is different from Werner *)
-Theorem tout_vide_est_Vide :
- (A:Type)(f:A->Ens)((E':Ens)(IN E' (sup A f))->F)->(EQ (sup A f) Vide).
-Intros; Hnf; Split.
-Intro; Cut F.
-Destruct 1.
-Apply H with (f x); Unfold IN; Exists x; Apply EQ_refl.
-Destruct y.
-Qed.
-
-(******************************************************************************)
-(*                                    PAIRE                                   *)
-(******************************************************************************)
-
-Definition Paire : Ens -> Ens -> Ens :=
- [E1,E2:Ens] (sup bool [b:bool]Cases b of true => E1 | false => E2 end).
-
-(* The pair construction is extentional *)
-
-Theorem Paire_sound_left : (A,A',B:Ens)
-                        (EQ A A')->(EQ (Paire A B)(Paire A' B)).
-Unfold Paire .
-Simpl.
-(Intros; Split).
-Induction x.
-(Exists  true; Auto with zfc).
-
-(Exists  false; Auto with zfc).
-
-(Induction y; Simpl).
-(Exists  true; Auto with zfc).
-
-(Exists  false; Auto with zfc).
-Qed.
-
-Theorem Paire_sound_right : (A,B,B':Ens)
-                (EQ B B')->(EQ (Paire A B)(Paire A B')).
-Unfold Paire; Simpl; Intros; Split.
-Induction x.
-(Exists true; Auto with zfc).
-Exists false; Auto with zfc.
-Induction y.
-(Exists true; Auto with zfc).
-Exists false; Auto with zfc.
-Qed.
-
-Hints Resolve Paire_sound_right Paire_sound_left : zfc.
-
-Theorem IN_Paire_left : (E,E':Ens)(IN E (Paire E E')).
-Unfold Paire; Exists true; Apply EQ_refl.
-Qed.
-
-Theorem IN_Paire_right : (E,E':Ens)(IN E' (Paire E E')).
-Unfold Paire; Exists false; Apply EQ_refl.
-Qed.
-
-Theorem Paire_IN : (E,E',A:Ens)(IN A (Paire E E'))->(EQ A E)\/(EQ A E').
-Unfold Paire; Simpl.
-Induction 1; Intros b; Elim b; Auto with zfc.
-Save.
-
-Hints Resolve IN_Paire_left IN_Paire_right Vide_est_vide : zfc.
-
-(******************************************************************************)
-(*                                  SINGLETON                                 *)
-(******************************************************************************)
-
-(* CSC: This is different from Benjamin only because I like it more; *)
-(*      theorems are also simpler                                    *)
-(*      In Benjamin's encoding (Sing E) was defined as (Paire E E)   *)
-Definition Sing : Ens -> Ens :=
- [E:Ens] (sup Un [x:Un]Cases x of void => E end).
-
-Theorem IN_Sing : (E:Ens)(IN E (Sing E)).
-Simpl; Exists void; Apply EQ_refl.
-Qed.
-
-Theorem IN_Sing_EQ : (E,E':Ens)(IN E (Sing E'))->(EQ E E').
-Simpl; Intros; Elim H; Destruct x; Trivial.
-Qed.
-
-Hints Resolve IN_Sing IN_Sing_EQ : zfc.
-
-Theorem Sing_sound : (A,A':Ens)(EQ A A')->(EQ (Sing A)(Sing A')).
-Intros; Hnf; Split; [Destruct x | Destruct y]; Exists void; Assumption.
-Qed.
-
-Hints Resolve Sing_sound : zfc.
-
-Theorem EQ_Sing_EQ : (E1,E2:Ens)(EQ (Sing E1)(Sing E2))->(EQ E1 E2).
-Intros; Hnf in H; Elim H; Intros; Elim (H0 void); Destruct x; Trivial.
-Qed.
-
-Hints Resolve EQ_Sing_EQ : zfc.
-
-(******************************************************************************)
-(*                       COMPREHENSION (OR SEPARATION)                        *)
-(******************************************************************************)
-
-Definition Comp: Ens -> (Ens -> Prop) -> Ens.
-Induction 1.
-Intros A f fr P.
-Apply (sup {x:A|(P (f x))}).
-Induction 1; Intros x p; Exact (f x).
-Intros. Exact X.
-Qed.
-
-Transparent Comp.
-
-Theorem Comp_INC : (E:Ens)(P:Ens->Prop)(INC (Comp E P) E).
-Destruct E.
-Intros A f P; Simpl; Destruct E0; [Intros A' f' H | Intros A' a' H];
- Elim H; Destruct x; Intros x0 p eq; Exists x0; Exact eq.
-Auto with zfc.
-Qed.
-
-Theorem IN_Comp_P :
-           (E,A:Ens)
-               (P:Ens->Prop)((w1,w2:Ens)(P w1)->(EQ w1 w2)->(P w2))->
-                  (IN A (Comp E P))->(P A).
-Induction E.
-Simpl; Intros B f Hr A P H i; Elim i; Destruct x; Simpl; Intro b; Intros;
- Apply H with (f b); Auto with zfc.
-Contradiction.
-Qed.
-
-Theorem IN_P_Comp :
-     (E,A:Ens)
-        (P:Ens ->Prop)((w1,w2:Ens)(P w1)->(EQ w1 w2)->(P w2))->
-                (IN A E)->(P A)->(IN A (Comp E P)).
-Induction E.
-Simpl; Intros B f HR A P H i; Elim i; Simpl; Intros; Cut (P (f x)).
-Intros Pf.
-Exists (exist B [x:B](P (f x)) x Pf); Simpl; Auto with zfc.
-Apply H with A; Auto with zfc.
-Contradiction.
-Qed.
-
-(* Again, extentionality is not stated, but easy *)
-
-(******************************************************************************)
-(*                                    UNION                                   *)
-(******************************************************************************)
-
-(* Projections of a set: *)
-(*  1: its base type, F for atoms *)
-
-Definition pi1: Ens -> Type.
-Induction 1.
-Intros A f r.
-Exact A.
-Intros.
-Exact F.
-Save.
-
-Transparent pi1.
-
-(*  2: the function, [_:F]Vide for atoms *)
-
-Definition pi2 : (E:Ens)(pi1 E)->Ens.
-Induction E.
-Intros A f r.
-Exact f.
-Intros.
-Exact Vide.
-Save.
-
-Transparent pi2.
-
-Definition Union : (E:Ens)Ens.
-Induction 1.
-Intros A f r.
-Apply (sup (depprod A [x:A](pi1 (f x)))).
-Induction 1; Intros a b.
-Exact (pi2 (f a) b).
-Intros.
-Exact Vide.
-Save.
-
-Transparent Union.
-
-Theorem EQ_EXType : (E,E':Ens)
-        (EQ E E')
-         ->(a:(pi1 E))
-            (EXType (pi1 E') [b:(pi1 E')](EQ (pi2 E a) (pi2 E' b))).
-Induction E; [Intros A f r | Intros A a]; Induction E';
- [Intros A' f' r' | Intros A' a' | Intros A' f' r' | Intros A' a'].
-Simpl; Destruct 1; Intros e1 e2 a; Apply e1.
-Contradiction.
-Contradiction.
-Simpl; Destruct 2.
-Qed.
-
-Transparent EQ_EXType.
-
-Theorem IN_EXType: (E,E':Ens)(IN E' E)->
-                        (EXType (pi1 E) [a:(pi1 E)](EQ E' (pi2 E a))).
-Induction E.
-Simpl; Intros A f r; Induction 1; Intros; Exists x; Assumption.
-Destruct 1.
-Qed.
-
-Theorem IN_Union : (E,E',E'':Ens)
-                (IN E' E)->(IN E'' E')->(IN E'' (Union E)).
-Induction E.
-2: Destruct 1.
-Intros A f r.
-Intros; Simpl.
-Elim (IN_EXType (sup A f) E' H).
-Intros x e.
-Cut (EQ (pi2 (sup A f) x) E').
-2: Auto with zfc v62.
-Intros e1.
-Cut (IN E'' (pi2 (sup A f) x)).
-Intros i1.
-Elim (IN_EXType ? ? i1).
-Intros x0 e2.
-Simpl in x0.
-Exists  (dep_i A [x:A](pi1 (f x)) x x0).
-Simpl.
-Exact e2.
-Apply IN_sound_right with E'; Assumption.
-Qed.
-
-(* CSC: This is different from Benjamin *)
-Theorem IN_INC_Union :
-      (A:Type)(f:A->Ens)(E:Ens)(IN (sup A f) E)->(INC (sup A f) (Union E)).
-Induction E.
-Intros A f r H; Hnf; Hnf in H; Intros; Elim H; Intros x e.
-Cut (IN E0 (f0 x)).
-Intro in_E0_f0x; Apply IN_Union with (f0 x).
-Hnf; Split with x; Auto with zfc.
-
-Auto with zfc.
-Apply IN_sound_right with (sup A f); Trivial.
-
-(Simpl; Destruct 2; Destruct x).
-Qed.
-
-Theorem Union_IN : (E,E':Ens)(IN E' (Union E))->
-                                (EXType ? [E1:Ens](IN E1 E)/\(IN E' E1)).
-Induction E.
-2: (Simpl; Destruct 2; Destruct x).
-Unfold Union ; Simpl; Intros A f r.
-Induction 1.
-Induction x.
-(Intros a b; Simpl).
-Intros.
-Exists  (f a).
-Split.
-(Exists  a; Auto with zfc v62).
-
-(Apply IN_sound_left with (pi2 (f a) b); Auto with zfc v62).
-Simpl.
-(Generalize b ; Elim (f a); Simpl).
-Intros.
-(Exists  b0; Auto with zfc v62).
-
-Destruct 2.
-Qed.
-
-(* extentionality of union  *)
-
-Theorem Union_sound
-     : (E,E':Ens)(EQ E E')->(EQ (Union E) (Union E')).
-Unfold Union.
-Induction E ; [Intros A f r | Intros A a] ; Induction E' ;
- [Intros A' f' r' | Intros A' a' | Intros A' f' r' | Intros A' a'].
-
-Simpl; Induction 1; Intros e1 e2; Split.
-Intros x; Elim x; Intros a aa; Elim (e1 a); Intros a' ea.
-Elim (EQ_EXType (f a)(f' a') ea aa); Intros aa' eaa.
-Exists (dep_i A' [x:A'](pi1 (f' x)) a' aa'); Simpl; Auto with zfc v62.
-Intros c'; Elim c'; Intros a' aa'; Elim (e2 a'); Intros a ea.
-Cut (EQ (f' a')(f a)).
-2 : Auto with zfc v62.
-Intros ea'; Elim (EQ_EXType (f' a')(f a) ea' aa'); Intros aa eaa.
-Exists (dep_i A [x:A](pi1 (f x)) a aa); Auto with zfc v62.
-
-Contradiction.
-Contradiction.
-Destruct 1; Apply EQ_refl.
-Qed.
-
-(* The union construction is monotone w.r.t. inclusion   *)
-
-Theorem Union_mon : (E,E':Ens)(INC E E')->(INC (Union E)(Union E')).
-Induction E ; [Intros A f r | Intros A a] ; Induction E';
- [Intros A' f' r' | Contradiction | Contradiction | Intros A' a'].
-2: Auto with zfc.
-Intro; Cut (E:Ens)(IN E (sup A f))->(IN E (sup A' f')).
-2: Auto.
-Intro XXX; Cut ((E:Ens)(IN E (Union (sup A f)))->(IN E (Union (sup A' f'))))
-    ->(INC (Union (sup A f)) (Union (sup A' f'))).
-2: Auto.
-Intros X; Apply X; Intros E0 Y; (Elim (Union_IN (sup A f) E0); Auto with zfc).
-Destruct 1; Intros; Cut (IN x (sup A' f')).
-2: Auto.
-Intro; (Apply IN_Union with x; Auto).
-Qed.
-
-(******************************************************************************)
-(*                                 INTERSECTION                               *)
-(******************************************************************************)
-
-Definition Inter : (E:Ens)Ens :=
-[E:Ens]
- Cases E of
-   (sup A f) =>
-      (sup ?
-           [c:(depprod A
-              [a:A](depprod ? [b:(pi1 (f a))](x:A)(IN (pi2 (f a) b)(f x)))
-             )
-          ]
-           Cases c of
-             (dep_i a (dep_i b p)) => (pi2 (f a) b)
-          end
-      )
- | (atom A a) => Vide
- end.
-
-Theorem IN_Inter_all : (E,E':Ens)
-                        (IN E' (Inter E))->
-                                (E'':Ens)(IN E'' E)->(IN E' E'').
-Induction E; [Intros A f r | Contradiction]; Intros E'.
-Induction 1; Intros c; Elim c; Intros a ca; Elim ca; Intros aa paa.
-Intros e E'' e''.
-Elim e''; Intros a1 ea1.
-Apply IN_sound_right with (f a1); Auto with zfc v62.
-Apply IN_sound_left with (pi2 (f a) aa); Auto with zfc v62.
-Qed.
-
-Theorem all_IN_Inter : (E,E',E'':Ens)
-                         (IN E'' E)->
-                            ((E'':Ens)(IN E'' E)->(IN E' E''))->
-                                (IN E' (Inter E)).
-(Induction E; [Intros A f r | Contradiction]).
-Intros E' E'' i H.
-Elim (IN_EXType (sup A f) E'' i).
-(Intros a e; Simpl in a).
-Simpl in e.
-(Cut (IN E' E''); Auto with zfc v62).
-Intros i'.
-(Cut (IN E' (f a)); Auto with zfc v62).
-Intros i0.
-Elim (IN_EXType (f a) E' i0).
-Intros b e'.
-Simpl.
-Cut (x:A)(IN (pi2 (f a) b) (f x)).
-Intros.
-Exists  (dep_i A
-          [a:A]
-           (depprod (pi1 (f a))
-             [b:(pi1 (f a))](x:A)(IN (pi2 (f a) b) (f x)))
-          a
-          (dep_i (pi1 (f a))
-            [b:(pi1 (f a))](x:A)(IN (pi2 (f a) b) (f x)) b H0)).
-Simpl.
-Auto with zfc v62.
-Auto with zfc v62.
-Intros.
-Apply IN_sound_left with E'.
-Auto with zfc v62.
-Apply H.
-Auto with zfc v62.
-Simpl.
-(Exists  x; Auto with zfc v62).
-(Apply IN_sound_right with E''; Auto with zfc v62).
-Qed.
-
-(******************************************************************************)
-(*                                  POWERSET                                  *)
-(******************************************************************************)
-
-Definition Power : Ens -> Ens :=
-[E:Ens]
- Cases E of
-  (sup A f) =>
-   (sup ?
-        [P:A->Prop]
-           (sup ?
-                [c:(depprod A [a:A](P a))]
-                   Cases c of
-                     (dep_i a p) => (f a)
-                   end
-            )
-   )
- | (atom A a) => (Sing (atom A a)) (* ??? or Vide? *)
- end.
-
-Theorem IN_Power_INC : (E,E':Ens)(IN E' (Power E))->(INC E' E).
-Induction E.
-Intros A f r; Unfold INC ; Simpl.
-Intros E'; Induction 1; Intros P.
-Elim E'.
-Simpl.
-Intros A' f' r'.
-Induction 1; Intros HA HB.
-Intros E''; Induction 1; Intros a' e.
-Elim (HA a').
-Induction x; Intros a p.
-Intros; Exists  a.
-Apply EQ_tran with (f' a'); Auto with zfc v62.
-Contradiction.
-Auto with zfc.
-Qed.
-
-(* CSC: This is different from Benjamin *)
-Theorem INC_IN_Power : (E,E':Ens)(INC E' E)->(IN E' (Power E)).
-Induction E.
-2: Induction E'.
-2: Contradiction.
-2: (Destruct 1; Unfold Power; Auto with zfc).
-Intros A f r; Unfold INC; Simpl; Induction E'.
-2: Contradiction.
-Intros A' f' r' i.
-Exists  [a:A](IN (f a) (sup A' f')).
-Simpl.
-Split.
-Intros.
-Elim (i (f' x)).
-Intros a e.
-(Cut (EQ (f a) (f' x)); Auto with zfc v62).
-Intros e1.
-Exists  (dep_i A [a:A](EXType A' [y:A'](EQ (f a) (f' y))) a
-          (EXTypei A' [y:A'](EQ (f a) (f' y)) x e1)).
-Auto with zfc v62.
-Simpl.
-(Exists  x; Auto with zfc v62).
-Induction y; Induction 1; Intros.
-(Exists  x0; Auto with zfc v62).
-Qed.
-
-Theorem Power_mon : (E,E':Ens)(INC E E')->(INC (Power E)(Power E')).
-Induction E; [Intros A f r | Intros A a]; Induction E';
- [Intros A' f' r' | Contradiction | Contradiction | Destruct 1; Auto with zfc].
-Intro.
-Hnf in H.
-Cut ((E:Ens)(IN E (Power (sup A f)))->(IN E (Power (sup A' f'))))
-    ->(INC (Power (sup A f)) (Power (sup A' f'))).
-2: Auto.
-Intros.
-Apply H0.
-Intros.
-Cut (INC E0 (sup A f)).
-2: (Apply IN_Power_INC; Auto).
-Intro.
-Cut (INC E0 (sup A' f')).
-Intro.
-Apply INC_IN_Power.
-Assumption.
-
-Generalize H2.
-Elim E0.
-Unfold INC.
-Auto with zfc.
-
-Auto with zfc.
-Qed.
-
-Theorem Power_sound : (E,E':Ens)(EQ E E')->(EQ (Power E)(Power E')).
-Induction E; [Intros A f r | Intros A a]; Induction E';
- [Intros A' f' r' | Contradiction | Contradiction | Destruct 1; Auto with zfc].
-Intro.
-Apply INC_EQ.
-Cut ((E:Ens)(IN E (Power (sup A f)))->(IN E (Power (sup A' f'))))
-    ->(INC (Power (sup A f)) (Power (sup A' f'))).
-2: Auto.
-Intros; Apply H0; Clear H0; Intros; Cut (INC E0 (sup A f)).
-2: (Apply IN_Power_INC; Auto with zfc).
-Clear H0; Intro; Apply INC_IN_Power.
-(Apply INC_sound_right with (sup A f); Auto).
-
-(* Using simmetry *)
-Cut ((E:Ens)(IN E (Power (sup A' f')))->(IN E (Power (sup A f))))
-    ->(INC (Power (sup A' f')) (Power (sup A f))).      
-2: Auto. 
-Intros; Apply H0; Clear H0; Intros; Cut (INC E0 (sup A' f')).
-2: (Apply IN_Power_INC; Auto with zfc).
-Clear H0; Intro; Apply INC_IN_Power.
-(Apply INC_sound_right with (sup A' f'); Auto with zfc).
-Qed.
-
-(******************************************************************************)
-(*                              ORDERED COUPLES                               *)
-(******************************************************************************)
-
-(* small lemmas *)
-
-Theorem not_EQ_Sing_Vide : (E:Ens)(EQ (Sing E) Vide)->F.
-Intros E e; Cut False.
-Induction 1.
-Cut (IN E Vide).
-Simpl; Induction 1; Intros xx; Elim xx; Induction 1.
-Apply IN_sound_right with (Sing E); Auto with zfc v62.
-Qed.
-
-Theorem not_EQ_Vide_Sing : (E:Ens)(EQ Vide (Sing E))->F.
-Intros E e; Cut False.
-Induction 1.
-Cut (IN E Vide).
-Simpl; Induction 1; Intros xx; Elim xx; Induction 1.
-Apply IN_sound_right with (Sing E); Auto with zfc v62.
-Qed.
-
-(* This definition of the ordered pair is slightly different from *)
-(* the usual one, since we want it to work in an intuisionistic   *)
-(* setting. Works the same, neitherless. The soundness proofs are *)
-(* unpleasant.                                                    *)
-
-Definition Couple := [E,E': Ens](Paire (Sing E) (Paire Vide (Sing E'))).
-
-Theorem Couple_inj_left : (A,A',B,B':Ens)
-                (EQ (Couple A A')(Couple B B'))->(EQ A B).
-(Unfold Couple; Simpl); Induction 1; (Intros HA HB; Elim (HA true)).
-(Intros x; Elim x; Simpl; Induction 1; Intros H3 H4; Elim (H3 void);
- Simpl; Destruct x0).
-Trivial.
-
-Elim (H4 false); Destruct x1; Intros; Cut (EQ (Sing B') Vide).
-Simpl; Induction 1; Intros yy; Elim (yy void); Destruct x2.
-
-Apply EQ_tran with A.
-Auto with zfc.
-
-Assumption.
-
-Intros; Cut (EQ (Sing B') Vide).
-Simpl; Induction 1; Intros yy; Elim (yy void); Destruct x1.
-
-Apply EQ_tran with A.
-Auto with zfc.
-
-Elim (H4 true); Destruct x1; Trivial.
-Qed.
-
-Theorem Couple_inj_right :  (A,A',B,B':Ens)
-                (EQ (Couple A A')(Couple B B'))->(EQ A' B').
-Unfold Couple; Simpl.
-Induction 1; Intros H1 H2.
-Elim (H1 false).
-Intros bb1; Elim bb1.
-Intros HF.
-Change (EQ (Paire Vide (Sing A'))(Sing B)) in HF.
-Cut F.
-Induction 1.
-Apply (not_EQ_Vide_Sing A').
-Apply EQ_tran with B.
-Apply IN_Sing_EQ; Apply IN_sound_right with (Paire Vide (Sing A'));
- Auto with zfc v62.
-Apply EQ_sym; Apply IN_Sing_EQ;
-        Apply IN_sound_right with (Paire Vide (Sing A')); Auto with zfc v62.
-Change (EQ (Paire Vide (Sing A'))(Paire Vide (Sing B')))->(EQ A' B').
-Intros HP; Cut (EQ (Sing A') (Sing B')).
-Intros; Auto with zfc v62.
-Cut (IN (Sing A')(Paire Vide (Sing B'))).
-Intros HI; Elim (Paire_IN Vide (Sing B')(Sing A') HI).
-Intros; Cut F.
-Induction 1.
-Apply not_EQ_Sing_Vide with A'; Assumption.
-Trivial with zfc v62.
-Apply IN_sound_right with (Paire Vide (Sing A')); Auto with zfc v62.
-Qed.
-
-(******************************************************************************)
-(*                                   POWERSET                                 *)
-(******************************************************************************)
-
-(* Here we cheat. It is easier to define the cartesian product using    *)
-(* the type theoretical product, i.e. we here use non set-theoretical   *)
-(* constructions. We could however use the usual definitions.           *)
-
-Definition Prod : Ens -> Ens -> Ens :=
-[E,E':Ens]
- Cases E E' of
-   (sup A f) (sup A' f') =>
-     (sup ?
-          [c:(prod_t A A')]
-              Cases c of
-                (pair_t a a') => (Couple (f a) (f' a'))
-              end
-     )
- | _ _ => Vide
- end.
-
-Hints Resolve Paire_sound_left Paire_sound_right : zfc.
-
-Theorem Couple_sound_left :
-        (A,A',B:Ens)(EQ A A')->(EQ (Couple A B)(Couple A' B)).
- Unfold Couple;Intros; Auto with zfc v62.
-Save.
-
-Theorem Couple_sound_right:
-        (A,B,B':Ens)(EQ B B')->(EQ (Couple A B)(Couple A B')).
- Unfold Couple;Intros; Auto with zfc v62.
-Save.
-
-Theorem Couple_IN_Prod : (E1,E2,E1',E2':Ens)
-                (IN E1' E1)->(IN E2' E2)->
-                        (IN (Couple E1' E2')(Prod E1 E2)).
-Induction E1; [Intros A1 f1 r1 | Contradiction].
-Induction E2; [Intros A2 f2 r2 | Contradiction].
-Intros E1' E2' i1 i2.
-Elim (IN_EXType (sup A1 f1) E1').
-(Intros x e1; Simpl in x).
-Elim (IN_EXType (sup A2 f2) E2').
-(Intros x0 e2; Simpl in x).
-Apply IN_sound_left with (Couple (pi2 (sup A1 f1) x) (pi2 (sup A2 f2) x0)).
-Apply EQ_tran with (Couple (pi2 (sup A1 f1) x) E2').
-Apply Couple_sound_right.
-Auto with zfc v62.
-
-(Apply Couple_sound_left; Auto with zfc v62).
-
-Simpl.
-Exists  (pair_t ? ? x x0).
-Simpl.
-Split.
-
-Induction x1.
-Exists true; Auto with zfc.
-Exists false; Auto with zfc.
-
-Induction y.
-Exists true; Auto with zfc.
-Exists false; Auto with zfc.
-Assumption.
-Assumption.
-Qed.
-
-Theorem Couple_Prod_IN :  (E1,E2,E1',E2':Ens)
-                (IN (Couple E1' E2')(Prod E1 E2))->
-                        (IN E1' E1)/\(IN E2' E2).
-Induction E1; [Intros A1 f1 r1 | Destruct 1; Destruct x].
-Induction E2; [Intros A2 f2 r2 | Destruct 1; Destruct x].
-Intros E1' E2' i.
-Elim (IN_EXType (Prod (sup A1 f1) (sup A2 f2)) (Couple E1' E2') i).
-Destruct x; Intros a1 a2 e.
-Change (EQ (Couple E1' E2') (Couple (f1 a1) (f2 a2))) in e.
-Cut (EQ E1' (f1 a1)).
-Cut (EQ E2' (f2 a2)).
-Intros e1 e2.
-Split.
-Apply IN_sound_left with (f1 a1); Auto with zfc v62; Simpl; Exists a1;
- Auto with zfc v62.
-Apply IN_sound_left with (f2 a2); Auto with zfc v62; Simpl; Exists  a2;
- Auto with zfc v62.
-Apply Couple_inj_right with A:=E1' B:=(f1 a1); Auto with zfc v62.
-Apply Couple_inj_left with E2' (f2 a2); Auto with zfc v62.
-Qed.
-
-Theorem IN_Prod_EXType : (E,E',E'':Ens)(IN E'' (Prod E E'))->
-        (EXType ? [A:Ens](EXType ? [B:Ens](EQ (Couple A B) E''))).
-Induction E ; [Intros A  f  r  | Destruct 1; Destruct x].
-Induction E'; [Intros A' f' r' | Destruct 1; Destruct x].
-Intros; Elim (IN_EXType (Prod (sup A f) (sup A' f')) E'').
-Induction x.
-Intros; Exists  (f y); Exists  (f' y0); Auto with zfc v62.
-Auto with zfc v62.
-Qed.
-
-(******************************************************************************)
-(*                                  ORDINALS                                  *)
-(******************************************************************************)
-
-Definition Succ := [E:Ens](Union (Paire E (Sing E))).
-
-Inductive Ord : Ens -> Prop :=
-  Oo : (Ord Vide)
-| So : (E:Ens)(Ord E)->(Ord (Succ E))
-| Lo : (E:Ens)((e:Ens)(IN e E)->(Ord e))->(Ord (Union E))
-| Eo : (E,E':Ens)(Ord E)->(EQ E E')->(Ord E').
-
-Hints Resolve Oo So Lo : zfc.
-
-Definition Nat : nat ->Ens.
-Induction 1; Intros.
-Exact Vide.
-Exact (Succ X).
-Save.
-
-Transparent Nat.
-
-Theorem Nat_Ord : (n:nat)(Ord (Nat n)).
-Induction n; Simpl; Auto with zfc v62.
-Save.
-
-Definition Omega : Ens :=
-  (sup nat Nat).
-
-Theorem IN_Succ :  (E:Ens)(IN E (Succ E)).
-Intros E; Unfold Succ; Apply IN_Union with (Sing E); Auto with zfc v62.
-Qed.
-
-(* CSC: This is different from Werner *)
-Theorem INC_Succ : (A:Type)(f:A->Ens)(INC (sup A f) (Succ (sup A f))).
-Intros; Cut ((E:Ens)(IN E (sup A f))->(IN E (Succ (sup A f))))
-    ->(INC (sup A f) (Succ (sup A f))).
-Intros; Apply H; Unfold Succ; Intros.
-Apply IN_Union with (sup A f); Auto with zfc.
-
-Intros; Exact H.
-Qed.
-
-Hints Resolve IN_Succ INC_Succ : zfc.
-
-Theorem IN_Succ_or : (E,E':Ens)(IN E' (Succ E))->(EQ E E')\/(IN E' E).
-Intros E E' i.
-Unfold Succ  in i.
-Elim (Union_IN (Paire E (Sing E)) E' i).
-Intros E1; Induction 1; Intros i1 i2.
-Elim (Paire_IN E (Sing E) E1 i1).
-Intros; Right; Apply IN_sound_right with E1; Auto with zfc v62.
-Intros; Left; Cut (IN E' (Sing E)).
-Auto with zfc v62.
-Apply IN_sound_right with E1; Auto with zfc v62.
-Qed.
-
-Theorem E_not_IN_E : (E:Ens)(IN E E)->F.
-Induction E.
-Intros A f r i.
-Cut False.
-Induction 1.
-Elim (IN_EXType (sup A f) (sup A f) i); Intros a e.
-
-Simpl in a.
-Change (EQ (sup A f) (f a)) in e.
-Elim (r a).
-Apply IN_sound_right with (sup A f); Auto with zfc v62.
-Exists a; Auto with zfc v62.
-Intros; Cut False; Contradiction.
-Qed.
-
-Theorem Nat_IN_Omega : (n:nat)(IN (Nat n) Omega).
-Intros; Simpl; Exists n; Auto with zfc v62.
-Qed.
-Hints Resolve Nat_IN_Omega : zfc.
-
-Theorem IN_Omega_EXType : (E:Ens)(IN E Omega)->(EXType ? [n:nat](EQ (Nat n) E)).
-(Simpl; Induction 1).
-Intros n e.
-(Exists  n; Auto with zfc v62).
-Qed.
-
-Theorem IN_Nat_EXType : (n:nat)(E:Ens)(IN E (Nat n))->(EXType ? [p:nat](EQ E (Nat p))).
-Induction n.
-Simpl.
-Induction 1.
-Induction x.
-
-Intros.
-Change (IN E (Succ (Nat n0))) in H0.
-Elim (IN_Succ_or (Nat n0) E H0).
-(Intros; Exists  n0).
-Auto with zfc v62.
-
-Intros.
-(Elim (H E); Auto with zfc v62).
-Qed.
-
-Theorem Omega_EQ_Union : (EQ Omega (Union Omega)).
-Apply INC_EQ.
-Cut ((E:Ens)(IN E Omega)->(IN E (Union Omega)))
-    ->(INC Omega (Union Omega)).
-Intros; Apply H.
-Clear H.
-Intros.
-Elim (IN_Omega_EXType E H).
-Intros n e.
-Apply IN_Union with (Nat (S n)).
-Auto with zfc v62.
-
-Apply IN_sound_left with (Nat n).
-Auto with zfc v62.
-
-(Change (IN (Nat n) (Succ (Nat n))); Auto with zfc v62).
-
-Intros.
-Exact H.
-
-Cut ((E:Ens)(IN E (Union Omega))->(IN E Omega))
-    ->(INC (Union Omega) Omega).
-Intros; Apply H; Clear H.
-Intros.
-Elim (Union_IN Omega E H).
-Intros e h.
-Elim h.
-Intros i1 i2.
-Elim (IN_Omega_EXType e i1).
-Intros n e1.
-Cut (IN E (Nat n)).
-Intros.
-(Elim (IN_Nat_EXType n E H0); Intros).
-(Apply IN_sound_left with (Nat x); Auto with zfc v62).
-
-(Apply IN_sound_right with e; Auto with zfc v62).
-
-Intros.
-Exact H.
-Qed.
-
-Theorem Omega_Ord : (Ord Omega).
-Apply Eo with (Union Omega).
-Apply Lo.
-Intros.
-Elim (IN_Omega_EXType e H).
-Intros n ee.
-Apply Eo with (Nat n); Auto with zfc v62.
-Elim n.
-Auto with zfc v62.
-Auto with zfc v62.
-Intros.
-Change (Ord (Succ (Nat n0))); Auto with zfc v62.
-Apply EQ_sym; Auto with zfc v62.
-Apply Omega_EQ_Union.
-Qed.
-
-Definition Alpha : Ens->Ens.
-Induction 1.
-Intros A f r.
-Apply Union.
-Apply (sup A).
-Intros a.
-Exact (Power (r a)).
-Intros A a; Exact (atom A a). (* ??? or Vide? *)
-Save.
-
-Transparent Alpha.
-
-(******************************************************************************)
-(*                           AXIOM OF CHOICE                                  *)
-(******************************************************************************)
-
-(* A Type-theoretical axiom of choice gives us the collection axiom  *)
-
-Definition collection :=
- (P:Ens->Ens->Prop)
-  ((x,x',y:Ens)(EQ x x')->(P x y)->(P x' y))->
-   ((E:Ens)(EXType ? (P E)))->
-     (E:Ens)(EXType ? [A:Ens](x:Ens)(IN x E)->
-      (EXType ? [y:Ens](IN y A)/\(P x y))).
-
-
-Definition choice :=
- (A,B:Type)(P:A->B->Prop)
-   ((a:A)(EXType ? [b:B](P a b)))->
-       (EXType ? [f:A->B]((a:A)(P a (f a)))).
-
-Theorem Choice_Collection : choice -> collection.
-Intro; Unfold collection; Intros P comp G E;
- Cut (EXType ? [f:(Ens->Ens)](B:Ens)(P B (f B))).
-Induction 1; Intros f Pf; Elim E.
-Intros A g hr; Split with (sup A [a:A](f (g a))).
-Simpl; Intros X i; Elim i; Intros a ea; Split with (f (g a)).
-Split.
-Exists a; Auto with zfc.
-
-Apply comp with (g a); Auto with zfc.
-
-Auto with zfc.
-
-Intros; Split with Vide; Contradiction.
-
-Unfold choice in H; Apply H; Intros; Elim (G a); Intros b hb; Exists b;
- Assumption.
-Qed.
-
-(* If we also assume the excluded middle, we can derive         *)
-(* the usual replacement schemata.                              *)
-
-Definition functional :=
-        [P:Ens->Ens->Prop](x,y,y':Ens)
-                (P x y)->(P x y')->(EQ y y').
-Definition replacement :=
-   (P:Ens->Ens->Prop)
-        (functional P)->
-        ((x,y,y':Ens)(EQ y y')->(P x y)->(P x y'))->
-        ((x,x',y:Ens)(EQ x x')->(P x y)->(P x' y))->
-       (X:Ens)(EXType ? [Y:Ens](y:Ens)
-                            (((IN y Y)->(EXType ? [x:Ens](IN x X)/\(P x y)))
-                            /\((EXType ? [x:Ens](IN x X)/\(P x y))->(IN y Y)))).
-
-Theorem classical_Collection_Replacement :
- ((S:Prop)S\/(S->False))->
-        collection ->
-                replacement.
-Unfold replacement; Intros EM Collection P fp comp_r comp_l X.
-Cut (EXType ? [Y:Ens](y:Ens)((EXType ? [x:Ens](IN x X)/\(P x y))->(IN y Y))).
-Induction 1; Intros Y HY.
-Exists (Comp Y [y:Ens](EXType ? [x:Ens](IN x X)/\(P x y))).
-Intros y; Split.
-Intros HC.
-Apply (IN_Comp_P Y y [y0:Ens](EXType Ens [x:Ens](IN x X)/\(P x y0))); Auto with zfc v62.
-Intros w1 w2; Induction 1; Intros x; Induction 1; Intros Ix Px e.
-Exists x; Split; Auto with zfc v62.
-Apply comp_r with w1; Auto with zfc v62.
-Intros He.
-Apply IN_P_Comp.
-
-Intros w1 w2; Induction 1; Intros x; Induction 1; Intros Ix Px e.
-Exists x; Split; Auto with zfc v62.
-Apply comp_r with w1; Auto with zfc v62.
-Apply HY; Auto with zfc v62.
-Auto with zfc v62.
-
-Elim (Collection [x,y:Ens]((P x y)\/(((y':Ens)(P x y')->False)/\(EQ y Vide))))
-        with X.
-Intros Y HY.
-Elim (EM (EXType ? [x:Ens](IN x X)/\(P x Vide))).
-Intros Hvide; Elim Hvide; Intros xv Hxv; Exists Y.
-Intros y; Induction 1; Intros x; Induction 1; Intros Hx1 Hx2.
-Elim (HY x Hx1).
-Intros y'; Induction 1; Intros Hy'1 Hy'2.
-Elim Hy'2.
-Intros Hy'3; Apply IN_sound_left with y'; Auto with zfc v62.
-Apply fp with x; Auto with zfc v62.
-Induction 1; Intros Hy'3 Hy'4.
-Elim (Hy'3 y Hx2).
-Intros HP; Exists (Comp Y [y:Ens]((EQ y Vide)->False)).
-Intros y; Induction 1; Intros x; Induction 1; Intros Hx1 Hx2.
-Apply IN_P_Comp.
-Intros w1 w2 Hw1 Hw Hw2; Apply Hw1; Apply EQ_tran with w2; Auto with zfc v62.
-Elim (HY x).
-Intros y'; Induction 1; Intros Hy'1 Hy'2.
-Elim Hy'2; Intros Hy'3.
-Apply IN_sound_left with y'; Auto with zfc v62.
-Apply fp with x; Auto with zfc v62.
-Elim Hy'3; Intros Hy'4 Hy'5.
-Elim (Hy'4 y); Auto with zfc v62.
-Assumption.
-Intros e; Apply HP; Exists x; Split; Auto with zfc v62;
-        Apply comp_r with y; Auto with zfc v62; Apply fp; Auto with zfc v62.
-Intros x x' y e Hx; Elim Hx; Intros Hx1.
-Left; Apply comp_l with x; Auto with zfc v62.
-Right; Elim Hx1; Intros Hx2 Hx3; Split.
-2 : Assumption.
-Intros y' Hy'; Apply (Hx2 y'); Apply comp_l with x'; Auto with zfc v62.
-Intros x; Elim (EM (EXType ? [y:Ens](P x y))); Intros Hx.
-Elim Hx; Intros x0 Hx0; Exists x0; Left; Assumption.
-Exists Vide; Right; Split; Auto with zfc v62.
-Intros y Hy; Elim Hx; Exists y; Auto with zfc v62.
-Qed.
-
-(******************************************************************************)
-(*                  SMALL SETS AND THE BIG SET OF SMALL SETS                  *)
-(******************************************************************************)
-
-(* Some definitions replicated on another type level *)
-
-Inductive EXType' [P:Type; Q:P->Prop]: Prop :=
- EXTypei' : (x:P)(Q x)->(EXType' P Q).
-
-Inductive prod_t' [A,B:Type] : Type :=
- pair_t' : A->B->(prod_t' A B).
-
-Inductive depprod'' [A:Type; P : A->Type] : Type :=
- dep_i'' : (x:A)(P x)->(depprod'' A P).
-
-(* The small sets  *)
-Inductive Ens' : Type :=
-   sup' : (A:Type)(A->Ens')->Ens'
- | atom' : (A:Type)A->Ens'.
-
-(* Equality on small sets *)
-Definition EQ' : Ens' -> Ens' -> Prop.
-Induction 1.
-Intros A f eq1.
-Induction 1.
-Intros B g eq2.
-Apply and.
-Exact (x:A)
-        (EXType' ? [y:B](eq1 x (g y))).
-Exact (y:B)
-        (EXType' ? [x:A](eq1 x (g y))).
-
-Intros A' a'.
-Exact False.
-
-Intros A a.
-Induction 1.
-Intros A' f eq1.
-Exact False.
-
-Intros.
-(*Exact (X == X0).*)
-Exact (eq_depT Type [A:Type]A A a A0 y).
-Save.
-
-Transparent EQ'.
-
-(* small sets can be injected into big sets *)
-Definition inj : Ens'->Ens.
-Induction 1; [Intros A f fr ; Exact (sup A fr) | Intros A a ; Exact (atom A a)].
-Qed.
-
-Transparent inj.
-
-Theorem inj_sound : (E1,E2:Ens')(EQ' E1 E2)->(EQ (inj E1)(inj E2)).
-Induction E1; [Intros A1 f1 r1 | Intros A a] ; Induction E2;
- [Intros A2 f2 r2 | Contradiction | Contradiction | Intros A' a'].
-(Induction 1; Intros HR1 HR2; Split).
-(Intros a1; Elim (HR1 a1); Intros a2 Ha2; Exists  a2; Auto with zfc v62).
-(Intros a2; Elim (HR2 a2); Intros a1 Ha1; Exists  a1; Auto with zfc v62).
-
-Auto with zfc.
-Qed.
-
-Definition Sing' : Ens' -> Ens' :=
- [E:Ens'] (sup' Un [x:Un]Cases x of void => E end).
-
-Definition Power' : Ens' -> Ens' :=
-[E:Ens']
- Cases E of
-  (sup' A f) =>
-   (sup' ?
-        [P:A->Prop]
-           (sup' ?
-                [c:(depprod'' A [a:A](P a))]
-                   Cases c of
-                     (dep_i'' a p) => (f a)
-                   end
-            )
-   )
- | (atom' A a) => (Sing' (atom' A a)) (* ??? or Vide? *)
- end.
-
-Theorem Power_sound_inj : (E:Ens')(EQ (inj (Power' E))(Power (inj E))).
-Induction E; [Intros A f HR | Intros A a].
-Simpl; Split.
-Intros P; Exists P; Split.
-Intros c; Elim c; Intros a p.
-Exists (dep_i A [a0:A](P a0) a p); Simpl; Auto with zfc v62.
-Intros c; Elim c; Intros a p.
-Exists (dep_i'' A [a0:A](P a0) a p); Simpl; Auto with zfc v62.
-Intros P; Exists P; Split.
-Intros c; Elim c; Intros a p.
-Exists (dep_i A [a0:A](P a0) a p); Simpl; Auto with zfc v62.
-Intros c; Elim c; Intros a p.
-Exists (dep_i'' A [a0:A](P a0) a p); Simpl; Auto with zfc v62.
-
-Simpl; Split.
-Destruct x; Exists void; Auto with zfc.
-Destruct y; Exists void; Auto with zfc.
-Qed.
-
-(* The set of small sets *)
-Definition Big := (sup Ens' inj).
-
-Theorem Big_is_big : (E:Ens')(IN (inj E) Big).
-Intros E; Unfold Big; Simpl; Exists E; Auto with zfc.
-Qed.
-
-Theorem IN_Big_small : (E:Ens)(IN E Big)->(EXType' ? [E':Ens'](EQ E (inj E'))).
-Unfold Big; Simpl; Induction 1; Intros E' HE'; Exists E'; Assumption.
-Qed.
-
-Theorem IN_small_small : (E:Ens)(E':Ens')(IN E (inj E'))->
-                (EXType' ? [E1:Ens'](EQ E (inj E1))).
-Induction E'; [Intros A' f' HR' | Contradiction]; Simpl;
-        Induction 1; Intros a' e'; Exists  (f' a'); Assumption.
-Qed.
-
-Theorem Big_closed_for_power : (E:Ens)(IN E Big)->(IN (Power E) Big).
-Unfold Big; Simpl; Intros E; Induction 1; Intros E' HE'; Exists (Power' E').
-Apply EQ_tran with (Power (inj E')).
-Apply Power_sound; Assumption.
-Apply EQ_sym; Apply Power_sound_inj.
-Qed.
-
-(******************************************************************************)
-(*                            NO SET OF ALL SETS                              *)
-(******************************************************************************)
-
-(* Just for fun : a proof that there is no set of all sets, using *)
-(* Russell's paradox construction                                 *)
-(* There, of course, are other proofs (foundation, etc)           *)
-
-Theorem Russell : (E:Ens)((E':Ens)(IN E' E))->False.
-Intros U HU.
-Cut ([x:Ens](IN x x)->False (Comp U [x:Ens](IN x x)->False)).
-Intros HR.
-Apply HR.
-(Apply IN_P_Comp; Auto with zfc v62).
-(Intros w1 w2 HF e i; Apply HF; Apply IN_sound_left with w2; Auto with zfc v62;
- Apply IN_sound_right with w2; Auto with zfc v62).
-Intros H.
-Cut (IN (Comp U [x:Ens](IN x x)->False) (Comp U [x:Ens](IN x x)->False)).
-Change ([x:Ens](IN x x)->False (Comp U [x:Ens](IN x x)->False)).
-Cut (w1,w2:Ens)((IN w1 w1)->False)->(EQ w1 w2)->(IN w2 w2)->False.
-Intros ww.
-Exact (IN_Comp_P U (Comp U [x:Ens](IN x x)->False)
-        [x:Ens](IN x x)->False ww H).
-(Intros w1 w2 HF e i; Apply HF; Apply IN_sound_left with w2; Auto with zfc v62;
- Apply IN_sound_right with w2; Auto with zfc v62).
-Assumption.
-Qed.
-
-(******************************************************************************)
-(*                     SOME AXIOMS AND STRANGE THINGS ;-(                     *)
-(*                                                                            *)
-(*  The need for axioms is due to the usage of dependent equality, or to my   *)
-(*  ignorance about it ;-)                                                    *)
-(*                                                                            *)
-(******************************************************************************)
-
-Axiom a_de_pi2 :
- (T:Type)(n,m:T)(existT Type [A:Type]A T n)==(existT Type [A:Type]A T m)->n==m.
-
-(* The main consequence of the previous axiom *)
-Theorem a_pi2 : (T:Type)(n,m:T)(atom T n)==(atom T m)->n==m.
-Intros; Inversion H; Apply a_de_pi2; Assumption.
-Qed.
-
-(* This theorem is really strange: I can prove this in general, but I can't  *)
-(* prove any of it's instance: for example I can't prove                     *)
-(* ~(nat==bool)->~(atom nat O)==(atom bool true) due to an internal error of *)
-(* Coq                                                                       *)
-Theorem a_npi1 : (T1,T2:Type)(t1:T1)(t2:T2)~T1==T2->~(atom T1 t1)==(atom T2 t2).
-Unfold not; Intros; Apply H; Inversion H0; Reflexivity.
-Qed.
-
-(******************************************************************************)
-(*                  MAPPING A TYPE TO THE SET OF IT'S ELEMENTS                *)
-(******************************************************************************)
-
-(* (Ens_of_t T t) is thought as the coercion from an element (t:T) to a set *)
-Definition Ens_of_t : (T:Type)T->Ens :=
- [T:Type][t:T](atom T t).
-
-(* (Ens_of_T T) is thought as the set of the elements of type T ... *)
-Definition Ens_of_T : Type -> Ens :=
- [T:Type] (sup T [t:T](Ens_of_t T t)).
-
-(* ... and (Prop_on_Ens_of_Prop T P) is thought as the proposition on Ens *)
-(* that is true only for (atom T t) where (t:T) and (P t) is true.        *)
-Inductive Prop_on_Ens_of_Prop [T:Type; P:T->Prop] : Ens->Prop :=
-  cons : (t:T)(P t)->(Prop_on_Ens_of_Prop T P (atom T t)).
-
-Theorem Prop_on_Ens_of_Prop_atom_Prop :
-   (T:Type; P:(T->Prop); t:T)(Prop_on_Ens_of_Prop T P (atom T t))->(P t).
-Intros; Inversion H; Replace t with t0.
-Assumption.
-
-Apply a_de_pi2; Assumption.
-Qed.
-
-Theorem Prop_on_Ens_of_Prop_t :
-  (T:Type; P:(T->Prop); E:Ens)
-        (Prop_on_Ens_of_Prop T P E)
-        ->(EXType T [t:T]E==(atom T t)/\(P t)).
-Intros.
-Inversion H.
-Split with t.
-Auto.
-Qed.
-
-Lemma EQ_atom: (T:Type)(t:T)(E:Ens)(EQ (atom T t) E)->(atom T t)==E.
-Destruct E.
-Contradiction.
-
-Intros.
-Inversion H.
-Reflexivity.
-Qed.
-
-
-Theorem Prop_on_Ens_of_Prop_sound :
-   (E1,E2:Ens)(T:Type)(P:T->Prop)
-    (EQ E1 E2)
-    -> (Prop_on_Ens_of_Prop T P E1)
-    -> (Prop_on_Ens_of_Prop T P E2).
-Intros.
-Cut (EXType ? [t:T]E1==(atom T t)/\(P t)).
-Destruct 1; Destruct 1.
-Intros.
-Rewrite H3 in H.
-Cut (atom T x)==E2.
-Intros.
-Rewrite <- H5.
-Constructor 1.
-Assumption.
-
-Apply EQ_atom.
-Assumption.
-
-Apply Prop_on_Ens_of_Prop_t.
-Assumption.
-Qed.
-
-
-(******************************************************************************)
-(*                             EXAMPLES OF USAGE                              *)
-(******************************************************************************)
-
-(* We could define an implicit coercion from nat to Ens using Ens_of_t *)
-Coercion Ens_of_nat := [n:nat](Ens_of_t nat n).
-
-(* CNat is the set of the natural numbers of Coq ... *)
-Definition CNat : Ens :=
- (Ens_of_T nat).
-
-Mutual Inductive
- is_even : nat->Prop :=
-    is_even_O : (is_even O)
-  | is_even_S : (n:nat)(is_odd n)->(is_even (S n))
-with
- is_odd : nat->Prop :=
-    id_ood_S : (n:nat)(is_even n)->(is_odd (S n)).
-
-Lemma not_even_odd: (n:nat)(is_even n)->(is_odd n)->False.
-Induction n.
-Intros; Inversion H0.
-
-Intros; Apply H; [Inversion H1 | Inversion H0]; Assumption.
-Qed.
-
-Definition Cis_even : Ens -> Prop :=
-  (Prop_on_Ens_of_Prop nat is_even).
-
-Definition Cis_odd : Ens -> Prop :=
-  (Prop_on_Ens_of_Prop nat is_odd).
-
-(* ... and CEven and COdd are the sets of even/odd natural numbers of Coq *)
-
-Definition CEven := (Comp CNat Cis_even).
-
-Definition COdd  := (Comp CNat Cis_odd).
-
-(* And now an easy fact: the intersection of CEven with COdd is empty *)
-Fact COdd_Inter_CEven_EQ_Vide: (EQ (Inter (Paire CEven COdd)) Vide).
-Apply INC_EQ.    
-Cut (E:Ens)(IN E (Inter (Paire CEven COdd)))->(IN E Vide).
-Auto.
-
-Intros.
-Cut False.
-Contradiction.
-
-Cut (IN E CEven)/\(IN E COdd).
-Destruct 1.
-Intros.
-Unfold CEven in H1.
-Cut (Cis_even E).
-Unfold COdd in H2.
-Cut (Cis_odd E).
-Intros.
-Inversion H3.
-Inversion H4.
-Rewrite <- H6 in H8.
-Cut t0==t.
-Intro.
-Rewrite H9 in H7.
-Apply not_even_odd with t; Assumption.
-
-Apply a_pi2; Assumption.
-
-Apply IN_Comp_P with CNat.
-Intros.
-Unfold Cis_odd.
-Apply Prop_on_Ens_of_Prop_sound with w1; Assumption.
-
-Assumption.
-
-Apply IN_Comp_P with CNat.
-Intros.
-Unfold Cis_even.
-Apply Prop_on_Ens_of_Prop_sound with w1; Assumption.
-
-Assumption.
-
-Split.
-Apply IN_Inter_all with (Paire CEven COdd).
-Assumption.
-
-Auto with zfc.
-
-Apply IN_Inter_all with (Paire CEven COdd).
-Assumption.
-
-Auto with zfc.
-
-Simpl.
-Destruct 1.
-Destruct x.
-Qed.
-
-(* Another easy fact: O is not in COdd *)
-Fact O_not_IN_COdd : ~(IN O COdd).
-Unfold not; Intro.
-Cut (Cis_odd O).
-Intro.
-Inversion H0.
-Simpl in H1.
-Cut t==O.
-Intro.
-Rewrite H3 in H2.
-Inversion H2.
-
-Apply a_de_pi2.
-Assumption.
-
-Unfold COdd in H.
-Apply IN_Comp_P with CNat.
-Intros.
-Unfold Cis_odd.
-Apply Prop_on_Ens_of_Prop_sound with w1.
-Assumption.
-
-Exact H0.
-
-Assumption.
-Qed.
diff --git a/helm/EXPORT/exportcsczfc/exporttheories.sh b/helm/EXPORT/exportcsczfc/exporttheories.sh
deleted file mode 100755 (executable)
index 419e33d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-echo "Exporting theory $1";
-
-for i in csc_eqdep.v csc_zfc.v
- do
-  basename=$(basename $i | sed s/\\.v//)
-  cat $i | ../mktheory.pl "csczfc/$basename" > \
-   examples/csczfc/$1/$basename.theory.xml
- done
diff --git a/helm/EXPORT/exportcsczfc/provacsczfc.v b/helm/EXPORT/exportcsczfc/provacsczfc.v
deleted file mode 100644 (file)
index 81737d5..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Require Xml.
-Require csc_eqdep.
-Require csc_zfc.
-
-Print XML Dir Disk "examples/csczfc" csc_eqdep.
-Print XML Dir Disk "examples/csczfc" csc_zfc.
diff --git a/helm/EXPORT/exportprove/Makefile b/helm/EXPORT/exportprove/Makefile
deleted file mode 100644 (file)
index 4bd3a33..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-all: objects theories
-
-objects:
-       coqc -R prove Bologna.prove prove/*.v
-       echo "Load Verbose provaStruct." | coqtop.byte -R prove Bologna.prove
-       echo "Load Verbose provaFeIota." | coqtop.byte -R prove Bologna.prove
-       echo "Load Verbose provaCofix." | coqtop.byte -R prove Bologna.prove
-       echo "Load Verbose prova." | coqtop.byte -R prove Bologna.prove
-
-theories:
-       ./exporttheories.sh
-
-clean:
-       rm -f *.vo prove/*.vo
diff --git a/helm/EXPORT/exportprove/exporttheories.sh b/helm/EXPORT/exportprove/exporttheories.sh
deleted file mode 100755 (executable)
index 0b609bf..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-echo "Exporting theory $1";
-
-for i in prove/*.v
- do
-  basename=$(basename $i | sed s/\\.v//)
-  cat $i | ../mktheory.pl "prove/$basename" > \
-   examples/Bologna/prove/$1/$basename.theory.xml
- done
diff --git a/helm/EXPORT/exportprove/prova.v b/helm/EXPORT/exportprove/prova.v
deleted file mode 100644 (file)
index 0d98e57..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-Require Export Xml.
-
-Section prova.
-
-Inductive
- tree : Set := node : forest -> tree
-with
- forest : Set := leaf : forest | cons : tree -> forest -> forest.
-
-Fixpoint tree_size [t:tree] : nat :=
- Cases t of (node f) => (S (forest_size f)) end
-with forest_size [f:forest] : nat :=
- Cases f of leaf => (S O) | (cons t f') => (plus (tree_size t) (forest_size f'))
- end.
-
-Theorem a_ab_b: (A,B:Prop)A->(A->B)->B.
-Auto.
-Qed.
-
-Axiom dummy_axiom: (n,m:nat)(le n m)\/(gt n m).
-
-End prova.
-
-Print XML Section Disk "examples/prove" prova.
-
-Theorem ab_ac_abc: (A,B,C:Prop)(A->B)->(A->C)->A->B/\C.
-Intros A B C AB AC A1.
-Split.
-
-Show XML File "examples/ab_ac_abc.xml" Proof.
-
-Auto.
-Auto.
-Qed.
diff --git a/helm/EXPORT/exportprove/provaCofix.v b/helm/EXPORT/exportprove/provaCofix.v
deleted file mode 100644 (file)
index d0f9729..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Xml.
-Require provacofix.
-
-Print XML Module Disk "examples" provacofix.
diff --git a/helm/EXPORT/exportprove/provaFeIota.v b/helm/EXPORT/exportprove/provaFeIota.v
deleted file mode 100644 (file)
index bc5b2c0..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Require Xml.
-Require provaF.
-Require provaIota.
-
-Print XML Module Disk "examples" provaF.
-Print XML Module Disk "examples" provaIota.
diff --git a/helm/EXPORT/exportprove/provaStruct.v b/helm/EXPORT/exportprove/provaStruct.v
deleted file mode 100644 (file)
index 06c9529..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Require Export Xml.
-
-Require provastruct.
-Print XML Module Disk "examples" provastruct.
-
-Require provastruct2.
-Print XML Module Disk "examples" provastruct2.
-
-Require provastruct3.
-Print XML Module Disk "examples" provastruct3.
-
-Require provastruct4.
-Print XML Module Disk "examples" provastruct4.
-
-Require provastruct5.
-Print XML Module Disk "examples" provastruct5.
diff --git a/helm/EXPORT/exportprove/prove/.cvsignore b/helm/EXPORT/exportprove/prove/.cvsignore
deleted file mode 100644 (file)
index 4199568..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.vo
diff --git a/helm/EXPORT/exportprove/prove/provaF.v b/helm/EXPORT/exportprove/prove/provaF.v
deleted file mode 100644 (file)
index 072010f..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-Definition int := (A:Prop)(A->A)->A->A.
-
-Definition O := [A:Prop][s:A->A][o:A]o.
-
-Definition S := [n:int][A:Prop][s:A->A][o:A](s (n A s o)).
-
-Definition Uno := [A:Prop][s:A->A][o:A](s o).
-
-Definition Due := [A:Prop][s:A->A][o:A](s (s o)).
-
-Definition Tre := [A:Prop][s:A->A][o:A](s (s (s o))).
-
-Definition id := [A:Prop][x:A]x.
-
-Definition id_Due := (id int Due).
-
-Definition difficult := ((S Due) (int -> int) (id (int -> int)) (id int)).
-
-Definition is_Zero := [n:int](n int [_:int]Uno O).
-
-Definition couple := [A:Prop][x:A][y:A][z:A->A->A](z x y).
-
-Definition Couple := [A:Prop](z:A->A->A)A.
-
-Definition fst := [A:Prop][x:A][y:A]x.
-
-Definition snd := [A:Prop][x:A][y:A]y.
-
-Definition next : (Couple int) -> (Couple int) := [x:(Couple int)](couple int (x (snd int)) (S (x (snd int)))).
-
-Definition pred := [n:int]((n (Couple int) next (couple int O O))(fst int)).
-
-Definition test := (((pred Tre) (int -> int))(id (int->int)) (id int)).
diff --git a/helm/EXPORT/exportprove/prove/provaIota.v b/helm/EXPORT/exportprove/prove/provaIota.v
deleted file mode 100644 (file)
index 74a510b..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-Inductive bool : Set := true : bool | false : bool.
-Inductive nat  : Set := O : nat | S : nat -> nat.
-
-Fixpoint plus [n:nat] : nat -> nat :=
-  [m:nat]
-  Cases n of
-     O     => m
-   | (S n) => (S (plus n m))
-  end.
-
-Fixpoint mult [n:nat] : nat -> nat :=
-  [m:nat]
-  Cases n of
-     O     => O
-   | (S n) => (plus m (mult n m))
-  end.
-
-Fixpoint fact [n:nat] : nat  :=
-  Cases n of
-     O     => (S O)
-   | (S n) => (mult (S n) (fact n))
-  end.
-
-Definition bnot :=
- [b:bool]
- Cases b of
-    true  => false
-  | false => true
- end.
-
-Fixpoint is_even [n:nat] : bool :=
-  Cases n of
-     O     => true
-   | (S n) => (bnot (bnot (is_odd n)))
-  end
-with is_odd [n:nat] : bool :=
-  Cases n of
-     O     => false
-   | (S n) => (bnot (bnot (is_even n)))
-  end
-.
-
-Fixpoint idn [n:nat] : nat :=
-  Cases n of
-     O     => O
-   | (S n) => (S (idn n))
-  end.
-
-Definition test1 := (is_even (S (S O))).
-Definition test2 := (is_even (S (S (S O)))).
-Definition test3 := (idn (idn (S O))).
-Definition test4 := (is_odd (fact (S (S (O))))).
-Definition test5 := (is_odd (fact (S (S (S (S (S (S O)))))))).
diff --git a/helm/EXPORT/exportprove/prove/provacofix.v b/helm/EXPORT/exportprove/prove/provacofix.v
deleted file mode 100644 (file)
index 199cade..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-(* Let's define an infinite tree whose nodes are made of natural value and an *)
-(* infinite forest of infinite trees whose nodes ...                          *)
-
-(* (obbrobrio_tree n) is used to build such a tree whose root value is n and *)
-(* root forest is made of the corecursively defined tress whose roots values *)
-(* are (n+1), (n+2), ...                                                     *)
-
-(* To finish, we provide also some destructors and a funny (?!?) theorem     *)
-
-CoInductive tree : Set :=
-   node : nat -> forest -> tree      
-with forest : Set :=
-   nil : forest
- | cons : tree -> forest -> forest.
-
-CoFixpoint obbrobrio_tree : nat -> tree :=
- [n:nat]
-  (node n (obbrobrio_forest (S n) nil))
-with obbrobrio_forest : nat -> forest -> forest :=
- [n:nat][f:forest]
-  (cons (obbrobrio_tree n) (obbrobrio_forest (S n) f)).
-
-Definition root_value : tree -> nat :=
- [t:tree]
- Cases t of
-    (node n _) => n
- end.
-
-Definition root_forest : tree -> forest :=
- [t:tree]
- Cases t of
-    (node _ f) => f
- end.
-
-Definition root_tree : forest -> tree :=
- [f:forest]
- Cases f of
-    nil => (obbrobrio_tree (S (S (S O))))
-  | (cons t _) => t
- end.
-
-Theorem easy : (root_value (root_tree (root_forest (obbrobrio_tree O))))=(S O).
-Proof.
- Trivial.
-Qed.
diff --git a/helm/EXPORT/exportprove/prove/provastruct.v b/helm/EXPORT/exportprove/prove/provastruct.v
deleted file mode 100644 (file)
index 503c7e0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Require Export Xml.
-
-Section a.
- Variable A:Prop.
- Section b1.
-  Variable B:Prop.
-  Axiom axiom: A -> (A -> B) ->B.
-  Theorem th1: A -> (A -> B) -> A/\B.
-   Intros A' H.
-   Split.
-   Assumption.
-   Apply axiom; Assumption.
-  Qed.
- End b1.
- Section b2.
-  Variable B:Set.
-  Axiom axiom': (A:Prop)A->A.
- End b2.
- Theorem th1': (A:Prop)A->A.
-  Auto.
- Qed.
-End a.
diff --git a/helm/EXPORT/exportprove/prove/provastruct2.v b/helm/EXPORT/exportprove/prove/provastruct2.v
deleted file mode 100644 (file)
index 0784e97..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-Section init.
-Section a.
- Section a1.
-  Section a11.
-   Section a111.
-    Local uno := (S O).
-   End a111.
-   Section a112.
-   End a112.
-   Section a113.
-   End a113.
-  End a11.
-  Local uno := (S O).
- End a1.
- Section a2.
-  Section a21.
-   Local uno := (S O).
-  End a21.
-  Section a22.
-   Section a221.
-   End a221.
-  End a22.
-  Section a23.
-   Section a231.
-    Section a2311.
-     Local uno := (S O).
-    End a2311.
-    Section a2312.
-    End a2312.
-    Section a2313.
-    End a2313.
-   End a231.
-   Section a232.
-    Section a2321.
-    End a2321.
-   End a232.
-  End a23.
-  Local uno := (S O).
- End a2.
- Definition uno := (S O).
-End a.
-End init.
diff --git a/helm/EXPORT/exportprove/prove/provastruct3.v b/helm/EXPORT/exportprove/prove/provastruct3.v
deleted file mode 100644 (file)
index d189330..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Section a.
- Section a1.
-  Variable A : Prop.
-  Variable B : Prop.
-  Inductive t1 : Set := k1 : A -> t1.
- End a1.
- Inductive t2 [B:Set] : Set := k2 : (t2 B).
-
- Variable A : Prop.
-End a.
diff --git a/helm/EXPORT/exportprove/prove/provastruct4.v b/helm/EXPORT/exportprove/prove/provastruct4.v
deleted file mode 100644 (file)
index 1307f46..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Section a.
- Variables N,M:nat.
- Section b.
-  Variable P:Prop.
-  Local SN := (S N).
-  Axiom A : N = M.
- End b.
-End a.
diff --git a/helm/EXPORT/exportprove/prove/provastruct5.v b/helm/EXPORT/exportprove/prove/provastruct5.v
deleted file mode 100644 (file)
index 952c9d2..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Section a.
- Variable A:Prop.
- Theorem easy:(B:Prop)B->B.
-  Exact ([H:Prop][B:Prop][b:B]b A).
- Qed.
- Section b.
-  Theorem easy':(B:Prop)B->B.
-   Exact easy.
-  Qed.
- End b.
-End a.
diff --git a/helm/EXPORT/mktheory.pl b/helm/EXPORT/mktheory.pl
deleted file mode 100755 (executable)
index 2be018e..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-#!/usr/bin/perl
-
-# Assumptions:
-#  Comments on one line are stripped
-#  Comments on many lines:
-#   nothing after *) (end of command)
-#  Commands could be nested (but see previous assumption)
-#  Commands don't span on several lines
-#  If a line is commented, the comment must begin at the begin of line and end
-#   at the end of line
-#  In a line, before a command only spaces are allowed
-
-$curi = $ARGV[0];
-$with_types = ($ARGV[1] ? ".types" : "");
-$ident = " ";
-$cid = 1;
-$opencom = 0;
-$openscheme = 0;
-$openfix = 0;
-$opengoal = 0;
-
-print <<EOT;
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE Theory SYSTEM "http://localhost:8081/getdtd?uri=maththeory.dtd">
-
-<Theory uri="cic:/$curi">
-EOT
-
-while (<STDIN>) {
- chomp;
- if ($opencom > 0) {
-  $opencom-- if (/\*\)/ && !/\(\*.*\*\)/);
- } else {
-  if (/\(\*.*\*\)/) { # (* comment *)
-   s/\(\*.*\*\)//;
-  } elsif (/\(\*/) {
-   # (* comment
-   $opencom++;
-   $_ = "";
-  }
-
-  if (/Require /) {
-   s/ *Require *(.*)\..*/$1/;
-   print "$ident<!-- Require $_ -->\n";
-  } elsif (/Goal /) {
-   $opengoal = 1;
-  } elsif (/Section /) {
-   s/ *Section *(.*)\..*/$1/;
-   print "$ident<SECTION uri=\"$1\">\n";
-   $ident = $ident." ";
-  } elsif (/Chapter /) {
-   s/ *Chapter *(.*)\..*/$1/;
-   print "$ident<SECTION uri=\"$1\">\n";
-   $ident = $ident." ";
-  } elsif (/End /) {
-   chop($ident);
-   print "$ident</SECTION>\n";
-  } elsif (/Variable(s?) /) {
-   s/ *Variable(s?) *([^:]*):.*/$2/;
-   s/ //g;
-   @vl = split /,/;
-   foreach (@vl) {
-    print "$ident<VARIABLE uri=\"$_.var$with_types\"/>\n";
-   }
-  } elsif (/Hypothesis /) {
-   s/ *Hypothesis *([^ :]*)( |:).*/$1/;
-   @vl = split /,/;
-   foreach (@vl) {
-    print "$ident<VARIABLE uri=\"$_.var$with_types\"/>\n";
-   }
-  } elsif (/^ *Inductive /) {
-   if (/ *Inductive *[^ :]+ ([^ :]*) :=/) {
-    s/ *Inductive *[^ :]+ ([^ :]*) *:=.*/$1/;
-   } elsif (/ *Inductive *[^ :]*( |:)/) {
-    s/ *Inductive *([^ :\[]*)( |:|\[).*/$1/;
-   }
-   print "$ident<DEFINITION uri=\"$_.ind$with_types\"/>\n";
-  } elsif (/ *CoInductive /) {
-   if (/ *CoInductive *[^ :]+ ([^ :]*) *:=/) {
-    s/ *CoInductive *[^ :]+ ([^ :]*) *:=.*/$1/;
-   } elsif (/ *CoInductive *[^ :]*( |:)/) {
-    s/ *CoInductive *([^ :]*)( |:).*/$1/;
-   }
-   print "$ident<DEFINITION uri=\"$_.ind$with_types\"/>\n";
-  } elsif (/^ *Fixpoint /) {
-   s/ *Fixpoint *([^ \[]*)( |\[).*/$1/;
-   print "$ident<DEFINITION uri=\"$_.con$with_types\"/>\n";
-   $openfix = 1;
-  } elsif (/ *CoFixpoint /) {
-   s/ *CoFixpoint *([^ \[]*)( |\[).*/$1/;
-   print "$ident<DEFINITION uri=\"$_.con$with_types\"/>\n";
-   $openfix = 1;
-  } elsif (/^ *Definition /) {
-   s/ *Definition *([^ :]*)( |:)?.*/$1/;
-   print "$ident<DEFINITION uri=\"$_.con$with_types\"/>\n";
-  } elsif (/Local /) {
-   s/ *Local *([^ :]*)( |:)?.*/$1/;
-   print "$ident<DEFINITION uri=\"$_.con$with_types\"/>\n";
-  } elsif (/Lemma /) {
-   s/ *Lemma *([^ :]*)( |:)?.*/$1/;
-   print "$ident<THEOREM id=\"id$cid\" uri=\"$_.con$with_types\"/>\n";
-   $cid++;
-  } elsif (/Theorem /) {
-   s/ *Theorem *([^ :]+)( |:)?.*/$1/;
-   print "$ident<THEOREM id=\"id$cid\" uri=\"$_.con$with_types\"/>\n";
-   $cid++;
-  } elsif (/Remark /) {
-   s/ *Remark *([^ :]*)( |:)?.*/$1/;
-   print "$ident<THEOREM id=\"id$cid\" uri=\"$_.con$with_types\"/>\n";
-   $cid++;
-  } elsif (/Scheme /) {
-   s/ *Scheme *([^ :]*)( |:)?.*/$1/;
-   print "$ident<THEOREM id=\"id$cid\" uri=\"$_.con$with_types\"/>\n";
-   $cid++;
-   $openscheme = 1;
-  } elsif (/Save / && $opengoal) {
-   s/ *Save *([^ \.]*)( |\.).*/$1/;
-   print "$ident<THEOREM id=\"id$cid\" uri=\"$_.con$with_types\"/>\n";
-   $cid++;
-  } elsif (/with / && $openscheme) {
-   s/ *with *([^ :]*)( |:).*/$1/;
-   print "$ident<THEOREM id=\"id$cid\" uri=\"$_.con$with_types\"/>\n";
-   $cid++;
-  } elsif (/with / && $openfix) {
-   s/ *with *([^ :]*)( |:).*/$1/;
-   print "$ident<DEFINITION uri=\"$_.con$with_types\"/>\n";
-   $cid++;
-  } elsif (/Axiom /) {
-   s/ *Axiom *([^ :]*)( |:).*/$1/;
-   print "$ident<AXIOM id=\"id$cid\" uri=\"$_.con$with_types\"/>\n";
-   $cid++;
-  } elsif (/Parameter /) {
-   s/ *Parameter *([^ :]*)( |:).*/$1/;
-   print "$ident<AXIOM id=\"id$cid\" uri=\"$_.con$with_types\"/>\n";
-   $cid++;
-  } elsif (/Record /) {
-   s/ *Record *([^ :]*)( |:).*/$1/;
-   print "$ident<DEFINITION uri=\"$_.ind$with_types\"/>\n";
-   $cid++;
-  }
-
-  if ($openscheme && (/\./)) {
-   $openscheme = 0;
-  } elsif ($openfix && (/\./)) {
-   $openfix = 0;
-  }
-
- }
-}
-
-print "</Theory>\n";
diff --git a/helm/Makefile b/helm/Makefile
deleted file mode 100644 (file)
index 721a896..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-DIRS = ocaml hbugs gTopLevel searchEngine mathql_test
-
-DIRS_BYTE = $(patsubst %,%.byte,$(DIRS))
-DIRS_OPT = $(patsubst %,%.opt,$(DIRS))
-DIRS_CLEAN = $(patsubst %,%.clean,$(DIRS))
-all: byte
-byte: $(DIRS_BYTE)
-opt: $(DIRS_OPT)
-world: byte opt
-clean: $(DIRS_CLEAN)
-%.byte:
-       $(MAKE) -C $*/ all
-%.opt:
-       $(MAKE) -C $*/ opt
-%.clean:
-       $(MAKE) -C $*/ clean
-.PHONY: all byte opt world clean
diff --git a/helm/annotationHelper/.cvsignore b/helm/annotationHelper/.cvsignore
deleted file mode 100644 (file)
index b79ea36..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iox] *.o cicAnnotationHelper cicAnnotationHelper.opt
diff --git a/helm/annotationHelper/.depend b/helm/annotationHelper/.depend
deleted file mode 100644 (file)
index 699b8de..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-cicAnnotationHinter.cmo: cicAnnotationHinter.cmi 
-cicAnnotationHinter.cmx: cicAnnotationHinter.cmi 
-cicAnnotationHelper.cmo: cicAnnotationHinter.cmi 
-cicAnnotationHelper.cmx: cicAnnotationHinter.cmx 
diff --git a/helm/annotationHelper/Makefile b/helm/annotationHelper/Makefile
deleted file mode 100644 (file)
index 272ac3e..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-BIN_DIR = /usr/local/bin
-REQUIRES = lablgtkmathview helm-cic_annotations_cache
-PREDICATES =
-OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)"
-OCAMLC = ocamlfind ocamlc $(OCAMLOPTIONS)
-OCAMLOPT = ocamlfind ocamlopt $(OCAMLOPTIONS)
-OCAMLDEP = ocamldep
-
-LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-
-all: cicAnnotationHelper
-opt: cicAnnotationHelper.opt
-
-DEPOBJS = cicAnnotationHinter.mli cicAnnotationHinter.ml cicAnnotationHelper.ml
-
-CICANNOTATIONHELPEROBJS = cicAnnotationHinter.cmo cicAnnotationHelper.cmo
-
-depend:
-       $(OCAMLDEP) $(DEPOBJS) > .depend
-
-cicAnnotationHelper: $(CICANNOTATIONHELPEROBJS) $(LIBRARIES)
-       $(OCAMLC)  -linkpkg -o cicAnnotationHelper $(CICANNOTATIONHELPEROBJS)
-
-cicAnnotationHelper.opt: $(CICANNOTATIONHELPEROBJS:.cmo=.cmx) $(LIBRARIES_OPT)
-       $(OCAMLOPT) -linkpkg -o cicAnnotationHelper.opt $(CICANNOTATIONHELPEROBJS:.cmo=.cmx)
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.mli.cmi: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.ml.cmx: $(LIBRARIES_OPT)
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o cicAnnotationHelper cicAnnotationHelper.opt
-
-install:
-       cp cicAnnotationHelper cicAnnotationHelper.opt $(BIN_DIR)
-
-uninstall:
-       rm -f $(BIN_DIR)/cicAnnotationHelper $(BIN_DIR)/cicAnnotationHelper.opt
-
-.PHONY: install uninstall clean
-
-include .depend
diff --git a/helm/annotationHelper/cicAnnotationHelper.ml b/helm/annotationHelper/cicAnnotationHelper.ml
deleted file mode 100644 (file)
index 5ed1fa2..0000000
+++ /dev/null
@@ -1,594 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 03/04/2001                                 *)
-(*                                                                            *)
-(* This is a simple gtk interface to the Coq-like pretty printer cicPp for    *)
-(* cic terms exported in xml. It uses directly the modules cicPp and          *)
-(* cicCcache and indirectly all the other modules (cicParser, cicParser2,     *)
-(* cicParser3, getter).                                                       *)
-(* The syntax is  "gtkInterface[.opt] filename1 ... filenamen" where          *)
-(* filenamei is the path-name of an xml file describing a cic term.           *)
-(* The terms are loaded in cache and then pretty-printed one at a time and    *)
-(* only once, when the user wants to look at it: if the user wants to look at *)
-(* a term again, then the pretty-printed term is showed again, but not        *)
-(* recomputed                                                                 *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* GLOBAL REFERENCES (USED BY CALLBACKS) *)
-
-let annotated_obj = ref None;;      (* reference to a triple option where    *)
-                                    (* the first component is the current    *)
-                                    (* annotated object, the second is the   *)
-                                    (* map from ids to annotated targets and *)
-                                    (* the third is the map from ids to      *)
-                                    (* annotations.                          *)
-let current_id = ref None;;         (* id of the element to annotate *)
-let radio_some_status = ref false;; (* is the radio_some button selected? *)
-let current_url = ref "";;
-
-(* GLOBAL CONSTANTS *)
-
-let helmns = Gdome.domString "http://www.cs.unibo.it/helm";;
-
-(* MISC FUNCTIONS *)
-
-let pathname_of_annuri uristring =
- Configuration.annotations_dir ^
-  Str.replace_first (Str.regexp "^cic:") "" uristring
-;;
-
-let make_dirs dirpath =
- ignore (Unix.system ("mkdir -p " ^ dirpath))
-;;
-
-module UrlManipulator =
- struct
-  exception No_param_dot_CICURI_or_param_dot_annotations_found_in of string;;
-  exception No_param_found_in of string * string;;
-  exception Bad_formed_url of string;;
-
-  let uri_from_url url =
-   let module N = Neturl in
-   let founduri = ref None in
-   let foundann = ref None in
-    let rec find_uri =
-     function
-        [] -> raise (No_param_dot_CICURI_or_param_dot_annotations_found_in url)
-      | he::tl ->
-         match Str.split (Str.regexp "=") he with
-            ["param.CICURI";uri] ->
-              if !founduri <> None then
-               raise (Bad_formed_url url)
-              else
-               begin
-                founduri := Some uri ;
-                if !foundann = None then
-                 find_uri tl
-               end
-          | ["param.annotations";ann] ->
-              if !foundann <> None then
-               raise (Bad_formed_url url)
-              else
-               begin
-                foundann :=
-                 Some
-                  (match ann with
-                      "yes" -> ".ann"
-                    | "no"  -> ""
-                    | _     -> raise (Bad_formed_url url)
-                  ) ;
-                if !founduri = None then
-                 find_uri tl
-               end
-          | _ -> find_uri tl
-    in
-     find_uri
-      (Str.split (Str.regexp "&")
-       (N.url_query ~encoded:true (N.url_of_string N.ip_url_syntax url))) ;
-     match !founduri,!foundann with
-        (Some uri),(Some ann) -> uri ^ ann
-      | _         , _         ->
-         raise (No_param_dot_CICURI_or_param_dot_annotations_found_in url)
-  ;;
-
-  let extractParam param url =
-   let module N = Neturl in
-    let rec find_param =
-     function
-        [] -> raise (No_param_found_in (param,url))
-      | he::tl ->
-         match Str.split (Str.regexp "=") he with
-            [name;value] when name = param -> value
-          | _ -> find_param tl
-    in
-     find_param
-      (Str.split (Str.regexp "&")
-       (N.url_query ~encoded:true (N.url_of_string N.ip_url_syntax url)))
-  ;;
-
-  let set_annotations_to_yes query url =
-   let found =ref false in
-   let rec aux =
-    function
-       [] ->
-        if !found then ""
-        else raise (No_param_found_in ("param.annotations",url))
-     | he::tl ->
-        match Str.split (Str.regexp "=") he with
-           ["param.annotations" as s ; ann] ->
-             found := true ;
-             let auxtl = aux tl in
-              s ^ "=yes" ^
-               (if auxtl = "" then "" else "&" ^ auxtl)
-         | [name ; value] ->
-            let auxtl = aux tl in
-             name ^ "=" ^ value ^
-              (if auxtl = "" then "" else "&" ^ auxtl)
-         | [name] ->
-            let auxtl = aux tl in
-             name ^ "=" ^
-              (if auxtl = "" then "" else "&" ^ auxtl)
-         | _ -> raise (Bad_formed_url url)
-   in
-    aux (Str.split (Str.regexp "&") query)
-  ;;
-
-  let annurl_of_url url =
-   let module N = Neturl in
-    let nurl = N.url_of_string N.ip_url_syntax url in
-     let query = N.url_query ~encoded:true nurl in
-     let newquery = set_annotations_to_yes query url in
-      N.string_of_url (N.modify_url ~encoded:true ~query:newquery nurl)
-  ;;
-end
-
-let get_current_uri () =
- UriManager.uri_of_string (UrlManipulator.uri_from_url !current_url)
-;;
-
-(* CALLBACKS *)
-
-let get_annotated_obj () =
- match !annotated_obj with
-    None   ->
-     let annobj =
-      let (annobj,ids_to_annotations) =
-       match CicCache.get_annobj (get_current_uri ()) with
-          (annobj,None) -> annobj, Hashtbl.create 503
-        | (annobj, Some ids_to_annotations) -> (annobj,ids_to_annotations)
-      in
-       let ids_to_targets = CicXPath.get_ids_to_targets annobj in
-        (annobj,ids_to_targets,ids_to_annotations)
-     in
-      annotated_obj := Some annobj ;
-      annobj
-  | Some annobj -> annobj
-;;
-
-let update_output rendering_window url =
- rendering_window#label#set_text (UrlManipulator.uri_from_url url) ;
- rendering_window#output#load url
-;;
-
-let choose_selection rendering_window (element : Gdome.element option) =
- let module G = Gdome in
-  let rec aux element =
-   if element#hasAttributeNS
-       ~namespaceURI:helmns
-       ~localName:(G.domString "xref")
-   then
-     rendering_window#output#set_selection (Some element)
-   else
-      match element#get_parentNode with
-         None -> assert false
-       (*CSC: OCAML DIVERGES!
-       | Some p -> aux (new G.element_of_node p)
-       *)
-       | Some p -> aux (new Gdome.element_of_node p)
-  in
-   match element with
-     Some x -> aux x
-   | None   -> rendering_window#output#set_selection None
-;;
-
-let annotateb_pressed rendering_window annotation_window () =
- let module G = Gdome in
- match rendering_window#output#get_selection with
-   Some element ->
-    let xpath =
-     ((element : Gdome.element)#getAttributeNS
-     (*CSC: OCAML DIVERGE
-     ((element : G.element)#getAttributeNS
-     *)
-       ~namespaceURI:helmns
-       ~localName:(G.domString "xref"))#to_string
-    in
-     if xpath = "" then
-      rendering_window#label#set_text ("ERROR: No xref found!!!\n")
-     else
-      let annobj = get_annotated_obj () in
-      let (anno, ids_to_targets, ids_to_annotations) = annobj in
-      let annotation = (annotation_window#annotation : GEdit.text) in
-      let id = xpath in
-       current_id := Some id ;
-       let ann = CicXPath.get_annotation ids_to_annotations id in
-        CicAnnotationHinter.create_hints annotation_window ids_to_targets
-         xpath ;
-        annotation#delete_text 0 annotation#length ;
-        begin
-         match ann with
-             None      ->
-              annotation#misc#set_sensitive false ;
-              annotation_window#radio_none#set_active true ;
-              radio_some_status := false
-           | Some ann' ->
-              annotation#insert ann' ;
-              annotation#misc#set_sensitive true ;
-              annotation_window#radio_some#set_active true ;
-              radio_some_status := true
-        end ;
-        GMain.Grab.add (annotation_window#window_to_annotate#coerce) ;
-        annotation_window#show () ;
- | None -> rendering_window#label#set_text ("ERROR: No selection!!!\n")
-;;
-
-let change_annotation ids_to_annotations id ann =
- begin
-  try
-   Hashtbl.remove ids_to_annotations id
-  with
-   Not_found -> ()
- end ;
- match ann with
-    None -> ()
-  | Some ann' -> Hashtbl.add ids_to_annotations id ann'
-;;
-
-(* called when the annotation is confirmed *)
-let save_annotation (annotation : GEdit.text) =
- let module S = Str in
- let module U = UriManager in
-  let (annobj,ids_to_annotations) =
-   match !annotated_obj with
-      None -> assert false
-    | Some (annobj,_,ids_to_annotations) -> annobj,ids_to_annotations
-  in
-   change_annotation ids_to_annotations
-    (match !current_id with
-        Some id -> id
-      | None -> assert false
-    )
-    (if !radio_some_status then
-      Some (annotation#get_chars 0 annotation#length)
-     else
-      None
-    ) ;
-   let uri = get_current_uri () in
-    let annxml =
-     CicAnnotation2Xml.pp_annotation annobj ids_to_annotations uri
-    in
-     make_dirs
-       (pathname_of_annuri (U.buri_of_uri uri)) ;
-     Xml.pp ~quiet:true annxml
-      (Some
-       (pathname_of_annuri (U.string_of_uri (U.annuri_of_uri uri)) ^
-        ".xml"
-       )
-      )
-;;
-
-(* STUFF TO BUILD THE GTK INTERFACE *)
-
-(* Stuff for the widget settings *)
-
-let export_to_postscript (output : GMathView.math_view) () =
- output#export_to_postscript ~filename:"output.ps" ();
-;;
-
-let activate_t1 (output : GMathView.math_view)
- button_set_anti_aliasing button_set_kerning 
- button_set_transparency button_export_to_postscript button_t1 ()
-=
- let is_set = button_t1#active in
-  output#set_font_manager_type
-   (if is_set then `font_manager_t1 else `font_manager_gtk) ;
-  if is_set then
-   begin
-    button_set_anti_aliasing#misc#set_sensitive true ;
-    button_set_kerning#misc#set_sensitive true ;
-    button_set_transparency#misc#set_sensitive true ;
-    button_export_to_postscript#misc#set_sensitive true ;
-   end
-  else
-   begin
-    button_set_anti_aliasing#misc#set_sensitive false ;
-    button_set_kerning#misc#set_sensitive false ;
-    button_set_transparency#misc#set_sensitive false ;
-    button_export_to_postscript#misc#set_sensitive false ;
-   end
-;;
-
-let set_anti_aliasing output button_set_anti_aliasing () =
- output#set_anti_aliasing button_set_anti_aliasing#active
-;;
-
-let set_kerning output button_set_kerning () =
- output#set_kerning button_set_kerning#active
-;;
-
-let set_transparency output button_set_transparency () =
- output#set_transparency button_set_transparency#active
-;;
-
-let changefont output font_size_spinb () =
- output#set_font_size font_size_spinb#value_as_int
-;;
-
-let set_log_verbosity output log_verbosity_spinb () =
- output#set_log_verbosity log_verbosity_spinb#value_as_int
-;;
-
-class settings_window (output : GMathView.math_view)
- sw button_export_to_postscript selection_changed_callback
-=
- let settings_window = GWindow.window ~title:"GtkMathView settings" () in
- let vbox =
-  GPack.vbox ~packing:settings_window#add () in
- let table =
-  GPack.table
-   ~rows:1 ~columns:3 ~homogeneous:false ~row_spacings:5 ~col_spacings:5
-   ~border_width:5 ~packing:vbox#add () in
- let button_t1 =
-  GButton.toggle_button ~label:"activate t1 fonts"
-   ~packing:(table#attach ~left:0 ~top:0) () in
- let button_set_anti_aliasing =
-  GButton.toggle_button ~label:"set_anti_aliasing"
-   ~packing:(table#attach ~left:0 ~top:1) () in
- let button_set_kerning =
-  GButton.toggle_button ~label:"set_kerning"
-   ~packing:(table#attach ~left:1 ~top:1) () in
- let button_set_transparency =
-  GButton.toggle_button ~label:"set_transparency"
-   ~packing:(table#attach ~left:2 ~top:1) () in
- let table =
-  GPack.table
-   ~rows:2 ~columns:2 ~homogeneous:false ~row_spacings:5 ~col_spacings:5
-   ~border_width:5 ~packing:vbox#add () in
- let font_size_label =
-  GMisc.label ~text:"font size:"
-   ~packing:(table#attach ~left:0 ~top:0 ~expand:`NONE) () in
- let font_size_spinb =
-  let sadj =
-   GData.adjustment ~value:14.0 ~lower:5.0 ~upper:50.0 ~step_incr:1.0 ()
-  in
-   GEdit.spin_button 
-    ~adjustment:sadj ~packing:(table#attach ~left:1 ~top:0 ~fill:`NONE) () in
- let log_verbosity_label =
-  GMisc.label ~text:"log verbosity:"
-   ~packing:(table#attach ~left:0 ~top:1) () in
- let log_verbosity_spinb =
-  let sadj =
-   GData.adjustment ~value:0.0 ~lower:0.0 ~upper:3.0 ~step_incr:1.0 ()
-  in
-   GEdit.spin_button 
-    ~adjustment:sadj ~packing:(table#attach ~left:1 ~top:1) () in
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let closeb =
-  GButton.button ~label:"Close"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-object(self)
- method show = settings_window#show
- initializer
-  button_set_anti_aliasing#misc#set_sensitive false ;
-  button_set_kerning#misc#set_sensitive false ;
-  button_set_transparency#misc#set_sensitive false ;
-  (* Signals connection *)
-  ignore(button_t1#connect#clicked
-   ~callback:(activate_t1 output button_set_anti_aliasing button_set_kerning
-    button_set_transparency button_export_to_postscript button_t1)) ;
-  ignore(font_size_spinb#connect#changed (changefont output font_size_spinb)) ;
-  ignore(button_set_anti_aliasing#connect#toggled
-   (set_anti_aliasing output button_set_anti_aliasing));
-  ignore(button_set_kerning#connect#toggled
-   (set_kerning output button_set_kerning)) ;
-  ignore(button_set_transparency#connect#toggled
-   (set_transparency output button_set_transparency)) ;
-  ignore(log_verbosity_spinb#connect#changed
-   (set_log_verbosity output log_verbosity_spinb)) ;
-  ignore(closeb#connect#clicked ~callback:settings_window#misc#hide)
-end;;
-
-(* Main windows *)
-
-class annotation_window output label =
- let window_to_annotate =
-  GWindow.window ~title:"Annotating environment" ~border_width:2 () in
- let hbox1 =
-  GPack.hbox ~packing:window_to_annotate#add () in
- let vbox1 =
-  GPack.vbox ~packing:(hbox1#pack ~padding:5) () in
- let hbox2 =
-  GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in
- let radio_some = GButton.radio_button ~label:"Annotation below"
-  ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5) () in
- let radio_none = GButton.radio_button ~label:"No annotation"
-  ~group:radio_some#group
-  ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5)
-  ~active:true () in
- let annotation = GEdit.text ~editable:true ~width:400 ~height:180
-  ~packing:(vbox1#pack ~padding:5) () in
- let table =
-  GPack.table ~rows:3 ~columns:3 ~packing:(vbox1#pack ~padding:5) () in
- let annotation_hints =
-  Array.init 9
-   (function i ->
-     GButton.button ~label:("Hint " ^ string_of_int i)
-      ~packing:(table#attach ~left:(i mod 3) ~top:(i / 3)) ()
-   ) in
- let vbox2 =
-  GPack.vbox ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in
- let confirmb =
-  GButton.button ~label:"O.K."
-   ~packing:(vbox2#pack ~expand:false ~fill:false ~padding:5) () in
- let abortb =
-  GButton.button ~label:"Abort"
-   ~packing:(vbox2#pack ~expand:false ~fill:false ~padding:5) () in
-object (self)
- method window_to_annotate = window_to_annotate
- method annotation = annotation
- method radio_some = radio_some
- method radio_none = radio_none
- method annotation_hints = annotation_hints
- method output = (output : GMathView.math_view)
- method show () = window_to_annotate#show ()
- initializer
-  (* signal handlers here *)
-  ignore (window_to_annotate#event#connect#delete
-   (fun _ ->
-     window_to_annotate#misc#hide () ;
-     GMain.Grab.remove (window_to_annotate#coerce) ; 
-     true
-   )) ;
-  ignore (confirmb#connect#clicked
-   ~callback:(fun () ->
-     window_to_annotate#misc#hide () ;
-     save_annotation annotation ;
-     GMain.Grab.remove (window_to_annotate#coerce) ;
-     let new_current_uri = UriManager.annuri_of_uri (get_current_uri ()) in
-      Getter.register new_current_uri
-       (Configuration.annotations_url ^
-         Str.replace_first (Str.regexp "^cic:") ""
-          (UriManager.string_of_uri new_current_uri) ^ ".xml"
-       ) ;
-      let new_current_url = UrlManipulator.annurl_of_url !current_url in
-       current_url := new_current_url ;
-       label#set_text (UriManager.string_of_uri new_current_uri) ;
-       output#load new_current_url
-   )) ;
-  ignore (abortb#connect#clicked
-   ~callback:(fun () ->
-     window_to_annotate#misc#hide () ;
-     GMain.Grab.remove (window_to_annotate#coerce)
-   ));
-  ignore (radio_some#connect#clicked
-   ~callback:(fun () -> annotation#misc#set_sensitive true ; radio_some_status := true)) ;
-  ignore (radio_none #connect#clicked
-   ~callback:(fun () ->
-     annotation#misc#set_sensitive false;
-     radio_some_status := false)
-   )
-end;;
-
-class rendering_window annotation_window output (label : GMisc.label) =
- let window =
-  GWindow.window ~title:"MathML viewer" ~border_width:2 () in
- let vbox =
-  GPack.vbox ~packing:window#add () in
- let _ = vbox#pack ~expand:false ~fill:false ~padding:5 label#coerce in
- let scrolled_window0 =
-  GBin.scrolled_window ~border_width:10
-   ~packing:(vbox#pack ~expand:true ~padding:5) () in
- let _ = scrolled_window0#add output#coerce in
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let annotateb =
-  GButton.button ~label:"Annotate"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let settingsb =
-  GButton.button ~label:"Settings"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let button_export_to_postscript =
-  GButton.button ~label:"export_to_postscript"
-  ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let closeb =
-  GButton.button ~label:"Close"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-object(self)
- method label = label
- method output = (output : GMathView.math_view)
- method show () = window#show ()
- initializer
-  button_export_to_postscript#misc#set_sensitive false ;
-
-  (* signal handlers here *)
-  ignore(output#connect#selection_changed (choose_selection self)) ;
-  ignore(closeb#connect#clicked ~callback:(fun _ -> GMain.Main.quit ())) ;
-  ignore(annotateb#connect#clicked
-   ~callback:(annotateb_pressed self annotation_window)) ;
-  let settings_window = new settings_window output scrolled_window0
-   button_export_to_postscript (choose_selection self) in
-  ignore(settingsb#connect#clicked ~callback:settings_window#show) ;
-  ignore(button_export_to_postscript#connect#clicked ~callback:(export_to_postscript output)) ;
-  ignore(window#event#connect#delete (fun _ -> GMain.Main.quit () ; true ))
-end;;
-
-(* MAIN *)
-
-let initialize_everything tmpfile url =
- let module U = Unix in
-  let output = GMathView.math_view ~width:400 ~height:380 ()
-   and label = GMisc.label ~text:"???" () in
-    let annotation_window = new annotation_window output label in
-    let rendering_window =
-     new rendering_window annotation_window output label
-    in
-     rendering_window#show () ;
-     rendering_window#label#set_text (UrlManipulator.uri_from_url url) ;
-     rendering_window#output#load tmpfile ;
-     GMain.Main.main ()
-;;
-
-let _ =
- let filename = ref "" in
- let usage_msg =
-   "\nusage: annotationHelper[.opt] file url\n\n List of options:"
- in
-  Arg.parse []
-   (fun x ->
-     if x = "" then raise (Arg.Bad "Empty filename or URL not allowed") ;
-     if !filename = "" then
-      filename := x
-     else if !current_url = "" then
-      current_url := x
-     else
-      begin
-       prerr_string "More than two arguments provided\n" ;
-       Arg.usage [] usage_msg ;
-       exit (-1)
-      end
-   ) usage_msg ;
-   Getter.getter_url :=
-    Netencoding.Url.decode
-     (UrlManipulator.extractParam "param.getterURL" !current_url) ;
-   initialize_everything !filename !current_url
-;;
diff --git a/helm/annotationHelper/cicAnnotationHinter.ml b/helm/annotationHelper/cicAnnotationHinter.ml
deleted file mode 100644 (file)
index 7cf3cdd..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 14/06/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-let deactivate_hints_from annotation_window n =
- let annotation_hints = annotation_window#annotation_hints in
-  for i = n to Array.length annotation_hints - 1 do
-   annotation_hints.(i)#misc#hide ()
-  done
-;;
-
-(* CSC: orripilante *)
-(* the list of the signal ids *)
-let sig_ids = ref ([] : GtkSignal.id list);;
-
-let disconnect_hint annotation_window buttonno =
- match !sig_ids with
-    id::ids ->
-     annotation_window#annotation_hints.(buttonno)#misc#disconnect id ;
-     sig_ids := ids
-  | _ -> assert false
-;;
-
-(* link_hint annotation_window n label hint *)
-(* set the label of the nth hint button of annotation_window to label *)
-(* and the correspondent hint to hint                                 *)
-let link_hint annotation_window buttonno label hint =
- let button = annotation_window#annotation_hints.(buttonno) in
-  sig_ids :=
-   (button#connect#clicked
-    ~callback:(fun () -> (annotation_window#annotation : GEdit.text)#insert hint)
-   ) :: !sig_ids ;
-  button#misc#show () ;
-  match button#children with
-     [labelw] -> (GMisc.label_cast labelw)#set_text label
-   | _ -> assert false
-;;
-
-exception TooManyHints;;
-
-let link_hints annotation_window a =
- if Array.length a > Array.length annotation_window#annotation_hints then
-  raise TooManyHints ;
- for i = List.length !sig_ids - 1 downto 0 do
-  disconnect_hint annotation_window i
- done ;
- Array.iteri
-  (fun i (label,hint) -> link_hint annotation_window i label hint) a ;
- deactivate_hints_from annotation_window (Array.length a)
-;;
-
-let list_mapi f =
- let rec aux n =
-  function
-     [] -> []
-   | he::tl -> (f n he)::(aux (n + 1) tl)
- in
-  aux 0
-;;
-
-let get_id annterm =
- let module C = Cic in
-  match annterm with
-     C.ARel (id,_,_)
-   | C.AVar (id,_)
-   | C.AMeta (id,_,_)
-   | C.ASort (id,_)
-   | C.AImplicit id
-   | C.ACast (id,_,_)
-   | C.AProd (id,_,_,_)
-   | C.ALambda (id,_,_,_)
-   | C.ALetIn (id,_,_,_)
-   | C.AAppl (id,_)
-   | C.AConst (id,_,_)
-   | C.AMutInd (id,_,_,_)
-   | C.AMutConstruct (id,_,_,_,_)
-   | C.AMutCase (id,_,_,_,_,_,_)
-   | C.AFix (id,_,_)
-   | C.ACoFix (id,_,_) -> id
-;;
-
-let create_hint_from_term annotation_window annterm =
- let module C = Cic in
-  match annterm with
-     C.ARel (id,_,_) ->
-      link_hints annotation_window
-       [| "Binder", "<attribute name = 'binder' id = '" ^ id ^ "'/>" |]
-   | C.AVar (id,_) ->
-      link_hints annotation_window
-       [| "relURI???", "<attribute name = 'relUri' id = '" ^ id ^ "'/>" |]
-   | C.AMeta (id,_,subst) ->
-      let res =
-       Array.append
-        [| "Number", "<attribute name = 'no' id = '" ^ id ^ "'/>" |]
-        (Array.mapi
-          (fun i s ->
-            match s with
-               None ->
-                "Argument " ^ string_of_int i, "_"
-             | Some t ->
-                "Argument " ^ string_of_int i, "<node id ='" ^ get_id t ^ "'/>"
-          ) (Array.of_list subst)
-        )
-      in
-       link_hints annotation_window res
-   | C.ASort (id,_) ->
-      link_hints annotation_window
-       [| "Value", "<attribute name = 'value' id = '" ^ id ^ "'/>" |]
-   | C.AImplicit id ->
-      link_hints annotation_window [| |]
-   | C.ACast (id,bo,ty) ->
-      let boid = get_id bo
-      and tyid = get_id ty in
-       link_hints annotation_window
-        [| "Body", "<node id = '" ^ boid ^ "'/>" ;
-           "Type", "<node id = '" ^ tyid ^ "'/>"
-        |]
-   | C.AProd (id,_,ty,bo) ->
-      let boid = get_id bo
-      and tyid = get_id ty in
-       link_hints annotation_window
-        [| "Binder",
-            "<attribute child = '2' name = 'binder' id = '" ^ id ^ "'/>" ;
-           "Body", "<node id = '" ^ boid ^ "'/>" ;
-           "Type", "<node id = '" ^ tyid ^ "'/>"
-        |]
-   | C.ALambda (id,_,ty,bo) ->
-      let boid = get_id bo
-      and tyid = get_id ty in
-       link_hints annotation_window
-        [| "Binder",
-            "<attribute child = '2' name = 'binder' id = '" ^ id ^ "'/>" ;
-           "Body", "<node id = '" ^ boid ^ "'/>" ;
-           "Type", "<node id = '" ^ tyid ^ "'/>"
-        |]
-   | C.ALetIn (id,_,ty,bo) ->
-      let boid = get_id bo
-      and tyid = get_id ty in
-       link_hints annotation_window
-        [| "Binder",
-            "<attribute child = '2' name = 'binder' id = '" ^ id ^ "'/>" ;
-           "Term", "<node id = '" ^ boid ^ "'/>" ;
-           "Target", "<node id = '" ^ tyid ^ "'/>"
-        |]
-   | C.AAppl (id,args) ->
-      let argsid =
-       Array.mapi
-        (fun i te -> "Argument " ^ string_of_int i, "<node id ='" ^
-          get_id te ^ "'/>")
-        (Array.of_list args)
-      in
-       link_hints annotation_window argsid
-   | C.AConst (id,_,_) ->
-      link_hints annotation_window
-       [| "Uri???", "<attribute name = 'uri' id = '" ^ id ^ "'/>" |]
-   | C.AMutInd (id,_,_,_) ->
-      link_hints annotation_window
-       [| "Uri???", "<attribute name = 'uri' id = '" ^ id ^ "'/>" |]
-   | C.AMutConstruct (id,_,_,_,_) ->
-      link_hints annotation_window
-       [| "Uri???", "<attribute name = 'uri' id = '" ^ id ^ "'/>" |]
-   | C.AMutCase (id,_,_,_,outty,te,pl) ->
-      let outtyid = get_id outty
-      and teid = get_id te
-      and plid =
-       Array.mapi
-        (fun i te -> "Pattern " ^ string_of_int i, "<node id ='" ^
-          get_id te ^ "'/>")
-        (Array.of_list pl)
-      in
-       link_hints annotation_window
-        (Array.append
-         [| "Uri???", "<attribute name = 'uri' id = '" ^ id ^ "'/>" ;
-            "Case Type", "<node id = '" ^ outtyid ^ "'/>" ;
-            "Term", "<node id = '" ^ teid ^ "'/>" ;
-         |]
-         plid)
-   | C.AFix (id,_,funl) ->
-      let funtylid =
-       Array.mapi
-        (fun i (_,_,ty,_) ->
-          "Type " ^ string_of_int i, "<node id ='" ^
-          get_id ty ^ "'/>")
-        (Array.of_list funl)
-      and funbolid =
-       Array.mapi
-        (fun i (_,_,_,bo) ->
-          "Body " ^ string_of_int i, "<node id ='" ^
-          get_id bo ^ "'/>")
-        (Array.of_list funl)
-      and funnamel =
-       Array.mapi
-        (fun i (_,_,_,_) ->
-          "Name " ^ string_of_int i, "<attribute id ='" ^ id ^
-           "' name = 'name' child='" ^ string_of_int i ^ "'/>")
-        (Array.of_list funl)
-      and funrecindexl =
-       Array.mapi
-        (fun i (_,_,_,_) ->
-          "Recursive Index??? " ^ string_of_int i, "<attribute id = '" ^ id ^
-           "' name = 'recIndex' child='" ^ string_of_int i ^ "'/>")
-        (Array.of_list funl)
-      in
-       link_hints annotation_window
-        (Array.concat
-         [ funtylid ;
-           funbolid ;
-           funnamel ;
-           funrecindexl ;
-           [| "NoFun???", "<attribute name = 'noFun' id = '" ^ id ^ "'/>" |]
-         ]
-        )
-   | C.ACoFix (id,_,funl) ->
-      let funtylid =
-       Array.mapi
-        (fun i (_,ty,_) ->
-          "Type " ^ string_of_int i, "<node id ='" ^
-          get_id ty ^ "'/>")
-        (Array.of_list funl)
-      and funbolid =
-       Array.mapi
-        (fun i (_,_,bo) ->
-          "Body " ^ string_of_int i, "<node id ='" ^
-          get_id bo ^ "'/>")
-        (Array.of_list funl)
-      and funnamel =
-       Array.mapi
-        (fun i (_,_,_) ->
-          "Name " ^ string_of_int i, "<attribute id ='" ^ id ^
-           "' name = 'name' child='" ^ string_of_int i ^ "'/>")
-        (Array.of_list funl)
-      in
-       link_hints annotation_window
-        (Array.concat
-         [ funtylid ;
-           funbolid ;
-           funnamel ;
-           [| "NoFun???", "<attribute name = 'noFun' id = '" ^ id ^ "'/>" |]
-         ]
-        )
-;;
-
-(*CSC: da riscrivere completamente eliminando il paciugo degli array - liste *)
-let create_hint_from_obj annotation_window annobj =
- let module C = Cic in
-  match annobj with
-     C.ADefinition (id,_,bo,ty,_) ->
-      let boid = get_id bo
-      and tyid = get_id ty in
-       link_hints annotation_window
-        [| "Name", "<attribute name = 'name' id = '" ^ id ^ "'/>" ;
-           "Ingredients", "<attribute name = 'params' id = '" ^ id ^ "'/>" ;
-           "Body", "<node id = '" ^ boid ^ "'/>" ;
-           "Type", "<node id = '" ^ tyid ^ "'/>"
-        |]
-   | C.AAxiom (id,_,ty,_) ->
-      let tyid = get_id ty in
-       link_hints annotation_window
-        [| "Name", "<attribute name = 'name' id = '" ^ id ^ "'/>" ;
-           "Ingredients", "<attribute name = 'params' id = '" ^ id ^ "'/>" ;
-           "Type", "<node id = '" ^ tyid ^ "'/>"
-        |]
-   | C.AVariable (id,_,bo,ty) ->
-      let tyid = get_id ty in
-       link_hints annotation_window
-        (match bo with
-            None ->
-             [| "Name", "<attribute name = 'name' id = '" ^ id ^ "'/>" ;
-                "Type", "<node id = '" ^ tyid ^ "'/>"
-             |]
-          | Some bo ->
-             let boid = get_id bo in
-              [| "Name", "<attribute name = 'name' id = '" ^ id ^ "'/>" ;
-                 "Body", "<node id = '" ^ boid ^ "'/>" ;
-                 "Type", "<node id = '" ^ tyid ^ "'/>"
-              |]
-        )
-   | C.ACurrentProof (id,_,conjs,bo,ty) ->
-      let boid = get_id bo
-      and tyid = get_id ty
-      and conjsid = List.map (fun (id,_,_,_) -> id) conjs in
-       link_hints annotation_window
-(*CSC: never tested since the introduction of the new Metas *)
-        (Array.append
-          [| "Name", "<attribute name = 'name' id = '" ^ id ^ "'/>" ;
-             "Ingredients", "<attribute name = 'params' id = '" ^ id ^ "'/>" ;
-             "Body", "<node id = '" ^ boid ^ "'/>" ;
-             "Type", "<node id = '" ^ tyid ^ "'/>"
-          |]
-          (Array.mapi
-            (fun i id ->
-              "Conjecture " ^ string_of_int i, "<node id = '" ^ id ^ "'/>"
-            ) (Array.of_list conjsid)
-          )
-        )
-   | C.AInductiveDefinition (id,itl,_,_) ->
-      let itlids =
-       List.map
-        (fun (_,_,arity,cons) ->
-          get_id arity,
-          List.map (fun (_,ty,_) -> get_id ty) cons
-        ) itl
-      in
-       link_hints annotation_window
-        (Array.concat
-          [
-           [| "Ingredients","<attribute name = 'params' id = '" ^ id ^ "'/>" |];
-           (Array.mapi
-             (fun i _ ->
-               "Type Name " ^ string_of_int i,
-               "<attribute name = 'name' child = '" ^ string_of_int i ^
-                "' id = '" ^ id ^ "'/>"
-             ) (Array.of_list itlids)
-           ) ;
-           (Array.mapi
-             (fun i (id,_) ->
-               "Type " ^ string_of_int i, "<node id = '" ^ id ^ "'/>"
-             ) (Array.of_list itlids)
-           ) ;
-           (Array.concat
-            (list_mapi
-             (fun i (_,consid) ->
-              (Array.mapi
-                (fun j _ ->
-                  "Constructor Name " ^ string_of_int i ^ " " ^ string_of_int j,
-                  "<attribute name = 'name' id = '" ^ id ^ 
-                   "' child = '" ^ string_of_int i ^ "' grandchild = '" ^
-                   string_of_int j ^ "'/>"
-                ) (Array.of_list consid)
-              ) ;
-             ) itlids
-            )
-           ) ;
-           (Array.concat
-            (list_mapi
-             (fun i (_,consid) ->
-              (Array.mapi
-                (fun j id ->
-                  "Constructor " ^ string_of_int i ^ " " ^ string_of_int j,
-                  "<node id = '" ^ id ^ "'/>"
-                ) (Array.of_list consid)
-              ) ;
-             ) itlids
-            )
-           )
-          ]
-        )
-;;
-
-exception IdUnknown of string;;
-
-let create_hints annotation_window ids_to_targets xpath =
- try
-  match Hashtbl.find ids_to_targets xpath with
-     Cic.Object annobj -> create_hint_from_obj annotation_window annobj
-   | Cic.Term annterm -> create_hint_from_term annotation_window annterm
-(*CSC: never tested since the introduction of the new Metas *)
-   | Cic.Hypothesis _
-   | Cic.Conjecture _ -> assert false
- with
-  Not_found -> raise (IdUnknown xpath)
-;;
diff --git a/helm/annotationHelper/cicAnnotationHinter.mli b/helm/annotationHelper/cicAnnotationHinter.mli
deleted file mode 100644 (file)
index 8cfc04c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 29/11/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-val create_hints :
-  < annotation : GEdit.text;
-    annotation_hints : < children : < as_widget : 'a Gtk.obj; .. > list;
-                         connect : < clicked : callback:(unit -> unit) -> GtkSignal.id;
-                                     .. >;
-                         misc : < disconnect : GtkSignal.id -> 'b;
-                                  hide : unit -> 'c; show : unit -> 'd; .. >;
-                         .. >
-                       array;
-    .. > ->
-  (Cic.id, Cic.anntarget) Hashtbl.t -> string -> unit
diff --git a/helm/cgi/mkcontrol.pl b/helm/cgi/mkcontrol.pl
deleted file mode 100755 (executable)
index e314aa7..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/perl
-
-# First of all, let's load HELM configuration
-use Env;
-my $HELM_LIB_DIR = $ENV{"HELM_LIB_DIR"};
-# this should be the only fixed constant
-my $DEFAULT_HELM_LIB_DIR = "/projects/helm/on-line/local/lib/helm";
-if (defined ($HELM_LIB_DIR)) {
-   $HELM_LIB_PATH = $HELM_LIB_DIR."/configuration.pl";
-} else {
-   $HELM_LIB_PATH = $DEFAULT_HELM_LIB_DIR."/configuration.pl";
-}
-
-# next require defines: $helm_dir, $html_link, $dtd_dir, $uris_dbm
-require $HELM_LIB_PATH;
-
-use CGI;
-
-$cgi = new CGI($ENV{"REQUEST_URL"});
-$mode = $cgi->param('mode');
-$cicuri = $cgi->param('cicuri');
-$theoryuri = $cgi->param('theoryuri');
-$topurl = $cgi->param('topurl');
-$processorURL = $cgi->param('processorURL');
-$getterURL = $cgi->param('getterURL');
-($mode1,$mode2,$mode3,$mode4,$mode5) = split(/,/, $mode);
-$natural = "checked" if ($mode4 eq "yes");
-$annotations = "checked" if ($mode5 eq "yes");
-if ($mode1 eq "raw") {
-   $format_raw = "selected";
-} else {
-   $format_processed = "selected";
-}
-
-print <<EOT;
-Content-type: text/html
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-"http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head>
-<title>Control panel</title>
-<script language="JavaScript" src="http://phd.cs.unibo.it/helm/javascript/utils.js">
-<script language="JavaScript" src="http://phd.cs.unibo.it/helm/javascript/utils.js">
-<script language="JavaScript" src="http://phd.cs.unibo.it/helm/javascript/control.js">
-</script>
-</head>
-<body bgcolor="#ffffff" text="#000000">
-<form>
-<table>
-  <tr>
-    <td>
-      <b>Format</b>:
-    </td>
-    <td>
-      <select name="output" onChange="updateOutput(this,document.forms[0].format)">
-        <option value="processed" $format_processed>Processed</option>
-        <option value="raw" $format_raw>Raw</option>
-      </select>
-    </td>
-    <td>
-      <select name="format" onChange="updateFormat(this)">
-EOT
-    if ($mode1 eq "raw") {
-       $tmp = "output_".$mode2;
-       $$tmp="selected";
-       print <<EOT;
-        <option value="cic" $output_cic>CIC</option>
-        <option value="zcic" $output_zcic>CIC GZipped</option>
-EOT
-    } else {
-       $tmp = "output_".$mode3;
-       $$tmp="selected";
-       print <<EOT;
-        <option value="html" $output_html>HTML</option>
-        <option value="mml_cont" $output_mml_cont>MathML Content</option>
-        <option value="mml_pres" $output_mml_pres>MathML Presentation</option>
-EOT
-    }
-print <<EOT;
-      </select>
-    </td>
-    <td>
-     <a target="_top" href="$topurl?mode=$mode&cicuri=$cicuri&theoryuri=$theoryuri&processorURL=$processorURL&getterURL=$getterURL">Reload</a><br>
-     (do it also before attempting to take a link to the current page)
-     <script>
-       top.processorURL = getParam('processorURL');
-       top.getterURL = getParam('getterURL');
-       top.topurl = getParam('topurl');
-       top.mode = getParam('mode');
-       top.cicuri = getParam('cicuri');
-       top.theoryuri = getParam('theoryuri');
-     </script>
-    </td>
-  </tr>
-  <tr>
-    <td colspan="3">
-      <input type="checkbox" $natural onClick="updateNatural(this)">&nbsp;Natural Language</input>
-      <input type="checkbox" $annotations onClick="updateAnnotations(this)">&nbsp;Annotations</input>
-    </td>
-    <td>
-     <a target="_top" href="../html/index.html?mode=$mode&cicuri=$cicuri&theoryuri=$theoryuri&processorURL=$processorURL&getterURL=$getterURL">Configuration panel</a>
-    </td>
-  </tr>
-</table>
-</form>
-</body>
-</html>
-EOT
diff --git a/helm/cgi/mkheader.pl b/helm/cgi/mkheader.pl
deleted file mode 100755 (executable)
index b3db1cf..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/perl
-
-# First of all, let's load HELM configuration
-use Env;
-my $HELM_LIB_DIR = $ENV{"HELM_LIB_DIR"};
-# this should be the only fixed constant
-my $DEFAULT_HELM_LIB_DIR = "/projects/helm/on-line/local/lib/helm";
-if (defined ($HELM_LIB_DIR)) {
-   $HELM_LIB_PATH = $HELM_LIB_DIR."/configuration.pl";
-} else {
-   $HELM_LIB_PATH = $DEFAULT_HELM_LIB_DIR."/configuration.pl";
-}
-
-# next require defines: $helm_dir, $html_link, $dtd_dir, $uris_dbm
-require $HELM_LIB_PATH;
-
-use CGI;
-
-$cgi = new CGI($ENV{"REQUEST_URL"});
-$uri = $cgi->param('uri');
-
-print <<EOT;
-Content-type: text/html
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-"http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head>
-<title>Control panel</title>
-<script language="JavaScript" src="http://phd.cs.unibo.it/helm/javascript/control.js">
-</script>
-</head>
-<body bgcolor="#ffffff" text="#000000">
-<table width="100%">
-<tr>
- <td width="50%">
-  <font size="+3" face="Helvetica,Arial,sans-serif"><b>Index of $uri</b></font>
-  <hr noshade align="left" width="80%">
- </td>
-</tr>
-</table>
-</body>
-</html>
-EOT
diff --git a/helm/cgi/mkindex.pl b/helm/cgi/mkindex.pl
deleted file mode 100755 (executable)
index 955d6d8..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/perl
-
-# First of all, let's load HELM configuration
-use Env;
-my $HELM_LIB_DIR = $ENV{"HELM_LIB_DIR"};
-# this should be the only fixed constant
-my $DEFAULT_HELM_LIB_DIR = "/projects/helm/on-line/local/lib/helm";
-if (defined ($HELM_LIB_DIR)) {
-   $HELM_LIB_PATH = $HELM_LIB_DIR."/configuration.pl";
-} else {
-   $HELM_LIB_PATH = $DEFAULT_HELM_LIB_DIR."/configuration.pl";
-}
-
-# next require defines: $helm_dir, $html_link, $dtd_dir, $uris_dbm
-require $HELM_LIB_PATH;
-
-#use URI::Escape;
-use CGI;
-
-$cgi = new CGI($ENV{"REQUEST_URL"});
-
-$mode      = $cgi->param('mode');
-$cicuri    = $cgi->param('cicuri');
-$theoryuri = $cgi->param('theoryuri');
-$processorURL = $cgi->param('processorURL');
-$getterURL = $cgi->param('getterURL');
-$topurl    = $cgi->url();
-
-print <<EOT;
-Content-type: text/html
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-"http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head>
- <title>Index of $cicuri and $theoryuri</title>
-</head>
-<frameset rows="18%,*" border="0" scrolling="no">
-  <frame src="mkcontrol.pl?topurl=$topurl&mode=$mode&cicuri=$cicuri&theoryuri=$theoryuri&processorURL=$processorURL&getterURL=$getterURL" name="control"/>
-  <frameset cols="50%,50%" border="0" scrolling="no">
-     <frameset rows="11%,*" border="0" scrolling="no">
-        <frame src="mkheader.pl?uri=$theoryuri" name="theoryheader"/>
-        <frame src="mkindextheory.pl?theoryuri=$theoryuri&getterURL=$getterURL" name="theoryresult"/>
-     </frameset>
-     <frameset rows="11%,*" border="0" scrolling="no">
-        <frame src="mkheader.pl?uri=$cicuri" name="cicheader"/>
-        <frame src="mkindexcic.pl?cicuri=$cicuri&getterURL=$getterURL" name="cicresult"/>
-     </frameset>
-  </frameset>
-</frameset>
-</html>
-EOT
diff --git a/helm/cgi/mkindexcic.pl b/helm/cgi/mkindexcic.pl
deleted file mode 100755 (executable)
index a31f5ec..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/perl
-
-# First of all, let's load HELM configuration
-use Env;
-my $HELM_LIB_DIR = $ENV{"HELM_LIB_DIR"};
-# this should be the only fixed constant
-my $DEFAULT_HELM_LIB_DIR = "/projects/helm/on-line/local/lib/helm";
-if (defined ($HELM_LIB_DIR)) {
-   $HELM_LIB_PATH = $HELM_LIB_DIR."/configuration.pl";
-} else {
-   $HELM_LIB_PATH = $DEFAULT_HELM_LIB_DIR."/configuration.pl";
-}
-
-# next require defines: $helm_dir, $html_link, $dtd_dir, $uris_dbm
-require $HELM_LIB_PATH;
-
-use URI::Escape;
-use LWP::UserAgent;
-use CGI;
-
-my $cgi = new CGI($ENV{"REQUEST_URL"});
-$uri = $cgi->param('cicuri');
-$getterURL = $cgi->param('getterURL');
-$uri =~ s/(.*)\/$/$1/; # Remove a final slash if present
-$uri .= "/"; # Put a final slash
-$myurl = $cgi->url();
-
-$cont = ""; # modified by side-effect by &callback
-my $ua = LWP::UserAgent->new;
-my $request = HTTP::Request->new(GET => $getterURL."ls?format=txt&baseuri=".$uri);
-my $response = $ua->request($request, \&callback);
-@filenames = split(/\n/, $cont);
-
-my $uridotdot = $uri;
-$uridotdot =~ s/(.*)\/.+/$1/;
-if ($uri ne "cic:/") {
- # Let's print the link to the parent directory
- $output = <<EOT;
-<tr>
-<td><img border="0" src="/icons/back.gif" alt="[BACK]"></td>
-<td><a href="$myurl" onClick="top.cicuri='$uridotdot'; refreshReload(); refreshCICHeader(); this.search='?cicuri=$uridotdot&getterURL=$getterURL';" onMouseOver="window.status='$uridotdot'; return true">Parent Directory</a></td>
-</tr>
-EOT
-}
-
-foreach $i (@filenames) {
-   my ($type,$name,$flags) = split(/, /, $i);
-   my ($flagscic, $flagstypes) = split(/,/, $flags);
-   $flagscic =~ s/^<(.*)/$1/;
-   $flagstypes =~ s/(.*)>$/$1/;
-   if ($type eq "dir") {
-      $output .= <<EOT;
-<tr>
-<td><img border="0" src="/icons/folder.gif" alt="[DIR]"></td>
-<td><a href="$myurl" onClick="top.cicuri='$uri$name'; refreshReload(); refreshCICHeader(); this.search='?cicuri=$uri$name&getterURL=$getterURL';" onMouseOver="window.status='$uri$name'; return true">$name</a></td>
-</tr>
-</tr>
-EOT
-   } elsif ($type eq "object") {
-        if ($name =~ /\.(con|var|ind)$/) {
-           # cic file
-            $output .= <<EOT;
-<tr>
-<td><img border="0" src="/icons/generic.red.gif" alt="[DIR]"></td>
-<td><a href="" target="cic" onClick="this.href=makeURL('cic','$uri$name','$flagscic','$flagstypes')" onMouseOver="window.status='$uri$name'; return true">$name</a>
-</tr>
-EOT
-         } else {
-            $output .= <<EOT;
-<tr>
-<td><img border="0" src="/icons/unknown.gif" alt="[DIR]"></td>
-<td>$name</td>
-</tr>
-EOT
-        }
-   } else {
-      $output .= <<EOT;
-<tr>
-<td><img border="0" src="/icons/burst.gif" alt="[DIR]"></td>
-<td>$name</td>
-</tr>
-EOT
-   }
-}
-
-print <<EOT;
-Content-type: text/html
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-"http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head>
-<title>Index of $uri</title>
-<script language="JavaScript" src="http://phd.cs.unibo.it/helm/javascript/control.js">
-</script>
-</head>
-<body bgcolor="#ffffff" text="#000000">
-<table>
-$output
-</table>
-<hr noshade align="left" width="80%">
-</body>
-</html>
-EOT
-
-#================================
-
-sub callback
-{
- my ($data) = @_;
- $cont .= $data;
-}
diff --git a/helm/cgi/mkindextheory.pl b/helm/cgi/mkindextheory.pl
deleted file mode 100755 (executable)
index 424f688..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/perl
-
-# First of all, let's load HELM configuration
-use Env;
-my $HELM_LIB_DIR = $ENV{"HELM_LIB_DIR"};
-# this should be the only fixed constant
-my $DEFAULT_HELM_LIB_DIR = "/projects/helm/on-line/local/lib/helm";
-if (defined ($HELM_LIB_DIR)) {
-   $HELM_LIB_PATH = $HELM_LIB_DIR."/configuration.pl";
-} else {
-   $HELM_LIB_PATH = $DEFAULT_HELM_LIB_DIR."/configuration.pl";
-}
-
-# next require defines: $helm_dir, $html_link, $dtd_dir, $uris_dbm
-require $HELM_LIB_PATH;
-
-use URI::Escape;
-use LWP::UserAgent;
-use CGI;
-
-my $cgi = new CGI($ENV{"REQUEST_URL"});
-$uri = $cgi->param('theoryuri');
-$getterURL = $cgi->param('getterURL');
-$uri =~ s/(.*)\/$/$1/; # Remove a final slash if present
-$uri .= "/"; # Put a final slash
-$myurl = $cgi->url();
-
-$cont = ""; # modified by side-effect by &callback
-my $ua = LWP::UserAgent->new;
-my $request = HTTP::Request->new(GET => $getterURL."ls?format=txt&baseuri=".$uri);
-my $response = $ua->request($request, \&callback);
-@filenames = split(/\n/, $cont);
-
-my $uridotdot = $uri;
-$uridotdot =~ s/(.*)\/.+/$1/;
-if ($uri ne "theory:/") {
- # Let's print the link to the parent directory
- $output = <<EOT;
-<tr>
-<td><img border="0" src="/icons/back.gif" alt="[BACK]"></td>
-<td><a href="$myurl" onClick="top.theoryuri='$uridotdot'; refreshReload(); refreshTheoryHeader(); this.search='?theoryuri=$uridotdot&getterURL=$getterURL';" onMouseOver="window.status='$uridotdot'; return true">Parent Directory</a></td>
-</tr>
-EOT
-}
-
-foreach $i (@filenames) {
-   my ($type,$name,$flags) = split(/, /, $i);
-   my ($flagscic, $flagstypes) = split(/,/, $flags);
-   $flagscic =~ s/^<(.*)/$1/;
-   $flagstypes =~ s/(.*)>$/$1/;
-   if ($type eq "dir") {
-      $output .= <<EOT;
-<tr>
-<td><img border="0" src="/icons/folder.gif" alt="[DIR]"></td>
-<td><a href="$myurl" onClick="top.theoryuri='$uri$name'; refreshReload(); refreshTheoryHeader(); this.search='?theoryuri=$uri$name&getterURL=$getterURL';" onMouseOver="window.status='$uri$name'; return true">$name</a></td>
-</tr>
-EOT
-   } elsif ($type eq "object") {
-        if ($name =~ /\.theory$/) {
-           # theory file
-           $output .= <<EOT;
-<tr>
-<td><img border="0" src="/icons/generic.red.gif" alt="[DIR]"></td>
-<td><a href="" target="theory" onClick="this.href=makeURL('theory','$uri$name','$flagscic','$flagstypes')" onMouseOver="window.status='$uri$name'; return true">$name</a>
-</tr>
-EOT
-         } else {
-            $output .= <<EOT;
-<tr>
-<td><img border="0" src="/icons/unknown.gif" alt="[DIR]"></td>
-<td>$name</td>
-</tr>
-EOT
-        }
-   } else {
-      $output .= <<EOT;
-<tr>
-<td><img border="0" src="/icons/burst.gif" alt="[DIR]"></td>
-<td>$name</td>
-</tr>
-EOT
-   }
-}
-
-print <<EOT;
-Content-type: text/html
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-"http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head>
-<title>Index of $uri</title>
-<script language="JavaScript" src="http://phd.cs.unibo.it/helm/javascript/control.js">
-</script>
-</head>
-<body bgcolor="#ffffff" text="#000000">
-<table>
-$output
-</table>
-<hr noshade align="left" width="80%">
-</body>
-</html>
-EOT
-
-#================================
-
-sub callback
-{
- my ($data) = @_;
- $cont .= $data;
-}
diff --git a/helm/configuration/.cvsignore b/helm/configuration/.cvsignore
deleted file mode 100644 (file)
index d8a7ecb..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Makefile configure config.log config.cache config.status
-helm-config
-helm_configuration.spec
diff --git a/helm/configuration/AUTHORS b/helm/configuration/AUTHORS
deleted file mode 100644 (file)
index 0ceb16f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-Andrea Asperti <asperti@cs.unibo.it>
-Luca Padovani <luca.padovani@cs.unibo.it>
-Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
-Irene Schena <schena@cs.unibo.it>
diff --git a/helm/configuration/COPYING b/helm/configuration/COPYING
deleted file mode 100644 (file)
index d60c31a..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   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.
-\f
-                   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.)
-\f
-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.
-\f
-  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.
-\f
-  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
-\f
-           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
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <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 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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/helm/configuration/ChangeLog b/helm/configuration/ChangeLog
deleted file mode 100644 (file)
index 20c36b4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-28/12/2000: First alpha release
diff --git a/helm/configuration/Makefile.in b/helm/configuration/Makefile.in
deleted file mode 100644 (file)
index 00c3893..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-
-HELM_BIN_DIR=@HELM_BIN_DIR@
-HELM_LIB_DIR=@HELM_LIB_DIR@
-HELM_ETC_DIR=@HELM_ETC_DIR@
-HELM_SHARE_DIR=@HELM_SHARE_DIR@
-HELM_VAR_DIR=@HELM_VAR_DIR@
-HELM_DTD_DIR=@HELM_DTD_DIR@
-HELM_STYLE_DIR=@HELM_STYLE_DIR@
-HELM_LIBRARY_DIR=@HELM_LIBRARY_DIR@
-
-all:
-
-install:
-       mkdir -p $(HELM_BIN_DIR)
-       cp helm-config $(HELM_BIN_DIR)
-       mkdir -p $(HELM_LIB_DIR)
-       mkdir -p $(HELM_ETC_DIR)
-       mkdir -p $(HELM_SHARE_DIR)
-       mkdir -p $(HELM_VAR_DIR)
-       chmod 777 $(HELM_VAR_DIR)
-       mkdir -p $(HELM_LIBRARY_DIR)
-       chmod 777 $(HELM_LIBRARY_DIR)
-       mkdir -p $(HELM_DTD_DIR)
-       mkdir -p $(HELM_STYLE_DIR)
-       cp lib/configuration.pl $(HELM_LIB_DIR)
-       cp etc/configuration.dtd etc/configuration.xml etc/helm-dictionary.xml \
-         etc/helm-font-configuration.xml etc/helm-math-engine-configuration.xml\
-         $(HELM_ETC_DIR)
-       cp library/servers.txt library/urls_of_uris.db $(HELM_VAR_DIR)
-       chmod 666 $(HELM_VAR_DIR)/servers.txt \
-         $(HELM_VAR_DIR)/urls_of_uris.db
-
-clean:
-
-distclean:
-       rm -f Makefile configure config.log config.cache config.status \
-        etc/configuration.xml etc/helm-math-engine-configuration.xml \
-        lib/configuration.pl helm-config helm_configuration.spec
-
-dist:  clean
-       rm -rf ../@PACKAGE@-@VERSION@
-       mkdir ../@PACKAGE@-@VERSION@
-       cp -r * ../@PACKAGE@-@VERSION@
-       (cd .. ; tar cvfz @PACKAGE@-@VERSION@.tar.gz @PACKAGE@-@VERSION@ ; rm -rf @PACKAGE@-@VERSION@)
-
-.PHONY: all install distclean
-
diff --git a/helm/configuration/NEWS b/helm/configuration/NEWS
deleted file mode 100644 (file)
index 20c36b4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-28/12/2000: First alpha release
diff --git a/helm/configuration/README b/helm/configuration/README
deleted file mode 100644 (file)
index 9f6eb35..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-NOTE: This is the first alpha release of project HELM.
-
-HELM (Hypertextual Electronic Library of Mathematics) is a project aimed
-at the creation of tools for the development and exploitation of a huge
-distributed library of formal mathematical knowledge. This package holds
-the configuration files shared by all this tools.
-
-For more information see http://www.cs.unibo.it/helm
diff --git a/helm/configuration/config.cache.pkg b/helm/configuration/config.cache.pkg
deleted file mode 100644 (file)
index 434e570..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# 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.  It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already.  You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-helm_cv_HELM_VAR_DIR=${helm_cv_HELM_VAR_DIR='/var/local/helm'}
diff --git a/helm/configuration/configure.in b/helm/configuration/configure.in
deleted file mode 100644 (file)
index 03c923e..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-AC_INIT(etc/configuration.xml.in)
-
-PACKAGE=helm_configuration
-
-HELM_MAJOR_VERSION=0
-HELM_MINOR_VERSION=0
-HELM_MICRO_VERSION=2
-HELM_VERSION=$HELM_MAJOR_VERSION.$HELM_MINOR_VERSION.$HELM_MICRO_VERSION
-VERSION=$HELM_VERSION
-
-DEFAULT_HELM_VAR_DIR=/var/local/helm
-DEFAULT_HELM_TMP_DIR=/tmp
-
-AC_ARG_ENABLE(
-       defaults,
-       [  --enable-defaults[=ARG] if yes then use defaults (don't ask user) [default=auto]],
-       USE_DEFAULTS=$enableval,
-       USE_DEFAULTS=auto
-)
-
-if test "x$prefix" != xNONE; then
-  RESOLVED_PREFIX=$prefix
-else
-  RESOLVED_PREFIX=$ac_default_prefix
-fi
-
-if test "x$exec_prefix" != xNONE; then
-  RESOLVED_EXEC_PREFIX=$exec_prefix
-else
-  RESOLVED_EXEC_PREFIX=$RESOLVED_PREFIX
-fi
-
-dnl General
-HELM_BIN_DIR=$RESOLVED_EXEC_PREFIX/bin
-HELM_LIB_DIR=$RESOLVED_EXEC_PREFIX/lib/helm
-HELM_ETC_DIR=$RESOLVED_PREFIX/etc/helm
-HELM_SHARE_DIR=$RESOLVED_PREFIX/share/helm
-
-dnl Checking for the variable directory
-if test $USE_DEFAULTS != yes; then
-       echo
-       echo "Now you have to choose a suitable directory for variable files."
-       echo "Normally, this directory would be something like /var/local/helm, you"
-       echo "have to be sure that the directory (and the subdirectories in it)"
-       echo "is world-writable."
-       echo
-       echo -n "[[$DEFAULT_HELM_VAR_DIR]] ? "
-       read HELM_VAR_DIR
-       echo
-       if test x$HELM_VAR_DIR = x; then
-               HELM_VAR_DIR="/var/local/helm"
-       fi
-else
-       HELM_VAR_DIR=$DEFAULT_HELM_VAR_DIR
-fi
-
-AC_MSG_CHECKING(for HELM variable dir)
-AC_MSG_RESULT($HELM_VAR_DIR)
-
-dnl Checking for the /tmp directory
-DEFAULTS=$USE_DEFAULTS
-if test $DEFAULTS = auto; then
-       if test -d $DEFAULT_HELM_TMP_DIR ; then
-               HELM_TMP_DIR=$DEFAULT_HELM_TMP_DIR
-       else
-               DEFAULTS=no
-       fi
-fi
-
-if test $DEFAULTS = no; then
-       echo
-       echo "Please, tell me the name of a directory which can be used to store"
-       echo "temporary files (normally it is something like /tmp)"
-       echo
-       echo -n "[[$DEFAULT_HELM_TMP_DIR]]"
-       read HELM_TMP_DIR
-       echo
-       if test x$HELM_TMP_DIR = x; then
-               HELM_TMP_DIR=$DEFAULT_HELM_TMP_DIR
-       fi
-else
-       HELM_TMP_DIR=$DEFAULT_HELM_TMP_DIR
-fi
-
-AC_MSG_CHECKING(for $HELM_TMP_DIR)
-if test ! -d $HELM_TMP_DIR; then
-       AC_MSG_RESULT(no)
-       AC_MSG_ERROR(please check your installation)
-fi
-AC_MSG_RESULT(ok)
-
-dnl Checks for GtkMathView
-AC_CHECK_PROG(HAVE_GTKMATHVIEW_CONFIG, gtkmathview-config, yes, no)
-if test $HAVE_GTKMATHVIEW_CONFIG = no; then
-   AC_MSG_ERROR(Could not find gtkmathview-config)
-fi
-GTKMATHVIEW_PREFIX=`gtkmathview-config --prefix`
-
-AC_CACHE_CHECK(
-  for dictionary.xml,
-  helm_cv_GTKMATHVIEW_DICTIONARY_PATH,
-  helm_cv_GTKMATHVIEW_DICTIONARY_PATH=$GTKMATHVIEW_PREFIX/share/gtkmathview/dictionary.xml
-  if test ! -f $helm_cv_GTKMATHVIEW_DICTIONARY_PATH; then
-    read helm_cv_GTKMATHVIEW_DICTIONARY_PATH
-  fi
-)
-GTKMATHVIEW_DICTIONARY_PATH=$helm_cv_GTKMATHVIEW_DICTIONARY_PATH
-
-AC_CACHE_CHECK(
-  for font-configuration.xml,
-  helm_cv_GTKMATHVIEW_FONT_CONFIGURATION_PATH,
-  helm_cv_GTKMATHVIEW_FONT_CONFIGURATION_PATH=$GTKMATHVIEW_PREFIX/share/gtkmathview/font-configuration.xml
-  if test ! -f $helm_cv_GTKMATHVIEW_FONT_CONFIGURATION_PATH; then
-    read helm_cv_GTKMATHVIEW_FONT_CONFIGURATION_PATH
-  fi
-)
-GTKMATHVIEW_FONT_CONFIGURATION_PATH=$helm_cv_GTKMATHVIEW_FONT_CONFIGURATION_PATH
-
-AC_CACHE_CHECK(
-  for t1lib configuration file,
-    helm_cv_GTKMATHVIEW_T1_CONFIG_FILE,
-    helm_cv_GTKMATHVIEW_T1_CONFIG_FILE=$GTKMATHVIEW_PREFIX/share/gtkmathview/t1.config
-    if test ! -f $helm_cv_GTKMATHVIEW_T1_CONFIG_FILE; then
-      read GTKMATHVIEW_T1_CONFIG_FILE
-    fi
-)
-GTKMATHVIEW_T1_CONFIG_FILE=$helm_cv_GTKMATHVIEW_T1_CONFIG_FILE
-
-HELM_DICTIONARY_PATH=$HELM_ETC_DIR/helm-dictionary.xml
-HELM_FONT_CONFIGURATION_PATH=$HELM_ETC_DIR/helm-font-configuration.xml
-
-dnl Only for HELM XML configuration
-HELM_LIBRARY_DIR=$HELM_VAR_DIR/library
-HELM_SERVERS_FILE=$HELM_VAR_DIR/servers.txt
-HELM_URIS_DBM=$HELM_VAR_DIR/urls_of_uris.db
-
-dnl CSC: FIXME: getters should download the DTDs
-HELM_DTD_DIR=$HELM_SHARE_DIR/dtd
-HELM_STYLE_DIR=$HELM_SHARE_DIR/style
-
-dnl HELM prefixes
-AC_SUBST(RESOLVED_PREFIX)
-AC_SUBST(RESOLVED_EXEC_PREFIX)
-
-dnl HELM version
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-
-dnl HELM directories
-AC_SUBST(HELM_BIN_DIR)
-AC_SUBST(HELM_LIB_DIR)
-AC_SUBST(HELM_ETC_DIR)
-AC_SUBST(HELM_SHARE_DIR)
-AC_SUBST(HELM_VAR_DIR)
-AC_SUBST(HELM_TMP_DIR)
-
-dnl HELM download directory
-AC_SUBST(HELM_LIBRARY_DIR)
-
-dnl HELM servers
-AC_SUBST(HELM_SERVERS_FILE)
-
-dnl HELM URIS data-base
-AC_SUBST(HELM_URIS_DBM)
-
-dnl HELM DTDs
-AC_SUBST(HELM_DTD_DIR)
-
-dnl HELM stylesheets
-AC_SUBST(HELM_STYLE_DIR)
-
-dnl HELM customized GtkMathView configuration
-AC_SUBST(HELM_DICTIONARY_PATH)
-AC_SUBST(HELM_FONT_CONFIGURATION_PATH)
-AC_SUBST(GTKMATHVIEW_DICTIONARY_PATH)
-AC_SUBST(GTKMATHVIEW_FONT_CONFIGURATION_PATH)
-AC_SUBST(GTKMATHVIEW_T1_CONFIG_FILE)
-
-AC_OUTPUT(
-[ Makefile
-  helm-config
-  lib/configuration.pl
-  etc/helm-math-engine-configuration.xml
-  etc/configuration.xml
-  helm_configuration.spec
-], chmod +x helm-config)
diff --git a/helm/configuration/etc/.cvsignore b/helm/configuration/etc/.cvsignore
deleted file mode 100644 (file)
index c85a7bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-helm-math-engine-configuration.xml configuration.xml
diff --git a/helm/configuration/etc/configuration.dtd b/helm/configuration/etc/configuration.dtd
deleted file mode 100644 (file)
index 8fc5612..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--*****************************************************************-->
-<!-- DTD FOR HELM CONFIGURATION FILE:                                -->
-<!--  First draft: June 6 2000, Claudio Sacerdoti Coen               -->
-<!--  Last Revision: June 6 2000, Claudio Sacerdoti Coen             -->
-<!--*****************************************************************-->
-
-<!ELEMENT configuration (helm_dir, dtd_dir, style_dir, servers_file, uris_dbm, dest,
-                        indexname, tmp_dir, helm_url_path,
-                         getheader_url, style_url, webeq_url, webeqp_url,
-                         use_webeqp_url, html_link, getter_url, processor_url)>
-
-<!ENTITY % expr '(#PCDATA | value-of)*'>
-
-<!ELEMENT value-of EMPTY>
-<!ATTLIST value-of
-       var NMTOKEN #REQUIRED >
-
-<!ELEMENT helm_dir       %expr;>
-<!ELEMENT dtd_dir        %expr;>
-<!ELEMENT style_dir      %expr;>
-<!ELEMENT servers_file   %expr;>
-<!ELEMENT uris_dbm       %expr;>
-<!ELEMENT dest           %expr;>
-<!ELEMENT indexname      %expr;>
-<!ELEMENT tmp_dir        %expr;>
-<!ELEMENT helm_url_path  %expr;>
-<!ELEMENT getheader_url  %expr;>
-<!ELEMENT style_url      %expr;>
-<!ELEMENT webeq_url      %expr;>
-<!ELEMENT webeqp_url     %expr;>
-<!ELEMENT use_webeqp_url %expr;>
-<!ELEMENT html_link      %expr;>
-<!ELEMENT getter_url     %expr;>
-<!ELEMENT processor_url  %expr;>
diff --git a/helm/configuration/etc/configuration.xml.in b/helm/configuration/etc/configuration.xml.in
deleted file mode 100644 (file)
index db03436..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE configuration SYSTEM "configuration.dtd">
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<configuration>
- <helm_dir>@HELM_LIBRARY_DIR@</helm_dir>
-
- <dtd_dir>@HELM_DTD_DIR@</dtd_dir>
- <style_dir>@HELM_STYLE_DIR@</style_dir>
-
- <servers_file>@HELM_SERVERS_FILE@</servers_file>
- <uris_dbm>@HELM_URIS_DBM@</uris_dbm>
- <dest><value-of var="helm_dir"/></dest>
- <indexname>index.txt</indexname>
- <tmp_dir>@HELM_TMP_DIR@</tmp_dir>
-
- <helm_url_path>/home/lpadovan/helm/PARSER/examples</helm_url_path>
- <getheader_url>http://localhost/really_very_local/helm/header/getheader.xml</getheader_url>
- <style_url>http://localhost/really_very_local/helm/style/</style_url>
- <webeq_url>http://localhost/cgi-bin/helm/webeq.pl</webeq_url>
- <webeqp_url>http://localhost/cgi-bin/helm/webeqp.pl</webeqp_url>
- <use_webeqp_url>http://localhost/cgi-bin/helm/use_webeqp.pl</use_webeqp_url>
- <html_link><value-of var="getheader_url"/>?baseurl=<value-of var="style_url"/>&amp;stylesheet1=rootcontent.xsl&amp;stylesheet2=content_to_html.xsl&amp;xmluri=</html_link>
- <getter_url>http://localhost:8081/</getter_url>
- <processor_url>http://localhost:8080/helm/servlet/uwobo/</processor_url>
-</configuration>
diff --git a/helm/configuration/etc/helm-dictionary.xml b/helm/configuration/etc/helm-dictionary.xml
deleted file mode 100644 (file)
index 6d1caf7..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<dictionary>
- <operator name="&Union;" form="infix" stretchy="false" lspace="mediummathspace" rspace="mediummathspace"/>
- <operator name="&Intersection;" form="infix" stretchy="false" lspace="mediummathspace" rspace="mediummathspace"/>
- <operator name="lim" form="prefix" movablelimits="false"/>
-</dictionary>
diff --git a/helm/configuration/etc/helm-font-configuration.xml b/helm/configuration/etc/helm-font-configuration.xml
deleted file mode 100644 (file)
index b5a9f7c..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE font-configuration SYSTEM "font-configuration.dtd">
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<font-configuration>
-  <font type="x" mode="math" map="adobe-symbol-forall"
-       x-foundry="adobe" x-family="symbol" x-encoding="fontspecific"
-       />
-
-  <map id="adobe-symbol-forall">
-    <single code="0x2200" index="0x22"/>
-  </map>
-</font-configuration>
diff --git a/helm/configuration/etc/helm-math-engine-configuration.xml.in b/helm/configuration/etc/helm-math-engine-configuration.xml.in
deleted file mode 100644 (file)
index 9683977..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE math-engine-configuration SYSTEM "math-engine-configuration.dtd">
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<math-engine-configuration>
-  <dictionary-path>@HELM_DICTIONARY_PATH@</dictionary-path>
-  <dictionary-path>@GTKMATHVIEW_DICTIONARY_PATH@</dictionary-path>
-  <font-configuration-path>@HELM_FONT_CONFIGURATION_PATH@</font-configuration-path>
-  <font-configuration-path>@GTKMATHVIEW_FONT_CONFIGURATION_PATH@</font-configuration-path>
-  <t1-config-file>@GTKMATHVIEW_T1_CONFIG_FILE@</t1-config-file>
-  <font-size     size="14pt"/>
-  <color         foreground="black" background="white"/>
-  <link-color    foreground="#32648b" background="white"/>
-  <select-color  foreground="black" background="#87cefa"/>
-</math-engine-configuration>
diff --git a/helm/configuration/helm-config.in b/helm/configuration/helm-config.in
deleted file mode 100644 (file)
index 3b569de..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-
-usage()
-{
-       cat <<EOF
-Usage: helm-config [OPTIONS]
-Options:
-       [--version]
-       [--prefix]
-       [--exec-prefix]
-       [--bin-dir]
-       [--lib-dir]
-       [--etc-dir]
-       [--share-dir]
-       [--var-dir]
-       [--tmp-dir]
-       [--library-dir]
-       [--servers]
-       [--uris-dbm]
-       [--dtd-dir]
-       [--style-dir]
-EOF
-       exit $1
-}
-
-if test $# -eq 0; then
-       usage 1 1>&2
-fi
-
-while test $# -gt 0; do
-  case "$1" in
-  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) optarg= ;;
-  esac
-
-  case $1 in
-    --version)
-      echo @VERSION@
-      ;;
-    --prefix)
-      echo @RESOLVED_PREFIX@
-      ;;
-    --exec-prefix)
-      echo @RESOLVED_EXEC_PREFIX@
-      ;;
-    --bin-dir)
-      echo @HELM_BIN_DIR@
-      ;;
-    --lib-dir)
-      echo @HELM_LIB_DIR@
-      ;;
-    --etc-dir)
-      echo @HELM_ETC_DIR@
-      ;;
-    --share-dir)
-      echo @HELM_SHARE_DIR@
-      ;;
-    --var-dir)
-      echo @HELM_VAR_DIR@
-      ;;
-    --tmp-dir)
-      echo @HELM_TMP_DIR@
-      ;;
-    --library-dir)
-      echo @HELM_LIBRARY_DIR@
-      ;;
-    --servers)
-      echo @HELM_SERVERS_FILE@
-      ;;
-    --uris-dbm)
-      echo @HELM_URIS_DBM@
-      ;;
-    --dtd-dir)
-      echo @HELM_DTD_DIR@
-      ;;
-    --style-dir)
-      echo @HELM_STYLE_DIR@
-      ;;
-    *)
-      usage 1 1>&2
-      ;;
-  esac
-  shift
-done
-
diff --git a/helm/configuration/helm_configuration.spec.in b/helm/configuration/helm_configuration.spec.in
deleted file mode 100644 (file)
index 56695c2..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-Summary: The configuration files shared by all the tools of project HELM
-Name: @PACKAGE@
-Version: @VERSION@
-Release: 1
-Copyright: GPL
-URL: http://www.cs.unibo.it/helm
-Packager: Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
-Group: Applications/Publishing
-Source: www.cs.unibo.it:/helm/@PACKAGE@-@VERSION@.tar.gz
-%description
-HELM (Hypertextual Electronic Library of Mathematics) is a project aimed
-at the creation of tools for the development and exploitation of a huge
-distributed library of formal mathematical knowledge. This package holds
-the configuration files shared by all this tools.
-For more information see http://www.cs.unibo.it/helm
-
-%prep
-%setup
-
-%build
-cp config.cache.pkg config.cache
-./configure --enable-defaults
-make
-
-%install
-make install
-
-%files
-%doc AUTHORS COPYING ChangeLog NEWS README
-
-/usr/local/bin/helm-config
-/usr/local/lib/helm/configuration.pl
-/usr/local/etc/helm/configuration.dtd
-/usr/local/etc/helm/helm-font-configuration.xml
-/usr/local/etc/helm/configuration.xml
-/usr/local/etc/helm/helm-math-engine-configuration.xml
-/usr/local/etc/helm/helm-dictionary.xml
-%attr(666,root,root) /var/local/helm/servers.txt
-%attr(666,root,root) /var/local/helm/urls_of_uris.db
-
-%dir /var/local/helm/library
-%dir /usr/local/share/helm/dtd
-%dir /usr/local/share/helm/style
diff --git a/helm/configuration/lib/.cvsignore b/helm/configuration/lib/.cvsignore
deleted file mode 100644 (file)
index ff6af68..0000000
+++ /dev/null
@@ -1 +0,0 @@
-configuration.pl
diff --git a/helm/configuration/lib/configuration.pl.in b/helm/configuration/lib/configuration.pl.in
deleted file mode 100644 (file)
index 6540b80..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright (C) 2000, HELM Team.
-# 
-# This file is part of HELM, an Hypertextual, Electronic
-# Library of Mathematics, developed at the Computer Science
-# Department, University of Bologna, Italy.
-# 
-# HELM 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.
-# 
-# HELM 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 HELM; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-# 
-# For details, see the HELM World-Wide-Web page,
-# http://cs.unibo.it/helm/.
-
-use XML::Parser;
-
-use Env;
-my $HELM_CONFIGURATION_DIR = $ENV{"HELM_CONFIGURATION_DIR"};
-my $DEFAULT_HELM_CONFIGURATION_DIR = "@HELM_ETC_DIR@";
-# this should be the only fixed constant
-if (defined ($HELM_CONFIGURATION_DIR)) {
-   $configuration_file = $HELM_CONFIGURATION_DIR."/configuration.xml";
-} else {
-   $configuration_file = $DEFAULT_HELM_CONFIGURATION_DIR."/configuration.xml";
-}
-
-$parser = new XML::Parser(Handlers => {Start => \&handle_start,
-                                       End   => \&handle_end,
-                                       Char  => \&handle_char});
-
-
-$parser->parsefile($configuration_file, ErrorContext => 3);
-
-
-sub handle_start
-{
-   if ($_[1] eq "value-of") {
-      $$varname .= ${$_[3]};
-   } elsif ($_[1] ne "configuration") {
-      $varname = $_[1];
-   }
-}
-
-sub handle_end
-{
-   if ($_[1] ne "value-of" && $_[1] ne "configuration") {
-      # Next line for debugging only:
-      # print "OK: #$_[1]# := #$$varname#\n";
-      $varname = undef;
-   }
-}
-
-sub handle_char
-{
-   $$varname .= $_[1];
-}
diff --git a/helm/configuration/library/servers.txt b/helm/configuration/library/servers.txt
deleted file mode 100644 (file)
index 5a172e4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-http://www.cs.unibo.it/~sacerdot/examples
diff --git a/helm/configuration/library/urls_of_uris.db b/helm/configuration/library/urls_of_uris.db
deleted file mode 100644 (file)
index 9f01b7a..0000000
Binary files a/helm/configuration/library/urls_of_uris.db and /dev/null differ
diff --git a/helm/dtd/annotations.dtd b/helm/dtd/annotations.dtd
deleted file mode 100644 (file)
index 5185410..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--*****************************************************************-->
-<!-- DTD FOR ANNOTATED OBJECTS:                                      -->
-<!--  First draft: June 2000, Claudio Sacerdoti Coen                 -->
-<!--*****************************************************************-->
-
-<!ENTITY % annotation '(#PCDATA|node|attribute)*'>
-
-<!ELEMENT Annotations (Annotation)*>
-<!ATTLIST Annotations
-          of CDATA #REQUIRED>
-
-<!ELEMENT Annotation %annotation;>
-<!ATTLIST Annotation
-          of CDATA #REQUIRED>
-
-<!-- Annotations: -->
-
-<!ELEMENT attribute EMPTY>
-<!ATTLIST attribute
-          name       NMTOKEN #REQUIRED
-          id         NMTOKEN #REQUIRED
-          child      NMTOKEN #IMPLIED
-          grandchild NMTOKEN #IMPLIED>
-
-<!ELEMENT node EMPTY>
-<!ATTLIST node
-          id NMTOKEN #REQUIRED>
diff --git a/helm/dtd/backward.dtd b/helm/dtd/backward.dtd
deleted file mode 100644 (file)
index 60c27c4..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!-- DTD for backward pointers metadata. For every object, it lists -->
-<!-- all the other objects directly depending on it.                -->
-
-<!ELEMENT rdf:RDF (h:Object)>
-<!ATTLIST rdf:RDF
-          xml:lang  CDATA #REQUIRED
-          xmlns:rdf CDATA #FIXED "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-          xmlns:h   CDATA #FIXED "http://www.cs.unibo.it/helm/schemas/mattone.rdf#">
-
-<!ELEMENT h:Object (h:backPointer)*>
-<!ATTLIST h:Object
-          rdf:about CDATA #REQUIRED>
-
-<!ELEMENT h:backPointer (h:Occurrence)>
-
-<!ELEMENT h:Occurrence (h:position,h:occurrence)>
-
-<!-- Either MainHypothesis or InHypothesis or InConclusion or -->
-<!-- MainConclusion or InBody.                                -->
-<!ELEMENT h:position (#PCDATA)>
-
-<!ELEMENT h:occurrence (#PCDATA)>
diff --git a/helm/dtd/cic.dtd b/helm/dtd/cic.dtd
deleted file mode 100644 (file)
index 47280b8..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--*****************************************************************-->
-<!-- DTD FOR CIC OBJECTS:                                            -->
-<!--  First draft: September 1999, Claudio Sacerdoti Coen            -->
-<!--  Revised: February 3 2000, Claudio Sacerdoti Coen, Irene Schena -->
-<!--  Last Revision: April 4 2000, Claudio Sacerdoti Coen            -->
-<!--  Last Revision: June 19 2000, Claudio Sacerdoti Coen            -->
-<!--  Last Revision: June 20 2000, Claudio Sacerdoti Coen            -->
-<!--*****************************************************************-->
-
-<!-- CIC term declaration -->
-
-<!ENTITY % term '(LAMBDA|CAST|PROD|REL|SORT|APPLY|VAR|META|IMPLICIT|CONST|
-                  LETIN|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX)'>
-
-<!-- CIC sorts -->
-
-<!ENTITY % sort '(Prop|Set|Type)'>
-
-<!-- CIC sequents -->
-
-<!ENTITY % sequent '((Decl|Def|Hidden)*,Goal)'>
-
-<!-- CIC objects: -->
-
-<!ELEMENT Definition (body, type)>
-<!ATTLIST Definition
-          name       CDATA      #REQUIRED
-          params     CDATA      #REQUIRED
-          paramMode  (POSSIBLE) #IMPLIED
-          id         ID         #REQUIRED>
-
-<!ELEMENT Axiom (type)>
-<!ATTLIST Axiom
-          name   CDATA #REQUIRED
-          params CDATA #REQUIRED
-          id     ID    #REQUIRED>
-
-<!ELEMENT CurrentProof (Conjecture*,body,type)>
-<!ATTLIST CurrentProof
-          name CDATA #REQUIRED
-          id   ID    #REQUIRED>
-
-<!ELEMENT InductiveDefinition (InductiveType+)>
-<!ATTLIST InductiveDefinition
-          noParams NMTOKEN #REQUIRED
-          params   CDATA   #REQUIRED
-          id       ID      #REQUIRED>
-
-<!ELEMENT Variable (body?,type)>
-<!ATTLIST Variable
-          name CDATA #REQUIRED
-          id   ID    #REQUIRED>
-
-<!ELEMENT Sequent %sequent;>
-<!ATTLIST Sequent
-          no  NMTOKEN #REQUIRED
-          id  ID      #REQUIRED>
-
-<!-- Elements used in CIC objects, which are not terms: -->
-
-<!ELEMENT InductiveType (arity,Constructor*)>
-<!ATTLIST InductiveType
-          name      CDATA        #REQUIRED
-          inductive (true|false) #REQUIRED>
-
-<!ELEMENT Conjecture %sequent;>
-<!ATTLIST Conjecture
-          no NMTOKEN #REQUIRED
-          id ID      #REQUIRED>
-
-<!ELEMENT Constructor %term;>
-<!ATTLIST Constructor
-          name CDATA #REQUIRED>
-
-<!ELEMENT Decl %term;>
-<!ATTLIST Decl
-          name CDATA #IMPLIED
-          id   ID    #REQUIRED>
-
-<!ELEMENT Def %term;>
-<!ATTLIST Def
-          name CDATA #IMPLIED
-          id   ID    #REQUIRED>
-
-<!ELEMENT Hidden EMPTY>
-<!ATTLIST Hidden
-          id ID #REQUIRED>
-
-<!ELEMENT Goal %term;>
-
-<!-- CIC terms: -->
-
-<!ELEMENT LAMBDA (source,target)>
-<!ATTLIST LAMBDA
-          id   ID     #REQUIRED
-          sort %sort; #REQUIRED>
-
-<!ELEMENT LETIN (term,letintarget)>
-<!ATTLIST LETIN
-          id   ID     #REQUIRED
-          sort %sort; #REQUIRED>
-
-<!ELEMENT PROD (source,target)>
-<!ATTLIST PROD
-          id   ID     #REQUIRED
-          type %sort; #REQUIRED>
-
-<!ELEMENT CAST (term,type)>
-<!ATTLIST CAST
-          id   ID     #REQUIRED
-          sort %sort; #REQUIRED>
-
-<!ELEMENT REL EMPTY>
-<!ATTLIST REL
-          value  NMTOKEN #REQUIRED
-          binder CDATA   #REQUIRED
-          id     ID      #REQUIRED
-          sort   %sort;  #REQUIRED>
-
-<!ELEMENT SORT EMPTY>
-<!ATTLIST SORT
-          value CDATA #REQUIRED
-          id    ID    #REQUIRED>
-
-<!ELEMENT APPLY (%term;)+>
-<!ATTLIST APPLY
-          id   ID     #REQUIRED
-          sort %sort; #REQUIRED>
-
-<!ELEMENT VAR EMPTY>
-<!ATTLIST VAR
-          relUri CDATA  #REQUIRED
-          id     ID     #REQUIRED
-          sort   %sort; #REQUIRED>
-
-<!-- The substitutions are ordered by increasing DeBrujin  -->
-<!-- index. An empty substitution means that that index is -->
-<!-- not accessible.                                       -->
-<!ELEMENT META (substitution*)>
-<!ATTLIST META
-          no              NMTOKEN #REQUIRED
-          id              ID      #REQUIRED
-          sort            %sort;  #REQUIRED>
-
-<!ELEMENT IMPLICIT EMPTY>
-<!ATTLIST IMPLICIT
-          id ID #REQUIRED>
-
-<!ELEMENT CONST EMPTY>
-<!ATTLIST CONST
-          uri  CDATA  #REQUIRED
-          id   ID     #REQUIRED
-          sort %sort; #REQUIRED>
-
-<!ELEMENT MUTIND EMPTY>
-<!ATTLIST MUTIND
-          uri    CDATA   #REQUIRED
-          noType NMTOKEN #REQUIRED
-          id     ID      #REQUIRED>
-
-<!ELEMENT MUTCONSTRUCT EMPTY>
-<!ATTLIST MUTCONSTRUCT
-          uri      CDATA   #REQUIRED
-          noType   NMTOKEN #REQUIRED
-          noConstr NMTOKEN #REQUIRED
-          id       ID      #REQUIRED
-          sort     %sort;  #REQUIRED>
-
-<!ELEMENT MUTCASE (patternsType,inductiveTerm,pattern*)>
-<!ATTLIST MUTCASE
-          uriType CDATA   #REQUIRED
-          noType  NMTOKEN #REQUIRED
-          id      ID      #REQUIRED
-          sort    %sort;  #REQUIRED>
-
-<!ELEMENT FIX (FixFunction+)>
-<!ATTLIST FIX
-          noFun NMTOKEN #REQUIRED
-          id    ID      #REQUIRED
-          sort  %sort;  #REQUIRED>
-
-<!ELEMENT COFIX (CofixFunction+)>
-<!ATTLIST COFIX
-          noFun NMTOKEN #REQUIRED
-          id    ID      #REQUIRED
-          sort  %sort;  #REQUIRED>
-
-<!-- Elements used in CIC terms: -->
-
-<!ELEMENT FixFunction (type,body)>
-<!ATTLIST FixFunction
-          name     CDATA   #REQUIRED
-          recIndex NMTOKEN #REQUIRED>
-
-<!ELEMENT CofixFunction (type,body)>
-<!ATTLIST CofixFunction
-          name     CDATA   #REQUIRED>
-
-<!ELEMENT substitution ((%term;)?)>
-
-<!-- Sintactic sugar for CIC terms and for CIC objects: -->
-
-<!ELEMENT source %term;>
-
-<!ELEMENT target %term;>
-<!ATTLIST target
-          binder CDATA #IMPLIED>
-
-<!ELEMENT letintarget %term;>
-<!ATTLIST letintarget
-          binder CDATA #REQUIRED>
-
-<!ELEMENT term %term;>
-
-<!ELEMENT type  %term;>
-
-<!ELEMENT arity %term;>
-
-<!ELEMENT patternsType  %term;>
-
-<!ELEMENT inductiveTerm  %term;>
-
-<!ELEMENT pattern  %term;>
-
-<!ELEMENT body  %term;>
diff --git a/helm/dtd/cicobject.dtd b/helm/dtd/cicobject.dtd
deleted file mode 100644 (file)
index d78251c..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--*****************************************************************-->
-<!-- DTD FOR CIC OBJECTS AT LEVEL OF MATHML CONTENT:                 -->
-<!--  First draft: March 21, Claudio Sacerdoti Coen, Irene Schena    -->
-<!--*****************************************************************-->
-
-<!ENTITY % mathml SYSTEM "mathml2.dtd">
-
-%mathml;
-
-<!ENTITY % term '(annotation|%math.qname;)'>
-
-<!-- Terms: -->
-
-<!ELEMENT annotation (#PCDATA|annotation|%math.qname;)*>
-<!ATTLIST annotation
-          xmlns:m    CDATA #REQUIRED>
-
-<!-- CIC objects: -->
-
-<!ELEMENT Definition (Params,body,type)>
-<!ATTLIST Definition
-          name       CDATA      #REQUIRED
-          xmlns:m    CDATA      #REQUIRED>
-
-<!ELEMENT Axiom (Params,type)>
-<!ATTLIST Axiom
-          name   CDATA #REQUIRED
-          xmlns:m    CDATA      #REQUIRED>
-
-<!ELEMENT CurrentProof (Conjecture*,body,type)>
-<!ATTLIST CurrentProof
-          name CDATA #REQUIRED
-          xmlns:m    CDATA      #REQUIRED>
-
-<!ELEMENT InductiveDefinition (Params,Param*,InductiveType+)>
-<!ATTLIST InductiveDefinition
-          xmlns:m    CDATA      #REQUIRED>
-
-<!ELEMENT Variable (body?,type)>
-<!ATTLIST Variable
-          name CDATA #REQUIRED
-          xmlns:m    CDATA      #REQUIRED>
-
-<!ELEMENT Sequent ((Decl|Def)*,Goal)>
-<!ATTLIST Sequent
-          id   ID    #REQUIRED>
-
-<!-- Elements used in CIC objects, which are not terms: -->
-
-<!ELEMENT InductiveType (arity,Constructor*)>
-<!ATTLIST InductiveType
-          name      CDATA        #REQUIRED
-          inductive (true|false) #REQUIRED>
-
-<!ELEMENT Conjecture %term;>
-<!ATTLIST Conjecture
-          no NMTOKEN #REQUIRED>
-
-<!ELEMENT Constructor %term;>
-<!ATTLIST Constructor
-          name CDATA #REQUIRED>
-
-<!ELEMENT Param %term;>
-<!ATTLIST Param
-          name CDATA #REQUIRED>
-
-<!ELEMENT Params (#PCDATA)*>
-
-<!ELEMENT Decl %term;>
-<!ATTLIST Decl
-          name CDATA #REQUIRED>
-
-<!ELEMENT Def %term;>
-<!ATTLIST Def
-          name CDATA #REQUIRED>
-
-<!ELEMENT Goal %term;>
-
-<!-- Sintactic sugar for CIC objects: -->
-
-<!ELEMENT type  %term;>
-
-<!ELEMENT arity %term;>
-
-<!ELEMENT body  %term;>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/helm/dtd/cictypes.dtd b/helm/dtd/cictypes.dtd
deleted file mode 100644 (file)
index 6fd4a60..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--*****************************************************************-->
-<!-- DTD FOR INNER TYPES:                                            -->
-<!--  First draft: November 11 2000, Claudio Sacerdoti Coen         -->
-<!--*****************************************************************-->
-
-<!ENTITY % cicdtd SYSTEM "cic.dtd">
-
-%cicdtd;
-
-<!ELEMENT InnerTypes (TYPE*)>
-<!ATTLIST InnerTypes
-          of  CDATA      #REQUIRED>
-
-<!-- synthesized type, expected type -->
-<!-- CSC: some syntactic sugar would help -->
-<!ELEMENT TYPE (%term;,%term;?)>
-<!ATTLIST TYPE
-          of  NMTOKEN #REQUIRED>
diff --git a/helm/dtd/forward.dtd b/helm/dtd/forward.dtd
deleted file mode 100644 (file)
index 4fd7ea4..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!-- DTD for forward pointers metadata. For every object, it lists -->
-<!-- all the other objects it depends on.                          -->
-
-<!ELEMENT rdf:RDF (h:Object)>
-<!ATTLIST rdf:RDF
-          xml:lang  CDATA #REQUIRED
-          xmlns:rdf CDATA #FIXED "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-          xmlns:h   CDATA #FIXED "http://www.cs.unibo.it/helm/schemas/mattone.rdf#">
-
-<!ELEMENT h:Object (h:refObj)*>
-<!ATTLIST h:Object
-          rdf:about CDATA #REQUIRED>
-
-<!ELEMENT h:refObj (h:Occurrence)>
-
-<!ELEMENT h:Occurrence (h:position,h:occurrence)>
-
-<!-- Either MainHypothesis or InHypothesis or InConclusion or -->
-<!-- MainConclusion or InBody.                                -->
-<!ELEMENT h:position (#PCDATA)>
-
-<!ELEMENT h:occurrence (#PCDATA)>
diff --git a/helm/dtd/isoamsa.ent b/helm/dtd/isoamsa.ent
deleted file mode 100644 (file)
index 5ecf4db..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-
-<!--
-     File isoamsa.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1991
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY angzarr          "&#x0237C;" ><!--angle with down zig-zag arrow -->
-<!ENTITY cirmid           "&#x02AEF;" ><!--circle, mid below -->
-<!ENTITY cudarrl          "&#x02938;" ><!--left, curved, down arrow -->
-<!ENTITY cudarrr          "&#x02935;" ><!--right, curved, down arrow -->
-<!ENTITY cularr           "&#x021B6;" ><!--/curvearrowleft A: left curved arrow -->
-<!ENTITY cularrp          "&#x0293D;" ><!--curved left arrow with plus -->
-<!ENTITY curarr           "&#x021B7;" ><!--/curvearrowright A: rt curved arrow -->
-<!ENTITY curarrm          "&#x0293C;" ><!--curved right arrow with minus -->
-<!ENTITY dArr             "&#x021D3;" ><!--/Downarrow A: down dbl arrow -->
-<!ENTITY Darr             "&#x021A1;" ><!--down two-headed arrow -->
-<!ENTITY ddarr            "&#x021CA;" ><!--/downdownarrows A: two down arrows -->
-<!ENTITY DDotrahd         "&#x02911;" ><!--right arrow with dotted stem -->
-<!ENTITY dfisht           "&#x0297F;" ><!--down fish tail -->
-<!ENTITY dHar             "&#x02965;" ><!--down harpoon-left, down harpoon-right -->
-<!ENTITY dharl            "&#x021C3;" ><!--/downharpoonleft A: dn harpoon-left -->
-<!ENTITY dharr            "&#x021C2;" ><!--/downharpoonright A: down harpoon-rt -->
-<!ENTITY duarr            "&#x021F5;" ><!--down arrow, up arrow -->
-<!ENTITY duhar            "&#x0296F;" ><!--down harp, up harp -->
-<!ENTITY dzigrarr         "&#x021DD;" ><!--right long zig-zag arrow -->
-<!ENTITY erarr            "&#x02971;" ><!--equal, right arrow below -->
-<!ENTITY harr             "&#x02194;" ><!--/leftrightarrow A: l&r arrow -->
-<!ENTITY hArr             "&#x021D4;" ><!--/Leftrightarrow A: l&r dbl arrow -->
-<!ENTITY harrcir          "&#x02948;" ><!--left and right arrow with a circle -->
-<!ENTITY harrw            "&#x021AD;" ><!--/leftrightsquigarrow A: l&r arr-wavy -->
-<!ENTITY hoarr            "&#x021FF;" ><!--horizontal open arrow -->
-<!ENTITY imof             "&#x022B7;" ><!--image of -->
-<!ENTITY lAarr            "&#x021DA;" ><!--/Lleftarrow A: left triple arrow -->
-<!ENTITY Larr             "&#x0219E;" ><!--/twoheadleftarrow A: -->
-<!ENTITY larrbfs          "&#x0291F;" ><!--left arrow-bar, filled square -->
-<!ENTITY larrfs           "&#x0291D;" ><!--left arrow, filled square -->
-<!ENTITY larrhk           "&#x021A9;" ><!--/hookleftarrow A: left arrow-hooked -->
-<!ENTITY larrlp           "&#x021AB;" ><!--/looparrowleft A: left arrow-looped -->
-<!ENTITY larrpl           "&#x02939;" ><!--left arrow, plus -->
-<!ENTITY larrsim          "&#x02973;" ><!--left arrow, similar -->
-<!ENTITY larrtl           "&#x021A2;" ><!--/leftarrowtail A: left arrow-tailed -->
-<!ENTITY latail           "&#x02919;" ><!--left arrow-tail -->
-<!ENTITY lAtail           "&#x0291B;" ><!--left double arrow-tail -->
-<!ENTITY lbarr            "&#x0290C;" ><!--left broken arrow -->
-<!ENTITY lBarr            "&#x0290E;" ><!--left doubly broken arrow -->
-<!ENTITY ldca             "&#x02936;" ><!--left down curved arrow -->
-<!ENTITY ldrdhar          "&#x02967;" ><!--left harpoon-down over right harpoon-down -->
-<!ENTITY ldrushar         "&#x0294B;" ><!--left-down-right-up harpoon -->
-<!ENTITY ldsh             "&#x021B2;" ><!--left down angled arrow -->
-<!ENTITY lfisht           "&#x0297C;" ><!--left fish tail -->
-<!ENTITY lHar             "&#x02962;" ><!--left harpoon-up over left harpoon-down -->
-<!ENTITY lhard            "&#x021BD;" ><!--/leftharpoondown A: l harpoon-down -->
-<!ENTITY lharu            "&#x021BC;" ><!--/leftharpoonup A: left harpoon-up -->
-<!ENTITY lharul           "&#x0296A;" ><!--left harpoon-up over long dash -->
-<!ENTITY llarr            "&#x021C7;" ><!--/leftleftarrows A: two left arrows -->
-<!ENTITY llhard           "&#x0296B;" ><!--left harpoon-down below long dash -->
-<!ENTITY loarr            "&#x021FD;" ><!--left open arrow -->
-<!ENTITY lrarr            "&#x021C6;" ><!--/leftrightarrows A: l arr over r arr -->
-<!ENTITY lrhar            "&#x021CB;" ><!--/leftrightharpoons A: l harp over r -->
-<!ENTITY lrhard           "&#x0296D;" ><!--right harpoon-down below long dash -->
-<!ENTITY lsh              "&#x021B0;" ><!--/Lsh A: -->
-<!ENTITY lurdshar         "&#x0294A;" ><!--left-up-right-down harpoon -->
-<!ENTITY luruhar          "&#x02966;" ><!--left harpoon-up over right harpoon-up -->
-<!ENTITY map              "&#x021A6;" ><!--/mapsto A: -->
-<!ENTITY Map              "&#x02905;" ><!--twoheaded mapsto -->
-<!ENTITY midcir           "&#x02AF0;" ><!--mid, circle below  -->
-<!ENTITY mumap            "&#x022B8;" ><!--/multimap A: -->
-<!ENTITY nearhk           "&#x02924;" ><!--NE arrow-hooked -->
-<!ENTITY nearr            "&#x02197;" ><!--/nearrow A: NE pointing arrow -->
-<!ENTITY neArr            "&#x021D7;" ><!--NE pointing dbl arrow -->
-<!ENTITY nesear           "&#x02928;" ><!--/toea A: NE & SE arrows -->
-<!ENTITY nharr            "&#x021AE;" ><!--/nleftrightarrow A: not l&r arrow -->
-<!ENTITY nhArr            "&#x021CE;" ><!--/nLeftrightarrow A: not l&r dbl arr -->
-<!ENTITY nlarr            "&#x0219A;" ><!--/nleftarrow A: not left arrow -->
-<!ENTITY nlArr            "&#x021CD;" ><!--/nLeftarrow A: not implied by -->
-<!ENTITY nrarr            "&#x0219B;" ><!--/nrightarrow A: not right arrow -->
-<!ENTITY nrArr            "&#x021CF;" ><!--/nRightarrow A: not implies -->
-<!ENTITY nrarrc           "&#x02933;&#x00338;" ><!--not right arrow-curved -->
-<!ENTITY nrarrw           "&#x0219D;&#x00338;" ><!--not right arrow-wavy -->
-<!ENTITY nvHarr           "&#x021CE;" ><!--not, vert, left and right double arrow  -->
-<!ENTITY nvlArr           "&#x021CD;" ><!--not, vert, left double arrow -->
-<!ENTITY nvrArr           "&#x021CF;" ><!--not, vert, right double arrow -->
-<!ENTITY nwarhk           "&#x02923;" ><!--NW arrow-hooked -->
-<!ENTITY nwarr            "&#x02196;" ><!--/nwarrow A: NW pointing arrow -->
-<!ENTITY nwArr            "&#x021D6;" ><!--NW pointing dbl arrow -->
-<!ENTITY nwnear           "&#x02927;" ><!--NW & NE arrows -->
-<!ENTITY olarr            "&#x021BA;" ><!--/circlearrowleft A: l arr in circle -->
-<!ENTITY orarr            "&#x021BB;" ><!--/circlearrowright A: r arr in circle -->
-<!ENTITY origof           "&#x022B6;" ><!--original of -->
-<!ENTITY rAarr            "&#x021DB;" ><!--/Rrightarrow A: right triple arrow -->
-<!ENTITY Rarr             "&#x021A0;" ><!--/twoheadrightarrow A: -->
-<!ENTITY rarrap           "&#x02975;" ><!--approximate, right arrow above -->
-<!ENTITY rarrbfs          "&#x02920;" ><!--right arrow-bar, filled square -->
-<!ENTITY rarrc            "&#x02933;" ><!--right arrow-curved -->
-<!ENTITY rarrfs           "&#x0291E;" ><!--right arrow, filled square -->
-<!ENTITY rarrhk           "&#x021AA;" ><!--/hookrightarrow A: rt arrow-hooked -->
-<!ENTITY rarrlp           "&#x021AC;" ><!--/looparrowright A: rt arrow-looped -->
-<!ENTITY rarrpl           "&#x02945;" ><!--right arrow, plus -->
-<!ENTITY rarrsim          "&#x02974;" ><!--right arrow, similar -->
-<!ENTITY rarrtl           "&#x021A3;" ><!--/rightarrowtail A: rt arrow-tailed -->
-<!ENTITY Rarrtl           "&#x02916;" ><!--right two-headed arrow with tail -->
-<!ENTITY rarrw            "&#x021DD;" ><!--/rightsquigarrow A: rt arrow-wavy -->
-<!ENTITY ratail           "&#x021A3;" ><!--right arrow-tail -->
-<!ENTITY rAtail           "&#x0291C;" ><!--right double arrow-tail -->
-<!ENTITY rbarr            "&#x0290D;" ><!--/bkarow A: right broken arrow -->
-<!ENTITY rBarr            "&#x0290F;" ><!--/dbkarow A: right doubly broken arrow -->
-<!ENTITY RBarr            "&#x02910;" ><!--/drbkarow A: twoheaded right broken arrow -->
-<!ENTITY rdca             "&#x02937;" ><!--right down curved arrow -->
-<!ENTITY rdldhar          "&#x02969;" ><!--right harpoon-down over left harpoon-down -->
-<!ENTITY rdsh             "&#x021B3;" ><!--right down angled arrow -->
-<!ENTITY rfisht           "&#x0297D;" ><!--right fish tail -->
-<!ENTITY rHar             "&#x02964;" ><!--right harpoon-up over right harpoon-down -->
-<!ENTITY rhard            "&#x021C1;" ><!--/rightharpoondown A: rt harpoon-down -->
-<!ENTITY rharu            "&#x021C0;" ><!--/rightharpoonup A: rt harpoon-up -->
-<!ENTITY rharul           "&#x0296C;" ><!--right harpoon-up over long dash -->
-<!ENTITY rlarr            "&#x021C4;" ><!--/rightleftarrows A: r arr over l arr -->
-<!ENTITY rlhar            "&#x021CC;" ><!--/rightleftharpoons A: r harp over l -->
-<!ENTITY roarr            "&#x021FE;" ><!--right open arrow -->
-<!ENTITY rrarr            "&#x021C9;" ><!--/rightrightarrows A: two rt arrows -->
-<!ENTITY rsh              "&#x021B1;" ><!--/Rsh A: -->
-<!ENTITY ruluhar          "&#x02968;" ><!--right harpoon-up over left harpoon-up -->
-<!ENTITY searhk           "&#x02925;" ><!--/hksearow A: SE arrow-hooken -->
-<!ENTITY searr            "&#x02198;" ><!--/searrow A: SE pointing arrow -->
-<!ENTITY seArr            "&#x021D8;" ><!--SE pointing dbl arrow -->
-<!ENTITY seswar           "&#x02929;" ><!--/tosa A: SE & SW arrows -->
-<!ENTITY simrarr          "&#x02972;" ><!--similar, right arrow below -->
-<!ENTITY slarr            "&#x02190;&#x02063;" ><!--short left arrow -->
-<!ENTITY srarr            "&#x02192;&#x02063;" ><!--short right arrow -->
-<!ENTITY swarhk           "&#x02926;" ><!--/hkswarow A: SW arrow-hooked -->
-<!ENTITY swarr            "&#x02199;" ><!--/swarrow A: SW pointing arrow -->
-<!ENTITY swArr            "&#x021D9;" ><!--SW pointing dbl arrow -->
-<!ENTITY swnwar           "&#x0292A;" ><!--SW & NW arrows -->
-<!ENTITY uArr             "&#x021D1;" ><!--/Uparrow A: up dbl arrow -->
-<!ENTITY Uarr             "&#x0219F;" ><!--up two-headed arrow -->
-<!ENTITY Uarrocir         "&#x02949;" ><!--up two-headed arrow above circle -->
-<!ENTITY udarr            "&#x021C5;" ><!--up arrow, down arrow -->
-<!ENTITY udhar            "&#x0296E;" ><!--up harp, down harp -->
-<!ENTITY ufisht           "&#x0297E;" ><!--up fish tail -->
-<!ENTITY uHar             "&#x02963;" ><!--up harpoon-left, up harpoon-right -->
-<!ENTITY uharl            "&#x021BF;" ><!--/upharpoonleft A: up harpoon-left -->
-<!ENTITY uharr            "&#x021BE;" ><!--/upharpoonright /restriction A: up harp-r -->
-<!ENTITY uuarr            "&#x021C8;" ><!--/upuparrows A: two up arrows -->
-<!ENTITY varr             "&#x02195;" ><!--/updownarrow A: up&down arrow -->
-<!ENTITY vArr             "&#x021D5;" ><!--/Updownarrow A: up&down dbl arrow -->
-<!ENTITY xharr            "&#x02194;" ><!--/longleftrightarrow A: long l&r arr -->
-<!ENTITY xhArr            "&#x021D4;" ><!--/Longleftrightarrow A: long l&r dbl arr -->
-<!ENTITY xlarr            "&#x02190;" ><!--/longleftarrow A: long left arrow -->
-<!ENTITY xlArr            "&#x021D0;" ><!--/Longleftarrow A: long l dbl arrow -->
-<!ENTITY xmap             "&#x021A6;" ><!--/longmapsto A: -->
-<!ENTITY xrarr            "&#x02192;" ><!--/longrightarrow A: long right arrow -->
-<!ENTITY xrArr            "&#x021D2;" ><!--/Longrightarrow A: long rt dbl arr -->
-<!ENTITY zigrarr          "&#x021DD;" ><!--right zig-zag arrow -->
diff --git a/helm/dtd/isoamsb.ent b/helm/dtd/isoamsb.ent
deleted file mode 100644 (file)
index 08e646c..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-
-<!--
-     File isoamsb.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1991
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY ac               "&#x0290F;" ><!--most positive -->
-<!ENTITY acE              "&#x029DB;" ><!--most positive, two lines below -->
-<!ENTITY amalg            "&#x02A3F;" ><!--/amalg B: amalgamation or coproduct -->
-<!ENTITY barvee           "&#x022BD;" ><!--bar, vee -->
-<!ENTITY barwed           "&#x022BC;" ><!--/barwedge B: logical and, bar above -->
-<!ENTITY Barwed           "&#x02306;" ><!--/doublebarwedge B: log and, dbl bar above -->
-<!ENTITY bsolb            "&#x029C5;" ><!--reverse solidus in square -->
-<!ENTITY Cap              "&#x022D2;" ><!--/Cap /doublecap B: dbl intersection -->
-<!ENTITY capand           "&#x02A44;" ><!--intersection, and -->
-<!ENTITY capbrcup         "&#x02A49;" ><!--intersection, bar, union -->
-<!ENTITY capcap           "&#x02A4B;" ><!--intersection, intersection, joined -->
-<!ENTITY capcup           "&#x02A47;" ><!--intersection above union -->
-<!ENTITY capdot           "&#x02A40;" ><!--intersection, with dot -->
-<!ENTITY caps             "&#x02229;&#x02063;" ><!--intersection, serifs -->
-<!ENTITY ccaps            "&#x02A4D;" ><!--closed intersection, serifs -->
-<!ENTITY ccups            "&#x02A4C;" ><!--closed union, serifs -->
-<!ENTITY ccupssm          "&#x02A50;" ><!--closed union, serifs, smash product -->
-<!ENTITY coprod           "&#x02210;" ><!--/coprod L: coproduct operator -->
-<!ENTITY Cup              "&#x022D3;" ><!--/Cup /doublecup B: dbl union -->
-<!ENTITY cupbrcap         "&#x02A48;" ><!--union, bar, intersection -->
-<!ENTITY cupcap           "&#x02A46;" ><!--union above intersection -->
-<!ENTITY cupcup           "&#x02A4A;" ><!--union, union, joined -->
-<!ENTITY cupdot           "&#x0228D;" ><!--union, with dot -->
-<!ENTITY cupor            "&#x02A45;" ><!--union, or -->
-<!ENTITY cups             "&#x0222A;&#x02063;" ><!--union, serifs -->
-<!ENTITY cuvee            "&#x022CE;" ><!--/curlyvee B: curly logical or -->
-<!ENTITY cuwed            "&#x022CF;" ><!--/curlywedge B: curly logical and -->
-<!ENTITY dagger           "&#x02020;" ><!--/dagger B: dagger relation -->
-<!ENTITY Dagger           "&#x02021;" ><!--/ddagger B: double dagger relation -->
-<!ENTITY diam             "&#x022C4;" ><!--/diamond B: open diamond -->
-<!ENTITY divonx           "&#x022C7;" ><!--/divideontimes B: division on times -->
-<!ENTITY eplus            "&#x02A71;" ><!--equal, plus -->
-<!ENTITY hercon           "&#x022B9;" ><!--hermitian conjugate matrix -->
-<!ENTITY intcal           "&#x022BA;" ><!--/intercal B: intercal -->
-<!ENTITY iprod            "&#x02A3C;" ><!--/intprod -->
-<!ENTITY loplus           "&#x02A2D;" ><!--plus sign in left half circle -->
-<!ENTITY lotimes          "&#x02A34;" ><!--multiply sign in left half circle  -->
-<!ENTITY lthree           "&#x022CB;" ><!--/leftthreetimes B: -->
-<!ENTITY ltimes           "&#x022C9;" ><!--/ltimes B: times sign, left closed -->
-<!ENTITY midast           "&#x0002A;" ><!--/ast B: asterisk -->
-<!ENTITY minusb           "&#x0229F;" ><!--/boxminus B: minus sign in box -->
-<!ENTITY minusd           "&#x02238;" ><!--/dotminus B: minus sign, dot above -->
-<!ENTITY minusdu          "&#x02A2A;" ><!--minus sign, dot below -->
-<!ENTITY ncap             "&#x02A43;" ><!--bar, intersection -->
-<!ENTITY ncup             "&#x02A42;" ><!--bar, union -->
-<!ENTITY oast             "&#x0229B;" ><!--/circledast B: asterisk in circle -->
-<!ENTITY ocir             "&#x0229A;" ><!--/circledcirc B: small circle in circle -->
-<!ENTITY odash            "&#x0229D;" ><!--/circleddash B: hyphen in circle -->
-<!ENTITY odiv             "&#x02A38;" ><!--divide in circle -->
-<!ENTITY odot             "&#x02299;" ><!--/odot B: middle dot in circle -->
-<!ENTITY odsold           "&#x029BC;" ><!--dot, solidus, dot in circle -->
-<!ENTITY ofcir            "&#x029BF;" ><!--filled circle in circle -->
-<!ENTITY ogt              "&#x029C1;" ><!--greater-than in circle -->
-<!ENTITY ohbar            "&#x029B5;" ><!--circle with horizontal bar -->
-<!ENTITY olcir            "&#x029BE;" ><!--large circle in circle -->
-<!ENTITY olt              "&#x029C0;" ><!--less-than in circle -->
-<!ENTITY omid             "&#x029B6;" ><!--vertical bar in circle -->
-<!ENTITY ominus           "&#x02296;" ><!--/ominus B: minus sign in circle -->
-<!ENTITY opar             "&#x029B7;" ><!--parallel in circle -->
-<!ENTITY operp            "&#x029B9;" ><!--perpendicular in circle -->
-<!ENTITY oplus            "&#x02295;" ><!--/oplus B: plus sign in circle -->
-<!ENTITY osol             "&#x02298;" ><!--/oslash B: solidus in circle -->
-<!ENTITY otimes           "&#x02297;" ><!--/otimes B: multiply sign in circle -->
-<!ENTITY Otimes           "&#x02A37;" ><!--multiply sign in double circle -->
-<!ENTITY otimesas         "&#x02A36;" ><!--multiply sign in circle, circumflex accent -->
-<!ENTITY ovbar            "&#x0233D;" ><!--circle with vertical bar -->
-<!ENTITY plusacir         "&#x02A23;" ><!--plus, circumflex accent above -->
-<!ENTITY plusb            "&#x0229E;" ><!--/boxplus B: plus sign in box -->
-<!ENTITY pluscir          "&#x02A22;" ><!--plus, small circle above -->
-<!ENTITY plusdo           "&#x02214;" ><!--/dotplus B: plus sign, dot above -->
-<!ENTITY plusdu           "&#x02A25;" ><!--plus sign, dot below -->
-<!ENTITY pluse            "&#x02A72;" ><!--plus, equals -->
-<!ENTITY plussim          "&#x02A26;" ><!--plus, similar below -->
-<!ENTITY plustwo          "&#x02A27;" ><!--plus, two; Nim-addition -->
-<!ENTITY prod             "&#x0220F;" ><!--/prod L: product operator -->
-<!ENTITY race             "&#x029DA;" ><!--reverse most positive, line below -->
-<!ENTITY roplus           "&#x02A2E;" ><!--plus sign in right half circle -->
-<!ENTITY rotimes          "&#x02A35;" ><!--multiply sign in right half circle -->
-<!ENTITY rthree           "&#x022CC;" ><!--/rightthreetimes B: -->
-<!ENTITY rtimes           "&#x022CA;" ><!--/rtimes B: times sign, right closed -->
-<!ENTITY sdot             "&#x022C5;" ><!--/cdot B: small middle dot -->
-<!ENTITY sdotb            "&#x022A1;" ><!--/dotsquare /boxdot B: small dot in box -->
-<!ENTITY setmn            "&#x02216;" ><!--/setminus B: reverse solidus -->
-<!ENTITY simplus          "&#x02A24;" ><!--plus, similar above -->
-<!ENTITY smashp           "&#x02A33;" ><!--smash product -->
-<!ENTITY solb             "&#x029C4;" ><!--solidus in square -->
-<!ENTITY sqcap            "&#x02293;" ><!--/sqcap B: square intersection -->
-<!ENTITY sqcaps           "&#x02293;&#x02063;" ><!--square intersection, serifs -->
-<!ENTITY sqcup            "&#x02294;" ><!--/sqcup B: square union -->
-<!ENTITY sqcups           "&#x02294;&#x02063;" ><!--square union, serifs -->
-<!ENTITY ssetmn           "&#x02216;" ><!--/smallsetminus B: sm reverse solidus -->
-<!ENTITY sstarf           "&#x022C6;" ><!--/star B: small star, filled -->
-<!ENTITY subdot           "&#x02ABD;" ><!--subset, with dot -->
-<!ENTITY sum              "&#x02211;" ><!--/sum L: summation operator -->
-<!ENTITY supdot           "&#x02ABE;" ><!--superset, with dot -->
-<!ENTITY timesb           "&#x022A0;" ><!--/boxtimes B: multiply sign in box -->
-<!ENTITY timesbar         "&#x02A31;" ><!--multiply sign, bar below -->
-<!ENTITY timesd           "&#x02A30;" ><!--times, dot -->
-<!ENTITY tridot           "&#x025EC;" ><!--dot in triangle -->
-<!ENTITY triminus         "&#x02A3A;" ><!--minus in triangle -->
-<!ENTITY triplus          "&#x02A39;" ><!--plus in triangle -->
-<!ENTITY trisb            "&#x029CD;" ><!--triangle, serifs at bottom -->
-<!ENTITY tritime          "&#x02A3B;" ><!--multiply in triangle -->
-<!ENTITY uplus            "&#x0228E;" ><!--/uplus B: plus sign in union -->
-<!ENTITY veebar           "&#x022BB;" ><!--/veebar B: logical or, bar below -->
-<!ENTITY wedbar           "&#x02A5F;" ><!--wedge, bar below -->
-<!ENTITY wreath           "&#x02240;" ><!--/wr B: wreath product -->
-<!ENTITY xcap             "&#x022C2;" ><!--/bigcap L: intersection operator -->
-<!ENTITY xcirc            "&#x025EF;" ><!--/bigcirc B: large circle -->
-<!ENTITY xcup             "&#x022C3;" ><!--/bigcup L: union operator -->
-<!ENTITY xdtri            "&#x025BD;" ><!--/bigtriangledown B: big dn tri, open -->
-<!ENTITY xodot            "&#x02299;" ><!--/bigodot L: circle dot operator -->
-<!ENTITY xoplus           "&#x02295;" ><!--/bigoplus L: circle plus operator -->
-<!ENTITY xotime           "&#x02297;" ><!--/bigotimes L: circle times operator -->
-<!ENTITY xsqcup           "&#x02294;" ><!--/bigsqcup L: square union operator -->
-<!ENTITY xuplus           "&#x0228E;" ><!--/biguplus L: -->
-<!ENTITY xutri            "&#x025B3;" ><!--/bigtriangleup B: big up tri, open -->
-<!ENTITY xvee             "&#x022C1;" ><!--/bigvee L: logical and operator -->
-<!ENTITY xwedge           "&#x022C0;" ><!--/bigwedge L: logical or operator -->
diff --git a/helm/dtd/isoamsc.ent b/helm/dtd/isoamsc.ent
deleted file mode 100644 (file)
index cce399c..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-
-<!--
-     File isoamsc.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1991
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY dlcorn           "&#x0231E;" ><!--/llcorner O: lower left corner -->
-<!ENTITY drcorn           "&#x0231F;" ><!--/lrcorner C: lower right corner -->
-<!ENTITY gtlPar           "&#x02995;" ><!--dbl left parenthesis, greater -->
-<!ENTITY langd            "&#x02991;" ><!--left angle, dot -->
-<!ENTITY lbrke            "&#x0298B;" ><!--left bracket, equal -->
-<!ENTITY lbrksld          "&#x0298F;" ><!--left bracket, solidus bottom corner -->
-<!ENTITY lbrkslu          "&#x0298D;" ><!--left bracket, solidus top corner -->
-<!ENTITY lceil            "&#x02308;" ><!--/lceil O: left ceiling -->
-<!ENTITY lfloor           "&#x0230A;" ><!--/lfloor O: left floor -->
-<!ENTITY lmoust           "&#x02998;" ><!--/lmoustache -->
-<!ENTITY lparlt           "&#x02993;" ><!--O: left parenthesis, lt -->
-<!ENTITY ltrPar           "&#x02996;" ><!--dbl right parenthesis, less -->
-<!ENTITY rangd            "&#x02992;" ><!--right angle, dot -->
-<!ENTITY rbrke            "&#x0298C;" ><!--right bracket, equal -->
-<!ENTITY rbrksld          "&#x0298E;" ><!--right bracket, solidus bottom corner -->
-<!ENTITY rbrkslu          "&#x02990;" ><!--right bracket, solidus top corner -->
-<!ENTITY rceil            "&#x02309;" ><!--/rceil C: right ceiling -->
-<!ENTITY rfloor           "&#x0230B;" ><!--/rfloor C: right floor -->
-<!ENTITY rmoust           "&#x02997;" ><!--/rmoustache -->
-<!ENTITY rpargt           "&#x02994;" ><!--C: right paren, gt -->
-<!ENTITY ulcorn           "&#x0231C;" ><!--/ulcorner O: upper left corner -->
-<!ENTITY urcorn           "&#x0231D;" ><!--/urcorner C: upper right corner -->
diff --git a/helm/dtd/isoamsn.ent b/helm/dtd/isoamsn.ent
deleted file mode 100644 (file)
index cddeba0..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-
-<!--
-     File isoamsn.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1991
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY gnap             "&#x02A8A;" ><!--/gnapprox N: greater, not approximate -->
-<!ENTITY gne              "&#x02269;" ><!--/gneq N: greater, not equals -->
-<!ENTITY gnE              "&#x02269;" ><!--/gneqq N: greater, not dbl equals -->
-<!ENTITY gnsim            "&#x022E7;" ><!--/gnsim N: greater, not similar -->
-<!ENTITY gvnE             "&#x02269;&#x00338;" ><!--/gvertneqq N: gt, vert, not dbl eq -->
-<!ENTITY lnap             "&#x02A89;" ><!--/lnapprox N: less, not approximate -->
-<!ENTITY lne              "&#x02268;" ><!--/lneq N: less, not equals -->
-<!ENTITY lnE              "&#x02268;" ><!--/lneqq N: less, not double equals -->
-<!ENTITY lnsim            "&#x022E6;" ><!--/lnsim N: less, not similar -->
-<!ENTITY lvnE             "&#x02268;&#x00338;" ><!--/lvertneqq N: less, vert, not dbl eq -->
-<!ENTITY nap              "&#x02249;" ><!--/napprox N: not approximate -->
-<!ENTITY napE             "&#x02A70;&#x00338;" ><!--not approximately equal or equal to -->
-<!ENTITY napid            "&#x0224B;&#x00338;" ><!--not approximately identical to -->
-<!ENTITY ncong            "&#x02247;" ><!--/ncong N: not congruent with -->
-<!ENTITY ncongdot         "&#x02A6D;&#x00338;" ><!--not congruent, dot -->
-<!ENTITY nequiv           "&#x02262;" ><!--/nequiv N: not identical with -->
-<!ENTITY nge              "&#x02271;&#x020E5;" ><!--/ngeq N: not greater-than-or-equal -->
-<!ENTITY ngE              "&#x02271;" ><!--/ngeqq N: not greater, dbl equals -->
-<!ENTITY nges             "&#x02271;" ><!--/ngeqslant N: not gt-or-eq, slanted -->
-<!ENTITY nGg              "&#x022D9;&#x00338;" ><!--not triple greater than -->
-<!ENTITY ngsim            "&#x02275;" ><!--not greater, similar -->
-<!ENTITY ngt              "&#x0226F;" ><!--/ngtr N: not greater-than -->
-<!ENTITY nGt              "&#x0226B;&#x00338;" ><!--not, vert, much greater than -->
-<!ENTITY nGtv             "&#x0226B;&#x00338;&#x02063;" ><!--not much greater than, variant -->
-<!ENTITY nle              "&#x02270;&#x020E5;" ><!--/nleq N: not less-than-or-equal -->
-<!ENTITY nlE              "&#x02270;" ><!--/nleqq N: not less, dbl equals -->
-<!ENTITY nles             "&#x02270;" ><!--/nleqslant N: not less-or-eq, slant -->
-<!ENTITY nLl              "&#x022D8;&#x00338;" ><!--not triple less than -->
-<!ENTITY nlsim            "&#x02274;" ><!--not less, similar -->
-<!ENTITY nlt              "&#x0226E;" ><!--/nless N: not less-than -->
-<!ENTITY nLt              "&#x0226A;&#x00338;" ><!--not, vert, much less than -->
-<!ENTITY nltri            "&#x022EA;" ><!--/ntriangleleft N: not left triangle -->
-<!ENTITY nltrie           "&#x022EC;" ><!--/ntrianglelefteq N: not l tri, eq -->
-<!ENTITY nLtv             "&#x0226A;&#x00338;&#x02063;" ><!--not much less than, variant -->
-<!ENTITY nmid             "&#x02224;" ><!--/nmid -->
-<!ENTITY npar             "&#x02226;" ><!--/nparallel N: not parallel -->
-<!ENTITY npr              "&#x02280;" ><!--/nprec N: not precedes -->
-<!ENTITY nprcue           "&#x022E0;" ><!--not curly precedes, eq -->
-<!ENTITY npre             "&#x02AAF;&#x00338;" ><!--/npreceq N: not precedes, equals -->
-<!ENTITY nrtri            "&#x022EB;" ><!--/ntriangleright N: not rt triangle -->
-<!ENTITY nrtrie           "&#x022ED;" ><!--/ntrianglerighteq N: not r tri, eq -->
-<!ENTITY nsc              "&#x02281;" ><!--/nsucc N: not succeeds -->
-<!ENTITY nsccue           "&#x022E1;" ><!--not succeeds, curly eq -->
-<!ENTITY nsce             "&#x02AB0;&#x00338;" ><!--/nsucceq N: not succeeds, equals -->
-<!ENTITY nsim             "&#x02241;" ><!--/nsim N: not similar -->
-<!ENTITY nsime            "&#x02244;" ><!--/nsimeq N: not similar, equals -->
-<!ENTITY nsmid            "&#x02224;&#x02063;" ><!--/nshortmid -->
-<!ENTITY nspar            "&#x02226;&#x02063;" ><!--/nshortparallel N: not short par -->
-<!ENTITY nsqsube          "&#x022E2;" ><!--not, square subset, equals -->
-<!ENTITY nsqsupe          "&#x022E3;" ><!--not, square superset, equals -->
-<!ENTITY nsub             "&#x02284;" ><!--not subset -->
-<!ENTITY nsube            "&#x02288;" ><!--/nsubseteq N: not subset, equals -->
-<!ENTITY nsubE            "&#x02288;" ><!--/nsubseteqq N: not subset, dbl eq -->
-<!ENTITY nsup             "&#x02285;" ><!--not superset -->
-<!ENTITY nsupe            "&#x02289;" ><!--/nsupseteq N: not superset, equals -->
-<!ENTITY nsupE            "&#x02289;" ><!--/nsupseteqq N: not superset, dbl eq -->
-<!ENTITY ntgl             "&#x02279;" ><!--not greater, less -->
-<!ENTITY ntlg             "&#x02278;" ><!--not less, greater -->
-<!ENTITY nvap             "&#x02249;&#x00338;" ><!--not, vert, approximate -->
-<!ENTITY nvdash           "&#x022AC;" ><!--/nvdash N: not vertical, dash -->
-<!ENTITY nvDash           "&#x022AD;" ><!--/nvDash N: not vertical, dbl dash -->
-<!ENTITY nVdash           "&#x022AE;" ><!--/nVdash N: not dbl vertical, dash -->
-<!ENTITY nVDash           "&#x022AF;" ><!--/nVDash N: not dbl vert, dbl dash -->
-<!ENTITY nvge             "&#x02271;" ><!--not, vert, greater-than-or-equal -->
-<!ENTITY nvgt             "&#x0226F;" ><!--not, vert, greater-than -->
-<!ENTITY nvle             "&#x02270;" ><!--not, vert, less-than-or-equal -->
-<!ENTITY nvlt             "&#x0226E;" ><!--not, vert, less-than -->
-<!ENTITY nvltrie          "&#x022EC;&#x00338;" ><!--not, vert, left triangle, equals -->
-<!ENTITY nvrtrie          "&#x022ED;&#x00338;" ><!--not, vert, right triangle, equals -->
-<!ENTITY nvsim            "&#x02241;&#x00338;" ><!--not, vert, similar -->
-<!ENTITY parsim           "&#x02AF3;" ><!--parallel, similar -->
-<!ENTITY prnap            "&#x022E8;" ><!--/precnapprox N: precedes, not approx -->
-<!ENTITY prnE             "&#x02AB5;" ><!--/precneqq N: precedes, not dbl eq -->
-<!ENTITY prnsim           "&#x022E8;" ><!--/precnsim N: precedes, not similar -->
-<!ENTITY rnmid            "&#x02AEE;" ><!--reverse /nmid -->
-<!ENTITY scnap            "&#x022E9;" ><!--/succnapprox N: succeeds, not approx -->
-<!ENTITY scnE             "&#x02AB6;" ><!--/succneqq N: succeeds, not dbl eq -->
-<!ENTITY scnsim           "&#x022E9;" ><!--/succnsim N: succeeds, not similar -->
-<!ENTITY simne            "&#x02246;" ><!--similar, not equals -->
-<!ENTITY solbar           "&#x0233F;" ><!--solidus, bar through -->
-<!ENTITY subne            "&#x0228A;" ><!--/subsetneq N: subset, not equals -->
-<!ENTITY subnE            "&#x0228A;" ><!--/subsetneqq N: subset, not dbl eq -->
-<!ENTITY supne            "&#x0228B;" ><!--/supsetneq N: superset, not equals -->
-<!ENTITY supnE            "&#x0228B;" ><!--/supsetneqq N: superset, not dbl eq -->
-<!ENTITY vnsub            "&#x02284;" ><!--/nsubset N: not subset, var -->
-<!ENTITY vnsup            "&#x02285;" ><!--/nsupset N: not superset, var -->
-<!ENTITY vsubne           "&#x0228A;&#x02063;" ><!--/varsubsetneq N: subset, not eq, var -->
-<!ENTITY vsubnE           "&#x0228A;&#x02063;" ><!--/varsubsetneqq N: subset not dbl eq, var -->
-<!ENTITY vsupne           "&#x0228B;&#x02063;" ><!--/varsupsetneq N: superset, not eq, var -->
-<!ENTITY vsupnE           "&#x0228B;&#x02063;" ><!--/varsupsetneqq N: super not dbl eq, var -->
diff --git a/helm/dtd/isoamso.ent b/helm/dtd/isoamso.ent
deleted file mode 100644 (file)
index 8ac4bdb..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-     File isoamso.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1991
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY ang              "&#x02220;" ><!--/angle - angle -->
-<!ENTITY ange             "&#x029A4;" ><!--angle, equal -->
-<!ENTITY angmsd           "&#x02221;" ><!--/measuredangle - angle-measured -->
-<!ENTITY angmsdaa         "&#x029A8;" ><!--angle-measured, arrow, up, right -->
-<!ENTITY angmsdab         "&#x029A9;" ><!--angle-measured, arrow, up, left -->
-<!ENTITY angmsdac         "&#x029AA;" ><!--angle-measured, arrow, down, right -->
-<!ENTITY angmsdad         "&#x029AB;" ><!--angle-measured, arrow, down, left -->
-<!ENTITY angmsdae         "&#x029AC;" ><!--angle-measured, arrow, right, up -->
-<!ENTITY angmsdaf         "&#x029AD;" ><!--angle-measured, arrow, left, up -->
-<!ENTITY angmsdag         "&#x029AE;" ><!--angle-measured, arrow, right, down -->
-<!ENTITY angmsdah         "&#x029AF;" ><!--angle-measured, arrow, left, down -->
-<!ENTITY angrtvb          "&#x0299D;&#x02063;" ><!--right angle-measured -->
-<!ENTITY angrtvbd         "&#x0299D;" ><!--right angle-measured, dot -->
-<!ENTITY bbrk             "&#x023B5;" ><!--bottom square bracket -->
-<!ENTITY bemptyv          "&#x029B0;" ><!--reversed circle, slash -->
-<!ENTITY beth             "&#x02136;" ><!--/beth - beth, Hebrew -->
-<!ENTITY boxbox           "&#x029C9;" ><!--two joined squares -->
-<!ENTITY bprime           "&#x02035;" ><!--/backprime - reverse prime -->
-<!ENTITY bsemi            "&#x0204F;" ><!--reverse semi-colon -->
-<!ENTITY cemptyv          "&#x029B2;" ><!--circle, slash, small circle above -->
-<!ENTITY cirE             "&#x029C3;" ><!--circle, two horizontal stroked to the right -->
-<!ENTITY cirscir          "&#x029C2;" ><!--circle, small circle to the right -->
-<!ENTITY comp             "&#x02201;" ><!--/complement - complement sign -->
-<!ENTITY daleth           "&#x02138;" ><!--/daleth - daleth, Hebrew -->
-<!ENTITY demptyv          "&#x029B1;" ><!--circle, slash, bar above -->
-<!ENTITY ell              "&#x02113;" ><!--/ell - cursive small l -->
-<!ENTITY empty            "&#x02205;&#x02063;" ><!--/emptyset - zero, slash -->
-<!ENTITY emptyv           "&#x02205;" ><!--/varnothing - circle, slash -->
-<!ENTITY gimel            "&#x02137;" ><!--/gimel - gimel, Hebrew -->
-<!ENTITY iiota            "&#x02129;" ><!--inverted iota -->
-<!ENTITY image            "&#x02111;" ><!--/Im - imaginary   -->
-<!ENTITY imath            "&#x00131;" ><!--/imath - small i, no dot -->
-<!ENTITY jmath            "&#x0006A;&#x02063;" ><!--/jmath - small j, no dot -->
-<!ENTITY laemptyv         "&#x029B4;" ><!--circle, slash, left arrow above -->
-<!ENTITY lltri            "&#x025FA;" ><!--lower left triangle -->
-<!ENTITY lrtri            "&#x022BF;" ><!--lower right triangle -->
-<!ENTITY mho              "&#x02127;" ><!--/mho - conductance -->
-<!ENTITY nang             "&#x02220;&#x00338;" ><!--not, vert, angle -->
-<!ENTITY nexist           "&#x02204;" ><!--/nexists - negated exists -->
-<!ENTITY oS               "&#x024C8;" ><!--/circledS - capital S in circle -->
-<!ENTITY plank            "&#x0210F;" ><!--/hbar - Planck's over 2pi -->
-<!ENTITY plankv           "&#x0210F;" ><!--/hslash - variant Planck's over 2pi -->
-<!ENTITY raemptyv         "&#x029B3;" ><!--circle, slash, right arrow above -->
-<!ENTITY range            "&#x029A5;" ><!--reverse angle, equal -->
-<!ENTITY real             "&#x0211C;" ><!--/Re - real -->
-<!ENTITY tbrk             "&#x023B4;" ><!--top square bracket -->
-<!ENTITY ultri            "&#x025F8;" ><!--upper left triangle -->
-<!ENTITY urtri            "&#x025F9;" ><!--upper right triangle -->
-<!ENTITY vzigzag          "&#x0299A;" ><!--vertical zig-zag line -->
-<!ENTITY weierp           "&#x02118;" ><!--/wp - Weierstrass p -->
diff --git a/helm/dtd/isoamsr.ent b/helm/dtd/isoamsr.ent
deleted file mode 100644 (file)
index 7fec582..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-
-<!--
-     File isoamsr.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1991
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY ape              "&#x0224A;" ><!--/approxeq R: approximate, equals -->
-<!ENTITY apE              "&#x0224A;" ><!--approximately equal or equal to -->
-<!ENTITY apid             "&#x0224B;" ><!--approximately identical to -->
-<!ENTITY asymp            "&#x0224D;" ><!--/asymp R: asymptotically equal to -->
-<!ENTITY Barv             "&#x02AE7;" ><!--vert, dbl bar (over) -->
-<!ENTITY bcong            "&#x0224C;" ><!--/backcong R: reverse congruent -->
-<!ENTITY bepsi            "&#x0213C;" ><!--/backepsilon R: such that -->
-<!ENTITY bowtie           "&#x022C8;" ><!--/bowtie R: -->
-<!ENTITY bsim             "&#x0223D;" ><!--/backsim R: reverse similar -->
-<!ENTITY bsime            "&#x022CD;" ><!--/backsimeq R: reverse similar, eq -->
-<!ENTITY bsolhsub         "&#x0005C;&#x02282;" ><!--reverse solidus, subset -->
-<!ENTITY bump             "&#x0224E;" ><!--/Bumpeq R: bumpy equals -->
-<!ENTITY bumpe            "&#x0224F;" ><!--/bumpeq R: bumpy equals, equals -->
-<!ENTITY bumpE            "&#x02AAE;" ><!--bump, equals -->
-<!ENTITY cire             "&#x02257;" ><!--/circeq R: circle, equals -->
-<!ENTITY Colon            "&#x02237;" ><!--/Colon, two colons -->
-<!ENTITY colone           "&#x02254;" ><!--/coloneq R: colon, equals -->
-<!ENTITY Colone           "&#x02A74;" ><!--double colon, equals -->
-<!ENTITY congdot          "&#x02A6D;" ><!--congruent, dot -->
-<!ENTITY csub             "&#x02ACF;" ><!--subset, closed -->
-<!ENTITY csube            "&#x02AD1;" ><!--subset, closed, equals -->
-<!ENTITY csup             "&#x02AD0;" ><!--superset, closed -->
-<!ENTITY csupe            "&#x02AD2;" ><!--superset, closed, equals -->
-<!ENTITY cuepr            "&#x022DE;" ><!--/curlyeqprec R: curly eq, precedes -->
-<!ENTITY cuesc            "&#x022DF;" ><!--/curlyeqsucc R: curly eq, succeeds -->
-<!ENTITY dashv            "&#x022A3;" ><!--/dashv R: dash, vertical -->
-<!ENTITY Dashv            "&#x02AE4;" ><!--dbl dash, vertical -->
-<!ENTITY easter           "&#x0225B;" ><!--equal, asterisk above -->
-<!ENTITY ecir             "&#x02256;" ><!--/eqcirc R: circle on equals sign -->
-<!ENTITY ecolon           "&#x02255;" ><!--/eqcolon R: equals, colon -->
-<!ENTITY eDDot            "&#x02A77;" ><!--/ddotseq R: equal with four dots -->
-<!ENTITY eDot             "&#x02251;" ><!--/doteqdot /Doteq R: eq, even dots -->
-<!ENTITY efDot            "&#x02252;" ><!--/fallingdotseq R: eq, falling dots -->
-<!ENTITY eg               "&#x02A9A;" ><!--equal-or-greater -->
-<!ENTITY egs              "&#x022DD;" ><!--/eqslantgtr R: equal-or-gtr, slanted -->
-<!ENTITY egsdot           "&#x02A98;" ><!--equal-or-greater, slanted, dot inside -->
-<!ENTITY el               "&#x02A99;" ><!--equal-or-less -->
-<!ENTITY els              "&#x022DC;" ><!--/eqslantless R: eq-or-less, slanted -->
-<!ENTITY elsdot           "&#x02A97;" ><!--equal-or-less, slanted, dot inside -->
-<!ENTITY equest           "&#x0225F;" ><!--/questeq R: equal with questionmark -->
-<!ENTITY equivDD          "&#x02A78;" ><!--equivalent, four dots above -->
-<!ENTITY erDot            "&#x02253;" ><!--/risingdotseq R: eq, rising dots -->
-<!ENTITY esdot            "&#x02250;" ><!--/doteq R: equals, single dot above -->
-<!ENTITY esim             "&#x02242;" ><!--/esim R: equals, similar -->
-<!ENTITY Esim             "&#x02A73;" ><!--equal, similar -->
-<!ENTITY fork             "&#x022D4;" ><!--/pitchfork R: pitchfork -->
-<!ENTITY forkv            "&#x02AD9;" ><!--fork, variant -->
-<!ENTITY frown            "&#x02322;" ><!--/frown R: down curve -->
-<!ENTITY gap              "&#x02273;" ><!--/gtrapprox R: greater, approximate -->
-<!ENTITY gE               "&#x02267;" ><!--/geqq R: greater, double equals -->
-<!ENTITY gel              "&#x022DB;" ><!--/gtreqless R: greater, equals, less -->
-<!ENTITY gEl              "&#x022DB;" ><!--/gtreqqless R: gt, dbl equals, less -->
-<!ENTITY ges              "&#x02A7E;" ><!--/geqslant R: gt-or-equal, slanted -->
-<!ENTITY gescc            "&#x02AA9;" ><!--greater than, closed by curve, equal, slanted -->
-<!ENTITY gesdot           "&#x02A80;" ><!--greater-than-or-equal, slanted, dot inside -->
-<!ENTITY gesdoto          "&#x02A82;" ><!--greater-than-or-equal, slanted, dot above -->
-<!ENTITY gesdotol         "&#x02A84;" ><!--greater-than-or-equal, slanted, dot above left -->
-<!ENTITY gesl             "&#x022DB;&#x02063;" ><!--greater, equal, slanted, less -->
-<!ENTITY gesles           "&#x02A94;" ><!--greater, equal, slanted, less, equal, slanted -->
-<!ENTITY Gg               "&#x022D9;" ><!--/ggg /Gg /gggtr R: triple gtr-than -->
-<!ENTITY gl               "&#x02277;" ><!--/gtrless R: greater, less -->
-<!ENTITY gla              "&#x02AA5;" ><!--greater, less, apart -->
-<!ENTITY glE              "&#x02A92;" ><!--greater, less, equal -->
-<!ENTITY glj              "&#x02AA4;" ><!--greater, less, overlapping -->
-<!ENTITY gsim             "&#x02273;" ><!--/gtrsim R: greater, similar -->
-<!ENTITY gsime            "&#x02A8E;" ><!--greater, similar, equal -->
-<!ENTITY gsiml            "&#x02A90;" ><!--greater, similar, less -->
-<!ENTITY Gt               "&#x0226B;" ><!--/gg R: dbl greater-than sign -->
-<!ENTITY gtcc             "&#x02AA7;" ><!--greater than, closed by curve -->
-<!ENTITY gtcir            "&#x02A7A;" ><!--greater than, circle inside -->
-<!ENTITY gtdot            "&#x022D7;" ><!--/gtrdot R: greater than, with dot -->
-<!ENTITY gtquest          "&#x02A7C;" ><!--greater than, questionmark above -->
-<!ENTITY gtrarr           "&#x02978;" ><!--greater than, right arrow -->
-<!ENTITY homtht           "&#x0223B;" ><!--homothetic -->
-<!ENTITY lap              "&#x02272;" ><!--/lessapprox R: less, approximate -->
-<!ENTITY lat              "&#x02AAB;" ><!--larger than -->
-<!ENTITY late             "&#x02AAD;" ><!--larger than or equal -->
-<!ENTITY lates            "&#x02AAD;&#x02063;" ><!--larger than or equal, slanted -->
-<!ENTITY lE               "&#x02266;" ><!--/leqq R: less, double equals -->
-<!ENTITY leg              "&#x022DA;" ><!--/lesseqgtr R: less, eq, greater -->
-<!ENTITY lEg              "&#x022DA;" ><!--/lesseqqgtr R: less, dbl eq, greater -->
-<!ENTITY les              "&#x02A7D;" ><!--/leqslant R: less-than-or-eq, slant -->
-<!ENTITY lescc            "&#x02AA8;" ><!--less than, closed by curve, equal, slanted -->
-<!ENTITY lesdot           "&#x02A7F;" ><!--less-than-or-equal, slanted, dot inside -->
-<!ENTITY lesdoto          "&#x02A81;" ><!--less-than-or-equal, slanted, dot above -->
-<!ENTITY lesdotor         "&#x02A83;" ><!--less-than-or-equal, slanted, dot above right -->
-<!ENTITY lesg             "&#x022DA;&#x02063;" ><!--less, equal, slanted, greater -->
-<!ENTITY lesges           "&#x02A93;" ><!--less, equal, slanted, greater, equal, slanted -->
-<!ENTITY lg               "&#x02276;" ><!--/lessgtr R: less, greater -->
-<!ENTITY lgE              "&#x02A91;" ><!--less, greater, equal -->
-<!ENTITY Ll               "&#x022D8;" ><!--/Ll /lll /llless R: triple less-than -->
-<!ENTITY lsim             "&#x02272;" ><!--/lesssim R: less, similar -->
-<!ENTITY lsime            "&#x02A8D;" ><!--less, similar, equal -->
-<!ENTITY lsimg            "&#x02A8F;" ><!--less, similar, greater -->
-<!ENTITY Lt               "&#x0226A;" ><!--/ll R: double less-than sign -->
-<!ENTITY ltcc             "&#x02AA6;" ><!--less than, closed by curve -->
-<!ENTITY ltcir            "&#x02A79;" ><!--less than, circle inside -->
-<!ENTITY ltdot            "&#x022D6;" ><!--/lessdot R: less than, with dot -->
-<!ENTITY ltlarr           "&#x02976;" ><!--less than, left arrow -->
-<!ENTITY ltquest          "&#x02A7B;" ><!--less than, questionmark above -->
-<!ENTITY ltrie            "&#x022B4;" ><!--/trianglelefteq R: left triangle, eq -->
-<!ENTITY mcomma           "&#x02A29;" ><!--minus, comma above -->
-<!ENTITY mDDot            "&#x0223A;" ><!--minus with four dots, geometric properties -->
-<!ENTITY mid              "&#x02223;" ><!--/mid R: -->
-<!ENTITY mlcp             "&#x02ADB;" ><!--/mlcp -->
-<!ENTITY models           "&#x022A7;" ><!--/models R: -->
-<!ENTITY mstpos           "&#x0223E;" ><!--most positive -->
-<!ENTITY pr               "&#x0227A;" ><!--/prec R: precedes -->
-<!ENTITY Pr               "&#x02ABB;" ><!--dbl precedes -->
-<!ENTITY prap             "&#x0227E;" ><!--/precapprox R: precedes, approximate -->
-<!ENTITY prcue            "&#x0227C;" ><!--/preccurlyeq R: precedes, curly eq -->
-<!ENTITY pre              "&#x02AAF;" ><!--/preceq R: precedes, equals -->
-<!ENTITY prE              "&#x02AAF;" ><!--precedes, dbl equals -->
-<!ENTITY prsim            "&#x0227E;" ><!--/precsim R: precedes, similar -->
-<!ENTITY prurel           "&#x022B0;" ><!--element precedes under relation -->
-<!ENTITY ratio            "&#x02236;" ><!--/ratio -->
-<!ENTITY rtrie            "&#x022B5;" ><!--/trianglerighteq R: right tri, eq -->
-<!ENTITY rtriltri         "&#x029CE;" ><!--right triangle above left triangle -->
-<!ENTITY sc               "&#x0227B;" ><!--/succ R: succeeds -->
-<!ENTITY Sc               "&#x02ABC;" ><!--dbl succeeds -->
-<!ENTITY scap             "&#x0227F;" ><!--/succapprox R: succeeds, approximate -->
-<!ENTITY sccue            "&#x0227D;" ><!--/succcurlyeq R: succeeds, curly eq -->
-<!ENTITY sce              "&#x0227D;" ><!--/succeq R: succeeds, equals -->
-<!ENTITY scE              "&#x0227E;" ><!--succeeds, dbl equals -->
-<!ENTITY scsim            "&#x0227F;" ><!--/succsim R: succeeds, similar -->
-<!ENTITY sdote            "&#x02A66;" ><!--equal, dot below -->
-<!ENTITY simg             "&#x02A9E;" ><!--similar, greater -->
-<!ENTITY simgE            "&#x02AA0;" ><!--similar, greater, equal -->
-<!ENTITY siml             "&#x02A9D;" ><!--similar, less -->
-<!ENTITY simlE            "&#x02A9F;" ><!--similar, less, equal -->
-<!ENTITY smid             "&#x02223;&#x02063;" ><!--/shortmid R: -->
-<!ENTITY smile            "&#x02323;" ><!--/smile R: up curve -->
-<!ENTITY smt              "&#x02AAA;" ><!--smaller than -->
-<!ENTITY smte             "&#x02AAC;" ><!--smaller than or equal -->
-<!ENTITY smtes            "&#x02AAC;&#x02063;" ><!--smaller than or equal, slanted -->
-<!ENTITY spar             "&#x02225;&#x02063;" ><!--/shortparallel R: short parallel -->
-<!ENTITY sqsub            "&#x0228F;" ><!--/sqsubset R: square subset -->
-<!ENTITY sqsube           "&#x02291;" ><!--/sqsubseteq R: square subset, equals -->
-<!ENTITY sqsup            "&#x02290;" ><!--/sqsupset R: square superset -->
-<!ENTITY sqsupe           "&#x02292;" ><!--/sqsupseteq R: square superset, eq -->
-<!ENTITY Sub              "&#x022D0;" ><!--/Subset R: double subset -->
-<!ENTITY subE             "&#x02286;" ><!--/subseteqq R: subset, dbl equals -->
-<!ENTITY subedot          "&#x02AC3;" ><!--subset, equals, dot -->
-<!ENTITY submult          "&#x02AC1;" ><!--subset, multiply -->
-<!ENTITY subplus          "&#x02ABF;" ><!--subset, plus -->
-<!ENTITY subrarr          "&#x02979;" ><!--subset, right arrow -->
-<!ENTITY subsim           "&#x02AC7;" ><!--subset, similar -->
-<!ENTITY subsub           "&#x02AD5;" ><!--subset above subset -->
-<!ENTITY subsup           "&#x02AD3;" ><!--subset above superset -->
-<!ENTITY Sup              "&#x022D1;" ><!--/Supset R: dbl superset -->
-<!ENTITY supdsub          "&#x02AD8;" ><!--superset, subset, dash joining them -->
-<!ENTITY supE             "&#x02287;" ><!--/supseteqq R: superset, dbl equals -->
-<!ENTITY supedot          "&#x02AC4;" ><!--superset, equals, dot -->
-<!ENTITY suphsol          "&#x02283;&#x0002F;" ><!--superset, solidus -->
-<!ENTITY suphsub          "&#x02AD7;" ><!--superset, subset -->
-<!ENTITY suplarr          "&#x0297B;" ><!--superset, left arrow -->
-<!ENTITY supmult          "&#x02AC2;" ><!--superset, multiply -->
-<!ENTITY supplus          "&#x02AC0;" ><!--superset, plus -->
-<!ENTITY supsim           "&#x02AC8;" ><!--superset, similar -->
-<!ENTITY supsub           "&#x02AD4;" ><!--superset above subset -->
-<!ENTITY supsup           "&#x02AD6;" ><!--superset above superset -->
-<!ENTITY thkap            "&#x02248;&#x02063;" ><!--/thickapprox R: thick approximate -->
-<!ENTITY thksim           "&#x0223C;" ><!--/thicksim R: thick similar -->
-<!ENTITY topfork          "&#x02ADA;" ><!--fork with top -->
-<!ENTITY trie             "&#x0225C;" ><!--/triangleq R: triangle, equals -->
-<!ENTITY twixt            "&#x0226C;" ><!--/between R: between -->
-<!ENTITY vBar             "&#x02AE8;" ><!--vert, dbl bar (under) -->
-<!ENTITY Vbar             "&#x02AEB;" ><!--dbl vert, bar (under) -->
-<!ENTITY vBarv            "&#x02AE9;" ><!--dbl bar, vert over and under -->
-<!ENTITY vdash            "&#x022A2;" ><!--/vdash R: vertical, dash -->
-<!ENTITY vDash            "&#x022A8;" ><!--/vDash R: vertical, dbl dash -->
-<!ENTITY Vdash            "&#x022A9;" ><!--/Vdash R: dbl vertical, dash -->
-<!ENTITY VDash            "&#x022AB;" ><!--dbl vert, dbl dash -->
-<!ENTITY Vdashl           "&#x02AE6;" ><!--vertical, dash (long) -->
-<!ENTITY vltri            "&#x022B2;" ><!--/vartriangleleft R: l tri, open, var -->
-<!ENTITY vprop            "&#x0221D;" ><!--/varpropto R: proportional, variant -->
-<!ENTITY vrtri            "&#x022B3;" ><!--/vartriangleright R: r tri, open, var -->
-<!ENTITY Vvdash           "&#x022AA;" ><!--/Vvdash R: triple vertical, dash -->
diff --git a/helm/dtd/isobox.ent b/helm/dtd/isobox.ent
deleted file mode 100644 (file)
index 630edc5..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-
-<!--
-     File isobox.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1986
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY boxdl            "&#x02510;" ><!--lower left quadrant -->
-<!ENTITY boxdL            "&#x02555;" ><!--lower left quadrant -->
-<!ENTITY boxDl            "&#x02556;" ><!--lower left quadrant -->
-<!ENTITY boxDL            "&#x02557;" ><!--lower left quadrant -->
-<!ENTITY boxdr            "&#x0250C;" ><!--lower right quadrant -->
-<!ENTITY boxdR            "&#x02552;" ><!--lower right quadrant -->
-<!ENTITY boxDr            "&#x02553;" ><!--lower right quadrant -->
-<!ENTITY boxDR            "&#x02554;" ><!--lower right quadrant -->
-<!ENTITY boxh             "&#x02500;" ><!--horizontal line  -->
-<!ENTITY boxH             "&#x02550;" ><!--horizontal line -->
-<!ENTITY boxhd            "&#x0252C;" ><!--lower left and right quadrants -->
-<!ENTITY boxhD            "&#x02565;" ><!--lower left and right quadrants -->
-<!ENTITY boxHd            "&#x02564;" ><!--lower left and right quadrants -->
-<!ENTITY boxHD            "&#x02566;" ><!--lower left and right quadrants -->
-<!ENTITY boxhu            "&#x02534;" ><!--upper left and right quadrants -->
-<!ENTITY boxhU            "&#x02568;" ><!--upper left and right quadrants -->
-<!ENTITY boxHu            "&#x02567;" ><!--upper left and right quadrants -->
-<!ENTITY boxHU            "&#x02569;" ><!--upper left and right quadrants -->
-<!ENTITY boxul            "&#x02518;" ><!--upper left quadrant -->
-<!ENTITY boxuL            "&#x0255B;" ><!--upper left quadrant -->
-<!ENTITY boxUl            "&#x0255C;" ><!--upper left quadrant -->
-<!ENTITY boxUL            "&#x0255D;" ><!--upper left quadrant -->
-<!ENTITY boxur            "&#x02514;" ><!--upper right quadrant -->
-<!ENTITY boxuR            "&#x02558;" ><!--upper right quadrant -->
-<!ENTITY boxUr            "&#x02559;" ><!--upper right quadrant -->
-<!ENTITY boxUR            "&#x0255A;" ><!--upper right quadrant -->
-<!ENTITY boxv             "&#x02502;" ><!--vertical line -->
-<!ENTITY boxV             "&#x02551;" ><!--vertical line -->
-<!ENTITY boxvh            "&#x0253C;" ><!--all four quadrants -->
-<!ENTITY boxvH            "&#x0256A;" ><!--all four quadrants -->
-<!ENTITY boxVh            "&#x0256B;" ><!--all four quadrants -->
-<!ENTITY boxVH            "&#x0256C;" ><!--all four quadrants -->
-<!ENTITY boxvl            "&#x02524;" ><!--upper and lower left quadrants -->
-<!ENTITY boxvL            "&#x02561;" ><!--upper and lower left quadrants -->
-<!ENTITY boxVl            "&#x02562;" ><!--upper and lower left quadrants -->
-<!ENTITY boxVL            "&#x02563;" ><!--upper and lower left quadrants -->
-<!ENTITY boxvr            "&#x0251C;" ><!--upper and lower right quadrants -->
-<!ENTITY boxvR            "&#x0255E;" ><!--upper and lower right quadrants -->
-<!ENTITY boxVr            "&#x0255F;" ><!--upper and lower right quadrants -->
-<!ENTITY boxVR            "&#x02560;" ><!--upper and lower right quadrants -->
diff --git a/helm/dtd/isocyr1.ent b/helm/dtd/isocyr1.ent
deleted file mode 100644 (file)
index 4bcc9e4..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-
-<!--
-     File isocyr1.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1986
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY acy              "&#x00430;" ><!--=small a, Cyrillic -->
-<!ENTITY Acy              "&#x00410;" ><!--=capital A, Cyrillic -->
-<!ENTITY bcy              "&#x00431;" ><!--=small be, Cyrillic -->
-<!ENTITY Bcy              "&#x00411;" ><!--=capital BE, Cyrillic -->
-<!ENTITY chcy             "&#x00447;" ><!--=small che, Cyrillic -->
-<!ENTITY CHcy             "&#x00427;" ><!--=capital CHE, Cyrillic -->
-<!ENTITY dcy              "&#x00434;" ><!--=small de, Cyrillic -->
-<!ENTITY Dcy              "&#x00414;" ><!--=capital DE, Cyrillic -->
-<!ENTITY ecy              "&#x0044D;" ><!--=small e, Cyrillic -->
-<!ENTITY Ecy              "&#x0042D;" ><!--=capital E, Cyrillic -->
-<!ENTITY fcy              "&#x00444;" ><!--=small ef, Cyrillic -->
-<!ENTITY Fcy              "&#x00424;" ><!--=capital EF, Cyrillic -->
-<!ENTITY gcy              "&#x00433;" ><!--=small ghe, Cyrillic -->
-<!ENTITY Gcy              "&#x00413;" ><!--=capital GHE, Cyrillic -->
-<!ENTITY hardcy           "&#x0044A;" ><!--=small hard sign, Cyrillic -->
-<!ENTITY HARDcy           "&#x0042A;" ><!--=capital HARD sign, Cyrillic -->
-<!ENTITY icy              "&#x00438;" ><!--=small i, Cyrillic -->
-<!ENTITY Icy              "&#x00418;" ><!--=capital I, Cyrillic -->
-<!ENTITY iecy             "&#x00435;" ><!--=small ie, Cyrillic -->
-<!ENTITY IEcy             "&#x00415;" ><!--=capital IE, Cyrillic -->
-<!ENTITY iocy             "&#x00451;" ><!--=small io, Russian -->
-<!ENTITY IOcy             "&#x00401;" ><!--=capital IO, Russian -->
-<!ENTITY jcy              "&#x00439;" ><!--=small short i, Cyrillic -->
-<!ENTITY Jcy              "&#x00419;" ><!--=capital short I, Cyrillic -->
-<!ENTITY kcy              "&#x0043A;" ><!--=small ka, Cyrillic -->
-<!ENTITY Kcy              "&#x0041A;" ><!--=capital KA, Cyrillic -->
-<!ENTITY khcy             "&#x00445;" ><!--=small ha, Cyrillic -->
-<!ENTITY KHcy             "&#x00425;" ><!--=capital HA, Cyrillic -->
-<!ENTITY lcy              "&#x0043B;" ><!--=small el, Cyrillic -->
-<!ENTITY Lcy              "&#x0041B;" ><!--=capital EL, Cyrillic -->
-<!ENTITY mcy              "&#x0043C;" ><!--=small em, Cyrillic -->
-<!ENTITY Mcy              "&#x0041C;" ><!--=capital EM, Cyrillic -->
-<!ENTITY ncy              "&#x0043D;" ><!--=small en, Cyrillic -->
-<!ENTITY Ncy              "&#x0041D;" ><!--=capital EN, Cyrillic -->
-<!ENTITY numero           "&#x02116;" ><!--=numero sign -->
-<!ENTITY ocy              "&#x0043E;" ><!--=small o, Cyrillic -->
-<!ENTITY Ocy              "&#x0041E;" ><!--=capital O, Cyrillic -->
-<!ENTITY pcy              "&#x0043F;" ><!--=small pe, Cyrillic -->
-<!ENTITY Pcy              "&#x0041F;" ><!--=capital PE, Cyrillic -->
-<!ENTITY rcy              "&#x00440;" ><!--=small er, Cyrillic -->
-<!ENTITY Rcy              "&#x00420;" ><!--=capital ER, Cyrillic -->
-<!ENTITY scy              "&#x00441;" ><!--=small es, Cyrillic -->
-<!ENTITY Scy              "&#x00421;" ><!--=capital ES, Cyrillic -->
-<!ENTITY shchcy           "&#x00449;" ><!--=small shcha, Cyrillic -->
-<!ENTITY SHCHcy           "&#x00429;" ><!--=capital SHCHA, Cyrillic -->
-<!ENTITY shcy             "&#x00448;" ><!--=small sha, Cyrillic -->
-<!ENTITY SHcy             "&#x00428;" ><!--=capital SHA, Cyrillic -->
-<!ENTITY softcy           "&#x0044C;" ><!--=small soft sign, Cyrillic -->
-<!ENTITY SOFTcy           "&#x0042C;" ><!--=capital SOFT sign, Cyrillic -->
-<!ENTITY tcy              "&#x00442;" ><!--=small te, Cyrillic -->
-<!ENTITY Tcy              "&#x00422;" ><!--=capital TE, Cyrillic -->
-<!ENTITY tscy             "&#x00446;" ><!--=small tse, Cyrillic -->
-<!ENTITY TScy             "&#x00426;" ><!--=capital TSE, Cyrillic -->
-<!ENTITY ucy              "&#x00443;" ><!--=small u, Cyrillic -->
-<!ENTITY Ucy              "&#x00423;" ><!--=capital U, Cyrillic -->
-<!ENTITY vcy              "&#x00432;" ><!--=small ve, Cyrillic -->
-<!ENTITY Vcy              "&#x00412;" ><!--=capital VE, Cyrillic -->
-<!ENTITY yacy             "&#x0044F;" ><!--=small ya, Cyrillic -->
-<!ENTITY YAcy             "&#x0042F;" ><!--=capital YA, Cyrillic -->
-<!ENTITY ycy              "&#x0044B;" ><!--=small yeru, Cyrillic -->
-<!ENTITY Ycy              "&#x0042B;" ><!--=capital YERU, Cyrillic -->
-<!ENTITY yucy             "&#x0044E;" ><!--=small yu, Cyrillic -->
-<!ENTITY YUcy             "&#x0042E;" ><!--=capital YU, Cyrillic -->
-<!ENTITY zcy              "&#x00437;" ><!--=small ze, Cyrillic -->
-<!ENTITY Zcy              "&#x00417;" ><!--=capital ZE, Cyrillic -->
-<!ENTITY zhcy             "&#x00436;" ><!--=small zhe, Cyrillic -->
-<!ENTITY ZHcy             "&#x00416;" ><!--=capital ZHE, Cyrillic -->
diff --git a/helm/dtd/isocyr2.ent b/helm/dtd/isocyr2.ent
deleted file mode 100644 (file)
index 67c477b..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-
-<!--
-     File isocyr2.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1986
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY djcy             "&#x00452;" ><!--=small dje, Serbian -->
-<!ENTITY DJcy             "&#x00402;" ><!--=capital DJE, Serbian -->
-<!ENTITY dscy             "&#x00455;" ><!--=small dse, Macedonian -->
-<!ENTITY DScy             "&#x00405;" ><!--=capital DSE, Macedonian -->
-<!ENTITY dzcy             "&#x0045F;" ><!--=small dze, Serbian -->
-<!ENTITY DZcy             "&#x0040F;" ><!--=capital dze, Serbian -->
-<!ENTITY gjcy             "&#x00453;" ><!--=small gje, Macedonian -->
-<!ENTITY GJcy             "&#x00403;" ><!--=capital GJE Macedonian -->
-<!ENTITY iukcy            "&#x00456;" ><!--=small i, Ukrainian -->
-<!ENTITY Iukcy            "&#x00406;" ><!--=capital I, Ukrainian -->
-<!ENTITY jsercy           "&#x00458;" ><!--=small je, Serbian -->
-<!ENTITY Jsercy           "&#x00408;" ><!--=capital JE, Serbian -->
-<!ENTITY jukcy            "&#x00454;" ><!--=small je, Ukrainian -->
-<!ENTITY Jukcy            "&#x00404;" ><!--=capital JE, Ukrainian -->
-<!ENTITY kjcy             "&#x0045C;" ><!--=small kje Macedonian -->
-<!ENTITY KJcy             "&#x0040C;" ><!--=capital KJE, Macedonian -->
-<!ENTITY ljcy             "&#x00459;" ><!--=small lje, Serbian -->
-<!ENTITY LJcy             "&#x00409;" ><!--=capital LJE, Serbian -->
-<!ENTITY njcy             "&#x0045A;" ><!--=small nje, Serbian -->
-<!ENTITY NJcy             "&#x0040A;" ><!--=capital NJE, Serbian -->
-<!ENTITY tshcy            "&#x0045B;" ><!--=small tshe, Serbian -->
-<!ENTITY TSHcy            "&#x0040B;" ><!--=capital TSHE, Serbian -->
-<!ENTITY ubrcy            "&#x0045E;" ><!--=small u, Byelorussian -->
-<!ENTITY Ubrcy            "&#x0040E;" ><!--=capital U, Byelorussian -->
-<!ENTITY yicy             "&#x00457;" ><!--=small yi, Ukrainian -->
-<!ENTITY YIcy             "&#x00407;" ><!--=capital YI, Ukrainian -->
diff --git a/helm/dtd/isodia.ent b/helm/dtd/isodia.ent
deleted file mode 100644 (file)
index ba64963..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-
-<!--
-     File isodia.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1986
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY acute            "&#x000B4;" ><!--=acute accent -->
-<!ENTITY breve            "&#x002D8;" ><!--=breve -->
-<!ENTITY caron            "&#x002C7;" ><!--=caron -->
-<!ENTITY cedil            "&#x000B8;" ><!--=cedilla -->
-<!ENTITY circ             "&#x0005E;" ><!--circumflex accent -->
-<!ENTITY dblac            "&#x002DD;" ><!--=double acute accent -->
-<!ENTITY die              "&#x000A8;" ><!--=dieresis -->
-<!ENTITY dot              "&#x002D9;" ><!--=dot above -->
-<!ENTITY grave            "&#x00060;" ><!--=grave accent -->
-<!ENTITY macr             "&#x000AF;" ><!--=macron -->
-<!ENTITY ogon             "&#x002DB;" ><!--=ogonek -->
-<!ENTITY ring             "&#x002DA;" ><!--=ring -->
-<!ENTITY tilde            "&#x002DC;" ><!--=tilde -->
-<!ENTITY uml              "&#x000A8;" ><!--=umlaut mark -->
diff --git a/helm/dtd/isogrk3.ent b/helm/dtd/isogrk3.ent
deleted file mode 100644 (file)
index fa03355..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-
-<!--
-     File isogrk3.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1991
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY alpha            "&#x003B1;" ><!--/alpha small alpha, Greek -->
-<!ENTITY beta             "&#x003B2;" ><!--/beta small beta, Greek -->
-<!ENTITY chi              "&#x003C7;" ><!--/chi small chi, Greek -->
-<!ENTITY delta            "&#x003B4;" ><!--/delta small delta, Greek -->
-<!ENTITY Delta            "&#x00394;" ><!--/Delta capital Delta, Greek -->
-<!ENTITY epsi             "&#x003B5;" ><!--/straightepsilon, small epsilon, Greek -->
-<!ENTITY epsiv            "&#x0025B;" ><!--/varepsilon -->
-<!ENTITY eta              "&#x003B7;" ><!--/eta small eta, Greek -->
-<!ENTITY gamma            "&#x003B3;" ><!--/gamma small gamma, Greek -->
-<!ENTITY Gamma            "&#x00393;" ><!--/Gamma capital Gamma, Greek -->
-<!ENTITY gammad           "&#x003DC;" ><!--/digamma -->
-<!ENTITY Gammad           "&#x003DC;" ><!--capital digamma -->
-<!ENTITY iota             "&#x003B9;" ><!--/iota small iota, Greek -->
-<!ENTITY kappa            "&#x003BA;" ><!--/kappa small kappa, Greek -->
-<!ENTITY kappav           "&#x003F0;" ><!--/varkappa -->
-<!ENTITY lambda           "&#x003BB;" ><!--/lambda small lambda, Greek -->
-<!ENTITY Lambda           "&#x0039B;" ><!--/Lambda capital Lambda, Greek -->
-<!ENTITY mu               "&#x003BC;" ><!--/mu small mu, Greek -->
-<!ENTITY nu               "&#x003BD;" ><!--/nu small nu, Greek -->
-<!ENTITY omega            "&#x003C9;" ><!--/omega small omega, Greek -->
-<!ENTITY Omega            "&#x003A9;" ><!--/Omega capital Omega, Greek -->
-<!ENTITY phi              "&#x003C6;" ><!--/straightphi - small phi, Greek -->
-<!ENTITY Phi              "&#x003A6;" ><!--/Phi capital Phi, Greek -->
-<!ENTITY phiv             "&#x003D5;" ><!--/varphi - curly or open phi -->
-<!ENTITY pi               "&#x003C0;" ><!--/pi small pi, Greek -->
-<!ENTITY Pi               "&#x003A0;" ><!--/Pi capital Pi, Greek -->
-<!ENTITY piv              "&#x003D6;" ><!--/varpi -->
-<!ENTITY psi              "&#x003C8;" ><!--/psi small psi, Greek -->
-<!ENTITY Psi              "&#x003A8;" ><!--/Psi capital Psi, Greek -->
-<!ENTITY rho              "&#x003C1;" ><!--/rho small rho, Greek -->
-<!ENTITY rhov             "&#x003F1;" ><!--/varrho -->
-<!ENTITY sigma            "&#x003C3;" ><!--/sigma small sigma, Greek -->
-<!ENTITY Sigma            "&#x003A3;" ><!--/Sigma capital Sigma, Greek -->
-<!ENTITY sigmav           "&#x003C2;" ><!--/varsigma -->
-<!ENTITY tau              "&#x003C4;" ><!--/tau small tau, Greek -->
-<!ENTITY theta            "&#x003B8;" ><!--/theta straight theta, small theta, Greek -->
-<!ENTITY Theta            "&#x00398;" ><!--/Theta capital Theta, Greek -->
-<!ENTITY thetav           "&#x003D1;" ><!--/vartheta - curly or open theta -->
-<!ENTITY upsi             "&#x003C5;" ><!--/upsilon small upsilon, Greek -->
-<!ENTITY Upsi             "&#x003D2;" ><!--/Upsilon capital Upsilon, Greek -->
-<!ENTITY xi               "&#x003BE;" ><!--/xi small xi, Greek -->
-<!ENTITY Xi               "&#x0039E;" ><!--/Xi capital Xi, Greek -->
-<!ENTITY zeta             "&#x003B6;" ><!--/zeta small zeta, Greek -->
diff --git a/helm/dtd/isolat1.ent b/helm/dtd/isolat1.ent
deleted file mode 100644 (file)
index 849d360..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-
-<!--
-     File isolat1.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1986
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY aacute           "&#x000E1;" ><!--=small a, acute accent -->
-<!ENTITY Aacute           "&#x000C1;" ><!--=capital A, acute accent -->
-<!ENTITY acirc            "&#x000E2;" ><!--=small a, circumflex accent -->
-<!ENTITY Acirc            "&#x000C2;" ><!--=capital A, circumflex accent -->
-<!ENTITY aelig            "&#x000E6;" ><!--=small ae diphthong (ligature) -->
-<!ENTITY AElig            "&#x000C6;" ><!--=capital AE diphthong (ligature) -->
-<!ENTITY agrave           "&#x000E0;" ><!--=small a, grave accent -->
-<!ENTITY Agrave           "&#x000C0;" ><!--=capital A, grave accent -->
-<!ENTITY aring            "&#x000E5;" ><!--=small a, ring -->
-<!ENTITY Aring            "&#x000C5;" ><!--=capital A, ring -->
-<!ENTITY atilde           "&#x000E3;" ><!--=small a, tilde -->
-<!ENTITY Atilde           "&#x000C3;" ><!--=capital A, tilde -->
-<!ENTITY auml             "&#x000E4;" ><!--=small a, dieresis or umlaut mark -->
-<!ENTITY Auml             "&#x000C4;" ><!--=capital A, dieresis or umlaut mark -->
-<!ENTITY ccedil           "&#x000E7;" ><!--=small c, cedilla -->
-<!ENTITY Ccedil           "&#x000C7;" ><!--=capital C, cedilla -->
-<!ENTITY eacute           "&#x000E9;" ><!--=small e, acute accent -->
-<!ENTITY Eacute           "&#x000C9;" ><!--=capital E, acute accent -->
-<!ENTITY ecirc            "&#x000EA;" ><!--=small e, circumflex accent -->
-<!ENTITY Ecirc            "&#x000CA;" ><!--=capital E, circumflex accent -->
-<!ENTITY egrave           "&#x000E8;" ><!--=small e, grave accent -->
-<!ENTITY Egrave           "&#x000C8;" ><!--=capital E, grave accent -->
-<!ENTITY eth              "&#x000F0;" ><!--=small eth, Icelandic -->
-<!ENTITY ETH              "&#x000D0;" ><!--=capital Eth, Icelandic -->
-<!ENTITY euml             "&#x000EB;" ><!--=small e, dieresis or umlaut mark -->
-<!ENTITY Euml             "&#x000CB;" ><!--=capital E, dieresis or umlaut mark -->
-<!ENTITY iacute           "&#x000ED;" ><!--=small i, acute accent -->
-<!ENTITY Iacute           "&#x000CD;" ><!--=capital I, acute accent -->
-<!ENTITY icirc            "&#x000EE;" ><!--=small i, circumflex accent -->
-<!ENTITY Icirc            "&#x000CE;" ><!--=capital I, circumflex accent -->
-<!ENTITY igrave           "&#x000EC;" ><!--=small i, grave accent -->
-<!ENTITY Igrave           "&#x000CC;" ><!--=capital I, grave accent -->
-<!ENTITY iuml             "&#x000EF;" ><!--=small i, dieresis or umlaut mark -->
-<!ENTITY Iuml             "&#x000CF;" ><!--=capital I, dieresis or umlaut mark -->
-<!ENTITY ntilde           "&#x000F1;" ><!--=small n, tilde -->
-<!ENTITY Ntilde           "&#x000D1;" ><!--=capital N, tilde -->
-<!ENTITY oacute           "&#x000F3;" ><!--=small o, acute accent -->
-<!ENTITY Oacute           "&#x000D3;" ><!--=capital O, acute accent -->
-<!ENTITY ocirc            "&#x000F4;" ><!--=small o, circumflex accent -->
-<!ENTITY Ocirc            "&#x000D4;" ><!--=capital O, circumflex accent -->
-<!ENTITY ograve           "&#x000F2;" ><!--=small o, grave accent -->
-<!ENTITY Ograve           "&#x000D2;" ><!--=capital O, grave accent -->
-<!ENTITY oslash           "&#x000F8;" ><!--latin small letter o with stroke -->
-<!ENTITY Oslash           "&#x000D8;" ><!--=capital O, slash -->
-<!ENTITY otilde           "&#x000F5;" ><!--=small o, tilde -->
-<!ENTITY Otilde           "&#x000D5;" ><!--=capital O, tilde -->
-<!ENTITY ouml             "&#x000F6;" ><!--=small o, dieresis or umlaut mark -->
-<!ENTITY Ouml             "&#x000D6;" ><!--=capital O, dieresis or umlaut mark -->
-<!ENTITY szlig            "&#x000DF;" ><!--=small sharp s, German (sz ligature) -->
-<!ENTITY thorn            "&#x000FE;" ><!--=small thorn, Icelandic -->
-<!ENTITY THORN            "&#x000DE;" ><!--=capital THORN, Icelandic -->
-<!ENTITY uacute           "&#x000FA;" ><!--=small u, acute accent -->
-<!ENTITY Uacute           "&#x000DA;" ><!--=capital U, acute accent -->
-<!ENTITY ucirc            "&#x000FB;" ><!--=small u, circumflex accent -->
-<!ENTITY Ucirc            "&#x000DB;" ><!--=capital U, circumflex accent -->
-<!ENTITY ugrave           "&#x000F9;" ><!--=small u, grave accent -->
-<!ENTITY Ugrave           "&#x000D9;" ><!--=capital U, grave accent -->
-<!ENTITY uuml             "&#x000FC;" ><!--=small u, dieresis or umlaut mark -->
-<!ENTITY Uuml             "&#x000DC;" ><!--=capital U, dieresis or umlaut mark -->
-<!ENTITY yacute           "&#x000FD;" ><!--=small y, acute accent -->
-<!ENTITY Yacute           "&#x000DD;" ><!--=capital Y, acute accent -->
-<!ENTITY yuml             "&#x000FF;" ><!--=small y, dieresis or umlaut mark -->
diff --git a/helm/dtd/isolat2.ent b/helm/dtd/isolat2.ent
deleted file mode 100644 (file)
index 3049be7..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-
-<!--
-     File isolat2.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1986
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY abreve           "&#x00103;" ><!--=small a, breve -->
-<!ENTITY Abreve           "&#x00102;" ><!--=capital A, breve -->
-<!ENTITY amacr            "&#x00101;" ><!--=small a, macron -->
-<!ENTITY Amacr            "&#x00100;" ><!--=capital A, macron -->
-<!ENTITY aogon            "&#x00105;" ><!--=small a, ogonek -->
-<!ENTITY Aogon            "&#x00104;" ><!--=capital A, ogonek -->
-<!ENTITY cacute           "&#x00107;" ><!--=small c, acute accent -->
-<!ENTITY Cacute           "&#x00106;" ><!--=capital C, acute accent -->
-<!ENTITY ccaron           "&#x0010D;" ><!--=small c, caron -->
-<!ENTITY Ccaron           "&#x0010C;" ><!--=capital C, caron -->
-<!ENTITY ccirc            "&#x00109;" ><!--=small c, circumflex accent -->
-<!ENTITY Ccirc            "&#x00108;" ><!--=capital C, circumflex accent -->
-<!ENTITY cdot             "&#x0010B;" ><!--=small c, dot above -->
-<!ENTITY Cdot             "&#x0010A;" ><!--=capital C, dot above -->
-<!ENTITY dcaron           "&#x0010F;" ><!--=small d, caron -->
-<!ENTITY Dcaron           "&#x0010E;" ><!--=capital D, caron -->
-<!ENTITY dstrok           "&#x00111;" ><!--=small d, stroke -->
-<!ENTITY Dstrok           "&#x00110;" ><!--=capital D, stroke -->
-<!ENTITY ecaron           "&#x0011B;" ><!--=small e, caron -->
-<!ENTITY Ecaron           "&#x0011A;" ><!--=capital E, caron -->
-<!ENTITY edot             "&#x00117;" ><!--=small e, dot above -->
-<!ENTITY Edot             "&#x00116;" ><!--=capital E, dot above -->
-<!ENTITY emacr            "&#x00113;" ><!--=small e, macron -->
-<!ENTITY Emacr            "&#x00112;" ><!--=capital E, macron -->
-<!ENTITY eng              "&#x0014B;" ><!--=small eng, Lapp -->
-<!ENTITY ENG              "&#x0014A;" ><!--=capital ENG, Lapp -->
-<!ENTITY eogon            "&#x00119;" ><!--=small e, ogonek -->
-<!ENTITY Eogon            "&#x00118;" ><!--=capital E, ogonek -->
-<!ENTITY gacute           "&#x001F5;" ><!--=small g, acute accent -->
-<!ENTITY gbreve           "&#x0011F;" ><!--=small g, breve -->
-<!ENTITY Gbreve           "&#x0011E;" ><!--=capital G, breve -->
-<!ENTITY Gcedil           "&#x00122;" ><!--=capital G, cedilla -->
-<!ENTITY gcirc            "&#x0011D;" ><!--=small g, circumflex accent -->
-<!ENTITY Gcirc            "&#x0011C;" ><!--=capital G, circumflex accent -->
-<!ENTITY gdot             "&#x00121;" ><!--=small g, dot above -->
-<!ENTITY Gdot             "&#x00120;" ><!--=capital G, dot above -->
-<!ENTITY hcirc            "&#x00125;" ><!--=small h, circumflex accent -->
-<!ENTITY Hcirc            "&#x00124;" ><!--=capital H, circumflex accent -->
-<!ENTITY hstrok           "&#x00127;" ><!--=small h, stroke -->
-<!ENTITY Hstrok           "&#x00126;" ><!--=capital H, stroke -->
-<!ENTITY Idot             "&#x00130;" ><!--=capital I, dot above -->
-<!ENTITY ijlig            "&#x00133;" ><!--=small ij ligature -->
-<!ENTITY IJlig            "&#x00132;" ><!--=capital IJ ligature -->
-<!ENTITY imacr            "&#x0012B;" ><!--=small i, macron -->
-<!ENTITY Imacr            "&#x0012A;" ><!--=capital I, macron -->
-<!ENTITY inodot           "&#x00131;" ><!--=small i without dot -->
-<!ENTITY iogon            "&#x0012F;" ><!--=small i, ogonek -->
-<!ENTITY Iogon            "&#x0012E;" ><!--=capital I, ogonek -->
-<!ENTITY itilde           "&#x00129;" ><!--=small i, tilde -->
-<!ENTITY Itilde           "&#x00128;" ><!--=capital I, tilde -->
-<!ENTITY jcirc            "&#x00135;" ><!--=small j, circumflex accent -->
-<!ENTITY Jcirc            "&#x00134;" ><!--=capital J, circumflex accent -->
-<!ENTITY kcedil           "&#x00137;" ><!--=small k, cedilla -->
-<!ENTITY Kcedil           "&#x00136;" ><!--=capital K, cedilla -->
-<!ENTITY kgreen           "&#x00138;" ><!--=small k, Greenlandic -->
-<!ENTITY lacute           "&#x0013A;" ><!--=small l, acute accent -->
-<!ENTITY Lacute           "&#x00139;" ><!--=capital L, acute accent -->
-<!ENTITY lcaron           "&#x0013E;" ><!--=small l, caron -->
-<!ENTITY Lcaron           "&#x0013D;" ><!--=capital L, caron -->
-<!ENTITY lcedil           "&#x0013C;" ><!--=small l, cedilla -->
-<!ENTITY Lcedil           "&#x0013B;" ><!--=capital L, cedilla -->
-<!ENTITY lmidot           "&#x00140;" ><!--=small l, middle dot -->
-<!ENTITY Lmidot           "&#x0013F;" ><!--=capital L, middle dot -->
-<!ENTITY lstrok           "&#x00142;" ><!--=small l, stroke -->
-<!ENTITY Lstrok           "&#x00141;" ><!--=capital L, stroke -->
-<!ENTITY nacute           "&#x00144;" ><!--=small n, acute accent -->
-<!ENTITY Nacute           "&#x00143;" ><!--=capital N, acute accent -->
-<!ENTITY napos            "&#x00149;" ><!--=small n, apostrophe -->
-<!ENTITY ncaron           "&#x00148;" ><!--=small n, caron -->
-<!ENTITY Ncaron           "&#x00147;" ><!--=capital N, caron -->
-<!ENTITY ncedil           "&#x00146;" ><!--=small n, cedilla -->
-<!ENTITY Ncedil           "&#x00145;" ><!--=capital N, cedilla -->
-<!ENTITY odblac           "&#x00151;" ><!--=small o, double acute accent -->
-<!ENTITY Odblac           "&#x00150;" ><!--=capital O, double acute accent -->
-<!ENTITY oelig            "&#x00153;" ><!--=small oe ligature -->
-<!ENTITY OElig            "&#x00152;" ><!--=capital OE ligature -->
-<!ENTITY omacr            "&#x0014D;" ><!--=small o, macron -->
-<!ENTITY Omacr            "&#x0014C;" ><!--=capital O, macron -->
-<!ENTITY racute           "&#x00155;" ><!--=small r, acute accent -->
-<!ENTITY Racute           "&#x00154;" ><!--=capital R, acute accent -->
-<!ENTITY rcaron           "&#x00159;" ><!--=small r, caron -->
-<!ENTITY Rcaron           "&#x00158;" ><!--=capital R, caron -->
-<!ENTITY rcedil           "&#x00157;" ><!--=small r, cedilla -->
-<!ENTITY Rcedil           "&#x00156;" ><!--=capital R, cedilla -->
-<!ENTITY sacute           "&#x0015B;" ><!--=small s, acute accent -->
-<!ENTITY Sacute           "&#x0015A;" ><!--=capital S, acute accent -->
-<!ENTITY scaron           "&#x00161;" ><!--=small s, caron -->
-<!ENTITY Scaron           "&#x00160;" ><!--=capital S, caron -->
-<!ENTITY scedil           "&#x0015F;" ><!--=small s, cedilla -->
-<!ENTITY Scedil           "&#x0015E;" ><!--=capital S, cedilla -->
-<!ENTITY scirc            "&#x0015D;" ><!--=small s, circumflex accent -->
-<!ENTITY Scirc            "&#x0015C;" ><!--=capital S, circumflex accent -->
-<!ENTITY tcaron           "&#x00165;" ><!--=small t, caron -->
-<!ENTITY Tcaron           "&#x00164;" ><!--=capital T, caron -->
-<!ENTITY tcedil           "&#x00163;" ><!--=small t, cedilla -->
-<!ENTITY Tcedil           "&#x00162;" ><!--=capital T, cedilla -->
-<!ENTITY tstrok           "&#x00167;" ><!--=small t, stroke -->
-<!ENTITY Tstrok           "&#x00166;" ><!--=capital T, stroke -->
-<!ENTITY ubreve           "&#x0016D;" ><!--=small u, breve -->
-<!ENTITY Ubreve           "&#x0016C;" ><!--=capital U, breve -->
-<!ENTITY udblac           "&#x00171;" ><!--=small u, double acute accent -->
-<!ENTITY Udblac           "&#x00170;" ><!--=capital U, double acute accent -->
-<!ENTITY umacr            "&#x0016B;" ><!--=small u, macron -->
-<!ENTITY Umacr            "&#x0016A;" ><!--=capital U, macron -->
-<!ENTITY uogon            "&#x00173;" ><!--=small u, ogonek -->
-<!ENTITY Uogon            "&#x00172;" ><!--=capital U, ogonek -->
-<!ENTITY uring            "&#x0016F;" ><!--=small u, ring -->
-<!ENTITY Uring            "&#x0016E;" ><!--=capital U, ring -->
-<!ENTITY utilde           "&#x00169;" ><!--=small u, tilde -->
-<!ENTITY Utilde           "&#x00168;" ><!--=capital U, tilde -->
-<!ENTITY wcirc            "&#x00175;" ><!--=small w, circumflex accent -->
-<!ENTITY Wcirc            "&#x00174;" ><!--=capital W, circumflex accent -->
-<!ENTITY ycirc            "&#x00177;" ><!--=small y, circumflex accent -->
-<!ENTITY Ycirc            "&#x00176;" ><!--=capital Y, circumflex accent -->
-<!ENTITY Yuml             "&#x00178;" ><!--=capital Y, dieresis or umlaut mark -->
-<!ENTITY zacute           "&#x0017A;" ><!--=small z, acute accent -->
-<!ENTITY Zacute           "&#x00179;" ><!--=capital Z, acute accent -->
-<!ENTITY zcaron           "&#x0017E;" ><!--=small z, caron -->
-<!ENTITY Zcaron           "&#x0017D;" ><!--=capital Z, caron -->
-<!ENTITY zdot             "&#x0017C;" ><!--=small z, dot above -->
-<!ENTITY Zdot             "&#x0017B;" ><!--=capital Z, dot above -->
diff --git a/helm/dtd/isomfrk.ent b/helm/dtd/isomfrk.ent
deleted file mode 100644 (file)
index d3d92aa..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-
-<!--
-     File isomfrk.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1991
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY afr "<%mchar.qname; name='afr'/>" ><!--(1D51E)/frak a, lower case a -->
-<!ENTITY Afr "<%mchar.qname; name='Afr'/>" ><!--(1D504)/frak A, upper case a -->
-<!ENTITY bfr "<%mchar.qname; name='bfr'/>" ><!--(1D51F)/frak b, lower case b -->
-<!ENTITY Bfr "<%mchar.qname; name='Bfr'/>" ><!--(1D505)/frak B, upper case b -->
-<!ENTITY cfr "<%mchar.qname; name='cfr'/>" ><!--(1D520)/frak c, lower case c -->
-<!ENTITY Cfr "<%mchar.qname; name='Cfr'/>" ><!--(1D506)/frak C, upper case c -->
-<!ENTITY dfr "<%mchar.qname; name='dfr'/>" ><!--(1D521)/frak d, lower case d -->
-<!ENTITY Dfr "<%mchar.qname; name='Dfr'/>" ><!--(1D507)/frak D, upper case d -->
-<!ENTITY efr "<%mchar.qname; name='efr'/>" ><!--(1D522)/frak e, lower case e -->
-<!ENTITY Efr "<%mchar.qname; name='Efr'/>" ><!--(1D508)/frak E, upper case e -->
-<!ENTITY ffr "<%mchar.qname; name='ffr'/>" ><!--(1D523)/frak f, lower case f -->
-<!ENTITY Ffr "<%mchar.qname; name='Ffr'/>" ><!--(1D509)/frak F, upper case f -->
-<!ENTITY gfr "<%mchar.qname; name='gfr'/>" ><!--(1D524)/frak g, lower case g -->
-<!ENTITY Gfr "<%mchar.qname; name='Gfr'/>" ><!--(1D50A)/frak G, upper case g -->
-<!ENTITY hfr "<%mchar.qname; name='hfr'/>" ><!--(1D525)/frak h, lower case h -->
-<!ENTITY Hfr "<%mchar.qname; name='Hfr'/>" ><!--(1D50B)/frak H, upper case h -->
-<!ENTITY ifr "<%mchar.qname; name='ifr'/>" ><!--(1D526)/frak i, lower case i -->
-<!ENTITY Ifr "<%mchar.qname; name='Ifr'/>" ><!--(1D50C)/frak I, upper case i -->
-<!ENTITY jfr "<%mchar.qname; name='jfr'/>" ><!--(1D527)/frak j, lower case j -->
-<!ENTITY Jfr "<%mchar.qname; name='Jfr'/>" ><!--(1D50D)/frak J, upper case j -->
-<!ENTITY kfr "<%mchar.qname; name='kfr'/>" ><!--(1D528)/frak k, lower case k -->
-<!ENTITY Kfr "<%mchar.qname; name='Kfr'/>" ><!--(1D50E)/frak K, upper case k -->
-<!ENTITY lfr "<%mchar.qname; name='lfr'/>" ><!--(1D529)/frak l, lower case l -->
-<!ENTITY Lfr "<%mchar.qname; name='Lfr'/>" ><!--(1D50F)/frak L, upper case l -->
-<!ENTITY mfr "<%mchar.qname; name='mfr'/>" ><!--(1D52A)/frak m, lower case m -->
-<!ENTITY Mfr "<%mchar.qname; name='Mfr'/>" ><!--(1D510)/frak M, upper case m -->
-<!ENTITY nfr "<%mchar.qname; name='nfr'/>" ><!--(1D52B)/frak n, lower case n -->
-<!ENTITY Nfr "<%mchar.qname; name='Nfr'/>" ><!--(1D511)/frak N, upper case n -->
-<!ENTITY ofr "<%mchar.qname; name='ofr'/>" ><!--(1D52C)/frak o, lower case o -->
-<!ENTITY Ofr "<%mchar.qname; name='Ofr'/>" ><!--(1D512)/frak O, upper case o -->
-<!ENTITY pfr "<%mchar.qname; name='pfr'/>" ><!--(1D52D)/frak p, lower case p -->
-<!ENTITY Pfr "<%mchar.qname; name='Pfr'/>" ><!--(1D513)/frak P, upper case p -->
-<!ENTITY qfr "<%mchar.qname; name='qfr'/>" ><!--(1D52E)/frak q, lower case q -->
-<!ENTITY Qfr "<%mchar.qname; name='Qfr'/>" ><!--(1D514)/frak Q, upper case q -->
-<!ENTITY rfr "<%mchar.qname; name='rfr'/>" ><!--(1D52F)/frak r, lower case r -->
-<!ENTITY Rfr "<%mchar.qname; name='Rfr'/>" ><!--(1D515)/frak R, upper case r -->
-<!ENTITY sfr "<%mchar.qname; name='sfr'/>" ><!--(1D530)/frak s, lower case s -->
-<!ENTITY Sfr "<%mchar.qname; name='Sfr'/>" ><!--(1D516)/frak S, upper case s -->
-<!ENTITY tfr "<%mchar.qname; name='tfr'/>" ><!--(1D531)/frak t, lower case t -->
-<!ENTITY Tfr "<%mchar.qname; name='Tfr'/>" ><!--(1D517)/frak T, upper case t -->
-<!ENTITY ufr "<%mchar.qname; name='ufr'/>" ><!--(1D532)/frak u, lower case u -->
-<!ENTITY Ufr "<%mchar.qname; name='Ufr'/>" ><!--(1D518)/frak U, upper case u -->
-<!ENTITY vfr "<%mchar.qname; name='vfr'/>" ><!--(1D533)/frak v, lower case v -->
-<!ENTITY Vfr "<%mchar.qname; name='Vfr'/>" ><!--(1D519)/frak V, upper case v -->
-<!ENTITY wfr "<%mchar.qname; name='wfr'/>" ><!--(1D534)/frak w, lower case w -->
-<!ENTITY Wfr "<%mchar.qname; name='Wfr'/>" ><!--(1D51A)/frak W, upper case w -->
-<!ENTITY xfr "<%mchar.qname; name='xfr'/>" ><!--(1D535)/frak x, lower case x -->
-<!ENTITY Xfr "<%mchar.qname; name='Xfr'/>" ><!--(1D51B)/frak X, upper case x -->
-<!ENTITY yfr "<%mchar.qname; name='yfr'/>" ><!--(1D536)/frak y, lower case y -->
-<!ENTITY Yfr "<%mchar.qname; name='Yfr'/>" ><!--(1D51C)/frak Y, upper case y -->
-<!ENTITY zfr "<%mchar.qname; name='zfr'/>" ><!--(1D537)/frak z, lower case z -->
-<!ENTITY Zfr "<%mchar.qname; name='Zfr'/>" ><!--(1D51D)/frak Z, upper case z  -->
diff --git a/helm/dtd/isomopf.ent b/helm/dtd/isomopf.ent
deleted file mode 100644 (file)
index 6b5e01f..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-
-<!--
-     File isomopf.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1991
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY Aopf "<%mchar.qname; name='Aopf'/>" ><!--(1D538)/Bbb A, open face A -->
-<!ENTITY Bopf "<%mchar.qname; name='Bopf'/>" ><!--(1D539)/Bbb B, open face B -->
-<!ENTITY Copf "<%mchar.qname; name='Copf'/>" ><!--(1D53A)/Bbb C, open face C -->
-<!ENTITY Dopf "<%mchar.qname; name='Dopf'/>" ><!--(1D53B)/Bbb D, open face D -->
-<!ENTITY Eopf "<%mchar.qname; name='Eopf'/>" ><!--(1D53C)/Bbb E, open face E -->
-<!ENTITY Fopf "<%mchar.qname; name='Fopf'/>" ><!--(1D53D)/Bbb F, open face F -->
-<!ENTITY Gopf "<%mchar.qname; name='Gopf'/>" ><!--(1D53E)/Bbb G, open face G -->
-<!ENTITY Hopf "<%mchar.qname; name='Hopf'/>" ><!--(1D53F)/Bbb H, open face H -->
-<!ENTITY Iopf "<%mchar.qname; name='Iopf'/>" ><!--(1D540)/Bbb I, open face I -->
-<!ENTITY Jopf "<%mchar.qname; name='Jopf'/>" ><!--(1D541)/Bbb J, open face J -->
-<!ENTITY Kopf "<%mchar.qname; name='Kopf'/>" ><!--(1D542)/Bbb K, open face K  -->
-<!ENTITY Lopf "<%mchar.qname; name='Lopf'/>" ><!--(1D543)/Bbb L, open face L  -->
-<!ENTITY Mopf "<%mchar.qname; name='Mopf'/>" ><!--(1D544)/Bbb M, open face M  -->
-<!ENTITY Nopf "<%mchar.qname; name='Nopf'/>" ><!--(1D545)/Bbb N, open face N -->
-<!ENTITY Oopf "<%mchar.qname; name='Oopf'/>" ><!--(1D546)/Bbb O, open face O -->
-<!ENTITY Popf "<%mchar.qname; name='Popf'/>" ><!--(1D547)/Bbb P, open face P -->
-<!ENTITY Qopf "<%mchar.qname; name='Qopf'/>" ><!--(1D548)/Bbb Q, open face Q -->
-<!ENTITY Ropf "<%mchar.qname; name='Ropf'/>" ><!--(1D549)/Bbb R, open face R -->
-<!ENTITY Sopf "<%mchar.qname; name='Sopf'/>" ><!--(1D54A)/Bbb S, open face S -->
-<!ENTITY Topf "<%mchar.qname; name='Topf'/>" ><!--(1D54B)/Bbb T, open face T -->
-<!ENTITY Uopf "<%mchar.qname; name='Uopf'/>" ><!--(1D54C)/Bbb U, open face U -->
-<!ENTITY Vopf "<%mchar.qname; name='Vopf'/>" ><!--(1D54D)/Bbb V, open face V -->
-<!ENTITY Wopf "<%mchar.qname; name='Wopf'/>" ><!--(1D54E)/Bbb W, open face W -->
-<!ENTITY Xopf "<%mchar.qname; name='Xopf'/>" ><!--(1D54F)/Bbb X, open face X -->
-<!ENTITY Yopf "<%mchar.qname; name='Yopf'/>" ><!--(1D550)/Bbb Y, open face Y -->
-<!ENTITY Zopf "<%mchar.qname; name='Zopf'/>" ><!--(1D551)/Bbb Z, open face Z -->
diff --git a/helm/dtd/isomscr.ent b/helm/dtd/isomscr.ent
deleted file mode 100644 (file)
index 75d3bc5..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-
-<!--
-     File isomscr.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1991
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY ascr "<%mchar.qname; name='ascr'/>" ><!--(1D4B6)/scr a, script letter a -->
-<!ENTITY Ascr "<%mchar.qname; name='Ascr'/>" ><!--(1D49C)/scr A, script letter A -->
-<!ENTITY bscr "<%mchar.qname; name='bscr'/>" ><!--(1D4B7)/scr b, script letter b -->
-<!ENTITY Bscr "<%mchar.qname; name='Bscr'/>" ><!--(1D49D)/scr B, script letter B -->
-<!ENTITY cscr "<%mchar.qname; name='cscr'/>" ><!--(1D4B8)/scr c, script letter c -->
-<!ENTITY Cscr "<%mchar.qname; name='Cscr'/>" ><!--(1D49E)/scr C, script letter C -->
-<!ENTITY dscr "<%mchar.qname; name='dscr'/>" ><!--(1D4B9)/scr d, script letter d -->
-<!ENTITY Dscr "<%mchar.qname; name='Dscr'/>" ><!--(1D49F)/scr D, script letter D -->
-<!ENTITY escr "<%mchar.qname; name='escr'/>" ><!--(1D4BA)/scr e, script letter e -->
-<!ENTITY Escr "<%mchar.qname; name='Escr'/>" ><!--(1D4A0)/scr E, script letter E -->
-<!ENTITY fscr "<%mchar.qname; name='fscr'/>" ><!--(1D4BB)/scr f, script letter f -->
-<!ENTITY Fscr "<%mchar.qname; name='Fscr'/>" ><!--(1D4A1)/scr F, script letter F -->
-<!ENTITY gscr "<%mchar.qname; name='gscr'/>" ><!--(1D4BC)/scr g, script letter g -->
-<!ENTITY Gscr "<%mchar.qname; name='Gscr'/>" ><!--(1D4A2)/scr G, script letter G -->
-<!ENTITY hscr "<%mchar.qname; name='hscr'/>" ><!--(1D4BD)/scr h, script letter h -->
-<!ENTITY Hscr "<%mchar.qname; name='Hscr'/>" ><!--(1D4A3)/scr H, script letter H -->
-<!ENTITY iscr "<%mchar.qname; name='iscr'/>" ><!--(1D4BE)/scr i, script letter i -->
-<!ENTITY Iscr "<%mchar.qname; name='Iscr'/>" ><!--(1D4A4)/scr I, script letter I -->
-<!ENTITY jscr "<%mchar.qname; name='jscr'/>" ><!--(1D4BF)/scr j, script letter j -->
-<!ENTITY Jscr "<%mchar.qname; name='Jscr'/>" ><!--(1D4A5)/scr J, script letter J -->
-<!ENTITY kscr "<%mchar.qname; name='kscr'/>" ><!--(1D4C0)/scr k, script letter k -->
-<!ENTITY Kscr "<%mchar.qname; name='Kscr'/>" ><!--(1D4A6)/scr K, script letter K -->
-<!ENTITY lscr "<%mchar.qname; name='lscr'/>" ><!--(1D4C1)/scr l, script letter l -->
-<!ENTITY Lscr "<%mchar.qname; name='Lscr'/>" ><!--(1D4A7)/scr L, script letter L -->
-<!ENTITY mscr "<%mchar.qname; name='mscr'/>" ><!--(1D4C2)/scr m, script letter m -->
-<!ENTITY Mscr "<%mchar.qname; name='Mscr'/>" ><!--(1D4A8)/scr M, script letter M -->
-<!ENTITY nscr "<%mchar.qname; name='nscr'/>" ><!--(1D4C3)/scr n, script letter n -->
-<!ENTITY Nscr "<%mchar.qname; name='Nscr'/>" ><!--(1D4A9)/scr N, script letter N -->
-<!ENTITY oscr "<%mchar.qname; name='oscr'/>" ><!--(1D4C4)/scr o, script letter o -->
-<!ENTITY Oscr "<%mchar.qname; name='Oscr'/>" ><!--(1D4AA)/scr O, script letter O -->
-<!ENTITY pscr "<%mchar.qname; name='pscr'/>" ><!--(1D4C5)/scr p, script letter p -->
-<!ENTITY Pscr "<%mchar.qname; name='Pscr'/>" ><!--(1D4AB)/scr P, script letter P -->
-<!ENTITY qscr "<%mchar.qname; name='qscr'/>" ><!--(1D4C6)/scr q, script letter q -->
-<!ENTITY Qscr "<%mchar.qname; name='Qscr'/>" ><!--(1D4AC)/scr Q, script letter Q -->
-<!ENTITY rscr "<%mchar.qname; name='rscr'/>" ><!--(1D4C7)/scr r, script letter r -->
-<!ENTITY Rscr "<%mchar.qname; name='Rscr'/>" ><!--(1D4AD)/scr R, script letter R -->
-<!ENTITY sscr "<%mchar.qname; name='sscr'/>" ><!--(1D4C8)/scr s, script letter s -->
-<!ENTITY Sscr "<%mchar.qname; name='Sscr'/>" ><!--(1D4AE)/scr S, script letter S -->
-<!ENTITY tscr "<%mchar.qname; name='tscr'/>" ><!--(1D4C9)/scr t, script letter t -->
-<!ENTITY Tscr "<%mchar.qname; name='Tscr'/>" ><!--(1D4AF)/scr T, script letter T -->
-<!ENTITY uscr "<%mchar.qname; name='uscr'/>" ><!--(1D4CA)/scr u, script letter u -->
-<!ENTITY Uscr "<%mchar.qname; name='Uscr'/>" ><!--(1D4B0)/scr U, script letter U -->
-<!ENTITY vscr "<%mchar.qname; name='vscr'/>" ><!--(1D4CB)/scr v, script letter v -->
-<!ENTITY Vscr "<%mchar.qname; name='Vscr'/>" ><!--(1D4B1)/scr V, script letter V -->
-<!ENTITY wscr "<%mchar.qname; name='wscr'/>" ><!--(1D4CC)/scr w, script letter w -->
-<!ENTITY Wscr "<%mchar.qname; name='Wscr'/>" ><!--(1D4B2)/scr W, script letter W -->
-<!ENTITY xscr "<%mchar.qname; name='xscr'/>" ><!--(1D4CD)/scr x, script letter x -->
-<!ENTITY Xscr "<%mchar.qname; name='Xscr'/>" ><!--(1D4B3)/scr X, script letter X -->
-<!ENTITY yscr "<%mchar.qname; name='yscr'/>" ><!--(1D4CE)/scr y, script letter y -->
-<!ENTITY Yscr "<%mchar.qname; name='Yscr'/>" ><!--(1D4B4)/scr Y, script letter Y -->
-<!ENTITY zscr "<%mchar.qname; name='zscr'/>" ><!--(1D4CF)/scr z, script letter z -->
-<!ENTITY Zscr "<%mchar.qname; name='Zscr'/>" ><!--(1D4B5)/scr Z, script letter Z -->
diff --git a/helm/dtd/isonum.ent b/helm/dtd/isonum.ent
deleted file mode 100644 (file)
index d6d3461..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-
-<!--
-     File isonum.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1986
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-<!--HELM: deleted the central &: 
-<!ENTITY amp              "&#x26;&#x00026;" >-->
-<!ENTITY amp              "&#x26;#x00026;" ><!--=ampersand -->
-<!ENTITY apos             "&#x00027;" ><!--=apostrophe -->
-<!ENTITY ast              "&#x0002A;" ><!--/ast B: =asterisk -->
-<!ENTITY brvbar           "&#x000A6;" ><!--=broken (vertical) bar -->
-<!ENTITY bsol             "&#x0005C;" ><!--/backslash =reverse solidus -->
-<!ENTITY cent             "&#x000A2;" ><!--=cent sign -->
-<!ENTITY colon            "&#x0003A;" ><!--/colon P: -->
-<!ENTITY comma            "&#x0002C;" ><!--P: =comma -->
-<!ENTITY commat           "&#x00040;" ><!--=commercial at -->
-<!ENTITY copy             "&#x000A9;" ><!--=copyright sign -->
-<!ENTITY curren           "&#x000A4;" ><!--=general currency sign -->
-<!ENTITY darr             "&#x02193;" ><!--/downarrow A: =downward arrow -->
-<!ENTITY deg              "&#x000B0;" ><!--=degree sign -->
-<!ENTITY divide           "&#x000F7;" ><!--/div B: =divide sign -->
-<!ENTITY dollar           "&#x00024;" ><!--=dollar sign -->
-<!ENTITY equals           "&#x0003D;" ><!--=equals sign R: -->
-<!ENTITY excl             "&#x00021;" ><!--=exclamation mark -->
-<!ENTITY frac12           "&#x000BD;" ><!--=fraction one-half -->
-<!ENTITY frac14           "&#x000BC;" ><!--=fraction one-quarter -->
-<!ENTITY frac18           "&#x0215B;" ><!--=fraction one-eighth -->
-<!ENTITY frac34           "&#x000BE;" ><!--=fraction three-quarters -->
-<!ENTITY frac38           "&#x0215C;" ><!--=fraction three-eighths -->
-<!ENTITY frac58           "&#x0215D;" ><!--=fraction five-eighths -->
-<!ENTITY frac78           "&#x0215E;" ><!--=fraction seven-eighths -->
-<!ENTITY gt               "&#x0003E;" ><!--=greater-than sign R: -->
-<!ENTITY half             "&#x000BD;" ><!--=fraction one-half -->
-<!ENTITY horbar           "&#x02015;" ><!--=horizontal bar -->
-<!ENTITY hyphen           "&#x02010;" ><!--=hyphen -->
-<!ENTITY iexcl            "&#x000A1;" ><!--=inverted exclamation mark -->
-<!ENTITY iquest           "&#x000BF;" ><!--=inverted question mark -->
-<!ENTITY laquo            "&#x000AB;" ><!--=angle quotation mark, left -->
-<!ENTITY larr             "&#x02190;" ><!--/leftarrow /gets A: =leftward arrow -->
-<!ENTITY lcub             "&#x0007B;" ><!--/lbrace O: =left curly bracket -->
-<!ENTITY ldquo            "&#x0201C;" ><!--=double quotation mark, left -->
-<!ENTITY lowbar           "&#x0005F;" ><!--=low line -->
-<!ENTITY lpar             "&#x00028;" ><!--O: =left parenthesis -->
-<!ENTITY lsqb             "&#x0005B;" ><!--/lbrack O: =left square bracket -->
-<!ENTITY lsquo            "&#x02018;" ><!--=single quotation mark, left -->
-<!--HELM: deleted the central &: 
-<!ENTITY lt               "&#x26;&#x0003C;" >-->
-<!ENTITY lt               "&#x26;#x0003C;" ><!--=less-than sign R: -->
-<!ENTITY micro            "&#x000B5;" ><!--=micro sign -->
-<!ENTITY middot           "&#x000B7;" ><!--/centerdot B: =middle dot -->
-<!ENTITY nbsp             "&#x000A0;" ><!--=no break (required) space -->
-<!ENTITY not              "&#x000AC;" ><!--/neg /lnot =not sign -->
-<!ENTITY num              "&#x00023;" ><!--=number sign -->
-<!ENTITY ohm              "&#x02126;" ><!--=ohm sign -->
-<!ENTITY ordf             "&#x000AA;" ><!--=ordinal indicator, feminine -->
-<!ENTITY ordm             "&#x000BA;" ><!--=ordinal indicator, masculine -->
-<!ENTITY para             "&#x000B6;" ><!--=pilcrow (paragraph sign) -->
-<!ENTITY percnt           "&#x00025;" ><!--=percent sign -->
-<!ENTITY period           "&#x0002E;" ><!--=full stop, period -->
-<!ENTITY plus             "&#x0002B;" ><!--=plus sign B: -->
-<!ENTITY plusmn           "&#x000B1;" ><!--/pm B: =plus-or-minus sign -->
-<!ENTITY pound            "&#x000A3;" ><!--=pound sign -->
-<!ENTITY quest            "&#x0003F;" ><!--=question mark -->
-<!ENTITY quot             "&#x00022;" ><!--=quotation mark -->
-<!ENTITY raquo            "&#x000BB;" ><!--=angle quotation mark, right -->
-<!ENTITY rarr             "&#x02192;" ><!--/rightarrow /to A: =rightward arrow -->
-<!ENTITY rcub             "&#x0007D;" ><!--/rbrace C: =right curly bracket -->
-<!ENTITY rdquo            "&#x0201D;" ><!--=double quotation mark, right -->
-<!ENTITY reg              "&#x000AE;" ><!--/circledR =registered sign -->
-<!ENTITY rpar             "&#x00029;" ><!--C: =right parenthesis -->
-<!ENTITY rsqb             "&#x0005D;" ><!--/rbrack C: =right square bracket -->
-<!ENTITY rsquo            "&#x02019;" ><!--=single quotation mark, right -->
-<!ENTITY sect             "&#x000A7;" ><!--=section sign -->
-<!ENTITY semi             "&#x0003B;" ><!--=semicolon P: -->
-<!ENTITY shy              "&#x000AD;" ><!--=soft hyphen -->
-<!ENTITY sol              "&#x0002F;" ><!--=solidus -->
-<!ENTITY sung             "&#x0266A;" ><!--=music note (sung text sign) -->
-<!ENTITY sup1             "&#x000B9;" ><!--=superscript one -->
-<!ENTITY sup2             "&#x000B2;" ><!--=superscript two -->
-<!ENTITY sup3             "&#x000B3;" ><!--=superscript three -->
-<!ENTITY times            "&#x000D7;" ><!--/times B: =multiply sign -->
-<!ENTITY trade            "&#x02122;" ><!--=trade mark sign -->
-<!ENTITY uarr             "&#x02191;" ><!--/uparrow A: =upward arrow -->
-<!ENTITY verbar           "&#x0007C;" ><!--/vert =vertical bar -->
-<!ENTITY yen              "&#x000A5;" ><!--/yen =yen sign -->
diff --git a/helm/dtd/isopub.ent b/helm/dtd/isopub.ent
deleted file mode 100644 (file)
index 5591fc3..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-
-<!--
-     File isopub.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1986
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY blank            "&#x02423;" ><!--=significant blank symbol -->
-<!ENTITY blk12            "&#x02592;" ><!--=50% shaded block -->
-<!ENTITY blk14            "&#x02591;" ><!--=25% shaded block -->
-<!ENTITY blk34            "&#x02593;" ><!--=75% shaded block -->
-<!ENTITY block            "&#x02588;" ><!--=full block -->
-<!ENTITY bull             "&#x02022;" ><!--/bullet B: =round bullet, filled -->
-<!ENTITY caret            "&#x02041;" ><!--=caret (insertion mark) -->
-<!ENTITY check            "&#x02713;" ><!--/checkmark =tick, check mark -->
-<!ENTITY cir              "&#x025CB;" ><!--/circ B: =circle, open -->
-<!ENTITY clubs            "&#x02663;" ><!--/clubsuit =club suit symbol  -->
-<!ENTITY copysr           "&#x02117;" ><!--=sound recording copyright sign -->
-<!ENTITY cross            "&#x02717;" ><!--=ballot cross -->
-<!ENTITY dagger           "&#x02020;" ><!--/dagger B: =dagger -->
-<!ENTITY Dagger           "&#x02021;" ><!--/ddagger B: =double dagger -->
-<!ENTITY dash             "&#x02010;" ><!--=hyphen (true graphic) -->
-<!ENTITY diams            "&#x02666;" ><!--/diamondsuit =diamond suit symbol  -->
-<!ENTITY dlcrop           "&#x0230D;" ><!--downward left crop mark  -->
-<!ENTITY drcrop           "&#x0230C;" ><!--downward right crop mark  -->
-<!ENTITY dtri             "&#x025BF;" ><!--/triangledown =down triangle, open -->
-<!ENTITY dtrif            "&#x025BE;" ><!--/blacktriangledown =dn tri, filled -->
-<!ENTITY emsp             "&#x02003;" ><!--=em space -->
-<!ENTITY emsp13           "&#x02004;" ><!--=1/3-em space -->
-<!ENTITY emsp14           "&#x02005;" ><!--=1/4-em space -->
-<!ENTITY ensp             "&#x02002;" ><!--=en space (1/2-em) -->
-<!ENTITY female           "&#x02640;" ><!--=female symbol -->
-<!ENTITY ffilig           "&#x0FB03;" ><!--small ffi ligature -->
-<!ENTITY fflig            "&#x0FB00;" ><!--small ff ligature -->
-<!ENTITY ffllig           "&#x0FB04;" ><!--small ffl ligature -->
-<!ENTITY filig            "&#x0FB01;" ><!--small fi ligature -->
-<!ENTITY flat             "&#x0266D;" ><!--/flat =musical flat -->
-<!ENTITY fllig            "&#x0FB02;" ><!--small fl ligature -->
-<!ENTITY frac13           "&#x02153;" ><!--=fraction one-third -->
-<!ENTITY frac15           "&#x02155;" ><!--=fraction one-fifth -->
-<!ENTITY frac16           "&#x02159;" ><!--=fraction one-sixth -->
-<!ENTITY frac23           "&#x02154;" ><!--=fraction two-thirds -->
-<!ENTITY frac25           "&#x02156;" ><!--=fraction two-fifths -->
-<!ENTITY frac35           "&#x02157;" ><!--=fraction three-fifths -->
-<!ENTITY frac45           "&#x02158;" ><!--=fraction four-fifths -->
-<!ENTITY frac56           "&#x0215A;" ><!--=fraction five-sixths -->
-<!ENTITY hairsp           "&#x0200A;" ><!--=hair space -->
-<!ENTITY hearts           "&#x02661;" ><!--/heartsuit =heart suit symbol  -->
-<!ENTITY hellip           "&#x02026;" ><!--=ellipsis (horizontal) -->
-<!ENTITY hybull           "&#x02043;" ><!--rectangle, filled (hyphen bullet) -->
-<!ENTITY incare           "&#x02105;" ><!--=in-care-of symbol -->
-<!ENTITY ldquor           "&#x0201E;" ><!--=rising dbl quote, left (low) -->
-<!ENTITY lhblk            "&#x02584;" ><!--=lower half block -->
-<!ENTITY loz              "&#x025CA;" ><!--/lozenge - lozenge or total mark -->
-<!ENTITY lozf             "&#x029EB;" ><!--/blacklozenge - lozenge, filled -->
-<!ENTITY lsquor           "&#x0201A;" ><!--=rising single quote, left (low) -->
-<!ENTITY ltri             "&#x025C3;" ><!--/triangleleft B: l triangle, open -->
-<!ENTITY ltrif            "&#x025C2;" ><!--/blacktriangleleft R: =l tri, filled -->
-<!ENTITY male             "&#x02642;" ><!--=male symbol -->
-<!ENTITY malt             "&#x02720;" ><!--/maltese =maltese cross -->
-<!ENTITY marker           "&#x025AE;" ><!--=histogram marker -->
-<!ENTITY mdash            "&#x02014;" ><!--=em dash  -->
-<!ENTITY mldr             "&#x02026;" ><!--em leader -->
-<!ENTITY natur            "&#x0266E;" ><!--/natural - music natural -->
-<!ENTITY ndash            "&#x02013;" ><!--=en dash -->
-<!ENTITY nldr             "&#x02025;" ><!--=double baseline dot (en leader) -->
-<!ENTITY numsp            "&#x02007;" ><!--=digit space (width of a number) -->
-<!ENTITY phone            "&#x0260E;" ><!--=telephone symbol  -->
-<!ENTITY puncsp           "&#x02008;" ><!--=punctuation space (width of comma) -->
-<!ENTITY rdquor           "&#x0201D;" ><!--rising dbl quote, right (high) -->
-<!ENTITY rect             "&#x025AD;" ><!--=rectangle, open -->
-<!ENTITY rsquor           "&#x02019;" ><!--rising single quote, right (high) -->
-<!ENTITY rtri             "&#x025B9;" ><!--/triangleright B: r triangle, open -->
-<!ENTITY rtrif            "&#x025B8;" ><!--/blacktriangleright R: =r tri, filled -->
-<!ENTITY rx               "&#x0211E;" ><!--pharmaceutical prescription (Rx) -->
-<!ENTITY sext             "&#x02736;" ><!--sextile (6-pointed star) -->
-<!ENTITY sharp            "&#x0266F;" ><!--/sharp =musical sharp -->
-<!ENTITY spades           "&#x02660;" ><!--/spadesuit =spades suit symbol  -->
-<!ENTITY squ              "&#x025A1;" ><!--=square, open -->
-<!ENTITY squf             "&#x025AA;" ><!--/blacksquare =sq bullet, filled -->
-<!ENTITY star             "&#x022C6;" ><!--=star, open -->
-<!ENTITY starf            "&#x02605;" ><!--/bigstar - star, filled  -->
-<!ENTITY target           "&#x02316;" ><!--register mark or target -->
-<!ENTITY telrec           "&#x02315;" ><!--=telephone recorder symbol -->
-<!ENTITY thinsp           "&#x02009;" ><!--=thin space (1/6-em) -->
-<!ENTITY uhblk            "&#x02580;" ><!--=upper half block -->
-<!ENTITY ulcrop           "&#x0230F;" ><!--upward left crop mark  -->
-<!ENTITY urcrop           "&#x0230E;" ><!--upward right crop mark  -->
-<!ENTITY utri             "&#x025B5;" ><!--/triangle =up triangle, open -->
-<!ENTITY utrif            "&#x025B4;" ><!--/blacktriangle =up tri, filled -->
-<!ENTITY vellip           "&#x022EE;" ><!--vertical ellipsis -->
diff --git a/helm/dtd/isotech.ent b/helm/dtd/isotech.ent
deleted file mode 100644 (file)
index 8b30af8..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-
-<!--
-     File isotech.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
-     Entity names in this file are derived from files carrying the
-     following notice:
-
-     (C) International Organization for Standardization 1991
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-
--->
-
-<!ENTITY acd              "&#x0223F;" ><!--ac current -->
-<!ENTITY aleph            "&#x02135;" ><!--/aleph aleph, Hebrew -->
-<!ENTITY and              "&#x02227;" ><!--/wedge /land B: logical and -->
-<!ENTITY And              "&#x02A53;" ><!--dbl logical and -->
-<!ENTITY andand           "&#x02A55;" ><!--two logical and -->
-<!ENTITY andd             "&#x02A5C;" ><!--and, horizontal dash -->
-<!ENTITY andslope         "&#x02A58;" ><!--sloping large and -->
-<!ENTITY andv             "&#x02A5A;" ><!--and with middle stem -->
-<!ENTITY angrt            "&#x0221F;" ><!--right (90 degree) angle -->
-<!ENTITY angsph           "&#x02222;" ><!--/sphericalangle angle-spherical -->
-<!ENTITY angst            "&#x0212B;" ><!--Angstrom capital A, ring -->
-<!ENTITY ap               "&#x02248;" ><!--/approx R: approximate -->
-<!ENTITY apacir           "&#x02A6F;" ><!--approximate, circumflex accent -->
-<!ENTITY awconint         "&#x02233;" ><!--contour integral, anti-clockwise -->
-<!ENTITY awint            "&#x02A11;" ><!--anti clock-wise integration -->
-<!ENTITY becaus           "&#x02235;" ><!--/because R: because -->
-<!ENTITY bernou           "&#x0212C;" ><!--Bernoulli function (script capital B)  -->
-<!ENTITY bne              "&#x0003D;&#x020E5;" ><!--reverse not equal -->
-<!ENTITY bnequiv          "&#x02261;&#x020E5;" ><!--reverse not equivalent -->
-<!ENTITY bnot             "&#x02310;" ><!--reverse not -->
-<!ENTITY bNot             "&#x02AED;" ><!--reverse not with two horizontal strokes -->
-<!ENTITY bottom           "&#x022A5;" ><!--/bot bottom -->
-<!ENTITY cap              "&#x02229;" ><!--/cap B: intersection -->
-<!ENTITY Cconint          "&#x02230;" ><!--triple contour integral operator -->
-<!ENTITY cirfnint         "&#x02A10;" ><!--circulation function -->
-<!ENTITY compfn           "&#x02218;" ><!--/circ B: composite function (small circle) -->
-<!ENTITY cong             "&#x02245;" ><!--/cong R: congruent with -->
-<!ENTITY conint           "&#x0222E;" ><!--/oint L: contour integral operator -->
-<!ENTITY Conint           "&#x0222F;" ><!--double contour integral operator -->
-<!ENTITY ctdot            "&#x022EF;" ><!--/cdots, three dots, centered -->
-<!ENTITY cup              "&#x0222A;" ><!--/cup B: union or logical sum -->
-<!ENTITY cwconint         "&#x02232;" ><!--contour integral, clockwise -->
-<!ENTITY cwint            "&#x02231;" ><!--clockwise integral -->
-<!ENTITY cylcty           "&#x0232D;" ><!--cylindricity -->
-<!ENTITY disin            "&#x022F2;" ><!--set membership, long horizontal stroke -->
-<!ENTITY Dot              "&#x000A8;" ><!--dieresis or umlaut mark -->
-<!ENTITY DotDot           "&#x020DC;" ><!--four dots above -->
-<!ENTITY dsol             "&#x02052;" ><!--solidus, bar above -->
-<!ENTITY dtdot            "&#x022F1;" ><!--/ddots, three dots, descending -->
-<!ENTITY dwangle          "&#x029A6;" ><!--large downward pointing angle -->
-<!ENTITY epar             "&#x022D5;" ><!--parallel, equal; equal or parallel -->
-<!ENTITY eparsl           "&#x029E3;" ><!--parallel, slanted, equal; homothetically congruent to -->
-<!ENTITY equiv            "&#x02261;" ><!--/equiv R: identical with -->
-<!ENTITY eqvparsl         "&#x029E5;" ><!--equivalent, equal; congruent and parallel -->
-<!ENTITY exist            "&#x02203;" ><!--/exists at least one exists -->
-<!ENTITY fnof             "&#x00192;" ><!--function of (italic small f) -->
-<!ENTITY forall           "&#x02200;" ><!--/forall for all -->
-<!ENTITY fpartint         "&#x02A0D;" ><!--finite part integral -->
-<!ENTITY ge               "&#x02265;" ><!--/geq /ge R: greater-than-or-equal -->
-<!ENTITY hamilt           "&#x0210B;" ><!--Hamiltonian (script capital H)  -->
-<!ENTITY iff              "&#x021D4;" ><!--/iff if and only if  -->
-<!ENTITY iinfin           "&#x029DC;" ><!--infinity sign, incomplete -->
-<!ENTITY imped "<%mchar.qname; name='imped'/>" ><!--(1D543)impedance -->
-<!ENTITY infin            "&#x0221E;" ><!--/infty infinity -->
-<!ENTITY int              "&#x0222B;" ><!--/int L: integral operator -->
-<!ENTITY Int              "&#x0222C;" ><!--double integral operator -->
-<!ENTITY intlarhk         "&#x02A17;" ><!--integral, left arrow with hook -->
-<!ENTITY isin             "&#x02208;" ><!--/in R: set membership  -->
-<!ENTITY isindot          "&#x022F5;" ><!--set membership, dot above -->
-<!ENTITY isinE            "&#x022F9;" ><!--set membership, two horizontal strokes -->
-<!ENTITY isins            "&#x022F4;" ><!--set membership, vertical bar on horizontal stroke -->
-<!ENTITY isinsv           "&#x022F3;" ><!--large set membership, vertical bar on horizontal stroke -->
-<!ENTITY isinv            "&#x02208;" ><!--set membership, variant -->
-<!ENTITY lagran           "&#x02112;" ><!--Lagrangian (script capital L)  -->
-<!ENTITY lang             "&#x03008;" ><!--/langle O: left angle bracket -->
-<!ENTITY Lang             "&#x0300A;" ><!--left angle bracket, double -->
-<!ENTITY lArr             "&#x021D0;" ><!--/Leftarrow A: is implied by -->
-<!ENTITY lbbrk            "&#x03014;" ><!--left broken bracket -->
-<!ENTITY le               "&#x02264;" ><!--/leq /le R: less-than-or-equal -->
-<!ENTITY loang            "&#x03018;" ><!--left open angular bracket -->
-<!ENTITY lobrk            "&#x0301A;" ><!--left open bracket -->
-<!ENTITY lopar            "&#x02985;" ><!--left open parenthesis -->
-<!ENTITY lowast           "&#x02217;" ><!--low asterisk -->
-<!ENTITY minus            "&#x02212;" ><!--B: minus sign -->
-<!ENTITY mnplus           "&#x02213;" ><!--/mp B: minus-or-plus sign -->
-<!ENTITY nabla            "&#x02207;" ><!--/nabla del, Hamilton operator -->
-<!ENTITY ne               "&#x02260;" ><!--/ne /neq R: not equal -->
-<!ENTITY nedot            "&#x02260;&#x02063;" ><!--not equal, dot -->
-<!ENTITY nhpar            "&#x02AF2;" ><!--not, horizontal, parallel -->
-<!ENTITY ni               "&#x0220B;" ><!--/ni /owns R: contains -->
-<!ENTITY nis              "&#x022FC;" ><!--contains, vertical bar on horizontal stroke -->
-<!ENTITY nisd             "&#x022FA;" ><!--contains, long horizontal stroke -->
-<!ENTITY niv              "&#x0220B;" ><!--contains, variant -->
-<!ENTITY Not              "&#x02AEC;" ><!--not with two horizontal strokes -->
-<!ENTITY notin            "&#x02209;" ><!--/notin N: negated set membership -->
-<!ENTITY notindot         "&#x022F6;&#x02063;" ><!--negated set membership, dot above -->
-<!ENTITY notinva          "&#x02209;&#x00338;" ><!--negated set membership, variant -->
-<!ENTITY notinvb          "&#x022F7;" ><!--negated set membership, variant -->
-<!ENTITY notinvc          "&#x022F6;" ><!--negated set membership, variant -->
-<!ENTITY notni            "&#x0220C;" ><!--negated contains -->
-<!ENTITY notniva          "&#x0220C;" ><!--negated contains, variant -->
-<!ENTITY notnivb          "&#x022FE;" ><!--contains, variant -->
-<!ENTITY notnivc          "&#x022FD;" ><!--contains, variant -->
-<!ENTITY nparsl           "&#x02225;&#x02063;&#x020E5;" ><!--not parallel, slanted -->
-<!ENTITY npart            "&#x02202;&#x00338;" ><!--not partial differential -->
-<!ENTITY npolint          "&#x02A14;" ><!--line integration, not including the pole -->
-<!ENTITY nvinfin          "&#x029DE;" ><!--not, vert, infinity -->
-<!ENTITY olcross          "&#x029BB;" ><!--circle, cross -->
-<!ENTITY or               "&#x02228;" ><!--/vee /lor B: logical or -->
-<!ENTITY Or               "&#x02A54;" ><!--dbl logical or -->
-<!ENTITY ord              "&#x02A5D;" ><!--or, horizontal dash -->
-<!ENTITY order            "&#x02134;" ><!--order of (script small o)  -->
-<!ENTITY oror             "&#x02A56;" ><!--two logical or -->
-<!ENTITY orslope          "&#x02A57;" ><!--sloping large or -->
-<!ENTITY orv              "&#x02A5B;" ><!--or with middle stem -->
-<!ENTITY par              "&#x02225;" ><!--/parallel R: parallel -->
-<!ENTITY parsl            "&#x02225;&#x02063;" ><!--parallel, slanted -->
-<!ENTITY part             "&#x02202;" ><!--/partial partial differential -->
-<!ENTITY permil           "&#x02030;" ><!--per thousand -->
-<!ENTITY perp             "&#x022A5;" ><!--/perp R: perpendicular -->
-<!ENTITY pertenk          "&#x02031;" ><!--per 10 thousand -->
-<!ENTITY phmmat           "&#x02133;" ><!--physics M-matrix (script capital M)  -->
-<!ENTITY pointint         "&#x02A15;" ><!--integral around a point operator -->
-<!ENTITY prime            "&#x02032;" ><!--/prime prime or minute -->
-<!ENTITY Prime            "&#x02033;" ><!--double prime or second -->
-<!ENTITY profalar         "&#x0232E;" ><!--all-around profile -->
-<!ENTITY profline         "&#x02312;" ><!--profile of a line -->
-<!ENTITY profsurf         "&#x02313;" ><!--profile of a surface -->
-<!ENTITY prop             "&#x0221D;" ><!--/propto R: is proportional to -->
-<!ENTITY qint             "&#x02A0C;" ><!--/iiiint quadruple integral operator -->
-<!ENTITY qprime           "&#x02057;" ><!--quadruple prime -->
-<!ENTITY quatint          "&#x02A16;" ><!--quaternion integral operator -->
-<!ENTITY radic            "&#x0221A;" ><!--/surd radical -->
-<!ENTITY rang             "&#x03009;" ><!--/rangle C: right angle bracket -->
-<!ENTITY Rang             "&#x0300B;" ><!--right angle bracket, double -->
-<!ENTITY rArr             "&#x021D2;" ><!--/Rightarrow A: implies -->
-<!ENTITY rbbrk            "&#x03015;" ><!--right broken bracket -->
-<!ENTITY roang            "&#x03019;" ><!--right open angular bracket -->
-<!ENTITY robrk            "&#x0301B;" ><!--right open bracket -->
-<!ENTITY ropar            "&#x02986;" ><!--right open parenthesis -->
-<!ENTITY rppolint         "&#x02A12;" ><!--line integration, rectangular path around pole -->
-<!ENTITY scpolint         "&#x02A13;" ><!--line integration, semi-circular path around pole -->
-<!ENTITY sim              "&#x0223C;" ><!--/sim R: similar -->
-<!ENTITY simdot           "&#x02A6A;" ><!--similar, dot -->
-<!ENTITY sime             "&#x02243;" ><!--/simeq R: similar, equals -->
-<!ENTITY smeparsl         "&#x029E4;" ><!--similar, parallel, slanted, equal -->
-<!ENTITY square           "&#x025A1;" ><!--/square, square -->
-<!ENTITY squarf           "&#x025AA;" ><!--/blacksquare, square, filled  -->
-<!ENTITY sub              "&#x02282;" ><!--/subset R: subset or is implied by -->
-<!ENTITY sube             "&#x02286;" ><!--/subseteq R: subset, equals -->
-<!ENTITY sup              "&#x02283;" ><!--/supset R: superset or implies -->
-<!ENTITY supe             "&#x02287;" ><!--/supseteq R: superset, equals -->
-<!ENTITY tdot             "&#x020DB;" ><!--three dots above -->
-<!ENTITY there4           "&#x02234;" ><!--/therefore R: therefore -->
-<!ENTITY tint             "&#x0222D;" ><!--/iiint triple integral operator -->
-<!ENTITY top              "&#x022A4;" ><!--/top top -->
-<!ENTITY topbot           "&#x02336;" ><!--top and bottom -->
-<!ENTITY topcir           "&#x02AF1;" ><!--top, circle below -->
-<!ENTITY tprime           "&#x02034;" ><!--triple prime -->
-<!ENTITY utdot            "&#x022F0;" ><!--three dots, ascending -->
-<!ENTITY uwangle          "&#x029A7;" ><!--large upward pointing angle -->
-<!ENTITY vangrt           "&#x022BE;" ><!--right angle, variant -->
-<!ENTITY veeeq            "&#x0225A;" ><!--logical or, equals -->
-<!ENTITY Verbar           "&#x02016;" ><!--/Vert dbl vertical bar -->
-<!ENTITY wedgeq           "&#x02259;" ><!--/wedgeq R: corresponds to (wedge, equals) -->
-<!ENTITY xnis             "&#x022FB;" ><!--large contains, vertical bar on horizontal stroke -->
diff --git a/helm/dtd/ls.dtd b/helm/dtd/ls.dtd
deleted file mode 100644 (file)
index 93997e7..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<!ELEMENT ls (section*|object*)>
-
-<!ELEMENT section (#PCDATA)>
-
-<!ELEMENT object (ann,types)>
-<!ATTLIST object name CDATA #REQUIRED>
-
-<!ELEMENT ann EMPTY>
-<!ATTLIST ann value (YES|NO) #REQUIRED>
-
-<!ELEMENT types EMPTY>
-<!ATTLIST types value (YES|NO|ANN) #REQUIRED>
-
diff --git a/helm/dtd/mathml2-qname-1.mod b/helm/dtd/mathml2-qname-1.mod
deleted file mode 100644 (file)
index 4dea63a..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-<!-- ....................................................................... -->
-<!-- MathML Qualified Names Module  ........................................ -->
-<!-- file: mathml2-qname-1.mod
-
-     This is the Mathematical Markup Language (MathML) 2.0, an XML 
-     application for describing mathematical notation and capturing 
-     both its structure and content.
-
-     Copyright 1998-2000 W3C (MIT, INRIA, Keio), All Rights Reserved.
-     Revision: $Id$ 
-
-     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
-
-       PUBLIC "-//W3C//ENTITIES MathML 2.0 Qualified Names 1.0//EN"
-       SYSTEM "mathml2-qname-1.mod"
-
-     Revisions:
-     (none)
-     ....................................................................... -->
-
-<!-- MathML Qualified Names
-
-     This module is contained in two parts, labeled Section 'A' and 'B':
-
-       Section A declares parameter entities to support namespace-
-       qualified names, namespace declarations, and name prefixing 
-       for MathML.
-    
-       Section B declares parameter entities used to provide
-       namespace-qualified names for all MathML element types.
-
-     This module is derived from the XHTML Qualified Names Template module.
--->
-
-<!-- Section A: XHTML XML Namespace Framework :::::::::::::::::::: -->
-
-<!-- HELM: mathml namespace activated: 
-<!ENTITY % NS.prefixed     "IGNORE" >-->
-
-<!ENTITY % NS.prefixed     "INCLUDE" >
-<!ENTITY % MATHML.prefixed "%NS.prefixed;" >
-
-<!-- XLink ............... -->
-
-<!ENTITY % XLINK.xmlns "http://www.w3.org/1999/xlink" >
-<!ENTITY % XLINK.xmlns.attrib
-     "xmlns:xlink  CDATA           #FIXED '%XLINK.xmlns;'"
->
-
-<!-- MathML .............. -->
-
-<!ENTITY % MATHML.xmlns    "http://www.w3.org/1998/Math/MathML" >
-<!ENTITY % MATHML.prefix   "m" >
-<![%MATHML.prefixed;[
-<!ENTITY % MATHML.xmlns.extra.attrib  "" >
-]]>
-<!ENTITY % MATHML.xmlns.extra.attrib 
-     "%XLINK.xmlns.attrib;" >
-
-<![%MATHML.prefixed;[
-<!ENTITY % MATHML.pfx  "%MATHML.prefix;:" >
-<!ENTITY % MATHML.xmlns.attrib
-     "xmlns:%MATHML.prefix;  CDATA   #FIXED '%MATHML.xmlns;'
-      %MATHML.xmlns.extra.attrib;"
->
-]]>
-<!ENTITY % MATHML.pfx  "" >
-<!ENTITY % MATHML.xmlns.attrib
-     "xmlns        CDATA           #FIXED '%MATHML.xmlns;'
-      %MATHML.xmlns.extra.attrib;"
->
-
-<![%NS.prefixed;[
-<!ENTITY % XHTML.xmlns.extra.attrib 
-     "%MATHML.xmlns.attrib;" >
-]]>
-<!ENTITY % XHTML.xmlns.extra.attrib
-     "%XLINK.xmlns.attrib;"
->
-
-<!-- Section B: MathML Qualified Names ::::::::::::::::::::::::::::: -->
-
-<!-- 9. This section declares parameter entities used to provide
-        namespace-qualified names for all MathML element types.
--->
-
-<!ENTITY % mspace.qname         "%MATHML.pfx;mspace" >
-<!ENTITY % mprescripts.qname    "%MATHML.pfx;mprescripts" >
-<!ENTITY % none.qname           "%MATHML.pfx;none" >
-<!ENTITY % malignmark.qname     "%MATHML.pfx;malignmark" >
-<!ENTITY % maligngroup.qname    "%MATHML.pfx;maligngroup" >
-<!ENTITY % mchar.qname          "%MATHML.pfx;mchar" >
-<!ENTITY % mglyph.qname         "%MATHML.pfx;mglyph" >
-<!ENTITY % integers.qname       "%MATHML.pfx;integers" >
-<!ENTITY % reals.qname          "%MATHML.pfx;reals" >
-<!ENTITY % rationals.qname      "%MATHML.pfx;rationals" >
-<!ENTITY % naturalnumbers.qname "%MATHML.pfx;naturalnumbers" >
-<!ENTITY % complexes.qname      "%MATHML.pfx;complexes" >
-<!ENTITY % primes.qname         "%MATHML.pfx;primes" >
-<!ENTITY % exponentiale.qname   "%MATHML.pfx;exponentiale" >
-<!ENTITY % imaginaryi.qname     "%MATHML.pfx;imaginaryi" >
-<!ENTITY % notanumber.qname     "%MATHML.pfx;notanumber" >
-<!ENTITY % true.qname           "%MATHML.pfx;true" >
-<!ENTITY % false.qname          "%MATHML.pfx;false" >
-<!ENTITY % emptyset.qname       "%MATHML.pfx;emptyset" >
-<!ENTITY % pi.qname             "%MATHML.pfx;pi" >
-<!ENTITY % eulergamma.qname     "%MATHML.pfx;eulergamma" >
-<!ENTITY % infinity.qname       "%MATHML.pfx;infinity" >
-<!ENTITY % sep.qname            "%MATHML.pfx;sep" >
-<!ENTITY % inverse.qname        "%MATHML.pfx;inverse" >
-<!ENTITY % ident.qname          "%MATHML.pfx;ident" >
-<!ENTITY % compose.qname        "%MATHML.pfx;compose" >
-<!ENTITY % exp.qname            "%MATHML.pfx;exp" >
-<!ENTITY % abs.qname            "%MATHML.pfx;abs" >
-<!ENTITY % arg.qname            "%MATHML.pfx;arg" >
-<!ENTITY % real.qname           "%MATHML.pfx;real" >
-<!ENTITY % imaginary.qname      "%MATHML.pfx;imaginary" >
-<!ENTITY % conjugate.qname      "%MATHML.pfx;conjugate" >
-<!ENTITY % factorial.qname      "%MATHML.pfx;factorial" >
-<!ENTITY % minus.qname          "%MATHML.pfx;minus" >
-<!ENTITY % quotient.qname       "%MATHML.pfx;quotient" >
-<!ENTITY % divide.qname         "%MATHML.pfx;divide" >
-<!ENTITY % power.qname          "%MATHML.pfx;power" >
-<!ENTITY % rem.qname            "%MATHML.pfx;rem" >
-<!ENTITY % plus.qname           "%MATHML.pfx;plus" >
-<!ENTITY % max.qname            "%MATHML.pfx;max" >
-<!ENTITY % min.qname            "%MATHML.pfx;min" >
-<!ENTITY % times.qname          "%MATHML.pfx;times" >
-<!ENTITY % gcd.qname            "%MATHML.pfx;gcd" >
-<!ENTITY % lcm.qname            "%MATHML.pfx;lcm" >
-<!ENTITY % root.qname           "%MATHML.pfx;root" >
-<!ENTITY % exists.qname         "%MATHML.pfx;exists" >
-<!ENTITY % forall.qname         "%MATHML.pfx;forall" >
-<!ENTITY % and.qname            "%MATHML.pfx;and" >
-<!ENTITY % or.qname             "%MATHML.pfx;or" >
-<!ENTITY % xor.qname            "%MATHML.pfx;xor" >
-<!ENTITY % not.qname            "%MATHML.pfx;not" >
-<!ENTITY % implies.qname        "%MATHML.pfx;implies" >
-<!ENTITY % divergence.qname     "%MATHML.pfx;divergence" >
-<!ENTITY % grad.qname           "%MATHML.pfx;grad" >
-<!ENTITY % curl.qname           "%MATHML.pfx;curl" >
-<!ENTITY % laplacian.qname      "%MATHML.pfx;laplacian" >
-<!ENTITY % log.qname            "%MATHML.pfx;log" >
-<!ENTITY % int.qname            "%MATHML.pfx;int" >
-<!ENTITY % diff.qname           "%MATHML.pfx;diff" >
-<!ENTITY % partialdiff.qname    "%MATHML.pfx;partialdiff" >
-<!ENTITY % ln.qname             "%MATHML.pfx;ln" >
-<!ENTITY % card.qname           "%MATHML.pfx;card" >
-<!ENTITY % setdiff.qname        "%MATHML.pfx;setdiff" >
-<!ENTITY % union.qname          "%MATHML.pfx;union" >
-<!ENTITY % intersect.qname      "%MATHML.pfx;intersect" >
-<!ENTITY % sum.qname            "%MATHML.pfx;sum" >
-<!ENTITY % product.qname        "%MATHML.pfx;product" >
-<!ENTITY % limit.qname          "%MATHML.pfx;limit" >
-<!ENTITY % sin.qname            "%MATHML.pfx;sin" >
-<!ENTITY % cos.qname            "%MATHML.pfx;cos" >
-<!ENTITY % tan.qname            "%MATHML.pfx;tan" >
-<!ENTITY % sec.qname            "%MATHML.pfx;sec" >
-<!ENTITY % csc.qname            "%MATHML.pfx;csc" >
-<!ENTITY % cot.qname            "%MATHML.pfx;cot" >
-<!ENTITY % sinh.qname           "%MATHML.pfx;sinh" >
-<!ENTITY % cosh.qname           "%MATHML.pfx;cosh" >
-<!ENTITY % tanh.qname           "%MATHML.pfx;tanh" >
-<!ENTITY % sech.qname           "%MATHML.pfx;sech" >
-<!ENTITY % csch.qname           "%MATHML.pfx;csch" >
-<!ENTITY % coth.qname           "%MATHML.pfx;coth" >
-<!ENTITY % arcsin.qname         "%MATHML.pfx;arcsin" >
-<!ENTITY % arccos.qname         "%MATHML.pfx;arccos" >
-<!ENTITY % arctan.qname         "%MATHML.pfx;arctan" >
-<!ENTITY % arccosh.qname        "%MATHML.pfx;arccosh" >
-<!ENTITY % arccot.qname         "%MATHML.pfx;arccot" >
-<!ENTITY % arccoth.qname        "%MATHML.pfx;arccoth" >
-<!ENTITY % arccsc.qname         "%MATHML.pfx;arccsc" >
-<!ENTITY % arccsch.qname        "%MATHML.pfx;arccsch" >
-<!ENTITY % arcsec.qname         "%MATHML.pfx;arcsec" >
-<!ENTITY % arcsech.qname        "%MATHML.pfx;arcsech" >
-<!ENTITY % arcsinh.qname        "%MATHML.pfx;arcsinh" >
-<!ENTITY % arctanh.qname        "%MATHML.pfx;arctanh" >
-<!ENTITY % arccosh.qname        "%MATHML.pfx;arccosh" >
-<!ENTITY % mean.qname           "%MATHML.pfx;mean" >
-<!ENTITY % sdev.qname           "%MATHML.pfx;sdev" >
-<!ENTITY % variance.qname       "%MATHML.pfx;variance" >
-<!ENTITY % median.qname         "%MATHML.pfx;median" >
-<!ENTITY % mode.qname           "%MATHML.pfx;mode" >
-<!ENTITY % moment.qname         "%MATHML.pfx;moment" >
-<!ENTITY % determinant.qname    "%MATHML.pfx;determinant" >
-<!ENTITY % transpose.qname      "%MATHML.pfx;transpose" >
-<!ENTITY % vectorproduct.qname  "%MATHML.pfx;vectorproduct" >
-<!ENTITY % scalarproduct.qname  "%MATHML.pfx;scalarproduct" >
-<!ENTITY % outerproduct.qname   "%MATHML.pfx;outerproduct" >
-<!ENTITY % selector.qname       "%MATHML.pfx;selector" >
-<!ENTITY % neq.qname            "%MATHML.pfx;neq" >
-<!ENTITY % eq.qname             "%MATHML.pfx;eq" >
-<!ENTITY % equivalent.qname     "%MATHML.pfx;equivalent" >
-<!ENTITY % approx.qname         "%MATHML.pfx;approx" >
-<!ENTITY % gt.qname             "%MATHML.pfx;gt" >
-<!ENTITY % lt.qname             "%MATHML.pfx;lt" >
-<!ENTITY % geq.qname            "%MATHML.pfx;geq" >
-<!ENTITY % leq.qname            "%MATHML.pfx;leq" >
-<!ENTITY % in.qname             "%MATHML.pfx;in" >
-<!ENTITY % notin.qname          "%MATHML.pfx;notin" >
-<!ENTITY % notsubset.qname      "%MATHML.pfx;notsubset" >
-<!ENTITY % notprsubset.qname    "%MATHML.pfx;notprsubset" >
-<!ENTITY % subset.qname         "%MATHML.pfx;subset" >
-<!ENTITY % prsubset.qname       "%MATHML.pfx;prsubset" >
-<!ENTITY % tendsto.qname        "%MATHML.pfx;tendsto" >
-<!ENTITY % ci.qname             "%MATHML.pfx;ci" >
-<!ENTITY % csymbol.qname        "%MATHML.pfx;csymbol" >
-<!ENTITY % cn.qname             "%MATHML.pfx;cn" >
-<!ENTITY % apply.qname          "%MATHML.pfx;apply" >
-<!ENTITY % reln.qname           "%MATHML.pfx;reln" >
-<!ENTITY % lambda.qname         "%MATHML.pfx;lambda" >
-<!ENTITY % condition.qname      "%MATHML.pfx;condition" >
-<!ENTITY % declare.qname        "%MATHML.pfx;declare" >
-<!ENTITY % type.qname           "%MATHML.pfx;type" >
-<!ENTITY % semantics.qname      "%MATHML.pfx;semantics" >
-<!ENTITY % annotation.qname     "%MATHML.pfx;annotation" >
-<!ENTITY % annotation-xml.qname "%MATHML.pfx;annotation-xml" >
-<!ENTITY % interval.qname       "%MATHML.pfx;interval" >
-<!ENTITY % set.qname            "%MATHML.pfx;set" >
-<!ENTITY % list.qname           "%MATHML.pfx;list" >
-<!ENTITY % vector.qname         "%MATHML.pfx;vector" >
-<!ENTITY % matrix.qname         "%MATHML.pfx;matrix" >
-<!ENTITY % matrixrow.qname      "%MATHML.pfx;matrixrow" >
-<!ENTITY % fn.qname             "%MATHML.pfx;fn" >
-<!ENTITY % lowlimit.qname       "%MATHML.pfx;lowlimit" >
-<!ENTITY % uplimit.qname        "%MATHML.pfx;uplimit" >
-<!ENTITY % bvar.qname           "%MATHML.pfx;bvar" >
-<!ENTITY % degree.qname         "%MATHML.pfx;degree" >
-<!ENTITY % logbase.qname        "%MATHML.pfx;logbase" >
-<!ENTITY % mstyle.qname         "%MATHML.pfx;mstyle" >
-<!ENTITY % merror.qname         "%MATHML.pfx;merror" >
-<!ENTITY % mphantom.qname       "%MATHML.pfx;mphantom" >
-<!ENTITY % mrow.qname           "%MATHML.pfx;mrow" >
-<!ENTITY % mfrac.qname          "%MATHML.pfx;mfrac" >
-<!ENTITY % msqrt.qname          "%MATHML.pfx;msqrt" >
-<!ENTITY % menclose.qname       "%MATHML.pfx;menclose" >
-<!ENTITY % mroot.qname          "%MATHML.pfx;mroot" >
-<!ENTITY % msub.qname           "%MATHML.pfx;msub" >
-<!ENTITY % msup.qname           "%MATHML.pfx;msup" >
-<!ENTITY % msubsup.qname        "%MATHML.pfx;msubsup" >
-<!ENTITY % mmultiscripts.qname  "%MATHML.pfx;mmultiscripts" >
-<!ENTITY % munder.qname         "%MATHML.pfx;munder" >
-<!ENTITY % mover.qname          "%MATHML.pfx;mover" >
-<!ENTITY % munderover.qname     "%MATHML.pfx;munderover" >
-<!ENTITY % mtable.qname         "%MATHML.pfx;mtable" >
-<!ENTITY % mtr.qname            "%MATHML.pfx;mtr" >
-<!ENTITY % mlabeledtr.qname     "%MATHML.pfx;mlabeledtr" >
-<!ENTITY % mtd.qname            "%MATHML.pfx;mtd" >
-<!ENTITY % maction.qname        "%MATHML.pfx;maction" >
-<!ENTITY % mfenced.qname        "%MATHML.pfx;mfenced" >
-<!ENTITY % mpadded.qname        "%MATHML.pfx;mpadded" >
-<!ENTITY % mi.qname             "%MATHML.pfx;mi" >
-<!ENTITY % mn.qname             "%MATHML.pfx;mn" >
-<!ENTITY % mo.qname             "%MATHML.pfx;mo" >
-<!ENTITY % mtext.qname          "%MATHML.pfx;mtext" >
-<!ENTITY % ms.qname             "%MATHML.pfx;ms" >
-<!ENTITY % math.qname           "%MATHML.pfx;math" >
-
-
-<!-- ignores subsequent instantiation of this module when
-     used as external subset rather than module fragment.
-     NOTE: Do not modify this parameter entity, otherwise
-     a recursive parsing situation may result.
--->
-<!ENTITY % mathml-qname.module "IGNORE" >
-
-<!-- end of template-qname-1.mod -->
diff --git a/helm/dtd/mathml2.dtd b/helm/dtd/mathml2.dtd
deleted file mode 100644 (file)
index a9b7bf1..0000000
+++ /dev/null
@@ -1,1948 +0,0 @@
-<!-- MathML 2.0 DTD  ....................................................... -->
-<!-- file: mathml2.dtd
--->
-
-<!-- MathML 2.0 DTD
-
-     This is the Mathematical Markup Language (MathML) 2.0, an XML
-     application for describing mathematical notation and capturing
-     both its structure and content.
-
-     Copyright 1998-2000 World Wide Web Consortium
-        (Massachusetts Institute of Technology, Institut National de
-         Recherche en Informatique et en Automatique, Keio University).
-         All Rights Reserved.
-
-     Permission to use, copy, modify and distribute the XHTML 1.1 DTD and
-     its accompanying documentation for any purpose and without fee is
-     hereby granted in perpetuity, provided that the above copyright notice
-     and this paragraph appear in all copies.  The copyright holders make
-     no representation about the suitability of the DTD for any purpose.
-
-     It is provided "as is" without expressed or implied warranty.
-
-        Revision:   $Id$
-
-     This entity may be identified by the PUBLIC and SYSTEM identifiers:
-
-       PUBLIC "-//W3C//DTD MathML 2.0//EN"
-       SYSTEM "mathml2.dtd"
-
-     Revisions: editor and revision history at EOF
--->
-
-
-<!-- MathML Qualified Names module ............................... -->
-<!ENTITY % mathml-qname.module "INCLUDE" >
-<![%mathml-qname.module;[
-<!ENTITY % mathml-qname.mod
-     PUBLIC "-//W3C//ENTITIES MathML 2.0 Qualified Names 1.0//EN"
-            "mathml2-qname-1.mod" >
-%mathml-qname.mod;]]>
-
-<!-- if %NS.prefixed; is INCLUDE, include all NS attributes, 
-     otherwise just those associated with MathML
--->
-<![%NS.prefixed;[
-<!-- HELM: %NamespaceDecl.attrib; not declared !! ENTITY substituted
-<!ENTITY % MATHML.NamespaceDecl.attrib 
-     "%NamespaceDecl.attrib;"
->-->
-<!ENTITY % MATHML.NamespaceDecl.attrib 
-     "%MATHML.xmlns.attrib;"
->
-]]>
-<!ENTITY % MATHML.NamespaceDecl.attrib 
-     "%MATHML.xmlns.attrib;"
->
-
-<!-- Attributes shared by all elements  .......................... -->
-
-<!ENTITY % MATHML.Common.attrib
-     "%MATHML.NamespaceDecl.attrib;
-      xlink:href   CDATA                    #IMPLIED
-      class        CDATA                    #IMPLIED
-      style        CDATA                    #IMPLIED
-      id           ID                       #IMPLIED
-      xref         IDREF                    #IMPLIED
-      other        CDATA                    #IMPLIED"
->
-
-<!-- Presentation element set  ................................... -->
-
-<!-- Attribute definitions -->
-
-<!ENTITY % att-fontsize
-     "fontsize     CDATA                    #IMPLIED" >
-<!ENTITY % att-fontweight
-     "fontweight   ( normal | bold )        #IMPLIED" >
-<!ENTITY % att-fontstyle
-     "fontstyle    ( normal | italic )      #IMPLIED" >
-<!ENTITY % att-fontfamily
-     "fontfamily   CDATA                    #IMPLIED" >
-<!ENTITY % att-color
-     "color        CDATA                    #IMPLIED" >
-
-<!ENTITY % att-fontinfo
-     "%att-fontsize;
-      %att-fontweight;
-      %att-fontstyle;
-      %att-fontfamily;
-      %att-color;"
->
-
-<!ENTITY % att-form
-     "form         ( prefix | infix | postfix )  #IMPLIED" >
-<!ENTITY % att-fence
-     "fence        ( true | false )         #IMPLIED" >
-<!ENTITY % att-separator
-     "separator    ( true | false )         #IMPLIED" >
-<!ENTITY % att-lspace
-     "lspace       CDATA                    #IMPLIED" >
-<!ENTITY % att-rspace
-     "rspace       CDATA                    #IMPLIED" >
-<!ENTITY % att-stretchy
-     "stretchy     ( true | false )         #IMPLIED" >
-<!ENTITY % att-symmetric
-     "symmetric    ( true | false )         #IMPLIED" >
-<!ENTITY % att-maxsize
-     "maxsize      CDATA                    #IMPLIED" >
-<!ENTITY % att-minsize
-     "minsize      CDATA                    #IMPLIED" >
-<!ENTITY % att-largeop
-     "largeop      ( true | false)          #IMPLIED" >
-<!ENTITY % att-movablelimits
-     "movablelimits ( true | false )        #IMPLIED" >
-<!ENTITY % att-accent
-     "accent       ( true | false )         #IMPLIED" >
-
-<!ENTITY % att-opinfo
-     "%att-form;
-      %att-fence;
-      %att-separator;
-      %att-lspace;
-      %att-rspace;
-      %att-stretchy;
-      %att-symmetric;
-      %att-maxsize;
-      %att-minsize;
-      %att-largeop;
-      %att-movablelimits;
-      %att-accent;"
->
-<!ENTITY % att-width
-     "width        CDATA                    #IMPLIED" >
-<!ENTITY % att-height
-     "height       CDATA                    #IMPLIED" >
-<!ENTITY % att-depth
-     "depth        CDATA                    #IMPLIED" >
-<!ENTITY % att-linebreak
-     "linebreak    CDATA                    #IMPLIED" >
-<!ENTITY % att-sizeinfo
-     "%att-width;
-      %att-height;
-      %att-depth;"
->
-<!ENTITY % att-lquote               
-     "lquote       CDATA                    #IMPLIED" >
-<!ENTITY % att-rquote               
-     "rquote       CDATA                    #IMPLIED" >
-<!ENTITY % att-linethickness        
-     "linethickness CDATA                   #IMPLIED" >
-<!ENTITY % att-scriptlevel          
-     "scriptlevel  CDATA                    #IMPLIED" >
-<!ENTITY % att-displaystyle         
-     "displaystyle ( true | false )         #IMPLIED" >
-<!ENTITY % att-scriptsizemultiplier 
-     "scriptsizemultiplier CDATA            #IMPLIED" >
-<!ENTITY % att-scriptminsize        
-     "scriptminsize CDATA                   #IMPLIED" >
-<!ENTITY % att-background           
-     "background   CDATA                    #IMPLIED" >
-<!ENTITY % att-open                 
-     "open         CDATA                    #IMPLIED" >
-<!ENTITY % att-close                
-     "close        CDATA                    #IMPLIED" >
-<!ENTITY % att-separators          
-     "separators   CDATA                    #IMPLIED" >
-<!ENTITY % att-subscriptshift       
-     "subscriptshift CDATA                  #IMPLIED" >
-<!ENTITY % att-superscriptshift     
-     "superscriptshift CDATA                #IMPLIED" >
-<!ENTITY % att-accentunder          
-     "accentunder  ( true | false )         #IMPLIED" >
-<!ENTITY % att-align       
-     "align        CDATA                    #IMPLIED" >
-<!ENTITY % att-rowalign      
-     "rowalign     CDATA                    #IMPLIED" >
-<!ENTITY % att-columnalign     
-     "columnalign  CDATA                    #IMPLIED" >
-<!ENTITY % att-columnwidth   
-     "columnwidth  CDATA                    #IMPLIED" >
-<!ENTITY % att-groupalign      
-     "groupalign   CDATA                    #IMPLIED" >
-<!ENTITY % att-alignmentscope 
-     "alignmentscope CDATA                  #IMPLIED" >
-<!ENTITY % att-rowspacing           
-     "rowspacing   CDATA                    #IMPLIED" >
-<!ENTITY % att-columnspacing      
-     "columnspacing CDATA                   #IMPLIED" >
-<!ENTITY % att-rowlines            
-     "rowlines     CDATA                    #IMPLIED" >
-<!ENTITY % att-columnlines        
-     "columnlines  CDATA                    #IMPLIED" >
-<!ENTITY % att-frame            
-     "frame       ( none | solid | dashed ) #IMPLIED" >
-<!ENTITY % att-framespacing         
-     "framespacing CDATA                    #IMPLIED" >
-<!ENTITY % att-equalrows        
-     "equalrows    CDATA                    #IMPLIED" >
-<!ENTITY % att-equalcolumns         
-     "equalcolumns CDATA                    #IMPLIED" >
-
-<!ENTITY % att-tableinfo            
-     "%att-align;
-      %att-rowalign;
-      %att-columnalign;
-      %att-columnwidth;
-      %att-groupalign;
-      %att-alignmentscope;
-      %att-rowspacing;
-      %att-columnspacing;
-      %att-rowlines;
-      %att-columnlines;
-      %att-frame;
-      %att-framespacing;
-      %att-equalrows;
-      %att-equalcolumns;
-      %att-displaystyle;" 
->
-
-<!ENTITY % att-rowspan              
-     "rowspan      CDATA                    #IMPLIED" >
-<!ENTITY % att-columnspan           
-     "columnspan   CDATA                    #IMPLIED" >
-<!ENTITY % att-edge        
-     "edge         ( left | right )         #IMPLIED" >
-<!ENTITY % att-actiontype          
-     "actiontype   CDATA                    #IMPLIED" >
-<!ENTITY % att-selection       
-     "selection    CDATA                    #IMPLIED" >
-
-<!ENTITY % att-name                 
-     "name         CDATA                    #IMPLIED" >
-<!ENTITY % att-alt              
-     "alt          CDATA                    #IMPLIED" >
-<!ENTITY % att-index           
-     "index        CDATA                    #IMPLIED" >
-
-<!ENTITY % att-bevelled       
-     "bevelled      CDATA                    #IMPLIED" >
-
-<!-- Presentation schemata with content -->
-
-<!ENTITY % ptoken                   
-     "%mi.qname; | %mn.qname; | %mo.qname;
-      | %mtext.qname; | %ms.qname;" >
-
-<!ATTLIST %mi.qname;
-      %MATHML.Common.attrib;
-      %att-fontinfo;
->
-
-<!ATTLIST %mn.qname;      
-      %MATHML.Common.attrib; 
-      %att-fontinfo;
->
-
-<!ATTLIST %mo.qname;     
-      %MATHML.Common.attrib; 
-      %att-fontinfo;
-      %att-opinfo;
->
-
-<!ATTLIST %mtext.qname;  
-      %MATHML.Common.attrib;
-      %att-fontinfo;
->
-
-<!ATTLIST %ms.qname;     
-      %MATHML.Common.attrib;
-      %att-fontinfo;
-      %att-lquote;
-      %att-rquote;
->
-
-<!-- Empty presentation schemata -->
-
-<!ENTITY % petoken                  
-     "%mspace.qname;" >
-<!ELEMENT %mspace.qname;  EMPTY >
-
-<!ATTLIST %mspace.qname; 
-      %att-sizeinfo;
-      %att-linebreak;
-      %MATHML.Common.attrib;
->
-
-<!-- Presentation: general layout schemata -->
-
-<!ENTITY % pgenschema               
-     "%mrow.qname; | %mfrac.qname; | %msqrt.qname; | %mroot.qname; 
-      | %menclose.qname; | %mstyle.qname; | %merror.qname; 
-      | %mpadded.qname; | %mphantom.qname; | %mfenced.qname;" >
-
-<!ATTLIST %mrow.qname;        
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %mfrac.qname;     
-      %MATHML.Common.attrib;
-      %att-bevelled;
-      %att-linethickness;
->
-
-<!ATTLIST %msqrt.qname;     
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %menclose.qname;  
-      %MATHML.Common.attrib;
-      notation CDATA 'longdiv' >
-
-<!ATTLIST %mroot.qname;    
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %mstyle.qname;  
-      %MATHML.Common.attrib;
-      %att-fontinfo;
-      %att-opinfo;
-      %att-lquote;
-      %att-rquote;
-      %att-linethickness;
-      %att-scriptlevel;
-      %att-scriptsizemultiplier;
-      %att-scriptminsize;
-      %att-background;
-      %att-open;
-      %att-close;
-      %att-separators;
-      %att-subscriptshift;
-      %att-superscriptshift;
-      %att-accentunder;
-      %att-tableinfo;
-      %att-rowspan;
-      %att-columnspan;
-      %att-edge;
-      %att-actiontype;
-      %att-selection;
->
-
-<!ATTLIST %merror.qname;   
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %mpadded.qname;     
-      %MATHML.Common.attrib;
-      %att-sizeinfo;
-      %att-lspace;
->
-
-<!ATTLIST %mphantom.qname;      
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %mfenced.qname;     
-      %MATHML.Common.attrib;
-      %att-open;
-      %att-close;
-      %att-separators;
->
-
-<!-- Presentation layout schemata: scripts and limits -->
-
-<!ENTITY % pscrschema               
-     "%msub.qname; | %msup.qname; | %msubsup.qname; | %munder.qname; 
-      | %mover.qname; | %munderover.qname; | %mmultiscripts.qname;" >
-
-<!ATTLIST %msub.qname;      
-      %MATHML.Common.attrib;
-      %att-subscriptshift;
->
-
-<!ATTLIST %msup.qname;         
-      %MATHML.Common.attrib;
-      %att-superscriptshift;
->
-
-<!ATTLIST %msubsup.qname;    
-      %MATHML.Common.attrib;
-      %att-subscriptshift;
-      %att-superscriptshift;
->
-
-<!ATTLIST %munder.qname;   
-      %MATHML.Common.attrib;
-      %att-accentunder;
->
-
-<!ATTLIST %mover.qname;   
-      %MATHML.Common.attrib;
-      %att-accent;
->
-
-<!ATTLIST %munderover.qname;   
-      %MATHML.Common.attrib;
-      %att-accent;
-      %att-accentunder;
->
-
-<!ATTLIST %mmultiscripts.qname;   
-      %MATHML.Common.attrib;
-      %att-subscriptshift;
-      %att-superscriptshift;
->
-
-<!-- Presentation layout schemata: empty elements for scripts -->
-
-<!ENTITY % pscreschema              
-     "%mprescripts.qname; | %none.qname;" >
-
-<!ELEMENT %mprescripts.qname;  EMPTY >
-<!ATTLIST %mprescripts.qname;   
-      %MATHML.xmlns.attrib; >
-
-<!ELEMENT %none.qname;  EMPTY >
-<!ATTLIST %none.qname;    
-      %MATHML.xmlns.attrib; >
-
-<!-- Presentation layout schemata: tables -->
-
-<!ENTITY % ptabschema               
-     "%mtable.qname; | %mtr.qname; | %mlabeledtr.qname; | %mtd.qname;" >
-
-<!ATTLIST %mtable.qname;
-      %MATHML.Common.attrib;
-      %att-tableinfo;
->
-
-<!ATTLIST %mtr.qname;    
-      %MATHML.Common.attrib;
-      %att-rowalign;
-      %att-columnalign;
-      %att-groupalign;
->
-
-<!ATTLIST %mlabeledtr.qname;  
-      %MATHML.Common.attrib;
-      %att-rowalign;
-      %att-columnalign;
-      %att-groupalign;
->
-
-<!ATTLIST %mtd.qname;   
-      %MATHML.Common.attrib;
-      %att-rowalign;
-      %att-columnalign;
-      %att-groupalign;
-      %att-rowspan;
-      %att-columnspan;
->
-
-<!ENTITY % plschema                 
-     "%pgenschema; | %pscrschema; | %ptabschema;" >
-
-<!-- Empty presentation layout schemata -->
-
-<!ENTITY % peschema                 
-     "%maligngroup.qname; | %malignmark.qname;" >
-
-<!ELEMENT %malignmark.qname;  EMPTY >
-
-<!ATTLIST %malignmark.qname;  
-      %att-edge; >
-
-<!ELEMENT %maligngroup.qname;  EMPTY >
-<!ATTLIST %maligngroup.qname;  
-      %MATHML.Common.attrib;
-      %att-groupalign;
->
-
-<!ELEMENT %mchar.qname;  EMPTY >
-<!ATTLIST %mchar.qname;    
-      %att-name; >
-
-<!ELEMENT %mglyph.qname;  EMPTY >
-<!ATTLIST %mglyph.qname;    
-      %att-alt;
-      %att-fontfamily;
-      %att-index; >
-
-<!-- Presentation action schemata -->
-
-<!ENTITY % pactions                 
-     "%maction.qname;" >
-<!ATTLIST %maction.qname;    
-      %MATHML.Common.attrib;
-      %att-actiontype;
-      %att-selection;
->
-
-<!-- The following entity for substitution into
-     content constructs excludes elements that
-     are not valid as expressions.
--->
-
-<!ENTITY % PresInCont               
-     "%ptoken; | %petoken; |
-      %plschema; | %peschema; | %pactions;" >
-
-<!-- Presentation entity: all presentation constructs -->
-
-<!ENTITY % Presentation             
-     "%ptoken; | %petoken; | %pscreschema; |
-      %plschema; | %peschema; | %pactions;">
-
-<!-- Content element set  ........................................ -->
-
-<!-- Attribute definitions -->
-
-<!ENTITY % att-base                 
-     "base         CDATA                    '10'" >
-<!ENTITY % att-closure              
-     "closure      CDATA                    'closed'" >
-<!ENTITY % att-definition           
-     "definitionURL CDATA                   ''" >
-<!ENTITY % att-encoding             
-     "encoding     CDATA                    ''" >
-<!ENTITY % att-nargs             
-     "nargs        CDATA                    '1'" >
-<!ENTITY % att-occurrence           
-     "occurrence   CDATA                    'function-model'" >
-<!ENTITY % att-order   
-     "order        CDATA                    'numeric'" >
-<!ENTITY % att-scope                
-     "scope        CDATA                    'local'" >
-<!ENTITY % att-type                 
-     "type         CDATA                    #IMPLIED" >
-
-<!-- Content elements: leaf nodes -->
-
-<!ENTITY % ctoken               
-     "%csymbol.qname; | %ci.qname; | %cn.qname;" >
-
-<!ATTLIST %ci.qname;     
-      %MATHML.Common.attrib;
-      %att-type;
-      %att-definition;
-      %att-encoding;
->
-
-<!ATTLIST %csymbol.qname;   
-      %MATHML.Common.attrib;
-      %att-encoding;
-      %att-type;
-      %att-definition;
->
-
-<!ATTLIST %cn.qname;    
-      %MATHML.Common.attrib;
-      %att-type;
-      %att-base;
-      %att-definition;
-      %att-encoding;
->
-
-<!-- Content elements: specials -->
-
-<!ENTITY % cspecial                 
-     "%apply.qname; | %reln.qname; |
-      %lambda.qname;" >
-
-<!ATTLIST %apply.qname;   
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %reln.qname;   
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %lambda.qname;      
-      %MATHML.Common.attrib;
->
-
-<!-- Content elements: others -->
-<!-- HELM: added the content element type to cother-->
-<!ENTITY % cother                   
-     "%condition.qname; | %declare.qname; | %sep.qname; | %type.qname;" >
-
-<!ATTLIST %condition.qname;     
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %declare.qname;    
-      %MATHML.Common.attrib;
-      %att-type;
-      %att-scope;
-      %att-nargs;
-      %att-occurrence;
-      %att-definition;
-      %att-encoding;
->
-
-<!-- HELM: added attributes to the type element -->
-<!ATTLIST %type.qname;            %MATHML.Common.attrib; >
-
-<!ELEMENT %sep.qname;  EMPTY >
-<!ATTLIST %sep.qname;         
-      %MATHML.xmlns.attrib; >
-
-<!-- Content elements: semantic mapping -->
-
-<!ENTITY % csemantics               
-     "%semantics.qname; | %annotation.qname; |
-      %annotation-xml.qname;" >
-
-<!ATTLIST %semantics.qname;  
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ATTLIST %annotation.qname;  
-      %MATHML.Common.attrib;
-      %att-encoding;
->
-
-<!ATTLIST %annotation-xml.qname; 
-      %MATHML.Common.attrib;
-      %att-encoding;
->
-
-<!-- Content elements: constructors -->
-
-<!ENTITY % cconstructor             
-     "%interval.qname; | %list.qname; | %matrix.qname; 
-      | %matrixrow.qname; | %set.qname; | %vector.qname;" >
-
-<!ATTLIST %interval.qname;   
-      %MATHML.Common.attrib;
-      %att-closure;
->
-
-<!ATTLIST %set.qname;        
-      %MATHML.Common.attrib;
-      %att-type;
->
-
-<!ATTLIST %list.qname;          
-      %MATHML.Common.attrib;
-      %att-order;
->
-
-<!ATTLIST %vector.qname;    
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %matrix.qname;    
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %matrixrow.qname;     
-      %MATHML.Common.attrib;
->
-
-<!-- Content elements: symbols -->
-
-<!ENTITY % c0ary              
-    "%integers.qname; |
-     %reals.qname; |
-     %rationals.qname; |
-     %naturalnumbers.qname; |
-     %complexes.qname; |
-     %primes.qname; |
-     %exponentiale.qname; |
-     %imaginaryi.qname; |
-     %notanumber.qname; |
-     %true.qname; |
-     %false.qname; |
-     %emptyset.qname; |
-     %pi.qname; |
-     %eulergamma.qname; |
-     %infinity.qname;" >
-
-<!ELEMENT %integers.qname;  EMPTY >
-<!ATTLIST %integers.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %reals.qname;  EMPTY >
-<!ATTLIST %reals.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %rationals.qname;  EMPTY >
-<!ATTLIST %rationals.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %naturalnumbers.qname;  EMPTY >
-<!ATTLIST %naturalnumbers.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %complexes.qname;  EMPTY >
-<!ATTLIST %complexes.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %primes.qname;  EMPTY >
-<!ATTLIST %primes.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %exponentiale.qname;  EMPTY >
-<!ATTLIST %exponentiale.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %imaginaryi.qname;  EMPTY >
-<!ATTLIST %imaginaryi.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %notanumber.qname;  EMPTY >
-<!ATTLIST %notanumber.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %true.qname;  EMPTY >
-<!ATTLIST %true.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %false.qname;  EMPTY >
-<!ATTLIST %false.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %emptyset.qname;  EMPTY >
-<!ATTLIST %emptyset.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %pi.qname;  EMPTY >
-<!ATTLIST %pi.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %eulergamma.qname;  EMPTY >
-<!ATTLIST %eulergamma.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %infinity.qname;  EMPTY >
-<!ATTLIST %infinity.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!-- Content elements: operators -->
-
-<!ENTITY % cfuncop1ary              
-     "%inverse.qname; | %ident.qname;" >
-
-<!ELEMENT %inverse.qname;  EMPTY >
-<!ATTLIST %inverse.qname;    
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % cfuncopnary              
-     "%fn.qname; | %compose.qname;" >
-
-<!ATTLIST %fn.qname;     
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %ident.qname;  EMPTY >
-<!ATTLIST %ident.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %compose.qname;  EMPTY >
-<!ATTLIST %compose.qname;  
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % carithop1ary             
-     "%abs.qname; | %conjugate.qname; | %exp.qname; | %factorial.qname; |
-      %arg.qname; | %real.qname; | %imaginary.qname;" >
-
-<!ELEMENT %exp.qname;  EMPTY >
-<!ATTLIST %exp.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %abs.qname;  EMPTY >
-<!ATTLIST %abs.qname;        
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %arg.qname;  EMPTY >
-<!ATTLIST %arg.qname;     
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %real.qname;  EMPTY >
-<!ATTLIST %real.qname;    
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %imaginary.qname;  EMPTY >
-<!ATTLIST %imaginary.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %conjugate.qname;  EMPTY >
-<!ATTLIST %conjugate.qname;  
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %factorial.qname;  EMPTY >
-<!ATTLIST %factorial.qname;    
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % carithop1or2ary          
-     "%minus.qname;" >
-
-<!ELEMENT %minus.qname;  EMPTY >
-<!ATTLIST %minus.qname;     
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % carithop2ary             
-     "%quotient.qname; | %divide.qname; | %power.qname; | %rem.qname;" >
-
-<!ELEMENT %quotient.qname;  EMPTY >
-<!ATTLIST %quotient.qname;       
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %divide.qname;  EMPTY >
-<!ATTLIST %divide.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %power.qname;  EMPTY >
-<!ATTLIST %power.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %rem.qname;  EMPTY >
-<!ATTLIST %rem.qname;       
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % carithopnary             
-     "%plus.qname; | %times.qname; | %max.qname; 
-      | %min.qname; | %gcd.qname; | %lcm.qname;" >
-
-<!ELEMENT %plus.qname;  EMPTY >
-<!ATTLIST %plus.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %max.qname;  EMPTY >
-<!ATTLIST %max.qname;    
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %min.qname;  EMPTY >
-<!ATTLIST %min.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %times.qname;  EMPTY >
-<!ATTLIST %times.qname;      
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %gcd.qname;  EMPTY >
-<!ATTLIST %gcd.qname;    
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %lcm.qname;  EMPTY >
-<!ATTLIST %lcm.qname;    
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % carithoproot             
-     "%root.qname;" >
-
-<!ELEMENT %root.qname;  EMPTY >
-<!ATTLIST %root.qname;     
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % clogicopquant            
-     "%exists.qname; | %forall.qname;" >
-
-<!ELEMENT %exists.qname;  EMPTY >
-<!ATTLIST %exists.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %forall.qname;  EMPTY >
-<!ATTLIST %forall.qname;     
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % clogicopnary             
-     "%and.qname; | %or.qname; | %xor.qname;" >
-
-<!ELEMENT %and.qname;  EMPTY >
-<!ATTLIST %and.qname;    
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %or.qname;  EMPTY >
-<!ATTLIST %or.qname;    
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %xor.qname;  EMPTY >
-<!ATTLIST %xor.qname;    
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % clogicop1ary             
-     "%not.qname;" >
-
-<!ELEMENT %not.qname;  EMPTY >
-<!ATTLIST %not.qname;    
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % clogicop2ary             
-     "%implies.qname;" >
-
-<!ELEMENT %implies.qname;  EMPTY >
-<!ATTLIST %implies.qname;    
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % ccalcop                  
-     "%log.qname; | %int.qname; | %diff.qname; | %partialdiff.qname; |
-      %divergence.qname; | %grad.qname; | %curl.qname; | %laplacian.qname;" >
-
-<!ELEMENT %divergence.qname;  EMPTY >
-<!ATTLIST %divergence.qname;     
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %grad.qname;  EMPTY >
-<!ATTLIST %grad.qname;  
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %curl.qname;  EMPTY >
-<!ATTLIST %curl.qname;     
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %laplacian.qname;  EMPTY >
-<!ATTLIST %laplacian.qname;     
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %log.qname;  EMPTY >
-<!ATTLIST %log.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %int.qname;  EMPTY >
-<!ATTLIST %int.qname;    
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %diff.qname;  EMPTY >
-<!ATTLIST %diff.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %partialdiff.qname;  EMPTY >
-<!ATTLIST %partialdiff.qname;  
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % ccalcop1ary              
-     "%ln.qname;" >
-
-<!ELEMENT %ln.qname;  EMPTY >
-<!ATTLIST %ln.qname;   
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % csetop1ary               
-     "%card.qname;" >
-
-<!ELEMENT %card.qname;  EMPTY >
-<!ATTLIST %card.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % csetop2ary               
-     "%setdiff.qname;" >
-
-<!ELEMENT %setdiff.qname;  EMPTY >
-<!ATTLIST %setdiff.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % csetopnary               
-     "%union.qname; | %intersect.qname;" >
-
-<!ELEMENT %union.qname;  EMPTY >
-<!ATTLIST %union.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %intersect.qname;  EMPTY >
-<!ATTLIST %intersect.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % cseqop                   
-     "%sum.qname; | %product.qname; | %limit.qname;" >
-
-<!ELEMENT %sum.qname;  EMPTY >
-<!ATTLIST %sum.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %product.qname;  EMPTY >
-<!ATTLIST %product.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %limit.qname;  EMPTY >
-<!ATTLIST %limit.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % ctrigop                  
-     "%sin.qname; | %cos.qname; | %tan.qname; 
-      | %sec.qname; | %csc.qname; | %cot.qname; 
-      | %sinh.qname; | %cosh.qname; | %tanh.qname; 
-      | %sech.qname; | %csch.qname; | %coth.qname; 
-      | %arcsin.qname; | %arccos.qname; | %arctan.qname;
-      | %arccosh.qname; | %arccot.qname; | %arccoth.qname;
-      | %arccsc.qname; | %arccsch.qname; | %arcsec.qname;
-      | %arcsech.qname; | %arcsinh.qname; | %arctanh.qname;
-      " >
-
-<!ELEMENT %sin.qname;  EMPTY >
-<!ATTLIST %sin.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %cos.qname;  EMPTY >
-<!ATTLIST %cos.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %tan.qname;  EMPTY >
-<!ATTLIST %tan.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %sec.qname;  EMPTY >
-<!ATTLIST %sec.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %csc.qname;  EMPTY >
-<!ATTLIST %csc.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %cot.qname;  EMPTY >
-<!ATTLIST %cot.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %sinh.qname;  EMPTY >
-<!ATTLIST %sinh.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %cosh.qname;  EMPTY >
-<!ATTLIST %cosh.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %tanh.qname;  EMPTY >
-<!ATTLIST %tanh.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %sech.qname;  EMPTY >
-<!ATTLIST %sech.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %csch.qname;  EMPTY >
-<!ATTLIST %csch.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %coth.qname;  EMPTY >
-<!ATTLIST %coth.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %arcsin.qname;  EMPTY >
-<!ATTLIST %arcsin.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %arccos.qname;  EMPTY >
-<!ATTLIST %arccos.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %arctan.qname;  EMPTY >
-<!ATTLIST %arctan.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %arccosh.qname;  EMPTY >
-<!ATTLIST %arccosh.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-
-<!ELEMENT %arccot.qname;  EMPTY >
-<!ATTLIST %arccot.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %arccoth.qname;  EMPTY >
-<!ATTLIST %arccoth.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-
-<!ELEMENT %arccsc.qname;  EMPTY >
-<!ATTLIST %arccsc.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %arccsch.qname;  EMPTY >
-<!ATTLIST %arccsch.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %arcsec.qname;  EMPTY >
-<!ATTLIST %arcsec.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %arcsech.qname;  EMPTY >
-<!ATTLIST %arcsech.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %arcsinh.qname;  EMPTY >
-<!ATTLIST %arcsinh.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %arctanh.qname;  EMPTY >
-<!ATTLIST %arctanh.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-
-
-<!ENTITY % cstatopnary              
-     "%mean.qname; | %sdev.qname; |
-      %variance.qname; | %median.qname; |
-      %mode.qname;" >
-
-<!ELEMENT %mean.qname;  EMPTY >
-<!ATTLIST %mean.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %sdev.qname;  EMPTY >
-<!ATTLIST %sdev.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %variance.qname;  EMPTY >
-<!ATTLIST %variance.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %median.qname;  EMPTY >
-<!ATTLIST %median.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %mode.qname;  EMPTY >
-<!ATTLIST %mode.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % cstatopmoment            
-     "%moment.qname;" >
-
-<!ELEMENT %moment.qname;  EMPTY >
-<!ATTLIST %moment.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % clalgop1ary              
-     "%determinant.qname; |
-      %transpose.qname;" >
-
-<!ELEMENT %determinant.qname;  EMPTY >
-<!ATTLIST %determinant.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %transpose.qname;  EMPTY >
-<!ATTLIST %transpose.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % clalgop2ary              
-     "%vectorproduct.qname; 
-      | %scalarproduct.qname; 
-      | %outerproduct.qname;" >
-
-<!ELEMENT %vectorproduct.qname;  EMPTY >
-<!ATTLIST %vectorproduct.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %scalarproduct.qname;  EMPTY >
-<!ATTLIST %scalarproduct.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %outerproduct.qname;  EMPTY >
-<!ATTLIST %outerproduct.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % clalgopnary              
-     "%selector.qname;" >
-
-<!ELEMENT %selector.qname;  EMPTY >
-<!ATTLIST %selector.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!-- Content elements: relations -->
-
-<!ENTITY % cgenrel2ary             
-     "%neq.qname;" >
-
-<!ELEMENT %neq.qname;  EMPTY >
-<!ATTLIST %neq.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % cgenrelnary              
-     "%eq.qname; | %leq.qname; | %lt.qname; | %geq.qname; 
-      | %gt.qname;| %equivalent.qname; | %approx.qname;" >
-
-<!ELEMENT %eq.qname;  EMPTY >
-<!ATTLIST %eq.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %equivalent.qname;  EMPTY >
-<!ATTLIST %equivalent.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %approx.qname;  EMPTY >
-<!ATTLIST %approx.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %gt.qname;  EMPTY >
-<!ATTLIST %gt.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %lt.qname;  EMPTY >
-<!ATTLIST %lt.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %geq.qname;  EMPTY >
-<!ATTLIST %geq.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %leq.qname;  EMPTY >
-<!ATTLIST %leq.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % csetrel2ary              
-     "%in.qname; | %notin.qname; | %notsubset.qname; | %notprsubset.qname;" >
-
-<!ELEMENT %in.qname;  EMPTY >
-<!ATTLIST %in.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %notin.qname;  EMPTY >
-<!ATTLIST %notin.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %notsubset.qname;  EMPTY >
-<!ATTLIST %notsubset.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %notprsubset.qname;  EMPTY >
-<!ATTLIST %notprsubset.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % csetrelnary       
-     "%subset.qname; | %prsubset.qname;" >
-
-<!ELEMENT %subset.qname;  EMPTY >
-<!ATTLIST %subset.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ELEMENT %prsubset.qname;  EMPTY >
-<!ATTLIST %prsubset.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
->
-
-<!ENTITY % cseqrel2ary              
-     "%tendsto.qname;" >
-
-<!ELEMENT %tendsto.qname;  EMPTY >
-<!ATTLIST %tendsto.qname;
-      %MATHML.Common.attrib;
-      %att-definition;
-      %att-encoding;
-      %att-type;
->
-
-<!-- Content elements: quantifiers -->
-
-<!ENTITY % cquantifier            
-     "%lowlimit.qname; | %uplimit.qname; | %bvar.qname; 
-      | %degree.qname; | %logbase.qname;" >
-
-<!ATTLIST %lowlimit.qname;
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %uplimit.qname;
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %bvar.qname;
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %degree.qname;
-      %MATHML.Common.attrib;
->
-
-<!ATTLIST %logbase.qname;
-      %MATHML.Common.attrib;
->
-
-<!-- Operator groups -->
-
-<!ENTITY % cop1ary                  
-     "%cfuncop1ary; | %carithop1ary; | %clogicop1ary; |
-      %ccalcop1ary; | %ctrigop; | %clalgop1ary; |
-      %csetop1ary;" >
-
-<!ENTITY % cop2ary                  
-     "%carithop2ary; | %clogicop2ary;| %clalgop2ary; | %csetop2ary;" >
-
-<!ENTITY % copnary                  
-     "%cfuncopnary; | %carithopnary; | %clogicopnary; |
-      %csetopnary; | %cstatopnary; | %clalgopnary;" >
-
-<!ENTITY % copmisc                  
-     "%carithoproot; | %carithop1or2ary; | %ccalcop; |
-      %cseqop; | %cstatopmoment; | %clogicopquant;" >
-
-<!-- Relation groups -->
-
-<!ENTITY % crel2ary                 
-     "%cgenrel2ary; | %csetrel2ary; | %cseqrel2ary;" >
-
-<!ENTITY % crelnary                 
-     "%cgenrelnary; | %csetrelnary;" >
-
-<!-- Content constructs: all -->
-
-<!ENTITY % Content                  
-     "%ctoken; | %cspecial; | %cother; | %csemantics; | %c0ary;
-      | %cconstructor; | %cquantifier; | %cop1ary; | %cop2ary; 
-      | %copnary; |%copmisc; | %crel2ary; | %crelnary;" >
-
-<!-- Content constructs for substitution in presentation structures -->
-
-<!ENTITY % ContInPres               
-     "%ci.qname; |%csymbol.qname;| %cn.qname;|
-      %apply.qname; | %fn.qname; |
-      %lambda.qname; | %reln.qname; |
-      %interval.qname; | %list.qname; |
-      %matrix.qname; | %matrixrow.qname; |
-      %set.qname; | %vector.qname; |
-      %semantics.qname; |%declare.qname;" >
-
-<!-- ............................................................. -->
-<!-- Recursive definition for content of expressions. Include
-     presentation constructs at lowest level so presentation
-     layout schemata hold presentation or content elements.
-     Include content constructs at lowest level so content
-     elements hold PCDATA or presentation elements at leaf
-     level (for permitted substitutable elements in context)
--->
-
-<!ENTITY % ContentExpression        
-     "(%Content; | %PresInCont;)*" >
-<!ENTITY % PresExpression      
-     "(%Presentation; | %ContInPres;)*" >
-<!ENTITY % MathExpression           
-     "(%PresInCont; | %ContInPres;)*" >
-
-<!-- PCDATA or MathML character elements -->
-<!ENTITY % MathMLCharacters         
-     "#PCDATA | %mchar.qname; | %mglyph.qname; " >
-
-<!-- Content elements: tokens                       -->
-<!-- (may contain embedded presentation constructs) -->
-
-<!ELEMENT %ci.qname;                 (%MathMLCharacters; | %PresInCont;)* >
-<!ELEMENT %csymbol.qname;            (%MathMLCharacters; | %PresInCont;)* >
-<!ELEMENT %cn.qname;                 (%MathMLCharacters; | %sep.qname; | %PresInCont;)* >
-
-<!-- Content elements: special -->
-
-<!ELEMENT %apply.qname;              (%ContentExpression;) >
-<!ELEMENT %reln.qname;               (%ContentExpression;) >
-<!ELEMENT %lambda.qname;             (%ContentExpression;) >
-
-<!-- Content elements: other -->
-
-<!ELEMENT %condition.qname;          (%ContentExpression;) >
-<!ELEMENT %declare.qname;            (%ContentExpression;) >
-<!-- HELM: added the content element type --> 
-<!ELEMENT %type.qname;               (%ContentExpression;) >
-
-<!-- Content elements: semantics -->
-
-<!ELEMENT %semantics.qname;          (%ContentExpression;) >
-<!ENTITY % Annotation.content  "( #PCDATA )" >
-<!ELEMENT %annotation.qname;         %Annotation.content; >
-
-<!ENTITY % Annotation-xml.content "ANY" >
-<!ELEMENT %annotation-xml.qname;     %Annotation-xml.content; >
-
-<!-- Content elements: constructors -->
-
-<!ELEMENT %interval.qname;           (%ContentExpression;) >
-<!ELEMENT %set.qname;                (%ContentExpression;) >
-<!ELEMENT %list.qname;               (%ContentExpression;) >
-<!ELEMENT %vector.qname;             (%ContentExpression;) >
-<!ELEMENT %matrix.qname;             (%ContentExpression;) >
-<!ELEMENT %matrixrow.qname;          (%ContentExpression;) >
-
-<!-- Content elements: operator (user-defined) -->
-
-<!ELEMENT %fn.qname;                 (%ContentExpression;) >
-
-<!-- Content elements: quantifiers -->
-
-<!ELEMENT %lowlimit.qname;           (%ContentExpression;) >
-<!ELEMENT %uplimit.qname;            (%ContentExpression;) >
-<!ELEMENT %bvar.qname;               (%ContentExpression;) >
-<!ELEMENT %degree.qname;             (%ContentExpression;) >
-<!ELEMENT %logbase.qname;            (%ContentExpression;) >
-
-<!-- ............................................................. -->
-<!-- Presentation layout schemata contain tokens,
-     layout and content schemata.
--->
-
-<!ELEMENT %mstyle.qname;             (%PresExpression;) >
-<!ELEMENT %merror.qname;             (%PresExpression;) >
-<!ELEMENT %mphantom.qname;           (%PresExpression;) >
-<!ELEMENT %mrow.qname;               (%PresExpression;) >
-<!ELEMENT %mfrac.qname;              (%PresExpression;) >
-<!ELEMENT %msqrt.qname;              (%PresExpression;) >
-<!ELEMENT %menclose.qname;           (%PresExpression;) >
-<!ELEMENT %mroot.qname;              (%PresExpression;) >
-<!ELEMENT %msub.qname;               (%PresExpression;) >
-<!ELEMENT %msup.qname;               (%PresExpression;) >
-<!ELEMENT %msubsup.qname;            (%PresExpression;) >
-<!ELEMENT %mmultiscripts.qname;      (%PresExpression;) >
-<!ELEMENT %munder.qname;             (%PresExpression;) >
-<!ELEMENT %mover.qname;              (%PresExpression;) >
-<!ELEMENT %munderover.qname;         (%PresExpression;) >
-<!ELEMENT %mtable.qname;             (%PresExpression;) >
-<!ELEMENT %mtr.qname;                (%PresExpression;) >
-<!ELEMENT %mlabeledtr.qname;         (%PresExpression;) >
-<!ELEMENT %mtd.qname;                (%PresExpression;) >
-<!ELEMENT %maction.qname;            (%PresExpression;) >
-<!ELEMENT %mfenced.qname;            (%PresExpression;) >
-<!ELEMENT %mpadded.qname;            (%PresExpression;) >
-
-<!-- Presentation elements contain PCDATA or malignmark constructs. -->
-
-<!ELEMENT %mi.qname;                 (%MathMLCharacters; |
-      %malignmark.qname;)* >
-<!ELEMENT %mn.qname;                 (%MathMLCharacters; |
-      %malignmark.qname;)* >
-<!ELEMENT %mo.qname;                 (%MathMLCharacters; |
-      %malignmark.qname;)* >
-<!ELEMENT %mtext.qname;              (%MathMLCharacters; |
-      %malignmark.qname;)* >
-<!ELEMENT %ms.qname;                 (%MathMLCharacters; |
-      %malignmark.qname;)* >
-
-<!-- Browser interface definition  ............................... -->
-
-<!-- Attributes for top-level element "math" -->
-
-<!ENTITY % att-macros               
-     "macros       CDATA                    #IMPLIED" >
-<!ENTITY % att-mode                 
-     "mode         CDATA                    #IMPLIED" >
-<!ENTITY % att-display                
-     "display      CDATA                    #IMPLIED" >
-
-<!ENTITY % att-topinfo          
-     "%MATHML.Common.attrib;
-      %att-macros;
-      %att-mode;
-      %att-display;" >
-
-<!-- Attributes for browser interface element -->
-
-<!ENTITY % att-baseline             
-     "baseline     CDATA                    #IMPLIED" >
-<!ENTITY % att-overflow            
-     "overflow  ( scroll | elide | truncate | scale ) 'scroll'" >
-<!ENTITY % att-altimg               
-     "altimg       CDATA                    #IMPLIED" >
-<!ENTITY % att-alttext           
-     "alttext      CDATA                    #IMPLIED" >
-
-<!ENTITY % att-browif           
-     "%att-type;
-      %att-name;
-      %att-height;
-      %att-width;
-      %att-baseline;
-      %att-overflow;
-      %att-altimg;
-      %att-alttext;" >
-
-<!-- ............................................................. -->
-<!-- The top-level element "math" contains MathML encoded
-     mathematics. The "math" element has the browser info
-     attributes iff it is also the browser interface element.
--->
-
-<!ELEMENT %math.qname;               (%MathExpression;) >
-
-<!ATTLIST %math.qname;
-      %att-topinfo;
-      %att-browif; >
-
-<!-- MathML Character Entities .............................................. -->
-<!ENTITY % mathml-charent.module "INCLUDE" >
-<![%mathml-charent.module;[
-<!-- Entity sets from ISO Technical Report 9573-13 ..... -->
-
-<!ENTITY % ent-isoamsa
-      PUBLIC "-//W3C//ENTITIES Added Math Symbols: Arrow Relations for MathML 2.0//EN"
-             "isoamsa.ent" >
-%ent-isoamsa;
-
-<!ENTITY % ent-isoamsb
-      PUBLIC "-//W3C//ENTITIES Added Math Symbols: Binary Operators for MathML 2.0//EN"
-             "isoamsb.ent" >
-%ent-isoamsb;
-
-<!ENTITY % ent-isoamsc
-      PUBLIC "-//W3C//ENTITIES Added Math Symbols: Delimiters for MathML 2.0//EN"
-             "isoamsc.ent" >
-%ent-isoamsc;
-
-<!ENTITY % ent-isoamsn
-      PUBLIC "-//W3C//ENTITIES Added Math Symbols: Negated Relations for MathML 2.0//EN"
-             "isoamsn.ent" >
-%ent-isoamsn;
-
-<!ENTITY % ent-isoamso
-      PUBLIC "-//W3C//ENTITIES Added Math Symbols: Ordinary for MathML 2.0//EN"
-             "isoamso.ent" >
-%ent-isoamso;
-
-<!ENTITY % ent-isoamsr
-      PUBLIC "-//W3C//ENTITIES Added Math Symbols: Relations for MathML 2.0//EN"
-             "isoamsr.ent" >
-%ent-isoamsr;
-
-<!ENTITY % ent-isogrk3
-      PUBLIC "-//W3C//ENTITIES Greek Symbols for MathML 2.0//EN"
-             "isogrk3.ent" >
-%ent-isogrk3;
-
-<!ENTITY % ent-isomfrk
-      PUBLIC "-//W3C//ENTITIES Math Alphabets: Fraktur for MathML 2.0//EN"
-             "isomfrk.ent" >
-%ent-isomfrk;
-
-<!ENTITY % ent-isomopf
-      PUBLIC "-//W3C//ENTITIES Math Alphabets: Open Face for MathML 2.0//EN"
-             "isomopf.ent" >
-%ent-isomopf;
-
-<!ENTITY % ent-isomscr
-      PUBLIC "-//W3C//ENTITIES Math Alphabets: Script for MathML 2.0//EN"
-             "isomscr.ent" >
-%ent-isomscr;
-
-<!ENTITY % ent-isotech
-      PUBLIC "-//W3C//ENTITIES General Technical for MathML 2.0//EN"
-             "isotech.ent" >
-%ent-isotech;
-
-<!-- Entity sets from informative annex to ISO 8879:1986 (SGML) ....... -->
-
-<!ENTITY % ent-isobox
-      PUBLIC "-//W3C//ENTITIES Box and Line Drawing for MathML 2.0//EN"
-             "isobox.ent" >
-%ent-isobox;
-
-<!ENTITY % ent-isocyr1
-      PUBLIC "-//W3C//ENTITIES Russian Cyrillic for MathML 2.0//EN"
-             "isocyr1.ent" >
-%ent-isocyr1;
-
-<!ENTITY % ent-isocyr2
-      PUBLIC "-//W3C//ENTITIES Non-Russian Cyrillic for MathML 2.0//EN"
-             "isocyr2.ent" >
-%ent-isocyr2;
-
-<!ENTITY % ent-isodia
-      PUBLIC "-//W3C//ENTITIES Diacritical Marks for MathML 2.0//EN"
-             "isodia.ent" >
-%ent-isodia;
-
-<!ENTITY % ent-isolat1
-      PUBLIC "-//W3C//ENTITIES Added Latin 1 for MathML 2.0//EN"
-             "isolat1.ent" >
-%ent-isolat1;
-
-<!ENTITY % ent-isolat2
-      PUBLIC "-//W3C//ENTITIES Added Latin 2 for MathML 2.0//EN"
-             "isolat2.ent" >
-%ent-isolat2;
-
-<!ENTITY % ent-isonum
-      PUBLIC "-//W3C//ENTITIES Numeric and Special Graphic for MathML 2.0//EN"
-             "isonum.ent" >
-%ent-isonum;
-
-<!ENTITY % ent-isopub
-      PUBLIC "-//W3C//ENTITIES Publishing for MathML 2.0//EN"
-             "isopub.ent" >
-%ent-isopub;
-
-<!-- New characters defined by MathML ............................ -->
-
-<!ENTITY % ent-mmlextra
-      PUBLIC "-//W3C//ENTITIES Extra for MathML 2.0//EN"
-             "mmlextra.ent" >
-%ent-mmlextra;
-
-<!-- MathML aliases for characters defined above ................. -->
-
-<!ENTITY % ent-mmlalias
-      PUBLIC "-//W3C//ENTITIES Aiases for MathML 2.0//EN"
-             "mmlalias.ent" >
-%ent-mmlalias;
-
-<!-- end of MathML Character Entity section -->]]>
-
-<!-- Revision History:
-
-       Initial draft (syntax = XML) 1997-05-09
-          Stephen Buswell
-       Revised 1997-05-14
-          Robert Miner
-       Revised 1997-06-29 and 1997-07-02
-          Stephen Buswell
-       Revised 1997-12-15
-          Stephen Buswell
-       Revised 1998-02-08
-          Stephen Buswell
-       Revised 1998-04-04
-          Stephen Buswell
-       Entities and small revisions 1999-02-21
-          David Carlisle
-       Added attribute definitionURL to ci and cn 1999-10-11
-          Nico Poppelier
-       Additions for MathML 2  1999-12-16
-          David Carlisle
-       Namespace support 2000-01-14
-          David Carlisle
-       XHTML Compatibility 2000-02-23
-          Murray Altheim
-       New content elements 2000-03-26
-          David Carlisle
-
--->
-
-<!-- end of MathML 2.0 DTD  ................................................ -->
-<!-- ....................................................................... -->
-
diff --git a/helm/dtd/maththeory.dtd b/helm/dtd/maththeory.dtd
deleted file mode 100644 (file)
index c424b03..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--*****************************************************************-->
-<!-- DTD FOR THEORY OBJECTS AT LEVEL OF CIC XML FILES:               -->
-<!-- First draft: May 10 2000, Claudio Sacerdoti Coen, Irene Schena  -->
-<!-- Revised: February 2001, Claudio Sacerdoti Coen                  -->
-<!-- Revised: May 01 2001, Claudio Sacerdoti Coen                    -->
-<!--*****************************************************************-->
-
-
-<!--*****************************************************************-->
-<!-- Note: the intended meaning for this markup is to be embedded    -->
-<!-- into other types of markup (e.g. XHTML or DocBook). Hence, the  -->
-<!-- DTD is only "indicative" and no root element is provided.       -->
-<!--*****************************************************************-->
-
-<!ENTITY % mathstructure
-  '(ht:AXIOM|ht:DEFINITION|ht:THEOREM|ht:VARIABLE|ht:SECTION|ht:MUTUAL)*'>
-
-<!ELEMENT ht:OBJECT EMPTY>
-<!ATTLIST ht:OBJECT
-          uri CDATA #REQUIRED
-          mode (typeonly|embed|linkonly) #REQUIRED>
-
-<!ELEMENT ht:AXIOM EMPTY>
-<!ATTLIST ht:AXIOM
-          uri CDATA #REQUIRED
-          as (Axiom|Declaration) #REQUIRED>
-
-<!ELEMENT ht:DEFINITION EMPTY>
-<!ATTLIST ht:DEFINITION
-          uri CDATA #REQUIRED
-          as (Definition|Inductive|CoInductive|Record) #REQUIRED>
-
-<!ELEMENT ht:THEOREM EMPTY>
-<!ATTLIST ht:THEOREM
-          uri CDATA #REQUIRED
-          as (Theorem|Lemma|Corollary|Fact|Remark) #REQUIRED>
-
-<!ELEMENT ht:VARIABLE EMPTY>
-<!ATTLIST ht:VARIABLE
-          uri CDATA #REQUIRED
-          as (Assumption|Hypothesis|LocalDefinition) #REQUIRED>
-
-<!ELEMENT ht:SECTION (%mathstructure;)>
-<!ATTLIST ht:SECTION
-          uri CDATA #REQUIRED>
-
-(*CSC: In the case of a set of mutual (Co)Inductive DEFINITIONS, *)
-(*CSC: all the entries inside ht:MUTUAL have the same URI ;-|    *)
-<!ELEMENT ht:MUTUAL (ht:DEFINITION,ht:DEFINITION+)>
diff --git a/helm/dtd/mmlalias.ent b/helm/dtd/mmlalias.ent
deleted file mode 100644 (file)
index f5901b3..0000000
+++ /dev/null
@@ -1,529 +0,0 @@
-
-<!--
-     File mmlalias.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
--->
-
-<!ENTITY angle            "&#x02220;" ><!--alias ISOAMSO ang -->
-<!ENTITY approx           "&#x02248;" ><!--alias ISOTECH ap -->
-<!ENTITY approxeq         "&#x0224A;" ><!--alias ISOAMSR ape -->
-<!ENTITY backcong         "&#x0224C;" ><!--alias ISOAMSR bcong -->
-<!ENTITY backepsilon      "&#x0213C;" ><!--alias ISOAMSR bepsi -->
-<!ENTITY backprime        "&#x02035;" ><!--alias ISOAMSO bprime -->
-<!ENTITY backsim          "&#x0223D;" ><!--alias ISOAMSR bsim -->
-<!ENTITY backsimeq        "&#x022CD;" ><!--alias ISOAMSR bsime -->
-<!ENTITY Backslash        "&#x02216;" ><!--alias ISOAMSB setmn -->
-<!ENTITY barwedge         "&#x022BC;" ><!--alias ISOAMSB barwed -->
-<!ENTITY because          "&#x02235;" ><!--alias ISOTECH becaus -->
-<!ENTITY Because          "&#x02235;" ><!--alias ISOTECH becaus -->
-<!ENTITY Bernoullis       "&#x0212C;" ><!--alias ISOTECH bernou -->
-<!ENTITY between          "&#x0226C;" ><!--alias ISOAMSR twixt -->
-<!ENTITY bigcap           "&#x022C2;" ><!--alias ISOAMSB xcap -->
-<!ENTITY bigcirc          "&#x025EF;" ><!--alias ISOAMSB xcirc -->
-<!ENTITY bigcup           "&#x022C3;" ><!--alias ISOAMSB xcup -->
-<!ENTITY bigodot          "&#x02299;" ><!--alias ISOAMSB xodot -->
-<!ENTITY bigoplus         "&#x02295;" ><!--alias ISOAMSB xoplus -->
-<!ENTITY bigotimes        "&#x02297;" ><!--alias ISOAMSB xotime -->
-<!ENTITY bigsqcup         "&#x02294;" ><!--alias ISOAMSB xsqcup -->
-<!ENTITY bigstar          "&#x02605;" ><!--ISOPUB    starf  -->
-<!ENTITY bigtriangledown  "&#x025BD;" ><!--alias ISOAMSB xdtri -->
-<!ENTITY bigtriangleup    "&#x025B3;" ><!--alias ISOAMSB xutri -->
-<!ENTITY biguplus         "&#x0228E;" ><!--alias ISOAMSB xuplus -->
-<!ENTITY bigvee           "&#x022C1;" ><!--alias ISOAMSB xvee -->
-<!ENTITY bigwedge         "&#x022C0;" ><!--alias ISOAMSB xwedge -->
-<!ENTITY bkarow           "&#x0290D;" ><!--alias ISOAMSA rbarr -->
-<!ENTITY blacklozenge     "&#x029EB;" ><!--alias ISOPUB lozf -->
-<!ENTITY blacksquare      "&#x025AA;" ><!--ISOTECH  squarf  -->
-<!ENTITY blacktriangle    "&#x025B4;" ><!--alias ISOPUB utrif -->
-<!ENTITY blacktriangledown "&#x025BE;" ><!--alias ISOPUB dtrif -->
-<!ENTITY blacktriangleleft "&#x025C2;" ><!--alias ISOPUB ltrif -->
-<!ENTITY blacktriangleright "&#x025B8;" ><!--alias ISOPUB rtrif -->
-<!ENTITY bot              "&#x022A5;" ><!--alias ISOTECH bottom -->
-<!ENTITY boxminus         "&#x0229F;" ><!--alias ISOAMSB minusb -->
-<!ENTITY boxplus          "&#x0229E;" ><!--alias ISOAMSB plusb -->
-<!ENTITY boxtimes         "&#x022A0;" ><!--alias ISOAMSB timesb -->
-<!ENTITY Breve            "&#x002D8;" ><!--alias ISODIA breve -->
-<!ENTITY bullet           "&#x02022;" ><!--alias ISOPUB bull -->
-<!ENTITY bumpeq           "&#x0224F;" ><!--alias ISOAMSR bumpe -->
-<!ENTITY Bumpeq           "&#x0224E;" ><!--alias ISOAMSR bump -->
-<!ENTITY Cedilla          "&#x000B8;" ><!--alias ISODIA cedil -->
-<!ENTITY centerdot        "&#x000B7;" ><!--alias ISONUM middot -->
-<!ENTITY CenterDot        "&#x000B7;" ><!--alias ISONUM middot -->
-<!ENTITY checkmark        "&#x02713;" ><!--alias ISOPUB check -->
-<!ENTITY circeq           "&#x02257;" ><!--alias ISOAMSR cire -->
-<!ENTITY circlearrowleft  "&#x021BA;" ><!--alias ISOAMSA olarr -->
-<!ENTITY circlearrowright "&#x021BB;" ><!--alias ISOAMSA orarr -->
-<!ENTITY circledast       "&#x0229B;" ><!--alias ISOAMSB oast -->
-<!ENTITY circledcirc      "&#x0229A;" ><!--alias ISOAMSB ocir -->
-<!ENTITY circleddash      "&#x0229D;" ><!--alias ISOAMSB odash -->
-<!ENTITY CircleDot        "&#x02299;" ><!--alias ISOAMSB odot -->
-<!ENTITY circledR         "&#x000AE;" ><!--alias ISONUM reg -->
-<!ENTITY circledS         "&#x024C8;" ><!--alias ISOAMSO oS -->
-<!ENTITY CircleMinus      "&#x02296;" ><!--alias ISOAMSB ominus -->
-<!ENTITY CirclePlus       "&#x02295;" ><!--alias ISOAMSB oplus -->
-<!ENTITY CircleTimes      "&#x02297;" ><!--alias ISOAMSB otimes -->
-<!ENTITY ClockwiseContourIntegral "&#x02232;" ><!--alias ISOTECH cwconint -->
-<!ENTITY CloseCurlyDoubleQuote "&#x0201D;" ><!--alias ISONUM rdquo -->
-<!ENTITY CloseCurlyQuote  "&#x02019;" ><!--alias ISONUM rsquo -->
-<!ENTITY clubsuit         "&#x02663;" ><!--ISOPUB    clubs  -->
-<!ENTITY coloneq          "&#x02254;" ><!--alias ISOAMSR colone -->
-<!ENTITY complement       "&#x02201;" ><!--alias ISOAMSO comp -->
-<!ENTITY Congruent        "&#x02261;" ><!--alias ISOTECH equiv -->
-<!ENTITY ContourIntegral  "&#x0222E;" ><!--alias ISOTECH conint -->
-<!ENTITY Coproduct        "&#x02210;" ><!--alias ISOAMSB coprod -->
-<!ENTITY CounterClockwiseContourIntegral "&#x02233;" ><!--alias ISOTECH awconint -->
-<!ENTITY CupCap           "&#x0224D;" ><!--alias ISOAMSR asymp -->
-<!ENTITY curlyeqprec      "&#x022DE;" ><!--alias ISOAMSR cuepr -->
-<!ENTITY curlyeqsucc      "&#x022DF;" ><!--alias ISOAMSR cuesc -->
-<!ENTITY curlyvee         "&#x022CE;" ><!--alias ISOAMSB cuvee -->
-<!ENTITY curlywedge       "&#x022CF;" ><!--alias ISOAMSB cuwed -->
-<!ENTITY curvearrowleft   "&#x021B6;" ><!--alias ISOAMSA cularr -->
-<!ENTITY curvearrowright  "&#x021B7;" ><!--alias ISOAMSA curarr -->
-<!ENTITY dbkarow          "&#x0290F;" ><!--alias ISOAMSA rBarr -->
-<!ENTITY ddagger          "&#x02021;" ><!--alias ISOPUB Dagger -->
-<!ENTITY ddotseq          "&#x02A77;" ><!--alias ISOAMSR eDDot -->
-<!ENTITY Del              "&#x02207;" ><!--alias ISOTECH nabla -->
-<!ENTITY DiacriticalAcute "&#x000B4;" ><!--alias ISODIA acute -->
-<!ENTITY DiacriticalDot   "&#x002D9;" ><!--alias ISODIA dot -->
-<!ENTITY DiacriticalDoubleAcute "&#x002DD;" ><!--alias ISODIA dblac -->
-<!ENTITY DiacriticalGrave "&#x00060;" ><!--alias ISODIA grave -->
-<!ENTITY DiacriticalTilde "&#x002DC;" ><!--alias ISODIA tilde -->
-<!ENTITY diamond          "&#x022C4;" ><!--alias ISOAMSB diam -->
-<!ENTITY Diamond          "&#x022C4;" ><!--alias ISOAMSB diam -->
-<!ENTITY diamondsuit      "&#x02666;" ><!--ISOPUB    diams  -->
-<!ENTITY digamma          "&#x003DC;" ><!--alias ISOGRK3 gammad -->
-<!ENTITY div              "&#x000F7;" ><!--alias ISONUM divide -->
-<!ENTITY divideontimes    "&#x022C7;" ><!--alias ISOAMSB divonx -->
-<!ENTITY doteq            "&#x02250;" ><!--alias ISOAMSR esdot -->
-<!ENTITY doteqdot         "&#x02251;" ><!--alias ISOAMSR eDot -->
-<!ENTITY DotEqual         "&#x02250;" ><!--alias ISOAMSR esdot -->
-<!ENTITY dotminus         "&#x02238;" ><!--alias ISOAMSB minusd -->
-<!ENTITY dotplus          "&#x02214;" ><!--alias ISOAMSB plusdo -->
-<!ENTITY dotsquare        "&#x022A1;" ><!--alias ISOAMSB sdotb -->
-<!ENTITY doublebarwedge   "&#x02306;" ><!--alias ISOAMSB Barwed -->
-<!ENTITY DoubleContourIntegral "&#x0222F;" ><!--alias ISOTECH Conint -->
-<!ENTITY DoubleDot        "&#x000A8;" ><!--alias ISODIA die -->
-<!ENTITY DoubleDownArrow  "&#x021D3;" ><!--alias ISOAMSA dArr -->
-<!ENTITY DoubleLeftArrow  "&#x021D0;" ><!--alias ISOTECH lArr -->
-<!ENTITY DoubleLeftRightArrow "&#x021D4;" ><!--alias ISOAMSA hArr -->
-<!ENTITY DoubleLeftTee    "&#x02AE4;" ><!--alias for  &Dashv;  -->
-<!ENTITY DoubleLongLeftArrow "&#x021D0;" ><!--alias ISOAMSA xlArr -->
-<!ENTITY DoubleLongLeftRightArrow "&#x021D4;" ><!--alias ISOAMSA xhArr -->
-<!ENTITY DoubleLongRightArrow "&#x021D2;" ><!--alias ISOAMSA xrArr -->
-<!ENTITY DoubleRightArrow "&#x021D2;" ><!--alias ISOTECH rArr -->
-<!ENTITY DoubleRightTee   "&#x022A8;" ><!--alias ISOAMSR vDash -->
-<!ENTITY DoubleUpArrow    "&#x021D1;" ><!--alias ISOAMSA uArr -->
-<!ENTITY DoubleUpDownArrow "&#x021D5;" ><!--alias ISOAMSA vArr -->
-<!ENTITY DoubleVerticalBar "&#x02225;" ><!--alias ISOTECH par -->
-<!ENTITY downarrow        "&#x02193;" ><!--alias ISONUM darr -->
-<!ENTITY Downarrow        "&#x021D3;" ><!--alias ISOAMSA dArr -->
-<!ENTITY DownArrow        "&#x02193;" ><!--alias ISONUM darr -->
-<!ENTITY DownArrowUpArrow "&#x021F5;" ><!--alias ISOAMSA duarr -->
-<!ENTITY downdownarrows   "&#x021CA;" ><!--alias ISOAMSA ddarr -->
-<!ENTITY downharpoonleft  "&#x021C3;" ><!--alias ISOAMSA dharl -->
-<!ENTITY downharpoonright "&#x021C2;" ><!--alias ISOAMSA dharr -->
-<!ENTITY DownLeftVector   "&#x021BD;" ><!--alias ISOAMSA lhard -->
-<!ENTITY DownRightVector  "&#x021C1;" ><!--alias ISOAMSA rhard -->
-<!ENTITY DownTee          "&#x022A4;" ><!--alias ISOTECH top -->
-<!ENTITY drbkarow         "&#x02910;" ><!--alias ISOAMSA RBarr -->
-<!ENTITY Element          "&#x02208;" ><!--alias ISOTECH isinv -->
-<!ENTITY emptyset         "&#x02205;&#x02063;" ><!--alias ISOAMSO empty -->
-<!ENTITY eqcirc           "&#x02256;" ><!--alias ISOAMSR ecir -->
-<!ENTITY eqcolon          "&#x02255;" ><!--alias ISOAMSR ecolon -->
-<!ENTITY eqsim            "&#x02242;" ><!--alias ISOAMSR esim -->
-<!ENTITY eqslantgtr       "&#x022DD;" ><!--alias ISOAMSR egs -->
-<!ENTITY eqslantless      "&#x022DC;" ><!--alias ISOAMSR els -->
-<!ENTITY EqualTilde       "&#x02242;" ><!--alias ISOAMSR esim -->
-<!ENTITY Equilibrium      "&#x021CC;" ><!--alias ISOAMSA rlhar -->
-<!ENTITY Exists           "&#x02203;" ><!--alias ISOTECH exist -->
-<!ENTITY fallingdotseq    "&#x02252;" ><!--alias ISOAMSR efDot -->
-<!ENTITY ForAll           "&#x02200;" ><!--alias ISOTECH forall -->
-<!ENTITY geq              "&#x02265;" ><!--alias ISOTECH ge -->
-<!ENTITY geqq             "&#x02267;" ><!--alias ISOAMSR gE -->
-<!ENTITY geqslant         "&#x02A7E;" ><!--alias ISOAMSR ges -->
-<!ENTITY gg               "&#x0226B;" ><!--alias ISOAMSR Gt -->
-<!ENTITY ggg              "&#x022D9;" ><!--alias ISOAMSR Gg -->
-<!ENTITY gnapprox         "&#x02A8A;" ><!--alias ISOAMSN gnap -->
-<!ENTITY gneq             "&#x02269;" ><!--alias ISOAMSN gne -->
-<!ENTITY gneqq            "&#x02269;" ><!--alias ISOAMSN gnE -->
-<!ENTITY GreaterEqual     "&#x02265;" ><!--alias ISOTECH ge -->
-<!ENTITY GreaterEqualLess "&#x022DB;" ><!--alias ISOAMSR gel -->
-<!ENTITY GreaterFullEqual "&#x02267;" ><!--alias ISOAMSR gE -->
-<!ENTITY GreaterLess      "&#x02277;" ><!--alias ISOAMSR gl -->
-<!ENTITY GreaterSlantEqual "&#x02A7E;" ><!--alias ISOAMSR ges -->
-<!ENTITY GreaterTilde     "&#x02273;" ><!--alias ISOAMSR gsim -->
-<!ENTITY gtrapprox        "&#x02273;" ><!--alias ISOAMSR gap -->
-<!ENTITY gtrdot           "&#x022D7;" ><!--alias ISOAMSR gtdot -->
-<!ENTITY gtreqless        "&#x022DB;" ><!--alias ISOAMSR gel -->
-<!ENTITY gtreqqless       "&#x022DB;" ><!--alias ISOAMSR gEl -->
-<!ENTITY gtrless          "&#x02277;" ><!--alias ISOAMSR gl -->
-<!ENTITY gtrsim           "&#x02273;" ><!--alias ISOAMSR gsim -->
-<!ENTITY gvertneqq        "&#x02269;&#x00338;" ><!--alias ISOAMSN gvnE -->
-<!ENTITY Hacek            "&#x002C7;" ><!--alias ISODIA caron -->
-<!ENTITY Hat              "&#x00302;" ><!--circumflex accent (circ in ISODIA) -->
-<!ENTITY hbar             "&#x0210F;" ><!--alias ISOAMSO plank -->
-<!ENTITY heartsuit        "&#x02661;" ><!--ISOPUB    hearts  -->
-<!ENTITY hksearow         "&#x02925;" ><!--alias ISOAMSA searhk -->
-<!ENTITY hkswarow         "&#x02926;" ><!--alias ISOAMSA swarhk -->
-<!ENTITY hookleftarrow    "&#x021A9;" ><!--alias ISOAMSA larrhk -->
-<!ENTITY hookrightarrow   "&#x021AA;" ><!--alias ISOAMSA rarrhk -->
-<!ENTITY hslash           "&#x0210F;" ><!--alias ISOAMSO plankv -->
-<!ENTITY HumpDownHump     "&#x0224E;" ><!--alias ISOAMSR bump -->
-<!ENTITY HumpEqual        "&#x0224F;" ><!--alias ISOAMSR bumpe -->
-<!ENTITY iiiint           "&#x02A0C;" ><!--alias ISOTECH qint -->
-<!ENTITY iiint            "&#x0222D;" ><!--alias ISOTECH tint -->
-<!ENTITY Im               "&#x02111;" ><!--alias ISOAMSO image -->
-<!ENTITY imagpart         "&#x02111;" ><!--alias ISOAMSO image -->
-<!ENTITY Implies          "&#x021D2;" ><!--alias ISOTECH rArr -->
-<!ENTITY in               "&#x02208;" ><!--ISOTECH   isin  -->
-<!ENTITY Integral         "&#x0222B;" ><!--alias ISOTECH int -->
-<!ENTITY intercal         "&#x022BA;" ><!--alias ISOAMSB intcal -->
-<!ENTITY Intersection     "&#x022C2;" ><!--alias ISOAMSB xcap -->
-<!ENTITY intprod          "&#x02A3C;" ><!--alias ISOAMSB iprod -->
-<!ENTITY langle           "&#x03008;" ><!--alias ISOTECH lang -->
-<!ENTITY lbrace           "&#x0007B;" ><!--alias ISONUM lcub -->
-<!ENTITY lbrack           "&#x0005B;" ><!--alias ISONUM lsqb -->
-<!ENTITY LeftAngleBracket "&#x03008;" ><!--alias ISOTECH lang -->
-<!ENTITY leftarrow        "&#x02190;" ><!--alias ISONUM larr -->
-<!ENTITY Leftarrow        "&#x021D0;" ><!--alias ISOTECH lArr -->
-<!ENTITY LeftArrow        "&#x02190;" ><!--alias ISONUM larr -->
-<!ENTITY LeftArrowRightArrow "&#x021C6;" ><!--alias ISOAMSA lrarr -->
-<!ENTITY leftarrowtail    "&#x021A2;" ><!--alias ISOAMSA larrtl -->
-<!ENTITY LeftCeiling      "&#x02308;" ><!--alias ISOAMSC lceil -->
-<!ENTITY LeftDoubleBracket "&#x0301A;" ><!--left double bracket delimiter -->
-<!ENTITY LeftDownVector   "&#x021C3;" ><!--alias ISOAMSA dharl -->
-<!ENTITY LeftFloor        "&#x0230A;" ><!--alias ISOAMSC lfloor -->
-<!ENTITY leftharpoondown  "&#x021BD;" ><!--alias ISOAMSA lhard -->
-<!ENTITY leftharpoonup    "&#x021BC;" ><!--alias ISOAMSA lharu -->
-<!ENTITY leftleftarrows   "&#x021C7;" ><!--alias ISOAMSA llarr -->
-<!ENTITY leftrightarrow   "&#x02194;" ><!--alias ISOAMSA harr -->
-<!ENTITY Leftrightarrow   "&#x021D4;" ><!--alias ISOAMSA hArr -->
-<!ENTITY LeftRightArrow   "&#x02194;" ><!--alias ISOAMSA harr -->
-<!ENTITY leftrightarrows  "&#x021C6;" ><!--alias ISOAMSA lrarr -->
-<!ENTITY leftrightharpoons "&#x021CB;" ><!--alias ISOAMSA lrhar -->
-<!ENTITY leftrightsquigarrow "&#x021AD;" ><!--alias ISOAMSA harrw -->
-<!ENTITY LeftTee          "&#x022A3;" ><!--alias ISOAMSR dashv -->
-<!ENTITY leftthreetimes   "&#x022CB;" ><!--alias ISOAMSB lthree -->
-<!ENTITY LeftTriangle     "&#x022B2;" ><!--alias ISOAMSR vltri -->
-<!ENTITY LeftTriangleEqual "&#x022B4;" ><!--alias ISOAMSR ltrie -->
-<!ENTITY LeftUpVector     "&#x021BF;" ><!--alias ISOAMSA uharl -->
-<!ENTITY LeftVector       "&#x021BC;" ><!--alias ISOAMSA lharu -->
-<!ENTITY leq              "&#x02264;" ><!--alias ISOTECH le -->
-<!ENTITY leqq             "&#x02266;" ><!--alias ISOAMSR lE -->
-<!ENTITY leqslant         "&#x02A7D;" ><!--alias ISOAMSR les -->
-<!ENTITY lessapprox       "&#x02272;" ><!--alias ISOAMSR lap -->
-<!ENTITY lessdot          "&#x022D6;" ><!--alias ISOAMSR ltdot -->
-<!ENTITY lesseqgtr        "&#x022DA;" ><!--alias ISOAMSR leg -->
-<!ENTITY lesseqqgtr       "&#x022DA;" ><!--alias ISOAMSR lEg -->
-<!ENTITY LessEqualGreater "&#x022DA;" ><!--alias ISOAMSR leg -->
-<!ENTITY LessFullEqual    "&#x02266;" ><!--alias ISOAMSR lE -->
-<!ENTITY LessGreater      "&#x02276;" ><!--alias ISOAMSR lg -->
-<!ENTITY lessgtr          "&#x02276;" ><!--alias ISOAMSR lg -->
-<!ENTITY lesssim          "&#x02272;" ><!--alias ISOAMSR lsim -->
-<!ENTITY LessSlantEqual   "&#x02A7D;" ><!--alias ISOAMSR les -->
-<!ENTITY LessTilde        "&#x02272;" ><!--alias ISOAMSR lsim -->
-<!ENTITY ll               "&#x0226A;" ><!--alias ISOAMSR Lt -->
-<!ENTITY llcorner         "&#x0231E;" ><!--alias ISOAMSC dlcorn -->
-<!ENTITY Lleftarrow       "&#x021DA;" ><!--alias ISOAMSA lAarr -->
-<!ENTITY lmoustache       "&#x02998;" ><!--alias ISOAMSC lmoust -->
-<!ENTITY lnapprox         "&#x02A89;" ><!--alias ISOAMSN lnap -->
-<!ENTITY lneq             "&#x02268;" ><!--alias ISOAMSN lne -->
-<!ENTITY lneqq            "&#x02268;" ><!--alias ISOAMSN lnE -->
-<!ENTITY longleftarrow    "&#x02190;" ><!--alias ISOAMSA xlarr -->
-<!ENTITY Longleftarrow    "&#x021D0;" ><!--alias ISOAMSA xlArr -->
-<!ENTITY LongLeftArrow    "&#x02190;" ><!--alias ISOAMSA xlarr -->
-<!ENTITY longleftrightarrow "&#x02194;" ><!--alias ISOAMSA xharr -->
-<!ENTITY Longleftrightarrow "&#x021D4;" ><!--alias ISOAMSA xhArr -->
-<!ENTITY LongLeftRightArrow "&#x02194;" ><!--alias ISOAMSA xharr -->
-<!ENTITY longmapsto       "&#x021A6;" ><!--alias ISOAMSA xmap -->
-<!ENTITY longrightarrow   "&#x02192;" ><!--alias ISOAMSA xrarr -->
-<!ENTITY Longrightarrow   "&#x021D2;" ><!--alias ISOAMSA xrArr -->
-<!ENTITY LongRightArrow   "&#x02192;" ><!--alias ISOAMSA xrarr -->
-<!ENTITY looparrowleft    "&#x021AB;" ><!--alias ISOAMSA larrlp -->
-<!ENTITY looparrowright   "&#x021AC;" ><!--alias ISOAMSA rarrlp -->
-<!ENTITY LowerLeftArrow   "&#x02199;" ><!--alias ISOAMSA swarr -->
-<!ENTITY LowerRightArrow  "&#x02198;" ><!--alias ISOAMSA searr -->
-<!ENTITY lozenge          "&#x025CA;" ><!--alias ISOPUB loz -->
-<!ENTITY lrcorner         "&#x0231F;" ><!--alias ISOAMSC drcorn -->
-<!ENTITY Lsh              "&#x021B0;" ><!--alias ISOAMSA lsh -->
-<!ENTITY lvertneqq        "&#x02268;&#x00338;" ><!--alias ISOAMSN lvnE -->
-<!ENTITY maltese          "&#x02720;" ><!--alias ISOPUB malt -->
-<!ENTITY mapsto           "&#x021A6;" ><!--alias ISOAMSA map -->
-<!ENTITY measuredangle    "&#x02221;" ><!--alias ISOAMSO angmsd -->
-<!ENTITY MinusPlus        "&#x02213;" ><!--alias ISOTECH mnplus -->
-<!ENTITY mp               "&#x02213;" ><!--alias ISOTECH mnplus -->
-<!ENTITY multimap         "&#x022B8;" ><!--alias ISOAMSA mumap -->
-<!ENTITY napprox          "&#x02249;" ><!--alias ISOAMSN nap -->
-<!ENTITY natural          "&#x0266E;" ><!--alias ISOPUB natur -->
-<!ENTITY nearrow          "&#x02197;" ><!--alias ISOAMSA nearr -->
-<!ENTITY NestedGreaterGreater "&#x0226B;" ><!--alias ISOAMSR Gt -->
-<!ENTITY NestedLessLess   "&#x0226A;" ><!--alias ISOAMSR Lt -->
-<!ENTITY nexists          "&#x02204;" ><!--alias ISOAMSO nexist -->
-<!ENTITY ngeq             "&#x02271;&#x020E5;" ><!--alias ISOAMSN nge -->
-<!ENTITY ngeqq            "&#x02271;" ><!--alias ISOAMSN ngE -->
-<!ENTITY ngeqslant        "&#x02271;" ><!--alias ISOAMSN nges -->
-<!ENTITY ngtr             "&#x0226F;" ><!--alias ISOAMSN ngt -->
-<!ENTITY nleftarrow       "&#x0219A;" ><!--alias ISOAMSA nlarr -->
-<!ENTITY nLeftarrow       "&#x021CD;" ><!--alias ISOAMSA nlArr -->
-<!ENTITY nleftrightarrow  "&#x021AE;" ><!--alias ISOAMSA nharr -->
-<!ENTITY nLeftrightarrow  "&#x021CE;" ><!--alias ISOAMSA nhArr -->
-<!ENTITY nleq             "&#x02270;&#x020E5;" ><!--alias ISOAMSN nle -->
-<!ENTITY nleqq            "&#x02270;" ><!--alias ISOAMSN nlE -->
-<!ENTITY nleqslant        "&#x02270;" ><!--alias ISOAMSN nles -->
-<!ENTITY nless            "&#x0226E;" ><!--alias ISOAMSN nlt -->
-<!ENTITY NotCongruent     "&#x02262;" ><!--alias ISOAMSN nequiv -->
-<!ENTITY NotDoubleVerticalBar "&#x02226;" ><!--alias ISOAMSN npar -->
-<!ENTITY NotElement       "&#x02209;" ><!--alias ISOTECH notin -->
-<!ENTITY NotEqual         "&#x02260;" ><!--alias ISOTECH ne -->
-<!ENTITY NotExists        "&#x02204;" ><!--alias ISOAMSO nexist -->
-<!ENTITY NotGreater       "&#x0226F;" ><!--alias ISOAMSN ngt -->
-<!ENTITY NotGreaterEqual  "&#x02271;&#x020E5;" ><!--alias ISOAMSN nge -->
-<!ENTITY NotGreaterFullEqual "&#x02270;" ><!--alias ISOAMSN nlE -->
-<!ENTITY NotGreaterGreater "&#x0226B;&#x00338;&#x02063;" ><!--alias ISOAMSN nGtv -->
-<!ENTITY NotGreaterLess   "&#x02279;" ><!--alias ISOAMSN ntvgl -->
-<!ENTITY NotGreaterSlantEqual "&#x02271;" ><!--alias ISOAMSN nges -->
-<!ENTITY NotGreaterTilde  "&#x02275;" ><!--alias ISOAMSN ngsim -->
-<!ENTITY NotLeftTriangle  "&#x022EA;" ><!--alias ISOAMSN nltri -->
-<!ENTITY NotLeftTriangleEqual "&#x022EC;" ><!--alias ISOAMSN nltrie -->
-<!ENTITY NotLess          "&#x0226E;" ><!--alias ISOAMSN nlt -->
-<!ENTITY NotLessEqual     "&#x02270;&#x020E5;" ><!--alias ISOAMSN nle -->
-<!ENTITY NotLessGreater   "&#x02278;" ><!--alias ISOAMSN ntvlg -->
-<!ENTITY NotLessLess      "&#x0226A;&#x00338;&#x02063;" ><!--alias ISOAMSN nLtv -->
-<!ENTITY NotLessSlantEqual "&#x02270;" ><!--alias ISOAMSN nles -->
-<!ENTITY NotLessTilde     "&#x02274;" ><!--alias ISOAMSN nlsim -->
-<!ENTITY NotPrecedes      "&#x02280;" ><!--alias ISOAMSN npr -->
-<!ENTITY NotPrecedesEqual "&#x02AAF;&#x00338;" ><!--alias ISOAMSN npre -->
-<!ENTITY NotPrecedesSlantEqual "&#x022E0;" ><!--alias ISOAMSN nprcue -->
-<!ENTITY NotReverseElement "&#x0220C;" ><!--alias ISOTECH notniva -->
-<!ENTITY NotRightTriangle "&#x022EB;" ><!--alias ISOAMSN nrtri -->
-<!ENTITY NotRightTriangleEqual "&#x022ED;" ><!--alias ISOAMSN nrtrie -->
-<!ENTITY NotSquareSubsetEqual "&#x022E2;" ><!--alias ISOAMSN nsqsube -->
-<!ENTITY NotSquareSupersetEqual "&#x022E3;" ><!--alias ISOAMSN nsqsupe -->
-<!ENTITY NotSubset        "&#x02284;" ><!--alias ISOAMSN vnsub -->
-<!ENTITY NotSubsetEqual   "&#x02288;" ><!--alias ISOAMSN nsube -->
-<!ENTITY NotSucceeds      "&#x02281;" ><!--alias ISOAMSN nsc -->
-<!ENTITY NotSucceedsEqual "&#x02AB0;&#x00338;" ><!--alias ISOAMSN nsce -->
-<!ENTITY NotSucceedsSlantEqual "&#x022E1;" ><!--alias ISOAMSN nsccue -->
-<!ENTITY NotSuperset      "&#x02285;" ><!--alias ISOAMSN vnsup -->
-<!ENTITY NotSupersetEqual "&#x02289;" ><!--alias ISOAMSN nsupe -->
-<!ENTITY NotTilde         "&#x02241;" ><!--alias ISOAMSN nsim -->
-<!ENTITY NotTildeEqual    "&#x02244;" ><!--alias ISOAMSN nsime -->
-<!ENTITY NotTildeFullEqual "&#x02247;" ><!--alias ISOAMSN ncong -->
-<!ENTITY NotTildeTilde    "&#x02249;" ><!--alias ISOAMSN nap -->
-<!ENTITY NotVerticalBar   "&#x02224;" ><!--alias ISOAMSN nmid -->
-<!ENTITY nparallel        "&#x02226;" ><!--alias ISOAMSN npar -->
-<!ENTITY nprec            "&#x02280;" ><!--alias ISOAMSN npr -->
-<!ENTITY npreceq          "&#x02AAF;&#x00338;" ><!--alias ISOAMSN npre -->
-<!ENTITY nrightarrow      "&#x0219B;" ><!--alias ISOAMSA nrarr -->
-<!ENTITY nRightarrow      "&#x021CF;" ><!--alias ISOAMSA nrArr -->
-<!ENTITY nshortmid        "&#x02224;&#x02063;" ><!--alias ISOAMSN nsmid -->
-<!ENTITY nshortparallel   "&#x02226;&#x02063;" ><!--alias ISOAMSN nspar -->
-<!ENTITY nsimeq           "&#x02244;" ><!--alias ISOAMSN nsime -->
-<!ENTITY nsubset          "&#x02284;" ><!--alias ISOAMSN vnsub -->
-<!ENTITY nsubseteq        "&#x02288;" ><!--alias ISOAMSN nsube -->
-<!ENTITY nsubseteqq       "&#x02288;" ><!--alias ISOAMSN nsubE -->
-<!ENTITY nsucc            "&#x02281;" ><!--alias ISOAMSN nsc -->
-<!ENTITY nsucceq          "&#x02AB0;&#x00338;" ><!--alias ISOAMSN nsce -->
-<!ENTITY nsupset          "&#x02285;" ><!--alias ISOAMSN vnsup -->
-<!ENTITY nsupseteq        "&#x02289;" ><!--alias ISOAMSN nsupe -->
-<!ENTITY nsupseteqq       "&#x02289;" ><!--alias ISOAMSN nsupE -->
-<!ENTITY ntriangleleft    "&#x022EA;" ><!--alias ISOAMSN nltri -->
-<!ENTITY ntrianglelefteq  "&#x022EC;" ><!--alias ISOAMSN nltrie -->
-<!ENTITY ntriangleright   "&#x022EB;" ><!--alias ISOAMSN nrtri -->
-<!ENTITY ntrianglerighteq "&#x022ED;" ><!--alias ISOAMSN nrtrie -->
-<!ENTITY nwarrow          "&#x02196;" ><!--alias ISOAMSA nwarr -->
-<!ENTITY oint             "&#x0222E;" ><!--alias ISOTECH conint -->
-<!ENTITY OpenCurlyDoubleQuote "&#x0201C;" ><!--alias ISONUM ldquo -->
-<!ENTITY OpenCurlyQuote   "&#x02018;" ><!--alias ISONUM lsquo -->
-<!ENTITY orderof          "&#x02134;" ><!--alias ISOTECH order -->
-<!ENTITY parallel         "&#x02225;" ><!--alias ISOTECH par -->
-<!ENTITY PartialD         "&#x02202;" ><!--alias ISOTECH part -->
-<!ENTITY pitchfork        "&#x022D4;" ><!--alias ISOAMSR fork -->
-<!ENTITY PlusMinus        "&#x000B1;" ><!--alias ISONUM plusmn -->
-<!ENTITY pm               "&#x000B1;" ><!--alias ISONUM plusmn -->
-<!ENTITY prec             "&#x0227A;" ><!--alias ISOAMSR pr -->
-<!ENTITY precapprox       "&#x0227E;" ><!--alias ISOAMSR prap -->
-<!ENTITY preccurlyeq      "&#x0227C;" ><!--alias ISOAMSR prcue -->
-<!ENTITY Precedes         "&#x0227A;" ><!--alias ISOAMSR pr -->
-<!ENTITY PrecedesEqual    "&#x02AAF;" ><!--alias ISOAMSR pre -->
-<!ENTITY PrecedesSlantEqual "&#x0227C;" ><!--alias ISOAMSR prcue -->
-<!ENTITY PrecedesTilde    "&#x0227E;" ><!--alias ISOAMSR prsim -->
-<!ENTITY preceq           "&#x02AAF;" ><!--alias ISOAMSR pre -->
-<!ENTITY precnapprox      "&#x022E8;" ><!--alias ISOAMSN prnap -->
-<!ENTITY precneqq         "&#x02AB5;" ><!--alias ISOAMSN prnE -->
-<!ENTITY precnsim         "&#x022E8;" ><!--alias ISOAMSN prnsim -->
-<!ENTITY precsim          "&#x0227E;" ><!--alias ISOAMSR prsim -->
-<!ENTITY Proportion       "&#x02237;" ><!--alias ISOAMSR Colon -->
-<!ENTITY Proportional     "&#x0221D;" ><!--alias ISOTECH prop -->
-<!ENTITY propto           "&#x0221D;" ><!--alias ISOTECH prop -->
-<!ENTITY questeq          "&#x0225F;" ><!--alias ISOAMSR equest -->
-<!ENTITY rangle           "&#x03009;" ><!--alias ISOTECH rang -->
-<!ENTITY rbrace           "&#x0007D;" ><!--alias ISONUM rcub -->
-<!ENTITY rbrack           "&#x0005D;" ><!--alias ISONUM rsqb -->
-<!ENTITY Re               "&#x0211C;" ><!--alias ISOAMSO real -->
-<!ENTITY realpart         "&#x0211C;" ><!--alias ISOAMSO real -->
-<!ENTITY ReverseElement   "&#x0220B;" ><!--alias ISOTECH niv -->
-<!ENTITY ReverseEquilibrium "&#x021CB;" ><!--alias ISOAMSA lrhar -->
-<!ENTITY ReverseUpEquilibrium "&#x0296F;" ><!--alias ISOAMSA duhar -->
-<!ENTITY RightAngleBracket "&#x03009;" ><!--alias ISOTECH rang -->
-<!ENTITY rightarrow       "&#x02192;" ><!--alias ISONUM rarr -->
-<!ENTITY Rightarrow       "&#x021D2;" ><!--alias ISOTECH rArr -->
-<!ENTITY RightArrow       "&#x02192;" ><!--alias ISONUM rarr -->
-<!ENTITY RightArrowLeftArrow "&#x021C4;" ><!--alias ISOAMSA rlarr -->
-<!ENTITY rightarrowtail   "&#x021A3;" ><!--alias ISOAMSA rarrtl -->
-<!ENTITY RightCeiling     "&#x02309;" ><!--alias ISOAMSC rceil -->
-<!ENTITY RightDoubleBracket "&#x0301B;" ><!--right double bracket delimiter -->
-<!ENTITY RightDownVector  "&#x021C2;" ><!--alias ISOAMSA dharr -->
-<!ENTITY RightFloor       "&#x0230B;" ><!--alias ISOAMSC rfloor -->
-<!ENTITY rightharpoondown "&#x021C1;" ><!--alias ISOAMSA rhard -->
-<!ENTITY rightharpoonup   "&#x021C0;" ><!--alias ISOAMSA rharu -->
-<!ENTITY rightleftarrows  "&#x021C4;" ><!--alias ISOAMSA rlarr -->
-<!ENTITY rightleftharpoons "&#x021CC;" ><!--alias ISOAMSA rlhar -->
-<!ENTITY rightrightarrows "&#x021C9;" ><!--alias ISOAMSA rrarr -->
-<!ENTITY rightsquigarrow  "&#x021DD;" ><!--alias ISOAMSA rarrw -->
-<!ENTITY RightTee         "&#x022A2;" ><!--alias ISOAMSR vdash -->
-<!ENTITY RightTeeArrow    "&#x021A6;" ><!--alias ISOAMSA map -->
-<!ENTITY rightthreetimes  "&#x022CC;" ><!--alias ISOAMSB rthree -->
-<!ENTITY RightTriangle    "&#x022B3;" ><!--alias ISOAMSR vrtri -->
-<!ENTITY RightTriangleEqual "&#x022B5;" ><!--alias ISOAMSR rtrie -->
-<!ENTITY RightUpVector    "&#x021BE;" ><!--alias ISOAMSA uharr -->
-<!ENTITY RightVector      "&#x021C0;" ><!--alias ISOAMSA rharu -->
-<!ENTITY risingdotseq     "&#x02253;" ><!--alias ISOAMSR erDot -->
-<!ENTITY rmoustache       "&#x02997;" ><!--alias ISOAMSC rmoust -->
-<!ENTITY Rrightarrow      "&#x021DB;" ><!--alias ISOAMSA rAarr -->
-<!ENTITY Rsh              "&#x021B1;" ><!--alias ISOAMSA rsh -->
-<!ENTITY searrow          "&#x02198;" ><!--alias ISOAMSA searr -->
-<!ENTITY setminus         "&#x02216;" ><!--alias ISOAMSB setmn -->
-<!ENTITY ShortLeftArrow   "&#x02190;&#x02063;" ><!--alias ISOAMSA slarr -->
-<!ENTITY shortmid         "&#x02223;&#x02063;" ><!--alias ISOAMSR smid -->
-<!ENTITY shortparallel    "&#x02225;&#x02063;" ><!--alias ISOAMSR spar -->
-<!ENTITY ShortRightArrow  "&#x02192;&#x02063;" ><!--alias ISOAMSA srarr -->
-<!ENTITY simeq            "&#x02243;" ><!--alias ISOTECH sime -->
-<!ENTITY SmallCircle      "&#x02218;" ><!--alias ISOTECH compfn -->
-<!ENTITY smallsetminus    "&#x02216;" ><!--alias ISOAMSB ssetmn -->
-<!ENTITY spadesuit        "&#x02660;" ><!--ISOPUB    spades  -->
-<!ENTITY Sqrt             "&#x0221A;" ><!--alias ISOTECH radic -->
-<!ENTITY sqsubset         "&#x0228F;" ><!--alias ISOAMSR sqsub -->
-<!ENTITY sqsubseteq       "&#x02291;" ><!--alias ISOAMSR sqsube -->
-<!ENTITY sqsupset         "&#x02290;" ><!--alias ISOAMSR sqsup -->
-<!ENTITY sqsupseteq       "&#x02292;" ><!--alias ISOAMSR sqsupe -->
-<!ENTITY Square           "&#x025A1;" ><!--alias for square -->
-<!ENTITY SquareIntersection "&#x02293;" ><!--alias ISOAMSB sqcap -->
-<!ENTITY SquareSubset     "&#x0228F;" ><!--alias ISOAMSR sqsub -->
-<!ENTITY SquareSubsetEqual "&#x02291;" ><!--alias ISOAMSR sqsube -->
-<!ENTITY SquareSuperset   "&#x02290;" ><!--alias ISOAMSR sqsup -->
-<!ENTITY SquareSupersetEqual "&#x02292;" ><!--alias ISOAMSR sqsupe -->
-<!ENTITY SquareUnion      "&#x02294;" ><!--alias ISOAMSB sqcup -->
-<!ENTITY Star             "&#x022C6;" ><!--alias ISOAMSB sstarf -->
-<!ENTITY straightepsilon  "&#x003B5;" ><!--alias ISOGRK3 epsi -->
-<!ENTITY straightphi      "&#x003C6;" ><!--alias ISOGRK3 phi -->
-<!ENTITY subset           "&#x02282;" ><!--alias ISOTECH sub -->
-<!ENTITY Subset           "&#x022D0;" ><!--alias ISOAMSR Sub -->
-<!ENTITY subseteq         "&#x02286;" ><!--alias ISOTECH sube -->
-<!ENTITY subseteqq        "&#x02286;" ><!--alias ISOAMSR subE -->
-<!ENTITY SubsetEqual      "&#x02286;" ><!--alias ISOTECH sube -->
-<!ENTITY subsetneq        "&#x0228A;" ><!--alias ISOAMSN subne -->
-<!ENTITY subsetneqq       "&#x0228A;" ><!--alias ISOAMSN subnE -->
-<!ENTITY succ             "&#x0227B;" ><!--alias ISOAMSR sc -->
-<!ENTITY succapprox       "&#x0227F;" ><!--alias ISOAMSR scap -->
-<!ENTITY succcurlyeq      "&#x0227D;" ><!--alias ISOAMSR sccue -->
-<!ENTITY Succeeds         "&#x0227B;" ><!--alias ISOAMSR sc -->
-<!ENTITY SucceedsEqual    "&#x0227D;" ><!--alias ISOAMSR sce -->
-<!ENTITY SucceedsSlantEqual "&#x0227D;" ><!--alias ISOAMSR sccue -->
-<!ENTITY SucceedsTilde    "&#x0227F;" ><!--alias ISOAMSR scsim -->
-<!ENTITY succeq           "&#x0227D;" ><!--alias ISOAMSR sce -->
-<!ENTITY succnapprox      "&#x022E9;" ><!--alias ISOAMSN scnap -->
-<!ENTITY succneqq         "&#x02AB6;" ><!--alias ISOAMSN scnE -->
-<!ENTITY succnsim         "&#x022E9;" ><!--alias ISOAMSN scnsim -->
-<!ENTITY succsim          "&#x0227F;" ><!--alias ISOAMSR scsim -->
-<!ENTITY SuchThat         "&#x0220B;" ><!--ISOTECH  ni -->
-<!ENTITY Sum              "&#x02211;" ><!--alias ISOAMSB sum -->
-<!ENTITY Superset         "&#x02283;" ><!--alias ISOTECH sup -->
-<!ENTITY SupersetEqual    "&#x02287;" ><!--alias ISOTECH supe -->
-<!ENTITY supset           "&#x02283;" ><!--alias ISOTECH sup -->
-<!ENTITY Supset           "&#x022D1;" ><!--alias ISOAMSR Sup -->
-<!ENTITY supseteq         "&#x02287;" ><!--alias ISOTECH supe -->
-<!ENTITY supseteqq        "&#x02287;" ><!--alias ISOAMSR supE -->
-<!ENTITY supsetneq        "&#x0228B;" ><!--alias ISOAMSN supne -->
-<!ENTITY supsetneqq       "&#x0228B;" ><!--alias ISOAMSN supnE -->
-<!ENTITY swarrow          "&#x02199;" ><!--alias ISOAMSA swarr -->
-<!ENTITY therefore        "&#x02234;" ><!--alias ISOTECH there4 -->
-<!ENTITY Therefore        "&#x02234;" ><!--alias ISOTECH there4 -->
-<!ENTITY thickapprox      "&#x02248;&#x02063;" ><!--ISOAMSR   thkap  -->
-<!ENTITY thicksim         "&#x0223C;" ><!--ISOAMSR   thksim -->
-<!ENTITY ThinSpace        "&#x02009;" ><!--space of width 3/18 em alias ISOPUB thinsp -->
-<!ENTITY Tilde            "&#x0223C;" ><!--alias ISOTECH sim -->
-<!ENTITY TildeEqual       "&#x02243;" ><!--alias ISOTECH sime -->
-<!ENTITY TildeFullEqual   "&#x02245;" ><!--alias ISOTECH cong -->
-<!ENTITY TildeTilde       "&#x02248;" ><!--alias ISOTECH ap -->
-<!ENTITY toea             "&#x02928;" ><!--alias ISOAMSA nesear -->
-<!ENTITY tosa             "&#x02929;" ><!--alias ISOAMSA seswar -->
-<!ENTITY triangle         "&#x025B5;" ><!--alias ISOPUB utri -->
-<!ENTITY triangledown     "&#x025BF;" ><!--alias ISOPUB dtri -->
-<!ENTITY triangleleft     "&#x025C3;" ><!--alias ISOPUB ltri -->
-<!ENTITY trianglelefteq   "&#x022B4;" ><!--alias ISOAMSR ltrie -->
-<!ENTITY triangleq        "&#x0225C;" ><!--alias ISOAMSR trie -->
-<!ENTITY triangleright    "&#x025B9;" ><!--alias ISOPUB rtri -->
-<!ENTITY trianglerighteq  "&#x022B5;" ><!--alias ISOAMSR rtrie -->
-<!ENTITY TripleDot        "&#x020DB;" ><!--alias ISOTECH tdot -->
-<!ENTITY twoheadleftarrow "&#x0219E;" ><!--alias ISOAMSA Larr -->
-<!ENTITY twoheadrightarrow "&#x021A0;" ><!--alias ISOAMSA Rarr -->
-<!ENTITY ulcorner         "&#x0231C;" ><!--alias ISOAMSC ulcorn -->
-<!ENTITY Union            "&#x022C3;" ><!--alias ISOAMSB xcup -->
-<!ENTITY UnionPlus        "&#x0228E;" ><!--alias ISOAMSB uplus -->
-<!ENTITY uparrow          "&#x02191;" ><!--alias ISONUM uarr -->
-<!ENTITY Uparrow          "&#x021D1;" ><!--alias ISOAMSA uArr -->
-<!ENTITY UpArrow          "&#x02191;" ><!--alias ISONUM uarr -->
-<!ENTITY UpArrowDownArrow "&#x021C5;" ><!--alias ISOAMSA udarr -->
-<!ENTITY updownarrow      "&#x02195;" ><!--alias ISOAMSA varr -->
-<!ENTITY Updownarrow      "&#x021D5;" ><!--alias ISOAMSA vArr -->
-<!ENTITY UpDownArrow      "&#x02195;" ><!--alias ISOAMSA varr -->
-<!ENTITY UpEquilibrium    "&#x0296E;" ><!--alias ISOAMSA udhar -->
-<!ENTITY upharpoonleft    "&#x021BF;" ><!--alias ISOAMSA uharl -->
-<!ENTITY upharpoonright   "&#x021BE;" ><!--alias ISOAMSA uharr -->
-<!ENTITY UpperLeftArrow   "&#x02196;" ><!--alias ISOAMSA nwarr -->
-<!ENTITY UpperRightArrow  "&#x02197;" ><!--alias ISOAMSA nearr -->
-<!ENTITY upsilon          "&#x003C5;" ><!--alias ISOGRK3 upsi -->
-<!ENTITY Upsilon          "&#x003D2;" ><!--alias ISOGRK3 Upsi -->
-<!ENTITY UpTee            "&#x022A5;" ><!--alias ISOTECH perp -->
-<!ENTITY upuparrows       "&#x021C8;" ><!--alias ISOAMSA uuarr -->
-<!ENTITY urcorner         "&#x0231D;" ><!--alias ISOAMSC urcorn -->
-<!ENTITY varepsilon       "&#x0025B;" ><!--alias ISOGRK3 epsiv -->
-<!ENTITY varkappa         "&#x003F0;" ><!--alias ISOGRK3 kappav -->
-<!ENTITY varnothing       "&#x02205;" ><!--alias ISOAMSO emptyv -->
-<!ENTITY varphi           "&#x003D5;" ><!--alias ISOGRK3 phiv -->
-<!ENTITY varpi            "&#x003D6;" ><!--alias ISOGRK3 piv -->
-<!ENTITY varpropto        "&#x0221D;" ><!--alias ISOAMSR vprop -->
-<!ENTITY varrho           "&#x003F1;" ><!--alias ISOGRK3 rhov -->
-<!ENTITY varsigma         "&#x003C2;" ><!--alias ISOGRK3 sigmav -->
-<!ENTITY varsubsetneq     "&#x0228A;&#x02063;" ><!--alias ISOAMSN vsubne -->
-<!ENTITY varsubsetneqq    "&#x0228A;&#x02063;" ><!--alias ISOAMSN vsubnE -->
-<!ENTITY varsupsetneq     "&#x0228B;&#x02063;" ><!--alias ISOAMSN vsupne -->
-<!ENTITY varsupsetneqq    "&#x0228B;&#x02063;" ><!--alias ISOAMSN vsupnE -->
-<!ENTITY vartheta         "&#x003D1;" ><!--alias ISOGRK3 thetav -->
-<!ENTITY vartriangleleft  "&#x022B2;" ><!--alias ISOAMSR vltri -->
-<!ENTITY vartriangleright "&#x022B3;" ><!--alias ISOAMSR vrtri -->
-<!ENTITY vee              "&#x02228;" ><!--alias ISOTECH or -->
-<!ENTITY Vee              "&#x022C1;" ><!--alias ISOAMSB xvee -->
-<!ENTITY vert             "&#x0007C;" ><!--alias ISONUM verbar -->
-<!ENTITY Vert             "&#x02016;" ><!--alias ISOTECH Verbar -->
-<!ENTITY VerticalBar      "&#x02223;" ><!--alias ISOAMSR mid -->
-<!ENTITY VerticalTilde    "&#x02240;" ><!--alias ISOAMSB wreath -->
-<!ENTITY VeryThinSpace    "&#x0200A;" ><!--space of width 1/18 em alias ISOPUB hairsp -->
-<!ENTITY wedge            "&#x02227;" ><!--alias ISOTECH and -->
-<!ENTITY Wedge            "&#x022C0;" ><!--alias ISOAMSB xwedge -->
-<!ENTITY wp               "&#x02118;" ><!--alias ISOAMSO weierp -->
-<!ENTITY wr               "&#x02240;" ><!--alias ISOAMSB wreath -->
diff --git a/helm/dtd/mmlextra.ent b/helm/dtd/mmlextra.ent
deleted file mode 100644 (file)
index e76de44..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-
-<!--
-     File mmlextra.ent produced by the XSL script mmldtd.xsl
-     from input data in unicode.xml.
-
-     Please report any errors to 
-     David Carlisle <davidc@nag.co.uk>.
-
-     The numeric character values assigned to each entity
-     (should) match either official Unicode assignments
-     or assignments provisionally allocated by the
-     Unicode Consortium based on the characters in the `STIX'
-     propsal for mathematics. Note that these assignments
-     have not been ratified by the corresponding ISO
-     committee and thus should be considered liable to
-     change.
-
--->
-
-<!ENTITY af               "&#x02061;" ><!--short form of &ApplyFunction; -->
-<!ENTITY ApplyFunction    "&#x02061;" ><!--character showing function application in presentation tagging -->
-<!ENTITY Assign           "&#x02254;" ><!--assignment operator -->
-<!ENTITY CapitalDifferentialD "&#x02145;" ><!--D for use in differentials, e.g., within integrals -->
-<!ENTITY Cayleys          "&#x0212D;" ><!--the non-associative ring of octonions or Cayley numbers -->
-<!ENTITY complexes        "&#x02102;" ><!--the field of complex numbers -->
-<!ENTITY Cross            "&#x02A2F;" ><!--cross or vector product -->
-<!ENTITY dd               "&#x02146;" ><!--short form of &DifferentialD; -->
-<!ENTITY DD               "&#x02145;" ><!--short form of CapitalDifferentialD -->
-<!ENTITY DifferentialD    "&#x02146;" ><!--d for use in differentials, e.g., within integrals -->
-<!ENTITY DownArrowBar     "&#x02913;" ><!--down arrow to bar -->
-<!ENTITY DownBreve        "&#x00311;" ><!--breve, inverted (non-spacing) -->
-<!ENTITY DownLeftRightVector "&#x02950;" ><!--left-down-right-down harpoon -->
-<!ENTITY DownLeftTeeVector "&#x0295E;" ><!--left-down harpoon from bar -->
-<!ENTITY DownLeftVectorBar "&#x02956;" ><!--left-down harpoon to bar -->
-<!ENTITY DownRightTeeVector "&#x0295F;" ><!--right-down harpoon from bar -->
-<!ENTITY DownRightVectorBar "&#x02957;" ><!--right-down harpoon to bar -->
-<!ENTITY DownTeeArrow     "&#x021A7;" ><!--alias for mapstodown -->
-<!ENTITY ee               "&#x02147;" ><!--short form of &ExponentialE; -->
-<!ENTITY EmptySmallSquare "&#x025FD;" ><!--empty small square -->
-<!ENTITY EmptyVerySmallSquare "&#x025FD;" ><!--empty small square -->
-<!ENTITY Equal            "&#x02A75;" ><!--two consecutive equal signs -->
-<!ENTITY expectation      "&#x02130;" ><!--expectation (operator) -->
-<!ENTITY exponentiale     "&#x0212F;" ><!--base of the Napierian logarithms -->
-<!ENTITY ExponentialE     "&#x02147;" ><!--e use for the exponential base of the natural logarithms -->
-<!ENTITY FilledSmallSquare "&#x025FE;" ><!--filled small square -->
-<!ENTITY FilledVerySmallSquare "&#x025FE;" ><!--filled very small square -->
-<!ENTITY Fouriertrf       "&#x02131;" ><!--Fourier transform -->
-<!ENTITY GreaterGreater   "&#x02AA2;" ><!--alias for GT -->
-<!ENTITY HilbertSpace     "&#x0210B;" ><!--Hilbert space -->
-<!ENTITY HorizontalLine   "&#x02500;" ><!--short horizontal line  -->
-<!ENTITY ic               "&#x0200B;" ><!--short form of  &InvisibleComma; -->
-<!ENTITY ii               "&#x02148;" ><!--short form of &ImaginaryI; -->
-<!ENTITY ImaginaryI       "&#x02148;" ><!--i for use as a square root of -1 -->
-<!ENTITY imagline         "&#x02110;" ><!--the geometric imaginary line -->
-<!ENTITY integers         "&#x02124;" ><!--the ring of integers -->
-<!ENTITY InvisibleComma   "&#x0200B;" ><!--used as a separator, e.g., in indices -->
-<!ENTITY InvisibleTimes   "&#x02062;" ><!--marks multiplication when it is understood without a mark -->
-<!ENTITY it               "&#x02062;" ><!--short form of &InvisibleTimes; -->
-<!ENTITY Laplacetrf       "&#x02112;" ><!--Laplace transform -->
-<!ENTITY larrb            "&#x021E4;" ><!--leftwards arrow to bar -->
-<!ENTITY LeftArrowBar     "&#x021E4;" ><!--alias for larrb -->
-<!ENTITY LeftDownTeeVector "&#x02961;" ><!--down-left harpoon from bar -->
-<!ENTITY LeftDownVectorBar "&#x02959;" ><!--down-left harpoon to bar -->
-<!ENTITY LeftRightVector  "&#x0294E;" ><!--left-up-right-up harpoon -->
-<!ENTITY LeftTeeArrow     "&#x021A4;" ><!--alias for mapstoleft -->
-<!ENTITY LeftTeeVector    "&#x0295A;" ><!--left-up harpoon from bar -->
-<!ENTITY LeftTriangleBar  "&#x029CF;" ><!--not left triangle, vertical bar -->
-<!ENTITY LeftUpDownVector "&#x02951;" ><!--up-left-down-left harpoon -->
-<!ENTITY LeftUpTeeVector  "&#x02960;" ><!--up-left harpoon from bar -->
-<!ENTITY LeftUpVectorBar  "&#x02958;" ><!--up-left harpoon to bar -->
-<!ENTITY LeftVectorBar    "&#x02952;" ><!--left-up harpoon to bar -->
-<!ENTITY LessLess         "&#x02AA1;" ><!--alias for Lt -->
-<!ENTITY mapstodown       "&#x021A7;" ><!--downwards arrow from bar -->
-<!ENTITY mapstoleft       "&#x021A4;" ><!--leftwards arrow from bar -->
-<!ENTITY mapstoup         "&#x021A5;" ><!--upwards arrow from bar -->
-<!ENTITY Mellintrf        "&#x02133;" ><!--Mellin transform -->
-<!ENTITY naturals         "&#x02115;" ><!--the semi-ring of natural numbers -->
-<!ENTITY nbump            "&#x0224E;&#x00338;" ><!--not bumpy equals -->
-<!ENTITY nbumpe           "&#x0224F;&#x00338;" ><!--not bumpy single equals -->
-<!ENTITY NegativeMediumSpace "&#x0205F;&#x02063;" ><!--space of width -4/18 em -->
-<!ENTITY NegativeThickSpace "&#x02005;&#x02063;" ><!--space of width -5/18 em -->
-<!ENTITY NegativeThinSpace "&#x02009;&#x02063;" ><!--space of width -3/18 em -->
-<!ENTITY NegativeVeryThinSpace "&#x0200A;&#x02063;" ><!--space of width -1/18 em -->
-<!ENTITY nesim            "&#x02242;&#x00338;" ><!--not equal or similar -->
-<!ENTITY NewLine          "&#x0000A;" ><!--force a line break; line feed -->
-<!ENTITY NoBreak          "&#x0FEFF;" ><!--never break line here -->
-<!ENTITY NotCupCap        "&#x0226D;" ><!--alias for &nasymp; -->
-<!ENTITY NotEqualTilde    "&#x02242;&#x00338;" ><!--alias for  &nesim; -->
-<!ENTITY NotHumpDownHump  "&#x0224E;&#x00338;" ><!--alias for &nbump; -->
-<!ENTITY NotHumpEqual     "&#x0224F;&#x00338;" ><!--alias for &nbumpe; -->
-<!ENTITY NotLeftTriangleBar "&#x029CF;&#x00338;" ><!--not left triangle, vertical bar -->
-<!ENTITY NotNestedGreaterGreater "&#x024A2;&#x00338;" ><!--not double greater-than sign -->
-<!ENTITY NotNestedLessLess "&#x024A1;&#x00338;" ><!--not double less-than sign -->
-<!ENTITY NotRightTriangleBar "&#x029D0;&#x00338;" ><!--not vertical bar, right triangle -->
-<!ENTITY NotSquareSubset  "&#x0228F;&#x00338;" ><!--square not subset -->
-<!ENTITY NotSquareSuperset "&#x02290;&#x00338;" ><!--negated set-like partial order operator -->
-<!ENTITY NotSucceedsTilde "&#x0227F;&#x00338;" ><!--not succeeds or similar -->
-<!ENTITY OverBar          "&#x000AF;" ><!--over bar -->
-<!ENTITY OverBrace        "&#x0FE37;" ><!--over brace  -->
-<!ENTITY OverBracket      "&#x023B4;" ><!--over bracket -->
-<!ENTITY OverParenthesis  "&#x0FE35;" ><!--over parenthesis -->
-<!ENTITY planckh          "&#x0210E;" ><!--the ring (skew field) of quaternions -->
-<!ENTITY Poincareplane    "&#x0210C;" ><!--the Poincare upper half-plane -->
-<!ENTITY primes           "&#x02119;" ><!--the prime natural numbers -->
-<!ENTITY Product          "&#x0220F;" ><!--alias for &prod -->
-<!ENTITY quaternions      "&#x0210D;" ><!--the ring (skew field) of quaternions -->
-<!ENTITY rarrb            "&#x021E5;" ><!--leftwards arrow to bar -->
-<!ENTITY rationals        "&#x0211A;" ><!--the field of rational numbers -->
-<!ENTITY realine          "&#x0211B;" ><!--the geometric real line -->
-<!ENTITY reals            "&#x0211D;" ><!--the field of real numbers -->
-<!ENTITY RightArrowBar    "&#x021E5;" ><!--alias for rarrb -->
-<!ENTITY RightDownTeeVector "&#x0295D;" ><!--down-right harpoon from bar -->
-<!ENTITY RightDownVectorBar "&#x02955;" ><!--down-right harpoon to bar -->
-<!ENTITY RightTeeVector   "&#x0295B;" ><!--right-up harpoon from bar -->
-<!ENTITY RightTriangleBar "&#x029D0;" ><!--vertical bar, right triangle -->
-<!ENTITY RightUpDownVector "&#x0294F;" ><!--up-right-down-right harpoon -->
-<!ENTITY RightUpTeeVector "&#x0295C;" ><!--up-right harpoon from bar -->
-<!ENTITY RightUpVectorBar "&#x02954;" ><!--up-right harpoon to bar -->
-<!ENTITY RightVectorBar   "&#x02953;" ><!--up-right harpoon to bar -->
-<!ENTITY RoundImplies     "&#x02970;" ><!--round implies -->
-<!ENTITY RuleDelayed      "&#x029F4;" ><!--rule-delayed (colon right arrow) -->
-<!ENTITY ShortDownArrow   "&#x02304;&#x02063;" ><!--short down arrow -->
-<!ENTITY ShortUpArrow     "&#x02303;&#x02063;" ><!--short up arrow  -->
-<!ENTITY Tab              "&#x00009;" ><!--tabulator stop; horizontal tabulation -->
-<!ENTITY ThickSpace       "&#x02005;" ><!--space of width 5/18 em -->
-<!ENTITY UnderBar         "&#x00332;" ><!--combining low line -->
-<!ENTITY UnderBrace       "&#x0FE38;" ><!--under brace  -->
-<!ENTITY UnderBracket     "&#x023B5;" ><!--under bracket -->
-<!ENTITY UpArrowBar       "&#x02912;" ><!--up arrow to bar -->
-<!ENTITY UpTeeArrow       "&#x021A5;" ><!--Alias mapstoup -->
-<!ENTITY VerticalLine     "&#x02758;" ><!--short vertical line  -->
-<!ENTITY VerticalSeparator "&#x02758;" ><!--vertical separating operator -->
-<!ENTITY zeetrf           "&#x02128;" ><!--zee transform -->
-<!ENTITY ZeroWidthSpace   "&#x0200B;" ><!--zero width space -->
diff --git a/helm/dtd/provastruct.theory.xml b/helm/dtd/provastruct.theory.xml
deleted file mode 100644 (file)
index 23c8f7c..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE SECTION SYSTEM "theoryobject.dtd">
-
-<SECTION>
- <SECTION>
-  <Variable name="A" xmlns:m="http://www.w3.org/1998/Math/MathML"><type>
-    <m:math><m:apply><m:csymbol>cast</m:csymbol>
-      
-        <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
-      
-      
-        <m:apply><m:csymbol>Type</m:csymbol></m:apply>
-      
-    </m:apply></m:math>
-  </type></Variable>
-  <SECTION>
-   <Variable name="B" xmlns:m="http://www.w3.org/1998/Math/MathML"><type>
-    <m:math><m:apply><m:csymbol>cast</m:csymbol>
-      
-        <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
-      
-      
-        <m:apply><m:csymbol>Type</m:csymbol></m:apply>
-      
-    </m:apply></m:math>
-  </type></Variable>
-   <Axiom name="axiom" xmlns:m="http://www.w3.org/1998/Math/MathML"><Params>1: A 0: B</Params><type>
-    <m:math><m:apply><m:csymbol>cast</m:csymbol>
-      
-        <m:apply><m:csymbol>arrow</m:csymbol>
-            <m:ci>A</m:ci>
-          
-            <m:apply><m:csymbol>arrow</m:csymbol>
-                <m:apply><m:csymbol>arrow</m:csymbol>
-                    <m:ci>A</m:ci>
-                  
-                    <m:ci>B</m:ci>
-                  </m:apply>
-              
-                <m:ci>B</m:ci>
-              </m:apply>
-          </m:apply>
-      
-      
-        <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
-      
-    </m:apply></m:math>
-  </type></Axiom>
-   <Definition name="th1" xmlns:m="http://www.w3.org/1998/Math/MathML"><Params>1: A 0: B</Params><body>
-    <m:math><m:lambda><m:bvar><m:ci>A0</m:ci><m:type>
-        <m:ci>A</m:ci>
-      </m:type></m:bvar>
-        <m:lambda><m:bvar><m:ci>H</m:ci><m:type>
-            <m:apply><m:csymbol>arrow</m:csymbol>
-                <m:ci>A</m:ci>
-              
-                <m:ci>B</m:ci>
-              </m:apply>
-          </m:type></m:bvar>
-            <m:apply><m:csymbol>app</m:csymbol>
-              <m:ci definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind">conj</m:ci>
-              <m:ci>A</m:ci>
-              <m:ci>B</m:ci>
-              <m:ci>A0</m:ci>
-              <m:apply><m:csymbol>app</m:csymbol>
-                <m:ci definitionURL="cic:/prove/provastruct/a/b1/axiom.con">axiom</m:ci>
-                <m:ci>A0</m:ci>
-                <m:ci>H</m:ci>
-              </m:apply>
-            </m:apply>
-          </m:lambda>
-      </m:lambda></m:math>
-  </body><type>
-    <m:math><m:apply><m:csymbol>cast</m:csymbol>
-      
-        <m:apply><m:csymbol>arrow</m:csymbol>
-            <m:ci>A</m:ci>
-          
-            <m:apply><m:csymbol>arrow</m:csymbol>
-                <m:apply><m:csymbol>arrow</m:csymbol>
-                    <m:ci>A</m:ci>
-                  
-                    <m:ci>B</m:ci>
-                  </m:apply>
-              
-                <m:apply><m:and definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind"/><m:ci>A</m:ci><m:ci>B</m:ci></m:apply>
-              </m:apply>
-          </m:apply>
-      
-      
-        <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
-      
-    </m:apply></m:math>
-  </type></Definition>
-  </SECTION>
-  <SECTION>
-   <Variable name="B" xmlns:m="http://www.w3.org/1998/Math/MathML"><type>
-    <m:math><m:apply><m:csymbol>cast</m:csymbol>
-      
-        <m:apply><m:csymbol>Set</m:csymbol></m:apply>
-      
-      
-        <m:apply><m:csymbol>Type</m:csymbol></m:apply>
-      
-    </m:apply></m:math>
-  </type></Variable>
-   <Axiom name="axiom&apos;" xmlns:m="http://www.w3.org/1998/Math/MathML"><Params>1: A</Params><type>
-    <m:math><m:apply><m:csymbol>cast</m:csymbol>
-      
-        <m:apply><m:csymbol>prod</m:csymbol><m:bvar><m:ci>A</m:ci><m:type>
-            <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
-          </m:type></m:bvar>
-            <m:apply><m:csymbol>arrow</m:csymbol>
-                <m:ci>A</m:ci>
-              
-                <m:ci>A</m:ci>
-              </m:apply>
-          </m:apply>
-      
-      
-        <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
-      
-    </m:apply></m:math>
-  </type></Axiom>
-  </SECTION>
-  <Definition name="th1&apos;" xmlns:m="http://www.w3.org/1998/Math/MathML"><Params>0: A</Params><body>
-    <m:math><m:lambda><m:bvar><m:ci>A0</m:ci><m:type>
-        <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
-      </m:type></m:bvar>
-        <m:lambda><m:bvar><m:ci>H</m:ci><m:type>
-            <m:ci>A0</m:ci>
-          </m:type></m:bvar>
-            <m:ci>H</m:ci>
-          </m:lambda>
-      </m:lambda></m:math>
-  </body><type>
-    <m:math><m:apply><m:csymbol>cast</m:csymbol>
-      
-        <m:apply><m:csymbol>prod</m:csymbol><m:bvar><m:ci>A</m:ci><m:type>
-            <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
-          </m:type></m:bvar>
-            <m:apply><m:csymbol>arrow</m:csymbol>
-                <m:ci>A</m:ci>
-              
-                <m:ci>A</m:ci>
-              </m:apply>
-          </m:apply>
-      
-      
-        <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
-      
-    </m:apply></m:math>
-  </type></Definition>
- </SECTION>
-</SECTION>
-
-<!-- This page was served in 4037 milliseconds by Cocoon 1.7.3 -->
diff --git a/helm/dtd/theoryobject.dtd b/helm/dtd/theoryobject.dtd
deleted file mode 100644 (file)
index c6a43d1..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--*****************************************************************-->
-<!-- DTD FOR THEORY OBJECTS AT LEVEL OF MATHML CONTENT:              -->
-<!-- First draft: May 9 2000, Irene Schena                           -->
-<!-- Second draft: March 15 2001, Irene Schena                       -->
-<!-- Third draft: May 3 2001, Irene Schena                           -->
-<!--*****************************************************************-->
-
-<!-- DA AGGIUNGERE: 
-CONJECTURE (teo da dim)
-EXERCISE
-EXAMPLE -->
-
-<!ENTITY % cicobj SYSTEM "cicobject.dtd">
-
-%cicobj;
-
-<!ENTITY % theorystructure
-  '(ht:AXIOM|ht:DEFINITION|ht:THEOREM|ht:VARIABLE|ht:SECTION|ht:MUTUAL)*'>
-
-<!ELEMENT ht:SECTION (%theorystructure;)>
-<!ATTLIST ht:SECTION
-          name CDATA #REQUIRED>
-
-<!ELEMENT ht:MUTUAL (ht:DEFINITION,ht:DEFINITION+)>
-
-<!-- Theory Items -->
-
-<!ELEMENT ht:AXIOM (Axiom)>
-<!ATTLIST ht:AXIOM
-          uri CDATA #REQUIRED
-          as (Axiom|Declaration) #REQUIRED>
-
-<!ELEMENT ht:DEFINITION (Definition|InductiveDefinition)>
-<!ATTLIST ht:DEFINITION
-          uri CDATA #REQUIRED
-          as (Definition|Inductive|CoInductive|Record) #REQUIRED>
-
-<!ELEMENT ht:THEOREM (type)>
-<!ATTLIST ht:THEOREM
-          uri CDATA #REQUIRED
-          as (Theorem|Lemma|Corollary|Fact|Remark) #REQUIRED>
-
-<!ELEMENT ht:VARIABLE (Variable)>
-<!ATTLIST ht:VARIABLE
-          uri CDATA #REQUIRED
-          as (Assumption|Hypothesis|LocalDefinition) #REQUIRED>
-
-
-
-
-
-
-
-
-
-
diff --git a/helm/fix_params/.cvsignore b/helm/fix_params/.cvsignore
deleted file mode 100644 (file)
index 7335d16..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iox] *.o fix_params fix_params.opt
diff --git a/helm/fix_params/.depend b/helm/fix_params/.depend
deleted file mode 100644 (file)
index 152053f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-fix_params.cmo: cicFindParameters.cmo 
-fix_params.cmx: cicFindParameters.cmx 
diff --git a/helm/fix_params/Makefile b/helm/fix_params/Makefile
deleted file mode 100644 (file)
index 92ac930..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-REQUIRES = helm-getter helm-cic_cache helm-xml
-PREDICATES =
-OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)" -pp camlp4o
-OCAMLDEP = ocamldep
-OCAMLFIND = ocamlfind
-OCAMLC = $(OCAMLFIND) ocamlc $(OCAMLOPTIONS)
-OCAMLOPT = $(OCAMLFIND) ocamlopt $(OCAMLOPTIONS)
-
-LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-
-all: fix_params
-opt: fix_params.opt
-
-DEPOBJS = cic2Xml.ml cicFindParameters.ml fix_params.ml
-
-FIXPARAMSOBJS = cic2Xml.cmo cicFindParameters.cmo fix_params.cmo
-
-depend:
-       $(OCAMLDEP) $(DEPOBJS) > .depend
-
-fix_params: $(FIXPARAMSOBJS) $(LIBRARIES)
-       $(OCAMLC) -linkpkg -o fix_params $(FIXPARAMSOBJS)
-
-fix_params.opt: $(FIXPARAMSOBJS:.cmo=.cmx) $(LIBRARIES_OPT)
-       $(OCAMLOPT) -linkpkg -o fix_params.opt $(FIXPARAMSOBJS:.cmo=.cmx)
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.mli.cmi: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.ml.cmx: $(LIBRARIES_OPT)
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o fix_params fix_params.opt
-
-.PHONY: clean
-
-include .depend
diff --git a/helm/fix_params/cic2Xml.ml b/helm/fix_params/cic2Xml.ml
deleted file mode 100644 (file)
index 0d433d6..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*CSC codice cut & paste da cicPp e xmlcommand *)
-
-exception ImpossiblePossible;;
-exception NotImplemented;;
-let dtdname = "http://localhost:8081/getdtd?url=cic.dtd";;
-
-(*CSC ottimizzazione: al posto di curi cdepth (vedi codice) *)
-let print_term curi =
- let rec aux =
-  let module C = Cic in
-  let module X = Xml in
-  let module U = UriManager in
-    function
-       C.ARel (id,n,b) ->
-        X.xml_empty "REL" ["value",(string_of_int n);"binder",b;"id",id]
-     | C.AVar (id,uri) ->
-        let vdepth = U.depth_of_uri uri
-        and cdepth = U.depth_of_uri curi in
-         X.xml_empty "VAR"
-          ["relUri",(string_of_int (cdepth - vdepth)) ^ "," ^
-            (U.name_of_uri uri) ;
-           "id",id]
-     | C.AMeta (id,n) ->
-        X.xml_empty "META" ["no",(string_of_int n) ; "id",id]
-     | C.ASort (id,s) ->
-        let string_of_sort =
-         function
-            C.Prop -> "Prop"
-          | C.Set  -> "Set"
-          | C.Type -> "Type"
-        in
-         X.xml_empty "SORT" ["value",(string_of_sort s) ; "id",id]
-     | C.AImplicit _ -> raise NotImplemented
-     | C.AProd (id,C.Anonimous,s,t) ->
-        X.xml_nempty "PROD" ["id",id]
-         [< X.xml_nempty "source" [] (aux s) ;
-            X.xml_nempty "target" [] (aux t)
-         >]
-     | C.AProd (xid,C.Name id,s,t) ->
-       X.xml_nempty "PROD" ["id",xid]
-        [< X.xml_nempty "source" [] (aux s) ;
-           X.xml_nempty "target" ["binder",id] (aux t)
-        >]
-     | C.ACast (id,v,t) ->
-        X.xml_nempty "CAST" ["id",id]
-         [< X.xml_nempty "term" [] (aux v) ;
-            X.xml_nempty "type" [] (aux t)
-         >]
-     | C.ALambda (id,C.Anonimous,s,t) ->
-        X.xml_nempty "LAMBDA" ["id",id]
-         [< X.xml_nempty "source" [] (aux s) ;
-            X.xml_nempty "target" [] (aux t)
-         >]
-     | C.ALambda (xid,C.Name id,s,t) ->
-       X.xml_nempty "LAMBDA" ["id",xid]
-        [< X.xml_nempty "source" [] (aux s) ;
-           X.xml_nempty "target" ["binder",id] (aux t)
-        >]
-     | C.ALetIn (xid,C.Anonimous,s,t) ->
-       assert false (*CSC: significa che e' sbagliato il tipo di LetIn!!!*)
-     | C.ALetIn (xid,C.Name id,s,t) ->
-       X.xml_nempty "LETIN" ["id",xid]
-        [< X.xml_nempty "term" [] (aux s) ;
-           X.xml_nempty "letintarget" ["binder",id] (aux t)
-        >]
-     | C.AAppl (id,li) ->
-        X.xml_nempty "APPLY" ["id",id]
-         [< (List.fold_right (fun x i -> [< (aux x) ; i >]) li [<>])
-         >]
-     | C.AConst (id,uri,_) ->
-        X.xml_empty "CONST" ["uri", (U.string_of_uri uri) ; "id",id]
-     | C.AMutInd (id,uri,_,i) ->
-        X.xml_empty "MUTIND"
-         ["uri", (U.string_of_uri uri) ;
-          "noType",(string_of_int i) ;
-          "id",id]
-     | C.AMutConstruct (id,uri,_,i,j) ->
-        X.xml_empty "MUTCONSTRUCT"
-         ["uri", (U.string_of_uri uri) ;
-          "noType",(string_of_int i) ; "noConstr",(string_of_int j) ;
-          "id",id]
-     | C.AMutCase (id,uri,_,typeno,ty,te,patterns) ->
-        X.xml_nempty "MUTCASE"
-         ["uriType",(U.string_of_uri uri) ;
-          "noType", (string_of_int typeno) ;
-          "id", id]
-         [< X.xml_nempty "patternsType" [] [< (aux ty) >] ;
-            X.xml_nempty "inductiveTerm" [] [< (aux te) >] ;
-            List.fold_right
-             (fun x i -> [< X.xml_nempty "pattern" [] [< aux x >] ; i>])
-             patterns [<>]
-         >]
-     | C.AFix (id, no, funs) ->
-       X.xml_nempty "FIX" ["noFun", (string_of_int no) ; "id",id]
-        [< List.fold_right
-            (fun (fi,ai,ti,bi) i ->
-              [< X.xml_nempty "FixFunction"
-                  ["name", fi; "recIndex", (string_of_int ai)]
-                  [< X.xml_nempty "type" [] [< aux ti >] ;
-                     X.xml_nempty "body" [] [< aux bi >]
-                  >] ;
-                 i
-              >]
-            ) funs [<>]
-        >]
-     | C.ACoFix (id,no,funs) ->
-       X.xml_nempty "COFIX" ["noFun", (string_of_int no) ; "id",id]
-        [< List.fold_right
-            (fun (fi,ti,bi) i ->
-              [< X.xml_nempty "CofixFunction" ["name", fi]
-                  [< X.xml_nempty "type" [] [< aux ti >] ;
-                     X.xml_nempty "body" [] [< aux bi >]
-                  >] ;
-                 i
-              >]
-            ) funs [<>]
-        >]
- in
-  aux
-;;
-
-let encode params =
- List.fold_right
-  (fun (n,l) i ->
-    match l with
-       [] -> i
-     | _ ->
-       string_of_int n ^ ": " ^ 
-       String.concat " " (List.map UriManager.name_of_uri l) ^
-       i
-  ) params ""
-;;
-
-let print_mutual_inductive_type curi (typename,inductive,arity,constructors) =
- let module C = Cic in
- let module X = Xml in
-  [< X.xml_nempty "InductiveType"
-      ["name",typename ;
-       "inductive",(string_of_bool inductive)
-      ]
-      [< X.xml_nempty "arity" [] (print_term curi arity) ;
-         (List.fold_right
-          (fun (name,ty,_) i ->
-            [< X.xml_nempty "Constructor" ["name",name]
-                (print_term curi ty) ;
-               i
-            >])
-          constructors
-          [<>]
-         )
-      >]
-  >]
-;;
-
-let pp obj curi =
- let module C = Cic in
- let module X = Xml in
-  match obj with
-     C.ADefinition (xid, id, te, ty, params) ->
-      [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-         X.xml_cdata ("<!DOCTYPE Definition SYSTEM \"" ^ dtdname ^ "\">\n\n") ;
-         X.xml_nempty "Definition"
-          (["name", id ; "id",xid] @
-           match params with
-              C.Possible _ -> raise ImpossiblePossible
-              (*CSC params are kept in inverted order in the internal *)
-              (* representation (the order of application)            *)
-            | C.Actual fv' -> ["params",(encode (List.rev fv'))])
-          [< X.xml_nempty "body" [] (print_term curi te) ;
-             X.xml_nempty "type"  [] (print_term curi ty) >]
-      >]
-   | C.AAxiom (xid, id, ty, params) ->
-      [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-         X.xml_cdata ("<!DOCTYPE Axiom SYSTEM \"" ^ dtdname ^ "\">\n\n") ;
-         X.xml_nempty "Axiom"
-          (*CSC params are kept in inverted order in the internal *)
-          (* representation (the order of application)            *)
-          ["name",id ; "params",(encode (List.rev params)) ; "id",xid]
-          [< X.xml_nempty "type" [] (print_term curi ty) >]
-      >]
-   | C.AVariable (xid, name, bo, ty) ->
-      [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-         X.xml_cdata ("<!DOCTYPE Variable SYSTEM \"" ^ dtdname ^ "\">\n\n") ;
-         X.xml_nempty "Variable" ["name",name ; "id",xid]
-          [< (match bo with
-                 None -> [<>]
-               | Some bo -> X.xml_nempty "body" [] (print_term curi bo)
-             ) ;
-             X.xml_nempty "type" [] (print_term curi ty)
-          >]
-      >]
-   | C.ACurrentProof (xid, name, conjs, bo, ty) ->
-      [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-         X.xml_cdata ("<!DOCTYPE CurrentProof SYSTEM \"" ^ dtdname ^ "\">\n\n");
-         X.xml_nempty "CurrentProof" ["name",name ; "id",xid]
-          [< List.fold_right
-              (fun (j,t) i ->
-                [< X.xml_nempty "Conjecture" ["no",(string_of_int j)]
-                    [< print_term curi t >] ; i >])
-              conjs [<>] ;
-             X.xml_nempty "body" [] [< print_term curi bo >] ;
-             X.xml_nempty "type" [] [< print_term curi ty >]
-          >]
-      >]
-   | C.AInductiveDefinition (xid, tys, params, paramsno) ->
-      let names =
-       List.map
-        (fun (typename,_,_,_) -> typename)
-        tys
-      in
-       [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-          X.xml_cdata ("<!DOCTYPE InductiveDefinition SYSTEM \"" ^
-           dtdname ^ "\">\n\n") ;
-          X.xml_nempty "InductiveDefinition"
-           (*CSC params are kept in inverted order in the internal *)
-           (* representation (the order of application)            *)
-           ["noParams",string_of_int paramsno ;
-            "params",(encode (List.rev params)) ;
-            "id",xid]
-          [< List.fold_right
-              (fun x i -> [< print_mutual_inductive_type curi x ; i >])
-              tys [< >]
-           >]
-       >]
-;;
diff --git a/helm/fix_params/cicFindParameters.ml b/helm/fix_params/cicFindParameters.ml
deleted file mode 100644 (file)
index c78d8d2..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception WrongUriToConstant;;
-exception WrongUriToInductiveDefinition;;
-exception CircularDependency of string;;
-
-module OrderedUris =
- struct
-  type t = UriManager.uri
-  let compare (s1 : t) (s2 : t) =
-   (* library function for = *)
-   compare s1 s2
-   (*if s1 = s2 then 0 else if s1 < s2 then (-1) else 1*)
- end
-;;
-
-let filename_of_uri uri =
- let uri' = UriManager.string_of_uri uri in
-  let fn = Str.replace_first (Str.regexp "cic:") Configuration.helm_dir uri' in
-   fn ^ ".xml"
-;;
-
-(* quite inefficient coding of a set of strings: the only operations  *)
-(* performed are mem O(log n), and union O(n * log n?)                *)
-(* Perhaps a better implementation would be an array of bits or a map *)
-(* from uri to booleans                                               *)
-module SetOfUris = Set.Make(OrderedUris);;
-
-let (@@) = SetOfUris.union;;
-
-let rec parameters_of te ty pparams=
- let module S = SetOfUris in
- let module C = Cic in
-   let rec aux =
-    function
-       C.Rel _ -> S.empty
-     | C.Var uri -> S.singleton uri
-     | C.Meta _ -> S.empty
-     | C.Sort _ -> S.empty
-     | C.Implicit -> S.empty
-     | C.Cast (te, ty) -> aux te @@ aux ty
-     | C.Prod (_, s, t) -> aux s @@ aux t
-     | C.Lambda (_, s, t) -> aux s @@ aux t
-     | C.LetIn (_, s, t) -> aux s @@ aux t
-     | C.Appl l -> List.fold_right (fun x i -> aux x @@ i) l S.empty
-     | C.Const (uri,_) ->
-        (* the parameters could be not exact but only possible *)
-        fix_params uri (Some (filename_of_uri uri)) ;
-        (* now the parameters are surely possible *)
-        (match CicCache.get_obj uri with
-            C.Definition (_, _, _, params) ->
-              List.fold_right
-               (fun (_,l) i ->
-                 List.fold_right
-                  (fun x i -> S.singleton x @@ i) l i
-               ) params S.empty
-          | C.Axiom (_, _, params) ->
-             List.fold_right
-              (fun (_,l) i ->
-                List.fold_right
-                 (fun x i -> S.singleton x @@ i) l i
-              ) params S.empty
-          | C.CurrentProof _ -> S.empty (*CSC wrong *)
-          | _ -> raise WrongUriToConstant
-        )
-     | C.MutInd (uri,_,_) ->
-        (match CicCache.get_obj uri with
-            C.InductiveDefinition (_, params, _) ->
-             List.fold_right
-              (fun (_,l) i ->
-                List.fold_right
-                 (fun x i -> S.singleton x @@ i) l i
-              ) params S.empty
-          | _ -> raise WrongUriToInductiveDefinition
-        )
-     | C.MutConstruct (uri,_,_,_) ->
-        (match CicCache.get_obj uri with
-            C.InductiveDefinition (_, params, _) ->
-             List.fold_right
-              (fun (_,l) i ->
-                List.fold_right
-                 (fun x i -> S.singleton x @@ i) l i
-              ) params S.empty
-          | _ -> raise WrongUriToInductiveDefinition
-        )
-     | C.MutCase (uri,_,_,outtype,term,patterns) ->
-        (*CSC cosa basta? Ci vuole anche uri? *)
-        (match CicCache.get_obj uri with
-            C.InductiveDefinition (_, params, _) ->
-            List.fold_right
-             (fun (_,l) i ->
-               List.fold_right
-                (fun x i -> S.singleton x @@ i) l i
-             ) params S.empty
-          | _ -> raise WrongUriToInductiveDefinition
-        ) @@ aux outtype @@ aux term @@
-         List.fold_right (fun x i -> aux x @@ i) patterns S.empty
-     | C.Fix (_,fl) ->
-        List.fold_right
-         (fun (_,_,ty,bo) i  -> aux ty @@ aux bo @@ i)
-         fl S.empty
-     | C.CoFix (_,fl) ->
-        List.fold_right
-         (fun (_,ty,bo) i -> aux ty @@ aux bo @@ i)
-         fl S.empty
- in
-  let actual_params = aux te @@ aux ty in
-   (* sort_actual_params wants in input the ordered list of possible params *)
-   let rec sort_actual_params2 =
-    function
-       [] -> []
-     | he::tl when S.mem he actual_params -> he::(sort_actual_params2 tl)
-     | _::tl -> sort_actual_params2 tl
-   in
-    let rec sort_actual_params =
-     function
-        [] -> []
-      | (n,l)::tl -> (n, sort_actual_params2 l)::(sort_actual_params tl)
-    in
-     sort_actual_params pparams
-
-and fix_params uri filename =
- let module C = Cic in
-  let ann = CicCache.get_annobj uri in
-   match ann with
-      C.ADefinition (xid, id, te, ty, C.Possible pparams) ->
-       let te' = Deannotate.deannotate_term te in
-       let ty' = Deannotate.deannotate_term ty in
-        let real_params = parameters_of te' ty' pparams in
-         let fixed =
-          C.ADefinition (xid,id,te,ty,C.Actual real_params)
-         in
-          Xml.pp (Cic2Xml.pp fixed uri) filename ;
-    | _ -> ()
-;;
diff --git a/helm/fix_params/fix_params.ml b/helm/fix_params/fix_params.ml
deleted file mode 100644 (file)
index f1edf09..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let read_from_stdin = ref false;;
-
-let uri_of_filename fn =
- let uri =
-  Str.replace_first (Str.regexp (Str.quote Configuration.helm_dir)) "cic:" fn
- in
-  let uri' = Str.replace_first (Str.regexp "\.xml$") "" uri in
-   UriManager.uri_of_string uri'
-;;
-
-let main() =
-  Deannotate.expect_possible_parameters := true ;
-  let files = ref [] in
-  Arg.parse
-   ["-stdin", Arg.Set read_from_stdin, "Read from stdin"]
-   (fun x -> files := (x, uri_of_filename x) :: !files)
-      "
-usage: experiment file ...
-
-List of options:";
-  if !read_from_stdin then
-   begin
-    try
-     while true do
-      let l = Str.split (Str.regexp " ") (read_line ()) in
-       List.iter (fun x -> files := (x, uri_of_filename x) :: !files) l
-     done
-    with
-     End_of_file -> ()
-   end ;
-  files := List.rev !files;
-  Getter.update () ;
-  print_endline "ATTENTION: have you changed servers.txt so that you'll try \
-   to repair your own objs instead of others'?" ;
-  flush stdout ;
-  List.iter
-    (function (fn, uri) ->
-      print_string (UriManager.string_of_uri uri) ;
-      flush stdout ;
-      (try
-       CicFindParameters.fix_params uri (Some fn)
-      with
-        e -> print_newline () ; flush stdout ; raise e ) ;
-      print_endline " OK!" ;
-      flush stdout
-    ) !files
-;;
-
-main();;
diff --git a/helm/gTopLevel/.cvsignore b/helm/gTopLevel/.cvsignore
deleted file mode 100644 (file)
index 59f31a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iox] gTopLevel gTopLevel.opt styles stylesheets meta_stylesheets
diff --git a/helm/gTopLevel/.depend b/helm/gTopLevel/.depend
deleted file mode 100644 (file)
index de8a83a..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-xml2Gdome.cmo: xml2Gdome.cmi 
-xml2Gdome.cmx: xml2Gdome.cmi 
-proofEngine.cmo: cic2Xml.cmi cic2acic.cmi proofEngine.cmi 
-proofEngine.cmx: cic2Xml.cmx cic2acic.cmx proofEngine.cmi 
-doubleTypeInference.cmo: doubleTypeInference.cmi 
-doubleTypeInference.cmx: doubleTypeInference.cmi 
-cic2acic.cmo: doubleTypeInference.cmi cic2acic.cmi 
-cic2acic.cmx: doubleTypeInference.cmx cic2acic.cmi 
-cic2Xml.cmo: cic2acic.cmi cic2Xml.cmi 
-cic2Xml.cmx: cic2acic.cmx cic2Xml.cmi 
-cic2Xml.cmi: cic2acic.cmi 
-logicalOperations.cmo: proofEngine.cmi logicalOperations.cmi 
-logicalOperations.cmx: proofEngine.cmx logicalOperations.cmi 
-sequentPp.cmo: cic2Xml.cmi cic2acic.cmi sequentPp.cmi 
-sequentPp.cmx: cic2Xml.cmx cic2acic.cmx sequentPp.cmi 
-misc.cmo: misc.cmi 
-misc.cmx: misc.cmi 
-disambiguate.cmo: disambiguate.cmi 
-disambiguate.cmx: disambiguate.cmi 
-termEditor.cmo: disambiguate.cmi termEditor.cmi 
-termEditor.cmx: disambiguate.cmx termEditor.cmi 
-termEditor.cmi: disambiguate.cmi 
-texTermEditor.cmo: disambiguate.cmi misc.cmi texTermEditor.cmi 
-texTermEditor.cmx: disambiguate.cmx misc.cmx texTermEditor.cmi 
-texTermEditor.cmi: disambiguate.cmi 
-applyStylesheets.cmo: cic2Xml.cmi misc.cmi sequentPp.cmi xml2Gdome.cmi \
-    applyStylesheets.cmi 
-applyStylesheets.cmx: cic2Xml.cmx misc.cmx sequentPp.cmx xml2Gdome.cmx \
-    applyStylesheets.cmi 
-applyStylesheets.cmi: cic2acic.cmi 
-termViewer.cmo: applyStylesheets.cmi cic2acic.cmi logicalOperations.cmi \
-    misc.cmi termViewer.cmi 
-termViewer.cmx: applyStylesheets.cmx cic2acic.cmx logicalOperations.cmx \
-    misc.cmx termViewer.cmi 
-termViewer.cmi: cic2acic.cmi 
-invokeTactics.cmo: logicalOperations.cmi proofEngine.cmi termEditor.cmi \
-    termViewer.cmi invokeTactics.cmi 
-invokeTactics.cmx: logicalOperations.cmx proofEngine.cmx termEditor.cmx \
-    termViewer.cmx invokeTactics.cmi 
-invokeTactics.cmi: termEditor.cmi termViewer.cmi 
-hbugs.cmo: invokeTactics.cmi misc.cmi proofEngine.cmi hbugs.cmi 
-hbugs.cmx: invokeTactics.cmx misc.cmx proofEngine.cmx hbugs.cmi 
-hbugs.cmi: invokeTactics.cmi 
-gTopLevel.cmo: applyStylesheets.cmi cic2Xml.cmi cic2acic.cmi hbugs.cmi \
-    invokeTactics.cmi logicalOperations.cmi misc.cmi proofEngine.cmi \
-    sequentPp.cmi termEditor.cmi termViewer.cmi texTermEditor.cmi 
-gTopLevel.cmx: applyStylesheets.cmx cic2Xml.cmx cic2acic.cmx hbugs.cmx \
-    invokeTactics.cmx logicalOperations.cmx misc.cmx proofEngine.cmx \
-    sequentPp.cmx termEditor.cmx termViewer.cmx texTermEditor.cmx 
diff --git a/helm/gTopLevel/INSTALL b/helm/gTopLevel/INSTALL
deleted file mode 100644 (file)
index d8a8d1f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-1) Customize script.sh. You should load script.sh before compiling or
-   executing gTopLevel
-2) Customize gTopLevel.ml and rootcontent.xsl in order to make them communicate.
-3) Check out the "stylesheets" and "meta_stylesheets" directories from the
-   MoWGLI CVS repository.
-4) Type "make" to compile to bytecode and "make opt" to compile to nativecode.
-
-Enjoy!
-
-Note:
- Every time that you upgrade stylesheets, you should "rm -rf" the styles
- directory and do make again.
diff --git a/helm/gTopLevel/Makefile b/helm/gTopLevel/Makefile
deleted file mode 100644 (file)
index f5bc93d..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-BIN_DIR = /usr/local/bin
-REQUIRES = lablgtkmathview helm-cic_textual_parser helm-tex_cic_textual_parser \
-           helm-cic_proof_checking helm-xml gdome2-xslt helm-cic_unification \
-           helm-mathql helm-mathql_interpreter helm-mathql_generator \
-                helm-tactics threads hbugs-client mathml-editor
-PREDICATES = "gnome,init,glade"
-OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)" -pp camlp4o
-OCAMLFIND = ocamlfind
-OCAMLC = $(OCAMLFIND) ocamlc -thread $(OCAMLOPTIONS)
-OCAMLOPT = $(OCAMLFIND) ocamlopt -thread $(OCAMLOPTIONS)
-OCAMLDEP = ocamldep -pp camlp4o
-
-LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-
-all: styles gTopLevel
-opt: styles gTopLevel.opt
-
-DEPOBJS = \
-       xml2Gdome.ml xml2Gdome.mli proofEngine.ml proofEngine.mli \
-       doubleTypeInference.ml doubleTypeInference.mli cic2acic.ml cic2acic.mli\
-       cic2Xml.ml cic2Xml.mli logicalOperations.ml logicalOperations.mli \
-       sequentPp.ml sequentPp.mli mQueryGenerator.mli mQueryLevels.ml \
-       mQueryLevels2.mli mQueryLevels2.ml mQueryGenerator.ml misc.ml misc.mli \
-        disambiguate.ml disambiguate.mli termEditor.ml termEditor.mli \
-        texTermEditor.ml texTermEditor.mli applyStylesheets.ml \
-        applyStylesheets.mli termViewer.ml termViewer.mli invokeTactics.ml \
-        invokeTactics.mli hbugs.ml hbugs.mli gTopLevel.ml
-
-TOPLEVELOBJS = \
-       xml2Gdome.cmo doubleTypeInference.cmo cic2acic.cmo cic2Xml.cmo \
-        proofEngine.cmo logicalOperations.cmo sequentPp.cmo \
-       mQueryLevels2.cmo misc.cmo disambiguate.cmo \
-       termEditor.cmo texTermEditor.cmo applyStylesheets.cmo termViewer.cmo \
-       invokeTactics.cmo hbugs.cmo gTopLevel.cmo
-
-styles:
-       @echo "***********************************************************************"
-       @if [ -d stylesheets -a -d meta_stylesheets ] ; then echo -e "* stylesheets and metastylesheets found:                              *\\n* I will create the request hyperlinks in styles                      *" ; else echo -e "* stylesheets or meta_stylesheets not found:                          *\\n* you should check-out the two directories from the MoWGLI repository *" ; exit -1 ; fi
-       @echo "***********************************************************************"
-       mkdir styles
-       (cd styles && for i in ../stylesheets/*.xsl ; do ln -s $$i; done)
-       (cd styles && for i in ../stylesheets/generated/*.xsl ; do ln -s $$i; done)
-       (cd styles && rm rootcontent.xsl && ln -s ../rootcontent.xsl)
-       
-depend:
-       $(OCAMLDEP) $(DEPOBJS) > .depend
-
-gTopLevel: $(TOPLEVELOBJS) $(LIBRARIES)
-       $(OCAMLC) -linkpkg -o gTopLevel $(TOPLEVELOBJS)
-
-gTopLevel.opt: $(TOPLEVELOBJS:.cmo=.cmx) $(LIBRARIES_OPT)
-       $(OCAMLOPT) -linkpkg -o gTopLevel.opt $(TOPLEVELOBJS:.cmo=.cmx)
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo:
-       $(OCAMLC) -c $<
-.mli.cmi:
-       $(OCAMLC) -c $<
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-$(TOPLEVELOBJS): $(LIBRARIES)
-$(TOPLEVELOBJS:.cmo=.cmx)): $(LIBRARIES_OPT)
-
-clean:
-       rm -f *.cm[iox] *.o gTopLevel gTopLevel.opt
-
-install:
-       cp gTopLevel gTopLevel.opt $(BIN_DIR)
-
-uninstall:
-       rm -f $(BIN_DIR)/gTopLevel $(BIN_DIR)/gTopLevel.opt
-
-.PHONY: install uninstall clean
-
-ifneq ($(MAKECMDGOALS), depend)
-   include .depend   
-endif
diff --git a/helm/gTopLevel/TATTICHE b/helm/gTopLevel/TATTICHE
deleted file mode 100644 (file)
index 88d989d..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-V7.2:
-
-Da valutare:
- * MetaLinguaggio di David Delayale per l'implementazione di tattiche
-
-V6.3:
-
-Da valutare:
- * Print
- * Extraction
- * Opaque/Transparent
- * SearchIsos
- * Load di script di tattiche
- * "Pretty" Parsing
- * Log dei tempi per ogni possibile richiesta
- * Undo
- * Focus/Unfocus (nella prova completa in linguaggio naturale)
- * Show Tree (resa dell'albero dei sequenti)
- * Tatticali:
-    - OrElse
-    - Repeat
-    - Do
-    - Info
-    - Try
-    - First
-    - Solve
-    - Abstract
-    - ;
-    - ; [ ... | ... | ... ]
-    - (...)
- * Assumption
- * Apply with
- * LApply
- * Absurd
- * Contradiction
- * Cbv/Lazy Beta Delta Iota Zeta
- * Red (riduzione di un backbone con delta della testa + beta e iota)
- * Unfold (equivalente a Hnf dell'occorrenza)
- * Pattern
- * Constructor n / Split / Left/ Right/ Exists/ Reflexivity
- * Elim term quando term ha come tipo un Pi
- * ElimType (fatta da Zack; metterla disponibile)
- * Induction su una applicazione
- * Induction su una ipotesi
- * Case su una applicazione e su una ipotesi
- * Intros destrutturante
- * Decompose
- * Double Induction
- * Rewrite (ma eliminare un'uguaglianza o applicare eq_ind_r non funziona gia'?)
- * Replace (che prende due termini _NON_ convertibili e genera come goal
-   l'uguaglianza dei due). Unificarla con la change, che diventa la replace
-   non overkilling?
- * Symmetry e Transitivity (basta applicare i due teoremi giusti)
- * Decide Equality (ma non dovrebbe essere un teorema???)
- * Compare
- * Discriminate
- * Injection
- * Simplify_eq (== Discriminate o Injection su una ipotesi)
- * Dependent Rewrite
- * Inversion [Nota: Derive Inversion genera e salva il teorema!]
- * Quote (per implementare tattiche riflessive senza scrivere codice ML!!!!)
- * Tauto/Intuition
- * Linear
- * AutoRewrite
- * Realizer/Program
- * Scheme
- * Omega
-
-Implementate:
- * Enunciare un teorema
- * (Ri)aprire un teorema gia' dimostrato per modificarne certe parti
- * Check (e successiva possibilita' di applicare reduction tactics)
- * Exact
- * Apply/EApply
- * Cut
- * Change [Una conversion tactic. Problema: il termine digitato viene
-    parsato nel contesto della conclusione e non in quello della selezione!!!]
- * Conversion tactics, sia nelle ipotesi che nella conclusione:
-   - Reduce (== Compute)
-   - Hnf
-   - Simpl
- * Fold
- * ElimIntrosSimpl
- * Let...In (= LetTac)
- * Salvare e caricare una prova incompleta (ma nel posto sbagliato!)
- * ClearBody
- * Clear
- * Ring
-
-Da implementare:
- * Implicit: quando si usano gli implicit, l'input non puo' piu' essere
-   type-checkato, ma bisogna fare una refine (ancora non implementata).
-   Di conseguenza _OGNI_ tattica si rompe. Inoltre l'implementazione di
-   Implicit e' ancora errata in quanto il contesto canonico delle nuove
-   variabili e' sempre vuoto anche se dovrebbe essere uguale a quello
-   di partenza + le nuove variabili introdotte durante il parsing.
- * Nella type_of NON viene controllato che il metasenv di una current-proof
-   sia ben formato. PUNTO IMPORTANTE: farlo nel metasenv parziale, cosi' da
-   evitare cicli; ma dopo e' un bordello l'unificazione. Oppure fare un
-   semplice controllo di aciclicita'.
- * ClearBody e Clear NON restringono ancora altre metavariabili. Invece viene
-   sollevata un'eccezione di tipaggio. Esempio: n:nat |- ?1[n] se faccio clear
-   di n dovrei restringere ?1. Se invece prima faccio clear di n in ?1, quando
-   torno su questo goal e faccio clear di n ottengo un'eccezione di CicPp.
- * La reduction_tactic (in ProofEngine.ml) e' bacatissima, come descritto
-   nei commenti. Fixare.
- * Reimplementare Cut usando LetIn + applicazione + Intro oppure usando
-   LetIn + ClearBody (soluzione piu' elegante IMHO)
- * Refine
- ? Sia [x:=t]r il tipo di [x:t]k e x non occorra mai libera in r.
-   Dovrei forse tornare semplicemente r?
- ? Cambiare il nome delle META da int a una stringa?
-   [ATTENZIONE: CAMBIAMENTO NELLA DTD]
- * Fold e' l'inverso di Reduce e quindi non disfa cio' che viene fatto da
-   Simpl e da Whd. Generalizzarlo facendo Reduce e poi Change con ogni termine?
-   Oppure fare una FoldWhd, una FoldHnf, una FoldSimpl, etc.?
- * Fold localizzato in un termine selezionato
- * Move e "Unclear" (che fa l'undo di Clear/Move e conversioni nelle ipotesi)
-   Non sono implementabili. Ma avrebbero senso?
- * queries e roba basata sulle queries:
-   - Search
-   - Locate (anche di tipi induttivi e costruttori)
-   - Auto
-   - EAuto
-   - Prolog (???????????)
- * Save con tanto di esportazione: esportare nel posto giusto!
- * Dare una definizione (quasi equivalente a check + unfold, ma mancano
-   gli inner-types)
- * Dare una definizione induttiva
- * Intro (Come scegliere i nomi freschi?) e Intros until
- * Generalize
- * Fissare il bug di change (ovvero il problema del contesto in cui viene
-   parsato l'input dell'utente)
- * Tornare un errore se si cerca di applicare una reduction tactic in una
-   ipotesi nella scratch area
- * Field
- * JProver. Che rapporto c'e' fra JProver e Tauto/Intuition?
- * altre contrib da integrare?
-
-Da non implementare:
-  * Print All
-  * Compile/Read/Require
-  * Print/Save/Restore States
-  * Let
diff --git a/helm/gTopLevel/applyStylesheets.ml b/helm/gTopLevel/applyStylesheets.ml
deleted file mode 100644 (file)
index 8206058..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 30/01/2002                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-(** stylesheets and parameters list **)
-
-let parseStyle name =
- let style =
-  Misc.domImpl#createDocumentFromURI
-   (* ~uri:("http://phd.cs.unibo.it:8081/getxslt?uri=" ^ name) ?mode:None *)
-   ~uri:("styles/" ^ name) ()
- in
-  Gdome_xslt.processStylesheet style
-;;
-
-let parseStyles () =
- parseStyle "drop_coercions.xsl",
- parseStyle "objtheorycontent.xsl",
- parseStyle "content_to_html.xsl",
- parseStyle "link.xsl",
- parseStyle "rootcontent.xsl",
- parseStyle "genmmlid.xsl",
- parseStyle "annotatedpres.xsl"
-;;
-
-let (d_c,tc1,hc2,l,c1,g,c2) =
- let (d_c,tc1,hc2,l,c1,g,c2) = parseStyles () in
-  ref d_c, ref tc1, ref hc2, ref l, ref c1, ref g, ref c2
-;;
-
-let reload_stylesheets () =
- let (d_c',tc1',hc2',l',c1',g',c2') = parseStyles () in
-  d_c := d_c';
-  tc1 := tc1';
-  hc2 := hc2';
-  l   := l'  ;
-  c1  := c1' ;
-  g   := g'  ;
-  c2  := c2'
-;;
-
-
-let getterURL = Configuration.getter_url;;
-let processorURL = Configuration.processor_url;;
-
-let mml_styles = [d_c ; c1 ; g ; c2 ; l];;
-let mml_args ~explode_all =
- ("explodeall",(if explode_all then "true()" else "false()"))::
-  ["processorURL", "'" ^ processorURL ^ "'" ;
-   "getterURL", "'" ^ getterURL ^ "'" ;
-   "draw_graphURL", "'http%3A//phd.cs.unibo.it%3A8083/'" ;
-   "uri_set_queueURL", "'http%3A//phd.cs.unibo.it%3A8084/'" ;
-   "UNICODEvsSYMBOL", "'symbol'" ;
-   "doctype-public", "'-//W3C//DTD%20XHTML%201.0%20Transitional//EN'" ;
-   "encoding", "'iso-8859-1'" ;
-   "media-type", "'text/html'" ;
-   "keys", "'d_c%2CC1%2CG%2CC2%2CL'" ;
-   "interfaceURL", "'http%3A//phd.cs.unibo.it/helm/html/cic/index.html'" ;
-   "naturalLanguage", "'yes'" ;
-   "annotations", "'no'" ;
-   "URLs_or_URIs", "'URIs'" ;
-   "topurl", "'http://phd.cs.unibo.it/helm'" ;
-   "CICURI", "'cic:/Coq/Init/Datatypes/bool_ind.con'" ]
-;;
-
-let sequent_styles = [d_c ; c1 ; g ; c2 ; l];;
-let sequent_args =
- ["processorURL", "'" ^ processorURL ^ "'" ;
-  "getterURL", "'" ^ getterURL ^ "'" ;
-  "draw_graphURL", "'http%3A//phd.cs.unibo.it%3A8083/'" ;
-  "uri_set_queueURL", "'http%3A//phd.cs.unibo.it%3A8084/'" ;
-  "UNICODEvsSYMBOL", "'symbol'" ;
-  "doctype-public", "'-//W3C//DTD%20XHTML%201.0%20Transitional//EN'" ;
-  "encoding", "'iso-8859-1'" ;
-  "media-type", "'text/html'" ;
-  "keys", "'d_c%2CC1%2CG%2CC2%2CL'" ;
-  "interfaceURL", "'http%3A//phd.cs.unibo.it/helm/html/cic/index.html'" ;
-  "naturalLanguage", "'no'" ;
-  "annotations", "'no'" ;
-  "explodeall", "true()" ;
-  "URLs_or_URIs", "'URIs'" ;
-  "topurl", "'http://phd.cs.unibo.it/helm'" ;
-  "CICURI", "'cic:/Coq/Init/Datatypes/bool_ind.con'" ]
-;;
-
-(** Stylesheets application **)
-
-let apply_stylesheets input styles args =
- List.fold_left (fun i style -> Gdome_xslt.applyStylesheet i !style args)
-  input styles
-;;
-
-let apply_proof_stylesheets proof_doc ~explode_all =
- apply_stylesheets proof_doc mml_styles (mml_args ~explode_all)
-;;
-
-let apply_sequent_stylesheets sequent_doc =
- apply_stylesheets sequent_doc sequent_styles sequent_args
-;;
-
-(** Utility functions to map objects to MathML Presentation **)
-
-(*CSC: the getter should handle the innertypes, not the FS *)
-
-let innertypesfile =
- try
-  Sys.getenv "GTOPLEVEL_INNERTYPESFILE"
- with
-  Not_found -> "/public/innertypes"
-;;
-
-let constanttypefile =
- try
-  Sys.getenv "GTOPLEVEL_CONSTANTTYPEFILE"
- with
-  Not_found -> "/public/constanttype"
-;;
-
-let mml_of_cic_sequent metasenv sequent =
- let sequent_gdome,ids_to_terms,ids_to_father_ids,ids_to_hypotheses =
-  SequentPp.XmlPp.print_sequent metasenv sequent in
- let sequent_doc =
-  Xml2Gdome.document_of_xml Misc.domImpl sequent_gdome in
- let sequent_mml = apply_sequent_stylesheets sequent_doc in
-  sequent_mml,(ids_to_terms,ids_to_father_ids,ids_to_hypotheses)
-;;
-
-let
- mml_of_cic_object ~explode_all uri annobj ids_to_inner_sorts ids_to_inner_types
-=
-(*CSC: ????????????????? *)
- let xml, bodyxml =
-  Cic2Xml.print_object uri ~ids_to_inner_sorts ~ask_dtd_to_the_getter:true
-   annobj 
- in
- let xmlinnertypes =
-  Cic2Xml.print_inner_types uri ~ids_to_inner_sorts ~ids_to_inner_types
-   ~ask_dtd_to_the_getter:true
- in
-  let input =
-   match bodyxml with
-      None -> Xml2Gdome.document_of_xml Misc.domImpl xml
-    | Some bodyxml' ->
-       Xml.pp xml (Some constanttypefile) ;
-       Xml2Gdome.document_of_xml Misc.domImpl bodyxml'
-  in
-(*CSC: We save the innertypes to disk so that we can retrieve them in the  *)
-(*CSC: stylesheet. This DOES NOT work when UWOBO and/or the getter are not *)
-(*CSC: local.                                                              *)
-   Xml.pp xmlinnertypes (Some innertypesfile) ;
-   let output = apply_proof_stylesheets input ~explode_all in
-    output
-;;
diff --git a/helm/gTopLevel/applyStylesheets.mli b/helm/gTopLevel/applyStylesheets.mli
deleted file mode 100644 (file)
index c445d37..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 15/01/2003                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-val reload_stylesheets : unit -> unit
-
-val mml_of_cic_sequent :
- Cic.metasenv ->
- int * Cic.context * Cic.term ->
- Gdome.document *
-  ((Cic.id, Cic.term) Hashtbl.t *
-   (Cic.id, Cic.id option) Hashtbl.t *
-   (string, Cic.hypothesis) Hashtbl.t)
-
-val mml_of_cic_object :
-  explode_all:bool ->
-  UriManager.uri ->
-  Cic.annobj ->
-  (string, string) Hashtbl.t ->
-  (string, Cic2acic.anntypes) Hashtbl.t -> Gdome.document
diff --git a/helm/gTopLevel/cic2Xml.ml b/helm/gTopLevel/cic2Xml.ml
deleted file mode 100644 (file)
index 564493c..0000000
+++ /dev/null
@@ -1,428 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*CSC codice cut & paste da cicPp e xmlcommand *)
-
-exception ImpossiblePossible;;
-exception NotImplemented;;
-
-let dtdname ~ask_dtd_to_the_getter dtd =
- if ask_dtd_to_the_getter then
-  Configuration.getter_url ^ "getdtd?uri=" ^ dtd
- else
-  "http://mowgli.cs.unibo.it/dtd/" ^ dtd
-;;
-
-let param_attribute_of_params params =
- String.concat " " (List.map UriManager.string_of_uri params)
-;;
-
-(*CSC ottimizzazione: al posto di curi cdepth (vedi codice) *)
-let print_term ~ids_to_inner_sorts =
- let rec aux =
-  let module C = Cic in
-  let module X = Xml in
-  let module U = UriManager in
-    function
-       C.ARel (id,idref,n,b) ->
-        let sort = Hashtbl.find ids_to_inner_sorts id in
-         X.xml_empty "REL"
-          ["value",(string_of_int n) ; "binder",b ; "id",id ; "idref",idref ;
-           "sort",sort]
-     | C.AVar (id,uri,exp_named_subst) ->
-        let sort = Hashtbl.find ids_to_inner_sorts id in
-         aux_subst uri
-          (X.xml_empty "VAR" ["uri",U.string_of_uri uri;"id",id;"sort",sort])
-          exp_named_subst
-     | C.AMeta (id,n,l) ->
-        let sort = Hashtbl.find ids_to_inner_sorts id in
-         X.xml_nempty "META" ["no",(string_of_int n) ; "id",id ; "sort",sort]
-          (List.fold_left
-            (fun i t ->
-              match t with
-                 Some t' ->
-                  [< i ; X.xml_nempty "substitution" [] (aux t') >]
-               | None ->
-                  [< i ; X.xml_empty "substitution" [] >]
-            ) [< >] l)
-     | C.ASort (id,s) ->
-        let string_of_sort =
-         function
-            C.Prop -> "Prop"
-          | C.Set  -> "Set"
-          | C.Type -> "Type"
-        in
-         X.xml_empty "SORT" ["value",(string_of_sort s) ; "id",id]
-     | C.AImplicit _ -> raise NotImplemented
-     | C.AProd (last_id,_,_,_) as prods ->
-        let rec eat_prods =
-         function
-            C.AProd (id,n,s,t) ->
-             let prods,t' = eat_prods t in
-              (id,n,s)::prods,t'
-          | t -> [],t
-        in
-         let prods,t = eat_prods prods in
-          let sort = Hashtbl.find ids_to_inner_sorts last_id in
-           X.xml_nempty "PROD" ["type",sort]
-            [< List.fold_left
-                (fun i (id,binder,s) ->
-                  let sort =
-                   Hashtbl.find ids_to_inner_sorts (Cic2acic.source_id_of_id id)
-                  in
-                   let attrs =
-                    ("id",id)::("type",sort)::
-                    match binder with
-                       C.Anonymous -> []
-                     | C.Name b -> ["binder",b]
-                   in
-                    [< i ; X.xml_nempty "decl" attrs (aux s) >]
-                ) [< >] prods ;
-               X.xml_nempty "target" [] (aux t)
-            >]
-     | C.ACast (id,v,t) ->
-        let sort = Hashtbl.find ids_to_inner_sorts id in
-         X.xml_nempty "CAST" ["id",id ; "sort",sort]
-          [< X.xml_nempty "term" [] (aux v) ;
-             X.xml_nempty "type" [] (aux t)
-          >]
-     | C.ALambda (last_id,_,_,_) as lambdas ->
-        let rec eat_lambdas =
-         function
-            C.ALambda (id,n,s,t) ->
-             let lambdas,t' = eat_lambdas t in
-              (id,n,s)::lambdas,t'
-          | t -> [],t
-        in
-         let lambdas,t = eat_lambdas lambdas in
-          let sort = Hashtbl.find ids_to_inner_sorts last_id in
-           X.xml_nempty "LAMBDA" ["sort",sort]
-            [< List.fold_left
-                (fun i (id,binder,s) ->
-                  let sort =
-                   Hashtbl.find ids_to_inner_sorts (Cic2acic.source_id_of_id id)
-                  in
-                   let attrs =
-                    ("id",id)::("type",sort)::
-                    match binder with
-                       C.Anonymous -> []
-                     | C.Name b -> ["binder",b]
-                   in
-                    [< i ; X.xml_nempty "decl" attrs (aux s) >]
-                ) [< >] lambdas ;
-               X.xml_nempty "target" [] (aux t)
-            >]
-     | C.ALetIn (xid,C.Anonymous,s,t) ->
-       assert false
-     | C.ALetIn (last_id,C.Name _,_,_) as letins ->
-        let rec eat_letins =
-         function
-            C.ALetIn (id,n,s,t) ->
-             let letins,t' = eat_letins t in
-              (id,n,s)::letins,t'
-          | t -> [],t
-        in
-         let letins,t = eat_letins letins in
-          let sort = Hashtbl.find ids_to_inner_sorts last_id in
-           X.xml_nempty "LETIN" ["sort",sort]
-            [< List.fold_left
-                (fun i (id,binder,s) ->
-                  let sort = Hashtbl.find ids_to_inner_sorts id in
-                   let attrs =
-                    ("id",id)::("sort",sort)::
-                    match binder with
-                       C.Anonymous -> []
-                     | C.Name b -> ["binder",b]
-                   in
-                    [< i ; X.xml_nempty "def" attrs (aux s) >]
-                ) [< >] letins ;
-               X.xml_nempty "target" [] (aux t)
-            >]
-     | C.AAppl (id,li) ->
-        let sort = Hashtbl.find ids_to_inner_sorts id in
-         X.xml_nempty "APPLY" ["id",id ; "sort",sort]
-          [< (List.fold_right (fun x i -> [< (aux x) ; i >]) li [<>])
-          >]
-     | C.AConst (id,uri,exp_named_subst) ->
-        let sort = Hashtbl.find ids_to_inner_sorts id in
-         aux_subst uri
-          (X.xml_empty "CONST"
-            ["uri", (U.string_of_uri uri) ; "id",id ; "sort",sort]
-          ) exp_named_subst
-     | C.AMutInd (id,uri,i,exp_named_subst) ->
-        aux_subst uri
-         (X.xml_empty "MUTIND"
-           ["uri", (U.string_of_uri uri) ;
-            "noType",(string_of_int i) ;
-            "id",id]
-         ) exp_named_subst
-     | C.AMutConstruct (id,uri,i,j,exp_named_subst) ->
-        let sort = Hashtbl.find ids_to_inner_sorts id in
-         aux_subst uri
-          (X.xml_empty "MUTCONSTRUCT"
-            ["uri", (U.string_of_uri uri) ;
-             "noType",(string_of_int i) ; "noConstr",(string_of_int j) ;
-             "id",id ; "sort",sort]
-          ) exp_named_subst
-     | C.AMutCase (id,uri,typeno,ty,te,patterns) ->
-        let sort = Hashtbl.find ids_to_inner_sorts id in
-         X.xml_nempty "MUTCASE"
-          ["uriType",(U.string_of_uri uri) ;
-           "noType", (string_of_int typeno) ;
-           "id", id ; "sort",sort]
-          [< X.xml_nempty "patternsType" [] [< (aux ty) >] ;
-             X.xml_nempty "inductiveTerm" [] [< (aux te) >] ;
-             List.fold_right
-              (fun x i -> [< X.xml_nempty "pattern" [] [< aux x >] ; i>])
-              patterns [<>]
-          >]
-     | C.AFix (id, no, funs) ->
-        let sort = Hashtbl.find ids_to_inner_sorts id in
-         X.xml_nempty "FIX"
-          ["noFun", (string_of_int no) ; "id",id ; "sort",sort]
-          [< List.fold_right
-              (fun (id,fi,ai,ti,bi) i ->
-                [< X.xml_nempty "FixFunction"
-                    ["id",id ; "name", fi ; "recIndex", (string_of_int ai)]
-                    [< X.xml_nempty "type" [] [< aux ti >] ;
-                       X.xml_nempty "body" [] [< aux bi >]
-                    >] ;
-                   i
-                >]
-              ) funs [<>]
-          >]
-     | C.ACoFix (id,no,funs) ->
-        let sort = Hashtbl.find ids_to_inner_sorts id in
-         X.xml_nempty "COFIX"
-          ["noFun", (string_of_int no) ; "id",id ; "sort",sort]
-          [< List.fold_right
-              (fun (id,fi,ti,bi) i ->
-                [< X.xml_nempty "CofixFunction" ["id",id ; "name", fi]
-                    [< X.xml_nempty "type" [] [< aux ti >] ;
-                       X.xml_nempty "body" [] [< aux bi >]
-                    >] ;
-                   i
-                >]
-              ) funs [<>]
-          >]
- and aux_subst buri target subst =
-(*CSC: I have now no way to assign an ID to the explicit named substitution *)
-  let id = None in
-   if subst = [] then
-    target
-   else
-    Xml.xml_nempty "instantiate"
-     (match id with None -> [] | Some id -> ["id",id])
-     [< target ;
-        List.fold_left
-         (fun i (uri,arg) ->
-           let relUri =
-            let buri_frags =
-             Str.split (Str.regexp "/") (UriManager.string_of_uri buri) in
-            let uri_frags = 
-             Str.split (Str.regexp "/") (UriManager.string_of_uri uri)  in
-             let rec find_relUri buri_frags uri_frags =
-              match buri_frags,uri_frags with
-                 [_], _ -> String.concat "/" uri_frags
-               | he1::tl1, he2::tl2 ->
-                  assert (he1 = he2) ;
-                  find_relUri tl1 tl2
-               | _,_ -> assert false (* uri is not relative to buri *)
-             in
-              find_relUri buri_frags uri_frags
-           in
-            [< i ; Xml.xml_nempty "arg" ["relUri", relUri] (aux arg) >]
-         ) [<>] subst
-     >]
-  in
-   aux
-;;
-
-let print_object uri ~ids_to_inner_sorts ~ask_dtd_to_the_getter obj =
- let module C = Cic in
- let module X = Xml in
- let module U = UriManager in
-  let dtdname = dtdname ~ask_dtd_to_the_getter "cic.dtd" in
-   match obj with
-       C.ACurrentProof (id,idbody,n,conjectures,bo,ty,params) ->
-        let params' = param_attribute_of_params params in
-        let xml_for_current_proof_body =
-(*CSC: Should the CurrentProof also have the list of variables it depends on? *)
-(*CSC: I think so. Not implemented yet.                                       *)
-         X.xml_nempty "CurrentProof"
-          ["of",UriManager.string_of_uri uri ; "id", id]
-          [< List.fold_left
-              (fun i (cid,n,canonical_context,t) ->
-                [< i ;
-                   X.xml_nempty "Conjecture"
-                    ["id", cid ; "no",(string_of_int n)]
-                    [< List.fold_left
-                        (fun i (hid,t) ->
-                          [< (match t with
-                                 Some (n,C.ADecl t) ->
-                                  X.xml_nempty "Decl"
-                                   (match n with
-                                       C.Name n' -> ["id",hid;"name",n']
-                                     | C.Anonymous -> ["id",hid])
-                                   (print_term ids_to_inner_sorts t)
-                               | Some (n,C.ADef t) ->
-                                  X.xml_nempty "Def"
-                                   (match n with
-                                       C.Name n' -> ["id",hid;"name",n']
-                                     | C.Anonymous -> ["id",hid])
-                                   (print_term ids_to_inner_sorts t)
-                              | None -> X.xml_empty "Hidden" ["id",hid]
-                             ) ;
-                             i
-                          >]
-                        ) [< >] canonical_context ;
-                       X.xml_nempty "Goal" []
-                        (print_term ids_to_inner_sorts t)
-                    >]
-                >])
-              [<>] conjectures ;
-             X.xml_nempty "body" [] (print_term ids_to_inner_sorts bo) >]
-        in
-        let xml_for_current_proof_type =
-         X.xml_nempty "ConstantType" ["name",n ; "params",params' ; "id", id]
-          (print_term ids_to_inner_sorts ty)
-        in
-        let xmlbo =
-         [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-            X.xml_cdata ("<!DOCTYPE CurrentProof SYSTEM \""^ dtdname ^ "\">\n");
-            xml_for_current_proof_body
-         >] in
-        let xmlty =
-         [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-            X.xml_cdata ("<!DOCTYPE ConstantType SYSTEM \""^ dtdname ^ "\">\n");
-            xml_for_current_proof_type
-         >]
-        in
-         xmlty, Some xmlbo
-     | C.AConstant (id,idbody,n,bo,ty,params) ->
-        let params' = param_attribute_of_params params in
-        let xmlbo =
-         match bo with
-            None -> None
-          | Some bo ->
-             Some
-              [< X.xml_cdata
-                  "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-                 X.xml_cdata
-                  ("<!DOCTYPE ConstantBody SYSTEM \"" ^ dtdname ^ "\">\n") ;
-                 X.xml_nempty "ConstantBody"
-                  ["for",UriManager.string_of_uri uri ; "params",params' ;
-                   "id", id]
-                  [< print_term ids_to_inner_sorts bo >]
-              >]
-        in
-        let xmlty =
-         [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-            X.xml_cdata ("<!DOCTYPE ConstantType SYSTEM \""^ dtdname ^ "\">\n");
-             X.xml_nempty "ConstantType"
-              ["name",n ; "params",params' ; "id", id]
-              [< print_term ids_to_inner_sorts ty >]
-         >]
-        in
-         xmlty, xmlbo
-     | C.AVariable (id,n,bo,ty,params) ->
-        let params' = param_attribute_of_params params in
-        let xmlbo =
-         match bo with
-            None -> [< >]
-          | Some bo ->
-             X.xml_nempty "body" [] [< print_term ids_to_inner_sorts bo >]
-        in
-        let aobj =
-         [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-            X.xml_cdata ("<!DOCTYPE Variable SYSTEM \"" ^ dtdname ^ "\">\n");
-             X.xml_nempty "Variable"
-              ["name",n ; "params",params' ; "id", id]
-              [< xmlbo ;
-                 X.xml_nempty "type" [] (print_term ids_to_inner_sorts ty)
-              >]
-         >]
-        in
-         aobj, None
-     | C.AInductiveDefinition (id,tys,params,nparams) ->
-        let params' = param_attribute_of_params params in
-         [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-            X.xml_cdata
-             ("<!DOCTYPE InductiveDefinition SYSTEM \"" ^ dtdname ^ "\">\n") ;
-            X.xml_nempty "InductiveDefinition"
-             ["noParams",string_of_int nparams ;
-              "id",id ;
-              "params",params']
-             [< (List.fold_left
-                  (fun i (id,typename,finite,arity,cons) ->
-                    [< i ;
-                       X.xml_nempty "InductiveType"
-                        ["id",id ; "name",typename ;
-                         "inductive",(string_of_bool finite)
-                        ]
-                        [< X.xml_nempty "arity" []
-                            (print_term ids_to_inner_sorts arity) ;
-                           (List.fold_left
-                            (fun i (name,lc) ->
-                              [< i ;
-                                 X.xml_nempty "Constructor"
-                                  ["name",name]
-                                  (print_term ids_to_inner_sorts lc)
-                              >]) [<>] cons
-                           )
-                        >]
-                    >]
-                  ) [< >] tys
-                )
-             >]
-         >], None
-;;
-
-let
- print_inner_types curi ~ids_to_inner_sorts ~ids_to_inner_types
-  ~ask_dtd_to_the_getter
-=
- let module C2A = Cic2acic in
- let module X = Xml in
-  let dtdname = dtdname ~ask_dtd_to_the_getter "cictypes.dtd" in
-   [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-      X.xml_cdata
-       ("<!DOCTYPE InnerTypes SYSTEM \"" ^ dtdname ^ "\">\n") ;
-      X.xml_nempty "InnerTypes" ["of",UriManager.string_of_uri curi]
-       (Hashtbl.fold
-         (fun id {C2A.annsynthesized = synty ; C2A.annexpected = expty} x ->
-           [< x ;
-              X.xml_nempty "TYPE" ["of",id]
-               [< X.xml_nempty "synthesized" []
-                [< print_term ids_to_inner_sorts synty >] ;
-                 match expty with
-                   None -> [<>]
-                 | Some expty' -> X.xml_nempty "expected" [] [< print_term ids_to_inner_sorts expty' >]
-               >]
-           >]
-         ) ids_to_inner_types [<>]
-       )
-   >]
-;;
diff --git a/helm/gTopLevel/cic2Xml.mli b/helm/gTopLevel/cic2Xml.mli
deleted file mode 100644 (file)
index 0891d49..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception ImpossiblePossible
-exception NotImplemented
-
-val print_term :
-  ids_to_inner_sorts: (string, string) Hashtbl.t ->
-  Cic.annterm -> Xml.token Stream.t
-
-val print_object :
-  UriManager.uri ->
-  ids_to_inner_sorts: (string, string) Hashtbl.t ->
-  ask_dtd_to_the_getter:bool ->
-  Cic.annobj -> Xml.token Stream.t * Xml.token Stream.t option
-
-val print_inner_types :
-  UriManager.uri ->
-  ids_to_inner_sorts: (string, string) Hashtbl.t ->
-  ids_to_inner_types: (string, Cic2acic.anntypes) Hashtbl.t ->
-  ask_dtd_to_the_getter:bool ->
-  Xml.token Stream.t
diff --git a/helm/gTopLevel/cic2acic.ml b/helm/gTopLevel/cic2acic.ml
deleted file mode 100644 (file)
index a3cdfbb..0000000
+++ /dev/null
@@ -1,408 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-type anntypes =
- {annsynthesized : Cic.annterm ; annexpected : Cic.annterm option}
-;;
-
-let gen_id seed =
- let res = "i" ^ string_of_int !seed in
-  incr seed ;
-  res
-;;
-
-let fresh_id seed ids_to_terms ids_to_father_ids =
- fun father t ->
-  let res = gen_id seed in
-   Hashtbl.add ids_to_father_ids res father ;
-   Hashtbl.add ids_to_terms res t ;
-   res
-;;
-
-let source_id_of_id id = "#source#" ^ id;;
-
-exception NotEnoughElements;;
-exception NameExpected;;
-
-(*CSC: cut&paste da cicPp.ml *)
-(* get_nth l n   returns the nth element of the list l if it exists or *)
-(* raises NotEnoughElements if l has less than n elements             *)
-let rec get_nth l n =
- match (n,l) with
-    (1, he::_) -> he
-  | (n, he::tail) when n > 1 -> get_nth tail (n-1)
-  | (_,_) -> raise NotEnoughElements
-;;
-
-let acic_of_cic_context' seed ids_to_terms ids_to_father_ids ids_to_inner_sorts
-     ids_to_inner_types metasenv context idrefs t expectedty
-=
- let module D = DoubleTypeInference in
- let module T = CicTypeChecker in
- let module C = Cic in
-  let fresh_id' = fresh_id seed ids_to_terms ids_to_father_ids in
-   let terms_to_types =
-    D.double_type_of metasenv context t expectedty
-   in
-    let rec aux computeinnertypes father context idrefs tt =
-     let fresh_id'' = fresh_id' father tt in
-     (*CSC: computeinnertypes era true, il che e' proprio sbagliato, no? *)
-     let aux' = aux computeinnertypes (Some fresh_id'') in
-      (* First of all we compute the inner type and the inner sort *)
-      (* of the term. They may be useful in what follows.          *)
-      (*CSC: This is a very inefficient way of computing inner types *)
-      (*CSC: and inner sorts: very deep terms have their types/sorts *)
-      (*CSC: computed again and again.                               *)
-      let string_of_sort t =
-       match CicReduction.whd context t with 
-          C.Sort C.Prop -> "Prop"
-        | C.Sort C.Set  -> "Set"
-        | C.Sort C.Type -> "Type"
-        | _ -> assert false
-      in
-       let ainnertypes,innertype,innersort,expected_available =
-(*CSC: Here we need the algorithm for Coscoy's double type-inference  *)
-(*CSC: (expected type + inferred type). Just for now we use the usual *)
-(*CSC: type-inference, but the result is very poor. As a very weak    *)
-(*CSC: patch, I apply whd to the computed type. Full beta             *)
-(*CSC: reduction would be a much better option.                       *)
-        let {D.synthesized = synthesized; D.expected = expected} =
-         if computeinnertypes then
-          D.CicHash.find terms_to_types tt
-         else
-          (* We are already in an inner-type and Coscoy's double *)
-          (* type inference algorithm has not been applied.      *)
-          {D.synthesized =
-            CicReduction.whd context (T.type_of_aux' metasenv context tt) ;
-           D.expected = None}
-        in
-         let innersort = T.type_of_aux' metasenv context synthesized in
-          let ainnertypes,expected_available =
-           if computeinnertypes then
-            let annexpected,expected_available =
-               match expected with
-                  None -> None,false
-                | Some expectedty' ->
-                   Some
-                    (aux false (Some fresh_id'') context idrefs expectedty'),
-                    true
-            in
-             Some
-              {annsynthesized =
-                aux false (Some fresh_id'') context idrefs synthesized ;
-               annexpected = annexpected
-              }, expected_available
-           else
-            None,false
-          in
-           ainnertypes,synthesized, string_of_sort innersort, expected_available
-       in
-        let add_inner_type id =
-         match ainnertypes with
-            None -> ()
-          | Some ainnertypes -> Hashtbl.add ids_to_inner_types id ainnertypes
-        in
-         match tt with
-            C.Rel n ->
-             let id =
-              match get_nth context n with
-                 (Some (C.Name s,_)) -> s
-               | _ -> raise NameExpected
-             in
-              Hashtbl.add ids_to_inner_sorts fresh_id'' innersort ;
-              if innersort = "Prop"  && expected_available then
-               add_inner_type fresh_id'' ;
-              C.ARel (fresh_id'', List.nth idrefs (n-1), n, id)
-          | C.Var (uri,exp_named_subst) ->
-             Hashtbl.add ids_to_inner_sorts fresh_id'' innersort ;
-             if innersort = "Prop"  && expected_available then
-              add_inner_type fresh_id'' ;
-             let exp_named_subst' =
-              List.map
-               (function i,t -> i, (aux' context idrefs t)) exp_named_subst
-             in
-              C.AVar (fresh_id'', uri,exp_named_subst')
-          | C.Meta (n,l) ->
-             let (_,canonical_context,_) =
-              List.find (function (m,_,_) -> n = m) metasenv
-             in
-             Hashtbl.add ids_to_inner_sorts fresh_id'' innersort ;
-             if innersort = "Prop"  && expected_available then
-              add_inner_type fresh_id'' ;
-             C.AMeta (fresh_id'', n,
-              (List.map2
-                (fun ct t ->
-                  match (ct, t) with
-                  | None, _ -> None
-                  | _, Some t -> Some (aux' context idrefs t)
-                  | Some _, None -> assert false (* due to typing rules *))
-                canonical_context l))
-          | C.Sort s -> C.ASort (fresh_id'', s)
-          | C.Implicit -> C.AImplicit (fresh_id'')
-          | C.Cast (v,t) ->
-             Hashtbl.add ids_to_inner_sorts fresh_id'' innersort ;
-             if innersort = "Prop" then
-              add_inner_type fresh_id'' ;
-             C.ACast (fresh_id'', aux' context idrefs v, aux' context idrefs t)
-          | C.Prod (n,s,t) ->
-              Hashtbl.add ids_to_inner_sorts fresh_id''
-               (string_of_sort innertype) ;
-                   let sourcetype = T.type_of_aux' metasenv context s in
-                    Hashtbl.add ids_to_inner_sorts (source_id_of_id fresh_id'')
-                     (string_of_sort sourcetype) ;
-              let n' =
-               match n with
-                  C.Anonymous -> n
-                | C.Name n' ->
-                   if D.does_not_occur 1 t then
-                    C.Anonymous
-                   else
-                    C.Name n'
-              in
-               C.AProd
-                (fresh_id'', n', aux' context idrefs s,
-                 aux' ((Some (n, C.Decl s))::context) (fresh_id''::idrefs) t)
-          | C.Lambda (n,s,t) ->
-             Hashtbl.add ids_to_inner_sorts fresh_id'' innersort ;
-                  let sourcetype = T.type_of_aux' metasenv context s in
-                   Hashtbl.add ids_to_inner_sorts (source_id_of_id fresh_id'')
-                    (string_of_sort sourcetype) ;
-              if innersort = "Prop" then
-               begin
-                let father_is_lambda =
-                 match father with
-                    None -> false
-                  | Some father' ->
-                     match Hashtbl.find ids_to_terms father' with
-                        C.Lambda _ -> true
-                      | _ -> false
-                in
-                 if (not father_is_lambda) || expected_available then
-                  add_inner_type fresh_id''
-               end ;
-              C.ALambda
-               (fresh_id'',n, aux' context idrefs s,
-                aux' ((Some (n, C.Decl s)::context)) (fresh_id''::idrefs) t)
-          | C.LetIn (n,s,t) ->
-             Hashtbl.add ids_to_inner_sorts fresh_id'' innersort ;
-             if innersort = "Prop" then
-              add_inner_type fresh_id'' ;
-             C.ALetIn
-              (fresh_id'', n, aux' context idrefs s,
-               aux' ((Some (n, C.Def s))::context) (fresh_id''::idrefs) t)
-          | C.Appl l ->
-             Hashtbl.add ids_to_inner_sorts fresh_id'' innersort ;
-             if innersort = "Prop" then
-              add_inner_type fresh_id'' ;
-             C.AAppl (fresh_id'', List.map (aux' context idrefs) l)
-          | C.Const (uri,exp_named_subst) ->
-             Hashtbl.add ids_to_inner_sorts fresh_id'' innersort ;
-             if innersort = "Prop"  && expected_available then
-              add_inner_type fresh_id'' ;
-             let exp_named_subst' =
-              List.map
-               (function i,t -> i, (aux' context idrefs t)) exp_named_subst
-             in
-              C.AConst (fresh_id'', uri, exp_named_subst')
-          | C.MutInd (uri,tyno,exp_named_subst) ->
-             let exp_named_subst' =
-              List.map
-               (function i,t -> i, (aux' context idrefs t)) exp_named_subst
-             in
-              C.AMutInd (fresh_id'', uri, tyno, exp_named_subst')
-          | C.MutConstruct (uri,tyno,consno,exp_named_subst) ->
-             Hashtbl.add ids_to_inner_sorts fresh_id'' innersort ;
-             if innersort = "Prop"  && expected_available then
-              add_inner_type fresh_id'' ;
-             let exp_named_subst' =
-              List.map
-               (function i,t -> i, (aux' context idrefs t)) exp_named_subst
-             in
-              C.AMutConstruct (fresh_id'', uri, tyno, consno, exp_named_subst')
-          | C.MutCase (uri, tyno, outty, term, patterns) ->
-             Hashtbl.add ids_to_inner_sorts fresh_id'' innersort ;
-             if innersort = "Prop" then
-              add_inner_type fresh_id'' ;
-             C.AMutCase (fresh_id'', uri, tyno, aux' context idrefs outty,
-              aux' context idrefs term, List.map (aux' context idrefs) patterns)
-          | C.Fix (funno, funs) ->
-             let fresh_idrefs =
-              List.map (function _ -> gen_id seed) funs in
-             let new_idrefs = List.rev fresh_idrefs @ idrefs in
-             let tys =
-              List.map (fun (name,_,ty,_) -> Some (C.Name name, C.Decl ty)) funs
-             in
-              Hashtbl.add ids_to_inner_sorts fresh_id'' innersort ;
-              if innersort = "Prop" then
-               add_inner_type fresh_id'' ;
-              C.AFix (fresh_id'', funno,
-               List.map2
-                (fun id (name, indidx, ty, bo) ->
-                  (id, name, indidx, aux' context idrefs ty,
-                    aux' (tys@context) new_idrefs bo)
-                ) fresh_idrefs funs
-             )
-          | C.CoFix (funno, funs) ->
-             let fresh_idrefs =
-              List.map (function _ -> gen_id seed) funs in
-             let new_idrefs = List.rev fresh_idrefs @ idrefs in
-             let tys =
-              List.map (fun (name,ty,_) -> Some (C.Name name, C.Decl ty)) funs
-             in
-              Hashtbl.add ids_to_inner_sorts fresh_id'' innersort ;
-              if innersort = "Prop" then
-               add_inner_type fresh_id'' ;
-              C.ACoFix (fresh_id'', funno,
-               List.map2
-                (fun id (name, ty, bo) ->
-                  (id, name, aux' context idrefs ty,
-                    aux' (tys@context) new_idrefs bo)
-                ) fresh_idrefs funs
-              )
-        in
-         aux true None context idrefs t
-;;
-
-let acic_of_cic_context metasenv context idrefs t =
- let ids_to_terms = Hashtbl.create 503 in
- let ids_to_father_ids = Hashtbl.create 503 in
- let ids_to_inner_sorts = Hashtbl.create 503 in
- let ids_to_inner_types = Hashtbl.create 503 in
- let seed = ref 0 in
-   acic_of_cic_context' seed ids_to_terms ids_to_father_ids ids_to_inner_sorts
-    ids_to_inner_types metasenv context idrefs t,
-   ids_to_terms, ids_to_father_ids, ids_to_inner_sorts, ids_to_inner_types
-;;
-
-let acic_object_of_cic_object obj =
- let module C = Cic in
-  let ids_to_terms = Hashtbl.create 503 in
-  let ids_to_father_ids = Hashtbl.create 503 in
-  let ids_to_inner_sorts = Hashtbl.create 503 in
-  let ids_to_inner_types = Hashtbl.create 503 in
-  let ids_to_conjectures = Hashtbl.create 11 in
-  let ids_to_hypotheses = Hashtbl.create 127 in
-  let hypotheses_seed = ref 0 in
-  let conjectures_seed = ref 0 in
-  let seed = ref 0 in
-  let acic_term_of_cic_term_context' =
-   acic_of_cic_context' seed ids_to_terms ids_to_father_ids ids_to_inner_sorts
-    ids_to_inner_types in
-  let acic_term_of_cic_term' = acic_term_of_cic_term_context' [] [] [] in
-   let aobj =
-    match obj with
-      C.Constant (id,Some bo,ty,params) ->
-       let abo = acic_term_of_cic_term' bo (Some ty) in
-       let aty = acic_term_of_cic_term' ty None in
-        C.AConstant
-         ("mettereaposto",Some "mettereaposto2",id,Some abo,aty, params)
-    | C.Constant (id,None,ty,params) ->
-       let aty = acic_term_of_cic_term' ty None in
-        C.AConstant
-         ("mettereaposto",None,id,None,aty, params)
-    | C.Variable (id,bo,ty,params) ->
-       let abo =
-        match bo with
-           None -> None
-         | Some bo -> Some (acic_term_of_cic_term' bo (Some ty))
-       in
-       let aty = acic_term_of_cic_term' ty None in
-        C.AVariable
-         ("mettereaposto",id,abo,aty, params)
-    | C.CurrentProof (id,conjectures,bo,ty,params) ->
-       let aconjectures =
-        List.map
-         (function (i,canonical_context,term) as conjecture ->
-           let cid = "c" ^ string_of_int !conjectures_seed in
-            Hashtbl.add ids_to_conjectures cid conjecture ;
-            incr conjectures_seed ;
-            let idrefs',revacanonical_context =
-             let rec aux context idrefs =
-              function
-                 [] -> idrefs,[]
-               | hyp::tl ->
-                  let hid = "h" ^ string_of_int !hypotheses_seed in
-                  let new_idrefs = hid::idrefs in
-                   Hashtbl.add ids_to_hypotheses hid hyp ;
-                   incr hypotheses_seed ;
-                   match hyp with
-                      (Some (n,C.Decl t)) ->
-                        let final_idrefs,atl =
-                         aux (hyp::context) new_idrefs tl in
-                        let at =
-                         acic_term_of_cic_term_context'
-                          conjectures context idrefs t None
-                        in
-                         final_idrefs,(hid,Some (n,C.ADecl at))::atl
-                    | (Some (n,C.Def t)) ->
-                        let final_idrefs,atl =
-                         aux (hyp::context) new_idrefs tl in
-                        let at =
-                         acic_term_of_cic_term_context'
-                          conjectures context idrefs t None
-                        in
-                         final_idrefs,(hid,Some (n,C.ADef at))::atl
-                    | None ->
-                       let final_idrefs,atl =
-                        aux (hyp::context) new_idrefs tl
-                       in
-                        final_idrefs,(hid,None)::atl
-             in
-              aux [] [] (List.rev canonical_context)
-            in
-             let aterm =
-              acic_term_of_cic_term_context' conjectures
-               canonical_context idrefs' term None
-             in
-              (cid,i,(List.rev revacanonical_context),aterm)
-         ) conjectures in
-       let abo =
-        acic_term_of_cic_term_context' conjectures [] [] bo (Some ty) in
-       let aty = acic_term_of_cic_term_context' conjectures [] [] ty None in
-        C.ACurrentProof
-         ("mettereaposto","mettereaposto2",id,aconjectures,abo,aty,params)
-    | C.InductiveDefinition (tys,params,paramsno) ->
-       let context =
-        List.map
-         (fun (name,_,arity,_) -> Some (C.Name name, C.Decl arity)) tys in
-       let idrefs = List.map (function _ -> gen_id seed) tys in
-       let atys =
-        List.map2
-         (fun id (name,inductive,ty,cons) ->
-           let acons =
-            List.map
-             (function (name,ty) ->
-               (name,
-                 acic_term_of_cic_term_context' [] context idrefs ty None)
-             ) cons
-           in
-            (id,name,inductive,acic_term_of_cic_term' ty None,acons)
-         ) (List.rev idrefs) tys
-       in
-        C.AInductiveDefinition ("mettereaposto",atys,params,paramsno)
-   in
-    aobj,ids_to_terms,ids_to_father_ids,ids_to_inner_sorts,ids_to_inner_types,
-     ids_to_conjectures,ids_to_hypotheses
-;;
diff --git a/helm/gTopLevel/cic2acic.mli b/helm/gTopLevel/cic2acic.mli
deleted file mode 100644 (file)
index b34d343..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception NotEnoughElements
-exception NameExpected
-
-val source_id_of_id : string -> string
-
-type anntypes =
- {annsynthesized : Cic.annterm ; annexpected : Cic.annterm option}
-;;
-
-val acic_of_cic_context' :
-  int ref ->                              (* seed *)
-  (Cic.id, Cic.term) Hashtbl.t ->         (* ids_to_terms *)
-  (Cic.id, Cic.id option) Hashtbl.t ->    (* ids_to_father_ids *)
-  (Cic.id, string) Hashtbl.t ->           (* ids_to_inner_sorts *)
-  (Cic.id, anntypes) Hashtbl.t ->         (* ids_to_inner_types *)
-  Cic.metasenv ->                         (* metasenv *)
-  Cic.context ->                          (* context *)
-  Cic.id list ->                          (* idrefs *)
-  Cic.term ->                             (* term *)
-  Cic.term option ->                      (* expected type *)
-  Cic.annterm                             (* annotated term *)
-
-val acic_object_of_cic_object :
-  Cic.obj ->                              (* object *)
-   Cic.annobj *                           (* annotated object *)
-    (Cic.id, Cic.term) Hashtbl.t *        (* ids_to_terms *)
-    (Cic.id, Cic.id option) Hashtbl.t *   (* ids_to_father_ids *)
-    (Cic.id, string) Hashtbl.t *          (* ids_to_inner_sorts *)
-    (Cic.id, anntypes) Hashtbl.t *        (* ids_to_inner_types *)
-    (Cic.id, Cic.conjecture) Hashtbl.t *  (* ids_to_conjectures *)
-    (Cic.id, Cic.hypothesis) Hashtbl.t    (* ids_to_hypotheses *)
diff --git a/helm/gTopLevel/dictionary-cic.xml b/helm/gTopLevel/dictionary-cic.xml
deleted file mode 100644 (file)
index 29397d4..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- This file is part of EdiTeX, an editor of mathematical
- expressions based on TeX syntax.
- Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
-                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
- For more information, please visit the project's home page
- http://helm.cs.unibo.it/editex/
- or send an email to <lpadovan@cs.unibo.it>
--->
-
-<dictionary name="TeX">
-
-  <include href="/usr/share/editex/dictionary-tex.xml"/>
-
-  <entry name="Prop" class="i" val="Prop"/>
-  <entry name="Set"  class="i" val="Set"/>
-  <entry name="Type" class="i" val="Type"/>
-
-</dictionary>
diff --git a/helm/gTopLevel/disambiguate.ml b/helm/gTopLevel/disambiguate.ml
deleted file mode 100644 (file)
index ce41208..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 06/01/2002                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-(** This module provides a functor to disambiguate the input **)
-(** given a set of user-interface call-backs                 **)
-
-module type Callbacks =
-  sig
-    (* The following two functions are used to save/restore the metasenv *)
-    (* before/after the parsing.                                         *)
-    (*CSC: This should be made functional sooner or later! *)
-    val get_metasenv : unit -> Cic.metasenv
-    val set_metasenv : Cic.metasenv -> unit
-
-    val output_html : string -> unit
-    val interactive_user_uri_choice :
-      selection_mode:[`SINGLE | `EXTENDED] ->
-      ?ok:string ->
-      ?enable_button_for_non_vars:bool ->
-      title:string -> msg:string -> id:string -> string list -> string list
-    val interactive_interpretation_choice :
-      (string * string) list list -> int
-    val input_or_locate_uri : title:string -> UriManager.uri
-  end
-;;
-
-type domain_and_interpretation =
- CicTextualParser0.interpretation_domain_item list *
-  CicTextualParser0.interpretation
-;;
-
-module Make(C:Callbacks) =
-  struct
-
-   let locate_one_id mqi_handle id =
-    let query  =  MQueryGenerator.locate id in
-    let result = MQueryInterpreter.execute mqi_handle query in
-    let uris =
-     List.map
-      (function uri,_ ->
-        MQueryMisc.wrong_xpointer_format_from_wrong_xpointer_format' uri
-      ) result in
-     C.output_html "<h1>Locate Query: </h1><pre>";
-     MQueryUtil.text_of_query C.output_html query ""; 
-     C.output_html "<h1>Result:</h1>";
-     MQueryUtil.text_of_result C.output_html result "<br>";
-     let uris' =
-      match uris with
-         [] ->
-          [UriManager.string_of_uri
-           (C.input_or_locate_uri
-             ~title:("URI matching \"" ^ id ^ "\" unknown."))]
-       | [uri] -> [uri]
-       | _ ->
-         C.interactive_user_uri_choice
-          ~selection_mode:`EXTENDED
-          ~ok:"Try every selection."
-          ~enable_button_for_non_vars:true
-          ~title:"Ambiguous input."
-          ~msg:
-            ("Ambiguous input \"" ^ id ^
-             "\". Please, choose one or more interpretations:")
-          ~id
-          uris
-     in
-      List.map MQueryMisc.cic_textual_parser_uri_of_string uris'
-
-
-   exception ThereDoesNotExistAnyWellTypedInterpretationOfTheInput
-
-   type test_result =
-      Ok of Cic.term * Cic.metasenv
-    | Ko
-    | Uncertain
-
-   type ambiguous_choices =
-      Uris of CicTextualParser0.uri list
-    | Symbols of (CicTextualParser0.interpretation -> Cic.term) list
-
-   let disambiguate_input mqi_handle context metasenv dom mk_metasenv_and_expr ~id_to_uris=
-    let known_ids,resolve_id = id_to_uris in
-    let dom' =
-     let rec filter =
-      function
-         [] -> []
-       | he::tl ->
-          if List.mem he known_ids then filter tl else he::(filter tl)
-     in
-      filter dom
-    in
-     (* for each id in dom' we get the list of uris associated to it *)
-     let list_of_uris =
-      List.map
-       (function
-           CicTextualParser0.Id id -> Uris (locate_one_id mqi_handle id)
-         | CicTextualParser0.Symbol (descr,choices) ->
-            (* CSC: Implementare la funzione di filtraggio manuale *)
-            (* CSC: corrispondente alla locate_one_id              *)
-            Symbols (List.map snd choices)
-       ) dom' in
-     let tests_no =
-      List.fold_left
-       (fun i uris ->
-         let len =
-          match uris with
-             Uris l -> List.length l
-           | Symbols l -> List.length l
-         in
-          i * len
-       ) 1 list_of_uris
-     in
-      if tests_no > 1 then
-       C.output_html
-        ("<h1>Disambiguation phase started: up to " ^
-          string_of_int tests_no ^ " cases will be tried.") ;
-     (* and now we compute the list of all possible assignments from *)
-     (* id to uris that generate well-typed terms                    *)
-     let resolve_ids =
-      (* function to test if a partial interpretation is so far correct *)
-      let test resolve_id residual_dom =
-       (* We put implicits in place of every identifier that is not *)
-       (* resolved by resolve_id                                    *)
-       let resolve_id' =
-        List.fold_left
-         (fun f id ->
-           function id' ->
-            if id = id' then Some (CicTextualParser0.Implicit) else f id'
-         ) resolve_id residual_dom
-       in
-        (* and we try to refine the term *)
-        let saved_status = C.get_metasenv () in
-        let metasenv',expr = mk_metasenv_and_expr resolve_id' in
-(*CSC: Bug here: we do not try to typecheck also the metasenv' *)
-        (* The parser is imperative ==> we must restore the old status ;-(( *)
-        C.set_metasenv saved_status ;
-         try
-          let term,_,_,metasenv'' =
-           CicRefine.type_of_aux' metasenv' context expr
-          in
-           Ok (term,metasenv'')
-         with
-            CicRefine.MutCaseFixAndCofixRefineNotImplemented ->
-             (try
-               let term = CicTypeChecker.type_of_aux' metasenv' context expr in
-                Ok (term,metasenv')
-              with _ -> Ko
-             )
-          | CicRefine.Uncertain _ ->
-prerr_endline ("%%% UNCERTAIN!!! " ^ CicPp.ppterm expr) ;
-             Uncertain
-          | _ ->
-prerr_endline ("%%% PRUNED!!! " ^ CicPp.ppterm expr) ;
-            Ko
-      in
-      let rec aux resolve_id ids list_of_uris =
-       match ids,list_of_uris with
-          [],[] ->
-           (match test resolve_id [] with
-               Ok (term,metasenv) -> [resolve_id,term,metasenv]
-             | Ko | Uncertain -> [])
-        | id::idtl,uris::uristl ->
-           let rec filter =
-            function
-               [] -> []
-             | (uri : CicTextualParser0.interpretation_codomain_item)::uritl ->
-                let resolve_id' =
-                 function id' -> if id = id' then Some uri else resolve_id id'
-                in
-                 (match test resolve_id' idtl with
-                     Ok (term,metasenv) ->
-                      (* the next three ``if''s are used to avoid the base   *)
-                      (* case where the term would be refined a second time. *)
-                      (if uristl = [] then
-                        [resolve_id',term,metasenv]
-                       else
-                        (aux resolve_id' idtl uristl)
-                      ) @ (filter uritl)
-                   | Uncertain ->
-                      (if uristl = [] then []
-                       else
-                        (aux resolve_id' idtl uristl)
-                      ) @ (filter uritl)
-                   | Ko ->
-                      filter uritl
-                 )
-           in
-            (match uris with
-                Uris uris ->
-                 filter
-                  (List.map (function uri -> CicTextualParser0.Uri uri) uris)
-              | Symbols symbols ->
-                 filter
-                  (List.map
-                    (function sym -> CicTextualParser0.Term sym) symbols))
-        | _,_ -> assert false
-      in
-       aux resolve_id dom' list_of_uris
-     in
-      List.iter
-       (function (resolve,term,newmetasenv) ->
-         (* If metasen <> newmetasenv is a normal condition, we should *)
-         (* be prepared to apply the returned substitution to the      *)
-         (* whole current proof.                                       *)
-         if metasenv <> newmetasenv then
-          begin
-           prerr_endline
-            ("+++++ ASSERTION FAILED: " ^
-             "a refine operation should not modify the metasenv") ;
-           (* an assert would raise an exception that could be caught *)
-           exit 1
-          end
-       ) resolve_ids ;
-      let resolve_id',term,metasenv' =
-       match resolve_ids with
-          [] -> raise ThereDoesNotExistAnyWellTypedInterpretationOfTheInput
-        | [resolve_id] -> resolve_id
-        | _ ->
-          let choices =
-           List.map
-            (function (resolve,_,_) ->
-              List.map
-               (function id ->
-                 (match id with
-                     CicTextualParser0.Id id -> id
-                   | CicTextualParser0.Symbol (descr,_) -> descr
-                 ),
-                  match resolve id with
-                     None -> assert false
-                   | Some (CicTextualParser0.Uri uri) ->
-                      (match uri with
-                          CicTextualParser0.ConUri uri
-                        | CicTextualParser0.VarUri uri ->
-                           UriManager.string_of_uri uri
-                        | CicTextualParser0.IndTyUri (uri,tyno) ->
-                           UriManager.string_of_uri uri ^ "#xpointer(1/" ^
-                            string_of_int (tyno+1) ^ ")"
-                        | CicTextualParser0.IndConUri (uri,tyno,consno) ->
-                           UriManager.string_of_uri uri ^ "#xpointer(1/" ^
-                            string_of_int (tyno+1) ^ "/" ^ string_of_int consno ^                           ")")
-                   | Some (CicTextualParser0.Term term) ->
-                      (* CSC: Implementare resa delle scelte *)
-                      "To be implemented XXX01"
-                   | Some CicTextualParser0.Implicit -> assert false
-               ) dom
-            ) resolve_ids
-          in
-           let index = C.interactive_interpretation_choice choices in
-            List.nth resolve_ids index
-      in
-       (known_ids @ dom', resolve_id'), metasenv',term
-end
-;;
diff --git a/helm/gTopLevel/disambiguate.mli b/helm/gTopLevel/disambiguate.mli
deleted file mode 100644 (file)
index 9fdfb89..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 15/01/2003                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-(** This module provides a functor to disambiguate the input **)
-(** given a set of user-interface call-backs                 **)
-
-module type Callbacks =
-  sig
-    (* The following two functions are used to save/restore the metasenv *)
-    (* before/after the parsing.                                         *)
-    (*CSC: This should be made functional sooner or later! *)
-    val get_metasenv : unit -> Cic.metasenv
-    val set_metasenv : Cic.metasenv -> unit
-
-    val output_html : string -> unit
-    val interactive_user_uri_choice :
-      selection_mode:[`SINGLE | `EXTENDED] ->
-      ?ok:string ->
-      ?enable_button_for_non_vars:bool ->
-      title:string -> msg:string -> id:string -> string list -> string list
-    val interactive_interpretation_choice :
-      (string * string) list list -> int
-    val input_or_locate_uri : title:string -> UriManager.uri
-  end
-
-type domain_and_interpretation =
- CicTextualParser0.interpretation_domain_item list *
-  CicTextualParser0.interpretation
-
-module Make (C : Callbacks) :
-    sig
-      exception ThereDoesNotExistAnyWellTypedInterpretationOfTheInput
-      val disambiguate_input :
-        MQIConn.handle -> 
-        Cic.context ->
-        Cic.metasenv ->
-        CicTextualParser0.interpretation_domain_item list ->
-        (CicTextualParser0.interpretation -> Cic.metasenv * Cic.term) ->
-        id_to_uris:domain_and_interpretation ->
-        domain_and_interpretation * Cic.metasenv * Cic.term
-    end
diff --git a/helm/gTopLevel/doubleTypeInference.ml b/helm/gTopLevel/doubleTypeInference.ml
deleted file mode 100644 (file)
index 71422ce..0000000
+++ /dev/null
@@ -1,687 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception Impossible of int;;
-exception NotWellTyped of string;;
-exception WrongUriToConstant of string;;
-exception WrongUriToVariable of string;;
-exception WrongUriToMutualInductiveDefinitions of string;;
-exception ListTooShort;;
-exception RelToHiddenHypothesis;;
-
-type types = {synthesized : Cic.term ; expected : Cic.term option};;
-
-(* does_not_occur n te                              *)
-(* returns [true] if [Rel n] does not occur in [te] *)
-let rec does_not_occur n =
- let module C = Cic in
-  function
-     C.Rel m when m = n -> false
-   | C.Rel _
-   | C.Meta _
-   | C.Sort _
-   | C.Implicit -> true 
-   | C.Cast (te,ty) ->
-      does_not_occur n te && does_not_occur n ty
-   | C.Prod (name,so,dest) ->
-      does_not_occur n so &&
-       does_not_occur (n + 1) dest
-   | C.Lambda (name,so,dest) ->
-      does_not_occur n so &&
-       does_not_occur (n + 1) dest
-   | C.LetIn (name,so,dest) ->
-      does_not_occur n so &&
-       does_not_occur (n + 1) dest
-   | C.Appl l ->
-      List.fold_right (fun x i -> i && does_not_occur n x) l true
-   | C.Var (_,exp_named_subst)
-   | C.Const (_,exp_named_subst)
-   | C.MutInd (_,_,exp_named_subst)
-   | C.MutConstruct (_,_,_,exp_named_subst) ->
-      List.fold_right (fun (_,x) i -> i && does_not_occur n x)
-       exp_named_subst true
-   | C.MutCase (_,_,out,te,pl) ->
-      does_not_occur n out && does_not_occur n te &&
-       List.fold_right (fun x i -> i && does_not_occur n x) pl true
-   | C.Fix (_,fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len in
-       let tys =
-        List.map (fun (n,_,ty,_) -> Some (C.Name n,(Cic.Decl ty))) fl
-       in
-        List.fold_right
-         (fun (_,_,ty,bo) i ->
-           i && does_not_occur n ty &&
-           does_not_occur n_plus_len bo
-         ) fl true
-   | C.CoFix (_,fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len in
-       let tys =
-        List.map (fun (n,ty,_) -> Some (C.Name n,(Cic.Decl ty))) fl
-       in
-        List.fold_right
-         (fun (_,ty,bo) i ->
-           i && does_not_occur n ty &&
-           does_not_occur n_plus_len bo
-         ) fl true
-;;
-
-(*CSC: potrebbe creare applicazioni di applicazioni *)
-(*CSC: ora non e' piu' head, ma completa!!! *)
-let rec head_beta_reduce =
- let module S = CicSubstitution in
- let module C = Cic in
-  function
-      C.Rel _ as t -> t
-    | C.Var (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (i,t) -> i, head_beta_reduce t) exp_named_subst
-       in
-        C.Var (uri,exp_named_subst)
-    | C.Meta (n,l) ->
-       C.Meta (n,
-        List.map
-         (function None -> None | Some t -> Some (head_beta_reduce t)) l
-       )
-    | C.Sort _ as t -> t
-    | C.Implicit -> assert false
-    | C.Cast (te,ty) ->
-       C.Cast (head_beta_reduce te, head_beta_reduce ty)
-    | C.Prod (n,s,t) ->
-       C.Prod (n, head_beta_reduce s, head_beta_reduce t)
-    | C.Lambda (n,s,t) ->
-       C.Lambda (n, head_beta_reduce s, head_beta_reduce t)
-    | C.LetIn (n,s,t) ->
-       C.LetIn (n, head_beta_reduce s, head_beta_reduce t)
-    | C.Appl ((C.Lambda (name,s,t))::he::tl) ->
-       let he' = S.subst he t in
-        if tl = [] then
-         head_beta_reduce he'
-        else
-         head_beta_reduce (C.Appl (he'::tl))
-    | C.Appl l ->
-       C.Appl (List.map head_beta_reduce l)
-    | C.Const (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (i,t) -> i, head_beta_reduce t) exp_named_subst
-       in
-        C.Const (uri,exp_named_subst')
-    | C.MutInd (uri,i,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (i,t) -> i, head_beta_reduce t) exp_named_subst
-       in
-        C.MutInd (uri,i,exp_named_subst')
-    | C.MutConstruct (uri,i,j,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (i,t) -> i, head_beta_reduce t) exp_named_subst
-       in
-        C.MutConstruct (uri,i,j,exp_named_subst')
-    | C.MutCase (sp,i,outt,t,pl) ->
-       C.MutCase (sp,i,head_beta_reduce outt,head_beta_reduce t,
-        List.map head_beta_reduce pl)
-    | C.Fix (i,fl) ->
-       let fl' =
-        List.map
-         (function (name,i,ty,bo) ->
-           name,i,head_beta_reduce ty,head_beta_reduce bo
-         ) fl
-       in
-        C.Fix (i,fl')
-    | C.CoFix (i,fl) ->
-       let fl' =
-        List.map
-         (function (name,ty,bo) ->
-           name,head_beta_reduce ty,head_beta_reduce bo
-         ) fl
-       in
-        C.CoFix (i,fl')
-;;
-
-(* syntactic_equality up to cookingsno for uris *)
-(* (which is often syntactically irrilevant),   *)
-(* distinction between fake dependent products  *)
-(* and non-dependent products, alfa-conversion  *)
-(*CSC: must alfa-conversion be considered or not? *)
-let syntactic_equality t t' =
- let module C = Cic in
- let rec syntactic_equality t t' =
-  if t = t' then true
-  else
-   match t, t' with
-      C.Var (uri,exp_named_subst), C.Var (uri',exp_named_subst') ->
-       UriManager.eq uri uri' &&
-        syntactic_equality_exp_named_subst exp_named_subst exp_named_subst'
-    | C.Cast (te,ty), C.Cast (te',ty') ->
-       syntactic_equality te te' &&
-        syntactic_equality ty ty'
-    | C.Prod (_,s,t), C.Prod (_,s',t') ->
-       syntactic_equality s s' &&
-        syntactic_equality t t'
-    | C.Lambda (_,s,t), C.Lambda (_,s',t') ->
-       syntactic_equality s s' &&
-        syntactic_equality t t'
-    | C.LetIn (_,s,t), C.LetIn(_,s',t') ->
-       syntactic_equality s s' &&
-        syntactic_equality t t'
-    | C.Appl l, C.Appl l' ->
-       List.fold_left2 (fun b t1 t2 -> b && syntactic_equality t1 t2) true l l'
-    | C.Const (uri,exp_named_subst), C.Const (uri',exp_named_subst') ->
-       UriManager.eq uri uri' &&
-        syntactic_equality_exp_named_subst exp_named_subst exp_named_subst'
-    | C.MutInd (uri,i,exp_named_subst), C.MutInd (uri',i',exp_named_subst') ->
-       UriManager.eq uri uri' && i = i' &&
-        syntactic_equality_exp_named_subst exp_named_subst exp_named_subst'
-    | C.MutConstruct (uri,i,j,exp_named_subst),
-      C.MutConstruct (uri',i',j',exp_named_subst') ->
-       UriManager.eq uri uri' && i = i' && j = j' &&
-        syntactic_equality_exp_named_subst exp_named_subst exp_named_subst'
-    | C.MutCase (sp,i,outt,t,pl), C.MutCase (sp',i',outt',t',pl') ->
-       UriManager.eq sp sp' && i = i' &&
-        syntactic_equality outt outt' &&
-         syntactic_equality t t' &&
-          List.fold_left2
-           (fun b t1 t2 -> b && syntactic_equality t1 t2) true pl pl'
-    | C.Fix (i,fl), C.Fix (i',fl') ->
-       i = i' &&
-        List.fold_left2
-         (fun b (_,i,ty,bo) (_,i',ty',bo') ->
-           b && i = i' &&
-            syntactic_equality ty ty' &&
-             syntactic_equality bo bo') true fl fl'
-    | C.CoFix (i,fl), C.CoFix (i',fl') ->
-       i = i' &&
-        List.fold_left2
-         (fun b (_,ty,bo) (_,ty',bo') ->
-           b &&
-            syntactic_equality ty ty' &&
-             syntactic_equality bo bo') true fl fl'
-    | _, _ -> false (* we already know that t != t' *)
- and syntactic_equality_exp_named_subst exp_named_subst1 exp_named_subst2 =
-  List.fold_left2
-   (fun b (_,t1) (_,t2) -> b && syntactic_equality t1 t2) true
-   exp_named_subst1 exp_named_subst2
- in
-  try
-   syntactic_equality t t'
-  with
-   _ -> false
-;;
-
-let rec split l n =
- match (l,n) with
-    (l,0) -> ([], l)
-  | (he::tl, n) -> let (l1,l2) = split tl (n-1) in (he::l1,l2)
-  | (_,_) -> raise ListTooShort
-;;
-
-let type_of_constant uri =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  let cobj =
-   match CicEnvironment.is_type_checked uri with
-      CicEnvironment.CheckedObj cobj -> cobj
-    | CicEnvironment.UncheckedObj uobj ->
-       raise (NotWellTyped "Reference to an unchecked constant")
-  in
-   match cobj with
-      C.Constant (_,_,ty,_) -> ty
-    | C.CurrentProof (_,_,_,ty,_) -> ty
-    | _ -> raise (WrongUriToConstant (U.string_of_uri uri))
-;;
-
-let type_of_variable uri =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  match CicEnvironment.is_type_checked uri with
-     CicEnvironment.CheckedObj (C.Variable (_,_,ty,_)) -> ty
-   | CicEnvironment.UncheckedObj (C.Variable _) ->
-      raise (NotWellTyped "Reference to an unchecked variable")
-   |  _ -> raise (WrongUriToVariable (UriManager.string_of_uri uri))
-;;
-
-let type_of_mutual_inductive_defs uri i =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  let cobj =
-   match CicEnvironment.is_type_checked uri with
-      CicEnvironment.CheckedObj cobj -> cobj
-    | CicEnvironment.UncheckedObj uobj ->
-       raise (NotWellTyped "Reference to an unchecked inductive type")
-  in
-   match cobj with
-      C.InductiveDefinition (dl,_,_) ->
-       let (_,_,arity,_) = List.nth dl i in
-        arity
-    | _ -> raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri))
-;;
-
-let type_of_mutual_inductive_constr uri i j =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  let cobj =
-   match CicEnvironment.is_type_checked uri with
-      CicEnvironment.CheckedObj cobj -> cobj
-    | CicEnvironment.UncheckedObj uobj ->
-       raise (NotWellTyped "Reference to an unchecked constructor")
-  in
-   match cobj with
-      C.InductiveDefinition (dl,_,_) ->
-       let (_,_,_,cl) = List.nth dl i in
-        let (_,ty) = List.nth cl (j-1) in
-         ty
-    | _ -> raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri))
-;;
-
-module CicHash =
- Hashtbl.Make
-  (struct
-    type t = Cic.term
-    let equal = (==)
-    let hash = Hashtbl.hash
-   end)
-;;
-
-(* type_of_aux' is just another name (with a different scope) for type_of_aux *)
-let rec type_of_aux' subterms_to_types metasenv context t expectedty =
- (* Coscoy's double type-inference algorithm             *)
- (* It computes the inner-types of every subterm of [t], *)
- (* even when they are not needed to compute the types   *)
- (* of other terms.                                      *)
- let rec type_of_aux context t expectedty =
-  let module C = Cic in
-  let module R = CicReduction in
-  let module S = CicSubstitution in
-  let module U = UriManager in
-   let synthesized =
-    match t with
-       C.Rel n ->
-        (try
-          match List.nth context (n - 1) with
-             Some (_,C.Decl t) -> S.lift n t
-           | Some (_,C.Def bo) -> type_of_aux context (S.lift n bo) expectedty
-          | None -> raise RelToHiddenHypothesis
-         with
-          _ -> raise (NotWellTyped "Not a close term")
-        )
-     | C.Var (uri,exp_named_subst) ->
-        visit_exp_named_subst context uri exp_named_subst ;
-        CicSubstitution.subst_vars exp_named_subst (type_of_variable uri)
-     | C.Meta (n,l) -> 
-        (* Let's visit all the subterms that will not be visited later *)
-        let (_,canonical_context,_) =
-         List.find (function (m,_,_) -> n = m) metasenv
-        in
-         let lifted_canonical_context =
-          let rec aux i =
-           function
-              [] -> []
-            | (Some (n,C.Decl t))::tl ->
-               (Some (n,C.Decl (S.lift_meta l (S.lift i t))))::(aux (i+1) tl)
-            | (Some (n,C.Def t))::tl ->
-               (Some (n,C.Def (S.lift_meta l (S.lift i t))))::(aux (i+1) tl)
-            | None::tl -> None::(aux (i+1) tl)
-          in
-           aux 1 canonical_context
-         in
-          let _ =
-           List.iter2
-            (fun t ct ->
-              match t,ct with
-                 _,None -> ()
-               | Some t,Some (_,C.Def ct) ->
-                  let expected_type =
-                   R.whd context
-                    (CicTypeChecker.type_of_aux' metasenv context ct)
-                  in
-                   (* Maybe I am a bit too paranoid, because   *)
-                   (* if the term is well-typed than t and ct  *)
-                   (* are convertible. Nevertheless, I compute *)
-                   (* the expected type.                       *)
-                   ignore (type_of_aux context t (Some expected_type))
-               | Some t,Some (_,C.Decl ct) ->
-                  ignore (type_of_aux context t (Some ct))
-               | _,_ -> assert false (* the term is not well typed!!! *)
-            ) l lifted_canonical_context
-          in
-           let (_,canonical_context,ty) =
-            List.find (function (m,_,_) -> n = m) metasenv
-           in
-            (* Checks suppressed *)
-            CicSubstitution.lift_meta l ty
-     | C.Sort s -> C.Sort C.Type (*CSC manca la gestione degli universi!!! *)
-     | C.Implicit -> raise (Impossible 21)
-     | C.Cast (te,ty) ->
-        (* Let's visit all the subterms that will not be visited later *)
-        let _ = type_of_aux context te (Some (head_beta_reduce ty)) in
-        let _ = type_of_aux context ty None in
-         (* Checks suppressed *)
-         ty
-     | C.Prod (name,s,t) ->
-        let sort1 = type_of_aux context s None
-        and sort2 = type_of_aux ((Some (name,(C.Decl s)))::context) t None in
-         sort_of_prod context (name,s) (sort1,sort2)
-     | C.Lambda (n,s,t) ->
-        (* Let's visit all the subterms that will not be visited later *)
-        let _ = type_of_aux context s None in
-         let expected_target_type =
-          match expectedty with
-             None -> None
-           | Some expectedty' ->
-              let ty =
-               match R.whd context expectedty' with
-                  C.Prod (_,_,expected_target_type) ->
-                   head_beta_reduce expected_target_type
-                | _ -> assert false
-              in
-               Some ty
-         in
-          let type2 =
-           type_of_aux ((Some (n,(C.Decl s)))::context) t expected_target_type
-          in
-           (* Checks suppressed *)
-           C.Prod (n,s,type2)
-     | C.LetIn (n,s,t) ->
-(*CSC: What are the right expected types for the source and *)
-(*CSC: target of a LetIn? None used.                        *)
-        (* Let's visit all the subterms that will not be visited later *)
-        let _ = type_of_aux context s None in
-         let t_typ =
-          (* Checks suppressed *)
-          type_of_aux ((Some (n,(C.Def s)))::context) t None
-         in
-          if does_not_occur 1 t_typ then
-           (* since [Rel 1] does not occur in typ, substituting any term *)
-           (* in place of [Rel 1] is equivalent to delifting once        *)
-           CicSubstitution.subst C.Implicit t_typ
-          else
-           C.LetIn (n,s,t_typ)
-     | C.Appl (he::tl) when List.length tl > 0 ->
-        let expected_hetype =
-         (* Inefficient, the head is computed twice. But I know *)
-         (* of no other solution.                               *)
-         R.whd context (CicTypeChecker.type_of_aux' metasenv context he)
-        in
-         let hetype = type_of_aux context he (Some expected_hetype) in
-         let tlbody_and_type =
-          let rec aux =
-           function
-              _,[] -> []
-            | C.Prod (n,s,t),he::tl ->
-               (he, type_of_aux context he (Some (head_beta_reduce s)))::
-                (aux (R.whd context (S.subst he t), tl))
-            | _ -> assert false
-          in
-           aux (expected_hetype, tl)
-         in
-          eat_prods context hetype tlbody_and_type
-     | C.Appl _ -> raise (NotWellTyped "Appl: no arguments")
-     | C.Const (uri,exp_named_subst) ->
-        visit_exp_named_subst context uri exp_named_subst ;
-        CicSubstitution.subst_vars exp_named_subst (type_of_constant uri)
-     | C.MutInd (uri,i,exp_named_subst) ->
-        visit_exp_named_subst context uri exp_named_subst ;
-        CicSubstitution.subst_vars exp_named_subst
-         (type_of_mutual_inductive_defs uri i)
-     | C.MutConstruct (uri,i,j,exp_named_subst) ->
-        visit_exp_named_subst context uri exp_named_subst ;
-        CicSubstitution.subst_vars exp_named_subst
-         (type_of_mutual_inductive_constr uri i j)
-     | C.MutCase (uri,i,outtype,term,pl) ->
-        let outsort = type_of_aux context outtype None in
-        let (need_dummy, k) =
-         let rec guess_args context t =
-          match CicReduction.whd context t with
-             C.Sort _ -> (true, 0)
-           | C.Prod (name, s, t) ->
-              let (b, n) = guess_args ((Some (name,(C.Decl s)))::context) t in
-               if n = 0 then
-                (* last prod before sort *)
-                match CicReduction.whd context s with
-                   C.MutInd (uri',i',_) when U.eq uri' uri && i' = i ->
-                    (false, 1)
-                 | C.Appl ((C.MutInd (uri',i',_)) :: _)
-                    when U.eq uri' uri && i' = i -> (false, 1)
-                 | _ -> (true, 1)
-               else
-                (b, n + 1)
-           | _ -> raise (NotWellTyped "MutCase: outtype ill-formed")
-         in
-          let (b, k) = guess_args context outsort in
-           if not b then (b, k - 1) else (b, k)
-        in
-        let (parameters, arguments,exp_named_subst) =
-         let type_of_term =
-          CicTypeChecker.type_of_aux' metasenv context term
-         in
-          match
-           R.whd context (type_of_aux context term
-            (Some (head_beta_reduce type_of_term)))
-          with
-             (*CSC manca il caso dei CAST *)
-             C.MutInd (uri',i',exp_named_subst) ->
-              (* Checks suppressed *)
-              [],[],exp_named_subst
-           | C.Appl (C.MutInd (uri',i',exp_named_subst) :: tl) ->
-             let params,args =
-              split tl (List.length tl - k)
-             in params,args,exp_named_subst
-           | _ ->
-             raise (NotWellTyped "MutCase: the term is not an inductive one")
-        in
-         (* Checks suppressed *)
-         (* Let's visit all the subterms that will not be visited later *)
-         let (cl,parsno) =
-          match CicEnvironment.get_cooked_obj uri with
-             C.InductiveDefinition (tl,_,parsno) ->
-              let (_,_,_,cl) = List.nth tl i in (cl,parsno)
-           | _ ->
-             raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri))
-         in
-          let _ =
-           List.fold_left
-            (fun j (p,(_,c)) ->
-              let cons =
-               if parameters = [] then
-                (C.MutConstruct (uri,i,j,exp_named_subst))
-               else
-                (C.Appl (C.MutConstruct (uri,i,j,exp_named_subst)::parameters))
-              in
-               let expectedtype =
-                type_of_branch context parsno need_dummy outtype cons
-                  (CicTypeChecker.type_of_aux' metasenv context cons)
-               in
-                ignore (type_of_aux context p
-                 (Some (head_beta_reduce expectedtype))) ;
-                j+1
-            ) 1 (List.combine pl cl)
-          in
-           if not need_dummy then
-            C.Appl ((outtype::arguments)@[term])
-           else if arguments = [] then
-            outtype
-           else
-            C.Appl (outtype::arguments)
-     | C.Fix (i,fl) ->
-        (* Let's visit all the subterms that will not be visited later *)
-        let context' =
-         List.rev
-          (List.map
-            (fun (n,_,ty,_) ->
-              let _ = type_of_aux context ty None in
-               (Some (C.Name n,(C.Decl ty)))
-            ) fl
-          ) @
-          context
-        in
-         let _ =
-          List.iter
-           (fun (_,_,ty,bo) ->
-             let expectedty =
-              head_beta_reduce (CicSubstitution.lift (List.length fl) ty)
-             in
-              ignore (type_of_aux context' bo (Some expectedty))
-           ) fl
-         in
-          (* Checks suppressed *)
-          let (_,_,ty,_) = List.nth fl i in
-           ty
-     | C.CoFix (i,fl) ->
-        (* Let's visit all the subterms that will not be visited later *)
-        let context' =
-         List.rev
-          (List.map
-            (fun (n,ty,_) ->
-              let _ = type_of_aux context ty None in
-               (Some (C.Name n,(C.Decl ty)))
-            ) fl
-          ) @
-          context
-        in
-         let _ =
-          List.iter
-           (fun (_,ty,bo) ->
-             let expectedty =
-              head_beta_reduce (CicSubstitution.lift (List.length fl) ty)
-             in
-              ignore (type_of_aux context' bo (Some expectedty))
-           ) fl
-         in
-          (* Checks suppressed *)
-          let (_,ty,_) = List.nth fl i in
-           ty
-   in
-    let synthesized' = head_beta_reduce synthesized in
-     let types,res =
-      match expectedty with
-         None ->
-          (* No expected type *)
-          {synthesized = synthesized' ; expected = None}, synthesized
-       | Some ty when syntactic_equality synthesized' ty ->
-          (* The expected type is synthactically equal to *)
-          (* the synthesized type. Let's forget it.       *)
-          {synthesized = synthesized' ; expected = None}, synthesized
-       | Some expectedty' ->
-          {synthesized = synthesized' ; expected = Some expectedty'},
-          expectedty'
-     in
-      CicHash.add subterms_to_types t types ;
-      res
-
- and visit_exp_named_subst context uri exp_named_subst =
-  let uris_and_types =
-   match CicEnvironment.get_cooked_obj uri with
-      Cic.Constant (_,_,_,params)
-    | Cic.CurrentProof (_,_,_,_,params)
-    | Cic.Variable (_,_,_,params)
-    | Cic.InductiveDefinition (_,params,_) ->
-       List.map
-        (function uri ->
-          match CicEnvironment.get_cooked_obj uri with
-             Cic.Variable (_,None,ty,_) -> uri,ty
-           | _ -> assert false (* the theorem is well-typed *)
-        ) params
-  in
-   let rec check uris_and_types subst =
-    match uris_and_types,subst with
-       _,[] -> []
-     | (uri,ty)::tytl,(uri',t)::substtl when uri = uri' ->
-        ignore (type_of_aux context t (Some ty)) ;
-        let tytl' =
-         List.map
-          (function uri,t' -> uri,(CicSubstitution.subst_vars [uri',t] t')) tytl
-        in
-         check tytl' substtl
-     | _,_ -> assert false (* the theorem is well-typed *)
-   in
-    check uris_and_types exp_named_subst
-
- and sort_of_prod context (name,s) (t1, t2) =
-  let module C = Cic in
-   let t1' = CicReduction.whd context t1 in
-   let t2' = CicReduction.whd ((Some (name,C.Decl s))::context) t2 in
-   match (t1', t2') with
-      (C.Sort s1, C.Sort s2)
-        when (s2 = C.Prop or s2 = C.Set) -> (* different from Coq manual!!! *)
-         C.Sort s2
-    | (C.Sort s1, C.Sort s2) -> C.Sort C.Type (*CSC manca la gestione degli universi!!! *)
-    | (_,_) ->
-      raise
-       (NotWellTyped
-        ("Prod: sort1= " ^ CicPp.ppterm t1' ^ " ; sort2= " ^ CicPp.ppterm t2'))
-
- and eat_prods context hetype =
-  (*CSC: siamo sicuri che le are_convertible non lavorino con termini non *)
-  (*CSC: cucinati                                                         *)
-  function
-     [] -> hetype
-   | (hete, hety)::tl ->
-    (match (CicReduction.whd context hetype) with
-        Cic.Prod (n,s,t) ->
-         (* Checks suppressed *)
-         eat_prods context (CicSubstitution.subst hete t) tl
-      | _ -> raise (NotWellTyped "Appl: wrong Prod-type")
-    )
-
-and type_of_branch context argsno need_dummy outtype term constype =
- let module C = Cic in
- let module R = CicReduction in
-  match R.whd context constype with
-     C.MutInd (_,_,_) ->
-      if need_dummy then
-       outtype
-      else
-       C.Appl [outtype ; term]
-   | C.Appl (C.MutInd (_,_,_)::tl) ->
-      let (_,arguments) = split tl argsno
-      in
-       if need_dummy && arguments = [] then
-        outtype
-       else
-        C.Appl (outtype::arguments@(if need_dummy then [] else [term]))
-   | C.Prod (name,so,de) ->
-      let term' =
-       match CicSubstitution.lift 1 term with
-          C.Appl l -> C.Appl (l@[C.Rel 1])
-        | t -> C.Appl [t ; C.Rel 1]
-      in
-       C.Prod (C.Anonymous,so,type_of_branch
-        ((Some (name,(C.Decl so)))::context) argsno need_dummy
-        (CicSubstitution.lift 1 outtype) term' de)
-  | _ -> raise (Impossible 20)
-
- in
-  type_of_aux context t expectedty
-;;
-
-let double_type_of metasenv context t expectedty =
- let subterms_to_types = CicHash.create 503 in
-  ignore (type_of_aux' subterms_to_types metasenv context t expectedty) ;
-  subterms_to_types
-;;
diff --git a/helm/gTopLevel/doubleTypeInference.mli b/helm/gTopLevel/doubleTypeInference.mli
deleted file mode 100644 (file)
index d7d06ae..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-exception Impossible of int
-exception NotWellTyped of string
-exception WrongUriToConstant of string
-exception WrongUriToVariable of string
-exception WrongUriToMutualInductiveDefinitions of string
-exception ListTooShort
-exception RelToHiddenHypothesis
-
-type types = {synthesized : Cic.term ; expected : Cic.term option};;
-
-module CicHash :
-  sig
-    type 'a t
-    val find : 'a t -> Cic.term -> 'a
-  end
-;;
-
-val double_type_of :
- Cic.metasenv -> Cic.context -> Cic.term -> Cic.term option -> types CicHash.t
-
-(** Auxiliary functions **)
-
-(* does_not_occur n te                              *)
-(* returns [true] if [Rel n] does not occur in [te] *)
-val does_not_occur : int -> Cic.term -> bool
diff --git a/helm/gTopLevel/esempi/and_implies_or.cic b/helm/gTopLevel/esempi/and_implies_or.cic
deleted file mode 100644 (file)
index c47bf76..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-alias and  /Coq/Init/Logic/Conjunction/and.ind#1/1
-alias conj /Coq/Init/Logic/Conjunction/and.ind#1/1/1
-
-alias or        /Coq/Init/Logic/Disjunction/or.ind#1/1
-alias or_introl /Coq/Init/Logic/Disjunction/or.ind#1/1/1
-alias or_intror /Coq/Init/Logic/Disjunction/or.ind#1/1/2
-
-\A:Prop.
-\B:Prop.
-\H:(and A B).
- Case (H : and ; (or A B)) { \a:A.\b:B.(or_introl A B a) }
diff --git a/helm/gTopLevel/esempi/and_implies_or2.cic b/helm/gTopLevel/esempi/and_implies_or2.cic
deleted file mode 100644 (file)
index 46cfb9e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-alias and  /Coq/Init/Logic/and.ind#1/1
-alias conj /Coq/Init/Logic/and.ind#1/1/1
-
-alias or        /Coq/Init/Logic/or.ind#1/1
-alias or_introl /Coq/Init/Logic/or.ind#1/1/1
-alias or_intror /Coq/Init/Logic/or.ind#1/1/2
-
-!A:Prop.!B:Prop.!H:(and A B).(or A B)
diff --git a/helm/gTopLevel/esempi/apply.cic b/helm/gTopLevel/esempi/apply.cic
deleted file mode 100644 (file)
index 902ae2f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-alias nat    /Coq/Init/Datatypes/nat.ind#1/1
-alias eq     /Coq/Init/Logic/eq.ind#1/1
-alias eq_ind /Coq/Init/Logic/eq_ind.con
-alias O      /Coq/Init/Datatypes/nat.ind#1/1/1
-alias S      /Coq/Init/Datatypes/nat.ind#1/1/2
-alias plus   /Coq/Init/Peano/plus.con
-alias mult   /Coq/Init/Peano/mult.con
-alias le     /Coq/Init/Peano/le.ind#1/1
-alias lt     /Coq/Init/Peano/lt.con
-alias not    /Coq/Init/Logic/not.con
-(eq nat (\x:nat.\y:nat.O O O) (\x:nat.\y:nat.O O O))
-/Coq/Init/Logic/f_equal2.con
-/Coq/Init/Logic/eq.ind#1/1/1
-
-(*
-(le O (S O))
-/Coq/Arith/Gt/gt_S_le.con
-
-(not (lt O (plus O O)))
-/Coq/Arith/Lt/lt_n_n.con
-*)
diff --git a/helm/gTopLevel/esempi/bug.cic b/helm/gTopLevel/esempi/bug.cic
deleted file mode 100644 (file)
index cab0f5f..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-alias nat          /Coq/Init/Datatypes/nat.ind#1/1
-alias eqT          /Coq/Init/Logic_Type/eqT.ind#1/1
-alias eq           /Coq/Init/Logic/eq.ind#1/1
-alias refl_equal   /Coq/Init/Logic/eq.ind#1/1/1
-alias eq_ind       /Coq/Init/Logic/eq_ind.con
-alias eq_ind_r     /Coq/Init/Logic/eq_ind_r.con
-alias O            /Coq/Init/Datatypes/nat.ind#1/1/1
-alias S            /Coq/Init/Datatypes/nat.ind#1/1/2
-alias plus         /Coq/Init/Peano/plus.con
-alias mult         /Coq/Init/Peano/mult.con
-alias le           /Coq/Init/Peano/le.ind#1/1
-alias lt           /Coq/Init/Peano/lt.con
-alias not          /Coq/Init/Logic/not.con
-alias f_equal      /Coq/Init/Logic/f_equal.con
-alias le_trans     /Coq/Arith/Le/le_trans.con
-
-alias plus_n_O     /Coq/Init/Peano/plus_n_O.con 
-
-alias or           /Coq/Init/Logic/or.ind#1/1
-alias or_ind       /Coq/Init/Logic/or_ind.con
-
-(or (eq nat O O) (eq nat O O)) -> (lt O O)
diff --git a/helm/gTopLevel/esempi/calcolo_proposizioni.cic b/helm/gTopLevel/esempi/calcolo_proposizioni.cic
deleted file mode 100644 (file)
index a069a8b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-alias True     /Coq/Init/Logic/True.ind#1/1
-alias I        /Coq/Init/Logic/True.ind#1/1/1
-alias True_ind /Coq/Init/Logic/True_ind.con
-
-alias False     /Coq/Init/Logic/False.ind#1/1
-alias False_ind /Coq/Init/Logic/False_ind.con
-
-alias and     /Coq/Init/Logic/and.ind#1/1
-alias conj    /Coq/Init/Logic/and.ind#1/1/1
-alias and_ind /Coq/Init/Logic/and_ind.con
-
-alias or        /Coq/Init/Logic/or.ind#1/1
-alias or_introl /Coq/Init/Logic/or.ind#1/1/1
-alias or_intror /Coq/Init/Logic/or.ind#1/1/2
-alias or_ind    /Coq/Init/Logic/or_ind.con
-
-alias not          /Coq/Init/Logic/not.con
diff --git a/helm/gTopLevel/esempi/conversion.cic b/helm/gTopLevel/esempi/conversion.cic
deleted file mode 100644 (file)
index 9114f3a..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-alias nat        /Coq/Init/Datatypes/nat.ind#1/1
-alias eqT        /Coq/Init/Logic_Type/eqT.ind#1/1
-alias eq         /Coq/Init/Logic/eq.ind#1/1
-alias refl_equal /Coq/Init/Logic/eq.ind#1/1/1
-alias eq_ind     /Coq/Init/Logic/eq_ind.con
-alias eq_ind_r   /Coq/Init/Logic/eq_ind_r.con
-alias O          /Coq/Init/Datatypes/nat.ind#1/1/1
-alias S          /Coq/Init/Datatypes/nat.ind#1/1/2
-alias plus       /Coq/Init/Peano/plus.con
-alias mult       /Coq/Init/Peano/mult.con
-alias le         /Coq/Init/Peano/le.ind#1/1
-alias lt         /Coq/Init/Peano/lt.con
-alias not        /Coq/Init/Logic/not.con
-alias f_equal    /Coq/Init/Logic/f_equal.con
-
-!n:nat.(eq nat (mult (S (S O)) n) O)
-!n:nat.(eq nat (plus O n) (plus n O))
diff --git a/helm/gTopLevel/esempi/decompose.cic b/helm/gTopLevel/esempi/decompose.cic
deleted file mode 100644 (file)
index 1a06fcb..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-!A:Prop.!B:Prop.!C:Prop.(and (sumbool A False) (and (or True B) (or B False))) -> True
-
-!A:Prop.!B:Prop.!C:Prop.(and (sumbool A C) (and (or A B) !D:Prop.(or B D))) -> True
-
-!A:Prop.!B:Prop.!C:Prop.(and (and A C) (and (and A B) (and B C))) -> True
-
-(and True True) -> True
-(and True False) -> True
diff --git a/helm/gTopLevel/esempi/elim.cic b/helm/gTopLevel/esempi/elim.cic
deleted file mode 100644 (file)
index 0ef611f..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-alias nat     /Coq/Init/Datatypes/nat.ind#1/1
-alias eq      /Coq/Init/Logic/eq.ind#1/1
-alias eq_ind  /Coq/Init/Logic/eq_ind.con
-alias O       /Coq/Init/Datatypes/nat.ind#1/1/1
-alias S       /Coq/Init/Datatypes/nat.ind#1/1/2
-alias plus    /Coq/Init/Peano/plus.con
-alias mult    /Coq/Init/Peano/mult.con
-alias le      /Coq/Init/Peano/le.ind#1/1
-alias lt      /Coq/Init/Peano/lt.con
-alias not     /Coq/Init/Logic/not.con
-alias f_equal /Coq/Init/Logic/f_equal.con
-
-!n:nat.(eq nat (plus O n) (plus n O))
diff --git a/helm/gTopLevel/esempi/elim2.cic b/helm/gTopLevel/esempi/elim2.cic
deleted file mode 100644 (file)
index b7c01b9..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-alias nat        /Coq/Init/Datatypes/nat.ind#1/1
-alias eq         /Coq/Init/Logic/eq.ind#1/1
-alias eq_ind     /Coq/Init/Logic/eq_ind.con
-alias eqT        /Coq/Init/Logic_Type/eqT.ind#1/1
-alias O          /Coq/Init/Datatypes/nat.ind#1/1/1
-alias S          /Coq/Init/Datatypes/nat.ind#1/1/2
-alias plus       /Coq/Init/Peano/plus.con
-alias mult       /Coq/Init/Peano/mult.con
-alias le         /Coq/Init/Peano/le.ind#1/1
-alias lt         /Coq/Init/Peano/lt.con
-alias not        /Coq/Init/Logic/not.con
-alias and        /Coq/Init/Logic/and.ind#1/1
-alias prod       /Coq/Init/Datatypes/prod.ind#1/1 
-alias list       /Coq/Lists/PolyList/list.ind#1/1
-alias AllS_assoc /Coq/Lists/TheoryList/AllS_assoc.ind#1/1
-alias V          /Coq/Lists/PolyList/Lists/A.var
-alias VA         /Coq/Lists/TheoryList/Lists/A.var
-alias VB         /Coq/Lists/TheoryList/Lists/Assoc_sec/B.var
-
-!A:Set.!B:Set.!P:!a:A.Prop.!l:list{V := (prod A B)}.
- !H:(AllS_assoc {VA := A ; VB := B} P l).
-  (and
-   (eq list{V := (prod A B)} l l)
-   (eqT !n:A.Prop P P))
-
-(* Intros; Elim H:
-
-?1: (A,B:Set; P:(A->Prop); l:(list A*B))
-     (AllS_assoc A B P l) -> (nil A*B)=(nil A*B)/\P==P
-?2: (A,B:Set; P:(A->Prop); l:(list A*B))
-     (AllS_assoc A B P l) ->
-      (a:A; b:B; l0:(list A*B))
-       (P a) -> (AllS_assoc A B P l0) -> l0=l0/\P==P ->
-        (cons (a,b) l0)=(cons (a,b) l0)/\P==P
-[A,B:Set; P:(A->Prop); l:(list A*B); H:(AllS_assoc A B P l)]
- (AllS_assoc_ind A B P [l0:(list A*B)]l0=l0/\P==P
-  (?1 A B P l H) (?2 A B P l H) l H)
-
-*)
diff --git a/helm/gTopLevel/esempi/evars.cic b/helm/gTopLevel/esempi/evars.cic
deleted file mode 100644 (file)
index 36ce17e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-alias nat          /Coq/Init/Datatypes/nat.ind#1/1
-alias eqT          /Coq/Init/Logic_Type/eqT.ind#1/1
-alias eq           /Coq/Init/Logic/eq.ind#1/1
-alias refl_equal   /Coq/Init/Logic/eq.ind#1/1/1
-alias eq_ind       /Coq/Init/Logic/eq_ind.con
-alias eq_ind_r     /Coq/Init/Logic/eq_ind_r.con
-alias O            /Coq/Init/Datatypes/nat.ind#1/1/1
-alias S            /Coq/Init/Datatypes/nat.ind#1/1/2
-alias plus         /Coq/Init/Peano/plus.con
-alias mult         /Coq/Init/Peano/mult.con
-alias le           /Coq/Init/Peano/le.ind#1/1
-alias lt           /Coq/Init/Peano/lt.con
-alias not          /Coq/Init/Logic/not.con
-alias f_equal      /Coq/Init/Logic/f_equal.con
-alias le_trans     /Coq/Arith/Le/le_trans.con
-
-alias le_plus_plus /Coq/Arith/Plus/le_plus_plus.con
-alias le_reg_r     /Coq/Arith/Plus/le_reg_r.con
-alias le_reg_l     /Coq/Arith/Plus/le_reg_l.con
-
-alias plus_n_O     /Coq/Init/Peano/plus_n_O.con 
-
-!n:nat.!m:nat.(le n m)->(le (mult (S (S O)) n) (mult (S (S O)) m))
-
-(* Lo scopo dell'esercizio e' riuscire a effettuare la dimostrazione che *)
-(* (n <= m) -> (2*n <= 2*m) come la si farebbe su carta, ovvero:         *)
-(*                                                                       *)
-(*     2 * n                                                             *)
-(*  == n + n + 0     Simpl                                               *)
-(*  <= m + n + 0     le_reg_r because n <= m because hypothesis          *)
-(*  <= m + m + 0     le_reg_l because n + 0 <= m + 0 because le_reg_r    *)
-(*                    because hypothesis                                 *)
-(*  == 2 * m         Change                                              *)
diff --git a/helm/gTopLevel/esempi/fourier.cic b/helm/gTopLevel/esempi/fourier.cic
deleted file mode 100644 (file)
index 09caea7..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-alias Rge       /Coq/Reals/Rdefinitions/Rge.con
-alias Rle       /Coq/Reals/Rdefinitions/Rle.con
-alias Rgt       /Coq/Reals/Rdefinitions/Rgt.con
-alias Rlt       /Coq/Reals/Rdefinitions/Rlt.con
-alias Ropp     /Coq/Reals/Rdefinitions/Ropp.con
-alias Rinv     /Coq/Reals/Rdefinitions/Rinv.con
-alias Rplus     /Coq/Reals/Rdefinitions/Rplus.con
-alias Rminus    /Coq/Reals/Rdefinitions/Rminus.con
-alias R1        /Coq/Reals/Rdefinitions/R1.con
-alias R0        /Coq/Reals/Rdefinitions/R0.con
-alias R        /Coq/Reals/Rdefinitions/R.con
-alias Eq       /Coq/Init/Logic_Type/eqT.ind#1/1
-
-//test base1 ok
-!x:R.!y:R.(Rle x y) -> (Rge (Rplus y R1) (Rminus x R1))
-
-//test base2 ok
-!x:R.!y:R.(Rlt x y) -> (Rgt (Rplus y R1) (Rminus x R1))
-
-//test base3 (unification fails)
-!x:R.!y:R.(Rge x y) -> (Rlt (Rplus y R1) (Rplus x (Rplus R1 R1)))
-
-//test base4 ok
-!x:R.!y:R.(Rgt x y) -> (Rle (Rminus y R1) (Rplus x R1))
-
-//test base5 ok
-!x:R.!y:R.(Rlt x ( Rplus y R1 ) ) -> (Rge (Rplus y (Rplus R1 R1)) (Rminus x R0))
-
-//test base6 (unification fails)
-!x:R.!y:R.(Eq R x y) -> (Rgt (Rplus y R1) (Rminus x R1))
-
-//test base7 (should fail) ok
-!x:R.!y:R.(Rlt x y) -> (Rlt (Rplus y R1) (Rminus x R1))
-
-
diff --git a/helm/gTopLevel/esempi/fourier/fourier.cic b/helm/gTopLevel/esempi/fourier/fourier.cic
deleted file mode 100644 (file)
index 23062f3..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-alias Rge       /Coq/Reals/Rdefinitions/Rge.con
-alias Rle       /Coq/Reals/Rdefinitions/Rle.con
-alias Rgt       /Coq/Reals/Rdefinitions/Rgt.con
-alias Rlt       /Coq/Reals/Rdefinitions/Rlt.con
-alias Ropp     /Coq/Reals/Rdefinitions/Ropp.con
-alias Rinv     /Coq/Reals/Rdefinitions/Rinv.con
-alias Rplus     /Coq/Reals/Rdefinitions/Rplus.con
-alias Rminus    /Coq/Reals/Rdefinitions/Rminus.con
-alias Rmult    /Coq/Reals/Rdefinitions/Rmult.con
-alias R1        /Coq/Reals/Rdefinitions/R1.con
-alias R0        /Coq/Reals/Rdefinitions/R0.con
-alias R        /Coq/Reals/Rdefinitions/R.con
-alias eqT      /Coq/Init/Logic_Type/eqT.ind#1/1
-alias not      /Coq/Init/Logic/not.con
-alias or /Coq/Init/Logic/or.ind#1/1
-
-!x:R.
-(Rlt (Rmult(Ropp x)R1)
-R0)
-->(Rlt R0 x)
-
-// test 3x4 -> 35''
-!x:R.!y:R.!z:R.
-(Rge
-(Rplus
- (Rmult (Ropp (Rplus R1 R1)) x) (Rplus 
-   (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) y) (Rplus 
-     (Rmult (Rplus R1 (Rplus R1 R1)) z) R1)
-)) R0)
-->  
-(Rge
-(Rplus
- (Rmult (Ropp (Rplus R1 (Rplus R1 R1))) x) (Rplus 
-   (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) y) (Rplus 
-      R1 (Rplus R1 R1))
-)) R0)
-->  
-(Rgt
-(Rplus
-  x (Rplus 
-   (Rmult (Rplus R1 R1) y) (Ropp z) )
-) R0)
--> 
-(Rgt
-(Rplus
- (Rmult (Rplus R1 (Rplus R1 R1)) x) (Rplus 
-   z (Ropp R1))
-) R0)
-
--> (Rlt z R1)
-
-// test 6x6 -> 
-
-!x:R.!y:R.!z:R.!t:R.!u:R.!v:R.
-(Rgt
-(Rplus (Ropp x) (Rplus y (Rplus z (Rplus t (Rplus u (Rplus v (Rplus R1 R1)))))))
-  R0)
-->
-(Rgt
-(Rplus x (Rplus (Ropp y) (Rplus (Ropp z) (Rplus (Ropp t) (Rplus (Ropp u) (Rplus R1 R1))))))
-  R0)
-->
-(Rgt
-(Rplus y (Rplus (Ropp z) (Rplus t (Rplus u (Rplus R1 R1)))))
-  R0)
-->
-(Rgt
-(Rplus y (Rplus z (Rplus (Ropp t) (Rplus (Ropp (Rmult (Rplus R1 R1)v)) (Rplus R1 R1)))))
-  R0)
-->
-(Rgt
-(Rplus y (Rplus z (Rplus t (Rplus (Ropp u) (Rplus R1 R1)))))
-  R0)
-->
-(Rlt
-(Rplus (Rmult (Rplus R1 R1) x) (Rplus v y))
-  R0)
--> (Rlt (Rmult (Rplus R1 R1) x) R0)
-
-
-
-
-
-
-//test base1 ok
-!x:R.!y:R.(Rle x y) -> (Rge (Rplus y R1) (Rminus x R1))
-
-//test base2 ok
-!x:R.!y:R.(Rlt x y) -> (Rgt (Rplus y R1) (Rminus x R1))
-
-//test base3 ok
-!x:R.!y:R.(Rge x y) -> (Rlt (Rplus y R1) (Rplus x (Rplus R1 R1)))
-
-/Coq/fourier/Fourier_util/Rfourier_not_ge_lt.con
-
-intros
-
-/Coq/Init/Logic/False.ind#1/1
-
-(not (Rle (Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus x (Rplus R1 R1))) (Rmult (Rmult R1 (Rinv R1)) y)) (Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus y R1)) (Rmult (Rmult R1 (Rinv R1)) x))))
-
-/Coq/fourier/Fourier_util/Rnot_le_le.con
-
-t1=(Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus x (Rplus R1 R1))) (Rmult (Rmult R1 (Rinv R1)) y))
-
-t2=(Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus y R1)) (Rmult (Rmult R1 (Rinv R1)) x))
-
-(t1-t2)=(Rminus 
-(Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus x (Rplus R1 R1))) (Rmult (Rmult R1 (Rinv R1)) y))
-(Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus y R1)) (Rmult (Rmult R1 (Rinv R1)) x)))
-
-tc=(Rmult (Ropp R1) (Rinv R1))
-
-rewrite=(eqT R (Rminus (Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus y R1)) (Rmult (Rmult R1 (Rinv R1)) x))
- (Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus x (Rplus R1 R1))) (Rmult (Rmult R1 (Rinv R1)) y))) (Rmult (Ropp R1) (Rinv R1)))
-
-change=(not (or 
-(Rlt R0 (Rmult (Ropp R1) (Rinv R1))) 
-(eqT R R0 (Rmult (Ropp R1) (Rinv R1))) 
-))
-
-tac2
-/Coq/fourier/Fourier_util/Rnot_lt0.con
-
-//test base4 ok
-!x:R.!y:R.(Rgt x y) -> (Rle (Rminus y R1) (Rplus x R1))
-
-//test base5 ok
-!x:R.!y:R.(Rlt x ( Rplus y R1 ) ) -> (Rge (Rplus y (Rplus R1 R1)) (Rminus x R0))
-
-//test base6 ok
-!x:R.!y:R.(eqT R x y) -> (Rgt (Rplus y R1) (Rminus x R1))
-
-//test base7 (should fail) ok
-!x:R.!y:R.(Rlt x y) -> (Rlt (Rplus y R1) (Rminus x R1))
-
-
diff --git a/helm/gTopLevel/esempi/fourier/fourier_benchmarks.cic b/helm/gTopLevel/esempi/fourier/fourier_benchmarks.cic
deleted file mode 100644 (file)
index 68166c1..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-!x:R.!y:R.!z:R.!t:R.
-(Rle (Rplus (Rmult  R0 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) z) (Rplus (Rmult  R1 t) (Ropp R1))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) y) (Rplus (Rmult  R0 z) (Rplus (Rmult (Rplus R1  R1) t) (Ropp R1))))) R0)
-->
-(Rle (Rplus (Rmult  R0 x) (Rplus (Rmult (Rplus R1  R1) y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) t) (Ropp R1))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) t) (Ropp R1))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) t) (Ropp R1))))) R0)
-
-[1'02'' 363K m=5 n=4 K=8]
-
-------------------------------------------------------------------------------------------------------------
-!x:R.!y:R.!z:R.!t:R.!u:R.!v:R.
-(Rle (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) y) (Rplus (Rmult (Rplus R1  R1) z) (Rplus (Rmult (Rplus R1  R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) v) (Ropp R1))))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1  R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) t) (Rplus (Rmult  R1 u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) v) (Ropp R1))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) x) (Rplus (Rmult  R0 y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) t) (Rplus (Rmult (Rplus R1  R1) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) v) (Ropp R1))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) t) (Rplus (Rmult  R0 u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) v) (Ropp R1))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) x) (Rplus (Rmult  R0 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) t) (Rplus (Rmult (Ropp (Rplus R1  R1)) u) (Rplus (Rmult  R1 v) (Ropp R1))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1  R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) y) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) u) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1  R1)))) v) (Ropp R1))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1  R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) y) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) u) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1  R1)))) v) (Ropp R1))))))) R0)
-
-[1'25'' 501K m=7 n=6 K=8]
-
------------------------------------------------------------------------------------------------------------
-!x:R.!y:R.!z:R.!t:R.!u:R.!v:R.!w:R.!g:R.!h:R.!j:R.
-(Rle (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) x) (Rplus (Rmult  R1 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) z) (Rplus (Rmult  R1 t) (Rplus (Rmult (Rplus R1  R1) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) v) (Rplus (Rmult  R0 w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) g) (Rplus (Rmult  R0 h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1  R1) x) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1  R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) t) (Rplus (Rmult  R0 u) (Rplus (Rmult  R0 v) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) h) (Rplus (Rmult (Rplus R1  R1) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) w) (Rplus (Rmult  R0 g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) t) (Rplus (Rmult  R0 u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) x) (Rplus (Rmult  R0 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) t) (Rplus (Rmult  R0 u) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) v) (Rplus (Rmult  R1 w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) g) (Rplus (Rmult  R0 h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) t) (Rplus (Rmult  R0 u) (Rplus (Rmult (Ropp  R1) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) w) (Rplus (Rmult  R0 g) (Rplus (Rmult  R1 h) (Rplus (Rmult  R1 j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) t) (Rplus (Rmult (Rplus R1  R1) u) (Rplus (Rmult (Rplus R1  R1) v) (Rplus (Rmult (Ropp (Rplus R1  R1)) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) u) (Rplus (Rmult  R0 v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) w) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1  R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) z) (Rplus (Rmult  R1 t) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) u) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) w) (Rplus (Rmult (Rplus R1  R1) g) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) h) (Rplus (Rmult  R1 j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult  R0 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) y) (Rplus (Rmult  R1 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) v) (Rplus (Rmult  R1 w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) g) (Rplus (Rmult (Rplus R1  R1) h) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1  R1))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult  R0 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) y) (Rplus (Rmult  R1 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) v) (Rplus (Rmult  R1 w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) g) (Rplus (Rmult (Rplus R1  R1) h) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1  R1))) j) (Ropp R1))))))))))) R0)
-
-[1'50'' 787K m=11 n=10 K=8]
-
--------------------------------------------------------------------------------------------------------
-
-!x:R.!y:R.!z:R.!t:R.!u:R.!v:R.!w:R.!g:R.!h:R.!j:R.!l:R.!m:R.!n:R.!o:R.!p:R.!q:R.!r:R.!s:R.!a:R.!b:R.
-(Rle (Rplus (Rmult (Ropp (Rplus R1  R1)) x) (Rplus (Rmult  R0 y) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) z) (Rplus (Rmult  R0 t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) g) (Rplus (Rmult  R1 h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) j) (Rplus (Rmult  R1 l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) n) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) o) (Rplus (Rmult  R1 p) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) q) (Rplus (Rmult (Rplus R1  R1) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) x) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) y) (Rplus (Rmult (Rplus R1  R1) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) u) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) w) (Rplus (Rmult (Rplus R1  R1) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) h) (Rplus (Rmult (Rplus R1  R1) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) o) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) a) (Rplus (Rmult  R0 b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult  R1 y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) t) (Rplus (Rmult  R1 u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) v) (Rplus (Rmult  R0 w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) g) (Rplus (Rmult  R0 h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) j) (Rplus (Rmult (Rplus R1  R1) l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) m) (Rplus (Rmult  R1 n) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) o) (Rplus (Rmult  R1 p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) q) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) r) (Rplus (Rmult  R0 s) (Rplus (Rmult (Rplus R1  R1) a) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) x) (Rplus (Rmult  R1 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) t) (Rplus (Rmult (Rplus R1  R1) u) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) w) (Rplus (Rmult  R0 g) (Rplus (Rmult (Rplus R1  R1) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) j) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) l) (Rplus (Rmult (Rplus R1  R1) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) o) (Rplus (Rmult  R0 p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) q) (Rplus (Rmult  R1 r) (Rplus (Rmult  R1 s) (Rplus (Rmult  R0 a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) t) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) v) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) j) (Rplus (Rmult  R1 l) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) p) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) q) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) r) (Rplus (Rmult  R0 s) (Rplus (Rmult (Rplus R1  R1) a) (Rplus (Rmult (Rplus R1  R1) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult (Rplus R1  R1) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) u) (Rplus (Rmult (Ropp  R1) v) (Rplus (Rmult (Rplus R1  R1) w) (Rplus (Rmult  R1 g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) h) (Rplus (Rmult  R1 j) (Rplus (Rmult (Rplus R1  R1) l) (Rplus (Rmult  R0 m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) o) (Rplus (Rmult (Rplus R1  R1) p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) r) (Rplus (Rmult (Rplus R1  R1) s) (Rplus (Rmult (Rplus R1  R1) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) z) (Rplus (Rmult  R1 t) (Rplus (Rmult  R1 u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) v) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) w) (Rplus (Rmult  R1 g) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) h) (Rplus (Rmult  R1 j) (Rplus (Rmult  R1 l) (Rplus (Rmult (Rplus R1  R1) m) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) o) (Rplus (Rmult  R1 p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) q) (Rplus (Rmult  R0 r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) s) (Rplus (Rmult  R0 a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) t) (Rplus (Rmult (Rplus R1  R1) u) (Rplus (Rmult (Rplus R1  R1) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) w) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1  R1)))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) j) (Rplus (Rmult  R0 l) (Rplus (Rmult  R1 m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) o) (Rplus (Rmult (Rplus R1  R1) p) (Rplus (Rmult (Rplus R1  R1) q) (Rplus (Rmult  R0 r) (Rplus (Rmult  R1 s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) a) (Rplus (Rmult  R1 b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1  R1) x) (Rplus (Rmult (Rplus R1  R1) y) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) v) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) g) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1  R1)))) h) (Rplus (Rmult  R1 j) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) l) (Rplus (Rmult  R1 m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) o) (Rplus (Rmult  R0 p) (Rplus (Rmult  R0 q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) r) (Rplus (Rmult  R0 s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) y) (Rplus (Rmult (Rplus R1  R1) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) u) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) w) (Rplus (Rmult (Rplus R1  R1) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) h) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) l) (Rplus (Rmult  R1 m) (Rplus (Rmult  R0 n) (Rplus (Rmult (Rplus R1  R1) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) p) (Rplus (Rmult (Rplus R1  R1) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) s) (Rplus (Rmult  R0 a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) x) (Rplus (Rmult  R0 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) z) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) u) (Rplus (Rmult  R0 v) (Rplus (Rmult  R1 w) (Rplus (Rmult  R0 g) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) j) (Rplus (Rmult  R0 l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) a) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) t) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) v) (Rplus (Rmult (Rplus R1  R1) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) h) (Rplus (Rmult  R0 j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) l) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) o) (Rplus (Rmult  R0 p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) r) (Rplus (Rmult (Rplus R1  R1) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) z) (Rplus (Rmult (Rplus R1  R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) u) (Rplus (Rmult (Rplus R1  R1) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) m) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) o) (Rplus (Rmult  R0 p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) a) (Rplus (Rmult  R1 b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) z) (Rplus (Rmult (Rplus R1  R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) w) (Rplus (Rmult  R0 g) (Rplus (Rmult  R1 h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) l) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) n) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1  R1)))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) a) (Rplus (Rmult  R1 b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) z) (Rplus (Rmult (Rplus R1  R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) l) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) o) (Rplus (Rmult (Ropp  R1) p) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) q) (Rplus (Rmult (Rplus R1  R1) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) s) (Rplus (Rmult  R1 a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) u) (Rplus (Rmult  R0 v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) g) (Rplus (Rmult (Rplus R1  R1) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) n) (Rplus (Rmult  R0 o) (Rplus (Rmult (Rplus R1  R1) p) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1  R1)))) q) (Rplus (Rmult  R1 r) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) x) (Rplus (Rmult  R1 y) (Rplus (Rmult (Rplus R1  R1) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) t) (Rplus (Rmult  R0 u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) w) (Rplus (Rmult  R0 g) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) m) (Rplus (Rmult  R0 n) (Rplus (Rmult (Rplus R1  R1) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) p) (Rplus (Rmult  R0 q) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult  R0 y) (Rplus (Rmult (Rplus R1  R1) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) u) (Rplus (Rmult  R1 v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) j) (Rplus (Rmult  R1 l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) m) (Rplus (Rmult  R0 n) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) q) (Rplus (Rmult  R0 r) (Rplus (Rmult (Ropp  R1) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) a) (Rplus (Rmult  R1 b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) x) (Rplus (Rmult  R1 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) z) (Rplus (Rmult (Rplus R1  R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) u) (Rplus (Rmult (Rplus R1  R1) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) w) (Rplus (Rmult  R0 g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) j) (Rplus (Rmult (Rplus R1  R1) l) (Rplus (Rmult (Rplus R1  R1) m) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) p) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) q) (Rplus (Rmult (Rplus R1  R1) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) s) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1  R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) z) (Rplus (Rmult (Rplus R1  R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) u) (Rplus (Rmult  R0 v) (Rplus (Rmult  R0 w) (Rplus (Rmult  R0 g) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) h) (Rplus (Rmult (Rplus R1  R1) j) (Rplus (Rmult  R0 l) (Rplus (Rmult  R1 m) (Rplus (Rmult  R0 n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) p) (Rplus (Rmult  R0 q) (Rplus (Rmult (Rplus R1  R1) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) a) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) b) (Ropp R1))))))))))))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1  R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) z) (Rplus (Rmult (Rplus R1  R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) u) (Rplus (Rmult  R0 v) (Rplus (Rmult  R0 w) (Rplus (Rmult  R0 g) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) h) (Rplus (Rmult (Rplus R1  R1) j) (Rplus (Rmult  R0 l) (Rplus (Rmult  R1 m) (Rplus (Rmult  R0 n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) p) (Rplus (Rmult  R0 q) (Rplus (Rmult (Rplus R1  R1) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) a) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) b) (Ropp R1))))))))))))))))))))) R0)
-
-
-[19'30'' 1.9M m=21 n=20 K=8 ty=13'35'']
-
---------------------------------------------------------------------------------------------------------
-
-!x:R.!y:R.!z:R.!t:R.!u:R.!v:R.!w:R.!g:R.!h:R.!j:R.
-(Rle (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) x) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) v) (Rplus (Rmult  R0 w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))) y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) h) (Rplus (Rmult (Rplus R1  R1) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))))))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) g) (Rplus (Rmult  R0 h) (Rplus (Rmult  R1 j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) y) (Rplus (Rmult  R0 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))))))) t) (Rplus (Rmult (Ropp (Rplus R1  R1)) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))) y) (Rplus (Rmult  R0 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) u) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))) h) (Rplus (Rmult  R0 j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult  R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))) v) (Rplus (Rmult (Ropp  R1) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) w) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) u) (Rplus (Rmult (Rplus R1  R1) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) g) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) y) (Rplus (Rmult  R1 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) h) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))))) j) (Ropp R1))))))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) y) (Rplus (Rmult  R1 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) h) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))))) j) (Ropp R1))))))))))) R0)
-
-[ K m=11 n=10 K=18 ty=] (TRASH)
-
-
-----------------------------------------------
-
-!x:R.!y:R.!z:R.!t:R.!u:R.!v:R.
-(Rle (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) t) (Rplus (Rmult (Rplus R1  R1) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) v) (Ropp R1))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) x) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) y) (Rplus (Rmult  R0 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1  R1))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))) u) (Rplus (Rmult  R0 v) (Ropp R1))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1  R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) v) (Ropp R1))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))) x) (Rplus (Rmult  R0 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) v) (Ropp R1))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1  R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) t) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1  R1)) v) (Ropp R1))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))) x) (Rplus (Rmult  R1 y) (Rplus (Rmult  R1 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) u) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) v) (Ropp R1))))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))) x) (Rplus (Rmult  R1 y) (Rplus (Rmult  R1 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) u) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))) v) (Ropp R1))))))) R0)
-
-[4'  658K m=7 n=6 K=13 ty=50'']
-
-----------------------------------------------------------------
-
-!x:R.!y:R.!z:R.!t:R.
-(Rle (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))))) t) (Ropp R1))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))) x) (Rplus (Rmult (Ropp (Rplus R1  R1)) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))) z) (Rplus (Rmult (Rplus R1  R1) t) (Ropp R1))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1  R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))))))))) t) (Ropp R1))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1  R1) x) (Rplus (Rmult  R1 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) t) (Ropp R1))))) R0)
-->
-(Rle (Rplus (Rmult (Rplus R1  R1) x) (Rplus (Rmult  R1 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1)))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1  R1))))))))))) t) (Ropp R1))))) R0)
-
-[3':20''  658K m=5 n=4 K=13 ty=41'']
-
-
-
-
diff --git a/helm/gTopLevel/esempi/fourier/fourier_make_benchmarks.ml b/helm/gTopLevel/esempi/fourier/fourier_make_benchmarks.ml
deleted file mode 100644 (file)
index d783089..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-let rec int_to_cic n =
-   if n < 0 then 
-     "(Ropp "^int_to_cic (-n)^")"
-   else
-      match n with
-      0 -> " R0"
-      |1 -> " R1"
-      |k -> "(Rplus R1 " ^ int_to_cic (n-1) ^")"
-;;
-
-let dimx = ref 3;;
-let dimy = ref 3;;
-let kmax = ref 5;;
-let vl = [|"x";"y";"z";"t";"u";"v";"w";"g";"h";"j";"l";"m";"n";"o";"p";"q";"r";"s";"a";"b";"c";"d"|]
-;;
-
-let nth_inc n =
-  vl.(n)
-;;
-
-let preamble () = 
-  for i = 0 to !dimx do
-   print_string ("!"^nth_inc i^":R.");
-  done;
-  print_string "\n";
-;;
-
-let main () =
-  print_string "Immetti m : ";dimy := (read_int ()) - 1;
-  print_string "Immetti n : ";dimx := (read_int ()) - 1;
-  print_string "Immetti K : ";kmax := (read_int ()) + 1;
-  print_string ("Genero un sistema di "^
-   string_of_int (!dimy+1)^" disequazioni in "^
-   string_of_int (!dimx+1)^" incognite con coefficenti "^string_of_int !kmax^"\n\n");
-  Random.self_init ();
-  preamble ();
-  let max = ref 0 in
-  for i=0 to !dimy do
-     begin
-     print_string "(Rle ";
-     for o=0 to !dimx do
-       let k = ref ((Random.int !kmax)) in 
-       if !k > !max then max := !k;
-       if i=o then 
-         k := - !k
-       else
-        k := !k;
-       print_string ("(Rplus (Rmult "^int_to_cic !k^" "^nth_inc o^") ");
-     done;
-     print_string "(Ropp R1)";
-     for o=0 to !dimx  do
-       print_string (")");
-     done;
-     print_string (" R0)\n->\n");
-     end
-  done;
-  print_string ("\n\nIl massimo K e' "^string_of_int !max^".\nLa tesi la puoi scegliere tu, ma se ricopi una ipotesi vai tranquillo.\n");
-;;
-
-
-main ();;
diff --git a/helm/gTopLevel/esempi/prova.cic b/helm/gTopLevel/esempi/prova.cic
deleted file mode 100644 (file)
index 3f65458..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-alias eq   /Coq/Init/Logic/eq.ind#1/1
-alias nat  /Coq/Init/Datatypes/nat.ind#1/1
-alias O    /Coq/Init/Datatypes/nat.ind#1/1/1
-alias S    /Coq/Init/Datatypes/nat.ind#1/1/2
-alias plus /Coq/Init/Peano/plus.con
-alias mult /Coq/Init/Peano/mult.con
-(mult (plus (S (S O)) (S O)) (S (S O)))
-Case ((S O) : nat ; nat) { O ; \x:nat.x }
-Fix f {f(0) : !x:nat.nat ; g(0) : !x:nat.nat}
- { \x:nat.O
- ; \x:nat.
-    Case (x : nat ; nat) { (S O) ; \x:nat.(f x) }
- }
-
-(* Nel caso seguente sbagliavamo a fare la whd!!!! *)
-!n:nat.(eq nat O (Case (n : nat ; \z:nat.!a:nat.nat) {\x:nat.x ; \y:nat.\x:nat.x} O))
diff --git a/helm/gTopLevel/esempi/rewrite.cic b/helm/gTopLevel/esempi/rewrite.cic
deleted file mode 100644 (file)
index ff2b92e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-!v:nat.(eq nat -> nat -> nat \x:nat.\y:nat.(plus y v) \x:nat.\y:nat.O)
-
-Fare cut di:
- (eq nat -> nat \w:nat.(plus w v) \w:nat.(plus (plus w w) v))
-e poi riscriverlo
diff --git a/helm/gTopLevel/esempi/ring/0eq0.cic b/helm/gTopLevel/esempi/ring/0eq0.cic
deleted file mode 100644 (file)
index 0b6f8f2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-(* prova di 0 == 0 *)
-alias eq        /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT       /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R         /Coq/Reals/Rdefinitions/R.con
-alias Rplus     /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult     /Coq/Reals/Rdefinitions/Rmult.con
-alias R1        /Coq/Reals/Rdefinitions/R1.con
-alias R0        /Coq/Reals/Rdefinitions/R0.con
-alias Ropp      /Coq/Reals/Rdefinitions/Ropp.con
-(eqT R R0 R0)
diff --git a/helm/gTopLevel/esempi/ring/aliases.cic b/helm/gTopLevel/esempi/ring/aliases.cic
deleted file mode 100644 (file)
index f3fb95c..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-alias false /Coq/Init/Datatypes/bool.ind#1/1/2
-alias apolynomial_normalize_ok /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize_ok.con
-alias RTheory /Coq/Reals/Rbase/RTheory.con
-alias eq            /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT           /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R             /Coq/Reals/Rdefinitions/R.con
-alias Rplus         /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult         /Coq/Reals/Rdefinitions/Rmult.con
-alias R1            /Coq/Reals/Rdefinitions/R1.con
-alias R0            /Coq/Reals/Rdefinitions/R0.con
-alias Ropp          /Coq/Reals/Rdefinitions/Ropp.con
-alias interp_sacs   /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con
-alias apolynomial_normalize   /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con
-alias Node_vm       /Coq/ring/Quote/variables_map/varmap.ind#1/1/2
-alias Empty_vm      /Coq/ring/Quote/variables_map/varmap.ind#1/1/1
-alias APvar         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1
-alias AP0         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2
-alias AP1         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3
-alias APplus        /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4
-alias APmult         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5
-alias APopp         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6
-alias Left_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/1
-alias Right_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/2
-alias End_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/3
diff --git a/helm/gTopLevel/esempi/ring/caso0.cic b/helm/gTopLevel/esempi/ring/caso0.cic
deleted file mode 100644 (file)
index afe37f5..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-(* OK, meglio di coq *)
-alias eq            /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT           /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R             /Coq/Reals/Rdefinitions/R.con
-alias Rplus         /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult         /Coq/Reals/Rdefinitions/Rmult.con
-alias R1            /Coq/Reals/Rdefinitions/R1.con
-alias R0            /Coq/Reals/Rdefinitions/R0.con
-alias Ropp          /Coq/Reals/Rdefinitions/Ropp.con
-alias interp_sacs   /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con
-alias apolynomial_normalize   /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con
-alias Node_vm       /Coq/ring/Quote/variables_map/varmap.ind#1/1/2
-alias Empty_vm      /Coq/ring/Quote/variables_map/varmap.ind#1/1/1
-alias APvar         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1
-alias AP0         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2
-alias AP1         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3
-alias APplus        /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4
-alias APmult         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5
-alias APopp         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6
-alias Left_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/1
-alias Right_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/2
-alias End_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/3
-(eqT R R1 R1)
diff --git a/helm/gTopLevel/esempi/ring/caso1.cic b/helm/gTopLevel/esempi/ring/caso1.cic
deleted file mode 100644 (file)
index 250e8cb..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(* ok *)
-alias eq            /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT           /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R             /Coq/Reals/Rdefinitions/R.con
-alias Rplus         /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult         /Coq/Reals/Rdefinitions/Rmult.con
-alias R1            /Coq/Reals/Rdefinitions/R1.con
-alias R0            /Coq/Reals/Rdefinitions/R0.con
-alias Ropp          /Coq/Reals/Rdefinitions/Ropp.con
-alias interp_sacs   /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con
-alias apolynomial_normalize   /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con
-alias Node_vm       /Coq/ring/Quote/variables_map/varmap.ind#1/1/2
-alias Empty_vm      /Coq/ring/Quote/variables_map/varmap.ind#1/1/1
-alias APvar         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1
-alias AP0         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2
-alias AP1         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3
-alias APplus        /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4
-alias APmult         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5
-alias APopp         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6
-alias Left_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/1
-alias Right_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/2
-alias End_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/3
-(eqT R
-  R1
-  (Rmult R1 R1))
diff --git a/helm/gTopLevel/esempi/ring/caso2.cic b/helm/gTopLevel/esempi/ring/caso2.cic
deleted file mode 100644 (file)
index c9c3896..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(* ok *)
-alias eq            /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT           /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R             /Coq/Reals/Rdefinitions/R.con
-alias Rplus         /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult         /Coq/Reals/Rdefinitions/Rmult.con
-alias R1            /Coq/Reals/Rdefinitions/R1.con
-alias R0            /Coq/Reals/Rdefinitions/R0.con
-alias Ropp          /Coq/Reals/Rdefinitions/Ropp.con
-alias interp_sacs   /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con
-alias apolynomial_normalize   /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con
-alias Node_vm       /Coq/ring/Quote/variables_map/varmap.ind#1/1/2
-alias Empty_vm      /Coq/ring/Quote/variables_map/varmap.ind#1/1/1
-alias APvar         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1
-alias AP0         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2
-alias AP1         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3
-alias APplus        /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4
-alias APmult         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5
-alias APopp         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6
-alias Left_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/1
-alias Right_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/2
-alias End_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/3
-(eqT R
-  (Rmult R1 R1)
-  R1)
diff --git a/helm/gTopLevel/esempi/ring/caso3.1.cic b/helm/gTopLevel/esempi/ring/caso3.1.cic
deleted file mode 100644 (file)
index 0d698cd..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(* ok *)
-alias eq            /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT           /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R             /Coq/Reals/Rdefinitions/R.con
-alias Rplus         /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult         /Coq/Reals/Rdefinitions/Rmult.con
-alias R1            /Coq/Reals/Rdefinitions/R1.con
-alias R0            /Coq/Reals/Rdefinitions/R0.con
-alias Ropp          /Coq/Reals/Rdefinitions/Ropp.con
-alias interp_sacs   /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con
-alias apolynomial_normalize   /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con
-alias Node_vm       /Coq/ring/Quote/variables_map/varmap.ind#1/1/2
-alias Empty_vm      /Coq/ring/Quote/variables_map/varmap.ind#1/1/1
-alias APvar         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1
-alias AP0         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2
-alias AP1         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3
-alias APplus        /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4
-alias APmult         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5
-alias APopp         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6
-alias Left_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/1
-alias Right_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/2
-alias End_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/3
-(eqT R
-  (Rmult R1 R1)
-  (Rplus R1 R1))
diff --git a/helm/gTopLevel/esempi/ring/caso3.1bis.cic b/helm/gTopLevel/esempi/ring/caso3.1bis.cic
deleted file mode 100644 (file)
index ec85c07..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(* ok *)
-alias eq            /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT           /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R             /Coq/Reals/Rdefinitions/R.con
-alias Rplus         /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult         /Coq/Reals/Rdefinitions/Rmult.con
-alias R1            /Coq/Reals/Rdefinitions/R1.con
-alias R0            /Coq/Reals/Rdefinitions/R0.con
-alias Ropp          /Coq/Reals/Rdefinitions/Ropp.con
-alias interp_sacs   /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con
-alias apolynomial_normalize   /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con
-alias Node_vm       /Coq/ring/Quote/variables_map/varmap.ind#1/1/2
-alias Empty_vm      /Coq/ring/Quote/variables_map/varmap.ind#1/1/1
-alias APvar         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1
-alias AP0         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2
-alias AP1         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3
-alias APplus        /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4
-alias APmult         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5
-alias APopp         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6
-alias Left_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/1
-alias Right_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/2
-alias End_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/3
-(eqT R
-  (Rplus R1 R1)
-  (Rmult R1 R1))
diff --git a/helm/gTopLevel/esempi/ring/caso3.2.cic b/helm/gTopLevel/esempi/ring/caso3.2.cic
deleted file mode 100644 (file)
index d6d0b5a..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(* ok *)
-alias eq            /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT           /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R             /Coq/Reals/Rdefinitions/R.con
-alias Rplus         /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult         /Coq/Reals/Rdefinitions/Rmult.con
-alias R1            /Coq/Reals/Rdefinitions/R1.con
-alias R0            /Coq/Reals/Rdefinitions/R0.con
-alias Ropp          /Coq/Reals/Rdefinitions/Ropp.con
-alias interp_sacs   /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con
-alias apolynomial_normalize   /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con
-alias Node_vm       /Coq/ring/Quote/variables_map/varmap.ind#1/1/2
-alias Empty_vm      /Coq/ring/Quote/variables_map/varmap.ind#1/1/1
-alias APvar         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1
-alias AP0         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2
-alias AP1         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3
-alias APplus        /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4
-alias APmult         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5
-alias APopp         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6
-alias Left_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/1
-alias Right_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/2
-alias End_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/3
-(eqT R
-  (Rmult (Rplus R1 R1) R1)
-  (Rmult R1 (Rplus R1 R1)))
diff --git a/helm/gTopLevel/esempi/ring/caso3.3.cic b/helm/gTopLevel/esempi/ring/caso3.3.cic
deleted file mode 100644 (file)
index 0ac953a..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(* ok *)
-alias eq            /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT           /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R             /Coq/Reals/Rdefinitions/R.con
-alias Rplus         /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult         /Coq/Reals/Rdefinitions/Rmult.con
-alias R1            /Coq/Reals/Rdefinitions/R1.con
-alias R0            /Coq/Reals/Rdefinitions/R0.con
-alias Ropp          /Coq/Reals/Rdefinitions/Ropp.con
-alias interp_sacs   /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con
-alias apolynomial_normalize   /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con
-alias Node_vm       /Coq/ring/Quote/variables_map/varmap.ind#1/1/2
-alias Empty_vm      /Coq/ring/Quote/variables_map/varmap.ind#1/1/1
-alias APvar         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1
-alias AP0         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2
-alias AP1         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3
-alias APplus        /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4
-alias APmult         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5
-alias APopp         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6
-alias Left_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/1
-alias Right_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/2
-alias End_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/3
-(eqT R
-  (Rmult (Rplus R1 R1) R1)
-  (Rmult R1 R1))
diff --git a/helm/gTopLevel/esempi/ring/coq_overkill_helm_rulez.cic b/helm/gTopLevel/esempi/ring/coq_overkill_helm_rulez.cic
deleted file mode 100644 (file)
index f7879b5..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-(* meglio di coq *)
-alias eq            /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT           /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R             /Coq/Reals/Rdefinitions/R.con
-alias Rplus         /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult         /Coq/Reals/Rdefinitions/Rmult.con
-alias R1            /Coq/Reals/Rdefinitions/R1.con
-alias R0            /Coq/Reals/Rdefinitions/R0.con
-alias Ropp          /Coq/Reals/Rdefinitions/Ropp.con
-alias interp_sacs   /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con
-alias apolynomial_normalize   /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con
-alias Node_vm       /Coq/ring/Quote/variables_map/varmap.ind#1/1/2
-alias Empty_vm      /Coq/ring/Quote/variables_map/varmap.ind#1/1/1
-alias APvar         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1
-alias AP0         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2
-alias AP1         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3
-alias APplus        /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4
-alias APmult         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5
-alias APopp         /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6
-alias Left_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/1
-alias Right_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/2
-alias End_idx     /Coq/ring/Quote/variables_map/index.ind#1/1/3
-(eqT R R1 R0)
diff --git a/helm/gTopLevel/esempi/ring/novarmap.cic b/helm/gTopLevel/esempi/ring/novarmap.cic
deleted file mode 100644 (file)
index 63deeff..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-(* Goal ``-1 + 1*2 == 2*0 + 1`` *)
-alias eq        /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT       /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R         /Coq/Reals/Rdefinitions/R.con
-alias Rplus     /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult     /Coq/Reals/Rdefinitions/Rmult.con
-alias R1        /Coq/Reals/Rdefinitions/R1.con
-alias R0        /Coq/Reals/Rdefinitions/R0.con
-alias Ropp      /Coq/Reals/Rdefinitions/Ropp.con
-(eqT R
-  (Rplus (Ropp R1) (Rmult R1 (Rplus R1 R1)))
-  (Rplus (Rmult (Rplus R1 R1) R0) R1)
-)
diff --git a/helm/gTopLevel/esempi/ring/novarmap_tofinish.cic b/helm/gTopLevel/esempi/ring/novarmap_tofinish.cic
deleted file mode 100644 (file)
index 1a335f3..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-(* Goal: ``1 = 2`` *)
-alias eq        /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT       /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R         /Coq/Reals/Rdefinitions/R.con
-alias Rplus     /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult     /Coq/Reals/Rdefinitions/Rmult.con
-alias R1        /Coq/Reals/Rdefinitions/R1.con
-alias R0        /Coq/Reals/Rdefinitions/R0.con
-alias Ropp      /Coq/Reals/Rdefinitions/Ropp.con
-(eqT R
-  R1
-  (Rplus R1 R1)
-)
diff --git a/helm/gTopLevel/esempi/ring/varmap.cic b/helm/gTopLevel/esempi/ring/varmap.cic
deleted file mode 100644 (file)
index d2cf450..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-(* Goal: ``x+y == 2*y+(x-y)`` *)
-alias eq        /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT       /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R         /Coq/Reals/Rdefinitions/R.con
-alias Rplus     /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult     /Coq/Reals/Rdefinitions/Rmult.con
-alias R1        /Coq/Reals/Rdefinitions/R1.con
-alias R0        /Coq/Reals/Rdefinitions/R0.con
-alias Ropp      /Coq/Reals/Rdefinitions/Ropp.con
-!x:R.!y:R.
-(eqT R
-  (Rplus x y)
-  (Rplus (Rmult (Rplus R1 R1) y) (Rplus x (Ropp y)))
-)
diff --git a/helm/gTopLevel/esempi/ring/varmap2.cic b/helm/gTopLevel/esempi/ring/varmap2.cic
deleted file mode 100644 (file)
index d3aa6c8..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-(* Goal: ``x+y == x+y+x`` *)
-alias eq        /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT       /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R         /Coq/Reals/Rdefinitions/R.con
-alias Rplus     /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult     /Coq/Reals/Rdefinitions/Rmult.con
-alias R1        /Coq/Reals/Rdefinitions/R1.con
-alias R0        /Coq/Reals/Rdefinitions/R0.con
-alias Ropp      /Coq/Reals/Rdefinitions/Ropp.con
-!x:R.!y:R.
-(eqT R
-  (Rplus x y)
-  (Rplus (Rplus x y) x)
-)
diff --git a/helm/gTopLevel/esempi/ring/varmap_trivial.cic b/helm/gTopLevel/esempi/ring/varmap_trivial.cic
deleted file mode 100644 (file)
index 15e2a51..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-(* Goal (x,y:R)``x+y==y+x`` *)
-alias eq        /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT       /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R         /Coq/Reals/Rdefinitions/R.con
-alias Rplus     /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult     /Coq/Reals/Rdefinitions/Rmult.con
-alias R1        /Coq/Reals/Rdefinitions/R1.con
-alias R0        /Coq/Reals/Rdefinitions/R0.con
-alias Ropp      /Coq/Reals/Rdefinitions/Ropp.con
-!x:R.!y:R.
-(eqT R
-  (Rplus x y)
-  (Rplus y x)
-)
diff --git a/helm/gTopLevel/esempi/ring/varmap_trivial2.cic b/helm/gTopLevel/esempi/ring/varmap_trivial2.cic
deleted file mode 100644 (file)
index e05aecd..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-(* Goal (x,y,z:R)``x+y+z==z+y+x`` *)
-alias eq        /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT       /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R         /Coq/Reals/Rdefinitions/R.con
-alias Rplus     /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult     /Coq/Reals/Rdefinitions/Rmult.con
-alias R1        /Coq/Reals/Rdefinitions/R1.con
-alias R0        /Coq/Reals/Rdefinitions/R0.con
-alias Ropp      /Coq/Reals/Rdefinitions/Ropp.con
-!x:R.!y:R.!z:R.
-(eqT R
-  (Rplus (Rplus x y) z)
-  (Rplus (Rplus z y) x)
-)
diff --git a/helm/gTopLevel/esempi/ring/varmap_trivial3.cic b/helm/gTopLevel/esempi/ring/varmap_trivial3.cic
deleted file mode 100644 (file)
index c1bb161..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-(* Goal (x:R)``2*x==x+x``. *)
-alias eq        /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT       /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R         /Coq/Reals/Rdefinitions/R.con
-alias Rplus     /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult     /Coq/Reals/Rdefinitions/Rmult.con
-alias R1        /Coq/Reals/Rdefinitions/R1.con
-alias R0        /Coq/Reals/Rdefinitions/R0.con
-alias Ropp      /Coq/Reals/Rdefinitions/Ropp.con
-!x:R.
-(eqT R
-  (Rmult (Rplus R1 R1) x)
-  (Rplus x x)
-)
diff --git a/helm/gTopLevel/esempi/ring/varmap_trivial_molte_variabili.cic b/helm/gTopLevel/esempi/ring/varmap_trivial_molte_variabili.cic
deleted file mode 100644 (file)
index ce9d86d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-(* Goal (u,v,w,x,y,z:R)``u+v+w+x+y+z==z+y+x+w+v+u``. *)
-alias eq        /Coq/Init/Logic/Equality/eq.ind#1/1
-alias eqT       /Coq/Init/Logic_Type/eqT.ind#1/1
-alias R         /Coq/Reals/Rdefinitions/R.con
-alias Rplus     /Coq/Reals/Rdefinitions/Rplus.con
-alias Rmult     /Coq/Reals/Rdefinitions/Rmult.con
-alias R1        /Coq/Reals/Rdefinitions/R1.con
-alias R0        /Coq/Reals/Rdefinitions/R0.con
-alias Ropp      /Coq/Reals/Rdefinitions/Ropp.con
-!u:R.!v:R.!w:R.!x:R.!y:R.!z:R.
-(eqT R
-  (Rplus (Rplus (Rplus (Rplus (Rplus u v) w) x) y) z)
-  (Rplus (Rplus (Rplus (Rplus (Rplus z y) x) w) v) u)
-)
diff --git a/helm/gTopLevel/esempi/sets.cic b/helm/gTopLevel/esempi/sets.cic
deleted file mode 100644 (file)
index 5bd913e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Open:
-/Coq/Sets/Powerset_facts/Union_commutative.con
-
-We prove the conjunction again:
-
-alias U /Coq/Sets/Ensembles/Ensembles/U.var
-alias V /Coq/Sets/Powerset_facts/Sets_as_an_algebra/U.var
-alias Ensemble /Coq/Sets/Ensembles/Ensemble.con
-alias Union    /Coq/Sets/Ensembles/Union.ind#1/1
-alias Included /Coq/Sets/Ensembles/Included.con
-alias and      /Coq/Init/Logic/and.ind#1/1
-
-The two parts of the conjunction can be proved in the same way. So we
-can make a Cut:
-
-!C:Ensemble{U:=V}.!D:Ensemble{U:=V}.
- (Included{U:=V} (Union{U:=V} C D) (Union{U:=V} D C))
diff --git a/helm/gTopLevel/esempi/various.cic b/helm/gTopLevel/esempi/various.cic
deleted file mode 100644 (file)
index 11141d4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-!n:nat.(eq nat n n)
-
-!n:nat.!m:nat.(eq nat n m)->(eq nat m n)
-
-!n:nat.!m:nat.!p:nat.(eq nat n p)->(eq nat p m)->(eq nat n m)
-
diff --git a/helm/gTopLevel/gTopLevel.ml b/helm/gTopLevel/gTopLevel.ml
deleted file mode 100644 (file)
index f1710cf..0000000
+++ /dev/null
@@ -1,2879 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 06/01/2002                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-open Printf;;
-
-(* DEBUGGING *)
-
-module MQI  = MQueryInterpreter
-module MQIC = MQIConn
-module MQGT = MQGTypes
-module MQGU = MQGUtil
-module MQG  = MQueryGenerator
-
-(* GLOBAL CONSTANTS *)
-
-let mqi_flags = [MQIC.Postgres ; MQIC.Stat ; MQIC.Warn ; MQIC.Log] (* default MathQL interpreter options *)
-(*
-let mqi_flags = [] (* default MathQL interpreter options *)
-*)
-let mqi_handle = MQIC.init mqi_flags prerr_string
-
-let xlinkns = Gdome.domString "http://www.w3.org/1999/xlink";;
-
-let htmlheader =
- "<html>" ^
- " <body bgColor=\"white\">"
-;;
-
-let htmlfooter =
- " </body>" ^
- "</html>"
-;;
-
-let prooffile =
- try
-  Sys.getenv "GTOPLEVEL_PROOFFILE"
- with
-  Not_found -> "/public/currentproof"
-;;
-
-let prooffiletype =
- try
-  Sys.getenv "GTOPLEVEL_PROOFFILETYPE"
- with
-  Not_found -> "/public/currentprooftype"
-;;
-
-(* GLOBAL REFERENCES (USED BY CALLBACKS) *)
-
-let htmlheader_and_content = ref htmlheader;;
-
-let check_term = ref (fun _ _ _ -> assert false);;
-
-exception RenderingWindowsNotInitialized;;
-
-let set_rendering_window,rendering_window =
- let rendering_window_ref = ref None in
-  (function rw -> rendering_window_ref := Some rw),
-  (function () ->
-    match !rendering_window_ref with
-       None -> raise RenderingWindowsNotInitialized
-     | Some rw -> rw
-  )
-;;
-
-exception SettingsWindowsNotInitialized;;
-
-let set_settings_window,settings_window =
- let settings_window_ref = ref None in
-  (function rw -> settings_window_ref := Some rw),
-  (function () ->
-    match !settings_window_ref with
-       None -> raise SettingsWindowsNotInitialized
-     | Some rw -> rw
-  )
-;;
-
-exception OutputHtmlNotInitialized;;
-
-let set_outputhtml,outputhtml =
- let outputhtml_ref = ref None in
-  (function rw -> outputhtml_ref := Some rw),
-  (function () ->
-    match !outputhtml_ref with
-       None -> raise OutputHtmlNotInitialized
-     | Some outputhtml -> outputhtml
-  )
-;;
-
-exception QedSetSensitiveNotInitialized;;
-let qed_set_sensitive =
- ref (function _ -> raise QedSetSensitiveNotInitialized)
-;;
-
-exception SaveSetSensitiveNotInitialized;;
-let save_set_sensitive =
- ref (function _ -> raise SaveSetSensitiveNotInitialized)
-;;
-
-(* COMMAND LINE OPTIONS *)
-
-let usedb = ref true
-
-let argspec =
-  [
-    "-nodb", Arg.Clear usedb, "disable use of MathQL DB"
-  ]
-in
-Arg.parse argspec ignore ""
-
-(* MISC FUNCTIONS *)
-
-let term_of_cic_textual_parser_uri uri =
- let module C = Cic in
- let module CTP = CicTextualParser0 in
-  match uri with
-     CTP.ConUri uri -> C.Const (uri,[])
-   | CTP.VarUri uri -> C.Var (uri,[])
-   | CTP.IndTyUri (uri,tyno) -> C.MutInd (uri,tyno,[])
-   | CTP.IndConUri (uri,tyno,consno) -> C.MutConstruct (uri,tyno,consno,[])
-;;
-
-let string_of_cic_textual_parser_uri uri =
- let module C = Cic in
- let module CTP = CicTextualParser0 in
-  let uri' =
-   match uri with
-      CTP.ConUri uri -> UriManager.string_of_uri uri
-    | CTP.VarUri uri -> UriManager.string_of_uri uri
-    | CTP.IndTyUri (uri,tyno) ->
-       UriManager.string_of_uri uri ^ "#1/" ^ string_of_int (tyno + 1)
-    | CTP.IndConUri (uri,tyno,consno) ->
-       UriManager.string_of_uri uri ^ "#1/" ^ string_of_int (tyno + 1) ^ "/" ^
-        string_of_int consno
-  in
-   (* 4 = String.length "cic:" *)
-   String.sub uri' 4 (String.length uri' - 4)
-;;
-
-let output_html outputhtml msg =
- htmlheader_and_content := !htmlheader_and_content ^ msg ;
- outputhtml#source (!htmlheader_and_content ^ htmlfooter) ;
- outputhtml#set_topline (-1)
-;;
-
-(* UTILITY FUNCTIONS TO DISAMBIGUATE AN URI *)
-
-(* Check window *)
-
-let check_window outputhtml uris =
- let window =
-  GWindow.window
-   ~width:800 ~modal:true ~title:"Check" ~border_width:2 () in
- let notebook =
-  GPack.notebook ~scrollable:true ~packing:window#add () in
- window#show () ;
- let render_terms =
-  List.map
-   (function uri ->
-     let scrolled_window =
-      GBin.scrolled_window ~border_width:10
-       ~packing:
-         (notebook#append_page ~tab_label:((GMisc.label ~text:uri ())#coerce))
-       ()
-     in
-      lazy 
-       (let mmlwidget =
-         TermViewer.sequent_viewer
-          ~packing:scrolled_window#add ~width:400 ~height:280 () in
-        let expr =
-         let term =
-          term_of_cic_textual_parser_uri
-           (MQueryMisc.cic_textual_parser_uri_of_string uri)
-         in
-          (Cic.Cast (term, CicTypeChecker.type_of_aux' [] [] term))
-        in
-         try
-          mmlwidget#load_sequent [] (111,[],expr)
-         with
-          e ->
-           output_html outputhtml
-            ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>")
-       )
-   ) uris
- in
-  ignore
-   (notebook#connect#switch_page
-     (function i -> Lazy.force (List.nth render_terms i)))
-;;
-
-exception NoChoice;;
-
-let
- interactive_user_uri_choice ~(selection_mode:[`SINGLE|`EXTENDED]) ?(ok="Ok")
-  ?(enable_button_for_non_vars=false) ~title ~msg uris
-=
- let choices = ref [] in
- let chosen = ref false in
- let use_only_constants = ref false in
- let window =
-  GWindow.dialog ~modal:true ~title ~width:600 () in
- let lMessage =
-  GMisc.label ~text:msg
-   ~packing:(window#vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let scrolled_window =
-  GBin.scrolled_window ~border_width:10
-   ~packing:(window#vbox#pack ~expand:true ~fill:true ~padding:5) () in
- let clist =
-  let expected_height = 18 * List.length uris in
-   let height = if expected_height > 400 then 400 else expected_height in
-    GList.clist ~columns:1 ~packing:scrolled_window#add
-     ~height ~selection_mode:(selection_mode :> Gtk.Tags.selection_mode) () in
- let _ = List.map (function x -> clist#append [x]) uris in
- let hbox2 =
-  GPack.hbox ~border_width:0
-   ~packing:(window#vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let explain_label =
-  GMisc.label ~text:"None of the above. Try this one:"
-   ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5) () in
- let manual_input =
-  GEdit.entry ~editable:true
-   ~packing:(hbox2#pack ~expand:true ~fill:true ~padding:5) () in
- let hbox =
-  GPack.hbox ~border_width:0 ~packing:window#action_area#add () in
- let okb =
-  GButton.button ~label:ok
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let _ = okb#misc#set_sensitive false in
- let nonvarsb =
-  GButton.button
-   ~packing:
-    (function w ->
-      if enable_button_for_non_vars then
-       hbox#pack ~expand:false ~fill:false ~padding:5 w)
-   ~label:"Try constants only" () in
- let checkb =
-  GButton.button ~label:"Check"
-   ~packing:(hbox#pack ~padding:5) () in
- let _ = checkb#misc#set_sensitive false in
- let cancelb =
-  GButton.button ~label:"Abort"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- (* actions *)
- let check_callback () =
-  assert (List.length !choices > 0) ;
-  check_window (outputhtml ()) !choices
- in
-  ignore (window#connect#destroy GMain.Main.quit) ;
-  ignore (cancelb#connect#clicked window#destroy) ;
-  ignore
-   (okb#connect#clicked (function () -> chosen := true ; window#destroy ())) ;
-  ignore
-   (nonvarsb#connect#clicked
-     (function () ->
-       use_only_constants := true ;
-       chosen := true ;
-       window#destroy ()
-   )) ;
-  ignore (checkb#connect#clicked check_callback) ;
-  ignore
-   (clist#connect#select_row
-     (fun ~row ~column ~event ->
-       checkb#misc#set_sensitive true ;
-       okb#misc#set_sensitive true ;
-       choices := (List.nth uris row)::!choices)) ;
-  ignore
-   (clist#connect#unselect_row
-     (fun ~row ~column ~event ->
-       choices :=
-        List.filter (function uri -> uri != (List.nth uris row)) !choices)) ;
-  ignore
-   (manual_input#connect#changed
-     (fun _ ->
-       if manual_input#text = "" then
-        begin
-         choices := [] ;
-         checkb#misc#set_sensitive false ;
-         okb#misc#set_sensitive false ;
-         clist#misc#set_sensitive true
-        end
-       else
-        begin
-         choices := [manual_input#text] ;
-         clist#unselect_all () ;
-         checkb#misc#set_sensitive true ;
-         okb#misc#set_sensitive true ;
-         clist#misc#set_sensitive false
-        end));
-  window#set_position `CENTER ;
-  window#show () ;
-  GtkThread.main ();
-  if !chosen then
-   if !use_only_constants then
-    List.filter
-     (function uri -> not (String.sub uri (String.length uri - 4) 4 = ".var"))
-     uris
-   else
-    if List.length !choices > 0 then !choices else raise NoChoice
-  else
-   raise NoChoice
-;;
-
-let interactive_interpretation_choice interpretations =
- let chosen = ref None in
- let window =
-  GWindow.window
-   ~modal:true ~title:"Ambiguous well-typed input." ~border_width:2 () in
- let vbox = GPack.vbox ~packing:window#add () in
- let lMessage =
-  GMisc.label
-   ~text:
-    ("Ambiguous input since there are many well-typed interpretations." ^
-     " Please, choose one of them.")
-   ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let notebook =
-  GPack.notebook ~scrollable:true
-   ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in
- let _ =
-  List.map
-   (function interpretation ->
-     let clist =
-      let expected_height = 18 * List.length interpretation in
-       let height = if expected_height > 400 then 400 else expected_height in
-        GList.clist ~columns:2 ~packing:notebook#append_page ~height
-         ~titles:["id" ; "URI"] ()
-     in
-      ignore
-       (List.map
-         (function (id,uri) ->
-           let n = clist#append [id;uri] in
-            clist#set_row ~selectable:false n
-         ) interpretation
-       ) ;
-      clist#columns_autosize ()
-   ) interpretations in
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let okb =
-  GButton.button ~label:"Ok"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let cancelb =
-  GButton.button ~label:"Abort"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- (* actions *)
- ignore (window#connect#destroy GMain.Main.quit) ;
- ignore (cancelb#connect#clicked window#destroy) ;
- ignore
-  (okb#connect#clicked
-    (function () -> chosen := Some notebook#current_page ; window#destroy ())) ;
- window#set_position `CENTER ;
- window#show () ;
- GtkThread.main ();
- match !chosen with
-    None -> raise NoChoice
-  | Some n -> n
-;;
-
-
-(* MISC FUNCTIONS *)
-
-let
- save_object_to_disk uri annobj ids_to_inner_sorts ids_to_inner_types pathname
-=
- let name =
-  let struri = UriManager.string_of_uri uri in
-  let idx = (String.rindex struri '/') + 1 in
-   String.sub struri idx (String.length struri - idx)
- in
-  let path = pathname ^ "/" ^ name in
-  let xml, bodyxml =
-   Cic2Xml.print_object uri ~ids_to_inner_sorts ~ask_dtd_to_the_getter:false
-    annobj 
-  in
-  let xmlinnertypes =
-   Cic2Xml.print_inner_types uri ~ids_to_inner_sorts ~ids_to_inner_types
-    ~ask_dtd_to_the_getter:false
-  in
-   (* innertypes *)
-   let innertypesuri = UriManager.innertypesuri_of_uri uri in
-    Xml.pp ~quiet:true xmlinnertypes (Some (path ^ ".types.xml")) ;
-    Getter.register innertypesuri
-     (Configuration.annotations_url ^
-       Str.replace_first (Str.regexp "^cic:") ""
-        (UriManager.string_of_uri innertypesuri) ^ ".xml"
-     ) ;
-    (* constant type / variable / mutual inductive types definition *)
-    Xml.pp ~quiet:true xml (Some (path ^ ".xml")) ;
-    Getter.register uri
-     (Configuration.annotations_url ^
-       Str.replace_first (Str.regexp "^cic:") ""
-        (UriManager.string_of_uri uri) ^ ".xml"
-     ) ;
-    match bodyxml with
-       None -> ()
-     | Some bodyxml' ->
-        (* constant body *)
-        let bodyuri =
-         match UriManager.bodyuri_of_uri uri with
-            None -> assert false
-          | Some bodyuri -> bodyuri
-        in
-         Xml.pp ~quiet:true bodyxml' (Some (path ^ ".body.xml")) ;
-         Getter.register bodyuri
-          (Configuration.annotations_url ^
-            Str.replace_first (Str.regexp "^cic:") ""
-             (UriManager.string_of_uri bodyuri) ^ ".xml"
-          )
-;;
-
-
-(* CALLBACKS *)
-
-exception OpenConjecturesStillThere;;
-exception WrongProof;;
-
-let pathname_of_annuri uristring =
- Configuration.annotations_dir ^    
-  Str.replace_first (Str.regexp "^cic:") "" uristring
-;;
-
-let make_dirs dirpath =
- ignore (Unix.system ("mkdir -p " ^ dirpath))
-;;
-
-let save_obj uri obj =
- let
-  (acic,ids_to_terms,ids_to_father_ids,ids_to_inner_sorts,
-   ids_to_inner_types,ids_to_conjectures,ids_to_hypotheses)
- =
-  Cic2acic.acic_object_of_cic_object obj
- in
-  (* let's save the theorem and register it to the getter *) 
-  let pathname = pathname_of_annuri (UriManager.buri_of_uri uri) in
-   make_dirs pathname ;
-   save_object_to_disk uri acic ids_to_inner_sorts ids_to_inner_types
-    pathname
-;;
-
-let qed () =
- match !ProofEngine.proof with
-    None -> assert false
-  | Some (uri,[],bo,ty) ->
-     if
-      CicReduction.are_convertible []
-       (CicTypeChecker.type_of_aux' [] [] bo) ty
-     then
-      begin
-       (*CSC: Wrong: [] is just plainly wrong *)
-       let proof = Cic.Constant (UriManager.name_of_uri uri,Some bo,ty,[]) in
-       let (acic,ids_to_inner_types,ids_to_inner_sorts) =
-        (rendering_window ())#output#load_proof uri proof
-       in
-        !qed_set_sensitive false ;
-        (* let's save the theorem and register it to the getter *) 
-        let pathname = pathname_of_annuri (UriManager.buri_of_uri uri) in
-         make_dirs pathname ;
-         save_object_to_disk uri acic ids_to_inner_sorts ids_to_inner_types
-          pathname
-      end
-     else
-      raise WrongProof
-  | _ -> raise OpenConjecturesStillThere
-;;
-
-  (** save an unfinished proof on the filesystem *)
-let save_unfinished_proof () =
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
- let (xml, bodyxml) = ProofEngine.get_current_status_as_xml () in
- Xml.pp ~quiet:true xml (Some prooffiletype) ;
- output_html outputhtml
-  ("<h1 color=\"Green\">Current proof type saved to " ^
-   prooffiletype ^ "</h1>") ;
- Xml.pp ~quiet:true bodyxml (Some prooffile) ;
- output_html outputhtml
-  ("<h1 color=\"Green\">Current proof body saved to " ^
-   prooffile ^ "</h1>")
-;;
-
-(* Used to typecheck the loaded proofs *)
-let typecheck_loaded_proof metasenv bo ty =
- let module T = CicTypeChecker in
-  ignore (
-   List.fold_left
-    (fun metasenv ((_,context,ty) as conj) ->
-      ignore (T.type_of_aux' metasenv context ty) ;
-      metasenv @ [conj]
-    ) [] metasenv) ;
-  ignore (T.type_of_aux' metasenv [] ty) ;
-  ignore (T.type_of_aux' metasenv [] bo)
-;;
-
-let decompose_uris_choice_callback uris = 
-(* N.B.: in questo passaggio perdo l'informazione su exp_named_subst !!!! *)
-  let module U = UriManager in 
-   List.map 
-    (function uri ->
-      match MQueryMisc.cic_textual_parser_uri_of_string uri with
-         CicTextualParser0.IndTyUri (uri,typeno) -> (uri,typeno,[])
-       | _ -> assert false)
-    (interactive_user_uri_choice 
-      ~selection_mode:`EXTENDED ~ok:"Ok" ~enable_button_for_non_vars:false 
-      ~title:"Decompose" ~msg:"Please, select the Inductive Types to decompose" 
-      (List.map 
-        (function (uri,typeno,_) ->
-          U.string_of_uri uri ^ "#1/" ^ string_of_int (typeno+1)
-        ) uris)
-    ) 
-;;
-
-let mk_fresh_name_callback context name ~typ =
- let fresh_name =
-  match ProofEngineHelpers.mk_fresh_name context name ~typ with
-     Cic.Name fresh_name -> fresh_name
-   | Cic.Anonymous -> assert false
- in
-  match
-   GToolbox.input_string ~title:"Enter a fresh hypothesis name" ~text:fresh_name
-    ("Enter a fresh name for the hypothesis " ^
-      CicPp.pp typ
-       (List.map (function None -> None | Some (n,_) -> Some n) context))
-  with
-     Some fresh_name' -> Cic.Name fresh_name'
-   | None -> raise NoChoice
-;;
-
-let refresh_proof (output : TermViewer.proof_viewer) =
- try
-  let uri,currentproof =
-   match !ProofEngine.proof with
-      None -> assert false
-    | Some (uri,metasenv,bo,ty) ->
-       if List.length metasenv = 0 then
-        begin
-         !qed_set_sensitive true ;
-prerr_endline "CSC: ###### REFRESH_PROOF, Hbugs.clear ()" ;
-         Hbugs.clear ()
-        end
-       else
-begin
-prerr_endline "CSC: ###### REFRESH_PROOF, Hbugs.notify ()" ;
-        Hbugs.notify () ;
-end ;
-       (*CSC: Wrong: [] is just plainly wrong *)
-       uri,
-        (Cic.CurrentProof (UriManager.name_of_uri uri, metasenv, bo, ty, []))
-  in
-   ignore (output#load_proof uri currentproof)
- with
-  e ->
- match !ProofEngine.proof with
-    None -> assert false
-  | Some (uri,metasenv,bo,ty) ->
-prerr_endline ("Offending proof: " ^ CicPp.ppobj (Cic.CurrentProof ("questa",metasenv,bo,ty,[]))) ; flush stderr ;
-   raise (InvokeTactics.RefreshProofException e)
-
-let refresh_goals ?(empty_notebook=true) notebook =
- try
-  match !ProofEngine.goal with
-     None ->
-      if empty_notebook then
-       begin 
-        notebook#remove_all_pages ~skip_switch_page_event:false ;
-        notebook#set_empty_page
-       end
-      else
-       notebook#proofw#unload
-   | Some metano ->
-      let metasenv =
-       match !ProofEngine.proof with
-          None -> assert false
-        | Some (_,metasenv,_,_) -> metasenv
-      in
-      let currentsequent =
-       List.find (function (m,_,_) -> m=metano) metasenv
-      in
-        let regenerate_notebook () = 
-         let skip_switch_page_event =
-          match metasenv with
-             (m,_,_)::_ when m = metano -> false
-           | _ -> true
-         in
-          notebook#remove_all_pages ~skip_switch_page_event ;
-          List.iter (function (m,_,_) -> notebook#add_page m) metasenv ;
-        in
-          if empty_notebook then
-           begin
-            regenerate_notebook () ;
-            notebook#set_current_page
-             ~may_skip_switch_page_event:false metano
-           end
-          else
-           begin
-            notebook#set_current_page
-             ~may_skip_switch_page_event:true metano ;
-            notebook#proofw#load_sequent metasenv currentsequent
-           end
- with
-  e ->
-let metano =
-  match !ProofEngine.goal with
-     None -> assert false
-   | Some m -> m
-in
-let metasenv =
- match !ProofEngine.proof with
-    None -> assert false
-  | Some (_,metasenv,_,_) -> metasenv
-in
-try
-let currentsequent = List.find (function (m,_,_) -> m=metano) metasenv in
-   prerr_endline ("Offending sequent: " ^ SequentPp.TextualPp.print_sequent currentsequent) ; flush stderr ;
-      raise (InvokeTactics.RefreshSequentException e)
-with Not_found -> prerr_endline ("Offending sequent " ^ string_of_int metano ^ " unknown."); raise (InvokeTactics.RefreshSequentException e)
-
-module InvokeTacticsCallbacks =
- struct
-  let sequent_viewer () = (rendering_window ())#notebook#proofw
-  let term_editor () = (rendering_window ())#inputt
-  let scratch_window () = (rendering_window ())#scratch_window
-
-  let refresh_proof () =
-   let output = ((rendering_window ())#output : TermViewer.proof_viewer) in
-    refresh_proof output
-
-  let refresh_goals () =
-   let notebook = (rendering_window ())#notebook in
-    refresh_goals notebook
-
-  let decompose_uris_choice_callback = decompose_uris_choice_callback
-  let mk_fresh_name_callback = mk_fresh_name_callback
-  let output_html msg = output_html (outputhtml ()) msg
- end
-;;
-module InvokeTactics' = InvokeTactics.Make (InvokeTacticsCallbacks);;
-(* Just to initialize the Hbugs module *)
-module Ignore = Hbugs.Initialize (InvokeTactics');;
-
-  (** load an unfinished proof from filesystem *)
-let load_unfinished_proof () =
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
- let output = ((rendering_window ())#output : TermViewer.proof_viewer) in
- let notebook = (rendering_window ())#notebook in
-  try
-   match 
-    GToolbox.input_string ~title:"Load Unfinished Proof" ~text:"/dummy.con"
-     "Choose an URI:"
-   with
-      None -> raise NoChoice
-    | Some uri0 ->
-       let uri = UriManager.uri_of_string ("cic:" ^ uri0) in
-        match CicParser.obj_of_xml prooffiletype (Some prooffile) with
-           Cic.CurrentProof (_,metasenv,bo,ty,_) ->
-            typecheck_loaded_proof metasenv bo ty ;
-            ProofEngine.proof :=
-             Some (uri, metasenv, bo, ty) ;
-            ProofEngine.goal :=
-             (match metasenv with
-                 [] -> None
-               | (metano,_,_)::_ -> Some metano
-             ) ;
-            refresh_proof output ;
-            refresh_goals notebook ;
-             output_html outputhtml
-              ("<h1 color=\"Green\">Current proof type loaded from " ^
-                prooffiletype ^ "</h1>") ;
-             output_html outputhtml
-              ("<h1 color=\"Green\">Current proof body loaded from " ^
-                prooffile ^ "</h1>") ;
-            !save_set_sensitive true;
-         | _ -> assert false
-  with
-     InvokeTactics.RefreshSequentException e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-        "sequent: " ^ Printexc.to_string e ^ "</h1>")
-   | InvokeTactics.RefreshProofException e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-        "proof: " ^ Printexc.to_string e ^ "</h1>")
-   | e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-;;
-
-let edit_aliases () =
- let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in
- let id_to_uris = inputt#id_to_uris in
- let chosen = ref false in
- let window =
-  GWindow.window
-   ~width:400 ~modal:true ~title:"Edit Aliases..." ~border_width:2 () in
- let vbox =
-  GPack.vbox ~border_width:0 ~packing:window#add () in
- let scrolled_window =
-  GBin.scrolled_window ~border_width:10
-   ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in
- let input = GEdit.text ~editable:true ~width:400 ~height:100
-   ~packing:scrolled_window#add () in
- let hbox =
-  GPack.hbox ~border_width:0
-   ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let okb =
-  GButton.button ~label:"Ok"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let cancelb =
-  GButton.button ~label:"Cancel"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- ignore (window#connect#destroy GMain.Main.quit) ;
- ignore (cancelb#connect#clicked window#destroy) ;
- ignore
-  (okb#connect#clicked (function () -> chosen := true ; window#destroy ())) ;
- let dom,resolve_id = !id_to_uris in
-  ignore
-   (input#insert_text ~pos:0
-    (String.concat "\n"
-      (List.map
-        (function v ->
-          let uri =
-           match resolve_id v with
-              None -> assert false
-            | Some (CicTextualParser0.Uri uri) -> uri
-            | Some (CicTextualParser0.Term _)
-            | Some CicTextualParser0.Implicit -> assert false
-          in
-           "alias " ^
-            (match v with
-                CicTextualParser0.Id id -> id
-              | CicTextualParser0.Symbol (descr,_) ->
-                 (* CSC: To be implemented *)
-                 assert false
-            )^ " " ^ (string_of_cic_textual_parser_uri uri)
-        ) dom))) ;
-  window#show () ;
-  GtkThread.main ();
-  if !chosen then
-   let dom,resolve_id =
-    let inputtext = input#get_chars 0 input#length in
-    let regexpr =
-     let alfa = "[a-zA-Z_-]" in
-     let digit = "[0-9]" in
-     let ident = alfa ^ "\(" ^ alfa ^ "\|" ^ digit ^ "\)*" in
-     let blanks = "\( \|\t\|\n\)+" in
-     let nonblanks = "[^ \t\n]+" in
-     let uri = "/\(" ^ ident ^ "/\)*" ^ nonblanks in (* not very strict check *)
-      Str.regexp
-       ("alias" ^ blanks ^ "\(" ^ ident ^ "\)" ^ blanks ^ "\(" ^ uri ^ "\)")
-    in
-     let rec aux n =
-      try
-       let n' = Str.search_forward regexpr inputtext n in
-        let id = CicTextualParser0.Id (Str.matched_group 2 inputtext) in
-        let uri =
-         MQueryMisc.cic_textual_parser_uri_of_string
-          ("cic:" ^ (Str.matched_group 5 inputtext))
-        in
-         let dom,resolve_id = aux (n' + 1) in
-          if List.mem id dom then
-           dom,resolve_id
-          else
-           id::dom,
-            (function id' ->
-              if id = id' then
-               Some (CicTextualParser0.Uri uri)
-              else resolve_id id')
-      with
-       Not_found -> TermEditor.empty_id_to_uris
-     in
-      aux 0
-   in
-    id_to_uris := (dom,resolve_id)
-;;
-
-let proveit () =
- let module L = LogicalOperations in
- let module G = Gdome in
- let notebook = (rendering_window ())#notebook in
- let output = (rendering_window ())#output in
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
-  try
-   output#make_sequent_of_selected_term ;
-   refresh_proof output ;
-   refresh_goals notebook
-  with
-     InvokeTactics.RefreshSequentException e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-        "sequent: " ^ Printexc.to_string e ^ "</h1>")
-   | InvokeTactics.RefreshProofException e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-        "proof: " ^ Printexc.to_string e ^ "</h1>")
-   | e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>")
-;;
-
-let focus () =
- let module L = LogicalOperations in
- let module G = Gdome in
- let notebook = (rendering_window ())#notebook in
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
- let output = (rendering_window ())#output in
-  try
-   output#focus_sequent_of_selected_term ;
-   refresh_goals notebook
-  with
-     InvokeTactics.RefreshSequentException e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-        "sequent: " ^ Printexc.to_string e ^ "</h1>")
-   | InvokeTactics.RefreshProofException e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-        "proof: " ^ Printexc.to_string e ^ "</h1>")
-   | e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>")
-;;
-
-exception NoPrevGoal;;
-exception NoNextGoal;;
-
-let setgoal metano =
- let module L = LogicalOperations in
- let module G = Gdome in
- let notebook = (rendering_window ())#notebook in
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
-  let metasenv =
-   match !ProofEngine.proof with
-      None -> assert false
-    | Some (_,metasenv,_,_) -> metasenv
-  in
-   try
-    refresh_goals ~empty_notebook:false notebook
-   with
-      InvokeTactics.RefreshSequentException e ->
-       output_html outputhtml
-        ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-         "sequent: " ^ Printexc.to_string e ^ "</h1>")
-    | e ->
-       output_html outputhtml
-        ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>")
-;;
-
-let
- show_in_show_window_obj, show_in_show_window_uri, show_in_show_window_callback
-=
- let window =
-  GWindow.window ~width:800 ~border_width:2 () in
- let scrolled_window =
-  GBin.scrolled_window ~border_width:10 ~packing:window#add () in
- let mmlwidget =
-  GMathViewAux.single_selection_math_view
-    ~packing:scrolled_window#add ~width:600 ~height:400 ()
- in
- let _ = window#event#connect#delete (fun _ -> window#misc#hide () ; true ) in
- let href = Gdome.domString "href" in
-  let show_in_show_window_obj uri obj =
-   let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
-    try
-     let
-      (acic,ids_to_terms,ids_to_father_ids,ids_to_inner_sorts,
-       ids_to_inner_types,ids_to_conjectures,ids_to_hypotheses)
-     =
-      Cic2acic.acic_object_of_cic_object obj
-     in
-      let mml =
-       ApplyStylesheets.mml_of_cic_object
-        ~explode_all:false uri acic ids_to_inner_sorts ids_to_inner_types
-      in
-       window#set_title (UriManager.string_of_uri uri) ;
-       window#misc#hide () ; window#show () ;
-       mmlwidget#load_doc mml ;
-    with
-     e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-  in
-  let show_in_show_window_uri uri =
-   let obj = CicEnvironment.get_obj uri in
-    show_in_show_window_obj uri obj
-  in
-   let show_in_show_window_callback mmlwidget (n : Gdome.element option) _ =
-    match n with
-       None -> ()
-     | Some n' ->
-        if n'#hasAttributeNS ~namespaceURI:xlinkns ~localName:href then
-         let uri =
-          (n'#getAttributeNS ~namespaceURI:xlinkns ~localName:href)#to_string
-         in 
-          show_in_show_window_uri (UriManager.uri_of_string uri)
-        else
-         ignore (mmlwidget#action_toggle n')
-   in
-    let _ =
-     mmlwidget#connect#click (show_in_show_window_callback mmlwidget)
-    in
-     show_in_show_window_obj, show_in_show_window_uri,
-      show_in_show_window_callback
-;;
-
-exception NoObjectsLocated;;
-
-let user_uri_choice ~title ~msg uris =
- let uri =
-  match uris with
-     [] -> raise NoObjectsLocated
-   | [uri] -> uri
-   | uris ->
-      match
-       interactive_user_uri_choice ~selection_mode:`SINGLE ~title ~msg uris
-      with
-         [uri] -> uri
-       | _ -> assert false
- in
-  String.sub uri 4 (String.length uri - 4)
-;;
-
-let locate_callback id =
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
- let out = output_html outputhtml in
- let query = MQG.locate id in
- let result = MQI.execute mqi_handle query in
- let uris =
-  List.map
-   (function uri,_ ->
-     MQueryMisc.wrong_xpointer_format_from_wrong_xpointer_format' uri)
-   result in
-  out "<h1>Locate Query: </h1><pre>";
-  MQueryUtil.text_of_query out query ""; 
-  out "<h1>Result:</h1>";
-  MQueryUtil.text_of_result out result "<br>";
-  user_uri_choice ~title:"Ambiguous input."
-   ~msg:
-     ("Ambiguous input \"" ^ id ^
-      "\". Please, choose one interpetation:")
-   uris
-;;
-
-
-let input_or_locate_uri ~title =
- let uri = ref None in
- let window =
-  GWindow.window
-   ~width:400 ~modal:true ~title ~border_width:2 () in
- let vbox = GPack.vbox ~packing:window#add () in
- let hbox1 =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let _ =
-  GMisc.label ~text:"Enter a valid URI:" ~packing:(hbox1#pack ~padding:5) () in
- let manual_input =
-  GEdit.entry ~editable:true
-   ~packing:(hbox1#pack ~expand:true ~fill:true ~padding:5) () in
- let checkb =
-  GButton.button ~label:"Check"
-   ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in
- let _ = checkb#misc#set_sensitive false in
- let hbox2 =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let _ =
-  GMisc.label ~text:"You can also enter an indentifier to locate:"
-   ~packing:(hbox2#pack ~padding:5) () in
- let locate_input =
-  GEdit.entry ~editable:true
-   ~packing:(hbox2#pack ~expand:true ~fill:true ~padding:5) () in
- let locateb =
-  GButton.button ~label:"Locate"
-   ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5) () in
- let _ = locateb#misc#set_sensitive false in
- let hbox3 =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let okb =
-  GButton.button ~label:"Ok"
-   ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in
- let _ = okb#misc#set_sensitive false in
- let cancelb =
-  GButton.button ~label:"Cancel"
-   ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) ()
- in
-  ignore (window#connect#destroy GMain.Main.quit) ;
-  ignore
-   (cancelb#connect#clicked (function () -> uri := None ; window#destroy ())) ;
-  let check_callback () =
-   let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
-   let uri = "cic:" ^ manual_input#text in
-    try
-      ignore (Getter.resolve (UriManager.uri_of_string uri)) ;
-      output_html outputhtml "<h1 color=\"Green\">OK</h1>" ;
-      true
-    with
-       Getter.Unresolved ->
-        output_html outputhtml
-         ("<h1 color=\"Red\">URI " ^ uri ^
-          " does not correspond to any object.</h1>") ;
-        false
-     | UriManager.IllFormedUri _ ->
-        output_html outputhtml
-         ("<h1 color=\"Red\">URI " ^ uri ^ " is not well-formed.</h1>") ;
-        false
-     | e ->
-        output_html outputhtml
-         ("<h1 color=\"Red\">" ^ Printexc.to_string e ^ "</h1>") ;
-        false
-  in
-  ignore
-   (okb#connect#clicked
-     (function () ->
-       if check_callback () then
-        begin
-         uri := Some manual_input#text ;
-         window#destroy ()
-        end
-   )) ;
-  ignore (checkb#connect#clicked (function () -> ignore (check_callback ()))) ;
-  ignore
-   (manual_input#connect#changed
-     (fun _ ->
-       if manual_input#text = "" then
-        begin
-         checkb#misc#set_sensitive false ;
-         okb#misc#set_sensitive false
-        end
-       else
-        begin
-         checkb#misc#set_sensitive true ;
-         okb#misc#set_sensitive true
-        end));
-  ignore
-   (locate_input#connect#changed
-     (fun _ -> locateb#misc#set_sensitive (locate_input#text <> ""))) ;
-  ignore
-   (locateb#connect#clicked
-     (function () ->
-       let id = locate_input#text in
-        manual_input#set_text (locate_callback id) ;
-        locate_input#delete_text 0 (String.length id)
-   )) ;
-  window#show () ;
-  GtkThread.main ();
-  match !uri with
-     None -> raise NoChoice
-   | Some uri -> UriManager.uri_of_string ("cic:" ^ uri)
-;;
-
-exception AmbiguousInput;;
-
-(* A WIDGET TO ENTER CIC TERMS *)
-
-module ChosenTermEditor  = TexTermEditor;;
-module ChosenTextualParser0 = TexCicTextualParser0;;
-(*
-module ChosenTermEditor = TermEditor;;
-module ChosenTextualParser0 = CicTextualParser0;;
-*)
-
-module Callbacks =
- struct
-  let get_metasenv () = !ChosenTextualParser0.metasenv
-  let set_metasenv metasenv = ChosenTextualParser0.metasenv := metasenv
-
-  let output_html msg = output_html (outputhtml ()) msg;;
-  let interactive_user_uri_choice =
-   fun ~selection_mode ?ok ?enable_button_for_non_vars ~title ~msg ~id ->
-    interactive_user_uri_choice ~selection_mode ?ok
-     ?enable_button_for_non_vars ~title ~msg;;
-  let interactive_interpretation_choice = interactive_interpretation_choice;;
-  let input_or_locate_uri = input_or_locate_uri;;
- end
-;;
-
-module TexTermEditor' = ChosenTermEditor.Make(Callbacks);;
-
-(* OTHER FUNCTIONS *)
-
-let locate () =
- let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
-   try
-    match
-     GToolbox.input_string ~title:"Locate" "Enter an identifier to locate:"
-    with
-       None -> raise NoChoice
-     | Some input ->
-        let uri = locate_callback input in
-         inputt#set_term uri
-   with
-    e ->
-     output_html outputhtml
-      ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>")
-;;
-
-
-exception UriAlreadyInUse;;
-exception NotAUriToAConstant;;
-
-let new_inductive () =
- let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
- let output = ((rendering_window ())#output : TermViewer.proof_viewer) in
- let notebook = (rendering_window ())#notebook in
-
- let chosen = ref false in
- let inductive = ref true in
- let paramsno = ref 0 in
- let get_uri = ref (function _ -> assert false) in
- let get_base_uri = ref (function _ -> assert false) in
- let get_names = ref (function _ -> assert false) in
- let get_types_and_cons = ref (function _ -> assert false) in
- let get_context_and_subst = ref (function _ -> assert false) in 
- let window =
-  GWindow.window
-   ~width:600 ~modal:true ~position:`CENTER
-   ~title:"New Block of Mutual (Co)Inductive Definitions"
-   ~border_width:2 () in
- let vbox = GPack.vbox ~packing:window#add () in
- let hbox =
-  GPack.hbox ~border_width:0
-   ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let _ =
-  GMisc.label ~text:"Enter the URI for the new block:"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let uri_entry =
-  GEdit.entry ~editable:true
-   ~packing:(hbox#pack ~expand:true ~fill:true ~padding:5) () in
- let hbox0 =
-  GPack.hbox ~border_width:0
-   ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let _ =
-  GMisc.label
-   ~text:
-     "Enter the number of left parameters in every arity and constructor type:"
-   ~packing:(hbox0#pack ~expand:false ~fill:false ~padding:5) () in
- let paramsno_entry =
-  GEdit.entry ~editable:true ~text:"0"
-   ~packing:(hbox0#pack ~expand:true ~fill:true ~padding:5) () in
- let hbox1 =
-  GPack.hbox ~border_width:0
-   ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let _ =
-  GMisc.label ~text:"Are the definitions inductive or coinductive?"
-   ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in
- let inductiveb =
-  GButton.radio_button ~label:"Inductive"
-   ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in
- let coinductiveb =
-  GButton.radio_button ~label:"Coinductive"
-   ~group:inductiveb#group
-   ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in
- let hbox2 =
-  GPack.hbox ~border_width:0
-   ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let _ =
-  GMisc.label ~text:"Enter the list of the names of the types:"
-   ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5) () in
- let names_entry =
-  GEdit.entry ~editable:true
-   ~packing:(hbox2#pack ~expand:true ~fill:true ~padding:5) () in
- let hboxn =
-  GPack.hbox ~border_width:0
-   ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let okb =
-  GButton.button ~label:"> Next"
-   ~packing:(hboxn#pack ~expand:false ~fill:false ~padding:5) () in
- let _ = okb#misc#set_sensitive true in
- let cancelb =
-  GButton.button ~label:"Abort"
-   ~packing:(hboxn#pack ~expand:false ~fill:false ~padding:5) () in
- ignore (window#connect#destroy GMain.Main.quit) ;
- ignore (cancelb#connect#clicked window#destroy) ;
- (* First phase *)
- let rec phase1 () =
-  ignore
-   (okb#connect#clicked
-     (function () ->
-       try
-        let uristr = "cic:" ^ uri_entry#text in
-        let namesstr = names_entry#text in
-        let paramsno' = int_of_string (paramsno_entry#text) in
-         match Str.split (Str.regexp " +") namesstr with
-            [] -> assert false
-          | (he::tl) as names ->
-             let uri = UriManager.uri_of_string (uristr ^ "/" ^ he ^ ".ind") in
-              begin
-               try
-                ignore (Getter.resolve uri) ;
-                raise UriAlreadyInUse
-               with
-                Getter.Unresolved ->
-                 get_uri := (function () -> uri) ; 
-                 get_names := (function () -> names) ;
-                 inductive := inductiveb#active ;
-                 paramsno := paramsno' ;
-                 phase2 ()
-              end
-       with
-        e ->
-         output_html outputhtml
-          ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-     ))
- (* Second phase *)
- and phase2 () =
-  let type_widgets =
-   List.map
-    (function name ->
-      let frame =
-       GBin.frame ~label:name
-        ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in
-      let vbox = GPack.vbox ~packing:frame#add () in
-      let hbox = GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false) () in
-      let _ =
-       GMisc.label ~text:("Enter its type:")
-        ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-      let scrolled_window =
-       GBin.scrolled_window ~border_width:5
-        ~packing:(vbox#pack ~expand:true ~padding:0) () in
-      let newinputt =
-       TexTermEditor'.term_editor
-        mqi_handle
-        ~width:400 ~height:20 ~packing:scrolled_window#add 
-        ~share_id_to_uris_with:inputt ()
-        ~isnotempty_callback:
-         (function b ->
-           (*non_empty_type := b ;*)
-           okb#misc#set_sensitive true) (*(b && uri_entry#text <> ""))*)
-      in
-      let hbox =
-       GPack.hbox ~border_width:0
-        ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
-      let _ =
-       GMisc.label ~text:("Enter the list of its constructors:")
-        ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-      let cons_names_entry =
-       GEdit.entry ~editable:true
-        ~packing:(hbox#pack ~expand:true ~fill:true ~padding:5) () in
-      (newinputt,cons_names_entry)
-    ) (!get_names ())
-  in
-   vbox#remove hboxn#coerce ;
-   let hboxn =
-    GPack.hbox ~border_width:0
-     ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
-   let okb =
-    GButton.button ~label:"> Next"
-     ~packing:(hboxn#pack ~expand:false ~fill:false ~padding:5) () in
-   let cancelb =
-    GButton.button ~label:"Abort"
-     ~packing:(hboxn#pack ~expand:false ~fill:false ~padding:5) () in
-   ignore (cancelb#connect#clicked window#destroy) ;
-   ignore
-    (okb#connect#clicked
-      (function () ->
-        try
-         let names = !get_names () in
-         let types_and_cons =
-          List.map2
-           (fun name (newinputt,cons_names_entry) ->
-             let consnamesstr = cons_names_entry#text in
-             let cons_names = Str.split (Str.regexp " +") consnamesstr in
-             let metasenv,expr =
-              newinputt#get_metasenv_and_term ~context:[] ~metasenv:[]
-             in
-              match metasenv with
-                 [] -> expr,cons_names
-               | _ -> raise AmbiguousInput
-           ) names type_widgets
-         in
-          let uri = !get_uri () in
-          let _ =
-           (* Let's see if so far the definition is well-typed *)
-           let params = [] in
-           let paramsno = 0 in
-           (* To test if the arities of the inductive types are well *)
-           (* typed, we check the inductive block definition where   *)
-           (* no constructor is given to each type.                  *)
-           let tys =
-            List.map2
-             (fun name (ty,cons) -> (name, !inductive, ty, []))
-             names types_and_cons
-           in
-            CicTypeChecker.typecheck_mutual_inductive_defs uri
-             (tys,params,paramsno)
-          in
-           get_context_and_subst :=
-            (function () ->
-              let i = ref 0 in
-               List.fold_left2
-                (fun (context,subst) name (ty,_) ->
-                  let res =
-                   (Some (Cic.Name name, Cic.Decl ty))::context,
-                    (Cic.MutInd (uri,!i,[]))::subst
-                  in
-                   incr i ; res
-                ) ([],[]) names types_and_cons) ;
-           let types_and_cons' =
-            List.map2
-             (fun name (ty,cons) -> (name, !inductive, ty, phase3 name cons))
-             names types_and_cons
-           in
-            get_types_and_cons := (function () -> types_and_cons') ;
-            chosen := true ;
-            window#destroy ()
-        with
-         e ->
-          output_html outputhtml
-           ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-      ))
- (* Third phase *)
- and phase3 name cons =
-  let get_cons_types = ref (function () -> assert false) in
-  let window2 =
-   GWindow.window
-    ~width:600 ~modal:true ~position:`CENTER
-    ~title:(name ^ " Constructors")
-    ~border_width:2 () in
-  let vbox = GPack.vbox ~packing:window2#add () in
-  let cons_type_widgets =
-   List.map
-    (function consname ->
-      let hbox =
-       GPack.hbox ~border_width:0
-        ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
-      let _ =
-       GMisc.label ~text:("Enter the type of " ^ consname ^ ":")
-        ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-      let scrolled_window =
-       GBin.scrolled_window ~border_width:5
-        ~packing:(vbox#pack ~expand:true ~padding:0) () in
-      let newinputt =
-       TexTermEditor'.term_editor
-        mqi_handle
-        ~width:400 ~height:20 ~packing:scrolled_window#add
-        ~share_id_to_uris_with:inputt ()
-        ~isnotempty_callback:
-         (function b ->
-           (* (*non_empty_type := b ;*)
-           okb#misc#set_sensitive true) (*(b && uri_entry#text <> ""))*) *)())
-      in
-       newinputt
-    ) cons in
-  let hboxn =
-   GPack.hbox ~border_width:0
-    ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
-  let okb =
-   GButton.button ~label:"> Next"
-    ~packing:(hboxn#pack ~expand:false ~fill:false ~padding:5) () in
-  let _ = okb#misc#set_sensitive true in
-  let cancelb =
-   GButton.button ~label:"Abort"
-    ~packing:(hboxn#pack ~expand:false ~fill:false ~padding:5) () in
-  ignore (window2#connect#destroy GMain.Main.quit) ;
-  ignore (cancelb#connect#clicked window2#destroy) ;
-  ignore
-   (okb#connect#clicked
-     (function () ->
-       try
-        chosen := true ;
-        let context,subst= !get_context_and_subst () in
-        let cons_types =
-         List.map2
-          (fun name inputt ->
-            let metasenv,expr =
-             inputt#get_metasenv_and_term ~context ~metasenv:[]
-            in
-             match metasenv with
-                [] ->
-                 let undebrujined_expr =
-                  List.fold_left
-                   (fun expr t -> CicSubstitution.subst t expr) expr subst
-                 in
-                  name, undebrujined_expr
-              | _ -> raise AmbiguousInput
-          ) cons cons_type_widgets
-        in
-         get_cons_types := (function () -> cons_types) ;
-         window2#destroy ()
-       with
-        e ->
-         output_html outputhtml
-          ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-     )) ;
-  window2#show () ;
-  GtkThread.main ();
-  let okb_pressed = !chosen in
-   chosen := false ;
-   if (not okb_pressed) then
-    begin
-     window#destroy () ;
-     assert false (* The control never reaches this point *)
-    end
-   else
-    (!get_cons_types ())
- in
-  phase1 () ;
-  (* No more phases left or Abort pressed *) 
-  window#show () ;
-  GtkThread.main ();
-  window#destroy () ;
-  if !chosen then
-   try
-    let uri = !get_uri () in
-(*CSC: Da finire *)
-    let params = [] in
-    let tys = !get_types_and_cons () in
-     let obj = Cic.InductiveDefinition tys params !paramsno in
-      begin
-       try
-        prerr_endline (CicPp.ppobj obj) ;
-        CicTypeChecker.typecheck_mutual_inductive_defs uri
-         (tys,params,!paramsno) ;
-        with
-         e ->
-          prerr_endline "Offending mutual (co)inductive type declaration:" ;
-          prerr_endline (CicPp.ppobj obj) ;
-      end ;
-      (* We already know that obj is well-typed. We need to add it to the  *)
-      (* environment in order to compute the inner-types without having to *)
-      (* debrujin it or having to modify lots of other functions to avoid  *)
-      (* asking the environment for the MUTINDs we are defining now.       *)
-      CicEnvironment.put_inductive_definition uri obj ;
-      save_obj uri obj ;
-      show_in_show_window_obj uri obj
-   with
-    e ->
-     output_html outputhtml
-      ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-;;
-
-let new_proof () =
- let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
- let output = ((rendering_window ())#output : TermViewer.proof_viewer) in
- let notebook = (rendering_window ())#notebook in
-
- let chosen = ref false in
- let get_metasenv_and_term = ref (function _ -> assert false) in
- let get_uri = ref (function _ -> assert false) in
- let non_empty_type = ref false in
- let window =
-  GWindow.window
-   ~width:600 ~modal:true ~title:"New Proof or Definition"
-   ~border_width:2 () in
- let vbox = GPack.vbox ~packing:window#add () in
- let hbox =
-  GPack.hbox ~border_width:0
-   ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let _ =
-  GMisc.label ~text:"Enter the URI for the new theorem or definition:"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let uri_entry =
-  GEdit.entry ~editable:true
-   ~packing:(hbox#pack ~expand:true ~fill:true ~padding:5) () in
- let hbox1 =
-  GPack.hbox ~border_width:0
-   ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let _ =
-  GMisc.label ~text:"Enter the theorem or definition type:"
-   ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in
- let scrolled_window =
-  GBin.scrolled_window ~border_width:5
-   ~packing:(vbox#pack ~expand:true ~padding:0) () in
- (* the content of the scrolled_window is moved below (see comment) *)
- let hbox =
-  GPack.hbox ~border_width:0
-   ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let okb =
-  GButton.button ~label:"Ok"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let _ = okb#misc#set_sensitive false in
- let cancelb =
-  GButton.button ~label:"Cancel"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- (* moved here to have visibility of the ok button *)
- let newinputt =
-  TexTermEditor'.term_editor
-   mqi_handle
-   ~width:400 ~height:100 ~packing:scrolled_window#add
-   ~share_id_to_uris_with:inputt ()
-   ~isnotempty_callback:
-    (function b ->
-      non_empty_type := b ;
-      okb#misc#set_sensitive (b && uri_entry#text <> ""))
- in
- let _ =
-let xxx = inputt#get_as_string in
-prerr_endline ("######################## " ^ xxx) ;
-  newinputt#set_term xxx ;
-(*
-  newinputt#set_term inputt#get_as_string ;
-*)
-  inputt#reset in
- let _ =
-  uri_entry#connect#changed
-   (function () ->
-     okb#misc#set_sensitive (!non_empty_type && uri_entry#text <> ""))
- in
- ignore (window#connect#destroy GMain.Main.quit) ;
- ignore (cancelb#connect#clicked window#destroy) ;
- ignore
-  (okb#connect#clicked
-    (function () ->
-      chosen := true ;
-      try
-       let metasenv,parsed = newinputt#get_metasenv_and_term [] [] in
-       let uristr = "cic:" ^ uri_entry#text in
-       let uri = UriManager.uri_of_string uristr in
-        if String.sub uristr (String.length uristr - 4) 4 <> ".con" then
-         raise NotAUriToAConstant
-        else
-         begin
-          try
-           ignore (Getter.resolve uri) ;
-           raise UriAlreadyInUse
-          with
-           Getter.Unresolved ->
-            get_metasenv_and_term := (function () -> metasenv,parsed) ;
-            get_uri := (function () -> uri) ; 
-            window#destroy ()
-         end
-      with
-       e ->
-        output_html outputhtml
-         ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-  )) ;
- window#show () ;
- GtkThread.main ();
- if !chosen then
-  try
-   let metasenv,expr = !get_metasenv_and_term () in
-    let _  = CicTypeChecker.type_of_aux' metasenv [] expr in
-     ProofEngine.proof :=
-      Some (!get_uri (), (1,[],expr)::metasenv, Cic.Meta (1,[]), expr) ;
-     ProofEngine.goal := Some 1 ;
-     refresh_goals notebook ;
-     refresh_proof output ;
-     !save_set_sensitive true ;
-     inputt#reset ;
-     ProofEngine.intros ~mk_fresh_name_callback () ;
-     refresh_goals notebook ;
-     refresh_proof output
-  with
-     InvokeTactics.RefreshSequentException e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-        "sequent: " ^ Printexc.to_string e ^ "</h1>")
-   | InvokeTactics.RefreshProofException e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-        "proof: " ^ Printexc.to_string e ^ "</h1>")
-   | e ->
-      output_html outputhtml
-       ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-;;
-
-let check_term_in_scratch scratch_window metasenv context expr = 
- try
-  let ty = CicTypeChecker.type_of_aux' metasenv context expr in
-  let expr = Cic.Cast (expr,ty) in
-   scratch_window#show () ;
-   scratch_window#set_term expr ;
-   scratch_window#set_context context ;
-   scratch_window#set_metasenv metasenv ;
-   scratch_window#sequent_viewer#load_sequent metasenv (111,context,expr)
- with
-  e ->
-   print_endline ("? " ^ CicPp.ppterm expr) ;
-   raise e
-;;
-
-let check scratch_window () =
- let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
-  let metasenv =
-   match !ProofEngine.proof with
-      None -> []
-    | Some (_,metasenv,_,_) -> metasenv
-  in
-  let context =
-   match !ProofEngine.goal with
-      None -> []
-    | Some metano ->
-       let (_,canonical_context,_) =
-        List.find (function (m,_,_) -> m=metano) metasenv
-       in
-        canonical_context
-  in
-   try
-    let metasenv',expr = inputt#get_metasenv_and_term context metasenv in
-     check_term_in_scratch scratch_window metasenv' context expr
-   with
-    e ->
-     output_html outputhtml
-      ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-;;
-
-let show () =
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
-  try
-   show_in_show_window_uri (input_or_locate_uri ~title:"Show")
-  with
-   e ->
-    output_html outputhtml
-     ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-;;
-
-exception NotADefinition;;
-
-let open_ () =
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
- let output = ((rendering_window ())#output : TermViewer.proof_viewer) in
- let notebook = (rendering_window ())#notebook in
-   try
-    let uri = input_or_locate_uri ~title:"Open" in
-     CicTypeChecker.typecheck uri ;
-     let metasenv,bo,ty =
-      match CicEnvironment.get_cooked_obj uri with
-         Cic.Constant (_,Some bo,ty,_) -> [],bo,ty
-       | Cic.CurrentProof (_,metasenv,bo,ty,_) -> metasenv,bo,ty
-       | Cic.Constant _
-       | Cic.Variable _
-       | Cic.InductiveDefinition _ -> raise NotADefinition
-     in
-      ProofEngine.proof :=
-       Some (uri, metasenv, bo, ty) ;
-      ProofEngine.goal := None ;
-      refresh_goals notebook ;
-      refresh_proof output ;
-      !save_set_sensitive true
-   with
-      InvokeTactics.RefreshSequentException e ->
-       output_html outputhtml
-        ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-         "sequent: " ^ Printexc.to_string e ^ "</h1>")
-    | InvokeTactics.RefreshProofException e ->
-       output_html outputhtml
-        ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-         "proof: " ^ Printexc.to_string e ^ "</h1>")
-    | e ->
-       output_html outputhtml
-        ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-;;
-
-let show_query_results results =
- let window =
-  GWindow.window
-   ~modal:false ~title:"Query results." ~border_width:2 () in
- let vbox = GPack.vbox ~packing:window#add () in
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let lMessage =
-  GMisc.label
-   ~text:"Click on a URI to show that object"
-   ~packing:hbox#add () in
- let scrolled_window =
-  GBin.scrolled_window ~border_width:10 ~height:400 ~width:600
-   ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in
- let clist = GList.clist ~columns:1 ~packing:scrolled_window#add () in
-  ignore
-   (List.map
-     (function (uri,_) ->
-       let n =
-        clist#append [uri]
-       in
-        clist#set_row ~selectable:false n
-     ) results
-   ) ;
-  clist#columns_autosize () ;
-  ignore
-   (clist#connect#select_row
-     (fun ~row ~column ~event ->
-       let (uristr,_) = List.nth results row in
-        match
-         MQueryMisc.cic_textual_parser_uri_of_string
-          (MQueryMisc.wrong_xpointer_format_from_wrong_xpointer_format'
-            uristr)
-        with
-           CicTextualParser0.ConUri uri
-         | CicTextualParser0.VarUri uri
-         | CicTextualParser0.IndTyUri (uri,_)
-         | CicTextualParser0.IndConUri (uri,_,_) ->
-            show_in_show_window_uri uri
-     )
-   ) ;
-  window#show ()
-;;
-
-let refine_constraints (must_obj,must_rel,must_sort) =
- let chosen = ref false in
- let use_only = ref false in
- let window =
-  GWindow.window
-   ~modal:true ~title:"Constraints refinement."
-   ~width:800 ~border_width:2 () in
- let vbox = GPack.vbox ~packing:window#add () in
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let lMessage =
-  GMisc.label
-   ~text: "\"Only\" constraints can be enforced or not."
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let onlyb =
-  GButton.toggle_button ~label:"Enforce \"only\" constraints"
-   ~active:false ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) ()
- in
-  ignore
-   (onlyb#connect#toggled (function () -> use_only := onlyb#active)) ;
- (* Notebook for the constraints choice *)
- let notebook =
-  GPack.notebook ~scrollable:true
-   ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in
- (* Rel constraints *)
- let label =
-  GMisc.label
-   ~text: "Constraints on Rels" () in
- let vbox' =
-  GPack.vbox ~packing:(notebook#append_page ~tab_label:label#coerce)
-   () in
- let hbox =
-  GPack.hbox ~packing:(vbox'#pack ~expand:false ~fill:false ~padding:5) () in
- let lMessage =
-  GMisc.label
-   ~text: "You can now specify the constraints on Rels."
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let expected_height = 25 * (List.length must_rel + 2) in
- let height = if expected_height > 400 then 400 else expected_height in
- let scrolled_window =
-  GBin.scrolled_window ~border_width:10 ~height ~width:600
-   ~packing:(vbox'#pack ~expand:true ~fill:true ~padding:5) () in
- let scrolled_vbox = GPack.vbox ~packing:scrolled_window#add_with_viewport () in
- let mk_depth_button (hbox:GPack.box) d =
-    let mutable_ref = ref (Some d) in
-    let depthb =
-     GButton.toggle_button
-      ~label:("depth = " ^ string_of_int d) 
-      ~active:true
-      ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) ()
-    in
-     ignore
-      (depthb#connect#toggled
-       (function () ->
-        let sel_depth = if depthb#active then Some d else None in
-         mutable_ref := sel_depth
-       )) ; mutable_ref
- in
- let rel_constraints =
-  List.map
-   (function p ->
-     let hbox =
-      GPack.hbox
-       ~packing:(scrolled_vbox#pack ~expand:false ~fill:false ~padding:5) () in
-     let lMessage =
-      GMisc.label
-       ~text:(MQGU.text_of_position (p:>MQGT.full_position))
-       ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-     match p with
-      | `MainHypothesis None 
-      | `MainConclusion None -> p, ref None
-      | `MainHypothesis (Some depth') 
-      | `MainConclusion (Some depth') -> p, mk_depth_button hbox depth'
-   ) must_rel in
- (* Sort constraints *)
- let label =
-  GMisc.label
-   ~text: "Constraints on Sorts" () in
- let vbox' =
-  GPack.vbox ~packing:(notebook#append_page ~tab_label:label#coerce)
-   () in
- let hbox =
-  GPack.hbox ~packing:(vbox'#pack ~expand:false ~fill:false ~padding:5) () in
- let lMessage =
-  GMisc.label
-   ~text: "You can now specify the constraints on Sorts."
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let expected_height = 25 * (List.length must_sort + 2) in
- let height = if expected_height > 400 then 400 else expected_height in
- let scrolled_window =
-  GBin.scrolled_window ~border_width:10 ~height ~width:600
-   ~packing:(vbox'#pack ~expand:true ~fill:true ~padding:5) () in
- let scrolled_vbox = GPack.vbox ~packing:scrolled_window#add_with_viewport () in
- let sort_constraints =
-  List.map
-   (function (p, sort) ->
-     let hbox =
-      GPack.hbox
-       ~packing:(scrolled_vbox#pack ~expand:false ~fill:false ~padding:5) () in
-     let lMessage =
-      GMisc.label
-       ~text:(MQGU.text_of_sort sort ^ " " ^ MQGU.text_of_position (p:>MQGT.full_position))
-       ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-     match p with
-      | `MainHypothesis None 
-      | `MainConclusion None -> p, ref None, sort
-      | `MainHypothesis (Some depth') 
-      | `MainConclusion (Some depth') -> p, mk_depth_button hbox depth', sort
-   ) must_sort in
- (* Obj constraints *)
- let label =
-  GMisc.label
-   ~text: "Constraints on constants" () in
- let vbox' =
-  GPack.vbox ~packing:(notebook#append_page ~tab_label:label#coerce)
-   () in
- let hbox =
-  GPack.hbox ~packing:(vbox'#pack ~expand:false ~fill:false ~padding:5) () in
- let lMessage =
-  GMisc.label
-   ~text: "You can now specify the constraints on constants."
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let expected_height = 25 * (List.length must_obj + 2) in
- let height = if expected_height > 400 then 400 else expected_height in
- let scrolled_window =
-  GBin.scrolled_window ~border_width:10 ~height ~width:600
-   ~packing:(vbox'#pack ~expand:true ~fill:true ~padding:5) () in
- let scrolled_vbox = GPack.vbox ~packing:scrolled_window#add_with_viewport () in
- let obj_constraints =
-  List.map
-   (function (p, uri) ->
-     let hbox =
-      GPack.hbox
-       ~packing:(scrolled_vbox#pack ~expand:false ~fill:false ~padding:5) () in
-     let lMessage =
-      GMisc.label
-       ~text:(uri ^ " " ^ (MQGU.text_of_position p))
-       ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-     match p with
-      | `InBody
-      | `InHypothesis 
-      | `InConclusion 
-      | `MainHypothesis None 
-      | `MainConclusion None -> p, ref None, uri
-      | `MainHypothesis (Some depth') 
-      | `MainConclusion (Some depth') -> p, mk_depth_button hbox depth', uri
-   ) must_obj in
- (* Confirm/abort buttons *)
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let okb =
-  GButton.button ~label:"Ok"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let cancelb =
-  GButton.button ~label:"Abort"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) ()
- in
-  ignore (window#connect#destroy GMain.Main.quit) ;
-  ignore (cancelb#connect#clicked window#destroy) ;
-  ignore
-   (okb#connect#clicked (function () -> chosen := true ; window#destroy ()));
-  window#set_position `CENTER ;
-  window#show () ;
-  GtkThread.main ();
-  if !chosen then
-   let chosen_must_rel =
-    List.map
-     (function (position, ref_depth) -> MQGU.set_main_position position !ref_depth)
-     rel_constraints
-   in
-   let chosen_must_sort =
-    List.map
-     (function (position, ref_depth, sort) -> 
-      MQGU.set_main_position position !ref_depth,sort)
-     sort_constraints
-   in
-   let chosen_must_obj =
-    List.map
-     (function (position, ref_depth, uri) -> MQGU.set_full_position position !ref_depth, uri)
-     obj_constraints
-   in
-    (chosen_must_obj,chosen_must_rel,chosen_must_sort),
-     (if !use_only then
-(*CSC: ???????????????????????? I assume that must and only are the same... *)
-       Some chosen_must_obj,Some chosen_must_rel,Some chosen_must_sort
-      else
-       None,None,None
-     )
-  else
-   raise NoChoice
-;;
-
-let completeSearchPattern () =
- let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
-  try
-   let metasenv,expr = inputt#get_metasenv_and_term ~context:[] ~metasenv:[] in
-   let must = MQueryLevels2.get_constraints expr in
-   let must',only = refine_constraints must in
-   let query =
-    MQG.query_of_constraints (Some MQGU.universe_for_search_pattern) must' only
-   in
-   let results = MQI.execute mqi_handle query in 
-    show_query_results results
-  with
-   e ->
-    output_html outputhtml
-     ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-;;
-
-let insertQuery () =
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
-  try
-   let chosen = ref None in
-   let window =
-    GWindow.window
-     ~modal:true ~title:"Insert Query (Experts Only)" ~border_width:2 () in
-   let vbox = GPack.vbox ~packing:window#add () in
-   let label =
-    GMisc.label ~text:"Insert Query. For Experts Only."
-     ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
-   let scrolled_window =
-    GBin.scrolled_window ~border_width:10 ~height:400 ~width:600
-     ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in
-   let input = GEdit.text ~editable:true
-    ~packing:scrolled_window#add () in
-   let hbox =
-    GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
-   let okb =
-    GButton.button ~label:"Ok"
-     ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-   let loadb =
-    GButton.button ~label:"Load from file..."
-     ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-   let cancelb =
-    GButton.button ~label:"Abort"
-     ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-   ignore (window#connect#destroy GMain.Main.quit) ;
-   ignore (cancelb#connect#clicked window#destroy) ;
-   ignore
-    (okb#connect#clicked
-      (function () ->
-        chosen := Some (input#get_chars 0 input#length) ; window#destroy ())) ;
-   ignore
-    (loadb#connect#clicked
-      (function () ->
-        match
-         GToolbox.select_file ~title:"Select Query File" ()
-        with
-           None -> ()
-         | Some filename ->
-            let inch = open_in filename in
-             let rec read_file () =
-              try
-               let line = input_line inch in
-                line ^ "\n" ^ read_file ()
-              with
-               End_of_file -> ""
-             in
-              let text = read_file () in
-               input#delete_text 0 input#length ;
-               ignore (input#insert_text text ~pos:0))) ;
-   window#set_position `CENTER ;
-   window#show () ;
-   GtkThread.main ();
-   match !chosen with
-      None -> ()
-    | Some q ->
-       let results =
-        MQI.execute mqi_handle (MQueryUtil.query_of_text (Lexing.from_string q))
-       in
-        show_query_results results
-  with
-   e ->
-    output_html outputhtml
-     ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-;;
-
-let choose_must list_of_must only =
- let chosen = ref None in
- let user_constraints = ref [] in
- let window =
-  GWindow.window
-   ~modal:true ~title:"Query refinement." ~border_width:2 () in
- let vbox = GPack.vbox ~packing:window#add () in
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let lMessage =
-  GMisc.label
-   ~text:
-    ("You can now specify the genericity of the query. " ^
-     "The more generic the slower.")
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let lMessage =
-  GMisc.label
-   ~text:
-    "Suggestion: start with faster queries before moving to more generic ones."
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let notebook =
-  GPack.notebook ~scrollable:true
-   ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in
- let _ =
-  let page = ref 0 in
-  let last = List.length list_of_must in
-  List.map
-   (function must ->
-     incr page ;
-     let label =
-      GMisc.label ~text:
-       (if !page = 1 then "More generic" else
-         if !page = last then "More precise" else "          ") () in
-     let expected_height = 25 * (List.length must + 2) in
-     let height = if expected_height > 400 then 400 else expected_height in
-     let scrolled_window =
-      GBin.scrolled_window ~border_width:10 ~height ~width:600
-       ~packing:(notebook#append_page ~tab_label:label#coerce) () in
-     let clist =
-        GList.clist ~columns:2 ~packing:scrolled_window#add
-         ~titles:["URI" ; "Position"] ()
-     in
-      ignore
-       (List.map
-         (function (uri,position) ->
-           let n =
-            clist#append 
-             [uri; if position then "MainConclusion" else "Conclusion"]
-           in
-            clist#set_row ~selectable:false n
-         ) must
-       ) ;
-      clist#columns_autosize ()
-   ) list_of_must in
- let _ =
-  let label = GMisc.label ~text:"User provided" () in
-  let vbox =
-   GPack.vbox ~packing:(notebook#append_page ~tab_label:label#coerce) () in
-  let hbox =
-   GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
-  let lMessage =
-   GMisc.label
-   ~text:"Select the constraints that must be satisfied and press OK."
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-  let expected_height = 25 * (List.length only + 2) in
-  let height = if expected_height > 400 then 400 else expected_height in
-  let scrolled_window =
-   GBin.scrolled_window ~border_width:10 ~height ~width:600
-    ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in
-  let clist =
-   GList.clist ~columns:2 ~packing:scrolled_window#add
-    ~selection_mode:`EXTENDED
-    ~titles:["URI" ; "Position"] ()
-  in
-   ignore
-    (List.map
-      (function (uri,position) ->
-        let n =
-         clist#append 
-          [uri; if position then "MainConclusion" else "Conclusion"]
-        in
-         clist#set_row ~selectable:true n
-      ) only
-    ) ;
-   clist#columns_autosize () ;
-   ignore
-    (clist#connect#select_row
-      (fun ~row ~column ~event ->
-        user_constraints := (List.nth only row)::!user_constraints)) ;
-   ignore
-    (clist#connect#unselect_row
-      (fun ~row ~column ~event ->
-        user_constraints :=
-         List.filter
-          (function uri -> uri != (List.nth only row)) !user_constraints)) ;
- in
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let okb =
-  GButton.button ~label:"Ok"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let cancelb =
-  GButton.button ~label:"Abort"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- (* actions *)
- ignore (window#connect#destroy GMain.Main.quit) ;
- ignore (cancelb#connect#clicked window#destroy) ;
- ignore
-  (okb#connect#clicked
-    (function () -> chosen := Some notebook#current_page ; window#destroy ())) ;
- window#set_position `CENTER ;
- window#show () ;
- GtkThread.main ();
- match !chosen with
-    None -> raise NoChoice
-  | Some n ->
-     if n = List.length list_of_must then
-      (* user provided constraints *)
-      !user_constraints
-     else
-      List.nth list_of_must n
-;;
-
-let searchPattern () =
- let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in
- let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in
-  try
-    let proof =
-     match !ProofEngine.proof with
-        None -> assert false
-      | Some proof -> proof
-    in
-     match !ProofEngine.goal with
-      | None -> ()
-      | Some metano ->
-         let uris' =
-           TacticChaser.matchConclusion
-           mqi_handle
-            ~output_html:(output_html outputhtml) ~choose_must ()
-            ~status:(proof, metano)
-         in
-         let uri' =
-          user_uri_choice ~title:"Ambiguous input."
-          ~msg: "Many lemmas can be successfully applied. Please, choose one:"
-           uris'
-         in
-          inputt#set_term uri' ;
-          InvokeTactics'.apply ()
-  with
-   e -> 
-    output_html outputhtml 
-     ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>")
-;;
-      
-let choose_selection mmlwidget (element : Gdome.element option) =
- let module G = Gdome in
-  let rec aux element =
-   if element#hasAttributeNS
-       ~namespaceURI:Misc.helmns
-       ~localName:(G.domString "xref")
-   then
-     mmlwidget#set_selection (Some element)
-   else
-    try
-      match element#get_parentNode with
-         None -> assert false
-       (*CSC: OCAML DIVERGES!
-       | Some p -> aux (new G.element_of_node p)
-       *)
-       | Some p -> aux (new Gdome.element_of_node p)
-    with
-       GdomeInit.DOMCastException _ ->
-        prerr_endline
-         "******* trying to select above the document root ********"
-  in
-   match element with
-     Some x -> aux x
-   | None   -> mmlwidget#set_selection None
-;;
-
-(* STUFF TO BUILD THE GTK INTERFACE *)
-
-(* Stuff for the widget settings *)
-
-let export_to_postscript output =
- let lastdir = ref (Unix.getcwd ()) in
-  function () ->
-   match
-    GToolbox.select_file ~title:"Export to PostScript"
-     ~dir:lastdir ~filename:"screenshot.ps" ()
-   with
-      None -> ()
-    | Some filename ->
-       (output :> GMathView.math_view)#export_to_postscript
-         ~filename:filename ();
-;;
-
-let activate_t1 output button_set_anti_aliasing
- button_set_transparency export_to_postscript_menu_item
- button_t1 ()
-=
- let is_set = button_t1#active in
-  output#set_font_manager_type
-   ~fm_type:(if is_set then `font_manager_t1 else `font_manager_gtk) ;
-  if is_set then
-   begin
-    button_set_anti_aliasing#misc#set_sensitive true ;
-    button_set_transparency#misc#set_sensitive true ;
-    export_to_postscript_menu_item#misc#set_sensitive true ;
-   end
-  else
-   begin
-    button_set_anti_aliasing#misc#set_sensitive false ;
-    button_set_transparency#misc#set_sensitive false ;
-    export_to_postscript_menu_item#misc#set_sensitive false ;
-   end
-;;
-
-let set_anti_aliasing output button_set_anti_aliasing () =
- output#set_anti_aliasing button_set_anti_aliasing#active
-;;
-
-let set_transparency output button_set_transparency () =
- output#set_transparency button_set_transparency#active
-;;
-
-let changefont output font_size_spinb () =
- output#set_font_size font_size_spinb#value_as_int
-;;
-
-let set_log_verbosity output log_verbosity_spinb () =
- output#set_log_verbosity log_verbosity_spinb#value_as_int
-;;
-
-class settings_window output sw
- export_to_postscript_menu_item selection_changed_callback
-=
- let settings_window = GWindow.window ~title:"GtkMathView settings" () in
- let vbox =
-  GPack.vbox ~packing:settings_window#add () in
- let table =
-  GPack.table
-   ~rows:1 ~columns:3 ~homogeneous:false ~row_spacings:5 ~col_spacings:5
-   ~border_width:5 ~packing:vbox#add () in
- let button_t1 =
-  GButton.toggle_button ~label:"activate t1 fonts"
-   ~packing:(table#attach ~left:0 ~top:0) () in
- let button_set_anti_aliasing =
-  GButton.toggle_button ~label:"set_anti_aliasing"
-   ~packing:(table#attach ~left:0 ~top:1) () in
- let button_set_transparency =
-  GButton.toggle_button ~label:"set_transparency"
-   ~packing:(table#attach ~left:2 ~top:1) () in
- let table =
-  GPack.table
-   ~rows:2 ~columns:2 ~homogeneous:false ~row_spacings:5 ~col_spacings:5
-   ~border_width:5 ~packing:vbox#add () in
- let font_size_label =
-  GMisc.label ~text:"font size:"
-   ~packing:(table#attach ~left:0 ~top:0 ~expand:`NONE) () in
- let font_size_spinb =
-  let sadj =
-   GData.adjustment ~value:(float_of_int output#get_font_size)
-    ~lower:5.0 ~upper:50.0 ~step_incr:1.0 ()
-  in
-   GEdit.spin_button 
-    ~adjustment:sadj ~packing:(table#attach ~left:1 ~top:0 ~fill:`NONE) () in
- let log_verbosity_label =
-  GMisc.label ~text:"log verbosity:"
-   ~packing:(table#attach ~left:0 ~top:1) () in
- let log_verbosity_spinb =
-  let sadj =
-   GData.adjustment ~value:0.0 ~lower:0.0 ~upper:3.0 ~step_incr:1.0 ()
-  in
-   GEdit.spin_button 
-    ~adjustment:sadj ~packing:(table#attach ~left:1 ~top:1) () in
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let closeb =
-  GButton.button ~label:"Close"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-object(self)
- method show = settings_window#show
- initializer
-  button_set_anti_aliasing#misc#set_sensitive false ;
-  button_set_transparency#misc#set_sensitive false ;
-  (* Signals connection *)
-  ignore(button_t1#connect#clicked
-   (activate_t1 output button_set_anti_aliasing
-    button_set_transparency export_to_postscript_menu_item button_t1)) ;
-  ignore(font_size_spinb#connect#changed (changefont output font_size_spinb)) ;
-  ignore(button_set_anti_aliasing#connect#toggled
-   (set_anti_aliasing output button_set_anti_aliasing));
-  ignore(button_set_transparency#connect#toggled
-   (set_transparency output button_set_transparency)) ;
-  ignore(log_verbosity_spinb#connect#changed
-   (set_log_verbosity output log_verbosity_spinb)) ;
-  ignore(closeb#connect#clicked settings_window#misc#hide)
-end;;
-
-(* Scratch window *)
-
-class scratch_window =
- let window =
-  GWindow.window
-    ~title:"MathML viewer"
-    ~border_width:2 () in
- let vbox =
-  GPack.vbox ~packing:window#add () in
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let whdb =
-  GButton.button ~label:"Whd"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let reduceb =
-  GButton.button ~label:"Reduce"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let simplb =
-  GButton.button ~label:"Simpl"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let scrolled_window =
-  GBin.scrolled_window ~border_width:10
-   ~packing:(vbox#pack ~expand:true ~padding:5) () in
- let sequent_viewer =
-  TermViewer.sequent_viewer
-   ~packing:(scrolled_window#add) ~width:400 ~height:280 () in
-object(self)
- val mutable term = Cic.Rel 1                 (* dummy value *)
- val mutable context = ([] : Cic.context)     (* dummy value *)
- val mutable metasenv = ([] : Cic.metasenv)   (* dummy value *)
- method sequent_viewer = sequent_viewer
- method show () = window#misc#hide () ; window#show ()
- method term = term
- method set_term t = term <- t
- method context = context
- method set_context t = context <- t
- method metasenv = metasenv
- method set_metasenv t = metasenv <- t
- initializer
-  ignore
-   (sequent_viewer#connect#selection_changed (choose_selection sequent_viewer));
-  ignore(window#event#connect#delete (fun _ -> window#misc#hide () ; true )) ;
-  ignore(whdb#connect#clicked InvokeTactics'.whd_in_scratch) ;
-  ignore(reduceb#connect#clicked InvokeTactics'.reduce_in_scratch) ;
-  ignore(simplb#connect#clicked InvokeTactics'.simpl_in_scratch)
-end;;
-
-let open_contextual_menu_for_selected_terms mmlwidget infos =
- let button = GdkEvent.Button.button infos in 
- let terms_selected = List.length mmlwidget#get_selections > 0 in
-  if button = 3 then
-   begin
-    let time = GdkEvent.Button.time infos in
-    let menu = GMenu.menu () in
-    let f = new GMenu.factory menu in
-    let whd_menu_item =
-     f#add_item "Whd" ~key:GdkKeysyms._W ~callback:InvokeTactics'.whd in
-    let reduce_menu_item =
-     f#add_item "Reduce" ~key:GdkKeysyms._R ~callback:InvokeTactics'.reduce in
-    let simpl_menu_item =
-     f#add_item "Simpl" ~key:GdkKeysyms._S ~callback:InvokeTactics'.simpl in
-    let _ = f#add_separator () in
-    let generalize_menu_item =
-     f#add_item "Generalize"
-      ~key:GdkKeysyms._G ~callback:InvokeTactics'.generalize in
-    let _ = f#add_separator () in
-    let clear_menu_item =
-     f#add_item "Clear" ~key:GdkKeysyms._C ~callback:InvokeTactics'.clear in
-    let clearbody_menu_item =
-     f#add_item "ClearBody"
-      ~key:GdkKeysyms._B ~callback:InvokeTactics'.clearbody
-    in
-     whd_menu_item#misc#set_sensitive terms_selected ; 
-     reduce_menu_item#misc#set_sensitive terms_selected ; 
-     simpl_menu_item#misc#set_sensitive terms_selected ;
-     generalize_menu_item#misc#set_sensitive terms_selected ;
-     clear_menu_item#misc#set_sensitive terms_selected ;
-     clearbody_menu_item#misc#set_sensitive terms_selected ;
-     menu#popup ~button ~time
-   end ;
-  true
-;;
-
-class page () =
- let vbox1 = GPack.vbox () in
-object(self)
- val mutable proofw_ref = None
- val mutable compute_ref = None
- method proofw =
-  Lazy.force self#compute ;
-  match proofw_ref with
-     None -> assert false
-   | Some proofw -> proofw
- method content = vbox1
- method compute =
-  match compute_ref with
-     None -> assert false
-   | Some compute -> compute
- initializer
-  compute_ref <-
-   Some (lazy (
-   let scrolled_window1 =
-    GBin.scrolled_window ~border_width:10
-     ~packing:(vbox1#pack ~expand:true ~padding:5) () in
-   let proofw =
-    TermViewer.sequent_viewer ~width:400 ~height:275
-     ~packing:(scrolled_window1#add) () in
-   let _ = proofw_ref <- Some proofw in
-   let hbox3 =
-    GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in
-   let ringb =
-    GButton.button ~label:"Ring"
-     ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in
-   let fourierb =
-    GButton.button ~label:"Fourier"
-     ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in
-   let reflexivityb =
-    GButton.button ~label:"Reflexivity"
-     ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in
-   let symmetryb =
-    GButton.button ~label:"Symmetry"
-     ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in
-   let assumptionb =
-    GButton.button ~label:"Assumption"
-     ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in
-   let contradictionb =
-    GButton.button ~label:"Contradiction"
-     ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in
-   let hbox4 =
-    GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in
-   let existsb =
-    GButton.button ~label:"Exists"
-     ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
-   let splitb =
-    GButton.button ~label:"Split"
-     ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
-   let leftb =
-    GButton.button ~label:"Left"
-     ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
-   let rightb =
-    GButton.button ~label:"Right"
-     ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
-   let searchpatternb =
-    GButton.button ~label:"SearchPattern_Apply"
-     ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in
-   let hbox5 =
-    GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in
-   let exactb =
-    GButton.button ~label:"Exact"
-     ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
-   let introsb =
-    GButton.button ~label:"Intros"
-     ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
-   let applyb =
-    GButton.button ~label:"Apply"
-     ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
-   let elimintrossimplb =
-    GButton.button ~label:"ElimIntrosSimpl"
-     ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
-   let elimtypeb =
-    GButton.button ~label:"ElimType"
-     ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
-   let foldwhdb =
-    GButton.button ~label:"Fold_whd"
-     ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
-   let foldreduceb =
-    GButton.button ~label:"Fold_reduce"
-     ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
-   let hbox6 =
-    GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in
-   let foldsimplb =
-    GButton.button ~label:"Fold_simpl"
-     ~packing:(hbox6#pack ~expand:false ~fill:false ~padding:5) () in
-   let cutb =
-    GButton.button ~label:"Cut"
-     ~packing:(hbox6#pack ~expand:false ~fill:false ~padding:5) () in
-   let changeb =
-    GButton.button ~label:"Change"
-     ~packing:(hbox6#pack ~expand:false ~fill:false ~padding:5) () in
-   let letinb =
-    GButton.button ~label:"Let ... In"
-     ~packing:(hbox6#pack ~expand:false ~fill:false ~padding:5) () in
-   let rewritesimplb =
-    GButton.button ~label:"RewriteSimpl ->"
-     ~packing:(hbox6#pack ~expand:false ~fill:false ~padding:5) () in
-   let rewritebacksimplb =
-    GButton.button ~label:"RewriteSimpl <-"
-     ~packing:(hbox6#pack ~expand:false ~fill:false ~padding:5) () in
-   let hbox7 =
-    GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in
-   let absurdb =
-    GButton.button ~label:"Absurd"
-     ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in
-   let decomposeb =
-    GButton.button ~label:"Decompose"
-     ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in
-   let transitivityb =
-    GButton.button ~label:"Transitivity"
-     ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in
-   let replaceb =
-    GButton.button ~label:"Replace"
-     ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in
-   let injectionb =
-    GButton.button ~label:"Injection"
-     ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in
-   let discriminateb =
-    GButton.button ~label:"Discriminate"
-     ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in
-(* Zack: spostare in una toolbar
-   let generalizeb =
-    GButton.button ~label:"Generalize"
-     ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in
-   let clearbodyb =
-    GButton.button ~label:"ClearBody"
-     ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
-   let clearb =
-    GButton.button ~label:"Clear"
-     ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in
-   let whdb =
-    GButton.button ~label:"Whd"
-     ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in
-   let reduceb =
-    GButton.button ~label:"Reduce"
-     ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in
-   let simplb =
-    GButton.button ~label:"Simpl"
-     ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in
-*)
-
-   ignore(exactb#connect#clicked InvokeTactics'.exact) ;
-   ignore(applyb#connect#clicked InvokeTactics'.apply) ;
-   ignore(elimintrossimplb#connect#clicked InvokeTactics'.elimintrossimpl) ;
-   ignore(elimtypeb#connect#clicked InvokeTactics'.elimtype) ;
-   ignore(foldwhdb#connect#clicked InvokeTactics'.fold_whd) ;
-   ignore(foldreduceb#connect#clicked InvokeTactics'.fold_reduce) ;
-   ignore(foldsimplb#connect#clicked InvokeTactics'.fold_simpl) ;
-   ignore(cutb#connect#clicked InvokeTactics'.cut) ;
-   ignore(changeb#connect#clicked InvokeTactics'.change) ;
-   ignore(letinb#connect#clicked InvokeTactics'.letin) ;
-   ignore(ringb#connect#clicked InvokeTactics'.ring) ;
-   ignore(fourierb#connect#clicked InvokeTactics'.fourier) ;
-   ignore(rewritesimplb#connect#clicked InvokeTactics'.rewritesimpl) ;
-   ignore(rewritebacksimplb#connect#clicked InvokeTactics'.rewritebacksimpl) ;
-   ignore(replaceb#connect#clicked InvokeTactics'.replace) ;
-   ignore(reflexivityb#connect#clicked InvokeTactics'.reflexivity) ;
-   ignore(symmetryb#connect#clicked InvokeTactics'.symmetry) ;
-   ignore(transitivityb#connect#clicked InvokeTactics'.transitivity) ;
-   ignore(existsb#connect#clicked InvokeTactics'.exists) ;
-   ignore(splitb#connect#clicked InvokeTactics'.split) ;
-   ignore(leftb#connect#clicked InvokeTactics'.left) ;
-   ignore(rightb#connect#clicked InvokeTactics'.right) ;
-   ignore(assumptionb#connect#clicked InvokeTactics'.assumption) ;
-   ignore(absurdb#connect#clicked InvokeTactics'.absurd) ;
-   ignore(contradictionb#connect#clicked InvokeTactics'.contradiction) ;
-   ignore(introsb#connect#clicked InvokeTactics'.intros) ;
-   ignore(decomposeb#connect#clicked InvokeTactics'.decompose) ;
-   ignore(searchpatternb#connect#clicked searchPattern) ;
-   ignore(injectionb#connect#clicked InvokeTactics'.injection) ;
-   ignore(discriminateb#connect#clicked InvokeTactics'.discriminate) ;
-(* Zack: spostare in una toolbar
-   ignore(whdb#connect#clicked whd) ;
-   ignore(reduceb#connect#clicked reduce) ;
-   ignore(simplb#connect#clicked simpl) ;
-   ignore(clearbodyb#connect#clicked clearbody) ;
-   ignore(clearb#connect#clicked clear) ;
-   ignore(generalizeb#connect#clicked generalize) ;
-*)
-   ignore(proofw#connect#selection_changed (choose_selection proofw)) ;
-   ignore
-     ((new GObj.event_ops proofw#as_widget)#connect#button_press
-        (open_contextual_menu_for_selected_terms proofw)) ;
-  ))
-end
-;;
-
-class empty_page =
- let vbox1 = GPack.vbox () in
- let scrolled_window1 =
-  GBin.scrolled_window ~border_width:10
-   ~packing:(vbox1#pack ~expand:true ~padding:5) () in
- let proofw =
-  TermViewer.sequent_viewer ~width:400 ~height:275
-   ~packing:(scrolled_window1#add) () in
-object(self)
- method proofw = (assert false : TermViewer.sequent_viewer)
- method content = vbox1
- method compute = (assert false : unit)
-end
-;;
-
-let empty_page = new empty_page;;
-
-class notebook =
-object(self)
- val notebook = GPack.notebook ()
- val pages = ref []
- val mutable skip_switch_page_event = false 
- val mutable empty = true
- method notebook = notebook
- method add_page n =
-  let new_page = new page () in
-   empty <- false ;
-   pages := !pages @ [n,lazy (setgoal n),new_page] ;
-   notebook#append_page
-    ~tab_label:((GMisc.label ~text:("?" ^ string_of_int n) ())#coerce)
-    new_page#content#coerce
- method remove_all_pages ~skip_switch_page_event:skip =
-  if empty then
-   notebook#remove_page 0 (* let's remove the empty page *)
-  else
-   List.iter (function _ -> notebook#remove_page 0) !pages ;
-  pages := [] ;
-  skip_switch_page_event <- skip
- method set_current_page ~may_skip_switch_page_event n =
-  let (_,_,page) = List.find (function (m,_,_) -> m=n) !pages in
-   let new_page = notebook#page_num page#content#coerce in
-    if may_skip_switch_page_event && new_page <> notebook#current_page then
-     skip_switch_page_event <- true ;
-    notebook#goto_page new_page
- method set_empty_page =
-  empty <- true ;
-  pages := [] ;
-  notebook#append_page
-   ~tab_label:((GMisc.label ~text:"No proof in progress" ())#coerce)
-   empty_page#content#coerce
- method proofw =
-  let (_,_,page) = List.nth !pages notebook#current_page in
-   page#proofw
- initializer
-  ignore
-   (notebook#connect#switch_page
-    (function i ->
-      let skip = skip_switch_page_event in
-       skip_switch_page_event <- false ;
-       if not skip then
-        try
-         let (metano,setgoal,page) = List.nth !pages i in
-          ProofEngine.goal := Some metano ;
-          Lazy.force (page#compute) ;
-          Lazy.force setgoal
-        with _ -> ()
-    ))
-end
-;;
-
-(* Main window *)
-
-class rendering_window output (notebook : notebook) =
- let scratch_window = new scratch_window in
- let window =
-  GWindow.window
-   ~title:"gTopLevel - Helm's Proof Assistant"
-   ~border_width:0 ~allow_shrink:false () in
- let vbox_for_menu = GPack.vbox ~packing:window#add () in
- (* menus *)
- let handle_box = GBin.handle_box ~border_width:2
-  ~packing:(vbox_for_menu#pack ~padding:0) () in
- let menubar = GMenu.menu_bar ~packing:handle_box#add () in
- let factory0 = new GMenu.factory menubar in
- let accel_group = factory0#accel_group in
- (* file menu *)
- let file_menu = factory0#add_submenu "File" in
- let factory1 = new GMenu.factory file_menu ~accel_group in
- let export_to_postscript_menu_item =
-  begin
-   let _ =
-    factory1#add_item "New Block of (Co)Inductive Definitions..."
-     ~key:GdkKeysyms._B ~callback:new_inductive
-   in
-   let _ =
-    factory1#add_item "New Proof or Definition..." ~key:GdkKeysyms._N
-     ~callback:new_proof
-   in
-   let reopen_menu_item =
-    factory1#add_item "Reopen a Finished Proof..." ~key:GdkKeysyms._R
-     ~callback:open_
-   in
-   let qed_menu_item =
-    factory1#add_item "Qed" ~key:GdkKeysyms._E ~callback:qed in
-   ignore (factory1#add_separator ()) ;
-   ignore
-    (factory1#add_item "Load Unfinished Proof..." ~key:GdkKeysyms._L
-      ~callback:load_unfinished_proof) ;
-   let save_menu_item =
-    factory1#add_item "Save Unfinished Proof" ~key:GdkKeysyms._S
-      ~callback:save_unfinished_proof
-   in
-   ignore
-    (save_set_sensitive := function b -> save_menu_item#misc#set_sensitive b);
-   ignore (!save_set_sensitive false);
-   ignore (qed_set_sensitive:=function b -> qed_menu_item#misc#set_sensitive b);
-   ignore (!qed_set_sensitive false);
-   ignore (factory1#add_separator ()) ;
-   let export_to_postscript_menu_item =
-    factory1#add_item "Export to PostScript..."
-     ~callback:(export_to_postscript output) in
-   ignore (factory1#add_separator ()) ;
-   ignore
-    (factory1#add_item "Exit" ~key:GdkKeysyms._Q ~callback:GMain.Main.quit) ;
-   export_to_postscript_menu_item
-  end in
- (* edit menu *)
- let edit_menu = factory0#add_submenu "Edit Current Proof" in
- let factory2 = new GMenu.factory edit_menu ~accel_group in
- let focus_and_proveit_set_sensitive = ref (function _ -> assert false) in
- let proveit_menu_item =
-  factory2#add_item "Prove It" ~key:GdkKeysyms._I
-   ~callback:(function () -> proveit ();!focus_and_proveit_set_sensitive false)
- in
- let focus_menu_item =
-  factory2#add_item "Focus" ~key:GdkKeysyms._F
-   ~callback:(function () -> focus () ; !focus_and_proveit_set_sensitive false)
- in
- let _ =
-  focus_and_proveit_set_sensitive :=
-   function b ->
-    proveit_menu_item#misc#set_sensitive b ;
-    focus_menu_item#misc#set_sensitive b
- in
- let _ = !focus_and_proveit_set_sensitive false in
- (* edit term menu *)
- let edit_term_menu = factory0#add_submenu "Edit Term" in
- let factory5 = new GMenu.factory edit_term_menu ~accel_group in
- let check_menu_item =
-  factory5#add_item "Check Term" ~key:GdkKeysyms._C
-   ~callback:(check scratch_window) in
- let _ = check_menu_item#misc#set_sensitive false in
- (* search menu *)
- let search_menu = factory0#add_submenu "Search" in
- let factory4 = new GMenu.factory search_menu ~accel_group in
- let _ =
-  factory4#add_item "Locate..." ~key:GdkKeysyms._T
-   ~callback:locate in
- let searchPattern_menu_item =
-  factory4#add_item "SearchPattern..." ~key:GdkKeysyms._D
-   ~callback:completeSearchPattern in
- let _ = searchPattern_menu_item#misc#set_sensitive false in
- let show_menu_item =
-  factory4#add_item "Show..." ~key:GdkKeysyms._H ~callback:show
- in
- let insert_query_item =
-  factory4#add_item "Insert Query (Experts Only)..." ~key:GdkKeysyms._Y
-   ~callback:insertQuery in
- (* hbugs menu *)
- let hbugs_menu = factory0#add_submenu "HBugs" in
- let factory6 = new GMenu.factory hbugs_menu ~accel_group in
- let toggle_hbugs_menu_item =
-  factory6#add_check_item
-    ~active:false ~key:GdkKeysyms._F5 ~callback:Hbugs.toggle "HBugs enabled"
- in
- (* settings menu *)
- let settings_menu = factory0#add_submenu "Settings" in
- let factory3 = new GMenu.factory settings_menu ~accel_group in
- let _ =
-  factory3#add_item "Edit Aliases..." ~key:GdkKeysyms._A
-   ~callback:edit_aliases in
- let _ = factory3#add_separator () in
- let _ =
-  factory3#add_item "MathML Widget Preferences..." ~key:GdkKeysyms._P
-   ~callback:(function _ -> (settings_window ())#show ()) in
- let _ = factory3#add_separator () in
- let _ =
-  factory3#add_item "Reload Stylesheets"
-   ~callback:
-     (function _ ->
-       ApplyStylesheets.reload_stylesheets () ;
-       if !ProofEngine.proof <> None then
-        try
-         refresh_goals notebook ;
-         refresh_proof output
-        with
-           InvokeTactics.RefreshSequentException e ->
-            output_html (outputhtml ())
-             ("<h1 color=\"red\">An error occurred while refreshing the " ^
-               "sequent: " ^ Printexc.to_string e ^ "</h1>") ;
-           (*notebook#remove_all_pages ~skip_switch_page_event:false ;*)
-           notebook#set_empty_page
-         | InvokeTactics.RefreshProofException e ->
-            output_html (outputhtml ())
-             ("<h1 color=\"red\">An error occurred while refreshing the proof: "               ^ Printexc.to_string e ^ "</h1>") ;
-            output#unload
-     ) in
- (* accel group *)
- let _ = window#add_accel_group accel_group in
- (* end of menus *)
- let hbox0 =
-  GPack.hbox
-   ~packing:(vbox_for_menu#pack ~expand:true ~fill:true ~padding:5) () in
- let vbox =
-  GPack.vbox ~packing:(hbox0#pack ~expand:true ~fill:true ~padding:5) () in
- let scrolled_window0 =
-  GBin.scrolled_window ~border_width:10
-   ~packing:(vbox#pack ~expand:true ~padding:5) () in
- let _ = scrolled_window0#add output#coerce in
- let frame =
-  GBin.frame ~label:"Insert Term"
-   ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in
- let scrolled_window1 =
-  GBin.scrolled_window ~border_width:5
-   ~packing:frame#add () in
- let inputt =
-  TexTermEditor'.term_editor
-   mqi_handle
-   ~width:400 ~height:100 ~packing:scrolled_window1#add ()
-   ~isnotempty_callback:
-    (function b ->
-      check_menu_item#misc#set_sensitive b ;
-      searchPattern_menu_item#misc#set_sensitive b) in
- let vboxl =
-  GPack.vbox ~packing:(hbox0#pack ~expand:true ~fill:true ~padding:5) () in
- let _ =
-  vboxl#pack ~expand:true ~fill:true ~padding:5 notebook#notebook#coerce in
- let frame =
-  GBin.frame ~shadow_type:`IN ~packing:(vboxl#pack ~expand:true ~padding:5) ()
- in
- let outputhtml =
-  GHtml.xmhtml
-   ~source:"<html><body bgColor=\"white\"></body></html>"
-   ~width:400 ~height: 100
-   ~border_width:20
-   ~packing:frame#add
-   ~show:true () in
-object
- method outputhtml = outputhtml
- method inputt = inputt
- method output = (output : TermViewer.proof_viewer)
- method scratch_window = scratch_window
- method notebook = notebook
- method show = window#show
- initializer
-  notebook#set_empty_page ;
-  export_to_postscript_menu_item#misc#set_sensitive false ;
-  check_term := (check_term_in_scratch scratch_window) ;
-
-  (* signal handlers here *)
-  ignore(output#connect#selection_changed
-   (function elem ->
-     choose_selection output elem ;
-     !focus_and_proveit_set_sensitive true
-   )) ;
-  ignore (output#connect#click (show_in_show_window_callback output)) ;
-  let settings_window = new settings_window output scrolled_window0
-   export_to_postscript_menu_item (choose_selection output) in
-  set_settings_window settings_window ;
-  set_outputhtml outputhtml ;
-  ignore(window#event#connect#delete (fun _ -> GMain.Main.quit () ; true )) ;
-  Logger.log_callback :=
-   (Logger.log_to_html ~print_and_flush:(output_html outputhtml))
-end;;
-
-(* MAIN *)
-
-let initialize_everything () =
- let module U = Unix in
-  let output = TermViewer.proof_viewer ~width:350 ~height:280 () in
-  let notebook = new notebook in
-   let rendering_window' = new rendering_window output notebook in
-    set_rendering_window rendering_window' ;
-    let print_error_as_html prefix msg =
-     output_html (outputhtml ())
-      ("<h1 color=\"red\">" ^ prefix ^ msg ^ "</h1>")
-    in
-     Gdome_xslt.setErrorCallback (Some (print_error_as_html "XSLT Error: "));
-     Gdome_xslt.setDebugCallback
-      (Some (print_error_as_html "XSLT Debug Message: "));
-     rendering_window'#show () ;
-(*      Hbugs.toggle true; *)
-     GtkThread.main ()
-;;
-
-let main () =
- ignore (GtkMain.Main.init ()) ;
- initialize_everything () ;
- MQIC.close mqi_handle;
- Hbugs.quit ()
-;;
-
-try
-  Sys.catch_break true;
-  main ();
-with Sys.Break -> ()  (* exit nicely, invoking at_exit functions *)
-
diff --git a/helm/gTopLevel/hbugs.ml b/helm/gTopLevel/hbugs.ml
deleted file mode 100644 (file)
index 753f3fc..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_types;;
-open Printf;;
-
-let debug_print = 
-  let debug = true in
-  fun s -> prerr_endline (sprintf "DEBUG: %s" s)
-;;
-
-exception NoProofInProgress;;
-
-let hbugs_client = ref None
-let use_hint_callback = ref ignore
-
-let quit () =
-       match !hbugs_client with
-       | Some c -> c#unregisterFromBroker ()
-       | None -> ()
-
-let hbugs_enabled = ref false
-
-let get_hbugs_client () =
-       match !hbugs_client with
-       | Some c -> c
-       | None -> assert false
-
-let disable () =
-       match !hbugs_client with None -> () | Some c -> c#hide ()
-
-       (** send current proof assistant state to hbugs broker *)
-let notify () =
-       try
-               if !hbugs_enabled then begin
-                       let client = get_hbugs_client () in
-                       let goal =
-                               match !ProofEngine.goal with
-                               | Some g -> g
-                               | None -> raise NoProofInProgress
-                       in
-                       let (type_string, body_string) =
-                               let (type_xml, body_xml) = ProofEngine.get_current_status_as_xml () in
-                               (Xml.pp_to_string type_xml, Xml.pp_to_string body_xml)
-                       in
-                       let new_state =
-                               (Misc.strip_xml_headings type_string,
-                                Misc.strip_xml_headings body_string,
-                                goal)
-                       in
-                       client#stateChange (Some new_state)
-               end
-       with NoProofInProgress -> ()
-
-let clear () =
- if !hbugs_enabled then
-  begin
-        let client = get_hbugs_client () in
-         client#stateChange None
-  end
-
-let rec enable () =
-       (match !hbugs_client with
-       | None -> (* create an hbugs client and show its window *)
-                       hbugs_client :=
-                               (try
-                                       Some (new Hbugs_client.hbugsClient
-            ~use_hint_callback:!use_hint_callback ())
-                               with e ->
-                                       prerr_endline (sprintf "Can't start HBugs client: %s"
-                                               (Printexc.to_string e));
-                                       None);
-                       (match !hbugs_client with
-                       |Some client ->
-                                       client#show ();
-                                       client#subscribeAll ()
-                       | None -> ())
-       | Some c -> (* show hbugs client window *)
-                       c#show ())
-
-let toggle state =
-       if state <> !hbugs_enabled then (* status has been changed *)
-               (if state then enable () else disable ());
-       hbugs_enabled := state
-
-module type Unit = sig end
-
-module Initialize (Tactics: InvokeTactics.Tactics) : Unit =
-  struct
-    let use_hint = function
-      | Use_ring_Luke -> Tactics.ring ()
-      | Use_fourier_Luke -> Tactics.fourier ()
-      | Use_reflexivity_Luke -> Tactics.reflexivity ()
-      | Use_symmetry_Luke -> Tactics.symmetry ()
-      | Use_assumption_Luke -> Tactics.assumption ()
-      | Use_contradiction_Luke -> Tactics.contradiction ()
-      | Use_exists_Luke -> Tactics.exists ()
-      | Use_split_Luke -> Tactics.split ()
-      | Use_left_Luke -> Tactics.left ()
-      | Use_right_Luke -> Tactics.right ()
-      | Use_apply_Luke term ->
-         (* we remove the "cic:" prefix *)
-         let term' = String.sub term 4 (String.length term - 4) in
-          Tactics.apply ~term:term' ()
-      | Hints _ -> assert false
-
-    let _ = use_hint_callback := use_hint
-  end
diff --git a/helm/gTopLevel/hbugs.mli b/helm/gTopLevel/hbugs.mli
deleted file mode 100644 (file)
index 022bbf4..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-val enable: unit -> unit
-val disable: unit -> unit
-val toggle: bool -> unit
-
-val quit: unit -> unit
-
-val notify: unit -> unit
-val clear: unit -> unit
-
-module type Unit = sig end
-
-module Initialize (Tactics: InvokeTactics.Tactics) : Unit
diff --git a/helm/gTopLevel/invokeTactics.ml b/helm/gTopLevel/invokeTactics.ml
deleted file mode 100644 (file)
index 3180429..0000000
+++ /dev/null
@@ -1,472 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 29/01/2003                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception RefreshSequentException of exn;;
-exception RefreshProofException of exn;;
-
-module type Callbacks =
-  sig
-    (* input widgets *)
-    val sequent_viewer : unit -> TermViewer.sequent_viewer
-    val term_editor : unit -> TermEditor.term_editor
-    val scratch_window :
-     unit ->
-      < sequent_viewer: TermViewer.sequent_viewer ;
-        show: unit -> unit ;
-        term: Cic.term ;
-        set_term : Cic.term -> unit ;
-        metasenv: Cic.metasenv ;
-        set_metasenv : Cic.metasenv -> unit ;
-        context: Cic.context ;
-        set_context : Cic.context -> unit >
-    (* output messages *)
-    val output_html : string -> unit
-    (* GUI refresh functions *)
-    val refresh_proof : unit -> unit
-    val refresh_goals : unit -> unit
-    (* callbacks for user-tactics interaction *)
-    val decompose_uris_choice_callback :
-      (UriManager.uri * int * 'a) list ->
-      (UriManager.uri * int * 'b list) list
-    val mk_fresh_name_callback :
-      Cic.context -> Cic.name -> typ:Cic.term -> Cic.name
-  end
-;;
-
-module type Tactics =
-  sig
-   val intros : unit -> unit
-   val exact : ?term:string -> unit -> unit
-   val apply : ?term:string -> unit -> unit
-   val elimintrossimpl : ?term:string -> unit -> unit
-   val elimtype : ?term:string -> unit -> unit
-   val whd : unit -> unit
-   val reduce : unit -> unit
-   val simpl : unit -> unit
-   val fold_whd : ?term:string -> unit -> unit
-   val fold_reduce : ?term:string -> unit -> unit
-   val fold_simpl : ?term:string -> unit -> unit
-   val cut : ?term:string -> unit -> unit
-   val change : unit -> unit
-   val letin : ?term:string -> unit -> unit
-   val ring : unit -> unit
-   val clearbody : unit -> unit
-   val clear : unit -> unit
-   val fourier : unit -> unit
-   val rewritesimpl : ?term:string -> unit -> unit
-   val rewritebacksimpl : ?term:string -> unit -> unit
-   val replace : unit -> unit
-   val reflexivity : unit -> unit
-   val symmetry : unit -> unit
-   val transitivity : ?term:string -> unit -> unit
-   val exists : unit -> unit
-   val split : unit -> unit
-   val left : unit -> unit
-   val right : unit -> unit
-   val assumption : unit -> unit
-   val generalize : unit -> unit
-   val absurd : ?term:string -> unit -> unit
-   val contradiction : unit -> unit
-   val decompose : ?term:string -> unit -> unit
-   val injection : ?term:string -> unit -> unit
-   val discriminate : ?term:string -> unit -> unit
-   val whd_in_scratch : unit -> unit
-   val reduce_in_scratch : unit -> unit
-   val simpl_in_scratch : unit -> unit
-  end
-
-module Make (C: Callbacks) : Tactics =
-  struct
-
-   let call_tactic tactic () =
-    let savedproof = !ProofEngine.proof in
-    let savedgoal  = !ProofEngine.goal in
-     begin
-      try
-       tactic () ;
-       C.refresh_goals () ;
-       C.refresh_proof ()
-      with
-         RefreshSequentException e ->
-          C.output_html
-           ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-            "sequent: " ^ Printexc.to_string e ^ "</h1>") ;
-          ProofEngine.proof := savedproof ;
-          ProofEngine.goal := savedgoal ;
-          C.refresh_goals ()
-       | RefreshProofException e ->
-          C.output_html
-           ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-            "proof: " ^ Printexc.to_string e ^ "</h1>") ;
-          ProofEngine.proof := savedproof ;
-          ProofEngine.goal := savedgoal ;
-          C.refresh_goals () ;
-          C.refresh_proof ()
-       | e ->
-          C.output_html
-           ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-          ProofEngine.proof := savedproof ;
-          ProofEngine.goal := savedgoal
-     end
-
-   let call_tactic_with_input tactic ?term () =
-    let savedproof = !ProofEngine.proof in
-    let savedgoal  = !ProofEngine.goal in
-     let uri,metasenv,bo,ty =
-      match !ProofEngine.proof with
-         None -> assert false
-       | Some (uri,metasenv,bo,ty) -> uri,metasenv,bo,ty
-     in
-      let canonical_context =
-       match !ProofEngine.goal with
-          None -> assert false
-        | Some metano ->
-           let (_,canonical_context,_) =
-            List.find (function (m,_,_) -> m=metano) metasenv
-           in
-            canonical_context
-      in
-       try
-        let metasenv',expr =
-         (match term with
-         | None -> ()
-         | Some t -> (C.term_editor ())#set_term t);
-         (C.term_editor ())#get_metasenv_and_term canonical_context metasenv
-        in
-         ProofEngine.proof := Some (uri,metasenv',bo,ty) ;
-         tactic expr ;
-         C.refresh_goals () ;
-         C.refresh_proof () ;
-         (C.term_editor ())#reset
-       with
-          RefreshSequentException e ->
-           C.output_html
-            ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-             "sequent: " ^ Printexc.to_string e ^ "</h1>") ;
-           ProofEngine.proof := savedproof ;
-           ProofEngine.goal := savedgoal ;
-           C.refresh_goals ()
-        | RefreshProofException e ->
-           C.output_html
-            ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-             "proof: " ^ Printexc.to_string e ^ "</h1>") ;
-           ProofEngine.proof := savedproof ;
-           ProofEngine.goal := savedgoal ;
-           C.refresh_goals () ;
-           C.refresh_proof ()
-        | e ->
-           C.output_html
-            ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-           ProofEngine.proof := savedproof ;
-           ProofEngine.goal := savedgoal
-
-  let call_tactic_with_goal_input tactic () =
-   let module L = LogicalOperations in
-   let module G = Gdome in
-    let savedproof = !ProofEngine.proof in
-    let savedgoal  = !ProofEngine.goal in
-     match (C.sequent_viewer ())#get_selected_terms with
-       [term] ->
-         begin
-          try
-           tactic term ;
-           C.refresh_goals () ;
-           C.refresh_proof ()
-          with
-             RefreshSequentException e ->
-              C.output_html
-               ("<h1 color=\"red\">Exception raised during the refresh of " ^
-                "the sequent: " ^ Printexc.to_string e ^ "</h1>") ;
-              ProofEngine.proof := savedproof ;
-              ProofEngine.goal := savedgoal ;
-              C.refresh_goals ()
-           | RefreshProofException e ->
-              C.output_html
-               ("<h1 color=\"red\">Exception raised during the refresh of " ^
-                "the proof: " ^ Printexc.to_string e ^ "</h1>") ;
-              ProofEngine.proof := savedproof ;
-              ProofEngine.goal := savedgoal ;
-              C.refresh_goals () ;
-              C.refresh_proof ()
-           | e ->
-              C.output_html
-               ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-              ProofEngine.proof := savedproof ;
-              ProofEngine.goal := savedgoal ;
-         end
-     | [] ->
-        C.output_html
-         ("<h1 color=\"red\">No term selected</h1>")
-     | _ ->
-        C.output_html
-         ("<h1 color=\"red\">Many terms selected</h1>")
-
-  let call_tactic_with_goal_inputs tactic () =
-   let module L = LogicalOperations in
-   let module G = Gdome in
-    let savedproof = !ProofEngine.proof in
-    let savedgoal  = !ProofEngine.goal in
-     try
-      match (C.sequent_viewer ())#get_selected_terms with
-         [] ->
-          C.output_html
-           ("<h1 color=\"red\">No term selected</h1>")
-       | terms ->
-          tactic terms ;
-          C.refresh_goals () ;
-          C.refresh_proof () ;
-     with
-        RefreshSequentException e ->
-         C.output_html
-          ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-           "sequent: " ^ Printexc.to_string e ^ "</h1>") ;
-         ProofEngine.proof := savedproof ;
-         ProofEngine.goal := savedgoal ;
-         C.refresh_goals ()
-      | RefreshProofException e ->
-         C.output_html
-          ("<h1 color=\"red\">Exception raised during the refresh of the " ^
-           "proof: " ^ Printexc.to_string e ^ "</h1>") ;
-         ProofEngine.proof := savedproof ;
-         ProofEngine.goal := savedgoal ;
-         C.refresh_goals () ;
-         C.refresh_proof ()
-      | e ->
-         C.output_html
-          ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-         ProofEngine.proof := savedproof ;
-         ProofEngine.goal := savedgoal
-
-  let call_tactic_with_input_and_goal_input tactic () =
-   let module L = LogicalOperations in
-   let module G = Gdome in
-    let savedproof = !ProofEngine.proof in
-    let savedgoal  = !ProofEngine.goal in
-     match (C.sequent_viewer ())#get_selected_terms with
-       [term] ->
-         begin
-          try
-           let uri,metasenv,bo,ty =
-            match !ProofEngine.proof with
-               None -> assert false
-             | Some (uri,metasenv,bo,ty) -> uri,metasenv,bo,ty
-           in
-            let canonical_context =
-             match !ProofEngine.goal with
-                None -> assert false
-              | Some metano ->
-                 let (_,canonical_context,_) =
-                  List.find (function (m,_,_) -> m=metano) metasenv
-                 in
-                  canonical_context in
-            let (metasenv',expr) =
-             (C.term_editor ())#get_metasenv_and_term canonical_context metasenv
-            in
-             ProofEngine.proof := Some (uri,metasenv',bo,ty) ;
-             tactic ~goal_input:term ~input:expr ;
-             C.refresh_goals () ;
-             C.refresh_proof () ;
-             (C.term_editor ())#reset
-          with
-             RefreshSequentException e ->
-              C.output_html
-               ("<h1 color=\"red\">Exception raised during the refresh of " ^
-                "the sequent: " ^ Printexc.to_string e ^ "</h1>") ;
-              ProofEngine.proof := savedproof ;
-              ProofEngine.goal := savedgoal ;
-              C.refresh_goals ()
-           | RefreshProofException e ->
-              C.output_html
-               ("<h1 color=\"red\">Exception raised during the refresh of " ^
-                "the proof: " ^ Printexc.to_string e ^ "</h1>") ;
-              ProofEngine.proof := savedproof ;
-              ProofEngine.goal := savedgoal ;
-              C.refresh_goals () ;
-              C.refresh_proof ()
-           | e ->
-              C.output_html
-               ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-              ProofEngine.proof := savedproof ;
-              ProofEngine.goal := savedgoal ;
-         end
-     | [] ->
-        C.output_html
-         ("<h1 color=\"red\">No term selected</h1>")
-     | _ ->
-        C.output_html
-         ("<h1 color=\"red\">Many terms selected</h1>")
-
-  let call_tactic_with_goal_input_in_scratch tactic () =
-   let module L = LogicalOperations in
-   let module G = Gdome in
-    let scratch_window = C.scratch_window () in
-     match scratch_window#sequent_viewer#get_selected_terms with
-       [term] ->
-         begin
-          try
-           let expr = tactic term scratch_window#term in
-            scratch_window#sequent_viewer#load_sequent
-             scratch_window#metasenv (111,scratch_window#context,expr) ;
-            scratch_window#set_term expr ;
-            scratch_window#show () ;
-          with
-           e ->
-            C.output_html
-             ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>")
-         end
-     | [] ->
-        C.output_html
-         ("<h1 color=\"red\">No term selected</h1>")
-     | _ ->
-        C.output_html
-         ("<h1 color=\"red\">Many terms selected</h1>")
-
-  let call_tactic_with_goal_inputs_in_scratch tactic () =
-   let module L = LogicalOperations in
-   let module G = Gdome in
-    let scratch_window = C.scratch_window () in
-     match scratch_window#sequent_viewer#get_selected_terms with
-        [] ->
-         C.output_html
-          ("<h1 color=\"red\">No terms selected</h1>")
-      | terms ->
-         try
-          let expr = tactic terms scratch_window#term in
-           scratch_window#sequent_viewer#load_sequent
-            scratch_window#metasenv (111,scratch_window#context,expr) ;
-           scratch_window#set_term expr ;
-           scratch_window#show () ;
-         with
-          e ->
-           C.output_html
-            ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>")
-
-  let call_tactic_with_hypothesis_input tactic () =
-   let module L = LogicalOperations in
-   let module G = Gdome in
-    let savedproof = !ProofEngine.proof in
-    let savedgoal  = !ProofEngine.goal in
-     match (C.sequent_viewer ())#get_selected_hypotheses with
-       [hypothesis] ->
-         begin
-          try
-           tactic hypothesis ;
-           C.refresh_goals () ;
-           C.refresh_proof ()
-          with
-             RefreshSequentException e ->
-              C.output_html
-               ("<h1 color=\"red\">Exception raised during the refresh of " ^
-                "the sequent: " ^ Printexc.to_string e ^ "</h1>") ;
-              ProofEngine.proof := savedproof ;
-              ProofEngine.goal := savedgoal ;
-              C.refresh_goals ()
-           | RefreshProofException e ->
-              C.output_html
-               ("<h1 color=\"red\">Exception raised during the refresh of " ^
-                "the proof: " ^ Printexc.to_string e ^ "</h1>") ;
-              ProofEngine.proof := savedproof ;
-              ProofEngine.goal := savedgoal ;
-              C.refresh_goals () ;
-              C.refresh_proof ()
-           | e ->
-              C.output_html
-               ("<h1 color=\"red\">" ^ Printexc.to_string e ^ "</h1>") ;
-              ProofEngine.proof := savedproof ;
-              ProofEngine.goal := savedgoal ;
-         end
-     | [] ->
-        C.output_html
-         ("<h1 color=\"red\">No hypothesis selected</h1>")
-     | _ ->
-        C.output_html
-         ("<h1 color=\"red\">Many hypothesis selected</h1>")
-
-
-  let intros =
-   call_tactic
-    (ProofEngine.intros ~mk_fresh_name_callback:C.mk_fresh_name_callback)
-  let exact = call_tactic_with_input ProofEngine.exact
-  let apply = call_tactic_with_input ProofEngine.apply
-  let elimintrossimpl = call_tactic_with_input ProofEngine.elim_intros_simpl
-  let elimtype = call_tactic_with_input ProofEngine.elim_type
-  let whd = call_tactic_with_goal_inputs ProofEngine.whd
-  let reduce = call_tactic_with_goal_inputs ProofEngine.reduce
-  let simpl = call_tactic_with_goal_inputs ProofEngine.simpl
-  let fold_whd = call_tactic_with_input ProofEngine.fold_whd
-  let fold_reduce = call_tactic_with_input ProofEngine.fold_reduce
-  let fold_simpl = call_tactic_with_input ProofEngine.fold_simpl
-  let cut =
-   call_tactic_with_input
-    (ProofEngine.cut ~mk_fresh_name_callback:C.mk_fresh_name_callback)
-  let change = call_tactic_with_input_and_goal_input ProofEngine.change
-  let letin =
-   call_tactic_with_input
-    (ProofEngine.letin ~mk_fresh_name_callback:C.mk_fresh_name_callback)
-  let ring = call_tactic ProofEngine.ring
-  let clearbody = call_tactic_with_hypothesis_input ProofEngine.clearbody
-  let clear = call_tactic_with_hypothesis_input ProofEngine.clear
-  let fourier = call_tactic ProofEngine.fourier
-  let rewritesimpl = call_tactic_with_input ProofEngine.rewrite_simpl
-  let rewritebacksimpl = call_tactic_with_input ProofEngine.rewrite_back_simpl
-  let replace = call_tactic_with_input_and_goal_input ProofEngine.replace
-  let reflexivity = call_tactic ProofEngine.reflexivity
-  let symmetry = call_tactic ProofEngine.symmetry
-  let transitivity = call_tactic_with_input ProofEngine.transitivity
-  let exists = call_tactic ProofEngine.exists
-  let split = call_tactic ProofEngine.split
-  let left = call_tactic ProofEngine.left
-  let right = call_tactic ProofEngine.right
-  let assumption = call_tactic ProofEngine.assumption
-  let injection = call_tactic_with_input ProofEngine.injection
-  let discriminate = call_tactic_with_input ProofEngine.discriminate
-  let generalize =
-   call_tactic_with_goal_inputs
-    (ProofEngine.generalize ~mk_fresh_name_callback:C.mk_fresh_name_callback)
-  let absurd = call_tactic_with_input ProofEngine.absurd
-  let contradiction = call_tactic ProofEngine.contradiction
-  let decompose =
-   call_tactic_with_input
-    (ProofEngine.decompose
-      ~uris_choice_callback:C.decompose_uris_choice_callback)
-  let whd_in_scratch =
-   call_tactic_with_goal_inputs_in_scratch ProofEngine.whd_in_scratch
-  let reduce_in_scratch =
-   call_tactic_with_goal_inputs_in_scratch ProofEngine.reduce_in_scratch
-  let simpl_in_scratch =
-   call_tactic_with_goal_inputs_in_scratch ProofEngine.simpl_in_scratch
-  
-end
-;;
diff --git a/helm/gTopLevel/invokeTactics.mli b/helm/gTopLevel/invokeTactics.mli
deleted file mode 100644 (file)
index 2c11fb3..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 30/01/2003                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception RefreshSequentException of exn
-exception RefreshProofException of exn
-
-module type Callbacks =
-  sig
-    (* input widgets *)
-    val sequent_viewer : unit -> TermViewer.sequent_viewer
-    val term_editor : unit -> TermEditor.term_editor
-    val scratch_window :
-     unit ->
-      < sequent_viewer: TermViewer.sequent_viewer ;
-        show: unit -> unit ;
-        term: Cic.term ;
-        set_term : Cic.term -> unit ;
-        metasenv: Cic.metasenv ;
-        set_metasenv : Cic.metasenv -> unit ;
-        context: Cic.context ;
-        set_context : Cic.context -> unit >
-    (* output messages *)
-    val output_html : string -> unit
-    (* GUI refresh functions *)
-    val refresh_proof : unit -> unit
-    val refresh_goals : unit -> unit
-    (* callbacks for user-tactics interaction *)
-    val decompose_uris_choice_callback :
-      (UriManager.uri * int * 'a) list ->
-      (UriManager.uri * int * 'b list) list
-    val mk_fresh_name_callback :
-      Cic.context -> Cic.name -> typ:Cic.term -> Cic.name
-  end
-
-module type Tactics =
- sig
-   val intros : unit -> unit
-   val exact : ?term:string -> unit -> unit
-   val apply : ?term:string -> unit -> unit
-   val elimintrossimpl : ?term:string -> unit -> unit
-   val elimtype : ?term:string -> unit -> unit
-   val whd : unit -> unit
-   val reduce : unit -> unit
-   val simpl : unit -> unit
-   val fold_whd : ?term:string -> unit -> unit
-   val fold_reduce : ?term:string -> unit -> unit
-   val fold_simpl : ?term:string -> unit -> unit
-   val cut : ?term:string -> unit -> unit
-   val change : unit -> unit
-   val letin : ?term:string -> unit -> unit
-   val ring : unit -> unit
-   val clearbody : unit -> unit
-   val clear : unit -> unit
-   val fourier : unit -> unit
-   val rewritesimpl : ?term:string -> unit -> unit
-   val rewritebacksimpl : ?term:string -> unit -> unit
-   val replace : unit -> unit
-   val reflexivity : unit -> unit
-   val symmetry : unit -> unit
-   val transitivity : ?term:string -> unit -> unit
-   val exists : unit -> unit
-   val split : unit -> unit
-   val left : unit -> unit
-   val right : unit -> unit
-   val assumption : unit -> unit
-   val generalize : unit -> unit
-   val absurd : ?term:string -> unit -> unit
-   val contradiction : unit -> unit
-   val decompose : ?term:string -> unit -> unit
-   val injection : ?term:string -> unit -> unit
-   val discriminate : ?term:string -> unit -> unit
-   val whd_in_scratch : unit -> unit
-   val reduce_in_scratch : unit -> unit
-   val simpl_in_scratch : unit -> unit
- end
-
-module Make (C : Callbacks) : Tactics
-
diff --git a/helm/gTopLevel/logicalOperations.ml b/helm/gTopLevel/logicalOperations.ml
deleted file mode 100644 (file)
index 9144f47..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let get_parent id ids_to_terms ids_to_father_ids =
- match Hashtbl.find ids_to_father_ids id with
-    None -> None
-  | Some id -> Some (id, Hashtbl.find ids_to_terms id)
-;;
-
-let get_context ids_to_terms ids_to_father_ids =
- let module C = Cic in
-  let rec aux id =
-   match get_parent id ids_to_terms ids_to_father_ids with
-      None -> []
-    | Some (parentid,parent) ->
-       let term = Hashtbl.find ids_to_terms id in
-       let binding =
-        match parent with
-           C.Rel _
-         | C.Var _
-         | C.Meta _
-         | C.Sort _
-         | C.Implicit
-         | C.Cast _ -> []
-         | C.Prod (n,s,t) when t == term -> [Some (n,C.Decl s)]
-         | C.Prod _ -> []
-         | C.Lambda (n,s,t) when t == term -> [Some (n,C.Decl s)]
-         | C.Lambda _ -> []
-         | C.LetIn (n,s,t) when t == term -> [Some (n,C.Def s)]
-         | C.LetIn _ -> []
-         | C.Appl _
-         | C.Const _ -> []
-         | C.MutInd _
-         | C.MutConstruct _
-         | C.MutCase _ -> []
-(*CSC: sbagliato: manca il when *)
-         | C.Fix (_,ifl) ->
-            let counter = ref 0 in
-             List.rev_map
-              (function (name,_,ty,bo) ->
-                let res = Some (C.Name name, (C.Def (C.Fix (!counter,ifl)))) in
-                 incr counter ;
-                 res
-              ) ifl
-         | C.CoFix (_,ifl) ->
-            let counter = ref 0 in
-             List.rev_map
-              (function (name,ty,bo) ->
-                let res = Some (C.Name name,(C.Def (C.CoFix (!counter,ifl)))) in
-                 incr counter ;
-                 res
-              ) ifl
-       in
-        binding@(aux parentid)
-  in
-   aux
-;;
-
-exception NotImplemented;;
-
-(* A subterm is changed into a fresh meta *)
-let to_sequent id ids_to_terms ids_to_father_ids =
- let module P = ProofEngine in
-  let term = Hashtbl.find ids_to_terms id in
-  let context = get_context ids_to_terms ids_to_father_ids id in
-   let metasenv =
-    match !P.proof with
-       None -> assert false
-     | Some (_,metasenv,_,_) -> metasenv
-   in
-    let ty = CicTypeChecker.type_of_aux' metasenv context term in
-     P.perforate context term ty (* P.perforate also sets the goal *)
-;;
-
-exception FocusOnlyOnMeta;;
-
-(* If the current selection is a Meta, that Meta becomes the current goal *)
-let focus id ids_to_terms ids_to_father_ids =
- let module P = ProofEngine in
-  let term = Hashtbl.find ids_to_terms id in
-  let context = get_context ids_to_terms ids_to_father_ids id in
-   let metasenv =
-    match !P.proof with
-       None -> assert false
-     | Some (_,metasenv,_,_) -> metasenv
-   in
-    let ty = CicTypeChecker.type_of_aux' metasenv context term in
-     match term with
-        Cic.Meta (n,_) -> P.goal := Some n
-      | _ -> raise FocusOnlyOnMeta
-;;
diff --git a/helm/gTopLevel/logicalOperations.mli b/helm/gTopLevel/logicalOperations.mli
deleted file mode 100644 (file)
index c44acfc..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception NotImplemented
-exception FocusOnlyOnMeta
-
-val to_sequent :
-  'a -> ('a, Cic.term) Hashtbl.t -> ('a, 'a option) Hashtbl.t -> unit
-val focus :
-  'a -> ('a, Cic.term) Hashtbl.t -> ('a, 'a option) Hashtbl.t -> unit
diff --git a/helm/gTopLevel/misc.ml b/helm/gTopLevel/misc.ml
deleted file mode 100644 (file)
index e42a0c5..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 06/01/2002                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-let domImpl = Gdome.domImplementation ();;
-let helmns = Gdome.domString "http://www.cs.unibo.it/helm";;
-
-  (* TODO BRRRRR .... *)
-  (** strip first 4 line of a string, used to strip xml declaration and doctype
-  declaration from XML strings generated by Xml.pp_to_string *)
-let strip_xml_headings =
-  let xml_headings_RE = Pcre.regexp "^.*\n.*\n.*\n.*\n" in
-  fun s ->
-    Pcre.replace ~rex:xml_headings_RE s
-;;
-
diff --git a/helm/gTopLevel/misc.mli b/helm/gTopLevel/misc.mli
deleted file mode 100644 (file)
index 65ad26c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 15/01/2003                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-val domImpl : Gdome.domImplementation
-val helmns : Gdome.domString
-
-val strip_xml_headings: string -> string
-
diff --git a/helm/gTopLevel/proofEngine.ml b/helm/gTopLevel/proofEngine.ml
deleted file mode 100644 (file)
index 491fe52..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-open ProofEngineHelpers
-open ProofEngineTypes
-
-  (* proof assistant status *)
-
-let proof = ref (None : proof option)
-let goal = ref (None : goal option)
-
-let get_current_status_as_xml () =
-  match !proof with
-     None -> assert false
-   | Some (uri, metasenv, bo, ty) ->
-      let currentproof =
-       (*CSC: Wrong: [] is just plainly wrong *)
-       Cic.CurrentProof (UriManager.name_of_uri uri,metasenv,bo,ty,[])
-      in
-       let (acurrentproof,_,_,ids_to_inner_sorts,_,_,_) =
-        Cic2acic.acic_object_of_cic_object currentproof
-       in
-        let xml, bodyxml =
-         match
-          Cic2Xml.print_object uri ~ids_to_inner_sorts
-           ~ask_dtd_to_the_getter:true acurrentproof
-         with
-            xml,Some bodyxml -> xml,bodyxml
-          | _,None -> assert false
-        in
-         (xml, bodyxml)
-;;
-
-let apply_tactic ~tactic =
- match !proof,!goal with
-  | None,_
-  | _,None -> assert false
-  | Some proof', Some goal' ->
-     let (newproof, newgoals) = tactic ~status:(proof', goal') in
-      proof := Some newproof;
-      goal :=
-       (match newgoals, newproof with
-           goal::_, _ -> Some goal
-         | [], (_,(goal,_,_)::_,_,_) ->
-         (* the tactic left no open goal ; let's choose the first open goal *)
-         (*CSC: here we could implement and use a proof-tree like notion... *)
-            Some goal
-         | _, _ -> None)
-;;
-
-(* metas_in_term term                                                *)
-(* Returns the ordered list of the metas that occur in [term].       *)
-(* Duplicates are removed. The implementation is not very efficient. *)
-let metas_in_term term =
- let module C = Cic in
-  let rec aux =
-   function
-      C.Rel _ -> []
-    | C.Meta (n,_) -> [n]
-    | C.Sort _
-    | C.Implicit -> []
-    | C.Cast (te,ty) -> (aux te) @ (aux ty)
-    | C.Prod (_,s,t) -> (aux s) @ (aux t)
-    | C.Lambda (_,s,t) -> (aux s) @ (aux t)
-    | C.LetIn (_,s,t) -> (aux s) @ (aux t)
-    | C.Appl l -> List.fold_left (fun i t -> i @ (aux t)) [] l
-    | C.Var (_,exp_named_subst)
-    | C.Const (_,exp_named_subst)
-    | C.MutInd (_,_,exp_named_subst)
-    | C.MutConstruct (_,_,_,exp_named_subst) ->
-       List.fold_left (fun i (_,t) -> i @ (aux t)) [] exp_named_subst
-    | C.MutCase (_,_,outt,t,pl) ->
-       (aux outt) @ (aux t) @
-        (List.fold_left (fun i t -> i @ (aux t)) [] pl)
-    | C.Fix (_,fl) ->
-        List.fold_left (fun i (_,_,ty,bo) -> i @ (aux bo) @ (aux ty)) [] fl
-    | C.CoFix (_,fl) ->
-        List.fold_left (fun i (_,ty,bo) -> i @ (aux bo) @ (aux ty)) [] fl
-  in
-   let metas = aux term in
-    let rec elim_duplicates =
-     function
-        [] -> []
-      | he::tl ->
-         he::(elim_duplicates (List.filter (function el -> he <> el) tl))
-    in
-     elim_duplicates metas
-
-(* perforate context term ty                                                 *)
-(* replaces the term [term] in the proof with a new metavariable whose type  *)
-(* is [ty]. [context] must be the context of [term] in the whole proof. This *)
-(* could be easily computed; so the only reasons to have it as an argument   *)
-(* are efficiency reasons.                                                   *)
-let perforate context term ty =
- let module C = Cic in
-  match !proof with
-     None -> assert false
-   | Some (uri,metasenv,bo,gty as proof') ->
-      let newmeta = new_meta proof' in
-       (* We push the new meta at the end of the list for pretty-printing *)
-       (* purposes: in this way metas are ordered.                        *)
-       let metasenv' = metasenv@[newmeta,context,ty] in
-        let irl = identity_relocation_list_for_metavariable context in
-(*CSC: Bug: se ci sono due term uguali nella prova dovrei bucarne uno solo!!!*)
-        let bo' =
-         ProofEngineReduction.replace (==) [term] [C.Meta (newmeta,irl)] bo
-        in
-        (* It may be possible that some metavariables occurred only in *)
-        (* the term we are perforating and they now occurs no more. We *)
-        (* get rid of them, collecting the really useful metavariables *)
-        (* in metasenv''.                                              *)
-(*CSC: Bug: una meta potrebbe non comparire in bo', ma comparire nel tipo *)
-(*CSC: di una metavariabile che compare in bo'!!!!!!!                     *)
-         let newmetas = metas_in_term bo' in
-          let metasenv'' =
-           List.filter (function (n,_,_) -> List.mem n newmetas) metasenv'
-          in
-           proof := Some (uri,metasenv'',bo',gty) ;
-           goal := Some newmeta
-
-
-(************************************************************)
-(*                  Some easy tactics.                      *)
-(************************************************************)
-
-(* Reduces [term] using [reduction_function] in the current scratch goal [ty] *)
-let reduction_tactic_in_scratch reduction_function terms ty =
- let metasenv =
-  match !proof with
-     None -> []
-   | Some (_,metasenv,_,_) -> metasenv
- in
- let metano,context,_ =
-  match !goal with
-     None -> assert false
-   | Some metano -> List.find (function (m,_,_) -> m=metano) metasenv
- in
-  let terms' = List.map (reduction_function context) terms in
-   ProofEngineReduction.replace
-    ~equality:(==) ~what:terms ~with_what:terms' ~where:ty
-;;
-
-let whd_in_scratch    = reduction_tactic_in_scratch CicReduction.whd
-let reduce_in_scratch = reduction_tactic_in_scratch ProofEngineReduction.reduce
-let simpl_in_scratch  = reduction_tactic_in_scratch ProofEngineReduction.simpl
-
-(************************************************************)
-(*              Tactics defined elsewhere                   *)
-(************************************************************)
-
-  (* primitive tactics *)
-
-let apply term = apply_tactic (PrimitiveTactics.apply_tac ~term)
-let intros ?mk_fresh_name_callback () =
- apply_tactic (PrimitiveTactics.intros_tac ?mk_fresh_name_callback ())
-let cut ?mk_fresh_name_callback term =
- apply_tactic (PrimitiveTactics.cut_tac ?mk_fresh_name_callback term)
-let letin ?mk_fresh_name_callback term =
- apply_tactic (PrimitiveTactics.letin_tac ?mk_fresh_name_callback term)
-let exact term = apply_tactic (PrimitiveTactics.exact_tac ~term)
-let elim_intros_simpl term =
-  apply_tactic (PrimitiveTactics.elim_intros_simpl_tac ~term)
-let change ~goal_input:what ~input:with_what =
-  apply_tactic (PrimitiveTactics.change_tac ~what ~with_what)
-
-  (* structural tactics *)
-
-let clearbody hyp = apply_tactic (ProofEngineStructuralRules.clearbody ~hyp)
-let clear hyp = apply_tactic (ProofEngineStructuralRules.clear ~hyp)
-
-  (* reduction tactics *)
-
-let whd terms =
- apply_tactic
-  (ReductionTactics.whd_tac ~also_in_hypotheses:true ~terms:(Some terms))
-let reduce terms =
- apply_tactic
-  (ReductionTactics.reduce_tac ~also_in_hypotheses:true ~terms:(Some terms))
-let simpl terms =
- apply_tactic
-  (ReductionTactics.simpl_tac ~also_in_hypotheses:true ~terms:(Some terms))
-
-let fold_whd term =
- apply_tactic
-  (ReductionTactics.fold_tac ~reduction:CicReduction.whd
-    ~also_in_hypotheses:true ~term)
-let fold_reduce term =
- apply_tactic
-  (ReductionTactics.fold_tac ~reduction:ProofEngineReduction.reduce
-    ~also_in_hypotheses:true ~term)
-let fold_simpl term =
- apply_tactic
-  (ReductionTactics.fold_tac ~reduction:ProofEngineReduction.simpl
-    ~also_in_hypotheses:true ~term)
-
-  (* other tactics *)
-
-let elim_type term = apply_tactic (EliminationTactics.elim_type_tac ~term)
-let ring () = apply_tactic Ring.ring_tac
-let fourier () = apply_tactic FourierR.fourier_tac
-
-let rewrite_simpl term = apply_tactic (EqualityTactics.rewrite_simpl_tac ~term)
-let rewrite_back_simpl term = apply_tactic (EqualityTactics.rewrite_back_simpl_tac ~term)
-let replace ~goal_input:what ~input:with_what = 
-  apply_tactic (EqualityTactics.replace_tac ~what ~with_what)
-
-let reflexivity () = apply_tactic EqualityTactics.reflexivity_tac
-let symmetry () = apply_tactic EqualityTactics.symmetry_tac
-let transitivity term = apply_tactic (EqualityTactics.transitivity_tac ~term)
-
-let exists () = apply_tactic IntroductionTactics.exists_tac
-let split () = apply_tactic IntroductionTactics.split_tac 
-let left () = apply_tactic IntroductionTactics.left_tac
-let right () = apply_tactic IntroductionTactics.right_tac
-
-let assumption () = apply_tactic VariousTactics.assumption_tac
-
-let generalize ?mk_fresh_name_callback terms =
- apply_tactic (VariousTactics.generalize_tac ?mk_fresh_name_callback terms)
-
-let absurd term = apply_tactic (NegationTactics.absurd_tac ~term)
-let contradiction () = apply_tactic NegationTactics.contradiction_tac
-
-let decompose ~uris_choice_callback term =
- apply_tactic (EliminationTactics.decompose_tac ~uris_choice_callback term)
-
-let injection term = apply_tactic (DiscriminationTactics.injection_tac ~term)
-let discriminate term = apply_tactic (DiscriminationTactics.discriminate_tac ~term)
-let decide_equality () = apply_tactic DiscriminationTactics.decide_equality_tac
-let compare term = apply_tactic (DiscriminationTactics.compare_tac ~term)
-
-(*
-let prova_tatticali () = apply_tactic Tacticals.prova_tac
-*)
-
diff --git a/helm/gTopLevel/proofEngine.mli b/helm/gTopLevel/proofEngine.mli
deleted file mode 100644 (file)
index 4b7db8f..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-  (* proof engine status *)
-val proof : ProofEngineTypes.proof option ref
-val goal : ProofEngineTypes.goal option ref
-
-  (** return a pair of "xml" (as defined in Xml module) representing the current
-  proof type and body, respectively *)
-val get_current_status_as_xml : unit -> Xml.token Stream.t * Xml.token Stream.t
-
-  (* start a new goal undoing part of the proof *)
-val perforate : Cic.context -> Cic.term -> Cic.term -> unit
-
-  (* reduction tactics *)
-val whd : Cic.term list -> unit
-val reduce : Cic.term list -> unit
-val simpl : Cic.term list -> unit
-val fold_whd : Cic.term -> unit
-val fold_reduce : Cic.term -> unit
-val fold_simpl : Cic.term -> unit
-
-  (* scratch area reduction tactics *)
-val whd_in_scratch : Cic.term list -> Cic.term -> Cic.term
-val reduce_in_scratch : Cic.term list -> Cic.term -> Cic.term
-val simpl_in_scratch : Cic.term list -> Cic.term -> Cic.term
-
-  (* "primitive" tactics *)
-val apply : Cic.term -> unit
-val intros :
- ?mk_fresh_name_callback:ProofEngineTypes.mk_fresh_name_type -> unit -> unit
-val cut :
- ?mk_fresh_name_callback:ProofEngineTypes.mk_fresh_name_type -> Cic.term -> unit
-val letin :
- ?mk_fresh_name_callback:ProofEngineTypes.mk_fresh_name_type -> Cic.term -> unit
-val exact : Cic.term -> unit
-val elim_intros_simpl : Cic.term -> unit
-val change : goal_input:Cic.term -> input:Cic.term -> unit
-
-  (* structural tactics *)
-val clearbody : Cic.hypothesis -> unit
-val clear : Cic.hypothesis -> unit
-
-  (* other tactics *)
-val elim_type : Cic.term -> unit
-val ring : unit -> unit
-val fourier : unit -> unit
-val rewrite_simpl : Cic.term -> unit
-val rewrite_back_simpl : Cic.term -> unit
-val replace : goal_input:Cic.term -> input:Cic.term -> unit
-
-val reflexivity : unit -> unit
-val symmetry : unit -> unit
-val transitivity : Cic.term -> unit
-
-val exists : unit -> unit
-val split : unit -> unit
-val left : unit -> unit
-val right : unit -> unit
-
-val assumption : unit -> unit
-
-val generalize :
- ?mk_fresh_name_callback:ProofEngineTypes.mk_fresh_name_type ->
-  Cic.term list -> unit
-
-val absurd : Cic.term -> unit
-val contradiction : unit -> unit
-
-val decompose :
- uris_choice_callback:
-  ((UriManager.uri * int * (UriManager.uri * Cic.term) list) list ->
-   (UriManager.uri * int * (UriManager.uri * Cic.term) list) list) ->
- Cic.term -> unit
-
-val injection : Cic.term -> unit
-val discriminate : Cic.term -> unit
-val decide_equality : unit -> unit
-val compare : Cic.term -> unit
-
-
-(*
-val prova_tatticali : unit -> unit
-*)
diff --git a/helm/gTopLevel/rootcontent.xsl b/helm/gTopLevel/rootcontent.xsl
deleted file mode 100644 (file)
index 3adf8e2..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- XSLT version 0.1 of the stylesheet to accomplish the right inclusion  -->
-<!-- of the content stylesheets:                                           -->
-<!-- First draft: May 26 2000, C.Sacerdoti Coen, I.Schena, F.Guidi         -->
-<!--***********************************************************************-->
-
-<!-- Schema of stylesheet precedences (from highest to lowest):          -->
-<!-- proofs.xsl-> reals.xsl-> set -> basic -> annotatedcont              -->
-<!-- because annotatedcont is imported and has lower precendence than    -->
-<!-- the templates of rootcontent (i.e. the templates of set and basic). -->
-<!-- annotatedcont -> objcontent -> content                              -->
-<!-- because annotatedcont generates an import precedence tree.          --> 
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<!--******************************************************************-->
-<!-- Variablie containing the absolute path of the CIC file            -->
-<!--******************************************************************-->
-
-<xsl:import href="annotatedcont.xsl"/>
-<xsl:import href="links_library.xsl"/>
-<xsl:import href="getter.xsl"/>
-
-<xsl:param name="getterURL" select="'http://localhost:8081/'"/>
-<xsl:param name="processorURL" select="'http://localhost:8080/helm/servlet/uwobo/'"/>
-<xsl:param name="naturalLanguage" select="'yes'"/>
-<xsl:param name="annotations" select="'no'"/>
-<xsl:param name="CICURI" select="''"/>
-
-<!-- CSC: Wrong: we assume that no '.body' can appear in the middle of the URI -->
-<xsl:variable name="BaseCICURI">
- <xsl:variable name="res" select="substring-before($CICURI,'.body')"/>
- <xsl:choose>
-  <xsl:when test="$res = ''">
-   <xsl:value-of select="$CICURI"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="$res"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:variable name="InnerTypesUri"><xsl:value-of select="concat($BaseCICURI,'.types')"/></xsl:variable>
-<!-- CSC: ?????????????????? -->
-<xsl:variable name="AnnotationsUri"><xsl:value-of select="concat($BaseCICURI,'.ann')"/></xsl:variable>
-
-<!--
-<xsl:variable name="InnerTypesUrl"><xsl:call-template name="makeURL4InnerTypes"><xsl:with-param name="uri" select="$InnerTypesUri"/></xsl:call-template></xsl:variable>
--->
-<!--CSC: Qui, invece, accediamo direttamente al disco e non applichiamo dc -->
-<xsl:variable name="InnerTypesUrl" select="'file:///public/sacerdot/innertypes'"/>
-<!--CSC: Questa e' la versione originale che applica dc a quello che il getter<  restituisce.
-<xsl:variable name="ConstantTypeUrl"><xsl:call-template name="makeURL4InnerTypes"><xsl:with-param name="uri" select="$BaseCICURI"/></xsl:call-template></xsl:variable>
--->
-<!--CSC: Qui, invece, accediamo direttamente al disco e non applichiamo dc -->
-<xsl:variable name="ConstantTypeUrl" select="'file:///public/sacerdot/constanttype'"/>
-<xsl:variable name="AnnotationsUrl"><xsl:call-template name="URLofURI4getter"><xsl:with-param name="uri" select="$AnnotationsUri"/></xsl:call-template></xsl:variable>
-
-
-<!-- WARNING: Using lazy evaluation: $CICURI.* may not exist, but -->
-<!-- document() is called only by need!!!                         -->
-<xsl:variable name="InnerTypes" select="document($InnerTypesUrl)"/>
-<xsl:variable name="CICAnnotations" select="document($AnnotationsUrl)"/> 
-
-<xsl:include href="headercontent.xsl"/>
-<xsl:include href="proofs.xsl"/>
-<xsl:variable name="showproof" select="0"/>
-</xsl:stylesheet>
-
-
-
-
-
-
-
-
diff --git a/helm/gTopLevel/script.sh b/helm/gTopLevel/script.sh
deleted file mode 100755 (executable)
index 29dd0a3..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-
-export OCAMLPATH=/projects/helm/galax/sources/natile-galax-0.1-alpha-installed/lib:/home/claudio/miohelm/helm/ocaml:/home/claudio/miohelm/helm:/home/claudio/miohelm/helm/hbugs/meta
-
-export HELM_ANNOTATIONS_DIR=/home/claudio/miohelm/objects
-export HELM_ANNOTATIONS_URL=file:///home/claudio/miohelm/objects
-#export HELM_GETTER_URL=http://mowgli.cs.unibo.it:58081/
-#export HELM_PROCESSOR_URL=http://mowgli.cs.unibo.it:58080/
-export HELM_GETTER_URL=http://localhost:58081/
-export HELM_PROCESSOR_URL=http://localhost:58080/
-
-export GTOPLEVEL_PROOFFILE=/public/sacerdot/currentproof
-export GTOPLEVEL_PROOFFILETYPE=/public/sacerdot/currentprooftype
-export GTOPLEVEL_INNERTYPESFILE=/public/sacerdot/innertypes
-export GTOPLEVEL_CONSTANTTYPEFILE=/public/sacerdot/constanttype
-export POSTGRESQL_CONNECTION_STRING="dbname=mowgli"
-#export POSTGRESQL_CONNECTION_STRING="host=mowgli.cs.unibo.it dbname=mowgli user=helm password=awH21Un"
-
-export HELM_TMP_DIR=/tmp
diff --git a/helm/gTopLevel/sequentPp.ml b/helm/gTopLevel/sequentPp.ml
deleted file mode 100644 (file)
index 8cce6e1..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-module TextualPp =
- struct
-  (* It also returns the pretty-printing context! *)
-  let print_context ctx =
-    let print_name =
-     function
-        Cic.Name n -> n
-      | Cic.Anonymous -> "_"
-    in
-     List.fold_right
-      (fun i (output,context) ->
-        let (newoutput,context') =
-         match i with
-            Some (n,Cic.Decl t) ->
-              print_name n ^ ":" ^ CicPp.pp t context ^ "\n", (Some n)::context
-          | Some (n,Cic.Def t) ->
-              print_name n ^ ":=" ^ CicPp.pp t context ^ "\n", (Some n)::context
-          | None ->
-              "_ ?= _\n", None::context
-        in
-         output^newoutput,context'
-      ) ctx ("",[])
-  ;;
-
-  exception NotImplemented;;
-
-  let print_sequent (metano,context,goal) =
-   "\n" ^
-    let (output,pretty_printer_context_of_context) = print_context context in
-     output ^
-      "---------------------- ?" ^ string_of_int metano ^ "\n" ^
-       CicPp.pp goal pretty_printer_context_of_context
-  ;;
- end
-;;
-
-module XmlPp =
- struct
-  let dtdname = "http://localhost:8081/getdtd?uri=cic.dtd";;
-
-  let print_sequent metasenv (metano,context,goal) =
-   let module X = Xml in
-    let ids_to_terms = Hashtbl.create 503 in
-    let ids_to_father_ids = Hashtbl.create 503 in
-    let ids_to_inner_sorts = Hashtbl.create 503 in
-    let ids_to_inner_types = Hashtbl.create 503 in
-    let ids_to_hypotheses = Hashtbl.create 11 in
-    let hypotheses_seed = ref 0 in
-    let sequent_id = "i0" in
-    let seed = ref 1 in  (* 'i0' is used for the whole sequent *)
-     let acic_of_cic_context =
-      Cic2acic.acic_of_cic_context' seed ids_to_terms ids_to_father_ids
-       ids_to_inner_sorts ids_to_inner_types metasenv
-     in
-      let final_s,_,final_idrefs =
-       (List.fold_right
-         (fun binding (s,context,idrefs) ->
-           let hid = "h" ^ string_of_int !hypotheses_seed in
-            Hashtbl.add ids_to_hypotheses hid binding ;
-            incr hypotheses_seed ;
-            match binding with
-               (Some (n,(Cic.Def t as b)) as entry)
-             | (Some (n,(Cic.Decl t as b)) as entry) ->
-                let acic = acic_of_cic_context context idrefs t None in
-                 [< s ;
-                    X.xml_nempty
-                     (match b with Cic.Decl _ -> "Decl" | Cic.Def _ -> "Def")
-                     ["name",(match n with Cic.Name n -> n | _ -> assert false);
-                      "id",hid]
-                     (Cic2Xml.print_term ~ids_to_inner_sorts acic)
-                 >], (entry::context), (hid::idrefs)
-             | None ->
-                (* Invariant: "" is never looked up *)
-                [< s ; X.xml_empty "Hidden" [] >], (None::context), ""::idrefs
-         ) context ([<>],[],[])
-       )
-      in
-       let acic = acic_of_cic_context context final_idrefs goal None in
-         [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-            X.xml_cdata ("<!DOCTYPE Sequent SYSTEM \"" ^ dtdname ^ "\">\n");
-            X.xml_nempty "Sequent" ["no",string_of_int metano;"id",sequent_id]
-             [< final_s ;
-                Xml.xml_nempty "Goal" []
-                 (Cic2Xml.print_term ~ids_to_inner_sorts acic)
-             >]
-         >],
-         ids_to_terms,ids_to_father_ids,ids_to_hypotheses
-  ;;
- end
-;;
diff --git a/helm/gTopLevel/sequentPp.mli b/helm/gTopLevel/sequentPp.mli
deleted file mode 100644 (file)
index 61f843f..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-module TextualPp :
-  sig
-    val print_context :
-      (Cic.name * Cic.context_entry) option list ->
-      string * Cic.name option list
-    exception NotImplemented
-    val print_sequent :
-      int * (Cic.name * Cic.context_entry) option list * Cic.term -> string
-  end
-module XmlPp :
-  sig
-    val print_sequent :
-      Cic.metasenv ->
-      int * Cic.context * Cic.term ->
-      Xml.token Stream.t * (Cic.id, Cic.term) Hashtbl.t *
-      (Cic.id, Cic.id option) Hashtbl.t * (string, Cic.hypothesis) Hashtbl.t
-  end
diff --git a/helm/gTopLevel/termEditor.ml b/helm/gTopLevel/termEditor.ml
deleted file mode 100644 (file)
index 310efd1..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 06/01/2002                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* A WIDGET TO ENTER CIC TERMS *)
-
-class type term_editor =
- object
-   method coerce : GObj.widget
-   (* get_as_string returns the unquoted string *)
-   method get_as_string : string
-   method get_metasenv_and_term :
-     context:Cic.context ->
-     metasenv:Cic.metasenv -> Cic.metasenv * Cic.term
-   method reset : unit
-   (* The input of set_term is unquoted *)
-   method set_term : string -> unit
-   method id_to_uris : Disambiguate.domain_and_interpretation ref
- end
-;;
-
-let empty_id_to_uris = ([],function _ -> None);;
-
-module Make(C:Disambiguate.Callbacks) =
-  struct
-
-   module Disambiguate' = Disambiguate.Make(C);;
-
-   class term_editor_impl mqi_handle ?packing ?width ?height ?isnotempty_callback
-    ?share_id_to_uris_with () : term_editor
-   =
-    let id_to_uris =
-     match share_id_to_uris_with with
-        None -> ref empty_id_to_uris
-      | Some obj -> obj#id_to_uris
-    in
-    let input = GEdit.text ~editable:true ?width ?height ?packing () in
-    let _ =
-     match isnotempty_callback with
-        None -> ()
-      | Some callback ->
-         ignore(input#connect#changed
-          (function () -> callback (input#length > 0)))
-    in
-     object(self)
-      method coerce = input#coerce
-      method reset =
-       input#delete_text 0 input#length
-      (* CSC: txt is now a string, but should be of type Cic.term *)
-      method set_term txt =
-       self#reset ;
-       ignore ((input#insert_text txt) ~pos:0)
-      (* CSC: this method should disappear *)
-      (* get_as_string returns the unquoted string *)
-      method get_as_string =
-       input#get_chars 0 input#length
-      method get_metasenv_and_term ~context ~metasenv =
-       let name_context =
-        List.map
-         (function
-             Some (n,_) -> Some n
-           | None -> None
-         ) context
-       in
-        let lexbuf = Lexing.from_string (input#get_chars 0 input#length) in
-         let dom,mk_metasenv_and_expr =
-          CicTextualParserContext.main
-           ~context:name_context ~metasenv CicTextualLexer.token lexbuf
-         in
-          let id_to_uris',metasenv,expr =
-           Disambiguate'.disambiguate_input mqi_handle
-            context metasenv dom mk_metasenv_and_expr ~id_to_uris:!id_to_uris
-          in
-           id_to_uris := id_to_uris' ;
-           metasenv,expr
-      method id_to_uris = id_to_uris
-   end
-
-   let term_editor = new term_editor_impl
-
-end
-;;
diff --git a/helm/gTopLevel/termEditor.mli b/helm/gTopLevel/termEditor.mli
deleted file mode 100644 (file)
index ce51bdb..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-class type term_editor =
- object
-   method coerce : GObj.widget
-   (* get_as_string returns the unquoted string *)
-   method get_as_string : string
-   method get_metasenv_and_term :
-     context:Cic.context ->
-     metasenv:Cic.metasenv -> Cic.metasenv * Cic.term
-   method reset : unit
-   method set_term : string -> unit
-   method id_to_uris : Disambiguate.domain_and_interpretation ref
- end
-
-val empty_id_to_uris : Disambiguate.domain_and_interpretation
-
-module Make (C : Disambiguate.Callbacks) :
-   sig
-    val term_editor :
-     MQIConn.handle ->
-     ?packing:(GObj.widget -> unit) ->
-     ?width:int ->
-     ?height:int ->
-     ?isnotempty_callback:(bool -> unit) ->
-     ?share_id_to_uris_with:term_editor ->
-     unit -> term_editor
-   end
diff --git a/helm/gTopLevel/termViewer.ml b/helm/gTopLevel/termViewer.ml
deleted file mode 100644 (file)
index 9a9c9c9..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 29/01/2003                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* List utility functions *)
-exception Skip;;
-
-let list_map_fail f =
- let rec aux =
-  function
-     [] -> []
-   | he::tl ->
-      try
-       let he' = f he in
-        he'::(aux tl)
-      with Skip ->
-       (aux tl)
- in
-  aux
-;;
-(* End of the list utility functions *)
-
-(** A widget to render sequents **)
-
-class sequent_viewer obj =
- object(self)
-
-  inherit GMathViewAux.multi_selection_math_view obj
-
-  val mutable current_infos = None
-
-  (* returns the list of selected terms         *)
-  (* selections which are not terms are ignored *)
-  method get_selected_terms =
-   let selections = self#get_selections in
-    list_map_fail
-     (function node ->
-       let xpath =
-        ((node : Gdome.element)#getAttributeNS
-          ~namespaceURI:Misc.helmns
-          ~localName:(Gdome.domString "xref"))#to_string
-       in
-        if xpath = "" then assert false (* "ERROR: No xref found!!!" *)
-        else
-         match current_infos with
-            Some (ids_to_terms,_,_) ->
-             let id = xpath in
-              (try
-                Hashtbl.find ids_to_terms id
-               with _ -> raise Skip)
-          | None -> assert false (* "ERROR: No current term!!!" *)
-     ) selections
-
-  (* returns the list of selected hypotheses         *)
-  (* selections which are not hypotheses are ignored *)
-  method get_selected_hypotheses =
-   let selections = self#get_selections in
-    list_map_fail
-     (function node ->
-       let xpath =
-        ((node : Gdome.element)#getAttributeNS
-          ~namespaceURI:Misc.helmns
-          ~localName:(Gdome.domString "xref"))#to_string
-       in
-        if xpath = "" then assert false (* "ERROR: No xref found!!!" *)
-        else
-         match current_infos with
-            Some (_,_,ids_to_hypotheses) ->
-             let id = xpath in
-              (try
-                Hashtbl.find ids_to_hypotheses id
-               with _ -> raise Skip)
-          | None -> assert false (* "ERROR: No current term!!!" *)
-     ) selections
-  
-  method load_sequent metasenv sequent =
-   let sequent_mml,(ids_to_terms,ids_to_father_ids,ids_to_hypotheses) =
-    ApplyStylesheets.mml_of_cic_sequent metasenv sequent
-   in
-    self#load_doc ~dom:sequent_mml ;
-    current_infos <-
-     Some (ids_to_terms,ids_to_father_ids,ids_to_hypotheses)
- end
-;;
-
-let sequent_viewer ?adjustmenth ?adjustmentv ?font_size ?font_manager
- ?border_width ?width ?height ?packing ?show () =
- let w =
-   GtkMathView.MathView.create
-    ?adjustmenth:(Gaux.may_map ~f:GData.as_adjustment adjustmenth)
-    ?adjustmentv:(Gaux.may_map ~f:GData.as_adjustment adjustmentv)
-    ()
- in
-  GtkBase.Container.set w ?border_width ?width ?height;
- let mathview = GObj.pack_return (new sequent_viewer w) ~packing ~show in
- begin
-    match font_size with
-    | Some size -> mathview#set_font_size size
-    | None      -> ()
-  end;
-  begin
-    match font_manager with
-    | Some manager -> mathview#set_font_manager_type ~fm_type:manager
-    | None         -> ()
-  end;
-  mathview
-;;
-
-
-(** A widget to render proofs **)
-
-class proof_viewer obj =
- object(self)
-
-  inherit GMathViewAux.single_selection_math_view obj
-
-  initializer self#set_font_size 10
-
-  val mutable current_infos = None
-
-  method make_sequent_of_selected_term =
-   match self#get_selection with
-      Some node ->
-       let xpath =
-        ((node : Gdome.element)#getAttributeNS
-          ~namespaceURI:Misc.helmns
-          ~localName:(Gdome.domString "xref"))#to_string
-       in
-        if xpath = "" then assert false (* "ERROR: No xref found!!!" *)
-        else
-         begin
-          match current_infos with
-             Some (ids_to_terms, ids_to_father_ids, _, _) ->
-              let id = xpath in
-               LogicalOperations.to_sequent id ids_to_terms ids_to_father_ids
-           | None -> assert false (* "ERROR: No current term!!!" *)
-         end
-    | None -> assert false (* "ERROR: No selection!!!" *)
-
-  method focus_sequent_of_selected_term =
-   match self#get_selection with
-      Some node ->
-       let xpath =
-        ((node : Gdome.element)#getAttributeNS
-          ~namespaceURI:Misc.helmns
-          ~localName:(Gdome.domString "xref"))#to_string
-       in
-        if xpath = "" then assert false (* "ERROR: No xref found!!!" *)
-        else
-         begin
-          match current_infos with
-             Some (ids_to_terms, ids_to_father_ids, _, _) ->
-              let id = xpath in
-               LogicalOperations.focus id ids_to_terms ids_to_father_ids
-           | None -> assert false (* "ERROR: No current term!!!" *)
-         end
-    | None -> assert false (* "ERROR: No selection!!!" *)
-
-  method load_proof uri currentproof =
-   let
-    (acic,ids_to_terms,ids_to_father_ids,ids_to_inner_sorts,
-     ids_to_inner_types,ids_to_conjectures,ids_to_hypotheses)
-   =
-    Cic2acic.acic_object_of_cic_object currentproof
-   in
-    let mml =
-     ApplyStylesheets.mml_of_cic_object
-      ~explode_all:true uri acic ids_to_inner_sorts ids_to_inner_types
-    in
-     self#load_doc ~dom:mml ;
-     current_infos <-
-      Some
-       (ids_to_terms,ids_to_father_ids,ids_to_conjectures,ids_to_hypotheses) ;
-     (acic, ids_to_inner_types, ids_to_inner_sorts)
- end
-;;
-
-let proof_viewer ?adjustmenth ?adjustmentv ?font_size ?font_manager
- ?border_width ?width ?height ?packing ?show () =
- let w =
-   GtkMathView.MathView.create
-    ?adjustmenth:(Gaux.may_map ~f:GData.as_adjustment adjustmenth)
-    ?adjustmentv:(Gaux.may_map ~f:GData.as_adjustment adjustmentv)
-    ()
- in
-  GtkBase.Container.set w ?border_width ?width ?height;
- let mathview = GObj.pack_return (new proof_viewer w) ~packing ~show in
- begin
-    match font_size with
-    | Some size -> mathview#set_font_size size
-    | None      -> ()
-  end;
-  begin
-    match font_manager with
-    | Some manager -> mathview#set_font_manager_type ~fm_type:manager
-    | None         -> ()
-  end;
-  mathview
-;;
diff --git a/helm/gTopLevel/termViewer.mli b/helm/gTopLevel/termViewer.mli
deleted file mode 100644 (file)
index c043f5c..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 29/01/2003                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-(** A widget to render sequents **)
-
-class sequent_viewer :
-  Gtk_mathview.math_view Gtk.obj ->
-  object
-    inherit GMathViewAux.multi_selection_math_view
-
-    (* returns the list of selected terms         *)
-    (* selections which are not terms are ignored *)
-    method get_selected_terms : Cic.term list
-
-    (* returns the list of selected hypotheses         *)
-    (* selections which are not hypotheses are ignored *)
-    method get_selected_hypotheses : Cic.hypothesis list
-
-    method load_sequent : Cic.metasenv -> Cic.conjecture -> unit
-  end
-
-val sequent_viewer :
-  ?adjustmenth:GData.adjustment ->
-  ?adjustmentv:GData.adjustment ->
-  ?font_size:int ->
-  ?font_manager:[ `font_manager_gtk | `font_manager_t1] ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(GObj.widget -> unit) ->
-  ?show:bool ->
-  unit -> sequent_viewer
-
-(** A widget to render proofs **)
-
-class proof_viewer :
-  Gtk_mathview.math_view Gtk.obj ->
-  object
-    inherit GMathViewAux.single_selection_math_view
-
-    (* the new current sequent becomes the one obtained *)
-    (* perforating the proof where the selection is     *)
-    method make_sequent_of_selected_term : unit
-
-    (* the new current sequent becomes the one obtained *)
-    (* focusing the proof on the selected metavariable  *)
-    method focus_sequent_of_selected_term : unit
-
-    (* load_proof also returns the annotated cic term and the *)
-    (* ids_to_inner_types and ids_to_inner_sorts maps.        *)
-    method load_proof :
-     UriManager.uri -> Cic.obj ->
-      Cic.annobj * (Cic.id, Cic2acic.anntypes) Hashtbl.t *
-       (Cic.id, string) Hashtbl.t
-
-  end
-
-val proof_viewer :
-  ?adjustmenth:GData.adjustment ->
-  ?adjustmentv:GData.adjustment ->
-  ?font_size:int ->
-  ?font_manager:[ `font_manager_gtk | `font_manager_t1] ->
-  ?border_width:int ->
-  ?width:int ->
-  ?height:int ->
-  ?packing:(GObj.widget -> unit) ->
-  ?show:bool ->
-  unit -> proof_viewer
diff --git a/helm/gTopLevel/texTermEditor.ml b/helm/gTopLevel/texTermEditor.ml
deleted file mode 100644 (file)
index 3cf0993..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 06/01/2002                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* A WIDGET TO ENTER CIC TERMS *)
-
-class type term_editor =
- object
-   method coerce : GObj.widget
-   (* get_as_string returns the unquoted string *)
-   method get_as_string : string
-   method get_metasenv_and_term :
-     context:Cic.context ->
-     metasenv:Cic.metasenv -> Cic.metasenv * Cic.term
-   method reset : unit
-   (* The input of set_term is unquoted *)
-   method set_term : string -> unit
-   method id_to_uris : Disambiguate.domain_and_interpretation ref
- end
-;;
-
-let empty_id_to_uris = ([],function _ -> None);;
-
-module Make(C:Disambiguate.Callbacks) =
-  struct
-
-   module Disambiguate' = Disambiguate.Make(C);;
-
-   class term_editor_impl
-    mqi_handle
-    ?packing ?width ?height
-    ?isnotempty_callback ?share_id_to_uris_with () : term_editor
-   =
-    let mmlwidget =
-     GMathViewAux.single_selection_math_view
-      ?packing ?width ?height () in
-    let drawing_area = mmlwidget#get_drawing_area in
-    let _ = drawing_area#misc#set_can_focus true in
-    let _ = drawing_area#misc#grab_focus () in
-    let logger =
-     fun l s -> prerr_endline ("TERM_EDITOR (" ^ string_of_int l ^ "): " ^ s) in
-    let tex_editor =
-     Mathml_editor.create
-      ~alt_lexer:true
-      ~dictionary_uri:"dictionary-cic.xml"
-      ~mml_uri:Mathml_editor.default_mathml_stylesheet_path
-(*CSC: togliere il path assoluto
-      ~tml_uri:Mathml_editor.default_tex_stylesheet_path
-*)
-      ~tml_uri:"/usr/share/editex/tml-litex.xsl"
-      ~log:logger
-    in
-    let _ =
-     (new GObj.event_ops mmlwidget#coerce#as_widget)#connect#button_press
-      ~callback:(fun _ -> drawing_area#misc#grab_focus () ; true) in
-    let _ =
-     (new GObj.event_ops drawing_area#coerce#as_widget)#connect#focus_in
-       ~callback:
-         (fun _ ->
-           mmlwidget#freeze ;
-           Mathml_editor.cursor_show ~editor:tex_editor ;
-           mmlwidget#thaw ;
-           true) in
-    let _ =
-     (new GObj.event_ops drawing_area#coerce#as_widget)#connect#focus_out
-       ~callback:
-         (fun _ ->
-           mmlwidget#freeze ;
-           Mathml_editor.cursor_hide ~editor:tex_editor ;
-           mmlwidget#thaw ;
-           true) in
-    let _ = Mathml_editor.push tex_editor '$' in
-    let dom_tree = Mathml_editor.get_mml tex_editor in
-    let _ = mmlwidget#load_doc dom_tree in
-    let _ = 
-     drawing_area#event#connect#key_press
-      (function e ->
-        let key = GdkEvent.Key.keyval e in
-         mmlwidget#freeze ;
-         if
-          key >= 32 && key < 256 &&
-           (GdkEvent.Key.state e = [] || GdkEvent.Key.state e = [`SHIFT])
-         then
-          Mathml_editor.push tex_editor (Char.chr key)
-         else if key = GdkKeysyms._u then
-          begin
-           mmlwidget#freeze ;
-           ignore (Mathml_editor.freeze tex_editor) ;
-           Mathml_editor.reset tex_editor ;
-           Mathml_editor.push tex_editor '$' ;
-           ignore (Mathml_editor.thaw tex_editor) ;
-           mmlwidget#thaw
-          end
-         else if key = GdkKeysyms._BackSpace then
-          Mathml_editor.drop tex_editor
-           (List.mem `CONTROL (GdkEvent.Key.state e)) ;
-         let adj = mmlwidget#get_hadjustment in
-          mmlwidget#thaw ;
-          adj#set_value adj#upper ;
-          false) in
-    let id_to_uris =
-     match share_id_to_uris_with with
-        None -> ref empty_id_to_uris
-      | Some obj -> obj#id_to_uris
-    in
-    let _ =
-     match isnotempty_callback with
-        None -> ()
-      | Some callback ->
-         (* This approximation of the test that checks if the tree is empty *)
-         (* is utterly unprecise. We assume a tree to look as an empty tree *)
-         (* iff it is made of just one node m:mtext (which should be the    *)
-         (* cursor).                                                        *)
-         let is_empty_tree () =
-          let root = dom_tree#get_documentElement in
-           match root#get_firstChild with
-              None -> true
-            | Some n -> n#get_nodeName#to_string = "m:mtext"
-         in
-          dom_tree#addEventListener
-           ~typ:(Gdome.domString "DOMSubtreeModified")
-           ~listener:
-             (Gdome.eventListener
-               (function _ -> callback (not (is_empty_tree ()))))
-           ~useCapture:false
-    in
-     object(self)
-      method coerce = mmlwidget#coerce
-      method reset =
-       mmlwidget#freeze ;
-       ignore (Mathml_editor.freeze tex_editor) ;
-       Mathml_editor.reset tex_editor ;
-       Mathml_editor.push tex_editor '$' ;
-       ignore (Mathml_editor.thaw tex_editor) ;
-       mmlwidget#thaw
-
-      (* The input of set_term is unquoted *)
-      method set_term txt =
-       mmlwidget#freeze ;
-       ignore (Mathml_editor.freeze tex_editor) ;
-       self#reset ;
-       let txt' = Str.global_replace (Str.regexp "_") "\\_" txt in
-        String.iter (fun ch -> Mathml_editor.push tex_editor ch) txt' ;
-        ignore (Mathml_editor.thaw tex_editor) ;
-        mmlwidget#thaw
-
-      (* get_as_string returns the unquoted string *)
-      method get_as_string =
-       let term = Mathml_editor.get_tex tex_editor in
-        Str.global_replace (Str.regexp "^\\$\\$?") ""
-         (Str.global_replace (Str.regexp "\\$\\$?$") ""
-           (Str.global_replace (Str.regexp "\\\\_") "_" term))
-
-      method get_metasenv_and_term ~context ~metasenv =
-       let name_context =
-        List.map
-         (function
-             Some (n,_) -> Some n
-           | None -> None
-         ) context
-       in
-prerr_endline ("###CSC: " ^ (Mathml_editor.get_tex tex_editor)) ;
-        let lexbuf = Lexing.from_string (Mathml_editor.get_tex tex_editor) in
-         let dom,mk_metasenv_and_expr =
-          TexCicTextualParserContext.main
-           ~context:name_context ~metasenv TexCicTextualLexer.token lexbuf
-         in
-          let id_to_uris',metasenv,expr =
-           Disambiguate'.disambiguate_input mqi_handle 
-            context metasenv dom mk_metasenv_and_expr ~id_to_uris:!id_to_uris
-          in
-           id_to_uris := id_to_uris' ;
-           metasenv,expr
-      method id_to_uris = id_to_uris
-   end
-
-   let term_editor = new term_editor_impl
-
-end
-;;
diff --git a/helm/gTopLevel/texTermEditor.mli b/helm/gTopLevel/texTermEditor.mli
deleted file mode 100644 (file)
index beb21ec..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-class type term_editor =
- object
-   method coerce : GObj.widget
-   (* get_as_string returns the unquoted string *)
-   method get_as_string : string
-   method get_metasenv_and_term :
-     context:Cic.context ->
-     metasenv:Cic.metasenv -> Cic.metasenv * Cic.term
-   method reset : unit
-   (* The input of set_term is unquoted *)
-   method set_term : string -> unit
-   method id_to_uris : Disambiguate.domain_and_interpretation ref
- end
-
-val empty_id_to_uris : Disambiguate.domain_and_interpretation
-
-module Make (C : Disambiguate.Callbacks) :
-   sig
-    val term_editor :
-     MQIConn.handle ->
-     ?packing:(GObj.widget -> unit) ->
-     ?width:int ->
-     ?height:int ->
-     ?isnotempty_callback:(bool -> unit) ->
-     ?share_id_to_uris_with:term_editor ->
-     unit -> term_editor
-   end
diff --git a/helm/gTopLevel/xml2Gdome.ml b/helm/gTopLevel/xml2Gdome.ml
deleted file mode 100644 (file)
index c4e9445..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let document_of_xml (domImplementation : Gdome.domImplementation) strm =
- let module G = Gdome in
- let module X = Xml in
-  let root_name,root_attributes,root_content =
-   ignore (Stream.next strm) ; (* to skip the <?xml ...?> declaration *)
-   ignore (Stream.next strm) ; (* to skip the DOCTYPE declaration *)
-   match Stream.next strm with
-      X.Empty(n,l) -> n,l,[<>]
-    | X.NEmpty(n,l,c) -> n,l,c
-    | _ -> assert false
-  in
-   let document =
-    domImplementation#createDocument ~namespaceURI:None
-     ~qualifiedName:(Gdome.domString root_name) ~doctype:None
-   in
-   let rec aux (node : Gdome.node) =
-    parser
-      [< 'X.Str a ; s >] ->
-        let textnode = document#createTextNode ~data:(Gdome.domString a) in
-         ignore (node#appendChild ~newChild:(textnode :> Gdome.node)) ;
-         aux node s
-    | [< 'X.Empty(n,l) ; s >] ->
-        let element = document#createElement ~tagName:(Gdome.domString n) in
-         List.iter (function (n,v) -> element#setAttribute
-          ~name:(Gdome.domString n) ~value:(Gdome.domString v)) l ;
-         ignore
-          (node#appendChild ~newChild:(element : Gdome.element :> Gdome.node)) ;
-         aux node s
-    | [< 'X.NEmpty(n,l,c) ; s >] ->
-        let element = document#createElement ~tagName:(Gdome.domString n) in
-         List.iter
-          (function (n,v) ->
-            element#setAttribute ~name:(Gdome.domString n)
-             ~value:(Gdome.domString v)
-          ) l ;
-         ignore (node#appendChild ~newChild:(element :> Gdome.node)) ;
-         aux (element :> Gdome.node) c ;
-         aux node s
-    | [< >] -> ()
-   in
-    let root = document#get_documentElement in
-     List.iter (function (n,v) -> root#setAttribute
-      ~name:(Gdome.domString n) ~value:(Gdome.domString v)) root_attributes ;
-     aux (root : Gdome.element :> Gdome.node) root_content ;
-     document
-;;
diff --git a/helm/gTopLevel/xml2Gdome.mli b/helm/gTopLevel/xml2Gdome.mli
deleted file mode 100644 (file)
index 45d0e95..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val document_of_xml :
-  Gdome.domImplementation -> Xml.token Stream.t -> Gdome.document
diff --git a/helm/graphs/tools/.cvsignore b/helm/graphs/tools/.cvsignore
deleted file mode 100644 (file)
index a9c3ad4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-*.cm[iaox]
-*.[ao]
-*.cmxa
-drawGraph
-uriSetQueue
-drawGraph.opt
-uriSetQueue.opt
diff --git a/helm/graphs/tools/Makefile b/helm/graphs/tools/Makefile
deleted file mode 100644 (file)
index cbcc169..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-PID=
-DOT=../gv1.7c/bin/dot
-SED=sed "s/font-family:Times;//g"
-
-REQUIRES = http
-PREDICATES = mt
-OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)" -thread
-OCAMLC = ocamlfind ocamlc $(OCAMLOPTIONS)
-OCAMLOPT = ocamlfind ocamlopt $(OCAMLOPTIONS)
-
-#OBJS=prova.$(PID).svg prova.$(PID).ps prova.$(PID).gif prova.$(PID).ismap prova.$(PID).imap prova.$(PID).html
-OBJS=prova.$(PID).gif prova.$(PID).ismap prova.$(PID).html
-
-all: $(OBJS)
-
-uriSetQueue: uriSetQueue.ml
-       $(OCAMLC) -linkpkg -o $@ $<
-uriSetQueue.opt: uriSetQueue.ml
-       $(OCAMLOPT) -linkpkg -o $@ $<
-
-drawGraph: drawGraph.ml
-       $(OCAMLC) -package "unix netclient" -linkpkg -o $@ $<
-drawGraph.opt: drawGraph.ml
-       $(OCAMLOPT) -package "unix netclient" -linkpkg -o $@ $<
-
-prova.$(PID).dot: prova0.$(PID).dot
-       csplit --prefix=xx.$(PID) prova0.$(PID).dot 1 2 `expr \`wc -l prova0.$(PID).dot | sed 's/\([0123456789]\+\) prova0.$(PID).dot/\1/'\` + 1`
-       ./simplify_deps/simplify_deps.opt < xx.$(PID)02 > xx.$(PID)02n
-       cat xx.$(PID)01 xx.$(PID)02n xx.$(PID)03 > prova.$(PID).dot
-
-prova.$(PID).svg: prova.$(PID).dot
-       $(DOT) -Tsvg prova.$(PID).dot | $(SED) > prova.$(PID).svg
-
-prova.$(PID).ps: prova.$(PID).dot
-       $(DOT) -Tps prova.$(PID).dot > prova.$(PID).ps
-
-prova.$(PID).imap: prova.$(PID).dot
-       $(DOT) -Timap prova.$(PID).dot > prova.$(PID).imap
-
-prova.$(PID).gif: prova.$(PID).dot
-       $(DOT) -Tgif prova.$(PID).dot > prova.$(PID).gif
-
-prova.$(PID).ismap: prova.$(PID).dot
-       $(DOT) -Tismap prova.$(PID).dot > prova.$(PID).ismap
-
-prova.$(PID).html: prova.$(PID).ismap
-       cat xx.$(PID)00 prova.$(PID).ismap | ./mk_html.pl $(PID) > prova.$(PID).html
-
-clean:
-       rm -f $(OBJS) prova.$(PID).dot xx.$(PID)00 xx.$(PID)01 xx.$(PID)02 xx.$(PID)02n xx.$(PID)03 log.$(PID)
diff --git a/helm/graphs/tools/drawGraph.ml b/helm/graphs/tools/drawGraph.ml
deleted file mode 100644 (file)
index b7abfe9..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-open Printf;;
-
-let debug = true;;
-let debug_print s = if debug then prerr_endline s;;
-
-let daemon_name = "Draw Graph";;
-let default_port = 48083;;
-let default_dir = "/projects/helm/graphs/tools";;
-let port_env_var = "DRAW_GRAPH_PORT";;
-let dir_env_var = "DRAW_GRAPH_DIR";;
-
-let wget url fname =
-  prerr_endline (sprintf "DEBUG: wgetting url '%s'" url);
-  let data = Http_client.Convenience.http_get url in
-  let oc = open_out fname in
-  output_string oc data;
-  close_out oc
-;;
-
-let port =
-  try
-    int_of_string (Sys.getenv port_env_var)
-  with
-  | Not_found -> default_port
-  | Failure "int_of_string" ->
-      prerr_endline "Warning: invalid port, reverting to default";
-      default_port
-in
-let dir = try Sys.getenv dir_env_var with Not_found -> default_dir in
-let errmsg =
-  sprintf
-"<html>
- <head>
-  <title>Graph: error</title>
- </head>
- <body>
-  <h1>Error occured while drawing graph!<br />Please report the occured problem</h1>
-  <h2>%s</h2>
- </body>
-</html>"
-in
-let string_of_exit_status = function
-  | Unix.WEXITED n -> sprintf "Process exited with code %d" n
-  | Unix.WSIGNALED n -> sprintf "Process killed by signal %d" n
-  | Unix.WSTOPPED n -> sprintf "Process stopped by signal %d" n
-in
-let callback (req: Http_types.request) outchan =
-  try
-    (match req#path with
-    | "/draw" ->
-        let url = req#param "url" in
-        let pid = Unix.getpid () in
-        wget (sprintf "%s&param.PID=%d" url pid) (sprintf "prova0.%d.dot" pid);
-        (match Unix.system (sprintf "make PID=%d > log.%d" pid pid) with
-        | Unix.WEXITED 0 ->
-            debug_print "HTML successfully generated";
-            Http_daemon.respond_file (sprintf "prova.%d.html" pid) outchan
-        | status ->
-            debug_print "Failure, sending error message";
-            let res =
-              new Http_response.response
-                ~body:
-                  (errmsg ("Exit status: " ^ (string_of_exit_status status)))
-                ()
-            in
-            Http_daemon.respond_with res outchan)
-    | "/get_gif" ->
-        let pid = req#param "pid" in
-        Http_daemon.respond_file (sprintf "prova.%s.gif" pid) outchan;
-        ignore (Unix.system (
-          sprintf "make PID=%s clean; rm -f prova0.%s.dot" pid pid))
-    | invalid_request ->
-        Http_daemon.respond_error ~status:(`Client_error `Bad_request) outchan)
-  with
-  | Http_types.Param_not_found attr_name ->
-      Http_daemon.respond_error
-        ~status:(`Client_error `Bad_request)
-        ~body:(sprintf "Parameter '%s' is missing" attr_name)
-        outchan
-in
-Sys.chdir dir;
-printf "%s started and listening on port %d\n" daemon_name port;
-printf "current directory is %s\n" (Sys.getcwd ());
-flush stdout;
-Http_daemon.start' ~port callback;
-printf "%s is terminating, bye!\n" daemon_name
-
diff --git a/helm/graphs/tools/draw_graph.cgi b/helm/graphs/tools/draw_graph.cgi
deleted file mode 100755 (executable)
index e807d97..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/perl
-
-use HTTP::Daemon;
-use HTTP::Status;
-use HTTP::Request;
-use LWP::UserAgent;
-use URI::Escape;
-use CGI;
-use FindBin;
-
-chdir $FindBin::Bin; # chdir to the directory of this perl script
-
-$drawgraphport = $ENV{'DRAW_GRAPH_PORT'} || $drawgraphport;
-
-my $d = new HTTP::Daemon LocalPort => $drawgraphport
- or die "Error: port $drawgraphport not available.";
-print "Please contact me at: <URL:", $d->url, ">\n";
-
-$SIG{CHLD} = "IGNORE"; # do not accumulate defunct processes
-
-while (my $c = $d->accept) {
- if (fork() == 0) {
-    while (my $r = $c->get_request) {
-        if ($r->method eq 'GET' && $r->url->path eq "/draw") {
-            my $http_query = $r->url->equery;
-            my $cgi = new CGI("$http_query");
-            my $url = $cgi->param('url');
-            $url = $url.'&param.PID='.$$;
-            print "URL: $url\n";
-
-            my $ua = LWP::UserAgent->new;
-            my $request = HTTP::Request->new(GET => "$url");
-            my $response = $ua->request($request, "prova0.$$.dot");
-
-            if (system("make PID=$$ > log.$$") == 0) {
-               $c->send_file_response("prova.$$.html");
-            } else {
-                $c->send_error(RC_INTERNAL_SERVER_ERROR);
-            }
-        } elsif ($r->method eq 'GET' && $r->url->path eq "/get_gif") {
-            my $http_query = $r->url->equery;
-            my $cgi = new CGI("$http_query");
-            my $pid = $cgi->param('pid');
-            print "Returning GIF: $pid\n";
-            $c->send_file_response("prova.$pid.gif");
-            system("make PID=$pid clean ; rm -f prova0.$pid.dot");
-        } elsif ($r->method eq 'GET' && $r->url->path eq "/help"){
-           print "Help requested!\n";
-           my $response = new HTTP::Response;
-           $response->content("Graph Drawer Version: ???");
-           $c->send_response($response);
-        } else {
-            $c->send_error(RC_FORBIDDEN)
-        }
-    }
-    $c->close;
-    undef($c);
-    exit;
- } # fork
-}
diff --git a/helm/graphs/tools/mk_html.pl b/helm/graphs/tools/mk_html.pl
deleted file mode 100755 (executable)
index 6ca4d0b..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/perl
-
-use URI::Escape;
-
-print <<EOT;
-<?xml version="1.0"?>
-<html>
- <head>
-  <title>Graph</title>
- </head>
- <body bgcolor="white" onLoad="window.focus()">
-  <script>
-<![CDATA[
-   // NOTE: getParam will be defined during the application
-   // of the next stylesheet in the stylesheet chain
-   var draw_graphURL = unescape(getParam("param.draw_graphURL"));
-   document.write('<img border="false" src="' + draw_graphURL + 'get_gif?pid=$ARGV[0]" usemap="#graphe">');
-]]>
-  </script>
-  <map name="graphe">
-EOT
-
-my $count = 0;
-
-while (<STDIN>) {
- $count++;
- my (undef,$point1,$point2,$uri) = split;
- my ($point1x,$point1y) = split /,/,$point1;
- my ($point2x,$point2y) = split /,/,$point2;
- $point1y = substr($point1y,0,-1);
- $point2y = substr($point2y,0,-1);
- $point1x = substr($point1x,1);
- $point2x = substr($point2x,1);
-
- print <<EOT;
-   <area shape="rect" href="$uri" coords="$point1x,$point2y,$point2x,$point1y" />
-EOT
-}
-
-print <<EOT;
-   </map>
-  <script>
-<![CDATA[
-   document.write('</img>');
-]]>
-  </script>
- </body>
-</html>
-EOT
diff --git a/helm/graphs/tools/simplify_deps/.cvsignore b/helm/graphs/tools/simplify_deps/.cvsignore
deleted file mode 100644 (file)
index 51af834..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-simplify_deps.cmi
-simplify_deps.cmo
-simplify_deps.cmx
-simplify_deps
-simplify_deps.opt
diff --git a/helm/graphs/tools/simplify_deps/Makefile b/helm/graphs/tools/simplify_deps/Makefile
deleted file mode 100644 (file)
index 7395c8c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-OBJS = simplify_deps simplify_deps.opt
-
-all: $(OBJS)
-
-simplify_deps: simplify_deps.ml
-       ocamlfind ocamlc -package str -linkpkg simplify_deps.ml -o simplify_deps
-
-simplify_deps.opt: simplify_deps.ml
-       ocamlfind ocamlopt -package str -linkpkg simplify_deps.ml -o simplify_deps.opt
-
-clean:
-       rm -f $(OBJS) simplify_deps.cm[iox] simplify_deps.o
diff --git a/helm/graphs/tools/simplify_deps/simplify_deps.ml b/helm/graphs/tools/simplify_deps/simplify_deps.ml
deleted file mode 100644 (file)
index 9b0fb00..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-type node =
- Node of string * node list ref (* label, children *)
-
-let debug = false;;
-
-(************************************************)
-(*      SIMPLIFICATION AND PRETTY-PRINTING      *)
-(************************************************)
-
-let reachable target source_arcs =
- let rec find s =
-  if s = target then true
-  else
-   let Node (_,arcs) = s in
-    List.fold_left (fun i n -> i or find n) false !arcs
- in
-  List.fold_left
-   (fun i n ->
-     i or
-      (if n = target then
-        (* this is the arc we would like to get rid of *)
-        false
-       else
-        find n
-      )
-   ) false source_arcs
-;;
-
-let consider_arc (source,target,rest) =
- let Node (source_name,source_arcs) = source in
- let Node (target_name,_) = target in
-  if not (reachable target !source_arcs) then
-   print_endline (source_name ^ " -> " ^ target_name ^ rest ^ ";")
-  else
-   if debug then
-    print_endline (source_name ^ " -> " ^ target_name ^ " [color=green];")
-;;
-
-let simplify_deps_and_output_them =
- List.iter consider_arc
-;;
-
-(************************************************)
-(*                   PARSING                    *)
-(************************************************)
-
-let nodes = ref [];;
-let arcs  = ref [];;  (* (source,target) *)
-
-let search_node s =
- List.find (function Node (s',_) -> s' = s) !nodes
-;;
-
-let parse () =
- try
-  while true do
-   let line = read_line () in
-    if Str.string_match (Str.regexp " \\([^ ]*\\) -> \\([^ ;]*\\)\\(\\( \\[.*\\]\\)?\\);") line 0 then
-     let source = Str.matched_group 1 line in
-     let target = Str.matched_group 2 line in
-      begin
-       if source <> target then
-        (* not a self loop *)
-        let rest   = Str.matched_group 3 line in
-         let tar =
-           try
-                 search_node target
-           with
-            Not_found ->
-                  let tar = Node (target,ref []) in
-                   nodes := tar :: !nodes ;
-                   tar
-         in
-          let sou =
-           try
-            let sou = search_node source in
-             let Node (_,ts) = sou in
-              ts := tar::!ts ;
-                   sou
-           with
-            Not_found ->
-             let sou = Node (source,ref [tar]) in
-              nodes := sou :: !nodes ;
-                   sou
-          in
-           arcs := (sou,tar,rest)::!arcs
-      end
-    else
-     print_endline line
-  done
- with
-  End_of_file -> ()
-;;
-
-(************************************************)
-(*                     MAIN                     *)
-(************************************************)
-
-let _ =
- parse () ;
- simplify_deps_and_output_them !arcs
-;;
diff --git a/helm/graphs/tools/uriSetQueue.ml b/helm/graphs/tools/uriSetQueue.ml
deleted file mode 100644 (file)
index 12b7e91..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let debug = true;;
-let debug_print s = if debug then prerr_endline s;;
-Http_common.debug := debug;;
-
-open Printf;;
-
-let daemon_name = "Uri Set Queue";;
-let default_port = 48082;;
-let port_env_var = "URI_SET_QUEUE_PORT";;
-
-module OrderedUri: Set.OrderedType with type t = string =
-  struct
-    type t = string
-    let compare = compare
-  end
-module UriSet = Set.Make (OrderedUri)
-type uri_queue = {
-  mutable size: int;
-  mutable overflowed: bool;
-  uris: string Queue.t;
-  mutable olduris: UriSet.t;
-}
-  (** raised when a queue is accessed before being defined *)
-exception Queue_not_found of int;;
-  (** global uri_queue, used by all children *)
-let uri_queue = {
-  size = 0; overflowed = false; uris = Queue.create (); olduris = UriSet.empty
-};;
-let (get_queue, add_queue, remove_queue) =
-  let uri_queues = Hashtbl.create 17 in
-  ((fun pid -> (* get_queue *)
-    try
-      Hashtbl.find uri_queues pid
-    with Not_found -> raise (Queue_not_found pid)),
-  (fun pid size ->  (* add_queue *)
-    Hashtbl.replace
-      uri_queues
-      pid
-      { size = size; overflowed = false;
-        uris = Queue.create (); olduris = UriSet.empty }),
-  (fun pid -> (* remove_queue *)
-    try
-      Hashtbl.remove uri_queues pid
-    with Not_found -> raise (Queue_not_found pid)))
-;;
-
-exception Found;;
-let queue_mem item queue =  (* mem function over queues *)
-  try
-    Queue.iter (fun e -> if item = e then raise Found) queue;
-    false
-  with Found -> true
-;;
-
-let port =
-  try
-    int_of_string (Sys.getenv port_env_var)
-  with
-  | Not_found -> default_port
-  | Failure "int_of_string" ->
-      prerr_endline "Warning: invalid port, reverting to default";
-      default_port
-in
-let callback (req: Http_types.request) outchan =
-  try
-    let res = new Http_response.response () in
-    res#addBasicHeaders;
-    res#setContentType "text/xml";
-    (match req#path with
-
-    | "/add_if_not_in" ->
-        let (uri, pid) = (req#param "uri", int_of_string (req#param "PID")) in
-        debug_print (sprintf "Adding uri '%s' to queue '%d'" uri pid);
-        let queue = get_queue pid in
-        let result =
-          if (Queue.length queue.uris) + (UriSet.cardinal queue.olduris) >=
-             queue.size
-          then
-            begin (* overflow! *)
-              queue.overflowed <- true;
-              debug_print "Answer: not_added_because_already_too_many";
-              "not_added_because_already_too_many"
-            end else begin  (* there's room for another uri *)
-              if (queue_mem uri queue.uris) || (UriSet.mem uri queue.olduris)
-              then
-                begin (* url already in *)
-                  debug_print "Answer: already_in";
-                  "already_in"
-                end else begin (* uri not in *)
-                  Queue.add uri queue.uris;
-                  debug_print "Answer: added";
-                  "added"
-                end
-            end
-        in
-        res#setBody (sprintf "<?xml version=\"1.0\"?>\n<%s/>\n" result);
-        if debug then res#serialize stderr;
-        Http_daemon.respond_with res outchan
-
-    | "/is_overflowed" ->
-        let pid = int_of_string (req#param "PID") in
-        let queue = get_queue pid in
-        let result = string_of_bool (queue.overflowed) in
-        debug_print (sprintf "%d queue is_overflowed = %s" pid result);
-        res#setBody (sprintf "<?xml version=\"1.0\"?>\n<%s/>\n" result);
-        if debug then res#serialize stderr;
-        Http_daemon.respond_with res outchan
-
-    | "/set_uri_set_size" ->
-        let (pid, size) =
-          (int_of_string (req#param "PID"), int_of_string (req#param "size"))
-        in
-        debug_print (sprintf "Setting size '%d' for queue '%d'" size pid);
-        (try
-          let queue = get_queue pid in
-          queue.size <- size;
-        with Queue_not_found p ->
-          assert (p = pid);
-          add_queue pid size);
-        res#setBody "<?xml version=\"1.0\"?>\n<done/>\n";
-        if debug then res#serialize stderr;
-        Http_daemon.respond_with res outchan
-
-    | "/get_next" ->
-        let pid = int_of_string (req#param "PID") in
-        debug_print (sprintf "Getting next uri from queue '%d'" pid);
-        let queue = get_queue pid in
-        let element = (* xml response's root element *)
-          try
-            let uri = Queue.take queue.uris in
-            queue.olduris <- UriSet.add uri queue.olduris;
-            sprintf
-              "<%suri value=\"%s\"/>"
-              (if queue.overflowed then "marked_" else "")
-              uri
-          with Queue.Empty -> "<empty/>"
-        in
-        res#setBody ("<?xml version=\"1.0\"?>\n" ^ element ^ "\n");
-        if debug then res#serialize stderr;
-        Http_daemon.respond_with res outchan
-
-    | "/reset_to_empty" ->
-        let pid = int_of_string (req#param "PID") in
-        remove_queue pid;
-        debug_print (sprintf "Resetting queue '%d'" pid);
-        res#setBody "<?xml version=\"1.0\"?>\n<done/>\n";
-        if debug then res#serialize stderr;
-        Http_daemon.respond_with res outchan
-
-    | invalid_request ->
-        debug_print ("Invalid request received");
-        Http_daemon.respond_error ~status:(`Client_error `Bad_request) outchan);
-        prerr_endline "Request done!\n"
-  with
-  | Http_types.Param_not_found attr_name ->
-      Http_daemon.respond_error
-        ~status:(`Client_error `Bad_request)
-        ~body:(sprintf "Parameter '%s' is missing" attr_name)
-        outchan
-  | Failure "int_of_string" ->  (* error in converting some paramters *)
-      Http_daemon.respond_error ~status:(`Client_error `Bad_request) outchan
-  | Queue_not_found queue_name ->
-      Http_daemon.respond_error
-        ~status:(`Client_error `Bad_request)
-        ~body:(sprintf "Queue '%d' is not defined" queue_name)
-        outchan
-in
-
-printf "%s started and listening on port %d\n" daemon_name port;
-flush stdout;
-Http_daemon.start' ~port ~mode:`Thread callback;
-printf "%s is terminating, bye!\n" daemon_name
-
diff --git a/helm/graphs/tools/uri_set_queue.cgi b/helm/graphs/tools/uri_set_queue.cgi
deleted file mode 100755 (executable)
index 6a5d16a..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-#!/usr/bin/perl
-
-use HTTP::Daemon;
-use HTTP::Status;
-use HTTP::Response;
-use CGI;
-
-$urisetqueueport = $ENV{'URI_SET_QUEUE_PORT'} || $urisetqueueport;
-
-my $d = new HTTP::Daemon LocalPort => $urisetqueueport
- or die "Error: port $urisetqueueport not available.";
-print "Please contact me at: <URL:", $d->url, ">\n";
-
-$SIG{CHLD} = "IGNORE"; # do not accumulate defunct processes
-
-my %uri_sets;
-my %uri_queues;
-my %overflowed;
-my %size;
-
-#NOT REENTRANT: CAN NOT FORK DUE TO THE GLOBAL VARIABLES %uri_sets & ...
-#HENCE, THE "PID" ARGUMENT OF EVERY REQUEST MUST IDENTIFY THE SET OF URI
-#IT WANTS TO WORK WITH. MOREOVER, EVERY CLIENT MUST WORK WITH A DIFFERENT SET
-#OF URI, I.E. EVERY PID MUST BE UNIQUE.
-
-#CSC: WHAT IF THE CLIENTS ARE ON DIFFERENT MACHINES AND HAVE THE SAME PID?
-
-while (my $c = $d->accept) {
-    while (my $r = $c->get_request) {
-        if ($r->method eq 'GET' and $r->url->path eq '/add_if_not_in') {
-            my $http_query = $r->url->equery;
-            my $cgi = new CGI("$http_query");
-            my $uri = $cgi->param('uri');
-            my $pid = $cgi->param('PID');
-           print "$pid: ";
-            print(@{$uri_queues{$pid}} + 0);
-            print "/";
-            my $tot = keys(%{$uri_sets{$pid}}) + 0;
-            $tot .= "*" if defined($overflowed{$pid});
-           print "$tot $uri: ";
-
-            my $res;
-           if (!(defined($uri_sets{$pid}->{$uri}))) {
-                if ($tot + 1 > $size{$pid}) {
-                   $res = "not_added_because_already_too_many";
-                   $overflowed{$pid} = 1;
-                } else {
-                  $uri_sets{$pid}->{$uri} = 1;
-                   push @{$uri_queues{$pid}},$uri;
-                  $res = "added";
-                }
-            } else {
-               $res = "already_in";
-            }
-           print $res."\n";
-
-           my $response = new HTTP::Response;
-            $response->content("<?xml version=\"1.0\"?>\n<$res/>\n");
-           $response->content_type('text/xml');
-            $c->send_response($response);
-        } elsif ($r->method eq 'GET' and $r->url->path eq '/is_overflowed') {
-            my $http_query = $r->url->equery;
-            my $cgi = new CGI("$http_query");
-            my $pid = $cgi->param('PID');
-           print "$pid: ";
-            print(@{$uri_queues{$pid}} + 0);
-            print "/";
-           print(keys(%{$uri_sets{$pid}}) + 0);
-            print "*" if defined($overflowed{$pid});
-            my $res = defined($overflowed{$pid}) ? "true" : "false";
-            print " is_overflowed: $res\n";
-           my $response = new HTTP::Response;
-            $response->content("<?xml version=\"1.0\"?>\n<$res/>\n");
-           $response->content_type('text/xml');
-            $c->send_response($response);
-        } elsif ($r->method eq 'GET' and $r->url->path eq '/set_uri_set_size') {
-            my $http_query = $r->url->equery;
-            my $cgi = new CGI("$http_query");
-            my $pid = $cgi->param('PID');
-            my $size = $cgi->param('size');
-           print "$pid: size := $size\n";
-            $size{$pid} = $size;
-           my $response = new HTTP::Response;
-            $response->content("<?xml version=\"1.0\"?>\n<done/>\n");
-           $response->content_type('text/xml');
-            $c->send_response($response);
-        } elsif ($r->method eq 'GET' and $r->url->path eq '/get_next') {
-            my $http_query = $r->url->equery;
-            my $cgi = new CGI("$http_query");
-            my $pid = $cgi->param('PID');
-           print "$pid: ";
-            print(@{$uri_queues{$pid}} + 0);
-            print "/";
-           print(keys(%{$uri_sets{$pid}}) + 0);
-            print "*" if defined($overflowed{$pid});
-            print " ";
-
-            my $elem = shift @{$uri_queues{$pid}};
-            my $mark = $overflowed{$pid};
-
-           my $response = new HTTP::Response;
-            my $xml_header = "<?xml version=\"1.0\"?>\n";
-            if (!defined($elem)) {
-              print "is now empty\n";
-               $response->content("$xml_header<empty/>\n");
-            } elsif ($mark == 1) {
-              print "$elem (marked) removed\n";
-               $response->content("$xml_header<marked_uri value=\"$elem\"/>\n");
-            } else {
-              print "$elem removed\n";
-               $response->content("$xml_header<uri value=\"$elem\"/>\n");
-            }
-           $response->content_type('text/xml');
-            $c->send_response($response);
-        } elsif ($r->method eq 'GET' and $r->url->path eq '/reset_to_empty') {
-           my $pid = $r->url->query;
-           $pid =~ s/[^=]*=//;
-            # Next loop for debugging purposes only
-            my $count = 1;
-            while (my $e = shift @{$uri_queues{$pid}}) {
-             print "#$count $e forced out of the set\n";
-             $count++;
-            }
-           print "************\nThe URI set $pid is now empty again\n";
-           delete($uri_sets{$pid});
-            delete($overflowed{$pid});
-            delete($size{$pid});
-           my $response = new HTTP::Response;
-            $response->content("<?xml version=\"1.0\"?>\n<done/>\n");
-           $response->content_type('text/xml');
-            $c->send_response($response);
-        } elsif ($r->method eq 'GET' && $r->url->path eq "/help"){
-           print "Help requested!\n";
-          my $response = new HTTP::Response;
-           $response->content("URI-Set (Queue) Version: ???");
-           $c->send_response($response);
-        } else {
-            $c->send_error(RC_FORBIDDEN)
-        }
-    }
-    $c->close;
-    undef($c);
-}
diff --git a/helm/gtkmathview-bonobo/.cvsignore b/helm/gtkmathview-bonobo/.cvsignore
deleted file mode 100644 (file)
index 1d6c13d..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-aclocal.m4
-config.h.in
-Makefile.in
-autom4te.cache
-config.guess
-config.sub
-install-sh
-mkinstalldirs
-ltmain.sh
-configure
-depcomp
-Makefile
-config.h
-config.log
-config.status
-libtool
-stamp-h1
-`
diff --git a/helm/gtkmathview-bonobo/AUTHORS b/helm/gtkmathview-bonobo/AUTHORS
deleted file mode 100644 (file)
index c4b11a9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Luca Padovani <lpadovan@cs.unibo.it>
-Pouria Masoudi <pmasoudi@cs.unibo.it>
diff --git a/helm/gtkmathview-bonobo/ChangeLog b/helm/gtkmathview-bonobo/ChangeLog
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/gtkmathview-bonobo/Makefile.am b/helm/gtkmathview-bonobo/Makefile.am
deleted file mode 100644 (file)
index 38452e2..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-EXTRA_DIST = BUGS HISTORY LICENSE ANNOUNCEMENT CONTRIBUTORS config.h.in
-SUBDIRS = src
-CLEANFILES = core *.log *.eps
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA=gtkmathview-bonobo.pc
-
-backup:
-       tar cvfz ../@PACKAGE@-@VERSION@-`date|tr ' ' '_'|tr ':' '_'`.tar.gz .
-
-cleanbak:
-       -rm -f `find . -name "*~"`
-
-lc:
-       @( \
-       CFILES=`find . -name "*.c"`; \
-       HFILES=`find . -name "*.h"`; \
-       wc -l $$CFILES $$HFILES | tail -n 1 \
-       )
-
diff --git a/helm/gtkmathview-bonobo/NEWS b/helm/gtkmathview-bonobo/NEWS
deleted file mode 100644 (file)
index bbb2945..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-Tue, 15 Jul 2003 15:56:54 +0200
-
-       o The project formally starts
-
diff --git a/helm/gtkmathview-bonobo/README b/helm/gtkmathview-bonobo/README
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/gtkmathview-bonobo/configure.ac b/helm/gtkmathview-bonobo/configure.ac
deleted file mode 100644 (file)
index 6f3c159..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_INIT(gtkmathview-bonobo, [0.0.1])
-AC_CONFIG_SRCDIR(src/GNOME_GtkMathView.server.in)
-AM_INIT_AUTOMAKE($AC_PACKAGE_NAME, $AC_PACKAGE_VERSION)
-
-PACKAGE=$PACKAGE_NAME
-VERSION=$PACKAGE_VERSION
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-
-GTKMATHVIEW_BONOBO_VERSION_INFO=`echo $VERSION | awk -F. '{ printf "%d:%d:%d", $1+$2, $3, $2 }'`
-AC_SUBST(GTKMATHVIEW_BONOBO_VERSION_INFO)
-
-AC_ARG_ENABLE(
-       profile,
-       [  --enable-profile[=ARG]  include profiling information [default=no]],
-       profile=$enableval,
-       profile=no
-)
-
-AC_ARG_ENABLE(
-       debug,
-       [  --enable-debug[=ARG]    include debugging debug [default=yes]],
-       enable_debug=$enableval,
-       enable_debug=yes
-)
-
-if test "x$enable_debug" = "xyes"; then
-   AC_DEFINE(ENABLE_DEBUG,,[Define to 1 if you want to enable validity checks while running])
-fi
-
-dnl AC_CONFIG_HEADERS([config.h])
-AM_CONFIG_HEADER(config.h)
-
-AH_TOP([
-/* This file is part of GtkMathView-Bonobo, an implementation of
- * some Bonobo interfaces for GtkMathView.
- * 
- * Copyright (C) 2003 Luca Padovani <lpadovan@cs.unibo.it>,
- *                    Pouria Masoudi <pmasoudi@cs.unibo.it>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * For more information, please visit the project's home page
- * http://helm.cs.unibo.it/gtkmathview-bonobo/
- * or send an email to <lpadovan@cs.unibo.it>
- */
-
-#ifndef config_h
-#define config_h
-])
-
-AH_BOTTOM([
-#endif /* config_h */
-])
-
-AC_PROG_CC
-AC_PROG_CXX
-AC_PROG_INSTALL
-AC_HEADER_STDC([])
-
-AC_SUBST(CFLAGS)
-AC_SUBST(CPPFLAGS)
-AC_SUBST(LDFLAGS)
-
-AM_PROG_LIBTOOL
-
-PKG_CHECK_MODULES(GTKMATHVIEW, gtkmathview >= 0.4.3)
-AC_SUBST(GTKMATHVIEW_CFLAGS)
-AC_SUBST(GTKMATHVIEW_LIBS)
-
-PKG_CHECK_MODULES(BONOBO, libbonobo-2.0)
-AC_SUBST(BONOBO_CFLAGS)
-AC_SUBST(BONOBO_LIBS)
-
-PKG_CHECK_MODULES(BONOBOUI, libbonoboui-2.0)
-AC_SUBST(BONOBOUI_CFLAGS)
-AC_SUBST(BONOBOUI_LIBS)
-
-AC_CONFIG_FILES([
- Makefile 
- src/Makefile
- src/GNOME_GtkMathView.server
-])
-AC_OUTPUT
diff --git a/helm/gtkmathview-bonobo/src/.cvsignore b/helm/gtkmathview-bonobo/src/.cvsignore
deleted file mode 100644 (file)
index 9cabbbc..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-GNOME_GtkMathView.server
-Makefile
-Makefile.in
-gtkmathview-bonobo.lo
diff --git a/helm/gtkmathview-bonobo/src/GNOME_GtkMathView.server.in b/helm/gtkmathview-bonobo/src/GNOME_GtkMathView.server.in
deleted file mode 100644 (file)
index 766d135..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<oaf_info>
-
-<oaf_server iid="OAFIID:GNOME_GtkMathView_Factory:@GTKMATHVIEW_BONOBO_INTERFACE_VERSION@" type="shlib"
-               location="@GTKMATHVIEW_BONOBO_LIB_LOCATION@">
-
-               <oaf_attribute name="repo_ids" type="stringv">
-                       <item value="IDL:GNOME/GenericFactory:1.0"/>
-               </oaf_attribute>
-
-               <oaf_attribute name="name" type="string" value="Gtk MathML Viewer Factory"/>
-</oaf_server>
-
-<oaf_server iid="OAFIID:GNOME_GtkMathView:0.4" type="factory" location="OAFIID:GtkMathView_Factory:0.4">
-
-               <oaf_attribute name="repo_ids" type="stringv">
-                       <item value="IDL:Bonobo/Control:1.0"/>
-                       <item value="IDL:Bonobo/Unkown:1.0"/>
-                       <item value="IDL:Bonobo/PersistStream:1.0"/>
-                       <item value="IDL:Bonobo/PersistFile:1.0"/>
-                       <item value="IDL:Bonobo/Persist:1.0"/>
-               </oaf_attribute>
-
-               <oaf_attribute name="name" type="string" value="GtkMathView"/>
-
-               <oaf_attribute name="description" type="string" value="GtkMathView"/>
-               <oaf_attribute name="bonobo:editable" type="boolean" value="false"/>
-               <oaf_attribute name="bonobo:supported_mime_types" type="stringv">
-                       <item value="text/xml"/>
-               </oaf_attribute>
-</oaf_server>
-
-</oaf_info>    
diff --git a/helm/gtkmathview-bonobo/src/Makefile.am b/helm/gtkmathview-bonobo/src/Makefile.am
deleted file mode 100644 (file)
index fa02add..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-lib_LTLIBRARIES = libgtkmathview-bonobo.la
-
-libgtkmathview_bonobo_la_LIBADD = $(GTKMATHVIEW_LIBS) $(BONOBOUI_LIBS) $(BONOBO_LIBS)
-libgtkmathview_bonobo_la_LDFLAGS = -version-info @GTKMATHVIEW_BONOBO_VERSION_INFO@
-
-libgtkmathview_bonobo_la_SOURCES = \
-  gtkmathview-bonobo.c
-
-pkginclude_HEADERS = \
-  gtkmathview-bonobo.h
-
-INCLUDES = \
-  $(BONOBOUI_CFLAGS) \
-  $(BONOBO_CFLAGS) \
-  $(GTKMATHVIEW_CFLAGS)
-
diff --git a/helm/gtkmathview-bonobo/src/gtkmathview-bonobo.c b/helm/gtkmathview-bonobo/src/gtkmathview-bonobo.c
deleted file mode 100644 (file)
index 3b24af7..0000000
+++ /dev/null
@@ -1,269 +0,0 @@
-
-#include <bonobo.h>
-
-#if 1
-#include <gtkmathview.h>
-#endif
-
-enum {
-  MATH_VIEW_WIDTH,
-  MATH_VIEW_HEIGHT,
-  MATH_VIEW_TOP_X,
-  MATH_VIEW_TOP_Y,
-  MATH_VIEW_TOP,
-  MATH_VIEW_FONT_SIZE,
-  MATH_VIEW_ANTI_ALIASING,
-  MATH_VIEW_TRANSPARENCY,
-  MATH_VIEW_VERBOSITY,
-  MATH_VIEW_FONT_MANAGER
-} math_args;
-
-
-/*static char *
-make_reg_id(const char *iid)
-{
-       char *id;
-       id = bonobo_activation_make_registration_id(iid,Display_String(gdk_display));
-       return id;
-}*/
-
-static void
-get_prop(BonoboPropertyBag     *bag,
-        BonoboArg      *arg,
-        guint          arg_id,
-        CORBA_Environment *ev,
-        gpointer       user_data)
-{
-  GtkMathView *math_view;
-
-  g_return_if_fail(GTK_IS_MATH_VIEW(user_data));
-
-  math_view = GTK_MATH_VIEW(user_data);
-
-  switch(arg_id)
-    {
-    case MATH_VIEW_WIDTH:
-      {
-       gint i = gtk_math_view_get_width(math_view);
-       g_assert(arg->_type == BONOBO_ARG_INT);
-       BONOBO_ARG_SET_INT(arg,i);
-      }
-      break;
-    case MATH_VIEW_HEIGHT:
-      {
-       guint i = gtk_math_view_get_height(math_view);
-                       
-       g_assert(arg->_type == BONOBO_ARG_INT);
-       BONOBO_ARG_SET_INT(arg,i);      
-      }
-      break;
-    case MATH_VIEW_TOP_X:
-      {
-       guint new_top_y,new_top_x;
-                       
-       g_assert(arg->_type == BONOBO_ARG_INT);
-       gtk_math_view_get_top(math_view,&new_top_x, &new_top_y);
-       BONOBO_ARG_SET_INT(arg,new_top_x);
-      }
-      break;
-    case MATH_VIEW_TOP_Y:
-      {
-       guint new_top_y,new_top_x;
-
-       g_assert(arg->_type == BONOBO_ARG_INT);
-       gtk_math_view_get_top(math_view,&new_top_x,&new_top_y);
-       BONOBO_ARG_SET_INT(arg,new_top_y);
-      }                
-      break;
-    case MATH_VIEW_FONT_SIZE:
-      {
-       guint i = gtk_math_view_get_font_size(math_view);
-       g_assert(arg->_type == BONOBO_ARG_INT);
-                       
-       BONOBO_ARG_SET_INT(arg,i);
-      }
-      break;
-    case MATH_VIEW_ANTI_ALIASING:
-      {
-       gboolean i = gtk_math_view_get_anti_aliasing(math_view);
-       g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
-                       
-       BONOBO_ARG_SET_BOOLEAN(arg,i);
-      }
-      break;
-    case MATH_VIEW_TRANSPARENCY:
-      {
-       gboolean i = gtk_math_view_get_transparency(math_view);
-       g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
-                       
-       BONOBO_ARG_SET_BOOLEAN(arg,i);
-      }
-      break;
-    case MATH_VIEW_VERBOSITY:
-      {
-       gint i = gtk_math_view_get_log_verbosity(math_view);
-       g_assert(arg->_type == BONOBO_ARG_INT);
-                       
-       BONOBO_ARG_SET_INT(arg,i);
-      }
-      break;
-    case MATH_VIEW_FONT_MANAGER:
-      {gint i = (gint) gtk_math_view_get_font_manager_type(math_view);
-      BONOBO_ARG_SET_INT(arg,i);
-      }
-      break;
-    default:
-      g_assert(FALSE);
-    }
-}
-
-static void
-set_prop(BonoboPropertyBag     *bag,
-        const BonoboArg        *arg,
-        guint          arg_id,
-        CORBA_Environment *ev,
-        gpointer       user_data)
-{
-  GtkMathView *math_view;
-
-  g_return_if_fail(GTK_IS_MATH_VIEW(user_data));
-
-  math_view = GTK_MATH_VIEW(user_data);
-
-  switch(arg_id)
-    {
-      /*case MATH_VIEW_WIDTH:
-       g_assert(arg->_type == BONOBO_ARG_INT);
-                       
-       guint i = gtk_math_view_set_width(math_view);
-       BONOBO_ARG_SET_INT(arg,i);
-       break;
-       case MATH_VIEW_HEIGHT:
-       g_assert(arg->_type == BONOBO_ARG_INT);
-                       
-       guint i = gtk_math_view_get_height(math_view);
-       BONOBO_ARG_SET_INT(arg,i);      
-       break;*/
-    case MATH_VIEW_TOP_X:
-      {
-       guint old_top_y;
-       g_assert(arg->_type == BONOBO_ARG_INT);
-                       
-       gtk_math_view_get_top(math_view, NULL, &old_top_y);
-       gtk_math_view_set_top(math_view, BONOBO_ARG_GET_INT(arg), old_top_y);
-      }
-      break;
-    case MATH_VIEW_TOP_Y:
-      {
-       guint old_top_x;
-       g_assert(arg->_type == BONOBO_ARG_INT);
-
-       gtk_math_view_get_top(math_view, &old_top_x, NULL);
-       gtk_math_view_set_top(math_view, BONOBO_ARG_GET_INT(arg), old_top_x);
-      }
-      break;
-    case MATH_VIEW_FONT_SIZE:
-      {
-       guint i = gtk_math_view_get_font_size(math_view);
-       g_assert(arg->_type == BONOBO_ARG_INT);
-                       
-       BONOBO_ARG_SET_INT(arg,i);
-      }
-      break;
-    case MATH_VIEW_ANTI_ALIASING:
-      {
-       gboolean i = gtk_math_view_get_anti_aliasing(math_view);
-       g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
-                       
-       BONOBO_ARG_SET_BOOLEAN(arg,i);
-      }
-      break;
-    case MATH_VIEW_TRANSPARENCY:
-      {
-       gboolean i = gtk_math_view_get_transparency(math_view);
-       g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
-                       
-       BONOBO_ARG_SET_BOOLEAN(arg,i);
-      }
-      break;
-    case MATH_VIEW_VERBOSITY:
-      {
-       gint i = gtk_math_view_get_log_verbosity(math_view);
-       g_assert(arg->_type == BONOBO_ARG_INT);
-                       
-       BONOBO_ARG_SET_INT(arg,i);
-      }
-      break;
-    case MATH_VIEW_FONT_MANAGER:
-      {
-       gint i = (gint) gtk_math_view_get_font_manager_type(math_view);
-       BONOBO_ARG_SET_INT(arg,i);
-      }
-      break;
-    default:
-      g_assert(FALSE);
-    }
-}
-
-static BonoboControl*
-instantiate_func(void)
-{
-  BonoboControl *control;
-  GtkWidget *math_view;
-  BonoboPropertyBag *prop_bag;
-       
-  math_view = gtk_math_view_new(NULL,NULL);
-
-  gtk_widget_show(math_view);
-
-  control = bonobo_control_new(math_view);
-
-  prop_bag = bonobo_property_bag_new(get_prop, set_prop, math_view);
-
-  bonobo_control_set_properties(control,BONOBO_OBJREF(prop_bag), NULL);
-       
-  bonobo_property_bag_add(prop_bag,"width",MATH_VIEW_WIDTH,BONOBO_ARG_INT,
-                         NULL,"width",0);
-
-  bonobo_property_bag_add(prop_bag,"height",MATH_VIEW_HEIGHT,BONOBO_ARG_INT,
-                         NULL,"height",0);
-
-  bonobo_property_bag_add(prop_bag,"top_x",MATH_VIEW_TOP_X,BONOBO_ARG_INT,
-                         NULL,"top_x",0);
-
-  bonobo_property_bag_add(prop_bag,"top_y",MATH_VIEW_TOP_Y,BONOBO_ARG_INT,
-                         NULL,"top_y",0);
-       
-  bonobo_property_bag_add(prop_bag,"font_size",MATH_VIEW_FONT_SIZE,BONOBO_ARG_INT,
-                         NULL,"font_size",0);
-       
-  bonobo_property_bag_add(prop_bag,"anti_aliasing",MATH_VIEW_ANTI_ALIASING,BONOBO_ARG_BOOLEAN,
-                         NULL,"anti_aliasing",0);
-       
-  bonobo_property_bag_add(prop_bag,"transparency",MATH_VIEW_TRANSPARENCY,BONOBO_ARG_BOOLEAN,
-                         NULL,"transparency",0);
-       
-  bonobo_property_bag_add(prop_bag,"verbosity",MATH_VIEW_VERBOSITY,BONOBO_ARG_INT,
-                         NULL,"verbosity",0);
-       
-  bonobo_property_bag_add(prop_bag,"font_manager",MATH_VIEW_FONT_MANAGER,BONOBO_ARG_NULL,
-                         NULL,"font_manager",0);
-  return control;
-}
-
-static void 
-notify_property_bag(GtkMathView *math_view,gpointer data)
-{
-  BonoboPropertyBag *prop_bag;
-  BonoboArg    *arg;
-
-  g_return_if_fail(BONOBO_IS_PROPERTY_BAG(data));
-  prop_bag = BONOBO_PROPERTY_BAG(data);
-
-  //we use arg to notify the container that somthing has changed
-       
-  arg = bonobo_arg_new(BONOBO_ARG_INT);
-  BONOBO_ARG_SET_INT(arg,0);
-
-  //bonobo_property_bag_notify_listeners(prop_bag,);
-}
diff --git a/helm/gtkmathview-bonobo/src/gtkmathview-bonobo.h b/helm/gtkmathview-bonobo/src/gtkmathview-bonobo.h
deleted file mode 100644 (file)
index 68830bc..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * gtk_math_view_bonobo.c
- * This file is part of gedit
- *
- * 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.
- */
-#include <bonobo.h>
-#include <glib.h>
-#include <bonobo/bonobo-control.h>
-
-#include <gtkmathview.h>
-
-
-enum math_args;
-
-static void get_prop(BonoboPropertyBag*, BonoboArg *, guint , CorbaEnvironment*, gpointer);
-static void set_prop(BonoboPropertyBag*, BonoboArg *, guint , CorbaEnvironment*, gpointer);
-
-static BonoboControl* instantiate_func(void);
-
-static void notify_property_bag(GtkMathView* ,gpointer);
-
-
diff --git a/helm/hbugs/Makefile b/helm/hbugs/Makefile
deleted file mode 100644 (file)
index 133d009..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-DIRS = meta common broker client tutors
-
-DIRS_BYTE = $(patsubst %,%.byte,$(DIRS))
-DIRS_OPT = $(patsubst %,%.opt,$(DIRS))
-DIRS_CLEAN = $(patsubst %,%.clean,$(DIRS))
-DIRS_DISTCLEAN = $(patsubst %,%.distclean,$(DIRS))
-all: byte
-meta:
-       $(MAKE) -C meta/
-byte: meta $(DIRS_BYTE)
-opt: meta $(DIRS_OPT)
-world: byte opt
-clean: $(DIRS_CLEAN)
-distclean: $(DIRS_DISTCLEAN)
-%.byte:
-       $(MAKE) -C $*/ all
-%.opt:
-       $(MAKE) -C $*/ opt
-%.clean:
-       $(MAKE) -C $*/ clean
-%.distclean:
-       $(MAKE) -C $*/ distclean
-start:
-       $(MAKE) -C broker/ start
-       $(MAKE) -C tutors/ start
-stop:
-       $(MAKE) -C tutors/ stop
-       $(MAKE) -C broker/ stop
-restart: stop start
-.PHONY: all byte opt world clean meta restart start stop
diff --git a/helm/hbugs/broker/.cvsignore b/helm/hbugs/broker/.cvsignore
deleted file mode 100644 (file)
index 2527ca9..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-*.cmi
-*.cmo
-*.cma
-*.cmx
-*.o
-*.a
-hbugs_broker
-hbugs_broker.opt
diff --git a/helm/hbugs/broker/.depend b/helm/hbugs/broker/.depend
deleted file mode 100644 (file)
index 46f3ac8..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-hbugs_broker.cmo: hbugs_broker_registry.cmi 
-hbugs_broker.cmx: hbugs_broker_registry.cmx 
-hbugs_broker_registry.cmo: hbugs_broker_registry.cmi 
-hbugs_broker_registry.cmx: hbugs_broker_registry.cmi 
diff --git a/helm/hbugs/broker/Makefile b/helm/hbugs/broker/Makefile
deleted file mode 100644 (file)
index fe1bf71..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-NAME = hbugs_broker
-METADIR = ../meta
-REQUIRES = http threads hbugs-common hbugs-thread-safe
-COMMONOPTS = -package "$(REQUIRES)" -pp camlp4o
-OCAMLFIND = ocamlfind
-OCAMLC = $(OCAMLFIND) ocamlc $(COMMONOPTS)
-OCAMLOPT = $(OCAMLFIND) ocamlopt $(COMMONOPTS)
-OCAMLDEP = $(OCAMLFIND) ocamldep $(COMMONOPTS)
-MODULES = hbugs_broker_registry
-OCAMLDOC =     \
-       ocamldoc        \
-               $(shell $(OCAMLFIND) query -i-format http)      \
-               $(shell $(OCAMLFIND) query -i-format threads)   \
-               $(shell $(OCAMLFIND) query -i-format hbugs-common)      \
-               $(shell $(OCAMLFIND) query -i-format hbugs-thread-safe) \
-               $(shell $(OCAMLFIND) query -i-format hbugs-thread-safe) \
-               $(shell $(OCAMLFIND) query -i-format pxp-engine)        \
-               $(shell $(OCAMLFIND) query -i-format pcre)
-CTL = ./hbugs_broker_ctl.sh
-
-OBJS = $(patsubst %,%.cmo,$(MODULES))
-OBJSOPT = $(patsubst %,%.cmx,$(MODULES))
-DEPS = $(shell $(OCAMLFIND) query -recursive -predicates byte -format "%d/%a" $(REQUIRES))
-DEPSOPT = $(shell $(OCAMLFIND) query -recursive -predicates native -format "%d/%a" $(REQUIRES))
-
-all: byte
-byte: $(NAME)
-opt: $(NAME).opt
-world: byte opt
-start:
-       $(CTL) start
-stop:
-       $(CTL) stop
-
-include .depend
-depend:
-       $(OCAMLDEP) *.ml *.mli > .depend
-
-%.cmi: %.mli
-       $(OCAMLC) -c $<
-%.cmo: %.ml %.cmi
-       $(OCAMLC) -c $<
-%.cmx: %.ml %.cmi
-       $(OCAMLOPT) -c $<
-include Makefile.overrides
-$(OBJS): $(DEPS)
-$(OBJSOPT): $(DEPSOPT)
-$(NAME): $(OBJS) $(NAME).ml
-       $(OCAMLC) -linkpkg -thread -o $@ $^
-$(NAME).opt: $(OBJSOPT) $(NAME).ml
-       $(OCAMLOPT) -linkpkg -thread -o $@ $^
-$(NAME).dot: *.ml *.mli ../common/*.ml ../common/*.mli
-       $(OCAMLDOC) -dot -o $@ $^
-
-distclean: clean
-       rm -f run/*
-clean:
-       rm -f *.cm[aiox] *.o $(NAME){,.opt}
-
-.PHONY: all byte opt world depend clean start stop
-
diff --git a/helm/hbugs/broker/Makefile.overrides b/helm/hbugs/broker/Makefile.overrides
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/hbugs/broker/hbugs_broker.ml b/helm/hbugs/broker/hbugs_broker.ml
deleted file mode 100644 (file)
index 2ff8b98..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_types;;
-open Printf;;
-
-let debug = true ;;
-let debug_print s = if debug then prerr_endline s ;;
-Http_common.debug := false;;
-
-let daemon_name = "H-Bugs Broker" ;;
-let default_port = 49081 ;;
-let port_env_var = "HELM_HBUGS_BROKER_PORT" ;;
-let port =
-  try
-    int_of_string (Sys.getenv port_env_var)
-  with
-  | Not_found -> default_port
-  | Failure "int_of_string" ->
-      prerr_endline "Warning: invalid port, reverting to default";
-      default_port
-;;
-let usage_string = "HBugs Broker: usage string not yet written :-(";;
-
-exception Unexpected_msg of message;;
-
-let return_xml_msg body outchan =
-  Http_daemon.respond ~headers:["Content-Type", "text/xml"] ~body outchan
-;;
-let parse_musing_id = function
-  | Musing_started (_, musing_id) ->
-       prerr_endline ("#### Started musing ID: " ^ musing_id);
-       musing_id
-  | Musing_aborted (_, musing_id) -> musing_id
-  | msg ->
-      prerr_endline (sprintf "Assertion failed, received msg: %s"
-        (Hbugs_messages.string_of_msg msg));
-      assert false
-;;
-
-let do_critical =
-  let mutex = Mutex.create () in
-  fun action ->
-    try
-(*       debug_print "Acquiring lock ..."; *)
-      Mutex.lock mutex;
-(*       debug_print "Lock Acquired!"; *)
-      let res = Lazy.force action in
-(*       debug_print "Releaseing lock ..."; *)
-      Mutex.unlock mutex;
-(*       debug_print "Lock released!"; *)
-      res
-    with e -> Mutex.unlock mutex; raise e
-;;
-
-  (* registries *)
-let clients = new Hbugs_broker_registry.clients in
-let tutors = new Hbugs_broker_registry.tutors in
-let musings = new Hbugs_broker_registry.musings in
-let registries =
-  [ (clients :> Hbugs_broker_registry.registry);
-    (tutors :> Hbugs_broker_registry.registry);
-    (musings :> Hbugs_broker_registry.registry) ]
-in
-
-let my_own_id = Hbugs_id_generator.new_broker_id () in
-
-  (* debugging: dump broker internal status, used by '/dump' method *)
-let dump_registries () =
-  assert debug;
-  String.concat "\n" (List.map (fun o -> o#dump) registries)
-in
-
-let handle_msg outchan msg =
-  (* messages from clients *)
-  (match msg with
-
-  | Help ->
-      Hbugs_messages.respond_msg (Usage usage_string) outchan
-  | Register_client (client_id, client_url) -> do_critical (lazy (
-      try
-        clients#register client_id client_url;
-        Hbugs_messages.respond_msg (Client_registered my_own_id) outchan
-      with Hbugs_broker_registry.Client_already_in id ->
-        Hbugs_messages.respond_exc "already_registered" id outchan
-    ))
-  | Unregister_client client_id -> do_critical (lazy (
-      if clients#isAuthenticated client_id then begin
-        clients#unregister client_id;
-        Hbugs_messages.respond_msg (Client_unregistered my_own_id) outchan
-      end else
-        Hbugs_messages.respond_exc "forbidden" client_id outchan
-    ))
-  | List_tutors client_id -> do_critical (lazy (
-      if clients#isAuthenticated client_id then begin
-        Hbugs_messages.respond_msg
-          (Tutor_list (my_own_id, tutors#index))
-          outchan
-      end else
-        Hbugs_messages.respond_exc "forbidden" client_id outchan
-    ))
-  | Subscribe (client_id, tutor_ids) -> do_critical (lazy (
-      if clients#isAuthenticated client_id then begin
-        if List.length tutor_ids <> 0 then begin  (* at least one tutor id *)
-          if List.for_all tutors#exists tutor_ids then begin
-            clients#subscribe client_id tutor_ids;
-            Hbugs_messages.respond_msg
-              (Subscribed (my_own_id, tutor_ids)) outchan
-          end else  (* required subscription to at least one unexistent tutor *)
-            let missing_tutors =
-              List.filter (fun id -> not (tutors#exists id)) tutor_ids
-            in
-            Hbugs_messages.respond_exc
-              "tutor_not_found" (String.concat " " missing_tutors) outchan
-        end else  (* no tutor id specified *)
-          Hbugs_messages.respond_exc "no_tutor_specified" "" outchan
-      end else
-        Hbugs_messages.respond_exc "forbidden" client_id outchan
-    ))
-  | State_change (client_id, new_state) -> do_critical (lazy (
-      if clients#isAuthenticated client_id then begin
-        let active_musings = musings#getByClientId client_id in
-        prerr_endline (sprintf "ACTIVE MUSINGS: %s" (String.concat ", " active_musings));
-        if List.length active_musings = 0 then
-          prerr_endline ("No active musings for client " ^ client_id);
-        prerr_endline "CSC: State change!!!" ;
-        let stop_answers =
-          List.map  (* collect Abort_musing message's responses *)
-            (fun id ->  (* musing id *)
-              let tutor = snd (musings#getByMusingId id) in
-              Hbugs_messages.submit_req
-                ~url:(tutors#getUrl tutor) (Abort_musing (my_own_id, id)))
-            active_musings
-        in
-                               let stopped_musing_ids = List.map parse_musing_id stop_answers in
-        List.iter musings#unregister active_musings;
-                               (match new_state with
-                               | Some new_state ->     (* need to start new musings *)
-                                       let subscriptions = clients#getSubscription client_id in
-                                       if List.length subscriptions = 0 then
-                                               prerr_endline ("No subscriptions for client " ^ client_id);
-                                       let started_musing_ids =
-                                               List.map  (* register new musings and collect their ids *)
-                                                       (fun tutor_id ->
-                                                               let res =
-                                                                       Hbugs_messages.submit_req
-                                                                               ~url:(tutors#getUrl tutor_id)
-                                                                               (Start_musing (my_own_id, new_state))
-                                                               in
-                                                               let musing_id = parse_musing_id res in
-                                                               musings#register musing_id client_id tutor_id;
-                                                               musing_id)
-                                                       subscriptions
-                                       in
-                                       Hbugs_messages.respond_msg
-                                               (State_accepted (my_own_id, stopped_musing_ids, started_musing_ids))
-                                               outchan
-                               | None ->       (* no need to start new musings *)
-                                               Hbugs_messages.respond_msg
-                                                       (State_accepted (my_own_id, stopped_musing_ids, []))
-                                                       outchan)
-      end else
-        Hbugs_messages.respond_exc "forbidden" client_id outchan
-    ))
-
-  (* messages from tutors *)
-
-  | Register_tutor (tutor_id, tutor_url, hint_type, dsc) -> do_critical (lazy (
-      try
-        tutors#register tutor_id tutor_url hint_type dsc;
-        Hbugs_messages.respond_msg (Tutor_registered my_own_id) outchan
-      with Hbugs_broker_registry.Tutor_already_in id ->
-        Hbugs_messages.respond_exc "already_registered" id outchan
-    ))
-  | Unregister_tutor tutor_id -> do_critical (lazy (
-      if tutors#isAuthenticated tutor_id then begin
-        tutors#unregister tutor_id;
-        Hbugs_messages.respond_msg (Tutor_unregistered my_own_id) outchan
-      end else
-        Hbugs_messages.respond_exc "forbidden" tutor_id outchan
-    ))
-
-  | Musing_completed (tutor_id, musing_id, result) -> do_critical (lazy (
-      if not (tutors#isAuthenticated tutor_id) then begin (* unauthorized *)
-        Hbugs_messages.respond_exc "forbidden" tutor_id outchan;
-      end else if not (musings#isActive musing_id) then begin (* too late *)
-        Hbugs_messages.respond_msg (Too_late (my_own_id, musing_id)) outchan;
-      end else begin  (* all is ok: autorhized and on time *)
-        (match result with
-        | Sorry -> ()
-        | Eureka hint ->
-            let client_url =
-              clients#getUrl (fst (musings#getByMusingId musing_id))
-            in
-            let res =
-              Hbugs_messages.submit_req ~url:client_url (Hint (my_own_id, hint))
-            in
-            (match res with
-            | Wow _ -> () (* ok: client is happy with our hint *)
-            | unexpected_msg ->
-                prerr_endline
-                  (sprintf
-                    "Warning: unexpected msg from client: %s\nExpected was: Wow"
-                    (Hbugs_messages.string_of_msg msg))));
-        Hbugs_messages.respond_msg (Thanks (my_own_id, musing_id)) outchan;
-        musings#unregister musing_id
-      end
-    ))
-
-  | msg ->  (* unexpected message *)
-      debug_print "Unknown message!";
-      Hbugs_messages.respond_exc
-        "unexpected_msg" (Hbugs_messages.string_of_msg msg) outchan)
-in
-(*  (* DEBUGGING wrapper around 'handle_msg' *)
-let handle_msg outchan =
-  if debug then
-    (fun msg -> (* filter handle_msg through a function which dumps input
-                messages *)
-      debug_print (Hbugs_messages.string_of_msg msg);
-      handle_msg outchan msg)
-  else
-    handle_msg outchan
-in
-*)
-
-  (* thread action *)
-let callback (req: Http_types.request) outchan =
-  try
-    debug_print ("Connection from " ^ req#clientAddr);
-    debug_print ("Received request: " ^ req#path);
-    (match req#path with
-      (* TODO write help message *)
-    | "/help" -> return_xml_msg "<help> not yet written </help>" outchan
-    | "/act" ->
-        let msg = Hbugs_messages.msg_of_string req#body in
-        handle_msg outchan msg
-    | "/dump" ->
-        if debug then
-          Http_daemon.respond ~body:(dump_registries ()) outchan
-        else
-          Http_daemon.respond_error ~code:400 outchan
-    | _ -> Http_daemon.respond_error ~code:400 outchan);
-    debug_print "Done!\n"
-  with
-  | Http_types.Param_not_found attr_name ->
-      Hbugs_messages.respond_exc "missing_parameter" attr_name outchan
-  | exc ->
-      Hbugs_messages.respond_exc
-        "uncaught_exception" (Printexc.to_string exc) outchan
-in
-
-  (* thread who cleans up ancient client/tutor/musing registrations *)
-let ragman () =
-  let delay = 3600.0 in (* 1 hour delay *)
-  while true do
-    Thread.delay delay;
-    List.iter (fun o -> o#purge) registries
-  done
-in
-
-  (* start daemon *)
-printf "Listening on port %d ...\n" port;
-flush stdout;
-ignore (Thread.create ragman ());
-Http_daemon.start' ~port ~mode:`Thread callback
-
diff --git a/helm/hbugs/broker/hbugs_broker_ctl.sh b/helm/hbugs/broker/hbugs_broker_ctl.sh
deleted file mode 100755 (executable)
index b06f844..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-daemon="hbugs_broker"
-if [ "$1" = "--help" -o "$1" = "" ]; then
-   echo "ctl.sh { start | stop | --help }"
-   exit 0
-fi
-if [ "$1" = "start" ]; then
-   echo -n "Starting HBugs broker ... "
-   ./$daemon &> run/$daemon.LOG &
-   echo "done!"
-elif [ "$1" = "stop" ]; then
-   echo -n "Stopping HBugs broker ... "
-   killall $daemon
-   echo "done!"
-fi
diff --git a/helm/hbugs/broker/hbugs_broker_registry.ml b/helm/hbugs/broker/hbugs_broker_registry.ml
deleted file mode 100644 (file)
index 879d746..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_misc;;
-open Hbugs_types;;
-open Printf;;
-
-exception Client_already_in of client_id;;
-exception Client_not_found of client_id;;
-exception Musing_already_in of musing_id;;
-exception Musing_not_found of musing_id;;
-exception Tutor_already_in of tutor_id;;
-exception Tutor_not_found of tutor_id;;
-
-class type registry =
-  object
-    method dump: string
-    method purge: unit
-  end
-
-let expire_time = 1800. (* 30 minutes *)
-
-class clients =
-  object (self)
-
-    inherit ThreadSafe.threadSafe
-(*
-    (* <DEBUGGING> *)
-    method private doCritical: 'a. 'a lazy_t -> 'a = fun act -> Lazy.force act
-    method private doWriter: 'a. 'a lazy_t -> 'a = fun act -> Lazy.force act
-    method private doReader: 'a. 'a lazy_t -> 'a = fun act -> Lazy.force act
-    (* </DEBUGGING> *)
-*)
-
-    val timetable: (client_id, float) Hashtbl.t = Hashtbl.create 17
-    val urls: (client_id, string) Hashtbl.t = Hashtbl.create 17
-    val subscriptions: (client_id, tutor_id list) Hashtbl.t = Hashtbl.create 17
-
-      (** INVARIANT: each client registered has an entry in 'urls' hash table
-      _and_ in 'subscriptions hash table even if it hasn't yet invoked
-      'subscribe' method *)
-
-    method register id url = self#doWriter (lazy (
-      if Hashtbl.mem urls id then
-        raise (Client_already_in id)
-      else begin
-        Hashtbl.add urls id url;
-        Hashtbl.add subscriptions id [];
-        Hashtbl.add timetable id (Unix.time ())
-      end
-    ))
-    method private remove id =
-      Hashtbl.remove urls id;
-      Hashtbl.remove subscriptions id;
-      Hashtbl.remove timetable id
-    method unregister id = self#doWriter (lazy (
-      if Hashtbl.mem urls id then
-        self#remove id
-      else
-        raise (Client_not_found id)
-    ))
-    method isAuthenticated id = self#doReader (lazy (
-      Hashtbl.mem urls id
-    ))
-    method subscribe client_id tutor_ids = self#doWriter (lazy (
-      if Hashtbl.mem urls client_id then
-        Hashtbl.replace subscriptions client_id tutor_ids
-      else
-        raise (Client_not_found client_id)
-    ))
-    method getUrl id = self#doReader (lazy (
-      if Hashtbl.mem urls id then
-        Hashtbl.find urls id
-      else
-        raise (Client_not_found id)
-    ))
-    method getSubscription id = self#doReader (lazy (
-      if Hashtbl.mem urls id then
-        Hashtbl.find subscriptions id
-      else
-        raise (Client_not_found id)
-    ))
-
-    method dump = self#doReader (lazy (
-      "<clients>\n" ^
-      (Hashtbl.fold
-        (fun id url dump ->
-          (dump ^
-          (sprintf "<client id=\"%s\" url=\"%s\">\n" id url) ^
-          "<subscriptions>\n" ^
-          (String.concat "\n" (* id's subscriptions *)
-            (List.map
-              (fun tutor_id -> sprintf "<tutor id=\"%s\" />\n" tutor_id)
-              (Hashtbl.find subscriptions id))) ^
-          "</subscriptions>\n</client>\n"))
-        urls "") ^
-      "</clients>"
-    ))
-    method purge = self#doWriter (lazy (
-      let now = Unix.time () in
-      Hashtbl.iter
-        (fun id birthday ->
-          if now -. birthday > expire_time then
-            self#remove id)
-        timetable
-    ))
-
-  end
-
-class tutors =
-  object (self)
-
-    inherit ThreadSafe.threadSafe
-(*
-    (* <DEBUGGING> *)
-    method private doCritical: 'a. 'a lazy_t -> 'a = fun act -> Lazy.force act
-    method private doWriter: 'a. 'a lazy_t -> 'a = fun act -> Lazy.force act
-    method private doReader: 'a. 'a lazy_t -> 'a = fun act -> Lazy.force act
-    (* </DEBUGGING> *)
-*)
-
-    val timetable: (tutor_id, float) Hashtbl.t = Hashtbl.create 17
-    val tbl: (tutor_id, string * hint_type * string) Hashtbl.t =
-      Hashtbl.create 17
-
-    method register id url hint_type dsc = self#doWriter (lazy (
-      if Hashtbl.mem tbl id then
-        raise (Tutor_already_in id)
-      else begin
-        Hashtbl.add tbl id (url, hint_type, dsc);
-        Hashtbl.add timetable id (Unix.time ())
-      end
-    ))
-    method private remove id =
-      Hashtbl.remove tbl id;
-      Hashtbl.remove timetable id
-    method unregister id = self#doWriter (lazy (
-      if Hashtbl.mem tbl id then
-        self#remove id
-      else
-        raise (Tutor_not_found id)
-    ))
-    method isAuthenticated id = self#doReader (lazy (
-      Hashtbl.mem tbl id
-    ))
-    method exists id = self#doReader (lazy (
-      Hashtbl.mem tbl id
-    ))
-    method getTutor id = self#doReader (lazy (
-      if Hashtbl.mem tbl id then
-        Hashtbl.find tbl id
-      else
-        raise (Tutor_not_found id)
-    ))
-    method getUrl id =
-      let (url, _, _) = self#getTutor id in
-      url
-    method getHintType id =
-      let (_, hint_type, _) = self#getTutor id in
-      hint_type
-    method getDescription id =
-      let (_, _, dsc) = self#getTutor id in
-      dsc
-    method index = self#doReader (lazy (
-      Hashtbl.fold
-        (fun id (url, hint_type, dsc) idx -> (id, dsc) :: idx) tbl []
-    ))
-
-    method dump = self#doReader (lazy (
-      "<tutors>\n" ^
-      (Hashtbl.fold
-        (fun id (url, hint_type, dsc) dump ->
-          dump ^
-          (sprintf
-"<tutor id=\"%s\" url=\"%s\">\n<hint_type>%s</hint_type>\n<description>%s</description>\n</tutor>"
-            id url hint_type dsc))
-        tbl "") ^
-      "</tutors>"
-    ))
-    method purge = self#doWriter (lazy (
-      let now = Unix.time () in
-      Hashtbl.iter
-        (fun id birthday ->
-          if now -. birthday > expire_time then
-            self#remove id)
-        timetable
-    ))
-
-  end
-
-class musings =
-  object (self)
-
-    inherit ThreadSafe.threadSafe
-(*
-    (* <DEBUGGING> *)
-    method private doCritical: 'a. 'a lazy_t -> 'a = fun act -> Lazy.force act
-    method private doWriter: 'a. 'a lazy_t -> 'a = fun act -> Lazy.force act
-    method private doReader: 'a. 'a lazy_t -> 'a = fun act -> Lazy.force act
-    (* </DEBUGGING> *)
-*)
-
-    val timetable: (musing_id, float) Hashtbl.t = Hashtbl.create 17
-    val musings: (musing_id, client_id * tutor_id) Hashtbl.t = Hashtbl.create 17
-    val clients: (client_id, musing_id list) Hashtbl.t = Hashtbl.create 17
-    val tutors: (tutor_id, musing_id list) Hashtbl.t = Hashtbl.create 17
-
-      (** INVARIANT: each registered musing <musing_id, client_id, tutor_id> has
-      an entry in 'musings' table, an entry in 'clients' (i.e. one of the
-      musings for client_id is musing_id) table, an entry in 'tutors' table
-      (i.e. one of the musings for tutor_id is musing_id) and an entry in
-      'timetable' table *)
-
-
-    method register musing_id client_id tutor_id = self#doWriter (lazy (
-      if Hashtbl.mem musings musing_id then
-        raise (Musing_already_in musing_id)
-      else begin
-        Hashtbl.add musings musing_id (client_id, tutor_id);
-          (* now add this musing as the first one of musings list for client and
-          tutor *)
-        Hashtbl.replace clients client_id
-          (musing_id ::
-            (try Hashtbl.find clients client_id with Not_found -> []));
-        Hashtbl.replace tutors tutor_id
-          (musing_id ::
-            (try Hashtbl.find tutors tutor_id with Not_found -> []));
-        Hashtbl.add timetable musing_id (Unix.time ())
-      end
-    ))
-    method private remove id =
-        (* ASSUMPTION: this method is invoked under a 'writer' lock *)
-      let (client_id, tutor_id) = self#getByMusingId' id in
-      Hashtbl.remove musings id;
-        (* now remove this musing from the list of musings for client and tutor
-        *)
-      Hashtbl.replace clients client_id
-        (List.filter ((<>) id)
-          (try Hashtbl.find clients client_id with Not_found -> []));
-      Hashtbl.replace tutors tutor_id
-        (List.filter ((<>) id)
-          (try Hashtbl.find tutors tutor_id with Not_found -> []));
-      Hashtbl.remove timetable id
-    method unregister id = self#doWriter (lazy (
-      if Hashtbl.mem musings id then
-        self#remove id
-    ))
-    method private getByMusingId' id =
-      (* ASSUMPTION: this method is invoked under a 'reader' lock *)
-      try
-        Hashtbl.find musings id
-      with Not_found -> raise (Musing_not_found id)
-    method getByMusingId id = self#doReader (lazy (
-      self#getByMusingId' id
-    ))
-    method getByClientId id = self#doReader (lazy (
-      try
-        Hashtbl.find clients id
-      with Not_found -> []
-    ))
-    method getByTutorId id = self#doReader (lazy (
-      try
-        Hashtbl.find tutors id
-      with Not_found -> []
-    ))
-    method isActive id = self#doReader (lazy (
-      Hashtbl.mem musings id
-    ))
-
-    method dump = self#doReader (lazy (
-      "<musings>\n" ^
-      (Hashtbl.fold
-        (fun mid (cid, tid) dump ->
-          dump ^
-          (sprintf "<musing id=\"%s\" client=\"%s\" tutor=\"%s\" />\n"
-            mid cid tid))
-        musings "") ^
-      "</musings>"
-    ))
-    method purge = self#doWriter (lazy (
-      let now = Unix.time () in
-      Hashtbl.iter
-        (fun id birthday ->
-          if now -. birthday > expire_time then
-            self#remove id)
-        timetable
-    ))
-
-  end
-
diff --git a/helm/hbugs/broker/hbugs_broker_registry.mli b/helm/hbugs/broker/hbugs_broker_registry.mli
deleted file mode 100644 (file)
index ece9e07..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_types;;
-
-exception Client_already_in of client_id
-exception Client_not_found of client_id
-exception Musing_already_in of musing_id
-exception Musing_not_found of musing_id
-exception Tutor_already_in of tutor_id
-exception Tutor_not_found of tutor_id
-
-class type registry =
-  object
-    method dump: string
-    method purge: unit
-  end
-
-class clients:
-  object
-      (** 'register client_id client_url' *)
-    method register: client_id -> string -> unit
-    method unregister: client_id -> unit
-    method isAuthenticated: client_id -> bool
-      (** subcribe a client to a set of tutor removing previous subcriptions *)
-    method subscribe: client_id -> tutor_id list -> unit
-    method getUrl: client_id -> string
-    method getSubscription: client_id -> tutor_id list
-
-    method dump: string
-    method purge: unit
-  end
-
-class tutors:
-  object
-    method register: tutor_id -> string -> hint_type -> string -> unit
-    method unregister: tutor_id -> unit
-    method isAuthenticated: tutor_id -> bool
-    method exists: tutor_id -> bool
-    method getTutor: tutor_id -> string * hint_type * string
-    method getUrl: tutor_id -> string
-    method getHintType: tutor_id -> hint_type
-    method getDescription: tutor_id -> string
-    method index: tutor_dsc list
-
-    method dump: string
-    method purge: unit
-  end
-
-class musings:
-  object
-    method register: musing_id -> client_id -> tutor_id -> unit
-    method unregister: musing_id -> unit
-    method getByMusingId: musing_id -> client_id * tutor_id
-    method getByClientId: client_id -> musing_id list
-    method getByTutorId: tutor_id -> musing_id list
-    method isActive: musing_id -> bool
-
-    method dump: string
-    method purge: unit
-  end
-
diff --git a/helm/hbugs/broker/run/.cvsignore b/helm/hbugs/broker/run/.cvsignore
deleted file mode 100644 (file)
index 7789b92..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.LOG
diff --git a/helm/hbugs/client/.cvsignore b/helm/hbugs/client/.cvsignore
deleted file mode 100644 (file)
index 405d7b0..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-*.cmi
-*.cmo
-*.cma
-*.cmx
-*.o
-*.a
-hbugs_client_gui.ml
-hbugs_client
-hbugs_client.opt
diff --git a/helm/hbugs/client/Makefile b/helm/hbugs/client/Makefile
deleted file mode 100644 (file)
index 19491de..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-NAME = hbugs_client
-METADIR = ../meta
-REQUIRES = lablgtk threads hbugs-common
-PREDICATES = glade init
-COMMONOPTS = -package "$(REQUIRES)" -predicates "$(PREDICATES)"
-OCAMLC = OCAMLPATH="$(METADIR)" ocamlfind ocamlc $(COMMONOPTS)
-OCAMLOPT = OCAMLPATH="$(METADIR)" ocamlfind ocamlopt $(COMMONOPTS)
-OCAMLFIND = ocamlfind
-
-DEPS = $(shell $(OCAMLFIND) query -recursive -predicates byte -format "%d/%a" $(REQUIRES))
-DEPSOPT = $(shell $(OCAMLFIND) query -recursive -predicates native -format "%d/%a" $(REQUIRES))
-
-all: byte
-world: byte opt
-byte: $(NAME)
-opt: $(NAME).opt
-
-hbugs_client_gui.ml: hbugs_gui.glade
-       lablgladecc $< > $@
-hbugs_client_gui.cmo: hbugs_client_gui.ml
-       $(OCAMLC) -c $<
-hbugs_client_gui.cmx: hbugs_client_gui.ml
-       $(OCAMLOPT) -c $<
-hbugs_client.cmi: hbugs_client.mli
-       $(OCAMLC) -c $<
-hbugs_client.cmo: hbugs_client.ml hbugs_client.cmi
-       $(OCAMLC) -c $<
-hbugs_client.cmx: hbugs_client.ml hbugs_client.cmi
-       $(OCAMLOPT) -c $<
-$(NAME): $(DEPS) hbugs_client_gui.cmo $(NAME).cmo main.ml
-       $(OCAMLC) -thread -package threads -linkpkg -o $@ hbugs_client_gui.cmo $(NAME).cmo main.ml
-$(NAME).opt: $(DEPSOPT) hbugs_client_gui.cmx $(NAME).cmx main.ml
-       $(OCAMLOPT) -thread -package threads -linkpkg -o $@ hbugs_client_gui.cmx $(NAME).cmx main.ml
-clean:
-       rm -f *.cm[aixo] *.cmxa *.[oa] $(NAME){,.opt} hbugs_client_gui.ml
-distclean: clean
-.PHONY: all world byte opt clean
diff --git a/helm/hbugs/client/hbugs_client.ml b/helm/hbugs/client/hbugs_client.ml
deleted file mode 100644 (file)
index d9512d2..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_common;;
-open Hbugs_types;;
-open Printf;;
-
-exception Invalid_URL of string;;
-
-let global_debug = true;;
-
-  (**
-  @param on_use_hint function invoked when an hint is used, argumnet is the hint
-  to use
-  @param on_exit function invoked when client is exiting (e.g. window is
-  destroyed, if it's None "self#quit" is invoked
-  *)
-class hbugsClient
-  ?(use_hint_callback: hint -> unit = (fun _ -> ()))
-  ()
-  =
-
-  let http_url_RE = Pcre.regexp "^(http://)?(.*):(\\d+)" in
-  let port_of_http_url url =
-    try
-      let subs = Pcre.extract ~rex:http_url_RE url in
-      int_of_string subs.(3)
-    with e -> raise (Invalid_URL url)
-  in
-
-  object (self)
-
-    val mainWindow = new Hbugs_client_gui.hbugsMainWindow ()
-    val subscribeWindow = new Hbugs_client_gui.subscribeWindow ()
-    val messageDialog = new Hbugs_client_gui.messageDialog ()
-    val myOwnId = Hbugs_id_generator.new_client_id ()
-    val mutable use_hint_callback = use_hint_callback
-    val mutable myOwnUrl = "localhost:49082"
-    val mutable brokerUrl = "localhost:49081"
-    val mutable brokerId: broker_id option = None
-      (* all available tutors, saved last time a List_tutors message was sent to
-      broker *)
-    val mutable availableTutors: tutor_dsc list = []
-     (* id of highlighted tutors in tutor subscription window *)
-    val mutable selectedTutors: tutor_id list = []
-    val mutable statusContext = None
-    val mutable subscribeWindowStatusContext = None
-    val mutable debug = false (* enable/disable debugging buttons *)
-    val mutable hints = []  (* actually available hints *)
-
-    initializer
-      self#initGui;
-      self#startLocalHttpDaemon ();
-      self#testLocalHttpDaemon ();
-      self#testBroker ();
-      self#registerToBroker ();
-      self#reconfigDebuggingButtons
-
-    method show = mainWindow#hbugsMainWindow#show
-    method hide = mainWindow#hbugsMainWindow#misc#hide
-
-    method setUseHintCallback callback =
-     use_hint_callback <- callback
-
-    method private debugButtons =
-      List.map
-        (fun (b: GButton.button) -> new GObj.misc_ops b#as_widget)
-        [ mainWindow#startLocalHttpDaemonButton;
-        mainWindow#testLocalHttpDaemonButton; mainWindow#testBrokerButton;
-        mainWindow#registerClientButton; mainWindow#unregisterClientButton ]
-
-    method private initGui =
-
-        (* GUI: main window *)
-      let on_exit = fun () -> self#quit (); false in
-      ignore (mainWindow#hbugsMainWindow#event#connect#destroy
-        (fun _ -> on_exit ()));
-      ignore (mainWindow#hbugsMainWindow#event#connect#delete
-        (fun _ -> on_exit ()));
-
-        (* GUI main window's menu *)
-      mainWindow#toggleDebuggingMenuItem#set_active debug;
-      ignore (mainWindow#toggleDebuggingMenuItem#connect#toggled
-        self#toggleDebug);
-
-        (* GUI: local HTTP daemon settings *)
-      ignore (mainWindow#clientUrlEntry#connect#changed
-        (fun _ -> myOwnUrl <- mainWindow#clientUrlEntry#text));
-      mainWindow#clientUrlEntry#set_text myOwnUrl;
-      ignore (mainWindow#startLocalHttpDaemonButton#connect#clicked
-        self#startLocalHttpDaemon);
-      ignore (mainWindow#testLocalHttpDaemonButton#connect#clicked
-        self#testLocalHttpDaemon);
-
-        (* GUI: broker choice *)
-      ignore (mainWindow#brokerUrlEntry#connect#changed
-        (fun _ -> brokerUrl <- mainWindow#brokerUrlEntry#text));
-      mainWindow#brokerUrlEntry#set_text brokerUrl;
-      ignore (mainWindow#testBrokerButton#connect#clicked self#testBroker);
-      mainWindow#clientIdLabel#set_text myOwnId;
-
-        (* GUI: client registration *)
-      ignore (mainWindow#registerClientButton#connect#clicked
-        self#registerToBroker);
-      ignore (mainWindow#unregisterClientButton#connect#clicked
-        self#unregisterFromBroker);
-
-        (* GUI: subscriptions *)
-      ignore (mainWindow#showSubscriptionWindowButton#connect#clicked
-        (fun () ->
-          self#listTutors ();
-          subscribeWindow#subscribeWindow#show ()));
-
-        (* GUI: hints list *)
-      ignore (mainWindow#hintsCList#connect#select_row
-        (fun ~row ~column ~event ->
-          match event with
-          | Some event when GdkEvent.get_type event = `TWO_BUTTON_PRESS ->
-              use_hint_callback (self#hint row)
-          | _ -> ()));
-
-        (* GUI: main status bar *)
-      let ctxt = mainWindow#mainWindowStatusBar#new_context "0" in
-      statusContext <- Some ctxt;
-      ignore (ctxt#push "Ready");
-
-        (* GUI: subscription window *)
-      ignore (subscribeWindow#subscribeWindow#event#connect#delete
-        (fun _ -> subscribeWindow#subscribeWindow#misc#hide (); true));
-      ignore (subscribeWindow#listTutorsButton#connect#clicked self#listTutors);
-      let tutor_id_of_row row = subscribeWindow#tutorsCList#cell_text row 0 in
-      ignore (subscribeWindow#tutorsCList#connect#select_row
-        (fun ~row ~column ~event ->
-          selectedTutors <- tutor_id_of_row row :: selectedTutors));
-      ignore (subscribeWindow#tutorsCList#connect#unselect_row
-        (fun ~row ~column ~event ->
-          selectedTutors <-
-            List.filter ((<>) (tutor_id_of_row row)) selectedTutors));
-      ignore (subscribeWindow#subscribeButton#connect#clicked
-        self#subscribeSelected);
-      ignore (subscribeWindow#subscribeAllButton#connect#clicked
-        self#subscribeAll);
-      let ctxt = subscribeWindow#subscribeWindowStatusBar#new_context "0" in
-      subscribeWindowStatusContext <- Some ctxt;
-      ignore (ctxt#push "Ready");
-
-        (* GUI: message dialog *)
-      ignore (messageDialog#messageDialog#event#connect#delete
-        (fun _ -> messageDialog#messageDialog#misc#hide (); true));
-      ignore (messageDialog#okDialogButton#connect#clicked
-        (fun _ -> messageDialog#messageDialog#misc#hide ()))
-
-    (* accessory methods *)
-
-      (** pop up a (modal) dialog window showing msg to the user *)
-    method private showDialog msg =
-      messageDialog#dialogLabel#set_text msg;
-      messageDialog#messageDialog#show ()
-      (** use showDialog to display an hbugs message to the user *)
-    method private showMsgInDialog msg =
-      self#showDialog (Hbugs_messages.string_of_msg msg)
-
-      (** create a new thread which sends msg to broker, wait for an answer and
-      invoke callback passing response message as argument *)
-    method private sendReq ?(wait = false) ~msg callback =
-      let thread () =
-        try
-          callback (Hbugs_messages.submit_req ~url:(brokerUrl ^ "/act") msg)
-        with 
-        | (Hbugs_messages.Parse_error (subj, reason)) as e ->
-            self#showDialog
-              (sprintf
-"Parse_error, unable to fullfill request. Details follow.
-Request: %s
-Error: %s"
-                (Hbugs_messages.string_of_msg msg) (Printexc.to_string e));
-        | (Unix.Unix_error _) as e ->
-            self#showDialog
-              (sprintf
-"Can't connect to HBugs Broker
-Url: %s
-Error: %s"
-                brokerUrl (Printexc.to_string e))
-        | e ->
-            self#showDialog
-              (sprintf "hbugsClient#sendReq: Uncaught exception: %s"
-                (Printexc.to_string e))
-      in
-      let th = Thread.create thread () in
-      if wait then
-        Thread.join th
-      else ()
-
-      (** check if a broker is authenticated using its broker_id
-      [ Background: during client registration, client save broker_id of its
-      broker, further messages from broker are accepted only if they carry the
-      same broker id ] *)
-    method private isAuthenticated id =
-      match brokerId with
-      | None -> false
-      | Some broker_id -> (id = broker_id)
-
-    (* actions *)
-
-    method private startLocalHttpDaemon =
-        (* flatten an hint tree to an hint list *)
-      let rec flatten_hint = function
-        | Hints hints -> List.concat (List.map flatten_hint hints)
-        | hint -> [hint]
-      in
-      fun () ->
-      let callback req outchan =
-        try
-          (match Hbugs_messages.msg_of_string req#body with
-          | Help ->
-              Hbugs_messages.respond_msg
-                (Usage "Local Http Daemon up and running!") outchan
-          | Hint (broker_id, hint) ->
-              if self#isAuthenticated broker_id then begin
-                let received_hints = flatten_hint hint in
-                List.iter
-                  (fun h ->
-                    (match h with Hints _ -> assert false | _ -> ());
-                    ignore (mainWindow#hintsCList#append [string_of_hint h]))
-                  received_hints;
-                hints <- hints @ received_hints;
-                Hbugs_messages.respond_msg (Wow myOwnId) outchan
-              end else  (* msg from unauthorized broker *)
-                Hbugs_messages.respond_exc "forbidden" broker_id outchan
-          | msg ->
-              Hbugs_messages.respond_exc
-                "unexpected_msg" (Hbugs_messages.string_of_msg msg) outchan)
-        with (Hbugs_messages.Parse_error _) as e ->
-          Hbugs_messages.respond_exc
-            "parse_error" (Printexc.to_string e) outchan
-      in
-      let addr = "0.0.0.0" in (* TODO actually user specified "My URL" is used
-                              only as a value to be sent to broker, local HTTP
-                              daemon will listen on "0.0.0.0", port is parsed
-                              from My URL though *)
-      let httpDaemonThread () =
-        try
-          Http_daemon.start'
-            ~addr ~port:(port_of_http_url myOwnUrl) ~mode:`Single callback
-        with
-        | Invalid_URL url -> self#showDialog (sprintf "Invalid URL: \"%s\"" url)
-        | e ->
-            self#showDialog (sprintf "Can't start local HTTP daemon: %s"
-              (Printexc.to_string e))
-      in
-      ignore (Thread.create httpDaemonThread ())
-
-    method private testLocalHttpDaemon () =
-      try
-        let msg =
-          Hbugs_misc.http_post ~body:(Hbugs_messages.string_of_msg Help)
-            myOwnUrl
-        in
-        ignore msg
-(*         self#showDialog msg *)
-      with
-      | Hbugs_misc.Malformed_URL url ->
-          self#showDialog
-            (sprintf
-              "Handshake with local HTTP daemon failed, Invalid URL: \"%s\""
-              url)
-      | Hbugs_misc.Malformed_HTTP_response res ->
-          self#showDialog
-            (sprintf
-    "Handshake with local HTTP daemon failed, can't parse HTTP response: \"%s\""
-              res)
-      | (Unix.Unix_error _) as e ->
-          self#showDialog
-            (sprintf
-              "Handshake with local HTTP daemon failed, can't connect: \"%s\""
-              (Printexc.to_string e))
-
-    method private testBroker () =
-      self#sendReq ~msg:Help
-        (function
-          | Usage _ -> ()
-          | unexpected_msg ->
-              self#showDialog
-                (sprintf
-                  "Handshake with HBugs Broker failed, unexpected message:\n%s"
-                  (Hbugs_messages.string_of_msg unexpected_msg)))
-
-    method registerToBroker () =
-      self#sendReq ~msg:(Register_client (myOwnId, myOwnUrl))
-        (function
-          | Client_registered broker_id ->
-              brokerId <- Some broker_id;
-(*
-              self#showDialog
-                (sprintf "Client %s registered @ broker %s" myOwnId broker_id)
-*)
-          | unexpected_msg ->
-              self#showDialog
-                (sprintf "Client NOT registered, unexpected message:\n%s"
-                  (Hbugs_messages.string_of_msg unexpected_msg)))
-
-    method unregisterFromBroker () =
-      self#sendReq ~wait:true ~msg:(Unregister_client myOwnId)
-        self#showMsgInDialog
-
-    method stateChange new_state =
-      self#sendReq
-        ~msg:(State_change (myOwnId, new_state))
-        (function
-          | State_accepted _ ->
-              mainWindow#hintsCList#clear ();
-              hints <- []
-          | unexpected_msg ->
-              self#showDialog
-                (sprintf "State NOT accepted by Hbugs, unexpected message:\n%s"
-                  (Hbugs_messages.string_of_msg unexpected_msg)))
-
-    method hint = List.nth hints
-
-    method private listTutors () =
-        (* wait is set to true just to make sure that after invoking listTutors
-        "availableTutors" is correctly filled *)
-      self#sendReq ~wait:true ~msg:(List_tutors myOwnId)
-        (function
-          | Tutor_list (_, descriptions) ->
-              availableTutors <-  (* sort accordingly to tutor description *)
-                List.sort (fun (a,b) (c,d) -> compare (b,a) (d,c)) descriptions;
-              selectedTutors <- [];
-              subscribeWindow#tutorsCList#clear ();
-              List.iter
-                (fun (id, dsc) ->
-                  ignore (subscribeWindow#tutorsCList#append [id; dsc]))
-                availableTutors
-          | unexpected_msg ->
-              self#showDialog
-                (sprintf "Can't list tutors, unexpected message:\n%s"
-                  (Hbugs_messages.string_of_msg unexpected_msg)))
-
-      (* low level used by subscribeSelected and subscribeAll *)
-    method private subscribe' tutors_id =
-      self#sendReq ~msg:(Subscribe (myOwnId, tutors_id))
-        (function
-          | (Subscribed (_, subscribedTutors)) as msg ->
-              let sort = List.sort compare in
-              mainWindow#subscriptionCList#clear ();
-              List.iter
-                (fun tutor_id ->
-                  ignore
-                    (mainWindow#subscriptionCList#append
-                      [ try
-                          List.assoc tutor_id availableTutors;
-                        with Not_found -> assert false ]))
-                tutors_id;
-              subscribeWindow#subscribeWindow#misc#hide ();
-              if sort subscribedTutors <> sort tutors_id then
-                self#showDialog
-                  (sprintf "Subscription mismatch\n: %s"
-                    (Hbugs_messages.string_of_msg msg))
-          | unexpected_msg ->
-              mainWindow#subscriptionCList#clear ();
-              self#showDialog
-                (sprintf "Subscription FAILED, unexpected message:\n%s"
-                  (Hbugs_messages.string_of_msg unexpected_msg)))
-
-    method private subscribeSelected () = self#subscribe' selectedTutors
-
-    method subscribeAll () =
-      self#listTutors ();  (* this fills 'availableTutors' field *)
-      self#subscribe' (List.map fst availableTutors)
-
-    method private quit () =
-      self#unregisterFromBroker ();
-      GMain.Main.quit ()
-
-      (** enable/disable debugging *)
-    method private setDebug value = debug <- value
-
-    method private reconfigDebuggingButtons =
-      List.iter (* debug value changed, reconfigure buttons *)
-        (fun (b: GObj.misc_ops) -> if debug then b#show () else b#hide ())
-        self#debugButtons;
-    
-    method private toggleDebug () =
-      self#setDebug (not debug);
-      self#reconfigDebuggingButtons
-
-  end
-;;
-
diff --git a/helm/hbugs/client/hbugs_client.mli b/helm/hbugs/client/hbugs_client.mli
deleted file mode 100644 (file)
index cf7ebc2..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-open Hbugs_types
-
-exception Invalid_URL of string
-
-class hbugsClient :
-  ?use_hint_callback: (hint -> unit) ->
-  unit ->
-    object
-
-      method show : unit -> unit
-      method hide : unit -> unit
-
-      method setUseHintCallback : (hint -> unit) -> unit
-      method registerToBroker : unit -> unit
-      method unregisterFromBroker : unit -> unit
-      method subscribeAll : unit -> unit
-
-      method stateChange : state option -> unit
-
-        (** @return an hint by index *)
-      method hint : int -> hint
-
-    end
-
diff --git a/helm/hbugs/client/hbugs_gui.glade b/helm/hbugs/client/hbugs_gui.glade
deleted file mode 100644 (file)
index 8aab957..0000000
+++ /dev/null
@@ -1,661 +0,0 @@
-<?xml version="1.0"?>
-<GTK-Interface>
-
-<project>
-  <name>hbugs_gui</name>
-  <program_name>hbugs_gui</program_name>
-  <directory></directory>
-  <source_directory>src</source_directory>
-  <pixmaps_directory>pixmaps</pixmaps_directory>
-  <language>C</language>
-  <gnome_support>False</gnome_support>
-  <gettext_support>False</gettext_support>
-</project>
-
-<widget>
-  <class>GtkWindow</class>
-  <name>hbugsMainWindow</name>
-  <visible>False</visible>
-  <title>Hbugs: your personal proof trainer!</title>
-  <type>GTK_WINDOW_TOPLEVEL</type>
-  <position>GTK_WIN_POS_NONE</position>
-  <modal>False</modal>
-  <allow_shrink>False</allow_shrink>
-  <allow_grow>True</allow_grow>
-  <auto_shrink>False</auto_shrink>
-
-  <widget>
-    <class>GtkVBox</class>
-    <name>vbox1</name>
-    <homogeneous>False</homogeneous>
-    <spacing>0</spacing>
-
-    <widget>
-      <class>GtkMenuBar</class>
-      <name>menubar</name>
-      <shadow_type>GTK_SHADOW_OUT</shadow_type>
-      <child>
-       <padding>0</padding>
-       <expand>False</expand>
-       <fill>False</fill>
-      </child>
-
-      <widget>
-       <class>GtkMenuItem</class>
-       <name>toolsMenu</name>
-       <label>Tools</label>
-       <right_justify>False</right_justify>
-
-       <widget>
-         <class>GtkMenu</class>
-         <name>toolsMenu_menu</name>
-
-         <widget>
-           <class>GtkCheckMenuItem</class>
-           <name>toggleDebuggingMenuItem</name>
-           <label>Debugging</label>
-           <active>False</active>
-           <always_show_toggle>True</always_show_toggle>
-         </widget>
-       </widget>
-      </widget>
-    </widget>
-
-    <widget>
-      <class>GtkHBox</class>
-      <name>hbox4</name>
-      <homogeneous>False</homogeneous>
-      <spacing>2</spacing>
-      <child>
-       <padding>0</padding>
-       <expand>False</expand>
-       <fill>False</fill>
-      </child>
-
-      <widget>
-       <class>GtkLabel</class>
-       <name>label11</name>
-       <label>My URL:</label>
-       <justify>GTK_JUSTIFY_CENTER</justify>
-       <wrap>False</wrap>
-       <xalign>0.5</xalign>
-       <yalign>0.5</yalign>
-       <xpad>0</xpad>
-       <ypad>0</ypad>
-       <child>
-         <padding>0</padding>
-         <expand>False</expand>
-         <fill>False</fill>
-       </child>
-      </widget>
-
-      <widget>
-       <class>GtkEntry</class>
-       <name>clientUrlEntry</name>
-       <tooltip>Local HTTP daemon URL</tooltip>
-       <can_focus>True</can_focus>
-       <editable>False</editable>
-       <text_visible>True</text_visible>
-       <text_max_length>0</text_max_length>
-       <text></text>
-       <child>
-         <padding>0</padding>
-         <expand>True</expand>
-         <fill>True</fill>
-       </child>
-      </widget>
-
-      <widget>
-       <class>GtkButton</class>
-       <name>startLocalHttpDaemonButton</name>
-       <tooltip>Start the local HTTP daemon listening on the specified URL</tooltip>
-       <can_focus>True</can_focus>
-       <label>Start!</label>
-       <relief>GTK_RELIEF_NORMAL</relief>
-       <child>
-         <padding>0</padding>
-         <expand>False</expand>
-         <fill>False</fill>
-       </child>
-      </widget>
-
-      <widget>
-       <class>GtkButton</class>
-       <name>testLocalHttpDaemonButton</name>
-       <can_focus>True</can_focus>
-       <label>Test!</label>
-       <relief>GTK_RELIEF_NORMAL</relief>
-       <child>
-         <padding>0</padding>
-         <expand>False</expand>
-         <fill>False</fill>
-       </child>
-      </widget>
-    </widget>
-
-    <widget>
-      <class>GtkVBox</class>
-      <name>vbox4</name>
-      <homogeneous>False</homogeneous>
-      <spacing>0</spacing>
-      <child>
-       <padding>0</padding>
-       <expand>False</expand>
-       <fill>True</fill>
-      </child>
-
-      <widget>
-       <class>GtkHBox</class>
-       <name>hbox1</name>
-       <homogeneous>False</homogeneous>
-       <spacing>2</spacing>
-       <child>
-         <padding>0</padding>
-         <expand>False</expand>
-         <fill>False</fill>
-       </child>
-
-       <widget>
-         <class>GtkLabel</class>
-         <name>label1</name>
-         <label>Broker:</label>
-         <justify>GTK_JUSTIFY_CENTER</justify>
-         <wrap>False</wrap>
-         <xalign>0.5</xalign>
-         <yalign>0.5</yalign>
-         <xpad>0</xpad>
-         <ypad>0</ypad>
-         <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>False</fill>
-         </child>
-       </widget>
-
-       <widget>
-         <class>GtkEntry</class>
-         <name>brokerUrlEntry</name>
-         <tooltip>HBugs broker URL</tooltip>
-         <can_focus>True</can_focus>
-         <editable>False</editable>
-         <text_visible>True</text_visible>
-         <text_max_length>0</text_max_length>
-         <text></text>
-         <child>
-           <padding>0</padding>
-           <expand>True</expand>
-           <fill>True</fill>
-         </child>
-       </widget>
-
-       <widget>
-         <class>GtkButton</class>
-         <name>testBrokerButton</name>
-         <can_focus>True</can_focus>
-         <label>Test!</label>
-         <relief>GTK_RELIEF_NORMAL</relief>
-         <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>False</fill>
-         </child>
-       </widget>
-      </widget>
-
-      <widget>
-       <class>GtkHBox</class>
-       <name>hbox2</name>
-       <homogeneous>False</homogeneous>
-       <spacing>2</spacing>
-       <child>
-         <padding>0</padding>
-         <expand>False</expand>
-         <fill>False</fill>
-       </child>
-
-       <widget>
-         <class>GtkLabel</class>
-         <name>label2</name>
-         <label>Client ID:</label>
-         <justify>GTK_JUSTIFY_CENTER</justify>
-         <wrap>False</wrap>
-         <xalign>0.5</xalign>
-         <yalign>0.5</yalign>
-         <xpad>0</xpad>
-         <ypad>0</ypad>
-         <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>False</fill>
-         </child>
-       </widget>
-
-       <widget>
-         <class>GtkLabel</class>
-         <name>clientIdLabel</name>
-         <label></label>
-         <justify>GTK_JUSTIFY_LEFT</justify>
-         <wrap>False</wrap>
-         <xalign>0.5</xalign>
-         <yalign>0.5</yalign>
-         <xpad>0</xpad>
-         <ypad>0</ypad>
-         <child>
-           <padding>0</padding>
-           <expand>True</expand>
-           <fill>True</fill>
-         </child>
-       </widget>
-
-       <widget>
-         <class>GtkButton</class>
-         <name>registerClientButton</name>
-         <can_focus>True</can_focus>
-         <label>Register</label>
-         <relief>GTK_RELIEF_NORMAL</relief>
-         <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>False</fill>
-         </child>
-       </widget>
-
-       <widget>
-         <class>GtkButton</class>
-         <name>unregisterClientButton</name>
-         <can_focus>True</can_focus>
-         <label>Unregister</label>
-         <relief>GTK_RELIEF_NORMAL</relief>
-         <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>False</fill>
-         </child>
-       </widget>
-      </widget>
-    </widget>
-
-    <widget>
-      <class>GtkVBox</class>
-      <name>vbox5</name>
-      <homogeneous>True</homogeneous>
-      <spacing>0</spacing>
-      <child>
-       <padding>0</padding>
-       <expand>True</expand>
-       <fill>True</fill>
-      </child>
-
-      <widget>
-       <class>GtkFrame</class>
-       <name>frame3</name>
-       <border_width>4</border_width>
-       <label>Subscriptions</label>
-       <label_xalign>0</label_xalign>
-       <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
-       <child>
-         <padding>0</padding>
-         <expand>True</expand>
-         <fill>True</fill>
-       </child>
-
-       <widget>
-         <class>GtkHBox</class>
-         <name>hbox6</name>
-         <homogeneous>False</homogeneous>
-         <spacing>0</spacing>
-
-         <widget>
-           <class>GtkScrolledWindow</class>
-           <name>scrolledwindow3</name>
-           <hscrollbar_policy>GTK_POLICY_ALWAYS</hscrollbar_policy>
-           <vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
-           <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
-           <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
-           <child>
-             <padding>0</padding>
-             <expand>True</expand>
-             <fill>True</fill>
-           </child>
-
-           <widget>
-             <class>GtkCList</class>
-             <name>subscriptionCList</name>
-             <can_focus>True</can_focus>
-             <columns>1</columns>
-             <column_widths>80</column_widths>
-             <selection_mode>GTK_SELECTION_SINGLE</selection_mode>
-             <show_titles>False</show_titles>
-             <shadow_type>GTK_SHADOW_IN</shadow_type>
-
-             <widget>
-               <class>GtkLabel</class>
-               <child_name>CList:title</child_name>
-               <name>label7</name>
-               <label>label7</label>
-               <justify>GTK_JUSTIFY_CENTER</justify>
-               <wrap>False</wrap>
-               <xalign>0.5</xalign>
-               <yalign>0.5</yalign>
-               <xpad>0</xpad>
-               <ypad>0</ypad>
-             </widget>
-           </widget>
-         </widget>
-
-         <widget>
-           <class>GtkButton</class>
-           <name>showSubscriptionWindowButton</name>
-           <can_focus>True</can_focus>
-           <label>Subscribe ...</label>
-           <relief>GTK_RELIEF_NORMAL</relief>
-           <child>
-             <padding>0</padding>
-             <expand>False</expand>
-             <fill>False</fill>
-           </child>
-         </widget>
-       </widget>
-      </widget>
-
-      <widget>
-       <class>GtkFrame</class>
-       <name>frame2</name>
-       <border_width>4</border_width>
-       <label>Hints</label>
-       <label_xalign>0</label_xalign>
-       <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
-       <child>
-         <padding>0</padding>
-         <expand>True</expand>
-         <fill>True</fill>
-       </child>
-
-       <widget>
-         <class>GtkVBox</class>
-         <name>vbox6</name>
-         <homogeneous>False</homogeneous>
-         <spacing>0</spacing>
-
-         <widget>
-           <class>GtkScrolledWindow</class>
-           <name>scrolledwindow2</name>
-           <width>400</width>
-           <hscrollbar_policy>GTK_POLICY_ALWAYS</hscrollbar_policy>
-           <vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
-           <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
-           <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
-           <child>
-             <padding>0</padding>
-             <expand>True</expand>
-             <fill>True</fill>
-           </child>
-
-           <widget>
-             <class>GtkCList</class>
-             <name>hintsCList</name>
-             <can_focus>True</can_focus>
-             <columns>1</columns>
-             <column_widths>80</column_widths>
-             <selection_mode>GTK_SELECTION_SINGLE</selection_mode>
-             <show_titles>False</show_titles>
-             <shadow_type>GTK_SHADOW_IN</shadow_type>
-
-             <widget>
-               <class>GtkLabel</class>
-               <child_name>CList:title</child_name>
-               <name>label6</name>
-               <label>label6</label>
-               <justify>GTK_JUSTIFY_CENTER</justify>
-               <wrap>False</wrap>
-               <xalign>0.5</xalign>
-               <yalign>0.5</yalign>
-               <xpad>0</xpad>
-               <ypad>0</ypad>
-             </widget>
-           </widget>
-         </widget>
-       </widget>
-      </widget>
-    </widget>
-
-    <widget>
-      <class>GtkStatusbar</class>
-      <name>mainWindowStatusBar</name>
-      <child>
-       <padding>0</padding>
-       <expand>False</expand>
-       <fill>False</fill>
-      </child>
-    </widget>
-  </widget>
-</widget>
-
-<widget>
-  <class>GtkWindow</class>
-  <name>subscribeWindow</name>
-  <visible>False</visible>
-  <title>Hbugs: subscribe ...</title>
-  <type>GTK_WINDOW_TOPLEVEL</type>
-  <position>GTK_WIN_POS_NONE</position>
-  <modal>False</modal>
-  <allow_shrink>False</allow_shrink>
-  <allow_grow>True</allow_grow>
-  <auto_shrink>False</auto_shrink>
-
-  <widget>
-    <class>GtkVBox</class>
-    <name>vbox8</name>
-    <homogeneous>False</homogeneous>
-    <spacing>0</spacing>
-
-    <widget>
-      <class>GtkButton</class>
-      <name>listTutorsButton</name>
-      <can_focus>True</can_focus>
-      <label>Refresh</label>
-      <relief>GTK_RELIEF_NORMAL</relief>
-      <child>
-       <padding>0</padding>
-       <expand>False</expand>
-       <fill>False</fill>
-      </child>
-    </widget>
-
-    <widget>
-      <class>GtkScrolledWindow</class>
-      <name>scrolledwindow4</name>
-      <hscrollbar_policy>GTK_POLICY_ALWAYS</hscrollbar_policy>
-      <vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
-      <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
-      <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
-      <child>
-       <padding>0</padding>
-       <expand>True</expand>
-       <fill>True</fill>
-      </child>
-
-      <widget>
-       <class>GtkCList</class>
-       <name>tutorsCList</name>
-       <width>600</width>
-       <height>300</height>
-       <can_focus>True</can_focus>
-       <columns>2</columns>
-       <column_widths>205,80</column_widths>
-       <selection_mode>GTK_SELECTION_EXTENDED</selection_mode>
-       <show_titles>True</show_titles>
-       <shadow_type>GTK_SHADOW_IN</shadow_type>
-
-       <widget>
-         <class>GtkLabel</class>
-         <child_name>CList:title</child_name>
-         <name>label12</name>
-         <label>Id</label>
-         <justify>GTK_JUSTIFY_CENTER</justify>
-         <wrap>False</wrap>
-         <xalign>0.5</xalign>
-         <yalign>0.5</yalign>
-         <xpad>0</xpad>
-         <ypad>0</ypad>
-       </widget>
-
-       <widget>
-         <class>GtkLabel</class>
-         <child_name>CList:title</child_name>
-         <name>label13</name>
-         <label>Description</label>
-         <justify>GTK_JUSTIFY_CENTER</justify>
-         <wrap>False</wrap>
-         <xalign>0.5</xalign>
-         <yalign>0.5</yalign>
-         <xpad>0</xpad>
-         <ypad>0</ypad>
-       </widget>
-      </widget>
-    </widget>
-
-    <widget>
-      <class>GtkHBox</class>
-      <name>hbox5</name>
-      <homogeneous>False</homogeneous>
-      <spacing>0</spacing>
-      <child>
-       <padding>0</padding>
-       <expand>False</expand>
-       <fill>False</fill>
-      </child>
-
-      <widget>
-       <class>GtkButton</class>
-       <name>subscribeButton</name>
-       <can_focus>True</can_focus>
-       <label>Subscribe to Selected</label>
-       <relief>GTK_RELIEF_NORMAL</relief>
-       <child>
-         <padding>0</padding>
-         <expand>True</expand>
-         <fill>True</fill>
-       </child>
-      </widget>
-
-      <widget>
-       <class>GtkButton</class>
-       <name>subscribeAllButton</name>
-       <can_focus>True</can_focus>
-       <label>Subscribe to All</label>
-       <relief>GTK_RELIEF_NORMAL</relief>
-       <child>
-         <padding>0</padding>
-         <expand>True</expand>
-         <fill>True</fill>
-       </child>
-      </widget>
-    </widget>
-
-    <widget>
-      <class>GtkStatusbar</class>
-      <name>subscribeWindowStatusBar</name>
-      <child>
-       <padding>0</padding>
-       <expand>False</expand>
-       <fill>False</fill>
-      </child>
-    </widget>
-  </widget>
-</widget>
-
-<widget>
-  <class>GtkDialog</class>
-  <name>messageDialog</name>
-  <visible>False</visible>
-  <title>Message</title>
-  <type>GTK_WINDOW_TOPLEVEL</type>
-  <position>GTK_WIN_POS_CENTER</position>
-  <modal>True</modal>
-  <default_width>220</default_width>
-  <default_height>150</default_height>
-  <allow_shrink>True</allow_shrink>
-  <allow_grow>True</allow_grow>
-  <auto_shrink>False</auto_shrink>
-
-  <widget>
-    <class>GtkVBox</class>
-    <child_name>Dialog:vbox</child_name>
-    <name>dialogVbox1</name>
-    <homogeneous>False</homogeneous>
-    <spacing>0</spacing>
-
-    <widget>
-      <class>GtkHBox</class>
-      <child_name>Dialog:action_area</child_name>
-      <name>dialogAction_area1</name>
-      <border_width>2</border_width>
-      <homogeneous>True</homogeneous>
-      <spacing>5</spacing>
-      <child>
-       <padding>0</padding>
-       <expand>False</expand>
-       <fill>True</fill>
-       <pack>GTK_PACK_END</pack>
-      </child>
-
-      <widget>
-       <class>GtkButton</class>
-       <name>okDialogButton</name>
-       <can_focus>True</can_focus>
-       <label>OK</label>
-       <relief>GTK_RELIEF_NORMAL</relief>
-       <child>
-         <padding>0</padding>
-         <expand>False</expand>
-         <fill>True</fill>
-       </child>
-      </widget>
-    </widget>
-
-    <widget>
-      <class>GtkTable</class>
-      <name>table1</name>
-      <border_width>5</border_width>
-      <rows>1</rows>
-      <columns>1</columns>
-      <homogeneous>False</homogeneous>
-      <row_spacing>0</row_spacing>
-      <column_spacing>0</column_spacing>
-      <child>
-       <padding>0</padding>
-       <expand>True</expand>
-       <fill>True</fill>
-      </child>
-
-      <widget>
-       <class>GtkLabel</class>
-       <name>dialogLabel</name>
-       <label></label>
-       <justify>GTK_JUSTIFY_CENTER</justify>
-       <wrap>True</wrap>
-       <xalign>0.5</xalign>
-       <yalign>0.5</yalign>
-       <xpad>0</xpad>
-       <ypad>0</ypad>
-       <child>
-         <left_attach>0</left_attach>
-         <right_attach>1</right_attach>
-         <top_attach>0</top_attach>
-         <bottom_attach>1</bottom_attach>
-         <xpad>0</xpad>
-         <ypad>0</ypad>
-         <xexpand>True</xexpand>
-         <yexpand>True</yexpand>
-         <xshrink>False</xshrink>
-         <yshrink>False</yshrink>
-         <xfill>True</xfill>
-         <yfill>True</yfill>
-       </child>
-      </widget>
-    </widget>
-  </widget>
-</widget>
-
-</GTK-Interface>
diff --git a/helm/hbugs/client/main.ml b/helm/hbugs/client/main.ml
deleted file mode 100644 (file)
index e694613..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_common;;
-open Printf;;
-
-let client =
-  new Hbugs_client.hbugsClient
-    ~use_hint_callback:
-      (fun hint ->
-        prerr_endline (sprintf "Using hint: %s" (string_of_hint hint)))
-    ()
-in
-client#show ();
-GtkThread.main ()
-
diff --git a/helm/hbugs/common/.cvsignore b/helm/hbugs/common/.cvsignore
deleted file mode 100644 (file)
index a3cccbc..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-*.cmi
-*.cmo
-*.cma
-*.cmx
-*.o
-*.a
diff --git a/helm/hbugs/common/.depend b/helm/hbugs/common/.depend
deleted file mode 100644 (file)
index 3669054..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-hbugs_common.cmo: hbugs_types.cmo hbugs_common.cmi 
-hbugs_common.cmx: hbugs_types.cmx hbugs_common.cmi 
-hbugs_id_generator.cmo: hbugs_id_generator.cmi 
-hbugs_id_generator.cmx: hbugs_id_generator.cmi 
-hbugs_messages.cmo: hbugs_misc.cmi hbugs_types.cmo hbugs_messages.cmi 
-hbugs_messages.cmx: hbugs_misc.cmx hbugs_types.cmx hbugs_messages.cmi 
-hbugs_misc.cmo: hbugs_misc.cmi 
-hbugs_misc.cmx: hbugs_misc.cmi 
-hbugs_common.cmi: hbugs_types.cmo 
-hbugs_id_generator.cmi: hbugs_types.cmo 
-hbugs_messages.cmi: hbugs_types.cmo 
diff --git a/helm/hbugs/common/Makefile b/helm/hbugs/common/Makefile
deleted file mode 100644 (file)
index 94c354f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-REQUIRES = helm-xml helm-pxp pcre pxp http
-COMMONOPTS = -package "$(REQUIRES)" -pp camlp4o
-OCAMLFIND = ocamlfind
-OCAMLC = $(OCAMLFIND) ocamlc $(COMMONOPTS)
-OCAMLOPT = $(OCAMLFIND) ocamlopt $(COMMONOPTS)
-OCAMLDEP = $(OCAMLFIND) ocamldep $(COMMONOPTS)
-OCAMLDOC =     \
-       ocamldoc        \
-               $(shell $(OCAMLFIND) query -i-format helm-xml)  \
-               $(shell $(OCAMLFIND) query -i-format helm-pxp)  \
-               $(shell $(OCAMLFIND) query -i-format pcre)      \
-               $(shell $(OCAMLFIND) query -i-format pxp-engine)        \
-               $(shell $(OCAMLFIND) query -i-format threads)   \
-               $(shell $(OCAMLFIND) query -i-format http)
-MODULES =      \
-       hbugs_types threadSafe hbugs_misc       \
-       hbugs_common hbugs_id_generator hbugs_messages
-
-OBJS = $(patsubst %,%.cmo,$(MODULES))
-OBJSOPT = $(patsubst %,%.cmx,$(MODULES))
-DEPS = $(shell $(OCAMLFIND) query -recursive -predicates byte -format "%d/%a" $(REQUIRES))
-DEPSOPT = $(shell $(OCAMLFIND) query -recursive -predicates native -format "%d/%a" $(REQUIRES))
-
-all: byte
-byte: $(OBJS)
-opt: $(OBJSOPT)
-world: byte opt
-
-hbugs_common.dot: *.ml *.mli
-       $(OCAMLDOC) -dot -o $@ $^
-
-include .depend
-depend:
-       $(OCAMLDEP) *.ml *.mli > .depend
-
-%.cmi: %.mli
-       $(OCAMLC) -c $<
-%.cmo: %.ml %.cmi
-       $(OCAMLC) -c $<
-%.cmx: %.ml %.cmi
-       $(OCAMLOPT) -c $<
-include Makefile.overrides
-$(OBJS): $(DEPS)
-$(OBJSOPT): $(DEPSOPT)
-
-distclean: clean
-clean:
-       rm -f *.cm[aiox] *.o $(NAME){,.opt}
-
-.PHONY: all byte opt world depend clean
-
diff --git a/helm/hbugs/common/Makefile.overrides b/helm/hbugs/common/Makefile.overrides
deleted file mode 100644 (file)
index f1ce521..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-hbugs_types.cmi hbugs_types.cmo: hbugs_types.ml
-       $(OCAMLC) -c $<
-threadSafe.cmi threadSafe.cmo: threadSafe.ml
-       $(OCAMLC) -package threads -c $<
-threadSafe.cmx: threadSafe.ml threadSafe.cmi
-       $(OCAMLOPT) -package threads -c $<
diff --git a/helm/hbugs/common/hbugs_common.ml b/helm/hbugs/common/hbugs_common.ml
deleted file mode 100644 (file)
index 3b19cee..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_types;;
-open Printf;;
-
-let rec string_of_hint = function
-  | Use_ring_Luke -> "Use Ring, Luke!"
-  | Use_fourier_Luke -> "Use Fourier, Luke!"
-  | Use_reflexivity_Luke -> "Use reflexivity, Luke!"
-  | Use_symmetry_Luke -> "Use symmetry, Luke!"
-  | Use_assumption_Luke -> "Use assumption, Luke!"
-  | Use_contradiction_Luke -> "Use contradiction, Luke!"
-  | Use_exists_Luke -> "Use exists, Luke!"
-  | Use_split_Luke -> "Use split, Luke!"
-  | Use_left_Luke -> "Use left, Luke!"
-  | Use_right_Luke -> "Use right, Luke!"
-  | Use_apply_Luke term -> sprintf "Apply %s, Luke!" term
-  | Hints hints -> String.concat "; " (List.map string_of_hint hints)
-;;
-
diff --git a/helm/hbugs/common/hbugs_common.mli b/helm/hbugs/common/hbugs_common.mli
deleted file mode 100644 (file)
index 2d51075..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_types;;
-
-val string_of_hint: hint -> string
-
diff --git a/helm/hbugs/common/hbugs_id_generator.ml b/helm/hbugs/common/hbugs_id_generator.ml
deleted file mode 100644 (file)
index f535f47..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-let _ = Random.self_init ()
-
-let id_length = 32
-let min_ascii = 33
-let max_ascii = 126
-  (* characters forbidden inside an XML attribute value. Well, '>' and '''
-  aren't really forbidden, but are listed here ... just to be sure *)
-let forbidden_chars = (* i.e. [ '"'; '&'; '\''; '<'; '>' ] *)
-  [ 34; 38; 39; 60; 62 ]  (* assumption: is sorted! *)
-let chars_range = max_ascii - min_ascii + 1 - (List.length forbidden_chars)
-
-  (* return a random id char c such that 
-      (min_ascii <= Char.code c) &&
-      (Char.code c <= max_ascii) &&
-      (not (List.mem (Char.code c) forbidden_chars))
-  *)
-let random_id_char () =
-  let rec nth_char ascii shifts = function
-    | [] -> Char.chr (ascii + shifts)
-    | hd::tl when ascii + shifts < hd -> Char.chr (ascii + shifts)
-    | hd::tl (* when ascii + shifts >= hd *) -> nth_char ascii (shifts + 1) tl
-  in
-  nth_char (Random.int chars_range + min_ascii) 0 forbidden_chars
-
-  (* return a random id string which have length id_length *)
-let new_id () =
-  let str = String.create id_length in
-  for i = 0 to id_length - 1 do
-    String.set str i (random_id_char ())
-  done;
-  str
-
-let new_broker_id = new_id
-let new_client_id = new_id
-let new_musing_id = new_id
-let new_tutor_id = new_id
-
diff --git a/helm/hbugs/common/hbugs_id_generator.mli b/helm/hbugs/common/hbugs_id_generator.mli
deleted file mode 100644 (file)
index dad0c93..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_types;;
-
-val new_broker_id: unit -> broker_id
-val new_client_id: unit -> client_id
-val new_musing_id: unit -> musing_id
-val new_tutor_id: unit -> tutor_id
-
diff --git a/helm/hbugs/common/hbugs_messages.ml b/helm/hbugs/common/hbugs_messages.ml
deleted file mode 100644 (file)
index b7e6f5d..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_types;;
-open Printf;;
-open Pxp_document;;
-open Pxp_dtd;;
-open Pxp_types;;
-open Pxp_yacc;;
-
-let debug = true;;
-
-exception Attribute_not_found of string;;
-exception Empty_node;;  (** found a node with no _element_ children *)
-exception No_element_found of string;;
-exception Parse_error of string * string;;  (* parsing subject, reason *)
-exception Unexpected_message of message;;
-
-let is_xml_element n = match n#node_type with T_element _ -> true | _ -> false
-let get_attr node name =
-  try
-    (match node#attribute name with
-    | Value s -> s
-    | _ -> raise Not_found)
-  with Not_found -> raise (Attribute_not_found name)
-let assert_element n name =
-  match n#node_type with
-  | T_element n when n = name ->
-      ()
-  | _ -> raise (Parse_error ("", "Expected node: " ^ name))
-
-  (** given a string representation of a proof asistant state (e.g. the first
-  child of the XML root of a State_change or Start_musing message), build from
-  it an HBugs view of a proof assistant state *)
-let parse_state (root: ('a node extension as 'a) node) =
-  if (List.filter is_xml_element root#sub_nodes) = [] then
-    raise Empty_node;
-  let buf = Buffer.create 10240 in
-  let node_to_string (node: ('a node extension as 'a) node) =
-    Buffer.clear buf;
-    node#write (`Out_buffer buf) `Enc_utf8;
-    let res = Buffer.contents buf in
-    Buffer.clear buf;
-    res
-  in
-  let (goal_node, type_node, body_node) =
-    try
-      (find_element "CurrentGoal" root,
-       find_element "ConstantType" root,
-       find_element "CurrentProof" root)
-    with Not_found ->
-      raise (Parse_error ("", "Malformed HBugs status XML document"))
-  in
-  assert_element root "gTopLevelStatus";
-  assert_element goal_node "CurrentGoal";
-  assert_element type_node "ConstantType";
-  assert_element body_node "CurrentProof";
-  goal_node#write (`Out_buffer buf) `Enc_utf8;
-  let (type_string, body_string) =
-    (node_to_string type_node, node_to_string body_node)
-  in
-  let goal =
-    try
-      int_of_string (goal_node#data)
-    with Failure "int_of_string" ->
-      raise (Parse_error (goal_node#data, "can't parse goal"))
-  in
-  (type_string, body_string, goal)
-
-  (** parse an hint from an XML node, XML node should have type 'T_element _'
-  (the name is ignored), attributes on it are ignored *)
-let parse_hint node =
- let rec parse_hint_node node =
-   match node#node_type with
-   | T_element "ring" -> Use_ring_Luke
-   | T_element "fourier" -> Use_fourier_Luke
-   | T_element "reflexivity" -> Use_reflexivity_Luke
-   | T_element "symmetry" -> Use_symmetry_Luke
-   | T_element "assumption" -> Use_assumption_Luke
-   | T_element "contradiction" -> Use_contradiction_Luke
-   | T_element "exists" -> Use_exists_Luke
-   | T_element "split" -> Use_split_Luke
-   | T_element "left" -> Use_left_Luke
-   | T_element "right" -> Use_right_Luke
-   | T_element "apply" -> Use_apply_Luke node#data
-   | T_element "hints" ->
-       Hints
-        (List.map parse_hint_node (List.filter is_xml_element node#sub_nodes))
-   | _ -> assert false (* CSC: should this assert false be a raise something? *)
- in
-  match List.filter is_xml_element node#sub_nodes with
-     [node] -> parse_hint_node node
-   | _ -> assert false (* CSC: should this assert false be a raise something? *)
-
-let parse_hint_type n = n#data (* TODO parsare il possibile tipo di suggerimento *)
-let parse_tutor_dscs n =
-  List.map
-    (fun n -> (get_attr n "id", n#data))
-    (List.filter is_xml_element n#sub_nodes)
-let parse_tutor_ids node =
-  List.map
-    (fun n -> get_attr n "id") (List.filter is_xml_element node#sub_nodes)
-
-let tutors_sep = Pcre.regexp ",\\s*"
-
-let msg_of_string' s =
-  let root =  (* xml tree's root *)
-    parse_wfcontent_entity default_config (from_string s) default_spec
-  in
-  match root#node_type with
-
-    (* general purpose *)
-  | T_element "help" -> Help
-  | T_element "usage" -> Usage root#data
-  | T_element "exception" -> Exception (get_attr root "name", root#data)
-
-    (* client -> broker *)
-  | T_element "register_client" ->
-      Register_client (get_attr root "id", get_attr root "url")
-  | T_element "unregister_client" -> Unregister_client (get_attr root "id")
-  | T_element "list_tutors" -> List_tutors (get_attr root "id")
-  | T_element "subscribe" ->
-      Subscribe (get_attr root "id", parse_tutor_ids root)
-  | T_element "state_change" ->
-      let state_node =
-        try
-          Some (find_element ~deeply:false "gTopLevelStatus" root)
-        with Not_found -> None
-      in
-      State_change
-        (get_attr root "id",
-        match state_node with
-        | Some n -> (try Some (parse_state n) with Empty_node -> None)
-        | None -> None)
-  | T_element "wow" -> Wow (get_attr root "id")
-
-    (* tutor -> broker *)
-  | T_element "register_tutor" ->
-      let hint_node = find_element "hint_type" root in
-      let dsc_node = find_element "description" root in
-      Register_tutor
-        (get_attr root "id", get_attr root "url",
-        parse_hint_type hint_node, dsc_node#data)
-  | T_element "unregister_tutor" -> Unregister_tutor (get_attr root "id")
-  | T_element "musing_started" ->
-      Musing_started (get_attr root "id", get_attr root "musing_id")
-  | T_element "musing_aborted" ->
-      Musing_started (get_attr root "id", get_attr root "musing_id")
-  | T_element "musing_completed" ->
-      let main_node =
-        try
-          find_element "eureka" root
-        with Not_found -> find_element "sorry" root
-      in
-      Musing_completed
-        (get_attr root "id", get_attr root "musing_id",
-        (match main_node#node_type with
-        | T_element "eureka" ->
-            Eureka (parse_hint main_node)
-        | T_element "sorry" -> Sorry
-        | _ -> assert false)) (* can't be there, see 'find_element' above *)
-
-    (* broker -> client *)
-  | T_element "client_registered" -> Client_registered (get_attr root "id")
-  | T_element "client_unregistered" -> Client_unregistered (get_attr root "id")
-  | T_element "tutor_list" ->
-      Tutor_list (get_attr root "id", parse_tutor_dscs root)
-  | T_element "subscribed" ->
-      Subscribed (get_attr root "id", parse_tutor_ids root)
-  | T_element "state_accepted" ->
-      State_accepted
-        (get_attr root "id",
-        List.map
-          (fun n -> get_attr n "id")
-          (List.filter is_xml_element (find_element "stopped" root)#sub_nodes),
-        List.map
-          (fun n -> get_attr n "id")
-          (List.filter is_xml_element (find_element "started" root)#sub_nodes))
-  | T_element "hint" -> Hint (get_attr root "id", parse_hint root)
-
-    (* broker -> tutor *)
-  | T_element "tutor_registered" -> Tutor_registered (get_attr root "id")
-  | T_element "tutor_unregistered" -> Tutor_unregistered (get_attr root "id")
-  | T_element "start_musing" ->
-      let state_node =
-        try
-          find_element ~deeply:false "gTopLevelStatus" root
-        with Not_found -> raise (No_element_found "gTopLevelStatus")
-      in
-      Start_musing (get_attr root "id", parse_state state_node)
-  | T_element "abort_musing" ->
-      Abort_musing (get_attr root "id", get_attr root "musing_id")
-  | T_element "thanks" -> Thanks (get_attr root "id", get_attr root "musing_id")
-  | T_element "too_late" ->
-      Too_late (get_attr root "id", get_attr root "musing_id")
-
-  | _ -> raise (No_element_found s)
-
-let msg_of_string s =
-  try
-    msg_of_string' s
-  with e -> raise (Parse_error (s, Printexc.to_string e))
-
-let pp_state = function
-  | Some (type_string, body_string, goal) ->
-    (* ASSUMPTION: type_string and body_string are well formed XML document
-    contents (i.e. they don't contain heading <?xml ... ?> declaration nor
-    DOCTYPE one *)
-    "<gTopLevelStatus>\n" ^
-    (sprintf "<CurrentGoal>%d</CurrentGoal>\n" goal) ^
-    type_string ^ "\n" ^
-    body_string ^ "\n" ^
-    "</gTopLevelStatus>\n"
-  | None -> "<gTopLevelStatus />\n"
-
-let rec pp_hint = function
-  | Use_ring_Luke -> sprintf "<ring />"
-  | Use_fourier_Luke -> sprintf "<fourier />"
-  | Use_reflexivity_Luke -> sprintf "<reflexivity />"
-  | Use_symmetry_Luke -> sprintf "<symmetry />"
-  | Use_assumption_Luke -> sprintf "<assumption />"
-  | Use_contradiction_Luke -> sprintf "<contradiction />"
-  | Use_exists_Luke -> sprintf "<exists />"
-  | Use_split_Luke -> sprintf "<split />"
-  | Use_left_Luke -> sprintf "<left />"
-  | Use_right_Luke -> sprintf "<right />"
-  | Use_apply_Luke term -> sprintf "<apply>%s</apply>" term
-  | Hints hints ->
-      sprintf "<hints>\n%s\n</hints>"
-        (String.concat "\n" (List.map pp_hint hints))
-
-let pp_hint_type s = s   (* TODO pretty print hint_type *)
-let pp_tutor_dscs =
-  List.fold_left
-    (fun s (id, dsc) ->
-      sprintf "%s<tutor_dsc id=\"%s\">%s</tutor_dsc>" s id dsc)
-    ""
-let pp_tutor_ids =
-  List.fold_left (fun s id -> sprintf "%s<tutor id=\"%s\" />" s id) ""
-
-let string_of_msg = function
-  | Help -> "<help />"
-  | Usage usage_string -> sprintf "<usage>%s</usage>" usage_string
-  | Exception (name, value) ->
-      sprintf "<exception name=\"%s\">%s</exception>" name value
-  | Register_client (id, url) ->
-      sprintf "<register_client id=\"%s\" url=\"%s\" />" id url
-  | Unregister_client id -> sprintf "<unregister_client id=\"%s\" />" id
-  | List_tutors id -> sprintf "<list_tutors id=\"%s\" />" id
-  | Subscribe (id, tutor_ids) ->
-      sprintf "<subscribe id=\"%s\">%s</subscribe>"
-        id (pp_tutor_ids tutor_ids)
-  | State_change (id, state) ->
-      sprintf "<state_change id=\"%s\">%s</state_change>"
-        id (pp_state state)
-  | Wow id -> sprintf "<wow id=\"%s\" />" id
-  | Register_tutor (id, url, hint_type, dsc) ->
-      sprintf
-"<register_tutor id=\"%s\" url=\"%s\">
-<hint_type>%s</hint_type>
-<description>%s</description>
-</register_tutor>"
-        id url (pp_hint_type hint_type) dsc
-  | Unregister_tutor id -> sprintf "<unregister_tutor id=\"%s\" />" id
-  | Musing_started (id, musing_id) ->
-      sprintf "<musing_started id=\"%s\" musing_id=\"%s\" />" id musing_id
-  | Musing_aborted (id, musing_id) ->
-      sprintf "<musing_aborted id=\"%s\" musing_id=\"%s\" />" id musing_id
-  | Musing_completed (id, musing_id, result) ->
-      sprintf
-        "<musing_completed id=\"%s\" musing_id=\"%s\">%s</musing_completed>"
-        id musing_id
-        (match result with
-        | Sorry -> "<sorry />"
-        | Eureka hint -> sprintf "<eureka>%s</eureka>" (pp_hint hint))
-  | Client_registered id -> sprintf "<client_registered id=\"%s\" />" id
-  | Client_unregistered id -> sprintf "<client_unregistered id=\"%s\" />" id
-  | Tutor_list (id, tutor_dscs) ->
-      sprintf "<tutor_list id=\"%s\">%s</tutor_list>"
-        id (pp_tutor_dscs tutor_dscs)
-  | Subscribed (id, tutor_ids) ->
-      sprintf "<subscribed id=\"%s\">%s</subscribed>"
-        id (pp_tutor_ids tutor_ids)
-  | State_accepted (id, stop_ids, start_ids) ->
-      sprintf
-"<state_accepted id=\"%s\">
-<stopped>%s</stopped>
-<started>%s</started>
-</state_accepted>"
-        id
-        (String.concat ""
-          (List.map (fun id -> sprintf "<musing id=\"%s\" />" id) stop_ids))
-        (String.concat ""
-          (List.map (fun id -> sprintf "<musing id=\"%s\" />" id) start_ids))
-  | Hint (id, hint) -> sprintf "<hint id=\"%s\">%s</hint>" id (pp_hint hint)
-  | Tutor_registered id -> sprintf "<tutor_registered id=\"%s\" />" id
-  | Tutor_unregistered id -> sprintf "<tutor_unregistered id=\"%s\" />" id
-  | Start_musing (id, state) ->
-      sprintf "<start_musing id=\"%s\">%s</start_musing>"
-        id (pp_state (Some state))
-  | Abort_musing (id, musing_id) ->
-      sprintf "<abort_musing id=\"%s\" musing_id=\"%s\" />" id musing_id
-  | Thanks (id, musing_id) ->
-      sprintf "<thanks id=\"%s\" musing_id=\"%s\" />" id musing_id
-  | Too_late (id, musing_id) ->
-      sprintf "<too_late id=\"%s\" musing_id=\"%s\" />" id musing_id
-;;
-
-  (* debugging function that dump on stderr the sent messages *)
-let dump_msg msg =
-  if debug then
-    prerr_endline
-      (sprintf "<SENDING_MESSAGE>\n%s\n</SENDING_MESSAGE>"
-        (match msg with
-        | State_change _ -> "<state_change>omissis ...</state_change>"
-        | msg -> string_of_msg msg))
-;;
-
-let submit_req ~url msg =
-  dump_msg msg;
-  if debug then (prerr_string "Waiting for an answer ... "; flush stderr);
-  let res =
-    msg_of_string (Hbugs_misc.http_post ~body:(string_of_msg msg) url)
-  in
-  if debug then (prerr_string "answer received!\n"; flush stderr);
-  res
-;;
-let return_xml_msg body outchan =
-  Http_daemon.respond ~headers:["Content-Type", "text/xml"] ~body outchan
-;;
-let respond_msg msg outchan =
-  dump_msg msg;
-  return_xml_msg (string_of_msg msg) outchan
-(*   close_out outchan *)
-;;
-let respond_exc name value = respond_msg (Exception (name, value));;
-
diff --git a/helm/hbugs/common/hbugs_messages.mli b/helm/hbugs/common/hbugs_messages.mli
deleted file mode 100644 (file)
index 642c0b0..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_types;;
-
-exception Parse_error of string * string  (* parsing subject, reason *)
-exception Unexpected_message of message;;
-
-val msg_of_string: string -> message
-val string_of_msg: message -> string
-
-val submit_req: url:string -> message -> message
-  (** close outchan afterwards *)
-val respond_msg: message -> out_channel -> unit
-  (** close outchan afterwards *)
-  (* exception_name, exception_value, output_channel *)
-val respond_exc: string -> string -> out_channel -> unit
-
-(* TODO the below functions are for debugging only and shouldn't be exposed *)
-val parse_state:
-  ('a Pxp_document.node Pxp_document.extension as 'a) Pxp_document.node ->
-    (string * string * int)
-val pp_state: (string * string * int) option -> string
-
diff --git a/helm/hbugs/common/hbugs_misc.ml b/helm/hbugs/common/hbugs_misc.ml
deleted file mode 100644 (file)
index b826318..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Printf;;
-
-let rec hashtbl_remove_all tbl key =
-  if Hashtbl.mem tbl key then begin
-    Hashtbl.remove tbl key;
-    hashtbl_remove_all tbl key
-  end else
-    ()
-
-  (** follows cut and paste from zack's Http_client_smart module *)
-
-exception Malformed_URL of string;;
-exception Malformed_HTTP_response of string;;
-
-let bufsiz = 16384;;
-let tcp_bufsiz = 4096;;
-
-let body_sep_RE = Pcre.regexp "\r\n\r\n";;
-let http_scheme_RE = Pcre.regexp ~flags:[`CASELESS] "^http://";;
-let url_RE = Pcre.regexp "^([\\w.]+)(:(\\d+))?(/.*)?$";;
-let parse_url url =
-  try
-    let subs =
-      Pcre.extract ~rex:url_RE (Pcre.replace ~rex:http_scheme_RE url)
-    in
-    (subs.(1),
-    (if subs.(2) = "" then 80 else int_of_string subs.(3)),
-    (if subs.(4) = "" then "/" else subs.(4)))
-  with exc -> raise (Malformed_URL url)
-;;
-let get_body answer =
-  match Pcre.split ~rex:body_sep_RE answer with
-  | [_; body] -> body
-  | _ -> raise (Malformed_HTTP_response answer)
-;;
-
-let init_socket addr port =
-  let inet_addr = (Unix.gethostbyname addr).Unix.h_addr_list.(0) in
-  let sockaddr = Unix.ADDR_INET (inet_addr, port) in
-  let suck = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in
-  Unix.connect suck sockaddr;
-  let outchan = Unix.out_channel_of_descr suck in
-  let inchan = Unix.in_channel_of_descr suck in
-  (inchan, outchan)
-;;
-let rec retrieve inchan buf =
-  Buffer.add_string buf (input_line inchan ^ "\n");
-  retrieve inchan buf
-;;
-
-let http_get_iter_buf ~callback url =
-  let (address, port, path) = parse_url url in
-  let buf = String.create tcp_bufsiz in
-  let (inchan, outchan) = init_socket address port in
-  output_string outchan (sprintf "GET %s\r\n" path);
-  flush outchan;
-  (try
-    while true do
-      match input inchan buf 0 tcp_bufsiz with
-      | 0 -> raise End_of_file
-      | bytes when bytes = tcp_bufsiz ->  (* buffer full, no need to slice it *)
-          callback buf
-      | bytes when bytes < tcp_bufsiz ->  (* buffer not full, slice it *)
-          callback (String.sub buf 0 bytes)
-      | _ -> (* ( bytes < 0 ) || ( bytes > tcp_bufsiz ) *)
-          assert false
-    done
-  with End_of_file -> ());
-  close_in inchan (* close also outchan, same fd *)
-;;
-
-let http_get url =
-  let buf = Buffer.create (tcp_bufsiz * 10) in
-  http_get_iter_buf (fun data -> Buffer.add_string buf data) url;
-  get_body (Buffer.contents buf)
-;;
-
-let http_post ?(body = "") url =
-  let (address, port, path) = parse_url url in
-  let (inchan, outchan) = init_socket address port in
-  output_string outchan (sprintf "POST %s HTTP/1.0\r\n" path);
-  output_string outchan (sprintf "Content-Length: %d\r\n" (String.length body));
-  output_string outchan "\r\n";
-  output_string outchan body;
-  flush outchan;
-  let buf = Buffer.create bufsiz in
-  (try
-    retrieve inchan buf
-  with End_of_file -> close_in inchan); (* close also outchan, same fd *)
-  get_body (Buffer.contents buf)
-;;
-
diff --git a/helm/hbugs/common/hbugs_misc.mli b/helm/hbugs/common/hbugs_misc.mli
deleted file mode 100644 (file)
index b0ef597..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-  (** helpers *)
-
-  (** remove all bindings of a given key from an hash table *)
-val hashtbl_remove_all: ('a, 'b) Hashtbl.t -> 'a -> unit
-
-  (** follows cut and paste from zack's Http_client_smart module *)
-
-  (** can't parse an HTTP url *)
-exception Malformed_URL of string
-  (** can't parse an HTTP response *)
-exception Malformed_HTTP_response of string
-  (** HTTP GET request for a given url, return http response's body *)
-val http_get: string -> string
-  (** HTTP POST request for a given url, return http response's body,
- body argument, if specified, is sent as body along with request *)
-val http_post: ?body:string -> string -> string
-
-  (** perform an HTTP GET request and apply a given function on each
-  'slice' of HTTP response read from server *)
-val http_get_iter_buf: callback:(string -> unit) -> string -> unit
-
diff --git a/helm/hbugs/common/hbugs_types.ml b/helm/hbugs/common/hbugs_types.ml
deleted file mode 100644 (file)
index ebfa179..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-type broker_id = string
-type client_id = string
-type musing_id = string
-type tutor_id = string
-type tutor_dsc = tutor_id * string  (* tutor id, tutor description *)
-
-type state =  (* proof assitant's state: proof type, proof body, goal *)
-  string * string * int
-
-type hint =
-    (* tactics usage related hints *)
-  | Use_ring_Luke
-  | Use_fourier_Luke
-  | Use_reflexivity_Luke
-  | Use_symmetry_Luke
-  | Use_assumption_Luke
-  | Use_contradiction_Luke
-  | Use_exists_Luke
-  | Use_split_Luke
-  | Use_left_Luke
-  | Use_right_Luke
-  | Use_apply_Luke of string        (* use apply tactic on embedded term *)
-    (* hints list *)
-  | Hints of hint list
-
-type hint_type = string              (* TODO tipo di consiglio per l'utente *)
-
-type musing_result =
-  | Eureka of hint            (* extra information, if any, parsed depending
-                                on tutor's hint_type *)
-  | Sorry
-
-  (* for each message, first component is an ID that identify the sender *)
-type message =
-
-  (* general purpose *)
-  | Help  (* help request *)
-  | Usage of string (* help response *)       (* usage string *)
-  | Exception of string * string              (* name, value *)
-
-  (* client -> broker *)
-  | Register_client of client_id * string     (* client id, client url *)
-  | Unregister_client of client_id            (* client id *)
-  | List_tutors of client_id                  (* client_id *)
-  | Subscribe of client_id * tutor_id list    (* client id, tutor id list *)
-  | State_change of client_id * state option  (* client_id, new state *)
-  | Wow of client_id                          (* client_id *)
-
-  (* tutor -> broker *)
-  | Register_tutor of tutor_id * string * hint_type * string
-                                              (* tutor id, tutor url, hint type,
-                                              tutor description *)
-  | Unregister_tutor of tutor_id              (* tutor id *)
-  | Musing_started of tutor_id * musing_id    (* tutor id, musing id *)
-  | Musing_aborted of tutor_id * musing_id    (* tutor id, musing id *)
-  | Musing_completed of tutor_id * musing_id * musing_result
-                                              (* tutor id, musing id, result *)
-
-  (* broker -> client *)
-  | Client_registered of broker_id            (* broker id *)
-  | Client_unregistered of broker_id          (* broker id *)
-  | Tutor_list of broker_id * tutor_dsc list  (* broker id, tutor list *)
-  | Subscribed of broker_id * tutor_id list   (* broker id, tutor list *)
-  | State_accepted of broker_id * musing_id list * musing_id list
-                                              (* broker id, stopped musing ids,
-                                              started musing ids *)
-  | Hint of broker_id * hint                  (* broker id, hint *)
-
-  (* broker -> tutor *)
-  | Tutor_registered of broker_id             (* broker id *)
-  | Tutor_unregistered of broker_id           (* broker id *)
-  | Start_musing of broker_id * state         (* broker id, state *)
-  | Abort_musing of broker_id * musing_id     (* broker id, musing id *)
-  | Thanks of broker_id * musing_id           (* broker id, musing id *)
-  | Too_late of broker_id * musing_id         (* broker id, musing id *)
-
diff --git a/helm/hbugs/common/threadSafe.ml b/helm/hbugs/common/threadSafe.ml
deleted file mode 100644 (file)
index c09301d..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-let debug_print = let debug = false in fun s -> if debug then prerr_endline s;;
-
-class threadSafe =
-  object (self)
-
-    val mutex = Mutex.create ()
-
-      (** condition variable: 'no readers is currently reading' *)
-    val noReaders = Condition.create ()
-
-      (** readers count *)
-    val mutable readersCount = 0
-
-    method private incrReadersCount = (* internal, not exported *)
-      self#doCritical (lazy (
-        readersCount <- readersCount + 1
-      ))
-
-    method private decrReadersCount = (* internal, not exported *)
-      self#doCritical (lazy (
-        if readersCount > 0 then readersCount <- readersCount - 1;
-      ))
-
-    method private signalNoReaders =  (* internal, not exported *)
-      self#doCritical (lazy (
-        if readersCount = 0 then Condition.signal noReaders
-      ))
-
-    method private doCritical: 'a. 'a lazy_t -> 'a =
-      fun action ->
-        debug_print "<doCritical>";
-        (try
-          Mutex.lock mutex;
-          let res = Lazy.force action in
-          Mutex.unlock mutex;
-          debug_print "</doCritical>";
-          res
-        with e ->
-          Mutex.unlock mutex;
-          raise e);
-
-    method private doReader: 'a. 'a lazy_t -> 'a =
-      fun action ->
-        debug_print "<doReader>";
-        let cleanup () =
-          self#decrReadersCount;
-          self#signalNoReaders
-        in
-        self#incrReadersCount;
-        let res = (try Lazy.force action with e -> (cleanup (); raise e)) in
-        cleanup ();
-        debug_print "</doReader>";
-        res
-
-      (* TODO may starve!!!! is what we want or not? *)
-    method private doWriter: 'a. 'a lazy_t -> 'a =
-      fun action ->
-        debug_print "<doWriter>";
-        self#doCritical (lazy (
-          while readersCount > 0 do
-            Condition.wait noReaders mutex
-          done;
-          let res = Lazy.force action in
-          debug_print "</doWriter>";
-          res
-        ))
-
-  end
diff --git a/helm/hbugs/doc/.cvsignore b/helm/hbugs/doc/.cvsignore
deleted file mode 100644 (file)
index 743328e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.dia~
diff --git a/helm/hbugs/doc/hbugs.dia b/helm/hbugs/doc/hbugs.dia
deleted file mode 100644 (file)
index b1c4e64..0000000
Binary files a/helm/hbugs/doc/hbugs.dia and /dev/null differ
diff --git a/helm/hbugs/meta/.cvsignore b/helm/hbugs/meta/.cvsignore
deleted file mode 100644 (file)
index fcfb940..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-META.hbugs-common
-META.hbugs-client
-META.hbugs-thread-safe
diff --git a/helm/hbugs/meta/META.hbugs-client.in b/helm/hbugs/meta/META.hbugs-client.in
deleted file mode 100644 (file)
index b7308ea..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-requires="pcre pxp http hbugs-common"
-directory="@HBUGS_CLIENT_DIR@"
-archive(byte) = "hbugs_client_gui.cmo hbugs_client.cmo"
-archive(native) = "hbugs_client_gui.cmx hbugs_client.cmx"
diff --git a/helm/hbugs/meta/META.hbugs-common.in b/helm/hbugs/meta/META.hbugs-common.in
deleted file mode 100644 (file)
index e250303..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-requires="pcre pxp http"
-directory="@HBUGS_COMMON_DIR@"
-archive(byte) = "hbugs_types.cmo hbugs_misc.cmo hbugs_common.cmo hbugs_id_generator.cmo hbugs_messages.cmo"
-archive(native) = "hbugs_types.cmx hbugs_misc.cmx hbugs_common.cmx hbugs_id_generator.cmx hbugs_messages.cmx"
diff --git a/helm/hbugs/meta/META.hbugs-thread-safe.in b/helm/hbugs/meta/META.hbugs-thread-safe.in
deleted file mode 100644 (file)
index 157c035..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-requires="threads"
-directory="@HBUGS_COMMON_DIR@"
-archive(byte) = "threadSafe.cmo"
-archive(native) = "threadSafe.cmx"
diff --git a/helm/hbugs/meta/Makefile b/helm/hbugs/meta/Makefile
deleted file mode 100644 (file)
index 4d855ef..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-META = META.hbugs-common META.hbugs-thread-safe META.hbugs-client
-all: $(META)
-opt:
-META.hbugs-common: META.hbugs-common.in
-       sed 's%@HBUGS_COMMON_DIR@%$(CURDIR)/../common%' < $< > $@
-META.hbugs-thread-safe: META.hbugs-thread-safe.in
-       sed 's%@HBUGS_COMMON_DIR@%$(CURDIR)/../common%' < $< > $@
-META.hbugs-client: META.hbugs-client.in
-       sed 's%@HBUGS_CLIENT_DIR@%$(CURDIR)/../client%' < $< > $@
-clean:
-       rm -f $(META)
-distclean: clean
diff --git a/helm/hbugs/test/.cvsignore b/helm/hbugs/test/.cvsignore
deleted file mode 100644 (file)
index d9ed070..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-*.cmi
-*.cmo
-*.cma
-*.cmx
-*.o
-*.a
-test_serialization
diff --git a/helm/hbugs/test/HBUGS_MESSAGES.xml b/helm/hbugs/test/HBUGS_MESSAGES.xml
deleted file mode 100644 (file)
index cf15dde..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-<test>
-
-    <!-- general purpose -->
-
-  <help />
-
-  <usage>usage string</usage>
-
-  <exception name='eccezione1'>corpo dell'exc</exception>
-
-    <!-- client -> broker -->
-
-  <register_client id='client_id' url='client_url' />
-
-  <unregister_client id='client_id' />
-
-  <list_tutors id='client_id' />
-
-  <subscribe id='client_id'>
-    <tutor id='tutor_id1' />
-    <tutor id='tutor_id2' />
-    <!-- .... -->
-    <tutor id='tutor_idN' />
-  </subscribe>
-
-  <state_change id='client_id'> <!-- new state received -->
-    <gTopLevelStatus>
-      <CurrentGoal>0</CurrentGoal>
-      <ConstantType>
-      </ConstantType>
-      <CurrentProof>
-      </CurrentProof>
-    </gTopLevelStatus>
-  </state_change>
-
-  <state_change id='client_id'> <!-- no state received: proof is completed -->
-    <gTopLevelStatus />
-  </state_change>
-
-  <wow id="client_id" />
-
-    <!-- tutor -> broker -->
-
-  <register_tutor id='tutor_id' url='tutor_url'>
-    <hint_type>
-      <!-- HINT TYPE -->
-    </hint_type>
-    <description>
-      descrizione del tutor
-    </description>
-  </register_tutor>
-
-  <unregister_tutor id='tutor_id' />
-
-  <musing_started id='tutor_id' musing_id='musing_id' />
-
-  <musing_aborted id='tutor_id' musing_id='musing_id' />
-
-  <musing_completed id='tutor_id' musing_id='musing_id'>
-    <sorry />
-  </musing_completed>
-
-  <musing_completed id='tutor_id' musing_id='musing_id'>
-    <eureka>
-      <ring />
-    </eureka>
-  </musing_completed>
-
-  <musing_completed id='tutor_id' musing_id='musing_id'>
-    <eureka>
-      <hints>
-        <ring />
-        <fourier />
-      </hints>
-    </eureka>
-  </musing_completed>
-
-    <!-- broker -> client -->
-
-  <client_registered id='broker_id' />
-
-  <client_unregistered id='broker_id' />
-
-  <tutor_list id='broker_id'>
-    <tutor_dsc id='tutor_id1'> description 1 </tutor_dsc>
-    <tutor_dsc id='tutor_id2'> description 2 </tutor_dsc>
-    <!-- ... -->
-    <tutor_dsc id='tutor_idN'> description N </tutor_dsc>
-  </tutor_list>
-
-  <subscribed id='broker_id'>
-    <tutor_dsc id='tutor_id1'> description 1 </tutor_dsc>
-    <tutor_dsc id='tutor_id2'> description 2 </tutor_dsc>
-    <!-- ... -->
-    <tutor_dsc id='tutor_idN'> description N </tutor_dsc>
-  </subscribed>
-
-  <state_accepted id='broker_id'>
-    <stopped>
-      <musing id='musing_id1' />
-      <!-- ... -->
-      <musing id='musing_idN' />
-    </stopped>
-    <started>
-      <musing id='musing_id1' />
-      <!-- ... -->
-      <musing id='musing_idM' />
-    </started>
-  </state_accepted>
-
-  <hint id='broker_id'>
-    <ring />
-  </hint>
-
-  <hint id='broker_id'>
-    <hints>
-      <ring />
-      <fourier />
-    </hints>
-  </hint>
-
-    <!-- broker -> tutor -->
-
-  <tutor_registered id='broker_id' />
-
-  <tutor_unregistered id='broker_id' />
-
-  <start_musing id='broker_id'>
-    <gTopLevelStatus>
-      <CurrentGoal>0</CurrentGoal>
-      <ConstantType>
-      </ConstantType>
-      <CurrentProof>
-      </CurrentProof>
-    </gTopLevelStatus>
-  </start_musing>
-
-  <abort_musing id='broker_id' musing_id='musing_id' />
-
-  <thanks id='broker_id' musing_id='musing_id' />
-
-  <too_late id='broker_id' musing_id='musing_id' />
-
-</test>
diff --git a/helm/hbugs/test/Makefile b/helm/hbugs/test/Makefile
deleted file mode 100644 (file)
index 0b3debf..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-all: test_serialization
-test_serialization: test_serialization.ml
-       OCAMLPATH="../meta" ocamlfind ocamlc -linkpkg -package hbugs-common -o test_serialization test_serialization.ml
-clean:
-       rm -f *.cm[io] test_serialization
diff --git a/helm/hbugs/test/test_serialization.ml b/helm/hbugs/test/test_serialization.ml
deleted file mode 100644 (file)
index 1afd743..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Pxp_document;;
-open Pxp_dtd;;
-open Pxp_types;;
-open Pxp_yacc;;
-
-open Printf;;
-
-let test_data = "HBUGS_MESSAGES.xml" ;;
-
-let test_message (n:('a Pxp_document.extension as 'b) Pxp_document.node as 'a) =
-  try
-    let msg_string =
-      let buf = Buffer.create 1000 in
-      n#write (`Out_buffer buf) `Enc_utf8;
-      Buffer.contents buf
-    in
-    let msg = Hbugs_messages.msg_of_string msg_string in
-    let pp = Hbugs_messages.string_of_msg msg in
-    let msg' = Hbugs_messages.msg_of_string pp in
-    if (msg <> msg') then
-      prerr_endline
-        (sprintf "Failure with msg %s"
-          (match n#node_type with T_element name -> name | _ -> assert false))
-  with e ->
-    prerr_endline
-      (sprintf "Failure with msg %s: uncaught exception %s"
-        (match n#node_type with T_element name -> name | _ -> assert false)
-        (Printexc.to_string e))
-;;
-
-let is_xml_element n =
-  match n#node_type with T_element _ -> true | _ -> false
-;;
-
-let root =
-  parse_wfcontent_entity default_config (from_file test_data) default_spec
-in
-printf "Testing all messages from %s ...\n" test_data; flush stdout;
-List.iter test_message (List.filter is_xml_element root#sub_nodes);
-printf "Done!\n"
-;;
-
diff --git a/helm/hbugs/tutors/.cvsignore b/helm/hbugs/tutors/.cvsignore
deleted file mode 100644 (file)
index 4b28799..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-*.cmi
-*.cmo
-*.cma
-*.cmx
-*.o
-*.a
-*.opt
-ring_tutor.ml
-fourier_tutor.ml
-reflexivity_tutor.ml
-symmetry_tutor.ml
-assumption_tutor.ml
-contradiction_tutor.ml
-exists_tutor.ml
-split_tutor.ml
-left_tutor.ml
-right_tutor.ml
-ring_tutor
-fourier_tutor
-reflexivity_tutor
-symmetry_tutor
-assumption_tutor
-contradiction_tutor
-exists_tutor
-split_tutor
-left_tutor
-right_tutor
-search_pattern_apply_tutor
diff --git a/helm/hbugs/tutors/INDEX.xml b/helm/hbugs/tutors/INDEX.xml
deleted file mode 100644 (file)
index 9de3517..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-<!--
-  Data used to fill template "hbugs_tutor.TPL.ml"
-
-  @ADDR@              tutor ip address
-  @PORT@              tutor tcp port
-  @TACTIC@            tactic to use (OCaml function, must have type
-                      ProofEngineTypes.tactic)
-  @HINT@              hint to be sent to client (content of Hbugs_types.Eureka
-                      type constructor, must have type Hbugs_types.hint, see
-                      hbugs_types.ml)
-  @HINT_TYPE@         hint type (3rd argument of Hbugs_types.Register_tutor type
-                      constructor, must have type Hbugs_types.hint_type)
-  @DESCRIPTION@       human readable tutor description
-
-  "source" attribute  corresponding OCaml source file
-
-  INVARIANT:  XML element name below are lowercase version of @TAGS@ used in
-              template
-
-  TODO: hint type isn't yet well formalized
--->
-
-<tutors>
-  <tutor source="ring_tutor.ml">
-    <addr>127.0.0.1</addr>
-    <port>50001</port>
-    <tactic>Ring.ring_tac</tactic>
-    <hint>Hbugs_types.Use_ring_Luke</hint>
-    <hint_type>Use Ring Luke</hint_type>
-    <description>Ring tutor</description>
-  </tutor>
-  <tutor source="fourier_tutor.ml">
-    <addr>127.0.0.1</addr>
-    <port>50002</port>
-    <tactic>FourierR.fourier_tac</tactic>
-    <hint>Hbugs_types.Use_fourier_Luke</hint>
-    <hint_type>Use Fourier Luke</hint_type>
-    <description>Fourier tutor</description>
-  </tutor>
-  <tutor source="reflexivity_tutor.ml">
-    <addr>127.0.0.1</addr>
-    <port>50003</port>
-    <tactic>EqualityTactics.reflexivity_tac</tactic>
-    <hint>Hbugs_types.Use_reflexivity_Luke</hint>
-    <hint_type>Use Reflexivity Luke</hint_type>
-    <description>Reflexivity tutor</description>
-  </tutor>
-  <tutor source="symmetry_tutor.ml">
-    <addr>127.0.0.1</addr>
-    <port>50004</port>
-    <tactic>EqualityTactics.symmetry_tac</tactic>
-    <hint>Hbugs_types.Use_symmetry_Luke</hint>
-    <hint_type>Use Symmetry Luke</hint_type>
-    <description>Symmetry tutor</description>
-  </tutor>
-  <tutor source="assumption_tutor.ml">
-    <addr>127.0.0.1</addr>
-    <port>50005</port>
-    <tactic>VariousTactics.assumption_tac</tactic>
-    <hint>Hbugs_types.Use_assumption_Luke</hint>
-    <hint_type>Use Assumption Luke</hint_type>
-    <description>Assumption tutor</description>
-  </tutor>
-  <tutor source="contradiction_tutor.ml">
-    <addr>127.0.0.1</addr>
-    <port>50006</port>
-    <tactic>NegationTactics.contradiction_tac</tactic>
-    <hint>Hbugs_types.Use_contradiction_Luke</hint>
-    <hint_type>Use Contradiction Luke</hint_type>
-    <description>Contradiction tutor</description>
-  </tutor>
-  <tutor source="exists_tutor.ml">
-    <addr>127.0.0.1</addr>
-    <port>50007</port>
-    <tactic>IntroductionTactics.exists_tac</tactic>
-    <hint>Hbugs_types.Use_exists_Luke</hint>
-    <hint_type>Use Exists Luke</hint_type>
-    <description>Exists tutor</description>
-  </tutor>
-  <tutor source="split_tutor.ml">
-    <addr>127.0.0.1</addr>
-    <port>50008</port>
-    <tactic>IntroductionTactics.split_tac</tactic>
-    <hint>Hbugs_types.Use_split_Luke</hint>
-    <hint_type>Use Split Luke</hint_type>
-    <description>Split tutor</description>
-  </tutor>
-  <tutor source="left_tutor.ml">
-    <addr>127.0.0.1</addr>
-    <port>50009</port>
-    <tactic>IntroductionTactics.left_tac</tactic>
-    <hint>Hbugs_types.Use_left_Luke</hint>
-    <hint_type>Use Left Luke</hint_type>
-    <description>Left tutor</description>
-  </tutor>
-  <tutor source="right_tutor.ml">
-    <addr>127.0.0.1</addr>
-    <port>50010</port>
-    <tactic>IntroductionTactics.right_tac</tactic>
-    <hint>Hbugs_types.Use_right_Luke</hint>
-    <hint_type>Use Right Luke</hint_type>
-    <description>Right tutor</description>
-  </tutor>
-  <tutor source="search_pattern_apply_tutor.ml">
-    <no_auto />
-    <addr>127.0.0.1</addr>
-    <port>50011</port>
-    <tactic>PrimitiveTactics.apply_tac</tactic>
-    <hint>Hbugs_types.Use_apply_Luke</hint>
-    <hint_type>Use Apply Luke (with argument)</hint_type>
-    <description>Search pattern apply tutor</description>
-  </tutor>
-</tutors>
-
diff --git a/helm/hbugs/tutors/Makefile b/helm/hbugs/tutors/Makefile
deleted file mode 100644 (file)
index a585b0c..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-METADIR = ../meta
-REQUIRES = threads hbugs-common helm-cic_proof_checking helm-getter \
-        helm-cic_textual_parser \
-        helm-mathql helm-mathql_interpreter helm-tactics  
-COMMONOPTS = -package "$(REQUIRES)" -predicates "$(PREDICATES)"
-OCAMLFIND = ocamlfind
-OCAMLC = $(OCAMLFIND) ocamlc $(COMMONOPTS)
-OCAMLOPT = $(OCAMLFIND) opt $(COMMONOPTS)
-LINK_OPTIONS = -thread -package threads -linkpkg
-TUTORS_TEMPLATE = hbugs_tutor.TPL.ml
-TUTORS_INDEX = INDEX.xml
-GENERATED_TUTORS = \
-       ring_tutor fourier_tutor reflexivity_tutor symmetry_tutor \
-       assumption_tutor contradiction_tutor exists_tutor split_tutor \
-       left_tutor right_tutor
-TUTORS = $(GENERATED_TUTORS) search_pattern_apply_tutor
-BUILD_TUTORS = ./build_tutors.ml
-CTL = ./sabba.sh
-TUTORS_OPT = $(patsubst %,%.opt,$(TUTORS))
-GENERATED_TUTORS_SRC = $(patsubst %,%.ml,$(GENERATED_TUTORS))
-COMMON = hbugs_deity.cmo hbugs_tutors_common.cmo
-COMMON_OPT = $(patsubst %.cmo,%.cmx,$(COMMON))
-
-DEPS = $(shell $(OCAMLFIND) query -recursive -predicates byte -format "%d/%a" $(REQUIRES))
-DEPSOPT = $(shell $(OCAMLFIND) query -recursive -predicates native -format "%d/%a" $(REQUIRES))
-
-all: byte
-world: byte opt
-byte: $(TUTORS)
-opt: $(TUTORS_OPT)
-start:
-       $(CTL) start
-stop:
-       $(CTL) stop
-
-$(GENERATED_TUTORS_SRC): $(TUTORS_TEMPLATE) $(TUTORS_INDEX)
-       $(BUILD_TUTORS)
-%_tutor: $(DEPS) $(COMMON) %_tutor.ml
-       $(OCAMLC) $(LINK_OPTIONS) -o $@ $(COMMON) $*_tutor.ml
-%_tutor.opt: $(DEPSOPT) $(COMMON_OPT) %_tutor.ml
-       $(OCAMLOPT) $(LINK_OPTIONS) -o $@ $(COMMON_OPT) $*_tutor.ml
-
-%.cmi: %.mli
-       $(OCAMLC) -c $<
-%.cmo: %.ml %.cmi
-       $(OCAMLC) -c $<
-%.cmx: %.ml %.cmi
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[aixo] *.cmxa *.[oa] $(TUTORS) $(TUTORS_OPT) $(GENERATED_TUTORS_SRC)
-distclean: clean
-       rm -f run/*
-.PHONY: all world byte opt clean start stop
-
diff --git a/helm/hbugs/tutors/build_tutors.ml b/helm/hbugs/tutors/build_tutors.ml
deleted file mode 100755 (executable)
index 73ac982..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/ocamlrun /usr/bin/ocaml
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-#use "topfind";;
-#require "pcre";;
-#require "pxp";;
-open Printf;;
-open Pxp_document;;
-open Pxp_dtd;;
-open Pxp_types;;
-open Pxp_yacc;;
-
-let index = "INDEX.xml" ;;
-let template = "hbugs_tutor.TPL.ml" ;;
-
-  (* apply a set of regexp substitutions specified as a list of pairs
-  <pattern,template> to a string *)
-let rec apply_subst ~fill s =
-  match fill with
-  | [] -> s
-  | (pat, templ)::rest ->
-      apply_subst ~fill:rest (Pcre.replace ~pat ~templ s)
-;;
-  (* fill a ~template file with substitutions specified in ~fill (see
-  apply_subst) and save output to ~output *)
-let fill_template ~template ~fill ~output =
-  printf "Creating %s ... " output; flush stdout;
-  let (ic, oc) = (open_in template, open_out output) in
-  let rec fill_template' () =
-    output_string oc ((apply_subst ~fill (input_line ic)) ^ "\n");
-    fill_template' ()
-  in
-  try
-    output_string oc (sprintf
-"(*
-  THIS CODE IS GENERATED - DO NOT MODIFY!
-
-  the source of this code is template \"%s\"
-  the template was filled with data read from \"%s\"
-*)\n"
-      template index);
-    fill_template' ()
-  with End_of_file ->
-    close_in ic;
-    close_out oc;
-    printf "done!\n"; flush stdout
-;;
-let parse_xml fname =
-  parse_wfdocument_entity default_config (from_file fname) default_spec
-;;
-let is_tutor node =
-  match node#node_type with T_element "tutor" -> true | _ -> false
-;;
-let is_element node =
-  match node#node_type with T_element _ -> true | _ -> false
-;;
-exception Skip;;
-let main () =
-  (parse_xml index)#root#iter_nodes
-    (fun node ->
-      try
-        (match node with
-        | node when is_tutor node ->
-            (try  (* skip hand-written tutors *)
-              ignore (find_element "no_auto" node);
-              raise Skip
-            with Not_found -> ());
-            let output =
-              try
-                (match node#attribute "source" with
-                | Value s -> s
-                | _ -> assert false)
-              with Not_found -> assert false
-            in
-            let fill =
-              List.map  (* create substitution list from index data *)
-                (fun node ->
-                  let name =  (* node name *)
-                    (match node#node_type with
-                    | T_element s -> s
-                    | _ -> assert false)
-                  in
-                  let value = node#data in  (* node value *)
-                  (sprintf "@%s@" (String.uppercase name),  (* pattern *)
-                   value))                                  (* substitution *)
-                (List.filter is_element node#sub_nodes)
-            in
-            fill_template ~fill ~template ~output
-        | _ -> ())
-      with Skip -> ())
-;;
-main ();;
-
diff --git a/helm/hbugs/tutors/hbugs_deity.ml b/helm/hbugs/tutors/hbugs_deity.ml
deleted file mode 100644 (file)
index ba6caa4..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-exception Can_t_kill of int * string ;; (* pid, reason *)
-
- (* perform an action inside a critical section controlled by given mutex *)
-let do_critical mutex =
-  fun action ->
-    try
-      Mutex.lock mutex;
-      let res = Lazy.force action in
-      Mutex.unlock mutex;
-      res 
-    with e -> Mutex.unlock mutex; raise e
-;;
-
-let kill_signal = Sys.sigusr2 ;;    (* signal used to kill children *)
-let chan = Event.new_channel () ;;  (* communication channel between threads *)
-
-  (* functions mangling "must die" PID list *)
-let (add_to_dead_threads_walking, remove_from_dead_threads_walking, must_die) =
-  let dead_threads_walking = ref [] in
-  let mutex = Mutex.create () in
-  let add pid = do_critical mutex (lazy (
-      dead_threads_walking := pid :: !dead_threads_walking;
-  )) in
-  let remove pid = do_critical mutex (lazy (
-      dead_threads_walking := List.filter ((<>) pid) !dead_threads_walking
-  )) in
-  let is_in pid = do_critical mutex (lazy (
-      List.exists ((=) pid) !dead_threads_walking
-  )) in
-  (add, remove, is_in)
-;;
-
-  (* "kill_signal" handler, check if current process must die, if this is the
-  case exits with Thread.exit *)
-ignore (Sys.signal kill_signal (Sys.Signal_handle
-  (fun signal ->
-    let myself = Unix.getpid () in
-    match signal with
-    | sg when (sg = kill_signal) && (must_die myself) ->
-        remove_from_dead_threads_walking myself;
-        prerr_endline "AYEEEEH!";
-        Thread.exit ()
-    | _ -> ())))
-;;
-
-  (* given a thread body (i.e. first argument of a Thread.create invocation)
-  return a new thread body which unblock the kill signal and send its pid to
-  parent over "chan" *)
-let wrap_thread body =
-  fun arg ->
-    ignore (Unix.sigprocmask Unix.SIG_UNBLOCK [ kill_signal ]);
-    Event.sync (Event.send chan (Unix.getpid ()));
-    body arg
-;;
-
-let creation_mutex = Mutex.create () ;;
-
-let create body arg =
-  do_critical creation_mutex (lazy (
-      ignore (Thread.create (wrap_thread body) arg);
-      Event.sync (Event.receive chan)
-  ))
-;;
-let kill pid =
-  add_to_dead_threads_walking pid;
-  try
-    Unix.kill pid kill_signal
-  with e -> raise (Can_t_kill (pid, Printexc.to_string e))
-;;
-
-  (* block kill signal in main process *)
-ignore (Unix.sigprocmask Unix.SIG_BLOCK [ kill_signal ]) ;;
-
diff --git a/helm/hbugs/tutors/hbugs_deity.mli b/helm/hbugs/tutors/hbugs_deity.mli
deleted file mode 100644 (file)
index f5f3dd5..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-exception Can_t_kill of int * string
-
-val create: ('a -> 'b) -> 'a -> int
-val kill: int -> unit
-
diff --git a/helm/hbugs/tutors/hbugs_tutor.TPL.ml b/helm/hbugs/tutors/hbugs_tutor.TPL.ml
deleted file mode 100644 (file)
index 07d20c9..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-module TutorDescription =
-  struct
-    let addr = "@ADDR@"
-    let port = @PORT@
-    let tactic = @TACTIC@
-    let hint = @HINT@
-    let hint_type = "@HINT_TYPE@"
-    let description = "@DESCRIPTION@"
-  end
-;;
-module Tutor = Hbugs_tutors_common.BuildTutor (TutorDescription) ;;
-Tutor.start () ;;
-
diff --git a/helm/hbugs/tutors/hbugs_tutors_common.ml b/helm/hbugs/tutors/hbugs_tutors_common.ml
deleted file mode 100644 (file)
index ca3de9f..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_types;;
-open Printf;;
-
-let broker_url = "localhost:49081/act";;
-
-let init_tutor = Hbugs_id_generator.new_tutor_id;;
-
-  (** register a tutor to broker *)
-let register_to_broker id url hint_type dsc =
-  try
-    let res =
-      Hbugs_messages.submit_req
-        ~url:broker_url (Register_tutor (id, url, hint_type, dsc))
-    in
-    (match res with
-    | Tutor_registered id ->
-        prerr_endline (sprintf "Tutor registered, broker id: %s" id);
-        id
-    | unexpected_msg ->
-        raise (Hbugs_messages.Unexpected_message unexpected_msg))
-  with e ->
-    failwith (sprintf "Can't register tutor to broker: uncaught exception: %s"
-      (Printexc.to_string e))
-;;
-  (** unregister a tutor from the broker *)
-let unregister_from_broker id =
-  let res = Hbugs_messages.submit_req ~url:broker_url (Unregister_tutor id) in
-  match res with
-  | Tutor_unregistered _ -> prerr_endline "Tutor unregistered!"
-  | unexpected_msg ->
-      failwith
-        (sprintf "Can't unregister from broker, received unexpected msg: %s"
-          (Hbugs_messages.string_of_msg unexpected_msg))
-;;
-
-  (* typecheck a loaded proof *)
-  (* TODO this is a cut and paste from gTopLevel.ml *)
-let typecheck_loaded_proof metasenv bo ty =
- let module T = CicTypeChecker in
-  ignore (
-   List.fold_left
-    (fun metasenv ((_,context,ty) as conj) ->
-      ignore (T.type_of_aux' metasenv context ty) ;
-      metasenv @ [conj]
-    ) [] metasenv) ;
-  ignore (T.type_of_aux' metasenv [] ty) ;
-  ignore (T.type_of_aux' metasenv [] bo)
-;;
-
-type xml_kind = Body | Type;;
-let mk_dtdname ~ask_dtd_to_the_getter dtd =
- if ask_dtd_to_the_getter then
-  Configuration.getter_url ^ "getdtd?uri=" ^ dtd
- else
-  "http://mowgli.cs.unibo.it/dtd/" ^ dtd
-;;  
-  (** this function must be the inverse function of GTopLevel.strip_xml_headings
-  *)
-let add_xml_headings ~kind s =
-  let dtdname = mk_dtdname ~ask_dtd_to_the_getter:true "cic.dtd" in
-  let root =
-    match kind with
-    | Body -> "CurrentProof"
-    | Type -> "ConstantType"
-  in
-  "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n" ^
-  "<!DOCTYPE " ^ root ^ " SYSTEM \""^ dtdname ^ "\">\n\n" ^
-  s
-;;
-
-let load_state (type_string, body_string, goal) =
-  prerr_endline "a0";
-  let ((tmp1, oc1), (tmp2, oc2)) =
-    (Filename.open_temp_file "" "", Filename.open_temp_file "" "")
-  in
-  prerr_endline "a1";
-  output_string oc1 (add_xml_headings ~kind:Type type_string);
-  output_string oc2 (add_xml_headings ~kind:Body body_string);
-  close_out oc1; close_out oc2;
-  prerr_endline (sprintf "Proof Type available in %s" tmp1);
-  prerr_endline (sprintf "Proof Body available in %s" tmp2);
-  let (proof, goal) =
-    prerr_endline "a2";
-    (match CicParser.obj_of_xml tmp1 (Some tmp2) with
-    | Cic.CurrentProof (_,metasenv,bo,ty,_) ->  (* TODO il primo argomento e' una URI valida o e' casuale? *)
-        prerr_endline "a3";
-        let uri = UriManager.uri_of_string "cic:/foo.con" in
-        prerr_endline "a4";
-        typecheck_loaded_proof metasenv bo ty;
-        prerr_endline "a5";
-        ((uri, metasenv, bo, ty), goal)
-    | _ -> assert false)
-  in
-  prerr_endline "a6";
-  Sys.remove tmp1; Sys.remove tmp2;
-  (proof, goal)
-
-(* tutors creation stuff from now on *)
-
-module type HbugsTutor =
-  sig
-    val start: unit -> unit
-  end
-
-module type HbugsTutorDescription =
-  sig
-    val addr: string
-    val port: int
-    val tactic: ProofEngineTypes.tactic
-    val hint: hint
-    val hint_type: hint_type
-    val description: string
-  end
-
-module BuildTutor (Dsc: HbugsTutorDescription) : HbugsTutor =
-  struct
-    let broker_id = ref None
-    let my_own_id = init_tutor ()
-    let my_own_addr, my_own_port = Dsc.addr, Dsc.port
-    let my_own_url = sprintf "%s:%d" my_own_addr my_own_port
-
-    let is_authenticated id =
-      match !broker_id with
-      | None -> false
-      | Some broker_id -> id = broker_id
-
-      (* thread who do the dirty work *)
-    let slave (state, musing_id) =
-      prerr_endline (sprintf "Hi, I'm the slave for musing %s" musing_id);
-      let (proof, goal) = load_state state in
-      let success =
-        try
-          ignore (Dsc.tactic (proof, goal));
-          true
-        with e -> false
-      in
-      let answer = 
-        Musing_completed
-          (my_own_id, musing_id, (if success then Eureka Dsc.hint else Sorry))
-      in
-      ignore (Hbugs_messages.submit_req ~url:broker_url answer);
-      prerr_endline
-        (sprintf "Bye, I've completed my duties (success = %b)" success)
-
-    let hbugs_callback =
-        (* hashtbl mapping musings ids to PID of threads doing the related (dirty)
-        work *)
-      let slaves = Hashtbl.create 17 in
-      let forbidden () =
-        prerr_endline "ignoring request from unauthorized broker";
-        Exception ("forbidden", "")
-      in
-      function  (* _the_ callback *)
-      | Start_musing (broker_id, state) ->
-          if is_authenticated broker_id then begin
-            prerr_endline "received Start_musing";
-            let new_musing_id = Hbugs_id_generator.new_musing_id () in
-            prerr_endline
-              (sprintf "starting a new musing (id = %s)" new_musing_id);
-(*             let slave_thread = Thread.create slave (state, new_musing_id) in *)
-            let slave_thread =
-              Hbugs_deity.create slave (state, new_musing_id)
-            in
-            Hashtbl.add slaves new_musing_id slave_thread;
-            Musing_started (my_own_id, new_musing_id)
-          end else  (* broker unauthorized *)
-            forbidden ();
-      | Abort_musing (broker_id, musing_id) ->
-          if is_authenticated broker_id then begin
-            (try  (* kill thread responsible for "musing_id" *)
-              let slave_thread = Hashtbl.find slaves musing_id in
-              Hbugs_deity.kill slave_thread;
-              Hashtbl.remove slaves musing_id
-            with
-            | Hbugs_deity.Can_t_kill (pid, reason) ->
-              prerr_endline (sprintf "Unable to kill slave %d: %s" pid reason)
-            | Not_found ->
-                prerr_endline (sprintf
-                  "Can't find slave corresponding to musing %s, can't kill it"
-                  musing_id));
-            Musing_aborted (my_own_id, musing_id)
-          end else (* broker unauthorized *)
-            forbidden ();
-      | unexpected_msg ->
-          Exception ("unexpected_msg",
-            Hbugs_messages.string_of_msg unexpected_msg)
-
-    let callback (req: Http_types.request) outchan =
-      try
-        let req_msg = Hbugs_messages.msg_of_string req#body in
-        let answer = hbugs_callback req_msg in
-        Http_daemon.respond ~body:(Hbugs_messages.string_of_msg answer) outchan
-      with Hbugs_messages.Parse_error (subj, reason) ->
-        Http_daemon.respond
-          ~body:(Hbugs_messages.string_of_msg
-            (Exception ("parse_error", reason)))
-          outchan
-
-    let main () =
-      try
-        Sys.catch_break true;
-        at_exit (fun () -> unregister_from_broker my_own_id);
-        broker_id :=
-          Some (register_to_broker
-            my_own_id my_own_url Dsc.hint_type Dsc.description);
-        Http_daemon.start'
-          ~addr:my_own_addr ~port:my_own_port ~mode:`Thread callback
-      with Sys.Break -> ()  (* exit nicely, invoking at_exit functions *)
-
-    let start = main
-
-  end
-
diff --git a/helm/hbugs/tutors/hbugs_tutors_common.mli b/helm/hbugs/tutors/hbugs_tutors_common.mli
deleted file mode 100644 (file)
index 927e31b..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Hbugs_types;;
-
-val broker_url: string
-
-val register_to_broker:
-  tutor_id -> string -> hint_type -> string ->
-    broker_id
-val unregister_from_broker: tutor_id -> unit
-
-val init_tutor: unit -> tutor_id
-val load_state:
-  Hbugs_types.state ->
-    ProofEngineTypes.proof * ProofEngineTypes.goal
-
-module type HbugsTutor =
-  sig
-    val start: unit -> unit
-  end
-
-module type HbugsTutorDescription =
-  sig
-    val addr: string
-    val port: int
-    val tactic: ProofEngineTypes.tactic
-    val hint: hint
-    val hint_type: hint_type
-    val description: string
-  end
-
-module BuildTutor (Dsc: HbugsTutorDescription) : HbugsTutor
-
diff --git a/helm/hbugs/tutors/ls_tutors.ml b/helm/hbugs/tutors/ls_tutors.ml
deleted file mode 100755 (executable)
index 5ddb77d..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/ocamlrun /usr/bin/ocaml
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-#use "topfind";;
-#require "pxp";;
-open Printf;;
-open Pxp_document;;
-open Pxp_dtd;;
-open Pxp_types;;
-open Pxp_yacc;;
-
-let index = "INDEX.xml" ;;
-let parse_xml fname =
-  parse_wfdocument_entity default_config (from_file fname) default_spec
-;;
-let is_tutor node =
-  match node#node_type with T_element "tutor" -> true | _ -> false
-;;
-let main () =
-  List.iter
-    (fun tutor ->
-      try
-        (match tutor#attribute "source" with
-        | Value s -> print_endline s
-        | _ -> assert false)
-      with Not_found -> assert false)
-    (List.filter is_tutor (parse_xml index)#root#sub_nodes)
-;;
-main ();;
-
diff --git a/helm/hbugs/tutors/run/.cvsignore b/helm/hbugs/tutors/run/.cvsignore
deleted file mode 100644 (file)
index 7789b92..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.LOG
diff --git a/helm/hbugs/tutors/sabba.sh b/helm/hbugs/tutors/sabba.sh
deleted file mode 100755 (executable)
index 31c186a..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2003:
-#    Stefano Zacchiroli <zack@cs.unibo.it>
-#    for the HELM Team http://helm.cs.unibo.it/
-# 
-#  This file is part of HELM, an Hypertextual, Electronic
-#  Library of Mathematics, developed at the Computer Science
-#  Department, University of Bologna, Italy.
-# 
-#  HELM 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.
-# 
-#  HELM 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 HELM; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-#  MA  02111-1307, USA.
-# 
-#  For details, see the HELM World-Wide-Web page,
-#  http://helm.cs.unibo.it/
-if [ "$1" = "--help" -o "$1" = "" ]; then
-   echo "sabba.sh { start | stop | --help }"
-   exit 0
-fi
-
-./ls_tutors.ml |
-while read line; do
-   tutor=`echo $line | sed 's/\.ml//'`
-   if [ "$1" = "stop" ]; then
-      echo -n "Stopping HBugs tutor $tutor ... "
-      killall $tutor
-      echo "done!"
-   elif [ "$1" = "start" ]; then
-      echo -n "Starting HBugs tutor $tutor ... "
-      ./$tutor &> run/$tutor.LOG &
-      echo "done!"
-   else
-      echo "Uh? Try --help"
-      exit 1
-   fi
-done
diff --git a/helm/hbugs/tutors/search_pattern_apply_tutor.ml b/helm/hbugs/tutors/search_pattern_apply_tutor.ml
deleted file mode 100644 (file)
index 8ba1f83..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-
-open Hbugs_types;;
-open Printf;;
-
-exception Empty_must;;
-
-module MQI  = MQueryInterpreter
-module MQIC = MQIConn
-
-let broker_id = ref None
-let my_own_id = Hbugs_tutors_common.init_tutor ()
-let my_own_addr, my_own_port = "127.0.0.1", 50011
-let my_own_url = sprintf "%s:%d" my_own_addr my_own_port
-
-let is_authenticated id =
-  match !broker_id with
-  | None -> false
-  | Some broker_id -> id = broker_id
-
-  (* thread who do the dirty work *)
-let slave mqi_handle (state, musing_id) =
- try
-  prerr_endline (sprintf "Hi, I'm the slave for musing %s" musing_id);
-  let (proof, goal) = Hbugs_tutors_common.load_state state in
-  let hint =
-    try
-      let choose_must must only = (* euristic: use 2nd precision level
-                                  1st is more precise but is more slow *)
-        match must with
-        | [] -> raise Empty_must
-        | _::hd::tl -> hd
-        | hd::tl -> hd
-      in
-      let uris =
-        TacticChaser.matchConclusion mqi_handle
-         ~output_html:prerr_endline ~choose_must () ~status:(proof, goal)
-      in
-      if uris = [] then
-        Sorry
-      else
-        Eureka (Hints (List.map (fun uri -> Use_apply_Luke uri) uris))
-    with Empty_must -> Sorry
-  in
-  let answer = Musing_completed (my_own_id, musing_id, hint) in
-  ignore (Hbugs_messages.submit_req ~url:Hbugs_tutors_common.broker_url answer);
-  prerr_endline
-    (sprintf "Bye, I've completed my duties (success = %b)" (hint <> Sorry))
- with
-  (Pxp_types.At _) as e ->
-    let rec unbox_exception =
-     function
-         Pxp_types.At (_,e) -> unbox_exception e
-      | e -> e
-    in
-     prerr_endline ("Uncaught PXP exception: " ^ Pxp_types.string_of_exn e) ;
-     (* e could be the Thread.exit exception; otherwise we will release an  *)
-     (* uncaught exception and the Pxp_types.At was already an uncaught     *)
-     (* exception ==> no additional arm                                     *)
-     raise (unbox_exception e)
-
-let hbugs_callback mqi_handle =
-  let ids = Hashtbl.create 17 in
-  let forbidden () =
-    prerr_endline "ignoring request from unauthorized broker";
-    Exception ("forbidden", "")
-  in
-  function
-  | Start_musing (broker_id, state) ->
-      if is_authenticated broker_id then begin
-        prerr_endline "received Start_musing";
-        let new_musing_id = Hbugs_id_generator.new_musing_id () in
-        let id = Hbugs_deity.create (slave mqi_handle) (state, new_musing_id) in
-        prerr_endline
-         (sprintf "starting a new musing (tid = %d, id = %s)" id new_musing_id);
-        Hashtbl.add ids new_musing_id id ;
-        (*ignore (Thread.create slave (state, new_musing_id));*)
-        Musing_started (my_own_id, new_musing_id)
-      end else  (* broker unauthorized *)
-        forbidden ();
-  | Abort_musing (broker_id, musing_id) ->
-      prerr_endline "CSC: Abort_musing received" ;
-      if is_authenticated broker_id then begin
-        (* prerr_endline "Ignoring 'Abort_musing' message ..."; *)
-        (try
-          Hbugs_deity.kill (Hashtbl.find ids musing_id) ;
-          Hashtbl.remove ids musing_id ;
-         with
-            Not_found
-          | Hbugs_deity.Can_t_kill _ ->
-             prerr_endline ("Can not kill slave " ^ musing_id)) ;
-        Musing_aborted (my_own_id, musing_id)
-      end else (* broker unauthorized *)
-        forbidden ();
-  | unexpected_msg ->
-      Exception ("unexpected_msg",
-        Hbugs_messages.string_of_msg unexpected_msg)
-
-let callback mqi_handle (req: Http_types.request) outchan =
-  try
-    let req_msg = Hbugs_messages.msg_of_string req#body in
-    let answer = hbugs_callback mqi_handle req_msg in
-    Http_daemon.respond ~body:(Hbugs_messages.string_of_msg answer) outchan
-  with Hbugs_messages.Parse_error (subj, reason) ->
-    Http_daemon.respond
-      ~body:(Hbugs_messages.string_of_msg
-        (Exception ("parse_error", reason)))
-      outchan
-
-let main () =
-  let mqi_flags = [] in (* default MathQL interpreter options *)
-  try
-    Sys.catch_break true;
-    at_exit (fun () -> Hbugs_tutors_common.unregister_from_broker my_own_id);
-    broker_id :=
-      Some (Hbugs_tutors_common.register_to_broker
-        my_own_id my_own_url "FOO" "Search_pattern_apply tutor");
-    let mqi_handle = MQIC.init mqi_flags prerr_string in 
-    Http_daemon.start'
-      ~addr:my_own_addr ~port:my_own_port ~mode:`Thread (callback mqi_handle);
-    MQIC.close mqi_handle
-  with Sys.Break -> ()  (* exit nicely, invoking at_exit functions *)
-;;
-
-main ()
-
diff --git a/helm/header/getheader.xml b/helm/header/getheader.xml
deleted file mode 100644 (file)
index a0f903f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<?cocoon-process type="xsp"?>
-<?cocoon-process type="xslt"?>
-
-<?xml-stylesheet href="setheader.xsl" type="text/xsl"?>
-<xsp:page language="java" xmlns:xsp="http://www.apache.org/1999/XSP/Core">
-    <hroot>
-     <xsp:logic>
-      String baseURL = request.getParameter("baseurl");
-      String styleURL1 = request.getParameter("stylesheet1");
-      String styleURL2 = request.getParameter("stylesheet2");
-      String xmlURI = request.getParameter("xmluri");
-      String annURI = request.getParameter("annuri");
-     </xsp:logic>
-     <url><xsp:expr>baseURL</xsp:expr></url>
-     <style1><xsp:expr>styleURL1</xsp:expr></style1>
-     <style2><xsp:expr>styleURL2</xsp:expr></style2>
-     <xml><xsp:expr>xmlURI</xsp:expr></xml>
-     <ann><xsp:expr>annURI</xsp:expr></ann>
-    </hroot>
-</xsp:page>
diff --git a/helm/header/provaurl b/helm/header/provaurl
deleted file mode 100644 (file)
index 86344dc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-http://phd.cs.unibo.it/helm/PARSER/examples/header/getheader.xml?baseurl=http://cartoonia.cs.unibo.it/helm/PARSER/examples/style/&stylesheet1=content.xsl&stylesheet2=mmlextension.xsl&xmlfile=file:///really_very_local/helm/PARSER/examples/prove/provaIota/bool_ind.con.xml
diff --git a/helm/header/provaurl1 b/helm/header/provaurl1
deleted file mode 100644 (file)
index d957698..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-http://cartoonia.cs.unibo.it/helm/PARSER/examples/header/getheader.xml?baseurl=http://cartoonia.cs.unibo.it/helm/PARSER/examples/style/&stylesheet1=content.xsl&stylesheet2=content_to_html.xsl&xmlfile=/really_very_local/helm/PARSER/examples/prove/prova/forest_rec.con.xml:wq
-
diff --git a/helm/header/setheader.xsl b/helm/header/setheader.xsl
deleted file mode 100644 (file)
index dd6ecad..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-
-<!--******************************************************************--> 
-<!-- XSLT version 0.1 of CIC files to CIC files with the header for   -->
-<!-- applying a stylesheet:                                           -->
-<!-- First draft: March 10 2000 Irene Schena                          -->
-<!--******************************************************************-->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:variable name="absPath">http://localhost:8081/getciconly?uri=</xsl:variable>
-
-<!--SET THE HEADER AND OPEN THE XML FILE-->
-
-<xsl:template match="hroot">
-    <xsl:variable name="xmlURI"><xsl:value-of select="xml"/></xsl:variable>
-    <xsl:variable name="annURI"><xsl:value-of select="ann"/></xsl:variable>
-    <xsl:processing-instruction name="cocoon-format">type="text/xml"</xsl:processing-instruction>
-    <xsl:processing-instruction name="xml-stylesheet">href=&quot;<xsl:value-of select="concat(url,style1)"/>&quot; type="text/xsl"</xsl:processing-instruction>
-    <xsl:processing-instruction name="cocoon-process">type="xslt"</xsl:processing-instruction>
-<cicxml baseurl="{url}" stylesheet="{style2}" uri="{$xmlURI}">
-    <xsl:apply-templates select="document(concat(string($absPath),$xmlURI))" mode="copyxml"/>
-    <xsl:apply-templates select="document(concat(string($absPath),$annURI))" mode="copyxml"/>
-</cicxml>
-</xsl:template>
-
-<!-- COPY THE XML FILE -->
-
-<xsl:template match="/" mode="copyxml">
-    <xsl:copy-of select="*"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/helm_data/.cvsignore b/helm/helm_data/.cvsignore
deleted file mode 100644 (file)
index cbb473e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Makefile configure config.log config.cache config.status
diff --git a/helm/helm_data/AUTHORS b/helm/helm_data/AUTHORS
deleted file mode 100644 (file)
index 963977a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-Andrea Asperti <asperti@cs.unibo.it>
-Luca Padovani <lpadovan@cs.unibo.it>
-Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
-Irene Schena <schena@cs.unibo.it>
diff --git a/helm/helm_data/COPYING b/helm/helm_data/COPYING
deleted file mode 100644 (file)
index d60c31a..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   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.
-\f
-                   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.)
-\f
-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.
-\f
-  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.
-\f
-  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
-\f
-           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
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <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 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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/helm/helm_data/ChangeLog b/helm/helm_data/ChangeLog
deleted file mode 100644 (file)
index 20c36b4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-28/12/2000: First alpha release
diff --git a/helm/helm_data/LICENSE b/helm/helm_data/LICENSE
deleted file mode 100644 (file)
index 72f9426..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (C) 2000, HELM Team.
-
-This file is part of HELM, an Hypertextual, Electronic
-Library of Mathematics, developed at the Computer Science
-Department, University of Bologna, Italy.
-
-HELM 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.
-
-HELM 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 HELM; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-
-For details, see the HELM World-Wide-Web page,
-http://cs.unibo.it/helm/.
diff --git a/helm/helm_data/LICENSE.ml b/helm/helm_data/LICENSE.ml
deleted file mode 100644 (file)
index 2f1b31e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
diff --git a/helm/helm_data/LICENSE.script b/helm/helm_data/LICENSE.script
deleted file mode 100644 (file)
index bad5161..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (C) 2000, HELM Team.
-# 
-# This file is part of HELM, an Hypertextual, Electronic
-# Library of Mathematics, developed at the Computer Science
-# Department, University of Bologna, Italy.
-# 
-# HELM 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.
-# 
-# HELM 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 HELM; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-# 
-# For details, see the HELM World-Wide-Web page,
-# http://cs.unibo.it/helm/.
diff --git a/helm/helm_data/LICENSE.xml b/helm/helm_data/LICENSE.xml
deleted file mode 100644 (file)
index 6077c52..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
diff --git a/helm/helm_data/Makefile.in b/helm/helm_data/Makefile.in
deleted file mode 100644 (file)
index 498577f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-
-HELM_DTD_DIR=@HELM_DTD_DIR@
-HELM_STYLE_DIR=@HELM_STYLE_DIR@
-
-all:
-
-install:
-       cp dtd/* $(HELM_DTD_DIR)
-       cp style/*.xsl $(HELM_STYLE_DIR)
-
-clean:
-       
-distclean: clean
-       rm -f Makefile configure config.log config.cache config.status *.spec
-       rm -rf dtd style
-
-dist:  clean
-       rm -rf ../@PACKAGE@-@VERSION@
-       mkdir ../@PACKAGE@-@VERSION@
-       cp -r * ../@PACKAGE@-@VERSION@
-       (cd .. ; tar cvfz @PACKAGE@-@VERSION@.tar.gz @PACKAGE@-@VERSION@ ; rm -rf @PACKAGE@-@VERSION@)
-
-.PHONY: all install distclean
diff --git a/helm/helm_data/NEWS b/helm/helm_data/NEWS
deleted file mode 100644 (file)
index 20c36b4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-28/12/2000: First alpha release
diff --git a/helm/helm_data/README b/helm/helm_data/README
deleted file mode 100644 (file)
index cc0522b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-NOTE: This is the first alpha release of project HELM.
-
-HELM (Hypertextual Electronic Library of Mathematics) is a project aimed
-at the creation of tools for the development and exploitation of a huge
-distributed library of formal mathematical knowledge. This package holds
-the base DTDs and XSLT stylesheets developed by the members of project
-HELM.
-
-For more information see http://www.cs.unibo.it/helm
diff --git a/helm/helm_data/config.cache.pkg b/helm/helm_data/config.cache.pkg
deleted file mode 100644 (file)
index 5d80ae9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# This is the config.cache that holds the ``standard'' path for the
-# HELM library. It is supposed to be used when creating packages
-
-helm_cv_HELM_DTDS_DIR=${helm_cv_HELM_DTDS_DIR='$RESOLVED_PREFIX/share/helm/dtd'}
diff --git a/helm/helm_data/configure.in b/helm/helm_data/configure.in
deleted file mode 100644 (file)
index 6352589..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-AC_INIT(dtd/cic.dtd)
-
-PACKAGE=helm_data
-MAJOR_VERSION=0
-MINOR_VERSION=0
-MICRO_VERSION=2
-VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION
-
-DEFAULT_HELM_DTD_DIR=/usr/local/share/helm/dtd
-DEFAULT_HELM_STYLE_DIR=/usr/local/share/helm/style
-
-AC_ARG_ENABLE(
-       defaults,
-       [  --enable-defaults[=ARG] if yes then use defaults (don't ask user) [default=auto]],
-       USE_DEFAULTS=$enableval,
-       USE_DEFAULTS=auto
-)
-
-if test $USE_DEFAULTS = auto; then
-       AC_CHECK_PROG(HAVE_HELM_CONFIG, helm-config, yes, no)
-       if test $HAVE_HELM_CONFIG = yes; then
-               HELM_DTD_DIR=`helm-config --dtd-dir`
-               HELM_STYLE_DIR=`helm-config --style-dir`
-       else
-               USE_DEFAULTS=no
-       fi
-fi
-
-if test $USE_DEFAULTS = no; then
-       echo
-       echo "\`helm-config' is not installed (or I can't find it in your path)."
-       echo "Please, insert the directory where I can find the DTDs for HELM..."
-       echo
-       echo -n "[[$DEFAULT_HELM_DTD_DIR]] ? "
-       read HELM_DTD_DIR
-       if test "x$HELM_DTD_DIR" = "x"; then
-               HELM_DTD_DIR=$DEFAULT_HELM_DTD_DIR
-       fi
-       echo
-       echo "Please, insert the directory where I can find the stylesheets for HELM..."
-       echo
-       echo -n "[[$DEFAULT_HELM_STYLE_DIR]] ? "
-       read HELM_STYLE_DIR
-       if test "x$HELM_STYLE_DIR" = "x"; then
-               HELM_STYLE_DIR=$DEFAULT_HELM_STYLE_DIR
-       fi
-elif test $USE_DEFAULTS = yes; then
-       HELM_DTD_DIR=$DEFAULT_HELM_DTD_DIR
-       HELM_STYLE_DIR=$DEFAULT_HELM_STYLE_DIR
-fi
-
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-AC_SUBST(HELM_DTD_DIR)
-AC_SUBST(HELM_STYLE_DIR)
-
-AC_OUTPUT([
-  Makefile
-  helm_data.spec
-])
-
diff --git a/helm/helm_data/helm_data.spec.in b/helm/helm_data/helm_data.spec.in
deleted file mode 100644 (file)
index 387a06f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-Summary: The base DTDs and XSLT stylesheets of project HELM
-Name: @PACKAGE@
-Version: @VERSION@
-Release: 1
-Copyright: GPL
-URL: http://www.cs.unibo.it/helm
-Packager: Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
-Requires: helm_configuration >= 0.0.2
-Group: Applications/Publishing
-Source: www.cs.unibo.it:/helm/@PACKAGE@-@VERSION@.tar.gz
-%description
-HELM (Hypertextual Electronic Library of Mathematics) is a project aimed
-at the creation of tools for the development and exploitation of a huge
-distributed library of formal mathematical knowledge. This package holds
-the base DTDs and XSLT stylesheets developed by the members of project
-HELM.
-For more information see http://www.cs.unibo.it/helm
-
-%prep
-%setup
-
-%build
-cp config.cache.pkg config.cache
-./configure --enable-defaults
-make
-
-%install
-make install
-
-%files
-%doc AUTHORS COPYING ChangeLog NEWS README
-
-/usr/local/share/helm/dtd
-/usr/local/share/helm/style
diff --git a/helm/helmpot/.cvsignore b/helm/helmpot/.cvsignore
deleted file mode 100644 (file)
index d6cea24..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-.emacs.desktop
-config.h
-config.h.in
-config.cache
-config.log
-config.status
-configure
-configure.scan
-t1lib.log
-stamp-h
-stamp-h.in
-Makefile
-Makefile.in
-*.gz
-aclocal.m4
-*.spec
-.deps
-helmpot
diff --git a/helm/helmpot/AUTHORS b/helm/helmpot/AUTHORS
deleted file mode 100644 (file)
index fe59f14..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Luca Padovani <luca.padovani@cs.unibo.it>
diff --git a/helm/helmpot/ChangeLog b/helm/helmpot/ChangeLog
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/helmpot/LICENSE b/helm/helmpot/LICENSE
deleted file mode 100644 (file)
index eef8774..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- * 
- * This file is part of HelmPot, a minimal browser for HELM.
- * 
- * HelmPot 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.
- * 
- * HelmPot 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 HelmPot; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, see the HelmPot World-Wide-Web page,
- * http://cs.unibo.it/helm/helmview, or send a mail to
- * <luca.padovani@cs.unibo.it>
- */
diff --git a/helm/helmpot/Makefile.am b/helm/helmpot/Makefile.am
deleted file mode 100644 (file)
index d730de3..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-
-CLEANFILES = core t1lib.log helmpot.spec
-
-bin_PROGRAMS = helmpot
-
-noinst_HEADERS = guiGTK.h
-
-helmpot_SOURCES = \
-  main.c \
-  guiGTK.c
-
-backup:
-       tar cvfz ../@PACKAGE@-@VERSION@-`date|tr ' ' '_'|tr ':' '_'`.tar.gz .
-
-cleanbak:
-       -rm -f `find . -name "*~"`
-
-lc:
-       @( \
-       CFILES=`find . -name "*.c"`; \
-       HFILES=`find . -name "*.h"`; \
-       wc -l $$CFILES $$HFILES | tail -n 1 \
-       )
-
-INCLUDES = $(GTK_CFLAGS)
-
diff --git a/helm/helmpot/NEWS b/helm/helmpot/NEWS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/helmpot/README b/helm/helmpot/README
deleted file mode 100644 (file)
index 2e7cb0d..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-HELMPoT
--------
-
-HELMPoT is a small plug-out for Netscape Navigator in order to
-browse the HELM library. After installing the binary somewhere
-in your hard disk, just configure a new helper application in
-Netscape associated to the text/xml MIME type. The command
-to be executed should something of the kind:
-
-       helmpot '%s'
-
-assuming that helmpot is visible in your path.
-
-Enjoy,
-
-       luca.padovani@cs.unibo.it
-
diff --git a/helm/helmpot/acconfig.h b/helm/helmpot/acconfig.h
deleted file mode 100644 (file)
index b65cd2c..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- * 
- * This file is part of HelmPot, a minimal browser for HELM.
- * 
- * HelmPot 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.
- * 
- * HelmPot 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 HelmPot; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, see the HelmPot World-Wide-Web page,
- * http://cs.unibo.it/helm/helmview, or send a mail to
- * <luca.padovani@cs.unibo.it>
- */
-
-#ifndef __config_h__
-#define __config_h__
-
-#define PRIVATE static
-
-@TOP@
-
-/* If defined the widget will perform a huge amount
- * of validity checks while running
- */
-#undef ENABLE_CHECKS
-
-#ifdef ENABLE_CHECKS
-#define DEBUG
-#else
-#define NDEBUG
-#define G_DISABLE_ASSERT
-#define G_DISABLE_CHECKS
-#endif
-
-@BOTTOM@
-
-#endif /* __config_h__ */
diff --git a/helm/helmpot/configure.in b/helm/helmpot/configure.in
deleted file mode 100644 (file)
index 3d31a0d..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_INIT(main.c)
-
-HELMPOT_MAJOR_VERSION=0
-HELMPOT_MINOR_VERSION=1
-HELMPOT_MICRO_VERSION=0
-HELMPOT_VERSION=$HELMPOT_MAJOR_VERSION.$HELMPOT_MINOR_VERSION.$HELMPOT_MICRO_VERSION
-VERSION=$HELMPOT_VERSION
-
-AC_SUBST(HELMPOT_VERSION)
-
-AC_ARG_ENABLE(
-       checks,
-       [  --enable-checks[=ARG]   include debugging checks [default=yes]],
-       [
-               if test $enableval = yes; then
-                       AC_DEFINE(ENABLE_CHECKS)
-               fi
-       ],
-       AC_DEFINE(ENABLE_CHECKS)
-)
-
-dnl Automake configuration
-AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(helmpot, $HELMPOT_VERSION)
-
-dnl Checks for programs.
-AC_LANG_C
-AC_PROG_CC
-AC_ISC_POSIX
-AC_CHECK_PROG(HAVE_COLORGCC, colorgcc, yes, no)
-
-dnl Checks for header files.
-AC_HEADER_STDC
-AC_CHECK_HEADERS(unistd.h)
-AC_FUNC_VFORK
-
-dnl Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-
-dnl Check for iconv with const pointer as second argument
-AC_LANG_C
-
-dnl Checks for libraries
-AM_PATH_GTK(1.2.0, gtklib="yes", gtklib="no")
-
-if test $gtklib = "no"; then
-       AC_MSG_ERROR(GTK is needed in order to use helmpot)
-fi
-
-CFLAGS="$CFLAGS @GTKMATHVIEW_CFLAGS@"
-CXXFLAGS="$CXXFLAGS @GTKMATHVIEW_CFLAGS@"
-LIBS="$LIBS @GTKMATHVIEW_LIBS@"
-
-PKG_CHECK_MODULES(GTKMATHVIEW, gtkmathview >= 0.3.0,, AC_MSG_ERROR(could not find gtkmathview))
-AC_SUBST(GTKMATHVIEW_CFLAGS)
-AC_SUBST(GTKMATHVIEW_LIBS)
-
-if test $HAVE_COLORGCC = "yes"; then
-       CC=colorgcc
-       CXX=colorgcc
-fi
-
-CFLAGS="$CFLAGS -W -Wall"
-CXXFLAGS="$CXXFLAGS -W -Wall"
-
-AC_OUTPUT([
-Makefile
-helmpot.spec
-])
diff --git a/helm/helmpot/debian/changelog b/helm/helmpot/debian/changelog
deleted file mode 100644 (file)
index 32467c7..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-helmpot (0.1.0-2) unstable; urgency=low
-
-  * debian/control
-    - bumped standards-version to 3.5.10
-    - bumped dependency on debhelper to 4.0.0
-    - added ${misc:Depends}
-    - added build dep on pkg-config
-
- -- Stefano Zacchiroli <zack@debian.org>  Wed, 25 Jun 2003 18:20:33 +0200
-
-helmpot (0.1.0-1) unstable; urgency=low
-
-  * New release.
-
- -- Stefano Zacchiroli <zack@debian.org>  Sat, 11 May 2002 11:52:35 +0200
-
-helmpot (0.0.4-1) unstable; urgency=low
-
-  * New release.
-
- -- Stefano Zacchiroli <zack@debian.org>  Wed, 14 Nov 2001 14:48:17 +0100
-
-helmpot (0.0.3-1) unstable; urgency=low
-
-  * Bug fix related to selection
- -- Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>  Fri, 05 Oct 2001 19:40:06 +0200
-
-helmpot (0.0.2-1) unstable; urgency=low
-
-  * Small bug fix related to maction
-
- -- Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>  Mon, 27 Aug 2001 19:00:00 +0200
-
-helmpot (0.0.1-1) unstable; urgency=low
-
-  * Initial Release.
-
- -- Luca Padovani <luca.padovani@cs.unibo.it>  Thu, 12 Apr 2001 17:18:05 +0200
-
-Local variables:
-mode: debian-changelog
-End:
diff --git a/helm/helmpot/debian/control b/helm/helmpot/debian/control
deleted file mode 100644 (file)
index 5deb9e0..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-Source: helmpot
-Section: misc
-Priority: optional
-Maintainer: Stefano Zacchiroli <zack@debian.org>
-Build-Depends: debhelper (>> 4.0.0), libgtkmathview-dev, pkg-config
-Standards-Version: 3.5.10
-
-Package: helmpot
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: A minimal browser for the HELM library.
- 'helmpot' is a minimal browser, in the form of a plug-out, for
- browsing the HELM library (MathML presentation).
-
diff --git a/helm/helmpot/debian/copyright b/helm/helmpot/debian/copyright
deleted file mode 100644 (file)
index e2472b0..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-This package was debianized by Luca Padovani <luca.padovani@cs.unibo.it> on
-Thu, 12 Apr 2001 17:18:05 +0200.
-
-It was packed from source obtained via cvs, with this CVSROOT:
-  :pserver:anonymous@phd.cs.unibo.it:/home/lpadovan/PHELM/
-
-Author: Luca Padovani <luca.padovani@cs.unibo.it>
-
-Copyright:
- Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- This file is part of HelmPot, a minimal browser for HELM.
- HelmPot 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.
- HelmPot 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 HelmPot; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- For details, see the HelmPot World-Wide-Web page,
- http://cs.unibo.it/helm/helmpot, or send a mail to
- <luca.padovani@cs.unibo.it>
diff --git a/helm/helmpot/debian/docs b/helm/helmpot/debian/docs
deleted file mode 100644 (file)
index 6f12db5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-AUTHORS
-README
diff --git a/helm/helmpot/debian/rules b/helm/helmpot/debian/rules
deleted file mode 100755 (executable)
index 75b3d8a..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/make -f
-# Sample debian/rules that uses debhelper.
-# GNU copyright 1997 to 1999 by Joey Hess.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-# This is the debhelper compatability version to use.
-export DH_COMPAT=2
-
-build: build-stamp
-build-stamp:
-       dh_testdir
-
-       ./configure --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info
-       # Add here commands to compile the package.
-       $(MAKE)
-
-       touch build-stamp
-
-clean:
-       dh_testdir
-       dh_testroot
-       rm -f build-stamp
-
-       # Add here commands to clean up after the build process.
-       -$(MAKE) distclean
-
-       dh_clean
-
-install: build
-       dh_testdir
-       dh_testroot
-       dh_clean -k
-       dh_installdirs
-
-       # Add here commands to install the package into debian/tmp.
-       $(MAKE) install prefix=$(CURDIR)/debian/helmpot/usr
-
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
-       dh_testdir
-       dh_testroot
-#      dh_installdebconf       
-       dh_installdocs
-#      dh_installexamples
-#      dh_installmenu
-#      dh_installemacsen
-#      dh_installpam
-#      dh_installinit
-#      dh_installcron
-#      dh_installmanpages
-       dh_installinfo
-       dh_undocumented
-       dh_installchangelogs ChangeLog
-       dh_link
-       dh_strip
-       dh_compress
-       dh_fixperms
-       # You may want to make some executables suid here.
-#      dh_makeshlibs
-       dh_installdeb
-#      dh_perl
-       dh_shlibdeps
-       dh_gencontrol
-       dh_md5sums
-       dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install
diff --git a/helm/helmpot/guiGTK.c b/helm/helmpot/guiGTK.c
deleted file mode 100644 (file)
index 906daf2..0000000
+++ /dev/null
@@ -1,684 +0,0 @@
-/*
- * Copyright (C) 2000-2002, Luca Padovani <luca.padovani@cs.unibo.it>.
- * 
- * This file is part of HelmPot, a minimal browser for HELM.
- * 
- * HelmPot 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.
- * 
- * HelmPot 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 HelmPot; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, see the HelmPot World-Wide-Web page,
- * http://cs.unibo.it/helm/helmview, or send a mail to
- * <luca.padovani@cs.unibo.it>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#if HAVE_UNISTD_H
-# include <sys/types.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-# include <unistd.h>
-#endif
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "gtkmathview.h"
-#include "guiGTK.h"
-
-#define XLINK_NS_URI "http://www.w3.org/1999/xlink"
-
-#define pot_width 16
-#define pot_height 16
-PRIVATE unsigned char pot_bits[] = {
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x07,
-   0x00, 0x00, 0xe6, 0x2f, 0x34, 0x5f, 0xdc, 0x5f, 0xf8, 0x3f, 0xf8, 0x3f,
-   0xf0, 0x1f, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00};
-
-#define pot_mask_width 16
-#define pot_mask_height 16
-static unsigned char pot_mask_bits[] = {
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xe0, 0x0f, 0xe0, 0x0f,
-   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f,
-   0xfc, 0x7f, 0xf8, 0x3f, 0xf0, 0x1f, 0x00, 0x00};
-
-PRIVATE GtkWidget* window;
-PRIVATE GtkWidget* main_area;
-PRIVATE GtkWidget* scrolled_area;
-PRIVATE GtkWidget* status_bar;
-PRIVATE GtkMenuItem* kerning_item;
-PRIVATE GtkMenuItem* anti_aliasing_item;
-PRIVATE GtkMenuItem* font_size_item;
-PRIVATE gchar* file_name = NULL;
-
-PRIVATE GdkCursor* normal_cursor;
-PRIVATE GdkCursor* link_cursor;  
-PRIVATE GdkCursor* pot_cursor;
-
-PRIVATE gboolean loading = FALSE;
-PRIVATE guint statusbar_context;
-
-PRIVATE void create_widget_set(void);
-PRIVATE GtkWidget* get_main_menu(void);
-PRIVATE void options_font_size(GtkWidget*, guint);
-PRIVATE void options_font_manager(GtkWidget*, guint);
-PRIVATE void options_verbosity(GtkWidget*, guint);
-PRIVATE void options_kerning(GtkWidget*, gpointer);
-PRIVATE void options_anti_aliasing(GtkWidget*, gpointer);
-PRIVATE void help_about(GtkWidget*, gpointer);
-PRIVATE void save_as(GtkWidget*);
-PRIVATE void export_to_ps(GtkWidget*);
-
-PRIVATE GtkItemFactoryEntry menu_items[] = {
-  { "/_File",                          NULL,         NULL,          0, "<Branch>" },
-  { "/File/Save _As...",               NULL,         save_as,       0, NULL },
-  { "/File/_Export to PostScript...",  NULL,         export_to_ps,  0, NULL },
-  { "/File/sep1",                      NULL,         NULL,          0, "<Separator>" },
-  { "/File/_Quit",                     "<control>Q", gtk_main_quit, 0, NULL },
-
-  { "/_Options",                       NULL, NULL,                  0,  "<Branch>" },
-  { "/Options/Default _Font Size",     NULL, NULL,                  0,  "<Branch>" },
-  { "/Options/Default Font Size/8pt",  NULL, options_font_size,     8,  "<RadioItem>" },
-  { "/Options/Default Font Size/10pt", NULL, options_font_size,     10, "/Options/Default Font Size/8pt" },
-  { "/Options/Default Font Size/12pt", NULL, options_font_size,     12, "/Options/Default Font Size/8pt" },
-  { "/Options/Default Font Size/14pt", NULL, options_font_size,     14, "/Options/Default Font Size/8pt" },
-  { "/Options/Default Font Size/18pt", NULL, options_font_size,     18, "/Options/Default Font Size/8pt" },
-  { "/Options/Default Font Size/24pt", NULL, options_font_size,     24, "/Options/Default Font Size/8pt" },
-  { "/Options/Font Manager",           NULL, NULL,                  0,  "<Branch>" },
-  { "/Options/Font Manager/_GTK",      NULL, options_font_manager,  0,  "<RadioItem>" },
-  { "/Options/Font Manager/_Type 1",   NULL, options_font_manager,  1,  "/Options/Font Manager/GTK" },
-  { "/Options/Verbosity",              NULL, NULL,                  0,  "<Branch>" },
-  { "/Options/Verbosity/_Errors",      NULL, options_verbosity,     0,  "<RadioItem>" },
-  { "/Options/Verbosity/_Warnings",    NULL, options_verbosity,     1,  "/Options/Verbosity/Errors" },
-  { "/Options/Verbosity/_Info",        NULL, options_verbosity,     2,  "/Options/Verbosity/Errors" },
-  { "/Options/Verbosity/_Debug",       NULL, options_verbosity,     3,  "/Options/Verbosity/Errors" },
-  { "/Options/sep1",                   NULL, NULL,                  0,  "<Separator>" },
-  { "/Options/_Kerning",               NULL, options_kerning,       0,  "<ToggleItem>" },
-  { "/Options/_Anti Aliasing",         NULL, options_anti_aliasing, 0,  "<ToggleItem>" },
-
-  { "/_Help" ,        NULL,         NULL,          0, "<LastBranch>" },
-  { "/Help/About...", NULL,         help_about,    0, NULL }
-};
-
-PRIVATE void
-quick_message(const gchar* msg)
-{
-  GtkWidget* dialog;
-  GtkWidget* label;
-  GtkWidget* okay_button;
-     
-  /* Create the widgets */
-     
-  dialog = gtk_dialog_new();
-  label = gtk_label_new (msg);
-  okay_button = gtk_button_new_with_label("OK");
-
-  gtk_widget_set_usize(dialog, 300, 100);
-
-  /* Ensure that the dialog box is destroyed when the user clicks ok. */
-     
-  gtk_signal_connect_object (GTK_OBJECT (okay_button), "clicked",
-                            GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT(dialog));
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area),
-                    okay_button);
-  
-  /* Add the label, and show everything we've added to the dialog. */
-  
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label);
-  gtk_widget_show_all (dialog);
-}
-
-PRIVATE void
-load_error_msg(const gchar* name)
-{
-  gchar* msg = g_strdup_printf("Could not load\n`%s'", name);
-  quick_message(msg);
-  g_free(msg);
-}
-
-PRIVATE void
-save_error_msg(const gchar* name)
-{
-  gchar* msg = g_strdup_printf("Could not save\n`%s'", name);
-  quick_message(msg);
-  g_free(msg);
-}
-
-void
-GUI_init(gint* argc, gchar*** argv, gchar* title, guint width, guint height, GtkFunction f, guint32 timeout)
-{
-  GdkPixmap* source;
-  GdkPixmap* mask;
-
-  GdkColor fg = { 0, 65535, 65535, 65535 };
-  GdkColor bg = { 0, 0, 0, 0 };
-
-  gtk_init(argc, argv);
-
-  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-  gtk_window_set_title(GTK_WINDOW(window), title);
-  gtk_window_set_default_size(GTK_WINDOW(window), width, height);
-  gtk_signal_connect(GTK_OBJECT(window), "delete_event", (GtkSignalFunc) gtk_main_quit, NULL);
-  create_widget_set();
-
-  gtk_widget_show(window);
-
-  gtk_timeout_add(timeout, f, NULL);
-
-  normal_cursor = gdk_cursor_new(GDK_TOP_LEFT_ARROW);
-  link_cursor = gdk_cursor_new(GDK_HAND2);
-  
-  source = gdk_bitmap_create_from_data (NULL, pot_bits,
-                                       pot_width, pot_height);
-  mask = gdk_bitmap_create_from_data (NULL, pot_mask_bits,
-                                     pot_mask_width, pot_mask_height);
-  pot_cursor = gdk_cursor_new_from_pixmap (source, mask, &fg, &bg, 8, 8);
-  gdk_pixmap_unref (source);
-  gdk_pixmap_unref (mask);  
-}
-
-void
-GUI_uninit()
-{
-}
-
-int
-GUI_load_document(const gchar* name)
-{
-  GtkMathView* math_view;
-  GtkMathViewClass* klass;
-  gboolean res;
-
-  g_return_val_if_fail(name != NULL, -1);
-  g_return_val_if_fail(main_area != NULL, -1);
-  g_return_val_if_fail(GTK_IS_MATH_VIEW(main_area), -1);
-
-  math_view = GTK_MATH_VIEW(main_area);
-  g_return_val_if_fail(math_view != NULL, -1);
-
-  klass = (GtkMathViewClass*) gtk_type_class(gtk_math_view_get_type());
-  g_return_val_if_fail(klass != NULL, -1);
-
-  res = gtk_math_view_load(math_view, name);
-  gdk_window_set_cursor(main_area->window, normal_cursor);
-  loading = FALSE;
-
-  if (!res) {
-    load_error_msg(name);
-    return -1;
-  }
-
-  gtk_statusbar_pop(GTK_STATUSBAR(status_bar), statusbar_context);
-  if (strlen(name) > 40) name += strlen(name) - 40;
-  gtk_statusbar_push(GTK_STATUSBAR(status_bar), statusbar_context, name);
-
-  if (file_name != NULL) g_free(file_name);
-  file_name = g_strdup(name);
-
-  return 0;
-}
-
-void
-GUI_unload_document()
-{
-  GtkMathView* math_view;
-
-  g_return_if_fail(main_area != NULL);
-  g_return_if_fail(GTK_IS_MATH_VIEW(main_area));
-
-  math_view = GTK_MATH_VIEW(main_area);
-
-  gtk_math_view_unload(math_view);
-}
-
-void
-GUI_run()
-{
-  gtk_main();
-}
-
-PRIVATE void
-options_font_size(GtkWidget* widget, guint size)
-{
-  GtkMathView* math_view;
-
-  g_return_if_fail(main_area != NULL);
-  g_return_if_fail(GTK_IS_MATH_VIEW(main_area));
-
-  math_view = GTK_MATH_VIEW(main_area);
-
-  gtk_math_view_set_font_size(math_view, size);
-}
-
-PRIVATE void
-options_font_manager(GtkWidget* widget, guint id)
-{
-  GtkMathView* math_view;
-
-  g_return_if_fail(main_area != NULL);
-  g_return_if_fail(GTK_IS_MATH_VIEW(main_area));
-  
-  math_view = GTK_MATH_VIEW(main_area);
-
-  gtk_math_view_set_font_manager_type(math_view, id);
-}
-
-PRIVATE void
-options_anti_aliasing(GtkWidget* widget, gpointer data)
-{
-  gboolean aa = gtk_math_view_get_anti_aliasing(GTK_MATH_VIEW(main_area));
-  gtk_math_view_set_anti_aliasing(GTK_MATH_VIEW(main_area), !aa);
-}
-
-PRIVATE void
-options_kerning(GtkWidget* widget, gpointer data)
-{
-  gboolean k = gtk_math_view_get_kerning(GTK_MATH_VIEW(main_area));
-  gtk_math_view_set_kerning(GTK_MATH_VIEW(main_area), !k);
-}
-
-PRIVATE void
-options_verbosity(GtkWidget* widget, guint level)
-{
-  gtk_math_view_set_log_verbosity(GTK_MATH_VIEW(main_area), level);
-}
-
-PRIVATE void
-help_about(GtkWidget* widget, gpointer data)
-{
-  GtkWidget* dialog;
-  GtkWidget* label;
-  GtkWidget* ok;
-
-  dialog = gtk_dialog_new();
-  label = gtk_label_new("\n    HELM PoT    \n    Copyright (C) 2001-2002 Luca Padovani    \n");
-  ok = gtk_button_new_with_label("Close");
-
-  gtk_signal_connect_object (GTK_OBJECT (ok), "clicked",
-                            GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog);
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area),
-                    ok);
-
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label);
-
-  gtk_widget_show_all (dialog);
-}
-
-PRIVATE void
-export_filename(GtkFileSelection* selector, gpointer user_data)
-{
-  FILE* f;
-  GtkMathView* math_view;
-  gchar* selected_filename;
-  
-  selected_filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION(user_data));
-
-  math_view = GTK_MATH_VIEW(main_area);
-
-  f = fopen(selected_filename, "wt");
-  if (f == NULL) {
-    save_error_msg(selected_filename);
-    /*g_free(selected_filename);*/
-    return;
-  }
-
-  gtk_math_view_export_to_postscript(math_view,
-                                    (21 * SCALED_POINTS_PER_CM) / SCALED_POINTS_PER_PX,
-                                    (29 * SCALED_POINTS_PER_CM) / SCALED_POINTS_PER_PX,
-                                    SCALED_POINTS_PER_IN / SCALED_POINTS_PER_PX,
-                                    SCALED_POINTS_PER_IN / SCALED_POINTS_PER_PX,
-                                    FALSE,
-                                    f);
-
-  fclose(f);
-  /*g_free(selected_filename);*/
-}
-
-PRIVATE void
-save_filename(GtkFileSelection* selector, gpointer user_data)
-{
-  FILE* source;
-  FILE* dest;
-  gchar* buffer;
-  gchar* selected_filename;
-
-  if (file_name == NULL) return;
-
-  source = fopen(file_name, "rt");
-  if (source == NULL) {
-    load_error_msg(file_name);
-    return;
-  }
-
-  selected_filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION(user_data));
-  if (selected_filename == NULL) return;
-
-  dest = fopen(selected_filename, "wt");
-  if (dest == NULL) {
-    save_error_msg(selected_filename);
-    /*g_free(selected_filename);*/
-    return;
-  }
-
-  /*g_free(selected_filename);*/
-
-  buffer = g_new(gchar, 2048);
-  while (!feof(source)) {
-    size_t n = fread(buffer, sizeof(gchar), 2048, source);
-    fwrite(buffer, sizeof(gchar), n, dest);
-  }
-
-  g_free(buffer);
-  fclose(source);
-  fclose(dest);
-}
-
-PRIVATE void
-file_dialog(const gchar* title, GtkSignalFunc f)
-{
-  GtkWidget* fs;
-
-  g_return_if_fail(title != NULL);
-  g_return_if_fail(f != NULL);
-
-  fs = gtk_file_selection_new(title);
-
-  gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(fs)->ok_button),
-                     "clicked", f, fs);
-                             
-  /* Ensure that the dialog box is destroyed when the user clicks a button. */
-     
-  gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(fs)->ok_button),
-                            "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
-                            (gpointer) fs);
-
-  gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(fs)->cancel_button),
-                            "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
-                            (gpointer) fs);
-     
-  /* Display that dialog */
-     
-  gtk_widget_show (fs);
-}
-
-PRIVATE void
-export_to_ps(GtkWidget* widget)
-{
-  file_dialog("Export to PostScript", export_filename);
-#if 0
-  static GList* items = NULL;
-
-  GtkWidget* dialog;
-  GtkWidget* tmp;
-
-  if (items == NULL) {
-    items = g_list_append(items, "A4");
-    items = g_list_append(items, "A5");
-  }
-
-  dialog = gtk_dialog_new();
-  tmp = gtk_label_new("Paper size");
-  gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), tmp);
-  tmp = gtk_combo_new();
-  gtk_combo_set_popdown_strings(GTK_COMBO(tmp), items);
-  gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), tmp);
-#if 0
-  tmp = gtk_check_button_new_with_label("Disable Colors");
-  gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), tmp);
-#endif
-
-  tmp = gtk_button_new_with_label("OK");
-  gtk_signal_connect_object(GTK_OBJECT(tmp), "clicked", GTK_SIGNAL_FUNC(export_to_ps_get_file_name), dialog);
-  gtk_signal_connect_object(GTK_OBJECT(tmp), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), dialog);
-  gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), tmp);
-  tmp = gtk_button_new_with_label("Cancel");
-  gtk_signal_connect_object(GTK_OBJECT(tmp), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), dialog);
-  gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), tmp);
-
-  gtk_widget_show_all(dialog);
-#endif
-}
-
-PRIVATE void
-save_as(GtkWidget* widget)
-{
-  file_dialog("Save As...", save_filename);
-}
-
-PRIVATE void
-element_changed(GtkMathView* math_view, GdomeElement* elem)
-{
-  g_return_if_fail(math_view != NULL);
-  g_return_if_fail(main_area != NULL);
-  g_return_if_fail(GTK_IS_MATH_VIEW(math_view));
-  /* fprintf(stderr, "node changed: %p %s\n", node, (node != NULL) ? mdom_node_get_name(node) : "-"); */
-
-  if (!loading) {
-    GdomeException exc = 0;
-    GdomeDOMString* namespaceURI = gdome_str_mkref(XLINK_NS_URI);
-    GdomeDOMString* localName = gdome_str_mkref("href");
-    
-    if (elem != NULL) {
-      gdome_el_ref(elem, &exc);
-      g_assert(exc == 0);
-    }
-
-    while (elem != NULL && !gdome_el_hasAttributeNS(elem, namespaceURI, localName, &exc)) {
-      GdomeElement* parent = gdome_cast_el(gdome_el_parentNode(elem, &exc));
-      g_assert(exc == 0);
-      gdome_el_unref(elem, &exc);
-      g_assert(exc == 0);
-      elem = parent;
-    }
-    g_assert(exc == 0);
-
-    gdome_str_unref(namespaceURI);
-    gdome_str_unref(localName);
-
-    if (elem != NULL) {
-      gdome_el_unref(elem, &exc);
-      g_assert(exc == 0);
-      gdk_window_set_cursor(main_area->window, link_cursor);
-    } else
-      gdk_window_set_cursor(main_area->window, normal_cursor);
-  }
-}
-
-PRIVATE void
-selection_changed(GtkMathView* math_view, GdomeElement* elem)
-{
-  GdomeException exc = 0;
-  GdomeDOMString* localName = gdome_str_mkref("xref");
-
-  g_return_if_fail(math_view != NULL);
-  g_return_if_fail(GTK_IS_MATH_VIEW(math_view));
-
-  if (elem != NULL) {
-    gdome_el_ref(elem, &exc);
-    g_assert(exc == 0);
-  }
-
-  while (elem != NULL && !gdome_el_hasAttribute(elem, localName, &exc)) {
-    GdomeElement* parent = gdome_cast_el(gdome_el_parentNode(elem, &exc));
-    g_assert(exc == 0);
-    gdome_el_unref(elem, &exc);
-    g_assert(exc == 0);
-    elem = parent;
-  }
-
-  gdome_str_unref(localName);
-
-  gtk_math_view_set_selection(math_view, elem);
-  if (elem != NULL) {
-    gdome_el_unref(elem, &exc);
-    g_assert(exc == 0);
-  }
-}
-
-PRIVATE void
-jump(GdomeDOMString* href)
-{
-  pid_t pid;
-  g_return_if_fail(href != NULL);
-
-  gdk_window_set_cursor(main_area->window, pot_cursor);  
-  loading = TRUE;
-  pid = fork();
-  if (pid == -1) exit(-1);
-  if (pid == 0) {
-    gchar* open_url = g_strdup_printf("openURL(%s,cic)", href->str);
-    gint fd;
-    
-    close(0);
-    close(1);
-    close(2);
-    
-    fd = open("/dev/null", O_RDWR);
-    dup(fd);
-    dup(fd);
-    
-    execlp("netscape", "netscape", "-noraise", "-remote", open_url, NULL);
-    perror("exec failed:");
-    exit(-1);
-  }
-}
-
-PRIVATE void
-clicked(GtkMathView* math_view, gpointer user_data)
-{
-  GdomeException exc = 0;
-  GdomeDOMString* namespaceURI = gdome_str_mkref(XLINK_NS_URI);
-  GdomeDOMString* localName = gdome_str_mkref("href");
-
-  GdomeElement* p = gtk_math_view_get_element(math_view);
-  while (p != NULL && !gdome_el_hasAttributeNS(p, namespaceURI, localName, &exc)) {
-    GdomeElement* parent = gdome_cast_el(gdome_el_parentNode(p, &exc));
-    g_assert(exc == 0);
-    gdome_el_unref(p, &exc);
-    g_assert(exc == 0);
-    p = parent;
-  }
-  g_assert(exc == 0);
-
-  if (p != NULL) {
-    GdomeDOMString* href = gdome_el_getAttributeNS(p, namespaceURI, localName, &exc);
-    g_assert(exc == 0);
-    g_assert(href != NULL);
-
-    jump(href);
-    gdome_str_unref(href);
-    gdome_el_unref(p, &exc);
-    g_assert(exc == 0);
-  } else {
-    p = gtk_math_view_get_action(math_view);
-    if (p != NULL) {
-      gtk_math_view_action_toggle(math_view);
-      gdome_el_unref(p, &exc);
-      g_assert(exc == 0);
-    }
-  }
-
-  gdome_str_unref(namespaceURI);
-  gdome_str_unref(localName);
-}
-
-PRIVATE void
-create_widget_set()
-{
-  GtkWidget* main_vbox;
-  GtkWidget* menu_bar;
-
-  main_vbox = gtk_vbox_new(FALSE, 1);
-  gtk_container_border_width(GTK_CONTAINER(main_vbox), 1);
-  gtk_container_add(GTK_CONTAINER(window), main_vbox);
-  gtk_widget_show(main_vbox);
-
-  menu_bar = get_main_menu();
-  gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0);
-  gtk_widget_show(menu_bar);
-
-  main_area = gtk_math_view_new(NULL, NULL);
-  gtk_widget_show(main_area);
-
-  gtk_signal_connect_object (GTK_OBJECT (main_area),
-                            "element_changed", GTK_SIGNAL_FUNC (element_changed),
-                            (gpointer) main_area);
-
-  gtk_signal_connect_object (GTK_OBJECT (main_area),
-                            "selection_changed", GTK_SIGNAL_FUNC (selection_changed),
-                            (gpointer) main_area);
-
-  gtk_signal_connect_object (GTK_OBJECT (main_area), 
-                            "clicked", GTK_SIGNAL_FUNC(clicked),
-                            (gpointer) main_area);
-                            
-  scrolled_area = gtk_scrolled_window_new(NULL, NULL);
-  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_area),
-                                GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
-  gtk_widget_show(scrolled_area);
-  gtk_container_add(GTK_CONTAINER(scrolled_area), main_area);
-  gtk_box_pack_start(GTK_BOX(main_vbox), scrolled_area, TRUE, TRUE, 0);
-
-  status_bar = gtk_statusbar_new();
-  gtk_widget_show(status_bar);
-  gtk_box_pack_start(GTK_BOX(main_vbox), status_bar, FALSE, TRUE, 0);
-  statusbar_context = gtk_statusbar_get_context_id(GTK_STATUSBAR(status_bar), "filename");
-
-  gtk_widget_show(main_vbox);
-
-  if (gtk_math_view_get_anti_aliasing(GTK_MATH_VIEW(main_area)))
-    gtk_menu_item_activate(anti_aliasing_item);
-
-  if (gtk_math_view_get_kerning(GTK_MATH_VIEW(main_area)))
-    gtk_menu_item_activate(kerning_item);
-
-  gtk_math_view_set_font_size(GTK_MATH_VIEW(main_area), DEFAULT_FONT_SIZE);
-  gtk_menu_item_activate(font_size_item);
-}
-
-GtkWidget*
-get_main_menu()
-{
-  GtkItemFactory* item_factory;
-  GtkAccelGroup* accel_group;
-  GtkWidget* menu_item;
-
-  gint nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]);
-
-  accel_group = gtk_accel_group_new();
-
-  item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accel_group);
-
-  gtk_item_factory_create_items(item_factory, nmenu_items, menu_items, NULL);
-
-  gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
-
-  menu_item = gtk_item_factory_get_widget(item_factory, "/Options/Kerning");
-  kerning_item = GTK_MENU_ITEM(menu_item);
-
-  menu_item = gtk_item_factory_get_widget(item_factory, "/Options/Anti Aliasing");
-  anti_aliasing_item = GTK_MENU_ITEM(menu_item);
-
-  /* !!!BEWARE!!! the default font size must be kept aligned with the definition
-   * in defs.h
-   */
-  menu_item = gtk_item_factory_get_widget(item_factory, "/Options/Default Font Size/14pt");
-  font_size_item = GTK_MENU_ITEM(menu_item);
-
-  return gtk_item_factory_get_widget(item_factory, "<main>");
-}
-
diff --git a/helm/helmpot/guiGTK.h b/helm/helmpot/guiGTK.h
deleted file mode 100644 (file)
index 83f5f86..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- * 
- * This file is part of HelmPot, a minimal browser for HELM.
- * 
- * HelmPot 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.
- * 
- * HelmPot 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 HelmPot; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, see the HelmPot World-Wide-Web page,
- * http://cs.unibo.it/helm/helmview, or send a mail to
- * <luca.padovani@cs.unibo.it>
- */
-
-#ifndef __guiGTK_h__
-#define __guiGTK_h__
-
-#include <glib.h>
-#include <gtk/gtk.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-  /* initGUI: some initialization stuff, creates the main window, sets it with a title */
-  void GUI_init(gint *, gchar ***, gchar *, guint, guint, GtkFunction, guint32);
-  void GUI_uninit(void);
-
-  int  GUI_load_document(const gchar*);
-  void GUI_unload_document(void);
-  void GUI_dump_entities(void);
-
-  /* main: this is the main event loop, to be called when the program is ready to run */
-  void GUI_run(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __guiGTK_h__ */
diff --git a/helm/helmpot/helmpot.spec.in b/helm/helmpot/helmpot.spec.in
deleted file mode 100644 (file)
index 641f184..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-Summary: A minimal browser for the HELM library
-Name: @PACKAGE@
-Version: @VERSION@
-Release: 1
-Copyright: GPL
-Group: Development/Libraries
-Source: www.cs.unibo.it:/helm/helmpot/@PACKAGE@-@VERSION@.tar.gz
-%description
-HelmView is a minimal browser for the HELM library.
-
-%prep
-%setup
-
-%build
-./configure
-make
-
-%install
-make install
-
-%files
-%doc AUTHORS COPYING ChangeLog INSTALL LICENSE NEWS README TODO 
-
-/usr/local/bin/@PACKAGE@
diff --git a/helm/helmpot/main.c b/helm/helmpot/main.c
deleted file mode 100644 (file)
index c2abc2d..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2000-2002, Luca Padovani <luca.padovani@cs.unibo.it>.
- * 
- * This file is part of HelmPot, a minimal browser for HELM.
- * 
- * HelmPot 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.
- * 
- * HelmPot 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 HelmPot; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, see the HelmPot World-Wide-Web page,
- * http://cs.unibo.it/helm/helmpot, or send a mail to
- * <luca.padovani@cs.unibo.it>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <assert.h>
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#include "defs.h"
-#include "guiGTK.h"
-
-#define BUFFER_SIZE 2048
-
-PRIVATE gchar app_name[64];
-PRIVATE gint sockfd;
-PRIVATE struct sockaddr_in address;
-
-PRIVATE void
-error(const gchar* msg)
-{
-  g_assert(msg != NULL);
-  fprintf(stderr, "%s: fatal error: %s\n", app_name, msg);
-}
-
-#if 0
-PRIVATE void
-print_version()
-{
-  printf("%s - written by Luca Padovani (C) 2000.\n", app_name);
-#ifdef DEBUG
-  printf("Compiled %s %s\n", __DATE__, __TIME__);
-#endif
-  exit(0);
-}
-#endif
-
-PRIVATE gboolean
-timeout(gpointer user_data)
-{
-  static gchar file_name[BUFFER_SIZE];
-
-  if (recv(sockfd, file_name, BUFFER_SIZE, 0) < 0) {
-    if (errno != EAGAIN && errno != EWOULDBLOCK)
-      error("error receving message");
-  } else
-    GUI_load_document(file_name);
-
-  return TRUE;
-}
-
-int
-main(int argc, char *argv[])
-{
-  sprintf(app_name, "HELM Pot (Plug-OuT) v%s", VERSION);
-
-  if (argc != 2) {
-    fprintf(stderr, "%s\n\n", app_name);
-    fprintf(stderr, "Usage: helmpot URL\n");
-    exit(-1);
-  }
-
-  sockfd = socket(PF_INET, SOCK_DGRAM, 0);
-  if (sockfd < 0) error("could not create socket");
-
-  if (inet_aton("127.0.0.1", &address.sin_addr) < 0)
-    error("could not create address");
-  address.sin_port = 8778;
-  address.sin_family = PF_INET;
-
-  if (bind(sockfd, &address, sizeof(address)) < 0) {
-    if (sendto(sockfd, argv[1], strlen(argv[1]), 0, &address, sizeof(address)) < 0) 
-      error("could not send message");
-    sleep(1);
-    exit(0);
-  }
-
-  if (fcntl(sockfd, F_SETFL, O_NONBLOCK) < 0)
-    error("could not set the socket to non-block mode");
-
-  GUI_init(&argc, &argv, app_name, 500, 600, timeout, 500);
-
-  GUI_load_document(argv[1]);
-
-  GUI_run();
-  GUI_uninit();
-  GUI_unload_document();
-
-  return 0;
-}
diff --git a/helm/helmpot/pot_mask b/helm/helmpot/pot_mask
deleted file mode 100644 (file)
index 09f71a6..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#define pot_mask_width 16
-#define pot_mask_height 16
-static unsigned char pot_mask_bits[] = {
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xe0, 0x0f, 0xe0, 0x0f,
-   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f,
-   0xfc, 0x7f, 0xf8, 0x3f, 0xf0, 0x1f, 0x00, 0x00};
diff --git a/helm/http_getter/.cvsignore b/helm/http_getter/.cvsignore
deleted file mode 100644 (file)
index a144df6..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-*.cmi
-*.cmo
-*.cma
-*.cmx
-*.cmxa
-*.a
-*.o
-http_getter
-http_getter.opt
diff --git a/helm/http_getter/.depend b/helm/http_getter/.depend
deleted file mode 100644 (file)
index f9b0798..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-http_getter.cmo: http_getter_cache.cmi http_getter_common.cmi \
-    http_getter_const.cmi http_getter_debugger.cmi http_getter_env.cmi \
-    http_getter_map.cmi http_getter_misc.cmi http_getter_types.cmo 
-http_getter.cmx: http_getter_cache.cmx http_getter_common.cmx \
-    http_getter_const.cmx http_getter_debugger.cmx http_getter_env.cmx \
-    http_getter_map.cmx http_getter_misc.cmx http_getter_types.cmx 
-http_getter_cache.cmo: http_getter_common.cmi http_getter_debugger.cmi \
-    http_getter_env.cmi http_getter_misc.cmi http_getter_types.cmo \
-    threadSafe.cmi http_getter_cache.cmi 
-http_getter_cache.cmx: http_getter_common.cmx http_getter_debugger.cmx \
-    http_getter_env.cmx http_getter_misc.cmx http_getter_types.cmx \
-    threadSafe.cmx http_getter_cache.cmi 
-http_getter_common.cmo: http_getter_env.cmi http_getter_misc.cmi \
-    http_getter_types.cmo http_getter_common.cmi 
-http_getter_common.cmx: http_getter_env.cmx http_getter_misc.cmx \
-    http_getter_types.cmx http_getter_common.cmi 
-http_getter_const.cmo: http_getter_const.cmi 
-http_getter_const.cmx: http_getter_const.cmi 
-http_getter_debugger.cmo: http_getter_debugger.cmi 
-http_getter_debugger.cmx: http_getter_debugger.cmi 
-http_getter_env.cmo: http_getter_const.cmi http_getter_misc.cmi \
-    http_getter_types.cmo http_getter_env.cmi 
-http_getter_env.cmx: http_getter_const.cmx http_getter_misc.cmx \
-    http_getter_types.cmx http_getter_env.cmi 
-http_getter_map.cmo: threadSafe.cmi http_getter_map.cmi 
-http_getter_map.cmx: threadSafe.cmx http_getter_map.cmi 
-http_getter_misc.cmo: http_getter_debugger.cmi zack.cmi http_getter_misc.cmi 
-http_getter_misc.cmx: http_getter_debugger.cmx zack.cmx http_getter_misc.cmi 
-threadSafe.cmo: http_getter_debugger.cmi threadSafe.cmi 
-threadSafe.cmx: http_getter_debugger.cmx threadSafe.cmi 
-zack.cmo: zack.cmi 
-zack.cmx: zack.cmi 
-http_getter_cache.cmi: http_getter_types.cmo 
-http_getter_common.cmi: http_getter_types.cmo 
-http_getter_env.cmi: http_getter_types.cmo 
diff --git a/helm/http_getter/AUTHORS b/helm/http_getter/AUTHORS
deleted file mode 100644 (file)
index 5eab6c0..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-- current version (the OCaml one!):
-
-    Stefano Zacchiroli <zack@cs.unibo.it>
-
-- for the old Perl version:
-
-    Claudio Sacerdoti Coen  <sacerdot@cs.unibo.it>
-    Stefano Zacchiroli      <zack@cs.unibo.it>
-    Luca Padovani           <lpadovan@cs.unibo.it>
-
diff --git a/helm/http_getter/BUGS b/helm/http_getter/BUGS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/http_getter/COPYING b/helm/http_getter/COPYING
deleted file mode 100644 (file)
index d60c31a..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   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.
-\f
-                   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.)
-\f
-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.
-\f
-  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.
-\f
-  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
-\f
-           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
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <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 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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/helm/http_getter/ChangeLog b/helm/http_getter/ChangeLog
deleted file mode 100644 (file)
index cd6f55b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-- ignore comments and blank lines in servers file
-- added "list_servers", "add_server", "remove_server" methods
-- bugfix: multiple definition of URI by different servers are now permitted
-
-08/01/2003: OCaml reimplementation available! (version 0.2.1)
-28/12/2000: First alpha release
diff --git a/helm/http_getter/Makefile b/helm/http_getter/Makefile
deleted file mode 100644 (file)
index be5ff62..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-VERSION = 0.2.1
-NAME = http_getter
-
-DISTDIR = http-getter-$(VERSION)
-EXTRA_DIST = AUTHORS COPYING NEWS README BUGS
-DOCS = doc/http_getter.conf.xml.sample
-
-REQUIRES = http dbm pcre netclient pxp shell threads zip
-COMMONOPTS = -package "$(REQUIRES)" -pp camlp4o
-OCAMLFIND = ocamlfind
-OCAMLC = $(OCAMLFIND) ocamlc $(COMMONOPTS)
-OCAMLOPT = $(OCAMLFIND) ocamlopt $(COMMONOPTS)
-OCAMLDEP = $(OCAMLFIND) ocamldep $(COMMONOPTS)
-OCAMLDOC =     \
-       ocamldoc        \
-               $(shell $(OCAMLFIND) query -i-format http)      \
-               $(shell $(OCAMLFIND) query -i-format dbm)       \
-               $(shell $(OCAMLFIND) query -i-format pcre)      \
-               $(shell $(OCAMLFIND) query -i-format netclient) \
-               $(shell $(OCAMLFIND) query -i-format pxp)       \
-               $(shell $(OCAMLFIND) query -i-format shell)     \
-               $(shell $(OCAMLFIND) query -i-format threads)   \
-               $(shell $(OCAMLFIND) query -i-format zip)
-MODULES =      \
-       http_getter_debugger threadSafe                                                         \
-       http_getter_types zack http_getter_misc http_getter_const       \
-       http_getter_env http_getter_common http_getter_map                      \
-       http_getter_cache
-
-OBJS = $(patsubst %,%.cmo,$(MODULES))
-OBJSOPT = $(patsubst %,%.cmx,$(MODULES))
-
-all: byte
-byte: $(NAME)
-opt: $(NAME).opt
-world: byte opt
-
-include .depend
-depend:
-       $(OCAMLDEP) *.ml *.mli > .depend
-
-%.cmi: %.mli
-       $(OCAMLC) -c $<
-%.cmo: %.ml %.cmi
-       $(OCAMLC) -c $<
-%.cmx: %.ml %.cmi
-       $(OCAMLOPT) -c $<
-include Makefile.overrides
-$(NAME).cmo: $(NAME).ml
-       $(OCAMLC) -c $<
-$(NAME).cmx: $(NAME).ml
-       $(OCAMLOPT) -c $<
-$(NAME): $(OBJS) $(NAME).ml
-       $(OCAMLC) -linkpkg -thread -o $@ $^
-$(NAME).opt: $(OBJSOPT) $(NAME).ml
-       $(OCAMLOPT) -linkpkg -thread -o $@ $^
-
-http_getter.dot: *.ml *.mli
-       $(OCAMLDOC) -dot -o $@ $^
-
-distclean: clean
-clean:
-       rm -f *.cm[aiox] *.o $(NAME){,.opt} *.dot
-dist: distclean depend
-       if [ -d $(DISTDIR) ]; then rm -rf $(DISTDIR); else true; fi
-       mkdir $(DISTDIR)/
-       mkdir $(DISTDIR)/doc
-       cp $(DOCS) $(DISTDIR)/doc/
-       for m in $(patsubst %, %.mli, $(MODULES)); do   \
-               if [ "$$m" != "http_getter_types.mli" ]; then   \
-                       cp $$m $(DISTDIR)/;     \
-               fi;     \
-       done
-       cp      \
-               $(patsubst %, %.ml, $(MODULES)) \
-               $(NAME).ml      \
-               Makefile Makefile.overrides .depend     \
-               $(DISTDIR)/
-       cp $(EXTRA_DIST) $(DISTDIR)/
-       tar cvzf $(DISTDIR).tar.gz $(DISTDIR)/
-       rm -rf $(DISTDIR)/
-distcheck: dist
-       tar xvzf $(DISTDIR).tar.gz
-       cd $(DISTDIR); make
-       rm -rf $(DISTDIR)
-
-.PHONY: all byte dist distcheck opt world depend clean distclean
-
diff --git a/helm/http_getter/Makefile.overrides b/helm/http_getter/Makefile.overrides
deleted file mode 100644 (file)
index 4b669eb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-http_getter_types.cmi http_getter_types.cmo: http_getter_types.ml
-       $(OCAMLC) -c $<
diff --git a/helm/http_getter/NEWS b/helm/http_getter/NEWS
deleted file mode 100644 (file)
index cbb967e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-08/01/2003
-
-  Fully OCaml HTTP Getter is now available: go and burn the Perl implementation!
-  -- Zack <zack@cs.unibo.it>
-
diff --git a/helm/http_getter/README b/helm/http_getter/README
deleted file mode 100644 (file)
index 1074b3b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-HELM (Hypertextual Electronic Library of Mathematics) is a project aimed
-at the creation of tools for the development and exploitation of a huge
-distributed library of formal mathematical knowledge. This package holds
-the getter used to map logical names into phisical names and download
-the required files.
-
-For more information see http://helm.cs.unibo.it
diff --git a/helm/http_getter/doc/http_getter.conf.xml.sample b/helm/http_getter/doc/http_getter.conf.xml.sample
deleted file mode 100644 (file)
index f629e2c..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<http_getter_configuration>
-
-  <http_getter_servers_file>run/servers.txt</http_getter_servers_file>
-
-  <http_getter_cic_dir>run/cic_library</http_getter_cic_dir>
-  <http_getter_nuprl_dir>run/nuprl_library</http_getter_nuprl_dir>
-  <http_getter_rdf_dir>run/rdf_library</http_getter_rdf_dir>
-  <http_getter_dtd_dir>run/dtd</http_getter_dtd_dir>
-
-  <http_getter_cic_dbm>run/cic_db</http_getter_cic_dbm>
-  <http_getter_nuprl_dbm>run/nuprl_db</http_getter_nuprl_dbm>
-  <http_getter_rdf_dbm>run/rdf_db</http_getter_rdf_dbm>
-  <http_getter_xsl_dbm>run/xsl_db</http_getter_xsl_dbm>
-
-  <http_getter_cache_mode>gz</http_getter_cache_mode>
-<!--   <http_getter_cache_mode>normal</http_getter_cache_mode> -->
-
-  <http_getter_xml_indexname>index.txt</http_getter_xml_indexname>
-  <http_getter_rdf_indexname>rdf_index.txt</http_getter_rdf_indexname>
-  <http_getter_xsl_indexname>xslt_index.txt</http_getter_xsl_indexname>
-
-  <http_getter_dtd_base_url>http://mowgli.cs.unibo.it/dtd</http_getter_dtd_base_url>
-
-  <http_getter_port>58081</http_getter_port>
-
-</http_getter_configuration>
diff --git a/helm/http_getter/http_getter.ml b/helm/http_getter/http_getter.ml
deleted file mode 100644 (file)
index 0792d30..0000000
+++ /dev/null
@@ -1,519 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Http_getter_common;;
-open Http_getter_misc;;
-open Http_getter_types;;
-open Http_getter_debugger;;
-open Printf;;
-
-  (* constants *)
-
-let common_headers = [
-  "Cache-Control", "no-cache";
-  "Pragma", "no-cache";
-  "Expires", "0"
-]
-
-  (* HTTP queries argument parsing *)
-
-  (* parse encoding ("format" parameter), default is Enc_normal *)
-let parse_enc (req: Http_types.request) =
-  try
-    (match req#param "format" with
-    | "normal" -> Enc_normal
-    | "gz" -> Enc_gzipped
-    | s -> raise (Http_getter_bad_request ("Invalid format: " ^ s)))
-  with Http_types.Param_not_found _ -> Enc_normal
-;;
-  (* parse "patch_dtd" parameter, default is true *)
-let parse_patch (req: Http_types.request) =
-  try
-    (match req#param "patch_dtd" with
-    | s when String.lowercase s = "yes" -> true
-    | s when String.lowercase s = "no" -> false
-    | s -> raise (Http_getter_bad_request ("Invalid patch_dtd value: " ^ s)))
-  with Http_types.Param_not_found _ -> true
-;;
-  (* parse output format ("format" parameter), no default value *)
-let parse_output_format (req: Http_types.request) =
-  match req#param "format" with
-  | s when String.lowercase s = "txt" -> Fmt_text
-  | s when String.lowercase s = "xml" -> Fmt_xml
-  | s -> raise (Http_getter_bad_request ("Invalid /ls format: " ^ s))
-;;
-  (* parse "baseuri" format for /ls method, no default value *)
-let parse_ls_uri =
-  let parse_ls_RE = Pcre.regexp "^(\\w+):(.*)$" in
-  let trailing_slash_RE = Pcre.regexp "/+$" in
-  let wrong_uri uri =
-    raise (Http_getter_bad_request ("Invalid /ls baseuri: " ^ uri))
-  in
-  fun (req: Http_types.request) ->
-    let baseuri = req#param "baseuri" in
-    try
-      let subs =
-        Pcre.extract ~rex:parse_ls_RE
-          (Pcre.replace ~rex:trailing_slash_RE  baseuri)
-      in
-      (match (subs.(1), subs.(2)) with
-      | "cic", uri -> Cic uri
-      | "theory", uri -> Theory uri
-      | _ -> wrong_uri baseuri)
-    with Not_found -> wrong_uri baseuri
-;;
-
-  (* global maps, shared by all threads *)
-
-let cic_map = new Http_getter_map.map Http_getter_env.cic_dbm in
-let nuprl_map = new Http_getter_map.map Http_getter_env.nuprl_dbm in
-let rdf_map = new Http_getter_map.map Http_getter_env.rdf_dbm in
-let xsl_map = new Http_getter_map.map Http_getter_env.xsl_dbm in
-
-let save_maps () =
- cic_map#close; nuprl_map#close; rdf_map#close; xsl_map#close in
-let map_of_uri = function
-  | uri when is_cic_uri uri -> cic_map
-  | uri when is_nuprl_uri uri -> nuprl_map
-  | uri when is_rdf_uri uri -> rdf_map
-  | uri when is_xsl_uri uri -> xsl_map
-  | uri -> raise (Http_getter_unresolvable_URI uri)
-in
-let resolve uri =
-  try
-    (map_of_uri uri)#resolve uri
-  with Http_getter_map.Key_not_found _ ->
-    raise (Http_getter_unresolvable_URI uri)
-in
-let register uri =
-  (* Warning: this fail if uri is already registered *)
-  (map_of_uri uri)#add uri
-in
-let return_all_foo_uris map doctype filter outchan =
-  (** return all URIs contained in 'map' which satisfy predicate 'filter'; URIs
-  are written in an XMLish format ('doctype' is the XML doctype) onto 'outchan'
-  *)
-  Http_daemon.send_basic_headers ~code:200 outchan;
-  Http_daemon.send_header "Content-Type" "text/xml" outchan;
-  Http_daemon.send_headers common_headers outchan;
-  Http_daemon.send_CRLF outchan;
-  output_string
-    outchan
-    (sprintf
-"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>
-<!DOCTYPE %s SYSTEM \"%s/getdtd?uri=%s.dtd\">
-
-<%s>
-"
-      doctype
-      Http_getter_env.my_own_url
-      doctype
-      doctype);
-  map#iter
-    (fun uri _ ->
-      if filter uri then
-        output_string outchan (sprintf "\t<uri value=\"%s\" />\n" uri));
-  output_string outchan (sprintf "</%s>\n" doctype)
-in
-let return_all_xml_uris = return_all_foo_uris cic_map "alluris" in
-let return_all_rdf_uris = return_all_foo_uris rdf_map "allrdfuris" in
-let return_ls =
-  let (++) (oldann, oldtypes, oldbody) (newann, newtypes, newbody) =
-    ((if newann   > oldann    then newann   else oldann),
-     (if newtypes > oldtypes  then newtypes else oldtypes),
-     (if newbody  > oldbody   then newbody  else oldbody))
-  in
-  let basepart_RE =
-    Pcre.regexp "^([^.]*\\.[^.]*)((\\.body)|(\\.types))?(\\.ann)?"
-  in
-  let (types_RE, types_ann_RE, body_RE, body_ann_RE) =
-    (Pcre.regexp "\\.types", Pcre.regexp "\\.types.ann",
-     Pcre.regexp "\\.body", Pcre.regexp "\\.body.ann")
-  in
-  let (slash_RE, til_slash_RE, no_slashes_RE) =
-    (Pcre.regexp "/", Pcre.regexp "^.*/", Pcre.regexp "^[^/]*$")
-  in
-  fun lsuri fmt outchan ->
-    let pat =
-      "^" ^
-      (match lsuri with Cic p -> ("cic:" ^ p) | Theory p -> ("theory:" ^ p))
-    in
-    let (dir_RE, obj_RE) =
-      (Pcre.regexp (pat ^ "/"), Pcre.regexp (pat ^ "(\\.|$)"))
-    in
-    let dirs = ref StringSet.empty in
-    let objs = Hashtbl.create 17 in
-    let store_dir d =
-      dirs := StringSet.add (List.hd (Pcre.split ~rex:slash_RE d)) !dirs
-    in
-    let store_obj o =
-      let basepart = Pcre.replace ~rex:basepart_RE ~templ:"$1" o in
-      let oldflags =
-        try
-          Hashtbl.find objs basepart
-        with Not_found -> (false, No, No) (* no ann, no types, no body *)
-      in
-      let newflags =
-        match o with
-        | s when Pcre.pmatch ~rex:types_RE s     -> (false, Yes, No)
-        | s when Pcre.pmatch ~rex:types_ann_RE s -> (true,  Ann, No)
-        | s when Pcre.pmatch ~rex:body_RE s      -> (false, No,  Yes)
-        | s when Pcre.pmatch ~rex:body_ann_RE s  -> (true,  No,  Ann)
-        | s -> (false, No, No)
-      in
-      Hashtbl.replace objs basepart (oldflags ++ newflags)
-    in
-    cic_map#iter  (* BLEARGH Dbm module lacks support for fold-like functions *)
-      (fun key _ ->
-        match key with
-        | uri when Pcre.pmatch ~rex:dir_RE uri ->  (* directory hit *)
-            let localpart = Pcre.replace ~rex:dir_RE uri in
-            if Pcre.pmatch ~rex:no_slashes_RE localpart then
-              store_obj localpart
-            else
-              store_dir localpart
-        | uri when Pcre.pmatch ~rex:obj_RE  uri ->  (* file hit *)
-            store_obj (Pcre.replace ~rex:til_slash_RE uri)
-        | uri -> () (* miss *));
-    match fmt with
-    | Fmt_text ->
-        let body =
-          (List.fold_left
-            (fun s d -> sprintf "%sdir, %s\n" s d) ""
-            (StringSet.elements !dirs)) ^
-          (Http_getter_misc.hashtbl_sorted_fold
-            (fun uri (annflag, typesflag, bodyflag) cont ->
-              sprintf "%sobject, %s, <%s,%s,%s>\n"
-                cont uri (if annflag then "YES" else "NO")
-                (string_of_ls_flag typesflag) (string_of_ls_flag bodyflag))
-            objs "")
-        in
-        Http_daemon.respond
-          ~headers:(("Content-Type", "text/plain") :: common_headers)
-          ~body outchan
-    | Fmt_xml ->
-        let body =
-          sprintf
-"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>
-<!DOCTYPE ls SYSTEM \"%s/getdtd?uri=ls.dtd\">
-
-<ls>
-%s
-</ls>
-"
-            Http_getter_env.my_own_url
-            ("\n" ^
-            (String.concat
-              "\n"
-              (List.map
-                (fun d -> "<section>" ^ d ^ "</section>")
-                (StringSet.elements !dirs))) ^ "\n" ^
-            (Http_getter_misc.hashtbl_sorted_fold
-              (fun uri (annflag, typesflag, bodyflag) cont ->
-                sprintf
-"%s<object name=\"%s\">
-\t<ann value=\"%s\" />
-\t<types value=\"%s\" />
-\t<body value=\"%s\" />
-</object>
-"
-                  cont uri (if annflag then "YES" else "NO")
-                  (string_of_ls_flag typesflag)
-                  (string_of_ls_flag bodyflag))
-              objs ""))
-        in
-        Http_daemon.respond
-          ~headers:(("Content-Type", "text/xml") :: common_headers)
-          ~body outchan
-in
-let (index_line_sep_RE, index_sep_RE, trailing_types_RE,
-    heading_cic_RE, heading_theory_RE, heading_nuprl_RE,
-    heading_rdf_cic_RE, heading_rdf_theory_RE) =
-  (Pcre.regexp "[ \t]+", Pcre.regexp "\r\n|\r|\n",
-  Pcre.regexp "\\.types$",
-  Pcre.regexp "^cic:", Pcre.regexp "^theory:", Pcre.regexp "^nuprl:",
-  Pcre.regexp "^helm:rdf.*//cic:", Pcre.regexp "^helm:rdf.*//theory:")
-in
-let update_from_server logmsg server_url = (* use global maps *)
-  debug_print ("Updating information from " ^ server_url);
-  let xml_url_of_uri = function
-      (* TODO missing sanity checks on server_url, e.g. it can contains $1 *)
-    | uri when (Pcre.pmatch ~rex:heading_cic_RE uri) ->
-        Pcre.replace ~rex:heading_cic_RE ~templ:server_url uri
-    | uri when (Pcre.pmatch ~rex:heading_theory_RE uri) ->
-        Pcre.replace ~rex:heading_theory_RE ~templ:server_url uri
-    | uri when (Pcre.pmatch ~rex:heading_nuprl_RE uri) ->
-        Pcre.replace ~rex:heading_nuprl_RE ~templ:server_url uri
-    | uri -> raise (Http_getter_invalid_URI uri)
-  in
-  let rdf_url_of_uri = function (* TODO as above *)
-    | uri when (Pcre.pmatch ~rex:heading_rdf_cic_RE uri) ->
-        Pcre.replace ~rex:heading_rdf_cic_RE ~templ:server_url uri
-    | uri when (Pcre.pmatch ~rex:heading_rdf_theory_RE uri) ->
-        Pcre.replace ~rex:heading_rdf_theory_RE ~templ:server_url uri
-    | uri -> raise (Http_getter_invalid_URI uri)
-  in
-  let log = ref (logmsg ^ "Processing server: " ^ server_url ^ "<br />\n") in
-  let (xml_index, rdf_index, xsl_index) =
-    (* TODO keeps index in memory, is better to keep them on temp files? *)
-    (http_get (server_url ^ "/" ^ Http_getter_env.xml_index),
-     http_get (server_url ^ "/" ^ Http_getter_env.rdf_index),
-     http_get (server_url ^ "/" ^ Http_getter_env.xsl_index))
-  in
-  if (xml_index = None && rdf_index = None && xsl_index = None) then
-    debug_print (sprintf "Warning: useless server %s" server_url);
-  (match xml_index with
-  | Some xml_index ->
-      (log := !log ^ "Updating XML db ...<br />\n";
-      List.iter
-        (function
-          | l when is_blank_line l -> ()  (* skip blank and commented lines *)
-          | l ->
-              try
-                (match Pcre.split ~rex:index_line_sep_RE l with
-                | [uri; "gz"] ->
-                   assert (is_cic_uri uri || is_nuprl_uri uri) ;
-                   (map_of_uri uri)#replace
-                    uri ((xml_url_of_uri uri) ^ ".xml.gz")
-                | [uri] ->
-                   assert (is_cic_uri uri || is_nuprl_uri uri) ;
-                   (map_of_uri uri)#replace
-                    uri ((xml_url_of_uri uri) ^ ".xml")
-                | _ ->
-                    log := !log ^ "Ignoring invalid line: '" ^ l ^ "'<br />\n")
-              with Http_getter_invalid_URI uri ->
-                log := !log ^ "Ignoring invalid XML URI: '" ^ uri ^ "'<br />\n")
-            (Pcre.split ~rex:index_sep_RE xml_index)) (* xml_index lines *)
-  | None -> ());
-  (match rdf_index with
-  | Some rdf_index ->
-      (log := !log ^ "Updating RDF db ...<br />\n";
-      List.iter
-        (fun l ->
-          try
-            (match Pcre.split ~rex:index_line_sep_RE l with
-            | [uri; "gz"] ->
-                rdf_map#replace uri ((rdf_url_of_uri uri) ^ ".xml.gz")
-            | [uri] -> rdf_map#replace uri ((rdf_url_of_uri uri) ^ ".xml")
-            | _ -> log := !log ^ "Ignoring invalid line: " ^ l ^ "<br />\n")
-          with Http_getter_invalid_URI uri ->
-            log := !log ^ "Ignoring invalid RDF URI: " ^ uri ^ "<br />\n")
-        (Pcre.split ~rex:index_sep_RE rdf_index)) (* rdf_index lines *)
-  | None -> ());
-  (match xsl_index with
-  | Some xsl_index ->
-      (log := !log ^ "Updating XSLT db ...<br />\n";
-      List.iter
-        (fun l -> xsl_map#replace l (server_url ^ "/" ^ l))
-        (Pcre.split ~rex:index_sep_RE xsl_index);
-      log := !log ^ "All done!<br />\n")
-  | None -> ());
-  debug_print "done with this server";
-  !log
-in
-let update_from_all_servers () =  (* use global maps *)
-  cic_map#clear; nuprl_map#clear; rdf_map#clear; xsl_map#clear;
-  let log =
-    List.fold_left
-      update_from_server
-      ""  (* initial logmsg: empty *)
-        (* reverse order: 1st server is the most important one *)
-      (List.rev !Http_getter_env.servers)
-  in
-  cic_map#sync; nuprl_map#sync; rdf_map#sync; xsl_map#sync;
-  log
-in
-
-  (* thread action *)
-
-let callback (req: Http_types.request) outchan =
-  try
-    debug_print ("Connection from " ^ req#clientAddr);
-    debug_print ("Received request: " ^ req#path);
-    (match req#path with
-    | "/help" ->
-        return_html_raw
-          (Http_getter_const.usage_string (Http_getter_env.env_to_string ()))
-          outchan
-    | "/getxml" | "/getxslt" | "/getdtd" | "/resolve" | "/register" ->
-        (let uri = req#param "uri" in  (* common parameter *)
-        match req#path with
-        | "/getxml" ->
-            let enc = parse_enc req in
-            let patch = parse_patch req in
-            Http_getter_cache.respond_xml
-              ~url:(resolve uri) ~uri ~enc ~patch outchan
-        | "/getxslt" ->
-            let patch = parse_patch req in
-            Http_getter_cache.respond_xsl ~url:(resolve uri) ~patch outchan
-        | "/getdtd" ->
-            let patch = parse_patch req in
-            Http_getter_cache.respond_dtd
-              ~patch ~url:(Http_getter_env.dtd_dir ^ "/" ^ uri) outchan
-        | "/resolve" ->
-            (try
-              return_xml_raw
-                (sprintf "<url value=\"%s\" />\n" (resolve uri))
-                outchan
-            with Http_getter_unresolvable_URI uri ->
-              return_xml_raw "<unresolved />\n" outchan)
-        | "/register" ->
-            let url = req#param "url" in
-            register uri url;
-            return_html_msg "Register done" outchan
-        | _ -> assert false)
-    | "/update" ->
-        Http_getter_env.reload (); (* reload servers list from servers file *)
-        let log = update_from_all_servers () in
-        return_html_msg log outchan
-    | "/list_servers" ->
-        return_html_raw
-          (sprintf "<html><body><table>\n%s\n</table></body></html>"
-            (String.concat "\n"
-              (List.map
-                (let i = ref ~-1 in
-                fun s -> incr i; sprintf "<tr><td>%d</td><td>%s</td></tr>" !i s)
-                !Http_getter_env.servers)))
-          outchan
-    | "/add_server" ->
-        let name = req#param "url" in
-        (try
-          let position =
-            try
-              let res = int_of_string (req#param "position") in
-              if res < 0 then
-                raise (Failure "int_of_string");
-              res
-            with Failure "int_of_string" ->
-              raise (Http_getter_bad_request
-                (sprintf "position must be a non negative integer (%s given)"
-                  (req#param "position")))
-          in
-          if position = 0 then  (* fallback to default value *)
-            raise (Http_types.Param_not_found "foo")
-          else if position > 0 then begin (* add server and update all *)
-            Http_getter_env.add_server ~position name;
-            let log = update_from_all_servers () in
-            return_html_msg
-              (sprintf "Added server %s in position %d)<br />\n%s"
-                name position log)
-              outchan
-          end else (* position < 0 *) (* error! *)
-            assert false (* already checked above *)
-        with Http_types.Param_not_found _ ->  (* add as 1st server by default *)
-          Http_getter_env.add_server ~position:0 name;
-          let log = update_from_server  (* quick update (new server only) *)
-            (sprintf "Added server %s in head position<br />\n" name) name
-          in
-          return_html_msg log outchan)
-    | "/remove_server" ->
-        let position =
-          try
-            let res = int_of_string (req#param "position") in
-            if res < 0 then
-              raise (Failure "int_of_string");
-            res
-          with Failure "int_of_string" ->
-            raise (Http_getter_bad_request
-              (sprintf "position must be a non negative integer (%s given)"
-                (req#param "position")))
-        in
-        let server_name =
-          try
-            List.nth !Http_getter_env.servers position
-          with Failure "nth" ->
-            raise (Http_getter_bad_request
-              (sprintf "no server with position %d" position))
-        in
-        Http_getter_env.remove_server position;
-        let log = update_from_all_servers () in
-        return_html_msg
-          (sprintf "Removed server %s (position %d)<br />\n%s"
-            server_name position log)
-          outchan
-    | "/getalluris" ->
-        return_all_xml_uris
-          (fun uri ->
-            (Pcre.pmatch ~rex:heading_cic_RE uri) &&
-            not (Pcre.pmatch ~rex:trailing_types_RE uri))
-          outchan
-    | "/getallrdfuris" ->
-        (let classs = req#param "class" in
-        try
-          let filter =
-            let base = "^helm:rdf:www\\.cs\\.unibo\\.it/helm/rdf/" in
-            match classs with
-            | ("forward" as c) | ("backward" as c) ->
-                (fun uri -> Pcre.pmatch ~pat:(base ^ c) uri)
-            | c -> raise (Http_getter_invalid_RDF_class c)
-          in
-          return_all_rdf_uris filter outchan
-        with Http_getter_invalid_RDF_class c ->
-          raise (Http_getter_bad_request ("Invalid RDF class: " ^ c)))
-    | "/ls" -> return_ls (parse_ls_uri req) (parse_output_format req) outchan
-    | "/getempty" ->
-        Http_daemon.respond ~body:Http_getter_const.empty_xml outchan
-    | invalid_request ->
-        Http_daemon.respond_error ~status:(`Client_error `Bad_request) outchan);
-    debug_print "Done!\n"
-  with
-  | Http_types.Param_not_found attr_name ->
-      return_400 (sprintf "Parameter '%s' is missing" attr_name) outchan
-  | Http_getter_bad_request msg -> return_html_error msg outchan
-  | Http_getter_internal_error msg -> return_html_internal_error msg outchan
-  | Shell.Subprocess_error l ->
-      return_html_internal_error
-        (String.concat "<br />\n"
-          (List.map
-            (fun (cmd, code) ->
-              sprintf "Command '%s' returned %s"
-                cmd (string_of_proc_status code))
-            l))
-        outchan
-  | exc ->
-      return_html_error
-        ("Uncaught exception: " ^ (Printexc.to_string exc))
-        outchan
-in
-
-    (* daemon initialization *)
-
-let main () =
-  print_string (Http_getter_env.env_to_string ());
-  flush stdout;
-  Unix.putenv "http_proxy" "";
-  at_exit save_maps;
-  Sys.catch_break true;
-  try
-    Http_daemon.start'
-      ~timeout:(Some 600) ~port:Http_getter_env.port ~mode:`Thread callback
-  with Sys.Break -> ()  (* 'save_maps' already registered with 'at_exit' *)
-in
-
-main ()
-
diff --git a/helm/http_getter/http_getter_cache.ml b/helm/http_getter/http_getter_cache.ml
deleted file mode 100644 (file)
index 3cc9e40..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-(* TODO cache expires control!!! *)
-(* TODO uwobo loop:
-    if two large proof (already in cache) are requested at the same time by two
-    clients, uwobo (java implementation, not yet tested with the OCaml one)
-    starts looping sending output to one of the client *)
-
-open Http_getter_common;;
-open Http_getter_debugger;;
-open Http_getter_misc;;
-open Http_getter_types;;
-open Printf;;
-
-  (* expose ThreadSafe.threadSafe methods *)
-class threadSafe =
-  object
-    inherit ThreadSafe.threadSafe
-    method virtual doCritical : 'a. 'a lazy_t -> 'a
-    method virtual doReader : 'a. 'a lazy_t -> 'a
-    method virtual doWriter : 'a. 'a lazy_t -> 'a
-  end
-;;
-let threadSafe = new threadSafe ;;
-
-let resource_type_of_url = function
-  | url when Pcre.pmatch ~pat:"\\.xml\\.gz$" url -> Enc_gzipped
-  | url when Pcre.pmatch ~pat:"\\.xml$" url -> Enc_normal
-  | url -> raise (Http_getter_invalid_URL url)
-let extension_of_resource_type = function
-  | Enc_normal -> "xml"
-  | Enc_gzipped -> "xml.gz"
-
-  (* basename = resource name without trailing ".gz", if any *)
-let is_in_cache basename =
-  Sys.file_exists
-    (match Http_getter_env.cache_mode with
-    | Enc_normal -> basename
-    | Enc_gzipped -> basename ^ ".gz")
-
-let respond_xml ?(enc = Enc_normal) ?(patch = true) ~url ~uri outchan =
-  let resource_type = resource_type_of_url url in
-  let extension = extension_of_resource_type resource_type in
-  let downloadname =
-    match http_getter_uri_of_string uri with  (* parse uri *)
-    | Cic_uri (Cic baseuri) | Cic_uri (Theory baseuri) ->
-          (* assumption: baseuri starts with "/" *)
-        sprintf "%s%s.%s" Http_getter_env.cic_dir baseuri extension
-    | Nuprl_uri baseuri ->
-          (* assumption: baseuri starts with "/" *)
-        sprintf "%s%s.%s" Http_getter_env.nuprl_dir baseuri extension
-    | Rdf_uri (prefix, ((Cic baseuri) as qbaseuri))
-    | Rdf_uri (prefix, ((Theory baseuri) as qbaseuri)) ->
-        let escaped_prefix =
-          (Pcre.replace ~pat:"/" ~templ:"_"
-            (Pcre.replace ~pat:"_" ~templ:"__"
-              (prefix ^
-              (match qbaseuri with
-              | Cic _ -> "//cic:"
-              | Theory _ -> "//theory:"))))
-        in
-        sprintf "%s/%s%s.%s"
-          Http_getter_env.rdf_dir escaped_prefix baseuri extension
-  in
-  let patch_fun =
-    if patch then Http_getter_common.patch_xml else (fun x -> x)
-  in
-  let basename = Pcre.replace ~pat:"\\.gz$" downloadname in
-  let contype = "text/xml" in
-    (* File cache if needed and return a short circuit file.
-      Short circuit is needed in situation like:
-        resource type = normal, cache type = gzipped, required encoding = normal
-      we would like to avoid normal -> gzipped -> normal conversions. To avoid
-      this tmp_short_circuit is used to remember the name of the intermediate
-      file name *)
-  let fill_cache () =
-    threadSafe#doWriter (lazy(
-      if not (is_in_cache basename) then begin  (* cache MISS *)
-        debug_print "Cache MISS :-(";
-        mkdir ~parents:true (Filename.dirname downloadname);
-        match (resource_type, Http_getter_env.cache_mode) with
-        | Enc_normal, Enc_normal | Enc_gzipped, Enc_gzipped ->
-            wget ~output:downloadname url;
-            None
-        | Enc_normal, Enc_gzipped ->  (* resource normal, cache gzipped *)
-            let tmp = tempfile () in
-            wget ~output:tmp url;
-            gzip ~output:(basename ^ ".gz") ~keep:true tmp; (* fill cache *)
-            if enc = Enc_normal then  (* user wants normal: don't delete it! *)
-              Some (tmp, enc)
-            else begin
-              Sys.remove tmp;
-              None
-            end
-        | Enc_gzipped, Enc_normal ->  (* resource gzipped, cache normal *)
-            let tmp = tempfile () in
-            wget ~output:tmp url;
-            gunzip ~output:basename ~keep:true tmp; (* fill cache *)
-            if enc = Enc_gzipped then (* user wants gzipped: don't delete it! *)
-              Some (tmp, enc)
-            else begin
-              Sys.remove tmp;
-              None
-            end
-      end else begin
-        debug_print "Cache HIT :-)";
-        None
-      end
-    )) in
-  let tmp_short_circuit = fill_cache () in
-  threadSafe#doReader (lazy(
-    assert (is_in_cache basename);
-    match (enc, Http_getter_env.cache_mode) with
-    | Enc_normal, Enc_normal | Enc_gzipped, Enc_gzipped ->
-        (* resource in cache is already in the required format *)
-        (match enc with
-        | Enc_normal ->
-            debug_print "No format mangling required (encoding = normal)";
-            return_file ~fname:basename ~contype ~patch_fun outchan
-        | Enc_gzipped ->
-            debug_print "No format mangling required (encoding = gzipped)";
-            return_file
-              ~fname:(basename ^ ".gz") ~contype ~contenc:"x-gzip"
-              ~patch_fun ~gunzip:true
-              outchan)
-    | Enc_normal, Enc_gzipped | Enc_gzipped, Enc_normal ->
-        (match tmp_short_circuit with
-        | None -> (* no short circuit possible, use cache *)
-          debug_print "No short circuit available, use cache";
-          let tmp = tempfile () in
-          (match enc with
-          | Enc_normal ->
-            (* required format is normal, cached version is gzipped *)
-            gunzip  (* gunzip to tmp *)
-              ~output:tmp ~keep:true (basename ^ ".gz");
-            return_file ~fname:tmp ~contype ~patch_fun outchan;
-          | Enc_gzipped ->
-            (* required format is gzipped, cached version is normal *)
-            gzip ~output:tmp ~keep:true basename;  (* gzip to tmp *)
-            return_file
-              ~fname:tmp ~contype ~contenc:"x-gzip"
-              ~patch_fun ~gunzip:true
-              outchan);
-          Sys.remove tmp
-        | Some (fname, Enc_normal) ->  (* short circuit available, use it! *)
-            debug_print "Using short circuit (encoding = normal)";
-            return_file ~fname ~contype ~patch_fun outchan;
-            Sys.remove fname
-        | Some (fname, Enc_gzipped) -> (* short circuit available, use it! *)
-            debug_print "Using short circuit (encoding = gzipped)";
-            return_file
-              ~fname ~contype ~contenc:"x-gzip" ~patch_fun ~gunzip:true outchan;
-            Sys.remove fname)
-  ))
-;;
-
-  (* TODO enc is not yet supported *)
-let respond_xsl ?(enc = Enc_normal) ?(patch = true) ~url outchan =
-  let patch_fun =
-    if patch then Http_getter_common.patch_xsl else (fun x -> x)
-  in
-  let fname = tempfile () in
-  wget ~output:fname url;
-  return_file ~fname ~contype:"text/xml" ~patch_fun outchan;
-  Sys.remove fname
-;;
-
-  (* TODO enc is not yet supported *)
-let respond_dtd ?(enc = Enc_normal) ?(patch = true) ~url outchan =
-  let patch_fun =
-    if patch then Http_getter_common.patch_dtd else (fun x -> x)
-  in
-  if Sys.file_exists url then
-    (* TODO check this: old getter here used text/xml *)
-    return_file ~fname:url ~contype:"text/plain" ~patch_fun outchan
-  else
-    return_html_error ("Can't find DTD: " ^ url) outchan
-
diff --git a/helm/http_getter/http_getter_cache.mli b/helm/http_getter/http_getter_cache.mli
deleted file mode 100644 (file)
index a1acfca..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Http_getter_types;;
-
-val respond_xml:
-  ?enc:http_getter_encoding -> ?patch:bool -> url:string -> uri:string ->
-  out_channel ->
-    unit
-
-val respond_xsl:
-  ?enc:http_getter_encoding -> ?patch:bool -> url:string ->
-  out_channel ->
-    unit
-
-val respond_dtd:
-  ?enc:http_getter_encoding -> ?patch:bool -> url:string ->
-  out_channel ->
-    unit
-
diff --git a/helm/http_getter/http_getter_common.ml b/helm/http_getter/http_getter_common.ml
deleted file mode 100644 (file)
index ad54933..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Http_getter_types;;
-open Printf;;
-
-let string_of_ls_flag = function No -> "NO" | Yes -> "YES" | Ann -> "ANN"
-let string_of_encoding = function
-  | Enc_normal -> "Normal"
-  | Enc_gzipped -> "GZipped"
-
-let is_cic_obj_uri uri = Pcre.pmatch ~pat:"^cic:" uri
-let is_theory_uri uri = Pcre.pmatch ~pat:"^theory:" uri
-let is_cic_uri uri = is_cic_obj_uri uri || is_theory_uri uri
-let is_nuprl_uri uri = Pcre.pmatch ~pat:"^nuprl:" uri
-let is_rdf_uri uri = Pcre.pmatch ~pat:"^helm:rdf(.*):(.*)//(.*)" uri
-let is_xsl_uri uri = Pcre.pmatch ~pat:"^\\w+\\.xsl" uri
-
-let rec http_getter_uri_of_string = function
-  | uri when is_rdf_uri uri ->
-      (match Pcre.split ~pat:"//" uri with
-      | [ prefix; uri ] ->
-          let rest =
-            match http_getter_uri_of_string uri with
-            | Cic_uri xmluri -> xmluri
-            | _ -> raise (Http_getter_invalid_URI uri)
-          in
-          Rdf_uri (prefix, rest)
-      | _ -> raise (Http_getter_invalid_URI uri))
-  | uri when is_cic_uri uri -> Cic_uri (Cic (Pcre.replace ~pat:"^cic:" uri))
-  | uri when is_nuprl_uri uri -> Nuprl_uri (Pcre.replace ~pat:"^nuprl:" uri)
-  | uri when is_theory_uri uri ->
-      Cic_uri (Theory (Pcre.replace ~pat:"^theory:" uri))
-  | uri -> raise (Http_getter_invalid_URI uri)
-
-let patch_xml line =
-  Pcre.replace
-    ~pat:(sprintf "DOCTYPE (.*) SYSTEM\\s+\"%s/" Http_getter_env.dtd_base_url)
-    ~templ:(
-      sprintf "DOCTYPE $1 SYSTEM \"%s/getdtd?uri=" Http_getter_env.my_own_url)
-    line
-let patch_xsl =
-  let mk_patch_fun tag line =
-    Pcre.replace
-      ~pat:(sprintf "%s\\s+href=\"" tag)
-      ~templ:(
-        sprintf "%s href=\"%s/getxslt?uri=" tag Http_getter_env.my_own_url)
-      line
-  in
-  let (patch_import, patch_include) =
-    (mk_patch_fun "xsl:import", mk_patch_fun "xsl:include")
-  in
-  fun line -> patch_include (patch_import line)
-let patch_dtd line =
-  Pcre.replace
-    ~pat:"ENTITY (.*) SYSTEM\\s+\""
-    ~templ:(
-      sprintf "ENTITY $1 SYSTEM \"%s/getdtd?uri=" Http_getter_env.my_own_url)
-    line
-
-let pp_error s =
-  sprintf "<html><body><h1>Http Getter error: %s</h1></body></html>" s
-let pp_internal_error s =
-  sprintf "<html><body><h1>Http Getter Internal error: %s</h1></body></html>" s
-let pp_msg s = sprintf "<html><body><h1>%s</h1></body></html>" s
-let null_pp s = s
-
-let mk_return_fun pp_fun contype msg outchan =
-  Http_daemon.respond
-    ~body:(pp_fun msg) ~headers:["Content-Type", contype] outchan
-
-let return_html_error = mk_return_fun pp_error "text/html"
-let return_html_internal_error = mk_return_fun pp_internal_error "text/html"
-let return_html_msg = mk_return_fun pp_msg "text/html"
-let return_html_raw = mk_return_fun null_pp "text/html"
-let return_xml_raw = mk_return_fun null_pp "text/xml"
-let return_file
-  ~fname ?contype ?contenc ?(patch_fun = fun x -> x) ?(gunzip = false) outchan
-  =
-  let headers =
-    match (contype, contenc) with
-    | (Some t, Some e) -> ["Content-Encoding", e; "Content-Type", t]
-    | (Some t, None) -> ["Content-Type" , t]
-    | (None, Some e) -> ["Content-Encoding", e]
-    | (None, None) -> []
-  in
-  Http_daemon.send_basic_headers ~code:200 outchan;
-  Http_daemon.send_headers headers outchan;
-  Http_daemon.send_CRLF outchan;
-  if gunzip then begin  (* gunzip needed, uncompress file, apply patch_fun to
-                        it, compress the result and sent it to client *)
-    let (tmp1, tmp2) =
-      (Http_getter_misc.tempfile (), Http_getter_misc.tempfile ())
-    in
-    Http_getter_misc.gunzip ~keep:true ~output:tmp1 fname;  (* gunzip to tmp1 *)
-    let new_file = open_out tmp2 in
-    Http_getter_misc.iter_file  (* tmp2 = patch(tmp1) *)
-      (fun line -> output_string new_file (patch_fun line ^ "\n"))
-      tmp1;
-    close_out new_file;
-    Http_getter_misc.gzip ~output:tmp1 tmp2;  (* tmp1 = gzip(tmp2); rm tmp2 *)
-    Http_getter_misc.iter_file  (* send tmp1 to client as is*)
-      (fun line -> output_string outchan (line ^ "\n"))
-      tmp1;
-    Sys.remove tmp1       (* rm tmp1 *)
-  end else  (* no need to gunzip, apply patch_fun directly to file *)
-    Http_getter_misc.iter_file
-      (fun line -> output_string outchan (patch_fun line ^ "\n"))
-      fname
-;;
-let return_400 body outchan = Http_daemon.respond_error ~code:400 ~body outchan
-
diff --git a/helm/http_getter/http_getter_common.mli b/helm/http_getter/http_getter_common.mli
deleted file mode 100644 (file)
index 2366444..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Http_getter_types;;
-
-val string_of_ls_flag: http_getter_ls_flag -> string
-val string_of_encoding: http_getter_encoding -> string
-
-val is_cic_uri: string -> bool
-val is_nuprl_uri: string -> bool
-val is_rdf_uri: string -> bool
-val is_xsl_uri: string -> bool
-
-val http_getter_uri_of_string: string -> http_getter_uri
-
-val patch_xml : string -> string
-val patch_xsl : string -> string
-val patch_dtd : string -> string
-
-val return_html_error: string -> out_channel -> unit
-val return_html_internal_error: string -> out_channel -> unit
-  (** return an HTML HTTP response from the given string, embedding it in an
-  "H1" element of an HTML page; content-type is set to text/html *)
-val return_html_msg: string -> out_channel -> unit
-  (** return an HTTP response using given string as content; content-type is set
-  to text/html *)
-val return_html_raw: string -> out_channel -> unit
-  (** return an HTTP response using given string as content; content-type is set
-  to text/xml *)
-val return_xml_raw: string -> out_channel -> unit
- (** return a bad request http response *)
-val return_400: string -> out_channel -> unit
-  (**
-  @param fname name of the file to be sent
-  @param contype Content-Type header value
-  @param contenc Content-Enconding header value
-  @param patch_fun function used to patch file contents
-  @param gunzip is meaningful only if a patch function is provided. If gunzip
-  is true patch_fun is applied to the uncompressed version of the file. The file
-  is then compressed again and send to client
-  @param outchan output channel over which sent file fname *)
-val return_file:
-  fname:string ->
-  ?contype:string -> ?contenc:string ->
-  ?patch_fun:(string -> string) -> ?gunzip:bool ->
-  out_channel ->
-    unit
-
diff --git a/helm/http_getter/http_getter_const.ml b/helm/http_getter/http_getter_const.ml
deleted file mode 100644 (file)
index 71aed58..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Printf;;
-
-let version = "0.2.1"
-let conffile = "http_getter.conf.xml"
-
-  (* TODO provide a better usage string *)
-let usage_string configuration =
-  sprintf
-"
-<html>
-  <head>
-    <title>HTTP Getter's help message</title>
-  </head>
-  <body>
-    <h1>HTTP Getter, version %s</h1>
-    <h2>Usage information</h2>
-    <p>
-    Usage: <kbd>http://hostname:getterport/</kbd><em>command</em>
-    </p>
-    <p>
-    Available commands:
-    </p>
-    <p>
-      <b><kbd>help</kbd></b><br />
-      display this help message
-    </p>
-    <p>
-      <b><kbd>getxml?uri=URI[&format=(normal|gz)][&patch_dtd=(yes|no)]</kbd></b><br />
-    </p>
-    <p>
-      <b><kbd>register?uri=URI&url=URL</kbd></b><br />
-    </p>
-    <p>
-      <b><kbd>resolve?uri=URI</kbd></b><br />
-    </p>
-    <p>
-      <b><kbd>getdtd?uri=URI[&patch_dtd=(yes|no)]</kbd></b><br />
-    </p>
-    <p>
-      <b><kbd>getxslt?uri=URI[&patch_dtd=(yes|no)]</kbd></b><br />
-    </p>
-    <p>
-      <b><kbd>list_servers</kbd></b><br />
-    </p>
-    <p>
-      <b><kbd>add_server?url=URL&position=POSITION</kbd></b><br />
-    </p>
-    <p>
-      <b><kbd>remove_server?position=POSITION</kbd></b><br />
-    </p>
-    <p>
-      <b><kbd>update</kbd></b><br />
-    </p>
-    <p>
-      <b><kbd>getalluris</kbd></b><br />
-    </p>
-    <p>
-      <b><kbd>getallrdfuris</kbd></b><br />
-    </p>
-    <p>
-      <b><kbd>ls?baseuri=URI&format=(txt|xml)</kbd></b><br />
-    </p>
-    <p>
-      <b><kbd>getempty</kbd></b><br />
-    </p>
-    <h2>Current configuration</h2>
-    <pre>%s</pre>
-  </body>
-</html>
-"
-    version configuration
-
-let empty_xml =
-"<?xml version=\"1.0\"?>
-<!DOCTYPE empty [
-  <!ELEMENT empty EMPTY>
-]>
-<empty />
-"
-
diff --git a/helm/http_getter/http_getter_const.mli b/helm/http_getter/http_getter_const.mli
deleted file mode 100644 (file)
index e50a469..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-val version: string
-val conffile: string
-val empty_xml: string
-
-  (** @return an HTML usage string including configuration information passed as
-  input parameter *)
-val usage_string: string -> string
-
diff --git a/helm/http_getter/http_getter_debugger.ml b/helm/http_getter/http_getter_debugger.ml
deleted file mode 100644 (file)
index b6d1e50..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
- (* debugging settings *)
-let debug = true;;
-let debug_print s = if debug then prerr_endline ("[HTTP-Getter] " ^ s);;
-
diff --git a/helm/http_getter/http_getter_debugger.mli b/helm/http_getter/http_getter_debugger.mli
deleted file mode 100644 (file)
index cd9da67..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-val debug: bool
-val debug_print: string -> unit
-
diff --git a/helm/http_getter/http_getter_env.ml b/helm/http_getter/http_getter_env.ml
deleted file mode 100644 (file)
index 5426927..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Http_getter_types;;
-open Printf;;
-open Pxp_document;;
-open Pxp_types;;
-open Pxp_yacc;;
-
-let version = Http_getter_const.version
-
-type setting_src =
-  | Environment (* read setting from environment variables *)
-  | Conffile    (* read setting from configuration file *)
-  | Both        (* read setting from both; environment override config file *)
-
-let conf_file_tree = ref None
-
-let (conf_file, conf_dir) =
-  try
-    let conf_dir =
-      Pcre.replace ~pat:"/$" (Sys.getenv "HELM_CONFIGURATION_DIR")
-    in
-    (conf_dir ^ "/" ^ Http_getter_const.conffile, conf_dir)
-  with Not_found -> failwith "HELM_CONFIGURATION_DIR undefined"
-
-let safe_getenv ?(from = Both) var =
-  (let rec read_from_file () =
-    (match !conf_file_tree with
-    | None ->
-        conf_file_tree :=
-          Some
-            (parse_wfcontent_entity
-              default_config (from_file conf_file) default_spec);
-        read_from_file ()
-    | Some t ->
-        (try
-          Some (find_element (String.lowercase var) t)#data
-        with Not_found -> None))
-  in
-  let read_from_env () = try Some (Sys.getenv var) with Not_found -> None in
-  let return_value name = function
-    | Some v -> v
-    | None -> failwith ("Setting " ^ name ^ " is not defined")
-  in
-  (match from with
-  | Environment -> return_value var (read_from_env ())
-  | Conffile -> return_value var (read_from_file ())
-  | Both ->
-      (match read_from_env () with
-      | None -> return_value var (read_from_file ())
-      | v -> return_value var v)))
-
-let servers_file = safe_getenv "HTTP_GETTER_SERVERS_FILE"
-
-  (* TODO BUG HERE: is commented lines are included in the servers file the
-  server index (used for example by the remove_server method) gets out of sync!
-  *)
-let parse_servers () =
-  List.rev (Http_getter_misc.fold_file
-    (fun servers line ->
-      if Http_getter_misc.is_blank_line line then servers else line::servers)
-    []
-    servers_file)
-;;
-let servers = ref (parse_servers ())
-let reload_servers () = servers := parse_servers ()
-
-let cic_dbm = safe_getenv "HTTP_GETTER_CIC_DBM"
-let nuprl_dbm = safe_getenv "HTTP_GETTER_NUPRL_DBM"
-let rdf_dbm = safe_getenv "HTTP_GETTER_RDF_DBM"
-let xsl_dbm = safe_getenv "HTTP_GETTER_XSL_DBM"
-let xml_index = safe_getenv "HTTP_GETTER_XML_INDEXNAME"
-let rdf_index = safe_getenv "HTTP_GETTER_RDF_INDEXNAME"
-let xsl_index = safe_getenv "HTTP_GETTER_XSL_INDEXNAME"
-let cic_dir = safe_getenv "HTTP_GETTER_CIC_DIR"
-let nuprl_dir = safe_getenv "HTTP_GETTER_NUPRL_DIR"
-let rdf_dir = safe_getenv "HTTP_GETTER_RDF_DIR"
-let dtd_dir = safe_getenv "HTTP_GETTER_DTD_DIR"
-
-let port =
-  let port = safe_getenv "HTTP_GETTER_PORT" in
-  try
-    int_of_string port
-  with Failure "int_of_string" ->
-    failwith ("Invalid port value: " ^ port)
-let host =
-  let buf = Buffer.create 20 in
-  Shell.call ~stdout:(Shell.to_buffer buf) [Shell.cmd "hostname" ["-f"]];
-  Pcre.replace ~pat:"\n+$" (Buffer.contents buf)
-let my_own_url =
-  sprintf
-    "http://%s%s" (* without trailing '/' *)
-    host
-    (if port = 80 then "" else (sprintf ":%d" port))
-let dtd_base_url = safe_getenv "HTTP_GETTER_DTD_BASE_URL"
-
-let cache_mode =
-  match String.lowercase (safe_getenv "HTTP_GETTER_CACHE_MODE") with
-  | "normal" -> Enc_normal
-  | "gz" -> Enc_gzipped
-  | mode -> failwith ("Invalid cache mode: " ^ mode)
-
-let reload () =
-  reload_servers ()
-
-let env_to_string () =
-  sprintf
-"HTTP Getter %s (the OCaml one!)
-
-cic_dbm:\t%s
-nuprl_dbm:\t%s
-rdf_dbm:\t%s
-xsl_dbm:\t%s
-xml_index:\t%s
-rdf_index:\t%s
-xsl_index:\t%s
-cic_dir:\t%s
-nuprl_dir:\t%s
-rdf_dir:\t%s
-dtd_dir:\t%s
-servers_file:\t%s
-host:\t\t%s
-port:\t\t%d
-my_own_url:\t%s
-dtd_base_url:\t%s
-cache_mode:\t%s
-conf_file:\t%s
-conf_dir:\t%s
-servers:
-\t%s
-"
-    version cic_dbm nuprl_dbm rdf_dbm xsl_dbm xml_index rdf_index xsl_index
-    cic_dir nuprl_dir rdf_dir dtd_dir servers_file host port my_own_url
-    dtd_base_url
-    (match cache_mode with Enc_normal -> "Normal" | Enc_gzipped -> "GZipped")
-    conf_file conf_dir
-    (String.concat "\n\t" (* servers list prepended with server number *)
-      (List.map
-        (let idx = ref ~-1 in
-        fun server -> incr idx; sprintf "%3d: %s" !idx server)
-        !servers))
-
-let add_server ?position url =
-  (match position with
-  | Some p -> Http_getter_misc.add_line ~fname:servers_file ~position:p url
-  | None -> Http_getter_misc.add_line ~fname:servers_file url);
-  reload_servers ()
-
-let remove_server position =
-  Http_getter_misc.remove_line ~fname:servers_file position;
-  reload_servers ()
-
diff --git a/helm/http_getter/http_getter_env.mli b/helm/http_getter/http_getter_env.mli
deleted file mode 100644 (file)
index 6d4d631..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Http_getter_types;;
-
-  (* {2 general information} *)
-
-val version       : string        (* getter version *)
-
-  (* {2 environment gathered data} *)
-
-val cic_dbm       : string        (* XML map DBM file for CIC *)
-val nuprl_dbm     : string        (* XML map DBM file for NuPRL *)
-val rdf_dbm       : string        (* RDF map DBM file *)
-val xsl_dbm       : string        (* XSL map DBM file *)
-val xml_index     : string        (* XMLs' index *)
-val rdf_index     : string        (* RDFs' index *)
-val xsl_index     : string        (* XSLTs' index *)
-val cic_dir       : string        (* XMLs' directory  for CIC*)
-val nuprl_dir     : string        (* XMLs' directory for NuPRL*)
-val rdf_dir       : string        (* RDFs' directory *)
-val dtd_dir       : string        (* DTDs' root directory *)
-val servers_file  : string        (* servers.txt file *)
-val port          : int           (* port on which getter listens *)
-val dtd_base_url  : string        (* base URL for DTD downloading *)
-
-  (* {2 derived data} *)
-
-val host          : string          (* host on which getter listens *)
-val my_own_url    : string          (* URL at which contact getter *)
-val servers       : string list ref (* servers list. DO NOT CHANGE this list,
-                                    modifications wont be preserved *)
-val cache_mode    : http_getter_encoding  (* cached files encoding *)
-val conf_file     : string          (* configuration file's full path *)
-val conf_dir      : string          (* directory where conf_file resides *)
-
-  (* {2 dynamic configuration changes} *)
-
-  (* add a server to servers list in a given position (defaults to "after the
-  last server", change servers file accordingly and reload servers list *)
-val add_server: ?position:int -> string -> unit
-  (* remove a server from servers list, change servers file accordingly and
-  reload servers list *)
-val remove_server: int -> unit
-
-  (* {2 misc} *)
-
-val reload: unit -> unit            (* reload configuration information *)
-val env_to_string : unit -> string  (* dump a textual representation of the
-                                    current http_getter settings on an output
-                                    channel *)
-
diff --git a/helm/http_getter/http_getter_map.ml b/helm/http_getter/http_getter_map.ml
deleted file mode 100644 (file)
index b7ac1c6..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-exception Key_already_in of string;;
-exception Key_not_found of string;;
-
-class map dbname =
-  let perm = 420 in (* permission 644 in decimal notation *)
-  let open_dbm () = Dbm.opendbm dbname [ Dbm.Dbm_rdwr; Dbm.Dbm_create ] perm in
-  
-  object (self)
-
-    inherit ThreadSafe.threadSafe
-
-    val mutable db = open_dbm ()
-
-    (*initializer Gc.finalise Dbm.close db  (* close db on GC *)*)
-
-    method add key value =
-      self#doWriter (lazy (
-        try
-          Dbm.add db key value
-        with Dbm.Dbm_error "Entry already exists" -> raise (Key_already_in key)
-      ))
-
-    method replace key value =
-      self#doWriter (lazy (
-        Dbm.replace db key value
-      ))
-
-    method remove key =
-      self#doWriter (lazy (
-        try
-          Dbm.remove db key
-        with Dbm.Dbm_error "dbm_delete" -> raise (Key_not_found key)
-      ))
-
-    method resolve key =
-      self#doReader (lazy (
-        try Dbm.find db key with Not_found -> raise (Key_not_found key)
-      ))
-
-    method iter (f: string -> string -> unit) =
-      self#doReader (lazy (
-        Dbm.iter f db
-      ))
-
-    method sync =
-      self#doWriter (lazy (
-        Dbm.close db;
-        db <- open_dbm ()
-      ))
-
-    method clear =
-      self#doWriter (lazy (
-        Dbm.close db;
-        List.iter
-          (fun ext ->
-            let file = dbname ^ ext in
-            if Sys.file_exists file then Sys.remove file)
-          [".dir"; ".pag"; ".db"];
-        db <- open_dbm ()
-      ))
-
-    method close =
-      self#doWriter (lazy (
-        Dbm.close db
-      ))
-
-  end
-
diff --git a/helm/http_getter/http_getter_map.mli b/helm/http_getter/http_getter_map.mli
deleted file mode 100644 (file)
index 720484f..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-exception Key_already_in of string
-exception Key_not_found of string
-
-class map:
-  string ->
-    object
-      method add: string -> string -> unit
-      method replace: string -> string -> unit
-      method remove: string -> unit
-      method resolve: string -> string
-      method iter: (string -> string -> unit) -> unit
-      method sync: unit
-      method clear: unit
-
-      method close: unit (* use with caution! *)
-    end
diff --git a/helm/http_getter/http_getter_misc.ml b/helm/http_getter/http_getter_misc.ml
deleted file mode 100644 (file)
index 7b70a14..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Http_getter_debugger;;
-open Printf;;
-
-let trailing_dot_gz_RE = Pcre.regexp "\\.gz$"   (* for g{,un}zip *)
-let url_RE = Pcre.regexp "^([\\w.]+)(:(\\d+))?(/.*)?$"
-let http_scheme_RE = Pcre.regexp ~flags:[`CASELESS] "^http://"
-let file_scheme_RE = Pcre.regexp ~flags:[`CASELESS] "^file://"
-let dir_sep_RE = Pcre.regexp "/"
-let heading_slash_RE = Pcre.regexp "^/"
-
-let bufsiz = 16384  (* for file system I/O *)
-let tcp_bufsiz = 4096 (* for TCP I/O *)
-
-let fold_file f init fname =
-  let inchan = open_in fname in
-  let res =
-    try
-      Zack.fold_in f init inchan
-    with e -> close_in inchan; raise e
-  in
-  close_in inchan;
-  res
-
-let iter_file f = fold_file (fun _ line -> f line) ()
-
-let hashtbl_sorted_fold f tbl init =
-  let sorted_keys =
-    List.sort compare (Hashtbl.fold (fun key _ keys -> key::keys) tbl [])
-  in
-  List.fold_left (fun acc k -> f k (Hashtbl.find tbl k) acc) init sorted_keys
-
-let cp src dst =
-  let (ic, oc) = (open_in src, open_out dst) in
-  let buf = String.create bufsiz in
-  (try
-    while true do
-      let bytes = input ic buf 0 bufsiz in
-      if bytes = 0 then raise End_of_file else output oc buf 0 bytes
-    done
-  with End_of_file -> ());
-  close_in ic; close_out oc
-
-let parse_url url =
-  try
-    let subs =
-      Pcre.extract ~rex:url_RE (Pcre.replace ~rex:http_scheme_RE url)
-    in
-    (subs.(1),
-    (if subs.(2) = "" then 80 else int_of_string subs.(3)),
-    (if subs.(4) = "" then "/" else subs.(4)))
-  with exc ->
-    failwith
-      (sprintf "Can't parse url: %s (exception: %s)"
-        url (Printexc.to_string exc))
-let init_socket addr port =
-  let inet_addr = (Unix.gethostbyname addr).Unix.h_addr_list.(0) in
-  let sockaddr = Unix.ADDR_INET (inet_addr, port) in
-  let suck = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in
-  Unix.connect suck sockaddr;
-  let outchan = Unix.out_channel_of_descr suck in
-  let inchan = Unix.in_channel_of_descr suck in
-  (inchan, outchan)
-let http_get_iter_buf ~callback url =
-  let (address, port, path) = parse_url url in
-  let buf = String.create tcp_bufsiz in
-  let (inchan, outchan) = init_socket address port in
-  output_string outchan (sprintf "GET %s\r\n" path);
-  flush outchan;
-  (try
-    while true do
-      match input inchan buf 0 tcp_bufsiz with
-      | 0 -> raise End_of_file
-      | bytes when bytes = tcp_bufsiz ->  (* buffer full, no need to slice it *)
-          callback buf
-      | bytes when bytes < tcp_bufsiz ->  (* buffer not full, slice it *)
-          callback (String.sub buf 0 bytes)
-      | _ -> (* ( bytes < 0 ) || ( bytes > tcp_bufsiz ) *)
-          assert false
-    done
-  with End_of_file -> ());
-  close_in inchan (* close also outchan, same fd *)
-
-let wget ?output url =
-  debug_print
-    (sprintf "wgetting %s (output: %s)" url
-      (match output with None -> "default" | Some f -> f));
-  match url with
-  | url when Pcre.pmatch ~rex:file_scheme_RE url -> (* file:// *)
-      (let src_fname = Pcre.replace ~rex:file_scheme_RE url in
-      match output with
-      | Some dst_fname -> cp src_fname dst_fname
-      | None ->
-          let dst_fname = Filename.basename src_fname in
-          if src_fname <> dst_fname then
-            cp src_fname dst_fname
-          else  (* src and dst are the same: do nothing *)
-            ())
-  | url when Pcre.pmatch ~rex:http_scheme_RE url -> (* http:// *)
-      (let oc = 
-        open_out (match output with Some f -> f | None -> Filename.basename url)
-      in
-      http_get_iter_buf ~callback:(fun data -> output_string oc data) url;
-      close_out oc)
-  | scheme -> (* unsupported scheme *)
-      failwith ("Http_getter_misc.wget: unsupported scheme: " ^ scheme)
-
-let gzip ?(keep = false) ?output fname =
-  let output = match output with None -> fname ^ ".gz" | Some fname -> fname in
-  debug_print (sprintf "gzipping %s (keep: %b, output: %s)" fname keep output);
-  let (ic, oc) = (open_in fname, Gzip.open_out output) in
-  let buf = String.create bufsiz in
-  (try
-    while true do
-      let bytes = input ic buf 0 bufsiz in
-      if bytes = 0 then raise End_of_file else Gzip.output oc buf 0 bytes
-    done
-  with End_of_file -> ());
-  close_in ic; Gzip.close_out oc;
-  if not keep then Sys.remove fname
-;;
-
-let gunzip ?(keep = false) ?output fname =
-    (* assumption: given file name ends with ".gz" or output is set *)
-  let output =
-    match output with
-    | None ->
-        if (Pcre.pmatch ~rex:trailing_dot_gz_RE fname) then
-          Pcre.replace ~rex:trailing_dot_gz_RE fname
-        else
-          failwith
-            "Http_getter_misc.gunzip: unable to determine output file name"
-    | Some fname -> fname
-  in
-  debug_print (sprintf "gunzipping %s (keep: %b, output: %s)"
-    fname keep output);
-  let (ic, oc) = (Gzip.open_in fname, open_out output) in
-  let buf = String.create bufsiz in
-  (try
-    while true do
-      let bytes = Gzip.input ic buf 0 bufsiz in
-      if bytes = 0 then raise End_of_file else Pervasives.output oc buf 0 bytes
-    done
-  with End_of_file -> ());
-  Gzip.close_in ic; close_out oc;
-  if not keep then Sys.remove fname
-;;
-
-let tempfile () = Filename.temp_file "http_getter_" ""
-
-exception Mkdir_failure of string * string;;  (* dirname, failure reason *)
-let dir_perm = 0o755
-
-let mkdir ?(parents = false) dirname =
-  let mkdirhier () =
-    let (pieces, hd) =
-      let split = Pcre.split ~rex:dir_sep_RE dirname in
-      if Pcre.pmatch ~rex:heading_slash_RE dirname then
-        (List.tl split, "/")
-      else
-        (split, "")
-    in
-    ignore
-      (List.fold_left
-        (fun pre dir ->
-          let next_dir =
-            sprintf "%s%s%s" pre (match pre with "/" | "" -> "" | _ -> "/") dir
-          in
-          (try
-            (match (Unix.stat next_dir).Unix.st_kind with
-            | Unix.S_DIR -> ()  (* dir component already exists, go on! *)
-            | _ ->  (* dir component already exists but isn't a dir, abort! *)
-                raise
-                  (Mkdir_failure (dirname,
-                    sprintf "'%s' already exists but is not a dir" next_dir)))
-          with Unix.Unix_error (Unix.ENOENT, "stat", _) ->
-            (* dir component doesn't exists, create it and go on! *)
-            Unix.mkdir next_dir dir_perm);
-          next_dir)
-        hd pieces)
-  in
-  if parents then mkdirhier () else Unix.mkdir dirname dir_perm
-
-let string_of_proc_status = function
-  | Unix.WEXITED code -> sprintf "[Exited: %d]" code
-  | Unix.WSIGNALED sg -> sprintf "[Killed: %d]" sg
-  | Unix.WSTOPPED sg -> sprintf "[Stopped: %d]" sg
-
-let http_get url =
-  if Pcre.pmatch ~rex:file_scheme_RE url then begin
-      (* file:// URL. Read data from file system *)
-    let fname = Pcre.replace ~rex:file_scheme_RE url in
-    try
-      let size = (Unix.stat fname).Unix.st_size in
-      let buf = String.create size in
-      let ic = open_in fname in
-      really_input ic buf 0 size;
-      close_in ic;
-      Some buf
-    with Unix.Unix_error (Unix.ENOENT, "stat", _) -> None
-  end else  (* other URL, pass it to netclient *)
-    try
-      Some (Http_client.Convenience.http_get url)
-    with Http_client.Http_error (code, _) -> None
-
-  (** apply a transformation "string list -> string list" to file lines *)
-let mangle_file ~fname f =
-  let ic = open_in fname in
-  let lines = Zack.input_lines ic in
-  close_in ic;
-  let oc = open_out fname in
-  Zack.output_lines (f lines) oc;
-  close_out oc
-;;
-
-let add_line ~fname ?position line =
-  mangle_file ~fname
-    (fun lines ->
-      match position with
-      | None -> lines @ [line]
-      | Some i ->
-          assert (i >= 0);
-          let rec add_after i = function
-            | (acc, []) -> acc @ [line] (* eof *)
-            | (acc, ((hd::tl) as l)) ->
-                if i = 0 then
-                  acc @ [line] @ l
-                else
-                  add_after (i-1) (acc @ [hd], tl)
-          in
-          add_after i ([], lines))
-;;
-
-let remove_line ~fname position =
-  mangle_file ~fname
-    (fun lines ->
-      assert (position >= 0);
-      let rec remove i = function
-        | (acc, []) -> acc  (* eof *)
-        | (acc, ((hd::tl) as l)) ->
-            if i = 0 then
-              acc @ tl
-            else
-              remove (i-1) (acc @ [hd], tl)
-      in
-      remove position ([], lines))
-;;
-
-let is_blank_line =
-  let blank_line_RE = Pcre.regexp "(^#)|(^\\s*$)" in
-  fun line ->
-    Pcre.pmatch ~rex:blank_line_RE line
-;;
-
diff --git a/helm/http_getter/http_getter_misc.mli b/helm/http_getter/http_getter_misc.mli
deleted file mode 100644 (file)
index 0551161..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
- (** 'mkdir' failed, arguments are: name of the directory to be created and
- failure reason *)
-exception Mkdir_failure of string * string
-
- (** "fold_left" like function on file lines, trailing newline is not passed to
- the given function *)
-val fold_file : ('a -> string -> 'a) -> 'a -> string -> 'a
- (* "iter" like function on file lines, trailing newline is not passed to the
- given function *)
-val iter_file : (string -> unit) -> string -> unit
-
-  (** like Hashtbl.fold but keys are processed ordered *)
-val hashtbl_sorted_fold :
-  ('a -> 'b -> 'c -> 'c) -> ('a, 'b) Hashtbl.t -> 'c -> 'c
-
-  (** cp frontend *)
-val cp: string -> string -> unit
-  (** wget frontend, if output is given it is the destination file, otherwise
-  standard wget rules are used. Additionally this function support also the
-  "file://" scheme for file system addressing *)
-val wget: ?output: string -> string -> unit
-  (** gzip frontend. If keep = true original file will be kept, default is
-  false. output is the file on which gzipped data will be saved, default is
-  given file with an added ".gz" suffix *)
-val gzip: ?keep: bool -> ?output: string -> string -> unit
-  (** gunzip frontend. If keep = true original file will be kept, default is
-  false. output is the file on which gunzipped data will be saved, default is
-  given file name without trailing ".gz" *)
-val gunzip: ?keep: bool -> ?output: string -> string -> unit
-  (** tempfile frontend, return the name of created file. A special purpose
-  suffix is used (actually "_http_getter" *)
-val tempfile: unit -> string
-  (** mkdir frontend, if parents = true also parent directories will be created.
-  If the given directory already exists doesn't act *)
-val mkdir: ?parents: bool -> string -> unit
-
-  (** pretty printer for Unix.process_status values *)
-val string_of_proc_status : Unix.process_status -> string
-
-  (** raw HTTP downloader, return Some the contents of downloaded resource or
-  None if an error occured while downloading. This function support also
-  "file://" scheme for filesystem resources *)
-val http_get: string -> string option
-  (** 'iter' like method that iter over string slices (unspecified length) of a
-  remote resources fetched via HTTP GET requests *)
-val http_get_iter_buf: callback:(string -> unit) -> string -> unit
-
-  (** add a line to a file (specified by name) _after_ a given line (defaults to
-  last line). *)
-val add_line: fname:string -> ?position:int -> string -> unit
-  (** remove a line, if any, from a file specified by line number (0 based, i.e.
-  first line of file is line 0) *)
-val remove_line: fname:string -> int -> unit
-
-  (** true on blanks-only and #-commented lines, false otherwise *)
-val is_blank_line: string -> bool
-
diff --git a/helm/http_getter/http_getter_types.ml b/helm/http_getter/http_getter_types.ml
deleted file mode 100644 (file)
index 01af4fa..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-exception Http_getter_bad_request of string
-exception Http_getter_unresolvable_URI of string
-exception Http_getter_invalid_URI of string
-exception Http_getter_invalid_URL of string
-exception Http_getter_invalid_RDF_class of string
-exception Http_getter_internal_error of string
-
-type http_getter_encoding = Enc_normal | Enc_gzipped
-type http_getter_answer_format = Fmt_text | Fmt_xml
-type http_getter_ls_flag = No | Yes | Ann
-
-type http_getter_xml_uri =
-  | Cic of string
-  | Theory of string
-type http_getter_rdf_uri = string * http_getter_xml_uri
-type http_getter_nuprl_uri = string
-type http_getter_uri =
-  | Cic_uri of http_getter_xml_uri
-  | Nuprl_uri of http_getter_nuprl_uri
-  | Rdf_uri of http_getter_rdf_uri
-
-module StringSet = Set.Make (String)
-
diff --git a/helm/http_getter/panel/.cvsignore b/helm/http_getter/panel/.cvsignore
deleted file mode 100644 (file)
index 5c9fd16..0000000
+++ /dev/null
@@ -1 +0,0 @@
-getter-panel.tar.gz
diff --git a/helm/http_getter/panel/Makefile b/helm/http_getter/panel/Makefile
deleted file mode 100644 (file)
index 2663e20..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-all:
-
-clean:
-       rm -f getter-panel.tar.gz
-
-cleanbak:
-       rm -rf *~
-
-dist: clean cleanbak
-       cd ..; tar cvfz getter-panel.tar.gz panel ; mv getter-panel.tar.gz panel
-
diff --git a/helm/http_getter/panel/control.html b/helm/http_getter/panel/control.html
deleted file mode 100644 (file)
index 60c60eb..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-<html>
-
-<head>
-<title>Getter Control Panel</title>
-
-<style type="text/css">
-#normal { background-color: white; font-family: sans-serif }
-td.head { font-weight: bold; background-color: #e6e6fa; color: brown }
-td.back { background-color: #e6e6fa; color: brown }
-#indent { margin-left: 1cm; margin-right: 1cm }
-</style>
-
-<script language="JavaScript" src="control.js">
-</script>
-
-</head>
-
-<body id="normal">
-<a name="top"/>
-<table border="0" width="100%" cellpadding="4">
-<tr><td class="head" align="center"><big><big>Getter Control Panel</big></big></td></tr>
-</table>
-
-<br />
-
-<div id="indent">
-This is a control panel for the HTTP getter. You can control a local or remote getter by filling
-the appropriate field below and sending the desired commands. In most cases, results of commands, such as error
-messages or documents, will be opened in the frame at the bottom of this page.
-Note that in order to use this page <i>you must have JavaScript enabled</i>.
-If you have troubles, please send an email to the author:
-<a href="mailto:luca.padovani@cs.unibo.it">luca.padovani@cs.unibo.it</a>
-</div>
-
-<div id="indent">
-<br />
-<table border="1">
-  <tr>
-    <td>
-      <form name="getterURL">
-        Getter <b>URL</b>
-        <script>
-          document.write('<input type="text" value="' + getInitialGetterURL() + '" size="50"/>');
-        </script>
-        <select onChange="selectGetterURL(this)">
-          <option value="">---</option>
-          <option value="localhost:8081/">localhost</option>
-          <option value="marcello.cs.unibo.it:8081/">marcello</option>
-          <option value="phd.cs.unibo.it:8081/">phd</option>
-          <option value="eolo.cs.unibo.it:8081/">eolo</option>
-          <option value="mowgli.cs.unibo.it:58081/">mowgli</option>
-        </select>
-      </form>
-    </td>
-  </tr>
-  <tr>
-    <td>
-      <form>
-        <b>Check</b> if Getter is running and request <b>Help</b>:<br />
-        <input type="button" value="Check & Help" onClick="top.result.location.replace(getGetterURL() + 'help')"/>
-      </form>
-    </td>
-  </tr>
-  <tr>
-    <td>
-      <form>
-        <b>Update</b> Getter's maps:<br />
-        <input type="button" value="Update" onClick="top.result.location.replace(getGetterURL() + 'update')"/>
-      </form>
-    </td>
-  </tr>
-  <tr>
-    <td>
-      <form>
-        <b>List</b> servers:<br />
-        <input type="button" value="List servers" onClick="top.result.location.replace(getGetterURL() + 'list_servers')"/>
-      </form>
-    </td>
-  </tr>
-  <tr>
-    <td>
-      <form name="addServer">
-        <b>Add</b> a server to the servers list:<br />
-        Server URL: <input type="text" name="url" size="50" value="http://" /><br />
-        Server position: <input type="text" name="position" value="0" /><br />
-        <input type="button" value="Add server" onClick="top.result.location.replace(getGetterURL() + 'add_server?url=' + escape(document.addServer.elements[0].value) +'&position=' + escape(document.addServer.elements[1].value))"/>
-      </form>
-    </td>
-  </tr>
-  <tr>
-    <td>
-      <form name="removeServer">
-        <b>Remove</b> a server from the servers list:<br />
-        Server number: <input type="text" name="position" value="0" /><br />
-        <input type="button" value="Remove server" onClick="top.result.location.replace(getGetterURL() + 'remove_server?position=' + escape(document.removeServer.elements[0].value))"/>
-      </form>
-    </td>
-  </tr>
-</table>
-</div>
-
-<div id="indent">
-
-<table border="0">
-</table>
-
-</div>
-
-<div id="indent">
-  <br />
-  In case you want to customize the panel for your own needs, you can download
-  the source archive (HTML + JavaScript):
-  <ul>
-    <li>Getter Panel [<a href="getter-panel.tar.gz">.tar.gz</a>]</li>
-  </ul>
-</div>
-
-</body>
-
-</html>
-
diff --git a/helm/http_getter/panel/control.js b/helm/http_getter/panel/control.js
deleted file mode 100644 (file)
index 45736aa..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-
-function getParam(name, def)
-{
-  var search = top.location.search;
-  search = search.slice(1);
-  var args = search.split("&");
-  var value = "-1";
-  for (var i = 0 ; i < args.length ; i++) {
-    var couple = args[i].split("=");
-    if (couple[0] == name) value = couple[1];
-  }
-  if (value == "-1") value = def;
-  return value;
-}
-
-function getInitialGetterURL()
-{
-  return getParam("getterURL", "http://mowgli.cs.unibo.it:58081/");
-}
-
-function getGetterURL()
-{
-  return document.getterURL.elements[0].value;
-}
-
-function selectGetterURL(ss)
-{
-  if (ss.selectedIndex == 0) {
-    document.getterURL.elements[0].value = "";
-  } else {
-    //document.getterURL.elements[0].value = "http://" + ss.options[ss.selectedIndex].value + ":8081/";
-    document.getterURL.elements[0].value = "http://" + ss.options[ss.selectedIndex].value;
-  }
-}
-
diff --git a/helm/http_getter/panel/index.html b/helm/http_getter/panel/index.html
deleted file mode 100644 (file)
index caeebcf..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-
-<frameset rows="75%,*">
-  <frame src="control.html" name="control"/>
-  <frame src="welcome.html" name="result"/>
-</frameset>
-
-</html>
diff --git a/helm/http_getter/panel/welcome.html b/helm/http_getter/panel/welcome.html
deleted file mode 100644 (file)
index f6fbed4..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
-
-<body bgcolor="white">
-</body>
-
-</html>
diff --git a/helm/http_getter/threadSafe.ml b/helm/http_getter/threadSafe.ml
deleted file mode 100644 (file)
index 9902795..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Http_getter_debugger;;
-let debug_print _ = ();;  (* override debugger 'debug_print' *)
-
-class threadSafe =
-  object (self)
-
-    val mutex = Mutex.create ()
-
-      (** condition variable: 'no readers is currently reading' *)
-    val noReaders = Condition.create ()
-
-      (** readers count *)
-    val mutable readersCount = 0
-
-    method private incrReadersCount = (* internal, not exported *)
-      self#doCritical (lazy (
-        readersCount <- readersCount + 1
-      ))
-
-    method private decrReadersCount = (* internal, not exported *)
-      self#doCritical (lazy (
-        if readersCount > 0 then readersCount <- readersCount - 1;
-      ))
-
-    method private signalNoReaders =  (* internal, not exported *)
-      self#doCritical (lazy (
-        if readersCount = 0 then Condition.signal noReaders
-      ))
-
-    method private doCritical: 'a. 'a lazy_t -> 'a =
-      fun action ->
-        debug_print "<doCritical>";
-        (try
-          Mutex.lock mutex;
-          let res = Lazy.force action in
-          Mutex.unlock mutex;
-          debug_print "</doCritical>";
-          res
-        with e ->
-          Mutex.unlock mutex;
-          raise e);
-
-    method private doReader: 'a. 'a lazy_t -> 'a =
-      fun action ->
-        debug_print "<doReader>";
-        let cleanup () =
-          self#decrReadersCount;
-          self#signalNoReaders
-        in
-        self#incrReadersCount;
-        let res = (try Lazy.force action with e -> (cleanup (); raise e)) in
-        cleanup ();
-        debug_print "</doReader>";
-        res
-
-      (* TODO may starve!!!! is what we want or not? *)
-    method private doWriter: 'a. 'a lazy_t -> 'a =
-      fun action ->
-        debug_print "<doWriter>";
-        self#doCritical (lazy (
-          while readersCount > 0 do
-            Condition.wait noReaders mutex
-          done;
-          let res = Lazy.force action in
-          debug_print "</doWriter>";
-          res
-        ))
-
-  end
-
diff --git a/helm/http_getter/threadSafe.mli b/helm/http_getter/threadSafe.mli
deleted file mode 100644 (file)
index 92a0863..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-class threadSafe:
-  object
-
-      (** execute 'action' in mutual exclusion between all other threads *)
-    method private doCritical: 'a lazy_t -> 'a
-
-      (** execute 'action' acting as a 'reader' i.e.: multiple readers can act
-      at the same time but no writer can act until no readers are acting *)
-    method private doReader: 'a lazy_t -> 'a
-
-      (** execute 'action' acting as a 'writer' i.e.: when a writer is acting,
-      no readers or writer can act, beware that writers can starve *)
-    method private doWriter: 'a lazy_t -> 'a
-
-  end
-
diff --git a/helm/http_getter/tools/dump_db.ml b/helm/http_getter/tools/dump_db.ml
deleted file mode 100755 (executable)
index 3a64f1d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/ocamlrun /usr/bin/ocaml
-#use "topfind";;
-#require "dbm";;
-let db = Dbm.opendbm Sys.argv.(1) [ Dbm.Dbm_rdonly ] 0 in
-Dbm.iter (Printf.printf "%s: %s\n") db;
-Dbm.close db
diff --git a/helm/http_getter/tools/dump_db.pl b/helm/http_getter/tools/dump_db.pl
deleted file mode 100755 (executable)
index 95d3f4a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/perl -w
-
-# dump on stdout the data contained in a db file.
-# Print one line for each record in this format
-#  <key> = <value>
-#
-# Stefano "Zack" Zacchiroli <zack@cs.unibo.it>
-#
-
-use strict qw(O_RDONLY);
-use DB_File;
-
-my $dbfile = shift || die "which db file ?";
-my %map;
-tie(%map, 'DB_File', $dbfile, O_RDONLY, 0664);
-while(($key,$value) = each %map) {
-       print "$key = $value\n";
-}
-
diff --git a/helm/http_getter/tools/uri_escape.pl b/helm/http_getter/tools/uri_escape.pl
deleted file mode 100755 (executable)
index 0303e3f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-
-# escape a URI with uri escaping
-#
-# Stefano "Zack" Zacchiroli <zack@cs.unibo.it>
-#
-
-
-use URI::Escape;
-
-while(<>) {
- chomp;
- print uri_escape($_);
- print "\n";
-}
diff --git a/helm/http_getter/tools/uri_unescape.pl b/helm/http_getter/tools/uri_unescape.pl
deleted file mode 100755 (executable)
index 7f77d37..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-
-# unescape a URI escaped with uri escaping
-#
-# Stefano "Zack" Zacchiroli <zack@cs.unibo.it>
-#
-
-use URI::Escape;
-
-while(<>) {
- chomp;
- print uri_unescape($_);
- print "\n";
-}
diff --git a/helm/http_getter/zack.ml b/helm/http_getter/zack.ml
deleted file mode 100644 (file)
index bc40f0c..0000000
+++ /dev/null
@@ -1,475 +0,0 @@
-(*
- * Zack's own OCaml library -- set of "helpers" function for the OCaml language
- *
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@bononia.it>
- *
- *  This module 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 module 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 module; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *)
-
-open Printf ;;
-
-exception Not_implemented ;;
-
-let (newline, newline_len) =
-  let default_newline = "\n" in
-  let newline = 
-    match Sys.os_type with
-    | "Unix" -> "\n"
-    | "Win32" | "Cygwin" -> "\r\n"
-    | "MacOS" -> "\r"
-    | _ -> default_newline
-  in
-  (newline, String.length newline)
-;;
-
-module ZLogic =
-  struct
-
-    let non pred x = not (pred x) ;;
-    let conj p1 p2 x = (p1 x) && (p2 x) ;;
-    let disj p1 p2 x = (p1 x) || (p2 x) ;;
-    let imply p1 p2 x = (non p1) x || p2 x ;;
-
-    let (&&&) = conj ;;
-    let (|||) = disj ;;
-    let (=>) = imply ;;
-
-  end
-;;
-
-module ZArray =
-  struct
-
-    exception Found of int;;
-
-      (** return the index of first element in ary on which pred is true *)
-    let index pred ary =
-      try
-        Array.iteri (fun idx e -> if pred e then raise (Found idx)) ary;
-        raise Not_found
-      with Found idx -> idx
-    ;;
-      (** as index but return the element itself instead of the index *)
-    let find pred ary = ary.(index pred ary) ;;
-      (** check if at least one element in ary satisfies pred *)
-    let exists pred ary =
-      try
-        ignore (find pred ary);
-        true
-      with Not_found -> false
-    ;;
-      (** check if all elements in ary satisfy pred *)
-    let for_all pred ary = not (exists (ZLogic.non pred) ary) ;;
-
-      (** return a fresh array containing all elements of ary that satisfy pred
-      *)
-    let filter pred ary =
-      let indexes = (* indexes of element on which pred is satisfied *)
-        let (_, indexes) =
-          Array.fold_left
-            (fun (i, acc) e -> if pred e then (i+1, i::acc) else (i+1, acc))
-            (0, [])
-            ary
-        in
-        List.rev indexes
-      in
-      let size = List.length indexes in
-      let newary = Array.make size ary.(0) in
-      let rec fill i = function
-        | [] -> ()
-        | idx::tl ->
-            newary.(i) <- ary.(idx);
-            fill (i+1) tl
-      in
-      fill 0 indexes;
-      newary
-    ;;
-
-    let lrotate () =
-      raise Not_implemented; () ;;
-    let rrotate () =
-      raise Not_implemented; () ;;
-
-  end
-
-module ZDbm =
-  struct
-      (** fold on dbm key and values, processing order is not specified *)
-    let fold f init dbm =
-      let res = ref init in
-      Dbm.iter (fun key value -> res := f !res key value) dbm;
-      !res
-    ;;
-  end
-
-module ZHashtbl =
-  struct
-    let keys tbl = Hashtbl.fold (fun key _ acc -> key :: acc) tbl [] ;;
-    let values tbl = Hashtbl.fold (fun _ valu acc -> valu :: acc) tbl [] ;;
-    let remove_all tbl key =
-      for i = 1 to List.length (Hashtbl.find_all tbl key) do
-        Hashtbl.remove tbl key
-      done
-    ;;
-  end
-
-module ZList =
-  struct
-      (** tail recursive version of List.map *)
-    let map' f l =
-      let rec aux acc = function
-        | [] -> List.rev acc
-        | hd :: tl -> aux (f hd :: acc) tl
-      in
-      aux [] l
-    ;;
-      (** guarded map on lists. List.length output <= List.length input.
-      Not tail recursive *)
-    let rec map_if f pred = function
-      | [] -> []
-      | hd::tl when pred hd -> f hd :: map_if f pred tl
-      | hd::tl -> map_if f pred tl
-    ;;
-      (** tail recursive version of map_if *)
-    let map_if' f pred l =
-      let rec aux acc = function
-        | [] -> List.rev acc
-        | hd::tl when pred hd -> aux (f hd :: acc) tl
-        | hd::tl -> aux acc tl
-      in
-      aux [] l
-    ;;
-      (** low level to implement assoc_all and assq_all *)
-    let assoc_all_gen eq key list =
-      let rec aux acc = function
-        | [] -> acc
-        | (k, v)::tl when (eq k key) -> aux (v :: acc) tl
-        | _::tl -> aux acc tl
-      in
-      List.rev (aux [] list)
-    ;;
-      (** return all binding of k in association list l in the order they appear
-      in l. Uses structural equality *)
-    let assoc_all k l = assoc_all_gen (=) k l ;;
-      (** as assoc_all but uses physical equality *)
-    let assq_all k l = assoc_all_gen (==) k l ;;
-    let lrotate = function
-      | [] -> raise (Invalid_argument "Zack.List.lrotate")
-      | hd::tl -> tl @ [hd]
-    ;;
-    let rrotate l =
-      match List.rev l with
-      | [] -> raise (Invalid_argument "Zack.List.rrotate")
-      | hd::tl -> hd :: List.rev tl
-    ;;
-  end
-
-module ZSys =
-  struct
-    let copy () =
-      raise Not_implemented; () ;;
-  end
-
-module ZUnix =
-  struct
-
-    let mkdir () =
-      raise Not_implemented; () ;;
-
-    let get_stats follow_symlink =
-      if follow_symlink then Unix.stat else Unix.lstat
-    ;;
-      (* low level for is_* predicates *)
-    let is_file_kind follow_symlink kind fname =
-      (get_stats follow_symlink fname).Unix.st_kind = kind
-    ;;
-    let is_regular ?(follow_symlink = true) =
-      is_file_kind follow_symlink Unix.S_REG ;;
-    let is_directory ?(follow_symlink = true) =
-      is_file_kind follow_symlink Unix.S_DIR ;;
-    let is_chardev ?(follow_symlink = true) =
-      is_file_kind follow_symlink Unix.S_CHR ;;
-    let is_blockdev ?(follow_symlink = true) =
-      is_file_kind follow_symlink Unix.S_BLK ;;
-    let is_symlink ?(follow_symlink = false) =
-      is_file_kind follow_symlink Unix.S_LNK ;;
-    let is_fifo ?(follow_symlink = true) =
-      is_file_kind follow_symlink Unix.S_FIFO ;;
-    let is_socket ?(follow_symlink = true) =
-      is_file_kind follow_symlink Unix.S_SOCK ;;
-
-    let size ?(follow_symlink = true) fname =
-      (get_stats follow_symlink fname).Unix.st_size ;;
-
-      (** return a list of all entries contained in a directory. Return order is
-      not specified *)
-    let ls dirname =
-      let dir = Unix.opendir dirname in
-      let rec aux acc =
-        match (try Some (Unix.readdir dir) with End_of_file -> None) with
-        | Some entry -> aux (entry :: acc)
-        | None -> acc
-      in
-      let res = aux [] in
-      Unix.closedir dir;
-      res
-    ;;
-
-  end
-
-module ZString =
-  struct
-
-      (** string -> char list *)
-    let explode s =
-      let chars = ref [] in
-      for i = String.length s - 1 downto 0 do
-        chars := s.[i] :: !chars
-      done;
-      !chars
-    ;;
-
-      (** char list -> string *)
-    let implode l =
-      let buf = Buffer.create (List.length l) in
-      let rec implode' = function
-        | [] -> Buffer.contents buf
-        | hd::tl ->
-            Buffer.add_char buf hd;
-            implode' tl
-      in
-      implode' l
-    ;;
-
-      (** perl's chomp, remove once trailing "\n", if any *)
-    let chomp s =
-      let len = String.length s in
-      let diff = len - newline_len in
-      if String.sub s diff newline_len = newline then (* trailing newline *)
-        String.sub s 0 diff
-      else
-        s
-    ;;
-
-      (** map on string *)
-    let map f s =
-      for i = 0 to String.length s do
-        s.[i] <- f s.[i]
-      done
-    ;;
-
-      (** fold_left on string *)
-    let fold_left f init s =
-      let len = String.length s in
-      let rec fold_left' idx acc =
-        if idx = len then
-          acc
-        else (* idx < len *)
-          fold_left' (idx + 1) (f acc s.[idx])
-      in
-      fold_left' 0 init
-    ;;
-
-    (* TODO Non funge *)
-    let fold_right f s init =
-      let len = String.length s in
-      let rec fold_right' idx acc =
-        if idx < 0 then
-          acc
-        else  (* idx >= 0 *)
-          fold_right' (idx - 1) (f s.[idx] acc)
-      in
-      fold_right' len (init - 1)
-    ;;
-
-      (** iter on string *)
-    let iter (f: char -> unit) = fold_left (fun _ c -> f c) () ;;
-    (*
-    let string_iter (f: char -> unit) s =
-      for i = 0 to String.length s do
-        f s.[i]
-      done
-    ;;
-    *)
-
-    let filter () =
-      raise Not_implemented; () ;;
-
-      (** create a string of length len and sets each char of them to the result
-      of applying f to the char's index *)
-    let init len f =
-      let str = String.create len in
-      for i = 0 to len - 1 do
-        str.[i] <- f i
-      done;
-      str
-    ;;
-
-  end
-
-module ZRandom =
-  struct
-
-    type ranges = (int * int) list
-
-    let digit_range = [48, 57] ;;
-    let alpha_upper_range = [65, 90] ;;
-    let alpha_lower_range = [97, 122] ;;
-    let alpha_range = alpha_upper_range @ alpha_lower_range ;;
-    let alphanum_range = digit_range @ alpha_range ;;
-    let word_range = alphanum_range @ [95, 95] ;; (* alphanum + '_' *)
-
-    let rec ranges_are_sane = function
-      | (min, max) :: tl ->
-          if min > max || min < 0 || max > 255 then
-            failwith (sprintf "ZRandom: invalid range %d .. %d" min max);
-          ranges_are_sane tl
-      | [] -> ()
-    ;;
-    let size_of_ranges =  (* assumption: ranges are sane *)
-      let rec aux acc = function
-        | [] -> acc
-        | ((min, max) as range) :: tl -> aux (acc + (max - min + 1)) tl
-      in
-      aux 0
-    ;;
-    let nth_in_ranges idx ranges =  (* assumption: ranges are sane *)
-      if ranges = [] then
-        failwith "ZRandom: no range provided";
-      let rec aux idx = function
-        | [] -> assert false
-        | (min, max) :: tl ->
-            let nth = min + idx in
-            if nth <= max then nth else aux (nth - max - 1) tl
-      in
-      aux idx ranges
-    ;;
-
-      (* low level for char and string *)
-    let char' ranges =
-      let int = Random.int (size_of_ranges ranges) in
-      Char.chr (nth_in_ranges int ranges)
-    ;;
-
-      (** generate a random char inside provided ranges. Ranges are provided as
-      a list of int pairs. Each pair represent an inclusive interval of possible
-      character codes. Default range is [0, 255] *)
-    let char ?(ranges = [0,255]) () =
-      ranges_are_sane ranges;
-      char' ranges
-    ;;
-
-      (** generate a string of random characters inside provided range *)
-    let string ?(ranges = [0,255]) len =
-      ranges_are_sane ranges;
-      ZString.init len (fun _ -> char' ranges)
-    ;;
-
-  end
-
-module ZStream =
-  struct
-
-      (** map on streams. Beware that this function build stream using
-      Stream.from. That kind of stream can't be mixed with ordinary streams *)
-    let map f stream =
-      Stream.from
-        (fun _ -> try Some (f (Stream.next stream)) with Stream.Failure -> None)
-    ;;
-      (** fold on streams. Beware that this function build stream using
-      Stream.from. That kind of stream can't be mixed with ordinary streams *)
-    let rec fold f init stream =
-      match (try Some (Stream.next stream) with Stream.Failure -> None) with
-      | Some item -> fold f (f init item) stream
-      | None -> init
-    ;;
-
-      (** given an input channel return the stream of its lines (without
-      trailing new line) *)
-    let of_inchan ic =
-      Stream.from (fun _ -> try Some (input_line ic) with End_of_file -> None)
-    ;;
-
-  end
-
-  (** fold_left on input channel lines *)
-let rec fold_in f init ic =
-  match (try Some (input_line ic) with End_of_file -> None) with
-  | Some l -> fold_in f (f init l) ic
-  | None -> init
-;;
-
-  (** iter on input channel lines *)
-let iter_in f = fold_in (fun _ line -> f line) () ;;
-
-  (** map on input channel lines *)
-let map_in f ic = List.rev (fold_in (fun acc line -> f line :: acc) [] ic) ;;
-
-  (** return list of lines read from an input channel *)
-let input_lines ic = List.rev (fold_in (fun acc line -> line :: acc) [] ic) ;;
-
-  (** read all data available on an input channel and return them as a string *)
-let input_all =
-  let strlen = 8192 in
-  let buflen = 8192 * 2 in
-  let str = String.create strlen in
-  fun ic ->
-    let buf = Buffer.create buflen in
-    let rec input' () =
-      let bytes = input ic str 0 strlen in
-      if bytes = 0 then (* EOF *)
-        Buffer.contents buf
-      else begin
-        Buffer.add_substring buf str 0 bytes;
-        input' ()
-      end
-    in
-    input' ()
-;;
-
-  (** write a list of lines to an output channel. Newline is added at the end of
-  each line *)
-let rec output_lines lines oc =
-  match lines with
-  | [] -> ()
-  | hd::tl ->
-      output_string oc (hd ^ newline);
-      output_lines tl oc
-;;
-
-  (** read_lines on stdin *)
-let read_lines () = input_lines stdin ;;
-  (** read_all on stdin *)
-let read_all () = input_all stdin ;;
-
-  (** Some constructor inverse *)
-let unsome  = function
-  | Some x -> x
-  | None -> raise (Invalid_argument "Zack.unsome")
-;;
-
-module Array = ZArray ;;
-module Dbm = ZDbm ;;
-module Hashtbl = ZHashtbl ;;
-module List = ZList ;;
-module Logic = ZLogic ;;
-module Random = ZRandom ;;
-module Stream = ZStream ;;
-module String = ZString ;;
-module Sys = ZSys ;;
-module Unix = ZUnix ;;
-
diff --git a/helm/http_getter/zack.mli b/helm/http_getter/zack.mli
deleted file mode 100644 (file)
index 581bcfd..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-(*
- * Zack's own OCaml library -- set of "helpers" function for the OCaml language
- *
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@bononia.it>
- *
- *  This module 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 module 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 module; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *)
-
-exception Not_implemented
-
-val fold_in : ('a -> string -> 'a) -> 'a -> in_channel -> 'a
-val iter_in : (string -> unit) -> in_channel -> unit
-val map_in : (string -> 'a) -> in_channel -> 'a list
-val input_lines : in_channel -> string list
-val input_all : in_channel -> string
-val output_lines : string list -> out_channel -> unit
-val read_lines : unit -> string list
-val read_all : unit -> string
-val unsome : 'a option -> 'a
-
-module Array :
-  sig
-    val index : ('a -> bool) -> 'a array -> int
-    val find : ('a -> bool) -> 'a array -> 'a
-
-    val exists : ('a -> bool) -> 'a array -> bool
-    val for_all : ('a -> bool) -> 'a array -> bool
-
-    val filter : ('a -> bool) -> 'a array -> 'a array
-
-(*     val lrotate : ?step:int -> 'a array -> 'a array *)
-(*     val rrotate : ?step:int -> 'a array -> 'a array *)
-  end
-
-module Dbm :
-  sig
-    val fold : ('a -> string -> string -> 'a) -> 'a -> Dbm.t -> 'a
-  end
-
-module Hashtbl :
-  sig
-    val keys : ('a, 'b) Hashtbl.t -> 'a list
-    val values : ('a, 'b) Hashtbl.t -> 'b list
-
-    val remove_all : ('a, 'b) Hashtbl.t -> 'a -> unit
-  end
-
-module List :
-  sig
-    val map' : ('a -> 'b) -> 'a list -> 'b list
-    val map_if : ('a -> 'b) -> ('a -> bool) -> 'a list -> 'b list
-    val map_if' : ('a -> 'b) -> ('a -> bool) -> 'a list -> 'b list
-
-    val assoc_all : 'a -> ('a * 'b) list -> 'b list
-    val assq_all : 'a -> ('a * 'b) list -> 'b list
-
-    val lrotate : 'a list -> 'a list
-    val rrotate : 'a list -> 'a list
-(*     val List.lrotate: ?step:int -> 'a list -> 'a list *)
-(*     val List.rrotate: ?step:int -> 'a list -> 'a list *)
-  end
-
-module Logic :
-  sig
-    val non : ('a -> bool) -> 'a -> bool
-    val conj : ('a -> bool) -> ('a -> bool) -> 'a -> bool
-    val disj : ('a -> bool) -> ('a -> bool) -> 'a -> bool
-    val imply : ('a -> bool) -> ('a -> bool) -> 'a -> bool
-
-    val ( &&& ) : ('a -> bool) -> ('a -> bool) -> 'a -> bool
-    val ( ||| ) : ('a -> bool) -> ('a -> bool) -> 'a -> bool
-    val ( => ) : ('a -> bool) -> ('a -> bool) -> 'a -> bool
-  end
-
-module Random :
-  sig
-    val digit_range : (int * int) list
-    val alpha_upper_range : (int * int) list
-    val alpha_lower_range : (int * int) list
-    val alpha_range : (int * int) list
-    val alphanum_range : (int * int) list
-    val word_range : (int * int) list
-
-    val char : ?ranges:(int * int) list -> unit -> char
-    val string : ?ranges:(int * int) list -> int -> string
-  end
-
-module Stream :
-  sig
-    val map : ('a -> 'b) -> 'a Stream.t -> 'b Stream.t
-    val fold : ('a -> 'b -> 'a) -> 'a -> 'b Stream.t -> 'a
-
-    val of_inchan : in_channel -> string Stream.t
-  end
-
-module String :
-  sig
-    val explode : string -> char list
-    val implode : char list -> string
-
-    val chomp : string -> string
-
-    val map : (char -> char) -> string -> unit
-    val fold_left : ('a -> char -> 'a) -> 'a -> string -> 'a
-(*     val fold_right : (char -> 'a -> 'a) -> string -> 'a -> 'a *)
-    val iter : (char -> unit) -> string -> unit
-(*     val filter : (char -> bool) -> string -> string *)
-
-    val init : int -> (int -> char) -> string
-  end
-
-(*
-module Sys :
-  sig
-    val copy : src:string -> dst:string -> unit
-  end
-*)
-
-module Unix :
-  sig
-(*     val mkdir : ?parents:bool -> string -> unit *)
-
-    val is_regular : ?follow_symlink:bool -> string -> bool
-    val is_directory : ?follow_symlink:bool -> string -> bool
-    val is_chardev : ?follow_symlink:bool -> string -> bool
-    val is_blockdev : ?follow_symlink:bool -> string -> bool
-    val is_symlink : ?follow_symlink:bool -> string -> bool
-    val is_fifo : ?follow_symlink:bool -> string -> bool
-    val is_socket : ?follow_symlink:bool -> string -> bool
-
-    val size : ?follow_symlink:bool -> string -> int
-
-    val ls : string -> string list
-  end
-
diff --git a/helm/hxsp/config b/helm/hxsp/config
deleted file mode 100644 (file)
index 87cd74d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-########################################################################
-########################################################################
-#
-# Main config file for hxsp
-# Author: Alessandro Barzanti (barzu@libero.it)
-#
-########################################################################
-########################################################################
-
-########################################################################
-# Working path of hxsp
-########################################################################
-#working_path  = helm/puwobo
-working_path  = helm/uwobo
-#working_path  = helm/hxsp
-
-########################################################################
-# Port to use for hxsp
-########################################################################
-port = 8080
-
-########################################################################
-# Interface language
-########################################################################
-language = IT
-#language = EN
-
-########################################################################
-# Use complete command description on syntax error if ON
-########################################################################
-all_usage_synerr = OFF
-#all_usage_synerr = ON
-
-########################################################################
-# Include XIncludes on the fly if ON
-########################################################################
-expand_xinc = OFF
-#expand_xinc = ON
-
-########################################################################
-# Max Depth of the DOM tree while parsing
-########################################################################
-max_depth = 1000
-
-########################################################################
-########################################################################
-########################################################################
diff --git a/helm/hxsp/hxsp.pl b/helm/hxsp/hxsp.pl
deleted file mode 100644 (file)
index 14fd243..0000000
+++ /dev/null
@@ -1,1250 +0,0 @@
-#!/usr/bin/perl
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-#
-#  H.X.S.P.    V 1.0
-#  T S T R
-#  T L Y O
-#  P T E C
-#      S E
-#      H S
-#      E S
-#      E O
-#      T R
-#
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-use HTTP::Daemon;
-use HTTP::Status;
-use HTTP::Request;
-use LWP::UserAgent;
-use URI::Escape;
-use CGI;
-use FindBin;
-use XML::LibXML;
-use XML::LibXSLT;
-use IO;
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Global Variables
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-# Version number
-my $ver ="1.0";
-
-# Working path of hxsp (loaded from config)
-my $working_path;
-
-# Interface language (loaded from config)
-my $language;
-
-# Port to use for hxsp (loaded from config)
-my $port;
-
-# Use complete command description on syntax error if ON (loaded from config)
-my $all_usage_synerr;
-
-# Include XIncludes on the fly if ON (loaded from config)
-my $expand_xinc;
-
-# Max Depth of the DOM tree while parsing
-my $max_depth;
-
-# Message sent when hxsp was called without commands (loaded from message.##)
-my $home_message;
-
-# Message sent when hxsp was called with the help command (loaded from message.##)
-my $help_message;
-
-# Message sent when a stylesheet is added (loaded from message.##)
-my $s_add;
-
-# Message sent when a stylesheet is reloaded (loaded from message.##)
-my $s_reload;
-
-# Message sent when a stylesheet is removed (loaded from message.##)
-my $s_remove;
-
-# Message to print the stylesheet status for list command (loaded from message.##)
-my $list;
-
-# Message sent when the list command was called
-# and there is no stylesheet loaded (loaded from message.##)
-my $empty;
-
-# Message sent after "home_message" when hxsp was called without commands
-# and sent after "help_message" when hxsp was called with the help command
-# and after all syntax errors if "all_usage_synerr" is set ON (loaded from message.##)
-my $all_usage;
-
-# All the following syntax errors messages are used #only# if "all_usage_synerr" is set OFF
-
-# Message sent on help syntax errors (loaded from message.##)
-my $help_usage;
-
-# Message sent on add syntax errors (loaded from message.##)
-my $add_usage;
-
-# Message sent on remove syntax errors (loaded from message.##)
-my $remove_usage;
-
-# Message sent on list syntax errors (loaded from message.##)
-my $list_usage;
-
-# Message sent on reload syntax errors (loaded from message.##)
-my $reload_usage;
-
-# Message sent on apply syntax errors (loaded from message.##)
-my $apply_usage;
-
-# The error hash contains the error messages to call in case of syntax
-# or operative errors, the keys are defined by the left value of each line in error##
-my %error;
-
-# load ok template
-my $ok_tpl;
-
-# load operror template
-my $operror_tpl;
-
-# load synerror template
-my $synerror_tpl;
-
-# This is the data structure to store the loaded stylesheets (hash of array)
-# [0] :Styleseet URI , [1] : Loaded styleseet
-my %stylesheet_hash;
-
-# This is a hash for fast duplicate uri detection
-my %by_name;
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Starting Operations
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-# chdir to the directory of this perl script
-chdir $FindBin::Bin;
-
-# load CONFIG
-load_conf();
-
-# initialize the objects to use LibXML and LibXSLT
-my $parser = XML::LibXML->new();
-my $xslt = XML::LibXSLT->new();
-
-# initialize the LibXML callbacks to load uri's
-XML::LibXML->callbacks(\&match_uri,\&open_uri,\&read_uri,\&close_uri);
-
-# include XIncludes on the fly if required
-if ($expand_xinc eq "ON") { $parser->expand_xinclude( 1 ); }
-
-# initialize the hxsp as HTTP::Daemon
-my $d = new HTTP::Daemon LocalPort => $port;
-
-# get the complete working url of hxsp
-my $puwobo_url = $d->url().$working_path;
-
-# set the working path to be comparable with url->path
-$working_path = "/". $working_path;
-
-# load messages
-load_messages();
-
-# load error
-load_err();
-
-# load templates
-load_templates();
-
-# print starting information on console
-print qq{
-hxsp v$ver active at: <URL:$puwobo_url>
-   Language is $language
-   On syntax error usage of every command is $all_usage_synerr
-   Include XIncludes on the fly is $expand_xinc;
-};
-
-#################################################################################################
-#################################################################################################
-# HTTP::Daemon Operations
-#################################################################################################
-#################################################################################################
-
-# do not accumulate defunct processes
-$SIG{CHLD} = "IGNORE";
-$SIG{USR1} = \&listen; # sent by the child to make the parent read the pipe
-
-pipe LIST_CHILD, TELL_PARENT;
-pipe LIST_PARENT, TELL_CHILD;
-TELL_PARENT->autoflush(1);
-TELL_CHILD->autoflush(1);
-
-
-sub listen {
-   my $res;
-   my $query = <LIST_CHILD>;
-   if ($query =~ /^add /) {
-      $query =~ s/^add //;
-      chomp($query);
-      $res = add($query);
-   }
-   elsif ($query =~ /^reload /) {
-      $query =~ s/^reload //;
-      chomp($query);
-      $res = reload($query);
-   }
-   elsif ($query =~ /^remove /) {
-      $query =~ s/^remove //;
-      chomp($query);
-      $res = remove($query);
-   }
-   print TELL_CHILD "$res\n";
-   print TELL_CHILD "____\n"; # end of response
-}
-
-while (my $c = $d->accept) #connect
-{
-   if (fork() == 0) #start new concurrent process
-   {
-      while (my $r = $c->get_request) #get http request
-      {
-         if ($r->method eq 'GET' &&
-         ($r->url->path eq $working_path or $r->url->path eq $working_path."/"))#start dir
-         {
-             my $response = new HTTP::Response;
-             $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-             $response->content(home($r->url->query));
-             $c->send_response($response);
-         }
-         elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/help")#usage
-         {
-             my $response = new HTTP::Response;
-             $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-             $response->content(help($r->url->query));
-             $c->send_response($response);
-         }
-         elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/add")#add
-         {
-             my $response = new HTTP::Response;
-             kill(USR1,getppid()); # ask the parent to read the pipe
-             my $qs = $r->url->query;
-             print TELL_PARENT "add $qs\n";
-             my $in;
-             while (($in = <LIST_PARENT>) ne "____\n") {
-                $res .= $in;
-             }
-             chomp($res);
-             $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-             $response->content($res);
-             $c->send_response($response);
-         }
-         elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/remove")#remove
-         {
-             my $response = new HTTP::Response;
-             kill(USR1,getppid()); # ask the parent to read the pipe
-             my $qs = $r->url->query;
-             print TELL_PARENT "remove $qs\n";
-             my $in;
-             my $res="";
-             while (($in = <LIST_PARENT>) ne "____\n") {
-                 $res .= $in;
-             }
-             chomp($res);
-             $response->content($res);
-             $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-             $c->send_response($response);
-         }
-         elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/reload")#reload
-         {
-             my $response = new HTTP::Response;
-             kill(USR1,getppid()); # ask the parent to read the pipe
-             my $qs = $r->url->query;
-             print TELL_PARENT "reload $qs\n";
-             my $in;
-             my $res="";
-             while (($in = <LIST_PARENT>) ne "____\n") {
-                 $res .= $in;
-             }
-             chomp($res);
-             $response->content($res);
-             $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-             $c->send_response($response);
-         }
-         elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/list")#list
-         {
-             my $response = new HTTP::Response;
-             $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-             $response->content(list($r->url->query));
-             $c->send_response($response);
-         }
-         elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/apply")#apply
-         {
-             my %headers;
-             my $response = new HTTP::Response;
-             $response->content(apply($r->url->query,\%headers));
-             $response->header(%headers);
-             $c->send_response($response);
-         }
-         else #wrong command or not working_path
-         {
-             $c->send_error(RC_FORBIDDEN)
-         }
-      }
-      $c->close;
-      undef($c);
-      exit;
-   } # fork
-}
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Stylesheet hash check subrutines
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-#################################################################################################
-# sub addcheckvalues
-# Usage: addcheckvalues($key,$uri);
-# Returns: error message or  0 if no errors found
-# Do: check if key and uri are already loaded
-# Used by: addvalues
-# Uses : err_replace
-#################################################################################################
-sub addcheckvalues
-{
-   my $ac_key = shift(@_);
-   my $ac_uri = shift(@_);
-   if (exists $stylesheet_hash{$ac_key})
-   {
-      return err_replace($error{"add_dup_key"},$ac_key,$ac_uri,"");
-   }
-   elsif (exists $by_name{$ac_uri})
-   {
-     return err_replace($error{"add_dup_value"},$ac_key,$ac_uri,$by_name{$ac_key});
-   }
-   else  {   return 0;  }
-}
-#################################################################################################
-
-#################################################################################################
-# sub recheckvalues
-# Usage: recheckvalues($key);
-# Returns: error message or  0 if no errors found
-# Do: check if key are loaded
-# Used by: remove, reloadvalues
-# Uses : err_replace
-#################################################################################################
-sub recheckvalues
-{
-   my $re_key = shift(@_);
-   if (not exists $stylesheet_hash{$re_key})
-   {
-     return err_replace($error{"re_inv_key"},$re_key,"","");
-   }
-   else { return 0; }
-}
-#################################################################################################
-
-#################################################################################################
-# sub applycheckvalues
-# Usage: applycheckvalues(\@keys);
-# Returns: error message or  0 if no errors found
-# Do: check if keys in @keys are loaded
-# Used by: remove, reloadvalues
-# Uses : err_replace
-#################################################################################################
-sub applycheckvalues
-{
-   my $applykeys_ptr = shift(@_);
-   foreach $applykey (@$applykeys_ptr)
-   {
-      if (not exists $stylesheet_hash{$applykey})
-      {
-         return err_replace($error{"apply_inv_key"},$applykey,"","");
-      }
-   }
-   return 0;
-}
-#################################################################################################
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Stylesheet hash modify subrutines
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-#################################################################################################
-# sub addvalues
-# Usage: if add_halt_on_errors is ON addvalues($key,$uri,@added);
-#        else addvalues($key,$uri)
-# Returns: error message or 0 on success,
-#             if add_halt_on_errors is ON return all the added keys on @added
-# Do: add the values to the stylesheet hash
-# Used by: add
-# Uses : addcheckvalues, loadstyle
-#################################################################################################
-sub addvalues
-{
-   my $av_key = shift(@_);
-   my $av_uri = shift(@_);
-   my $av_stylesheet; #parsed stylesheet to be placed in hash
-   if (my $err = addcheckvalues($av_key,$av_uri)) { return $err; }
-   elsif (my $err = loadstyle($av_key, $av_uri, $av_stylesheet)) { return $err; }
-   else
-   {
-      $stylesheet_hash{$av_key}[0]=$av_uri;
-      $stylesheet_hash{$av_key}[1]=$av_stylesheet;
-      $by_name{$av_uri}=$av_key;
-      return 0;
-   }
-}
-#################################################################################################
-
-#################################################################################################
-# sub removevalues
-# Usage: removevalues($key);
-# Returns: message
-# Do: remove the key specified and relative values from the stylesheet hash
-# Used by: remove, do_remove
-# Uses : ok_replace
-#################################################################################################
-sub removevalues
-{
-   my $cr_key = shift(@_);
-   my $cr_uri = $stylesheet_hash{$cr_key}[0];
-   delete $stylesheet_hash{$cr_key};
-   delete $by_name{$cr_uri};
-   return ok_replace("$s_remove\n",$cr_key,$cr_uri);
-}
-#################################################################################################
-
-#################################################################################################
-# sub reloadvalues
-# Usage: if add_halt_on_errors is ON reloadvalues($key.\%reloaded);
-#        else reloadvalues($key);
-# Returns: error message or 0 on success,
-#             if add_halt_on_errors is ON return the old stylesheets in %reloaded
-# Do: reload the stlylesheet with the key specified
-# Used by: do_reload
-# Uses : recheckvalues, loadstyle
-#################################################################################################
-sub reloadvalues
-{
-   my $rv_key = shift(@_);
-   my $rv_uri = $stylesheet_hash{$rv_key}[0];
-   my $rv_stylesheet; #parsed stylesheet to be placed in hash
-   if (my $err = recheckvalues($rv_key)) { return $err; }
-   elsif (my $err = loadstyle($rv_key, $rv_uri, $rv_stylesheet)) { return $err; }
-   else
-   {
-      $stylesheet_hash{$rv_key}[1] = $rv_stylesheet;
-      return 0;
-   }
-}
-#################################################################################################
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# LibXML LIBXSLT access subrutines
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-#################################################################################################
-# sub loadstyle
-# Usage: loadstyle($key,$uri,$stylesheet);
-# Returns: error message or 0 on success,
-#             parsed stylesheet in $stylesheet
-# Do: parse the stylesheet at the given uri
-# Used by: addvalues , reloadvalues
-# Uses : err_replace, parser_error_replace
-#################################################################################################
-sub loadstyle
-{
-   my $ls_key= shift(@_);
-   my $ls_uri= shift(@_);
-   my $uncatched = "";
-   my $line = "";
-   my $style_doc;
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   eval { $style_doc  = $parser->parse_file($ls_uri);  };
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-
-   if ($@ or $uncatched ne "")
-   {
-      return err_replace($error{"add_xml_error"},$ls_key,$ls_uri,parser_error_replace($@.$uncatched));
-   }
-   else
-   {
-      pipe P, STDERR;
-      STDERR->autoflush(1);
-      $uncatched = "";
-      $line = "";
-      eval { $_[0] = $xslt->parse_stylesheet($style_doc); };
-      print STDERR "____\n";
-      while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-      close P;
-      if ($@ or $uncatched ne "")
-      {
-         return err_replace($error{"add_xslt_error"},$ls_key,$ls_uri,parser_error_replace($@.$uncatched));
-      }
-      else  {return 0}
-   }
-}
-
-sub load_xml_doc
-{
-   my $xmluri = shift(@_);
-   my $uncatched = "";
-   my $line = "";
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   eval { $_[0] = $parser->parse_file($xmluri); };
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-   if ($@ or $uncatched ne "")
-   {
-      return err_replace($error{"apply_xml_error"},"",$xmluri,parser_error_replace($@.$uncatched));
-   }
-   else  {return 0}
-}
-
-sub apply_style
-{
-   my $k = shift(@_);
-   my $params_ptr = shift(@_);
-   my %params = XML::LibXSLT::xpath_to_string(%$params_ptr);
-   my $pippo;
-   my $uncatched = "";
-   my $line = "";
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   XML::LibXSLT->max_depth($max_depth);
-   eval { $_[0] = $stylesheet_hash{$k}[1]->transform($_[0],%params); };
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-   if ($@ or $uncatched ne "")
-   {
-      my $e_r = parser_error_replace($@.$uncatched);
-      return  err_replace($error{"apply_xslt_error"},$k,$stylesheet_hash{$k}[0],$e_r);
-   }
-   else  {return 0}
-}
-sub get_results
-{
-   my $k = shift(@_);
-   my $results = shift(@_);
-   my $retval;
-   my $uncatched = "";
-   my $line = "";
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   eval { $retval = $stylesheet_hash{$k}[1]->output_string($results); };
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-   if ($@ or $uncatched ne "")
-   {
-      my $e_r = parser_error_replace($@.$uncatched);
-      return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r));
-   }
-   else { return $retval; }
-}
-sub get_results_prop
-{
-   my $result = shift(@_);
-   my $retval;
-   my $uncatched = "";
-   my $line = "";
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   eval { $retval = $result->toString; };
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-   if ($@ or $uncatched ne "")
-   {
-      my $e_r = parser_error_replace($@.$uncatched);
-      return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r));
-   }
-   else { return $retval; }
-}
-
-sub get_results_html
-{
-   my $result = shift(@_);
-   my $retval;
-   my $uncatched = "";
-   my $line = "";
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   eval { $retval = $result->toStringHTML();};
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-   if ($@ or $uncatched ne "")
-   {
-      my $e_r = parser_error_replace($@.$uncatched);
-      return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r));
-   }
-   else { return $retval; }
-}
-
-sub decode
-{
-   my $result = shift(@_);
-   my $enc = shift(@_);
-   my $retval;
-   my $uncatched = "";
-   my $line = "";
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   eval { $retval = decodeFromUTF8($enc, $result);};
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-   if ($@ or $uncatched ne "")
-   {
-      my $e_r = parser_error_replace($@.$uncatched);
-      return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r));
-   }
-   else { return $retval; }
-}
-#################################################################################################
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Commands subrutines
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-#################################################################################################
-# sub add
-# Usage: add($http_query);
-# Returns: values for HTTP::Response
-# Do: add stylesheet(s) to hash
-# Used by: daemon
-# Uses : addparsequery, addvalues, ok_replace,
-#        ok_print, synerror_print, operror_print
-#################################################################################################
-sub add
-{
-   my $http_query = shift(@_); # querystring
-   my $cont =""; # return value
-   my @binds; #values of binds passed via querystring
-   my $err; # error string
-   if ($err = addparsequery($http_query,\@binds)) { return synerror_print($err,$add_usage); }
-   else
-   {
-      foreach my $bind (@binds)
-      {
-         my ($a_key , $e_uri) = split(/,/,$bind,2);
-         my $une_uri = uri_unescape($e_uri);
-         if ($err = addvalues($a_key,$une_uri)) { $cont .= "$err\n"; }
-         else { $cont .= ok_replace("$s_add\n",$a_key,$une_uri); }
-      }#foreach
-      return ok_print($cont);
-   }
-}
-#################################################################################################
-
-#################################################################################################
-# sub remove
-# Usage: remove($http_query);
-# Returns: values for HTTP::Response
-# Do: remove stylesheet(s) from hash
-# Used by: daemon
-# Uses : reparsequery, getkeys, recheckvalues, removevalues,
-#        ok_print, synerror_print, operror_print
-#################################################################################################
-sub remove
-{
-   my $http_query = shift(@_); # querystring
-   my $rem_keys;
-   my $cont="";
-   my $err;
-   if ($http_query eq "")
-   {
-      my $i=0;
-      foreach my $rem_key (keys %stylesheet_hash)
-      {
-         $cont .= removevalues($rem_key);
-         $i++;
-      }
-      if ($i==0) { return operror_print($error{"re_no_sl"}); }
-   }
-   elsif ($err = reparsequery($http_query,$rem_keys)){return synerror_print($err,$remove_usage);}
-   else
-   {
-      foreach my $rem_key (split (/,/,$rem_keys))
-      {
-         if (my $err = recheckvalues($rem_key)) { $cont .= "$err\n"; }
-         else { $cont .= removevalues($rem_key); }
-      }
-   }
-   return ok_print($cont);
-}
-#################################################################################################
-
-#################################################################################################
-# sub reload
-# Usage: remove($http_query);
-# Returns: values for HTTP::Response
-# Do: remove stylesheet(s) from hash
-# Used by: daemon
-# Uses : reparsequery, getkeys, recheckvalues, removevalues,
-#        ok_print, synerror_print, operror_print
-#################################################################################################
-sub reload #reload stylesheet(s) from hash
-{
-   my $http_query = shift(@_);
-   my $rel_keys;
-   my @rel_k;
-   my $dr_cont = "";
-   if ($http_query eq "")
-   {
-      my $i=0;
-      foreach my $key (keys %stylesheet_hash)
-      {
-         if (my $err = reloadvalues($key))  {  return $dr_cont .= $err; }
-         else {$dr_cont .= ok_replace("$s_reload\n",$key,$stylesheet_hash{$key}[0]);}
-         $i++;
-      }
-      if ($i==0) { return operror_print($error{"re_no_sl"}); }
-   }
-   elsif ($err = reparsequery($http_query,$rel_keys)){return synerror_print($err,$reload_usage);}
-   else
-   {
-      foreach my $key (split (/,/,$rel_keys))
-      {
-         if (my $err = reloadvalues($key))  {  return $dr_cont .= $err; }
-         else {$dr_cont .= ok_replace("$s_reload\n",$key,$stylesheet_hash{$key}[0]);}
-      }
-   }
-   return ok_print($dr_cont);
-}
-#################################################################################################
-
-sub apply #apply stylesheets
-{
-   my $http_query = shift(@_);
-   my $headers_ptr = shift(@_);
-   my $xmluri;
-   my @applykeys;
-   my %app_param;
-   my %app_prop;
-   my $results;
-   my $lastkey;
-   my $enc;
-
-   if (my $err=applyparsequery($http_query,\@applykeys,\%app_param,\%app_prop,$xmluri))
-   {
-      return synerror_print($err,$apply_usage);
-   }
-   elsif (my $err=applycheckvalues(\@applykeys)) { return operror_print($err); }
-   elsif (my $err=load_xml_doc($xmluri,$results)) { return operror_print($err); }
-   #apply
-   foreach my $applykey (@applykeys)
-   {
-      $lastkey=$applykey;
-      if (my $err=apply_style($applykey,\%{$app_param{$applykey}},$results))
-      {
-         return operror_print($err);
-      }
-   }#foreach
-   my $i=0;
-   while (my ($n, $v) = each %app_prop)
-   {
-      if (($n eq "method") or ($n eq "METHOD"))
-      {
-        if ($v eq 'html') { $headers_ptr->{'Content-Type'}='text/html'; }
-        elsif ($v eq 'text') { $headers_ptr->{'Content-Type'}='text/plain'; }
-        else { $headers_ptr->{'Content-Type'}='text/xml'; }
-      }
-      if (($n eq "encoding") or ($n eq "ENCODING"))
-      {
-        $headers_ptr->{'Content-Encoding'}=$v;
-        if ($v ne "UTF-8") { $enc = $v; }
-      }
-      if (($n eq "media-type") or ($n eq "MEDIA_TYPE") or ($n eq "MEDIA-TYPE"))
-      {
-        $headers_ptr->{'Content-Type'}=$v;
-      }
-      $i++;
-   }
-   if ($i == 0)
-   {
-      %$headers_ptr= ('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-      return get_results($lastkey,$results);
-   }
-   else
-   {
-      my $result;
-      $headers_ptr->{'Cache-Control'} = 'no-cache';
-      $headers_ptr->{'Pragma'} = "no-cache";
-      $headers_ptr->{'Expires'} = '0';
-      if ($headers_ptr->{'Content-Type'} eq 'text/html')
-      {
-         $result = get_results_html($results);
-      }
-      else
-      {
-         $result = get_results_prop($results);
-         if ($enc)
-         {
-           $result = decode($result,$enc);
-         }
-      }
-      return $result;
-   }
-}
-
-sub list #list all the stylesheet loaded
-{
-   my $cont="";
-   my $ind = 0;
-   foreach $key (keys %stylesheet_hash)
-   {
-      $cont .= ok_replace("$list\n",$key,$stylesheet_hash{$key}[0]);
-      $ind++;
-   }
-   if ($ind > 0) {   return ok_print($cont);  }
-   else { return ok_print($empty);  }
-}
-
-sub home #return Dispay active
-{
-   if ($_[0] ne "") { return synerror_print($error{"home_qs"},$all_usage); }
-   else {
-      return ok_print($home_message.$all_usage);
-   }
-}
-
-sub help #return html help
-{
-   if ($_[0] ne "") { return synerror_print($error{"help_qs"},$help_usage); }
-   return ok_print($help_message.$all_usage);
-}
-
-#################################################################################################
-#################################################################################################
-# Subrutines to get parameters for commands from Query String (query string parsing)
-#################################################################################################
-#################################################################################################
-
-sub add_comma_analysis
-{
-   my $bind = shift(@_);
-   my ($l , $r) = split(/,/,$bind,2);
-   if (index($bind ,",") == -1) { return $error{"add_no_sep"}; }
-   elsif (index($r ,",") != -1) { return $error{"add_many_sep"}; }
-   elsif (($l eq "") or ($r eq "")) { return $error{"add_null_bind"}; }
-   else { return 0; }
-}
-##
-#usage:
-#addparsequery($querystring,\@binds)
-#returns $errcode;
-sub addparsequery
-{
-   my $query = shift(@_);
-   my $value_ptr = shift(@_);
-   if ($query eq "")  { return $error{"add_no_bind"}; }
-   else
-   {
-      foreach my $params (split(/&/,$query))
-      {
-         my ($k , $v) = split(/=/,$params,2);
-         $v=uri_unescape($v);
-         if ($k ne "bind") { return $error{"add_oth"}; }
-         elsif ($v eq "") { return $error{"add_null_bind"}; }
-         elsif (my $err=add_comma_analysis($v)) { return $err; }
-         else {  push @$value_ptr,$v;}
-      }#foreach
-      return 0;
-   }
-}
-
-sub reparsequery
-{
-   my $query = shift(@_);
-   my $k;
-   my $v;
-   my $err;
-   if (index($query, "&") == -1)
-   {
-      ($k , $v) = split(/=/,$query,2);
-      $v=uri_unescape($v);
-      if ($k ne "keys") {  return $error{"re_oth"}; }
-      elsif ($v eq "") { return $error{"re_null_keys"}; }
-      elsif ((index($v,",")==0) or (index($v,",,")!=-1) or (substr($v,-1) eq ","))
-      {
-         return $error{"re_null_keys"};
-      }
-      else { $_[0] = $v; return 0; }
-   }
-   else { return $error{"re_many"}; }
-}
-
-sub get_req
-{
-   my $arr_ptr = shift(@_);
-   my $xmluri_found = 0;
-   my $keys_found = 0;
-   foreach my $el (@$arr_ptr)
-   {
-       my ($k , $v) = split(/=/,$el,2);
-       $v=uri_unescape($v);
-       if ($k eq "param") { return $error{"apply_no_dots_param"}; }
-       elsif ($k eq "prop") { return $error{"apply_no_dots_prop"}; }
-       elsif ($k eq "xmluri")
-       {
-          if ($xmluri_found) { return $error{"apply_many_uri"}; }
-          else
-          {
-             if ($v eq "") { return $error{"apply_null_uri"}; }
-             else { $_[0] = $v;  $xmluri_found = 1; }
-          }
-       }
-       elsif ($k eq "keys")
-       {
-           if ($keys_found) { return $error{"apply_many_keys"}; }
-           else
-           {
-              if ($v eq "") { return $error{"apply_null_keys"}; }
-              elsif ((index($v,",")==0) or (index($v,",,")!=-1) or (substr($v,-1) eq ","))
-              {
-                 return $error{"apply_null_keys"};
-              }
-              else { $_[1] = $v; $keys_found = 1; }
-           }
-       }
-       else { return $error{"apply_oth"}; }
-   }#foreach my $el (@$arr_ptr)
-   if ((!$xmluri_found or !$keys_found)) { return $error{"apply_few_pars"}; }
-   else  { return 0; }
-}
-
-sub applyparsequery
-{
-   my $query = shift(@_);
-   my $apply_keys_ptr = shift(@_);
-   my $keyparshoh = shift(@_);
-   my $proph_ptr = shift(@_);
-   my $applykeys;
-   my %prop_h;
-   my %genparam_h;
-   my %keyparam_h;
-   my @nodots;
-
-   if ($query eq "") { return $error{"apply_few_pars"}; }
-   if (index($query, "&") == -1) { return $error{"apply_few_pars"}; }
-   foreach my $param (split(/&/,$query))
-   {
-       my ($k , $v) = split(/=/,$param,2);
-       $v=uri_unescape($v);
-       if (index($k, ".") == -1) { push @nodots,$param; }
-       else
-       {
-            my ($l , $r) = split(/\./,$k,2);
-            if ($l eq "prop")
-            {
-                if (($r eq "") or ($v eq "")) { return $error{"apply_null_prop"}; }
-                elsif (index($r, ".") > -1)  { return $error{"apply_dots_prop"}; }
-                else { $prop_h{$r} = $v; }
-            }
-            elsif ($l eq "param")
-            {
-                if (($r eq "") or ($v eq "")) { return $error{"apply_null_param"}; }
-                elsif (index($r, ".") == -1)   { $genparam_h{$r} = $v; }
-                else
-                {
-                    my ($kk , $va) = split(/\./,$r,2);
-                    if (index($va, ".") > -1) {  return $error{"apply_dots_param"}; }
-                    elsif (($kk eq "") or ($va eq "")) { return $error{"apply_null_param"}; }
-                    else { $keyparam_h{$kk}{$va}=$v; }
-                }
-            }
-            else  { return $error{"apply_oth"}; }
-       }
-   }
-
-   if (my $err = get_req(\@nodots,$_[0],$applykeys)) { return $err; }
-   while (my ($gn, $gv) = each %prop_h)
-   {
-      $proph_ptr->{$gn} = $gv;
-   }
-   foreach my $pkey ( keys %keyparam_h )
-   {
-       my $k_found=0;
-       foreach my $verkey (split (/,/,$applykeys))
-       {
-          if ($pkey eq $verkey) { $k_found = 1; }
-       }
-       if (! $k_found) { return $error{"apply_inv_param"}; }
-   }
-
-   foreach my $applykey (split (/,/,$applykeys))
-   {
-         while (my ($gn, $gv) = each %genparam_h)
-         {
-            $keyparshoh->{$applykey}{$gn} = $gv;
-         }
-         while (my ($kn, $kv) = each %{ $keyparam_h{$applykey} } )
-         {
-           $keyparshoh->{$applykey}{$kn} = $kv;
-         }
-         push  @$apply_keys_ptr, $applykey;
-   }#foreach
-   return 0;
-}
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Subrutines to replace values between {} on loaded templates
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-sub ok_print
-{
-   my $message = shift(@_);
-   $message =~ s/(\n)/<br>\1/g;
-   my $retval = $ok_tpl;
-   $retval =~ s/\{MESSAGE\}/$message/g;
-   return $retval;
-}
-
-sub operror_print
-{
-   my $message = shift(@_);
-   $message =~ s/(\n)/<br>\1/g;
-   my $retval = $operror_tpl;
-   $retval =~ s/\{ERROR\}/$message/g;
-   return $retval;
-}
-
-sub synerror_print
-{
-   my $message = shift(@_);
-   my $us = shift(@_);
-   $message =~ s/(\n)/<br>\1/g;
-   my $retval = $synerror_tpl;
-   $retval =~ s/\{ERROR\}/$message/g;
-   $retval =~ s/\{USAGE\}/$us/g;
-   return $retval;
-}
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Subrutines to replace values between {} on loaded messages
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-sub ok_replace
-{
-   my $message = shift(@_);
-   my $key = shift(@_);
-   my $s_uri = shift(@_);
-   $message =~ s/\{KEY\}/$key/g;
-   $message =~ s/\{URI\}/$s_uri/g;
-   return $message;
-}
-
-sub err_replace
-{
-   my $message = shift(@_);
-   my $key = shift(@_);
-   my $s_uri = shift(@_);
-   my $errr = shift(@_);
-   $message =~ s/\{KEY\}/$key/g;
-   $message =~ s/\{URI\}/$s_uri/g;
-   $message =~ s/\{ERROR\}/$errr/g;
-   $message =~ s/\{OLDKEY\}/$errr/g;
-   return $message;
-}
-
-sub parser_error_replace
-{
-    my $no_at = shift(@_);
-    $no_at =~ s/(.*)\sat\s(.*)/\1/g;
-    $no_at =~ s/</&lt;/g;
-    $no_at =~ s/>/&gt;/g;
-    return $no_at;
-}
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Subrutines to load config files and templates
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-sub load_messages
-{
-   if ($language eq "IT")
-   {
-       open(MESSAGE, "./msg/message.it") || die "Can't open config file '/msg/message.it' : $!";
-   }
-   else
-   {
-       open(MESSAGE, "./msg/message.en") || die "Can't open config file '/msg/message.en' : $!";
-   }
-   while(my $line = <MESSAGE>) {
-      # ignore comments and full line comments
-      $line =~ s/#.*$//;
-      next unless $line =~ /\S/;
-      $line =~ s/\{URL\}/$puwobo_url/g;
-      $line =~ s/\{VER\}/$ver/g;
-      if ($line =~ /^(home_message)\s*=\s*(.*)$/) {$home_message = $2; }
-      if ($line =~ /^(help_message)\s*=\s*(.*)$/) {$help_message = $2; }
-      if ($line =~ /^(s_add)\s*=\s*(.*)$/) {$s_add = $2; }
-      if ($line =~ /^(s_reload)\s*=\s*(.*)$/) {$s_reload = $2; }
-      if ($line =~ /^(s_remove)\s*=\s*(.*)$/) {$s_remove = $2; }
-      if ($line =~ /^(list)\s*=\s*(.*)$/) {$list = $2; }
-      if ($line =~ /^(empty)\s*=\s*(.*)$/) {$empty = $2; }
-      if ($line =~ /^(all_usage)\s*=\s*(.*)$/) {$all_usage = $2; }
-      if ($all_usage_synerr eq "ON")
-      {
-         $help_usage=$add_usage=$remove_usage=$list_usage=$reload_usage=$apply_usage=$all_usage;
-      }
-      else
-      {
-         if ($line =~ /^(help_usage)\s*=\s*(.*)$/) {$help_usage = $2; }
-         if ($line =~ /^(add_usage)\s*=\s*(.*)$/) {$add_usage = $2; }
-         if ($line =~ /^(remove_usage)\s*=\s*(.*)$/) {$remove_usage = $2; }
-         if ($line =~ /^(list_usage)\s*=\s*(.*)$/) {$list_usage = $2; }
-         if ($line =~ /^(reload_usage)\s*=\s*(.*)$/) {$reload_usage = $2; }
-         if ($line =~ /^(apply_usage)\s*=\s*(.*)$/) {$apply_usage = $2; }
-      }
-   }
-   close MESSAGE;
-}
-
-sub load_conf
-{
-   open(CONFIG, "./config") || die "Can't open config file 'config' : $!";
-   while(my $line = <CONFIG>) {
-       # ignore comments and full line comments
-       $line =~ s/#.*$//;
-       next unless $line =~ /\S/;
-       if ($line =~ /^(working_path)\s*=\s*(.*)$/) {$working_path = $2; }
-       if ($line =~ /^(language)\s*=\s*(.*)$/) {$language = $2; }
-       if ($line =~ /^(port)\s*=\s*(.*)$/) {$port = $2; }
-       if ($line =~ /^(all_usage_synerr)\s*=\s*(.*)$/) {$all_usage_synerr = $2; }
-       if ($line =~ /^(expand_xinc)\s*=\s*(.*)$/) {$expand_xinc = $2; }
-       if ($line =~ /^(max_depth)\s*=\s*(.*)$/) {$max_depth = $2; }
-   }
-   close CONFIG;
-}
-
-sub load_err
-{
-   if ($language eq "IT")
-   {
-      open(ERRO, "./msg/error.it") || die "Can't open config file '/msg/error.it' : $!";
-   }
-   else
-   {
-      open(ERRO, "./msg/error.en") || die "Can't open config file '/msg/error.en' : $!";
-   }
-   while(my $line = <ERRO>)
-   {
-      # ignore comments and full line comments
-      $line =~ s/#.*$//;
-       next unless $line =~ /\S/;
-       if ($line =~ /^(.*?)\s*=\s*(.*)$/) {$error{$1} = $2; }
-   }
-   close ERRO;
-}
-
-sub load_templates
-{
-        # load ok template
-        open(OK_TPL, "./tpl/ok.tpl")
-        || die "Can't open template file '/tpl/ok.tpl' : $!";
-        while(my $line = <OK_TPL>) {$ok_tpl .= $line; }
-        close OK_TPL;
-
-        # load operror template
-        open(OPERROR_TPL, "./tpl/operror.tpl")
-        || die "Can't open template file '/tpl/operror.tpl' : $!";
-        while(my $line = <OPERROR_TPL>) {$operror_tpl .= $line; }
-        close OPERROR_TPL;
-
-        # load synerror template
-        open(SYNERROR_TPL, "./tpl/synerror.tpl")
-        || die "Can't open template file '/tpl/synerror.tpl' : $!";
-        while(my $line = <SYNERROR_TPL>) {$synerror_tpl .= $line; }
-        close SYNERROR_TPL;
-}
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# the LibXML callbacks follow
-# these callbacks are used for both the original parse AND the XInclude (if set)
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-sub match_uri {
-    my $uri = shift;
-    return $uri !~ /:\/\// ? 1 : 0; # we handle only files
-}
-
-sub open_uri {
-    my $uri = shift;
-
-    my $handler = new IO::File;
-    if ( not $handler->open( "<$uri" ) ){
-        $file = 0;
-    }
-
-    return $file;
-}
-
-sub read_uri {
-    my $handler = shift;
-    my $length  = shift;
-    my $buffer = undef;
-    if ( $handler ) {
-        $handler->read( $rv , $length );
-    }
-    return $buffer;
-}
-
-sub close_uri {
-    my $handler = shift;
-    if ( $handler ) {
-        $handler->close();
-    }
-    return 1;
-}
diff --git a/helm/hxsp/make.pl b/helm/hxsp/make.pl
deleted file mode 100644 (file)
index ecd3a28..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/perl
-open(MAIN, ">","./hxsp.pl")|| die "Can't open ./hxsp.pl : $!";
-my $pd = "./splitted/";
-my @pieces = ("0.init.p.pl","1.globvars.p.pl","2.start.p.pl",
-              "3.daemon.p.pl","4.hash.p.pl","5.libxslt.p.pl",
-              "6.commands.p.pl","7.qsparse.p.pl",
-              "8.strrep.p.pl","9.load.p.pl");
-
-foreach $p (@pieces)
-{
-   open(P, "$pd$p") || die "Can't open $pd$p : $!";
-   while(my $line = <P>) { print MAIN $line; }
-   close P;
-   print MAIN "\n";
-}
-
-close MAIN;
diff --git a/helm/hxsp/msg/error.en b/helm/hxsp/msg/error.en
deleted file mode 100644 (file)
index 9ac62ab..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#syntax errors
-
-home_qs = syntax error: don't use parameters on hxsp if they aren't required by a specific command
-
-help_qs  = syntax error: too parameters, help don't require any parameter
-
-list_qs  = syntax error: too parameters, list don't require any parameter
-
-add_no_bind      = syntax error: you must use the "bind" parameter
-add_oth          = syntax error: you may use only the "bind" parameter
-add_null_bind    = syntax error: bad bind value (NULL)
-add_many_sep     = syntax error: bad bind value (too commas)
-add_no_sep       = syntax error: bad bind value (no comma)
-
-re_oth           = syntax error: you may use only the "keys" parameter
-re_many          = syntax error: you may use only the "keys" parameter and you must use it once
-re_null_keys     = syntax error: bad keys value (NULL)
-
-apply_few_pars   = syntax error: xmluri and keys are both required
-apply_oth        = syntax error:  you may use only keys, xmluri e param as parameters
-apply_many_uri   = syntax error: you must use the xmluri parameter once
-apply_null_uri   = syntax error: bad xmluri value (NULL)
-apply_many_keys  = syntax error: you must use the keys parameter once
-apply_null_keys  = syntax error: bad keys value (NULL)
-apply_no_dots_param  = syntax error: bad param value (no dots)
-apply_no_dots_prop  = syntax error: bad prop value (no dots)
-apply_dots_param  = syntax error: bad param value (more than 2 dots)
-apply_dots_prop  = syntax error: bad prop value (many dots)
-apply_null_param = syntax error: bad param value (NULL)
-apply_null_prop = syntax error: bad prop value (NULL)
-apply_inv_param  = syntax error: bad param value (key not specified in the keys parameter)
-
-#operative errors
-add_dup_key = error in the stylesheet with key {KEY} and uri {URI}: a stylesheet with key {KEY} was already loaded use another key
-add_dup_value = error in the stylesheet with key {KEY} and uri {URI}: the stylesheet with uri {URI} was already loaded with key {OLDKEY} use "reload" instead
-add_xml_error = the XML parser found an error in the stylesheet with key {KEY} and uri {URI}:<br>{ERROR}
-add_xslt_error = the XSLT parser found an error in the stylesheet with key {KEY} and uri {URI}:<br>{ERROR}
-
-re_inv_key = the stylesheet with key {KEY} was not loaded
-re_no_sl = there is no stylesheets loaded
-
-apply_inv_key = the stylesheet with key {KEY} was not loaded
-apply_xml_error = the XML parser found an error in the file {URI}:<br>{ERROR}
-apply_xslt_error = the LibXSLT library found an error applying the stylesheet with key {KEY} and uri {URI}:<br>{ERROR}
-apply_xslt_out_error = lthe LibXSLT library found an error creating the return file:<br>{ERROR}
diff --git a/helm/hxsp/msg/error.it b/helm/hxsp/msg/error.it
deleted file mode 100644 (file)
index ebbfa8f..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#sintax errors
-
-home_qs = errore di sintassi: non passare parametri a hxsp se non per l'utilizzo dei comandi specificati
-
-help_qs  = errore di sintassi: troppi parametri specificati, help non richiede parametri
-
-list_qs  = errore di sintassi: troppi parametri specificati, list non richiede parametri
-
-add_no_bind      = errore di sintassi: si deve assegnare almeno un valore a bind
-add_oth          = errore di sintassi: si possono assegnare valori solo a bind
-add_null_bind    = errore di sintassi: valore di bind errato (NULL)
-add_many_sep     = errore di sintassi: valore di bind errato (troppe virgole)
-add_no_sep       = errore di sintassi: valore di bind errato (non seperato da virgola)
-
-re_oth           = errore di sintassi: si possono assegnare valori solo a keys
-re_many          = errore di sintassi: si possono assegnare valori solo a keys e una sola volta
-re_null_keys     = errore di sintassi: valore di keys errato (NULL)
-
-apply_few_pars   = errore di sintassi: richiesti almeno xmluri e keys
-apply_oth        = errore di sintassi: si possono assegnare valori solo a keys, xmluri e param
-apply_many_uri   = errore di sintassi: si pu&ograve; assegnare solo un valore a xmluri
-apply_null_uri   = errore di sintassi: valore di xmluri errato (NULL)
-apply_many_keys  = errore di sintassi: si possono assegnare valori a keys una sola volta
-apply_null_keys  = errore di sintassi: valore di keys errato (NULL)
-apply_no_dots_param  = errore di sintassi: valore di param errato (param richiede il punto)
-apply_no_dots_prop  = errore di sintassi: valore di prop errato (prop richiede il punto)
-apply_dots_param  = errore di sintassi: valore di param errato (param richiede al massimo 2 punti)
-apply_dots_prop  = errore di sintassi: valore di prop errato (prop richiede un solo punto)
-apply_null_param = errore di sintassi: valore di param errato (NULL)
-apply_null_prop = errore di sintassi: valore di prop errato (NULL)
-apply_inv_param  = errore di sintassi: valore di param errato (chiave non indicata in keys)
-
-#operative errors
-add_dup_key = errore nello stylesheet con chiave {KEY} e uri {URI}: esiste già uno stilesheet con chiave {KEY} usare un altra chiave
-add_dup_value = errore nello stylesheet con chiave {KEY} e uri {URI}: lo stylesheet con uri {URI} Ã¨ già stato caricato con la chiave {OLDKEY} usare "reload" per ricaricarlo
-add_xml_error = il parser xml ha rilevato un errore nello stylesheet con chiave {KEY} e uri {URI}:<br>{ERROR}
-add_xslt_error = il parser xslt ha rilevato un errore nello stylesheet con chiave {KEY} e uri {URI}:<br>{ERROR}
-
-re_inv_key = lo stylesheet  con chiave {KEY} non Ã¨ stato caricato
-re_no_sl = nessuno stylesheet Ã¨ stato caricato
-
-apply_inv_key = lo stylesheet  con chiave {KEY} non Ã¨ stato caricato
-apply_xml_error = il parser xml ha rilevato un errore nello file {URI}:<br>{ERROR}
-apply_xslt_error = la libreria LibXSLT ha rilevato un errore applicando lo stylesheet con chiave {KEY} e uri {URI}:<br>{ERROR}
-apply_xslt_out_error = la libreria LibXSLT ha rilevato un errore nella creazione del file in uscita:<br>{ERROR}
-
diff --git a/helm/hxsp/msg/message.en b/helm/hxsp/msg/message.en
deleted file mode 100644 (file)
index 6a43e82..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-########################################################################
-########################################################################
-#
-# Interface messages config file in EN language for hxsp
-# Author: Alessandro Barzanti (barzu@libero.it)
-#
-########################################################################
-########################################################################
-
-########################################################################
-########################################################################
-# usage messages
-########################################################################
-########################################################################
-
-########################################################################
-# Message sent after help syntax errors if "all_usage_synerr" is set OFF
-########################################################################
-help_usage  = usage:<BR> {URL}/help
-
-########################################################################
-# Message sent after add syntax errors if "all_usage_synerr" is set OFF
-########################################################################
-add_usage   = usage:<BR> {URL}/add?bind=<i>key</i>,<i>stylesheet</i>[&bind=<i>key</i>,<i>stylesheet</i>]*
-
-########################################################################
-# Message sent after remove syntax errors if "all_usage_synerr" is set OFF
-########################################################################
-remove_usage = usage:<BR> {URL}/remove[?keys=<i>key_1,...,key_n</i>]
-
-########################################################################
-# Message sent after list syntax errors if "all_usage_synerr" is set OFF
-########################################################################
-list_usage  = usage:<BR> {URL}/list
-
-########################################################################
-# Message sent after reload syntax errors if "all_usage_synerr" is set OFF
-########################################################################
-reload_usage =usage:<BR> {URL}/reload[?keys=<i>key_1,...,key_n</i>]
-
-########################################################################
-# Message sent after apply syntax errors if "all_usage_synerr" is set OFF
-########################################################################
-apply_usage  =usage:<BR> {URL}/apply?xmluri=<i>xmldata</i>&keys=<i>key_1,...,key_n</i>[&param.<i>name</i>=<i>value</i>]*[&param.<i>key</i>.<i>name</i>=<i>value</i>]*[&amp;prop.<i>name</i>=[<i>value</i>]]*
-
-########################################################################
-# Message sent after "home_message" when hxsp was called without commands
-# and sent after "help_message" when hxsp was called with the help command
-# and after all syntax errors if "all_usage_synerr" is set ON
-########################################################################
-all_usage = usage:<BR><UL><LI>{URL}/help</LI><LI>{URL}/add?bind=<i>key</i>,<i>stylesheet</i>&bind=<i>key</i>,<i>stylesheet</i>]*</LI><LI>{URL}/remove[?keys=<i>key_1,...,key_n</i>]</LI><LI>{URL}/list</LI><LI>{URL}/reload[?keys=<i>key_1,...,key_n</i>]</LI><LI>{URL}/apply?xmluri=<i>xmldata</i>&keys=<i>key_1,...,key_n</i>[&param.<i>name</i>=<i>value</i>]*[&param.<i>key</i>.<i>name</i>=<i>value</i>]*[&amp;prop.<i>name</i>=[<i>value</i>]]*</LI></UL>
-
-########################################################################
-########################################################################
-#operative messages
-########################################################################
-########################################################################
-
-########################################################################
-# Message sent when hxsp was called without commands
-########################################################################
-home_message = <h1>hxsp v{VER} active</h1><BR>
-
-########################################################################
-# Message sent when hxsp was called with the help command
-########################################################################
-help_message =
-
-########################################################################
-# Message sent when a stylesheet is added
-########################################################################
-s_add = the stylesheet with key: {KEY} and uri: {URI} was successfully loaded
-
-########################################################################
-# Message sent when a stylesheet is reloaded
-########################################################################
-s_reload = the stylesheet with key: {KEY} and uri: {URI} was successfully reloaded
-
-########################################################################
-# Message sent when a stylesheet is removed
-########################################################################
-s_remove = the stylesheet with key: {KEY} and uri: {URI} was successfully removed
-
-########################################################################
-# Message to print the stylesheet status for list command
-########################################################################
-list = the stylesheet with key: {KEY} and uri: {URI} was loaded
-
-########################################################################
-# Message sent when the list command was called
-# and there is no stylesheet loaded
-########################################################################
-empty = there is no stylesheet loaded
-
-########################################################################
-########################################################################
diff --git a/helm/hxsp/msg/message.it b/helm/hxsp/msg/message.it
deleted file mode 100644 (file)
index 77c1d6b..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-########################################################################
-########################################################################
-#
-# Interface messages config file in IT language for hxsp
-# Author: Alessandro Barzanti (barzu@libero.it)
-#
-########################################################################
-########################################################################
-
-########################################################################
-########################################################################
-# usage messages
-########################################################################
-########################################################################
-
-########################################################################
-# Message sent after help syntax errors if "all_usage_synerr" is set OFF
-########################################################################
-help_usage  = utilizzo:<BR>{URL}/help
-
-########################################################################
-# Message sent after add syntax errors if "all_usage_synerr" is set OFF
-########################################################################
-add_usage   = utilizzo:<BR>{URL}/add?bind=<i>key</i>,<i>stylesheet</i>[&bind=<i>key</i>,<i>stylesheet</i>]*
-
-########################################################################
-# Message sent after remove syntax errors if "all_usage_synerr" is set OFF
-########################################################################
-remove_usage =  utilizzo:<BR>{URL}/remove[?keys=<i>key_1,...,key_n</i>]
-
-########################################################################
-# Message sent after list syntax errors if "all_usage_synerr" is set OFF
-########################################################################
-list_usage      = utilizzo:<BR>{URL}/list
-
-########################################################################
-# Message sent after reload syntax errors if "all_usage_synerr" is set OFF
-########################################################################
-reload_usage = utilizzo:<BR>{URL}/reload[?keys=<i>key_1,...,key_n</i>]
-
-########################################################################
-# Message sent after apply syntax errors if "all_usage_synerr" is set OFF
-########################################################################
-apply_usage  = utilizzo:<BR>{URL}/apply?xmluri=<i>xmldata</i>&keys=<i>key_1,...,key_n</i>[&param.<i>name</i>=<i>value</i>]*[&param.<i>key</i>.<i>name</i>=<i>value</i>]*[&amp;prop.<i>name</i>=[<i>value</i>]]*
-
-########################################################################
-# Message sent after "home_message" when hxsp was called without commands
-# and sent after "help_message" when hxsp was called with the help command
-# and after all syntax errors if "all_usage_synerr" is set ON
-########################################################################
-all_usage = utilizzo:<BR><UL><LI>{URL}/help</LI><LI>{URL}/add?bind=<i>key</i>,<i>stylesheet</i>&bind=<i>key</i>,<i>stylesheet</i>]*</LI><LI>{URL}/remove[?keys=<i>key_1,...,key_n</i>]</LI><LI>{URL}/list</LI><LI>{URL}/reload[?keys=<i>key_1,...,key_n</i>]</LI><LI>{URL}/apply?xmluri=<i>xmldata</i>&keys=<i>key_1,...,key_n</i>[&param.<i>name</i>=<i>value</i>]*[&param.<i>key</i>.<i>name</i>=<i>value</i>]*[&amp;prop.<i>name</i>=[<i>value</i>]]*</LI></UL>
-
-########################################################################
-########################################################################
-#operative messages
-########################################################################
-########################################################################
-
-########################################################################
-# Message sent when hxsp was called without commands
-########################################################################
-home_message = <h1>hxsp v{VER} attivo</h1><BR>
-
-########################################################################
-# Message sent when hxsp was called with the help command
-########################################################################
-help_message = <h1>hxsp v{VER} attivo</h1><BR>
-
-########################################################################
-# Message sent when a stylesheet is added
-########################################################################
-s_add = lo stylesheet con chiave: {KEY} e uri: {URI} Ã¨ stato caricato con successo
-
-########################################################################
-# Message sent when a stylesheet is reloaded
-########################################################################
-s_reload = lo stylesheet con chiave: {KEY} e uri: {URI} Ã¨ stato ricaricato con successo
-
-########################################################################
-# Message sent when a stylesheet is removed
-########################################################################
-s_remove = lo stylesheet con chiave: {KEY} e uri: {URI} Ã¨ stato rimosso
-
-########################################################################
-# Message to print the stylesheet status for list command
-########################################################################
-list = lo stylesheet con chiave: {KEY} e uri: {URI} Ã¨ presente nel sistema
-
-########################################################################
-# Message sent when the list command was called
-# and there is no stylesheet loaded
-########################################################################
-empty = non Ã¨ ancora stato caricato nessuno stylesheet
-
-########################################################################
-########################################################################
diff --git a/helm/hxsp/splitted/0.init.p.pl b/helm/hxsp/splitted/0.init.p.pl
deleted file mode 100644 (file)
index 6c378c7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/perl
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-#
-#  H.X.S.P.    V 1.0
-#  T S T R
-#  T L Y O
-#  P T E C
-#      S E
-#      H S
-#      E S
-#      E O
-#      T R
-#
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-use HTTP::Daemon;
-use HTTP::Status;
-use HTTP::Request;
-use LWP::UserAgent;
-use URI::Escape;
-use CGI;
-use FindBin;
-use XML::LibXML;
-use XML::LibXSLT;
-use IO;
diff --git a/helm/hxsp/splitted/1.globvars.p.pl b/helm/hxsp/splitted/1.globvars.p.pl
deleted file mode 100644 (file)
index 9a9a887..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Global Variables
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-# Version number
-my $ver ="1.0";
-
-# Working path of hxsp (loaded from config)
-my $working_path;
-
-# Interface language (loaded from config)
-my $language;
-
-# Port to use for hxsp (loaded from config)
-my $port;
-
-# Use complete command description on syntax error if ON (loaded from config)
-my $all_usage_synerr;
-
-# Include XIncludes on the fly if ON (loaded from config)
-my $expand_xinc;
-
-# Max Depth of the DOM tree while parsing
-my $max_depth;
-
-# Message sent when hxsp was called without commands (loaded from message.##)
-my $home_message;
-
-# Message sent when hxsp was called with the help command (loaded from message.##)
-my $help_message;
-
-# Message sent when a stylesheet is added (loaded from message.##)
-my $s_add;
-
-# Message sent when a stylesheet is reloaded (loaded from message.##)
-my $s_reload;
-
-# Message sent when a stylesheet is removed (loaded from message.##)
-my $s_remove;
-
-# Message to print the stylesheet status for list command (loaded from message.##)
-my $list;
-
-# Message sent when the list command was called
-# and there is no stylesheet loaded (loaded from message.##)
-my $empty;
-
-# Message sent after "home_message" when hxsp was called without commands
-# and sent after "help_message" when hxsp was called with the help command
-# and after all syntax errors if "all_usage_synerr" is set ON (loaded from message.##)
-my $all_usage;
-
-# All the following syntax errors messages are used #only# if "all_usage_synerr" is set OFF
-
-# Message sent on help syntax errors (loaded from message.##)
-my $help_usage;
-
-# Message sent on add syntax errors (loaded from message.##)
-my $add_usage;
-
-# Message sent on remove syntax errors (loaded from message.##)
-my $remove_usage;
-
-# Message sent on list syntax errors (loaded from message.##)
-my $list_usage;
-
-# Message sent on reload syntax errors (loaded from message.##)
-my $reload_usage;
-
-# Message sent on apply syntax errors (loaded from message.##)
-my $apply_usage;
-
-# The error hash contains the error messages to call in case of syntax
-# or operative errors, the keys are defined by the left value of each line in error##
-my %error;
-
-# load ok template
-my $ok_tpl;
-
-# load operror template
-my $operror_tpl;
-
-# load synerror template
-my $synerror_tpl;
-
-# This is the data structure to store the loaded stylesheets (hash of array)
-# [0] :Styleseet URI , [1] : Loaded styleseet
-my %stylesheet_hash;
-
-# This is a hash for fast duplicate uri detection
-my %by_name;
diff --git a/helm/hxsp/splitted/2.start.p.pl b/helm/hxsp/splitted/2.start.p.pl
deleted file mode 100644 (file)
index a123ca7..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Starting Operations
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-# chdir to the directory of this perl script
-chdir $FindBin::Bin;
-
-# load CONFIG
-load_conf();
-
-# initialize the objects to use LibXML and LibXSLT
-my $parser = XML::LibXML->new();
-my $xslt = XML::LibXSLT->new();
-
-# initialize the LibXML callbacks to load uri's
-XML::LibXML->callbacks(\&match_uri,\&open_uri,\&read_uri,\&close_uri);
-
-# include XIncludes on the fly if required
-if ($expand_xinc eq "ON") { $parser->expand_xinclude( 1 ); }
-
-# initialize the hxsp as HTTP::Daemon
-my $d = new HTTP::Daemon LocalPort => $port;
-
-# get the complete working url of hxsp
-my $puwobo_url = $d->url().$working_path;
-
-# set the working path to be comparable with url->path
-$working_path = "/". $working_path;
-
-# load messages
-load_messages();
-
-# load error
-load_err();
-
-# load templates
-load_templates();
-
-# print starting information on console
-print qq{
-hxsp v$ver active at: <URL:$puwobo_url>
-   Language is $language
-   On syntax error usage of every command is $all_usage_synerr
-   Include XIncludes on the fly is $expand_xinc;
-};
diff --git a/helm/hxsp/splitted/3.daemon.p.pl b/helm/hxsp/splitted/3.daemon.p.pl
deleted file mode 100644 (file)
index 3e37873..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-#################################################################################################
-#################################################################################################
-# HTTP::Daemon Operations
-#################################################################################################
-#################################################################################################
-
-# do not accumulate defunct processes
-$SIG{CHLD} = "IGNORE";
-$SIG{USR1} = \&listen; # sent by the child to make the parent read the pipe
-
-pipe LIST_CHILD, TELL_PARENT;
-pipe LIST_PARENT, TELL_CHILD;
-TELL_PARENT->autoflush(1);
-TELL_CHILD->autoflush(1);
-
-
-sub listen {
-   my $res;
-   my $query = <LIST_CHILD>;
-   if ($query =~ /^add /) {
-      $query =~ s/^add //;
-      chomp($query);
-      $res = add($query);
-   }
-   elsif ($query =~ /^reload /) {
-      $query =~ s/^reload //;
-      chomp($query);
-      $res = reload($query);
-   }
-   elsif ($query =~ /^remove /) {
-      $query =~ s/^remove //;
-      chomp($query);
-      $res = remove($query);
-   }
-   print TELL_CHILD "$res\n";
-   print TELL_CHILD "____\n"; # end of response
-}
-
-while (my $c = $d->accept) #connect
-{
-   if (fork() == 0) #start new concurrent process
-   {
-      while (my $r = $c->get_request) #get http request
-      {
-         if ($r->method eq 'GET' &&
-         ($r->url->path eq $working_path or $r->url->path eq $working_path."/"))#start dir
-         {
-             my $response = new HTTP::Response;
-             $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-             $response->content(home($r->url->query));
-             $c->send_response($response);
-         }
-         elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/help")#usage
-         {
-             my $response = new HTTP::Response;
-             $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-             $response->content(help($r->url->query));
-             $c->send_response($response);
-         }
-         elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/add")#add
-         {
-             my $response = new HTTP::Response;
-             kill(USR1,getppid()); # ask the parent to read the pipe
-             my $qs = $r->url->query;
-             print TELL_PARENT "add $qs\n";
-             my $in;
-             while (($in = <LIST_PARENT>) ne "____\n") {
-                $res .= $in;
-             }
-             chomp($res);
-             $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-             $response->content($res);
-             $c->send_response($response);
-         }
-         elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/remove")#remove
-         {
-             my $response = new HTTP::Response;
-             kill(USR1,getppid()); # ask the parent to read the pipe
-             my $qs = $r->url->query;
-             print TELL_PARENT "remove $qs\n";
-             my $in;
-             my $res="";
-             while (($in = <LIST_PARENT>) ne "____\n") {
-                 $res .= $in;
-             }
-             chomp($res);
-             $response->content($res);
-             $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-             $c->send_response($response);
-         }
-         elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/reload")#reload
-         {
-             my $response = new HTTP::Response;
-             kill(USR1,getppid()); # ask the parent to read the pipe
-             my $qs = $r->url->query;
-             print TELL_PARENT "reload $qs\n";
-             my $in;
-             my $res="";
-             while (($in = <LIST_PARENT>) ne "____\n") {
-                 $res .= $in;
-             }
-             chomp($res);
-             $response->content($res);
-             $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-             $c->send_response($response);
-         }
-         elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/list")#list
-         {
-             my $response = new HTTP::Response;
-             $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-             $response->content(list($r->url->query));
-             $c->send_response($response);
-         }
-         elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/apply")#apply
-         {
-             my %headers;
-             my $response = new HTTP::Response;
-             $response->content(apply($r->url->query,\%headers));
-             $response->header(%headers);
-             $c->send_response($response);
-         }
-         else #wrong command or not working_path
-         {
-             $c->send_error(RC_FORBIDDEN)
-         }
-      }
-      $c->close;
-      undef($c);
-      exit;
-   } # fork
-}
diff --git a/helm/hxsp/splitted/4.hash.p.pl b/helm/hxsp/splitted/4.hash.p.pl
deleted file mode 100644 (file)
index e3b1fc1..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Stylesheet hash check subrutines
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-#################################################################################################
-# sub addcheckvalues
-# Usage: addcheckvalues($key,$uri);
-# Returns: error message or  0 if no errors found
-# Do: check if key and uri are already loaded
-# Used by: addvalues
-# Uses : err_replace
-#################################################################################################
-sub addcheckvalues
-{
-   my $ac_key = shift(@_);
-   my $ac_uri = shift(@_);
-   if (exists $stylesheet_hash{$ac_key})
-   {
-      return err_replace($error{"add_dup_key"},$ac_key,$ac_uri,"");
-   }
-   elsif (exists $by_name{$ac_uri})
-   {
-     return err_replace($error{"add_dup_value"},$ac_key,$ac_uri,$by_name{$ac_key});
-   }
-   else  {   return 0;  }
-}
-#################################################################################################
-
-#################################################################################################
-# sub recheckvalues
-# Usage: recheckvalues($key);
-# Returns: error message or  0 if no errors found
-# Do: check if key are loaded
-# Used by: remove, reloadvalues
-# Uses : err_replace
-#################################################################################################
-sub recheckvalues
-{
-   my $re_key = shift(@_);
-   if (not exists $stylesheet_hash{$re_key})
-   {
-     return err_replace($error{"re_inv_key"},$re_key,"","");
-   }
-   else { return 0; }
-}
-#################################################################################################
-
-#################################################################################################
-# sub applycheckvalues
-# Usage: applycheckvalues(\@keys);
-# Returns: error message or  0 if no errors found
-# Do: check if keys in @keys are loaded
-# Used by: remove, reloadvalues
-# Uses : err_replace
-#################################################################################################
-sub applycheckvalues
-{
-   my $applykeys_ptr = shift(@_);
-   foreach $applykey (@$applykeys_ptr)
-   {
-      if (not exists $stylesheet_hash{$applykey})
-      {
-         return err_replace($error{"apply_inv_key"},$applykey,"","");
-      }
-   }
-   return 0;
-}
-#################################################################################################
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Stylesheet hash modify subrutines
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-#################################################################################################
-# sub addvalues
-# Usage: if add_halt_on_errors is ON addvalues($key,$uri,@added);
-#        else addvalues($key,$uri)
-# Returns: error message or 0 on success,
-#             if add_halt_on_errors is ON return all the added keys on @added
-# Do: add the values to the stylesheet hash
-# Used by: add
-# Uses : addcheckvalues, loadstyle
-#################################################################################################
-sub addvalues
-{
-   my $av_key = shift(@_);
-   my $av_uri = shift(@_);
-   my $av_stylesheet; #parsed stylesheet to be placed in hash
-   if (my $err = addcheckvalues($av_key,$av_uri)) { return $err; }
-   elsif (my $err = loadstyle($av_key, $av_uri, $av_stylesheet)) { return $err; }
-   else
-   {
-      $stylesheet_hash{$av_key}[0]=$av_uri;
-      $stylesheet_hash{$av_key}[1]=$av_stylesheet;
-      $by_name{$av_uri}=$av_key;
-      return 0;
-   }
-}
-#################################################################################################
-
-#################################################################################################
-# sub removevalues
-# Usage: removevalues($key);
-# Returns: message
-# Do: remove the key specified and relative values from the stylesheet hash
-# Used by: remove, do_remove
-# Uses : ok_replace
-#################################################################################################
-sub removevalues
-{
-   my $cr_key = shift(@_);
-   my $cr_uri = $stylesheet_hash{$cr_key}[0];
-   delete $stylesheet_hash{$cr_key};
-   delete $by_name{$cr_uri};
-   return ok_replace("$s_remove\n",$cr_key,$cr_uri);
-}
-#################################################################################################
-
-#################################################################################################
-# sub reloadvalues
-# Usage: if add_halt_on_errors is ON reloadvalues($key.\%reloaded);
-#        else reloadvalues($key);
-# Returns: error message or 0 on success,
-#             if add_halt_on_errors is ON return the old stylesheets in %reloaded
-# Do: reload the stlylesheet with the key specified
-# Used by: do_reload
-# Uses : recheckvalues, loadstyle
-#################################################################################################
-sub reloadvalues
-{
-   my $rv_key = shift(@_);
-   my $rv_uri = $stylesheet_hash{$rv_key}[0];
-   my $rv_stylesheet; #parsed stylesheet to be placed in hash
-   if (my $err = recheckvalues($rv_key)) { return $err; }
-   elsif (my $err = loadstyle($rv_key, $rv_uri, $rv_stylesheet)) { return $err; }
-   else
-   {
-      $stylesheet_hash{$rv_key}[1] = $rv_stylesheet;
-      return 0;
-   }
-}
-#################################################################################################
diff --git a/helm/hxsp/splitted/5.libxslt.p.pl b/helm/hxsp/splitted/5.libxslt.p.pl
deleted file mode 100644 (file)
index 4d90dc1..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# LibXML LIBXSLT access subrutines
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-#################################################################################################
-# sub loadstyle
-# Usage: loadstyle($key,$uri,$stylesheet);
-# Returns: error message or 0 on success,
-#             parsed stylesheet in $stylesheet
-# Do: parse the stylesheet at the given uri
-# Used by: addvalues , reloadvalues
-# Uses : err_replace, parser_error_replace
-#################################################################################################
-sub loadstyle
-{
-   my $ls_key= shift(@_);
-   my $ls_uri= shift(@_);
-   my $uncatched = "";
-   my $line = "";
-   my $style_doc;
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   eval { $style_doc  = $parser->parse_file($ls_uri);  };
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-
-   if ($@ or $uncatched ne "")
-   {
-      return err_replace($error{"add_xml_error"},$ls_key,$ls_uri,parser_error_replace($@.$uncatched));
-   }
-   else
-   {
-      pipe P, STDERR;
-      STDERR->autoflush(1);
-      $uncatched = "";
-      $line = "";
-      eval { $_[0] = $xslt->parse_stylesheet($style_doc); };
-      print STDERR "____\n";
-      while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-      close P;
-      if ($@ or $uncatched ne "")
-      {
-         return err_replace($error{"add_xslt_error"},$ls_key,$ls_uri,parser_error_replace($@.$uncatched));
-      }
-      else  {return 0}
-   }
-}
-
-sub load_xml_doc
-{
-   my $xmluri = shift(@_);
-   my $uncatched = "";
-   my $line = "";
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   eval { $_[0] = $parser->parse_file($xmluri); };
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-   if ($@ or $uncatched ne "")
-   {
-      return err_replace($error{"apply_xml_error"},"",$xmluri,parser_error_replace($@.$uncatched));
-   }
-   else  {return 0}
-}
-
-sub apply_style
-{
-   my $k = shift(@_);
-   my $params_ptr = shift(@_);
-   my %params = XML::LibXSLT::xpath_to_string(%$params_ptr);
-   my $pippo;
-   my $uncatched = "";
-   my $line = "";
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   XML::LibXSLT->max_depth($max_depth);
-   eval { $_[0] = $stylesheet_hash{$k}[1]->transform($_[0],%params); };
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-   if ($@ or $uncatched ne "")
-   {
-      my $e_r = parser_error_replace($@.$uncatched);
-      return  err_replace($error{"apply_xslt_error"},$k,$stylesheet_hash{$k}[0],$e_r);
-   }
-   else  {return 0}
-}
-sub get_results
-{
-   my $k = shift(@_);
-   my $results = shift(@_);
-   my $retval;
-   my $uncatched = "";
-   my $line = "";
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   eval { $retval = $stylesheet_hash{$k}[1]->output_string($results); };
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-   if ($@ or $uncatched ne "")
-   {
-      my $e_r = parser_error_replace($@.$uncatched);
-      return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r));
-   }
-   else { return $retval; }
-}
-sub get_results_prop
-{
-   my $result = shift(@_);
-   my $retval;
-   my $uncatched = "";
-   my $line = "";
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   eval { $retval = $result->toString; };
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-   if ($@ or $uncatched ne "")
-   {
-      my $e_r = parser_error_replace($@.$uncatched);
-      return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r));
-   }
-   else { return $retval; }
-}
-
-sub get_results_html
-{
-   my $result = shift(@_);
-   my $retval;
-   my $uncatched = "";
-   my $line = "";
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   eval { $retval = $result->toStringHTML();};
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-   if ($@ or $uncatched ne "")
-   {
-      my $e_r = parser_error_replace($@.$uncatched);
-      return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r));
-   }
-   else { return $retval; }
-}
-
-sub decode
-{
-   my $result = shift(@_);
-   my $enc = shift(@_);
-   my $retval;
-   my $uncatched = "";
-   my $line = "";
-   pipe P, STDERR;
-   STDERR->autoflush(1);
-   eval { $retval = decodeFromUTF8($enc, $result);};
-   print STDERR "____\n";
-   while(($line = <P>) ne "____\n") { $uncatched .= $line; }
-   close P;
-   if ($@ or $uncatched ne "")
-   {
-      my $e_r = parser_error_replace($@.$uncatched);
-      return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r));
-   }
-   else { return $retval; }
-}
-#################################################################################################
diff --git a/helm/hxsp/splitted/6.commands.p.pl b/helm/hxsp/splitted/6.commands.p.pl
deleted file mode 100644 (file)
index 142acc5..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Commands subrutines
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-#################################################################################################
-# sub add
-# Usage: add($http_query);
-# Returns: values for HTTP::Response
-# Do: add stylesheet(s) to hash
-# Used by: daemon
-# Uses : addparsequery, addvalues, ok_replace,
-#        ok_print, synerror_print, operror_print
-#################################################################################################
-sub add
-{
-   my $http_query = shift(@_); # querystring
-   my $cont =""; # return value
-   my @binds; #values of binds passed via querystring
-   my $err; # error string
-   if ($err = addparsequery($http_query,\@binds)) { return synerror_print($err,$add_usage); }
-   else
-   {
-      foreach my $bind (@binds)
-      {
-         my ($a_key , $e_uri) = split(/,/,$bind,2);
-         my $une_uri = uri_unescape($e_uri);
-         if ($err = addvalues($a_key,$une_uri)) { $cont .= "$err\n"; }
-         else { $cont .= ok_replace("$s_add\n",$a_key,$une_uri); }
-      }#foreach
-      return ok_print($cont);
-   }
-}
-#################################################################################################
-
-#################################################################################################
-# sub remove
-# Usage: remove($http_query);
-# Returns: values for HTTP::Response
-# Do: remove stylesheet(s) from hash
-# Used by: daemon
-# Uses : reparsequery, getkeys, recheckvalues, removevalues,
-#        ok_print, synerror_print, operror_print
-#################################################################################################
-sub remove
-{
-   my $http_query = shift(@_); # querystring
-   my $rem_keys;
-   my $cont="";
-   my $err;
-   if ($http_query eq "")
-   {
-      my $i=0;
-      foreach my $rem_key (keys %stylesheet_hash)
-      {
-         $cont .= removevalues($rem_key);
-         $i++;
-      }
-      if ($i==0) { return operror_print($error{"re_no_sl"}); }
-   }
-   elsif ($err = reparsequery($http_query,$rem_keys)){return synerror_print($err,$remove_usage);}
-   else
-   {
-      foreach my $rem_key (split (/,/,$rem_keys))
-      {
-         if (my $err = recheckvalues($rem_key)) { $cont .= "$err\n"; }
-         else { $cont .= removevalues($rem_key); }
-      }
-   }
-   return ok_print($cont);
-}
-#################################################################################################
-
-#################################################################################################
-# sub reload
-# Usage: remove($http_query);
-# Returns: values for HTTP::Response
-# Do: remove stylesheet(s) from hash
-# Used by: daemon
-# Uses : reparsequery, getkeys, recheckvalues, removevalues,
-#        ok_print, synerror_print, operror_print
-#################################################################################################
-sub reload #reload stylesheet(s) from hash
-{
-   my $http_query = shift(@_);
-   my $rel_keys;
-   my @rel_k;
-   my $dr_cont = "";
-   if ($http_query eq "")
-   {
-      my $i=0;
-      foreach my $key (keys %stylesheet_hash)
-      {
-         if (my $err = reloadvalues($key))  {  return $dr_cont .= $err; }
-         else {$dr_cont .= ok_replace("$s_reload\n",$key,$stylesheet_hash{$key}[0]);}
-         $i++;
-      }
-      if ($i==0) { return operror_print($error{"re_no_sl"}); }
-   }
-   elsif ($err = reparsequery($http_query,$rel_keys)){return synerror_print($err,$reload_usage);}
-   else
-   {
-      foreach my $key (split (/,/,$rel_keys))
-      {
-         if (my $err = reloadvalues($key))  {  return $dr_cont .= $err; }
-         else {$dr_cont .= ok_replace("$s_reload\n",$key,$stylesheet_hash{$key}[0]);}
-      }
-   }
-   return ok_print($dr_cont);
-}
-#################################################################################################
-
-sub apply #apply stylesheets
-{
-   my $http_query = shift(@_);
-   my $headers_ptr = shift(@_);
-   my $xmluri;
-   my @applykeys;
-   my %app_param;
-   my %app_prop;
-   my $results;
-   my $lastkey;
-   my $enc;
-
-   if (my $err=applyparsequery($http_query,\@applykeys,\%app_param,\%app_prop,$xmluri))
-   {
-      return synerror_print($err,$apply_usage);
-   }
-   elsif (my $err=applycheckvalues(\@applykeys)) { return operror_print($err); }
-   elsif (my $err=load_xml_doc($xmluri,$results)) { return operror_print($err); }
-   #apply
-   foreach my $applykey (@applykeys)
-   {
-      $lastkey=$applykey;
-      if (my $err=apply_style($applykey,\%{$app_param{$applykey}},$results))
-      {
-         return operror_print($err);
-      }
-   }#foreach
-   my $i=0;
-   while (my ($n, $v) = each %app_prop)
-   {
-      if (($n eq "method") or ($n eq "METHOD"))
-      {
-        if ($v eq 'html') { $headers_ptr->{'Content-Type'}='text/html'; }
-        elsif ($v eq 'text') { $headers_ptr->{'Content-Type'}='text/plain'; }
-        else { $headers_ptr->{'Content-Type'}='text/xml'; }
-      }
-      if (($n eq "encoding") or ($n eq "ENCODING"))
-      {
-        $headers_ptr->{'Content-Encoding'}=$v;
-        if ($v ne "UTF-8") { $enc = $v; }
-      }
-      if (($n eq "media-type") or ($n eq "MEDIA_TYPE") or ($n eq "MEDIA-TYPE"))
-      {
-        $headers_ptr->{'Content-Type'}=$v;
-      }
-      $i++;
-   }
-   if ($i == 0)
-   {
-      %$headers_ptr= ('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
-      return get_results($lastkey,$results);
-   }
-   else
-   {
-      my $result;
-      $headers_ptr->{'Cache-Control'} = 'no-cache';
-      $headers_ptr->{'Pragma'} = "no-cache";
-      $headers_ptr->{'Expires'} = '0';
-      if ($headers_ptr->{'Content-Type'} eq 'text/html')
-      {
-         $result = get_results_html($results);
-      }
-      else
-      {
-         $result = get_results_prop($results);
-         if ($enc)
-         {
-           $result = decode($result,$enc);
-         }
-      }
-      return $result;
-   }
-}
-
-sub list #list all the stylesheet loaded
-{
-   my $cont="";
-   my $ind = 0;
-   foreach $key (keys %stylesheet_hash)
-   {
-      $cont .= ok_replace("$list\n",$key,$stylesheet_hash{$key}[0]);
-      $ind++;
-   }
-   if ($ind > 0) {   return ok_print($cont);  }
-   else { return ok_print($empty);  }
-}
-
-sub home #return Dispay active
-{
-   if ($_[0] ne "") { return synerror_print($error{"home_qs"},$all_usage); }
-   else {
-      return ok_print($home_message.$all_usage);
-   }
-}
-
-sub help #return html help
-{
-   if ($_[0] ne "") { return synerror_print($error{"help_qs"},$help_usage); }
-   return ok_print($help_message.$all_usage);
-}
diff --git a/helm/hxsp/splitted/7.qsparse.p.pl b/helm/hxsp/splitted/7.qsparse.p.pl
deleted file mode 100644 (file)
index aa7be53..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-#################################################################################################
-#################################################################################################
-# Subrutines to get parameters for commands from Query String (query string parsing)
-#################################################################################################
-#################################################################################################
-
-sub add_comma_analysis
-{
-   my $bind = shift(@_);
-   my ($l , $r) = split(/,/,$bind,2);
-   if (index($bind ,",") == -1) { return $error{"add_no_sep"}; }
-   elsif (index($r ,",") != -1) { return $error{"add_many_sep"}; }
-   elsif (($l eq "") or ($r eq "")) { return $error{"add_null_bind"}; }
-   else { return 0; }
-}
-##
-#usage:
-#addparsequery($querystring,\@binds)
-#returns $errcode;
-sub addparsequery
-{
-   my $query = shift(@_);
-   my $value_ptr = shift(@_);
-   if ($query eq "")  { return $error{"add_no_bind"}; }
-   else
-   {
-      foreach my $params (split(/&/,$query))
-      {
-         my ($k , $v) = split(/=/,$params,2);
-         $v=uri_unescape($v);
-         if ($k ne "bind") { return $error{"add_oth"}; }
-         elsif ($v eq "") { return $error{"add_null_bind"}; }
-         elsif (my $err=add_comma_analysis($v)) { return $err; }
-         else {  push @$value_ptr,$v;}
-      }#foreach
-      return 0;
-   }
-}
-
-sub reparsequery
-{
-   my $query = shift(@_);
-   my $k;
-   my $v;
-   my $err;
-   if (index($query, "&") == -1)
-   {
-      ($k , $v) = split(/=/,$query,2);
-      $v=uri_unescape($v);
-      if ($k ne "keys") {  return $error{"re_oth"}; }
-      elsif ($v eq "") { return $error{"re_null_keys"}; }
-      elsif ((index($v,",")==0) or (index($v,",,")!=-1) or (substr($v,-1) eq ","))
-      {
-         return $error{"re_null_keys"};
-      }
-      else { $_[0] = $v; return 0; }
-   }
-   else { return $error{"re_many"}; }
-}
-
-sub get_req
-{
-   my $arr_ptr = shift(@_);
-   my $xmluri_found = 0;
-   my $keys_found = 0;
-   foreach my $el (@$arr_ptr)
-   {
-       my ($k , $v) = split(/=/,$el,2);
-       $v=uri_unescape($v);
-       if ($k eq "param") { return $error{"apply_no_dots_param"}; }
-       elsif ($k eq "prop") { return $error{"apply_no_dots_prop"}; }
-       elsif ($k eq "xmluri")
-       {
-          if ($xmluri_found) { return $error{"apply_many_uri"}; }
-          else
-          {
-             if ($v eq "") { return $error{"apply_null_uri"}; }
-             else { $_[0] = $v;  $xmluri_found = 1; }
-          }
-       }
-       elsif ($k eq "keys")
-       {
-           if ($keys_found) { return $error{"apply_many_keys"}; }
-           else
-           {
-              if ($v eq "") { return $error{"apply_null_keys"}; }
-              elsif ((index($v,",")==0) or (index($v,",,")!=-1) or (substr($v,-1) eq ","))
-              {
-                 return $error{"apply_null_keys"};
-              }
-              else { $_[1] = $v; $keys_found = 1; }
-           }
-       }
-       else { return $error{"apply_oth"}; }
-   }#foreach my $el (@$arr_ptr)
-   if ((!$xmluri_found or !$keys_found)) { return $error{"apply_few_pars"}; }
-   else  { return 0; }
-}
-
-sub applyparsequery
-{
-   my $query = shift(@_);
-   my $apply_keys_ptr = shift(@_);
-   my $keyparshoh = shift(@_);
-   my $proph_ptr = shift(@_);
-   my $applykeys;
-   my %prop_h;
-   my %genparam_h;
-   my %keyparam_h;
-   my @nodots;
-
-   if ($query eq "") { return $error{"apply_few_pars"}; }
-   if (index($query, "&") == -1) { return $error{"apply_few_pars"}; }
-   foreach my $param (split(/&/,$query))
-   {
-       my ($k , $v) = split(/=/,$param,2);
-       $v=uri_unescape($v);
-       if (index($k, ".") == -1) { push @nodots,$param; }
-       else
-       {
-            my ($l , $r) = split(/\./,$k,2);
-            if ($l eq "prop")
-            {
-                if (($r eq "") or ($v eq "")) { return $error{"apply_null_prop"}; }
-                elsif (index($r, ".") > -1)  { return $error{"apply_dots_prop"}; }
-                else { $prop_h{$r} = $v; }
-            }
-            elsif ($l eq "param")
-            {
-                if (($r eq "") or ($v eq "")) { return $error{"apply_null_param"}; }
-                elsif (index($r, ".") == -1)   { $genparam_h{$r} = $v; }
-                else
-                {
-                    my ($kk , $va) = split(/\./,$r,2);
-                    if (index($va, ".") > -1) {  return $error{"apply_dots_param"}; }
-                    elsif (($kk eq "") or ($va eq "")) { return $error{"apply_null_param"}; }
-                    else { $keyparam_h{$kk}{$va}=$v; }
-                }
-            }
-            else  { return $error{"apply_oth"}; }
-       }
-   }
-
-   if (my $err = get_req(\@nodots,$_[0],$applykeys)) { return $err; }
-   while (my ($gn, $gv) = each %prop_h)
-   {
-      $proph_ptr->{$gn} = $gv;
-   }
-   foreach my $pkey ( keys %keyparam_h )
-   {
-       my $k_found=0;
-       foreach my $verkey (split (/,/,$applykeys))
-       {
-          if ($pkey eq $verkey) { $k_found = 1; }
-       }
-       if (! $k_found) { return $error{"apply_inv_param"}; }
-   }
-
-   foreach my $applykey (split (/,/,$applykeys))
-   {
-         while (my ($gn, $gv) = each %genparam_h)
-         {
-            $keyparshoh->{$applykey}{$gn} = $gv;
-         }
-         while (my ($kn, $kv) = each %{ $keyparam_h{$applykey} } )
-         {
-           $keyparshoh->{$applykey}{$kn} = $kv;
-         }
-         push  @$apply_keys_ptr, $applykey;
-   }#foreach
-   return 0;
-}
diff --git a/helm/hxsp/splitted/8.strrep.p.pl b/helm/hxsp/splitted/8.strrep.p.pl
deleted file mode 100644 (file)
index 90557fe..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Subrutines to replace values between {} on loaded templates
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-sub ok_print
-{
-   my $message = shift(@_);
-   $message =~ s/(\n)/<br>\1/g;
-   my $retval = $ok_tpl;
-   $retval =~ s/\{MESSAGE\}/$message/g;
-   return $retval;
-}
-
-sub operror_print
-{
-   my $message = shift(@_);
-   $message =~ s/(\n)/<br>\1/g;
-   my $retval = $operror_tpl;
-   $retval =~ s/\{ERROR\}/$message/g;
-   return $retval;
-}
-
-sub synerror_print
-{
-   my $message = shift(@_);
-   my $us = shift(@_);
-   $message =~ s/(\n)/<br>\1/g;
-   my $retval = $synerror_tpl;
-   $retval =~ s/\{ERROR\}/$message/g;
-   $retval =~ s/\{USAGE\}/$us/g;
-   return $retval;
-}
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Subrutines to replace values between {} on loaded messages
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-sub ok_replace
-{
-   my $message = shift(@_);
-   my $key = shift(@_);
-   my $s_uri = shift(@_);
-   $message =~ s/\{KEY\}/$key/g;
-   $message =~ s/\{URI\}/$s_uri/g;
-   return $message;
-}
-
-sub err_replace
-{
-   my $message = shift(@_);
-   my $key = shift(@_);
-   my $s_uri = shift(@_);
-   my $errr = shift(@_);
-   $message =~ s/\{KEY\}/$key/g;
-   $message =~ s/\{URI\}/$s_uri/g;
-   $message =~ s/\{ERROR\}/$errr/g;
-   $message =~ s/\{OLDKEY\}/$errr/g;
-   return $message;
-}
-
-sub parser_error_replace
-{
-    my $no_at = shift(@_);
-    $no_at =~ s/(.*)\sat\s(.*)/\1/g;
-    $no_at =~ s/</&lt;/g;
-    $no_at =~ s/>/&gt;/g;
-    return $no_at;
-}
diff --git a/helm/hxsp/splitted/9.load.p.pl b/helm/hxsp/splitted/9.load.p.pl
deleted file mode 100644 (file)
index 2746b27..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# Subrutines to load config files and templates
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-sub load_messages
-{
-   if ($language eq "IT")
-   {
-       open(MESSAGE, "./msg/message.it") || die "Can't open config file '/msg/message.it' : $!";
-   }
-   else
-   {
-       open(MESSAGE, "./msg/message.en") || die "Can't open config file '/msg/message.en' : $!";
-   }
-   while(my $line = <MESSAGE>) {
-      # ignore comments and full line comments
-      $line =~ s/#.*$//;
-      next unless $line =~ /\S/;
-      $line =~ s/\{URL\}/$puwobo_url/g;
-      $line =~ s/\{VER\}/$ver/g;
-      if ($line =~ /^(home_message)\s*=\s*(.*)$/) {$home_message = $2; }
-      if ($line =~ /^(help_message)\s*=\s*(.*)$/) {$help_message = $2; }
-      if ($line =~ /^(s_add)\s*=\s*(.*)$/) {$s_add = $2; }
-      if ($line =~ /^(s_reload)\s*=\s*(.*)$/) {$s_reload = $2; }
-      if ($line =~ /^(s_remove)\s*=\s*(.*)$/) {$s_remove = $2; }
-      if ($line =~ /^(list)\s*=\s*(.*)$/) {$list = $2; }
-      if ($line =~ /^(empty)\s*=\s*(.*)$/) {$empty = $2; }
-      if ($line =~ /^(all_usage)\s*=\s*(.*)$/) {$all_usage = $2; }
-      if ($all_usage_synerr eq "ON")
-      {
-         $help_usage=$add_usage=$remove_usage=$list_usage=$reload_usage=$apply_usage=$all_usage;
-      }
-      else
-      {
-         if ($line =~ /^(help_usage)\s*=\s*(.*)$/) {$help_usage = $2; }
-         if ($line =~ /^(add_usage)\s*=\s*(.*)$/) {$add_usage = $2; }
-         if ($line =~ /^(remove_usage)\s*=\s*(.*)$/) {$remove_usage = $2; }
-         if ($line =~ /^(list_usage)\s*=\s*(.*)$/) {$list_usage = $2; }
-         if ($line =~ /^(reload_usage)\s*=\s*(.*)$/) {$reload_usage = $2; }
-         if ($line =~ /^(apply_usage)\s*=\s*(.*)$/) {$apply_usage = $2; }
-      }
-   }
-   close MESSAGE;
-}
-
-sub load_conf
-{
-   open(CONFIG, "./config") || die "Can't open config file 'config' : $!";
-   while(my $line = <CONFIG>) {
-       # ignore comments and full line comments
-       $line =~ s/#.*$//;
-       next unless $line =~ /\S/;
-       if ($line =~ /^(working_path)\s*=\s*(.*)$/) {$working_path = $2; }
-       if ($line =~ /^(language)\s*=\s*(.*)$/) {$language = $2; }
-       if ($line =~ /^(port)\s*=\s*(.*)$/) {$port = $2; }
-       if ($line =~ /^(all_usage_synerr)\s*=\s*(.*)$/) {$all_usage_synerr = $2; }
-       if ($line =~ /^(expand_xinc)\s*=\s*(.*)$/) {$expand_xinc = $2; }
-       if ($line =~ /^(max_depth)\s*=\s*(.*)$/) {$max_depth = $2; }
-   }
-   close CONFIG;
-}
-
-sub load_err
-{
-   if ($language eq "IT")
-   {
-      open(ERRO, "./msg/error.it") || die "Can't open config file '/msg/error.it' : $!";
-   }
-   else
-   {
-      open(ERRO, "./msg/error.en") || die "Can't open config file '/msg/error.en' : $!";
-   }
-   while(my $line = <ERRO>)
-   {
-      # ignore comments and full line comments
-      $line =~ s/#.*$//;
-       next unless $line =~ /\S/;
-       if ($line =~ /^(.*?)\s*=\s*(.*)$/) {$error{$1} = $2; }
-   }
-   close ERRO;
-}
-
-sub load_templates
-{
-        # load ok template
-        open(OK_TPL, "./tpl/ok.tpl")
-        || die "Can't open template file '/tpl/ok.tpl' : $!";
-        while(my $line = <OK_TPL>) {$ok_tpl .= $line; }
-        close OK_TPL;
-
-        # load operror template
-        open(OPERROR_TPL, "./tpl/operror.tpl")
-        || die "Can't open template file '/tpl/operror.tpl' : $!";
-        while(my $line = <OPERROR_TPL>) {$operror_tpl .= $line; }
-        close OPERROR_TPL;
-
-        # load synerror template
-        open(SYNERROR_TPL, "./tpl/synerror.tpl")
-        || die "Can't open template file '/tpl/synerror.tpl' : $!";
-        while(my $line = <SYNERROR_TPL>) {$synerror_tpl .= $line; }
-        close SYNERROR_TPL;
-}
-
-#################################################################################################
-#################################################################################################
-#################################################################################################
-# the LibXML callbacks follow
-# these callbacks are used for both the original parse AND the XInclude (if set)
-#################################################################################################
-#################################################################################################
-#################################################################################################
-
-sub match_uri {
-    my $uri = shift;
-    return $uri !~ /:\/\// ? 1 : 0; # we handle only files
-}
-
-sub open_uri {
-    my $uri = shift;
-
-    my $handler = new IO::File;
-    if ( not $handler->open( "<$uri" ) ){
-        $file = 0;
-    }
-
-    return $file;
-}
-
-sub read_uri {
-    my $handler = shift;
-    my $length  = shift;
-    my $buffer = undef;
-    if ( $handler ) {
-        $handler->read( $rv , $length );
-    }
-    return $buffer;
-}
-
-sub close_uri {
-    my $handler = shift;
-    if ( $handler ) {
-        $handler->close();
-    }
-    return 1;
-}
\ No newline at end of file
diff --git a/helm/hxsp/tpl/ok.tpl b/helm/hxsp/tpl/ok.tpl
deleted file mode 100644 (file)
index 633267e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-<body>
-{MESSAGE}
-</body>
-</html>
diff --git a/helm/hxsp/tpl/operror.tpl b/helm/hxsp/tpl/operror.tpl
deleted file mode 100644 (file)
index 4dbe1f5..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-<body>
-{ERROR}
-</body>
-</html>
diff --git a/helm/hxsp/tpl/synerror.tpl b/helm/hxsp/tpl/synerror.tpl
deleted file mode 100644 (file)
index 990df9c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
-<body>
-{ERROR}<br>
-{USAGE}
-</body>
-</html>
diff --git a/helm/interface/.cvsignore b/helm/interface/.cvsignore
deleted file mode 100644 (file)
index 742f6eb..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-*.cmo
-*.cmx
-*.cmi
-
-experiment
-experiment.opt
-fix_params
-fix_params.opt
-mmlinterface
-mmlinterface.opt
-reduction
-reduction.opt
-t1lib.log
-output.ps
-output2.ps
-
-Makefile
-configuration.ml
-helm_wget
-configure
-config.log
-config.cache
-config.status
-
-helm_gtk_interface.spec
-
-gmon.out
diff --git a/helm/interface/.depend b/helm/interface/.depend
deleted file mode 100644 (file)
index 6402ae5..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-experiment.cmo: cicCache.cmi cicPp.cmi configuration.cmo getter.cmi \
-    uriManager.cmi 
-experiment.cmx: cicCache.cmx cicPp.cmx configuration.cmx getter.cmx \
-    uriManager.cmx 
-cicCache.cmo: annotationParser.cmo cic.cmo cicParser.cmi cicSubstitution.cmi \
-    deannotate.cmo getter.cmi uriManager.cmi cicCache.cmi 
-cicCache.cmx: annotationParser.cmx cic.cmx cicParser.cmx cicSubstitution.cmx \
-    deannotate.cmx getter.cmx uriManager.cmx cicCache.cmi 
-cicCache.cmi: cic.cmo uriManager.cmi 
-cicPp.cmo: cic.cmo cicCache.cmi uriManager.cmi cicPp.cmi 
-cicPp.cmx: cic.cmx cicCache.cmx uriManager.cmx cicPp.cmi 
-cicPp.cmi: cic.cmo 
-cicParser.cmo: cicParser2.cmi cicParser3.cmi pxpUriResolver.cmo \
-    uriManager.cmi cicParser.cmi 
-cicParser.cmx: cicParser2.cmx cicParser3.cmx pxpUriResolver.cmx \
-    uriManager.cmx cicParser.cmi 
-cicParser.cmi: cic.cmo uriManager.cmi 
-cicParser2.cmo: cic.cmo cicParser3.cmi uriManager.cmi cicParser2.cmi 
-cicParser2.cmx: cic.cmx cicParser3.cmx uriManager.cmx cicParser2.cmi 
-cicParser2.cmi: cic.cmo cicParser3.cmi 
-cicParser3.cmo: cic.cmo uriManager.cmi cicParser3.cmi 
-cicParser3.cmx: cic.cmx uriManager.cmx cicParser3.cmi 
-cicParser3.cmi: cic.cmo uriManager.cmi 
-cic.cmo: uriManager.cmi 
-cic.cmx: uriManager.cmx 
-getter.cmo: configuration.cmo uriManager.cmi getter.cmi 
-getter.cmx: configuration.cmx uriManager.cmx getter.cmi 
-getter.cmi: uriManager.cmi 
-cicReduction.cmo: cic.cmo cicCache.cmi cicPp.cmi cicSubstitution.cmi \
-    uriManager.cmi cicReduction.cmi 
-cicReduction.cmx: cic.cmx cicCache.cmx cicPp.cmx cicSubstitution.cmx \
-    uriManager.cmx cicReduction.cmi 
-cicReduction.cmi: cic.cmo 
-cicTypeChecker.cmo: cic.cmo cicCache.cmi cicPp.cmi cicReduction.cmi \
-    cicSubstitution.cmi uriManager.cmi cicTypeChecker.cmi 
-cicTypeChecker.cmx: cic.cmx cicCache.cmx cicPp.cmx cicReduction.cmx \
-    cicSubstitution.cmx uriManager.cmx cicTypeChecker.cmi 
-cicTypeChecker.cmi: uriManager.cmi 
-reduction.cmo: cic.cmo cicCache.cmi cicPp.cmi cicReduction.cmi \
-    cicTypeChecker.cmi configuration.cmo getter.cmi uriManager.cmi 
-reduction.cmx: cic.cmx cicCache.cmx cicPp.cmx cicReduction.cmx \
-    cicTypeChecker.cmx configuration.cmx getter.cmx uriManager.cmx 
-theoryParser.cmo: pxpUriResolver.cmo theoryParser2.cmo 
-theoryParser.cmx: pxpUriResolver.cmx theoryParser2.cmx 
-theoryParser2.cmo: theory.cmo 
-theoryParser2.cmx: theory.cmx 
-theoryTypeChecker.cmo: cicCache.cmi cicTypeChecker.cmi theory.cmo \
-    theoryCache.cmo uriManager.cmi 
-theoryTypeChecker.cmx: cicCache.cmx cicTypeChecker.cmx theory.cmx \
-    theoryCache.cmx uriManager.cmx 
-cicCooking.cmo: cic.cmo cicCache.cmi uriManager.cmi cicCooking.cmi 
-cicCooking.cmx: cic.cmx cicCache.cmx uriManager.cmx cicCooking.cmi 
-cicCooking.cmi: cic.cmo uriManager.cmi 
-cicFindParameters.cmo: cic.cmo cic2Xml.cmo cicCache.cmi configuration.cmo \
-    uriManager.cmi xml.cmi 
-cicFindParameters.cmx: cic.cmx cic2Xml.cmx cicCache.cmx configuration.cmx \
-    uriManager.cmx xml.cmx 
-theoryCache.cmo: getter.cmi theoryParser.cmo 
-theoryCache.cmx: getter.cmx theoryParser.cmx 
-fix_params.cmo: cicFindParameters.cmo configuration.cmo deannotate.cmo \
-    getter.cmi uriManager.cmi 
-fix_params.cmx: cicFindParameters.cmx configuration.cmx deannotate.cmx \
-    getter.cmx uriManager.cmx 
-cic2Xml.cmo: cic.cmo uriManager.cmi xml.cmi 
-cic2Xml.cmx: cic.cmx uriManager.cmx xml.cmx 
-xml.cmo: xml.cmi 
-xml.cmx: xml.cmi 
-uriManager.cmo: uriManager.cmi 
-uriManager.cmx: uriManager.cmi 
-cicSubstitution.cmo: cic.cmo cicSubstitution.cmi 
-cicSubstitution.cmx: cic.cmx cicSubstitution.cmi 
-cicSubstitution.cmi: cic.cmo uriManager.cmi 
-mmlinterface.cmo: annotation2Xml.cmo cicAnnotationHinter.cmo cicCache.cmi \
-    cicTypeChecker.cmi cicXPath.cmo configuration.cmo getter.cmi \
-    theoryTypeChecker.cmo uriManager.cmi xml.cmi xsltProcessor.cmo 
-mmlinterface.cmx: annotation2Xml.cmx cicAnnotationHinter.cmx cicCache.cmx \
-    cicTypeChecker.cmx cicXPath.cmx configuration.cmx getter.cmx \
-    theoryTypeChecker.cmx uriManager.cmx xml.cmx xsltProcessor.cmx 
-xsltProcessor.cmo: configuration.cmo uriManager.cmi 
-xsltProcessor.cmx: configuration.cmx uriManager.cmx 
-deannotate.cmo: cic.cmo 
-deannotate.cmx: cic.cmx 
-cicXPath.cmo: cic.cmo 
-cicXPath.cmx: cic.cmx 
-pxpUriResolver.cmo: configuration.cmo 
-pxpUriResolver.cmx: configuration.cmx 
-annotationParser.cmo: annotationParser2.cmo pxpUriResolver.cmo 
-annotationParser.cmx: annotationParser2.cmx pxpUriResolver.cmx 
-annotationParser2.cmo: cic.cmo 
-annotationParser2.cmx: cic.cmx 
-annotation2Xml.cmo: cic.cmo uriManager.cmi xml.cmi 
-annotation2Xml.cmx: cic.cmx uriManager.cmx xml.cmx 
-cicAnnotationHinter.cmo: cic.cmo 
-cicAnnotationHinter.cmx: cic.cmx 
diff --git a/helm/interface/AUTHORS b/helm/interface/AUTHORS
deleted file mode 100644 (file)
index 153b3df..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Andrea Asperti <asperti@cs.unibo.it>
-Luca Padovani <lpadovan@cs.unibo.it>
-Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
diff --git a/helm/interface/COPYING b/helm/interface/COPYING
deleted file mode 100644 (file)
index d60c31a..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   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.
-\f
-                   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.)
-\f
-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.
-\f
-  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.
-\f
-  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
-\f
-           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
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <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 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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/helm/interface/ChangeLog b/helm/interface/ChangeLog
deleted file mode 100644 (file)
index 20c36b4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-28/12/2000: First alpha release
diff --git a/helm/interface/Makefile.in b/helm/interface/Makefile.in
deleted file mode 100644 (file)
index 1fe1570..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-OCAML_ROOT = @OCAML_ROOT@
-BIN_DIR = @BIN_DIR@
-LABLGTK_DIR = @LABLGTK_LIB_DIR@
-LABLGTKMATHVIEW_DIR = @LABLGTKMATHVIEW_LIB_DIR@
-MINIDOM_DIR = @MLMINIDOM_LIB_DIR@
-
-PXP_DIR = $(OCAML_ROOT)/site-lib/pxp
-NETSTRING_DIR = $(OCAML_ROOT)/site-lib/netstring
-XSTR_DIR = $(OCAML_ROOT)/site-lib/xstr
-NETCLIENT_DIR = $(OCAML_ROOT)/site-lib/netclient
-
-#OCAMLC = ocamlc -I $(LABLGTK_DIR) -I $(LABLGTKMATHVIEW_DIR) -I $(PXP_DIR) -I $(NETSTRING_DIR) -I $(MINIDOM_DIR) -I mlmathview
-#OCAMLOPT = ocamlopt -I $(LABLGTK_DIR) -I $(LABLGTKMATHVIEW_DIR) -I mlgtk_devel -I $(PXP_DIR) -I $(NETSTRING_DIR) -I $(MINIDOM_DIR) -I mlmathview
-OCAMLC = ocamlc -I $(LABLGTK_DIR) -I $(LABLGTKMATHVIEW_DIR) -I $(PXP_DIR) -I $(NETSTRING_DIR) -I $(MINIDOM_DIR) -I $(XSTR_DIR) -I $(NETCLIENT_DIR)
-OCAMLOPT = ocamlopt -I $(LABLGTK_DIR) -I $(LABLGTKMATHVIEW_DIR) -I $(PXP_DIR) -I $(NETSTRING_DIR) -I $(MINIDOM_DIR) -I $(XSTR_DIR) -I $(NETCLIENT_DIR)
-OCAMLDEP = ocamldep
-
-all: experiment reduction fix_params mmlinterface
-opt: experiment.opt reduction.opt fix_params.opt mmlinterface.opt
-
-PXPLIBS = netstring.cma netmappings_iso.cmo netmappings_other.cmo \
-          pxp_types.cma \
-          pxp_lex_iso88591.cma pxp_lex_utf8.cma pxp_engine.cma \
-          pxp_utf8.cmo
-
-PXPLIBSOPT = netstring.cmxa netmappings_iso.cmx netmappings_other.cmx \
-             pxp_types.cmxa \
-             pxp_lex_iso88591.cmxa pxp_lex_utf8.cmxa pxp_engine.cmxa \
-             pxp_utf8.cmx
-
-XSTRLIBS = xstr.cma
-
-XSTRLIBSOPT = xstr.cmxa
-
-NETCLIENTLIBS = netclient.cma
-
-NETCLIENTLIBSOPT = netclient.cmxa
-
-DEPOBJS = experiment.ml cicCache.ml cicCache.mli cicPp.ml cicPp.mli \
-          cicParser.ml cicParser.mli cicParser2.ml cicParser2.mli \
-          cicParser3.ml cicParser3.mli cic.ml clientHTTP.ml getter.ml getter.mli \
-          gtkInterface.ml cicReduction.ml cicReduction.mli cicTypeChecker.ml \
-          cicTypeChecker.mli reduction.ml tgtkInterface.ml theory.ml \
-          theoryParser.ml theoryParser2.ml theoryPp.ml theoryTypeChecker.ml \
-          cicCooking.ml cicCooking.mli cicFindParameters.ml theoryCache.ml \
-          fix_params.ml cic2Xml.ml xml.ml uriManager.ml uriManager.mli \
-          cicSubstitution.ml cicSubstitution.mli \
-          mmlinterface.ml configuration.ml styleConfiguration.ml \
-          xsltProcessorHTTP.ml xsltProcessor.ml deannotate.ml cicXPath.ml pxpUriResolver.ml \
-          annotationParser.ml annotationParser2.ml annotation2Xml.ml \
-          cicAnnotationHinter.ml
-
-MMLINTERFACEOBJS = configuration.cmo uriManager.cmo clientHTTP.cmo getter.cmo cic.cmo \
-                   pxpUriResolver.cmo styleConfiguration.cmo \
-                   cicParser3.cmo cicParser2.cmo cicParser.cmo deannotate.cmo \
-                   cicSubstitution.cmo annotationParser2.cmo \
-                   annotationParser.cmo cicCache.cmo cicCooking.cmo cicPp.cmo \
-                   cicReduction.cmo cicTypeChecker.cmo \
-                   xml.cmo \
-                   xsltProcessorHTTP.cmo xsltProcessor.cmo cic2Xml.cmo annotation2Xml.cmo \
-                   cicXPath.cmo theory.cmo theoryParser2.cmo theoryParser.cmo \
-                   theoryCache.cmo theoryTypeChecker.cmo \
-                   cicAnnotationHinter.cmo mmlinterface.cmo
-
-MMLINTERFACEOPTOBJS = configuration.cmx uriManager.cmx clientHTTP.cmx getter.cmx cic.cmx \
-                      pxpUriResolver.cmx styleConfiguration.cmx \
-                      cicParser3.cmx cicParser2.cmx cicParser.cmx \
-                      deannotate.cmx cicSubstitution.cmx annotationParser2.cmx \
-                      annotationParser.cmx cicCache.cmx \
-                      cicCooking.cmx cicPp.cmx cicReduction.cmx \
-                      cicTypeChecker.cmx \
-                      xml.cmx xsltProcessorHTTP.cmx xsltProcessor.cmx \
-                      cic2Xml.cmx annotation2Xml.cmx cicXPath.cmx \
-                      theory.cmx theoryParser2.cmx theoryParser.cmx \
-                      theoryCache.cmx theoryTypeChecker.cmx \
-                      cicAnnotationHinter.cmx mmlinterface.cmx
-
-FIX_PARAMSOBJS = configuration.cmo uriManager.cmo clientHTTP.cmo getter.cmo cic.cmo \
-                 pxpUriResolver.cmo styleConfiguration.cmo \
-                 cicParser3.cmo cicParser2.cmo cicParser.cmo deannotate.cmo \
-                 cicSubstitution.cmo annotationParser2.cmo \
-                 annotationParser.cmo  cicCache.cmo cicPp.cmo xml.cmo \
-                 cic2Xml.cmo cicFindParameters.cmo fix_params.cmo
-
-FIX_PARAMSOPTOBJS = configuration.cmx uriManager.cmx clientHTTP.cmx getter.cmx cic.cmx \
-                    pxpUriResolver.cmx styleConfiguration.cmx \
-                    cicParser3.cmx cicParser2.cmx cicParser.cmx deannotate.cmx \
-                    cicSubstitution.cmx annotationParser2.cmx \
-                    annotationParser.cmx cicCache.cmx cicPp.cmx xml.cmx \
-                    cic2Xml.cmx cicFindParameters.cmx fix_params.cmx
-
-REDUCTIONOBJS = configuration.cmo uriManager.cmo clientHTTP.cmo getter.cmo cic.cmo \
-                pxpUriResolver.cmo styleConfiguration.cmo \
-                cicParser3.cmo cicParser2.cmo cicParser.cmo deannotate.cmo \
-                cicSubstitution.cmo annotationParser2.cmo annotationParser.cmo \
-                cicCache.cmo cicPp.cmo cicCooking.cmo \
-                cicReduction.cmo cicTypeChecker.cmo reduction.cmo
-
-REDUCTIONOPTOBJS = configuration.cmx uriManager.cmx clientHTTP.cmx getter.cmx cic.cmx \
-                   pxpUriResolver.cmx styleConfiguration.cmx \
-                   cicParser3.cmx cicParser2.cmx cicParser.cmx deannotate.cmx \
-                   cicSubstitution.cmx annotationParser2.cmx \
-                   annotationParser.cmx cicCache.cmx cicPp.cmx cicCooking.cmx \
-                   cicReduction.cmx cicTypeChecker.cmx reduction.cmx
-
-EXPERIMENTOBJS = configuration.cmo uriManager.cmo clientHTTP.cmo getter.cmo cic.cmo \
-                 pxpUriResolver.cmo styleConfiguration.cmo \
-                 cicParser3.cmo cicParser2.cmo cicParser.cmo deannotate.cmo \
-                 cicSubstitution.cmo annotationParser2.cmo \
-                 annotationParser.cmo cicCache.cmo cicPp.cmo experiment.cmo
-
-EXPERIMENTOPTOBJS = configuration.cmx uriManager.cmx clientHTTP.cmx getter.cmx cic.cmx \
-                    pxpUriResolver.cmx styleConfiguration.cmx \
-                    cicParser3.cmx cicParser2.cmx cicParser.cmx deannotate.cmx \
-                    cicSubstitution.cmx annotationParser2.cmx \
-                    annotationParser.cmx cicCache.cmx cicPp.cmx experiment.cmx
-
-depend:
-       $(OCAMLDEP) $(DEPOBJS) > .depend
-
-mmlinterface: $(MMLINTERFACEOBJS)
-       $(OCAMLC) -custom -o mmlinterface str.cma unix.cma $(PXPLIBS) $(XSTRLIBS) $(NETCLIENTLIBS) dbm.cma \
-                  lablgtk.cma gtkInit.cmo \
-                  $(MINIDOM_DIR)/minidom.cmo \
-                  $(MINIDOM_DIR)/ominidom.cmo \
-                  $(LABLGTKMATHVIEW_DIR)/lablgtkmathview.cma \
-                  $(MMLINTERFACEOBJS) \
-                  -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-                  -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
-                  -lunix `gtkmathview-config --libs` \
-                  $(LABLGTKMATHVIEW_DIR)/ml_gtk_mathview.o \
-                  $(MINIDOM_DIR)/ml_minidom.o" \
-                  -cclib -lmldbm -cclib -lndbm
-
-mmlinterface.opt: $(MMLINTERFACEOPTOBJS)
-       $(OCAMLOPT) -o mmlinterface.opt str.cmxa unix.cmxa $(PXPLIBSOPT) $(XSTRLIBSOPT) $(NETCLIENTLIBSOPT) unix.cmxa \
-                    dbm.cmxa lablgtk.cmxa gtkInit.cmx \
-                    $(MINIDOM_DIR)/minidom.cmx \
-                    $(MINIDOM_DIR)/ominidom.cmx \
-                    $(LABLGTKMATHVIEW_DIR)/lablgtkmathview.cmxa \
-                    $(MMLINTERFACEOPTOBJS) \
-                    -cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-                    -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
-                    -lunix `gtkmathview-config --libs` \
-                    $(LABLGTKMATHVIEW_DIR)/ml_gtk_mathview.o \
-                    $(MINIDOM_DIR)/ml_minidom.o" \
-                    -cclib -lmldbm -cclib -lndbm
-
-fix_params: $(FIX_PARAMSOBJS)
-       $(OCAMLC) -custom -o fix_params str.cma unix.cma $(PXPLIBS) $(XSTRLIBS) $(NETCLIENTLIBS) dbm.cma \
-                  $(FIX_PARAMSOBJS) -cclib -lstr -cclib -lmldbm -cclib -lndbm
-
-fix_params.opt: $(FIX_PARAMSOPTOBJS)
-       $(OCAMLOPT) -o fix_params.opt str.cmxa unix.cmxa $(PXPLIBSOPT) $(XSTRLIBSOPT) $(NETCLIENTLIBSOPT) dbm.cmxa \
-                    $(FIX_PARAMSOPTOBJS) -cclib -lstr -cclib -lmldbm \
-                    -cclib -lndbm
-
-reduction: $(REDUCTIONOBJS)
-       $(OCAMLC) -custom -o reduction str.cma unix.cma $(PXPLIBS) $(XSTRLIBS) $(NETCLIENTLIBS) dbm.cma \
-                  $(REDUCTIONOBJS) -cclib -lstr -cclib -lmldbm -cclib -lndbm
-
-reduction.opt: $(REDUCTIONOPTOBJS)
-       $(OCAMLOPT) -o reduction.opt str.cmxa unix.cmxa $(PXPLIBSOPT) $(XSTRLIBSOPT) $(NETCLIENTLIBSOPT) dbm.cmxa \
-                    $(REDUCTIONOPTOBJS) -cclib -lstr -cclib -lmldbm \
-                    -cclib -lndbm
-
-experiment: $(EXPERIMENTOBJS)
-       $(OCAMLC) -custom -o experiment str.cma unix.cma $(PXPLIBS) $(XSTRLIBS) $(NETCLIENTLIBS) dbm.cma \
-                  $(EXPERIMENTOBJS) -cclib -lstr -cclib -lmldbm -cclib -lndbm
-
-experiment.opt: $(EXPERIMENTOPTOBJS)
-       $(OCAMLOPT) -o experiment.opt str.cmxa unix.cmxa $(PXPLIBSOPT) $(XSTRLIBSOPT) $(NETCLIENTLIBSOPT) dbm.cmxa \
-                    $(EXPERIMENTOPTOBJS) -cclib -lstr -cclib -lmldbm \
-                    -cclib -lndbm
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo:
-       $(OCAMLC) -c $<
-.mli.cmi:
-       $(OCAMLC) -c $<
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o experiment experiment.opt reduction \
-           reduction.opt fix_params fix_params.opt mmlinterface \
-           mmlinterface.opt mmlinterface2 mmlinterface2.opt
-
-install:
-       cp mmlinterface mmlinterface.opt helm_wget $(BIN_DIR)
-
-distclean: clean
-       rm -f Makefile configuration.ml helm_wget configure config.log \
-         config.cache config.status
-
-dist:   clean
-       rm -rf ../@PACKAGE@-@VERSION@
-       mkdir ../@PACKAGE@-@VERSION@
-       cp -r * .depend ../@PACKAGE@-@VERSION@
-       (cd .. ; tar cvfz @PACKAGE@-@VERSION@.tar.gz @PACKAGE@-@VERSION@ ; rm -rf @PACKAGE@-@VERSION@)
-
-.PHONY: install distclean clean
-
-include .depend
diff --git a/helm/interface/NEWS b/helm/interface/NEWS
deleted file mode 100644 (file)
index 20c36b4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-28/12/2000: First alpha release
diff --git a/helm/interface/README b/helm/interface/README
deleted file mode 100644 (file)
index 63d2c2a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-NOTE: This is the first alpha release of project HELM.
-
-HELM (Hypertextual Electronic Library of Mathematics) is a project aimed
-at the creation of tools for the development and exploitation of a huge
-distributed library of formal mathematical knowledge. This package holds
-a gtk interface to the library.
-
-For more information see http://www.cs.unibo.it/helm
diff --git a/helm/interface/TEMPI b/helm/interface/TEMPI
deleted file mode 100644 (file)
index dc2bc85..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-prima di UriManager.ml:
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m50.266s
-   user        0m44.160s
-   sys 0m0.700s
-
-dopo UriManager.ml, ma prima di passare da = a ==:
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m51.388s
-   user        0m45.430s
-   sys 0m0.530s
-
-dopo UriManager.ml e popo il passaggio (parziale?) da = a ==:
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m50.767s
-   user        0m44.750s
-   sys 0m0.510s
-
-dopo il passaggio alla cache che usa ancora =:
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m50.646s
-   user        0m44.680s
-   sys 0m0.530s
-
-dopo il passaggio alla cache con utilizzo di ==:
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m50.861s
-   user        0m45.030s
-   sys 0m0.500s
-
-con funzione di hashing costante ;-(
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m51.442s
-   user        0m45.440s
-   sys 0m0.530s
-
-con implementazione isomorfa all'albero delle uri:
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m54.081s
-   user        0m47.590s
-   sys 0m0.780s
-
-con implementazione con doppio RB-albero:
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m52.504s
-   user        0m46.120s
-   sys 0m0.720s
-
-con implementazione semplice, gestite anche le uri delle var:
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m51.850s
-   user        0m46.060s
-   sys 0m0.530s
-
-con implementazione con doppio RB-albero, gestite anche le uri delle var:
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m51.495s
-   user        0m45.660s
-   sys 0m0.540s
-
-=========================================================
-
-con implementazione con doppio RB-albero, gestite anche le uri delle var
-e spostata nell'uri-manager is_prefix:
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m50.465s
-   user        0m45.710s
-   sys 0m0.590s
-
-con implementazione semplice (e tutto il resto):
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m49.710s
-   user        0m43.850s
-   sys 0m0.500s
-
-con implementazione banale (e tutto il resto):
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m49.289s
-   user        0m44.840s
-   sys 0m0.570s
-
-con implementazione banale SOLO PARSING ;-)
-
- [ABCI]* (terza passata, uguale alla seconda):
-
-   real        0m48.395s
-   user        0m42.830s
-   sys 0m0.850s
-
-=========================================================
-
-con implementazione con doppio RB-albero, gestite anche le uri delle var
-e spostata nell'uri-manager is_prefix:
-
- REAL (prima passata, dopo un sync):
-
-   real        10m58.033s
-   user        10m37.690s
-   sys 0m2.570s
-
-con implementazione semplice (e tutto il resto):
-
- REAL (prima passata, dopo un sync):
-
-   real        10m31.035s
-   user        10m9.350s
-   sys 0m3.230s
-
-con implementazione banale (e tutto il resto):
-
- REAL (prima passata, dopo un sync):
-
-   real        11m4.026s
-   user        10m43.930s
-   sys 0m3.070s
-
-=================================================
-
-con implementazione banale, SOLO PARSING di tutto:
-
-   real        6m54.336s
-   user        6m13.850s
-   sys 0m6.580s
-
-con implementazione banale, anche typechecking di tutto:
-
-   real        20m17.739s
-   user        19m14.740s
-   sys 0m8.550s
-
-con implementazione semplice, anche typechecking di tutto:
-
-   real        19m36.079s
-   user        18m36.480s
-   sys 0m7.760s
-
-con implementazione con doppio RB-albero, anche typechecking di tutto:
-
-   real        17m30.423s
-   user        16m30.840s
-   sys 0m6.170s
-
-***************************************************************************
-                         APPLICATA EURISTICA
-***************************************************************************
-
-con implementazione con doppio RB-albero, anche typechecking di tutto
-(universita') ????????:
-
-real    5m37.805s
-user    5m1.640s
-sys     0m5.010s
-
-tutto (ma a casa):
-
-real   7m36.663s
-user   6m52.220s
-sys    0m5.860s
-
-
-solo REAL:
-
-real   2m52.860s
-user   2m41.050s
-sys    0m2.820s
-
-==========================================================================
-
-tutto (ma a casa) dopo eliminazione buri:
-
-real   7m52.773s
-user   6m52.110s
-sys    0m7.130s
-
-"solo parsing" di tutto dopo eliminazione buri:
-
-real   7m8.379s
-user   6m15.250s
-sys    0m6.700s
-
-===========================================================================
-
-TUTTO ALL'UNIVERSITA' CON EURISTICA MA SENZA UNIVERSI:
-
-real    5m47.920s
-user    5m14.600s
-sys     0m5.010s
-
diff --git a/helm/interface/WGET b/helm/interface/WGET
deleted file mode 100644 (file)
index f1cca6c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
--P directory di destinazione
--q no output (quiet mode)
--c continue retrieving (no uri.1, uri.2, ...)
diff --git a/helm/interface/annotation2Xml.ml b/helm/interface/annotation2Xml.ml
deleted file mode 100644 (file)
index b75f2bc..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*CSC codice cut & paste da cicPp e xmlcommand *)
-
-exception ImpossiblePossible;;
-exception NotImplemented;;
-exception BinderNotSpecified;;
-
-let dtdname = "http://localhost:8081/getdtd?url=annotations.dtd";;
-
-(*CSC ottimizzazione: al posto di curi cdepth (vedi codice) *)
-let print_term =
- let rec aux =
-  let module C = Cic in
-  let module X = Xml in
-  let module U = UriManager in
-    function
-       C.ARel (id,ann,_,_) ->
-        (match !ann with
-            None -> [<>]
-          | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-        )
-     | C.AVar (id,ann,_) ->
-        (match !ann with
-            None -> [<>]
-          | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-        )
-     | C.AMeta (id,ann,_) ->
-        (match !ann with
-            None -> [<>]
-          | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-        )
-     | C.ASort (id,ann,_) ->
-        (match !ann with
-            None -> [<>]
-          | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-        )
-     | C.AImplicit _ -> raise NotImplemented
-     | C.AProd (id,ann,_,s,t) ->
-        [< (match !ann with
-               None -> [<>]
-             | Some ann ->
-                (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-           ) ;
-           aux s ;
-           aux t
-        >]
-     | C.ACast (id,ann,v,t) ->
-        [< (match !ann with
-               None -> [<>]
-             | Some ann ->
-                (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-           ) ;
-           aux v ;
-           aux t
-        >]
-     | C.ALambda (id,ann,_,s,t) ->
-        [< (match !ann with
-               None -> [<>]
-             | Some ann ->
-                (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-           ) ;
-           aux s ;
-           aux t
-        >]
-     | C.ALetIn (id,ann,_,s,t) ->
-        [< (match !ann with
-               None -> [<>]
-             | Some ann ->
-                (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-           ) ;
-           aux s ;
-           aux t
-        >]
-     | C.AAppl (id,ann,li) ->
-        [< (match !ann with
-               None -> [<>]
-             | Some ann ->
-                (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-           ) ;
-           List.fold_right (fun x i -> [< (aux x) ; i >]) li [<>]
-        >]
-     | C.AConst (id,ann,_,_) ->
-        (match !ann with
-            None -> [<>]
-          | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-        )
-     | C.AAbst (id,ann,_) -> raise NotImplemented
-     | C.AMutInd (id,ann,_,_,_) ->
-        (match !ann with
-            None -> [<>]
-          | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-        )
-     | C.AMutConstruct (id,ann,_,_,_,_) ->
-        (match !ann with
-            None -> [<>]
-          | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-        )
-     | C.AMutCase (id,ann,_,_,_,ty,te,patterns) ->
-        [< (match !ann with
-               None -> [<>]
-             | Some ann ->
-                (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-           ) ;
-           aux ty ;
-           aux te ;
-           List.fold_right
-            (fun x i -> [< aux x ; i>])
-            patterns [<>]
-        >]
-     | C.AFix (id, ann, _, funs) ->
-        [< (match !ann with
-               None -> [<>]
-             | Some ann ->
-                (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-           ) ;
-           List.fold_right
-            (fun (_,_,ti,bi) i -> [< aux ti ; aux bi ; i >]) funs [<>]
-        >]
-     | C.ACoFix (id, ann,no,funs) ->
-        [< (match !ann with
-               None -> [<>]
-             | Some ann ->
-                (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-           ) ;
-           List.fold_right
-            (fun (_,ti,bi) i -> [< aux ti ; aux bi ; i >]) funs [<>]
-        >]
- in
-  aux
-;;
-
-let print_mutual_inductive_type (_,_,arity,constructors) =
- [< print_term arity ;
-    List.fold_right
-     (fun (name,ty,_) i -> [< print_term ty ; i >]) constructors [<>]
- >]
-;;
-
-let target_uri_of_annotation_uri uri =
- Str.replace_first (Str.regexp "\.ann$") "" (UriManager.string_of_uri uri)
-;;
-
-let pp_annotation obj curi =
- let module C = Cic in
- let module X = Xml in
-  [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-     X.xml_cdata ("<!DOCTYPE Annotations SYSTEM \"" ^ dtdname ^ "\">\n\n") ;
-     X.xml_nempty "Annotations" ["of", target_uri_of_annotation_uri curi]
-      begin
-       match obj with
-         C.ADefinition (xid, ann, _, te, ty, _) ->
-          [< (match !ann with
-                 None -> [<>]
-               | Some ann ->
-                  X.xml_nempty "Annotation" ["of", xid] (X.xml_cdata ann)
-             ) ;
-             print_term te ;
-             print_term ty
-          >]
-       | C.AAxiom (xid, ann, _, ty, _) ->
-          [< (match !ann with
-                 None -> [<>]
-               | Some ann ->
-                  X.xml_nempty "Annotation" ["of", xid] (X.xml_cdata ann)
-             ) ;
-             print_term ty
-          >]
-       | C.AVariable (xid, ann, _, bo, ty) ->
-          [< (match !ann with
-                 None -> [<>]
-               | Some ann ->
-                  X.xml_nempty "Annotation" ["of", xid] (X.xml_cdata ann)
-             ) ;
-             (match bo with
-                 None -> [<>]
-               | Some bo -> print_term bo
-             ) ;
-             print_term ty
-          >]
-       | C.ACurrentProof (xid, ann, _, conjs, bo, ty) ->
-          [< (match !ann with
-                 None -> [<>]
-               | Some ann ->
-                  X.xml_nempty "Annotation" ["of", xid] (X.xml_cdata ann)
-             ) ;
-             List.fold_right
-              (fun (_,t) i -> [< print_term t ; i >])
-              conjs [<>] ;
-             print_term bo ;
-             print_term ty
-          >]
-       | C.AInductiveDefinition (xid, ann, tys, params, paramsno) ->
-          [< (match !ann with
-                 None -> [<>]
-               | Some ann ->
-                  X.xml_nempty "Annotation" ["of", xid] (X.xml_cdata ann)
-             ) ;
-             List.fold_right
-              (fun x i -> [< print_mutual_inductive_type x ; i >])
-              tys [< >]
-          >]
-      end
-  >]
-;;
diff --git a/helm/interface/annotationParser.ml b/helm/interface/annotationParser.ml
deleted file mode 100644 (file)
index ffd76c9..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception Warnings;;
-
-class warner =
-  object 
-    method warn w =
-      print_endline ("WARNING: " ^ w) ;
-      (raise Warnings : unit)
-  end
-;;
-
-exception EmptyUri;;
-
-let annotate filename ids_to_targets =
- let module Y = Pxp_yacc in
-  try 
-    let d =
-     let config = {Y.default_config with Y.warner = new warner} in
-      Y.parse_document_entity config
-(*PXP       (Y.ExtID (Pxp_types.System filename,
-         new Pxp_reader.resolve_as_file ~url_of_id ()))
-*)     (PxpUriResolver.from_file filename)
-       Y.default_spec
-
-    in
-     AnnotationParser2.annotate ids_to_targets d#root
-  with
-   e ->
-     print_endline (Pxp_types.string_of_exn e) ;
-     raise e
-;;
diff --git a/helm/interface/annotationParser2.ml b/helm/interface/annotationParser2.ml
deleted file mode 100644 (file)
index 58edc4c..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception IllFormedXml of int;;
-
-(* Utility functions that transform a Pxp attribute into something useful *)
-
-let string_of_attr a =
- let module T = Pxp_types in
-  match a with
-     T.Value s -> s
-   | _ -> raise (IllFormedXml 0)
-;;
-
-exception DontKnowWhatToDo;;
-
-let rec string_of_annotations n =
- let module D = Pxp_document in
- let module T = Pxp_types in
-  match n#node_type with
-     D.T_element s ->
-      "<" ^ s ^
-      List.fold_right
-       (fun att i ->
-         match n#attribute att with
-            T.Value s -> " " ^ att ^ "=\"" ^ s ^ "\"" ^ i
-          | T.Implied_value -> i
-          | T.Valuelist l -> " " ^ att ^ "=\"" ^ String.concat " " l ^ "\"" ^ i
-       ) (n#attribute_names) "" ^
-      (match n#sub_nodes with
-          [] -> "/>"
-        | l ->
-           ">" ^
-           String.concat "" (List.map string_of_annotations l) ^
-           "</" ^ s ^ ">"
-      )
-   | D.T_data -> n#data
-   | _ -> raise DontKnowWhatToDo
-;;
-
-let get_annotation n =
- String.concat "" (List.map string_of_annotations (n#sub_nodes))
-;;
-
-let annotate_object ann obj =
- let module C = Cic in
-  let rann =
-   match obj with
-      C.ADefinition (_, rann, _, _, _, _) -> rann
-    | C.AAxiom (_, rann, _, _, _) -> rann
-    | C.AVariable (_, rann, _, _, _) -> rann
-    | C.ACurrentProof (_, rann, _, _, _, _) -> rann
-    | C.AInductiveDefinition (_, rann, _, _, _) -> rann
-  in
-   rann := Some ann
-;;
-
-let annotate_term ann term =
- let module C = Cic in
-  let rann =
-   match term with
-      C.ARel (_, rann, _, _) -> rann
-    | C.AVar (_, rann, _) -> rann
-    | C.AMeta (_, rann, _) -> rann
-    | C.ASort (_, rann, _) -> rann
-    | C.AImplicit (_, rann) -> rann
-    | C.ACast (_, rann, _, _) -> rann
-    | C.AProd (_, rann, _, _, _) -> rann
-    | C.ALambda (_, rann, _, _, _) -> rann
-    | C.ALetIn (_, rann, _, _, _) -> rann
-    | C.AAppl (_, rann, _) -> rann
-    | C.AConst (_, rann, _, _) -> rann
-    | C.AAbst (_, rann, _) -> rann
-    | C.AMutInd (_, rann, _, _, _) -> rann
-    | C.AMutConstruct (_, rann, _, _, _, _) -> rann
-    | C.AMutCase (_, rann, _, _, _, _, _, _) -> rann
-    | C.AFix (_, rann, _, _) -> rann
-    | C.ACoFix (_, rann, _, _) -> rann
-  in
-   rann := Some ann
-;;
-
-let annotate ids_to_targets n =
- let module D = Pxp_document in
- let module C = Cic in
-  let annotate_elem n =
-   let ntype = n # node_type in
-   match ntype with
-     D.T_element "Annotation" ->
-       let of_uri = string_of_attr (n # attribute "of") in
-        begin
-         try
-          match Hashtbl.find ids_to_targets of_uri with
-             C.Object o -> annotate_object (get_annotation n) o
-           | C.Term t -> annotate_term (get_annotation n) t
-         with
-          Not_found -> assert false
-        end
-   | D.T_element _ | D.T_data ->
-      raise (IllFormedXml 1)
-   | _ -> raise DontKnowWhatToDo
-  in
-   match n # node_type with
-      D.T_element "Annotations" ->
-       List.iter annotate_elem (n # sub_nodes)
-    | _ -> raise (IllFormedXml 2)
-;;
diff --git a/helm/interface/cic.ml b/helm/interface/cic.ml
deleted file mode 100644 (file)
index 8c08b00..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 14/06/2000                                 *)
-(*                                                                            *)
-(* This module defines the internal representation of the objects (variables, *)
-(* blocks of (co)inductive definitions and constants) and the terms of cic    *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* STUFF TO MANAGE IDENTIFIERS *)
-type id = string  (* the abstract type of the (annotated) node identifiers *)
-type anntarget =
-   Object of annobj
- | Term of annterm
-
-(* INTERNAL REPRESENTATION OF CIC OBJECTS AND TERMS *)
-and sort =
-   Prop
- | Set
- | Type
-and name =
-   Name of string
- | Anonimous
-and term =
-   Rel of int                                       (* DeBrujin index *)
- | Var of UriManager.uri                            (* uri *)
- | Meta of int                                      (* numeric id *)
- | Sort of sort                                     (* sort *)
- | Implicit                                         (* *)
- | Cast of term * term                              (* value, type *)
- | Prod of name * term * term                       (* binder, source, target *)
- | Lambda of name * term * term                     (* binder, source, target *)
- | LetIn of name * term * term                      (* binder, term, target *)
- | Appl of term list                                (* arguments *)
- | Const of UriManager.uri * int                    (* uri, number of cookings*)
- | Abst of UriManager.uri                           (* uri *)
- | MutInd of UriManager.uri * int * int             (* uri, cookingsno, typeno*)
- | MutConstruct of UriManager.uri * int *           (* uri, cookingsno, *)
-    int * int                                       (*  typeno, consno  *)
- (*CSC: serve cookingsno?*)
- | MutCase of UriManager.uri * int *                (* ind. uri, cookingsno, *)
-    int *                                           (*  ind. typeno,         *)
-    term * term *                                   (*  outtype, ind. term   *)
-    term list                                       (*  patterns             *)
- | Fix of int * inductiveFun list                   (* funno, functions *)
- | CoFix of int * coInductiveFun list               (* funno, functions *)
-and obj =
-   Definition of string * term * term *           (* id, value, type,         *)
-    (int * UriManager.uri list) list              (*  parameters              *)
- | Axiom of string * term *
-    (int * UriManager.uri list) list              (* id, type, parameters     *)
- | Variable of string * term option * term        (* name, body, type         *)
- | CurrentProof of string * (int * term) list *   (* name, conjectures,       *)
-    term * term                                   (*  value, type             *)
- | InductiveDefinition of inductiveType list *    (* inductive types,         *)
-    (int * UriManager.uri list) list * int        (*  parameters, n ind. pars *)
-and inductiveType = 
- string * bool * term *                       (* typename, inductive, arity *)
-  constructor list                            (*  constructors              *)
-and constructor =
- string * term * bool list option ref         (* id, type, really recursive *)
-and inductiveFun =
- string * int * term * term                   (* name, ind. index, type, body *)
-and coInductiveFun =
- string * term * term                         (* name, type, body *)
-
-and annterm =
-   ARel of id * annotation option ref *
-    int * string option                             (* DeBrujin index, binder *)
- | AVar of id * annotation option ref *             
-    UriManager.uri                                  (* uri *)
- | AMeta of id * annotation option ref * int        (* numeric id *)
- | ASort of id * annotation option ref * sort       (* sort *)
- | AImplicit of id * annotation option ref          (* *)
- | ACast of id * annotation option ref *
-    annterm * annterm                               (* value, type *)
- | AProd of id * annotation option ref *
-    name * annterm * annterm                        (* binder, source, target *)
- | ALambda of id * annotation option ref *
-    name * annterm * annterm                        (* binder, source, target *)
- | ALetIn of id * annotation option ref *
-    name * annterm * annterm                        (* binder, term, target *)
- | AAppl of id * annotation option ref *
-    annterm list                                    (* arguments *)
- | AConst of id * annotation option ref *
-    UriManager.uri * int                            (* uri, number of cookings*)
- | AAbst of id * annotation option ref *
-    UriManager.uri                                  (* uri *)
- | AMutInd of id * annotation option ref *
-    UriManager.uri * int * int                      (* uri, cookingsno, typeno*)
- | AMutConstruct of id * annotation option ref *
-    UriManager.uri * int *                          (* uri, cookingsno, *)
-    int * int                                       (*  typeno, consno  *)
- (*CSC: serve cookingsno?*)
- | AMutCase of id * annotation option ref *
-    UriManager.uri * int *                          (* ind. uri, cookingsno  *)
-    int *                                           (*  ind. typeno,         *)
-    annterm * annterm *                             (*  outtype, ind. term   *)
-    annterm list                                    (*  patterns             *)
- | AFix of id * annotation option ref *
-    int * anninductiveFun list                      (* funno, functions *)
- | ACoFix of id * annotation option ref *
-    int * anncoInductiveFun list                    (* funno, functions *)
-and annobj =
-   ADefinition of id * annotation option ref *
-    string *                                        (* id,           *)
-    annterm * annterm *                             (*  value, type, *)
-    (int * UriManager.uri list) list exactness      (*  parameters   *)
- | AAxiom of id * annotation option ref *
-    string * annterm *                              (* id, type    *)
-    (int * UriManager.uri list) list                (*  parameters *)
- | AVariable of id * annotation option ref *
-    string * annterm option * annterm               (* name, body, type *)
- | ACurrentProof of id * annotation option ref *
-    string * (int * annterm) list *                 (*  name, conjectures, *)
-    annterm * annterm                               (*  value, type        *)
- | AInductiveDefinition of id *
-    annotation option ref * anninductiveType list * (* inductive types ,      *)
-    (int * UriManager.uri list) list * int          (*  parameters,n ind. pars*)
-and anninductiveType = 
- string * bool * annterm *                    (* typename, inductive, arity *)
-  annconstructor list                         (*  constructors              *)
-and annconstructor =
- string * annterm * bool list option ref      (* id, type, really recursive *)
-and anninductiveFun =
- string * int * annterm * annterm             (* name, ind. index, type, body *)
-and anncoInductiveFun =
- string * annterm * annterm                   (* name, type, body *)
-and annotation =
- string
-and 'a exactness =
-   Possible of 'a                            (* an approximation to something *)
- | Actual of 'a                              (* something *)
-;;
diff --git a/helm/interface/cic2Xml.ml b/helm/interface/cic2Xml.ml
deleted file mode 100644 (file)
index 58f35bb..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*CSC codice cut & paste da cicPp e xmlcommand *)
-
-exception ImpossiblePossible;;
-exception NotImplemented;;
-exception BinderNotSpecified;;
-
-let dtdname = "http://localhost:8081/getdtd?url=cic.dtd";;
-
-(*CSC ottimizzazione: al posto di curi cdepth (vedi codice) *)
-let print_term curi =
- let rec aux =
-  let module C = Cic in
-  let module X = Xml in
-  let module U = UriManager in
-    function
-       C.ARel (id,_,n,Some b) ->
-        X.xml_empty "REL" ["value",(string_of_int n);"binder",b;"id",id]
-     | C.ARel _ -> raise BinderNotSpecified
-     | C.AVar (id,_,uri) ->
-        let vdepth = U.depth_of_uri uri
-        and cdepth = U.depth_of_uri curi in
-         X.xml_empty "VAR"
-          ["relUri",(string_of_int (cdepth - vdepth)) ^ "," ^
-            (U.name_of_uri uri) ;
-           "id",id]
-     | C.AMeta (id,_,n) ->
-        X.xml_empty "META" ["no",(string_of_int n) ; "id",id]
-     | C.ASort (id,_,s) ->
-        let string_of_sort =
-         function
-            C.Prop -> "Prop"
-          | C.Set  -> "Set"
-          | C.Type -> "Type"
-        in
-         X.xml_empty "SORT" ["value",(string_of_sort s) ; "id",id]
-     | C.AImplicit _ -> raise NotImplemented
-     | C.AProd (id,_,C.Anonimous,s,t) ->
-        X.xml_nempty "PROD" ["id",id]
-         [< X.xml_nempty "source" [] (aux s) ;
-            X.xml_nempty "target" [] (aux t)
-         >]
-     | C.AProd (xid,_,C.Name id,s,t) ->
-       X.xml_nempty "PROD" ["id",xid]
-        [< X.xml_nempty "source" [] (aux s) ;
-           X.xml_nempty "target" ["binder",id] (aux t)
-        >]
-     | C.ACast (id,_,v,t) ->
-        X.xml_nempty "CAST" ["id",id]
-         [< X.xml_nempty "term" [] (aux v) ;
-            X.xml_nempty "type" [] (aux t)
-         >]
-     | C.ALambda (id,_,C.Anonimous,s,t) ->
-        X.xml_nempty "LAMBDA" ["id",id]
-         [< X.xml_nempty "source" [] (aux s) ;
-            X.xml_nempty "target" [] (aux t)
-         >]
-     | C.ALambda (xid,_,C.Name id,s,t) ->
-       X.xml_nempty "LAMBDA" ["id",xid]
-        [< X.xml_nempty "source" [] (aux s) ;
-           X.xml_nempty "target" ["binder",id] (aux t)
-        >]
-     | C.ALetIn (xid,_,C.Anonimous,s,t) ->
-       assert false (*CSC: significa che e' sbagliato il tipo di LetIn!!!*)
-     | C.ALetIn (xid,_,C.Name id,s,t) ->
-       X.xml_nempty "LETIN" ["id",xid]
-        [< X.xml_nempty "term" [] (aux s) ;
-           X.xml_nempty "letintarget" ["binder",id] (aux t)
-        >]
-     | C.AAppl (id,_,li) ->
-        X.xml_nempty "APPLY" ["id",id]
-         [< (List.fold_right (fun x i -> [< (aux x) ; i >]) li [<>])
-         >]
-     | C.AConst (id,_,uri,_) ->
-        X.xml_empty "CONST" ["uri", (U.string_of_uri uri) ; "id",id]
-     | C.AAbst (id,_,uri) -> raise NotImplemented
-     | C.AMutInd (id,_,uri,_,i) ->
-        X.xml_empty "MUTIND"
-         ["uri", (U.string_of_uri uri) ;
-          "noType",(string_of_int i) ;
-          "id",id]
-     | C.AMutConstruct (id,_,uri,_,i,j) ->
-        X.xml_empty "MUTCONSTRUCT"
-         ["uri", (U.string_of_uri uri) ;
-          "noType",(string_of_int i) ; "noConstr",(string_of_int j) ;
-          "id",id]
-     | C.AMutCase (id,_,uri,_,typeno,ty,te,patterns) ->
-        X.xml_nempty "MUTCASE"
-         ["uriType",(U.string_of_uri uri) ;
-          "noType", (string_of_int typeno) ;
-          "id", id]
-         [< X.xml_nempty "patternsType" [] [< (aux ty) >] ;
-            X.xml_nempty "inductiveTerm" [] [< (aux te) >] ;
-            List.fold_right
-             (fun x i -> [< X.xml_nempty "pattern" [] [< aux x >] ; i>])
-             patterns [<>]
-         >]
-     | C.AFix (id, _, no, funs) ->
-       X.xml_nempty "FIX" ["noFun", (string_of_int no) ; "id",id]
-        [< List.fold_right
-            (fun (fi,ai,ti,bi) i ->
-              [< X.xml_nempty "FixFunction"
-                  ["name", fi; "recIndex", (string_of_int ai)]
-                  [< X.xml_nempty "type" [] [< aux ti >] ;
-                     X.xml_nempty "body" [] [< aux bi >]
-                  >] ;
-                 i
-              >]
-            ) funs [<>]
-        >]
-     | C.ACoFix (id,_,no,funs) ->
-       X.xml_nempty "COFIX" ["noFun", (string_of_int no) ; "id",id]
-        [< List.fold_right
-            (fun (fi,ti,bi) i ->
-              [< X.xml_nempty "CofixFunction" ["name", fi]
-                  [< X.xml_nempty "type" [] [< aux ti >] ;
-                     X.xml_nempty "body" [] [< aux bi >]
-                  >] ;
-                 i
-              >]
-            ) funs [<>]
-        >]
- in
-  aux
-;;
-
-let encode params =
- List.fold_right
-  (fun (n,l) i ->
-    match l with
-       [] -> i
-     | _ ->
-       string_of_int n ^ ": " ^ 
-       String.concat " " (List.map UriManager.name_of_uri l) ^
-       i
-  ) params ""
-;;
-
-let print_mutual_inductive_type curi (typename,inductive,arity,constructors) =
- let module C = Cic in
- let module X = Xml in
-  [< X.xml_nempty "InductiveType"
-      ["name",typename ;
-       "inductive",(string_of_bool inductive)
-      ]
-      [< X.xml_nempty "arity" [] (print_term curi arity) ;
-         (List.fold_right
-          (fun (name,ty,_) i ->
-            [< X.xml_nempty "Constructor" ["name",name]
-                (print_term curi ty) ;
-               i
-            >])
-          constructors
-          [<>]
-         )
-      >]
-  >]
-;;
-
-let pp obj curi =
- let module C = Cic in
- let module X = Xml in
-  match obj with
-     C.ADefinition (xid, _, id, te, ty, params) ->
-      [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-         X.xml_cdata ("<!DOCTYPE Definition SYSTEM \"" ^ dtdname ^ "\">\n\n") ;
-         X.xml_nempty "Definition"
-          (["name", id ; "id",xid] @
-           match params with
-              C.Possible _ -> raise ImpossiblePossible
-              (*CSC params are kept in inverted order in the internal *)
-              (* representation (the order of application)            *)
-            | C.Actual fv' -> ["params",(encode (List.rev fv'))])
-          [< X.xml_nempty "body" [] (print_term curi te) ;
-             X.xml_nempty "type"  [] (print_term curi ty) >]
-      >]
-   | C.AAxiom (xid, _, id, ty, params) ->
-      [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-         X.xml_cdata ("<!DOCTYPE Axiom SYSTEM \"" ^ dtdname ^ "\">\n\n") ;
-         X.xml_nempty "Axiom"
-          (*CSC params are kept in inverted order in the internal *)
-          (* representation (the order of application)            *)
-          ["name",id ; "params",(encode (List.rev params)) ; "id",xid]
-          [< X.xml_nempty "type" [] (print_term curi ty) >]
-      >]
-   | C.AVariable (xid, _, name, bo, ty) ->
-      [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-         X.xml_cdata ("<!DOCTYPE Variable SYSTEM \"" ^ dtdname ^ "\">\n\n") ;
-         X.xml_nempty "Variable" ["name",name ; "id",xid]
-          [< (match bo with
-                 None -> [<>]
-               | Some bo -> X.xml_nempty "body" [] (print_term curi bo)
-             ) ;
-             X.xml_nempty "type" [] (print_term curi ty)
-          >]
-      >]
-   | C.ACurrentProof (xid, _, name, conjs, bo, ty) ->
-      [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-         X.xml_cdata ("<!DOCTYPE CurrentProof SYSTEM \"" ^ dtdname ^ "\">\n\n");
-         X.xml_nempty "CurrentProof" ["name",name ; "id",xid]
-          [< List.fold_right
-              (fun (j,t) i ->
-                [< X.xml_nempty "Conjecture" ["no",(string_of_int j)]
-                    [< print_term curi t >] ; i >])
-              conjs [<>] ;
-             X.xml_nempty "body" [] [< print_term curi bo >] ;
-             X.xml_nempty "type" [] [< print_term curi ty >]
-          >]
-      >]
-   | C.AInductiveDefinition (xid, _, tys, params, paramsno) ->
-      let names =
-       List.map
-        (fun (typename,_,_,_) -> typename)
-        tys
-      in
-       [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-          X.xml_cdata ("<!DOCTYPE InductiveDefinition SYSTEM \"" ^
-           dtdname ^ "\">\n\n") ;
-          X.xml_nempty "InductiveDefinition"
-           (*CSC params are kept in inverted order in the internal *)
-           (* representation (the order of application)            *)
-           ["noParams",string_of_int paramsno ;
-            "params",(encode (List.rev params)) ;
-            "id",xid]
-          [< List.fold_right
-              (fun x i -> [< print_mutual_inductive_type curi x ; i >])
-              tys [< >]
-           >]
-       >]
-;;
diff --git a/helm/interface/cicAnnotationHinter.ml b/helm/interface/cicAnnotationHinter.ml
deleted file mode 100644 (file)
index 86bcb45..0000000
+++ /dev/null
@@ -1,381 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 14/06/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-let deactivate_hints_from annotation_window n =
- let annotation_hints = annotation_window#annotation_hints in
-  for i = n to Array.length annotation_hints - 1 do
-   annotation_hints.(i)#misc#hide ()
-  done
-;;
-
-(* CSC: orripilante *)
-(* the list of the signal ids *)
-let sig_ids = ref ([] : GtkSignal.id list);;
-
-let disconnect_hint annotation_window buttonno =
- match !sig_ids with
-    id::ids ->
-     annotation_window#annotation_hints.(buttonno)#misc#disconnect id ;
-     sig_ids := ids
-  | _ -> assert false
-;;
-
-(* link_hint annotation_window n label hint *)
-(* set the label of the nth hint button of annotation_window to label *)
-(* and the correspondent hint to hint                                 *)
-let link_hint annotation_window buttonno label hint =
- let button = annotation_window#annotation_hints.(buttonno) in
-  sig_ids :=
-   (button#connect#clicked
-    (fun () -> (annotation_window#annotation : GEdit.text)#insert hint)
-   ) :: !sig_ids ;
-  button#misc#show () ;
-  match button#children with
-     [labelw] -> (GMisc.label_cast labelw)#set_text label
-   | _ -> assert false
-;;
-
-exception TooManyHints;;
-
-let link_hints annotation_window a =
- if Array.length a > Array.length annotation_window#annotation_hints then
-  raise TooManyHints ;
- for i = List.length !sig_ids - 1 downto 0 do
-  disconnect_hint annotation_window i
- done ;
- Array.iteri
-  (fun i (label,hint) -> link_hint annotation_window i label hint) a ;
- deactivate_hints_from annotation_window (Array.length a)
-;;
-
-let list_mapi f =
- let rec aux n =
-  function
-     [] -> []
-   | he::tl -> (f n he)::(aux (n + 1) tl)
- in
-  aux 0
-;;
-
-let get_id annterm =
- let module C = Cic in
-  match annterm with
-     C.ARel (id,_,_,_)             -> id
-   | C.AVar (id,_,_)               -> id
-   | C.AMeta (id,_,_)              -> id
-   | C.ASort (id,_,_)              -> id
-   | C.AImplicit (id,_)            -> id
-   | C.ACast (id,_,_,_)            -> id
-   | C.AProd (id,_,_,_,_)          -> id
-   | C.ALambda (id,_,_,_,_)        -> id
-   | C.ALetIn (id,_,_,_,_)         -> id
-   | C.AAppl (id,_,_)              -> id
-   | C.AConst (id,_,_,_)           -> id
-   | C.AAbst (id,_,_)              -> id
-   | C.AMutInd (id,_,_,_,_)        -> id
-   | C.AMutConstruct (id,_,_,_,_,_)-> id
-   | C.AMutCase (id,_,_,_,_,_,_,_) -> id
-   | C.AFix (id,_,_,_)             -> id
-   | C.ACoFix (id,_,_,_)           -> id
-;;
-
-let create_hint_from_term annotation_window annterm =
- let module C = Cic in
-  match annterm with
-     C.ARel (id,_,_,_) ->
-      link_hints annotation_window
-       [| "Binder", "<attribute name = 'binder' id = '" ^ id ^ "'/>" |]
-   | C.AVar (id,_,_) ->
-      link_hints annotation_window
-       [| "relURI???", "<attribute name = 'relUri' id = '" ^ id ^ "'/>" |]
-   | C.AMeta (id,_,_) ->
-      link_hints annotation_window
-       [| "Number", "<attribute name = 'no' id = '" ^ id ^ "'/>" |]
-   | C.ASort (id,_,_) ->
-      link_hints annotation_window
-       [| "Value", "<attribute name = 'value' id = '" ^ id ^ "'/>" |]
-   | C.AImplicit (id,_) ->
-      link_hints annotation_window [| |]
-   | C.ACast (id,_,bo,ty) ->
-      let boid = get_id bo
-      and tyid = get_id ty in
-       link_hints annotation_window
-        [| "Body", "<node id = '" ^ boid ^ "'/>" ;
-           "Type", "<node id = '" ^ tyid ^ "'/>"
-        |]
-   | C.AProd (id,_,_,ty,bo) ->
-      let boid = get_id bo
-      and tyid = get_id ty in
-       link_hints annotation_window
-        [| "Binder",
-            "<attribute child = '2' name = 'binder' id = '" ^ id ^ "'/>" ;
-           "Body", "<node id = '" ^ boid ^ "'/>" ;
-           "Type", "<node id = '" ^ tyid ^ "'/>"
-        |]
-   | C.ALambda (id,_,_,ty,bo) ->
-      let boid = get_id bo
-      and tyid = get_id ty in
-       link_hints annotation_window
-        [| "Binder",
-            "<attribute child = '2' name = 'binder' id = '" ^ id ^ "'/>" ;
-           "Body", "<node id = '" ^ boid ^ "'/>" ;
-           "Type", "<node id = '" ^ tyid ^ "'/>"
-        |]
-   | C.ALetIn (id,_,_,ty,bo) ->
-      let boid = get_id bo
-      and tyid = get_id ty in
-       link_hints annotation_window
-        [| "Binder",
-            "<attribute child = '2' name = 'binder' id = '" ^ id ^ "'/>" ;
-           "Term", "<node id = '" ^ boid ^ "'/>" ;
-           "Target", "<node id = '" ^ tyid ^ "'/>"
-        |]
-   | C.AAppl (id,_,args) ->
-      let argsid =
-       Array.mapi
-        (fun i te -> "Argument " ^ string_of_int i, "<node id ='" ^
-          get_id te ^ "'/>")
-        (Array.of_list args)
-      in
-       link_hints annotation_window argsid
-   | C.AConst (id,_,_,_) ->
-      link_hints annotation_window
-       [| "Uri???", "<attribute name = 'uri' id = '" ^ id ^ "'/>" |]
-   | C.AAbst (id,_,_) ->
-      link_hints annotation_window
-       [| "Uri???", "<attribute name = 'uri' id = '" ^ id ^ "'/>" |]
-   | C.AMutInd (id,_,_,_,_) ->
-      link_hints annotation_window
-       [| "Uri???", "<attribute name = 'uri' id = '" ^ id ^ "'/>" |]
-   | C.AMutConstruct (id,_,_,_,_,_) ->
-      link_hints annotation_window
-       [| "Uri???", "<attribute name = 'uri' id = '" ^ id ^ "'/>" |]
-   | C.AMutCase (id,_,_,_,_,outty,te,pl) ->
-      let outtyid = get_id outty
-      and teid = get_id te
-      and plid =
-       Array.mapi
-        (fun i te -> "Pattern " ^ string_of_int i, "<node id ='" ^
-          get_id te ^ "'/>")
-        (Array.of_list pl)
-      in
-       link_hints annotation_window
-        (Array.append
-         [| "Uri???", "<attribute name = 'uri' id = '" ^ id ^ "'/>" ;
-            "Case Type", "<node id = '" ^ outtyid ^ "'/>" ;
-            "Term", "<node id = '" ^ teid ^ "'/>" ;
-         |]
-         plid)
-   | C.AFix (id,_,_,funl) ->
-      let funtylid =
-       Array.mapi
-        (fun i (_,_,ty,_) ->
-          "Type " ^ string_of_int i, "<node id ='" ^
-          get_id ty ^ "'/>")
-        (Array.of_list funl)
-      and funbolid =
-       Array.mapi
-        (fun i (_,_,_,bo) ->
-          "Body " ^ string_of_int i, "<node id ='" ^
-          get_id bo ^ "'/>")
-        (Array.of_list funl)
-      and funnamel =
-       Array.mapi
-        (fun i (_,_,_,_) ->
-          "Name " ^ string_of_int i, "<attribute id ='" ^ id ^
-           "' name = 'name' child='" ^ string_of_int i ^ "'/>")
-        (Array.of_list funl)
-      and funrecindexl =
-       Array.mapi
-        (fun i (_,_,_,_) ->
-          "Recursive Index??? " ^ string_of_int i, "<attribute id = '" ^ id ^
-           "' name = 'recIndex' child='" ^ string_of_int i ^ "'/>")
-        (Array.of_list funl)
-      in
-       link_hints annotation_window
-        (Array.concat
-         [ funtylid ;
-           funbolid ;
-           funnamel ;
-           funrecindexl ;
-           [| "NoFun???", "<attribute name = 'noFun' id = '" ^ id ^ "'/>" |]
-         ]
-        )
-   | C.ACoFix (id,_,_,funl) ->
-      let funtylid =
-       Array.mapi
-        (fun i (_,ty,_) ->
-          "Type " ^ string_of_int i, "<node id ='" ^
-          get_id ty ^ "'/>")
-        (Array.of_list funl)
-      and funbolid =
-       Array.mapi
-        (fun i (_,_,bo) ->
-          "Body " ^ string_of_int i, "<node id ='" ^
-          get_id bo ^ "'/>")
-        (Array.of_list funl)
-      and funnamel =
-       Array.mapi
-        (fun i (_,_,_) ->
-          "Name " ^ string_of_int i, "<attribute id ='" ^ id ^
-           "' name = 'name' child='" ^ string_of_int i ^ "'/>")
-        (Array.of_list funl)
-      in
-       link_hints annotation_window
-        (Array.concat
-         [ funtylid ;
-           funbolid ;
-           funnamel ;
-           [| "NoFun???", "<attribute name = 'noFun' id = '" ^ id ^ "'/>" |]
-         ]
-        )
-;;
-
-(*CSC: da riscrivere completamente eliminando il paciugo degli array - liste *)
-let create_hint_from_obj annotation_window annobj =
- let module C = Cic in
-  match annobj with
-     C.ADefinition (id,_,_,bo,ty,_) ->
-      let boid = get_id bo
-      and tyid = get_id ty in
-       link_hints annotation_window
-        [| "Name", "<attribute name = 'name' id = '" ^ id ^ "'/>" ;
-           "Ingredients", "<attribute name = 'params' id = '" ^ id ^ "'/>" ;
-           "Body", "<node id = '" ^ boid ^ "'/>" ;
-           "Type", "<node id = '" ^ tyid ^ "'/>"
-        |]
-   | C.AAxiom (id,_,_,ty,_) ->
-      let tyid = get_id ty in
-       link_hints annotation_window
-        [| "Name", "<attribute name = 'name' id = '" ^ id ^ "'/>" ;
-           "Ingredients", "<attribute name = 'params' id = '" ^ id ^ "'/>" ;
-           "Type", "<node id = '" ^ tyid ^ "'/>"
-        |]
-   | C.AVariable (id,_,_,bo,ty) ->
-      let tyid = get_id ty in
-       link_hints annotation_window
-        (match bo with
-            None ->
-             [| "Name", "<attribute name = 'name' id = '" ^ id ^ "'/>" ;
-                "Type", "<node id = '" ^ tyid ^ "'/>"
-             |]
-          | Some bo ->
-             let boid = get_id bo in
-              [| "Name", "<attribute name = 'name' id = '" ^ id ^ "'/>" ;
-                 "Body", "<node id = '" ^ boid ^ "'/>" ;
-                 "Type", "<node id = '" ^ tyid ^ "'/>"
-              |]
-        )
-   | C.ACurrentProof (id,_,_,conjs,bo,ty) ->
-      let boid = get_id bo
-      and tyid = get_id ty
-      and conjsid = List.map (fun (_,te) -> get_id te) conjs in
-       link_hints annotation_window
-        (Array.append
-          [| "Name", "<attribute name = 'name' id = '" ^ id ^ "'/>" ;
-             "Ingredients", "<attribute name = 'params' id = '" ^ id ^ "'/>" ;
-             "Body", "<node id = '" ^ boid ^ "'/>" ;
-             "Type", "<node id = '" ^ tyid ^ "'/>"
-          |]
-          (Array.mapi
-            (fun i id ->
-              "Conjecture " ^ string_of_int i, "<node id = '" ^ id ^ "'/>"
-            ) (Array.of_list conjsid)
-          )
-        )
-   | C.AInductiveDefinition (id,_,itl,_,_) ->
-      let itlids =
-       List.map
-        (fun (_,_,arity,cons) ->
-          get_id arity,
-          List.map (fun (_,ty,_) -> get_id ty) cons
-        ) itl
-      in
-       link_hints annotation_window
-        (Array.concat
-          [
-           [| "Ingredients","<attribute name = 'params' id = '" ^ id ^ "'/>" |];
-           (Array.mapi
-             (fun i _ ->
-               "Type Name " ^ string_of_int i,
-               "<attribute name = 'name' child = '" ^ string_of_int i ^
-                "' id = '" ^ id ^ "'/>"
-             ) (Array.of_list itlids)
-           ) ;
-           (Array.mapi
-             (fun i (id,_) ->
-               "Type " ^ string_of_int i, "<node id = '" ^ id ^ "'/>"
-             ) (Array.of_list itlids)
-           ) ;
-           (Array.concat
-            (list_mapi
-             (fun i (_,consid) ->
-              (Array.mapi
-                (fun j _ ->
-                  "Constructor Name " ^ string_of_int i ^ " " ^ string_of_int j,
-                  "<attribute name = 'name' id = '" ^ id ^ 
-                   "' child = '" ^ string_of_int i ^ "' grandchild = '" ^
-                   string_of_int j ^ "'/>"
-                ) (Array.of_list consid)
-              ) ;
-             ) itlids
-            )
-           ) ;
-           (Array.concat
-            (list_mapi
-             (fun i (_,consid) ->
-              (Array.mapi
-                (fun j id ->
-                  "Constructor " ^ string_of_int i ^ " " ^ string_of_int j,
-                  "<node id = '" ^ id ^ "'/>"
-                ) (Array.of_list consid)
-              ) ;
-             ) itlids
-            )
-           )
-          ]
-        )
-;;
-
-exception IdUnknown of string;;
-
-let create_hints annotation_window (annobj,ids_to_targets) xpath =
- try
-  match Hashtbl.find ids_to_targets xpath with
-     Cic.Object annobj -> create_hint_from_obj annotation_window annobj
-   | Cic.Term annterm -> create_hint_from_term annotation_window annterm
- with
-  Not_found -> raise (IdUnknown xpath)
-;;
diff --git a/helm/interface/cicCache.ml b/helm/interface/cicCache.ml
deleted file mode 100644 (file)
index 6ae536c..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module implements a trival cache system (an hash-table) for cic       *)
-(* objects. Uses the getter (getter.ml) and the parser (cicParser.ml)         *)
-(*                                                                            *)
-(******************************************************************************)
-
-let raise e = print_endline "***" ; flush stdout ; print_endline (Printexc.to_string e) ; flush stdout ; raise e;;
-
-(*CSC: forse i due seguenti tipi sono da unificare? *)
-type cooked_obj =
-   Cooked of Cic.obj
- | Frozen of Cic.obj
- | Unchecked of Cic.obj
-type type_checked_obj =
-   CheckedObj of Cic.obj     (* cooked obj *)
- | UncheckedObj of Cic.obj   (* uncooked obj *)
-;;
-
-exception NoFunctionProvided;;
-
-(* CSC: da sostituire con un (...) option ref *)
-let cook_obj = ref (fun obj uri -> raise NoFunctionProvided);;
-
-exception CircularDependency of string;;
-exception CouldNotUnfreeze of string;;
-exception Impossible;;
-exception UncookedObj;;
-
-module HashedType =
- struct
-  type t = UriManager.uri * int    (* uri, livello di cottura *)
-  let equal (u1,n1) (u2,n2) = UriManager.eq u1 u2 && n1 = n2
-  let hash = Hashtbl.hash
- end
-;;
-
-(* Hashtable that uses == instead of = for testing equality *)
-module HashTable = Hashtbl.Make(HashedType);;
-
-let hashtable = HashTable.create 271;;
-
-(* n is the number of time that the object must be cooked *)
-let get_obj_and_type_checking_info uri n =
- try
-   HashTable.find hashtable (uri,n)
- with
-  Not_found -> 
-   try
-    match HashTable.find hashtable (uri,0) with
-        Cooked _
-      | Frozen _ -> raise Impossible
-      | Unchecked _ as t -> t
-   with
-    Not_found ->
-     let filename = Getter.get uri in
-      let (annobj,_) = CicParser.term_of_xml filename uri false in
-       let obj = Deannotate.deannotate_obj annobj in
-        let output = Unchecked obj in
-         HashTable.add hashtable (uri,0) output ;
-         output
-;;
-
-(* DANGEROUS!!!                                *)
-(* USEFUL ONLY DURING THE FIXING OF THE FILES  *)
-(* change_obj uri (Some newobj)                *)
-(*  maps uri to newobj in cache.               *)
-(* change_obj uri None                         *)
-(*  maps uri to a freeze dummy-object.         *)
-let change_obj uri newobj =
- let newobj =
-  match newobj with
-     Some newobj' -> Unchecked newobj'
-   | None         -> Frozen (Cic.Variable ("frozen-dummy", None, Cic.Implicit))
- in
-  HashTable.remove hashtable (uri,0) ;
-  HashTable.add hashtable (uri,0) newobj
-;;
-
-let is_annotation_uri uri =
- Str.string_match (Str.regexp ".*\.ann$") (UriManager.string_of_uri uri) 0
-;;
-
-(* returns both the annotated and deannotated uncooked forms (plus the *)
-(* map from ids to annotation targets)                                 *)
-let get_annobj_and_type_checking_info uri =
- let filename = Getter.get uri in
-  match CicParser.term_of_xml filename uri true with
-     (_, None) -> raise Impossible
-   | (annobj, Some ids_to_targets) ->
-    (* If uri is the uri of an annotation, let's use the annotation file *)
-    if is_annotation_uri uri  then
-     AnnotationParser.annotate (Getter.get_ann uri) ids_to_targets ;
-    try
-      (annobj, ids_to_targets, HashTable.find hashtable (uri,0))
-    with
-     Not_found -> 
-      let obj = Deannotate.deannotate_obj annobj in
-       let output = Unchecked obj in
-        HashTable.add hashtable (uri,0) output ;
-        (annobj, ids_to_targets, output)
-;;
-
-
-(* get_obj uri                                                               *)
-(* returns the cic object whose uri is uri. If the term is not just in cache, *)
-(* then it is parsed via CicParser.term_of_xml from the file whose name is    *)
-(* the result of Getter.get uri                                               *)
-let get_obj uri =
- match get_obj_and_type_checking_info uri 0 with
-    Unchecked obj -> obj
-  | Frozen    obj -> obj
-  | Cooked    obj -> obj
-;;
-
-(* get_annobj uri                                                             *)
-(* returns the cic object whose uri is uri either in annotated and            *)
-(* deannotated form. The term is put into the cache if it's not there yet.    *)
-let get_annobj uri =
- let (ann, ids_to_targets, deann) = get_annobj_and_type_checking_info uri in
-  let deannobj =
-   match deann with
-      Unchecked obj -> obj
-    | Frozen    _   -> raise (CircularDependency (UriManager.string_of_uri uri))
-    | Cooked    obj -> obj
-  in
-   (ann, ids_to_targets, deannobj)
-;;
-
-(*CSC Commento falso *)
-(* get_obj uri                                                               *)
-(* returns the cooked cic object whose uri is uri. The term must be present  *)
-(* and cooked in cache                                                       *)
-let rec get_cooked_obj uri cookingsno =
- match get_obj_and_type_checking_info uri cookingsno with
-    Unchecked _
-  | Frozen    _ -> raise UncookedObj
-  | Cooked obj -> obj
-;;
-
-(* is_type_checked uri                                              *)
-(* CSC: commento falso ed obsoleto *)
-(* returns true if the term has been type-checked                   *)
-(* otherwise it returns false and freeze the term for type-checking *)
-(* set_type_checking_info must be called to unfreeze the term       *)
-let is_type_checked uri cookingsno =
- match get_obj_and_type_checking_info uri cookingsno with
-    Cooked obj -> CheckedObj obj
-  | Unchecked obj ->
-     HashTable.remove hashtable (uri,0) ;
-     HashTable.add hashtable (uri,0) (Frozen obj) ;
-     UncheckedObj obj
-  | Frozen _ -> raise (CircularDependency (UriManager.string_of_uri uri))
-;;
-
-(* set_type_checking_info uri                               *)
-(* must be called once the type-checking of uri is finished *)
-(* The object whose uri is uri is unfreezed                 *)
-let set_type_checking_info uri =
- match HashTable.find hashtable (uri,0) with
-    Frozen obj ->
-     (* let's cook the object at every level *)
-     HashTable.remove hashtable (uri,0) ;
-     let obj' = CicSubstitution.undebrujin_inductive_def uri obj in
-      HashTable.add hashtable (uri,0) (Cooked obj') ;
-      let cooked_objs = !cook_obj obj' uri in
-       let last_cooked_level = ref 0 in
-       let last_cooked_obj = ref obj' in
-        List.iter
-         (fun (n,cobj) ->
-           for i = !last_cooked_level + 1 to n do
-            HashTable.add hashtable (uri,i) (Cooked !last_cooked_obj)
-           done ;
-           HashTable.add hashtable (uri,n + 1) (Cooked cobj) ;
-           last_cooked_level := n + 1 ;
-           last_cooked_obj := cobj
-         ) cooked_objs ;
-        for i = !last_cooked_level + 1 to UriManager.depth_of_uri uri + 1 do
-         HashTable.add hashtable (uri,i) (Cooked !last_cooked_obj)
-        done
-  | _ -> raise (CouldNotUnfreeze (UriManager.string_of_uri uri))
-;;
diff --git a/helm/interface/cicCache.mli b/helm/interface/cicCache.mli
deleted file mode 100644 (file)
index 3f5fd00..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module implements a trival cache system (an hash-table) for cic       *)(* objects. Uses the getter (getter.ml) and the parser (cicParser.ml)         *)(*                                                                            *)
-(******************************************************************************)
-
-exception CircularDependency of string;;
-
-(* get_obj uri                                                                *)
-(* returns the cic object whose uri is uri. If the term is not just in cache, *)
-(* then it is parsed via CicParser.term_of_xml from the file whose name is    *)
-(* the result of Getter.get uri                                               *)
-val get_obj : UriManager.uri -> Cic.obj
-
-(* get_annobj uri                                                             *)
-(* returns the cic object whose uri is uri either in annotated and in         *)
-(* deannotated form. It returns also the map from ids to annotation targets.  *)
-(* The term is put in cache if it's not there yet.                            *)
-(* The functions raise CircularDependency if asked to retrieve a Frozen object*)
-val get_annobj :
- UriManager.uri -> Cic.annobj * (Cic.id, Cic.anntarget) Hashtbl.t * Cic.obj
-
-(* DANGEROUS!!!                                *)
-(* USEFUL ONLY DURING THE FIXING OF THE FILES  *)
-(* change_obj uri (Some newobj)                *)
-(*  maps uri to newobj in cache.               *)
-(* change_obj uri None                         *)
-(*  maps uri to a freeze dummy-object.         *)
-val change_obj : UriManager.uri -> Cic.obj option -> unit
-
-type type_checked_obj =
-   CheckedObj of Cic.obj    (* cooked obj *)
- | UncheckedObj of Cic.obj  (* uncooked obj *)
-
-(* is_type_checked uri cookingsno                                   *)
-(*CSC commento falso ed obsoleto *)
-(* returns (true,object) if the object has been type-checked        *)
-(* otherwise it returns (false,object) and freeze the object for    *)
-(* type-checking                                                    *)
-(* set_type_checking_info must be called to unfreeze the object     *)
-val is_type_checked : UriManager.uri -> int -> type_checked_obj
-
-(* set_type_checking_info uri                                         *)
-(* must be called once the type-checking of uri is finished           *)
-(* The object whose uri is uri is unfreezed and won't be type-checked *)
-(* again in the future (is_type_checked will return true)             *)
-val set_type_checking_info : UriManager.uri -> unit
-
-(* get_cooked_obj uri cookingsno *)
-val get_cooked_obj : UriManager.uri -> int -> Cic.obj
-
-val cook_obj : (Cic.obj -> UriManager.uri -> (int * Cic.obj) list) ref
diff --git a/helm/interface/cicCooking.ml b/helm/interface/cicCooking.ml
deleted file mode 100644 (file)
index fcd67bd..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception Impossible;;
-exception NotImplemented of int * string;;
-exception WrongUriToConstant;;
-exception WrongUriToVariable of string;;
-exception WrongUriToInductiveDefinition;;
-
-(* mem x lol is true if x is a member of one    *)
-(* of the lists of the list of (int * list) lol *)
-let mem x lol =
- List.fold_right (fun (_,l) i -> i || List.mem x l) lol false
-;;
-
-(* cook var term *)
-let cook curi cookingsno var =
- let rec aux k =
-  let module C = Cic in
-   function
-      C.Rel n as t ->
-       (match n with
-           n when n >= k -> C.Rel (n + 1)
-         | _ -> C.Rel n
-       )
-    | C.Var uri as t ->
-       if UriManager.eq uri var then
-        C.Rel k
-       else
-        t
-    | C.Meta _ as t -> t
-    | C.Sort _ as t -> t
-    | C.Implicit as t -> t
-    | C.Cast (te, ty) -> C.Cast (aux k te, aux k ty)
-    | C.Prod (n,s,t) -> C.Prod (n, aux k s, aux (k + 1) t)
-    | C.Lambda (n,s,t) -> C.Lambda (n, aux k s, aux (k + 1) t)
-    | C.LetIn (n,s,t) -> C.LetIn (n, aux k s, aux (k + 1) t)
-    | C.Appl (he::tl) ->
-       (* Get rid of C.Appl (C.Appl l1) l2 *)
-       let newtl = List.map (aux k) tl in
-        (match aux k he with
-            C.Appl (he'::tl') -> C.Appl (he'::(tl'@newtl))
-          | t -> C.Appl (t::newtl)
-        )
-    | C.Appl [] -> raise Impossible
-    | C.Const (uri,_) ->
-       if match CicCache.get_obj uri with
-           C.Definition (_,_,_,params) when mem var params -> true
-         | C.Definition _ -> false
-         | C.Axiom (_,_,params) when mem var params -> true
-         | C.Axiom _ -> false
-         | C.CurrentProof _ ->
-            raise (NotImplemented (2,(UriManager.string_of_uri uri)))
-         | _ -> raise WrongUriToConstant
-       then
-        C.Appl
-         ((C.Const (uri,UriManager.relative_depth curi uri cookingsno))::
-          [C.Rel k])
-       else
-        C.Const (uri,UriManager.relative_depth curi uri cookingsno)
-    | C.Abst _ as t -> t
-    | C.MutInd (uri,_,i) ->
-       if match CicCache.get_obj uri with
-           C.InductiveDefinition (_,params,_) when mem var params -> true
-         | C.InductiveDefinition _ -> false
-         | _ -> raise WrongUriToInductiveDefinition
-       then
-        C.Appl ((C.MutInd (uri,UriManager.relative_depth curi uri cookingsno,i))::[C.Rel k])
-       else
-        C.MutInd (uri,UriManager.relative_depth curi uri cookingsno,i)
-    | C.MutConstruct (uri,_,i,j) ->
-       if match CicCache.get_obj uri with
-           C.InductiveDefinition (_,params,_) when mem var params -> true
-         | C.InductiveDefinition _ -> false
-         | _ -> raise WrongUriToInductiveDefinition
-       then
-        C.Appl ((C.MutConstruct (uri,UriManager.relative_depth curi uri cookingsno,i,j))::[C.Rel k])
-       else
-        C.MutConstruct (uri,UriManager.relative_depth curi uri cookingsno,i,j)
-    | C.MutCase (uri,_,i,outt,term,pl) ->
-       let substitutedfl =
-        List.map (aux k) pl
-       in
-        C.MutCase (uri,UriManager.relative_depth curi uri cookingsno,i,
-         aux k outt,aux k term, substitutedfl)
-    | C.Fix (i,fl) ->
-       let len = List.length fl in
-       let substitutedfl =
-         List.map
-          (fun (name,i,ty,bo) -> (name,i,aux k ty, aux (k+len) bo))
-          fl
-       in
-        C.Fix (i, substitutedfl)
-    | C.CoFix (i,fl) ->
-       let len = List.length fl in
-       let substitutedfl =
-         List.map
-          (fun (name,ty,bo) -> (name,aux k ty, aux (k+len) bo))
-          fl
-       in
-        C.CoFix (i, substitutedfl)
- in
-  aux 1 
-;;
-
-let cook_gen add_binder curi cookingsno ty vars =
- let module C = Cic in
- let module U = UriManager in
-  let rec cookrec ty =
-   function
-     var::tl ->
-      let (varname, varbody, vartype) =
-       match CicCache.get_obj var with
-          C.Variable (varname, varbody, vartype) -> (varname, varbody, vartype)
-        | _ -> raise (WrongUriToVariable (U.string_of_uri var))
-      in
-       cookrec (add_binder (C.Name varname) varbody vartype
-        (cook curi cookingsno var ty)) tl
-   | _ -> ty
-  in
-   cookrec ty vars
-;;
-
-let cook_prod =
- cook_gen (fun n b s t ->
-  match b with
-     None   -> Cic.Prod (n,s,t)
-   | Some b -> Cic.LetIn (n,b,t)
- )
-and cook_lambda =
- cook_gen (fun n b s t ->
-  match b with
-     None   -> Cic.Lambda (n,s,t)
-   | Some b -> Cic.LetIn (n,b,t)
- )
-;;
-
-(*CSC: sbagliato da rifare e completare *)
-let cook_one_level obj curi cookingsno vars =
- let module C = Cic in
-  match obj with
-     C.Definition (id,te,ty,params) ->
-      let ty' = cook_prod curi cookingsno ty vars in
-      let te' = cook_lambda curi cookingsno te vars in
-       C.Definition (id,te',ty',params)
-   | C.Axiom (id,ty,parameters) ->
-      let ty' = cook_prod curi cookingsno ty vars in
-       C.Axiom (id,ty',parameters)
-   | C.Variable _ as obj -> obj
-   | C.CurrentProof (id,conjs,te,ty) ->
-      let ty' = cook_prod curi cookingsno ty vars in
-      let te' = cook_lambda curi cookingsno te vars in
-       C.CurrentProof (id,conjs,te',ty')
-   | C.InductiveDefinition (dl, params, n_ind_params) ->
-      let dl' =
-       List.map
-        (fun (name,inductive,arity,constructors) ->
-          let constructors' =
-          List.map
-           (fun (name,ty,r) ->
-             let r' = 
-              match !r with
-                 None -> raise Impossible
-               | Some r -> List.map (fun _ -> false) vars @ r
-             in
-             (name,cook_prod curi cookingsno ty vars,ref (Some r')) 
-           ) constructors
-          in
-           (name,inductive,cook_prod curi cookingsno arity vars,constructors')
-        ) dl
-      in
-       C.InductiveDefinition (dl', params, n_ind_params + List.length vars)
-;; 
-
-let cook_obj obj uri =
- let module C = Cic in
-  let params =
-   match obj with
-      C.Definition (_,_,_,params) -> params
-    | C.Axiom (_,_,params) -> params
-    | C.Variable _ -> []
-    | C.CurrentProof _ -> []
-    | C.InductiveDefinition (_,params,_) -> params
-  in
-   let rec cook_all_levels obj =
-    function
-       [] -> []
-     | (n,vars)::tl ->
-        let cooked_obj = cook_one_level obj uri (n + 1) (List.rev vars) in
-         (n,cooked_obj)::(cook_all_levels cooked_obj tl)
-   in
-    cook_all_levels obj (List.rev params)
-;;
-
-CicCache.cook_obj := cook_obj;;
diff --git a/helm/interface/cicCooking.mli b/helm/interface/cicCooking.mli
deleted file mode 100644 (file)
index 203bf6c..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception Impossible
-exception NotImplemented of int * string
-exception WrongUriToConstant
-exception WrongUriToVariable of string
-exception WrongUriToInductiveDefinition
-val cook_obj : Cic.obj -> UriManager.uri -> (int * Cic.obj) list
diff --git a/helm/interface/cicFindParameters.ml b/helm/interface/cicFindParameters.ml
deleted file mode 100644 (file)
index dbc1483..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception WrongUriToConstant;;
-exception WrongUriToInductiveDefinition;;
-exception CircularDependency of string;;
-
-module OrderedUris =
- struct
-  type t = UriManager.uri
-  let compare (s1 : t) (s2 : t) =
-   (* library function for = *)
-   compare s1 s2
-   (*if s1 = s2 then 0 else if s1 < s2 then (-1) else 1*)
- end
-;;
-
-let filename_of_uri uri =
- let uri' = UriManager.string_of_uri uri in
-  let fn = Str.replace_first (Str.regexp "cic:") Configuration.helm_dir uri' in
-   fn ^ ".xml"
-;;
-
-(* quite inefficient coding of a set of strings: the only operations  *)
-(* performed are mem O(log n), and union O(n * log n?)                *)
-(* Perhaps a better implementation would be an array of bits or a map *)
-(* from uri to booleans                                               *)
-module SetOfUris = Set.Make(OrderedUris);;
-
-let (@@) = SetOfUris.union;;
-
-let rec parameters_of te ty pparams=
- let module S = SetOfUris in
- let module C = Cic in
-   let rec aux =
-    function
-       C.Rel _ -> S.empty
-     | C.Var uri -> S.singleton uri
-     | C.Meta _ -> S.empty
-     | C.Sort _ -> S.empty
-     | C.Implicit -> S.empty
-     | C.Cast (te, ty) -> aux te @@ aux ty
-     | C.Prod (_, s, t) -> aux s @@ aux t
-     | C.Lambda (_, s, t) -> aux s @@ aux t
-     | C.Appl l -> List.fold_right (fun x i -> aux x @@ i) l S.empty
-     | C.Const (uri,_) ->
-        (* the parameters could be not exact but only possible *)
-        fix_params uri (Some (filename_of_uri uri)) ;
-        (* now the parameters are surely possible *)
-        (match CicCache.get_obj uri with
-            C.Definition (_, _, _, params) ->
-              List.fold_right
-               (fun (_,l) i ->
-                 List.fold_right
-                  (fun x i -> S.singleton x @@ i) l i
-               ) params S.empty
-          | C.Axiom (_, _, params) ->
-             List.fold_right
-              (fun (_,l) i ->
-                List.fold_right
-                 (fun x i -> S.singleton x @@ i) l i
-              ) params S.empty
-          | C.CurrentProof _ -> S.empty (*CSC wrong *)
-          | _ -> raise WrongUriToConstant
-        )
-     | C.Abst _ -> S.empty
-     | C.MutInd (uri,_,_) ->
-        (match CicCache.get_obj uri with
-            C.InductiveDefinition (_, params, _) ->
-             List.fold_right
-              (fun (_,l) i ->
-                List.fold_right
-                 (fun x i -> S.singleton x @@ i) l i
-              ) params S.empty
-          | _ -> raise WrongUriToInductiveDefinition
-        )
-     | C.MutConstruct (uri,_,_,_) ->
-        (match CicCache.get_obj uri with
-            C.InductiveDefinition (_, params, _) ->
-             List.fold_right
-              (fun (_,l) i ->
-                List.fold_right
-                 (fun x i -> S.singleton x @@ i) l i
-              ) params S.empty
-          | _ -> raise WrongUriToInductiveDefinition
-        )
-     | C.MutCase (uri,_,_,outtype,term,patterns) ->
-        (*CSC cosa basta? Ci vuole anche uri? *)
-        (match CicCache.get_obj uri with
-            C.InductiveDefinition (_, params, _) ->
-            List.fold_right
-             (fun (_,l) i ->
-               List.fold_right
-                (fun x i -> S.singleton x @@ i) l i
-             ) params S.empty
-          | _ -> raise WrongUriToInductiveDefinition
-        ) @@ aux outtype @@ aux term @@
-         List.fold_right (fun x i -> aux x @@ i) patterns S.empty
-     | C.Fix (_,fl) ->
-        List.fold_right
-         (fun (_,_,ty,bo) i  -> aux ty @@ aux bo @@ i)
-         fl S.empty
-     | C.CoFix (_,fl) ->
-        List.fold_right
-         (fun (_,ty,bo) i -> aux ty @@ aux bo @@ i)
-         fl S.empty
- in
-  let actual_params = aux te @@ aux ty in
-   (* sort_actual_params wants in input the ordered list of possible params *)
-   let rec sort_actual_params2 =
-    function
-       [] -> []
-     | he::tl when S.mem he actual_params -> he::(sort_actual_params2 tl)
-     | _::tl -> sort_actual_params2 tl
-   in
-    let rec sort_actual_params =
-     function
-        [] -> []
-      | (n,l)::tl -> (n, sort_actual_params2 l)::(sort_actual_params tl)
-    in
-     sort_actual_params pparams
-
-and fix_params uri filename =
- let module C = Cic in
-  let (ann, _, deann) = CicCache.get_annobj uri in
-   match ann, deann with
-      (C.ADefinition (xid, ann, id, te, ty, C.Possible pparams),
-       C.Definition (id', te', ty', _)) ->
-        (* let's freeze the object to avoid circular dependencies *)
-        CicCache.change_obj uri None ;
-        let real_params = parameters_of te' ty' pparams in
-         let fixed =
-          C.ADefinition (xid,ann,id,te,ty,C.Actual real_params)
-         in
-          Xml.pp (Cic2Xml.pp fixed uri) filename ;
-          (* unfreeze and fix the object *)
-          CicCache.change_obj uri
-           (Some (C.Definition (id', te', ty', real_params)))
-    | _ -> ()
-;;
diff --git a/helm/interface/cicParser.ml b/helm/interface/cicParser.ml
deleted file mode 100644 (file)
index bf75243..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This is the main (top level) module of a parser for cic objects from xml   *)
-(* files to the internal representation. It uses the modules cicParser2       *)
-(* (objects level) and cicParser3 (terms level)                               *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception Warnings;;
-
-class warner =
-  object 
-    method warn w =
-      print_endline ("WARNING: " ^ w) ;
-      (raise Warnings : unit)
-  end
-;;
-
-exception EmptyUri;;
-
-(* given an uri u it returns the list of tokens of the base uri of u *)
-(* e.g.: token_of_uri "cic:/a/b/c/d.xml" returns ["a" ; "b" ; "c"]   *)
-let tokens_of_uri uri =
- let uri' = UriManager.string_of_uri uri in
- let rec chop_list =
-  function
-     [] -> raise EmptyUri
-   | he::[fn] -> [he]
-   | he::tl -> he::(chop_list tl)
- in
-  let trimmed_uri = Str.replace_first (Str.regexp "cic:") "" uri' in
-   let list_of_tokens = Str.split (Str.regexp "/") trimmed_uri in
-    chop_list list_of_tokens
-;;
-
-(* given the filename of an xml file of a cic object it returns its internal *)
-(* representation. process_annotations is true if the annotations do really  *)
-(* matter                                                                    *)
-let term_of_xml filename uri process_annotations =
- let module Y = Pxp_yacc in
-  try 
-    let d =
-      (* sets the current base uri to resolve relative URIs *)
-      CicParser3.current_sp := tokens_of_uri uri ;
-      CicParser3.current_uri := uri ;
-      CicParser3.process_annotations := process_annotations ;
-      CicParser3.ids_to_targets :=
-       if process_annotations then Some (Hashtbl.create 500) else None ;
-      let config = {Y.default_config with Y.warner = new warner} in
-      Y.parse_document_entity config
-(*PXP       (Y.ExtID (Pxp_types.System filename,
-         new Pxp_reader.resolve_as_file ~url_of_id ()))
-*)     (PxpUriResolver.from_file filename)
-       CicParser3.domspec
-    in
-     let ids_to_targets = !CicParser3.ids_to_targets in
-      let res = (CicParser2.get_term d#root, ids_to_targets) in
-       CicParser3.ids_to_targets := None ; (* let's help the GC *)
-       res
-  with
-   e ->
-     print_endline ("Filename: " ^ filename ^ "\nException: ") ;
-     print_endline (Pxp_types.string_of_exn e) ;
-     raise e
-;;
diff --git a/helm/interface/cicParser.mli b/helm/interface/cicParser.mli
deleted file mode 100644 (file)
index 0078f6f..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 22/03/2000                                 *)
-(*                                                                            *)
-(* This is the main (top level) module of a parser for cic objects from xml   *)
-(* files to the internal representation. It uses the modules cicParser2       *)
-(* (objects level) and cicParser3 (terms level)                               *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* given the filename of an xml file of a cic object and it's uri, it returns *)
-(* its internal annotated representation. The boolean is set to true if the   *)
-(* annotations do really matter                                               *)
-val term_of_xml :
- string -> UriManager.uri -> bool ->
-  Cic.annobj * (Cic.id, Cic.anntarget) Hashtbl.t option
diff --git a/helm/interface/cicParser2.ml b/helm/interface/cicParser2.ml
deleted file mode 100644 (file)
index 562f79b..0000000
+++ /dev/null
@@ -1,289 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@@cs.unibo.it>              *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module is the objects level of a parser for cic objects from xml      *)
-(* files to the internal representation. It uses the module cicParser3        *)
-(* cicParser3 (terms level) and it is used only through cicParser2 (top       *)
-(* level).                                                                    *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception IllFormedXml of int;;
-exception NotImplemented;;
-
-(* Utility functions that transform a Pxp attribute into something useful *)
-
-(* mk_absolute_uris "n1: v1 ... vn n2 : u1 ... un ...."      *)
-(* returns [(n1,[absolute_uri_for_v1 ; ... ; absolute_uri_for_vn]) ; (n2,...) *)
-let mk_absolute_uris s =
- let l = (Str.split (Str.regexp ":") s) in
-  let absolute_of_relative n v =
-   let module P3 = CicParser3 in
-    let rec mkburi =
-     function
-        (0,_) -> "/"
-      | (n,he::tl) when n > 0 ->
-         "/" ^ he ^ mkburi (n - 1, tl)
-      | _ -> raise (IllFormedXml 12)
-    in
-     let m = List.length !P3.current_sp - (int_of_string n) in
-      let buri = mkburi (m, !P3.current_sp) in
-       UriManager.uri_of_string ("cic:" ^ buri ^ v ^ ".var")
-  in
-   let rec absolutize =
-    function
-       [] -> []
-     | [no ; vs] ->
-        let vars = (Str.split (Str.regexp " ") vs) in
-         [(int_of_string no, List.map (absolute_of_relative no) vars)]
-     | no::vs::tl -> 
-        let vars = (Str.split (Str.regexp " ") vs) in
-         let rec add_prefix =
-          function
-             [no2] -> ([], no2)
-           | he::tl ->
-              let (pvars, no2) = add_prefix tl in
-               ((absolute_of_relative no he)::pvars, no2)
-           | _ -> raise (IllFormedXml 11)
-         in
-          let (pvars, no2) = add_prefix vars in
-           (int_of_string no, pvars)::(absolutize (no2::tl))
-     | _ -> raise (IllFormedXml 10)
-   in
-    (* last parameter must be applied first *)
-    absolutize l
-;;
-
-let option_uri_list_of_attr a1 a2 =
- let module T = Pxp_types in
-  let parameters =
-   match a1 with
-      T.Value s -> mk_absolute_uris s
-    | _ -> raise (IllFormedXml 0)
-  in
-   match a2 with
-      T.Value "POSSIBLE" -> Cic.Possible parameters
-    | T.Implied_value -> Cic.Actual parameters
-    | _ -> raise (IllFormedXml 0)
-;;
-
-let uri_list_of_attr a =
- let module T = Pxp_types in
-  match a with
-     T.Value s -> mk_absolute_uris s
-   | _ -> raise (IllFormedXml 0)
-;;
-
-let string_of_attr a =
- let module T = Pxp_types in
-  match a with
-     T.Value s -> s
-   | _ -> raise (IllFormedXml 0)
-;;
-
-let int_of_attr a =
- int_of_string (string_of_attr a)
-;;
-
-let bool_of_attr a =
- bool_of_string (string_of_attr a)
-;;
-
-(* Other utility functions *)
-
-let get_content n =
- match n#sub_nodes with
-    [ t ] -> t
-  | _     -> raise (IllFormedXml 1)
-;;
-
-let register_id id node =
- if !CicParser3.process_annotations then
-  match !CicParser3.ids_to_targets with
-     None -> assert false
-   | Some ids_to_targets ->
-      Hashtbl.add ids_to_targets id (Cic.Object node)
-;;
-
-(* Functions that, given the list of sons of a node of the cic dom (objects   *)
-(* level), retrieve the internal representation associated to the node.       *)
-(* Everytime a cic term subtree is found, it is translated to the internal    *)
-(* representation using the method to_cic_term defined in cicParser3.         *)
-(* Each function raise IllFormedXml if something goes wrong, but this should  *)
-(* be impossible due to the presence of the dtd                               *)
-(* The functions should really be obvious looking at their name and the cic   *)
-(* dtd                                                                        *)
-
-(* called when a CurrentProof is found *)
-let get_conjs_value_type l =
- let rec rget (c, v, t) l =
-  let module D = Pxp_document in
-   match l with
-      [] -> (c, v, t)
-    | conj::tl when conj#node_type = D.T_element "Conjecture" ->
-       let no = int_of_attr (conj#attribute "no")
-       and typ = (get_content conj)#extension#to_cic_term in
-        rget ((no, typ)::c, v, t) tl
-    | value::tl when value#node_type = D.T_element "body" ->
-       let v' = (get_content value)#extension#to_cic_term in
-        (match v with
-            None -> rget (c, Some v', t) tl
-          | _    -> raise (IllFormedXml 2)
-        )
-    | typ::tl when typ#node_type = D.T_element "type" ->
-       let t' = (get_content typ)#extension#to_cic_term in
-        (match t with
-            None -> rget (c, v, Some t') tl
-          | _    -> raise (IllFormedXml 3)
-        )
-    | _ -> raise (IllFormedXml 4)
- in
-  match rget ([], None, None) l with
-     (c, Some v, Some t) -> (c, v, t)
-   | _ -> raise (IllFormedXml 5)
-;;
-
-(* used only by get_inductive_types; called one time for each inductive  *)
-(* definitions in a block of inductive definitions                       *)
-let get_names_arity_constructors l =
- let rec rget (a,c) l =
-  let module D = Pxp_document in
-   match l with
-      [] -> (a, c)
-    | arity::tl when arity#node_type = D.T_element "arity" ->
-       let a' = (get_content arity)#extension#to_cic_term in
-        rget (Some a',c) tl
-    | con::tl when con#node_type = D.T_element "Constructor" ->
-       let id = string_of_attr (con#attribute "name")
-       and ty = (get_content con)#extension#to_cic_term in
-         rget (a,(id,ty,ref None)::c) tl
-    | _ -> raise (IllFormedXml 9)
- in
-  match rget (None,[]) l with
-     (Some a, c) -> (a, List.rev c)
-   | _ -> raise (IllFormedXml 8)
-;;
-
-(* called when an InductiveDefinition is found *)
-let rec get_inductive_types =
- function
-    []     -> []
-  | he::tl ->
-     let tyname    = string_of_attr (he#attribute "name")
-     and inductive = bool_of_attr   (he#attribute "inductive")
-     and (arity,cons) =
-      get_names_arity_constructors (he#sub_nodes)
-     in
-      (tyname,inductive,arity,cons)::(get_inductive_types tl) (*CSC 0 a caso *)
-;;
-
-(* This is the main function and also the only one used directly from *)
-(* cicParser. Given the root of the dom tree, it returns the internal *)
-(* representation of the cic object described in the tree             *)
-(* It uses the previous functions and the to_cic_term method defined  *)
-(* in cicParser3 (used for subtrees that encode cic terms)            *)
-let rec get_term n =
- let module D = Pxp_document in
- let module C = Cic in
-  let ntype = n # node_type in
-  match ntype with
-    D.T_element "Definition" ->
-      let id = string_of_attr (n # attribute "name")
-      and params =
-       option_uri_list_of_attr (n#attribute "params") (n#attribute "paramMode")
-      and (value, typ) = 
-       let sons = n#sub_nodes in
-        match sons with
-          [v ; t] when
-            v#node_type = D.T_element "body" &&
-            t#node_type = D.T_element "type" ->
-             let v' = get_content v
-             and t' = get_content t in
-              (v'#extension#to_cic_term, t'#extension#to_cic_term)
-        | _ -> raise (IllFormedXml 6)
-      and xid = string_of_attr (n#attribute "id") in
-       let res = C.ADefinition (xid, ref None, id, value, typ, params) in
-        register_id xid res ;
-        res
-  | D.T_element "Axiom" ->
-      let id = string_of_attr (n # attribute "name")
-      and params = uri_list_of_attr (n # attribute "params")
-      and typ = 
-       (get_content (get_content n))#extension#to_cic_term
-      and xid = string_of_attr (n#attribute "id") in
-       let res = C.AAxiom (xid, ref None, id, typ, params) in
-        register_id xid res ;
-        res
-  | D.T_element "CurrentProof" ->
-     let name = string_of_attr (n#attribute "name")
-     and xid = string_of_attr (n#attribute "id") in
-     let sons = n#sub_nodes in
-      let (conjs, value, typ) = get_conjs_value_type sons in
-       let res = C.ACurrentProof (xid, ref None, name, conjs, value, typ) in
-        register_id xid res ;
-        res
-  | D.T_element "InductiveDefinition" ->
-     let sons = n#sub_nodes
-     and xid = string_of_attr (n#attribute "id") in
-      let inductiveTypes = get_inductive_types sons
-      and params = uri_list_of_attr (n#attribute "params")
-      and nparams = int_of_attr (n#attribute "noParams") in
-       let res =
-        C.AInductiveDefinition (xid, ref None, inductiveTypes, params, nparams)
-       in
-        register_id xid res ;
-        res
-  | D.T_element "Variable" ->
-     let name = string_of_attr (n#attribute "name")
-     and xid = string_of_attr (n#attribute "id")
-     and (body, typ) = 
-      let sons = n#sub_nodes in
-       match sons with
-          [b ; t] when
-            b#node_type = D.T_element "body" &&
-            t#node_type = D.T_element "type" ->
-             let b' = get_content b
-             and t' = get_content t in
-              (Some (b'#extension#to_cic_term), t'#extension#to_cic_term)
-        | [t] when t#node_type = D.T_element "type" ->
-             let t' = get_content t in
-              (None, t'#extension#to_cic_term)
-        | _ -> raise (IllFormedXml 6)
-     in
-      let res = C.AVariable (xid,ref None,name,body,typ) in
-       register_id xid res ;
-       res
-  | D.T_element _
-  | D.T_data
-  | _ ->
-     raise (IllFormedXml 7)
-;;
diff --git a/helm/interface/cicParser2.mli b/helm/interface/cicParser2.mli
deleted file mode 100644 (file)
index be0a000..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module is the objects level of a parser for cic objects from xml      *)
-(* files to the internal representation. It uses the module cicParser3        *)
-(* cicParser3 (terms level) and it is used only through cicParser2 (top       *)
-(* level).                                                                    *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception IllFormedXml of int
-exception NotImplemented
-
-(* This is the main function and also the only one used directly from *)
-(* cicParser. Given the root of the dom tree, it returns the internal *)
-(* representation of the cic object described in the tree             *)
-(* It uses the previous functions and the to_cic_term method defined  *)
-(* in cicParser3 (used for subtrees that encode cic terms)            *)
-val get_term :
- < attribute : string -> Pxp_types.att_value;
-   node_type : Pxp_document.node_type;
-   sub_nodes : < attribute : string -> Pxp_types.att_value;
-                 node_type : Pxp_document.node_type;
-                 sub_nodes : CicParser3.cic_term Pxp_document.node list;
-                 .. >
-               list;
-   .. > ->
- Cic.annobj
diff --git a/helm/interface/cicParser3.ml b/helm/interface/cicParser3.ml
deleted file mode 100644 (file)
index 54b417f..0000000
+++ /dev/null
@@ -1,564 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module is the terms level of a parser for cic objects from xml        *)
-(* files to the internal representation. It is used by the module cicParser2  *)
-(* (objects level). It defines an extension of the standard dom using the     *)
-(* object-oriented extension machinery of markup: an object with a method     *)
-(* to_cic_term that returns the internal representation of the subtree is     *)
-(* added to each node of the dom tree                                         *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception IllFormedXml of int;;
-
-(* The hashtable from the current identifiers to the object or the terms *)
-let ids_to_targets = ref None;;
-
-(* The list of tokens of the current section path. *)
-(* Used to resolve relative URIs                   *)
-let current_sp = ref [];;
-
-(* The uri of the object been parsed *)
-let current_uri = ref (UriManager.uri_of_string "cic:/.xml");;
-
-(* True if annotation really matter *)
-let process_annotations = ref false;;
-
-(* Utility functions to map a markup attribute to something useful *)
-
-let cic_attr_of_xml_attr =
- function
-    Pxp_types.Value s       -> Cic.Name s
-  | Pxp_types.Implied_value -> Cic.Anonimous
-  | _             -> raise (IllFormedXml 1)
-
-let cic_sort_of_xml_attr =
- function
-    Pxp_types.Value "Prop" -> Cic.Prop
-  | Pxp_types.Value "Set"  -> Cic.Set
-  | Pxp_types.Value "Type" -> Cic.Type
-  | _            -> raise (IllFormedXml 2)
-
-let int_of_xml_attr =
- function
-    Pxp_types.Value n -> int_of_string n
-  | _       -> raise (IllFormedXml 3)
-
-let uri_of_xml_attr =
- function
-    Pxp_types.Value s -> UriManager.uri_of_string s
-  | _       -> raise (IllFormedXml 4)
-
-let string_of_xml_attr =
- function
-    Pxp_types.Value s -> s
-  | _       -> raise (IllFormedXml 5)
-
-let binder_of_xml_attr =
- function
-    Pxp_types.Value s -> if !process_annotations then Some s else None
-  | _       -> raise (IllFormedXml 17)
-;;
-
-let register_id id node =
- if !process_annotations then
-  match !ids_to_targets with
-     None -> assert false
-   | Some ids_to_targets ->
-      Hashtbl.add ids_to_targets id (Cic.Term node)
-;;
-
-(* the "interface" of the class linked to each node of the dom tree *)
-
-class virtual cic_term =
-  object (self)
-
-    (* fields and methods ever required by markup *)
-    val mutable node = (None : cic_term Pxp_document.node option)
-
-    method clone = {< >} 
-    method node =
-      match node with
-          None ->
-            assert false
-        | Some n -> n
-    method set_node n =
-      node <- Some n
-
-    (* a method that returns the internal representation of the tree (term) *)
-    (* rooted in this node                                                  *)
-    method virtual to_cic_term : Cic.annterm
-  end
-;;
-
-(* the class of the objects linked to nodes that are not roots of cic terms *)
-class eltype_not_of_cic =
-  object (self)
-
-     inherit cic_term
-
-     method to_cic_term = raise (IllFormedXml 6)
-  end
-;;
-
-(* the class of the objects linked to nodes whose content is a cic term *)
-(* (syntactic sugar xml entities) e.g. <type> ... </type>               *)
-class eltype_transparent =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      match n#sub_nodes with
-         [ t ]  -> t#extension#to_cic_term
-       | _  -> raise (IllFormedXml 7)
-  end
-;;
-
-(* A class for each cic node type *)
-
-class eltype_fix =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let nofun = int_of_xml_attr (n#attribute "noFun")
-      and id = string_of_xml_attr (n#attribute "id")
-      and functions =
-       let sons = n#sub_nodes in
-        List.map
-         (function
-             f when f#node_type = Pxp_document.T_element "FixFunction" ->
-              let name = string_of_xml_attr (f#attribute "name")
-              and recindex = int_of_xml_attr (f#attribute "recIndex")
-              and (ty, body) =
-               match f#sub_nodes with
-                  [t ; b] when
-                    t#node_type = Pxp_document.T_element "type" &&
-                    b#node_type = Pxp_document.T_element "body" ->
-                     (t#extension#to_cic_term, b#extension#to_cic_term)
-                | _ -> raise (IllFormedXml 14)
-              in
-               (name, recindex, ty, body)
-           | _ -> raise (IllFormedXml 13)
-         ) sons
-      in
-       let res = Cic.AFix (id, ref None, nofun, functions) in
-        register_id id res ;
-        res
-  end
-;;
-
-class eltype_cofix =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let nofun = int_of_xml_attr (n#attribute "noFun")
-      and id = string_of_xml_attr (n#attribute "id")
-      and functions =
-       let sons = n#sub_nodes in
-        List.map
-         (function
-             f when f#node_type = Pxp_document.T_element "CofixFunction" ->
-              let name = string_of_xml_attr (f#attribute "name")
-              and (ty, body) =
-               match f#sub_nodes with
-                  [t ; b] when
-                    t#node_type = Pxp_document.T_element "type" &&
-                    b#node_type = Pxp_document.T_element "body" ->
-                     (t#extension#to_cic_term, b#extension#to_cic_term)
-                | _ -> raise (IllFormedXml 16)
-              in
-               (name, ty, body)
-           | _ -> raise (IllFormedXml 15)
-         ) sons
-      in
-       let res = Cic.ACoFix (id, ref None, nofun, functions) in
-        register_id id res ;
-        res
-  end
-;;
-
-class eltype_implicit =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let id = string_of_xml_attr (n#attribute "id") in
-       let res = Cic.AImplicit (id, ref None) in
-        register_id id res ;
-        res
-  end
-;;
-
-class eltype_rel =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let value  = int_of_xml_attr (n#attribute "value")
-      and binder = binder_of_xml_attr (n#attribute "binder")
-      and id = string_of_xml_attr (n#attribute "id") in
-       let res = Cic.ARel (id,ref None,value,binder) in
-        register_id id res ;
-        res
-  end
-;;
-
-class eltype_meta =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let value = int_of_xml_attr (n#attribute "no")
-      and id = string_of_xml_attr (n#attribute "id") in
-       let res = Cic.AMeta (id,ref None,value) in
-        register_id id res ;
-        res
-  end
-;;
-
-class eltype_var =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let name = string_of_xml_attr (n#attribute "relUri")
-      and xid = string_of_xml_attr (n#attribute "id") in
-       match Str.split (Str.regexp ",") name with
-          [index; id] ->
-           let get_prefix n =
-            let rec aux =
-             function
-                (0,_) -> "/"
-              | (n,he::tl) when n > 0 -> "/" ^ he ^ aux (n - 1, tl)
-              | _ -> raise (IllFormedXml 19)
-            in   
-             aux (List.length !current_sp - n,!current_sp)
-           in
-            let res =
-             Cic.AVar
-              (xid,ref None, 
-               (UriManager.uri_of_string
-                ("cic:" ^ get_prefix (int_of_string index) ^ id ^ ".var"))
-              )
-            in
-             register_id id res ;
-             res
-        | _ -> raise (IllFormedXml 18)
-  end
-;;
-
-class eltype_apply =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let children = n#sub_nodes
-      and id = string_of_xml_attr (n#attribute "id") in
-       if List.length children < 2 then raise (IllFormedXml 8)
-       else
-        let res =
-         Cic.AAppl
-          (id,ref None,List.map (fun x -> x#extension#to_cic_term) children)
-        in
-         register_id id res ;
-         res
-  end
-;;
-
-class eltype_cast =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let sons = n#sub_nodes
-      and id = string_of_xml_attr (n#attribute "id") in
-       match sons with
-          [te ; ty] when
-            te#node_type = Pxp_document.T_element "term" &&
-            ty#node_type = Pxp_document.T_element "type" ->
-             let term = te#extension#to_cic_term
-             and typ  = ty#extension#to_cic_term in
-              let res = Cic.ACast (id,ref None,term,typ) in
-               register_id id res ;
-               res
-        | _  -> raise (IllFormedXml 9)
-  end
-;;
-
-class eltype_sort =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let sort = cic_sort_of_xml_attr (n#attribute "value")
-      and id = string_of_xml_attr (n#attribute "id") in
-       let res = Cic.ASort (id,ref None,sort) in
-        register_id id res ;
-        res
-  end
-;;
-
-class eltype_abst =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let value = uri_of_xml_attr (n#attribute "uri")
-      and id = string_of_xml_attr (n#attribute "id") in
-       let res = Cic.AAbst (id,ref None,value) in
-        register_id id res ;
-        res
-  end
-;;
-
-class eltype_const =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let module U = UriManager in
-      let n = self#node in
-       let value = uri_of_xml_attr (n#attribute "uri")
-       and id = string_of_xml_attr (n#attribute "id") in
-        let res =
-         Cic.AConst (id,ref None,value, U.relative_depth !current_uri value 0)
-        in
-         register_id id res ;
-         res
-  end
-;;
-
-class eltype_mutind =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let module U = UriManager in
-      let n = self#node in
-       let name = uri_of_xml_attr (n#attribute "uri")
-       and noType = int_of_xml_attr (n#attribute "noType")
-       and id = string_of_xml_attr (n#attribute "id") in
-        let res =
-         Cic.AMutInd
-          (id,ref None,name, U.relative_depth !current_uri name 0, noType)
-        in
-         register_id id res ;
-         res
-  end
-;;
-
-class eltype_mutconstruct =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let module U = UriManager in
-      let n = self#node in
-       let name = uri_of_xml_attr (n#attribute "uri")
-       and noType = int_of_xml_attr (n#attribute "noType")
-       and noConstr = int_of_xml_attr (n#attribute "noConstr")
-       and id = string_of_xml_attr (n#attribute "id") in
-        let res = 
-         Cic.AMutConstruct
-          (id, ref None, name, U.relative_depth !current_uri name 0,
-          noType, noConstr)
-        in
-         register_id id res ;
-         res
-  end
-;;
-
-class eltype_prod =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let sons = n#sub_nodes
-      and id = string_of_xml_attr (n#attribute "id") in
-       match sons with
-          [s ; t] when
-            s#node_type = Pxp_document.T_element "source" &&
-            t#node_type = Pxp_document.T_element "target" ->
-             let name = cic_attr_of_xml_attr (t#attribute "binder")
-             and source = s#extension#to_cic_term
-             and target = t#extension#to_cic_term in
-              let res = Cic.AProd (id,ref None,name,source,target) in
-               register_id id res ;
-               res
-        | _  -> raise (IllFormedXml 10)
-  end
-;;
-
-class eltype_mutcase =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let module U = UriManager in
-      let n = self#node in
-       let sons = n#sub_nodes
-       and id = string_of_xml_attr (n#attribute "id") in
-        match sons with
-           ty::te::patterns when
-             ty#node_type = Pxp_document.T_element "patternsType" &&
-             te#node_type = Pxp_document.T_element "inductiveTerm" ->
-              let ci = uri_of_xml_attr (n#attribute "uriType")
-              and typeno = int_of_xml_attr (n#attribute "noType")
-              and inductiveType = ty#extension#to_cic_term
-              and inductiveTerm = te#extension#to_cic_term
-              and lpattern= List.map (fun x -> x#extension#to_cic_term) patterns
-              in
-               let res =
-                Cic.AMutCase (id,ref None,ci,U.relative_depth !current_uri ci 0,
-                 typeno,inductiveType,inductiveTerm,lpattern)
-               in
-                register_id id res ;
-                res
-         | _  -> raise (IllFormedXml 11)
-  end
-;;
-
-class eltype_lambda =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let sons = n#sub_nodes
-      and id = string_of_xml_attr (n#attribute "id") in
-       match sons with
-          [s ; t] when
-            s#node_type = Pxp_document.T_element "source" &&
-            t#node_type = Pxp_document.T_element "target" ->
-             let name = cic_attr_of_xml_attr (t#attribute "binder")
-             and source = s#extension#to_cic_term
-             and target = t#extension#to_cic_term in
-              let res = Cic.ALambda (id,ref None,name,source,target) in
-               register_id id res ;
-               res
-        | _  -> raise (IllFormedXml 12)
-  end
-;;
-
-class eltype_letin =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term =
-     let n = self#node in
-      let sons = n#sub_nodes
-      and id = string_of_xml_attr (n#attribute "id") in
-       match sons with
-          [s ; t] when
-            s#node_type = Pxp_document.T_element "term" &&
-            t#node_type = Pxp_document.T_element "letintarget" ->
-             let name = cic_attr_of_xml_attr (t#attribute "binder")
-             and source = s#extension#to_cic_term
-             and target = t#extension#to_cic_term in
-              let res = Cic.ALetIn (id,ref None,name,source,target) in
-               register_id id res ;
-               res
-        | _  -> raise (IllFormedXml 12)
-  end
-;;
-
-(* The definition of domspec, an hashtable that maps each node type to the *)
-(* object that must be linked to it. Used by markup.                       *)
-
-let domspec =
- let module D = Pxp_document in
-  D.make_spec_from_alist
-   ~data_exemplar: (new D.data_impl (new eltype_not_of_cic))
-   ~default_element_exemplar: (new D.element_impl (new eltype_not_of_cic))
-   ~element_alist:
-    [ "REL",           (new D.element_impl (new eltype_rel)) ;
-      "VAR",           (new D.element_impl (new eltype_var)) ;
-      "META",          (new D.element_impl (new eltype_meta)) ;
-      "SORT",          (new D.element_impl (new eltype_sort)) ;
-      "IMPLICIT",      (new D.element_impl (new eltype_implicit)) ;
-      "CAST",          (new D.element_impl (new eltype_cast)) ;
-      "PROD",          (new D.element_impl (new eltype_prod)) ;
-      "LAMBDA",        (new D.element_impl (new eltype_lambda)) ;
-      "LETIN",         (new D.element_impl (new eltype_letin)) ;
-      "APPLY",         (new D.element_impl (new eltype_apply)) ;
-      "CONST",         (new D.element_impl (new eltype_const)) ;
-      "ABST",          (new D.element_impl (new eltype_abst)) ;
-      "MUTIND",        (new D.element_impl (new eltype_mutind)) ;
-      "MUTCONSTRUCT",  (new D.element_impl (new eltype_mutconstruct)) ;
-      "MUTCASE",       (new D.element_impl (new eltype_mutcase)) ;
-      "FIX",           (new D.element_impl (new eltype_fix)) ;
-      "COFIX",         (new D.element_impl (new eltype_cofix)) ;
-      "arity",         (new D.element_impl (new eltype_transparent)) ;
-      "term",          (new D.element_impl (new eltype_transparent)) ;
-      "type",          (new D.element_impl (new eltype_transparent)) ;
-      "body",          (new D.element_impl (new eltype_transparent)) ;
-      "source",        (new D.element_impl (new eltype_transparent)) ;
-      "target",        (new D.element_impl (new eltype_transparent)) ;
-      "patternsType",  (new D.element_impl (new eltype_transparent)) ;
-      "inductiveTerm", (new D.element_impl (new eltype_transparent)) ;
-      "pattern",       (new D.element_impl (new eltype_transparent))
-    ]
-   ()
-;;
diff --git a/helm/interface/cicParser3.mli b/helm/interface/cicParser3.mli
deleted file mode 100644 (file)
index ada1b2e..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module is the terms level of a parser for cic objects from xml        *)
-(* files to the internal representation. It is used by the module cicParser2  *)
-(* (objects level). It defines an extension of the standard dom using the     *)
-(* object-oriented extension machinery of markup: an object with a method     *)
-(* to_cic_term that returns the internal representation of the subtree is     *)
-(* added to each node of the dom tree                                         *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception IllFormedXml of int
-
-val ids_to_targets : (Cic.id, Cic.anntarget) Hashtbl.t option ref
-val current_sp : string list ref
-val current_uri : UriManager.uri ref
-val process_annotations : bool ref
-
-(* the "interface" of the class linked to each node of the dom tree *)
-class virtual cic_term :
-  object ('a)
-
-    (* fields and methods ever required by markup *)
-    val mutable node : cic_term Pxp_document.node option
-    method clone : 'a
-    method node : cic_term Pxp_document.node
-    method set_node : cic_term Pxp_document.node -> unit
-
-    (* a method that returns the internal representation of the tree (term) *)
-    (* rooted in this node                                                  *)
-    method virtual to_cic_term : Cic.annterm
-
-  end
-
-(* The definition of domspec, an hashtable that maps each node type to the *)
-(* object that must be linked to it. Used by markup.                       *)
-val domspec : cic_term Pxp_document.spec
diff --git a/helm/interface/cicPp.ml b/helm/interface/cicPp.ml
deleted file mode 100644 (file)
index 0270f99..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module implements a very simple Coq-like pretty printer that, given   *)
-(* an object of cic (internal representation) returns a string describing the *)
-(* object in a syntax similar to that of coq                                  *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception CicPpInternalError;;
-
-(* Utility functions *)
-
-let string_of_name =
- function
-    Cic.Name s     -> s
-  | Cic.Anonimous  -> "_"
-;;
-
-(* get_nth l n   returns the nth element of the list l if it exists or raise *)
-(* a CicPpInternalError if l has less than n elements or n < 1               *)
-let rec get_nth l n =
- match (n,l) with
-    (1, he::_) -> he
-  | (n, he::tail) when n > 1 -> get_nth tail (n-1)
-  | (_,_) -> raise CicPpInternalError
-;;
-
-(* pp t l                                                                  *)
-(* pretty-prints a term t of cic in an environment l where l is a list of  *)
-(* identifier names used to resolve DeBrujin indexes. The head of l is the *)
-(* name associated to the greatest DeBrujin index in t                     *)
-let rec pp t l =
- let module C = Cic in
-   match t with
-      C.Rel n ->
-       (match get_nth l n with
-           C.Name s -> s
-         | _        -> raise CicPpInternalError
-       )
-    | C.Var uri -> UriManager.name_of_uri uri
-    | C.Meta n -> "?" ^ (string_of_int n)
-    | C.Sort s ->
-       (match s with
-           C.Prop -> "Prop"
-         | C.Set  -> "Set"
-         | C.Type -> "Type"
-       )
-    | C.Implicit -> "?"
-    | C.Prod (b,s,t) ->
-       (match b with
-          C.Name n -> "(" ^ n ^ ":" ^ pp s l ^ ")" ^ pp t (b::l)
-        | C.Anonimous -> "(" ^ pp s l ^ "->" ^ pp t (b::l) ^ ")"
-       )
-    | C.Cast (v,t) -> pp v l
-    | C.Lambda (b,s,t) ->
-       "[" ^ string_of_name b ^ ":" ^ pp s l ^ "]" ^ pp t (b::l)
-    | C.LetIn (b,s,t) ->
-       "[" ^ string_of_name b ^ ":=" ^ pp s l ^ "]" ^ pp t (b::l)
-    | C.Appl li ->
-       "(" ^
-       (List.fold_right
-        (fun x i -> pp x l ^ (match i with "" -> "" | _ -> " ") ^ i)
-        li ""
-       ) ^ ")"
-    | C.Const (uri,_) -> UriManager.name_of_uri uri
-    | C.Abst uri -> UriManager.name_of_uri uri
-    | C.MutInd (uri,_,n) ->
-       (match CicCache.get_obj uri with
-           C.InductiveDefinition (dl,_,_) ->
-            let (name,_,_,_) = get_nth dl (n+1) in
-             name
-         | _ -> raise CicPpInternalError
-       )
-    | C.MutConstruct (uri,_,n1,n2) ->
-       (match CicCache.get_obj uri with
-           C.InductiveDefinition (dl,_,_) ->
-            let (_,_,_,cons) = get_nth dl (n1+1) in
-             let (id,_,_) = get_nth cons n2 in
-              id
-         | _ -> raise CicPpInternalError
-       )
-    | C.MutCase (uri,_,n1,ty,te,patterns) ->
-       let connames =
-        (match CicCache.get_obj uri with
-            C.InductiveDefinition (dl,_,_) ->
-             let (_,_,_,cons) = get_nth dl (n1+1) in
-              List.map (fun (id,_,_) -> id) cons
-          | _ -> raise CicPpInternalError
-        )
-       in
-        "\n<" ^ pp ty l ^ ">Cases " ^ pp te l ^ " of " ^
-          List.fold_right (fun (x,y) i -> "\n " ^ x ^ " => " ^ pp y l ^ i)
-           (List.combine connames patterns) "" ^
-          "\nend"
-    | C.Fix (no, funs) ->
-       let snames = List.map (fun (name,_,_,_) -> name) funs in
-        let names = List.rev (List.map (function name -> C.Name name) snames) in
-         "\nFix " ^ get_nth snames (no + 1) ^ " {" ^
-         List.fold_right
-          (fun (name,ind,ty,bo) i -> "\n" ^ name ^ " / " ^ string_of_int ind ^
-            " : " ^ pp ty l ^ " := \n" ^
-            pp bo (names@l) ^ i)
-          funs "" ^
-         "}\n"
-    | C.CoFix (no,funs) ->
-       let snames = List.map (fun (name,_,_) -> name) funs in
-        let names = List.rev (List.map (function name -> C.Name name) snames) in
-         "\nCoFix " ^ get_nth snames (no + 1) ^ " {" ^
-         List.fold_right
-          (fun (name,ty,bo) i -> "\n" ^ name ^ 
-            " : " ^ pp ty l ^ " := \n" ^
-            pp bo (names@l) ^ i)
-          funs "" ^
-         "}\n"
-;;
-
-(* ppinductiveType (typename, inductive, arity, cons) names                 *)
-(* pretty-prints a single inductive definition (typename, inductive, arity, *)
-(*  cons) where the cic terms in the inductive definition need to be        *)
-(*  evaluated in the environment names that is the list of typenames of the *)
-(*  mutual inductive definitions defined in the block of mutual inductive   *)
-(*  definitions to which this one belongs to                                *)
-let ppinductiveType (typename, inductive, arity, cons) names =
-  (if inductive then "\nInductive " else "\nCoInductive ") ^ typename ^ ": " ^
-  (*CSC: bug found: was pp arity names ^ " =\n   " ^*)
-  pp arity [] ^ " =\n   " ^
-  List.fold_right
-   (fun (id,ty,_) i -> id ^ " : " ^ pp ty names ^ 
-    (if i = "" then "\n" else "\n | ") ^ i)
-   cons ""
-;;
-
-(* ppobj obj  returns a string with describing the cic object obj in a syntax *)
-(* similar to the one used by Coq                                             *)
-let ppobj obj =
- let module C = Cic in
- let module U = UriManager in
-  match obj with
-    C.Definition (id, t1, t2, params) ->
-      "Definition of " ^ id ^
-      "(" ^
-      List.fold_right
-       (fun (_,x) i ->
-         List.fold_right
-          (fun x i ->
-            U.string_of_uri x ^ match i with "" -> "" | i' -> " " ^ i'
-          ) x "" ^ match i with "" -> "" | i' -> " " ^ i'
-       ) params "" ^ ")" ^
-      ":\n" ^ pp t1 [] ^ " : " ^ pp t2 []
-   | C.Axiom (id, ty, params) ->
-      "Axiom " ^ id ^ "(" ^
-      List.fold_right
-       (fun (_,x) i ->
-         List.fold_right
-          (fun x i ->
-            U.string_of_uri x ^ match i with "" -> "" | i' -> " " ^ i'
-          ) x "" ^ match i with "" -> "" | i' -> " " ^ i'
-       ) params "" ^
-      "):\n" ^ pp ty []
-   | C.Variable (name, bo, ty) ->
-      "Variable " ^ name ^ ":\n" ^ pp ty [] ^ "\n" ^
-      (match bo with None -> "" | Some bo -> ":= " ^ pp bo [])
-   | C.CurrentProof (name, conjectures, value, ty) ->
-      "Current Proof:\n" ^
-      List.fold_right
-       (fun (n, t) i -> "?" ^ (string_of_int n) ^ ": " ^ pp t [] ^ "\n" ^ i)
-       conjectures "" ^
-      "\n" ^ pp value [] ^ " : " ^ pp ty [] 
-   | C.InductiveDefinition (l, params, nparams) ->
-      "Parameters = " ^
-      List.fold_right
-       (fun (_,x) i ->
-         List.fold_right
-          (fun x i ->
-            U.string_of_uri x ^ match i with "" -> "" | i' -> " " ^ i'
-          ) x "" ^ match i with "" -> "" | i' -> " " ^ i'
-       ) params "" ^ "\n" ^
-      "NParams = " ^ string_of_int nparams ^ "\n" ^
-      let names = List.rev (List.map (fun (n,_,_,_) -> C.Name n) l) in
-       List.fold_right (fun x i -> ppinductiveType x names ^ i) l ""
-;;
diff --git a/helm/interface/cicPp.mli b/helm/interface/cicPp.mli
deleted file mode 100644 (file)
index 99757d1..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module implements a very simple Coq-like pretty printer that, given   *)
-(* an object of cic (internal representation) returns a string describing the *)
-(* object in a syntax similar to that of coq                                  *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* ppobj obj  returns a string with describing the cic object obj in a syntax *)
-(* similar to the one used by Coq                                             *)
-val ppobj : Cic.obj -> string
diff --git a/helm/interface/cicReduction.ml b/helm/interface/cicReduction.ml
deleted file mode 100644 (file)
index 65e2f71..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception CicReductionInternalError;;
-exception WrongUriToInductiveDefinition;;
-
-let fdebug = ref 1;;
-let debug t env s =
- let rec debug_aux t i =
-  let module C = Cic in
-  let module U = UriManager in
-   CicPp.ppobj (C.Variable ("DEBUG", None,
-    C.Prod (C.Name "-9", C.Const (U.uri_of_string "cic:/dummy-9",0),
-     C.Prod (C.Name "-8", C.Const (U.uri_of_string "cic:/dummy-8",0),
-      C.Prod (C.Name "-7", C.Const (U.uri_of_string "cic:/dummy-7",0),
-       C.Prod (C.Name "-6", C.Const (U.uri_of_string "cic:/dummy-6",0),
-        C.Prod (C.Name "-5", C.Const (U.uri_of_string "cic:/dummy-5",0),
-         C.Prod (C.Name "-4", C.Const (U.uri_of_string "cic:/dummy-4",0),
-          C.Prod (C.Name "-3", C.Const (U.uri_of_string "cic:/dummy-3",0),
-           C.Prod (C.Name "-2", C.Const (U.uri_of_string "cic:/dummy-2",0),
-            C.Prod (C.Name "-1", C.Const (U.uri_of_string "cic:/dummy-1",0),
-             t
-            )
-           )
-          )
-         )
-        )
-       )
-      )
-     )
-    )
-    )) ^ "\n" ^ i
- in
-  if !fdebug = 0 then
-   begin
-    print_endline (s ^ "\n" ^ List.fold_right debug_aux (t::env) "") ;
-    flush stdout
-   end
-;;
-
-exception Impossible of int;;
-exception ReferenceToDefinition;;
-exception ReferenceToAxiom;;
-exception ReferenceToVariable;;
-exception ReferenceToCurrentProof;;
-exception ReferenceToInductiveDefinition;;
-
-(* takes a well-typed term *)
-let whd =
- let rec whdaux l =
-  let module C = Cic in
-  let module S = CicSubstitution in
-   function
-      C.Rel _ as t -> if l = [] then t else C.Appl (t::l)
-    | C.Var _ as t -> if l = [] then t else C.Appl (t::l)
-    | C.Meta _ as t -> if l = [] then t else C.Appl (t::l)
-    | C.Sort _ as t -> t (* l should be empty *)
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) -> whdaux l te  (*CSC E' GIUSTO BUTTARE IL CAST? *)
-    | C.Prod _ as t -> t (* l should be empty *)
-    | C.Lambda (name,s,t) as t' ->
-       (match l with
-           [] -> t'
-         | he::tl -> whdaux tl (S.subst he t)
-           (* when name is Anonimous the substitution should be superfluous *)
-       )
-    | C.Appl (he::tl) -> whdaux (tl@l) he
-    | C.Appl [] -> raise (Impossible 1)
-    | C.Const (uri,cookingsno) as t ->
-       (match CicCache.get_cooked_obj uri cookingsno with
-           C.Definition (_,body,_,_) -> whdaux l body
-         | C.Axiom _ -> if l = [] then t else C.Appl (t::l)
-         (*CSC: Prossima riga sbagliata: Var punta alle variabili, non Const *)
-         | C.Variable _ -> if l = [] then t else C.Appl (t::l)
-         | C.CurrentProof (_,_,body,_) -> whdaux l body
-         | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-       )
-    | C.Abst _ as t -> t (*CSC l should be empty ????? *)
-    | C.MutInd (uri,_,_) as t -> if l = [] then t else C.Appl (t::l)
-    | C.MutConstruct (uri,_,_,_) as t -> if l = [] then t else C.Appl (t::l)
-    | C.MutCase (mutind,cookingsno,i,_,term,pl) as t ->
-       let decofix =
-        function
-           C.CoFix (i,fl) as t ->
-            let (_,_,body) = List.nth fl i in
-             let body' =
-              let counter = ref (List.length fl) in
-               List.fold_right
-                (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl)))
-                fl
-                body
-             in
-              whdaux [] body'
-         | C.Appl (C.CoFix (i,fl) :: tl) ->
-            let (_,_,body) = List.nth fl i in
-             let body' =
-              let counter = ref (List.length fl) in
-               List.fold_right
-                (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl)))
-                fl
-                body
-             in
-              whdaux tl body'
-         | t -> t
-       in
-        (match decofix (whdaux [] term) with
-            C.MutConstruct (_,_,_,j) -> whdaux l (List.nth pl (j-1))
-          | C.Appl (C.MutConstruct (_,_,_,j) :: tl) ->
-             let (arity, r, num_ingredients) =
-              match CicCache.get_obj mutind with
-                 C.InductiveDefinition (tl,ingredients,r) ->
-                   let (_,_,arity,_) = List.nth tl i
-                   and num_ingredients =
-                    List.fold_right
-                     (fun (k,l) i ->
-                       if k < cookingsno then i + List.length l else i
-                     ) ingredients 0
-                   in
-                    (arity,r,num_ingredients)
-               | _ -> raise WrongUriToInductiveDefinition
-             in
-              let ts =
-               let num_to_eat = r + num_ingredients in
-                let rec eat_first =
-                 function
-                    (0,l) -> l
-                  | (n,he::tl) when n > 0 -> eat_first (n - 1, tl)
-                  | _ -> raise (Impossible 5)
-                in
-                 eat_first (num_to_eat,tl)
-              in
-               whdaux (ts@l) (List.nth pl (j-1))
-         | C.Abst _| C.Cast _ | C.Implicit ->
-            raise (Impossible 2) (* we don't trust our whd ;-) *)
-         | _ -> t
-       )
-    | C.Fix (i,fl) as t ->
-       let (_,recindex,_,body) = List.nth fl i in
-        let recparam =
-         try
-          Some (List.nth l recindex)
-         with
-          _ -> None
-        in
-         (match recparam with
-             Some recparam ->
-              (match whdaux [] recparam with
-                  C.MutConstruct _
-                | C.Appl ((C.MutConstruct _)::_) ->
-                   let body' =
-                    let counter = ref (List.length fl) in
-                     List.fold_right
-                      (fun _ -> decr counter ; S.subst (C.Fix (!counter,fl)))
-                      fl
-                      body
-                   in
-                    (* Possible optimization: substituting whd recparam in l *)
-                    whdaux l body'
-               | _ -> if l = [] then t else C.Appl (t::l)
-             )
-          | None -> if l = [] then t else C.Appl (t::l)
-         )
-    | C.CoFix (i,fl) as t ->
-       (*CSC vecchio codice
-       let (_,_,body) = List.nth fl i in
-        let body' =
-         let counter = ref (List.length fl) in
-          List.fold_right
-           (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl)))
-           fl
-           body
-        in
-         whdaux l body'
-       *)
-       if l = [] then t else C.Appl (t::l)
- in
-  whdaux []
-;;
-
-(* t1, t2 must be well-typed *)
-let are_convertible t1 t2 =
- let module U = UriManager in
- let rec aux t1 t2 =
-  debug t1 [t2] "PREWHD";
-  (* this trivial euristic cuts down the total time of about five times ;-) *)
-  (* this because most of the time t1 and t2 are "sintactically" the same   *)
-  if t1 = t2 then
-   true
-  else
-   begin
-    let module C = Cic in
-     let t1' = whd t1 
-     and t2' = whd t2 in
-     debug t1' [t2'] "POSTWHD";
-     (*if !fdebug = 0 then ignore(Unix.system "read" );*)
-      match (t1',t2') with
-         (C.Rel n1, C.Rel n2) -> n1 = n2
-       | (C.Var uri1, C.Var uri2) -> U.eq uri1 uri2
-       | (C.Meta n1, C.Meta n2) -> n1 = n2
-       | (C.Sort s1, C.Sort s2) -> true (*CSC da finire con gli universi *)
-       | (C.Prod (_,s1,t1), C.Prod(_,s2,t2)) ->
-          aux s1 s2 && aux t1 t2
-       | (C.Lambda (_,s1,t1), C.Lambda(_,s2,t2)) ->
-          aux s1 s2 && aux t1 t2
-       | (C.Appl l1, C.Appl l2) ->
-          (try
-            List.fold_right2 (fun  x y b -> aux x y && b) l1 l2 true 
-           with
-            Invalid_argument _ -> false
-          )
-       | (C.Const (uri1,_), C.Const (uri2,_)) ->
-           (*CSC: questo commento e' chiaro o delirante? Io lo sto scrivendo *)
-           (*CSC: mentre sono delirante, quindi ...                          *)
-           (* WARNING: it is really important that the two cookingsno are not *)
-           (* checked for equality. This allows not to cook an object with no *)
-           (* ingredients only to update the cookingsno. E.g: if a term t has *)
-           (* a reference to a term t1 which does not depend on any variable  *)
-           (* and t1 depends on a term t2 (that can't depend on any variable  *)
-           (* because of t1), then t1 cooked at every level could be the same *)
-           (* as t1 cooked at level 0. Doing so, t2 will be extended in t     *)
-           (* with cookingsno 0 and not 2. But this will not cause any trouble*)
-           (* if here we don't check that the two cookingsno are equal.       *)
-           U.eq uri1 uri2
-       | (C.MutInd (uri1,k1,i1), C.MutInd (uri2,k2,i2)) ->
-           (* WARNIG: see the previous warning *)
-           U.eq uri1 uri2 && i1 = i2
-       | (C.MutConstruct (uri1,_,i1,j1), C.MutConstruct (uri2,_,i2,j2)) ->
-           (* WARNIG: see the previous warning *)
-           U.eq uri1 uri2 && i1 = i2 && j1 = j2
-       | (C.MutCase (uri1,_,i1,outtype1,term1,pl1),
-          C.MutCase (uri2,_,i2,outtype2,term2,pl2)) -> 
-           (* WARNIG: see the previous warning *)
-           (* aux outtype1 outtype2 should be true if aux pl1 pl2 *)
-           U.eq uri1 uri2 && i1 = i2 && aux outtype1 outtype2 &&
-            aux term1 term2 &&
-            List.fold_right2 (fun x y b -> b && aux x y) pl1 pl2 true
-       | (C.Fix (i1,fl1), C.Fix (i2,fl2)) ->
-          i1 = i2 &&
-           List.fold_right2
-            (fun (_,recindex1,ty1,bo1) (_,recindex2,ty2,bo2) b ->
-              b && recindex1 = recindex2 && aux ty1 ty2 && aux bo1 bo2)
-            fl1 fl2 true
-       | (C.CoFix (i1,fl1), C.CoFix (i2,fl2)) ->
-          i1 = i2 &&
-           List.fold_right2
-            (fun (_,ty1,bo1) (_,ty2,bo2) b ->
-              b && aux ty1 ty2 && aux bo1 bo2)
-            fl1 fl2 true
-       | (C.Abst _, _) | (_, C.Abst _) | (C.Cast _, _) | (_, C.Cast _)
-       | (C.Implicit, _) | (_, C.Implicit) ->
-          raise (Impossible 3) (* we don't trust our whd ;-) *)
-       | (_,_) -> false
-   end
- in
-  aux t1 t2
-;;
diff --git a/helm/interface/cicReduction.mli b/helm/interface/cicReduction.mli
deleted file mode 100644 (file)
index d61bc72..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception WrongUriToInductiveDefinition
-exception ReferenceToDefinition
-exception ReferenceToAxiom
-exception ReferenceToVariable
-exception ReferenceToCurrentProof
-exception ReferenceToInductiveDefinition
-val fdebug : int ref
-val whd : Cic.term -> Cic.term
-val are_convertible : Cic.term -> Cic.term -> bool
diff --git a/helm/interface/cicSubstitution.ml b/helm/interface/cicSubstitution.ml
deleted file mode 100644 (file)
index 434e670..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let lift n =
- let rec liftaux k =
-  let module C = Cic in
-   function
-      C.Rel m ->
-       if m < k then
-        C.Rel m
-       else
-        C.Rel (m + n)
-    | C.Var _  as t -> t
-    | C.Meta _ as t -> t
-    | C.Sort _ as t -> t
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) -> C.Cast (liftaux k te, liftaux k ty)
-    | C.Prod (n,s,t) -> C.Prod (n, liftaux k s, liftaux (k+1) t)
-    | C.Lambda (n,s,t) -> C.Lambda (n, liftaux k s, liftaux (k+1) t)
-    | C.Appl l -> C.Appl (List.map (liftaux k) l)
-    | C.Const _ as t -> t
-    | C.Abst _  as t -> t
-    | C.MutInd _ as t -> t
-    | C.MutConstruct _ as t -> t
-    | C.MutCase (sp,cookingsno,i,outty,t,pl) ->
-       C.MutCase (sp, cookingsno, i, liftaux k outty, liftaux k t,
-        List.map (liftaux k) pl)
-    | C.Fix (i, fl) ->
-       let len = List.length fl in
-       let liftedfl =
-        List.map
-         (fun (name, i, ty, bo) -> (name, i, liftaux k ty, liftaux (k+len) bo))
-          fl
-       in
-        C.Fix (i, liftedfl)
-    | C.CoFix (i, fl) ->
-       let len = List.length fl in
-       let liftedfl =
-        List.map
-         (fun (name, ty, bo) -> (name, liftaux k ty, liftaux (k+len) bo))
-          fl
-       in
-        C.CoFix (i, liftedfl)
- in
-  liftaux 1
-;;
-
-let subst arg =
- let rec substaux k =
-  let module C = Cic in
-   function
-      C.Rel n as t ->
-       (match n with
-           n when n = k -> lift (k - 1) arg
-         | n when n < k -> t
-         | _            -> C.Rel (n - 1)
-       )
-    | C.Var _ as t  -> t
-    | C.Meta _ as t -> t
-    | C.Sort _ as t -> t
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) -> C.Cast (substaux k te, substaux k ty) (*CSC ??? *)
-    | C.Prod (n,s,t) -> C.Prod (n, substaux k s, substaux (k + 1) t)
-    | C.Lambda (n,s,t) -> C.Lambda (n, substaux k s, substaux (k + 1) t)
-    | C.Appl l -> C.Appl (List.map (substaux k) l)
-    | C.Const _ as t -> t
-    | C.Abst _ as t -> t
-    | C.MutInd _ as t -> t
-    | C.MutConstruct _ as t -> t
-    | C.MutCase (sp,cookingsno,i,outt,t,pl) ->
-       C.MutCase (sp,cookingsno,i,substaux k outt, substaux k t,
-        List.map (substaux k) pl)
-    | C.Fix (i,fl) ->
-       let len = List.length fl in
-       let substitutedfl =
-        List.map
-         (fun (name,i,ty,bo) -> (name, i, substaux k ty, substaux (k+len) bo))
-          fl
-       in
-        C.Fix (i, substitutedfl)
-    | C.CoFix (i,fl) ->
-       let len = List.length fl in
-       let substitutedfl =
-        List.map
-         (fun (name,ty,bo) -> (name, substaux k ty, substaux (k+len) bo))
-          fl
-       in
-        C.CoFix (i, substitutedfl)
- in
-  substaux 1
-;;
-
-let undebrujin_inductive_def uri =
- function
-    Cic.InductiveDefinition (dl,params,n_ind_params) ->
-     let dl' =
-      List.map
-       (fun (name,inductive,arity,constructors) ->
-         let constructors' =
-          List.map
-           (fun (name,ty,r) ->
-             let ty' =
-              let counter = ref (List.length dl) in
-               List.fold_right
-                (fun _ ->
-                  decr counter ;
-                  subst (Cic.MutInd (uri,0,!counter))
-                ) dl ty
-             in
-              (name,ty',r)
-           ) constructors
-         in
-          (name,inductive,arity,constructors')
-       ) dl
-      in
-       Cic.InductiveDefinition (dl', params, n_ind_params)
-  | obj -> obj
-;;
diff --git a/helm/interface/cicSubstitution.mli b/helm/interface/cicSubstitution.mli
deleted file mode 100644 (file)
index 72e9a32..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val lift : int -> Cic.term -> Cic.term
-val subst : Cic.term -> Cic.term -> Cic.term
-val undebrujin_inductive_def : UriManager.uri -> Cic.obj -> Cic.obj
diff --git a/helm/interface/cicTypeChecker.ml b/helm/interface/cicTypeChecker.ml
deleted file mode 100644 (file)
index ea1c28c..0000000
+++ /dev/null
@@ -1,1255 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception NotImplemented;;
-exception Impossible;;
-exception NotWellTyped of string;;
-exception WrongUriToConstant of string;;
-exception WrongUriToVariable of string;;
-exception WrongUriToMutualInductiveDefinitions of string;;
-exception ListTooShort;;
-exception NotPositiveOccurrences of string;;
-exception NotWellFormedTypeOfInductiveConstructor of string;;
-exception WrongRequiredArgument of string;;
-
-let fdebug = ref 0;;
-let debug t env =
- let rec debug_aux t i =
-  let module C = Cic in
-  let module U = UriManager in
-   CicPp.ppobj (C.Variable ("DEBUG", None,
-    C.Prod (C.Name "-15", C.Const (U.uri_of_string "cic:/dummy-15",0),
-    C.Prod (C.Name "-14", C.Const (U.uri_of_string "cic:/dummy-14",0),
-    C.Prod (C.Name "-13", C.Const (U.uri_of_string "cic:/dummy-13",0),
-    C.Prod (C.Name "-12", C.Const (U.uri_of_string "cic:/dummy-12",0),
-    C.Prod (C.Name "-11", C.Const (U.uri_of_string "cic:/dummy-11",0),
-    C.Prod (C.Name "-10", C.Const (U.uri_of_string "cic:/dummy-10",0),
-    C.Prod (C.Name "-9", C.Const (U.uri_of_string "cic:/dummy-9",0),
-    C.Prod (C.Name "-8", C.Const (U.uri_of_string "cic:/dummy-8",0),
-    C.Prod (C.Name "-7", C.Const (U.uri_of_string "cic:/dummy-7",0),
-    C.Prod (C.Name "-6", C.Const (U.uri_of_string "cic:/dummy-6",0),
-     C.Prod (C.Name "-5", C.Const (U.uri_of_string "cic:/dummy-5",0),
-      C.Prod (C.Name "-4", C.Const (U.uri_of_string "cic:/dummy-4",0),
-       C.Prod (C.Name "-3", C.Const (U.uri_of_string "cic:/dummy-3",0),
-        C.Prod (C.Name "-2", C.Const (U.uri_of_string "cic:/dummy-2",0),
-         C.Prod (C.Name "-1", C.Const (U.uri_of_string "cic:/dummy-1",0),
-          t
-         )
-        )
-       )
-      )
-     )
-    )
-    )
-    )
-    )))))))
-    )) ^ "\n" ^ i
- in
-  if !fdebug = 0 then
-   raise (NotWellTyped ("\n" ^ List.fold_right debug_aux (t::env) ""))
-   (*print_endline ("\n" ^ List.fold_right debug_aux (t::env) "") ; flush stdout*)
-;;
-
-let rec split l n =
- match (l,n) with
-    (l,0) -> ([], l)
-  | (he::tl, n) -> let (l1,l2) = split tl (n-1) in (he::l1,l2)
-  | (_,_) -> raise ListTooShort
-;;
-
-exception CicCacheError;;
-
-let rec cooked_type_of_constant uri cookingsno =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  let cobj =
-   match CicCache.is_type_checked uri cookingsno with
-      CicCache.CheckedObj cobj -> cobj
-    | CicCache.UncheckedObj uobj ->
-       (* let's typecheck the uncooked obj *)
-       (match uobj with
-           C.Definition (_,te,ty,_) ->
-             let _ = type_of ty in
-              if not (R.are_convertible (type_of te) ty) then
-               raise (NotWellTyped ("Constant " ^ (U.string_of_uri uri)))
-         | C.Axiom (_,ty,_) ->
-           (* only to check that ty is well-typed *)
-           let _ = type_of ty in ()
-         | C.CurrentProof (_,_,te,ty) ->
-             let _ = type_of ty in
-              if not (R.are_convertible (type_of te) ty) then
-               raise (NotWellTyped ("CurrentProof" ^ (U.string_of_uri uri)))
-         | _ -> raise (WrongUriToConstant (U.string_of_uri uri))
-       ) ;
-       CicCache.set_type_checking_info uri ;
-       match CicCache.is_type_checked uri cookingsno with
-          CicCache.CheckedObj cobj -> cobj
-        | CicCache.UncheckedObj _ -> raise CicCacheError
-  in
-   match cobj with
-      C.Definition (_,_,ty,_) -> ty
-    | C.Axiom (_,ty,_) -> ty
-    | C.CurrentProof (_,_,_,ty) -> ty
-    | _ -> raise (WrongUriToConstant (U.string_of_uri uri))
-
-and type_of_variable uri =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  (* 0 because a variable is never cooked => no partial cooking at one level *)
-  match CicCache.is_type_checked uri 0 with
-     CicCache.CheckedObj (C.Variable (_,_,ty)) -> ty
-   | CicCache.UncheckedObj (C.Variable (_,bo,ty)) ->
-      (* only to check that ty is well-typed *)
-      let _ = type_of ty in
-       (match bo with
-           None -> ()
-         | Some bo ->
-            if not (R.are_convertible (type_of bo) ty) then
-             raise (NotWellTyped ("Variable " ^ (U.string_of_uri uri)))
-       ) ;
-       CicCache.set_type_checking_info uri ;
-       ty
-   |  _ -> raise (WrongUriToVariable (UriManager.string_of_uri uri))
-
-and does_not_occur n nn te =
- let module C = Cic in
-   (*CSC: whd sembra essere superflua perche' un caso in cui l'occorrenza *)
-   (*CSC: venga mangiata durante la whd sembra presentare problemi di *)
-   (*CSC: universi                                                    *)
-   match CicReduction.whd te with
-      C.Rel m when m > n && m <= nn -> false
-    | C.Rel _
-    | C.Var _
-    | C.Meta _
-    | C.Sort _
-    | C.Implicit -> true
-    | C.Cast (te,ty) -> does_not_occur n nn te && does_not_occur n nn ty
-    | C.Prod (_,so,dest) ->
-       does_not_occur n nn so && does_not_occur (n + 1) (nn + 1) dest
-    | C.Lambda (_,so,dest) ->
-       does_not_occur n nn so && does_not_occur (n + 1) (nn + 1) dest
-    | C.LetIn (_,so,dest) ->
-       does_not_occur n nn so && does_not_occur (n + 1) (nn + 1) dest
-    | C.Appl l ->
-       List.fold_right (fun x i -> i && does_not_occur n nn x) l true
-    | C.Const _
-    | C.Abst _
-    | C.MutInd _
-    | C.MutConstruct _ -> true
-    | C.MutCase (_,_,_,out,te,pl) ->
-       does_not_occur n nn out && does_not_occur n nn te &&
-        List.fold_right (fun x i -> i && does_not_occur n nn x) pl true
-    | C.Fix (_,fl) ->
-       let len = List.length fl in
-        let n_plus_len = n + len in
-        let nn_plus_len = nn + len in
-         List.fold_right
-          (fun (_,_,ty,bo) i ->
-            i && does_not_occur n_plus_len nn_plus_len ty &&
-            does_not_occur n_plus_len nn_plus_len bo
-          ) fl true
-    | C.CoFix (_,fl) ->
-       let len = List.length fl in
-        let n_plus_len = n + len in
-        let nn_plus_len = nn + len in
-         List.fold_right
-          (fun (_,ty,bo) i ->
-            i && does_not_occur n_plus_len nn_plus_len ty &&
-            does_not_occur n_plus_len nn_plus_len bo
-          ) fl true
-
-(*CSC l'indice x dei tipi induttivi e' t.c. n < x <= nn *)
-(*CSC questa funzione e' simile alla are_all_occurrences_positive, ma fa *)
-(*CSC dei controlli leggermente diversi. Viene invocata solamente dalla  *)
-(*CSC strictly_positive                                                  *)
-(*CSC definizione (giusta???) tratta dalla mail di Hugo ;-)              *)
-and weakly_positive n nn uri te =
- let module C = Cic in
-  (*CSC mettere in cicSubstitution *)
-  let rec subst_inductive_type_with_dummy_rel =
-   function
-      C.MutInd (uri',_,0) when UriManager.eq uri' uri ->
-       C.Rel 0 (* dummy rel *)
-    | C.Appl ((C.MutInd (uri',_,0))::tl) when UriManager.eq uri' uri ->
-       C.Rel 0 (* dummy rel *)
-    | C.Cast (te,ty) -> subst_inductive_type_with_dummy_rel te
-    | C.Prod (name,so,ta) ->
-       C.Prod (name, subst_inductive_type_with_dummy_rel so,
-        subst_inductive_type_with_dummy_rel ta)
-    | C.Lambda (name,so,ta) ->
-       C.Lambda (name, subst_inductive_type_with_dummy_rel so,
-        subst_inductive_type_with_dummy_rel ta)
-    | C.Appl tl ->
-       C.Appl (List.map subst_inductive_type_with_dummy_rel tl)
-    | C.MutCase (uri,cookingsno,i,outtype,term,pl) ->
-       C.MutCase (uri,cookingsno,i,
-        subst_inductive_type_with_dummy_rel outtype,
-        subst_inductive_type_with_dummy_rel term,
-        List.map subst_inductive_type_with_dummy_rel pl)
-    | C.Fix (i,fl) ->
-       C.Fix (i,List.map (fun (name,i,ty,bo) -> (name,i,
-        subst_inductive_type_with_dummy_rel ty,
-        subst_inductive_type_with_dummy_rel bo)) fl)
-    | C.CoFix (i,fl) ->
-       C.CoFix (i,List.map (fun (name,ty,bo) -> (name,
-        subst_inductive_type_with_dummy_rel ty,
-        subst_inductive_type_with_dummy_rel bo)) fl)
-    | t -> t
-  in
-  match CicReduction.whd te with
-     C.Appl ((C.MutInd (uri',_,0))::tl) when UriManager.eq uri' uri -> true
-   | C.MutInd (uri',_,0) when UriManager.eq uri' uri -> true
-   | C.Prod (C.Anonimous,source,dest) ->
-      strictly_positive n nn (subst_inductive_type_with_dummy_rel source) &&
-       weakly_positive (n + 1) (nn + 1) uri dest
-   | C.Prod (name,source,dest) when does_not_occur 0 n dest ->
-      (* dummy abstraction, so we behave as in the anonimous case *)
-      strictly_positive n nn (subst_inductive_type_with_dummy_rel source) &&
-       weakly_positive (n + 1) (nn + 1) uri dest
-   | C.Prod (_,source,dest) ->
-      does_not_occur n nn (subst_inductive_type_with_dummy_rel source) &&
-       weakly_positive (n + 1) (nn + 1) uri dest
-   | _ -> raise (NotWellFormedTypeOfInductiveConstructor ("Guess where the error is ;-)"))
-
-(* instantiate_parameters ps (x1:T1)...(xn:Tn)C                             *)
-(* returns ((x_|ps|:T_|ps|)...(xn:Tn)C){ps_1 / x1 ; ... ; ps_|ps| / x_|ps|} *)
-and instantiate_parameters params c =
- let module C = Cic in
-  match (c,params) with
-     (c,[]) -> c
-   | (C.Prod (_,_,ta), he::tl) ->
-       instantiate_parameters tl
-        (CicSubstitution.subst he ta)
-   | (C.Cast (te,_), _) -> instantiate_parameters params te
-   | (t,l) -> raise Impossible
-
-and strictly_positive n nn te =
- let module C = Cic in
- let module U = UriManager in
-  match CicReduction.whd te with
-     C.Rel _ -> true
-   | C.Cast (te,ty) ->
-      (*CSC: bisogna controllare ty????*)
-      strictly_positive n nn te
-   | C.Prod (_,so,ta) ->
-      does_not_occur n nn so &&
-       strictly_positive (n+1) (nn+1) ta
-   | C.Appl ((C.Rel m)::tl) when m > n && m <= nn ->
-      List.fold_right (fun x i -> i && does_not_occur n nn x) tl true
-   | C.Appl ((C.MutInd (uri,_,i))::tl) -> 
-      let (ok,paramsno,cl) =
-       match CicCache.get_obj uri with
-           C.InductiveDefinition (tl,_,paramsno) ->
-            let (_,_,_,cl) = List.nth tl i in
-             (List.length tl = 1, paramsno, cl)
-         | _ -> raise(WrongUriToMutualInductiveDefinitions(U.string_of_uri uri))
-      in
-       let (params,arguments) = split tl paramsno in
-       let lifted_params = List.map (CicSubstitution.lift 1) params in
-       let cl' =
-        List.map (fun (_,te,_) -> instantiate_parameters lifted_params te) cl
-       in
-        ok &&
-         List.fold_right
-          (fun x i -> i && does_not_occur n nn x)
-          arguments true &&
-         (*CSC: MEGAPATCH3 (sara' quella giusta?)*)
-         List.fold_right
-          (fun x i ->
-            i &&
-             weakly_positive (n+1) (nn+1) uri x
-          ) cl' true
-   | C.MutInd (uri,_,i) ->
-      (match CicCache.get_obj uri with
-          C.InductiveDefinition (tl,_,_) ->
-           List.length tl = 1
-        | _ -> raise (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri))
-      )
-   | t -> does_not_occur n nn t
-
-(*CSC l'indice x dei tipi induttivi e' t.c. n < x <= nn *)
-and are_all_occurrences_positive uri indparamsno i n nn te =
- let module C = Cic in
-  match CicReduction.whd te with
-     C.Appl ((C.Rel m)::tl) when m = i ->
-      (*CSC: riscrivere fermandosi a 0 *)
-      (* let's check if the inductive type is applied at least to *)
-      (* indparamsno parameters                                   *)
-      let last =
-       List.fold_left
-        (fun k x ->
-          if k = 0 then 0
-          else
-           match CicReduction.whd x with
-              C.Rel m when m = n - (indparamsno - k) -> k - 1
-            | _ -> raise (WrongRequiredArgument (UriManager.string_of_uri uri))
-        ) indparamsno tl
-      in
-       if last = 0 then
-        List.fold_right (fun x i -> i && does_not_occur n nn x) tl true
-       else
-        raise (WrongRequiredArgument (UriManager.string_of_uri uri))
-   | C.Rel m when m = i ->
-      if indparamsno = 0 then
-       true
-      else
-       raise (WrongRequiredArgument (UriManager.string_of_uri uri))
-   | C.Prod (C.Anonimous,source,dest) ->
-      strictly_positive n nn source &&
-       are_all_occurrences_positive uri indparamsno (i+1) (n + 1) (nn + 1) dest
-   | C.Prod (name,source,dest) when does_not_occur 0 n dest ->
-      (* dummy abstraction, so we behave as in the anonimous case *)
-      strictly_positive n nn source &&
-       are_all_occurrences_positive uri indparamsno (i+1) (n + 1) (nn + 1) dest
-   | C.Prod (_,source,dest) ->
-      does_not_occur n nn source &&
-       are_all_occurrences_positive uri indparamsno (i+1) (n + 1) (nn + 1) dest
-   | _ -> raise (NotWellFormedTypeOfInductiveConstructor (UriManager.string_of_uri uri))
-
-(*CSC: cambiare il nome, torna unit! *)
-and cooked_mutual_inductive_defs uri =
- let module U = UriManager in
-  function
-     Cic.InductiveDefinition (itl, _, indparamsno) ->
-      (* let's check if the arity of the inductive types are well *)
-      (* formed                                                   *)
-      List.iter (fun (_,_,x,_) -> let _ = type_of x in ()) itl ;
-
-      (* let's check if the types of the inductive constructors  *)
-      (* are well formed.                                        *)
-      (* In order not to use type_of_aux we put the types of the *)
-      (* mutual inductive types at the head of the types of the  *)
-      (* constructors using Prods                                *)
-      (*CSC: piccola??? inefficienza                             *)
-      let len = List.length itl in
-       let _ =
-        List.fold_right
-         (fun (_,_,_,cl) i ->
-           List.iter
-            (fun (name,te,r) -> 
-              let augmented_term =
-               List.fold_right
-                (fun (name,_,ty,_) i -> Cic.Prod (Cic.Name name, ty, i))
-                itl te
-              in
-               let _ = type_of augmented_term in
-                (* let's check also the positivity conditions *)
-                if not (are_all_occurrences_positive uri indparamsno i 0 len te)
-                then
-                 raise (NotPositiveOccurrences (U.string_of_uri uri))
-                else
-                 match !r with
-                    Some _ -> raise Impossible
-                  | None -> r := Some (recursive_args 0 len te)
-            ) cl ;
-           (i + 1)
-        ) itl 1
-       in
-        ()
-   | _ ->
-     raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri))
-
-and cooked_type_of_mutual_inductive_defs uri cookingsno i =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  let cobj =
-   match CicCache.is_type_checked uri cookingsno with
-      CicCache.CheckedObj cobj -> cobj
-    | CicCache.UncheckedObj uobj ->
-       cooked_mutual_inductive_defs uri uobj ;
-       CicCache.set_type_checking_info uri ;
-       (match CicCache.is_type_checked uri cookingsno with
-          CicCache.CheckedObj cobj -> cobj
-        | CicCache.UncheckedObj _ -> raise CicCacheError
-       )
-  in
-   match cobj with
-      C.InductiveDefinition (dl,_,_) ->
-       let (_,_,arity,_) = List.nth dl i in
-        arity
-    | _ -> raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri))
-
-and cooked_type_of_mutual_inductive_constr uri cookingsno i j =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  let cobj =
-   match CicCache.is_type_checked uri cookingsno with
-      CicCache.CheckedObj cobj -> cobj
-    | CicCache.UncheckedObj uobj ->
-       cooked_mutual_inductive_defs uri uobj ;
-       CicCache.set_type_checking_info uri ;
-       (match CicCache.is_type_checked uri cookingsno with
-          CicCache.CheckedObj cobj -> cobj
-        | CicCache.UncheckedObj _ -> raise CicCacheError
-       )
-  in
-   match cobj with
-      C.InductiveDefinition (dl,_,_) ->
-       let (_,_,_,cl) = List.nth dl i in
-        let (_,ty,_) = List.nth cl (j-1) in
-         ty
-    | _ -> raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri))
-
-and recursive_args n nn te =
- let module C = Cic in
-  match CicReduction.whd te with
-     C.Rel _ -> []
-   | C.Var _
-   | C.Meta _
-   | C.Sort _
-   | C.Implicit
-   | C.Cast _ (*CSC ??? *) -> raise Impossible (* due to type-checking *)
-   | C.Prod (_,so,de) ->
-      (not (does_not_occur n nn so))::(recursive_args (n+1) (nn + 1) de)
-   | C.Lambda _ -> raise Impossible (* due to type-checking *)
-   | C.LetIn _ -> raise NotImplemented
-   | C.Appl _ -> []
-   | C.Const _
-   | C.Abst _ -> raise Impossible
-   | C.MutInd _
-   | C.MutConstruct _
-   | C.MutCase _
-   | C.Fix _
-   | C.CoFix _ -> raise Impossible (* due to type-checking *)
-
-and get_new_safes p c rl safes n nn x =
- let module C = Cic in
- let module U = UriManager in
- let module R = CicReduction in
-  match (R.whd c, R.whd p, rl) with
-     (C.Prod (_,_,ta1), C.Lambda (_,_,ta2), b::tl) ->
-       (* we are sure that the two sources are convertible because we *)
-       (* have just checked this. So let's go along ...               *)
-       let safes' =
-        List.map (fun x -> x + 1) safes
-       in
-        let safes'' =
-         if b then 1::safes' else safes'
-        in
-         get_new_safes ta2 ta1 tl safes'' (n+1) (nn+1) (x+1)
-   | (C.MutInd _, e, []) -> (e,safes,n,nn,x)
-   | (C.Appl _, e, []) -> (e,safes,n,nn,x)
-   | (_,_,_) -> raise Impossible
-
-and eat_prods n te =
- let module C = Cic in
- let module R = CicReduction in
-  match (n, R.whd te) with
-     (0, _) -> te
-   | (n, C.Prod (_,_,ta)) when n > 0 -> eat_prods (n - 1) ta
-   | (_, _) -> raise Impossible
-
-and eat_lambdas n te =
- let module C = Cic in
- let module R = CicReduction in
-  match (n, R.whd te) with
-     (0, _) -> (te, 0)
-   | (n, C.Lambda (_,_,ta)) when n > 0 ->
-      let (te, k) = eat_lambdas (n - 1) ta in
-       (te, k + 1)
-   | (_, _) -> raise Impossible
-
-(*CSC: Tutto quello che segue e' l'intuzione di luca ;-) *)
-and check_is_really_smaller_arg n nn kl x safes te =
- (*CSC: forse la whd si puo' fare solo quando serve veramente. *)
- (*CSC: cfr guarded_by_destructors                             *)
- let module C = Cic in
- let module U = UriManager in
- match CicReduction.whd te with
-     C.Rel m when List.mem m safes -> true
-   | C.Rel _ -> false
-   | C.Var _
-   | C.Meta _
-   | C.Sort _
-   | C.Implicit 
-   | C.Cast _
-(*   | C.Cast (te,ty) ->
-      check_is_really_smaller_arg n nn kl x safes te &&
-       check_is_really_smaller_arg n nn kl x safes ty*)
-(*   | C.Prod (_,so,ta) ->
-      check_is_really_smaller_arg n nn kl x safes so &&
-       check_is_really_smaller_arg (n+1) (nn+1) kl (x+1)
-        (List.map (fun x -> x + 1) safes) ta*)
-   | C.Prod _ -> raise Impossible
-   | C.Lambda (_,so,ta) ->
-      check_is_really_smaller_arg n nn kl x safes so &&
-       check_is_really_smaller_arg (n+1) (nn+1) kl (x+1)
-        (List.map (fun x -> x + 1) safes) ta
-   | C.LetIn (_,so,ta) ->
-      check_is_really_smaller_arg n nn kl x safes so &&
-       check_is_really_smaller_arg (n+1) (nn+1) kl (x+1)
-        (List.map (fun x -> x + 1) safes) ta
-   | C.Appl (he::_) ->
-      (*CSC: sulla coda ci vogliono dei controlli? secondo noi no, ma *)
-      (*CSC: solo perche' non abbiamo trovato controesempi            *)
-      check_is_really_smaller_arg n nn kl x safes he
-   | C.Appl [] -> raise Impossible
-   | C.Const _
-   | C.Abst _
-   | C.MutInd _ -> raise Impossible
-   | C.MutConstruct _ -> false
-   | C.MutCase (uri,_,i,outtype,term,pl) ->
-      (match term with
-          C.Rel m when List.mem m safes || m = x ->
-           let (isinductive,paramsno,cl) =
-            match CicCache.get_obj uri with
-               C.InductiveDefinition (tl,_,paramsno) ->
-                let (_,isinductive,_,cl) = List.nth tl i in
-                 let cl' =
-                  List.map (fun (id,ty,r) -> (id, eat_prods paramsno ty, r)) cl
-                 in
-                  (isinductive,paramsno,cl')
-             | _ ->
-               raise (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri))
-           in
-            if not isinductive then
-              List.fold_right
-               (fun p i -> i && check_is_really_smaller_arg n nn kl x safes p)
-               pl true
-            else
-              List.fold_right
-               (fun (p,(_,c,rl)) i ->
-                 let rl' =
-                  match !rl with
-                     Some rl' ->
-                      let (_,rl'') = split rl' paramsno in
-                       rl''
-                   | None -> raise Impossible
-                 in
-                  let (e,safes',n',nn',x') =
-                   get_new_safes p c rl' safes n nn x
-                  in
-                   i &&
-                   check_is_really_smaller_arg n' nn' kl x' safes' e
-               ) (List.combine pl cl) true
-        | C.Appl ((C.Rel m)::tl) when List.mem m safes || m = x ->
-           let (isinductive,paramsno,cl) =
-            match CicCache.get_obj uri with
-               C.InductiveDefinition (tl,_,paramsno) ->
-                let (_,isinductive,_,cl) = List.nth tl i in
-                 let cl' =
-                  List.map (fun (id,ty,r) -> (id, eat_prods paramsno ty, r)) cl
-                 in
-                  (isinductive,paramsno,cl')
-             | _ ->
-               raise (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri))
-           in
-            if not isinductive then
-              List.fold_right
-               (fun p i -> i && check_is_really_smaller_arg n nn kl x safes p)
-               pl true
-            else
-              (*CSC: supponiamo come prima che nessun controllo sia necessario*)
-              (*CSC: sugli argomenti di una applicazione                      *)
-              List.fold_right
-               (fun (p,(_,c,rl)) i ->
-                 let rl' =
-                  match !rl with
-                     Some rl' ->
-                      let (_,rl'') = split rl' paramsno in
-                       rl''
-                   | None -> raise Impossible
-                 in
-                  let (e, safes',n',nn',x') =
-                   get_new_safes p c rl' safes n nn x
-                  in
-                   i &&
-                   check_is_really_smaller_arg n' nn' kl x' safes' e
-               ) (List.combine pl cl) true
-        | _ ->
-          List.fold_right
-           (fun p i -> i && check_is_really_smaller_arg n nn kl x safes p)
-           pl true
-      )
-   | C.Fix (_, fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len
-       and nn_plus_len = nn + len
-       and x_plus_len = x + len
-       and safes' = List.map (fun x -> x + len) safes in
-        List.fold_right
-         (fun (_,_,ty,bo) i ->
-           i &&
-            check_is_really_smaller_arg n_plus_len nn_plus_len kl x_plus_len
-             safes' bo
-         ) fl true
-   | C.CoFix (_, fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len
-       and nn_plus_len = nn + len
-       and x_plus_len = x + len
-       and safes' = List.map (fun x -> x + len) safes in
-        List.fold_right
-         (fun (_,ty,bo) i ->
-           i &&
-            check_is_really_smaller_arg n_plus_len nn_plus_len kl x_plus_len
-             safes' bo
-         ) fl true
-
-and guarded_by_destructors n nn kl x safes =
- let module C = Cic in
- let module U = UriManager in
-  function
-     C.Rel m when m > n && m <= nn -> false
-   | C.Rel _
-   | C.Var _
-   | C.Meta _
-   | C.Sort _
-   | C.Implicit -> true
-   | C.Cast (te,ty) ->
-      guarded_by_destructors n nn kl x safes te &&
-       guarded_by_destructors n nn kl x safes ty
-   | C.Prod (_,so,ta) ->
-      guarded_by_destructors n nn kl x safes so &&
-       guarded_by_destructors (n+1) (nn+1) kl (x+1)
-        (List.map (fun x -> x + 1) safes) ta
-   | C.Lambda (_,so,ta) ->
-      guarded_by_destructors n nn kl x safes so &&
-       guarded_by_destructors (n+1) (nn+1) kl (x+1)
-        (List.map (fun x -> x + 1) safes) ta
-   | C.LetIn (_,so,ta) ->
-      guarded_by_destructors n nn kl x safes so &&
-       guarded_by_destructors (n+1) (nn+1) kl (x+1)
-        (List.map (fun x -> x + 1) safes) ta
-   | C.Appl ((C.Rel m)::tl) when m > n && m <= nn ->
-      let k = List.nth kl (m - n - 1) in
-       if not (List.length tl > k) then false
-       else
-        List.fold_right
-         (fun param i ->
-           i && guarded_by_destructors n nn kl x safes param
-         ) tl true &&
-         check_is_really_smaller_arg n nn kl x safes (List.nth tl k)
-   | C.Appl tl ->
-      List.fold_right (fun t i -> i && guarded_by_destructors n nn kl x safes t)
-       tl true
-   | C.Const _
-   | C.Abst _
-   | C.MutInd _
-   | C.MutConstruct _ -> true
-   | C.MutCase (uri,_,i,outtype,term,pl) ->
-      (match term with
-          C.Rel m when List.mem m safes || m = x ->
-           let (isinductive,paramsno,cl) =
-            match CicCache.get_obj uri with
-               C.InductiveDefinition (tl,_,paramsno) ->
-                let (_,isinductive,_,cl) = List.nth tl i in
-                 let cl' =
-                  List.map (fun (id,ty,r) -> (id, eat_prods paramsno ty, r)) cl
-                 in
-                  (isinductive,paramsno,cl')
-             | _ ->
-               raise (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri))
-           in
-            if not isinductive then
-             guarded_by_destructors n nn kl x safes outtype &&
-              guarded_by_destructors n nn kl x safes term &&
-              (*CSC: manca ??? il controllo sul tipo di term? *)
-              List.fold_right
-               (fun p i -> i && guarded_by_destructors n nn kl x safes p)
-               pl true
-            else
-             guarded_by_destructors n nn kl x safes outtype &&
-              (*CSC: manca ??? il controllo sul tipo di term? *)
-              List.fold_right
-               (fun (p,(_,c,rl)) i ->
-                 let rl' =
-                  match !rl with
-                     Some rl' ->
-                      let (_,rl'') = split rl' paramsno in
-                       rl''
-                   | None -> raise Impossible
-                 in
-                  let (e,safes',n',nn',x') =
-                   get_new_safes p c rl' safes n nn x
-                  in
-                   i &&
-                   guarded_by_destructors n' nn' kl x' safes' e
-               ) (List.combine pl cl) true
-        | C.Appl ((C.Rel m)::tl) when List.mem m safes || m = x ->
-           let (isinductive,paramsno,cl) =
-            match CicCache.get_obj uri with
-               C.InductiveDefinition (tl,_,paramsno) ->
-                let (_,isinductive,_,cl) = List.nth tl i in
-                 let cl' =
-                  List.map (fun (id,ty,r) -> (id, eat_prods paramsno ty, r)) cl
-                 in
-                  (isinductive,paramsno,cl')
-             | _ ->
-               raise (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri))
-           in
-            if not isinductive then
-             guarded_by_destructors n nn kl x safes outtype &&
-              guarded_by_destructors n nn kl x safes term &&
-              (*CSC: manca ??? il controllo sul tipo di term? *)
-              List.fold_right
-               (fun p i -> i && guarded_by_destructors n nn kl x safes p)
-               pl true
-            else
-             guarded_by_destructors n nn kl x safes outtype &&
-              (*CSC: manca ??? il controllo sul tipo di term? *)
-              List.fold_right
-               (fun t i -> i && guarded_by_destructors n nn kl x safes t)
-               tl true &&
-              List.fold_right
-               (fun (p,(_,c,rl)) i ->
-                 let rl' =
-                  match !rl with
-                     Some rl' ->
-                      let (_,rl'') = split rl' paramsno in
-                       rl''
-                   | None -> raise Impossible
-                 in
-                  let (e, safes',n',nn',x') =
-                   get_new_safes p c rl' safes n nn x
-                  in
-                   i &&
-                   guarded_by_destructors n' nn' kl x' safes' e
-               ) (List.combine pl cl) true
-        | _ ->
-          guarded_by_destructors n nn kl x safes outtype &&
-           guarded_by_destructors n nn kl x safes term &&
-           (*CSC: manca ??? il controllo sul tipo di term? *)
-           List.fold_right
-            (fun p i -> i && guarded_by_destructors n nn kl x safes p)
-            pl true
-      )
-   | C.Fix (_, fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len
-       and nn_plus_len = nn + len
-       and x_plus_len = x + len
-       and safes' = List.map (fun x -> x + len) safes in
-        List.fold_right
-         (fun (_,_,ty,bo) i ->
-           i && guarded_by_destructors n_plus_len nn_plus_len kl x_plus_len
-            safes' ty &&
-            guarded_by_destructors n_plus_len nn_plus_len kl x_plus_len
-             safes' bo
-         ) fl true
-   | C.CoFix (_, fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len
-       and nn_plus_len = nn + len
-       and x_plus_len = x + len
-       and safes' = List.map (fun x -> x + len) safes in
-        List.fold_right
-         (fun (_,ty,bo) i ->
-           i && guarded_by_destructors n_plus_len nn_plus_len kl x_plus_len
-            safes' ty &&
-            guarded_by_destructors n_plus_len nn_plus_len kl x_plus_len safes'
-             bo
-         ) fl true
-
-(*CSC h = 0 significa non ancora protetto *)
-and guarded_by_constructors n nn h =
- let module C = Cic in
-  function
-     C.Rel m when m > n && m <= nn -> h = 1
-   | C.Rel _
-   | C.Var _ 
-   | C.Meta _
-   | C.Sort _
-   | C.Implicit -> true (*CSC: ma alcuni sono impossibili!!!! vedi Prod *)
-   | C.Cast (te,ty) ->
-      guarded_by_constructors n nn h te &&
-       guarded_by_constructors n nn h ty
-   | C.Prod (_,so,de) ->
-      raise Impossible (* the term has just been type-checked *)
-   | C.Lambda (_,so,de) ->
-      does_not_occur n nn so &&
-       guarded_by_constructors (n + 1) (nn + 1) h de
-   | C.LetIn (_,so,de) ->
-      does_not_occur n nn so &&
-       guarded_by_constructors (n + 1) (nn + 1) h de
-   | C.Appl ((C.Rel m)::tl) when m > n && m <= nn ->
-      h = 1 &&
-       List.fold_right (fun x i -> i && does_not_occur n nn x) tl true
-   | C.Appl ((C.MutConstruct (uri,cookingsno,i,j))::tl) ->
-      let (is_coinductive, rl) =
-       match CicCache.get_cooked_obj uri cookingsno with
-          C.InductiveDefinition (itl,_,_) ->
-           let (_,is_inductive,_,cl) = List.nth itl i in
-            let (_,cons,rrec_args) = List.nth cl (j - 1) in
-             (match !rrec_args with
-                 None -> raise Impossible
-               | Some rec_args -> (not is_inductive, rec_args)
-             )
-        | _ ->
-         raise (WrongUriToMutualInductiveDefinitions
-          (UriManager.string_of_uri uri))
-      in
-       is_coinductive &&
-       List.fold_right
-        (fun (x,r) i ->
-          i &&
-           if r then
-            guarded_by_constructors n nn 1 x
-           else
-            does_not_occur n nn x
-        ) (List.combine tl rl) true
-   | C.Appl l ->
-      List.fold_right (fun x i -> i && does_not_occur n nn x) l true
-   | C.Const _
-   | C.Abst _
-   | C.MutInd _ 
-   | C.MutConstruct _ -> true (*CSC: ma alcuni sono impossibili!!!! vedi Prod *)
-   | C.MutCase (_,_,_,out,te,pl) ->
-      let rec returns_a_coinductive =
-       function
-          (*CSC: per le regole di tipaggio, la chiamata ricorsiva verra' *)
-          (*CSC: effettata solo una volta, per mangiarsi l'astrazione    *)
-          (*CSC: non dummy                                               *)
-          C.Lambda (_,_,de) -> returns_a_coinductive de
-        | C.MutInd (uri,_,i) ->
-           (*CSC: definire una funzioncina per questo codice sempre replicato *)
-           (match CicCache.get_obj uri with
-               C.InductiveDefinition (itl,_,_) ->
-                let (_,is_inductive,_,_) = List.nth itl i in
-                 not is_inductive
-             | _ ->
-               raise (WrongUriToMutualInductiveDefinitions
-                (UriManager.string_of_uri uri))
-            )
-        (*CSC: bug nella prossima riga (manca la whd) *)
-        | C.Appl ((C.MutInd (uri,_,i))::_) ->
-           (match CicCache.get_obj uri with
-               C.InductiveDefinition (itl,_,_) ->
-                let (_,is_inductive,_,_) = List.nth itl i in
-                 not is_inductive
-             | _ ->
-               raise (WrongUriToMutualInductiveDefinitions
-                (UriManager.string_of_uri uri))
-            )
-        | _ -> false
-      in
-       does_not_occur n nn out &&
-        does_not_occur n nn te &&
-        if returns_a_coinductive out then
-         List.fold_right
-          (fun x i -> i && guarded_by_constructors n nn h x) pl true
-        else
-         List.fold_right (fun x i -> i && does_not_occur n nn x) pl true
-   | C.Fix (_,fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len
-       and nn_plus_len = nn + len in
-        List.fold_right
-         (fun (_,_,ty,bo) i ->
-           i && does_not_occur n_plus_len nn_plus_len ty &&
-            does_not_occur n_plus_len nn_plus_len bo
-         ) fl true
-   | C.CoFix (_,fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len
-       and nn_plus_len = nn + len in
-        List.fold_right
-         (fun (_,ty,bo) i ->
-           i && does_not_occur n_plus_len nn_plus_len ty &&
-            does_not_occur n_plus_len nn_plus_len bo
-         ) fl true
-
-and check_allowed_sort_elimination uri i need_dummy ind arity1 arity2 =
- let module C = Cic in
- let module U = UriManager in
-  match (CicReduction.whd arity1, CicReduction.whd arity2) with
-     (C.Prod (_,so1,de1), C.Prod (_,so2,de2))
-      when CicReduction.are_convertible so1 so2 ->
-       check_allowed_sort_elimination uri i need_dummy
-        (C.Appl [CicSubstitution.lift 1 ind ; C.Rel 1]) de1 de2
-   | (C.Sort C.Prop, C.Sort C.Prop) when need_dummy -> true
-   | (C.Sort C.Prop, C.Sort C.Set) when need_dummy ->
-       (match CicCache.get_obj uri with
-           C.InductiveDefinition (itl,_,_) ->
-            let (_,_,_,cl) = List.nth itl i in
-             (* is a singleton definition? *)
-             List.length cl = 1
-         | _ ->
-           raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri))
-       )
-   | (C.Sort C.Set, C.Sort C.Prop) when need_dummy -> true
-   | (C.Sort C.Set, C.Sort C.Set) when need_dummy -> true
-   | (C.Sort C.Set, C.Sort C.Type) when need_dummy ->
-       (match CicCache.get_obj uri with
-           C.InductiveDefinition (itl,_,_) ->
-            let (_,_,_,cl) = List.nth itl i in
-             (* is a small inductive type? *)
-             (*CSC: ottimizzare calcolando staticamente *)
-             let rec is_small =
-              function
-                 C.Prod (_,so,de) ->
-                  let s = type_of so in
-                   (s = C.Sort C.Prop || s = C.Sort C.Set) &&
-                   is_small de
-               | _ -> true (*CSC: we trust the type-checker *)
-             in
-              List.fold_right (fun (_,x,_) i -> i && is_small x) cl true
-         | _ ->
-           raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri))
-       )
-   | (C.Sort C.Type, C.Sort _) when need_dummy -> true
-   | (C.Sort C.Prop, C.Prod (_,so,ta)) when not need_dummy ->
-       let res = CicReduction.are_convertible so ind
-       in
-        res &&
-        (match CicReduction.whd ta with
-            C.Sort C.Prop -> true
-          | C.Sort C.Set ->
-             (match CicCache.get_obj uri with
-                 C.InductiveDefinition (itl,_,_) ->
-                  let (_,_,_,cl) = List.nth itl i in
-                   (* is a singleton definition? *)
-                   List.length cl = 1
-               | _ ->
-                 raise (WrongUriToMutualInductiveDefinitions
-                  (U.string_of_uri uri))
-             )
-          | _ -> false
-        )
-   | (C.Sort C.Set, C.Prod (_,so,ta)) when not need_dummy ->
-       let res = CicReduction.are_convertible so ind
-       in
-        res &&
-        (match CicReduction.whd ta with
-            C.Sort C.Prop
-          | C.Sort C.Set  -> true
-          | C.Sort C.Type ->
-             (match CicCache.get_obj uri with
-                 C.InductiveDefinition (itl,_,_) ->
-                  let (_,_,_,cl) = List.nth itl i in
-                   (* is a small inductive type? *)
-                   let rec is_small =
-                    function
-                       C.Prod (_,so,de) ->
-                        let s = type_of so in
-                         (s = C.Sort C.Prop || s = C.Sort C.Set) &&
-                         is_small de
-                     | _ -> true (*CSC: we trust the type-checker *)
-                   in
-                    List.fold_right (fun (_,x,_) i -> i && is_small x) cl true
-               | _ ->
-                 raise (WrongUriToMutualInductiveDefinitions
-                  (U.string_of_uri uri))
-             )
-          | _ -> raise Impossible
-        )
-   | (C.Sort C.Type, C.Prod (_,so,_)) when not need_dummy ->
-       CicReduction.are_convertible so ind
-   | (_,_) -> false
-  
-and type_of_branch argsno need_dummy outtype term constype =
- let module C = Cic in
- let module R = CicReduction in
-  match R.whd constype with
-     C.MutInd (_,_,_) ->
-      if need_dummy then
-       outtype
-      else
-       C.Appl [outtype ; term]
-   | C.Appl (C.MutInd (_,_,_)::tl) ->
-      let (_,arguments) = split tl argsno
-      in
-       if need_dummy && arguments = [] then
-        outtype
-       else
-        C.Appl (outtype::arguments@(if need_dummy then [] else [term]))
-   | C.Prod (name,so,de) ->
-      C.Prod (C.Name "pippo",so,type_of_branch argsno need_dummy 
-       (CicSubstitution.lift 1 outtype)
-       (C.Appl [CicSubstitution.lift 1 term ; C.Rel 1]) de)
-  | _ -> raise Impossible
-       
-and type_of t =
- let rec type_of_aux env =
-  let module C = Cic in
-  let module R = CicReduction in
-  let module S = CicSubstitution in
-  let module U = UriManager in
-   function
-      C.Rel n -> S.lift n (List.nth env (n - 1))
-    | C.Var uri ->
-      incr fdebug ;
-      let ty = type_of_variable uri in
-       decr fdebug ;
-       ty
-    | C.Meta n -> raise NotImplemented
-    | C.Sort s -> C.Sort C.Type (*CSC manca la gestione degli universi!!! *)
-    | C.Implicit -> raise Impossible
-    | C.Cast (te,ty) ->
-       let _ = type_of ty in
-        if R.are_convertible (type_of_aux env te) ty then ty
-        else raise (NotWellTyped "Cast")
-    | C.Prod (_,s,t) ->
-       let sort1 = type_of_aux env s
-       and sort2 = type_of_aux (s::env) t in
-        sort_of_prod (sort1,sort2)
-   | C.Lambda (n,s,t) ->
-       let sort1 = type_of_aux env s
-       and type2 = type_of_aux (s::env) t in
-        let sort2 = type_of_aux (s::env) type2 in
-         (* only to check if the product is well-typed *)
-         let _ = sort_of_prod (sort1,sort2) in
-          C.Prod (n,s,type2)
-   | C.LetIn (n,s,t) ->
-       let type1 = type_of_aux env s in
-       let type2 = type_of_aux (type1::env) t in
-        type2
-   | C.Appl (he::tl) when List.length tl > 0 ->
-      let hetype = type_of_aux env he
-      and tlbody_and_type = List.map (fun x -> (x, type_of_aux env x)) tl in
-       (try
-        eat_prods hetype tlbody_and_type
-       with _ -> debug (C.Appl (he::tl)) env ; C.Implicit)
-   | C.Appl _ -> raise (NotWellTyped "Appl: no arguments")
-   | C.Const (uri,cookingsno) ->
-      incr fdebug ;
-      let cty = cooked_type_of_constant uri cookingsno in
-       decr fdebug ;
-       cty
-   | C.Abst _ -> raise Impossible
-   | C.MutInd (uri,cookingsno,i) ->
-      incr fdebug ;
-      let cty = cooked_type_of_mutual_inductive_defs uri cookingsno i in
-       decr fdebug ;
-       cty
-   | C.MutConstruct (uri,cookingsno,i,j) ->
-      let cty = cooked_type_of_mutual_inductive_constr uri cookingsno i j
-      in
-       cty
-   | C.MutCase (uri,cookingsno,i,outtype,term,pl) ->
-      let outsort = type_of_aux env outtype in
-      let (need_dummy, k) =
-       let rec guess_args t =
-        match decast t with
-           C.Sort _ -> (true, 0)
-         | C.Prod (_, s, t) ->
-            let (b, n) = guess_args t in
-             if n = 0 then
-              (* last prod before sort *)
-              match CicReduction.whd s with
-                 (*CSC vedi nota delirante su cookingsno in cicReduction.ml *)
-                 C.MutInd (uri',_,i') when U.eq uri' uri && i' = i -> (false, 1)
-               | C.Appl ((C.MutInd (uri',_,i')) :: _)
-                  when U.eq uri' uri && i' = i -> (false, 1)
-               | _ -> (true, 1)
-             else
-              (b, n + 1)
-         | _ -> raise (NotWellTyped "MutCase: outtype ill-formed")
-       in
-        (*CSC whd non serve dopo type_of_aux ? *)
-        let (b, k) = guess_args outsort in
-         if not b then (b, k - 1) else (b, k)
-      in
-      let (parameters, arguments) =
-        match R.whd (type_of_aux env term) with
-           (*CSC manca il caso dei CAST *)
-           C.MutInd (uri',_,i') ->
-            (*CSC vedi nota delirante sui cookingsno in cicReduction.ml*)
-            if U.eq uri uri' && i = i' then ([],[])
-            else raise (NotWellTyped ("MutCase: the term is of type " ^
-             (U.string_of_uri uri') ^ "," ^ string_of_int i' ^
-             " instead of type " ^ (U.string_of_uri uri') ^ "," ^
-             string_of_int i))
-         | C.Appl (C.MutInd (uri',_,i') :: tl) ->
-            if U.eq uri uri' && i = i' then split tl (List.length tl - k)
-            else raise (NotWellTyped ("MutCase: the term is of type " ^
-             (U.string_of_uri uri') ^ "," ^ string_of_int i' ^
-             " instead of type " ^ (U.string_of_uri uri) ^ "," ^
-             string_of_int i))
-         | _ -> raise (NotWellTyped "MutCase: the term is not an inductive one")
-      in
-       (* let's control if the sort elimination is allowed: [(I q1 ... qr)|B] *)
-       let sort_of_ind_type =
-        if parameters = [] then
-         C.MutInd (uri,cookingsno,i)
-        else
-         C.Appl ((C.MutInd (uri,cookingsno,i))::parameters)
-       in
-        if not (check_allowed_sort_elimination uri i need_dummy
-         sort_of_ind_type (type_of_aux env sort_of_ind_type) outsort)
-        then
-         raise (NotWellTyped "MutCase: not allowed sort elimination") ;
-
-        (* let's check if the type of branches are right *)
-        let (cl,parsno) =
-         match CicCache.get_cooked_obj uri cookingsno with
-            C.InductiveDefinition (tl,_,parsno) ->
-             let (_,_,_,cl) = List.nth tl i in (cl,parsno)
-          | _ ->
-            raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri))
-        in
-         let (_,branches_ok) =
-          List.fold_left
-           (fun (j,b) (p,(_,c,_)) ->
-             let cons =
-              if parameters = [] then
-               (C.MutConstruct (uri,cookingsno,i,j))
-              else
-               (C.Appl (C.MutConstruct (uri,cookingsno,i,j)::parameters))
-             in
-              (j + 1, b &&
-               R.are_convertible (type_of_aux env p)
-                (type_of_branch parsno need_dummy outtype cons
-                  (type_of_aux env cons))
-              )
-           ) (1,true) (List.combine pl cl)
-         in
-          if not branches_ok then
-           raise (NotWellTyped "MutCase: wrong type of a branch") ;
-
-          if not need_dummy then
-           C.Appl ((outtype::arguments)@[term])
-          else if arguments = [] then
-           outtype
-          else
-           C.Appl (outtype::arguments)
-   | C.Fix (i,fl) ->
-      let types_times_kl =
-       List.rev
-        (List.map (fun (_,k,ty,_) -> let _ = type_of_aux env ty in (ty,k)) fl)
-      in
-      let (types,kl) = List.split types_times_kl in
-       let len = List.length types in
-        List.iter
-         (fun (name,x,ty,bo) ->
-           if (R.are_convertible (type_of_aux (types @ env) bo)
-            (CicSubstitution.lift len ty))
-           then
-            begin
-             let (m, eaten) = eat_lambdas (x + 1) bo in
-              (*let's control the guarded by destructors conditions D{f,k,x,M}*)
-              if not (guarded_by_destructors eaten (len + eaten) kl 1 [] m) then
-               raise (NotWellTyped "Fix: not guarded by destructors")
-            end
-           else
-            raise (NotWellTyped "Fix: ill-typed bodies")
-         ) fl ;
-      
-        (*CSC: controlli mancanti solo su D{f,k,x,M} *)
-        let (_,_,ty,_) = List.nth fl i in
-        ty
-   | C.CoFix (i,fl) ->
-      let types =
-       List.rev (List.map (fun (_,ty,_) -> let _ = type_of_aux env ty in ty) fl)
-      in
-       let len = List.length types in
-        List.iter
-         (fun (_,ty,bo) ->
-           if (R.are_convertible (type_of_aux (types @ env) bo)
-            (CicSubstitution.lift len ty))
-           then
-            begin
-             (* let's control the guarded by constructors conditions C{f,M} *)
-             if not (guarded_by_constructors 0 len 0 bo) then
-              raise (NotWellTyped "CoFix: not guarded by constructors")
-            end
-           else
-            raise (NotWellTyped "CoFix: ill-typed bodies")
-         ) fl ;
-      
-        let (_,ty,_) = List.nth fl i in
-         ty
-
- and decast =
-  let module C = Cic in
-   function
-      C.Cast (t,_) -> t
-    | t -> t
-
- and sort_of_prod (t1, t2) =
-  let module C = Cic in
-   match (decast t1, decast t2) with
-      (C.Sort s1, C.Sort s2)
-        when (s2 = C.Prop or s2 = C.Set) -> (* different from Coq manual!!! *)
-         C.Sort s2
-    | (C.Sort s1, C.Sort s2) -> C.Sort C.Type (*CSC manca la gestione degli universi!!! *)
-    | (_,_) -> raise (NotWellTyped "Prod")
-
- and eat_prods hetype =
-  (*CSC: siamo sicuri che le are_convertible non lavorino con termini non *)
-  (*CSC: cucinati                                                         *)
-  function
-     [] -> hetype
-   | (hete, hety)::tl ->
-    (match (CicReduction.whd hetype) with
-        Cic.Prod (n,s,t) ->
-         if CicReduction.are_convertible s hety then
-          (CicReduction.fdebug := -1 ;
-          eat_prods (CicSubstitution.subst hete t) tl
-          )
-         else
-          (
-          CicReduction.fdebug := 0 ;
-          let _ = CicReduction.are_convertible s hety in
-          debug hete [hety ; s] ;
-          raise (NotWellTyped "Appl: wrong parameter-type")
-)
-      | _ -> raise (NotWellTyped "Appl: wrong Prod-type")
-    )
- in
-  type_of_aux [] t
-;;
-
-let typecheck uri =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  match CicCache.is_type_checked uri 0 with
-     CicCache.CheckedObj _ -> ()
-   | CicCache.UncheckedObj uobj ->
-      (* let's typecheck the uncooked object *)
-      (match uobj with
-          C.Definition (_,te,ty,_) ->
-           let _ = type_of ty in
-            if not (R.are_convertible (type_of te ) ty) then
-             raise (NotWellTyped ("Constant " ^ (U.string_of_uri uri)))
-        | C.Axiom (_,ty,_) ->
-          (* only to check that ty is well-typed *)
-          let _ = type_of ty in ()
-        | C.CurrentProof (_,_,te,ty) ->
-           (*CSC [] wrong *)
-           let _ = type_of ty in
-            debug (type_of te) [] ;
-            if not (R.are_convertible (type_of te) ty) then
-             raise (NotWellTyped ("CurrentProof" ^ (U.string_of_uri uri)))
-        | C.Variable (_,bo,ty) ->
-           (* only to check that ty is well-typed *)
-           let _ = type_of ty in
-            (match bo with
-                None -> ()
-              | Some bo ->
-                 if not (R.are_convertible (type_of bo) ty) then
-                  raise (NotWellTyped ("Variable" ^ (U.string_of_uri uri)))
-            )
-        | C.InductiveDefinition _ ->
-           cooked_mutual_inductive_defs uri uobj
-      ) ;
-      CicCache.set_type_checking_info uri
-;;
diff --git a/helm/interface/cicTypeChecker.mli b/helm/interface/cicTypeChecker.mli
deleted file mode 100644 (file)
index 72dd63c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception NotWellTyped of string
-exception WrongUriToConstant of string
-exception WrongUriToVariable of string
-exception WrongUriToMutualInductiveDefinitions of string
-exception ListTooShort
-exception NotPositiveOccurrences of string
-exception NotWellFormedTypeOfInductiveConstructor of string
-exception WrongRequiredArgument of string
-val typecheck : UriManager.uri -> unit
diff --git a/helm/interface/cicXPath.ml b/helm/interface/cicXPath.ml
deleted file mode 100644 (file)
index 776d229..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 14/06/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-let get_annotation_from_term annterm =
- let module C = Cic in
-  match annterm with
-     C.ARel (_,ann,_,_)             -> ann
-   | C.AVar (_,ann,_)               -> ann
-   | C.AMeta (_,ann,_)              -> ann
-   | C.ASort (_,ann,_)              -> ann
-   | C.AImplicit (_,ann)            -> ann
-   | C.ACast (_,ann,_,_)            -> ann
-   | C.AProd (_,ann,_,_,_)          -> ann
-   | C.ALambda (_,ann,_,_,_)        -> ann
-   | C.ALetIn (_,ann,_,_,_)         -> ann
-   | C.AAppl (_,ann,_)              -> ann
-   | C.AConst (_,ann,_,_)           -> ann
-   | C.AAbst (_,ann,_)              -> ann
-   | C.AMutInd (_,ann,_,_,_)        -> ann
-   | C.AMutConstruct (_,ann,_,_,_,_)-> ann
-   | C.AMutCase (_,ann,_,_,_,_,_,_) -> ann
-   | C.AFix (_,ann,_,_)             -> ann
-   | C.ACoFix (_,ann,_,_)           -> ann
-;;
-
-let get_annotation_from_obj annobj =
- let module C = Cic in
-  match annobj with
-     C.ADefinition (_,ann,_,_,_,_)        -> ann
-   | C.AAxiom (_,ann,_,_,_)               -> ann
-   | C.AVariable (_,ann,_,_,_)            -> ann
-   | C.ACurrentProof (_,ann,_,_,_,_)      -> ann
-   | C.AInductiveDefinition (_,ann,_,_,_) -> ann
-;;
-
-exception IdUnknown of string;;
-
-let get_annotation (annobj,ids_to_targets) xpath =
- try
-  match Hashtbl.find ids_to_targets xpath with
-     Cic.Object annobj -> get_annotation_from_obj annobj
-   | Cic.Term annterm -> get_annotation_from_term annterm
- with
-  Not_found -> raise (IdUnknown xpath)
-;;
diff --git a/helm/interface/clientHTTP.ml b/helm/interface/clientHTTP.ml
deleted file mode 100644 (file)
index 9086d82..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let send cmd =
- ignore (Http_client.Convenience.http_get cmd)
-
-let get uri =
- Http_client.Convenience.http_get uri
-
-let get_and_save uri dest_filename =
- let reply = get uri
- and out_channel = open_out dest_filename in
-  output_string out_channel reply ;
-  close_out out_channel
-
-let get_and_save_to_tmp uri =
- let flat_string s s' c =
-  let cs = String.copy s in
-   for i = 0 to (String.length s) - 1 do
-    if String.contains s' s.[i] then cs.[i] <- c
-   done ;
-   cs
- in
-  let tmp_file = Configuration.tmp_dir ^ "/" ^ (flat_string uri ".-=:;!?/&" '_') in
-  get_and_save uri tmp_file ;
-  tmp_file
-
diff --git a/helm/interface/config.cache.pkg b/helm/interface/config.cache.pkg
deleted file mode 100644 (file)
index fe72875..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# This is the config.cache that holds the ``standard'' path for the
-# HELM library. It is supposed to be used when creating packages
-
-helm_cv_HELM_DEFAULT_CONFIGURATION_DIR=${helm_cv_HELM_DEFAULT_CONFIGURATION_DIR='$RESOLVED_PREFIX/etc/helm'}
diff --git a/helm/interface/configuration.ml.in b/helm/interface/configuration.ml.in
deleted file mode 100644 (file)
index d20a3c0..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 28/12/2000                                 *)
-(*                                                                            *)
-(* This is the parser that reads the configuration file of helm               *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception MalformedDir of string
-
-(* this should be the only hard coded constant *)
-let filename =
- let prefix =
-  try
-   Sys.getenv "HELM_CONFIGURATION_DIR"
-  with
-   Not_found -> "@HELM_CONFIGURATION_DIR@"
- in
-  if prefix.[(String.length prefix) - 1] = '/' then
-   raise (MalformedDir prefix) ;
-  prefix ^ "/configuration.xml";;
-
-exception Warnings;;
-
-class warner =
-  object 
-    method warn w =
-      print_endline ("WARNING: " ^ w) ;
-      (raise Warnings : unit)
-  end
-;;
-
-let xml_document () =
- let module Y = Pxp_yacc in
-  try 
-   let config = {Y.default_config with Y.warner = new warner} in
-    Y.parse_document_entity config (Y.from_file filename) Y.default_spec
-  with
-   e ->
-     print_endline (Pxp_types.string_of_exn e) ;
-     raise e
-;;
-
-exception Impossible;;
-
-let vars = Hashtbl.create 14;;
-
-(* resolve <value-of> tags and returns the string values of the variable tags *)
-let rec resolve =
- let module D = Pxp_document in
-  function
-     [] -> ""
-   | he::tl when he#node_type = D.T_element "value-of" ->
-      (match he#attribute "var" with
-          Pxp_types.Value var -> Hashtbl.find vars var
-        | _ -> raise Impossible
-      ) ^ resolve tl
-   | he::tl when he#node_type = D.T_data ->
-      he#data ^ resolve tl
-   | _ -> raise Impossible
-;;
-
-(* we trust the xml file to be valid because of the validating xml parser *)
-let _ =
- List.iter
-  (function
-      n ->
-       match n#node_type with
-          Pxp_document.T_element var ->
-           Hashtbl.add vars var (resolve (n#sub_nodes))
-        | _ -> raise Impossible
-  )
-  ((xml_document ())#root#sub_nodes)
-;;
-
-(* try to read a configuration variable, given its name into the
- * configuration.xml file and its name into the shell environment.
- * The shell variable, if present, has precedence over configuration.xml
- *)
-let read_configuration_var_env xml_name env_name =
- try
-  try
-   Sys.getenv env_name
-  with
-   Not_found -> Hashtbl.find vars xml_name
- with
-  Not_found ->
-   Printf.printf "Sorry, cannot find variable `%s', please check your configuration\n" xml_name ;
-   flush stdout ;
-   raise Not_found
-
-let read_configuration_var xml_name =
- try
-  Hashtbl.find vars xml_name
- with
-  Not_found ->
-   Printf.printf "Sorry, cannot find variable `%s', please check your configuration\n" xml_name ;
-   flush stdout ;
-   raise Not_found
-
-let helm_dir      = read_configuration_var     "helm_dir";;
-let dtd_dir       = read_configuration_var     "dtd_dir";;
-let style_dir     = read_configuration_var_env "style_dir" "HELM_STYLE_DIR";;
-let servers_file  = read_configuration_var     "servers_file";;
-let uris_dbm      = read_configuration_var     "uris_dbm";;
-let dest          = read_configuration_var     "dest";;
-let indexname     = read_configuration_var     "indexname";;
-let tmp_dir       = read_configuration_var     "tmp_dir"
-let helm_dir      = read_configuration_var     "helm_dir";;
-let getter_url    = read_configuration_var_env "getter_url" "HELM_GETTER_URL";;
-let processor_url = read_configuration_var_env "processor_url" "HELM_PROCESSOR_URL";;
-
-let _ = Hashtbl.clear vars;;
-
diff --git a/helm/interface/configure.in b/helm/interface/configure.in
deleted file mode 100644 (file)
index 4dc7a6f..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-AC_INIT(configuration.ml.in)
-
-PACKAGE=helm_gtk_interface
-MAJOR_VERSION=0
-MINOR_VERSION=0
-MICRO_VERSION=2
-VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION
-
-DEFAULT_HELM_CONFIGURATION_DIR=/usr/local/etc/helm
-
-AC_ARG_ENABLE(
-       defaults,
-       [  --enable-defaults[=ARG] if yes then use defaults (don't ask user) [default=auto]],
-       USE_DEFAULTS=$enableval,
-       USE_DEFAULTS=auto
-)
-
-if test "x$prefix" != xNONE; then
-  RESOLVED_PREFIX=$prefix
-else
-  RESOLVED_PREFIX=$ac_default_prefix
-fi
-
-if test "x$exec_prefix" != xNONE; then
-  RESOLVED_EXEC_PREFIX=$exec_prefix
-else
-  RESOLVED_EXEC_PREFIX=$RESOLVED_PREFIX
-fi
-
-dnl The following is the directory where the binary will be installed
-BIN_DIR=$RESOLVED_EXEC_PREFIX/bin
-
-AC_PATH_PROG(WGET_BINARY,wget,no)
-if test $WGET_BINARY = no; then
-       AC_MSG_WARN(wget is required to update the database)
-fi
-
-AC_PATH_PROG(PERL_BINARY,perl,no)
-if test $PERL_BINARY = no ; then
-   AC_MSG_ERROR(Could not find perl)
-fi
-
-dnl MISSING CHECKS:
-dnl ocaml-findlib, ocaml-netstring, ocaml-pxp, ocaml-netclient
-
-dnl Check for Ocaml
-AC_CHECK_PROG(HAVE_OCAMLC, ocamlc, yes, no)
-if test $HAVE_OCAMLC = "no"; then
-  AC_MSG_ERROR(could not find ocamlc in PATH, please make sure ocaml is installed)
-fi
-
-dnl Check for the Ocaml library dir
-AC_MSG_CHECKING(for the ocaml library dir)
-OCAML_ROOT=`ocamlc -v | grep "^Standard" | sed 's/^.*: *//'`
-AC_MSG_RESULT($OCAML_ROOT)
-
-DEFAULT_MLMINIDOM_LIB_DIR=$OCAML_ROOT/mlminidom
-DEFAULT_LABLGTK_LIB_DIR=$OCAML_ROOT/lablgtk
-DEFAULT_LABLGTKMATHVIEW_LIB_DIR=$OCAML_ROOT/lablgtkmathview
-
-dnl Check for mlminidom
-DEFAULTS=$USE_DEFAULTS
-if test $DEFAULTS = auto; then
-       if test -f $DEFAULT_MLMINIDOM_LIB_DIR/minidom.mli; then
-               MLMINIDOM_LIB_DIR=$DEFAULT_MLMINIDOM_LIB_DIR
-       else
-               DEFAULTS=no
-       fi
-fi
-
-if test $DEFAULTS = no; then
-       echo
-       echo "Where can I find the mlminidom library?"
-       echo
-       echo -n "[[$DEFAULT_MLMINIDOM_LIB_DIR]] ? "
-       echo
-       read MLMINIDOM_LIB_DIR
-       if test "x$MLMINIDOM_LIB_DIR" = x; then
-               MLMINIDOM_LIB_DIR=$DEFAULT_MLMINIDOM_LIB_DIR
-       fi
-elif test $DEFAULTS = yes; then
-       MLMINIDOM_LIB_DIR=$DEFAULT_MLMINIDOM_LIB_DIR
-fi
-
-AC_MSG_CHECKING(for $MLMINIDOM_LIB_DIR/minidom.mli)
-if test ! -f $MLMINIDOM_LIB_DIR/minidom.mli; then
-       AC_MSG_RESULT(no)
-       AC_MSG_ERROR(please check your installation)
-fi
-AC_MSG_RESULT(ok)
-
-dnl Check for lablgtk
-DEFAULTS=$USE_DEFAULTS
-if test $DEFAULTS = auto; then
-       if test -f $DEFAULT_LABLGTK_LIB_DIR/gtk.ml; then
-               LABLGTK_LIB_DIR=$DEFAULT_LABLGTK_LIB_DIR
-       else
-               DEFAULTS=no
-       fi
-fi
-
-if test $DEFAULTS = no; then
-       echo
-       echo "Where can I find the lablgtk library?"
-       echo
-       echo -n "[[$DEFAULT_LABLGTK_LIB_DIR]] ? "
-       read LABLGTK_LIB_DIR
-       echo
-       if test "x$LABLGTK_LIB_DIR" = x; then
-               LABLGTK_LIB_DIR=$DEFAULT_LABLGTK_LIB_DIR
-       fi
-elif test $DEFAULTS = yes; then
-       LABLGTK_LIB_DIR=$DEFAULT_LABLGTK_LIB_DIR
-fi
-
-AC_MSG_CHECKING(for $LABLGTK_LIB_DIR/gtk.ml)
-if test ! -f $LABLGTK_LIB_DIR/gtk.ml; then
-       AC_MSG_RESULT(no)
-       AC_MSG_ERROR(please check your installation)
-fi
-AC_MSG_RESULT(ok)
-
-dnl Check for lablgtkmathview
-DEFAULTS=$USE_DEFAULTS
-if test $DEFAULTS = auto; then
-       if test -f $DEFAULT_LABLGTKMATHVIEW_LIB_DIR/gMathView.ml; then
-               LABLGTKMATHVIEW_LIB_DIR=$DEFAULT_LABLGTKMATHVIEW_LIB_DIR
-       else
-               DEFAULTS=no
-       fi
-fi
-
-if test $DEFAULTS = no; then
-       echo
-       echo "Where can I find the lablgtkmathview library?"
-       echo
-       echo -n "[[$DEFAULT_LABLGTKMATHVIEW_LIB_DIR]] ? "
-       read LABLGTKMATHVIEW_LIB_DIR
-       echo
-       if test "x$LABLGTKMATHVIEW_LIB_DIR" = x; then
-               LABLGTKMATHVIEW_LIB_DIR=$DEFAULT_LABLGTKMATHVIEW_LIB_DIR
-       fi
-elif test $DEFAULTS = yes; then
-       LABLGTKMATHVIEW_LIB_DIR=$DEFAULT_LABLGTKMATHVIEW_LIB_DIR
-fi
-
-AC_MSG_CHECKING(for $LABLGTKMATHVIEW_LIB_DIR/gMathView.ml)
-if test ! -f $LABLGTKMATHVIEW_LIB_DIR/gMathView.ml; then
-       AC_MSG_RESULT(no)
-       AC_MSG_ERROR(please check your installation)
-fi
-AC_MSG_RESULT(ok)
-
-dnl Check for HELM
-DEFAULTS=$USE_DEFAULTS
-if test $DEFAULTS = auto; then
-       AC_CHECK_PROG(HAVE_HELM_CONFIG, helm-config, yes, no)
-       if test $HAVE_HELM_CONFIG = yes; then
-               HELM_CONFIGURATION_DIR=`helm-config --etc-dir`
-       else
-               DEFAULTS=no
-       fi
-fi
-
-if test $DEFAULTS = no; then
-       echo
-       echo "\`helm-config' is not installed (or I can't find it in your path)."
-       echo "Please, insert the directory where I can find the configuration"
-       echo "files for HELM (configuration.xml in particular)..."
-       echo
-       echo -n "[[$DEFAULT_HELM_CONFIGURATION_DIR]] ? "
-       read HELM_CONFIGURATION_DIR
-       echo
-       if test "x$HELM_CONFIGURATION_DIR" = "x"; then
-               HELM_CONFIGURATION_DIR=$DEFAULT_HELM_CONFIGURATION_DIR
-       fi
-elif test $DEFAULTS = yes; then
-       HELM_CONFIGURATION_DIR=$DEFAULT_HELM_CONFIGURATION_DIR
-fi
-
-AC_MSG_CHECKING(for configuration.xml)
-if test -f $HELM_CONFIGURATION_DIR/configuration.xml; then
-       AC_MSG_RESULT(ok)
-else
-       AC_MSG_RESULT(no)
-       AC_MSG_ERROR(please check your installation)
-fi
-
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-AC_SUBST(OCAML_ROOT)
-AC_SUBST(MLMINIDOM_LIB_DIR)
-AC_SUBST(LABLGTK_LIB_DIR)
-AC_SUBST(LABLGTKMATHVIEW_LIB_DIR)
-AC_SUBST(BIN_DIR)
-AC_SUBST(HELM_CONFIGURATION_DIR)
-AC_SUBST(PERL_BINARY)
-
-AC_OUTPUT([
-  Makefile
-  configuration.ml
-  helm_wget
-  helm_gtk_interface.spec
-],
-  chmod +x helm_wget
-)
diff --git a/helm/interface/deannotate.ml b/helm/interface/deannotate.ml
deleted file mode 100644 (file)
index 00d4854..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let expect_possible_parameters = ref false;;
-
-exception NotExpectingPossibleParameters;;
-
-let rec deannotate_term =
- let module C = Cic in
-  function
-     C.ARel (_,_,n,_) -> C.Rel n
-   | C.AVar (_,_,uri) -> C.Var uri
-   | C.AMeta (_,_,n) -> C.Meta n
-   | C.ASort (_,_,s) -> C.Sort s
-   | C.AImplicit _ -> C.Implicit
-   | C.ACast (_,_,va,ty) -> C.Cast (deannotate_term va, deannotate_term ty)
-   | C.AProd (_,_,name,so,ta) ->
-      C.Prod (name, deannotate_term so, deannotate_term ta)
-   | C.ALambda (_,_,name,so,ta) ->
-      C.Lambda (name, deannotate_term so, deannotate_term ta)
-   | C.ALetIn (_,_,name,so,ta) ->
-      C.LetIn (name, deannotate_term so, deannotate_term ta)
-   | C.AAppl (_,_,l) -> C.Appl (List.map deannotate_term l)
-   | C.AConst (_,_,uri, cookingsno) -> C.Const (uri, cookingsno)
-   | C.AAbst (_,_,uri) -> C.Abst uri
-   | C.AMutInd (_,_,uri,cookingsno,i) -> C.MutInd (uri,cookingsno,i)
-   | C.AMutConstruct (_,_,uri,cookingsno,i,j) ->
-      C.MutConstruct (uri,cookingsno,i,j)
-   | C.AMutCase (_,_,uri,cookingsno,i,outtype,te,pl) ->
-      C.MutCase (uri,cookingsno,i,deannotate_term outtype,
-       deannotate_term te, List.map deannotate_term pl)
-   | C.AFix (_,_,funno,ifl) ->
-      C.Fix (funno, List.map deannotate_inductiveFun ifl)
-   | C.ACoFix (_,_,funno,ifl) ->
-      C.CoFix (funno, List.map deannotate_coinductiveFun ifl)
-
-and deannotate_inductiveFun (name,index,ty,bo) =
- (name, index, deannotate_term ty, deannotate_term bo)
-
-and deannotate_coinductiveFun (name,ty,bo) =
- (name, deannotate_term ty, deannotate_term bo)
-;;
-
-let deannotate_inductiveType (name, isinductive, arity, cons) =
- (name, isinductive, deannotate_term arity,
-  List.map (fun (id,ty,recs) -> (id,deannotate_term ty, recs)) cons)
-;;
-
-let deannotate_obj =
- let module C = Cic in
-  function
-     C.ADefinition (_, _, id, bo, ty, params) ->
-      (match params with
-          C.Possible params ->
-           if !expect_possible_parameters then
-            C.Definition (id, deannotate_term bo, deannotate_term ty, params)
-           else
-            raise NotExpectingPossibleParameters
-        | C.Actual params ->
-           C.Definition (id, deannotate_term bo, deannotate_term ty, params)
-      )
-   | C.AAxiom (_, _, id, ty, params) ->
-      C.Axiom (id, deannotate_term ty, params)
-   | C.AVariable (_, _, name, bo, ty) ->
-      C.Variable (name,
-       (match bo with None -> None | Some bo -> Some (deannotate_term bo)),
-       deannotate_term ty)
-   | C.ACurrentProof (_, _, name, conjs, bo, ty) ->
-      C.CurrentProof (
-       name, List.map (fun (id,con) -> (id,deannotate_term con)) conjs,
-       deannotate_term bo, deannotate_term ty
-      )
-   | C.AInductiveDefinition (_, _, tys, params, parno) ->
-      C.InductiveDefinition ( List.map deannotate_inductiveType tys,
-       params, parno)
-;;
diff --git a/helm/interface/experiment.ml b/helm/interface/experiment.ml
deleted file mode 100644 (file)
index 7d06b4d..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This is a textual interface to the Coq-like pretty printer cicPp for cic   *)
-(* terms exported in xml. It uses directly the modules cicPp and cache and    *)
-(* indirectly all the other modules (cicParser, cicParser2, cicParser3,       *)
-(* getter). The syntax is  "experiment[.opt] filename1 ... filenamen" where   *)
-(* filenamei is the path-name of an xml file describing a cic term. On stdout *)
-(* are pretty-printed all the n terms                                         *)
-(*                                                                            *)
-(******************************************************************************)
-
-let pretty_print    = ref true;;
-let read_from_stdin = ref false;;
-let uris_in_input   = ref false;;
-
-let parse uri =
- if !pretty_print then
-  begin
-   print_endline ("^^^" ^ uri ^ "^^^") ;
-   print_string (CicPp.ppobj (CicCache.get_obj (UriManager.uri_of_string uri)));
-   print_endline ("\n$$$" ^ uri ^ "$$$\n")
-  end
- else
-  begin
-   print_string uri ;
-   let _ = CicCache.get_obj  (UriManager.uri_of_string uri) in
-    print_endline " OK!" ;
-    flush stdout
-  end
-;;
-
-let uri_of_filename fn =
- if !uris_in_input then fn
- else
-  let uri =
-   Str.replace_first (Str.regexp (Str.quote Configuration.helm_dir)) "cic:" fn
-  in
-   let uri' = Str.replace_first (Str.regexp "\.xml$") "" uri in
-    uri'
-;;
-
-let read_filenames_from_stdin () =
- let files = ref [] in
-  try
-   while true do
-    let l = Str.split (Str.regexp " ") (read_line ()) in
-     List.iter (fun x -> files := (uri_of_filename x) :: !files) l
-   done
-  with
-   End_of_file ->
-    files := List.rev !files ;
-    List.iter parse !files
-;;
-
-(* filenames are read from command line and converted to uris via *)
-(* uri_of_filenames; then the cic terms are load in cache via     *)
-(* CicCache.get_obj  and then pretty printed via CicPp.ppobj      *)
-
-let main() =
-  let files = ref [] in
-  Arg.parse
-   ["-nopp", Arg.Clear pretty_print, "Do not pretty print, parse only" ;
-    "-stdin", Arg.Set read_from_stdin, "Read from stdin" ;
-    "-uris", Arg.Set uris_in_input, "Read uris, not filenames" ;
-    "-update", Arg.Unit Getter.update, "Update the getter view of the world"]
-   (fun x -> files := (uri_of_filename x) :: !files)
-   "
-usage: experiment file ...
-
-List of options:";
-  if !read_from_stdin then read_filenames_from_stdin ()
-  else
-   begin
-    files := List.rev !files;
-    List.iter parse !files
-   end
-;;
-
-main();;
diff --git a/helm/interface/fix_params.ml b/helm/interface/fix_params.ml
deleted file mode 100644 (file)
index f1edf09..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let read_from_stdin = ref false;;
-
-let uri_of_filename fn =
- let uri =
-  Str.replace_first (Str.regexp (Str.quote Configuration.helm_dir)) "cic:" fn
- in
-  let uri' = Str.replace_first (Str.regexp "\.xml$") "" uri in
-   UriManager.uri_of_string uri'
-;;
-
-let main() =
-  Deannotate.expect_possible_parameters := true ;
-  let files = ref [] in
-  Arg.parse
-   ["-stdin", Arg.Set read_from_stdin, "Read from stdin"]
-   (fun x -> files := (x, uri_of_filename x) :: !files)
-      "
-usage: experiment file ...
-
-List of options:";
-  if !read_from_stdin then
-   begin
-    try
-     while true do
-      let l = Str.split (Str.regexp " ") (read_line ()) in
-       List.iter (fun x -> files := (x, uri_of_filename x) :: !files) l
-     done
-    with
-     End_of_file -> ()
-   end ;
-  files := List.rev !files;
-  Getter.update () ;
-  print_endline "ATTENTION: have you changed servers.txt so that you'll try \
-   to repair your own objs instead of others'?" ;
-  flush stdout ;
-  List.iter
-    (function (fn, uri) ->
-      print_string (UriManager.string_of_uri uri) ;
-      flush stdout ;
-      (try
-       CicFindParameters.fix_params uri (Some fn)
-      with
-        e -> print_newline () ; flush stdout ; raise e ) ;
-      print_endline " OK!" ;
-      flush stdout
-    ) !files
-;;
-
-main();;
diff --git a/helm/interface/getter.ml b/helm/interface/getter.ml
deleted file mode 100644 (file)
index 5b973f2..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(******************************************************************************)
-
-
-(*CSC: il getter _DEVE_ diventare un semplice "binding" a quello in Perl *)
-
-let update () =
-(* deliver update request to http_getter *)
- ClientHTTP.send (Configuration.getter_url ^ "update")
-;;
-
-(* url_of_uri : uri -> url *)
-let url_of_uri uri =
- let dbm = Dbm.opendbm Configuration.uris_dbm [Dbm.Dbm_rdonly] 0o660 in
-  let url = Dbm.find dbm (UriManager.string_of_uri uri) in
-   Dbm.close dbm ;
-   url
-;;
-
-let filedir_of_uri uri =
- let fn = UriManager.buri_of_uri uri in
-  let fn' = Str.replace_first (Str.regexp ".*:") Configuration.dest fn in
-   fn'
-;;
-
-let name_and_ext_of_uri uri =
- let str = UriManager.string_of_uri uri in
-  Str.replace_first (Str.regexp ".*/") "" str
-;;
-
-let raw_get = ClientHTTP.get_and_save
-
-(* get_file : uri -> filename *)
-let get_file uri =
- let dir = filedir_of_uri uri in
-  let fn = dir ^ "/" ^ name_and_ext_of_uri uri ^ ".xml" in
-   if not (Sys.file_exists fn) then
-    begin
-     let url = url_of_uri uri in
-      raw_get
-       (Configuration.getter_url ^ "getxml?uri=" ^
-        UriManager.string_of_uri uri ^ "&format=normal&patch_dtd=no"
-       ) fn
-    end ;
-   fn
-;;
-
-(* get : uri -> filename *)
-(* If uri is the URI of an annotation, the annotated object is processed *)
-let get uri =
- let module U = UriManager in
-  get_file
-   (U.uri_of_string
-    (Str.replace_first (Str.regexp "\.types$") ""
-     (Str.replace_first (Str.regexp "\.ann$") "" (U.string_of_uri uri))))
-;;
-
-(* get_ann : uri -> filename *)
-(* If uri is the URI of an annotation, the annotation file is processed *)
-let get_ann = get_file;;
-
-(* get_ann_file_name_and_uri : uri -> filename * annuri *)
-(* If given an URI, it returns the name of the corresponding *)
-(* annotation file and the annotation uri                    *)
-let get_ann_file_name_and_uri uri = 
- let module U = UriManager in
-  let uri = U.string_of_uri uri in
-   let annuri =
-    U.uri_of_string (
-     if Str.string_match (Str.regexp ".*\.ann$") uri 0 then
-      uri
-     else
-      uri ^ ".ann"
-    )
-   in
-    let dir = filedir_of_uri annuri in
-     let fn = dir ^ "/" ^ name_and_ext_of_uri annuri ^ ".xml" in
-      (fn, annuri)
-;;
diff --git a/helm/interface/getter.mli b/helm/interface/getter.mli
deleted file mode 100644 (file)
index 0c7401c..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* raw_get : uri -> dest_file -> () *)
-val raw_get : string -> string -> unit
-
-(* get : uri -> filename *)
-(* If uri is the URI of an annotation, the annotated object is processed *)
-val get : UriManager.uri -> string
-
-(* get_ann : uri -> filename *)
-(* If uri is the URI of an annotation, the annotation file is processed *)
-val get_ann : UriManager.uri -> string
-
-(* get_ann_file_name_and_uri : uri -> filename * annuri *)
-(* If given an URI, it returns the name of the corresponding *)
-(* annotation file and the annotation uri                    *)
-val get_ann_file_name_and_uri : UriManager.uri -> string * UriManager.uri
-
-(* synchronize with the servers *)
-val update : unit -> unit
diff --git a/helm/interface/helm_gtk_interface.spec.in b/helm/interface/helm_gtk_interface.spec.in
deleted file mode 100644 (file)
index 0e567ae..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-Summary: The gtk interface for the library of project HELM
-Name: @PACKAGE@
-Version: @VERSION@
-Release: 1
-Copyright: GPL
-URL: http://www.cs.unibo.it/helm
-Packager: Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
-Requires: helm_configuration >= 0.0.2, helm_data >= 0.0.2, helm_http_getter >= 0.0.2, helm_uwobo >= 0.0.2, ocaml >= 3.00, ocaml-findlib, ocaml-netstring, ocaml-pxp, lablgtk, lablgtkmathview >= 0.0.2
-Group: Applications/Publishing
-Source: www.cs.unibo.it:/helm/@PACKAGE@-@VERSION@.tar.gz
-%description
-HELM (Hypertextual Electronic Library of Mathematics) is a project aimed
-at the creation of tools for the development and exploitation of a huge
-distributed library of formal mathematical knowledge. This package holds
-a gtk interface to the library.
-For more information see http://www.cs.unibo.it/helm
-
-%prep
-%setup
-
-%build
-./configure --enable-defaults
-make
-make opt
-
-%install
-make install
-
-%files
-%doc AUTHORS COPYING ChangeLog NEWS README
-%attr(755,root,root) /usr/local/bin/mmlinterface
-%attr(755,root,root) /usr/local/bin/mmlinterface.opt
diff --git a/helm/interface/helm_wget.in b/helm/interface/helm_wget.in
deleted file mode 100755 (executable)
index 8aa0260..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!@PERL_BINARY@
-
-if ($#ARGV != 1) {
- print STDERR "Usage: helm_wget prefix URL\n";
- exit -1;
-}
-
-my ($prefix,$URL) = @ARGV;
-if ($URL =~ /^file:\//) {
- $URL =~ s/^file:\///;
- my $command = "mkdir -p $prefix ; cp $URL $prefix";
- print "$command\n";
- system($command) == 0
-  or die "\"$command\" error";
-} else {
- my $command = "wget -c -P $prefix $URL";
- system($command) == 0
-  or die "\"$command\" error";
-}
diff --git a/helm/interface/mmlinterface.ml b/helm/interface/mmlinterface.ml
deleted file mode 100755 (executable)
index 68c4134..0000000
+++ /dev/null
@@ -1,518 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 03/04/2001                                 *)
-(*                                                                            *)
-(* This is a simple gtk interface to the Coq-like pretty printer cicPp for    *)
-(* cic terms exported in xml. It uses directly the modules cicPp and          *)
-(* cicCcache and indirectly all the other modules (cicParser, cicParser2,     *)
-(* cicParser3, getter).                                                       *)
-(* The syntax is  "gtkInterface[.opt] filename1 ... filenamen" where          *)
-(* filenamei is the path-name of an xml file describing a cic term.           *)
-(* The terms are loaded in cache and then pretty-printed one at a time and    *)
-(* only once, when the user wants to look at it: if the user wants to look at *)
-(* a term again, then the pretty-printed term is showed again, but not        *)
-(* recomputed                                                                 *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* GLOBAL REFERENCES (USED BY CALLBACKS) *)
-
-let annotated_obj = ref None;;      (* reference to a couple option where    *)
-                                    (* the first component is the current    *)
-                                    (* annotated object and the second is    *)
-                                    (* the map from ids to annotated targets *)
-let ann = ref (ref None);;          (* current annotation *)
-let radio_some_status = ref false;; (* is the radio_some button selected? *)
-let current_url = ref "";;
-
-(* MISC FUNCTIONS *)
-
-let pathname_of_annuri uristring =
- Configuration.annotations_dir ^
-  Str.replace_first (Str.regexp "^cic:") "" uristring
-;;
-
-let make_dirs dirpath =
- ignore (Unix.system ("mkdir -p " ^ dirpath))
-;;
-
-exception No_param_dot_CICURI_or_param_dot_annotations_found_in of string;;
-exception Bad_formed_url of string;;
-
-let uri_from_url url =
- let module N = Neturl in
- let founduri = ref None in
- let foundann = ref None in
-  let rec find_uri =
-   function
-      [] -> raise (No_param_dot_CICURI_or_param_dot_annotations_found_in url)
-    | he::tl ->
-       match Str.split (Str.regexp "=") he with
-          ["param.CICURI";uri] ->
-            if !founduri <> None then
-             raise (Bad_formed_url url)
-            else
-             begin
-              founduri := Some uri ;
-              if !foundann = None then
-               find_uri tl
-             end
-        | ["param.annotations";ann] ->
-            if !foundann <> None then
-             raise (Bad_formed_url url)
-            else
-             begin
-              foundann :=
-               Some
-                (match ann with
-                    "yes" -> ".ann"
-                  | "NO"  -> ""
-                  | _     -> raise (Bad_formed_url url)
-                ) ;
-              if !founduri = None then
-               find_uri tl
-             end
-        | _ -> find_uri tl
-  in
-   find_uri
-    (Str.split (Str.regexp "&")
-     (N.url_query ~encoded:true (N.url_of_string N.ip_url_syntax url))) ;
-   match !founduri,!foundann with
-      (Some uri),(Some ann) -> uri ^ ann
-    | _         , _         ->
-       raise (No_param_dot_CICURI_or_param_dot_annotations_found_in url)
-;;
-
-let get_current_uri () =
- UriManager.uri_of_string (uri_from_url !current_url)
-;;
-
-(* CALLBACKS *)
-
-let get_annotated_obj () =
- match !annotated_obj with
-    None   ->
-     let annobj =
-      (CicCache.get_annobj (get_current_uri ()))
-     in
-      annotated_obj := Some annobj ;
-      annobj
-  | Some annobj -> annobj
-;;
-
-let update_output rendering_window url =
- rendering_window#label#set_text (uri_from_url url) ;
- rendering_window#output#load url
-;;
-
-(* called when an hyperlink is clicked *)
-let jump rendering_window (node : Ominidom.o_mDOMNode) =
- let module O = Ominidom in
- let module U = Unix in
-  match (node#get_attribute (O.o_mDOMString_of_string "href")) with
-    Some str ->
-     let frameseturl = str#get_string in
-     let devnull = U.openfile "/dev/null" [U.O_RDWR] 0o600 in
-      ignore
-       (U.create_process "netscape-remote"
-         [|"netscape-remote" ; "-noraise" ; "-remote" ;
-           "openURL(" ^ frameseturl ^ ",cic)"
-         |] devnull devnull devnull)
-  | None -> assert false
-;;
-
-(* called by the remote control *)
-let remotejump rendering_window url =
- current_url := url ;
- update_output rendering_window url
-;;
-
-let choose_selection rendering_window (node : Ominidom.o_mDOMNode option) =
- let module O = Ominidom in
-  let rec aux node =
-   match node#get_attribute (O.o_mDOMString_of_string "xref") with
-     Some _ -> rendering_window#output#set_selection (Some node)
-   | None   -> aux (node#get_parent)
-  in
-   match node with
-     Some x -> aux x
-   | None   -> rendering_window#output#set_selection None
-;;
-
-let annotateb_pressed rendering_window annotation_window () =
- let module O = Ominidom in
- match rendering_window#output#get_selection with
-   Some node ->
-    begin
-     match (node#get_attribute (O.o_mDOMString_of_string "xref")) with
-        Some xpath ->
-         let annobj = get_annotated_obj ()
-         and annotation = (annotation_window#annotation : GEdit.text) in
-          ann := CicXPath.get_annotation annobj (xpath#get_string) ;
-          CicAnnotationHinter.create_hints annotation_window annobj
-          (xpath#get_string) ;
-          annotation#delete_text 0 annotation#length ;
-          begin
-           match !(!ann) with
-               None      ->
-                annotation#misc#set_sensitive false ;
-                annotation_window#radio_none#set_active true ;
-                radio_some_status := false
-             | Some ann' ->
-                annotation#insert ann' ;
-                annotation#misc#set_sensitive true ;
-                annotation_window#radio_some#set_active true ;
-                radio_some_status := true
-          end ;
-          GMain.Grab.add (annotation_window#window_to_annotate#coerce) ;
-          annotation_window#show () ;
-     | None -> rendering_window#label#set_text ("ERROR: No xref found!!!\n")
-    end
- | None -> rendering_window#label#set_text ("ERROR: No selection!!!\n")
-;;
-
-(* called when the annotation is confirmed *)
-let save_annotation annotation =
- let module S = Str in
- let module U = UriManager in
-  if !radio_some_status then
-   !ann := Some (annotation#get_chars 0 annotation#length)
-  else
-   !ann := None ;
-  match !annotated_obj with
-     None -> assert false
-   | Some (annobj,_) ->
-      let uri = get_current_uri () in
-       let annxml = Annotation2Xml.pp_annotation annobj uri in
-        make_dirs
-          (pathname_of_annuri (U.buri_of_uri uri)) ;
-        Xml.pp ~quiet:true annxml
-         (Some
-          (pathname_of_annuri (U.string_of_uri (U.annuri_of_uri uri)) ^
-           ".xml"
-          )
-         )
-;;
-
-(* STUFF TO BUILD THE GTK INTERFACE *)
-
-(* Stuff for the widget settings *)
-
-let export_to_postscript (output : GMathView.math_view) () =
- output#export_to_postscript ~filename:"output.ps" ();
-;;
-
-let activate_t1 output button_set_anti_aliasing button_set_kerning 
- button_export_to_postscript button_t1 ()
-=
- let is_set = button_t1#active in
-  output#set_font_manager_type
-   (if is_set then `font_manager_t1 else `font_manager_gtk) ;
-  if is_set then
-   begin
-    button_set_anti_aliasing#misc#set_sensitive true ;
-    button_set_kerning#misc#set_sensitive true ;
-    button_export_to_postscript#misc#set_sensitive true ;
-   end
-  else
-   begin
-    button_set_anti_aliasing#misc#set_sensitive false ;
-    button_set_kerning#misc#set_sensitive false ;
-    button_export_to_postscript#misc#set_sensitive false ;
-   end
-;;
-
-let set_anti_aliasing output button_set_anti_aliasing () =
- output#set_anti_aliasing button_set_anti_aliasing#active
-;;
-
-let set_kerning output button_set_kerning () =
- output#set_kerning button_set_kerning#active
-;;
-
-let changefont output font_size_spinb () =
- output#set_font_size font_size_spinb#value_as_int
-;;
-
-let set_log_verbosity output log_verbosity_spinb () =
- output#set_log_verbosity log_verbosity_spinb#value_as_int
-;;
-
-class settings_window output sw button_export_to_postscript jump_callback
- selection_changed_callback
-=
- let settings_window = GWindow.window ~title:"GtkMathView settings" () in
- let vbox =
-  GPack.vbox ~packing:settings_window#add () in
- let table =
-  GPack.table
-   ~rows:1 ~columns:3 ~homogeneous:false ~row_spacings:5 ~col_spacings:5
-   ~border_width:5 ~packing:vbox#add () in
- let button_t1 =
-  GButton.toggle_button ~label:"activate t1 fonts"
-   ~packing:(table#attach ~left:0 ~top:0) () in
- let button_set_anti_aliasing =
-  GButton.toggle_button ~label:"set_anti_aliasing"
-   ~packing:(table#attach ~left:1 ~top:0) () in
- let button_set_kerning =
-  GButton.toggle_button ~label:"set_kerning"
-   ~packing:(table#attach ~left:2 ~top:0) () in
- let table =
-  GPack.table
-   ~rows:2 ~columns:2 ~homogeneous:false ~row_spacings:5 ~col_spacings:5
-   ~border_width:5 ~packing:vbox#add () in
- let font_size_label =
-  GMisc.label ~text:"font size:"
-   ~packing:(table#attach ~left:0 ~top:0 ~expand:`NONE) () in
- let font_size_spinb =
-  let sadj =
-   GData.adjustment ~value:14.0 ~lower:5.0 ~upper:50.0 ~step_incr:1.0 ()
-  in
-   GEdit.spin_button 
-    ~adjustment:sadj ~packing:(table#attach ~left:1 ~top:0 ~fill:`NONE) () in
- let log_verbosity_label =
-  GMisc.label ~text:"log verbosity:"
-   ~packing:(table#attach ~left:0 ~top:1) () in
- let log_verbosity_spinb =
-  let sadj =
-   GData.adjustment ~value:0.0 ~lower:0.0 ~upper:3.0 ~step_incr:1.0 ()
-  in
-   GEdit.spin_button 
-    ~adjustment:sadj ~packing:(table#attach ~left:1 ~top:1) () in
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let closeb =
-  GButton.button ~label:"Close"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-object(self)
- method show = settings_window#show
- initializer
-  button_set_anti_aliasing#misc#set_sensitive false ;
-  button_set_kerning#misc#set_sensitive false ;
-  (* Signals connection *)
-  ignore(button_t1#connect#clicked
-   (activate_t1 output button_set_anti_aliasing button_set_kerning
-    button_export_to_postscript button_t1)) ;
-  ignore(font_size_spinb#connect#changed (changefont output font_size_spinb)) ;
-  ignore(button_set_anti_aliasing#connect#toggled
-   (set_anti_aliasing output button_set_anti_aliasing));
-  ignore(button_set_kerning#connect#toggled
-   (set_kerning output button_set_kerning)) ;
-  ignore(log_verbosity_spinb#connect#changed
-   (set_log_verbosity output log_verbosity_spinb)) ;
-  ignore(closeb#connect#clicked settings_window#misc#hide)
-end;;
-
-(* Main windows *)
-
-class annotation_window output label =
- let window_to_annotate =
-  GWindow.window ~title:"Annotating environment" ~border_width:2 () in
- let hbox1 =
-  GPack.hbox ~packing:window_to_annotate#add () in
- let vbox1 =
-  GPack.vbox ~packing:(hbox1#pack ~padding:5) () in
- let hbox2 =
-  GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in
- let radio_some = GButton.radio_button ~label:"Annotation below"
-  ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5) () in
- let radio_none = GButton.radio_button ~label:"No annotation"
-  ~group:radio_some#group
-  ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5)
-  ~active:true () in
- let annotation = GEdit.text ~editable:true ~width:400 ~height:180
-  ~packing:(vbox1#pack ~padding:5) () in
- let table =
-  GPack.table ~rows:3 ~columns:3 ~packing:(vbox1#pack ~padding:5) () in
- let annotation_hints =
-  Array.init 9
-   (function i ->
-     GButton.button ~label:("Hint " ^ string_of_int i)
-      ~packing:(table#attach ~left:(i mod 3) ~top:(i / 3)) ()
-   ) in
- let vbox2 =
-  GPack.vbox ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in
- let confirmb =
-  GButton.button ~label:"O.K."
-   ~packing:(vbox2#pack ~expand:false ~fill:false ~padding:5) () in
- let abortb =
-  GButton.button ~label:"Abort"
-   ~packing:(vbox2#pack ~expand:false ~fill:false ~padding:5) () in
-object (self)
- method window_to_annotate = window_to_annotate
- method annotation = annotation
- method radio_some = radio_some
- method radio_none = radio_none
- method annotation_hints = annotation_hints
- method output = (output : GMathView.math_view)
- method show () = window_to_annotate#show ()
- initializer
-  (* signal handlers here *)
-  ignore (window_to_annotate#event#connect#delete
-   (fun _ ->
-     window_to_annotate#misc#hide () ;
-     GMain.Grab.remove (window_to_annotate#coerce) ; 
-     true
-   )) ;
-  ignore (confirmb#connect#clicked
-   (fun () ->
-     window_to_annotate#misc#hide () ;
-     save_annotation annotation ;
-     GMain.Grab.remove (window_to_annotate#coerce) ;
-     let new_current_uri = UriManager.annuri_of_uri (get_current_uri ()) in
-      Getter.register new_current_uri
-       (Configuration.annotations_url ^
-         Str.replace_first (Str.regexp "^cic:") ""
-          (UriManager.string_of_uri new_current_uri) ^ ".xml"
-       ) ;
-(*CSC: corretto, up to XsltProcessor.url_of_uri
-      let new_current_url = XsltProcessor.url_of_uri new_current_uri in
-       current_url := new_current_url ;
-       label#set_text (UriManager.string_of_uri new_current_uri) ;
-       output#load new_current_url
-*) ()
-   )) ;
-  ignore (abortb#connect#clicked
-   (fun () ->
-     window_to_annotate#misc#hide () ;
-     GMain.Grab.remove (window_to_annotate#coerce)
-   ));
-  ignore (radio_some#connect#clicked
-   (fun () -> annotation#misc#set_sensitive true ; radio_some_status := true)) ;
-  ignore (radio_none #connect#clicked
-   (fun () ->
-     annotation#misc#set_sensitive false;
-     radio_some_status := false)
-   )
-end;;
-
-class rendering_window annotation_window output (label : GMisc.label) =
- let window =
-  GWindow.window ~title:"MathML viewer" ~border_width:2 () in
- let vbox =
-  GPack.vbox ~packing:window#add () in
- let _ = vbox#pack ~expand:false ~fill:false ~padding:5 label#coerce in
- let scrolled_window0 =
-  GBin.scrolled_window ~border_width:10
-   ~packing:(vbox#pack ~expand:true ~padding:5) () in
- let _ = scrolled_window0#add output#coerce in
- let hbox =
-  GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
- let annotateb =
-  GButton.button ~label:"Annotate"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let settingsb =
-  GButton.button ~label:"Settings"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let button_export_to_postscript =
-  GButton.button ~label:"export_to_postscript"
-  ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let closeb =
-  GButton.button ~label:"Close"
-   ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
-object(self)
- method label = label
- method output = (output : GMathView.math_view)
- method show () = window#show ()
- initializer
-  button_export_to_postscript#misc#set_sensitive false ;
-
-  (* signal handlers here *)
-  ignore(output#connect#jump (jump self)) ;
-  ignore(output#connect#selection_changed (choose_selection self)) ;
-  ignore(closeb#connect#clicked (fun _ -> GMain.Main.quit ())) ;
-  ignore(annotateb#connect#clicked (annotateb_pressed self annotation_window)) ;
-  let settings_window = new settings_window output scrolled_window0
-   button_export_to_postscript (jump self) (choose_selection self) in
-  ignore(settingsb#connect#clicked settings_window#show) ;
-  ignore(button_export_to_postscript#connect#clicked (export_to_postscript output)) ;
-  ignore(window#event#connect#delete (fun _ -> GMain.Main.quit () ; true ))
-end;;
-
-(* MAIN *)
-
-let initialize_everything tmpfile url =
- let module U = Unix in
-  (* Let's be ready to be remotely controlled *) 
-  let socket = U.socket ~domain:U.PF_INET ~kind:U.SOCK_DGRAM ~protocol:0 in
-  let address = U.ADDR_INET (U.inet_addr_of_string "127.000.000.001", 8778) in
-  let buffersize = 2048 in (* are 2048 chars enough? *)
-  let buffer = String.create buffersize in
-   try
-    U.bind socket address ;
-    U.set_nonblock socket ;
-    let output = GMathView.math_view ~width:400 ~height:380 ()
-    and label = GMisc.label ~text:"???" () in
-     let annotation_window = new annotation_window output label in
-     let rendering_window =
-      new rendering_window annotation_window output label
-     in
-     let exec_remote_request () =
-      try
-       remotejump rendering_window
-        (String.sub buffer 0 (U.recv socket buffer 0 buffersize []))
-      with
-         U.Unix_error (U.EAGAIN,_,_)
-       | U.Unix_error (U.EWOULDBLOCK,_,_) -> ()
-     in
-      ignore (GMain.Timeout.add ~ms:500
-       ~callback:(fun () -> exec_remote_request () ; true)) ;
-      rendering_window#show () ;
-      rendering_window#label#set_text (uri_from_url url) ;
-      rendering_window#output#load tmpfile ;
-      GMain.Main.main ()
-   with
-    U.Unix_error (_,"bind",_) ->
-     (* Another copy is already under execution ==> I am a remote control *)
-     ignore (U.sendto socket url 0 (String.length url) [] address)
-;;
-
-let _ =
- let filename = ref "" in
- let usage_msg =
-   "\nusage: mmlinterface[.opt] file url\n\n List of options:"
- in
-  Arg.parse []
-   (fun x ->
-     if x = "" then raise (Arg.Bad "Empty filename or URL not allowed") ;
-     if !filename = "" then
-      filename := x
-     else if !current_url = "" then
-      current_url := x
-     else
-      begin
-       prerr_string "More than two arguments provided\n" ;
-       Arg.usage [] usage_msg ;
-       exit (-1)
-      end
-   ) usage_msg ;
-   initialize_everything !filename !current_url
-;;
diff --git a/helm/interface/pxpUriResolver.ml b/helm/interface/pxpUriResolver.ml
deleted file mode 100644 (file)
index 7ca78aa..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 11/10/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-let resolve s =
- let starts_with s s' =
-  if String.length s < String.length s' then
-   false
-  else
-   (String.sub s 0 (String.length s')) = s'
- in
-  if starts_with s "http:" then
-   ClientHTTP.get_and_save_to_tmp s
-  else
-   s
-;;
-
-let url_syntax =
-    let enable_if =
-      function
-         `Not_recognized  -> Neturl.Url_part_not_recognized
-       | `Allowed         -> Neturl.Url_part_allowed
-       | `Required        -> Neturl.Url_part_required
-    in
-    { Neturl.null_url_syntax with
-       Neturl.url_enable_scheme = enable_if `Allowed;
-       Neturl.url_enable_host   = enable_if `Allowed;
-       Neturl.url_enable_path   = Neturl.Url_part_required;
-       Neturl.url_accepts_8bits = true;
-    } 
-;;
-
-let file_url_of_id xid =
-  let file_url_of_sysname sysname =
-    (* By convention, we can assume that sysname is a URL conforming
-     * to RFC 1738 with the exception that it may contain non-ASCII
-     * UTF-8 characters. 
-     *)
-    try
-     Neturl.url_of_string url_syntax sysname 
-        (* may raise Malformed_URL *)
-    with
-     Neturl.Malformed_URL -> raise Pxp_reader.Not_competent
-  in
-  let url =
-    match xid with
-       Pxp_types.Anonymous          -> raise Pxp_reader.Not_competent
-     | Pxp_types.Public (_,sysname) ->
-        let sysname = resolve sysname in
-         if sysname <> "" then file_url_of_sysname sysname
-                          else raise Pxp_reader.Not_competent
-     | Pxp_types.System sysname     ->
-        let sysname = resolve sysname in
-         file_url_of_sysname sysname
-  in
-  let scheme =
-    try Neturl.url_scheme url with Not_found -> "file" in
-  let host =
-    try Neturl.url_host url with Not_found -> "" in
-    
-  if scheme <> "file" then raise Pxp_reader.Not_competent;
-  if host <> "" && host <> "localhost" then raise Pxp_reader.Not_competent;
-    
-  url
-;;
-
-let from_file ?system_encoding utf8_filename =
-  
-  let r =
-    new Pxp_reader.resolve_as_file 
-      ?system_encoding:system_encoding
-      ~url_of_id:file_url_of_id
-      ()
-  in
-
-  let utf8_abs_filename =
-    if utf8_filename <> "" && utf8_filename.[0] = '/' then
-      utf8_filename
-    else
-      Sys.getcwd() ^ "/" ^ utf8_filename
-  in
-
-  let syntax = { Neturl.ip_url_syntax with Neturl.url_accepts_8bits = true } in
-  let url = Neturl.make_url 
-             ~scheme:"file" 
-             ~host:"localhost" 
-             ~path:(Neturl.split_path utf8_abs_filename) 
-             syntax
-  in
-
-  let xid = Pxp_types.System (Neturl.string_of_url url) in
-    
-
-  Pxp_yacc.ExtID(xid, r)
-;;
-
-
diff --git a/helm/interface/reduction.ml b/helm/interface/reduction.ml
deleted file mode 100644 (file)
index 558822b..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let read_from_stdin = ref false;;
-let uris_in_input = ref false;;
-let reduction_only = ref false;;
-
-let parse uri =
- print_endline ("^^^" ^ uri ^ "^^^") ;
- print_string (CicPp.ppobj (CicCache.get_obj (UriManager.uri_of_string uri))) ;
- print_endline ("\n$$$" ^ uri ^ "$$$\n")
-;;
-
-let uri_of_filename fn =
- if !uris_in_input then fn
- else
-  let uri =
-   Str.replace_first (Str.regexp (Str.quote Configuration.helm_dir)) "cic:" fn
-  in
-   let uri' = Str.replace_first (Str.regexp "\.xml$") "" uri in
-    uri'
-;;
-
-(* filenames are read from command line and converted to uris via *)
-(* uri_of_filenames; then the cic terms are load in cache via     *)
-(* CicCache.get_obj and then pretty printed via CicPp.ppobj       *)
-
-exception NotADefinition;;
-
-let main () =
- let files = ref [] in
- Arg.parse
-  ["-stdin", Arg.Set read_from_stdin, "Read from stdin" ;
-   "-uris", Arg.Set uris_in_input, "Read uris, not filenames" ;
-   "-update", Arg.Unit Getter.update, "Update the getter view of the world" ;
-   "-reduction", Arg.Set reduction_only, "Do reduction instead of tyepchecking"]
-  (fun x -> files := (uri_of_filename x) :: !files)
-  "
-usage: experiment file ...
-
-List of options:";
- if !read_from_stdin then
-  begin
-   try
-    while true do
-     let l = Str.split (Str.regexp " ") (read_line ()) in
-      List.iter (fun x -> files := (uri_of_filename x) :: !files) l
-    done
-   with
-    End_of_file -> ()
-  end ;
- files := List.rev !files;
-  List.iter
-   (function x ->
-     print_string x ;
-     flush stdout ;
-     (try
-       if !reduction_only then
-        match CicCache.get_obj (UriManager.uri_of_string x) with
-           Cic.Definition (_,bo,_,_) ->
-            CicTypeChecker.typecheck (UriManager.uri_of_string x) ;
-            ignore (CicReduction.whd bo)
-         | _ -> raise NotADefinition
-       else
-        CicTypeChecker.typecheck (UriManager.uri_of_string x)
-     with
-       e -> print_newline () ; flush stdout ; raise e ) ;
-     print_endline " OK!" ;
-     flush stdout
-   ) !files
-;;
-
-main ();;
diff --git a/helm/interface/styleConfiguration.ml b/helm/interface/styleConfiguration.ml
deleted file mode 100644 (file)
index ff85de7..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 28/12/2000                                 *)
-(*                                                                            *)
-(* This is the parser that reads the configuration file of helm               *)
-(*                                                                            *)
-(******************************************************************************)
-
-let filename =
- try
-  Sys.getenv "HELM_STYLECONFIGURATION_PATH"
- with
-  Not_found ->
-   let xml = "style-configuration.xml" in
-   let tmp_xml = Configuration.tmp_dir ^ "/" ^ xml in
-   let request_xml = Configuration.getter_url ^ "getstyleconf?uri=" ^ xml in
-   ClientHTTP.get_and_save request_xml tmp_xml ;
-   tmp_xml 
-
-exception Warnings;;
-
-class warner =
-  object 
-    method warn w =
-      print_endline ("WARNING: " ^ w) ;
-      (raise Warnings : unit)
-  end
-;;
-
-let xml_document () =
- let module Y = Pxp_yacc in
-  try 
-   let config = {Y.default_config with Y.warner = new warner} in
-    Y.parse_document_entity config (PxpUriResolver.from_file filename) Y.default_spec
-  with
-   e ->
-     print_endline (Pxp_types.string_of_exn e) ;
-     raise e
-;;
-
-exception Impossible;;
-
-let styles = Hashtbl.create 13;;
-let applies = Hashtbl.create 13;;
-
-(* we trust the xml file to be valid because of the validating xml parser *)
-let _ =
- List.iter
-  (function
-      n ->
-       match n#node_type with
-          Pxp_document.T_element "style" ->
-           let key =
-           try
-            match n#attribute "key" with
-               Pxp_types.Value s -> s
-             | _ -> raise Impossible
-           with
-            Not_found -> n#data
-          in
-            Hashtbl.add styles key n#data
-        | Pxp_document.T_element "apply" ->
-           let keys = List.map
-            (function n ->
-              match n#node_type with
-                 Pxp_document.T_element "style-ref" ->
-                 begin
-                  match n#attribute "key" with
-                     Pxp_types.Value s -> s
-                   | _ -> raise Impossible
-                 end
-               | _ -> raise Impossible
-            )
-            n#sub_nodes
-           in
-           let apply_name =
-            match n#attribute "name" with
-               Pxp_types.Value s -> s
-             | _ -> raise Impossible
-           in Hashtbl.add applies apply_name keys
-        | _ -> raise Impossible
-  )
-  ((xml_document ())#root#sub_nodes)
-;;
-
-let style_of_key key =
- Hashtbl.find styles key
-
-let key_list_of_mode_name name =
- Hashtbl.find applies name
-;;
-
diff --git a/helm/interface/theory.ml b/helm/interface/theory.ml
deleted file mode 100644 (file)
index 10ef114..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-type theory_elem =
-   Theorem of string                    (* uri *)
- | Definition of string                 (* uri *)
- | Axiom of string                      (* uri *)
- | Variable of string                   (* uri *)
- | Section of string * theory_elem list (* uri, subtheory *)
-and theory =
- string * theory_elem list              (* uri, subtheory *)
-;;
diff --git a/helm/interface/theoryCache.ml b/helm/interface/theoryCache.ml
deleted file mode 100644 (file)
index c7f6a3f..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-type check_status = Checked | Unchecked;;
-
-let hashtable = Hashtbl.create 17;;
-
-let get_term_and_type_checking_info uri =
- try
-  Hashtbl.find hashtable uri
- with
-  Not_found -> 
-   let filename = Getter.get uri in
-    let term = TheoryParser.theory_of_xml filename in
-     Hashtbl.add hashtable uri (term, Unchecked) ;
-     (term, Unchecked)
-;;
-
-
-let get_theory uri =
- fst (get_term_and_type_checking_info uri)
-;;
-
-let is_type_checked uri =
- match snd (get_term_and_type_checking_info uri) with
-    Checked   -> true
-  | Unchecked -> false
-;;
-
-let set_type_checking_info uri =
- match Hashtbl.find hashtable uri with
-  (term, _) ->
-   Hashtbl.remove hashtable uri ;
-   Hashtbl.add hashtable uri (term, Checked)
-;;
diff --git a/helm/interface/theoryParser.ml b/helm/interface/theoryParser.ml
deleted file mode 100644 (file)
index 5ce9fff..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception Warnings;;
-
-class warner =
-  object 
-    method warn w =
-      print_endline ("WARNING: " ^ w) ;
-      (raise Warnings : unit)
-  end
-;;
-
-exception EmptyUri;;
-
-let theory_of_xml filename =
- let module Y = Pxp_yacc in
-  try 
-    let d =
-     let config = {Y.default_config with Y.warner = new warner} in
-      Y.parse_document_entity config
-(*PXP       (Y.ExtID (Pxp_types.System filename,
-         new Pxp_reader.resolve_as_file ~url_of_id ()))
-*)     (PxpUriResolver.from_file filename)
-       Y.default_spec
-    in
-     TheoryParser2.get_theory d#root
-  with
-   e ->
-     print_endline (Pxp_types.string_of_exn e) ;
-     raise e
-;;
diff --git a/helm/interface/theoryParser2.ml b/helm/interface/theoryParser2.ml
deleted file mode 100644 (file)
index 4304ecc..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception IllFormedXml of int;;
-
-(* Utility functions that transform a Pxp attribute into something useful *)
-
-let string_of_attr a =
- let module T = Pxp_types in
-  match a with
-     T.Value s -> s
-   | _ -> raise (IllFormedXml 0)
-
-let get_theory n =
- let module D = Pxp_document in
- let module T = Theory in
-  let rec get_theory_elem n =
-   let ntype = n # node_type in
-   match ntype with
-     D.T_element "THEOREM" ->
-       let uri = string_of_attr (n # attribute "uri") in
-        T.Theorem uri
-   | D.T_element "DEFINITION" ->
-       let uri = string_of_attr (n # attribute "uri") in
-        T.Definition uri
-   | D.T_element "AXIOM" ->
-      let uri = string_of_attr (n # attribute "uri") in
-       T.Axiom uri
-   | D.T_element "VARIABLE" ->
-      let uri = string_of_attr (n # attribute "uri") in
-       T.Variable uri
-   | D.T_element "SECTION" ->
-      let uri = string_of_attr (n # attribute "uri")
-      and subtheory = List.map get_theory_elem (n # sub_nodes) in
-       T.Section (uri, subtheory)
-   | D.T_element _ | D.T_data | _ ->
-      raise (IllFormedXml 1)
-  in
-   match n # node_type with
-      D.T_element "Theory" ->
-       let uri = string_of_attr (n # attribute "uri") in
-        (uri, List.map get_theory_elem (n # sub_nodes))
-    | _ -> raise (IllFormedXml 2)
-;;
diff --git a/helm/interface/theoryTypeChecker.ml b/helm/interface/theoryTypeChecker.ml
deleted file mode 100644 (file)
index 7ebbf19..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception NotWellTyped of string;;
-
-let typecheck uri =
-  let rec typecheck_term curi t =
-  let module T = Theory in
-  let module P = CicTypeChecker in
-  let module C = CicCache in
-  let module U = UriManager in
-  let obj_typecheck uri =
-   try
-    P.typecheck (U.uri_of_string uri)
-   with
-    P.NotWellTyped s ->
-     raise (NotWellTyped
-      ("Type Checking was NOT successfull due to an error during " ^
-       "type-checking of term " ^ uri ^ ":\n\n" ^ s))
-  in
-    match t with
-       T.Theorem uri -> obj_typecheck (curi ^ "/" ^ uri)
-     | T.Definition uri -> obj_typecheck (curi ^ "/" ^ uri)
-     | T.Axiom uri -> obj_typecheck (curi ^ "/" ^ uri)
-     | T.Variable uri -> obj_typecheck (curi ^ "/" ^ uri)
-     | T.Section (uri,l) -> typecheck_theory l (curi ^ "/" ^ uri)
- and typecheck_theory l curi =
-  List.iter (typecheck_term curi) l
- in
-  let (uri, l) = TheoryCache.get_theory uri in
-   typecheck_theory l uri
-;;
diff --git a/helm/interface/toglie_helm_xref.pl b/helm/interface/toglie_helm_xref.pl
deleted file mode 100755 (executable)
index 13c9739..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/perl
-
-while(<STDIN>)
-{
-  s/helm:xref="[^"]*"//g;
-  s/helm:xref='[^']*'//g;
-  print;
-}
diff --git a/helm/interface/toglie_helm_xref.sh b/helm/interface/toglie_helm_xref.sh
deleted file mode 100755 (executable)
index b3cb4e0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-echo "****" $1
-cp $1 /tmp/pippo
-cat /tmp/pippo | ./toglie_helm_xref.pl > $1
diff --git a/helm/interface/uriManager.ml b/helm/interface/uriManager.ml
deleted file mode 100644 (file)
index 52c7f34..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(* "cic:/a/b/c.con" => [| "cic:/a" ; "cic:/a/b" ; "cic:/a/b/c.con" ; "c" |] *)
-type uri = string array;;
-
-let eq uri1 uri2 =
- uri1 == uri2
-;;
-
-let string_of_uri uri = uri.(Array.length uri - 2);;
-let name_of_uri uri = uri.(Array.length uri - 1);;
-let buri_of_uri uri = uri.(Array.length uri - 3);;
-let depth_of_uri uri = Array.length uri - 2;;
-
-(*CSC: ora e' diventato poco efficiente, migliorare *)
-let relative_depth curi uri cookingsno =
- let rec length_of_current_prefix l1 l2 =
-  match (l1, l2) with
-     (he1::tl1, he2::tl2) when he1 == he2 ->
-       1 + length_of_current_prefix tl1 tl2
-   | (_,_) -> 0
- in
-  depth_of_uri uri -
-   length_of_current_prefix
-    (Array.to_list (Array.sub curi 0 (Array.length curi - (2 + cookingsno))))
-    (Array.to_list (Array.sub uri 0 (Array.length uri - 2)))
-  (*CSC: vecchio codice da eliminare
-  if eq curi uri then 0
-  else
-   depth_of_uri uri -
-    length_of_current_prefix (Array.to_list curi) (Array.to_list uri)
-  *)
-;;
-
-module OrderedStrings =
- struct
-  type t = string
-  let compare (s1 : t) (s2 : t) = compare s1 s2
- end
-;;
-
-module SetOfStrings = Map.Make(OrderedStrings);;
-
-(*CSC: commento obsoleto ed errato *)
-(* Invariant: the map is the identity function,      *)
-(*  i.e. (SetOfStrings.find str !set_of_uri) == str  *)
-let set_of_uri = ref SetOfStrings.empty;;
-let set_of_prefixes = ref SetOfStrings.empty;;
-
-(* similar to uri_of_string, but used for prefixes of uris *)
-let normalize prefix =
- try
-  SetOfStrings.find prefix !set_of_prefixes
- with
-  Not_found ->
-   set_of_prefixes := SetOfStrings.add prefix prefix !set_of_prefixes ;
-   prefix
-;;
-
-exception IllFormedUri of string;;
-
-let mk_prefixes str =
- let rec aux curi =
-  function
-     [he] ->
-      let prefix_uri = curi ^ "/" ^ he
-      and name = List.hd (Str.split (Str.regexp "\.") he) in
-       [ normalize prefix_uri ; name ]
-   | he::tl ->
-      let prefix_uri = curi ^ "/" ^ he in
-       (normalize prefix_uri)::(aux prefix_uri tl)
-   | _ -> raise (IllFormedUri str)
- in
-  let tokens = (Str.split (Str.regexp "/") str) in
-   (* ty = "cic:" *)
-   let (ty, sp) = (List.hd tokens, List.tl tokens) in
-    aux ty sp
-;;
-
-let uri_of_string str =
- try
-  SetOfStrings.find str !set_of_uri
- with
-  Not_found ->
-   let uri = Array.of_list (mk_prefixes str) in
-    set_of_uri := SetOfStrings.add str uri !set_of_uri ;
-    uri
-;;
diff --git a/helm/interface/uriManager.ml.implementazione_banale b/helm/interface/uriManager.ml.implementazione_banale
deleted file mode 100644 (file)
index cd0d71f..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-type uri = string;;
-
-let eq uri1 uri2 =
- uri1 = uri2
-;;
-
-let string_of_uri uri = uri;;
-let uri_of_string str = str;;
-
-let name_of_uri uri =
- let l = Str.split (Str.regexp "/") uri in
-  let name_suf = List.nth l (List.length l - 1) in
-   List.hd (Str.split (Str.regexp "\.") name_suf)
-;;
-
-let depth_of_uri uri =
- List.length (Str.split (Str.regexp "/") uri) - 2
-;;
diff --git a/helm/interface/uriManager.ml.implementazione_doppia b/helm/interface/uriManager.ml.implementazione_doppia
deleted file mode 100644 (file)
index d03d997..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-(* "cic:/a/b/c.con" => [| "cic:/a" ; "cic:/a/b" ; "cic:/a/b/c.con" ; "c" |] *)
-type uri = string array;;
-
-let eq uri1 uri2 =
- uri1 == uri2
-;;
-
-let string_of_uri uri = uri.(Array.length uri - 2);;
-let name_of_uri uri = uri.(Array.length uri - 1);;
-let buri_of_uri uri = uri.(Array.length uri - 3);;
-let depth_of_uri uri = Array.length uri - 2;;
-
-(*CSC: ora e' diventato poco efficiente, migliorare *)
-let relative_depth curi uri cookingsno =
- let rec length_of_current_prefix l1 l2 =
-  match (l1, l2) with
-     (he1::tl1, he2::tl2) when he1 == he2 ->
-       1 + length_of_current_prefix tl1 tl2
-   | (_,_) -> 0
- in
-  depth_of_uri uri -
-   length_of_current_prefix
-    (Array.to_list (Array.sub curi 0 (Array.length curi - (2 + cookingsno))))
-    (Array.to_list (Array.sub uri 0 (Array.length uri - 2)))
-  (*CSC: vecchio codice da eliminare
-  if eq curi uri then 0
-  else
-   depth_of_uri uri -
-    length_of_current_prefix (Array.to_list curi) (Array.to_list uri)
-  *)
-;;
-
-module OrderedStrings =
- struct
-  type t = string
-  let compare (s1 : t) (s2 : t) = compare s1 s2
- end
-;;
-
-module SetOfStrings = Map.Make(OrderedStrings);;
-
-(*CSC: commento obsoleto ed errato *)
-(* Invariant: the map is the identity function,      *)
-(*  i.e. (SetOfStrings.find str !set_of_uri) == str  *)
-let set_of_uri = ref SetOfStrings.empty;;
-let set_of_prefixes = ref SetOfStrings.empty;;
-
-(* similar to uri_of_string, but used for prefixes of uris *)
-let normalize prefix =
- try
-  SetOfStrings.find prefix !set_of_prefixes
- with
-  Not_found ->
-   set_of_prefixes := SetOfStrings.add prefix prefix !set_of_prefixes ;
-   prefix
-;;
-
-exception IllFormedUri of string;;
-
-let mk_prefixes str =
- let rec aux curi =
-  function
-     [he] ->
-      let prefix_uri = curi ^ "/" ^ he
-      and name = List.hd (Str.split (Str.regexp "\.") he) in
-       [ normalize prefix_uri ; name ]
-   | he::tl ->
-      let prefix_uri = curi ^ "/" ^ he in
-       (normalize prefix_uri)::(aux prefix_uri tl)
-   | _ -> raise (IllFormedUri str)
- in
-  let tokens = (Str.split (Str.regexp "/") str) in
-   (* ty = "cic:" *)
-   let (ty, sp) = (List.hd tokens, List.tl tokens) in
-    aux ty sp
-;;
-
-let uri_of_string str =
- try
-  SetOfStrings.find str !set_of_uri
- with
-  Not_found ->
-   let uri = Array.of_list (mk_prefixes str) in
-    set_of_uri := SetOfStrings.add str uri !set_of_uri ;
-    uri
-;;
diff --git a/helm/interface/uriManager.ml.implementazione_semplice b/helm/interface/uriManager.ml.implementazione_semplice
deleted file mode 100644 (file)
index 8b8921b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-type uri = string;;
-
-let eq uri1 uri2 =
- uri1 == uri2
-;;
-
-let string_of_uri uri = uri;;
-
-let name_of_uri uri =
- let l = Str.split (Str.regexp "/") uri in
-  let name_suf = List.nth l (List.length l - 1) in
-   List.hd (Str.split (Str.regexp "\.") name_suf)
-;;
-
-let depth_of_uri uri =
- List.length (Str.split (Str.regexp "/") uri) - 2
-;;
-
-module OrderedStrings =
- struct
-  type t = string
-  let compare (s1 : t) (s2 : t) = compare s1 s2
- end
-;;
-
-module SetOfStrings = Map.Make(OrderedStrings);;
-
-(* Invariant: the map is the identity function,      *)
-(*  i.e. (SetOfStrings.find str !set_of_uri) == str  *)
-let set_of_uri = ref SetOfStrings.empty;;
-
-let uri_of_string str =
- try
-  SetOfStrings.find str !set_of_uri
- with
-  Not_found ->
-   set_of_uri := SetOfStrings.add str str !set_of_uri ;
-   str
-;;
diff --git a/helm/interface/uriManager.mli b/helm/interface/uriManager.mli
deleted file mode 100644 (file)
index 9bd6210..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-type uri
-
-val eq : uri -> uri -> bool
-
-val uri_of_string : string -> uri
-
-val string_of_uri : uri -> string  (* complete uri *)
-val name_of_uri   : uri -> string  (* name only (without extension)*)
-val buri_of_uri   : uri -> string  (* base uri only *)
-val depth_of_uri  : uri -> int     (* length of the path *)
-
-(* relative_depth curi uri cookingsno                                        *)
-(* is the number of times to cook uri to use it when the current uri is curi *)
-(* cooked cookingsno times                                                   *)
-val relative_depth : uri -> uri -> int -> int
diff --git a/helm/interface/uris_of_filenames.pl b/helm/interface/uris_of_filenames.pl
deleted file mode 100755 (executable)
index 019730b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/perl
-
-while(<STDIN>) {
-   chomp;
-   split / /;
-   for (@_) {
-      $GZSUFF = "";
-      if (/.gz$/)
-       { s/.gz$//; $GZSUFF = " gz" if ($ARGV[0] == "-gz"); }
-      if (/.*\.(con|var|ind)(\.types)?\.xml/)
-       { s/\./cic:/; }
-      elsif (/.*\.theory\.xml/)
-       { s/\./theory:/; }
-      s/\.xml//;
-      print $_.$GZSUFF."\n";
- }
-}
diff --git a/helm/interface/xml.ml b/helm/interface/xml.ml
deleted file mode 100644 (file)
index 5926b48..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                     A tactic to print Coq objects in XML                   *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 18/10/2000                                 *)
-(*                                                                            *)
-(* This module defines a pretty-printer and the stream of commands to the pp  *)
-(*                                                                            *)
-(******************************************************************************)
-
-
-(* the type token for XML cdata, empty elements and not-empty elements *)
-(* Usage:                                                                *)
-(*  Str cdata                                                            *)
-(*  Empty (element_name, [attrname1, value1 ; ... ; attrnamen, valuen]   *)
-(*  NEmpty (element_name, [attrname1, value2 ; ... ; attrnamen, valuen], *)
-(*          content                                                      *)
-type token = Str of string
-           | Empty of string * (string * string) list
-          | NEmpty of string * (string * string) list * token Stream.t
-;;
-
-(* currified versions of the constructors make the code more readable *)
-let xml_empty name attrs = [< 'Empty(name,attrs) >]
-let xml_nempty name attrs content = [< 'NEmpty(name,attrs,content) >]
-let xml_cdata str = [< 'Str str >]
-
-(* Usage:                                                                   *)
-(*  pp tokens None     pretty prints the output on stdout                   *)
-(*  pp tokens (Some filename) pretty prints the output on the file filename *)
-let pp strm fn =
- let channel = ref stdout in
- let rec pp_r m =
-  parser
-    [< 'Str a ; s >] ->
-      print_spaces m ;
-      fprint_string (a ^ "\n") ;
-      pp_r m s
-  | [< 'Empty(n,l) ; s >] ->
-      print_spaces m ;
-      fprint_string ("<" ^ n) ;
-      List.iter (function (n,v) -> fprint_string (" " ^ n ^ "=\"" ^ v ^ "\"")) l;
-      fprint_string "/>\n" ;
-      pp_r m s
-  | [< 'NEmpty(n,l,c) ; s >] ->
-      print_spaces m ;
-      fprint_string ("<" ^ n) ;
-      List.iter (function (n,v) -> fprint_string (" " ^ n ^ "=\"" ^ v ^ "\"")) l;
-      fprint_string ">\n" ;
-      pp_r (m+1) c ;
-      print_spaces m ;
-      fprint_string ("</" ^ n ^ ">\n") ;
-      pp_r m s
-  | [< >] -> ()
- and print_spaces m =
-  for i = 1 to m do fprint_string "  " done
- and fprint_string str =
-  output_string !channel str
- in
-  match fn with
-     Some filename ->
-       channel := open_out filename ;
-       pp_r 0 strm ;
-       close_out !channel ;
-       print_string ("\nWriting on file \"" ^ filename ^ "\" was succesfull\n");
-       flush stdout
-   | None ->
-       pp_r 0 strm
-;;
diff --git a/helm/interface/xml.mli b/helm/interface/xml.mli
deleted file mode 100644 (file)
index 2e0c7c7..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                     A tactic to print Coq objects in XML                   *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 18/10/2000                                 *)
-(*                                                                            *)
-(* This module defines a pretty-printer and the stream of commands to the pp  *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* Tokens for XML cdata, empty elements and not-empty elements           *)
-(* Usage:                                                                *)
-(*  Str cdata                                                            *)
-(*  Empty (element_name, [attrname1, value1 ; ... ; attrnamen, valuen]   *)
-(*  NEmpty (element_name, [attrname1, value2 ; ... ; attrnamen, valuen], *)
-(*          content                                                      *)
-type token =
-  | Str of string
-  | Empty of string * (string * string) list
-  | NEmpty of string * (string * string) list * token Stream.t
-
-(* currified versions of the token constructors make the code more readable *)
-val xml_empty : string -> (string * string) list -> token Stream.t
-val xml_nempty :
-  string -> (string * string) list -> token Stream.t -> token Stream.t
-val xml_cdata : string -> token Stream.t
-
-(* The pretty printer for streams of token                                  *)
-(* Usage:                                                                   *)
-(*  pp tokens None     pretty prints the output on stdout                   *)
-(*  pp tokens (Some filename) pretty prints the output on the file filename *)
-val pp : token Stream.t -> string option -> unit
diff --git a/helm/interface/xsltProcessor.ml b/helm/interface/xsltProcessor.ml
deleted file mode 100644 (file)
index 95f1c70..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let initialize () =
- Printf.printf "Initializing the UWOBO servlet, please wait" ; flush stdout ;
- Hashtbl.iter
-  (fun key uri ->
-    let string_to_send = (Configuration.processor_url ^ "add?xsluri=" ^ Configuration.getter_url ^ "getxslt?uri=" ^ uri ^ "&key=" ^ key)
-    in
-     print_char '.' ; flush stdout ;
-     ClientHTTP.send string_to_send
-  )
-  StyleConfiguration.styles ;
- Printf.printf " ok\n" ; flush stdout
-;;
-
-(* CSC: esempio per vedere se veniva calcolata bene. Rimuovere pure il commento
-http://phd.cs.unibo.it:8080/helm/servlet/uwobo/apply?xmluri=http%3A//phd.cs.unibo.it%3A8081/getxml%3Furi%3Dcic%3A/Coq/Init/Datatypes/nat_ind.con&keys=C1,C2,L&param.processorURL=http%3A//phd.cs.unibo.it%3A8080/helm/servlet/uwobo/&param.getterURL=http%3A//phd.cs.unibo.it%3A8081/&prop.doctype-public=&prop.encoding=&prop.media-type=text/xml&param.doctype-public=&param.encoding=&param.media-type=text/xml&param.keys=C1%2CC2%2CL&param.CICURI=cic:/Coq/Init/Datatypes/nat_ind.con&param.naturalLanguage=yes&param.annotations=NO
-
-
-&keys=C1,C2,L
-*)
-
-let process uri usecache mode naturalLanguage annotations =
- let uri = UriManager.string_of_uri uri in
- let url = Configuration.getter_url ^ "getxml?uri=" ^ uri in
- let keys =
-  match StyleConfiguration.key_list_of_mode_name mode with
-    first_key::key_list ->
-     first_key ^
-     (List.fold_right
-      (fun key cmd -> "," ^ key ^ cmd)
-       key_list
-       ""
-      ) 
-  | _ -> prerr_string "Warning: the list of keys for UWOBO is empty\n"; ""
- in
- let string_to_send =
-  Configuration.processor_url ^ "apply?xmluri=" ^ url ^
-  "&param.processorURL=" ^ Configuration.processor_url ^
-  "&param.getterURL=" ^ Configuration.getter_url ^
-  "&prop.doctype-public=&prop.encoding=&prop.media-type=text/xml" ^
-  "&keys=" ^ keys ^
-  "&param.keys=" ^ keys ^
-  "&param.CICURI=" ^ uri ^
-  "&param.naturalLanguage=" ^ naturalLanguage ^
-  "&param.annotations=" ^ annotations ^
-  "&param.doctype-public=&param.encoding=&param.media-type=text/xml"
- in
-  string_to_send
-;;
-
-(*CSC: ma questa funzione ha senso? Se si', in quale modulo?*)
-(*CSC: tutti i parametri passati alla process sono quasi a caso!!! *)
-let url_of_uri uri =
- process uri true "cic" "yes" "YES"
-;;
diff --git a/helm/mathql/grammar.txt b/helm/mathql/grammar.txt
deleted file mode 100644 (file)
index 5622761..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI
-MATHEMATICAL QUERY LANGUAGE (MathQL) 
-
-<query> := <set>                               (* clausola iniziale *)
-
-<set> :=  ( <set> )                            (* parentesizzazione *)
-       |  <rvar>                              (* var per insieme singoletto 
-                                                 di una risorsa *)
-       |  <svar>                              (* var per insieme di risorse
-                                                 (insieme di valori) *)
-       |  REF <string-set>                     (* oggetto/i referenziato/i da 
-                                                 URI esplicita/e *)
-       |  PATTERN <string-set>                 (* oggetto/i referenziato/i da 
-                                                 URI ottenute da espansione 
-                                                 del pattern *)
-       |  SELECT <rvar> IN <set> WHERE <bool>  (* selezione *)
-       |  LET <svar> BE <set> IN <set>         (* assegnazione a set-var in 
-                                                  contesto *)
-       |  LET <vvar> BE <string-set> IN <set>  (* assegnamento a value-var
-                                                 in contesto*)
-       |  RELATION <refine_op> <quoted-constant-string-path> <set> ATTR <vvar-list>
-                                                      (* unione insieme risorse in
-                                                 relazione specificata con le
-                                                 risorse in set, ognuna con 
-                                                 attributi (ATTR) *)
-       |  <set> UNION <set>                    (* unione *)
-       |  <set> INTERSECT <set>                (* intersezione *)
-       |  <set> DIFF <set>                     (* differenza *)
-
-<refine_op> := ""                             (* relazione (proprieta') *)
-           |  SUB                             (* proprieta' e 
-                                                 sotto-proprieta' *)
-           |  SUPER                           (* proprieta' e 
-                                                 super-proprieta' *)
-
-<quoted-constant-string-path> := <quoted-constant-string> 
-                                              (* relazione (proprieta') *)
-                             |  <quoted-constant-string> "/" <quoted-constant-string-path>
-                                              (* insieme di stringhe:
-                                                 proprieta' strutturata *)
-
-<vvar-list> := <vvar>
-            |  <vvar> , <vvar-list>
-
-
-<bool> := ( <bool> )                           (* parentesizzazione *)
-       |  TRUE                                 (* vero *)
-       |  FALSE                                (* falso *)
-       |  NOT <bool>                           (* negazione *)
-       |  <bool> AND <bool>                    (* congiunzione *)
-       |  <bool> OR <bool>                     (* disgiunzione *)
-       |  <string-set> EQ <string-set>         (* uguaglianza tra insiemi 
-                                                 stringhe (case sensitive) *)
-       |  <string-set> SUB <string-set>        (* operazione di sottoinsieme 
-                                                 tra insiemi stringhe *)
-       |  <string-set> MEET <string-set>       (* operazione di meet tra 
-                                                 insiemi stringhe *)
-       |  EX <bool>                           (* existential on attributes
-                                                 of references *)
-<string-set> := ( <string-set> )               (* parentesizzazione *)
-             |  {}                            (* insieme vuoto*)
-            |  <quoted-constant-string>       (* stringa singoletto *)
-             |  {<quoted-constant-string-list>}(* insieme stringhe *)
-             |  REFOF <set>                   (* insieme riferimenti *)
-             |  <rvar>.<vvar>                  (* variabile per insieme
-                                                 stringhe, relativa a 
-                                                 riferimento *)
-            |  <function> <quoted-constant-string> <string-set> 
-                                              (* applicazione di funzione
-                                                 specificata a riferimento
-                                                 o insiemi di rif. o var*)
-             |  <vvar>                        (* vvar introduced by LET *)
-
-<quoted-constant-string-list> := <quoted-constant-string>
-                             |  <quoted-constant-string> , <quoted-constant-string-list>                                                 
-                                                  (* lista di stringhe *)
-
-<function> := FUN                         (* funzione generale *)
-          |  <property>        
-
-<property> := ATTRIBUTE        <refine-op>        (* funzione proprieta': restituisce
-                                             suoi valori (anche strutturati)
-                                             (e delle sotto-proprieta' o 
-                                             super-proprieta' *)
-
-
-<rvar> := @ <not-reserved-identifier>          (* variabile per riferimento *)
-<vvar> := $ <not-reserved-identifier>          (* variabile per insiemi 
-                                                 stringhe *)
-<svar> := % <not-reserved-identifier>          (* variabile per insiemi 
-                                                 riferimenti *)
-
-
-- Idea di base: grammatica del linguaggio semplice e permissiva (duttile)
-- MEET e' definito come "esiste almeno un elemento che appartiene 
-  all'interserzione tra due insiemi"
-- le stringhe sono "case sensitive" 
-- la funzione non definita sull'argomento restituisce la stringa nulla
-- le <rvar> si presuppongono essere istanziate come URI references costituite
-  da un URI e da un fragment identifier opzionale complete; i riferimenti 
-  identificano risorse 
-- Precedenza operatori:
-  NOT (+)  DIFF
-  AND      INTERSECT
-  OR  (-)  UNION
-- L'ordinamento di default e' quello alfabetico crescente in base al nome 
-  delle rvar
-- REF aumenta performance perche' NON accede al data base (costoso).
-- l'argomento di PATTERN ha sintassi di una espressione regolare 
-  POSIX 1003.2-1992
-- Possibile FUN (<quoted-constant-string>):
-  NAME (* URIREF -> nome_oggetto *)
-- MEET aumenta performance nel caso si verifichi (a in S) oppure 
-  (b in S) = ({a,b} meet S) perche' valuta S una volta sola
-  Il MEET codifica inoltre l'esistenziale su risorse (URI) in un certo
-  insieme che soddisfa certe condizioni
-- record <rvar>.<svar> serve per disambiguare nomi uguali di variabili
-- Operatori (come EQ) hanno nomi abbreviati rispetto ai costrutti del 
-  linguaggio
-- EX verfica che la sua condizione sia vera per almeno un insieme di attributi
-  associato all'URI in rvar 
-- Possibili RELATION sono:
-  USE con attributo POSITION (riferimenti backward) e valori MAINHYPOTHESIS, 
-                   HYPOTHESIS, MAINCONCLUSION, CONCLUSION, BODY
-  USEBY con attributo POSITION (riferimenti forward) e valori MAINHYPOTHESIS, 
-                   HYPOTHESIS, MAINCONCLUSION, CONCLUSION, BODY
-  CONSTRUCTORS
-  INTHEORY con attributo ITEMTYPE (riferimenti oggetti contenuti in teorie)
-  THEORYREFTO con attributo ITEMTYPE (riferimenti teorie referenti a oggetti)
-- <string-set> invece di <set> come argomento di <function> poiche' la REF non
-  e' piu' restrittiva su argomento/i e quindi e' inutile imporne l'uso quando
-  si passano i riferimenti alle funzioni. Con <string-set> l'utente e' libero
-  di passare direttamente le stringhe dei riferimenti.
-- Il costrutto di ordinamento:
-  <set> SORTEDBY <function> <order>   (* unione insieme ordinato secondo
-                                         valore funzione e ordine *)
-  <order>:= DESC                      (* ordinamento decrescente *)
-         |  ASC                              (* ordinamento crescente *) 
-  perde di senso nel caso di metadati, poiche' per definizione le proprieta' 
-  in RDF possono essere ripetute quindi restituiscono (come anche le funzioni 
-  in generale) valori multipli per ogni riferimento (ambiguita' nell'ordine)
-- Possibili proprieta' (<quoted-constant-string>):
-  le DC: TITLE, CONTRIBUTOR, CREATOR, PUBLISHER, SUBJECT, DESCRIPTION, DATE,
-  TYPE, FORMAT, IDENTIFIER, LANGUAGE, RELATION, SOURCE, COVERAGE, RIGHTS, 
-  RIGHTS; and INSTITUTION, CONTACT, FIRSTVERSION, MODIFIED, THEORY
-- Il concetto di Classe, sottoclasse, superclasse, puo' essere visto come una
-  particolare proprieta' (type o tipo) di una risorsa, e quindi codificabile
-  da RELATION
\ No newline at end of file
diff --git a/helm/mathql/homepage/authors.html b/helm/mathql/homepage/authors.html
deleted file mode 100644 (file)
index 1666119..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-  <title>MathQL</title>
-                                                              
-  <meta http-equiv="content-type"
- content="text/html; charset=ISO-8859-1">
-                                   
-  <meta name="author" content="Ferruccio Guidi">
-                                   
-  <meta name="description" content="MathQL Home Page">
-</head>
-  <body>
-                
-<h1 align="center">MathQL-1</h1>
-             
-<h2 align="center">A query language for RDF metadata</h2>
-                 
-<table cellpadding="10" cellspacing="2" border="0" width="95%"
- bgcolor="#ffffff">
-           <tbody>
-             <tr>
-               <td valign="top" align="left">                           
-                                   
-      <ul>
-                 <li><a href="index.html">Forward</a><br>
-              </li>
-                                                                       
-      </ul>
-                                                       
-      <ul>
-               <li><a href="features.html">Features</a></li>
-                                                       
-      </ul>
-       
-      <ul>
-         <li><a href="whatsnew.html">What's new</a><br>
-    </li>
-       
-      </ul>
-                                                       
-      <ul>
-               <li><a href="documentation.html">Documentation</a></li>
-                                                                       
-      </ul>
-                                               
-      <ul>
-              <li><a href="implementation.html">Implementation</a><br>
-              </li>
-                                               
-      </ul>
-                                               
-      <ul>
-              <li>The authors<br>
-              </li>
-                                                                       
-      </ul>
-                                               
-      <ul>
-              <li><a href="links.html">Links</a><br>
-              </li>
-                                               
-      </ul>
-            <br>
-               </td>
-               <td valign="top">                                        
-      <div align="right"><b>The authors</b><br>
-            </div>
-            <br>
-      MathQL-1is developed by <a
- href="http://www.cs.unibo.it/%7Efguidi/">Ferruccio  Guidi</a> and <a
- href="http://www.cs.unibo.it/%7Eschena/">Irene Schena</a>  at the <a
- href="http://www.cs.unibo.it/">Department of Computer  Science</a>  of the
-      <a href="http://www.unibo.it/">University of Bologna</a> since April 
- 2002.<br>
-            <br>
-            <b>Ferruccio Guidi</b> obtained a Master degree in Mathematics
-at the  Univerity   of Padova and a PhD in Computer Science at the University
- of  Bologna. His research interests include computer-assisted proof development,
-   Martin-L&ouml;f type theory and substructural logic. He is a member of
-the        <a href="http://helm.cs.unibo.it/">HELM Working Group</a> and
-of the       <a href="http://www.math.unipd.it/%7Elogic/">"Paulus Venetus"
-Research Group in Logic</a>.<br>
-            <br>
-            <b>Irene Schena</b> obtained a Master Degree in Computer Science
-and a Ph.D. in Computer Science at the Univerity of Bologna. Her research
-interests include Linear Logic and Web Tecnologies. She is a member of the
-      <a href="http://helm.cs.unibo.it/">HELM Working Group</a> and of the
-      <a href="http://www.w3c.org/Math">W3C Math Working Group</a>.<br>
-            <br>
-            <b>Contacts:</b> <a href="mailto://fguidi@cs.unibo.it">fguidi@cs.unibo.it</a>, 
-       <a href="mailto://schena@cs.unibo.it">schena@cs.unibo.it</a>.<br>
-               </td>
-             </tr>
-                                   
-  </tbody>         
-</table>
-         <small></small> <br>
-        <br>
-  <br>
- <br>
-</body>
-</html>
diff --git a/helm/mathql/homepage/documentation.html b/helm/mathql/homepage/documentation.html
deleted file mode 100644 (file)
index 268d88f..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-  <title>MathQL</title>
-                                                                        
-          
-  <meta http-equiv="content-type"
- content="text/html; charset=ISO-8859-1">
-                                               
-  <meta name="author" content="Ferruccio Guidi">
-                                               
-  <meta name="description" content="MathQL Home Page">
-</head>
-  <body>
-                      
-<h1 align="center">MathQL-1</h1>
-                   
-<h2 align="center">A query language for RDF metadata</h2>
-                       
-<table cellpadding="10" cellspacing="2" border="0" width="95%"
- bgcolor="#ffffff">
-              <tbody>
-                <tr>
-                  <td valign="top" align="left">                        
-                                                           
-      <ul>
-                    <li><a href="index.html">Forward</a><br>
-                 </li>
-                                                                        
-                      
-      </ul>
-                                                                         
-     
-      <ul>
-                  <li><a href="features.html">Features</a></li>
-                                                                         
-     
-      </ul>
-                                                                         
-     
-      <ul>
-                  <li><a href="whatsnew.html">What's new</a></li>
-               
-      </ul>
-               
-      <ul>
-          <li>Documentation</li>
-                                                                        
-                      
-      </ul>
-                                                                       
-      <ul>
-                 <li><a href="implementation.html">Implementation</a><br>
-                 </li>
-                                                                       
-      </ul>
-                                                                       
-      <ul>
-                 <li><a href="authors.html">The authors</a><br>
-                 </li>
-                                                                        
-                      
-      </ul>
-                                                                       
-      <ul>
-                 <li><a href="links.html">Links</a><br>
-                 </li>
-                                                                       
-      </ul>
-               <br>
-                  </td>
-                  <td valign="top">                                     
-                         
-      <div align="right"><b>Documentation</b><br>
-               </div>
-               <br>
-      All available information about MathQL-1 can be found in the papers 
-below   (listed in order of relevance).<br>
-The newest features of MathQL-1, which are not included in this documentation,
-are reported in the <a href="whatsnew.html">What's new</a> section.<br>
-            <br>
-            <br>
-            <b>Papers concerning the latest version of MathQL-1:</b><br>
-                                               
-      <ul>
-              <li>F. Guidi: <a
- href="ftp://ftp.cs.unibo.it/pub/techreports/2003-06.ps.gz"><i>Searching and
-Retrieving in Content-based Repositories  of Formal Mathematical Knowledge</i></a>. 
- Ph.D. Thesis in Computer Science, University  of Bologna, March 2003. Technical 
- report UBLCS 2003-06.</li>
-                                               
-      </ul>
-                                       
-      <ul>
-             <li>F. Guidi and I. Schena: <a
- href="http://monet.nag.co.uk/mkm/bertinoro03/guidi.pdf"><i>A Query Language 
-  for a Metadata Framework about Mathematical Resources</i></a>. Presentation 
-  at the 2nd International Conference on Mathematical Knowledge Management 
- (MKM 2003). Bertinoro, Italy, February 2003.<br>
-             </li>
-                                       
-      </ul>
-           <b>Papers concerning the erlier versions of MathQL-1:</b><br>
-                                               
-      <ul>
-              <li>F. Guidi and I. Schena: <i>A Query Language for a Metadata
-  Framework about Mathematical Resources</i>. In Proc. of the 2nd International
-  Conference on Mathematical Knowledge Management (MKM 2003). Bertinoro,
-Italy,   February 2003. LNCS 2594, pages 105-118, Springer. 2003.</li>
-                                               
-      </ul>
-                                               
-      <ul>
-              <li>L. Natile: <i>Tecnologie per l'Interrogazione di Basi Documentarie
-   in Formato XML</i>. Master Thesis in Computer Science, University of Bologna,
-   2002.</li>
-                                               
-      </ul>
-                                               
-      <ul>
-              <li>A. Nediani: <i>Disegno e Implementazione di un'Interfaccia
-  Web  di Supporto ad Interrogazioni su Basi di Dati Documentarie</i>. Master
-  Thesis  in Computer Science, University of Bologna, 2003.</li>
-                                               
-      </ul>
-                                               
-      <ul>
-              <li>D. Lordi: <i>Sperimentazione e Sviluppo di Strumenti per
- la  gestione di metadati</i>. Master Thesis in Computer Science, University 
- of  Bologna, 2002.</li>
-                                               
-      </ul>
-      <br>
-                  </td>
-                </tr>
-                                               
-  </tbody>            
-</table>
-             <br>
-     <br>
-    <br>
-   <br>
-  <br>
- <br>
-</body>
-</html>
diff --git a/helm/mathql/homepage/features.html b/helm/mathql/homepage/features.html
deleted file mode 100644 (file)
index 12a6d7a..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-  <title>MathQL</title>
-                                                       
-  <meta http-equiv="content-type"
- content="text/html; charset=ISO-8859-1">
-                               
-  <meta name="author" content="Ferruccio Guidi">
-                               
-  <meta name="description" content="MathQL Home Page">
-</head>
-  <body>
-              
-<h1 align="center">MathQL-1</h1>
-           
-<h2 align="center">A query language for RDF metadata</h2>
-               
-<table cellpadding="10" cellspacing="2" border="0" width="95%"
- bgcolor="#ffffff">
-          <tbody>
-            <tr>
-              <td valign="top" align="left">                            
-                           
-      <ul>
-                <li><a href="index.html">Forward</a><br>
-             </li>
-                                                               
-      </ul>
-                                               
-      <ul>
-              <li>Features</li>
-                                               
-      </ul>
-                                               
-      <ul>
-              <li><a href="whatsnew.html">What's new</a></li>
-       
-      </ul>
-       
-      <ul>
-         <li><a href="documentation.html">Documentation</a></li>
-                                                               
-      </ul>
-                                       
-      <ul>
-             <li><a href="implementation.html">Implementation</a><br>
-             </li>
-                                       
-      </ul>
-                                       
-      <ul>
-             <li><a href="authors.html">The authors</a><br>
-             </li>
-                                                               
-      </ul>
-                                       
-      <ul>
-             <li><a href="links.html">Links</a><br>
-             </li>
-                                       
-      </ul>
-           <br>
-              </td>
-              <td valign="top">                                   
-      <div align="right"><b>Goals &nbsp;and features</b><br>
-           </div>
-           <br>
-     MathQL-1 is designed to achieve the following goals:<br>
-               
-      <ol>
-          <li>Exploitation of <a href="http://www.w3.org/RDF/">RDF</a> technology
- to manage metadata and <b>compliance with the main requirements</b> for
-an  RDF query language. In particular:</li>
-               
-      </ol>
-               
-      <blockquote>                  
-        <ul>
-            <li>MathQL-1 provides facilities for hierarchical constraints 
-based on <a href="http://www.w3.org/TR/rdf-schema/">RDF Schema</a> and for 
-traversal of compound values of properties.</li>
-                   
-        </ul>
-                   
-        <ul>
-            <li>MathQL-1 provides a full set of Boolean operators to compose
- the query constraints and facilities for selecting URI's or literals by
-means  of regular expressions.</li>
-                   
-        </ul>
-                   
-        <ul>
-            <li>MathQL-1 allows to customize the query results specifying 
-what part of a solution should be preserved or discarded.</li>
-                   
-        </ul>
-                   
-        <ul>
-            <li>MathQL-1 has a well-conceived semantics defined in term of
- an abstract metadata model, imposes that queries return exhaustive solutions
- and includes a "select-from-where"-like construction.</li>
-                   
-        </ul>
-                   
-        <ul>
-            <li>MathQL-1 supports a machine-processable <a
- href="http://www.w3.org/XML/">XML</a> syntax as well as a human-readable
- textual syntax to achieve the best usability.<br>
-            </li>
-                   
-        </ul>
-        </blockquote>
-               
-      <ol start="2">
-          <li>Careful <b>treatment of query results</b> that are as important
- as the queries themselves. In particular:<br>
-          </li>
-               
-      </ol>
-               
-      <blockquote>                  
-        <ul>
-            <li>MathQL-1 query results have a 4-dimensional geometry whereas
- other languages assume that query results are returned in 1-dimensional
-structures  (ie lists of resources) or 2-dimensional structures (ie relational
-database  tables). This allows to get better outcomes from queries returning
-structured  results.<br>
-            </li>
-                   
-        </ul>
-                   
-        <ul>
-            <li>Besides the syntax for queries, MathQL-1 provides a syntax
- for query results with its own rigorously defined semantics.<br>
-            </li>
-                   
-        </ul>
-        </blockquote>
-               
-      <ol start="3">
-          <li>Exploitation of <b>constructions borrowed from programming
-languages</b>  to allow sophisticated queries that need computation over
-the queried data.  In particular:<br>
-          </li>
-               
-      </ol>
-               
-      <blockquote>                  
-        <ul>
-            <li>MathQL-1 supports variables for storing intermediate query
- results, provides iterators over these results, has a conditional operator
- and includes logging facilities for debugging purposes.</li>
-                   
-        </ul>
-        </blockquote>
-        </td>
-      </tr>
-       
-  </tbody>  
-</table>
-  <br>
-  <br>
- <br>
-</body>
-</html>
diff --git a/helm/mathql/homepage/implementation.html b/helm/mathql/homepage/implementation.html
deleted file mode 100644 (file)
index 2d774a9..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-  <title>MathQL</title>
-                                                                        
-   
-  <meta http-equiv="content-type"
- content="text/html; charset=ISO-8859-1">
-                                           
-  <meta name="author" content="Ferruccio Guidi">
-                                           
-  <meta name="description" content="MathQL Home Page">
-</head>
-  <body>
-                    
-<h1 align="center">MathQL-1</h1>
-                 
-<h2 align="center">A query language for RDF metadata</h2>
-                     
-<table cellpadding="10" cellspacing="2" border="0" width="95%"
- bgcolor="#ffffff">
-             <tbody>
-               <tr>
-                 <td valign="top" align="left">                         
-                                                   
-      <ul>
-                   <li><a href="index.html">Forward</a><br>
-                </li>
-                                                                        
-              
-      </ul>
-                                                                       
-      <ul>
-                 <li><a href="features.html">Features</a></li>
-                                                                       
-      </ul>
-                                                                       
-      <ul>
-                 <li><a href="whatsnew.html">What's new</a></li>
-                               
-      </ul>
-                               
-      <ul>
-            <li><a href="documentation.html">Documentation</a></li>
-                                                                        
-              
-      </ul>
-                                                               
-      <ul>
-                <li>Implementation<br>
-                </li>
-                                                               
-      </ul>
-                                                               
-      <ul>
-                <li><a href="authors.html">The authors</a><br>
-                </li>
-                                                                        
-              
-      </ul>
-                                                               
-      <ul>
-                <li><a href="links.html">Links</a><br>
-                </li>
-                                                               
-      </ul>
-              <br>
-                 </td>
-                 <td valign="top">                                      
-                 
-      <div align="right"><b>Implementation</b><br>
-              </div>
-              &nbsp;<br>
-     The <b>MathQL-1 Suite for HELM</b> is implemented in <a
- href="http://caml.inria.fr/">Caml</a> and is currently   available through 
-the <a href="http://www.cs.unibo.it/cgi-bin/cvsweb/helm/">HELM CVS repository</a>. 
-  The Suite provides the following&nbsp; software components: <br>
-                                       
-      <ol>
-             <li>The basic Caml package for MathQL-1 (<a
- href="http://www.cs.unibo.it/cgi-bin/cvsweb/helm/ocaml/mathql/">mathql</a>) 
-  provides a <a href="http://helm.cs.unibo.it/">HELM</a> independent Caml 
-representation of queries and query results,   plus some functions to convert 
-this representation in text and XML and viceversa.</li>
-                                       
-      </ol>
-                                       
-      <ol start="2">
-             <li>The MathQL-1 interpreter (<a
- href="http://www.cs.unibo.it/cgi-bin/cvsweb/helm/ocaml/mathql_interpreter/">mathql_interpreter</a>) 
-  is HELM dependent just in the implementation of the <i>property</i> operator, 
-  which still relies on the architecture of the relational database holding 
-  HELM metadata. The HELM team is planning to remove this drawback in the 
-near  future.</li>
-                                       
-      </ol>
-                                       
-      <ol start="3">
-             <li>The HELM query generator (<a
- href="http://www.cs.unibo.it/cgi-bin/cvsweb/helm/ocaml/mathql_generator/">mathql_generator</a>) 
-  allows to build specific kinds of MathQL-1 queries, which are meaningful 
- in the context of HELM, starting from a high-level description of the wanted 
-  results. These queries are descibed at an abstract level in the following 
-  paper:</li>
-                                       
-      </ol>
-                                       
-      <blockquote>                                             
-        <ul>
-               <li>F. Guidi and C. Sacerdoti Coen: <i>Querying Distributed
- Digital  Libraries of Mathematics</i>.<br>
-               </li>
-                                                 
-        </ul>
-           </blockquote>
-                                       
-      <ol start="4">
-             <li>The testing software for the MathQL-1 Suite&nbsp;(<a
- href="http://www.cs.unibo.it/cgi-bin/cvsweb/helm/mathql_test/">mathql_test</a>) 
-  providides three textual interfaces (one for the basic package, one for 
-the  interpreter and one for the query generator) with specific features meant
- for testing.<br>
-             </li>
-                                       
-      </ol>
-     The current version of the Suite, realized entirely by F. Guidi, implements 
-  MathQL-1 version 3 (i.e. MathQL-1.3). The newly implemented features, which
- are not included in the ufficial <a href="documentation.html">documentation</a>
- yet, are reported in the <a href="whatsnew.html">What's new</a> section.<br>
-   <br>
-     The latest <a
- href="http://mowgli.cs.unibo.it:58085/getpage?url=index.html&amp;preprocess=true&amp;param.processorURL=http%3A//mowgli.cs.unibo.it%3A58080/&amp;param.getterURL=http%3A//mowgli.cs.unibo.it%3A58081/&amp;param.proofcheckerURL=http%3A//mowgli.cs.unibo.it%3A58084/&amp;param.draw_graphURL=http%3A//mowgli.cs.unibo.it%3A58083/&amp;param.uri_set_queueURL=http%3A//mowgli.cs.unibo.it%3A58082/&amp;param.UNICODEvsSYMBOL=unicode&amp;param.keys=d_c%2CC1%2CHC2%2CL&amp;param.thkeys=T1%2CT2%2CL%2CE&amp;param.embedkeys=d_c%2CTC1%2CHC2%2CL&amp;param.doctype-public=-//W3C//DTD%20XHTML%201.0%20Transitional//EN&amp;param.encoding=iso-8859-1&amp;param.thencoding=iso-8859-1&amp;param.media-type=text/html&amp;param.thmedia-type=text/html&amp;param.interfaceURL=http%3A//helm.cs.unibo.it/helm/html/cic/index.html&amp;param.thinterfaceURL=http%3A//helm.cs.unibo.it/helm/html/theory/index.html&amp;param.CICURI=dummy:query_result&amp;param.naturalLanguage=yes&amp;param.annotations=no&amp;param.topurl=http://helm.cs.unibo.it/helm">HELM 
-  query engine</a> (enter <a
- href="http://mowgli.cs.unibo.it/forward/58085/getpage?url=index.html&amp;preprocess=true&amp;param.processorURL=http%3A//mowgli.cs.unibo.it/forward/58080/&amp;param.getterURL=http%3A//mowgli.cs.unibo.it/forward/58081/&amp;param.proofcheckerURL=http%3A//mowgli.cs.unibo.it/forward/58084/&amp;param.draw_graphURL=http%3A//mowgli.cs.unibo.it/forward/58083/&amp;param.uri_set_queueURL=http%3A//mowgli.cs.unibo.it/forward/58082/&amp;param.UNICODEvsSYMBOL=unicode&amp;param.keys=d_c%2CC1%2CHC2%2CL&amp;param.thkeys=T1%2CT2%2CL%2CE&amp;param.embedkeys=d_c%2CTC1%2CHC2%2CL&amp;param.doctype-public=-//W3C//DTD%20XHTML%201.0%20Transitional//EN&amp;param.encoding=iso-8859-1&amp;param.thencoding=iso-8859-1&amp;param.media-type=text/html&amp;param.thmedia-type=text/html&amp;param.interfaceURL=http%3A//helm.cs.unibo.it/helm/html/cic/index.html&amp;param.thinterfaceURL=http%3A//helm.cs.unibo.it/helm/html/theory/index.html&amp;param.CICURI=dummy:query_result&amp;param.naturalLanguage=yes&amp;param.annotations=no&amp;param.topurl=http://helm.cs.unibo.it/helm">here</a> 
-if you are behind a restrictive firewall), powered by MathQL-1.3, allows to
-issue both user-defined   queries and the specific queries produced by the
-HELM query generator.<br>
-           <br>
-           </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
-          <br>
-         <br>
-        <br>
-       <br>
-      <br>
-     <br>
-    <br>
-   <br>
-  <br>
- <br>
-</body>
-</html>
diff --git a/helm/mathql/homepage/index.html b/helm/mathql/homepage/index.html
deleted file mode 100644 (file)
index 2e86a4d..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-  <title>MathQL</title>
-                                                                        
-                               
-  <meta http-equiv="content-type"
- content="text/html; charset=ISO-8859-1">
-                                                           
-  <meta name="author" content="Ferruccio Guidi">
-                                                           
-  <meta name="description" content="MathQL Home Page">
-</head>
-  <body>
-                            
-<h1 align="center">MathQL-1</h1>
-                         
-<h2 align="center">A query language for RDF metadata</h2>
-                             
-<table cellpadding="10" cellspacing="2" border="0" width="95%"
- bgcolor="#ffffff">
-                 <tbody>
-                   <tr>
-                     <td valign="top" align="left">                     
-                                                                        
-          
-      <ul>
-                       <li>Forward<br>
-                    </li>
-                                                                        
-                                              
-      </ul>
-                                                                        
-                              
-      <ul>
-                     <li><a href="features.html">Features</a></li>
-                                                                        
-                              
-      </ul>
-                                                                        
-                              
-      <ul>
-                     <li><a href="whatsnew.html">What's new</a></li>
-               
-      </ul>
-               
-      <ul>
-          <li><a href="documentation.html">Documentation</a></li>
-                                                                        
-                                              
-      </ul>
-                                                                        
-                      
-      <ul>
-                    <li><a href="implementation.html">Implementation</a><br>
-                    </li>
-                                                                        
-                      
-      </ul>
-                                                                        
-                      
-      <ul>
-                    <li><a href="authors.html">The authors</a><br>
-                    </li>
-                                                                        
-                                              
-      </ul>
-                                                                        
-                      
-      <ul>
-                    <li><a href="links.html">Links</a><br>
-                    </li>
-                                                                        
-                      
-      </ul>
-                  <br>
-                     </td>
-                     <td valign="top">                                  
-                                                 
-      <div align="right"><b>Forward</b><br>
-                  </div>
-                  <br>
-            The MathQL proposal rises in the context of the <a
- href="http://helm.cs.unibo.it/">HELM  project</a>, which  aims   at the
-development of a suitable technology for the  creation and maintenance  
-of a virtual, distributed, hypertextual library  of structured mathematical
-   knowledge based on <a href="http://www.w3.org/XML/">XML</a> technology,
-through the  integration of the current   proof assistants and logical frameworks
-with the  most recent technologies   for the development of Web applications
-and electronic  publishing.<br>
-                    <br>
-            The objective of the MathQL proposal is the development of a
-set   of  query   languages enabling the retrieval of formalized mathematical
-Web  resources    on the basis of content-aware requests. The first of these 
- languages,        <b>MathQL-1</b>,    is focused on querying an arbitrary 
-       <a href="http://www.w3.org/RDF/">RDF</a> database because RDF is the 
-       <a href="http://www.w3.org/">W3C</a>  standartd  for describing Web 
- resources  at the general-purpose content level.<br>
-                  <br>
-            As an RDF query language, MathQL-1 provides the main features 
-required      by the RDF community while complying with the needs of HELM. 
-The peculiar      aspects of this language concern the query results, which 
-are highly structured     and possess their own syntax, formally explained 
-by a rigorous semantics.<br>
-                   <br>
-             MathQL-1 is particularly helpful in distributed systems where
- query    engines   are implemented as stand-alone units, because in this
-situation    the query   results are exchanged between the system components
-as well  as  the queries, and thus both the queries and the query results
-need to be encoded in a clearly defined format.<br>
-           <br>
-     Other languages to be developed in the context of the MathQL proposal
- will  be suitable for queries about the semantic structure of mathematical
- data:  this will include content-based pattern-matching (MathQL-2) and possibly 
- other forms of formal matching involving for instance isomorphism, unification 
- and definitions expansion (MathQL-3).<br>
-                     </td>
-                   </tr>
-                                                           
-  </tbody>               
-</table>
-                <br>
-        <br>
-               
-<div align="center">This site is maintained by <a
- href="mailto://fguidi@cs.unibo.it">Ferruccio Guidi</a>, last update: July
-10, 2003.<br>
-     <br>
-     </div>
-     <br>
-    <br>
-   <br>
-  <br>
- <br>
-</body>
-</html>
diff --git a/helm/mathql/homepage/links.html b/helm/mathql/homepage/links.html
deleted file mode 100644 (file)
index a56faa1..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-  <title>MathQL</title>
-                                                                        
-   
-  <meta http-equiv="content-type"
- content="text/html; charset=ISO-8859-1">
-                                           
-  <meta name="author" content="Ferruccio Guidi">
-                                           
-  <meta name="description" content="MathQL Home Page">
-</head>
-  <body>
-                    
-<h1 align="center">MathQL-1</h1>
-                 
-<h2 align="center">A query language for RDF metadata</h2>
-                     
-<table cellpadding="10" cellspacing="2" border="0" width="95%"
- bgcolor="#ffffff">
-             <tbody>
-               <tr>
-                 <td valign="top" align="left">                         
-                                                   
-      <ul>
-                   <li><a href="index.html">Forward</a><br>
-                </li>
-                                                                        
-              
-      </ul>
-                                                                       
-      <ul>
-                 <li><a href="features.html">Features</a></li>
-                                                                       
-      </ul>
-                                                                       
-      <ul>
-                 <li><a href="whatsnew.html">What's new</a></li>
-                                       
-      </ul>
-                                       
-      <ul>
-             <li><a href="documentation.html">Documentation</a></li>
-                                                                        
-              
-      </ul>
-                                                               
-      <ul>
-                <li><a href="implementation.html">Implementation</a><br>
-                </li>
-                                                               
-      </ul>
-                                                               
-      <ul>
-                <li><a href="authors.html">The authors</a><br>
-                </li>
-                                                                        
-              
-      </ul>
-                                                               
-      <ul>
-                <li>Links<br>
-                </li>
-                                                               
-      </ul>
-              <br>
-                 </td>
-                 <td valign="top">                                      
-                 
-      <div align="right"><b>Links</b><br>
-        </div>
-                      
-      <ul>
-          <li><a href="http://helm.cs.unibo.it/">HELM</a> Project homepage,
- &nbsp; <a href="http://mowgli.cs.unibo.it/">MOWGLI</a> Project homepage</li>
-               
-      </ul>
-               
-      <ul>
-          <li>W3C <a href="http://www.w3.org/XML/">XML</a> resources, &nbsp;
- W3C <a href="http://www.w3c.org/RDF/">RDF</a> resources</li>
-               
-      </ul>
-               
-      <ul>
-          <li>Some RDF query languages having a homepage</li>
-               
-      </ul>
-                       
-      <blockquote><a href="http://www.daml.org/">DAML+OIL</a> &nbsp; <a
- href="http://guha.com/rdfdb/">rdfDB</a> &nbsp; <a
- href="http://logicerror.com/RDFPath">RDFPath</a> &nbsp; <a
- href="http://www.intellidimension.com/">RDFQL</a> &nbsp; <a
- href="http://www.hpl.hp.com/semweb/rdql.htm">RDQL</a> &nbsp; <a
- href="http://139.91.183.30:9090/RDF/">RQL</a> &nbsp; <a
- href="http://www.dfki.uni-kl.de/ruleml/">RuleML</a> &nbsp; <a
- href="http://triple.semanticweb.org/">TRIPLE</a>&nbsp; &nbsp;<a
- href="http://swordfish.rdfweb.org/rdfquery/">SquishQL</a> &nbsp; <a
- href="http://kr.cs.ait.ac.th/XDD/">XDD</a><br>
-        </blockquote>
-                 
-      <blockquote>The Developers wishing to have their RDF query language 
-listed here may contact the <a href="authors.html">authors</a>.<br>
-        </blockquote>
-                 </td>
-               </tr>
-                                           
-  </tbody>           
-</table>
-            <br>
-  <br>
- <br>
-</body>
-</html>
diff --git a/helm/mathql/homepage/whatsnew.html b/helm/mathql/homepage/whatsnew.html
deleted file mode 100644 (file)
index 72b12ff..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-  <title>MathQL</title>
-                                                                        
-   
-  <meta http-equiv="content-type"
- content="text/html; charset=ISO-8859-1">
-                                           
-  <meta name="author" content="Ferruccio Guidi">
-                                           
-  <meta name="description" content="MathQL Home Page">
-</head>
-  <body>
-                    
-<h1 align="center">MathQL-1</h1>
-                 
-<h2 align="center">A query language for RDF metadata</h2>
-                     
-<table cellpadding="10" cellspacing="2" border="0" width="95%"
- bgcolor="#ffffff">
-             <tbody>
-               <tr>
-                 <td valign="top" align="left">                         
-                                                   
-      <ul>
-                   <li><a href="index.html">Forward</a><br>
-                </li>
-                                                                        
-              
-      </ul>
-                                                                       
-      <ul>
-                 <li><a href="features.html">Features</a></li>
-                               
-      </ul>
-                               
-      <ul>
-            <li>What's new<br>
-            </li>
-                                                                       
-      </ul>
-                                                                       
-      <ul>
-                 <li><a href="documentation.html">Documentation</a></li>
-                                                                        
-              
-      </ul>
-                                                               
-      <ul>
-                <li><a href="implementation.html">Implementation</a><br>
-                </li>
-                                                               
-      </ul>
-                                                               
-      <ul>
-                <li><a href="authors.html">The authors</a><br>
-                </li>
-                                                                        
-              
-      </ul>
-                                                               
-      <ul>
-                <li><a href="links.html">Links</a><br>
-                </li>
-                                                               
-      </ul>
-              <br>
-                 </td>
-                 <td valign="top">                                      
-                 
-      <div align="right"><b>What's new</b><br>
-       <br>
-              </div>
-  This page reports the newly <a href="implementation.html">implemented</a>
- features of MathQL-1 that are not included in the ufficial <a
- href="documentation.html">documentation</a> yet.<br>
-          <br>
- Changes and additions to MathQL-1 operators:<br>
-       
-      <ul>
-         <li>The <b>add</b> operator now accepts a syntax extension allowing 
-to specify more than one explicit attribute group.</li>
-       
-      </ul>
-       
-      <blockquote>The syntax now is:</blockquote>
-       
-      <blockquote>&lt;query&gt; := "add" [ "distr" ]? [ &lt;groups&gt; | &lt;avar&gt;
-] "in" &lt;query&gt;<br>
- &lt;groups&gt; := &lt;group&gt; [ ";" &lt;group&gt; ]*<br>
- &lt;group&gt; := &lt;attribute&gt; [ "," &lt;attribute&gt; ]*<br>
- &lt;attribute&gt; := &lt;value&gt; "as" &lt;path&gt;<br>
-         <br>
- Examples:<br>
- the query <b>add "1" as "a", "2" as "b" in subj "A"</b> gives the result 
-        <b>"A" attr {"a"="1"; "b"="2"}</b> while<br>
- the query <b>add "1" as "a"; "2" as "b" in subj "A"</b> gives the result 
-        <b>"A" attr {"a"="1"}, {"b"="2"}</b>.<br>
-       </blockquote>
-       
-      <ul>
-         <li>The new <b>align</b> operator takes an integer <i>i</i> (represented 
-as a string), a multiple string value <i>v</i> and returns the same <i>v</i> 
-where each string with length <i>n &lt; i</i> is prefixed with <i>i - n</i> 
-spaces. The syntax of the add operator is:</li>
-       
-      </ul>
-       
-      <blockquote>&lt;value&gt; := "align" &lt;string&gt; "in" &lt;value&gt;<br>
-         <br>
- This operators aligns strings containing numbers so that their alphabetic 
-order agrees with their numeric order.<br>
-       </blockquote>
-                  
-      <ul>
-         <li>The <b>intersect</b> operator now intersects the attribute groups 
-of the mathing subject strings set-theoretically rather than making their 
-"Cartesian product". This semantics reduces the computational costs and makes 
-intersection the dual of union.</li>
-       
-      </ul>
-       
-      <ul>
-         <li>The <b>property</b> operator now accepts more than one <b>isfalse</b> 
-clause to increase the complexity of the constraint condition used to filter 
-the raw query results. This feature is exploited in the queries produced
-by the           <a href="implementation.html">HELM query generator</a>.
-          <br>
-         </li>
-       
-      </ul>
-           </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
- <br>
-</body>
-</html>
diff --git a/helm/mathql/query.xml b/helm/mathql/query.xml
deleted file mode 100644 (file)
index 4efca73..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!DOCTYPE MQLquery SYSTEM "xmathql.dtd">
-
-<!-- To validate: xmllint -valid -loaddtd -noout query.xml -->
-
-<MQLquery>
- <Select>
-  <In>
-   <Relation name="Use">
-    <Pattern>
-     <CONST>cic:/Coq/Init/Logic/Equality/eq.ind</CONST>
-    </Pattern>
-    <Attr binder="$1"/>
-   </Relation>
-  </In>
-  <Where rvar="@result">
-   <AND>
-    <EQ>
-     <BINDER name="$1"><Rvar name="@result"/></BINDER>
-     <CONST>MainHypothesis</CONST>
-    </EQ>
-    <EQ>
-     <PROPERTY name="TITLE"><REFOF><Rvar name="@result"/></REFOF></PROPERTY>
-     <CONST>Uguaglianza</CONST>
-    </EQ>
-   </AND>
-  </Where>
- </Select>
-</MQLquery>
-
diff --git a/helm/mathql/result.xml b/helm/mathql/result.xml
deleted file mode 100644 (file)
index dc79c08..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!DOCTYPE MQLresult SYSTEM "xmqlresult.dtd">
-
-<!-- To validate: xmllint -valid -loaddtd -noout result.xml -->
-
-<MQLresult>
- <ResourceSet>
-  <RESOURCE name="cic:/Coq/Init/Logic/Equality/eq.ind">
-   <AttributeSet>
-    <ATTRIBUTE name="POSITION">
-     <CONST>MainHypothesis</CONST>
-    </ATTRIBUTE>
-    <ATTRIBUTE name="POSITION">
-     <CONST>InConclusion</CONST>
-    </ATTRIBUTE>
-   </AttributeSet>
-  </RESOURCE>
- </ResourceSet>
-</MQLresult>
diff --git a/helm/mathql/xmathql.dtd b/helm/mathql/xmathql.dtd
deleted file mode 100644 (file)
index 96b52a2..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--*****************************************************************-->
-<!-- DTD FOR the MATHEMATICAL QUERY MARKUP LANGUAGE (XMathQL)        -->
-<!-- First draft: April 2002, Irene Schena                           -->
-<!-- Second draft: Agust 2002, Irene Schena                          -->
-<!--*****************************************************************-->
-
-<!--*****************************************************************-->
-<!-- This syntax is not convenient for humans to read and write, but -->
-<!-- it is for programs.                                             -->
-<!-- XMathQL is useful for:                                          -->
-<!-- 1) generating queries in a XML-orienting programming environment-->
-<!-- 2) embedding queries in XML documents                           -->
-<!-- 3) reusing queries saved in a standard format                   -->
-<!-- The syntax reflects the structure of the grammar productions of -->
-<!-- MathQL.                                                         -->
-<!-- Operators are unambiguous (binary or unary), so there isn't any -->
-<!-- grouping operator.                                              -->
-<!-- CONST is the quoted constant string; rvar is for single         -->
-<!-- reference and svar for sets of references, i.e. query results.  -->
-<!-- The attributes binder, rvar, svar declare variables which are   -->
-<!-- referred to and used by means of respectively BINDER, Rvar, Svar-->
-<!-- PROPERTY works on a specified RDF property returning its value. -->
-<!--*****************************************************************-->
-
-<!ENTITY % bool '(True|False)'>
-
-<!-- MathQL query expression declaration -->
-
-<!ENTITY % setexpr '(Rvar|Svar|Ref|Pattern|Select|LetSIn|LetVIn|Relation|
-                     Union|Intersect|Diff)'>
-
-<!-- MathQL boolean expression declaration -->
-
-<!ENTITY % boolexpr '(BOOL|NOT|AND|OR|EQ|SUB|MEET|EX)'>
-
-<!-- MathQL string-set expression declaration -->
-
-<!ENTITY % functexpr '(FUN|PROPERTY)'>
-
-<!ENTITY % stringsetexpr '(CONST|CONSTLIST|REFOF|BINDER|VVAR|%functexpr;)'>
-
-<!-- MathQL query top-element -->
-
-<!ELEMENT MQLquery %setexpr;>
-
-<!-- MathQL set expressions -->
-
-<!ELEMENT Rvar EMPTY>
-<!ATTLIST Rvar
-          name CDATA #REQUIRED>
-
-<!ELEMENT Svar EMPTY>
-<!ATTLIST Svar
-          name CDATA #REQUIRED>
-
-<!ELEMENT Ref %stringsetexpr;>
-
-<!ELEMENT Pattern %stringsetexpr;>
-
-<!ELEMENT Select (In, Where)>
-
-<!ELEMENT LetSIn (%setexpr;, Starget)>
-
-<!ELEMENT LetVIn (%stringsetexpr;, Vtarget)>
-
-<!ELEMENT Relation (PName?,%setexpr;, Attr+)>
-<!ATTLIST Relation
-          name CDATA #REQUIRED
-          refine (sub|super) #IMPLIED>
-
-<!ELEMENT Union (%setexpr;, %setexpr;)>
-
-<!ELEMENT Intersect (%setexpr;, %setexpr;)>
-
-<!ELEMENT Diff (%setexpr;, %setexpr;)>
-
-<!-- MathQL set sub-expressions -->
-
-<!ELEMENT In %setexpr;>
-
-<!ELEMENT Where %boolexpr;>
-<!ATTLIST Where
-          rvar CDATA #REQUIRED>
-
-<!ELEMENT Starget %setexpr;>
-<!ATTLIST Starget
-          svar CDATA #REQUIRED>
-
-<!ELEMENT Vtarget %setexpr;>
-<!ATTLIST Vtarget
-          vvar CDATA #REQUIRED>
-
-<!ELEMENT Attr EMPTY>
-<!ATTLIST Attr 
-          binder CDATA #REQUIRED>
-
-<!ELEMENT PName (CONST+)>
-
-<!-- MathQL boolean expressions -->
-
-<!ELEMENT BOOL EMPTY>
-<!ATTLIST BOOL
-          value %bool; #REQUIRED>
-
-<!ELEMENT NOT %boolexpr;>
-
-<!ELEMENT AND (%boolexpr;, %boolexpr;)>
-
-<!ELEMENT OR (%boolexpr;, %boolexpr;)>
-
-<!ELEMENT EQ (%stringsetexpr;, %stringsetexpr;)>
-
-<!ELEMENT SUB (%stringsetexpr;, %stringsetexpr;)>
-
-<!ELEMENT MEET (%stringsetexpr;, %stringsetexpr;)>
-
-<!ELEMENT EX %boolexpr;>
-
-<!-- MathQL string-set expressions -->
-
-<!ELEMENT CONST (#PCDATA)>
-
-<!ELEMENT CONSTLIST (CONST*)>
-
-<!ELEMENT REFOF %setexpr;>
-
-<!ELEMENT VVAR %stringsetexpr;>
-
-<!ELEMENT BINDER (Rvar)>
-<!ATTLIST BINDER
-          name CDATA #REQUIRED>
-
-<!ELEMENT FUN %stringsetexpr;>
-<!ATTLIST FUN
-          name CDATA #REQUIRED>
-
-<!ELEMENT PROPERTY (Refine?,%stringsetexpr;)>
-<!ATTLIST PROPERTY
-          name CDATA #REQUIRED>
diff --git a/helm/mathql/xmqlresult.dtd b/helm/mathql/xmqlresult.dtd
deleted file mode 100644 (file)
index 9b3333d..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--*****************************************************************-->
-<!-- DTD for RESULTS of XMathQL queries                              -->
-<!-- First draft: September 2002, Irene Schena                       -->
-<!--*****************************************************************-->
-
-
-<!-- MQL result expression declaration -->
-
-<!ENTITY % resultexpr '(ResourceSet)'>
-
-
-<!-- MQL result top-element -->
-
-<!ELEMENT MQLresult %resultexpr;>
-
-<!-- Result expressions and sub-expressions -->
-
-<!ELEMENT ResourceSet (RESOURCE*)>
-
-<!ELEMENT RESOURCE (AttributeSet*)>
-<!ATTLIST RESOURCE
-          name CDATA #REQUIRED>
-
-<!ELEMENT AttributeSet (ATTRIBUTE+)>
-
-<!ELEMENT ATTRIBUTE (CONST*)>
-<!ATTLIST ATTRIBUTE
-          name CDATA #REQUIRED>
-
-<!-- MQL result string expressions -->
-
-<!ELEMENT CONST (#PCDATA)>
-
diff --git a/helm/mathql_test/.cvsignore b/helm/mathql_test/.cvsignore
deleted file mode 100644 (file)
index 1807602..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-*.cm[aiox] *.cmxa *.opt mqtop mqitop mqgtop examples*
-mQGTopParser.ml mQGTopParser.mli mQGTopLexer.ml 
diff --git a/helm/mathql_test/.depend b/helm/mathql_test/.depend
deleted file mode 100644 (file)
index b8d9e57..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-mqgtop.cmo: mQGTopLexer.cmo mQGTopParser.cmi 
-mqgtop.cmx: mQGTopLexer.cmx mQGTopParser.cmx 
-mQGTopParser.cmo: mQGTopParser.cmi 
-mQGTopParser.cmx: mQGTopParser.cmi 
-mQGTopLexer.cmo: mQGTopParser.cmi 
-mQGTopLexer.cmx: mQGTopParser.cmx 
diff --git a/helm/mathql_test/Makefile b/helm/mathql_test/Makefile
deleted file mode 100644 (file)
index 04fea51..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-BIN_DIR = /usr/local/bin
-REQUIRES = unix helm-cic_textual_parser \
-          helm-mathql helm-mathql_interpreter helm-mathql_generator
-PREDICATES =
-OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)"
-OCAMLC = ocamlfind ocamlc $(OCAMLOPTIONS)
-OCAMLOPT = ocamlfind ocamlopt $(OCAMLOPTIONS)
-OCAMLDEP = ocamldep
-OCAMLYACC = ocamlyacc
-OCAMLLEX = ocamllex
-
-LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-
-MQTOP = mqtop.ml
-MQITOP = mqitop.ml
-MQGTOP = mqgtop.ml
-
-DEPOBJS = $(MQTOP) $(MQITOP) $(MQGTOP)
-AUXOBJS = mQGTopParser.ml mQGTopParser.mli mQGTopLexer.ml 
-
-all: $(DEPOBJS:.ml=)
-opt: $(DEPOBJS:.ml=.opt)
-
-depend: $(AUXOBJS)
-       $(OCAMLDEP) $(DEPOBJS) $(AUXOBJS) > .depend
-
-mqtop: $(MQTOP:.ml=.cmo) $(LIBRARIES)
-       $(OCAMLC) -linkpkg -o mqtop $(MQTOP:.ml=.cmo)
-
-mqtop.opt: $(MQTOP:.ml=.cmx) $(LIBRARIES_OPT)
-       $(OCAMLOPT) -linkpkg -o mqtop.opt $(MQTOP:.ml=.cmx)
-
-mqitop: $(MQITOP:.ml=.cmo) $(LIBRARIES)
-       $(OCAMLC) -linkpkg -o mqitop $(MQITOP:.ml=.cmo)
-
-mqitop.opt: $(MQITOP:.ml=.cmx) $(LIBRARIES_OPT)
-       $(OCAMLOPT) -linkpkg -o mqitop.opt $(MQITOP:.ml=.cmx)
-
-mqgtop: mQGTopParser.cmi $(AUXOBJS:.ml=.cmo) $(MQGTOP:.ml=.cmo) $(LIBRARIES)
-       $(OCAMLC) -linkpkg -o mqgtop $(AUXOBJS:.ml=.cmo) $(MQGTOP:.ml=.cmo)
-
-mqgtop.opt: $(AUXOBJS:.ml=.cmx) $(MQGTOP:.ml=.cmx) $(LIBRARIES_OPT)
-       $(OCAMLOPT) -linkpkg -o mqgtop.opt $(AUXOBJS:.ml=.cmx) $(MQGTOP:.ml=.cmx)
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .mly .mll
-.ml.cmo: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.mli.cmi: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.ml.cmx: $(LIBRARIES_OPT)
-       $(OCAMLOPT) -c $<
-.mly.ml: 
-       $(OCAMLYACC) $<
-.mly.mli:
-       $(OCAMLYACC) $<
-.mll.ml:
-       $(OCAMLLEX) $<
-
-$(DEPOBJS:%.ml=%.cmo): $(LIBRARIES)
-$(DEPOBJS:%.ml=%.cmx): $(LIBRARIES_OPT)
-
-clean:
-       rm -f *.cm[iox] *.o $(DEPOBJS:.ml=) $(DEPOBJS:.ml=.opt) \
-        mQGTopParser.ml mQGTopParser.mli mQGTopLexer.ml
-
-install:
-       cp $(DEPOBJS:.ml=) $(DEPOBJS:.ml=.opt) $(BIN_DIR)
-
-uninstall:
-       cd $(BIN_DIR)
-       rm -f $(DEPOBJS:.ml=) $(DEPOBJS:.ml=.opt)
-
-.PHONY: install uninstall clean
-
-ifneq ($(MAKECMDGOALS), depend)
-   include .depend   
-endif
-
diff --git a/helm/mathql_test/mQGTopLexer.mll b/helm/mathql_test/mQGTopLexer.mll
deleted file mode 100644 (file)
index 7e69bcc..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-{ 
-   open MQGTopParser
-   
-   let debug = false
-   
-   let out s = if debug then prerr_endline s
-}
-
-let SPC   = [' ' '\t' '\n']+
-let ALPHA = ['A'-'Z' 'a'-'z' '_']
-let NUM   = ['0'-'9']
-let IDEN  = ALPHA (NUM | ALPHA)*
-let QSTR  = [^ '"' '\\']+
-
-rule comm_token = parse
-   | "(*"         { comm_token lexbuf; comm_token lexbuf }
-   | "*)"         { () }
-   | ['*' '(']    { comm_token lexbuf }
-   | [^ '*' '(']* { comm_token lexbuf }
-and string_token = parse
-   | '"'          { DQ  }
-   | '\\' _       { STR (String.sub (Lexing.lexeme lexbuf) 1 1) }
-   | QSTR         { STR (Lexing.lexeme lexbuf) }
-   | eof          { EOF }
-and spec_token = parse
-   | "(*"         { comm_token lexbuf; spec_token lexbuf }
-   | SPC          { spec_token lexbuf }
-   | '"'          { let str = qstr string_token lexbuf in
-                    out ("STR " ^ str); STR str }
-   | '{'          { out "LC"; LC }
-   | '}'          { out "RC"; RC }
-   | ','          { out "CM"; CM }
-   | '$'          { out "DL"; DL }
-   | "mustobj"    { out "MOBJ"  ; MOBJ   }
-   | "mustsort"   { out "MSORT" ; MSORT  }
-   | "mustrel"    { out "MREL"  ; MREL   }
-   | "onlyobj"    { out "OOBJ"  ; OOBJ   }
-   | "onlysort"   { out "OSORT" ; OSORT  }
-   | "onlyrel"    { out "OREL"  ; OREL   }
-   | "universe"   { out "UNIV"  ; UNIV   } 
-   | IDEN         { let id = Lexing.lexeme lexbuf in 
-                    out ("ID " ^ id); ID id }
-   | eof          { EOF }
diff --git a/helm/mathql_test/mQGTopParser.mly b/helm/mathql_test/mQGTopParser.mly
deleted file mode 100644 (file)
index 3e260d8..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- */
-
-/*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- */
-
-%{
-   let f (x, y, z) = x
-   let s (x, y, z) = y
-   let t (x, y, z) = z
-
-   module T = MQGTypes
-   module U = MQGUtil
-%}
-   %token <string> ID
-   %token <UriManager.uri> CONURI
-   %token <UriManager.uri> VARURI
-   %token <UriManager.uri * int> INDTYURI
-   %token <UriManager.uri * int * int> INDCONURI
-   %token ALIAS EOF
-
-   %start interp
-   %type  <CicTextualParser0.interpretation_domain_item -> CicTextualParser0.interpretation_codomain_item option> interp
-   
-   %token <string> STR
-   %token DL DQ LC RC CM 
-   %token MOBJ MSORT MREL OOBJ OSORT OREL UNIV
-   
-   %start qstr specs
-   %type  <string>                    qstr
-   %type  <MQGTypes.spec list> specs
-%%
-   uri:
-      | CONURI    { CicTextualParser0.ConUri $1                           }
-      | VARURI    { CicTextualParser0.VarUri $1                           }
-      | INDTYURI  { CicTextualParser0.IndTyUri ((fst $1), (snd $1))       }
-      | INDCONURI { CicTextualParser0.IndConUri ((f $1), (s $1), (t $1))  }
-   ;
-   alias:      
-      | ALIAS ID uri { ($2, CicTextualParser0.Uri $3) }
-   ;
-   aliases:
-      | alias aliases { $1 :: $2 } 
-      | EOF           { []       }
-   ;
-   interp:
-      | aliases { function CicTextualParser0.Id s -> (try Some (List.assoc s $1) 
-                                    with Not_found -> None)
-                        | _ -> None }
-   ;
-
-   qstr:
-      | DQ       { ""      }
-      | STR qstr { $1 ^ $2 }
-   ;
-   strs:
-      | STR CM strs { $1 :: $3 }
-      | STR         { [$1]     }
-      |             { []       }
-   ;
-   uri_list:
-      | LC strs RC { List.map U.uri_of_mathql $2 }
-   ;
-   sort_list:
-      | LC strs RC { List.map U.sort_of_mathql $2 }
-   ;
-   pos_list:
-      | LC strs RC { List.map U.position_of_mathql $2 }
-   ;
-   depth_list:
-      | LC strs RC { List.map U.depth_of_mathql $2 }
-   ;
-   spec:
-      | MOBJ  uri_list pos_list depth_list  { T.MustObj  ($2, $3, $4) }
-      | MSORT sort_list pos_list depth_list { T.MustSort ($2, $3, $4) }
-      | MREL  pos_list depth_list           { T.MustRel  ($2, $3)     }
-      | OOBJ  uri_list pos_list depth_list  { T.OnlyObj  ($2, $3, $4) }
-      | OSORT sort_list pos_list depth_list { T.OnlySort ($2, $3, $4) }
-      | OREL  pos_list depth_list           { T.OnlyRel  ($2, $3)     }
-      | UNIV  pos_list                      { T.Universe $2           }
-   ;   
-   specs:
-      | spec specs { $1 :: $2 }
-      | EOF        { []       }
-   ;
diff --git a/helm/mathql_test/mqgtop.ml b/helm/mathql_test/mqgtop.ml
deleted file mode 100644 (file)
index 9a7c8d9..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-let query_num = ref 1
-
-let interp_file = ref "interp.cic" 
-
-let log_file = ref ""
-
-let show_queries = ref false
-
-let int_options = ref ""
-
-let nl = " <p>\n"
-
-module U  = MQueryUtil
-module I  = MQueryInterpreter
-module C  = MQIConn
-module G  = MQueryGenerator
-module L  = MQGTopLexer
-module P  = MQGTopParser
-module TL = CicTextualLexer
-module TP = CicTextualParser
-module C2 = MQueryLevels2
-module C1 = MQueryLevels
-module GU = MQGUtil
-
-let get_handle () = 
-   C.init (C.flags_of_string ! int_options)
-          (fun s -> print_string s; flush stdout) 
-             
-let issue handle q =
-   let mode = [Open_wronly; Open_append; Open_creat; Open_text] in
-   let perm = 64 * 6 + 8 * 6 + 4 in
-   let time () =
-      let lt = Unix.localtime (Unix.time ()) in
-      "NEW LOG: " ^
-      string_of_int (lt.Unix.tm_mon + 1) ^ "-" ^
-      string_of_int (lt.Unix.tm_mday + 1) ^ "-" ^
-      string_of_int (lt.Unix.tm_year + 1900) ^ " " ^
-      string_of_int (lt.Unix.tm_hour) ^ ":" ^
-      string_of_int (lt.Unix.tm_min) ^ ":" ^
-      string_of_int (lt.Unix.tm_sec) 
-   in
-   let log q r = 
-      let och = open_out_gen mode perm ! log_file in
-      let out = output_string och in 
-      if ! query_num = 1 then out (time () ^ nl);
-      out ("Query: " ^ string_of_int ! query_num ^ nl);
-      U.text_of_query out q nl;
-      out ("Result: " ^ nl);
-      U.text_of_result out r nl;
-      close_out och
-   in
-   if ! show_queries then U.text_of_query (output_string stdout) q nl;
-   let r = I.execute handle q in    
-   U.text_of_result (output_string stdout) r nl;
-   if ! log_file <> "" then log q r; 
-   incr query_num;
-   flush stdout
-
-let get_interp () =
-   let lexer = function
-      | TP.ID s                -> P.ID s
-      | TP.CONURI u            -> P.CONURI u
-      | TP.VARURI u            -> P.VARURI u
-      | TP.INDTYURI (u, p)     -> P.INDTYURI (u, p)
-      | TP.INDCONURI (u, p, s) -> P.INDCONURI (u, p, s)
-      | TP.LETIN               -> P.ALIAS
-      | TP.EOF                 -> P.EOF
-      | _                     -> assert false
-   in
-   let ich = open_in ! interp_file in
-   let lexbuf = Lexing.from_channel ich in
-   let f = P.interp (fun x -> lexer (TL.token x)) lexbuf in
-   close_in ich; f
-   
-let get_terms interp = 
-   let interp = get_interp () in
-   let lexbuf = Lexing.from_channel stdin in
-   let rec aux () =
-      try
-         let dom, mk_term =
-            CicTextualParserContext.main [] [] CicTextualLexer.token lexbuf
-         in
-         (snd (mk_term interp)) :: aux ()
-      with
-      CicTextualParser0.Eof -> []
-   in
-   aux ()
-
-let pp_type_of uri = 
-   let u = UriManager.uri_of_string uri in  
-   let s = match (CicEnvironment.get_obj u) with
-      | Cic.Constant (_, _, ty, _) -> CicPp.ppterm ty
-      | Cic.Variable (_, _, ty, _) -> CicPp.ppterm ty
-      | _                          -> "Current proof or inductive definition."      
-(*
-      | Cic.CurrentProof (_,conjs,te,ty) ->
-      | C.InductiveDefinition _ ->
-*)
-   in print_endline s; flush stdout
-
-let rec display = function
-   | []           -> ()
-   | term :: tail -> 
-      display tail;
-      print_string ("? " ^ CicPp.ppterm term ^ nl);
-      flush stdout
-
-let execute ich =
-   let lexbuf = Lexing.from_channel ich in
-   let handle = get_handle () in
-   let rec execute_aux () =
-      try 
-         let q = U.query_of_text lexbuf in
-         issue handle q; execute_aux ()
-      with End_of_file -> ()
-   in
-   execute_aux ();
-   C.close handle
-
-let compose () =
-   let handle = get_handle () in  
-   let cl = P.specs L.spec_token (Lexing.from_channel stdin) in
-   issue handle (G.compose cl);
-   C.close handle
-
-let locate name =
-   let handle = get_handle () in  
-   issue handle (G.locate name); 
-   C.close handle
-
-let mpattern n m l =
-   let queries = ref [] in
-   let univ = Some GU.universe_for_search_pattern in 
-   let handle = get_handle () in
-   let rec pattern level = function
-      | []           -> ()
-      | term :: tail -> 
-         pattern level tail;
-        print_string ("? " ^ CicPp.ppterm term ^ nl);
-        let t = U.start_time () in
-         let om,rm,sm = C2.get_constraints term in
-        let oml,rml,sml = List.length om, List.length rm, List.length sm in 
-        let oo, ool = if level land 1 = 0 then None, 0 else Some om, oml in
-        let ro, rol = if level land 2 = 0 then None, 0 else Some rm, rml in
-         let so, sol = if level land 4 = 0 then None, 0 else Some sm, sml in
-        let q = G.query_of_constraints univ (om,rm,sm) (oo,ro,so) in 
-        if not (List.mem q ! queries) then
-        begin
-           issue handle q;
-           Printf.eprintf "[%i] " (pred ! query_num); flush stderr;
-           Printf.printf "%i GEN = %i: %s"
-              (pred ! query_num) (oml + rml + sml + ool + rol + sol) 
-              (U.stop_time t ^ nl);
-           flush stdout; queries := q :: ! queries
-        end
-   in 
-   for level = max m n downto min m n do
-      Printf.eprintf "\nmqgtop: pattern: trying level %i\n" level; 
-      flush stderr; pattern level l
-   done;
-   Printf.eprintf "\nmqgtop: pattern: %i queries issued\n" 
-      (List.length ! queries);
-   flush stderr;
-   C.close handle
-
-let mbackward n m l =
-   let queries = ref [] in
-   let torigth_restriction (u, b) =
-      let p = if b then `MainConclusion None else `InConclusion in (p, u)
-   in
-   let univ = Some GU.universe_for_match_conclusion in
-   let handle = get_handle () in
-   let rec backward level = function
-      | []           -> ()
-      | term :: tail -> 
-         backward level tail;
-        print_string ("? " ^ CicPp.ppterm term ^ nl);
-        let t = U.start_time () in
-        let list_of_must, only = C1.out_restr [] [] term in
-         let max_level = pred (List.length list_of_must) in 
-        let must = List.nth list_of_must (min level max_level) in 
-        let rigth_must = List.map torigth_restriction must in
-        let rigth_only = Some (List.map torigth_restriction only) in
-        let q = G.query_of_constraints univ (rigth_must, [], []) (rigth_only , None, None) in 
-        if not (List.mem q ! queries) then
-        begin
-           issue handle q;
-           Printf.eprintf "[%i] " (pred ! query_num); flush stderr;
-           Printf.printf "%i GEN = %i: %s"
-              (pred ! query_num) (List.length must) 
-              (U.stop_time t ^ nl);
-           flush stdout; queries := q :: ! queries
-        end
-   in 
-   for level = max m n downto min m n do
-      Printf.eprintf "\nmqgtop: backward: trying level %i\n" level; 
-      flush stderr; backward level l
-   done;
-   Printf.eprintf "\nmqgtop: backward: %i queries issued\n" 
-      (List.length ! queries);
-   flush stderr;
-   C.close handle
-
-let check () =
-   let handle = get_handle () in
-   Printf.eprintf 
-      "mqgtop: current options: %s, connection: %s\n"  
-      ! int_options (if C.connected handle then "on" else "off");
-   C.close handle
-
-let prerr_help () =
-   prerr_endline "\nUSAGE: mqgtop.opt OPTIONS < INPUTFILE\n"; 
-   prerr_endline "The tool provides a textual interface to the HELM Query Generator, used for";
-   prerr_endline "testing purposes. mqgtop reads its input from stdin and produces ith output";
-   prerr_endline "in HTML on stdout. The options can be one ore more of the following.\n";
-   prerr_endline "OPTIONS:\n";
-   prerr_endline "-h  -help               shows this help message";
-   prerr_endline "-q  -show-queries       outputs generated queries";
-   prerr_endline "-l  -log-file FILE      sets the log file";
-   prerr_endline "-o  -options STRING     sets the interpreter options";
-   prerr_endline "-c  -check              checks the database connection";
-   prerr_endline "-t  -typeof URI         outputs the CIC type of the given HELM object";
-   prerr_endline "-x  -execute            issues a query given in the input file";
-   prerr_endline "-i  -interp FILE        sets the CIC short names interpretation file";
-   prerr_endline "-d  -disply             outputs the CIC terms given in the input file";
-   prerr_endline "-L  -locate ALIAS       issues the \"Locate\" query for the given alias";
-   prerr_endline "-C  -compose            issues the \"Compose\" query reading its specifications";
-   prerr_endline "                        from the input file"; 
-   prerr_endline "-B  -backward LEVEL     issues the \"Backward\" query for the given level on all";
-   prerr_endline "                        CIC terms in the input file";
-   prerr_endline "-MB -multi-backward MAX issues the \"Backward\" query for each level from max to 0";
-   prerr_endline "                        on all CIC terms in the input file";
-   prerr_endline "-P  -pattern LEVEL      issues the \"Pattern\" query for the given level on all";
-   prerr_endline "                        CIC terms in the input file";
-   prerr_endline "-MP -multi-pattern      issues the \"Pattern\" query for each level from 7 to 0";
-   prerr_endline "                        on all CIC terms in the input file\n";
-   prerr_endline "NOTES: * current interpreter options are:";
-   prerr_endline "         P (postgres), G (Galax), S (show statistics), Q (quiet)";
-   prerr_endline "       * CIC terms are read with the HELM CIC Textual Parser";
-   prerr_endline "       * -typeof does not work with inductive types and proofs in progress\n"
-
-let rec parse = function
-   | [] -> ()
-   | ("-h"|"-help") :: rem -> prerr_help (); parse rem
-   | ("-i"|"-interp") :: arg :: rem -> interp_file := arg; parse rem
-   | ("-d"|"-display") :: rem -> display (get_terms ()); parse rem
-   | ("-t"|"-typeof") :: arg :: rem -> pp_type_of arg; parse rem
-   | ("-x"|"-execute") :: rem -> execute stdin; parse rem
-   | ("-q"|"-show-queries") :: rem -> show_queries := true; parse rem
-   | ("-o"|"-options") :: arg :: rem -> int_options := arg; parse rem
-   | ("-c"|"-check") :: rem -> check (); parse rem
-   | ("-l"|"-log-file") :: arg :: rem -> log_file := arg; parse rem
-   | ("-L"|"-Locate") :: arg :: rem -> locate arg; parse rem
-   | ("-C"|"-compose") :: rem -> compose (); parse rem   
-   | ("-M"|"-backward") :: arg :: rem ->
-      let m = (int_of_string arg) in mbackward m m (get_terms ()); parse rem
-   | ("-MB"|"-multi-backward") :: arg :: rem ->
-      let m = (int_of_string arg) in mbackward m 0 (get_terms ()); parse rem
-   | ("-P"|"-pattern") :: arg :: rem ->
-      let m = (int_of_string arg) in mpattern m m (get_terms ()); parse rem
-   | ("-MP"|"-multi-pattern") :: rem -> mpattern 7 0 (get_terms ()); parse rem
-   | _ :: rem -> parse rem
-
-let _ =
-   let t = U.start_time () in
-   Logger.log_callback :=
-      (Logger.log_to_html 
-       ~print_and_flush:(fun s -> print_string s; flush stdout)) ; 
-   parse (List.tl (Array.to_list Sys.argv)); 
-   prerr_endline ("mqgtop: done in " ^ (U.stop_time t));
-   exit 0
diff --git a/helm/mathql_test/mqitop.ml b/helm/mathql_test/mqitop.ml
deleted file mode 100644 (file)
index 7dd4388..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-module U = MQueryUtil
-module I = MQueryInterpreter
-module C = MQIConn
-
-let _ =
-   let t = U.start_time () in
-   let ich = Lexing.from_channel stdin in
-   let flags = if Array.length Sys.argv >= 2 then Sys.argv.(1) else "" in
-   let log s = print_string s; flush stdout in
-   let handle = C.init (C.flags_of_string flags) log in 
-   if not (C.connected handle) then begin  
-       print_endline "mqitop: no connection"; flush stdout
-   end;
-   let rec aux () =
-      let t = U.start_time () in
-      let r = I.execute handle (U.query_of_text ich) in
-(*    U.text_of_result log r "\n";
-*)    Printf.printf "mqitop: query: %s,%i\n" (U.stop_time t) (List.length r);
-      flush stdout; aux()
-      
-   in
-   begin try aux() with End_of_file -> () end;
-   C.close handle;
-   Printf.printf "mqitop: done: %s\n" (U.stop_time t)
diff --git a/helm/mathql_test/mqtop.ml b/helm/mathql_test/mqtop.ml
deleted file mode 100644 (file)
index 48ffb1e..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-let _ =
-   let module U = MQueryUtil in
-   let t = U.start_time () in
-   let ich = Lexing.from_channel stdin in
-   let rec aux () =
-      let t = U.start_time () in
-      U.text_of_query print_string (U.query_of_text ich) "\n";
-      Printf.printf "mqtop: query: %s\n" (U.stop_time t);
-      flush stdout; aux()
-   in
-   begin try aux() with End_of_file -> () end;
-   Printf.printf "mqtop: done: %s\n" (U.stop_time t)
diff --git a/helm/meta_style/.cvsignore b/helm/meta_style/.cvsignore
deleted file mode 100644 (file)
index b889488..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-algebra.xsl
-arith.xsl
-basic.xsl
-reals.xsl
-set.xsl
diff --git a/helm/meta_style/Makefile b/helm/meta_style/Makefile
deleted file mode 100644 (file)
index c0e5fc6..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-XSLTPROC = xsltproc --timing
-FORMAT = xmllint --format
-SUBST = ./subst.pl
-METASTYLESHEET = meta_cic2mathml.xsl
-TMP1 = /tmp/.tmpfile1
-TMP2 = /tmp/.tmpfile2
-
-all: algebra.xsl arith.xsl basic.xsl reals.xsl set.xsl
-
-clean:
-       rm -f algebra.xsl arith.xsl basic.xsl reals.xsl set.xsl
-
-algebra.xsl: algebra.xml $(METASTYLESHEET)
-       @echo "**** PROCESSING algebra.xml ****"
-       @$(XSLTPROC) $(METASTYLESHEET) algebra.xml > $(TMP1)
-       @$(FORMAT) $(TMP1) > $(TMP2)
-       @mv $(TMP2) algebra.xsl
-       @rm $(TMP1)
-       @$(SUBST) oxsl: xsl: algebra.xsl
-       @$(SUBST) xmlns:oxsl xmlns:xsl algebra.xsl
-
-arith.xsl: arith.xml $(METASTYLESHEET)
-       @echo "**** PROCESSING arith.xml ****"
-       @$(XSLTPROC) $(METASTYLESHEET) arith.xml > $(TMP1)
-       @$(FORMAT) $(TMP1) > $(TMP2)
-       @mv $(TMP2) arith.xsl
-       @rm $(TMP1)
-       @$(SUBST) oxsl: xsl: arith.xsl
-       @$(SUBST) xmlns:oxsl xmlns:xsl arith.xsl
-
-basic.xsl: basic.xml $(METASTYLESHEET)
-       @echo "**** PROCESSING basic.xml ****"
-       @$(XSLTPROC) $(METASTYLESHEET) basic.xml > $(TMP1)
-       @$(FORMAT) $(TMP1) > $(TMP2)
-       @mv $(TMP2) basic.xsl
-       @rm $(TMP1)
-       @$(SUBST) oxsl: xsl: basic.xsl
-       @$(SUBST) xmlns:oxsl xmlns:xsl basic.xsl
-
-reals.xsl: reals.xml $(METASTYLESHEET)
-       @echo "**** PROCESSING reals.xml ****"
-       @$(XSLTPROC) $(METASTYLESHEET) reals.xml > $(TMP1)
-       @$(FORMAT) $(TMP1) > $(TMP2)
-       @mv $(TMP2) reals.xsl
-       @rm $(TMP1)
-       @$(SUBST) oxsl: xsl: reals.xsl
-       @$(SUBST) xmlns:oxsl xmlns:xsl reals.xsl
-
-set.xsl: set.xml $(METASTYLESHEET)
-       @echo "**** PROCESSING set.xml ****"
-       @$(XSLTPROC) $(METASTYLESHEET) set.xml > $(TMP1)
-       @$(FORMAT) $(TMP1) > $(TMP2)
-       @mv $(TMP2) set.xsl
-       @rm $(TMP1)
-       @$(SUBST) oxsl: xsl: set.xsl
-       @$(SUBST) xmlns:oxsl xmlns:xsl set.xsl
diff --git a/helm/meta_style/algebra.xml b/helm/meta_style/algebra.xml
deleted file mode 100644 (file)
index 119effa..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-<!DOCTYPE OpList SYSTEM "operator.dtd">
-
-<OpList xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!-- Unary Operations -->
-
-<Operator
- name  = "0"
- uri   = "cic:/Algebra/CSemiGroups/csg_unit.con"
- arity = "1">
-       <mop tag="ci" helm:xref="$APP-ID">0</mop>
-</Operator>
-
-<Operator
- name  = "1"
- uri   = "cic:/Algebra/CRings/cr_one.con"
- arity = "1">
-       <mop tag="ci" helm:xref="$APP-ID">1</mop>
-</Operator>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/CGroups/cg_inv.con"
- hide  = "1"
- arity = "1"
- m-tag = "minus"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/CMetricFields/CMetric_Fields/cmf_abs.con"
- hide  = "1"
- arity = "2"
- m-tag = "abs"/>
-
-<!-- Binary Operations and Relations -->
-
-<Operator
- name  = "SETOID EQUALITY"
- uri   = "cic:/Algebra/CSetoids/cs_eq.con"
- hide  = "1"
- arity = "2"
- m-tag = "eq"/>
-
-<Operator
- name  = "APART"
- uri   = "cic:/Algebra/CSetoids/cs_ap.con"
- hide  = "1"
- arity = "2"
- m-tag = "neq"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/COrdFields/leEq.con"
- hide  = "1"
- arity = "2"
- m-tag = "leq"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/COrdFields/cof_less.con"
- hide  = "1"
- arity = "2"
- m-tag = "lt"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/CRings/cr_plus.con | cic:/Algebra/CSemiGroups/csg_op.con"
- hide  = "1"
- arity = "2"
- m-tag = "plus"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/CRings/cr_minus.con | cic:/Algebra/CGroups/cg_minus.con"
- hide  = "1"
- arity = "2"
- m-tag = "minus"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/CRings/cr_mult.con"
- hide  = "1"
- arity = "2"
- m-tag = "times"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/CFields/cf_div.con"
- hide  = "1"
- arity = "2"
- m-tag = "divide"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/CRings/Ring_constructions/nzpro.con"
- cook  = "true"
- arity = "2">
-       <param id="1"/>
-</Operator>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/CRings/exponentiation/nexp.con"
- cook  = "true"
- arity = "2"
- m-tag = "power"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/CRings/exponentiation/nexp_op.con | cic:/Algebra/Expon/Zexp_def/zexp.con"
- cook  = "true"
- arity = "2">
-       <mapp>
-               <mop tag="power"/>
-               <param id="2"/>
-               <param id="1"/>
-       </mapp>
-</Operator>
-
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/COrdFields/absSmall.con"
- hide  = "1"
- arity = "2">
-       <mapp>
-               <mop tag="lt"/>
-               <mapp>
-                       <mop tag="abs"/>
-                       <param id="2"/>
-               </mapp>
-               <param id="1"/>
-       </mapp>
-</Operator>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Algebra/CPolynomials/CPoly_CRing_ctd/cpoly_apply_fun.con"
- cook  = "true"
- arity = "2"> 
-       <mapp>
-               <m:csymbol>app</m:csymbol>
-               <param id="1"/>
-               <param id="2"/>
-       </mapp>
-</Operator>
-
-<Operator
- name  = "********"
- uri   = "cic:/Algebra/COrdFields/OrdField_Cauchy/seqLimit.con"
- cook  = "true"
- arity = "2">
-       <mapp>
-               <mop tag="eq" helm:xref="$APP-ID"/>
-               <mapp helm:xref="$OP-ID">
-                       <mop tag="limit"/>
-                       <mbvar name="x"/>
-                       <m:lowlimit>
-                               <m:infinity/>
-                       </m:lowlimit>
-                       <param id="1" bvar="x"/>
-               </mapp>
-               <param id="2"/>
-       </mapp>
-</Operator>
-
-<Operator
- name  = "********"
- uri   = "cic:/Algebra/CSums/Sums/sum0.con"
- cook  = "true"
- arity = "2">
-       <m:apply helm:xref="$OP-ID">
-               <mop tag="sum"/>
-               <mbvar name="x"/>
-               <m:condition>
-                       <m:apply>
-                               <m:lt/>
-                               <mvar name="x"/>
-                               <param id="1"/>
-                       </m:apply>
-               </m:condition>
-               <param id="2" bvar="x"/>
-       </m:apply>
-</Operator>
-
-<Operator
- name  = "SUM"
- uri   = "cic:/Algebra/CSums/Sums/sum.con"
- cook  = "true"
- arity = "3">
-       <m:apply helm:xref="$OP-ID">
-               <mop tag="sum"/>
-               <mbvar name="x"/>
-               <m:lowlimit>
-                       <param id="1"/>
-               </m:lowlimit>
-               <m:uplimit>
-                       <param id="2"/>
-               </m:uplimit>
-               <param id="3" bvar="x"/>
-       </m:apply>
-</Operator>
-
-</OpList>
diff --git a/helm/meta_style/arith.xml b/helm/meta_style/arith.xml
deleted file mode 100644 (file)
index 17fc523..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE OpList SYSTEM "operator.dtd">
-
-<!-- ************************** ARITHMETICS ****************************** -->
-
-<OpList xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<import href="positive.xsl"/>
-
-<Operator
- name  = "LESS EQUAL"
- uri   = "cic:/Coq/Init/Peano/le.ind | cic:/Coq/ZArith/zarith_aux/Zle.con"
- arity = "2"
- m-tag = "leq"/>
-
-<Operator
- name  = "LESS THAN"
- uri   = "cic:/Coq/Init/Peano/lt.con | cic:/Coq/ZArith/zarith_aux/Zlt.con"
- arity = "2"
- m-tag = "lt"/>
-
-<Operator
- name  = "GREATER EQUAL"
- uri   = "cic:/Coq/Init/Peano/ge.con | cic:/Coq/ZArith/zarith_aux/Zge.con"
- arity = "2"
- m-tag = "geq"/>
-
-<Operator
- name  = "GREATER THAN"
- uri   = "cic:/Coq/Init/Peano/gt.con | cic:/Coq/ZArith/zarith_aux/Zgt.con"
- arity = "2"
- m-tag = "gt"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Init/Peano/plus.con | cic:/Coq/ZArith/fast_integer/fast_integers/Zplus.con"
- arity = "2"
- m-tag = "plus"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Arith/Minus/minus.con | cic:/Coq/ZArith/zarith_aux/Zminus.con"
- arity = "2"
- m-tag = "minus"/>
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Init/Peano/mult.con | cic:/Coq/ZArith/fast_integer/fast_integers/Zmult.con"
- arity = "2"
- m-tag = "times"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Arith/Min/min.con | cic:/Coq/ZArith/zarith_aux/Zmin.con"
- arity = "2"
- m-tag = "min"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/ZArith/fast_integer/fast_integers/Zopp.con"
- arity = "1"
- m-tag = "minus"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/ZArith/zarith_aux/absolu.con"
- arity = "1"
- m-tag = "abs"/>
-                                               
-</OpList>
diff --git a/helm/meta_style/basic.xml b/helm/meta_style/basic.xml
deleted file mode 100644 (file)
index b068146..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE OpList SYSTEM "operator.dtd">
-
-
-<OpList xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!-- ************************* LOGIC *********************************-->
-
-<Operator
- name  = "AND"
- uri   = "cic:/Coq/Init/Logic/Conjunction/and.ind"
- arity = "2"
- m-tag = "and"/>
-
-<Operator
- name  = "OR"
- uri   = "cic:/Coq/Init/Logic/Disjunction/or.ind"
- arity = "2"
- m-tag = "or"/>
-
-<Operator
- name  = "NOT" 
- uri   = "cic:/Coq/Init/Logic/not.con"
- arity = "1"
- m-tag = "not"/>
-<!-- EQUALITY and TYPE EQUALITY -->
-
-<Operator
- name  = "EQUALITY and TYPE EQUALITY"
- uri   = "cic:/Coq/Init/Logic/Equality/eq.ind | cic:/Coq/Init/Logic_Type/eqT.ind"
- hide  = "1"
- arity = "2"
- m-tag = "eq"/>
-
-<NotOperator
- name  = "NOT-EQ and NOT-EQT"
- uri   = "cic:/Coq/Init/Logic/Equality/eq.ind | cic:/Coq/Init/Logic_Type/eqT.ind"
- hide  = "1"
- arity = "2">
-       <mapp>
-               <m:neq/>
-               <param id="1"/>
-               <param id="2" mode="set"/>
-       </mapp>
-</NotOperator>
-
-<Operator
- name  = "EXIST"
- uri   = "cic:/Coq/Init/Logic/First_order_quantifiers/ex.ind | cic:/Coq/Init/Logic_Type/exT.ind"
- arity = "2">
-       <mapp>
-               <mop tag="exists"/>
-               <mbvar name="x"/>
-               <m:condition>
-                       <param id="1" mode="pure"/>
-               </m:condition>
-               <param id="2" bvar="x"/>
-       </mapp>
-</Operator>
-
-<Operator
- name  = "EXIST"
- uri   = "cic:/Coq/Init/Logic/First_order_quantifiers/ex2.ind | cic:/Coq/Init/Logic_Type/exT2.ind"
- hide  = "1"
- arity = "2">
-       <mapp>
-               <mop tag="exists"/>
-               <mbvar name="x"/>
-               <m:condition>
-                       <param id="1" bvar="x"/>
-               </m:condition>
-               <param id="2" bvar="x"/>
-       </mapp>
-</Operator>
-
-</OpList>
diff --git a/helm/meta_style/meta_cic2mathml.xsl b/helm/meta_style/meta_cic2mathml.xsl
deleted file mode 100644 (file)
index f778903..0000000
+++ /dev/null
@@ -1,1298 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm"
-                              xmlns:oxsl="http://www.w3.org/1999/XSL/TransformAlias">
-
-<xsl:output method="xml"/>
-
-<xsl:namespace-alias stylesheet-prefix="oxsl" result-prefix="xsl"/>
-
-<xsl:template match="OpList">
-       <xsl:comment> Copyright (C) 2000, HELM Team                                     </xsl:comment>
-       <xsl:comment>                                                                   </xsl:comment>
-       <xsl:comment> This file is part of HELM, an Hypertextual, Electronic            </xsl:comment>
-       <xsl:comment> Library of Mathematics, developed at the Computer Science         </xsl:comment>
-       <xsl:comment> Department, University of Bologna, Italy.                         </xsl:comment>
-       <xsl:comment>                                                                   </xsl:comment>
-       <xsl:comment> HELM is free software; you can redistribute it and/or             </xsl:comment>
-       <xsl:comment> modify it under the terms of the GNU General Public License       </xsl:comment>
-       <xsl:comment> as published by the Free Software Foundation; either version 2    </xsl:comment>
-       <xsl:comment> of the License, or (at your option) any later version.            </xsl:comment>
-       <xsl:comment>                                                                   </xsl:comment>
-       <xsl:comment> HELM is distributed in the hope that it will be useful,           </xsl:comment>
-       <xsl:comment> but WITHOUT ANY WARRANTY; without even the implied warranty of    </xsl:comment>
-       <xsl:comment> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     </xsl:comment>
-       <xsl:comment> GNU General Public License for more details.                      </xsl:comment>
-       <xsl:comment>                                                                   </xsl:comment>
-       <xsl:comment> You should have received a copy of the GNU General Public License </xsl:comment>
-       <xsl:comment> along with HELM; if not, write to the Free Software               </xsl:comment>
-       <xsl:comment> Foundation, Inc., 59 Temple Place - Suite 330, Boston,            </xsl:comment>
-       <xsl:comment> MA  02111-1307, USA.                                              </xsl:comment>
-       <xsl:comment>                                                                   </xsl:comment>
-       <xsl:comment> For details, see the HELM World-Wide-Web page,                    </xsl:comment>
-       <xsl:comment> http://cs.unibo.it/helm/.                                         </xsl:comment>
-       
-       <oxsl:stylesheet version="1.0">
-               <xsl:apply-templates/>
-       </oxsl:stylesheet>
-</xsl:template>
-
-<xsl:template match="import">
-       <oxsl:import href="{@href}"/>
-</xsl:template>
-
-<xsl:template match="include">
-       <oxsl:include href="{@href}"/>
-</xsl:template>
-
-<xsl:template match="Operator|NotOperator">
-       <xsl:variable name="uri">
-               <xsl:call-template name="remove_white_spaces">
-                       <xsl:with-param name="uri" select="@uri"/>
-               </xsl:call-template>
-       </xsl:variable>
-
-       <xsl:variable name="not">
-               <xsl:choose>
-                       <xsl:when test="name() = 'Operator'">false</xsl:when>
-                       <xsl:otherwise>true</xsl:otherwise>
-               </xsl:choose>
-       </xsl:variable>
-
-       <xsl:variable name="const">
-               <xsl:value-of select="@arity = 0 and @hide = 0 and @cook = 'false'"/>
-       </xsl:variable>
-
-       <xsl:choose>
-               <xsl:when test="$const = 'true' and $not = 'true'">
-                       <xsl:call-template name="out_comment">
-                               <xsl:with-param name="name" select="concat($uri,': &quot;not&quot; cannot  be applyed to a constant operator')"/>
-                       </xsl:call-template>
-               </xsl:when>
-               <xsl:otherwise>
-                       <!-- All uris in uri1 list (if not empty) have CONST c-tag -->
-                       <xsl:variable name="uri1">
-                               <xsl:call-template name="select_uris">
-                                       <xsl:with-param name="uris"  select="$uri"/>
-                                       <xsl:with-param name="c-tag" select="'CONST'"/>
-                               </xsl:call-template>
-                       </xsl:variable>
-                       
-                       <!-- All uris in uri2 list (if not empty) have MUTIND c-tag -->
-                       <xsl:variable name="uri2">
-                               <xsl:call-template name="select_uris">
-                                       <xsl:with-param name="uris"  select="$uri"/>
-                                       <xsl:with-param name="c-tag" select="'MUTIND'"/>
-                               </xsl:call-template>
-                       </xsl:variable>
-
-                       <xsl:if test="$uri1 != ''">
-                               <xsl:call-template name="out_template">
-                                       <xsl:with-param name="name"  select="@name"/>
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="uri"   select="$uri1"/>
-                                       <xsl:with-param name="cook"  select="@cook"/>
-                                       <xsl:with-param name="hide"  select="@hide"/>
-                                       <xsl:with-param name="arity" select="@arity"/>
-                                       <xsl:with-param name="m-tag" select="@m-tag"/>
-                                       <xsl:with-param name="c-tag" select="'CONST'"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:call-template>
-                       </xsl:if>
-
-                       <xsl:if test="$uri2 != ''">
-                               <xsl:call-template name="out_template">
-                                       <xsl:with-param name="name"  select="@name"/>
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="uri"   select="$uri2"/>
-                                       <xsl:with-param name="cook"  select="@cook"/>
-                                       <xsl:with-param name="hide"  select="@hide"/>
-                                       <xsl:with-param name="arity" select="@arity"/>
-                                       <xsl:with-param name="m-tag" select="@m-tag"/>
-                                       <xsl:with-param name="c-tag" select="'MUTIND'"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:call-template>
-                       </xsl:if>
-               </xsl:otherwise>
-       </xsl:choose>
-</xsl:template>
-
-<xsl:template match="OpSet|NotOpSet">
-       <xsl:variable name="uri">
-               <xsl:call-template name="remove_white_spaces">
-                       <xsl:with-param name="uri" select="@uri"/>
-               </xsl:call-template>
-       </xsl:variable>
-
-       <xsl:variable name="not">
-               <xsl:choose>
-                       <xsl:when test="name() = 'OpSet'">false</xsl:when>
-                       <xsl:otherwise>true</xsl:otherwise>
-               </xsl:choose>
-       </xsl:variable>
-
-       <xsl:variable name="const">
-               <xsl:value-of select="*[name() = 'Case']/@arity = 0 and @hide = 0 and @cook = 'false'"/>
-       </xsl:variable>
-
-       <xsl:choose>
-               <xsl:when test="$const = 'false' and $not = 'true'">
-                       <xsl:call-template name="out_comment">
-                               <xsl:with-param name="name" select="concat($uri,': &quot;not&quot; cannot  be applyed to a constant operator')"/>
-                       </xsl:call-template>
-               </xsl:when>
-               <xsl:when test="$const = 'true'">
-                       <xsl:call-template name="out_comment">
-                               <xsl:with-param name="name" select="concat($uri,':  cannot be specified a constant operator when using OpSet element')"/>
-                       </xsl:call-template>
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:variable name="uri1">
-                               <xsl:call-template name="select_uris">
-                                       <xsl:with-param name="uris"  select="$uri"/>
-                                       <xsl:with-param name="c-tag" select="'CONST'"/>
-                               </xsl:call-template>
-                       </xsl:variable>
-
-                       <xsl:variable name="uri2">
-                               <xsl:call-template name="select_uris">
-                                       <xsl:with-param name="uris"  select="$uri"/>
-                                       <xsl:with-param name="c-tag" select="'MUTIND'"/>
-                               </xsl:call-template>
-                       </xsl:variable>
-
-                       <xsl:if test="$uri1 != ''">
-                               <xsl:call-template name="out_template_set">
-                                       <xsl:with-param name="name"  select="@name"/>
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="uri"   select="$uri1"/>
-                                       <xsl:with-param name="cook"  select="@cook"/>
-                                       <xsl:with-param name="hide"  select="@hide"/>
-                                       <xsl:with-param name="m-tag" select="@m-tag"/>
-                                       <xsl:with-param name="c-tag" select="'CONST'"/>
-                               </xsl:call-template>
-                       </xsl:if>
-
-                       <xsl:if test="$uri2 != ''">
-                               <xsl:call-template name="out_template_set">
-                                       <xsl:with-param name="name"  select="@name"/>
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="uri"   select="$uri2"/>
-                                       <xsl:with-param name="cook"  select="@cook"/>
-                                       <xsl:with-param name="hide"  select="@hide"/>
-                                       <xsl:with-param name="m-tag" select="@m-tag"/>
-                                       <xsl:with-param name="c-tag" select="'MUTIND'"/>
-                               </xsl:call-template>
-                       </xsl:if>
-               </xsl:otherwise>
-       </xsl:choose>
-</xsl:template>
-
-<!-- *********************************************************************** -->
-<!--                             MAIN FUNCTIONS                              -->
-<!-- *********************************************************************** -->
-
-
-<xsl:template name="out_template">
-       <xsl:param name="name"/>
-       <xsl:param name="not"   select="'false'"/>
-       <xsl:param name="uri"/>
-       <xsl:param name="cook"  select="'false'"/>
-       <xsl:param name="hide"  select="0"/>
-       <xsl:param name="arity" select="0"/>
-       <xsl:param name="m-tag"/>
-       <xsl:param name="c-tag"/>
-       <xsl:param name="const" select="'false'"/>
-
-       <xsl:variable name="apply_not">
-               <xsl:if test="$not = 'true'">*[2]/</xsl:if>
-       </xsl:variable>
-
-       <xsl:variable name="match">
-               <xsl:variable name="match_op">
-                       <xsl:call-template name="out_match_op">
-                               <xsl:with-param name="not"   select="$not"/>
-                               <xsl:with-param name="uri"   select="$uri"/>
-                               <xsl:with-param name="c-tag" select="$c-tag"/>
-                       </xsl:call-template>
-               </xsl:variable>
-
-               <xsl:variable name="match_child">
-                       <xsl:if test="$cook = 'false' or $not = 'true'">
-                               <xsl:choose>
-                                       <!-- if the operator has been concatenated with not, the root apply node must have only two child -->
-                                       <xsl:when test="$not = 'true' and $cook = 'true'"> and count(*) = 2</xsl:when>
-                                       <xsl:when test="$not = 'true' and $cook = 'false'">
-                                               <xsl:value-of select="concat(' and count(*) = 2 and count(*[2]/*) = ',$arity + $hide + 1)"/>
-                                       </xsl:when>
-                                       <xsl:otherwise>
-                                               <xsl:value-of select="concat('count(*) = ',$arity + $hide + 1)"/>
-                                       </xsl:otherwise>
-                               </xsl:choose>
-                       </xsl:if>
-               </xsl:variable>
-
-               <xsl:choose>
-                       <xsl:when test="$const = 'false'">
-                               <xsl:value-of select="concat('APPLY[',$match_op,$match_child,']')"/>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:value-of select="$match_op"/>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:variable>
-
-       <xsl:variable name="op_uri_attr">
-               <xsl:variable name="tmp_op_uri_attr">
-                       <xsl:call-template name="op_uri_attr">
-                               <xsl:with-param name="not"   select="$not"/>
-                               <xsl:with-param name="c-tag" select="$c-tag"/>
-                               <xsl:with-param name="const" select="$const"/>
-                       </xsl:call-template>
-               </xsl:variable>
-               <xsl:value-of select="substring-after(substring-before($tmp_op_uri_attr,'}'),'{')"/>
-       </xsl:variable>
-
-       <!--                     TEMPLATE                     -->
-       <xsl:call-template name="out_comment">
-               <xsl:with-param name="name" select="$name"/>
-       </xsl:call-template>
-
-       <oxsl:template match="{$match}" mode="pure">
-               <xsl:choose>
-                       <xsl:when test="$cook = 'true'">
-                               <oxsl:variable name="no_params">
-                                       <oxsl:call-template name="get_no_params">
-                                               <oxsl:with-param name="first_uri"  select="$CICURI"/>
-                                               <oxsl:with-param name="second_uri" select="{$op_uri_attr}"/>
-                                       </oxsl:call-template>
-                               </oxsl:variable>
-                               <oxsl:choose>
-                                       <oxsl:when test="{concat('count(',$apply_not,'*) = $no_params + ',$arity + $hide + 1)}">
-                                               <xsl:call-template name="out_body">
-                                                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                                                       <xsl:with-param name="m-tag" select="$m-tag"/>
-                                                       <xsl:with-param name="cook"  select="$cook"/>
-                                                       <xsl:with-param name="hide"  select="$hide"/>
-                                                       <xsl:with-param name="arity" select="$arity"/>
-                                                       <xsl:with-param name="not"   select="$not"/>
-                                                       <xsl:with-param name="const" select="$const"/>
-                                               </xsl:call-template>
-                                        </oxsl:when>
-                                        <oxsl:otherwise>
-                                               <oxsl:apply-imports/>
-                                       </oxsl:otherwise>
-                               </oxsl:choose>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:call-template name="out_body">
-                                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       <xsl:with-param name="m-tag" select="$m-tag"/>
-                                       <xsl:with-param name="cook"  select="$cook"/>
-                                       <xsl:with-param name="hide"  select="$hide"/>
-                                       <xsl:with-param name="arity" select="$arity"/>
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:call-template>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </oxsl:template>
-</xsl:template>
-
-<xsl:template name="out_template_set">
-       <xsl:param name="name"/>
-       <xsl:param name="not"  select="'false'"/>
-       <xsl:param name="cook" select="'false'"/>
-       <xsl:param name="uri"/>
-       <xsl:param name="hide" select="0"/>
-       <xsl:param name="m-tag"/>
-       <xsl:param name="c-tag"/>
-
-       <xsl:variable name="no_params_var">
-               <xsl:if test="$cook = 'true'">$no_params + </xsl:if>
-       </xsl:variable>
-
-       <xsl:variable name="match">
-               <xsl:variable name="match_op">
-                       <xsl:call-template name="out_match_op">
-                               <xsl:with-param name="not"   select="$not"/> 
-                               <xsl:with-param name="uri"   select="$uri"/> 
-                               <xsl:with-param name="c-tag" select="$c-tag"/>
-                       </xsl:call-template>
-               </xsl:variable>
-               
-                <xsl:variable name="match_child">
-                       <xsl:if test="$not = 'true'"> and count(*) = 2</xsl:if>
-                </xsl:variable>
-
-                <xsl:value-of select="concat('APPLY[',$match_op,$match_child,']')"/>
-       </xsl:variable>
-
-       <xsl:variable name="apply_not">
-               <xsl:if test="$not = 'true'">*[2]/</xsl:if>
-       </xsl:variable>
-
-       <xsl:variable name="op_uri_attr">
-               <xsl:variable name="tmp_op_uri_attr">
-                       <xsl:call-template name="op_uri_attr">
-                               <xsl:with-param name="not"   select="$not"/>
-                               <xsl:with-param name="c-tag" select="$c-tag"/>
-                       </xsl:call-template>
-               </xsl:variable>
-               <xsl:value-of select="substring-after(substring-before($tmp_op_uri_attr,'}'),'{')"/>
-       </xsl:variable>
-
-
-       <!--                     TEMPLATE                     -->
-       <xsl:call-template name="out_comment">
-               <xsl:with-param name="name" select="$name"/>
-       </xsl:call-template>
-       
-       <oxsl:template match="{$match}" mode="pure">
-               <xsl:if test="$cook = 'true'">
-                       <oxsl:variable name="no_params">
-                               <oxsl:call-template name="get_no_params">
-                                       <oxsl:with-param name="first_uri"  select="$CICURI"/>
-                                       <oxsl:with-param name="second_uri" select="{$op_uri_attr}"/>
-                               </oxsl:call-template>
-                       </oxsl:variable>
-               </xsl:if>       
-               <oxsl:choose>
-                       <xsl:for-each select="Case">
-                               <oxsl:when test="{concat('count(',$apply_not,'*) = ',$no_params_var,@arity + $hide + 1)}">
-                                       <xsl:call-template name="out_body">
-                                               <xsl:with-param name="c-tag" select="$c-tag"/>
-                                               <xsl:with-param name="m-tag" select="$m-tag"/>
-                                               <xsl:with-param name="cook"  select="$cook"/>
-                                               <xsl:with-param name="hide"  select="$hide"/>
-                                               <xsl:with-param name="arity" select="@arity"/>
-                                               <xsl:with-param name="not"   select="$not"/>
-                                       </xsl:call-template>
-                               </oxsl:when>
-                       </xsl:for-each>
-                               <oxsl:otherwise>
-                                       <oxsl:apply-imports/>
-                               </oxsl:otherwise>
-               </oxsl:choose>
-       </oxsl:template>
-</xsl:template>
-
-<xsl:template name="out_comment">
-       <xsl:param name="name"/>
-       <xsl:if test="$name">
-               <xsl:comment>
-                       <xsl:value-of select="concat(' ',$name,' ')"/>
-               </xsl:comment>
-       </xsl:if>                                                               
-</xsl:template>
-
-<!-- Returns a regular expression with matching operators -->
-<xsl:template name="out_match_op">
-       <xsl:param name="not"  select="'false'"/>
-       <xsl:param name="uri"/>
-       <xsl:param name="c-tag"/>
-       
-       <!-- application with not operator -->
-       <xsl:variable name="app_not">
-               <xsl:if test="$not = 'true'">CONST[@uri='cic:/Coq/Init/Logic/not.con'] and </xsl:if>
-       </xsl:variable>
-
-       <xsl:variable name="uris">
-               <xsl:call-template name="test_on_uris">
-                       <xsl:with-param name="uris" select="$uri"/>
-               </xsl:call-template>
-       </xsl:variable>
-
-       <xsl:variable name="app_op">
-               <xsl:if test="$not = 'true'">APPLY[</xsl:if>
-               <xsl:value-of select="concat($c-tag,'[',$uris,']')"/>
-               <xsl:if test="$not = 'true'">]</xsl:if>
-       </xsl:variable>
-
-       <xsl:value-of select="concat($app_not,$app_op)"/>
-</xsl:template>
-
-<xsl:template name="out_params">
-       <xsl:param name="params" select="1"/>
-       <xsl:param name="cook"   select="'false'"/>
-       <xsl:param name="hide"   select="0"/>
-       <xsl:param name="not"    select="'false'"/>
-       <xsl:param name="mode"   select="'noannot'"/>
-       <xsl:param name="arity"  select="0"/>
-
-       <xsl:if test="$params &lt;= $arity">
-               <xsl:variable name="param">
-                       <xsl:call-template name="param">
-                               <xsl:with-param name="id"    select="$params"/>
-                               <xsl:with-param name="not"   select="$not"/>
-                               <xsl:with-param name="cook"  select="$cook"/>
-                               <xsl:with-param name="hide"  select="$hide"/>
-                       </xsl:call-template>
-               </xsl:variable>
-
-               <oxsl:apply-templates select="{$param}" mode="{$mode}"/>
-               
-               <xsl:call-template name="out_params">
-                       <xsl:with-param name="params" select="$params + 1"/>
-                       <xsl:with-param name="cook"   select="$cook"/>
-                       <xsl:with-param name="hide"   select="$hide"/>
-                       <xsl:with-param name="not"    select="$not"/>
-                       <xsl:with-param name="mode"   select="$mode"/>
-                       <xsl:with-param name="arity"  select="$arity"/>
-               </xsl:call-template>
-       </xsl:if>
-</xsl:template>
-
-
-<xsl:template name="out_body">
-       <xsl:param name="c-tag"/>
-       <xsl:param name="cook"  select="'false'"/>
-       <xsl:param name="m-tag"/>
-       <xsl:param name="hide"  select="0"/>
-       <xsl:param name="arity" select="0"/>
-       <xsl:param name="not"   select="'false'"/>
-       <xsl:param name="const" select="'false'"/>
-
-       <xsl:choose>
-               <!--            SIMPLE TRANSFORMATIONS            -->
-               <xsl:when test="count(*) = 0">
-                       <xsl:variable name="xref">
-                                <xsl:if test="$const = 'false'">{@id}</xsl:if>
-                       </xsl:variable>
-
-                       <xsl:variable name="definitionURL">
-                               <xsl:call-template name="op_uri_attr">
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:call-template>
-                       </xsl:variable>
-
-                        <xsl:variable name="helm:xref">
-                               <xsl:call-template name="op_id_attr">
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:call-template>
-                        </xsl:variable>
-               
-                       <!--            APPLY            -->
-                       <m:apply helm:xref="{$xref}">
-                               <!--            OPERATOR            -->
-                               <xsl:element name="{concat('m:',$m-tag)}">
-                                       <xsl:attribute name="definitionURL">
-                                               <xsl:value-of select="$definitionURL"/>
-                                       </xsl:attribute>
-                                       <xsl:attribute name="helm:xref">
-                                               <xsl:value-of select="$helm:xref"/>
-                                       </xsl:attribute>
-                               </xsl:element>
-                               <!--            PARAMS            -->
-                               <xsl:call-template name="out_params">
-                                       <xsl:with-param name="cook"   select="$cook"/>
-                                       <xsl:with-param name="hide"   select="$hide"/>  
-                                       <xsl:with-param name="not"    select="$not"/>
-                                       <xsl:with-param name="arity"  select="$arity"/>
-                               </xsl:call-template>
-                       </m:apply>
-               </xsl:when>
-               <!--            COMPLEX TRANSFORMATIONS            -->
-               <xsl:otherwise>
-                       <xsl:apply-templates>
-                               <xsl:with-param name="c-tag" select="$c-tag"/>
-                               <xsl:with-param name="cook"  select="$cook"/>
-                               <xsl:with-param name="hide"  select="$hide"/>
-                               <xsl:with-param name="arity" select="$arity"/>
-                               <xsl:with-param name="not"   select="$not"/>
-                               <xsl:with-param name="const" select="$const"/>
-                       </xsl:apply-templates>
-               </xsl:otherwise>
-       </xsl:choose>
-</xsl:template>
-
-<xsl:template name="out_mvar">
-       <xsl:param name="vname"/>
-       
-       <m:ci>
-               <xsl:choose>
-                       <xsl:when test="(ancestor-or-self::*[preceding-sibling::*[(name() = 'mbvar') and (@name = $vname)]]/preceding-sibling::*[(name() = 'mbvar') and (@name = $vname)])[position() = last()]">
-                               <oxsl:value-of select="{concat('$bvar_',$vname)}"/>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:value-of select="$vname"/>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </m:ci>
-</xsl:template>
-
-
-<xsl:template name="out_choose_binder">
-       <xsl:param name="binded_params" select="''"/>
-       <xsl:param name="not"           select="'false'"/>
-       <xsl:param name="cook"          select="'false'"/>
-       <xsl:param name="hide"          select="0"/>
-       <xsl:param name="binder"/>
-       
-       <xsl:if test="$binded_params != ''">
-               <xsl:choose>
-                       <xsl:when test="contains($binded_params,'+')">
-                               <xsl:call-template name="out_choose_binder">
-                                       <xsl:with-param name="binded_params" select="substring-before($binded_params,'+')"/>
-                                       <xsl:with-param name="not"           select="$not"/>
-                                       <xsl:with-param name="cook"          select="$cook"/>
-                                       <xsl:with-param name="hide"          select="$hide"/>
-                                       <xsl:with-param name="binder"        select="$binder"/>
-                               </xsl:call-template>
-
-                               <xsl:call-template name="out_choose_binder">
-                                       <xsl:with-param name="binded_params" select="substring-after($binded_params,'+')"/>
-                                       <xsl:with-param name="not"           select="$not"/>
-                                       <xsl:with-param name="cook"          select="$cook"/>
-                                       <xsl:with-param name="hide"          select="$hide"/>
-                                       <xsl:with-param name="binder"        select="$binder"/>
-                               </xsl:call-template>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:variable name="param">
-                                       <xsl:call-template name="param">
-                                               <xsl:with-param name="id"    select="$binded_params"/>
-                                               <xsl:with-param name="not"   select="$not"/>
-                                               <xsl:with-param name="cook"  select="$cook"/>
-                                               <xsl:with-param name="hide"  select="$hide"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-
-                               <oxsl:when test="{concat('name(',$param,') = ',&quot;'LAMBDA'&quot;)}">
-                                       <oxsl:value-of select="{concat($param,$binder)}"/>
-                               </oxsl:when>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:if>
-</xsl:template>
-
-<!-- *********************************************************************** -->
-<!--                     META LANGUAGE FOR MathML                            --> 
-<!-- *********************************************************************** -->
-       
-<xsl:template match="mapp">
-       <xsl:param name="c-tag"/>
-       <xsl:param name="cook"  select="'false'"/>
-       <xsl:param name="hide"  select="0"/>
-       <xsl:param name="arity" select="0"/>
-       <xsl:param name="not"   select="'false'"/>
-       <xsl:param name="const" select="'false'"/>
-       
-       <xsl:variable name="helm:xref">
-               <xsl:choose>
-                       <xsl:when test="@xref">
-                               <xsl:call-template name="set_attribute">
-                                       <xsl:with-param name="attr"  select="@xref"/>
-                                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       <xsl:with-param name="hide"  select="$hide"/>
-                                       <xsl:with-param name="arity" select="$arity"/>
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:call-template>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:if test="$const = 'false'">{@id}</xsl:if>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:variable>
-
-       <m:apply helm:xref="{$helm:xref}">
-               <xsl:call-template name="copy_attributes">
-                       <xsl:with-param name="c-tag"  select="$c-tag"/>
-                       <xsl:with-param name="hide"   select="$hide"/>
-                       <xsl:with-param name="arity"  select="$arity"/>
-                       <xsl:with-param name="not"    select="$not"/>
-                       <xsl:with-param name="const" select="$const"/>
-                       <xsl:with-param name="ignore" select="'xref'"/>
-               </xsl:call-template>
-       
-               <xsl:apply-templates>
-                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                       <xsl:with-param name="cook"  select="$cook"/>
-                       <xsl:with-param name="hide"  select="$hide"/>
-                       <xsl:with-param name="arity" select="$arity"/>
-                       <xsl:with-param name="not"   select="$not"/>
-                       <xsl:with-param name="const" select="$const"/>
-               </xsl:apply-templates>
-       </m:apply>
-</xsl:template>
-
-
-<xsl:template match="mop">
-       <xsl:param name="c-tag"/>
-       <xsl:param name="cook"  select="'false'"/>
-       <xsl:param name="hide"  select="0"/>
-       <xsl:param name="arity" select="0"/>
-       <xsl:param name="not"   select="'false'"/>
-       <xsl:param name="const" select="'false'"/>
-
-       <!-- set definitonURL attribute -->
-       <xsl:variable name="definitionURL">
-               <xsl:choose>
-                       <xsl:when test="@definitionURL">
-                               <xsl:call-template name="set_attribute">
-                                       <xsl:with-param name="attr"  select="@definitionURL"/>
-                                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       <xsl:with-param name="hide"  select="$hide"/>
-                                       <xsl:with-param name="arity" select="$arity"/>
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:call-template>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:call-template name="op_uri_attr">
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:call-template>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:variable>
-
-       <!-- set helm:xref attribute -->
-       <xsl:variable name="helm:xref">
-               <xsl:choose>
-                       <xsl:when test="@xref">
-                               <xsl:call-template name="set_attribute">
-                                       <xsl:with-param name="attr"  select="@xref"/>
-                                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       <xsl:with-param name="hide"  select="$hide"/>
-                                       <xsl:with-param name="arity" select="$arity"/>
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:call-template>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:call-template name="op_id_attr">
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:call-template>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:variable>
-
-       <xsl:element name="{concat('m:',@tag)}">
-               <xsl:attribute name="definitionURL">
-                       <xsl:value-of select="$definitionURL"/>
-               </xsl:attribute>
-               <xsl:attribute name="helm:xref">
-                       <xsl:value-of select="$helm:xref"/>
-               </xsl:attribute>
-               
-               <xsl:call-template name="copy_attributes">
-                       <xsl:with-param name="c-tag"  select="$c-tag"/>
-                       <xsl:with-param name="hide"   select="$hide"/>
-                       <xsl:with-param name="arity"  select="$arity"/>
-                       <xsl:with-param name="not"    select="$not"/>
-                       <xsl:with-param name="const" select="$const"/>
-                       <xsl:with-param name="ignore" select="'xref + definitionURL + tag'"/>
-               </xsl:call-template>
-               
-               <xsl:apply-templates>
-                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                       <xsl:with-param name="cook"  select="$cook"/>
-                       <xsl:with-param name="hide"  select="$hide"/>
-                       <xsl:with-param name="arity" select="$arity"/>
-                       <xsl:with-param name="not"   select="$not"/>
-                       <xsl:with-param name="const" select="$const"/>
-               </xsl:apply-templates>
-       </xsl:element>
-</xsl:template>
-
-<xsl:template match="param">
-       <xsl:param name="cook" select="'false'"/>
-       <xsl:param name="hide" select="0"/>
-       <xsl:param name="not"  select="'false'"/>
-
-       <xsl:variable name="param">
-               <xsl:call-template name="param">
-                       <xsl:with-param name="id"    select="@id"/>
-                       <xsl:with-param name="not"   select="$not"/>
-                       <xsl:with-param name="cook"  select="$cook"/>
-                       <xsl:with-param name="hide"  select="$hide"/>
-               </xsl:call-template>
-       </xsl:variable>
-
-       <xsl:choose>
-               <xsl:when test="@bvar">
-                       <oxsl:choose>
-                               <oxsl:when test="{concat('name(',$param,') = ',&quot;'LAMBDA'&quot;)}">
-                                       <oxsl:apply-templates select="{concat($param,'/target')}" mode="{@mode}"/>
-                               </oxsl:when>
-                               <oxsl:otherwise>
-                                       <m:apply>
-                                               <m:csymbol>app</m:csymbol>
-                                               <oxsl:apply-templates select="{$param}" mode="{@mode}"/>
-                                               <m:ci>
-                                                       <xsl:value-of select="@bvar"/>
-                                               </m:ci>
-                                       </m:apply>
-                               </oxsl:otherwise>
-                       </oxsl:choose>
-               </xsl:when>
-               <xsl:otherwise>
-                       <oxsl:apply-templates select="{$param}" mode="{@mode}"/>
-               </xsl:otherwise>
-       </xsl:choose>
-</xsl:template>
-
-<xsl:template match="m:*">
-       <xsl:param name="c-tag"/>
-       <xsl:param name="cook"  select="'false'"/>
-       <xsl:param name="hide"  select="0"/>
-       <xsl:param name="arity" select="0"/>
-       <xsl:param name="not"   select="'false'"/>
-       <xsl:param name="const" select="'false'"/>
-       
-       <xsl:copy>
-               <xsl:call-template name="copy_attributes">
-                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                       <xsl:with-param name="hide"  select="$hide"/>
-                       <xsl:with-param name="arity" select="$arity"/>
-                       <xsl:with-param name="not"   select="$not"/>
-                       <xsl:with-param name="const" select="$const"/>
-               </xsl:call-template>
-       
-               <xsl:apply-templates>
-                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                       <xsl:with-param name="cook"  select="$cook"/>
-                       <xsl:with-param name="hide"  select="$hide"/>
-                       <xsl:with-param name="arity" select="$arity"/>
-                       <xsl:with-param name="not"   select="$not"/>
-                       <xsl:with-param name="const" select="$const"/>
-               </xsl:apply-templates>
-       </xsl:copy>
-</xsl:template>
-
-<xsl:template match="mbvar">
-       <xsl:param name="c-tag"/>
-       <xsl:param name="cook"  select="'false'"/>
-       <xsl:param name="hide"  select="0"/>
-       <xsl:param name="arity" select="0"/>
-       <xsl:param name="not"   select="'false'"/>
-       <xsl:param name="const" select="'false'"/>
-
-       <xsl:variable name="binded_params">
-               <xsl:call-template name="get_binded_params">
-                       <xsl:with-param name="var"  select="@name"/>
-                       <xsl:with-param name="node" select="following-sibling::*"/>
-               </xsl:call-template>
-       </xsl:variable>
-
-       <xsl:variable name="test">
-               <xsl:call-template name="test_on_lambda">
-                       <xsl:with-param name="binded_params" select="$binded_params"/>
-                       <xsl:with-param name="not"           select="$not"/>
-                       <xsl:with-param name="cook"          select="$cook"/>
-                       <xsl:with-param name="hide"          select="$hide"/>
-               </xsl:call-template>
-       </xsl:variable>
-
-       <xsl:variable name="binder">/target/@binder</xsl:variable>
-
-       <xsl:choose>
-               <xsl:when test="$binded_params != ''">
-                       <oxsl:variable name="{concat('bvar_',@name)}">
-                               <oxsl:choose>
-                                       <!-- one or more lambdas exist -->
-                                       <oxsl:when test="{$test}">
-                                               <xsl:choose>
-                                                       <!-- binded params > 1 (more than 1 lambda) -->
-                                                       <xsl:when test="contains($binded_params,'+')">
-                                                               <oxsl:variable name="binder">
-                                                                       <oxsl:choose>
-                                                                               <xsl:call-template name="out_choose_binder">
-                                                                                       <xsl:with-param name="binded_params" select="$binded_params"/>
-                                                                                       <xsl:with-param name="not"           select="$not"/>
-                                                                                       <xsl:with-param name="hide"          select="$hide"/>
-                                                                                       <xsl:with-param name="cook"          select="$cook"/>
-                                                                                       <xsl:with-param name="binder"        select="$binder"/>
-                                                                               </xsl:call-template>
-                                                                       </oxsl:choose>
-                                                               </oxsl:variable>
-                                                               <oxsl:call-template name="insert_subscript">
-                                                                       <oxsl:with-param name="node_value" select="$binder"/>
-                                                               </oxsl:call-template>
-                                                       </xsl:when>
-                                                       <!-- binded parms = 1 (1 lambda) -->
-                                                       <xsl:otherwise>
-                                                               <xsl:variable name="param">
-                                                                       <xsl:call-template name="param">
-                                                                               <xsl:with-param name="id"    select="$binded_params"/>
-                                                                               <xsl:with-param name="not"   select="$not"/>
-                                                                               <xsl:with-param name="cook"  select="$cook"/>
-                                                                               <xsl:with-param name="hide"  select="$hide"/>
-                                                                       </xsl:call-template>
-                                                               </xsl:variable>
-                                                       
-                                                               <oxsl:call-template name="insert_subscript">
-                                                                       <oxsl:with-param name="node_value" select="{concat($param,$binder)}"/>
-                                                               </oxsl:call-template>
-                                                       </xsl:otherwise>
-                                               </xsl:choose>
-                                       </oxsl:when>
-                                       <!-- no one lambda -->
-                                       <oxsl:otherwise>
-                                               <xsl:value-of select="@name"/>
-                                       </oxsl:otherwise>
-                               </oxsl:choose>
-                       </oxsl:variable>
-
-                       <m:bvar>
-                               <m:ci>
-                                       <oxsl:value-of select="{concat('$bvar_',@name)}"/>
-                               </m:ci>
-                               <xsl:apply-templates>
-                                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       <xsl:with-param name="cook"  select="$cook"/>
-                                       <xsl:with-param name="hide"  select="$hide"/>
-                                       <xsl:with-param name="arity" select="$arity"/>
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:apply-templates>
-                       </m:bvar>
-               </xsl:when>
-               <xsl:otherwise>
-                       <m:bvar>
-                               <m:ci>
-                                       <xsl:value-of select="@name"/>
-                               </m:ci>
-                               <xsl:apply-templates>
-                                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       <xsl:with-param name="cook"  select="$cook"/>
-                                       <xsl:with-param name="hide"  select="$hide"/>
-                                       <xsl:with-param name="arity" select="$arity"/>
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:apply-templates>
-                       </m:bvar>
-               </xsl:otherwise>
-       </xsl:choose>
-</xsl:template>
-
-<xsl:template match="mvar">
-       <xsl:call-template name="out_mvar">
-               <xsl:with-param name="vname" select="@name"/>
-       </xsl:call-template>
-</xsl:template>
-
-
-
-<!-- *********************************************************************** -->
-<!--                          AUXILIARY FUNCTIONS                            -->
-<!-- *********************************************************************** -->
-
-
-<!-- Returns a value if all uris in the list have the same c-tag  -->
-<xsl:template name="get_c_tag">
-       <xsl:param name="uri" select="''"/>
-       
-       <xsl:if test="$uri != ''">
-               <xsl:choose>
-                       <xsl:when test="contains($uri,'|')">
-                               <xsl:variable name="c-tag1">
-                                       <xsl:call-template name="get_c_tag">
-                                               <xsl:with-param name="uri" select="substring-before($uri,'|')"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-                       
-                               <xsl:variable name="c-tag2">
-                                       <xsl:call-template name="get_c_tag">
-                                               <xsl:with-param name="uri" select="substring-after($uri,'|')"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-
-                               <xsl:if test="$c-tag1 = $c-tag2">
-                                       <xsl:value-of select="$c-tag1"/>
-                               </xsl:if>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:choose>
-                                       <xsl:when test="substring($uri,string-length($uri)-3) = '.con'">CONST</xsl:when>
-                                       <xsl:when test="substring($uri,string-length($uri)-3) = '.ind'">MUTIND</xsl:when>
-                               </xsl:choose>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:if>
-</xsl:template>
-
-<!-- Creates a list selecting uris according to c-tag specified -->
-<xsl:template name="select_uris">
-       <xsl:param name="uris" select="''"/>
-       <xsl:param name="c-tag"/>
-
-       <xsl:if test="$uris != ''">
-               <xsl:choose>
-                       <xsl:when test="contains($uris,'|')">
-                               <xsl:variable name="list1">
-                                       <xsl:call-template name="select_uris">
-                                               <xsl:with-param name="uris"  select="substring-before($uris,'|')"/>
-                                               <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-
-                               <xsl:variable name="list2">
-                                       <xsl:call-template name="select_uris">
-                                               <xsl:with-param name="uris"  select="substring-after($uris,'|')"/>
-                                               <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-
-                               <xsl:choose>
-                                       <xsl:when test="$list1 != '' and $list2 != ''">
-                                               <xsl:value-of select="concat($list1,'|',$list2)"/>
-                                       </xsl:when>
-                                       <xsl:when test="$list1 != '' and $list2 = ''">
-                                               <xsl:value-of select="$list1"/>
-                                       </xsl:when>
-                                       <xsl:when test="$list1 = '' and $list2 != ''">
-                                               <xsl:value-of select="$list2"/>
-                                       </xsl:when>
-                               </xsl:choose>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:variable name="c-tag1">
-                                       <xsl:call-template name="get_c_tag">
-                                               <xsl:with-param name="uri" select="$uris"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-
-                               <xsl:if test="$c-tag1 = $c-tag">
-                                       <xsl:value-of select="$uris"/>
-                               </xsl:if>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:if>
-</xsl:template>
-
-<!-- Returns a xpath expression matching on uri attributes -->
-<xsl:template name="test_on_uris">
-       <xsl:param name="uris" select="''"/>
-
-       <xsl:if test="$uris != ''">
-               <xsl:choose>
-                       <xsl:when test="contains($uris,'|')">
-                               <xsl:variable name="expr1">
-                                       <xsl:call-template name="test_on_uris"> 
-                                               <xsl:with-param name="uris" select="substring-before($uris,'|')"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-
-                               <xsl:variable name="expr2">
-                                       <xsl:call-template name="test_on_uris"> 
-                                               <xsl:with-param name="uris" select="substring-after($uris,'|')"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-
-                               <xsl:value-of select="concat($expr1,' or ',$expr2)"/>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:value-of select="concat('@uri=',&quot;'&quot;,$uris,&quot;'&quot;)"/>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:if>
-</xsl:template>
-
-<!-- Returns a xpath expression testing on LAMBDA node existence -->
-<xsl:template name="test_on_lambda">
-       <xsl:param name="binded_params" select="''"/>
-       <xsl:param name="not"           select="'false'"/>
-       <xsl:param name="cook"          select="'false'"/>
-       <xsl:param name="hide"          select="0"/>
-       
-       <xsl:if test="$binded_params != ''">
-               <xsl:choose>
-                       <xsl:when test="contains($binded_params,'+')">
-                               <xsl:variable name="expr1">
-                                       <xsl:call-template name="test_on_lambda">
-                                               <xsl:with-param name="binded_params" select="substring-before($binded_params,'+')"/>
-                                               <xsl:with-param name="not"           select="$not"/>
-                                               <xsl:with-param name="cook"          select="$cook"/>
-                                               <xsl:with-param name="hide"          select="$hide"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-
-                               <xsl:variable name="expr2">
-                                       <xsl:call-template name="test_on_lambda">
-                                               <xsl:with-param name="binded_params" select="substring-after($binded_params,'+')"/>
-                                               <xsl:with-param name="not"           select="$not"/>
-                                               <xsl:with-param name="cook"          select="$cook"/>
-                                               <xsl:with-param name="hide"          select="$hide"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-                               
-                               <xsl:value-of select="concat($expr1,' or ',$expr2)"/>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:variable name="param">
-                                       <xsl:call-template name="param">
-                                               <xsl:with-param name="id"    select="$binded_params"/>
-                                               <xsl:with-param name="not"   select="$not"/>
-                                               <xsl:with-param name="cook"  select="$cook"/>
-                                               <xsl:with-param name="hide"  select="$hide"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-
-                               <xsl:value-of select="concat('name(',$param,') = ',&quot;'LAMBDA'&quot;)"/>                             
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:if>
-</xsl:template>
-
-<!-- Removes white spaces from uris list -->
-<xsl:template name="remove_white_spaces">
-       <xsl:param name="uri" select="''"/>
-
-       <xsl:if test="$uri != ''">
-               <xsl:choose>
-                       <xsl:when test="contains($uri,'|')">
-                               <xsl:variable name="uri1">
-                                       <xsl:call-template name="remove_white_spaces">
-                                               <xsl:with-param name="uri" select="substring-before($uri,'|')"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-
-                               <xsl:variable name="uri2">
-                                       <xsl:call-template name="remove_white_spaces">
-                                               <xsl:with-param name="uri" select="substring-after($uri,'|')"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-
-                               <xsl:value-of select="concat($uri1,'|',$uri2)"/>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:value-of select="normalize-space($uri)"/>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:if>
-</xsl:template>
-
-<!-- 
-       Returns a list of params id attributes concatenated with '+'.
-       The params'id attribute are selected according to the value of bindig variable 'var'  
- -->
-<xsl:template name="get_binded_params">
-       <xsl:param name="var"/>
-       <xsl:param name="node"/>
-
-       <xsl:if test="count($node) != 0">
-               <xsl:choose>
-                       <!-- another variable declaration with same name -->
-                       <xsl:when test="($node[1][name() = 'mbvar']) and ($node[1][@name = $var])"></xsl:when>
-                       <!-- a binded param -->
-                       <xsl:when test="($node[1][name() = 'param']) and ($node[1][@bvar = $var])">
-                               <!-- search on siblings -->
-                               <xsl:variable name="siblings_params">
-                                       <xsl:call-template name="get_binded_params">
-                                               <xsl:with-param name="var"  select="$var"/>
-                                               <xsl:with-param name="node" select="$node[position() > 1]"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-                               <xsl:choose>
-                                       <xsl:when test="$siblings_params != ''">
-                                               <xsl:value-of select="concat($node[1]/@id,'+',$siblings_params)"/>
-                                       </xsl:when>
-                                       <xsl:otherwise> 
-                                               <xsl:value-of select="$node[1]/@id"/>
-                                       </xsl:otherwise>
-                               </xsl:choose>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <!-- search on siblings -->
-                               <xsl:variable name="siblings_params">
-                                       <xsl:call-template name="get_binded_params">
-                                               <xsl:with-param name="var"  select="$var"/>
-                                               <xsl:with-param name="node" select="$node[position() > 1]"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-                               <!-- search on children -->
-                               <xsl:variable name="children_params">
-                                       <xsl:call-template name="get_binded_params">
-                                               <xsl:with-param name="var"  select="$var"/>
-                                               <xsl:with-param name="node" select="$node[1]/child::*"/>
-                                       </xsl:call-template>
-                               </xsl:variable>
-
-                               <xsl:choose>
-                                       <xsl:when test="$children_params != '' and $siblings_params != ''">
-                                               <xsl:value-of select="concat($children_params,'+',$siblings_params)"/>
-                                       </xsl:when>
-                                       <xsl:when test="$children_params != '' and $siblings_params = ''">
-                                               <xsl:value-of select="$children_params"/>
-                                       </xsl:when>
-                                       <xsl:when test="$children_params = '' and $siblings_params != ''">
-                                               <xsl:value-of select="$siblings_params"/>
-                                       </xsl:when>     
-                               </xsl:choose>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:if>
-</xsl:template>
-
-<!-- Returns a xpath string with the location of the parameter with the id specified -->
-<xsl:template name="param">
-       <xsl:param name="id"/>
-       <xsl:param name="not"   select="'false'"/>
-       <xsl:param name="cook"  select="'false'"/>
-       <xsl:param name="hide"  select="0"/>
-
-       <xsl:variable name="apply_not">
-               <xsl:if test="$not = 'true'">*[2]/</xsl:if>
-       </xsl:variable>
-
-       <xsl:variable name="no_params_var">
-               <xsl:if test="$cook = 'true'">$no_params+</xsl:if>
-       </xsl:variable>
-
-       <xsl:value-of select="concat($apply_not,'*[',$no_params_var,$id + $hide + 1,']')"/>
-</xsl:template>
-
-<!-- Returns a xpath string with the location of the operator uri attribute -->
-<xsl:template name="op_uri_attr">
-       <xsl:param name="not"   select="'false'"/>
-       <xsl:param name="c-tag"/>
-       <xsl:param name="const" select="'false'"/>
-
-       <xsl:call-template name="op_attr">
-               <xsl:with-param name="attr_type" select="'@uri'"/>
-               <xsl:with-param name="not"       select="$not"/>
-               <xsl:with-param name="c-tag"     select="$c-tag"/>
-               <xsl:with-param name="const"     select="$const"/>
-       </xsl:call-template>
-</xsl:template>
-
-<!-- Returns a xpath string with the location of the operator id attribute -->
-<xsl:template name="op_id_attr">
-       <xsl:param name="not"  select="'false'"/>
-       <xsl:param name="c-tag"/>
-       <xsl:param name="const" select="'false'"/>
-       
-       <xsl:call-template name="op_attr">
-               <xsl:with-param name="attr_type" select="'@id'"/>
-               <xsl:with-param name="not"       select="$not"/>
-               <xsl:with-param name="c-tag"     select="$c-tag"/>
-               <xsl:with-param name="const"     select="$const"/>
-       </xsl:call-template>
-</xsl:template>
-       
-
-<!-- Returns a xpath string with the location of the operator uri or id attribute -->
-<xsl:template name="op_attr">
-       <xsl:param name="attr_type"/>
-       <xsl:param name="not"  select="'false'"/>
-       <xsl:param name="c-tag"/>
-       <xsl:param name="const" select="'false'"/>
-
-       <xsl:variable name="apply">
-               <xsl:if test="$not = 'true'">APPLY/</xsl:if>
-       </xsl:variable>
-       
-       <xsl:choose>
-               <xsl:when test="$const = 'true'">
-                       <xsl:value-of select="concat('{',$attr_type,'}')"/>     
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:value-of select="concat('{',$apply,$c-tag,'/',$attr_type,'}')"/>                   
-               </xsl:otherwise>
-       </xsl:choose>
-</xsl:template>
-
-<xsl:template name="copy_attributes">
-       <xsl:param name="c-tag"/>
-       <xsl:param name="hide"   select="0"/>
-       <xsl:param name="arity"  select="0"/>
-       <xsl:param name="not"    select="'false'"/>
-       <xsl:param name="const"  select="'false'"/>
-       <xsl:param name="ignore" select="''"/>
-       
-       <xsl:variable name="test">
-               <xsl:call-template name="test_on_attributes">
-                       <xsl:with-param name="names" select="$ignore"/>
-               </xsl:call-template>
-       </xsl:variable>
-       
-       <xsl:for-each select="@*">
-               <xsl:if test="contains($test,concat('+',name(),'+')) = false()">
-                       <xsl:variable name="name">
-                               <xsl:choose>
-                                       <xsl:when test="name() = 'xref'">helm:xref</xsl:when>
-                                       <xsl:otherwise>
-                                               <xsl:value-of select="name()"/>
-                                       </xsl:otherwise>
-                               </xsl:choose>
-                       </xsl:variable>
-                       
-                       <xsl:attribute name="{$name}">
-                               <xsl:call-template name="set_attribute">
-                                       <xsl:with-param name="attr"  select="."/>
-                                       <xsl:with-param name="c-tag" select="$c-tag"/>
-                                       <xsl:with-param name="hide"  select="$hide"/>
-                                       <xsl:with-param name="arity" select="$arity"/>
-                                       <xsl:with-param name="not"   select="$not"/>
-                                       <xsl:with-param name="const" select="$const"/>
-                               </xsl:call-template>
-                       </xsl:attribute>
-               </xsl:if>
-       </xsl:for-each>
-</xsl:template>
-
-<xsl:template name="test_on_attributes">
-       <xsl:param name="names" select="''"/>
-
-       <xsl:choose>
-               <xsl:when test="contains($names,'+')">
-                       <xsl:variable name="name">
-                               <xsl:call-template name="test_on_attributes">
-                                       <xsl:with-param name="names" select="normalize-space(substring-after($names,'+'))"/>
-                               </xsl:call-template>
-                       </xsl:variable>
-
-                       <xsl:value-of select="concat('+',normalize-space(substring-before($names,'+')),$name)"/>        
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:value-of select="concat('+',normalize-space($names),'+')"/>
-               </xsl:otherwise>
-       </xsl:choose>
-</xsl:template>
-
-<xsl:template name="set_attribute">
-       <xsl:param name="attr"/>
-       <xsl:param name="c-tag"/>
-       <xsl:param name="hide"  select="0"/>
-       <xsl:param name="arity" select="0"/>
-       <xsl:param name="not"   select="'false'"/>
-       <xsl:param name="const" select="'false'"/>
-       
-       <xsl:choose>
-               <xsl:when test="$attr = '$APP-ID'">
-                       <xsl:if test="$const = 'false'">{@id}</xsl:if>
-               </xsl:when>
-               <xsl:when test="$attr = '$OP-ID' or $attr = '$OP-URI'">
-                       <xsl:variable name="attr_type">
-                               <xsl:choose>
-                                       <xsl:when test="$attr = '$OP-ID'">@id</xsl:when>
-                                       <xsl:otherwise>@uri</xsl:otherwise>
-                               </xsl:choose>
-                       </xsl:variable>
-
-                       <xsl:call-template name="op_attr">
-                               <xsl:with-param name="attr_type" select="$attr_type"/>
-                               <xsl:with-param name="not"       select="$not"/>
-                               <xsl:with-param name="c-tag"     select="$c-tag"/>
-                               <xsl:with-param name="const"     select="$const"/>
-                       </xsl:call-template>
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:value-of select="$attr"/>
-               </xsl:otherwise>
-       </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/meta_style/modeset.xsl b/helm/meta_style/modeset.xsl
deleted file mode 100644 (file)
index 9c0af40..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--******************************************************************--> 
-<!-- Basic Set Theory                                                 -->
-<!-- First draft: April 3 2000                                        -->
-<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena                 -->
-<!--******************************************************************-->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-
-<!-- ************************* LOGIC *********************************-->
-
-
-
-<xsl:template match="*" mode="set">
-    <xsl:choose>
-     <xsl:when test="name() = 'LAMBDA'">
-      <m:set>
-       <m:bvar>
-        <m:ci>
-         <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="target/@binder"/></xsl:with-param></xsl:call-template>
-        </m:ci>
-        <m:type>
-         <xsl:apply-templates select="source" mode="noannot"/>
-        </m:type>
-       </m:bvar>
-       <m:condition>
-        <xsl:apply-templates select="target" mode="noannot"/>
-       </m:condition>
-      </m:set>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:apply-templates select="." mode="noannot"/>
-     </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/meta_style/operator.dtd b/helm/meta_style/operator.dtd
deleted file mode 100644 (file)
index c764669..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-
-<!-- CIC operators description: -->
-
-<!ELEMENT OpList ((include|import)*, (OpSet|NotOpSet|Operator|NotOperator)+)>
-
-<!ELEMENT include EMPTY>
-<!ATTLIST include
-          href CDATA #REQUIRED>
-
-<!ELEMENT import EMPTY>
-<!ATTLIST import
-          href CDATA #REQUIRED>
-
-<!ELEMENT OpSet (Case,Case+)>
-<!ATTLIST OpSet
-          name  CDATA        #IMPLIED
-          cook  (true|false) "false"
-                 uri   CDATA        #REQUIRED
-          hide  NMTOKEN      "0"
-          m-tag CDATA        #IMPLIED>
-
-<!ELEMENT NotOpSet (Case,Case+)>
-<!ATTLIST NotOpSet
-          name  CDATA        #IMPLIED
-          uri   CDATA        #REQUIRED
-                 cook  (true|false) "false"
-          hide  NMTOKEN      "0"
-          m-tag CDATA        #IMPLIED>
-
-<!ELEMENT Case (mapp|mop|param|mbvar|mvar|PCDATA)*>
-<!ATTLIST Case
-          arity NMTOKEN #REQUIRED>
-
-<!ELEMENT Operator (mapp|mop|param|mbvar|mvar|PCDATA)*>
-<!ATTLIST Operator
-          name  CDATA        #IMPLIED
-          uri   CDATA        #REQUIRED
-                 cook  (true|false) "false"
-          hide  NMTOKEN      "0" 
-          arity NMTOKEN      "0" 
-          m-tag CDATA        #IMPLIED>
-
-<!ELEMENT NotOperator (mapp|mop|param|mbvar|mvar|PCDATA)*>
-<!ATTLIST NotOperator
-          name  CDATA        #IMPLIED
-          uri   CDATA        #REQUIRED
-                 cook  (true|false) "false"
-          hide  NMTOKEN      "0"
-          arity NMTOKEN      "0"
-          m-tag CDATA        #IMPLIED>
-
-<!ELEMENT mop (mop|mapp|param|PCDATA)*>
-<!ATTLIST mop
-          tag CDATA #REQUIRED>
-
-<!ELEMENT mapp (mop|mapp|param|mbvar|mvar|PCDATA)+>
-
-<!ELEMENT param EMPTY>
-<!ATTLIST param
-          id   CDATA #REQUIRED
-          bvar CDATA #IMPLIED
-          mode CDATA "noannot">
-
-<!ELEMENT mbvar (PCDATA)*>
-<!ATTLIST mbvar
-          name CDATA #REQUIRED>
-
-<!ELEMENT mvar EMPTY>
-<!ATTLIST mvar
-          name CDATA #REQUIRED>
diff --git a/helm/meta_style/positive.xsl b/helm/meta_style/positive.xsl
deleted file mode 100644 (file)
index f52b647..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--******************************************************************--> 
-<!-- Arithmetics                                                      -->
-<!-- First draft: March 20 2001, Ferruccio Guidi                      -->
-<!-- Zarith: July 2001, Andrea Asperti                                -->
-<!--******************************************************************-->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-<!-- ************************** ARITHMETICS ****************************** -->
-
-<!-- S and O -->
-<xsl:template match="APPLY[*[position()=1 and name()='MUTCONSTRUCT' and @uri='cic:/Coq/Init/Datatypes/nat.ind' and @noConstr='2'] and count(*)=2]" mode="pure">
-   <xsl:apply-templates select="*[2]" mode="succ">
-    <xsl:with-param name="n" select="1"/>
-    <xsl:with-param name="iden" select="@id"/>
-   </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="*" mode="succ">
- <xsl:param name="n" select="0"/>
- <xsl:param name="iden" select="''"/>
- <xsl:choose>
-  <xsl:when test="name()='APPLY' and *[position()=1 and name()='MUTCONSTRUCT'
-and @uri='cic:/Coq/Init/Datatypes/nat.ind' and @noConstr='2']">
-   <xsl:apply-templates select="*[2]" mode="succ">
-    <xsl:with-param name="n" select="$n +1"/>
-    <xsl:with-param name="iden" select="$iden"/>
-   </xsl:apply-templates>
-  </xsl:when>
-  <xsl:when test="name()='MUTCONSTRUCT' and @uri='cic:/Coq/Init/Datatypes/nat.ind' and @noConstr='1'">
-   <m:cn helm:xref="{$iden}"><xsl:value-of select="$n"/></m:cn>
-  </xsl:when>
-  <xsl:otherwise>
-   <m:apply helm:xref="{$iden}">
-    <m:plus/>
-    <m:cn><xsl:value-of select="$n"/></m:cn>
-    <xsl:apply-templates select="." mode="pure"/>
-   </m:apply>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-
-<!-- **************************** Zarith ******************************** -->
-
-
-
-<xsl:template match="APPLY[*[position()=1 and name()='MUTCONSTRUCT' and @uri='cic:/Coq/ZArith/fast_integer/fast_integers/Z.ind' and @noConstr='2'] and count(*)=2]" mode="pure">
-   <xsl:apply-templates select="*[2]" mode="Zpositive">
-    <xsl:with-param name="base" select="0"/>
-    <xsl:with-param name="exp" select="1"/>
-    <xsl:with-param name="iden" select="*[2]/@id"/>
-   </xsl:apply-templates>
-</xsl:template>
-<xsl:template match="APPLY[*[position()=1 and name()='MUTCONSTRUCT' and @uri='cic:/Coq/ZArith/fast_integer/fast_integers/Z.ind' and @noConstr='3'] and count(*)=2]" mode="pure">
-   <m:apply helm:xref="{@id}">
-    <m:minus definitionURL="{*[1]/@uri}" helm:xref="{*[1]/@id}"/>
-    <xsl:apply-templates select="*[2]" mode="Zpositive">
-     <xsl:with-param name="base" select="0"/>
-     <xsl:with-param name="exp" select="1"/>
-     <xsl:with-param name="iden" select="*[2]/@id"/>
-    </xsl:apply-templates>
-   </m:apply>
-</xsl:template>
-
-<xsl:template match="MUTCONSTRUCT[@uri='cic:/Coq/ZArith/fast_integer/fast_integers/Z.ind' and @noConstr='1']" mode="pure">
-   <m:ci definitionURL="{@uri}" helm:xref="{@id}">0</m:ci>
-</xsl:template>
-
-<!-- prova di notazione per positive -->
-
-<xsl:template match="APPLY[*[position()=1 and name()='MUTCONSTRUCT' and @uri='cic:/Coq/ZArith/fast_integer/fast_integers/positive.ind']]" mode="pure">
-   <xsl:apply-templates select="." mode="Zpositive">
-    <xsl:with-param name="base" select="0"/>
-    <xsl:with-param name="exp" select="1"/>
-    <xsl:with-param name="iden" select="@id"/>
-   </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="MUTCONSTRUCT[@uri='cic:/Coq/ZArith/fast_integer/fast_integers/positive.ind' and @noConstr='3']" mode="pure">
- <m:ci definitionURL="{@uri}" helm:xref="{@id}">1</m:ci>
-</xsl:template> 
-
-<xsl:template match="*" mode="Zpositive">
- <xsl:param name="base" select="0"/>
- <xsl:param name="exp" select="1"/>
- <xsl:param name="iden" select="''"/>
- <xsl:choose>
-  <xsl:when test="name()='APPLY' and *[position()=1 and name()='MUTCONSTRUCT'
-and @uri='cic:/Coq/ZArith/fast_integer/fast_integers/positive.ind' and @noConstr='1']">
-   <xsl:apply-templates select="*[2]" mode="Zpositive">
-    <xsl:with-param name="base" select="$base + $exp"/>
-    <xsl:with-param name="exp" select="2 * $exp"/>
-    <xsl:with-param name="iden" select="$iden"/>
-   </xsl:apply-templates>
-  </xsl:when>
-  <xsl:when test="name()='APPLY' and *[position()=1 and name()='MUTCONSTRUCT' 
-and @uri='cic:/Coq/ZArith/fast_integer/fast_integers/positive.ind' and @noConstr='2']">
-   <xsl:apply-templates select="*[2]" mode="Zpositive">
-    <xsl:with-param name="base" select="$base"/>
-    <xsl:with-param name="exp" select="2 * $exp"/>
-    <xsl:with-param name="iden" select="$iden"/>
-   </xsl:apply-templates>
-  </xsl:when>
-  <xsl:when test="name()='MUTCONSTRUCT' and @uri='cic:/Coq/ZArith/fast_integer/fast_integers/positive.ind' and @noConstr='3'">
-   <m:ci helm:xref="{$iden}"><xsl:value-of select="$base + $exp"/></m:ci>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:choose>
-    <xsl:when test="$base = 0">
-     <xsl:choose>
-      <xsl:when test="$exp = 1">
-       <xsl:apply-templates select="." mode="pure"/>
-      </xsl:when>
-      <xsl:otherwise>
-       <m:apply helm:xref="{$iden}">
-        <m:times/>
-        <m:ci><xsl:value-of select="$exp"/></m:ci>
-        <xsl:apply-templates select="." mode="pure"/>
-       </m:apply>
-      </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <m:apply helm:xref="{$iden}">
-      <m:plus/>
-      <m:ci><xsl:value-of select="$base"/></m:ci>
-      <xsl:choose>
-       <xsl:when test="$exp = 1">
-        <xsl:apply-templates select="." mode="pure"/>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:apply helm:xref="{$iden}">
-         <m:times/>
-         <m:ci><xsl:value-of select="$exp"/></m:ci>
-         <xsl:apply-templates select="." mode="pure"/>
-        </m:apply>
-       </xsl:otherwise>
-      </xsl:choose>
-     </m:apply>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-
-</xsl:stylesheet>
diff --git a/helm/meta_style/reals.xml b/helm/meta_style/reals.xml
deleted file mode 100644 (file)
index b4cdf2d..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-<!DOCTYPE OpList SYSTEM "operator.dtd">
-
-<OpList xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!-- Unary Operations and power -->
-
-<Operator
- name  = "0"
- uri   = "cic:/Coq/Reals/Rdefinitions/R0.con">
-       <mop tag="cn">0</mop>
-</Operator>
-
-<Operator
- name  = "1"
- uri   = "cic:/Coq/Reals/Rdefinitions/R1.con">
-       <mop tag="cn">1</mop>
-</Operator>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rdefinitions/Ropp.con"
- arity = "1"
- m-tag = "minus"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rbasic_fun/Rabsolu.con"
- arity = "1"
- m-tag = "abs"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rfunctions/fact.con"
- arity = "1"
- m-tag = "factorial"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rbase/Rsqr.con"
- arity = "1">
-       <mapp>
-               <mop tag="power"/>
-               <param id="1"/>
-               <m:cn>2</m:cn>
-       </mapp>
-</Operator>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rdefinitions/Rinv.con"
- arity = "1">
-       <mapp>
-               <mop tag="power"/>
-               <param id="1"/>
-               <mapp>
-                       <mop tag="minus"/>
-                       <m:cn>1</m:cn>
-               </mapp>
-       </mapp>
-</Operator>
-
-<!-- Binary Operations and Relations -->
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rdefinitions/Rle.con"
- arity = "2"
- m-tag = "leq"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rdefinitions/Rlt.con"
- arity = "2"
- m-tag = "lt"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rdefinitions/Rge.con"
- arity = "2"
- m-tag = "geq"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rdefinitions/Rgt.con"
- arity = "2"
- m-tag = "gt"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rdefinitions/Rplus.con"
- arity = "2"
- m-tag = "plus"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rdefinitions/Rminus.con"
- arity = "2"
- m-tag = "minus"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rdefinitions/Rmult.con"
- arity = "2"
- m-tag = "times"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rdefinitions/Rdiv.con"
- arity = "2"
- m-tag = "divide"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rbasic_fun/Rmin.con"
- arity = "2"
- m-tag = "min"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rbasic_fun/Rmax.con"
- arity = "2"
- m-tag = "max"/>
-
-<Operator
- name  = "*****"
- uri   = "cic:/Coq/Reals/Rfunctions/pow.con"
- arity = "2"
- m-tag = "power"/>
-
-<Operator
- name  = "LIMIT"
- uri   = "cic:/Coq/Reals/Rlimit/limit1_in.con"
- arity = "4">
-       <m:apply>
-               <m:eq/>
-               <mapp>
-                       <mop tag="limit"/>
-                       <mbvar name="x"/>
-                       <m:lowlimit>
-                               <param id="4"/>
-                       </m:lowlimit>
-                       <param id="1" bvar="x"/>
-               </mapp>
-               <param id="3"/>
-       </m:apply>
-</Operator>
-
-<Operator
- name  = "DIFFERENTIATION"
- uri   = "cic:/Coq/Reals/Rderiv/D_in.con"
- arity = "3">
-       <m:apply>
-               <m:eq/>
-               <mapp>
-                       <mop tag="diff"/>
-                       <mbvar name="x"/>
-                       <param id="1" bvar="x"/>
-               </mapp>
-               <param id="3"/>
-       </m:apply>
-</Operator>
-
-</OpList>
diff --git a/helm/meta_style/set.xml b/helm/meta_style/set.xml
deleted file mode 100644 (file)
index f1e888d..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-<!DOCTYPE OpList SYSTEM "operator.dtd">
-
-<OpList xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<import href="modeset.xsl"/>
-
-<Operator
- name  = "IN"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/In.con"
- cook  = "true"
- arity = "2">
-       <mapp>
-               <mop tag="in"/>
-               <param id="2"/>
-               <param id="1" mode="set"/>
-       </mapp>
-</Operator>
-
-<NotOperator
- name  = "NOT IN"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/In.con"
- cook  = "true"
- arity = "2">
-       <mapp>
-               <m:notin/>
-               <param id="2"/>
-               <param id="1" mode="set"/>
-       </mapp>
-</NotOperator>
-
-<OpSet
- name  = "EMPTY SET"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/Empty_set.ind"
- cook  = "true">
-       
-       <Case arity="0">
-               <mop tag="set" helm:xref="$APP-ID"/>
-       </Case>
-
-       <Case arity="1">
-               <mapp>
-                       <m:in definitionURL="cic:/Coq/Sets/Ensembles/Ensembles/In.con"/>
-                       <param id="1"/>
-                       <mop tag="set" helm:xref="$APP-ID"/>
-               </mapp>
-       </Case>
-</OpSet>
-
-<OpSet
- name  = "SINGLETON"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/Singleton.ind"
- cook  = "true">
-
-       <Case arity="1">
-               <mop tag="set" helm:xref="$APP-ID">
-                       <param id="1"/>
-               </mop>
-       </Case>
-
-       <Case arity="2">
-               <mapp>
-                       <m:in definitionURL="cic:/Coq/Sets/Ensembles/Ensembles/In.con"/>
-                       <param id="2"/>
-                       <m:set definitionURL="$OP-URI">
-                               <param id="1"/>
-                       </m:set>
-               </mapp>
-       </Case>
-</OpSet>
-
-<OpSet
- name  = "COUPLE"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/Couple.ind"
- cook  = "true">
-       
-       <Case arity="2">
-               <mop tag="set" helm:xref="$APP-ID">
-                       <param id="1"/>
-                       <param id="2"/>
-               </mop>
-       </Case>
-
-       <Case arity="3">
-               <mapp>
-                       <m:in definitionURL="cic:/Coq/Sets/Ensembles/Ensembles/In.con"/>
-                       <param id="3"/>
-                       <m:set definitionURL="$OP-URI">
-                               <param id="1"/>
-                               <param id="2"/>
-                       </m:set>
-               </mapp>
-       </Case>
-</OpSet>
-
-<OpSet
- name  = "TRIPLE"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/Triple.ind"
- cook  = "true">
-       <Case arity="3">
-               <mop tag="set">
-                       <param id="1"/>
-                       <param id="2"/>
-                       <param id="3"/>
-               </mop>
-       </Case>
-       <Case arity="4">
-               <mapp>
-                       <m:in definitionURL="cic:/Coq/Sets/Ensembles/Ensembles/In.con"/>
-                       <param id="4"/>
-                       <m:set definitionURL="$OP-URI">
-                               <param id="1"/>
-                               <param id="2"/>
-                               <param id="3"/>
-                       </m:set>
-               </mapp>
-       </Case>
-</OpSet>
-
-<OpSet
- name  = "INTERSECTION"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/Intersection.ind"
- cook  = "true">
-
-       <Case arity="2">
-               <mapp>
-                       <mop tag="intersect"/>
-                       <param id="1" mode="set"/>
-                       <param id="2" mode="set"/>
-               </mapp>
-       </Case>
-
-       <Case arity="3">
-               <mapp>
-                       <m:in/>
-                       <param id="3"/>
-                       <m:apply>
-                               <mop tag="intersect"/>
-                               <param id="1" mode="set"/>
-                               <param id="2" mode="set"/>
-                       </m:apply>
-               </mapp>
-       </Case>
-</OpSet>
-
-<OpSet
- name  = "UNION"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/Union.ind"
- cook  = "true">
-       
-       <Case arity="2">
-               <mapp>
-                       <mop tag="union"/>
-                       <param id="1" mode="set"/>
-                       <param id="2" mode="set"/>              
-               </mapp>
-       </Case>
-       <Case arity="3">
-               <mapp>
-                       <m:in/>
-                       <param id="3"/> 
-                       <m:apply>       
-                               <mop tag="union"/>
-                               <param id="1" mode="set"/>
-                               <param id="2" mode="set"/>
-                       </m:apply>      
-               </mapp>
-       </Case>
-</OpSet>
-
-<Operator
- name  = "INCLUDED"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/Included.con"
- cook  = "true"
- arity = "2">
-       <mapp>
-               <mop tag="subset"/>
-               <param id="1" mode="set"/>
-               <param id="2" mode="set"/>
-       </mapp>
-</Operator>
-
-<Operator
- name  = "STRICTLY INCLUDED"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/Strict_Included.con"
- cook  = "true"
- arity = "2">
-       <mapp>
-               <mop tag="prsubset"/>
-               <param id="1" mode="set"/>
-               <param id="2" mode="set"/>
-       </mapp>
-</Operator>
-
-<OpSet
- name  = "SET-DIFF"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/Setminus.con"
- cook  = "true">
-
-       <Case arity="2">
-               <mapp>
-                       <mop tag="setdiff"/>
-                       <param id="1" mode="set"/>
-                       <param id="2" mode="set"/>
-               </mapp>
-       </Case>
-
-       <Case arity="3">
-               <mapp>
-                       <m:in/>
-                       <param id="3"/> 
-                       <m:apply>
-                               <mop tag="setdiff"/>
-                               <param id="1" mode="set"/>
-                               <param id="2" mode="set"/>
-                       </m:apply>
-               </mapp>
-       </Case>
-</OpSet>
-
-<OpSet
- name  = "ADD-ELEM"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/Add.con"
- cook  = "true">
-
-       <Case arity="2">
-               <mapp>
-                       <mop tag="union"/>
-                       <param id="1" mode="set"/>
-                       <m:set>
-                               <param id="2" mode="set"/>
-                       </m:set>
-               </mapp>
-       </Case>
-
-       <Case arity="3">
-               <mapp>
-                       <m:in/>
-                       <param id="3"/>
-                       <m:apply>
-                               <mop tag="union"/>
-                               <param id="1" mode="set"/>
-                               <m:set>
-                                       <param id="2"/>
-                               </m:set>
-                       </m:apply>
-               </mapp>
-       </Case>
-</OpSet>
-
-<OpSet
- name  = "SUBTRACT-ELEM"
- uri   = "cic:/Coq/Sets/Ensembles/Ensembles/Subtract.con"
- cook  = "true">
-
-       <Case arity="2">
-               <mapp>
-                       <mop tag="setdiff"/>
-                       <param id="1" mode="set"/>
-                       <m:set>
-                               <param id="2"/>
-                       </m:set>
-               </mapp>
-       </Case>
-
-       <Case arity="3">
-               <mapp>
-                       <m:in/>
-                       <param id="3"/>
-                       <m:apply>
-                               <mop tag="setdiff"/>
-                               <param id="1" mode="set"/>
-                               <m:set>
-                                       <param id="2"/>
-                               </m:set>
-                       </m:apply>
-               </mapp>
-       </Case>
-</OpSet>
-
-<Operator
- name  = "CARD"
- uri   = "cic:/Coq/Sets/Finite_sets/Ensembles_finis/cardinal.ind"
- cook  = "true"
- arity = "2">
-       <mapp>
-               <m:eq/>
-               <m:apply>
-                       <mop tag="card"/>
-                       <param id="1" mode="set"/>
-               </m:apply>
-               <param id="2"/>
-       </mapp>
-</Operator>
-
-<Operator
- name  = "SIGMA"
- uri   = "cic:/Coq/Init/Specif/Subsets/sig.ind"
- arity = "2">
-       <m:set>
-               <mbvar name="x">
-                       <m:type>
-                               <param id="1"/>
-                       </m:type>
-               </mbvar>
-               <m:condition>
-                       <param id="2" bvar="x"/>
-               </m:condition>
-       </m:set>
-</Operator>
-
-</OpList>
diff --git a/helm/meta_style/subst.pl b/helm/meta_style/subst.pl
deleted file mode 100755 (executable)
index 27ca245..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/perl
-
-
-open(FILE, $ARGV[2]) || die("Error: cannot open \"$ARGV[2]\" for reading.\n");
-@file = <FILE>;
-close(FILE);
-
-open(FILE, ">$ARGV[2]");
-
-foreach $line (@file)
-{
-       $line =~ s/$ARGV[0]/$ARGV[1]/g; 
-       
-       print FILE "$line";
-}
-
-close(FILE);
diff --git a/helm/meta_style/xslt_index.txt b/helm/meta_style/xslt_index.txt
deleted file mode 100644 (file)
index 889ce4c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-algebra.xsl
-arith.xsl
-basic.xsl
-reals.xsl
-set.xsl
-positive.xsl
-modeset.xsl
diff --git a/helm/metadata/create/.cvsignore b/helm/metadata/create/.cvsignore
deleted file mode 100644 (file)
index 1039a2b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-output rdf
diff --git a/helm/metadata/create2/Makefile b/helm/metadata/create2/Makefile
deleted file mode 100644 (file)
index b1ce8e1..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-all:
-       @echo Available targets:
-       @echo "   forward, backward, compress, clean-forward, clean-backward"
-
-forward:
-       time for i in `cat pluto` ; do mk_forward/mk_forward.opt $$i ; done > log 2>&1
-       (cd forward ; ../mkindex.sh forward)
-
-backward:
-       time for i in `cat pluto` ; do touch/touch.opt $$i ; done
-       find forward -type f -exec ./invert.pl {} \;
-       find backward -type f -exec ./fix_rdf.pl {} \;
-       (cd backward ; ../mkindex.sh backward)
-
-compress:
-       find forward -name "*.xml" -exec gzip {} \;
-       find backward -name "*.xml" -exec gzip {} \;
-       (cd forward ; ../mkindex.sh forward)
-       (cd backward ; ../mkindex.sh backward)
-
-clean-forward:
-       rm -rf forward/*
-
-clean-backward:
-       rm -rf backward/*
-
-.PHONY: all forward backward compress clean-forward clean-backward
diff --git a/helm/metadata/create2/fix_rdf.pl b/helm/metadata/create2/fix_rdf.pl
deleted file mode 100755 (executable)
index 5d86c45..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/perl
-
-$filename = $uri = $ARGV[0];
-$outputfile = $filename.".xml";
-$uri =~ s/^backward/cic:/;
-$uri =~ s/(.*),([^,]*),([^,]*)/$1#xpointer(1\/$2\/$3)/;
-$uri =~ s/(.*),([^,]*)/$1#xpointer(1\/$2)/;
-
-print "Now processing file $filename\n";
-
-open(HEADER,">>$outputfile");
-print HEADER <<EOT;
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<rdf:RDF xml:lang="en" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:h="http://www.cs.unibo.it/helm/schemas/schema-h.rdf#">
-  <h:Object rdf:about="$uri">
-EOT
-close(HEADER);
-
-system("cat $filename >> $outputfile");
-
-open(FOOTER,">>$outputfile");
-print FOOTER <<EOT;
-  </h:Object>
-</rdf:RDF>
-EOT
-close(FOOTER);
-
-unlink $filename;
diff --git a/helm/metadata/create2/invert.pl b/helm/metadata/create2/invert.pl
deleted file mode 100755 (executable)
index f4a490d..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/perl
-
-my $inputfile = $ARGV[0];
-
-print "Now splitting file $inputfile\n";
-open(IN, "<$inputfile") or die "Error opening file $inputfile";
-$dummy = <IN>;  # <?xml version="1.0" encoding="ISO-8859-1"?>
-$dummy = <IN>;  #
-$dummy = <IN>;  # <rdf:RDF .../>
-$where = <IN>;  # <h:Object rdf:about="...">
-chomp($where);
-$where =~ s/^[^"]*"([^"]*)">$/$1/;
-while(($line1 = <IN>) && not ($line1 =~ /<\/h:Object>/)) {
-  $line2 = <IN>;
-  $line3 = <IN>; # </refObj>
-  $uri = $line2;
-  chomp($uri);
-  $uri =~ s/^ *<h:Occurrence rdf:about="[^"]*" rdf:value="([^"]*)"\/>$/$1/;
-  $who = $uri;
-  $who =~ s/^cic:/backward/;
-  $who =~ s/#xpointer\(1\/([^\/]*)\/([^\/]*)\)/,$1,$2/;
-  $who =~ s/#xpointer\(1\/([^\/]*)\)/,$1/;
-  $line2 =~ s/\Q$uri\E/$where/;
-   
-  open(OUT, ">>$who") or die "Error opening file $who";
-  print OUT "    <h:backPointer>\n";
-  print OUT $line2;
-  print OUT "    </h:backPointer>\n";
-  close(OUT);
-}
-close(IN);
diff --git a/helm/metadata/create2/mk_forward/.cvsignore b/helm/metadata/create2/mk_forward/.cvsignore
deleted file mode 100644 (file)
index 9aee29b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.cmx mk_forward mk_forward.opt
diff --git a/helm/metadata/create2/mk_forward/.depend b/helm/metadata/create2/mk_forward/.depend
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/metadata/create2/mk_forward/Makefile b/helm/metadata/create2/mk_forward/Makefile
deleted file mode 100644 (file)
index 3eccfbf..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-REQUIRES = helm-xml helm-cic_proof_checking
-PREDICATES = miniReduction
-OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)" -pp camlp4o
-OCAMLDEP = ocamldep
-OCAMLFIND = ocamlfind
-OCAMLC = $(OCAMLFIND) ocamlc $(OCAMLOPTIONS)
-OCAMLOPT = $(OCAMLFIND) ocamlopt $(OCAMLOPTIONS)
-
-LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-
-all: mk_forward
-opt: mk_forward.opt
-
-DEPOBJS = mk_forward.ml
-
-MKFORWARDOBJS = mk_forward.cmo
-
-depend:
-       $(OCAMLDEP) $(DEPOBJS) > .depend
-
-mk_forward: $(MKFORWARDOBJS) $(LIBRARIES)
-       $(OCAMLC) -linkpkg -o mk_forward $(MKFORWARDOBJS)
-
-mk_forward.opt: $(MKFORWARDOBJS:.cmo=.cmx) $(LIBRARIES_OPT)
-       $(OCAMLOPT) -linkpkg -o mk_forward.opt $(MKFORWARDOBJS:.cmo=.cmx)
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.mli.cmi: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.ml.cmx: $(LIBRARIES_OPT)
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o mk_forward mk_forward.opt
-
-.PHONY: clean
-
-include .depend
diff --git a/helm/metadata/create2/mk_forward/mk_forward.ml b/helm/metadata/create2/mk_forward/mk_forward.ml
deleted file mode 100644 (file)
index e97ed33..0000000
+++ /dev/null
@@ -1,385 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 03/04/2001                                 *)
-(*                                                                            *)
-(*                            Missing description                             *)
-(*                                                                            *)
-(******************************************************************************)
-
-let iteri foo =
- let counter = ref 0 in
-  List.iter (function e -> incr counter ; foo e !counter)
-;;
-
-let pathname_of_uri uristring =
- "forward" ^
-  Str.replace_first (Str.regexp "^cic:") "" uristring
-;;
-
-let make_dirs dirpath =
- ignore (Unix.system ("mkdir -p \"" ^ dirpath ^ "\""))
-;;
-
-module UriHash =
- struct
-  type classification =
-     Backbone
-   | Branch
-   | InConclusion
-   | InHypothesis
-   | InBody
-  ;;
-
-let soften_classification =
- function
-    Backbone -> InConclusion
-  | Branch -> InHypothesis
-  | InBody -> assert false
-  | k -> k
-;;
-
-  let hash = Hashtbl.create 117 ;;
-
-  let add_uri uri kind =
-   let old_kinds =
-    try
-     Hashtbl.find hash uri
-    with
-     Not_found -> []
-   in
-    let new_kinds = 
-     match kind,old_kinds with
-        InBody,[] -> [InBody]
-      | InBody,_  -> old_kinds
-      | k,_ when List.mem k old_kinds -> old_kinds
-      | k,_ -> k::old_kinds
-    in
-     Hashtbl.replace hash uri new_kinds
-  ;;
-
-  (* It also removes every element in the hash *)
-  let uris_fold foo init =
-   let xml_element_name_of_kind =
-    function
-       Backbone     -> "MainConclusion"
-     | Branch       -> "MainHypothesis"
-     | InConclusion -> "InConclusion"
-     | InHypothesis -> "InHypothesis"
-     | InBody       -> "InBody"
-   in
-    let res =
-     Hashtbl.fold
-      (fun uri kinds i ->
-        List.fold_left
-         (fun j kind ->
-           foo j uri (xml_element_name_of_kind kind)
-         ) i kinds
-      ) hash init
-    in
-     Hashtbl.clear hash ;
-     res
-  ;;
- end
-;;
-
-let output_content () =
- UriHash.uris_fold
-  (fun i uri kind ->
-    [< Xml.xml_nempty "h:refObj" []
-        (Xml.xml_empty "h:Occurrence"
-          ["rdf:about","http://www.cs.unibo.it/helm/schemas/schema-h.rdf#" ^ kind ;
-           "rdf:value",uri]
-        ) ;
-       i
-    >]
-  ) [<>]
-;;
-
-let output_file cic_string_uri rdf_string_uri =
- let module U = UriManager in
- let module X = Xml in
-  let content = output_content () in
-  let rdf_uri = U.uri_of_string rdf_string_uri in
-   make_dirs (pathname_of_uri (U.buri_of_uri rdf_uri)) ;
-   X.pp
-    [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-       X.xml_nempty "rdf:RDF"
-        ["xml:lang","en" ;
-         "xmlns:rdf","http://www.w3.org/1999/02/22-rdf-syntax-ns#";
-         "xmlns:h","http://www.cs.unibo.it/helm/schemas/schema-h.rdf#"]
-
-        (try
-          Stream.empty content ; (* raise Stream.failure if not empty *)
-          X.xml_empty "h:Object" ["rdf:about",cic_string_uri]
-         with
-          Stream.Failure ->
-           X.xml_nempty "h:Object" ["rdf:about",cic_string_uri] content
-        )
-    >]
-    (Some (pathname_of_uri rdf_string_uri ^ ".xml"))
-;;
-
-let get_obj uri =
- let cicfilename = Getter.getxml uri in
-  let res = CicParser.obj_of_xml cicfilename uri in
-   Unix.unlink cicfilename ;
-   res
-;;
-
-let add_every_constructor uri typeno kind =
- let module C = Cic in
-  match (get_obj uri) with
-      (C.InductiveDefinition (itys,_,_)) ->
-        let string_uri = UriManager.string_of_uri uri in
-        let sn = string_of_int (typeno + 1) in
-        let (_,_,_,cons) = List.nth itys typeno in
-         iteri
-          (fun (_,cty,_) m ->
-            let sm = string_of_int m in
-             UriHash.add_uri
-              (string_uri ^ "#xpointer(1/" ^ sn ^ "/" ^ sm ^ ")")
-              kind
-          ) cons
-   | _ -> assert false
-;;
-
-let process_type term =
- let module U = UriManager in
- let module H = UriHash in
- let module C = Cic in
-  let rec process_type_aux kind =
-   function
-    | C.Var uri ->
-       H.add_uri (U.string_of_uri uri) kind
-    | C.Cast (te,_) ->
-       (* type ignored *)
-       process_type_aux kind te
-    | C.Prod (_,sou,ta) ->
-       let (source_kind,target_kind) =
-        match kind with
-           H.Backbone -> (H.Branch,H.Backbone)
-         | H.Branch -> (H.InHypothesis,H.InHypothesis)
-         | H.InBody -> assert false
-         | k -> (k,k)
-       in
-        process_type_aux source_kind sou ;
-        process_type_aux target_kind ta
-    | C.Lambda (_,sou,ta) ->
-        let kind' = H.soften_classification kind in
-         process_type_aux kind' sou ;
-         process_type_aux kind' ta
-    | C.LetIn (_,te,ta)->
-       let kind' = H.soften_classification kind in
-        process_type_aux kind' te ;
-        process_type_aux kind ta
-    | C.Appl (he::tl) ->
-       let kind' = H.soften_classification kind in
-        process_type_aux kind he ;
-        List.iter (process_type_aux kind') tl
-    | C.Appl _ -> assert false
-    | C.Const (uri,_) ->
-       UriHash.add_uri (U.string_of_uri uri) kind
-    | C.MutInd (uri,_,typeno) ->
-       H.add_uri
-        (U.string_of_uri uri ^ "#xpointer(1/" ^
-          string_of_int (typeno + 1) ^ ")")
-        kind
-    | C.MutConstruct (uri,_,typeno,consno) ->
-       H.add_uri
-        (U.string_of_uri uri ^ "#xpointer(1/" ^
-          string_of_int (typeno + 1) ^ "/" ^ string_of_int consno ^ ")")
-        kind
-    | C.MutCase (uri,_,typeno,_,term,patterns) ->
-       (* outtype ignored *)
-       let kind' = H.soften_classification kind in
-        add_every_constructor uri typeno kind' ;
-        process_type_aux kind' term ;
-        List.iter (process_type_aux kind') patterns
-    | C.Fix (_,funs) ->
-       let kind' = H.soften_classification kind in
-        List.iter
-         (function (_,_,bo,ty) ->
-           process_type_aux kind' bo ;
-           process_type_aux kind' ty ;
-         ) funs
-    | C.CoFix (_,funs) ->
-       let kind' = H.soften_classification kind in
-        List.iter
-         (function (_,bo,ty) ->
-           process_type_aux kind' bo ;
-           process_type_aux kind' ty ;
-         ) funs
-    | _ -> ()
-in
- process_type_aux H.Backbone (CicMiniReduction.letin_nf term)
-;;
-
-let process_body =
- let module U = UriManager in
- let module H = UriHash in
- let module C = Cic in
-  let rec process_body_aux =
-   function
-      C.Var uri ->
-       H.add_uri (U.string_of_uri uri) H.InBody
-    | C.Cast (te,ty) ->
-       process_body_aux te ;
-       process_body_aux ty
-    | C.Prod (_,sou,ta) ->
-       process_body_aux sou ;
-       process_body_aux ta
-    | C.Lambda (_,sou,ta) ->
-       process_body_aux sou ;
-       process_body_aux ta
-    | C.LetIn (_,te,ta)->
-       process_body_aux te ;
-       process_body_aux ta
-    | C.Appl l ->
-       List.iter process_body_aux l
-    | C.Const (uri,_) ->
-       UriHash.add_uri (U.string_of_uri uri) H.InBody
-    | C.MutInd (uri,_,typeno) ->
-       H.add_uri
-        (U.string_of_uri uri ^ "#xpointer(1/" ^
-          string_of_int (typeno + 1) ^ ")")
-        H.InBody
-    | C.MutConstruct (uri,_,typeno,consno) ->
-       H.add_uri
-        (U.string_of_uri uri ^ "#xpointer(1/" ^
-          string_of_int (typeno + 1) ^ "/" ^ string_of_int consno ^ ")")
-        H.InBody
-    | C.MutCase (uri,_,typeno,outtype,term,patterns) ->
-       add_every_constructor uri typeno H.InBody ;
-       process_body_aux outtype ;
-       process_body_aux term ;
-       List.iter process_body_aux patterns
-    | C.Fix (_,funs) ->
-       List.iter
-        (function (_,_,bo,ty) ->
-          process_body_aux bo ;
-          process_body_aux ty ;
-        ) funs
-    | C.CoFix (_,funs) ->
-       List.iter
-        (function (_,bo,ty) ->
-          process_body_aux bo ;
-          process_body_aux ty ;
-        ) funs
-    | _ -> ()
-in
- process_body_aux
-;;
-
-let process_obj string_uri =
- let module U = UriManager in
- let module C = Cic in
-  function
-     (C.Definition (_,bo,ty,_)) ->
-       process_type ty ;
-       process_body bo ;
-       output_file string_uri string_uri
-   | (C.Axiom (_,ty,_)) ->
-       process_type ty ;
-       output_file string_uri string_uri
-   | (C.Variable (_,bo,ty)) ->
-       process_type ty ;
-       begin
-        match bo with
-           (Some bo') -> process_body bo'
-         | _ -> ()
-       end ;
-       output_file string_uri string_uri
-   | (C.InductiveDefinition _) as id ->
-       begin
-        let id' =
-         CicSubstitution.undebrujin_inductive_def
-          (U.uri_of_string string_uri) id
-        in
-         match id' with
-            (C.InductiveDefinition (itys,_,_)) -> 
-              iteri
-               (fun (_,_,ty,cons) n ->
-                 let sn = string_of_int n in
-                  process_type ty ;
-                  output_file
-                   (string_uri ^ "#xpointer(1/" ^ sn ^ ")")
-                   (string_uri ^ "," ^ sn) ;
-                  iteri
-                   (fun (_,cty,_) m ->
-                     let sm = string_of_int m in
-                      process_type cty ;
-                      output_file
-                       (string_uri ^ "#xpointer(1/" ^ sn ^ "/" ^ sm ^ ")")
-                       (string_uri ^ "," ^ sn ^ "," ^ sm)
-                   ) cons
-               ) itys
-          | _ -> assert false
-       end
-   | (C.CurrentProof _) -> assert false
-;;
-
-let mk_forward string_uri =
- let module U = UriManager in
-  print_endline ("Now computing metadata of " ^ string_uri) ;
-  flush stdout ;
-  let uri = U.uri_of_string string_uri in
-  let obj = get_obj uri in
-   process_obj string_uri obj
-;;
-
-let _ =
- let usage_msg = "usage: mk_forward[.opt] URI" in
- let uri = ref "" in
-  Arg.parse []
-   (fun x ->
-     if x = "" then
-      begin
-       prerr_string "No URI provided.\n" ;
-       Arg.usage [] usage_msg ;
-       exit (-1)
-      end
-     else if !uri = "" then
-      uri := x
-     else
-      begin
-       prerr_string "More than two arguments provided.\n" ;
-       Arg.usage [] usage_msg ;
-       exit (-1)
-      end
-   ) usage_msg ;
-   if !uri = "" then
-    begin
-     prerr_string "No URI provided.\n" ;
-     Arg.usage [] usage_msg ;
-     exit (-1)
-    end ;
-   mk_forward !uri
-;;
diff --git a/helm/metadata/create2/mkindex.sh b/helm/metadata/create2/mkindex.sh
deleted file mode 100755 (executable)
index 3a814ba..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-echo `find . -name "*.xml"` | ../uris_of_filenames.pl $1 > rdf_index.txt
-echo `find . -name "*.xml.gz"` | ../uris_of_filenames.pl $1 -gz >> rdf_index.txt
diff --git a/helm/metadata/create2/touch/.cvsignore b/helm/metadata/create2/touch/.cvsignore
deleted file mode 100644 (file)
index 10bc8bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.cmx touch touch.opt
diff --git a/helm/metadata/create2/touch/.depend b/helm/metadata/create2/touch/.depend
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/metadata/create2/touch/Makefile b/helm/metadata/create2/touch/Makefile
deleted file mode 100644 (file)
index 636a804..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-REQUIRES = helm-getter helm-cic str
-PREDICATES =
-OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)"
-OCAMLDEP = ocamldep
-OCAMLFIND = ocamlfind
-OCAMLC = $(OCAMLFIND) ocamlc $(OCAMLOPTIONS)
-OCAMLOPT = $(OCAMLFIND) ocamlopt $(OCAMLOPTIONS)
-
-LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-
-all: touch
-opt: touch.opt
-
-DEPOBJS = touch.ml
-
-TOUCHOBJS = touch.cmo
-
-depend:
-       $(OCAMLDEP) $(DEPOBJS) > .depend
-
-touch: $(TOUCHOBJS) $(LIBRARIES)
-       $(OCAMLC) -linkpkg -o touch $(TOUCHOBJS)
-
-touch.opt: $(TOUCHOBJS:.cmo=.cmx) $(LIBRARIES_OPT)
-       $(OCAMLOPT) -linkpkg -o touch.opt $(TOUCHOBJS:.cmo=.cmx)
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.mli.cmi: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.ml.cmx: $(LIBRARIES_OPT)
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o touch touch.opt
-
-.PHONY: clean
-
-include .depend
diff --git a/helm/metadata/create2/touch/touch.ml b/helm/metadata/create2/touch/touch.ml
deleted file mode 100644 (file)
index 8fea03e..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 03/04/2001                                 *)
-(*                                                                            *)
-(*                            Missing description                             *)
-(*                                                                            *)
-(******************************************************************************)
-
-let iteri foo =
- let counter = ref 0 in
-  List.iter (function e -> incr counter ; foo e !counter)
-;;
-
-let pathname_of_uri uristring =
- "backward" ^
-  Str.replace_first (Str.regexp "^cic:") "" uristring
-;;
-
-let make_dirs dirpath =
- ignore (Unix.system ("mkdir -p \"" ^ dirpath ^ "\""))
-;;
-
-let touch_file rdf_string_uri =
- let module U = UriManager in
-  let rdf_uri = U.uri_of_string rdf_string_uri in
-   make_dirs (pathname_of_uri (U.buri_of_uri rdf_uri)) ;
-   ignore (
-    Unix.system
-     ("touch \"" ^ (pathname_of_uri rdf_string_uri) ^ "\"")
-   )
-;;
-
-let get_obj uri =
- let cicfilename = Getter.getxml uri in
-  let res = CicParser.obj_of_xml cicfilename uri in
-   Unix.unlink cicfilename ;
-   res
-;;
-
-let touch_obj string_uri =
- let module U = UriManager in
- let module C = Cic in
-  function
-     Some (C.InductiveDefinition (itys,_,_)) ->
-      iteri
-       (fun (_,_,_,cons) n ->
-         let sn = string_of_int n in
-          touch_file
-           (string_uri ^ "," ^ sn) ;
-          iteri
-           (fun (_,_,_) m ->
-             let sm = string_of_int m in
-              touch_file
-               (string_uri ^ "," ^ sn ^ "," ^ sm)
-           ) cons
-       ) itys
-   | Some _ -> assert false
-   | None ->
-      touch_file string_uri
-;;
-
-let touch string_uri =
- let module S = String in
- let module U = UriManager in
-  print_endline ("Now touching metadata file for " ^ string_uri) ;
-  flush stdout ;
-  let uri = U.uri_of_string string_uri in
-  let obj =
-   if S.sub string_uri (S.length string_uri - 3) 3 = "ind" then
-    Some (get_obj uri)
-   else
-    None
-  in
-   touch_obj string_uri obj
-;;
-
-let _ =
- let usage_msg = "usage: touch[.opt] URI" in
- let uri = ref "" in
-  Arg.parse []
-   (fun x ->
-     if x = "" then
-      begin
-       prerr_string "No URI provided.\n" ;
-       Arg.usage [] usage_msg ;
-       exit (-1)
-      end
-     else if !uri = "" then
-      uri := x
-     else
-      begin
-       prerr_string "More than two arguments provided.\n" ;
-       Arg.usage [] usage_msg ;
-       exit (-1)
-      end
-   ) usage_msg ;
-   if !uri = "" then
-    begin
-     prerr_string "No URI provided.\n" ;
-     Arg.usage [] usage_msg ;
-     exit (-1)
-    end ;
-   touch !uri
-;;
diff --git a/helm/metadata/create2/uris_of_filenames.pl b/helm/metadata/create2/uris_of_filenames.pl
deleted file mode 100755 (executable)
index db835bf..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/perl
-
-while(<STDIN>) {
-   chomp;
-   split / /;
-   for (@_) {
-      $GZSUFF = "";
-      if (/.gz$/)
-       { s/.gz$//; $GZSUFF = " gz" if ($ARGV[1] == "-gz"); }
-      s/\./helm:rdf:www.cs.unibo.it\/helm\/rdf\/$ARGV[0]\/\/cic:/;
-      s/\.xml//;
-      print $_.$GZSUFF."\n";
- }
-}
diff --git a/helm/metadata/create4/METADATA/Makefile b/helm/metadata/create4/METADATA/Makefile
deleted file mode 100644 (file)
index 160f0bb..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-CC = gcc
-
-meta: lex.yy.o sthandler.o
-       gcc lex.yy.o sthandler.o -o meta
-
-lex.yy.c: meta_lex.l sthandler.h
-       flex meta_lex.l 
-
-sthandler.o: sthandler.c sthandler.h
-
-lex.yy.o: lex.yy.c sthandler.h
-       gcc -c lex.yy.c 
-
-clean:
-       -rm *.o 
-       -rm lex.yy.c
-       -rm meta
diff --git a/helm/metadata/create4/METADATA/meta_lex.l b/helm/metadata/create4/METADATA/meta_lex.l
deleted file mode 100644 (file)
index 7c3d0b4..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
- /******************************************************************/
- /*  Copyright (C) 2000, HELM Team                                 */ 
- /*                                                                */
- /* This file is part of HELM, an Hypertextual, Electronic         */
- /* Library of Mathematics, developed at the Computer Science      */
- /* Department, University of Bologna, Italy.                      */
- /*                                                                */
- /* HELM 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.       */
- /*                                                                */
- /* HELM 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 HELM; if not, write to the Free Software    */
- /* Foundation, Inc., 59 Temple Place - Suite 330, Boston,         */
- /* MA  02111-1307, USA.                                           */
- /*                                                                */
- /* For details, see the HELM World-Wide-Web page,                 */
- /* http://cs.unibo.it/helm/.                                      */
- /******************************************************************/
-
- /***************************************************************/
- /*                       META_LEXAN                           */
- /*                 Automatic Metadata Extractor                */
- /*           First draft 11/12/2001, by Andrea Asperti         */
- /***************************************************************/
-
- /***************************************************************/
- /* 1. Inclusion of header files.                              */
- /***************************************************************/
-
-%{
-#include                <string.h>
-#include                <stdlib.h>
-#include                "sthandler.h"
-%}
-
- /***************************************************************/
- /* 2. Constants and Variables Definitions                      */
- /***************************************************************/
-
-%{
-#define                 NOWHERE   0
-#define                 CONST     1
-#define                 MUTIND    2
-#define                 MUTCONSTRUCT  3
-
-#define                 INBODY    0
-#define                 MAINHYP   1
-#define                 INHYP     2
-#define                 INCONCL   3
-#define                 MAINCONCL 4
-#define                 INTYPE    5
-#define                 NOTFOUND  6
-
-#define                 BEFORE    0
-#define                 HERE      1     
-#define                 AFTER     2
-
-
-int                    where = NOWHERE;
-int                     found = NOTFOUND;
-int                     position = INBODY;
-int                     first_child = BEFORE;
-int                     no_open_source =0;
-int                     tmp_n;
-char                    sep = '"';
-char                    *xpointer = "#xpointer(1/";
-char                    *uri;
-char                    *tmp;
-%}
-
- /***************************************************************/
- /* 3. Regular definitions.                                    */
- /***************************************************************/
-
-uri                     [^"]+
-digits                  [0-9]+                   
-
- /***************************************************************/
- /* 4. Rules.                                                  */
- /***************************************************************/
-
-
-
-%%
-
-"<type>"           { 
-                     position = INTYPE;
-                     first_child = BEFORE;
-                   }
-
-"<source"          {
-                    if ((position == INTYPE) ||
-                        (position == INHYP))
-                        { position = INHYP;
-                          no_open_source++;};
-                    /* printf("source %d\n", no_open_source); */
-                   }
-
-"</source>"        {
-                    if (position == INHYP)
-                     {
-                      no_open_source--;
-                      /* printf("source %d\n", no_open_source); */
-                      if (no_open_source == 0) 
-                       { position = INTYPE;
-                         first_child = BEFORE; };
-                     };
-                   }
-
-
-"<body>"           { 
-                     position = INBODY;
-                   }
-
-.|\n               {
-                   }
-
-"<APPLY"           {
-                    if (first_child == BEFORE)
-                          first_child = HERE;
-                    else if (first_child == HERE)
-                          first_child = AFTER; 
-                   } 
-
-"<LAMBDA"          |
-"<REL"             |
-"<MUTCASE"         |
-"<FIX"             |
-"<COFIX"           { 
-                    if ((first_child == BEFORE) || (first_child == HERE))
-                          first_child = AFTER;
-                   }
-
-"<CONST"           { 
-                     if (position == INTYPE) /* CONST on the spine */
-                        position = INCONCL;
-                     if (first_child == BEFORE)
-                          first_child = HERE;
-                     where = CONST;
-                   }
-
-"<MUTIND"          { 
-                     if (position == INTYPE) /* MUTIND on the spine */
-                        position = INCONCL;
-                     if (first_child == BEFORE)
-                          first_child = HERE;
-                     where = MUTIND;
-                   }
-
-"<MUTCONSTRUCT"    { 
-                     if (position == INTYPE) /* MUTCONSTRUCT on the spine */
-                        position = INCONCL;
-                     if (first_child == BEFORE)
-                          first_child = HERE;     
-                     where = MUTCONSTRUCT;
-                   }
-
-"uri=\""{uri}      {     
-                         uri=(char *)malloc((sizeof('a')*200)); 
-                         strcpy(uri,yytext);
-                         strsep(&uri,&sep);
-                         if (where == CONST)
-                             {
-                                search(uri,first_child,position); 
-                                where = NOWHERE;
-                                first_child = AFTER;
-                                free(uri); 
-                              };
-                   } 
-
-"noType=\""{digits} {
-                         if ((where == MUTIND) || (where == MUTCONSTRUCT))
-                          { strsep(&yytext,&sep);
-                            tmp=(char *)malloc((sizeof(sep)*(strlen(yytext)+1)));
-                            strcpy(tmp,yytext);
-                            tmp_n = atoi(tmp)+1;
-                            sprintf(tmp,"%d",tmp_n);
-                            strcat(uri,"#xpointer(1/"); 
-                            strcat(uri,tmp); 
-                          };
-                         if (where == MUTIND) 
-                             { 
-                               strcat(uri,")");
-                               search(uri,first_child,position); 
-                               free(uri);
-                               free(tmp);
-                               where = NOWHERE; 
-                               first_child = AFTER;};
-                   } 
-
-"noConstr=\""{digits} {
-                         if (where == MUTCONSTRUCT)
-                          { strsep(&yytext,&sep);
-                            tmp=(char *)malloc((sizeof(sep)*(strlen(yytext)+1)));
-                            strcpy(tmp,yytext);
-                            strcat(uri,"/");
-                            strcat(uri,tmp);
-                            strcat(uri,")");
-                            search(uri,first_child,position);
-                            free(uri);
-                            free(tmp);
-                            where = NOWHERE; 
-                            first_child = AFTER;};
-                   } 
-
-
-
-%%
-
- /***************************************************************/
- /* 6. Auxiliary functions.                                    */
- /***************************************************************/
-
-main(int argc, char *argv[])
-{                  
-                   init_symbol_table();
-                   yylex();
-                   printf("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n");
-                   printf("<rdf:RDF xml:lang=\"en\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:h=\"http:/www.cs.unibo.it/helm/schemas/schema-h.rdf#\">\n");
-                   printf("<h:Object rdf:about=\"");
-                   printf("%s",argv[1]);
-                   printf("\">\n");
-                   print_all();
-                   printf("</h:Object>\n");
-                   printf("</rdf:RDF>\n");
-                   } 
-
-search(uri,first_child,position)
-char               *uri;
-int                first_child;
-int                position; 
-{                  
-                   if (first_child == HERE)
-                      {
-                       if (position == INHYP)
-                          found = search_bucket(uri,MAINHYP);
-                       else if (position == INCONCL)
-                          found = search_bucket(uri,MAINCONCL);
-                       /* if (found == NOTFOUND)
-                          printf( "pos = %d, uri = %s\n", MAINCONCL, uri); */
-                       }
-                    else found = search_bucket(uri,position);
-                    /* if (found == NOTFOUND)
-                          printf( "pos = %d, uri = %s\n", position, uri); */
-                    }
-
-int yywrap() {
-               return 1;
-             }
-
-
-
-
-
-
-
diff --git a/helm/metadata/create4/METADATA/sthandler.c b/helm/metadata/create4/METADATA/sthandler.c
deleted file mode 100644 (file)
index 6eb2b0e..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-/*********************************************************************/
-/*  Copyright (C) 2000, HELM Team                                    */ 
-/*                                                                   */
-/* This file is part of HELM, an Hypertextual, Electronic            */
-/* Library of Mathematics, developed at the Computer Science         */
-/* Department, University of Bologna, Italy.                         */
-/*                                                                   */
-/* HELM 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.            */
-/*                                                                   */
-/* HELM 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 HELM; if not, write to the Free Software               */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston,            */
-/* MA  02111-1307, USA.                                              */
-/*                                                                   */
-/* For details, see the HELM World-Wide-Web page,                    */
-/* http://cs.unibo.it/helm/.                                         */
- /*********************************************************************/
-
-/****************************************************************/
-/*                       STHANDLER.C                           */
-/****************************************************************/
-/* This module supplies routines for symbol table handling.    */
-/* - init_symbol_table(): it initializes the symbol table      */
-/*                       to void.                              */
-/* - search_bucket(): it searches the symbol table for the     */
-/*                   bucket containing a given identifier, and */
-/*                   inserts it if it is not present;          */
-/****************************************************************/
-/*           First draft 11/12/2001, by Andrea Asperti          */
-/****************************************************************/
-
-/****************************************************************/
-/* 1. Inclusion of header files.                               */
-/****************************************************************/
-
-#include               <stdio.h>
-#include               <malloc.h>
-
-/****************************************************************/
-/* 2. Declarations                                              */
-/****************************************************************/
-
-
-#define         DICTSIZE                        211
-#define         HASH1                           4
-#define         HASH2                           0xf0000000
-#define         HASH3                           24
-#define         EOS                             '\0'
-
-#define                 INBODY    0
-#define                 MAINHYP   1
-#define                 INHYP     2
-#define                 INCONCL   3
-#define                 MAINCONCL 4
-#define                 INTYPE    5
-#define                 NOTFOUND  6
-
-/****************************************************************/
-/* 3. Types.                                                   */
-/****************************************************************/
-
-struct st_bucket {
-               char                    *id;
-                                               /* identifier */
-               struct st_bucket        *next_st_bucket;
-                                               /* next bucket in the list */
-                struct st_bucket       *all_next;
-                                               /* all buckets in symbol
-                                                  table are linked together */
-                int                     pos[5];
-
-                  };                              
-
-struct st_bucket    *dictionary[DICTSIZE];
-                              /* pointers to bucket lists */
-
-/****************************************************************/
-/* 4. Definitions of functions to be exported.                 */
-/****************************************************************/
-
-struct st_bucket       *all;
-
- /* The following function initializes the symbol table to NULL */
-void init_symbol_table()
-{
-       struct st_bucket        *st;
-       int                     i;
-
-       /* initialize the dictionary */
-       for (i = 0; i < DICTSIZE; i++)
-               dictionary[i] = NULL;
-        all = NULL;
-}
-
- /* The following function searches the symbol table for an identifier */
- /* and inserts it if it is not present. 
- /* The bucket associated with the given identifier */
- /* becomes the first one in its list. */
-
-search_bucket(id, where)
-       char            *id;
-                                       /* identifier */
-        int             where;
-{
-       int             dict_index;
-                                       /* value returned by the */
-                                       /* hash function */
-       struct st_bucket
-                       *prev,
-                       *curr;
-
-        struct st_bucket *st;
-
-        /* apply the hash function */
-        dict_index = hash_pjw(id);
-        /* printf( "%d\n", dict_index); */
-        
-        /* scan the bucket list indicated by the hash function */
-        prev = curr = dictionary[dict_index];
-        while ((curr != NULL) && (strcmp(id, curr->id)))
-          {
-            prev = curr;
-            curr = curr->next_st_bucket;
-          }
-       if (curr == NULL)
-          /* the identifier is not in the list */
-          {
-            allocate_bucket(&st,id,where);
-           move_bucket(st,dict_index);
-            return NOTFOUND;
-          }
-       else
-         /* printf("uno=%s\n", id);
-            printf("st=%s\n", curr->id); */
-
-          /* the identifier is already in the list */
-          {
-            /* st = curr; */
-            curr->pos[where] = 1;
-            if (where >= 1) 
-             curr->pos[0] = 0; /* it will never be set again to 1 */
-            if (prev != curr)
-              /* the identifier is not in the first position */
-              {
-                prev->next_st_bucket = curr->next_st_bucket;
-                move_bucket(curr,
-                            dict_index);
-              };
-            return where;
-          }
-}
-
-print_all()
-{
-        int i;
-        struct st_bucket *curr;
-        curr = all;
-
-        while (curr != NULL)
-         {
-            for (i = 0; i < 5; ++i)
-             if (curr->pos[i] == 1)
-               print_one(curr->id,i);
-            curr = curr->all_next;
-          }
-}
-
-
-/****************************************************************/
-/* 5. Definitions of functions local to the module.            */
-/****************************************************************/
-
-print_one(uri,pos)
-     char    *uri;
-     int     pos;
-{
-    printf("<h:refObj>\n");
-    printf("<h:Occurrence rdf:about=\"http://www.cs.unibo.it/helm/schemas/schema-h.rdf#");
-    if (pos == INBODY)
-       printf("InBody");
-    else if (pos == MAINHYP)
-       printf("MainHypothesis");
-    else if (pos == INHYP)
-       printf("InHypothesis");
-    else if (pos == INCONCL)
-       printf("InConclusion");
-    else if (pos == MAINCONCL)
-       printf("MainConclusion");
-    printf("\" rdf:value=\"");
-    printf("%s", uri);
-    printf("\"/>\n");
-    printf("</h:refObj>\n");
-}
-
- /* The following function allocates a bucket for an identifier. */
-allocate_bucket(st, id, where)
-       struct st_bucket
-                        **st;
-                                       /* pointer to the bucket to be */
-                                       /* allocated */
-       char            *id;
-                                       /* identifier */
-        int             where;
-{
-        int i;
-
-       *st = (struct st_bucket *)malloc(sizeof(struct st_bucket));
-       (*st)->id = (char *)malloc(sizeof('a')*strlen(id));
-        strcpy((*st)->id,id);
-       (*st)->next_st_bucket = NULL;
-        (*st)->all_next = all;
-        all = *st;
-        for (i = 0; i < 5; ++i)
-         (*st)->pos[i] = 0;
-        (*st)->pos[where] = 1;
-}
-
- /* The following function moves a bucket to the head of the */
- /* list in which it lies. */
-move_bucket(st, dict_index)
-       struct st_bucket 
-                        *st;
-                                       /* pointer to the bucket to */
-                                       /* be moved */
-       int             dict_index;
-                                       /* index corresponding to */
-                                       /* the list in which the */
-                                       /* bucket lies */
-{
-       st->next_st_bucket = dictionary[dict_index];
-       dictionary[dict_index] = st;
-}
-
- /* The following function implements Weinberger's hash function. */
-int
-hash_pjw(id)
-       char            *id;
-                                       /* identifier to be hashed */
-{
-       unsigned        h,
-                       g;
-
-       for (h = 0; *id != EOS; id++)
-       {
-               h = (h << HASH1) + (*id);
-               if (g = h & HASH2)
-                       h = h ^ (g >> HASH3) ^ g;
-       }
-       return(h % DICTSIZE);
-}
-
-
-
-
-
diff --git a/helm/metadata/create4/METADATA/sthandler.h b/helm/metadata/create4/METADATA/sthandler.h
deleted file mode 100644 (file)
index d4e17d5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/****************************************************************/
-/*                          STHANDLER.H                        */
-/****************************************************************/
-
-            
-extern  void            init_symbol_table();
-extern  void            print_all();
-extern  int             search_bucket();
diff --git a/helm/metadata/create4/Makefile b/helm/metadata/create4/Makefile
deleted file mode 100644 (file)
index 30f0540..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-all:
-       @echo Available targets:
-       @echo "   forward, backward, compress, clean-forward, clean-backward"
-
-forward:
-       time for i in `cat pluto` ; do (cd tmp ; wget -t 1 "http://phd.cs.unibo.it:8081/getxml?format=gz&uri=$$i") ; mkdir -p forward/`dirname $$i | sed "s/cic:\///"` ; zcat tmp/`basename $$i` | METADATA/meta `basename $$i` > forward/`echo $$i | sed "s/cic:\///"` ; rm tmp/`basename $$i` ; done > log 2>&1
-       (cd forward ; ../mkindex.sh forward)
-
-backward:
-       time for i in `cat pluto` ; do touch/touch.opt $$i ; done
-       find forward -type f -exec ./invert.pl {} \;
-       find backward -type f -exec ./fix_rdf.pl {} \;
-       (cd backward ; ../mkindex.sh backward)
-
-compress:
-       find forward -name "*.xml" -exec gzip {} \;
-       find backward -name "*.xml" -exec gzip {} \;
-       (cd forward ; ../mkindex.sh forward)
-       (cd backward ; ../mkindex.sh backward)
-
-clean-forward:
-       rm -rf forward/*
-
-clean-backward:
-       rm -rf backward/*
-
-.PHONY: all forward backward compress clean-forward clean-backward
diff --git a/helm/metadata/create_V7_mowgli/.cvsignore b/helm/metadata/create_V7_mowgli/.cvsignore
deleted file mode 100644 (file)
index d6d5bf6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-backward
-forward
diff --git a/helm/metadata/create_V7_mowgli/METADATA/.cvsignore b/helm/metadata/create_V7_mowgli/METADATA/.cvsignore
deleted file mode 100644 (file)
index 1d5ca6b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-meta
-meta_ind
-lex.yy.c
-lex.yy_ind.c
diff --git a/helm/metadata/create_V7_mowgli/METADATA/Makefile b/helm/metadata/create_V7_mowgli/METADATA/Makefile
deleted file mode 100644 (file)
index cb7d5d7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-CC = gcc
-
-all: meta meta_ind
-
-meta: lex.yy.o sthandler.o
-       gcc lex.yy.o sthandler.o -o meta
-
-meta_ind: lex.yy_ind.o sthandler_ind.o
-       gcc lex.yy_ind.o sthandler_ind.o -o meta_ind
-
-lex.yy.c: meta_lex.l sthandler.h
-       flex meta_lex.l 
-
-lex.yy_ind.c: meta_lex_ind.l sthandler_ind.h
-       flex -olex.yy_ind.c meta_lex_ind.l 
-
-sthandler.o: sthandler.c sthandler.h
-
-sthandler.o: sthandler_ind.c sthandler_ind.h
-
-lex.yy.o: lex.yy.c sthandler.h
-       gcc -c lex.yy.c 
-
-lex.yy_ind.o: lex.yy_ind.c sthandler_ind.h
-       gcc -c lex.yy_ind.c 
-
-clean:
-       -rm *.o 
-       -rm lex.yy.c lex.yy_ind.c
-       -rm meta meta_ind
diff --git a/helm/metadata/create_V7_mowgli/METADATA/README b/helm/metadata/create_V7_mowgli/METADATA/README
deleted file mode 100644 (file)
index 6c9fe0b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Note:
- - LetIn e Variabili con corpo: da pensarci (capita solamente una 30ina
-   di volte... per ora!) Per il momento ci mettiamo una pezza.
- - Variabili: non consideriamo l'occorrenza di una variabile come una
-    vera occorrenza (perche' puo' essere istanziata). In ogni caso c'e'
-    l'attributo @params che fornisce questa informazione.
- - META e IMPLICIT non trattati
- - CAST non considerati ==> di default vado in ricorsione sia sul tipo
-   che sul corpo
diff --git a/helm/metadata/create_V7_mowgli/METADATA/meta_lex.l b/helm/metadata/create_V7_mowgli/METADATA/meta_lex.l
deleted file mode 100644 (file)
index eca7c38..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
- /******************************************************************/
- /*  Copyright (C) 2000, HELM Team                                 */ 
- /*                                                                */
- /* This file is part of HELM, an Hypertextual, Electronic         */
- /* Library of Mathematics, developed at the Computer Science      */
- /* Department, University of Bologna, Italy.                      */
- /*                                                                */
- /* HELM 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.       */
- /*                                                                */
- /* HELM 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 HELM; if not, write to the Free Software    */
- /* Foundation, Inc., 59 Temple Place - Suite 330, Boston,         */
- /* MA  02111-1307, USA.                                           */
- /*                                                                */
- /* For details, see the HELM World-Wide-Web page,                 */
- /* http://cs.unibo.it/helm/.                                      */
- /******************************************************************/
-
- /***************************************************************/
- /*                       META_LEXAN                           */
- /*                 Automatic Metadata Extractor                */
- /*           First draft 11/12/2001, by Andrea Asperti         */
- /*      more bugs added by domenico lordi on mon 12/17/2001    */
- /***************************************************************/
-
- /***************************************************************/
- /* 1. Inclusion of header files.                              */
- /***************************************************************/
-
-%{
-#include                <string.h>
-#include                <stdlib.h>
-#include                <sys/stat.h>
-#include                "sthandler.h"
-%}
-
- /***************************************************************/
- /* 2. Constants and Variables Definitions                      */
- /***************************************************************/
-
-%{
-#define                 NOWHERE   0
-#define                 CONST     1
-#define                 MUTIND    2
-#define                 MUTCONSTRUCT  3
-#define                 SORT      4
-
-#define                 INBODY    0
-#define                 MAINHYP   1
-#define                 INHYP     2
-#define                 INCONCL   3
-#define                 MAINCONCL 4
-#define                 INTYPE    5
-#define                 NOTFOUND  6
-
-#define                 HERE      0     
-#define                 AFTER     1
-
-
-int                    where = NOWHERE;
-int                     found = NOTFOUND;
-int                     position = INBODY;
-int                     first_child = HERE;
-int                    skip = 0;     // boolean to skip the insertion of a URI
-int                     no_open_source =0;
-int                     spine_depth = 0;
-int                     depth = 0;
-int                     tmp_n;
-char                    sep = '"';
-char                    *xpointer = "#xpointer(1/";
-char                    *uri;
-char                    *tmp;
-%}
-
- /***************************************************************/
- /* 3. Regular definitions.                                    */
- /***************************************************************/
-
-uri                     [^"]+
-digits                  [0-9]+ 
-value                   [^"]+                  
-
- /***************************************************************/
- /* 4. Rules.                                                  */
- /***************************************************************/
-
-
-%%
-
-"<Variable"[^>]*">"(" "|\n)*"<body" {
-                    position = INBODY; // Variables have both a body and a type
-                   }
-
-"</body>"(" "|\n)*"<type" {
-                    position = INTYPE; // Variables have both a body and a type
-                   }
-
-"<decl"            |
-"<def"             {
-                    if (position == INTYPE)
-                       position = MAINHYP;
-                    else if (position == MAINHYP)
-                        { position = INHYP;
-                          no_open_source++;};
-                   }
-
-"</decl>"          |
-"</def"            {
-                    if (position == INHYP)
-                     {
-                      no_open_source--;
-                      if (no_open_source == 0) 
-                        {
-                         position = MAINHYP;
-                         depth++;
-                         first_child = HERE;
-                        }
-                     }
-                    else if (position == MAINHYP)
-                      {
-                       position = INTYPE;
-                       spine_depth++;
-                       depth = 0;
-                      }
-                    first_child = HERE;
-                   }
-
-
-.|\n               {
-                   }
-
-"<LAMBDA"          |
-"<MUTCASE"         |
-"<FIX"             |
-"<COFIX"           { 
-                          first_child = AFTER;
-                   }
-
-"<REL"             {
-                    if (((position == INTYPE) | (position == MAINHYP)) &&
-                       (first_child == HERE))
-                     {
-                       if (position == INTYPE) /* REL on the spine */
-                         {
-                           position = INCONCL;
-                           search("Rel",first_child,position,spine_depth);
-                         }
-                       else search("Rel",first_child,position,depth);
-                       first_child = AFTER;
-                     }
-                   }
-
-"<SORT"(" "|\n)+"value=\""{value}   {         
-                    if (((position == INTYPE) | (position == MAINHYP)) &&
-                       (first_child == HERE))
-                     {
-                       tmp=(char *)malloc((sizeof('a')*200)); 
-                       strcpy(tmp,yytext);
-                       strsep(&tmp,&sep); 
-                       if (position == INTYPE) /* SORT on the spine */
-                         { 
-                           position = INCONCL;
-                           search(tmp,first_child,position,spine_depth);
-                         }
-                       else search(tmp,first_child,position,depth);
-                       first_child = AFTER;
-                     }
-                   }
-
-"<VAR"             {
-                     skip = 1;
-                     first_child = AFTER;
-                   }
-
-"<CONST"           { 
-                     if (position == INTYPE) /* CONST on the spine */
-                        position = INCONCL;
-                     where = CONST;
-                   }
-
-"<MUTIND"          { 
-                     if (position == INTYPE) /* MUTIND on the spine */
-                        position = INCONCL;
-                     where = MUTIND;
-                   }
-
-"<MUTCONSTRUCT"    { 
-                     if (position == INTYPE) /* MUTCONSTRUCT on the spine */
-                        position = INCONCL;
-                     where = MUTCONSTRUCT;
-                   }
-
-"uri=\""{uri}      {     
-                         if (!skip) {
-                            uri=(char *)malloc((sizeof('a')*200)); 
-                            strcpy(uri,yytext);
-                            strsep(&uri,&sep);
-                            if (where == CONST)
-                              {
-                                if (position == INCONCL)
-                                  search(uri,first_child,position,spine_depth);
-                                else search(uri,first_child,position,depth);
-                                where = NOWHERE;
-                                first_child = AFTER;
-                                free(uri); 
-                              };
-                         } else skip = 0;
-                   } 
-
-"noType=\""{digits} {
-                         if ((where == MUTIND) || (where == MUTCONSTRUCT))
-                          { strsep(&yytext,&sep);
-                            tmp=(char *)malloc((sizeof(sep)*(strlen(yytext)+1)));
-                            strcpy(tmp,yytext);
-                            tmp_n = atoi(tmp)+1;
-                            sprintf(tmp,"%d",tmp_n);
-                            strcat(uri,"#xpointer(1/"); 
-                            strcat(uri,tmp); 
-                          };
-                         if (where == MUTIND) 
-                             { 
-                               strcat(uri,")");
-                               if (position == INCONCL)
-                                  search(uri,first_child,position,spine_depth);
-                               else search(uri,first_child,position,depth);
-                               free(uri);
-                               free(tmp);
-                               where = NOWHERE; 
-                               first_child = AFTER;};
-                   } 
-
-"noConstr=\""{digits} {
-                         if (where == MUTCONSTRUCT)
-                          { strsep(&yytext,&sep);
-                            tmp=(char *)malloc((sizeof(sep)*(strlen(yytext)+1)));
-                            strcpy(tmp,yytext);
-                            strcat(uri,"/");
-                            strcat(uri,tmp);
-                            strcat(uri,")");
-                            if (position == INCONCL)
-                              search(uri,first_child,position,spine_depth);
-                            else search(uri,first_child,position,depth);
-                            free(uri);
-                            free(tmp);
-                            where = NOWHERE; 
-                            first_child = AFTER;};
-                   } 
-
-
-
-%%
-
- /***************************************************************/
- /* 6. Auxiliary functions.                                    */
- /***************************************************************/
-
-main(int argc, char *argv[])
-{                  
-                   struct stat buf;
-                   FILE *outrel, *outsort;
-
-                   init_symbol_table();
-                   if (!(outrel = fopen("forward_rel.xml","a"))) 
-                     {
-                     fprintf(stderr, "error in openinf file forward_rel.xml\n");
-                      exit(-1);
-                     }
-                   if (!(outsort = fopen("forward_sort.xml","a"))) 
-                     {
-                     fprintf(stderr, "error in openinf file forward_rel.xml\n");
-                      exit(-1);
-                     }
-                   // We process the body
-                   if (!stat("tmp/body.xml",&buf)) {
-                      yyin = fopen("tmp/body.xml", "r");
-                      position = INBODY;
-                      yylex();
-                      fclose(yyin);
-                   }
-
-                   // We process the type
-                   yyin = fopen("tmp/type.xml", "r");
-                   position = INTYPE;
-                   first_child = HERE;
-                   no_open_source = 0;
-                   spine_depth = 0;
-                   depth = 0;
-                   yylex(); 
-
-                   printf("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n");
-printf("<!DOCTYPE rdf:RDF [
-        <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-        <!ENTITY hthns 'http://www.cs.unibo.it/helm/schemas/schema-helmth#'>
-        <!ENTITY hns 'http://www.cs.unibo.it/helm/schemas/schema-helm#'>
-
-   ]>\n");
-
-                   printf("<rdf:RDF xml:lang=\"en\" xmlns:rdf=\"&rdfns;\" xmlns:h=\"&hns;\" xmlns:hth=\"&hthns;\">\n");
-                   printf("\t<h:Object rdf:about=\"");
-                   printf("%s",argv[1]);
-                   printf("\">\n");
-                   print_all(argv[1],outrel,outsort);
-                   printf("\t</h:Object>\n");
-                   printf("</rdf:RDF>\n");
-                   fclose(yyin);
-                   } 
-
-search(uri,first_child,position,depth)
-char               *uri;
-int                first_child;
-int                position; 
-{                  
-                   if (position == MAINHYP)
-                      { 
-                       if (first_child == HERE) 
-                           found = search_bucket(uri,MAINHYP,depth);
-                       else 
-                           found = search_bucket(uri,INHYP,0);
-                      }
-                   else if (position == INCONCL)
-                      { 
-                       if (first_child == HERE) 
-                           found = search_bucket(uri,MAINCONCL,depth);
-                       else
-                           found = search_bucket(uri,INCONCL,0);
-                      }
-                        
-                   else 
-                      found = search_bucket(uri,position,depth);
-                   /* if (found == NOTFOUND)
-                         fprintf(stderr,"pos = %d, uri = %s\n", position, uri); */
-} 
-/*                  
-                      (first_child == HERE) 
-                      {
-                       if (position == MAINHYP)
-                          found = search_bucket(uri,MAINHYP,depth);
-                       else if (position == INCONCL)
-                          found = search_bucket(uri,MAINCONCL,0);
-                       else if (position == INHYP)
-                          found = search_bucket(uri,INHYP,0);
-                          if (found == NOTFOUND)
-                          printf( "pos = %d, uri = %s\n", MAINCONCL, uri); 
-                       }
-                   else if ((position == MAINHYP) && (first_child == AFTER))
-                        found = search_bucket(uri,INHYP,0);
-                   else found = search_bucket(uri,position,0);
-                   if (found == NOTFOUND)
-                         printf( "pos = %d, uri = %s\n", position, uri); 
-                   } */
-
-int yywrap() {
-               return 1;
-             }
-
diff --git a/helm/metadata/create_V7_mowgli/METADATA/meta_lex_ind.l b/helm/metadata/create_V7_mowgli/METADATA/meta_lex_ind.l
deleted file mode 100644 (file)
index acf8624..0000000
+++ /dev/null
@@ -1,400 +0,0 @@
- /******************************************************************/
- /*  Copyright (C) 2000, HELM Team                                 */ 
- /*                                                                */
- /* This file is part of HELM, an Hypertextual, Electronic         */
- /* Library of Mathematics, developed at the Computer Science      */
- /* Department, University of Bologna, Italy.                      */
- /*                                                                */
- /* HELM 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.       */
- /*                                                                */
- /* HELM 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 HELM; if not, write to the Free Software    */
- /* Foundation, Inc., 59 Temple Place - Suite 330, Boston,         */
- /* MA  02111-1307, USA.                                           */
- /*                                                                */
- /* For details, see the HELM World-Wide-Web page,                 */
- /* http://cs.unibo.it/helm/.                                      */
- /******************************************************************/
-
- /***************************************************************/
- /*                       META_LEXAN                           */
- /*                 Automatic Metadata Extractor                */
- /*           First draft 11/12/2001, by Andrea Asperti         */
- /*      more bugs added by domenico lordi on mon 12/17/2001    */
- /***************************************************************/
-
- /***************************************************************/
- /* 1. Inclusion of header files.                              */
- /***************************************************************/
-
-%{
-#include                <string.h>
-#include                <stdlib.h>
-#include                <sys/stat.h>
-#include                "sthandler_ind.h"
-%}
-
- /***************************************************************/
- /* 2. Constants and Variables Definitions                      */
- /***************************************************************/
-
-%{
-#define                 NOWHERE   0
-#define                 CONST     1
-#define                 MUTIND    2
-#define                 MUTCONSTRUCT  3
-#define                 SORT      4
-
-#define                 INBODY    0
-#define                 MAINHYP   1
-#define                 INHYP     2
-#define                 INCONCL   3
-#define                 MAINCONCL 4
-#define                 INTYPE    5
-#define                 NOTFOUND  6
-
-#define                 HERE      0     
-#define                 AFTER     1
-
-
-int                    where = NOWHERE;
-int                     found = NOTFOUND;
-int                     position = INBODY;
-int                     first_child = HERE;
-int                    skip = 0;     // boolean to skip the insertion of a URI
-int                     no_open_source =0;
-int                     spine_depth = 0;
-int                     depth = 0;
-int                     tmp_n;
-int                     inductive_type = 0;
-int                     constructor = 0;
-int                     deep_type = 0;
-char                    sep = '"';
-char                    *xpointer = "#xpointer(1/";
-char                    *uri;
-char                    *tmp;
-char                    *filename;
-char                    *file_uri; 
-char                    *inductive_uri;
-char                    *filename_prefix;
-char                    *file_uri_prefix;
-%}
-
- /***************************************************************/
- /* 3. Regular definitions.                                    */
- /***************************************************************/
-
-uri                     [^"]+
-digits                  [0-9]+ 
-value                   [^"]+                  
-
- /***************************************************************/
- /* 4. Rules.                                                  */
- /***************************************************************/
-
-
-%%
-
-"<InductiveType"   { 
-                     /* fprintf(stderr,"uno"); */
-                     init_symbol_table();
-                     no_open_source = 0;
-                     depth = 0;
-                     spine_depth = 0;
-                     /* fprintf(stderr,"due"); */
-                     inductive_type++;
-                     constructor=0;
-                     position = INTYPE;
-                     first_child = HERE;
-                   }
-
-"</arity>"         { tmp = (char *)malloc(sizeof('a')*128);
-                     strcpy(filename,filename_prefix);
-                     /* fprintf(stderr,"tre"); */
-                     strcpy(file_uri,file_uri_prefix);
-                     sprintf(tmp,",%d.xml", inductive_type);
-                     /* fprintf(stderr,"quattro"); */
-                     strcat(filename,tmp);
-                     sprintf(tmp,"#xpointer(1/%d)", inductive_type);
-                     strcat(file_uri,tmp);
-                     /* fprintf(stderr,"cinque"); */
-                     free(tmp);
-                     print_file();
-                   }
-
-"<Constructor"     { init_symbol_table();
-                     no_open_source = 0;
-                     depth = 0;
-                     spine_depth = 0;
-                     constructor++;
-                     strcpy(inductive_uri,file_uri_prefix);
-                     position = INTYPE;
-                     first_child = HERE;
-                   }
-
-"</Constructor>"   { tmp = (char *)malloc(sizeof('a')*128);
-                     strcpy(filename,filename_prefix);
-                     strcpy(file_uri,file_uri_prefix);
-                     strcpy(inductive_uri,file_uri_prefix);
-                     sprintf(tmp,",%d,%d.xml", inductive_type,constructor);
-                     strcat(filename,tmp);
-                     sprintf(tmp,"#xpointer(1/%d/%d)",inductive_type,constructor);
-                     strcat(file_uri,tmp);
-                     free(tmp);
-                     print_file();
-                   }
-
-"<decl"            |
-"<def"             {
-                    if (position == INTYPE)
-                       position = MAINHYP;
-                    else if (position == MAINHYP)
-                        { position = INHYP;
-                          no_open_source++;};
-                   }
-
-"</decl>"          |
-"</def"            {
-                    if (position == INHYP)
-                     {
-                      no_open_source--;
-                      if (no_open_source == 0) 
-                        {
-                         position = MAINHYP;
-                         depth++;
-                         first_child = HERE;
-                        }
-                     }
-                    else if (position == MAINHYP)
-                      {
-                       position = INTYPE;
-                       spine_depth++;
-                       depth = 0;
-                      }
-                    first_child = HERE;
-                   }
-
-
-.|\n               {
-                   }
-
-"<LAMBDA"          |
-"<MUTCASE"         |
-"<FIX"             |
-"<COFIX"           { 
-                          first_child = AFTER;
-                   }
-
-"<REL"             {
-                    if (((position == INTYPE) | (position == MAINHYP)) &&
-                       (first_child == HERE))
-                     {
-                       if (position == INTYPE) /* REL on the spine */
-                         {
-                           position = INCONCL;
-                           search("Rel",first_child,position,spine_depth);
-                         }
-                       else search("Rel",first_child,position,depth);
-                       first_child = AFTER;
-                     }
-                   }
-
-"<SORT"(" "|\n)+"value=\""{value}   {         
-                    if (((position == INTYPE) | (position == MAINHYP)) &&
-                       (first_child == HERE))
-                     {
-                       tmp=(char *)malloc((sizeof('a')*200)); 
-                       strcpy(tmp,yytext);
-                       strsep(&tmp,&sep); 
-                       if (position == INTYPE) /* SORT on the spine */
-                         { 
-                           position = INCONCL;
-                           search(tmp,first_child,position,spine_depth);
-                         }
-                       else search(tmp,first_child,position,depth);
-                       first_child = AFTER;
-                     }
-                   }
-
-"<VAR"             {
-                     skip = 1;
-                     first_child = AFTER;
-                   }
-
-"<CONST"           { 
-                     if (position == INTYPE) /* CONST on the spine */
-                        position = INCONCL;
-                     where = CONST;
-                   }
-
-"<MUTIND"          { 
-                     if (position == INTYPE) /* MUTIND on the spine */
-                        position = INCONCL;
-                     where = MUTIND;
-                   }
-
-"<MUTCONSTRUCT"    { 
-                     if (position == INTYPE) /* MUTCONSTRUCT on the spine */
-                        position = INCONCL;
-                     where = MUTCONSTRUCT;
-                   }
-
-"uri=\""{uri}      {     
-                         if (!skip) {
-                            uri=(char *)malloc((sizeof('a')*200)); 
-                            strcpy(uri,yytext);
-                            strsep(&uri,&sep);
-                            if (where == CONST)
-                              {
-                                if (position == INCONCL)
-                                  search(uri,first_child,position,spine_depth);
-                                else search(uri,first_child,position,depth);
-                                where = NOWHERE;
-                                first_child = AFTER;
-                                free(uri); 
-                              };
-                         } else skip = 0;
-                   } 
-
-"noType=\""{digits} {
-                         if ((where == MUTIND) || (where == MUTCONSTRUCT))
-                          { strsep(&yytext,&sep);
-                            tmp=(char *)malloc((sizeof(sep)*(strlen(yytext)+1)));
-                            strcpy(tmp,yytext);
-                            tmp_n = atoi(tmp)+1;
-                            sprintf(tmp,"%d",tmp_n);
-                            strcat(uri,"#xpointer(1/"); 
-                            strcat(uri,tmp); 
-                          };
-                         if (where == MUTIND) 
-                             { 
-                               strcat(uri,")");
-                               if (position == INCONCL)
-                                  search(uri,first_child,position,spine_depth);
-                               else search(uri,first_child,position,depth);
-                               free(uri);
-                               free(tmp);
-                               where = NOWHERE; 
-                               first_child = AFTER;};
-                   } 
-
-"noConstr=\""{digits} {
-                         if (where == MUTCONSTRUCT)
-                          { strsep(&yytext,&sep);
-                            tmp=(char *)malloc((sizeof(sep)*(strlen(yytext)+1)));
-                            strcpy(tmp,yytext);
-                            strcat(uri,"/");
-                            strcat(uri,tmp);
-                            strcat(uri,")");
-                            if (position == INCONCL)
-                              search(uri,first_child,position,spine_depth);
-                            else search(uri,first_child,position,depth);
-                            free(uri);
-                            free(tmp);
-                            where = NOWHERE; 
-                            first_child = AFTER;};
-                   } 
-
-
-
-%%
-
- /***************************************************************/
- /* 6. Auxiliary functions.                                    */
- /***************************************************************/
-
-main(int argc, char *argv[])
-{
-                   filename = malloc((sizeof('a')*2000));
-                   file_uri = malloc((sizeof('a')*2000));
-                   inductive_uri = malloc((sizeof('a')*2000));
-                   filename_prefix=argv[1];
-                   file_uri_prefix=argv[2];
-                   /* fprintf(stderr,"qua"); */
-                   yyin = fopen("tmp/inductive_type.xml", "r");
-                   yylex();
-}
-
-print_file()
-{                  
-                   FILE *out, *outrel, *outsort;
-
-                   if (!(out = fopen(filename,"w"))) 
-                     {
-                     fprintf(stderr, "error in openinf file %s\n", filename);
-                      exit(-1);
-                     } 
-                   if (!(outrel = fopen("forward_rel.xml","a"))) 
-                     {
-                     fprintf(stderr, "error in openinf file forward_rel.xml\n");
-                      exit(-1);
-                     }
-                   if (!(outsort = fopen("forward_sort.xml","a"))) 
-                     {
-                     fprintf(stderr, "error in openinf file forward_rel.xml\n");
-                      exit(-1);
-                     }
-                 
-                   // We process the type
-
-                   fprintf(out,"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n");
-fprintf(out,"<!DOCTYPE rdf:RDF [
-        <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-        <!ENTITY hthns 'http://www.cs.unibo.it/helm/schemas/schema-helmth#'>
-        <!ENTITY hns 'http://www.cs.unibo.it/helm/schemas/schema-helm#'>
-
-   ]>\n");
-                   fprintf(out,"<rdf:RDF xml:lang=\"en\" xmlns:rdf=\"&rdfns;\" xmlns:h=\"&hns;\" xmlns:hth=\"&hthns;\">\n");
-                   fprintf(out,"\t<h:Object rdf:about=\"");
-                   fprintf(out,"%s",file_uri);
-                   fprintf(out,"\">\n");
-                   print_all(file_uri,out,outrel,outsort);
-                   fprintf(out,"\t</h:Object>\n");
-                   fprintf(out,"</rdf:RDF>\n");
-                   fclose(out);
-                   fclose(outrel);
-                   fclose(outsort);
-}
-
-search(uri,first_child,position,depth)
-char               *uri;
-int                first_child;
-int                position; 
-{                  
-                   if (position == MAINHYP)
-                      { 
-                       if (first_child == HERE) 
-                           found = search_bucket(uri,MAINHYP,depth);
-                       else 
-                           found = search_bucket(uri,INHYP,0);
-                      }
-                   else if (position == INCONCL)
-                      { 
-                       if (first_child == HERE) 
-                           found = search_bucket(uri,MAINCONCL,depth);
-                       else
-                           found = search_bucket(uri,INCONCL,0);
-                      }
-                        
-                   else 
-                      found = search_bucket(uri,position,depth);
-                   /* if (found == NOTFOUND)
-                         printf( "pos = %d, uri = %s\n", position, uri); */
-}
-
-
-int yywrap() {
-               return 1;
-             }
-
-
-
-
diff --git a/helm/metadata/create_V7_mowgli/METADATA/sthandler.c b/helm/metadata/create_V7_mowgli/METADATA/sthandler.c
deleted file mode 100644 (file)
index 0f32e07..0000000
+++ /dev/null
@@ -1,418 +0,0 @@
-/*********************************************************************/
-/*  Copyright (C) 2000, HELM Team                                    */ 
-/*                                                                   */
-/* This file is part of HELM, an Hypertextual, Electronic            */
-/* Library of Mathematics, developed at the Computer Science         */
-/* Department, University of Bologna, Italy.                         */
-/*                                                                   */
-/* HELM 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.            */
-/*                                                                   */
-/* HELM 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 HELM; if not, write to the Free Software               */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston,            */
-/* MA  02111-1307, USA.                                              */
-/*                                                                   */
-/* For details, see the HELM World-Wide-Web page,                    */
-/* http://cs.unibo.it/helm/.                                         */
- /*********************************************************************/
-
-/****************************************************************/
-/*                       STHANDLER.C                           */
-/****************************************************************/
-/* This module supplies routines for symbol table handling.    */
-/* - init_symbol_table(): it initializes the symbol table      */
-/*                       to void.                              */
-/* - search_bucket(): it searches the symbol table for the     */
-/*                   bucket containing a given identifier, and */
-/*                   inserts it if it is not present;          */
-/****************************************************************/
-/*           First draft 11/12/2001, by Andrea Asperti          */
-/****************************************************************/
-
-/****************************************************************/
-/* 1. Inclusion of header files.                               */
-/****************************************************************/
-
-#include               <stdio.h>
-#include               <malloc.h>
-
-/****************************************************************/
-/* 2. Declarations                                              */
-/****************************************************************/
-
-
-#define         DICTSIZE                        211
-#define         HASH1                           4
-#define         HASH2                           0xf0000000
-#define         HASH3                           24
-#define         EOS                             '\0'
-
-#define                 INBODY    0
-#define                 MAINHYP   1
-#define                 INHYP     2
-#define                 INCONCL   3
-#define                 MAINCONCL 4
-#define                 INTYPE    5
-#define                 NOTFOUND  6
-
-/****************************************************************/
-/* 3. Types.                                                   */
-/****************************************************************/
-
-struct int_list {
-               int                     val;
-                struct int_list                *next;
-                  }; 
-
-struct st_bucket {
-               char                    *id;
-                                                /* identifier */
-                int                     main_depth;
-                struct int_list                *depths;
-               struct st_bucket        *next_st_bucket;
-                                               /* next bucket in the list */
-                struct st_bucket       *all_next;
-                                               /* all buckets in symbol
-                                                  table are linked together */
-                int                     pos[5];
-
-                  };                              
-
-struct st_bucket    *dictionary[DICTSIZE];
-                              /* pointers to bucket lists */
-
-/****************************************************************/
-/* 4. Local functions.                                         */
-/****************************************************************/
-struct int_list  *add(struct int_list  *,int);
-
-/****************************************************************/
-/* 5. Definitions of functions to be exported.                 */
-/****************************************************************/
-
-struct st_bucket       *all;
-
- /* The following function initializes the symbol table to NULL */
-void init_symbol_table()
-{
-       struct st_bucket        *st;
-       int                     i;
-
-       /* initialize the dictionary */
-       for (i = 0; i < DICTSIZE; i++)
-               dictionary[i] = NULL;
-        all = NULL;
-}
-
- /* The following function searches the symbol table for an identifier */
- /* and inserts it if it is not present. 
- /* The bucket associated with the given identifier */
- /* becomes the first one in its list. */
-
-search_bucket(id, where, depth)
-       char            *id;
-                                       /* identifier */
-        int             where;
-        int             depth;
-{
-       int             dict_index;
-                                       /* value returned by the */
-                                       /* hash function */
-       struct st_bucket
-                       *prev,
-                       *curr;
-
-        struct st_bucket *st;
-
-        /* apply the hash function */
-        dict_index = hash_pjw(id); 
-        /* fprintf(stderr,"%d\n", dict_index); */
-        
-        /* scan the bucket list indicated by the hash function */
-        prev = curr = dictionary[dict_index];
-        while ((curr != NULL) && (strcmp(id, curr->id)))
-          {
-            prev = curr;
-            curr = curr->next_st_bucket;
-          }
-       if (curr == NULL)
-          /* the identifier is not in the list */
-          {
-            allocate_bucket(&st,id,where);
-            if (where == MAINCONCL)
-             st->main_depth = depth;
-            else if (where == MAINHYP)
-              st->depths = add(st->depths,depth);
-           move_bucket(st,dict_index);
-            return NOTFOUND;
-          }
-       else
-          /*
-            printf("uno=%s\n", id);
-            printf("st=%s\n", curr->id); fflush(stdout) */
-
-          /* the identifier is already in the list */
-          {
-            /* st = curr; */
-            curr->pos[where] = 1;
-            if (where >= 1) 
-             curr->pos[INBODY] = 0; /* it will never be set again to 1 */
-            if (where == MAINHYP)
-              curr->depths=add(curr->depths,depth); 
-           else if (where == MAINCONCL)
-             curr->main_depth = depth; 
-            if (prev != curr)
-              /* the identifier is not in the first position */
-              {
-                prev->next_st_bucket = curr->next_st_bucket;
-                move_bucket(curr,
-                            dict_index);
-              };
-            return where;
-          }
-}
-
-print_all(about,outrel,outsort)
-     char       *about;
-     FILE       *outrel,
-                *outsort;
-{
-
-        int i;
-        struct st_bucket *curr;
-        curr = all;
-        while (curr != NULL)
-         {
-            for (i = 0; i < 5; ++i)
-             if ((curr->pos[i]) == 1)
-               {
-                 if (i == MAINHYP)
-                   print_mainhyp(about,outrel,outsort,curr->id,curr->depths);
-                  else if (i == MAINCONCL)
-                    print_mainconcl(about,outrel,outsort,curr->id,curr->main_depth);
-                 else
-                   print_one(curr->id,i);
-               }
-            curr = curr->all_next;
-          }
-}
-
-
-/****************************************************************/
-/* 5. Definitions of functions local to the module.            */
-/****************************************************************/
-
-struct int_list  *add(l,m)
-     struct int_list    *l;
-     int               m;
-{
-       struct int_list *curr;
-        /* scan the list looking for m */
-        curr = l;
-        while ((curr != NULL) && (m != (curr->val)))
-            curr = curr->next;
-       if (curr == NULL)
-          /* m is not in the list */
-          {
-            curr = (struct int_list *)malloc(sizeof(struct int_list));
-            curr->val = m;
-           curr->next = l;
-            return curr;
-          }
-       else
-       return l;
-       
-}
-
-print_mainhyp(about,outrel,outsort,uri,l)
-     char                *about;
-     FILE                *outrel,
-                         *outsort;
-     char                *uri;
-     struct int_list     *l;
-{
-    struct int_list *curr;
-    curr = l;
-    if (!strcmp(uri,"Rel"))
-      {
-        /* scan the list */
-        while (curr != NULL)
-         {
-            fprintf(outrel,"\t<h:Object rdf:about=\"");
-            fprintf(outrel,"%s",about);
-            fprintf(outrel,"\">\n");
-           fprintf(outrel,"\t\t<h:refRel rdf:parseType=\"Resource\">");
-            fprintf(outrel,"\n\t\t\t\t<h:position rdf:resource=\"&hns;MainHypothesis\"/>");
-            fprintf(outrel,"\n\t\t\t\t<h:depth>%d</h:depth>",curr->val);
-            fprintf(outrel,"\n\t\t</h:refRel>\n");
-           fprintf(outrel,"\t</h:Object>\n");
-            curr = curr->next;
-         }
-      }
-   else if ((!strcmp(uri,"Prop")) || (!strcmp(uri,"Type")) ||
-            (!strcmp(uri,"Set")))
-      {
-        /* scan the list */
-        while (curr != NULL)
-         {
-            fprintf(outsort,"\t<h:Object rdf:about=\"");
-            fprintf(outsort,"%s",about);
-            fprintf(outsort,"\">\n");
-           fprintf(outsort,"\t\t<h:refSort rdf:parseType=\"Resource\">");
-            fprintf(outsort,"\n\t\t\t\t<h:position rdf:resource=\"&hns;MainHypothesis\"/>");
-            fprintf(outsort,"\n\t\t\t\t<h:sort rdf:resource=\"&hns;%s\"/>",uri);
-            fprintf(outsort,"\n\t\t\t\t<h:depth>%d</h:depth>",curr->val);
-            fprintf(outsort,"\n\t\t</h:refSort>\n");
-           fprintf(outsort,"\t</h:Object>\n");
-            curr = curr->next;
-         }
-      }
-    else 
-     {
-        /* scan the list */
-        while (curr != NULL)
-         {
-           printf("\t\t<h:refObj rdf:parseType=\"Resource\">");
-            printf("\n\t\t\t\t<h:position rdf:resource=\"&hns;MainHypothesis\"/>");
-            printf("\n\t\t\t\t<h:depth>%d</h:depth>",curr->val);
-            printf("\n\t\t\t\t<h:occurrence><h:Object rdf:about=\"%s\"/></h:occurrence>",uri);
-            printf("\n\t\t</h:refObj>\n");
-            curr = curr->next;
-         }
-      }
-}
-
-print_mainconcl(about,outrel,outsort,uri,depth)
-     char    *about;
-     FILE    *outrel,
-             *outsort;
-     char    *uri;
-     int     depth;
-     
-{
-    if (!strcmp(uri,"Rel"))
-      { 
-        fprintf(outrel,"\t<h:Object rdf:about=\"");
-        fprintf(outrel,"%s",about);
-        fprintf(outrel,"\">\n");
-       fprintf(outrel,"\t\t<h:refRel rdf:parseType=\"Resource\">");
-       fprintf(outrel,"\n\t\t\t\t<h:position rdf:resource=\"&hns;MainConclusion\"/>");
-       fprintf(outrel,"\n\t\t\t\t<h:depth>%d</h:depth>",depth);
-       fprintf(outrel,"\n\t\t</h:refRel>\n");
-        fprintf(outrel,"\t</h:Object>\n");
-      }
-    else if ((!strcmp(uri,"Prop")) || (!strcmp(uri,"Type")) ||
-            (!strcmp(uri,"Set")))
-      {
-        fprintf(outsort,"\t<h:Object rdf:about=\"");
-        fprintf(outsort,"%s",about);
-        fprintf(outsort,"\">\n");
-       fprintf(outsort,"\t\t<h:refSort rdf:parseType=\"Resource\">");
-       fprintf(outsort,"\n\t\t\t\t<h:position rdf:resource=\"&hns;MainConclusion\"/>");
-        fprintf(outsort,"\n\t\t\t\t<h:sort rdf:resource=\"&hns;%s\"/>",uri);
-       fprintf(outsort,"\n\t\t\t\t<h:depth>%d</h:depth>",depth);
-       fprintf(outsort,"\n\t\t</h:refSort>\n");
-        fprintf(outsort,"\t</h:Object>\n");
-      }
-    else
-      {
-       printf("\t\t<h:refObj rdf:parseType=\"Resource\">");
-       printf("\n\t\t\t\t<h:position rdf:resource=\"&hns;MainConclusion\"/>");
-       printf("\n\t\t\t\t<h:depth>%d</h:depth>",depth);
-       printf("\n\t\t\t\t<h:occurrence><h:Object rdf:about=\"%s\"/></h:occurrence>",uri);
-       printf("\n\t\t</h:refObj>\n");
-      }
-}
-
-// dome: cambiata per usare il modello con position
-print_one(uri,pos)
-     char    *uri;
-     int     pos;
-{
-    printf("\t\t<h:refObj rdf:parseType=\"Resource\">");
-    printf("\n\t\t\t\t<h:position rdf:resource=\"&hns;");
-    if (pos == INBODY)
-       printf("InBody");
-    else if (pos == MAINHYP)
-       printf("MainHypothesis");
-    else if (pos == INHYP)
-       printf("InHypothesis");
-    else if (pos == INCONCL)
-       printf("InConclusion");
-    else if (pos == MAINCONCL)
-       printf("MainConclusion");
-    printf("\"/>\n\t\t\t\t<h:occurrence><h:Object rdf:about=\"%s\"/></h:occurrence>\n\t\t</h:refObj>\n", uri);
-}
-
- /* The following function allocates a bucket for an identifier. */
-allocate_bucket(st, id, where)
-       struct st_bucket
-                        **st;
-                                       /* pointer to the bucket to be */
-                                       /* allocated */
-       char            *id;
-                                       /* identifier */
-        int             where;
-{
-        int i;
-
-       *st = (struct st_bucket *)malloc(sizeof(struct st_bucket));
-       (*st)->id = (char *)malloc(sizeof('a')*(strlen(id) + 1));
-        strcpy((*st)->id,id);
-        (*st)->main_depth = 0;
-        (*st)->depths = NULL;
-       (*st)->next_st_bucket = NULL;
-        (*st)->all_next = all;
-        all = *st;
-        for (i = 0; i < 5; ++i)
-         (*st)->pos[i] = 0;
-        (*st)->pos[where] = 1;
-}
-
- /* The following function moves a bucket to the head of the */
- /* list in which it lies. */
-move_bucket(st, dict_index)
-       struct st_bucket 
-                        *st;
-                                       /* pointer to the bucket to */
-                                       /* be moved */
-       int             dict_index;
-                                       /* index corresponding to */
-                                       /* the list in which the */
-                                       /* bucket lies */
-{
-       st->next_st_bucket = dictionary[dict_index];
-       dictionary[dict_index] = st;
-}
-
- /* The following function implements Weinberger's hash function. */
-int
-hash_pjw(id)
-       char            *id;
-                                       /* identifier to be hashed */
-{
-       unsigned        h,
-                       g;
-
-       for (h = 0; *id != EOS; id++)
-       {
-               h = (h << HASH1) + (*id);
-               if (g = h & HASH2)
-                       h = h ^ (g >> HASH3) ^ g;
-       }
-       return(h % DICTSIZE);
-}
-
-
-
-
-
-
diff --git a/helm/metadata/create_V7_mowgli/METADATA/sthandler.h b/helm/metadata/create_V7_mowgli/METADATA/sthandler.h
deleted file mode 100644 (file)
index 5a9cd71..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/****************************************************************/
-/*                          STHANDLER.H                        */
-/****************************************************************/
-
-            
-extern  void            init_symbol_table();
-extern  void            print_all(char *, FILE *, FILE *);
-extern  int             search_bucket(char *, int, int);
diff --git a/helm/metadata/create_V7_mowgli/METADATA/sthandler_ind.c b/helm/metadata/create_V7_mowgli/METADATA/sthandler_ind.c
deleted file mode 100644 (file)
index bfdc795..0000000
+++ /dev/null
@@ -1,423 +0,0 @@
-/*********************************************************************/
-/*  Copyright (C) 2000, HELM Team                                    */ 
-/*                                                                   */
-/* This file is part of HELM, an Hypertextual, Electronic            */
-/* Library of Mathematics, developed at the Computer Science         */
-/* Department, University of Bologna, Italy.                         */
-/*                                                                   */
-/* HELM 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.            */
-/*                                                                   */
-/* HELM 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 HELM; if not, write to the Free Software               */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston,            */
-/* MA  02111-1307, USA.                                              */
-/*                                                                   */
-/* For details, see the HELM World-Wide-Web page,                    */
-/* http://cs.unibo.it/helm/.                                         */
- /*********************************************************************/
-
-/****************************************************************/
-/*                       STHANDLER.C                           */
-/****************************************************************/
-/* This module supplies routines for symbol table handling.    */
-/* - init_symbol_table(): it initializes the symbol table      */
-/*                       to void.                              */
-/* - search_bucket(): it searches the symbol table for the     */
-/*                   bucket containing a given identifier, and */
-/*                   inserts it if it is not present;          */
-/****************************************************************/
-/*           First draft 11/12/2001, by Andrea Asperti          */
-/****************************************************************/
-
-/****************************************************************/
-/* 1. Inclusion of header files.                               */
-/****************************************************************/
-
-#include               <stdio.h>
-#include               <malloc.h>
-
-/****************************************************************/
-/* 2. Declarations                                              */
-/****************************************************************/
-
-
-#define         DICTSIZE                        211
-#define         HASH1                           4
-#define         HASH2                           0xf0000000
-#define         HASH3                           24
-#define         EOS                             '\0'
-
-#define                 INBODY    0
-#define                 MAINHYP   1
-#define                 INHYP     2
-#define                 INCONCL   3
-#define                 MAINCONCL 4
-#define                 INTYPE    5
-#define                 NOTFOUND  6
-
-/****************************************************************/
-/* 3. Types.                                                   */
-/****************************************************************/
-
-struct int_list {
-               int                     val;
-                struct int_list                *next;
-                  }; 
-
-struct st_bucket {
-               char                    *id;
-                                                /* identifier */
-                int                     main_depth;
-                struct int_list                *depths;
-               struct st_bucket        *next_st_bucket;
-                                               /* next bucket in the list */
-                struct st_bucket       *all_next;
-                                               /* all buckets in symbol
-                                                  table are linked together */
-                int                     pos[5];
-
-                  };                              
-
-struct st_bucket    *dictionary[DICTSIZE];
-                              /* pointers to bucket lists */
-
-/****************************************************************/
-/* 4. Local functions.                                         */
-/****************************************************************/
-struct int_list  *add(struct int_list  *,int);
-
-/****************************************************************/
-/* 5. Definitions of functions to be exported.                 */
-/****************************************************************/
-
-struct st_bucket       *all;
-
- /* The following function initializes the symbol table to NULL */
-void init_symbol_table()
-{
-       struct st_bucket        *st;
-       int                     i;
-
-       /* initialize the dictionary */
-       for (i = 0; i < DICTSIZE; i++)
-               dictionary[i] = NULL;
-        all = NULL;
-}
-
- /* The following function searches the symbol table for an identifier */
- /* and inserts it if it is not present. 
- /* The bucket associated with the given identifier */
- /* becomes the first one in its list. */
-
-search_bucket(id, where, depth)
-       char            *id;
-                                       /* identifier */
-        int             where;
-        int             depth;
-{
-       int             dict_index;
-                                       /* value returned by the */
-                                       /* hash function */
-       struct st_bucket
-                       *prev,
-                       *curr;
-
-        struct st_bucket *st;
-
-        /* apply the hash function */
-        dict_index = hash_pjw(id);
-        /* fprintf(stderr,"%d\n", dict_index); fflush(stdout); */
-        
-        /* scan the bucket list indicated by the hash function */
-        prev = curr = dictionary[dict_index];
-        while ((curr != NULL) && (strcmp(id, curr->id)))
-          {
-            prev = curr;
-            curr = curr->next_st_bucket;
-          }
-       if (curr == NULL)
-          /* the identifier is not in the list */
-          {
-            allocate_bucket(&st,id,where);
-            if (where == MAINCONCL)
-             st->main_depth = depth;
-            else if (where == MAINHYP)
-              st->depths = add(st->depths,depth);
-           move_bucket(st,dict_index);
-            return NOTFOUND;
-          }
-       else
-          /*
-            fprintf(stderr,"uno=%s\n", id);
-            fprintf(stderr,"st=%s\n", curr->id); fflush(stdout) */
-
-          /* the identifier is already in the list */
-          {
-            /* st = curr; */
-            curr->pos[where] = 1;
-            if (where >= 1) 
-             curr->pos[INBODY] = 0; /* it will never be set again to 1 */
-            if (where == MAINHYP)
-              curr->depths=add(curr->depths,depth); 
-           else if (where == MAINCONCL)
-             curr->main_depth = depth; 
-            if (prev != curr)
-              /* the identifier is not in the first position */
-              {
-                prev->next_st_bucket = curr->next_st_bucket;
-                move_bucket(curr,
-                            dict_index);
-              };
-            return where;
-          }
-}
-
-print_all(about,out,outrel,outsort)
-     char       *about;
-     FILE       *out,
-                *outrel,
-                *outsort;
-{
-
-        int i;
-        struct st_bucket *curr;
-        curr = all;
-        while (curr != NULL)
-         {
-            for (i = 0; i < 5; ++i)
-             if ((curr->pos[i]) == 1)
-               {
-                 if (i == MAINHYP)
-                   print_mainhyp(about,out,outrel,outsort,curr->id,curr->depths);
-                  else if (i == MAINCONCL)
-                    print_mainconcl(about,out,outrel,outsort,curr->id,curr->main_depth);
-                 else
-                   print_one(out,curr->id,i);
-               }
-            curr = curr->all_next;
-          }
-}
-
-
-/****************************************************************/
-/* 5. Definitions of functions local to the module.            */
-/****************************************************************/
-
-struct int_list  *add(l,m)
-     struct int_list    *l;
-     int               m;
-{
-       struct int_list *curr;
-        /* scan the list looking for m */
-        curr = l;
-        while ((curr != NULL) && (m != (curr->val)))
-            curr = curr->next;
-       if (curr == NULL)
-          /* m is not in the list */
-          {
-            curr = (struct int_list *)malloc(sizeof(struct int_list));
-            curr->val = m;
-           curr->next = l;
-            return curr;
-          }
-       else
-       return l;
-       
-}
-
-print_mainhyp(about,out,outrel,outsort,uri,l)
-     char                *about;
-     FILE                *out,
-                         *outrel,
-                         *outsort;
-     char                *uri;
-     struct int_list     *l;
-{
-    struct int_list *curr;
-    curr = l;
-    if (!strcmp(uri,"Rel"))
-      {
-        /* scan the list */
-        while (curr != NULL)
-         {
-            fprintf(outrel,"\t<h:Object rdf:about=\"");
-            fprintf(outrel,"%s",about);
-            fprintf(outrel,"\">\n");
-           fprintf(outrel,"\t\t<h:refRel rdf:parseType=\"Resource\">");
-            fprintf(outrel,"\n\t\t\t\t<h:position rdf:resource=\"&hns;MainHypothesis\"/>");
-            fprintf(outrel,"\n\t\t\t\t<h:depth>%d</h:depth>",curr->val);
-            fprintf(outrel,"\n\t\t</h:refRel>\n");
-           fprintf(outrel,"\t</h:Object>\n");
-            curr = curr->next;
-         }
-      }
-   else if ((!strcmp(uri,"Prop")) || (!strcmp(uri,"Type")) ||
-            (!strcmp(uri,"Set")))
-      {
-        /* scan the list */
-        while (curr != NULL)
-         {
-            fprintf(outsort,"\t<h:Object rdf:about=\"");
-            fprintf(outsort,"%s",about);
-            fprintf(outsort,"\">\n");
-            fprintf(outsort,"\t\t<h:refSort rdf:parseType=\"Resource\">");
-            fprintf(outsort,"\n\t\t\t\t<h:position rdf:resource=\"&hns;MainHypothesis\"/>");
-            fprintf(outsort,"\n\t\t\t\t<h:sort rdf:resource=\"&hns;%s\"/>",uri);
-            fprintf(outsort,"\n\t\t\t\t<h:depth>%d</h:depth>",curr->val);
-            fprintf(outsort,"\n\t\t</h:refSort>\n");
-           fprintf(outsort,"\t</h:Object>\n");
-            curr = curr->next;
-         }
-      }
-    else 
-     {
-        /* scan the list */
-        while (curr != NULL)
-         {
-           fprintf(out,"\t\t<h:refObj rdf:parseType=\"Resource\">");
-            fprintf(out,"\n\t\t\t\t<h:position rdf:resource=\"&hns;MainHypothesis\"/>");
-            fprintf(out,"\n\t\t\t\t<h:depth>%d</h:depth>",curr->val);
-            fprintf(out,"\n\t\t\t\t<h:occurrence><h:Object rdf:about=\"%s\"/></h:occurrence>",uri);
-            fprintf(out,"\n\t\t</h:refObj>\n");
-            curr = curr->next;
-         }
-      }
-}
-
-print_mainconcl(about,out,outrel,outsort,uri,depth)
-     char    *about;
-     FILE    *out,
-             *outrel,
-             *outsort;
-     char    *uri;
-     int     depth;
-     
-{
-    if (!strcmp(uri,"Rel"))
-      { 
-        fprintf(outrel,"\t<h:Object rdf:about=\"");
-        fprintf(outrel,"%s",about);
-        fprintf(outrel,"\">\n");
-       fprintf(outrel,"\t\t<h:refRel rdf:parseType=\"Resource\">");
-       fprintf(outrel,"\n\t\t\t\t<h:position rdf:resource=\"&hns;MainConclusion\"/>");
-       fprintf(outrel,"\n\t\t\t\t<h:depth>%d</h:depth>",depth);
-       fprintf(outrel,"\n\t\t</h:refRel>\n");
-        fprintf(outrel,"\t</h:Object>\n");
-      }
-    else if ((!strcmp(uri,"Prop")) || (!strcmp(uri,"Type")) ||
-            (!strcmp(uri,"Set")))
-      {
-        fprintf(outsort,"\t<h:Object rdf:about=\"");
-        fprintf(outsort,"%s",about);
-        fprintf(outsort,"\">\n");
-       fprintf(outsort,"\t\t<h:refSort rdf:parseType=\"Resource\">");
-       fprintf(outsort,"\n\t\t\t\t<h:position rdf:resource=\"&hns;MainConclusion\"/>");
-        fprintf(outsort,"\n\t\t\t\t<h:sort rdf:resource=\"&hns;%s\"/>",uri);
-       fprintf(outsort,"\n\t\t\t\t<h:depth>%d</h:depth>",depth);
-       fprintf(outsort,"\n\t\t</h:refSort>\n");
-        fprintf(outsort,"\t</h:Object>\n");
-      }
-    else
-      {
-       fprintf(out,"\t\t<h:refObj rdf:parseType=\"Resource\">");
-       fprintf(out,"\n\t\t\t\t<h:position rdf:resource=\"&hns;MainConclusion\"/>");
-       fprintf(out,"\n\t\t\t\t<h:depth>%d</h:depth>",depth);
-       fprintf(out,"\n\t\t\t\t<h:occurrence><h:Object rdf:about=\"%s\"/></h:occurrence>",uri);
-       fprintf(out,"\n\t\t</h:refObj>\n");
-      }
-}
-
-// dome: cambiata per usare il modello con position
-print_one(out,uri,pos)
-     FILE    *out;
-     char    *uri;
-     int     pos;
-{
-    fprintf(out,"\t\t<h:refObj df:parseType=\"Resource\">");
-    fprintf(out,"\n\t\t\t\t<h:position rdf:resource=\"&hns;");
-    if (pos == INBODY)
-       fprintf(out,"InBody");
-    else if (pos == MAINHYP)
-       fprintf(out,"MainHypothesis");
-    else if (pos == INHYP)
-       fprintf(out,"InHypothesis");
-    else if (pos == INCONCL)
-       fprintf(out,"InConclusion");
-    else if (pos == MAINCONCL)
-       fprintf(out,"MainConclusion");
-    fprintf(out,"\"/>\n\t\t\t\t<h:occurrence><h:Object rdf:about=\"%s\"/></h:occurrence>\n\t\t</h:refObj>\n", uri);
-    
-}
-
- /* The following function allocates a bucket for an identifier. */
-allocate_bucket(st, id, where)
-       struct st_bucket
-                        **st;
-                                       /* pointer to the bucket to be */
-                                       /* allocated */
-       char            *id;
-                                       /* identifier */
-        int             where;
-{
-        int i;
-
-       *st = (struct st_bucket *)malloc(sizeof(struct st_bucket));
-       (*st)->id = (char *)malloc(sizeof('a')*(strlen(id) + 1));
-        strcpy((*st)->id,id);
-        (*st)->main_depth = 0;
-        (*st)->depths = NULL;
-       (*st)->next_st_bucket = NULL;
-        (*st)->all_next = all;
-        all = *st;
-        for (i = 0; i < 5; ++i)
-         (*st)->pos[i] = 0;
-        (*st)->pos[where] = 1;
-}
-
- /* The following function moves a bucket to the head of the */
- /* list in which it lies. */
-move_bucket(st, dict_index)
-       struct st_bucket 
-                        *st;
-                                       /* pointer to the bucket to */
-                                       /* be moved */
-       int             dict_index;
-                                       /* index corresponding to */
-                                       /* the list in which the */
-                                       /* bucket lies */
-{
-       st->next_st_bucket = dictionary[dict_index];
-       dictionary[dict_index] = st;
-}
-
- /* The following function implements Weinberger's hash function. */
-int
-hash_pjw(id)
-       char            *id;
-                                       /* identifier to be hashed */
-{
-       unsigned        h,
-                       g;
-
-       for (h = 0; *id != EOS; id++)
-       {
-               h = (h << HASH1) + (*id);
-               if (g = h & HASH2)
-                       h = h ^ (g >> HASH3) ^ g;
-       }
-       return(h % DICTSIZE);
-}
-
-
-
-
-
-
diff --git a/helm/metadata/create_V7_mowgli/METADATA/sthandler_ind.h b/helm/metadata/create_V7_mowgli/METADATA/sthandler_ind.h
deleted file mode 100644 (file)
index 2536b0f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/****************************************************************/
-/*                          STHANDLER.H                        */
-/****************************************************************/
-
-            
-extern  void            init_symbol_table();
-extern  void            print_all(char *, FILE *, FILE *, FILE *);
-extern  int             search_bucket(char *, int, int);
diff --git a/helm/metadata/create_V7_mowgli/Makefile b/helm/metadata/create_V7_mowgli/Makefile
deleted file mode 100644 (file)
index 1397397..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-all:
-       @echo Available targets:
-       @echo "   forward, backward, compress, clean-forward, clean-backward"
-
-forward:
-       time for i in `cat costanti_e_variabili.txt` ; do (cd tmp && wget -t 1 -O downloaded.xml.gz "http://mowgli.cs.unibo.it:58081/getxml?format=gz&uri=$$i" && wget -t 1 -O downloaded_body.xml.gz "http://mowgli.cs.unibo.it:58081/getxml?format=gz&uri=$$i.body") ; mkdir -p forward/`dirname $$i | sed "s/cic:\///"` && zcat tmp/downloaded.xml.gz > tmp/type.xml && zcat tmp/downloaded_body.xml.gz > tmp/body.xml ; METADATA/meta $$i > forward/`echo $$i | sed "s/cic:\///"`.xml && rm -f tmp/downloaded.xml.gz tmp/downloaded_body.xml.gz tmp/type.xml tmp/body.xml ; done > log 2>&1
-       time for i in `cat tipi_induttivi.txt` ; do (cd tmp && wget -t 1 -O downloaded.xml.gz "http://mowgli.cs.unibo.it:58081/getxml?format=gz&uri=$$i") && mkdir -p forward/`dirname $$i | sed "s/cic:\///"` && zcat tmp/downloaded.xml.gz > tmp/inductive_type.xml && METADATA/meta_ind forward/`echo $$i | sed "s/cic:\///"` $$i && rm tmp/downloaded.xml.gz tmp/inductive_type.xml ; done >> log 2>&1
-       (cd forward ; ../mkindex.sh forward)
-       cat forward_rel_or_sort_header.txt forward_rel.xml forward_rel_or_sort_footer.txt > forward_rel.xml.tmp && mv forward_rel.xml.tmp forward_rel.xml
-       cat forward_rel_or_sort_header.txt forward_sort.xml forward_rel_or_sort_footer.txt > forward_sort.xml.tmp && mv forward_sort.xml.tmp forward_sort.xml
-
-backward:
-       time for i in `cat all_objects.txt` ; do touch/touch.opt $$i ; done
-       find forward -type f -exec ./invert.pl {} \;
-       find backward -type f -exec ./fix_rdf.pl {} \;
-       (cd backward ; ../mkindex.sh backward)
-
-compress:
-       find forward -name "*.xml" -exec gzip {} \;
-       find backward -name "*.xml" -exec gzip {} \;
-       (cd forward ; ../mkindex.sh forward)
-       (cd backward ; ../mkindex.sh backward)
-
-clean-forward:
-       rm -rf forward_rel.xml forward_sort.xml forward/*
-
-clean-backward:
-       rm -rf backward/*
-
-.PHONY: all forward backward compress clean-forward clean-backward
diff --git a/helm/metadata/create_V7_mowgli/fix_rdf.pl b/helm/metadata/create_V7_mowgli/fix_rdf.pl
deleted file mode 100755 (executable)
index 23b4b7f..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/perl
-
-$filename = $uri = $ARGV[0];
-$outputfile = $filename.".xml";
-$uri =~ s/^backward/cic:/;
-$uri =~ s/(.*),([^,]*),([^,]*)/$1#xpointer(1\/$2\/$3)/;
-$uri =~ s/(.*),([^,]*)/$1#xpointer(1\/$2)/;
-
-print "Now processing file $filename\n";
-
-open(HEADER,">>$outputfile");
-print HEADER <<EOT;
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!DOCTYPE rdf:RDF [
-        <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-        <!ENTITY hthns 'http://www.cs.unibo.it/helm/schemas/schema-helmth#'>
-        <!ENTITY hns 'http://www.cs.unibo.it/helm/schemas/schema-helm#'>
-
-   ]>
-<rdf:RDF xml:lang="en" xmlns:rdf="&rdfns;" xmlns:h="&hns;" xmlns:hth="&hthns;">
-       <h:Object rdf:about="$uri">
-EOT
-close(HEADER);
-
-$quotedfilename = $filename;
-$quotedfilename =~ s/'/\\'/g;
-$quotedoutputfile = $outputfile;
-$quotedoutputfile =~ s/'/\\'/g;
-system("cat $quotedfilename >> $quotedoutputfile");
-
-open(FOOTER,">>$outputfile");
-print FOOTER <<EOT;
-       </h:Object>
-</rdf:RDF>
-EOT
-close(FOOTER);
-
-unlink $filename;
diff --git a/helm/metadata/create_V7_mowgli/forward_rel_or_sort_footer.txt b/helm/metadata/create_V7_mowgli/forward_rel_or_sort_footer.txt
deleted file mode 100644 (file)
index 7edcd78..0000000
+++ /dev/null
@@ -1 +0,0 @@
-</rdf:RDF>
diff --git a/helm/metadata/create_V7_mowgli/forward_rel_or_sort_header.txt b/helm/metadata/create_V7_mowgli/forward_rel_or_sort_header.txt
deleted file mode 100644 (file)
index 3802d0e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!DOCTYPE rdf:RDF [
-        <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-        <!ENTITY hthns 'http://www.cs.unibo.it/helm/schemas/schema-helmth#'>
-        <!ENTITY hns 'http://www.cs.unibo.it/helm/schemas/schema-helm#'>
-
-   ]>
-<rdf:RDF xml:lang="en" xmlns:rdf="&rdfns;" xmlns:h="&hns;" xmlns:hth="&hthns;">
diff --git a/helm/metadata/create_V7_mowgli/invert.pl b/helm/metadata/create_V7_mowgli/invert.pl
deleted file mode 100755 (executable)
index 9024799..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/perl
-
-my $inputfile = $ARGV[0];
-
-print "Now splitting file $inputfile\n";
-open(IN, "<$inputfile") or die "Error opening file $inputfile";
-my $where;
-while(($where = <IN>) && not ($where =~ /<h:Object/)) {}
-chomp($where);
-$where =~ s/^[^"]*"([^"]*)">$/$1/;
-while(($line1 = <IN>) && not ($line1 =~ /<\/h:Object>/)) { # <h:refObj
-  $line2 = <IN>; # <h:position rdf:resource="&hns;value"/>
-  $position = $line2;
-  chomp($position);
-  $position =~ s/^[ \t]*[^"]*"&hns;([^"]*)"\/>/$1/;
-  if ($position eq 'MainHypothesis' || $position eq 'MainConclusion') {
-     $line3 = <IN>; # <h:depth>value</h:depth>
-  }
-  $line4 = <IN>; # <h:occurrence><h:Object rdf:about="value"/></h:occurrence>
-  $line5 = <IN>; # </h:refObj>
-  $uri = $line4;
-  chomp($uri);
-  $uri =~ s/^[ \t]*<h:occurrence><h:Object rdf:about="([^"]*)"\/><\/h:occurrence>$/$1/;
-  $who = $uri;
-  $who =~ s/^cic:/backward/;
-  $who =~ s/#xpointer\(1\/([^\/]*)\/([^\/]*)\)/,$1,$2/;
-  $who =~ s/#xpointer\(1\/([^\/]*)\)/,$1/;
-  $line4 =~ s/\Q$uri\E/$where/;
-   
-  open(OUT, ">>$who") or die "Error opening file $who";
-  print OUT "\t\t<h:backPointer rdf:parseType="Resource">\n";
-  print OUT $line2;
-  if ($position eq 'MainHypothesis' || $position eq 'MainConclusion') {
-     print OUT $line3;
-  }
-  print OUT $line4;
-  print OUT "\t\t</h:backPointer>\n";
-  close(OUT);
-}
-close(IN);
diff --git a/helm/metadata/create_V7_mowgli/mkindex.sh b/helm/metadata/create_V7_mowgli/mkindex.sh
deleted file mode 100755 (executable)
index 3a814ba..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-echo `find . -name "*.xml"` | ../uris_of_filenames.pl $1 > rdf_index.txt
-echo `find . -name "*.xml.gz"` | ../uris_of_filenames.pl $1 -gz >> rdf_index.txt
diff --git a/helm/metadata/create_V7_mowgli/touch/.cvsignore b/helm/metadata/create_V7_mowgli/touch/.cvsignore
deleted file mode 100644 (file)
index 10bc8bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.cmx touch touch.opt
diff --git a/helm/metadata/create_V7_mowgli/touch/.depend b/helm/metadata/create_V7_mowgli/touch/.depend
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/metadata/create_V7_mowgli/touch/Makefile b/helm/metadata/create_V7_mowgli/touch/Makefile
deleted file mode 100644 (file)
index 636a804..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-REQUIRES = helm-getter helm-cic str
-PREDICATES =
-OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)"
-OCAMLDEP = ocamldep
-OCAMLFIND = ocamlfind
-OCAMLC = $(OCAMLFIND) ocamlc $(OCAMLOPTIONS)
-OCAMLOPT = $(OCAMLFIND) ocamlopt $(OCAMLOPTIONS)
-
-LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-
-all: touch
-opt: touch.opt
-
-DEPOBJS = touch.ml
-
-TOUCHOBJS = touch.cmo
-
-depend:
-       $(OCAMLDEP) $(DEPOBJS) > .depend
-
-touch: $(TOUCHOBJS) $(LIBRARIES)
-       $(OCAMLC) -linkpkg -o touch $(TOUCHOBJS)
-
-touch.opt: $(TOUCHOBJS:.cmo=.cmx) $(LIBRARIES_OPT)
-       $(OCAMLOPT) -linkpkg -o touch.opt $(TOUCHOBJS:.cmo=.cmx)
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.mli.cmi: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.ml.cmx: $(LIBRARIES_OPT)
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o touch touch.opt
-
-.PHONY: clean
-
-include .depend
diff --git a/helm/metadata/create_V7_mowgli/touch/touch.ml b/helm/metadata/create_V7_mowgli/touch/touch.ml
deleted file mode 100644 (file)
index 207750a..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 03/04/2001                                 *)
-(*                                                                            *)
-(*                            Missing description                             *)
-(*                                                                            *)
-(******************************************************************************)
-
-let iteri foo =
- let counter = ref 0 in
-  List.iter (function e -> incr counter ; foo e !counter)
-;;
-
-let pathname_of_uri uristring =
- "backward" ^
-  Str.replace_first (Str.regexp "^cic:") "" uristring
-;;
-
-let make_dirs dirpath =
- ignore (Unix.system ("mkdir -p \"" ^ dirpath ^ "\""))
-;;
-
-let touch_file rdf_string_uri =
- let module U = UriManager in
-  let rdf_uri = U.uri_of_string rdf_string_uri in
-   make_dirs (pathname_of_uri (U.buri_of_uri rdf_uri)) ;
-   ignore (
-    Unix.system
-     ("touch \"" ^ (pathname_of_uri rdf_string_uri) ^ "\"")
-   )
-;;
-
-let get_obj uri =
- let cicfilename = Getter.getxml uri in
-  let res = CicParser.obj_of_xml cicfilename None in
-   Unix.unlink cicfilename ;
-   res
-;;
-
-let touch_obj string_uri =
- let module U = UriManager in
- let module C = Cic in
-  function
-     Some (C.InductiveDefinition (itys,_,_)) ->
-      iteri
-       (fun (_,_,_,cons) n ->
-         let sn = string_of_int n in
-          touch_file
-           (string_uri ^ "," ^ sn) ;
-          iteri
-           (fun (_,_) m ->
-             let sm = string_of_int m in
-              touch_file
-               (string_uri ^ "," ^ sn ^ "," ^ sm)
-           ) cons
-       ) itys
-   | Some _ -> assert false
-   | None ->
-      touch_file string_uri
-;;
-
-let touch string_uri =
- let module S = String in
- let module U = UriManager in
-  print_endline ("Now touching metadata file for " ^ string_uri) ;
-  flush stdout ;
-  let uri = U.uri_of_string string_uri in
-  let obj =
-   if S.sub string_uri (S.length string_uri - 3) 3 = "ind" then
-    Some (get_obj uri)
-   else
-    None
-  in
-   touch_obj string_uri obj
-;;
-
-let _ =
- let usage_msg = "usage: touch[.opt] URI" in
- let uri = ref "" in
-  Arg.parse []
-   (fun x ->
-     if x = "" then
-      begin
-       prerr_string "No URI provided.\n" ;
-       Arg.usage [] usage_msg ;
-       exit (-1)
-      end
-     else if !uri = "" then
-      uri := x
-     else
-      begin
-       prerr_string "More than two arguments provided.\n" ;
-       Arg.usage [] usage_msg ;
-       exit (-1)
-      end
-   ) usage_msg ;
-   if !uri = "" then
-    begin
-     prerr_string "No URI provided.\n" ;
-     Arg.usage [] usage_msg ;
-     exit (-1)
-    end ;
-   touch !uri
-;;
diff --git a/helm/metadata/create_V7_mowgli/uris_of_filenames.pl b/helm/metadata/create_V7_mowgli/uris_of_filenames.pl
deleted file mode 100755 (executable)
index db835bf..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/perl
-
-while(<STDIN>) {
-   chomp;
-   split / /;
-   for (@_) {
-      $GZSUFF = "";
-      if (/.gz$/)
-       { s/.gz$//; $GZSUFF = " gz" if ($ARGV[1] == "-gz"); }
-      s/\./helm:rdf:www.cs.unibo.it\/helm\/rdf\/$ARGV[0]\/\/cic:/;
-      s/\.xml//;
-      print $_.$GZSUFF."\n";
- }
-}
diff --git a/helm/metadata/dc_mowgli/.cvsignore b/helm/metadata/dc_mowgli/.cvsignore
deleted file mode 100644 (file)
index f08240a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dc
diff --git a/helm/metadata/dc_mowgli/Makefile b/helm/metadata/dc_mowgli/Makefile
deleted file mode 100644 (file)
index 571221a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-upload:
-       cat create_dc_tables | psql -h mowgli -U helm helm_mowgli
-       cat create_dc_indexes | psql -h mowgli -U helm helm_mowgli
-       find dc -name "*.xml" -exec ./upload.pl {} \; | psql -h mowgli -U helm helm_mowgli
-
-download:
-       cat drop_dc_tables | psql -h mowgli -U helm helm_mowgli
diff --git a/helm/metadata/dc_mowgli/create_dc_indexes b/helm/metadata/dc_mowgli/create_dc_indexes
deleted file mode 100644 (file)
index 132570f..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-create index dccreator_index on dccreator (value);
-create index dcdate_index on dcdate (value);
-create index dcdescription_index on dcdescription (value);
-create index dcformat_index on dcformat (value);
-create index dcidentifier_index on dcidentifier (value);
-create index dclanguage_index on dclanguage (value);
-create index dcpublisher_index on dcpublisher (value);
-create index dcqRelationType_index on dcqRelationType (value);
-create index dcrelation_index on dcrelation (value);
-create index dcrights_index on dcrights (value);
-create index dcsource_index on dcsource (value);
-create index dcsubject_index on dcsubject (value);
-create index dctitle_index on dctitle (value);
-create index hthResourceFormat_index on hthResourceFormat (value);
-create index hthcontact_index on hthcontact (value);
-create index hthfirstVersion_index on hthfirstVersion (value);
-create index hthinstitution_index on hthinstitution (value);
-create index hthmodified_index on hthmodified (value);
-
-create index dccreator_rev_index on dccreator (uri);
-create index dcdate_rev_index on dcdate (uri);
-create index dcdescription_rev_index on dcdescription (uri);
-create index dcformat_rev_index on dcformat (uri);
-create index dcidentifier_rev_index on dcidentifier (uri);
-create index dclanguage_rev_index on dclanguage (uri);
-create index dcpublisher_rev_index on dcpublisher (uri);
-create index dcqRelationType_rev_index on dcqRelationType (uri);
-create index dcrelation_rev_index on dcrelation (uri);
-create index dcrights_rev_index on dcrights (uri);
-create index dcsource_rev_index on dcsource (uri);
-create index dcsubject_rev_index on dcsubject (uri);
-create index dctitle_rev_index on dctitle (uri);
-create index hthResourceFormat_rev_index on hthResourceFormat (uri);
-create index hthcontact_rev_index on hthcontact (uri);
-create index hthfirstVersion_rev_index on hthfirstVersion (uri);
-create index hthinstitution_rev_index on hthinstitution (uri);
-create index hthmodified_rev_index on hthmodified (uri);
diff --git a/helm/metadata/dc_mowgli/create_dc_tables b/helm/metadata/dc_mowgli/create_dc_tables
deleted file mode 100644 (file)
index c547f33..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-create table dccreator (value varchar, uri varchar);
-create table dcdate (value varchar, uri varchar);
-create table dcdescription (value varchar, uri varchar);
-create table dcformat (value varchar, uri varchar);
-create table dcidentifier (value varchar, uri varchar);
-create table dclanguage (value varchar, uri varchar);
-create table dcpublisher (value varchar, uri varchar);
-create table dcqRelationType (value varchar, uri varchar);
-create table dcrelation (value varchar, uri varchar);
-create table dcrights (value varchar, uri varchar);
-create table dcsource (value varchar, uri varchar);
-create table dcsubject (value varchar, uri varchar);
-create table dctitle (value varchar, uri varchar);
-create table hthResourceFormat (value varchar, uri varchar);
-create table hthcontact (value varchar, uri varchar);
-create table hthfirstVersion (value varchar, uri varchar);
-create table hthinstitution (value varchar, uri varchar);
-create table hthmodified (value varchar, uri varchar);
diff --git a/helm/metadata/dc_mowgli/drop_dc_tables b/helm/metadata/dc_mowgli/drop_dc_tables
deleted file mode 100644 (file)
index d13a2a8..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-drop table dccreator;
-drop table dcdate;
-drop table dcdescription;
-drop table dcformat;
-drop table dcidentifier;
-drop table dclanguage;
-drop table dcpublisher;
-drop table dcqRelationType;
-drop table dcrelation;
-drop table dcrights;
-drop table dcsource;
-drop table dcsubject;
-drop table dctitle;
-drop table hthResourceFormat;
-drop table hthcontact;
-drop table hthfirstVersion;
-drop table hthinstitution;
-drop table hthmodified;
diff --git a/helm/metadata/dc_mowgli/mkindex.sh b/helm/metadata/dc_mowgli/mkindex.sh
deleted file mode 100755 (executable)
index 3a814ba..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-echo `find . -name "*.xml"` | ../uris_of_filenames.pl $1 > rdf_index.txt
-echo `find . -name "*.xml.gz"` | ../uris_of_filenames.pl $1 -gz >> rdf_index.txt
diff --git a/helm/metadata/dc_mowgli/upload.pl b/helm/metadata/dc_mowgli/upload.pl
deleted file mode 100755 (executable)
index 944f21b..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/perl
-
-use XML::Parser;
-
-$p = new XML::Parser(Handlers => {Start => \&handle_start,
-                                  End   => \&handle_end,
-                                  Char  => \&handle_char});
-$p->parsefile($ARGV[0]);
-
-
-$skipped = 0;
-$open = 0;
-$content = "";
-$uri = "";
-
-sub handle_start
-{
-   my ($expat, $element, @attrs) = @_;
-   if ($skipped == 1) {
-      $uri = $attrs[1];
-      $uri =~ s/'/\\'/g;
-   }
-   if ($skipped < 2) { $skipped++ ; }
-   else {
-      $open++;
-      $content = "";
-   }
-}
-
-sub handle_end
-{
-   my ($expat,$element) = @_;
-   $open--;
-   if ($open >= 0) {
-      $content =~ s/'/\\'/g;
-      $element =~ s/://g;    # dc:pippo ==> dcpippo
-      print "insert into $element values ('$content','$uri');\n";
-   }
-}
-
-sub handle_char
-{
-   my ($expat,$char) = @_;
-   if ($open >= 1) {
-      chomp($char);
-      $char =~ s/ +/ /g;
-      $char =~ s/^ //g;
-      $char =~ s/ $//g;
-      $content .= $char;
-   }
-}
diff --git a/helm/metadata/dc_mowgli/uris_of_filenames.pl b/helm/metadata/dc_mowgli/uris_of_filenames.pl
deleted file mode 100755 (executable)
index e896a6f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/perl
-
-while(<STDIN>) {
-   chomp;
-   split / /;
-   for (@_) {
-      $GZSUFF = "";
-      if (/.gz$/)
-       { s/.gz$//; $GZSUFF = " gz" if ($ARGV[1] == "-gz"); }
-      s/\./helm:rdf:www.cs.unibo.it\/helm\/rdf\/dc$ARGV[0]\/\/cic:/;
-      s/\.xml//;
-      print $_.$GZSUFF."\n";
- }
-}
diff --git a/helm/metadata/postgresql_V7_mowgli/.cvsignore b/helm/metadata/postgresql_V7_mowgli/.cvsignore
deleted file mode 100644 (file)
index 89ea3bf..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-forward
-backward
-forward_rel.xml
-forward_sort.xml
-txt
-txt.saved
diff --git a/helm/metadata/postgresql_V7_mowgli/Makefile b/helm/metadata/postgresql_V7_mowgli/Makefile
deleted file mode 100644 (file)
index 271004e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-CWD=/projects/helm/metadata/postgresql_V7_mowgli_new_schema
-
-txt:
-       (cd forward && find . -type d -exec mkdir -p $(CWD)/txt/{} \;)
-       (cd forward && find . -name "*.xml" -exec xsltproc --param path '"{}"' -o $(CWD)/txt/{}.txt $(CWD)/metainfo.xsl {} \; -exec echo {} \;)
-
-upload:
-       ./upload_rel.pl forward_rel.xml | psql -h mowgli -U helm helm_mowgli_new_schema
-       ./upload_sort.pl forward_sort.xml | psql -h mowgli -U helm helm_mowgli_new_schema
-       (cd txt && find */* -name "*.txt" > index.txt)
-       (cd txt && cat index.txt | ../inserisci.pl)
-
-clean:
-       rm -rf txt/*
-
-.PHONY: txt
diff --git a/helm/metadata/postgresql_V7_mowgli/README b/helm/metadata/postgresql_V7_mowgli/README
deleted file mode 100644 (file)
index 0d1b720..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-* da utente postgres:
-
-    $ createuser helm   # con permessi minimi (i.e. no create altri database,
-                        # no create altri utenti)
-    $ createdb helm
-    $ pg_passwd data/passwords
-      # settare una password
-
-* da un utente qualsiasi:
-
-    $ psql -h mowgli -U helm helm_mowgli_new_schema
-
-     create table registry (uri varchar, id int);
-     CREATE INDEX registry_index ON registry (uri);
-
-     create table objectName (value varchar, uri varchar);
-     CREATE INDEX objectName_index ON objectName (value);
-     CREATE INDEX objectName_rev_index ON objectName (uri);
-
-     create table hrefRel (uri varchar, position varchar, depth int);
-     create table hrefSort (uri varchar, position varchar, sort varchar, depth int);
-     CREATE INDEX hrefRel_rev_index ON hrefRel (uri);
-     CREATE INDEX hrefSort_rev_index ON hrefSort (uri);
-
-* svuotamento:
-  drop table tn;
-  delete from registry;
-* svuotamento totale:
-  come postgres: dropdb helm
diff --git a/helm/metadata/postgresql_V7_mowgli/inserisci.pl b/helm/metadata/postgresql_V7_mowgli/inserisci.pl
deleted file mode 100755 (executable)
index 17c8824..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/perl
-
-$max = 0;
-open (OUT, "| psql -U helm helm_mowgli_new_schema");
-while (<STDIN>) {
- open (IN,$_);
- $uri1 = <IN>;
- chomp($uri1);
- print "$uri1:\n";
- $uri1 =~ s/'/\\'/g;
- $max++;
- print OUT "create table t$max (prop_id varchar, position varchar, uri varchar, depth int);";
- print OUT "insert into registry values ('$uri1', $max);";
- while (<IN>) {
-  chomp;
-  ($dir,$context,$uri2,$depth) = split(/\|/);
-  print "   Inserisco $dir#$context#$uri2#$depth\n";
-  $uri2 =~ s/'/\\'/g;
-  print OUT "insert into t$max values ('$dir', '$context', '$uri2', $depth);";
- }
-  print "\n";
-  close IN;
-}
-close OUT;
diff --git a/helm/metadata/postgresql_V7_mowgli/inserisci_names.pl b/helm/metadata/postgresql_V7_mowgli/inserisci_names.pl
deleted file mode 100755 (executable)
index 68cc93e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/perl
-
-open (OUT, "| psql -h mowgli -U helm helm_mowgli_new_schema");
-while (<STDIN>) {
- chomp;
- ($name,$uri) = split(/\|/);
- print "   Inserisco $name#$uri\n";
- $name =~ s/'/\\'/g;
- $uri =~ s/'/\\'/g;
- print OUT "insert into objectName values ('$name', '$uri');";
- print "\n";
-}
-close OUT;
diff --git a/helm/metadata/postgresql_V7_mowgli/metadata_for_names/.cvsignore b/helm/metadata/postgresql_V7_mowgli/metadata_for_names/.cvsignore
deleted file mode 100644 (file)
index d873963..0000000
+++ /dev/null
@@ -1 +0,0 @@
-objectName.txt
diff --git a/helm/metadata/postgresql_V7_mowgli/metadata_for_names/Makefile b/helm/metadata/postgresql_V7_mowgli/metadata_for_names/Makefile
deleted file mode 100644 (file)
index cbde307..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-upload:
-       cat objectName.txt | ../inserisci_names.pl
diff --git a/helm/metadata/postgresql_V7_mowgli/metainfo.xsl b/helm/metadata/postgresql_V7_mowgli/metainfo.xsl
deleted file mode 100644 (file)
index 472a35f..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0"?>
-
-<!--******************************************************************--> 
-<!-- XSLT version 0.1 generating metadata content of pointers         -->
-<!-- (backward and forward)                                           -->
-<!-- First draft: May 24 2002, Irene Schena                           -->
-<!--******************************************************************-->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-                             xmlns:h="http://www.cs.unibo.it/helm/schemas/schema-helm#"
-                             xmlns:hth="http://www.cs.unibo.it/helm/schemas/schema-helmth#">
-
-<xsl:output method="text"/>
-
-<xsl:param name="path"/>
-
-<xsl:template match="/">
-  <xsl:apply-templates select="*"/>
-  <xsl:apply-templates select="document(concat('backward/',$path))/rdf:RDF/h:Object/*"/>
-</xsl:template>
-
-<!-- to skip blanks -->
-<xsl:template match="*">
- <xsl:apply-templates select="*"/>
-</xsl:template>
-
-<xsl:template match="h:Object">
-  <xsl:value-of select="@rdf:about"/>
-  <xsl:text>
-</xsl:text>
-  <xsl:apply-templates select="*"/>
-</xsl:template>
-
-<xsl:template match="h:refObj|h:backPointer">
-  <xsl:choose>
-  <xsl:when test="name(.)='h:refObj'">
-   <xsl:text>F|</xsl:text>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:text>B|</xsl:text>
-  </xsl:otherwise>
-  </xsl:choose>
-  <xsl:value-of select="h:position/@rdf:resource"/>
-  <xsl:text>|</xsl:text>
-  <xsl:value-of select="h:occurrence/h:Object/@rdf:about"/>
-  <xsl:text>|</xsl:text>
-  <xsl:choose>
-   <xsl:when test="h:depth">
-    <xsl:value-of select="h:depth"/>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:text>null</xsl:text>
-   </xsl:otherwise>
-  </xsl:choose>
-  <xsl:text>
-</xsl:text>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/metadata/postgresql_V7_mowgli/upload_rel.pl b/helm/metadata/postgresql_V7_mowgli/upload_rel.pl
deleted file mode 100755 (executable)
index 6fece84..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/perl
-
-my $inputfile = $ARGV[0];
-
-#print "Now splitting file $inputfile\n";
-open(IN, "<$inputfile") or die "Error opening file $inputfile";
-while(($skip = <IN>) && not ($skip =~ /<rdf:RDF/)) {}
-while(($line0 = <IN>) && not ($line0 =~ /<\/rdf:RDF>/)) { # <h:Object
-  chomp($line0);
-  $line0 =~ s/^[^"]*"([^"]*)">$/$1/;
-  $line1 = <IN>; #<h:refRel..
-  $obj = $line1;
-  $line2 = <IN>; # <h:position rdf:resource="&hns;value"/>
-  $position = $line2;
-  chomp($position);
-  $position =~ s/^[ \t]*[^"]*"&hns;([^"]*)"\/>/$1/;
-  $position = "http://www.cs.unibo.it/helm/schemas/schema-helm#$position";
-  $line3 = <IN>; #<h:depth..
-  $depth = $line3;
-  chomp($depth);
-  $depth =~ s/^[ \t]*<h:depth>([^<]*)<\/h:depth>$/$1/;
-  $line4 = <IN>; # </h:refRel
-  $line5 = <IN>; # </h:Object>
-   
-  $line0 =~ s/'/\\'/g; 
-  $position =~ s/'/\\'/g;
-  $depth =~ s/'/\\'/g;
-  print "insert into hrefRel values ('$line0', '$position', $depth);\n\n";
-}
-close(IN);
diff --git a/helm/metadata/postgresql_V7_mowgli/upload_sort.pl b/helm/metadata/postgresql_V7_mowgli/upload_sort.pl
deleted file mode 100755 (executable)
index 1215ceb..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/perl
-
-my $inputfile = $ARGV[0];
-
-#print "Now splitting file $inputfile\n";
-open(IN, "<$inputfile") or die "Error opening file $inputfile";
-while(($skip = <IN>) && not ($skip =~ /<rdf:RDF/)) {}
-while(($line0 = <IN>) && not ($line0 =~ /<\/rdf:RDF>/)) { # <h:Object
-  chomp($line0);
-  $line0 =~ s/^[^"]*"([^"]*)">$/$1/;
-  $line1 = <IN>; #<h:refRel..
-  $obj = $line1;
-  $line2 = <IN>; # <h:position rdf:resource="&hns;value"/>
-  $position = $line2;
-  chomp($position);
-  $position =~ s/^[ \t]*[^"]*"&hns;([^"]*)"\/>/$1/;
-  $position = "http://www.cs.unibo.it/helm/schemas/schema-helm#$position";
-  $line3 = <IN>;#<h:sort..
-  $sort = $line3; 
-  chomp($sort);
-  $sort =~ s/^[ \t]*[^"]*"&hns;([^"]*)"\/>/$1/;
-  $sort = "http://www.cs.unibo.it/helm/schemas/schema-helm#$sort";
-  $line4 = <IN>; #<h:depth..
-  $depth = $line4;
-  chomp($depth);
-  $depth =~ s/^[ \t]*<h:depth>([^<]*)<\/h:depth>$/$1/;
-  $line5 = <IN>; # </h:refRel
-  $line6 = <IN>; # </h:Object>
-   
-  $line0 =~ s/'/\\'/g; 
-  $position =~ s/'/\\'/g;
-  $depth =~ s/'/\\'/g;
-  $sort =~ s/'/\\'/g;
-  print "insert into hrefSort values ('$line0', '$position', '$sort', $depth);\n\n";
-}
-close(IN);
diff --git a/helm/minidom/.cvsignore b/helm/minidom/.cvsignore
deleted file mode 100644 (file)
index 19aef19..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-*.lo
-*.la
-.libs
-.deps
-.emacs.desktop
-config.h
-config.h.in
-config.cache
-config.log
-config.status
-libtool
-stamp-h
-stamp-h.in
-Makefile
-Makefile.in
-*.gz
-configure
-aclocal.m4
-install-sh
-minidom-config
-minidom.spec
-missing
-mkinstalldirs
diff --git a/helm/minidom/AUTHORS b/helm/minidom/AUTHORS
deleted file mode 100644 (file)
index fe59f14..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Luca Padovani <luca.padovani@cs.unibo.it>
diff --git a/helm/minidom/COPYING b/helm/minidom/COPYING
deleted file mode 100644 (file)
index d60c31a..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   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.
-\f
-                   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.)
-\f
-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.
-\f
-  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.
-\f
-  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
-\f
-           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
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <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 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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/helm/minidom/ChangeLog b/helm/minidom/ChangeLog
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/minidom/HEADER b/helm/minidom/HEADER
deleted file mode 100644 (file)
index acd4a4d..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- * 
- * This file is part of MambaCC, a compiler for the Mamba
- * Functional Language
- * 
- * MambaCC 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.
- * 
- * MambaCC 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 MambaCC; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, see the MambaCC World-Wide-Web page,
- * http://cs.unibo.it/~lpadovan/mamba/, or send a mail to
- * <luca.padovani@cs.unibo.it>
- */
diff --git a/helm/minidom/INSTALL b/helm/minidom/INSTALL
deleted file mode 100644 (file)
index b42a17a..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-Basic Installation
-==================
-
-   These are generic installation instructions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
-
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-Compilers and Options
-=====================
-
-   Some systems require unusual options for compilation or linking that
-the `configure' script does not know about.  You can give `configure'
-initial values for variables by setting them in the environment.  Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
-     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
-
-Or on systems that have the `env' program, you can do it like this:
-     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
-
-Compiling For Multiple Architectures
-====================================
-
-   You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
-   If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory.  After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
-
-Installation Names
-==================
-
-   By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc.  You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-   Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-   There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on.  Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
-     CPU-COMPANY-SYSTEM
-
-See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
-
-   If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
-
-Sharing Defaults
-================
-
-   If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Operation Controls
-==================
-
-   `configure' recognizes the following options to control how it
-operates.
-
-`--cache-file=FILE'
-     Use and save the results of the tests in FILE instead of
-     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
-     debugging `configure'.
-
-`--help'
-     Print a summary of the options to `configure', and exit.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`--version'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`configure' also accepts some other, not widely useful, options.
diff --git a/helm/minidom/Makefile.am b/helm/minidom/Makefile.am
deleted file mode 100644 (file)
index 2bc9d71..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-
-lib_LTLIBRARIES = libminidom.la
-bin_SCRIPTS = minidom-config
-
-libminidom_la_LDFLAGS = -version-info @MINIDOM_VERSION_INFO@
-
-EXTRA_DIST = minidom-config.in
-
-CLEANFILES = minidom-config
-
-libminidom_la_SOURCES = \
-  minidom.c
-
-pkginclude_HEADERS = \
-  minidom.h
-
-minidom-config: minidom-config.in
-       @echo "#!/bin/sh" >minidom-config
-       @echo >>minidom-config
-       @echo VERSION=\"$(VERSION)\" >>minidom-config
-       @echo XML_CONFIG=\"$(XML_CONFIG)\" >>minidom-config
-       @echo libdir=\"$(libdir)\" >>minidom-config
-       @echo pkglibdir=\"$(pkglibdir)\" >>minidom-config
-       @echo includedir=\"$(includedir)\" >>minidom-config
-       @echo pkgincludedir=\"$(pkgincludedir)\" >>minidom-config
-       @echo >>minidom-config
-       @cat $(srcdir)/minidom-config.in >>minidom-config
-       @chmod a+x minidom-config
-
-backup:
-       tar cvfz ../@PACKAGE@-@VERSION@-`date|tr ' ' '_'|tr ':' '_'`.tar.gz .
-
-cleanbak:
-       -rm -f `find . -name "*~"`
-
-lc:
-       @( \
-       CFILES=`find . -name "*.c"`; \
-       HFILES=`find . -name "*.h"`; \
-       ICCFILES=`find . -name "*.inc"`; \
-       wc -l $$CFILES $$HFILES $$INCFILES | tail -n 1 \
-       )
diff --git a/helm/minidom/NEWS b/helm/minidom/NEWS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/minidom/README b/helm/minidom/README
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/minidom/TODO b/helm/minidom/TODO
deleted file mode 100644 (file)
index bebb4b6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-+ support for converting string to/from Unicode
-
diff --git a/helm/minidom/acconfig.h b/helm/minidom/acconfig.h
deleted file mode 100644 (file)
index ac44dc3..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- * 
- * This file is part of miniDOM, a minimal implementation of the
- * Document Object Model based on the libxml library.
- * 
- * miniDOM 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.
- * 
- * miniDOM 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 miniDOM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, see the miniDOM World-Wide-Web page,
- * http://cs.unibo.it/~lpadovan/minidom/, or send a mail to
- * <luca.padovani@cs.unibo.it>
- */
-
-#ifndef config_h
-#define config_h
-
-@TOP@
-
-/* Define to compile with libxml 2.x (recommended) */
-#undef HAVE_LIBXML2
-
-@BOTTOM@
-
-#endif /* config_h */
diff --git a/helm/minidom/config.guess b/helm/minidom/config.guess
deleted file mode 100644 (file)
index 28fcc5e..0000000
+++ /dev/null
@@ -1,1308 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-#   Free Software Foundation, Inc.
-
-timestamp='2001-11-08'
-
-# 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., 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.
-
-# Originally written by Per Bothner <bothner@cygnus.com>.
-# Please send patches to <config-patches@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@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-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 0 ;;
-    --version | -v )
-       echo "$version" ; exit 0 ;;
-    --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
-    -- )     # 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
-
-
-dummy=dummy-$$
-trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script.
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int dummy(){}" > $dummy.c ;
-       for c in cc gcc c89 ; do
-         ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
-         if test $? = 0 ; then
-            CC_FOR_BUILD="$c"; break ;
-         fi ;
-       done ;
-       rm -f $dummy.c $dummy.o $dummy.rel ;
-       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'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@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.
-       # Determine the machine/vendor (is the vendor relevant).
-       case "${UNAME_MACHINE}" in
-           amiga) machine=m68k-unknown ;;
-           arm32) machine=arm-unknown ;;
-           atari*) machine=m68k-atari ;;
-           sun3*) machine=m68k-sun ;;
-           mac68k) machine=m68k-apple ;;
-           macppc) machine=powerpc-apple ;;
-           hp3[0-9][05]) machine=m68k-hp ;;
-           ibmrt|romp-ibm) machine=romp-ibm ;;
-           sparc*) machine=`uname -p`-unknown ;;
-           *) machine=${UNAME_MACHINE}-unknown ;;
-       esac
-       # The Operating System including object format, if it has switched
-       # to ELF recently, or will in the future.
-       case "${UNAME_MACHINE}" in
-           i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
-               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
-       release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-       # 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 0 ;;
-    amiga:OpenBSD:*:*)
-       echo m68k-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    arc:OpenBSD:*:*)
-       echo mipsel-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    hp300:OpenBSD:*:*)
-       echo m68k-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    mac68k:OpenBSD:*:*)
-       echo m68k-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    macppc:OpenBSD:*:*)
-       echo powerpc-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    mvme68k:OpenBSD:*:*)
-       echo m68k-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    mvme88k:OpenBSD:*:*)
-       echo m88k-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    mvmeppc:OpenBSD:*:*)
-       echo powerpc-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    pmax:OpenBSD:*:*)
-       echo mipsel-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    sgi:OpenBSD:*:*)
-       echo mipseb-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    sun3:OpenBSD:*:*)
-       echo m68k-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    wgrisc:OpenBSD:*:*)
-       echo mipsel-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    *:OpenBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    alpha:OSF1:*:*)
-       if test $UNAME_RELEASE = "V4.0"; then
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-       fi
-       # 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.
-       cat <<EOF >$dummy.s
-       .data
-\$Lformat:
-       .byte 37,100,45,37,120,10,0     # "%d-%x\n"
-
-       .text
-       .globl main
-       .align 4
-       .ent main
-main:
-       .frame \$30,16,\$26,0
-       ldgp \$29,0(\$27)
-       .prologue 1
-       .long 0x47e03d80 # implver \$0
-       lda \$2,-1
-       .long 0x47e20c21 # amask \$2,\$1
-       lda \$16,\$Lformat
-       mov \$0,\$17
-       not \$1,\$18
-       jsr \$26,printf
-       ldgp \$29,0(\$26)
-       mov 0,\$16
-       jsr \$26,exit
-       .end main
-EOF
-       eval $set_cc_for_build
-       $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
-       if test "$?" = 0 ; then
-               case `./$dummy` in
-                       0-0)
-                               UNAME_MACHINE="alpha"
-                               ;;
-                       1-0)
-                               UNAME_MACHINE="alphaev5"
-                               ;;
-                       1-1)
-                               UNAME_MACHINE="alphaev56"
-                               ;;
-                       1-101)
-                               UNAME_MACHINE="alphapca56"
-                               ;;
-                       2-303)
-                               UNAME_MACHINE="alphaev6"
-                               ;;
-                       2-307)
-                               UNAME_MACHINE="alphaev67"
-                               ;;
-                       2-1307)
-                               UNAME_MACHINE="alphaev68"
-                               ;;
-               esac
-       fi
-       rm -f $dummy.s $dummy
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       exit 0 ;;
-    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 0 ;;
-    21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
-       exit 0 ;;
-    Amiga*:UNIX_System_V:4.0:*)
-       echo m68k-unknown-sysv4
-       exit 0;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-amigaos
-       exit 0 ;;
-    *:OS/390:*:*)
-       echo i370-ibm-openedition
-       exit 0 ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-       echo arm-acorn-riscix${UNAME_RELEASE}
-       exit 0;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-       echo hppa1.1-hitachi-hiuxmpp
-       exit 0;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-       # akee@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 0 ;;
-    NILE*:*:*:dcosx)
-       echo pyramid-pyramid-svr4
-       exit 0 ;;
-    sun4H:SunOS:5.*:*)
-       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit 0 ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit 0 ;;
-    i86pc:SunOS:5.*:*)
-       echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit 0 ;;
-    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 0 ;;
-    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 0 ;;
-    sun3*:SunOS:*:*)
-       echo m68k-sun-sunos${UNAME_RELEASE}
-       exit 0 ;;
-    sun*:*:4.2BSD:*)
-       UNAME_RELEASE=`(head -1 /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 0 ;;
-    aushp:SunOS:*:*)
-       echo sparc-auspex-sunos${UNAME_RELEASE}
-       exit 0 ;;
-    # 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 0 ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-        exit 0 ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-       exit 0 ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit 0 ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit 0 ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit 0 ;;
-    powerpc:machten:*:*)
-       echo powerpc-apple-machten${UNAME_RELEASE}
-       exit 0 ;;
-    RISC*:Mach:*:*)
-       echo mips-dec-mach_bsd4.3
-       exit 0 ;;
-    RISC*:ULTRIX:*:*)
-       echo mips-dec-ultrix${UNAME_RELEASE}
-       exit 0 ;;
-    VAX*:ULTRIX*:*:*)
-       echo vax-dec-ultrix${UNAME_RELEASE}
-       exit 0 ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-       echo clipper-intergraph-clix${UNAME_RELEASE}
-       exit 0 ;;
-    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 $dummy.c -o $dummy \
-         && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
-         && rm -f $dummy.c $dummy && exit 0
-       rm -f $dummy.c $dummy
-       echo mips-mips-riscos${UNAME_RELEASE}
-       exit 0 ;;
-    Motorola:PowerMAX_OS:*:*)
-       echo powerpc-motorola-powermax
-       exit 0 ;;
-    Night_Hawk:Power_UNIX:*:*)
-       echo powerpc-harris-powerunix
-       exit 0 ;;
-    m88k:CX/UX:7*:*)
-       echo m88k-harris-cxux7
-       exit 0 ;;
-    m88k:*:4*:R4*)
-       echo m88k-motorola-sysv4
-       exit 0 ;;
-    m88k:*:3*:R3*)
-       echo m88k-motorola-sysv3
-       exit 0 ;;
-    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 0 ;;
-    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
-       echo m88k-dolphin-sysv3
-       exit 0 ;;
-    M88*:*:R3*:*)
-       # Delta 88k system running SVR3
-       echo m88k-motorola-sysv3
-       exit 0 ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-       echo m88k-tektronix-sysv3
-       exit 0 ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-       echo m68k-tektronix-bsd
-       exit 0 ;;
-    *:IRIX*:*:*)
-       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-       exit 0 ;;
-    ????????: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 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-       echo i386-ibm-aix
-       exit 0 ;;
-    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 0 ;;
-    *: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
-               $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
-               rm -f $dummy.c $dummy
-               echo rs6000-ibm-aix3.2.5
-       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 0 ;;
-    *:AIX:*:[45])
-       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | 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 0 ;;
-    *:AIX:*:*)
-       echo rs6000-ibm-aix
-       exit 0 ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-       echo romp-ibm-bsd4.4
-       exit 0 ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-       exit 0 ;;                           # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-       echo rs6000-bull-bosx
-       exit 0 ;;
-    DPX/2?00:B.O.S.:*:*)
-       echo m68k-bull-sysv3
-       exit 0 ;;
-    9000/[34]??:4.3bsd:1.*:*)
-       echo m68k-hp-bsd
-       exit 0 ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-       echo m68k-hp-bsd4.4
-       exit 0 ;;
-    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 $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy`
-                   if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
-                   rm -f $dummy.c $dummy
-               fi ;;
-       esac
-       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-       exit 0 ;;
-    ia64:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       echo ia64-hp-hpux${HPUX_REV}
-       exit 0 ;;
-    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 $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
-       rm -f $dummy.c $dummy
-       echo unknown-hitachi-hiuxwe2
-       exit 0 ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-       echo hppa1.1-hp-bsd
-       exit 0 ;;
-    9000/8??:4.3bsd:*:*)
-       echo hppa1.0-hp-bsd
-       exit 0 ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-       echo hppa1.0-hp-mpeix
-       exit 0 ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-       echo hppa1.1-hp-osf
-       exit 0 ;;
-    hp8??:OSF1:*:*)
-       echo hppa1.0-hp-osf
-       exit 0 ;;
-    i*86:OSF1:*:*)
-       if [ -x /usr/sbin/sysversion ] ; then
-           echo ${UNAME_MACHINE}-unknown-osf1mk
-       else
-           echo ${UNAME_MACHINE}-unknown-osf1
-       fi
-       exit 0 ;;
-    parisc*:Lites*:*:*)
-       echo hppa1.1-hp-lites
-       exit 0 ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-       echo c1-convex-bsd
-        exit 0 ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-       if getsysinfo -f scalar_acc
-       then echo c32-convex-bsd
-       else echo c2-convex-bsd
-       fi
-        exit 0 ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-       echo c34-convex-bsd
-        exit 0 ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-       echo c38-convex-bsd
-        exit 0 ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-       echo c4-convex-bsd
-        exit 0 ;;
-    CRAY*X-MP:*:*:*)
-       echo xmp-cray-unicos
-        exit 0 ;;
-    CRAY*Y-MP:*:*:*)
-       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit 0 ;;
-    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 0 ;;
-    CRAY*TS:*:*:*)
-       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit 0 ;;
-    CRAY*T3D:*:*:*)
-       echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit 0 ;;
-    CRAY*T3E:*:*:*)
-       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit 0 ;;
-    CRAY*SV1:*:*:*)
-       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit 0 ;;
-    CRAY-2:*:*:*)
-       echo cray2-cray-unicos
-        exit 0 ;;
-    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 0 ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-       exit 0 ;;
-    sparc*:BSD/OS:*:*)
-       echo sparc-unknown-bsdi${UNAME_RELEASE}
-       exit 0 ;;
-    *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-       exit 0 ;;
-    *:FreeBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-       exit 0 ;;
-    i*:CYGWIN*:*)
-       echo ${UNAME_MACHINE}-pc-cygwin
-       exit 0 ;;
-    i*:MINGW*:*)
-       echo ${UNAME_MACHINE}-pc-mingw32
-       exit 0 ;;
-    i*:PW*:*)
-       echo ${UNAME_MACHINE}-pc-pw32
-       exit 0 ;;
-    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 i386-pc-interix
-       exit 0 ;;
-    i*:UWIN*:*)
-       echo ${UNAME_MACHINE}-pc-uwin
-       exit 0 ;;
-    p*:CYGWIN*:*)
-       echo powerpcle-unknown-cygwin
-       exit 0 ;;
-    prep*:SunOS:5.*:*)
-       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit 0 ;;
-    *:GNU:*:*)
-       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-       exit 0 ;;
-    i*86:Minix:*:*)
-       echo ${UNAME_MACHINE}-pc-minix
-       exit 0 ;;
-    arm*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit 0 ;;
-    ia64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux
-       exit 0 ;;
-    m68*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit 0 ;;
-    mips:Linux:*:*)
-       case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
-         big)    echo mips-unknown-linux-gnu && exit 0 ;;
-         little) echo mipsel-unknown-linux-gnu && exit 0 ;;
-       esac
-       ;;
-    ppc:Linux:*:*)
-       echo powerpc-unknown-linux-gnu
-       exit 0 ;;
-    ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-gnu
-       exit 0 ;;
-    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 0 ;;
-    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 0 ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-gnu
-       exit 0 ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-       echo ${UNAME_MACHINE}-ibm-linux
-       exit 0 ;;
-    sh*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit 0 ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit 0 ;;
-    x86_64:Linux:*:*)
-       echo x86_64-unknown-linux-gnu
-       exit 0 ;;
-    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.
-       ld_supported_targets=`cd /; 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 0 ;;               
-         coff-i386)
-               echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-               exit 0 ;;
-         "")
-               # 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 0 ;;
-       esac
-       # Determine whether the default compiler is a.out or elf
-       eval $set_cc_for_build
-       cat >$dummy.c <<EOF
-#include <features.h>
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-       int main (int argc, char *argv[]) {
-#else
-       int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __ELF__
-# ifdef __GLIBC__
-#  if __GLIBC__ >= 2
-    printf ("%s-pc-linux-gnu\n", argv[1]);
-#  else
-    printf ("%s-pc-linux-gnulibc1\n", argv[1]);
-#  endif
-# else
-   printf ("%s-pc-linux-gnulibc1\n", argv[1]);
-# endif
-#else
-  printf ("%s-pc-linux-gnuaout\n", argv[1]);
-#endif
-  return 0;
-}
-EOF
-       $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
-       rm -f $dummy.c $dummy
-       test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
-       ;;
-    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 0 ;;
-    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 0 ;;
-    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 0 ;;
-    i*86:*:5:[78]*)
-       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 0 ;;
-    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|egrep Release|sed -e 's/.*= //')`
-               (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
-               (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
-                       && UNAME_MACHINE=i586
-               (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
-                       && UNAME_MACHINE=i686
-               (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
-                       && UNAME_MACHINE=i686
-               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-       else
-               echo ${UNAME_MACHINE}-pc-sysv32
-       fi
-       exit 0 ;;
-    i*86:*DOS:*:*)
-       echo ${UNAME_MACHINE}-pc-msdosdjgpp
-       exit 0 ;;
-    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 0 ;;
-    Intel:Mach:3*:*)
-       echo i386-pc-mach3
-       exit 0 ;;
-    paragon:*:*:*)
-       echo i860-intel-osf1
-       exit 0 ;;
-    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 0 ;;
-    mini*:CTIX:SYS*5:*)
-       # "miniframe"
-       echo m68010-convergent-sysv
-       exit 0 ;;
-    M68*:*:R3V[567]*:*)
-       test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*: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 0
-       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-         && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && echo i486-ncr-sysv4 && exit 0 ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-       echo m68k-unknown-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-    mc68030:UNIX_System_V:4.*:*)
-       echo m68k-atari-sysv4
-       exit 0 ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
-       echo i386-unknown-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-    TSUNAMI:LynxOS:2.*:*)
-       echo sparc-unknown-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-    rs6000:LynxOS:2.*:*)
-       echo rs6000-unknown-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
-       echo powerpc-unknown-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-    SM[BE]S:UNIX_SV:*:*)
-       echo mips-dde-sysv${UNAME_RELEASE}
-       exit 0 ;;
-    RM*:ReliantUNIX-*:*:*)
-       echo mips-sni-sysv4
-       exit 0 ;;
-    RM*:SINIX-*:*:*)
-       echo mips-sni-sysv4
-       exit 0 ;;
-    *: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 0 ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit 0 ;;
-    *:UNIX_System_V:4*:FTX*)
-       # From Gerald Hewes <hewes@openmarket.com>.
-       # How about differentiating between stratus architectures? -djm
-       echo hppa1.1-stratus-sysv4
-       exit 0 ;;
-    *:*:*:FTX*)
-       # From seanf@swdc.stratus.com.
-       echo i860-stratus-sysv4
-       exit 0 ;;
-    *:VOS:*:*)
-       # From Paul.Green@stratus.com.
-       echo hppa1.1-stratus-vos
-       exit 0 ;;
-    mc68*:A/UX:*:*)
-       echo m68k-apple-aux${UNAME_RELEASE}
-       exit 0 ;;
-    news*:NEWS-OS:6*:*)
-       echo mips-sony-newsos6
-       exit 0 ;;
-    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 0 ;;
-    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
-       echo powerpc-be-beos
-       exit 0 ;;
-    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
-       echo powerpc-apple-beos
-       exit 0 ;;
-    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
-       echo i586-pc-beos
-       exit 0 ;;
-    SX-4:SUPER-UX:*:*)
-       echo sx4-nec-superux${UNAME_RELEASE}
-       exit 0 ;;
-    SX-5:SUPER-UX:*:*)
-       echo sx5-nec-superux${UNAME_RELEASE}
-       exit 0 ;;
-    Power*:Rhapsody:*:*)
-       echo powerpc-apple-rhapsody${UNAME_RELEASE}
-       exit 0 ;;
-    *:Rhapsody:*:*)
-       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-       exit 0 ;;
-    *:Darwin:*:*)
-       echo `uname -p`-apple-darwin${UNAME_RELEASE}
-       exit 0 ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-       if test "${UNAME_MACHINE}" = "x86pc"; then
-               UNAME_MACHINE=pc
-       fi
-       echo `uname -p`-${UNAME_MACHINE}-nto-qnx
-       exit 0 ;;
-    *:QNX:*:4*)
-       echo i386-pc-qnx
-       exit 0 ;;
-    NSR-[KW]:NONSTOP_KERNEL:*:*)
-       echo nsr-tandem-nsk${UNAME_RELEASE}
-       exit 0 ;;
-    *:NonStop-UX:*:*)
-       echo mips-compaq-nonstopux
-       exit 0 ;;
-    BS2000:POSIX*:*:*)
-       echo bs2000-siemens-sysv
-       exit 0 ;;
-    DS/*:UNIX_System_V:*:*)
-       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-       exit 0 ;;
-    *: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 0 ;;
-    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 0 ;;
-    *:TOPS-10:*:*)
-       echo pdp10-unknown-tops10
-       exit 0 ;;
-    *:TENEX:*:*)
-       echo pdp10-unknown-tenex
-       exit 0 ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-       echo pdp10-dec-tops20
-       exit 0 ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-       echo pdp10-xkl-tops20
-       exit 0 ;;
-    *:TOPS-20:*:*)
-       echo pdp10-unknown-tops20
-       exit 0 ;;
-    *:ITS:*:*)
-       echo pdp10-unknown-its
-       exit 0 ;;
-    i*86:XTS-300:*:STOP)
-       echo ${UNAME_MACHINE}-unknown-stop
-       exit 0 ;;
-    i*86:atheos:*:*)
-       echo ${UNAME_MACHINE}-unknown-atheos
-       exit 0 ;;
-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"); 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 $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
-rm -f $dummy.c $dummy
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# 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 0 ;;
-    c2*)
-       if getsysinfo -f scalar_acc
-       then echo c32-convex-bsd
-       else echo c2-convex-bsd
-       fi
-       exit 0 ;;
-    c34*)
-       echo c34-convex-bsd
-       exit 0 ;;
-    c38*)
-       echo c38-convex-bsd
-       exit 0 ;;
-    c4*)
-       echo c4-convex-bsd
-       exit 0 ;;
-    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
-
-    ftp://ftp.gnu.org/pub/gnu/config/
-
-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@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/helm/minidom/config.sub b/helm/minidom/config.sub
deleted file mode 100644 (file)
index 2479469..0000000
+++ /dev/null
@@ -1,1417 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-#   Free Software Foundation, Inc.
-
-timestamp='2001-11-08'
-
-# 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., 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.
-
-# Please send patches to <config-patches@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@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-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 0 ;;
-    --version | -v )
-       echo "$version" ; exit 0 ;;
-    --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
-    -- )     # 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 0;;
-
-    * )
-       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* | storm-chaos* | os2-emx* | windows32-*)
-    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)
-               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
-               ;;
-       -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/'`
-               ;;
-       -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] \
-       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
-       | c4x | clipper \
-       | d10v | d30v | dsp16xx \
-       | fr30 \
-       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-       | i370 | i860 | i960 | ia64 \
-       | m32r | m68000 | m68k | m88k | mcore \
-       | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
-       | mips64vr4100 | mips64vr4100el | mips64vr4300 \
-       | mips64vr4300el | mips64vr5000 | mips64vr5000el \
-       | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
-       | mipsisa32 \
-       | mn10200 | mn10300 \
-       | ns16k | ns32k \
-       | openrisc \
-       | pdp10 | pdp11 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
-       | pyramid \
-       | sh | sh[34] | sh[34]eb | shbe | shle \
-       | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
-       | strongarm \
-       | tahoe | thumb | tic80 | tron \
-       | v850 \
-       | we32k \
-       | x86 | xscale | xstormy16 \
-       | 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)
-               ;;
-
-       # 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]-* \
-       | alphapca5[67]-* | arc-* \
-       | arm-*  | armbe-* | armle-* | armv*-* \
-       | avr-* \
-       | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c54x-* \
-       | clipper-* | cray2-* | cydra-* \
-       | d10v-* | d30v-* \
-       | elxsi-* \
-       | f30[01]-* | f700-* | fr30-* | fx80-* \
-       | h8300-* | h8500-* \
-       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-       | i*86-* | i860-* | i960-* | ia64-* \
-       | m32r-* \
-       | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | mcore-* \
-       | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
-       | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
-       | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
-       | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
-       | none-* | np1-* | ns16k-* | ns32k-* \
-       | orion-* \
-       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
-       | pyramid-* \
-       | romp-* | rs6000-* \
-       | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
-       | sparc-* | sparc64-* | sparc86x-* | sparclite-* \
-       | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* \
-       | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
-       | v850-* | vax-* \
-       | we32k-* \
-       | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* | xstormy16-* \
-       | 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
-               ;;
-       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
-               ;;
-       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
-               ;;
-       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 | ymp)
-               basic_machine=ymp-cray
-               os=-unicos
-               ;;
-       cray2)
-               basic_machine=cray2-cray
-               os=-unicos
-               ;;
-       [cjt]90)
-               basic_machine=${basic_machine}-cray
-               os=-unicos
-               ;;
-       crds | unos)
-               basic_machine=m68k-crds
-               ;;
-       cris | cris-* | etrax*)
-               basic_machine=cris-axis
-               ;;
-       da30 | da30-*)
-               basic_machine=m68k-da30
-               ;;
-       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-               basic_machine=mips-dec
-               ;;
-       delta | 3300 | motorola-3300 | motorola-delta \
-             | 3300-motorola | delta-motorola)
-               basic_machine=m68k-motorola
-               ;;
-       delta88)
-               basic_machine=m88k-motorola
-               os=-sysv3
-               ;;
-       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
-               ;;
-       mipsel*-linux*)
-               basic_machine=mipsel-unknown
-               os=-linux-gnu
-               ;;
-       mips*-linux*)
-               basic_machine=mips-unknown
-               os=-linux-gnu
-               ;;
-       mips3*-*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-               ;;
-       mips3*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-               ;;
-       mmix*)
-               basic_machine=mmix-knuth
-               os=-mmixware
-               ;;
-       monitor)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       msdos)
-               basic_machine=i386-pc
-               os=-msdos
-               ;;
-       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
-               ;;
-       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
-               ;;
-       pentium | p5 | k5 | k6 | nexgen | viac3)
-               basic_machine=i586-pc
-               ;;
-       pentiumpro | p6 | 6x86 | athlon)
-               basic_machine=i686-pc
-               ;;
-       pentiumii | pentium2)
-               basic_machine=i686-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-*)
-               basic_machine=i686-`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
-               ;;
-       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
-               ;;
-       sequent)
-               basic_machine=i386-sequent
-               ;;
-       sh)
-               basic_machine=sh-hitachi
-               os=-hms
-               ;;
-       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=t3e-cray
-               os=-unicos
-               ;;
-       tic54x | c54x*)
-               basic_machine=tic54x-unknown
-               os=-coff
-               ;;
-       tx39)
-               basic_machine=mipstx39-unknown
-               ;;
-       tx39el)
-               basic_machine=mipstx39el-unknown
-               ;;
-       tower | tower-32)
-               basic_machine=m68k-ncr
-               ;;
-       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
-               ;;
-       windows32)
-               basic_machine=i386-pc
-               os=-windows32-msvcrt
-               ;;
-       xmp)
-               basic_machine=xmp-cray
-               os=-unicos
-               ;;
-        xps | xps100)
-               basic_machine=xps100-honeywell
-               ;;
-       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
-               ;;
-       mips)
-               if [ x$os = x-linux-gnu ]; then
-                       basic_machine=mips-unknown
-               else
-                       basic_machine=mips-mips
-               fi
-               ;;
-       romp)
-               basic_machine=romp-ibm
-               ;;
-       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
-               ;;
-       sh3 | sh4 | sh3eb | sh4eb)
-               basic_machine=sh-unknown
-               ;;
-       sparc | sparcv9 | sparcv9b)
-               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
-               ;;
-       c4x*)
-               basic_machine=c4x-none
-               os=-coff
-               ;;
-       *-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* | -netbsd* | -openbsd* | -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* | -uxpv* | -beos* | -mpeix* | -udk* \
-             | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
-             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-             | -os2* | -vos* | -palmos* | -uclinux*)
-       # Remember, each alternative MUST END IN *, to match a version number.
-               ;;
-       -qnx*)
-               case $basic_machine in
-                   x86-* | i*86-*)
-                       ;;
-                   *)
-                       os=-nto$os
-                       ;;
-               esac
-               ;;
-       -nto*)
-               os=-nto-qnx
-               ;;
-       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-             | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
-             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-               ;;
-       -mac*)
-               os=`echo $os | sed -e 's|mac|macos|'`
-               ;;
-       -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
-               ;;
-       -wince*)
-               os=-wince
-               ;;
-       -osfrose*)
-               os=-osfrose
-               ;;
-       -osf*)
-               os=-osf
-               ;;
-       -utek*)
-               os=-bsd
-               ;;
-       -dynix*)
-               os=-bsd
-               ;;
-       -acis*)
-               os=-aos
-               ;;
-       -386bsd)
-               os=-bsd
-               ;;
-       -ctix* | -uts*)
-               os=-sysv
-               ;;
-       -ns2 )
-               os=-nextstep2
-               ;;
-       -nsk*)
-               os=-nsk
-               ;;
-       # Preserve the version number of sinix5.
-       -sinix5.*)
-               os=`echo $os | sed -e 's|sinix|sysv|'`
-               ;;
-       -sinix*)
-               os=-sysv4
-               ;;
-       -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
-               ;;
-       -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
-       *-acorn)
-               os=-riscix1.2
-               ;;
-       arm*-rebel)
-               os=-linux
-               ;;
-       arm*-semi)
-               os=-aout
-               ;;
-       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
-               ;;
-       *-tti)  # must be before sparc entry or we get the wrong os.
-               os=-sysv3
-               ;;
-       sparc-* | *-sun)
-               os=-sunos4.1.1
-               ;;
-       *-be)
-               os=-beos
-               ;;
-       *-ibm)
-               os=-aix
-               ;;
-       *-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
-                               ;;
-                       -ptx*)
-                               vendor=sequent
-                               ;;
-                       -vxsim* | -vxworks*)
-                               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 0
-
-# 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/helm/minidom/configure.in b/helm/minidom/configure.in
deleted file mode 100644 (file)
index c6067b0..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_INIT(minidom.c)
-
-MINIDOM_MAJOR_VERSION=0
-MINIDOM_MINOR_VERSION=1
-MINIDOM_MICRO_VERSION=4
-MINIDOM_VERSION=$MINIDOM_MAJOR_VERSION.$MINIDOM_MINOR_VERSION.$MINIDOM_MICRO_VERSION
-MINIDOM_VERSION_INFO=`expr $MINIDOM_MAJOR_VERSION + $MINIDOM_MINOR_VERSION`:$MINIDOM_MICRO_VERSION:$MINIDOM_MINOR_VERSION
-
-AC_SUBST(MINIDOM_VERSION)
-AC_SUBST(MINIDOM_VERSION_INFO)
-
-AC_ARG_WITH(
-       libxml2,
-       [  --with-libxml2[=ARG]    compile with libxml 2.x library [default=auto]],
-       libxml2=$withval,
-       libxml2="auto"
-)
-
-AM_INIT_AUTOMAKE(minidom, $MINIDOM_VERSION)
-AM_CONFIG_HEADER(config.h)
-AM_PROG_LIBTOOL
-
-dnl Checks for programs.
-AC_PROG_CC
-AC_LANG_C
-AC_PROG_RANLIB
-
-dnl Checks for libraries.
-AC_CHECK_LIB(glib, g_malloc,
-       [
-               CFLAGS="$CFLAGS `glib-config --cflags`"
-               CXXFLAGS="$CXXFLAGS `glib-config --cflags`"
-               LIBS="$LIBS `glib-config --libs`"
-       ],
-       AC_MSG_ERROR(cound not find glib),
-       `glib-config --libs`
-)
-
-AC_CHECK_PROG(XML_CONFIG, xml2-config, xml2-config, no)
-if test $XML_CONFIG = "no"; then
-       AC_CHECK_PROG(XML_CONFIG, xml-config, xml-config, no)
-fi
-AC_SUBST(XML_CONFIG)
-
-if test $XML_CONFIG = "no"; then
-       AC_MSG_ERROR(could not find configuration script for libxml)
-fi
-
-if test $XML_CONFIG = "xml2-config" -a $libxml2 = "auto"; then
-       libxml2="yes"
-fi
-
-CFLAGS="$CFLAGS `$XML_CONFIG --cflags`"
-CXXFLAGS="$CXXFLAGS `$XML_CONFIG --cflags`"
-LIBS="$LIBS `$XML_CONFIG --libs`"
-
-dnl if the user gave no explicit libxml2 option, try to guess its value
-if test $libxml2 = "auto"; then
-       AC_MSG_CHECKING(for libxml version 2)
-       AC_TRY_COMPILE(
-               [#include <parser.h>],
-               [
-                       xmlEntity e;
-                       e.etype = e.etype;
-               ],
-               [
-                       AC_DEFINE(HAVE_LIBXML2)
-                       AC_MSG_RESULT(maybe)
-               ],
-               AC_MSG_RESULT(no)
-       )
-elif test $libxml2 = "yes"; then
-       AC_DEFINE(HAVE_LIBXML2)
-fi
-
-dnl Checks for header files.
-
-AC_OUTPUT([
- Makefile
- minidom.spec
-])
diff --git a/helm/minidom/debian/README.helm b/helm/minidom/debian/README.helm
deleted file mode 100644 (file)
index d899a74..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-To obtain a *clean* debianized source tree from which invoke debuild,
-dpkg-buildpackage or so, run debian/debianize.helm from the root directory of
-this module.
-
-Next change to that dir and have fun with debian packaging!
-
--- Zack <zack@debian.org>
diff --git a/helm/minidom/debian/autopippe.helm b/helm/minidom/debian/autopippe.helm
deleted file mode 100644 (file)
index 9c5e5e7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-aclocal
-autoheader
-automake -a
-automake -a
-autoconf
diff --git a/helm/minidom/debian/changelog b/helm/minidom/debian/changelog
deleted file mode 100644 (file)
index 55032b9..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-minidom (0.1.3-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Stefano Zacchiroli <zack@debian.org>  Mon, 12 Nov 2001 17:26:18 +0100
-
-minidom (0.1.2-2) unstable; urgency=low
-
-  * upgraded config.sub and config.guess in order to support hppa and other
-    architectures (closes: Bug#103063, Bug#103351)
-
- -- Stefano Zacchiroli <zack@debian.org>  Wed,  4 Jul 2001 19:04:24 +0200
-
-minidom (0.1.2-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Stefano Zacchiroli <zack@debian.org>  Tue, 22 May 2001 14:18:19 +0200
-
-minidom (0.1.0-3) unstable; urgency=low
-
-  * Changed section of libminidom0 and libminidom-dev
-
- -- Stefano Zacchiroli (Zack) <zack@debian.org>  Mon, 19 Feb 2001 21:25:26 +0100
-
-minidom (0.1.0-2) unstable; urgency=low
-
-  * Removed zero sized files and unnecessary extra license info
-
- -- Stefano Zacchiroli (Zack) <zack@debian.org>  Thu,  1 Feb 2001 18:37:12 +0100
-
-minidom (0.1.0-1) unstable; urgency=low
-
-  * Initial Release.
-
- -- Stefano Zacchiroli (Zack) <zack@debian.org>  Sun, 21 Jan 2001 18:24:26 +0100
-
-Local variables:
-mode: debian-changelog
-End:
diff --git a/helm/minidom/debian/control b/helm/minidom/debian/control
deleted file mode 100644 (file)
index 1914d0e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-Source: minidom
-Section: devel
-Priority: optional
-Maintainer: Stefano Zacchiroli (Zack) <zack@debian.org>
-Build-Depends: debhelper (>> 2.0.0), libxml2-dev, libglib1.2-dev
-Standards-Version: 3.2.1
-
-Package: libminidom0
-Section: libs
-Architecture: any
-Depends: ${shlibs:Depends}
-Description: A minimal implementation of the Document Object Model
- Minidom is a minimal implementation of the Document Object Model.
- This package include the shared library.
-
-Package: libminidom-dev
-Section: devel
-Architecture: any
-Depends: libminidom0 (= ${Source-Version}), libc6-dev
-Description: A minimal implementation of the Document Object Model
- Minidom is a minimal implementation of the Document Object Model.
- This package includes the development and runtime support files.
-
diff --git a/helm/minidom/debian/copyright b/helm/minidom/debian/copyright
deleted file mode 100644 (file)
index 5acf272..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-This package was debianized by Stefano Zacchiroli <zacchiro@cs.unibo.it> on
-Sun, 21 Jan 2001 18:24:26 +0100.
-
-It was packed from source obtained via cvs, with this CVSROOT:
-       :pserver:anonymous@phd.cs.unibo.it:/home/lpadovan/PHELM/
-
-Upstream Author(s): Luca Padovani <luca.padovani@cs.unibo.it>
-
-Copyright:
- 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.
-
- On Debian GNU/Linux systems, the complete text of the GNU General
- Public License can be found in `/usr/share/common-licenses/GPL'.
- The GNU Public Licenses in /usr/share/common-licenses were taken from
- ftp.gnu.org and are copyrighted by the Free Software Foundation, Inc.
-
diff --git a/helm/minidom/debian/debianize.helm b/helm/minidom/debian/debianize.helm
deleted file mode 100755 (executable)
index 5bdbe17..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/bin/sh
-
-# HELM project convenience script
-#
-# call this as "debian/debianize.helm" to convert a checked out CVS
-# module to a debianize source tree ready to be called against debuild
-# or dpkg-buildpackage
-#
-# Stefano "Zack" Zacchiroli <zack@cs.unibo.it>
-# Sun Nov 25 16:50:10 CET 2001
-
-NAME="MINIDOM" # package name in configure.in's opinion
-CONFIGURE_IN="configure.in"   # configure.in
-
-# TAR="tar"
-# TARFLAGS="-cz"   # tar flags used when creating source package
-
-if [ -z $NAME ]; then
-   echo "Please edit me and configure the 'NAME' parameter."
-   exit 1
-fi
-
-   # parse version number from configure.in
-echo "Retrieving version number from $CONFIGURE_IN ..."
-VERSION=""
-for v in MAJOR MINOR MICRO; do
-   T=`grep "$NAME\_$v\_VERSION\=" $CONFIGURE_IN`
-   T=`echo $T | sed -e 's/.*=//'`
-   if [ -z $VERSION ]; then
-      VERSION=$T
-   else
-      VERSION="$VERSION.$T"
-   fi
-done
-echo "Version number is: $VERSION"
-
-   # create a new working dir named with the "name-version" schema
-echo "Creating debianized source tree ..."
-OLDDIR=`basename \`pwd\``
-NEWDIR="$OLDDIR-$VERSION"
-cd ..
-if [ -d $NEWDIR ]; then
-   echo "'../$NEWDIR' already exists, please remove it before continue"
-   exit 1
-fi
-cp -r $OLDDIR $NEWDIR
-cd $NEWDIR
-echo "Debianized source tree starts at `pwd`"
-
-   # autopippe: autoconf, automake, aclocal, ...
-echo "Executing auto-* tools ..."
-source debian/autopippe.helm
-echo "auto-* executed!"
-
-   # remove CVS related files, and other garbage
-echo "Removing garbage files ..."
-find . -regex '.*\.cvsignore' -exec rm -f {} \;
-find . -regex '.*CVS.*' -and -type d -exec rm -rf {} \;
-GARBAGES=`egrep -v '^#' debian/garbage.helm`
-for p in $GARBAGES; do
-   find . -name $p -exec rm -f {} \;
-done
-echo "Garbage removed!"
-
-   # fix remote symlinks
-echo "Dereferencing absolute symlinks ..."
-PWD=`pwd`
-for l in `find . -type l -maxdepth 1`; do # loop on symlink in this dir
-   SOURCE=$l
-   TARGET=`readlink $l`
-   if `echo $TARGET | egrep "^/" > /dev/null`; then
-      echo "$SOURCE -> $TARGET"
-      rm -f $SOURCE
-      cp $TARGET $SOURCE
-   fi # if symlink does not begin with "/" then it is relative
-done
-echo "Dereferencing done!"
-
-   # upgrade debian changelog
-echo "Upgrading debian changelog version to $VERSION ..."
-dch --newversion $VERSION
-echo "Debian changelog upgraded!"
-
-#    # build debian native source package
-# echo -n "Building debian (native) source package: "
-# DEBVERSION=`dpkg-parsechangelog -ldebian/changelog | egrep '^Version: ' | sed -e 's/Version: //'`
-# DEBNAME=`dpkg-parsechangelog -ldebian/changelog | egrep '^Source: ' | sed -e 's/Source: //'`
-# SOURCEPKGFILE="$DEBNAME""_""$DEBVERSION.tar.gz"
-# echo "../$SOURCEPKGFILE"
-# cd ..
-# $TAR $TARFLAGS -f $SOURCEPKGFILE $NEWDIR
-
-echo
-echo "Debianization is over."
-echo "Please change to ../$NEWDIR in order to build the debian package."
-
-
diff --git a/helm/minidom/debian/docs b/helm/minidom/debian/docs
deleted file mode 100644 (file)
index 7d96d4e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-AUTHORS
-TODO
diff --git a/helm/minidom/debian/garbage.helm b/helm/minidom/debian/garbage.helm
deleted file mode 100644 (file)
index 3542a1b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-# find patterns; files that match will be removed from debian package.
-*.helm
diff --git a/helm/minidom/debian/libminidom-dev.files b/helm/minidom/debian/libminidom-dev.files
deleted file mode 100644 (file)
index afb977f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-usr/lib/*.so
-usr/lib/*.a
-usr/lib/*.la
-usr/include/
-usr/bin/
diff --git a/helm/minidom/debian/libminidom-dev.undocumented b/helm/minidom/debian/libminidom-dev.undocumented
deleted file mode 100644 (file)
index 8d08f8e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-minidom-config.1
diff --git a/helm/minidom/debian/libminidom0.files b/helm/minidom/debian/libminidom0.files
deleted file mode 100644 (file)
index 093956b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/*.so.*
diff --git a/helm/minidom/debian/libminidom0.postinst b/helm/minidom/debian/libminidom0.postinst
deleted file mode 100644 (file)
index 1b6c8ba..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#! /bin/sh
-# postinst script for libminidom0
-#
-# see: dh_installdeb(1)
-
-set -e
-
-# summary of how this script can be called:
-#        * <postinst> `configure' <most-recently-configured-version>
-#        * <old-postinst> `abort-upgrade' <new version>
-#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
-#          <new-version>
-#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
-#          <failed-install-package> <version> `removing'
-#          <conflicting-package> <version>
-# for details, see /usr/share/doc/packaging-manual/
-#
-# quoting from the policy:
-#     Any necessary prompting should almost always be confined to the
-#     post-installation script, and should be protected with a conditional
-#     so that unnecessary prompting doesn't happen if a package's
-#     installation fails and the `postinst' is called with `abort-upgrade',
-#     `abort-remove' or `abort-deconfigure'.
-
-case "$1" in
-    configure)
-       ldconfig
-    ;;
-
-    abort-upgrade|abort-remove|abort-deconfigure)
-
-    ;;
-
-    *)
-        echo "postinst called with unknown argument \`$1'" >&2
-        exit 0
-    ;;
-esac
-
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
-
-#DEBHELPER#
-
-exit 0
-
-
diff --git a/helm/minidom/debian/rules b/helm/minidom/debian/rules
deleted file mode 100755 (executable)
index 8ff12e4..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/make -f
-# Sample debian/rules that uses debhelper.
-# GNU copyright 1997 to 1999 by Joey Hess.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-# This is the debhelper compatability version to use.
-export DH_COMPAT=2
-
-# shared library versions, option 1
-#version=0.1.0
-#major=0
-# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so
-version=`ls src/.libs/lib*.so.* | \
-       awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'`
-major=`ls src/.libs/lib*.so.* | \
-       awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'`
-
-configure: configure-stamp
-configure-stamp:
-       dh_testdir
-       # Add here commands to configure the package.
-       ./configure --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info
-
-       touch configure-stamp
-
-build: configure-stamp build-stamp
-build-stamp:
-       dh_testdir
-
-       # Add here commands to compile the package.
-       $(MAKE)
-
-       touch build-stamp
-
-clean:
-       dh_testdir
-       dh_testroot
-       rm -f build-stamp configure-stamp
-
-       # Add here commands to clean up after the build process.
-       -$(MAKE) distclean
-
-       dh_clean
-
-install: build
-       dh_testdir
-       dh_testroot
-       dh_clean -k
-       dh_installdirs
-
-       # Add here commands to install the package into debian/minidom.
-       $(MAKE) install prefix=$(CURDIR)/debian/tmp/usr
-
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
-       dh_testdir
-       dh_testroot
-       #
-       # build libminidom${major} package by moving files from minidom-dev
-       #
-#      dh_movefiles -plibminidom$(major)             \
-#      usr/lib/libminidom.so.$(major)        \
-#      usr/lib/libminidom.so.$(version)
-#      dh_movefiles get file contents from debian/*.files
-       dh_movefiles
-
-#      dh_installdebconf       
-       dh_installdocs
-       dh_installexamples
-       dh_installmenu
-#      dh_installemacsen
-#      dh_installpam
-#      dh_installinit
-       dh_installcron
-       dh_installmanpages
-       dh_installinfo
-       dh_undocumented
-       dh_installchangelogs ChangeLog
-       dh_link
-       dh_strip
-       dh_compress
-       dh_fixperms
-       # You may want to make some executables suid here.
-#      dh_suidregister
-       dh_makeshlibs
-       dh_installdeb
-#      dh_perl
-       dh_shlibdeps
-       dh_gencontrol
-       dh_md5sums
-       dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/helm/minidom/minidom-config.in b/helm/minidom/minidom-config.in
deleted file mode 100644 (file)
index 5ed3029..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-
-usage()
-{
-       cat <<EOF
-Usage: minidom-config [OPTIONS]
-Options:
-       [--version]
-       [--libs]
-       [--cflags]
-EOF
-       exit $1
-}
-
-if test $# -eq 0; then
-       usage 1 1>&2
-fi
-
-while test $# -gt 0; do
-  case "$1" in
-  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) optarg= ;;
-  esac
-
-  case $1 in
-    --version)
-      echo $VERSION
-      ;;
-    --cflags)
-      echo_cflags=yes
-      ;;
-    --libs)
-      echo_libs=yes
-      ;;
-    *)
-      usage 1 1>&2
-      ;;
-  esac
-  shift
-done
-
-if test "$echo_cflags" = "yes"; then
-    echo `$XML_CONFIG --cflags` -I$pkgincludedir
-fi
-
-if test "$echo_libs" = "yes"; then
-    echo `$XML_CONFIG --libs` -L$libdir -lminidom
-fi      
-
diff --git a/helm/minidom/minidom.c b/helm/minidom/minidom.c
deleted file mode 100644 (file)
index 93cae44..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- * 
- * This file is part of miniDOM, a minimal implementation of the
- * Document Object Model
- * 
- * miniDOM 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.
- * 
- * miniDOM 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 miniDOM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to <luca.padovani@cs.unibo.it>
- */
-
-#include <config.h>
-#include <glib.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-
-#include "minidom.h"
-
-gboolean
-mdom_string_eq(mDOMConstStringRef s1, mDOMConstStringRef s2)
-{
-  g_return_val_if_fail(s1 != NULL, FALSE);
-  g_return_val_if_fail(s2 != NULL, FALSE);
-
-  return strcmp(C_CONST_STRING(s1), C_CONST_STRING(s2)) ? FALSE : TRUE;
-}
-
-mDOMStringRef
-mdom_string_dup(mDOMConstStringRef s)
-{
-  g_return_val_if_fail(s != NULL, NULL);
-  return xmlStrdup(s);
-}
-
-void
-mdom_string_free(mDOMStringRef s)
-{
-  g_free(s);
-}
-
-mDOMDocRef
-mdom_load(const char* file_name, gboolean subst, mDOMEntityResolver entity_resolver)
-{
-  xmlParserCtxtPtr ctxt;
-  mDOMDocRef doc;
-
-  g_return_val_if_fail(file_name != NULL, NULL);
-
-  xmlSubstituteEntitiesDefault(subst);
-  
-  ctxt = xmlCreateFileParserCtxt(file_name);
-  if (ctxt == NULL) return NULL;
-  g_assert(ctxt->sax != NULL);
-  ctxt->sax->getEntity = entity_resolver;
-  
-  xmlParseDocument(ctxt);
-  
-  doc = ctxt->myDoc;
-  xmlFreeParserCtxt(ctxt);
-
-  return doc;
-}
-
-void
-mdom_unload(mDOMDocRef doc)
-{
-  g_return_if_fail(doc != NULL);
-  xmlFreeDoc(doc);
-}
-
-mDOMDocRef
-mdom_doc_new(mDOMConstStringRef version)
-{
-  mDOMDocRef doc;
-  
-  g_return_val_if_fail(version != NULL, NULL);
-  doc = xmlNewDoc(version);
-  g_return_val_if_fail(doc != NULL, NULL);
-
-  doc->extSubset = xmlNewDtd(doc, DOM_CONST_STRING("Entities"), NULL, NULL);
-
-  return doc;
-}
-
-void
-mdom_doc_free(mDOMDocRef doc)
-{
-  g_return_if_fail(doc != NULL);
-  xmlFreeDoc(doc);
-}
-
-mDOMEntityRef
-mdom_doc_add_entity(mDOMDocRef doc, mDOMConstStringRef name, mDOMConstStringRef content)
-{
-  g_return_val_if_fail(doc != NULL, NULL);
-  g_return_val_if_fail(name != NULL, NULL);
-  g_return_val_if_fail(content != NULL, NULL);
-#ifdef HAVE_LIBXML2
-  return xmlAddDtdEntity(doc, name, XML_INTERNAL_GENERAL_ENTITY, NULL, NULL, content);
-#else
-  xmlAddDtdEntity(doc, name, XML_INTERNAL_GENERAL_ENTITY, NULL, NULL, content);
-  return NULL;
-#endif
-}
-
-mDOMEntityRef
-mdom_doc_get_entity(mDOMDocRef doc, mDOMConstStringRef name)
-{
-  g_return_val_if_fail(doc != NULL, NULL);
-  g_return_val_if_fail(name != NULL, NULL);
-  return xmlGetDtdEntity(doc, name);
-}
-
-mDOMEntityRef
-mdom_get_predefined_entity(mDOMConstStringRef name)
-{
-  g_return_val_if_fail(name != NULL, NULL);
-  return xmlGetPredefinedEntity(name);
-}
-
-mDOMConstStringRef
-mdom_entity_get_content(mDOMEntityRef entity)
-{
-  g_return_val_if_fail(entity != NULL, NULL);
-  return entity->content;
-}
-
-mDOMNodeRef
-mdom_doc_get_root_node(mDOMDocRef doc)
-{
-  g_return_val_if_fail(doc != NULL, NULL);
-  return xmlDocGetRootElement(doc);
-}
-
-void
-mdom_node_set_user_data(mDOMNodeRef node, gpointer user_data)
-{
-  g_return_if_fail(node != NULL);
-#ifndef XML_WITHOUT_CORBA
-  node->_private = user_data;
-#else
-  g_assert_not_reached();
-#endif
-}
-
-gpointer
-mdom_node_get_user_data(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, NULL);
-#ifndef XML_WITHOUT_CORBA
-  return node->_private;
-#else
-  g_assert_not_reached();
-#endif
-}
-
-gboolean
-mdom_node_is_text(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, FALSE);
-  return xmlNodeIsText(node) ? TRUE : FALSE;
-}
-
-gboolean
-mdom_node_is_element(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, FALSE);
-  return node->type == XML_ELEMENT_NODE;
-}
-
-gboolean
-mdom_node_is_blank(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, FALSE);
-#ifdef HAVE_LIBXML2
-  return xmlIsBlankNode(node) ? TRUE : FALSE;  
-#else
-  return FALSE;
-#endif
-}
-
-gboolean
-mdom_node_is_entity_ref(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, FALSE);
-  return node->type == XML_ENTITY_REF_NODE;
-}
-
-guint 
-mdom_node_get_type(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, 0);
-  return node->type;
-}
-
-mDOMConstStringRef
-mdom_node_get_name(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, NULL);
-  return node->name;
-}
-
-mDOMConstStringRef
-mdom_node_get_ns_uri(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, NULL);
-  if (node->ns == NULL) return NULL;
-  return node->ns->href;
-}
-
-mDOMStringRef
-mdom_node_get_attribute(mDOMNodeRef node, mDOMConstStringRef name)
-{
-  g_return_val_if_fail(node != NULL, NULL);
-  g_return_val_if_fail(name != NULL, NULL);
-  return xmlGetProp(node, name);
-}
-
-mDOMStringRef
-mdom_node_get_attribute_ns(mDOMNodeRef node, mDOMConstStringRef name, mDOMConstStringRef uri)
-{
-  g_return_val_if_fail(node != NULL, NULL);
-  g_return_val_if_fail(uri != NULL, NULL);
-  g_return_val_if_fail(name != NULL, NULL);
-  g_return_val_if_fail(mdom_node_is_element(node), NULL);
-  return xmlGetNsProp(node, name, uri);
-}
-
-gboolean
-mdom_node_has_attribute(mDOMNodeRef node, mDOMConstStringRef name)
-{
-#ifndef HAVE_LIBXML2
-  mDOMStringRef s = NULL;
-#endif /* HAVE_LIBXML2 */
-  g_return_val_if_fail(node != NULL, FALSE);
-  g_return_val_if_fail(name != NULL, FALSE);
-#ifdef HAVE_LIBXML2
-  return (xmlHasProp(node, name) != NULL) ? TRUE : FALSE;
-#else
-  s = xmlGetProp(node, name);
-  if (s != NULL) {
-    mdom_string_free(s);
-    return TRUE;
-  }
-  return FALSE;
-#endif /* HAVE_LIBXML2 */
-}
-
-gboolean
-mdom_node_has_attribute_ns(mDOMNodeRef node, mDOMConstStringRef name, mDOMConstStringRef uri)
-{
-  g_return_val_if_fail(node != NULL, FALSE);
-  g_return_val_if_fail(name != NULL, FALSE);
-  g_return_val_if_fail(uri != NULL, FALSE);
-#ifdef HAVE_LIBXML2
-  return (xmlHasNsProp(node, name, uri) != NULL) ? TRUE : FALSE;
-#else
-  return FALSE;
-#endif /* HAVE_LIBXML2 */
-}
-
-mDOMStringRef
-mdom_node_get_content(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, NULL);
-  return xmlNodeGetContent(node);
-}
-
-mDOMNodeRef
-mdom_node_get_parent(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, NULL);
-  return node->parent;
-}
-
-mDOMNodeRef
-mdom_node_get_prev_sibling(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, NULL);
-  return node->prev;
-}
-
-mDOMNodeRef
-mdom_node_get_next_sibling(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, NULL);
-  return node->next;
-}
-
-mDOMNodeRef
-mdom_node_get_first_child(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, NULL);
-#ifdef HAVE_LIBXML2
-  return node->children;
-#else
-  return node->childs;
-#endif
-}
-
-mDOMAttrRef
-mdom_node_get_first_attribute(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, NULL);
-  return node->properties;
-}
-
-gboolean
-mdom_node_is_first(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, FALSE);
-  return node->prev == NULL;
-}
-
-gboolean
-mdom_node_is_last(mDOMNodeRef node)
-{
-  g_return_val_if_fail(node != NULL, FALSE);
-  return node->next == NULL;
-}
-
-mDOMConstStringRef
-mdom_attr_get_name(mDOMAttrRef attr)
-{
-  g_return_val_if_fail(attr != NULL, NULL);
-  return attr->name;
-}
-
-mDOMConstStringRef
-mdom_attr_get_ns_uri(mDOMAttrRef attr)
-{
-  g_return_val_if_fail(attr != NULL, NULL);
-  if (attr->ns == NULL) return NULL;
-  return attr->ns->href;
-}
-
-mDOMStringRef
-mdom_attr_get_value(mDOMAttrRef attr)
-{
-#ifdef HAVE_LIBXML2
-  g_return_val_if_fail(attr != NULL, NULL);
-  return xmlNodeListGetString(attr->doc, attr->children, 1);
-#else
-  mDOMNodeRef child;
-  g_return_val_if_fail(attr != NULL, NULL);
-
-  child = attr->val;
-  if (child == NULL) return NULL;
-  else return xmlNodeListGetString(child->doc, attr->val, 1);
-#endif
-}
-
-mDOMAttrRef
-mdom_attr_get_prev_sibling(mDOMAttrRef attr)
-{
-#ifdef HAVE_LIBXML2
-  g_return_val_if_fail(attr != NULL, NULL);
-  return attr->prev;
-#else
-  /* in libxml 1.x there is no prev link in attributes */
-  return NULL;
-#endif
-}
-
-mDOMAttrRef
-mdom_attr_get_next_sibling(mDOMAttrRef attr)
-{
-  g_return_val_if_fail(attr != NULL, NULL);
-  return attr->next;
-}
-
-mDOMNodeRef
-mdom_attr_get_parent(mDOMAttrRef attr)
-{
-  g_return_val_if_fail(attr != NULL, NULL);
-#ifdef HAVE_LIBXML2
-  return attr->parent;
-#else
-  return attr->node;
-#endif
-}
diff --git a/helm/minidom/minidom.h b/helm/minidom/minidom.h
deleted file mode 100644 (file)
index bb2b910..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
- * 
- * This file is part of miniDOM, a minimal implementation of the
- * Document Object Model
- * 
- * miniDOM 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.
- * 
- * miniDOM 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 miniDOM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- * 
- * For details, send a mail to <luca.padovani@cs.unibo.it> 
- */
-
-#ifndef minidom_h
-#define minidom_h
-
-#include <glib.h>
-#include <libxml/parser.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-  typedef xmlChar*     mDOMStringRef;
-  typedef const xmlChar* mDOMConstStringRef;
-  typedef xmlDocPtr    mDOMDocRef;
-  typedef xmlNodePtr   mDOMNodeRef;
-  typedef xmlAttrPtr   mDOMAttrRef;
-  typedef xmlEntityPtr mDOMEntityRef;
-  typedef xmlNsPtr     mDOMNsRef;
-
-  typedef xmlEntityPtr (*mDOMEntityResolver)(void*, mDOMConstStringRef);
-
-#define C_STRING(s)         ((char*) (s))
-#define C_CONST_STRING(s)   ((const char*) (s))
-#define DOM_STRING(s)       ((mDOMStringRef) (s))
-#define DOM_CONST_STRING(s) ((mDOMConstStringRef) (s))
-
-  mDOMDocRef    mdom_load(const char*, gboolean, mDOMEntityResolver);
-  void          mdom_unload(mDOMDocRef);
-
-  gboolean      mdom_string_eq(mDOMConstStringRef, mDOMConstStringRef);
-  void          mdom_string_free(mDOMStringRef);
-  mDOMStringRef mdom_string_dup(mDOMConstStringRef);
-
-  mDOMDocRef    mdom_doc_new(mDOMConstStringRef);
-  void          mdom_doc_free(mDOMDocRef);
-  mDOMNodeRef   mdom_doc_get_root_node(mDOMDocRef);
-  mDOMEntityRef mdom_doc_add_entity(mDOMDocRef, mDOMConstStringRef, mDOMConstStringRef);
-  mDOMEntityRef mdom_doc_get_entity(mDOMDocRef, mDOMConstStringRef);
-  mDOMEntityRef mdom_get_predefined_entity(mDOMConstStringRef);
-  mDOMConstStringRef mdom_entity_get_content(mDOMEntityRef);
-
-#if 0
-  mDOMNsRef     mdom_doc_search_ns(mDOMDocRef, mDOMNodeRef, mDOMConstStringRef);
-  mDOMNsRef     mdom_doc_search_ns_by_uri(mDOMDocRef, mDOMNodeRef, mDOMConstStringRef);
-  void          mdom_ns_free(mDOMNsRef);
-  mDOMNsRef     mdom_node_ns_new(mDOMNodeRef, mDOMConstStringRef, mDOMConstStringRef);
-#endif
-
-  void          mdom_node_set_user_data(mDOMNodeRef, gpointer);
-  gpointer      mdom_node_get_user_data(mDOMNodeRef);
-  gboolean      mdom_node_is_text(mDOMNodeRef);
-  gboolean      mdom_node_is_element(mDOMNodeRef);
-  gboolean      mdom_node_is_entity_ref(mDOMNodeRef);
-  gboolean      mdom_node_is_blank(mDOMNodeRef);
-  guint         mdom_node_get_type(mDOMNodeRef);
-  mDOMConstStringRef mdom_node_get_name(mDOMNodeRef);
-  mDOMConstStringRef mdom_node_get_ns_uri(mDOMNodeRef);
-  mDOMStringRef mdom_node_get_attribute(mDOMNodeRef, mDOMConstStringRef);
-  mDOMStringRef mdom_node_get_attribute_ns(mDOMNodeRef, mDOMConstStringRef, mDOMConstStringRef);
-  gboolean      mdom_node_has_attribute(mDOMNodeRef, mDOMConstStringRef);
-  gboolean      mdom_node_has_attribute_ns(mDOMNodeRef, mDOMConstStringRef, mDOMConstStringRef);
-  mDOMStringRef mdom_node_get_content(mDOMNodeRef);
-  mDOMNodeRef   mdom_node_get_parent(mDOMNodeRef);
-  mDOMNodeRef   mdom_node_get_prev_sibling(mDOMNodeRef);
-  mDOMNodeRef   mdom_node_get_next_sibling(mDOMNodeRef);
-  mDOMNodeRef   mdom_node_get_first_child(mDOMNodeRef);
-  mDOMAttrRef   mdom_node_get_first_attribute(mDOMNodeRef);
-  gboolean      mdom_node_is_first(mDOMNodeRef);
-  gboolean      mdom_node_is_last(mDOMNodeRef);
-  
-  mDOMConstStringRef mdom_attr_get_name(mDOMAttrRef);
-  mDOMConstStringRef mdom_attr_get_ns_uri(mDOMAttrRef);
-  mDOMStringRef mdom_attr_get_value(mDOMAttrRef);
-  mDOMAttrRef   mdom_attr_get_prev_sibling(mDOMAttrRef);
-  mDOMAttrRef   mdom_attr_get_next_sibling(mDOMAttrRef);
-  mDOMNodeRef   mdom_attr_get_parent(mDOMAttrRef);
-  
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* minidom_h */
-
diff --git a/helm/minidom/minidom.spec.in b/helm/minidom/minidom.spec.in
deleted file mode 100644 (file)
index 6c44be1..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-Summary: A minimal implementation of the DOM based on libxml2
-Name: minidom
-Version: @VERSION@
-Release: 1
-Copyright: GPL
-Group: Development/Libraries
-Source: www.cs.unibo.it:/~lpadovan/mml-widget/minidom-@VERSION@.tar.gz
-%description
-miniDOM is a minimal implementation of the Document Object
-Model.
-
-%prep
-%setup
-
-%build
-./configure
-make
-
-%install
-make install
-
-%files
-%doc AUTHORS BUGS COPYING ChangeLog HISTORY INSTALL LICENSE NEWS README TODO 
-
-/usr/local/bin/minidom-config
-/usr/local/lib/libminidom.so
-/usr/local/lib/libminidom.so.0
-/usr/local/lib/libminidom.so.@VERSION@
-/usr/local/lib/libminidom.a
-/usr/local/lib/libminidom.la
-/usr/local/include/minidom/
diff --git a/helm/minidom/stamp-h.in b/helm/minidom/stamp-h.in
deleted file mode 100644 (file)
index 9788f70..0000000
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/helm/mowgli/home/htaccess b/helm/mowgli/home/htaccess
deleted file mode 100644 (file)
index 702b915..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-AuthType Basic
-AuthName "Mowgli Members"
-AuthUserFile /home/projects/mowgli/apache_auth/users
-AuthGroupFile /home/projects/mowgli/apache_auth/groups
-require valid-user
diff --git a/helm/mowgli/home/html/.cvsignore b/helm/mowgli/home/html/.cvsignore
deleted file mode 100644 (file)
index 206e873..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-home.html
-index.html
-menu.html 
-consortium.html 
-project.html 
-news.html
-mowgli-events.html
-other-events.html
-deadlines.html
-people-list.html
-latest-news.xml
-approaching-deadlines.xml
\ No newline at end of file
diff --git a/helm/mowgli/home/html/Makefile b/helm/mowgli/home/html/Makefile
deleted file mode 100644 (file)
index dc9365a..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-# Note: "make FRAMES=x" works too
-FRAMES = yes
-#FRAMES = no
-
-DESTDIR = /projects/mowgli/public_html
-#DESTDIR = /tmp/mowgli
-
-HTMLDESTDIRSUFFIX = html_$(FRAMES)_frames
-
-HTMLDESTDIR = $(DESTDIR)/$(HTMLDESTDIRSUFFIX)
-
-XSLTP = xsltproc --param current-date "'`date`'"
-TEMPLATESROOT = ../templates
-XMLROOT = ../xml
-XSLROOT = ../xsl
-
-RMDOCTYPE = "s/<\\!DOCTYPE[^>]*>//"
-
-XHTMLCONTENT = $(XSLROOT)/xhtml-content.xsl
-
-PEOPLE = \
-       people/aei/kelley.html \
-       people/aei/pollney.html \
-       people/aei/schutz.html \
-               people/aei/velden.html \
-               people/aei/wegner.html \
-               people/aei/weyher.html \
-               people/bologna/asperti.html \
-               people/bologna/guidi.html \
-               people/bologna/padovani.html \
-               people/bologna/sacerdoti.html \
-               people/bologna/schena.html \
-               people/dfki/kohlhase.html \
-               people/dfki/melis.html \
-               people/dfki/siekmann.html \
-               people/dfki/moschner.html \
-               people/dfki/goguadze.html \
-               people/dfki/libbrecht.html \
-               people/inria/amerkad.html \
-               people/inria/bertot.html \
-               people/inria/chicli.html \
-               people/inria/delahaye.html \
-               people/inria/herbelin.html \
-               people/inria/naciri.html \
-               people/inria/pottier.html \
-               people/inria/rideau.html \
-               people/inria/thery.html \
-               people/inria/werner.html \
-               people/nijmegen/barendregt.html \
-               people/nijmegen/barreiro.html \
-               people/nijmegen/cohen.html \
-               people/nijmegen/cruz-filipe.html \
-               people/nijmegen/geuvers.html \
-               people/nijmegen/niqui.html \
-               people/nijmegen/stein.html \
-               people/nijmegen/synek.html \
-               people/nijmegen/wiedijk.html \
-               people/trusted-logic/bolignano.html \
-               people/trusted-logic/gimenez.html \
-               people/trusted-logic/loiseaux.html
-
-DOCUMENTS = \
-            index.html \
-            home.html \
-           menu.html \
-            proposal/project-management.html \
-            proposal/project-objectives.html \
-            proposal/project-summary.html \
-            proposal/contribution.html \
-            proposal/innovation.html \
-            proposal/EC-contribution.html \
-            proposal/econ-scient-tech-prospects.html \
-            proposal/project-planning.html \
-            proposal/project-components.html \
-            consortium.html \
-            project.html \
-           news.html \
-           other-events.html \
-           mowgli-events.html \
-           deadlines.html \
-           people-list.html \
-            slides/mowgligroup.html \
-            deliverables/distribution/d5a.html \
-            deliverables/distribution/d5b.html \
-            deliverables/information-dissemination-and-exploitation/d7a.html \
-            deliverables/information-dissemination-and-exploitation/d7b.html \
-            deliverables/interfaces/d4a.html \
-            deliverables/interfaces/d4b.html \
-            deliverables/interfaces/d4c.html \
-            deliverables/interfaces/d4d.html \
-            deliverables/interfaces/d4e.html \
-            deliverables/metadata/d3a.html \
-            deliverables/metadata/d3b.html \
-            deliverables/project-management/d0a.html \
-            deliverables/project-management/d0b.html \
-            deliverables/project-management/d0c.html \
-            deliverables/project-management/d0d.html \
-            deliverables/requirement-analysis/d1a.html \
-            deliverables/requirement-analysis/d1b.html \
-            deliverables/requirement-analysis/d1c.html \
-            deliverables/testing-and-validation/d6a.html \
-            deliverables/testing-and-validation/d6b.html \
-            deliverables/testing-and-validation/d6c.html \
-            deliverables/testing-and-validation/d6d.html \
-            deliverables/transformation/d2a.html \
-            deliverables/transformation/d2b.html \
-            deliverables/transformation/d2c.html \
-            deliverables/transformation/d2d.html \
-            deliverables/transformation/d2e.html \
-            deliverables/transformation/d2f.html \
-            deliverables/transformation/d2g.html \
-            members/index.html \
-           members/ml-help-example.txt \
-            members/kick-off.html \
-            mowgli-events/kick-off.html \
-           software/index.html \
-            sites/aei.html \
-            sites/bologna.html \
-            sites/dfki.html \
-            sites/inria.html \
-            sites/nijmegen.html \
-            sites/trusted-logic.html \
-           publications/index.html \
-            publications/mowgli/crimea2002_aw_on_line.html \
-            publications/mowgli/crimea2002_aw.html \
-            publications/others/category_al.html \
-            publications/others/crimea2001_apss.html \
-            publications/others/cup_s.html \
-            publications/others/cup_s2.html \
-            publications/others/extreme2001_apss.html \
-            publications/others/har_bg.html \
-            publications/others/jep_ws.html \
-            publications/others/jep_wwsw.html \
-            publications/others/jlp2001_scg.html \
-            publications/others/mathml2000_apss.html \
-            publications/others/mscs_gb.html \
-            publications/others/tcs2001_og.html \
-            publications/others/tphols2000_gwz.html \
-            publications/others/tphols2001_apss.html \
-            publications/others/w3c_bl98.html \
-            publications/others/cup_hp91.html \
-            publications/others/cup_hp93.html \
-            publications/others/cc.html \
-            work-packages/index.html \
-            work-packages/distribution.html \
-            work-packages/information-dissemination-and-exploitation.html \
-            work-packages/interfaces.html \
-            work-packages/metadata.html \
-            work-packages/project-management.html \
-            work-packages/requirement-analysis.html \
-            work-packages/testing-and-validation.html \
-            work-packages/transformation.html \
-           $(PEOPLE)
-
-all: $(DOCUMENTS)
-
-home.html: $(XMLROOT)/home.xml \
-          $(XMLROOT)/news.xml \
-          $(XMLROOT)/other-events.xml \
-          $(XMLROOT)/mowgli-events.xml \
-          $(XSLROOT)/latest-news.xsl \
-          $(XSLROOT)/approaching-deadlines.xsl \
-           $(XHTMLCONTENT)
-       $(XSLTP) -o latest-news.xml $(XSLROOT)/latest-news.xsl $(XMLROOT)/news.xml
-       $(XSLTP) --param today `date +%Y%m%d` -o approaching-deadlines.xml $(XSLROOT)/approaching-deadlines.xsl $(XMLROOT)/other-events.xml
-       $(XSLTP) --param make_header "false()" --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) $(XMLROOT)/home.xml
-
-menu.html: $(XMLROOT)/menu.xml $(XHTMLCONTENT)
-       $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" --param make_header "false()" --param make_footer "false()" -o $@ $(XHTMLCONTENT) $<
-
-index.html: $(TEMPLATESROOT)/index.html
-       cp $< $@
-
-members/ml-help-example.txt: $(TEMPLATESROOT)/ml-help-example.txt
-       cp $< $@
-
-slides/%.html: $(XMLROOT)/slides/%.xml $(XHTMLCONTENT)
-       $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) $<
-
-members/index.html: $(XMLROOT)/members-index.xml \
-                   $(XHTMLCONTENT)
-       sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-members/kick-off.html: $(XMLROOT)/members/kick-off.xml \
-                    $(XSLROOT)/minutes.xsl \
-                   $(XHTMLCONTENT)
-       $(XSLTP) $(XSLROOT)/minutes.xsl $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-software/index.html: $(XMLROOT)/software/index.xml \
-                    $(XHTMLCONTENT)
-       $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) $<
-
-proposal/project-management.html: $(XMLROOT)/proposal/project-management.xml \
-                  $(XHTMLCONTENT) \
-                  $(XSLROOT)/management.xsl
-       $(XSLTP) $(XSLROOT)/management.xsl $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-proposal/project-summary.html: $(XMLROOT)/proposal/project-summary.xml \
-                     $(XHTMLCONTENT)
-       sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-proposal/project-objectives.html: $(XMLROOT)/proposal/project-objectives.xml \
-                        $(XHTMLCONTENT)
-       sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-proposal/contribution.html: $(XMLROOT)/proposal/contribution.xml \
-                         $(XHTMLCONTENT)
-       sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-proposal/innovation.html: $(XMLROOT)/proposal/innovation.xml \
-                         $(XHTMLCONTENT)
-       sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-proposal/EC-contribution.html: $(XMLROOT)/proposal/EC-contribution.xml \
-                         $(XHTMLCONTENT)
-       sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-proposal/econ-scient-tech-prospects.html: $(XMLROOT)/proposal/econ-scient-tech-prospects.xml \
-                         $(XHTMLCONTENT)
-       sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-proposal/project-planning.html: $(XMLROOT)/proposal/project-planning.xml \
-                         $(XHTMLCONTENT)
-       sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-proposal/project-components.html: $(XMLROOT)/proposal/project-components.xml \
-                         $(XHTMLCONTENT)
-       sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-mowgli-events/kick-off.html: $(XMLROOT)/mowgli-events/kick-off.xml \
-                            $(XHTMLCONTENT)
-       sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-people-list.html: $(XMLROOT)/people/index.xml \
-                  $(XSLROOT)/people-list.xsl \
-                  $(XHTMLCONTENT) 
-       $(XSLTP) $(XSLROOT)/people-list.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-consortium.html: $(XMLROOT)/consortium.xml \
-                 $(XSLROOT)/consortium.xsl \
-                 $(XHTMLCONTENT) 
-       $(XSLTP) $(XSLROOT)/consortium.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-project.html: $(XMLROOT)/project.xml \
-              $(XSLROOT)/project.xsl \
-              $(XHTMLCONTENT) 
-       $(XSLTP) $(XSLROOT)/project.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-
-news.html: $(XMLROOT)/news.xml \
-          $(XSLROOT)/news.xsl \
-           $(XHTMLCONTENT) 
-       $(XSLTP) $(XSLROOT)/news.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-
-other-events.html: $(XMLROOT)/other-events.xml \
-                  $(XSLROOT)/events.xsl \
-                   $(XHTMLCONTENT) 
-       $(XSLTP) --param today `date +%Y%m%d` --param events-class "'Other'" $(XSLROOT)/events.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-
-mowgli-events.html: $(XMLROOT)/mowgli-events.xml \
-                   $(XSLROOT)/events.xsl \
-                    $(XHTMLCONTENT) 
-       $(XSLTP) --param today `date +%Y%m%d` --param events-class "'MOWGLI'" $(XSLROOT)/events.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-
-deadlines.html: $(XMLROOT)/other-events.xml \
-               $(XSLROOT)/deadlines.xsl \
-                $(XHTMLCONTENT) 
-       $(XSLTP) --param today `date +%Y%m%d` --param events-class "'Other'" $(XSLROOT)/deadlines.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-
-deliverables/%.html: $(XMLROOT)/deliverables/%.xml \
-                     $(XSLROOT)/deliverable.xsl \
-                     $(XHTMLCONTENT) 
-       $(XSLTP) $(XSLROOT)/deliverable.xsl $< | $(XSLTP) --param path_to_top "'../..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-
-sites/%.html: $(XMLROOT)/sites/%.xml \
-              $(XSLROOT)/site.xsl \
-              $(XHTMLCONTENT) 
-       $(XSLTP) $(XSLROOT)/site.xsl $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-
-people/%.html: $(XMLROOT)/people/%.xml \
-               $(XSLROOT)/person.xsl \
-               $(XHTMLCONTENT) 
-       $(XSLTP) $(XSLROOT)/person.xsl $< | $(XSLTP) --param path_to_top "'../..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-
-publications/index.html: $(XMLROOT)/publications/index.xml \
-                        $(XSLROOT)/publications-index.xsl \
-                         $(XHTMLCONTENT) 
-       $(XSLTP) $(XSLROOT)/publications-index.xsl $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-
-publications/mowgli/%_on_line.html: $(XMLROOT)/publications/mowgli/%_on_line.xml \
-                     $(XHTMLCONTENT) 
-       $(XSLTP) --param path_to_top "'../..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) $<
-
-
-publications/%.html: $(XMLROOT)/publications/%.xml \
-                     $(XSLROOT)/publication.xsl \
-                     $(XHTMLCONTENT) 
-       $(XSLTP) $(XSLROOT)/publication.xsl $< | $(XSLTP) --param path_to_top "'../..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-work-packages/index.html: $(XMLROOT)/work-packages/index.xml \
-                          $(XSLROOT)/work-packages_index.xsl \
-                          $(XHTMLCONTENT) 
-       $(XSLTP) $(XSLROOT)/work-packages_index.xsl $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-       
-work-packages/%.html: $(XMLROOT)/work-packages/%.xml \
-                      $(XSLROOT)/work-package.xsl \
-                      $(XHTMLCONTENT) 
-       $(XSLTP) $(XSLROOT)/work-package.xsl $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) -
-
-
-clean:
-       rm -f $(DOCUMENTS) approaching-deadlines.xml latest-news.xml
-.PHONY: clean
-
-install: $(DOCUMENTS)
-       mkdir -p $(HTMLDESTDIR)
-       for i in $(dir $(DOCUMENTS)); do \
-               mkdir -p $(HTMLDESTDIR)/$$i; \
-       done
-       for i in $(DOCUMENTS); do \
-               cp $$i $(HTMLDESTDIR)/$$i; \
-       done
-       mkdir -p $(DESTDIR)/images
-       cp ../images/*.* $(DESTDIR)/images
-       mkdir -p $(DESTDIR)/style
-       cp ../style/*.css $(DESTDIR)/style
-       cp ../htaccess $(HTMLDESTDIR)/members/.htaccess
-       mkdir -p $(DESTDIR)/misc/proposal
-       cp ../htaccess $(DESTDIR)/misc/proposal/.htaccess
-       cp ../misc/proposal/*.* $(DESTDIR)/misc/proposal
-       mkdir -p $(DESTDIR)/misc/contract
-       cp ../htaccess $(DESTDIR)/misc/contract/.htaccess
-       cp ../misc/contract/*.* $(DESTDIR)/misc/contract
-       cp ../misc/kick-off/*.* $(DESTDIR)/misc/kick-off
-       cp ../htaccess $(DESTDIR)/misc/kick-off/.htaccess
-       if [ $(FRAMES) = yes ] ; \
-       then \
-        sed s/menu\\.html/$(HTMLDESTDIRSUFFIX)\\/menu\\.html/ <index.html | \
-         sed s/home\\.html/$(HTMLDESTDIRSUFFIX)\\/home\\.html/ >$(DESTDIR)/index.html ; \
-        else \
-         cp home.html $(HTMLDESTDIR)/index.html ; \
-       fi
-
-uninstall:
-       rm -rf $(DESTDIR)/*
-
-$(XSLROOT)/%.xsl : $(XSLROOT)/common.xsl
-$(XSLROOT)/latest-news.xsl : $(XSLROOT)/news.xsl
-$(DOCUMENTS) : $(XSLROOT)/common.xsl
-
diff --git a/helm/mowgli/home/html/deliverables/distribution/.cvsignore b/helm/mowgli/home/html/deliverables/distribution/.cvsignore
deleted file mode 100644 (file)
index 24596ca..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-d5a.html
-d5b.html
diff --git a/helm/mowgli/home/html/deliverables/information-dissemination-and-exploitation/.cvsignore b/helm/mowgli/home/html/deliverables/information-dissemination-and-exploitation/.cvsignore
deleted file mode 100644 (file)
index 4723c15..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-d7a.html
-d7b.html
diff --git a/helm/mowgli/home/html/deliverables/interfaces/.cvsignore b/helm/mowgli/home/html/deliverables/interfaces/.cvsignore
deleted file mode 100644 (file)
index c94f4c4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-d4a.html
-d4b.html
-d4c.html
-d4d.html
-d4e.html
diff --git a/helm/mowgli/home/html/deliverables/metadata/.cvsignore b/helm/mowgli/home/html/deliverables/metadata/.cvsignore
deleted file mode 100644 (file)
index 00ba3da..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-d3a.html
-d3b.html
diff --git a/helm/mowgli/home/html/deliverables/project-management/.cvsignore b/helm/mowgli/home/html/deliverables/project-management/.cvsignore
deleted file mode 100644 (file)
index 2843065..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-d0a.html
-d0b.html
-d0c.html
-d0d.html
diff --git a/helm/mowgli/home/html/deliverables/requirement-analysis/.cvsignore b/helm/mowgli/home/html/deliverables/requirement-analysis/.cvsignore
deleted file mode 100644 (file)
index e9c6328..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-d1a.html
-d1b.html
-d1c.html
diff --git a/helm/mowgli/home/html/deliverables/testing-and-validation/.cvsignore b/helm/mowgli/home/html/deliverables/testing-and-validation/.cvsignore
deleted file mode 100644 (file)
index cf0f345..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-d6a.html
-d6b.html
-d6c.html
-d6d.html
diff --git a/helm/mowgli/home/html/deliverables/transformation/.cvsignore b/helm/mowgli/home/html/deliverables/transformation/.cvsignore
deleted file mode 100644 (file)
index 06fef3a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-d2a.html
-d2b.html
-d2c.html
-d2d.html
-d2e.html
-d2f.html
-d2g.html
diff --git a/helm/mowgli/home/html/members/.cvsignore b/helm/mowgli/home/html/members/.cvsignore
deleted file mode 100644 (file)
index 90c0ce0..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-index.html
-ml-help-example.txt
-kick-off.html
diff --git a/helm/mowgli/home/html/mowgli-events/.cvsignore b/helm/mowgli/home/html/mowgli-events/.cvsignore
deleted file mode 100644 (file)
index 227036e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-kick-off.html
diff --git a/helm/mowgli/home/html/people/aei/.cvsignore b/helm/mowgli/home/html/people/aei/.cvsignore
deleted file mode 100644 (file)
index dd43536..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-kelley.html 
-pollney.html
-schutz.html 
-velden.html 
-wegner.html 
-weyher.html
diff --git a/helm/mowgli/home/html/people/bologna/.cvsignore b/helm/mowgli/home/html/people/bologna/.cvsignore
deleted file mode 100644 (file)
index fed7a15..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-asperti.html 
-guidi.html 
-padovani.html 
-sacerdoti.html 
-schena.html 
diff --git a/helm/mowgli/home/html/people/dfki/.cvsignore b/helm/mowgli/home/html/people/dfki/.cvsignore
deleted file mode 100644 (file)
index 05d2b68..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-kohlhase.html 
-melis.html 
-siekmann.html 
-moschner.html
-goguadze.html
-libbrecht.html
diff --git a/helm/mowgli/home/html/people/inria/.cvsignore b/helm/mowgli/home/html/people/inria/.cvsignore
deleted file mode 100644 (file)
index 0c7a9ce..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-amerkad.html 
-bertot.html 
-chicli.html 
-delahaye.html 
-herbelin.html 
-naciri.html 
-pottier.html 
-rideau.html 
-thery.html 
-werner.html
diff --git a/helm/mowgli/home/html/people/nijmegen/.cvsignore b/helm/mowgli/home/html/people/nijmegen/.cvsignore
deleted file mode 100644 (file)
index cb89baf..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-barendregt.html 
-barreiro.html 
-cohen.html 
-cruz-filipe.html 
-geuvers.html 
-niqui.html 
-stein.html 
-synek.html 
-wiedijk.html 
diff --git a/helm/mowgli/home/html/people/trusted-logic/.cvsignore b/helm/mowgli/home/html/people/trusted-logic/.cvsignore
deleted file mode 100644 (file)
index a438e33..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-bolignano.html 
-gimenez.html
-loiseaux.html
diff --git a/helm/mowgli/home/html/proposal/.cvsignore b/helm/mowgli/home/html/proposal/.cvsignore
deleted file mode 100644 (file)
index 4807b69..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-project-management.html
-project-objectives.html
-project-summary.html
-contribution.html
-innovation.html
-EC-contribution.html
-econ-scient-tech-prospects.html
-project-planning.html
-project-components.html
diff --git a/helm/mowgli/home/html/publications/.cvsignore b/helm/mowgli/home/html/publications/.cvsignore
deleted file mode 100644 (file)
index dcaf716..0000000
+++ /dev/null
@@ -1 +0,0 @@
-index.html
diff --git a/helm/mowgli/home/html/publications/mowgli/.cvsignore b/helm/mowgli/home/html/publications/mowgli/.cvsignore
deleted file mode 100644 (file)
index 05440f9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-crimea2002_aw.html
-crimea2002_aw_on_line.html
diff --git a/helm/mowgli/home/html/publications/others/.cvsignore b/helm/mowgli/home/html/publications/others/.cvsignore
deleted file mode 100644 (file)
index 00a0535..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-category_al.html 
-crimea2001_apss.html 
-cup_s.html 
-cup_s2.html 
-extreme2001_apss.html 
-har_bg.html 
-jep_ws.html 
-jep_wwsw.html 
-jlp2001_scg.html 
-mathml2000_apss.html 
-mscs_gb.html 
-tcs2001_og.html 
-tphols2000_gwz.html 
-tphols2001_apss.html 
-cc.html
-cup_hp91.html
-cup_hp93.html
-w3c_bl98.html
\ No newline at end of file
diff --git a/helm/mowgli/home/html/sites/.cvsignore b/helm/mowgli/home/html/sites/.cvsignore
deleted file mode 100644 (file)
index 66f60b7..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-aei.html 
-bologna.html 
-dfki.html 
-inria.html 
-nijmegen.html 
-trusted-logic.html 
diff --git a/helm/mowgli/home/html/slides/.cvsignore b/helm/mowgli/home/html/slides/.cvsignore
deleted file mode 100644 (file)
index 64a8aa4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-mowgligroup.html
diff --git a/helm/mowgli/home/html/software/.cvsignore b/helm/mowgli/home/html/software/.cvsignore
deleted file mode 100644 (file)
index dcaf716..0000000
+++ /dev/null
@@ -1 +0,0 @@
-index.html
diff --git a/helm/mowgli/home/html/work-packages/.cvsignore b/helm/mowgli/home/html/work-packages/.cvsignore
deleted file mode 100644 (file)
index f902f78..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-index.html
-distribution.html 
-information-dissemination-and-exploitation.html 
-interfaces.html 
-metadata.html 
-project-management.html 
-requirement-analysis.html 
-testing-and-validation.html 
-transformation.html
diff --git a/helm/mowgli/home/images/NextArrow.gif b/helm/mowgli/home/images/NextArrow.gif
deleted file mode 100644 (file)
index fcd28ba..0000000
Binary files a/helm/mowgli/home/images/NextArrow.gif and /dev/null differ
diff --git a/helm/mowgli/home/images/PreviousArrow.gif b/helm/mowgli/home/images/PreviousArrow.gif
deleted file mode 100644 (file)
index 489817a..0000000
Binary files a/helm/mowgli/home/images/PreviousArrow.gif and /dev/null differ
diff --git a/helm/mowgli/home/images/arch.png b/helm/mowgli/home/images/arch.png
deleted file mode 100644 (file)
index 7603bbf..0000000
Binary files a/helm/mowgli/home/images/arch.png and /dev/null differ
diff --git a/helm/mowgli/home/images/gantt_new.png b/helm/mowgli/home/images/gantt_new.png
deleted file mode 100644 (file)
index 5481b87..0000000
Binary files a/helm/mowgli/home/images/gantt_new.png and /dev/null differ
diff --git a/helm/mowgli/home/images/istbutton.gif b/helm/mowgli/home/images/istbutton.gif
deleted file mode 100644 (file)
index f8e8097..0000000
Binary files a/helm/mowgli/home/images/istbutton.gif and /dev/null differ
diff --git a/helm/mowgli/home/images/istbutton_small.gif b/helm/mowgli/home/images/istbutton_small.gif
deleted file mode 100644 (file)
index f3b945e..0000000
Binary files a/helm/mowgli/home/images/istbutton_small.gif and /dev/null differ
diff --git a/helm/mowgli/home/images/istdrop.gif b/helm/mowgli/home/images/istdrop.gif
deleted file mode 100644 (file)
index db2a1cb..0000000
Binary files a/helm/mowgli/home/images/istdrop.gif and /dev/null differ
diff --git a/helm/mowgli/home/images/logo.png b/helm/mowgli/home/images/logo.png
deleted file mode 100644 (file)
index 9709582..0000000
Binary files a/helm/mowgli/home/images/logo.png and /dev/null differ
diff --git a/helm/mowgli/home/images/mowgli_combo.gif b/helm/mowgli/home/images/mowgli_combo.gif
deleted file mode 100644 (file)
index 5c8a6b4..0000000
Binary files a/helm/mowgli/home/images/mowgli_combo.gif and /dev/null differ
diff --git a/helm/mowgli/home/images/mowgli_combo.png b/helm/mowgli/home/images/mowgli_combo.png
deleted file mode 100644 (file)
index 47c989b..0000000
Binary files a/helm/mowgli/home/images/mowgli_combo.png and /dev/null differ
diff --git a/helm/mowgli/home/images/mowgli_parquet.png b/helm/mowgli/home/images/mowgli_parquet.png
deleted file mode 100644 (file)
index 8deab0d..0000000
Binary files a/helm/mowgli/home/images/mowgli_parquet.png and /dev/null differ
diff --git a/helm/mowgli/home/images/mowgli_parquet_light.png b/helm/mowgli/home/images/mowgli_parquet_light.png
deleted file mode 100644 (file)
index 9c404db..0000000
Binary files a/helm/mowgli/home/images/mowgli_parquet_light.png and /dev/null differ
diff --git a/helm/mowgli/home/images/pert_new.png b/helm/mowgli/home/images/pert_new.png
deleted file mode 100644 (file)
index b84e1bf..0000000
Binary files a/helm/mowgli/home/images/pert_new.png and /dev/null differ
diff --git a/helm/mowgli/home/misc/contract/MOWGLIfinal-for-ceto.zip b/helm/mowgli/home/misc/contract/MOWGLIfinal-for-ceto.zip
deleted file mode 100644 (file)
index c1d986b..0000000
Binary files a/helm/mowgli/home/misc/contract/MOWGLIfinal-for-ceto.zip and /dev/null differ
diff --git a/helm/mowgli/home/misc/contract/RTD-annex2-rtd-final.pdf b/helm/mowgli/home/misc/contract/RTD-annex2-rtd-final.pdf
deleted file mode 100644 (file)
index 6b696d1..0000000
Binary files a/helm/mowgli/home/misc/contract/RTD-annex2-rtd-final.pdf and /dev/null differ
diff --git a/helm/mowgli/home/misc/contract/RTD-annex3-ist-fet.pdf b/helm/mowgli/home/misc/contract/RTD-annex3-ist-fet.pdf
deleted file mode 100644 (file)
index dcb7ca2..0000000
Binary files a/helm/mowgli/home/misc/contract/RTD-annex3-ist-fet.pdf and /dev/null differ
diff --git a/helm/mowgli/home/misc/contract/RTD-audit-cert-annex4.pdf b/helm/mowgli/home/misc/contract/RTD-audit-cert-annex4.pdf
deleted file mode 100644 (file)
index 2ed1096..0000000
Binary files a/helm/mowgli/home/misc/contract/RTD-audit-cert-annex4.pdf and /dev/null differ
diff --git a/helm/mowgli/home/misc/contract/mowgli-an1-final.pdf b/helm/mowgli/home/misc/contract/mowgli-an1-final.pdf
deleted file mode 100644 (file)
index 0dbd1ec..0000000
Binary files a/helm/mowgli/home/misc/contract/mowgli-an1-final.pdf and /dev/null differ
diff --git a/helm/mowgli/home/misc/contract/mowgli-ctr-final.pdf b/helm/mowgli/home/misc/contract/mowgli-ctr-final.pdf
deleted file mode 100644 (file)
index fbb1902..0000000
Binary files a/helm/mowgli/home/misc/contract/mowgli-ctr-final.pdf and /dev/null differ
diff --git a/helm/mowgli/home/misc/kick-off/AIP_Intro.ppt b/helm/mowgli/home/misc/kick-off/AIP_Intro.ppt
deleted file mode 100644 (file)
index 7ce24c2..0000000
Binary files a/helm/mowgli/home/misc/kick-off/AIP_Intro.ppt and /dev/null differ
diff --git a/helm/mowgli/home/misc/kick-off/KM2002GO.ps b/helm/mowgli/home/misc/kick-off/KM2002GO.ps
deleted file mode 100644 (file)
index 51f022e..0000000
+++ /dev/null
@@ -1,1984 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvipsk 5.86 p1.5d Copyright 1996-2001 ASCII Corp.(www-ptex@ascii.co.jp)
-%%based on dvipsk 5.86 Copyright 1999 Radical Eye Software (www.radicaleye.com)
-%%Title: KM2002GO.dvi
-%%Pages: 14
-%%PageOrder: Ascend
-%%Orientation: Landscape
-%%BoundingBox: 0 0 596 842
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips KM2002GO.dvi -o KM2002GO.ps
-%DVIPSParameters: dpi=600, compressed
-%DVIPSSource:  TeX output 2002.04.03:0305
-%%BeginProcSet: texc.pro
-%!
-/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/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/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]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
-forall N/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
-/dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3
-def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90
-rotate}{show}ifelse}ifelse}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: pstricks.pro
-%!
-% PostScript prologue for pstricks.tex.
-% Version 97 patch 3, 98/06/01
-% For distribution, see pstricks.tex.
-%
-/tx@Dict 200 dict def tx@Dict begin
-/ADict 25 dict def
-/CM { matrix currentmatrix } bind def
-/SLW /setlinewidth load def
-/CLW /currentlinewidth load def
-/CP /currentpoint load def
-/ED { exch def } bind def
-/L /lineto load def
-/T /translate load def
-/TMatrix { } def
-/RAngle { 0 } def
-/Atan { /atan load stopped { pop pop 0 } if } def
-/Div { dup 0 eq { pop } { div } ifelse } def
-/NET { neg exch neg exch T } def
-/Pyth { dup mul exch dup mul add sqrt } def
-/PtoC { 2 copy cos mul 3 1 roll sin mul } def
-/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def }
-def
-/PathLength { flattenpath /z 0 def { /y1 ED /x1 ED /y2 y1 def /x2 x1 def
-} { /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ }
-/pathforall load stopped { pop pop pop pop } if z } def
-/STP { .996264 dup scale } def
-/STV { SDict begin normalscale end STP  } def
-/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
-PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
-mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
-/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
-0 } ifelse setdash stroke } def
-/DotLine { /b PathLength def /a ED /z ED /y CLW def /z y z add def a 0 gt
-{ /b b a div def } { a 0 eq { /b b y sub def } { a -3 eq { /b b y add
-def } if } ifelse } ifelse [ 0 b b z Div round Div dup 0 le { pop 1 } if
-] a 0 gt { 0 } { y 2 div a -2 gt { neg } if } ifelse setdash 1
-setlinecap stroke } def
-/LineFill { gsave abs CLW add /a ED a 0 dtransform round exch round exch
-2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
-% DG/SR modification begin - Dec. 12, 1997 - Patch 2
-%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
-itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
-% DG/SR modification end
-Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
-/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
-% DG/SR modification begin - Jun.  1, 1998 - Patch 3 (from Michael Vulis)
-% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
-% def
-a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
-pop pop } def
-% DG/SR modification end
-/BeginArrow { ADict begin /@mtrx CM def gsave 2 copy T 2 index sub neg
-exch 3 index sub exch Atan rotate newpath } def
-/EndArrow { @mtrx setmatrix CP grestore end } def
-/Arrow { CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1
-scale } if w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill
-grestore } def
-/Tbar { CLW mul add /z ED z -2 div CLW 2 div moveto z 0 rlineto stroke 0
-CLW moveto } def
-/Bracket { CLW mul add dup CLW sub 2 div /x ED mul CLW add /y ED /z CLW 2
-div def x neg y moveto x neg CLW 2 div L x CLW 2 div L x y L stroke 0
-CLW moveto } def
-/RoundBracket { CLW mul add dup 2 div /x ED mul /y ED /mtrx CM def 0 CLW
-2 div T x y mul 0 ne { x y scale } if 1 1 moveto .85 .5 .35 0 0 0
-curveto -.35 0 -.85 .5 -1 1 curveto mtrx setmatrix stroke 0 CLW moveto }
-def
-/SD { 0 360 arc fill } def
-/EndDot { { /z DS def } { /z 0 def } ifelse /b ED 0 z DS SD b { 0 z DS
-CLW sub SD } if 0 DS z add CLW 4 div sub moveto } def
-/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
-/closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
-load } if ] cvx newpath 3 1 roll T exec } def
-/NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch
-cvi def } def
-/NArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if
-f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def
-/Line { NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub
-def n { Lineto } repeat CP 4 2 roll ArrowB L pop pop } if } def
-/Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 }
-ifelse { pop } repeat a } def
-/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
-and { pop pop /n n 1 sub def } if } def
-/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
-repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
-ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
-moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
-Lineto pop pop closepath } ifelse } def
-/Diamond { /mtrx CM def T rotate /h ED /w ED dup 0 eq { pop } { CLW mul
-neg /d ED /a w h Atan def /h d a sin Div h add def /w d a cos Div w add
-def } ifelse mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2
-div /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
-setmatrix } def
-% DG modification begin - Jan. 15, 1997
-%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
-%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
-%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
-%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
-%setmatrix } def
-/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
-CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
-div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
-d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
-% DG/SR modification begin - Jun.  1, 1998 - Patch 3 (from Michael Vulis)
-% setmatrix } def
-setmatrix pop } def
-% DG/SR modification end
-/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
-def } def
-/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
-def } def
-/CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1
-def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp
-mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos
-abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def
-/y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul
-m mul neg def } def
-/IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if }
-ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def }
-def
-/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
-/NC { CC x1 y1 x2 y2 x y curveto } def
-/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
-/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
-/NAC { x2 y2 x y curveto CC x1 y1 } def
-/EAC { x2 y2 x y ArrowB curveto pop pop } def
-/OpenCurve { NArray n 3 lt { n { pop pop } repeat } { BOC /n n 3 sub def
-n { NC } repeat EOC } ifelse } def
-/AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload
-/Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop
-pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def
-/ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt {
-CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC }
-repeat closepath pop pop } ifelse } def
-/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
-/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
-/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
-def
-/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
-rotate matrix concatmatrix exch findfont exch makefont setfont } def
-/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
-x1 y1 lineto closepath } def
-/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
-y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
-exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
-/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
-x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
-ifelse } def
-/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
-/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
-pop pop Rect } { OvalFrame } ifelse } def
-/BezierNArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop
-} if n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat f { ]
-aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def
-/OpenBezier { BezierNArray n 1 eq { pop pop } { ArrowA n 4 sub 3 idiv { 6
-2 roll 4 2 roll curveto } repeat 6 2 roll 4 2 roll ArrowB curveto }
-ifelse } def
-/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv {
-6 2 roll 4 2 roll curveto } repeat closepath } ifelse } def
-/BezierShowPoints { gsave Points aload length 2 div cvi /n ED moveto n 1
-sub { lineto } repeat CLW 2 div SLW [ 4 4 ] 0 setdash stroke grestore }
-def
-/Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1
-sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA
-x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0
-y0 x0 2 mul x1 sub y1 ] def } def
-/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 }
-if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if
-/dx ED dy div round dy mul /y0 ED dx div round dx mul /x0 ED dy div
-round cvi /y2 ED dx div round cvi /x2 ED dy div round cvi /y1 ED dx div
-round cvi /x1 ED /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def /w x2 x1 sub
-0 gt { 1 } { -1 } ifelse def b 0 gt { /z1 b 4 div CLW 2 div add def
-/Helvetica findfont b scalefont setfont /b b .95 mul CLW 2 div add def }
-if systemdict /setstrokeadjust known { true setstrokeadjust /t { } def }
-{ /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
-exch itransform } bind def } ifelse gsave n 0 gt { 1 setlinecap [ 0 dy n
-div ] dy n div 2 div setdash } { 2 setlinecap } ifelse /i x1 def /f y1
-dy mul n 0 gt { dy n div 2 div h mul sub } if def /g y2 dy mul n 0 gt {
-dy n div 2 div h mul add } if def x2 x1 sub w mul 1 add dup 1000 gt {
-pop 1000 } if { i dx mul dup y0 moveto b 0 gt { gsave c i a cvs dup
-stringwidth pop /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse h 0 gt {b neg}
-{z1} ifelse rmoveto show grestore } if dup t f moveto g t L stroke /i i
-w add def } repeat grestore gsave n 0 gt
-% DG/SR modification begin - Nov. 7, 1997 - Patch 1
-%{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
-{ 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
-% DG/SR modification end
-{ 2 setlinecap } ifelse /i y1 def /f x1 dx mul
-n 0 gt { dx n div 2 div w mul sub } if def /g x2 dx mul n 0 gt { dx n
-div 2 div w mul add } if def y2 y1 sub h mul 1 add dup 1000 gt { pop
-1000 } if { newpath i dy mul dup x0 exch moveto b 0 gt { gsave c i a cvs
-dup stringwidth pop /z2 ED w 0 gt {z1 z2 add neg} {z1} ifelse h 0 gt
-{z1} {b neg} ifelse rmoveto show grestore } if dup f exch t moveto g
-exch t L stroke /i i h add def } repeat grestore } def
-/ArcArrow { /d ED /b ED /a ED gsave newpath 0 -1000 moveto clip newpath 0
-1 0 0 b grestore c mul /e ED pop pop pop r a e d PtoC y add exch x add
-exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
-mul neg d } def
-/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
-/Rot { CP CP translate 3 -1 roll neg rotate NET  } def
-/RotBegin { tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 }
-def } if /TMatrix [ TMatrix CM ] cvx def /a ED a Rot /RAngle [ RAngle
-dup a add ] cvx def } def
-/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ]
-cvx def } def
-/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
-/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
-/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
-/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
-abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
-div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
-h1 abs h sub dup s mul abs } ifelse } def
-/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
-mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
-{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
-exch } def
-/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
-/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
-} if } ifelse } def
-/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
-/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
-neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
-/IfVisible true def } def
-end
-% END pstricks.pro
-
-%%EndProcSet
-%%BeginProcSet: pst-dots.pro
-%!PS-Adobe-2.0
-%%Title: Dot Font for PSTricks 97 - Version 97, 93/05/07.
-%%Creator: Timothy Van Zandt <tvz@Princeton.EDU>
-%%Creation Date: May 7, 1993
-10 dict dup begin
-  /FontType 3 def
-  /FontMatrix [ .001 0 0 .001 0 0 ] def
-  /FontBBox [ 0 0 0 0 ] def
-  /Encoding 256 array def
-  0 1 255 { Encoding exch /.notdef put } for
-  Encoding
-    dup (b) 0 get /Bullet put
-    dup (c) 0 get /Circle put
-    dup (C) 0 get /BoldCircle put
-    dup (u) 0 get /SolidTriangle put
-    dup (t) 0 get /Triangle put
-    dup (T) 0 get /BoldTriangle put
-    dup (r) 0 get /SolidSquare put
-    dup (s) 0 get /Square put
-    dup (S) 0 get /BoldSquare put
-    dup (q) 0 get /SolidPentagon put
-    dup (p) 0 get /Pentagon put
-    (P) 0 get /BoldPentagon put
-  /Metrics 13 dict def
-  Metrics begin
-    /Bullet 1000 def
-    /Circle 1000 def
-    /BoldCircle 1000 def
-    /SolidTriangle 1344 def
-    /Triangle 1344 def
-    /BoldTriangle 1344 def
-    /SolidSquare 886 def
-    /Square 886 def
-    /BoldSquare 886 def
-    /SolidPentagon 1093.2 def
-    /Pentagon 1093.2 def
-    /BoldPentagon 1093.2 def
-    /.notdef 0 def
-  end
-  /BBoxes 13 dict def
-  BBoxes begin
-    /Circle { -550 -550 550 550 } def
-    /BoldCircle /Circle load def
-    /Bullet /Circle load def
-    /Triangle { -571.5 -330 571.5 660 } def
-    /BoldTriangle /Triangle load def
-    /SolidTriangle /Triangle load def
-    /Square { -450 -450 450 450 } def
-    /BoldSquare /Square load def
-    /SolidSquare /Square load def
-    /Pentagon { -546.6 -465 546.6 574.7 } def
-    /BoldPentagon /Pentagon load def
-    /SolidPentagon /Pentagon load def
-    /.notdef { 0 0 0 0 } def
-  end
-  /CharProcs 20 dict def
-  CharProcs begin
-    /Adjust {
-      2 copy dtransform floor .5 add exch floor .5 add exch idtransform
-      3 -1 roll div 3 1 roll exch div exch scale
-    } def
-    /CirclePath { 0 0 500 0 360 arc closepath } def
-    /Bullet { 500 500 Adjust CirclePath fill } def
-    /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath eofill } def
-    /BoldCircle { 500 500 Adjust CirclePath .8 .8 scale CirclePath eofill } def
-    /BoldCircle { CirclePath .8 .8 scale CirclePath eofill } def
-    /TrianglePath {
-      0  660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath
-    } def
-    /SolidTriangle { TrianglePath fill } def
-    /Triangle { TrianglePath .85 .85 scale TrianglePath eofill } def
-    /BoldTriangle { TrianglePath .7 .7 scale TrianglePath eofill } def
-    /SquarePath {
-      -450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto
-      closepath
-    } def
-    /SolidSquare { SquarePath fill } def
-    /Square { SquarePath .89 .89 scale SquarePath eofill } def
-    /BoldSquare { SquarePath .78 .78 scale SquarePath eofill } def
-    /PentagonPath {
-      -337.8 -465   moveto
-       337.8 -465   lineto
-       546.6  177.6 lineto
-         0    574.7 lineto
-      -546.6  177.6 lineto
-      closepath
-    } def
-    /SolidPentagon { PentagonPath fill } def
-    /Pentagon { PentagonPath .89 .89 scale PentagonPath eofill } def
-    /BoldPentagon { PentagonPath .78 .78 scale PentagonPath eofill } def
-    /.notdef { } def
-  end
-  /BuildGlyph {
-    exch
-    begin
-      Metrics 1 index get exec 0
-      BBoxes 3 index get exec
-      setcachedevice
-      CharProcs begin load exec end
-    end
-  } def
-  /BuildChar {
-    1 index /Encoding get exch get
-    1 index /BuildGlyph get exec
-  } bind def
-end
-/PSTricksDotFont exch definefont pop
-% END pst-dots.pro
-
-%%EndProcSet
-%%BeginProcSet: special.pro
-%!
-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/copypage{}N/p 3 def @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/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
-%!
-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
-TeXDict begin 55380996 39158280 2074 600 600 (KM2002GO.dvi)
-@start
-%DVIPSBitmapFont: Fa cmsy10 20.74 1
-/Fa 1 33 df<EE03C0EE0FF0A25FA3161FA25F163FA25F167FA24CD3FCA34B5A15035E15
-075E150F4B5A5E153F4B5A4B5AA24A90D4FC4A5A4A5A4A5A141FEC7FF04A5A495B4990D5
-FCEB0FFEEB3FFCEBFFF8000313E0000F90C312F8003F23FEC5FCA3123F000F23F8000301
-E0D5FCC613F8EB3FFCEB0FFEEB03FF6D13C06D7F6E7EEC1FF8140F6E7E6E7E6E7E6E7FA2
-6F7E6F7E151F826F7E15078215038215016F7EA3707EA2163F83A2161F83A2160FA383A2
-EE03C0975B76D8AC> 32 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fb cmr10 20.74 19
-/Fb 19 122 df<94380FFF804CB512F0041F14FE047F80922701FFFC0113C003079039C0
-003FE0031F90C7EA0FF0DB3FFCEC03F8DBFFF06E7E4A4914004A0180EC07FE4A90C8121F
-4A484B7E021F5E4A5A5D147F4A4892B57E7390C7FC495BA349715A4B6F5A735AF101C096
-C9FCB3A296380FFF8095B6FCBCFCA6D8000301C0C8123F8585A285B3B3B3496D4B7FA201
-3F01FC037F13F8007FB600FE90B712FCA6567A7CF960> 12 D<B812F8AA2D0A7EA939>
-45 D<BB12FEF2FFF01BFEF3FFC01CF01CFCD8000702F0C8003F13FF01004A030114C06E
-49DB003F7F6E060F13F809037F09007F767E0A1F13C0767F767F767F88767F777E777E8B
-89777F8B898B777FA2777FA2777FA28B8AA22080A27813C0A420E08AA320F0A620F8B020
-F0A620E0A266A220C0A3541380A320009BB5FC67A2535BA2535BA2535B676567535B6553
-90C7FC66535A525B525B0A0F5B525B525B99B5C8FC09035B090F13F84A063F5B91B56C4B
-B512C001076E033F5CBD48C9FC1CF81CC099CAFC1BF050CBFC75767CF583> 68
-D<B700C098B712E07062A27062A27062D800070EFCC7FC010020E0027E6DE00FBF5B023E
-676F6CF21F3FA36F6C1A3EA36F6D197CA26F6D19F8A36F6DF001F0A26F6DF003E0A36F6D
-F007C0A36F6DF00F80A2706CF01F00A3706C183EA2706D5FA3706D5FA2706D4C5AA3706D
-4C5AA3706D4C5AA2706D4C5AA3716C4CC7FCA2716C163EA3716D5DA3716D5DA2716D4A5A
-A3716D4A5AA2716D4A5AA3716D4A5AA3726C4AC8FCA2726C143EA3726D5BA2726D5BA372
-6D485AA3726D485AA2726D485AA3726D485AA2736C48C9FCA396383FFF3EA37313FCA273
-5BA3735B147F735B4A7E497F010701F06F494C7F011F01FC99B57E90B66C080714FCB86C
-6D4991B912E0A274C8FCA31A3E93767BF59E> 77 D<B700C00407B712FC8282A28282D8
-0001DF0007ECFC00D9003F6D050014E070063F1380E30FFEC7FC71715A023E6E715A836F
-735A6F7F83816F7F83816F7F84816F80707FA2707F707FA2707F707FA2707F7080A27080
-717FA2717F717FA2717F717FA2717F7180A27180727F8684727F8684727F868472808784
-737F737FA2737F737FA2737F737FA27314807314C0A27413E07413F0A27413F87413FCA2
-7413FE7413FFA27414817414C1A27513E17513F11DF9877513FD1DFF8787A28787A28888
-88A28888A28888147F884A6C197F497F010701F0193F011F01FC191F90B67EB86C170F1D
-07A21D031D01775A76767BF581> I<DB1FFF150E4AB500F0141E020F02FE143E023FECFF
-C091B76C137E4904F813FE0107D9F80113FE49903A80001FFF014948C700031383494802
-0013C3D97FF0ED3FE74948ED0FFF4849814A814890C97E488349177F000F183F4848171F
-A249170F123F1907485A1903A2190112FFA21900A36D187EA47F1A3E7FA26C7EA26E94C7
-FC806C7F8014FC6C13FF15C06C14F8EDFF806C15F8EEFF806C16F86CEEFF806C17F86D16
-FE6D707E6D17E06D836D836D17FE6D836D6C83021F830207831400030782DB007F811607
-DC007F800507801700061F7F84180372148084857313C085A2851BE000788412F8A285A4
-857EA47E1BC0A27EA24F13807FA26D19006D5F626D170F6D606D171F6D606D173F6E4C5A
-02E04C5A6E4B5BD9CFFC4B5BD987FF4B90C7FC018301E0EC1FFE010001FCEC7FFC48903B
-7FFFE003FFF8021F90B65A48010716C048010193C8FC6E6C14FC48020714F048DA003F90
-C9FC4B7E76F960> 83 D<EDFFF8021FEBFF80027F14F00103B612FC499038803FFF9027
-1FF800077FD93FC0010113E049C87F01FEED3FF80001707E6D6C81486D140F6E6E7E486D
-826E80858385A3717F6C5B6C5B6C5B6D5A90CAFCA74CB5FC93B6FC151F4AB7FC020F14E0
-023FEBF80091B51280010301FCC7FC010F13F04913C04990C8FCEBFFFE4813F8485B485B
-A2485B485BA24890C9FC1BF8485AA3485AA25FA45FA26D5D127F5F6C6C923A1F3FF801F0
-A26C6D143E6C6D913A7C1FFC03E06C6DD901F89038FE07C06C6D49486CB5FC6C01FC9026
-0FE00714806C6CB46CB4486C14006D90B5C66C13FC010702FC6D5B010002F0EC1FC0020F
-018091C8FC4D4F79CC56> 97 D<EC1F800003B5FCB6FCA6C6FC131F7FA27FB3AEEF3FFC
-0403B512C0040F14F8043F14FE933AFFE01FFF80922783FE000313E0DB87F801007FDB8F
-E0EC3FF8DB9F806E7E03BFC86CB4FC03FE6F7F4B6F7F4B814B6F7F4B834B707EA24B707E
-871A1F87A21C80861CC0A31CE0A286A31CF0AE1CE0A3621CC0A31C8062A21C00A2505A63
-6F167F636F4C5AA26F4B5B6F4B5B02FE60DAFC7C4B90C7FC6FED1FFE4A6C6C4A5A6F6CEC
-7FF09126F007F049485ADB03FC01075B9128E001FF807F90C8FC6F6CB512FC4A011F14F0
-90C8000714809326007FF8C9FC547A7BF760> I<1A7E95380FFFFE0503B5FCA6EF0003F0
-007F193FA2191FB3AE923801FFE0031F13FE92B612C0020315F0020F9038E01FF8913A3F
-FE0003FEDA7FF8EB007FDAFFE0EC3F9F010349EC0FDF4949EC07FF4948C87E494881013F
-824948167F495A193F485B48181F5C5A485BA25AA291CAFC5AA35A5BA312FFAE127FA37F
-A27EA37E807EA27E806C183F6C7F197F6C6D16FF137F6D6C5D6D6C4B7F6D6C5D6D6CDB0F
-DF7F6D6DDA3F9F13F06D6DDA7F1FEBFFF06D01F0EB01FCDA7FFCEB07F8913A1FFF807FF0
-020790B512C002011500DA003F01FCEDFC00030301C00280C7FC547A7AF760> 100
-D<923807FFC0033F13FC4AB67E020715E0021F01017F913A7FF8003FFCDAFFE0EB0FFE49
-496D7E0107496D7F4990C76C7F49486E7F49488249486F7E01FF163F4A824849151F4884
-5C48717EA2485B1A804883A24890C9FCA21AC05A845BA312FF90BAFCA31A8049CCFCAA12
-7FA27FA27EA36C7FF10380F107C07E6E160F7E6C6DEE1F80A26CF03F006C7F6E167E017F
-17FE6D6C5E6D6C4B5A6D6C15036D6D4A5A6D6D4A5A01006DEC3FC0DA7FF802FFC7FCDA1F
-FEEB03FE913A0FFFC03FF8020390B55A020015C0031F49C8FC030113F0424F7BCC4D> I<
-EB07E0EB1FF8497E497E90B5FC4880A86C91C7FC6D5A6D5A6D5AEB07E090C9FCB3A4EC1F
-8048B5FCB6FCA6C6FC131F7FA27FB3B3B3497FA2017F13F0B712F8A625747BF32F> 105
-D<EC1F800003B5FCB6FCA6C6FC131F7FA27FB3B00503B612FCA605001580063F01F8C7FC
-1AE07213804FC8FC19F84E5A19C04E5A4EC9FC4D5A4D5A4D5AEF0FE04D5AEF7F804DCAFC
-4C5A4C5A4C5A4C5A161F163FEEFFF803817F03837F1587038F7F039F80EDBF9FDBFF0F7F
-4B6C7F15FC4B6C7F4B6C7F4B7E4B8092C76C7E717EA2717F717FA2717F717F8385717F72
-7EA2727E727FA2727F727FA2727F8686496D824E6D7E017F01F04A14E0B700F890B712C0
-A652787BF75B> 107 D<EC1F800003B5FCB6FCA6C6FC131F7FA27FB3B3B3B3B3A9497FA2
-017F13F8B712FCA626787BF72F> I<023FDA1FFEEE3FFC0003B591B500E04AB512C0B601
-0702FC020F14F8041F6E023F8093283FE01FFF8090397FC03FFF93267F00036D9026FE00
-077F04FC6D9026E001F86D7FDB03F06D9026F007E06D7FC64A48027F49487F011F4A03F8
-49816D49486E6C48C86C7E4BC8143E6D013E031F49153F033CDCFE7882037C17F84B705A
-4B6F49151F8C4B5FA34B5FA44B94C9FCB3B3A6496D4B6D4B7EA2017F01F892B500F04AB5
-12E0B7D8FC01B7D8F803B712F0A6844C7ACB8F> I<023FEC1FFE0003B591B512E0B60107
-14FC041F80933A3FE01FFF8093267F00037F04FC6D7FDB03F06D7FC64A48147F011F4A81
-6D49486E7E4BC8FC6D013E151F033C82157C5D4B150F865DA35DA45DB3B3A6496D4B7FA2
-017F01F892B512F0B7D8FC01B712F8A6554C7ACB60> I<EEFFE0031F13FF037F14C00203
-B612F8020F9038803FFE913A1FFC0007FFDA7FF0010113C0DAFFC06D6C7E49496E7ED907
-FEC8EA0FFC49486F7E49486F7E013F844A8149486F7F01FF844849707EA24849707E4885
-A24890CA6C7EA24885A3481A804983A2007F1AC0A500FF1AE0AD007F1AC0A46C6C4D1380
-A36C1A00A36C6D4C5AA26C616E167F6C616C6D4C5AA26C6D4B5B017F606D6C4B5B6D6C4B
-90C7FC6D6C4B5A6D6C4B5A6D6D4A5A6D6D4A5A9026007FF0903801FFC0DA3FFC01075B91
-280FFF803FFEC8FC020390B512F8020015E0031F91C9FC030113F04B4F7BCC56> I<023F
-ECFF800003B5010713F0B6011F7F4C13FE9338FF83FF923801FC07922603F00F1380DB07
-E014C0C64B5A011FEB0F806DEB1F00151E6D133E153C037C6D138003786D130003F86D5A
-4B6D5A94C8FCA25DA35DA65DB3B3A2497F81017F13FCB87EA63A4C7CCB43> 114
-D<EC03E0A81407A5140FA4141FA2143FA3147FA214FF5BA25B5B5B5B137F48B812E0120F
-B9FCA4D8000101E0C8FCB3B3187CB06D16F881A3027FEC01F081143F6FEB03E0141F6E6C
-EB07C06E6CEB0F806E9038801F006EEBE07F6EEBFFFE033F13F8030F5B03011380366C7D
-E943> 116 D<B700F049B612F0A6C66C01FCC8003FEBFE00011F01F0030F13F06D490303
-13C06D495F7390C7FC6D6D5E627F6F5E7F626F1503027F5F6F1507023F5FA26F150F021F
-5F6F151F6E94C8FCA2705C6E163E70147E6E167C8219FC6E5E7013016E5E701303037F5D
-A2701307033F5D70130F031F5DA270131F6F92C9FC715A6F143EA2EFC07E6F147CEFE0FC
-6F5CA217F16F5C17FB047F5BA217FF705BA2705BA37090CAFCA2705AA3705AA2705AA25F
-A216035F16075FA2160F5F161F94CBFCA25ED807C0143ED81FF0147E486C147C487E16FC
-486C5C15015E4B5A1507495C007F4A5A49131F4949CCFCD83FC0137E6C485B9038C003F8
-390FF80FF00003B55A6C14806C6C48CDFCEB0FF0546D7DC95B> 121
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fc cmex7 8.296 4
-/Fc 4 63 df<12F012FCB4FC13C0EA3FE0EA1FF86C7E6C7E6C6C7E6C7F6C7F137F6D7E6D
-7E80130F806D7EA26D1380A36D13C0A315E07FB3B21B3E737E46> 57
-D<ECFFE0B3B25B15C0A3491380A3491300A2495A5C131F5C495A495A13FF485B485B4848
-C7FC485A485AEA3FE0B45A90C8FC12FC12F01B3E738046> 59 D<EAFFE0B3B36C7EA46C
-7EA36C7EA2120F6C7EA26C7E7E806C7F137F6D7E6D7E6D7E6D7EEB01FE6D7EEC3FC0EC1F
-E01407A2141FEC3FC0ECFF00495AEB07FC495A495A495A495A13FF485B91C7FC5A485AA2
-485A121FA2485AA3485AA4485AB3B31B7E638046> 61 D<EAFFE0B3A50B17638046> I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fd cmtt8 10.37 53
-/Fd 53 122 df<001E130F003FEB1F80397F803FC000FF14E0A4007F14C0A9EB001FA36C
-1480A5003E130F001CEB07001B1A77B52E> 34 D<007FB612C0A2B712E0A36C15C0A223
-077B9D2E> 45 D<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C6F8B2E>
-I<ED03C01507ED0FE0A2151FA2ED3FC0A2ED7F80A2EDFF00A24A5AA24A5AA24A5AA25D14
-0FA24A5AA24A5AA24A5AA24AC7FCA2495AA2495AA25C1307A2495AA2495AA2495AA2495A
-A249C8FCA2485AA25B1203A2485AA2485AA2485AA2485AA2485AA248C9FCA25AA2127CA2
-23437BBB2E> I<EB01FC90380FFF80497F017F13F090B57E488014073903FC01FE48486C
-7E497F4848EB3F80001F15C049131FA24848EB0FE0A290C712074815F0A3007E140300FE
-15F8AC6C14076C15F0A46C6CEB0FE0A36C6CEB1FC0A26D133F6C6CEB7F80000715006D5B
-6C6C485A3901FF07FC14FF6C5C6D5B011F13C06D5BD901FCC7FC25377CB52E> I<EB03C0
-497EA2130FA2131FA2133F137FEA01FF120F127FA2B5FC13CFEA7F0F12181200B3AD003F
-B512F84814FCA46C14F81E3678B52E> I<EB0FFE90387FFFC048B512F04814FC4880001F
-80D9F80F1380263FE00013C04848EB7FE049131F90C7EA0FF05A6D130716F81503A26CC7
-FCA2121CC8FCA2150716F0150F16E0151FED3FC0A2ED7F80EDFF004A5A14034A5AEC1FF8
-EC3FE04A5A4A5A4990C7FCEB07FE495AEB1FF0495A495A495A3A03FE0001F04848EB03F8
-485A485A48B6FCB7FCA37E6C15F025367CB52E> I<0007B612804815C05AA3168001C0C8
-FCADEBC1FF01CF13E090B512F8818181020113809039F8007FC001E0EB3FE049131F6C48
-EB0FF06CC71207C8FC16F81503A3123E127F487EA2150716F0150F90C7EA1FE06C6C133F
-6DEB7FC06C6CEBFF80EBFC076CB612006C14FC6C5C000114E06C6C1380D90FFCC7FC2536
-7CB42E> 53 D<EB03FE90381FFFC0017F13F048B512FC48804880260FFE0313803A1FF0
-007FC04848EB3FE049131F49130F007F15F090C71207A56C6CEB0FE06D131F6C6CEB3FC0
-6C6CEB7F803A07FC01FF006CB55A6C5C6C6C13F0011F13C0017F13F048B512FC48EB8FFE
-3A0FF800FF804848EB7FC001C0131F4848EB0FE0007F15F090C712074815F8481403A600
-7FEC07F0A26D130F6C6CEB1FE06D133FD81FF8EBFFC0260FFE0313806CB612006C5C6C5C
-6C6C13F0011F13C0D903FEC7FC25377CB52E> 56 D<ED03C0150FED1FE0157F15FF0203
-13C05C021F13004A5AECFFF8495B010713C0495BD93FFEC7FC495A3801FFF0485B000F13
-804890C8FCEA7FFC5BEAFFE05B7FEA7FF87FEA1FFF6C7F000313E06C7F38007FFC6D7E90
-380FFF806D7F010113F06D7FEC3FFE6E7E020713C080020013E0157F151FED0FC0150323
-2D7BB02E> 60 D<007FB612FCA2B712FEA36C15FC6C15F8CAFCA7003FB612F84815FCB7
-12FEA36C15FCA227157DA42E> I<1278127EB4FC13C07FEA7FF87FEA1FFF6C7F000313E0
-6C7F38007FFC6D7E90380FFF806D7F010113F06D7FEC3FFE6E7E020713C080020013E015
-7F15FF020313C05C021F13004A5AECFFF8495B010713C0495BD93FFEC7FC495A3801FFF0
-485B000F13804890C8FCEA7FFC5BEAFFE05B90C9FC127E1278232D7BB02E> I<147F4A7E
-A2497FA4497F14F7A401077F14E3A3010F7FA414C1011F7FA490383F80FEA590387F007F
-A4498091B5FCA44881A29038FC001FA200038149130FA4D83FFFEB7FFE486DB5FCB51580
-A26C16006C496C5A29367EB52E> 65 D<003FB512F04814FEB7128016C06C15E06C15F0
-3A03F8001FF81507ED03FC150116FE1500A5150116FC150316F8150FED1FF090B612E016
-C01600A2168016E09039F8003FF0ED07F8ED03FC150116FE1500A2167FA616FF16FE1501
-1503ED07FC151F003FB612F84815F0B712E016C06C15006C14F828357FB42E> I<91387F
-803C903903FFF03E010FEBFC7E49EBFEFE4913FF90B6FC48EBE07FEC801F3903FE000F48
-481307484813035B48481301A2485A15005B127F90C8FC167C16005A5AAB7E7EA2167C6D
-14FE123F7FA26C7E15016C6C14FC6D13036C6CEB07F86C7E3A01FF801FF09138E07FE06C
-90B512C0013F14806D14006D5B010313F89038007FC027377DB52E> I<007FB57EB612E0
-15F815FE816C15803807F0019138007FC0ED3FE0ED1FF0150FED07F8A2ED03FCA2150116
-FE1500A4167FAC16FEA3150116FCA21503ED07F8A2ED0FF0151FED3FE0ED7FC0EC01FF00
-7FB61280B712005D15F85D6C148028357EB42E> I<003FB612FC4881B7FCA27E7ED803F8
-C7FCA7167C93C7FCA415F84A7EA490B5FCA6EBF801A46E5A92C8FCA4161FEE3F80A8003F
-B7FC5AB8FCA27E6C160029357EB42E> I<007FB612FEB8FCA47ED803F8C7127FA7163E16
-00A4157C15FEA490B5FCA6EBF800A4157C92C7FCAD387FFFE0B57E80A25C6C5B28357EB4
-2E> I<9138FE01E0903907FFC1F0011F13F34913FF5B90B6FC4813C14848C6FC4848137F
-49133F4848131F5B001F140F5B123F491307A2127F90C7FCED03E092C7FC5A5AA7913801
-FFFE4A13FFA37E6C6D13FE91380007F0A27F003F140FA27F121F6D131F120F7F6C6C133F
-6D137F6C6C13FF3801FF816C90B5FC7F7F6D13E70107EBC3E0D900FEC7FC28377DB52E>
-I<003FB512FE4880B71280A26C15006C5C260007F0C7FCB3B3A5003FB512FE4880B71280
-A26C15006C5C21357AB42E> 73 D<0103B512C04914E016F0A216E06D14C090390001FC
-00B3B0123E127FEAFF80A214035DEB000F397FE03FF090B55A6C5C6C5C6C91C7FC000313
-FC38007FE024367BB42E> I<387FFFF0B57EA46C5BD803F8C8FCB3AE167C16FEA8007FB6
-FCB7FCA46C15FC27357DB42E> 76 D<D87FF0EB07FF486C4913806D5BA36C6C49130000
-0F15F801DE133D01DF137DA49038CF80F9A314C1A201C713F1A214E3A201C313E1A314F7
-01C113C1A39038C0FF81A4EC7F01A2141C1400ACD87FF8EB0FFF486C491380A46C486D13
-0029357EB42E> I<D87FF8EB3FFF486C4913807FA27F6C6E13000007EC03F0EBEF80A3EB
-E7C0A314E013E314F0A213E114F8A213E014FCA2147C147EA2143E143FA2141F1583A214
-0F15C3A2140715E3A2140315F31401A3EC00FBA3157FEA7FFEB5FC153FA2151F6C486D5A
-29357EB42E> I<90387FFFC00003B512F8000F14FE4880A2481580EBF0013A7FC0007FC0
-49133FA290C7121FA34815E048140FB3A86C141FA26C15C0A36D133FA26D137F3A3FF803
-FF8090B6FC6C1500A26C5C000314F8C66C13C023377BB52E> I<003FB512E04814FCB7FC
-16806C15C06C15E03A03F8007FF0ED1FF8150FED07FC1503150116FE1500A6150116FC15
-031507ED0FF8151FED7FF090B612E016C01680160015FC15E001F8C8FCAF383FFF80487F
-B57EA26C5B6C5B27357EB42E> I<387FFFFEB612C015F08115FE7E3907F007FF02007F6F
-7E153F151F82150FA5151F5E153F157F4B5A020790C7FC90B55AA215F85D81819038F003
-FEEC00FF8182153FA8EE87C0EE8FE0A5D87FFFEB1FDFB50080EBFFC08117806F13006C49
-6C5AC912F82B367EB42E> 82 D<90390FF80780D97FFF13C048B512CF4814FF5A5A381F
-F80F383FE00349C6FC4848137F90C7FC00FE143FA2151FA46CEC0F806C6C90C7FC7F7FEA
-3FF86CB47E6C13F86CEBFFC06C14F06C14FC6C6C7F010F7F01001480020F13C0020013E0
-153FED1FF0150FED07F8A2007C140312FEA56CEC07F0A26D130F6DEB1FE001F0133F01FF
-EBFFC091B5128016005D00FC5CD8F83F13F0D87803138025377CB52E> I<003FB7FC4816
-80B8FCA43AFE007F003FA7007CED1F00C791C7FCB3AF90381FFFFC497F497FA26D5B6D5B
-29357EB42E> I<3B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E0D8
-03F8C7EAFE00B3AF6D130100015DA26D130300005D6D13076D6C485AECC01F90393FF07F
-E06DB55A6D5C6D91C7FC6D5B010013F8EC1FC02D3680B42E> I<D87FFEEB3FFFB5491380
-A46C486D1300D807F0EB07F0A46C6C495AA46C6C495AA46D133F00005DA36D137F6D91C7
-FCA490383F80FEA490381FC1FCA4010F5B14E3A301075BA314F701035BA314FF6D5BA46D
-5BA26EC8FC29367EB42E> I<D87FFEEB3FFFB54913806EB5FCA24A7E6C486D1300D807F8
-EB0FF000035D6D131F00015D6D133F00005D6D137F6D91C7FC6E5AA2013F5B14C1011F5B
-14E3010F5BA2903807F7F0A201035B14FF6D5BA36D5BA26EC8FCB0903807FFF0497FA46D
-5B29357EB42E> 89 D<EBFFF80007EBFF804814E048804880819038E00FFEEC01FF6C48
-7E6F7E0007C7123FC8FCA291B5FC131F90B6FC1203120F5A48EB803F387FF80013C048C7
-FC5AA46C147F6C6C13FF6D5A383FF00F90B7FC6C16807E6C14CF0001EBFE0727003FF001
-130029257CA42E> 97 D<EA7FF8487EA4127F1201AAEC0FF8EC7FFE01FDB57E90B67E82
-829138F83FF89138C007FCEC80034A6C7E491300498082A21780163FA7167F17007F5E6D
-495AA26E485AECC00F9138F03FF891B55A5E5E01FD91C7FC3900FC7FFC9038780FF02935
-7FB42E> I<903803FFE0011F13FC017F7F90B6FC48158012071400EA0FF84848EB7F0048
-5A49131C484890C7FC90C9FCA25A5AA77E7E7FED0F806C6CEB1FC07F6C6C133FD80FFCEB
-7F803907FF81FF91B5120000015C6C5C6D5B011F13E0010390C7FC22257AA42E> I<9138
-07FF804A7FA480EC001FAAEB07F8EB3FFF4913DF48B6FC5A5A380FFE07381FF801EBE000
-4848137F153F4848131F90C7FCA25A5AA77E7E153F7F003F147F6D13FF6C6C5A6D5A380F
-FE0F6CB7FC6C16806C14DF6C149F90383FFE1F90260FF80F130029357DB42E> I<EB03FE
-90380FFFC0013F13F090B57E4880488048EB03FF380FF8004848EB7F80D83FC0133FED1F
-C0485A90C7FCED0FE05A90B6FCA516C048C9FC7E7E7F003FEC07C06DEB0FE06C7E6D131F
-D80FFC133F3A07FF80FFC06C90B512806C15006C5C013F5B010F13F00101138023257CA4
-2E> I<EC03FCEC1FFF027F13C091B5FC4914E05B903807FE3F14F890390FF01FC09138E0
-0F80ED070092C7FCA5003FB6FC481580B7FCA36C150026000FE0C7FCB3A7003FB512F848
-80B67EA26C5C6C5C23357DB42E> I<16FC903903FC07FF90261FFF9F1380017F90B5FC90
-B712C05A4815BF3A07FE07FE3FD9F801EB1F803B0FF000FF0F00496DC7FC001F8149133F
-A56D137F000F92C7FC6D5B6C6C485AEBFE0790B55A5D485C5D01DF1380D9C3FCC8FC01C0
-C9FCA27F7F6CB512F815FF16E04881488148819039E0000FFED87F80EB01FF90C87E00FE
-ED3F80A248151FA46C153F007FED7F0001C0495AD83FF0EB07FED81FFEEB3FFC6CB65A6C
-5D6C5DC61580011F01FCC7FC010313E02A3A7EA52E> I<EA7FF8487EA4127F1201AAEC07
-F8EC3FFE91B57E90B67EA282ECF81F9138E00FF01480EC0007A25BA25BB23B7FFFF03FFF
-C0B56C4813E092B5FCA2816C496C13C02B357FB42E> I<EB03C0497E497E497EA46D5A6D
-5A6D5A90C9FCA7381FFFF0487F5AA27E7EEA0003B3A7003FB6FC481580B7FCA27E6C1500
-21367AB52E> I<EC0780EC0FC0EC1FE0EC3FF0A4EC1FE0EC0FC0EC078091C7FCA790B512
-E04814F0A47EEB0007B3B3A2140F003E14E0007F131FD8FF8013C0143FECFF8090B51200
-7E5C6C13F86C5B000313801C497CB52E> I<EA3FF8487E12FFA2127F123F1200AA913807
-FFFE4A7F4A1480A26E14006E5B9138007F804BC7FC4A5A4A5A4A5A4A5A4A5A4A5A4A5A4A
-C8FC01FD7F90B57E81A2ECE7F0ECC3F8EC83FC9038FE01FEEBFC00157F6F7E82151F6F7E
-6F7E3B3FFFF03FFF80486D4813C0B515E0A26C16C06C496C13802B357FB42E> I<387FFF
-F0B57EA47EEA0003B3B3A5007FB612C0B712E0A46C15C023357BB42E> I<3A3FC1FC01FC
-3A7FE7FF07FFB6009F138015BF6C91B512C07E0007010FEB0FE001FC13FC9039F807F807
-A201F013F0A201E013E0B33B3FFC0FFC0FFC3B7FFE1FFE1FFEB5393FFF3FFFA23B7FFE1F
-FE1FFE3B3FFC0FFC0FFC302581A42E> I<397FF807F839FFFC3FFE91B57E90B67EA26C81
-0001EBF81F9138E00FF01480EC0007A25BA25BB23B7FFFF03FFFC0B56C4813E092B5FCA2
-816C496C13C02B257FA42E> I<EB03FE90381FFFC0017F13F090B57E000314FE4880260F
-FE031380EBF800D81FE0EB3FC04848EB1FE049130F007F15F090C71207A200FEEC03F8A8
-6C14076C15F06D130FA26C6CEB1FE06D133F6C6CEB7FC06C6CEBFF80EBFE036CB612006C
-5CC614F86D5B011F13C0D903FEC7FC25257CA42E> I<397FF80FF839FFFC7FFE01FDB57E
-90B67E826C8100019038F83FF89138C007FCEC80034A6C7E491300498082A21780163FA7
-167F17007F5E6D495AA26E485AECC00F9138F03FF891B55A5E5E01FD91C7FC9038FC7FFC
-EC0FF091C9FCAD387FFFF0B57EA46C5B29387FA42E> I<D87FFFEB1FF0B53880FFFC0283
-13FE148F029F13FF6C13BF39003FFFF01580ED007E02FC133C4A13005CA25C5CA35CAE00
-7FB512F0B67E81A25D6C5C28257EA42E> 114 D<90383FFE3C48B512FE1207121F5A5AEB
-E00738FF00014813005AA26C147C6C91C7FCEA7FF0EBFF806C13FE6CEBFFC0000714F000
-0114FCD8003F7F01007F02031380EC007F007CEC1FC000FE140FA27EA26D131F6DEB7F80
-9038F803FF90B612005D5D5D00F814E026781FFEC7FC22257AA42E> I<EB0780497E131F
-A9003FB612C04815E0B7FCA36C15C026001FC0C7FCB0ED01F0ED03F8A4150702E013F001
-0F130F9138F83FE06DB5FC16C06D14806D14009038007FFCEC1FE025307EAF2E> I<3A7F
-F801FFE0486C487FA4007F7F0001EB0007B3A3150F151F6D133F6D13FF6C90B612C017E0
-7F7F6D13E70103010313C02B257FA42E> I<3A3FFF80FFFE4801C17FB51580A26C16006C
-01805B3A01F8000FE06D5CA20000141F6D5C137E153F017F91C7FC7FA290381F807EA214
-C0010F5BA214E0903807E1F8A2EB03F15D14F31301ECFBE0A2EB00FF5D147FA25D143FA3
-92C8FCA25C147EA214FE00075BEA1FC1383FE1F813E3EBE7F0131FEBFFE06C5B5C6C90C9
-FCEA07FCEA03F029387EA42E> 121 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fe cmtt8 16.592 1
-/Fe 1 65 df<ED03FF031F13F092B512FC020380020F6E7E4A81027F8191B77E01038249
-D9FE017F499038F0003F4901C06D7E4990C7120F4A6E7ED97FF8804948EB0FF14AD93FFD
-1380484990B6FC48EB80034B15C048495A495B000F5C494915E049ECFC3F001F9138FFF0
-0F494A7E003F49497E4C7E494890C713F0A2007F4A147FEBC0074B143FA300FF130F0180
-49141FAC01C06D143F007F010716E0A36F147FD9E00316C0003F6E14FFA26D6C6D481380
-705A001F6D6D4813006D6E5A000F91397FFC3FFE6D91B5FC6D6D5C00076E5C6D6D5C6C6D
-6C5C6F5C6C6DC691C7FC6C6DEB3FFC6E90390FF01FC06D6C90C7EA7FE0D93FFEEDFFF06E
-5C6D01C05B6D01F0130F6D01FE90B5FC6D90B712E0010017C06E1600021F5D6E15F80203
-15E002001580031F01FCC7FC030313C03C567AD449> 64 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ff cmsy8 16.592 1
-/Ff 1 16 df<4AB47E021F13F891B6FC010315C04981011F15F84981498190B8FC481780
-4817C0A24817E04817F0A24817F84817FCA34817FEA3BAFCAC6C17FEA36C17FCA36C17F8
-6C17F0A26C17E06C17C0A26C17806C17006D5D6D5D6D5D010715E06D5D010092C7FC021F
-13F802011380383878BE49> 15 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg cmr8 16.592 72
-/Fg 72 127 df<933803FFFE047FEBFFF00307B7FC031F16C092B5D8800F13F8020301F8
-C713FE020F01C091381FFF804A90C800077FDA7FFC030113F04A486F7F010349EE7FFE49
-49707E4949707F4949707F4990CA6C7F4948717F4948717F48874A8348874A187F488748
-49721380A348497213C0A3481CE04A84AB6E606C1CC0A46C6D4E1380A36C1C006E606C63
-A26C6D4E5AA26C636D6C4D5BA26D6C4D5BA2011F626D6C4D5B6D97C7FC6F5E6D616D616F
-161F6D616E6C4C5A023F60A26E6C4C5A020F60A26E6C4CC8FC00F801034D14F86F150100
-7C01014DEB01F0A202005F037E4B5A007E1B03003E023E4C14E0033F1507A2003F6E4C13
-076C1CC001C01A1F90B66C4AB6FCA36C1C80A56C1C0093C87E5D617AE06A> 10
-D<933807FFC093B512F8030F14FE033F6E7E9226FFFC017F02039039E0001FE0020F90C7
-EA07F04A486E7EDA3FF814074A48EC1FFC4A48143F495B495B4990C8FC4E7E49486F5AA2
-131F4A6F5A725AF003C095C9FCB094383FFFFEBAFCA526001FFCC8123F181FA2180FB3B3
-A8496C4B7E90B56C027F13C0007F02FF013FB61280A549617DE051> 12
-D<140C143FEC7F80ECFFC05B4913E05B15C05B491380491300495A5CEBFFF0485B485B48
-5B49C7FC485A485A485AEA7FC05B48C8FC5A127812301B1B62E049> 19
-D<D807E0147ED81FF8903801FF80486C4913C0486C4913E06D15F0B55B028014F8A402C0
-14FC6C80A26C80D81FFB6D13BCD807E39038007E3CD800031400A40107157C4A1478A401
-0F15F891C812F0491401A2011E15E0013E140349EC07C0A249EC0F8049150000015D4848
-143E48485C48485C48C7485A003E4A5A003C5D00186E5A2E2B7BDF49> 34
-D<ED03C01507150FED1F00153E5D15FC4A5A4A5A4A5A4A5A4A5A143F4AC7FC14FEA2495A
-13035C495A130F5C131F5C133FA2495AA249C8FCA25A5B1203A25B1207A25B120FA3485A
-A4123F5BA4127FA25BA612FFB3A3127FA67FA2123FA47F121FA46C7EA312077FA212037F
-A212017F7EA26D7EA26D7EA2131F80130F8013076D7E8013016D7EA2147F6E7E141F6E7E
-6E7E6E7E6E7E6E7E157C8181ED0FC015071503228972E639> 40
-D<127012F8127C7E7E6C7E7F6C7E6C7E6C7E6C7E137E137F6D7E6D7EA26D7E8013076D7E
-80130180130080A26E7EA26E7EA281141F81A2140F81A2140781A36E7EA48180A41680A2
-80A616C0B3A31680A65CA21600A45C5DA44A5AA35D140FA25D141FA25D143F5DA24A5AA2
-4AC7FCA25C13015C13035C495A130F5C495AA2495A49C8FC137E5B485A485A485A485A5B
-48C9FC123E5A5A1270228978E639> I<EA07E0EA1FF8487E487E7FB5FC1480A414C07EA2
-7EEA1FFBEA07E3EA0003A413071480A4130F14005BA2131E133E5BA25B5B1201485A485A
-485A48C7FC123E123C1218122B748F29> 44 D<B712FCA926097EA131> I<EA07E0EA1F
-F8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA07E01010748F29> I<181E183E18
-7FA218FFA2EF01FEA218FC1703A218F81707A2EF0FF0A218E0171FA218C0173FA2EF7F80
-A218005FA25F1601A24C5AA25F1607A25F160FA24C5AA25F163FA25F167FA24CC7FCA25E
-1501A25E1503A24B5AA25E150FA25E151FA24B5AA25E157FA24BC8FCA25D1401A25D1403
-A24A5AA25D140FA25D141FA24A5AA25D147FA292C9FC5CA2495AA25C1303A25C1307A249
-5AA25C131FA25C133FA2495AA291CAFC5BA25B1201A2485AA25B1207A25B120FA2485AA2
-5B123FA25B127FA248CBFCA25AA2127CA2388978E649> I<ED7FE0913807FFFE021F6D7E
-027F14E0903A01FFC03FF8903A03FE0007FCD90FF8EB01FF49486D7F49486E7E49486E7E
-4A141F49C86C7E4883491507000383A248486F7EA2000F834981A2001F1880A3003F18C0
-A34981007F18E0A700FF18F0B3A7007F18E0A66D5D003F18C0A5001F1880A26D5D000F18
-00A200075FA26C6C4B5AA26C6C4B5AA26C6D4A5AA26D6C4A5A6D6C4A5A6D6C4A5AD90FFC
-010390C7FC6DB4EB0FFE01019038C03FF86D90B55A023F14C0020749C8FC9138007FE03C
-5F7ADB49> I<153C157E15FE14031407141F14FF130748B5FCB6FCA2141F13F8EAFE00C7
-FCB3B3B3B04A7E4A7F49B512E0007FB81280A5315C74DB49> I<913807FFC0023F13FC49
-B67E010715E04915F890263FF80713FE903A7FC0007FFF49C7001F7FD801FC6E7F484802
-037FD807E06E7F48486E7F844848157F90C96C7E5A003E707E127E007C1880D87FE08148
-7E7F19C06D81A66C5A6C5A6C485DEA0780CA1480A25F1900A24D5AA260177F604D5A5E60
-4C5B4C5B95C7FC4C5A4C5A4C5A5F4C5A4C5A4B5B4B90C8FCED07FC4B5A4B5A4B5A4B5A93
-C9FC15FE4A5A4A5A4A5A4A48EC07C04A5A4A5A4AC8EA0F8014FC495A495A495A4948151F
-4948160049C9FC017E5E495E48B9FC5A5A485F5A5A5AB9FCA260A33A5C79DB49> I<9138
-01FFF0021F13FF91B612E0010315F8010F9038007FFED91FF0EB0FFFD93FC06D7F49C700
-017F01FE6E7FD801F88248486F7E4982D807FC153F01FF828048836E80A66C495C6C90C8
-FC6C485E6C5A90C9FC4D5AA34D5A60A24C5B4C5B604C90C7FC4C5A4C5AEE7FF8923801FF
-E0033F5B023FB5C8FC16F816FF17E091C7EA7FF8EE1FFE933807FF80707F04007F84717E
-717E84717E19808319C0A219E0A28319F0A2EA07C0EA1FF0487E487EA2487EA319E05FA2
-5B6C4817C05B494B1380003EC9FC003F4C13006C6C5E6D4B5A6C6C15FFD807F85E6C6C4A
-5B6CB46C010713C06C01E0011F5BD93FFF017F90C7FC6D90B512FC01075D010115C0D900
-3F91C8FC020113F03C5F7ADB49> I<EF0F8084171F173FA2177F17FFA25E5E5EA25E5EA2
-5E5E167D16F9150116F1ED03E1150716C1ED0F81ED1F01153F153E157C15FC15F8EC01F0
-140315E0EC07C0140F1580EC1F005C143E5C5C13015C495A13075C495A131F91C7FC133E
-137E137C5B12015B485A485A120F5B48C8FC5A123E5A12FCBBFCA5C90003EBC000B04C7F
-041F13F892B8FCA5405D7CDC49> I<01E01670D801FCED03F0D9FF80143F02FEEB07FF91
-B75A606095C7FC17FC5F5F17C094C8FC16FC16E001F091C9FC91CBFCB2ED7FF0913807FF
-FE021FEBFFC0027F80903AF1FFC03FF8903AF3FC000FFCD9F7F0EB03FFD9FFC06D7F4A6D
-7F49C86C7E5B717E498249151F6C488290C97F170F84A3711380A419C0A5EA1FC0EA3FF0
-127F7F12FF7FA219805B5F5B1900EA7FC0007CC95B007E161F003E5F003F163F606C6C15
-7F6C6C5E6D4B5A6C6C4A5B6C6C4A5B6C6C4A90C7FC6CB4EC1FFED97FC0EB7FFC903A3FFC
-03FFF06DB65A0107158001014AC8FC6D6C13F0020790C9FC3A5F79DB49> I<EEFFF0030F
-13FE033F6D7E92B67E02039038C03FF0913A0FFE0007F8DA1FF81301DA3FE06D7EDAFF80
-147E4990C7EA03FE4948140749484A7E49485C131F5C495A137F495A715A48496E5A715A
-4890CBFCA25A5B120FA2121F5BA2123FA25DED7FFF484848B512C0020714F04A14FC9139
-1FC00FFE91393F0001FF00FF017C6D7F4A6E7ED9F9F06E7ED9FBE06E7E4A6E7E01FF824A
-6E7E8491C8FC7113805B19C0A2498119E0A44917F0A2127FA7123F7FA3001F18E0A3120F
-6D4B13C0A2120719806C7E4D13006C5F6E140F6C5F6D6C4A5A6E4A5A6D6C5D6D6C4A5A6D
-6C49485A6DB4010790C7FC6D9038E03FFE010090B55A6E14F0021F14C0020791C8FC9138
-007FF03C5F7ADB49> I<EDFFF0020713FF023F14E091B612F8499038C03FFC903A07FC00
-07FFD90FF001017FD91FC06D6C7E49486E7E49C86C7E01FE6F7E48481507717E48488217
-01485A8483120FA37FA37F6D4B5AA27F6C01C04A5A8002F84A5A6C6D140F02FF5D6C02C0
-495A6F495A6C02F8495A6D6D4848C7FC9238FF03FE6DECC7F86DECFFF0010715C06D92C8
-FC7F6D6C14C06E80020F14F8023F14FE91B7FC496D80902607FC1F14E049486C8090263F
-E0038049486C8049C76C7F4848141F48486E7F484802031480000F1500496F13C0484815
-1F7113E0484815038348486F13F0187F183F12FF90CA121FA3180FA419E07F127FF01FC0
-7F003FEF3F807F6C6CEE7F00A26C6C16FE6C6C4B5A6CB4ED07F86C6D4A5A6C01E0EC3FE0
-D97FFC49B45A90271FFF801F90C7FC6D90B55A010315F8010015E0021F91C8FC020113F0
-3C5F7ADB49> 56 D<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA
-07E0C7FCB3A9EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA07E010
-3B74BA29> 58 D<007FBEFCA2BF1280A36C1D006C64D2FCB3A5003FBD12FE4888BF1280
-A36C1D00A2612578B472> 61 D<EF01F04D7EA34D7EA24D7EA34D7EA34D7FA24D7FA394
-B57E17FBA2DC01F37F17F104038017E0A2040780EFC07FA2DC0F807F183F041F804D7EA2
-4C81043E7FA24C818404FC814C7FA20301824C7FA24B4881840307824C147FA2030F824C
-143FA24BC87F854B83033E81A2037E83037C81A24B83854AB97EA34A84A203E0C9FC4A48
-831A7F020F844B163FA2021F8492CA7EA2023E8586027E85027C83A202FC854A83A24948
-717F130388010784496C85131F496C4D7F90B585000702C0040F14C0B600FC0307B712E0
-A563627BE16E> 65 D<BA12E019FF1AE01AFC1AFFD8001F01F0C86C7F010701C0030F13
-E06D05037F737F9638007FFE747E8688747F86888688A2747FA8505BA3505BA2505BA250
-5B5090C7FC505A505A4F5B070713E04F5B077F90C8FC953803FFFC92B812F097C9FC1AE0
-1AFC03C0C8383FFF80070313E0070013F8747EF21FFF747F747F747F88747F8688757EA2
-8887A21D80A91D00A263641BFF6462505B6462081F5B505B505B4FB5C7FC49050713FC01
-1F01F0037F5BBC12E01B8050C8FC1AF04FC9FC595E7ADD68> I<94261FFF80EC03800403
-B500F81407041F02FF140F93B712C0030304F0131F030F9027FE003FFC133F033F01E0D9
-07FE137F92B5C8EAFF80020301F892383FC0FF4A01E0ED0FE14A0180ED07F1023F90C9EA
-01FBDA7FFC70B5FC4A4883494983494983495B4949834990CB7E5C013F85494884495A87
-485B481B7F5C5A1C3F485BA21C1F485BA25A91CD120FA35AA299C7FC5BA212FFAE127FA2
-7FA36CF30F80A3807EA26C7F1C1F1D006C7FA26C636E193E7E6C6D197E1C7C6D6C19FC6D
-6C61011F19016E4E5A6D7F6D6D4D5A6D6D4D5A6D6D4D5A6D6D4DC7FC6E6C5F6EB417FE02
-0F6DED03FC6E01E0ED07F06E01F8ED1FE0020001FFED7FC0033F01E0903803FF80030F01
-FED93FFEC8FC030390B612F8030016E0041F1580040302FCC9FCDC001F13C0596478E06A
-> I<BA12E019FF1AE01AF81AFED8001F01F8C700016D7E010701E0DA001F13E06D05037F
-070013FCF23FFE747E08077F747F747F747F757E757E757E757EA2757F89878987898789
-A2767EA389A21C3FA289A51E80AE1E00A5651C7FA265A3525AA2656365636563655190C7
-FC515AA2515A515A515A505B08075B505B083F90C8FCF2FFFC07035B49051F13E0011F01
-F84AB55ABCC9FC1AFC1AE097CAFC19E0615E7ADD70> I<BD7EA488D8001F01F8C8120F01
-0701E0ED007F6D180F1A031A001B7F1B3F881B1F1B0FA21B07A31B0388A21B01A5F001F0
-757EA499C7FCA31803A31807180F181F183FEF03FF92B7FCA59238E00003EF003F181F18
-0F18071803A31801A2F40F80A3F41F00A395C9FCA2641C3EA31C7EA31C7C1CFCA21B01A2
-1B03641B071B0F1B1F1B3F1B7F50485A1A0749183F011F01F80307B5FCBDFCA264A3595E
-7ADD64> I<BC12FEA487D8001F01F8C8121F010701E015006D183F1A0F1A038686F37F80
-A21B3FA21B1FA31B0F1CC0A21B07A6DE01F0EB03E0A498C7FCA41803A31807180F181F18
-3FEF03FF92B7FCA59238E00003EF003F181F180F18071803A31801A895CAFCB3A3815B01
-1F13FEB812F0A5535E7BDD5F> I<94261FFF80EC03800403B500F81407041F02FF140F93
-B712C0030304F0131F030F9027FE003FFC133F033F01E0D907FE137F92B5C8EAFF800203
-01F892383FC0FF4A01E0ED0FE14A0180ED07F1023F90C9EA01FBDA7FFC70B5FC4A488349
-4983494983495B4949834990CB7E5C013F85494884495A87485B481B7F5C5A1C3F485BA2
-1C1F485BA25A91CD120FA35AA299C8FC5BA212FFAE127F6D053FB712E0A47E96C7ECE000
-6E063F5B755B6C86A26C7FA36C7FA27E807E6C7F80137F6D7E6D7EA26D7F6D7F6D6D5F6D
-7F6D6D5FEC7FFE6E6C5F020F01C016FD6E01F0ED03F86E01FC923807F07F020001FF9238
-1FE03F033F01E09138FFC01F030F01FF010FEB800F030391B538FE0007030004F8130304
-1F03E090C8FC040392CAFCDC001F13E0636478E073> I<B86C90B81280A5D8001F01FCC9
-001F01FCC7FC010701F0040713F06D49705BB3B292BAFCA503E0C91203B3B3A3496D4C7F
-011F01FC041F13FCB86C90B81280A5615E7ADD6E> I<B81280A5D8003F49C7FC010713F0
-6D5BB3B3B3B3A8497F013F13FEB81280A5295E7ADD35> I<B86C0207B612E0A5D8001F01
-FCCAECFC00010701F07113E06D497190C7FC1CFC641CE0515A99C8FC1BFEF203FC505A50
-5A505A505A505A08FEC9FC4F5AF107F84F5A4F5A4F5A4F5A4FCAFC4E5AF003F84E5AF01F
-E04E5A4E5A4ECBFC4D5A4D5A17074D7E171FEF7FFF94B57E4C805E4C80DC0FF77FEE1FC3
-DC3F837FDCFF017F9226E1FE007FDBE3FC137FDBE7F880DBEFF06D7FDBFFE06D7F168093
-C76C7F4B6E7F4B6E7F5D4B6E7F4B6E7F197F86737F737F8587737F737FA2737F737F1A7F
-87747F747F8688747F747FA2747F747F8887891DE0496D94B57E011F01FC040314FEB86C
-023FECFFF8A5655E7ADD72> 75 D<B812F0A5D8001F49CBFC010713F07F5DB3B3AE1B3E
-A41B7CA61BFCA31BF81A01A31A03A21A07A21A0FF21FF01A3F1A7F1AFF611907191F4917
-7F011F01F8020FB5FCBC12E0A54F5E7BDD5B> I<B600E00707B612806F616F61A3D8001F
-6D4F01FCC7FC01071DF0902603EFFE077D5BA3DAE7FF19F9A202E36DEF01F1A302E16DEF
-03E1A202E06DEF07C1A36F6CEF0F81A26F6CEF1F01A36F6C173EA26F6C177CA36F6C17F8
-A26F6DED01F0A36F6DED03E0A26F6DED07C0A3706CED0F80A2706CED1F00A3706C153EA2
-706C5DA2706C5DA3706D495AA2706D495AA3706D495AA2716C495AA3716C49C7FCA2716C
-133EA3716C5BA2716C5BA371EB81F0A271EBC3E0A371EBE7C0A272B45AA37290C8FC497E
-725A497E497ED97FFF6F484B7F0003B500E0070F13FCB76C6D48027FB71280A3725A725A
-795E7ADD86> I<B600E093B7128081A28181D8000F0603ECE00001036DDC007F90C7FC6F
-EF1FFC70705A755A8202EF6D705A14E78202E37F02E17F14E0826F7E81836F7F6F7F8183
-6F7F81836F7F707E8284707F8284707F707F8284707F177F84717F717F8385717F838571
-7F8385727E721380841AC07213E0841AF07213F87213FC841AFEF17FFF851B837313C373
-13E3851BF37313FB851BFF858686A28686A2868686497E86496C187F497ED97FFF183F00
-03B500E0171FB76C160FA21B071B03755A615E7ADD6E> I<EF3FFE0407B512F0047F14FF
-4BB712C0030FD9E00313F8DB3FFEC7EA3FFCDB7FF8EC0FFF912601FFE0020313C04A0180
-02007FDA0FFEC9EA3FF84A48707E4A48707E4A48707E4948487013C04949707F4B824990
-CB6C7E4948727E011F864948727E4948727EA24948727FA24849727F4888A24849727FA2
-48884A84A2488891CD127F4888A448884986A400FF1D80AF6C6C501300A56C646E19FFA2
-6C64A26E606C64A26C6D4E5BA26C646E606C646E606C646D6C4E90C7FC6E60013F626D6C
-4E5A6D6D4D5AA26D6D4C5B6D6D4C5B6D6D4C5B6D6D4C5B6E6C4C90C8FCDA1FFFEE7FFC6E
-6D4B5A6E01E002035B020101F8020F13C06E01FF027F5B033F9027E003FFFEC9FC030F90
-B612F8030116C06F6C92CAFC040714F09326003FFECBFC616478E072> I<BA7E19FCF1FF
-801AF01AFCD8001F01F8C7000313FF010701E0DA003F7F6D050713E0737F07007F747E74
-7E747E741380A21CC07413E0A21CF086A31CF8A81CF0A35013E0A35013C01C80621C0050
-5A505A505A07035B070F13C0073F5B952603FFFEC7FC92B812F81AE097C8FC19F003E0CC
-FCB3B2497F011F13FCB87EA5555E7ADD64> I<EF3FFE0407B512F0047F14FF4BB712C003
-0FD9E00313F8033F90C76C7EDB7FF8EC0FFF912601FFE0020313C04A018002007F020F90
-C9EA7FF8DA1FFCEE1FFC4A48707E4A48707E4948487013C04949707F4B8249864990CB6C
-7E4948727E013F864948727E4A8401FF874A8448884849727FA248884A844888A24A8448
-88A2488891CD127FA34888A34986A200FF1D80AF007F1D00A26D62A36C64A36C6D4F5AA3
-6C646E606C64A26C6D4E5BA26C6D4E5BEF07F86C6DDA3FFE4A5B017F4B6C6C92C7FC6E91
-B56C5B013F912701FC0FE05C6D6C902703F003F0495A6D6C49486C6C495A4D6C7E6D6D48
-48017C495A6D01C06F485B6D01E090C7D83F035B6D01F06F485BDA7FF8048F90C8FCDA1F
-FCEE9FFCDA0FFF6D6DB45A6E018F5E0201D9E7C015C06ED9FFE05D033F6DD93FFEC9FC03
-0F9027FC03FFF8EC0180030190B648EC03C06F6C81040714F3933A003FFE03FC94C71607
-860701150F8675131FF53F8075137F739038F001FFF3FC0798B6120086A26586A265745C
-8665745C745C080091C7FC755AF30FF0627C78E072> I<B912F0F0FFC019F819FF1AE0D8
-001F01F8C7003F13F8010701E002017F6D9338003FFF070F7F7313E007017F737F747E87
-1A3F87747FA28886A288A864A26264A25090C8FC63505A63505A4F5B07075B4F90C9FCF1
-3FFE953801FFF8063F13E092B8128007FCCAFC19F019FC03E0C76CB4FC060F13C0060313
-F006007F737E737E737E737F737FA2737FA3737FA587A687A67514F8A485751301A27415
-F0496D70EB8003011F13FCB86C6E9038C007E086749038E00FC008019038F83F807490B5
-1200CE003F5B090713F89838007FE065617ADD6C> I<912603FFE01470023F01FE14F091
-B6EAC001010315F0010FEDF803499039007FFE07D93FF0EB07FFD97FC00100138F4948EC
-3FDF4848C8EA0FFF484881484881484881834848167F003F173F5B181F127F49160FA200
-FF1707A31803A27FA218017FA27F6C7E95C7FC7F6C7E6D7E14E06C13F8ECFF806C14F86C
-ECFF806C15F8EEFFC06C16F86C16FF013F16C06D826D16F8010382010082023F81020716
-80DA003F15C01503DB003F14E0040314F0EE003F050713F883050013FC187FF03FFE181F
-A2180FF007FF127800F883A484A27EA319FE7EA26C170319FC7FF007F87F6DEE0FF07F6D
-EE1FE06DEE3FC06D167F6D6CEDFF80D9BFE04A1300D91FF8EC07FE486CB4EC1FFC010301
-F8EBFFF8486C90B612E0486C6C5D020F92C7FC48010114F848D9000F13C0406478E051>
-I<001FBD12F0A5489026F0000191C7001F13F891C8D87FFC140101FCF1007F01F01A1F49
-1A0F491A07491A03A290C91701A3007EF300FCA4007C1C7CA7481C3EA5CA1800B3B3B14D
-7E4C7F040F14E00203B97EA55F5D7BDC6A> I<B86C91B71280A5D8001F01FCC90003ECE0
-00010701F0DC007F90C7FC6D49EF1FFC755A755AA2755AB3B3B3A31B076D7F64A21B0F7F
-6F601B1F147F6F4DC8FC143F6F177E021F18FE6E6C5F505A6E6D15036E6D4B5A6E6D4B5A
-6E6D4B5A6F6CED7F806F6C4BC9FCDB0FFFEC03FE6F01E0EB1FFC03019039FC01FFF06F90
-B65A043F158004074ACAFC040014F0050F90CBFC61617ADD6E> I<B700F8043FB512FEA5
-C66C49CA000314C0011F01F00500EBFE006D49F07FF8765A6D745A6D636F61A26D98C7FC
-6F606D1A3E811C7E027F197C6F18FC023F61816E4E5AA27016036E617016076E61A27016
-0F6E6170161F6E96C8FCA2705E6E183E70167E037F177C821BFC033F5F7015016F5F831A
-036F5F7114076F5F831A0F6F5F71141F6F94C9FC715C6F163EA271147E047F157C7114FC
-043F5DA2711301705DF08003705D18C01907705DF0E00F705D18F0191F7092CAFC725A70
-143E18FC197E057F137CF0FEFC053F5B18FFA2715BA2715BA2715BA3715BA27190CBFCA3
-715AA2187C67617DDD6E> I<B700F049B700F0027FB512FEA5C602F8C8000102F8C80003
-14E0013F01E06F6C01C0DB007F13006D497049EE3FFC4B70725A6D795A74616F1D076D68
-747F6F1D0F6D4E6D5FA26F1D1F6D4E6D94C7FCA26D6D1D3E507F1A3E6E6C65087E7FF27C
-7F6E6C6508FC7FF2F83F6E6C525A070180507E6E6D515A070381507E6E6D515A07078150
-7E6E6D515A070F81507E6E6D51C8FC071F81507E6E6D1B3E4F81073E7F6F6C63077E8107
-7C147F6F6C6307FC814F023F14016F6C630601824F6E14036F018062060317804F6E1407
-6F01C062060717C04F6E140F6F01E062060F17E04F6E141F6F01F097C9FC061F17F096C8
-6C5C6F01F8193E4E17F8063E6F147EDC7FFC197C067E17FC067C047F13FCDC3FFE6106FC
-17FE4EEE3FFFDC1FFF61A24E827062A24E827062A24E827062A24E827097CAFCA295CA7E
-7061A24D1700057E60053C18788F617DDD96> I<003FB70203B612FEA5D8001F02F0DA00
-7F1480010302C0031F01F8C7FC6D4A6F13C06D91C96C5B6E4EC8FC6E6D5E6E60705E6E6D
-5E6E6D4B5A1A1F6E6D5E6E6D4BC9FC6E177E7015FE6F6C5D6F6D495A6F4B5A836F6D495A
-6F4B5A71131F6F6D5C6F6D49CAFC6F157E7113FE706C5B70EB81F8F083F07013C770EBE7
-E070EBEFC0F0FF80827091CBFC6082717E8385717F717FA24D7F855F4D7F05FE7F4D6C7E
-EE01F84C486C7F04076D7F4D7EDC0FC0804C486C7F727F4C487E047E8104FE6D7F4C147F
-4B48814B486E7F03076F7F4C804B48824B486E7F737F4BC8FC037E6F7F03FE6F7F4B167F
-4A48834A48707F0207717F5D4A48707F021F717F023F834A48844A6C707F010386010F6D
-4C7F013F6D4C800003B500FC041F14F0B76C4AB712F8A5655E7CDD6E> I<01061560010F
-15F0491401013EEC03E049EC07C049EC0F804848EC1F004848143E49143C0007157C4848
-5CA248C7485A001E5D003E1403A2003C5D007C140700785DA400F8140F4892C7FCA4D8F1
-F8EC1F80D8F7FEEC7FE0B5ECFFF0028014F8A202C014FC6C80A46C80028014F86C806C90
-C713F06C48EC7FE0D801F8EC1F802E2B6BDF49> 92 D<EC7FFF010FB512F0013F14FE90
-B77E48D9C00313E0D803FCC77F486CEC3FF86DEC0FFE486D6D7E8284707FA2707F6C90C8
-FC6C48826C48157F6C5A90C9FCA6EE0FFF031FB5FC0203B6FC141F91B5EAFE7F0107EBFE
-00011F13E04990C7FCEBFFFC4813F04813C0485B4848C8FC121F485A5B127F49EF0F80A2
-485AA317FFA35E7F007F5D6D5C6C6C913A0FBFF81F00001FED1F1F6CB4027E6D5A6C903B
-C001FC0FFE7E6C9026F00FF86D5A6C90B5486C5B6C6CDAC0035B010F91C75B010001F002
-3FC7FC413E7ABC49> 97 D<14F8EA07FFB5FCA51203EA007FA2133FB3A8EE1FFE4BB512
-E0030F14F8033F14FE923A7FE00FFF809127F9FF00017FDAFBFC9038007FF0DAFFF06E7E
-03C0EC0FFC4B6E7E92C86C7E5C4A6F13804A6F13C01AE0197F1AF0A2F13FF8A31AFCA219
-1FA21AFEAB1AFCA2193FA21AF8A2197F1AF0A2F1FFE01AC06E5D6E17804E13006E4B5A6F
-4A5ADAEFC04A5ADAE7F04A5ADAC3F8ECFFE0DA81FE01035B9127807FC01F90C7FC4A6CB5
-12FC030F14F0013E0103148090C8D83FF8C8FC47617CDF51> I<ED7FFF0207B512F8021F
-14FE027FECFF80902701FFE00113C00107903980001FE04948C7EA3FF0D91FF8147F4948
-ECFFF8495A495A485B5A91C8FC4848ED7FF0000FEE3FE0EF1FC04848ED0F8094C7FC485A
-A3127FA25B12FFAC127F7FA3123F7FA2001F173E7F000F177E6C6C167CA26C6D15FC6C6D
-EC01F86C17F06D6C14036D6CEC07E0D91FFCEC0FC06D6CEC3F806D6C6CEBFF0001019038
-F807FE6D90B512F8021F14E0020714809126007FF8C7FC373E7BBC41> I<19F8EF07FF94
-B5FCA51703EF007FA2183FB3A8ED7FF80203B51280021F14E0027F14F8903A01FFF007FE
-010790388000FF4948C7EA3FFFD91FF8140F49488049481401494880485B4890C9127F48
-173F5B120F485AA2123F5BA2127FA25BA212FFAB127FA27FA2123FA36C7EA2120F6D167F
-12076C6C16FF6C6D5C5F6C6D5C6D6C4A7FD93FF8EC1FBFD90FFC91397F3FFF806DB4D901
-FE14FE6D9038E01FFC010090B512F0023F14C0020F1400020001F0ECF80047617BDF51>
-I<EDFFF0020713FF023F14C091B612F0499038C03FFC010790380007FED90FFCEB01FFD9
-3FF06D13804948EC7FC04948EC3FE04817F04849141F91C8EA0FF85A4848ED07FCA24848
-16FE1703123F5BA2007F17FF83A25B12FF90B9FCA318FE01F0CAFCA7127F7FA3123F7F18
-0E001F171F7F000F173F6C7E187E6C6D15FE6C17FC6C6DEC01F86D6C14036D6CEC07F06D
-6CEC0FE0D90FFEEC3FC0902603FF80EBFF006D9038F00FFE6D6CB512F8021F5C02031480
-9126003FFCC7FC383E7CBC41> I<ED03FF033F13E092B512F80203804AEB03FEDA1FFC7F
-91383FF0074A48481380ECFFC05B49138015005B70130049486D5A705A705A494891C7FC
-B3A3B712FCA526001FFCC9FCB3B3AB497E90B57E007FECFFE0A531617CE02D> I<F003F8
-F01FFE912603FFC0EB7FFF021FD9F801B5128091B63803FE3F0103DBC7F013C049018190
-38EFC07F903B1FFC003FFF00D93FF0EB0FFE4948130749486D6CEB3F804A6DEC1F004871
-C7FC4890C87FA2488349157FA2000F83A800075FA26D15FF6C5FA26C6D495B6C94C8FC6E
-5B6D6C495A6D6C495A02FCEB3FF8903A7FFF81FFE001FB90B55A01F892C9FC2601F01F13
-F8020313C091CCFC1203A57FA27F6C7E6D7E91B612E06C16FF18E06D16FC6D16FF6D8385
-017F8348B97E480180C7003F7FD807FCC800017FD80FF0ED003F4848EE0FFE4848160700
-7F170349707EA248CAFC84A56D5E007F606D16036C6C4C5A6C6C4C5A6C6C4C5A6C6C4C5A
-6CB4EEFFC06C01C002035B26007FF8DA1FFEC7FC903B3FFFC003FFFC010790B612E00101
-1680D9003F02FCC8FC020091C9FC425B7CBD49> I<14F8EA07FFB5FCA51203EA007FA213
-3FB3A893380FFF80047F13F00303B512FC4B14FF92261FF00F7F92263F80037F037EC77F
-03F86E7EECF9F0DAFBE06E7EECFFC05D92C8121F855CA25CA35CB3B0496C4B7E48B592B5
-1280B600FE017F14FFA548607BDF51> I<133FEBFFC0487F487FA2487FA66C5BA26C5B6C
-5B013FC7FC90C8FCB114F8EA07FFB5FCA51201EA007FA2133FB3B3A7497E48487EB612FC
-A51E5D7BDC28> I<153FEDFFC04A13E04A13F0A24A13F8A66E13F0A26E13E06E13C0ED3F
-0092C7FCB1ED01F8EC0FFF49B5FCA5EB00031400157F153FB3B3B3A7EA1FC0486CEB7FF0
-487E487EA2EDFFE0A216C04A138001F01400007F5B9038C007FE393FF01FF8000FB55A6C
-14C0000191C7FC38001FF8257986DC2D> I<14F8EA07FFB5FCA51203EA007FA2133FB3A9
-94B612C0A5053FEBFC007113E096C7FC18FC4D5A18E04D5A4DC8FC4C5A4C5AEE0FF8EE1F
-E04C5A4C5A4CC9FCED03FC4B5A4B7E151FED7FFE92B5FC02F98014FBDAFFF77F03E37F03
-C17F15814AC67F4A6D7E4A6D7E5C707E707F707FA2707F707F707F84177F717E717E8583
-717F8585496C16FC2601FFFE4A13FFB600FC017F14F8A545607CDF4D> I<14F8EA07FFB5
-FCA51203EA007FA2133FB3B3B3B3A7497E48B5FCB612FEA51F607BDF28> I<D901F0D90F
-FFED0FFFD807FF91B500E091B512E0B5010302F8010314F8030F02FE010F14FE92271FF0
-1FFF90391FF01FFF92263F80039027803F80037F92267E00019027C07E00017F000302F8
-6DD9E0F86D7F27007FF1F0EDE1F0DAF3E091267FF3E06E7E90263FF7C0EDF7C0DAFF80ED
-FF8092C86C90C86C7EA24A5EA24A5EA34A5EB3B0496C4B6C4B7E48B54AB54AB5FCB600FE
-90B600FE90B612FEA56F3C7ABB7A> I<D901F090380FFF80D807FF027F13F0B50103B512
-FC4B14FF92261FF00F7F92263F80037F037EC77F000302F86E7E39007FF1F0DAF3E06E7E
-90383FF7C0ECFF8092C8121F855CA25CA35CB3B0496C4B7E48B592B51280B600FE017F14
-FFA5483C7BBB51> I<ED3FFC0203B512C0020F14F0027F14FE9139FFE007FF010390C713
-C0D907FCEC3FE0D91FF0EC0FF849486E7E49486E7E49486E7E4890C91380A24848EE7FC0
-000718E049163F000F18F04848EE1FF8A3003F18FCA24848EE0FFEA400FF18FFAB007F18
-FEA36D161F003F18FCA36C6CEE3FF8A2000F18F06C6CEE7FE0A26C6CEEFFC06C18806C6D
-4A13006D6C4A5A6D6C4A5AD91FF8EC1FF86D6C4A5AD903FFECFFC06DD9E0075B6D6CB548
-C7FC021F14F8020314C09126003FFCC8FC403E7CBC49> I<02F8EB1FFED807FF49B512E0
-B5010F14F8033F14FE923A7FE01FFF809127F9FF00037FDAFBFC010013F00003D9FFF06E
-7EC66C01C0EC1FFC4B6E7E6D90C87F4A814A6F13804A6F13C01AE0841AF0A2F17FF8A219
-3F1AFCA4F11FFEABF13FFCA4F17FF8A3F1FFF0A24E13E01AC06E5D6E4B13801A006E4B5A
-6F4A5A6F4A5A03F04A5ADAFBF849485ADAF9FE01075B9127F87FC03F90C7FC6FB512FC03
-0F14F0030314809226003FF8C8FC93CAFCB3497E48B5FCB612FEA547577CBB51> I<D901
-F0EB7F80D807FF903803FFF0B5010F7F4B13FEED3FC392387E07FFDBF80F13800003EBF1
-F039007FF3E015C0EB3FF7158002FF6D13004B6C5A705A4AEB007094C7FCA25CA45CB3AD
-497E48B5FCB712C0A5313C7CBB39> 114 D<DAFFF81370010F9038FF80F0013F14E390B7
-FC0003EBC00F3907FC0001D80FF0EB007F4848143F4848140F5B007F150790C8FC16035A
-A216017FA27F7F01F891C7FC6CB4FC14E0ECFF806C14FC6CECFF806C15F06C816C15FE6C
-816C1680013F15C0010F15E0010115F0D9000F14F8EC003F030313FC15000078153F00F8
-ED0FFE16077E1603A216017EA27E17FC7F16036D15F86D14076D15F06DEC0FE06DEC3FC0
-017FECFF8027FE3FE0071300486CB55AD8F80714F8D8F00114C027E0003FFCC7FC2F3E7B
-BC3A> I<147CA714FCA51301A31303A21307A2130FA2131F133F137F13FF1203000F90B6
-12E0B8FCA426001FFCC8FCB3AB17F8AD010FEC01F080A20107EC03E0806DEC07C0ED800F
-6D9038C01F806D9038F07F0091383FFFFE6E5B020713F0020013C02D567DD439> I<02F8
-167CD807FF923803FFFCB5157FA500031601D8007FED003FA2013F161FB3AE183FA3187F
-A3011F16FF5F80010F5D943807DFFE6D6CEC0F9F6D6C91393F1FFFC06F01FE14FF010090
-38F003FC6EB512F86E14E0020714809127007FFC00EBFC00483D7BBB51> I<B600F849B5
-12FCA5000102806D6C13C06C6C48C8001F13004AED0FFC013F5F011F5F6E5E130F6E5E6D
-5FA26F141F6D94C7FC6F5C6D163EA26F147E6D167C6F14FC027F5D6F1301023F5DA26F13
-03021F5D6F1307020F5D6F130F6E5DA2EE801F6E92C8FC705A6E143EEEE07E6E147CA2EE
-F0FC037F5B16F9033F5B16FF6F5BA36F5BA26F5BA26F90C9FCA36F5AA26F5A1678463C7D
-BA4D> I<B6D8F80FB500FE011FB512E0A5000391C7003F01C001031400C601FC020F90C8
-13F86D486E705A765A013F6F5F6E62011F817392C7FC6E5C010F1A3E856D6C4A5E856F49
-16FC6D04BF5D856F011F15016D041F5D856D6DD93E0F4A5A856F017E1507027FDA7C075D
-856F01FC150F023FDAF8035D856E6C48486C4AC8FC1A80DBFE035E020F4A6C143E1AC0DB
-FF07167E6E4A017F137C1AE06ED98F80013F5B1AF004DF15F16E91C7001F5B1AF904FF15
-FB6E49020F5B1AFF6F486E5BA36F486E5BA36F486E90C9FCA26F486E5AA36F48157C633C
-7DBA6A> I<007FB500FC010FB512F8A5C66C01E06D1400011F496D13F86D6F13E06D1780
-6D94C7FC6D6D495A6D6D5C027F4A5A6E6C14E06F130F6E6C495A6E6C495A6E018090C8FC
-6E147E705A6E13E16EEBF3F86FB45A6F5B5F6F5B8181816F7F834B7F4B7F4B7FED1FDFEE
-9FFE92383F0FFFDB7E077FDBFE037F4A487EDA03F8804A486C7F4B6D7E4A486D7E4A4813
-1F023F6E7E4AC77F4A6E7F49486E7F01036F7F010F83011F8301FF8300076D020713FFB6
-00C0011F14FFA5483B7EBA4D> I<B600F849B512FCA5000102806D6C13C06C6C48C8001F
-13006D48ED0FFC616D6C5E61130F6E5E6D5FA26F141F6D94C7FC6F5C6D163E6F147E6D16
-7C6F14FCA2027F5D6F1301023F5D6F1303021F5D6F1307020F5DA26F130F6E5DEE801F6E
-92C8FC705A6E143EA2EEE07E6E147CEEF0FC037F5B16F9033F5BA216FF6F5BA26F5BA26F
-5BA36F90C9FCA26F5AA26F5AA35E15015E15035E15075EA2150F5ED81F80131F486C91CA
-FC486C5B486C133E157E157C15FC4A5A4A5A6C48485A49485A6CC6485AD9C0FFCBFC6CB4
-5A00075B6C13F038007F8046577DBA4D> I<000FB812F818FCA302E0C713F849C75AD81F
-F84A13F0494A13E04916C0494A13805E494A13005F90C8485A16FF4B5B4B5B485E003E4A
-5B5D4B5B4B90C7FC5EC8485A15FF4A5B5E4A5B5C4A5B4A5B93C8FC4A5A027F157C4A5A5D
-495B5B494914FC494914F85D4990C8FC5B495A494814015C485B481603485B4A14074849
-140F48161F4890C8EA3FF0484815FF49140FB9FCA37E363B7CBA41> I<BCFCA4480480A5
-49> I<C51280A4910480A592> I<D90FE01404D93FFC140E49B4141F48B56C137E4802E0
-13FC489138FC03F84891B5FC4816F0D9C03F14E0263F000714C0007E0101148000F86DEB
-FE000070EC3FFC0020EC07F0300E74DB49> 126 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fh cmbx8 16.592 52
-/Fh 52 128 df<EA01FC3807FF804813C04813E04813F04813F8A2B512FCA214FEA314FF
-A37EA27E7E7E6C13BF3801FE3FC7FC147F147EA314FE14FCA2130114F8130314F0130714
-E0130FEB1FC0133FEB7F80EBFF005A485A485A485A5B5B5B6CC7FC183174952F> 44
-D<B812F0AF2C0F7EA538> I<13FC3807FF804813C04813E04813F04813F8A3B512FCA66C
-13F8A36C13F06C13E06C13C06C13803800FC00161674952F> I<167E4BB4FC5D150F153F
-92B5FC1407147F013FB6FCB8FCA414FB1483EBC003C7FCB3B3B3AE003FB912E0A73B5B74
-DA54> 49 D<913801FFFE023FEBFFF049B612FE0107EDFFC0011F16F0017F16FC48B9FC
-4849C66C804801E0010F804801800103804848C76C806D6C6D6C7F4801E06E7F6E824882
-6E6E7FB518806E80A27114C0A31AE0A26C4980A26C5BA26C5B6C5B000390C8FCD800785D
-90C915C0A34D1480A21A005F615F614D5B614D5B94B55A4C5C96C7FC4C5B4C5B4C5B4C13
-E04C5B4C90C8FC4C5A4B5B4B13F04B5B4B13804B90C7EA1FE04B5AED7FF84B5A4A49EC3F
-C04A13804A90C8FC4A5AEC1FF84A48157F4A5ADAFF8015FF4990C84813804990B8FC5B13
-1F5B5B90BAFC5A4819005A5A5A5A5ABBFCA261A4435B78DA54> I<92383FFF800203B512
-FC021FECFFC0027F15F049B712FC4916FF010FD9F00F8049D9000180D93FFC6D6C7FD97F
-F06E7F4A8201FF6F7F4813F802FE82486D8085815A81A6616C4A5BA26C91C75C6C5B6D48
-4A5B6D5AD90FE05E90C95A94B55A614C5C4C91C7FC4C5B041F13F84BB55A0203B612C04A
-92C8FC5FEFFFC018F86E15FE91C7000F6D7E040180706C13F0717F717F717F85711480A2
-7114C0A21AE0A201FE6F14F03803FF80000F13E0486D17F8487FA2487FA2B57EA41AF0A3
-4A5C6C19E0A24A17C06C495C4A17806C494A14006C48C8FC6D4B5B6C01C04A5B6C01F04A
-5B6C01FE49B512E028007FFFE00F5C6D90B7C7FC010F16FC010316F0D9007F15C0020F02
-FCC8FCDA007F1380455D79DA54> I<93380FFFC04BB512F8030F14FF037F814AB712E002
-07824A49C67F023F01F0EB1FFC4A0180130749B5C7EA1FFE4901FC147F494991B5FC495B
-4949491480495B4B5B5B90B5C7FC5A5C5A4A6E14005A715B5A4A6F5A48EF1FF095C8FCA2
-5AA34A131848913803FFFE030FEBFFC0033F14F04B14FC92B7FCB500F1829127F3FE003F
-7FDAF7F86D13F0DAFFE001077F4B6D7F854B7F92C87F1A805C1AC05C7213E0A24A17F0A4
-1AF85C7EA67EA46C7F1AF0A27EA21AE07E95B5FC6C6D17C0A26C19806C6D4A1400A26D6C
-4A5B6D6D5D6D6D495B6D6D495B6D01F8013F5B6DD9FE01B512806D90B7C7FC6D6C15FC02
-1F15F0020715C0020092C8FC030F13E0455D79DA54> 54 D<13FC3807FF804813C04813
-E04813F04813F8A3B512FCA66C13F8A36C13F06C13E06C13C06C13803800FC0090C7FCB1
-13FC3807FF804813C04813E04813F04813F8A3B512FCA66C13F8A36C13F06C13E06C13C0
-6C13803800FC00163D74BC2F> 58 D<13FC3807FF804813C04813E04813F04813F8A3B5
-12FCA66C13F8A36C13F06C13E06C13C06C13803800FC0090C7FCB1EA01FCEA07FF481380
-4813C04813E04813F0A2B5FC14F8A314FCA47EA27E7E7E7EEA01FEC7FC130114F8A41303
-14F0A2130714E0130F14C0131F1480133FEB7F005B5B485A1203485A485A5B5B5B6CC7FC
-165874BC2F> I<0503B512C094B7FC040F16F0047F16FE0303B912C0030F18F0033F91C7
-14FC92B500C0020313FF020301FCC9003F13C0020F01E0040713F04A90CB7FDA3FFCF03F
-FCDAFFF0F00FFF4949727F49018006017F4990CD7FD90FFCF23FF04948747E4948DB7FFC
-6F7E4A0207B500C014074948023F02F06E7E494849B600FC6E7E4C15FF4890C7000F706D
-13804848023FD9F80F01E0EC7FC0494AD9C0006D143F000792B5C7D83FF815E04949496E
-6C141F000F4A49020716F04949496E6C140F001F73B514F84949496EEC80074B5B003F1E
-FC4949491803A2007F4A1BFE494B1801A292B5FCA200FF1EFF90C791C9815CAC806D8100
-7F1EFE1E0181A26D81003F801FFC6D6D6D1803121F6F6D19F86D6D6D4A1507000F4F16F0
-6D6D6D4A150F00076E6D021F16E06D6D6D4AECC01F00036F01C090B6EB3FC06D6ED9F80F
-9238E0FF806C6C020F90B6009F90B5FC6C6D0103040F150070DBFC075C6D6CD9003FDAF0
-0114F86D6C02079126C0007F13E06E9126007FFCC7000713806D6C92CDFC6D7E6DB4FC6D
-7F6D01E0F20FFE6D6DF27FFFDA3FFC0703B5FC6EB4193F6E01E00503B512FE020301FC05
-7F14F80200D9FFC0030FB61280033F01FF021FB6EAFC00030F91B912E003034FC7FCDB00
-7F18C0040F05F8C8FC04004CC9FC050302F8CAFC706277E083> 64
-D<F007F84E7E4E7EA24E7EA24E7FA295B57EA34D80A24D80A24D80A24D80A34D80A24D80
-A24D81A218DFDDFFCF80188F4C018780A24C010380A24D7E04078217FC040F6D80A24C48
-6D7FA24C486D7FA25F047F6E80A24C486D80A24B496D80A294C7FC4B6F805E03076F80A2
-4B486E80A24B486F7FA25E033F707FA24B486F80A292BB7EA34A86A24A86A24A48C90001
-80A24B82020F865D021F727FA24A48717FA24A487180A25D02FF7280A249497180A24990
-CB6C80A2011F13E0B700F0033FB812C0A772607ADF7F> I<BB12FCF2FFF01BFF1CC01CF0
-1CFC1CFFD8000102C0C8003F80080714E00801807480757F87757F89871E8087A31EC087
-A6631E80A3511400A2515B515B656398B55A080314C0080F5C083F49C7FC4FB512F893B9
-12E01C8009F8C8FC1BFF1CF01CFE04C0C8000F6D7E080114E0746C13F8091F7F757F757F
-7514801EC07514E07514F0A21EF8881EFCA37613FEA8641EFCA399B512F8A25114F0631E
-E0635114C0093F148098B6120008035C081F5CBE12F01DC0650AFCC7FC1CF099C8FC1BE0
-675E79DD78> I<BB12F8F2FFE01BFEF3FFC01CF81CFE767ED8000102E0C7000115E0DF00
-0F80080114FCE0003F7F090F7F7580090114E0758088767F767F767F767F881F807614C0
-A27614E0A21FF089A21FF8A27713FCA41FFEA289A31FFFAF1FFEA365A21FFCA45313F8A2
-1FF0A29AB5FC1FE0641FC0521480A25214006664525B525B525B51B55A515C090F5C093F
-91C7FC98B512FC080F5C4FB612E0BE128052C8FC1CF81CE051C9FC1BE008F8CAFC705E79
-DD81> 68 D<BD12FEA488A3D8000102F0C8FC1A0F1A01747E8775138087878787A287A3
-F47FC0A31C3FA3F17F80A2F41FE0A499C7FC19FFA360A26060181F187F93B7FCA79338F0
-007F181F18078484A284A3197FA796CAFCB3A2B912FCA75B5D79DC6A> 70
-D<95B500C01578053F02FE15FC0403B700C01301043F04F813074BB800FE130F03079438
-FF801F031FF0E03F037F9126FC003FEBF07F4AB6C70003EBFCFF020702F8DA007FB5FC4A
-02C0151F023F91C912074A01FC160191B500F082494A83494A171F494A834991CB7E495B
-4949844949844B8490B5FC484A197F1D3F485CA2484A191FA2481C0F92CDFC5AA248491A
-07A448765A9AC9FCA25CA2B5FCAE7E070FB912C080A37EA36E93C86C01FCC7FC7EA27E81
-7EA26C80A26C80A26C807F816D7F6D7F6D7F6D806D806D6E94B5FC6D14F86E6D5E6E01FF
-5E020F02E0150F6E02F85D0201DAFF8091B6FC6E6C02FC010F13FD031F91B7EAF07F0307
-F0E01F0301F08007DB003F9338FE0001040304F8EB0038DC003F038091C8FC050002F0CB
-FC726277DF84> I<B912E0A7D8000102F0C7FCB3B3B3B3A8B912E0A7335E7ADD3F> 73
-D<B912FCA7D8000102F0CBFCB3B3ADF301FEA41B031CFCA51B07A31B0F1CF8A21B1FA21B
-3FA21B7F1BFFA2625013F01A0F621A7F4FB5FC1907197FBDFCA21CE0A5575E7ADD65> 76
-D<B700F00803B7128004FC1A0F7062A27062A27161D800010EC0C7FC7119FEA36F6D4E5A
-A26F6D4E5AA26F6D4E5AA26F6D4E5AA26F6D4E5AA26F6D4E5AA26F6E4D5AA26F6E17FEA2
-706D4C5AA3706D4C5AA2706D4C5AA2706D4C5AA2706D4C5AA2706D4C5AA2706E4BC7FCA2
-706E15FEA2716D4A5AA2716D4A5AA3716D4A5AA2716D4A5AA2716D4A5AA2716D4A5AA271
-6E49C8FCA2716E13FEA2726D485AA2726D485AA2726D485AA3726D485AA2726D485AA272
-6D485AA27202FFC9FCA2725CA2735BA2735BA2735BA2735BA2010F13E0B700FE6E49027F
-B81280A2735BA27390C8FC735A1A7C915E79DDA0> I<943807FFFE4CB612F8041FEDFF80
-93B812F0030717FE031F717E037F18E04AB6D8000F14F8020702F0010014FE4A0280021F
-7F023F49C8000714C04A01F803018091B500E06F6C7F494A707F494A707F4991CA6C7F49
-49717F494971804949718049497180A290B548727F48894B8448894B844889A24891CC6C
-7FA2481E804A85A2481EC0A448497314E0A5B51DF0AF6C1EE06E61A46C1EC0A36E616C1E
-80A26C1E006F60A26C656F606C656F606C656C6E95B55AA26D6D4D5C6D6D4D5C6D6D4D5C
-A26D6D4D91C7FC6D6E4C5B6D02E0047F5B01006E93B512F06E6D4B5C6E01FE03075C6E6D
-6C021F5C020702F091B548C8FC020102FF010F14F86E92B75A031F188003074DC9FC0300
-17F0041F1680040103F8CAFCDC000749CBFC6C6277DF7F> 79 D<943807FFFE4CB612F8
-041FEDFF8093B812F0030717FE031F717E037F18E04AB6D8000F14F8020702F0010014FE
-4A0280021F7F023F49C8000714C04A01F803018091B500E06F6C7F494A707F494A707F49
-91CA6C7F4949717F4949718049497180494971804B8490B587484A727FA2484A727FA248
-91CC6C7FA248894A85481E80A348497314C0A4481EE0A24A85A3B51DF0AF6C1EE0A36E61
-A26C1EC0A46C6D4F1480A26C1E006E61A26C656F606C656FDA7FC05C6C932601FFF85E6C
-6E010701FE4A5B051F7F6D6D4902C090B55A6D6D496E485C6D9326C07FF05D6F903AFF00
-0FF8036D6D01FC6D6C4891C7FC6DD9FF010203495B6DDAC1F8902601FE3F5B010002E16F
-4813F06E01F96E90B55A6E01FD6F5C6ED9FFFC5F02076E4CC8FC02019126FF800FB512F8
-6E92B75A031F188003074DC812F00300F201F8161F040182DC0007D9FE0F7F94C802E013
-0376130F7401FE137F99B6FC1FF086A3861FE0A27416C0A2751580A2751500A2755C755C
-66755C09015C7514800A3F90C7FCF40FF86D7B77DF7F> 81 D<BA12FEF1FFFCF2FFC01B
-F81BFF1CC01CF0D8000102E0C7000F14FC070080081F6D7E080780748074807480878975
-7FA28987A28AA99BC8FCA2515BA265636598B55A505C505C505C081F91C9FC97B512FC07
-1F14F093B95A99CAFC1BFC1BF01BFC1BFF04E0C76C14C0070F800703807380736C7F747F
-A2747F8689A27480A989A7F701F8F703FCA28986A27713077417F8A2746EEB0FF0B900C0
-6E6D131F756DEB3FE075ECC0FF7591B512C009031680090016000A3F14FCCF000714F0E2
-001F13C0766079DD7E> I<92267FFF8014780207B500FC14FC023F9138FF800191B7EAE0
-030103EEFC07010FEEFE1F49D9E001EBFFBF017F90C7000F13FFD9FFF8140148496E7E48
-01C0151F484981844890C91201485A84003F187F49173FA2007F181FA2190F12FF19077F
-A27F190380808002F8705A6E93C8FC6CEBFF8015F0EDFF8016FC6CEDFFE017FF6C17F018
-FE6C717E6C18E019F86C846C18FF6C856D846D84010F846D840101846D7E021F831403DA
-003F821501DB000F1680EE007F050315C0EF007F180F18037214E08485007E84B484A285
-A3857F1BC0A37F1B806D5F7F1B006D5F6D6001FF4D5A6E167F02E04C5A02F84B5B02FF03
-075B03F0021F5B9226FFC001B55A01F791B7C7FC01E117FCD9807F5ED9001F16E0480103
-168048D9003F02FCC8FC0078020014804B6277DF5E> I<001FBE12F8A6481DFC92C7003F
-49C7FC02F0190F02C0190391C81700491B7F491B3F491B1F491B0FA2491B07007F1DFE49
-1B03A4491B01A648C9F000FFA5CA1900B3B3B00207BA12F0A7685C7ADB75> I<B900E002
-07B712F0A7D8000102F0CB6C90C7FCF50FF8B3B3B3A66D1B1F6682A26E1A3F6680704E5A
-80535A6E6D5F5290C8FC6E7F6E6E4C5A6E6EEE1FFC6E6E4C5A6F6DEEFFF06F01FC4B5B6F
-01FF030F5B030702E0027F5B6F02FE010FB5C9FC030091B712FC043F5F040F17E0040394
-CAFCDC007F15FC050715E0DD001F01F8CBFC74607ADD81> I<B800FC0103B800F0021FB6
-12F8A7D8000F0280C9003F91CA000FEBF000700C001380876D6E7395C7FC6B6D736E5F70
-1E03876D6E734C5AA26D736E5F701E0FA26E6D4C6E4C5AA26E4E6E5F701E3F6E69714B6E
-167FA26E4E6E5F711DFF6E07DF96C8FC71037F6F5C1C8F6E6E03FF6F5D22036E07076E5D
-714A1907517E6E6E0203705D220F6F4D6C6E5D710207191F517E6F6D020F705D223F6F4D
-6D6D5D72011F197F517F6F6E013F705D22FF6F4D6D6E91C9FC72017F60517F6F6E01FF71
-485AA26F94C76C02E05B7248190750806FDAFC0372485AA2704A486E02F85B06FE1A1F70
-4B6E5EDEFF0FF0FC3F508170021F06FE5B079F197F704B6F5D07FF95B5FC5081709ACAFC
-A2704B6F5CA297C97E7064A2704A705CA24F827163A27149705CA24F837163A27149715B
-A24F837198CBFCA27149715AA27190CB6C5A7148725AA55F7CDDAE> 87
-D<003FB800C0011FB712E0A7D8000192C9001F01FCC8FC6D6F030113C06E606E6E4B5B71
-4B90C9FC6E6E5E6E4E5A6E6E153F6E6E4B5A714B5A6E6E5E6E4D5B6F6E5B72495B6F6E49
-90CAFC6F5F6F6E495A6F6E495A72137F6F4C5A6F6E485B6F02FF5C07835B7014C77002CF
-90CBFC70ECFFFE705D6282705D705D62705D83718086718083718071808671805F4D814D
-814D81A24D81DD7FF78005FF814C13E34C01C1800680804C49814C6E804C487F4C486D80
-4D6D804C488204FF804B496D804B496D804D824B90C8814B824B486F804B48844C6F804B
-488103FF70804A496F804A49844C6F804A90CAFC4A487180021F874A4871804A48834B71
-800107B57180B8033FB812E0A7735E7ADD7F> I<B900C0030FB7FCA7D800034ACB000FEB
-F8006D6E06031380656D6F96C7FC6E6E4D5A6E6E4D5A1D3F6E6E606E6E4D5A6E6E4D5AA2
-6E6E4C5B6E6E4C5B6E6F5D9BC8FC6F6E4B5A6F6E4B5A1C3F6F6E5E6F6E4B5A6F6E4B5A63
-6F6E5E6F6E4A5B6F6F4990C9FCA2706E495A706E495A706E495AA2706E495A706E495A70
-6E5A64706E485B70038790CAFC1ACF715D71ECFFFC715DA2715D715D715DA2715D7192CB
-FC8462725BB3AD041FB812F8A7785E7DDD7F> I<0203B5FC027F14F80103B7FC010F16C0
-013F16F04916FC90B5D8000F7F4801F801016D7E6E6D80486D023F7F83486D82717FA271
-7FA3717F6C5BA26C5B6C5B6D5AEB0F8090C9FCA2043FB5FC031FB6FC0203B7FC143F49B8
-FC010715E3011FECF003017FEBFE0048B512F04814C04891C7FC4813FC485B485B5C5A5C
-B5FC5CA45FA2806C5E6E5C5F6C6DEC7F7F6C6D02FFEBFFC06C01FED907FEECFFE06C9028
-FFC03FFC3F14F06C91B512F86CEEE01F6C6C4B7E010FED0003010102F8D9007F13E0D900
-0F01C091C8FC4C407BBE52> 97 D<90380FFF80B6FCA712017E7FB3A6EFFFFC041FEBFF
-C093B612F8038315FF038F16C003BF8292B5C66C13F804F0010F7F04C001037F93C87F4B
-6F7F03F86F7F4B6F7F4B834B8187A2737FA287A2737FA41C80AC1C00A44F5BA363A24F5B
-A26F4B5B6F5F6F5D6F4B5B6F92B55A6F4A91C7FC04C001075B02FC01F0011F5BDB7FFE90
-B512F0DAF81FB75A4A6C1680DAE0034BC8FC4AC615F04A011F148090C8000301F0C9FC51
-617ADF5E> I<92380FFFF892B612C0020F15F8023F15FE91B81280010317C04917E0011F
-DA000F13F04901F87F4901E04913F890B55A4891C74813FC5A5C485B5A5C5A7113F8485B
-7113F07113E0487013C04A9138003E0095C7FCA2B5FCAD7E80A37E806C18FCF001FE6C7F
-18036C6D16FC6E15076C6EEC0FF86C6E141F6C6EEC3FF06D6DEC7FE06D01FEEB01FF6D90
-26FFC01F13C06D91B612800103EEFE0001005E023F15F0020F15C002014AC7FCDA000F13
-E03F407ABE4B> I<F11FFF4DB6FCA7EF00038484B3A6923807FFE092B512FE0207ECFFC0
-023F15F091B712FC01038249DA803FB6FC011F9038FC00034901F013004901C0143F90B5
-48804891C87E4849814A814883485BA2485BA25AA3485BA4B5FCAC7EA46C7FA27EA26C7F
-607E6E5D6C6D5D6C5F6C6D157F6D6D91B67E6D01E00103816D01F8010FEDFF806D01FF90
-B8FC010391B512F96D16F16D6C15C1020F1501020114F8DA000F018002F0C7FC51617ADF
-5E> I<92380FFFE04AB512FE020FECFFC0023F15F091B712FC01038249D9FE017F011F90
-26F0001F7F49496D7F49018001037F90B5C76C7F48496E7F484982187F48498248173F85
-484981A2481980A25C4883A21AC0A2B5FCA291B9FCA51A8002E0CBFCA47EA280A27EA27E
-6EEE1F806CF03FC0A26C7F6E167F6CF0FF806C6D5D6C6E4A13006D01E04A5A6D6DEC1FFC
-6D01FE147F6D903AFFC007FFF8010391B612E06D5F6D6C5E021F4BC7FC020315F0DA007F
-14C0030301F8C8FC42407BBE4D> I<EE3FFF0307B512E0033F14F892B612FE020381020F
-16804AD9FC0F13C04AEBC01F4AD9003F13E04A5A49494913F0495B5D5B495BA27113E049
-5B7113C0A2711380943803FE00EF007095C7FCADB812F0A7D8001F01E0C9FCB3B3AB003F
-B612FCA73C617AE034> I<F103FC92B5EC3FFF020F02F090B51280027FDAFE0314C049B7
-008F14E0010793B6FC011F05FD13F049D9F00F14C149D9800114014948C76C5B48496E13
-8148496E13C14A6E15E04884489538F07FC04A6EEC1F0097C7FC4884A96C60A26E5C6C60
-6C606E5C6C6D4A5B6C6D4A90C8FC6D6C6C48485A6DD9F00F5B4990B65A18E090B81280D9
-FC7F4AC9FC0001010F14F0020091CAFC484890CCFC7FA47F7F8014E091B712C018FE6CEF
-FFE019F819FE6C727E866D846D846D84498490BAFC000385120F4801E0C88091C9120748
-48160048487113808548488385A56D5F007F1A006D5F003F616D177F6C01C04B485A6C6D
-4B5B6C01F8030F5B6C01FF037F5B6C02F8010FB55A6C6C90B8C7FC011F17FC010717F001
-001780020F03F8C8FCDA003F49C9FC4C5C7BBE54> I<90380FFF80B6FCA712017E7FB3A6
-94381FFF8094B512F8040714FE041F6E7E047F8193B77E0381D9E01F7F0387D9000F7FDB
-8FF87FDB9FF06D7F16C0DBBF808103FFC7FC4B804B825DA25DA25DA35DB3AFB7D8E003B7
-1280A7516078DF5E> I<EB0FC0EB3FF0EBFFFC487F487FA24880A24880A66C5CA26C91C7
-FCA26C5B6C5BEB3FF0EB0FC090C9FCAD903807FF80007FB5FCA712016C7EB3B3AAB71280
-A7216178E02F> I<903807FF80B6FCA712017E7FB3A795B612E0A7061FEBF00097C7FC4E
-5A4E5A943801FFF04D5B050F5B4D90C8FC4D5AEFFFFC4C13F04C5B040F13804C90C9FC4C
-5AEEFFF803815B03837F038F7F039F7F92B6FC8484A284043F7FDBFC1F7F4B6C7F4B6C7F
-03C0804B6C804B6C8082717F717F717F717F717F857180718083727F727F727F727F1AFF
-B76C90B612FEA74F607ADF59> 107 D<903807FF80B6FCA712017E7FB3B3B3B3A7B712C0
-A7226078DF2F> I<D90FFF91260FFFC092381FFF80B691B500FC4AB512F8040702FF020F
-14FE041F03C0013F6E7E4C6F498193B76C48B77E4BD9F01F6D48D9E03F7F4BD900079028
-FC07FE000F7F0001DA07FC6DDA0FF87F6CDA0FF09226FE1FE0816DD91FC06DDA3F807F4B
-486F48C7804BC715FE037E6E4A804B4D824B5FA24B5FA24B5FA34B5FB3AFB7D8E001B7D8
-C003B71280A7813E78BD8E> I<D90FFF91381FFF80B691B512F8040714FE041F6E7E047F
-8193B77E4BD9E01F7F0307D9000F7F0001DA0FF87F6C4A486D7F6D14C04B48814BC7FC03
-7E804B825DA25DA25DA35DB3AFB7D8E003B71280A7513E78BD5E> I<923807FFF092B67E
-020715F0021F15FC91B87E49830107DA007F13F04901F001077F4901C001017F017F496D
-13FF90B5C86C7F4A8148496F7F48496F7F4885A248496F7FA24885A248496F7FA34885A4
-B51980AC6C1A00A46C6D4B5BA26C61A26E5D6C616C616E5D6C6D4B5B6C6D4B5B6C6E91B5
-5A6D6D4991C7FC6D01F001075B6D01FE013F5B6D90B75A010317E001001780023F4BC8FC
-020F15F802001580030701F0C9FC49407BBE54> I<90260FFF80EB7FFEB6010FB512E004
-7F14FC0381B7FC038716C0039F16F092B87EDD007F13FE000103F0010F7F6C03C06D806D
-91C700018003FC804B6F7F4B834B6F7F4B81878587A28587A4731480AC1C0061A363A261
-63A24F5BA26F4B5B6F4B5B816F92B55A6F4A5C6F4A91C7FC04C0010F5B04F0013F5BDCFE
-01B512F003DFB75A03CF168003C34BC8FC03C015F0041F1480040301F0C9FC93CCFCB3B7
-12E0A751597ABD5E> I<D90FFEEB03FFB5021F13E0047F13F893B512FE0303804B158092
-380FFE1FDCF03F13C00001EC1FE06C91263F807F13E0017FEB7F00157E15FE5D6E5A7113
-C05D7113804B6D1300715AEF01F894C8FC5DA45DB3ABB712F0A73B3E7ABD46> 114
-D<913A3FFFC007800103B538FC1FC0011F91B5FC137F48B8FC48EBF0004890C7121FD80F
-FC140748481401484880A24848157FA2173F12FFA27F7F6DED1F8001FF92C7FC14E0ECFF
-8015FE6CECFFF016FE6C6F7E17E06C16F86C826C826C826C17806C6C16C0011F16E00107
-16F01300020F15F8EC003F1500041F13FC1603007E81B481177F173F6D151FA27F18F87F
-A26DED3FF07F6DED7FE06D15FF6D6C4913C002E00107138002FC017F130091B65A5F01CF
-15F0010315C048C66C91C7FC0078010F13E036407ABE43> I<EC07F8A6140FA4141FA314
-3FA2147FA214FF5BA25B5B5B5B137F48B5FC000F91B612C0B9FCA6D8000F01F8C8FCB3AC
-EF07F8AB170F6D6D14F0A2171F6D6DEB3FE06F137F6D9138C0FFC06D91B512806E15006E
-5C6E5C02075C020014E0030F90C7FC35587DD642> I<902607FFC0ED1FFFB60203B6FCA7
-0001EE00076C836D82B3B060A360A2607F60606D6D4A80DD01FE806D01F8D907FCECFF80
-6D01FEEB3FF86D90B65A6D5E6D6C1580021F5D020714F8DA003F01C002F8C7FC513F78BD
-5E> I<B76C91B6FCA7C66C01E0C8000F1380963803FE006D6D4B5AA26D6D4B5AA26D6D4B
-5AA26D6D4B5AA26D6D4B5AA26D6E4A5AA26D6E4990C7FCA26E6D495AA26E6D495AA26E6D
-5C180F6E6D5C181F6E6D5C183F6E6D5C187F6E5EEF80FFA26E02C190C8FCA26FEBE3FEA2
-6FEBF7FCA26FEBFFF8A26F5CA26F5CA26F5CA26F5CA26F91C9FCA2705AA2705AA2705AEE
-07E0503E7CBC59> I<B7011FB6027FB51280A7C60280D9001F01C00203EBE0006F070013
-806D7095C7FC6F705CA26D4C6D4A5A816D646F4A6D14076D646F4A6D140FA26D93B56C4A
-5A816D057F5E6F496E143F4E7E6D03036F495A16806D4C6C6D5CDCC00717FF6E4B6C93C8
-FCDCE00F6F5AA26E4A486C6D485A16F06E4B6C5DDCF83FEDF8076E4B6C5D057FEDFC0F16
-FC6E4A486C01FE5B70171F6E92C7007F5C93B5EDFF3FA26E4A6EEBFFC0A26E4A6E5CA26F
-496E91C9FCA36F496E5BA26F496E5BA24D806F60A26F496E5BA26F90C96C5AA2DB00FCEE
-1F80713E7CBC7A> I<007FB600C0027FB51280A7D8003F01F0C80007EBC000070190C7FC
-6D6D4B5AA26D6D4B5AA26D6D4B5AA26D6D4B5AA26D6E4A5AA26D6E4A5AA26E6D4A5AA26E
-6D4990C8FCA26E6D495AA26E6D495AA26E6D495AA26E6D495AA26E6E485AA26E6E485AA2
-6F6D485AA26F01F190C9FCA26FEBFBFEA26FEBFFFCA26F5CA26F5CA26F5CA26F5CA2705B
-A27090CAFCA2705AA2705AA25FA24C5AA24C5AEA03F0D80FFC4A5AEA3FFF4C5A487F4B90
-CBFCB512C04B5AA24B5A4B5A151F4A485A6C4A5A4A485A263FFE035BD9FC1F90CCFC6CB5
-5A6C14F86C5C000114C06C6C90CDFCEB1FF051597DBC59> 121 D<000FB912F819FCA548
-49C714F802E016F002804914E091C74814C0494A1480495C494A140060494A5B4C5B4991
-B55A5D4B5C003F5F49495C4B91C7FC4B5B5D5FC8485B92B55A4A5C5C4A5C5F4A91C8FC4A
-49EB03FC4A5B5C91B55A4C1307494A14F8495C495C5B4991C7FC4B140F495B4949141F90
-B5FC484AEC3FF05D484A147F484A14FF4891C75A4816074849141F4A49B5FC4890B8FCBA
-FC19E0A47E3E3D7BBC4B> I<BD12E0A6530680A854> I<D801F815FCD807FEEC03FF486C
-6C010F1380486D4913C0486D4913E0A2486D4913F0A2B516F8A46C17F0A26C496D13E0A2
-6C496D13C06C496D13806C48C700031300D801F8EC00FC351471E054> 127
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fi cmbx10 20.74 12
-/Fi 12 125 df<B800E00A0FB712FE05F81C3F7164A27199B8FCA37163C7001F10F0C7FC
-72F203FBA203F76EF207F3A203F36EF20FE3A203F16EF21FC3A303F06EF23F83A2706DF2
-7F03A2706D1AFEA2706DF101FCA2706EF003F8A3706EF007F0A2706EF00FE0A2706EF01F
-C0A2706EF03F80A2716DF07F00A3716D18FEA2716D4D5AA2716E4C5AA2716E4C5AA3716E
-4C5AA2716E4C5AA2716E4C5AA2726D4CC7FCA2726D16FEA3726D4B5AA2726E4A5AA2726E
-4A5AA2726E4A5AA2726E4A5AA3726E4A5AA2736D4AC8FCA2736D14FEA2736D495AA2736E
-485AA3736E485AA2736E485AA2736E485AA2736E485AA2746D48C9FCA374EBFEFEA2746D
-5AA2745CA2745CA2745CA3745CA2745CA27590CAFC0103B57EB800FE6F48031FB912FEA2
-755AA3755A755A755AAF767AF5BC> 77 D<030FB5FC0203B612F8021F15FF91B812E001
-0317F84917FE011F9026FC001F6D7E4901800103806F010080496D6E13F890B56F7F6F80
-727F486E6E7F8784878487A26C5C72806D5BA26D5B6D5BD907FEC9FCEB00F091CAFCA518
-3F0403B7FC93B8FC151F92B9FC140F023F150049B612C0010702FCC7FC4914E0013F1480
-4949C8FC48B512F84814E0485C5D4891C9FC485B5A5C5A5CA2B5FC5CA360A360806C5F6E
-5D6C18DF6EED1F9F6C6D037F14FC6C6EDAFF1FEBFF806C02E0902603FE0FECFF806C02F8
-D90FFC16C06C02FF9038FFF8076C92B5487E013FEEC001010F4C7E01014BC7123FD9001F
-02F002031480DA007F90CCFC5A507BCE60> 97 D<93383FFFE00307B67E033F15F04AB7
-12FE0207707E021F83027F8391B526FC003F7F010302E001077F490280497F4949C78049
-495C495B49494A7F90B55AA2485C5A5D5A92C86C5B5A725B485B725B48715B060013C007
-1EC7FC4895C8FC5CA4B5FCAF7EA280A27EA36C7FA2F20FC06CF11FE0816C193F6F17C06C
-197F6C806FEEFF806C4E13006D6D5D6D6D4B5A6D6D4B5A6D6D6C141F6D02E0EC7FF86D02
-F8903803FFF0010002FF013F13C06E91B65A021F94C7FC020716FC020116F0DA003F15C0
-030702FCC8FCDB003F13C04B5079CE58> 99 D<93381FFFE00303B6FC033F15E092B712
-F8020716FE021F707E4AD9FC0114E091B526E0001F7F49028001077F010749C76C7F4949
-02007F49496F7E49496F1380494917C08590B5486F13E0485C487213F0A24891C914F885
-481AFC5C5A7313FE5AA25C5AA21BFF85A2B5FCA291BBFCA51BFE02FCCCFCA67EA3807EA3
-7EA26C7F1B7E1BFF6C807E6F5E6C1AFE6C6E16036FEE07FC6D180F6D6DEE1FF86D6DEE3F
-F06D01FFEEFFE06D6E4A13C06D02E0020F1380010002FC023F13006E903AFFC007FFFE02
-1F91B65A020717F0020117C06E6C93C7FC030F15FC030115C0DB000701F8C8FC50507BCE
-5B> 101 D<ECFFFEB6FCA8C67E131F7FB3AD953803FFF0063FEBFF804DB612E0050715F8
-051F15FE057F819426FFFC07804CD9C001804C48C780DC07F8804C4882EE1FC04C486E7F
-4CC8FC047E835E6F4881A24C835EA25EA35EA493C9FCB3B3A6B8D8F001B812E0A8637879
-F76E> 104 D<ECFFFEB6FCA8C67E131F7FB3AE96B71280A8070791C7FC070113F04F13C0
-4F5B4F90C8FCF13FFEF17FF84F5A4E5B06075B4E5B4E48C9FC4E5A4E5A4D485A4D13C04D
-5B4D90CAFCEF3FFEEF7FF84D5A4C7F4C7F160F4C7F4C7F4C8092B77EA285858516FCDCF0
-7F7F4C6C7F4C6C7F0480814B487E4B6D80718086718083727F727F868472807280877280
-847280737F8785737F73808873804F14F8B8D8C001B712FCA85E787AF768> 107
-D<902601FFFC913803FFF0B6033FEBFF804DB612E0050715F8051F15FE057F819426FFFC
-07804CD9C001804C48C780C66CDA07F880011F4A48826DEC1FC04C486E7F4CC8FC047E83
-5EDBFDF881A2DBFFF0835EA25EA35EA493C9FCB3B3A6B8D8F001B812E0A8634E79CD6E>
-110 D<93380FFFF04BB67E031F15F892B8FC020317C0020F17F0023F49C66C13FC4A01E0
-01077F49B5008001016D7E4949C86C7F49496F7F49496F7F49496F7F49496F7F49496F7F
-90B5486F7F481B8092CAFC481BC0481BE04A83481BF0A2481BF8A348497113FCA3481BFE
-A5B51AFFAE6C1BFEA46C1BFC6E5FA26C1BF8A36C6D94B512F0A26C1BE06F5D6C1BC06C1B
-806F5D6C6E4B14006D6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D6C49B55A010102E00107
-14806D02FE017F91C7FC023F90B712FC6E5F020717E0020094C8FC031F15F8030315C0DB
-000F01F0C9FC58507BCE63> I<902601FFF8903803FF80B6021F13F0057F13FC94B6FC04
-0315804C15C093260FFE0F13E093261FF01F13F005E014F8C66C91383F803F011FEC7F00
-6D027E4913FC16FEEDF9FC5E5E15FB5E03FF6E13F8A24C6D13F07213E07213C04C010113
-00F0007C96C7FC93CAFCA65DB3B3A2B812FCA8464E7ACD52> 114
-D<912603FFFEEB03C0027F9039FFE00FE00103B6EAFC3F010F92B5FC133F49EB00072601
-FFF0EB007F480180141F4890C812074848814981484881003F177F5B183F127FA2181F12
-FF7FA27F7F6D6CED0FC06E92C7FC14F814FF6C14FCEDFFE0EEFF806C16F017FC6C16FF18
-C06C17F06C836C836C836C836D1780011F17C0010717E0010117F06D7E020F16F8140003
-0315FCED000F1600051F13FE83007E1603B48283187F6D163FA36D161FA219FC7FA27F6D
-EE3FF8A26D17F06D167F6D17E06E15FF02E0020313C06E4A138002FE021F1300913AFFC0
-03FFFE92B65A01E316F001C016C0D9003F92C7FC48010714F80078D9007F90C8FC3F5079
-CE4E> I<91B5933801FFFEB74AB6FCA8C66C93C7FC011F183F6D84B3B3A962A362A397B5
-FC6D5FA2616D6E5CF10FEF6DDD1FCF7F70DA3F8F14C06D6E02FFEDFFE06E6D0103130F6E
-01FFEB1FFE6E91B512F8020716F0020116E06E6C1580030FECFC00DB007F01E003E0C7FC
-634F79CD6E> 117 D<C5B912F8A6C50680B2C6> 124 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fj cmbx12 24.888 19
-/Fj 19 122 df[<BFFC1EFEF6FFE01FFCF7FF8020F020FC20FF8DC7000392CA001F15E0
-0B0181776C800C1F807814FF0C03818A78818E79808B8E8B8E8B8EA27980A4791580AB55
-1500A4555CA26A676A676A555C9CB65AA2545D5492C7FC545C5414F80C3F5C545C53B612
-800B0F4AC8FC0B7F14F80A1FB612E095BBC9FC1FF81F801FF8F7FF8020F820FE95CBECFF
-C00C1F14F00C07807814FE0C006E7E7980798079807980798079808E79158023C08B23E0
-8C23F0A223F88CA223FCA38C23FEAB5614FCA55614F8A39DB612F0A25515E06723C05515
-8067551500555C555C9CB6FC545D0C075D0C1F15C09BB75A0B0F93C7FCC212FC6921E021
-800EFCC8FC20F020800DF0C9FC0CFCCAFC> 143 142 120 269 165
-66 D[<0803B500C0EE01F00703B600FE4C7E077FDBFFE015070607B800FC150F063F05FF
-151F4DBA00E0143F050F07F8147F053F07FE14FF94BC5B04039326F8000FECC003040F4B
-C86CEBF007043F03C0030F6D5A93B648C900036D5A4B03F09339007FFF3F030703C0051F
-90B5FC4B92CB7E033F02FC18034B02F08492B648844A0380193F4A92CD7E4A4A864A4A86
-4A02F0864A4A864A8991B65A494B874992CF7E4C885B494A885E498B494A88A2495C8D90
-B65A8D5A5E48217FA24892D1FC223FA25A5DA248211FA3485C7C5A9FC9FCA25AA45DA3B6
-FCB27EA381A20A0FBB12F8A27EA46C80A36C98C96C02F8C7FCA2817EA36C81A27E827E82
-7FA26D80A26D806D80A26D806D80A26D816D816E806E806E806E6E97B6FC6E806E806E03
-C0606E816F02F8606F02FE60030F6E606F03E0173F030103F85F6F03FF933801FFFC043F
-03E00307497E040F03FF033F497E040304FC0107B5EAE00F040093B8487E053FF2000105
-0F07FCEB007F050107F0141FDD003F06C01407060795C81201DE007F04F8ED0070070304
-8093C8FCDF000302E0CDFC> 157 146 115 271 183 71 D[<BC12C0A9C7000103E0C8FC
-B3B3B3B3B3B3B0BC12C0A9> 74 142 122 269 87 73 D[<BC12F8A9C7000303C0CEFCB3
-B3B3B3A5F8FF80A4672100A667A368A21F07A41F0FA3555AA21F3FA21F7FA21FFFA26666
-68666666666653B5FC65650B1F5C1D7F0A03B6FC1C1F0903B7FCC1FCA468A5> 121
-142 120 269 140 76 D[<B900C00C7FB812E0729BB9FC72657265A37265A27265C70003
-A101F8C8FC72F51FEFA2706EF43FCFA3706EF47F8FA2706EF4FF0FA2706EF301FEA3706E
-F303FCA2706EF307F8A2706EF30FF0A2706EF31FE0A3716EF23FC0A2716EF27F80A2716E
-F2FF00A2716E4F5AA3716E4F5AA2716E4F5AA2716E4F5AA3716E4F5AA2726E4E5AA2726E
-4E5AA2726E4EC7FCA3726E4D5AA2726E4D5AA2726E4D5AA2726E4D5AA3726E4D5AA2736E
-4C5AA2736E4C5AA3736E4CC8FCA2736E4B5AA2736E4B5AA2736E4B5AA3736E4B5AA2736E
-4B5AA2746E4A5AA2746E4A5AA3746E4AC9FCA2746E495AA2746E495AA3746E495AA2746E
-495AA2746E495AA2756E485AA3756E485AA2756E48CAFCA275ECF1FEA275ECFBFCA375EC
-FFF8A2755DA2755DA3765CA2765CA27691CBFCA2765BA34A6D715B49B512FEB900FC6F49
-0303BB12E0A2765BA2765BA3775A0B1FC9FC> 203 142 120 269
-220 I[<97B512F0077FECFFE00607B712FE067FEEFFE00503B912FC051FF0FF80057F19
-E00403BB12FC040F9226E0007F14FF043F02FCC7000315C04C02E0DA007F804BB6008003
-1F14F8030702FCC9000314FE4B4A70804B02E0706C80037F0280051F14E092B6CB6C804A
-4A72804A4A72804A02F00600804A4A737F4A4A73804A8B4A4A738091B6CD6C80494A7480
-A2494A7480494A7480498C4C86498D4C87498D494A7580A290B68B4C87488EA24892CF6C
-80A3488E4B88A2488EA3484A761580A34823C0A5484A7615E0A7B621F0B36C23E0A26F64
-A56C23C0A46F646C2380A36C23006F64A26C6AA270636C6AA26C6A70636C6A70636D69A2
-6D6E98B65AA26D6E505DA26D6E5092C7FC6D6870626D6E505C6D686D6F4F5C6E6E4F5C6E
-6E4F5CA26E6E96B65A6E6E4E92C8FC6E6E4E5C020102FF060F14F86E6F4D5C6F6E4D5C6F
-02F094B65A030F6E4C92C9FC6F02FE04075C03016E6C031F14F86F03F092B65A043F02FE
-020715C0040FDAFFF090B7CAFC040392B812FC04001AF0051F198005074ECBFCDD007F17
-E0060F94CCFCDE007F15E0070002F0CDFC> 148 146 115 271 175
-79 D[<BC040FB912C0A9C7000303C0CD001F02E0C7FC9E26007FF8C8FC7C5AB3B3B3B3B3
-6E555AA3848022FF6BA26F65726481696F9CC9FC72626F66210F6F6E505AA26F6E505A6F
-535A6F6E1AFF734E5B706E4E5B70637002F04E5B706E063F90CAFC706E4E5A7002FF4D48
-5A04006F04075B7102E0043F5B7102FC4BB55A050FDAFF80020F14807103FC0103B6CBFC
-050192B812FC716C61061F19E006031980060006FCCCFC071F17F007011780DF001F03F8
-CDFCE0001F49CEFC> 162 144 120 269 179 85 D[<BB6C010FBA00FC0307B812F8A9C7
-6C02FCCB000703C0CC6CEC8000786F070001F0C7FC6E6EA1EB3FE0781E7F6E796371A113
-FF78816E6FA15BA16079806E6FA190C8FC79646E796272230779806E6FA15AA1180F7981
-6E6FA15A791C1F6F796172233F79816F6E4E65A1187F8F6F6E4E65A118FF6F516F617369
-8F6F6F4D9AC9FCA15F8F6F6F4D640EDF1A076F09FF6F6073210F0E8F816F6F4C65A1171F
-0E0781706E4C65556C1A3F700707715F73217F556C81706E040F65A117FF556C81706F03
-1F65556D6070073F7194CAFC7467556D80706F037F64A11607556D80706F03FF64556D18
-0F704E735D741F1F9CC76C81716E4A65A1163F546E81716E020765546E187F71050F735D
-741FFF546E81716F011F65A15D546F80716F013F9ACBFC546F5E71057F735C751D07546F
-80716F01FF64A1150F546F1580716F48659BC96C161F724B09C05B09FC1D3F537015E072
-DAFE0765A1157F537015F072DAFF0F65537016FF72031F755B0A9F1BF9537114FD7203FF
-9ACCFCA191B5FC5383726853837268A253837268A29ACB7E736752847367A252847367A2
-528473675285739CCDFCA252857366A25285736652857366A299CD7E7465A25186083F65
-5186081F655186E007F075CEFC> 229 144 123 269 240 87 D<93B512FC037FECFFF0
-0207B8FC023F17E091B912F84918FE0107727E499126C0007F14E04901E0C7000F80496D
-020380496D020014FE6F6F7F90B570806F6F8085486E6F807380A27380A28885886C5CA2
-6D4982886D5B6D5B010713C0010190CAFC90CCFCA90603B7FC050FB8FC0403B9FC167F03
-07BAFC153F4AB7EA807F020FEDE000023F02FCC7FC91B612E0010392C8FC4914FC011F14
-F04914C0495C90B548C9FC485C485C485C485C5A5D485CA24891CAFCA3B6FC5CA397B6FC
-A461806C60F107EF6C6E150F6F16CF6C183F6FDB7F8F806C6EDBFF0F14E06C02FCDA03FE
-15FE6C6E91260FFC0791B5FC6C6E6CD93FF817806C923AF803FFF003013F91B6487E010F
-EF8000010394C77E010004FC141F021F03F0140702010380DA007F1400DA000701F8CDFC
-695F79DD71> 97 D[<ED1FF0017FB5FCB7FCA9EA003F1307A27FB3B296383FFFC00607B5
-12FE063FECFFE04DB712F8050716FF051F17C0057F17F094B5D8C00F8004F301FCC714FE
-04F701E0023F7F93B50080020F804DC86C14E005F80301804D6F804D707F05808294CA80
-4C717F4C7180A24C71808BA27680A28B88A28BA28BA3888BA52080B02000A56764A267A3
-676467A2525CA267647062704D91C7FC704D5BA2714C5B7193B55A05F04B5CDCBFF84B5C
-DC1FFC030F5C4B6CB44B91C8FC7001C0027F5B4B6C01F00103B55A4BC601FF013F14F04B
-6D90B712C04B011F94C9FC4B6D16FC4B010316F092C86C15804A030F02F8CAFC90CB49CB
-FC> 113 144 121 270 129 I<94387FFFC0040FB6FC93B712E0030716FC031F16FF037F
-17C04AB912F00207DAF80380021F912680003F13FE4A49C7000F7F4A01F802038049B548
-6E804902C06E6C7F494A6F7F4991C9FC49727F4949707F4B84498490B548707F5A4B1980
-48855D481CC086481CE05D5A871DF05AA25D5AA21DF887A2B6FCA392BBFCA51DF00380CD
-FCA77EA4817EA37EA2817EA26CF307F06FF00FF87E816C1B1F6F19F06C1B3F6D6DF07FE0
-6D7FF4FFC06D6E4C13806D6E5E6D02F04C13006D6EEE1FFE6D6E4C5A6D6C01FFEEFFF86E
-02E002035B6E02FC021F5B02079126FFC003B55A6E92B7C7FC020060033F17F8030F17E0
-03011780DB003F03FCC8FC040315C0DC000F01F8C9FC5D5F7ADD6A> 101
-D[<95383FFF80050FB512F094B612FE040781041F16C0047F824BB87E0307DAF8077F03
-1FDAC00F7F4B49C6487F4B495B92B500F0814A4A5B4A5C4A93B612805F4A91C7FC5C5E5C
-5E5C731400A24C6E5B91B56F5BA2735B070313E00700138097C8FCB3A4BA12F8A9C702FC
-CBFCB3B3B3B3A2003FB9FCA9> 81 144 121 271 71 I[<EC3FC0ECFFF0010313FC497F
-497F498049804980A290B67EA24881A86C5DA26D5CA26D5C6D5C6D91C8FC6D5B6D5B0100
-13F0EC3FC091CAFCB3A3ED1FF0017FB5FCB7FCA9EA003F1307A27FB3B3B3B0B91280A9>
-49 144 119 271 65 105 D[<ED1FF0017FB5FCB7FCA9EA003F1307A27FB3B3B3B3B3B3
-ACB912C0A9> 50 143 119 270 65 108 D<94381FFFF00407B612C0047F15FC0303B87E
-030F17E0037F17FC4ABAFC4A9126FC007F80020F02C0010714E04A49C880027F01F8033F
-13FC91B5486F7F4902C003077F494A6F804991C96C80494970804949717F49874949717F
-A290B548717F48884B83481D80A2481DC04B83481DE0A2481DF0A3484A7114F8A4481DFC
-A5B61BFEAF6C1DFCA56C6E4D14F8A36C1DF0A36C1DE06F5F6C1DC0A26C6E4D1480A26C1D
-006F5F6C646D6D4D5B6F94B5FC6D636D6D4C5C6D6E4B5C6D6E4B5C6D02F0031F5C6D6E4B
-91C7FC6D6C01FE92B512FC6ED9FFC001075C6E02FC017F5C020791B812C0020196C8FC6E
-6C17FC031F17F003031780DB007F03FCC9FC040715C0DC001F01F0CAFC675F7ADD74>
-111 D<DB7FC049B47E90B6021F13F8B7027F13FE4DB67E4D15E04D814D814D01077F9426
-3FF00F7F94387FC01F4D48487FD8003F16000107DAC1FE491480EEC3FC6D5DEEC7F05F16
-CF5F16DF4D6D1400A204FFC76C5BA2735B4C6E5B735B070013C04C92C8FCA45EA65EB3B3
-AAB912FCA9515D79DC5F> 114 D<92261FFFF814F80203B638C001FC023FEDFC0791B812
-1F010317FF130F013F9038F8001F4990C8FCD9FFF8153F4801E0150F4849150348498148
-90CAFC197F4848173F191F485AA2007F180FA31907487EA27FA28002E0705A6E93C8FC14
-FC14FF15F06CECFF8016FCEEFFF06CEEFF8018F06C17FE727E6C18E0856C18FC6C846C72
-7E6C856D84011F846D841303010084023F83140F020183EC001FDB007F16801603DC000F
-15C01700183F060F14E0007F1703486C82727E857F85857FA2857F1BC07FA27F1B806D5F
-7F1B006E5E6E5F6E163F6E4C5A02FC4C5A6E03035B6E6C4A5B03F0023F5B03FF0107B55A
-01F991B7C7FCD9F07F16FCD9E01F16F0D9800716C0D9000193C8FC48D9003F14F8007C02
-0349C9FC4B5F78DD5C> I[<ED03FEA81507A5150FA4151FA3153FA2157FA215FFA25CA2
-5C5CA25C5C5C5C91B5FC13035B131F017F91B712F00007BAFCBBFCA7C74AC9FCB3B3AAF1
-01FFB1616E17FE82A219076E17FC836EEE0FF871131F6E6EEB3FF071137F6E6EEBFFE06E
-DAFF0313C06E92B512806E1700033F5D6F5D03075D030015E0041F1480040001FCC7FC>
-72 132 124 258 90 I<007FB800C04AB71280A9D800034ACA000791C7FC6D080013F077
-5A6D6E4E5AA26E6E6064836E4F90C8FC836E4F5A836E4F5AA26E6E4C5AA26E6E5F1C3F6E
-6E5F1C7F836E4F5A846F4D5B846F4D90C9FCA26F6E4A5AA26F6E5D1B0F846F4D5A846F4D
-5A846F4D5AA26F6E4A5AA2706E5C627002C091CAFC6219E0704B5A19F0704B5AA2706E48
-5AA2706E485AA27002FE5B1A7F19FF704B5AA2715DA27192CBFCA2715CA2715CA3715CA2
-715CA2715CA2715CA2725BA27290CCFCA3725AA2725AA24E5AA24E5AA261187FA24E5AA2
-4D5B13FE2603FF804A90CDFC000F13E0486D4A5A487F486D4A5AA260B56C141F4D5AA24D
-5A17FF604C5B4A4990CEFC6C5D4C5A6C49EB3FFC4A495A6C4948485A9026FE80075B270F
-FFC03F5B6C90B6CFFC6C5D6C15F86C6C5C011F14C0010749D0FC9038007FE071857CDB7B
-> 121 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fk cmr12 24.888 17
-/Fk 17 125 df[<95260FFFE0ED7FF00503B6913807FFFE053F03C0011FEBFF804CB700
-F0017F14E00407903EFC007FFC01FFF03FF0041F01C0902603FE0790388007F8DC7FFEC8
-D8FF8F9038000FFC922601FFF892263FDFFC131F4B01E06FB448EB3FFE030F49037F157F
-4B90C9B54890B5FC4B484B5C4B485D4B484B5C4A5B4A49605C4A4995C7EA7FFE4CF23FFC
-4AF41FF893C96C49EC0FF04A71EE03C07493C7FC4A48177FA2515A4A5AB3ACC012F0A6C7
-01FCCA01FCC9FCB3B3B3B3496D4C7F88496D4C80011F02E0031F14F8B800FC90B912C0A6
-> 120 145 123 272 118 11 D[<962603FFFC177096B600E016F0060F03FC1501067FED
-FF800503B800E01403050F05F81407053FDAE00113FE94B500FCC7D80FFF140F040302C0
-020101C0131F040F49C96C7E4C01F8DC1FF0133F047F01E0EE07FC93B50080DC01FE137F
-030349CB6C13FF4B01F8727E4B49F01FC1033F01C0F00FE34B49F007F392B5CC6CB5FC4A
-49854A49854A5B4A49864A49864A49865E4A90CE7E91B587495B494987A2494987495B8B
-495B491E7F5D5B4B1C3F90B5FC201F4891D0FCA25A4A1D0F5AA25C481F07A3485BA22003
-A25A5CA29DC9FC5AA45CA2B5FCB37E80A30A3FB912C0A27EA3806C98C7003FED80000C01
-02FCC7FC786C5B8B6C6D668BA27E80A27E807EA26C80A26D7FA26D7FA26D7F7F817F6D7F
-817F6D7F6E7F8070626E7F6E7F6E6D626E7F6E6D97B5FC6E7F6F01C0606F6DF003FD030F
-6DF007F96F01FCF00FF06F01FF95381FE07F03006EEF3FC07001E09438FF803F041F01FC
-0403EB001F7001FFDC0FFE130F040302E0DB3FFC1307040002FE912603FFF01303053FD9
-FFF0017F491301050F91B70080130005034DC81270DD007F04F092C8FC060F1680060003
-F8CCFC070349CDFC> 138 149 117 272 159 71 D[<BA1280A6D8000703F0C7FCD9007F
-91C8FC6E5B6E5B6E5BB3B3B3B3B3B3AD4A7F4A7F4A7F0107B612F0BA1280A6> 57
-141 120 268 73 73 D[<B900FE4CB8FCA6D8000F03E0CB001F15C001004ACC000702FC
-C7FC023F01F87314E07814806E4951C8FC20F86820C0689DC9FCF603FC545A67545A545A
-545A54CAFC1EFE535A535A535A535A535A535A0BFFCBFC525A525A525A525A525A525A52
-5A52CCFC515A515A515A515A515A515A515A51CDFC505A505A505A505A505A505A505A50
-CEFC614F7F4F7F614F7F4F7F6196B57E4E80604E80DE0FE77FF01FC7DE3F8380DE7F0180
-18FE4D486C804D486D7F4D5A4D486D7F4D48814D487F4DC76C7F05FE82DCF1FC80DCF3F8
-6E80DCF7F083DCFFE0804D6E804D8394C97E4C707F4C844C824C707F898775808A877580
-8A88767F8A88767F8A8876808B887680A2777F777FA2777F777FA2777F7780A277807780
-A2787F787FA2787F8C787FA28D8D8D4A6D88548091B500FE4F14FE010FDAFFE095B712E0
-B900FE043FEEFFE0A6> 139 141 119 268 157 75 D[<BA12F0A6D8000F03F0CDFC0100
-4ACEFC023F5B5E805EB3B3B3B3A5F601F0A5F603E0A81E07A31FC0A21E0FA41E1FA31E3F
-A21F801E7FA21EFFA26565A26565531300656552B5FC641C0F4A193F704CB6FC91B5170F
-010F02FE4BB7FCC0FC66A5> 108 141 119 268 126 I[<B700F00B7FB612FC709AB7FC
-A27064A27064D8000FFBC000010010FCC7FC91263F7FFFE207DF13F0A2021F696F6DF30F
-9FA26F6DF31F1FA36F6D1B3EA26F6D1B7CA36F6D1BF8A36F6DF201F0A26F6DF203E0A370
-6CF207C0A3706DF10F80A2706DF11F00A3706D193EA3706D61A2706D61A3706D4E5AA270
-6D4E5AA3716C4E5AA3716D4D5AA2716D4DC7FCA3716D173EA3716D5FA2716D5FA3716D4C
-5AA3716D4C5AA2726C4C5AA3726D4B5AA2726D4BC8FCA3726D153EA3726D5DA2726D5DA3
-726D4A5AA3726D4A5AA2736C4A5AA3736D495AA3736D49C9FCA2736D133EA3736D5BA273
-6D5BA3736D485AA3736D485AA2746C485AA374EB8F80A37401DFCAFCA27413FEA3745B4A
-7EA2745B4A7E4A6C705BA2010301F8547F496D705B011F01FF9BB512FC48B600F0704804
-0FECFFC0B800E097B912FCA2755AA375C9FC> 166 141 119 268
-185 I[<96381FFFE00603B6FC063F15F04DB712FE050F903AF8007FFFC0053F90C70003
-13F0DDFFF89138007FFC040301E0ED1FFF040F0180030713C0DC3FFEC9000113F04C4870
-7F922601FFF0EF3FFE4B49717E4B018005077F031F90CB6C13E04B48727F4B48727F4B48
-737E4A49737E4A49737E4A49737F4A894A49737F4A90CD6C7F4A48747FA24A48747F4949
-757E498A4B87498B4949757FA24949757FA24949757F498BA290B5CF6C7FA2488C4A88A2
-488C4A88482180A348497713C0A34821E0A24A89A24821F0A44821F84A89A6B520FCB26C
-6D5313F8A76C21F06E65A36C21E0A36E9AB5FC6C21C0A36C6D521480A26C21006E64A26C
-686F636C68A26D6D515BA26D6D515BA26D6D515B6D676F636D676F98B5FC6D9CC7FC6D6D
-505B6D666F626E6D4F5B6E6D4F5B6E656E6D4F5B6E6D4F5B6E6D4F90C8FC6E6D4F5A6E6D
-4E5B6F6C4E5B6F6D4D5B6F6D4D5B6F6D4D5B030301F8057F90C9FC6F6D4D5A6F6CB40403
-13F8706D4B5B040F01E0031F13C0040301FC92B5CAFC0400D9FF80010713FC053F01F801
-7F13F0050F90B712C005014CCBFCDD003F15F0060392CCFCDE001F13E0> 134
-149 117 272 157 79 D[<B900C0021FB800FC4BB712FEA6C66C0380C9000703F8CA0007
-15C0010702FCCB03C00500ECFE006D02F0063F91CC003F13F86D4A72497313E04C500707
-5B6D7565A16F90C7FC6E74755AA27074626E86A15E70866E7464A2707518036E7464A270
-7518076EA15B8A826E98B56C4E5AA2826E506E4EC8FCA283536E606E09EF1A3EA2710507
-6E187E6F08C71A7CA271050F6E18FC6F088362A271051F6E17016F080162A2717516036F
-DF3E0062A2717516076F4F6D61A27175160F6F07FC63537F836F0601704CC9FC537F846F
-060370163E537F840A0770167E704E6D187CA272030F7016FC704E6D60A272031F701501
-7095C76C60A27275140370053E6E60A272751407704D6F5FA27275140F7005FC63528184
-700401724ACAFC52818570040372143E528185090772147E714C6F167CA273010F7214FC
-714C6F5EA273011F7213017193C96C5EA27349F1800371033E705EA273F3C007714B715D
-A273F3E00F714B715DA273F3F01F71020199CBFC51831A81710283F2F83E51831AC37201
-C7745A51831AE708EFF2FEFC724A715CA208FF1AFF7291CB6C5CA37249725CA37249735B
-A37249735BA3729ACCFC5085A2726450190FA2077F63501907A37348735AA2071F6397CD
-1201> 199 145 124 268 208 87 D<93380FFFC093B512FC0307ECFF80031F15F0923A
-7FFE007FFC912601FFF0EB07FE020701C0903800FF804A90C8EA3FC0DA1FFCED0FE0DA7F
-F86F7E4A48ED01F849496F7E4949167E4949163E4990CA123F49EF03FF49484C13804A5E
-017F5F49484C13C061485B5AA2485BA25A4A7013805A731300735A4849EE03F896C8FCA3
-5AA291CDFCA3B5FCAF7E80A47EA36C7FA36CF101F0807E1A036C6D18E0A26C6D17071BC0
-6C6D170F017F19806E171F013F19006D6C5F6D6D167E6D6D167C6D18FC6D6D4B5A6D6D4B
-5ADA7FFC4B5A6E6CED1FC091260FFF804A5A6E6D02FEC7FC020101F8EB07FC6E01FFEB7F
-F8031F90B512E003071580030002FCC8FC040F13C04C5E79DB5A> 99
-D<EE1FFF4BB512F0030F14FE033FECFFC09226FFF80713F00203D9C0007F020F90C7EA1F
-FEDA1FFC6E7E4A486E7FDAFFF06E7F49496E7F49496E7F49496F7E4990C97F49173F4948
-707E4A83017F8349481880A248497013C05AA248497013E0A25A5C487213F0A3485BA21B
-F8A24884A291CBFCA3B5FC91BAFCA31BF091CDFCAB7EA280A37EA36C7FA36C1A706E18F8
-7E1A016C7F1BF06C19036E18E06C19076D7E6D6CEF0FC0F21F806D7E6D6DEE3F006D187E
-6D6D16FE6D6D4B5A6D6D4B5A6E6C4B5ADA1FFEED1FE06E6CED3F80020301C002FFC7FC6E
-01F0EB07FE6E6CB4EB7FF8031F90B512E003031580DB007F01FCC8FC040713C04D5E7ADB
-5A> 101 D<F30FF8F3FFFEDCFFF802077F030FD9FF80011F1480037F02F090393FF81FC0
-4AB600FC9038FF803F0207903DE03FFF01FE007FE04AD90007D983F813FFDA3FFC0101EB
-E7E0DA7FF06D6CB45A4A486E90C7FC49496E5A4949020FED7FC04971EC3F804990C86C6D
-EB1F00497290C7FC4A81013F8449486F7FA201FF84A348496F7FA34885AC6C61A36C6D4B
-5BA3017F60A26D6C4B5B011F606E5D6D606D6D4A90C9FC6D5F6D6D4A5A6F4A5A496D4A5A
-03FC49485A902607CFFF01071380D90F87D9E03F90CAFC028190B512FC49C66C14F0030F
-148049010001F8CBFC013E91CDFCA3137EA5137FA38080A2806D7E14FC14FF6D90B77E19
-FE6DEFFFE01AFC6D18FF6D19C06D19F06D19FC6E848749BB7E010F864990C981D97FF816
-03D9FFE0DC007F7F480180050F7F4890CB1203484806007F4848197F4848193F757E485A
-1B0F4848190788A2484885A76D61007F63A26D190F003F636D191F001F636C6C4F5A6C6C
-4F5A6D19FF6C6D4D5B6C01E005075B6C6C6C4D48C7FCD93FFCEF3FFC6DB4EFFFF8010701
-C0030313E0010101F0030F13806D6CB4DBFFFEC8FC021F01F8011F13F8020790B712E0DA
-007F4BC9FC030715E0DB001F01F8CAFC5B887ADC65> 103 D[<14FCEB03FF010F13C049
-7F497FA2497FA86D5BA26D5B6D5B010390C8FCEB00FC91C9FCB3A9EC03F848B5FCB6FCA6
-C67E130F7F7FA27FB3B3B3AE5B81497F013FEBFFC0B812E0A6> 43
-138 121 265 57 105 D[<EC01FC90B5FCB6FCA6C67E13077F7FA27FB3B3A5077FB612F8
-A6071F92C7FC070714F87314C099C8FC7313FC1BF04F13C06398C9FCF107FC624F5A4F5A
-4F5A4FCAFC19FEF003FC4E5A4E5A4E5A4E5A4E5A06FECBFC4D5AEF07F84D5A171F173F4D
-7E4D7E5E4C7F4C7F041F805EDC7FBF7FDCFF3F7F9238FDFE1F9226FFFC0F7F04F0804C7E
-4C6C7F0480804C7E4B6D7F4B824B80727F8684727F8684727F727FA2727F737FA2737F73
-7FA2737F737F8785737F87858888747F88496D93B57E88496D4B14FF011FD9FFC0020715
-E0B800F8017FEDFF80A6> 97 143 123 270 107 107 D<DA03F891380FFF8090B592B5
-12F8B6020314FF050F15C094263FF00F7F94267F800113F8DC01FCC76C7EDC03F06E7ED8
-003F4A486E7E01074A5A6D4AC86C7F6D023E83043C816D027C834C815E03F984EDFBE05E
-03FF824C83A393C9FCA35DA45DB3B3AF496D4C7FA2496D4C7F011F02E0033FEBFFC0B8D8
-FC01B812F8A6655B7ADA70> 110 D<153EA8157EA615FEA41401A31403A31407A2140FA2
-141F143FA2147F14FF5B5B5B5B133F90B912F01207BAFCA4C76C48C9FCB3B3AA193EB219
-7E023F167C81A36E16F88280F001F06E7FF003E06E7F6E6DEB07C06E150FDB7FFCEB1F80
-6F6CEB3F0092391FFFC1FE0307EBFFFC030114F06F6C5B040790C7FC3F817CFE4F> 116
-D<BF12F0A4640480B865> 123 D<C5BA1280A4C90480B8CA> I E
-%EndDVIPSBitmapFont
-end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- @landscape
-%%EndSetup
-%%Page: 0 1
-0 0 bop Black Black Black Black Fk 2459 910 a(MO) -6
-b(W) g(GLI) 1992 1151 y(Kic) g(k{O\013) 67 b(Meeting) g(|) p
-Fj 1198 1882 a(Usabilit) -6 b(y) 75 b(of) j(MBase) g(for) g(MO) -6
-b(W) g(GLI) p Fi 2126 2627 a(Markus) 66 b(Mosc) -6 b(hner) p
-Fh 1176 2897 a(Univ) h(ersit) g(y) 56 b(of) g(Saarbr) 5
-b(\177) -89 b(uc) -5 b(k) g(en,) 55 b(D-66123,) k(German) -5
-b(y;) 1811 3104 y(email:) 73 b(mosc) -5 b(hm@math) g(w) g(eb.org) p
-Fg 4881 3761 a(15.Marc) l(h) 49 b(2002) p Black Black
-90 rotate dyy eop
-%%Page: 0 2
-0 1 bop Black Black Fh 258 96 a(First) 55 b(Glance) p
-Black Ff 271 612 a(\017) p Black Fg 86 w(Managemen) l(t) 50
-b(of) f(mathematical) i(kno) l(wledge) p Black Ff 271
-922 a(\017) p Black Fg 86 w(Con) l(ten) l(t) f(language:) p
-Fh 66 w(OMDo) 5 b(c) p Black Ff 271 1232 a(\017) p Black
-Fh 86 w(Dev) -5 b(elopmen) g(t) 56 b(Graph) p Black Ff
-271 1542 a(\017) p Black Fg 86 w(Implemen) l(tation) 51
-b(based) f(on) f(the) p Fh 430 1714 a(MathW) -14 b(eb) p
-Fg 48 w(infrastructure) p Black Ff 271 2024 a(\017) p
-Black Fg 86 w(Demo) 49 b(and) h(prerelease) g(a) l(v) -8
-b(ailable) p Black Black 90 rotate dyy eop
-%%Page: 0 3
-0 2 bop Black Black Fh 258 96 a(Application) 55 b(of) i(MBase) p
-Black Ff 271 567 a(\017) p Black Fg 86 w(Usage) 49 b(for) g(writing) h
-(mathematical) h(do) t(cumen) l(ts:) p Black Fh 639 859
-a({) p Black Fg 86 w(Structured) f(rep) t(ository) h(of) d
-(mathematical) j(concepts) p Black Fh 639 1082 a({) p
-Black Fg 86 w(Storing) g(and) e(retrieving) i(mathematical) g(do) t
-(cumen) l(ts) p Black Ff 271 1374 a(\017) p Black Fg
-86 w(P) l(oten) l(tial) g(use:) p Black Fh 639 1666 a({) p
-Black Fg 86 w(Uni\014cation) g(of) e(libraries) p Black
-Fh 639 1889 a({) p Black Fg 86 w(Rep) t(ository) h(of) f
-(\(standardized\)) p Fh 50 w(XML) p Fg({based) h(do) t(cumen) l(ts) p
-Black Fh 639 2112 a({) p Black Fg 86 w(Seman) l(tics{based) h(retriev)
--8 b(al) 50 b(of) f(distributed) i(mathematical) g(facts) p
-Black Ff 271 2404 a(\017) p Black Fg 86 w(P) l(ossible) f(use) f
-(within) h(MO) l(W) l(GLI:) 430 2576 y(lo) t(cal) h(rep) t(ositories) f
-(for) f(a) g(uniform) h(data) f(exc) l(hange) p Black
-Ff 271 2868 a(\017) p Black Fg 86 w(Systems) g(in) l(tended) i(to) e
-(use) g(it) g(in) h(the) f(near) g(future:) p Black 609
-3160 a(1.) p Black 86 w(Activ) l(eMath) h(authoring) h(to) t(ol) p
-Black 609 3383 a(2.) p Black 86 w(INKA) d(and) h(\012mega) g(pro) t(of)
-g(planner) p Black 609 3607 a(3.) p Black 86 w(Other) p
-Fh 49 w(MathW) -14 b(eb) p Fg 48 w(systems) p Black Black
-90 rotate dyy eop
-%%Page: 0 4
-0 3 bop Black Black Fh 258 95 a(F) -14 b(eatures) p Black
-Fg 231 611 a(1.) p Black 85 w(Syn) l(tactic) 51 b(supp) t(ort) e(for) p
-Fh 49 w(OMDo) 5 b(c) p Fg 49 w(1.1) p Black 231 921 a(2.) p
-Black 85 w(W) -12 b(eb) 50 b(in) l(terface) p Black 231
-1231 a(3.) p Black 85 w(XMLRPC) e(in) l(terface) 430
-1403 y(\(libraries) j(for) e(imp) t(ortan) l(t) h(programming) h
-(languages) g(exist\)) p Black 231 1713 a(4.) p Black
-85 w(P) l(attern) e(matc) l(hing) h(\(\\case") g(in) p
-Fh 49 w(Oz) p Fg(\)) f(|) 430 1885 y(core) h(of) e(seman) l(tics{orien)
-l(ted) j(searc) l(h) p Black 231 2195 a(5.) p Black 85
-w(Con) l(ten) l(t) f(stored) f(in) g(SQL) h(database) p
-Black 231 2505 a(6.) p Black 85 w(Distributions) h(for) e(Lin) l(ux) p
-Black Black 90 rotate dyy eop
-%%Page: 0 5
-0 4 bop Black Black Fh 258 96 a(Roadmap) p Black Ff 271
-612 a(\017) p Black Fg 86 w(Curren) l(t) 50 b(state:) 64
-b(database) 50 b(for) e(mathematical) j(con) l(ten) l(t) p
-Black Ff 271 922 a(\017) p Black Fg 86 w(Ongoing) g(w) l(ork:) p
-Black Fh 639 1232 a({) p Black Fg 86 w(Better) e(supp) t(ort) g(for) g
-(seman) l(tics) p Black Fh 639 1473 a({) p Black Fg 86
-w(Con) l(ten) l(t) g(exc) l(hange) h(b) t(et) l(w) l(een) p
-Fh 50 w(MBase) p Fg({serv) l(ers) p Black Fh 639 1714
-a({) p Black 86 w(Dev) -5 b(elopmen) g(t) 56 b(Graph) p
-Fg 49 w(in) l(tegration) p Black Ff 271 2024 a(\017) p
-Black Fg 86 w(F) -12 b(uture) 50 b(w) l(ork:) p Black
-Fh 639 2334 a({) p Black Fg 86 w(F) -12 b(ul\014ll) 52
-b(pro) t(of) d(obligations) j(automatically) 809 2506
-y(\(via) p Fh 50 w(MathW) -14 b(eb) p Fg(\)) p Black
-Fh 639 2747 a({) p Black Fg 86 w(Syn) l(tax) 50 b(transformators) p
-Black Fh 639 2988 a({) p Black Fg 86 w(Logical) h(morphisms) p
-Black Black 90 rotate dyy eop
-%%Page: 0 6
-0 5 bop Black Black Fh 258 96 a(Dev) -5 b(elopmen) g(t) 56
-b(Graph) p Black Ff 271 612 a(\017) p Black Fg 86 w(Dev) l(elopmen) l
-(t) 51 b(b) l(y) e(Dieter) g(Hutter) g(and) g(Serge) h(Autexier) p
-Black Ff 271 922 a(\017) p Black Fg 86 w(Directed) g(\(acyclic\)) h
-(graphs) e(with) p Black 609 1232 a(1.) p Black 86 w(theories) h(as) f
-(no) t(des) p Black 609 1473 a(2.) p Black 86 w(morphisms) h(as) f
-(edges) g(|) 809 1645 y(De\014nition) i(and) f(Theorem) f(Links) p
-Black Ff 271 1955 a(\017) p Black Fg 86 w(Mec) l(hanism) h(for:) p
-Black 609 2265 a(1.) p Black 86 w(F) -12 b(orm) l(ulating) 52
-b(theory) d(links) p Black 609 2506 a(2.) p Black 86
-w(Pro) l(ving) h(of) f(relations) h(b) t(et) l(w) l(een) f(theories) p
-Black Ff 271 2816 a(\017) p Black Fg 86 w(Managemen) l(t) h(of) f
-(Change:) 430 2988 y(Computation) i(of) e(pro) t(of) g(obligations) j
-(after) c(c) l(hanges) p Black Ff 271 3298 a(\017) p
-Black Fg 86 w(Realized) j(in) f(the) p Fh 49 w(MA) -14
-b(Y) g(A) p Fg 48 w(system) p Black Black 90 rotate dyy
-eop
-%%Page: 0 7
-0 6 bop Black Black Fh 258 95 a(URLs) p Black Ff 271
-611 a(\017) p Black Fh 86 w(MBase) p Black 639 921 a({) p
-Black Fg 86 w(Homepage:) 66 b(h) l(ttp://www.math) l(w) l(eb.org/m) l
-(base) p Black Fh 639 1162 a({) p Black Fg 86 w(Demo:) f(h) l(ttp://m) l
-(base.math) l(w) l(eb.org:8080) p Black Fh 639 1403 a({) p
-Black Fg 86 w(Bugtrac) l(king:) i(h) l(ttp://bugzilla.math) l(w) l
-(eb.org:8000) p Black Fh 639 1644 a({) p Black Fg 86
-w(Users) 48 b(mailing) k(list:) 65 b(m) l(base) p Fe(@) p
-Fg(math) l(w) l(eb.org) p Black Fh 639 1885 a({) p Black
-Fg 86 w(Do) l(wnload) 50 b(of) f(prereleases) h(for) e(Lin) l(ux:) 809
-2057 y(h) l(ttp://www.math) l(w) l(eb.org/releases/m) l(base) 809
-2230 y(ftp://ftp.ags.uni-sb.de/math) l(w) l(eb.org/releases/m) l(base) p
-Black Ff 271 2540 a(\017) p Black Fh 86 w(OMDo) 5 b(c) p
-Fg 49 w(:) p Black Fh 639 2850 a({) p Black Fg 86 w(h) l
-(ttp://www.math) l(w) l(eb.org/omdo) t(c/index.h) l(tml) p
-Black Fh 639 3091 a({) p Black Fg 86 w(Mailing) 52 b(list:) 65
-b(omdo) t(c) p Fe(@) p Fg(math) l(w) l(eb.org) p Black
-Ff 271 3401 a(\017) p Black Fh 86 w(Dev) -5 b(elopmen) g(t) 56
-b(Graph) p Fg(:) p Black Fh 639 3710 a({) p Black Fg
-86 w(h) l(ttp://www.dfki.de/) 2114 3677 y(~) 2130 3710
-y(ink) -8 b(a/ma) l(y) l(a.h) l(tml) p Black Black 90 rotate
-dyy eop
-%%Page: 0 8
-0 7 bop Black Black Black Fh 639 103 a({) p Black Fg
-86 w(h) l(ttp://www.dfki.de/vse/systems/ink) -8 b(a/ink) g(a5.h) l(tml)
-p Black Ff 271 413 a(\017) p Black Fh 86 w(URLs) 57 b(for) f(Activ) -5
-b(eMath) p Black 639 723 a({) p Black Fg 86 w(Homepage:) 66
-b(h) l(ttp://www.math) l(w) l(eb.org/activ) l(emath/index.h) l(tml) p
-Black Fh 639 964 a({) p Black Fg 86 w(Demo:) f(h) l(ttp://www.math) l
-(w) l(eb.org/activ) l(emath/demo/) p Black Fh 639 1205
-a({) p Black Fg 86 w(Bugtrac) l(king:) i(h) l
-(ttp://leibniz.ags.uni-sb.de:8000/) p Black Black 90 rotate
-dyy eop
-%%Page: 0 9
-0 8 bop Black Black Fh 258 96 a(Idea) 57 b(on) f(OMDo) 5
-b(c) p Black Ff 271 612 a(\017) p Black Fh 86 w(OMDo) g(c) p
-Fg 98 w(=) p Fh 48 w(O) p Fg(p) t(en) 50 b(Markup) f(F) -12
-b(ormat) 50 b(for) p Fh 49 w(M) p Fg(athematical) p Fh
-50 w(Do) 5 b(c) p Fg(umen) l(ts) p Black Ff 271 922 a(\017) p
-Black Fh 86 w(XML) p Fg 49 w(based) p Black Ff 271 1232
-a(\017) p Black Fg 86 w(Extension) 50 b(of) p Fh 49 w(Op) 5
-b(enMath) p Fg 47 w(standard) p Black Ff 271 1542 a(\017) p
-Black Fg 86 w(Univ) l(ersal) 51 b(format) d(for) h(mathematical) i(do) t
-(cumen) l(ts) p Black Ff 271 1852 a(\017) p Black Fg
-86 w(Flexibilit) l(y) j(for) 48 b(seman) l(tical) j(notions) p
-Black Ff 271 2162 a(\017) p Black Fg 86 w(Separating) g(presen) l
-(tation) g(and) e(con) l(ten) l(t) p Black Black 90 rotate
-dyy eop
-%%Page: 0 10
-0 9 bop Black Black Fh 258 96 a(T) -5 b(yp) 5 b(es) 57
-b(of) f(OMDo) 5 b(c) 56 b(items) p Black Ff 271 612 a(\017) p
-Black Fg 86 w(Theories) 50 b(and) g(inheritance) p Black
-Ff 271 922 a(\017) p Black Fg 86 w(Core) f(mathematical) i(ob) 8
-b(jects:) p Black Fh 639 1232 a({) p Black Fg 86 w(De\014nitions) 51
-b(and) f(sym) l(b) t(ols) p Black Fh 639 1473 a({) p
-Black Fg 86 w(Assertions,) f(axioms) g(and) h(pro) t(ofs) p
-Black Ff 271 1783 a(\017) p Black Fg 86 w(F) -12 b(or) 50
-b(Con) l(ten) l(t:) p Black Fh 639 2093 a({) p Black
-Fg 86 w(metadata:) 66 b(Dublin) 50 b(Core) p Black Fh
-639 2334 a({) p Black Fg 86 w(FMP:) f(formal) g(con) l(ten) l(t) p
-Black Fh 639 2575 a({) p Black Fg 86 w(CMP:) f(natural) i(language) h
-(con) l(ten) l(t) p Black Black 90 rotate dyy eop
-%%Page: 0 11
-0 10 bop Black Black Black Ff 271 96 a(\017) p Black
-Fg 86 w(ADT:) 48 b(abstract) h(data) g(t) l(yp) t(es) p
-Black Ff 271 406 a(\017) p Black Fg 86 w(Auxiliary) j(elemen) l(ts:) p
-Black Fh 639 716 a({) p Black Fg 86 w(System) d(sp) t(eci\014c) h(priv)
--8 b(ate) 50 b(data) p Black Fh 639 957 a({) p Black
-Fg 86 w(Applets) p Black Ff 271 1267 a(\017) p Black
-Fg 86 w(Presen) l(tation) g(information) p Black Black
-90 rotate dyy eop
-%%Page: 0 12
-0 11 bop Black Black Fh 258 96 a(Usage) 57 b(of) f(OMDo) 5
-b(c) p Black Ff 271 612 a(\017) p Black Fg 86 w(Examples) 50
-b(of) f(use:) p Black Fh 639 1094 a({) p Black Fg 86
-w(Mathematical) i(b) t(o) t(oks) f(in) p Fh 49 w(OMDo) 5
-b(c) p Black 639 1335 a({) p Black 86 w(Activ) -5 b(eMath) p
-Fg 48 w(group:) 66 b(a) 49 b(w) l(eb{based) h(learning) h(system) d
-(for) h(mathematical) i(courses) 809 1508 y(\(sligh) l(tly) g(mo) t
-(di\014ed) g(v) l(ersion\)) p Black Fh 639 1749 a({) p
-Black 86 w(QMath) p Fg 43 w(b) l(y) 45 b(Alb) t(erto) h(Gonz\023) -73
-b(alez) 45 b(P) l(alomo) g(|) g(a) f(fron) l(tend) i(for) p
-Fh 44 w(OMDo) 5 b(c) p Fg 44 w(\(needs) 45 b(dev) l(el-) 809
-1921 y(opmen) l(t\)) p Black Fh 639 2162 a({) p Black
-Fg 86 w(Comm) l(unication) 51 b(standard) f(b) t(et) l(w) l(een) f
-(\012mega) g(and) h(TPS) p Black Fh 639 2403 a({) p Black
-Fg 86 w(V) -12 b(arious) 50 b(XSL) f(st) l(yle) g(\014les) h(for) e
-(transformation) i(in) l(to) g(other) g(formats) p Black
-Black 90 rotate dyy eop
-%%Page: 0 13
-0 12 bop Black Black Fd 0 255 a(<theory) 44 b(id="SEMIGROUP">) p
-1 0 0 TeXcolorrgb 112 357 a(<metadata>) 204 450 y(<Title>The) f(Theory)
-h(SEMIGROUP</Title>) 204 543 y(<Creator) f(role="aut">The) f(OMEGA) j
-(system</Creator>) 204 636 y(<Date>2001-5-28</Date>) 112
-729 y(</metadata>) p Fc 2308 297 a(9) 2308 359 y(>) 2308
-379 y(>) 2308 400 y(>) 2308 421 y(>) 2308 441 y(>) 2308
-462 y(=) 2308 586 y(>) 2308 607 y(>) 2308 627 y(>) 2308
-648 y(>) 2308 669 y(>) 2308 689 y(;) p Fb 2399 570 a(Metadaten) p
-Black 0 1 0 TeXcolorrgb Fd 91 800 a(<commonname>Semi-group) 40
-b(theory</commonname>) p Fa 2058 817 a( ) p Fi -143 w(|) -29
-b(|) g(|) g(|) g(|) g(|) g(|) g(|) p Fb 60 w(Name) p
-Black Fd 91 989 a(<imports) 44 b(id="SEMIGROUP.impfrom.MAGM) o(A"fr) o
-(om=) o("MAG) o(MA"t) o(ype=) o("glo) o(bal) o(">) 183
-1162 y(<morphism) f(id="SEMIGROUP.impfrom.MAGMA) o(.mo) o(rphi) o(sm"/)
-o(>) 91 1334 y(</imports>) p 0 0 1 TeXcolorrgb 112 1440
-a(<symbol) h(id="SEMIGROUP"kind="objec) o(t">) 204 1533
-y(<commonname>SEMIGROUP</c) o(ommo) o(nna) o(me>) 112
-1626 y(</symbol>) p Fc 1759 1370 a(9) 1759 1432 y(>) 1759
-1453 y(=) 1759 1577 y(>) 1759 1597 y(;) p Fb 1850 1558
-a(Sym) -5 b(b) 5 b(ol-Deklaration) p Black 0.55 1 1 0
-TeXcolorcmyk Black 0.55 1 1 0 TeXcolorcmyk 90 rotate
-dyy eop
-%%Page: 0 14
-0 13 bop 0.55 1 1 0 TeXcolorcmyk Black 0.55 1 1 0 TeXcolorcmyk
-Fd 112 65 a(<definition) 43 b(id="def-SEMIGROUP"for="SE) o(MIGR) o
-(OUP") o(type) o(="si) o(mpl) o(e">) 204 158 y(<CMP>Definition) e(of) 46
-b(a) f(Semigroup.</CMP>) 204 251 y(<FMP) f(logic="POST">) 295
-344 y(<OMOBJ>) 387 437 y(<OMBIND>) 478 530 y(<OMS) h
-(cd="POST"name="all-types) o("/>) 478 623 y(<OMBVAR><OMV) e
-(name="AA"/></OMBVAR>) 478 716 y(<OMBIND>) 570 809 y(<OMS) h
-(cd="mltt"name="lambda"/>) 570 902 y(<OMBVAR>) 661 995
-y(<OMATTR>) 752 1088 y(<OMATP><OMS) f(cd="mltt"name="type"/>) 1073
-1181 y(<OMA><OMS) g(cd="mltt"name="funtype"/>) o(<OMV) c(name="AA"/>)
-1301 1274 y(<OMS) 45 b(cd="GENERIC"name="O"/></O) o(MA><) o(/OMA) o
-(TP>) 752 1367 y(<OMV) g(name="S"/>) 661 1460 y(</OMATTR>) 661
-1553 y(<OMATTR>) 752 1646 y(<OMATP><OMS) e(cd="mltt"name="type"/>) 1073
-1739 y(<OMA><OMS) g(cd="mltt"name="funtype"/>) o(<OMV) c(name="AA"/>)
-1301 1832 y(<OMA><OMS) 44 b(cd="mltt"name="funtype"/) o(><OM) o(V) c
-(name="AA"/>) 1530 1925 y(<OMV) 45 b(name="AA"/></OMA></OMA><) o(/OMA) o
-(TP>) 752 2018 y(<OMV) g(name="OP"/>) 661 2111 y(</OMATTR>) 570
-2204 y(</OMBVAR>) 570 2297 y(<OMA>) 661 2390 y(<OMS) g
-(cd="BASE"name="AND"/>) 661 2483 y(<OMA><OMS) e
-(cd="TYPED-SET"name="NOT-EMP) o(TY"/) o(><O) o(MV) d(name="S"/></OMA>)
-661 2576 y(<OMA>) 752 2669 y(<OMS) 45 b(cd="BASE"name="AND"/>) 752
-2762 y(<OMA><OMS) f(cd="STRUCT"name="CLOSED-U) o(NDER) o("/>) 981
-2854 y(<OMV) h(name="S"/><OMV) d(name="OP"/></OMA>) 752
-2947 y(<OMA><OMS) i(cd="STRUCT"name="ASSOCIAT) o(IVE") o(/>) 981
-3040 y(<OMV) h(name="S"/><OMV) d(name="OP"/></OMA>) 661
-3133 y(</OMA></OMA>) 478 3226 y(</OMBIND></OMBIND>) 295
-3319 y(</OMOBJ>) 204 3412 y(</FMP>) 112 3505 y(</definition>) p
-Fc 3634 31 a(9) 3634 93 y(>) 3634 114 y(>) 3634 134 y(>) 3634
-155 y(>) 3634 176 y(>) 3634 196 y(>) 3634 217 y(>) 3634
-238 y(>) 3634 258 y(>) 3634 279 y(>) 3634 300 y(>) 3634
-320 y(>) 3634 341 y(>) 3634 362 y(>) 3634 382 y(>) 3634
-403 y(>) 3634 424 y(>) 3634 444 y(>) 3634 465 y(>) 3634
-486 y(>) 3634 506 y(>) 3634 527 y(>) 3634 548 y(>) 3634
-568 y(>) 3634 589 y(>) 3634 610 y(>) 3634 630 y(>) 3634
-651 y(>) 3634 672 y(>) 3634 692 y(>) 3634 713 y(>) 3634
-733 y(>) 3634 754 y(>) 3634 775 y(>) 3634 795 y(>) 3634
-816 y(>) 3634 837 y(>) 3634 857 y(>) 3634 878 y(>) 3634
-899 y(>) 3634 919 y(>) 3634 940 y(>) 3634 961 y(>) 3634
-981 y(>) 3634 1002 y(>) 3634 1023 y(>) 3634 1043 y(>) 3634
-1064 y(>) 3634 1085 y(>) 3634 1105 y(>) 3634 1126 y(>) 3634
-1147 y(>) 3634 1167 y(>) 3634 1188 y(>) 3634 1209 y(>) 3634
-1229 y(>) 3634 1250 y(>) 3634 1271 y(>) 3634 1291 y(>) 3634
-1312 y(>) 3634 1333 y(>) 3634 1353 y(>) 3634 1374 y(>) 3634
-1395 y(>) 3634 1415 y(>) 3634 1436 y(>) 3634 1457 y(>) 3634
-1477 y(>) 3634 1498 y(>) 3634 1519 y(>) 3634 1539 y(>) 3634
-1560 y(>) 3634 1581 y(>) 3634 1601 y(>) 3634 1622 y(>) 3634
-1643 y(>) 3634 1663 y(>) 3634 1684 y(>) 3634 1705 y(=) 3634
-1829 y(>) 3634 1849 y(>) 3634 1870 y(>) 3634 1891 y(>) 3634
-1911 y(>) 3634 1932 y(>) 3634 1953 y(>) 3634 1973 y(>) 3634
-1994 y(>) 3634 2015 y(>) 3634 2035 y(>) 3634 2056 y(>) 3634
-2077 y(>) 3634 2097 y(>) 3634 2118 y(>) 3634 2139 y(>) 3634
-2159 y(>) 3634 2180 y(>) 3634 2201 y(>) 3634 2221 y(>) 3634
-2242 y(>) 3634 2263 y(>) 3634 2283 y(>) 3634 2304 y(>) 3634
-2325 y(>) 3634 2345 y(>) 3634 2366 y(>) 3634 2387 y(>) 3634
-2407 y(>) 3634 2428 y(>) 3634 2448 y(>) 3634 2469 y(>) 3634
-2490 y(>) 3634 2510 y(>) 3634 2531 y(>) 3634 2552 y(>) 3634
-2572 y(>) 3634 2593 y(>) 3634 2614 y(>) 3634 2634 y(>) 3634
-2655 y(>) 3634 2676 y(>) 3634 2696 y(>) 3634 2717 y(>) 3634
-2738 y(>) 3634 2758 y(>) 3634 2779 y(>) 3634 2800 y(>) 3634
-2820 y(>) 3634 2841 y(>) 3634 2862 y(>) 3634 2882 y(>) 3634
-2903 y(>) 3634 2924 y(>) 3634 2944 y(>) 3634 2965 y(>) 3634
-2986 y(>) 3634 3006 y(>) 3634 3027 y(>) 3634 3048 y(>) 3634
-3068 y(>) 3634 3089 y(>) 3634 3110 y(>) 3634 3130 y(>) 3634
-3151 y(>) 3634 3172 y(>) 3634 3192 y(>) 3634 3213 y(>) 3634
-3234 y(>) 3634 3254 y(>) 3634 3275 y(>) 3634 3296 y(>) 3634
-3316 y(>) 3634 3337 y(>) 3634 3358 y(>) 3634 3378 y(>) 3634
-3399 y(>) 3634 3420 y(>) 3634 3440 y(;) p Fb 3725 1812
-a(De\014nition) p Black Fd 0 3610 a(</theory>) p Black
-Black 90 rotate dyy eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/helm/mowgli/home/misc/kick-off/KM2002GO_mathweb.ps b/helm/mowgli/home/misc/kick-off/KM2002GO_mathweb.ps
deleted file mode 100644 (file)
index 5c84872..0000000
+++ /dev/null
@@ -1,506 +0,0 @@
-%!PS-Adobe-2.0
-%%Title: KM2002GO_mathweb.ps
-%%Creator: fig2dev Version 3.2 Patchlevel 3c
-%%CreationDate: Wed Apr  3 03:01:28 2002
-%%For: moschm@king (Markus Moschner)
-%%Orientation: Landscape
-%%Pages: 1
-%%BoundingBox: 0 0 595 842
-%%BeginSetup
-%%IncludeFeature: *PageSize A4
-%%EndSetup
-%%Magnification: 0.9200
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-/col32 {0.000 0.000 1.000 srgb} bind def
-/col33 {0.000 0.000 0.000 srgb} bind def
-/col34 {0.000 0.000 0.000 srgb} bind def
-/col35 {1.000 0.984 0.475 srgb} bind def
-/col36 {0.937 1.000 0.000 srgb} bind def
-/col37 {0.188 0.396 1.000 srgb} bind def
-/col38 {1.000 0.286 0.286 srgb} bind def
-/col39 {0.000 0.000 1.000 srgb} bind def
-/col40 {1.000 0.984 0.475 srgb} bind def
-/col41 {0.937 1.000 0.000 srgb} bind def
-/col42 {0.188 0.396 1.000 srgb} bind def
-/col43 {1.000 0.286 0.286 srgb} bind def
-/col44 {0.000 0.000 1.000 srgb} bind def
-/col45 {1.000 0.984 0.475 srgb} bind def
-/col46 {0.937 1.000 0.000 srgb} bind def
-/col47 {0.188 0.396 1.000 srgb} bind def
-/col48 {1.000 0.286 0.286 srgb} bind def
-/col49 {0.000 0.000 1.000 srgb} bind def
-/col50 {1.000 0.984 0.475 srgb} bind def
-/col51 {0.937 1.000 0.000 srgb} bind def
-/col52 {0.188 0.396 1.000 srgb} bind def
-/col53 {1.000 0.286 0.286 srgb} bind def
-/col54 {0.000 0.000 1.000 srgb} bind def
-/col55 {1.000 0.984 0.475 srgb} bind def
-/col56 {0.937 1.000 0.000 srgb} bind def
-/col57 {0.188 0.396 1.000 srgb} bind def
-/col58 {1.000 0.286 0.286 srgb} bind def
-/col59 {0.000 0.000 1.000 srgb} bind def
-/col60 {1.000 0.984 0.475 srgb} bind def
-/col61 {0.937 1.000 0.000 srgb} bind def
-/col62 {0.188 0.396 1.000 srgb} bind def
-/col63 {1.000 0.286 0.286 srgb} bind def
-/col64 {0.000 0.000 1.000 srgb} bind def
-/col65 {1.000 0.984 0.475 srgb} bind def
-/col66 {0.937 1.000 0.000 srgb} bind def
-/col67 {0.188 0.396 1.000 srgb} bind def
-/col68 {1.000 0.286 0.286 srgb} bind def
-/col69 {0.000 0.000 1.000 srgb} bind def
-/col70 {1.000 0.984 0.475 srgb} bind def
-/col71 {0.937 1.000 0.000 srgb} bind def
-/col72 {0.188 0.396 1.000 srgb} bind def
-/col73 {1.000 0.286 0.286 srgb} bind def
-/col74 {0.000 0.000 1.000 srgb} bind def
-/col75 {1.000 0.984 0.475 srgb} bind def
-/col76 {0.937 1.000 0.000 srgb} bind def
-/col77 {0.188 0.396 1.000 srgb} bind def
-/col78 {1.000 0.286 0.286 srgb} bind def
-/col79 {0.000 0.000 1.000 srgb} bind def
-/col80 {1.000 0.984 0.475 srgb} bind def
-/col81 {0.937 1.000 0.000 srgb} bind def
-/col82 {0.188 0.396 1.000 srgb} bind def
-/col83 {1.000 0.286 0.286 srgb} bind def
-/col84 {0.000 0.000 1.000 srgb} bind def
-/col85 {1.000 0.984 0.475 srgb} bind def
-/col86 {0.937 1.000 0.000 srgb} bind def
-/col87 {0.188 0.396 1.000 srgb} bind def
-/col88 {1.000 0.286 0.286 srgb} bind def
-/col89 {0.000 0.000 1.000 srgb} bind def
-/col90 {1.000 0.984 0.475 srgb} bind def
-/col91 {0.937 1.000 0.000 srgb} bind def
-/col92 {0.188 0.396 1.000 srgb} bind def
-/col93 {1.000 0.286 0.286 srgb} bind def
-
-end
-save
-newpath 0 842 moveto 0 0 lineto 595 0 lineto 595 842 lineto closepath clip newpath
-18.5 51.0 translate
- 90 rotate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Helvetica-Bold /Helvetica-Bold-iso isovec ReEncode
-/Helvetica-Narrow-Bold /Helvetica-Narrow-Bold-iso isovec ReEncode
-/Helvetica-Narrow /Helvetica-Narrow-iso isovec ReEncode
-/Times-Bold /Times-Bold-iso isovec ReEncode
-/Times-Roman /Times-Roman-iso isovec ReEncode
- /DrawEllipse {
-       /endangle exch def
-       /startangle exch def
-       /yrad exch def
-       /xrad exch def
-       /y exch def
-       /x exch def
-       /savematrix mtrx currentmatrix def
-       x y tr xrad yrad sc 0 0 1 startangle endangle arc
-       closepath
-       savematrix setmatrix
-       } def
-
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-%%Page: 1 1
-10 setmiterlimit
- 0.05795 0.05795 sc
-%%Page: 1 1
-%
-% Fig objects follow
-%
-% Polyline
-15.000 slw
-gs  clippath
-8373 6383 m 8432 6401 l 8480 6237 l 8416 6347 l 8421 6220 l cp
-eoclip
-n 8407 6378 m
- 8870 4811 l gs col0 s gr gr
-
-% arrowhead
-n 8421 6220 m 8416 6347 l 8480 6237 l 8421 6220 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-4886 4227 m 4886 4288 l 5056 4288 l 4933 4258 l 5056 4227 l cp
-8329 4288 m 8329 4227 l 8159 4227 l 8282 4258 l 8159 4288 l cp
-eoclip
-n 8314 4258 m
- 4901 4258 l gs col0 s gr gr
-
-% arrowhead
-n 8159 4288 m 8282 4258 l 8159 4227 l 8159 4288 l  cp gs 0.00 setgray ef gr  col0 s
-% arrowhead
-n 5056 4227 m 4933 4258 l 5056 4288 l 5056 4227 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-30.000 slw
- [45] 0 sd
-n 6927 7861 m
- 7670 7300 l gs col0 s gr  [] 0 sd
-% Polyline
-15.000 slw
-gs  clippath
-6770 2849 m 6712 2870 l 6770 3030 l 6758 2904 l 6828 3009 l cp
-8015 6495 m 8073 6474 l 8015 6314 l 8028 6441 l 7957 6335 l cp
-eoclip
-n 8039 6471 m
- 6747 2874 l gs col0 s gr gr
-
-% arrowhead
-n 7957 6335 m 8028 6441 l 8015 6314 l 7957 6335 l  cp gs 0.00 setgray ef gr  col0 s
-% arrowhead
-n 6828 3009 m 6758 2904 l 6770 3030 l 6828 3009 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-6130 2612 m 6093 2563 l 5957 2667 l 6074 2617 l 5995 2716 l cp
-4503 3781 m 4540 3830 l 4676 3726 l 4560 3777 l 4638 3677 l cp
-eoclip
-n 4534 3797 m
- 6100 2597 l gs col0 s gr gr
-
-% arrowhead
-n 4638 3677 m 4560 3777 l 4676 3726 l 4638 3677 l  cp gs 0.00 setgray ef gr  col0 s
-% arrowhead
-n 5995 2716 m 6074 2617 l 5957 2667 l 5995 2716 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-8582 3829 m 8623 3784 l 8498 3668 l 8568 3775 l 8456 3713 l cp
-7309 2564 m 7268 2609 l 7393 2725 l 7324 2619 l 7435 2680 l cp
-eoclip
-n 7300 2597 m
- 8592 3797 l gs col0 s gr gr
-
-% arrowhead
-n 7435 2680 m 7324 2619 l 7393 2725 l 7435 2680 l  cp gs 0.00 setgray ef gr  col0 s
-% arrowhead
-n 8456 3713 m 8568 3775 l 8498 3668 l 8456 3713 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-7664 6689 m 7699 6639 l 7559 6542 l 7643 6638 l 7524 6593 l cp
-4721 4592 m 4686 4642 l 4826 4739 l 4743 4644 l 4861 4688 l cp
-eoclip
-n 4716 4626 m
- 7670 6656 l gs col0 s gr gr
-
-% arrowhead
-n 4861 4688 m 4743 4644 l 4826 4739 l 4861 4688 l  cp gs 0.00 setgray ef gr  col0 s
-% arrowhead
-n 7524 6593 m 7643 6638 l 7559 6542 l 7524 6593 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
- [60] 0 sd
-gs  clippath
-2671 2365 m 2672 2458 l 2887 2457 l 2703 2412 l 2887 2364 l cp
-eoclip
-n 2687 2412 m
- 5916 2400 l gs col0 s gr gr
- [] 0 sd
-% arrowhead
-7.500 slw
-n 2887 2364 m 2703 2412 l 2887 2457 l 2887 2364 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
- [60] 0 sd
-gs  clippath
-6024 2089 m 6024 1996 l 5808 1996 l 5993 2043 l 5808 2089 l cp
-eoclip
-n 2687 2043 m
- 6009 2043 l gs col0 s gr gr
- [] 0 sd
-% arrowhead
-7.500 slw
-n 5808 2089 m 5993 2043 l 5808 1996 l 5808 2089 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-30.000 slw
- [45] 0 sd
-n 2880 5165 m
- 3623 4604 l gs col0 s gr  [] 0 sd
-% Polyline
- [45] 0 sd
-n 9054 6930 m
- 10253 6930 l gs col0 s gr  [] 0 sd
-% Polyline
- [90] 0 sd
-n 10170 3780 m
- 9630 3960 l gs col0 s gr  [] 0 sd
-% Polyline
- [90] 0 sd
-gs  clippath
-4455 7304 m 4284 7247 l 4179 7562 l 4350 7335 l 4349 7619 l cp
-eoclip
-n 4320 4815 m 4320 7425 l
- 4365 7290 l gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 4349 7619 m 4350 7335 l 4179 7562 l 4236 7676 l 4349 7619 l 
- cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-45.000 slw
-gs  clippath
-11356 3729 m 11237 3711 l 11200 3956 l 11285 3803 l 11319 3975 l cp
-eoclip
-n 11295 3735 m
- 11205 4320 l gs col0 s gr gr
-
-% arrowhead
-n 11319 3975 m 11285 3803 l 11200 3956 l 11319 3975 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-75.000 slw
-n 10584 4410 m 10389 4410 10389 5635 195 arcto 4 {pop} repeat
-  10389 5830 12045 5830 195 arcto 4 {pop} repeat
-  12240 5830 12240 4605 195 arcto 4 {pop} repeat
-  12240 4410 10584 4410 195 arcto 4 {pop} repeat
- cp gs col18 s gr 
-% Polyline
-45.000 slw
-gs  clippath
-1411 2964 m 1292 2946 l 1255 3191 l 1340 3038 l 1374 3210 l cp
-eoclip
-n 1350 2970 m
- 1260 3555 l gs col0 s gr gr
-
-% arrowhead
-n 1374 3210 m 1340 3038 l 1255 3191 l 1374 3210 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-75.000 slw
-n 684 3627 m 519 3627 519 4634 165 arcto 4 {pop} repeat
-  519 4799 1881 4799 165 arcto 4 {pop} repeat
-  2046 4799 2046 3792 165 arcto 4 {pop} repeat
-  2046 3627 684 3627 165 arcto 4 {pop} repeat
- cp gs col18 s gr 
-/Times-Bold-iso ff 480.00 scf sf
-4005 720 m
-gs 1 -1 sc (MBase  within  MathWeb) col0 sh gr
-/Times-Roman-iso ff 270.00 scf sf
-9810 9135 m
-gs 1 -1 sc (MS = Metaservice) col0 sh gr
-/Times-Roman-iso ff 270.00 scf sf
-10603 5271 m
-gs 1 -1 sc (Knowledge) col20 sh gr
-/Times-Roman-iso ff 270.00 scf sf
-10603 4832 m
-gs 1 -1 sc (Distribution) col20 sh gr
-/Times-Roman-iso ff 270.00 scf sf
-10620 5580 m
-gs 1 -1 sc (Management) col20 sh gr
-/Times-Roman-iso ff 270.00 scf sf
-658 4067 m
-gs 1 -1 sc (Metadata) col20 sh gr
-/Times-Roman-iso ff 270.00 scf sf
-658 4506 m
-gs 1 -1 sc (Education) col20 sh gr
-% Polyline
-15.000 slw
-n 11581 6390 m 9810 6390 l 9810 7740 l 11581 7740 l
- cp gs col31 0.70 tnt ef gr gs col0 s gr 
-% Polyline
-n 7920 7875 m 6149 7875 l 6149 9225 l 7920 9225 l
- cp gs col31 0.70 tnt ef gr gs col0 s gr 
-% Polyline
-n 3735 5175 m 1964 5175 l 1964 6525 l 3735 6525 l
- cp gs col12 0.70 tnt ef gr gs col0 s gr 
-% Polyline
-n 3825 7425 m 3555 7425 3555 8726 270 arcto 4 {pop} repeat
-  3555 8996 4856 8996 270 arcto 4 {pop} repeat
-  5126 8996 5126 7695 270 arcto 4 {pop} repeat
-  5126 7425 3825 7425 270 arcto 4 {pop} repeat
- cp gs col11 0.70 tnt ef gr gs col0 s gr 
-% Polyline
-n 1386 1395 m 1116 1395 1116 2696 270 arcto 4 {pop} repeat
-  1116 2966 2417 2966 270 arcto 4 {pop} repeat
-  2687 2966 2687 1665 270 arcto 4 {pop} repeat
-  2687 1395 1386 1395 270 arcto 4 {pop} repeat
- cp gs col46 0.70 tnt ef gr gs col0 s gr 
-% Polyline
-n 11970 2430 m 10199 2430 l 10199 3780 l 11970 3780 l
- cp gs col46 0.70 tnt ef gr gs col0 s gr 
-% Ellipse
-n 6615 2250 738 554 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
-
-% Ellipse
-n 4215 4272 738 554 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
-
-% Ellipse
-n 9044 4272 738 554 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
-
-% Ellipse
-n 8314 6931 738 554 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
-
-/Helvetica-Bold-iso ff 270.00 scf sf
-5271 4166 m
-gs 1 -1 sc (forward request) col0 sh gr
-/Helvetica-Bold-iso ff 270.00 scf sf
-4163 4349 m
-gs 1 -1 sc (Broker) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Bold-iso ff 270.00 scf sf
-9054 4349 m
-gs 1 -1 sc (Broker) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Bold-iso ff 270.00 scf sf
-3517 2690 m
-gs 1 -1 sc (accept/deny) col0 sh gr
-/Helvetica-Bold-iso ff 270.00 scf sf
-3794 1859 m
-gs 1 -1 sc (request) col0 sh gr
-/Helvetica-Bold-iso ff 270.00 scf sf
-8314 7024 m
-gs 1 -1 sc (Broker) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Bold-iso ff 270.00 scf sf
-5271 4811 m
-gs 1 -1 sc  325.0 rot (\(un-\)register) col0 sh gr
-/Helvetica-Bold-iso ff 255.00 scf sf
-6615 2025 m
-gs 1 -1 sc (Broker) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Narrow-Bold-iso ff 255.00 scf sf
-6615 2340 m
-gs 1 -1 sc (Mosh) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Narrow-Bold-iso ff 255.00 scf sf
-6615 2655 m
-gs 1 -1 sc (\(Oz\)) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Narrow-iso ff 270.00 scf sf
-6975 8415 m
-gs 1 -1 sc (TPS) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Narrow-iso ff 270.00 scf sf
-11070 3150 m
-gs 1 -1 sc (MBase) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Symbol ff 330.00 scf sf
-2362 5673 m
-gs 1 -1 sc (W) col-1 sh gr
-/Helvetica-Narrow-iso ff 270.00 scf sf
-2598 5673 m
-gs 1 -1 sc (mega) col-1 sh gr
-/Symbol ff 330.00 scf sf
-10199 6929 m
-gs 1 -1 sc (W) col-1 sh gr
-/Helvetica-Narrow-iso ff 270.00 scf sf
-10476 6929 m
-gs 1 -1 sc (mega) col-1 sh gr
-/Helvetica-Narrow-iso ff 270.00 scf sf
-10530 7425 m
-gs 1 -1 sc (MS) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Narrow-iso ff 270.00 scf sf
-2745 6165 m
-gs 1 -1 sc (Client) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Narrow-iso ff 270.00 scf sf
-4095 8190 m
-gs 1 -1 sc (CAS) col0 sh gr
-/Helvetica-Narrow-iso ff 270.00 scf sf
-7020 8820 m
-gs 1 -1 sc (MS) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Narrow-iso ff 270.00 scf sf
-1890 1755 m
-gs 1 -1 sc (Active) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Narrow-iso ff 270.00 scf sf
-1890 2115 m
-gs 1 -1 sc (math) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Narrow-iso ff 270.00 scf sf
-1890 2430 m
-gs 1 -1 sc (Client) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Helvetica-Narrow-iso ff 270.00 scf sf
-1890 2790 m
-gs 1 -1 sc (\(XMLRPC\)) dup sw pop 2 div neg 0 rm  col0 sh gr
-$F2psEnd
-rs
-showpage
diff --git a/helm/mowgli/home/misc/kick-off/MoWGLI-LogiCal.ps b/helm/mowgli/home/misc/kick-off/MoWGLI-LogiCal.ps
deleted file mode 100644 (file)
index d6244b7..0000000
+++ /dev/null
@@ -1,1919 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
-%%Title: expose-berlin.dvi
-%%Pages: 13
-%%PageOrder: Ascend
-%%Orientation: Landscape
-%%BoundingBox: 0 0 596 842
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips expose-berlin.dvi -o
-%DVIPSParameters: dpi=600, compressed
-%DVIPSSource:  TeX output 2002.03.21:1951
-%%BeginProcSet: texc.pro
-%!
-/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/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/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]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
-forall N/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: pstricks.pro
-%!
-% PostScript prologue for pstricks.tex.
-% Version 97 patch 3, 98/06/01
-% For distribution, see pstricks.tex.
-%
-/tx@Dict 200 dict def tx@Dict begin
-/ADict 25 dict def
-/CM { matrix currentmatrix } bind def
-/SLW /setlinewidth load def
-/CLW /currentlinewidth load def
-/CP /currentpoint load def
-/ED { exch def } bind def
-/L /lineto load def
-/T /translate load def
-/TMatrix { } def
-/RAngle { 0 } def
-/Atan { /atan load stopped { pop pop 0 } if } def
-/Div { dup 0 eq { pop } { div } ifelse } def
-/NET { neg exch neg exch T } def
-/Pyth { dup mul exch dup mul add sqrt } def
-/PtoC { 2 copy cos mul 3 1 roll sin mul } def
-/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def }
-def
-/PathLength { flattenpath /z 0 def { /y1 ED /x1 ED /y2 y1 def /x2 x1 def
-} { /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ }
-/pathforall load stopped { pop pop pop pop } if z } def
-/STP { .996264 dup scale } def
-/STV { SDict begin normalscale end STP  } def
-/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
-PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
-mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
-/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
-0 } ifelse setdash stroke } def
-/DotLine { /b PathLength def /a ED /z ED /y CLW def /z y z add def a 0 gt
-{ /b b a div def } { a 0 eq { /b b y sub def } { a -3 eq { /b b y add
-def } if } ifelse } ifelse [ 0 b b z Div round Div dup 0 le { pop 1 } if
-] a 0 gt { 0 } { y 2 div a -2 gt { neg } if } ifelse setdash 1
-setlinecap stroke } def
-/LineFill { gsave abs CLW add /a ED a 0 dtransform round exch round exch
-2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
-% DG/SR modification begin - Dec. 12, 1997 - Patch 2
-%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
-itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
-% DG/SR modification end
-Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
-/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
-% DG/SR modification begin - Jun.  1, 1998 - Patch 3 (from Michael Vulis)
-% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
-% def
-a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
-pop pop } def
-% DG/SR modification end
-/BeginArrow { ADict begin /@mtrx CM def gsave 2 copy T 2 index sub neg
-exch 3 index sub exch Atan rotate newpath } def
-/EndArrow { @mtrx setmatrix CP grestore end } def
-/Arrow { CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1
-scale } if w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill
-grestore } def
-/Tbar { CLW mul add /z ED z -2 div CLW 2 div moveto z 0 rlineto stroke 0
-CLW moveto } def
-/Bracket { CLW mul add dup CLW sub 2 div /x ED mul CLW add /y ED /z CLW 2
-div def x neg y moveto x neg CLW 2 div L x CLW 2 div L x y L stroke 0
-CLW moveto } def
-/RoundBracket { CLW mul add dup 2 div /x ED mul /y ED /mtrx CM def 0 CLW
-2 div T x y mul 0 ne { x y scale } if 1 1 moveto .85 .5 .35 0 0 0
-curveto -.35 0 -.85 .5 -1 1 curveto mtrx setmatrix stroke 0 CLW moveto }
-def
-/SD { 0 360 arc fill } def
-/EndDot { { /z DS def } { /z 0 def } ifelse /b ED 0 z DS SD b { 0 z DS
-CLW sub SD } if 0 DS z add CLW 4 div sub moveto } def
-/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
-/closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
-load } if ] cvx newpath 3 1 roll T exec } def
-/NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch
-cvi def } def
-/NArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if
-f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def
-/Line { NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub
-def n { Lineto } repeat CP 4 2 roll ArrowB L pop pop } if } def
-/Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 }
-ifelse { pop } repeat a } def
-/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
-and { pop pop /n n 1 sub def } if } def
-/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
-repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
-ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
-moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
-Lineto pop pop closepath } ifelse } def
-/Diamond { /mtrx CM def T rotate /h ED /w ED dup 0 eq { pop } { CLW mul
-neg /d ED /a w h Atan def /h d a sin Div h add def /w d a cos Div w add
-def } ifelse mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2
-div /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
-setmatrix } def
-% DG modification begin - Jan. 15, 1997
-%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
-%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
-%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
-%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
-%setmatrix } def
-/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
-CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
-div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
-d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
-% DG/SR modification begin - Jun.  1, 1998 - Patch 3 (from Michael Vulis)
-% setmatrix } def
-setmatrix pop } def
-% DG/SR modification end
-/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
-def } def
-/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
-def } def
-/CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1
-def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp
-mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos
-abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def
-/y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul
-m mul neg def } def
-/IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if }
-ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def }
-def
-/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
-/NC { CC x1 y1 x2 y2 x y curveto } def
-/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
-/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
-/NAC { x2 y2 x y curveto CC x1 y1 } def
-/EAC { x2 y2 x y ArrowB curveto pop pop } def
-/OpenCurve { NArray n 3 lt { n { pop pop } repeat } { BOC /n n 3 sub def
-n { NC } repeat EOC } ifelse } def
-/AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload
-/Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop
-pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def
-/ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt {
-CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC }
-repeat closepath pop pop } ifelse } def
-/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
-/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
-/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
-def
-/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
-rotate matrix concatmatrix exch findfont exch makefont setfont } def
-/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
-x1 y1 lineto closepath } def
-/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
-y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
-exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
-/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
-x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
-ifelse } def
-/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
-/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
-pop pop Rect } { OvalFrame } ifelse } def
-/BezierNArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop
-} if n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat f { ]
-aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def
-/OpenBezier { BezierNArray n 1 eq { pop pop } { ArrowA n 4 sub 3 idiv { 6
-2 roll 4 2 roll curveto } repeat 6 2 roll 4 2 roll ArrowB curveto }
-ifelse } def
-/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv {
-6 2 roll 4 2 roll curveto } repeat closepath } ifelse } def
-/BezierShowPoints { gsave Points aload length 2 div cvi /n ED moveto n 1
-sub { lineto } repeat CLW 2 div SLW [ 4 4 ] 0 setdash stroke grestore }
-def
-/Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1
-sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA
-x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0
-y0 x0 2 mul x1 sub y1 ] def } def
-/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 }
-if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if
-/dx ED dy div round dy mul /y0 ED dx div round dx mul /x0 ED dy div
-round cvi /y2 ED dx div round cvi /x2 ED dy div round cvi /y1 ED dx div
-round cvi /x1 ED /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def /w x2 x1 sub
-0 gt { 1 } { -1 } ifelse def b 0 gt { /z1 b 4 div CLW 2 div add def
-/Helvetica findfont b scalefont setfont /b b .95 mul CLW 2 div add def }
-if systemdict /setstrokeadjust known { true setstrokeadjust /t { } def }
-{ /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
-exch itransform } bind def } ifelse gsave n 0 gt { 1 setlinecap [ 0 dy n
-div ] dy n div 2 div setdash } { 2 setlinecap } ifelse /i x1 def /f y1
-dy mul n 0 gt { dy n div 2 div h mul sub } if def /g y2 dy mul n 0 gt {
-dy n div 2 div h mul add } if def x2 x1 sub w mul 1 add dup 1000 gt {
-pop 1000 } if { i dx mul dup y0 moveto b 0 gt { gsave c i a cvs dup
-stringwidth pop /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse h 0 gt {b neg}
-{z1} ifelse rmoveto show grestore } if dup t f moveto g t L stroke /i i
-w add def } repeat grestore gsave n 0 gt
-% DG/SR modification begin - Nov. 7, 1997 - Patch 1
-%{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
-{ 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
-% DG/SR modification end
-{ 2 setlinecap } ifelse /i y1 def /f x1 dx mul
-n 0 gt { dx n div 2 div w mul sub } if def /g x2 dx mul n 0 gt { dx n
-div 2 div w mul add } if def y2 y1 sub h mul 1 add dup 1000 gt { pop
-1000 } if { newpath i dy mul dup x0 exch moveto b 0 gt { gsave c i a cvs
-dup stringwidth pop /z2 ED w 0 gt {z1 z2 add neg} {z1} ifelse h 0 gt
-{z1} {b neg} ifelse rmoveto show grestore } if dup f exch t moveto g
-exch t L stroke /i i h add def } repeat grestore } def
-/ArcArrow { /d ED /b ED /a ED gsave newpath 0 -1000 moveto clip newpath 0
-1 0 0 b grestore c mul /e ED pop pop pop r a e d PtoC y add exch x add
-exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
-mul neg d } def
-/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
-/Rot { CP CP translate 3 -1 roll neg rotate NET  } def
-/RotBegin { tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 }
-def } if /TMatrix [ TMatrix CM ] cvx def /a ED a Rot /RAngle [ RAngle
-dup a add ] cvx def } def
-/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ]
-cvx def } def
-/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
-/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
-/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
-/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
-abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
-div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
-h1 abs h sub dup s mul abs } ifelse } def
-/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
-mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
-{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
-exch } def
-/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
-/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
-} if } ifelse } def
-/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
-/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
-neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
-/IfVisible true def } def
-end
-% END pstricks.pro
-
-%%EndProcSet
-%%BeginProcSet: pst-dots.pro
-%!PS-Adobe-2.0
-%%Title: Dot Font for PSTricks 97 - Version 97, 93/05/07.
-%%Creator: Timothy Van Zandt <tvz@Princeton.EDU>
-%%Creation Date: May 7, 1993
-10 dict dup begin
-  /FontType 3 def
-  /FontMatrix [ .001 0 0 .001 0 0 ] def
-  /FontBBox [ 0 0 0 0 ] def
-  /Encoding 256 array def
-  0 1 255 { Encoding exch /.notdef put } for
-  Encoding
-    dup (b) 0 get /Bullet put
-    dup (c) 0 get /Circle put
-    dup (C) 0 get /BoldCircle put
-    dup (u) 0 get /SolidTriangle put
-    dup (t) 0 get /Triangle put
-    dup (T) 0 get /BoldTriangle put
-    dup (r) 0 get /SolidSquare put
-    dup (s) 0 get /Square put
-    dup (S) 0 get /BoldSquare put
-    dup (q) 0 get /SolidPentagon put
-    dup (p) 0 get /Pentagon put
-    (P) 0 get /BoldPentagon put
-  /Metrics 13 dict def
-  Metrics begin
-    /Bullet 1000 def
-    /Circle 1000 def
-    /BoldCircle 1000 def
-    /SolidTriangle 1344 def
-    /Triangle 1344 def
-    /BoldTriangle 1344 def
-    /SolidSquare 886 def
-    /Square 886 def
-    /BoldSquare 886 def
-    /SolidPentagon 1093.2 def
-    /Pentagon 1093.2 def
-    /BoldPentagon 1093.2 def
-    /.notdef 0 def
-  end
-  /BBoxes 13 dict def
-  BBoxes begin
-    /Circle { -550 -550 550 550 } def
-    /BoldCircle /Circle load def
-    /Bullet /Circle load def
-    /Triangle { -571.5 -330 571.5 660 } def
-    /BoldTriangle /Triangle load def
-    /SolidTriangle /Triangle load def
-    /Square { -450 -450 450 450 } def
-    /BoldSquare /Square load def
-    /SolidSquare /Square load def
-    /Pentagon { -546.6 -465 546.6 574.7 } def
-    /BoldPentagon /Pentagon load def
-    /SolidPentagon /Pentagon load def
-    /.notdef { 0 0 0 0 } def
-  end
-  /CharProcs 20 dict def
-  CharProcs begin
-    /Adjust {
-      2 copy dtransform floor .5 add exch floor .5 add exch idtransform
-      3 -1 roll div 3 1 roll exch div exch scale
-    } def
-    /CirclePath { 0 0 500 0 360 arc closepath } def
-    /Bullet { 500 500 Adjust CirclePath fill } def
-    /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath eofill } def
-    /BoldCircle { 500 500 Adjust CirclePath .8 .8 scale CirclePath eofill } def
-    /BoldCircle { CirclePath .8 .8 scale CirclePath eofill } def
-    /TrianglePath {
-      0  660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath
-    } def
-    /SolidTriangle { TrianglePath fill } def
-    /Triangle { TrianglePath .85 .85 scale TrianglePath eofill } def
-    /BoldTriangle { TrianglePath .7 .7 scale TrianglePath eofill } def
-    /SquarePath {
-      -450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto
-      closepath
-    } def
-    /SolidSquare { SquarePath fill } def
-    /Square { SquarePath .89 .89 scale SquarePath eofill } def
-    /BoldSquare { SquarePath .78 .78 scale SquarePath eofill } def
-    /PentagonPath {
-      -337.8 -465   moveto
-       337.8 -465   lineto
-       546.6  177.6 lineto
-         0    574.7 lineto
-      -546.6  177.6 lineto
-      closepath
-    } def
-    /SolidPentagon { PentagonPath fill } def
-    /Pentagon { PentagonPath .89 .89 scale PentagonPath eofill } def
-    /BoldPentagon { PentagonPath .78 .78 scale PentagonPath eofill } def
-    /.notdef { } def
-  end
-  /BuildGlyph {
-    exch
-    begin
-      Metrics 1 index get exec 0
-      BBoxes 3 index get exec
-      setcachedevice
-      CharProcs begin load exec end
-    end
-  } def
-  /BuildChar {
-    1 index /Encoding get exch get
-    1 index /BuildGlyph get exec
-  } bind def
-end
-/PSTricksDotFont exch definefont pop
-% END pst-dots.pro
-
-%%EndProcSet
-%%BeginProcSet: special.pro
-%!
-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/copypage{}N/p 3 def @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/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
-TeXDict begin 55380996 39158280 2074 600 600 (expose-berlin.dvi)
-@start
-%DVIPSBitmapFont: Fa cmsy10 22.7103 5
-/Fa 5 95 df<003FC112F04820F8C212FCA46C20F86C20F0D5FCB3AC003FC112F04820F8
-C212FCA46C20F86C20F0D5FCB3AC003FC112F04820F8C212FCA46C20F86C20F07E5476D8
-93>17 D<1F0FF73F80F7FFC01E031E0F1E3F9BB512800B0714000B1F13FC0B7F13F052B5
-12C00A0791C7FC0A1F13FC0A7F13F051B51280090749C8FC091F13F8097F13E050B51280
-080749C9FC083F13F897B512E007031480070F49CAFC073F13F896B512E006031480060F
-01FCCBFC063F13F095B512C0050391CCFC050F13FC057F13F04CB512C0040791CDFC041F
-13FC047F13F04BB512C0030791CEFC031F13F8037F13E04AB51280020749CFFC021F13F8
-027F13E00103B51280010F49D0FC013F13F890B512E000031480000F49D1FC003F13F848
-13C0B5D2FC13FCA213FF6C13C06C13F8000F13FE00036D7EC614E0013F13F8010F13FE01
-036D7ED9007F13E0021F13F8020713FE02016D7E6E6C13E0031F13F8030713FF030114C0
-6F6C13F0041F13FC040713FF040114C0706C13F0050F13FC050313FF050014C0063F13F0
-060F13FC0603EBFF80060014E0073F13F8070F13FE07036D7E070014E0083F13F8080713
-FE08016D7E746C13E0091F13F8090713FE09016D7E756C13F00A1F13FC0A0713FF0A0114
-C0766C13F00B1F13FC0B0713FF0B0014800C3F13C01E0F1E031E00F73F80F70F009CC7FC
-B3AC003FC0FC481F80C112C0A46C1F806C1F00729470F793>20 D<217F698EA2217FA28E
-A3213F8EA2211F8EA27B7EA27B7EA27B7EA28E8D7B7F8F227F8F7C7E7C7E8F220F7C7E7C
-7EA17E7C7F7C7F7D7EFB3FFC7D7E7D7E7D13C07D7F7D13F8A038007FFEA1383FFF80003F
-C5B412E048A113F8C5B512FEA114FFA2A114FE6CA113F86CA113E0D7003F1380A1387FFE
-00A03801FFF85913E0595B5990C7FC595A595AFB7FF0595A585B585BA1C8FC585A585A22
-1F6B585A585A6B22FF6B5790C9FC696AA2575AA2575AA2575AA26A213FA26A217FA36AA2
-21FFA29FCAFC8DA86276DFBD>33 D[<003C1D3C007E1D7EB41DFFA36D63007F1DFE6D1B
-03A2003F1DFC6D1B07001F1DF8A26D1B0F000F1DF06D1B1FA200071DE06D1B3F00031DC0
-A26D1B7F00011D806D1BFFA26C1D006E61017F636E1903A2013F636E1907011F63A26E19
-0F010F636E191FA20107636E193F010363A26E197F0101636E19FFA26D90BBC7FCA26E61
-A36E61A3DA1FE0CAEA07F86F170F020F61A26F171F0207616F173FA20203616F177F0201
-61A26F17FF6E96C8FC705DA2037F5F701503033F5F701507A2031F5F70150F030F5FA270
-151F03075F70153FA203035F70157F03015FA27015FF6F94C9FC715BA2047F5D71130304
-3F5DA2711307041F5D71130FA2040F5D71131F04075DA271133F04035D71137FA204015D
-7113FF7092CAFC1881A2057F5B18C3053F5BA218E7051F5B18FFA2715BA2715BA3715BA3
-715BA27190CBFCA3187E183C>104 135 128 258 105 56 D<183E187FA24E7EA24D7FA3
-4D7FA24D7FA24D7FA294381FF7FCA218E3053F7F18C1057F7FA2DDFF807FA24C496C7EA2
-4D133F0403814D131F040781A24C486D7EA24C486D7EA24D1303043F814D1301047F81A2
-4C486D7FA24B90C86C7EA24C153F0303834C151F030783A24B486F7EA24B486F7EA24C15
-03033F834C1501037F83A24B486F7FA24A90CA6C7EA24B173F0203854B171F020785A24A
-48717EA24A48717EA24B1703023F854B1701027F85A24A48717FA24990CC6C7EA24A193F
-0103874A191F010787A24948737EA24948737EA24A1903013F874A1901017F87A2494873
-7FA24890CE6C7EA2491B3F000389491B1F000789A24848757EA24848757EA2491B03003F
-89491B01007F89A24848751380A290D0127FA2007EF53F00003C1D1E697576F07E>94
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fb cmmi10 22.7103 8
-/Fb 8 121 df<EA01F8EA07FE381FFF804813C04813E0A2B512F0A86C13E0A26C13C06C
-13803807FE00EA01F81414709334>58 D<1F0FF73F80F7FFC01E031E0F1E3F9BB512800B
-0714000B1F13FC0B7F13F052B512C00A0791C7FC0A1F13FC0A7F13F051B51280090749C8
-FC091F13F8097F13E050B51280080749C9FC083F13F897B512E007031480070F49CAFC07
-3F13F896B512E006031480060F01FCCBFC063F13F095B512C0050391CCFC050F13FC057F
-13F04CB512C0040791CDFC041F13FC047F13F04BB512C0030791CEFC031F13F8037F13E0
-4AB51280020749CFFC021F13F8027F13E00103B51280010F49D0FC013F13F890B512E000
-031480000F49D1FC003F13F84813C0B5D2FC13FCA213FF6C13C06C13F8000F13FE00036D
-7EC614E0013F13F8010F13FE01036D7ED9007F13E0021F13F8020713FE02016D7E6E6C13
-E0031F13F8030713FF030114C06F6C13F0041F13FC040713FF040114C0706C13F0050F13
-FC050313FF050014C0063F13F0060F13FC0603EBFF80060014E0073F13F8070F13FE0703
-6D7E070014E0083F13F8080713FE08016D7E746C13E0091F13F8090713FE09016D7E756C
-13F00A1F13FC0A0713FF0A0114C0766C13F00B1F13FC0B0713FF0B0014800C3F13C01E0F
-1E031E00F73F80F70F00726E70E593>60 D[<F501F0537E1D071D0FA21D1F8A1D3FA21D
-7F1DFFA264A26464A2527FA26464A264A21CFD1B011CF90903801CF1F307E11B0F1CC01B
-1F64515A631B7E1BFE5181505AA2505A08078063505AA2505A1A3F98C7FC50821A7E6219
-0150801903624F5A190F62071F83624FC8FC61077E8119FE614E5A18036118074F834E5A
-A24E5A063F8296C9FC187EA260170160050385604D5A170F4E824DBAFCA25F5FA294BB7E
-05FCCA12074C5A16034D8316075F4C5A161F5F163F94CB80167EA25E0301855E4B5AA24B
-5A150F5E031F875E4BCCFC5D03FE85A214014A5A1407140F021F89143F4A6C61D901FF50
-80010F6D6C180F90B600E0067F14F8003FDBFF804BB9FC48501880A2B8FCA2267FFE0191
-C96CDAE0071400>129 135 122 262 141 65 D[<93BC12E04B1BFF20F020FC20FF6F1D
-C0DC000702E0C800018005000280DB003F13F80D0F7F7290CA6C7F95B505017F22804F71
-14C08C4D7413E0A24F7213F0A24D1CF88C6122FC5FA261A25FA261A25F5613F861A25F56
-13F0615613E05F9DB512C096CCFC55148094B51B00555B4E60555B4C64555B4E4E5B555B
-4C97B5C7FC0C035B4E4D5B5413F04C073F5B9BB512804E040349C8FC0B0F13F84C067F13
-E00A07B5C9FC95B912F81E804C19FCF6FFC006C0C9000F13F00B0113FC4C726CB4FC787F
-4E7113E0787F4C737F787F95CB6C7F8C93B5848D4D737FA24B898B5F8D5DA25FA25DA25F
-A25DA25F675D695F9CB5FC4B65664D63664B9AC7FC6694CC5C6692B54F5B684C4F5B664A
-98B55A535C4C4E5C5391C8FC4A505B535B4C067F13F09AB55A4A07035C0A0F91C9FC4A49
-053F5B4A4EB512F849B56C041F14E0003FBE12804852CAFCBE12F01D800AFCCBFC6C98CC
-FC>134 129 120 256 143 I[<98260FFFE016380803B6167C083F03E015FC4FB700F814
-01070F04FEEC03F8077F7014074EB6D8001F01C0130F060702C001006D131F061F49C8D8
-3FF8EB3FF0067F01F0DB0FFC137F4DB50080DB03FE13FF050749C96C7E4D01F870018113
-E0053F01E0EF3F834D018018C74CB5CBEA1FEF4C01FC72B512C0040F49844C49844C13C0
-4C497214804BB5CCFC4B49854B5B4B497413004B5B4B5B4B498692B548634A91CEFC4A49
-1B1F5C4A49645E4A5B4A1D0F4A496491B55AA2495C4991CF5BA2495B5B4B655B5D5B4B65
-491E1F90B55AA269484A1C0F9DC8FC485CA25A92D3FCA25A5CA25A5CA25AA25CA25AA25C
-A4B5FC5CA65CA21F0F557EA29DC8FC67A31F7EA26C1E7C1FFCA2545AA2545A7E6E515A1E
-0F6C661E1F6E515A6C9BC9FC666C6D1BFE535A666C6D1A036C525A6E505A6C525A6E505A
-6D6D4FCAFC6D1BFE6D6DF003FC6F4E5A6D6D4E5A6D6D4E5A6D6DF07FC06D6D4D48CBFC6D
-6D4D5A023F01C0EE0FF86E6DEE3FF06E01F8923801FFC0020301FF030F5B6E02E0DA7FFE
-CCFC6E6C01FF90380FFFF8031F91B612E003071780030104FCCDFCDB003F15F0040392CE
-FCDC001F13E0>134 137 119 260 135 I<DAFF80ED0FFF010301F092B512F04901FC02
-0314FC011F6D021F14FF90273FC1FF8090263FF8077F49C66D9026FF80017F01FE6E4848
-C77F49017FD907F86E7E48489126F00FE0814D48143F48486E48488149013F017EC8121F
-00074C82EEFDF84848EB7FFF5F495D001F4C825F90C7FC4891B5C9FC5E123E4C4C5A007E
-5B5E127C5E00FC49187FA200784B5FC7FC4A18FFA24C5FA24A5FA24C5F625C6493C95AA2
-4A61625D64027F5FA24B95C8FC6214FF634B047F15781E7C494E4814FCA24B4D14F84F15
-015B5114F04B4B1503A2494F14E04F15075D51EB0FC05BF51F804B5FF53F00491B7EA292
-C96C5D525A491A03734A5A4A704A5A75485A746CB45A4A94261FFFFEC7FC4A715B6D4805
-0313F0D907C00500138066557BD271>110 D<DB0FF0ED0FFCDB3FFE92387FFF8092B56C
-0103B512E04A6E4914F8912703F83FF090391FF80FFE912707E01FF890393FC003FFDA0F
-C06D9026FF00017F021F010FD901FC6D7F03806D48486E7EDA3F00DA0FE0817148486E7E
-027E6D495A4EC86C7E027C15FE02FC4949824E150F4A4B821301604A4B178001034A5BA2
-4A92C9FCA201074A19C0A24A5CA2010F147FA26D485C90C86016FFA25FA24B4E1380A25F
-A24B60A24D1800A24B95B5FCA24D5FA24B5F655F634B61A294C9485BA24B61634C606303
-7F615190C7FC5E515A03FF601BFF64704B5B4A4D5B64704B5B5090C8FC4A4D5A714A5ADC
-EFC04A5A505A4AD9E7E0495BDCE3F0491380DCC1F84990C9FCDCC0FCEB1FFC4A91397F80
-FFF871B512E04C6C91CAFC050713FC4A020013C095CCFC93CEFCA25CA25DA2147FA25DA2
-14FFA25DA25BA25DA25BA25DA25BA25D5B497F017F13F8007FB7FCB8FCA4D9FC035B6278
-87D25F>112 D<DB03FFED03FF031F01F0021F13F0037F01FC4A13FC4AB56C91B6FC4A90
-2903FF8001FE01138091260FF000903BC007F8003FC0DA1FC090277FE00FE014E04A486D
-6C4848EBFFF0027EC7D81FF8495A4A93383F0007494891380FFC7E494804FE5B49486F48
-5B010F705A5C49486E5B49C8FC4D4915E0137E4F15C049731380983807FE0048484DEB01
-F898C8FC495D120396CAFC5B00075EA26C485ECAFC177FA260A217FFA260A25EA260A25E
-A260A25EA260A25EA24E153C1C3E4C177EA295C9127C1CFC5E64D801F81901D807FE5D48
-6C027F4C5A003F7F515A4803FF4C5AB5FC4B4D5A1B3F4B95C7FC1B7E91270007E7FF5DDB
-0FC74B5A49D91FC34B5A49D93F816D495AD87FF002006DEB1FC001C001FE4C5A003F4948
-90273FE001FFC8FC271FF80FF890391FFC0FFC0007B500E06DB55A6C4A010314E0C691C8
-1480D90FFCDB1FF8C9FC5C557AD26C>120 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fc cmtt8 12.444 45
-/Fc 45 122 df<EC03E0EC07F0141F143F147FECFFC0491380491300EB07FC495A495A49
-5A495A495A91C7FC5A485A5B12075B120F5B121F5BA2123F5BA2127F5BA412FF90C8FCAC
-7F127FA47F123FA27F121FA27F120F7F12077F12037F6C7E7E806D7E6D7E6D7E6D7E6D7E
-6DB4FC6D13806D13E0EC7FF0143F141F1407EC03E01C506FC737>40
-D<123C127EB47E7F6C7E6C7E6C7E6C7EEA03FE6C7E6C7F6D7E6D7E6D7E130F806D7E1303
-801301807F1580147FA215C0143FA215E0141FA415F0140FAC141F15E0A4143F15C0A214
-7F1580A214FF15005B5C13035C1307495A5C131F495A495A495A4890C7FC485AEA0FFC48
-5A485A485A485A5B007EC8FC123C1C5077C737>I<EC07804A7E4A7EB1003FB712F04816
-F8B812FCA46C16F86C16F0C7D81FE0C7FCB16E5A6E5A2E2E7CB637>43
-D<EA03F0EA07FC487E487E5A1480A214C0A37E7E7E7EEA003F1480137FA2EBFF005AEA07
-FEEA3FFC485A485A5B6C5A90C7FC123C121C6E8D37>I<003FB7FC481680B812C0A46C16
-806C16002A087AA337>I<EA0780EA1FE0EA3FF0EA7FF8A2EAFFFCA4EA7FF8A2EA3FF0EA
-1FE0EA07800E0E6C8D37>I<EC3FC0903801FFF8497F010F13FF4980498049809039FFE0
-7FF0489038801FF848496C7E49130748486D7E49130148486D7EA24848EC7F80A24848EC
-3FC0A349141F007F16E0A448C8EA0FF0AE6D141F007F16E0A36D143F003F16C0A36D147F
-001F16806D14FF000F16006D5B00075D6D13036C6C495A6D130F6C6D485A6C9038E07FF0
-6DB55A6D5C6D5C6D91C7FC010313FC6D5B9038003FC02C417BBF37>48
-D<EA0780EA1FE0EA3FF0EA7FF8A2EAFFFCA4EA7FF8A2EA3FF0EA1FE0EA0780C7FCB0EA07
-80EA1FE0EA3FF0EA7FF8A2EAFFFCA4EA7FF8A2EA3FF0EA1FE0EA07800E2C6CAB37>58
-D<003FB712F04816F8B812FCA46C16F86C16F0CBFCA8003FB712F04816F8B812FCA46C16
-F86C16F02E187CAB37>61 D<003FB67E4815F0B712FC82EEFF806C16C07E2701FE000113
-E09238003FF0161FEE0FF8160717FC1603A6160717F8160F17F0161FEE7FE0EEFFC00307
-138090B712005E16F88216FF178017C049C7EA7FF0161FEE0FF8EE07FC1603EE01FEA3EE
-00FFA65EA217FE16031607EE0FFCEE3FF816FF003FB712F04816E0B812C01780EEFE006C
-5D6C15E0303F7EBE37>66 D<DA0FFC1378DA3FFF13FC91B512E1010314F1010F14FF5B5B
-90387FFC079038FFF001489038C0007F4A133F4890C7121F485A49140F485A491407121F
-5B003F15035BA2127F49EC01F893C7FCA312FF90CAFCAB7F127FA46DEC01F8003FED03FC
-A27F121F7F000F15076D15F86C7E6D140F6C6CEC1FF06C7F6EEB7FE06C01F0EBFFC09038
-7FFE076DB612806D15006D14FC01035C010014E0023F1380DA0FFCC7FC2E417CBF37>I<
-007FB512FCB77E8216F082826C813A03FC001FFF03071380030113C081EE7FE0163FEE1F
-F0A2EE0FF8160717FCA2160317FE1601A417FF82AC5E17FEA3160317FCA2160717F8160F
-A2EE1FF0163FEE7FE016FF4B13C04B1380031F1300007FB65AB7FC16F85E5E16806C02FC
-C7FC303F7EBE37>I<007FB712F8A2B87EA37EA2D801FEC71203A8705AA293C8FCA4ED0F
-C0A24B7EA490B6FCA79038FE001FA46F5AA292C9FCA5173FA2EF7F80A9007FB8FCA2B9FC
-A36C1700A2313F7DBE37>I<007FB712FCB8FC17FEA47ED801FEC71201A8EE00FCA21700
-A5ED07E0A24B7EA490B6FCA79038FE000FA46F5AA292C8FCAF387FFFFEB6FCA56C5B2F3F
-7DBE37>I<263FFFF090B512C0486D4814E0B56C4814F0A36C496C14E06C496C14C0D801
-FEC73807F800B3A290B7FCA749C71207B3A4263FFFF090B512C0486D4814E0B56C4814F0
-A36C496C14E06C496C14C0343F7FBE37>72 D<007FB612F8A2B712FCA36C15F8A2260001
-FEC7FCB3B3AD007FB612F8A2B712FCA36C15F8A2263F78BE37>I<D83FFF49B5FC486D48
-1480B56C4814C014E0A26C6E14806C6D6C140000019138000FE013FD80A2EBFCFCA38014
-7EA2147F80A21580A2141F15C0A2140F15E0A2140715F0A2140315F8A2140115FCA21400
-15FEA2157E157FA2153FA2168F151FA216CF150FA3ED07EFA2150316FF383FFFE0486D7E
-B512F8A2816C496D5A6C49133F323F7EBE37>78 D<90380FFFFC90B612C0000315F04881
-48814881A23A3FFE001FFF01F01303497F48486D1380A249147FA400FF16C090C8123FB3
-AC6D147FA2007F1680A36D14FFA26D5B003F160001F8130701FE131F6CB65AA26C5D6C5D
-6C5DC615C0010F01FCC7FC2A417ABF37>I<007FB6FC16E0B712F882826C8117802701FE
-000713C0030113E09238007FF0163F161FEE0FF81607A217FC1603A6160717F8A2160FEE
-1FF0163F167F923801FFE0030713C090B7128017005E5E5E16E093C7FC49C9FCB2387FFF
-F8A2B57EA36C5BA22E3F7DBE37>I<903903FF800F011F9038F81F80017FEBFE3F90B6FC
-000315FF5A5A48130001F8131F48487F01C01303007F805B00FF8090C8FCA2167FA37FEE
-3F006C6C91C7FCA26C7E13F8EA1FFEEBFFE06C13FF6C14F06C14FEC6ECFFC06D80011F14
-F8010380D9003F7F02037FDA001F13801503030013C0167FEE3FE0A2EE1FF0A2003E150F
-127F5AA46D141F17E0A26D143F6DEC7FC001F814FF01FE4913809026FFE00F130091B55A
-5E5E486C5C011F14C0D8FC0791C7FC3978007FF82C417BBF37>83
-D<003FB712FE5AB9FCA59039000FF000A8007E167EA2C71500B3B3A3010FB512F04980A5
-6D5C303F7DBE37>I<D83FFF91380FFFC0486D4913E0B56C4913F0A36C496D13E06C90C7
-6C13C0D80FE09138007F00A36D5D00075EA76D140100035EA6EC01F80001D907FE5B01FC
-1403EC0FFFA591381F9F8300005EA201FE1487A2023F13C7A3150F017E5DA2027F13E7A2
-EC7E07017F14EFA2013F5DA2EC7C03A402FC13FF4A7E011F5DA44A7E010F92C7FCD907C0
-133E34407FBE37>87 D<263FFFC090B5FC486D481480B56C4814C0A36C496C14806C496C
-1400000190C7EA3FE0A26C5E6E137F017F5D6E13FF013F92C7FC6E5AA26D6C485AA26D6C
-485AA201075CECFC0F01035CECFE1F01015CA26D6C485AA2027F5BA26EB4C8FCA36E5AA2
-6E5AA26E5AB391B512C049804980A36D5C6D5C323F7EBE37>89 D<003FB7FC481680B812
-C0A46C16806C16002A087A7D37>95 D<90380FFF80017F13F048B512FC4814FF48814881
-4881D9F8017F9138003FF8150F6F7E6C481303A2D803C080C81201A3EC03FF91B5FC1307
-133F90B6FC12035A48EBFE014813C0383FFC00EA7FF013C0485A90C7FCA415037F007F14
-076D130FD83FF0133FD9FE01B6FC6CB8FC6C17807E6C4A7EC6DAF83F1300013FEBE007D9
-0FFEC9FC312F7BAD37>97 D<EA3FFF5AB57EA37E7EEA007FABED7FC0913883FFF8028F13
-FE02BF7F91B612C0838303807F9138FE003F02F8EB0FFC4A6D7E4A13034A6D7EA24A6D13
-80A2177FA218C0173FA8177F1880A26E14FF18006E5BA26E495A4C5A6E131F02FE495A91
-39FF81FFF092B55A5F5F02BF91C7FCD93F0F13FCD91F0313F090C7138032407FBE37>I<
-EC3FFE49B512C0010714F0011F804980498090B7FC48EBF0034813803807FE00485A4848
-6D5A5B4848EB00784991C7FCA2485AA312FF90CAFCA87F127FA27F123F6D143F6C6CEC7F
-807F6C7E01FF14FF6C6D4813006CEBF80F6C90B55A6C5D6D5C011F5C010714C0010191C7
-FC9038003FF8292F79AD37>I<ED3FFF5D92B57EA38181ED007FABEC7FC0903803FFF801
-0F13FE013F13FF4914FF90B7FC5A48EBE03F48EB000F48487F01F87F48487F48487FA249
-147F127F5BA212FF90C8FCA87F127F16FF7FA26C6C5BA26C6C5B6D5B6C6C5B6CB45B6C01
-C0B6FC91B712806C17C06C6C806D13FE6D496C1380010701F0140001000180C8FC32407D
-BE37>I<EC7FE0903803FFFC010F13FF013F14C0498090B67E4881489038E03FFC48EB00
-0F48486D7E496D7ED81FF07F003F8049158049147F127F4915C0A200FF153FA290B7FCA5
-1780A20180C9FCA2127F7FA26C6CEC1F80A26C6CEC3FC07F6C6C147F6CB414FFDA800313
-806CD9F00F13006C90B6FC6C5D013F5C6D5C010714E0010191C7FC9038001FF82A2F7AAD
-37>I<ED0FF8ED7FFE4AB51280020714C05C4A14E05C91387FF07F15C09139FF803FC092
-38001F8049EC0F004A90C7FCA8003FB612FE5AB8FCA36C5DA2260001FEC8FCB3AC003FB6
-12F0A24881A36C5DA22B407DBF37>I<EA3FFF5AB57EA37E7EEA007FABED7FC0913883FF
-F8028F7F029F7F91B6FC83A203C07F9138FE003F5C4A804A131F5C5CA35CB3A4003FB548
-B512C048028314E0B600C714F0A36C028314E06C020114C0343F7FBE37>104
-D<14F8497E497E497EA56D5A6D5A6D5A91C8FCA9383FFFFE5A80A47EC7FCB3AC007FB612
-F8B712FC16FEA316FC6C15F8274077BF37>I<007FB5FCA2B67EA37EA2C7127FB3B3AD00
-7FB71280A2B812C0A36C1680A22A3F7ABE37>108 D<91391F8003F03B3FF0FFE01FFCD8
-7FF39038F07FFEB66CB5FC03FD8092B6FC6C836C01E1EBFC3F000301809038F01FE04A13
-E0037F130F4914C0491480A4491400B3A43C3FFF81FFF03FFE4801C36D487EB500E301FC
-1480A36C01C301F814006C0181496C5A392D81AC37>I<ED7FC03A3FFF03FFF848010F7F
-B5009F7F91B6FC837E6C02C07F3A007FFE003F5C4A804A131F5C5CA35CB3A4003FB548B5
-12C048028314E0B600C714F0A36C028314E06C020114C0342D7FAC37>I<EC7F80903803
-FFF0010F13FC013F13FF498090B67E48814801C07F489038003FF8D80FFCEB0FFC491307
-48486D7E491301003F81497F007F168049147FA348C8EA3FC0A96D147F007F1680A26D14
-FFA26C6C491300A26C6C495A6D13076C6C495A6CB4EB3FF8ECC0FF6C90B55A6C5D6C6C14
-806D91C7FC6D5B010313F09038007F802A2F7AAD37>I<ED7FC03A3FFF03FFF848010F13
-FEB500BF7F91B612C0836C826C02807F3A007FFE003F02F8EB0FFC4A6D7E4A13034A6D7E
-A24A6D1380A2177FA218C0173FA8177F1880A26E14FF18006E5BA26E495A4C5A6E131F02
-FE495A9139FF81FFF092B55A5F5F02BF91C7FC028F13FC028313F00280138092C9FCAF00
-3FB5FC4880B67EA36C5C6C91C9FC32447FAC37>I<91397FC00FC0903803FFF8010F9038
-FE1FE0013FEBFF9F4914DF90B7FC5A48EBE03F48EB000F4848130301F87F48487F49147F
-123F49143F127F5B161F12FF90C8FCA87F127F163F7F167F6C7E16FF6C6C5B7F6C6C1307
-6CB45B6CEBC07F6C90B6FC7E6D14DF6D141F010F13FC010313F00100138091C7FCAF031F
-B512E0A24B14F0A36F14E0A234447CAC37>I<EE7FC03B7FFFE007FFF0031F13FCB5D8F0
-7F13FE92B5FC02F314FF6C13F791B512C3D8000FEBFE039238F801FE15E09238C000784B
-130092C8FC5CA25CA25CA35CB1007FB612C082B7FCA37E5E302D7DAC37>I<903907FFC0
-F0017FEBF9F848B6FC12075A5A5A387FFC0001C0131F4848130F90C712075AA46CEC03F0
-D87FC090C7FC13F8383FFFE06CEBFF806C14F86C14FE0001ECFF806C6C14E0010714F0D9
-003F13F8020013FC150F003EEC03FE007F14004815FF167F7FA36D14FF7F6DEB01FE6D13
-0701FFEB3FFC91B512F816F016E04815C0013F1400D8FC0F13FCD8780113E0282F79AD37
->I<EB03E01307497EAB003FB7FC5AB81280A36C1600A226000FF0C8FCB31603EE0FC0EE
-1FE0A56E133F17C00107147F6EEBFF80903803FF0392B512006D5C6D5C6E5B6E5B020F13
-C0DA03FEC7FC2B3A7DB837>I<D83FFF90380FFFC0485CB56C487FA36C806C80D8007FEB
-001FB3A7163FA2167F6E13FF5D90263FF00FEBFFC091B712E06D16F07FA20103028F13E0
-6DD9FE0F13C09026003FF0C8FC342D7FAB37>I<3B7FFFE007FFFEB56C4813FF6E5AA34A
-7E6C496C13FED801FCC7EA3F80A26D147F00001600A26D5C6D5CA2EC8001013F5CA2ECC0
-03011F5CA2ECE007010F5CA2ECF00F01075CA2ECF81F01035CA2ECFC3F01015CA2ECFE7F
-010091C7FCA291B5FC6E5AA36E5AA36E5AEC07E0302D7DAB37>I<277FFFF003B51280B5
-6C4814C0A56C496C1480D807F0C73803F800A36D140700035EA66C6C4A5AEC03F0EC07F8
-EC0FFCA2EC1FFED800FE4A5AA3EC3F3FA3017E5D027F139F017F14BFA2EC7E1FA2013F92
-C7FC02FE13FF4A7EA34A7E011F5CA26D486C5A6D486C5A322D7EAB37>I<3B7FFFE007FF
-FE6E4813FFB56C5AA36C497E4A6C13FED801FEC7EA3F8012006D147F17007F6E5B013F5C
-A26E485A131F14E0010F495AA214F00107495AA214F80103495A14FC13014B5A14FE1300
-5EEC7E3F147F93C7FC143F5DEC1FFEA36E5AA214075DA35DA2140F5DA2141F5DA2143FD8
-0FC05B381FE07FD83FF090C8FC5CEBF1FE13C3EBC7FCEBFFF87E5C6C5B6C5B6C90C9FCEA
-01FC30447DAB37>121 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fd cmtt10 20.74 45
-/Fd 45 125 df<EE07C0EE1FF0163FEEFFF85D15075D4B13F05D4B13C092B512804AEBFE
-004A5B4A5B4A13E04A5B4A5B4A90C7FC4A5A5D495B495BA2495B495B5D5B4990C8FC5C13
-7F5C495AA2485BA2485BA25C5A5C5AA291C9FC5AA25BA2123F5BA3127FA25BA412FFA25B
-B07FA2127FA47FA2123FA37F121FA27FA27E80A27E807E80A26C7FA26C7FA26D7E80133F
-806D7F7F816D7F6D7FA26D7F6D7F816E7E6E7F6E7F6E7F6E13F86E7F6E7F6EEBFF806F13
-C06F13F0816F13F881150181EE3FF0161FEE07C02D8663F75A>40
-D<121FEA3FC0487EEAFFF87F13FF806C7F6C7F6C7F6C7F00037F6C7F6C7F013F7F6D7F6D
-7F6D7F6D7F7F6D7F6E7EA26E7E6E7F80826E7F8082806E7FA26F7EA26F7EA2151F828117
-80A28117C0A281A217E081A317F0A281A417F8A2167FB016FFA217F0A45DA217E0A35D17
-C0A25DA217805DA217005D5E153FA24B5AA24B5AA24A5B5C5E5C4A5B5E5C4A90C7FC4A5A
-A24A5A495B5B495B495B495B495B90B5C8FC485B485B000F5B485B485B485BB55A91C9FC
-13FC5BEA7FE06C5A6CCAFC2D8671F75A>I<EB3FC0EBFFF04813FC487F487F48148015C0
-5A15E0A215F0A215F8A37EA27E7E7E7E133FEB007F15F0A214FFA24913E05B4913C0A201
-1F13805B4913003803FFFE121F485B485BB55A5C5C91C7FC5BEA7FF8EA3FE06CC8FC1D2E
-61955A>44 D<001FBA12C04819E04819F0BB12F8A66C19F06C19E06C19C0450C76BA5A>
-I<13FCEA03FF000F13C04813E04813F0A24813F8A2B512FCA66C13F8A26C13F0A26C13E0
-6C13C000031300EA00FC16165E955A>I<EEFF80030F13F8033F13FE92B67E020315E04A
-81021F15FC4A814A8191B87E498349028080499026FC001F7F4901F001077F4B7F490180
-01007F4990C86C7E4A153F49486F7EA249486F7F48496F7FA248496F7F4A81A248496F7F
-A24890CA6C7EA34848717EA34848717EA449170F007F85A5498300FF1A80B16D5FA2007F
-1A00A56D5F003F61A36D173FA2001F616D177FA26C616E16FFA26C6D4B5BA26C6D4B5BA2
-6E5D6C616E5D6C6D4B5B017F95C7FC6E5D6D6C4B5A6F14FF6D6D495B6D6D495B6F5B6D01
-FC011F5B6DD9FF80B55A6D91B65A6D5F6E93C8FC6E5D6E5D020715F06E5D02001580033F
-49C9FC030F13F803001380496D78EA5A>48 D<13FCEA03FF000F13C04813E04813F0A248
-13F8A2B512FCA66C13F8A26C13F0A26C13E06C13C000031300EA00FC90C7FCB3AC13FCEA
-03FF000F13C04813E04813F0A24813F8A2B512FCA66C13F8A26C13F0A26C13E06C13C000
-031300EA00FC164A5EC95A>58 D<EB1F80EB7FE03801FFF8487F487FA2487FA2481480A6
-6C1400A26C5BA26C5B6C5B38007FE0EB1F8090C8FCB3ACEB3F80EBFFE04813F8487F487F
-5A805A1580A315C0A47EA27E7E7E7E133F13031580A25BA2491300A2495A133F495A13FF
-485B1207001F5B485B485BB55A91C7FC5B5B5BEA7FE06C5A6CC8FC1A6261C95A>I<F107
-C0F11FE0F13FF0F1FFF860180760183F95B5FC4D14F0050714E04D14C0053F14004D5B4C
-B512F84C5C040F14C04C5C047F49C7FC93B512F803035C4B14C0031F5C4B49C8FC92B55A
-4A14F002075C4A1480023F91C9FC4A13FC49B55A4914E0010F5C4991CAFC017F5B90B512
-F800035C4814C0001F5C4849CBFC485BB512F05C1480A214E0806C13FC6C7F6C6D7E0007
-806C14F0C6806D13FE011F7F6D14C00103806D14F86D6C7F6E13FF020F806E14E0020180
-6E14FC033F7F6F6D7E0307806F14F00300807013FE041F6D7E7080040314F07080706C13
-FE717F050F14C07114E0050114F07114F8183F180F84180184F13FF0F11FE0F107C04558
-76E05A>I<001FBB12C0481AE0481AF0BC12F8A66C1AF06C1AE0000F1A80CFFCAE000FBB
-1280003F1AE0481AF0BC12F8A66C1AF06C1AE06C1AC04D267AC75A>I<121FEA3FC0487E
-EAFFF87F13FF8014E0806C13FC6C13FF6C80000714E06C80C614FC6D7F011F6D7E6D8001
-0314F00100806E13FE021F7F6E14C00203806E14F86E6C7F6F13FF030F806F14E0030180
-6F14FC043F7F706D7E0407807014F00400807113FE051F7F7114C0050314E07114F0716C
-13F884180FA2183F604DB512F04D14E0050F14C04D1400057F5B94B512F804035C4C14C0
-041F5C4C49C7FC93B55A4B14F003075C4B1480033F91C8FC4B13FC4AB55A4A14E0020F5C
-4A91C9FC027F5B49B512F8495C010F14C0495C017F49CAFC90B55A000314F0485C001F14
-804891CBFC4813FCB55A14E0148091CCFC13FC5BEA7FE06C5A6CCDFC455876E05A>I<EE
-3FF84C7E4C7E4B7FA24B80A54B80A44B487FA4031F80EEFC7FA4033F80A2EEF83FA2037F
-80A3EEF01FA203FF80A3EEE00F4A81A44A496C7FA54A496C7FA44A496C7FA54A486D7FA4
-023F824B147FA3027F824B143FA402FF8292B7FCA34983A44984A403C0C7120749844B80
-A3498492C87EA449844A81A3013F844A167FA2001FB500F8023FB512F0007F6E4A14FCB6
-6C91B612FEA26F5BA34B7FA26C4A6E14FC001F4A6E14F04F6B7BEA5A>65
-D<DC1FFE141F4BB500E0EB3FC0030702F8137F033F02FE14E04B9138FF80FF4AB712E002
-0716F14A16FD4A93B5FC5C5C91B5EAFC07499138C0007F4991C7121F4901FC1407494980
-4901E0804B804949814990C97E5C49488285485B4A825A5C484982A2485BA291CA7E5AA2
-5B003F7213C0A249F03F0097C7FC127FA25BA412FFA25BAF7FA2127FA47FA2123FA27F1A
-3F001FF1FFC07F4F13E07E80A26C7FA26C6D5E806C1AC06E5E6C7F4F13806D7E6E5E6D6D
-4B13006D6D5D6F4B5A6D01F84A5B6D6D5C6D01FF020F5B6D02C0013F5B6DDAFC03B55A6E
-90B75A6E5F6E94C7FC6E5E6E5E020116F06E6C15C06F92C8FC030714FC030114E0922600
-1FFEC9FC4B6D79EA5A>67 D<001FBB12F0481AFC5A1BFEBCFCA37EA27E7ED800070180C9
-121FADF20FFCA2F203F097C7FCAAF01F80F07FE0A24E7EA792B7FCAB0380C7FCA7725AA2
-F01F8095C9FCB3A8001FB612FC48814881A2B87EA36C93CAFCA26C5D6C5D4F697CE85A>
-70 D<001FB500FE023FB512FC007F6E6C90B7FCA2B76C481680A56C4B6C1600A2001F4A
-C7003F14FC26001FFEC9D83FFCC7FCB3B091B9FCAB4AC9123FB3B3A2001FB500FE023FB5
-12FC007F6E6C90B7FCA2B76C481680A56C4B6C1600A2001F4AC7003F14FC51697CE85A>
-72 D<001FB912E0007F18F8A2BA12FCA56C18F8A2001F18E0C8D87FF8C8FCB3B3B3B3AB
-001FB912E0007F18F8A2BA12FCA56C18F8A2001F18E03E6972E85A>I<001FB612FC007F
-15FF83B8FCA57E94CAFC001F15FCD800070180CBFCB3B3B3AAF207E0F20FF0F21FF8F23F
-FCB0001FBBFC127FA2BCFCA56C1AF8A2001F1AE04E697BE85A>76
-D<0203B512FE91B712F8010716FF011F17C0017F17F090B97E48844884A2488448198092
-38C0001F02FCC712014801F06E6C13C002C0151F4A814890C96C13E0A24982A24982A200
-7F19F0A24982A700FF19F849177FB3B3A76D17FFA3007F19F0A56D5EA4003F19E06D5EA3
-6D5E6E5D6C6D4B13C06E5D6E5D6C01FC4AB51280DAFFE0133F92B8FC6C19006C60A26C60
-6C606D5F011F17C0010794C7FC010016F802034AC8FC456D76EA5A>79
-D<001FB812F0007F17FF19E0BA12F819FE85861AE06C8586001F85D8000F90C880060F7F
-1803060014807313C0191F7313E0857313F0A2857313F8A21A7FA21BFC1A3FA91A7F1BF8
-A21AFFA24F13F061A24F13E0614F13C0197F96B5128006031400180F95B55A92B85A6262
-621A8097C7FC6119F819E096C8FC18F092CCFCB3AD001FB67E007F15E0A2B77EA56C5DA2
-001F15804E697CE85A>I<0203B512FE91B712F8010716FF011F17C0017F17F090B97E48
-844884A248844819809238C0001F02FCC712014801F06E6C13C002C0151F4A814890C96C
-13E0A24982A34982007F19F0A34982A600FF19F8A249177FB3B3A76D17FFA2007F4AB46C
-14F04B7F83A283A26D6D6D5AA26F13FC003F19E06D6E6C5AA2EE3FFF6D5E7013876C6D03
-8F13C06E6D13DF02F06D90B5FC6C01FC17809138FFC00392B8FC6C19006C60A26C606C60
-6D5F011F17C0010794C7FC010083140391C8000F7FA2717FA2717FA2717FA2717FA2727E
-85841A80841AC0841AE084A27213C0721380458376EA5A>I<DB7FFE141F0207B500E0EB
-3FC0023F02FC137F91B714E00103EEC0FF4916F0011F16FC4993B5FC5B90BAFC5A48ECE0
-0F4849C77E02F8141F4801E01407484914014A804890C97E49824982127F49828412FF5B
-84A484A27FA27213C06C7EF13F006D94C7FC6C7EA26C7F14E06C7F14FC6CEBFF806C14F8
-EDFF806C15F86CEDFF806D15FC011FEDFF806D16F06D16FC010116FF6D6C16C0021F8202
-0382DA003F81030181DB001F80040180DC001F1480050114C0717E061F13E0847213F084
-7213F8841AFC197FA2193FD81F8018FEEA3FE0007F181F487EA67F193FA21AFC6D177FA2
-6D18F86D17FF4E13F002C05D6E4B13E06E5D02FC4B13C002FF157F03F049B512809226FF
-800F140093B65A61616101E75F01E15FD9E07F93C7FCD9C01F15FC007F010315F049C66C
-14C0001FC7000101FCC8FC476D77EA5A>83 D<001FB712E0007F16F8A2B812FCA517F8A2
-17E001F0C9FCB3B3B3B3B3B3A490B712E017F8A217FCA56C16F8A2001F16E02E865BF75A
->91 D<001FB712E0007F16F8A2B812FCA57EA2121FC9123FB3B3B3B3B3B3A4001FB7FC12
-7FA2B8FCA56C16F8A2001F16E02E867AF75A>93 D<001FBA12C04819E04819F0BB12F8A6
-6C19F06C19E06C19C0450C767B5A>95 D<91381FFFFE0103B612E0010F15F8013F15FE90
-B87E4817E0488318FC48838448849126F8000F804A1300053F7F050F7F836C4902017F83
-6C49826C49157F6C90C9123F013C8390CAFC181FA5EF7FFF93B6FC151F4AB7FC140F147F
-49B8FC1307131F5B90B812DF489238F8001F4892C7FC4814E04891C8FC4813F814E0485B
-91C9FC485A5B485AA25BA57F183F127F6D167F6D16FF6C6C5D6E14076C01E0141F02F891
-B612C06C9026FF801FEDFFF86C91B912FEA26C1AFF7E6C17F7013F16C36D16010107DBFC
-0014FE010103F0131FD9003F0280010313F8020701F0CAFC504D77CB5A>97
-D<4BB512E0031F14FE92B77E020316E0020F16F8023F824A8249B8FC49835B49188049EC
-80004901F8C77E4913E090B5128092C8FC4801FC6F1300485B4A6F5A48496F5A4A6F5A48
-EF01E04A92C8FC4890CCFCA2485AA25B127FA25BA212FFA25BAA7FA2127FA27FA26C7EA2
-7F6C183F6EEEFFC06C7F4E13E06C7F6E5D6C7F6C01FE4B13C06E5D6C02C04A13806D01F0
-5C6D01FC49B512006D9038FFC00F6D91B65A6D5F6D5F6D5F6D6C5E6E5E020F93C7FC0203
-15FC020015F0031F1480030101F8C8FC434D74CB5A>99 D<050FB5FC053F14C05F86A683
-170FEF0001B3923807FF80037F13F04AB512FE020FECFF814A15C1027F15F149B712F949
-93B5FC5B5B5B4914004901F0131F90B500C013074891C712014A804801F8814A81484981
-484981A248498191C9FC84485AA24982127FA25BA212FFA25BAA7FA2127F60A27F606C7E
-A2606C7E6E5D6C5F806C6D5D6E92B5FC6C6D5C6E5C6C6D5C6C6D6C131F6D01E0137FDBFC
-03B712FC6D90BAFC6D1A806D16FD6D16F9010116E16D16C1023F15816E4AC6FC020702F8
-1600020002E0013F13FCDB1FFECBFC516A7AE85A>I<923803FFE0033F13FE4AB67E0207
-15E0021F15F84A15FE91B8FC4917C0010783498349834914004901F0010F7F03C001037F
-90B5C8FC48496F7E48498102F06F138048834A6F13C0485B4A6F13E04890C9FC84484818
-F0A24982127FA24918F8A200FF187F90BAFCA81AF0A21AC001F8CCFCA2127FA27FA2123F
-7FA26C7E6EEE0FC06CF03FF0806C6DEE7FF8806C6D16FF806C6D4B13F06C6D6C5C6F020F
-13E06D01F05C6D01FE027F13C06D9026FFE007B5FC6D91B712806D18006D5F01005F6E5E
-021F16E00207168002014BC7FC6E6C14F8030F14C0030001FCC8FC454D76CB5A>I<9438
-03FFE0053F13FC4CB6FC040715C04C15E0163F4C15F093B7FC4B16F85D5D4BEBFE0317F0
-4BD9C00113F017804B90C713E04CEC7FC04B48EC3F8096C7FC5EAD001FB912FC4818FF5A
-BB1280A56C1900A2001F18FCC8D87FF8C9FCB3B3B0000FB912C0488448844884A56C606C
-606C60456A7AE95A>I<381FFFFE007F6D7EB6FC81A67E121FEA0003B3EF3FFE4CB512C0
-040F14F0043F14FC93B67E03C38103C78203CF8203DF8292B87EA2DDE00F7FEF000104F8
-7F4C6E7E16C04C143F93C87F5D5D191F5D5DA35DA45DB3B1001FB600F8017FB612C0007F
-DBFE01B712F0B817F85FA5836C03FE17F0001F9226F8007F15C055697EE85A>104
-D<ED07C0ED1FF04B7E4B7E4B7EA24A7FA56E5BA26F5A6F5A6F5AED07C092CBFCAF0007B6
-12F8001F15FEA24881A57EA21207C8120FB3B3B0001FB912FC488448841A80BBFCA37E1A
-006C606C60416A73E95A>I<381FFFFC007F13FFA2B67EA57EA2121FEA0001B3A2053FB6
-12F094B712FCA24C82A5705EA2053F15F0DD001F0180C7FC4E90C8FC4E5A4E5A4D5B4D5B
-4D5B051F5B4D5B4D90C9FC4D5A4C5B4C5B4C5B4C5B4C13804C90CAFC4C5A4C5A15810383
-7F1587038F7F039F8003BF8092B6FC04FD7F04F97F04F07FEEE07F4C6C7E04807F4C6C7E
-03FC6D7F4B7F4B814B6D7F4B6D7F4B7F727E85727E181F727E86727F84727F86727F737E
-193F001FB600F8010FB6FC007F03FE013F15C0A2B84915E0A56C4B6D15C0A2001F03F801
-0F150053697DE85A>107 D<001FB612FC4815FF5AB87EA57E7E7EC81207B3B3B3B3AB00
-1FBA12E04819F04819F8BB12FCA56C19F86C19F06C19E0466976E85A>I<DB03FEEC07FC
-291FFF801FFFC090383FFF8048D9E07F6D90B57E4891B5D8F80114F002F3DAFC0780B500
-F76E488091B65B7148806C5F95B7FC7E6C0307DAFE0F7FD8003FD9F803ECF0074B6C4A7E
-DBC000EC8001884B150092C75B4A6E487FA24A5DA34A5DA54A5DB3B2001FB5D8E007B5D8
-C00FEBFF8048DAF01FDAE03F14C0486E486E4814E0A2B600FC03F815F0A36C02F803F015
-E0A26C4A6C4A6C14C06CDAE007DAC00F14805C4B81CA5A>I<EF3FFE261FFFFE49B512C0
-007F9026FF800F14F0B6013F14FC6FB67E03C38103C78203CF8203DF8292B87E7E001FDC
-E00F7FD80003ED000104F87F4C6E7E16C04C143F93C87F5D5D191F5D5DA35DA45DB3B100
-1FB600F8017FB612C0007FDBFE01B712F0B817F85FA5836C03FE17F0001F9226F8007F15
-C0554B7ECA5A>I<ED07FF037F13F00203B512FE020F6E7E023F15E04A8149B712FC4982
-49824983498349D9FC0180499026E0003F7F90B50080010F7F4AC7120348496E7F48496E
-7F4A157F48496F7E4A8148496F1380A24890C96C13C04982003F19E04982A348487013F0
-A44848EF7FF8AC6D17FF007F19F0A36D5EA2003F19E06D5EA26C6C4C13C0A26E5D6C6D4B
-1380A26C6D4B13006E5D6C6D4B5A6C6D4A5B02FF14076C6E495B6D01E0013F5B6DD9FC01
-B55A6D90B75A6D5F6D94C7FC6D5E6D5E6D6C15F06E5D020F158002034AC8FCDA007F13F0
-030790C9FC454D76CB5A>I<EF3FFC261FFFFE0103B57E007F9026FF801F14F0B6017F14
-FC03C1B67E03C36F7E03CF8203DF16F092B87E866C85001FDCE01F7FD800039138FE0003
-04F801008004E0023F7F4C6E7F4C804BC86C7F854B6F7F4B814B831A7F4B707EA34B707E
-A286A31C80A286AA62A21C008162A2636F163FA26F4C5AA26F4C5A616F5F616F4B5B705C
-70023F5B704A5B04F849B5FC70010791C7FC9326FFC07F5B94B65A6203DF5E03CF5E03C7
-5E03C393C8FC03C115FCDBC07F14F0041F14C0040791C9FC040013F094CBFCB3A8001FB6
-12F8007F15FEB8FCA76C5D001F15F851717ECA5A>I<922603FFC0EB0FC0033F01F8EB3F
-F04AB6FC02079238C07FF8021F15E04A15F891B712FC4916FE010716FF4917FF5B49EC80
-7F499038F8000F03E0130390B500807F4849C87E4849814A81485B4A814849815C488391
-C9FC484882A24982127FA25B197F12FFA25BAA7FA2127F19FF7FA2003F5F7FA26C6C5EA2
-6E5D6C6D5D606C7F6E5D6C6D5D6C6D92B5FC02FF14036C6E5B6D01F0131F6DD9FE01B6FC
-6D90B8FC6D177F6D16FE6D16FC6D16F86D6C15F06E15C0020F1500020314FCDA007F13F0
-030F90C7FC92C9FCB3A80507B71280051F16E0A24D16F0A57116E0A205071680547179CA
-5A>I<953801FFF0001FB500FC021F13FE4802FF91B6128048040315C0DC800F15E0B749
-15F0057F15F894B7FC6C038316FC16876C158F6C039F1481C7000701BFEBF80193B512C0
-95C713F85F05F8EC7FF04DEC1FC04DEC07004D91C7FC5F94CAFC5EA25E5EA25EA35EA35E
-A45EB3A9001FB9FC48844884A2BA7EA36C60A26C606C95C8FC4E4B7BCA5A>I<0203B513
-1F027F9138F03FC00103B6EAFC7F010F03FF13E0013F16FF90B9FC5A5A5A5A5AED000748
-01E0EB007F0280141F4848C87E01F88100FF825B4981A56D6F13C07F6C6CEE3F006D93C7
-FC6C6C7E14F06C13FF6C14FCEDFFF06CEDFF80000116F86C16FF013F16C0010F16F00103
-16FC010082021FEDFF80020016C0030315E0DB000F14F0EE007F050F13F8050113FCD81F
-8081D83FE0EE3FFE007F171F487EF00FFFA26D82A37FA26D5E7FF01FFE806E153F02F0ED
-FFFC6E5C02FE020F13F89126FFE001B5FC92B712F019E019C01980190001E75E01E316F8
-01C016E0007F013F1580D9800702FCC7FC001FC76C1380404D73CB5A>I<157EEDFF805C
-4A7FB2001FBA12804819E05ABB12F0A56C19E0A2001F1980C7000301C0C9FCB3B1F101F8
-F107FEA2F10FFFA661821AFE6E163F70147F70ECFFFC6E6D5B70010713F892397FFFE03F
-94B612F06F16E01AC06F16806F16006F5D6F15F803005D043F14C0040F49C7FC040013F0
-48607CDE5A>I<261FFFFE92B512F0007F6D6C010314FCB65C6F82A66C82001F1600D800
-03EE001FB3B3A5193FA3197F19FFA26F5C606D6D140F6003FC91B5FC6D9026FFC00791B5
-12C093B912F06E19F8A280806E16DF6E161F0201EDFC0F6E6C02F015F0031FDA800314C0
-030101FCCAFC554B7EC95A>I<001FB500FE020FB6FC007F6E6C013F15C0B718E0705BA5
-4C7F6C1BC0001F4AC7000F1500C601E0CA13E0017F61A56E5E013F61A56D6C4C90C7FCA6
-6D6C4C5AEE03FCEE0FFF4C1380A24C13C06D6C4C5AA24C13E0A393B5FC6D6C6F485A17BF
-179F4B14F8A36D01815E0383ECFC3F171F170F158718FE6D609238C7FE0703CF157FA218
-FF027F496C5CA3EDDFF803FF6D13FFA26E5F4C7EA44C7F6E94C8FC5E6E6F5A4C131FDA03
-FEC7EA07F8534B7DC95A>119 D<000FB60103B612C0003FDB800F15E0704815F04815E0
-1BF8A31BF06C15C04C6C15E0000FDB000315C0D8000101E09026003FFCC7FC6D7F6E6C4A
-5A6E6C4A5A616E6C5B6E6C495B6E4A5B048091C8FC6E6D5A6E6D485A6E5D6F6C485AEEF8
-7F6F6C485A031F5C6FB55AA26F5C6F91C9FC6F5B815F705A705A83167F4C7E4B7F835D4B
-80DB0FFC7F844B486C7E92383FF03F037F804C6C7E4B486C7E4A14074A01807F4C6C7F4A
-6E7F4A5A4A486D7F727E4A486E7E4A488102FF151F4B6E7E49498149707F001FB500FE91
-B612F0007F6E010315FC1680B76C4815FEA56C4B6C15FC1600001F4A010015F04F4A7BC9
-5A>I<EA1F80EA3FC0EA7FE0EAFFF0B3B3B3B3B3B3B3A2EA7FE0EA3FC0EA1F800C8659F7
-5A>124 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fe cmr10 20.74 20
-/Fe 20 118 df<B812F8AA2D0A7EA939>45 D<F001F84E7EA34E7EA34E7EA34E7FA34E7F
-A34E7FA395B57EA34D80A34D8018F3A205078018E1A2050F8018C0A24D488085053F8118
-00854D81177E8505FE815F850401824D7FA20403824D7FA20407824D7FA2040F824D7FA2
-041F834D80A2043F8394C87EA24C83047E81A204FE834C81A20301844C81A20303844C81
-A20307844C81A2030F8493BAFCA24B85A34B8593CA123FA24B85037E83A203FE854B83A2
-0201864B83A20203864B83A20207864B83020F865D87021F875D88023F87A2027F858A14
-FF4986496D86496D60496D86017F01FC95B57E0003B66C0407ECFF80B700F80307B812F0
-A6747C7AFB81>65 D<95260FFFE0ED03804DB500FE1507051FDAFFC0140F94B700F8141F
-040316FE041F70143F047FDA800F01C0137F93B500F0C77F03030280DA1FF813FF030F01
-FCC83807FC014B01F0ED03FE4B01C0923800FF0392B5CAEA7F874A49EF1FC74A01F8EF0F
-EF4A4971B5FC4A49834A49834A5B4A90CCFC4A4885494985495B49498589495B4949855B
-4B855B92CDFC90B586485B895A5C481D7F5CA25A1E3F5C5AA348491B1FA45A9BC7FCA35C
-B5FCB27E80A47EF60F80A36C7FA37E801E1F6C1E00A2807E6E636C1D3EA26C6D1B7E6D1C
-7C6F1AFC7F6F626D1B016D6D626D6D1903535A6D7F6D6D4F5A6D6D4F5A6E7E6E6D4EC7FC
-6E6D187E6E6D606E6D17016E6D4D5A6E01FEEF0FF06E6D4D5A033F01C04C5A6F01F0EEFF
-806F01FCDB03FEC8FC0303D9FF80EC0FFC030002F0EC7FF870903AFF800FFFE0041F91B6
-1280040394C9FC040016F8051F15E0050192CAFCDD000F13E0697E77F97C>67
-D<B912F0A6D800074AC7FC010014F06E5B6E5BB3B3B3B3B3AA4A7F91B57E010714FEB912
-F0A634767BF53E>73 D<BAFCA6D8000792CCFC010014F06E5B6E5BB3B3B3AA1D3EA41D7C
-A71DFCA21DF8A31C01A31C03A3F407F0A21C0FA21C1F1C3FA21C7F1CFF5113E0631B0F63
-1B7F4A4DB5FC91B56C150F01076E4AB6FCBEFC1DC0A55F767BF56C>76
-D<B700C00407B712FC8282A28282D80001DF0007ECFC00D9003F6D050014E070063F1380
-E30FFEC7FC71715A023E6E715A836F735A6F7F83816F7F83816F7F84816F80707FA2707F
-707FA2707F707FA2707F7080A27080717FA2717F717FA2717F717FA2717F7180A2718072
-7F8684727F8684727F868472808784737F737FA2737F737FA2737F737FA27314807314C0
-A27413E07413F0A27413F87413FCA27413FE7413FFA27414817414C1A27513E17513F11D
-F9877513FD1DFF8787A28787A2888888A28888A28888147F884A6C197F497F010701F019
-3F011F01FC191F90B67EB86C170F1D07A21D031D01775A76767BF581>78
-D<BA12FEF1FFF01AFF1BE01BFC1BFFD8000702F0C7000F14C001004ADA007F13F06E4903
-0F13FC6E05037F08007F093F13C0757F757F757F757F8789757F8AA2767FA38A88A28AA9
-66A26466A26699B5FC9BC9FC6563515B65515B5113C0515B097F90CAFCF3FFFC08035B08
-0F13E0087F138096260FFFFECBFC93B812F01B8050CCFCF2FFC004C0C7001F13F0070313
-FC9638007FFF747F080F13E0747F747F747F747F888789757FA2757FA3757FA789A789A8
-77EC0F80A387A377141F8721004A6D8291B56C735B010702FE70163EB900F06F6D137E88
-766D5B766D485A0A031403769038FC0FF0D06CB55A0B1F14800B0391C7FC9A38003FF879
-7A7BF57F>82 D<EDFFF8021FEBFF80027F14F00103B612FC499038803FFF90271FF80007
-7FD93FC0010113E049C87F01FEED3FF80001707E6D6C81486D140F6E6E7E486D826E8085
-8385A3717F6C5B6C5B6C5B6D5A90CAFCA74CB5FC93B6FC151F4AB7FC020F14E0023FEBF8
-0091B51280010301FCC7FC010F13F04913C04990C8FCEBFFFE4813F8485B485BA2485B48
-5BA24890C9FC1BF8485AA3485AA25FA45FA26D5D127F5F6C6C923A1F3FF801F0A26C6D14
-3E6C6D913A7C1FFC03E06C6DD901F89038FE07C06C6D49486CB5FC6C01FC90260FE00714
-806C6CB46CB4486C14006D90B5C66C13FC010702FC6D5B010002F0EC1FC0020F018091C8
-FC4D4F79CC56>97 D<923801FFF0031F13FF92B612E0020315FC020F9038803FFE913B3F
-FC0001FF80DA7FF09038003FC0494848EC0FE04901806E7E4990C87F4948151F49484B7E
-013F167F49484B7E49485CA2485B5A5C5AA248496E5B725A48715A725A4890CCFCA35AA3
-5BA212FFAE127F7FA37EA36C7FA2F10F806C7FA26C181F6E17006C606C6D163E197E6C6D
-167C6D6C16FC013F5F6D6C15016D6C4B5A6D6D4A5A6D6D4A5A6D6DEC3F806D01F802FFC7
-FCDA3FFEEB03FE913A0FFFC01FF86E90B55A020015C0033F49C8FC030113E0414F7ACC4D
->99 D<923807FFC0033F13FC4AB67E020715E0021F01017F913A7FF8003FFCDAFFE0EB0F
-FE49496D7E0107496D7F4990C76C7F49486E7F49488249486F7E01FF163F4A824849151F
-48845C48717EA2485B1A804883A24890C9FCA21AC05A845BA312FF90BAFCA31A8049CCFC
-AA127FA27FA27EA36C7FF10380F107C07E6E160F7E6C6DEE1F80A26CF03F006C7F6E167E
-017F17FE6D6C5E6D6C4B5A6D6C15036D6D4A5A6D6D4A5A01006DEC3FC0DA7FF802FFC7FC
-DA1FFEEB03FE913A0FFFC03FF8020390B55A020015C0031F49C8FC030113F0424F7BCC4D
->101 D<F2FF80070713C0DB1FFE021F13E04AB500E0017F13F00207913AF801FF83F802
-1F9139FE03FC07913D7FFC0FFF87F00FFC9126FFE001EBCFC00103903B80007FFF801F49
-90C7393FFE000F49486E5A49486E6C14F8013F7013074A6EEC03E0017F71C7FC49486E7F
-A24884A248496E7FA34884AB6C60A36C6D4A5BA26C60A26D6C4A5B013F94C8FC6E5C011F
-5E6D6C4A5A6D6C4A5A496D495A499039E001FFC091267FFC0F5BD93E1FB548C9FC020714
-F8D97C0114E09126001FFECAFC92CCFC13FCA67FA27FA280EB7FE014F86DB77E18FE6DEE
-FFE019F86D17FE6D717E6D841AF0010F84013F84D9FFF0C8FC48018003077F4890CA6C7E
-D807FC171F484805071380484883003F7213C04983127F49F07FE0A2485A1A3FA66D187F
-007F1AC0A26C6CF0FF806D5F001F1A006C6C4D5A6C6C4D5A6CB4EF1FF86C6D4C5A6C01E0
-EEFFE0D97FF803035BD91FFE030F90C7FC90260FFFC0EC7FFE010301FE90380FFFF8D900
-7FB712C0020F4BC8FC020115F0DA000701FCC9FC4E727BCD56>103
-D<EB07E0EB1FF8497E497E90B5FC4880A86C91C7FC6D5A6D5A6D5AEB07E090C9FCB3A4EC
-1F8048B5FCB6FCA6C6FC131F7FA27FB3B3B3497FA2017F13F0B712F8A625747BF32F>
-105 D<EC1F800003B5FCB6FCA6C6FC131F7FA27FB3B3B3B3B3A9497FA2017F13F8B712FC
-A626787BF72F>108 D<023FDA1FFEEE3FFC0003B591B500E04AB512C0B6010702FC020F
-14F8041F6E023F8093283FE01FFF8090397FC03FFF93267F00036D9026FE00077F04FC6D
-9026E001F86D7FDB03F06D9026F007E06D7FC64A48027F49487F011F4A03F849816D4948
-6E6C48C86C7E4BC8143E6D013E031F49153F033CDCFE7882037C17F84B705A4B6F49151F
-8C4B5FA34B5FA44B94C9FCB3B3A6496D4B6D4B7EA2017F01F892B500F04AB512E0B7D8FC
-01B7D8F803B712F0A6844C7ACB8F>I<023FEC1FFE0003B591B512E0B6010714FC041F80
-933A3FE01FFF8093267F00037F04FC6D7FDB03F06D7FC64A48147F011F4A816D49486E7E
-4BC8FC6D013E151F033C82157C5D4B150F865DA35DA45DB3B3A6496D4B7FA2017F01F892
-B512F0B7D8FC01B712F8A6554C7ACB60>I<EEFFE0031F13FF037F14C00203B612F8020F
-9038803FFE913A1FFC0007FFDA7FF0010113C0DAFFC06D6C7E49496E7ED907FEC8EA0FFC
-49486F7E49486F7E013F844A8149486F7F01FF844849707EA24849707E4885A24890CA6C
-7EA24885A3481A804983A2007F1AC0A500FF1AE0AD007F1AC0A46C6C4D1380A36C1A00A3
-6C6D4C5AA26C616E167F6C616C6D4C5AA26C6D4B5B017F606D6C4B5B6D6C4B90C7FC6D6C
-4B5A6D6C4B5A6D6D4A5A6D6D4A5A9026007FF0903801FFC0DA3FFC01075B91280FFF803F
-FEC8FC020390B512F8020015E0031F91C9FC030113F04B4F7BCC56>I<922601FFE0143E
-031F01FE147E92B67E020381020F9026E01FF013FE023F90380003F8DA7FFCEB00FCDAFF
-F0EC7E01010349141F4949EC0F834949EC07C34990C813E34948ED03E74948ED01F701FF
-17FF4A815A4849167FA24849163F5A5C48181F5CA25AA291CAFC5AA4485AAE6C7EA47EA2
-80A27E807EA26C6D163FA26C6D167F7E6E16FF6C5F6D7E6D6C5D011F5E6D6CED0FDF6D6D
-EC1F9F6D6DEC3F1F6D6D14FE6D01F8EB01FCDA3FFEEB0FF8913A1FFF807FE0020790B512
-C002011500DA003F13F8030313C092C9FCB3A44F7EA24EB512E00503B712F0A6546D7ACB
-5B>113 D<023FECFF800003B5010713F0B6011F7F4C13FE9338FF83FF923801FC079226
-03F00F1380DB07E014C0C64B5A011FEB0F806DEB1F00151E6D133E153C037C6D13800378
-6D130003F86D5A4B6D5A94C8FCA25DA35DA65DB3B3A2497F81017F13FCB87EA63A4C7CCB
-43>I<EC03E0A81407A5140FA4141FA2143FA3147FA214FF5BA25B5B5B5B137F48B812E0
-120FB9FCA4D8000101E0C8FCB3B3187CB06D16F881A3027FEC01F081143F6FEB03E0141F
-6E6CEB07C06E6CEB0F806E9038801F006EEBE07F6EEBFFFE033F13F8030F5B0301138036
-6C7DE943>116 D<DA1F80163F0003B50307B5FCB64AB6FCA6C6EE0001011FEE003F6D83
-A26D83B3B3A661A461A36D5FA296B5FC816D5EDE03EF7F6D17CF6F020780027FDB0F8F13
-F86E6CDA3F0FEBFFF86E6C147EDA0FFEEB01FC913A07FFE00FF86E90B512E0020015C003
-1F0200ECFE00030101F002C0C7FC554E7ACB60>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ff cmr6 12.444 17
-/Ff 17 116 df<EC0FF891B57E010314E0010F14F890391FF80FFC90397FC001FF49C76C
-7E48486E7E49141F48486E7E000782491407000F82A248486E7EA2003F82A3491401007F
-82A600FF1780B3A2007F1700A46D5C003F5EA4001F5EA26C6C4A5AA26C6C4A5AA26C6C4A
-5AA26C6C4A5A6C6C6CEBFF806D6C4890C7FC90393FF80FFE010FB512F8010314E0010014
-80DA1FFCC8FC31477AC43F>48 D<EC0780140F143F147FEB03FF131F0007B5FCB6FC13FD
-13E1EAF8011200B3B3B0497F010F13F0B8FCA4284574C43F>I<ECFFF0010713FF011F14
-E0017F14F89039FF807FFC3A03FC001FFFD807F001071380D80FC0010113C0496D13E048
-C8127F003E16F0003CED3FF8127C007EED1FFCB47E7F6DEC0FFEA56C5AA26C5AC9FC17FC
-161FA217F8163F17F0167F17E0EEFFC04B13804B13005E4B5A4B5A4B5A4B5A4B5A4B5A4A
-48C7FC4A5A4A5A4A5AEC1FC04A5A4AC7121E14FE495AD903F0143C495A495A495A49C812
-7C137C4915FC48B712F85A5A5A5A5A5AB812F0A32F4579C43F>I<EC3FFC0103B512C001
-1F14F890397FE01FFE9039FE0003FFD801F801007FD803E06E7E48488148486E7E01F081
-486C141F837FA56C5A6C5AD801C04A5AC9FC5F167F5F16FF5F4B5B4B90C7FC4B5AED1FFC
-913801FFF049B55A93C8FC16C016F890C7EA1FFEED03FF6F13C06F6C7E707E83707EA270
-7E83A2821880A2EA1F80487E487E487EA318005EA2495D6C48141F90C85B003E4B5A003F
-5E6C6C4A5AD80FE049485AD807FC495B2701FFC01F90C7FC6C90B512FC013F14F0010714
-C09026007FFCC8FC31477AC43F>I<EE0F80161F163F167FA216FF5D5DA25D5D5DA2153E
-5D5DA24A5A4A5A4A5AA24A5A4A5A143EA25C5C495AA2495A495A495AA249C7FC133E5BA2
-5B485A485AA2485A485A48C8FCA2123E5A5AB912F8A4C80001EB8000AC4B7F4B7F020FB6
-12F0A435467CC53F>I<D8038015E001F8140F9039FFC001FF91B6FC17C017005E5E16F0
-5E168003FCC7FC01C313C001C0C9FCADEC1FFC01C1B57E01C714E001DF14F89039FFF01F
-FC91380003FE01FC6D7E01F06D138049EC7FC049EC3FE04915F0C9121F17F8A217FC160F
-A217FEA4121F487E487E12FF7FA217FC49141FA24915F8007EC8FC007CED3FF0123C003E
-ED7FE06C16C06DECFF806C6C491300D807F0EB07FED803FC495A3A01FF807FF86C6CB512
-E06D1480010749C7FC010013E02F4779C43F>I<ED3FF0913803FFFE021F6D7E91397FE0
-1FC09139FF0003E0D903FC6D7E49486D7E494813014948EB07FC495A4948130F49C7FC5A
-5B48486E5A1207EE01E0484891C8FCA2121F5B123FA3007F14609039E00FFF80023F13F0
-4A13FC91B57E3AFFE1F803FF9026E3E0007FD9E780EB3FC001EFC76C7E01FE81707E4981
-49140783A2496E7EA318805BA2127FA5123F7FA21800121FA2000F4B5A7F00075E160F6C
-6C5D6D4A5A00015E6C6C4A5A6D6C495A90273FE001FFC7FC90391FF80FFE6DB55A010314
-F0010014C0DA1FFEC8FC31477AC43F>I<121E121F13F090B812C0A35A188018005F5FA2
-5F007EC8EA01F0007C4B5A4C5A00785E160F4CC7FC163E485D167816F8C8485A4B5A4B5A
-5E150F4BC8FC153EA25D15FC5D14015D14034A5AA2140FA25D141FA2143F5DA2147FA314
-FFA34990C9FCA65BAA6D5AA2EB0078324878C53F>I<EC1FFE49B512C0010714F890391F
-F007FE49C77E017CEC3F8001F06E7E4848EC07E000038248486E7E1601485A707E121FA2
-7FA27F160101F85D7F01FF14036C01C0495A6E5C6C01F8130F02FEEB3FC06C6D6C485A6C
-DAC1FFC7FC6CECF3FC6DEBFFF86D14E06D1480010714E06D14F816FE010F804915C0D97F
-C780D9FF018048486C6C7FD803F8131F484801077F48486D7F48481300003FED3FFF4914
-0F007F8190C86C138048814881177FA2173FA318007E7E177E7F6C6C5D001F4B5A01F014
-036C6C4A5AD807FEEC1FE02601FF80EB7F806C9026F007FFC7FC013FB55A010F14F80103
-14C09026003FFCC8FC31477AC43F>I<EC1FFC49B57E010714E090390FF80FF890393FE0
-03FC90397F8000FE49C7127F48486E7E48488148486E7E000F6F7E485A83003F1507007F
-825BA28312FF160383A61880A25E127FA36C6C5CA2001F5D7F000F5D6C7E0003157B6C6C
-14F33A00FF8003E390397FE00FC36DB5008313006D1403010713FE010013F89138030007
-91C75BA35F160F5FA2D803C04A5AEA0FF05F486C143F5F4C5A4CC7FC49495A1503D80FC0
-495AED0FF06C6CEB3FE03A03FE01FFC06CB6C8FC6C5C013F13F00103138031477AC43F>
-I<B500FC060FB512E06E60A26E60C66CF3C0006D63011E6D057B90C7FCA26E6C17F3A26E
-6CEE01E3A26E6CEE03C3A36E6CEE0783A26E6CEE0F03A26E6C161EA26E6C163CA36E6D15
-78A26F6C15F0A26F6CEC01E0A26F6CEC03C0A36F6CEC0780A26F6CEC0F00A26F6C141EA2
-6F6C5CA36F6D5BA2706C5BA2706C485AA2706C485AA3706C485AA2706C48C7FCA2933803
-FE1EA2706C5AA37013F8A2715A133F715AD9FFC04E7F000301F06E484A7FB600C0041FB6
-12E0A2715A71C7FC63477AC671>77 D<B9FC18F818FF19C0C66C48C7000313F06D489138
-007FF8011FEE0FFE727E7213807213C07213E0F17FF0A21AF8193FA21AFCA71AF8A2197F
-1AF0A2F1FFE04E13C04E13804E13004E5AF07FF8943803FFF091B812C096C7FC18F895C8
-FC02FCCBFCB3A8497E497EB77EA446477BC655>80 D<903807FFE0013F13FE90B67E0003
-15E02607FC007F49EB1FF8486CEB07FC6F7E6F7E83816C48816C48147F6C5AC9FCA492B5
-FC143F0103B6FC011FEBFC7F90387FFE003801FFF04813804848C7FC485AEA1FF0485A12
-7F5B00FF17785BA316FFA26D5B127F6D5B6C6C90390FBFE0F0D81FFC90383F1FF1270FFF
-01FEEBFFE06C9038FFFC0F000102F014806C6CD9C0071300903A0FFE0001F8352F7AAD3F
->97 D<EC1FFC91B512C0010714F04914FC90393FF80FFE90397FC001FF903AFF80007F80
-4848C7EA3FC04848EC1FE012074848EC0FF0485AEE07F8485AA2007F150317FC5B12FF90
-B7FCA401C0C9FCA5127F7FA3123F6D153C121F6C6C157C6D1578000716F86C6CEC01F06C
-6C6CEB03E06C6D1307D97FF0EB1FC0D91FFFEBFF006DEBFFFE010314F8D9007F13E0020F
-90C7FC2E2F7CAD38>101 D<EF1FE0DA3FF0EBFFF00103B5000313F8010F02C713FC49EC
-FFF190267FF03F13019039FF8007FC48903A0003FE00F8490101147048486D6C13000007
-82A248486E7EA86C6C4A5AA2000393C7FC6C6C495A6D13036C6D485A90397FF03FF890B6
-12E0D801EF5C01E391C8FC3903E03FF049CAFC7FA37F7F13FE6CB612F8EEFF8017F06C16
-FC6D816D8148B81280000717C0D80FFCC7000F13E0D81FE0020013F04848153F4848150F
-90C9EA07F85A481603A46C16076C17F06D150F6C6CED1FE0D81FF0ED7FC0D80FFC913801
-FF806CB46C010F1300000101F8EBFFFC6C6CB612F0011F15C001034AC7FCD9001F13C036
-447CAD3F>103 D<01FFEB3FC0B5EBFFF0020313F84A13FC91380FE7FE0003EB1F876CEB
-3E076C133C1478ED03FC9138F001F89138E000F01600A25CA35CB3A54813E0B612E0A427
-2D7BAC32>114 D<D90FFF13E0017F13E10003B6FC5A380FF801391FC0003F48C7120F00
-7E140715035AA21501A27E7E01C090C7FCEA7FF0EBFF806C13FEECFFE06C14FC6C800003
-ECFF806C15C0D8003F14E0010714F0EB001F020013F8151F0070EC07FC00F0140315017E
-1500A27E7EED01F87E6DEB03F06D130701F0EB1FE001FEEBFFC000FCB61280486CEBFE00
-D8F01F13F8D8E0031380262F7BAD32>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg cmr10 22.7103 62
-/Fg 62 123 df[<F0FFF8053FEBFF804CB612F0040F15FC043F9038C00FFEDCFFFCC76C
-7E4B01E0EC3FC003070180EC0FE04B48C86C7EDB3FFC6F7EDB7FF04B7E4B48151F4A49ED
-7FFE4A4915FF4A5E4A90C8804B5D4A5A143F5D147FA25D735B14FF4B6F5B745AF21FE097
-C9FCB3A41B7F070FB5FCBDFCA6C701F0C81203F1007F8686A286B3B3B3A7496D4C7F496D
-4C7F011FD9FF804AB512F8007FB7D8E007B712FEA5DAC03FEEFC03>95
-133 124 260 105 12 D[<943801FFFE053FEBFFF04CB6EAFE07040F92B5FC043FEBC003
-DCFFFCC7123F030313E04B01805CDB1FFEC8B5FC4B485CED7FF04B5A4A495C4A5B4A90C8
-FC4A825D4A5A023F825D027F173F864B82A214FF5DB3A9BDFCA6C701F0C9120FB3B3B3AC
-496D4C7F496D4C7F011FD9FF804AB512F8007FB7D8E007B712FEA5DAC03FEEFC03>95
-133 124 260 105 I[<17C0EE03E01607EE0FC0EE1F80EE3F005E16FE4B5A4B5A4B5A4B
-5A4B5A153F4B5A4BC7FCA24A5A4A5A14075D4A5A141F5D143F4A5A5D14FF92C8FC5B495A
-A213075C130F5C131F5CA2133F5C137FA25C13FFA2485BA35A91C9FCA35A5BA2120FA25B
-A2121FA35BA2123FA55B127FA9485AB3AA6C7EA9123F7FA5121FA27FA3120FA27FA21207
-A27F7EA3807EA36C7FA2137F80A2133F80131FA280130F801307801303A26D7E7F81147F
-816E7E141F81140F6E7E8114036E7E6E7EA26F7E6F7E151F6F7E6F7E6F7E6F7E6F7E167F
-82EE1F80EE0FC0EE07E01603EE00C0>43 188 109 268 73 40 D[<126012F87E127E7E
-6C7E7F6C7E6C7E6C7E6C7E6C7E137F806D7E6D7EA26D7E6D7E8013036D7E807F816E7E14
-3F81141F816E7EA28114078114038180A2828082A2157F82A26F7EA382151FA382150FA2
-82A21507A282A381A21780A58117C0A96F13E0B3AA4B13C0A917805DA51700A25DA35EA2
-150FA25EA2151F5EA3153F5EA34B5AA25E15FFA25E5C93C7FCA25C5D14075D140F5DA24A
-5A5D143F5D147F4A5A92C8FC5B5C495A13075C495A495AA2495A495A91C9FC13FE485A48
-5A485A485A485A5B48CAFC127E5A5A1260>43 188 118 268 73
-I<F107804F7E4F7EB3B3B3A3003FC112F04820F8C212FCA46C20F86C20F0CCD81FE0CCFC
-B3B3B3A3735A735A7E7E76ED93>43 D<EA03F8EA07FE381FFF804813C04813E0A2B512F0
-A214F8A414FCA27EA27E6C13BC3807FE3CEA03FCC7FCA6147CA21478A314F8A214F01301
-A214E01303A2EB07C0A2EB0F80A2EB1F00A2133E137E137C5B1201485A485A485A485A90
-C7FC121E120C1639709334>I<B912C0AB320B7EAD3F>I<EA01F8EA07FE381FFF804813C0
-4813E0A2B512F0A86C13E0A26C13C06C13803807FE00EA01F81414709334>I<EE3FF803
-07B512C0031F14F092B612FE02039039E00FFF804AD900017FDA1FFC9038007FF0DA3FF0
-EC1FF84A486E7E4A486E7E49496E7E4990C86C7F49486F7F010F844948707E4A163F013F
-844948707EA201FF844A160F4885A24849701380A3481AC0A24A82481AE0A3481AF0A448
-1AF8A291CA7EA3481AFCA9B519FEB3AD6C1AFCA86C6D4C13F8A66C1AF0A46C1AE06E5EA2
-6C1AC0A36C1A806E5E6C1A00A26C6D4C5AA2017F606E163F013F606E167F011F606D6C4C
-5A6D6C4B5BA26D6D4A5B6D6D4A90C7FC6D6C6CEC0FFCDA3FF8EC3FF86E6C4A5ADA07FF90
-3801FFC06ED9E00F5B020090B548C8FC033F14F8030714C09226003FF8C9FC4F8279FD5E
->48 D<167816FC150115031507151F157FEC01FF1407143F49B5FC133FB7FC5C14F814C0
-49C6FC13C0C8FCB3B3B3B3B3A84A7F4A7F4A80027F14F8007FB912F8A5ED80073D7E6FFD
-5E>I<923807FFC092B512FE0203ECFFE0021F15F84A15FE91B87E49D9F00314E0010790
-C76C7FD90FFC020F13FCD91FF06E7FD93FC002017F49486E8049C96C7F4848707F484884
-4848707F4982484884727F48488286485A72148090CAFCD87FFE826D6C18C08080B56C82
-1BE080A86C5BA26C5B6C5B6C5B6C90CA14C0D800F894B5FC90CBFCA34E1480A21B0060A2
-6260624E5BA24E5B6260624E5B97C7FC95B5FC4D5B614D5B4D5B614D5B4D5B4D90C8FC60
-4D5A4D5A4C5B4C13C0604C90C9FC4C5A4C5A4C5A4C5A4C5A4B138094CAFC4B5A4B5A4B5A
-4B5A4B5A4B5A4B48ED03E04A90C9FC5D4A48EE07C04A5A4A5A4A5A4A5A4A5A4ACA120F4A
-1880495A495A4948171F495A495A4948EF3F0049CA48B4FC90BBFCA25A5A5A48615A5A5A
-BBFCA362A34B7E77FD5E>I<923801FFF8033FEBFF804AB612F0020715FE021F6F7E027F
-D9007F13E0DAFFE0010F7F010390C7000313FCD907FC6E7FD90FF06E7F49486F7FD93F80
-6F7F49C96C7F017E8401FE707F485AD9FFC06F7F4813F002FC83806E81488581A86C91C8
-FCA26C495F6C495D6D5AEB1FE090CA5CA26062A26260624E5BA24E5B97C7FC4E5A614D5B
-4D5B4D13C04D5B4D90C8FCEF7FFC933801FFF04BB512C092B6C9FC4A8118F06E15FE92C7
-6C6C7E050F7F050313F07113FC717F727E7213C0727F86727F727FA2727F86A27214801B
-C0A2841BE0A21BF0A285A21BF8A21378EA03FF000F13C0487F487F487FA2B57EA41BF0A2
-96B5FCA21BE05C7E4A4B14C05C028018806C90C95A018019006C6C606D5E6C6C606C6C4C
-5B6D4C5B6C6C606C6C4C5B6C6D4B5BD97FE092B5C7FCD91FF84A5B6DB44A13F8010301E0
-010F5B6D01FE017F13C06D6CB7C8FC021F15FC020315F0DA007F1480030301F0C9FC4D82
-78FD5E>I<190F4F7E193F197FA219FF60A26060A26060A26060A295B5FC5FA25F5F18DF
-EF0F9F171F181F173E177E177C17F8160117F0EE03E0160717C0EE0F80161F1700163EA2
-5E5EA24B5A4B5AA24B5A4B5AA24BC7FC153EA25D5DA24A5A14035D4A5A140F5D4AC8FC5C
-143E5C14FC5C495A13035C495A130F5C49C9FC5B133E5B13FC5B485A12035B485A120F5B
-48CAFC5A123E5A12FCBD12E0A6CB003F0180C7FCB3A44E7FA295B57E050F14FE93B912E0
-A5F0F00153807BFF5E>I<EA03E0A27F487E13FEEBFFFC91BBFCA35AA31BFE1BFCA21BF8
-481AF01BE0A21BC01B8001F0CB127F01801900003F19FE90CB12014F5A003E614F5A190F
-007E61007C4E5A193F624FC7FC614E5A48604E5A1807CB5B4E5A181F614E5A187F4EC8FC
-604D5A1703604D5A170F60171F4D5AA24D5AA24DC9FCA24C5A1603A24C5AA2160F5F161F
-A2163F5F167FA34C5AA25DA34B5BA25DA35DA25F5DA35DA45DA394CAFC92B5FCA65CA85C
-AF6E5BA26E5BED3FF0ED0FC0508476FF5E>55 D<EA01F8EA07FE381FFF804813C04813E0
-A2B512F0A86C13E0A26C13C06C13803807FE00EA01F8C8FCB3B3A5EA01F8EA07FE381FFF
-804813C04813E0A2B512F0A86C13E0A26C13C06C13803807FE00EA01F8145170D034>58
-D[<92B57E020F14FC027FECFFC049B712F80107D9C00713FED90FFCC76C7ED93FE0020F
-13C0D97F8002037FD801FEC86C13F8D803F86F7F4848707E498348488248481880003F71
-13C090CAFC01F018E0EA7FFC6D827FB56C17F080A86C5B606C90C914E0EA0FFC6C5ACB48
-13C0A24E1380A295B51200614D5B4D5B4D5B4D5B4D13804D90C7FCEF7FFC604D5A4C5B60
-4C5B4C90C8FC5F4C5A5F4C5AA24C5A5F167F5F4CC9FCA25E15015EA25E15035EA34B5AA4
-5EB36FCAFC92CBFCB0ED0FC0ED3FF0EDFFFC4A7F4A7FA24A80A86E91C9FCA26E5B6E5BED
-3FF0ED0FC0>68 133 118 260 89 63 D[<F107E04F7EA34F7EA34F7EA34F7EA396B5FC
-A24E80A34E80A34E80A34E8019DFA2061F80198FA2063F801907A2067F80F07E03A206FE
-804E7EA20501824E7EA20503824E7FA20507824E7F050F826086051F826086053F8295C7
-FC864D82057E80A205FE824D80A20401844D80A20403844D81A20407844D81A2040F844D
-81A2041F844D81A2043F8494C97E4C84167E8704FE845E8703018693BBFCA24B86A34B86
-04E0CA123FA2030F864C83A2031F864C83A2033F8693CB7EA24B86037E84A203FE864B84
-A20201884B840203885D890207885D89020F88A2021F868B023F86147F4A6C87497F4951
-7F010F01FE4F7F013F6D6C4E800003B600F00507B612F8B80407B9FCA5D9FC01F3C007>
-128 135 122 262 141 65 D[<BC12F0F3FF801CF81CFF1DC01DF0D8000702FCC96C13FC
-D9007F01F0040F7F6E4904036D7E0900806E737F767F767F767F767F767F7680A276808B
-898BA2898BA2898BAA6765A26765A2679AB55AA2525C5291C7FCA2525B525B525B525B52
-13C099B55A090391C8FC5113FC091F13F098B512C0080F91C9FC93B912F81C801CFCF4FF
-C004E0C9000F13F8090113FE756C6C7E0A1F13E00A0713F8767F767F766D7E777F777F8B
-777F898B777F8B8920808920C0A220E089A320F0A48AA29BB5FCA520E0A26520C0A26520
-806520006567535B65535B9AB55A525C525C525C5291C7FC4A073F5B99B512F84A6D0403
-5C0107B500FC043F14C0BF5A53C8FC1DF01DC00AFCC9FC1C80>116
-129 121 256 134 I[<96263FFF80ED01C0060FB500FCED03E095B76C1407050716E005
-3F04F8140F94B800FE141F0403913AFC003FFF80040F028001036D133F043F01FCC8D87F
-F0137F4C01E0DB1FF813FF4BB50080ED07FE4B49C93801FF01030F01F87013834B01E0EF
-7FC3037F49EF1FE792B54871B5FC4A49CB7E4A49844A49844A49844A5B4A49854A8791B5
-48854991CDFC4949868A495B4949865B4B865B4B865B90B5481B7FA2485C1F3F5A92CFFC
-1F1F5A5C5A1F0FA2485BA3481E075CA348F603C09CC7FCA45CB5FCB37E80A57EF701C0F7
-03E0807EA36C7FA21F077E6E1DC07EA26F1B0F7E20806C6E1B1FA26D6D1C006D65816D1D
-7E816D1DFE6D6D636D6D1A01676D6D505A6D6E19076E6D626E1B0F6E6D4F5A6E6D4F5A6E
-6D4FC7FC6E6D19FE6E6D18016E6D6C4D5A6F6D4D5A031F6D4D5A6F01F8EF3FE0030301FE
-EFFF806F6D6C4B90C8FC6F6C01E0ED0FFE7001FCED3FF8040FD9FF8049B45A040302FC01
-3F13C0040091B7C9FC053F16FC050716F0050016C0060F02FCCAFCDE003F1380>115
-137 118 260 136 I[<BC12F0F3FF801CF01CFE767E1DF0D8000702FCC8000380D9007F
-01F0DB001F13FE6E4904036D7E0900806E073F13F00A0F7F0A037F767F766D7E0B3F7F77
-7F777F777F89777F777F8B787F8A8C787FA2787F8C8A8C8A8C8A8CA3781480A221C0A28B
-21E0A321F08BA421F8A621FCA58BA767A521F8A621F0A36721E0A421C09CB5FC2180A354
-1400A268666866686668545BA2545B685490C7FC9BB5FC535B535B535B535B535B535B53
-5B9AB5C8FC0A035B525B0A1F13F04A077F5B0903B512804A6D041F91C9FC0107B500FC03
-03B512FCBE12F01DC052CAFC1CF81C8009F0CBFC>126 129 121
-256 144 I<C012C0A48BA2D800074AC91201D9007F01F8EE00076E4917001D1F6E1A0789
-89777F1E7F1E3F1E1F1E0FA21E07A21E038BA21E01A31E00A38BA21F7CA51B7CA28BA49C
-C7FCA41BFCA41A01A21A031A071A0F1A1F1A7FF10FFF93B8FCA604F0C7120FF1007F1A1F
-1A0F1A071A031A01A21A00A41B7CA2F701F0A3F703E0A598C9FCF707C0A51F0F2080A31F
-1FA3F73F00A367A267A2545AA21E031E07A21E0F545A1E3F1E7FF501FF1D074A1A1F0B7F
-5B4A6D0507B5FC0107B500FE4CB6FCC0FCA367A374807AFF80>I<BF12FCA48AA2D80007
-4AC9120FD9007F01F8EE003F6E4917071C016EF1007F1D3F1D0F777E89A28989A28AA28A
-1F80A21E1FA31E0FA31FC0A21E07A7E001F0EC03E0A49BC7FCA61A03A41A07A21A0F1A1F
-1A3F1A7FF101FF191F93B8FCA604F0C7121F1901F1007F1A3F1A1F1A0F1A07A21A03A41A
-01AA97CBFCB3AB4A7F824A7F0107B612E0BA12F0A59138FC003F6B8079FF7B>I[<B500FC
-90267FFFFE91267FFFFE013FB5FC91B794B8FCA5D8000703C0C90003EDE000D9007F01FC
-CB003F49C7FC6E49725BA26E49725BB3B3AD93BCFCA604F0CB120FB3B3B24A6D4E7FA24A
-6D4E7F0107B600C00403B612E0B900FE027FB9FCA59126FC007F9538FE003F>128
-129 122 256 141 72 D[<B500FC011FB5128091B8FCA5D8000303E0C7FCD9003F49C8FC
-6E5BA26E5BB3B3B3B3B3B34A7FA24A7F0103B612E0BA1280A59138FC001F>57
-129 123 256 68 I[<B500FC013FB512F091B8FCA5D8000703E0CCFCD9007F49CDFC6E5B
-5E6E5BB3B3B3B01E7CA51EF8A71D01A31EF0A21D03A41D07A31D0F1EE01D1FA21D3FA21D
-7F1DFF64A20A0713C064646499B5FC4A18031B0F4A6D93B6FC0107B500FE151FBFFC1E80
-A5>102 129 121 256 118 76 D[<B700F899B712F07063A37063A2D8000757C7FCD900
-7F6DE107BF13E06E6803BF6DF20F3F021F68A2039F6D1A1EA2038F6D1A3CA303876D1A78
-A303836D1AF0A203816DF101E0A303806DF103C0A3706CF10780A2706DF00F00A3706D18
-1EA3706D60A2706D60A3706D60A2706D4D5AA3706D4D5AA3716C4D5AA2716D4CC7FCA371
-6D161EA3716D5EA2716D5EA3716D5EA2535A717FA2716D4B5AA3726C4B5AA2726D4AC8FC
-A3726D141EA3726D5CA2726D5CA3726D5CA3726D495AA2726D495AA3736C495AA2736D48
-C9FCA373EBC01EA3736D5AA2736D5AA3736D5AA373EBFDE0A273EBFFC0A3745BA34A6C70
-90CAFCA24A6C705A4A7E496D537F010701FE705A011F6D6C99B57E48B600F86F48040F14
-FEB800F04EB912F0A2745AA3DA801F7048EFF001>156 129 120
-256 173 I[<B700F094270FFFF801B5FC7096B7FC82A28282D80001E0001F1580D9001F
-6E0501ECF80071716C13E00C1F1380717290C7FC71725A785A03BF7F039F6D725A83158F
-03877F841583038180841580707F8482707F8482707F858270808582717F717FA2717F71
-7FA2717F7180A271807180A2727F727FA2727F727FA2727F7280A272807280A2737F737F
-A2737F737FA2737F7380A273807380A2747F747FA2747F747F88867414801DC0867414E0
-1DF0877513F81DFC877513FE1DFF877514811EC1877514E11EF1887613F97613FDA27613
-FF88A28888A28889A28989A28989A2894A6C85A24A6C854A6C1A7F497F010701FE1A3F01
-1F6D6C191F48B612F8B800F0180F1E07A21E031E01DA801F745A>128
-129 122 256 141 I[<953801FFFE063FEBFFF00503B7FC051F16E0057F16F80403B5D8
-800713FF040F01F8C76C13C0043F01C0020F13F04C90C800037F922601FFFC030013FE4B
-01F0EE3FFF030F497013C04B018004077F4B90CA6C7FDBFFFE7113FC4A49717F4A49727E
-4A49727F4A49727F4A49727F4A49727F4A90CC6C7F91B5874B854949737F49894949747F
-4B86498A4949747FA24949747FA24949747F90B589A24891CE6C7FA2488B4A87A2482080
-A248497514C0A34820E0A24A88A24820F0A44820F84A88A5B51FFCB26C6D5213F8A66C20
-F0A26E99B5FCA26C20E0A36C6D5114C0A36C20806E63A26C20006F626C67A26C6E505BA2
-6D666F626D666F626D666D6D505BA26D6D97B55A6D9BC7FC6D6D4F5B6F616D656E6D4E5B
-6E6D4E5B6E6D4E5B6E6D4E5B6E646E6D4E90C8FC6E6D4E5A6E01FF05035B6F6D4C5B031F
-6D4C13E06F6D4C5B6F01F8047F5B03016D4C48C9FC6F6CB4030313F87001E0021F5B040F
-01F8027F13C004039026FF8007B5CAFCDC007F90B612F8051F16E0050393CBFCDD003F14
-F0060149CCFC>126 137 118 260 147 I[<BC7E1BFEF3FFC01CF81CFF1DC0D8000702FC
-C8000F80D9007F01F0DB007F13F86E49040F13FE09037F6E0600807613E00A1F7F767F76
-7F888A767F1F80881FC07713E0A21FF0A37713F8A41FFCAA1FF8A45313F0A21FE0A29AB5
-12C0A21F80521400A2525B525B66525B0A3F5B525B99B5C7FC09035B090F13F8097F5B08
-0FB512C093BAC8FC1CF81CE051C9FC1B8004F0CEFCB3B3AE4A7FA24A7F0107B612C0B912
-FEA59138FC007F>110 129 121 256 128 I[<BB12E0F2FF801BF81BFF1CE01CFCD80007
-02FCC814FFD9007F01F00307806E49030014E0091F13F86E06077F7513FF090080767F76
-7F767F767F8A767FA2767FA276808BA38B88A28BAA67A26467A267A25291C9FC66646652
-5B66525B525B5290CAFC525A09035B090F13F0093F13C098B5CBFC080713FC97B512F093
-B9128009FCCCFC1BE01BF804E0C7000113FFDF003F13C008077F7413F808007F75B4FC75
-7F757F757F89757F8789757FA289878AA2888AA58AA68AA58AA68AF90380F907C0A2888A
-A376160F8A7617804A7F766E131F4A6D1D000107B66C705EB900FC6F8076167E776D5B0B
-1F7F779038F803F89126F8007F06039038FE0FF0D190B55A0C3F14800C0791C7FC9B3800
-3FF8>130 133 121 256 139 82 D[<922603FFF01538033FD9FF80147C4AB600F014FC
-020715FC021F03FF1301027FD9001FEBC003DAFFF0010013E0010301C091381FF8074990
-C8EA07FCD90FFC923801FE0F4948923800FF1F4948EE3F9F4948EE1FFF49488248498248
-8491CA7E484883A24848187F001F193FA249181F123F1A0FA248481807A31A0312FFA21A
-01A27FA21A007FA37F1B7C7F6C7FA26E18386E95C7FC806C7F806C13FF8115F06C14FEED
-FFE06C15FE6CEDFFE017FE6CEEFFE06C17FE6DEEFFC06D17F86D17FE6D717E6D846D18F0
-0100846E17FE021F83020784020184DA003F83030383ED003F040382DC003F811703DD00
-3F801803DE007F7F191F73148019037314C085867413E0A28686A200707313F012F886A3
-86A37E86A47E1CE0A27EA2626D1AC0A27F6D4E1380A26D4E13007F505A7F6D4E5A6D616E
-173F6E4D5A02F04D5A6E4C5BD9E7FE4C5B9026E3FF804B90C7FC01C001E04B5A9026807F
-FCED3FFC91261FFFC049B45A496C01FF010F13E0020391B65A48010094C8FC48023F15FC
-030715F048DA007F14800070030101F8C9FC>84 137 118 260 105
-I<000FC012F8A5488B03E0C76C91C7120302FCC8001F01FCEC001F02E06F49150302801B
-0049C9193F491D1F491D0F491D07491D03A24848777EA2491D00A390CA1A7EA3003E1F3E
-A3007E1F3FA3007C8BA848F70F80A5CB97C7FCB3B3B3B3A34E7F4E7F4E7F050FB612F803
-7FBBFCA59538F8000F798079FF88>I[<B500FC90267FFFFE92270FFFF801B5FC91B795B7
-FCA5D8000703C0CA001F1580D9007F01FCCB0001ECF8006E49726C13E00C1F13806E4973
-90C7FC785A785AA2785AB3B3B3B3A61E03A26E6482A21E078067A270190F80676E1B1F70
-626E1B3F826F50C8FCA26F6D18FE1D016F6D606F6D4D5A6F1907714D5A6F6D4D5A6F6D4D
-5A6F6D4D5A706C17FF706D4B90C9FC706DED07FE04076DED0FF87001F8ED3FF07001FE4A
-B45A9327007FFFC001075B051F01FC90B5CAFC7190B65A050316F8DD007F15E0061F92CB
-FC060114FCDE001F1380>128 133 122 256 141 I[<B5D8E007B500E0932603FFFEEBFF
-FC91B796B6FCA5D8001F03E0CB001F150001014ACC000314F06D4A7314C06E49736C90C7
-FC4C745A6E656E765A706368807063A26E65701A3F6E9AC8FC82676E1C7E831FFE6E6471
-18016F63831E036F63831E076F6371180F6F63831E1F6F63831E3F6F98C9FC71606F1A7E
-841EFE6F62841D0170617216037061841D077061841D0F706172161F7061841D3F7096CA
-FC846570187E7315FE7060851C01715F851C03715F731407715F851C0F715F73141FA271
-5F73143F7194CBFC856471167E7413FEA2715EF2C001725D1AE01B03725DF2F007A2725D
-F2F80F725D1AFC1B1F725DF2FE3FA27292CCFC745A72147E1BFEA2725CA3735BA2735BA3
-735BA3735BA2735BA37390CDFCA3735AA2735A>134 133 125 256
-141 I[<261FFFF890B500FE4AB539E00FFFF091B795B6FCA5D8000304C0DA001F03F8C7
-FCD9003F4AC9000392C8FC020F02F87014F86E4A7014E06E4A7113806E7448C9FC6E6366
-6F6D715A6F6D4D5A666F6D606F6D177F9BCAFC6F6D17FE6F6E1501656F6E4B5A6F6E1507
-65706D4B5A72151F7060706D4B5A724BCBFC82706D15FE515A7080706E495A515A708071
-6D495A515A717F716D495A51CCFC717F716D13FE505A71148171ECC3F8F2C7F07114E772
-EBFFE06384725C98CDFC8484A27280878472808785737FA24F7F8796B5FC4E8088F003FB
-DE07F18007F0804E5A4E486C7F063F6D7F19804E486C7F4E6D7F604D486D7F05036E8060
-4D486D80050F6E80604D486E7F053F834E804DC86C7F4D834D814C486F7F16034D6F804C
-486F80160F4D6F804C48707F163F4D707F4CCA6C7F5E4C717F4B48717F15034C71804B48
-7180150F4C7180031F737F4B5A037F737F03FF737F5C4A747F4A88021F6D874A6D4E8049
-B56C4E80010F02FE95B67E90B76C040715FFB800F893B912F0A5DA003F9738FC007F>
-132 129 124 256 141 88 D[<0007BD12F81DFCA504F8C9003F13F84BCA4813F015F003
-8094B512E04ACA5A4801F81AC04A4D14805C4A4D14004A4D5B91CBFC494E5B494E5BA249
-4E5B4995B5FC644F5C5B4F5C494D91C7FCA24F5B4F5B5B4F5B001F606396B55AA290CA48
-5C4E5CA24E91C8FC60624E5BCBFC4E5B4E5BA295B55A4D5CA24D5C5F97C9FC4D5BA24D5B
-4D5BA24D5B94B5FC614C5C5E614C91CAFCA24C5B4C5BA24C5B5E6093B55AA24B5C4B5CA2
-4B91CBFC4B49173EA24B5B5D5F4B5BA292B548177E4A4A177CA24A5C5C94CBFC4A5BA24A
-5B4A4918FCA24A5B91B55AA2494A17015B5E4991CB12031DF8495B49491807A24949180F
-495B1C1F90B548183F481B7F5D484A18FF1B034891CB5A4849601B3F484995B5FC481907
-4A053F14F04849041FB6FC91BCFCBEFCA57E>95 129 118 256 115
-90 D[<B612C0A890C8FCB3B3B3B3B3B3B3B3B3AA90B512C0A8>26
-188 107 268 52 I[<B612C0A8C7123FB3B3B3B3B3B3B3B3B3AAB6FCA8>26
-188 124 268 52 93 D<92381FFF804AB512F8020F14FF027F15E0902701FFF80313F849
-90C76C7ED90FF8EC1FFFD91FE002077FD93F806E7F49C86C13F0496C6E7F02E0157F4801
-F8826E6F7E6E6F7E5A6E6F7FA28684A286846C5BA26C5B6D5AEB1FE090CAFCA794B6FC16
-3F0307B7FC153F4AB5EAF80302071400023F13F091B512804949C7FC010713F8011F13E0
-495B4990C8FC495A485B485B485B5A5C485B5A5C481BF8A291C9FCA2B5FC5B60A460A26D
-5EA26C173E6E157E953A7C7FF001F06C6D15F86C16016C6D913B03F03FF803E06C6DDA07
-E0EBFC076C6D913B0FC01FFE0FC06C01FEDA3F8090B512806C6C6C6C9026FF000F14006D
-9026F00FFC6D5B010F90B5486D5B010103E0010013F0D9003F0280EC3FC0020101F8CBFC
-555679D35E>97 D[<EC0FE048B5FCB6FCA6C67E130F7F7FA27FB3B1943803FFE0053F13
-FE94B612C0040315F093260FFE0013FCDC3FF0EB0FFFDC7F80010313C004FEC87FDBE3FC
-ED7FF8DBE7F06F7EDBEFE06F7E4C6F7EDBFF806F7F93C96C7F4B84747F4B707F5D757E4B
-841B3F88A2751380A21DC0A27513E0A31DF0A387A21DF8AF1DF063A31DE0A35113C0A31D
-80631D00A2515A6F601BFF6F60505B6F4C5BA26F4C5BDBDF804B5BDB8FC04B90C7FC70ED
-3FFCDB07F04B5A6F6C4B5A4A6C6C020313C06FB4020F5B4AD93FC0D93FFEC8FC4A903A1F
-FC01FFF80407B612E04A0101158090C96C01FCC9FC05071380>93
-133 123 258 105 I<93383FFF800303B512FC031FECFFC0037F15F04AB712FC0207D9F8
-007F021F0180903803FF804A48C8EA7FC04A48ED1FE0902601FFF0ED7FF04949EC01FF49
-494A13F849495C4990C814FC495E495A5C13FF485B5A5C487113F85C487113F07213E048
-499238007F8096C7FCA25A5CA25AA491CCFCB5FCAF6C7FA57E80A27E6E170E6C191FA26C
-6D173FA26C6D177EA26C6D17FC7E6E1601017F18F86D6CEE03F06D6D15076D6DED0FE06D
-6DED1FC06D6DED3F806D6DED7F006D6D15FEDA3FFFEC03FC6E01C0EB1FF802079039FC01
-FFE06E90B65A020093C7FC031F14FC030314E09226003FFEC8FC48567AD354>I[<F201FC
-F13FFF061FB5FCA6F0000F1901851A7FA21A3FB3B193380FFF804BB512F0030F14FE033F
-809226FFFC0113C002039039E0001FF0020F0180EB07F84A48C7EA01FCDA7FF8EC00FE4A
-48153F4949ED1FBF010749ED0FFF495B4990C97E49488285495A4948825A4A177F5A485B
-A25A5C5AA3485BA35AA391CBFCB5FCAF7EA280A37EA36C7FA27EA26C7FA27E6E17FF6C60
-6C7F616D7E6D6C5E011F5F6D6C4C7F6D6D5D6D6D4B6C7E6D6D03FE806D6DDA01FC14F0DA
-3FF8DA07F8ECFFF8DA1FFEEC0FE0912607FF80EB7FC002019039F807FF806E6CB5EAFE00
-031F14F8030302C0EDFC009226003FFEC790C8FC>93 133 122 258
-105 I<EE7FFC0307B512C0033F14F892B612FE02039039E01FFF80020FD9000313E0DA3F
-FC01007F4A48EC3FFCDAFFE06E7E0103496E7E49496E7F4990C880498249486F7F4A8301
-7F8249488348187F4A835A4849163F865A4A161F4885A25C5A851B805AA291CAFCA3B5FC
-91BAFCA31B0091CDFCAA7EA280A37EA36C7FA21A076C6DEF0F80A26C191F806CF13F006C
-7F1A7E6C7F017F606E16016D6C5F6D6D4B5A6D6D15076D6D4B5A6D6D4B5A01006D4B5ADA
-7FFE03FFC7FC6E6CEC03FE020F01E0EB1FF86E01FCEBFFF0020190B612C06E6C5D030F02
-FCC8FC030114F0DB001F90C9FC49567BD354>I[<933801FFC0040F13FC047F13FF4BB612
-804B9038C07FE0923A0FFE000FF0DB1FF8EB3FF8DB7FF013FF4B484813FC4A13C04A4948
-13FE16005C4A5AA24A5AA24A486D13FCA2027F6E13F84BEC7FF0F01FC095C7FC14FF5DB3
-AAB912C0A6C701F0C9FCB3B3B3AB815B497F010FEBFFC0007FB712FCA5ECC01F>63
-133 123 260 58 I<F201FE97381FFF80922603FFE0027F13C0033F01FE49B512E092B6
-D88007EB0FF002039239E00FF01F020F923AF81FC03FF8023F01809038FE7F0091297FFC
-001FFFFE137FDAFFF0010713F80103496D5B49496D153F49496D7F92C8007FEC1FF04948
-6F6CEB0FC0013F7190C7FC4A151F017F8301FF844A81A24885A24A814885AC6C616E5DA2
-6C61A26E5D017F95C8FC013F5F6E153F011F5F6D6C4B5A6F14FF6D6D495B6D6D495B6F49
-13804901FC011F90C9FC499039FF80FFFE028F90B512F8D91F8315E00200158049013F49
-CAFC030313E0013E90CDFCA2137EA3137FA380A28080133F14F814FE6DB712FCF0FFF06D
-17FF1AE06D18F86D18FE6D846D19C087010385010F85D93FFEC8000780D9FFF0DB001F7F
-4801C004037F4890CBFC4848063F13804848180F001F8548487213C05B007F85491AE086
-12FF49197FA66D19FFA2007F1BC06D60A26C6C4E13806C6C4E13006D606C6C4E5A6C6D4D
-5A6C6D4D5A6C01F04C485A6C6C6C4C13C06DB4041F5B010F01C0DB7FFEC7FC6D01FC9138
-07FFFC0101D9FFE090B512F06D6C90B712C0020F4CC8FC020116F0DA001F92C9FC030014
-E0557D7BD45E>I[<EC0FE048B5FCB6FCA6C67E130F7F7FA27FB3B1F0FFF8050FEBFF8005
-3F14E094B612F84C9038807FFE933A07F8001FFFDC0FE001077FDC1F806D7F047FC78004
-7E6E7F16F803E16F7FEDE3F0DBE7E0157F4C82EDEF80A203FFC9FC747E5DA25DA35DA45D
-B3B3AA496D4C7E496D93B57E013FD9FF80020714F0B8D8E01FB712FCA5DA803FEEF007>
-94 131 122 258 105 I<EB03F0EB0FFCEB3FFF497F90B57EA24880A86C5CA26D5B6D90
-C7FCEB0FFCEB03F090C9FCB3A6EC0FC048B5FCB6FCA6C67E131F7F7FA27FB3B3B3A7497F
-497F013F13FCB712FEA51400277F79FE35>I[<EC1FC00003B5FCB6FCA6C6FC131F7F7FA2
-7FB3B3B3B3B3B3497F497F013F13FCB8FCA51400>40 131 121 258
-53 108 D<DA0FE0DAFFF893380FFF8048B50207D9FFC0037F13FCB6023F02F00203B6FC
-94B600FC020F15C04C9026807FFE91261FF8077F932907FC000FFF8090267FC00013F8DC
-0FE001036D01FEC7EA3FFCDC1F809226E001F881C66C4AC76C6D48486E7E010F027E6E4A
-48806D4A704848826DD9E1F86F6C48486E7FDBE3F04DC8FC6D4A033F013E81DBE7C07048
-8303EF18FC4C5F03FFC96D5A74717F4B60A24B60A34B60A44B95C9FCB3B3AA496D4C6D4B
-7F496D4C6D4B7F013FD9FF800203B500F8033FEBFF80B8D8E00FB700FE90B812E0A5DA80
-3FDCF803EF803F93537AD29E>I<DA0FE0ECFFF848B5020FEBFF80B6023F14E094B612F8
-4C9038807FFE933A07F8001FFFDC0FE001077FDC1F806D7FC66C027FC780010F027E6E7F
-6D14F86D01E16F7FEDE3F06DD9E7E0157F4C82EDEF80A203FFC9FC747E5DA25DA35DA45D
-B3B3AA496D4C7E496D93B57E013FD9FF80020714F0B8D8E01FB712FCA5DA803FEEF0075E
-537AD269>I<EE1FFF4BB512F0030F14FE037FECFFC0912701FFF80313F0020790398000
-3FFC4A48C7EA0FFEDA3FF8913803FF804A486E7FDAFFC06E6C7E49496F7E4990C96C7E49
-48707E4948707E011F844948707F4948707F01FF854A82488648864A177F4886A2484971
-7EA24886A3481B8091CB7EA2481BC0A5B51AE0AE6C1BC0A46C6D4D1380A36C1B00A26E5F
-6C62A26C626E17FF6C626E5E6C626C6D4C5B017F616E5E013F616D6C4C90C7FC6D6C4C5A
-6D6D4B5A6D6D4B5A6D01F04A485A6D6D4A5BDA3FFE020F13806E6C6C013F90C8FC020790
-39F803FFFC020190B612F06E6C15C0031F92C9FC030114F0DB001F90CAFC53567BD35E>
-I<DA0FE0903801FFF048B5021F13FFB691B612E0040315F8040F15FE4C48C66D7EDC7FF0
-011F7FDCFF80010713F0C66CD9E1FEC700017F010FD9E3F86E7F6DD9E7F06FB4FC6DD9EF
-E06F7FDBFFC06F7F6D4A6F7F93C9FC4B707F4B707F884B82747F4B84A2751380A27513C0
-A37513E0A37513F0A51DF887AD631DF0A41DE063A21DC063A21D80631D0098B5FC646F4C
-5BA26F4C5B646F4C5B626F60704B5B704B90C7FC70ED7FFCDBF7F04B5ADBF3F84A5BDBF1
-FC020713C0DBF0FF4A5BDC3FC0D97FFEC8FC933A1FFC03FFF80407B612E004011580706C
-01FCC9FC0507138094CCFCB3A8497F497F013FEBFF80B812E0A5EC803F5D787BD269>I<
-DC1FFE153C4BB500E0147C030F14F8037F14FE4AB714FC0207D9FE0113C04A903AF0003F
-E001023F0180EB0FF04A90C7EA03F8DAFFFC913801FC03010349EC00FE4949ED7F074949
-ED3F874949151F4949ED0FCF5B92C9EA07FF495A4884485B4A825A4A825AA24849177FA2
-485BA21A3FA2485BA4B5FC91CBFCAE6C7FA56C7FA37E806C197FA26C7F1AFF6C7F616C7F
-6C606E5E137F6D6C5E6D6D5D6D7F6DEF3F7F6D6D157E6D6D15FC6D6DEC03F8DA3FFEEC07
-F06E6CEC1FE0020701C0EB7F8002019039F807FF006E6CB512FC031F14F0030314C09226
-003FFCC7FC93C9FCB3A8507E4F7F070F14E0063FB712F8A5F2E00F5D787AD264>I<DA1F
-80EB1FF80003B5ECFFFEB60103EBFF804C14C093391FF03FE093393F807FF093397E01FF
-F816FCC6912681F80313FC011FEB83F06DEB87E06D14C0ED8F807FED9F007113F815BE71
-13F003FCEC3FC0F006004B91C7FCA35DA45DA55DB3B3A5815B497F013F13FFB812F0A5EC
-007F3E537AD24A>I<912603FFF8130E027F01FF131F49B6EAE03F010F6F5A499039001F
-FDFFD97FE00101B5FCD9FF806D7ED803FEC8121F4848814848814981484881123F498112
-7F4982A28412FFA36D82A27FA27F7F6D160E6C6C93C7FC6D7E14F06C13FEECFFF06CECFF
-8016FC6CEDFF806C16F06C16FC6C16FF6C83013F16E06D820107820101826D6C81020781
-DA007F1580030115C0ED000F040114E0EE003F050F13F000708200F8827113F86C82187F
-183FA2181F7EA2180F7EA27F19F0A27F181F6D17E07FF03FC07F6DEE7F806D16FF6D4B13
-006E4A5A6E4A5AD9CFF0EC1FF8D987FCEC7FE0903B01FFC007FFC0486C90B6C7FC48013F
-14FC48010714E00070010001FCC8FC3D567AD34A>I<15F8A81401A61403A31407A3140F
-A3141FA2143F147FA214FF5B5B5B5B5B5B90B9FC120FBAFCA4C701F8C9FCB3B3A5F003E0
-B0180781027F16C0A2180FA26E6C1580181F6E7EF03F006E7F6E6D137E705B6EEBF00102
-009038FC0FF86FB55A031F5C6F1480030149C7FC9238001FF83B767DF349>I<DA07F017
-FE48B5EE3FFFB6031FB5FCA6C66CEE000F010F17016D836D187FA26D183FB3B3A91A7FA4
-1AFFA361A27F6181F107DF027F160FF29FFF6E6CED1F1F073F806E6C037E80020F04FC14
-F86E6CDA01F8ECFFFC6E6DEB03F06E01E0EB0FE06E01FEEBFFC0033FB61200030F5C0301
-02F8EDFE00DB000F018002C0C7FC5E557AD269>I<28FFF803FFFC913A07FFC07FE090B6
-94B5FCA5C692C9ECFE00011F01FC043F13F06D497013C06D497090C7FC745A6D616D61A2
-6F5F7F6F5F147F636F160F023F606F161F6E95C8FCA2705D6E173E70157E6E177CA27015
-FC6E5F7014016E5FA27014036E5F701407037F5EA270140F033F5E70141F6F93C9FCA271
-5B6F153E71137E6F157CA27113FC6F5DEFF0016F5DA2EFF8036F5DEFFC07047F5CA2EFFE
-0F043F5CEFFF1F7091CAFCA218BF7013BE18FE705BA3705BA2705BA3705BA2715AA3715A
-A271CBFC5B537CD064>I<2EFFFC03FFFC01FFE01FFFE0903A7FFF01FF8090B692B693B5
-FCA5C692C7000102F0C70007ECF000011F01F86E6C01C0020014806D496F496F90C7FC6D
-7190C9EA3FFC4B755A6D83795A6F6F606D85686D6D81755E4F171F6E6C99C8FC876F4B5F
-023F1C3E876F4B177E6E057F167C8770DA3E3F16FC6E64077E7F70DA7C1F15016E6407FC
-7F70DAF80F15036E725D18016E6D4A6C4B5A880603170F6E6D4A6C5E88700107171F037F
-4B6C93C9FC8870010F5F033F4B6C153E887049C7007F147E6F1A7C4E81DD803E023F14FC
-6F62067E81DDC07C021F13016F06FE5B18FC6F6D48020F495A1CFF05E117076FD9F1F06E
-5C1D8705F3178F6FD9FBE06E5C1DCF05FF17DF70496E91CAFC1DFF4E807060A295C9127F
-7060A24D163F040F60A27048705AA37048705AA37048705A81537DD088>I<287FFE01FF
-FE913A3FFF80FFF090B694B5FCA5D8001F02F0020FECFC0001034A020314C001004A4CC7
-FC6E496E13F86E18E06E606E607093C8FC6E6D15FC6E6D4A5A80704A5A6E6D4A5A6F6C4A
-5A6F6C5D6F4BC9FC715B6F6D13FE6F6D5B6F4A5A71485A6FEBF8076F6D485A047F5C7148
-5A706C48CAFC7013FF705B705B60705B707F8284717E717E5F94B57E854C80DC03F37FEE
-07F1DC0FE17F05C07F4C486C7E93383F003F4C8004FE6D7F4C6D7F4B487F4B488103076E
-7F4B486D7F4C6D7F4B48147F4BC87F4B6F7E03FE6F7F4A48810203844A486F7F020F707F
-021F82023F8402FF84498501076D4B7F013F1AC00003B6030F14F8B700C0027FECFFFEA5
-D9F01FF0807F5F517ED064>I<28FFF803FFFC913A07FFC07FE090B694B5FCA5C692C9EC
-FE00011F01FC043F13F06D497013C06D497090C7FC6D725A636D6181636D6181147F6F4C
-5A023F60A26F161F6E95C8FC705D6E173E821A7E6E177C7015FC6E5F8219016E5F701403
-6E5F701407037F5EA270140F033F5E70141F6F93C9FCA2715B6F153E71137E6F157C8319
-FC6F5DEFF0016F5DEFF8036F5DA2EFFC07047F5CEFFE0F043F5CA2EFFF1F7091CAFC18BF
-7013BE18FEA2705BA2705BA3705BA2705BA2715AA3715AA271CBFCA25F173E177E177CA2
-17FC5F16015F16035FA216075F486C140FD80FF05DEA3FFC161F486C92CCFCB55C163E16
-7E167C5E1501495C007F140349495A49495A6C48495A90C748CDFC6C6C137E390FE001FC
-3907F807F86CB55AC614C0013F90CEFCEB07F85B787CD064>I<0007BA12F81AFCA30380
-C7000313F802F0C85A02C04B13F091C914E048484C13C0495E494C1380491800494C5A5F
-4D5B495F4D5B5F494B5B614D5B5F94B5C7FC001F5F90C8485B5E4C5B604C5B5EC9485B60
-5E93B5C8FC4B5B5F5D4B5B4B5B5F5D4B5B4B5B94C9FC92B5FC4A49157C4A5B5E5C4A5B5E
-4A4915F85C4A5B93C9FC4A5A5B495B4B1501495B5B495B4B1503494916F05B90B5C91207
-5C4849160F48181F485B4A163F484916FF485F484915074A153F4890C80003B512E0BBFC
-A47E46517BD054>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fh cmbx12 29.8656 34
-/Fh 34 122 df<EB03FC90381FFF80017F13E048B512F8488048804880481580A24815C0
-A24815E0A3B712F0A86C15E0A36C15C0A26C1580A26C15006C5C6C5C6C5C6C6C13E0011F
-1380D903FCC7FC90C9FCB3B3A2EB03FC90381FFF80017F13E048B512F848804880488048
-1580A24815C0A24815E0A3B712F0A86C15E0A36C15C0A26C1580A26C15006C5C6C5C6C5C
-6C6C13E0011F1380D903FCC7FC246E6CED4D>58 D[<F51FF8F57FFEA29AB5FCA25280A2
-5280A35280A25280A35280A25280A35280A299B7FCA35182A25182A35182A25182A35182
-A25182A35182A298B9FC1CFB1CF350841CF15001E1821CE064506E81A250018082891C00
-506E81A25048838950488389A2504883894F498489A24F4984894F49848AA24F49848A4F
-90C8828AA24F48858A4F48858AA24F48858A4E49868AA24E49868A4E49868BA24E49868B
-4E90CA828B61063F888B4E48878B6106FF7281A24D49888B614D7382A24D49888C4D4988
-8C96BEFC4D8AA24D8AA34D8AA294C1FCA34C01F0CC0003828C4C498A8CA24C498A8D4C49
-8A8DA24C90CE828D4C488B8DA24C488B8D4C488B8DA24B498C8D4B498C8D5F4B8E8E4B49
-8C8E94D0FC4B7881A24B488D8E5E037F78814AB5FC91B600FE8CBA00F04DBDFCAA9126C0
-00010CC0C71201>192 173 119 300 211 65 D[<C112C0F8FF8021FCF9FFC022F822FF
-23C023F023FC23FFA112C0C8003F0380CA000F820D00820E1F15FC0E07810E01817A827B
-817B817B818D7B817B81A27B81A17F8DA1808EA27C81A3A1808EA3A180ABA15CA36AA15C
-A3585DA2A191C7FC9FB7FCA15B69A15B575D69A15B575D575D575D5792C8FC9EB65A5615
-F80E075D5615C00E3F5D9DB648C9FC0D0715F80D7F15E00C3FB7CAFC96BC12FC22E057CB
-FCA2F9FFF8FAFF8023F023FE0780CB003F6E7E0E0715E00E0015F80F3F14FE7B6E7E0F07
-817B15F07B817B817C807C807C81A1807C817C81A1808EA1807C81A2A1808EA11580A27D
-15C0A3A115E0A28FA3A115F0ACA115E06BA4A115C0A0B7FCA2A115806AA2581600A2585D
-6AA15C585D6A585D9FB75A575E69575E0F1F93C7FC575D9EB75A0E0716F00E3F5E0D07B8
-5AC5B4C8FCA15AA112F8A112E0A1128011FCC9FC23F0238010F8CAFC9FCBFC2180>172
-170 118 297 198 I[<0A03B500E0F00F800907B76CEF1FC098B800F8173F081F05FF17
-7F4FBA00E016FF070F07FC5D077F07FF5D0603BC00C05C060F09F05C063F09FC5C4DBE5C
-05079426FC00036F90B5FC4D4CC8001FECE001053F04C003016E5A94B700FCCA003FEBFC
-07040304E0050F6D5A4C93CB00036D5A041F03FC060014BF4C03F0073F90B6FC4C03C019
-0F4BB7CD7E4B03FC864B4B1A004B03E0874B4B87037F4B8792B7CF7E4A03FC884A4B884E
-884A4B884A8D4A5D4A4B894A92D17E4D8A91B6FC494B8A495DA17E494B8AA2494B8A5B4D
-8B5B5F498FA290B7D37EA25A4C8CA25A5E48A17EA35A5EA17F5AA35E48A16C1380A190C8
-FCA45AA35EA4B7FCB3A27EA482A37EA57E82A1ECFF80A14913C07EA2827EA36C81A26CA1
-5AA11580827EA26D6F67A115007F71676DA15A836D231F6D6F68A1133F6D8171555A7F6D
-6F555A6E6971686E6F535B6E6F656E6F676E6F656E5790C7FC72535A6E03FE535A6E6F1D
-FF6F6F515B031F6F515B6F03F0090F5B6F6F515B6F03FE515B6F6F98B5C8FC6F6C03C04F
-5B7003F007075B7003FC071F5B0407DBFF80067F13E07004E04DB55A040004FC050F5C05
-3FDBFFC0047F49C9FC050F04FE0307B55A71DCFFFC49B612F0050194B95ADD003F1C8006
-0F51CAFC06031BF8DE007F1AC0070F97CBFC070119F8DF001F18C008004DCCFC090716C0
-E1000302F0CDFC>170 176 113 300 201 I[<C512FCA4A17EA7C8003F03E0CA121FF700
-3F0E0381F8007F210F210321008E8E220F7C808E8EA28E8FA28F8FA17F8FA28FA38FA2A1
-7F8FA48FA3A17FF61FFCA1127FA7A16C7EA31E3FA1C8FCA41E7FA31EFF65A26565651D3F
-650A03B5FC1C7F96B9FCAB07E0C77E1C03F4007F891D0F898989A2891E7FA31E3FA2A1EB
-7FF0A30C1FF0FFE0A6A14813C0A59BCB5AA11480A3A15AA3A11400A15AA3A15AA2A15BA1
-123FA2A1127FA3A1485AA26B6BA26B6BA15B6B6B6BA0B5FC6A10075C6A6A227F57B6FC21
-070F3F5D56B7FC203F0D1FB8FCC5B4FCA2A15BA6A15BA3>164 169
-118 296 183 69 D[<B600E0033FB500F892B600E0033FB512F892BA96BAFCAAC8003F03
-E0CE003F03E0C8FCB3B3B3AB96C1FCAB07E0CE123FB3B3B3B2BD00F892BD12F8AA03E0C8
-003F09E0C8123F>197 170 118 297 218 72 D[<B600E0030FB612F092BBFCAAC8003F
-03E0D0FCB3B3B3B3B3A29F3803FF80A46AA11200A66AA36BA3221FA4223FA3585AA322FF
-A369A2696B69A26969A269699EB5FC68565C686868689DB6FC671F071F1F9CB7FC0C035E
-1E3F0B07B8FCC4FCA66BA5>145 170 118 297 168 76 D[<BA00E09EBA12F073687368
-7368A37368A27368A27467C8003FA105C0C8FC74F77FEFA304FD6FF7FFCFA204FC6F5413
-8FA2716E54130FA2716EF607FEA3716EF60FFCA2716EF61FF8A2716FF53FF0A2716FF57F
-E0A3716FF5FFC0A2716F521380A2726E521300A2726E525AA3726E525AA2726E525AA272
-6F515AA2726F515AA3726F515AA2726F505BA2736E5090C7FCA2736E505AA3736E505AA2
-736E505AA2736F4F5AA2736F4F5AA3736F4F5AA2736F4E5BA2746E4E90C8FCA2746E4E5A
-A3746E4E5AA2746E4E5AA2746F4D5AA2746F4D5AA3746F4D5AA2746F4C5BA2756E4C90C9
-FCA2756E4C5AA3756E4C5AA2756E4C5AA2756F4B5AA2756F4B5AA3756F4B5AA2756F4A5B
-A2766E4A90CAFCA2766E4A5AA3766E4A5AA2766E4A5AA2766F495AA2766F495AA3766F49
-5AA2766F485BA2776E4890CBFCA2776E485AA3776E485AA2776E485AA277EDBFF0A277ED
-FFE0A3775EA2775EA27892CCFCA2785CA3785CA2785CA2785CA2785C92B5FC027F14FEBB
-704A043FBC12F0A2785CA27990CAFCA2795AA2795AA202F0C7000FDF07F008F0C8123F>
-244 170 118 297 265 I[<0903B512F050B712E0087FEEFF800707B912F8073F18FF4E
-BB12E0060F1AFC063F1AFF4DBD12E00507DCC00016F8051F03F0C7000315FE057F0380DA
-007F6E7E94B600FCC9000F81040303F0040315F0040F0380DC007F14FC4C92CB6C80047F
-02FC060F6E7E93B600F00603814B4B728103074B7215F84B92CD003F804B4A74804B4A74
-804B4A748192B64874814A4B74814A4B74814A4B75804A8E4A92CF6C804D884A8E4A4A76
-8191B6487681A2494B768149A17E4D8849A17E494B7681A2494B7780A249A17E94D17E49
-A17FA290B6487881A248A1804C8AA248A180A3484B7881A348A180A24C8A48A180A448A1
-80A44C8AA248A11580A7B7A112C0B3A36CA11580A37066A56CA11500A470666CA15CA46C
-A15CA270666CA15CA36C6F545DA36CA15C70666CA15CA271656DA15BA26D6F9AB7C7FCA2
-6D6F525DA26DA15A6D6F525DA26D6F525D6DA15A71646D6F525D6E6B71646EA0C8FC6E6F
-515C6E6F98B65A6E6F505D6E6A6E6F505D6E6F505D6F6E505D6F6E5092C9FC6F6E505C6F
-6F4F5C6F03E04EB65A6F6F4E5D03006F4E15C07002FE061F5D706E6C057F92CAFC040F6F
-94B612FC7003F004035D040103FE041F15E0706CDAFFC092B71280051F03F802074BCBFC
-0507DBFFC090B712F8050193B912E0716C1B80060F08FCCCFC06031AF0DE003F96CDFC07
-0718F8DF007F1780080304F0CEFCE0000302F0CFFC>178 176 113
-300 209 79 D[<C012FCF7FFFCF8FFE021FEF9FFC022F822FEFAFFC023F08F23FEC8003F
-03C0C90007707EE4001F820D0116F0E5003F810E0F810E03817A817A6C817B817B817B81
-7B818DA17F7B81A27B81A2A114808EA114C0A3A114E0A28EA114F0A5A114F8ACA114F0A5
-A114E06AA2A114C0A2A11480A29FB71200A2A15B69A15B575D69A15B575D575D575D5792
-C7FC56B65A565D0E0F5D0E3F15E055B75A0D1F93C8FC0C07B75A96BD12F823E0238058C9
-FC22F022800FF8CAFC21800EE0CBFC07E0D2FCB3B3B3ABBD12F8AA03E0C8123F>165
-170 118 297 191 I[<BF12FCF6FFFCF7FFF020FF21F021FEF9FFC022F022FC22FF23C0
-C8003F03C0C917F00C0116FCE4001F810D036F7E0D00820E3F810E0F817A15FC0E01817A
-818DA17F7B817B81A17F8DA17F8DA17FA27B81A2A17FA37B82A4A180ABA15CA4A191CAFC
-69A2A15BA2A15B69A15BA2575DA15B575DA2575D5792CBFC9EB65A565D565D5615E00E1F
-5D565D9DB648CCFC0D075D0D3F15F00C03B712C09BB8CDFC96BC12F822E09FCEFC21F821
-8021E021FC21FF07C0C8000716C0E3003F15F00C0F15FC0C03810C00817915C079810D0F
-81798179818F8B79817A81A17E8CA17E8CA17EA28CA17EA37A81A9A17EABA17EAAA16DED
-3FE0A1EF7FF0A28CA2A17FA27A1AFFA27A7016E0A27B6F5CA27B6F16C07B60A16D1680BD
-00F070607B6F4A13007B6F4A5A7B04C0133F7B6C6FEBFFFC7CDBFC035B100F92B65A1003
-60100060113F5F03E0C86C09074CC7FCD76C15F8A1000315E0A1D8000391C8FC>196
-173 118 297 208 82 D[<0007C5B5FCA648A11480A505C0C700034BC8121F04F0C8F200
-7F04801E0F03FCC91B0103F0797E4B8C0380200F4891CA7614C04A8D02F82100A24A8E4A
-8E4A8EA24A8EA291CB89A248A114E0498FA3498FA5498FA2007FA114F0A449A1127FA848
-48A1EA3FF8A6CD9BC7FCB3B3B3B3B3A8047FBF12F0AA08E0C9123F>173
-168 118 295 194 84 D<94B6FC93B712FE031FEEFFE092B912FE0203727E020F19F002
-3F19FC91BCFC499226C0001F814902E0C7000115E0494A6E6C80496E031F14FC70030780
-497280706F81496E6F817580498570857580878A8A878AA26D4A828BA26D5C876D4A866D
-5C6D5C6D5C6D6C48CAFCEC1FF891CCFCAA98B7FC073FB8FC063FB9FC050FBAFC94BBFC16
-0F93BCFC03071781031FEE800192B7EAF000020393C7FC020F15F0023F158091B648C8FC
-4915F8010715E0491580494AC9FC495C495C90B65A485D485D485D5A93CAFC485CA2485C
-A2485CA4B65AA363A463A26F5F7E63816CF23FBF6F177F6C6EDDFF3F80F201FE6C6FDB03
-FC15F86C6F030F16FE6C03F0DB1FF8EDFFE06C6FDB7FF0EEFFFC6C03FE4A48487E6D6E6C
-010F496C16FE6DDBF801B51280010F92B648487E01034E7F010006F07F023F05C06D7E02
-0794C8121F020004FC030315FC030703E0ED003FDB000F01FCCEFC7F7178EF88>97
-D[<EEFFE0011FB6FCB8FCABEA001F13017FA280B3B3A850B5FC087F14FC0707B712C007
-1F16F896B9FC060318C0060F18F0063F18FC95B526FE003F14FF05E102C0010315C005E7
-49C86C8005EF01F0031F8094B500C0030714FC96C96C8006FC0400804E71804E718006C0
-71804E8695CB6C804D72805F4D728078805F8E7881A28E8B8EA28E8BA28EA38EA28BA28E
-A52380B12300A66A67A26AA36AA2676AA26A9CB6FC6AA2545DA2714E92C7FC69714E5C83
-545C714E5C724D5C7262724D5C06F84CB6C8FC4C6C6C4C5C4C6C6C4C5C716C6C031F5C4C
-6C01E0037F14E04C6C01F84AB65ADCE00101FF020F92C9FC4C6CDAF001B65A4C013F90B8
-12F87218E093C7000795CAFC4B020117FC4B6E6C16E04B030F93CBFC4B030115F091CB00
-0F01F8CCFC>137 173 120 299 155 I<061FB57E0507B7FC94B812F8040717FF043F18
-C093BA12F0030319FC030F85033F737E92B648C7814A03E00203804A92C84880020F02FC
-5D4A4A844A02E05D4A4A4B8091B65A4992C9FC494A4C80495C5B495C5E5B495CA290B648
-705C5A5E48745CA248745C93CA6C5C48745C755C756C48C7FC484AF01FF899C9FCA25AA4
-485CA5B6FCB17EA381A37EA46C80A37E827EF6FF806C6F4E13C0A27E70606C1E8070606D
-1D006D6E6070616D1B1F6D6E4E5A6D806D6F4D5A6D6F4D5A6D6F5E6E6E04075B6E02FC4C
-5B6E6E043F5B6E6E6C4B90C7FC6E03E0913803FFFE020103FC021F5B6E9226FFE001B512
-F0033F92B75A030F61030396C8FC030018FC043F17F00407178004004CC9FC050F15E0DD
-001F01F8CAFC6A7177EF7C>I[<F707FF9AB7FC0907B8FCAB98C7FC1D0F89A289B3B3A895
-380FFFF80507B612C0057F15FC0403B8FC041F17E093B912F8030318FE030F18FF033FDB
-C00714C34B02F8C7003F13E34AB600C0020713FB4A92C8000190B7FC020F02FC6F7E4A02
-F0161F4A4A824A02808291B6CA1201494A834987494A84494A84494A84A2494A845B90B6
-5AA2485DA25A93CCFC5AA25A5DA25AA35AA25D5AA6B6FCB17EA57EA281A27EA37EA2817E
-A27E827EA26C6F607F656D6E606D6E60A26D6E95B7FC6D6E5F6D1A076D6E5F6D6E4D826E
-6E5E6E02E093B87E6E6E030317FC020702FC030F01F792B512806E02FF033F13C7020003
-E049B512876F02FE013FEBFE07031F91B712FC030718F0030118C06F6C1700040F16FC04
-0116E0DC001F4AC7FCDD007F01C005E0C8FC>137 173 119 299
-155 I<95383FFFF0050FB612C04CB712FC040FEEFF80047F17F04BB912FC030718FF031F
-19C0037FDAFC00814AB600C0010F14F84A92C70003804A02FC020080021F02F06F7F4A4A
-031F804A02806F8091B6C96C80494A7080494A82494A85497380494A838A494A8349884C
-1A8090B684485D7614C05A93CB15E05A88481EF05DA248871FF8A25AA35D5A7614FCA4B6
-FCA392BDFCA51FF8A203FCCFFCA87EA481A27EA37EA2817EA36C6FF10FF8A26CF51FFC82
-6C1D3F7E70F17FF87F70F1FFF07F6D6E4E13E06D6E60704E13C06D5113806D6E606D03C0
-4D13006D6F4D5A6E6E4C485A6E02FC4C5B6E6E040F5B02076E6C033F5B6E03F092B55A6E
-03FE02075C6E6CDAFFF090B6C7FC031F92B712FC030761030119E06F6C1880040F05FCC8
-FC040117F0DC003F1680050303F8C9FCDD000749CAFC6E7178EF7F>I[<96381FFFE0060F
-B512FE95B712C0050716F0053F8294B812FE040383040F1880043FDAFC0014C04CDAE001
-14E04BB6C64814F04B02FC5B4B4A4914F84B14E04B4A4914FC5D4B4A16FE92B6C75A5F5C
-4A5CA24A5CA25C4D6E14FCA24A7114F8A27414F04A4A6E14E07414C0741480751300F30F
-F898C8FCB3AABCFCABC7003F02F0CBFCB3B3B3B3B0007FBA7EAA02F0C7121F>95
-173 119 300 85 I<F77FF09B3807FFFC94261FFFFE043F13FF0407B600F892B6128004
-7FDBFF80010315C00303B800F0010F15E0030F05FC133F033F05FF4915F092BA00C0B500
-CF13F8020307F3EBF81F020FDB003F91B5EAC03F4A02F00103040014FC4A02C0010015F8
-4A91C8003F5C49B500FC030F4A5B494A6F6E7F494A6F80A2494A6F6E15F849757F494A6F
-6E15F08B494A706E6C13E079138090B69739C000FE009DC7FC488993CA7EA24889A44889
-AB6C65A46C65A2705E6C65A26D64A26D6E93B6C9FCA26D6E4B5C6D636D6E4B5CA26D6E4B
-5C6D6E4B5C6D6C01FF033F14806E02C091B6CAFC05F001035C4A02FF013F5C91BB12F049
-4819C0033F95CBFC902603FC0F17FC030317F04948C66C1680040703F8CCFC010FDA001F
-49CDFC94D0FC131FA3133FA380A38080A2818115F081EDFF8093B812FEF3FFFE6DF2FFF0
-1DFF1EC06D1CF81EFE6D767E1FE06D891FFC6D896D896E898C6E8980020789023F8949BF
-FC01078A131F498A90B6CA12074802F8DD0007814802E0F0007F480280190F4891CD0001
-15804849864A1B3F48894A874820C08AA2B55A8AA76C6D511480A36C6D511400A26C6D51
-5B6E636C6E505BA26C02E04FB55A6C6E4F5C6C6E4F5C6C02FE071F5C6D6D6C067F5C6D02
-E04DB6C7FC010F02F8050714FC6D02FF053F5C010103F80307B612E06D6CDAFFE049B712
-80021F92B948C8FC02071BF802011BE0DA003F97C9FC030719F8DB007F1880040105E0CA
-FCDC000103E0CBFC7EA378F08B>I[<EEFFE0011FB6FCB8FCABEA001F13017FA280B3B3A8
-98380FFFF850B612E0080F15FC083F15FF4FB812C04F17F0070F83073F17FE4FD9E00F80
-9627FFFC000181060301E06D814E01806E804E48C87EDE1FF86F804E48844E4881078084
-4EC9FCDDE1FE82DDE3FC8560EFE7F005EF8660DDFFC082A2608D95CAFCA25FA25FA35FA5
-5FB3B3B3A6BA00F80107BA12C0AA02F0C76C9538800003>138 172
-118 299 155 I[<EC01FE91380FFFC0023F13F091B512FC4980498049814981A24981A2
-4981A24981AA6D5DA26D5DA26D5DA26D5D6D92C8FC6D5C6D5C023F13F0020F13C0DA01FE
-C9FC91CBFCB3A8EEFFE0011FB6FC007FB7FCABEA000F13017FA280B3B3B3B3ABBA12C0AA
-02E0C7FC>58 173 118 300 77 I[<EEFFE0011FB6FCB8FCABEA000F13017FA280B3B3B3
-B3B3B3B3B2BA12F0AA02E0C77E>60 172 118 299 77 108 D<922601FFC092260FFFF8
-96387FFFC0013FB64BB600E0050FB6FCB8030F03FC057F15E0083F03FF4CB712F84FB800
-C0030F16FE4F05F04B707E070F71037F83073F05FE4AB912F04FD9E00F6E4ADA007F8096
-27FFFC00016F4901E0010F80060301E06D6F011F90C76C804E01806E6ED93FFC6E804E48
-C86CDC7FF080D8000FDC1FF86F6ED9FFC06E8101014C48724849846D4C486F4B90C97E07
-8006FC01FC856E4BC94C5ADDC1FE704B4882DDC3FC734848854E63DDC7F0505A05CFE0FF
-7F864E98CAFCDDDFC07003FE83A2DDFF8062A18495CA5EA24D63A24D63A34D63A54D63B3
-B3B3A6BA00F80107BA00C0013FB912FEAA02F0C76C952680000306FCC7121FD76F76EEE8
->I<922601FFC092380FFFF8013FB64BB612E0B8030F15FC083F15FF4FB812C04F17F007
-0F83073F17FE4FD9E00F809627FFFC000181060301E06D814E01806E804E48C87ED8000F
-DC1FF86F8001014C48846D4C48810780846E4BC9FCDDC1FE82DDC3FC8560EFC7F005CF86
-60DDDFC082A2EFFF808D95CAFCA25FA25FA35FA55FB3B3B3A6BA00F80107BA12C0AA02F0
-C76C95388000038A6F76EE9B>I<95380FFFFC0507B612F8057FEDFF800403B812F0041F
-17FE93BA12C0030319F0030F19FC033F9126FE001F14FF4B02E00101814AB6C8003F14E0
-4A02FC030F80020F02F0030314FC4A02C00300804A4A707F4A91CA6C8091B5487180494A
-7180494A7180494A7180494A718049894C834989494A7280A290B68893CC7E488B488BA2
-484A7380A3488BA2488BA24B85A2488BA4482080A6B61EC0B06C2080A56C20006F61A36C
-67A36C67A26F616C67A26C6770606C67A26C6F95B65A6D66705F6D9BC7FC6D6E4D5CA26D
-6E4D5C6D6E4D5C6D6E4D5C6D6E4D5C6D6F4C5C6E6E93B65A6E02F0030392C8FC020F02FC
-030F14FC6E02FF033F5C6E03E049B65A020003FE011F15C0033F91B9C9FC6F61030719F8
-030019C0043F95CAFC040717F8DC007F1680050703F8CBFCDD000F01FCCCFC7A7178EF8B
->I<DCFFE092B57E011FB6033F14FEB80203B712E0071F16FC077F16FF0603B912E0060F
-18F8063F18FE4E8405E1B526FC007F15C005E302C001078105EF01FCC815F894B500F06F
-80D8000F05C0031F80010194C96C806D04FC0403814E70816E03E070814E864E718095CB
-6C804D72805F4D72804D888A8E8A8E8A8EA27881A37980A38E8BA38EA48B2380B12300A2
-67A46AA2676AA36A9CB6FCA26A666AA2545DA2545DA25492C7FC7163714E5C716069714E
-5C7294B65A724C5D724C5D724C92C8FC06FC4C5C724C5C726C037F5C07E04AB612E005F7
-01F802075D05F101FF021F92C9FC05F0DAF001B65A063F90B812F87218E0060718800601
-05FCCAFC726C16E0070F93CBFC070115F0DF000F01F8CCFC97CFFCB3B2BA12F8AA02F0C7
-7E899F78EE9B>I<95261FFFF0EE03FF0507B65E057F03E05D0407B712FC041F04FF5D93
-B912C00303725C030F06F85C033F844BDBC00F01FF91B5FC4AB600FCC76E5A4A03E0021F
-13C0020F038002076D5A4A92C8000113F04A02FC6F6D5A4A4A706C5A91B648EE1FFE4903
-C0706C5A49745B494B18BF4992CA6C90B6FC494A83494A83A2494A8490B6855E48885E48
-885E4888A2485D895A93CCFCA25AA25DA25AA55DB6FCB07EA281A47EA3817EA36C81A27E
-A2826C64A26C6F60A26C6F606D63826D636D6E95B7FC6D6E5F646D6E5F6D6F5E6D6F5E6D
-6F5E6E6E5E6E6E923801FFF76E6E030713E7020702FF4B13C76E03C0027F1387020003F0
-0103B512076F02FF013F13FC031F92B612F8030718E0030118806F6CEEFE00040F16F804
-0116C0DC001F4AC7FCDD007F13C095CAFCB3B2090FBA1280AA9BC71207899F77EE93>I<
-4BB46CEC3FFC013FB64AB512C0B8020714F8071F14FE077F6E7E4EB77E4E16F04E824ED9
-E03F7F4EEB007FDE3FFC90B57E95267FF0018019C0D8000F4C484815800101038113006D
-4C4915C0EF83FC6EEC87F8A2EF8FF060179F60A2DDBF806D1580A205FFC76C1500A2745C
-4D6F5B755B755B4D030713C0090190C7FC98C9FC5FA55FA65FB3B3B2BBFCAA02E0C7123F
-626F78EE72>I<93263FFFFCEC03E0031FB600E0EB0FF092B700FE133F02079338FF807F
-023FEFE1FF91BBFC1303499138F0000F011F01FCC8FC4901E0151F49018015034948C97E
-4849707E4849834849834A8348855C48854A835AA24885A4B56C187FA3808080806E725A
-6E6C94C8FC15E015FCEDFF806C15F8EEFFE0EFFF806C17FCF0FFE06C18FCF1FF806C19F0
-1AFC6C19FF6C866C1AE06C866D19FC6D856D856D860103866D866D6C85021F8514070201
-85DA003F841507DB007F831601DC000F1780EF003F1801DE001F15C019071901736C14E0
-D83FC0181F486C8400FF85866D8486A2877FA2877F1DC07FA27F1D8080636E1A00806E4E
-5AA26E616E5F6E4D5B6E6C4C5B6F5E6F4C5B03F8047F5B03FF4BB55A04E0021F91C7FC02
-BF01FE0103B512FC021F90B85AD9FE0718E0D9F8036049C695C8FC01C0013F16F8490107
-16C090C84BC9FC007C030791CAFC5B7177EF6E>I[<EE0FFEA9161FA6163FA4167FA316FF
-A35DA25DA25DA25DA25DA25D5D92B5FCA25C5C5C5C5C147F91B6FC1303010F92B812C013
-7F0003BCFCBDFCA8C7000F4ACAFCB3B3B3F30FFEB3A21B1F6E19FC83A21B3F6E19F8846E
-F07FF0A26E6FECFFE0A26F6E4913C06F6E5B724913806F02FE011F13006F9139FFC07FFE
-6F92B55A6F5F03005F705E041F5E040793C7FC040015FC051F14F0DD007F1380>87
-158 123 284 108 I<DC7FF0963803FF80011FB695B7FCB80407B8FCABD8000F96C77E01
-011B0F6D87A26E86B3B3B3A765A465A365A2658065A29AB7FC6E617117FD6E1903F407F9
-6EDF0FF18171EE1FE16E073F8271DCFFC115FE6E6E4B018192B512C06E6F020713016F02
-F0EC3FFE6F02FF903803FFFC030F92B612F86F18E0030118C06F6C1700041F16FC040316
-F0DC003F1580050002F8C703F8C8FC8A7076EE9B>I<B56C0103B56C922607FFF0EB3FFC
-91B895B6FCAAC703F0CB000FECE00071060049C7FC6EF47FF8836E525A836E515BA27160
-6E65846E515B846E5190C8FC846E515AA26E6F4D5AA272177F6F63846F505A846F4F5B84
-6F4F5BA26F6F4B5BA2735D6F98C9FC856F4F5A856F4F5A85704E5AA2706E4B5AA2735C70
-6185704D5B86704D5B86704D90CAFCA2706F495AA274133F706086714C5A86714C5A8671
-4B5BA2716E485BA21B837103875B1BC77103CF90CBFC1BEF71EDFFFEA2715EA3725DA272
-5DA2725DA2725DA2725DA37292CCFCA2725CA2725CA2735BA2735BA3735BA2735B735B73
-90CDFC866F7AED93>I<267FFFC049B500C0912607FFFC903801FFF891B894B7FCAAC700
-0F0380C9001F4AC8FC6E6F040391C9FC7713FC6E6F606E6F4C5B6E6F4C5B6F6E5E535B6F
-6E4C5B6F6E4C90CAFC6F6F4B5A6F6F5E6F4E5B734A5B6F6F5C6F6F4A5B706E4A5B706E4A
-5B9BCBFC706E4A5A706F495A706F5A706F485B704C5B74485B706F485B7102FC5C716E48
-90CCFC716E485A1BFF715E715E715E715E715E647292CDFC84847281A272817281728172
-81858896B67E884E824E82604E824E824E824E6D804F7EDEFFFC814D496C804D6E814D49
-6C814D496C814D13C04D496C8196C7814D486E804D486E804C824C49834C496E814C496E
-814E6E814C496E814C90C8FC4C486F8104FF71804B4970804B4970804B5B4D70814B4970
-814B4970814B72814B90CB814B5A4A49728002076D728049B600E07180B9047FB912C0AA
-9026FC000108F8C77E8A6E7CED93>120 D<267FFFC049B500C0922603FFF8EB1FFE91B8
-95B6FCAAC76C02F8CB0007ECF00071DE007F90C7FC6EF43FFC836E525A836E525A846E51
-5BA2725F6E65846E515B846E5190C8FC846F505A846F505AA26F6E4D5AA27217FF6F6385
-6F4F5B856F4F5B856F4F5B856F4F90C9FCA2735D706185704E5A85704E5A85704E5A8670
-4D5BA2745B706186704D5B86704D90CAFC86714C5A86714C5AA2716E495AA27413FF715F
-877103815B1BC17103C35B1BE37103E75B1BF77192B5CBFCA3725DA2725DA2725DA2725D
-A2725DA3725DA2725DA27292CCFCA2735BA2735BA2735BA3735BA2735BA2735BA24F5BA2
-4F90CDFCA26162A24F5AA24F5AA24F5AEB7FE02601FFF84B5B000713FE486D5D486E5E48
-6E5C6248804E90CEFCA2B66C4A5A183F614E5AA24E5A4D5B5F6C4A495B4D5B4D90CFFC6C
-4A5B4B495A6C91C7485A4A01035B6C01BC010F5B6C01F0013F13C0DAFC01B55A6C90B7D0
-FC6C16FC6C6C5D6D15E0010F158001034AD1FC010014F0020F90D2FC879F7BED93>I
-E
-%EndDVIPSBitmapFont
-end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- @landscape
-%%EndSetup
-%%Page: 1 1
-1 0 bop -45 -282 5906 7 v -45 -44 a Fh(The)93 b(LogiCal)i(team)p
--45 11 V -45 636 a Fg(Lo)5 b(cated)63 b(on)g(t)-5 b(w)g(o)63
-b(sites)-45 1097 y(-)g(INRIA-Ro)5 b(cquencourt)62 b(\(4)i(p)5
-b(ermanen)-5 b(t)61 b(+)h(3)h(PhD)g(studen)-5 b(ts\))-45
-1455 y(-)63 b(Orsa)-5 b(y)62 b(Univ)-5 b(ersit)g(y)61
-b(and)h(CNRS)h(\(4)h(p)5 b(ermanen)-5 b(t)61 b(+)h(4)i(PhD)f(studen)-5
-b(ts\))-45 1916 y(Both)63 b(close)f(to)i(P)-5 b(aris)5860
-4036 y
- 0 setgray
- 5860 4036 a -45 3997 5906 10 v -45 4204 a Ff(15)43
-b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5
-b(cquencourt)1179 b Ff(P)m(age)43 b(1)p eop
-%%Page: 2 2
-2 1 bop -45 -282 5906 7 v -45 -44 a Fh(LogiCal:)126 b(main)94
-b(activities)p -45 11 V -45 636 a Fg(-)63 b(F)-16 b(undamen)-5
-b(tal)61 b(researc)-5 b(h)62 b(on)h(pro)5 b(of)63 b(theory)-45
-994 y(-)g(Dev)-5 b(elopmen)g(t)60 b(of)i(the)h(Co)5 b(q)63
-b(pro)5 b(of)63 b(assistan)-5 b(t)-45 1351 y(-)63 b(Pro)5
-b(of)63 b(dev)-5 b(elopmen)g(t)60 b(in)i(Co)5 b(q)5860
-4036 y
- 0 setgray
- 5860 4036 a -45 3997 5906 10 v -45 4204 a Ff(15)43
-b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5
-b(cquencourt)1179 b Ff(P)m(age)43 b(2)p eop
-%%Page: 3 3
-3 2 bop -45 -282 5906 7 v -45 -44 a Fh(The)93 b(Co)8
-b(q)94 b(pro)8 b(of)94 b(assistan)-8 b(t)p -45 11 V -45
-636 a Fg(Based)63 b(on)g(the)f(Calculus)g(of)h(Inductiv)-5
-b(e)60 b(Constructions)-45 994 y(-)j(A)g(logical)f(strength)h
-(comparable)e(to)i(ZF)-45 1351 y(-)g(The)f(functional)f(expressivit)-5
-b(y)61 b(of)h(\(a)i(higher-order\))d(ML)-45 1709 y(-)i(The)f(logical)g
-(expressivit)-5 b(y)60 b(of)j(natural)f(deduction)g(and)g(inductiv)-5
-b(ely)59 b(de\014ned)-45 1985 y(prop)5 b(ositions)-45
-2549 y(Not)64 b(as)f(automatized)f(as)i(PVS,)g(A)-5 b(CL2,)63
-b(...)85 b(for)63 b(pro)5 b(of-of-programs)-45 2907 y(Pro)g(of)64
-b(scripting)d(not)i(as)h(mathematician-readable)59 b(as)64
-b(Mizar)5860 4036 y
- 0 setgray
- 5860 4036 a -45 3997 5906 10 v -45
-4204 a Ff(15)43 b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g
-(Ro)5 b(cquencourt)1179 b Ff(P)m(age)43 b(3)p eop
-%%Page: 4 4
-4 3 bop -45 -282 5906 7 v -45 -44 a Fh(A)93 b(Co)8 b(q)94
-b(script)p -45 11 V -45 649 a Fd(Fixpoint)g(minus)e([n:nat])h(:)e(nat)h
-(->)f(nat)g(:=)136 893 y([m:nat]Cases)k(n)c(m)g(of)1040
-1137 y(O)g(_)f(=>)i(O)769 1381 y(|)e(\(S)i(k\))f(O)g(=>)g(\(S)g(k\))769
-1625 y(|)f(\(S)i(k\))f(\(S)g(l\))g(=>)g(\(minus)i(k)e(l\))678
-1868 y(end.)-45 2356 y(Lemma)i(minus_plus_simpl)j(:)678
-2600 y(\(n,m,p:nat\)\(\(min)q(us)h(n)91 b(m\)=\(minus)j(\(plus)e(p)f
-(n\))g(\(plus)h(p)f(m\)\)\).)-45 2844 y(Proof.)136 3088
-y(Induction)j(p;)d(Simpl;)i(Auto)f(with)g(arith.)-45
-3331 y(Qed.)5860 4036 y
- 0 setgray
- 5860 4036 a -45 3997 5906 10
-v -45 4204 a Ff(15)43 b(Mars)g(2002)812 b Fe(LogiCal)60
-b(team)d(-)h(INRIA)g(Ro)5 b(cquencourt)1179 b Ff(P)m(age)43
-b(4)p eop
-%%Page: 5 5
-5 4 bop -45 -282 5906 7 v -45 -44 a Fh(A)93 b(Co)8 b(q)94
-b(script)p -45 11 V -45 635 a Fd(Coq)e(<)f(Print)h(minus_plus_simpl.)
--45 879 y([n,m,p:nat])46 1123 y(\(nat_ind)h([n0:nat]\(minus)j(n)91
-b(m\)=\(minus)j(\(plus)e(n0)f(n\))h(\(plus)g(n0)f(m\)\))226
-1366 y(\(refl_equal)k(nat)d(\(minus)g(n)f(m\)\))226 1610
-y([p0:nat;)j(IHp:\(\(minus)h(n)90 b(m\)=\(minus)k(\(plus)f(p0)e(n\))g
-(\(plus)i(p0)e(m\)\)\)]IHp)i(p\))407 1854 y(:)e(\(n,m,p:nat\)\(minus)97
-b(n)91 b(m\)=\(minus)j(\(plus)e(p)f(n\))g(\(plus)i(p)d(m\)\))5860
-4036 y
- 0 setgray
- 5860 4036 a -45 3997 5906 10 v -45 4204 a Ff(15)43
-b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5
-b(cquencourt)1179 b Ff(P)m(age)43 b(5)p eop
-%%Page: 6 6
-6 5 bop -45 -282 5906 7 v -45 -44 a Fh(Rendered)94 b(b)-8
-b(y)93 b(HELM)p -45 11 V -45 602 a Fc(DEFINITION)54 b
-(minus_plus_simpl\(\))-45 744 y(TYPE)h(=)339 886 y(for)g(all)f
-(n:nat.for)g(all)h(m:nat.for)f(all)g
-(p:nat.\(\(n-m\)=\(\(p+n\)-\(p+m\)\)\))-45 1028 y(BODY)h(=)339
-1170 y(lambda)g(n:nat)449 1313 y(lambda)f(m:nat)559 1455
-y(lambda)g(p:nat)669 1597 y(We)g(prove)h
-(\(\(n-m\)=\(\(p+n\)-\(p+m\)\)\))669 1739 y(by)f(induction)g(on)h(p)888
-1882 y(Case)g(O)1108 2024 y(\(refl_equal)e(.)i(.\))1163
-2166 y(we)f(proved)109 b(\(\(n-m\)=\(n-m\)\))888 2308
-y(Case)55 b(\(S)f(n0:nat\))1108 2450 y(By)g(induction)g(hypothesis,)g
-(we)h(have:)1108 2593 y(\(H\))f(\(\(n-m\)=\(\(n0+n\)-\(n0+m\)\)\))1108
-2735 y(H)669 2877 y(we)g(proved)g(\(\(n-m\)=\(\(p+n\)-\(p+m\)\)\))394
-3019 y(we)h(proved)109 b(for)54 b(all)h(n:nat.)f(for)h(all)f(m:nat.)h
-(for)f(all)h(p:nat.)f(\(\(n-m\)=\(\(p+n\)-\(p+m\)\)\))5860
-4036 y
- 0 setgray
- 5860 4036 a -45 3997 5906 10 v -45 4204 a Ff(15)43
-b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5
-b(cquencourt)1179 b Ff(P)m(age)43 b(6)p eop
-%%Page: 7 7
-7 6 bop -45 -282 5906 7 v -45 -44 a Fh(Main)93 b(Co)8
-b(q)94 b(libraries)p -45 11 V -45 647 a Fg(-)63 b(Arithmetic)e(\(P)-5
-b(eano)63 b(n)-5 b(um)g(b)5 b(ers)61 b(and)i(binary)e(in)-5
-b(tegers\))-45 1004 y(-)63 b(Axiomatized)e(real)h(n)-5
-b(um)g(b)5 b(ers)61 b(\(deriv)-10 b(abilit)-5 b(y)-16
-b(,)59 b(trigonometry)-16 b(,)62 b(series,)h(...\))-45
-1362 y(-)g(Algebra)f(\(algebraic)g(structures,)i(fundamen)-5
-b(tal)60 b(theorem)i(of)h(algebra,)-45 1638 y(categories,)g(...\))-45
-1996 y(-)g(Sets,)g(relations,)g(orders,)g(logics)-45
-2353 y(-)g(Planar)f(geometry)-45 2711 y(-)h(Computer)f(science)f
-(structures)i(\(b)5 b(o)g(oleans,)64 b(lists,)f(maps,)g(automatas,)h
-(...\))-45 3068 y([13)g(standard)f(libraries)e(+)h(70)i(extra)e(user)h
-(con)-5 b(tributions])5860 4036 y
- 0 setgray
- 5860 4036 a -45 3997
-5906 10 v -45 4204 a Ff(15)43 b(Mars)g(2002)812 b Fe(LogiCal)60
-b(team)d(-)h(INRIA)g(Ro)5 b(cquencourt)1179 b Ff(P)m(age)43
-b(7)p eop
-%%Page: 8 8
-8 7 bop -45 -282 5906 7 v -45 -44 a Fh(The)93 b(Bologna)i(HELM)d(exp)8
-b(erimen)-8 b(t)p -45 11 V -45 636 a Fg(Exp)5 b(ort)63
-b(of)g(Co)5 b(q)63 b(formal)e(pro)5 b(ofs)64 b(to)f(XML)g(format)-45
-994 y(Application)e(of)i(XSL)-16 b(T)63 b(\014lters)g(for)f(output)h
-(in)-45 1351 y(-)g(Natural)g(language)-45 1709 y(-)g(MathML)g(Con)-5
-b(ten)g(t)-45 2066 y(-)63 b(MathML)g(presen)-5 b(tation)-45
-2424 y(Computation)62 b(of)h(the)g(dep)5 b(endency)60
-b(graph)5860 4036 y
- 0 setgray
- 5860 4036 a -45 3997 5906 10 v -45
-4204 a Ff(15)43 b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g
-(Ro)5 b(cquencourt)1179 b Ff(P)m(age)43 b(8)p eop
-%%Page: 9 9
-9 8 bop -45 -282 5906 7 v -45 -44 a Fh(Our)93 b(problems)p
--45 11 V -45 636 a Fg(-)63 b(Classi\014cation)-45 994
-y(-)g(Retrieving)-45 1351 y(-)g(Pro)5 b(of)63 b(rendering)-45
-1709 y(-)g(Mo)5 b(dularit)-5 b(y)5860 4036 y
- 0 setgray
- 5860 4036
-a -45 3997 5906 10 v -45 4204 a Ff(15)43 b(Mars)g(2002)812
-b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5 b(cquencourt)1179
-b Ff(P)m(age)43 b(9)p eop
-%%Page: 10 10
-10 9 bop -45 -282 5906 7 v -45 -44 a Fh(Classifying)p
--45 11 V -45 647 a Fg(-)63 b(Thematically)d(\(but)j(sometimes)e(at)j
-(the)e(in)-5 b(tersection)62 b(of)g(sev)-5 b(eral)62
-b(\014elds\))-45 1004 y(-)h(By)f(author)-45 1362 y(-)h(By)f(v)-5
-b(ersion)61 b(of)i(Co)5 b(q)-45 1719 y(Curren)-5 b(tly)-16
-b(,)62 b(classi\014ed)f(b)-5 b(y)62 b(v)-5 b(ersion,)62
-b(site,)h(theory)g(+)f(thematic)g(cross)-45 1996 y(classi\014cation)
-5860 4036 y
- 0 setgray
- 5860 4036 a -45 3997 5906 10 v -45 4204 a
-Ff(15)43 b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5
-b(cquencourt)1116 b Ff(P)m(age)43 b(10)p eop
-%%Page: 11 11
-11 10 bop -45 -282 5906 7 v -45 -44 a Fh(Retrieving)p
--45 11 V -45 647 a Fg(-)63 b(By)f(pattern)h(\(but)g(ho)-5
-b(w)62 b(to)i(iden)-5 b(tify)60 b Fb(n)53 b(<)f(p)41
-b Fg(+)h(1)63 b(and)g Fb(n)52 b Fa(\024)g Fb(p)p Fg(\))-45
-1004 y(-)63 b(By)f(isomorphism)e(\(e.g.)85 b Fb(A)53
-b Fa(!)f(8)p Fb(x:B)9 b Fg(\()p Fb(x)p Fg(\))53 b Fa(!)f
-Fb(C)66 b Fa(\021)52 b(8)p Fb(x:B)9 b Fg(\()p Fb(x)p
-Fg(\))42 b Fa(^)g Fb(A)53 b Fa(!)e Fb(C)13 b Fg(\))-45
-1362 y(-)63 b(By)f(name)g(\(but)h(no)f(standard:)85 b(e.g.)f(comm)-5
-b(utativit)g(y)60 b(is)j(sometimes)e(called)-45 1638
-y(symmetry\))5860 4036 y
- 0 setgray
- 5860 4036 a -45 3997 5906 10
-v -45 4204 a Ff(15)43 b(Mars)g(2002)812 b Fe(LogiCal)60
-b(team)d(-)h(INRIA)g(Ro)5 b(cquencourt)1116 b Ff(P)m(age)43
-b(11)p eop
-%%Page: 12 12
-12 11 bop -45 -282 5906 7 v -45 -44 a Fh(Pro)8 b(of)94
-b(rendering)p -45 11 V -45 647 a Fg(-)63 b(T)-16 b(o)63
-b(b)5 b(e)63 b(able)f(to)i(render)d(a)i(pro)5 b(of)63
-b(in)f(h)-5 b(uman-understandable)60 b(format)i(\(cf)-45
-923 y(HELM)h(and)g(Natural)g(exp)5 b(erimen)-5 b(ts\),)61
-b(but)i(still)e(problem)g(with)i(the)f(detail)-45 1199
-y(lev)-5 b(els)-45 1557 y(-)63 b(Con\015ict)f(b)5 b(et)-5
-b(w)g(een)62 b(v)-5 b(erb)5 b(osit)-5 b(y)61 b(and)i(automation)5860
-4036 y
- 0 setgray
- 5860 4036 a -45 3997 5906 10 v -45 4204 a Ff(15)43
-b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5
-b(cquencourt)1116 b Ff(P)m(age)43 b(12)p eop
-%%Page: 13 13
-13 12 bop -45 -282 5906 7 v -45 -44 a Fh(Mo)8 b(dularit)-8
-b(y)p -45 11 V -45 636 a Fg(-)63 b(Curren)-5 b(tly)61
-b(no)i(mo)5 b(dule)-45 994 y(-)63 b(T)-16 b(o)63 b(b)5
-b(e)63 b(able)f(to)i(express)e(theories)g(indep)5 b(enden)-5
-b(tly)59 b(of)k(a)g(sp)5 b(eci\014c)-45 1270 y(implemen)-5
-b(tation)-45 1628 y(Relations)62 b(with)h(OMDo)5 b(c?)5860
-4036 y
- 0 setgray
- 5860 4036 a -45 3997 5906 10 v -45 4204 a Ff(15)43
-b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5
-b(cquencourt)1116 b Ff(P)m(age)43 b(13)p eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
\ No newline at end of file
diff --git a/helm/mowgli/home/misc/kick-off/lemme2.ppt b/helm/mowgli/home/misc/kick-off/lemme2.ppt
deleted file mode 100644 (file)
index 4d686a3..0000000
Binary files a/helm/mowgli/home/misc/kick-off/lemme2.ppt and /dev/null differ
diff --git a/helm/mowgli/home/misc/proposal/MOWGLI.xls b/helm/mowgli/home/misc/proposal/MOWGLI.xls
deleted file mode 100644 (file)
index 7b22c58..0000000
Binary files a/helm/mowgli/home/misc/proposal/MOWGLI.xls and /dev/null differ
diff --git a/helm/mowgli/home/misc/proposal/mowgli.pdf b/helm/mowgli/home/misc/proposal/mowgli.pdf
deleted file mode 100644 (file)
index 0dbd1ec..0000000
Binary files a/helm/mowgli/home/misc/proposal/mowgli.pdf and /dev/null differ
diff --git a/helm/mowgli/home/misc/proposal/mowgli.ps b/helm/mowgli/home/misc/proposal/mowgli.ps
deleted file mode 100644 (file)
index c1a6235..0000000
+++ /dev/null
@@ -1,9679 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
-%%Title: mowgli.dvi
-%%Pages: 49
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 596 842
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -o mowgli.ps mowgli.dvi
-%DVIPSParameters: dpi=600, compressed
-%DVIPSSource:  TeX output 2001.11.26:1651
-%%BeginProcSet: texc.pro
-%!
-/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/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/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]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
-forall N/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: special.pro
-%!
-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/copypage{}N/p 3 def @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/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
-TeXDict begin 39158280 55380996 1000 600 600 (mowgli.dvi)
-@start
-%DVIPSBitmapFont: Fa cmcsc10 10.95 39
-/Fa 39 119 df<140C141C147814F0EB01E0EB03C0EB0780130F1400131E133E5B137813
-F85B1201485AA212075BA2485AA2121FA290C7FC5AA3123E127EA65AB2127EA6123E123F
-A37E7FA2120FA26C7EA27F1203A26C7E12007F1378137C7F131E7F14801307EB03C0EB01
-E0EB00F01478141C140C165A76C328>40 D<12C07E12787E7E7E6C7E7F12036C7E7F6C7E
-1378137C133C133E7FA21480130FA2EB07C0A214E0A2130314F0A3130114F8A6EB00FCB2
-EB01F8A614F01303A314E01307A214C0A2EB0F80A2131F1400A2133E133C137C137813F8
-485A5B485A12075B48C7FC121E5A5A12E05A165A7AC328>I<B6FCA618067E9622>45
-D<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A77891D>I<ED03C0A34B7EA24B7EA34B
-7EA3ED3BFCA3ED71FEA2EDF1FF15E0A2020180EDC07FA2DA03807F163FA24A486C7EA24A
-80020E130FA2021E80021C1307A2023C8002381303A24A6D7EA34A6D7EA249B77EA3D903
-C0C76C7E4A143FA249C87F171FA2010E6F7EA2011E82011C1507A2013C82013815031378
-8401FC1501486C4B7ED80FFF030F1380B500F049B6FCA340417CC04A>65
-D<B712FEEEFFC017F80001903980000FFC6C6CC7EA01FF707F717E717E717EA2717EA284
-A31707170FA360A24D5A173F604D5A4D5ADC03FEC7FC4C5AEE7FF091B6128017F891C7EA
-01FE9338007F80717EEF1FF0717E717EA2717E8483A21980A719005F6017074D5A60171F
-EF7FF0EFFFC048486C01075BB848C7FC17F81780393E7BBD46>I<DB1FF8EB01804AB5EA
-8003020FECE007913A3FF803F80F9139FF80007C4948C7EA1E1FD907FCEC0FBFD90FF0EC
-07FF49488049488049488049C9127F4848163F120349161F12074848160FA2485A180712
-3F5B1803127FA34993C7FC12FFAC127F7FF00380A2123FA27F001F170719006C7EA26C6C
-5E0003170E6D161E0001171C6C6C163C6D6C5D6D6C5D6D6C4A5A6D6C4A5AD907FC4A5AD9
-01FE021FC7FC902600FFC0137E91393FF803F8020FB512E0020114809126001FFCC8FC39
-427ABF47>I<B712FCEEFFC017F000019039C0001FFC6C6C48EB01FF706C7EEF3FE0EF0F
-F0717E717E717E170084F07F80A2F03FC019E0181FA219F0A2F00FF8A519FCAB19F8A4F0
-1FF0A319E0183F19C0A2F07F801900604D5A4D5A4D5A4D5A4D5AEF7FC04C48C7FC48486C
-EB0FFEB812F817C004FCC8FC3E3E7BBD4B>I<B912F8A3000101C0C7127F6C6C48140FEF
-03FC17011700187C183CA3181CA4181E040E130EA495C7FCA2161EA2163E167EED01FE91
-B5FCA3EC8001ED007E163E161EA2160EA2F00380A3F0070093C7FCA460180EA2181EA218
-3EA26018FC17011703170F48486C14FFB95AA3393E7CBD43>I<DB1FF8EB01804AB5EA80
-03020FECE007913A3FF803F80F9139FF80007C4948C7EA1E1FD907FCEC0FBFD90FF0EC07
-FF49488049488049488049C9127F4848163F120349161F12074848160FA2485A1807123F
-5B1803127FA34993C7FC12FFAB0407B512FE127F7FDC000113C09438007F80123FA27F12
-1FA26C7EA26C7E12037F6C7E7E6D6C15FF6D7E6D6C5C6D7ED907FCEC03DFD901FFEC0F8F
-6D01C0EB3F07913A3FF801FC03020FB5EAF001020102C0C7FC9126001FFCC8FC3F427ABF
-4D>71 D<B6D8C00FB512FCA3000101E0C7381FFE0026007F80EC07F8B3A691B7FCA30280
-C71207B3A92601FFE0EC1FFEB6D8C00FB512FCA33E3E7BBD4A>I<0107B6FCA3D9000113
-C06E1380157FB3B3A6123F487E487EA4EDFF005B6CC75A007C13010038495A003C5C6C49
-5A6C6C485A3903E03F802600FFFEC7FCEB1FF028407BBD34>74 D<B612F0A3000101E0C9
-FC38007F80B3B0EF01C0A517031880A41707A3170FA2171F173F177FEFFF00160348486C
-133FB9FCA3323E7BBD3E>76 D<B500C093380FFFFCA26E5E0001F1FE00D8007F18F8D977
-F0163BA2D973F81673A3D971FC16E3A2D970FEED01C3A3027FED0383A26E6CEC0703A36E
-6C140EA26E6C141CA36E6C1438A26E6C1470A36E6C14E0A26E6CEB01C0A3037FEB0380A2
-92393F800700A392381FC00EA26F6C5AA36F6C5AA26F6C5AA36F6C5AA26FB45AA3705A13
-F8486C6EC7FCD807FFEF0FFEB500F80307B512FC161EA24E3E7BBD5A>I<B56C91387FFF
-FC8080D8007F030313806E913800FE006E157C1838EB77FCEB73FE80137101707F6E7EA2
-6E7E6E7EA26E7E6E7EA26E7E6E7EA26E7F6F7EA26F7E6F7EA26F7E6F7E8215036F7E6F13
-80A2EE7FC0EE3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE01FF7013B8A2EF7FF8173FA2
-171F170F1707A2170301F81501487ED807FF1500B500F81578A218383E3E7BBD4A>I<B7
-12FCEEFFC017F000019039C0000FFC6C6C48EB01FF701380EF3FC0EF1FE018F0EF0FF8A2
-EF07FCA218FEA718FCA3EF0FF8A2EF1FF018E0EF3FC0EFFF80933801FE00EE1FFC91B612
-E017800280C9FCB3A73801FFE0B612C0A3373E7CBD43>80 D<D903FE130690391FFFC00E
-017FEBF81E3901FE01FC3A03F0003F3E4848EB0FFE484813074848130390C71201003E14
-00007E157EA2007C153E12FCA2161EA36C150EA27E7F007F92C7FC7F13F0EA3FFCEBFFC0
-6C13FC6CEBFFC06C14FC6C14FF6C15C06C6C80011F80010380D9003F7F02037F9138003F
-FF15070301138081167F17C0163F00E0151FA3160FA27EA36C1680161F7E17006C5D6C15
-3E6D5C6D14FCD8FDF0495AD8F8FC495A3AF07FC01FC0011FB55AD8E00349C7FC39C0003F
-F02A427ABF38>83 D<EC01E0A24A7EA34A7EA34A7EA24A7E141CA2EC3CFFEC387FA24A6C
-7EA34A6C7EA2010180ECC00FA249486C7EA349486C7EA24980010E1301010FB5FC4980A2
-011CC7FC49147FA20178810170143FA201F08149141F1201486C811207486CEC3FF8D8FF
-FE49B512C0A332317DB038>97 D<B612FEEDFFC016F03A03FC0007F86C48EB01FE150016
-7F1780163F17C0A61780167F170016FE4B5AED07F0ED7FE090B6128016F09039F80001FC
-6F7EEE7F80163FEE1FC017E0160F17F0A617E0161FA2EE3FC0EE7F80923801FF00486CEB
-07FEB712F85E93C7FC2C2F7CAE35>I<DA0FF81330DA7FFF13700103B5EAC0F090390FFC
-03F190391FE000F9D97F80133F01FEC7121F4848140F48481407485A000F150349140112
-1F491400123F5B127F1770A248C9FC1700AA6C6C1570A3123F6D15F0121F6D15E0000F15
-016D15C0000715036C6C15806C6C14076C6CEC0F00D97F80133ED91FE05B90390FFC03F0
-0103B55AD9007F1380DA0FF8C7FC2C317BAF36>I<B612FCEDFFC016F03A03FE000FF86C
-48EB01FEED007FEE3F80EE1FC0EE0FE0EE07F0160317F8160117FCA2EE00FEA417FFAA17
-FEA3EE01FCA3EE03F817F01607EE0FE017C0EE3F80EE7F00ED01FE486CEB0FFCB712F016
-C04BC7FC302F7CAE39>I<B8FCA33903FE00016C489038003F80161F160F1607A21603A3
-17C0ED1C01A393C7FCA2153CA215FC90B5FCA3EBFC00153CA2151CA21770A392C712E0A4
-1601A2EE03C0A21607160F161F486C14FFB81280A32C2F7CAE33>I<B712FEA33903FE00
-036C48EB007F828282A282A3EE0380A21538A293C7FCA31578A2EC01F890B5FCA3EBFC01
-EC0078A21538A592C8FCAA487EB512FCA3292F7CAE31>I<DA0FF81360DAFFFE13E00103
-EBFF8190390FF807E390393FC000F34948137F01FEC7123F4848141F4848140F48481407
-120F491403485A003F1501A25B007F1500A348C9FC1700A8031FB5FCA26C7E9238001FF0
-EE0FE0123F7FA26C7E120F7F12076C7E6C7E6C6C141FD97F80133FD93FE0137B90390FFC
-03F10103B512E00100EC8060DA0FFCC7FC30317BAF3A>I<B5D8F81FB5FCA3D803FEC7EA
-7FC06C48EC3F80B190B7FCA301FCC7123FB3486CEC7FC0B5D8F81FB5FCA3302F7CAE38>
-I<B512F8A33803FE006C5AB3B3A3487EB512F8A3152F7DAE1B>I<90383FFFFCA3903800
-7FC0EC3F80B3AD1218127EB4FCA3EC7F005A007C137E007813FE383C01F8381F03F03807
-FFC0C648C7FC1E307CAE27>I<B500F890383FFF80A3D803FEC7381FFC006C4815E01780
-94C7FC163E16785E4B5A4B5A4B5A031FC8FC153E5D5D4A5A4A5A4A7E140F4A7E4A7E147B
-ECF1FE9038FDE0FF9039FFC07F8014804A6C7E496D7E5B6F7E6F7E1503826F7E6F7EA270
-7E707E83161F83486CEC3FFCB500F890B512C0A3322F7CAE3A>I<B512FCA3D803FEC8FC
-6C5AB3A7160EA4161CA4163CA2167C16FC1501ED03F8486C131FB7FCA3272F7CAE2F>I<
-D8FFFE923807FFF0A3D803FF92380FFC006C5FD9DF80141DA3D9CFC01439A2D9C7E01471
-A3D9C3F014E1A2D9C1F8EB01C1A3D9C0FCEB0381A2027EEB0701A36E130EA291381F801C
-A391380FC038A2913807E070A3913803F0E0A3913801F9C0A2913800FF80A3486CEB7F00
-487E486C013E497EB5008091B512F0A2151C3C2F7CAE44>I<D8FFFC49B5FC7F7F000191
-38001FF06EEB0FE06EEB07C0EE0380EBDFE0EBCFF013C780EBC3FC13C180EBC0FF801580
-EC3FC0EC1FE0A2EC0FF0EC07F8A2EC03FCEC01FE140015FFED7F83153F16C3ED1FE3ED0F
-F3A2ED07FBED03FFA28181A2167F163F486C141F487E486C140FB56C1307A21603302F7C
-AE38>I<EC1FF891B5FC903907F00FE090390FC003F0013FC712FC017E147E49804848EC
-1F804848EC0FC04848EC07E0000F16F0491403001F16F8491401003F16FCA2007F16FE90
-C9FCA34816FFAA6C6CEC01FEA3003F16FCA26D1403001F16F86C6CEC07F0A26C6CEC0FE0
-000316C06C6CEC1F806C6CEC3F00017E147E6D5C90390FC003F0903907F00FE00100B5C7
-FCEC1FF830317BAF3A>I<B612FCEDFF8016E03A03FE000FF86C48EB03FCED00FE167FA2
-EE3F80A217C0A61780A2EE7F00A216FEED03F8ED0FF090B612C093C7FC01FCC9FCB2487E
-B512F8A32A2F7CAE33>I<EC1FF891B5FC903907F00FE090390FC003F0013FC712FC017E
-147E49804848EC1F804848EC0FC0000716E04848EC07F0A24848EC03F8A24848EC01FCA2
-007F16FEA290C9FCA24816FFAA6C16FE6D1401A2003F16FCA26D1403001F16F8000F16F0
-9039E003C0070007D90FF013E03B03F01C3C0FC03B01F8380C1F803B00FC300E3F00017E
-EB077E013F5C90390FF803F0903907FC0FE00100B5EAC003EC1FFB91380001E01707EEF0
-0FEEF81FEEFFFE81A2EE7FFCA2EE3FF8EE1FF0EE07C0303D7BAF3A>I<B612E015FE6F7E
-3A03FE003FE06C48EB07F8ED01FC6F7EA2828283A594C7FC5E5E4B5A4B5A4B5AED3FC090
-B500FEC8FC5D9038FC007FED1F806F7E826F7EA26F7EA582A4EF01C016FEA21501486CED
-0380B538F800FF93383F8700EE1FFEC9EA03F832307CAE37>I<90383FC00C9038FFF81C
-0003EBFE3C390FE03FFC381F8007EB0003003E1301481300157C5A153CA36C141CA27E6C
-14006C7E13E013FE383FFFE06C13FE6CEBFF806C14E0000114F06C6C13F8010F13FC1300
-EC07FE14011400157F153F12E0151FA37EA2151E6C143E6C143C6C147C6C14F89038C001
-F039FBF807E000F1B512C0D8E07F130038C007FC20317BAF2A>I<007FB712F8A3903980
-1FF0073A7E000FE00000781678A20070163800F0163CA348161CA5C71500B3A8EC3FF801
-1FB512F0A32E2E7CAD36>I<B5D8F801B5FCA3D803FEC7EA1FF06C48EC0FE0EE07C0EE03
-80B3AB16076C6C1500A2017E5C017F141E6D141C6D6C133C6D6C5B6D6C485A903903FC07
-E00100B51280DA3FFEC7FCEC07F830307CAE38>I<B500E0903807FFF0A3000790C70001
-13806C48913800FE000001167C0000167817706D15F06D5DA26D6C495AA26E1303011F5D
-A26D6C49C7FCA26E5B0107140EA26D6C5BA26E133C010114388001005CA26E13F06E5B15
-81023F5BA215C3021F5B15E7020F90C8FCA2EC07FEA36E5AA26E5AA36E5AA234307EAE38
->I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fb cmtt10 10.95 46
-/Fb 46 121 df<007FB612F0A2B712F8A36C15F0A225077B9E30>45
-D<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C6E8B30>I<16F01501ED
-03F8A21507A2ED0FF0A2ED1FE0A2ED3FC0A2ED7F80A2EDFF00A24A5AA25D1403A24A5AA2
-4A5AA24A5AA24A5AA24A5AA24AC7FCA2495AA25C1303A2495AA2495AA2495AA2495AA249
-5AA249C8FCA2485AA25B1203A2485AA2485AA2485AA2485AA2485AA248C9FCA25AA2127C
-A225477BBE30>I<14FE903807FFC0497F013F13F8497F90B57E48EB83FF4848C6138049
-137F4848EB3FC04848EB1FE049130F001F15F0491307A24848EB03F8A290C712014815FC
-A400FEEC00FEAD6C14016C15FCA36D1303003F15F8A26D1307001F15F0A26D130F6C6CEB
-1FE0A26C6CEB3FC06C6CEB7F806D13FF2601FF8313006CEBFFFE6D5B6D5B010F13E06D5B
-D900FEC7FC273A7CB830>I<EB03C0497EA2130FA2131FA2133F137F13FF1203123FB5FC
-A213EF138FEA7E0F1200B3B0003FB512F84814FCB612FEA26C14FC6C14F81F3977B830>
-I<EB07FC90383FFFC090B512F00003804814FE4880261FF80F1380263FE00113C09038C0
-007F4848EB3FE090C7121FED0FF04814075A6C15F81503A3127E1218C8FCA2150716F015
-0F16E0151F16C0153FED7F8015FF4A13005DEC07FC4A5A4A5A4A5A4A5A4A5A4990C7FC49
-5A495AEB0FF0EB3FE0495A495A4890C8FC4848EB01F04848EB03F8485AEA1FE048B6FCB7
-FCA37E6C15F025397BB830>I<EB03FF013F13E090B512F84814FE4880481580260FFE01
-13C09038F0007F4848EB1FE0150F16F01507A26C5A6C5AC8FC150F16E0A2151FED3FC015
-7FEDFF8002071300903807FFFE495B5D8115FF6D1480D9000113C09138003FE0ED1FF0ED
-07F8150316FC150116FE1500A21218127EB4FCA2150116FC4814036C15F86C6C13076DEB
-1FF0D83FF0133F3A1FFE01FFE06CB612C06C15806CECFE00C65C013F13F001031380273A
-7CB830>I<49B4FC011F13F0017F13FC90B57E0003ECFF804815C048010113E03A1FF800
-3FF049131FD83FC0EB07F8A24848EB03FC90C71201A56D1303003F15F86D13076C6CEB0F
-F06C6CEB1FE0D807FCEB7FC03A03FF83FF806C90B512006C6C13FC011F13F0497F90B512
-FE48802607FE0013C0D80FF8EB3FE0D81FE0EB0FF04848EB07F8491303007F15FC90C712
-014815FE481400A66C14016C15FC6D1303003F15F86D1307D81FF0EB1FF06D133F3A0FFF
-01FFE06C90B512C06C1580C6ECFE006D5B011F13F0010190C7FC273A7CB830>56
-D<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA7FE0A2
-EAFFF0A4EA7FE0A2EA3FC0EA0F000C276EA630>58 D<EC1FE0ECFFF8010313FE010F7F49
-14804914C090397FF03FE09038FF800F4890380007F0D803FC13033A07F801FBF89038F0
-07FF380FE01F4A13FCEA1FC0495A003FEBFF0F903800FE07903901FC03FE007FEBF801EA
-7E03ECF000A2EAFE0700FC49137EAA00FE6D13FED87E0314FCA2ECF801D87F0114F8003F
-EBFC03903900FE07F0903880FF0F001F90387FFFE06D6C13C0EA0FE06E13803A07F007FE
-009038F801F86C6CC7127C6CB414FE6CEB800390387FF01F6DB512FC6D14F86D14E00103
-14C00100EBFE00EC1FF0273A7CB830>64 D<003FB512E04814FCB67E6F7E6C816C813A03
-F8007FF0ED1FF8150F6F7E6F7E15016F7EA2EE7F80A2163F17C0161FA4EE0FE0AC161F17
-C0A3163F1780A2167F17005E4B5A15034B5A150F4B5AED7FF0003FB65A485DB75A93C7FC
-6C14FC6C14E02B387FB730>68 D<007FB7FCB81280A47ED803F8C7123FA8EE1F0093C7FC
-A4157C15FEA490B5FCA6EBF800A4157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA46C16
-C02B387EB730>I<003FB712804816C0B8FCA27E7ED801FCC7121FA8EE0F8093C7FCA515
-3E157FA490B6FCA69038FC007FA4153E92C8FCAE383FFFF8487FB5FCA27E6C5B2A387EB7
-30>I<3B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E0D803F8C7EA
-FE00B290B6FCA601F8C7FCB3A23B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F0
-6C496C13E02D387FB730>72 D<007FB6FCB71280A46C1500260007F0C7FCB3B3A8007FB6
-FCB71280A46C1500213879B730>I<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE
-0F80EE1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730>76 D<D83FF8ECFFE0486C4913
-F0486C4913F8A2007F16F06C6C4913E00007160001EF14BFEC800FA39039E7C01F3FA4EC
-E03F01E3133EA2ECF07EA201E1137CA2ECF8FCA201E013F8A214FDEC7DF0A3147FEC3FE0
-A3EC1FC0A2EC070091C7FCADD83FFC903801FFE0486C4913F0B54913F8A26C486D13F06C
-486D13E02D387FB730>I<007FB512F0B612FE6F7E16E0826C813903F8003FED0FFCED03
-FE15016F7EA2821780163FA6167F17005EA24B5A1503ED0FFCED3FF890B6FC5E5E16804B
-C7FC15F001F8C9FCB0387FFFC0B57EA46C5B29387EB730>80 D<003FB57E4814F0B612FC
-15FF6C816C812603F8017F9138003FF0151F6F7E15071503821501A515035E1507150F4B
-5A153F4AB45A90B65A5E93C7FC5D8182D9F8007FED3FE0151F150F821507A817F8EEF1FC
-A53A3FFF8003FB4801C0EBFFF8B56C7E17F06C496C13E06C49EB7FC0C9EA1F002E397FB7
-30>82 D<90390FF803C0D97FFF13E048B512C74814F74814FF5A381FF80F383FE001497E
-4848137F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C
-13FF6C14E0000114F86C80011F13FF01031480D9003F13C014019138007FE0151FED0FF0
-A2ED07F8A2007C140312FEA56C140716F07F6DEB0FE06D131F01F8EB3FC001FF13FF91B5
-1280160000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB830>I<003FB712C04816E0
-B8FCA43AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC4980A46D91C7FC2B387EB7
-30>I<3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7EA3F80B3B16D147F000116
-00A36C6C14FE6D13016D5CEC800390393FE00FF890391FF83FF06DB55A6D5C6D5C6D91C7
-FC9038007FFCEC1FF02F3980B730>I<3A3FFF01FFF84801837F02C77FA202835B6C0101
-5B3A01FC007F806D91C7FC00005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E7010F5B14
-FF6D5BA26D5BA26D5BA26D90C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB3F8181
-EB7F0081497F49800001143F49800003141F49800007140FD87FFEEB7FFFB590B5128080
-A25C6C486D130029387DB730>88 D<EB7FF80003B5FC4814C04880488048809038E01FFC
-9038C003FE14016E7E6C487F6CC77FC8123FA491B5FC130F137F48B6FC12075A48EB803F
-383FF800EA7FE0138048C7FC5AA4157F7E6C6C13FFEBC003263FF01FEBFF8090B712C07E
-6C14EF000314876CD9FE01138026003FE0C8FC2A2A7BA830>97 D<EA3FFC487E12FFA212
-7F123F1200AAEC03FE91381FFF80027F13E091B57E90B612FC82ECFE079138F001FF4A6C
-13804A137F4AEB3FC091C7121F17E049140FA217F01607A8160FA217E07F161F6EEB3FC0
-A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E495CD97E7F13C0D93C1F90C7FC90
-380003FC2C3980B730>I<ECFFE0010713FC011F7F017F7F90B612804815C048EB807F39
-07FC003F485A485A49EB1F804848EB0F004990C7FC127F90C9FCA25A5AA87E7EA27F003F
-EC07C06DEB0FE06C7E6D131F6C6C14C0D807FE133F9039FFC0FF806C90B5FCC615006D5B
-011F13F801075B01011380232A7AA830>I<913801FFE04A7F5CA28080EC0007AAEB03FE
-90381FFF874913E790B6FC5A5A481303380FFC00D81FF0133F49131F485A150F48481307
-90C7FCA25AA25AA87E6C140FA27F003F141F6D133F6C7E6D137F390FF801FF2607FE07EB
-FFC06CB712E06C16F06C14F76D01C713E0011F010313C0D907FCC8FC2C397DB730>I<49
-B4FC010713E0011F13F8017F7F90B57E488048018113803A07FC007FC04848133FD81FE0
-EB1FE0150F484814F0491307127F90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003F
-EC01F06DEB03F86C7E6C7E6D1307D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14
-806DEBFE00010713F8010013C0252A7CA830>I<EDFF80020713E0021F13F05C4A13F891
-B5FC491387903803FE079138FC03F0903907F800C04A1300A8003FB612C04815E0B7FCA3
-6C15C0260007F0C7FCB3A9003FB512FE4880B71280A26C15006C5C25397DB830>I<D903
-FC13FF90261FFF8713C04913DF90B712E05A5A2607FE07138F903AF801FE07C048486C6C
-C7FCA2497F001F8149133FA56D137F000F92C7FC6D5BA26C6C485AEBFE0790B55A5D485C
-15C001DF5BD9C3FCC8FC01C0C9FCA37F7F6CB512F015FF6C15C04815F0488148813A3FE0
-001FFE0180130148C8127F007E8100FE168048151FA56C153F007FED7F006D5C6C6C495A
-01F013076CB4EB7FFC6C90B55A6C5D000115C06C6C91C7FC011F13FC010113C02B3E7DA7
-30>I<EA3FFC487E12FFA2127F123F1200AAEC01FE91380FFF80023F13E091B57E90B67E
-A29138FE07FCECF8039138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D
-4813FCB500FE14FEA26C01FC14FC6C496C13F82F3880B730>I<14E0EB03F8A2497EA36D
-5AA2EB00E091C8FCA9381FFFF8487F5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E
-6C15C023397AB830>I<EC01C0EC07F0A2EC0FF8A3EC07F0A2EC01C091C7FCA990B512F0
-4814F8A47EEB0003B3B3A5EC07F0A2123C007EEB0FE0B4131FEC3FC0147F90B512806C14
-005C6C5B000F13F0000313C01D4E7CB830>I<EA7FF8487EA4127F1200AB0203B512804A
-14C017E0A217C06E14809139001FE0004B5A4B5A4BC7FC4A5A4A5AEC0FF84A5A4A5A4A5A
-4A5A01FD7F90B57E8114F7ECE3F8ECC1FCEC81FEEC00FF497F496D7E6F7E826F7E15076F
-7E6F7E3B7FFFF81FFFE0B56C4813F017F8A217F06C496C13E02D387FB730>I<387FFFF8
-B57EA47EEA0001B3B3A8007FB612F0B712F8A46C15F025387BB730>I<02FC137E3B7FC3
-FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE07EB03F801FC13FE
-9039F803FC01A201F013F8A301E013F0B3A23C7FFE0FFF07FF80B548018F13C0A46C486C
-01071380322881A730>I<EC01FE3A3FFC0FFF80267FFE3F13E000FF90B57E90B67E7E6C
-9038FE07FCC6EBF8039138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D
-4813FCB500FE14FEA26C01FC14FC6C496C13F82F2880A730>I<49B4FC010F13E0013F13
-F8497F90B57E0003ECFF8014013A07FC007FC04848EB3FE0D81FE0EB0FF0A24848EB07F8
-491303007F15FC90C71201A300FEEC00FEA86C14016C15FCA26D1303003F15F86D13076D
-130F6C6CEB1FF06C6CEB3FE06D137F3A07FF01FFC06C90B512806C15006C6C13FC6D5B01
-0F13E0010190C7FC272A7CA830>I<EC03FE3A3FFC1FFF80267FFE7F13E000FF90B57E90
-B612FC6C816CEBFE07C69038F001FF4A6C13804A137F4AEB3FC091C7121F17E049140FA2
-17F01607A8160FA217E07F161F6EEB3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91
-B55A5E495C6E13C0021F90C7FCEC03FC91C9FCAD383FFFF8487FB57EA26C5B6C5B2C3C80
-A730>I<49B413F8010FEBC1FC013F13F14913FD48B6FC5A481381390FFC007F49131F48
-48130F491307485A491303127F90C7FC15015A5AA77E7E15037FA26C6C1307150F6C6C13
-1F6C6C133F01FC137F3907FF01FF6C90B5FC6C14FD6C14F9013F13F1010F13C1903803FE
-0190C7FCAD92B512F84A14FCA46E14F82E3C7DA730>I<ED07F83A3FFF803FFF486DB512
-80B512C302CF14C06C13DF6C9038FFFC3FD8001F13E09238801F809238000F004A90C7FC
-5C5C5CA25CA45CAF003FB512FC4880B7FCA26C5C6C5C2A287EA730>I<90381FFC1E48B5
-129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E007F91C7FC13E06CB4FC
-6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF02001380007C147F00FEEC
-1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC5D5D00FC14F0D8F83F13
-C026780FFEC7FC222A79A830>I<EB0780497E131FA9003FB612E04815F0B7FCA36C15E0
-26001FC0C7FCB216F8ED01FCA5ECE003010FEB07F814F09138FC1FF06DB512E06D14C016
-806D14009038007FFCEC1FF026337EB130>I<D83FFCEB3FFC486C497E00FF14FFA2007F
-147F003F143F00001400B3A41501A2150315076D130F903A7FC07FFFF891B612FC6D15FE
-7F6D4913FC6D9038F87FF8010001C0C7FC2F2880A630>I<3B3FFFC01FFFE0486D4813F0
-B515F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE00015DEC0F80
-EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FBA290393FF07F
-E0A3ECE03FA2011F5C90390F800F802D277FA630>119 D<3A3FFF81FFFC4801C37FB580
-A26C5D6C01815BC648C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F06DB4
-5A6D5B7F6D5B92C8FC147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1F890381F
-81FC90383F80FE90387F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500C1148014
-E3A214C16C0180140029277DA630>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fc cmmi10 10.95 3
-/Fc 3 83 df<133F14E0EB07F0EB03FC13016D7EA3147FA26E7EA36E7EA36E7EA36E7EA3
-6E7EA26E7EA36E7EA3157FA36F7E157F15FF4A7F5C913807CFE0EC0F8FEC1F0F91383E07
-F0147C14FC49486C7EEB03F0EB07E049486C7EEB1F80EB3F00496D7E13FE4848147F485A
-485A4848EC3F80485A123F4848EC1FC048C8FC4816E048150F48ED07F0007015032C407B
-BE35>21 D<49B712F018FF19C0D9000190C76C7EF00FF84BEC03FC1801020382727E5DA2
-14071A805DA2140F4E13005DA2021F5E18034B5D1807023F5E4E5A4B4A5A4E5A027F4B5A
-06FEC7FC4BEB03FCEF3FF091B712C005FCC8FC92CBFCA25BA25CA21303A25CA21307A25C
-A2130FA25CA2131FA25CA2133FA25C497EB612E0A3413E7DBD3A>80
-D<49B77E18F818FFD90001D900017F9438003FE04BEC0FF0727E727E14034B6E7EA30207
-825DA3020F4B5A5DA24E5A141F4B4A5A614E5A023F4B5A4B4A5A06FEC7FCEF03FC027FEC
-0FF04BEBFF8092B500FCC8FC5F9139FF8001FE92C7EA7F80EF1FC084496F7E4A1407A284
-13035CA2170F13075C60171F130F5CA3011F033F5B4AEE038018E0013F17071A004A021F
-5B496C160EB600E090380FF01E05075B716C5ACBEAFFE0F03F8041407DBD45>82
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fd cmti10 10.95 52
-/Fd 52 123 df<933807FF80043F13E09338FE00F8DB01F0133EDB07E0130E4B48131F4C
-137F031F14FF4BC7FCA218FE157E1878180015FE5DA31401A25DA414030103B712F0A218
-E0903A0003F000070207140F4B14C0A3171F020F15805DA2173F1800141F5D5F177EA214
-3F92C712FE5FA34A1301027EECF81CA3160302FEECF03C4A1538A21878187013014A0101
-13F018E0933800F1C0EF7F804948EC1F0094C7FCA35C1307A2001E5B127F130F00FF5BA2
-49CAFC12FEEAF81EEA703CEA7878EA1FF0EA07C0385383BF33>12
-D<EA01E0EA07F8120F13FC121FA4120FEA03D8EA0018A2133813301370136013E013C012
-01EA038013005A120E5A5A5A5A5A0E1C6DBE1C>39 D<EA01E0EA07F8120FA2EA1FFCA4EA
-0FF8EA0798EA001813381330A21370136013E013C01201EA0380EA07001206120E5A5A5A
-5A5A0E1C7A891C>44 D<387FFFFCA3B5FCA21605799521>I<120FEA3FC0127FA212FFA3
-1380EA7F00123C0A0A77891C>I<15FE913807FF8091381F07C091387C01F0ECF0004948
-13F8494813780107147C495A49C7FC167E133E137EA25BA2485AA2000315FEA25B000715
-FCA2491301120FA34848EB03F8A44848EB07F0A448C7EA0FE0A316C0007E141F12FE1680
-153FA2481500A2157EA25DA25D4813015D6C495A127C4A5A4A5A6C49C7FC143E6C5B380F
-C1F03803FFC0C648C8FC273F76BC2E>48 D<15FE913803FFC091380F01F091383C00F84A
-137C4A7F4948133F49487F4A148049C7FC5BEB0E0C011E15C0EB1C0EEB3C061338137813
-70020E133FD9F00C148013E0141C0218137F00011600EBC0384A13FEEC600102E05B3A00
-E3C003F89039FF0007F0013C495A90C7485A5E037FC7FC15FC4A5A4A5AEC0FC04AC8FC14
-7E14F8EB03E0495A011FC9FC133E49141801F0143C48481438485A1678485A48C85A120E
-001E4A5AD83FE0130301FF495A397C3FF01FD8780FB55AD8700391C7FCD8F0015B486C6C
-5A6E5AEC07C02A3F79BC2E>50 D<131EEB3F80137FEBFFC05AA214806C13005B133C90C7
-FCB3120FEA3FC0127FA212FFA35B6CC7FC123C122777A61C>58 D<171C173C177CA217FC
-A216011603A21607A24C7EA2161DA216391679167116E1A2ED01C1A2ED03811507160115
-0EA2031C7FA24B7EA25D15F05D4A5AA24A5AA24AC7FC5C140E5C021FB6FC4A81A20270C7
-127FA25C13015C495AA249C8FCA2130E131E131C133C5B01F882487ED807FEEC01FFB500
-E0017FEBFF80A25C39417BC044>65 D<9339FF8001C0030F13E0033F9038F803809239FF
-807E07913A03FC001F0FDA0FF0EB071FDA1FC0ECBF00DA7F806DB4FC4AC77E495AD903F8
-6E5A495A130F4948157E4948157C495A13FF91C9FC4848167812035B1207491670120FA2
-485A95C7FC485AA3127F5BA312FF5BA490CCFCA2170FA2170EA2171E171C173C17381778
-6C16706D15F04C5A003F5E6D1403001F4B5A6D4AC8FC000F151E6C6C5C6C6C14F86C6C49
-5A6C6CEB07C090397FC03F8090261FFFFEC9FC010713F0010013803A4272BF41>67
-D<49B712C018F818FE903B0003FE0003FF9438007F804BEC1FC0F00FE0F007F014074BEC
-03F8F001FCA2140F4BEC00FEA3141F4B15FFA3143F5DA3027F5D5DA219FE14FF92C81203
-A34917FC4A1507A219F813034A150F19F0A20107EE1FE05CF03FC0A2010FEE7F804A1600
-6060011F4B5A4A4A5A4D5AA2013F4B5A4AEC3FC04DC7FC017F15FEEE03FC4AEB0FF001FF
-EC7FE0B8128004FCC8FC16E0403E7BBD45>I<49B812F8A390260003FEC7121F18074B14
-031801F000F014075DA3140F5D19E0A2141F4B1338A2EF7801023F027013C04B91C7FCA2
-17F0027F5CED80011603160F91B65AA3ED001F49EC07805CA3010392C8FC5CF003804C13
-070107020E14005C93C75A180E010F161E4A151C183CA2011F5E5C60A2013F15014A4A5A
-1707017F150F4D5A4A147F01FF913807FF80B9FCA295C7FC3D3E7BBD3E>I<49B812F0A3
-90260003FEC7123F180F4B1403A2F001E014075DA3140F5D19C0A2141F5D1770EFF00302
-3F02E013804B91C7FCA21601027F5CED8003A2160702FFEB1F8092B5FCA349D9003FC8FC
-4A7F82A20103140E5CA2161E0107141C5CA293C9FC130F5CA3131F5CA3133F5CA2137FA2
-5C497EB612E0A33C3E7BBD3B>I<9339FF8001C0030F13E0033F9038F803809239FF807E
-07913A03FC001F0FDA0FF0EB071FDA1FC0ECBF00DA7F806DB4FC4AC77E495AD903F86E5A
-495A130F4948157E4948157C495A13FF91C9FC4848167812035B1207491670120FA2485A
-95C7FC485AA3127F5BA312FF5BA30303B512FC90C7FCA2DB000190C7FCA25FA216035FA3
-16076C5E7FA2003F150F6D5D121F6D141F000F153F6C6C4A5A6C6C14F76C6CEB01E36CB4
-EB07C1903A7FC03F81C090391FFFFE00010701F890C8FC010013803A4272BF46>I<49B6
-48B6FC495DA2D9000390C7000313004B5D4B5DA2180714074B5DA2180F140F4B5DA2181F
-141F4B5DA2183F143F4B5DA2187F147F4B5DA218FF91B8FC96C7FCA292C712015B4A5DA2
-170313034A5DA2170713074A5DA2170F130F4A5DA2171F131F4A5DA2173F133F4A5DA201
-7F157FA24A5D496C4A7EB66CB67EA3483E7BBD44>I<49B6FC5BA2D9000313005D5DA314
-075DA3140F5DA3141F5DA3143F5DA3147F5DA314FF92C7FCA35B5CA313035CA313075CA3
-130F5CA3131F5CA3133F5CA2137FA25C497EB67EA3283E7BBD23>I<4AB61280A2180091
-C713C0167F5FA216FF94C7FCA35D5EA315035EA315075EA3150F5EA3151F5EA3153F5EA3
-157FA25EA215FFA293C8FCA25CA25DA2380F8003EA3FC0D87FE05BA21407D8FFC05B140F
-01805B49485A12FC0070495A4A5A6C01FEC9FC383C01FC380F07F03807FFC0C648CAFC31
-4079BD30>I<49B612C0A25FD9000390C8FC5D5DA314075DA3140F5DA3141F5DA3143F5D
-A3147F5DA314FF92C9FCA35B5CA313035C18C0EF01E0010716C05C17031880130F4A1407
-18005F131F4A141EA2173E013F5D4A14FC1601017F4A5A16074A131F01FFECFFF0B8FCA2
-5F333E7BBD39>76 D<49B5933807FFFC496062D90003F0FC00505ADBBF805E1A771AEF14
-07033F923801CFE0A2F1039F020FEE071F020E606F6C140E1A3F021E161C021C04385BA2
-F1707F143C023804E090C7FCF001C0629126780FE0495A02705FF00700F00E0114F002E0
-031C5BA2F03803010116704A6C6C5D18E019070103ED01C00280DA03805BA2943807000F
-13070200020E5C5FDB03F8141F495D010E4B5CA24D133F131E011CDAF9C05CEEFB80197F
-013C6DB4C7FC013895C8FC5E01784A5C13F8486C4A5CD807FE4C7EB500F04948B512FE16
-E01500563E7BBD52>I<EEFFC0030713F892383F80FE9238FC003FDA03F0EB0F804A486D
-7EDA1F80804AC76C7E027E6E7E4A81494814004948811307495A4948157F133F5C49C9FC
-4917805B1201485AA212075B000F17FFA25B121F190048485DA448484B5AA34D5AA25B4D
-5A12FF60171F60007F163F604D5AA24DC7FC5F003F15014C5A6D5D001F4B5A4C5A6C6C4A
-5A4C5A6C6C4AC8FC000315FC6C6C495A6C6CEB07E0017FEB1F8090261FC07EC9FC903807
-FFF801001380394273BF46>79 D<49B77E18F018FC903B0003FE0003FEEF00FF4BEC7F80
-F03FC00207151F19E05DA2020F16F0A25DA2141FF03FE05DA2023F16C0187F4B1580A202
-7FEDFF00604B495A4D5A02FF4A5A4D5A92C7EA3FC04CB4C7FC4990B512FC17E04ACAFCA2
-1303A25CA21307A25CA2130FA25CA2131FA25CA2133FA25CA2137FA25C497EB67EA33C3E
-7BBD3E>I<EEFFC0030713F892383F80FE9238FC003FDA03F06D7E4A486D7EDA1FC06D7E
-4AC76C7E027E814A6E7E495A01036F7E495A495A494881133F4A81137F49C91380A2485A
-12035B000717FF5B120FA25B121F190048485DA448484B5AA36017075B6000FF160F6017
-1F60127F4D5A60177F4DC7FC5F003F903803E00191390FF003FCDA3C185B3B1FC0700C07
-F002E0495A000F496C485A01E04A5AD807F14AC8FC0003018013FCD801F9EB07F8D800FD
-14E090397FC01F80903A1FE07E0003903807FFFE0100018E5BDA000E1306030F130EA24B
-131E5FEE807CEEC1F816FF5FA25F5F8194C8FC6F5AED01F8395273BF46>I<49B612FCEF
-FF8018F0903B0003FE000FF8EF03FE4BEB00FF8419800207ED3FC05DA219E0140F5DA302
-1FED7FC05DA2F0FF80143F4B15004D5A60027F4A5A4B495A4D5AEF3F8002FF02FEC7FC92
-380007F892B512E01780499038000FE04A6D7E707E707E0103814A130083A213075CA25E
-130F5C5F1603131F5CA3013F020714404A16E05F017F160119C04A01031303496C1680B6
-D8800113079438FE0F009338007E1ECAEA3FFCEF07F03B407BBD42>I<92391FE00380ED
-7FFC913A01FFFE0700913907F01F8F91390FC007DF4AC66CB4FC023E6D5A4A130014FC49
-5A4948147CA2495AA2010F15785CA3011F1570A46E91C7FCA2808014FE90380FFFE015FC
-6DEBFF8016E06D806D806D6C7F141F02037FEC003FED07FF1501A281A282A212075A167E
-120EA2001E15FE5EA25E003E14015E003F14034B5A486C5C150F6D495A6D49C8FCD8F9F0
-137C39F8FE01F839F03FFFF0D8E00F13C026C001FEC9FC314279BF33>I<48B9FCA25A90
-3AFE001FF00101F89138E0007FD807E0163E49013F141E5B48C75BA2001E147FA2001C4B
-131C123C003814FFA2007892C7FC12704A153C00F01738485CC716001403A25DA21407A2
-5DA2140FA25DA2141FA25DA2143FA25DA2147FA25DA214FFA292C9FCA25BA25CA21303A2
-5CEB0FFE003FB67E5AA2383D71BC41>I<277FFFFE01B500FC90B512E0B5FCA200039026
-80000790C7380FFC006C90C701FCEC07F049725A04035EA26350C7FCA20407150EA2040F
-5D1A3C041F153862163B6216734F5A6D14E303014B5A6C15C303034BC8FC1683DB070314
-0E191E030E151C61031C7F61ED380161157003F04A5A15E002014B5A15C0DA03804AC9FC
-60DA0700140E60140E605C029C5D14B8D97FF85D5C715A5C4A5DA24A92CAFC5F91C7FC70
-5A137E5F137C5F137801705D53406EBD5B>87 D<91B690383FFFFC605E020101E0010F13
-006E49EB07F84C6D5A19C06F6C495A96C7FC033F140E705B183C031F5C705B4D5A030F5C
-70485A4DC8FC0307130EEEFC1E5F03035BEEFE705F6F6C5A5FA26F90C9FC83A2707EA216
-FF4B7F5DED079FEE1FF0150EED1C0F03387F1578EDF007DA01E07F15C09138038003DA07
-007F140E021E13014A805C02707F4A81495A4948147F01078249C8FC013F6F7E496C147F
-2603FFC049487EB500F8011FEBFFE0A261463E7CBD44>I<147E49B47E903907C1C38090
-391F80EFC090383F00FF017E137F4914804848133F485AA248481400120F5B001F5C157E
-485AA215FE007F5C90C7FCA21401485C5AA21403EDF0385AA21407EDE078020F1370127C
-021F13F0007E013F13E0003E137FECF3E1261F01E313C03A0F8781E3803A03FF00FF00D8
-00FC133E252977A72E>97 D<EB1FC0EA0FFF5CA2EA003FA291C7FCA25BA2137EA213FEA2
-5BA21201A25BA21203A25B147E3907F1FF809038F783E09038EF01F013FE390FF800F8A2
-4913FC49137C485A157E5B15FE123FA290C7FCA248130115FC127EA2140300FE14F85AA2
-EC07F0A215E048130F15C0141F15800078EB3F00127C147E003C5B383E01F8381E03E06C
-485A6CB4C7FCEA01F81F4076BE2A>I<EC1FC0ECFFF0903803F03C903807C01E90381F80
-0E90383F000F017E133F4913FF485A485A000714FE5B000F14FC48481300A2485AA3127F
-90C8FCA35A5AA6481403007E1407150F151E003E143C15786C14F0EC03E0390F800F8039
-03E07E003801FFF838003FC0202977A72A>I<EE3F80ED1FFF1700A2ED007FA2167EA216
-FEA25EA21501A25EA21503A25EA21507A25E147E903801FF8F903807C1CF90391F80EFC0
-90383F00FF017E137F5B48486D5A485AA2485A000F92C7FC5B001F5CA24848137EA215FE
-127F90C75AA214015A485CA2140316384814F0A21407167891380FE070127C021F13F000
-7E013F5B003E137FECF3E1261F01E35B3A0F8781E3802703FF00FFC7FCD800FC133E2940
-77BE2E>I<EC3F80903801FFE0903807E0F890381F803CEB3E0001FC131E485A485A1207
-4848133E49133C121F4848137C15F8EC03F0397F000FE0ECFF809038FFFC00B512C048C8
-FCA45AA61506150E151E007C143C15786C14F0EC01E06CEB07C0390F801F003807C0FC38
-01FFF038007F801F2976A72A>I<167C4BB4FC923807C78092380F83C0ED1F87161FED3F
-3FA2157EA21780EE0E004BC7FCA414015DA414035DA30103B512F8A390260007E0C7FCA3
-140F5DA5141F5DA4143F92C8FCA45C147EA414FE5CA413015CA4495AA4495AA4495A121E
-127F5C12FF49C9FCA2EAFE1EEAF83C1270EA7878EA3FE0EA0F802A5383BF1C>I<EC03F0
-EC0FFC91383E0E1C9138FC077E903901F003FE1303903807E001D90FC013FCEB1F80A2EB
-3F004914F8137E01FE1303A2484814F0A2150712034914E0A2150F12074914C0A2151FA2
-16805B153F1203ED7F006D5BA200015B0000495A9038F80F7E90387C1EFEEB1FF8903807
-E0FC90C7FC1401A25DA21403A25D001C1307007F5C48130F5D4A5A4AC7FC48137E00F85B
-387C03F0381FFFC0D803FEC8FC273B7CA72A>I<EB01FC13FF5CA21303A25CA21307A25C
-A2130FA25CA2131FA25CA2133FA291C8FCEC03F890387F0FFE91383E0F80D97E7813C0EC
-E007D9FFC013E014801400A2485A5BA25B0003140F16C05BA20007141F16805BA2000F14
-3F16005B5D001F147EEDFE074913FCA2003F0101130FEDF80E1300161E48ECF01CA2007E
-1538A200FE1570020013E048EC7FC00038EC1F0028407ABE2E>I<1478EB01FCA21303A3
-14F8EB00E01400AD137C48B4FC38038F80EA0707000E13C0121E121CEA3C0F1238A2EA78
-1F00701380A2EAF03F140012005B137E13FE5BA212015BA212035B1438120713E0000F13
-78EBC070A214F0EB80E0A2EB81C01383148038078700EA03FEEA00F8163E79BC1C>I<15
-07ED1FC0A2153FA31680ED0E0092C7FCADEC07C0EC3FF0EC78F8ECE07CEB01C01303EC80
-7EEB0700A2010E13FE5D131E131CEB3C01A201005BA21403A25DA21407A25DA2140FA25D
-A2141FA25DA2143FA292C7FCA25CA2147EA214FEA25CA213015CA2121C387F03F012FF49
-5A5C495A4848C8FCEAF83EEA707CEA3FF0EA0FC0225083BC1C>I<EB01FC13FF5CA21303
-A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C8FCED03E049EB0FF8ED3C3C017E
-EB707CEDE1FC9038FE01C1EC03839038FC0703140E0001011C13F891383800E049481300
-1460000313E0EBF9C0EBF78001FEC8FC1207EBFFE0EBE7F8EBE0FE000F137F6E7EEBC01F
-81001F130F16701380A2003F15F0021F13E001001380A248148116C0007EEB0F83168000
-FE14879138078F0048EB03FE0038EB00F826407ABE2A>I<EB07F0EA03FF14E0A2EA000F
-A214C0A2131FA21480A2133FA21400A25BA2137EA213FEA25BA21201A25BA21203A25BA2
-1207A25BA2120FA25BA2121FA25BA2123FA290C7FCA25A1307127EA2EAFE0F130E12FCA2
-131E131CA2EA7C381378EA3C70EA1FE0EA0780144079BE17>I<D801F0D93F80137F3D07
-FC01FFE003FFC03D0F3E07C1F80F83F03D0E1F0F00FC1E01F8001E011C90387C3800001C
-49D97E707F003C01F05C0038157F4A5C26783FC05C12704A91C7FC91C7127E00F003FE13
-01494A5CEA007EA20301140301FE5F495CA203031407000160495C180F03075D0003051F
-13E0494A1480A2030FEC3F810007F001C0495CA2031F91383E0380120F494AEC0700A203
-3F150E001FEF1E1C4991C7EA0FF80007C7000EEC03E0432979A74A>I<D801F0EB3F803A
-07FC01FFE03A0F3E07C1F83A0E1F0F00FC001E011C137C001C49137E003C13F012385C38
-783FC012705C91C7FC00F015FE495CEA007EA2150101FE5C5BA2150300015D5B15075E00
-03020F13704914C0A2031F13F00007ED80E05B1681EE01C0120F49EC0380A2EE0700001F
-EC0F0E49EB07FC0007C7EA01F02C2979A733>I<EC1FC0ECFFF8903803F07C90380FC01F
-EB1F8090393F000F80017E14C0491307484814E0485A12075B000F15F0485AA2485AA2ED
-0FE0127F90C7FCA2151F4815C05AA2ED3F80A2ED7F00A248147E007C5C007E13015D4A5A
-003E495A6C495A4A5A260F803EC7FC3807C0FC3801FFF038003F80242977A72E>I<9039
-03E001F890390FF807FE903A1E7C1E0F80903A1C3E3C07C0013C137801389038E003E0EB
-783F017001C013F0ED80019038F07F0001E015F8147E1603000113FEA2C75AA201011407
-17F05CA20103140F17E05CA20107EC1FC0A24A1480163F010F15005E167E5E131F4B5A6E
-485A4B5A90393FB80F80DA9C1FC7FCEC0FFCEC03E049C9FCA2137EA213FEA25BA21201A2
-5BA21203A2387FFFE0B5FCA22D3A80A72E>I<D801F013FC3A07FC07FF803A0F3E0F03C0
-260E1F1C13E0001EEB380F001C1370003CEBE01F123814C0D8783F14C000709038800700
-92C7FC91C8FC12F05BEA007EA313FE5BA312015BA312035BA312075BA3120F5BA3121F5B
-0007C9FC232979A726>114 D<EC7F80903801FFE0903807C0F890381F003C013E131C01
-3C131E017C133E49137E15FEA2000114FCA215706D13007FEBFFC014FC6C13FF15806D13
-C06D13E0010F13F01300140F14071403120C123F387F80011403D8FF0013E0A300FCEB07
-C000F0EB0F8012700078EB1F006C133C381F01F83807FFE0C690C7FC1F297AA725>I<EB
-01C0EB03F01307A25CA2130FA25CA2131FA25CA2133FA291C7FCA2007FB51280B6FC1500
-D8007EC7FC13FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121F141C1380
-A2003F133C1438EB0078147014F05C495AEA1F03495A6C48C7FCEA07FCEA01F0193A78B8
-1E>I<137C48B4141C26038F80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA
-781F007001805BA2D8F03F1303140000005D5B017E1307A201FE5C5B150F1201495CA215
-1F0003EDC1C0491481A2153F1683EE0380A2ED7F07000102FF13005C01F8EBDF0F000090
-38079F0E90397C0F0F1C90391FFC07F8903907F001F02A2979A731>I<017CEB01C048B4
-EB07F038038F80EA0707000E01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F1300
-00705BA2EAF03F91C712E012005B017E130116C013FE5B1503000115805BA2ED07001203
-495B150EA25DA25D1578000114706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F02529
-79A72A>I<017C167048B491387001FC3A038F8001F8EA0707000E01C015FE001E140300
-1CEDF000EA3C0F0038177C1507D8781F4A133C00701380A2D8F03F130F02004913381200
-5B017E011F14784C137013FE5B033F14F0000192C712E05BA2170100034A14C049137E17
-031880A2EF070015FE170E00010101141E01F86D131C0000D9039F5BD9FC076D5A903A3E
-0F07C1E0903A1FFC03FFC0902703F0007FC7FC372979A73C>I<903903F001F890390FFC
-07FE90393C1E0E0F9026780F1C138001F0EBB83FD801E013F89039C007F07FEA03800007
-14E0D9000F140048151C000E4AC7FCA2001E131FA2C75BA2143F92C8FCA35C147EA314FE
-4A131CA30101143C001E1538003F491378D87F811470018314F000FF5D9039077801C039
-FE0F7C033A7C0E3C078027783C1E1EC7FC391FF80FFC3907E003F029297CA72A>I<137C
-48B4143826038F8013FCEA0707000E7F001E1401001C15F8EA3C0F12381503D8781F14F0
-00701380A2D8F03F1307020013E012005B017E130F16C013FE5B151F1201491480A2153F
-000315005BA25D157EA315FE5D00011301EBF8030000130790387C1FF8EB3FF9EB07E1EB
-00035DA21407000E5CEA3F80007F495AA24A5AD8FF0090C7FC143E007C137E00705B3878
-01F0383803E0381E0FC06CB4C8FCEA03F8263B79A72C>I<D901F01370D907FC13F0010F
-14E090381FFE0190393FFF03C049EB838090387C0FCF9039F803FF009038F0007E49133C
-000114386C48137890C75A4A5A4A5A4A5A4AC7FC141E5C5C5C495A495A495A49C8FC131E
-4913075B5B48485B4848131E485A01F05BD80FFE137C391F1F81F8383E0FFFD83C075B48
-6C5B00705CD8F00190C7FC38E0007C24297BA725>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fe cmsy10 10.95 1
-/Fe 1 16 df<EB0FFCEB3FFF90B512C0000314F04880488048804880A2481580A3B712C0
-AA6C1580A36C1500A26C5C6C5C6C5C6C5CC614C0013F90C7FCEB0FFC22227BA72D>15
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ff cmr8 8 1
-/Ff 1 66 df<4A7E4A7EA34A7EA24A7EA3EC1BF81419A2EC30FCA2EC70FEEC607EA24A7E
-A349486C7EA2010380EC000FA201066D7EA3496D7EA2011FB57EA29038180001496D7EA3
-49147EA201E0147F4980A20001ED1F801203000716C0D80FF0EC3FE0D8FFFC0103B5FCA2
-302F7EAE35>65 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg cmbx12 12 61
-/Fg 61 122 df<ED0FFF4AB512C0020F14F0027F80903A01FFF803FC499038C000FE010F
-EB00034948497E49485B5C495A4C138001FF6E13005CA3705AEE01F893C8FCA74BB51280
-B9FCA5C69038E00003B3B0007FD9FFC1B6FCA538467EC53E>12 D<157F913803FFC0020F
-7F4A7F91383FE1F891387F80789138FF007C49143C495A163E4948131EA3130FA3163E16
-3C167C16786E13F84B5A4B5A15075E6D6C485A4BC70003B512E0153E15FC6D5B5D4B9139
-0007C0004B5E6D6D150F4FC7FC6D6D151E49173E496D5D491778496D15F890261FBFFE4A
-5AD93F3F5E9026FE1FFF1403D801FC6E495A00036D5E48486C6D130F000F6F49C8FC001F
-6D6D133E48486C6D133C187C007F6D6D5B6F6C485A00FF6E6C485A6FEB87C06F13CFEFFF
-806F91C9FC6D6D5B6F49EC01E06F7F6C6CEC3FFF706D13036C6C4A6DEB07C06C6C91B500
-F0130FDA800702FCEB1F806C9026E03FF89039FF80FF00000390B5D8F03FEBFFFE6CDBC0
-0F5C6C6CDA00035C011F01F8D9007F13E001030180020790C7FC4B477BC557>38
-D<EA07C0EA1FF0487E487E487E7FA31480A37E7EEA1FF7EA07C7EA0007130FA21400A25B
-131E133EA25B13FC5B485A485A1207485A485A90C7FC120C112278C41F>I<EC01E01403
-EC0FC0EC1F80EC3F00147E5C1301495A495A5C130F495A133F5C137F49C7FCA2485AA248
-5AA212075BA2120F5BA2121FA25B123FA4485AA612FFA25BAE7FA2127FA66C7EA4121F7F
-A2120FA27F1207A27F1203A26C7EA26C7EA26D7E133F80131F6D7E1307806D7E6D7E1300
-147E80EC1F80EC0FC0EC03E014011B6476CA2C>I<12F07E127E7E6C7E6C7E6C7E7F6C7E
-6C7E12007F137F80133F806D7EA26D7EA26D7EA2801303A2801301A280A27F1580A4EC7F
-C0A615E0A2143FAE147FA215C0A6ECFF80A415005BA25CA213035CA213075CA2495AA249
-5AA2495A5C137F91C7FC13FE5B1201485A485A5B485A485A48C8FC127E12F85A1B647ACA
-2C>I<EA07C0EA1FF0EA3FF8EA7FFC12FF13FEA213FFA47E7E7EEA07CFEA000FA2131F13
-1EA2133EA2133C137C13F8A2EA01F0120313E0EA07C0EA1F801300121E120C1022788E1F
->44 D<EA07C0EA1FF0EA3FF8EA7FFCEAFFFEA7EA7FFCEA3FF8EA1FF0EA07C00F0F788E1F
->46 D<EE01C0EE03E01607A2160F17C0161F1780A2163F17005E167EA216FE5E15015EA2
-15035EA215075E150F5EA2151F5E153F93C7FCA25D157E15FE5DA214015D14035DA21407
-5D140F5DA2141F5D143F92C8FCA25C147EA214FE5C13015CA213035C13075CA2130F5C13
-1F5CA2133F91C9FC5B137EA213FE5B12015BA212035BA212075B120F5BA2121F5B123F90
-CAFCA25A127E12FE5AA25A12782B647ACA38>I<EC03C01407141F147FEB03FF133FB6FC
-A413C3EA0003B3B3ADB712FCA5264177C038>49 D<ECFFE0010F13FE013F6D7E90B612E0
-000315F82607FC0313FE3A0FE0007FFFD81F806D138048C7000F13C0488001C015E001F0
-7F00FF6E13F07F17F881A46C5A6C5A6C5AC9FC17F05DA217E05D17C04B13804B1300A2ED
-1FFC4B5A5E4B5A4B5A4A90C7FC4A5A4A5AEC0FF04A5AEC3F804AC7127814FE495A494814
-F8D907E014F0495A495A49C8FC017C140149140348B7FC4816E05A5A5A5A5AB8FC17C0A4
-2D417BC038>I<ECFFF0010713FF011F14C0017F14F049C66C7ED803F8EB3FFED807E06D
-7E81D80FF86D138013FE001F16C07FA66C5A6C4815806C485BC814005D5E4B5A4B5A4B5A
-4A5B020F1380902607FFFEC7FC15F815FF16C090C713F0ED3FFCED0FFEEEFF80816F13C0
-17E0A26F13F0A217F8A3EA0FC0EA3FF0487EA2487EA217F0A25D17E06C5A494913C05BD8
-3F80491380D81FF0491300D80FFEEBFFFE6CB612F800015D6C6C14C0011F49C7FC010113
-E02D427BC038>I<163FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC
-0F87EC1F07143E147E147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A
-485A485A120F5B48C7FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC0
-38>I<0007150301E0143F01FFEB07FF91B6FC5E5E5E5E5E16804BC7FC5D15E092C8FC01
-C0C9FCAAEC3FF001C1B5FC01C714C001DF14F09039FFE03FFC9138000FFE01FC6D7E01F0
-6D13804915C0497F6C4815E0C8FC6F13F0A317F8A4EA0F80EA3FE0487E12FF7FA317F05B
-5D6C4815E05B007EC74813C0123E003F4A1380D81FC0491300D80FF0495AD807FEEBFFFC
-6CB612F0C65D013F1480010F01FCC7FC010113C02D427BC038>I<4AB47E021F13F0027F
-13FC49B6FC01079038807F8090390FFC001FD93FF014C04948137F4948EBFFE048495A5A
-1400485A120FA248486D13C0EE7F80EE1E00003F92C7FCA25B127FA2EC07FC91381FFF80
-00FF017F13E091B512F89039F9F01FFC9039FBC007FE9039FF8003FF17804A6C13C05B6F
-13E0A24915F0A317F85BA4127FA5123FA217F07F121FA2000F4A13E0A26C6C15C06D4913
-806C018014006C6D485A6C9038E01FFC6DB55A011F5C010714C0010191C7FC9038003FF0
-2D427BC038>I<121E121F13FC90B712FEA45A17FC17F817F017E017C0A2481680007EC8
-EA3F00007C157E5E00785D15014B5A00F84A5A484A5A5E151FC848C7FC157E5DA24A5A14
-035D14074A5AA2141F5D143FA2147F5D14FFA25BA35B92C8FCA35BA55BAA6D5A6D5A6D5A
-2F447AC238>I<EC7FF00103B5FC010F14C0013F14F090397F801FFC3A01FC0003FE4848
-6D7E497F4848EC7F80163F484815C0A2001F151FA27FA27F7F01FE143F6D158002C0137F
-02F014006C01FC5B6E485A6C9038FF83FCEDE7F86CECFFE06C5D6C92C7FC6D14C06D8001
-0F14F882013F8090B7FC48013F14802607FC0F14C0260FF80314E04848C6FC496D13F000
-3F141F48481307496D13F8150000FF157F90C8123F161F160FA21607A36D15F0127F160F
-6D15E06C6C141F6DEC3FC06C6CEC7F80D80FFE903801FF003A07FFC00FFE6C90B55AC615
-F0013F14C0010F91C7FC010013F02D427BC038>I<EC7FF0903807FFFE011F6D7E017F14
-E09039FFE03FF0489038800FF848496C7E48488048486D7E001F80003F1680A2484815C0
-8117E0A212FF17F0A617F8A45D127FA3003F5CA26C7E5D6C6C5B12076C6C133E6CEBC07C
-6CEBFFF8013F5B010F01C013F00101130090C8FCA217E05DA2EA03C0D80FF015C0487E48
-6C491380A217004B5A150F5E49495A6C48495A01C0EBFFE0260FF0035B6CB65A6C4AC7FC
-6C14F86C6C13E0D907FEC8FC2D427BC038>I<EE1F80A24C7EA24C7EA34C7EA24B7FA34B
-7FA24B7FA34B7F169F031F80161F82033F80ED3E07037E80157C8203FC804B7E02018115
-F0820203814B137F0207815D173F020F814B7F021F8292C77EA24A82023E80027E82027F
-B7FCA291B87EA2498302F0C8FCA20103834A157F0107834A153FA249488284011F8491C9
-7E4984133E017E82B6020FB612F0A54C457CC455>65 D<B9FC18F018FE727E19E026003F
-FCC700077F05017F716C7E727E727EA2721380A37213C0A74E1380A24E1300A24E5A4E5A
-4E5A4D5B05075B94B5128091B700FCC7FC18F018FF19E002FCC7000113F8716C7EF01FFE
-727E7213801AC07213E0A27213F0A31AF8A71AF0A2601AE0604E13C0604E138095B51200
-05075BBA12F86119C04EC7FC18E045447CC350>I<DCFFF01470031F01FF14F04AB6EAE0
-010207EDF803023FEDFE0791B539E001FF0F4949C7EA3F9F010701F0EC0FFF4901C08049
-90C87E4948814948814948167F4849163F4849161F5A4A160F485B19074890CAFC19035A
-5BA2007F1801A34994C7FC12FFAE127F7F1AF0A2123FA27F6C18011AE06C7F19036C6D17
-C06E16077E6C6DEE0F806C6DEE1F006D6C5E6D6C167E6D6C6C5D6D6D4A5A6D01F0EC07F0
-010101FEEC1FE06D903AFFF001FF80023F90B6C7FC020715FC020115F0DA001F14800300
-01F8C8FC44467AC451>I<B9FC18F018FE727E19E026003FFEC7001F13F805017F943800
-3FFF060F7F727F727F727F84737E737EA2737EA2737EA21B80A2851BC0A51BE0AD1BC0A5
-1B8061A21B006162193F624F5A19FF624E5B06075B4E5B063F90C7FC4DB45A050F13F8BA
-5A19C04EC8FC18F095C9FC4B447CC356>I<BA12F8A485D8001F90C71201EF003F180F18
-0318011800A2197E193EA3191EA21778A285A405F890C7FCA316011603161F92B5FCA5ED
-001F160316011600A2F101E01778A2F103C0A494C7FC1907A21A80A2190FA2191FA2193F
-F17F0061601807181F4DB5FCBBFC61A443447DC34A>I<BA1280A419C026003FFEC7121F
-1701EF007F183F181F180F180719E01803A31801A3EE01E0F000F0A419001603A3160716
-0F167F91B6FCA59138FE007F160F16071603A31601A693C9FCAFB712F0A53C447CC346>
-I<DCFFF01470031F01FF14F04AB6EAE0010207EDF803023FEDFE0791B539E001FF0F4949
-C7EA3F9F010701F0EC0FFF4901C0804990C87E4948814948814948167F4849163F484916
-1F5A4A160F485B19074890CAFC19035A5BA2007F1801A34994C8FC12FFAD057FB612F012
-7F7FA3003FDC0001EBF000A27F7EA26C7FA26C7F807E6C7F6C7F6D7E6D6C5D6D6C7E6D6D
-5C6D01F05C010101FE143F6D903AFFF001FF9F023F90B6120F0207EDFC030201EDF000DA
-001F02C01330030001FCC9FC4C467AC458>I<B7D88003B612FEA526003FFEC9EBF800B3
-A791B9FCA54AC9FCB3AAB7D88003B612FEA54F447CC358>I<B712E0A5D8001F90C7FCB3
-B3B3A4B712E0A523447DC32A>I<B76C0103B512F8A526003FFEC93807E0004F5A4F5A07
-7EC7FC614E5A4E5A4E5AF01F804EC8FC187E604D5AEF07F0EF0FC04D5A4DC9FC177E4C5A
-EE03F04C5A4C5A4C7EEE7FF04C7E5D4B7F4B7F4B7FED3F3FDB7E1F7F03FC806E486C7F4B
-7E4B6C7F0380804B6C7F4A7F717E84717F83717F85717F83717F85717F187F727E86727F
-84727F86727F84B76C90B612FCA54E447CC358>75 D<B712F0A526003FFECAFCB3B1F007
-80A4180F1900A460A360A2187EA218FE170117031707171F177FEE03FFB95AA539447CC3
-43>I<B500FE067FB512806E95B6FCA26F5EA2D8003F50C7FC013D6DEE03DFA2013C6DEE
-079FA26E6CEE0F1FA26E6C161EA26E6C163CA36E6C1678A26E6C16F0A26E6DEC01E0A26E
-6DEC03C0A36E6DEC0780A26F6CEC0F00A26F6C141EA26F6C5CA36F6C5CA26F6C5CA26F6D
-485AA26F6D485AA26F6D485AA3706C48C7FCA293383FF81EA2706C5AA2706C5AA3706C5A
-A2705BA2705BA2705BA2B6057FB6128071C7FCA2173E171C61447CC36A>I<B64BB512FE
-8181A281D8003F6D91C7EA780081013D7F81133C6E7E6E7F6E7F6E7F6E7F82806E7F6E7F
-6F7E6F7F83816F7F6F7F6F7F6F7F6F7F8382707F707F707F707F8482707F707F717E7113
-807113C019E0837113F07113F87113FC7113FE19FF847213F884848484A28484197F193F
-191FA2190F1907B61603190119001A78A24F447CC358>I<923807FFC092B512FE0207EC
-FFC0021F15F091267FFE0013FC902601FFF0EB1FFF01070180010313C04990C76C7FD91F
-FC6E6C7E49486F7E49486F7E01FF8348496F7E48496F1380A248496F13C0A24890C96C13
-E0A24819F04982003F19F8A3007F19FC49177FA400FF19FEAD007F19FC6D17FFA3003F19
-F8A26D5E6C19F0A26E5D6C19E0A26C6D4B13C06C19806E5D6C6D4B13006C6D4B5A6D6C4B
-5A6D6C4B5A6D6C4A5B6D01C001075B6D01F0011F5B010101FE90B5C7FC6D90B65A023F15
-F8020715C002004AC8FC030713C047467AC454>I<B9FC18F018FE727E19E0D8001F90C7
-000F7F05017F716C7E727E727E721380A21AC084A21AE0A91AC0A24E1380A21A00604E5A
-4E5A4D485A050F5B92B712C096C7FC18FC18C092CBFCB3A7B712E0A543447DC34D>I<B8
-12F8EFFFC018F818FE727ED8001F90C7003F13E005037F05007F727E727E727EA28684A2
-86A762A24E90C7FCA24E5A61187F943801FFF005075B053F138092B7C8FC18F818E018F8
-92C77FEF3FFF050F7F717F717FA2717FA2717FA785A61B0F85A2187F73131F72141EB700
-E06DEB803E72EBE0FC72EBFFF8060114F0726C13E0CC0007138050457DC354>82
-D<DAFFE0131C010701FE133C013F9038FF807C90B6EAE0FC4815F9489038801FFF3907FC
-00014848EB007F4848143F4848140F491407007F15035B1601160012FF177CA27FA26D15
-3C7F7F6D92C7FC6C7EEBFFE014FE6CEBFFF015FF6C15E016FC6C816C6F7E6C826C826C6C
-81011F810107811300020F80140003077FED007F82040F1380828212F082A282A27EA218
-007EA26C5D6C5E6D14036D5D6D140701F84A5A01FFEC3FF002F8EBFFE0486CB65AD8FC1F
-92C7FCD8F80714FC48C614F0480107138031467AC43E>I<003FBA12E0A59026FE000FEB
-8003D87FE09338003FF049171F90C71607A2007E1803007C1801A300781800A400F819F8
-481978A5C81700B3B3A20107B8FCA545437CC24E>I<B76C010FB512F8A526003FFEC938
-03E000B3B3A9011F17076280190F6D606F151F6D95C7FC6D6D5D197E6D6D5D6D6D1403DA
-7FFC4A5A6EB4EC3FF0020F9039F003FFE06E90B61280020193C8FC6E6C14FC030F14E092
-26007FFEC9FC4D457CC356>I<B600FE017FB691B512FEA526007FFCC8D83FFEC9EA7C00
-6E82013F701778807415F86D705F6F7014016D705FA26F7014036D64814E6D14076D646F
-70140F6D041E94C7FCA26F023E6D5C6DDC3C7F151E81027F037C6D5CF0783F6F70147C02
-3F4B6C1578A26F01016F13F86E4B6C5D16806E02036F485A4E7E04C0EEE0036E4A486C5D
-A2DCE00FEDF0076E4B6C5D16F06E4A6F48C8FC051E7F04F8705A6E4A027F131EA2DCFC7C
-EDFE3E037F0178023F133C04FE16FF033F01F85E4D8004FF17F86F496E5BA36F496E5BA2
-6F604D80A26F90C86C5BA36F486F90C9FCA26F48167EA30478163C6F457EC374>87
-D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7E
-A26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC0100
-0313E0000F1380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013E
-EBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97
-D<EB7FC0B5FCA512037EB1ED0FF892B57E02C314E002CF14F89139DFC03FFC9139FF000F
-FE02FCEB03FF4A6D13804A15C04A6D13E05CEF7FF0A218F8173FA318FCAC18F8A2177F18
-F0A3EFFFE06E15C06E5B6E491380027C491300496C495A903AFC1FC07FFC496CB512F0D9
-F00314C049C691C7FCC8EA1FF036467DC43E>I<EC3FFC49B512C0010F14F0013F14FC90
-397FF003FE9039FFC001FF0003495A48494813805B120F485AA2485A6F1300007F6E5AED
-00784991C7FCA212FFAC6C7EA3123F6DEC03C0A26C6C1407000F16806D140F6C6DEB1F00
-6C6D133E6C01F05B3A007FFC03F86DB55A010F14C0010391C7FC9038003FF82A2F7CAD32
->I<EE03FEED07FFA5ED001F160FB1EC3FE0903803FFFC010FEBFF8F013F14CF9039FFF8
-07FF48EBC00148903880007F4890C7123F4848141F49140F121F485AA3127F5BA212FFAC
-127FA37F123FA26C6C141FA26C6C143F0007157F6C6C91B5FC6CD9C00314FC6C9038F01F
-EF6DB5128F011FEBFE0F010713F89026007FC0EBF80036467CC43E>I<EC3FF80103B57E
-010F14E0013F8090397FF83FF89039FFC007FC48496C7E48496C7E48486D1380485A001F
-ED7FC05B003FED3FE0A2127F5B17F0161F12FFA290B7FCA401F0C9FCA5127FA27FA2123F
-17F06C7E16016C6C15E06C6C14036C6DEB07C06C6DEB0F806C01F0EB3F0090397FFE01FE
-011FB55A010714F0010114C09026001FFEC7FC2C2F7DAD33>I<EDFF80020F13E0027F13
-F049B512F849EB8FFC90390FFE0FFE90381FFC1F14F8133FEB7FF0A2ED0FFCEBFFE0ED03
-F0ED00C01600ABB612F8A5C601E0C7FCB3B0007FEBFFE0A527467DC522>I<DAFFE0137E
-010F9039FE03FF80013FEBFF8F90B812C048D9C07F133F489038001FF84848EB0FFC4848
-903907FE1F80001F9238FF0F00496D90C7FCA2003F82A8001F93C7FCA26D5B000F5D6C6C
-495A6C6C495A6C9038C07FF04890B55A1680D8078F49C8FC018013E0000F90CAFCA47F7F
-7F90B612C016FC6CEDFF8017E06C826C16FC7E000382000F82D81FF0C77ED83FC0140748
-48020113808248C9FC177FA46D15FF007F17006D5C6C6C4A5A6C6C4A5AD80FFEEC3FF83B
-07FFC001FFF0000190B612C06C6C92C7FC010F14F8D9007F90C8FC32427DAC38>I<EB7F
-C0B5FCA512037EB1ED07FE92383FFF8092B512E002C114F89139C7F03FFC9138CF801F91
-39DF000FFE14DE14FC4A6D7E5CA25CA35CB3A7B60083B512FEA537457CC43E>I<137C48
-B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7FCAAEB7FC0EA7FFF
-A512037EB3AFB6FCA518467CC520>I<EC03E0EC0FF8EC1FFCEC3FFEA2EC7FFFA5EC3FFE
-A2EC1FFCEC0FF8EC03E091C7FCAAEC01FF0103B5FCA5EB000F80B3B3A7EA1F80EA3FC0EA
-7FE0EAFFF0EC0FFEA215FC141F01E013F8007FEB3FF0393FC0FFE06CB512806C14000003
-13FCC613C0205A86C522>I<EB7FC0B5FCA512037EB293387FFFE0A593380FE0004C5A4C
-C7FC167E5EED03F8ED07E04B5A4B5A037FC8FC15FEECC1FCECC3FE14C7ECDFFF91B57E82
-A202F97F02E17F02C07FEC807F6F7E826F7E816F7F836F7F816F7F83707E163FB60003B5
-12F8A535457DC43B>I<EB7FC0B5FCA512037EB3B3B3A3B61280A519457CC420>I<90277F
-8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001B512E002816E4880913D87F01FFC
-0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF3E007F6C019E6D013C130F02BC5D
-02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003B512FEA5572D7CAC5E>I<90397F
-8007FEB590383FFF8092B512E0028114F8913987F03FFC91388F801F000390399F000FFE
-6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512FEA5372D7CAC3E>I<EC1FFC49B512
-C0010714F0011F14FC90397FF80FFF9026FFC0017F48496C7F4848C7EA3FE00007824848
-6E7E49140F001F82A2003F82491407007F82A400FF1780AA007F1700A46C6C4A5AA2001F
-5E6D141F000F5E6C6C4A5AA26C6C6CEBFFE06C6D485B27007FF80F90C7FC6DB55A010F14
-F8010114C09026001FFCC8FC312F7DAD38>I<90397FC00FF8B590B57E02C314E002CF14
-F89139DFC03FFC9139FF001FFE000301FCEB07FF6C496D13804A15C04A6D13E05C7013F0
-A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E06E15C06E5B6E4913806E4913006E49
-5A9139DFC07FFC02CFB512F002C314C002C091C7FCED1FF092C9FCADB67EA536407DAC3E
->I<90387F807FB53881FFE0028313F0028F13F8ED8FFC91389F1FFE000313BE6C13BC14
-F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5B612E0A5272D7DAC2E>114
-D<90391FFC038090B51287000314FF120F381FF003383FC00049133F48C7121F127E00FE
-140FA215077EA27F01E090C7FC13FE387FFFF014FF6C14C015F06C14FC6C800003806C15
-806C7E010F14C0EB003F020313E0140000F0143FA26C141F150FA27EA26C15C06C141FA2
-6DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E026E007FEC7FC232F7CAD2C
->I<EB01E0A51303A41307A2130FA2131FA2133F137F13FF1203000F90B51280B7FCA4C6
-01E0C7FCB3A3ED01E0A9150302F013C0137F150790393FF80F8090391FFC1F006DB5FC6D
-13FC01015B9038003FE023407EBE2C>I<D97FC049B4FCB50103B5FCA50003EC000F6C81
-B3A85EA25EA25E7E6E491380017FD901F713FE9138F807E76DB512C7010F1407010313FE
-9026007FF0EBFC00372E7CAC3E>I<B6903803FFFCA5000101E09038003E006C163C8001
-7F5D8017F8013F5D6E1301011F5D6E1303010F5D6E13076D5DED800F6D92C7FC15C05E6D
-EBE01E163E6D143CEDF07C027F1378EDF8F8023F5B15FD021F5B15FF6E5BA36E5BA26E90
-C8FCA26E5AA26E5AA21578362C7EAB3B>I<B5D8FE1FB539801FFFF0A500019027C0003F
-E0C7EA7C007114786E17F86C6F6C5C6E1601017F6E6C5CA26E011F1403013F6F5C6E013F
-1407011F6F5CA26E0179140F010F048090C7FC6E01F95C6D02F0EBC01E15806D902681E0
-7F5B18E003C3157C6D9139C03FF07815E76DDA801F5B18F803FF14F96E9039000FFDE018
-FF6E486D5BA36E486D5BA26E486D90C8FCA24B7F02075DA26E48147C4B143C4C2C7EAB51
->I<B500FE90383FFFF0A5C601F0903803E0006D6C495A013F4A5A6D6C49C7FC6E5B6D6C
-137E6DEB807C6D6D5A6DEBC1F0EDE3E06DEBF7C06EB45A806E90C8FC5D6E7E6E7F6E7FA2
-4A7F4A7F8291381F3FFCEC3E1F027C7F4A6C7E49486C7F01036D7F49487E02C08049486C
-7F49C76C7E013E6E7E017E141FB500E090B512FCA5362C7EAB3B>I<B6903803FFFCA500
-0101E09038003E006C163C80017F5D8017F8013F5D6E1301011F5D6E1303010F5D6E1307
-6D5DED800F6D92C7FC15C05E6DEBE01E163E6D143CEDF07C027F1378EDF8F8023F5B15FD
-021F5B15FF6E5BA36E5BA26E90C8FCA26E5AA26E5AA21578A215F85D14015D001F1303D8
-3F805B387FC007D8FFE05B140F92C9FC5C143E495A387FC1F8EB07F06CB45A6C5B000790
-CAFCEA01FC36407EAB3B>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fh cmsl10 10.95 16
-/Fh 16 88 df<EA0780EA0FE0EA1FF0123FA5121FEA0F301200A213701360A213E013C0
-120113801203EA07001206120E5A5A5A5A5A0C1C7A8919>44 D<007FB5FCA2B512FEA418
-067C961E>I<EC07F8EC3FFF9138FC0FC0903903F003E0903907C001F0D90F8013F849C7
-FC013E14FC017E147C017C147E13FC485AA20003157F5B1207A2120F5BA2121F16FF5BA2
-123FA44848EB01FEA648C7EA03FCA5ED07F8A25A16F0A2150F16E0A3ED1FC0A21680007E
-143F1600157E123E003F5C4A5AD81F805B000FEB07E06C6C485A2603F03FC7FC3800FFFC
-EB1FE0283F79BC2D>48 D<157015F014011407143F903803FFE0137FEBFFCFEBF80F1300
-141F15C0A5143F1580A5147F1500A55C5CA513015CA513035CA513075CA5130F5CA3131F
-497EB612F8A31D3D78BC2D>I<EC01FE91380FFFE0023F13F89138FC07FC903901E001FE
-903907C000FF49C7EA7F80011E15C0163F4915E05B0170141F13FF80A35A163FA26C90C7
-FC137E0118EC7FC090C8FCEEFF80A24B1300A24B5A5E4B5A4B5A4B5A5E4B5A4BC7FC15FE
-EC01F84A5A4A5A4A5A4AC8FC143E5C5CEB01E04948130E49485B49C7FC131E495C13705B
-48485C484814F0000FB6FC5A485D5AB7FC5EA22B3D7CBC2D>I<EC07FC91383FFF809138
-F80FE0903903C007F09039078003FC90380F0001011C14FE013C14FF137F1480EBFFC0A3
-1480A291380003FE137E90C7FCED07FC16F8150F16F0ED1FE016C0ED3F80ED7E005DEC07
-F0903803FF8015F090380001FC6E7EED7F80ED3FC0A2ED1FE016F0A316F8A4120EEA3F80
-486C133F16F012FFA216E0157F5B48C7EAFFC000F01580007049130012786C495A003EEB
-07F86C495A390FE03FE00003B51280C649C7FCEB1FE0283F7ABC2D>I<01061403D90780
-131F90390FF801FE91B512FC16F816F016E0168049EBFE0015F890381C7FC091C8FCA313
-3C1338A513781370A2EC1FE0ECFFF8903873E03E9038FF001F01FCEB0F804914C049EB07
-E04914F049130390C7FC16F8A61507A21206EA3F80487EA2150F00FF15F0A24914E090C7
-121F00FC15C000F0143F00701580ED7F0012786C14FE4A5A6C495A390F800FE03907E03F
-C06CB5C7FCC613FCEB1FE0283F7ABC2D>53 D<ED7F80913803FFE091380FC0F091383E00
-3802FC131C495A494813FE903807E003EB0FC090381F8007133FD97F0013FC01FE1303ED
-01F0484890C7FC1203A2485AA2120F5BA2001FEB3F809038E0FFE0393FE3C0F89038E700
-7C01EE7F01FC133F4848EB1F80A24914C05B16E0A2485AA216F05BA2ED3FE0A290C7FCA4
-157F16C0A316804814FF007E1500007F5C14016C5C4A5A6C6C485A4A5A6C6C485A2607E0
-7FC7FC3803FFFEC613F8EB3FC0273F78BC2D>I<4BB46C1370031F01F013F0037F9038FC
-01E0913A03FF807E03913A0FF8000F83DA1FE0EB07C7DA7F80EB01EF4AC812FFD903FE16
-C04948157F4948153F495A4948151F495A4948168091C9120F5A485AA2485A000F180049
-82121FA248485EA295C7FC485AA412FF5BA6043FB512E05BA29339001FFC00715AA2607F
-127FA2171F123F6D5EA2121F7F000F163F6C7E6C6C4B5A7F6C6C15FF6C6DEB01EFD93FC0
-EB07C7D91FF0EB1F87D907FE9038FE03800101B5EAF8016D6C01E0C8FCDA07FEC9FC3C42
-76BF47>71 D<011FB512FC5BA29039003FF8006E5AA25DA5143F5DA5147F5DA514FF92C7
-FCA55B5CA513035CA513075CA5130F5CA5131F5CA3133F497E007FB512F0A2B6FC263E7E
-BD21>73 D<013FB512FEA25E9026007FF8C8FCEC3FE0A25DA5147F5DA514FF92C9FCA55B
-5CA513035CA513075CA21838A21870130F5CA218E0A3011F15014A15C01703A21707EF0F
-80013F151F4A143F177FEFFF00017F140301FF143FB9FC5FA2353E7DBD39>76
-D<90263FFFF093381FFFF85013F0629026007FF8EFF000023F4D5AA2023B933801DFC0A2
-DA39FCED039FA2F1073F14790271040E5BEC70FE191C19381A7F02F01670DAE07F94C7FC
-19E0A2F001C06201016D6C495A02C05FF00700A2180E6F6C14010103161C028003385BA2
-18706F7EF0E00313070200DA01C05BA2923907F00380A294380700075B010E902603F80E
-5C5FA25F190F011E6D6C5A011C605FA2EEFDC0DB00FF141F013C5D013860013C92C7FC01
-7C5C01FE027E143F2607FF80017C4A7EB500FC037FB512E004785E4A1338553E7CBD53>
-I<923803FF80031F13F09238FE01FE913903F0003FDA0FC0EB1FC0DA3F80EB07E0027EC7
-6C7E49486E7E49488149486E7E4948157F495A013F17804948ED3FC049C9FCA24848EE1F
-E012035B000718F05B120FA2485A19F8123F5BA2127FA219F04848163FA5F07FE0A35BF0
-FFC0A219805F19007F4D5A127F4D5A60003F160F6D5E001F4C5A4D5A6C6C4B5A95C7FC6C
-6C15FE00034B5A6C6C4A5A6C6C4A5A017FEC1FC06D6C495AD90FE001FEC8FC903903F807
-F80100B512C0DA0FFCC9FC3D4276BF47>79 D<9238FF80070207EBE00F021FEBF81E9138
-7F00FE02FCEB1F3ED903F0EB0FFE49481307494813034AEB01FC49C7FC491400133E137E
-177C491578A57F1770A26D1500808080EB7FFEECFFE06D13FEEDFFC06D14F06D14FC0103
-80010080143F02031480DA003F13C015031500EE7FE0163F161FA2160F121CA31607160F
-003C16C0A31780003E151F1700007E5D007F153E6D5C16FC01E0495AD87DF0495AD8FCFC
-EB0FC03AF87F803F8027F01FFFFEC7FCD8E00713F839C0007FC030427BBF33>83
-D<0007B912F0A33C0FFE000FF8003F01F0160F01C04A13034848160190C7FC121EF000E0
-48141F5E1238A212781270153F5E5AA3C81600157F5EA515FF93C9FCA55C5DA514035DA5
-14075DA5140F5DA3141FEC7FFC0003B7FCA33C3D76BC42>I<B6017FB5D88007B512804A
-1A00A2000701C0010101E0C713F06C90C80180EC3FC06C48735A99C7FC057F150E1B1E6D
-191C6C1A3C1B3805FF15787214705E636EEB03BF017F4E5AEE073F505A040E7F051F4AC8
-FC161C6E170E013F143862167804706D5BEEF00F04E05D90381FE00104C015F003035E04
-80140106F85B9226070007130302F05F010F010E150797C9FC5D190E4BEB03FC616E5A01
-075F5D61DAF9C014FE05015BECFB8002FF6F5A7F92C75CA24A93CAFC835C606D5A605C60
-4A15781870594074BD5D>87 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fi cmbx10 10.95 61
-/Fi 61 122 df<EDFFF8020F13FF027F8049B612E001079038C01FF090390FFE0007D91F
-F8497ED93FE0131F4948497E13FF5C5A91C7FCA2705A705AEE03C093C8FCA6EE03FCB8FC
-A50001903880001F160FB3AB007FD9FE03B512F0A534407EBF3A>12
-D<B612E0A91B097F9823>45 D<EA0FC0EA1FE0EA3FF0EA7FF8EAFFFCA6EA7FF8EA3FF0EA
-1FE0EA0FC00E0E798D1D>I<161C163E167EA216FE16FC150116F8A2150316F0A2150716
-E0150F16C0A2151F1680153F1600A25D157E15FE5DA214015DA214035D14075DA2140F5D
-141F5DA2143F92C7FC5C147EA214FE5CA213015C13035CA213075C130F5CA2131F5C133F
-91C8FCA25B137EA213FE5B12015BA212035B12075BA2120F5B121F5BA2123F90C9FCA25A
-127E12FE5AA25A1278275B7AC334>I<ECFFE0010713FC011F13FF017F14C0D9FFE07F48
-9038803FF03A03FE000FF848486D7EA248486D7E001F81A348486D1380A3007F16C0A500
-FF16E0B3A2007F16C0A5003F16806D5BA2001F1600A2000F5D6D13076C6C495A6C6C495A
-6C6D485A6C9038E0FFE06DB55A011F91C7FC010713FC010013E02B3D7CBB34>I<140F14
-3F5C495A130F48B5FCB6FCA313F7EAFE071200B3B3A8007FB612F0A5243C78BB34>I<90
-3803FF80013F13F890B512FE00036E7E4881260FF80F7F261FC0037F4848C67F486C6D7E
-6D6D7E487E6D6D7EA26F1380A46C5A6C5A6C5A0007C7FCC8FC4B1300A25E153F5E4B5AA2
-4B5A5E4A5B4A5B4A48C7FC5D4A5AEC1FE04A5A4A5A9139FF000F80EB01FC495A4948EB1F
-00495AEB1F8049C7FC017E5C5B48B7FC485D5A5A5A5A5AB7FC5EA4293C7BBB34>I<9038
-01FFE0010F13FE013F6D7E90B612E04801817F3A03FC007FF8D807F06D7E82D80FFC131F
-6D80121F7FA56C5A5E6C48133FD801F05CC8FC4B5A5E4B5A4A5B020F5B902607FFFEC7FC
-15F815FEEDFFC0D9000113F06E6C7E6F7E6F7E6F7E1780A26F13C0A217E0EA0FC0487E48
-7E487E487EA317C0A25D491580127F49491300D83FC0495A6C6C495A3A0FFE01FFF86CB6
-5A6C5DC61580013F49C7FC010313E02B3D7CBB34>I<ED01F815031507A2150F151F153F
-A2157F15FF5C5CA25C5CEC1FBFEC3F3F143E147C14FCEB01F814F0EB03E01307EB0FC0EB
-1F801400133E137E5B485A5B485A1207485A5B48C7FC5A127E5AB812F8A5C8387FF800AA
-49B612F8A52D3C7DBB34>I<00071538D80FE0EB01F801FE133F90B6FC5E5E5E5E93C7FC
-5D15F85D15C04AC8FC0180C9FCA9ECFFC0018713FC019F13FF90B67E020113E09039F800
-7FF0496D7E01C06D7E5B6CC77FC8120F82A31780A21207EA1FC0487E487E12FF7FA21700
-A25B4B5A6C5A01805C6CC7123F6D495AD81FE0495A260FFC075B6CB65A6C92C7FCC614FC
-013F13F0010790C8FC293D7BBB34>I<EC07FF023F13C049B512F001078049EB03FC9038
-3FF80090397FE001FE9038FFC0034849487E48495AA2485A120FA2485A6F5A003F6E5A6F
-5A92C8FC485AA21402EC3FFE00FF496C7E01F9B512E001FB809138E03FF89039FF800FFC
-4A6C7E825B6F13804915C0A317E05BA4127FA5123FA26D15C0121FA2000F4A13806D1500
-12076C6C495A6C6D485A6C9038E07FF86DB55A6D5C6D1480010749C7FC010013F02B3D7C
-BB34>I<121F7F13F890B712F0A45A17E017C0178017005E5E5A007EC7EA01F84B5A007C
-4A5A4B5A4B5A93C7FC485C157E5DC7485A4A5AA24A5A140F5D141F143F5D147FA214FF92
-C8FC5BA25BA3495AA3130FA5131FAA6D5A6D5A6D5A2C3F7ABD34>I<ECFFF0010713FE01
-1F6D7E017F14E09039FFC07FF03A01FE001FF848486D7E48486D7E1503485A8281121FA2
-7F7F7F6D5B02C05B14F06C6D485A9138FE0FF89138FF9FF06CECFFE06C5D5E6C92C7FC6C
-816D14E0011F80498090B67E48812607FE3F7F48486C1480381FF807D9F00114C048486C
-7E007F8049010F13E0150348487F81167FA2163FA36D15C0127FEE7F807F6C6CECFF006C
-6C5B01FEEB07FE3A0FFFC03FFC6C90B55A000115E06C6C5C011F49C7FC010113F02B3D7C
-BB34>I<903801FFE0010F13FC013F13FF90B612C04801E07F489038003FF048486D7E00
-0F6E7E485A6F7E123F48488081178012FFA217C0A517E0A4007F5CA4003F5C6C7E5D6C7E
-00075C3903FF80FB6C13FF6C6C13F36D13C3010F018313C090380008031400A24B1380EA
-03F0487E486C1500487E4B5AA25E151F4B5A495C6C48EBFFE049485B2607FC0F5B6CB6C7
-FC6C14FC6C14F06D13C0D90FFEC8FC2B3D7CBB34>I<EA0FC0EA1FE0EA3FF0EA7FF8EAFF
-FCA6EA7FF8EA3FF0EA1FE0EA0FC0C7FCACEA0FC0EA1FE0EA3FF0EA7FF8EAFFFCA6EA7FF8
-EA3FF0EA1FE0EA0FC00E2879A71D>I<16FCA24B7EA24B7EA34B7FA24B7FA34B7FA24B7F
-A34B7F157C03FC7FEDF87FA2020180EDF03F0203804B7E02078115C082020F814B7E021F
-811500824A81023E7F027E81027C7FA202FC814A147F49B77EA34982A2D907E0C7001F7F
-4A80010F835C83011F8391C87E4983133E83017E83017C81B500FC91B612FCA5463F7CBE
-4F>65 D<B812F8EFFF8018F018FC8426003FFCC7EA3FFF050F13807113C07113E08319F0
-A27113F8A719F05FA24D13E019C04D13804D1300EF3FFE933801FFF891B712E0188018F8
-18FE02FCC7380FFF80050313C07113E07113F019F8F07FFCA2F03FFEA219FFA38460A419
-FE187FA2F0FFFC4D13F85F4D13F0053F13E0BA12C0190018FC18F095C7FC403E7DBD4A>
-I<922607FFC0130E92B500FC131E020702FF133E023FEDC07E91B7EAE1FE01039138803F
-FB499039F80003FF4901C01300013F90C8127F4948151FD9FFF8150F48491507485B4A15
-03481701485B18004890CAFC197E5A5B193E127FA349170012FFAC127F7F193EA2123FA2
-7F6C187E197C6C7F19FC6C6D16F86C6D150119F06C6D15036C6DED07E0D97FFEED0FC06D
-6CED3F80010F01C0ECFF006D01F8EB03FE6D9039FF801FFC010091B55A023F15E0020715
-80020002FCC7FC030713C03F407ABE4C>I<B812F8EFFF8018F018FC18FF26003FFCC76C
-13C005077F05017F716C7E727E727E727E721380A27213C0A27213E0A21AF084A21AF8A4
-1AFCA5197FA319FFA51AF8A41AF0A2601AE0A24E13C0A24E13804E1300604E5A4E5A4D48
-5A050713E0057F5BBA5A4EC7FC18F818C005F8C8FC463E7DBD50>I<BAFCA4198026003F
-FEC7123F1707170183183FA2181FF00FC0A31807EE07C0A3F003E0A3160F95C7FC161F16
-3F16FF91B6FCA54AC6FC163F161F040F147CA2160719F8A593C71201A219F01803A21807
-A2180FF01FE0183F18FF1703173FBAFCA219C0A33E3D7DBC45>I<B912FEA48426003FFE
-C77E170F1703170084A284F01F80A3180FA2EE07C0A2F007C0A4040F90C7FCA2161F163F
-16FF91B6FCA54AC6FC163F161F160FA21607A693C9FCACB712E0A53A3D7DBC42>I<9226
-07FFC0130E92B500FC131E020702FF133E023FEDC07E91B7EAE1FE01039138803FFB4990
-39F80003FF4901C01300013F90C8127F4948151FD9FFF8150F48491507485B4A15034817
-01485B18004890CAFC197E5A5B193E127FA34994C7FC12FFAB0407B612FC127F7FA3003F
-92C7383FFE00A27F7EA26C7FA26C7F6C7FA26C7F6C7FD97FFE157F6D6C7E010F01E014FF
-6D01F813036D9038FF801F010091B512F3023F15C00207ED803E02009138FE000E030701
-E090C7FC46407ABE52>I<B7D8803FB612E0A526003FFEC8000FEB8000B3A491B9FCA54A
-C8120FB3A7B7D8803FB612E0A54B3E7DBD52>I<B71280A526003FFEC7FCB3B3B0B71280
-A5213E7DBD28>I<B712E0A526003FFEC9FCB3AD183EA4187E187CA418FCA21701A2EF03
-F8A21707170F171F177FEE01FF160FB9FC18F0A4373E7DBD3F>76
-D<B6051FB512C06F5EA26F5EA2D8003F97C7FC6F16F7A26E6CED01E7A26E6CED03C7A36E
-6CED0787A26E6CED0F07A26E6C151EA36E6D143CA26E6D1478A26E6D14F0A26F6CEB01E0
-A36F6CEB03C0A26F6CEB0780A26F6CEB0F00A36F6C131EA26F6D5AA26F6D5AA26F6D5AA3
-93387FF1E0A293383FFBC0A270B45AA37090C7FCA2705AA2705AB600C0031FB612C0A270
-5AA2705A5A3E7CBD63>I<B6037FB512E0A2818181D8003F6D9139001F800081A281816E
-7E6E7F6E7F80826E7F6E7F6E7F6E7F157F826F7F6F7F6F7F6F7F81836F7F6F7F707E7013
-80A27013C07013E07013F07013F87013FCA27013FEEF7FFF71139F7113DF8319FF838383
-8384A28484848484A284B600C080197F193F191FA24B3E7DBD52>I<ED3FFF0203B512F0
-021F14FE027F6E7E902701FFF80713E00107D9C00013F84990C7EA3FFCD93FFCEC0FFF49
-486E7F49486E7F48496E7F4A80488448496F7EA24890C96C7E4884A249161F003F84A348
-48701380A400FF19C0AD007F19806D5EA3003F1900A26D5E6C60A26C6D4B5AA26C6D4B5A
-6C6D4A5BA26C6D4A5B6C6D4A5B6D6C4A5B6DB4023F90C7FC6D01C0EBFFFE0107D9F80713
-F8010190B612E06D5E021F4AC8FC020314F0DA003F90C9FC42407ABE4F>I<B812F017FF
-18C018F018FC26003FFCC77FEF1FFF7113807113C07113E0A27113F0A319F8A819F0A34D
-13E019C05F4D1380053F1300EFFFFE91B712F860188005FCC7FC4ACAFCB3A4B77EA53D3E
-7DBD47>I<ED3FFF0203B512F0021F14FE027F6E7E902701FFF80713E00107903980007F
-F84948C7EA1FFCD93FFC6EB4FC49486E7F49486E7F48496E7F4A8048496F7E488491C912
-3F48844848707EA34848707EA3007F1980A24982A200FF19C0AD007F1980A26D5EA2003F
-1900A36C6C4C5AA26C6C4C5AED07F06C9026801FFC495A6C4AB45C6E48EB80FF6C9027E0
-7E0FC15B6C9126F807E15B90287FF0F003E35BD93FFC6DB5C7FCD91FFE6D5B902607FFF8
-14F80101D9FE0313E06D90B65A021F4AC7124002036E14E0DA003FEB3F8092C77FF0E001
-F0F80F71B5FCA21AC083A21A8083A271140061715B715B725AF01FC043517ABE4F>I<B8
-7E17FCEFFF8018F08428003FFC000113FE9338003FFF050F7F717F717FA2858385A761A2
-5F61614D5B4D90C8FCEF3FFE4CB45A91B712F018C04DC9FC717E9126FC000F7F040113F0
-707F717EA2717EA2717EA685A6F207C019C0A271140F07E01380B76DEBF01F719038FC3F
-007190B5FC716C5B061F13F8CB000113E04A3F7DBD4E>I<903A03FFC001C0011FEBF803
-017FEBFE0748B6128F4815DF48010013FFD80FF8130F48481303497F4848EB007F127F49
-143F161F12FF160FA27F1607A27F7F01FC91C7FCEBFF806C13F8ECFFC06C14FCEDFF806C
-15E016F86C816C816C816C16806C6C15C07F010715E0EB007F020714F0EC003F15030300
-13F8167F163F127800F8151FA2160FA27EA217F07E161F6C16E06D143F01E015C001F8EC
-7F8001FEEB01FF9026FFE00713004890B55A486C14F8D8F81F5CD8F00314C027E0003FFE
-C7FC2D407ABE3A>I<003FB912FCA5903BFE003FFE003FD87FF0EE0FFE01C01603491601
-90C71500197E127EA2007C183EA400FC183F48181FA5C81600B3AF010FB712F8A5403D7C
-BC49>I<B76C90B61280A526003FFEC9003EC7FCB3B3A4197E011F177C80A26D17FC616D
-6D14014E5A6D6D4A5A6D6D140F6D01F8EC3FC0DA7FFEECFF8091273FFFC00F90C8FC020F
-90B512FC02035D020015E0031F1480030101F8C9FC493F7DBD50>I<B600FC020FB512C0
-A5C66C48C9381F8000013F95C7FC80616D173E6F157E6D177C6F15FC6D5F8118016D6D5D
-18036D5F6F14076D5F6F140F027F5E81181F023F93C8FC6F5C6E153E70137E6E157C8218
-FC6E6D5B17016E5DEEF0036E5DEEF8076E5D16FC170F037F5CEEFE1F033F91C9FC705A6F
-133E17BE17FE6F5BA26F5BA26F5BA26F5BA36F5BA2705AA270CAFCA24A3F7EBD4F>I<B6
-D8FC03B600F090B512FEA5C601FCC7000301F0C8EA7E00017F6F177C856E6E17FC013F63
-856D6C037F4B5AA26F4A6C14036D634D7F6F18076D634D806F02EF150F6D636F01076E13
-1F6D04C793C7FC050F806F02835D6D1A3E051F806F0201157E027F197C6F013F6E13FC02
-3FDA3E005D057E806F017C017F13016E6105FC14FE7048013F13036E6104C1EDFF076E4A
-6D5C04C31687DCE3E06D138F6E6104E716CFDCF7C06D13DF6E96C8FC04FF16FF6E4A6D5B
-A294C77E6F5FA24C80033F5FA26F486F5AA24C153F030F5FA24C151F03075FA26F486F5A
-673F7EBD6C>I<903807FFC0013F13F848B6FC48812607FE037F260FF8007F6DEB3FF048
-6C806F7EA36F7EA26C5A6C5AEA01E0C8FC153F91B5FC130F137F3901FFFE0F4813E0000F
-1380381FFE00485A5B485A12FF5BA4151F7F007F143F6D90387BFF806C6C01FB13FE391F
-FF07F36CEBFFE100031480C6EC003FD91FF890C7FC2F2B7DA933>97
-D<13FFB5FCA512077EAFEDFFE0020713FC021FEBFF80027F80DAFF8113F09139FC003FF8
-02F06D7E4A6D7E4A13074A80701380A218C082A318E0AA18C0A25E1880A218005E6E5C6E
-495A6E495A02FCEB7FF0903AFCFF01FFE0496CB55AD9F01F91C7FCD9E00713FCC7000113
-C033407DBE3A>I<EC7FF00107B5FC011F14C0017F14E09039FFF01FF0489038800FF848
-EB001F4848EB3FFC120F485AA2485AA2007FEC1FF849EB0FF0ED03C000FF91C7FCAB127F
-7FA3003F153E7F001F157E6C6C147C6C6C14FC91388001F86C9038C003F0C69038F81FE0
-6DB512C0011F14800107EBFE009038007FF0272B7DA92E>I<EE07F8ED07FFA5ED003F16
-1FAFEC7FF0903807FFFE011FEBFF9F017F14DF9039FFF01FFF48EBC00348EB00014848EB
-007F485A001F153F5B123FA2127F5BA212FFAA127FA37F123FA26C6C147F120F6D14FF6C
-6C01037F6C6D48EBFFE06CEBF03F6C6CB512BF6D143F010713FC010001E0EBE00033407D
-BE3A>I<ECFFF0010713FE011F6D7E017F809039FFE07FE0489038801FF048496C7E4848
-6D7E48486D7E121F491301003F81A2485A6F1380A212FFA290B7FCA401F0C9FCA5127FA2
-7F123FEE0F806C7E161F6C6C15006C6C5C6C6D137E6C9038E001FC6C9038F80FF8013FB5
-5A6D14C0010391C7FC9038007FF8292B7DA930>I<EC07FE91387FFF8049B512C0010714
-E090390FFE3FF0EB1FF090393FE07FF8EB7FC013FF1480A2489038003FF0ED1FE0ED0FC0
-92C7FCAAB612E0A500010180C7FCB3AC007FEBFF80A525407DBF20>I<903A03FF8007F0
-013F9038F83FF8499038FCFFFC48B712FE48018313F93A07FC007FC34848EB3FE1001FED
-F1FC4990381FF0F81700003F81A7001F5DA26D133F000F5D6C6C495A3A03FF83FF8091B5
-C7FC4814FC01BF5BD80F03138090CAFCA2487EA27F13F06CB6FC16F016FC6C15FF17806C
-16C06C16E01207001F16F0393FE000034848EB003F49EC1FF800FF150F90C81207A56C6C
-EC0FF06D141F003F16E001F0147FD81FFC903801FFC02707FF800F13006C90B55AC615F8
-013F14E0010101FCC7FC2F3D7DA834>I<13FFB5FCA512077EAFED1FF8EDFFFE02036D7E
-4A80DA0FE07F91381F007F023C805C4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A5333F7C
-BE3A>I<EA01F8487E487E487E481380A66C13006C5A6C5A6C5AC8FCA913FFB5FCA51207
-7EB3ABB512F8A515407CBF1D>I<EC0FC0EC1FE0EC3FF0EC7FF8ECFFFCA6EC7FF8EC3FF0
-EC1FE0EC0FC091C7FCA9EC03FCEB07FFA5EB001F140FB3B3A2EA1F80EA3FC0EA7FE0EAFF
-F0EC1FF8A3EC3FF015E0397FE07FC0393FC1FF806CB512006C5B6C13F8C613801E5386BF
-20>I<13FFB5FCA512077EB092380FFFFEA5DB01FEC7FC4B5AED07F0ED1FE04B5A4B5A4B
-C8FCEC03FC4A5A4A5A141F4A7EECFFFCA2818102E77F02C37F148102007F826F7E6F7E15
-1F6F7E826F7F6F7F816F7FB5D8FC07EBFFC0A5323F7DBE37>I<13FFB5FCA512077EB3B3
-AFB512FCA5163F7CBE1D>I<01FFD91FF8ECFFC0B590B5010713F80203DAC01F13FE4A6E
-487FDA0FE09026F07F077F91261F003FEBF8010007013EDAF9F0806C0178ECFBC04A6DB4
-486C7FA24A92C7FC4A5CA34A5CB3A4B5D8FE07B5D8F03FEBFF80A551297CA858>I<01FF
-EB1FF8B5EBFFFE02036D7E4A80DA0FE07F91381F007F0007013C806C5B4A6D7E5CA25CA3
-5CB3A4B5D8FE0FB512E0A533297CA83A>I<EC7FF0903803FFFE011FEBFFC0017F14F090
-39FFE03FF8489038800FFC3A03FE0003FE48486D7E000F168048486D13C0A2003F16E049
-147F007F16F0A400FF16F8AA007F16F0A46C6CECFFE0A2001F16C06C6C491380A26C6C49
-13003A03FF800FFE6C9038E03FFC6C6CB512F0011F14C0010791C7FC9038007FF02D2B7D
-A934>I<01FFEBFFE0B5000713FC021FEBFF80027F80DAFF8113F09139FC007FF8000701
-F06D7E6C496D7E4A130F4A6D7E1880A27013C0A38218E0AA4C13C0A318805E18005E6E5C
-6E495A6E495A02FCEBFFF0DAFF035B92B55A029F91C7FC028713FC028113C00280C9FCAC
-B512FEA5333B7DA83A>I<DA7FE01378902607FFFC13F8011FEBFF01017F14819039FFF8
-1FC3489038E007E74890388003F74890380001FF48487F001F157F5B003F153F5B127F16
-1FA2485AAA127F7FA36C6C143F167F121F6C6C14FF6D5B6C6D5A6CEBC00F6CEBF03F6C6C
-B512BF6DEBFE3F010713F8010013C091C7FCAC030FB512E0A5333B7DA837>I<3901FE01
-FE00FF903807FF804A13E04A13F0EC3F1F91387C3FF8000713F8000313F0EBFFE0A29138
-C01FF0ED0FE091388007C092C7FCA391C8FCB3A2B6FCA525297DA82B>I<90383FFC1E48
-B512BE000714FE5A381FF00F383F800148C7FC007E147EA200FE143EA27E7F6D90C7FC13
-F8EBFFE06C13FF15C06C14F06C806C806C806C80C61580131F1300020713C01400007814
-7F00F8143F151F7EA27E16806C143F6D140001E013FF9038F803FE90B55A15F0D8F87F13
-C026E00FFEC7FC222B7DA929>I<EB07C0A5130FA4131FA3133F137FA213FF5A1207001F
-EBFFFEB6FCA40001EBC000B3151FA96CEBE03EA2017F137EECF8FC90383FFFF86D13F001
-0713E001001380203B7EB929>I<D9FF80EB0FF8B5EB0FFFA50007EC007F6C153FB3A516
-7FA316FF6C5C4B7F6C903AC007DFFFE09138F01F9F6DB5121F6D13FE010F13F8010101E0
-EBE000332A7CA83A>I<B500FC90383FFFC0A5000101C0903803E0006E1307A26C5E6E13
-0F017F5D6E131F013F92C7FC6E5B011F143E6E137E010F147C6E13FCA26D5C15816D5C15
-C36D5C15E76D5C15FF6E5BA36E90C8FCA26E5AA26E5AA26E5AA26E5AA232287EA737>I<
-B53CFC3FFFFC03FFFEA50003D980009039C0000F806E161F6C037F15006E496C5B6C183E
-836E48157E017F177C6E486D13FC013F02EF5C83DAFC071401011F02C75CDAFE0FEBFE03
-010F02835C17FFDAFF1F14076D02015C03BF148F6DD9BE005C18CF03FE14DF6D49017F90
-C7FC18FF6D496D5AA36E486D5AA26E486D5AA36E486D5AA26E486D5A47287EA74C>I<B5
-D8FC03B51280A5C69026E0007FC7FC6E13FE6D6C5B6D6C485A6D6C485A010F13076D6C48
-5AED9FC06DEBFF806D91C8FC6D5B6E5AA2143F6E7E140F814A7F4A7F4A7F02FE7F903801
-FC7F49486C7E02F07F49486C7E49486C7E011F7F49486C7FD97F008001FE6D7FB5D8C007
-EBFFC0A532287EA737>I<B500FC90383FFFC0A5000101C0903803E0006E1307A26C5E6E
-130F017F5D6E131F013F92C7FC6E5B011F143E6E137E010F147C6E13FCA26D5C15816D5C
-15C36D5C15E76D5C15FF6E5BA36E90C8FCA26E5AA26E5AA26E5AA26E5AA35D14075D000E
-130FD83F805B387FC01FD8FFE090C9FC5C143E147E5CEBC1F8387FC3F0387E0FE06CB45A
-6C5B6C48CAFCEA03F8323B7EA737>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fj cmbx12 14.4 45
-/Fj 45 122 df<EEFFFC031FEBFF804AB612E0020781021F9038C00FF8913A7FFE0003FC
-DAFFF0EB00FE4949EB03FF4901805B4990C7487F49485CA2495A4D7F013F6F5B5CA37190
-C7FC715AEF01F894C9FCA90403B512C0BAFCA526003FFCC7120783B3B3A6003FB5D8FC03
-B612C0A542547DD34B>12 D<EF01E01703EF07F0A2170FA2EF1FE0A218C0173FA2EF7F80
-A218005FA24C5AA25F1603A24C5AA25F160FA24C5AA25F163FA24C5AA294C7FC5EA24B5A
-A25E1503A24B5AA25E150FA24B5AA25E153FA24B5AA293C8FC5DA24A5AA25D1403A25D14
-07A24A5AA25D141FA24A5AA25D147FA24AC9FCA25C1301A2495AA25C1307A2495AA25C13
-1FA2495AA25C137FA249CAFCA25B1201A2485AA25B1207A2485AA25B121FA2485AA25B12
-7FA248CBFCA25AA2127CA2347879D943>47 D<913803FFC0023F13FC91B6FC010315C001
-0F018113F0903A1FFC003FF849486D7E49486D7E49486D7E48496D138048496D13C0A248
-17E04890C813F0A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A5007F17FEA600
-3F17FCA26D15FFA26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E5B6C6D4913
-006D6C495AD91FFCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FCC7FC020313
-C0384F7BCD43>I<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF800
-C7FCB3B3B3A6007FB712FEA52F4E76CD43>I<EC3FFE0103B512E0010F14FC013F14FF90
-B712C048D9C07F7F2703FE000F13F8D807F801037FD80FE06D7F48486D7F48488001F016
-80486C6E13C07F486C6E13E07FA27013F0A56C5AA26C5AEA0FF0EA03C0C914E05EA218C0
-5E1880A24C13005F4C5A4B5B5F4B5B5F4B5B4B90C7FC4B5A5E4B5AED7FE04B5A4A5B4A48
-C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC02FEEC03E0495A495A495A495AD91F801407
-49C8FC013E150F017FB7FC90B812C05A5A5A5A5A5A5AB9FC1880A4344E79CD43>I<9138
-0FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED803
-F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC16
-80C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80DA
-000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218FE
-A2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001F0
-4A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F15800103
-02FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F167F
-A216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC01580EC
-1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A1207485A
-485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>I<D80380
-150ED807E0157E01FEEC03FED9FFF0137F91B65A5F5F5F5F5F94C7FC5E5E16F016C093C8
-FC15F801E190C9FC01E0CAFCABEC0FFF027F13F001E3B512FE01E76E7E9026FFF8077FDA
-C0017F49C713F8496E7E49143F4981496E7E6C481680C9FC18C08218E0A418F0A3EA0FE0
-487E487E487E487EA418E0A35B6C484A13C05B491680003EC85A003F17006C6C4A5A6D5D
-6C6C4A5AD807F8495BD803FE01075B2701FFC03F5B6C90B65A013F4AC7FC6D14F8010314
-C09026007FF8C8FC344F79CD43>I<ED0FFF92B512E0020780021F14FC91397FFE03FE90
-3A01FFF0007F4901C0EB3F804990C7121F4948EC7FC0494814FF49484913E049485B01FF
-5C485BA2485B5AA2486F13C04A6D1380486F1300177E94C7FC5AA291CAFC5AA215089138
-01FFF8020713FFB54814C04A14F04AC66C7E023C6D7E4A6D7E4A6D7E7013804A15C0A24A
-15E07013F05C18F8A491C714FCA37EA67EA46C17F880A27E18F06C5D18E06C6D15C07E6E
-4913806C6D15006D6C495A6D6CEB7FFC6DB448485A6D90B55A010315C0010092C7FC023F
-13FC020713C0364F7ACD43>I<121F7F7FEBFF8091B81280A45A1900606060A260606048
-5F0180C86CC7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94C8FC16FEC812
-014B5A5E4B5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A2140FA25D141FA2
-143FA4147F5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807FFC0027F13FC
-0103B67E010F15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C76C7E48488048
-486E1380000717C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C014F802FE4913
-806C7FDBC00313009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CEDFFE017806C4B
-C7FC6D806D81010F15E06D81010115FC010781011F81491680EBFFE748018115C048D900
-7F14E04848011F14F048487F48481303030014F8484880161F4848020713FC1601824848
-157F173FA2171FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F17C06D157F6C
-6CEDFF806C6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D010F15800101
-02FCC7FCD9000F13C0364F7ACD43>I<91380FFF8091B512F8010314FE010F6E7E490103
-7F90267FF8007F4948EB3FF048496D7E484980486F7E484980824817805A91C714C05A70
-13E0A218F0B5FCA318F8A618FCA46C5DA37EA25E6C7F6C5DA26C5D6C7F6C6D137B6C6D13
-F390387FF803011FB512E36D14C30103028313F89039007FFE03EC00401500A218F05EA3
-D801F816E0487E486C16C0487E486D491380A218005E5F4C5A91C7FC6C484A5A494A5A49
-495B6C48495BD803FC010F5B9027FF807FFEC7FC6C90B55A6C6C14F06D14C0010F49C8FC
-010013F0364F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA3
-4C8083047F80167E8304FE804C7E03018116F8830303814C7E03078116E083030F814C7E
-031F81168083033F8293C77E4B82157E8403FE824B800201835D840203834B800207835D
-844AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A82010385
-4A82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366>65
-D<932601FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203
-DAE003EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901
-F8824949824949824949824949824990CA7E494883A2484983485B1B7F485B481A3FA248
-49181FA3485B1B0FA25AA298C7FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D19
-80A26C1A1F6C7F1C006C6D606C6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A
-6D01FC4C5A6D6DEE7F806D6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE0
-01FFF0020091B612C0033F93C8FC030715FCDB007F14E0040101FCC9FC525479D261>67
-D<BA7E19FCF1FF801AF01AFCD8000701F0C7000F13FF060014C0071F7F070713F807017F
-737F747E747F747F86747F747F8886888688A2757EA31D8087A21DC0A51DE0A387A963A3
-1DC0A51D80A2631D00A3515AA2646264505B6264505B505B5090C7FCF2FFFE4F5B07075B
-071F5B96B512C0060F91C8FCBB5A1AF01AC007FCC9FC19805B527CD167>I<BC1280A5D8
-000701F8C7000114C0F0001F19071901851A7F1A3F1A1FA2F20FE0A21A07A31A03A318F8
-1BF01A01A497C7FC1701A317031707170F177F92B6FCA59238F8007F170F170717031701
-A317001B3EA31B7CA395C8FCA21BFCA21BF8A21A01A31A031BF01A071A0FA21A1F1A3FF2
-7FE0F101FF1907191F0603B5FCBCFCA21BC0A34F517CD058>I<B812C0A5D8000701F8C7
-FCB3B3B3B2B812C0A52A527CD132>73 D<93380FFFC00303B6FC031F15E092B712FC0203
-D9FC0013FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F494848ED7FFE4901E0
-ED1FFF49496F7F49496F7F4990C96C7F49854948707F4948707FA24849717E48864A8348
-1B804A83481BC0A2481BE04A83A2481BF0A348497113F8A5B51AFCAF6C1BF86E5FA46C1B
-F0A26E5F6C1BE0A36C6D4D13C0A26C6D4D1380A26C1B006C6D4D5A6E5E6C626D6C4C5B6D
-6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7FC6D6D4B5A6D01FF02035B023F01E001
-1F13F0020F01FC90B512C0020390B7C8FC020016FC031F15E0030392C9FCDB001F13E056
-5479D265>79 D<BAFC19F819FF1AE086D8000701F0C7001F13FC060113FF726C13807313
-C0070F13E01BF0857313F81BFCA27313FEA41BFFA81BFEA31BFC61A21BF84F13F04F13E0
-614F13C04F13004E485A061F5B92B812F01AC04FC7FC19E003F8CBFCB3AEB812C0A55052
-7CD15C>I<B912F0F0FF8019F819FF1AC0D8000701F0C714F0060F7F060113FE727F737F
-737F85737F87A2737FA387A863A2616363A24F5B4F5B4F90C8FC4F5A06035B060F13F095
-B512C092B8C9FC19F819E019F89226F0000313FE9439007FFF80727F727F727F727F727F
-8684A28684A787A71D1C75133EA38575137E73157C7513FC731401B86C6D9038F803F807
-039038FE07F07390B512E0736C14C0080F1400CEEA7FFC5F537CD164>82
-D<91260FFF80130791B500F85B010702FF5B011FEDC03F49EDF07F9026FFFC006D5A4801
-E0EB0FFD4801800101B5FC4848C87E48488149150F001F824981123F4981007F82A28412
-FF84A27FA26D82A27F7F6D93C7FC14C06C13F014FF15F86CECFF8016FC6CEDFFC017F06C
-16FC6C16FF6C17C06C836C836D826D82010F821303010082021F16801400030F15C0ED00
-7F040714E01600173F050F13F08383A200788200F882A3187FA27EA219E07EA26CEFFFC0
-A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02C04A5A02F8EC7FF0903B1FFFC003FFE0
-486C90B65AD8FC0393C7FC48C66C14FC48010F14F048D9007F90C8FC3C5479D24B>I<00
-3FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F49193F90
-C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A55351
-7BD05E>I<B700FC017FB600FE91B612F0A5D8003F01C0C8001F01E0C9EBF8006F71EE0F
-C06D7161876F1C1F6D7196C7FC6F8373606D1E3E6F836D7160876F1CFC6D666F4B801F01
-6D66704A806E525A88704A17076E059F5F70021F80080F160F6E6570023F806EDC3E074C
-C8FC8870027E5F6EDC7C03163E7002FC804F6C167E6E1C7C700101814F6C16FC6E745B70
-010317016E4C6D5D060716C00580496D14036F63DDC00F16E04F6D14076F07F05BDDE01F
-170F6F92C76C5D1DF8DDF03E6E141F6F98C9FCDDF87E16FC067C6E5C6FF1FE3EDDFCFC17
-7E6F4A6E147C1DFFDDFFF06E14FC6F62A24E816F62A270496F5BA24E817061A295C97E70
-61A270487090CAFCA37048705AA24D1601040360A27048705A84537DD18B>87
-D<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F2703FE000113F0486C6D7F6EEB3FFC
-48826E131F83707FA36C496D7FA26C90C7FC6C5AC9FCA6037FB5FC020FB6FC91B7FC0107
-1487013FEBF0074913803901FFFC004813F0485B485B485B4890C7FC5A5BA2485AA45EA2
-6D5C007F151D163D6C6C02797F6C6D01F113F86C9026C003E1EBFFE06C9026F81FC014F0
-6C90B5487EC6ED001F011F01FC010713E0010101E090C8FC3C387CB641>97
-D<EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13FE033FEBFFC092B612F002F301017F
-913AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F4A6E7F4A824A6E7FA2727EA285A285
-84A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A5B6E4A5B6F495BDACFC04990C7FCDA
-87F0EB7FFC913A03FE03FFF849C6B612E0496D148049011F01FCC8FC90C7000313C04154
-7BD24B>I<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001
-FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A48
-92C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC
-3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC
-020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91
-B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F484980
-485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C
-6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD9
-003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C04901
-817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C0488191
-C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01
-F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE
-903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>I<ED3FFC02
-03B5FC020F14C0023F14E09139FFF81FF0499038C03FF849EB807F49903800FFFC495A49
-5AA2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB712E0A526007FF8C8FCB3B3A7007FB5
-12FEA52E547CD329>I<DA3FFF14FF0103B5D8F00713C0010FDAFC1F13E0013FECFF7F90
-267FFC0F9038FF9FF09026FFE001EBF83F48496C13E0484990387FF01F4890C7D83FF813
-E0489338FC0FC0F0078048486E6CC7FCA2003F82A9001F5EA26C6C4A5AA26C5E6C6D495A
-6C6D495A6C6D485BDAFC0F5B4890B6C8FCD803EF14FC01C314F02607C03F90C9FC91CBFC
-A2120FA37FA213F813FE90B7FC6C16F817FF18C06C836C836C836D828448B9FC12074848
-C700031480D81FF8EC003F4848150748486F13C083485A83A56D5D007F18806D5D003F18
-006C6C4B5AD80FFEED1FFC6C6C6CEC7FF86C01E049485A6C01FE011F5B6C6CB71280010F
-03FCC7FC010115E0D9000F01FCC8FC3C4F7CB543>I<EB3FF0B5FCA51203C6FCB3A4EE1F
-FC93B512C0030314F0030F8092391FE07FFC92393F001FFE037C8003F07FDAF1E081ECF3
-C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542537BD24B>I<137F497E
-000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3
-A6B612E0A51B547BD325>I<157FEDFF80020313E04A13F0A24A13F8A76E13F0A26E13E0
-02001380ED7F0092C7FCADED1FF891B5FCA51401EC007FB3B3B1EA0780EA1FE0487E487E
-486C13FF16F0A216E05C16C04A13806C4848130049485A003F495A000FB512F06C5C0001
-148026001FFCC7FC256C87D329>I<EB3FF0B5FCA51203C6FCB3A54CB512F8A59339003F
-FE00EF1FF0EF3FC04D5A4DC7FCEE03FEEE07F84C5A4C5AEE7FC04CC8FC4B5A4B5AED0FF8
-ED1FE04B7E4B7EECF1FF02F37F02F77F91B6FC83159F030F7F02FE80DAF8077F4A7E6F7F
-6F7F83707E82707F84707F707F82707F84707F177F717E4D13C0B6D8F003B6FCA540537C
-D247>I<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>I<D93FF0D91FFCEDFFE0
-B591B500C0010713FE030302F0011F6D7E030F6E017F8092271FE07FFCD9FF037F922A3F
-001FFE01F8007F0003027C9126FF03E080C602F06DD90780137FDAF1E0038FC77FDAF3C0
-159EDAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3ACB6D8F807B6D8C03FB5
-12FEA567367BB570>I<D93FF0EB1FFCB591B512C0030314F0030F8092391FE07FFC9239
-3F001FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3AC
-B6D8F807B612C0A542367BB54B>I<913801FFE0021F13FE91B612C0010315F0010F9038
-807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C8
-6C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA2
-6C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF80
-7FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F
-13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F
-92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F61
-6E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F14
-80031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<90397FE003FEB590380F
-FF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF
-150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>114
-D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F4980
-127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C
-816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC007F00
-F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FF
-C00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>I<143EA6147EA414
-FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE
-07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B0203
-13802A4D7ECB34>I<D93FF8913801FFC0B50207B5FCA50003ED001FC61607B3AE5FA35F
-A2017F5D173B177B6D6C14F3DC01E313F06D6CD907C3EBFFC0903A0FFFC03F836D90B512
-03010114FE6D6C13F8020701E091C7FC42377BB54B>I<B600F00107B5FCA5000101F8C8
-EA7FE06C6DED3F00A2017F163E6E157E013F167C6E15FC6D5E6F13016D5E8117036D5E6F
-13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C133E177E023F147C6F13FC6E5C16816E
-5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FCA26F5AA36F5AA26F5AA26F5AA26F5A
-6F5A40367DB447>I<B600F00107B5FCA5C601F8C8EA7FE06EED3F00A26D6C153E187E01
-3F167C6E15FC6D5E6F13016D5E6F13036D5E8117076D6D5C170F6D6D5C171F6D93C7FC6F
-5B027F143E6F137E023F147C6F13FCA26E6D5A16816EEBC1F016C36E5C16E76E5C16FF6E
-5CA26E91C8FCA36F5AA26F5AA26F5AA26F5AA26F5AA35E150F5E151F93C9FC5DD81FC013
-3E486C137E486C137C486C13FC5D14015D14034A5A6C48485A49485A263FC07FCAFCEB81
-FE6CB45A6C13F000035BC690CBFC404D7DB447>121 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fk cmr12 14.4 32
-/Fk 32 121 df<000F141ED83FC0EB7F80486CEBFFC0486C4813E001F814F0A301FC14F8
-A2007F7FD83FDCEB7FB8D80F1CEB1E3800001400A5013C147801381470A3017814F00170
-14E001F013014914C000011403A24848EB07804848EB0F00A248C7121E001E5C485C485C
-0030146025237CD23B>34 D<15E01401EC03C0EC0780EC0F00141E5C147C5C495A13035C
-495A130F5C131F91C7FC133E137EA25BA2485AA25B1203A2485AA3120F5BA2121FA25BA2
-123FA290C8FCA35AA5127EA312FEB3A3127EA3127FA57EA37FA2121FA27FA2120FA27F12
-07A36C7EA212017FA26C7EA2137EA2133E7F80130F8013076D7E8013016D7E147C143C80
-80EC0780EC03C0EC01E014001B7974D92E>40 D<12E07E12787E7E7E6C7E7F6C7E6C7E7F
-1200137C137E133E133F7F6D7E80A26D7EA26D7EA2130180A26D7EA380147EA2147FA280
-A21580A2141FA315C0A5140FA315E0B3A315C0A3141FA51580A3143FA21500A25CA2147E
-A214FE5CA3495AA25C1303A2495AA2495AA25C49C7FC5B133E137E137C5B12015B485A48
-5A5B48C8FC121E5A5A5A5A1B797AD92E>I<B612FEA71F077F9C27>45
-D<14075C5C147F5C1307133F000FB5FCB6FC13F913C1EAF0011200B3B3B3A7497F010F13
-E0B712FEA4274F75CE3B>49 D<EE03804C7EA34C7EA34C7EA34C7EA34C7EA24C7E16E7A2
-03017F16C3A20303801681A2DB07017F82A2030E80177FA24B80173FA24B6D7EA2037880
-0370130FA203F0804B1307A20201814B7FA24A488183A24AC78083A2020E82187FA24A6F
-7E021FB7FC4A82A30278C8EA1FFC0270150FA202F0824A1507A249488284A249488384A2
-49CA7FA24984010E177FA2011E84193F133E017F8448486C4C7E000F01E04B487EB500FE
-037FEBFFFEA44F557CD458>65 D<B812FEEFFFE018FC18FF26007FFCC7000F13C06D4802
-017F011F9238003FF8F00FFC727EF001FF727F737E737E737E190F86737EA2737E737EA2
-1B8085A21BC01A7F1BE0A4F23FF0A51BF8AE1BF0A4F27FE0A41BC01AFF1B80A24F1300A2
-4F5AA24F5AA24F5A4F5A4F5A4F5A4F5A4E90C7FC4E5AF00FFCF03FF8013FEEFFE0496C02
-0F5BBAC8FC18FC18E04DC9FC4D527BD159>68 D<BB1280A426007FFCC8123F6D48030313
-C0011F1600193F191F190F1907A21903A2F101E0A31900A6050E1470A41A00A3171EA317
-3E177E17FE160791B6FCA49138F800071600177E173E171EA3170EA31A0EA31A1C94C8FC
-A41A3C1A38A31A78A31AF0A21901A21903A21907F10FE0193F19FF013F1603496C153FBB
-FC1AC0A347527BD150>I<BA12FCA426007FFCC712016D489138001FFE011F1603180118
-00197E193EA2191EA285A385A6F10380A2171CA296C7FCA5173CA3177C17FC1601160F91
-B6FCA49138F8000F16011600177C173CA3171CA794C9FCB3497E49B4FCB712E0A441527B
-D14C>I<B812FCEFFFC018F818FE26007FFCC7381FFF806D4802017F011F9238007FF0F0
-1FF8727E727E727E841A807213C0A21AE0197FA21AF0A91AE0A219FF1AC0A24E13801A00
-604E5A4E5A4E5AF07FE04D485A051F90C7FC91B712FC18F0188002F8CBFCB3AE497E497E
-B7FCA444527BD150>80 D<B812C017FEEFFFC018F026007FFCC713FC6D48EC0FFF011F03
-017F9438007FE0727E727E727E180785727EA28684A286A762A26097C7FCA24E5A614E5A
-4E5A4E5AF0FFC04D90C8FCEF0FFEEFFFF891B712C04DC9FC839126F8000113C09338003F
-F0EF0FFC717EEF01FF85717F727EA2727EA2727EA985A81B0785180FA21B0F0607140E49
-6C82496C6F141EB76EEB801C72EBC03C96387FE0F896381FFFF0CC000713E09638007F80
-50547BD156>82 D<DA3FF0130349B55B010714C0011FECF00F903A7FE00FF81F49C712FE
-D801FCEC3F3F4848EC1FBF48486EB4FC48481403485A4980003F8190C97E5A83127E8312
-FEA283A37E837FA27F007F93C7FC7F7FEA3FFC7F6C6C7E14F86CEBFF806C14F8EDFF806C
-15F06C15FE6C6C806D15C0010F81010315F8D9007F80140F020080030F7F03001480161F
-040713C0160182EF7FE0A2173FEF1FF0A200E0160FA31707A37EA318E07E170F7E18C06C
-161F6C17806D153F6D16006D157E6D15FED8FCFC4A5A017F4A5A26F83FC0EB0FF0D90FFE
-EB7FC0D8F003B65A48C64AC7FC023F13F848010113C034567AD341>I<003FBB12C0A449
-C79038F0000701F06E48130001C0183F48C8EE0FE0007E1907007C1903A200781901A400
-701900A500F01AF0481A70A6C91700B3B3AC4C7E030313FC027FB712E0A44C517CD055>
-I<B600F8010FB66C010FB512E0A4000149C8001F01E0C8EBFE0026007FF803070180ED3F
-F04A94C9EA0FE0013F7060785A6E83011F7095C7FCA26E83010F70170EA2866D6C4B5FA3
-6D6C922603BFF05DA36F9126071FF815786D1C70A26F020F6D15F06DDC0E0F5EA26F021E
-6D1401027FDB1C075EA26F023C7F023FDB38034B5AA2876E6C4A6C4BC8FCA36E6C4A6C6D
-130EA36F49486D6C131E02071A1CA26F01036F133C6E4B013F1438A2DC80076F13786E92
-C7001F1470A27048816E020E020F5CA2876F6C480207495AA36F6C486E6C485AA370486E
-1387031F96C9FCA2DCFCF016CF030F496E13CEA204FF17FE6F496F5AA36F496F5AA36F90
-C96C5AA36F48705AA34C1607047C5FA30438705A73547ED178>87
-D<01301460017814F049EB01E04848EB03C04848EB07804848EB0F00A248C7121E001E5C
-A2001C1438003C147800381470007814F000705CA300F01301485CA5D8E3C0EBC780D8EF
-F0EBDFE0D8FFF8EBFFF001FC14F8A2007F7FA3003F147F6C48EB3FF06C48EB1FE0D803C0
-EB078025236FD23B>92 D<ECFFC0010F13F8013F13FE9039FF00FF80D801F0EB3FE0D803
-C0EB0FF0486C6D7E01F86D7E000F816D13016F7EA3707E6C5AEA01E0C9FCA6ED3FFF020F
-B5FC9138FFFC7F01071300EB1FF0EB7FC04848C7FCEA03FC485A485A485A123F5B485A18
-7012FF90C8FCA216FFA35D6D14BF007F14036DEB073F6C6C90390F1FC0E06C6C131E6C6C
-90393C0FE1C02707FE01F013FF0001B5486C13806C6C90398003FE00D907FCC712F83436
-7BB43B>97 D<EC0FFE91387FFFE049B512F8903907F801FE90391FE0001FD93F80EB0780
-49C7EA0FC001FE143F484815E00003157F485A485AA2485AEE3FC0003FED0F004991C7FC
-A2127FA35B12FFAB127F7FA3123F6D1570121F6D15F0000F16E06D140112076C6CEC03C0
-6D15806C6C14076C6DEB0F00D93FC0131E6D6C137C903907FC03F06DB55AD9007F1380DA
-0FF8C7FC2C367CB434>99 D<17FF4BB5FCA4ED0007160182B3A6EC0FF8EC7FFF49B512E0
-903907FC03F090391FE0007C49487F49C7120F01FE80484880485A000781484880A2485A
-A2485AA2127FA35B12FFAB127FA27FA2123FA27F121FA26C6C5C00075D7F6C6C5C6C6C5C
-6C6C021E7F6D6C017C13E0D91FC049EBFF8090390FF807E00103B512800100495ADA1FF0
-91C7FC39547CD241>I<EC0FF891B5FC010314C090390FF80FF090391FC003FC90397F80
-01FE49C77E4848EC7F804848143F49EC1FC0485A000FED0FE05B001F16F01607485AA200
-7F16F8A25B160312FF90B7FCA30180C9FCA8127F7FA2123FA26D1538121F17786C6C1570
-000716F06D15E06C6C14016C6CEC03C06C6C15806D6C130F6D6CEB1F00D90FF0133C9039
-07FE01F80101B512E06D6C1380DA07FCC7FC2D367DB434>I<157F913803FFE0020F13F0
-91383FC0F891387F01FC903901FE03FE903803FC0714F81307EB0FF0A290391FE003FCED
-01F892C7FC495AB3B612FEA426003FC0C7FCB3B3A580EBFFF0007FEBFFF8A427547DD324
->I<EF1FC0DA3FE0EBFFE0902701FFFC0313F001079039FF07E1F8903A1FE03FCF01903A
-3F800FFC03903A7F0007F80101FE010314F04848903901FC004000036F13004913000007
-81A24980000F82A8000793C7FC6D5CA200035D6D130100015D6C6C495A017F495A6E485A
-9039FFE03FC0D801C7B5C8FC01C113FC3903803FE091CAFCA57FA27F7F7F6CB612E016FF
-6C16C017F0013F15FC8390B8FCD803F8C7001F1380D80FE0020113C04848EC007F4848ED
-1FE090C9120F127EEF07F012FE481603A56C1607007E17E0007F160F6C6CED1FC06C6CED
-3F806C6CED7F006C6C15FED803FCEC03FCC6B4EC0FF0D93FF0EBFFC0010FB6C7FC010114
-F8D9001F1380354E7DB43B>I<EB7F80B5FCA41203C6FC137FB3A6ED07FC92383FFF8092
-B512E0913981F00FF8913983C007FC9139870003FE028E1301029C6D7E14B814B002F06E
-7E5CA25CA35CB3AD2601FFE0903801FFE0B600C0B612C0A43A537CD241>I<1378EA01FE
-487E487FA66C90C7FC6C5AEA007890C8FCB0EB7F80B5FCA41203C6FC137FB3B3A43801FF
-E0B61280A419507CCF21>I<EBFF80B5FCA41203C6FC137FB3A793B512F8A4043F138093
-381FFC0017F017C094C7FC163E5E5E4B5A4B5AED07804BC8FC151E5D15FC1481EC83FEEC
-87FF148F029E7F9138BC7FC0ECF83F02F07F4A6C7EECC00F02807F4A6C7E6F7EA26F7E6F
-7F167F83707E161F83707E160783707E8318802601FFC04913E0B6D8803F13FFA438537D
-D23E>107 D<01FFD907FEEC03FFB590261FFFC0010F13E0037F01F0013F13F8912701F8
-0FFC9038FC07FE913D03C003FE01E001FF000390260700019038038000C6010E6D6C48C7
-6C7E6D48DA7F8E6E7E4A159CA24ADA3FF86E7E02605D14E04A5DA34A5DB3AD2601FFE0DA
-FFF0EC7FF8B6D8C07F9026FFE03FB512F0A45C347CB363>109 D<01FFEB07FCB590383F
-FF8092B512E0913901F00FF8913903C007FC000349C66C7EC6010E13016D486D7E5C1430
-02706E7E146014E05CA35CB3AD2601FFE0903801FFE0B600C0B612C0A43A347CB341>I<
-EC0FFC91387FFF8049B512E0903907F807F890391FE001FE90393F80007F017EC7EA1F80
-496E7E48486E7E00038248486E7EA248486E7EA248486E7EA2003F82A24848ED7F80A400
-FF17C0AB007F1780A26D15FFA2003F1700A2001F5E6D1401000F5E6D140300075E6C6C4A
-5A6C6C4A5AA2D8007FEC3F806D6C49C7FC90391FE001FE903907F807F86DB55AD9007F13
-80DA0FFCC8FC32367CB43B>I<90397F8007FCB590387FFF800281B512E0913987F00FF8
-91398F8003FC000390399E0001FFC601BC6D7FD97FF86E7E4A6E7E4A6E7E4A140F844A6E
-7EA2717EA3717EA4711380AB4D1300A44D5AA24D5AA2606E140F4D5A6E5D6E4A5A6E4A5A
-02BC4AC7FC029E495A028FEB07FC913987E01FF00281B512C0DA807F90C8FCED0FF892CA
-FCB13801FFE0B612C0A4394B7DB341>I<01FFEB1F80B5EB7FF0913801FFF8913803E1FC
-91380783FE0003EB0F07C6131EEB7F1C1438143091387003FC91386000F0160014E05CA4
-5CB3AA8048487EB612F0A427347DB32E>114 D<D907FE13C090387FFF8148B512E33907
-F803FF390FC0007F4848133F48C7121F003E140F007E1407127C00FC1403A315017EA27E
-7F6C6C90C7FC13F013FF6C13F86CEBFF806C14E06C14F86C14FEC680013F1480010714C0
-D9003F13E014039138007FF0151F00E0140FED07F8A26C1403A215017EA36C15F0A26C14
-036C15E015076DEB0FC06DEB1F80D8FDF0EB3F0039F8FC01FE39F07FFFF8D8E01F13E0D8
-C00390C7FC25367CB42E>I<EB01C0A71303A41307A3130FA2131FA2133F137F13FF5A5A
-001F90B512E0B7FCA326003FC0C7FCB3A71638AC6E1378011F1470A26D6C13F016E09038
-07F801903903FC03C0903901FE07806DB51200EC3FFCEC07F0254B7EC92E>I<007FB5D8
-800FB51280A4C69026FC0003EBF000D93FF86D1380011F4BC7FC010F15F801075D6D6C5C
-6E495A6D6C5C6D14076E6C48C8FCEDC01E6E6C5A021F133891380FF0786F5A913807FDE0
-02035BEC01FF5E80157F6F7E824B7E15FFEDE7F802017F913803C3FEEC07814AC67E020E
-80021E6D7E4A133F4A6D7E4A80707E4948130749486D7E010781010F6E7E013F8201FF82
-00076D010713F0B500F8011FEBFFE0A43B337FB23E>120 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fl cmr10 10.95 91
-/Fl 91 128 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907
-F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7
-FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11
-D<EC03FE91383FFF809138FE03E0903903F800F0D90FE013384948137C90393F8001FE90
-387F00035B5BA2485A6F5AED007093C7FCAA16FEB7FCA33901FC000315011500B3AC486C
-497EB5D8F87F13FCA32E407EBF33>I<EC03FF023F13EE9138FE01FEEB03F090380FE003
-EB1FC0EB3F80EB7F005B5B150148481300AEB7FCA3D801FCC7FCB3AE486C497EB5D8F87F
-13FCA32E407EBF33>I<DA03FE49B4FC91273FFF801F13C0913BFE03E07F01F0903C03F0
-00F1FC0078D90FE0D97FF0131C49484948133E4948484913FF494848495A5B491500A248
-485C03016E5A0300153896C7FCAA197FBBFCA3D801FCC738FE00018485B3AC486C496CEC
-FF80B5D8F87FD9FC3F13FEA347407EBF4C>I<DA03FE49B47E91273FFFC01F13F7913BFE
-01F07F00FF903A03F00079F8D90FE09038FFF00190261FC00313E0D93F8014C0D97F0014
-805B4915008448486D48801500ADBBFCA3D801FCC748C77EB3AE486C496CECFF80B5D8F8
-7FD9FC3F13FEA347407EBF4C>I<EA01FC127FA3120712031201B3AC487EB512F0A31428
-7DA71A>I<127C12FC7E7EA2EA7F80EA3FC0EA1FE0120FEA07F0EA03F81201EA007C133E
-131F130E1304101176BE2D>18 D<133E133F137F13FFA2EA01FEEA03FCEA07F813F0EA0F
-E0EA1FC01380EA3E005A5A1270122010116EBE2D>I<001E130F397F803FC000FF137F01
-C013E0A201E013F0A3007F133F391E600F3000001300A401E01370491360A3000114E049
-13C00003130101001380481303000EEB070048130E0018130C0038131C003013181C1C7D
-BE2D>34 D<013F1603D9FFC04B7E2601E0E0150F2607C070151F48486C4BC7FC023E157E
-48486C15FE48D90FC0EB03FC003ED90EF0EB0FF8DA0F3F13FD007E903A070FFFF1F0007C
-0200EB03E0160000FC6D6C495A170F604DC8FC5F173E5F17FC5F4C5A1603007CD907005B
-4C5A007E150F003E495C020E49C9FC003F5D6C49133E260F803C5B023813FC6C6C485B3A
-01E0E001F03800FFC090273F0003E0133F90C70007ECFFC09339C001E0E0923A0F8007C0
-70031F49487E0400143C033E90381F001C037E497F037C133E4B150F0201027E7F4B137C
-4A5A020702FCEB03805D4A5A141F92C7FC143E147E147C5CA2495A0103037CEB07005C49
-48147E010F033E5B4A160E49C8123F496F5B013E92380F803C49173801FC6F6C5A499238
-01E0E0496FB45A0160043FC7FC41497BC34C>37 D<EC0F80EC7FE0ECF870903803E03801
-07133CECC01CEB0F80011F131E150EA2EB3F00A55D1480A25D157815705D6D6C5A14C1EC
-C38002C7CAFC02EE91387FFFFCEB0FEC14FC4A020713C06D48913801FE006E5DEF00F06D
-7E01074B5A496C5D011D1503D939FF4A5A017093C7FC496D5B0001017F140E496C6C131E
-00036E131C2607801F143C000F6E5B001F6D6C1370263F000714F0486E485ADA03FE5B91
-3801FF03486D495A0487C8FCED7FCFED3FFE6F4814386D5C150F007F6E6C14786D6D6C14
-70003F4A6C14F06D496C6C13E0001F91393E3FC0016C6C903AFC1FF003C03D07FC07F007
-FC1F800001B5D8C001B512006C6C90C7EA7FFCD90FF8EC0FF03E437CC047>I<121EEA7F
-8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A120E5A1218
-123812300B1C79BE19>I<1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13
-F85B12015B1203A2485AA2120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C12
-7EA6123E123FA37EA27F120FA27F1207A26C7EA212017F12007F13787F133E131E7FEB07
-801303EB01C0EB00E014701430145A77C323>I<12C07E12707E7E121E7E6C7E7F12036C
-7E7F12007F1378137CA27FA2133F7FA21480130FA214C0A3130714E0A6130314F0B214E0
-1307A614C0130FA31480A2131F1400A25B133EA25BA2137813F85B12015B485A12075B48
-C7FC121E121C5A5A5A5A145A7BC323>I<1506150FB3A9007FB912E0BA12F0A26C18E0C8
-000FC9FCB3A915063C3C7BB447>43 D<121EEA7F8012FF13C0A213E0A3127FEA1E601200
-A413E013C0A312011380120313005A120E5A1218123812300B1C798919>I<B512FEA617
-067F961E>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>I<ED0180ED03C015
-07A21680150FA216005DA2151E153EA2153C157CA2157815F8A25D1401A25D1403A25D14
-07A25D140FA24AC7FCA2141E143EA2143C147CA2147814F8A25C1301A25C1303A25C1307
-A25C130FA291C8FC5BA2131E133EA25BA2137813F8A25B1201A25B1203A25B1207A25B12
-0FA290C9FC5AA2121E123EA2123C127CA2127812F8A25A1260225B7BC32D>I<EB01FE90
-380FFFC090383F03F090387C00F849137C48487F48487F4848EB0F80A2000F15C04848EB
-07E0A3003F15F0A290C712034815F8A64815FCB3A26C15F8A56C6CEB07F0A3001F15E0A3
-6C6CEB0FC0A26C6CEB1F80000315006C6C133E6C6C5B017C5B90383F03F090380FFFC0D9
-01FEC7FC263F7DBC2D>I<EB01C013031307131F137FEA07FFB5FC139FEAF81F1200B3B3
-ACEB7FF0B612F8A31D3D78BC2D>I<EB07FC90383FFF8090B512E03903F01FF83907C007
-FC390F0001FE001E6D7E001C1580003CEC7FC05AED3FE01270B4FC6DEB1FF07FA56C5A6C
-C7FC120CC813E0153FA216C0157F168015FF16004A5A5D4A5A4A5A5D4A5A4A5A4AC7FC14
-7E147C5C495A495A495A495A49C71270133E133C5B4914E0485A485A485A48C7120148B6
-FCA25A4815C0B7FCA3243D7CBC2D>I<EB07FC90383FFF809038F80FE03901E003F83907
-8001FCD80F007F000E6D7E001E1580D81F80137F486C14C07FA27F5BA2121F6C5AC81380
-15FF1600A24A5AA24A5A5DEC07E04A5A023FC7FCEB1FFCECFF809038000FE0EC07F86E7E
-6E7E6E7E1680ED7FC0A216E0153FA216F0A2120C123F487E487EA316E0A249137F6CC713
-C01278EDFF807E6C4913006C495A3907C007FC3903F80FF0C6B55A013F1380D907F8C7FC
-243F7CBC2D>I<150E151E153EA2157EA215FE1401A21403EC077E1406140E141CA21438
-1470A214E0EB01C0A2EB0380EB0700A2130E5BA25B5BA25B5B1201485A90C7FC5A120E12
-0C121C5AA25A5AB8FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<00061403D8078013
-1F01F813FE90B5FC5D5D5D15C092C7FC14FCEB3FE090C9FCACEB01FE90380FFF8090383E
-03E090387001F8496C7E49137E497F90C713800006141FC813C0A216E0150FA316F0A312
-0C127F7F12FFA416E090C7121F12FC007015C012780038EC3F80123C6CEC7F00001F14FE
-6C6C485A6C6C485A3903F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D>I<EC1FE0ECFF
-F8903803F03E90380FC00F90391F000780133E017EEB1FC049133F4848137F12035B1207
-4848EB3F80ED1F00001F91C7FC5BA2123FA3485AA214FE903887FF8039FF8F07E090389C
-01F09038B800FC01B0137E13F0497F16804914C0A2ED1FE0A34914F0A5127FA6123F6D14
-E0A2121FED3FC0A26C6C1480A20007EC7F006C6C137E6C6C5B6C6C485A90387E07F06DB4
-5A010F1380D903FCC7FC243F7CBC2D>I<1238123C123F90B612FCA316F85A16F016E000
-78C712010070EC03C0ED078016005D48141E151C153C5DC8127015F04A5A5D14034A5A92
-C7FC5C141EA25CA2147C147814F8A213015C1303A31307A3130F5CA2131FA6133FAA6D5A
-0107C8FC26407BBD2D>I<EB03FC90381FFF8090387C07E09038F001F83901E0007C4848
-7F48487F48C7FCED0F80121E16C0003E1407A4123FA26DEB0F807F6C6C131F6D140001FC
-133E6C6C5B9038FF80786C6D5A6CEBF3E06CEBFF806C91C7FC133F6D13C06D7F013F13F8
-01787F48486C7E3903E01FFF48486C1380260F800313C048487E489038007FE0003E143F
-007E141F007CEC0FF01507481403A31501A46C15E0007C1403A2007E15C06C14076CEC0F
-806DEB1F006C6C133ED807F05B3901FC03F86CB512E0011F1380D903FCC7FC243F7CBC2D
->I<EB03FCEB1FFF90387E07C09038FC03F048486C7E48486C7E4848137C000F147E4848
-137F81003F15805B007F15C0A2151F12FF16E0A516F0A5127F153FA36C7EA2001F147F12
-0F6C6C13FF6D13DF000313013900F8039F90387E0F1FD91FFE13E0EB07F090C7FCA2ED3F
-C0A41680157FD80F801400487E486C13FEA24A5A5D49485AEB8007391E000FE0001F495A
-260FC07FC7FC3803FFFE6C13F838003FC0243F7CBC2D>I<121EEA7F80A2EAFFC0A4EA7F
-80A2EA1E00C7FCB3121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619>I<121EEA7F
-80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121E127FEAFF80A213C0A4127F121E1200A41201
-1380A3120313005A1206120E120C121C5A1230A20A3979A619>I<007FB912E0BA12F0A2
-6C18E0CDFCAE007FB912E0BA12F0A26C18E03C167BA147>61 D<EB1FF890B5FC3903E01F
-C0390F0007F0001EEB03F848EB01FC4814FE140000FE14FF7E7FA46CC7FC123EC7EA01FE
-A2EC03FCEC07F815F0EC0FC0EC1F80EC3F00143E5C147814F85C13015CA2495AA25CAB91
-C7FC90C8FCA8EB0780EB1FE0A2497EA46D5AA2EB078020407BBF2B>63
-D<15074B7EA34B7EA34B7EA34B7EA34B7E15E7A2913801C7FC15C3A291380381FEA34AC6
-7EA3020E6D7EA34A6D7EA34A6D7EA34A6D7EA34A6D7EA349486D7E91B6FCA24981913880
-0001A249C87EA24982010E157FA2011E82011C153FA2013C820138151FA2017882170F13
-FC00034C7ED80FFF4B7EB500F0010FB512F8A33D417DC044>65 D<B712FCEEFF8017F000
-01903980000FF86C6CC7EA03FE707E701380EF7FC0EF3FE0A2EF1FF0A218F8A3170F171F
-A318F0A2EF3FE0177F18C0EFFF804C1300EE03FCEE0FF8EE7FE091B6C7FC17E091C7EA07
-FCEE01FE933800FF80EF7FC0EF3FE0EF1FF018F8170F18FC1707A218FEA718FC170FA2EF
-1FF818F0173FEF7FE0EFFFC00403138048486C90380FFE00B85A17E094C7FC373E7DBD40
->I<DB3FF01306912603FFFE130E020F9038FF801E913A3FF007E03E9139FF8000F8D903
-FEC7EA7C7ED907F8EC1EFE4948140FD93FE0140749481403495A91C81201484815001203
-4848167E5B000F173EA24848161EA2123F5B180E127FA349160012FFAC127F7F180EA212
-3FA27F001F171E181C6C7EA20007173C6D16386C6C1678000117706C6C16F06EEC01E06D
-6C15C06D6C1403D90FF0EC07806D6CEC1F00D903FE143E902600FF8013F891393FF007F0
-020FB512C0020391C7FC9138003FF037427BBF42>I<B712FCEEFF8017E000019039C000
-1FF86C6C48EB03FEEE00FF717E717EEF0FE084717E717E170184717EA21980187F19C0A3
-F03FE0A519F0AB19E0A5F07FC0A21980A218FF19004D5AA24D5A6017074D5A4D5AEF7FC0
-4DC7FCEE03FE48486CEB1FF8B85A178004FCC8FC3C3E7DBD45>I<B912E0A300019038C0
-00016C6C48EB001FEF0FF01703A217011700A31870A418381638A41800A21678A216F815
-01150791B5FCA3EC8007150115001678A21638A2180EA3181C93C7FCA4183C1838A21878
-A318F8EF01F0A21707170F173F48486CEB03FFB912E0A3373E7DBD3E>I<B91280A30001
-9038C000036C6C48EB007FEF1FC0170F1707A21703A31701A4EF00E0A21638A31800A316
-78A216F81501150791B5FCA3EC8007150115001678A21638A693C8FCAF3801FFE0B612F0
-A3333E7DBD3B>I<DB3FE0130C912603FFFE131C021F9038FF803C913A7FF00FC07C9139
-FF0001F0D903FC90380078FC4948143DD91FE0141F4948140F4948140701FF15034890C8
-FC491501485A000716005B000F177C5B001F173CA2485AA2181C127FA25B95C7FC12FFAB
-041FB512F0127FA26D9139000FFE00EF03FC123FA27F121FA26C7EA212077F12036C7E7F
-6C7F6D6C14076D7E6D6C140FD907F8141ED903FEEC3C7C902600FF80EBF83C913A7FF007
-F01C021FB5EAC00C020391C8FC9138003FF03C427BBF47>I<B6D8C01FB512F8A3000101
-E0C7383FFC0026007F80EC0FF0B3A691B7FCA30280C7120FB3A92601FFE0EC3FFCB6D8C0
-1FB512F8A33D3E7DBD44>I<B612F0A3C6EBF000EB3FC0B3B3B2EBFFF0B612F0A31C3E7E
-BD21>I<011FB512FCA3D9000713006E5A1401B3B3A6123FEA7F80EAFFC0A44A5A1380D8
-7F005B007C130700385C003C495A6C495A6C495A2603E07EC7FC3800FFF8EB3FC026407C
-BD2F>I<B600C090387FFFFCA3000101E0C7000F138026007F80913807FE0018F818E060
-4D5A4DC7FC173E5F5F4C5A4C5A4C5A4C5A4CC8FC163E5E5E4B5A4B5AED07804B7E151F4B
-7E4B7E15FF913881EFF8913883C7FCEC878791388F03FE91389E01FF14BCDAF8007F4A6D
-7E5C4A6D7E4A6D7EA2707E707EA2707E707EA2707F717E84173F717E717EA2717E848419
-802601FFE04A13C0B600C090B6FCA3403E7DBD47>I<B612F8A3000101E0C9FC38007F80
-B3B0EF0380A517071800A45FA35FA25F5F5F4C5A160748486C133FB8FCA3313E7DBD39>
-I<B500C093B512C0A300016D4BEBE000D8007F1880D977F0ED03BFA3D973F8ED073FA3D9
-71FC150EA2D970FE151CA3027F1538A36E6C1470A36E6C14E0A26E6CEB01C0A36E6CEB03
-80A36E6CEB0700A26E6C130EA36E6C5BA3037F5BA26F6C5AA36F6C5AA392380FE1C0A392
-3807F380A26FB4C7FCA36F5AA213F8486C6D5AD807FFEFFFE0B500F80178017FEBFFC0A3
-4A3E7CBD53>I<B56C91B512F88080D8007F030713006EEC01FC6E6E5A1870EB77FCEB73
-FEA2EB71FF01707FA26E7E6E7EA26E7E6E7EA26E7E6E7EA26E7E6E7FA26F7E6F7EA26F7E
-6F7EA26F7E6F7EA26F7E6F1380A2EE7FC0EE3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE
-01FF7013F0A2177F173FA2171F170FA2170701F81503487ED807FF1501B500F81400A218
-703D3E7DBD44>I<ED7FE0913807FFFE91391FC03F8091397E0007E04948EB03F8D907F0
-EB00FE4948147F49486E7E49486E7E49C86C7E01FE6F7E00018349150300038348486F7E
-A248486F7EA2001F188049167F003F18C0A3007F18E049163FA300FF18F0AC007F18E06D
-167FA4003F18C0A26C6CEEFF80A36C6C4B1300A26C6C4B5A00035F6D150700015F6C6C4B
-5A6D5E6D6C4A5A6D6C4A5A6D6C4AC7FC6D6C14FED901FCEB03F8D9007FEB0FE091391FC0
-3F80912607FFFEC8FC9138007FE03C427BBF47>I<B712F8EEFF8017E000019039C0003F
-F86C6C48EB07FCEE01FE707EEF7F80EF3FC018E0A2EF1FF0A218F8A818F0A2EF3FE0A218
-C0EF7F80EFFF004C5AEE07FCEE3FF091B612C04CC7FC0280C9FCB3A73801FFE0B612C0A3
-353E7DBD3E>I<ED7FE0913807FFFE91391FC03F8091397F000FE0D901FCEB03F8D907F0
-EB00FE4948147F49486E7E49486E7E49C86C7E498248486F7E49150300038348486F7EA2
-000F834981001F1880A24848EE7FC0A3007F18E0A249163FA200FF18F0AC007F18E0A26D
-167FA3003F18C0A26C6CEEFF80A3000F18006D5D0007DA0F805B6C6C90393FE003FCED70
-706C6C496C485A6C6C48486C485A017FD9800E5BD93F819038061FC0D91FC19038073F80
-D90FE14AC7FCD907F1EB03FE902601FDC013F8903A007EE007E091271FF03FC013180207
-B5FC9139007FE1E0DB0001143883711378A2706C13F0EFFF0318FFA27113E0A37113C071
-1380711300715AEF01F83D527BBF47>I<B712C016FCEEFF800001D9C00013E06C6C48EB
-1FF0EE07FCEE01FE707E84717EA2717EA284A760177F606017FF95C7FCEE01FCEE07F8EE
-1FE0EEFF8091B500FCC8FC16F091388001FCED003FEE1FC0707E707E83160383160183A3
-83A484A4F0C004190EA28218E0057F131E2601FFE0161CB600C0EB3FF094381FF8380507
-1370CA3801FFE09438003F803F407DBD43>I<D907FC131890391FFF8038017FEBE07839
-01FC03F83A03F0007CF8D807C0133F4848130F001F140748C7FC003E1403007E1401A200
-7C140012FC1678A46C1538A27EA26C6C14007F7FEA3FF8EBFF806C13F86CEBFF806C14F0
-6C14FC6C14FF6C15C0013F14E0010714F0EB007F020713F89138007FFC150FED07FE1503
-1501ED00FFA200E0157FA3163FA27EA3163E7E167E6C157C6C15FC6C15F86D13016DEB03
-F06DEB07E0D8F9FCEB0FC03AF07F803F8090391FFFFE00D8E00713F839C0007FC028427B
-BF33>I<003FB91280A3903AF0007FE001018090393FC0003F48C7ED1FC0007E1707127C
-00781703A300701701A548EF00E0A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42>
-I<B600C090B512F8A3000101E0C70007130026007F80EC01FC715A1870B3B3A4013F16F0
-6E5DA21701011F5E80010F15036E4A5A010793C7FC6D6C5C6D6C141E6D6C5C027F14F86E
-6C485A91390FF00FE00203B51280020049C8FCED1FF03D407DBD44>I<B691380FFFFEA3
-000301E0020113E06C01809138007F806CEF3F00017F163E181C6E153C013F1638A26E15
-78011F1670A26D6C5DA26E140101075EA26E140301035EA26D6C4AC7FCA2806D150EA26F
-131E027F141CA26F133C023F1438A26E6C5BA26F13F0020F5CA2EDF80102075CA26E6C48
-5AA2EDFE07020191C8FCA26F5A6E130EA2ED7F9CA216DCED3FF8A36F5AA36F5AA26F5AA3
-6F5A3F407EBD44>I<B500FE017FB5D88007B5FCA3000301C0010101E0C713F86C90C849
-EC3FE07148EC0F807E7215006E143F017F190E84A26D6C60A24D7E6D6C60A2EFE7F86D6C
-60A2933801C3FC6E18F001076104037F6E0281140101036104077F17006D6C4D5AA2040E
-EB7F806D6C4DC7FCA24CEB3FC0DA7F80160EA24CEB1FE003C0161E023F171C047814F0DB
-E070010F133C021F173804F014F84C1307DA0FF05EA2DBF1C0EB03FCDA07F95EA2DBFB80
-EB01FEDA03FF6F5AA293C8FCA26E5FA24B157F020094C8FCA24B81037C153EA20378151E
-0338151C58407EBD5D>I<007FB5D8C003B512E0A3C649C7EBFC00D93FF8EC3FE06D48EC
-1F806D6C92C7FC171E6D6C141C6D6C143C5F6D6C14706D6D13F04C5ADA7FC05B023F1303
-6F485ADA1FF090C8FC020F5BEDF81E913807FC1C163C6E6C5A913801FF7016F06E5B6F5A
-A26F7E6F7EA28282153FED3BFEED71FF15F103E07F913801C07F0203804B6C7EEC07004A
-6D7E020E6D7E5C023C6D7E02386D7E14784A6D7E4A6D7F130149486E7E4A6E7E130749C8
-6C7E496F7E497ED9FFC04A7E00076DEC7FFFB500FC0103B512FEA33F3E7EBD44>I<B66C
-0103B51280A3000101F0C8EBF8006C6C48ED3FC0725A013F041EC7FC6D7E606D6C15386D
-6C1578606D6C5D6E14016D5E6D6D1303606E6C49C8FC6E6C5B170E6E6C131E171C6E6C5B
-6E6C137817706E6C13F06F5B6E13016EEB83C05FED7FC7DB3FE7C9FC16EFED1FFE5E150F
-6F5AB3A4ED1FFC020FB512FCA3413E7FBD44>I<003FB712F8A391C7EA1FF013F801E0EC
-3FE00180EC7FC090C8FC003EEDFF80A2003C4A1300007C4A5A12784B5A4B5AA200704A5A
-A24B5A4B5AA2C8485A4A90C7FCA24A5A4A5AA24A5AA24A5A4A5AA24A5A4A5AA24990C8FC
-A2495A4948141CA2495A495AA2495A495A173C495AA24890C8FC485A1778485A484815F8
-A24848140116034848140F4848143FED01FFB8FCA32E3E7BBD38>I<EAFFFCA4EAF000B3
-B3B3B3ABEAFFFCA40E5B77C319>I<486C13C00003130101001380481303000EEB070048
-130E0018130C0038131C003013180070133800601330A300E01370481360A400CFEB6780
-39FFC07FE001E013F0A3007F133FA2003F131F01C013E0390F0007801C1C73BE2D>I<EA
-FFFCA4EA003CB3B3B3B3ABEAFFFCA40E5B7FC319>I<EA0180120313005A120E5A121812
-38123012701260A312E05AA412CFEAFFC013E0A3127FA2123F13C0EA0F000B1C7ABE19>
-96 D<EB0FF8EBFFFE3903F01F8039078007E0000F6D7E9038E001F8D81FF07F6E7EA315
-7F6C5AEA0380C8FCA4EC1FFF0103B5FC90381FF87FEB7F803801FC00EA07F8EA0FE0485A
-485AA248C7FCEE038012FEA315FFA3007F5BEC03BF3B3F80071F8700261FC00E13CF3A07
-F03C0FFE3A01FFF807FC3A003FC001F0292A7DA82D>I<EA01FC12FFA3120712031201B1
-EC03FC91381FFF8091387C07E09039FDE001F09039FFC000FC4A137E91C77E4915804914
-1F17C0EE0FE0A217F0A2160717F8AA17F0A2160FA217E0161F17C06D1580EE3F006D5C6E
-13FE9039F3C001F89039F1E003F09039E0780FC09026C03FFFC7FCC7EA07F82D407EBE33
->I<49B4FC010F13E090383F00F8017C131E4848131F4848137F0007ECFF80485A5B121F
-A24848EB7F00151C007F91C7FCA290C9FC5AAB6C7EA3003FEC01C07F001F140316806C6C
-13076C6C14000003140E6C6C131E6C6C137890383F01F090380FFFC0D901FEC7FC222A7D
-A828>I<ED01FC15FFA3150715031501B114FF010713E190381F80F990387E003D49131F
-D803F81307485A49130348481301121F123F5B127FA290C7FCA25AAA7E7FA2123FA26C7E
-000F14037F000714076C6C497E6C6C497ED8007C017913F890383F01F190380FFFC1903A
-01FE01FC002D407DBE33>I<EB01FE90380FFFC090383F03F09038FC01F848486C7E4848
-137E48487F000F158049131F001F15C04848130FA2127F16E090C7FCA25AA290B6FCA290
-C9FCA67EA27F123F16E06C7E1501000F15C06C6C13036DEB07806C6C1400C66C131E017E
-5B90381F80F8903807FFE0010090C7FC232A7EA828>I<EC1FC0EC7FF8903801F83C9038
-07E07E90380FC0FFEB1FC1EB3F811401137FEC00FE01FE137C1500AEB6FCA3C648C7FCB3
-AE487E007F13FFA320407EBF1C>I<167C903903F801FF903A1FFF078F8090397E0FDE1F
-9038F803F83803F001A23B07E000FC0600000F6EC7FC49137E001F147FA8000F147E6D13
-FE00075C6C6C485AA23901F803E03903FE0FC026071FFFC8FCEB03F80006CAFC120EA312
-0FA27F7F6CB512E015FE6C6E7E6C15E06C810003813A0FC0001FFC48C7EA01FE003E1400
-48157E825A82A46C5D007C153E007E157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE
-017FC7FC90383FFFFC010313C0293D7EA82D>I<EA01FC12FFA3120712031201B1EC01FE
-913807FFC091381E07E091387803F09138E001F8D9FDC07F148001FF6D7E91C7FCA25BA2
-5BB3A6486C497EB5D8F87F13FCA32E3F7DBE33>I<EA01E0EA07F8A2487EA46C5AA2EA01
-E0C8FCACEA01FC127FA3120712031201B3AC487EB512F0A3143E7DBD1A>I<1478EB01FE
-A2EB03FFA4EB01FEA2EB00781400AC147FEB7FFFA313017F147FB3B3A5123E127F38FF80
-7E14FEA214FCEB81F8EA7F01387C03F0381E07C0380FFF803801FC00185185BD1C>I<EA
-01FC12FFA3120712031201B292B51280A392383FFC0016E0168093C7FC153C5D5D4A5AEC
-07C04A5A4AC8FC143E147F4A7E13FD9038FFDFC0EC9FE0140F496C7E01FC7F496C7E1401
-816E7E81826F7E151F826F7EA282486C14FEB539F07FFFE0A32B3F7EBE30>I<EA01FC12
-FFA3120712031201B3B3B1487EB512F8A3153F7DBE1A>I<2701F801FE14FF00FF902707
-FFC00313E0913B1E07E00F03F0913B7803F03C01F80007903BE001F87000FC2603F9C06D
-487F000101805C01FBD900FF147F91C75B13FF4992C7FCA2495CB3A6486C496CECFF80B5
-D8F87FD9FC3F13FEA347287DA74C>I<3901F801FE00FF903807FFC091381E07E0913878
-03F000079038E001F82603F9C07F0001138001FB6D7E91C7FC13FF5BA25BB3A6486C497E
-B5D8F87F13FCA32E287DA733>I<14FF010713E090381F81F890387E007E01F8131F4848
-EB0F804848EB07C04848EB03E0000F15F04848EB01F8A2003F15FCA248C812FEA44815FF
-A96C15FEA36C6CEB01FCA3001F15F86C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80
-D8007EEB7E0090383F81FC90380FFFF0010090C7FC282A7EA82D>I<3901FC03FC00FF90
-381FFF8091387C0FE09039FDE003F03A07FFC001FC6C496C7E6C90C7127F49EC3F805BEE
-1FC017E0A2EE0FF0A3EE07F8AAEE0FF0A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE9138
-C001F89039FDE007F09039FC780FC0DA3FFFC7FCEC07F891C9FCAD487EB512F8A32D3A7E
-A733>I<02FF131C0107EBC03C90381F80F090397F00387C01FC131CD803F8130E4848EB
-0FFC150748481303121F485A1501485AA448C7FCAA6C7EA36C7EA2001F14036C7E15076C
-6C130F6C7E6C6C133DD8007E137990383F81F190380FFFC1903801FE0190C7FCAD4B7E92
-B512F8A32D3A7DA730>I<3901F807E000FFEB1FF8EC787CECE1FE3807F9C100031381EA
-01FB1401EC00FC01FF1330491300A35BB3A5487EB512FEA31F287EA724>I<90383FC060
-3901FFF8E03807C03F381F000F003E1307003C1303127C0078130112F81400A27E7E7E6D
-1300EA7FF8EBFFC06C13F86C13FE6C7F6C1480000114C0D8003F13E0010313F0EB001FEC
-0FF800E01303A214017E1400A27E15F07E14016C14E06CEB03C0903880078039F3E01F00
-38E0FFFC38C01FE01D2A7DA824>I<131CA6133CA4137CA213FCA2120112031207001FB5
-12C0B6FCA2D801FCC7FCB3A215E0A912009038FE01C0A2EB7F03013F138090381F8700EB
-07FEEB01F81B397EB723>I<D801FC14FE00FF147FA3000714030003140100011400B3A5
-1501A31503120015076DEB06FF017E010E13806D4913FC90381FC078903807FFE0010090
-3880FE002E297DA733>I<B539E00FFFE0A32707FE000313006C48EB00FC5E00015D7F00
-005DA26D13016D5CA26D6C485AA2ECC007011F91C7FCA290380FE00EA2ECF01E0107131C
-A26D6C5AA2ECFC7801011370A2ECFEF001005BA2EC7FC0A36E5AA26EC8FCA3140E2B287E
-A630>I<B53BC3FFFE03FFF8A3290FFE003FE00013C06C486D48EB3F806C4817006D010F
-141E00016F131C15076D163C00004A6C1338A2017F5E4B7E151DD93F805DED3DFC1538D9
-1FC04A5AED78FE9238707E03D90FE0017F5BEDE03F02F0140701070387C7FC9138F1C01F
-02F9148F010315CE9138FB800F02FF14DE6D15FCED00076D5DA24A1303027E5CA2027C13
-01023C5C023813003D287EA642>I<B539F01FFFE0A30003D9C00F1300C690388007F8D9
-7F0013E002805BD93FC05B011F49C7FC90380FE00EECF01E6D6C5A01035B6D6C5A6E5AEB
-00FF6E5A6E5A81141F814A7E81147BECF1FC903801E1FEECC0FF01037F49486C7ED90F00
-7F011E6D7E013E130F496D7E01FC80486C80000F4A7EB539803FFFF8A32D277FA630>I<
-B539E00FFFE0A32707FE000313006C48EB01FC6F5A00015D7F00005DA2017F495AA2EC80
-03013F5CA26D6C48C7FCA26E5A010F130EA26D6C5AA2ECF83C01031338A26D6C5AA2ECFE
-F001005BA2EC7FC0A36E5AA36EC8FCA2140EA2141E141C143C1438A2147800181370127E
-B45BA2495AA248485AD87E07C9FCEA780EEA3C3CEA1FF8EA07E02B3A7EA630>I<001FB6
-1280A2EBE0000180140049485A001E495A121C4A5A003C495A141F00385C4A5A147F5D4A
-C7FCC6485AA2495A495A130F5C495A90393FC00380A2EB7F80EBFF005A5B484813071207
-491400485A48485BA248485B4848137F00FF495A90B6FCA221277EA628>I<B812F0A22C
-0280982D>I<001C130E007FEB3F8039FF807FC0A5397F003F80001CEB0E001A0977BD2D>
-127 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fm cmr17 17.28 18
-/Fm 18 90 df<150E151E153C157815F0EC01E0EC03C01407EC0F80EC1F00143EA25C5C
-13015C495A13075C130F5C131F91C7FC5B133E137E137C13FCA2485AA3485AA3485AA312
-0F5BA3121F5BA3123FA390C8FCA25AA5127EA312FEB3A7127EA3127FA57EA27FA3121FA3
-7F120FA37F1207A36C7EA36C7EA36C7EA2137C137E133E133F7F80130F8013078013036D
-7E801300147C80A280EC0F80EC07C01403EC01E0EC00F01578153C151E150E1F8F73EA33
->40 D<12E07E12787E7E7E6C7E7F6C7E6C7E6C7EA2137C7F133F7F6D7E80130780130380
-130180130080147C147EA280A3EC1F80A3EC0FC0A315E01407A315F01403A315F8A31401
-A215FCA51400A315FEB3A715FCA31401A515F8A21403A315F0A3140715E0A3140F15C0A3
-EC1F80A3EC3F00A3147EA2147C14FC5C13015C13035C13075C130F5C49C7FC5B133E5B5B
-A2485A485A485A5B48C8FC121E5A5A5A5A1F8F7AEA33>I<170FA34D7EA24D7EA34D7EA3
-4D7EA34C7F17DFA29338039FFC178FA29338070FFE1707040F7FEE0E03A2041E80EE1C01
-A2043C80EE3800A24C80187FA24C80183FA24B4880181F0303814C130FA203078193C712
-07A24B81030E80A24B8284A24B8284A24B82197F03F0824B153FA20201834B151FA20203
-8392B8FCA24A83A292C91207020E8385A24A8485023C84023882A20278840270177FA202
-F0844A173FA24948841A1FA24948841A0FA249CB7F1A074985865B496C85497E48486C4D
-7F000F01F8051F13F0B60407B612F0A45C657DE463>65 D<DD7FF81560040FB56C14E004
-7F14E00303B600FC1301030F9038E003FEDB3FFEC7383F8003DBFFF0EC07C04A01C09138
-03F007020790C9EAF80FDA0FFC167C4A48EE1E1FDA7FE0160F4A48EE07BF4949EE03FF49
-90CAFC4948834948834A187F495A013F193F4948181F5C01FF190F485BA24890CC1207A2
-48481903A2485A1B01121FA25B123F1B005BA2127F1C00A4485AB06C7EA5123F1CE07FA2
-121F7FA2000F1A011CC06C7EA26C7E1B036C6D19801B076C7F017F1A006E606D6C181E13
-1F6D6C606E18386D6C18786D6C606D6D4C5A6D6D4C5A6E6C1607DA1FF84C5A6E6C4CC7FC
-6EB4167C020101C04A5A6E01F0EC07F0DB3FFEEC1FC092280FFFE001FFC8FC030390B512
-FCDB007F14F0040F14809326007FF8C9FC53667AE360>67 D<BC1280A4C601FCC81201D9
-3FF8DB001F13C0011F170319001A7F1A3F1A1F1A0F1A07A21A03A21BE01A01A41A00A61B
-701870A41B00A418F0A4170117031707170F177F91B7FCA402F8C7127F170F1707170317
-011700A41870A31B0EA41B1C95C8FCA51B3C1B38A31B78A41BF0A31A01A21A031A07A2F2
-0FE01A1F1A7F1AFF1903013F171FD9FFFC0303B5FCBC12C0A44F6279E15A>69
-D<BB12FCA4C601FCC8120FD93FF89238007FFE011F171F190719031900A21A7E1A3EA21A
-1EA21A1F86A486A6F20380A318E0A297C7FCA61701A417031707170F171F17FF91B7FCA4
-02F8C7FC171F170F170717031701A41700A895C9FCB3A580133F90B57EB712E0A4496279
-E156>I<DDFFF015C0040F01FF1401047F14E00303B600F81303030F9038E003FEDB3FFC
-C7007F1307DBFFE0EC0FC002030180913803E00F4A48C83801F01F4A48ED0078DA3FF0EE
-3C3F4A48161E4A48EE0F7F4949EE07FF4990CA7E495A4948834948835C013F197F494818
-3F495A1B1F485B1B0F4890CCFCA248481907A2485A1B03121F5BA2123F1B015BA2127F98
-C8FCA35B12FFB06C7EA24EB712E0A3123F95C7000FEBF0006D06015B64001F857FA2120F
-7F1207A26C7EA26C7FA26C7FA26D7E6D7E131F806D7E6D6C5F6D7E6D6D5E6D7F6E6CEE07
-BFDA3FF8EE0F3FDA0FFCEE1F1F6EB4163E6E01C0EDFC0F020001F0913801F807DB3FFEEC
-0FE092260FFFF09038FF8003030390B538FE0001DB007F02F81300040F02C091C7FC0400
-01F8CAFC5B667AE368>I<B7020FB612F0A4C691C9000FEBF000D93FFC040313C06D4870
-5BB3B3A391BAFCA402F8C91201B3B3A7496C4C7F90B5040F13F0B7020FB612F0A4546279
-E163>I<B712C0A4C66CEB8000D91FFEC7FC6D5AB3B3B3B3AE497E90387FFF80B712C0A4
-22627AE12F>I<B712E0A4C60280CAFCD93FFCCBFC131F5CB3B3B21A1CA61A3C1A38A61A
-78A41AF8A21AF01901A219031907A2190F191F193F197FF001FF1807013F043F13E0D9FF
-FC0203B5FCBBFCA4466279E153>76 D<B500FC071FB51280A36E61C6F58000013F51C7FC
-D91DFFF177FCA2011C6D18E7A36E6CEF01C7A36E6CEF0387A36E6CEF0707A26E6C170EA3
-6E6C171CA36E6C1738A36E6C1770A26E6D16E0A36F6CED01C0A36F6CED0380A36F6CED07
-00A26F6C150EA36F6C5DA36F6C5DA36F6C5DA26F6D5CA3706C495AA3706C495AA3706C49
-C7FCA2706C130EA3706C5BA3706C5BA3706C5BA3706D5AA294387FC1C0A394383FE380A3
-DD1FF7C8FCA3EF0FFEA2013E6F5AA2137F715A2601FFC04F7E000701F896383FFF80B66C
-6D48023FB61280A3715A696278E17A>I<B500FC041FB512F0A280A226003FFF0400EBFE
-006D6DEE3FF8F20FE0011D7F745A011C7F6E6C705AA26E7E81141F6E7EA26E7E82806E7F
-A26E7F6F7EA26F7E82151F6F7EA26F7E83816F7FA26F7F707EA2707E83161F707EA2707E
-8482707FA2707F84177F717E84171F717EA2717E1980837113C0A27113E019F0187FF03F
-F819FC181FF00FFEA2F007FF1A83847213C3A27213E31AF3197FF13FFB1AFF8585A285A2
-8585A285133E1A7F017F183FA22601FFC0171F000701F0170FB67E1A07A21A03546279E1
-63>I<933801FFE0043F13FF4BB612E003079038003FF8DB1FF0EB03FEDB7FC0903800FF
-804A48C8EA3FE0DA03FCED0FF0DA0FF0ED03FC4A486F7E4A486F7E4A48707E4ACA6C7E49
-48717E4948717E4948717E4948717E4948717E013F854A83017F864948727EA24890CC6C
-7EA24848737EA24848737EA2000F87491907001F87A34848737EA4007F1C80A24985A400
-FF1CC0AF6C6C4F1380A5003F1C006D61A3001F63A26D190F000F63A26C6C4F5AA36C6C4F
-5AA26C6D4E5A6C636E18FF017F626D6C4D90C7FC6E5F011F616D6C4D5A6D6C4D5A010361
-6E171F6D6C4D5A6D6D4C5ADA3FC04CC8FCDA1FF0ED03FE6E6C4B5A6E6C4B5ADA01FFED3F
-E09126007FC0ECFF80DB1FF0D903FEC9FCDB07FFEB3FF8030190B512E0DB003F91CAFC04
-0113E05A667AE367>I<B912C018FEF0FFC019F0C601FCC813FCD93FF8ED0FFF011F0403
-7F06007FF13FF0737E737E1907737E86731380A27313C0A31BE01A7FA21BF0A91BE0A21A
-FF1BC0A34F13801B00614F5A624F5A4F5AF17FE04F5A060390C7FCF01FFE943801FFF891
-B812E096C8FC18F802F8CCFCB3B3A4497E90B5FCB7FCA44C6279E15A>I<B812FCEFFFE0
-18FCF0FF80C601FCC7000F13E0D93FF89138007FF8011FEE1FFCF007FF06017F727FF13F
-E0737E86737E737EA2868587A28587A96361A298C8FC6162624F5A191F4F5A4F5AF1FF80
-4E90C9FCF007FEF01FF8F0FFE0050F138091B700FCCAFC18E08402F8C7EA1FFE943801FF
-80716C7EF03FF0727EF007FC727E85727F8486737EA3737EAA86AA1DE086191FA3070F14
-017414C007071403496C8390B570EC0780B76F9038800F00736D5A97383FF03E97380FFF
-FCCD000313F09738003FC05B6479E162>82 D<DA07FF1403023F01F05B49B512FC010702
-FF5B90260FFC0013C0D93FE090380FF01FD97F80EB03F801FEC86C5A4848157E4848ED1F
-7F48486F5A4848815B001F824981003F8290CAFC4883A2007E83A212FE84A384A27EA36D
-82A26C7EA26D93C7FC6C7E7F7F6C7E6D7E6C13E06C13FCECFFC06C14F86CECFF806C15F8
-6DECFF80011F15E06D15F8010315FE01006F7E021F81020181DA003F80030380DB003F7F
-04037FEE007FEF1FFF71138017037113C083A2F07FE0183FA2181F00E018F0180FA41807
-A27EA47E19E0180F7E19C07E6C171F19806D163F6D17006D5E6D16FE486C5E6D4B5AD8FC
-7F1503D91F80EC0FF026F80FE04A5AD907FCEC7F8029F001FFE003FFC7FC6D6CB512FC48
-011F14F0020314C0489026001FFEC8FC3C667AE349>I<003FBC12F8A49126C000039038
-C0000301FCC76C49EB007F01F0190F01C019074848F103FC90C81701007E1A00007C1B7C
-A300781B3CA400701B1CA600F01B1E481B0EA7C91800B3B3B3A54C7FA2041F13F84AB87E
-A457627CE160>I<B600FE051FB512C0A4C602C00507EBF800013F49050113C06D90CC90
-C7FC6D626D6D606D626F606D4F5A6D7F6F4D5A027F616F1707023F4EC8FC6E6C170E6F17
-1E020F181C6F5F6E6D16786E18707016F06E4D5A6E6D5E701503037F5F704BC9FC033F5E
-6F6C150E70151E030F161C705D6F6D14786F16707114F06F4B5A6F6D5C711303047F5D71
-49CAFC043F5C706C130E71131E040F5C71133870EB8078701470F0C0F070EBC1E070EBE1
-C018F3057F5B06FFCBFC83715AA2715AB3B04D7E94387FFF80047FB67EA4626280E163>
-89 D E
-%EndDVIPSBitmapFont
-end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
-
-%%EndSetup
-%%Page: 1 1
-1 0 bop 562 536 a Fm(INF)l(ORMA)-11 b(TION)45 b(SOCIETY)f(TECHNOLOGIES)
-1784 718 y(\(IST\))1481 901 y(PR)l(OGRAMME)833 2896 y
-@beginspecial 0 @llx 0 @lly 1623 @urx 1196 @ury 2662
-@rwi @setspecial
-%%BeginDocument: istlogo.eps
-%!PS-Adobe-1.0 EPSF-1.2
-%%BoundingBox: 0 0 1623 1196
-%%Creator: Jasc Software, Inc.
-%%Title: C:\temp\Logocmyk.eps
-%%CreationDate: 0
-%%EndComments
-/width 1623 def
-/height 1196 def
-/pixwidth 1623 def
-/pixheight 1196 def
-/picstr width string def
-/psppic {
-gsave width height 8
-[width 0 0 height 0 height neg]
-{currentfile picstr readhexstring pop}
-image grestore } def
-0 height neg translate pixwidth pixheight scale
-psppic
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9A09A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999999999A9A9A999A9A9A9A9A9A9A9A9A9A999999999999999999999999999999999999999999999999999999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD654100202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201010101020101010202020202010202020202020202020202020202020202020202020202020202020202020202020101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201010101010101020202020201010101010102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010202020201020201010101010101010101010101010101010101010101010101020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5BB581102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201020202020202020201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020201020102010101010101010101010101010101010101010101010101010201020201010101010101010101010202020202020202010101010202020202020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020202010202020202020202020202020202020202020202020202020202020202010101010101010101010101010101010101010101010101010101010101010101020202020202020202020202020202020202020202020202020202020202020202020101010101010102010101010101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201010101010202020202020202020202020202020101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C39B490D01010101010101010101010101010101010101010101010101020202020202020202020202020202020202020202020202020202020202020202020101010101010102010101010101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201010101010202020202020202020202020202020101010101010101010101010101010101010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102020202020202020202020101010102020101010101010202020202020202020202020202010202020202010202020202020202020202020202020202020202020202020202010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102010101010101010101010101010101010101010101010101010201020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010101010201010102020202020102020202020202020202020202020202020202020202020202020202020202020201010202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1CEA44C0F020202020201020202020201020202010202020201020202020202020202020202020202020202020202020201010101020101010101010101010101010202010101010101010102020202010102020202010101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102020202020202020201010102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCB6B8B390450D01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010202010201020101010101010101010101010101010101010101010101010102010202010101010101010101010102020202020202020101010102020202020202020201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010202020102020202020202020202020202020202020202020202020202020202020101010101010101010101010101010101010101010101010101010101010101010202020202020202020202020202020202020202020202020202020202020202020201010101010101020101010101010202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010101010102020202020202020202020202020201010101010101010101010101010101010101010101010102010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020202020202020202020201010101020201010101010102020202020202020202020202020102020202020102020202020202020202020202020202020202020202020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C6C6C5BF97460D010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020101010101010101010101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020102010101010202010101010101010102020202020101010101010101010101010101020202020101010101010101010101010101010101010101010101010101010202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201010102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201010101010101010101010101010101010201010101010101010101010101010101010101010101010101010101010101020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED6D7D7D5CBA44C0E010101010101010101010101010101010102010101010101010101010101010101010101010101010101010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102010101010101010101020201010101010102020101020202020202020201020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010202020202010202020102020202010202020202020202020202020202020202020202020202010101010201010101010101010101010102020101010101010101020202020101020202020101010202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3C4C1BFBCBDB38E410C0101010101010101010101010101010101010101010101010101010101010101010102020101020201020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010101010102020201020202020202020202020101010101010101010101010101010101010101010101010101010101010102020202020202020202020202020202020202020202020202010101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8C9C9C9CBCBCBC49C490D01010101010102010101010101010101010101010101010101010101010101010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102010101010101010101020201010101010102020101020202020202020201020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010202020202010202020102020202010202020202020202020202020202020202020202020202010101010201010101010101010101010102020101010101010101020202020101020202020101010202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB9BCB8B6B8B8B6B28E410C010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010202020201020201010101010101010101010101010101010101010101010101020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102010102020201020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010101010101010101010101020202020202020202020202020202010202020202020202020202020202020202020202020202010101020202020202020101010101010201010101020201010101010102010101010101010101010101010101010101010101010102020202020202020201020101010101020102020202020202020202020202010201010101010202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED3D4D7D7DADAD9D9D1A54F100202020201010101010101020202020201010101010102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010202020201020201010101010101010101010101010101010101010101010101020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102010102020201020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010101010101010101010101020202020202020202020202020202010202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C4C1C0C4C4C3C4C1BC9C5D302424242424242424242424242424242524242525242424252626262626262626262626262625252424252524252424252525242424232323232424242424252525242425262626262628282826292929292929292929292929292A2929292929292828292929292929282626262626262626262626262626262626262626262525252525262526262626262828292929292829292929282929292A2A2B2B2B2B2A292A2929292929292928292826262626262626282626262626262828292A2A2A2A2A2A2B2C2C2C2C2C2C2C2C2C2D2E2E2E2D2C2D2C2C2C2D2C2C2C2C2C2C2C2C2C2C2C2B2C2C2C2C2C2C2C2B2A2B2A2A2B2B2B2A2A2B2B2A2B2B2B2B2B2B2B2A2A2A2A29292A2A2A2A2A2A292826262626262829292928282829292929282828282626262626262626262626262525252524242425262626262826262626262626262626262626262525252424242424252424252525252526262626262626262625252425252525262626262626262626262628292929292929282828282626262629292626262626262829292929292929292928282828262828282828262829292929292A2A29292A2A2B2C2C2B2B2B2B2A2A2A292929282626262626262626262626262626262626252525252625252525242525262626252525252525262626252626262626252626262626262625252524242424242425252524252525252424242424242424242424242424242423232324242425252626262626292626262626262626262626252526262626262626262626262629262828292829292A2A2A2A2A2A2A2B2B2B2A2A2A2B2B2A2A2A2A2A2B2B2B2B2C2C2B2B2C2C2C2C2D2E2E2D2D2D2D2D2E2E2F2F2F2E2E2E2E2E2E2E2F2E2E2E2F2E2E2D2D2D2C2C2D2D2E2D2D2E2E2F2F2F2F2F2E2F260E02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCBBBCBCBBB9B6B9B9BBB8BFBCB3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B823010102020101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8C9C9C9CACBD0CBCBCACBD3EBC6B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC1C0C0BFC1C3C5C6C9C9D1E7C3B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E43D02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3C3C5C3C0C4C1C4C5C8CAD1E6C6B1B3B3B6B6B9BCBCBDBDC0C1C0BCB9BDC0C1C3C4C8CAC8C5C1C1C4C4C4C8C8C6C9C6C4C3C3C5C4C4C4C1C1C1C1C0C0C0C0BFBFBDC0C0C0BFBCB9B9BBB8B9B9B9B9B9B9BCB9B8B8B9B9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBF3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCECACACED1CFCECED1DFF3CEBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B52D01010101010202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCB6B9BBB6BBBDBCBDBDBBC4D7B5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED3D4D4D3D4D1D0CFD1D1DBF1CBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D03502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCBCC0C3C0C1C3C0C0C1C4D0E4BFABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E63F02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E4E1E4E4E6E9E4E4E6E3ECFCDCD4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBC3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E1E1E1E1E4E6E4E3E7E9F6FFDFD3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABAB2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E1DFDCDBE1E1DFE1E3E4EFF9D7C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCB3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C6C6C5C6C6C8C9C9C6D5E6C0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB02B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9D5D5D6D4D0CBCECECBD7ECC9B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECB3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DADBD7D7D9D7D1D3D3D1DAEFCAB9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDB3A02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C6C6C6C5C6C9C8C9C6CAD0E3C0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0AC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E1DFDFDBDCD9D9DBDEDEE9F8D7C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7D4D5D5D5D9DAD9D6D6E1F6D0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8C9CECECBCBC9CACACECED6EBC6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFE1DEDADBDBDADBD9D7E1F7D0C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACAC2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CFD0D0CBCBC9CBD0D1D3DEF3CEC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D03502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E6EAEBE7E6E9E6E7E4E4EFFDDECECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BC30020202020202020202020299FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEB9BBB9B9BDBFBFC4C6C6CEDFBFB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAAC2B010101010101010201010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D7D9D6D9DCD9DADEDEE9F7D5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBF3002020202010202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CACFD1D0D4D1CFCFD1D1D7EFC9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B92F01010102020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBDEE1E3E4E2E1DFDEDEE7F8D7C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C53202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6C4C0C1C4C3C4C4C1CBE2BCACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D33702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD0D4D7D6D5D5D7D7DBDEEAF7D5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0AB2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0DBDCDEDFE3E4E1E2DFDEE7F7D7C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E4E2E2E1E1DFDEDFE2E2EBF8D7C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0CFD3CFD0D4D3D4D4D1DFF3CEBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7E6E9E6E7E3E3E3E7E9EFFCDBCBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBF30020202020202020201020199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD0D5D1D0D0D0D1D3D3D3DEF3CBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C63202020202020101020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CBC9CBCBD0D0CBC9C9C9D6ECCBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADBDCDEDFDFDBDADBD7DFF3CBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D43702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBCACAC8C9C9C8C9CECEDAF2CBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBB30010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED1D7D7D7D7DAD6D7D7D7E3F3D1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B62F01020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCED1CBD1D4D0D4D4D4DFF3CEBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E1DFDCD9D7D7D7D7D9D7E1F3D0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C8C9C6C6C6C5C0C1C4C6D0E2BBAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E43D02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D9DEE1DFE2E2E4E2E7E6F1FBDAC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D73902020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CBD1D1D0D3D5D3D4D6D4DFF3CFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7EAE9EAEAEBEAECEEEFF8FFE2D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBC3002020202010101010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0C0C4C4BFC0C1C3C6CACAD5EAC6B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC93302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEBEAECE9E9E9E7E7E6E6EFFBD7C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBB2E02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6C9C9C9CBD0D0D3D7D7DAE1F6D3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B92F010202020202010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E1E1E4E1E3E3E4E7E6E7F2FDDED3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB12B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D4D0D4D4D0D1D1D3DEF3CEB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC03002020202020202010202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9D5D3D1D3D1D0D1D6D1DCF1C9B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D3D5D5D5D4D3D4D3D3DEF4D0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C26010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C5C9C9C9C6C6C9CBCECEDCEECBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B52C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED5D5D5D5D4D4D1D5D6D6DFF2CAB9BBB8B9B9B9B9B9B9BCB9B8B8B9B9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBC3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E3E6E6E1E4E4E3E1E2E2EFF9D9CACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBC30020202020201020101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBCFCBC9C9C9CBCBCBD0CBD6EAC6B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C030020202020201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E3E3E3E3E6E6E9EAEAE7F3FCDCD1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F27010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDBDCDBDAD7D7D5D5D6D9E3F6D0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B12B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1BFC0C0BFBFC3C0C1C4C4CEE3C0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B62D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF2F3F3F4F7F6F2F3F7F7FBFFE7E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C93402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E4E4E2DEDFDCDBDCDEDFEAF9D7C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BC2F01010101020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D7D5D5D1D0D5D6D1E1F4D1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CECFCFCFCBD0D1D3D4D1DFF4D0C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DADCDCD9DCDCDADBD9D9E1F4D0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0DCDEDEDBDCDCDADBDBDEE9F7D5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB2B1B5B5B8B8B6B8BBBBC0D5B1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BB2E02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E1E2E1E3E2E1DBDCDEDBE4F7D5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CE3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8C9C6C9C6C4C3C4C4C6CBE3C0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCBCBDB9B9B6B6B6B8B9B9C0D1B19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E1E2E6E7E9E6E6E7E7E6ECF9D7C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6CACBCECECBCBD1D1DCF2CEBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A52A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBD9D9D6D4D4D0CFCECED7EAC6B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A72A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D4D1D0CED1CBCACBCBD9F2CAB9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D4D1CECFD0CBCED0D0DAEFCABCB9B8B8B9B9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CEC49B6E4A271F200400112020204C5578A8CAD1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C33302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CACECAC6CACECBCFCECED6ECC6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DED784340400000000000000000000000000000000002969B3D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDC3A02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBE1E1E1E2E2E1E2E1E4ECF9D4C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3B34C0300000000000000000000000000000000000000000000001F6BC1C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D33702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E1E3E1DCDEDEE1E1E1E1E7F8D9CAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBF6B030000000000000000000000000000000000000000000000000000000972C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECE3602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC1C5C5C6C6C6C4C6C6C8D3E6C3B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3AC3000000000000000000000000000000000000000000000000000000000000000289BB1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B62D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CACED1CECFCFD0D4D4D3DAF3D0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDB6240000000000000000000000000000000000000000000000000000000000000000000385B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBF3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C1C0C3C4C5C6C6C6C5C6D0E7C5B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6AB210000000000000000000000000000000000000000000000000000000000000000000000036BB1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B52E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8D0CECACACACED0CFD0D0DCF3CFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBF4C000000000000000000000000001532496A6A6967674E4023030000000000000000000000000387B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0D0D3CFCBC9C9C9CECED7EFC6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9A200000000000000000000003C84C3D0D1D0D0D1D1D0D3D0D1D1D3A76711000000000000000000000ABCD3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C432020202020202020201010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEBBBCBCBBBDBDBFBCBDBBC3D7B8A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B924000000000000000000339CB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B973150000000000000000002BBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BF30010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D5D4D3D7D5D5D1D1D6E1F2D0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D09E00000000000000000472D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0B95500000000000000000076BFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C63302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8CBC9C9CBCBCBCBCACAD5EAC1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCB4A00000000000000007AD3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D07800000000000000001AD7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9D7D7D7D7D7D6D7D7D3DCF1CBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5090000000000000051C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E17A000000000000000096DEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECE3602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBDFDFDEDCDAD7D4D1D1DCF2CABDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B59900000000000000039FACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABAC260000000000000028B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBF3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CACEC9CBCECBCBC9CBCBD9ECC6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A35A000000000000002DAAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E81000000000000000097A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACAC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0CED1D0D1D4D0CED1D1DBECCBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E69B54545656555656A5E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADA4E000000000000007CC8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C43302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8C9CAC9C9CBCECECBCAD5EAC6B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B18D0000000000000038B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B02C010101010101020101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD1D4D5D5D5D5D1D3D3D6E1F2CEBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C61100000000000011CBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D3CFCECFCACECECACED9EFCAB9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABAC3500000000000000A7B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBC30020201020202010202020299FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D5D9DADBDED9DEDEDFECF9D9C9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B96C0000000000000090C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE23D02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E1E1E1DCDBDFDEE1E1DEE4F7D7C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABAB9C86837C5F7684848DA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7A28682825F748386AAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F817C7B617283808DA3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5A59CA17E92A5A2BFCED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4CBAAA8A7779CA7B9D0D0D0D4D1D3D3D6D4D1D1A10000000000000078CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBF9D9B9B766D9B9B98B5B9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B69790686967676767898FAEB6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C33302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7E9E9E4E6E9E7EAE7EAF2FCDBCECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C18A70454343435B6B94A7BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABA26B3E1A00000000000000000000001528567DB2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A16D411F030000000000000000000C2A51899F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBA263330F000000000000000000001C4A73ACBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B08D5A2E0E000000000000000000001A466DA2B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCB57C54240900000000000000000024548DBCBBBBBDBDBDBD9E000000000000005FB3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BF9B5C330800000000000000000000031C4071A2B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBBB7E401800000000000000000000000009265883BCC5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B32D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CFCBCBC9CBD0CFD3D3D3DEF4CEB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACAB9F43030000000000000000000019A8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B36D2800000000000000000000000000000000000000023376AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC17E34030000000000000000000000000000000000226EB3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1670000000000000094BCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBD1C00000000000000B9B6B6B5B5B5B9BBBBBFC1C1C3990000000000000075CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C976000000000000009BC1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1B35F1D0000000000000000000000000000000000002B72B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B84100000000000000B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3A556150000000000000000000000000000000000002A78B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBB8C3303000000000000000000000000000000001067BDC8C9C6C5C60000000000000041B9B9B8B5B5B5B2B2B1B1B1B3B3B3640000000000000088B0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1904D0E000000000000000000000000000000000000001A539FABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB168230000000000000000000000000000000000000000032A7BB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D13702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6C6C9CACACACACBCBD9EFCEBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3A20F0000000000000000000000001EC9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C86909000000000000000000000000000000000000000000000000177DC9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B97215000000000000000000000000000000000000000000001676C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C572000000000000009CC5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC92000000000000000D0CECACECECBCBCACAC9C9C9CAA20000000000000072C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C672000000000000009BC1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6A7470300000000000000000000000000000000000000000000155EB5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B23D00000000000000A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABAB9D4303000000000000000000000000000000000000000000001467ACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0721A0000000000000000000000000000000000000000000861B0ACACB1000000000000003FB3B1B2B2B2B3B3B1B1B0B1B2B1B165000000000000008DB5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB89738000000000000000000000000000000000000000000000000003A9BBBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1AE4D03000000000000000000000000000000000000000000000000000863BBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B52D01010202020201010202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCACAC8C9C9C8C9C8C8D0E4C1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B19F08000000000000000000000000001AB3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B28D15000000000000000000000000000000000000000000000000000000001A97B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBC9D250000000000000000000000000000000000000000000000000000219BB1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0AC600000000000000088ACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8AB1A00000000000000ABABABABA8A8A8ABA8A8A8A8A8840000000000000061ACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2670000000000000096BBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C37809000000000000000000000000000000000000000000000000000021A5D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D14E00000000000000D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D17A0A00000000000000000000000000000000000000000000000000001D99BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCA72C0000000000000000000000000000000000000000000000000034B6BFBB0000000000000043BBBCBDBBBBBCBFBCBCBDC0C3C3C06F0000000000000097BFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDB653030000000000000000000000000000000000000000000000000000000357B1B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3BC5603000000000000000000000000000000000000000000000000000000000018A3C9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C53402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBD1D1CBCBCAC9C9CBD0DCF2CEBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C03C00000000000000000000000000001DB9B9B9B8B5B5B5B2B2B1B1B1B3B3B35600000000000000000000000000000000000000000000000000000000000000035AB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACAC6703000000000000000000000000000000000000000000000000000000000378B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3670000000000000092BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C41E00000000000000C9CED0D0CECECECECED0D0D3D3A8000000000000007BD0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D67C00000000000000B1DBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8BF380000000000000000000000000000000000000000000000000000000000005ABBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BF4500000000000000C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9B52B0000000000000000000000000000000000000000000000000000000000005CC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1810300000000000000000000000000000000000000000000000000000023AEB60000000000000034C0C0C0C3C3C3C4C5C6C9C9C9C9C87400000000000000A1C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACEB21F000000000000000000000000000000000000000000000000000000000000001FB3CBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4AE1700000000000000000000000000000000000000000000000000000000000000000056B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A529010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9CBCECBC9C9C5C5C3C3CBE4C1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5AC0000000000000000000000000000001AB5B5B8B8B8B9B6B6B5B5B5B9BBB3440000000000000000000000000000000000000000000000000000000000000000000047C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C54700000000000000000000000000000000000000000000000000000000000000006ABBBDBDBDBDB9B9B9B9B9B9B9B6B6B367000000000000008CB1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABAB1900000000000000B0B0B0B2B3B3B2B5B5B5B2B2B1890000000000000065B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5670000000000000096C0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFA50F000000000000000000000000000000000000000000000000000000000000000028ACB1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B13D00000000000000B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8930D00000000000000000000000000000000000000000000000000000000000000002FACB5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B54D00000000000000000000000000000000000000000000000000000000000025BC000000000000001EC6C9C9C9C9CED0D0CECECECECED07800000000000000A7D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CE9B04000000000000000000000000000000000000000000000000000000000000000000129CCECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C89309000000000000000000000000000000000000000000000000000000000000000000000044C1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C33002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C3C3C5C8C5C5C4C5C8C5D3EBC6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B14D00000000000000000000000000000025A3A3A1A19E9E9E9F9FA3A29F991E0000000000000000000000000000000000000000000000000000000000000000000000003BA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B53F0000000000000000000000000000000000000000000000000000000000000000000075CECACECED0D1CECECECBCBCED0D47800000000000000A7D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D42100000000000000D0D1D0D0D0D4D1D3D3D6D4D1D1AA0000000000000078CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6670000000000000093BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFA7100000000000000000000000000000000000000000000000000000000000000000000023ACB8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B84000000000000000B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9A20F0000000000000000000000000000000000000000000000000000000000000000000024B9C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C347000000000000000000000000000000000000000000000000000000000000000045000000000000001EC3C1C1C1C1C3C3C3C3C3C0C1C1BD6E000000000000009BC3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8860300000000000000000000000000000000000000000000000000000000000000000000000397BFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4AE090000000000000000000000000000000000000000000000000000000000000000000000000047C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3C0C1C1C1C6C9CBCBD0CED3E9C6B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0280000000000000000000000000000003EB3B2B2B2B2B6B9B9B9B9B8BB3B000000000000000000000000001D435A68678F7E676A5B330F000000000000000000000000005AB9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C95700000000000000000000000000153F5F65758C756456380E00000000000000000000000076ACB0B1B1B1B1B1ACACACACB1B364000000000000008CB2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A81900000000000000A8A8A5A7A7AAACACACB1B3B5B5900000000000000065B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C16F000000000000009BC1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5AE110000000000000000000000000A3C5F7B78A794787A4C280000000000000000000000000028C8CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADA4F00000000000000D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8AE11000000000000000000000000093556726F99886D6D44240000000000000000000000000024B1B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C16F0000000000000000000000002657729C999797836941160000000000000000000000000000000000001DC1BFC0C0C1C1C1C1BFBFBFBFBFC16D0000000000000099C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BF9B03000000000000000000000000092C4C6C697790676969411C000000000000000000000000000FA7C0C0C0C3C3C3C4C5C6C9C9C9C9C8C81E0000000000000000000000000010264A7878779C9C77766D49280400000000000000000000000077CECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBF30020202020202020201010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E3E3E2E1DFDCD9D7D9D9E3F6D0C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C10900000000000000035B98C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B95200000000000000000000002978AAB8B8B5B6B6B9B8B6B6B6B2B69C4D0E000000000000000000000083BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C57A0000000000000000000000156CABB9B9B9B9B9BDBDBFBFC1BF97450300000000000000000009A3BBBBBFBFBFBCBCBCBBBDBDBF6F000000000000009FC6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C41F00000000000000C5C6C9C9CBCECECED1D3D1D3D4AA0000000000000078D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D47C00000000000000ABD6DADADADADBDBDBD9D9D9DBDCDFDFD51A000000000000000000000451A8DEE1E1DFDFDCDCDCDCDFE1D7962C000000000000000000000041E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E15400000000000000D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1C91200000000000000000000044AA5CECECED0D0D4D0D0CECECAC37C2600000000000000000000003DC1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB883000000000000000000000856A2B0B0ACABABB0B1B1B1B2B69C56080000000000000000000000000000001AACACACACACACACACAAAAAAA7A7A75E0000000000000080A3A5A5A3A3A1A3A3A3A7A7A7AAA8AA940D0000000000000000000007457CA19C9B9C9E9E9C9C9C9E9E9E9E652A00000000000000000000001FAAA8ACACA8A8A7A7A7A7ABA7A7AA600000000000000000000000184E87A7A8ACACACACACB0B2B2B2B2B0B08145080000000000000000000290A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B52E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C1C4C4C1BFC3C3C6C6C6D0E4BFACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8000000000000000081ACACACABABABABA8A8A8ABA8A8A8A8A8A8A884000000000000000000002997B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B167080000000000000000000FB3BDBBBDBFC1C1C1C1C1C1C3C4C4C4AA030000000000000000000978C5C8C8C5C6C9C9C9C9CED0D0CECECECEB5300000000000000000003BD0D3D0D1D1D3D0D0CECECBCA7500000000000000AAD3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D12100000000000000C8C6C9C9C9C9C9C9C9C6C8C9C89F000000000000006FBFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBC6D0000000000000098C1C1C1C1C1C1C4C3C5C5C5C6C9C9C92E0000000000000000000041ACBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0901D0000000000000000000054C1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBD4300000000000000BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C32C0000000000000000000049ABB9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C093160000000000000000000061C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0B60400000000000000000051C6D0D0D3D4D1D0D1D0D0CECECED0D1CEC65C040000000000000000000000000020D0D1D1D0D0D0D0CECACAC9C8C5C975000000000000009CC4C1BFBFBBBFC0C0BDBBB9B9B9B8B92A000000000000000000035FACB3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8902B0000000000000000000055A3A5A5A5A8ABABABABAAAAA7A2080000000000000000001F7AA5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A15808000000000000000034ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD5D5D3D1D1D3D1D3D0CED6EEC9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6A70000000000000028B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFB61600000000000000000472C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDAE3B0000000000000000004ABCC0C0C0BFBFBBBBBBBFBFBFBCBC2B00000000000000000026B5C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C34600000000000000000093C4C6C6C8C5C5C6C4C5C5C67600000000000000A7D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D62200000000000000D4D4D4D4D4D4D4D4D6D6D4D6D6AE000000000000007ED9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDC8300000000000000B5E1E1E1E4E2E2E2E4E4E3E2E2E4E28600000000000000000014A1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D16700000000000000000000A7D1D3D0D3D0CECECECECED0D0D4D0D0CE4A00000000000000C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1700000000000000000000F94B8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABAB54000000000000000000039BB6B6B2B2B2B2B2B2B1B1B1B1B1ACACAC2F00000000000000000275A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7820D000000000000000000000000189F9F9F9F9FA19C9B9C9E9E9C9C9C58000000000000007EA5A5A7A5A5A5A5A7AAAAA8ACACA85F0000000000000000001F90A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B27D03000000000000000003A5B3B1ACACAAA8A7A7A5A5A86700000000000000000361ACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9AC240000000000000000A8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B830020202020202020201010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9D7D4D3D0D4D5D5D3D1DAEFCAB8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1AC880000000000000039A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8AB5A0000000000000000027DABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A34700000000000000000297A5A7A7A8ABACB0ABA7AAAAAA7E0000000000000000001FA2AAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0AC3E000000000000000020ACACB1B2B2B5B5B8B8B8B3670000000000000094B9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBB1C00000000000000B5B1B2B0ACB1B3B1B1B1B1B2B18D0000000000000064B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A55E000000000000007EA1A19E9E9E9F9FA3A29F9FA2A5970200000000000000000D8DA3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA77603000000000000000014AAACACB1B3B1B2B1B1B5B5B3B8B6B6B23E00000000000000B8BBB8B8BBBBBBB8BBBDBDBDBDC1A703000000000000000018B5CED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D38C04000000000000000018D0CED0D0D3D0D3D3D3D4D4D4D4D4D38F0000000000000000049FD0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBB51100000000000000000000001DC1C0BFBDB9BDB9B9B8B6B9B6B2B6670000000000000093BCBCBCC0BDBFBFBBBBBBBBBBB9B208000000000000000025B9BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9A20F00000000000000004AB9B5B3B3B6B8BBB8B8B5B628000000000000000389B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9B51C000000000000005CBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C93502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6C6C9C9C8C9C6C6C6C4C1CAE3C0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0AC88000000000000005FB5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0AC9D0800000000000000006DA7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBC6D00000000000000004CC1C0C0BCC0BCBCBBBBBDBDBD16000000000000000015ACB3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3AC2300000000000000008CBCBCBCBCB9BCBCC0C3C3720000000000000097BCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C11E00000000000000CACACACACED0D0D0CECACECACAA20000000000000074C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6720000000000000098C3C1C3C1C1C1BDBBB9B6B3B3B84100000000000000000FA5B9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACAC840300000000000000005FB2B2B6B3B3B1B1B1B1B1ACABABABAB3B00000000000000B0B2B3B3B2B5B5B5B2B2B1B0ACB13600000000000000000FA2B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B58700000000000000000076BDBBBBBBBBB9B9B9B9B9BBB8BBBD16000000000000000081C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B19B0E000000000000000000001BACB0B0ACAAACB0B1B1B1B1B1ACAC61000000000000008DB3B1ACB1B2B5B6B6B5B2B0B0B05A000000000000000019A5ACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACAC9F0E0000000000000003A8B5B3B2B5B6B6B3B3B1A800000000000000006FB8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C39B000000000000002EC8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D43702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7D7D5D1D5D7D6D4D3D1DAEFCAB9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBC98000000000000006AB8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B96400000000000000003FB6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BF440000000000000003BFC9C5C5C3C1C1BFBCBBB98800000000000000000393B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFAE03000000000000003DC3C3C6C3C6C4C4C8C6C472000000000000009CC4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C91F00000000000000D3D4D4D1D3D3D1D4D0D0D0D0D0A7000000000000007CD1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DA8000000000000000AEDBDCDFDFDCDCDADAD7DBDBDBB9000000000000000004B3DFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E28800000000000000000AD7DEE1E1E3E3E1DFDBDAD7D4D4D4D74F00000000000000D1D1D1D1D1D1D1D1D1D1D0D0D1B1000000000000000004B0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C067000000000000000008B9BCBCBBB8B9BDBDBBBBB9BBBB72000000000000000043ABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1830000000000000000000019A7A7A7A7A3A19EA2A2A3A3A3A3A55D0000000000000082A7AAA8AAAAAAA7A5A39F9FA39F060000000000000002899E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACAC93080000000000000049AAA7A7A7A5A7A7ABA7760000000000000020ACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A81900000000000000B1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B22D01010101010101010102019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8C9C9CACAC9C9C9CACAD7EEC9B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBC940000000000000072C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8150000000000000003A5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACE1F0000000000000075C9C8C8C9C8C8C6C9C9C94000000000000000004DC4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C16D0000000000000003B5BCB9B9BBBDBDBDBDB96A000000000000008DB3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B31A00000000000000ABABABAAACACACB0B0B0B0B0B28D0000000000000064B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B969000000000000008FB5B6B9BCBCBCBCBCBDC0C0BD4A00000000000000006CB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B93200000000000000005DB3B3B3B1B5B1B0B0B0B0B1ACB0B03D00000000000000B1ACACACACB1B3B1B1B1B1B3B336000000000000000064B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A82D000000000000000061ACB1B3B5B5B6B9BCB9B8B8B522000000000000000EAAB1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3560000000000000000001EC3C1C4C4C4C5C8C8C5C6C9C9C9C97700000000000000A5D0D3D3D3D0D1D0D0D1D1D0D381000000000000000051CACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDB920000000000000012D1D1D0CECECECEC9C8610000000000000082C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B84100000000000000A3B9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBB3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DBDCD9DBDEDEDEE2E3E6ECFBDBCECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C99F0000000000000072C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C49E000000000000000051C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1A2000000000000002CC1C1C0C0C0C1C1BFC0B6030000000000000003AEBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C516000000000000007EC1C4C1C3C5C3C4C6C874000000000000009EC6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACA2000000000000000D0D0D3D3D1D1D0D0D0D0CED0D0A50000000000000078D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B96D0000000000000097C0C0C1BFBFBFBFC1BFC0BFB603000000000000001DB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6A7080000000000000015B2B6B2B2B2B6B9B9B8B5B5B8B9BB4300000000000000C1C3C6C4C6C9C5C5C3C1C1BFAC030000000000000023B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFA703000000000000001EC3C6C3C6C4C4C8C6C4C4C5AC00000000000000007BC6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9C40A000000000000000021D3D3D1D4D0D0D0D0D0D0D0D0D0D37A00000000000000AAD6D6D7DBDBD7D4D4D4D3D4D4320000000000000004C6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDE3F000000000000009FDFE1DFDCDCDFDFE15300000000000000DBE4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D74F00000000000000A7D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D9DCDCDADBD7D7D5D6D6E3F6D3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B38D0000000000000064B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B24D000000000000000097ACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A72500000000000000969F9FA3A5A39F9F9F670000000000000000359C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7650000000000000033A5A7A7ABA7A7A7A7A75C0000000000000088B0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B11B00000000000000ABACB1B1B2B2B1B1B1B1B2B3B18D0000000000000069BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6690000000000000090B9B9B9B5B5B5B9B9B9BCBB7300000000000000008CBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B05C000000000000000087ABAAAAAAAAAAA8A8ABA8ABB0AC3D00000000000000B5B5B5B5B5B5B3B3B1B2B1B16400000000000000007EB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB94A000000000000000097BFBFBFC1C0C0BCC0BCBC520000000000000015B9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B35800000000000000001DB9BCBCBCBCB9BCBCC0C3C3C5C5C5720000000000000094BCBCBBBDBBB8B5B5B5B8B8B103000000000000003ABFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACA9B0000000000000057C9C9C9C9C9C8C8C51E0000000000001DC3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B83A0000000000000086BDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D4D1D3D4D0D1CED1D9EBC6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3980000000000000072C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECE18000000000000002FCBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C19E6E6D6D6E6E6F6EB2C3C3C3C0C0C1BFBB49000000000000000090B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8080000000000000FBBBFBFC1BDBDBCBDBD6D000000000000009CC6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C51E00000000000000C8C5C5C5C5C5C1C1C1C4C1C3C398000000000000006DBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1640000000000000087A8A8A8A8A8ACABA8AAA8A52C0000000000000018A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A39F020000000000000045A5A5A7A3A7AAACB1B0B1B1B5B53F00000000000000B3B3B5B6B5B5B8B9B9B6B5B529000000000000001DBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6B6040000000000000061C6C9C9C9C6C4C1BFBCBC1D000000000000005CBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8AA00000000000000001CB8B5B5B5B5B2B2B5B8B9BBBCBCB967000000000000008CB0B0B0B1B1B1B2B2B1B2B577000000000000000083BBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBF766E6F6F6F727081C5C9C8C8C6C5C5C63E1F1F1F1E1F1F40C8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C1090000000000000082C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9DEDEDFDEE1DFDEDBDBE6F7D5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C99E0000000000000070C5C9C5C5C3C5C5C8C9CACAC9C9C6C9C4000000000000000060C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C31E0000000000000010C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C63F00000000000000B1C9C9C9CED0D0D1D07800000000000000A5CACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D02100000000000000C6C4C1C1C1C1C1C1C0BDC0C1C197000000000000006DBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBD6A0000000000000093B9BBBBB9BDBDBDB9B9BCB903000000000000005FB6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1450000000000000010C1C1BFBCBBB9B8B6B9BCBBBBB94100000000000000BFC1BFBFC1BFBFBFBBBBBCB900000000000000006DBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C63F000000000000001FC5C5C5C4C4C6C6C8C5B60000000000000000B5CECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3320000000000000021D4D4D3D4D4D4D4D4D4D4D4D6D6D47C00000000000000B0D9D9D9DBDCDFDFDCDCDADA610000000000000004DEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECE650000000000000000A2CAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B32D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D7D7D3D7D7D1D3D3D3E1F4D3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C49E0000000000000074C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9990000000000000000A5CBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C100000000000000003BBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0904343434343434199B6B9B9B8B9B9B9B96C0000000000000094B9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B81A00000000000000BFBFC0C1C1C1C3C6C4C6C9C5C59B0000000000000067B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBF6C0000000000000094BBBDBDBFC1C3C3C6C3C69C0000000000000000AEC5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6900000000000000000C3D4D4D1D3D3D1D4D0D0D0D0D04C00000000000000D4D1D4D3D4D4D6D6D7DBDBA50000000000000000C5D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDC970000000000000000D7DCDCDCDCDFE1DFDC96000000000000001CE2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4740000000000000022D4D1D1D1D1D1D1D1D1D1D1D0D0D17A00000000000000A5CED0D0D4D0D0CECECACAC82E000000000000002EC6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19E540000000000000000008CA3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A529010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFD0D0CFD0CECBCECED1D7ECC9B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C49B0000000000000072C4C4C1BFBFBBB9B9BCBCB9BCBCBCBB6B0000000000000003C0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C19C00000000000000006FBFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C67500000000000000A2CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D12000000000000000C6C8C9C9CAC8C8C9CBCBD0D1D1A50000000000000074C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B968000000000000008DB5B3B6B3B1B1ACACB1AC5A0000000000000013A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5020000000000000075A7A7A7A7A5A3A5A5A7A3A5A73900000000000000A5A5A7A7A8ABACB0ABA7AA51000000000000001FA7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0A7000000000000000087B8B8B8B3B3B8B9BC53000000000000004DB5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B68F000000000000001AB1B1B1B1B2B1B3B6B6B5B5B2B1B1640000000000000089B1B2B2B5B5B1B2B2B3B1B10E0000000000000050A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B685210000000000000000000FB8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D33802020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7B0AEAEB2AEB2B1B1B6B9C4DAB6A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B18F0000000000000064B5B2B2B2B5B8B8BBB8B8BBBBBBB8BB53000000000000001EC5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3970000000000000000AAD4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBD6A000000000000008DB6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC11E00000000000000B9B9B9BBBBBBBBBCB9B6B6B9BC940000000000000069B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6670000000000000092B8B6B9BCBCBFBCBBB9BB410000000000000043B9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C125000000000000005FC0C0C0C3C0C3C5C4C4C1C3C64800000000000000C9C9CBCECECAC9C9CAC9C8400000000000000052C9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C01E000000000000006CB9B9B8B6B8B8B8B82A000000000000006EB3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBF000000000000001DBCBFBFC1C1C4C6C4C6C6C4C4C3C472000000000000009BC1C3C1C1C4C4C8C8C8C6C600000000000000008FC9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A572450C0000000000000000000000369A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B32C010101010101010102010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFCBCECECFCFCECFD1D0D7ECCAB9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C094000000000000006DC1C0BCB9B8B8B3B3B3B8B9B9B8B8B63F000000000000003FB5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A75C000000000000000097A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBF6D000000000000009FC8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C81F00000000000000CAC9C9C6C6C3C3C5C8C8C8C8C89F0000000000000077CBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C974000000000000009CC1C1C0BDBCBCBFBFBFC1250000000000000076C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C64E0000000000000045C1C1C0C1C1C0C0C0C1C1BFC04300000000000000C0BFBFBFBDBDBDC0C0C0C11D000000000000006FC1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8470000000000000047C6C6C9C6C8C9C9C91800000000000000A5CBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCE1200000000000020CECBCBC9C6C4C1C1C1C1C1C1C0BD6E0000000000000093B9B9BDBFBFBDBDBDC1BF9D00000000000000009DC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6936A380400000000000000000000000000009BB9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C63202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6C5C5C6C6C8C6C8CAD1E7C6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B28D0000000000000067B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5230000000000000052BBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAA580000000000000000ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1640000000000000090BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBD1D00000000000000B5B3B3B3B6B6B3B5B5B5B5B8B9900000000000000064B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C16D0000000000000094BBBDBBB8B5B5B5B8B8B815000000000000008CBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9740000000000000026C9C9C8C8C5C3C5C3C1C4C4C44500000000000000C6C5C5C4C1C1C1C1C0C0C3100000000000000090B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1610000000000000032B8B3B3B5B5B6B2B20000000000000000ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B21A0000000000001CBBBCBCBCBCBCBDB9B9B9B9B9B9B9690000000000000090B9BCBCBCBCBCBDC0C0BD940000000000000000BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B19D754D200300000000000000000000000000000000004BABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B12C01010101010101010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9D7D9DBD9DADBDCDEDEE6F8D7C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBC94000000000000006DBFBCBFBFBCBCBCBDBDBDBDB9B9B9B61C0000000000000022404040404041414141434341413F40403F3F3F3F3F3F3F404141434341403F3F3F3F3F3F3F3E3D3D3D3EB1B1B2B2B1B2B5400000000000000016BBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C57200000000000000A2C8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC91F00000000000000C6C6C8CAC8C9C6C9C5C5C5C8C59C000000000000006BB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C06D0000000000000094BFBDBDBDC1C3C4C8C5C500000000000000009CC5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECE8B0000000000000020CACAC9C9C9CACAC9C8C8C9C94700000000000000C6C9CAC9C8C5C5C5C6C6C90000000000000000ABC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B667000000000000001CB9B6B8B8B9B8B5A20000000000000000B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABAB1900000000000018A8ABACACACACACABACB0B1B1ACAB61000000000000008CB3B3B2B2B2B1ACACB0B18C00000000000000003B3B3B3D3D3D3D3E3E3E3D3D3D3E3D3D3D3E3E3E3F3E3D3B3B3D3D3D3D3B3B3D3B3B3D3D3D3D3B3B3B3B81B1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0AC996944260800000000000000000000000000000000000000000022B1B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBD3002020102020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C9CECFD0D4D6D7DAD7E4F6D5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACAA20000000000000075C9C9C9C9C8C8C5C3C5C3C1C4C4C4C11E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B3B3B3B3B2B2B13E000000000000001AB8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1640000000000000092B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBC1D00000000000000BBBBBBB9B9B9B9B9BBB8BBBDBD97000000000000006FC4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1670000000000000089B0ACAAACB0B1B1B1B1B10000000000000000A2B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8840000000000000019A8A8A5A7A7AAACACACB1B3B53F00000000000000B3B2B5B6B6B3B3B1B1B1B10000000000000000B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C89F0000000000000020D0CECECECECED0A50000000000000021D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D63D00000000000023DBD9D9DBD9D6D3D6D3D1D1D1D0CE7700000000000000A2C9C9C9C9C6C8C9C8C8C49C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9AC6B3308000000000000000000000000000000000000000000000000002CB9BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B92F02020202020101010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D3CFCED1CFCACECACED9ECC9B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B893000000000000006FC1C1C3C6C4C6C9C5C5C3C1C1BFBCBB1C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4C4C8C6C4C4C547000000000000001EC6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D07800000000000000AAD1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DA2200000000000000D9DBDCDFDFDCDCDADAD7DBDBDBB00000000000000084E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E48600000000000000B2DFDEE1E1E3E3E1DFDBDA0000000000000000D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECEA20000000000000009C6C3C6C6C5C5C1C1C0C0C0C14500000000000000BCC0BCBCBBB8B9BDBDBBBB0000000000000000B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACAC880000000000000018A7A7A3A19EA2A2800000000000000017A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C2300000000000017A3A5A5A7A5A5A5A5A7AAAAA8ACAC5F0000000000000083AAAAA7A7A7A5A7A7ABA783000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061B1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B1682A0000000000000000000000000000000000000000000000000000000357B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B52C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8F9F9F9FCF9F8F9FCF9FCFFE7E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7AC000000000000007AD1D1D1D1D1D0D0D1D1D3D0D3D0CECE200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BBBBB9B6B6B3B33E000000000000001AB1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A55B0000000000000082AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E1700000000000000A5A7A5A5A5A5A7AAAAA8ACACA8840000000000000060AAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B064000000000000008CACACAAA8A7A7A5A5A8AA0000000000000000ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5900000000000000000B2B2B3B8B8B6B6B6B6B6B9B94100000000000000B9B9B5B5B5B9B9B9BCBBBB0000000000000000BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACAC870000000000000019AAAAAAA8A8ABA8870000000000000019B0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7190000000000001AB1ACACB0B1B5B1B5B8BBBBBBB9BC6B0000000000000097BFBFBFC1C0C0BCC0BCBC9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006BBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFAE4A03000000000000000000000000000000000000000000000000000000034EB6C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C33202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9D7D4D3D0D4D5D5D3D1DAEFCAB8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1AC88000000000000005DA3A3A1A1A3A5A5A7A3A3A3A3A3A5A51F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002A7A8ABACB0ABA7510000000000000018A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3670000000000000094B9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBB1C00000000000000B5B1B2B0ACB1B3B1B1B1B1B2B18D0000000000000064B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A55E000000000000007EA1A19E9E9E9F9FA3A29F00000000000000009F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABAB870000000000000014B3B1B2B1B1B5B5B3B8B6B6B23E00000000000000B8BBB8B8BBBBBBB8BBBDBD0000000000000000C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6AB0000000000000020D3D0D3D3D3D4D4AA0000000000000020D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC91F0000000000001DC1C0BFBDB9BDB9B9B8B6B9B6B2B6670000000000000093BCBCBCC0BDBFBFBBBBBB94000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067B3B6B8BBB8B8B5B6B3B6B5B8B8AA47030000000000000000000000000000000000000000000000000000001661ACBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C93502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CECFCFCECFCFD1D3D4D4E1F3CFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBD970000000000000072C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020D3D1D1D1D4D1D47B000000000000001AD4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE18400000000000000B5DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDE2400000000000000DBDAD7D4D4D4D7DAD6D4D7D7D7AC000000000000004CD1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C575000000000000009CC1C1C0C0C0C1C1C3C0BD00000000000000009CB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B68D000000000000001BB1B1ACACACACACACACACAAAA3B00000000000000A2A2A3A3A3A3A5A5A3A3A10000000000000000A2AAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5740000000000000019A8ACACA8A8A7A783000000000000000DA7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B31A00000000000018A5A5A8AAABB0B1B1B0ABACB1ACAC61000000000000008CB1B1B2B3B1B2B5B2B2B69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006BBBBBBBBBBBBBB8B8B5B8BBBB7C0900000000000000000000000000000000000000000000000000000E4C88ACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA829010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DADBDCD9DBDBDBE1E1E3EFFBDBD1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1AA000000000000007EDBDBD7D4D4D4D3D4D4D4D4D4D4D4D44D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024E1E1E1E1E4E2E2900000000000000000E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D07700000000000000A7D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBD1D00000000000000B8B9BDBDBBBBB9BBBBB9B6B6B38D000000000000003EB1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACAC610000000000000082A3A19EA2A2A3A3A3A3A5020000000000000082A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA25C0000000000000018A5A7AAAAA8ACACA8A8A7A7A73A00000000000000A7A5A7A7ABA7A7A7A7A7A3000000000000000089B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1AC61000000000000001BB1B1B1B2B3B1B28F0000000000000000BCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BB000000000000001AB5B5B9B9B9BCBBBBBBBBBBBBB8B8670000000000000098BDB9B9B8B8B6B2B6B6B6B2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075B3B1B2B1B1B0B0ABABB0AC6900000000000000000000000000000000000000000000000003295D97B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB12C01010101010102020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0BFC0C4C4C5C5C6CAC8C8D1E7C6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAA86000000000000005AA2A3A3A3A3A5A5A3A3A1A3A3A3A7A75E000000000000001E5A5A5B5D5B5A5A5A5A5A5A585658585858585858585858585A5C5A5B5D5D5E5D5D56000000000000002DA8A7A7A7A7ABA7830000000000000000A3A7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABAC640000000000000075B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B51A00000000000000B2B3B8B8B6B6B6B6B6B9B9BBB994000000000000003FB5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B665000000000000008FB1B2B2B0ACACB0B0B0B0190000000000000067ABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B05C0000000000000034B0ACACAAAAA8A7A7A7A7AAAA3B00000000000000B0B1B5B1B5B8BBBBBBB9BC1D0000000000000086BFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B550000000000000003DACB1B1B1B3B5B68D0000000000000000BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8A1000000000000001CBBBBBFC1C1C3C1C3C3C5C9CACAC97500000000000000A5CECACECACACACBCACACACA040000000000000075767676767474727072706F7272726F70727270727272727272726F6F6F6F6E6E70250000000000000090B3B3B8B9BDBCBCB9B9BB9E0300000000000000000000000000000000000000000E2F5A80ACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B830020202020202020202020199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5DFE3E3E3E3E6E3E6E6E2EFFCDACBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAA10000000000000076CBCBCBCBCBC9CECBC9C6C6C6C4C4C483000000000000002CC1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B88F000000000000003FB1B2B2B2B5B8B6AA000000000000000090B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1640000000000000061B0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB11A00000000000000ACACACA8A8ACABABACB0B0ACAB870000000000000022B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B265000000000000008CB1B2B3B3B3B3B3B3B8B330000000000000004FB1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BC3B0000000000000041BDBDBBBDC0C0C0C0C1C1C5C54600000000000000BBBFBFC1C1BDC1C1C1BFBD24000000000000005CBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0350000000000000053BCBDB9B8B3B3B8B2000000000000000090B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC190000000000000001EC5C5C3C3C0BDBDC1C1C1C1C0BFC17200000000000000A1C9C9C9C9C8C8C9C9C9C9C91F00000000000000A3D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDC4000000000000000D0DCDBDBDBDBDBDADBD9D92A00000000000000000000000000000000133E6D9AC3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5CAC6C6CAC9C9C5C6C6C5D0E2BCABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0AC8C0000000000000065B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9A20000000000000008B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC177000000000000006AC5C6C6C3C3C1BFBF080000000000000065B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5650000000000000041ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AA1900000000000000B9BCB9B8B8B5B3B2B5B6B6B3B38C000000000000000EB2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C370000000000000009FC8C5C6C9C9C9C9CED0D05C000000000000003CD3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3190000000000000080DBDBDBDBDBD9D9DBD9D6D3D64D00000000000000CEC9C8C6C9C9C9C9C9C9C94E000000000000003EC4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBF100000000000000077C1C1C1C1C1C4C3C5000000000000000081C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C15F000000000000001DBDC1C1C1C1C4C1C1C1C1C1BFC1C06D000000000000009BC1BFC1C1BFBFC1C1C4C4C4460000000000000063B9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C91700000000000004C3C4C6C6C9C9C9C9C5C8A700000000000000000000000000185188BFD0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B92E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADEDEDBDBDEDFE1DEDBE6F7D5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBB920000000000000065B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B008000000000000008CA8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A993A00000000000000759E9E9EA1A2A2A3A525000000000000002BA5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC06E0000000000000025C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C91F00000000000000BCBCB9BDBBBBBFBFBFBFBCBFBF940000000000000000B2B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5670000000000000094BCB9B6B3B5B5B5B2B5B3750000000000000008B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9AE000000000000000094BCBFC0C0C1C1C1C5C3C3C5C94700000000000000C6C8C5C8C8CAC8C5C8C4C3780000000000000009C0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5AC00000000000000009EBDBCB9B9B9B9B8B81C0000000000000054C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C82D000000000000001EC5C5C5C5C3C3C6C6C6C6C4C6C6C97600000000000000A3C9CBCAC9C9CAC9CEC9CECE6E0000000000000039CBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C10000000000000028CBC9C6C6C6C4C4C4C5C35F000000000000000000001C6CA2B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A72A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D9DADBDADBDCDAD9DBDBE4F7D4C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C59E000000000000007BD1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D030000000000000005FD3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDB2B00000000000000CBDCDADAD7DBDBDBDB6F000000000000000ADFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1D0B5B5B5B2B3B2B3D5E1E1E3E3E1DFDBDA7E0000000000000004D0D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D02000000000000000C8C8C5C9C5C6C6C3C6C6C5C5C19B00000000000000007CBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABAB54000000000000008DB2B6B9B6B6B2B2B2B2B29C000000000000000078ACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AA5F0000000000000002A3A5A39F9F9F9F9FA19C9B9C9E36000000000000009EA2A3A2A3A5A5A7A5A5A588000000000000000083A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2560000000000000008B3B3B3B1ACACAAA8A73A0000000000000021B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCB503000000000000001CB5B5B5B8B8B5B5B5B2B2B3B8B8B6670000000000000094BBB9B9B8B9B9B9B5B5B5B9920000000000000003B1B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACAC7B0000000000000044ABABABABABAAAAAAAAAA1F0000000000000000147EABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBD30020202020101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CECFCFCECFCFD1D3D4D4E1F3CFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBD970000000000000072C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C66A0000000000000010C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1C40000000000000018D0D3D1D1D1D4D1D4D3AA000000000000000098D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDF5A00000000000000D3DCE1E1DFDEDEDEE1840000000000000000A2DCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDE1400000000000000DBDAD7D4D4D4D7DAD6D4D7D7D7AC00000000000000004CD1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C548000000000000009CC1C1C0C0C0C1C1C3C0BDBD0F0000000000000040B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B61B0000000000000030B1B1B1ACACACACACACACACAAAA3B00000000000000A2A2A3A3A3A3A5A5A3A3A1A30D0000000000000041AAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A313000000000000002DAAA8ACACA8A8A7A7A75800000000000000009FA7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B16E000000000000000018A5A5A8AAABB0B1B1B0ABACB1ACAC61000000000000008CB1B1B2B3B1B2B5B2B2B6B8B808000000000000006FB8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B851000000000000007ABCBBBBBBBBBBBBB8B8B50F000000000000001DB2B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA829010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D5D5D0D1D0CFCECECED9ECC9B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B087000000000000005FAAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A38D000000000000000072999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A75C000000000000004FB5B5B2B5B3B3B3B1B1B3080000000000000038B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C61600000000000004C8C4C4C4C6C6C8C9CE77000000000000000038C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9AB0000000000000000B9B9B5B6B6B6B8B8B9BBBBBBBC94000000000000000003ABB2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B21A0000000000000093BDBBBBBBBBBCBDC1C3C6C4560000000000000004B6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C496000000000000000074C4C3C3C3C3C3C1BFC0BDBDC0C34700000000000000CACAC9CAC9C9C9C9CACACBC9510000000000000009BDC5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C190000000000000000080C0C0BDBFBDBDBDC0BF9D00000000000000007CC5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCB2800000000000000001FCEC9CECECECED0CED0CECACECECB7700000000000000A2C8C8C9C9C8C8C4C6C9C8C4C83F0000000000000026C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBC0800000000000000A8B8B6B3B3B6B6B6B6B6B600000000000000009BB8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1AC2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D0D3D0CFD1D4D0D1D3D6E4F6D0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C19B000000000000006DBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C11D0000000000000015B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C617000000000000008DC3C4C6C6C9C9C9C9C5C8500000000000000000ACC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9B10000000000000026C8C9CBCBD0D1D1D0D078000000000000000000A8C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B878000000000000000EB3B6B3B1B1ACACB1ACACB1ACAB8400000000000000000056A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5000000000000000083A7A7A7A7A7A5A3A5A5A7A381000000000000000040A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0210000000000000003A2B1B1B0B0B0ACB1B2B1B1B0B0B03D00000000000000B5B5B8B8B8B3B3B8B9BCBCBB88000000000000000061B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1220000000000000003A2B1B2B1B3B6B6B5B5B2B10E0000000000000021B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A57A00000000000000000018A29F9FA2A5A5A29F9F9E9F9EA2A35F000000000000007A9B9B9F9B9F9E9EA2A3A7A7A775000000000000000067ABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B871000000000000002ABDBDBDBDC1BFC1C1C5C5C50000000000000020D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D64D4E4D4C4C4A4C81D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCB3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D3D3CECFCFCECECECED6EBC5B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5900000000000000064B1B1ACABABABABAAACACACB0B0B0B0B0B26700000000000000006AACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B972000000000000000EB5B6B9BCBCBCBCBCBDC0C09E000000000000000032BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBC490000000000000046B1B1B1B3B3B3B1B5B1640000000000000000002FB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B54D0000000000000019ABACACACABACACACACABABABAB8400000000000000000008A2A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B37B00000000000000008DB5B8B8B9BCB9BBBBBDBBBDBF1D0000000000000003ACC1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECE88000000000000000042D0D1D1D0D3D0D1D1D3D0D0CECECB4900000000000000D1D4D3D4D3D3D0D3D3D4D4D6D61A0000000000000004BFD9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C984000000000000000045BFBFBFBFBFBCBCB9BBBBBB52000000000000000088B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5260000000000000000001DBBB9B9BCBCB9BCBCBCBBBCBDBBBB6B0000000000000098C1BFC0C0C1C1C1C1BFBFBFBFBF100000000000000016B9C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0160000000000000067B6B9B9B9B9B9B9B9B9B9B6000000000000003CC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9B90000000000000070CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D03602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E9E7EAE9EAEBEAEBECEBF4FFDFD4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0A30000000000000077CBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB203000000000000000397B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1B60F0000000000000051BBBBBBBBBCB9B6B6B9BCBCBC24000000000000000078BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6AE080000000000000078B8B6B9BCBCBFBCBBB96C000000000000000000007BBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBF09000000000000002CBFC0C0C0C3C5C3C0C0C0C3C0C39C0000000000000000000047C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8470000000000000000C3C3C1C1C1C1C3C3C3C3C3C0C16F00000000000000002CC3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8A80F000000000000000086B2B2B1B2B3B3B3B5B8B6B8B3B3B84100000000000000BDBCBDBDBFBCBFBFC1C1C4C6C46A000000000000000035C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9B009000000000000000099C3C3C0BDBFC0C0C0C0BDBD9E000000000000000023B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0640000000000000000000019A5A5A5A7A8A8A5A5A3A3A3A3A3A35B000000000000007B9A999997979796979B9B9E9E9E4B000000000000000035A8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3670000000000000003A5B5B5B5B5B9B9B9B9BCBCBC0900000000000024BCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CE8A0000000000000097C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBB30020201010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9D7D5D5D4D3D3D0D4D4E1F4CEC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBC94000000000000006CB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C15F000000000000000015ACB3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B83A0000000000000003ACB8B8B8BBBBBDBFC1C1C1C1C390000000000000000003A5BDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9480000000000000004C8D1D4D6D7DADBDEE1E1840000000000000000000004C4DFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE18B000000000000000058D9DADAD6D4D4D4D4D6D4D7DBDBB000000000000000000000007AD1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5AB03000000000000000FBDBDBDBDC0C0BDC0C0BFC1C1C1C116000000000000000056C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C52600000000000000002CC4C6C9CBCECEC9C9C9CBCBD0D0D3D34D00000000000000CECBCBCBCBCBD0CBCECECECED0C90A000000000000000065D0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D02B00000000000000004AE2E4E3E1DFDCDCDCDCDFDCDBDB2B000000000000000077DEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3C0040000000000000000000025E2E4E4E4E4E2E2DFDCDADADADADA8100000000000000AED7D7D4D1D0CBCBC9C8C8C6C5C5BD09000000000000000072C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA88902000000000000003D9E9FA2A2A2A29F9F9E9E9E9B1D000000000000079E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A72C00000000000003AAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C33202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFD1D1CECAC9C9C9CAC8D5E9C1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBB940000000000000072C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCB509000000000000000026B9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C365000000000000000050C4C8C8C9CACACAC9CAC9C9C9C9CA27000000000000000011AEC9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B97B000000000000000034C1C1C1BDBFBFBFC1C1C16E00000000000000000000000FA5BDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6AE0400000000000000007DCBCBCBCBCBC9CBCAC9C9CAC9CEA20000000000000000000000047FCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C927000000000000000038CBCBCBCBCBC9CECBC9C6C6C6C4C4780000000000000000006FC1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B84000000000000000000093B0B1B0B1B2B2B1B2B2B2B5B8B6B9B63F00000000000000B8B6B2B5B8B8B9B9B5B5B2B2B0AC690000000000000000005EA8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1AC2200000000000000000090AAAAAAA7A7A7AAABA8ABACACAC8100000000000000000381B1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACAB960D00000000000000000000001AB5B1B1B5B1ACACACB0ACACB1B0AC64000000000000008DB2B2B3B3B1B1B0B1B2B1B1B2B3B35F00000000000000000068B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9A10F0000000000000000A5BBB9B9BCBFBFBDBDBDBBB9B94A0000000000000076C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBD860000000000000033BCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B82F010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E1E2DFDEDCDCDCE1DEE1E7F8D5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBC93000000000000006FBDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBF6D000000000000000000109CC5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCB51000000000000000004B9CAC9CEC9CECECECED0CED0CECACEAC0400000000000000001197C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C68D0400000000000000009BC9C6C6C6C4C4C4C5C3C36F0000000000000000000000000E87B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9AE23000000000000000000A2B2B2B1B2B2B2B5B8B6B9B6B2B6920000000000000000000000000058B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACAC5300000000000000000061ACABABABACACB1B1B3B3B2B2B2B1AC260000000000000000004EAAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1AB2800000000000000000043ABABACB0B0ACABABABABACB1B2B6B6B53F00000000000000B5B1ACACACB0ACACB1B0ACB0ACACAC1A0000000000000000005DB0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5A52200000000000000000050B9BBB8B5B6B6B3B5B9B8B8B9BCB9B92A00000000000000000386BDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C39B100000000000000000000000001DC1BFBDBDBDBDBDC0BDBDC0BDBBBC6B0000000000000094BFBCB9BBBBBBB8BBB9BCBCB9B9B9B5160000000000000000004DBCC1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5970F000000000000000048B5B5B5B8B9B9B9B9B8B9B9BBBD7B0000000000000009A8C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC193040000000000000086C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DF3A02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E6E9E6E4E6E6E9EAE9EBF4FDDED6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3AA0000000000000077D0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECE30000000000000000000004DBCC3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2971B00000000000000000064BCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBF5F0000000000000000000051B3BBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B14900000000000000000024B9B5B3B3B6B8BBB8B8B5B667000000000000000000000000000049AAB8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9A2230000000000000000002CBDBDBFBCBCB9BCB9B6B6B6B9BCB993000000000000000000000000000025A0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9C44A00000000000000000000BBC9C9CAC9C8C9C8C9CBCACAC9C9CBC9B10400000000000000000035ABC1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C08A0F00000000000000000015B1B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B34000000000000000B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8960300000000000000000033ACBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C48F1000000000000000000016BDC4C8C8C8C6C6C6C5C5C5C8C8C6C5C8B10400000000000000000056B9C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBB5A03000000000000000000000000001AB1B1B1B1ACACB1B0B0B0ACACACB0640000000000000087A8AAA8A5A5A5A7A8A8A5A5A3A3A3A3800000000000000000000011709997979796979B9B9E9E9E9EA1A2A2A3A59F4E020000000000000000089DA7AAACB1B0B1B1B5B5B5B2B5B3AC08000000000000000EA1B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C064030000000000000009C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBC30020202020202020102010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFE2E3E3E1DFDFE1DFDEEAF8D7CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C19B000000000000006DC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6A10F00000000000000000000034790B8B8B8BBB9B8B5B5B5B3B3B2B27B30000000000000000000001CB9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C42600000000000000000000095FA7C0C0C3C1C3C1C1C4C4C8C8C8AE61090000000000000000000097C5C5C5C5C5C1C1C1C4C1C370000000000000000000000000000000034992B9B9B8B8B5B5B2B5B5B5B5B5A44D030000000000000000000069B0B0ABA8A8A8A8A8ACABA8AAA8A58100000000000000000000000000000000236E979F9E9A999997979796979B945F120000000000000000000035A8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B56F000000000000000000000347A5B5B8B9B9B6B5B5B5B5B5B9B9B9B9943B000000000000000000000397C0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C44500000000000000CBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBC6A000000000000000000000353ACBDBDBDBDB9B9B9B6B9B9B5B9B9B98C2300000000000000000000039CB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBC5A00000000000000000000085CA2B1B1B2B2B1B2B5B6B6B6B6B6AE69150000000000000000000000000000001FC8C8C9C8C6C9C6C3C3C3C3C3C1BD6B000000000000009BC5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5630000000000000000000000257DB9BDBDC0C3C5C5C8C4C8C8C9CABB64090000000000000000000082C6C8CAC8C9C6C9C5C5C5C8C5C5C1C15F00000000000000000361B1B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBF761D00000000000000000064C0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D5D3D4D4D3D4D9D6E1F2D0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5670000000000000000000000000000000000000000000000000040B2B6B9B9BCBCBCBCB9BCBCBC8D030000000000000000000000000F3B6B7B94949494966C503003000000000000000000000003A3BFC1C1C3C1C3C3C5C9CACAC9C9CACACACACEC8110000000000000000000000001848748FA29F9F9E9776481800000000000000000000000046C5C5C3C4C4C6C6C5C5C4C1C16F0000000000000045000000000000000000000F335A72949696969672512A00000000000000000000000015B1B1B1B1ACACACACB1B5B8B8B9B8B38D000000000000003F0000000000000000000003264A6181898989897D5F300800000000000000000000000396B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB951000000000000000000000000306F9BBCBCBCBCBCBDC0C08D5A1C0000000000000000000000007DBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C14400000000000000B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0460000000000000000000000032F6997ACB1B3B1B1B1B1AC8656140000000000000000000000007DA8A8ABACACACABACACACACABABABABA8A8A8AB2D000000000000000000000000204B6B8D97B5B6AA9481582A0300000000000000000015000000000000001AB8B8B9BCB9BBBBBDBBBDBFC1C1C16F000000000000009BC3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C93800000000000000000000000004295F78A7A5A5A7A7967B4C1900000000000000000000000053CED0D1D4D3D4D3D3D0D3D3D4D4D6D6DAD10A000000000000000000043D7BABCAD1D1D1D0CECECEBDA2743F090000000000000000000010BDC4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C13202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7DADEDEDCDBDBDCDADAE1F3CFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B367000000000000000000000000000000000000000000000000003FB1B1B1B1B3B3B1ACB1B2B5B6B6870300000000000000000000000000000000000000000000000000000000000000000000027BAAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B69D0E0000000000000000000000000000000000000000000000000000000000000000000016BFC6C3C3C3C3C1C4C4C4C5C8C87200000000000000A5530000000000000000000000000000000000000000000000000000000000000000009CD1D4D3D4D3D3D0D3D3D4D4D6D6DADAAE00000000000000AE6E00000000000000000000000000000000000000000000000000000000000000000055C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BB40000000000000000000000000000000161D1D1D1E1000000000000000000000000000000072C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBF4300000000000000BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1450000000000000000000000000000001E1E1E1D1E100000000000000000000000000000006CB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCB32400000000000000000000000000000000000000000000000000000000000000004A78000000000000001FCECACACACED0D0D3D4D1D0D1D0D07700000000000000A3C9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1C828000000000000000000000000000000000000000000000000000000000000000000000023B1B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1780000000000000000000000000000000D1918180D0000000000000000000000000000000075A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A72A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD0D1D3CECBC9C8CBD0CBD6E9C6B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5670000000000000000000000000000000000000000000000000045C3C3C3C5C5C3C3C0BDBDC1C1C1C1900300000000000000000000000000000000000000000000000000000000000000000096E1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDAC314000000000000000000000000000000000000000000000000000000000000000012BCD7DBDBDBDCDBDBDCDBD9D6D3D07A00000000000000A2CA4A000000000000000000000000000000000000000000000000000000000000005CC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C49B000000000000009EC6480000000000000000000000000000000000000000000000000000000000000028C1C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCB4A0000000000000000000000000000000000000000000000000000000000000000000078D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E25500000000000000DFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDE510000000000000000000000000000000000000000000000000000000000000000000492E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4B91100000000000000000000000000000000000000000000000000000000000021A561000000000000001AB0ACA8A7A3A3A3A1A19EA1A19E9E5A000000000000007B9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7A21F00000000000000000000000000000000000000000000000000000000000000000020A5ACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBB6A0000000000000000000000000000000000000000000000000000000000000000000056C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACAC9CBCBCB3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9D9D5D6D7D3D5D3D3D6E1F6D0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B868000000000000000000000000000000000000000000000000003EB2B3B3B3B5B8B6B8B3B3B8B9B9B9BB970F000000000000000000000000000000000000000000000000000000000000038BC1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5B6260000000000000000000000000000000000000000000000000000000000000E9CB5B5B5B5B5B2B1B1B1B1ACACB1B0640000000000000084A8A851000000000000000000000000000000000000000000000000000000000034999997979796979B9B9E9E9E9EA1A2A2A3810000000000000082A3A55D00000000000000000000000000000000000000000000000000000000000E9EB5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C167000000000000000000000000000000000000000000000000000000000000000992BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBD4300000000000000B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B958000000000000000000000000000000000000000000000000000000000000000E84B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6AE26000000000000000000000000000000000000000000000000000000002EC0C672000000000000001FC8CAC8C5C8C4C3C3C3C3C3C1BFC06D000000000000009FC8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8C350000000000000000000000000000000000000000000000000000000000000002CB9C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBF5B00000000000000000000000000000000000000000000000000000000000000004ACBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC93302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFC0C0BDBFBCBBBCBDBDC6DFB8A7A5A5A5A7A5A5A5A7AAA7A7A7A7A75F000000000000000000000000000000000000000000000000003AAAAAAAABA7A7AAAAA7A7A7A5A7AAAAAA9C2D000000000000000000000000000000000000000000000000000000001488B1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B24E0300000000000000000000000000000000000000000000000000000028A4B0ACB1B3B1B1B1B1B2B1B3B6B6B5B565000000000000008FB3B2B07508000000000000000000000000000000000000000000000000000038A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F7B0000000000000080A29F9F670700000000000000000000000000000000000000000000000000001994ACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BB880F000000000000000000000000000000000000000000000000000000002FB3CED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D64E00000000000000D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D19E12000000000000000000000000000000000000000000000000000000002DABC0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9B53B000000000000000000000000000000000000000000000000000049B9BBBB6C000000000000001DBCBBBCBCB9B6B9B9B9B9B9BBB8B5680000000000000090B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B97208000000000000000000000000000000000000000000000000000000004BBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C18103000000000000000000000000000000000000000000000000000000000477CECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C332020202020201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E1E1E3E4E6E6E3E1E4E2ECF9DACACACACACAC9C8C8C9C8C8C6C9C9C9760000000000000000000000000000000000000000000000000045C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BD7B16000000000000000000000000000000000000000000000000004CA8ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABAB8D26000000000000000000000000000000000000000000000000035EB2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB96A0000000000000094B9B8B6B59E2900000000000000000000000000000000000000000000000376BCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BF97000000000000008FB2B2B1B1A2380000000000000000000000000000000000000000000000003DA5B1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACA54B030000000000000000000000000000000000000000000000000869ACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B13F00000000000000B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3BF4E00000000000000000000000000000000000000000000000000118BD3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D48E1200000000000000000000000000000000000000000000048ED6D3D1D17A000000000000001FC9C9C9C9C9C9C9C6C8C9C8C8C4C46F0000000000000097BFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBAC4100000000000000000000000000000000000000000000000000178DC4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3B33C00000000000000000000000000000000000000000000000000003DA0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C03202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5DFE1E1E1E2E1E3E3E2E2EFF9D7C8C8CAC9C9C9C6C9CACAC9C9C6C6C3700000000000000000000000000000000000000000000000000049CACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C57A170000000000000000000000000000000000000000003FA7C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C997360000000000000000000000000000000000000000034BAEBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C16D0000000000000099C3C4C6C9C9C9942600000000000000000000000000000000000000003FACC8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9A200000000000000A5CBCBCBCECACAAC400000000000000000000000000000000000000000189CCBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9AB490300000000000000000000000000000000000000000F64B5C0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB94100000000000000B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5A548030000000000000000000000000000000000000000166BB3B9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFB36308000000000000000000000000000000000000044EB5C4C5C5C5C672000000000000001FC3C3C3C6C6C6C6C8C5C5C5C4C4C672000000000000009EC9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0B0540400000000000000000000000000000000000000000A73D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBA73E0000000000000000000000000000000000000000000453BDE1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D03502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2BFC0C4C1C1C3BFC0C4C3CBDEBBA8A7A7A7A7AAAAAAACACB1B1B1ACAC9264676467686C6C6C51000000000000003C6D6D6D6D6D6F6E6E8DC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B68D4F150000000000000000000000000000001A589EB2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8A567290000000000000000000000000000001E65B3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACA75000000000000009FC8C9C8C8C6C9C9C9B164260000000000000000000000000000104DA5C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3A86A6D6B6B6A6A6CAEBDBDBDB9B9B9B9B9AA69290300000000000000000000000000032F7CB5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2AC75280300000000000000000000000000000E3F80B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B64100000000000000C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C07D2E0400000000000000000000000000000E3F7DB1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3AC75260300000000000000000000000000195A9FACACABACACACAC7E3B3B3B3B3B3B3B51A8A8A8A8A8A8A8A5A7A7AAACACAC9267676767696B69A8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBB37C3309000000000000000000000000000004368BC3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1B967290000000000000000000000000000000A3A8DCED3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D3D3D0D3D3D1CFCECBD9EEC9B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6920000000000000065B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFB5836340291C1D1C1C1C1C415A7AABBDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C494724F3F1E1E1E1E1E1E475782B3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C97600000000000000A8D4D4D1D3D3D1D4D0D0D0D0C996704C3021212121203B4D7BB3D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBA7815D4024232323242C537AA8DCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFB180583C2121222222214E6189BDD4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECE4900000000000000C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBD8C6C49331C1C1B1B1A1A3E4C6A97ABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A17554381E181818181831456796A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7AB8C65483A181818181919263D618FB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1A87D5E3E281B1B1A1A1B1A3F4D7597B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BB30020202020202020101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCDEDFDCDCDFDBD9DADAE4F6D0BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C69F0000000000000072C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCB7700000000000000A2C9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABAB3D00000000000000B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C33202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0C1C3C0C1C0C0BFC0C0BFC9DEBBAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B38C0000000000000064ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBD6C0000000000000093B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B53F00000000000000B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADB3902020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8CBCBCED1D0CFCBCEC9D6EBC6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B18D0000000000000064B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C57200000000000000A5D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B84000000000000000B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B82D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E1E2DFDEDBDAD9D9D6D6E1F6D0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBC98000000000000006CB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C16D0000000000000098C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C64700000000000000C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B62E01020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADADCDBDADAD9DEDEE1E9F9D7C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C19C0000000000000076C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C97600000000000000A3CBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B84000000000000000B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB930020101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E4E4E2DEDFDCDBDCDEDFEAF9D7C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C69F000000000000006DC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAA600000000000000089ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F3500000000000000A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BC2F01010101020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED6D9D9D9D9D9D5D7D7D3E1F3CEC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3900000000000000068B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1610000000000000088B0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBC4300000000000000B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0D0CBCED3D3CFD0D0D1DBEEC6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B28D0000000000000064B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3670000000000000082A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B03B00000000000000B0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9A7908F8F8F929494AEC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EAECECEFF1F1EFF2F2F2F7FFE2DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFB20000000000000081DFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0610000000000000090B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACAC3D00000000000000B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0650000000000000067B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C33202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C1C4C4C1BFC3C3C6C6C6D0E4BFACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0AC840000000000000061ACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCA7500000000000000AAD3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBD4300000000000000BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9750000000000000072C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C0C0C1C3C5C5C1C0C0C3C9DFBCACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAAB840000000000000064ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBF6D0000000000000096BDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C94800000000000000D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C172000000000000006FC1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E33E02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDB6BBBCB9B6B9B9BDC0C1CAE1BFACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB994000000000000006DBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C976000000000000009CC1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D34D00000000000000C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B96A000000000000006FBFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDE3B02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFE2E2DFE2E2E1E2E3E1ECF9D7C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CAA20000000000000072C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACAC610000000000000087ABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBD4300000000000000BDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C070000000000000006DBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D4D4D0D5D5D1D3D1D3DEF3CAB8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C67200000000000000A3CED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D04D00000000000000C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E580000000000000058A2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBB2E01010102020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9DBDCD9DBDBDADBDBDAE4F7D4C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2650000000000000083A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B94000000000000000B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B869000000000000006CBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD5D5D7D5D7D9D9D9D6D6E1F3CBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA85F0000000000000084A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B54100000000000000B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8740000000000000075C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CB3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7D9D7D1D3D3D0CFD0D0D9ECC9B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8680000000000000090B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0AC3D00000000000000B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BC6B000000000000006CBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDA3A02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECCFCECED0D1CFD0D1D1D1DCF3CBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CA841F1F2020202121AED0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0541A191A1A1B1B1AB0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA26B1817171717171768A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CE3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4DEDFDCDBD9D9DADEDEDEE9F8D7C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFDEDED9DAD7D9DAD7D7E1F3CFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECE3602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2C3C4C5C4C6C6C6C6C8CAD6EBC6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B92F01010101010101010202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D9DADBDADBDCDAD9DBDBE4F7D4C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBD30020202020101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D9D7D7D3D1D0CECBCBCEDCF1CBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0AB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8D0D0CECBD1D4D3D3D3D3DBEFC9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B62F020202020202020202010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEBDC1C3C4C9C6C6C6C6CAD5E9C9B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D3D0CECFCFCBCECECED9ECC9B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C93402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEBDBFBFB9B9B6B2B2B6BBC0D1B09F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C332020202020201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7D7D7D7D7D7D7D7D6D9E3F4D0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAA29010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D1CFCBCECBC9C9CAC8D1E6C1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAA2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB9BBB9B9B9B9BBBFBFBDCAE1B9A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFC3C0BFC0C1C1C6C6C9D3E7C3B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E33E02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCECBCBCACACACAC9C5D3EAC5B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9D9D7D6D7D7D9D9DADAE4F4D0C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C43302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EAEAE7E9ECEAE9ECEEEEF6FFDCD0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B62F010101010202010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D1D5D5D5D5D7D7DBDBDAE4F4D0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C43202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9DADCDEDFDFDADBDBDAE4F7D1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A72A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6CACECBCBC9C9CBD0D1DCF4CFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA82B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E4E2E3E1E4E2E1DFDFDBE4F6D3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B52E01010101010102020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCDBDBDADBDBD7D7D7DBE1F6D3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8C9C9C8CBC9C9CBCECED7EAC6B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA82A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CBCBCACACAC6CAC6C8C8D6E7C3B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D7D3D6D7D7D6DAD7D7E1F4D1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B62E01010102020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADEDEDCDADEDFE1E3E3F1FBDCCED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6AB6945222222222247639ED0D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD63802020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C8C6C5C5C6C9C8C6C3C6D1EAC6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A70000000000000000000000023F99A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B930020201020201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7EAE7E9E7E4E4E4E6E6F2FDDFD0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACE00000000000000000000000000047CC6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B12C010101010101010101010299FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D6D9DBDAD9DAD9DCDEDBE6F7D1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBD00000000000000000000000000000070C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCBCBCAC6CACACAC8CAD5E9C6B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B50000000000000000000000000000000081B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACA3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2C3C5C6C3C4C4C0C5C8C6D0E3C0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC00000000000000000000000000000000008B1B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CFCECFCFD4D4D3D7D9D4DFF6D1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBB000000000000000000000000000000000043BCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C33302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED1D7D7D7D4D3D1D3D3D3E1F3CEC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A700000000000000000000000000000000000086A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C43202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CECFCFCECFD1CECBCED0DAF2D0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B21547729290A5AC908C5208000000000000003DC3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBE1E1DFE1E2E3E3E2DFEBF9D7C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCAB23000000000000009CBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CB3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD7D9D7D9D7D3D0D3D1D1DEEFC9B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9AB0F0000000000003DC1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C63302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD1D4D4CFD0D0CFD0CED0DBF3CFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5810000000000000097B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C8CBCBCBCBCECFCBCACBD6E9C6B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B53000000000000035ACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A82A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBCECFCFCECECECBCACBC9D3E9C5B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5A500000000000004B6C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D03602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CBCBCECBC9C6C5C4C5C4D0E7C3B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C32500000000000057C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D73802020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E9EAE6E9EAEAEAECEEF1F8FFE3DBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A575000000000000069CA1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B12D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6C6C6C6C6C5C6C5C3CBE2BFACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9150000000000006DB6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB92E01010101020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9DBDCD9DBDBDADBDBDAE4F7D4C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDC8100000000000024DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CBCED1D0D0D3D5D5D6D6E4F6D3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0B60900000000000089B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB82D010102020101010101010299FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9DCDCDCE1E3E4E2E3DFE7F7D4C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B14D00000000000038B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C13302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD7D5D4D1CFD3CECFCECBD9EBC3B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFB58F6445251E1F10091F1E1E35456984B5C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3B17C6445251D1D1D1D1D455E74A5BBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A588644E3B1F1818181824394E7296A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8A278573F291A1A1A1C1C3A415B749CBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9B1B1C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B67200000000000003A5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC13202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCDEDBDADBD9D9DCDEDFEAF8D7C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B59B582100000000000000000000000000000000000E3E7CB3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A57A380C00000000000000000000000000000C366F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABA26D2C080000000000000000000000000000235EA2B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1727272757575779BCECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6974D0A0000000000000000000000000000000A3C7CC4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBAC5B200000000000001E2D4590C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9240000000000000063BBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B82E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C6C6C9CBCED0D0D1D0CBD3EAC6B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1772500000000000000000000000000000000000000000000000851A8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B16A1500000000000000000000000000000000000000000858A2A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B292430300000000000000000000000000000000000000003690ACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACAB000000000000003BABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACA25C08000000000000000000000000000000000000000000003086B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6AE4700000000000000000000000043BBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1A5000000000000000016BBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBD2F010101010201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADEE1DFDEDBDADBDBDBE3F4D0C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B66F15000000000000000000000000000000000000000000000000000000034EB9BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C58409000000000000000000000000000000000000000000000000046DCAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3B94B000000000000000000000000000000000000000000000000004CB6C1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C30000000000000047C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CB6E04000000000000000000000000000000000000000000000000000026A7C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C1260000000000000000000000000045C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8480000000000000000008CB8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACAC2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBD0D4D3D7D3D1D1D3D3DFF2CFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5971B000000000000000000000000000000000000000000000000000000000000000E85B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDA32A00000000000000000000000000000000000000000000000000000000169CBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC88D0900000000000000000000000000000000000000000000000000000011A2CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C50000000000000043B9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1A51D00000000000000000000000000000000000000000000000000000000000057C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCB5A00000000000000000000000000004BCECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C10900000000000000000035C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CED0CBCBCFCFCECFD0D1DAECC9B9B9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C99904000000000000000000000000000000000000000000000000000000000000000000006FC1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBF8F0F000000000000000000000000000000000000000000000000000000000000047AC5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8630000000000000000000000000000000000000000000000000000000000000475CECACECECED0CED0D0D0D3D3D1D1D0D0D0D0000000000000004AD0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C18003000000000000000000000000000000000000000000000000000000000000000024B5C0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDA500000000000000000000000000000041B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BB740000000000000000000000B6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C9C9C5C6C6C3C1C1C4CEE3C0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBD860000000000000000000000000000000000000000000000000000000000000000000000000065B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB064000000000000000000000000000000000000000000000000000000000000000000004ABCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBC4300000000000000000000000000000000000000000000000000000000000000000072C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1000000000000003EB0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1AC6100000000000000000000000000000000000000000000000000000000000000000000000E96ABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACAC5300000000000000000000000000000040B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBB1D00000000000000000000005FC1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D43702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4CACACACACACECBD1D0D0DCF2CEC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBC9D0300000000000000000000000000000000091D1D1E1D1E0000000000000000000000000000000083C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C06D000000000000000000000000000000031C1C1C1C080000000000000000000000000000003DB0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A53900000000000000000000000000000007171717170200000000000000000000000000005AA2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3000000000000003FB5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B96900000000000000000000000000000000161D1D1D16000000000000000000000000000000001FC0C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C41E00000000000000000000000000000054BCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B69000000000000000000000000008B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C63402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB9B8BBBDC1C5C3C6C6CAD5EAC3B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B91C0000000000000000000000001D5F80A2C1BDBFBFBFC1C1C1B1986433090000000000000000000003ABC4C8C5C5C5C4C4C5C6C3C5C5C5C5C5930300000000000000000000001F6492C4CBCBC9CBCAC9C19B642000000000000000000000000064CBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9740000000000000000000000002F6C9BCBCBCBCBC9CECBBB8D57100000000000000000000003A2C1C1BDBCBBBBB9B5B5B5B8B8B8B8B60000000000000040B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0840000000000000000000000001B5A81ABB8B9B6B8B6B2B5B188612A00000000000000000000000026A5A3A7A7A8ABACACACACACABACB0B1B1ACABABAC0000000000000000000837466461616493B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACAC3D0000000000000000000000000070ACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B32D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E1E1E1E4E7E7E9EBE9E7F3FDDCCECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B56D00000000000000000000085DA4B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABAB651F00000000000000000030A19E9E9E9F9FA3A29F9FA2A5A5A2890200000000000000000000307C9F9C9B9B9F9B9F9E9EA2A3A7A7A78C3400000000000000000000006DAAAAACACB1B3B1B2B1B1B5B5B3B8B6B68D0000000000000000000000489CBBBBB8BBBDBDBDBDC1BFC1C1C5C57A1100000000000000000018C6CBCBCED0D4D0D1D0D0D0D0D3D3D1000000000000004DD6D6D4D3D0D0CED0D0D3D0D3D3D3D4BC04000000000000000000044AACD0D1D0D0D0D4D1D3D3D6D4D1D1D4D0C3670A0000000000000000000075C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B69200000000000000005ABCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0B5030000000000000000000000000024BCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B92F01020102020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C1C3C5C0C1C5C0C0BDC0C6DCB5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA71400000000000000000353A8B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B87B08000000000000000096BDC1BFC1C1C5C5C5C9CACACECA2000000000000000000018A1D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6AB2100000000000000000004BBD4D4D4D4D4D3D4D4D4D4D4D3D0CEC61800000000000000000019A7D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C13E0000000000000000005CB9BDB9B9B8B6B9B6B2B6B6B6B6B60000000000000043C0BDBFBFBBBBBBBBBBB9B9BBBFBFBF2C000000000000000000239BBBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9AA4100000000000000000003A5B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5900000000000000023B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBD6D0000000000000040000000000000009DBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5CBCED0D0D1CFCAC9CACAD5E7C6B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C494000000000000000010A2BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6A20F000000000000003EB0B1B0B1B2B2B1B2B2B2B5B85700000000000000000029B1B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A79F3900000000000000000026ACB0B1B1ACABABACABABABACACB14D00000000000000000021AAACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACAC3D0000000000000000039DABABACACACACA8A8ACABABACB0000000000000003EB2B6B6B5B5B8B5B1B5B5B1B1B5B1690000000000000000003DACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B37503000000000000000038B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6770000000000000061B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C11700000000000009B60F0000000000004DC1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B32D010201010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBC9CACACAC9C5C9C6C8CEE2C1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBF540000000000000003A7BFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBC940000000000000008B9BBB8B5B8B8BBBBB9B5B3960300000000000000003FB8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BB4100000000000000000074BFBCBFBFBFBFBFBDBDBFBCBCAA03000000000000000023B5BFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C02D00000000000000005BC9C6C6C9C9C9C9CBCECECAC9C90000000000000049CAC9C9CBC9C9C8C8C4C5C6C4C1BB10000000000000000046C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B98803000000000000000097B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3670000000000000067B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C696000000000000004EC15E00000000000009BDC4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EBECF1EFF1F1F2F2F3F3F9FFE2DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CE180000000000000076C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6300000000000000096B1B1ACACB1ACACB1ACAB3400000000000000001E9FA5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA73A00000000000000000DA2A7A7A7A7A7A5A3A5A5A7A34000000000000000000890A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAA2140000000000000008ACB0ACB0B0B0B1B1B0B0B0ACB1000000000000003BABACACB1B2B2B5B5B8B8B8B3B361000000000000000023B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBB8803000000000000003EB2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5650000000000000067B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A733000000000000007B9E89000000000000005DA29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B22C01010101010101010201019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCFCFCECED0CFCFD3D3DEEFCABCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3D9000000000000001ADAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECE810000000000000077CACAC8C8C8C5C9C5C6A5000000000000000009B1C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6AC1A00000000000000005DB1B2B6B2B2B2B2B6B9B6AE0800000000000000006DB1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A37A00000000000000006DA7AAA8AAAAAAA7A5A39F9FA300000000000000379C9B9C9E9E9C9C9C9E9E9E9E9E12000000000000000288A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A76D0000000000000003A5ACB0B2B2B2B2B0B0B0B0B0B0B1B3B367000000000000005DA5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1A4030000000000001CBCBCB92A0000000000001CB5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B62D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2C6C6C6C6C4C4C3C4C4C4D0E9C5B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBC8D000000000000005BC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6900000000000000055C1C3C1C3C3C5C9CACA5100000000000000008BCECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3A5030000000000000017C3C4C4C6C6C5C5C4C1C181000000000000000025BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B63F000000000000002FB1B1ACACACACB1B5B8B8B9B80000000000000040B3B3B1B1B1B1B1ACABABABAB7E000000000000000046B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBC330000000000000072B9B9BCBCB9B8B6B5B5B6B9BCBCBCBC6B000000000000006CB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3670000000000000061B5B5B5750000000000000084B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAB9B9BBB6BBBFC0C5C4C6D0EAC6B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BD6D0000000000000088B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0970000000000000046C4C8C5C5C5C4C4C5BF090000000000000026C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED05300000000000000009BC9C9C9CACAC9C8C8C938000000000000000082C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5AB0000000000000003C1BDBCBBBBB9B5B5B5B8B8B80000000000000040B6B6B9B8B6B9B9B6B8B8B9B84F000000000000000093B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0AC90000000000000002BA7A7A8ABACACACACACABACB0B1B1AC610000000000000064B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB014000000000000039DACB1B1A80800000000000035ACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B12D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFC1C3C5C6C9C8C6C8C8D0E1BDB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B86100000000000000B1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9750000000000000048C9C9C9C9C9CBCED08D0000000000000000ABE1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DED0040000000000000050DBDADBD9D9D9DADAD60A0000000000000013DBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C63F000000000000008BC1C1C0C0C0BDBDBDBDBDBD0000000000000045C1C1C1C1C4C4C3C1C1C4C4C4100000000000000026C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CB3000000000000004C9D3D3D3D0D0D0CED0D0D0CECBCBCB770000000000000078D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D096000000000000003DD9D7DBDBDE5100000000000004D3E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E43D02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD7D9D9D9D5D5D6D4D1CED9ECC6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C89672747472727272C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBF160000000000000043BDB9B9B9B6B9B9B5410000000000000015B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B23F0000000000000008B2B2B1B2B5B6B6B690000000000000000052BCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBF870000000000000061C9C8C8C6C5C5C6C4C6C6C80000000000000045C3C3C3C3C3C1BFC0BDBDC0AB00000000000000006DCAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BD6D000000000000006DBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C535000000000000008DC4C6C6C9C9A3000000000000006CCBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCB3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBC9CAC8CAC9CBCBCECBD6EAC6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACAB3B000000000000000047A5A3A3A3A3A3A3A30C0000000000000048999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A786000000000000000094B5B3B3B3B1B1B36700000000000000007EB5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3BD040000000000002DC4C4C6C6C8C9CECECBCBC90000000000000045C1BFBCBCBCBCB9BDBBBBBF7D0000000000000000A5BDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0640000000000000065B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8B90000000000000009C3C3C3C1BDBCBC1D00000000000010C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C83402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0C0C5C4C3C4C1C1C3C4C4C9DCB9A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8B5370000000000000000007DC9CACACBC9C9C6B60000000000000000A5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBF09000000000000006DBDBDBDC0BFBFBC440000000000000000BDC5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACE0000000000000048CACAC9C8C8C9C9C8C8C4C65A0000000000000009C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8670000000000000067B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B658000000000000004FB5B2B2B0ACACAB5A0000000000000075A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1AC2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9D7DAD9D7D7D6D4D4D4DFF3CEBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A57A3902000000000000000000009BA8ABA7A7A5A5A56D0000000000000008A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA733000000000000003BAAAAAAAAABB0B01B000000000000001AB1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8000000000000003FB3B8B8B9BCBBBBB8B8B3B640000000000000002FB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A15A000000000000005A9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B070000000000000093A8ABA7A7ABA7AB9D030000000000002EACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCE3602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBDCDAD9DADBD9D9D9D9E3F4D0C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDA7753A080000000000000000000000002ABBBBB8BBB9BCBCB963000000000000002CC1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B861000000000000001CB9B9B8B9B9BBBD15000000000000003DC1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D10000000000000053E1E1DFE2E2E2E2E3E1DEE1230000000000000063DCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0770000000000000076C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBD7E0000000000000025C1C1C4C4C3C1C1C4C43600000000000000ACC6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCB3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADBDBDADBDBDAD7D9D6DEF2CEBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFA06F3D100000000000000000000000000000000092BCBBBBB9B9B9B9B9410000000000000045BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6930000000000000010C4C4C4C6C6C6C3000000000000000058C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6000000000000004ED3D4D4D4D4D4D4D4D4D6D6200000000000000081DBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1840000000000000083E1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1300000000000000078D1D1D3D0D3D0CECECE93000000000000005CCACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD6D3D1D1D1D1D1CFCEC9D3ECCAB6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3B084562804000000000000000000000000000000000000005ED1D4D7D7D9D9D7DBDB340000000000000086E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1B50000000000000000E6E3E3E3E6E6E4000000000000000088E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BF000000000000003FB1ACACABABABACACB0B0B000000000000000005A7B7D7D7B7B7C7E7E7E7E7C7C7B7B7B787B7B7B787A7A7A7D7B7C7E808383838386868784838383808188A7A7A3A3A3A3A3A7A7A7A7A8A8A85F0000000000000064B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBA20000000000000003BBC1C3C3C6C4C1C4C4C3C30F00000000000009BBC1C4C1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C5C6C4C5C6C5C4C6C9C9D3E9C5B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6C5905A2B0000000000000000000000000000000000000000000000004AC9C9C6C6C6C6C6C6C8C51E000000000000006DBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C60000000000000000C0BDBDBDC0C1C1000000000000000070C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECE000000000000004CD1CECED0D0D0D0D0D0D0D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024E1E1E2E4E3E3E4E6EAE6E6E3E3E3880000000000000088E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDA63000000000000004ACBC9C8C8C6C5C5C5C3C1C1550000000000000077BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9F28010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C5C6C6C6C6C4C0C0C0BDC3DAB6A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6A15A1C0000000000000000000000000000000000000000000000000000005AB9BBBBB8B9B9B9B9B9B9BC1C000000000000007DBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C00000000000000000A8C3C6C9CBCBC9000000000000000077CAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C10000000000000041B9B9B8B6B8B8B8B8B8B8B300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001DC4C6C4C6C6C4C4C3C4C4C8C4C3C16E0000000000000072C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5BD09000000000000008DBFC0C0C0C0BDBDBDC0C0BCA50000000000000023B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E26010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E4E1E4E4E6E9E4E4E6E3ECFCDCD4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC17D2800000000000000000000000000000000000000000000000000000000249EC0C0C1C0C1C3C3C3C0C0C1BF1C0000000000000090B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3000000000000000096BDBCBDBDBFBC000000000000000096C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BD0000000000000043C0C0BCBCBBBBB9B9B9B9B8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018A1A19E9E9E9E9F9E9A999997979754000000000000005AA2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B06D000000000000000EB3B1B1B3B3B5B6B5B5B8B9B9B629000000000000009BBCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBC3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C9C6C4C3C4C4C5C3C4C4CBDEBFB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9BF6909000000000000000000000000000000000000000000000000000000003C90C1C1C1C1BFBFBFBFBFC1BDC1C1C11D000000000000009BC0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9000000000000000090B6B6B9B9BCBC000000000000000078C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CE000000000000004AC9C9C6C6C6C8C9C9CAC8C800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001AB1B3B5B3B6B3B1B1ACACB1ACACB161000000000000005BA1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA71F000000000000004EA5A5A7A5A5A5A7AAA7A7A7A7A765000000000000003AA3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0AC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C4C5C6C8C9C9C8C9C9CED3EAC9B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D498120000000000000000000000000000000000000000000000000000002065BCCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C11D000000000000006DBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C30000000000000000B9C1C1C5C5C3C3000000000000000072C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1000000000000004CD0D0D0D0D0D0D1D4D7D7D9220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036E3E4E6EAE6E6E3E3E3E6E6E4E4E4880000000000000088E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAB50000000000000000B9C6C5C5C5C3C1C1C1C1BFC0C3C4BD0300000000000003AEB5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A72A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBCED1D0CECFCBCFCBCED5EAC9B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACA5A00000000000000000000000000000000000000000000000000002664A7C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C51E0000000000000070C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3A50000000000000000ACACACACB1B5B80F0000000000000065B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B80000000000000041B9B9B9B9B9B9B9BCBCB9B81B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041B9B9B8B5B5B5B2B2B1B1B1B3B3B3640000000000000061B0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1470000000000000029B5B2B0B0B0ACA8A8A8A8ABACACACAB3D000000000000005FA8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BB3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEBDBDC1C0BDBDBBBCBDBDC9DBB8AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B55F0000000000000000000000000000000000000000000000224775AEB9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C144000000000000005BBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACAA20000000000000000CACACACBCACACA1F0000000000000057C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBC0000000000000041B9B9B9B9B9B9B6B6B3B3B330000000000000001419191A1B1A1C1C1C1C1A1A1A1A1B1A1A1B1A1A1B1B1B1A1A1A19191919191A191914000000000000003FB5B5B5B2B2B1B0ACB1B1B1B1B3B2650000000000000068BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6AC08000000000000007CC0C0BDBBBBBBBBB9B9B9B9B9BBB8BB960000000000000016C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACAC2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDADFE1E1DFDFE1E1E2E2EFFCDCD0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B59403000000000000000000000000000000000000142E517DA2ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8470000000000000036B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C382000000000000001EC4C5C8C8C5C6C940000000000000004ACECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADB000000000000004ED6D3D6D3D1D1D1D0CECECE4A000000000000006BC9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BB780000000000000069BCBCBFC1C1C1BFC0BDBDC0C1C1C16F0000000000000072C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBC6D0000000000000009BCC3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1160000000000000090C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B93002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CAC9C9CACACACACACBD0D7EBC9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BD3A00000000000000000000000000000833588CB2BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B967000000000000001CB8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C156000000000000002DC3C0BDBDC1C1C155000000000000001FC9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDA0000000000000053E1E1DEE1E1DEDEE1DCDBDB810000000000000047DAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCB6F000000000000007BC6C6C8C5C5C3C3C1C1C0C0C0BDBD6D000000000000006EC0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C11D000000000000004EC3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3670000000000000040CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D13702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD9DBDBDCDADEDCDFE2E2ECF9D9C9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABA5030000000000000000000000285A8FB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABAB880000000000000000A5B0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB026000000000000004DB2B3B3B1B1B0B1750000000000000000ACB8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBD0000000000000041BDC0C0C0C0C1C1C5C5C3C3990000000000000016C1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBB3A000000000000009BBCBCBCB9BBBDC1C1C0C1C3C1C3C16D0000000000000067B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B890000000000000000093B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1B30000000000000000B3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E23D02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7B6B5B2B2B5B9B9B5B3B3BBD1ACA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6770000000000000000000864ACBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBF00000000000000007DC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC1000000000000000088CAC9C9CBC9C9C8B000000000000000008BC3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8000000000000003FB5B3B3B2B2B1B2B3B3B3B5B10000000000000000A3BFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C31600000000000000C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8720000000000000072C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBB41000000000000001AB5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACAC2F0000000000000053ABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA82A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCE1E3E4E6E2E4E4E4E1ECF9DBCACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0AC55000000000000000038AEB5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A51E0000000000000030A3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA26300000000000000009DA7ABABABABAAA7A70D000000000000003EB1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC11D1E1E1E1E1E1F64CACECACECED0D1CECECECB000000000000004BD0D0D3D3D1D4D3D0D3D6D3D32A0000000000000067D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6BB0000000000000028CED0D0CBCECBCECBCBC9C9C5C4C3C36E000000000000006DB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCB5030000000000000063BBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B983000000000000000FBCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B930020202020202020102010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5CAC6C6CAC9C9C5C6C6C5D0E2BCABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D04D0000000000000021C9D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DB6D0000000000000004C6CECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBF240000000000000023B9B9B8BBB8B8B8B9B94A0000000000000009B9BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB989000000000000005BBDBBBBBCBFBCBCBDC0C3C30000000000000045C1BFBFBFBFBFC1BDC1C1C1C160000000000000000FBDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B667000000000000005AB9B9B6B6B6B9B9BCBCBBBDC0C0C0C0700000000000000075C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C86C0000000000000004BBCACECACACACED0D0D3D4D1D0D1D0D0CECECED0D10A0000000000000082C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B92E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBCECBC9C8CBCFCACAC9CAD3E9C6B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD04A0000000000000097D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3BF00000000000000007ADCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3B0000000000000000075E4E4E4E4E3E3E4E2E2A500000000000000008BDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C55F0000000000000078C4C1C1BFBCBCBCB9B9B6B5000000000000003DACB0B0B0B0ACA8A7A3A3A3A184000000000000000061A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7180000000000000077A3A7A7A7A7A8A8A8A7AAAAAAAAAAAB610000000000000064B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9150000000000000034C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C158000000000000002DC1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACAC9CBCBCBCECECA3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFD0CECBCECAC8C6C6C6D0E3C0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBD4300000000000000C1C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C82600000000000010C8C8C6C6C9C6C8C9C9C9C91F000000000000000ABCCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CB280000000000000000BDCBCBC9C6C4C1C1C1C1C1100000000000000015B2B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0160000000000000099B6B9B9B8B9B9B9B9BBBBB90000000000000040B9B5B9B9B8B8B5B6B6B9B8B6B61B0000000000000015ABB6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C18F000000000000000FBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BF6D000000000000006DBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C39600000000000000008DC5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5AC0000000000000000A5C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D43702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D5D7D9D7D9DBD9DBDEE7F8D4C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C54700000000000000C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC91800000000000039CACECECBCBCACAC9C9C9CA7E000000000000000047C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C67200000000000000003DC1C1C1C1BDBCBBBBB9B5B558000000000000000057B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2850000000000000003B9B9B8B9B6B8B6B2B5B8B8B9000000000000003DABABABA7A7A7A5A3A7A7A8ABAC6100000000000000004BABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A719000000000000004CB1B1ACACB0B1ACACACB1B1B1B2B1ACAB610000000000000061ABACB0B0ACABABABABACB1B2B6B6B5B5B8380000000000000008ACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1210000000000000047B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBF3002020202020102020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB6B8B8B6B9B9B9BDC0C0C9DFBBAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B64E0000000000000097B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACEAA0000000000000064CBCED0D4D0D1D0D0D0D0D3CA0A000000000000000090D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0AC040000000000000000A1D6D4D1D1D4D0D3D0CECECEC00400000000000000049CC4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9230000000000000033BFBFBBBBBBBBBBB9B9BBBFBF0000000000000045BCB9B9B9B9BBBBBBBBBCB9B6B6B108000000000000000078B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B86100000000000000009BB9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B969000000000000006BBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6AA030000000000000051BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1700000000000000009C1C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBDADCDBE1E1E1E2E1E3ECFBDACBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B16D000000000000005FB3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B83A00000000000000A2B8B8B9BCB9B9B9B6B6B9BCBB6900000000000000000389BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFA81000000000000000003CBDC0BDBDC0BDBBBCBCBCBCBCBC4900000000000000000FA1BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBC5C00000000000000007AB6B6B3B5B3B3B5B5B8B8B6B6000000000000003FB5B8B9B9B9B9B8B9B9BBBDBBB8B86100000000000000000390C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C997040000000000000040C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDE840000000000000086E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1700000000000000000C5DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D0040000000000000088D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEACFCBCFD1D3D0CFCFD1D1D9EBC6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B59D000000000000000EA7B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0610000000000000015B5B5B5B5B5B5B3B3B1B2B1B1B0B01400000000000000000381AAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5A10F0000000000000000039DC0BFBFBFBFBFC1C0C0BCC0BCBCAC0800000000000000000E9CB5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACAC81030000000000000008B2BCBCBCBCB9BCBCBCBCB9BCBC0000000000000045BFC1BFBFBCBCBCBCBCBBBDBBB8B5AC0E00000000000000000381BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D09C040000000000000000AACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5700000000000000070C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0100000000000000023B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B33F000000000000001AB1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B22D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E3E6E9EAEAEBE9EAE7EAF4FFDFD6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C81F0000000000000028C9CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBB6400000000000000005AB9B9B9B8B8B6B6B6B6B3B1B3B5B390000000000000000000036FA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5740800000000000000000050A8A8ABA7A7A5A5A5A7A5A5A5A7AAA76D000000000000000000026BA7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA76703000000000000000041A5A7AAAAAAAAAAABB0B0B1B0B0000000000000003EB0B0B0ACB1B2B1B1B0B0B0B0ABABAC780000000000000000000050B2BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B96803000000000000000048B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0AC640000000000000067B6B6B5B5B2B1B1B1B3B1B3B5B5B3B27B000000000000000067B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E75000000000000000081A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACAC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9D7D9D9D5D3D3D5D6D6E1F3CEBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBB6400000000000000001FA7C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFA034000000000000000004B9C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8560000000000000000000034A4C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9BB490000000000000000000026C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B932000000000000000000002590C1C1C1C1BDBFBFBFC1C1C1C0C0BDBF9E2400000000000000000003B3C4C8C5C5C5C4C4C5C6C3C5C5C50000000000000047C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCA51000000000000000000001178C6CACECECBCBCACAC9C9C9CACAC9C8C8972600000000000000000011C3C9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9720000000000000070C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5300000000000000003AEB6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2150000000000000041B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C1C5C4C1C4C1C1C3C5C9D3E4C3B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCD514000000000000000000479EDBDBDBDADBD9D9D9DADAD6D4D4C48E3D0000000000000000000058D6D3D0D1D1D1D1D0D0D0CECACACBCBCECB2F00000000000000000000003E8BC1C1C0C0C0BDBDBDBDBDBDBD9045030000000000000000000010B2C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5BC1E00000000000000000000001E619BC3C3C3C3C3C3C1C1C49E6B20000000000000000000000072D0D0D0CED0D0D0CECBCBCBCBCBD0000000000000004CD3D3D3D0D3D1D0CECED0D0D0D1D1D4D1C92900000000000000000000000A4E90C8D9D7DBDBDEDBDEDED9AB721C0000000000000000000000A7DBDBDBDCDEDEDEDEDEDEA7838483838383838348000000000000004A88888B8888878787C4E6E4E4E4E4D3000000000000000056E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9630000000000000003B1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A228010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D7D4D7D3D4D1D0D1D1D1DBF3CBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B072000000000000000000000003213E5A6161616467644536150000000000000000000000000EA7ACA8A8A8A8ABACACACABACACACACABABABA314000000000000000000000000082C516188888C8D6F5830080000000000000000000000000392B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDA71000000000000000000000000000001E2546463D1E1E000000000000000000000000000030CECECED0D0D3D3D3D0D1D0D0D1D1D0000000000000004ACECBCACACBCED0CECED0D1D4D3D4D3D3D0C31200000000000000000000000000001323464D4D4D211900000000000000000000000000005AC9C9C6C8C9C8C8C4C4C1C445000000000000000000000000000000000000000000000000006ABCBBBBB9BC53000000000000000090C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9AC000000000000000064BCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BF3202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CECFCFD1D4D4D1D3D3D7DFF3D0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDC5A00000000000000000000000000000000000000000000000000000000000000000000009CD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1C929000000000000000000000000000000000000000000000000000000000000000000001094C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8A20F0000000000000000000000000000000000000000000000000000000000000000000E9CB2B2B1B1B1B1B1ACACACACACACACAC0000000000000039A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7900D0000000000000000000000000000000000000000000000000000000000000000000038A5A5A7A5A5A5A5A7AAAAA8AC3D000000000000000000000000000000000000000000000000005EA8ACACACAC08000000000000000EB0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACAC2E0000000000000015B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB930020101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E7E4E4E4E2E2E4E7EBE7F3FCDCD0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C94A0000000000000000000000000000000000000000000000000000000000000000006EC1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8AC2200000000000000000000000000000000000000000000000000000000000000000FA3BFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4AC170000000000000000000000000000000000000000000000000000000000000010ACC5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C00000000000000041BBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B19B19000000000000000000000000000000000000000000000000000000000000000039A3A3A3A1A19E9E9E9E9F9E9A9934000000000000000000000000000000000000000000000000005DA5A7A3A76F000000000000000056B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBD7C000000000000000086C0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBB3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFCBC9CBCBD0CFCECAC9D3EBC9BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBD4B0000000000000000000000000000000000000000000000000000000000000361ACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A33F000000000000000000000000000000000000000000000000000000000000249FA5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5AC30000000000000000000000000000000000000000000000000000000000016A5BDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C60000000000000047C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCB53A00000000000000000000000000000000000000000000000000000000000057B6B6B8B8B9BBBBBBBCBCB9B9B5B8400000000000000000000000000000000000000000000000000064B1B1B2B2280000000000000000AAB9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1090000000000000035C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC0C1C1C0BDBDC0C0C0C1CEE3BFABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4900A0000000000000000000000000000000000000000000000000000001AB3DCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6981200000000000000000000000000000000000000000000000000000977CBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBD7E09000000000000000000000000000000000000000000000000000047C1C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C30000000000000045C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D08C1100000000000000000000000000000000000000000000000000001297D4D1D1D1CECED0D0D0D0D0D0D0D0D14E0000000000000000000000000000000000000000000000000081DBDBDBC1000000000000000034E1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3670000000000000000D4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C130020202010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CAC9C9CBCFD3D0D1D0D0DBF3CEBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFB14D0300000000000000000000000000000000000000000000001E7BC9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3C9700A00000000000000000000000000000000000000000000045AC9DADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C15A0900000000000000000000000000000000000000000000158CBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C10000000000000045C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCB5630800000000000000000000000000000000000000000000034DB6BFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C144000000000000000000000000000000000000000000000000006EC3C3C14C00000000000000007AB9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5A500000000000000005AC5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C83402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFD3D7D6D5D7D9D7DAD7DEF2CEBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0BF64110000000000000000000000000000000000000A389BD0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1D77B25000000000000000000000000000000000000126FCEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3DB7C240000000000000000000000000000000000002B8CDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C11D1D1D1E1E1E1E5FBFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A39D5C2400000000000000000000000000000000000007448D9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A75018181819191818180C000000000000000D191919191919191972B1ACAC26191A1A1A1A1A1A23B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3341E1D1D1D1D1E1E2DC1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C93402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6CACBCECECBCBD1D1DCF2CEBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3AB69300A00000000000000000000092F5A8FC9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCA363320F0000000000000000000009345F99C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1A76E3C1600000000000000000000092C5FA8C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDB1764516000000000000000000000026588DC5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0780000000000000077CECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A52A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C3C5C5C4C3C3C3C5C3C1CBE4C1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9BBA2907677778BA7AAC6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBAEB07E7E7E80AEABCED4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0A796866D6D6D7596A7C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3BBA8967878778BA5B8CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CE770000000000000078D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCB3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D9DAD7D9DAD7D6D7D4D4DFF3CFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A35A000000000000005A9F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCB3602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEBCBDBDB9BBBBBDC1C1C3D0E9C6B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A75D0000000000000061A7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B22C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D7D7D7D7D7D7DADEDFEBF9D7C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DF81000000000000007CD4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B22D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDBBBCC0BBBCBFBDBCBBBBC3DAB8ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B968000000000000006AB9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B32D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED6D5D5D7D7DADCDFDEDBE7F7D3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBB6D0000000000000068B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAA2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDBBBCBCBFBCBCBDBFBDBBC4D7B6A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B969000000000000006DB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B12D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7D7D7D5D7D7D5D5D6D9E3F3D0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C572000000000000006FC0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9F28010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED6D9D9D9D9D9D5D7D7D3E1F3CEC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0AA454547464647487CC8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B968000000000000006DC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C5C6C4C1C5C9C4C5C5C5D1E4C5B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBA20000000000000047C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3670000000000000069B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DEDCDCD9D9DBDCDEDEDEE9F8D4C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C89C0000000000000047C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DB810000000000000081DBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D5D9DAD9D5D5D5DAD6E4F7D3C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B38F000000000000003DB0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC872000000000000006FBFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D4D1D3D3D5D5D6D9E1F3D0C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEB30000000000000054DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBC6E000000000000006CBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9E28010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBCBCBBB9B8B9BBBDC0CBE1BDACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBA50000000000000047C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4A575777777767676ABCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDF3C02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C8C9C9C6C6C9CBCBCED1D9F1CBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A380000000000000003BABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B12D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EFF1F1EFF2F2F1EFEFEFF8FFE7DFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACAC88000000000000003BAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C93402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DFE1E1DFE2E3E3E1DFE1ECF8D7C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6900000000000000043BDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CACACECBCECFCECFD0D0D9EBC6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B18D0000000000000040B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BC3002020202020101010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0CFD1D0D1D1CED1D1D6E4F6D5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0BD7777777778787BA1D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CED0D3D1D3D3CECFD0D0D9EEC9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD03702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFE1DCDCE1DEDCDADBD9E4F7D0C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECE3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBCBCBCBD0CBC9CACBC9D5EEC9B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AA2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB5B2B2B1B2B1B5B8BDB9BFD7B19F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7D7D7D7D7D7D7D5D9D9E1F4D0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAB9B9BBB9B9B9B9BCBFBFC6E1BDA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAAC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD3D7D7D6D7D7D6D9DBDBE4F6D1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBBBBFBFBDBFBFBFC4C4C6CEE3BDB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD5D5D7D3D0CECBCBCBCED7ECC9B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC93302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6B2B1B5B6BCB8B5B8B6B3BDD1AC9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAAC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFE1DFDCDFDEDFE2E2E2EBF8DAC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECE3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCECECACAC9C8C9C9C9D1E7C1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC93302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7C8CBC9C8C9C9C8C9CECED7ECCBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C130020202020201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D1D3D3D1D3D3CFCECAC8D5EAC5B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBB2F01020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFD3D3CFD3D5D5D5D6D9E3F7D5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B93002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D5D4D3D4D3D1D3D6D6E1F6D0BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E26010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD3D3D3D1D7D9D9DEDBDBE6F7D3C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C63302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEB9B6B9B9BBB8B9BFC1C5CEE6C1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B22C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5B2AEB2B1B1B5B6BBBBBBC6DCBCA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B32D010101010102010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC0C3C6C5C9C9C6C6C8C5CAE1C0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E23E02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CECFCFCED0CBCFD3D3D4DCF3D0C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7E9E7E4E4E4E3E1DEDEEAF8D7C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CBC9C9CBCFCECBD0D4D4E1F3CEBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B82E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBCAC9C8CACACACACBCBDAECC6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D13702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C9C9C9C9CBCBCACBD0DAECC9B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACAC9CBCBCBCECECACECECACBCBCBC9C6C93402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C5C6C4C5C6C5C4C6C9C9D3E9C5B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9F28010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C6C6C5C6C9C5C9CACAD3E7C0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACAB2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED3D5D5D5D9DBD9D5D6D6E4F4D3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADBD9D9DBD7D7D4D4D4E1F6D3C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AA2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E4E6E2E4E4E3DFE1E2E6ECF9D9CED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBF3002020202010201010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEBCB9B6B6B3B3B6B9BBBDC1D7B3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C1C3C0C1C5C5C6C6C6C5D0E6C3B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B22D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DEDBDAD9D9D5D5D5D9D6DFF3CABDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B93002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C3C6C6C5C5C5C1C3C3C3D0E9C1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB12D01010101010101010102029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DBDADADADBDBDBDBDADBE4F7D3C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBD30020202020201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9DEE1DCDBD7D7DADBDBE9F8D4C9C6C4C3C3C5C4C4C4C1C1C1C1C0C0C0C0BFBFBDC0C0C0BFBCB9B9BBB8B9B9B9B9B9B9BCB9B8B8B9B9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D5D7D6D7D7D1D4D4D4E1F4D0C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDC3A02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D3D3CECFCFCECECECED6EBC5B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D03602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D7D3D5D4D3D1D6D6DEF3CEBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBB3002020201010101020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6C9C9C9C9C9CECBCECED1DCF2CEBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB82D010101010101010202010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9D5D5D6D4D0CBCECECBD7ECC9B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECB3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0DCDEDFE1E1E1DFE1DFDFEBF9D9CACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE13B02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6C9CBCACECAC6CBCED9EFC9B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E43D02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDADBDBDBDFDFDEDCDBDBE1F3CFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8979090898D8C8DACB3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B69B89696868686F90A5B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F8D7C7B7B7E808290A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D03802020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0D1D1CFD3D0CBC9CACAD7ECC9B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBC9C64331600000000000000000008235281B3BDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBB9654250000000000000000000003255782BCC3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9885428200A2020539CD0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CEC59275514A4A4B7780A5C9D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9B684511F04000000000000000000163B6DA7BCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C432020202020202020202020199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCDCDFDFE1E1DFDEDEDBE4F7D3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABAB190000000000001AB0B0B0B2B3B3B2B5B5B5B2B2B1B0000000000000003FB2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B58F000000000000006DC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBD0000000000000045C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3A2580E0000000000000000000000000000000000032F81ACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8610000000000000088ABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B38F000000000000003FB3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBB6D000000000000006FC1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C94800000000000000CECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D184200000000000000000000000000000000000043A84CAD4D4D6D6DADADADADBDBDBA71B0000000000000000007AD1D0CECECECEC9C8C6C9C9C9C9C9C9C9B64704000000000000000000001DBFBFBFBFBCBCB9BBBBBB6C0000000000000090B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C481350000000000000000000000000000000000001D64B5BBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBF97000000000000006FC4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4460000000000000094B9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C93302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CFD1D4D0D1D3D5D9DAD6E1F3D0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C51E0000000000001FC9C5C8C8C8C9CED0D0CBCECECEC9000000000000004CD0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9A30000000000000078CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C40000000000000043BBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1974303000000000000000000000000000000000000000000001F6EABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AA5F0000000000000081A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAA86000000000000003AA5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0AC640000000000000061ABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B23F00000000000000B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBB9C1C00000000000000000000000000000000000000000000084FA5B2B1B1B1B3B1B3B587030000000000000000000067B1B1B1B1B2B2B0ACABABA7A5A7A7A77C0D0000000000000000000000001E9F9FA2A5A5A29F9F9E9F58000000000000007C9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7AB6714000000000000000000000000000000000000000000000847ABB2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C59C0000000000000077D0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D64E00000000000000A7D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C53202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D1D1D0D3D3D1D3D0D0DAEBCAB9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C11D0000000000001EC1C1C5C3C3C5C9C8C8C6C5C5C6C40000000000000047C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9A20000000000000072C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BD0000000000000040B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBF640300000000000000000000000000000000000000000000000000002DABC6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C97500000000000000A5CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C99F0000000000000047C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C16F000000000000006BBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B64000000000000000B1B0B1B2B2B1B2B2B2B5B8B6B9B6B280030000000000000000000000000000000000000000000000000008569DA7A7A8ABACA508000000000000000000000061ABABACACB1B1B3B3B2B2B2B1ACAC9203000000000000000000000000003DACB0B1B1B1ACACB0B1AC610000000000000087ABACACACACA8A8ACABABACB0B0ACABABABABACB1B2971B0000000000000000000000000000000000000000000000000000086BB2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B38F0000000000000067B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9430000000000000096BDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBC3002020102020202020102029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD1D4D5D5D5D5D1D3D3D6E1F2CEBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3180000000000001AB0B1B1B5B5B5B2B5B3B3B3B1B1B30000000000000041B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C39E0000000000000074C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C90000000000000043BCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6A22300000000000000000000000000000000000000000000000000000000000378B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2650000000000000090B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C99E0000000000000043BCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8740000000000000070C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C94900000000000000CAC8C9C6C9C5C5C5C8C5C5C1C1C36F00000000000000000000000000000000000000000000000000000000001090C0C0BDBF6400000000000000000000000072C8C5C5C5C4C4C5C6C3C5C5C5C5C51E00000000000000000000000000004ACBCBCBC9CBCAC9C9CAC97700000000000000A5CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C86900000000000000000000000000000000000000000000000000000000000036BDC5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5900000000000000067B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8400000000000000090B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EAECECECF2F2ECEBECECF4FFDFD4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D42200000000000022D4D1D1D1D1D1D1D1D1D1D1D0D0D1000000000000004ACECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C09B000000000000006BBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6000000000000003BB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1840E000000000000000000000000000000000000000000000000000000000000000040A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9F5A000000000000007A9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A783000000000000003AA7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2640000000000000067B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABAC3E00000000000000B2B3B1B2B5B2B2B6B8B8B8B9BC8D030000000000000000000000000000000000000000000000000000000000000052B1B9B82A0000000000000000000000006CBBBBB8B8B5B8BBBBBDBDBDBDC0960000000000000000000000000000003FB2B0ACACB0B0B0B0ACAC610000000000000086AAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0AB3000000000000000000000000000000000000000000000000000000000000000000D94ACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BC94000000000000006DBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B63F000000000000008FB5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB82D010101010102010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDADBD9D9D7D5D5D4D3D4DBF3CFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B91C0000000000001CB8BBBBBDBFC1C1C1C1C3C0C0C3C30000000000000043C1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9A20000000000000080DBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDE0000000000000051E1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDAA704000000000000000000000000000000000000000000000000000000000000000000004ACBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C16E0000000000000096BDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1990000000000000046C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6750000000000000077D0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED04C00000000000000D0CECED0D0D0D1D1D4D1D1D1C61100000000000000000000000000000000000000000000000000000000000000000023C5DC0400000000000000000000000084DEDEDEDEDEDFDFDFDFE1E1E2E45400000000000000000000000000000054E3E4E2E2E4E2E4E4E4E48600000000000000AEDCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C026000000000000000000000000000000000000000000000000000000000000000000000E99B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A27E00000000000000589E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3380000000000000084A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C13202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFE1DFDCDFDEDFE2E2E2EBF8DAC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC11D0000000000001DBFC1C1C4C6C4C6C6C4C4C3C4C4C80000000000000045C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C199000000000000006EC0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8000000000000003FB5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A87D02000000000000000000000000082B3F5B5C635C5B4C371200000000000000000000000000359B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A75B000000000000008CB0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B58F0000000000000043BCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5740000000000000076CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBF4400000000000000BDBDBDBDB9B9B9B6B9B9B5B949000000000000000000000033739CBCB9B9B5B8B89E875F380E00000000000000000000088700000000000000005D8C938D6D93B2B5B6B6B6B6B6B6B9B9BDBBBB1C00000000000000000000000000000047C6C9C6C3C3C3C3C3C1BD6B000000000000009BC5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8260000000000000000000000000024436570727A7472472E0400000000000000000000000004B1C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C19B000000000000006AB9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBD430000000000000096BDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECE3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBCECBC9C8CBCFCACAC9CAD3E9C6B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DF2400000000000024DEDEDFDBDBDBDCDCDADCE1E1DFDC0000000000000053DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBB1000000000000007AD1D1D0D0D0CECACACBCBCECBCBC9C9C6C60000000000000046C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1A81000000000000000000000034D9BC3C1C1C1C5C6C6C9C5C5C3B36516000000000000000000000056C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C97700000000000000A7D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3A7000000000000004CD4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDB830000000000000087E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDE5100000000000000E2E4E3E3E4E6EAE6E6E3E3D30400000000000000000054D4E2E4E4E4E4E2E2DFDCDADADADADABB64130000000000000000000000000000000057C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBC0000000000000000085287ACACB0B0B0B0ACA8A7A3A3A3A1A19EA15A000000000000007C9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA23900000000000000000000001E6B9FA7A7A3A3A3A3A3A7A7A7A7753400000000000000000000000E9FACACB1B0B0B2B5B5B9B9B9B6B9BBBD940000000000000069B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C547000000000000009BBFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACAC9CBCBCBCECECA3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CBD1D0CBCED1D3D4D3D3DEF1CAB9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B61B0000000000001CB8B6B6B9B9B8B8B8B8B5B5B5B8B90000000000000043BBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1980000000000000075C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9000000000000004FDBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBD3230000000000000000000065D0E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD988130000000000000000000093DBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D07800000000000000A3CBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBD960000000000000045C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C370000000000000006EC1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCB4B00000000000000CED0D0D0CECBCBCBCBCBD06E0000000000000000007BD0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D08118000000000000000000000000000081DEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBB00000000000000004C4DBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E38800000000000000BBE6E4E4E4E4E3E3E4E2E2E4E2E4E4E4920000000000000000000023A8DBDBDADADADAD7D7D4D1D0CBCBC9C8C8A5350000000000000000000026C4C1C1BFBCBCBCB9B9B6B5B2B1ACAC870000000000000064ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C350000000000000083A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B92E010202020202020202020199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDBDCDBDAD7D7D5D5D6D9E3F6D0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAA1900000000000018A39F9F9F9F9FA19C9B9C9E9E9C9C0000000000000039A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A781000000000000005EA3A3A7A8ACACACACACB0B2B2B2B2B0B0B0000000000000003EACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1AC4B0000000000000000000E93B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B138000000000000000000089CB2B3B8B8B6B6B6B6B6B9B9BBB9BBBB69000000000000008FB9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B890000000000000003FB3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAA600000000000000061ACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB03D00000000000000AAAAA8A7A7A7A7AAAAAAAC20000000000000000064B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0B95B0300000000000000000000000067B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B58C0000000000000038B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC070000000000000009BBFBFBCBCBCBCBCBBBDBBB8B5B5B5A1030000000000000000005ABFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0940400000000000000000064CAC9C8C8C9C8C8C6C9C9C9C9C9C89F0000000000000072C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B33F0000000000000094BDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B12B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCDEDEDCDEDCDBD9DEDEE9F8DACBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C11E0000000000001EC0C1C1C0C0C0C1C1BFC0BDBDBFBF0000000000000044BDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C59B000000000000006FC3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C60000000000000047C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECAA200000000000000000028CAD3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0770000000000000000002CC1C1C0BDC0C1C1BFBDBBB9B9B9B9B96D0000000000000097C0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9920000000000000041BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2650000000000000069B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C14400000000000000BBBBB9B9B9B9B9B9BDBDBF00000000000000002ABBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6A410000000000000000000000070C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C59C0000000000000072C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D17C00000000000000A7D0D3D1D1D1D4D1D4D3D4D4D6D6D73400000000000000000498D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFC513000000000000000004BDE1DFDEDEDEE1E1DFDFDCDCDCDCB30000000000000084E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E15300000000000000AED6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C63302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4F7F7F6F7F8F9F9F9F9FDFFEAE2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBC1D0000000000001DBDBBBBB9BBBBB9B6B6B3B3B1B0B0000000000000003FB6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAA860000000000000058A2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A700000000000000389F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C1D00000000000000001E9FA5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA75E0000000000000000007BA3A3A7A8ACACACACACB0B2B2B2B264000000000000008DB3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABAC8C000000000000003FB3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5680000000000000068B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BC4100000000000000B5B8BBBBBDBDBDBDC0BD9300000000000000007DB5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAA21F0000000000000000000064B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1890000000000000061ABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1610000000000000094BBBBB9BCBCBCBDC0BFBFC0BFBF7D0000000000000000008CBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8A20F000000000000000030B1B3B5B6B2B6B9B9BCBCBCBCB9940000000000000070C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B53F000000000000009BC1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C43202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CBCBCBCBD1D1CBCFCED0D6ECC6B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAA190000000000001AACACB0B0ABABACB0B2B5B5B5B5B5000000000000003DB0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACAC89000000000000006CB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C00000000000000043BDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B58700000000000000000897ACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C34E00000000000000001DBCBCBCBCBCBBBDBBB8B5B5B5B8B8680000000000000094BBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACEA20000000000000049C9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5720000000000000072C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B94100000000000000B9B9B9B9B6B6B3B3B3B3860000000000000003ACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABA31900000000000000000067B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B28D000000000000006BBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5670000000000000096C0C0BDBBBBBBBBB9B9B9B9B9BB15000000000000000065C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B19303000000000000000081B0B1ACB0B0ACAAACB0B1B1B18C0000000000000064B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACAC3D0000000000000084ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BC2F02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5DFE3E2DFDCDCDBDADBDBE6F6D3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACAC190000000000001AACABABACABABABACACB1B1B3B3B2000000000000003EACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B28C000000000000005FA8ACABABACB0B0ACABABABABACB1B2B6B6000000000000003EB1B5B1ACACACB0ACACB1B0ACB0ACACACB12800000000000000007CB0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B11A000000000000000089B6B3B5B9B8B8B9BCB9B9B9B6B6690000000000000096BDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBD970000000000000045C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBC69000000000000006BB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B83F00000000000000B3B3B5B5B8B8B6B6B9B968000000000000001CB9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5AB0300000000000000006DC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9A10000000000000078D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DE8600000000000000B2DADCE1E1DFDCDCDCE1E1E1DEA1000000000000000034DBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D07A000000000000000038CBCBCECBCBC9C9C6C6C6C6C69E000000000000006EC0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C145000000000000009EC9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D03602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E6E7EAEAE9E6E7E7E7E4EFFBDCD1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A51800000000000018A5A5A8ABABABABAAAAA7A7A7A7A8000000000000003AA5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5830000000000000060AAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAA000000000000003DACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B099000000000000000030B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B890000000000000000032B9BCBBBBB8B8B3B6B6B6B5B1B564000000000000008CB1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B58C000000000000003FB2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A25A00000000000000589F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A73B00000000000000ABABABAAA7A7AAAAACAC64000000000000001AB8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C161000000000000000077D0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3A7000000000000007CD6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D47B00000000000000A3CED0D1D0D0D0D4D1D3D3D6D4300000000000000004B6D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2230000000000000000A2BCBCBCC0BDBFBFBBBBBBBB94000000000000006FBFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9410000000000000094BBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB93002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8B5B5B6B9B9BBBCC1BDBDC6DAB2A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBC1D0000000000001DBFBCBFBFBCBCBCBDBDBDBDB9B9B90000000000000041B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBC940000000000000067B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B60000000000000041BBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C85700000000000000009EBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C53F0000000000000000B1BDBDC0C3C5C5C8C4C8C8C9CA7500000000000000A2CACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBD940000000000000043BFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBD6D000000000000006DC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C64700000000000000CBCBCBC9CBCAC9C9CAC99B0000000000000018CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAB9000000000000000077CBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C19B000000000000006BBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B66A0000000000000092B8B5B1B1B0B1B0B1B2B2B1A4000000000000000047B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A77B000000000000000053B0B1B1ACABABACABABABAC880000000000000064ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACAC3D0000000000000087ACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B32C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E9EAE9E7E7E7E6E7E4E7F1FCDCD0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B51B0000000000001AB6B2B2B2B6B2B2B2B6B9B9B8B5B50000000000000044C0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B993000000000000006FBFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBF0000000000000045C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5160000000000000035C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1B2000000000000000081D0D0D0D0D0D0D0D3D1D1D1D47A00000000000000B0DBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBB00000000000000051DCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1830000000000000084E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E35400000000000000D4D7DAD6D4D7D7D7D7D4A70000000000000000C9D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C62E000000000000006EC0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9960000000000000067B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B267000000000000008DB2B1B1B1B1B1ACACACACAC61000000000000000090A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA31F00000000000000179B9C9E9E9C9C9C9E9E9E9E7B000000000000005DA5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A73A0000000000000088ACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8CBC9C9CBCBCBCBCACAD5EAC1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBF1D0000000000001CBCBCB9B9B9BCBCBCB9BBBDC1C1C00000000000000043BCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B58F000000000000006ABBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C00000000000000045BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9B100000000000000008FC9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDE2C0000000000000040E1DFDCDCDCE1E1E1DEE1E1DE8300000000000000AEDBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3A7000000000000004ACACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C06D000000000000006EBDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C54700000000000000C1C1C0BDBDBDC0C1C1C1C5000000000000000077C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCB4A000000000000007AD1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1A70000000000000078D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E38600000000000000B2DFDCDBDBDBDBDCDEDEDEDE3F0000000000000034DEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E29B0000000000000000C0DADADADCDCDCDBDBDADAAE0000000000000077C9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B13D0000000000000089B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7DADAD9DEDEDBE1DEDBE4F6D5C4C4C4C1C1C1C1C0C0C0C0BFBFBDC0C0C0BFBCB9B9BBB8B9B9B9B9B9B9BCB9B8B8B9B9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B51B0000000000001BB9B9BBBBB9B9B9B6B3B1B1B1B1B0000000000000003EACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5840000000000000061ACACACACACB1ACB0B2B5B5B5B8B8BBBBB80000000000000045C0C0C0C1BFBFBFBFBFBFBFC1C3C5C57A0000000000000004C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACA6B0000000000000009C8C8C8C8C6C6C3C6C8C8C9CB7700000000000000A3CECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C59C0000000000000043BCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3720000000000000076CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C14500000000000000BFC0BDBDBFBFBFBDC0C0C0240000000000000016BBC1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0450000000000000074C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C99E0000000000000078D0D1D0D0CECBCBCBCECACACECACECECED0CED07800000000000000A7D0CED0D0D0D0D0CBCED0D30A0000000000000077C9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0B9030000000000000076BFBCC0C0BDBDBCBDBDBD93000000000000006AB9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B23F0000000000000092B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDBBC0BCBBBFBFBBBBBBBBC4DBBCA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B21A0000000000001BB9B9BBB9BBBBB9B9B8B9B9B9B5B50000000000000041BBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B58C0000000000000064B0ACACACABACABABABABABAAAAAAAAAAA8000000000000003DB0ABABACB0B2B5B5B5B5B5B5B3B3B146000000000000002FACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBA20000000000000000A7BFBFBFBFC1C0C0BCC0BCBC6C0000000000000094B9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACAC8C0000000000000041B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBF6B0000000000000068B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CA4900000000000000D0D0D0CECACECACACACBCA64000000000000000047C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4450000000000000070C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBD960000000000000069B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB167000000000000008FB6B2B2B6B3B3B1B1B1B19B000000000000000097B0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BB2B0000000000000049B9B9B9B9B9BCBCB9B8B68F000000000000006BBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8480000000000000097BFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B32C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D3D5D1CFCECBCBCBC8D6EBC6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BB1C0000000000001DBFBFC0BFBFBFBFBFC1C0C0BCC0BC0000000000000043BDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B18C000000000000006BBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C50000000000000043BCBCBCBBBDBBB8B5B5B5B8B8B8B9B6230000000000000065C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8090000000000000087C8C8C5C3C5C3C1C4C4C4C170000000000000009CC5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBC930000000000000041B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8680000000000000065B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B33F00000000000000B0ACB1B1B1B1B3B2B2B2B2A70300000000000000002BA5BDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C043000000000000006AB9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C99E000000000000006DBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1640000000000000088AAACB0B1B1B1B1B1ACAC69000000000000000EB3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A852000000000000001FA5A7A7AAACACACB1B3B58F0000000000000067B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC145000000000000009CC1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D03602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBCBCFCED1D0CFCED1D1DFF4D1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC11E0000000000001DC3C3C1BFBBB9B6B6B6B9B9B9B9B90000000000000041B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9A10000000000000077D0D0CBCECECEC9CACACECACACACED0D0D3000000000000004ACED0D1CECECECBC9C9C6C6C6C8C9C9110000000000000097D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B82A000000000000005FB6B3B1B3B5B3B6B3B1B1AC610000000000000087A8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAA86000000000000003AA7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A35E000000000000005DA7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAA3B00000000000000B0ACB0B0B0B1B1B0B0B0ACB14600000000000000000003468DB2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B63F0000000000000067B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B68F0000000000000067B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B567000000000000008FB1B2B2B3B1B1B1B1B2B25C0000000000000026A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F6F000000000000000C9EA2A3A7A7A7A8A8ABA783000000000000005EA7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8400000000000000096BDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CE3602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C1C0C0BFC0BDBCBDC0BDC6DCB9A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D32100000000000021D0D3D0D1D1D3D0D0CECECBCACACB000000000000004DD4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1A70000000000000072C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C40000000000000044BCBCB9BBBBBBBBBBB9B9B9B8BBB8B800000000000000009CBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BC430000000000000041BBBCBFBCBCBDC0C3C3C0C16D0000000000000097BFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC19B0000000000000045C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B969000000000000006CBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C94800000000000000CED0D0CBCECECEC9CACACECAC311000000000000000000000011538CB9CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D14C0000000000000076C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBF980000000000000069B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1AC610000000000000087A8A8A5A3A3A1A1A3A5A53A0000000000000039A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5880000000000000000A8A8A7A7A5A5A7A7A8AB88000000000000005FA7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B03D0000000000000089B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B930020201010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D5D6D7D7D9DCDBDEEAF7D5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C51F00000000000020CECECED1D3D1D3D4D4D1D3D3D1D4000000000000004CD0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4AB0000000000000080DBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDB0000000000000051DEE1E1DFDFDCDCDCDCDFE1DFDCDCBD0000000000000000E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D475000000000000004CD1D1D1D1D1D1D0D0D1D1D37800000000000000A7D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0980000000000000043BCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACAB610000000000000065B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACAC3B00000000000000A19EA2A2A3A3A3A3A5A5A3A3A177020000000000000000000000000000021838455A677C89A19C9B9C9E9E9C9C9C9E9E9E36000000000000005EA5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA783000000000000005FABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B265000000000000008DB3B3B1ACACAAA8A7A7A5390000000000000061ACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B800000000000000009EB5B5B2B2B3B8B8B6B690000000000000006CB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBD450000000000000090B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E4E4E2E1E2E3E1E1E6E2EFFBDBD0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B91C0000000000001CBCB9B6B9B5B9B9B8B8B5B6B6B9B8000000000000003FB6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C59B0000000000000067B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBF0000000000000045C0C0BFBFBBBBBBBFBFBFBCBCBCBB960000000000000000C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8720000000000000026CBCECECED1D3D1D3D4D4D17B00000000000000A7D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4AA000000000000004DD4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDB810000000000000084E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E45400000000000000E1E1DEDFDEDFDEE1E1E3E3E1DFDBA504000000000000000000000000000000000000000000000A20445F84B0D3D0CECECE4A0000000000000077CACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C098000000000000006DBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6670000000000000089B1B1B1B2B6B2B2B2B2B61C0000000000000065B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3000000000000000086AAA7A5A39F9FA3A5A37C00000000000000589E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A83A0000000000000086A7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEACFD3D0CBC9C9C9CBCECEDAEBC6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BD1D0000000000001DBDB9B9B9B9B9B9B9B6B6B3B3B3B3000000000000003DACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABAB860000000000000064B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B30000000000000041B9B8BBBCBCBCBCBCBDB9B9B9B9B9920000000000000000B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C172000000000000001EC1BFBFBCB9B9B9B8B5B5B565000000000000008CB5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B38C000000000000003EB2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABAB61000000000000005FA8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B23F00000000000000B1B1B3B3B5B2B2B5B8B8B9BCB9BBBB8D0F000000000000000000000000000000000000000000000000000000042D61A7C9480000000000000077CED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3A70000000000000077D0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADA8000000000000000AEDBD9D6D3D6D3D1D1D1D0200000000000000075C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8000000000000000094B9BCBCBFC1C1C1BFC096000000000000006FC4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBB430000000000000098C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C332020202020202020101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9DADADBDCDCD9D9DADEE7F7D4C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD72300000000000024DEDEDEE1E1DFDFDCDCDCDCDFE1DF0000000000000053E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBAE000000000000007CD7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0000000000000004ACECECED0D0D4D0D0CECECACAC8C89F0000000000000010C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B364000000000000001AB1B2B6B2B2B2B2B6B9B6B665000000000000008CB1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3800000000000000039A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C5800000000000000589EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7AB3A00000000000000A7A7ABA7A7A7A7A7A3A3A7A8ACACACAC9D35000000000000000000000000000000000000000000000000000000000000191A0000000000000064B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9940000000000000067B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6670000000000000092B8B9B9B9B5B5B5B9B9B91D0000000000000068B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0AC0E0000000000000087AAAAAAAAAAA8A8ABA8870000000000000061B0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAA3B0000000000000088ACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED3D4D7D7DADAD9D9D9D6E1F6D3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C61F0000000000001FCBCBD0D1D1D0D0D0D0CECACAC9C80000000000000047C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B18D0000000000000061B1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A50000000000000039A5A5A8ABABABABAAAAA7A7A7A7A8840000000000000000A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0AB5F0000000000000019A7A7A7A5A7AAAAAAAAAAAB640000000000000089B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5900000000000000043BBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3670000000000000068B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B53F00000000000000B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B28521000000000000000000000000000000000000000000000000000000000000000000000000005CA2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7820000000000000061ABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B368000000000000008DB2B5B8B8BBB8B8BBBBBB1C000000000000006FC1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D60000000000000000A7CED0D0D3D0D3D3D3D4AA000000000000007CD4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCE4A000000000000009BC3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBF3202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7C8C9CBCECACAC8C9C9C9D5EAC9B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E22400000000000023DFDBDBDBDCDCDADCE1E1DFDCDCDC0000000000000051E1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCB0000000000000007AD0D0D0CECACACBCBCECBCBC9C9C6C6C6C60000000000000045C1C0C0C0BDBDBDBDBDBDBDC0C0BD980000000000000000C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5700000000000000035C4C6C9CBCECEC9C9C9CBCB7800000000000000A5D0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0A3000000000000004CD1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDE860000000000000083DCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDE5300000000000000E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2B65F140000000000000000000000000000000000000000000000000000000000000000000072C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9920000000000000061ABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E58000000000000007B9E9E9B9E9E9E9B9C9C9C24000000000000005FAAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1AC00000000000000008FB9B9B9B6B9BBBDBCBD96000000000000006CBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C5C5C545000000000000009BC5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACAC9CBCBCBCECECACECE3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECCFD4D4D6D7D3D6D7D9D4DEF3CEBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BB1C0000000000001EC0C0C3C3C3C5C5C3C3C0BDBDC1C1000000000000002EC5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBB20000000000000086E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E10000000000000051E1E1DEDEE1DCDBDBDBDBDBDADBD9C80000000000000000CED4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6570000000000000045C1C0C0C0BDBDBDBDBDBDBD6E0000000000000099C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3990000000000000045C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0780000000000000078D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CE4A00000000000000D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBBB78402400000000000000000000000000000000000000000000000000000000000083DEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3B60000000000000087E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADC8100000000000000ACD7D4D1D0CBCBC9C8C8C647000000000000005CC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A19B00000000000000009BA29F9F9E9E9E9B9E9E7B000000000000005AA3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A83A0000000000000089B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDB6B8B8B6B8B9B9B9BDC0C9DFBCAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B01A0000000000001AB2B5B5B8B8B8B3B3B8B9BCBCBBB8000000000000001BB9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B68F0000000000000067B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1000000000000003FB2B5B5B1B2B2B3B1B1B1B1B2B2B0AC000000000000000083A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F350000000000000045A3A7A7A7A8A8ABA7A7ABA7610000000000000086ACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BB900000000000000043BDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED07C000000000000007BD1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D44E00000000000000D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBB5A381775B482E1E09000000000000000000000000000000000000000067B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBB94000000000000006FBFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B96B0000000000000092B9B9B9B9BBB8B5B8B8BB4A0000000000000040B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9920000000000000000BFBFBFBFBFBDBDBFBCBC920000000000000051B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C445000000000000009EC9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0D4D4D3D7D7D7D7D9D9E4F7D7C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C51E0000000000001DC0C1C4C1C3C5C3C4C6C8C8C8C5C80000000000000017C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACEA3000000000000007BD1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0000000000000004AC9C6C4C1C1C1C1C1C1C0BDC0C1C1BF1D0000000000000076BFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B81C000000000000006DBDB9B9BCB9B6B9B5B9B9B8680000000000000090B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1990000000000000026C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BF6D0000000000000045C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C44700000000000000C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECEB1A87A724D291200000000000000000000000078D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4AA000000000000007CD4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDF8300000000000000B0DBDCE1E1DFDEDEDEE1E1830000000000000024DCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E38F0000000000000022DAD6D4D7D7D7D7D4D1D1A7000000000000004BD0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6460000000000000098C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B62D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9D7D7D9DADEDCDEDEDEE7F7D5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A11700000000000016999997979796979B9B9E9E9E9EA10000000000000000A2A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5900000000000000067B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBD0000000000000045C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6360000000000000057C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9000000000000000089B5B6B6B6B8B8B9BBBBBBBC6B000000000000006FB5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B18D000000000000000FB6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6750000000000000033BCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C54700000000000000C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5BD8A1E00000000000000000069B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBF97000000000000006DBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C472000000000000009CC3C3C6C6C6C6C4C6C6C9990000000000000004C9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9500000000000000036C9CAC9C8C5C5C5C6C6C9A20000000000000028C9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8400000000000000090B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B22C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C4C3C1C0C0BFBCBDBDC3D7B6A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B51B0000000000001AACACB0ACACB1B0ACB0ACACACB1B300000000000000008CB0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B18D0000000000000067B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBB0000000000000043BBB9B9BBBDBDBBBDC0C0C0C0C1C1C561000000000000001DBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBC810000000000000000B1B9B9BCBCBCB9BBBDC1C1C06F0000000000000053BCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8900000000000000000B1B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5700000000000000016C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C94800000000000000DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDA3E00000000000000007CD4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1A70000000000000077CBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C16E0000000000000096BDC0C0BDC0C0BFC1C1C1B9000000000000000093C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3160000000000000065CEC9C9C9CBCBD0D0D3D3A80000000000000004CBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D44C00000000000000A7D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDE3B02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBD1D1CED1D1D0D0D1D3DBF1CEBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C31E0000000000001FC8C5C5C5C3C4C6C6C9C9C9C9C5C8000000000000000065CEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9750000000000000074C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C50000000000000047C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9810000000000000000A7B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3470000000000000014ABABABAAAAA7A7A7A7A8A8AB5F0000000000000013A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A581000000000000000076AAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0AC640000000000000000A2ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B84100000000000000B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2A2030000000000000064B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B18C0000000000000061A7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA35A000000000000007C9E9F9EA2A3A7A3A2A3A29F1200000000000000449EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B59D00000000000000007DB2B5B8B8BBB8B8BBBBBB9000000000000000009BC5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D34C00000000000000ABD6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECE3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9DADAD9D7D7D9DCDEDAE4F6D3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C91F0000000000001FC8C8C4C4C1C4C4C1C1C1BFBFBFBF000000000000000024B9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C16F0000000000000072C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBC0000000000000044BCBCBDC0C3C3C0C1BFC0C0C1C1C1C1B6030000000000000067C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C109000000000000004EB6B6B9B9B9B9B9B9B9B9B9B667000000000000000098C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9A100000000000000005BCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED04C000000000000000082C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C92600000000000000C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A130000000000000005CA3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8AB83000000000000005DA7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A85F0000000000000083A8ABACB0ABA7AAAAAAABA741000000000000000DAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABAB4B0000000000000003B1B3B3B8B9BCBCBBB8BBBB92000000000000000057B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B530000000000000008CB1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A328010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C9C9C9CECECBCED1D1DCF3CEBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B91A0000000000001AB2B5B8B9BBBCBCB9B6B3B5B5B5B20000000000000000009CB2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C63F0000000000000070C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C30000000000000047C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3350000000000000016C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C57A000000000000000086BDBCB9B9B9B9B8B8B9BCBFBC6B000000000000000034BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C39C000000000000000009C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCB40000000000000000038CECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C91000000000000000C6C9CAC9C8C5C5C5C6C6C9C9CBCB4A4A4A484A4A4896C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8680000000000000067B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B18D0000000000000067B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5670000000000000087A7A7A7A5A3A7A7A8ABACAC78000000000000000077ABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8A308000000000000002FB0B1ACACACB1B1B1B2B1AC8700000000000000000DABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACAC0E0000000000000088ACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B52E010101010101020201010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0DBDCDEDFE3E4E1E2DFDEE7F7D7C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B61B0000000000001CBBBCBDC1C3C6C4C4C4C6C6C8C8C80000000000000000004EC1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5170000000000000070C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C90000000000000048C9CACACBC9C9C6C6C8CAC8C9C6C9C5C57A000000000000000075BDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0160000000000000009BCBFBDBDBDC1C3C4C8C5C5C5C4720000000000000000008BC6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAA200000000000000000081CACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C81E000000000000000004B6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1BB0000000000000000BBBBB9B5B5B5B8B8B8B8B6B3B3B60F0000000000004EB9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6690000000000000065B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7810000000000000061ACACABACB0B1B1ACABABACABABABACACB1B1B367000000000000008CB1ACAAAAAAA7A7A7AAABA8AB080000000000000020B0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABAB5A000000000000000075B5B5B1B1B5B1ACACACB0AC880000000000000000006EB1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8A10000000000000000A2B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DADBDBDBDCE1DFE2E3E3ECFBD7CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABAB1900000000000018A8ABACACACACACABACB0B1B1ACAB0000000000000000000396B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1A2000000000000000074B1B1B2B1ACABABACACACACA8A8ACABABAC000000000000003DB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACA508000000000000000DA5ACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B85800000000000000004CB0B1B3B8B8B8B8B9BBB8B5B6B667000000000000000000089EB9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C09800000000000000000016BDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBB030000000000000000004CBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C08A0000000000000000BCBDB9B8B3B3B8B9B6B6B3B5B3B31A00000000000032B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C16F0000000000000072C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9A10000000000000074C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDE8400000000000000B6E3E1DEE1DEDEDFDBDBDBDCDC6300000000000000008FE1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7C90A000000000000000ACAD0D1D1D1D1D0D0D0CECACAA300000000000000000017C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1800000000000000000C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CB3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEACFCFCBCACED1CFD0D0D0DAEFCAB9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D12100000000000020D0D0D0D0D0D3D1D1D1D4D1D4D3D40000000000000000000031D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDC7A0000000000000000B0DBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDF0000000000000053E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E15D00000000000000005FE3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1B9040000000000000000BFCECECED0D0D4D0D0CECECACAC8740000000000000000000017AAC1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BD96000000000000000000005DB0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B27D000000000000000000000397ACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A539000000000000000DA7AAA8AAAAAAA7A5A39F9FA3A5A33000000000000002979E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8AC5A000000000000007CA7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7840000000000000065B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A75D0000000000000089ABACB1ACACACABACB1B1B2B29B0000000000000000089CB6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B332000000000000000052B9BBBBB9B9B8B9B9B9B5B5B5920000000000000000000058B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1280000000000000008ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACAC2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DAD9DADBDCDFDEDFDFDBE9F8D7C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B61B0000000000001AB1B1ACACB1ACACB1ACABA8ABA8A8000000000000000000000047A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A59F080000000000000000A2A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7000000000000003DB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AA9C03000000000000000070B0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2AB1500000000000000004ABCBBB8BBBBB9B6B2B2B5B6B9B6B26700000000000000000000000E9DB8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB18D00000000000000000000038DB1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B34600000000000000000000001FA7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA29F08000000000000001EA7A3A2A3A29F9F9F9C9B9B9F9B9F4B0000000000000065ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B830000000000000008DB5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC19B0000000000000075CECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D37B00000000000000A8D6D6D6D4D3D0D0CED0D0D3D0D34400000000000000002AD4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECE65000000000000000004B9C5C4C3C3C0C0C0C1C0BFBDB996000000000000000000000089B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFA2000000000000000023B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B62D01010101010101010101029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CBD0D3D1D4D1D3D7D7D6E1F6D1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8AB1900000000000019A5A7A7AAACACACB1B3B5B5B6B9BC00000000000000000000000064B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C145000000000000000016C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9000000000000004ACECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D15F0000000000000000049CCECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBD42B000000000000000004C1D1D0CECECECEC9C8C6C9C9C9C9C9760000000000000000000000000980BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB890000000000000000000000010A8BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9B90400000000000000000000000043BCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC05E00000000000000004CC1BDC1C1C1C1C4C1C1C1C1C1BFC1900000000000000016BBC1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B69B0300000000000000A7B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6A10000000000000072C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECE7700000000000000A5D0D0D3D4D1D0D1D0D0CECECED0C104000000000000000047C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C97600000000000000000064BBBFC0C0BDBBB9B9B9B8B9B9B99200000000000000000000000386B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A59F13000000000000000041ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A72A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE5C8CBCBC8C9C9C5C6C8CBD6EAC6B5B5B5B8B8BBB8BBBBB8B8B6B8B8B8B3B3B3B8B8B9BBBBBBBBBBBBBBB6B6B3B6BBBBBCBCBCBCBFBCB9B8B6B6B5B1B5B5B5B1B3B3B2B3B1B1B1AEABABAEAEAEAEABACACAAACAAAAAAAAAAA8A8A8A8A8A7A7AAA7AAAEABABAEAEAAAAABAEB11A0000000000001AB1B1B1B1AEAEAAAAAEACABACAAAA000000000000000000000000004AA3B0B0B0ABABAEB1B3B1B3B6BBBBBBB8BBBBBBBC7D00000000000000000054BFBBBFBBBBBBBBBCBCBCBCBCBCBBB8B3B1B3000000000000003FB3B3B3B6B8B6B3B3B1B0ACACACB0B1B0B2B3AC0E00000000000000000373BBBBB9BBBBBFC3C3C4C4C4C3C1BDC1BDBDBBBBBBBBA31C00000000000000000061B5B5B3B3B3B8BBBBBDC0C0C3C0C3C372000000000000000000000000000038ABC9C9C9CAC9C9C9C9C9C8C6C6C9C6C6C5C8A10000000000000000000000001099C3C4C4C3C3C3C5C5C4C4C3C1C1C1C0BFBF4D000000000000000000000000000041BBB9B9BBBCBCBCBCB9B9B9B9B8B8B8B5B59C03000000000000000072ABABABACB1B3B6B6B9B6B2B2B3B3B508000000000000003DB0ACAAAAAAAAA8ACABABAEAEAEAEAEB1B2B2B1B3B3B3B1AA21000000000000000EB1B1B1B5B8B8B8B8B6BBBBBBBBBBBBBCB9B9B9920000000000000067B5B3B3B5B9BBBBBBBBBBBCBFBFBCBBBBBBBBB8690000000000000094BDBBBDC0C0BFBFC1C1C3C6C8C5C46100000000000000000032B0B3B3B3B1B1B1B1B1B2B2B2B1B3B1AEAEAEAEB1ACAE5400000000000000000014A5ACACB1B2B1B0B1B1B2B2B1ACB18C0000000000000000000000000267ACACACAAACACACACAAAAAAAAA7A7A7AAA7A7A7A73A00000000000000000078B0B2B3B3B5B8BBB8B6B6B3B2B1B3B5B5B2B2B0B0B1B1B1B2B2B3B1B1B3B6B6B8BBB8BBBBBCBBBCBDC0C0C0C0C0C0C3C3C3C332020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE1C0BFBFC0BFBFBDC0C3C5D0E7C4B1B1B1B0ABABAEB1B1ACA8A8A8A7A7A5A8AAA7AAACACACAEB0B0B0ACACAEB0ACABACB0B0B0B1B0ABAAAAABABABABA7A7ABAAAAABAEAEACAAAAAAAAACB1B1B5B5B3B3B6B3B1B3B3B1B1B3B1ACACACAEACACB0AEACAEABACACB0B2B2B0B1B11B0000000000001BB0B0B1B2B2B2B2B2B2B6B2B3B6B600000000000000000000000000001C89B8BBB6B3B5B5B2B3B8B6B6B9BBB8B8B8B55F0000000000000000000094BBB9B8BBBCBCBBBCBFBFBFBFC1C1C4C4C3C30000000000000043BDC0C0BCC0C0C1BDBCBCBCBCBCBFBCBCBFBCBB830000000000000000000041B1BBBBBBB6BBB9BBBBB8B9B9BBBBBBB9BBBCC07E090000000000000000002ABCB9B6B2B2B6B9B5B5B2B3B2B2B3B3B667000000000000000300000000000000002978B1BBBCBBB6B6B6BBBBBCBDC0C0C0C09A00000000000000000000000000035EB9BFBDC1C3C4C8C4C8C8C8C9C8C8C8740000000000000000000000000000000032BDD9DADCDFDFDFDFDEE1E1E1E1E2E1C314000000000000000004D4DFDFDEDBDBDBDFE1E1DCDFDFDCDCDF6400000000000000004ED7D9D9D4D4D4D3D3D4D4D7DADADADBDBDBDBDAD7D4C928000000000000000048C9CACACECACAC9C9C5C5C5C5C5C5C6C4C4C3C399000000000000006BBCBCBCBFBFBCBFBFBDC1C0C0C0C0C3C3C3C1C1700000000000000099C1C4C5C5C8C4C4C3C3C0C1C1BFBCBC1D000000000000000000169AC3C3C1C1C3C5C8CACECBC9C9C9CACACFD0D1B93B00000000000000000000A2CACACFCACECECECED0D0D0D1D1D1A5000000000000000000000000000038B5CFD0D0D0D0D0D0D0D0D4D7D7D7D7D7DAD1480000000000000000000AE1DEDBDBDBDBDEDBDADADADADBDCDCDCDCDCDCDBDCDFDCDCDCDCDCDEDEDEDEDFDFE1E4E2E2E4E6E9E6E6E2E2E2E6E6E3E4E4E33D020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE5C6C6C3C4C6C6C8C9C5C6D1E7C1B1B1B1B1B1AEABAAAAA7A5A5A5A7A7A7A5A5A1A19F9F9C9C9C9E9EA1A19E9EA1A5A5A19E9E9C9E9CA1A3A7A3A1A3A19E9E9E9C9A9A9E9A9E9C9CA1A3A5A5A5A7A7AAA7A7AAA7AAAAAAAAA8A5A5A8A8ABACB0B2B1B1B1B1B3B3B2B6B5B5B11A0000000000001CB6BBB6B6BBBBBBB6BBBCBCBCBCC0000000000000000000000000000000002888C3CACED0D3D0D0CFCFCFCFD1D19E290000000000000000000021D0D0CBD0D0D1D0D1D1D1D4D4D4D4D3D1D4D4D3000000000000004CD0D0D0D3D0D1D1D4D3D0D0D3D0D1CFCBCBCBCFCF5A000000000000000000000964B8BFC1BFBDBCB9BCB9B9B6B5B8B5B18722000000000000000000000FA7BCBDBDBBBBBBBBBBB8B9BBBDBDBDC1C16D00000000000000780000000000000000000000153A424141413F40B8B8B8B8BBB68D0000000000000000000000000000000E5FA5B6B6B8B5B5B3B5B5B3B5AC580000000000000000000000000000000000000348A3B8BBBDBBBDBDBDBDBDBCB564030000000000000000003AB9B9BBBDBDBCB9BCBFC1C1C1C1BDBFBFB00300000000000000001EA4C3C0C3C5C8CACAC8C5C5C9C9C9C9CACBCBC37C09000000000000000000A1C8CAC9C9C6C6C3C4C5C3C1C1C3C3C3C3C0C0C099000000000000006EBCBFBCBCBFBFC1BFC1C3C3C3BFBFC0BDBBB8B867000000000000008DB6B3B2B2B2B2B2B6B6B6B6BBB9B6B39D03000000000000000000003997B6B2B2B6B9B8B8BBBDBDC0BCBCBBAC4A030000000000000000000067C3C3C3C3C6C3C3C0BFBFBFC3C0C3C099000000000000000000000000000000044097C6C4C4C4C4C4C1C0C0C3C0C3BB750F000000000000000000004ABBBBBBB8B8B8B8B6B6B3B3B1B3B3B3B3B3B1B1B1B1B0ABABB0AEAEAEABACACAEAEAAA7A7A7A7A7ABAAA7A8A7A5A5A5A5A7A7A529010101010101010101010198FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE5C8C6C9C6C8C8C4C5C8C8D3EAC5B3B6B9B8B5B3B3B3B3B3B8B8B8B8BBBBBBBCBCBBBFBFBCBCBCBBBDBDBFC0C3C0C3C5C3C3C5C5C6C5C4C6C6C3C3C3C5C5C6C9CBCECACAC8C5C5C5C8C8C8C5C3C1BDBBBBBBBBB9BCBBBBBDBDBDBDBBBDBDBBBBBBBCBCBCBCB9B9B9B5B9B8B31C0000000000001AB5B6B6B8BBBBBBBBBBB8B8B3B6B600000000000000390300000000000000000003284E6488888889898364360E0000000000000000000000007ABBBBBBBCC0C3C5C3C3C3000000000000000000000000000000000000000000000000000072C3C3C4C8C6C6C5C4C4C5C3350000000000000000000000034581B2C0BDBFBCBCBFC3BD93611000000000000000000000000498C9CAC8C8C5C5C6C9C6C9C5C8C4C4C4C6C47200000000000000BB49000000000000000000000000000000000000C0BCBDBDBDC099000000000000003B00000000000000000000254E729C9C9B9B9C7A4509000000000000000000000326000000000000000000001F5175A2A19FA2A17F400A0000000000000000000000AAC9C9C8C8C8C9C9C9C6C6C8C8C6C6C3C5C858000000000000000000002672B9C9CACACACACAC9CBCAC9C5C58D5609000000000000000000002CC0BCBBBBBBB8B3B3B3B6B667000000000000000000000000000000000000000000000000003DB1B1B1B1B1B1B1B3B6B5680000000000000090B5B6B5B1B3B6B6B8B8B3B3B1B1AEACAC7E000000000000000000000000195A88ABAAABAEB0B0ACAA94692D0000000000000000000000003BABAEB1B1ACA8A8A8A7A7A5A8AAA7AAAC88000000000000002600000000000000000000082D5267878783838777582E08000000000000000000000003A5B6B3B1B3B3B1B1B3B1ACACACAEACACB0AEACAEABACACB0B2B2B0B1B1B1B2B2B1B1AEB1B1B0B0B1B2B2B2B2B2B2B6B2B3B6B6B62E010101010101010101010198FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE9D0CECACBCBCBCBCBD0CBD3EBC8BBBBB8B3B2B2B5B6BBB6B6B3B5B2B5B3B6B6B8B5B5B3B5B5B3B5B5B8B8B8B6B5B9BBBBBDBBBBB9BBBBB6B9B8B8B8B8B8BBB8BBBDBBBDBDBDBDBDBCBCBDBBBBB8BBB8B5B5B5B8BBB9B9B9BBBDBDBCB9BCBFC1C1C1C1BDBFBFBFC3C4C3BFBF1D0000000000001DC3C5C8CACAC8C5C5C9C9C9C9CACB0000000000000074720000000000000000000000000000000000000000000000000000000000000000002BBFBCBCBFBFC1BFC1C3C3C3000000000000000000000000000000000000000000000000000067BBB9B6B3B3B3B2B2B1B1B0AA210000000000000000000000000000031D1D241C1D0F00000000000000000000000000000393C6C3C3C0BFBFBFC3C0C3C0C1C3C3C6C6C6C57200000000000000C4BF260000000000000000000000000000000000BFBFBFBFBCBC9400000000000000903900000000000000000000000000000000000000000000000000000000000058A21F0000000000000000000000000000000000000000000000000000000000002E96979794979A9A9C9C9C9C9FA1A1A1A5A5A5A2140000000000000000000000000E263E55676767643F371A030000000000000000000000000396B3B3B3B8B8B8B8BBBBBBBC6B0000000000000000000000000000000000000000000000000046C3C5C5C6C9CBCECACAC8720000000000000099BDBBBBBBBBB9BCBBBBBDBDBDBDBBBDBDBB6C000000000000000000000000000000151C1A221A1A00000000000000000000000000000038B3B1B1B3B6B8BBBBBBB9B5B2B3B3B3B1B38D000000000000008C3E00000000000000000000000000000000000000000000000000000000000000000069C3C3C3C3C3C0BCBBBBBBBDBFBFC1C1C1C4C3C3C4C8C6C6C5C4C4C5C3C5C5C6C4C6C6C9C6C4C6C3C3C3C3C3C3C0BDBFBCBCBFC3C433020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF6E4E6E4DFE1DFDBDADEDEEAF8D4C3C5C6C5C3C3C0BDBDBBBDBFBFBCBBB9B9B9B6B8B8B8B8B6B6B5B5B5B5B2B0B2B3B2B5B2B1B1ACACB0ABABB0ABAAA7AAA7A7A5A1A19F9FA1A5A5A7A3A3A3A3A3A5A5A5A7AAAAAAAAA8A8A7A7A7A7A7A7AAA7A7A5A5A5A7A5A5A5A5A8A7A51800000000000018A5A3A5A5A3A5A7A7A7A7A5A5A5A5000000000000005EA85F000000000000000000000000000000000000000000000000000000000000000EA1ABB0B1B1B1AEAEAEAEAAAA000000000000000000000000000000000000000000000000000068B5B1B5B8B8B8B6B6B6B5B5B2AB210000000000000000000000000000000000000000000000000000000000000000000384B1B1B1B2B1B2B3B3B2B1AEB1B1B1B3B3B1B1B16500000000000000ABAAA418000000000000000000000000000000009EA1A19E9EA181000000000000007D9C1F0000000000000000000000000000000000000000000000000000000019AAAAA21F000000000000000000000000000000000000000000000000000000000FA7BBBBBBB6BBBCBCBCBCC0BDC1C1C4C4C4C8C9C9B509000000000000000000000000000000000000000000000000000000000000000000000088D0D0D1D0D1D1D1D4D4D4D4D37A000000000000000000000000000000000000000000000000004BCBCBCBCFCFCACBCACECA750000000000000097BFC1BFBDBCB9BCB9B9B6B5B8B5B1B5B5B5B5670000000000000000000000000000000000000000000000000000000000000000000041BBBBBBBBBBB9B5B5B8BBBBBBBBBBBBB9B5B8900000000000000090BB39000000000000000000000000000000000000000000000000000000000000002ABBBDBBBBB9BBBBB6B9B8B8B8B8B8BBB8BBBDBBBDBDBDBDBDBCBCBDBBBBB8BBB8B5B5B5B8BBB9B9B9BBBDBDBCB9BCBFC1C1C1C1BDBF30020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEBD5D7D6D1D5D1D1D5D7D6E1F4D0C1C3C3C4C4C4C5C8C8C8C5C3C3C0BDBDBBB8B8BBBBB9BBBBBBBBBBBCBBBBBBBDBBBBBCBFC3C3BFC0BDBFBFC0C0C0C0BDBDBDBDBDC0BCC0C1C1C0C3C0C0C0C0C1BDC1BFBCBCBCBBBCBCC0C1C1C1BDC1C1BDBDC1C1C3C3C3C3C1BFBFC3C3C01D0000000000001CB8B9B9B9B9B9B8B5B5B5B8B8BBBB000000000000006FC3C37804000000000000000000000000000000000000000000000000000000000497C9C9CEC9C9C9CED0D0D1D4D0000000000000000000000000000000000000000000000000000075CFD0D0CFD0D0D0CEC9C9C9C6C4C050000000000000000000000000000000000000000000000000000000000000000E8DB0B2B3B2B5B2B1B1ACACB0ABABB0ABAAA7AAA7A75D00000000000000A7A3A38D1E000000000000000000000000000000A7A7AAA7A7A5810000000000000082A5A11F00000000000000000000000000000000000000000000000000000390A8A8A8A41F00000000000000000000000000000000000000000000000000000381AEAEABB0B1B1B1AEAEAEAEAAAAACACB1B1B1B3B3B6890F00000000000000000000000000000000000000000000000000000000000000000067B6B9BBBBBBB6B6B2B5B5B5B3B167000000000000000000000000000000000000000000000000003FB2B1AEB1B1B1B3B3B1B1640000000000000088ABAAAAA7A5A5A5A7A7A7A5A5A1A19F9F9C9C9C7507000000000000000000000000000000000000000000000000000000000000004CA3A5A5A5A7A7AAA7A7AAA7AAAAAAAAA8A5A5A884000000000000008CB3B33F000000000000000000000000000000000000000000000000000000000026BDC4C8C9C9CEC9CECECFD0CECECECACACED0D3D0D0CFCFCFCFD1D1D0D3D1D0D1D4D1D1D4D4D4D4D1D0D0CBD0D0D1D0D1D1D1D4D4D4D438020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE8CED0D1D5D9DBD9D9DADCE7F7D5C6C8C6C5C8C5C3C3C3C3C3C0BCBBBBBBBDBFBFC1C1C1C4C3C3C4C8C6C6C5C4C4C5C3C5C5C6C4C6C6C9C6C4C6C3C3C3C3C3C3C0BDBFBCBCBFC3C4C4C6C3C6C6C8C9C9C9C9C9C8C8C9C9C9C9CAC8C8C5C5C6C9C6C9C5C8C4C4C4C6C4C4C1C11E0000000000001CB9B8B6B6B9BBBDBBBBB9BCBFBFBF000000000000006DC0C0C08F0F00000000000000000000000000000000000000000000000000001093C4C4C3C3C5C5C5C5C3C5C5C9C9000000000000000000000000000000000000000000000000000077CECACAC9C9C8C8C8C9C9C9C6C6C8C87B040000000000000000000000000000000000000000000000000000000035BDC3C3C3C4C3C3C1C1C1C0C0C0C0C0BCBBBBBBB8B3B36700000000000000B5B5B5B5AC220000000000000000000000000000B0AEB1B1B1B18C000000000000008CB5B8B1320000000000000000000000000000000000000000000000000277A5A5A7AAACAB4A000000000000000000000000000000000000000000000000037EAEB1B1ACA8A8A8A7A7A5A8AAA7AAACACACAEB0B0B0ACAC9714000000000000000000000000000000000000000000000000000000000000037EB5B3B3B6B3B1B3B3B1B1B3B1ACAC61000000000000000000000000000000000000000000000000003DB1B2B2B2B2B2B2B6B2B367000000000000008CB1AEAEB1B2B6B6B6B6B8BBB6B3B5B5B2B3B8B6B6A22A000000000000000000000000000000000000000000000000000000001088C4C4C3C3C0BFBFBDBCBDBBBDBDC0C0BCC0C0C1BD940000000000000097BCBBBB7303000000000000000000000000000000000000000000000000000024B9C0BFC1C3C1C3C0BCBBBCBBBBBCB9B6B2B2B6B9B5B5B2B3B2B2B3B3B6B6B5B5B9B9B6B6B6B6B3B3B3B6B9B9B9B9B6B8B9BBBCBBB6B6B630020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDE6CBCECECBD1D1D1D1D5D3DEF3CEBDBDBBBBBBBFBFBFBDBDBBBBBBBDBDBDBBBBBBBBBCBCBDC1C3C3C4C3C4C3C3C5C4C3C3C3C3C3C4C3C3C3C3C3C3C4C4C4C3C3C3C4C4C4C4C5C3C3C3C3C3C4C4C5C3C3C4C3C3C3C4C8C8C9CACACBD0D1D0D1D1D1D0D1D1D0D1CFCFCFCFCFCF2000000000000021D0D1D1D3D3D4D4D5D9D9D5D3D3D3000000000000007BD3D4D4D1CB4D00000000000000000000000000000000000000000000000035C4DCDBDBDBDEDEDCDCDBDBDBDBDCDE000000000000000000000000000000000000000000000000000081DCDBDCDBDEDEE1E1DFDCDAD7D5D3D3D3C546000000000000000000000000000000000000000000000000001892CBCBCBCFCFD1CFCFCBCBC9C9C5C5C5C3C6C3C4C4C3C4C47100000000000000C1C3BFBCBCBC5A03000000000000000000000000BBBBB8B5B5B28D0000000000000089B0B0B1B55D030000000000000000000000000000000000000000000380ABABA8A8A8A5A5A5740C0000000000000000000000000000000000000000000D7DA8A5A5A19E9EA1A5A19E9E9E9E9E9F9C9A9C9C9C9C9C9C9C9C9743020000000000000000000000000000000000000000000000000000002D99A5A5A5A5A7AAA7A7A7A5A5A3A3A5A7610000000000000000000000000000000000000000000000000039A5A5A7A8AAAEB1B1AEAA610000000000000089B1B1B1B0B1B1B1B2B1B1B3B1B1B5B6B6B6B8BBBBB8B971080000000000000000000000000000000000000000000000000049B1BBBBB8B8B6B8B8B8B3B3B3B8B8B9BBBBBBBBBBBBBB900000000000000094BCBFBCB9A12900000000000000000000000000000000000000000000000041A5AAAAAAAAAAA8A8A8A8A8A7A7AAA7AAAEABABAEAEAAAAABAEB1B3B3B3B3B3B3B2B2B1B1B1B1AEAEAAAAAEACABACAAAAAEACACA8A8A7A5A72A010101010101010101010198FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDEFD7DADADADEDEDFE2E2E3F2FCDBD1D1D1D0D1D1D0D1CFCFCFCFCFCFCFCFCED1D0D0D0D1D0D1D1D3D3D4D4D5D9D9D5D3D3D3D1D3D3D1D3D3D3D3D3D4D4D1D4D4D7D7D7D7DAD9D9D7D7D7D9DBDCDCDBDBD7D7D5D9D9D9D9DBDEDEDCDBDBDBDEDEDCDCDBDBDBDBDCDEDCDBDBDC2300000000000024E1E1E2E3E1E1E1E3E1DFDEDEDFDE0000000000000086E1DFDCDAD7D5B24D04000000000000000000000000000000000000000A80D0D0D1CFD1CFCBCBCBCBCBCFCFD1CFCF00000000000000000000000000000000000000000000000000006BBCBCBBBBBBBFBBBBBBB6B9BCBCBBBBB9BBBB9938000000000000000000000000000000000000000000156FB1B1B1B1B1B1B1B1B1B1B0ACACACACACACABABA8A8A8A5A5A55D00000000000000A3A3A5A5A1A19F7E1E0000000000000000000000A19E9EA1A5A17B00000000000000799C9C9C9C9C8930000000000000000000000000000000000000001992A7A7A7A7A7AAA7A7A8A8A147020000000000000000000000000000000000003DA2B1B1B1AEAEAEAEAEAEB1B2B2B2B0ACACA8A7A5A5A5A5A7A8AAAEB1B197410300000000000000000000000000000000000000000000002989B8BBBBB8B9B8B9B5B6B3B3B6B3B3B3B6B667000000000000000000000000000000000000000000000000003FB3B8B8B9BBBBBBBBBBBB6A0000000000000094BCBCBFBCB9B8B6B6B5B1B5B5B5B1B3B3B2B3B1B1B1AEABA35B080000000000000000000000000000000000000000024197ABABAEAEAAAAABAEB1B3B3B3B3B3B3B2B2B1B1B1B1AEAE860000000000000088ACACA8A8A7A57B1F0000000000000000000000000000000000000000238CBBBBBCBFBDBDBFBDBDBDBDBDC1BFBFBBBFBBBBBBBBBCBCBCBCBCBCBBB8B3B1B3B3B2B2B2B5B5B2B3B3B3B3B6B8B6B3B3B1B0ACACACB0B1B0B22D010101020202020202020299FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDE3C5CAC6C6CACAC9CAC9C9D3E9C1B1AEAEB1B2B6B6B6B6B8BBB6B3B5B5B2B3B8B6B6B9BBB8B8B8B5B5B8BBBBB8B8BBBDBDBCBCBCBBB9B8BBBCBCBBBCBFBFBFBFC1C1C3C3C3C3C0BFBFBDBCBDBBBDBDC0C0BCC0C0C1BDBCBCBCBCBCBFBCBCBFBCBBBBBBBBBBBBBBB8BBBBBBBD7B686A6A6A676A78BBBBB8B9B9BBBBBBB9BBBCC0C0BF6F6F6F6F6E6B6C9CBBBBBCB9B6B2B2B6AA6729030000000000000000000000000000296EACB3B6B9B9B9B9B6B8B9BBBCBBB6B6B6BBBB6B6D6E6E6E6E6F6E6E00000000000000246B6B6E6E6E6E6E6D6FA2C3C6C3C6C6C6C8C6C6C6C6C6C5C5C6C6C6C6C8C8B96A260000000000000000000000000000001454B5E1DFDBDFDBDBDCDAD9D9DBDBD7DBDEDEDCDBDBDBDEDFDFDBDEDEDBB983817F7F7F7F7FD7D9D7D7D7D7D7D4D3A13B040000000000000000DADBD9D7D4D1BF78787878777777BCC9C9C9C9CBC9C9B0631000000000000000000000000000002474BCBCBCBCBCBCBFBFBCBFBFBDC1C0B1651D000000000000000000000000000945A4C4C4C6C3C3C3C3C0C1C1BFBCBCBCBFC0C0C1C3C3C3C3C3C3C3C3C3C1C1C3C4C6C388380900000000000000000000000000000000001E64B2C9C9CEC9CBCBCBCBCFD0D0D1D1D1CFD1D0CECAAA77777778787A78785D00000000000000417777787B7C7C7D7DA1D9D9DBDADBDBDFDCDFE1BD86868381818181C9DCDBD9D9D9D9DBDBDBDBDBDBDBDADBDEDBDBDBDBDBDCDCDCDCDEA1490B0000000000000000000000000000043686D1E2E1E1E3E1E2E2E3E3E1E1DCDBD7D7D7D7D7DBDBDBDADAD7D7C67E7C7C7B787776BBC8C5C5C4C3C3C3C3A85E250000000000000000000000000000033884B0ABABAAAAAAABABAEAEAEAEABA7A5A3A3A39F9F9C9F9F9C9C9EA1A1A1A19E9E9C9C9C9A9C9C9C9A9C9C9C9F9C9EA1A3A7A7A7A7A8A8AAA7A7A7A729010101010101010101010198FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCE9D3D1D1D1CECECFD3D4D4DCF1C9B9B9BCBCBCBBBBBBB9BBBBBCC0C1C1C4C1C4C3C3C5C4C3C3C3C3C3C4C3C1C3C3C3C3C4C4C4C1C1C1C4C4C4C4C5C3C3C3C3C3C4C4C5C3C3C4C3C3C3C4C8C8C9CACACBD0D1D0D1D1D1D0D1D1D0D1CFCFCFCFCFCFCFCFCED1D0D0D0D1D0D1D1D3D3D4D4D5D7D7D5D3D3D3D1D3D3D1D3D3D3D3D3D4D4D1D4D4D7D7D7D7D9D7D7D7D7D7D7DADCDCDADAD7AC7C4F3D222222232323476393CBDCDCDCDADADADADCDCDCDADADCDCDCDCDCDCDEE1DFDFDFE1E2E1DFDFE20000000000000051DBDCDBDCDCE1E1DEDCD9D7D5D3D3D3D5D7D4D3D5D5D5D5D3D0D0D0D0D0D0D0D0D0C8936F4B28212021202020405B7FB5CFD1CFCFCBCBC9C9C5C5C5C3C6C3C4C4C1C4C4C3C3C0C0BDBDBDC0C0C1BDBBBBBBBBBBBBBDBBBBB9B5B8BBBBB9B9B8B9B9B0754D281B1A1A1A34A8A8ACAEAEAEB1B3B1B1B1B1B3B6B3B3B1B1B1B1B1B1B0B0B0996A432E19191919191933506597A5A5A5A19E9C9F9FA1A1A1A1A4A4A0A09EA0A194644732191819191918324C6D9CA0A4A09C9C9C9C9C9E9B989B9C9C9B9B9B9C9C9C9C9C9FA19FA0A4A4A5A4A4A4A4A5A7A7A7AA946D4E392518181918181919253956729EA5A8A5A5A5A5A5A1A1A5A7AAAAAAAAAAACB1B1B1B1ACACACACACACB0B2B2B288000000000000005CA7A7A8ACB0B0ACA8ABAEABABABA8ABAEAEB1B1B0AEB0B0B1B2B0B1B2B1B1B3B5B5B5B6BBBBB6B8B6B8B3B5B2B2B5B2B2B2B5B5B2B2B2B1B1B2976F47381A1A1A1C1C1C29416989B6B5B6B6B6B2B2B2B6B6B8BBB9B9B9B9B9B9B5B5B2B5B9B9BBBBBBBBBDBBB8B6B5B5B3B1B3B3B3B1B2B2B2B2B0B1B1ACAAA4785A3D2619191919191E3B587DA8A7A7A7A7A7A7A7A8A7A8ACAAAAACACA8A8AAACB1B2B2B2B2B2B2B2B2B0B1B0B0ACACA8A8ACABAAABA8A8ACABABA7A7A7A5A5A5A5A7A7A7AAAAAEAEAEAA2A010101010101020202010298FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCD7B0B1B1B0B1B2ACACAEB0B9CBAA9B9C9C9C9C9C9FA19FA0A4A4A5A4A4A4A4A5A7A7A7AAAAA7A7A5A5A5A5A8A5A5A7A7A5A5A5A4A5A5A8A5A5A5A5A5A1A1A5A7AAAAAAAAAAACB1B1B1B1ACACACACACACB0B2B2B2AEABABA7A7A5A5A4A4A7A7A8ACB0B0ACA8ABAEABABABA8ABAEAEB1B1B0AEB0B0B1B2B0B1B2B1B1B3B5B5B5B6BBBBB6B8B6B8B3B5B2B2B5B2B2B2B5B5B2B2B2B1B1B2B5B5B3B3B3B3B3B6B6B9B6B9B9B6B6B5B6B6B6B2B2B2B6B6B8BBB9B9B9B9B9B9B5B5B2B5B9B9BBBBBBBBBD000000000000003FB3B3B1B2B2B2B2B0B1B1ACAAAAACACACACAAABABA8ABA8A8A8A8A8A7A7A7A7A7A7A7A8A7A8ACAAAAACACA8A8AAACB1B2B2B2B2B2B2B2B2B0B1B0B0ACACA8A8ACABAAABA8A8ACABABA7A7A7A5A5A5A5A7A7A7AAAAAEAEAEAAAAACB0B2B0B2B5B9B9B9B6BBBBBBBBBDBCBCBDBCBCBCBCBCC0BDBDBBBDBBBBB9B9BBBBBBBBBBBBB9B6B2B1B2B2B2B2B2B3B3B2B2B2B2B2B5B6B5B2B2B0AEABABABAEB0AEB2B2B3B1B3B8B8BBBBBBBBB8BBBBBBBBB8BBBBBDC1C1C3C3C3C3C0BCC0BCBCBBBBBBBBBBB9BBB9B5B2B2B2B5B5B5B8B3B3B2B2B2B6B9B9BCBFBFC1BFC1C1C3C6C9C9C6C6C9C9C9C9CACECECECAC9CAC9C9C9C9C9C9C9C9C9C6C5C5C8C5C5C4C6C8C8C8C8C5C5C3C1C3C1C0C39A000000000000006FC4C4C3C3C3C0C0C0BFBDBDC1BFC1BFBFBFBBB9B6B3B2B2B5B8BBBBBBB8B8B9BBBBBBBBB8B8B8B8B6B6B6B3B3B2B2B2B2B2B1B1AEAEAEAEAAAAAAABB0B2B5B5B8B5B2B2B2B2B3B1B1B3B2B2B0B0B0AEAEABA8A8A8A8A7ABAAAAACACACACACB1B2B2B1B2B2B2B1B1AEACAAAEAEAEAEB2B1B1B1B1B3B6B6B6B6B5B9BBBBBBBBBBBBB8B8B8B8B6B6B6B6BBBBB6B5B3B2B2B3B8BBBBBBBBBBBBBDBDBBB9B9B9B9B6B8B8B8B8B9B5B9BBBBBCBBBCBFBFBDBDC0C0C3C5C6C4C3C4C4C1C1BFBCBCBBB8B6B6B5B2B22C010101010101010101010197FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF9EFF1EEECEBEFEEEFEFF2F8FCE4DBDBDBDCDCDCDCDADADADADCDCDCDADADCDCDCDCDCDCDEE1DFDFDFE1E2E1DFDFE2DFDEDCDCDEDCDBDCDBDCDBDCDCE1E1DEDCD9D7D5D3D3D3D5D7D4D3D5D5D5D5D3D0D0D0D0D0D0D0D0D0D0CECED0D0D1CFD1CFCBCBCBCBCBCFCFD1CFCFCBCBC9C9C5C5C5C3C6C3C4C4C1C4C4C3C3C0C0BDBDBDC0C0C1BDBBBBBBBBBBBBBDBBBBB9B5B8BBBBB9B9B8B9B9B6B3B3B2B2B0ACACAAA8A8ACAEAEAEB1B3B1B1B1B1B3B6B3B3B1B1B1B1B1B1B0B0B0B0AEABABABABAB0000000000000039A5A5A19E9C9F9FA1A1A1A1A4A4A0A09EA0A1A1A5A5A5A7A7A7A7A7A5A4A09C9CA0A4A09C9C9C9C9C9E9B989B9C9C9B9B9B9C9C9C9C9C9FA19FA0A4A4A5A4A4A4A4A5A7A7A7AAAAA7A7A5A5A5A5A8A5A5A7A7A5A5A5A4A5A5A8A5A5A5A5A5A1A1A5A7AAAAAAAAAAACB1B1B1B1ACACACACACACB0B2B2B2AEABABA7A7A5A5A4A4A7A7A8ACB0B0ACA8ABAEABABABA8ABAEAEB1B1B0AEB0B0B1B2B0B1B2B1B1B3B5B5B5B6BBBBB6B8B6B8B3B5B2B2B5B2B2B2B5B5B2B2B2B1B1B2B5B5B3B3B3B3B3B6B6B9B6B9B9B6B6B5B6B6B6B2B2B2B6B6B8BBB9B9B9B9B9B9B5B5B2B5B9B9BBBBBBBBBDBBB8B6B5B5B3B1B3B3B3B1B2B2B2B2B0B1B1ACAAAAACACACACAAABABA8ABA8A8A8A8A8A7A7830000000000000062AAAAACACA8A8AAACB1B2B2B2B2B2B2B2B2B0B1B0B0ACACA8A8ACABAAABA8A8ACABABA7A7A7A5A5A5A5A7A7A7AAAAAEAEAEAAAAACB0B2B0B2B5B9B9B9B6BBBBBBBBBDBCBCBDBCBCBCBCBCC0BDBDBBBDBBBBB9B9BBBBBBBBBBBBB9B6B2B1B2B2B2B2B2B3B3B2B2B2B2B2B5B6B5B2B2B0AEABABABAEB0AEB2B2B3B1B3B8B8BBBBBBBBB8BBBBBBBBB8BBBBBDC1C1C3C3C3C3C0BCC0BCBCBBBBBBBBBBB9BBB9B5B2B2B2B5B5B5B8B3B3B2B2B2B6B9B9BCBFBFC1BFC1C1C3C6C9C9C6C6C9C9C9C9CACECECECAC934020202020202020202020298FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBDFC3C3C1C0BDBDC0BFBFC0C6DCBDAAAAA7A7A5A4A5A5A5A7A7A7A8A8ACACACA8A8ACAEB2AEB2B5B8B8B8B5B9B9B9BBBDBBBBBDBBBBBBBBBBBFBDBDB9BDB9B9B8B8BBBBBBBBBBBBB8B5B2B0B2B2B1B1B1B2B2B1B2B2B2B2B5B5B5B2B2AEACAAAAAAACAEACB1B2B2B0B2B6B6B9B9B9B9B6B9B9B9B9B6B9B9BDC0C0C3C3C3C1BFBBBFBBBBB9B9B9B9B9B8BBB8B5B2B2B2B5B5B5B6B2B2B2B2B2B5B8B8BBBDBDC0BDC0C0C3C5C8C8C5C5C8C8C8C8C9CBCBCBC9C8C9C8C8C8C9C8C8C8C8C8C5C5C5C6C50000000000000047C5C3C0C3C0BFC1C1C1BDC0C3C3C0C1C1C3C3C3C3C1BFBFBFBDBDBDC0BDC0BDBDBDBBB8B5B2B1B1B5B6BBB9B9B6B6B8BBBBBBBBB6B6B6B6B5B5B5B2B2B1B1B1B1B1B0B0ACACACACA8A8A8AAAEB2B5B5B6B5B1B1B2B2B2B0B0B2B1B1AEAEAEACACAAA8A8A8A8A7AAA8A8ACACACACACB0B1B1B0B2B2B2B0B0ACACA8ACACACACB1B0B0B0B0B2B5B5B5B5B5B8B9B9B9B9B9BBB6B6B6B6B5B5B5B5B9B9B5B5B2B2B2B2B6B9B9B9B9B9BBBDBDBBB8B8B8B8B5B6B6B6B6B8B5B8BBBBBBB9BBBDBDBDBDBFBFC1C5C5C3C3C3C3C0C0BDBBBBB9B6B5B5B5B2B2B2B0B0AEAEAEB1B1B1AEB2AEACACACACAEAAACACAAA7AAACAEAEAEACACAAAAAAAAAEB1AEACAEAEB1B1AEAAAEB0B2B2B2B2B0ACAC880000000000000060AAA8AAAAAAAAA8A8A8A8A5A5A5A8A5A5A5A5A5A5A5A5A2A4A4A7A8A8AAACB1B2B2B2B5B9B5B5B5B2B1B0B2B2B2B1B1ACACAEAEAEB1B1B2B0B0B2B5B5B5B9B5B8B8BBB8BBBBBDBDBDBDBDBDC0C1C1C1BFBFC0C3C3C0C0C0C0BFC1C1C1C3C5C5C3C3C5C5C6C6C9CBCBC9C9C9C9C9CBCBD0D0D0CECFCBCBCFCFCED0CECFCFD0CECECAC9C9C8C8C9CACBCAC9CBCFD1D0D1D0D0CBD0D0D1D1D3D3D7D7D7D7D9D9D9D9D9D5D5D7D5D3D0D3D0CFCFCFCECACACAC9C6C5C3C5C5C6C5C5C6C6C3C5C6C5C5C1C1BFC130020202020202020202020298FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBE5CFD0CECBCBCECBCAC9C9D0E4BFACACA8A8A8ACACACACB0B2B0B0B0B0B2B5B2B2B0B0B0B0B0B0AEAEAEAEACAAAAAAAAAAAAA8A8A7A7A7A4A4A4A4A19E9C9F9FA1A1A1A1A2A2A1A19EA1A1A1A4A4A4A7A5A7A7A7A4A2A19C9CA1A2A19C9C9C9C9C9E9B989B9C9C9B9B9B9C9C9C9C9C9FA19FA1A2A2A4A2A2A2A2A5A7A7A5A8A8A5A5A5A5A5A5A8A5A5A7A7A5A4A4A2A4A5A8A5A5A5A4A4A1A1A4A5A8A8A8A8A8ACB0B0B0B0ACACACACACACAEB1B1B1ACAAAAA7A5A4A4A2A2A5A7A8ACAEAEACA8AA000000000000003DB0B0AEACAEAEB0B1AEB0B2B0B0B2B5B5B5B5B9B9B5B6B5B6B2B5B2B2B5B2B2B2B5B5B2B2B2B0B0B1B5B5B2B2B2B2B2B5B5B8B5B8B8B5B5B5B5B5B5B2B2B2B5B5B6B9B8B8B8B8B8B8B5B5B2B5B8B8BBBBBBBBBDBBB6B5B5B5B2B0B2B2B2B0B2B2B1B2AEB0B0ACA8A8ACACACACA8AAAAA8AAA8A8A8A8A8A7A7A7A7A7A5A5A8A5A8ACA8A8ACACA8A8A8ACB0B2B2B2B2B2B2B1B1AEB0AEAEACACA8A8ACAAA8AAA8A8ACAAAAA7A7A5A4A5A5A5A7A7A7A8A8ACACACA8A8ACAEB2AEB2B5B8B8B8B5B9B9B9BBBDBBBBBDBBBBBBBBBBBFBDBDB9BDB9B9B8B8BBBBBBBBBBBBB8B5B2B0B2B2B1B1B1B2B2B1B2B2B2B2B5B5B5B2B2AEACAAAAAAACAEACB1B2B2B0B2B6B6B9B9B9B9B6B9B9B9B9B692000000000000006FBFBBBFBBBBB9B9B9B9B9B8BBB8B5B2B2B2B5B5B5B6B2B2B2B2B2B5B8B8BBBDBDC0BDC0C0C3C5C8C8C5C5C8C8C8C8C9CBCBCBC9C8C9C8C8C8C9C8C8C8C8C8C5C5C5C6C5C5C3C5C6C6C6C6C5C5C3C0C3C0BFC1C1C1BDC0C3C3C0C1C1C3C3C3C3C1BFBFBFBDBDBDC0BDC0BDBDBDBBB8B5B2B1B1B5B6BBB9B9B6B6B8BBBBBBBBB6B6B6B6B5B5B5B2B2B1B1B1B1B1B0B0ACACACACA8A8A8AAAEB2B5B5B6B5B1B1B2B2B2B0B0B2B1B1AEAEAEACACAAA8A8A8A8A7AAA8A8ACACACACACB0B1B1B0B2B2B2B0B0ACAC2A010101010101010101010197FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF0DEDEDEDEDCDEDCDCDBDEE6F7D3C9C9C9C9CBC9CBC9C6C9C9C8C8C6C6C5C5C5C6C6C5C4C4C5C5C4C4C0C3C5C4C0C4C3C5C6C5C4C1C1C1C3C3C5C5C8C8C8C8C8C5C9C8C5C3C3C3C0C0C0C1BFBFBDBDBDBDBDBDBDBDB9B8B6B6B5B2B2B2B3B3B3B3B2B1B1B2B2B2B2B2B2B5B3B2B5B5B2B3B3B5B3B2AEAEACACACAEB0B0AEB0B0B0B2B3B2B5B2B0B2B5B5B5B3B5B2B3B2B0B2B3B3B5B5B2B2B0B0ACAAAAA8A8A8A5A5A5A2A0A4A4A5A8AAA8A8AAA8A8A8ACACACAAA8A8AAA8A8A8A8AAAEAEB1B1B0000000000000003DAAA7A7A7A5A5A4A7A8A5A8AAAAAAACACACACAAAAACACAAA8AAACACACB0ACA8A8A8A8A8A8A8A5A5A8A8A8A8ACACAAA8A8A8A8AAAEB0B2B2B2B2B3B2AEB2B2AEAEB2AEAAAAAAACAAAAACACAAACA8AAAAACB1B1ACB0B0B0B1B1AEAEACAEB0ACACB0B1B1B1B1B1B1B3B1B2B3B3B3B3B2B2B2B2AEAEACACAEB1B3B3B3B3B5B6B3B2B2B2B1B2B5B3B3B5B8B5B5B5B2B2B5B8B6B5B5B8BBBBB9B9B9B6B5B5B6B9B9B6B9BCBCBCBCBDBDC1C1BFBFBDBCBCBBB9BBB6BBBBBDBDB9BDBDBDBBB9B9B9B9B9BCB9B9BCB9B6B8B8B8B8B8B8B5B8B8B8BBB8B5B6B6B6B3B6B5B8B8B5B5B5B8B8B8B5B6B9BDBDBCBDBFBDBFBDB9B8B9B8B8B9B5B3B1B1B3B5B2B2B1B2B1B1B2B2B3B3B2B2B5B5B3B3B38E0000000000000067B3B5B5B6B9B6B3B3B3B6B6B9BBBDBDBDBDBFBCBCBFBFBFC1C1BFBFBCB9B9BDBDBDBDBCBBBDC0C1C5C1C5C5C5C5C5C5C5C5C5C4C4C5C5C5C5C5C5C5C5C8C9CBCED0D1D3D6D7DADCDCDCDCDBDEDEDEDEDFDEDADEDADADBD7D7D7D9D9D6D9DCDCDBD9D9D9DCDEDEDADCDCDADADCD9D7D7D7D7D7D6D7D4D4D4D6D6D1D1D1D0D0D1D1D3D7D7D7D9D7D7D9D7D4D1CFCBCECECECECBCBCBC9C6C6C8C8C9C8C8C5C5C3C3C3C3C3C3C4C1C1BFBFBDBDBCBCBCB9B9B9B9B9B9B9BCBCB9BCBCBBBDBDBDBDBDC0C0BFBD30020202020202020202020297FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9D5B1B1B3B2B8B3B5B8B6B2BFD3B5A7A8A8A8A8A8A8A8A8A8A8A8A8ACA8ABAEB1B1B1B3B3B6B6B3B3B6B6B5B8B8BBBCBCBCBCBDBBBBBBBBBBBBBBBDBFC0C0C0C0C0C3C3C3C0C3C5C5C6C6CAC6CAC9CAC8C6C5C6C6C6C6C5C8C8C6C6C8C6C3C3C3C6C5C5C5C1C4C6C6C4C4C1C1BFBFC0C3C3C3C3C3C3C1C1BFC1C3C3C4C6C6C9C6C6C9C9C6C5C6C8C6C6C6C4C4C0C0C0C1C1C0C0C0C3C3C5C3C5C5C3C0C0C0C0C0C0C0C0BDBDBCB9B8B8BBBBBBBDBDBDBDBDBDC0C1C4C5C5C4C1C4C5C4C4C1C0BDBF0000000000000025C5C6C6C4C5C1C5C6C6C6C6C5C4C3C1C1C0BDBDBDBDBDBDBDBDBDBCBDBDBCBCBCBDBDBBBCB9B9BBBBBBB9BCBCBCBBBBBBB9B9B9BCBCBCBDBDBBBDBDB9B9B9B9BDBDBFC0C1C4C4C4C0C0C0BFBFC0BDBDBBBBBBBCBDC0BDBFC0BFC0C1C3C3C3C0C3C3C3C3C1C1C1C1C1C1C3C3C1C1C5C1C3C4C5C5C5C5C8CACACBCACAC9C6C6C6C8C6C6C9C6C8C8C9CBC9CBCBCBCECECBCBCBCBCBCBC8CACACACACAC6C8CBCECBCBCECECBC8C8C6C6C4C1C0BDBDBDBDBDBDBCB9BCBDBDBBB9B6B5B5B5B5B5B9BBBBB9B9B9BDBBBBBCBCBDBBBBBBBBBDBBBCBBBBB8BCBCB9B9B8B9B9B9B5B3B2B5B5B3B5B5B5B5B6B6B5B9B9B9B5B5B8B5B2B5B1B5B5B3B3B1B2B2B5B3B2B2B2AEB2AEAEAEB2AEAEAEB28F0000000000000069BCBBBBBBBCBDBDBDBFC1C0C1C4C0C0BFBDBDBBB8B6B5B3B2B5B8B6B6B5B5B5B5B5B5B9B9BBBBBDBBBBBDBBBBBBB6B6B8BCBCBCBBBBB6B6B6BBBBBBB8B8B8B6B9B9BBBDBFBFC1BFC1C0C0C3C1C0C0C0C0C0C1C0BFC0C0C0C0C1C1C1BFBFBFC1C1C1C1C3C0C0C0C0C0C1C1C3C0C0C1C0C0C0C1C5C5C6C8C8C9CBCECBCECFCFCBCECECBCFCBCBCBCBCBCBCBCBCACECBCBCBCFCBCFCED0D0D1D1D3D6D6D3D0D0D0CED0D0CFD0D0D0D0D0D1D1CFD1D1D5D5D5D5D7D6D6D3D3D3D6D7DADAD7D7D5D5D3D6D6D6D638020202020202020202020296F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F0DEDCDBDBDCDFDFDFDEE1ECF8D9CFCECEC9CECECECFD0D0D3D3D3D3D6D6D6D6D6D3D3D4D3D0CED0CECBCBCBCAC8C8C8C8C5C3C1C4C4C5C4C4C5C5C1C3C5C3C3BFBFBDBFBFBCBCBCB9B9B9B9B9B6B6B5B6B6B6B6B6B3B3B3B2B6B2B2B2B5B5B6B6B6B3B6B6B9BCBDBCB9BBB8B8BBBDBCBCBCBCBDBFBFC0C0C0C1C4C4C4C1BFBFBCB9B9B6B3B3B6B6B5B6B6B6B6B6B8B6B6B6B9B6B6B8BBBFBFBBBCB9BBBBBCBCBCBCB9B9B9B9B9BCB8BCBDBDBCBFBCBCBCBCBDB9BDBBB8B8B8B6B8B8BCBDBDBDB9000000000000001DBFBFBDBBBBBFBFBCB9B6B3B1B1B1B3B3B3B5B5B5B5B5B3B1B1B1B3B3B6B6B6B8BBBBBBBBBFBFBFBFC0C1C4C4C4C4C3C3C0C0C0BFBFC1C1C4C4C4C4C0C3C3C3C5C8C9C9C6C8C8C8C5C6C6C8C6C6C6C8CACACECFCBC9CBCACAC8C8C8CACBC8C8C8C6C4C4C1C1C1C3C4C4C6C3C3C5C6C6C9CBCBC9CACACAC8C6C6C5C3C0C4C4C5C5C1BFC1C3C1BFBFBCB9B9B6B9BBBBB8B6B5B5B5B2B3B3B3B3B2B2B1B1B1B1AEABAEB0AEB1AEACACA8A8ABA7A7ABA7A5A4A5A4A4A29D9D9C9C9DA2A2A29F9F9F9F9FA2A2A2A4A5A5A5A5A5A5A2A2A2A2A4A4A5A2A2A2A2A2A2A2A2A2A2A5A2A2A2A2A2A2A29DA2A2A29FA2A29FA2A4A4A4A4A2A2A2A2A2A2A4A5A7AAA5A2A5A5A5A5A2A2A5A5A2A2A27E0000000000000060AAACAAAAA7AAA7AAAAAAABACAAAAAAA7ABACACACAAAAAAAAA5A5A8A8ACACACB0B0B2B2B2AEAEB2B5B6B6B6B2B6B6B3B1ACACB0B1B3B1ACB1B3B3B3B2B2B2B1B1AEAEAEAEAEB2B2B5B6B6B6B2B2AEB1B1B1B0ACB0ACACAAA8ABAEABABABABACABAEB1B1B0B0ACACACACAEACAEB0B0AEACAAACACACB0B0ACACACAEACACACACACACAAA7A5A5A2A2A2A2A2A2A2A2A29D9D9C9C9B9B9B9B9B9D9C9B9B9CA2A29C9B9B9B9B9B9C9FA29F9C9F9C9B9B9B9997979B979B9B9B9C9FA2A2A2A4A4A5A2A2A5A2A5A5A52A010101010101010101010195F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E4CACACBCAC9C5C6C8C8C8D1EAC3AEB1B1B5B5B2AEAEAEB0B1B5B1B1AEB0AEB0AEB1B1B2B0B0AEB0B0AEB0B0B2B2B2B1B0B3B6B6B8B6B5B3B5B5B1B3B2B2B2B2B2B6B2B6B8B6B8B8B8B8B8B6B6B8B6B6B2B6B2B0B0B0B2B6B3B3B3B6B8B8B6B3B6B9BCBCBCBCB8B9B9B9BDBF9E93939396939698BFBFBBBDC0C3C6C6C3C0C0C4C4C4C4C6C6C6C5C3C4C5C3C1C3C1C4C6C5C5C4C3C6C4C4C1C1BFBFC0BFBCBCBFBFBDBDBBBBBBBBBDBDBDBDBDB9BBBBB6B9B6B6B9B9BCB9BCBDBDBDB9B9BBB8B5B20000000000000003B1AEB1AEAEAEAEAEAEB1B1B1B1B5B3B1AEAEAEAEAEACACABACAEAEAEAEB1B0B1AEAEB1B3B2B2B5B8B8BBB6B6B6B6B6B8B6B8B8BBBBBFC0BFC0C0BFBFBDBFBFC1BFBDBBB9B9B9BDBBBDBBBCBFBFC1C1C1C0C0C0BFBFBFC1C1C0BFC1C4C4C1BFBFBFBFBFBCBBBBBFBBBDBDB9B6B8B9B9B9B9B6B6B6B9B9B6B6B5B5B2B2B2B2B1B1AEAEACAEAEAEAEAEACACACACABA7A7ABAAAAAAA7A8A8AAAAA5A4A4A4A4A4A7A5A4A5A4A1A1A1A2A4A4A1A19D9D9D9D9D9D9D9B9B999999999B9994939390929290929696999999999B9C9C9DA1A1A2A4A7A4A4A4A29DA1A1A29DA2A5A7ABAAACACAEAEAEACAEAEAEAEACACAEAEAEB0AEAEB1B3B2B0AEAEAEAEAEB2B2B2B2B6B6B6B6B6B6B9B9B6B690000000000000006DC0BDBFC0C0C1C0BFC1C1BFBFBFC0C0C1C4C6C8B69E9B9999999B9BB3C0BFBCB8B6B6B6B6B3B6B5B5B8B8B8B8B6B8B8B6B6B6B6B6B6B6B3B3B3B0B3B2AEB2B2B3B3B2AEB0B0B0B1B1B2B5B5B5B6B6B2B2AEB1B1AEAEAEAEACACAEB1B2B5B6B6B3B0AEAEAEAEACAEAEACAAAAAAABABACACACACACAEB0B0B0B0B0B0B2B3B6B5B5B5B5B6B6BBBDC0BFBFBFC0C0C1C1C1C3C1C0C3C0BDBDBDBDBDBBB6B6B6B6B8B9B9BCBCBCBFBDBDBFC3C1C1C0BFBFC0BFC0C0C1BFC1C1C5C1BFC1BFBDBDBDBDBDBBB8B9B6B62F020202020202020202020295F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6E9D1D1D1D5D6D9D5D9DAD7DFEFCEBFBFBFBFBFBBBBB9B6B6B6B6B6B6BBBBBBBBBBBBBDBFC1C3C3C1BFC1C3C1C1BFBDBBBCBFC1BFBFBCBFBFC1C3C4C4C1C3BFC3C5C5C5C4C3C1C1BFBFBDBBBBBBBBBBBBBBBBBBB9BBBBB9B9B9BBBBB6B9B6B6B6B6B6B6B9B9B9B6B6B6B6B6B61C00000000000000B6B6B6B6B9B9BCBDBFC1C1C1BFBFBFBCBCBFBBBBB6B6B6B9BBBDB9BCBFBCBDBFC1C1C1BFC1C1C1C1BFBFBFBFBFBFC1C1BFBFC3BFC1C1C3C3C3C3C6C9C9CAC9C9C6C5C5C5C6C4C4C6C4C6C6C6C9000000000000000090C9C9C9C6C9C9C9C9C9C5C6C9CBC9C9CBCBC9C6C6C5C5C1BFBDBBBBBBBBBBB9B9B6B9B9B9B6B6B5B3B3B3B3B3B6B6B6B6B6B6B9B6B6B9B9B9B6B6B6B6B9B6B9B6B6B6B9B9B6B6B6B6B6B6B3B1B0B2B2B1B3B3B3B2B5B5B3B6B6B6B3B3B6B3B0B2AEB2B2B1B1AEB0B0B2B1B0B0B0ACB0ACACACB0ACACACB0B2B2B1AEAEB1B3B5B6B9B6B6B6B9B9B9B9BCBFBDBFC1BFBFBCB9B9B6B6B5B3B1B0B2B6B5B5B3B3B3B3B3B3B6B6B6B6B9B6B6B9B6B6B6B5B5B6B9B9B9B6B6B5B5B5B6B6B6B6B6B6B5B6B6B6BBBCBCBFBCBFBDBDC1BFBDBDBFBFBFBFBFBCBDBDBDBDBFBFBFBCBCBCBFBFBFBFC1BFBFBFBDBDBFBFC1BFBFBFBDBFBFBFC3C3C5C6C6C6CACBCACBCECECACBCBCACEC9C9C9C9A10000000000000075CECACECBCECECFCFD0D3D3D0CECECECBCECECE770000000000000078CFD1D1D1D1D4D3D3D1D1D1D3D4D7D7D4D4D1D1D0D3D3D3D3D4D9D9D7D6D6D6D9D9D7D7D4D4D4D4D7D9D7D4D4D7D7D9D9D9D9DADCDBDBDBDCDEDBDBDBDEDBDAD9D9DAD9D6D7D6D7D6D9D9DBDBDAD7D4D1D0CECECED0D1CFCED0D0D0D0CECACACACACACACACACACAC9C9CACACBC9CBC9C6C6C6C6C6C9C9CEC9C9C6C6C4C4C1C1C1BFC1BFBFBFBCBFBFBFBFBBBBB9B9B9BBBBBCB9B6B6B6B6B6B6B9B6B6B5B1B3B6B6B5B5B3B5B5B2B02C010101010101010101010194F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5EEDBDBD7D7D9DCD7D9DADEEAF4D6CEC9C8C9C9C9C5C5C5C9C9C6C6C6C4C1C1BFBFBFC0C1C1C3C0C0C1C4C4C8C9C9C8C9C9C9C6C3C3C1C0BDC1C1C1C1BFBDBFC0BFBDBDB9B6B6B3B6B9B9B6B3B2B2B2B1B1B1B1B1B1B1AEAEAEAEACA8ACACACAEACAAAAA5A5A8A5A5A8A5A3A218000000000000009C9F9FA29D9D9D9D9D9F9F9FA2A3A3A3A3A2A2A2A2A2A2A2A2A3A2A29F9F9FA29F9F9FA1A2A2A1A2A2A2A29F9C9F9FA19D9FA19DA1A2A2A2A2A1A19F9FA2A2A2A3A5A7A3A2A2A2A2A3A2A2A2A217000000000000000C96A3A7A7AAA7A7A5A7A5A7A7A7A8AAA7A7A7A5A8ABAAAAA7A7A7A7A3A3A5A5AAABABACACB1B1B1ACACB1B2B5B5B3B1B3B3B1AEABABACAEB1AEABAEB1B1B1B1B1B1AEAEACACACACACB1B1B2B5B3B3B1B1ACAEAEAEACAAACAAABA7A5A8ACA8A8A8A8ABA8ACAEAEACACABAAAAAAACAAACACACACABA7AAABABACACAAABABACAAAAAAAAABABA7A5A3A3A29FA1A1A2A2A29F9F9C9C9B9B97979799999C9B99999B9F9F9B99999799979B9DA29D9B9D9B99999997949499949997979B9DA1A1A1A2A2A3A2A2A3A2A3A3A3A3A2A1A1A2A2A5A5A8ACAAABAAAAACACACB1AEAEABAAAAACABABABACB1B1B3B1B1B3B3B3B1B3B6B6B6B6B9B6BBBBBDBDBDC1C3C3C6C3C6C6C8C9C6C6C6C4C4C6A00000000000000075CAC9CBCAC9CACECACACECECECECAC9C9C5C9C9750000000000000077CBCACECECBCBCBCAC9C5C6C9C9C9C9C9CBC9CACACECBC9C9CBC9CAC8C5C5C5C8C8C4C5C4C6C4C4C1C1BDBDBCBCB9B9B9BBB9B6B6B2B6B2B2B1AEB1AEABAEAEAEAEAEB1B1B5B2B2B5B5B5B9B6B6B6B3B3B3B3B3B1B2B3B6B6B6BBBBB6B6BBBBB9B5B2B2B2B2B3B3B3B3B5B2AEAEB1B5B5B5B3B5B5B2AEB1B1B1B1B1B3B1ACB1B1B3B3B1ACACACAEB1B3B1B1ACAEACAEACB1B1B1AEAEACAEAEACAEAEB1B1B1B1AEB2B5B5B6B5B3B2B32E010201010101010201020294F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E2C8C9C6C5C6C9C9C9CAC6D1E6C3B1B1B1ACACABABABABABAAAAA8A8A8A8A5A5A5A5AAACB0B0B1B0ABABACACACAAAAACABABAAAAAAA8A8A5A3A3A3A3A2A5A5A5A7A7A7A7A7AAABABAAACACACAAAAA8A7A5A8A8A8A8ABAAAAAAAAACB1B1B1B1B0B2B3B3B3B3B3B5B1B1B1B1B11A00000000000000ACACACB1B3B3B3B3B3B5B8B8B5B2B2B2B2B1B1B1B1B1B2B0B2B5B5B6B3B6B9B9B8B8B9B9BCC0C1BFBDBFBFBBBBB9B6B6B3B1B1B1B0ACACACAAAAAAAAAAABABABAAACAAA7A7A7A7AAA5A7A7A5A2250000000000000000084786ABAAA8A2869DABAAA5AAAAACACACACAAA7A7A7A5A2A2A2A2A3A5A5A5A3A5A5A5A5A3A3A3A3A2A2A2A3A2A2A2A2A2A2A2A29E9F9FA2A5A5A5A8ABACACACB1B3B1B0B0ACABAAACACACABABA8A8AAAAAAABABACAAAAACB0B0B1B3B1B2B2B5B2B5B6B9B9B9B9B9B9BBBCBCBCB9B9BBBFBFBBBBBBBBB9BCBCBCBDC0C0BDBFC1C1C1C1C4C6C6C4C4C4C4C4C6C6C9C9C9C8C9C6C6C9C9C8C9C8C9C9C9C8C8C5C4C3C3C3C3C5C6C5C4C6C9CBC9CBC9C9C6C9C9CACBCECED0D0D0D0D3D3D3D3D3D0D0D1D0CEC9CEC9C9C9C9C8C5C5C5C4C1C0BFC1C1C1C1C1C1C1BFC0C1C0C0BCBCB9BCBCB9B9B9B6B6B6B6B6B3B3B1B2B2B2B2B2B1B1B1B0B2B0B0B0B1B1B3B2B2B1B3B3B6B9B9B9900000000000000069B9B9BCBBBDBDBDBFC1C1C1BFBCBCB9B6B6B2B1640000000000000067B5B2B2B3B6B3B3B5B8BBBBB8B9B6B8B8B9B9B9B9B6B6B6B6B6B9B5B9B9B9B9BCB9B9B9B9B9B6B9B8B5B5B5B2B5B5B9B9B9B9B6B9B9B6B6B9B9BCBCBCBBB9B8B8BBBBB9B6B2B1ACACACB1B1B1B1B1B1B1B1B1ACACACB1B1B3B3B2B5B8B8B8B8BBBBBBBCBDBFC1C1C1C1C0C0BDBDBDBBBCBFBFC1C1C1C1BDC0C0C0C1C4C6C6C3C5C5C4C1C3C3C5C3C3C3C5C8C8C9CBC9C6C9C8C8C4C4C4C8C9C5C5C5C3C1C1BFBFBFC0C1C1C3C0C0C132020202020202020202020292F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E5D1D3D5D3D5D6D3D3D6D3DAECC9BBBBB8B3B2B2B2B5B6B6B9B9B9BCBBBBBCC0BFBFBDBCBCBDBBBDBDBFBCBFBFC3BFBCBFBBBBBBBBBBBBB8B5B6B3B3B6BBBCBCBFBBBFBFC0C3C3C3C1C3C0C0C1C1C3C3C3C0C0BDBDBFC3BFC1BDC0BCBCBCBFBCBCB9B9BBB8B3B3B3B2B1B1B11A00000000000000B1B3B6B6B6B8B8B8B8B3B5B5B5B8B8B8B6B6B3B5B3B3B3B6B5B5B2B5B3B3B3B8BBBBBFBCBCBCBBBBBCBDBBBCBCBCBCBCBBBBBDBDBDBDBBBDBDC1C1C3C3C1C3C3C3C3C3C1C3C3C1C0C3C1C4C1C460000000000000000000000000000000006FC3C1BFBFC0C0BFBFBBBDC0BFBBBFBDC1C3C0BFBCBCBCBDBDC1C1C3C3C3C3C3C1C4C3C1BDBDBDBBBBBBBCBBBBB9B9B9B8B8B8B8B8B3B2B2B2B1ACACACB0B0B0B0ACABABACACACACACACB1B0ACB1B1ACB0B0B1B0ACA8A8A7A7A7A8AAAAA8AAAAAAACB0ACB1ACAAACB1B1B1B0B1ACB0ACAAACB0B0B1B1ACACAAAAA7A5A5A3A3A39F9F9F9C9B9E9EA1A3A5A3A3A5A3A3A3A7A7A7A5A3A3A5A3A3A3A3A5A8A8ABABAAAAAAA7A3A3A7A8A8A5A2A2A29F9F9EA2A3A1A3A5A5A5A7A7A7A7A5A5A7A7A5A3A5A7A7A7AAA7A3A3A3A3A3A3A3A1A1A3A3A3A3A7A7A5A3A3A3A3A5A8AAACACACACB0ACA8ACACA8A8ACA8A5A5A5A7A5A5A7A7A5A7A3A5A5A7ABABA7AAAAAA87000000000000005FAAABABABABABABB0ABACB0B0B0B0ACACACACA85F0000000000000064B1B2B0ACACACABACB1B0B0B1B2B1B1B1ACACB1B2B2B1B1B2B5B5B3B3B3B2B1B1B2B3B3B2B3B6B6B6B6B9B9BCBCBBBBB8B6B6B5B3B5B2B5B5B8B8B3B8B8B9B5B3B3B3B3B3B6B3B3B6B3B2B2B2B2B2B2B2B1B2B2B2B5B2B1B2B2B2B0B2B1B2B2B1B1B1B2B2B2B1B2B3B8B8B6B9BBB9BBB8B3B2B3B2B2B3B1B0ABABB0B1ACACABACABABACACB0B0ACACB1B1B0B0B0B0ACACACB0B1B1B1B1B0B1B1B2B3B2B0B0B0B2B2B3B5B8B8B8B8BB2E020202020202020202020292F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F6F6F6F6F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F7F6F6F6F6F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E5CECECECBCECECACAC9CAD7EAC5B3B2B1B1B1B1B1B3B5B5B3B3B3B6B5B5B5B5B6B5B5B5B5B6B5B5B5B5B2B5B5B3B3B2B3B3B3B1AEACB0B0AEB1B1B1B0B2B2B1B3B3B3B1B1B2B1ACB0ABB0B0AEAEABACACB0AEACACACA8ACA8A8A8ACA8A8A8ACB0B0AEABABAEB1B2B2B5B5B51A00000000000000BCBFBBBBB9B6B6B5B2B2B1AEACB0B2B2B2B1B1B1B1B1B1B3B3B5B5B6B5B5B6B5B5B5B2B2B2B5B5B5B5B5B2B2B2B5B5B5B2B2B2B2B3B3B5B8B9B9BCB9BCBBBBBDBCBBBBBBBBBBBCBBB9BBBBBBBBA5000000000000000000000000000000006BBDBBBBBCBBBBBBBCC0C0C3C3C3C4C8C8C8C8C9C9C8C8C8C8C9C6C6C6C6C6C6C6C6C5C8C8C8C8C9C8C9C8C9C9CACACBD0D0CBC9C9C9C8C9C9C9C9C9C9C9C9CACAC9CACACFCFCFCFD1D0D0CECECED0D1D4D4D1D1CFCFCBD0D0D0D0D1D5D5D4D3D3D3D5D5D4D4D1D1D1D1D4D5D4D1D1D4D4D5D5D5D5D7DAD7D7D7DADAD9D7D7DAD7D7D5D5D7D5D3D4D3D4D3D5D5D9D9D7D4D1CFCBC9C9C9CBCFCAC9CBCBCBCBC9C8C8C8C8C8C8C8C8C8C8C5C5C8C8C8C6C8C6C4C4C4C4C4C6C6C9C6C6C4C4C1C1BDBDBDBBBFBBBCBCB9BCBCBBBBB8B8B5B5B5B8B8B9B5B3B3B3B2B2B2B5B2B2B2AEB1B3B3B2B2B1B2B2B0ACACAAAAA7A5A5A3A2A2A5A7A7A7A8ACA8A8A8A8AC89000000000000005FA7A7A7A7A7A3A3A3A3A3A3A3A3A2A2A29E9E9E5800000000000000569B9C9C9A9A979A9B9B9E9E9EA2A1A2A2A29E9C9A97979A9C9A97979797979794929496969494949696969696999B999A9C9C9E9C9C9C9C9FA2A2A1A3A3A1A19F9F9F9FA29F9FA2A29F9E9E9C9E9FA29F9F9F9E9E9B9B9EA1A3A3A3A3A3A5A8A8A8A8A5A5A5A5A5A5A7AAAAAAA7A3A3A2A19E9E9C9CA1A2A2A5A7A7A5A2A3A7A3A3A3A2A3A7A7A8A8A7A7A7A7A8AAA7A8ABA8A8ACAEAEAEB0B2B2B0B1B0B1ACAEABABAEABABABAEAE2A010101010101010101010191F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F6F6F6F6F7F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2F2F2F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0CAAAACB0AEB0B2B1B5B1B1BFCEB1A0A0A09F9C9C9F9FA1A3A5A8A7A7A7A7AAAAA8ACABABA7A7A7AAA7A7A7AAACACB0ACACB0B0B0ACB0B2B2B2B2B5B2B6B6BBBBBBBDBFBFC3BFC3C3C4C5C3C3C3C0C0C3C5C8C5C5C4C4C4C4C6C6C5C8C6C5C6C9C6C6C9C9C9C9C6C5C5C1C5C51F00000000000000C9C8C6C9C9C8C8C8C6C5C1C3C5C5C5C5C5C8C5C6C6C9C8C5C5C8C5C6C4C1C1C1C4C4C0C1C0C3C0C0BDBDBBB9B8B8B5B5B5B6B5B2B2AEB2AEAEACABACABA7ABABABABABACACB1AEAEB1B1B1B5B2B23700000000000000000000000000000067B6B5B1AEAEAEAEB0B0B0B0B1AEABABACB1B1B1B0B1B1AEABACACACACACB0ACAAACACB0B0ACAAA8A8ABACB0ACACAAABA8ABAAACACACABABAAABABAAABABACACACACABAEB1B1B2B1B0AEB0B0ACAEACACACACACB1ACB1B2B1B2B2B2B2B2B2B2B2B1B1ACB1ACABABABACB1AEAEAEB1B2B2B2AEB2B5B6B6B6B6B2B5B5B5B8BBB8B5B5B5B8B5B8BBB9B9B5B8BBBDC0C0BDBBBBBDBDBDBDC0C1C1BFBDBDBFBDBDBDBDBDC0BFBFBDBDC0BDBDBDBDB9BBBBB9B6B6B9B9B8B8B5B5B5B5B8B8B8B8B8B5B5B5B2B5B2B2B5B5B6B5B6B8B8B8B5B5B5B2B0ACACACABACACACACACACA8ACAAA8A8A8A8A8ACACACACB0AEACAAAAAAA8A8A7A7A5A7A8A8A8AAACABACA8A8ACAEACACB0B2B2B5B2B2B1B2B2B2B1B2B2B5B5B9BBB9BBBBB9B9B8B9B9BD690000000000000069B5B6B9B9BDBDBDBBBBBBBBBBBBBDBDBBBBBDBDBDBDBBBBBBBBBBB6B5B5B9B5B8B8B5B2B2B5B5B5B5B2B2B2B5B5B1B1B0B0ACACACACACACAAAAA7AAAAAAAAAAA7A7A7A7A5A1A1A5A5A5A5A1A3A3A5A5A09E9E9E9E9EA1A09E9F9E9B9B9B9C9E9E9B9B9898989A9A9A989797949494949694908F8F8D8E8E8C8E929294949494979797989B9B9C9EA19E9E9E9C989B9B9C9A9C9FA1A5A5A7A7AAAAAAA7AAA8A8A8A7A7A8A8AAABAAAA2B020101010101010101010190F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F5F5F5F5F5F5F6F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F5F5F5F5F5F5F4F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2F2F2F2F1F1F1F1F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEECDEDEDFDEDFDFDCDBDBDBE4EFD0C4C4C4C4C1C1C4C4C5C3C5C3C1C1C1C1C1C3C3C6C3C3C1C1BFBFBBBBBBB8BCB8B9B9B6B9B9B8B8B5B5B3B3B3B5B5B6B3B1B1B1B0B0B0B3B0B0AEABACB1B1AEAEACAEAEACA8A8A7A7A5A4A4A09F9FA4A5A5A5A5A8A5A5A5A5A8ACA8A8A5A51800000000000000A5A1A1A1A1A1A1A0A09E9E9E9B9B9B9B9896939696989898989B9B9797969798989B9B9B9E9C9E9E9E9B9B979494979B9794949494949692909293939292929393939393969896979B9B9B9B9B9B8D0C0000000000000000000000000000589E9C9B9B9B9B9C9F9C9C9C9B9B98989B9CA0A0A0A0A0A4A5A5A5A5A4A4A4A4A4A4A5A7A7A7A5A1A19E9C9B9B9B9B9C9E9FA4A5A5A49FA1A5A1A1A19FA1A5A5A5A5A5A5A5A5A5A7A5A5A8A5A5A8ABABABACB0B0ACACACACA8ABA8A8ABA8A8A8ABABA8A8A8A5A5A7ABABA8A8A8A8A8ACACAEACAEAEACACABACACACA8A8A8ACACACB0AEAEAEAEAEAEABABA8ABAEAEB1B1B1B1B3B1ACACABABA8A5A8A8A8A5A8A8A7A8A5A5A5A4A0A0A4A4A4A4A0A1A19FA19F9F9F9F9F9E9E9E9E9E9C9C9F9C9FA4A0A0A4A49F9FA0A4A5A8A8A8A8A8A8A7A7A5A5A5A5A4A49F9FA4A1A0A19F9FA4A1A19E9E9C9B9C9C9C9E9E9EA0A0A5A5A5A0A0A4A5A8A5A8ABAEAEAEACB0B0B0B1B3B2B2B3B2B2B2B2B2B5B3B3B0B3B0B0AEAEB1B1B1B1B1B1AE61000000000000005FA8A7A8A8A8A8ABACABA8A8A5A5A1A1A1A5A5A5A7A8A8A5A8ACACB0B0B0B0ACB0B0B0B0ACB0B0B3B6B6B8B8B8B6B5B2B5B2B2B0B0B0B0B0AEB1AEABA8A8A8ABABABACA8A8A8A8A8ACAEAEB2B3B3B6B3B6B6B8BCBFBFBCBCBFBFBFBFC0C1C1C1C0BFC0BFBFBFBFBFBFBFBFBFBCBBBBBDBBBBB9BCBDBDBDBDBBBBB8B6B8B6B5B6B6B6B3B6B8B8B6B6B6B9B9B8B8B6B5B5B5B3B3B3B6B3B6B3B3B3B1AEACA8A7A7ABACB1B0B0ACACAEB12C02020202020201010101018FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F1F1F1F1F2F2F2F2F2F2F2F3F3F3F3F3F3F4F4F4F4F4F4F5F5F5F5F5F5F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F5F5F5F5F5F4F4F4F4F4F4F3F3F3F3F3F2F2F2F2F2F2F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE3D3D6D6D7D6D6D4D1D3D3DEEAC9BFBCBFBFBFC1BFC1C1C1C4C4C3C3C1C1C1C1BFC1C1C1C1C1BDBFC1C4C1C1C4C4C1BFBFBDBDB9B8B6B3B3B3B3B3B2B1AEB1B2B2B0AEACACACACACACAEB0B0AEAEAEB2B0B0B1B1B2B0B0B0B0B2B0B1B0B0ACB1B1AEAEACAEAEAEACAAA8ABAB1900000000000000AEAEAEACACACACA8ABA7ABABAAAAA7A8A8ABAAA8A8A8A5A8A5A5A5A8A5A5A5A8ABABAAA7A7AAACACACB1B0B0B0B1B2B2B2B5B8B6B8B9B6B6B5B2B2B0ACACACAAA8ABACACACACACACACACACAEAEB0B09C0E0000000000000000000000000062ACACB0B0B0ACACACACAEAEB0B3B5B5B8B5B8B6B6B9B8B6B6B6B6B6B8B6B5B6B6B6B6B8B8B8B5B5B5B8B8B8B8B9B6B6B6B6B6B8B8B9B6B6B8B6B6B6B8BBBBBDBFBFBFC3C4C3C4C5C5C3C4C4C3C5C1C1C1C1C1C1C1C1C1C4C3C3C3C5C3C5C4C5C5C6C6C8CACAC8C5C5C5C4C5C5C5C5C5C5C5C5C6C6C5C6C6C9C9C9C9CBCACAC9C9C9CACED0D0CECEC9C9C8CACACACACED0D0D0CECECED0D0D0D0CECECECED0D0D0CECED0D0D0D0D0D0D1D4D1D1D1D4D4D3D1D1D4D1D1D0D0D1D0CED0CED0CED0D0D3D3D1D0CBC9C8C5C5C5C8C9C6C5C8C8C8C8C5C3C3C3C3C3C3C3C3C3C3C1C1C3C3C4C1C4C1BFBFBFBFBFC1C1C5C1C1BFBFBCBCB9B9B9B6B9B6B8B8B5B8B8B6B6B3B3B1B1B1B3B3B5B1AEAEAEACACACB1ACACACAAACAEAEACACAC62000000000000005AA29E9E9EA2A2A2A2A5A8A5A5A5A5A8ABA8A8A5A5A5A5A5A5A4A4A4A4A29F9F9F9F9F9F9E9E9C9C9C9B9B9B9B97939094949797979799999696939697979B9B9B9C9C9C9C9C9B99969292969996929292929293908F90909090909090909090909497949699999B999999999B9C9C9C9E9E9C9C9B9B9B9B9E9B9B9C9C9B9B9B999B9B9E9B9B9B9B9B97979B9C9E9E9E9E9EA2A5A5A5A5A2A2A2A2A2A2A4A5A5A5A29F9F9C9C9B9B992501010101010101010101018EEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F1F1F1F2F2F2F2F2F2F3F3F3F3F3F4F4F4F4F4F4F5F5F5F5F5F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F6F6F6F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F2F2F2F2F2F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEEEEEDEDEDEDECECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBCFB3B5B2AEB2B5B6B6B8B6C0D1AE9F9FA2A5A2A2A2A2A5A5A29FA2A4A5A7A7A5A4A2A2A29D9B9B9B9B9D9F9F9F9D9F9F9F9F9D9D9D9D9B9B9B9D9B9B9B9B9B9B9B9B9799999C9D9D9FA2A5A5A5A7AAACAAA8A8A5A5A4A5A7A7A5A5A2A2A2A2A2A5A5A5A4A4A5A8A8AAACAAAC1900000000000000B1B1B1B3B5B5B5B2B2B3B6B6B3B3B3B3B2B5B5B5B6B9B9B6B6B9B9BBBBBDC0C0BDBDBDBDBDC0C0C3C3C3C1C1C0C0C1C1C1C3C1C1C1C3C1C1BFBDBCBBBBBCBFC0BFBDC0C1C5C3C5C3C3C0C3C3C4C5C6C6B13800000000000000000000000070C6C3C1C1C1C1BFBFBFBDBBB9B6B9B9BBB9B9BBBBB6B9BBB9B9B5B5B2B5B5B1B1B1AEAEAEAEAEACACABACACACACACAAAAAAA8ACA8A8A8ABABACACACAAACACAEB1B2B1AEB1AEAEB1B2B1B1B1B1B2B5B3B6B6B6B6B9B9B9B6B5B5B1AEAEACAAAAACACABACACACACACAEACACACAEACACAEB1B3B3B1B1AEB1B1B1B1B1B1AEAEAEAEAEB1AEB1B2B2B1B5B1B1B1B1B2AEB2B1AEAEAEACAEAEB1B2B2B2AEB2B2AEAEB2B2B5B5B5B3B2B1B1B3B3B1AEACAAA7A7A7AAAAAAABABABABABAAA7A7A7AAAAACACACAEB1B1B1B1B3B3B3B5B6B6B9B9B9B9B9B9B6B6B6B3B5B6B6B9B9B9B9B6B9B9B9BBBDC0C0BCBFBFBDBBBBBBBFBBBBBBBFC1C1C3C5C1C0C1C1C1BDBDBDC1C1BFBFBFBCB9B9B6B6B6B9B9B9BBB9B9BBBCBCC0C1C1C0C1C1C1BFBB6C0000000000000067B5B6B9B6B5B5B1AEAEACAEB1B1AEACABABABA8AAAAAAAAA8A8A7A7A7A7A5A2A5A5A5A7A5A2A29F9FA29D9DA29D9D9B9D9B9B97969693939697979B96969696969797979B9D9D9D9D9C9C9B9B9B9B9B9B9D9B9B9797979B979797999C9B999B9B9B9B979697979996979996999B9B9B9B999997979B9B9B9D9DA29D9B9C9C9C9D9B9B9C9C99999B979B9C9C9C9C9C9DA2A2A2A2A29DA29DA2A2A2A2A2A2A2A29DA2A4A2A2A2A2A2A22601010101010101010101018DEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECEDEDEDEDEEEEEEEEEEEEEEEFEFEFEFEFEFF0F0F0F0F0F0F1F1F2F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5F6F6F6F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F6F6F5F5F5F5F5F4F4F4F4F4F3F3F3F3F2F2F2F2F2F1F1F0F0F0F0F0EFEFEFEFEFEEEEEEEEEEEDEDEDECECECECECECECEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9D0B5B6B3B2B3B3B2B3B5B8C1D6B19E9E9B9B979797979B9B9C9FA2A29F9C9EA19E9E9E9C9EA1A1A2A2A2A1A2A2A2A3A2A2A5A2A2A5A7A7A7A7ABABA7A8A7A8A5A7A5A5A7A5A5A5A7A7A5A5A5A2A2A3A7A7A5A5A5A5A5A7A7AAA7AAAAA7A7A7A7A7A7A5A5A5A7A7A8ABAAAAAA3419191919181919AAACACACACB0ACA8A7A7A7A5A2A5A5A5A2A5A5A3A5A2A2A29F9C9C9F9F9F9F9C9E9E9C9E9C9C9C9C9C9B9B9B9B9B9B9B9C9B9C9F9C9C9F9F9C9C9C9FA2A5A5A5A5A5A5A3A3A2A2A2A29F9F9C9C9F9E9C9E9C732300000000000000000000569B9C9CA1A1A19C9C9FA2A5A2A5A7AAAAAAA7ABABABACB0ACACB0ACACACACACB1B0B0ABB0ABABAAAAACACACACACACAAA7A5A2A5A5A3A3A3A5A5A3A5A5A5A5A7A7A7A5A5A2A19E9E9EA1A2A1A3A5A5A2A5A8A8ABABABABA8ABABABABA8ABABB0B2B2B3B3B3B3B1ACB1ACACABABABABABAAACAAA7A5A5A5A7A7A7A8A5A5A5A5A5A7AAAAACB1B1B2B1B2B2B3B8BBBBB8B8BBBBBBBBBCBDBDBDBCBBBCBBBBBBBBBBBBBBBBBBB8B6B6B9B6B6B5B8B9B9B9B9B6B6B3B2B3B2B1B3B3B3B1B2B3B3B2B3B3B5B5B3B3B3B1B1B1B1B0B0B2B1B2B1B1B1ACAAA7A5A3A3A7A8ACABABA8A8AAACACACACA8A8A8A8A7A7A7A5A5A3A3A3A3A3A2A2A1A1A1A19C9C9C9EA2A5A7A7A8A7A3A3A5A5A5A2A2A5A3A3A2A2A2A1A19E9C9C9C9C9B9E9C9C9F67171717181818186CA5A5A2A2A19F9CA1A1A1A1A3A2A2A2A2A5A7A7A7A7A7AAABABABABABACA8A8A8A8A7A7A7A7ABABA7A7A5A5A5A5A8ABABABABABACB0B0ACAAAAAAAAA7A8A8A8A8AAA7AAACACACABACB1B1B0B0B1B1B3B6B8B5B3B5B5B2B2B1ACACABA8A7A7A7A5A5A5A2A2A2A2A2A3A3A3A2A5A29F9F9F9FA29E9F9F9E9B9E9FA2A2A2A1A19E9E9E9EA2A3A2A1A2A2A3A3A29EA2A2A5A5A5A5A29F9F9F9C9B9B9B9B9C9E9E9E9C9E9E9E9E9C9C9C9C2601010101010101010101018CE9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBECECECECECECECEDEDEDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F2F2F2F2F2F3F3F3F3F4F4F4F4F4F5F5F5F5F5F6F6F7F7F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F8F8F8F8F8F7F7F7F7F7F7F6F6F5F5F5F5F4F4F4F4F4F3F3F3F3F2F2F2F2F1F1F0F0F0F0F0EFEFEFEFEEEEEEEEEEEDEDECECECECECEBEBEBEBEBEBEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7D5BDBFBFBDC0BCBBBCBDBBC5DAB6AAAAA7A5A3A4A4A3A7AAAAAAAAAAABACACABA8A8A8A8A7A7A7A7A7A8A5A8ABABACAAACAEAEACACB0B0B2B5B6B3B2B3B3B1B1AEACACAAA7A7A7A5A4A4A4A2A2A1A1A1A2A2A2A1A4A19E9E9E9EA19C9E9E9C999C9EA1A1A19F9F9C9C9C9CA1A2A19FA1A1A2A2A19CA1A2A4A3A3A4A29E9E9E9B979797979A9C9C9C9A9C9C9C9C9A9A9A9A9797979A9797979797979797969797999B9B9C9FA2A4A4A3A7AAA7A5A5A4A2A2A4A3A3A2A29F9FA1A1A1A2A2A4A2A2A4A5A5A7AAA7A8A8965F3B191A030000081A7BB2B2B2B0B0B1B3B3B1B1B1B1B0B2B2B2B2B5B5B2B3B6B6B6B6BBBDBDBBBBBBBBBBBDBDC0C0C0BDBFBDBDBFBFBDC0BDBFBFC0BDBDBBBBB9B8B8B9BBBDBBBBBDBFC1C0C1C0C0BDC0C0C1C1C3C3C5C5C5C5C8C8C8C8C8C5C5C6C5C3C0C3C0BFBFBFBDBBBBBBBBB6B5B3B6B6B6B6B6B6B6B3B5B6B5B5B2B2B0B2B2AEAEAEACACACACACAAAAA7A8A8A8A8A8A7A7A7A5A8A5A5A5A7A7AAA8A8A7AAAAACAEB0AEACACABABACB0AEAEAEAEB0B2B1B2B2B2B3B6B6B6B3B2B2AEACACA8A7A7AAAAA7AAAAAAA8AAABA8A8AAACAAAAABACB1B1ACAEACACACAEAEAEAEACACACACACAEABAEB0B0AEB2AEAEAEAEB0ACB0ACABABABA8ABABAEB0B0B0ACB0B0ACACB0B0B2B2B2B1B0ACACB1B1AEACA8A7A3A3A3A7A7A7A7A7A7A7A7A7A3A3A3A7A7AAAAA8ABACACACACB1B1B1B2B2B3B6B6B6B6B5B5B2B2B2B1B2B3B3B6B6B6B6B2B5B5B5B6BBBDBDB9BBBBBBB6B8B8BBB8B8B8BBBDBDC0C1BFBDBFBDBDBBBBBBBDBFBBBBBBB9B6B6B3B3B3B5B6B6B8B5B5B6B9B9BDBFBFBDBDBDBDBBB8B8B6B5B2B6B6B6B6B3B2B3B5B3B2B2AEACACA8ACACACABA8A7A7A7A5A7A7A7A7A5A5A3A3A3A3A29FA2A4A2A3A2A1A19C9C9F9B9B9F9B9A979A97979692929090929696979393939393969696979A9A9A9A99999797972501010101010101010101018BE7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEBEBEBEBEBEBECECECECECEDEDEEEEEEEEEEEFEFEFEFF0F0F0F0F0F1F1F2F2F2F2F3F3F3F3F4F4F4F4F4F5F5F5F5F6F6F6F7F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F8F8F8F8F8F7F7F7F7F6F6F6F5F5F5F5F4F4F4F4F3F3F3F3F2F2F2F2F1F1F0F0F0F0EFEFEFEFEEEEEEEEEDEDECECECECECEBEBEBEBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5D0B6B6B5B3B5B5B3B9B9BBC6DBB8A5A5A0A3A3A3A19EA19E9F9C9B9CA09C9C9C9C9F9CA0A3A3A1A19F9E9E9EA09EA0A1A1A09F9C9E9F9FA1A19E9F9FA09E9E9E9E9F9F9C9A989896939494969696939392928F8F8D8D8D8E8E92908E8E909393908E8E8D8E8D909296929092908E8E8E8C89898E898E8D8D9092949494979798969698969898989897949497979A9B9CA09E9F9E9EA1A1A0A5A3A39F9E9EA19F9F9FA1A5A5A7A5A5A7A7A7A5A7A8A8A8A8ACAAAEAEB1B1B1B5B6B6B9B6B9B9BBBDB9B9B9B8B8B9BCBFBCBDBBBBBBBBBFBFBDBFBFBCBFC1BFBFC1C1C1C0BFBCBCB9BCBCBFBCBFBFBFC0C0C0C0BFBFC0C0BFBFBFBFBCB9B9BCBDBCBCBCBFBDBFBFC1BFBDBDBFBCBFBBB9B9B9BBBBB8B9B8B9B8B8B5B5B1B1B0B0ABABABAEABAAA8A7A8A7A7A5A3A5A39FA3A3A3A3A3A5A5A8A7A7A8A8A8ABA8AAAAA7A7A7A7A7A5A7A7AAAAAAAEAEAAAAAEAEABA8A7A7A7A7A7A7A7A7A8A7A3A3A5A8A8A8A7A8A8A7A3A5A5A5A5A5A7A5A1A5A5A7A7A5A1A0A0A3A5A7A5A5A1A3A0A3A1A5A5A5A3A3A1A3A3A1A3A3A5A5A5A5A3A7A8A8AAA8A7A7A7A7A5A7A5A5A5A5A5A8A5A8AAA8AAAAAAAAAAA8A8AAA8A8A5A8A5A3A3A3A5A8A7A7A7A8AAAAA8A7A8ABAEAEAEAEAAABABABB0B1B0ABABABB0ABB0B1B1B1ACB0B2B5B8B8B5B2B2B5B5B5B5B8B9B9B6B5B5B6B5B3B5B3B5B8B6B6B5B5B8B5B5B3B3B1B1B2B1AEAEB1B1B0B0ACACACACB0B0B0B0B0ABACACA8ABA8A8ABABAEABAEB0B0B0ABABACAAA7A5A5A5A3A5A5A5A5A5A5A0A5A1A0A0A0A0A0A5A5A5A5A7A7A5A1A1A1A0A09F9F9C9FA0A0A0A1A5A3A5A0A0A5A7A5A5A7AAAAACA8A8A8A8A8AAA8AAAAACACB1B2B1B2B2B1B1B0B1B1B3B1B0ACABABABB0ACB0ACAEB1B1B3B3B3B2B2B2B1B1B1B3B3B2B1B3B5B5B3B1B1B1B1B1AEACACB1ACB0B0ABA8AAABABABABA8A8A8ABABA8A8A7A728010101010101010101010189E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9EAEAEAEAEAEBEBEBEBECECECECECEDEDEEEEEEEEEFEFEFEFF0F0F0F0F1F1F2F2F2F2F3F3F3F3F4F4F4F4F5F5F5F5F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F8F8F8F8F8F7F7F7F7F7F6F6F5F5F5F5F4F4F4F4F3F3F3F3F2F2F2F1F1F0F0F0F0EFEFEFEFEEEEEEEDEDECECECECEBEBEBEBEAEAEAEAE9E9E9E9E9E8E8E7E7E7E7E7E6E6E6E6E6E6E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D4BFC0C1C3C3C4C4C4C5C8D1E1BFAEAEABA8A8A5A4A4A7A7A5A7A7A7A5A7A8A5A5A7A8A7A7A8AAACACAAABA8AAAAABABABABA8A8A8A8A8ABA8ABACACABAEABABABABACA8ACAAA8A8A8A5A8A8ABACACACA8ACACA8A8ACACAEAEAEACACAAAAACACABA8A5A4A2A2A2A4A4A4A5A5A5A5A5A4A2A2A2A4A4A7A7A5A8AAAAAAAAACACACAEB0B1B2B2B2B2B2B2B0B0B0ACAEB1B1B2B2B2B2B0B2B2B2B3B6B9B9B6B8B8B6B3B5B5B8B5B5B5B8BBBBBCBFBBB9BBBBBBB6B6B6BBBBB8B8B8B6B2B2B1B1B1B2B2B2B5B2B2B3B6B6B9BBBBB9BBBBBBB8B5B5B3B2B0B2B2B3B3B1AEB1B2B1AEAEABA8A8A5A8AAAAA8A5A5A5A5A2A4A4A4A4A2A2A2A2A2A29F9C9FA09FA29F9C9C99999C99999C9998969896969290908E8E9092929490909090909292929698989898979794949494969698949492929294929292939794939494949492909292939092939093969696969393929294949698999B9894979797989494979793939492949797979797989B9B9C9B9B999B999B9B9B9C9C9B9B9B999C9E9C9C9B9B9B9B989899999C9E9EA0A0A2A2A29F9FA2A5A7A7A5A2A5A5A4A29E9EA0A2A4A29EA2A4A4A4A2A2A2A2A29F9F9F9F9FA2A2A5A7A5A5A2A29FA2A2A2A09CA09C9E9B999C9F9C9C9C9C9E9C9FA2A2A0A09E9C9C9C9F9C9FA0A09F9E9B9C9E9EA0A09C9E9E9F9C9C9C9C9E9E9B99989894929393949494929290908E8E8C8C8C8D8D908F8D8D8F92928F8D8D8C8D8C8F9094908F908F8D8D8D8988888D888D8C8C8F909393939696989494989498989898979393979799999C9F9C9E9C9CA0A09FA2A2A29E9C9CA09E9E9EA0A2A2A5A2A2A5A5A5A2A5A8A8A8A8ABA8ACACB0B0B0B2B5B5B8B5B8B8B9BBB8B8B8B6B6B8BBBDBBBBB9B9B9B9BCBCBBBDBCBBBCBFBCBCBFBFBFBFBCBBBBB6BBBBBCBBBCBCBCBFBFBFBFBDBCBFBFBDBDBDBCBBB6B82F010101010101010101010188E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7E7E7E8E8E9E9E9E9E9EAEAEAEAEBEBEBEBECECECECEDEDEEEEEEEFEFEFEFF0F0F0F0F1F1F2F2F2F3F3F3F3F4F4F4F4F5F5F5F5F6F6F7F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F8F8F8F8F7F7F7F7F7F6F6F5F5F5F5F4F4F4F4F3F3F3F2F2F2F2F1F1F0F0F0EFEFEFEFEEEEEEEDEDECECECEBEBEBEBEAEAEAEAE9E9E9E8E8E7E7E7E7E6E6E6E6E6E5E5E5E5E5E4E4E4E4E4E4E3E3E3E2E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D4C3C4C0BFC0C0BFC1C3C3CBDEBDAEAEB1B1B2B2B5B8B8B5B5B5B5B5B8B8BBBBBBB9B9B8B8B9B9B9BBB9B9B9BBB9B9B6B5B5B3B3B5B6B8B6B5B8B9BDBBBDBBBBB8BBBBBCBDBDBDC1C1C1C1C3C3C3C3C3C0C0C3C0BDBBBDBBB9B9B9B9B6B6B6B5B2B1AEB1B1B2B1B1B2B2AEB1B2B1B1ACACABACACAAAAAAA7A7A7A7A7A5A5A4A5A5A5A5A5A2A2A2A2A5A2A2A2A4A4A5A5A5A2A5A5A7AAABAAA7A8A5A5A8ABAAAAAAAAABACACAEAEAEAEB1B1B1AEACACAAA7A7A5A2A2A5A5A4A5A5A5A5A5A5A5A5A5A7A5A5A5A8ACACA8AAA7A8A8AAAAAAAAA7A7A7A7A7AAA5AAABABAAACAAAAAAAAABA7ABA8A5A5A5A5A5A5AAABABABA7ABABA7A7ABABACACACACABA8A8ACACAAA7A5A29F9F9FA2A2A2A4A4A4A4A4A29F9F9FA2A2A5A5A5A5A8A8A8A8ACACACACAEAEB1B1B1B1B1B1AEAEAEACACAEAEB1B1B1B1AEB1B1B1B2B5B8B8B5B6B6B5B2B3B3B6B3B3B3B6B9B9BBBDB9B8B9B9B9B5B5B5B9B9B6B6B6B5B1B1AEAEAEB1B1B1B3B1B1B2B5B5B8B9B9B8B9B9B9B6B3B3B2B1AEB1B1B2B2AEACAEB1AEACACAAA7A7A5A7A8A8A5A5A4A4A4A2A2A2A2A2A2A29F9F9F9F9E9B9E9D9E9F9E9C9C98989B97979B979694969494908D8D8D8D8D9090938F8F8F8F8F90909094969696969494939393939494969393909090939090909294939293939393908D9090928F90928F92949494949292909093939496979B9693949494969393949492929390939494949494969B9B9C9B9B979B979B9B9B9B9C9B9B9B979B9C9C9C9B9B9B9B969698989C9C9C9D9DA2A2A29E9EA2A4A5A5A5A2A5A5A29F9C9C9D9FA29F9C9FA2A2A2A2A2A29F9F9E9E9E9E9EA2A2A4A5A5A5A2A29E9F9F9F9D9C9D9C9C9B989B9E9B9B9B9B9C9B9E9F9F9D9D9C9C9C9C9E9C9E9D9D9E9C9B9C9C9C9D9D9C9C9C9E9C9C9C9C9C9C9B9796969390929293939390908D8D8D8D8989898C20010101010101010101010187E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E3E3E3E4E4E4E4E4E4E5E5E5E5E5E6E6E6E6E6E7E7E7E7E8E8E9E9E9EAEAEAEAEBEBEBEBECECECEDEDEEEEEEEFEFEFEFF0F0F0F1F1F2F2F2F2F3F3F3F4F4F4F4F5F5F5F5F6F6F7F7F7F7F7F8F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F8F7F7F7F7F6F6F5F5F5F5F4F4F4F4F3F3F3F2F2F2F2F1F0F0F0F0EFEFEFEEEEEEEDEDECECECEBEBEBEBEAEAEAE9E9E9E8E8E7E7E7E6E6E6E6E5E5E5E5E4E4E4E4E3E3E3E2E2E2E2E2E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0DFDFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEC4AAABAEB0AEACB0ACB0B0BBCFB1A3A3A3A3A7A8A7A3A2A3A7A8A8AAAEB1AEABA8A8AAAAAAAEAEACB1ACAAA8A8ABAAAAAAA8A8A8A8A7A7A7A7A5A5A3A7A7A7A5A3A2A2A29FA1A2A2A2A2A2A3A29F9FA2A2A3A7A7A7A7A8A8A8ABABABAAA8A8A8A7A7A7A5A5A7A7A7A3A3A7A7A3A7A7A8A5A8A7A3A29F9F9B9B9B9FA2A29F9F9D9B9B999B9B9C9C9B9C9C9C9C9D9C9F9FA19C9C9DA2A2A2A2A1A1A19D9B9B9B9B9B97979496979B9B9B9B969994949696939499999493929290908D8C8C8D8D908D90908F8C8F8F92939494949696949496969694949994979B9C9C9C9F9FA2A29F9FA2A2A1A3A3A5A7A7A7A7A8A5A5A5A5A5A5A5A7A8ABABABABABAEAEAEAAAEB1B1B2B2B5B2B5B3B5B2B2B1B1B1B2B2B1B2B2B1B1B2B1AEAEAEB1B1B1B1ACB0B1B1B0B0ACACA8A8ABAEAEAEAEAEAEACACA8ACAEAEB0B2B2B3B2B2B3B3B2B1B2B2B1B1B1B0B0ABABAAACACAAAAAAAEAEB1AEB1B1AEABABABABABABABABA8A8A7A3A3A3A5A5A5A8A8A8A8A8A8AAACB0B1B1B0ACB0B1B0B0ACAAA8A8ABB0ABABA8ABABAEB1B1B1B0B1ACB1B2B2B2B1B1B0AEACACAAA8A8A8A8A8A8A8A8A8A7A8A8A7A7A7A8A8A5A7A3A3A5A5A5A3A7A7A7A5A5A5A3A3A3A7A7A7A8A7A5A7A7A3A3A3A3A7A7A8AAACB0B0B0ABABABA8A8ABA8A8A5A5A5A7A8AAA7A8ABA8AAACAEAEAEABAEAEAEAEACACACACACACAEAEACACB1ACAEB0B1B1B1B1B2B5B5B6B5B5B3B2B2B2B2B1B1B3B1B2B2B3B6B3B6B6B6B8B8B6B6B6B6B6B6B2B5B5B5B5B5B2B2B6B8B6B6B8B8B6B2B2B2B2B0ACAAA8A8A8A8A8A7A7A3A7A7A7A5A3A2A2A2A2A2A2A3A5A5A3A3A3A7A5A5A7A7A7A5A5A5A5A7A5A7A5A5A3A7A7A3A3A3A3A3A3A29F9DA1A19FA2A2A2A1A2A2A2A3A3A3A2A2A3A29DA19CA1A19F9F9C9D9DA19F9D9D9D9B9D9B9B9B9D9B9B9B9DA1A19F9C9C9FA2A2A3A7A5A5A5A7A7A7A7A8AC2A010101010101010101010185DEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E2E2E2E2E2E3E3E3E4E4E4E4E5E5E5E5E6E6E6E6E7E7E7E8E8E9E9E9EAEAEAEAEBEBEBECECECEDEDEEEEEEEFEFEFF0F0F0F0F1F2F2F2F2F3F3F3F4F4F4F4F5F5F5F5F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7F7F7F7F7F6F6F5F5F5F4F4F4F4F3F3F3F2F2F2F2F1F0F0F0EFEFEFEFEEEEEEEDECECECEBEBEBEAEAEAE9E9E9E9E8E7E7E7E6E6E6E6E5E5E5E4E4E4E4E3E2E2E2E2E1E1E1E1E1E0E0E0E0E0DFDFDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCCCB8B8B8B8BBBBBDBFBDBDC4D6B5A4A3A4A0A4A4A5A5A3A5A5A7A4A3A3A3A3A3A5A3A3A5A3A0A1A1A1A1A1A19EA1A1A1A4A19EA0A0A09CA09FA1A19E9F9FA1A1A19FA0A3A5A5A5A7A8A7A8A5A3A1A3A1A1A39F9C9A9A9C9F9C9C9A9B9A9A9B9B9C9C9C9C9F9F9C9C9C9C9B9B9B9C9F9F9F9F9C9E9FA0A3A09C9C9CA0A0A3A4A5A5A5A5A8A5A5A8A8A8AAAAA8A8A5A3A3A5A5A5A5A5A4A7A8AAACAAACACACAEACACACACACACACACACACACAEAEAEAEB1B1B3B5B8B9BBBDBDC0C3C3C3C3C1C5C5C5C5C5C4C0C4C0C0C1BFBDBDBFBFBDBFC3C3C1BFBFBFC3C4C4C0C3C3C0C0C3BFBDBDBDBDBDBDBDBCBCBCBDBDB9B8B8B8B8B9B8BBBDBDBDBFBFBFBFBDBCB9B6B5B5B5B5B5B3B5B5B2B0B0B1B1B2B1B1AEAEABABABABABABACAAAAA8A8A7A7A5A5A5A3A3A3A3A3A3A3A5A5A3A5A5A4A7A5A5A5A5A8A8A8A7A7A8A8A8A7A7A8A8A5A5A7AAABABACAAAAA8A8A5A7A7A5A3A3A3A5A5A5A7AAAAA8A8A8A8A8A8A8A7A7A8ABACB1B2B1AEAEAEB1B1B3B5B6B6B6B5B5B5B2B3B3B5B2B1B1B1B1B1B3B1B2B2B2B2B5B5B5B6B6B6B5B6B5B3B1B1B5B5B5B5B5B8B5B5B5B2B2B3B5B5B5B5B5B5B5B5B8BBBBBCBCBBBDBDC0BFC0C0C4C1C4C5C5C6C5C4C1BFBFBFBFC1BFBDBDBDBDBFC0C0C0C0C0C0BFC0C3C0C0C0C0C0C1C1C1C1C3C3C5C6C5C5C6C9CAC9C9C5C5C5C9C9C6C6C6C6C5C5C6C5C5C6C5C6C6C6C6C5C5C1BFBDBDBDBDBDBFBFBFBFBFBDBDBDBDBBBBB8B5B3B1B1AEACACABAAAAAAA8A7A5A5A5A4A5A8A8A8A7A7A4A1A1A19E9E9C9B9997939392929293939797979793908F8B8B8B89898789898787898888888889898787878287878782868686898789888B8F8F8F8F909092908F8F8F8B8E8E8F8F8B8B8B8B8B8F8F8F8F9090908F90909090909292979794949393979797999B9B9E9E9E9C9EA0A3A1A3A3A3A09F9F9E9E9EA0A3A5A8A729010101010101010101010184DCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E3E3E4E4E4E5E5E5E6E6E6E6E7E7E7E8E8E9E9E9EAEAEAEBEBEBECECECEDEEEEEEEFEFEFEFF0F0F0F1F1F2F2F2F3F3F3F4F4F4F4F5F5F5F6F6F7F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7F7F7F7F6F6F5F5F5F5F4F4F4F3F3F3F2F2F2F2F1F0F0F0EFEFEFEEEEEEEDEDECECECEBEBEBEAEAE9E9E9E8E8E7E7E7E6E6E6E5E5E5E4E4E4E3E3E2E2E2E1E1E1E0E0E0E0DFDFDEDEDEDEDDDDDDDDDDDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9BFA4A5A8ABAEAEB0AEABABB5C9A897979B9898969696949492909090908F92929294949494949798989798989897979494929494949498979797979B9C9C9C9C9B9D9F9F9F9F9FA19C9C9C9C9C9C9C9C9F9F9C9B9B98989B9C9F9F9F9F9FA1A1A1A19D9D9D9D9C9C9C9C9C9D9B9DA1A1A19FA1A4A4A1A1A5A5A7AAABA8A7A8A8A5A5A4A1A19F9C9C9C9B98989897979696969898989698969494949496929494928F9294969696949492929292969896949696989896929697989B9B9897949494928E8E8E8E909292929092929292909090908E8E8E908E8E8E8E8E8E8E8E8C8D8D8F929292949898989B9C9F9C9B9B989897989B9B989894949696969898989797989B9B9C9F9C9D9DA19DA1A1A4A4A4A4A4A4A5A7A7A7A5A5A5A8A8A5A5A5A5A5A7A7A7A7AAAAA7A8ABABACACAEB1B1AEAEAEAEAEB1B1B3B3B3B2B2B1B1B2B2B2B3B2B2B2B3B2B2B0AEACACACACB0B1B0AEB1B2B6B3B6B3B3B1B3B3B5B6B6B6B9B9B9B9BCBCBCBCBCB9B9BBB9B6B3B6B3B2B2B2B2B0B0B0AEACAAA8ABABACABABACACA8AAACAAAAA7A7A5A7A7A4A4A4A1A1A1A1A19F9F9C9D9D9D9D9D9C9C9C9B9D9B9B9B9C9C9F9D9D9C9F9FA1A4A5A4A1A1A1A1A1A5A4A4A4A4A5A7A5A7A7A7A8ABABABA8A7A7A4A1A19D9C9C9F9F9C9F9F9F9D9FA19D9D9FA19F9FA1A1A5A5A1A4A1A1A1A4A4A4A4A1A1A1A1A1A4A1A4A5A5A4A7A4A4A4A4A5A1A5A1A1A1A19DA1A1A4A5A5A5A1A5A5A1A1A5A5A7A7A7A5A5A1A1A5A5A4A19D9C9B9B9B9C9C9C9C9C9C9C9C9C9B9B9B9C9C9F9F9DA1A1A1A1A1A5A5A5A7A7A8ABABABABAAAAA7A7A7A5A7A8A8ABABABABA7AAAAAAACAEB1B1ACB0B0AEACACACB0ACACACB0B2B2B3B6B2B1B2B2B2AEAEAEB2B2B0B0B0ACABABA8A8A8AAABABACAAAAACACACB1B2B2B1B2B2B2B0ACACACAAA7ABABACACA8A7A8AAA8A7A7A4A1A19DA129010101010101010101010182D9D9D9D9D9D9D9D9D9DADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDDDDDDDDDDDEDEDEDEDFDFE0E0E0E0E1E1E1E2E2E2E2E3E4E4E4E5E5E5E6E6E6E7E7E7E8E8E9E9E9EAEAEBEBEBECECECEDEDEEEEEEEFEFEFF0F0F0F1F2F2F2F2F3F3F3F4F4F4F5F5F5F5F6F6F7F7F7F7F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7F7F7F7F6F6F5F5F5F4F4F4F4F3F3F3F2F2F2F1F0F0F0EFEFEFEEEEEEEDEDECECEBEBEBEAEAEAE9E9E9E8E7E7E7E6E6E5E5E5E4E4E4E3E3E2E2E2E1E1E1E0E0E0DFDEDEDEDEDDDDDDDCDCDCDCDBDBDBDBDBDADADAD9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7C7ACAEAEB1B1B1AEB0B3B6BFD1B1A3A2A3A29D9D9D9D9D9D9C9B97979B9C98989797979797979B9B98989C9C9B9B9B9B9797979B9C9C9C9C9B9B9C9C9D9C9B9B9B9C9C9D9FA2A2A2A2A3A1A1A3A3A3A5A5A3A3A19D9DA2A2A2A2A19FA2A5A5A8A5A8A8A8AAA8A8A8A8A8A7A7A8A8A8A8AAAAAAAAACACB0B1B3B5B6B9B9BCBDBDBDBDBDC0C0C0C0C1BFBCBFBCBCBDBBB9B9BBBBB9BBBDBDBDBBBBBBBDBFBFBCBDBDBCBCBDBBB9B9B9B9B9B9B9B8B8B8B9B9B5B3B3B3B3B5B3B6B9B9B9BBBBBBBBB9B8B5B2B1B1B1B1B1B0B1B1AEABABACACAEACACAAAAA7A7A7A7A7A7A7A5A5A3A3A2A2A1A1A19D9D9D9D9D9D9DA1A19DA1A19FA2A2A2A2A2A5A5A3A2A2A5A5A5A2A2A3A3A2A2A2A5A7A7A8A5A5A3A3A2A2A2A19D9D9DA1A2A2A2A5A5A3A3A3A3A3A3A3A2A2A5A7A8ACAEACAAAAAAACACB0B1B2B2B2B1B1B1AEB0B0B1AEACACACACACB0ACAEAEAEAEB1B1B1B2B2B2B1B2B1B0ACACB1B1B1B1B1B3B1B1B1AEAEB0B1B1B1B1B1B1B1B1B3B6B6B8B8B6B9B9BCBBBCBCBFBDBFC1C0C3C1BFBDBBBBBBBBBDBBB9B9B9B9BBBCBCBCBCBCBCBBBCBDBCBCBCBCBCBDBDBDBDBDBDC0C3C1C1C3C4C6C4C4C1C1C1C4C4C3C3C3C3C1C1C3C0C0C3C0C3C3C3C3C0C0BDBBB9B9B9B9B9BBBBBBBBBBB9B9B9B9B6B6B3B1B0ACACAAA7A7A7A5A5A5A3A2A2A2A29FA1A3A5A5A2A29F9D9D9D9B9B9897969390908F8F8F909092929292908D8A8888888585838585838384868686868484838383808383838081818185838486888C8C8C8C8E8E8F8D8C8C8C8889898C8C88888787878A8A8A8A8D8D8D8C8E8E8E8E8E8F8F9294909090909392929697979B9B9B989B9C9D9D9D9D9D9C9C9C9B9B9B9C9DA2A5A2A2A3A3A7A5A2A5A5A3A3A1A3A2A2A1A2A2A2A2A2A5A2A5A5A5A5A2A5A5A5A5A29FA2A5A2A2A3A3A5A5A5A5A3A2A2A2A2A3A3A3A5A5A7AAA7A7A72A010101010101010101010181D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9DADADADBDBDBDBDBDCDCDCDCDDDDDDDEDEDEDEDFE0E0E0E0E1E1E1E2E2E2E3E4E4E4E5E5E5E6E6E7E7E7E8E9E9E9EAEAEAEBEBEBECECECEDEEEEEEEFEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F4F5F5F5F6F6F7F7F7F7F8F8F8F8F9F9F9F9F9FAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7F7F7F7F6F6F5F5F5F4F4F4F3F3F3F2F2F2F1F1F0F0F0EFEFEEEEEEEDECECECEBEBEBEAEAE9E9E9E8E7E7E7E6E6E6E5E5E4E4E4E3E2E2E2E1E1E1E0E0DFDFDEDEDEDDDDDDDCDCDCDBDBDBDBDAD9D9D9D9D8D8D8D8D8D7D7D7D7D7D7D6D6D6D6D6D6D6D6D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4CEC1C3C5C1C3C0BFBDBDBBC3D1B1A7A4A4A4A1A4A4A4A4A1A19E9E9EA1A1A19E9C9C9C9B9B9B9E9B9B9A97999C9C9A9A999A9A99969693939290908D8D8D909090909396939393939699969693939393939392929292908F8F8F8F8F8F8D8D8C8C8C8888888886838183838686868689898484838486868888888C898C8C8C8889848181848984818181818183807E808181808080818181818183868384898988898989898A8C8C898D8D89898A8A8A8A8D8A8A8C8C8A888889888A8D8A8A8A8888868688898D8D8D8D8D909393939390909090909092939393908F8F8C8988888989898C8D909292908D8F908F8F8F8D8F90909393929092929393929394939396979797999B9B99999999969794949794949497979494949393939797969696969699999A999A9A9999979999999494949999999B9A9A9A9A9A9A979794979A9A9C9C9C9C9E9C9999979796939696969394949394929393908D8D909090908D8F8F8D8F8D8D8D8D8D8C8C8C8C8C89898D898D908D8D90908D8D8D909394949494949493939293929290908D8D908F8D8F8D8D908F8F8C8C89888A8A8A8C8C8C8D8D9090908D8D9092949294979A9A9A999B9B9B9C9E9D9D9E9D9D9D9D9DA19E9E9B9E9B9B9A9A9C9C9C9C9C9C9A999493949493939396969394949494979997949492908F8F8F909290939496939699999B9B9B9B999B9B9B9B999B9B9EA1A1A4A4A4A3A19DA19D9D9B9B9B9B9B9A9C9A97949494979797999696949494999A9A9D9F9FA19FA1A1A4A7A8A8A7A7A8A8A8A8AAACACACAAA8AAA8A8A8A8A8A8A8A8A8A7A5A5A7A5A5A4A7A7A7A7A7A5A5A4A1A4A1A1A3A3A39FA1A4A4A1A3A3A4A4A4A4A3A1A1A19F9E9EA19FA19F9F9F9C9A9996939397999C9B9B99999A9C9C9C9C99999999999999969693939393939393909090908D8D8D8F92949725010101010101010101010180D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D6D6D6D6D6D6D6D6D7D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADBDBDBDCDCDCDDDDDDDEDEDEDFDFE0E0E0E1E1E2E2E2E3E4E4E4E5E5E6E6E6E7E7E7E8E9E9E9EAEAEBEBEBECECECEDEEEEEEEFEFF0F0F0F1F1F2F2F2F3F3F3F4F4F4F5F5F5F6F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7F7F7F7F6F6F5F5F5F4F4F4F3F3F3F2F2F2F1F0F0F0EFEFEFEEEEEDEDECECEBEBEBEAEAE9E9E9E8E7E7E7E6E6E5E5E4E4E4E3E2E2E2E1E1E0E0E0DFDEDEDEDDDDDCDCDCDBDBDBDADAD9D9D9D8D8D8D7D7D7D7D6D6D6D6D5D5D5D4D4D4D4D4D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CEC1C1C1C0BFBDBDBDBDB9C1CFB1A5A5A5A5A5A5A1A3A5A3A3A1A19EA1A19C9C9C9B9B9B9B9B9898979898989898979797969896969697979898989798989B9C9E9C9B9C9A9A9C9E9C9C9C9C9EA19FA1A1A1A1A5A5A5A1A1A19C9B9B98979798989798989898989A9898989B98989A9C9F9F9C9C9B9C9C9C9C9C9C9B9B9B9B9B9C9A9C9E9E9CA19C9C9C9C9E9B9E9C9A9A9A989A9A9C9E9E9E9B9E9E9B9B9E9EA1A1A19F9E9C9C9F9F9C9B989793939397979797979797979793939397979898989A9C9C9C9C9F9F9FA1A1A1A5A5A5A5A3A3A1A1A19FA1A1A1A5A5A5A5A1A3A3A3A5A8AAAAA7A8A8A8A5A5A5A8A5A5A5A8ABABACAEACAAACABABA8A8A8ABACA8A8A8A7A5A5A1A1A1A3A5A5A5A3A3A5A7A7AAACACAAABABABA8A5A5A5A3A1A5A5A5A5A1A1A1A3A1A1A19C9B9B989B9C9C9A989797979697979797969693939393928F929292939290908D8D8F8B8B8F8B8B898B89898681818181818686888282828282868686898B8B8B8B88888888888889898B88888686868886868687888887888888888681868687828687828789898989878786868888898B8B8E8B888888888B88888888878788868888888888888B8E8E908E8E8B8E8B8E8E8E8F908E8E8E8B8F9090908E8E8E8E8B8B8D8D909090929296969692929697989898969898979390909293979390939797979696969393929292929296969798989896969293939392909290908E8D8F928F8F8F8F908F929393929290909090929092929292908E9090909292909090929090909090908E8B8B8B888687878888888686818181817E7E7E8080818180808186868180807E807E818288828182818080807D7C7C807C807E7E818287878789898B88888B888B8B8B8B88878788888B8D8F92909090909292929693939090909290909092969698969698989896989A2601010101010101010101017ED1D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D3D3D4D4D4D4D4D5D5D5D6D6D6D6D7D7D7D7D8D8D8D9D9D9DADADBDBDBDCDCDCDDDDDEDEDEDFE0E0E0E1E1E2E2E2E3E4E4E4E5E5E6E6E7E7E7E8E9E9E9EAEAEBEBEBECECEDEDEEEEEFEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F5F5F5F5F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7F7F7F7F6F6F5F5F5F4F4F4F3F3F3F2F2F1F1F0F0F0EFEFEEEEEEEDECECEBEBEBEAEAE9E9E9E8E7E7E6E6E6E5E5E4E4E3E2E2E2E1E1E0E0E0DFDEDEDDDDDDDCDCDBDBDBDAD9D9D9D8D8D8D7D7D7D6D6D6D5D5D4D4D4D3D3D3D3D2D2D2D2D2D1D1D1D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEBBA5A7AAAAABABACABACAEB5C8A79696979A9A9A9999969696999999979797969797999C9C9C9F9C9F9D9DA19F9D9D9D9D9D9F9D9C9D9D9D9D9F9F9F9C9C9C9F9F9F9FA19D9D9D9D9D9F9FA19D9D9F9D9D9D9FA2A2A5A5A5A5AAAAAAAAABABAAAAAAAAABA8A8A8A8A8A8A8A8A7AAAAAAAAABAAABAAACACACACAEB2B2AEACACACAAACACABACACACACACACACABACACB1B1B1B1B2B2B2B0B0B0B2B2B5B5B2B2B1B1AEB2B2B2B2B2B6B6B5B3B3B3B6B6B5B5B2B2B2B2B5B6B5B2B2B5B5B6B6B6B6B8BBB8B8B8BBBBB9B8B8BBB8B8B6B6B8B6B3B5B3B5B3B6B6B9B9B8B5B2B1AEACACACAEB1ACACAEAEAEAEACAAAAAAAAAAAAAAAAAAAAA7A7AAAAAAA8AAA8A5A5A5A5A5A8A8ABA8A8A5A5A3A3A1A1A19DA29D9F9F9C9F9F9D9D9C9C9A9A9A9C9C9C9A9797979797979A9797969394979796969496969392928F8F8E8C8C8988888C8D8D8D8F928F8F8F8F929392928F8F8F8F8F8F8E8E8E8E8D898989898989898987878784848484817E7C808081818181838381817E81818184848487868787878483817D7D8183817D7D7D7D7D7E7C7A7C7C7C7C7C7C7C7C7C7C7C808180818383848383838385878786898986868585858588858587878584848384858885858584848181848689898989898C8F8F8F8F8C8C8C8C8C8C8E8F8F8F8D89898786848483838687888C8E8E8C88898D89898988898D8D8F8F8E8D8E8E8F8F8E8F908F8F9293939393979793949394929390909390909093939090908F8F8F9393929292929293939693969693939393939390909093939497969696969696939390939696979797979A9794939393928F9292928F90908F908E8F8F8C89898C8C8C8C89898988898888888888878787878786868886888C89898C8C8888898C8F9090909090908F8F8E8F8E8E8C8C88888C89898988888C8989878786848585852001010101010101010101017DCECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D1D1D1D2D2D2D2D2D3D3D3D3D4D4D4D5D5D6D6D6D7D7D7D8D8D8D9D9D9DADBDBDBDCDCDDDDDDDEDEDFDFE0E0E1E1E2E2E2E3E4E4E5E5E6E6E6E7E7E8E9E9E9EAEAEBEBEBECECEDEEEEEEEFEFF0F0F0F1F1F2F2F3F3F3F4F4F4F4F5F5F5F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8F8F7F7F7F7F6F6F5F5F5F4F4F4F3F3F2F2F2F1F1F0F0EFEFEFEEEEEDECECECEBEBEAEAE9E9E9E8E7E7E6E6E6E5E5E4E4E3E2E2E1E1E0E0E0DFDEDEDDDDDDDCDCDBDBDADAD9D9D8D8D7D7D7D6D6D6D5D4D4D4D3D3D3D2D2D2D2D1D0D0D0D0CFCFCFCFCFCECECECECECECDCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBBAA7A8AAABAAA7A3A8AAACB6C8ABA29E9C99999B9B9B9E9E9CA19C9B9A9A9C9B9B9B999999999797979796969497979796949292939090929292929294929090929294979799999A9A9A9C9C9C9B99999997979796969997979494979794979799969997949290908D8D8D90929290908F8D8D898C8C8D8D8D8D8D8D8D8F8D9090908D8D8F929293939090908F8D8C8C8C8C88888789888C8C8C8C898987878989848789898784838381817F7D7D7F7F837F8183817E818183868787878989878789898987878987888D8D8D8D909093939090939390949496979797979996969696969696999A9C9C9C9C9C9E9E9E9B9EA1A1A2A2A5A2A5A3A5A3A2A1A2A2A2A2A1A3A3A2A2A3A29E9E9EA2A1A1A19C9FA2A29F9F9C9C9A9A9C9E9E9E9E9E9E9C9C9A9C9E9E9FA2A2A3A2A2A3A3A2A1A2A3A2A2A29F9F9C9C9B9C9C9B9B9B9E9EA19EA1A19E9C9C9C9C9C9C9C9C9999979494949696969999999999999B9C9FA1A19F9C9FA19F9F9C9B999A9C9F9C9C9A9C9C9EA1A2A29FA19CA1A2A2A2A2A19F9E9C9C9B9999999999999999999799999797979999969794949696969497979796969694949497979799999699999494949499999A9B9C9F9F9F9C9C9C9A9A9C999996969697999B999A9C9A9B9C9E9E9E9C9E9E9E9E9C9C9C9C9C9C9E9E9C9CA19C9E9FA1A1A1A1A3A5A5A7A5A5A3A2A2A2A3A2A2A3A2A3A3A3A5A3A5A5A5A8A8A7A7A5A5A5A5A3A5A5A5A5A5A2A3A5A8A5A5A8A8A5A3A3A2A29F9C9B9999999999999794979999969493929292929294969694949499969697979996969696999697969694979794949494949492908F90909092929290939392949494929294928F908D909090908D8F8F90908F8F8F8D8F8D8D8D8F8D8D8D8F9090908D8D9092939497969696979999999A9C9B9C9F9C9C9A999996949392908F902501010101010101010101017BCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCDCECECECECECECFCFCFCFCFD0D0D0D0D1D1D2D2D2D3D3D3D4D4D4D5D6D6D6D7D7D7D8D8D9D9DADADBDBDCDCDCDDDDDEDEDFE0E0E0E1E1E2E2E3E4E4E5E5E5E6E6E7E7E8E9E9E9EAEAEBEBECECECEDEEEEEFEFEFF0F0F1F1F2F2F2F3F3F3F4F4F4F5F5F5F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F7F7F7F7F6F6F5F5F5F4F4F4F3F3F2F2F2F1F0F0F0EFEFEEEEEEEDECECEBEBEAEAEAE9E9E8E7E7E6E6E5E5E5E4E4E3E2E2E1E1E0E0DFDEDEDDDDDDDCDCDBDBDAD9D9D9D8D8D7D7D6D6D5D5D4D4D3D3D3D2D2D2D1D0D0D0CFCFCFCFCECECECDCDCDCDCDCCCCCBCBCBCBCBCACACACACACACACACACAC9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9BCAAA7A7AAAAA8A5A3A4A4ACC1A0929292908E8E90929292929292908E9090909090928F8D8F8F9292908D8B8B8E8F928F8F8D8E8B8E8D8F8F908E8E8D8E8E8D8E8E9090908F8E9092929492929092928F9090909090909290929492949494949493939492929092908E8E8E9092909090929494939093969797979794969696989B989696969896989B9B9B97989B9CA0A09C9B9B9E9E9E9EA0A2A29F9C9E9F9C9C9C9C9EA09F9F9E9CA09E9E9C9C9B9B9B9B97979B9B9898979797979898989898969797939693939696979697989898969697949290908F8E8F8F8F8F8F8F8B8F8D8B8B8B8B8B8F8F8F8F92908F8D8D8D8B8B898988898B8B8B8D8F8E8F8B8B8F9090909294949793939293939492949497979B9B9B9B9B9B9B989B9B9C9B989796969698979897979B9B9C9C9C9B9B9B9B9B9B9C9C9B9B9C9E9E9C9B9B9B9B9B9797979B97989896939496969696939393969692929292909090908F8F8D8D898D8D8D8D8D898A8A8A888585888989898586868989848181818181858481838180808081818180807C7C7C7D7D7D7C7B7B787878787A7876757574757572757777787878787B7C7C7C8080818185818181817C8080817D81838588898A8A8D8D8D898D8B8B8B8A8A8B8B8D8E8D8D8F90908E8D8D8D8D8D90909090929292939392969693939392949496979897989B989B9B9B9C9B9B9C9C9B9B9B9B9B9C9EA2A2A0A09C9B9B9B9C9C9C9B9B9794929292929093929294949494929494929292939393939090908E90908D90909090908D8E8E8E8F8F90929292929290908D8F8F8D8D8D8D89898D8F90929292908E8B8D8D8D898D8B8A89898988888A89898A898D8E8E8E8E8E8E90909392929292929397989B9B9B9B9B9B9C9C9C9C9C9B9C9B989898989897939292929496969797979B98989B9C9C9C9B9B9B9B2601010101010101010101017AC9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CACACACACACACACACACACBCBCBCBCBCCCCCDCDCDCDCDCECECECECFCFCFD0D0D0D1D2D2D2D3D3D3D4D4D5D5D6D6D7D7D8D8D9D9D9DADBDBDCDCDDDDDDDEDEDFE0E0E1E1E2E2E3E4E4E5E5E5E6E6E7E7E8E9E9EAEAEAEBEBECECEDEEEEEEEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F5F5F6F6F7F7F7F7F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8F8F7F7F7F6F6F5F5F5F4F4F4F3F3F2F2F2F1F0F0F0EFEFEEEEEDECECECEBEBEAEAE9E9E8E7E7E7E6E6E5E5E4E4E3E2E2E1E1E0E0DFDEDEDDDDDCDCDBDBDAD9D9D8D8D8D7D7D6D6D5D4D4D3D3D3D2D2D1D0D0D0CFCFCFCECECECDCDCDCCCBCBCBCBCACACACAC9C9C9C9C9C8C8C7C7C7C7C7C7C7C7C7C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5B9A7A8A5A5A5A5A7A8A8A8B2C0A293909290909292949294969696929293928F8D8D8C8B8C8C8C8C8C8C888C8988888888888C8C8C8C8F8E8C898989888888888688888888898C8B8C88888C8E8D8D8F92929390908F9090928F92929393979897989897979697979A979693929292969396939497979A9A9A9898989797979A9A98979A9B9B9A9797979797949393979396969290929292929290909092928F8F8F8F8D8D8D8D8C8C898988898989898988878787868181868484848183838484817F7F7F7F7F81817F807F7C7C7C7D7F7F7C7C7A7A7A7B7B7B7A787876767676777674727271727270727575767676767878787A7C7C7D7F817F7F7F7D7A7C7C7D7B7D808186848787898989888988888887878888898B89898C8E8D8B89898989898D8D8D8D8F8F8F90908F92929090908F9292929396939698969798989A98979A9A97979798989A9B9E9E9D9D9B9898989B9B9B989794928F8F8F8F8E908F8F929292928F92928F8F8F909090908E8E8E8B8E8D898D8D8E8E8D898B8B8B8C8C8D8F8F8F8F8F8D8D898C8C898989898888898C8D8F8F8F8E8B888989898889888784848486868788888788898B8B8B8B8B8B8D8E908F8F8F8F8F9093969897979798989A9A9A9B9A989B98969696969693908F8F8F929292949494979696979B9A9A989797989798989A979A9A9C9A979A9796969696969392929090929697979A979A9A9B9C9C9C9B9C9B9B9B9B9C9C9D9B9B98989A9C9A9B989B9797979A9797949496939090908F8E8E8E8D8C8C8E8F928F8F8E909292929393939390929292939393929290929090909292928F929090909396979A979797979797989697979797979696989898989798989B9B9D9D9B9D9D9D9D9D9B9D9C9B9B9C9B9E9B9E9E9E9EA09EA09E9C9E9E9D9D9C9C9B9B9B9C9C9B9A9A9B9B9A9A9726010101010101010101010178C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7C7C7C7C8C8C8C9C9C9C9CACACACACBCBCBCBCCCDCDCDCDCECECFCFCFD0D0D0D1D2D2D3D3D3D4D4D5D6D6D7D7D7D8D8D9D9DADBDBDCDCDDDDDEDEDFE0E0E1E1E2E2E3E4E4E5E5E5E6E6E7E7E8E9E9EAEAEBEBECECECEDEEEEEFEFF0F0F0F1F2F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F8F8F8F8F7F7F7F6F6F5F5F5F4F4F4F3F3F2F2F2F1F0F0F0EFEFEEEEEDECECEBEBEBEAEAE9E9E8E7E7E6E6E5E5E4E4E3E2E2E1E1E0E0DFDEDEDDDDDCDCDBDBDAD9D9D8D8D7D7D6D6D5D4D4D3D3D2D2D1D0D0D0CFCFCECECDCDCDCCCBCBCBCACACAC9C9C9C8C8C7C7C7C7C6C6C6C6C6C5C5C5C5C5C5C4C4C4C4C4C4C4C4C4C4C3C3C3C3C3C3C3C3C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B9A7A7A5A3A5A49FA1A19FA5B99B8988888C8D8F8D8D8C8D909090909090908D8F8F8F90909090908D8F8D8D8D908F8F8D8F8D8D8D909393979494949393949693949494949493939696969693969699999B9B999B9B9B9B9B999B9B99979B999B999B9B9B9B9C9B9C9C9B9C9C9B9B9B9B9797979B9B9997979797979793969797939796999B9797949494969699999B9B9B9B9B999B9B9996969693939394939392929290909090908D8D8C8C89878787888888888986868989898989898C888989898988888988878484818381848585848585858788898989858989898C8889898889858788888989878785858181817E7E7E7C7C7C7A787B7B7D7E81808081807E80818383817E7E817E7E7E808184848686858585838080818484817E7E7E7C7C7B7E7E7D7E81818181838383818181838180818383838583807E7E808080807D7D807E7E808181817E7E7E7E81848589898787888784878784848784818181818181838181818081818386868385858586868484818485838385868686868686888687888888888787878784848181848688888888898C8887898986878988888C8D8989898989898D8C89898D8F8F8D8D8D8C8C898C8D8D8C8D909090909292949493939090908F8D8F8C8F8F90908D9090928F8D8D8D8D8D908D8D908D8C8D8D8D8D8D8D898D8D8D8F8D898C8C8C888C8C8D8D898C8C8D8D8D8C8C8D90909092939293908D8D8D8D8D8D8C888686888C8989868786868787888889898C8C88888888878787888C8C8C8C88898C8C8D8C8888888C8C8D8F9090909093909093939394949393908D8D90909090908F9293949794979797999797979797979797979797999999999B9B9C9FA1A3A5A5A7A8ABABABABABACACACACAEACA8ACA8A8ABA7A7A7A8A8A5A8ABABABA8A8A8ABACACA8ABABA8A8ABA8A7A7A729010101010101010101010175C2C2C2C2C2C2C2C3C3C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C6C6C6C6C7C7C7C7C8C8C9C9C9CACACACBCBCBCCCDCDCDCECECFCFD0D0D0D1D2D2D3D3D4D4D5D6D6D7D7D8D8D8D9D9DADBDBDCDDDDDEDEDFE0E0E1E1E2E2E3E4E4E5E5E6E6E7E7E8E9E9EAEAEAEBEBECECEDEEEEEFEFF0F0F0F1F2F2F2F3F3F4F4F4F5F5F5F6F6F7F7F7F8F8F8F8F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8F7F7F7F7F6F5F5F5F4F4F4F3F3F2F2F2F1F0F0F0EFEFEEEEEDECECEBEBEAEAE9E9E8E7E7E6E6E5E5E4E4E3E2E2E1E1E0E0DFDEDEDDDDDCDBDBDAD9D9D8D8D7D7D6D6D5D4D4D3D3D2D2D1D0D0CFCFCECECDCDCDCCCBCBCACACAC9C9C8C8C7C7C7C6C6C6C5C5C5C4C4C4C4C3C3C3C2C2C2C2C2C2C1C1C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBCB6B6B6B6B9B8B6B6B6B6BFC4B0A7A5A5A4A4A2A4A4A4A4A5A8A8A7A7A7A7A8A8A7A7A5A5A5A5A7A8A7A5A5A7A7A8A8A8A8AAACAAAAAAACACABAAAAACAAAAA8A8AAA8A7A7A7A7A7A8A8ABABAAA7A5A4A29F9F9FA2A4A19FA2A2A2A29F9C9C9C9C9C9C9C9C9C9C9B9B9C9C9E9C9E9C9B9B9B9B9B9C9C9D9C9C9B9B97979494949296929393909393929290908E8E8E9090908E8B8B8B8B8B8B8E8B8B8A87888B8B8A8A888A8A89868682828180807D7C7C808181818286828282828689868682828282828281818181817E7E7E7E7E7E7D7D7C7C7C7878787877757276767777777778787676757677777878787C7B7C7C7C78787674747678767474747474757270727272727272727272727276777676787878787878787A7C7C7B7D7D7B7B7A7A7A7A7C7A7A7C7C7A787878787A7C7A7A7A78787777787B7D7D7D7D7D808282828280808080808081828282817E7E7C7B787878787B7C7C808181807C7E817E7E7E7C7E81818282818181818282818284828286878787898B8B89888988868784848784848487878484848282828787868686868689898A898A8A8989878989898484848989888B8A8A8A8A8A8A878784878A8A8B8B8B8B8E8B8889878786828686868284848284818282807D7D808080807D7E7E7C7E7C7C7C7C7C7C7C7C7C7C7B7B7C7B7C807D7D80807C7C7D808284848484848482828182818180807C7C807E7D7E7C7C807E7E7C7C7B787A7A7A7C7C7C7D7D8181817D7D8081848184878A8A8A898B8B8B8B8E8D8D8E8D8D8D8D8D908E8E8B8E8B8B8A8A8B8B8B8B8B8B8A898482848482828286868284848484878987848481817E7E7E818181828486828688888B8B8B8B888B8B8B8B888B8B8E909092929292908D908D8D8B8B8B8B8B8A8B8A87848484878787888686848484898A8A8D8F8F908F9090929625010101010101010101010174C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C3C3C4C4C4C4C5C5C5C6C6C6C7C7C7C8C8C9C9CACACACBCBCCCDCDCDCECECFCFD0D0D1D2D2D3D3D4D4D5D6D6D7D7D8D8D9D9DADBDBDCDCDDDEDEDFE0E0E1E1E2E2E3E4E4E5E5E6E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F0F1F2F2F2F3F3F4F4F4F5F5F5F6F7F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F8F8F8F8F7F7F7F6F6F5F5F4F4F4F3F3F3F2F2F1F0F0F0EFEFEEEEEDECECEBEBEAEAE9E9E8E7E7E6E6E5E5E4E4E2E2E1E1E0E0DFDEDEDDDDDCDBDBDAD9D9D8D8D7D7D6D5D4D4D3D3D2D2D1D0D0CFCFCECECDCDCCCBCBCACACAC9C9C8C7C7C6C6C6C5C5C5C4C4C4C3C2C2C2C1C1C1C1C0C0C0C0C0BFBFBFBFBFBFBFBEBEBEBEBDBDBDBDBDBDBDBDBDBDBDBDBDBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB1A2A5A49F9F9F9F9F9E9CA2B5968A8B8B8D8D8D908D8D90939292909090908F909092909292949290928F8D8D8D8D8D8D8A8B88888B8D9090928F929293949494939493939393949496939390909294929390939090909290908D8D8D8D8888888886868686848486888A888886888B8B8B8D8D8D8D888A8A8A8D8D8D8B8B888A8888888B8A8A888A8888888D8D8F929090908F8F90908D90909090908D8D909090908F9090939396969396969696969396949393949396939696969698969897949797969694949393939494939292939392928F9093928F929093949392909090909093939696969696939696939090908F8F8F908D8D8D8D8D8D8D8D8D8D888887878681818184848484838181838383838383868483868683848486848180807D7E7D80818180818181818483868381838686868486838483818184848686818181817D7C7C7A7A7A77777777757676787A7C7B7B7C7B7A7B7D7E7E7C7A7A7C7A7A7A7B7C808081818181817E7B7B7D80807C797979777776797A787A7C7C7C7D7E7E7E7C7C7D7E7C7B7C7E7E7E817E7B7A7A7B7B7B7B78787B7A7A7B7D7D7C7A7A7A7A7C8081838381818481808181808081807C7C7C7D7C7C7E7D7C7D7B7C7C7E81817E818181818180807D80817E7E81818181818181848181848484848181818180807D7D8081848484848687848183838181868484868886868683838688878686888A8A88888887868687888887888B8B8B8B8D8D90908D8D8D8B8B8A888A878A8A8D8D888D8D8D8A88888888888B88888B8887888888888888868888888A888687878784878688888686868888888687888D8D8B8D8D8D8D8D88888888888886848181848683838181818181818484838386868484848481818184868686868486868788878484848787888A8D8D8D8D8D8B8B8D8D8D909023010101010101010101010172BCBCBCBCBCBCBCBDBDBDBDBDBDBDBDBDBDBDBDBDBEBEBEBEBFBFBFBFBFBFBFC0C0C0C0C0C1C1C1C1C2C2C2C3C4C4C4C5C5C5C6C6C6C7C7C8C9C9C9CACACBCBCCCDCDCECECFCFD0D0D1D2D2D3D3D4D4D5D6D7D7D8D8D9D9DADBDBDCDDDDDEDEDFE0E0E1E1E2E2E3E4E5E5E6E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F0F1F2F2F3F3F3F4F4F4F5F5F6F6F7F7F7F8F8F8F8F9F9F9FAFAFAFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8F7F7F7F7F6F5F5F5F4F4F3F3F3F2F2F1F1F0F0EFEFEEEEEDECECEBEBEAEAE9E9E8E7E7E6E6E5E4E4E3E2E2E1E1E0DFDEDEDDDDDCDCDBDAD9D9D8D8D7D6D6D5D4D4D3D3D2D1D0D0CFCFCECECDCDCCCBCBCACAC9C9C8C7C7C6C6C6C5C5C4C4C3C3C2C2C1C1C1C0C0C0BFBFBFBEBEBDBDBDBDBDBCBCBCBCBCBCBBBBBBBBBBBBBBBBBABABABABABAB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A4908F928F8E8D8C8D8E8E97A88B7D7E808181818181818383868484848486868A8B8D8D8D8D8D8D8F8F8F908F8D908D8B8B8B8B8B8A868686868788888989898D8B8B8D908F8F8D8D8D8D8D8D8D8F8D8F8F928F8D8F8D8B8B8B8B8B8A87888686888B8D8D8F8D8F8F9092929290929090909092929290908D8D8F928F908D908D8D8D8F8D8D89898B8A86868686838383838181838687868683868888888A8A8A8A868787878A8A8A8888868786868688878786878686868A8B8D8F8D8D8D8D8D8D8D8B8D8D8D8D8D8B8B8D8D8D8D8D8D8D909092929092929292929092929090929093909393939396939694929494929292929090909292908F8F90908F8F8D8D908F8D8F8D9092908F8D8D8D8D8D90909292929292909392908D8D8D8D8D8D8D8B8B8989898A8A8A8A8A868684848380808081818181817E7E81818181818183818183838181818381807D7D7B7C7B7D7E7E7D7E7E7E80818183817E8183838381838181817E808181838380807E7E7B7A7A7777777575757572767676777A78787A7877787B7C7C7A77777A777777787A7D7D7E7E7E7E7E7C78787B7D7D7A777777757576777776777A7A7A7B7C7C7C7A7A7B7C7A787A7C7C7C7E7C787777787878787676787777787B7B7A777777777A7D7E8181808081807D80807D7D807D7A7A7A7B7A7A7C7B7A7B787A7A7C7E7E7C7E7E7E7E7E7D7D7B7D7E7C7C7E7E7E7E7E7E7E817E8081818181808080807D7D7B7B7D7E818181818384818081817E8083818183868383838181838684838386878786868684838384868684868888888889898D8D8B8B8A88888786878487878A8A868A8A898786868686868886868886848686868686868386868687868384848481848386868383838686868384868A8A88898B898B8A86868686868683817E7E818381817E807E7E801E010101010101010101010170B9B9B9B9B9B9B9B9B9B9B9B9BABABABABABABBBBBBBBBBBBBBBBBBBCBCBCBCBCBDBDBDBDBDBEBEBFBFBFC0C0C0C1C1C1C2C2C3C3C4C4C5C5C6C6C6C7C7C8C9C9CACACBCBCCCDCDCECECFCFD0D0D1D2D2D3D4D4D5D6D6D7D8D8D9D9DADBDCDCDDDDDEDEDFE0E0E1E2E2E3E4E4E5E6E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8F7F7F7F6F6F5F5F4F4F4F3F3F2F2F2F1F0F0EFEFEEEEEDECECEBEBEAEAE9E9E8E7E7E6E5E5E4E4E3E2E1E1E0E0DFDEDDDDDCDCDBDBD9D9D8D8D7D6D6D5D4D4D3D2D2D1D0D0CFCECECDCDCCCBCBCACAC9C9C8C7C7C6C6C5C5C4C4C3C2C2C2C1C1C0C0C0BFBFBEBEBDBDBDBCBCBCBBBBBBBABAB9B9B9B9B9B9B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7B7B7B7B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6A6949292929090929293939BB08F8080818183868687878888888B8B8B8A89898986868684848786868383868683868689848986838180807C7C7C80818180807E7B7B7A7B7B7D7D7B7D7D7D7D7E7D8080817D7D7E818181818181817E7C7B7B7B7B78787777787B7B7B7B777A7777777776777A7A777675757373706F6F707074707374726F727275767777777777777777777777777A77787B7D7D7D80808181808081818183838486868686898484848484848487888B8B8B8B8B8D8D8D8A8D8F8F9090939093929390908F8F8F90908F90908F8F908F8D8D8D8F8F8F8F8C8E8F8F8E8E8C8C88888B8D8D8D8D8D8D8C8C888C8D8D8E90909290909292908F90908F8F8F8E8E8B8B8A8C8C8A8A8A8D8D8F8D8F8F8D8B8B8B8B8B8B8B8B8989868383838484848989898989898A8C8E8F8F8E8C8E8F8E8E8C8A89888B8E8B8B888B8B8D8F8F8F8E8F8C8F9090908F8F8E8D8C8C8A898989898989898989868989868686898984868383848484838686868484848383838686868987848787838383838787888A8C8E8E8E8B8B8B88888B898984848486898A87888B888A8C8D8D8D8B8D8D8D8D8C8C8C8C8C8C8D8D8C8C8F8C8D8E8F8F8F8F90939394939392909090908F8F928F90909294929494949696949494949494909393939393909094969494969694909090908E8C8A8989898989878683868787848381818181818183848483838387848486868784848484878486848483868683838383838381807E81818081818181818181838383818183817E817D818180807D7E7E81807E7E7E7B7E7B7B7B7E7B7B7B7E8181807D7D808181838684848486878787888C8A8C8E8B8B88878784838181807E8183818181818181818183838484878484878484848181838686868484818181848484838383818383848988888C888C8A2101010101010101010101016EB6B6B6B6B6B6B6B6B6B7B7B7B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B9B9B9B9B9B9BABABBBBBBBCBCBCBDBDBDBEBEBFBFC0C0C0C1C1C2C2C2C3C4C4C5C5C6C6C6C7C8C9C9CACACBCBCCCDCDCECECFD0D0D1D2D2D3D3D4D5D6D6D7D8D8D9D9DBDBDCDCDDDDDEDFE0E0E1E1E2E3E4E4E5E5E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F1F2F2F2F3F3F4F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F8F8F8F8F7F7F7F6F5F5F5F4F4F3F3F3F2F2F1F0F0EFEFEEEEEDECECEBEBEAEAE9E9E8E7E7E6E5E5E4E4E2E2E1E1E0DFDEDEDDDDDCDBDBDAD9D8D8D7D6D6D5D4D4D3D2D2D1D0CFCFCECECDCCCBCBCACAC9C9C8C7C7C6C5C5C4C4C3C2C2C1C1C1C0C0BFBFBEBEBDBDBCBCBCBBBBBABAB9B9B9B8B8B8B7B7B7B7B6B6B6B6B6B6B5B5B5B5B4B4B4B4B4B4B4B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D898C89898C8C8C8D8D8D96AA8C7C7B7B7B7B7B7E7E7E7E81818181818183838181818181818384868486898687898989898989898787878989898C8E8F8E8E8C8989898C8C8C89878681818181817E81808081818181818181818181818181817E7E7E7C7E7E7B7E7E7E7E7E7B7C7C7C7D7D7E80808081817E7E7B7D7D7B7B7B7B78787B7D7E8081817E7C7A7B7B7B787B7A78767676777778787878787B7C7C7C7C7C7C7E7E8180808080818184868987878789898989898C89898C8986868686868481818181818383868686898686898C898989898989878989898989898D898989878686868686848183818183868989898789898C8D8D8D8C8D8C8C8C8C8D8D8E8C8C8989898D898C898C89898989898986868684818181817E7E7E7E7D7D7E818181817E81838383848484848181818184848483838181818181838181818181818184868789898989878789898689898989898686898989898789898C8C8E8E8C8E8E8E8E8E8C8E8D8C8C8D8C8E8C8E8E8E8E908E908F8D8F8F8E8E8D8D8C8C8C8D8D8C89898C8C898987898C898789898C8D8C8989898989898C8C8E8E8E8E8E8C8E8E8C8989898787878986868686868484848484818180807E7B7B7B7D7D7D7D7C7A7A7C7C7C7C7C7C7E7D7C7E7E7C7D7D7E7D7B7878767776787878787878787B7D7C7E7C787C7E7E7E7D7E7C7D7C787B7D7D7E7E7B7B7878767575757575727272706E717172757575757575757576777775757575757575757578787A7A78787877757576787875747474727271747572757575757677777775757677757575777777787775757575757575727275757575767675757575757578787C7C7B7B7D7B787B7B78787B7875757576757577767576757575777A7A777878787A7A78787678787777787A7A7A7A7A7A7D7A7B7D7D7D7D7B7B7B1D01010101010101010101016CB3B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B4B5B5B5B5B6B6B6B6B6B6B7B7B7B7B8B8B8B9B9B9BABABBBBBCBCBCBDBDBDBEBFBFC0C0C1C1C1C2C2C3C4C4C5C5C6C6C7C8C9C9CACACBCBCCCDCECECFCFD0D1D2D2D3D3D4D5D6D6D7D8D8D9DADBDBDCDCDDDEDEDFE0E1E1E2E2E4E4E5E5E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F1F2F2F3F3F3F4F4F5F5F5F6F7F7F7F8F8F8F8F9F9F9FAFAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F8F7F7F7F6F6F5F5F4F4F4F3F3F2F2F2F1F0F0EFEFEEEEEDECEBEBEAEAE9E9E8E7E7E6E5E5E4E3E2E2E1E1E0DFDEDEDDDCDCDBDAD9D9D8D7D7D6D5D4D4D3D2D2D1D0CFCFCECDCDCCCBCBCAC9C9C8C7C7C6C6C5C4C4C3C2C2C1C1C0C0BFBFBEBDBDBCBCBCBBBBBAB9B9B9B8B8B8B7B7B7B6B6B6B5B4B4B4B4B3B3B3B3B3B3B2B2B2B2B2B2B2B1B1B1B1B1B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A6979797949497939492929BAB8F8481828682848687878786878787878686868686868787868688868789888888888B8E8E8F8E8E8D8C8C8C8B89898D898B8B8D8F8D8F8F8F90908F8F8F8F8F8F8B8E8E8E8E8E8C8B8F908F8F90908F8B8B8C8C898684828282828281817E818181807E7D7C7C7C7C7C7E80807E7E7E8180808181818080808081808180807E81817E7E7E7E7E7E7C7B787C7C7B7C7C7C7C7D7D7C7E7E7E7C7C7E7C787C787C7C7B7B7878787C7B787878767876767678767676787C7C7B78787B7C7D7E818080808181818182868486898686828181807E7D7C7B787C7E7D7D7C7C7C7C7C7C7E7E8080818080818080807D7D7E81818180807D7D7D8080807E7E7E7D7E7E8082828286828684848786848486868686868284848484868686828282868686868786868684848686878686868486868688888C8B8B8D8F908F9092928F90908F928F8F8F8F8F8F8F8F8E908F8F8F928F9290929292929497979492929290929292929292929292929292929696969697979794949497989B9B989896969497979797989B9B9B9999999B9B9B9B989898989B9B9B98989B9B9B9B9B9B9C9E9C9C9C9E9E9D9C9C9E9C9C9B9B9C9B999B999B999B9B9D9D9C9B9796949292929496929294949494928F8F8F8F8F8F8F8F8F8F8E8E8F8F908F908F8D8D8D8D8D8F8F928F8F8D8D8989878787868986868682868686868282818181828282817E7E7E7E7E7E817E7E7D7B7C7E7E7D7D7C7D7D7C7878777777757572727275757575767876767676787C7878767676767676777777777574747474747472727272726F6F6F6F6D69676A6A6D6D6D6D6E6E6B6B696B6D6D6F6F6F72707272726F6E6B69696B6E6B696969696969676767676767676767676767676A6D6A6B6E6E6F6E6E6E6E6F727270727270706F6F6F6F726F6F1A01010101010101010101016BB0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B1B1B1B1B1B2B2B2B2B2B2B2B3B3B3B3B3B3B4B4B4B4B5B6B6B6B6B7B7B8B8B8B9B9B9BABBBBBCBCBCBDBDBEBFBFC0C0C1C1C2C2C3C4C4C5C6C6C7C7C8C9C9CACBCBCCCDCDCECFCFD0D1D2D2D3D4D4D5D6D7D7D8D9D9DADBDCDCDDDEDEDFE0E0E1E2E2E3E4E5E5E6E7E7E8E9E9EAEAEBEBECEDEEEEEFEFF0F0F1F1F2F2F3F3F4F4F4F5F5F6F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F8F7F7F7F6F5F5F5F4F4F3F3F3F2F2F1F0F0EFEFEEEEEDECECEBEBEAE9E9E8E7E7E6E5E5E4E3E2E2E1E0E0DFDEDDDDDCDBDBDAD9D8D8D7D6D6D4D4D3D3D2D1D0CFCFCECDCDCCCBCACAC9C9C7C7C6C6C5C5C4C4C2C2C1C1C0C0BFBFBDBDBCBCBBBBBBBAB9B9B8B8B8B7B7B6B6B6B5B4B4B4B3B3B3B2B2B2B1B1B0B0B0B0B0AFAFAFAFAFAFAFAEAEAEAEAEAEAEAEAEAEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD9C8C8A8B8A8B8B8C888C8E96A7887D80807E7E8181818486828382828181807D7D7B7A78787877777775757575757575757577757272727275727272726F72727575757474727272727575757475757575757275757777777775727272706E6E6E6E6F7272726F727272726F6F6F6F6E6E6E6F6E6E6E6E6E6E6E6E6B6D6D6F7070727475777777787B787878777575777777757574747575757575777575777878787B787B7B7C7B7C7D8080808080808181818181818182828181818181818181838484838286868787888B8B88888888888B8B8E8E8E8C8D8B8B8D8D8C8E8C8D8D8E8C8C8A88888888888A8B8A888B8D8F8E8F8E8E8B8E8E8E8F909093939393949494949492929392908E908E8D8D8D8C8A8A8A8887848286868786868787828487848481818181818080807D7D7D7D7D7B7B7A7B7B7B7B7B787878787B7878787A7A7B7B7B787B7B7D8081807D7E7C7C7E818080808081818183838382868686828181807D7D7B78787B7B7A7B7B7B7B7B7C7B7B7B7D7B7B7C7E81817E807D7E7E808080807D7D7D7D7D807C808181808180808080817D817E7C7C7C7B7C7C808181817D81817D7D818181818181817E7E8181807D7B787777777878787A7A7A7A7A7877777778787B7B7B7C7E7E7E7E81818181838286868686848483838381818282868686868384848487888B8B888A8A888788888A8888888A8C8C8E8F8D8B8D8C8C8888888C8D8A8A8A8886868282828486868884848788888B8D8D8B8C8C8C8A88888784838686878782818284828181807D7D7B7D7E7E7C7B7A7A7A7878787878787877777777757475777577757575727274707074706F6E6F6E6E6B69696767696B6B6D6A6A6A6A6A6B6B6B6E6F6F6F6F6F6F6D6D6D6D6E6E6F6D6D6B6B6B6D6B6B6B6D6F6D6D6D6D6D6D6B696B6B6D6A6B6D6A6D6E6E6E1A010101010101010101010169ADADADADADADADADADADADADADADAEAEAEAEAEAEAEAEAEAFAFAFAFAFAFAFB0B0B0B0B0B1B1B2B2B2B3B3B3B4B4B4B5B6B6B6B7B7B7B8B8B9B9BABBBBBBBCBCBDBDBEBFC0C0C1C1C2C2C3C4C5C5C6C6C7C7C9C9CACACBCCCDCDCECFCFD0D1D2D2D3D4D4D6D6D7D8D8D9DADBDBDCDDDDDEDFE0E0E1E2E2E3E4E5E5E6E7E7E8E9E9EAEAEBECECEDEEEEEFEFF0F0F1F2F2F3F3F3F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F8F7F7F7F6F5F5F5F4F4F3F3F2F2F1F0F0EFEFEEEEEDECECEBEBEAEAE9E8E7E7E6E5E5E4E4E2E2E1E0E0DFDEDDDDDCDBDBD9D9D8D7D7D6D5D4D3D3D2D1D0D0CFCECECDCCCBCACAC9C9C7C7C6C5C5C4C4C3C2C2C1C0C0BFBFBEBDBCBCBBBBBAB9B9B8B8B7B7B6B6B6B5B4B4B3B3B3B2B2B2B1B0B0B0AFAFAFAEAEAEAEADADADADADADACACACABABABABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA91787B7B787B7C7B7B7B7B7E8F756A6B6B69696767676767676765656464646464646160605F60605E606161646464646565656769696A6B6E6B6B6B6A6769696A676A6D6E7270727275757572757474747272747475757575777776757575757575767676767878787A7A787C7C7A7A7A787B7B7C7D7E7D7E817E7F818181818081817F7F7F818181838687868683818181838383817F7D7B78787878777A78787B7B7B7B787B7B7878787A7A7A7A777777757776757676777776757575757777767878787878767675777775757575727275777678787877757475757572757472707070727272727272727575757575757576777A78787878787A7D7E817F7F7F818181818183818183817E7E7E7E7E7D7A7878787B7C7C7D7D7D807E7E80838181818080817F818181808181848180817F7E7E7E7E7E7D7B7C7A7A7C7E8080817F818183848484838483838383848486838381818184818381838080808180807D7D7E7D7A7A7A7877777776777777787B7878777A7C7C7C7D7D7D7D7A7B7B7B7D7D7D7C7C7A7B7A7A7A7C7B7B787B7A7A7A7D7E7F818080807F7F80817E80808080807E7E818181817F8181838386868386868686868386848383848386838686868689868987848787868684848383838484838181838381817F8183817F818183848381808080818183838686868686838686838181817F7F7F807E7E7D7D7D7D7D7D7D7D7A7878787675757577777777757474757575757575777775767675777776777572727072707272727272727275777576757275767677777675777572757777767675757272706F6F6D6D6D6A6A6A69676A6A6B6D6F6E6E6F6E6D6E7072726F6D6D6F6D6D6D6E6F72727474727272726E6E7072726F6D6D6D6A6A6A6D6D6B6D6F6F6F707272726F6F70726F6E6F72727272726E6D6D6E1A010101010101010101010167AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABABABABABABABABACACACADADADADADADAEAEAEAEAFAFAFB0B0B0B1B2B2B2B3B3B3B4B4B5B6B6B6B7B7B8B8B9B9BABBBBBCBCBDBDBFBFC0C0C1C1C2C3C4C4C5C5C6C7C7C8C9CACACBCCCDCDCECFD0D0D1D2D3D3D4D5D6D7D7D8D9D9DBDBDCDDDDDEDFE0E0E1E2E2E3E4E5E5E6E7E7E8E9EAEAEBEBECECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F5F5F5F6F7F7F7F8F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F8F7F7F7F6F5F5F4F4F4F3F3F2F2F1F0F0EFEFEEEEEDECEBEBEAEAE9E9E7E7E6E6E5E4E4E2E2E1E0E0DFDEDDDDDCDBDAD9D9D8D7D6D6D5D4D3D2D2D1D0CFCECECDCCCBCBCAC9C9C7C7C6C5C5C4C3C2C2C1C1C0BFBFBEBDBDBCBBBBBAB9B9B8B8B7B6B6B5B5B4B4B3B3B2B2B2B1B0B0AFAFAFAEAEAEADADADACACABABABABAAAAAAAAA9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A68E797C7E7C7E7C7B7C7C798193786F6F6F72727474747070747576767674767675726F6F727275726F7275757574747472727070707070747475767676747470727272726F726F6F6D6B6E706E6E6E6E6F6E70727272726F6F6F6F706F707272706F6D6F6F6F72726F6F6F706F6F6F6F6F6F6D6C6A6A6765676767676765656464636361616163636464636364656564636361636164656765646564636363615F5F635F636161646567676768686A67676A676A6A6A6A69676769696C6B6E706F6F6F6F7272707472726F6F6F726F6F6F72747476747476767674767676767679787A7A7C7C7C8081818381838384868383838181838689868684848484878786898786878987878989898987868683868687868787878989898989878989898989878683838686868686898687878989868689868784838383848481838183818180807C7C7B7B7878787A78787675767575747275726F727272727275757675757676767876787876767676767575767878787A7A78787A7A7876757575757676767676757272757676767676767572757575757576747274747676757270707274767474727270727274747572727272727272727575757472757676787676757676747575757575757675767876787878787876767876767576757272727576757575767878767576787A7A7A7A787878787B7C7B7878787B787B7C7C7C797B7D808181807D7D8181818181838381808181807E807E8181818181808181817E7E7C7C7D7C7A7A7C7C7B7B797979797B7B7B7B7B7879797678767678787A787A7B7B7B78787978767575747274747474747470747270707070707474747476757472727270706F6F6E6F707070727472747070747575757678787976767676767876787879797C7D7C7D7D7C7C7B7C7C7E7C7B797878787B797B797A1E010101010101010101010165A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A8A9A9A9A9A9A9A9AAAAAAAAABABABABACACADADADAEAEAEAFAFAFB0B0B1B1B2B2B3B3B4B4B4B5B6B6B7B7B8B9B9BABBBBBCBCBDBEBFBFC0C1C1C2C2C3C4C5C5C6C7C7C9C9CACACBCCCDCECECFD0D1D2D2D3D4D4D6D6D7D8D9D9DADBDCDDDDDEDFE0E0E1E2E2E4E4E5E6E6E7E7E9E9EAEAEBEBECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F4F5F5F6F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F6F5F5F4F4F3F3F3F2F2F1F0F0EFEFEEEDECECEBEBEAE9E9E8E7E6E6E5E4E4E3E2E1E1E0DFDEDDDDDCDBDAD9D8D8D7D6D6D4D4D3D2D2D0D0CFCECDCDCBCBCAC9C9C8C7C6C5C5C4C3C2C2C1C0C0BFBFBDBDBCBCBBBAB9B9B8B8B7B6B6B5B4B4B3B3B2B2B1B0B0B0AFAFAEAEADADADACABABABAAAAAAA9A9A9A9A8A8A8A8A7A7A7A6A6A6A6A6A5A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A496888886848585848588868E9F8274757575757575727575757675727474747274737575727373757575737476777776787878787776757675757673726F6F727370706F6F6F6F6F6F727270707373727272726F6F6F727373737372727374767472727274747676777777777876767878787B7B7878767676777777777676787A7B7D7B7D7D7D7E7D7D7D7D7D7C7C7D7D7D7D7E7E7E7E80818284868888898C8E8F8F8F8F8F9090909092908E908E8E8F8C8C8C8D8D898D8F8F8F8D8D8D8F90908E8F8F8E8E8F8D8C8C8C8C8C898C888888898988878786868887888C8C8C8D8C8C8D8C8888858384848484828383827F7F80808280807E7E7B7B7B7B7B7B7C7B7B787878787676767676767676767676767676767678777777777A7A7878787A7A7A787878787777787B7B7B7D7B7B787877787876767676767777787B7B7878787878787878787A7B7D8082817E7E7E808082838585858383838282828382808080808082808282828283848485858583858482818183838384848684848482828283838383838383848788888888888C8C8E8C8E8E908F9092909292908F8D8D8D8D8F8D8C8C8C8C8D8E8E8E8E8E8E8C8E8F8E8E8E8E8E8F8F8F8F8F8F909392929394979494929292949492939392929292909093909292939390908F8D89898989898D8D8D8C8C89898989888887848280807E7C7C7B7B7B7B78787777777676787A7A7878767575757272706F6E6D696969696969696B6B6B6B69676564646461616061616060616363636361616060605E6060605E5F5F5F61606163646565656567676967656565646565656564646363636565656567676765676767676769696B6D6A6A69696D6B6B6E6F6F72727270727476757676767473737272727476777A787778787B7A787A7A7878767877787677777778787A787B1D010101010101010101010163A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A8A8A8A8A9A9A9A9AAAAAAABABABACADADADAEAEAFAFAFB0B0B1B2B2B3B3B4B4B5B6B6B7B8B8B9B9BABBBCBCBDBDBEBFC0C0C1C2C2C3C4C5C5C6C7C7C9C9CACBCBCDCDCECFCFD0D1D2D3D4D4D6D6D7D8D8D9DADBDCDDDDDEDFE0E0E1E2E3E4E4E5E6E6E7E8E9E9EAEBEBECECEDEEEFEFF0F0F1F2F2F2F3F3F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F5F4F4F3F3F2F2F1F0F0EFEFEEEEEDECEBEBEAEAE9E8E7E7E6E5E5E4E3E2E1E1E0DFDEDDDDDCDBDAD9D8D8D7D6D5D4D4D3D2D1D0CFCFCECDCCCBCACAC9C8C7C6C6C5C4C3C2C2C1C0C0BFBEBDBDBCBBBBBAB9B8B8B7B7B6B5B4B4B3B3B2B2B1B0AFAFAFAEAEADADACABABABAAAAA9A9A9A8A8A8A7A7A6A6A6A6A5A5A5A5A4A4A4A4A4A3A3A3A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A18B7978787A7B797877797A8190776D6D6D6D6D6D6F6D6D6F6F6F6F6D6D6D6D6A6A69696A6D6F6F6F6F70726F6D6E6E6D6D706F6F71727070706E6E7072727070727474737373727170727373727375757575777778787777757575747374727474757573757577747373737373757373757372727272727272707272727472707272726F727172727071717272727172737575757777777775737273727273716F6D6D6F716E6E6D6D6D6D6D6D6F6F6E6E71716F6F6F6F6D6D6D6F717171716F70717273726F6F6F7272737475757575777575777777787877777573737575757575747777787B787B7B7B7C7B7B7B7B7B7A7A7B7B7B7B7C7C7C7C7D7E808183848688888B8D8D8D8D8C8E8E8E8E8F8E8B8E8B8B8C8888888A8A888A8D8D8C8A8A8A8D8E8E8B8D8D8B8B8D8A88888888888888878787888884838383838483868888888A88888A8887848181818181818081817E7C7C7D7D7E7D7D7C7C7878787878787A7878777777777575757373737373737375757375757477757575757777777777777777777777777575777878787B787877777577777573737375757577787877777777777777777777787B7D7E7E7C7C7C7D7D80818181818181817E8080817E7D7D7D7D7D807D7E7E7E7E818181818181818181807E7E8181818181838181817E7E80818181818181818183868687878688888B888B8B8E8C8E8F8E8F8F8E8C8A8A8A8A8C8A888888888A8B8B8B8B8B8B888B8D8B8B8B8B8B8C8C8C8C8D8D8E908F8F90909390908F8F8F90908F90908F8F8F8F8E8E908E8F8F90908E8E8C8A88888888888A8A8A88888888888886868381807D7D7C7A7A787878787777757575747577777777777472727270706E6D6B6A67676767676767696969696765646161615F5F5E5F5F5E5E5F606060605F5F5E5E5E5C5E5E5E5C5D16010101010101010101010162A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A3A3A3A4A4A4A4A4A5A5A5A5A6A6A6A6A7A7A8A8A8A9A9A9AAAAABABABACADADAEAEAFAFAFB0B0B1B2B3B3B4B4B5B6B7B7B8B8B9BABBBBBCBCBDBEBFC0C0C1C2C2C3C4C5C6C6C7C8C9CACACBCCCDCECECFD0D1D2D3D3D4D5D6D7D8D8D9DADBDCDDDDDEDFE0E1E1E2E3E4E5E5E6E7E7E8E9EAEAEBEBECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F5F4F4F3F3F2F2F1F0F0EFEFEEEDECECEBEBEAE9E9E8E7E6E6E5E4E3E2E2E1E0DFDEDDDDDCDBDAD9D8D8D7D6D5D4D3D3D2D1D0CFCECECDCCCBCAC9C9C7C7C6C5C5C4C3C2C1C0C0BFBEBDBCBCBBBAB9B9B8B8B7B6B6B5B4B3B3B2B2B1B0AFAFAEAEADADACABABAAAAAAA9A9A8A8A8A7A6A6A6A5A5A5A4A4A4A3A3A2A2A2A2A1A1A1A1A1A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9890909292929290908F8D96A1887D7D7D817E808082817E7E817D807D7B7B7B7D7D7B7B7B7C7B7B787876767575727272747272706E706E6E6D6B6E6B696B6B6B6B6B6E6E6F6E6E6F6F6F727072726F6F6F6F6F6E6E6F727272747472727474726F6E6E6E6E6F6F6F6F6F6E6B6B6E6F6F6F6F6F6F6E6B6E6E6E6E6E6F6D6A6D6D6F6F6E6A6A6A6B6D6F6D6D6A6B6A6B6A6D6D6E6B6B6A6B6B6A6B6B6E6E6E6D6B6E6F6F726F6F6E6F6F6D6E6E6E6E6E6E6F6E6F726F72727272727070726F6F6E6F6E6B6B6B6E6F6E6E6E6F7272706E70727474747472727272757675727272757275767676737576787B7B787676787878787B7B7B7A78787A78777877787B7A7A78787B7878777776767676747476767575737373737575757575727373707270707272747274757575727273726F6E6E6D6B6D6D6D6D6D6D6A6D6A6A6A6A6A6A6D6D6D6D6F6E6D6A6A6A6A6A696967696A6A6A6A6D6B6D6A6A6D6E6E6E6F72727370706F7070726F7272737376767676767676757676777675737272727573757374767677777776767676767677777676777878777676767676747373767375757270727272727270707072726F6F6F6F6E6E6E6E6D6D6A6A696A6A6A6A6A69686868676565676767676565656767646363636363656463646361616161636361615F5F5F5F5F5F5F5D5D5C5C5C5C5D5C5A585858585856585A5A5C5C5C5C5D5E5E5F6161616365636363615F6161615F616465676768686A6A6A696A6A6A6A68686A6A6A6B6A6A6D6E6E6B6A6A6A6A6A6E6E6E6E6F6F6F70706F72727070706F7272727375737576757676767776767777767676767677787B7C7B7B78767676787878767674726F6F6F6F6E706F6F727272726F72726F6F6F707070706E6E6E6B6E6E6A6E6E6E6E6E6A6B6B6B6D6D6E6F6F6F6F6F6E6E6A6D6D6A190101010101010101010101609E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A1A1A1A1A1A2A2A2A2A3A3A4A4A4A5A5A5A6A6A6A7A8A8A8A9A9AAAAAAABABACADADAEAEAFAFB0B0B2B2B3B3B4B5B6B6B7B7B8B9B9BABBBCBCBDBEBFC0C0C1C2C2C4C4C5C6C7C7C9C9CACBCBCDCDCECFD0D1D2D3D3D4D5D6D7D8D8D9DADBDCDDDDDEDFE0E1E2E2E3E4E5E6E6E7E8E9E9EAEBEBECECEDEEEFEFF0F0F1F2F2F3F3F4F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F4F3F3F2F2F1F0F0EFEEEEEDECECEBEAEAE9E8E7E7E6E5E4E4E3E2E1E0E0DEDEDDDCDBDBD9D9D8D7D6D5D4D3D3D2D1D0CFCECDCDCBCBCAC9C8C7C6C6C5C4C3C2C1C1C0BFBEBDBCBCBBBAB9B9B8B7B7B6B5B4B4B3B2B2B1B0B0AFAEAEADADACABABAAAAA9A9A8A8A7A6A6A6A5A5A4A4A4A3A2A2A2A2A1A1A1A0A0A0A09F9F9F9F9E9E9E9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B88777777757777757675757B896E63636465696A6A6B6A6767696969676769676765656565656463636363616463636464646464676767676969696767656463656565656767676767696A6A6A6A6A6D6D6D6D6D6D6E6B6B6B6B6A6A6A6A6D6D6A6A696969696B6D6D6D6D6D6E70706E6D6D6D6D6A6B6B6B6B6D6A6D6E6E6E6D6E717170707272727577757475757272716E6E6D6B6A6A6A696969676765656567676765696564646464656464646461646465656565656464646465676565656567676564656769696969676464646361616161636464646364646464636363636161616361616161616161615F5F5F6163636465676969696A6D6A6A6A696767696969676765656565656767696767696A6A6A6D6A6D6D6E6D6E6E7171717171717272727272727275757272727272727272747575747577777676787A7A78787878787A7A7C7C7C7B7C7A7A7C7C7B7C7B7C7C7C7B7B787877787877787A78787A7C7E7C7E7C7C7A7C7C7D7E7E7E818181818383838383818181817E7C7E7C7C7C7C7B7878787876757577777677777676757576757572727272727171716E6E6E6E6E6D6D6B6D6D6D6D6D6A6A6A6A6D6A6A6A6B6B6D6D6D6A6D6D6E7172716E706E6E70727171717172727274747475777777757272716E6E6D6A6A6D6D6B6D6D6D6D6D6E6D6D6D6E6D6D6E70727270716E7070717171716E6E6E6E6E716E717272717271717171726E72706E6E6E6D6E6E717272726E72726E6E7272727272727270707272716E6D6A6969696A6A6A6B6B6B6B6B6A6969696A6A6D6D6D6E7070707072727272747577777777757574747472727575777777777475757576787A7A7778787876787878787878787B7B7C7E7C7A7C7B7B7878787B7C7878787777777575757577777875757677777A7C7C7A7B7B7B78787876757477771C01010101010101010101015E9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9F9F9F9FA0A0A0A0A1A1A1A1A2A2A2A3A4A4A4A5A5A6A6A6A7A8A8A9A9AAAAABABACADADAEAEAFAFB0B1B2B2B3B4B4B5B6B7B7B8B9B9BABBBCBCBDBEBFC0C1C1C2C3C4C5C5C6C7C8C9CACACBCDCDCECFD0D1D2D3D3D4D5D6D7D8D8D9DBDBDCDDDEDEE0E0E1E2E3E4E4E5E6E7E7E8E9EAEAEBECECEDEEEEEFF0F0F1F2F2F3F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F3F3F2F2F1F0F0EFEEEEEDECEBEBEAE9E9E8E7E6E6E5E4E3E2E1E1E0DFDEDDDCDCDBD9D9D8D7D6D6D4D3D3D2D1D0CFCECDCCCBCACAC9C8C7C6C5C4C4C2C2C1C0BFBFBDBDBCBBBAB9B9B8B7B7B6B5B4B3B3B2B2B0B0AFAFAEADADACABABAAAAA9A8A8A7A6A6A6A5A5A4A4A3A2A2A2A1A1A1A0A0A09F9F9F9E9E9D9D9D9D9C9C9C9C9B9B9B9B9B9B9A9A9A9A99999999999999999999999999999898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898988D81818181827F7E7F81818A977F7675757472727274747472706F6D6A6A6A6A696B6A6A6D6D6D6D6A6D6D6A6A6A6B6B6B6B696969676968676868696968676767676767686A6A6A6A6A68686767676767676764646767686A6A6A69676567676764676564636363646464646464646767676767676768696B6A6A6A6A6A6B6E6F72707070727272727274727274726F6F6F6F6F6E6B6A6A6A6D6D6D6F6F6F716F6F71747272727171727072727271727275727172706F6F6F6F6F6E6D6D6B6B6D6F71717270727274757575757574747575757575747472727275727572747171717271716F6F6F6E6B6B6B6A696969686767696A6D6A6A696B6D6D6D6E6E6E6E6B6D6D6D6E6E6E6D6D6B6D6B6B6B6D6D6D6A6D6B6B6B6E6F7072717171707071726F71717171716F6F7272727270727275757575757575757575757575757475757775777777777777777675767675757575747474757575727274747272707274727072727575747271717172727575757575757575777575727272707070716F6F6F6F6F6E6E6E6E6E6B6A6A6A68676767676767676765656767676767676967676868676767686767646463646364646464646464676767686764676868696768676767646767676868676764646361616060605E5E5E5D5B5D5D5F606161616161606163646461606061606060616164646565646464646161636464615F5F5F5E5E5D5F605F6061616163646464616163646161616464646464616060616161615F5F616060616363616060606061646467676767676764676764646764616161636161646361636161616465656464646465656464636464646464656565656565676567676767676767676764646363646567676767686A676767676567686767696A6868686767686A6A68686A6D6D6B6B6B6A69686A6B6B6A1901010101010101010101015C989898989898989899999999999999999999999999999A9A9A9A9B9B9B9B9B9B9C9C9C9C9D9D9D9D9E9E9F9F9FA0A0A0A1A1A1A2A2A2A3A4A4A5A5A6A6A6A7A8A8A9A9AAABABACADADAEAFAFB0B0B2B2B3B3B4B5B6B6B7B8B8B9BABBBCBDBDBFBFC0C1C2C2C4C4C5C6C7C7C9CACACBCCCDCECFD0D1D2D3D3D4D5D6D7D8D9D9DBDCDCDDDEDFE0E1E1E2E3E4E5E5E6E7E8E9E9EAEBEBECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEFEEEEECECEBEBEAE9E9E7E7E6E5E5E4E3E2E1E0DFDEDDDDDCDBDAD9D8D7D6D6D4D4D3D2D1D0CFCECDCCCBCAC9C9C7C7C6C5C4C3C2C1C0C0BFBEBDBCBBBBB9B9B8B7B7B6B5B4B3B3B2B1B0B0AFAEAEADADABABAAAAA9A9A8A7A6A6A5A5A4A4A3A2A2A2A1A1A0A0A09F9F9E9E9D9D9D9C9C9C9B9B9B9B9A9A99999999999898989898989797979797979797979797969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696928F8F8F8C8D8F8C8C888C9297807776767676757272707272727272727270727272726E6E6D6E6E6D6D6D6A6A6A6A6A6969676969696969676767656965656567676969696769696A6D6D6D6A6B6A6A6B6D6D6D6D6D6D6E6E6F6F6F70727272706E6E6D6A6A69676769696769696969696A6969696A69696A6B6E6E6B6D6A6B6B6D6D6D6D6A6A6A6A6A6D6A6D6D6D6D6E6D6D6D6D6D6A6D6B6A6A6A696A6A6D6D6D6D6A6D6D6A6A6D6D6E6E6E6E6D6B6B6E6E6D6A696765656567676767676767676765656567676969696A6B6B6B6B6E6E6E6E6F707272727272726F6F6F6E6E7070727272726F7272727275757574767675727373767373737676767878777577767675757576777676767472727070707272727372727274747577777576767676737372726F72727272706E7072706E6E6D6A6A696A6B6B6A6967676765676767676565656565656462646464656463635F5F625F5F625F5F5D5F5D5D5B5A5A58585A5B5B5D5A5A5A5A5A5B5B5B5D5F5F5F5F5E5E5D5D5D5D5D5D5F5D5D5B5B5B5D5B5B5B5C5E5D5C5D5D5D5D5B5A5B5B5C5A5B5C5A5C5D5D5D5D5C5C5B5B5D5D5D5F5F615F5D5E5E5E5F5D5D5E5E5C5C5D5B5D5E5E5E5E5E5F61616361615F615F61616162636161615F62636363616161615F5F5F5F63636364646565656464656769696965696967656363646567656365676767656565656564646464646565676969696565646565656463646363615F62646262626263626465656464636363636463646464646361636363646463636364636363636363615F5F5F5D5B5C5C5D5D5D5B5B5A5A585856565658585A585858585B5B585858565856585A5D5A585A585858585654545854585656585A5C5C5C5D5D5F5D5D5F5D5F5F5F5F5E5C5C5E5E5F5F6264636363636464646565656363636463636364651801010101010101010101015B9696969696969696969696969696969797979797979797979798989898989899999999999A9A9B9B9B9B9C9C9C9D9D9D9E9E9F9F9FA0A0A1A1A2A2A2A3A4A4A5A5A6A6A7A8A8A9AAAAABABACADAEAEAFB0B0B1B2B3B3B4B5B6B6B7B8B9B9BBBBBCBDBEBFC0C0C1C2C3C4C5C6C7C7C9C9CACBCCCDCECFD0D1D2D3D3D4D6D6D7D8D9DADBDCDDDDDEDFE0E1E2E2E4E4E5E6E7E7E9E9EAEAEBECECEDEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEFEEEDECECEBEAEAE9E8E7E6E6E5E4E3E2E2E1E0DFDEDDDCDBDBD9D8D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C9C7C6C6C5C4C3C2C1C0BFBFBDBDBCBBBAB9B8B8B7B6B5B4B3B3B2B1B0AFAFAEADADACABABAAA9A9A8A8A7A6A5A5A4A4A3A2A2A1A1A0A09F9F9F9E9D9D9D9C9C9B9B9B9A9A999999999898989897979797969696969696959595959494949494949494949494949393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393937F6F727272737171707171798C726769696B696B6B6D6F71716F6F71717171727474747271727171717271717171716F6E6E706E6E6D6F707070706E6E6D6B6D6B6A6D6D6D696B6D6D6B6D6D6D6D6D6D6D6A6A6A6969696B696B69696967656463616164656767676565656767676765656565646464636361616161616161606060605D5D5D5D6061646465646161616163616163616160606060605D5C5C5C5C5C5D5D5D5F5F5F5F5F616161616161616161605F5D6060606061616161616364646464646567676767676765656565646464646767646463616163656767676767676969676565656564656565656564656767676767696969696A6A6D6E6F6D6D6D6D6B6B696767676564646461616161616060606161616061605F5F5F5F605D5F5F5D5C5D5F60606060605D5D5D5D6061606060606161605D606161636361615F5F5F5D5B5B5B5B5C5D5D5D5C5D5D5D5D5C5C5C5C5B5B5B5C5B5B5B5B5B5B5B5B585A5A5C5D5D5D606161616364676464646161616163636161606060606061616161616164646467646565676567676969696969696B6D6D6D6A6A6B6D6D6B6B6B6B6A6D6D6D6D6E6E6D6D6F6F70707274747272727272747475757574767474767674757476767574747272727171727274727274767675767575747575777678787A7A7A7A7B7B7B7B7B78787B78787578757676767472727272706E6D6F6F706F6F70706D6E706E6E6D6D6A6D6D696969676767676767676565656565656464646465646464656567656564676767696A6967696767696A696969696A6D6B6D6D6D6D6F6F6F6D6D6D69676765646467676567676765676765656767676767696B6B69696769696969696967676767676967696A6A696D696969696A676A69676767656767696A6A6A676A6A67676A6A6D6D6D6B6A69696B6B69180101010101010101010101599393939393939393939393949494949494949494949494959595959696969696969797979797989898999999999A9A9B9B9B9C9C9D9D9D9E9F9F9FA0A0A1A1A2A2A3A4A4A5A5A6A6A8A8A9A9AAAAABACADADAEAFAFB0B1B2B3B3B4B5B6B7B7B8B9BABBBCBCBDBFBFC0C1C2C3C4C5C6C6C7C9C9CACBCCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E1E2E3E4E5E6E6E7E8E9EAEAEBECECEDEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEFEEEDECECEBEAEAE9E8E7E6E5E5E4E3E2E1E0E0DEDDDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCDCBCAC9C9C7C6C6C5C4C2C2C1C0BFBEBDBCBBBBB9B9B8B7B6B6B4B4B3B2B1B0AFAFAEADADACABAAAAA9A8A8A7A6A6A5A4A4A3A2A2A1A1A0A09F9F9E9D9D9C9C9C9B9B9A9A99999998989897979796969696959594949494949393939393939392929292929292929292919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191917C696A6A696C6D6D6D6B69707B64585858585A5A5A5D5F5F5D5A5C5E5C5C5C5A5C5E5E5F5F5F5E5F5F5F605F5F615F5F6163636363656563646364616361616361616163636161615F5F60636361616161616363646364646363636363636161616363646564646464646463636163646465656565676564636363615F6161615F616160615F5F5F5D5C5C5D5D5D5D5C5C5C5A5C5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5D5C5C5D5D5A5A5C5D5F61616161616160605F5F5F5F5D5D5A5A5D5C5C5C5A5A5D5C5C5A5A5A585858585A5A5A5C5C5E5E5E5C5C5D5F615F616364646463656565656767676767676767676867676567656564646565656565656463615F61616060606161606161616163636361615F5E5C5C5C5E5F5E6061615F6164646565656564656565656465656769696C6C6C6A6867686767656565656564656463616161636363646161616161636464676767696769696C6D6F6F6D6D6F6F6F6F70727272706F706F6F6F6F6F6F6F6F6F6D6D6D6E6D6D6B6D6E6E6E6E6D6D6C696C69686A6A6A67696C6C696A6A6B6B6C6C6A68686867676769676967676765646361606063646565656464646565656564646464636363616160606060605F5F5E5E5E5E5C5C5C5C5F616363646360606161615F5F6160605F5F5F5E5E5C5A5A5A5A5A5C5C5C5D5D5D5D5D5F60605F6161615F5F5E5D5C5E5E5E5E605F5F5F5F61636363636364656565656565646464646363636365656363616161616465656565656567676564646464636464646464636465656765676767676768686A6D6D6B6C6B6B696967676765646363636161615F5F5F5F5F6060605F615F5D5D5D5D5F5C5D5D5C5A5C5D5F5F5F5E5E5C5C5C5C5F605F5E5F5F60605F5C5F5F616161615F5D5D5D5C5A5A5A5A5A5C5C5C5A5C5C5C5C5A5A5A5A5A5A5A5A15010101010101010101010157919191919191919191919191919191929292929292929292929393939393939394949494949595969696969797979898989999999A9A9B9B9C9C9C9D9D9E9F9FA0A0A1A1A2A2A3A4A4A5A6A6A7A8A8A9AAAAABACADADAEAFAFB0B1B2B3B4B4B6B6B7B8B9B9BBBBBCBDBEBFC0C1C2C2C4C5C5C6C7C9C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9D9DBDCDDDDDEDFE0E1E2E3E4E5E5E6E7E8E9E9EAEBEBECEDEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEEEEEDECEBEBEAE9E9E8E7E6E5E4E4E2E2E1E0DFDEDDDCDBDAD9D8D7D7D6D4D3D3D2D0CFCFCECDCBCACAC9C7C6C6C5C4C2C2C1C0BFBEBDBCBBBAB9B8B7B7B6B5B4B3B2B2B0B0AFAEAEADACABAAAAA9A8A8A7A6A5A5A4A4A2A2A1A1A0A09F9F9E9D9D9C9C9B9B9B9A9999989898979797969696959494949493939393929292929291919191919190909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E78656567676767656767656D7863585858585858585858585858585B5A5A5B5B58585A5B5D5E5E5E5E5E5E5D5D5D5D5D5D5B5B58585B5A5A5A58585B5A5A585858565656565858585A5A5C5C5C5A5A5B5D5E5D5E60616161616363636364646464646464646465646463646363616163636363636361615E5D5E5E5D5D5D5F5F5D5E5E5E5E6061605E5E5D5C5A5A5A5C5D5C5D5E5F5D5F61616363636361636363636163636467676767676765646564646363636363616361605E5E5E606060615F5F5E5E5E61616164656567656767676A6D6D6A6A6D6D6D6D6D6F6F6F6D6D6D6D6D6D6D6D6D6D6D6D6A6B6B6B6B6B696A6B6B6B6B6B6B67676767656767676567676767676769696767676565656564646765676565656361615F5D5D606163636361616163636363616161616161615F5F5D5D5D5D5D5D5D5C5C5C5C5A5A5A5A5D5E606061605D5D5E5E5F5D5D5F5D5D5D5D5D5C5C5A58585858585A5A5A5B5B5B5B5B5D5D5D5D5E5E5E5D5D5C5B5A5C5C5C5C5D5D5D5D5D5F6161616160616363636363636161616161616161636361605F5E5E5F616363636363636464636161616161616161616160616363646364656564646565676B6A69676969676765646463616161605E5E5E5D5D5D5D5D5D5D5D5D5E5D5B5B5B5B5D5A5B5B5A585A5B5D5D5D5C5C5A5A5A5A5D5D5D5C5D5D5D5D5D5A5D5D5E5F5F5E5D5B5B5B5A58585858585A5A5A585A5A5A5A58585858585858585858585858585858565656585A5A5A5C5D5E5E5F61636160605E5D5D5E5F5F5D5D5C5C5D5D5D5D5D5E5D5D5E60606163616161636163646565656565656767676765656769696767676765676767676B6B67696A6A6B6B6D6F6F6D6D6D6D6D6F6F72727270716F6F717170727071717270706E6D6D6D6D6D6E6F6E6D6F7172727272726F727272721C0101010101010101010101568E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9090909090919191919191929292929293939393949494949596969697979798989899999A9B9B9B9C9C9D9D9E9F9FA0A0A1A1A2A2A3A4A5A5A6A6A8A8A9AAAAABACADADAEAFB0B0B2B2B3B4B5B6B7B7B8B9BABBBCBDBEBFC0C1C1C2C4C5C5C6C7C9C9CACBCDCECECFD0D2D2D3D4D6D6D7D8D9DADBDCDDDEDFE0E1E2E2E4E4E5E6E7E7E9E9EAEBEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEEEEEDECEBEBEAE9E9E7E7E6E5E4E3E2E1E1E0DEDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C7C6C6C5C4C2C2C1C0BFBEBDBCBBBAB9B8B7B6B6B4B4B3B2B1B0AFAFAEADACABAAAAA9A8A8A7A6A5A5A4A3A2A2A1A1A09F9F9E9D9D9C9C9B9B9A999999989897979796969595949493939393929292929191919190908F8F8F8F8F8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C796768656465646364616167725C54545658585757585758575A5A5A5858585858585857585A5A5C5C5C5C5C5A57575A5A5A58565656555554565856585858585A5A5A5A58585A5A5857585A5A5A5C5A575858575757575656575858575A5A5858585858585A5C5D5D5D5D5F5D5A5D5D5A5A5D5A5858585A58585A5A585A5758585A5C5C5A5C5C5C5C5C5A5A5A5A5C5A5A5C5C5C5C5C5C5C5F5C5D5F5F5F5F5D5D5D5D5A5A5A5A5A5C5F5F5F5F5F605F5D5D5D5C5D5F5F5F60615F5F5F5D5D5F61605F5F61636361616160605F6061616061646464646464676765656464646361636063636464616464646361616161616461616461606161616161615F61616163615F6060605F606061615F60606161616060616464646465646564616161616161605F5C5C5F605D5D5C5D5C5C5D5D5F5F5D5D60605F5F5F5F5D5D5D5F606060605F5F606061605F5F5F6060616364646464656464656565676765656461616464646464636465676967696969696969696969676769696969696969696C6B6D6F7072727475777777777776787878787878777877777675757575757475777776757575777878777777777777757575757575747572727274747271717070727172757575757575757572726F6E6F6F6F6F6D6E6E6D6A6A6C6C6D6C6C6969676767676767676767656564646464646161616161616164646164646364646464646565656464656565646465656464646767676967676565646464646161616464646467676565656565656564646567696C6D6B6969696C6C6D6E6F6F6F6E6E6E6D6D6D6E6D6C6C6C6C6C6D6C6D6D6D6D6E6F6F6F6F6F6E6F6F6D6B6B6E6E6E6F6F706F6F6F6D6D6D6E6E6E6E6E6E6E6F71727272727275757775777778767878787A787876757575757675757575757577777777777775777777771D0101010101010101010101558C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8F8F8F8F8F909091919191919292929393939394949595969697979798989999999A9B9B9C9C9D9D9E9F9FA0A0A1A2A2A3A4A5A5A6A6A8A8A9AAAAABACADAEAEAFB0B1B2B3B3B4B6B6B7B8B9BABBBCBDBDBFC0C1C1C2C4C5C6C6C7C9CACBCBCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDDDEE0E0E1E2E3E4E5E6E6E7E8E9EAEBEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F7F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEEEEEDECEBEBEAE9E8E7E6E6E5E4E3E2E1E0DFDEDDDCDBDBD9D8D7D7D6D4D3D2D2D0CFCECDCCCBCAC9C8C7C6C5C4C2C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B2B0B0AFAEADADABABAAA9A9A8A7A6A5A5A4A3A2A2A1A0A09F9F9E9D9C9C9B9B9A9999989898979796969595949493939392929291919190908F8F8F8F8E8E8E8E8E8D8D8D8D8D8C8C8C8C8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A75646767656465656767656D7C645A5C5D5D5D5D5F5F5D5E5D5E5C5D5B5B5D5B5B5B5D5D5B5B5B5A5A5A5D5D5C5C5C5C5C5D5D5F5D5F5F5D5D5D5D5D5D5B5B5B5D5D5E5F5F5F5F5F5F5F5D5D5B5D5F5F6060606061605E5D5D5D5C5A5C5C5C5A5B5B5A5B5A5A5A5856565858585856565656565656565656555555555554545654565856565858565656585A5B5B5B5B5B5B5A5A5A5A5A5A585856565856565656565856565555545454545455555556565858585656585A5B5A5B5D5F5F5F5D5F5F5F606161616161616161616361615F615F5F5F5F6060606060605F5D5B5A5B5B5A5A5A5C5C5A5B5B5B5B5D5D5D5B5B5A58565656585A585A5B5C5A5C5E5E5F5F5F5F5E5F5F5F5F5E5F5F6164646464646463616361615F5F5F5F5F5F605F5D5B5B5B5D5D5D5E5C5C5B5B5B5D5F5F61636364636464646769696767696969696A6B6B6B6A696A69696969696969696967676767676765676767676767676464646463646464636464646464646565646464636363636161646364636363605F5D5C5A5A5D5E605F5F5E5E5F606060605E5E5E5E5D5D5D5C5C5A5A5A5A5A5A5A58585858565656565A5B5D5D5E5D5A5A5B5B5C5A5A5C5A5A5A5A5A585856565656565556565658585858585A5A5A5A5B5B5B5A5A585856585858585A5A5A5A5A5C5D5D5D5D5D5F5F5F5F5F5F605E5E5E5E5D5D5D5D5F5F5D5D5C5B5B5C5E5F5F5F5F5F606161605F5F5F5F5D5E5E5E5E5F5D5F6060615F616363616163636467676564656564646361615F5E5D5D5D5B5B5B5A5A5A5A5A5A5A5A5A5B5A585858585A565858565556585A5A5A5858565656565A5A5A585A5A5A5A5A565A5A5B5C5C5B5A58585856545454545656565656565656565656565654545456545454545454545453545455565656585A5B5B5C5D5F5D5D5D5B5A5A5B5C5C5A5A150101010101010101010101538A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8C8C8C8C8D8D8D8D8D8E8E8E8E8E8F8F8F8F9090919191929292939393949495959696979797989899999A9B9B9C9C9D9D9F9FA0A0A1A1A2A3A4A5A5A6A7A8A8A9AAABABADADAEAFB0B0B2B2B3B4B5B6B7B8B9B9BBBCBDBDBFC0C1C2C2C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D6D7D7D8D9DBDBDCDDDEDFE0E1E2E3E4E5E6E6E7E8E9EAEAEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F8F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEEEEEDECEBEAEAE9E8E7E6E5E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAFAEADACABAAAAA9A8A7A6A5A5A4A3A2A2A1A0A09F9E9D9D9C9C9B9B9A9998989797979696959494949393929292919190908F8F8F8E8E8E8E8D8D8D8D8C8C8B8B8B8B8B8A8A8A8A8A8A8A8A89898989898989898989898988888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888875646467676867646769696F7C655B5A5A58585858585B5B5D5E5D5D5B5B585A5A5A5A585A585856565858585858585858585A5A5A5A585858585858585A5A5858565858585A5A58585858585858585858565554545151515151515151514E4E4D4D4D4D4D4D4D4E4E4D4D4E51514E4D4D4D4D4D4E5051504E504E4D4D4D4C4C4C4D4C4D4D4D4E505151515353545151545154545454545151545455565858585858585A5A585B5A5A5858585A5858585A5B5B5D5B5B5D5D5D5B5D5F5F5F5F615F616163636365676769676969696A6969696767696A6D6A6A696969696B6B6A6D6B6A6B6D6B6B6D6D6D6D6B6A6A676A6A6B6A6B6B6B6D6D6D6D6D6B6D6D6D6D6D6B6A67696A6A6A6A6A6D6A6B6B6D6D6A6A6D6A6B69676767696967676769676765656363616160606061605F5F5D5F5D5D5B5A5C5A585A5A5A5A5A5C5C5E5D5D5E5E5E605F5F5F5D5D5D5D5D5C5D5D5F5F5F61615F5F6161605E5D5D5D5D5D5D5D5D5E5D5A5A5C5E5E5E5D5E5E5D5A5C5C5C5C5C5D5B5A5B5B5D5D5C5A58585A5B5D5B5B5A5A585A5A5B5B5C5A5A5A5A5A5A5A5A5C5C5C5B5A5D5E5E5F5E5D5D5D5D5B5D5C5C5C5C5C5E5C5E5F5E5F5F5F5F5F5F5F5F5E5E5C5E5C5A5A5A5C5E5D5D5D5E5F5F5F5D5F60616161615F6060606163616060606160616363636161646567676564646565656567676767656567656465646567676765656765656464636364636161636361616161616161616161616061615F605F5F60606160616161616060615F5D5C5C5B5A5B5B5B5B5B5B585B5A58585858585B5B5B5B5D5D5B5A5A5A5858585858585858585A5B5A5B58585B5D5C5C5D5F5F615F5F5E5F5F5F5E5F5F61616364636464636361636364636161606060616161616163636464646464646363636464646364656564636363636361616163616161605F1601010101010101010101015388888888888888888888888888888889898989898989898989898A8A8A8A8A8A8A8A8B8B8B8B8B8C8C8D8D8D8D8E8E8E8E8F8F8F909091919292929393949494959696979797989899999B9B9C9C9D9D9E9FA0A0A1A1A2A3A4A5A5A6A7A8A9A9AAABACADAEAFAFB0B1B2B3B4B5B6B7B8B9B9BBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCDCECFD0D0D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E2E4E5E5E6E7E8E9EAEAEBECECEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F8F7F7F6F5F5F5F4F3F3F2F2F1F0F0EFEEEEEDECEBEAEAE9E8E7E6E5E5E4E2E2E1E0DEDEDDDCDBD9D9D8D7D6D4D3D2D2D0CFCECDCCCBCAC9C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEAEADABABAAA9A8A8A6A6A5A4A4A2A2A1A0A09F9E9D9D9C9C9B9A99999898979796969594949393939292919191908F8F8F8E8E8E8D8D8D8C8C8B8B8B8B8A8A8A8A8A898989898989888888888888888887878787878686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686776A6C6A6A6C6C6A69696B727E675E605D605E5C5B5A5A5858585A5B5B5A5A5856565656565757565757575758575A5A5A5757585B5B5C5C5A5A5A585856565656555553545556565656545653535454515356565351515150504F4D4D4F4F514F50514F4D4F4F5153535353545453535454545353565355565757575A5A5C5C5A5A5C5C5A5C5C5D5E5E5E5E605D5D5D5D5D5D5D5F606161616161636363616364646565676567676767656465656565646767656567656363636564646461646565646461616060616363636363636161606163636465656765656767656465676565656464616161616161616163636463646463616161616161616160605E5D5C5C5D5D5D606060606060616164646464616464646461616060616461616061616364656564646164656565656464636161616060606060606060605E60605E5E5E60605D5E5D5D5D5D5D5D5E5E5E5D5D5D5D5D5D5E5E5E605F5D5F5F5D5D5D5D5F5F60616164646461616160606160605D5D5D5E60615F6061606161636363616363636361616161616163636161646163646464646467676769676767656565676565676567676767676767676A6A6969676767676767676767676567676A67676A6A676767656564616160606060605F5E5D5E5F5F5D5D5C5B5B5B5B5B5D5D5D5D5D5D5F5D5D5E5E5F5D5D5D5D5F5D5E5D5D5C5E5E5D5D5C5D5D5D5B5A585A5A5A5B5B5B5A5C5C5B5D5D5D5B5B5C5B585A575A5A5A5A5758585A5A585858565856565658565656585A5A5A57575A5B5C5C5E5D5D5D5E5F5F5F60616161646161605F5F5D5C5C5B5A585A5C5C5C5B5B5B5B5B5B5D5D5D5D5F5D5D5F5D5D5D5C5C5C5E5E5E5D5D5C5C5C5D5D5D5C5C5C5C5D5D5D606060616061616163616161616161616160616161616161616060606161616163616161616161611801010101010101010101015186868686868686868686868686868686868686878787878788888888888888888989898989898A8A8A8A8A8B8B8B8B8C8C8D8D8D8E8E8E8F8F8F90919191929293939394949596969797989899999A9B9B9C9D9D9E9FA0A0A1A2A2A3A4A5A6A6A8A8A9AAABABADADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C9CACBCCCDCECFD0D1D2D3D4D6D7D8D8D9DBDCDDDEDEE0E1E1E2E4E4E5E6E7E8E9EAEAEBECECEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F2F2F1F0F0EFEEEEEDECEBEAEAE9E8E7E6E5E4E4E2E1E1E0DEDDDCDCDBD9D8D7D6D5D4D3D2D1D0CFCECDCBCAC9C8C7C6C5C4C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADADABAAAAA9A8A7A6A5A5A4A3A2A1A0A09F9F9D9D9C9C9B9A999998989796969594949393939292919190908F8F8E8E8E8D8D8D8C8B8B8B8B8A8A8A8A8989898988888888888787878686868686868686858585858585858585858585848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484736463656463646465656367745D5454555656555656565658585858565858585A5858585858565658585858565656565452525151514E4E4E4D4D4E4E4F515251515251515154545452515152515151515255555656565656545151545555525050504E4E4E50514F5152525254545454525254545251525454545654515151515151514F4F515151515454525151515152555658585656585655565655555655525252545252545452545152525456565456565656565555545556545456565656565656585656585858585656565655555454555658585858585A5856585856565858585A5A5858585858585A5A58585A5C5C5B5B5B5A5A585A5B5B5A5B5D5D5D5D5E5E5F5F5F5F5D5D5D5C5B5C5A5C5C5D5D5B5D5D5E5C5B5B5B5B5B5D5B5B5D5B5A5A5A5A5A5A5A585A5A5A5C5A585A5A5A585A5A5A5A585A5A5A5A5A5A5A5B5D5D5D5E5F5E5F5D5B5A5B5A5A5B5A585656585A5858565656565656585858585A5A58585858565656585A5A5A5A58585A5A5B5A5858585A5A5B5C5D5D5D5D5F5D5D5F5F5F5F5F5F5F5D5B5B5D5D5D5D5D5C5E5F5F625F6262626362626262626161626262626363636364646567696A6A6C6D6E707070706F7272727272716E716E6E6F6D6D6D6E6E6C6E70706F6E6E6E7071716E70706E6E706E6D6D6D6D6D6C6D6B6B6B6C6C6A696969696A696A6D6D6D6E6D6D6E6D6B6A67676767676765676765636364646564646363606060606060615F5F5F5F5E5E5D5D5D5B5B5B5B5B5B5B5D5D5B5D5D5C5E5D5D5D5D5F5F5F5E5E5F5F5F5E5E5F5F5D5D5E5F6060625F5F5F5F5D5E5E5D5B5B5B5D5D5D5E5F5F5F5F5F5F5F5F5F5E5E5F6062646564636363646465676767676767676565656765646464646465646565656567676767676767676765646467676767676967676765656567676767676718010101010101010101010150848484848484848484848484848485858585858585858585858586868686868686868787878888888888898989898A8A8A8A8B8B8B8B8C8D8D8D8E8E8E8F8F909091919292939393949495969697979899999A9B9B9C9D9D9E9FA0A0A1A2A2A4A4A5A6A7A8A9AAAAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C4C5C6C7C8C9CACBCDCECFD0D0D2D3D4D5D6D7D8D9DBDBDCDDDEE0E0E1E2E4E4E5E6E7E8E9EAEAEBECECEEEEEFF0F0F1F2F2F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F7F7F7F6F5F5F4F4F3F3F2F1F0F0EFEEEEEDECEBEAEAE9E8E7E6E5E4E4E2E1E0E0DEDDDCDBDAD9D8D7D6D5D4D3D2D0CFCECDCCCBCAC9C7C6C5C4C3C2C1C0BFBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A9A8A7A6A5A4A3A2A1A1A09F9F9E9D9C9C9B9A9999989897969695949493939292919190908F8F8E8E8D8D8D8C8C8B8B8B8A8A8A8989898888888887878686868686868585858585858484848484848484848383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383836F616164646464656567676D7B655C5A5A5A5A5B5B5C5D5E5D5E5F5E5F5F5F605F5F60605F5F5F5F5F606264646363615F5F5F6161615F5F5D5B5A5A5A5A585A58585B5B5B5B5A5B5B5A5A5A5A5A5A5A585858565858565858585858565656565858585858585A5A5858565858565656565454565858585A5A58565556565654565554535353545454545454545656565656565658585A585858585A5A5D5E5F5F5F5F5F5F60606061605F615F5E5E5E5E5E5D5A5A5A5A5B5C5C5D5D5D5F5E5E5F6160605F5F5F5F5F5F5F605F606063605F605F5E5E5E5E5E5D5B5C5A5A5C5E5F5F605F60606163636362636161626263636361615F5F606360625F615F5F5F605F5F5D5D5E5D5A5A5A5A585858585858585A5B5A5A585A5C5C5C5D5D5D5D5A5B5B5B5D5D5D5C5C5A5B5A5A5A5C5B5B5A5B5A5A5A5D5E5F605F5F5F5F5F5F5F5E5F5F5F5F5F5E5E5F5F5F5F5F5F5F626263636263636363636263636261636264626464646464646464636464636363636161616363626060616160605F5F61605F605F626361605F5F5F5F5F62626363636363626463625F5F5F5F5F5F5F5E5E5D5D5D5D5D5D5D5D5A5A585858565656585858585655555656565656565858565858565858585856545453545354545454545454565856585654565858585858565856545658585858565654545351515050504E4E4E4D4D4D4D4E505151515151505153545451505051505050515154545555545454545151535454514F4F4F4E4E4D4F504E5051515153545454515153545151515454545454515050515151514E4E5150505153535150505050515454565656565856545656545456545151515351515453515351515154555554545454555554545354545454545555555555555855565858585856565656545453535455585858585858585656561401010101010101010101014F83838383838383838383838383838383838383838383838484848484848484848585858585858586868686868787888888888989898A8A8A8B8B8B8B8C8D8D8D8E8E8F8F9090919192929393949495969697979899999A9B9C9C9D9D9F9FA0A1A1A2A3A4A5A6A6A8A9A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBFC0C1C2C3C4C5C6C7C9CACBCCCDCECFD0D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E4E4E5E6E7E8E9EAEAEBECEDEEEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F8F7F7F6F5F5F4F4F3F3F2F2F0F0EFEFEEEDECEBEAEAE9E8E7E6E5E4E4E2E1E0DFDEDDDCDBDAD9D8D7D6D4D3D2D1D0CFCECDCBCAC9C8C7C6C5C4C2C1C0BFBEBDBCBBB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A8A6A6A5A4A3A2A1A0A09F9E9D9C9C9B9B99999898979696959494939392929191908F8F8E8E8D8D8D8C8B8B8B8A8A8A89898988888888878786868686858585858484848484848383838383838382828282828281818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818175696A6C6A6D6D6E6E6F6F767D6961605E5E5E5D5D5D5D5C5C5C5C5C5B5B5B5B5B5858575756545454565656565554545555555555555856555656555656565654535351515153545453545454545655565554555656585656555655545456565656545454545150504F4F4F4D4D4D4C4B4C4C4D4F504E4E504E4F4E515151504F4F504F4F4F4E5053535454545454514E4E515353504D4D4D4D4D4C4D4F4D4F5050505151515150505151504E5051515154514E4F4F4E4E4E4E4D4D4E4F4F4E5151504F4F4F4F50535455555454565453545453535453505050515050515150514E505051545451545454545453535153545151545454545454545654545656565654545454535351515354565656565657565455555454565656585856565655555658575656585A5A58585857585657585857585A5A5A5A5C5C5D5D5C5C5B5A5A5A585A575A5A5B5B585B5B5C5A58585858585A58585A5857585858585858565858585A585657575756575858585658585858585857585B5B5A5C5C5C5C5B58585858585858565454565855555454545454545656555558585656565654545456585858585656585758575656565757585A5B5B5B5B5C5A5A5C5C5C5D5D5C5C5A58585B5B5B5B5A5A5C5D5D605D6060606060606060605F5F606060606060606061616464656767696A6B6D6D6D6D6D6E6E6E6E6F6E6B6E6B6B6D6A6A6A6C6C696C6D6D6D6C6C6C6D6E6E6B6D6D6B6B6D6C6A6A6A6A6A696A676767696967676765656767676A6A6A6C6A6A6C6A6767656464646464646464636161616163616160605E5E5E5E5E5E5F5D5D5C5C5C5C5A5A5A585858585858585A5A585A5A5A5C5B5B5B5B5D5D5C5C5C5D5D5D5C5C5C5C5B5B5C5D5E5E605D5D5C5C5B5C5C5A5858585A5B5B5C5D5D5C5C5C5C5C5C5C5C5C5D5E6061636160606061611701010101010101010101014D81818181818181818181818181818181818181818181818282828282828383838383838384848484848485858585868686868787888888888989898A8A8A8B8B8B8C8D8D8D8E8E8F8F90919191929293949495969697989899999A9B9C9C9D9E9FA0A0A1A2A3A4A5A5A6A8A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BBBCBDBEBFC0C1C2C4C5C6C7C8C9CACBCDCECFD0D1D2D3D4D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEAEBECEDEEEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F8F7F7F6F5F5F4F4F3F3F2F2F1F0EFEFEEEDECEBEBEAE9E8E7E6E5E4E4E2E1E0DFDEDDDCDBDAD9D8D7D6D4D3D2D1D0CFCDCCCBCAC9C7C6C5C4C3C2C1C0BFBDBCBBB9B8B8B7B6B4B3B2B1B0AFAEADACABAAA9A8A8A6A5A5A4A2A2A1A0A09F9E9D9C9B9B9A9998989797969594949393929191908F8F8F8E8E8D8D8C8B8B8B8A8A8A898989887267514636201B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141E333D4D616B8080808080808080808080808181818181818181828282828383838383848484848585858586868686878888888989898A8A8A8B8B8B8C8D8D8E8E8E8F8F9091919292939494959696979898999A9B9B9C9D9D9F9FA0A1A2A2A4A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B6B6B7B8B9BBBCBDBEBFC1C2C3C4C5C6C7C9CACBCCCDCECFD1D2D3D4D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEAEBECEDEEEFEFF0F0F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F5F4F4F3F3F2F2F1F0EFEFEEEDECEBEBEAE9E8E7E6E5E4E4E2E1E0DFDEDDDCDBDAD9D8D7D5D4D3D2D0CFCECDCCCBC9C8C7C6C5C4C2C1C0BFBEBCBBBAB9B8B7B6B4B3B2B2B0AFAEADACABAAA9A8A7A6A5A4A4A2A2A1A09F9F9D9D9C9B9A9999989797969694949393929191908F8F8E8E8D8D8D8C8B8B8A8A8A897E6E5747361B0B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A192D3D4C66757F7F7F7F7F7F7F80808080808080808181818181818282838383838484848485858585868686878788888989898A8A8A8B8B8C8D8D8D8E8E8F8F9091919293939494959697979899999A9B9C9D9D9F9FA0A1A1A2A4A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B6B7B8B9BABBBCBDBFC0C1C2C4C5C6C7C8C9CACCCDCECFD0D2D3D4D5D6D7D8D9DBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBEBECEDEEEFEFF0F1F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F7F7F7F6F5F5F4F4F3F2F2F1F0F0EFEEEDECECEBEAE9E8E7E6E5E4E4E2E1E0DFDEDDDCDBD9D8D7D6D5D4D3D2D0CFCECDCBCAC9C8C7C5C4C3C2C1C0BFBDBCBBB9B8B7B6B5B4B3B2B0AFAEADADABAAA9A8A8A6A5A4A4A2A1A1A09F9E9D9C9C9B9A99989897969695949393929291908F8F8E8E8D8D8C8B8B8B8A8A6E5842311B05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192D3C50657E7E7E7E7F7F7F7F7F7F7F8080808080808181818182828283838384848484858585868686878888888989898A8A8B8B8B8C8D8D8E8E8F8F90919292939394959696979898999A9B9C9C9D9E9FA0A1A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B2B3B4B5B6B7B8B9BBBCBDBEC0C1C2C3C4C5C6C8C9CACBCDCECFD0D2D3D4D5D6D7D8D9DBDCDDDEDFE0E1E2E4E4E5E6E7E8E9EAEBEBECEDEEEFEFF0F1F2F2F3F4F4F5F5F6F7F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F8F7F7F6F5F5F4F4F3F3F2F1F0F0EFEEEEECECEBEAE9E8E7E6E5E4E4E2E1E0DFDEDDDCDBD9D8D7D6D5D4D3D2D0CFCECDCBCAC9C7C6C5C4C2C1C0BFBEBDBBBAB9B8B7B6B4B3B2B1B0AFAEADABAAA9A9A8A6A5A4A4A2A1A1A09F9E9D9C9C9B9A99989797969594949392929191908F8E8E8D8D8C8B8B866E53422C16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001423374B64787D7D7D7E7E7E7F7F7F7F7F7F80808080818181818282838383838484848585858686868788888889898A8A8A8B8B8C8D8D8E8E8F8F91919292939494959697979899999B9B9C9D9E9FA0A1A1A2A4A4A5A6A8A8A9AAABADAEAFB0B1B2B3B4B6B7B8B9BABBBCBEBFC0C1C2C4C5C6C7C9CACBCDCECFD0D1D3D4D5D6D7D8D9DBDCDDDEDFE0E1E2E4E4E5E6E7E8E9EAEBECECEEEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F7F7F6F5F5F4F4F3F3F2F2F0F0EFEEEEECECEBEAE9E9E7E6E5E5E4E2E1E0DFDEDDDCDBD9D8D7D6D5D4D3D1D0CFCECCCBCAC9C7C6C5C4C2C1C0BFBDBCBBB9B8B7B6B5B4B3B2B0AFAEADACABAAA9A8A6A6A5A4A2A2A1A09F9E9D9C9B9B99999897969695949393929191908F8F8E8E8D8C8B7A64482C16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F2841546E7D7D7D7D7D7D7E7E7F7F7F7F7F8080808081818181828283838384848485858586868787888889898A8A8A8B8B8C8D8D8E8F8F90919192939394959696979899999B9B9C9D9E9FA0A1A1A2A4A5A5A6A8A9AAABACADAEAFB0B2B3B4B5B6B7B8B9BBBCBDBFC0C1C2C4C5C6C7C9CACBCCCDCFD0D1D2D4D5D6D7D8D9DBDCDDDEDFE0E1E2E4E5E5E6E7E8E9EAEBECECEEEEEFF0F0F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F8F7F7F6F5F5F4F4F3F2F2F1F0EFEFEEEDECEBEAEAE9E7E6E6E5E4E2E1E0DFDEDDDCDBD9D8D7D6D5D4D2D1D0CFCDCCCBCAC8C7C6C5C3C2C1C0BEBDBCBBB9B8B7B6B4B3B2B1B0AFADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9B999998979696949493929291918F8F8E8E8D8D75593D260B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A1E364F687C7C7D7D7D7D7D7E7E7F7F7F7F80808080818181818283838383848485858586868787888889898A8A8A8B8C8D8D8E8E8F8F919192929394949696979898999B9B9C9D9E9FA0A1A2A2A4A5A6A7A8A9AAABACADAEAFB1B2B3B4B6B7B8B9BBBCBDBEC0C1C2C3C4C6C7C8C9CBCCCDCED0D1D2D4D5D6D7D8D9DBDCDDDEDFE0E1E2E4E5E6E6E7E9E9EAEBECEDEEEFEFF0F1F2F2F3F3F4F5F5F6F7F7F7F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F5F4F4F3F3F2F1F0F0EFEEEDECEBEBEAE9E8E7E6E5E4E3E2E1E0DEDDDCDBD9D8D7D6D5D4D2D1D0CECDCCCBC9C8C7C5C4C3C2C0BFBEBDBBBAB9B8B6B5B4B3B2B0AFAEADABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9B999898979696949493929291908F8F8E8E7C5F432705000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051D3B546D7C7C7C7D7D7D7D7D7E7E7F7F7F7F8080808181818282838383848484858586868687888889898A8A8B8B8C8D8D8E8F8F909192929394949596979898999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABADAEAFB0B2B3B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C7C8C9CACCCDCED0D1D2D4D5D6D7D8D9DBDCDDDEDFE0E1E2E4E5E6E7E7E9EAEBEBECEDEEEFEFF0F1F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F7F7F7F6F5F4F4F3F3F2F2F0F0EFEEEEECECEBEAE9E8E7E6E5E4E3E2E1E0DEDDDCDBDAD8D7D6D5D4D2D1D0CECDCCCAC9C8C7C5C4C2C1C0BFBDBCBBBAB8B7B6B5B3B2B1B0AFAEACABAAA9A8A6A5A4A4A2A1A09F9F9D9C9B9B999998979696949493929291908F8F8E6B4A2D11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A28405E777C7C7C7D7D7D7D7D7E7E7F7F7F8080808081818182838383848484858586868787888889898A8A8B8C8D8D8E8E8F909192929394949696979898999B9B9C9D9E9FA0A1A2A3A4A5A6A8A9AAABACADAEB0B1B2B3B4B6B7B8B9BBBCBDBFC0C1C2C4C5C6C8C9CACCCDCED0D1D2D4D5D6D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E8E9EAEBECECEEEEEFF0F0F2F2F3F3F4F4F5F5F6F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F5F4F4F3F2F2F1F0EFEFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DEDDDCDBDAD9D7D6D5D4D2D1D0CECDCCCAC9C8C6C5C4C2C1C0BFBDBCBBB9B8B7B6B4B3B2B0AFAEADACAAA9A8A7A6A5A4A2A2A1A09F9D9D9C9B9A9998979696949493929291908F8366432200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D3B53717C7C7C7C7D7D7D7D7E7E7F7F7F7F808080818181828383838484858585868687888889898A8A8B8B8D8D8E8E8F909191929394949696979899999B9C9D9D9FA0A1A1A2A4A5A6A7A8A9AAABADAEAFB0B2B3B4B6B7B8B9BBBCBDBFC0C1C2C4C5C6C8C9CACCCDCED0D1D2D4D5D6D7D8DADBDCDDDEE0E1E2E3E4E5E6E7E8E9EAEBECECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F4F3F3F2F1F0F0EFEEEDECEBEAEAE9E7E6E5E5E4E2E1E0DFDDDCDBDAD9D8D6D5D4D3D1D0CECDCCCAC9C8C6C5C4C2C1C0BFBDBCBBB9B8B7B6B4B3B2B0AFAEADABAAA9A8A6A5A4A3A2A1A09F9E9D9C9B9A99989797969594939292919084603E170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014314F6C7B7C7C7C7C7D7D7D7D7E7E7F7F7F8080808181818283838384848585868686878888898A8A8B8B8C8D8E8E8F9091929293949496979798999A9B9C9D9E9FA0A1A2A3A4A5A6A8A9AAABADAEAFB0B2B3B4B5B7B8B9BBBCBDBFC0C1C2C4C5C6C8C9CACCCDCED0D1D2D4D5D6D8D9DADBDCDDDEE0E1E2E4E4E5E6E7E9EAEAEBECEDEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F5F4F3F3F2F2F1F0EFEEEEECECEBEAE9E8E7E6E5E4E2E1E0DFDEDDDCDAD9D8D7D5D4D3D1D0CFCDCCCAC9C8C6C5C4C2C1C0BFBDBCBAB9B8B6B5B4B2B1B0AFADACABAAA9A8A6A5A4A2A1A1A09F9D9C9C9B999898979695949392929185613E17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143653717B7C7C7C7C7D7D7D7D7E7E7F7F7F80808081818182838384848485858686878888898A8A8B8B8C8D8E8E8F9091929293949596979898999B9B9C9D9FA0A0A1A2A4A5A6A7A9AAABACADAEB0B1B2B4B5B6B8B9BABCBDBEC0C1C2C4C5C6C8C9CACCCDCED0D1D3D4D5D7D8D9DADBDDDEDFE0E1E2E4E5E6E7E8E9EAEBEBECEEEEEFF0F0F2F2F3F3F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F4F3F3F2F1F0EFEFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DEDDDCDBD9D8D7D6D4D3D2D0CFCDCCCBC9C8C6C5C4C2C1C0BEBDBCBAB9B7B6B5B3B2B1AFAEADACAAA9A8A7A6A5A4A2A1A09F9E9D9C9B9A9998979695949393928B6844220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143A59767B7B7C7C7C7C7D7D7D7E7E7F7F7F80808081818282838384848585868687888889898A8B8B8C8D8E8E8F90919293939495969798999A9B9C9D9E9FA0A1A2A3A4A6A7A8A9AAABADAEAFB0B2B3B4B6B7B9BABBBDBEC0C1C2C4C5C6C8C9CACCCDCFD0D1D3D4D6D7D8D9DBDCDDDEDFE1E2E3E4E5E6E7E8E9EAEBECEDEEEFEFF0F1F2F3F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F5F4F3F3F2F2F0F0EFEEEDECEBEAEAE9E7E6E5E4E3E2E1E0DEDDDCDBD9D8D7D6D4D3D2D0CFCECCCBC9C8C6C5C4C2C1C0BEBDBBBAB9B7B6B4B3B2B0AFAEADABAAA9A8A6A5A4A3A2A1A09F9D9C9B9B9998979796949493927F5128060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002240677B7B7B7C7C7C7C7D7D7D7E7E7F7F808080818181828383848485858686878888898A8A8B8B8C8D8E8F8F90919293949496969798999A9B9C9D9FA0A1A2A3A4A5A6A8A9AAABADAEAFB0B2B3B4B6B7B8BABBBDBEC0C1C2C4C5C6C8C9CBCCCDCFD0D2D3D4D6D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E9EAEAEBECEDEEEFF0F0F2F2F3F3F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F4F3F2F2F1F0EFEEEEECECEBEAE9E8E7E6E5E4E2E1E0DFDDDCDBDAD8D7D6D4D3D2D0CFCECDCBCAC8C7C5C4C2C1C0BEBDBBBAB8B7B6B4B3B2B0AFAEADABAAA9A8A6A5A4A2A1A09F9E9D9C9B9A999897969594938C694011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F3153767B7B7B7C7C7C7C7D7D7D7E7F7F7F8080808181828383838484858586878888898A8A8B8B8D8D8E8F8F919192939495969798999A9B9C9D9E9FA0A1A2A4A5A6A8A9AAABADAEAFB0B2B3B4B6B7B8BABBBDBEC0C1C2C4C5C7C8C9CBCCCECFD0D2D3D4D6D7D8D9DBDCDDDEE0E1E2E4E5E6E7E8E9EAEBECECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F5F4F3F3F2F1F0F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1DFDEDDDCDAD9D8D6D5D3D2D0CFCECDCBCAC9C7C5C4C2C1C0BEBDBBBAB8B7B6B4B3B2B0AFAEACABAAA9A7A6A5A4A2A1A09F9D9C9B9B9998979696949387582806000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022446B7B7B7B7B7C7C7C7D7D7D7E7E7F7F8080808181828383838484858686878888898A8A8B8C8D8E8E8F90919293939496969798999B9B9C9D9FA0A1A2A4A5A6A7A8AAABACAEAFB0B2B3B4B6B7B8BABBBDBEC0C1C2C4C5C7C8CACBCDCECFD0D2D3D5D6D7D9DADBDDDEDFE0E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F0F1F2F3F3F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F4F3F2F2F1F0EFEEEEECECEBEAE9E7E6E5E4E3E2E1E0DEDDDCDBD9D8D7D6D4D3D1CFCECDCBCAC9C7C6C4C2C1C0BFBDBBBAB8B7B6B4B3B2B0AFAEACABAAA8A7A6A4A3A2A1A09F9D9C9B9A9998979695947B4C1D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001840627A7B7B7B7B7C7C7C7D7D7D7E7F7F7F80808181828283838484858686878889898A8A8B8C8D8E8F8F909192939495969798999A9B9C9D9FA0A1A2A3A4A6A7A8A9ABACADAFB0B2B3B4B6B7B8BABBBDBEC0C1C2C4C6C7C9CACBCDCECFD1D2D4D5D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F3F3F2F1F0F0EFEEEDECEBEAE9E8E7E6E5E4E2E1E0DFDDDCDBD9D8D7D6D4D3D2D0CFCDCBCAC9C7C6C5C3C1C0BFBDBCBAB8B7B6B4B3B2B0AFADACABA9A8A7A5A4A3A2A19F9E9D9C9B9998989796947046120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F36587A7A7B7B7B7C7C7C7D7D7D7E7F7F7F80808181818283838485858686878889898A8B8B8D8D8E8F90919293939496979798999B9C9D9E9FA0A2A3A4A5A7A8A9AAACADAFB0B2B3B4B6B7B8BABBBDBFC0C1C3C4C6C7C9CACBCDCED0D1D3D4D6D7D8D9DBDCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F4F4F3F3F2F1F0EFEEEEECEBEBEAE9E7E6E5E4E3E2E1DFDEDDDCDAD9D7D6D4D3D2D0CFCECCCAC9C7C6C5C3C2C0BFBDBCBAB9B7B6B4B3B2B0AFADACABA9A8A7A5A4A3A1A09F9E9D9C9B999897969576460B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000931587A7A7B7B7B7C7C7C7D7D7D7E7F7F7F808081818283838484858586868888898A8A8B8C8D8E8E8F919192939495969798999A9B9D9E9FA0A1A2A4A5A6A8A9AAACADAFB0B2B3B4B6B7B8BABCBDBFC0C1C3C5C6C7C9CACCCDCFD0D2D3D4D6D7D9DADBDDDEDFE1E2E3E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9FAFAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F3F3F2F2F0F0EFEEEDECEBEAE9E8E7E6E5E4E2E1E0DEDDDCDBD9D8D7D5D4D2D0CFCECDCBC9C8C6C5C4C2C0BFBDBCBBB9B7B6B4B3B2B0AFADACABA9A8A6A5A4A2A1A09F9E9C9B9A999897967747120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000930587A7A7B7B7B7B7C7C7C7D7D7E7F7F7F808081818283838484858586878888898A8B8B8D8D8E8F909192939495969798999A9B9C9D9FA0A1A2A4A5A6A8A9AAACADAFB0B2B3B4B6B7B9BABCBDBFC0C2C4C5C6C8C9CBCDCECFD0D2D4D5D7D8D9DBDCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F8F8F8F7F7F6F5F4F4F3F3F2F1F0EFEEEEECEBEBEAE9E7E6E5E4E3E2E0DFDEDCDBD9D8D7D6D4D3D1D0CECDCBCAC8C7C5C4C2C1BFBEBCBBB9B8B6B4B3B2B0AFAEACABA9A8A6A5A4A2A1A09F9D9C9B9A9998977847120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000935627A7A7A7B7B7B7C7C7C7D7D7E7F7F7F808081818283838484858686878889898A8B8C8D8E8F8F9192929394969798999A9B9C9D9FA0A1A2A4A5A6A8A9AAACADAFB0B2B3B4B6B7B9BBBCBDBFC1C2C4C5C7C8CACBCDCED0D1D3D4D6D7D8D9DBDCDDDFE0E1E3E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F3F3F4F4F5F6F7F7F8F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAFAF9F9F8F8F7F7F6F5F5F4F4F3F2F2F0F0EFEEEDECEBEAE9E8E7E6E5E4E2E1E0DEDDDCDAD9D7D6D5D3D2D0CFCDCCCAC9C7C6C4C2C1C0BEBCBBB9B8B6B5B3B2B0AFAEACABA9A8A6A5A4A2A1A09F9D9C9B9A98978A4E1E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F3F6B7A7A7A7B7B7B7C7C7C7D7D7E7F7F7F8080818182838484858586878888898A8B8B8D8E8E8F909192939495969798999B9C9D9FA0A1A2A4A5A6A8A9ABACAEAFB0B2B3B5B6B8B9BBBCBEC0C1C2C4C6C7C9CACCCDCFD0D2D3D4D6D7D9DADCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F3F3F2F1F0EFEEEEECECEBEAE9E7E6E5E4E3E1E0DFDDDCDBD9D8D7D5D4D2D1CFCECDCBC9C7C6C5C3C1C0BFBDBBB9B8B7B5B4B2B0AFAEADABAAA8A7A5A4A2A1A09F9D9C9B99989160290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D49707A7A7A7B7B7B7C7C7D7D7D7E7F7F8080818182838384848586868888898A8A8B8C8D8E8F909192939495969798999B9C9D9FA0A1A2A4A5A6A8A9ABACAEAFB0B2B3B5B7B8B9BBBDBFC0C1C3C5C6C7C9CBCCCECFD0D2D4D5D7D8D9DBDCDDDFE0E1E3E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F8F8F8F7F7F6F5F4F4F3F2F2F0F0EFEEEDECEBEAE9E8E7E6E5E4E2E1E0DEDDDCDAD9D7D6D4D3D2D0CECDCBCAC8C7C5C4C2C0BFBDBCBAB8B7B6B4B2B1AFAEADABAAA8A7A5A4A2A1A09F9D9C9B99986D3606000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000527577A7A7A7A7B7B7B7C7C7D7D7D7E7F7F8080818182838484858586878889898A8B8C8D8E8F909192939495969798999B9C9D9FA0A1A2A4A5A7A8AAABADAEAFB1B2B4B6B7B8BABCBDBFC0C2C4C5C6C8CACBCDCED0D1D3D4D6D7D8DADCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F8F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAFAF9F9F8F8F7F7F6F5F5F4F4F3F2F1F0EFEFEEECECEBEAE9E7E6E5E4E3E1E0DFDDDCDBD9D8D7D5D3D2D0CFCECCCAC9C7C6C4C2C1BFBDBCBBB9B7B6B4B3B1B0AEADABAAA9A7A6A4A3A1A09F9D9C9B998C4F12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F396A7A7A7A7A7B7B7C7C7C7D7D7E7F7F7F80818182838384858586878888898A8B8B8D8E8E8F9192939495969798999B9C9D9FA0A1A2A4A5A7A8AAABADAEAFB1B3B4B6B7B9BBBCBDBFC1C2C4C6C7C9CACCCDCFD0D2D3D5D6D8D9DBDCDDDEE0E1E2E4E5E6E7E9EAEBECECEEEFEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F3F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E2E1E0DEDDDCDAD8D7D6D4D3D1CFCECDCBC9C8C6C5C3C1C0BEBCBBB9B8B6B4B3B2B0AEADABAAA9A7A6A4A3A1A09F9D9C9B996731000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002151797A7A7A7B7B7B7C7C7C7D7D7E7F7F80808181828384848586868888898A8B8B8D8D8E8F9192939394969798999B9C9D9FA0A1A3A4A6A7A9AAABADAEB0B2B3B4B6B8B9BBBCBEC0C1C3C5C6C7C9CBCDCECFD1D3D4D6D7D8DADBDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F4F4F3F2F2F0F0EFEEEDECEBEAE9E7E6E5E4E3E1E0DFDDDCDBD9D8D6D5D3D2D0CFCDCBCAC9C7C5C4C2C0BFBDBBBAB8B7B5B3B2B0AFADACAAA9A8A6A5A3A2A09F9D9C9B86490C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F2C4C6097A2CEEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E9E9E9EAEBEAEAE9E9EEF8E6DEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D59B8282828282828282828282D0FFFFFFFFFFFFFFEDCEAD9760552C0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093569797A7A7A7B7B7B7C7C7D7D7E7E7F7F808181828384848585868788898A8A8B8D8D8E8F9191929394969798999B9C9D9FA0A1A3A4A6A7A9AAABADAFB0B2B3B5B7B8B9BBBDBFC0C2C4C5C7C8CACBCDCFD0D2D3D5D6D8D9DBDCDDDEE0E1E3E4E5E6E7E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F8F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F5F4F3F3F2F1F0EFEFEEECEBEAE9E8E7E6E5E4E2E1E0DEDDDCDAD8D7D6D4D3D1CFCECDCBC9C7C6C4C2C1BFBDBCBBB9B7B6B4B2B0AFAEACAAA9A8A6A5A3A2A09F9D9C9B6E3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001935608DADCEF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEEEEFEEEFEFF1F1F1F6FDEEE9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADA9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEAD8D6035190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215779797A7A7A7B7B7C7C7C7D7D7E7F7F808081828383848585868788898A8A8B8D8D8E8F9191929394969798999B9C9D9FA0A2A3A5A6A8A9AAACAEAFB0B2B4B6B7B8BABCBDBFC1C2C4C6C7C9CBCCCECFD1D2D4D6D7D8DADBDDDEE0E1E2E4E5E6E7E8E9EAEBECEEEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAFAF9F9F8F8F7F7F6F5F5F4F3F3F2F1F0EFEEEDECEBEAE9E8E6E5E4E3E2E0DFDDDCDBD9D8D6D5D3D2D0CFCDCBCAC8C6C5C3C1C0BEBCBBB9B8B6B4B3B1AFAEADABA9A8A6A5A4A2A19F9E9C955618000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C5582ADCEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7E7E7E6E7E7E6E7E7E7EAF6E4DBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEAD82552C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F436F797A7A7A7B7B7B7C7C7D7D7E7F7F80808181838384848586878889898A8B8C8D8E8F9191929395969798999B9C9D9FA0A2A3A5A6A8A9ABACAEAFB1B3B4B6B8B9BBBCBEC0C1C3C5C6C8CACBCDCED0D2D3D5D6D8D9DBDCDDDFE0E2E3E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F4F4F3F2F2F0F0EFEEEDECEBEAE9E7E6E5E4E2E1E0DEDDDCDAD9D7D6D4D3D1CFCECCCAC9C7C5C4C2C0BFBDBCBAB8B7B5B3B2B0AEADABAAA8A6A5A4A2A1A09E9D823E06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000235582ADD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDCDEDEDCDBDBDADBDBDCE2EEDBD3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D59B8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9AD8D552C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052B6078797A7A7A7B7B7C7C7D7D7D7E7F80808181828384848586878889898A8B8C8D8E8F91929394959697989A9B9C9E9FA1A2A4A5A6A8AAABADAEB0B2B3B5B7B8B9BBBDBFC0C2C4C5C7C9CACCCECFD1D2D4D6D7D8DADCDDDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F8F7F7F6F5F4F4F3F2F1F0EFEEEEECEBEAE9E8E7E6E5E4E2E1DFDEDCDBD9D8D7D5D3D2D0CFCDCBCAC8C6C5C3C1C0BEBCBBB9B7B6B4B2B0AFAEACAAA9A7A6A4A2A1A09F9D772B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007356097CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAEAEAEAEAE9E9E9E9E9EEF8E7DEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE976A35070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D577879797A7A7B7B7B7C7C7D7D7E7F7F808181828384848586878889898A8B8C8D8E8F91929394959698999A9C9D9EA0A1A2A4A5A7A9AAABADAFB0B2B4B6B7B9BBBCBEC0C1C3C5C6C8CACBCDCED0D2D3D5D6D8D9DBDCDEDFE1E2E3E5E6E7E8E9EAEBECEEEEEFF0F1F2F3F4F4F5F6F7F7F8F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F5F4F3F3F2F1F0EFEEEDECEBEAE9E7E6E5E4E3E1E0DEDDDCDBD9D7D6D4D3D1CFCECCCAC9C7C5C4C2C0BFBDBBB9B8B6B4B3B1AFAEADABA9A8A6A5A3A1A09F97641900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007356AADD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF1F1F2F2F1F1F1EFEFEEF3FBEBE4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE19F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3AD75350700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013487378797A7A7A7B7B7C7C7D7D7E7F7F808181828384848586868889898A8B8D8D8E8F91929394959798999B9C9D9FA0A1A3A5A6A8A9ABACAEAFB1B3B4B6B8B9BBBDBFC0C2C4C5C7C9CACCCECFD1D3D4D6D7D9DBDCDDDEE0E1E3E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFAFAF9F9F8F8F7F7F6F5F5F4F3F3F2F0F0EFEEEDECEBEAE9E7E6E5E4E2E1E0DEDDDBDAD8D7D5D3D2D0CFCDCBCAC8C6C5C3C1C0BDBCBAB8B7B5B3B2B0AFADABAAA8A6A5A4A2A19F91510C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000236097CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E6E4E4E6E7E6E7E7EAEEF7E6DEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDB9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9A2602C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009396F78797A7A7A7B7B7C7C7D7D7E7F7F808081828384848586868889898A8B8D8D8E8F91929394969798999B9C9D9FA0A2A4A5A6A8AAABADAEB0B2B3B5B7B8BABCBDBFC1C2C4C6C8CACBCDCFD0D2D3D5D7D8D9DBDDDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F0F2F3F3F4F4F5F6F7F7F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F4F4F3F2F2F0EFEFEEECEBEAE9E8E7E6E5E3E2E0DFDDDCDBD9D8D6D4D3D1CFCECCCAC9C7C5C4C2C0BFBDBBB9B8B6B4B2B0AFAEACAAA9A7A6A4A2A1A092450600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074075B9F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E4E4E6E7E7E7E9E7E9EEF8E7E1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDB9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B9824007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000535657879797A7A7B7B7B7C7C7D7D7F7F808081828384848586868889898A8B8D8E8E8F919293949697989A9B9D9EA0A1A2A4A5A7A9AAACADAFB0B2B4B6B7B9BBBDBFC0C2C4C5C7C9CACCCECFD1D3D4D6D7D9DBDCDDDFE0E2E3E4E6E7E8E9EAEBECEEEFEFF0F2F2F3F4F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F4F4F3F2F1F0EFEEEDECEBEAE9E7E6E5E4E3E1E0DEDDDCDAD8D7D6D4D2D0CFCDCBCAC8C6C5C3C1C0BDBCBAB8B7B5B3B2B0AEADABA9A8A6A5A3A1A085390600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F4C8DC4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F3F3F4F4F4F3F4F3F3F9FFEEEAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D09B8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE8D4C0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B657879797A7A7B7B7B7C7C7D7D7F7F8080818283848485868788898A8A8B8D8E8F90919293959697999A9C9D9FA0A1A3A5A6A8A9ABADAEB0B2B3B5B7B8BABCBDBFC1C3C5C6C8CACBCDCFD0D2D4D5D7D8DADCDDDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F8F7F7F5F5F4F3F3F2F1F0EFEEEDECEBEAE9E7E6E5E4E2E1E0DEDCDBD9D8D6D5D3D2D0CECDCBC9C7C6C4C2C0BFBDBBB9B8B6B4B2B0AFADABAAA8A7A5A4A2A1853900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074C8DD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFEFEFEEEEEEEEEEEEEFF4FBEAE4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D99C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD98D4C0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B5B7878797A7A7A7B7B7C7C7D7D7F7F8080818283848485868788898A8B8B8D8E8F90919394959798999B9C9D9FA0A2A4A5A6A8AAABADAFB0B2B4B6B7B9BBBDBFC0C2C4C5C7C9CBCDCED0D2D3D4D6D8D9DBDCDEDFE1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F5F4F3F3F2F0F0EFEEEDECEBEAE8E7E6E5E3E2E0DFDDDCDBD9D7D6D4D3D1CFCECCCAC8C6C5C3C1C0BEBCBAB8B7B5B3B2AFAEACAAA9A8A6A4A2A17A330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074082C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E6E4E4E4E4E3E6E6E6E9F4E2DADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD99C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE82400700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5B7878797A7A7A7B7B7C7C7D7D7F7F8080818283848485868788898A8B8C8D8E8F91929394969798999B9C9EA0A1A2A4A6A8A9AAACAEAFB1B3B5B7B8BABCBDC0C1C3C5C6C8CACBCDCFD0D2D4D6D7D9DBDCDDDFE0E2E3E5E6E7E8E9EAEBECEEEFF0F0F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F4F3F2F2F0EFEFEEECEBEAE9E8E7E5E4E3E1E0DEDDDCDAD8D7D5D3D2D0CECDCBC9C7C6C4C2C1BFBDBBB9B8B6B4B2B0AFADABAAA8A6A5A3A2862600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000196AB9F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEAEAEAEAEAEBEAECECF2F9EAE2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDE9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB97523000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5B7878797A7A7A7B7B7C7C7D7D7F7F8080818283848485868788898A8B8C8D8E8F919293949697999A9C9D9FA0A2A3A5A6A8AAABADAFB0B2B4B6B7B9BBBDBFC0C2C4C6C7C9CBCDCED0D2D3D5D7D8DADCDDDEE0E1E3E4E5E6E8E9EAEBECEEEFEFF0F2F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F4F3F2F1F0EFEEEDECEBEAE9E7E6E5E4E2E1E0DEDDDBD9D8D6D4D3D1CFCECCCAC9C7C5C4C1C0BEBCBBB8B7B5B3B2AFAEACAAA9A7A5A4A28739000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007408DE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E2E1E1E1E1E1DFE1E1E1E4EEDED7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDE9F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3974C0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5B7878797A7A7A7B7B7C7C7D7D7F7F8080818283848585868788898A8B8D8E8F90919294959698999B9C9D9FA1A2A4A5A7A9AAACAEAFB1B3B5B7B8BABCBEC0C1C4C5C7C9CACCCECFD1D3D4D6D8D9DBDCDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAFAF9F9F8F8F7F7F6F5F4F4F3F2F1F0EFEEEDECEBEAE9E7E6E5E4E2E1DFDDDCDBD9D7D6D4D2D0CFCDCBCAC8C6C5C2C1BFBDBBB9B8B6B4B2B0AFADABAAA8A6A5A3873A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F60B9F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDEDFDEDFE1E1E1E1E1E1E7F2E2DADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DF9F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB96019000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C657878797A7A7A7B7B7C7C7D7D7F7F8081818283848585868889898A8B8D8E8F919293949697989A9B9D9EA0A1A3A5A6A8A9ABADAFB0B2B4B6B8B9BBBDBFC1C2C4C6C8CACBCDCFD0D2D4D6D7D9DBDCDDDFE1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F4F3F3F2F1F0EFEEEDECEBEAE8E7E6E4E3E2E0DEDDDCDAD8D7D5D3D2D0CECDCBC9C7C6C4C2C0BEBCBBB9B7B5B3B2B0AEACAAA9A7A5A4883A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002375CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAECECEAEBEAEAEBECECF1F9E9E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE752C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B657878797A7A7A7B7B7C7C7D7D7F7F80818183838485868688898A8B8C8D8E8F919293959697999B9C9D9FA0A2A4A5A7A9AAACAEB0B2B3B5B7B9BBBCBEC0C2C4C5C7C9CBCDCED0D2D3D5D7D8DADCDDDEE0E1E3E4E6E7E8EAEBECEDEEEFF0F1F2F3F3F4F5F5F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F5F5F4F3F3F2F0F0EFEEECEBEAE9E8E7E5E4E2E1E0DEDDDBD9D8D6D4D3D1CFCECCCAC9C7C5C3C1BFBDBCBAB8B6B4B3B1AFADABAAA8A6A5964700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C82E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E6E7E7E9E7E9E9E7E7ECF7E6DEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3824000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B6F7878797A7A7A7B7B7C7C7D7E7F7F80818183838485868788898A8B8C8E8F90919394959798999B9C9EA0A1A3A4A6A8AAABADAFB0B3B4B6B8B9BCBDBFC1C3C5C6C9CACCCECFD1D3D4D6D8D9DBDDDEE0E1E2E4E5E7E8E9EAEBECEEEFF0F0F2F3F3F4F5F5F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F5F4F3F3F2F0EFEFEEECEBEAE9E7E6E5E4E2E1E0DEDCDBD9D8D6D4D3D0CFCDCBCAC8C6C4C2C1BFBDBBB9B7B6B4B2B0AEADABA9A7A59E4E060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C82E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E7E9E9E9E7E7E7E6E6E4E9F3E2DADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBA48282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3822C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005346F7878797A7A7A7B7B7C7D7D7E7F7F80818283848485868788898A8B8D8E8F919293949697999A9C9D9FA0A2A4A5A7A9AAADAEB0B2B3B6B7B9BBBDBFC0C2C4C6C8CACBCDCFD0D2D4D6D7D9DBDCDEE0E1E2E4E5E6E7E9EAEBECEEEFEFF0F2F2F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F5F4F3F2F2F0EFEEEEECEBEAE9E7E6E5E4E2E1DFDDDCDBD9D7D6D4D2D0CECDCBC9C7C5C4C2C0BEBCBAB8B7B5B3B1AFAEABAAA8A69F5B0D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C82E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E9E9E9E9EAEBECEFEEF2FBEBE4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DF9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3822C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000943737878797A7A7A7B7C7C7D7D7E7F80808182838485868688898A8B8C8D8E90919294959798999B9C9EA0A1A3A5A6A8AAABADAFB1B3B4B7B8BABCBEC0C2C4C5C7C9CBCDCED0D2D4D6D7D9DBDCDDDFE1E2E4E5E6E7E9EAEBECEDEEEFF0F2F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F4F3F2F1F0EFEEEDECEBEAE9E7E6E5E3E2E0DEDDDCDAD8D7D5D3D2D0CECCCAC9C6C5C3C1BFBDBBB9B8B6B4B2B0AFADABA9A8A56F1A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001975E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E9E9EAE9E9E7E9E7E7ECF7E7DFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D79C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE38219000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E4C787878797A7A7B7B7C7C7D7D7E7F80808182838485868788898A8B8D8E8F919293949697989A9C9D9FA0A2A4A5A7A9ABADAEB0B2B4B6B8B9BBBDBFC1C3C5C6C9CACCCED0D2D3D5D7D8DADCDDDEE0E2E3E5E6E7E9EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F4F3F2F1F0EFEEEDECEBEAE8E7E6E4E3E1E0DEDDDBD9D8D6D4D3D1CFCECCCAC8C6C4C2C0BFBDBBB9B7B5B3B2B0AEACAAA9A68A270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F60C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E1E2E1E2E3E3E3E3E3EAF4E3DBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADA9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE600F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5F787878797A7A7B7B7C7C7D7E7F7F80818183848485868788898A8C8D8E8F919294959798999B9C9EA0A1A3A5A6A8AAACAEAFB2B3B5B7B9BBBDBFC0C2C4C6C8CACBCECFD1D3D4D6D8D9DBDDDEE0E1E3E4E6E7E8EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F4F3F2F1F0EFEEEDECEBE9E8E7E5E4E2E1E0DEDDDBD9D8D6D4D2D0CFCDCBC9C7C6C4C2C0BEBCBAB8B6B4B3B1AFADABAAA899420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004CADF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDEE1E2DFE1E1DEDEDEDEE3EBDED7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDB9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB94C0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B6E787879797A7A7B7B7C7C7D7E7F80808182838485868688898A8B8D8E8F909293949697989A9C9D9FA1A2A4A6A8A9ABADAFB0B3B4B6B8BABCBEC0C2C4C5C7C9CBCDCFD0D2D4D6D8D9DBDCDEE0E1E2E4E5E7E8E9EBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F3F3F2F1F0EFEEECEBEAE9E8E6E5E4E2E1E0DEDCDBD9D7D6D4D2D0CECDCBC9C7C5C3C1BFBDBCB9B8B6B4B2B0AEADABA9A05D0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000238DEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F3F3F2F1F2F1F1F1F2F6FCECE6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED8D2300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053E72787879797A7A7B7B7C7D7D7E7F80808182838485868788898A8B8D8E8F919294959798999B9D9EA0A1A3A5A7A9AAADAEB0B2B4B6B8B9BBBDBFC1C3C5C7C9CBCDCED0D2D4D6D7D9DBDCDEDFE1E2E4E5E6E8E9EAEBECEEEFF0F1F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F3F3F2F1F0EFEEECEBEAE9E7E6E5E4E2E1DFDDDCDAD8D7D5D3D2D0CECCCAC9C6C5C2C1BFBDBBB9B7B5B3B1AFAEACAAA8781B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000755C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E2E2E2E1E2E2E2E2E1E1E6EFDED7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDB9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE60070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E51777878797A7A7B7B7C7C7D7E7F7F808182838484858688898A8B8C8E8F909293949697999A9C9D9FA1A2A4A6A8AAABAEAFB1B3B5B7B9BBBDBFC1C2C5C6C9CACCCED0D2D3D5D7D8DADCDDDFE1E2E4E5E6E7E9EAEBECEEEFF0F1F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F3F3F2F0F0EFEEECEBEAE9E7E6E5E4E2E0DFDDDCDAD8D7D5D3D1CFCECBCAC8C6C4C2C0BEBCBAB8B7B4B3B0AFADABA994350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C97F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFDFDFE1DFDFE1E1E1E3ECDCD6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADA9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6972C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002164787878797A7A7B7B7C7C7D7E7F80808182838485868788898A8B8D8E8F919294959798999B9D9FA0A2A4A5A8A9ABADAFB0B3B4B6B8BABCBEC0C2C4C6C8CACBCECFD1D3D5D7D8DADCDDDEE0E2E4E5E6E7E9EAEBECEEEFF0F0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F3F2F0EFEFEEECEBEAE9E7E6E5E3E2E0DEDDDBD9D8D6D4D3D1CFCDCBC9C7C6C4C2C0BEBCBAB8B6B4B2B0AEACAAA25706000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000755C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EFEFEFF1F1F1EFEEEFF1F6FCECE4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE550700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053972787878797A7A7B7C7C7D7D7F7F808181838484858688898A8B8C8E8F909293949697999B9C9EA0A1A3A5A6A9AAACAEB0B2B4B6B8B9BCBDC0C1C4C5C7C9CBCDCFD1D3D4D6D8D9DBDDDEE0E2E3E5E6E7E9EAEBECEEEFEFF0F2F3F3F4F5F5F7F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F3F2F0EFEEEDECEBEAE9E7E6E5E3E1E0DEDDDBD9D8D6D4D2D0CFCDCBC9C7C5C3C1BFBDBBB9B7B6B3B2AFAEABAA791B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F82EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAEBECEBEBECEBEBECECF2F9E9E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDC9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED8D19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E51777878797A7A7B7B7C7C7D7E7F80808182838485868788898A8B8D8E8F9192949697989A9C9D9FA1A2A4A6A8AAABAEAFB1B3B5B7B9BBBDBFC1C3C5C7C9CBCDCFD0D2D4D6D8D9DBDDDEE0E1E3E5E6E7E9EAEBECEDEEEFF0F2F3F3F4F5F5F7F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFAFAF9F9F8F8F7F7F5F5F4F3F3F2F0EFEEEDECEBEAE9E7E6E4E3E1E0DEDCDBD9D7D6D4D2D0CECDCAC9C7C5C3C1BFBDBBB9B7B5B3B1AFADAB9C360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEAEAEAECEEEEEFEEEFF4FCECE6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1A58383838383838383838383D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002669787878797A7A7B7B7C7D7D7E7F808181838484858688898A8B8C8E8F919293949698999B9D9FA0A2A4A5A7A9ABADAFB1B3B5B7B9BBBDBFC1C2C5C6C9CACDCED0D2D4D6D7D9DBDCDEE0E1E3E4E6E7E9EAEBECEDEEEFF0F2F2F3F4F5F5F7F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F2F2F0EFEEEDECEBEAE8E7E6E4E2E1E0DEDCDBD9D7D6D3D2D0CECCCAC8C6C4C2C0BFBCBAB8B6B4B2B0AEADAA650D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7E7E9E6E7E6E6E7E6E6EBF6E6DCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E19F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD955070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054777787878797A7A7B7C7C7D7E7F7F808182838485868788898A8B8D8E909193949697999B9C9EA0A1A3A5A7A9AAADAEB0B2B4B6B8BABCBEC0C2C4C6C8CACCCED0D2D3D6D7D9DBDCDEE0E1E2E4E6E7E8EAEBECEDEEEFF0F2F2F3F4F5F5F6F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F6F5F5F4F3F2F2F0EFEEEDECEBEAE8E7E5E4E2E1E0DEDCDBD9D7D5D3D2CFCECBCAC8C6C4C2C0BEBCBAB8B6B4B2B0AEAC8F2F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F6AEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E4E3E3E4E4E6E6E4E4EAF4E2DADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D69B8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED750F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864777878797A7A7B7B7C7C7D7E7F808181838484858688898A8B8D8E8F9192939597989A9C9D9FA1A2A4A6A8AAACAEB0B2B4B6B8B9BCBEC0C2C4C6C8CACBCECFD2D3D5D7D9DBDCDDDFE1E2E4E5E7E8E9EBECEDEEEFF0F2F2F3F4F5F5F6F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F6F5F5F4F3F2F2F0EFEEEDECEBE9E8E7E5E4E2E1DFDDDCDAD8D7D5D3D1CFCDCBC9C7C6C4C1C0BDBBB9B7B6B3B2AFAEAB590700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198DF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDEDEDFDEDFE1DFE1E1E1E3ECDBD3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFC8BCBCBABABCBCBC836A6A6A6A6A748282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6972300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053972787878797A7A7B7C7C7D7D7F7F808182838485868788898B8C8D8F909293949698999B9D9FA0A2A4A6A8AAABAEAFB2B3B6B7B9BBBDBFC1C4C5C7C9CBCDCFD1D3D5D7D8DADCDDDFE1E2E4E5E6E8E9EBECEDEEEFF0F2F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F6F5F5F4F3F2F2F0EFEEEDECEBE9E8E6E5E4E2E1DFDDDCDAD8D7D4D3D1CFCDCBC9C7C5C3C1BFBDBBB9B7B5B3B1AFAD89220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEEEEEEEEECEBEBEAEAEEF9E9E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFB7B79E8E8E6262603F3736360F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F12323D3D476F6F79A1A1B5D3DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA22300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000135F777878797A7A7B7B7C7C7D7E7F808181838485858688898A8B8D8E8F9193949697999B9C9EA0A1A4A5A7A9ABADAFB1B3B5B7B9BBBDBFC1C3C5C7C9CBCDCFD1D3D4D7D8DADCDDDFE1E2E4E5E6E8E9EBECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F6F5F5F4F3F2F2F0EFEEEDECEBE9E8E6E5E4E2E1DFDDDCDAD8D6D4D3D0CFCDCBC9C7C5C3C1BFBDBBB8B7B4B3B0AFAD52000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002CA2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1DFDEDEDEDFE1E1E3E9F3E1D9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDACBB392885D55352D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3D3D6579A1B5D3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB935000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003972777878797A7A7B7C7C7D7D7F808081828384858688898A8B8D8E8F9192939597989A9C9D9FA1A3A5A7A9ABADAFB0B3B4B7B8BBBDBFC1C3C5C7C9CBCDCFD0D3D4D6D8DADCDDDFE0E2E4E5E6E8E9EBECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F2F1F0EFEEEDECEBE9E8E6E5E4E2E0DFDDDCDAD8D6D4D2D0CFCDCAC9C6C5C2C0BFBCBAB8B6B4B2B0AE902200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEFEFEEEFEFEFEFEFEFF3FBEBE4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5B7A1885D44350F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3D5B79A1CAE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC435000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000135F77787878797A7B7B7C7D7D7E7F808182838485868788898B8C8D8F909293949698999B9D9FA1A2A4A6A8AAACAEB0B2B4B6B8BABCBFC0C2C5C6C9CACDCED0D2D4D6D8D9DBDDDEE0E2E4E5E6E8E9EAECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F2F1F0EFEEEDECEAE9E8E6E5E4E2E0DEDDDBD9D8D6D4D2D0CECDCAC8C6C4C2C0BEBCBAB8B6B4B2B0AE5A07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E3E3E3E2E1E1E2E1E1E1E6F1E2DADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2C7A27C553A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3D658DB5DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003972777878797A7A7B7C7C7D7E7F808081838484858688898A8B8D8E909193949697999B9C9FA0A2A4A6A8AAACAEB0B2B4B6B8BABCBEC0C2C4C6C8CACCCED0D2D4D6D8D9DBDDDEE0E2E4E5E6E7E9EAECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F2F2F0EFEEEDECEAE9E8E6E5E4E2E0DEDDDBD9D8D6D4D2D0CECCCAC8C6C4C2C0BEBCB9B8B6B3B2AF9222000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EFF1F1F2F3F3F3F3F3F3F7FDECE7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D1AA7F552C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3D6F98CAF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000135F777878787A7A7B7B7C7D7D7F7F8081828384858688898A8B8D8E8F9192949697989B9C9EA0A1A4A5A8A9ABADAFB2B3B6B7B9BCBDC0C2C4C6C8CACCCED0D2D4D6D8D9DBDDDEE0E2E4E5E6E7E9EAEBEDEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F2F2F0EFEEEDECEAE9E7E6E5E4E2E0DEDDDBD9D8D6D4D2D0CECCCAC8C6C4C2C0BDBBB9B7B5B3B1AF61070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E9E9E9E9E6E7E7E7E7ECF8E6DCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3DCB38053260F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F346598CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC43500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053E77777878797A7A7B7C7C7D7E7F808181838485868788898B8C8E8F9192939597989A9C9D9FA1A3A5A7A9ABADAFB1B3B5B7B9BBBDC0C2C4C6C7CACCCED0D2D4D6D7D9DBDDDEE0E2E4E5E6E7E9EAEBEDEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F2F2F0EFEEEDECEAE9E7E6E5E4E2E0DEDDDBD9D7D6D4D2D0CECCCAC7C6C4C1C0BDBBB9B7B5B3B1A1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEAEAE9EBEBEAEAEAEAEFF8E6DEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDABD95602E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3D79ACE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC435000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002169777878797A7A7B7B7C7D7D7F7F8081838384858688898A8B8D8E909293949698999B9D9FA1A2A5A6A9ABADAFB0B3B5B7B9BBBDBFC1C4C5C7CACCCED0D2D3D6D7D9DBDDDEE0E2E4E5E6E7E9EAEBEDEEEFF0F2F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F3F2F2F0EFEEEDECEAE9E7E6E5E4E2E0DEDDDBD9D7D6D3D2D0CECCCAC7C5C4C1BFBDBBB9B7B4B3B07E0E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAEAEAEAEAEBEAEAEAEBEFF8E7E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFCE91551F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2B6598DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA223000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055177777878797A7B7B7C7C7D7E7F8081828384858688898A8B8D8E8F9193949697999B9D9FA0A2A4A6A8AAADAEB0B3B4B7B9BBBDBFC1C3C5C7CACBCECFD2D3D6D7D9DBDDDEE0E2E3E5E6E7E9EAECEDEEEFF0F2F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F6F5F4F3F3F2F0EFEEEDECEAE9E7E6E5E4E2E0DEDDDBD9D7D6D3D2CFCECBCAC7C5C3C1BFBDBBB8B7B4B2A94C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F8DF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEFECEFEFEFF1F1F1F1F6FCECE6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEC085471D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F5B98E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B72777878797A7A7B7C7C7D7E7F8081818384858687888A8B8D8E8F9192949697999B9C9FA0A2A4A6A8AAACAEB0B2B4B6B8BBBDBFC1C3C5C7C9CBCECFD2D3D6D7D9DBDDDEE0E2E3E5E6E7E9EAECEDEEEFF0F2F2F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F6F5F4F3F3F2F0EFEEEDECEBE9E8E6E5E4E2E0DEDDDBD9D7D6D3D2CFCECBC9C7C5C3C1BFBDBBB8B6B4B2941C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000775F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEEEEEECECEEEEEFEFF4FCEAE4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDED098581D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2B6FB5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68D0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5F777778787A7A7B7B7C7D7D7F7F8081838384858788898A8C8E8F9192939597989A9C9EA0A2A4A6A8AAACAEB0B2B4B6B8BBBCBFC1C3C5C7C9CBCECFD2D3D5D7D9DBDDDEE0E2E3E5E6E7E9EAECEDEEEFF0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F6F5F4F3F3F2F0EFEEEDECEBE9E8E6E5E4E2E0DEDDDBD9D7D6D3D2CFCECBC9C7C5C3C1BFBCBAB8B6B4B27107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E7E7E7E7E6E7E9EAEBEEF8E6DFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1B2752F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F478DD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED6A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054277777878797A7B7B7C7C7D7E7F8081828384858688898A8B8D8E9092939597989A9C9DA0A1A3A5A8A9ABAEAFB2B4B6B8BABCBFC1C3C5C7C9CBCECFD1D3D5D7D9DBDDDEE0E2E4E5E6E7E9EAECEDEEEFF0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F3F2F0EFEEEDECEBE9E8E6E5E4E2E0DEDDDBD9D7D6D3D2CFCECBC9C7C5C3C1BFBCBAB8B6B4AB3F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E4E6E6E6E6E4E6E4E4E3E7F2E3DADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4DBA45A1D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2B6FC0F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD94000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002672777878797A7A7B7C7C7D7E7F8081828384858688898A8B8D8E909193949698999C9D9FA1A3A5A7A9ABADAFB2B4B6B8BABCBFC1C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E7E9EBECEDEEEFF0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F3F2F0EFEEEDECEBE9E8E6E5E4E2E0DEDDDBD9D7D6D3D2CFCDCBC9C7C5C2C1BFBCBAB8B6B38E1C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000019A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFEFF1EFF1F1EFEEEEEEF3FBEAE3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECDB964B0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F175BB5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB923000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5F777778787A7A7B7B7C7D7D7F8080818384858687888A8B8D8E8F9193949698999B9D9FA1A3A5A7A9ABADAFB1B3B6B8BABCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8E9EBECEDEEEFF0F2F3F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F8F7F6F5F4F4F3F2F0EFEEEDECEBE9E8E6E5E4E2E0DEDDDBD9D7D6D3D2CFCDCBC9C7C5C2C0BEBCBAB8B6B363070000000000000000000000000000000000000000000000000000000000000000000000000000000000000782F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBECEBECECEEEFF1F1EFF4FCECE6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFC78E470F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52A1EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D07000000000000000000000000000000000000000000000000000000000000000000000000000000000000054277777878797A7B7B7C7D7D7E7F8081828384868788898B8C8E8F9192949697999B9D9FA1A2A5A6A9ABADAFB1B3B6B8B9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8E9EBECEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F8F7F6F5F4F4F3F2F1F0EFEDECEBEAE8E6E5E4E2E0DEDDDBD9D7D6D3D2CFCDCBC9C7C5C2C0BEBCB9B8B6AC40000000000000000000000000000000000000000000000000000000000000000000000000000000000000004CE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E6E7E9E7E7E6E6E6E7EBF6E6DEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFD08E370F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52A1F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED55000000000000000000000000000000000000000000000000000000000000000000000000000000000000002672777878797A7A7B7C7C7D7E7F8081828384858688898A8C8D8F9192949697999B9D9FA1A2A4A6A9AAADAFB1B3B6B7B9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8E9EBECEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F5F4F4F3F2F1F0EFEEECEBEAE8E7E5E4E2E0DEDDDBD9D7D6D3D2CFCDCBC9C7C5C2C0BEBCB9B7B69D1C00000000000000000000000000000000000000000000000000000000000000000000000000000000000023B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F8F8F8F8F7F7F8F7F7F9FFEFE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD192450F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F175BB5F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4230000000000000000000000000000000000000000000000000000000000000000000000000000000000000E64777778787A7A7B7B7C7D7E7F8081828384858688898A8B8D8F9092939597999B9C9FA0A2A4A6A8AAADAFB1B3B5B7B9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8EAEBECEDEFF0F1F2F3F4F4F5F6F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F5F5F4F3F2F1F0EFEEECEBEAE8E7E5E4E2E0DEDDDBD9D7D6D3D2CFCDCBC9C7C5C2C0BEBCB9B7B5810700000000000000000000000000000000000000000000000000000000000000000000000000000000000782F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF3F3F2F2F1F1EFEFEFEEF4FBEBE4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6AE53150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F176FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D070000000000000000000000000000000000000000000000000000000000000000000000000000000000055077777878797A7B7B7C7D7D7F8080818384858688898A8B8D8E9092939597989B9C9EA0A2A4A6A8AAADAFB0B3B5B7B9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E7E8EAEBECEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F5F5F4F3F2F1F0EFEEECEBEAE9E7E5E4E2E1DFDDDBD9D7D6D3D2CFCECBC9C7C5C2C0BEBCB9B7B55D00000000000000000000000000000000000000000000000000000000000000000000000000000000000040E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F3F3F2F2F2F2F2F3F3F9FFEFE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBBE731C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2B8DE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED4C0000000000000000000000000000000000000000000000000000000000000000000000000000000000003877777878797A7B7B7C7D7D7F7F80818384858687898A8B8D8E9092939597989A9C9EA0A2A4A6A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCDCFD1D3D6D7D9DBDDDEE0E2E4E5E7E8EAEBECEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F6F5F4F3F2F1F0EFEEECEBEAE9E7E6E4E2E1DFDDDBD9D8D6D3D2CFCECBC9C7C5C2C0BEBCB9B7AE3200000000000000000000000000000000000000000000000000000000000000000000000000000000000FADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E4E3E3E2E3E1E3E3E3E9F3E1DADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2DB91400F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52B5F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD1900000000000000000000000000000000000000000000000000000000000000000000000000000000001C6E777778797A7A7B7C7C7D7E7F80818283858687888A8B8D8E8F91939497989A9C9EA0A2A4A6A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCDCFD2D3D6D7D9DBDDDFE1E2E4E5E7E9EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F2F2F0EFEEECEBEAE9E7E6E4E2E1DFDDDCD9D8D6D4D2CFCECBC9C7C5C2C0BEBCB9B79F16000000000000000000000000000000000000000000000000000000000000000000000000000000000060EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7ECECEEEEEEEEEFEFEFEFF2FBE9E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDABD60150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F79E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5E777778787A7A7B7C7C7D7E7F80818283848687888A8B8C8E8F91939496989A9C9EA0A2A4A6A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCECFD2D3D6D8D9DBDDDFE1E2E4E6E7E9EAEBECEEEFF0F2F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F3F2F0EFEEEDEBEAE9E7E6E4E2E1DFDDDCDAD8D6D4D2D0CECBC9C7C5C2C0BEBCB9B78A070000000000000000000000000000000000000000000000000000000000000000000000000000000023B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEEEEEECECEEEEEFEFEFF4FBEBE4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6DE9B400F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE2300000000000000000000000000000000000000000000000000000000000000000000000000000000055077777878797A7B7B7C7D7E7F8081828384858688898B8C8E8F91939496989A9C9DA0A1A4A6A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCECFD2D4D6D8D9DCDDDFE1E2E4E6E7E9EAEBECEEEFF0F2F3F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F4F3F2F0EFEEEDECEAE9E7E6E5E3E1DFDDDCDAD8D6D4D2D0CECBC9C7C5C2C0BEBCB9B766000000000000000000000000000000000000000000000000000000000000000000000000000000000075F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E3E2E2E1E1E1DEDFE1E1E6EFDFD9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6D6771D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F8DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68200000000000000000000000000000000000000000000000000000000000000000000000000000000003E77777878797A7B7B7C7D7D7F8081818384858688898A8C8E8F9192949698999C9DA0A1A4A6A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCED0D2D4D6D8DADCDDDFE1E2E4E6E7E9EAEBEDEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F4F3F2F0EFEEEDECEBE9E7E6E5E3E1E0DEDCDAD8D6D4D2D0CECBC9C7C5C2C0BEBCB9B0480000000000000000000000000000000000000000000000000000000000000000000000000000000023CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EBEBEBE9E9EBEAE9EBEBF2F9E9E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFB1590F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F176FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE23000000000000000000000000000000000000000000000000000000000000000000000000000000002B72777878797A7A7B7C7D7D7F7F80818384858688898A8C8D8F9192949698999C9DA0A1A4A6A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCED0D2D4D6D8DADCDDE0E1E3E5E6E7E9EAECEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F5F5F4F3F2F1F0EFEDECEBE9E8E6E5E3E1E0DEDCDAD8D6D4D2D0CECCCAC7C5C3C1BFBCB9A92B0000000000000000000000000000000000000000000000000000000000000000000000000000000075F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBFBFBF9F9F9F8F9FBFBFDFFF2EFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDC953E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF675000000000000000000000000000000000000000000000000000000000000000000000000000000001C68777778797A7A7B7C7C7D7F7F80818384858688898A8C8D8F9192949698999B9D9FA1A4A5A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCED0D2D4D6D8DADCDEE0E1E3E5E6E7E9EBECEDEEF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F7F6F5F4F3F2F1F0EFEEECEBEAE8E6E5E4E2E0DEDCDBD8D7D4D2D0CECCCAC7C5C3C1BFBCBAA21600000000000000000000000000000000000000000000000000000000000000000000000000000019C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF1F3F2F2F2F2EFF1F1F2F7FCECE7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEE68E1E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34ACF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE230000000000000000000000000000000000000000000000000000000000000000000000000000000E63777778797A7A7B7C7C7D7E7F80818384858688898A8B8D8F9192949697999B9D9FA1A4A6A8AAACAEB0B3B5B7B9BCBFC1C3C5C7CACCCED0D2D4D6D8DADCDEE0E1E3E5E6E8EAEBECEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F2F1F0EFEEECEBEAE8E7E5E4E2E0DEDCDBD9D7D4D3D0CECCCAC7C5C3C1BFBCBA8C0E00000000000000000000000000000000000000000000000000000000000000000000000000000060F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E7E7E9E7E7E6E6E6E7E7ECF7E7DFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E4E4E6E4E6E4E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBCC711C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F98F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF675000000000000000000000000000000000000000000000000000000000000000000000000000000055A777778787A7A7B7C7C7D7E7F80818384858688898A8B8D8F9192949697999B9D9FA1A4A6A8AAACAEB0B3B5B8BABCBFC1C3C5C7CACCCED0D2D4D7D8DBDCDEE0E2E4E5E7E8EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F3F2F0EFEEECEBEAE9E7E5E4E2E0DEDDDBD9D7D5D3D0CFCDCAC8C6C4C1BFBCBA760700000000000000000000000000000000000000000000000000000000000000000000000000000FB9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDDEDEDFE1DFDFDFDFE1E1E3EBDCD6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D7D6D6D7D6D7D7D7D7D7D5D5D7D7D7D9DADBDADADADADBDBDBDCDBDBDADADADBDADADADBDCDCDEDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCCE6A150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F79EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9190000000000000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7B7C7D7E7F80818284858687898A8B8D8F9192949697999B9D9FA1A4A6A8AAACAEB1B3B6B8BABCBFC1C3C5C7CACCCED0D3D5D7D9DBDDDEE0E2E4E5E7E9EAEBECEEEFF0F2F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F4F3F2F0EFEEEDEBEAE9E7E6E4E2E1DEDDDBD9D7D5D3D1CFCDCAC8C6C4C1BFBCBA6700000000000000000000000000000000000000000000000000000000000000000000000000000040EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCF4F4F6F4F4F6F4F7F7F8FCFFF2EEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D3D3D3D5D5D5D7D6D7D7D7D5D5D3D1D1D3D5D3D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D3D3D3D3D5D5D5D5D5D5D5D6D7D7D6D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADABD57150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1779EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED4C0000000000000000000000000000000000000000000000000000000000000000000000000000003877777878797A7B7B7C7D7E7F80818283858687898A8B8D8E9092949697999B9D9FA1A4A6A8AAADAFB1B3B6B8BABCBFC1C4C6C8CACDCFD1D3D5D7D9DBDDDEE0E2E4E6E7E9EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F5F4F4F3F2F0EFEEEDECEAE9E7E6E4E2E1DFDDDBD9D7D6D3D1CFCDCAC8C6C4C1BFBDBB4A0000000000000000000000000000000000000000000000000000000000000000000000000000078DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7ECECEBEBECEEECECECECF1F9E9E2E2E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2DFE1E1DFDFDFDEDFDFE1E1E1E1DFE1E1DFDFE1E1E2E2E2E2E1E1E1E2E2E1DFDEDEDBDBDBDEDEDEDEDEDEDEDEDEDBDBDBDEDEDEDEDEDFE1E1E1E1E2E2E2E2E3E3E4E4E4E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADABC550F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1779EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970700000000000000000000000000000000000000000000000000000000000000000000000000002F72777878797A7B7B7C7D7E7F80818283848687898A8B8D8E9092949697999B9DA0A1A4A6A8AAADAFB1B3B6B8BABDBFC1C4C6C8CACDCFD1D3D5D7D9DBDDDFE1E2E4E6E7E9EAEBEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBFAF9F8F8F7F7F6F5F4F3F2F1F0EFEDECEBE9E7E6E5E3E1DFDDDCD9D8D6D3D2CFCDCBC9C6C4C2BFBDB43B000000000000000000000000000000000000000000000000000000000000000000000000000023D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEFDEDEDCDBDBDCDCDEDEDEE3EBDAD5D5D6D7D7D7D7D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1E1DFE1DFDFDFDFDFDFE1E1E1DFDFDFDFDFDFE1E1E1E1E1DFE1E1DFDFDFDFE1E1E2E2E3E4E4E4E3E3E3E2E2E3E1E1DFDFDFE1E1E2E1E2E3E2E2E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2C35A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1779EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE32C00000000000000000000000000000000000000000000000000000000000000000000000000001C71777878797A7A7B7C7D7D7F80818283848687888A8B8D8E9092949697999B9DA0A2A4A6A8AAADAFB1B3B6B8BBBDBFC1C4C6C9CBCDCFD1D3D6D8D9DCDDDFE1E3E5E6E7E9EAECEDEEF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F2F1F0EFEEECEBEAE8E6E5E3E1E0DEDCDAD8D6D4D2CFCDCBC9C6C4C2C0BDB42C000000000000000000000000000000000000000000000000000000000000000000000000000055F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF6EBEBEBECECECECEFEEEEF3FBEAE3E2E3E3E3E3E3E3E6E3E3E3E2E2E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E4E3E3E3E2E2E2E3E2E2E1E1E1E1E1E1E1E1DFDEDEDEDEDBDBDBDCDCDCDCDBDBDBDBDBDBDBDBDBDEDCDBDEDEDBDCDCDEDCDBDADAD9DAD9DADADADADADADADBDCDBDEDBDADBDEDEDEDCDEDBDCDBDADBDCDCDEDEDBDBDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1D06B0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1779EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66A00000000000000000000000000000000000000000000000000000000000000000000000000001C6D777778797A7A7B7C7D7D7F80818283848587888A8B8D8E9092949698999C9DA0A2A4A6A8AAADAFB2B4B6B8BBBDC0C2C4C6C9CBCDCFD2D4D6D8DADCDDE0E1E3E5E6E8E9EBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F3F2F0EFEEECEBEAE8E7E5E4E2E0DEDCDAD8D6D4D2D0CECBC9C7C5C2C0BDA4250000000000000000000000000000000000000000000000000000000000000000000000000007A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7EBEEEEEEEFF1EFF2F1F1F7FCECE4E6E6E6E6E6E4E4E3E3E2E3E3E2E2E2E3E3E4E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9E9E9E9E9E9E9E9E9E6E7E7E7E7E7E6E6E9E9E9E9E9E9E9E6E6E6E6E4E3E2E1E1E1E1E1E1E1DFE1E1E1DFDFDEDEDEDEDEDEDFDFDFDFDFDFE1DFDFE1E1E1DFDFDFDFE1DFE1DFDFDEE1E1DFDFDEDFDFDFDEDCDBDEDEDCDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEE074150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F98F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD07000000000000000000000000000000000000000000000000000000000000000000000000000E68777778797A7A7B7C7D7D7F80818283848587888A8B8D8E9092949698999C9EA0A2A4A6A9ABADAFB2B4B6B8BBBDC0C2C5C7C9CBCED0D2D4D6D8DADCDEE0E2E4E5E6E8EAEBECEEEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F4F3F2F0EFEEECEBEAE9E7E5E4E2E0DEDCDBD8D7D4D2D0CECBC9C7C5C2C0BEA416000000000000000000000000000000000000000000000000000000000000000000000000002CD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9F1F2F2F2F2F4F2F2F2F2F4FCEBE3E3E3E4E3E3E3E2E3E3E3E3E1E1E1E1E1E1E1E2E1DFDFE1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADAD9D9D9DADBDBDBDAD9D9D7D6D5D5D5D5D6D7D7D9DADAD9D7D9DAD9D9D9D7D9DADADADADADADADADADBDADADBDADADBDCDCDCDEDEDEDEDEDEDEDBDCDBDBDCDBDBDBDCDCDBDBDBDADADBDCDCDBDBDBDBDBDEDEDEDEDEDEDEDEDCDEDEDEDBDBDBDEDEDEDEDEDEDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDED6841C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE32C000000000000000000000000000000000000000000000000000000000000000000000000000E68777778787A7A7B7C7C7D7F80818283848587888A8B8D8F9192949698999C9EA0A2A4A6A9ABADAFB2B4B7B9BBBDC0C2C5C7C9CBCED0D2D4D7D8DBDCDEE0E2E4E5E7E9EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F7F5F5F4F3F2F0EFEEEDEBEAE9E7E6E4E2E1DEDDDBD9D7D5D3D0CECCCAC7C5C3C0BE9616000000000000000000000000000000000000000000000000000000000000000000000000006AF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEF1E3E3E3E4E6E6E6E6E4E6EBF6E6DCDEDBDCDBDADBDCDCDEDEDBDBDADAD9D9D9D7D7D7D6D6D6D5D3D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDEDEDEDEDBDBDEDEDEDEDEDEDFDFDFDFDFDEDEDEDEDFDFDEDFE1E1E1E1E1E1E3E3E2E2E1E1E1DFDFDFDEDEDEE1E1DEE1E1E1DEDEDEDEDEDEDFDEDEDFDEDEDEDEDEDEDEDEDEDEDEDEDFDEDEDEDEDEDCDEDEDEDEDEDEDEDEDEDEDEDEDFE1E1E1E1E2E1E2E1DFDEDFDEDEDFDEDCDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2981D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66A00000000000000000000000000000000000000000000000000000000000000000000000000055A777778787A7A7B7C7C7D7F80818283848587888A8B8D8F91929496989A9C9EA0A2A4A6A9ABAEB0B2B4B7B9BCBEC0C2C5C7CACCCED0D3D4D7D9DBDDDEE0E2E4E6E7E9EAEBEDEEEFF0F2F3F4F4F5F7F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F2F1F0EFEDECEAE9E7E6E4E2E1DFDDDBD9D7D5D3D1CFCDCAC8C5C3C1BF8F0700000000000000000000000000000000000000000000000000000000000000000000000007A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF6ECECECEAEBECEAE9E9E9EEF7E6DEDEDCDCDEDEDFDEDEDEDFE1E1E1E1E1E1E1DFDFDFDFE1E1E1E1E1DFDFDFE1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADADADADADADADBDCDBDEDBDADBDEDEDEDCDEDBDCDBDADBDCDCDEDEDBDBDADAD9D9D9D7D6D6D5D5D5D3D3D5D5D5D6D7D7D7D7D7D6D7D7D9D9D7D6D6D7D6D6D6D7D7D9D9DADADADADAD9D7D7D7D9D9D9D7D7D7D6D6D5D7D7D6D7D9D9D9D9DADADAD9D9D9DAD9D7D9DADADADADAD7D7D7D7D7D7D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCAE2E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD07000000000000000000000000000000000000000000000000000000000000000000000000055A77777878797A7B7C7C7D7F80818283848587888A8B8D8F91929496989A9C9EA0A2A5A7A9ABAEB0B2B5B7B9BCBEC1C3C5C7CACCCED0D3D5D7D9DBDDDFE1E2E4E6E7E9EAECEDEEF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EFEEECEBE9E8E6E5E3E1E0DDDCD9D8D6D3D1CFCDCAC8C6C4C1BF8F0700000000000000000000000000000000000000000000000000000000000000000000000019CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF0E3E4E4E3E3E2E2E2E3E1E6EFDED9D9D7D9D7D7D9D9D9D7D7D6D5D6D6D6D7D7D7D7D7DADADAD7D7D9DADBDADBDCDEDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E4E4E4E3E3E3E2E3E2E1E2E2E2E1E2E3E3E2E2E2E3E3E3E3E2E1E1E1E1E1E1E2E1E1E1E1E1DEDEDCDBDADADBDCDEDEDEDCDCDEDEDEDEDEDCDCDCDCDCDCDCDBDBDADADADADADADAD9D9D9D9D7D7D7D7D9DADBDBDCDBDADADADADBDADADBDBDBDADADADADAD9D7D7D7D7D7D9D7D7D9D9D9D9D9DADBDBDADBDBDBDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD923000000000000000000000000000000000000000000000000000000000000000000000000055A77777878797A7B7C7C7D7F80818283848587898A8B8D8F91929496989A9C9FA0A2A5A7A9ABAEB0B3B5B7B9BCBFC1C4C6C8CACDCFD1D3D6D7D9DCDDDFE1E3E5E6E8E9EBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F3F2F0EFEEECEBEAE8E6E5E4E1E0DEDCDAD8D6D4D2CFCDCBC9C6C4C1BF900700000000000000000000000000000000000000000000000000000000000000000000000040F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF8F2F4F3F2F4F4F4F4F3F2F7FBECE7E9E7E9E9E9EAEAEAEAEAE9EAEAEAEAEAE9E9E6E7E9E9E9E9E9EAE9E9E9EAEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDEDFDEDFDFDFDFDFDFDFDFDEDEDEDEDEDBDBDBDEDEDEDEDEDEDFDFDFDEDEDFE1E1E1E1DEDFDFDFE1E2E1DFDFDFE1DFE1E2E1E1E1E1E2E3E4E4E3E2E2E3E3E3E3E4E6E6E4E3E3E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E3E1E2E2E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E1E1E1DFE1DFDFE1E1E1E1E1E2E2E2E1E1E1DFDEDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDE600F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1782F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64C000000000000000000000000000000000000000000000000000000000000000000000000054B77777878797A7B7C7C7D7F80818283848687898A8B8D8F91929496989A9C9FA1A3A5A8AAACAEB0B3B6B8BABCBFC1C4C6C9CBCDCFD2D3D6D8DADCDEE0E1E3E5E6E8EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F7F5F5F4F3F2F0EFEEEDEBEAE9E7E5E4E2E0DEDCDBD8D6D4D2D0CECBC9C6C4C2C0880700000000000000000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF7EBEAEAEBEBEBECECECEFF2F8E9E1E2E1E1E1E1E1E1E1DFE1E1E1DFDFDFE1E1E1DFDEDEDEDEDCDEDEDEDEDEDEDEDEDCDCDEDEDEE1E1E2E2E3E3E3E3E3E3E3E2E2E2E1E1E1E1E1E2E1E1DFDFE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDEDEDFE1E1E1E1E1DFDFDFDFDFDFDFE1E2E3E3E3E3E3E3E3E3E2E3E3E3E4E4E6E4E6E6E6E6E4E3E4E4E4E4E3E6E6E4E4E6E3E2E2E2E3E3E3E3E1E3E3E3E3E3E1E1E1E1E1E2E2E2E2E2E2E1E1E1E1E2E2E3E4E4E6E4E4E6E6E4E3E4E6E4E4E4E3E3E2E2E1E2E2E1E1E2E3E3E4E3E4E4E3E3E3E3E3E3E3E3E3E1E1E1DFDEDEDFDFDFE1E1E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2620F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7C7C7D7F80818283848687898A8C8D8F91939497989B9D9FA1A3A5A8AAACAFB1B3B6B8BBBDBFC2C4C6C9CBCDCFD2D4D6D8DADCDEE0E2E4E5E7E9EAEBECEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F7F7F6F5F4F3F2F1F0EEEDECEAE9E7E6E4E2E1DEDDDBD9D7D4D2D0CECBC9C7C5C2C07100000000000000000000000000000000000000000000000000000000000000000000000007ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF0E4E3E2E3E4E4E4E4E6E6EAF3E2DADADADADBDBDCDEDEDEDBDBDADBDBDBDBDADBDADAD9D9DADBDADADADADADADBDBDBDBDBDADADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E7E9E7E7E7E6E6E7E9EAE9E9E7E7E7E7E9E9E9EAE9E7E9EAE9E9EAEAEAE9E9E7E7E6E7E7E9E7E7E7E7E9E9E9E9E7E7E9E9E7E7E7E7E6E4E4E6E6E6E6E6E7E6E7E7E9E7E6E6E7E6E7E6E4E4E4E6E6E4E4E4E4E4E4E3E3E1E1E1E1DFDFDFE1DFDEDEDCDEDCDCDBDBDCDBDADBDBDBDBDBDEDEDEDEDEDEDEDEE1DFDFDFDEDEDEDEDEDEDEDEDFE1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1620F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4070000000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7C7C7D7F80818283848688898A8C8E8F91939497999B9D9FA1A3A5A8AAADAFB1B4B6B8BBBDC0C2C5C7C9CBCED0D2D4D7D8DBDDDEE0E2E4E6E7E9EAECEDEEEFF1F2F3F4F5F5F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EFEEECEBE9E7E6E4E2E1DFDDDBD9D7D5D3D0CECCCAC7C5C2C07200000000000000000000000000000000000000000000000000000000000000000000000019D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCF8F2F2F2F2F3F3F3F3F4F6F9FCECE9E9E9E9E9E9E9E9E9E9E9EAEAE9EAEAEBEBEBECECECECEBEBEBECEEEEEEEEEEECECEBECECECECEEEFEFEEEEEEEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDEDEDEDBDBDBDBDAD9D9D7D7D7D9DADADADADBDADADADADBDEDBDBDADADADADADAD9D9D9D9D9D7D7D7D7D7D7D7D7D6D6D6D5D5D5D5D3D0D0D1D0D1D1D1D1D3D3D1D1D0D1D1D1D3D3D3D5D5D5D5D5D3D3D1D0D0D1D3D1D0D0D0D0D0D0D0CFD0D0D0D0D0D0D0D0D0D0D0D1D3D1D1D3D3D5D3D3D3D3D5D6D7D6D7D7D6D6D6D6D6D6D7D6D6D7D7D6D5D5D5D5D6D7D6D6D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDF620F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1782F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7C7C7D7F80818283858688898A8C8E8F91939597999B9D9FA1A4A6A8AAADAFB2B4B6B9BBBDC0C2C5C7CACCCED0D3D5D7D9DBDDDFE1E2E4E6E7E9EBECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F3F2F0EFEEECEBEAE8E6E5E3E1E0DDDCD9D7D6D3D1CFCDCAC8C5C3C17200000000000000000000000000000000000000000000000000000000000000000000000035EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBEDDEDEDCDBDBDBDCDEDEE1E6F1DED6D7D7D7D7D7D6D7D9D9DADAD9D9D9D9DADAD9DADADADADBDCDCDCDEDEDEDEDEDEDEDBDCDBDBDCDBDBDBDCDCDBDBDBDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D6D6D6D7D7D7D7D7DADADAD7D7D9DADBDADBDCDEDEDEDEDEDEDEDEDFDEDEDFDEDEDEDEDEE1DEDEDCDEDCDCDCDCDEDEDEDEDEDEDCDBDAD9DADAD9D9D9DADAD9DADADADADADBDADADAD7D7D6D6D6D7D7D7D9DADAD9DADBDBDCDCDCDCDBDCDCDCDCDBDCDCDEE1E1E1E1E1E1DFDEDFDEDEDEDEDEDEDEDEDEDEDBDADADADCDCDCDEDBDBDBDBDBDEDEDEDFE1E1E2E1E2E2E3E4E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D65E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6400000000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7C7C7D7F80818283858688898A8C8E8F91939597999B9DA0A1A4A6A9ABADAFB2B4B7B9BCBEC0C3C5C8CACDCFD1D3D5D7D9DCDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBFAF9F8F8F7F7F5F5F4F3F2F0EFEEECEBEAE9E7E5E4E2E0DEDCDAD8D6D4D2CFCDCBC9C6C4C17300000000000000000000000000000000000000000000000000000000000000000000000060F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBEDDEDEDFDFE1E1E1E2E3E3E9F3E1D9DADBDCDCDCDADCDCDBDAD9D9DADBDCDBDADBDCDCDCDBDBDBDBDBDBDBDBDBDBDCDCDEDEDEDEDCDCDBDBDBDBDBDADBDADADAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDCDBDBDADADADBDADADADBDCDCDEDCDCDEDEDEDCDEDEDEDEDEE1DEE1E1E2E2E2E3E3E3E4E3E4E4E6E6E4E4E4E4E3E4E6E7E6E6E4E4E4E4E6E6E6E7E6E4E6E7E6E6E7E7E7E6E6E4E4E3E4E4E6E4E6E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E3E4E6E6E6E6E6E7E6E6E6E9E7E6E6E7E6E7E6E4E4E4E6E6E4E6E4E6E4E4E3E3E2E1E1E2E1E1E1E1E1DFDFDEDFDEDEDCDBDEDBDADBDBDBDBDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7C7D7D7F80818284858688898B8C8E8F92939697999B9DA0A2A4A6A9ABAEB0B2B5B7B9BCBFC1C4C6C8CACDCFD1D3D6D8DADCDEE0E2E4E5E7E8EAEBECEEEFF0F2F3F4F4F5F7F7F8F8F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F9F8F7F7F6F5F4F3F2F1F0EEEDECEAE9E7E6E4E2E0DEDCDBD8D6D4D2D0CECBC9C6C4C1730000000000000000000000000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAEFE2E3E3E3E3E4E3E4E6E4E9F3E2DBDBDADADADBDBDBDCDCDCDCDCDCDCDADADADBDEDEDEDEDEDEDFDEDCDCDCDCDBDADBDBDBDADBDBDBDBDADADAD9D7D7D9D9D9D9D7D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDBDBDBDBDCDEDCDBDBDADAD9D9D9DADADADBDBDBDADBDCDCDEDEDEDEDCDEDEDEDCDBDCDCDEE1E1E1E1E1E1DFDEDFDEDEDCDCDCDCDCDCDCDBDAD9D9D9DADAD9DAD9D9D7D7D7DADADADBDEDEDEDEDEDEDFE1E2E2E1E1E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E2E1E1E2E1E1E1E2E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E2E2E1E1E2E3E3E3E3E2E1E1E1E1E1E1E2E1E2E1E1E1DFDEDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970700000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7C7D7D7F80818284858688898B8D8E9092939698999C9EA0A2A5A7A9ABAEB0B3B5B8BABCBFC1C4C6C9CBCDCFD2D4D6D8DBDCDEE0E2E4E5E7E9EAECEDEEF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EFEEECEBE9E7E6E4E2E1DFDDDBD9D7D4D2D0CECBC9C7C5C273000000000000000000000000000000000000000000000000000000000000000000000007B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9EEE1E2E1DFDFDEDEE1DEDEE4EBDBD3D5D5D5D3D1D1D0D0D1D3D3D5D3D3D3D3D3D3D3D3D5D6D6D6D6D6D6D5D5D5D5D6D6D7D6D6D5D5D5D6D5D5D5D5D7D6D5D6D6D6D6D5D3D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDEDEDCDCDBDBDBDBDBDADBDADAD9D9DADBDADADAD9DAD9DADBDBDADADAD9D7D7D9D7D9DADAD9D9D7D7D9D9DADAD7D9D9D9D7D7D7D7D7D7D5D3D3D3D1D0D0D0D1D1D1D0D0CFCFCECECBCBCBCBCBCECECBCBCED0D0CECBCBCBCBCECFD0D1D0CFD0CFCECECECBCBCBCECBCFCECED0D0D3D3D3D5D5D5D3D3D5D5D6D6D6D6D6D5D5D6D6D7D7D9DAD9DAD9D9DADBDBDCDBDBDADADADBDADADADBDCDCDEDCDCDEDEDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFB92F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC407000000000000000000000000000000000000000000000000000000000000000000000047777778787A7A7B7C7D7E7F80818384858688898B8D8E90929496989A9C9EA0A2A5A8AAACAEB1B3B6B8BBBDC0C2C4C7C9CBCED0D2D4D7D9DBDDDEE1E2E4E6E7E9EBECEEEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBFAF9F8F8F7F6F5F4F4F3F2F0EFEEECEBEAE8E6E5E3E1DFDDDCD9D7D5D3D0CECCCAC7C5C273000000000000000000000000000000000000000000000000000000000000000000000019CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9ECDEDEDEDEDFDFDEE1E1E1E4EEE1DADADADADADBDCDCDCDCDCDEDBDBDBDBDBDBDBDBDCDCDBDADADADADBDCDEDEDEDEDEDEE1E1DFDEDEDEDEDEDEDEDEDEDEDCDEDFDFDFDEDFE1E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDBDBDBDEDEDEDCDCDBDBDADBDBDBDBDBDAD9D9D9D9DADADADADADADADADBDCDBDCDCDEDCDEDEDFDFDFDFDFDEDFDFDFDEDEDEDEDFDFDEDEDEDEDEDEDEDEDEDFDFDEDEE1E1E1E1E2E3E3E2E2E1E1E1E2E2E3E3E4E3E3E3E3E3E3E3E4E3E3E3E4E3E3E2E3E2E2E2E2E3E3E3E3E3E4E6E6E6E6E6E4E6E6E7E7E7E7E9EAEAEAEBEBEBEBEBEAEBEBEBEAE9EAE9E7E7E9E9E7E7E7E6E4E3E3E4E4E4E4E4E4E4E3E3E4E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1DA750F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F178DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000000000047777778787A7A7B7C7D7E7F808183848586888A8B8D8F91929496989A9C9FA1A3A5A8AAADAFB1B4B6B8BBBDC0C2C5C7CACCCED0D3D5D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEEDEBEAE9E7E5E4E2E0DEDCDAD8D6D3D1CFCDCAC8C5C393000000000000000000000000000000000000000000000000000000000000000000000023E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F4EEEEEFEEECEEEFEEEFF1F6F9EAE6E4E4E3E4E4E6E4E6E6E6E7E7E7E7E7E6E7E7E7E7E7E7E6E4E4E6E6E7E7E7E9E7E9E9EAE9E7E9EAE9E9E7E6E6E6E7E7E6E6E6E7E6E6E4E4E3E2E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDBDBDBDEDEDEDCDBDEDEDEDFDEDEDEDEDEDCDEDCDCDCDCDCDEDCDEDEDCDEDEDEDEDEDEDEDEDCDCDBDCDBDADAD9DADBDADADADBDBDBDBDADBDBDCDCDCDCDBDBDBDBDCDEDCDADADADCDADCDEDCDCDBDCDEDFE1E1DFDEDEDFDFDFDFE1E1E1E1DFDFE1DFDEDFDEDFE1E1E1E1E1E1E1E1DFE1DEDFDFDEDEDEDEDEDFDFDEDFDFDFE1E1E1E1E1DEDFDFDEDEDEDEDEDFE1DFE1E1E1E1DFE1E1DFDEDEDEDCDBDCDCDCDCDCDCDBDCDBDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5AF2C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE335000000000000000000000000000000000000000000000000000000000000000000000047777778787A7A7B7C7D7E7F808183848587888A8B8D8F91939496989B9D9FA1A4A6A8AAADAFB2B4B7B9BCBEC0C3C5C7CACDCFD1D3D6D8DADCDEE0E1E4E5E7E9EAEBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EFEDECEAE9E7E6E4E2E0DEDCDBD8D6D4D2CFCDCBC9C6C493070000000000000000000000000000000000000000000000000000000000000000000035F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F4ECECECECECECECEEECEEF2F7E7E1E1E1E2E3E3E3E3E4E6E6E6E6E6E4E6E6E7E7E7E7E9E9EAEAEBEBEBEBEBEAEBEBEBEAE9EAE9E7E7E9E9E7E7E7E6E4E3E3E4E4E4E4E4E4E4E3E3E4E3E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2DFE1E1E1E1E2E1E1E1E1E1DFE1E1DFDFDFDEDFDEE1E1E1E1DEE1E1DEDEDFDFE1E1E1E1DFDEDEE1E1DFDEDBDAD9D9D9DADADADADAD9D9D9D9D7D7D7D7D7D9D9D9DADADADADADBDBDBDBDCDBDEDEDEDEDCDCDBDBDBDADBDBDBDEDEDEDEDBDCDCDCDEE1E1E1DFE1E1E1DFE1E1E1E1E1E1E1E3E3E4E6E3E3E3E4E4E3E3E3E4E4E4E4E4E3E2E2E1E1E1E1E3E3E3E2E2E3E4E4E6E7E7E6E7E7E7E7E6E6E4E3E3E4E4E4E4E3E2E3E3E3E2E2E1DFE1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBD5680F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F178DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64000000000000000000000000000000000000000000000000000000000000000000000005A777778797A7A7B7C7D7E7F808183848587898A8B8D8F91939497999B9D9FA1A4A6A9ABADB0B2B4B7B9BCBFC1C4C6C8CBCDCFD2D4D6D8DBDCDEE0E2E4E5E7E9EAECEDEEF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F3F2F0EFEEECEBE9E7E6E5E3E1DFDDDBD9D7D4D2D0CECBC9C6C494070000000000000000000000000000000000000000000000000000000000000000000060F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6ECDFDFE1DFE1E1E1E1E2E3E9F2E1D7D9D7D7D9D7D9D9D7D9D7D9D9DAD9D9D9D9D7DAD9D9D9DAD9D9D9DADBDBDADADADADCDEDEDFDEDEDEDFE1E1E1E2E3E2E3E4E3E3E2E1E1DFDEDEDEDCDBDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9E9E9E9EAE9E9E9E9E9E9E9E9E7E9E9E9E9E9E7E9E9E9E9EAEAE9EBEBE9E9E9E9E7E7E7E7E7E7E7E6E6E7E7E6E7E7E7E7E7E7E9E9E9E7E6E6E7E9E9E9E9E7E6E6E4E6E6E6E6E6E9E9E7E7E7E7E7E7E6E6E6E6E6E6E6E7E6E6E6E6E6E7E7E7E7E7E9E9E9E9EAEAEAE9E9EAE9E9E9E9E9E9E9E9E9E9E9EAEAEBEBEAE9E9E7E7E6E6E6E7E9E7E6E7E9E9E9E7E6E6E6E6E6E6E6E6E6E7E6E6E7E7E9E7E9E9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E3E3E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7B12D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000000000000000000000000000000000000000000000000000000000000000000000055A777778797A7A7B7C7D7E7F808183848687898A8C8E8F91939597999B9DA0A2A4A6A9ABAEB0B3B5B8BABCBFC1C4C6C9CBCED0D2D4D7D9DBDDDEE1E2E4E6E7E9EBECEEEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBEAE8E6E5E3E1E0DDDCD9D7D5D3D0CECCCAC7C59B080000000000000000000000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F7F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5EDE3E1E2E1E3E4E6E4E3E3E9F3E2DBDCDCDCDBDCDEDFE1E1E1DEDEE1E1E1E1E2E3E3E3E2E2E3E2E1E2E1E2E3E3E3E3E3E4E3E3E3E3E1E2E2E1E1E1E2E2E2E2E1E1E1E1E2E2E2E2E2E1E1E1DFE1DFE1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E1E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E3E3E2E2E2E2E2E1DFDFE1DFE1E1DEDEDEDEDEDEDEDCDCDCDCDCDBDBDADAD9D9D9D9D7D7D6D6D5D6D5D5D5D5D3D3D3D3D3D0D0D1D0D0D0D0D0D0D0D0CECECECECECECFCECECECECBCBCBCBCECECBCBCACACACACACBCAC9C9C9C9C9C9C9C9C8C8C8C6C6C8C6C8C9CACBCBCBCBCECECECED0D0D0D1D3D1D1D3D1D0D3D3D3D1D3D5D7D7D7D7D7DADADADADADADADADADADBDBDBDBDBDBDCDEDEDBDBDBDBDBDBDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4770F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000000000000000000000055A777778797A7B7B7C7D7F7F808283848688898A8C8E8F92939697999C9EA0A2A5A7A9ACAEB0B3B6B8BBBDC0C2C5C7C9CCCED0D3D5D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EEEDECEAE9E7E5E4E2E0DEDCDAD8D6D3D1CFCDCAC7C5AB170000000000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F7F7F7F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F5F5F5F5F5E3D3D5D5D5D7D7D7D7D7D7DCE4D5CBCACACBCFCECBCBCBCBCBCECBCACBCBCBCBCBCBCECECECECED0D1D0D1D3D3D3D3D3D3D3D5D6D6D5D7D7D5D5D5D5D5D6D7D6D6D7D7D6D5D5D5D5D6D7D6D6D6D5D5D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDBDBDBDEDEDEDEDEDEDEDEDCDEDEDEDBDBDBDCDCDCDEDEDEDEDCDCDCDADADADADCDCDEDEDEDEDEDCDADAD9D9D9D6D7D7D7D6D7D6D5D6D5D5D3D1D0D0D1D1D1D1D0D0D0CFD0CFCECECECECECECECECECBCBCECBCECFCECECFCFCECECECFD0D1D1D1D1D1D1D1D1D0D0D0D0D0D0CECED0CFCFD0CFCFD0D0D0D0D0CFCECFCFD0D0D0D0D1D1D3D5D5D3D3D5D6D7D6D7D9DBDBDBDBDCDCDCDEDEDEDEDEDEDEDEDEDEE1DFDFDEE1DEDEDEDEDFDFDFDFDFDFDEDEDBDADBDBDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1C0360F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000000000000000000000055A777778797A7B7B7C7D7F80818283858688898B8D8E90929496989A9C9EA0A3A5A8AAACAFB1B4B6B9BBBDC0C2C5C7CACDCFD1D3D6D8DADCDEE0E2E4E5E7E9EAEBEDEEEFF1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EFEEECEBE9E7E6E4E2E0DEDCDBD8D6D4D2CFCDCBC9C6AC170000000000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3E6D7D9D9D7D9DADADADBDADEEAD9D3D3D1D3D5D3D3D5D5D6D6D7D9D9D7D7D7D9D7D7D7D7D9D7D7D7DADAD9D9DAD9D9D9DADADADADADADADBDCDEDCDEDEDCDCDCDEDEDEDBDBDBDEDEDEDEDEDEDEDEDEDEDCDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D6D5D6D6D6D7D7D7D7D7DADADAD7D7D9D9DAD9DADBDEDEDCDBDCDCDCDEDEDEDEDEDEDEDCDCDCDEDCDCDBDBDADADADADADADADADAD9D7D6D5D3D5D3D3D3D3D5D5D1D3D3D3D3D3D3D3D1D1D0D0CECECECFCFCFCFD0D0CFD0D1D1D3D3D3D3D1D3D3D3D3D1D3D3D6D7D7D9D9DAD9D7D6D7D6D6D5D6D6D6D6D6D7D7D5D3D3D3D5D5D5D6D5D5D6D6D6D7D9DADBDCDCDEDEDEDEDFE2E3E3E2E2E3E3E3E3E4E6E6E6E4E4E6E4E4E4E4E6E6E6E6E6E4E3E3E4E3E3E3E4E4E4E4E4E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDF84150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2070000000000000000000000000000000000000000000000000000000000000000000E68777778797A7B7C7C7D7F80818284858688898B8D8E91929496989A9C9FA1A3A6A8AAADAFB2B4B7B9BCBFC1C4C6C8CBCDCFD2D4D6D8DBDCDEE0E2E4E6E7E9EBECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBEAE8E6E5E3E1DFDDDBD9D7D4D2D0CECBC9C6BC1F00000000000000000000000000000000000000000000000000000000000000000007B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F7F7F7F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F7F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1E6DADBDCDEDEDCDEDEDEDBE2ECDBD5D5D6D5D3D5D5D7D7D6D5D5D5D5D6D7D7D7D6D6D5D7D7D7D7DAD9D9D7D9D9D9D9DADBDBDBDADADBDCDCDEDCDCDCDEDEDBDCDCDEDEDEDEDEDEDEDFDEDFDFDFDFDFDFDFDFDEDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E1E1E2E2E2E2E2E1E1E1DFE1DFDFE1E1E1E1E1E1E1E1DFDFDFDEDCDBDBDADADADADADADADAD9DAD7D7D7D7D6D6D7D7D7D7D9D7D7D5D5D5D5D5D3D3D1D3D3D1D1D3D5D3D3D1D1D3D5D3D3D3D5D5D6D3D3D3D3D3D3D1D3D3D5D5D6D7D6D7D7D6D6D6D6D6D7D6D6D5D3D3D3D6D5D6D6D6D7D7D9D9D9D9D9D9DADADADADADADADADBDBDBDADADADBDBDADADADBDBDCDCDADADBDBDBDCDCDBDBDBDEDEDCDCDCDCDBDBDBDBDADADADADADADADADADBDADADADADAD7D7DAD9D9D9D7D9D9D9DAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3D3510F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4070000000000000000000000000000000000000000000000000000000000000000000E68777878797A7B7C7D7D7F808183848586888A8B8D8F91939497989B9D9FA1A4A6A9ABADB0B2B5B7BABCBFC1C4C6C9CBCED0D2D4D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EEEDEBEAE9E7E5E4E1E0DDDCD9D7D5D3D0CECCCAC7BD2E00000000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F9F9F9F8F8F8F8F7F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F7F7F8F8F8F8F9F9F9F9F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0E4D9D7D7D7D9DBDADCDBDBE1EBDBD3D5D6D6D6D7D9D7D9D9DADADADCDEDEDFDFE1E1E2E3E1E1E2E1E1E2E4E6E4E4E3E4E4E4E6E6E6E7E7E6E7E9E7E7E9EAEAE9E9E7E7E6E9E9E9E9E9E9E9EAEAEAEAEAE9EAEAEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E1E1DFDFE1E1E1DEDEDEDEDEDEDEDEDEDEDCDBDBDCDEDEDCDCDCDCDBDADBDBDBDBDBDBDAD9D9D9DADAD9D7D6D6D6D7D9D7D6D5D5D5D5D5D5D5D6D5D3D3D3D3D1D1D1D3D3D3D0D0D1D3D3D3D1D1D0D1D1D0D0D0D0D0D0D0D1D0D0D1D0D1D1D1D1D1D0D0D1D0D0D0D0D0CFCFCFD0D1D0D0D0D1D3D3D3D0D3D5D6D6D6D6D5D6D7D7D9DADAD7D7D7DAD7DADADBDBDADBDCDFE1E1DFDEDEE1E1E1E1E2E3E3E3E2E2E3E2E1E3E2E3E4E3E3E3E3E4E3E3E3E3E2E3E3E2E1E1E2E2E2E2E1E1E1E1E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1B2260F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4070000000000000000000000000000000000000000000000000000000000000000001C71777878797A7B7C7D7E7F808183848587888A8B8D8F91939597999B9DA0A2A4A6A9ABAEB0B3B6B8BBBDC0C2C5C7CACCCED0D3D5D7D9DCDDE0E1E4E5E7E9EAEBEDEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EFEEECEBE9E7E6E4E2E0DEDCDAD8D6D3D1CFCDCAC8C53600000000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F9F9F9F8F8F8F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F5F5F5F5F5F5F5F5F5F5F6F6F6F7F7F8F8F8F8F9F9F9F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F7F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEFEFEFEFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEFEFEFEFEFEFEFEFEFEFE6DEDCDEDEDEDEDCDEDEDEE1EADAD0D0D0D0D1D1D3D3D1D3D3D1D1D1D3D3D5D5D5D5D7D7D6D6D6D6D5D6D6D6D5D7D7D7D7D9DAD9DAD9D9DADBDBDBDCDEDEDFDEDEDEDEDEDEDEDFDFE1E1E2E3E2E3E3E2E2E2E2E2E3E2E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADAD9D9D7D9D9D9D9D7D6D6D6D6D6D7D7D6D7D5D3D3D3D5D5D5D3D3D1D1D1D1D1D1D1D0CFCECECECECECBCAC9C9C9C9C9C8C8C9C9C9C9C9C9C9CAC9CACBCACACBCECACACAC9C8C9C9C9C8C9C9CACBCBCECBCECECBCBCBCBCBCBCACACBCACBCBCBCBCECECECBCBCBCBCBCBCECFCFCFD0D0D0D0D0D0D1D1D0D1D1D1D1D1D3D5D6D5D7D9D7D7D9D9DADADADADADADADADBDBDCDEDFDFDFE1DFDEDEDEE1E1E1DFDEDEDCDBDBDCDCDBDEDCDCDEDEDEDEDEDEDEDEDEDEDFDFDFDFDEDEDEDBDEDEDBDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6810F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1798FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9190000000000000000000000000000000000000000000000000000000000000000001C727778787A7A7B7C7D7E7F808183848587898A8C8E8F92939597999C9EA0A2A5A7AAACAEB1B3B6B8BBBDC0C3C5C7CACDCFD1D3D6D8DADCDEE0E2E4E6E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBEAE8E6E5E2E1DFDDDBD9D7D4D2CFCDCBC9C64E00000000000000000000000000000000000000000000000000000000000000000019C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F9F9F8F8F8F7F7F6F6F6F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F5F5F5F5F5F5F5F6F6F6F7F7F8F8F8F9F9F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F6F6F6F6F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F1F1F1F1F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDE2D7D7D9D7D7D7D9DADBDBDFE9DAD1D3D5D5D5D5D5D3D3D6D7D7D7D7D9D9DADADADADADBDEDEDEDCDCDCDBDADBDAD9D9DBDBDADBDBDBDCDCDEDCDCDCDEDCDCDEDEE1E1DFE1DEDFE1E1E1E1E1DFDFDFDFDFE1DFE1E1E1E1E2E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E2E2E3E3E4E4E4E4E3E3E3E3E4E6E7E6E4E6E6E6E3E3E3E4E3E3E3E4E6E6E6E7E4E4E4E4E4E3E2E2E3E3E1E1E1DFDEDEDBDBDBDBDCDBDCDADADADBDBDCDCDCDCDCDCDCDBDAD9D7D7D5D7D6D6D6D5D3D3D3D3D3D3D1CFCFCECFD0D0CFCECECECECBCBCBCBCBCBCBCACACACACAC9CACACACBCAC9C9C8C8CAC9C9CAC9C9C8CAC9C9C9C6C6C5C6C8C9CACAC9C9C9CACACBCBCBCECFD0D0D1D0D0D0D0D0D0D0D0D3D1D1D0D1D1D3D3D3D3D5D6D5D5D5D5D5D5D3D1D3D5D5D3D5D5D3D5D6D6D6D6D5D5D5D5D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBC53E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000000000002B777778787A7A7B7C7D7E7F808183848687898A8C8E90929496989A9C9EA1A3A5A8AAADAFB2B4B7B9BCBFC1C4C6C9CBCDCFD2D4D6D8DBDDDEE1E2E4E6E7E9EBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1EFEEEDEBEAE9E7E5E3E1E0DDDCD9D7D5D3D0CECBC9C75E00000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F9F9F8F8F8F7F6F6F6F5F5F5F5F5F5F3F3F3F3F3F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F3F3F3F3F3F3F5F5F5F5F5F5F6F6F6F7F8F8F8F9F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F7F7F6F6F6F6F5F5F5F5F5F5F5F5F3F3F3F3F3F1F1F1F1F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEDEDEDEDEDECECECECECECECECECECECECECECECEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EBEBEBEBEBEBECECECECECECECECE2D6D5D6D6D6D7D7D9D7D7DCE6D7D0D0CFCECECFD0D1D0D0D0D0CFD1D0D3D3D3D3D3D3D5D5D3D5D5D6D7D7D7D6D7D9DADBDADADADADADADADADBDBDBDBDCDBDCDEDCDEDEDEDEDEDEDEDFDEDEDEDEDEDBDBDBDEDEDEDEDEDEDFE1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E2E2E2E2E2E1E1E1DFE1DFDFE1E1E1E1E1E1E1E1DFDFDFDEDCDBDBDADADADADADADADAD7D9D7D6D6D6D6D5D7D7D6D6D7D6D5D3D3D3D1D1D1D0D0D0D0CFCFD0D0CFD0CFCED0D0D0D0D0D1D1D1D0D0CFD0CFCFCECFCED0D0D1D1D1D1D1D0D0D0D0D0D1CFCFCECBCBCBCFCFD0CFCFD0D0D3D3D3D1D1D1D1D1D3D3D3D3D3D3D5D5D3D3D3D3D5D5D5D3D3D6D5D6D7D5D3D5D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D9D9DAD9D7D7D7D7D7D7D7D7D7D7D7D7D7D9D9D7D6D6D6D6D6D7D7D6D7D6D5D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFB1260F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000000000002F777778797A7B7B7C7D7E7F818283858688898B8D8E90929496989A9C9FA1A4A6A8ABADB0B2B5B7BABCBFC1C4C6C9CBCED0D3D5D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFBFAF9F8F8F7F6F5F4F3F2F1F0EFEDECEAE9E7E6E4E2E0DEDCDAD8D6D3D1CFCCCAC77600000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F9F8F8F8F7F6F6F6F5F5F5F5F5F3F3F3F3F1F1F1F1F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F3F3F3F3F5F5F5F5F5F6F6F6F7F8F8F8F9F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F8F8F8F8F7F7F6F6F6F5F5F5F5F5F5F5F3F3F3F3F3F3F1F1F1F0F0F0F0F0F0F0F0EFEFEFEFEFEFEDEDEDEDECECECECECECECECECECEBEBEBE9E9E9E9E9E9E9E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9DDD0D0D0D1D1D3D1D3D5D5DAE3D3C9C9CACBCACBCECECECECBCECFCFD0D0CED0D0D1D0D0D0D0D3D3D0D0D0D0D0CFCFCFD0D0D0D0D0CFCFCECECECECFD0D0D1D1D0D0D1D3D3D1D0D0D0D0D0D3D3D6D3D3D3D3D1D1D1D0D0D0D1D0D1D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E7E9E7E7E7E6E6E7E9EAE9E9E7E6E6E6E9E9E7E7E7E6E7E9E7E6E7E7E7E6E6E4E4E3E4E3E4E3E3E3E3E3E3E3E3E2E1E2E2E1E1E1DFDEDBDBDCDCDCDCDCDCDBDCDBDCDBDADADAD9DAD7D6D6D6D6D6D5D5D5D5D3D3D1D1D0CFCECECBCBCBCECBCACAC9CAC9C9C9C8C9C8C6C8C8C8C8C8C9C9CAC9C9CACACACECBCECECBCBCECECECBCECFD0D1D1D1D3D1D1D5D5D3D1D1D1D1D3D5D5D5D6D6D6D5D5D6D7D7D9D9D9D9D9D7D9DADADADADBDADADADADCDCDBDAD9DADBDBDEDBDBDBDBDBDBDBDCDCDEDBDBDBDBDBDBDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E27D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000000047777778797A7B7B7C7D7F80818284858688898B8D8F91939497999B9D9FA1A4A6A9ABAEB0B3B6B8BBBDC0C2C5C7CACCCED1D3D6D8DADCDEE0E2E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBEAE8E6E5E2E1DEDDDBD8D6D4D2CFCDCAC89708000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F8F8F8F7F6F6F6F5F5F5F5F3F3F3F3F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEFEFEFEFEFEFEFF0F0F0F0F0F0F1F1F1F3F3F3F3F5F5F5F5F6F6F6F7F8F8F9F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F8F8F8F8F7F7F6F6F6F5F5F5F5F5F5F3F3F3F3F3F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEDEDEDEDECECECECECECECECEBEBE9E9E9E9E9E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E5E5E5E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E0D5D7D7D9D9DADADADBDCE1E7DAD5D5D5D5D7D6D7D7D9D7D7D7D9D9D9DAD9DADBDADBDBDBDADADADCDCDCDCDBDEDEDFDEDFDEDEDEDEDEE1E1E1E1E1E1E1E1E1E1E2E2E3E4E4E4E4E4E6E6E4E3E6E6E6E6E6E4E4E3E3E2E3E3E2E2E2E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E3E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFE1E1DEDFDEDEDEDEDEDEDEDEDEDEDCDCDBDBDBDCDBDBDCDBDADBDAD7D7D7D7D9D9DADADADADADAD9D7D7D6D6D7D5D5D1D1D1D1D1D3D1D1D3D1D1D1D3D1D1D0D0D0D0D0CFCFCFCECECECFCFCECECFCECECFCFCFCFCFD0D1D1D3D1D1D1D0D0D0D0D0D0D1D0D1D1D1D3D1D5D5D5D5D6D5D5D5D6D6D7D5D6D7D7D7D7D6D7DADADADBDCDCDCDADBDBDBDADAD9D7D9D9D9D9DAD9D7DADBDBDADADAD9DADADADADCDEDEDEDEDEDFDEDEDEDFE1DEDEDEDEE1DFE1DFDFDEE1E1DFDFDEDFE1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4DC480F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000000055777778797A7B7C7D7D7F808183848586888A8B8D8F91939597999B9DA0A2A5A7AAACAFB1B4B6B9BBBEC0C3C6C8CACDCFD2D4D6D8DBDCDEE1E2E4E6E7E9EBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EEEDEBEAE9E7E5E3E1DFDDDBD9D7D4D2D0CECBC9AE08000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F8F8F7F7F6F6F5F5F5F5F3F3F3F1F1F1F0F0F0F0F0EFEFEFEFEDEDEDEDECECECECECECECECECECECECECECECECECEBEBECECECECECECECECECECECECECECECECECEDEDEDEDEFEFEFEFF0F0F0F0F0F1F1F3F3F3F3F5F5F5F5F6F6F7F8F8F8F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F8F8F8F7F7F6F6F6F5F5F5F5F5F5F3F3F3F3F1F1F1F0F0F0F0F0F0F0EFEFEFEFEDEDEDEDECECECECECECECEBEBE9E9E9E8E8E8E8E8E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5D7C8C9C6C6C9CACACBCECED1DECFC8C8C9C8C8C8C8C8C8C9CACACBCAC9CAC9C9C8C9C9C9CACBCBCFD0D0D0CED0D1D0D1D1D0D1D3D3D5D6D5D5D5D6D7D7D7D7DAD9D9DADADADADBDCDCDCDCDCDCDBDCDBDBDCDBDBDBDCDCDBDBDBDADADBDCDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADAD9D9D7D9D9D7D9D7D7D7D7D7D7D7D7D6D6D5D5D6D5D6D7D7D7D7D7D5D5D6D6D7D7D7D7D7D7D7D6D5D5D5D3D3D1D1CFCFD0CFCFCECECBCECECECACAC9C8C9C8C6C8C6C6C8C8C9C9C9C6C5C6C6C9C6C8C9CAC9C9C9CAC9C9C9CAC9C9C9C8C8C8C8C8C9C8C8C6C8C6C6C5C5C6C6C6C6C6C6C5C5C4C4C4C4C4C4C4C5C5C5C5C5C5C6C8C9C9C8C8C6C6C5C6C6C9C9C9CACACBCACECFCFD0D1D1D1D0D3D3D3D5D5D5D6D7DADADADBDBDBDBDADBDBDBDADBDBDBDBDBDEDCDADADADADADADBDCDBDBDADADBDEDEDEDFE1E1E2E1E2E2E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9B2240F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000000000055E777778797A7B7C7D7E7F808183848587898A8C8E8F92939698999C9EA0A3A5A8AAADAFB2B4B7B9BCBFC1C4C6C9CBCED0D2D4D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F1F0EFEEECEAE9E7E6E4E2E0DEDCDAD8D6D3D1CECCCAB718000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0F0F0EFEFEFEDEDEDECECECECECECECEBEBE9E9E9E9E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9EBEBECECECECECECECEDEDEDEFEFEFF0F0F0F0F0F1F1F3F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F9F9F8F8F8F7F7F6F6F6F5F5F5F5F5F3F3F3F3F3F1F1F1F0F0F0F0F0EFEFEFEFEFEDEDEDECECECECECECEBE9E9E9E9E8E8E8E8E7E7E7E7E7E7E7E5E5E5E5E5E5E5E4E4E4E4E4E3E3E3E3E3E3E3E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E3E3E3E3E3E3E3E4E4DCD0CFD0CFD0D0D0D0D0CFD5DCCAC4C4C3C3C5C6C6C8C9CAC9C9C9CACBCECECECBCBCECECFCFCECECECFD0CECFCFCFD0D0D0D0D0D0D0CFCFCFD0CFCECECFCFD0D0D1D1D3D3D1D1D0D1D3D3D5D5D5D6D5D7D7D7D5D5D3D1D1D3D5D3D1D1D1D1D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D7D7D9DADADADAD9D9D9D9D9D9DADBDADAD9D7D7D6D5D5D5D3D3D5D5D5D7D7D7D5D3D5D5D3D3D3D1D1D3D3D3D3D1D1D1D0D1D1D0D0D0CFCFCFD0D0D0D0D0D0CFCECECECACAC9C9C9C9C9C9C9C9C6C6C6C5C5C5C5C5C4C4C4C4C4C5C5C5C4C5C5C4C4C4C4C4C4C1C1C1C4C4C4C5C5C5C5C5C5C5C3C4C3C4C5C5C5C6C6C6C8C6C5C5C5C5C5C5C6C6C6C5C6C8C6C9C6C8C9C8C6C8C8C9C9C9C9C9CACACACACACBCBCBCBCBCECECECECED0CFD1D3D1D1D5D5D1D3D3D5D7DADADADADADAD9D9D9DAD9D9D7D7D7D7D9D9D7D9D7D7D9D9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDC9C150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000000E687778787A7A7B7C7D7E7F808183848687898A8D8E90929496989A9C9FA1A4A6A9ABAEB0B3B5B8BABDC0C2C5C7C9CCCED0D3D5D7D9DCDEE0E2E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBEAE8E6E5E2E1DEDDDBD8D6D4D2CFCDCAC02F000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0F0EFEFEFEDEDECECECECECEBE9E9E9E9E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E9E9E9EBEBECECECECECEDEDEFEFEFF0F0F0F0F1F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F9F9F8F8F8F7F7F6F6F5F5F5F5F5F3F3F3F3F1F1F1F0F0F0F0F0EFEFEFEFEDEDEDECECECECECECEBE9E9E9E8E8E8E7E7E7E7E7E7E7E5E5E5E5E5E4E4E4E4E3E3E3E3E3E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE0E0E0E0E0E0E0E0E0E0E0E0E0E0D5C8C8CACACBCACBCBCBCBD1DAC9C1C4C4C4C5C6C6C6C6C8C9CACBCBCBCBCECFCFCFD0D0D0D0D0D0D0D1D1D3D3D5D5D5D5D5D3D3D5D6D9D9D9D9D9DADBDBDBDADADBDBDBDBDBDBDBDCDADCDEDEDEDEDEE1E1E1E1E1E1E2E3E4E3E3E3E3E2E2E1E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDAD9D9D7D6D6D6D6D7D9D9D9D7D9D9D9D7D6D6D6D6D5D5D5D6D5D5D5D5D5D3D3D1D0D0D0D1D3D1D1D3D5D5D5D5D6D7D5D5D5D1D1D0D0D0CFCFCECBCBCACAC9CACACAC9C9C9C9C9C9CAC9CAC9CAC9C9CACAC9C9C9C9C9C9C9C9C9C6C6C8C8C8C6C6C5C5C5C6C6C6C6C8C8C6C6C8C8C8C8CACACACACACACACACACACECECECBCECBCBCFCFCFD0D0D0D0D1D0D1D1D0D0D0D0D1D3D5D5D5D6D7D9D9DADADAD9DADBDCDEDEDEE1E1E1E2E3E4E4E4E4E4E4E6E6E4E3E6E4E4E4E4E4E4E4E4E3E3E2E1E3E3E3E3E3E3E3E3E3E4E3E3E2E2E1E2E2E1E1E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3750F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000018727778787A7A7B7C7D7E7F818283858688898B8D8F91929497989B9D9FA2A4A7A9ABAEB0B3B6B8BBBDC0C3C5C7CACDCFD2D4D6D8DBDCDEE1E2E4E6E7E9EBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EEEDEBEAE9E7E5E4E1DFDDDBD9D7D4D2D0CECBC947000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F1F0F0F0F0EFEFEDEDECECECECEBE9E9E9E8E8E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E7E7E7E7E7E7E7E8E8E8E9E9E9EBECECECECEDEDEFEFF0F0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F9F9F8F8F8F7F7F6F6F5F5F5F5F5F3F3F3F1F1F1F0F0F0F0F0EFEFEFEDEDEDECECECECECEBE9E9E9E8E8E8E7E7E7E7E7E7E5E5E5E5E4E4E4E3E3E3E3E1E1E0E0E0E0E0E0E0E0DEDEDEDEDEDEDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDEDEDEDEDCD5D7D7D7D9D9D9D7DADAE1E3D7D1D3D5D5D5D6D7D7D9D9D7D7D9D9D7D7D9D7D7D7D7D9D7D9D9D9D7D7D7D9DADADADADADADADADCDBDCDBDBDADCDCDBDCDCDBDBDBDBDCDBDCDBDCDCDCDCDCDBDCDCDBDEDBDBDCDEDEDEDEDEDEDEDEDFE1E1E1DFE1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1DFDFDFE1DFE1E1E1E1E2E1E1E1E1E1DEE1DFDEDEDEDCDEDEDFDFDFDFDEDEDEDBDBDEDCDEDEDCDCDADAD9DADAD9D7D6D3D1D1D1D1D1D0D0D0D0D0CFCECBCACACBCBCBCBCACBCBCBCACACBCBCBCACBCACBCBCBCBCAC9C8C8C8C5C6C6C6C8C8C8C8C5C5C5C5C6C9C9C9C6C8C8C8C5C6C6C8C6C6C6C9CACACACBCAC9CACACAC9C9CACBCBCACACACACACBCACACACBCBCBCECBCECFD1D1D3D5D5D5D6D7D7D6D5D6D6D5D5D7D7D9D9D9D7D9DADADADAD9D7D9D7D9DADADADAD9DADAD9DADBDBDBDADADADADADBDAD9DADADBDBDBDADAD9D9DAD7D7DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBD5460F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000021777778797A7B7B7C7D7F808182848586888A8B8D8F91939597999B9DA0A2A5A8AAADAFB2B4B7B9BCBFC1C4C6C9CBCDD0D2D4D7D9DBDDDFE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F4F3F2F0EFEEECEAE9E7E6E4E2E0DEDCDAD8D6D3D0CECCC968000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F0F0F0F0EFEFEDEDECECECEBE9E9E8E8E7E7E7E7E7E5E5E5E5E5E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E5E5E5E5E5E7E7E7E7E7E8E8E9E9EBECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F9F8F8F8F7F7F6F6F5F5F5F5F3F3F3F3F1F1F0F0F0F0EFEFEFEFEDEDECECECECECEBE9E9E9E8E8E7E7E7E7E7E5E5E5E5E4E4E4E3E3E3E1E1E0E0E0E0E0E0DEDEDEDEDDDDDDDDDCDCDCDCDCDCDCDCDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADCDCDCDCDCD0C5C6C8C6C9CACACBCECED5DECAC3C5C6C8C9CACBCECBCBCACACECECED0D0D0D1D1D1D0D1D3D3D3D3D1D3D5D5D3D3D5D5D5D6D6D7D7D7D7D7D6D6D7D7D7D7D9D9D9DADBDADADADBDBDCDEDEDFDFE1E1E1E2E2E2E1E1E1E1E1E1E1DFDFE1E1E1DEDEE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADAD9D9D7D9D9DADADADAD9DAD7D7D9D9D6D7D9D9D7D6D5D5D5D5D1D0D0D1D0D3D0D0D1D0CED0CFD0D1D1D0D0D0D0CFCFCECECECBCBCECBCBCECECBCBCECECECBCAC9CACAC9CACACACACAC9C9C9C6C6C6C6C5C5C5C5C5C6C6C5C5C5C5C5C5C4C5C5C5C6C6C6C5C6C6C6C5C5C4C4C4C4C4C4C5C5C4C4C5C5C4C4C4C5C4C4C5C4C5C5C6C5C6C5C5C5C5C5C8C8C8C9C9C9CACAC9CACBCBCBCFD0D1D1D1D3D5D3D3D5D5D5D6D6D6D6D5D6D6D7D9D7D9D9DADADCDBDEDEDEDEDEDEDEDEDFDFDFDEDFDEDEDCDCDEDEDEE1E1E1E1E1E1E2E3E4E4E4E4E3E4E4E4E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6CE260F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000034777778797A7B7C7C7D7F808183848587898A8C8E8F92939698999C9FA1A3A6A8AAADB0B2B5B7BABDBFC2C4C7C9CBCED0D3D5D7D9DCDEE0E2E4E5E7E9EAECEEEFF0F1F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F0EFEEECEBEAE8E6E5E3E1DEDDDBD8D6D4D2CFCDCA87000000000000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0F0EFEFEDECECECECE9E9E8E8E7E7E7E7E5E5E5E4E4E4E3E3E3E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E3E3E3E4E4E4E5E5E5E7E7E7E7E8E8E9EBECECECEDEDEFEFF0F0F0F1F1F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F9F8F8F7F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0F0EFEFEFEDEDEDECECECECEBE9E9E8E8E8E7E7E7E7E5E5E5E5E4E4E3E3E3E1E0E0E0E0E0E0DEDEDEDDDDDDDCDCDCDCDCDCDADADADADADADADADAD9D9D9D9D9D9D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D9D9D9D9D9D9DADADAD1C5C5C4C4C6C8C9C9C9C9CED9CAC3C4C4C3C3C3C4C4C4C5C4C4C4C4C5C5C6C5C6C5C6C6C8C6C6C8C8C9CBCECFD0D0CFCFD0D0D1D0D0D3D1D3D1D3D3D3D3D1D1D1D1D1D3D5D3D5D6D7D7D7D7D9D9D9D9DADADADADAD9D9D7DADADADADBDADADADADBDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFDFE1E1E1E1E1E1E2E3E4E3E3E3E3E1E1E1DEDEDEDBDBDBDADADADAD9D7D7D6D6D7D6D6D5D6D5D3D1D1D1D1D0D0D0CECBCECECECECECBCBC9C9C8C8C9CAC9C8C6C6C6C6C5C3C4C4C4C4C4C4C1C0BFBFBDBBBBBBBBBBBBBBBBB9B9B9B9B9B8B8B6B6B6B6B5B6B5B5B5B3B3B3B3B3B2B2B2B3B5B5B5B8B9B9B9B9BCBDBCBBBBBBBBB9BBBCBCBBBBBBBBBCBCBDBFBFBFBFBFC0C3C3C4C5C4C5C6C8C8C9CACBCBCBCECED0D0D1D1D3D1D1D3D6D7D6D7D7D7D7DADADADADCDCDCDEDFE1E1E1E3E3E4E3E3E3E3E4E6E6E7E9E9E7E7E6E7E9E9E9E9E9E9E9E9E9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4B3150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000004B777778797A7B7C7D7E7F808183848687898A8D8E90929496989B9D9FA1A4A6A9ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD1D4D6D8DBDCDEE1E2E4E6E8EAEBECEEEFF0F2F3F4F5F5F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F1F0EEEDEBEAE9E7E5E4E1E0DDDBD9D7D4D2D0CECBA9080000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEFEDEDECECEBE9E9E8E7E7E7E7E5E5E4E4E3E3E1E0E0E0E0E0E0E0DEDEDEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEE0E0E0E0E0E0E1E1E3E3E4E4E5E5E7E7E7E7E8E9E9ECECECEDEDEFEFF0F0F1F1F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F9F8F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0F0EFEFEFEDECECECECEBE9E9E9E8E8E7E7E7E7E5E5E5E4E4E3E3E3E1E0E0E0E0E0DEDEDEDDDDDDDCDCDCDCDADADADADADADAD9D9D9D9D8D8D7D7D7D7D6D6D6D6D6D6D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D6D6D6D6D6D6D7D7D7D2C9C9CACACBCECECFCFCFD5DACBC6C6C5C5C6C5C6C6C8C6C8C8C8C9C9C9C9CACAC9CACACAC9C9C9C9CACBCBCECECBCECFCFCFD0D0D1D5D3D3D5D6D5D5D5D7D6D6D5D5D5D5D5D6D7D7D7D9D9D9DADADADBDADADBDCDCDCDBDEDBDCDBDADBDCDCDEDEDBDBDADBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D6D6D5D7D7D6D7D9D9D9D9DAD9D9D7D7D7D7D7D7D7D7D7D7D9D7D5D3D3D3D3D3D3D0D0D1D1D0D0D0D0CFCECECECBCECECFCFCFCECBCECBC9CAC9C9C6C9C5C4C3C3C3C3C1C3C1BFC0BFBFBFBFBFBFBDBDBDBDBCBCBBBBB9B9B9B9B9B9B9B9B8B8B8B8B9B6B8B9B9B8B8B6B6B6B6B5B5B3B3B5B6B8B8B8B8B9B9B9B8B8B8B8B9B9B9BBBBBDBCBCBDBBBCBDBFBFBFBFC1C3C3C3C4C4C4C3C4C5C6C6C6C9CACACACBCECED0D1D1D1D1D1D1D1D1D3D1D5D5D7D7D7D9D9DAD9D9DADADADADBDBDBDEDEDCDCDCDCDCDCDCDCDEDEDEDEDEDEDEDEDEDCDEDEDEDEDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEF9B0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30700000000000000000000000000000000000000000000000000000000000000055A7778787A7A7B7C7D7E7F808283858688898B8D8F91929497999B9DA0A2A5A7AAACAFB1B4B7B9BCBEC1C4C6C8CBCDD0D2D4D7D9DBDDDFE1E3E5E7E9EAEBEDEEF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCDAD8D6D3D0CECCB9180000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEFEDECECECE9E8E8E7E7E7E5E5E4E4E3E1E0E0E0E0DEDEDEDDDDDDDCDCDCDCDCDCDCDCDCDADADADADADADADADCDCDCDCDCDCDCDCDCDDDDDDDEDEDEE0E0E0E0E1E3E4E4E5E5E7E7E7E8E9E9ECECECEDEFEFF0F0F0F1F3F3F5F5F5F6F6F7F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F8F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0EFEFEFEDEDECECECEBE9E9E8E8E7E7E7E7E5E5E5E4E4E3E3E1E0E0E0E0E0DEDEDDDDDDDCDCDCDADADADADADAD9D9D9D8D8D7D7D7D6D6D6D6D4D4D4D4D4D4D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D3D3D3D3D3D3D4D4D4C7B9B9BBBBBCBFBFBFBFBFC4CEBFB8B9B8B9BBBCBDBDBDBDBFBFC0C0C0C1C3C3C3C4C5C6C6C9CACAC9C9CACBCACBCBCBCECECFCFD0D0D0D0D1D0D1D1D5D5D5D5D5D6D6D7D9DAD9DADADADADADBDBDBDADADADBDCDCDEDEDEDEDEDEDEDCDCDBDCDEDEDFDFDFDFE1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D7D9D9D7D7D7D9DADBDBDBDBDBDADADAD9DAD9D7D7D7D6D6D7D6D6D5D5D3D5D5D3D1D0D0CFD0CFCFCFCFCECFCED0CFCECBCBCBCECECACBCECECBCBCACACACACACACAC9C9C6C6C6C6C5C5C5C5C3C4C1C1C0BFBFBFBFBFBFBDBDBBB9B8B9B8B6B6B6B6B6B5B5B5B5B5B6B6B5B3B3B2B2B1B1B1B2B2B2B3B3B3B3B3B6B6B8B8B8B8B8B8B9B9B9B9BBBBBDBFBFC0C1C1C1C0BFC1C0C0C0C1C1C3C3C3C5C4C3C3C4C4C5C5C6C9C6C8C9C9C9CBCECFD1D1D3D5D5D7D7D9DADBDCDCDCDEDEDFE1E1E3E3E3E3E3E3E3E3E3E4E3E3E3E4E4E3E3E3E4E3E3E3E4E4E4E4E4E3E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DA670F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC407000000000000000000000000000000000000000000000000000000000000000E697778787A7B7B7C7D7F808182848586888A8B8D8F91939597999C9EA0A2A5A8AAADAFB2B4B7BABCBFC1C4C6C9CCCED0D3D6D8DADCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1EFEEECEBEAE8E6E5E3E1DFDDDBD8D6D4D2CFCDCA300000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F6F5F5F5F3F3F1F0F0EFEFEDECECECEBE9E8E7E7E5E5E4E4E3E1E0E0E0DEDEDDDDDCDCDCDCDADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADCDCDCDCDDDDDEDEE0E0E0E1E3E4E5E5E7E7E7E8E9EBECECEDEDEFF0F0F0F1F3F3F5F5F5F6F6F7F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0EFEFEDEDECECECEBE9E9E8E8E7E7E7E5E5E5E4E4E3E3E1E0E0E0E0DEDEDDDDDCDCDCDCDADADADAD9D9D9D8D7D7D7D6D6D6D4D4D4D4D4D3D3D3D3D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECCCCCCCCCECECECECECECECED0D0D0D0D0D0D0D0D0D0D0D1CAC0C1C1BFC0C1C3C1C3C3C8D1C1BBBBBDBDBFBDBFBFC1C1C1C4C5C5C5C5C5C4C5C5C6C6C5C5C5C5C8C9C8C9C8C9C9CACACBCECECECFD0D0D0D1D3D3D3D3D3D5D6D6D7D7D7D7D9DADBDAD9DADADCDCDEDEDFDFDFDFE1DFDFE1E1E2E3E3E2E2E1DFDFE1E1E1E1E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EEEFEEEEEEECECECEEEEECEEEFEEEEECECECEEEEEEECEEECEBEBECEAE9E9E9E9E9E7E7E6E6E4E4E3E2E1E1DFDFDFDEDEE1DFDFDEDEDEDEDCDAD9D6D5D5D5D5D3D0D0D0CECBCBCACACAC9C9C6C6C4C4C3C3C3C3C1C1C0BFBFBDBDBBBBB9B9B8B8B8B8B8B8B8B8B6B8B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B8B8B6B6B6B9BBBBBCB9BBB9B9B9BBBBB9B9B9B9BCBDBDBFC0C1C0C1C1C1C3C3C4C4C5C5C6C9CACBCBCBCECED0D0D3D5D6D6D7D7D7D9D9D9DADBDBDBDBDBDBDCDEDEDFDFE1E1E3E3E3E6E6E6E4E6E6E4E4E4E6E7E7E7E7E9E9E9E9E7E7E7E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2DA470F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC407000000000000000000000000000000000000000000000000000000000000001C727778797A7B7B7C7D7F808183848587898A8C8E8F929396989A9C9FA1A4A6A9ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD2D4D6D8DBDDDEE1E3E5E6E8EAEBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EFEDECEAE9E7E5E4E2E0DDDCD9D7D5D2D0CECB580000000000000000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F6F5F5F5F3F3F1F0F0EFEFEDECECEBE9E8E7E7E5E5E4E3E3E0E0E0DEDEDDDCDCDCDADADADAD9D9D9D8D8D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D8D8D9D9DADADADADADCDCDCDDDEDEE0E0E1E3E4E4E5E7E7E7E8E9ECECECEDEFEFF0F0F1F3F3F5F5F5F6F6F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F1F0F0F0EFEFEDEDECECECEBE9E8E8E7E7E7E5E5E5E4E3E3E1E0E0E0E0DEDEDDDDDCDCDCDADADADAD9D9D8D7D7D7D6D6D4D4D4D4D3D3D3D1D1D1D0D0D0D0D0D0D0D0CECECCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCEC6BCBDBDBDBDC0C1C1C1C1C5D0C1BBBBBCBDBCBCBDBFBFBFC0BFC0BFC1C3C3C3C3C4C5C5C4C4C4C5C6C6C8C9C9C9CACBCBCFCFD0CFCFD0D0CFD0D0D3D3D3D5D3D5D5D6D5D5D6D6D6D7D6D7D7D9D7D9D9DADBDBDADADADBDCDEDEDFDEDFDFE1E1E1E1E2E3E2E3E4E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1DFDEDEDEDEDFDFDFE1E2E2E3E2E2E1E1E3E2E1E1E1E1E1E1E1E1DFDFDEDEDEDEDEDCDCDBDBDBDBDBDADADADAD9D7D7D7D7D5D3D5D3D3D3D1D3D1D1D3D1D1D3D1D0D0D0CFCECECBCACBCAC9C9C9C8C6C6C5C4C5C4C3C3C3C3C3C1C1C1C1C0C1C3C1C0C0BFBFBDBDBDBDBDBDBDBDBDBDBCBBBCBCBDBDBDBDBFBDBDBFBFBFBFC0C1C1C1C1BFC0BFC1C1C1C3C4C5C5C5C5C5C6C9C9C9C9C9C9CACACBCFCECECFD0D0D1D3D3D5D6D9D7D9DADBDCDCDEDEDFDFDEDFE1E1E2E1E2E2E3E4E6E6E9EAE9E9E7E6E6E6E6E6E7E9E7E7E9E9E9E9E9E7E7E7E7E9E9E9E9E9E9E7E7E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5BF3C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC400000000000000000000000000000000000000000000000000000000000000002B777778797A7B7C7D7E7F808183848687898A8D8E90929496989B9DA0A2A4A7A9ACAEB1B4B6B9BCBEC1C3C6C9CBCED0D2D4D7D9DBDDE0E1E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCDAD8D6D3D1CECC89000000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F8F6F6F5F5F5F3F3F1F0F0EFEFEDECECEBE9E8E7E7E5E4E4E3E0E0E0DEDDDCDCDADADADAD9D9D8D7D7D6D6D6D4D4D4D4D4D3D3D3D3D3D3D3D3D3D3D3D3D3D4D4D4D4D4D4D6D6D6D7D7D8D9D9DADADADCDCDCDDDEE0E0E0E3E4E5E5E7E7E8E9EBECECEDEFEFF0F0F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F1F0F0F0EFEFEDEDECECEBE9E9E8E7E7E7E5E5E5E4E3E3E0E0E0E0DEDEDDDDDCDCDADADADAD9D9D8D7D7D6D6D4D4D4D4D3D3D1D1D1D0D0D0D0D0D0CECCCCCCCCCCCCCCCBCBCBCBCACAC9C9C9C9C9C9C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C9C9C9C9C9CACACBCBCBBEB1B1B2B1B1B2B2B5B6B6BCC5B6B1B1B1B2B2B3B3B3B6B5B6B9B9BBBCBDBFC0C1BFC0C3C3C3C5C5C6C8C9C9CACBCACACBCECECECFD1D3D3D5D6D7D7D9DADAD9DADBDCDEDEE1DFE2E1E3E2E2E1E2E3E3E3E2E3E4E3E3E4E4E3E3E3E4E3E4E4E3E4E6E6E4E4E3E3E2E2E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E3E4E4E3E3E3E3E3E3E3E3E3E1E1DFDEDEDEDEDEDEDFDFDFDFDFDFDFDFE1E1E1E1DEDFDFDEDEDBDAD9DADADAD9D7D7D7D6D6D6D7D6D3D5D1D3D3D1D1D0CFCECBCACAC9C5C5C5C5C5C4C3C3C1C0C0BFBFBDBDBDBDBBB9B8B8B8B8B6B6B6B6B5B3B3B3B2B2B2B2B2B2B2B2B1B1B1B1B1B1B0B1B1B1B2B2B3B3B3B2B2B2B1B2B3B1B1B1B1B1B1B3B5B3B5B6B5B6B6B8B9B9B9BBBBBCBCBCBCBDBDBFBFC0C1C1C3C4C3C4C5C6C8C9C9CACECED0D0D0D1D1D1D3D5D5D5D7D6D7D9DADCDBDCDEDEE1E1E1E1E2E3E3E3E2E3E3E4E4E4E3E4E6E7E6E7E9E9E7E6E6E6E6E4E3E2E1E1E1E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2C8260F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000000000000000000047777878797A7B7C7D7E7F808283858688898B8D8F91939597999C9EA0A2A5A8AAADAFB2B4B7BABCBFC1C4C7C9CCCED0D3D6D8DADCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F5F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F1F0EEEDEBEAE9E6E5E3E1DFDDDBD9D7D4D2CFCDAA08000000000000000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEFEDECECE9E8E7E7E5E5E4E3E0E0E0DEDDDCDCDADAD9D9D8D7D6D6D4D4D4D3D3D3D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D1D1D1D3D3D3D4D4D4D6D7D7D8D9DADADADCDCDDDEE0E0E1E3E4E5E5E7E7E8E9ECECEDEFEFF0F0F1F3F3F5F5F5F6F7F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F0F0F0EFEFEDEDECECEBE9E8E8E7E7E7E5E5E4E3E3E0E0E0DEDEDDDDDCDCDADADADAD9D8D7D7D6D6D4D4D4D3D3D1D1D1D0D0D0D0CECECCCCCCCCCCCBCBCBCACAC9C9C9C7C7C7C7C7C7C7C7C7C5C5C5C5C5C5C5C5C5C5C5C5C5C5C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C5C5C5C5C7C7C7C7C7C7BAACAEAEAEB1B2B2B3B5B5BBC5B6B1B1B0B1B1B1B1B2B3B6B6B6B6B5B6B5B6B5B6B6B6B9B9BBBFBFBFBFBFC0C3C1C3C3C3C4C6C6C9C9C9C9CACACBCECECFD0D0D0D1D5D5D5D6D7D9D7D7D9D9D7D9D7D9DADADADADADADADADADADADADBDBDBDBDBDBDBDEDEDEDEDEDEDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDADBDBDBDBDADADAD9D7D7D9D9D7D7D7D7D7D6D7D6D6D6D5D5D5D3D3D3D3D0D0D1D0D1D1D0D0D0D0CECECECECFD0CFCFCFCBCBCACAC9C9C8C6C5C4C3C3C3C1C0BFBFBDBFBCBCB9B9B8B6B5B5B5B5B3B3B3B3B3B3B3B1B0B1B1B2B0B1B1B1B1B1B1B1B0B0B1B1B0B0B0AEAEAEAEAEB0AEAEACAEACACABABACACACACACACACACAAA8AAAAAAAAAAABACABACACACACAEB1B0B0B0AEAEAEAEAEB1B2B2B3B5B6B5B8BBBBBDBFBFBFBFC1C1C3C3C3C5C5C8CACBCBCECFCFCFCED0D0D1D0D1D1D1D3D5D6D6D5D3D5D5D7D7D7D9D9D9D9DADADBDCDCDEDFE1E1E1E1E2E3E4E6E6E4E4E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCAD1C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D00000000000000000000000000000000000000000000000000000000000000055E7778787A7A7B7C7D7F808183848586888A8B8D8F919396989A9C9FA1A4A6A8ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD2D4D6D8DBDDDFE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCD9D7D5D3D0CEC3180000000000000000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F5F3F3F1F0F0EFEFEDECECE9E8E7E7E5E4E3E1E0E0DEDDDCDADADAD9D8D7D6D4D4D4D3D1D1D0D0D0D0D0CECECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCECED0D0D0D0D1D1D3D3D4D4D6D6D7D8D9DADADCDCDDDEE0E0E1E3E4E5E7E7E8E9ECECEDEFEFF0F0F1F3F3F5F5F6F6F7F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0EFEFEDEDECECEBE9E8E8E7E7E5E5E4E4E3E1E0E0DEDEDDDCDCDCDADADAD9D8D7D7D6D6D4D4D3D3D1D1D0D0D0D0CECCCCCCCCCCCBCBCBCAC9C9C9C7C7C7C7C7C7C5C5C5C5C5C4C4C4C4C4C3C3C3C3C3C3C3C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C3C3C3C3C3C3C3C4C4C4C4C5BDB2B3B3B3B3B2B2B1B2B2B5BFB1AAAAAAAAAAABACAEAEB1B1B1B2B3B2B3B6B6B9B6B6B8B9B9BBBBBCBDBFBFC3C3C3C4C4C4C3C4C5C6C9C6C6C6C8C6C8C8CACBCACBCECFCFD0D1D3D3D1D1D3D5D3D3D5D6D7D7D9D7D7D6D6D7D7D7D7D5D5D7D7D7D7D9D9D9D7D7D7D7D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADAD9DADADADADADBDBDBDBDBDBDBDADADBDBDBDADADADADAD7D7D6D5D6D7D7D7D7D7D7D7D5D3D5D3D1D1D3D0D0D0D1D0CFCFCBCACBCECAC9C9CACAC9C8C6C6C5C3C3C3C3C1C0C0C0BFBFBFBFBFBFBDBDBBB9B8B8B6B5B5B2B3B2B5B3B1B2B1B1B0B0AEAEACACAEACACACABABAAAAAAAAAAAAA8AAA8A8AAA8A7A8A8A8A7AAA8AAAAA8A8A8AAABABAAABACB0B0AEB1B1B1B1B1B1B1B1B1B2B2B2B2B2B2B3B6B5B5B6B6B6B8B9B9BCBDBDBFC0C1C1C3C3C4C4C4C5C8C9C9C9CBCBCECED0D1D0D0D0D1D5D6D7D7DADADBDBDEDBDCDEDFE1E1E1E1E1DEDEDEE1E1E1E1E1DFE1E2E3E4E3E4E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6AD150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000000000000000000E6E7778797A7B7B7C7D7F808183848587898A8C8E90929496989B9D9FA2A4A6A9ACAEB1B4B6B9BCBEC1C4C6C9CBCED0D3D5D7D9DCDEE0E2E4E5E7E9EAECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F1EFEEECEBEAE8E6E5E2E1DEDCDBD8D6D3D1CFCD410000000000000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F6F5F5F3F3F1F0F0EFEFEDECECE9E8E7E7E5E4E3E0E0DEDDDCDADADAD9D7D6D4D4D3D3D1D0D0D0CECCCCCCCCCCCBCBCBCBCACACAC9C9C9C9C9C9C9C9CACACBCBCBCBCBCCCCCCCCCED0D0D0D0D1D3D4D4D6D6D7D9DADADCDCDDDEE0E0E3E4E5E7E7E8E9ECECEDEFEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEFEDECECECE9E8E8E7E7E5E5E4E3E1E0E0E0DEDDDCDCDADADAD9D9D7D7D6D4D4D4D3D3D1D0D0D0D0CECCCCCCCCCBCBCACAC9C9C7C7C7C7C7C5C5C5C5C4C4C4C3C3C3C1C1C1C1C1C1C1C1C1C1C0C0C0BEBEBEBEBEBEBEBEBEBEBDBDBDBDBDBDBEBEBEBEBEBEBEBEBEC0C0C0C0C1C1C1C1C1C1BDB6B9BBBBBBBBB9BBBBBBC1C8BBB2B2B1B1B1B1B2B2B2B5B5B5B6B8B8B8B8BBBBBBBBBDBDBFBFC0BFC0C1BFC3C3C1C4C5C5C6C8C6C8C9C9CACACBCFD0D0D1D1D0D1D0D3D3D3D3D3D5D3D3D6D7D9DADADBDAD9D9DADADAD9DAD9D7D7D7D7D9D9DADADADADADBDBDBDBDBDBDBDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E1E1E1E3E2E2E3E4E3E3E2E2E2E2E1E1E1E2E1E2E1E3E1E1E1DEDEDEDEDCDCDAD9D9D7D7D7D9DAD9D9D6D7D7D7D7D6D5D5D5D1D1D0D0D0CFCECBCBC9C8C8C9C5C6C4C4C3C1C1C1BFBFBCBCBBB9B8B6B5B5B2B2B1B1B0AEAEB0B0AEAEACACAEACACACACACACAAAAAAA8AAAAAAA8A8A7A8A7A7A7A7A7A7A5A7A7A7A7A8A8A8ACABABACABABACACACACAEAEAEAEAEB0B1B1B1B2B2B2B3B5B6B8B9B8BBBBBBBCBDBDBFC0C0C1C1C3C5C4C6C6C9C9CACACBCECBCFD1D1D1D3D3D3D3D5D7D7D7D7D9DADADADADADBDEDEDCDFDEE1E2E2E1E1E1E1E1E1E3E3E4E4E6E6E6E4E6E6E4E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9880F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000000000000000000021777778797A7B7C7D7E7F808183848688898B8D8F91939597999B9EA0A2A5A8AAADAFB2B4B7BABCBFC2C4C7CACCCFD1D3D6D8DADCDEE1E2E4E6E8EAEBECEEEFF1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F3F2F0EFEDECEAE9E7E5E4E1E0DDDBD9D7D4D2CFCD6A0000000000000000000000000000000000000000000000000000000000000035F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEFEDECECE9E8E7E5E5E4E3E0E0DEDDDCDADAD9D7D6D4D4D3D1D0D0D0CCCCCCCBCBCAC9C9C9C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C9C9CACBCBCCCCCCCED0D0D0D1D3D4D4D6D7D9DADADCDDDEE0E0E3E4E5E7E7E8E9ECECEDEFF0F0F1F1F3F5F5F5F6F7F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F3F3F3F1F0F0EFEFEDECECECE9E9E8E7E7E5E5E4E3E1E0E0DEDDDDDCDADADAD9D8D7D6D6D4D4D3D3D1D0D0D0D0CCCCCCCCCBCBCAC9C9C7C7C7C7C5C5C5C5C4C4C4C3C3C1C1C1C1C1C1C0C0BEBEBEBDBDBDBDBDBDBDBDBDBDBDBDBBBBBBBBBBBABABABABABABABABABABABABBBBBBBBBDBDBDBDBDBDBDBDBDBDBDBEB4A8A8A8AAAAAAABACAEB1B6BFB0ABAAA8ABACAAABACACABACACAEAEAEB1B1B1B2B2B3B3B6B8B9B9B9BBBCBDBFBFBFBFC0C1C1C3C4C5C6C6C8C8C9CACACBCECFD0D0CFD0D0D1D0D0D0D0D3D5D6D7D7D7D9DAD9D9D9DAD9DADBDADADBDEDCDCDCDBDBDEDEDEDEDEDEDFDFDFDFDFDFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1DFDFDFDFDFE1DFDFE1DFDEDEDEDEDEDEDEDBDCDCDCDEDCDBDCDBDAD9DAD9DAD9D7D7D6D7D7D6D5D5D5D6D6D3D5D3D1D3D1CFCECBCACACAC8C5C4C3C4C4C1C0BFBFBDBCBCBBBBBBB9B8B9B9B6B5B5B3B2B1B1B1B1B1B0AEACACACACACABA8A8A7AAA8AAA8AAAAA8A8A8A7A7A7A7A7A7A7A7A7A5A5A5A5A5A5A5A5A4A5A7A7A8A7AAAAAAAAAAAAABABABABABACACACACACAEAEB0B1B1B2B6B6B8B9BBBCBDC1C1C1C3C3C5C5C6C8C9C9C8CACACACBCBCECFD0D1D0D3D7D7D7D7D9DADCDEDEDEE1E1E1E1E3E3E3E3E3E4E6E6E7E6E7E7E7E7E7E7E7E7E7E9E9EAEBEBEBEEECECEEECEBEAE9E9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEA950F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6350000000000000000000000000000000000000000000000000000000000000038777878797A7B7C7D7E808182848586888A8B8D8F919396989A9C9FA1A4A6A8ABAEB0B3B6B8BBBDC0C3C5C8CBCDCFD2D4D7D9DBDDDFE1E3E5E7E9EAECEDEFF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCDAD8D6D3D0CE9A0000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F6F6F5F5F3F3F1F0F0EFEDECECE9E8E7E5E5E3E1E0DEDDDCDADAD9D7D6D4D4D3D1D0D0CCCCCCCBCAC9C9C7C7C7C5C5C5C5C5C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C7C7C7C7C9C9CBCBCCCCCED0D0D1D3D4D4D6D7D9DADCDCDDE0E0E3E4E5E7E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F6F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F3F3F1F1F0F0EFEFEDECECEBE9E8E7E7E5E5E4E3E1E0E0DEDDDCDCDADAD9D8D7D6D6D4D4D3D1D0D0D0CECCCCCCCBCBCAC9C9C7C7C7C7C5C5C5C4C4C3C3C1C1C1C1C1C0C0BEBEBDBDBDBDBDBDBDBBBABABABABAB9B9B9B9B9B9B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B9B9B9B9B9BABABABAB4ACACACABAEACAEAEAEB0B3BFB1A8A8AAABAEB0AEB1B1B1B2B1B1B1B2B2B2B5B5B3B3B3B6B9B8B9B9B9BBBBBDBDBFC0C0C1C4C4C4C5C5C6C6C8C9C9CBCECECECED0D0D1D3D3D1D3D5D6D7D7D9DADBDBDCDEDCDCDEDFE1E1E1E1E1DEDEDEE1E1E1E1DFDFE1E2E3E4E3E4E4E4E4E4E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F1EFEEEFEEEEEEECECECEEECEBECEEEEECEBEBEBECECECEAEBEBEAE9EAE9E7E6E6E6E4E3E3E2E2E1E1DFDEDEDBDBDADAD9D9DAD9D7D7D6D5D5D3D1CFCBCACAC9C9C8C5C5C4C3C1C0BFBFBFBCBBBBB9B6B6B5B3B3B2B2B1B1B0AEACACAAAAAAA8A7A7A7A5A5A5A5A5A4A4A4A4A4A4A4A4A4A5A4A4A2A2A4A4A4A2A2A4A4A2A2A2A5A5A5A7A5A5A5A5A5A5A5A5A5A5A5A7A8A8A8ACACACACACAEAEB0B0B1B1B2B3B5B8BBBBBBBBBCBDBFC1C3C5C5C6C8C9C9C9CACBCECECECED0D1D1D5D5D6D7D9D9DBDCDCDEDFE1E1E1E1E1E1E1E3E3E4E4E4E7E6E6E6E4E6E6E7E7E9E9E9E9E9E9EAEBEBEBECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3750F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61900000000000000000000000000000000000000000000000000000000000000557778787A7B7B7C7D7F808183848587898A8C8E90929496989B9D9FA2A4A7A9ACAEB1B4B7B9BCBFC1C4C6C9CBCED0D3D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEEDEBEAE9E6E5E3E1DFDDDBD8D6D4D2CFBD1900000000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECECE9E8E7E5E5E3E1E0DEDDDCDADAD8D7D4D4D3D1D0CECCCCCBCAC9C7C7C7C5C5C4C4C3C3C3C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C3C3C4C4C5C5C5C7C7C7C9CBCBCCCCD0D0D1D3D4D6D7D9DADADCDDDEE0E1E4E5E7E7E8E9ECECEDEFF0F0F1F3F5F5F5F6F7F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F3F3F1F1F0F0EFEDEDECECE9E8E7E7E5E5E4E3E1E0E0DEDDDCDADADAD9D7D7D6D4D4D3D1D0D0D0CCCCCCCBCBCAC9C7C7C7C7C5C5C4C4C3C3C1C1C1C1C1C0BEBEBDBDBDBDBDBDBBBABABAB9B9B9B7B7B7B7B7B7B7B7B6B6B6B5B5B5B5B5B5B5B5B4B4B4B4B4B4B4B4B4B4B4B4B4B5B5B5B5B5B5B5B5B6B6B6B7B7B7B7B7AFA5A7A7A7A8A8A7A8A8A8AEB6A7A2A1A2A4A4A4A4A5A5A7A7A8A7A7A7A7AAAAABACAEAEB0B1B3B5B5B3B5B8B9BBBBBDBFC1C3C4C4C5C6C6C9CACACACBCECECFD0D1D1D3D3D1D5D5D5D6D6D7D7D7D9DADADAD9D7D7D7D9D9D9D9DADAD9DADADADADBDCDBDBDBDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DEDEDEDEDEDEDFDEDCDBDBDADBDBDBDCDBDADADADADBDCDCDCDEDEDEDCDEDCDEDEDEDEDCDBDCDBDBDADADBDADAD7D6D6D5D3D3D1D0D0CFCECBCBC9C9C9C6C5C4C4C4C3C3C1BFBDBDBBBBB9B6B6B6B6B3B3B3B2B1B1B0B0AEAEAEACAAAAA8A8A7A7A7A7A7A5A5A5A2A29F9E9E9C9E9F9F9E9E9C9C9E9E9E9E9E9C9C9C9C9C9C9C9B9B9B9B9B9C9C9C9C9C9C9C9C9B9C9C9E9EA1A2A2A4A4A4A4A5A5A7A5A7A8A8A8A8A8AAABACACACAEAEAEB0B2B3B3B6B8B9B9BBBDBFBFC0C3C4C4C5C5C5C5C6C9C9CACBCECFCFD0D0D3D6D6D6D7D7D9DADBDBDBDCDEDBDBDBDBDCDCDCDCDEDEDEDCDBDBDBDBDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D75E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30F00000000000000000000000000000000000000000000000000000000000009697778797A7B7C7D7D7F808183848688898B8D8F91939597999B9EA0A2A5A8AAADAFB2B5B7BABDC0C2C5C7CACDCFD2D4D6D8DBDDDFE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCD9D7D5D2D0CE3900000000000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F6F5F5F3F1F0F0EFEFECECEBE8E7E7E5E3E1E0DEDDDCDAD9D7D6D4D3D1D0D0CCCCCBC9C9C7C7C5C5C4C3C1C1C1C1C0BEBEBEBEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEBEBEC0C1C1C1C1C3C3C4C5C5C7C7C9CACBCCCCD0D0D1D3D4D6D8D9DADCDDDEE0E1E4E5E7E7E8EBECEDEFF0F0F1F3F3F5F5F6F6F7F8F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F3F3F1F0F0F0EFEDECECEBE9E8E7E7E5E4E3E1E0E0DEDDDCDADAD9D8D7D6D4D4D3D1D0D0D0CCCCCCCBCAC9C7C7C7C5C5C5C4C4C3C1C1C1C1C0BEBEBDBDBDBDBBBBBABAB9B9B9B7B7B7B7B7B6B6B5B5B5B4B4B4B4B4B3B3B3B3B3B3B2B2B2B2B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B2B2B2B2B3B3B3B3B3B4B4B4B4AA9E9FA19F9F9F9FA1A2A2A7B0A29E9FA1A2A2A2A2A4A4A4A5A5A7A7A7A8A8A8ACACAEAEAEB0B1B1B1B2B3B3B6B9B9BBBCBFBFC0BFC0C3C4C6C6C8C6C9CAC9C9C9C9CBCED0CFCFD0D1D3D3D5D5D5D5D5D5D5D5D6D6D9D9DADCDCDCDADAD9DADBDBDAD9DADADAD9D9DADBDADADADADADADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADADAD9D7D7D7D6D5D5D5D5D5D5D3D3D1D1D0D0CFCFCFCFCECFCFCBCBCECFCFCBC9C9C8C8C8C9C9C9C6C5C5C4C3C1C1BFBDBCBDBBBCBBB9B9B9BBB9B8B8B6B6B5B3B3B2B2B1B0AEAEABAAABAAAAA8AAAAA7A8A7A7A7A7A5A7A4A4A2A2A1A29F9F9E9F9F9F9F9E9C9E9E9E9B9C9C9C9C9C9E9C9E9C9E9E9E9FA1A1A1A1A1A1A2A4A2A2A4A2A2A4A5A5A5A5A5A5A5A7A7A8A7AAAAAAABACACACAEB0B1B1B1B1B1B1B3B3B6B6B8B9B9BCBDBDC0C0C1C1C4C4C5C6C8C8C6C9CACECECFD0D3D3D5D6D9D9D9DADBDBDEDCDBDCDEDFE1DEE1E1E2E1E2E1E2E1E1E1E1DEDEDFE1DFDFDFDEDFDEDEDCDBDEDBDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDE620F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4070000000000000000000000000000000000000000000000000000000000001C777778797A7B7C7D7E7F8182838586888A8B8D8F919396989A9C9FA1A4A6A9ABAEB0B3B6B8BBBEC0C3C6C9CBCED0D2D5D7D9DCDDE0E2E4E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F1F0EEEDEBEAE8E6E5E2E1DEDCDBD8D6D3D1CE6A0000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECEBE9E7E7E5E4E1E0DEDDDCDAD9D7D6D4D3D0D0CCCCCBC9C7C7C5C5C4C3C1C1C1BEBEBDBDBDBDBBBBBABABABABABABAB9B9BABABABABABABBBBBDBDBDBDBDBEC0C1C1C1C3C4C5C5C7C7C9CBCCCCD0D1D3D4D6D7D9DADCDDDEE0E3E4E5E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9F9FAFBFBFBFBFBFBFBFBFBFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F3F3F1F0F0F0EFEDECECEBE9E8E7E5E5E4E3E0E0DEDDDCDADAD9D8D7D6D4D3D1D1D0D0CCCCCCCBC9C9C7C7C7C5C5C4C3C3C1C1C1C0BEBEBDBDBDBBBABABAB9B9B7B7B7B7B7B6B5B5B5B4B4B4B3B3B3B2B2B1B1B1B1B1B1B1B1B1AFAFAFAFAFAFAFAFADADADADADADADADADADADADADAFAFAFAFAFAFAFAFB1B1B1B1B1B1B1B1B0AAACACACAEACACAEACACB1B8AAA5A5A7A7AAA8A8ABABACB0B1B1B1B2B3B5B3B3B5B5B5B5B8B9BBBBBBBBBCBDBDBFBFBFBFBFBFC3C4C5C5C5C4C5C5C6C9C9C9C9CACBCBCECECFCECECFD0D1D3D1D1D3D1D1D3D1D3D5D3D3D3D5D5D5D3D1D1D0D0D1D3D3D5D3D3D3D3D3D5D5D5D6D7D7D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D6D5D3D5D5D5D3D5D5D3D5D5D5D5D5D5D5D3D3D5D5D5D5D6D6D3D1D1D1D0D1D0CFD0CFCECBCBCACACBCAC9C9C8C6C8C8C8C5C5C3C3C1C1C0BFBFBFBDBCBBB9B9B9B8B6B3B3B2B1AEAEAEACACACACACABABAAA8A7A5A7A7A7A5A5A2A5A4A29F9E9C9E9E9E9B9B9B9C9C9B9B9B9B99999797979797979797999797979796969696969496949693939697969697979797999B9B9B9B9B9B9B9C9C9C9E9FA19FA29FA2A2A4A5A7A5A7A7A8A8AAABACAEB0B0B0B0B1B1B1B3B3B6B8B9B9B9B9BBBBBCBCBDBFC0C1C4C5C4C5C6C9CAC9C9C9C9CACBCECFD0D0CFD0D0D0D0D0D0CFCFD0CFD1D0D0D3D3D5D5D5D6D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEA660F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA200000000000000000000000000000000000000000000000000000000000000387778787A7A7B7C7D7F808183848587888A8C8E90929496989B9DA0A2A5A7AAACAFB2B4B7B9BCBFC1C4C7CACCCED1D3D6D8DADCDEE1E2E5E6E8EAEBECEEEFF1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEAE9E7E5E4E1E0DDDBD9D7D4D2CFA4080000000000000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECECE9E8E7E5E4E3E0DEDDDCDAD9D7D4D3D1D0CECCCBC9C7C7C5C4C3C1C1C1BEBDBDBDBBBABAB9B9B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B9B9BABABBBDBDBEBEC1C1C3C4C5C5C7C9CACBCCD0D0D1D4D6D7D9DADCDDDEE0E3E4E5E7E8E9ECECEFEFF0F0F1F3F5F5F6F6F7F8F9F9F9F9FAFAFBFBFBFBFBFBFBFBFBFBFAFAF9F9F9F9F9F8F7F6F6F5F5F3F3F1F0F0F0EFEDECECE9E8E7E7E5E4E3E1E0DEDDDCDCDAD9D8D7D6D4D3D1D0D0CECCCCCBC9C9C7C7C5C5C4C3C3C1C1C1BEBEBDBDBDBBBABAB9B9B7B7B7B7B6B5B5B5B4B4B3B3B3B2B1B1B1B1B1B1AFAFAFAFADADADADACACACABABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABABABABABABABACACADADADADA89C9E9F9FA2A2A4A4A5A5AAB3A5A1A2A4A4A5A5A5A7A5A5A7A5A5A5A7A7A7A8ABABACACACAEB0B1B1B3B5B6B8B9B9BBBDBCBFBFBFBFC1C4C5C5C5C6C5C6C9CACACBCBCECECFD0D0D1D5D7D7DADADADADBDCDCDCDCDEDEDFDFE1E1E1E1E1E1E1E1E2E1E1E1E2E3E3E3E3E3E3E3E2E2E3E3E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E7E9E9E7E7E9E7E9E9E9E9E9E9E9EAEAE7E6E6E6E4E4E4E3E3E3E2E1E1E1DFDEDEDEDEDEDCDCDCDBDAD7D7D6D6D6D6D5D1D1CFCECACBCAC9C9C9C9C8C5C5C4C3C3C1C0BDBCBBBBBBB9B9B6B5B5B5B5B3B3B2B1B1B1B1B0B0AEAEACACABACAAA7A7A7A7A7A5A5A4A5A4A5A5A5A4A4A2A2A19F9F9F9E9E9F9E9E9E9F9F9F9F9C9C9C9E9E9F9F9F9FA19FA1A2A2A2A2A4A5A4A4A5A5A5A7A8AAAAABAAABABACACACACAEB1B1B2B2B2B6B6B6B9B8BBB9BCBDBFC0C1C1C1C4C5C5C6C6CACACACBCBCED0D0D0D1D1D5D5D5D5D5D5D5D5D5D5D3D5D5D7D7D7D7D9DBDADADADADBDEDBDBDADADADADBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7CF3C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000000000000000567778787A7B7B7C7D7F808183848687898B8D8F91939597999C9EA0A3A5A8AAADB0B2B5B8BBBDC0C2C5C8CACDCFD2D4D7D9DBDDE0E1E4E5E7E9EAECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F1EFEEECEBEAE8E6E4E2E0DEDCDAD8D6D3D0C61900000000000000000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDDDCDAD9D7D4D3D1D0CCCCCBC9C7C5C5C3C1C1C0BEBDBDBBBAB9B7B7B7B7B6B5B5B5B4B4B4B4B4B4B3B4B4B4B4B4B4B4B5B5B5B6B7B7B7B7B9BABBBDBDBEC0C1C3C4C5C5C7C9CBCCCED0D1D3D4D7D9DADCDDE0E0E3E5E7E7E8EBECEDEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9F9FAFAFBFBFBFBFBFBFBFBFAFAF9F9F9F9F9F8F8F6F6F5F5F5F3F1F0F0F0EFEDECECE9E8E7E7E5E4E3E0E0DEDDDCDADAD8D7D6D4D3D1D0D0CCCCCBCAC9C7C7C5C5C4C3C1C1C1C0BEBDBDBDBBBAB9B9B7B7B7B7B5B5B4B4B4B3B3B2B1B1B1B1B1AFAFAFADADADACACABABABABAAAAAAAAA9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A9A9A9A9AAAAAAAAA299999999979799999B9C9FA89B969797999999999B9B9B9B9C9B9C9C9E9F9FA1A2A2A2A4A5A7A8A8ACAEB1B1B2B5B6B8B8B9B9B9B9BCBDBFBFBFBFC1C3C3C4C5C6C8C8C9CACECECFD1D0D3D3D6D5D7D7D9DADADBDBDCDEDEDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E3E3E3E3E3E4E4E4E4E6E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E6E6E6E6E6E7E7E7E6E6E7E9E9E9E7E7E6E6E6E7E6E7E7E7E7E6E6E7E6E4E4E4E2E2E1E1DEDCDCDAD9D7D7D6D5D3D1D0CECBCAC9C9C8C6C5C4C4C1C1C0BDBDBBB9B6B6B6B5B3B1B0AEAEABABAAA8A7A5A5A5A5A2A2A19F9E9F9C9C9B9B9B9B9B9B999999999B9B9997979796969796969696949696979797979797979796969493939292929393929394949496979697979999999B9B9C9C9C9E9E9F9FA2A2A2A4A4A4A5A5A7AAAAACACB0B1B2B1B3B5B6B6B8BBBBBBBDBFBFC0C1C5C5C8C9C8CACBCBCED0D1D3D5D5D6D6D7D7DADADAD9D9D9D7D9D9DADBDBDBDBDBDCDCDCDBDBDBDEDEDEDEDEDFE1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3DA3F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C0000000000000000000000000000000000000000000000000000000000000E6E7778797A7B7C7D7E7F8082838586888A8B8D8F919396989A9C9FA1A4A6A9ABAEB0B3B6B9BCBFC1C4C6C9CBCED0D3D6D8DADCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F4F3F2F0EFEDECEAE9E7E5E3E1DFDDDBD9D7D4D2CF4200000000000000000000000000000000000000000000000000000000000019F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F7F6F5F5F3F1F0F0EFEDECECE9E7E7E5E3E0E0DDDCDAD9D7D4D3D1D0CCCCCAC7C7C5C4C1C1C0BDBDBBBAB9B7B7B7B5B5B4B4B3B3B2B2B1B1B1B1B1B1B1B1B1B1B1B1B1B1B2B2B3B3B4B4B5B5B7B7B7B9BABBBDBEC0C1C3C4C5C7C7CACCCCD0D1D3D4D7D9DADCDEE0E1E4E5E7E8E9ECECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9F9F9FAFAFBFBFBFBFBFBFAFAF9F9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E3E0E0DDDCDADAD9D7D6D4D3D1D0D0CCCCCBC9C7C7C5C5C4C3C1C1C1BEBDBDBDBBBAB9B9B7B7B7B6B5B4B4B3B3B2B1B1B1B1AFAFAFADADACACABABAAAAAAAAA9A9A9A8A8A8A8A7A7A5A5A5A5A5A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A5A5A5A5A5A7A7A8A2999B9B9B9C9C9C9F9F9FA5AE9F9B9B9B9B9B9C9C9C9C9C9C9C9FA19FA1A1A2A2A4A5A5A7A7A8AAACACACAEB0B1B1B2B2B5B8B9B9BBBBBDBFBFC1C1C1C3C4C5C6C9CACBCECFD0D1D0D1D5D5D6D7D9D9DAD7D7D7DADBDBDCDBDBDEDFE1E2E1E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E6E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EEEEEEECECECEEEEECEEEFEEEEECECECEEEEEEEBECECEAEAEBE9E9E9E7E7E6E4E4E3E3E2E2E1DEDEDEDBDBDBDADADAD9D7D7D6D5D3D3D0CECAC9C9C6C5C5C3C3C1BFBCBBBBB9B9B6B6B3B2B0AEAEACACAAABA8A7A5A5A2A2A2A19F9C9C9C9B9B9B9B9B9997979797979796969696969693939393939392929292929293939393939392929292929090909092939393979796979797979799979B9B9C9C9FA1A1A2A2A2A4A5A7A8ABACACAEAEB0B1B1B2B5B5B5B6B8BBBBBDBFC0C3C3C4C8C9CACBCED0D0D1D3D3D3D5D7D9DADBDCDEDEDEDFDEDFE1E3E3E3E4E4E4E6E6E7E9E9EAEBEAEBECEEECEEEEEFEEEFF1F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2DA3F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62C00000000000000000000000000000000000000000000000000000000000021777878797A7B7C7D7F808183848587898A8C8E90929496989B9DA0A2A5A8AAADAFB2B4B7BABDBFC2C5C7CACDCFD2D4D6D8DBDDDFE1E3E5E7E9EAECEDEFF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCD9D7D5D3D08400000000000000000000000000000000000000000000000000000000000007E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F3F1F0F0EFECECE9E8E7E5E4E1E0DEDCDAD9D7D4D3D1D0CCCBC9C7C5C4C3C1C0BEBDBBBAB9B7B7B5B4B4B3B2B1B1B1B1AFAFAFADADADADADADADADADADADADAFAFAFB1B1B1B1B2B3B4B5B5B7B7B9BABBBDBEC1C1C3C5C7C7CACCCCD0D1D4D6D7D9DADCDEE0E3E4E5E7E8EBECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9F9F9FAFAFAFBFBFBFBFAFAF9F9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E1E0DEDDDCDADAD8D7D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C1C0BEBDBDBDBABAB9B7B7B7B5B5B4B4B3B2B1B1B1B1AFAFADADACABABAAAAAAA9A9A9A8A8A8A7A5A5A5A5A4A4A4A4A3A3A3A3A2A2A2A2A2A2A2A2A2A2A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A2A2A2A2A2A2A2A2A2A3A3A3A3A49B909092929093949497979BA49790909393939393979797999999999B9B9B9C9C9C9C9F9FA2A4A5A5A5A5A7A8A8ABAEB0B2B2B3B5B8B8B8B9BBBBBCBFBFBFBFC0C3C3C3C5C5C5C8C8C8C9CBCECFCED0D0D1D1D3D3D3D3D5D6D5D6D7D9D9D9D9D9D9DAD9DADBDBDBDBDBDBDBDBDADAD9D9DADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDBDEDEDEDEDEDEDFDFDFDFDEDEDCDCDEDEDEDCDEDEDEDEDEDEDEDEDEDCDCDAD9D7D7D7D6D3D5D3D3D3D0D1D0D0CECBCACAC9C8C8C5C5C5C3C1BFBFBFBCBBB9B8B8B6B5B3B2B1B1AEACABABA8A8A8A5A5A5A5A4A2A1A1A1A1A19E9E9E9C9C9B9997979696969392909090908F8F8D8E8D8D8D8D8E8D8C8C8C8C8C8C8C8C8A8A8A8A8C8C8C8C8C8C8C8D8E8E8D8D8E8F8F9090929393939494949797979999999B9B9B9B9C9C9E9F9FA1A2A5A7A8A8ACACAEB0B1B2B3B5B6B6B9BCBCBDBFC1C3C4C5C8C9CBCFD1D3D5D7DADCDEDFE1E2E2E4E6E6E7E9E9E7EAE9E9EAE9E9EAEBEBEAEBEEEEEEECEEEEEFEFEFEEEFEFEEEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2DA400F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30F000000000000000000000000000000000000000000000000000000000000427778787A7B7B7C7D7F808183848688898B8D8F91939597999C9EA1A3A6A8ABAEB0B3B6B8BBBEC0C3C6C9CBCED0D2D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EFEDEBEAE9E6E5E3E1DFDDDBD8D6D4D1B608000000000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDDDADAD7D6D3D1D0CCCBC9C7C5C4C1C1BEBDBDBAB9B7B6B5B4B3B2B1B1AFAFADACACABABABAAAAAAAAAAAAAAAAAAAAAAAAABABABACADADAFAFB1B1B2B3B4B5B7B7B9BABDBDBEC1C3C4C5C7CACCCCD0D1D4D6D8DADCDDE0E0E3E5E7E7E9ECECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9F9F9FAFAFAFAFAFAFAF9F9F9F9F9F9F8F7F6F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E1E0DEDDDCDAD9D7D6D4D3D0D0CCCCCBC9C7C7C5C4C3C1C1BEBDBDBBBAB9B7B7B7B6B5B4B3B3B2B1B1B1AFAFADACABABAAAAAAA9A9A8A8A7A5A5A5A4A4A4A3A3A3A3A2A2A2A2A2A0A0A0A0A0A0A0A0A0A0A09E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0A09D949697979999999B9B9C9FA79B9797999B9B99999B9B999B9B9B9B9C9C9C9E9FA1A2A4A5A5A5A7A8A8AAABAEB1B1B1B3B2B5B6B8B9BBBCBCBDBFBFC0C4C3C5C5C8C9CACACBCBCED0CFD1D1D0D1D3D3D5D6D9D9D9DAD9DBDBDBDBDEDEDFE1E1E1DFDEDEE1E1E1DEDEDCDBDBDBDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E3E4E4E4E4E3E3E3E3E3E1E1E2E2E3E3E3E3E1E1E1E1E2E3E3E3E1E1E1E1DEDEDCDEDBDBDADBDBDADADAD7D6D5D5D3D0D0CECFCECACAC9C6C4C4C1BFBFBDBDBCBBB9B6B6B6B5B5B6B3B1B1B1AEACAAAAA7A5A5A5A4A2A29F9E9E9C9C9B9B9797969394949492908F8F8F8E8E8D8C8C8C8A8A8A8A8A89888988888988868685858685858685858385858583838382828384868685868787898988888C8D8E8E8F8F8F909090929396979797979B9B9C9C9EA1A1A4A5A5A7A8AAABACACAEB1B2B3B5B6B8B9BCBDBFC0C0C3C1C4C5C6C8CACBCECECBCFCFD0D1D0D0D1D3D1D3D3D3D5D6D6D6D6D6D7D9D9DAD9D9D7D9D7DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADAD43D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC407000000000000000000000000000000000000000000000000000000000005647778797A7B7C7D7E7F8082838586888A8B8E8F929496989B9D9FA2A4A7A9ACAFB1B4B7B9BCBFC1C4C7C9CCCED1D3D6D8DBDDDEE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCD9D7D5D2D0290000000000000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECE9E8E7E5E4E0E0DDDCDAD8D6D4D1D0CCCBC9C7C5C4C1C1BDBDBAB9B7B6B5B4B2B1B1AFADADABABAAA9A9A9A8A8A8A7A7A7A5A5A5A5A7A7A7A8A8A8A9A9AAAAABACADAFAFB1B1B3B4B5B7B7B9BABDBEC1C1C4C5C7CACCCCD0D1D4D6D9DADCDDE0E1E4E5E7E8E9ECEDEFF0F0F1F3F5F5F5F6F7F8F9F9F9F9F9F9FAFAFAFAFAF9F9F9F9F9F9F8F8F7F6F5F5F3F3F1F0F0EFEDECECEBE8E7E7E5E4E1E0DEDCDADAD9D7D4D4D1D0CECCCBC9C7C7C5C4C3C1C0BEBDBDBAB9B7B7B7B5B5B4B3B2B1B1B1AFADADACABAAAAA9A9A8A8A7A5A5A5A4A4A3A3A3A2A2A2A2A0A0A0A0A0A0A09E9E9E9E9E9D9D9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9D9D9E9E9E9F9E9E9C9B9C9C9EA19F9FA5A79E9B9B999B9B9B9B9C9C9C9E9F9FA1A2A2A5A5A5A5A7A7A7A8A8ACAEB0B1B1B1B2B2B3B3B5B6B6B9B9BBBCBCBFBFC1C1C1C3C3C4C5C6C9CAC9CACACBCBCECED0D0D1D1D0D1D6D7D6D7D6D7D9D7D7D7D7D7D7D7D7D6D6D6D7D7D9D9DADBDADADADADBDEDBDBDADADADBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D5D5D5D5D3D1D0D3D3D3D3D3D3D3D3D1D1D0D1D1D0D1D0D0D1D0D0D0D0CECBCAC9C8C9C9C6C5C4C4C3C1C1BFBDBDBCBBB9B9B6B6B6B3B2B1B2B1B0AEAEAEACABAAA8A7A7A7A5A4A4A4A19F9E9C9B9B9B99979797969290909090908F8E8E8D8C8A898A8A8A8A888989888888898986868686858585858585848282818181818080818182828383828383848383838385868689898889898A898C8C8C8E8E8E8F9092939396979799999B9B9B9C9CA1A1A2A2A5A7A7A7AAABACAEB1B2B2B5B6B9BBBDBFC1C1C4C5C5C6C8C9CACBCBCBCED0D1D3D5D6D7D7D7D9D9D7D9D7DADCDCDEDEDEDEDFDEDEDEDCDCDBDADBDBDBDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDED73F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000000000000013727878797A7B7C7D7F808183848587898A8C8E91929497999B9DA0A2A5A8AAADAFB2B5B8BBBDC0C2C5C8CACDCFD2D4D7D9DBDDE0E2E4E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEEDEBEAE8E6E5E3E1DEDCDAD8D6D3D16B0000000000000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F3F1F0EFEDECECE9E7E5E4E3E0DEDCDAD9D7D4D3D0CCCCC9C7C5C4C1C0BDBDBAB7B7B5B4B3B1B1AFADABAAAAA9A8A8A7A5A5A4A4A4A3A3A3A3A3A3A3A3A3A3A4A4A4A5A5A7A8A8A9AAABACADAFB1B1B3B4B5B7B7BABDBDC1C1C4C5C7CACCCED0D3D4D7D9DADCDEE0E3E5E7E7E9ECECEFEFF0F1F3F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F5F3F1F1F0EFEFEDECEBE8E7E7E5E4E1E0DEDCDADAD8D6D4D3D1D0CCCCCAC7C7C5C4C3C1C0BEBDBBBAB9B7B7B5B4B4B3B1B1B1AFADADACABAAAAA9A8A8A7A5A5A4A4A3A3A2A2A2A2A0A0A0A0A0A09E9E9E9D9D9C9C9C9C9A9A9A9A9999999999999998989898979797979797979797979797979797979797989898989899999999999A9A9A989493929292929290929297A1928D8E8F8F909090909294939497979B9B9B9B9B9C9C9FA1A2A2A2A4A5A5A7A8AAACACB0B1B2B1B3B5B6B6B8BBBBBBBDBDBFC0C1C5C5C5C8C6CACACACACFD0D1D3D3D5D5D3D5D9D9D9D7D7D6D5D6D7D9DADADADBDBDBDBDBDADADBDCDCDEDEDEDFE1E1E1E1E2E2E2E2E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E4E4E4E3E3E3E3E4E6E7E6E4E6E6E6E3E3E3E4E3E3E3E4E4E4E4E6E3E1E1E1E1DEDEDCDCDCDBDAD9D6D3D3D1D0CFCECECBCBC9C8C8C8C6C6C6C5C3C3C1C0BDBBB9B6B5B2B3B2B1B0ACAAAAAAA8A5A5A2A19E9C9C9C9C9B9797969493929292908F8E8D8D8C8C8A89898888898686858383838181818181817F7F7F7D7C7C7C7C7C7D7D7D7C7C7C7C7C7E7E7E81818181828181818181818283858484848486888888898A8C8C8D8E8F9090909093949797999B9B9C9F9FA2A2A4A5A7A8AAACAEB1B3B6B6B5B9B9BCBDBDBFC1C3C3C3C5C5C6C9CACBCBCECED0D1D3D3D5D3D5D5D7D7D7D7D7D7D7D7D7DADADADAD9D9D9D9D7D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDB4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000000000000000387778787A7B7B7C7D7F808183848688898B8D8F919396979A9C9FA1A4A6A9ABAEB0B3B6B9BCBFC1C4C6C9CBCED0D3D6D8DADCDEE1E2E5E6E8EAEBEDEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEBE9E7E5E4E2E0DDDBD9D7D4D2A600000000000000000000000000000000000000000000000000000000000023F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0E0DDDADAD7D4D3D0CECCCAC7C5C4C1C0BDBBB9B7B6B4B3B1B1AFADABAAA9A8A7A5A4A4A3A3A2A2A2A2A0A0A0A0A0A0A0A0A0A2A2A2A2A2A3A3A4A5A5A8A8A9AAABADAFB1B1B3B5B6B7BABDBDC1C1C4C5C7CBCCD0D1D3D6D8DADCDDE0E1E4E5E7E8EBECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F7F6F6F5F5F3F3F1F0F0EFEDECECE9E7E7E5E4E1E0DEDCDADAD8D6D4D3D0D0CCCBC9C7C5C4C3C1C1BEBDBBBAB9B7B6B5B4B3B1B1B1AFADACABAAAAA9A8A8A5A5A4A4A3A3A2A2A2A0A0A0A0A09E9E9D9D9C9C9C9A9A9A9A9999999898979797979795959595959595959595959595959595959595959595959595959595959595959595959595979797978F858888868686868989888C938783838383858385858686868989898988898A8C8A8D8F909293949497999B9B9E9FA1A2A5A5A5A7A7A7AAACACACB0B2B5B9B9BBBCBFC0C1C1C4C4C5C6C5C6C9CACBCECFCFD0D1D3D1D3D3D5D5D6D7D9D9DADBDBDCDEDEDCDEDEDEDEDEDEDEDFE1E1E2E1E2E3E2E2E3E3E4E4E3E4E4E3E3E3E4E4E4E6E7E7E6E6E4E3E3E3E4E4E4E3E2E1DEDEDEDCDCDBDEDCDCDEDCDBDBDADBDAD9D7D7D7D7D6D6D1D0D0CFCFCECACBC9C9C9C8C4C4C3C1C1C0BFBFBDBDBBBBB8B6B2B2B1B0ACACABA8A7A7A7A5A5A5A4A29E9C9C9B9B9797979493929090908F8F8E8C8D8D8C8C8A8A8A898889898987878786878789888888888888888886878686878684848484848382828282838384858585878787888888898A8A898C8C8C8D8E8E8F909290929392939496979797999B9B9C9CA1A4A5A5A7AAABACB1B2B3B3B6B8B9BCBDC0C1C4C4C5C5C6C9CBCBCFCFD1D1D3D3D6D6D7D7D7DAD9D7D9DADAD9DADADADADADBDCDEDEDEDCDFE1E1E1E1E1E1E1DFE1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62C000000000000000000000000000000000000000000000000000000000000567778797A7B7C7D7E7F8182838586888A8C8E90929496989B9DA0A2A5A7AAADAFB2B4B7BABDC0C2C5C7CACDCFD2D4D7D9DBDDE0E1E4E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEEDEBEAE8E6E5E2E1DEDCDAD8D6D3C821000000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFECECE9E7E7E4E3E0DEDCDAD9D6D4D1D0CCCBC7C5C4C1C0BDBBB9B7B5B4B2B1AFADABAAA9A8A5A4A4A3A2A2A0A0A0A0A09E9E9E9E9E9D9D9E9E9E9E9EA0A0A0A0A0A2A2A3A4A5A7A8A9AAABADAFB1B3B4B6B7B9BDBDC1C1C4C7C9CBCCD0D1D4D7D9DADCDEE0E3E5E7E8E9ECECEFF0F0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F5F3F1F0F0EFEDECECE9E8E7E5E4E1E0DEDCDADAD8D6D4D1D0CECCCBC9C7C5C4C1C1BEBDBBBAB7B7B6B4B3B2B1B1AFADACABAAA9A8A8A7A5A4A4A3A2A2A2A0A0A0A09E9E9D9D9C9C9A9A9A99999998979797979595959595959595959393939393939393939393929292929292929292929292929292929292939393939393939393939395958E86888788888989898A8C8E968C888888888A8C898C8C8C8D8E8E8F9090909293949696979797999B9C9E9E9FA2A2A5A5A8A8ABACACAEB0B1B2B3B2B5B6B9B9BCBFBFC1C1C3C5C5C5C6C6C9CACBCFD0D0D0D3D3D1D3D3D5D5D3D5D6D6D6D7D7D7D9D7D9D9D7D7D7D7D7D7D7D7D9D9D7D9D7D7D7D7D7D7D7D7D7D7D7D7D9D7D9DAD9D9DAD9D7D7D7D9DADBDBDBDBDBDADADAD9D9D7D7D7D7D5D5D6D5D3D3D1D1D1D1D1CFCECBCACAC9C9C9C8C6C8C6C6C5C5C3C1C1C0C1BFBFBFBFBDBCB9B9B8B6B5B5B2B2B1B0AEACABAAA8A7A5A4A2A19F9E9C9C9C9B999797969390908F8F8D8C8C8C8C8A88898987888886838381817F7F7E80817E7F807F7E7F817F8181817F7F7F7F7F7F7F7F7F818181818183838281838282818282828383838382818283858688888889888A8A8C8F909093949797999B9C9FA2A2A4A5A7A8AAACB0B1B2B5B5B6B9BBBCBDC0C1C4C5C5C9C9CACBCECFD0D1D3D5D6D7D9D9DADADADADADBDCDEDEDEDFE1E1E1E1E1E2E2E2E3E2E1E1E1E1E1E1E2E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9600F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30F00000000000000000000000000000000000000000000000000000000000E727878797A7B7C7D7F808183848587898A8D8F91939597999C9EA1A3A6A8ABAEB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DADCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E4E1E0DDDBD9D7D4D263000000000000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBF9F9F9F8F8F6F5F5F3F3F1F0EFEDECEBE8E7E5E4E0E0DDDADAD7D4D3D0CCCBC9C7C4C1C1BDBBB9B7B5B4B1B1ADACAAA9A8A5A4A3A2A2A0A0A09E9D9D9C9C9A9A9A9A9A9A9A9A9A9A9A9C9C9C9D9E9EA0A0A0A2A2A3A4A5A8A9AAACAFB1B2B4B6B7B9BDBEC1C3C5C7C9CCCED0D3D4D7DADCDDE0E1E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F6F5F5F3F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDDDADAD8D6D4D1D0CCCCCAC7C7C5C3C1C0BDBDBAB9B7B6B4B3B2B1AFADACABAAA9A8A7A5A4A4A3A2A2A2A0A0A09E9E9D9C9C9A9A9A9999989897979795959595959595939393939393929292929291919191919191919190909090909090909090909090909090909090919191919191919192929292908D8C8D8C8C8D8D8E9090969B8E8C8C8A8D8D8D8C8E8E8E8F8F90909092939394969797999799999B9B9B9B9C9FA1A2A2A4A4A5A7A8AAACACAEB1B2B2B5B8B6B9BBBDBFBDBFBFBFC1C3C4C5C6C6C9C9CACBCFCFD0D0D0D1D5D6D6D5D7D6D7D7D7D7DADADBDBDADAD9DAD7D7D7D7D7D7D6D6D6D5D3D5D5D6D9D9D9D9D9D9D9D9DADADAD9D7D7D9D7D7D7D7D9DADADADADADAD9D7D7D7D7D7D7D5D3D3D1D0D0CFD0D0CECECECECECECBCBCAC8C8C8C6C4C3C3C3C1C0BFBDBBB9B8B6B5B3B2AEAEAEACAAAAA8A8A5A4A4A29F9F9F9E9E9E9B9B9B979696969290908F8D8C8C8A8A898988868683838383838381818181817F7F7F7D7E7D7C7C7C7D7C7C7C7C7C7C7B7B7C7C7C7C7B7B7B7B7B7B79797B7B7C7D7D7D7D7E7E7D7C7E7E7E8181818183818383838386888989888C8D8E8F8F90909292949797999B9C9EA2A2A5A7AAACACAEB0B1B1B2B5B6B8BBBCBFC1C1C5C5C8C8C9CACBCECFD0D0D1D3D3D5D6D7D7D9D9DAD9DBDBDCDEDCDBDCDEDEDBDEDEDEDEDEDEDEDEDEDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB90000000000000000000000000000000000000000000000000000000000002F7778787A7B7B7C7D7F808183848688898B8D8F919396989B9D9FA2A4A7A9ACAFB2B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DBDDDFE1E4E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCDAD8D5D39600000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD9D6D4D1D0CCC9C7C5C3C1BDBDB9B7B5B3B1B1ADABAAA8A7A4A3A2A0A0A09E9D9C9A9A9999999897979797979797979797989999999A9A9C9D9EA0A0A2A2A3A4A7A9AAABADB1B2B4B6B7BABDBEC1C3C5C7CACCD0D1D4D6D9DADCDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F5F3F1F0F0EFEDECECE9E7E7E5E3E0E0DDDCDAD8D6D4D1D0CCCCC9C7C5C4C3C1BEBDBBB9B7B6B5B3B2B1AFADABAAA9A8A8A5A4A4A3A2A2A0A0A09E9E9D9C9A9A99999998979795959595959593939393939292929291919191919090909090908F8F8F8F8F8F8F8F8F8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8F8F8F8F8F8F8F8F9090909088828282818383838488888A90837F81818181838586878888898A8A8A8D8F8F909093939697999B9C9EA1A2A4A4A7A7A8ACACAEB0B0B1B2B6B8B9BBBBBDBDC0C3C4C5C8C9C9CACECED0D1D5D5D6D6D6D7D7DADADCDCDEDFDFE1E2E3E3E4E3E6E6E6E6E6E6E6E4E4E6E6E7E7E7E9E9E9E9EAEAE9E9EAE9E9E7E7E7E7E9E9E7E7E7E7E6E6E4E4E3E2E2E2E1E1E1E1DFDEDEDCDEDBDBDADADBD9D7D9D7D7D6D6D6D6D7D5D5D5D3D1D3D0D1D0CECBCACAC9C6C5C5C5C4C3C3C1BFBFBFBCB9B6B3B2B1B1B0ACACABA8A7A4A4A2A4A19F9E9C9C99979797949392928F8E8E8E8D8C8C8888868686878583818281818081817F7E7C7D7D7D7C7C7C7C7C7B7B7B7C7D7C7C7C7B797A7A797979797979797C7B7C7C7D7C7C7C7C7E7D7D7E7E7E7D7F7E7E7F7F818282828385888989888A8C8D8E909090929494999B9B9B9C9EA2A2A5A7A8ABABAEB1B3B8B9BBBBBDC0C3C4C5C8CACACBCBCFD1D1D3D5D5D7DADADBDBDCDEDEDFDEDFDEDFE1E1DFDFE1E1E1E1E1E1E1E1E2E2E2E2E2E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3880F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000000000000000567778797A7B7C7D7E7F8182848586898A8C8E90929497999B9EA0A2A5A8AAADB0B3B6B8BBBDC0C3C6C9CBCED0D3D5D7D9DCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E4E1DFDDDBD8D6D4CA19000000000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFECECE9E7E7E4E1E0DDDCDAD7D4D3D0CCCBC7C5C4C1BEBDBAB7B5B4B1B1ADABA9A8A5A4A2A2A09E9D9C9A9A9998979795959595959595959595959595959595979798999A9A9C9EA0A0A2A3A4A5A8AAABADB1B2B4B6B7BABDBEC1C4C7C9CBCCD0D3D4D8DADCDEE0E3E4E7E7E9ECECEFF0F0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F8F8F7F6F6F5F5F3F3F1F0EFEFECECE9E8E7E5E4E1E0DDDCDAD9D6D4D3D0CCCCC9C7C5C4C1C1BDBDBAB7B7B5B4B2B1AFADABAAA9A8A7A5A4A3A2A2A0A09E9E9D9C9A9A999998979795959595959393939392929291919191909090908F8F8F8F8F8D8D8D8D8D8D8D8D8D8D8D8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8D8D8D8D8D8D8D8D867E7E7F7F818180818181838C817C7E7E7F8081818283838386888A8A8A8A8C8D8D8D8D8E90929393939699999B9B9C9E9EA1A1A2A4A5A7A8ABACB0B1B1B2B3B3B6B8B9B9BBBDBDBFBFBFC1C4C4C5C6C8C9C9CBCECFCFD0D0D0D0D1D5D3D5D6D7D6D7D5D7D9D9DADAD7D9DADAD9D9DADADADAD9D7D7D7D6D5D5D6D7D7D7D6D6D5D3D1D1D0D0D0D1D1D3D3D1D1D1D3D3D1D0D0D0D0CFD0D0D1D0CECFCECBCACAC9C6C6C8C5C5C4C4C5C5C5C3C3C3C1C0BDBDBDBBBBB9B8B6B5B1B1B1AEAEAEACACAAA8A7A5A5A4A2A2A19E9C9B999B97979694949392908F908F8D8A8C8C8A8A8988888986888787878787868485838485838382828281818281818180808081818181807F80818080818181818181817E818181818181818383848483858687868688878988898A8A8C8D8E8F90909294949697999B9C9C9C9E9FA2A5A4A7A8ABABAEAEB1B1B2B5B6B6B8BBBDBFBFC0C1C4C4C5C5C6C9C9C9CBCECFCFD1D3D5D7D6D7D9DADBDCDCDEDEDCDCDCDEDEDCDEDEDFDFDFE1E1DFDFE2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E18F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000000000000E6E7878797A7B7C7D7F808183848688898B8D8F919395989A9C9FA1A4A6A9ABAEB1B4B7B9BCBFC1C4C7CACCCFD1D4D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCD9D7D5D35300000000000000000000000000000000000000000000000000000000000FE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECEBE8E7E5E4E0DEDCDAD9D6D4D1CECCC9C7C5C1C0BDBAB7B6B4B1B1ADABA9A7A5A3A2A0A09E9C9A9998979595959393939393929292929292929293939393959595959798999A9C9EA0A0A2A3A5A8A9ABADB1B2B4B7B9BBBDC1C3C5C7CACCD0D1D4D7D9DADDE0E0E4E5E7E8ECECEDEFF0F1F3F3F5F5F6F7F8F8F8F9F9F9F9F9F9F9F9F8F8F8F6F6F5F5F5F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDCDAD9D7D4D3D0CECCC9C7C5C4C1C0BDBBB9B7B6B4B3B1B1ADABAAA9A8A5A4A3A2A2A0A09E9E9C9C9A999998979595959593939393929292919191909090908F8F8F8D8D8D8D8D8D8D8D8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8989898989898989898888888888898989898989898B8B8B8B8B8B8B8B8B8B867E7D7D7E7F7E8180808081897F79797B7A787B7C7C7C7C7C7C7C7D7F81818383838385878988898C8E8F90929394969697999B9B9E9E9FA1A2A4A5A5A7AAAAAEAEAEB1B3B5B5B6B6B9BBBDBDBDC0C0C3C4C5C6C6C6C8C9C9CBCBCECFD0D1D1D0D1D3D3D5D3D3D5D6D5D5D5D3D5D6D7D7D7D7D7D9D9DAD9D9D7D9D9DADADADADAD9D9D9D7DADADADAD9D9D9D7D6D6D7D7D7D9D9DADADAD9D9D6D6D7D7D7D7D7D5D5D5D1CFCECBCBCBCBC9C8C6C8C5C5C4C3C0BFBDBBB9B8B6B5B5B3B2B2B1AEACAAA7A7A5A4A29E9F9C9C9997979794929290908E8E8D8C8A8A898686858582828181817F7E7E7D7C7D7C7B7B7978797877777776777575757372737272727170706F6F6E6E6E6E6E6E6E6F6F6E6E6F72727070706F706F7272747473747475757575747576767778787B7B7D7F81818285848689888C8D8E8F90909296979B9C9FA2A4A7A7A8ACAEB0B3B5B6B8B9BBBFBFC0C1C4C6C9CACACED0D0D1D0D5D7D7D7D9DBDBDCDEDFE1E1E2E3E3E6E4E6E6E7E9E7E7E7E6E6E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E18E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED190000000000000000000000000000000000000000000000000000000000267778797A7B7C7D7E7F8082838586888A8B8E90929496989B9DA0A2A5A8AAADAFB2B5B8BBBDC0C3C5C8CBCDD0D2D5D7D9DCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDBD8D6D497000000000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F1F0EFEDECE9E8E7E5E3E0DEDCDAD8D4D3D0CCCBC7C5C3C1BEBDB9B7B4B2B1ADABA9A7A4A3A2A09E9C9A999897959593939292919191909090909090909090919191919293939395959798999A9D9EA0A2A3A5A8A9ABADB1B3B5B7B9BDBEC1C4C5C9CBCCD0D3D6D8DADCDEE0E3E5E7E8EBECEDEFF0F0F3F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F8F8F7F6F5F5F5F3F3F1F0EFEFECECE9E7E7E5E3E0DEDDDADAD7D4D3D0CECCCAC7C5C4C1C0BDBBB9B7B5B4B2B1AFACABA9A8A5A4A3A2A0A0A09E9C9C9A9998979795959593939392929191919090908F8F8F8D8D8D8D8D8D8B8B8B8B8B8B8B8B8B8B8989898988888888888888888887878787878787878787878787878787878787878787878788888888888888888C8C8C8C8C8D8C8D8D8D8E9090898A8A898889898889888A898D8C8C8E8F9090909090929394969797999B9B9C9E9FA2A2A5A5A5A7A8A8ABAEB1B2B3B5B6B6B8B9B9BBBDBDC0C1C3C4C5C6C6C9CAC9CACACBCED0D1D3D1D1D3D3D5D6D6D7D7D9D9D7D9DBDBDBDCDBDCDCDBDADBDADAD9D9D9D7D7D7D9DADADADADBDADADADADBDEDBDBDADADADADADADADAD9D9D9D7D7D7D7D7D6D6D5D3D3D1D0CFCFCFCBC9C8C9C9C9C8C6C5C5C5C3C1BFBFBFBDBDBCBBBBB9B9B6B5B2B1AEABAAA8A8A5A4A2A19F9C9C9B9797969492908F8F8E8C8A8A8A8A87868786858382818080817E7D7E7D7C7C7878777778777777767573737373737572727171716F6F6F71727272727071727272727171717171717273737372727271717171707272747577777777767778787878797B7C7D7E7F81818283858688888A8C8D8F929396979B9C9C9FA1A4A4A7A7A8ACACB0B1B3B6B8B9BBBCBDBFC3C4C5C6C8C9CACED0D0D1D3D5D5D6D5D7D7D9D7D7D9DBDBDBDCDEDEDEDEDEDEDCDCDBDCDEDEE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7A9140F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4000000000000000000000000000000000000000000000000000000000000517778797A7B7C7D7F808183848587898A8D8E91939597999C9FA1A3A6A9ABAEB0B3B6B9BCBFC1C4C7C9CCCED1D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCD9D7D5CA19000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F8F6F5F5F3F1F0F0EFEDECE9E7E7E4E1E0DDDAD9D7D4D1D0CCC9C7C4C1C0BDBAB7B5B3B1ADABA9A7A4A3A2A09E9C9A98979595939392919190908F8F8F8D8D8D8D8D8D8D8D8F8F8F90909191929393959597999A9C9EA0A2A3A5A8AAABAFB1B3B5B7BABDC0C3C5C7CACCD0D1D4D7DADCDDE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F5F6F7F8F8F8F9F9F9F9F9F9F8F8F7F6F6F5F5F5F3F1F0F0EFEDECEBE8E7E5E4E1E0DDDCDAD8D6D4D1D0CCCAC7C5C4C1C0BDBBB9B7B5B3B1B1ADABAAA8A7A4A3A2A0A09E9D9C9A9998979595959393939292919190908F8F8F8D8D8D8D8D8B8B8B8B8B8B8B8B898989888888888888878787878787878786868686868686868686868686868585858585858585858686868686868686868686868787847C7B7B7C7C7D7C7D7D7F828A7E78787B7B7C7E7E7F7E7F8080818383858586888A8A8C8D8E8F9092939393969697979799999C9E9FA1A2A4A5A7AAAAABAEB1B1B2B5B8B9BDBCBFBFC0C1C5C5C6C9C8CACACBCED0D0D1D3D5D5D7D7D9D9D9DAD9DBDBDADBDBDBDEDEDFDFDFDFDEE1E1DEDFE1E1E2E2E2E2E1E1E1E2E2E1DFDEDEDBDBDBDEDEDEDEDEDEDCDCDCDBDBDADBDBDCDCDCDCDCDBDBDADCDBDADADADADADAD9D7D6D5D3D1D0CECECECBCBCAC9C8C4C4C3C1C0C1C0BDBBBBB9B6B3B2B1B1ACABAAA8A8A7A7A5A4A1A19F9C9B99979797939292908E8D8C8A89898987878583838383838382818181817E7D7D7C7A797B79797978777877787777767575747575757372727272727373737373737272727373727373737573757573737675757775767678777777777877787B7C7D807F808183858889898D8F90929496979B9B9C9FA1A2A5A7A8AAACAEB1B1B3B5B8BBBCBDBFC1C3C3C4C4C5C8C9C9CACBCBCED0D0D0D1D0D1D3D3D5D5D5D6D7D7D7D6D7D7D7D7D6D6D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFB7150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000000000000000096E78787A7A7B7C7D7F8081838586888A8B8D8F929496989B9D9FA2A5A7AAADAFB2B4B7BABDC0C2C5C8CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDBD8D6D46400000000000000000000000000000000000000000000000000000000002CF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFECECE9E7E5E4E0DEDCDAD9D6D3D0CCCBC9C5C3C1BDBBB9B6B4B1AFACAAA8A5A3A2A09D9C9997959593939291908F8F8D8D8D8B8B8B8B8B8B8B8B8B8B8B8B8D8D8D8F909091929393959598999C9EA0A2A3A5A8AAACAFB2B4B7B9BDBEC1C4C7C9CCCED1D4D7D9DADDE0E1E4E5E7E9ECECEFF0F0F1F3F5F5F5F6F7F8F8F8F9F9F9F9F9F8F8F8F7F6F6F5F5F3F3F1F0EFEFECECE9E7E7E5E3E0DEDCDAD9D7D4D1D0CCCBC7C5C4C1C0BDBBB9B7B5B3B1AFADAAA9A8A5A4A2A2A09E9D9C9A999797959593939292919190908F8F8D8D8D8D8B8B8B8B8B8B8B89898888888888878787878787868686868686868685858585858585858585858484848484848484848484848484848484848484848485858585858585847E807F7E7F808181817F828A7E7C7B7B7B7C7C7E7F818181818282858688888988898A8C8C8C8C8D8E8F9092939494979B9B9B9C9FA1A1A2A4A5A7A8ABABAEB1B1B2B3B6B8B9BBBDBFC0C3C5C4C6C9C8C9CACBCFD0D3D3D6D9DADADADADADADADCDBDCDBDBDBDEDFE1DFE1E1E1E1E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E3E3E4E4E4E4E4E6E6E6E7E6E6E4E3E3E3E3E2E2E2E1E1E1DFE1DEDFDEDCDEDCDADAD9D7D6D5D1D1D0CECBCAC9C8C8C8C4C3C3C1BFBBB9B6B5B3B0AEAAA8A7A5A4A29F9C9C9C9B99979492908F8E8C8D8C8C89898789858383818381817F7E7E7C7C7B7B78797977767776777776757375737373737272727272727272727272716F706F70706F717071717271717171707170727272727272737575757575777778787B7B7C7C7E7F8081828585888A8A8C8D8D8E8F9090929394979B9C9E9FA2A4A5A7AAAEB1B2B3B8B8BBBDBFC0C3C3C5C6C9CACBCECFD0D0D1D5D6D7D7D7D9D9DADADBDEE1E1E1E1E1E1E1E3E3E2E2E3E3E3E3E3E2E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBD3270F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000000000000000000000000000000000000000000000000000000000307778797A7B7C7D7E7F8182848587898A8C8E91929497999C9EA0A3A6A8ABAEB0B3B6B9BCBEC1C4C6C9CBCED1D3D6D8DBDDDFE1E3E5E7E9EAECEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCD9D7D5A8000000000000000000000000000000000000000000000000000000000007E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECEBE8E7E5E3E0DEDCDAD8D4D3D0CCCAC7C5C1C0BDBAB7B5B3B1ADAAA8A5A3A2A09D9A99979595939291908F8D8D8D8B8B8B8B898988888888888889898B8B8B8B8D8D8F8F90919293959597999C9EA0A2A3A5A9ABADB1B3B5B7BABDC1C3C5C7CBCCD0D3D6D9DADCDEE0E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F9F9F9F8F8F8F7F6F6F5F5F5F3F1F0F0EFEDECEBE8E7E5E4E1E0DDDCDAD7D4D3D0CCCBC9C7C4C1C0BDBBB9B7B5B3B1AFACAAA9A7A4A3A2A09E9D9C9A99979595959393929191908F8F8D8D8D8D8B8B8B8B8B898988888888878787878786868686868585858585858585848484848483838383838383838383838383838383828282828282828282828282828383838383838383837D767676777878777878787C84797574757575737575777776787A7B7B7D7F7F8181828383858688898A8C8C8E9092969797999B999C9C9E9EA1A4A5A5A7AAABABACACAEB1B2B5B6B8B9B9BCBDC1C3C5C6C9CACBCED0D1D3D6D9DADADADBDCDEDEDFE2E2E3E2E2E3E3E3E3E4E3E3E4E4E4E3E3E3E4E3E3E3E4E4E4E4E4E3E3E3E2E3E2E1E2E2E2E1E2E2E2E1E1E1E1E1E1E1E1DEDEDEDCDBDADBDADAD9D9D7D3D1D0CECBCACACACACAC9C5C4C4C4C1C0BFBCBBB9B6B5B3B2B0ACABA8A7A5A5A2A29E9C9C9B9794939292929290908E8C8A88898684838382817F7E7D7C7B7878787776757675757373737272727373727272716F6F6E6E6D6E6E6E6E6E6E6D6D6D6E6F6F6F6F6E6F6F6F6F6F6F706F71717170707072727272717171727273767677777776787978787A7A7C7B7D7E7F8181818387898A8C8D90929294979B9B9EA2A4A5A7A8AAACAEAEB1B2B3B5B8B9B9BCBDBFC0C1C3C4C6C9CAC9CECECECECFD0D1D1D3D3D3D3D5D6D7D7D7D7D9D7D7D7D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDED72F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30F0000000000000000000000000000000000000000000000000000000000567878797A7B7C7D7F808183848688898B8D8F919396989A9C9FA1A4A7AAACAFB2B4B7BABDC0C2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDBD8D6D3220000000000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECE9E8E7E5E3E0DDDCDAD7D4D1D0CCC9C7C4C1BEBBB9B6B4B1AFABA9A7A4A2A09E9C999795939291908F8D8D8B8B8B8988888787878787868687878787878888898B8B8B8D8D8F909293939597999C9EA0A2A4A7A9ABAFB1B4B7B9BDBEC1C4C7CACCD0D1D4D7DADCDEE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F8F8F7F6F6F5F5F3F3F1F0F0EFECECE9E8E7E5E3E0DEDCDAD9D6D4D1D0CCCAC7C5C3C1BDBBB9B7B5B3B1AFACAAA8A5A4A2A0A09E9C9A999795959393929191908F8F8D8D8B8B8B8B8B898988888887878787868686868B8B8B8B939696939B9EA0A0A0A0A0A0A0A0A0A09E9E95939393939089898682828282828080808080808080808080808080808080808282828282827E7C7C7E7E7E7E7F818185897D797A7C7C7C7C7D7D7D81808182838384838486858889898A8D8E8E909093949496979B9B9C9E9F9F9FA1A5A5A7AAACAEAEB2B3B6B6B8BBBDBDC1C0C1C3C4C6C9C9CACBCECED0D0D1D1D1D3D3D3D3D5D7D7D7D7D6D9D7D7D7D9DAD9D9DADADADADADCDCDEDCDEDEDEDEE1DFDFDFDEDEDEDEDEDEDEDEDFDFDFE1E1DEDEE1E1DEDCDBDBDBDBDBDADADADAD7D5D5D6D7D6D5D3D1D1D0CECECBCAC9C9C9C5C3C3C1C1BFBDB9B8B6B5B5B5B1B0ACABA8A7A7A5A4A29F9E9B9B999796949392928F8D8D8C8C8C89878685838181817E7D7D7C7D7B7B7B78797981858A909799979DA5A5A5A5A5A5A5A5A5A5A5A5A59F9695969087837A746F707070727272707070727072727272727273747676757575777777777878787878787A7B7A7C7C7E7F7F81818285858688898A898C8D8E90929397979B9B9C9FA2A5A7A8ABABB0B1B1B5B6B8BBBDC0C1C4C5C9C9CACBCECECFCFD0D0D0D3D5D5D5D6D7D6D9D7D9D9D9D9D9DBDBDBDBDEDEDCDBDBDBDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2DB400F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB90000000000000000000000000000000000000000000000000000000000137278797A7B7C7D7E7F8082838586888A8C8E90929497999B9DA0A3A5A8ABAEB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCD9D7D56E00000000000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECE9E7E7E4E1E0DDDAD9D6D4D0CCCBC7C5C3C1BDBAB7B5B2B1ADAAA8A4A2A09E9C999795939291908F8D8B8B8B888887878686868585858585858585868686878788898B8B8B8D8F9091939395979A9CA0A0A3A5A8AAADB1B3B5B7BABDC1C4C5C9CCCED1D4D7DADCDDE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F5F6F7F7F8F8F8F8F8F8F8F7F7F6F5F5F5F3F3F0F0EFEDECEBE8E7E5E4E1E0DDDCDAD7D4D3D0CCCBC7C5C3C1BEBDB9B7B5B3B1AFABAAA8A5A3A2A0A09D9A999795959393929190908F8D8D8B8B8B8B8989888887898D929699A1A1AAAAAEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A8A89F9E919187868080808080808080808080808080808080797272727272717172727275796F696A6C6D6D6F6E6E6F6F6F7072727575767778777777787A7B7C7D7F8081818283868789888C8E8F909093969797979B9C9E9FA2A4A5A5AAAAACAEAEB1B2B3B6B9BBBCBFC1C0C1C3C4C5C6C6C6C9CAC9CACBCBCED0D0D0D1D1D3D5D6D7D7D7D7D7D7D7D7D7DADAD9D9D9D7DADADADAD9D9D9D9D7D7D9D9DADADADADADBDBDAD9D9DADBDBDBDAD7DAD9D7D5D3D3D3D1D3D0CFCFCFCECBC9C9C8C6C4C3C0BFBFBCBDBBBBB9B8B5B2B1AEACABA8A7A4A4A19F9C9B9B9997949392908F8E8E8D8A888785838282817F7E7E7D7B7979797F868E97A6A9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AAA4968A7E70656565656567676767676767676565676767676868696A6C6C6D6E6E6F6F7071717375757677777778797C7E8182838586898C8E8F92939697979B9E9FA2A4A7AAACB0B1B2B6B8B9BBBFC1C4C5C6CACACED0D3D3D6D9DADBDEDEDFE1E2E3E2E3E4E3E3E4E6E7E7E7E6E7E7E7E9E9E9EAE9E9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDE600F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000000000000000397778797A7B7C7D7F808183848587898B8D8F919395989A9C9FA1A4A7A9ACAFB2B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDBD8D6B1080000000000000000000000000000000000000000000000000000000019F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F0F0EFEDECE9E7E5E4E0DEDCDAD9D6D3D0CCCAC7C5C1BEBDB9B7B4B1AFABA9A5A3A2A09C9A9795939291908D8D8B8B88888786868585848383838383838383838384858586868788898B8B8D8F9091939595989A9DA0A2A3A7A9ABAFB1B4B7B9BDC0C3C5C7CBCCD0D3D6D9DADDE0E1E4E7E7E9ECEDEFF0F0F1F3F5F5F5F6F6F7F8F8F8F8F8F8F8F7F6F6F5F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD9D6D4D1CECCC9C7C4C1BEBDBAB7B5B3B1AFACAAA8A5A3A2A09E9C9A99979595939291908F8F8D8D8B8B8B8B90969DA1A9ACB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0A79D9289827E7E7E7E7E7E7E7E7E7E766E706F6E6F6F6F6F6F6E72786F696A6A6A6C6C6D6E6E6E6E6F6F7171727575777677767778787A7B7C7D7D7F818183868788898C8D9090949497979B9B9C9FA1A4A5A5A7A8ABAEB1B1B3B3B6B8B9B9BBBDBFC3C4C5C8C9CACBCECECED0D1D5D6D7D5D7D7D7D7D6D7D7D9DBDAD9DADBDCDCDBDBDCDBDBDBDBDBDBDBDCDCDEDEDEDEDCDCDBDBDBDBDAD9DAD7D9D7D6D7D9D7D6D6D5D5D3D5D5D5D3D1D0CECECECBC9CAC9C9C6C5C3C1C0BFBFBDBBB9B8B6B3B1B0AEACABA8A5A4A29F9C9B9997969690908E8C8A898685828181817E7D7C7B7B7A77767983929DA9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9E917E716A69696A6A6A6A6C6D6D6F6D6D6F6F6F6F7172727272757577777879797C7D7E818183838689898A8C8D8E929397979B9C9C9FA2A5A7AAACAEB1B3B6B8BBBFC0C3C5C5C6C9C9CBCFD1D3D5D7D9DADCDEDEDEDFE1E2E2E4E4E4E4E3E4E6E6E6E6E7E9E7E9E9EAEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDC7A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62300000000000000000000000000000000000000000000000000000000006478787A7A7B7C7D7F8081838586888A8B8E8F929496989B9DA0A2A5A8ABADB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCD9D7D53A0000000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F0F0EFECECE9E7E5E4E0DEDCDAD8D4D1D0CCC9C7C4C1BDBBB7B5B3B1ADAAA8A4A2A09E9A9895959291908D8D8B89888786858584838382828282808080808282828283838485868687888B8B8D8F9091939597999C9EA0A2A4A8AAADB1B3B6B9BDBEC1C4C7CACCD0D3D6D8DADCDEE0E4E5E7E9ECECEFF0F0F1F3F5F5F5F6F6F7F8F8F8F8F8F8F7F7F6F6F5F5F3F3F1F0F0EFECECE9E7E7E4E3E0DDDCDAD7D4D3D0CCCBC7C5C3C1BDBAB7B6B4B1AFACAAA8A5A3A2A09E9C9A989595939291908F8F909398A0A5ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A89F95887F7D7D7D7D776F717171716F71727274777D726E6F6F6E6F6F6F707072727373767777767678797B7B7C7D7C7F8181838485898A8A8C8F8F9092949797999B9C9E9FA2A5A8AAABAEAEAEB1B2B5B8BBBBBBBCBCBDBFC0C3C3C5C5C8CACACBCECED1D1D1D3D5D6D7D7D7D6D7D7D7DADAD9DBDBDBDBDBDADBDBDBDBDCDEDEDEDEDEDEDEDEDBDCDCDBDBDBDBDADADADBDCDCDCDCDBDAD9D9D7D7D6D7D5D3D1D0D0D0D0CECFCECACACACAC9C6C6C4C4C4C3C1BFBFBDBBB9B8B8B6B6B3B2B0AEACACAAA7A7A5A2A29E9C9B99979693908E8C8C8C8889888683868B95A1AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE9B8B7D706F6F6F6E6E6F6F6E6F6F6F6E6F6F706F6F727273757675777778797B7C7E7F7E818283868988898D8E8F909396999B9C9EA1A4A5A7ABB0B1B5B6B9BBBDBFC1C4C5C6C9CACBCECFD0D3D5D6D7D7DADADCDEE1E1E1E2E2E3E3E3E3E4E4E3E3E6E4E6E4E6E6E6E6E7E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDB9C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0700000000000000000000000000000000000000000000000000000000187778797A7B7C7D7E7F8183848587898B8D8E91939597999C9FA1A4A6A9ACAFB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDBD8D687000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3C7C0C0BFBEBEBDBDBDBDBDBCBCBABABABAB8B8B7B7B6B6B4B4B4B4B3B3B1B1B1B1AFAFAFADAEAEAEABABABABABABABAAAAAAAAA8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8AAAAAAAAABAB9C8D8F9092939597999CA0A2A4A7AAACB1B2B5B7BABDC1C4C7C9CCD0D1D4D8DADCDEE0E4E5E7E8ECECEFEFF0F1F3F3F5F5F6F6F7F7F8F8F8F8F8F7F6F6F5F5F5F3F3F0F0EFEDECEBE8E7E5E4E0E0DDDAD9D6D4D1CECCC9C7C4C1BEBDB9B7B4B2B1ADAAA8A5A3A2A09E9C999795959392959CA4A9B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD9F91877872727475767576767777787F757272727372727272737372727273757575767778797B7C7C7D8181818383848888898C8D8E8F909394949797999B9C9FA1A2A2A4A5A7AAAEB1B2B5B6B9BBBDC0C1C4C4C6C8C9CBCBCFD0D1D3D3D3D5D7DAD9DADADBDADBDCDEDEDEDEDEDFDFDEDEDEDCDCDCDCDCDCDCDEDEDFDEDEDEDFE1E1E1E1E1E1E1DFDEDEDEE1DFDFDEDEDEDCDBDBDADBDAD9D7D7D7D7D6D6D6D5D5D3D3D1CFCECBCBC9C9C6C5C4C3C0BFBDBCBBB8B6B5B2B2B1B0AEABA8A8A5A4A29F9E9C9B999794969290908E8D8D899099A4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A08E786A6A6C6C6C6A6C6D6D6D6D6E6E6F6F6F727272737575767576777777797B7C7E7F818385898A8C8F8F909397999C9C9FA2A4A5A7AAACB0B2B5B5B8B9BBBBBCBFBFC1C3C3C5C5C5C6C9C9CBCED0D0D1D1D3D3D3D6D7D7D7D6D6D7D6D6D7D7D9DADADBDBDADBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9AA150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000000000000000477878797A7B7C7D7F8081838586888A8B8D8F929496989B9DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCD9D7CD10000000000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A18B8D8F90929395989A9EA0A3A5A9ABAFB1B4B7B9BDC0C3C5C7CBCED1D4D7DADCDEE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F5F6F6F7F8F8F8F8F7F7F6F6F5F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD8D4D3D0CCCBC7C5C3C1BDBAB7B5B3B1ADABA9A5A4A2A09E9C99989CA1A8B0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3928376757675757576787D736F6F6F6F6F7172727273737373737576777778777879797B7C7E7E80818183838687888A8C8E90929397999B9C9EA2A2A5A5A7AAABAEAEB1B3B5B8B9BBBFBFC1C3C5C6C9CACBCFD1D3D5D7DAD9DADADBDCDEDEDFE1E2E2E3E3E4E6E4E7E7E9E9E9EAEBEBEBEBEBEBECEEEEEEEEEEECECEBECECECECEEEFEEEEECECECEEEEEBEBEBEAE9E9E9EAE9E6E6E6E6E6E3E3E2E1E2DFDEDEDCDBD9D7D6D5D3D0CFCBCAC9C5C4C3C1BFBDBCBBB9B5B2AEACAAA7A5A2A2A19E9C9B99979694908F9099A5B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B198856D67696969696B6D6C6C6D6D6E707171707272737375767777787A787B7D7E7F8183858688898C8D9090929394999C9EA1A2A5A8AAABAEAEB2B3B5B9BBBDC0C3C3C5C6C5C6C6C6C8CACBCBCBCBCBCECECFCFCED0D0D0D0D0D0D0D0D0D0D0D3D3D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9C2250F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000000000056E78797A7B7C7D7E7F8182848587898A8D8E91939597999C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDBD8D65D0000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A18B8B8D8F91939597999CA0A2A4A8AAADB1B3B6B9BDBEC1C5C7CBCCD0D4D7D9DCDDE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F5F6F6F7F7F8F8F7F7F6F6F6F5F5F3F3F1F0F0EFEDECE9E7E7E4E1E0DDDCDAD7D4D1D0CCC9C7C4C1BEBDB9B7B4B1AFACAAA8A4A2A0A0A4AAB0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3907E767675777D726F6E6E6E6E6F707172727373727576767677777776787879787B7C7C7C7E7F81818183858688888C8D8E9090929497999B9C9EA1A2A4A5A7AAABAEB1B1B5B6B8B9BDBDBFC0C1C5C5C9CACED0D1D3D3D3D5D5D6D7D7D9D7D9D9DADBDEDEDEE1E1E1E1E2E2E3E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E3E3E3E3E3E3E3E4E6E4E6E4E3E3E1E1E1E1DEDEDEDBDBDBDBDBD9D9D7D5D5D5D1D0CFCBCAC9C5C5C3C1C0BDBBB9B8B8B5B2B1B0ACA8A7A5A4A19C9B97969492908F8D8A8E99A9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB8E766A6C6A6A6D6E6F6F71717273737576777778797C7D7D7F80808183838586888A8C8F90939497999C9FA1A5A7AAABB1B1B2B6B8BBBCBDBFC1C5C6C9CACACACECFD1D1D5D5D6D7D7D9DADBDEDEDFE1E1E1E1E1E3E2E1E2E3E3E3E3E3E2E2E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBE3380F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE307000000000000000000000000000000000000000000000000000000002B7778797A7B7C7D7F808183848688898B8D8F929396989B9DA0A2A5A8AAADB0B3B5B8BBBDC0C3C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEEDEBEAE8E6E4E2E0DEDCD9D7AA000000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A1888B8B8D90929395999C9EA0A3A7A9ACB1B3B5B7BBBEC1C4C7CACCD0D3D6D9DADDE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F5F6F6F7F7F7F7F7F7F6F6F5F5F5F3F3F1F0EFEFECECE9E7E5E4E0DEDCDAD9D6D3D0CCCBC7C5C3C1BDBAB7B5B3B1ADAAA7A8AAB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE957C6D74686565656767676869696A6C6C6E6E6D6D6E6D6E7071717273727475767778787A7B7B7E8181838686888A8D8E909296979B9B9C9FA2A4A5A7A8ABAEB1B2B3B5B8B9BBBFBFC1C4C5C8C9CACBCFD0D1D5D7D9D9DADBDBDCDEDFE2E3E3E3E3E3E3E4E6E6E7E6E6E7E9E7E7E6E6E6E6E6E6E7E7E7E6E7E9E9E9E9E9E9E6E7E7E7E7E7E7E7E7E7E6E7E6E4E4E4E2E1E1DEDBDADAD7D5D5D1D0CECACAC8C4C1BFBFBDBCB9B8B5B3B1AEACABA8A5A4A1A19E9B9B979492908F8D8F9BAEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A58B766E6E6F7171717272737275747576777777787B7C7E8181838385888A8C8F92939697999B9FA1A2A4A5A7A7AAACB1B2B5B8BBBCBFC0C1C3C4C6C9C9CECFD0D1D3D6D7D7DADADCDEDEDFE2E2E2E3E2E3E2E2E2E2E2E3E3E4E4E4E4E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2590F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000000000005B78797A7B7B7C7E7F8082848587898A8C8E90929497999C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E4E1DFDDDBD8D62A000000000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A187898B8D8F919395979A9EA0A2A5A9ABAFB2B5B7BABDC1C4C7CACCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F6F6F6F7F7F7F7F6F6F6F5F5F5F3F1F0F0EFEDECEBE8E7E5E3E0DEDCDAD8D4D3D0CCCAC7C5C1BEBDB9B7B4AEADAFB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE997D6968686969696A6A6A6C6D6D6D6E6D6E6F71716F7171727274757577777878787B7C7E7F818283858588888C8C8E90909294979B9C9C9E9FA2A4A7ABABACAEB1B2B3B5B9BBBDBDBFC0C3C4C5C6C8CACBCECECFD0D3D5D7D7D7D6D9D9D7DADADADBDBDBDCDBDCDEDEDEDEDEDFDFDFDFDFDEDEDEDEDCDBDBDBDCDCDBDBDBDCDEDCDBDADADADBDADAD9D7D7D5D3D5D3D3D0CFCBCBCACAC9C6C5C4C1C3C1C0BFBCB8B6B6B3B2B0AEACABA7A5A4A29F9C9B99979794939CAAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A58B726E6E6F6F716F72737475777878787B7C7C7D818183858687898C8D90929497999B9EA2A5A7A8ABAEB0B2B5B8BBBCBFC1C4C5C6C8CACBCED0D0D0D1D5D5D7D9D7D7D9DADBDBDCDCDEDEDEDEDCDEDEDEDEDEDEDEDCDCDBDBDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D67E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000000000137778797A7B7C7D7F808183848688898B8D8F919396989B9DA0A2A5A8AAADB0B2B5B8BBBDC0C3C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F5F4F3F1F0EFEDEBEAE8E6E4E2E0DEDCD9D7800000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A186888B8B8F90929597999CA0A2A4A8AAADB1B4B7BABDC1C3C7C9CCD0D3D6D8DADCE0E1E4E7E7E9ECEDEFF0F0F1F3F5F5F5F6F6F6F7F7F7F7F6F6F6F5F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DDDCDAD7D4D1D0CCC9C7C4C1BEB8B2B2B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE957D6D6D6D6D6D6E6E6F6F6F6F716F7272737575767777777879797B7B7C7C7D7E81818283858988898D8D8F92939397999B9E9FA1A2A5A7A8AAAEB1B2B5B8BBBBBCC1C3C3C3C4C6C6C9CACBCBCFD0D0D1D3D3D5D6D7D7D7D7D7D7D7D7D7D9DADADADAD9D9DBDBDBDBDBDBDEDCDBDEDEDBDCDBDCDBDAD9D9D7D7D7D7D9D7D6D7D6D6D6D6D5D6D3D0D1D1D0D0CECBCAC9C8C5C4C4C3C1C0BDBBB9B6B2B0AEABA8A8A5A2A19E9C9B9797969493908F8E8C91A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B197786A6A6B6D6E6E6F707273737375767777787B7C7E81828585898C8C8F929497999B9C9FA2A2A5A5A8ACB0B2B6B9BBBDBFC0C1C4C4C6C8CBCBCED0D1D1D3D5D5D5D7D9DADADADCDEDEDEDEDEDEDCDEDEDFDFDEDFE1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFB10F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE307000000000000000000000000000000000000000000000000000000004378787A7A7B7C7D7F8082848586888A8C8E90929497999C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEBE9E7E5E4E1DFDDDBD8CE110000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E8687898B8D90919395989C9EA2A3A7AAADB1B4B7B9BDC0C3C5C9CCD0D1D4D8DADCDEE0E4E5E7E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F7F7F6F6F6F5F5F5F3F3F1F0F0EFEDECE9E7E7E4E1E0DDDAD9D7D4D0CCCBC7C4BBB6B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE8E726C6D6D6D6C6D6E6F6F6F6F6F6F6F717271727373757676777777797C7B7C7D818182838487898A8C8E9092949697999B9C9EA2A4A5A8ABABB1B1B1B3B6B8BCBDC0C3C5C8C9CBCBCBCFCFD0D3D1D3D3D5D5D7D9DADADBDEDEDEDFE1E1E1E1E2E2E2E3E2E2E2E2E2E3E3E3E3E3E3E2E3E3E3E3E3E3E4E4E4E6E4E3E2E1E1DFDFDEDCDCDBDBDADADAD7D7D5D5D5D3D0CECBCAC9C6C3C3C1BFBDBBB6B5B5B3B1AEACABA7A5A2A19E9B97969EB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A68A73727272757676777878797B7B7C7C7C7E7F81828689898C8D90929397999C9EA2A4A8A8ABB1B1B2B6B6B9BBBFC1C4C5C6C6C9CACECFD0D0D1D3D5D7D7D9DADCDEDFDEE1E1E1E2E1E1E1E2E3E3E3E3E2E2E2E2E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBD31D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000000000056E78797A7B7C7D7E808183848688898B8D8F919396989B9DA0A2A5A8AAADAFB2B6B8BBBEC1C4C6C9CBCED1D3D6D8DBDDDFE1E3E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEDEBEAE8E6E5E2E0DEDCD9D75E000000000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A08586888B8D8F919395979A9EA0A3A5A9ACB1B3B6B9BDC0C3C5C9CCD0D1D4D7DADCDEE0E4E5E7E9ECECEFF0F0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0EFEFECECE9E7E5E4E0DEDCDAD9D6D3D0C9BEB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A080737375757574747675767676757777797B7C7C7B7B7C7C7C7D7E8182838486898A8C8C8D8F90929397979B9C9C9FA2A5A5AAABAEB0B1B2B5B6BBBDBFC1C3C5C5C6C8C9C9CBCBCED0D0D3D3D3D6D7D7DAD9D9D9DADADBDCDEDCDCDEDEDCDCDCDFDEDEDEDBDCDEDEDEDEDCDEDEDCDBDBDAD9D7D7D7D6D5D3D5D5D3D3D3D5D3D1D0CFCFD0CECBC9C9C6C5C4C3C1BFBFBCB9B6B3B2B1AEACAAA8A5A4A29E9C9B9796928F8F8D8F9FB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B198766D6C6C6D6D6E6F71727577787B7B7B7E8081828585898C8F909496979B9C9FA2A4A7AAACAEB2B5B8B9BDBFC1C1C4C5C8C8C9CACBCFCFD0D1D5D5D5D5D6D6D7D7DADADADADADBDBDCDCDEDEDEDEDEDEDCDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD1350F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000000000003078787A7A7B7C7D7F8082838586888A8C8E90929497999C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D5D7D9DCDEE0E2E4E6E8EAEBEDEFF0F1F3F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1EFEEECEBE9E7E5E4E1E0DDDBD8B40000000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E848687898B8D90929597999DA0A2A5A9ABB1B3B5B7BDBEC1C5C7CBCED1D4D7DADCDEE0E4E5E7E9ECECEFF0F0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0EFEDECECE8E7E5E4E0DEDCDAD8CCBFB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6876C6A6A6A696C6C6A6B6D6C6D6D6D6D6F6F6F7172727475757576787A7B7C7D7F81838587888C8C8F929497979B9B9CA1A2A5A7AAACAEB1B2B6B9BBBDC0C3C4C4C5C6C8C8CAC9C9CBCECFD0D1D3D5D5D6D7D7D7D9DBDADBDCDEE1E1DEDFDEDFDFE1E1E1E1DEDEDEDEDEE1DEE1E1DFDFE1DFDFDEDEDEDBDCDAD9D7D7D6D6D5D6D5D3D1CFD0CECACAC9C8C6C5C4C1BFBDBBB9B8B5B2AEACA8A7A4A4A19F9C9B999797A7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3997A7273757577777778787B7B7D7E81818385888A8C8D8E909496999B9C9E9FA4A5A7A8ACAEB0B1B3B5B8B8B8BBBCBDC0C1C5C6C5C6C9C9CACBCECFD0D1D3D3D5D5D5D5D5D5D5D5D5D7D6D6D5D5D5D6D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9600F0F0F0F0F0F0F0F10101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD907000000000000000000000000000000000000000000000000000000005F78797A7B7C7D7E808183848688898B8D8F919396989B9DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CBCED1D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEDECEAE9E6E5E2E1DEDCDAD73B0000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E838587888B8D90919395999CA0A2A4A8ABAFB2B5B7BBBEC1C5C7CBCCD0D4D7DADCDEE0E3E5E7E9ECECEFF0F0F1F3F3F5F5F5F6F6F6F6F6F6F6F5F5F5F5F3F1F0F0EFEDECEBE8E7E5E3E0DECDC1B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE90716C6C6C6C6D6D6D6F6F6F7071727072727576777777787A7B7C7D7E7F81818488898C8D8E90929396999B9C9FA4A5A8AAABB0B1B2B3B6B9BBBDC0C1C3C3C4C5C8CACACBCED0D3D5D5D7D9D9DADADADBDBDEDEDEDEDEDEDEDCDCDEDEDEE1E1E1E1E1E1E1E2E3E3E3E3E2E3E3E3E3E1E1DEDEDFE1DEDEDADADADADADADAD7D6D3D5D3D1D0CECBC9C8C5C4C1BFBCBBB8B6B3B1B1ACAAA8A7A4A29F9E9B9BAAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A082787B7C7D7E8081818183858889888A8A8D8F90939697999C9FA2A4A5A7A8ACACB1B2B6B9BBBDBFC1C5C5C6CACBCECED0D1D1D6D6D7D7D9D9DADBDBDBDBDEDEDEDBDBDBDCDCDCDEDEDEDEDEDEDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDE960F0F0F101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000000000001C78787A7A7B7C7D7F8082838586888A8C8E90929497999C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDD0D2D5D7D9DCDEE0E2E5E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBE9E7E6E4E2E0DDDBD99A0000000000000000000000000000000000000000000000000000000023F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E828486888B8D8F919395999CA0A2A4A8ABAFB1B5B7BABEC1C5C7CBCCD0D4D7DADCDEE0E3E5E7E8ECECEFEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F5F5F5F5F3F1F0F0EFEDECEBE8E7E5D5C4B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B18C666160616262636363656567676768686967686A6D6D6D6E70727275767677797B7C7E80818586898A8E909293979B9C9EA1A2A5A7AAACAEB1B3B3B6B8B9BBBDBFC0C1C3C5C5C5C5C8C9CACECBCECFCFCFCFCFD0D3D6D6D6D7D7D7DADADADAD7D7D7D7D7D7D9DADAD9D7D7D6D5D3D0D0D0D0D0D0D0D0D0D0CECACACAC8C8C6C3C3C4C1C1BFBDBBB9B8B6B3B1B1B0ACAAA8A7A5A4A2A19E9B9BABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A37E73757576777778797C7D7E7F828388898A8A8E8F909396999B9EA1A4A5AAACAEB0B1B5B9BCBDC0C3C5C9C9C9CECFD0D1D5D5D7D7D9D9DADBDBDEDEDEDCDEDCDEDEDEDEDFDFDFDFDFDEDEDBDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEBE161010101010101010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23000000000000000000000000000000000000000000000000000000004C78797A7B7C7D7E808183848588898B8D8F919396989B9DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CCCED1D4D6D8DBDDE0E1E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DEDCDAD82200000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E82838687898B8F919395989A9EA2A4A8AAAFB1B4B7BABDC1C4C7CBCCD0D4D7D9DCDDE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F5F5F5F5F3F1F0F0EFEDECE9DBCAB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B18F676565656767676767686A6B6C6D6F7172727574757778797C7D7E808181838689898C8E8F9396979C9CA1A4A5A7AAACAEB1B3B5B6B9BCBDC0C3C4C5C8CACBD0D3D5D7DADBDEDFE3E3E6E6E6E9E9EBEBEBEBEAECEBEBECEBEBEBECECEBECEEEEEEECECECEEEEEEECECECEBEAEBE9E9E7E7E6E4E3E3E1E1DFDEDEDAD9D7D5D5D3D0D0D0CECBCAC6C5C5C1BFBBB8B5B2B1AEABA7A7A6AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A0837E818182858485888A8C8F90929697999B9C9FA2A5A7AAACAEB1B5B8BCBFC1C4C6C9CBCED1D3D5D7DADBDEE1E1E3E4E4E4E6E6E7E9E9E9E9E9EAEAEBECECECECECEEECEEEFEEEEEEEEEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3DA2610101010101010101010101010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE000000000000000000000000000000000000000000000000000000000E73787A7A7B7C7D7F8081838586888A8C8E90929497999C9FA1A4A6A9ABAEB1B4B7BABDC0C2C5C8CACDD0D3D5D8DADCDEE1E2E5E6E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DDDBD9790000000000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E82838587898B8D909295979A9EA0A3A8AAADB1B4B7BABDC1C4C7CACCD0D3D6D9DCDDE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F5F5F6F6F6F6F6F6F5F5F5F3F3F1F0F0EFE7D0BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE8465656567676767676769696A6D6E6F6F71727475767577787A7B7D7F81818385898C8D8F9093979B9B9CA1A2A5A8ACACB0B2B3B5B8B9B9BCBDBFBFC1C3C4C4C5C6C9C9C9CACECFD0D0D3D1D1D1D3D5D5D5D6D7D6D5D7D7D7D9D9D9D9D7D7D7D7D9DAD7D7D7D7D9D9D7D5D6D6D7D6D5D5D3D0CFCECBC9C6C6C5C5C4C3C1BFBFBDBBB9B6B3B2B0ACABAAA8A5A2A19E9C9B99A5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39985838688898A8C8E909092969799999C9EA1A2A5A7A8ABAEB1B1B3B5B9BCBDC0C3C4C5C6C9CBCBCFCFD1D1D3D5D6D7D7D7D7D9DADBDADBDADCDCDCDCDEDCDCDCDCDEDCDCDCDEDEDEDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E152101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A000000000000000000000000000000000000000000000000000000003E78797A7B7C7D7E808183848588898B8D8F919396989B9DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CCCFD2D4D7D9DBDDE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDAD0110000000000000000000000000000000000000000000000000000000FEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E80838586888B8D909295979A9EA0A3A7AAADB1B4B7BABDC1C4C7CACCD0D3D6D9DCDDE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F5F5F6F6F6F6F6F6F5F5F5F3F3F1F0DAC5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A67A696A6A6A6B6A6D6D6E6F6F6F727273737575777878797B7C7F8081838386898A8E90909394979B9B9C9EA2A4A7AAABB0B1B5B6B6B9BCBCBDBFC0C1C3C4C5C8C9CACBCBCFCFCFD1D1D3D5D5D7D7D7DADADADADADAD9D9D9DAD9DADADADADADBDADAD9D9DADBDBDADADBDBDBDAD7D7D7D6D5D3D3D1D1D0D1D0CECBCAC9C6C5C3C1C1BFBBB8B5B2B1B0ACACA8A7A5A4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B18C787777797B7D7D818386888A8D909396979B9C9EA2A4A5A7AAACB1B2B5B8BBBFBFBFC1C4C5C6C9CBCECFD0D1D5D5D7D7D7DADBDADBDCDCDEDEDEE1E1E1E1E3E2E2E3E3E3E3E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDF9810101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF619000000000000000000000000000000000000000000000000000000056F787A7A7B7C7D7F8081838586888A8C8E90929497999C9FA1A4A6A9ACAFB2B4B7BABDC0C2C5C8CBCED0D3D6D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F1F0EFEDEBEAE8E6E4E2E0DEDCD95E0000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E80828486888B8D909293979A9DA0A3A7AAADB1B4B7BABDC1C4C7C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F5F5F6F6F6F6F6F6F5F5F5F3F3E9B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3986B6363646364646464656767686A6A6C6D6E727373757778787B7C7D7F7F838488888C8E909296999C9EA1A2A5A7ABACB0B1B3B6B6B9BCBFBFC1C3C4C6C9C9C9CACBCBCFD0D5D5D6D7D7D9DADBDADADBDCDCDBDBDBDBDBDEDBDEDEDEDEDCDEDFDFDEDEDFDEDEE1E1DEDEDCDBDADAD7D5D3D1CFCECBC9C8C5C4C1C0BFBCBBB9B6B5B2B1AEAAA8A5A4A29E9FAEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3818386878A8A8D90929397979B9C9FA2A5A8ABACAEB1B3B8B9BCC0C1C3C5C9C9CACACECFD0D3D5D7D9DADADCDEE1E1E3E3E4E3E6E6E7E7E9E9EBEBEBEBECECECECECEBEBECECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2C3171010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000000000003478797A7B7C7D7E808183848688898B8D8F919396989B9DA0A2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F1F3F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F7F5F4F3F2F0EFEEECEBE9E7E5E4E1DFDDDBC7080000000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D80828486888B8D8F929395999DA0A3A5A9ADB1B3B7B9BDC1C4C7C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1876A6C6A6C6A6B6A6C6C6D6D6E6E717172727376767777787B7C7C7F81838588898C90909297999B9EA1A2A5A5A8ABACB1B1B3B6BBBCBFC1C4C4C5C9CACACACBCECFD0D1D3D5D6D7D6D5D6D7DADBDBDBDCDCDBDADBDBDBDCDCDEDBDADADADCDCDBDAD9D9D9D9DAD7D7D5D5D1D1D0D0D0D0CBCAC9C8C6C5C4C3C1C0BFBCB9B9B6B5B3B1AEABAAA7A4AAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D7F8181828586888A8C8D8F9294979B9C9FA1A2A5A7A8ABACB0B1B3B6B9BBBDC0C1C4C4C6C9CBCECFD0D3D5D7D7D7D7DADADBDBDCDEDFDFE1E2E1E2E2E2E2E2E2E2E3E2E2E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCD537101010101010101111111111111111111111111111111111111110101010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000000000000000000000000000000000000000000000000000000065787A7A7B7C7D7F8082838586888A8C8E90929497999C9FA1A4A6A9ACAFB2B4B7BBBDC0C3C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEDEBEAE8E6E5E2E0DEDCD94E00000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D80828386878B8D8F919395999CA0A2A5A9ACB1B3B7B9BDC1C3C7C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39F6B65646464656565656868686A6C6D6F717175757577797B7D7E81818385878A8D8E92939697999B9C9E9FA2A4A5A7AAABACAEB1B3B6B9BCBDBFC1C3C3C5C8C9CACACACBCECECFD0D1D1D5D5D7D9D9D9D9D7D7D7D7D7D7D7D6D6D6D5D5D5D5D5D3D3D5D3D3D3D3D3D1CFCECECECAC9C8C9C6C5C5C3BFBDBBB9B8B5B3B0AEACAAA8A7A5A4A1B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7808182848689898C8E8F90929497999B9E9FA4A5A7ABACACB1B2B5B6B9BCBFC0C1C3C5C8CACACBCFD0D3D5D6D7DAD9DADBDADADBDBDCDEDBDAD9DADBDCDBDBDBDBDBDBDBDBDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E66F10101011111111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9070000000000000000000000000000000000000000000000000000002B78797A7B7C7D7E808183848688898B8D8F919396989B9DA0A2A5A8ABAEB0B3B6B9BCBFC1C4C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F1EFEEECEBE9E7E6E4E2E0DDDBB5000000000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8082838587898B8F919395999CA0A2A5A9ACB1B3B6B9BDC1C3C7C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B17E62616163636464646565656868696C6C6D6F7171727577777A7C7E8185898A8D90929496999B9C9CA2A4A7A7AAABAEB0B2B3B8B9BCBDBFC1C4C5C9CACBCED0D0D1D3D6D9D9DADADBDBDEDEDEDFDFDFE1E1E1E1E1E1E1DFE1E1E1E1E1E1E1E1E1E1E1DFE1E1DFDEDCDBDBDADAD7D9D7D5D3D1CFCBCBCAC8C6C4C3C0BFBBB8B5B1AFADB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78183838387888D8E8E909294969B9B9EA1A2A4A5A8ABB0B0B3B6B8B9BFBFC1C4C5C6C6CACACBCED0D0D1D3D7D7D9D9D9DBDCDBDBDEDFE1E1E1E1E1DFDFE2E2E1DFDEDEDBDBDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6B01111111111111111111111111111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000000000005B787A7A7B7C7D7F8082838586898A8C8E91939597999C9FA1A4A7AAADAFB2B5B8BBBDC0C3C6C9CBCED1D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DEDCDA3C0000000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8080838587898B8F919395999CA0A2A5A9ACB1B3B6B9BDC1C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B71706F6F707272727575757777787A7D7D8081828687888C8E90929396999B9C9EA2A4A5A7AAACB0B2B6B8BCBFC0C1C3C4C5C6C9C9CED0D1D3D5D7D7DADADADBDCDEDEDFE1E1E2E3E3E3E4E4E6E6E6E6E4E4E4E4E4E6E6E7E6E6E4E4E3E2E1DFDFDEDEDBDBDAD9D9D7D6D3D1D0CBCBCAC9C8C5C4C0BFBDB9B8B5B5B1AEACA8B0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7D7F808181828586898A8D90939497999C9FA2A5A7A7A8ACAEB1B3B6B9BBBFBFBFC0C1C3C3C4C5C5C9CBCBCFD0D1D1D1D3D5D5D5D6D5D7D7D9DADAD9DADADADADBDADADBDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCCF1E1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6190000000000000000000000000000000000000000000000000000001C78797A7B7C7D7E808183848688898B8D8F929496989B9DA0A3A5A8ABAEB0B4B7B9BCBFC2C5C7CACDD0D2D5D7D9DCDEE1E2E5E6E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F5F4F3F1F0EEEDEBEAE8E6E4E2E0DDDBA500000000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8080838587898B8F919395989CA0A2A5A9ABB1B3B6B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA70656565676868696A6C6D6D6E6F7272757576787C7C7C8081828487898D8F9296999C9EA2A2A5A7A7ABAEB0B1B2B5B6B9BFC0C1C5C6C8CACBCFD0D3D3D5D7D7D9DADADBDBDCDEDFDFDFDFE2E1E1E2E3E3E3E3E4E6E6E6E6E4E4E3E3E2E3E1E1E1DEDEDEDCDEDBDCDAD9D9D7D5D5D1D0CBCAC8C6C5C3C1BDBBB9B8B6AFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A782838686898A8C8E9092939797999B9C9FA2A5A7AAABAEB0B1B3B8B9BBBDBFC1C3C5C6CACBCFD0D3D3D6D7D9DADADADBDEDEDEDFE1E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEA571111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000000000005B787A7A7B7C7D7F8082848587898A8C8E919395979A9C9FA2A4A7AAADAFB2B5B8BBBEC1C4C6C9CCCFD1D4D6D9DBDDE0E2E4E6E7EAEBECEEF0F1F2F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEBE9E7E5E3E1DFDDDA340000000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8080838587888B8D919395989CA0A2A4A9ABB1B3B6B9BDC0C3C5C9CCD0D3D6D9DADDE0E1E4E7E8EBECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B182696A6A6C6C6D6E6E7070727275767778787A7C7D7E818385888A8C8F90929497999B9EA1A2A5A7A8ABB0B1B5B5B8BBBDC0C1C4C5C5C8C9CACBCED1D1D3D3D6D7D6D6D6D5D5D5D7DADBDBDCDBDBDCDEDEDEDEDBDBDBDBDBDBDAD9D9D6D6D5D5D5D3D1D0CECECBC9C8C6C5C5C5C5C4C3BFBCBBB9B6B3B1AEAEA9AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7818283848686888A8C8E90929396979B9C9C9EA2A5A7ABACB0B1B1B3B6B6B8B9BBBDBFC3C4C5C6C8C9CACECBCECFD0CFD0D0D1D1D3D5D5D5D5D5D5D3D5D5D7D7D7D9DADBDBDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E49B111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000000000001378797A7B7C7D7E8081838486888A8B8D8F929496999B9EA0A3A6A9ABAEB1B4B7B9BDC0C2C5C8CBCED0D3D6D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E0DEDCA500000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828586888B8D909395989CA0A2A4A9ABAFB3B5B9BDC0C3C5C9CCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C64636465656567676869696A6D6E6D6F707376777B7C7F81818386898C8C8F929396979B9C9EA2A4A4A5A8AAACB0B2B5B8B9BCBFBFC3C4C6C8C9CACBCECFCECFCFD1D3D3D3D6D6D7D7D7DADBDBDBDBDADCDCDCDCDCDCDEDADADAD9D7D7D6D6D7D6D3D0CFCECBCACBCACAC8C6C4C3C1C0BDB9B8B5B2B1ABB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78283858888888A8E8F909397979B9C9EA1A4A5A8ACAEB1B2B5B8BBBDBFC0C3C5C6CACACBCECFD0D3D3D5D7DADADADBDEDFE1E1E3E4E4E3E4E4E6E6E6E6E9E9E9E9E9E7E7E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6CE181111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9000000000000000000000000000000000000000000000000000000004D787A7A7B7C7D7F8082848587898A8D8E919395989A9D9FA2A5A8AAADB0B3B6B8BBBEC1C4C7CACCCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F1EFEEECEBE9E7E5E4E1DFDDDB3400000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828586888B8D909395989CA0A2A4A8ABAFB3B5B9BDC0C3C5C9CCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B64636464646567686A6C6C6E6F72727576777A7C7E808184888A8C8D8F9297999B9C9FA2A4A7A8ACAEB2B5B6B9BDBFC3C4C6CACBCBCFD0D3D5D7D7DBDEDEDEDFDFE1E1E3E3E4E4E4E4E6E6E6E4E3E4E3E3E3E4E4E4E3E3E4E6E4E4E3E2DFE1DFDEDEDEDBDCDAD9D7D7D5D3D1CFCBC9C8C5C1BFBDB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A98A8A8C8C8E908F929496999B9C9E9FA2A2A7A8AAABACACAEB1B2B6B9BBBDBFC1C3C4C5C6C8C9CBCED0D1D3D6D7D7D9DADCDEDEDEE1E1E2E3E3E3E3E3E2E3E3E2E2E3E3E4E4E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E74C111111111111111212121212121212121212121212121212121111111111111111111111111111111111111111111111111111111111111111111111111010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000000000001378797A7B7C7D7F8081838486888A8B8E90929497999B9EA1A4A6A9ACAFB2B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEAE9E6E5E2E1DEDC9D00000000000000000000000000000000000000000000000000000007E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828486888B8D909295989CA0A2A4A8ABAFB3B5B9BDC0C3C5C9CCD0D3D6D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39F6E65676869696A6B6D6D6E727273757576777A7B7D7E8184868A8C8E909397979B9C9E9FA2A5A7A7ABACB0B2B5B6B8BBBCBFBFC1C3C5C8C9CACED0D0D0D0D1D3D3D5D3D5D5D6D7D7D9DADADADAD9D9DADBDBDBDCDCDBDEDADAD9D9D7D7D6D6D5D5D3D3D3D1D0CECBCAC8C6C5C4C0BDBBB8B5AFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7838588888A8C8F909092969697999B9C9FA2A4A7A7ABACB1B2B2B5B8B9BCBDC1C3C4C5C9CACBCFD0D0D3D5D6D7D7D7D9DADBDEDEDEE1E1E1E1E2E2E3E2E3E3E3E2E2E2E3E3E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDF8F111111121212121212121212121212121212121212121212121212121212121212111111111111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED070000000000000000000000000000000000000000000000000000004D787A7A7B7C7D7F8082848587898B8D8F919396989B9DA0A2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D5D7D9DCDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F1F0EEEDEBEAE7E6E4E2E0DDDB2300000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828486888B8D909295989A9EA2A4A8ABAFB2B5B7BDC0C3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A969636464646565656768696C6D6E71727273757777787A7C818185898C8F90929397999B9E9FA4A7A8ACB0B1B3B6B8B9BDBFC0C4C4C5C8CACBCED0D1D3D3D5D6D6D5D7D7D7D9D7D9D9DADADADADAD9D9D9DADAD9D9D9D7D6D7D6D7D5D5D3D1D0CFCECBCAC8C5C4C4C3C1BFBDBBB9B6B4AFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A9888A8A8C8D8F9090929496979B9C9E9FA2A2A4A4A5A8ACAEB1B3B5B8B9BCBFC1C4C6C8CAC9CECED0D0D0D3D5D7DADADCDEDEDEDEDCDFDEDEDCDEDEDEDEDEDFDEDCDBDBDBDCDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3CC191212121212121212121212121212121212121212121212121212121212121212121212121212111111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D0000000000000000000000000000000000000000000000000000001378797A7B7C7D7F8081838486888A8B8E90929497999C9FA1A4A6A9ACAFB2B5B8BBBDC0C3C6C9CBCED1D4D6D8DBDDE0E2E4E6E7EAEBECEEF0F1F2F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1EFEEECEBE9E7E5E3E1DEDC8B0000000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA6D6567686768696A6D6E707072737575787B7C7F808286888D8F909294999B9C9FA4A7A8ABACB0B2B5B6B9BCBFC3C4C5C6C9CBCECFD0D0D1D3D5D5D6D7D9DADADADBDBDCDCDEDEDFE1E1DEDFDFDEDEDEDCDEDCDEDBDCDCDBDAD7D7D7D5D1D0CFCECAC9C8C5C4C3C1BFBDB9B6B5B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A98888888A888C8D8D909090939396979B9C9C9FA1A2A2A5A7A8ABACAEB0B1B1B3B6B6B9BCBDC0C1C3C4C5C8C9CACBCECFD0D3D1D1D3D3D1D3D3D5D3D5D6D7DAD9DADADBDBDBDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E44C121212121212121212121212121211121112121212121212121212121212121212121212121212121212121111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6230000000000000000000000000000000000000000000000000000004D787A7A7B7C7E7F8182848587898B8D8F919396989B9DA0A2A5A8ABAEB0B3B7B9BCBFC2C5C7CACDD0D3D5D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E0DEDC230000000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA6F69696A6A6C6D6F717274757577787A7B7E7F818387898C8D8E909496999B9EA2A4A5A8ABACAEB1B5B6B8BBBFC0C1C4C6C9C9CBCED0D1D3D3D5D5D6D7D9D7D9DBDBDEDCDEDEDCDBDBDAD9D9DADBDEDBDBDADADADADAD7D7D6D5D5D1D0D0CECAC9C6C6C4C3C0BFBCB9B8B5B3B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8A8C8D8D908F9093939396999B9C9C9FA2A4A4A5A8ABAEB0B1B3B6B9BBBBBBBFC1C4C6C6C9C9C9C9CBCBCACBCECED0D1D1D3D3D5D5D6D6D6D6D6D6D5D5D6D7D6D6D6D6D6D6D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E392121212121211111313131313131313131313131313131313131311111112121212121212121212121212121212121212111111111111111111111111111111111111111111111111111111101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA20000000000000000000000000000000000000000000000000000001378797A7B7C7D7F8081838586888A8C8E91939597999C9FA1A4A7AAADAFB2B6B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F4F3F2F1F0EEECEBE9E7E5E4E1DFDD9500000000000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A96761616264636467676869696A6E6F727377787B7C7F8185878A8D8F929294979B9C9FA2A5A7ABB0B1B2B6B9BBBCBFC3C5C5C8CACACFD0D3D5D7DADBDCDEDEDFE1E2E3E3E3E3E3E3E4E6E7E6E6E4E4E3E3E4E4E3E3E2E1E1E1DEDEDEDBDBD9D6D5D3CFCFCBCAC8C6C5BDB4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8F9090929294979797999C9E9FA2A4A5A5A8ABABACB0B1B3B5B8BBBCBFC1C3C5C6C8CACACBCED0D0D1D0D5D3D3D5D5D7D9D9DADADCDEDEDEDBDEDFE1E1E1E1DFE1E1E1E2E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2CB191211131313131313131313131313131313131313131313131313131313131313111111121212121212121212121212121212121111111111111111111111111111111111111111111111111111101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000000000004D787A7B7C7D7E7F8183848688898B8D8F929496999B9DA0A3A6A9ABAEB1B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E2E1DEDC34000000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A96A6363646565676868686A6C6C6D6E71737577777A7B7C7F818285888A8E909294979B9EA1A2A4A5A7AAACB0B3B6B8B8BCBCBDBFC0C0C1C1C5C5C8C8C8CACBCFCFD0D0D1D3D3D3D5D3D5D5D5D5D3D0D0D1D1D1D1D3D3D0D0CECECFCBCACAC9C6C4C3BFBFBDBBB9B6B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9392939699999B9C9E9E9EA2A4A4A5A5A7A8ABACB0B1B2B6B6B6B9BDBFC1C3C5C6C6C9C8CACBCED0D0D3D1D1D5D5D7D9D9D7D7D9DADADCDADADADBDADBDBDCDCDEDBDBDBDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1845D5D5D5C5D5D5D5D5E5D5D5D5D5D5D5D5E5C5C5D5D5E606060605E5E606060606060606060605E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5C5C5D5D5C5C5D5D5D5C5C5C5C5C5C5C5C5C5C5A5C5C5B5A5B5B5A5A5C5A5A5C5C5C5A5A5A5A5A5A5A5858585858585858575857575757575758585858585858575757575757575757575757575857585757585858585859595A5A5A585A5A595859595A5A5A5A5A5A5A5A5A5A5A5A5C5A5A5A5959595A5A5A5A5A5A5A5C5C5C5A5A5A5A5A5A5C5C5A5A5C5B5B5C5A5A5A5A5A5A5A5A5A5A5A5A595A59595959595A5A5A5959585858585858585858582C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC40000000000000000000000000000000000000000000000000000001378797A7B7C7D7F8081838586898A8D8E919395989A9D9FA2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D5D7D9DCDEE1E2E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E0DDA700000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A06B6C6D6D6F6F717274757777797D7F818285898A8D8F929397999B9C9EA2A4A5A8ABAEB0B2B5B6B8B9BCC0C1C4C5C8C9CBCBCFD1D3D3D3D5D5D7D9D9D9DAD9DADBDBDBDBDBDADBDBDBDBDBDADADAD7DAD7D7D5D6D6D6D5D3D0D0CFCFCFCECAC8C6C5C3C1C0BDB4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE9B9C9E9F9C9FA2A4A2A4A5A8ABACB0B2B2B2B6B8BBBBBCBDC1C3C4C5C6C8C9CBCACBCED0D3D3D7D6D7DADBDCDFE1E1E2E3E3E4E4E3E3E3E2E1E3E3E3E4E3E2E3E3E3E2E2E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D38D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000000000000000000000000000000000000000000000000000004D787A7B7C7D7E808183848688898B8E90929497999C9EA1A4A6A9ACAFB2B4B8BBBDC0C3C6C9CBCED1D4D6D9DBDDE0E2E4E6E8EAEBEDEEF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F1EFEEECEBE9E7E5E3E1DFDD34000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39C5D606161636464656567696B6D6E71757678797C7D7E8183868A8C8F909396979B9C9FA2A5A5AAACAEB1B3B5B8B9B9BDBDC0C1C3C5C5C6C9CACBCECECECECFD0D0D0D3D3D5D5D3D3D3D3D3D1D1D1D1CFCFCFCBCBCBCBCBC9C8C6C8C5C5C3C1BFBFBBB9B7B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA908F909090929393949497979B9B9C9FA2A5A5A7AAACAEB0B1B3B5B8B9BBBDBDBFC0C3C4C6C8CACECECFD0D0D3D5D5D7D7D9D7D7D7DAD9D9DADADBDBDEDCDCDEDEDEDCDEE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3990F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD90000000000000000000000000000000000000000000000000000001378797A7B7C7D7F8082848587898A8D8F919396989B9DA0A2A5A8ABAEB0B3B7B9BCBFC2C5C7CACDD0D3D6D8DADCDEE1E3E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEAE9E6E5E2E0DEA700000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F5F5F5F5F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38F65656767686969696C6E6F7173757677787C7C818285898A8D909293979B9C9FA2A2A5A5A8ABAEB2B3B6B9BBBDC0C4C4C8C8C8CACECFD0D0D3D1D5D5D3D5D7D7D9DAD7D7D7D7D6D5D5D3D3D1D0D0D0CFCBCECBCBCBCBCAC9C8C6C4C3C3C1BFBCB9B7B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AC99999B9C9C9C9E9FA2A4A4A5A7A7A7AAACAEB1B1B3B6B8B9BCBFC0C4C5C5C8C9C9CACACBCFCFD1D1D5D6D6D9D9DAD9DADADBDBDCDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2980F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000000000004D797A7B7C7D7E8081838486888A8C8E90929497999C9FA1A4A7AAADAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE0E2E4E6E8EAECEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F1F0EEEDEBEAE7E6E4E2E0DD34000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F5F5F5F5F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37C6364656767696A6D6E6F72727375787A7B7D818388898C8E909293979B9C9FA4A7AAACB0B1B5B9BCBDBFC0C1C4C5C6C9C9CBCED1D1D1D5D6D7D7D7D7D9DADADBDADBDCDBDADBDBDBDBDBDAD9D9D9D7D9D7D5D5D3D1CFCFCECBCAC8C5C4C4C3BFB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA8A8AAAAABACACACAEB1B1B1B2B3B5B6B8B9BDC0C1C4C5C6C8CACBCBCECECFD0D3D5D5D6D7D9D9D9DADBDBDEDEDEDFDFDEDFDFE1E1E1E2E1E2E1E1E1E1E1E1E1DFDFDFDFE1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D38D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD90000000000000000000000000000000000000000000000000000001C78797A7B7C7D7F8082848587898B8D8F929496989B9DA0A3A6A9ABAEB1B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E6E7E9EBECEEF0F1F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F1EFEEECEBE9E7E5E3E1DEB900000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F5F5F5F5F3E5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B17469686A6A6A6D6D6E6F717273757777787B7C7F8183868A8C8E909696979B9C9FA2A4A7A8ABACB1B3B6B9BBBDBFBFC1C3C4C9CACACBCECED1D1D1D1D3D5D6D7D7D7D7D5D5D5D3D1D1D0D0D1D1D1D1CFCFCECECECAC8C6C6C3C3C1BFBDBBB9B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA4A5A4A5A7A7A7AAABACABACB0B0B1B1B2B3B6B6B8B9BCBCBFBFC0C3C3C4C5C6C9CACACBCECFD0D0D3D3D5D5D6D6D9DADADADBDBDEDFDFDFDEDFDEDEE1E1E1E1E1E1E1E2E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7900F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000000000005B797A7B7C7D7F8081838586888A8C8E919395989A9D9FA2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D5D7DADCDEE1E3E5E7E9EAECEEEFF1F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E0DE4F000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F6F5F5F5F3E5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A56765656768696A6D6F71737575777B7B7E81828388898D909497999C9EA2A5A7A8ACB1B3B8BBBDBFC3C4C6C9CACBCED0D1D5D5D7D9DADADBDCDBDBDCDFDFE1E1DEE1E2E2E1E1DFDFDEDEDEDEDEDCDBDADAD9D7D5D5D3D3D1D1CFCECAC9BFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA5A5A7A7A7A7AAABACACACAEB0B1B2B3B6B6B8BBBCBDBFC1C4C4C6C8CACECFD1D3D3D5D5D6D7DADADADCDCDEDFE1E3E2E3E4E4E6E6E6E6E6E7E7E7E6E7E7E7E7E7E6E6E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECA10F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE307000000000000000000000000000000000000000000000000000021787A7B7C7D7E7F8183848688898B8E8F929497999C9EA1A4A6A9ACAFB2B4B8BBBDC0C4C6C9CCCFD1D4D7D9DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F2F1F0EEECEBE9E7E6E4E1DFB900000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F6F5F5F5F3E5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3906262636464656568696B6C6F7173747577797D7E818286898C8D909396999B9CA1A2A5A5AAACAEB1B3B6B9BBBCBDC0C1C3C5C6C8CACECBCBCECFD0D1D0D0D1D1D0D0D1D0D1D3D1D1D1D0D1D1D1D1D0CFCBCECAC9C8C8C5C5C3C0BFB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AC979B999B9C9CA1A1A1A2A4A5A5A7A8AAABAEAEB0B1B1B2B5B8B9BBBFC1C3C4C4C5C9C9CACECECFCFCFD0D3D3D3D3D6D7D7DADADADCDCDCDADEDEDEDFDFE1DFE1E1E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E49C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000000065797A7B7C7D7F8082838587898A8D8F919396989B9DA0A2A5A8ABAEB0B4B7B9BCC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEF0F1F2F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE9E7E5E3E1DE61000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37C6868696A6C6D6E7070737677777A7B7D7F8183868A8D8F9094979B9C9FA2A5A8ABAEB1B2B6B8BBBCBFC0C4C5C6C9CACBCECFCFD0CFD1D3D5D6D6D7D7D9DAD9DADBDBDADADBD9D7D7D6D7D6D5D5D1D1D0D0CFCBCAC9C6C6C4C1BDB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B1B1B2B2B3B5B6B6B5B6B8B8B9BBBCBDC0C0C1C3C5C6C6C9CACECFD0D3D5D6D7D7DADADEDEE1E2E2E3E3E3E3E6E7E7E9E9EBEBEBEBECECEEEEEEEEEEEEEEEEEEEFEEEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDA920F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0700000000000000000000000000000000000000000000000000002B787A7B7C7D7E8081838486888A8C8E90929497999C9FA1A4A7AAADAFB3B6B8BBBFC1C4C7CACDCFD2D4D7D9DCDEE1E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E0CC09000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F5E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE6B696A6A6C6D6E7174747576797B7E818387898A8C909397999B9CA1A2A5A7A8ABAEB1B3B6B8BBBFC0C1C5C5C6C9CACECFCFD1D1D3D5D6D7D7D9D9DADADBDBDADADBDCDCDBDCDCDADBDAD7D7D7D6D7D5D5D3D3D3D1D0CBCAC9B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA8A7A7A8A7AAABABACACACAEB1B1B1B2B2B3B6B6B8B9BBBCBDBFC1C4C5C5C5C8C9CBCECFD1D1D3D5D7D9D9DADBDEDEDEE1DFE1E1DFDFDEDEDEDCDBDBDEDEDEDEDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1980F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000000069797A7B7C7D7F8082848587898B8D8F929496999B9EA0A3A6A9ABAEB2B4B7BABDC0C3C6C9CBCED1D4D6D9DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F2F1F0EEECEBE9E7E5E4E1DF73000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F6F6F6F6F7F6F6F6F6F5F5F5E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3926567686A6D6E6F7272757577787B7D7E818285898A8D8E909296999B9EA2A4A5A7ABACB2B5B8BBBFC1C5C5C9CACBD0D3D5D5D7DADADBDBDEDFE1E1E1E1E2E1E1E1E1E1E1E1E1E1DFDCDCDCDADAD9D9D7D6D5D5D0CFCBC9BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0ACACACACACACAEACAEB0B1B1B2B2B5B8B8BBBBBCBFC0C1C1C5C5C8CACBCECECFD1D0D3D1D1D3D3D3D3D5D5D5D5D6D6D7D6D7D7D9D9D9D7DAD9D7D7D9D9DAD9D9D9D9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E69C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED07000000000000000000000000000000000000000000000000000035797A7B7C7D7F8081838586888A8C8E919395989A9D9FA2A5A8AAAEB0B3B6B9BCBFC2C5C7CACDD0D3D6D8DADDDFE1E4E5E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE9E7E5E2E1D511000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F6F6F6F7F7F7F6F6F6F5F5F5E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3756767696A6C6E6F71727677797C7E818186888A8D8E8F929497999C9E9FA2A5A7A8ABAEB1B3B6B9BBBDBFBFC1C3C5C6C6C9C9CACACECFD0D1D3D3D3D1D3D3D3D5D6D5D5D5D5D5D5D3D0D1D1D1D0CFCFCBC8C6C5C3BFB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBBBBBBBBCBCBBBBBDBCBCBDBFBFBFC0C1C1C1C1C3C5C5C8C9C9CBCECBCFD0D0D3D1D3D3D5D6D6D7D9D7D7D9DADADADBDADBDCDCDCDCDBDCDCDBDEDCDCDCDEDEDEDEDEDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D78E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000000005737A7B7C7D7E7F8183848688898B8E90929497999C9FA1A4A6A9ADAFB2B5B8BBBEC1C4C7CACDCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E08D000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5E6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A76A6A6B6D6E6E6F72757677797C7E81818689898C8F9094979B9C9FA1A4A5A7AAACB0B2B5B9BCBFC0C3C5C6CACED0D1D3D3D6D7D9DADADAD9DADBDFDEDEDEDEDEDFE1E1E1DFDFDCDEDEDCDBDBDAD9D6D3D3D0CECAC9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0AEB0B1B1B1B2B2B3B5B5B8B6B8B9BBBDBCBDBFBFC1C1C4C4C5C5C8C9C9CACACBCFD0CFD0CFD1D3D3D5D6D6D7D9DAD9DBDBDCDBDBDCDBDADCDADCDEDCDCDBDBDBDEDCDBDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDA695E60605F5F5F5F5F5F5F5F5F5E5E5E5F5F5F5F5F5E5E5E5F5F5F5E5E5E5E60605F5F6060605F5F5F5F605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5E5E5D5D5E5E5E5E5E5E5C5E5E5E5E5E5E606060606160616161606161606160606060606060605E606060605F605F5F5F5F5F5F5F60605F5F5F5F5E5F5F5E5F5F5F5E5E5E5E5E5E5E5F5F5F5F5E5E5E5F5F5F5E60606060605F5F5E5E5E5E5E6060606060606060606060606060606060606060606060606060606161616161616161616161606060606060606060606060616160605E5F5E5E5E5E5E5F5E5E5E5E5E5E5E5C5C5C5C5C2F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD900000000000000000000000000000000000000000000000000000043797A7B7C7D7F8082838587898B8D8F919396989B9DA0A3A6A9ABAEB1B4B7BABDC0C3C6C9CBCED1D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F2F1F0EEECEBE9E7E5E4E1DF2C000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F6F5F5E6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3826768696C6C6D6F6F72747575777A7D7F8185868A8A8E9094979B9EA2A5A8ABB0B1B5B9BCBFC1C4C5C9CACBCFD3D3D6D6D7DADADADBDCDEDEDEDFE1DFDFDFE1DFDFDEDFDFDFDEDEDBDADAD7D7D5D1D3D1CFCBCBBDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B1B1B2B1B3B5B5B6B6B8B9B9BBBCBFBFC0C3C4C4C5C6C6C6C9C9C8CACAC9CACBCBCBCECFCFCFD0D0D1D3D5D5D5D7D6D5D6D7D7D7D7D7D7D7D6D7D9DADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D672151514141414141414141414141414141414141414141414141414141414141414141515151515151515151414141414141414141414141414141414141414131313131313131313131313131313131313131313131112121212121212121212121111111111111111111111111111111111111111101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55000000000000000000000000000000000000000000000000000013787A7B7C7D7E8081838486888A8C8E919395979A9C9FA2A5A8AAADB0B3B6B9BCBFC2C5C7CACDD0D3D5D8DADDDFE1E3E5E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE9E7E5E2E0A9000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F7F6F6F5F5E6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE6969696C6E6F7072737778797C7E7F818386898C8F9296979B9C9C9FA2A4A5A7ACB0B3B6B8B9BCBFC1C4C5C8C8C9CACECED0D0D0D1D1D3D3D5D5D5D5D3D5D5D5D3D3D1D1D3D5D5D5D5D3D0CFCFCBCBC9C8C6C1B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B1B2B2B2B2B3B1B2B2B2B1B2B3B3B6B8B9B9B9BBBCBDBFBFBFC0C3C3C3C3C6C5C6C6C9C9CACACBCBCECED0D1D1D3D6D7D9DADADBDCDBDBDBDADADADBDBDBDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6D91C1414141414141414141414141414141414141414141414141414141414141414141414141414151515151515151514141414141414141414141414141414141414141313131313131313131313131313131313131313131112121212121212121212121111111111111111111111111111111111111111101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD900000000000000000000000000000000000000000000000000000051797A7B7C7E7F8082848588898B8D8F929497999C9EA1A4A6A9ACAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E047000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F8F7F7F6F6F6F5E6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3916A6A6D6F6F72737677787A7D7E818283868A8C8E909396999B9EA1A4A5A7ABACB0B1B5B6B9BCBDC1C1C4C5C8C9CBCECFD0D1D3D5D7D9D9D9DADADADADCDCDCDCDBDBDCDBDBDBDADADADAD9D6D3D1D0CBCAB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCBCBCBCBCBDBFBFC1BFC0C3C4C4C5C8C9C9CACACBCBCBCBCECECED0D1D5D5D3D3D5D7D7D7D9D9D7D7D7D9DADBDADADADADBDADBDBDBDCDBDBDBDBDBDBDBDADBDBDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D65A14141414141414141616161616161616161616161616141414141414141414141414141414141414141414151515151515151514141414141414141414141414141414141413131313131313131313131313131313131313131311121212121212121212121211111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5500000000000000000000000000000000000000000000000000001D797A7B7C7D7F8081838586898A8D8F919396989B9DA0A2A5A8ABAEB1B4B7BABDC0C2C5C9CBCED1D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F2F1F0EEECEBE9E7E5E4E1C4000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F8F8F8F7F7F6F6F5E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1666161646465676A6B6C6D70727576787B8080818689898D8F9093969B9B9FA2A4A7ABAEB1B3B6B9BCBDBDC3C1C4C6C6C8C9C9CACBCED0D1D3D5D5D5D5D5D7D6D5D7D6D5D3D1D1D3D0CFCFCFCECBCBC9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9B9B9B9B9B9BBBBB9BBBCBFBFBFBFC0C1C1C0C3C4C4C5C5C9C8C8C9CACECFCFCECECFD0D1D5D5D5D5D5D5D6D7D9D9DADADADADADADADBDBDCDEDEDCDBDEDEDEDFDEDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1C214141414161615151515151515151515151515151515151515151516161616141414141414141414141414141414141415151515151515141414141414141414141414141414141414131313131313131313131313131313131313131311111212121212121212121211111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE000000000000000000000000000000000000000000000000000000657A7B7C7D7E8081838486888A8C8E90929597999C9FA2A4A7AAADB0B3B6B9BCBFC1C5C7CACDD0D3D5D8DADDDFE1E3E5E7E9EBECEEF0F1F2F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE9E7E5E2E06200000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F8F8F8F8F8F7F6F6F5E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38F676767696A6C6D6E717376787B7D7F818588888C8E9093979B9C9FA5A5A8ACACAEB2B6B9B9BDC0C3C5C6C9CACACBCED0D1D3D3D6D7D7D9D9DADBDEDEDCDCDBDADAD9D7D9D7D7D6D7D6D3D3D1D0CECAB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CAC9CACACAC9C9CBCBCACBD0D0D0D0D0D1D3D5D6D5D7D9D9D9DBDADBDCDEDEDEDEE1E1E1E2E3E3E2E3E3E4E4E6E6E7E9EAEAEBEBEBECEBEBEAE9E9E9E9E9E9E7E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E345161615151515151515151515151515151515151515151515151515151515151515161614141414141414141414141414141414151515151515151414141414141414141414141414141414131313131313131313131313131313131313131313111212121212121212121211111111111111111111111111111111111111101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35000000000000000000000000000000000000000000000000000030797A7B7C7D7F8082848587898B8D8F929496999B9EA1A4A6A9ACAFB2B5B8BBBDC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2D7110000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F6F6F7F7F8F8F8F8F8F7F7F6F6E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B16864656767696A6C6F6F717577787C7D808286888A8E9096979B9EA2A4A7A8ABACB1B2B5B6B9B9BBBFC0C1C3C4C6C8C9CACACBCBCBCECECFD0D0D0D1D1D3D3D3D1D1D1D3D3D0D1D1D3D0D0CECECAC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C1C1C1C3C3C3C3C3C3C3C4C4C4C4C5C5C8C8C9C9C8C9C9C6C6C8CACED0D0D0D0D0D3D3D6D7D7D6D6D7D7D7D9DAD9D9D9D9D9D9D9D9DAD9D9DADAD7D7D7D9DADBDCDCDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBAE151515151515151515151515151515151515151515151515151515151515151515151515151516161614141414141414141414141414141515151515151514141414141414141414141414141414141313131313131313131313131313131313131313111212121212121212121211111111111111111111111111111111111111101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4000000000000000000000000000000000000000000000000000005747A7B7C7D7F8081838586898A8D8E919396989B9DA0A2A5A8ABAEB1B4B7B9BDC0C2C5C9CBCED1D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F6F5F4F3F1F0EEECEBE9E7E5E4E18F000000000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F7F6F6E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38567686A6A6D6F7172767777797C7F8184898C8E909497999CA1A4A5AAACAEB1B2B3B6BBBDC0C1C4C5C8CACED0D1D3D6D7D9DADADBDCDCDCDEDEDFDFDFDFDFDFDFDFDFE1E1E1E1E1DFDFDEDFDEDCBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C6C5C5C5C6C8C9CACBCBCBCBCBCBCBCECFD0CFCFD0D1D1D3D5D5D6D7D9D9DBDCDCDEDFDFDFE1E1E1E1E1E3E3E4E4E4E7E6E6E6E4E6E6E7E7E9E9E9E9E9E9EAEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F24115151515151616161616161616161616161616161616161616161515151515151515151515151515151516161414141414141414141414141414151515151515141414141414141414141414141414141413131313131313131313131313131313131313131112121212121212121212111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF230000000000000000000000000000000000000000000000000000487A7B7C7D7E7F81838486888A8B8E90929497999C9FA1A4A7AAADB0B3B6B9BCBFC1C5C7CACDD0D3D5D8DADDDFE1E3E5E7E9EBECEEF0F1F2F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F1EFEEECEAE9E7E5E2E13500000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F8F7F6E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA6567696A6C6C6F72757577797B7C7F8285868A8C9093979B9C9FA1A4A5A8ABAEB1B1B5B6B9BBBBBFC3C3C4C5C8C9CACECFD0D1D3D1D1D3D3D5D5D5D6D6D5D5D1D3D3D3D3D3D0CFCFCECAC9C9C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CBCBCBCBCBCECECECECECBCBCECFD0D0D0D1D5D5D5D5D7D7D7D7DADADBDADADADBDCDEDCDEDEDFDFE1DFE1DFDEDFE1DEDEDEDFDEDEDEDCDEDEDEDCDBDEDBDADBDBDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDF9A15151616161616161616161616161616161616161616161616161616161616161615151515151515151515151515151616141414141414141414141414141515151515151414141414141414141414141414141413131313131313131313131313131313131313131112121212121212121212111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000000013797A7B7C7D7F8082848587898B8D8F929496989B9EA1A4A6A9ACAFB2B5B8BBBDC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2BC00000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F8F7F7E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3816E717272767677797A7D7F808186898A8E8F9294979B9CA1A2A4A5A7ABB0B1B3B5B6B9BCBDC0C1C4C5C6C9C9CACBCECFCED0D1D1D5D5D3D3D1D1D3D1D1D3D1D0CFCFCECECAC8C6C5C4C3C4B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C1BFC0BFBFBFC1C0C1C1C1C3C1C4C4C5C5C6C5C5C6C6C9C9CACBCBCECECECECFD0D1D3D1D3D3D5D5D5D5D5D7D7D6D6D5D5D5D3D5D5D5D5D6D5D5D3D3D1D1D0D0D0D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D733161616161616161616161616161616161616161616161616161616161616161616161616161515151515151515151515151516161414141414141414141414141415151515151514141414141414141414141414141414131313131313131313131313131313131313131112121212121212121212111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F00000000000000000000000000000000000000000000000000005B7A7B7C7D7F8081838586888A8C8E919396989B9DA0A2A5A8ABAEB1B4B7B9BDC0C2C6C9CBCED1D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEEDEBE9E7E6E4E15900000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F8F8F7E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7BDBDC3C7C7C7C6C6C3BDBDBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39F6567686A6D6D6F727375787B7D81818689898D909294979B9CA1A2A5A7ABACB0B2B5B6B9BBBFC1C3C4C6C8C9CBCED0D0D3D3D3D5D5D6D6D7D6D6D6D7D7D7D9D7D7D7D6D6D5D0D0CECECEC6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C3C3C1C3C5C5C6C6C6C6C5C8C9C9C9C9CACACBCFD0D1D3D3D3D1D1D5D3D3D3D5D5D6D7D7D7D7D6D6D7D7D9D9DADBDADADADADADCDEDEDEE1E1E2E1E2E2E3E4E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E39C161616161617171717171717171717171717171717171717171717161616161616161616161616161616151515151515151515151515161614141414141414141414141415151515151514141414141414141414141414141414131313131313131313131313131313131313131112121212121212121212111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000002B7A7A7B7D7E7F81828486888A8B8E90929497999C9FA1A4A7AAADB0B3B6B9BCBFC2C5C7CACDD0D3D5D8DADDDFE1E4E6E7E9EBECEEF0F1F3F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F4F3F2F1EFEEECEBE9E7E5E3D8090000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F9F9F9F8F8F8F8E8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBC1C5CFD3DAE1E7E7E7E8E8E8E9E9E9E9E9EBEBEBEBE5DDD4C9C3B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B36E67686A6D6D6E71727577797B7D8183868A8C8F9293979B9EA2A5A7AAACB0B2B6B9BDBFC3C5C6C9CBCED0D1D3D3D6D6D7D7D9DADADAD7D9D9D9DADADADBDADADBDADADADAD9D7D5D3D3BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CBCBCECECECBCBCECFCECECECED0D0CED0D1D5D5D3D3D3D3D3D5D6D9DADBDBDBDCDEDCDFDEDEDEDEDEDEDEDEE1E1E1DFDFDFDFE1E1E1E1DFDEDEDEDEDBDBDBDCDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDED62416171717171717171717171717171717171717171717171717171717171717171616161616161616161616161616151515151515151515151516161414141414141414141414141515151515151414141414141414141414141414141313131313131313131313131313131313131311121212121212121212111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED070000000000000000000000000000000000000000000000000005707A7B7C7D7F8081838587898B8D8F929496989B9EA1A4A6A9ACAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE8E6E4E286000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F8F9F9F9F9F9F8F8F8E8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BEC6CCD8E5E5E7E7E7E7E8E8E8E9E9E9E9EBEBECECECECECECECECECECECECECECDECDC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B386636565686A6C6D6E707375777B7E80838586898E8F9294979B9E9EA2A5A7AAAEB0B2B5B8B9BFBFC3C3C4C5C8C8C9CBCECFD0D0D0D0D0D3D3D5D5D3D3D1D1D0D0D0CFD0D0CFCFCECEC8B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C4C5C5C5C6C6C6C8C6C8C6C5C6C9C8C9C9C9CBCECFCECED0D0D0D0D3D3D6D6D7D9D7DADADCDEDEE1E1E2E3E3E4E4E4E6E4E4E6E4E4E6E9EAE9E9E7E7E7E7E9E9E9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEA9117171717171717171717171717171717171717171717171717171717171717171717171717171616161616161616161616161515151515151515151515161614141414141414141414141515151515151414141414141414141414141414141313131313131313131313131313131313131311121212121212121212111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000000000437A7B7C7D7F8081838486888A8C8E919396989B9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CBCED1D4D6D9DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE7E6E4E1350000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F8F9F9F9F9F9F9F8F8E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC4D0D9E5E5E5E7E7E7E7E7E8E8E9E9E9EBEBECECECECECECECECECECECECECECECECECECECECECECE5D0BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD727675787B7C7E81838689898D909296979B9EA1A4A5A8ACAEB1B3B6BBBDC1C5C6C9CACACECED0D1D3D6D9D9DADCDEDEDFE1DFE1E1E1E1E2E2E3E3E3E1E1E1E1E1DFDFDEDBDAD9D7C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C3C3C3C3C3C3C3C3C4C4C3C3C4C4C4C5C6C6C6C6C5C6C6C6C9C9CBCBCECECFD0D3D3D3D3D3D3D5D5D5D5D7D9D9D9D7D7D7D6D5D5D5D5D5D6D7D7D9DADAD9D7D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDE361717171717171717171717171717171717171717171717171717171717171717171717171717171717171616161616161616161616151515151515151515151516141414141414141414141414151515151514141414141414141414141414141413131313131313131313131313131313131313111212121212121212121111111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD90000000000000000000000000000000000000000000000000000137A7A7B7C7E7F81828486888A8B8E90929497999C9FA1A4A8AAADB0B3B6B9BCBFC2C5C7CACDD0D3D6D8DBDDDFE1E4E6E7EAEBEDEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F6F5F4F2F1F0EEECEBE9E7E5E3BD00000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F8E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC6D1E0E4E5E5E5E7E7E7E7E8E8E8E9E9EBEBECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECECEBDAC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3746A6A6D6E6F71737577787B7D8182868A8D90909496999B9EA2A2A7A7ABACAEB2B6B6B9BCBDC0C1C4C6C9C9CBCBCECECED1D0D3D3D5D5D3D1D3D3D3D5D5D3D3D3D1D0CECECECBCAB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9D7D7D7D7D7D7D5D5D7D7D7D7D7D9D9DADADBDBDADBDCDCDEDCDBDBDCDEDEDEDEDEDFDFE1DFE1DEDEDEDFDEDEDEDFDEDEDEDCDEDCDCDCDBDEDBDADBDBDBDBDBDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDF9A1717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171716161616161616161616161515151515151515151516161414141414141414141414151515151514141414141414141414141414141413131313131313131313131313131313131313111212121212121212121111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000000000617A7B7C7D7F8082838587898B8D8F929496999B9EA1A4A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D4D7DADCDEE1E3E5E7E9EBECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE9E6E5E26B000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9C2D1DEE4E4E5E5E5E7E7E7E7E8E8E9E9EBEBECECECECECECEDEDEDEDEDEDEFEFEFEFEFEFEFEFEFEFEFEDEDEDEDECECECECECEBE9E9DEC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B390727172747677777B7C7F818385888C8E90929496999B9EA2A5A7A8ABACB1B2B5B9B9BDBFC0C1C4C5C6C8C9CACBCECFCFD0D0D0D0D3D0D1D3D1D1D0D1CFCFCBCACAC8C6C6C8C5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B3B3B4B5B6B6B6B8B6B8B8B7B7B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C8C9CAC9C9C9C9C9C9CACBCBCBCBCBCACBCECECECFCFD0CFD0CFD0D1D1D3D3D3D3D3D5D5D5D5D6D7D7D6D6D5D5D5D3D5D5D5D5D5D5D5D3D3D1D1D0D0D0D1D1D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D63517171717171717171717171717191919171717171717171717171717171717171717171717171717171717171717171717161616161616161616161615151515151515151515161414141414141414141414151515151515141414141414141414141414141413131313131313131313131313131313131311111212121212121212121111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0000000000000000000000000000000000000000000000000000307A7B7C7D7F8081838486888A8C8E919396989B9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CBCED1D4D7D9DCDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E212000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C1C9D9E4E4E5E5E5E7E7E7E7E8E8E8E9E9EBECECECECECECEDEDEDEDEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEDEDECECECECECEBE9E8E8D7BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB6B6B6D6F7172757778797D7E8184898C8C9094979B9CA1A2A7ABAEB0B2B6B8B9BDBDBFC0C3C3C5C6C8C9C9CBCBCECECED0D1D3D3D3D5D3D1D1D1D1D3D1D1D0D0CECECECECECABAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B2B2B4B7BEC0C1C3C4C6C6C8CACBCBCBCED0D0D1D3D5CDCFC4BFBCB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9D9DADADADADAD9DADADBDBDBDCDEDEDEDEE1E1E1E1E1E1E2E3E3E1E1E2E2E1E1E2E3E1E2E2E3E1E1E1E2E2E2E3E3E3E3E2E3E3E3E3E2E2E1E2E2E1E1E1DFE1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E49F171717171919191919191919191919191919191919191919191919171717171717171717171717171717171717171717171717171717161616161616161616161515151515151515151616141414141414141414141515151515151414141414141414141414141414131313131313131313131313131313131313111212121212121212121211111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0000000000000000000000000000000000000000000000000005757A7B7C7E7F81828486888A8B8E90929497999C9FA2A5A8AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE9E7E5E49900000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F9E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5C1D1E0E4E5E5E5E7E7E7E7E7E8E8E9E9E9EBECECECECECEDEDEDEDEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEDEDEDECECECECEBE9E8E7E7E3C7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B36D68686A6D6E727575787B7E818285888A8E929497999CA1A2A4A5A7ACAEB2B3B5B9BDBFC1C3C4C5C6C9C9CACBCECFD0D3D5D7D7D7D5D6D5D5D5D5D5D3D5D1D3D0CECECFCBCAB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0ABA8A8AEB2B2B3B6B6B9BCBDBFC0C1C1C3C3C5C5C6C6C9C9CACECBCECFD0D0CFD0D1C7C0BBB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCDADADADBDBDADCDCDBDCDEDCDCDEDEDEDEDEDCDEDBDEDEE1DFE1E1E1E3E3E3E4E4E3E6E6E6E6E6E6E6E3E4E6E6E6E6E7E9E7E9E9EAEAE9E9EAE9E9E7E6E6E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DF361719191919191919191919191919191919191919191919191919191919191919171717171717171717171717171717171717171717171717171616161616161616161515151515151515151516141414141414141414141415151515151414141414141414141414141414131313131313131313131313131313131313111212121212121212121111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7500000000000000000000000000000000000000000000000000004D7A7B7C7D7F8082838587898B8D8F929496999C9EA1A4A6A9ADAFB2B5B8BBBEC1C4C7CACDCFD2D5D7DADCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F4F3F2F1EFEEECEAE9E7E5E3480000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F9F9F9F9F9F9F9F9F9F9E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C5D4E5E5E5E5E7E7E7E7E7E8E8E8E9E9EBECECECECECECEDEDEDEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEDEDEDECECECECE9E9E8E7E7E7E5D2B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A707273757577797C7E818285898C8F909397999B9EA1A5A7AAACB0B1B3B5B6B8BBBFC0C3C5C9CACBCED0D1D5D7D9DADADADBDCDEDEDCDBDADBDCDEDBDBDADADADADADAD9D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ADA8ACB1B3B5B8BBBDC0C1C4C5C6C8C9CACACBCBCFD1D0D3D3D5D7D6D9D9DADADBDBDBDBDCDCDCDADCDCD5C7BCB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAD3D3D5D5D3D3D1D0D0D0D0D0D3D5D5D3D5D5D7D6D6D7D7D9D7D7D9D9DAD9DADADBDADBDCDBDBDBDEDEDEDBDADADBDCDBDCDCDCDEDEDEDEDFDFDFDEDEDEDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E39E19191919191919191919191919191919191919191919191919191919191919191919191919191717171717171717171717171717171717171717171716161616161616161616151515151515151515161614141414141414141414151515151514141414141414141414141414141313131313131313131313131313131313131112121212121212121211111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0000000000000000000000000000000000000000000000000000217A7B7C7D7F8081838586888A8C8E919396989B9DA0A2A6A9ABAEB2B4B7BABDC0C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE8E6E4D0000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F8F8F9F9F9F9F9F9F9F9F9F9E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C5D4E5E5E7E7E7E7E7E7E8E8E8E9E9E9EBECECECECECEDEDEDEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEDEDECECECECEBE9E8E8E7E7E5E5E4DCB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E6E6F7173737677797C7F8183888A8D8F9396999B9EA2A5A7AAACAEB2B6B6BBBDBFC3C5C6C9CBCED0D1D5D6D9DADCDCDEDEDCDEDEDFDEDFE1DFE1DFDFE1DEDFDEDEDEDEDBC5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1A7A0A2A5A7A8AAACACB1B2B3B5B9B9BBBDBFC1C4C4C4C5C8C9CACBCFCFD0D0D1D3D3D3D6D7D6D9DAD7D9D7D7D7D6D5D5D2C6BBB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAD5D3D3D3D5D5D5D5D5D3D3D3D5D5D6D5D5D5D6D7D7D7D9DADADBDADCDCDCDEDEDEDEDFDFE1E1E1E1E1E1E1E1E1E2E2E1E1E1E3E3E3E3E3E3E3E3E2E2E3E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEE3A191919191919191919191919191919191919191919191919191919191919191919191919191919191919171717171717171717171717171717171717171717161616161616161616151515151515151515161614141414141414141414151515151514141414141414141414141414141313131313131313131313131313131313131112121212121212121211111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C00000000000000000000000000000000000000000000000000006B7A7B7D7E7F81838486888A8B8E909295979A9C9FA2A5A8ABAEB0B3B7B9BCC0C2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE7E6E4870000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F8F8F9F9F9F9F9F9F9F9F9F9EAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5C3D5E7E7E7E7E7E7E8E8E8E8E9E9E9EBECECECECECECEDEDEDEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEDEDEDECECECEBE9E9E8E7E7E5E5E4E3E1D9B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B168696A6D6D7171757678787C7F818486888C8E9094969B9EA1A4A5A8AAACB0B3B8BBBDBFC1C4C5C6C8C9C9CACECECECECED0D0D0D1D0D1D1D1D1D0D0CECECBCBCACBCAC9B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA9EA0A1A4A5A7AAABAEB1B3B5B5B6B9B9BDBFC0C3C3C4C4C5C6C9CACBCFD0D1D3D3D5D5D7D9DADADADADBDBDBDBDEDEDEDEDEDCDEDCDACDBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBDADADAD9DAD9D7D9D9D9D7D9DADADADADADADBDADADADADADADADADADCDCDEDCDEDEDBDBDADAD9D9DADBDEDCDCDCDCDEDEDEDFDFDEDEDEDEDEDEDEDBDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADAAE191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191717171717171717171717171717171717171717171616161616161616161515151515151515161614141414141414141414151515151514141414141414141414141414141313131313131313131313131313131313131212121212121212121211111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB900000000000000000000000000000000000000000000000000003F7A7B7C7D7F8082848587898B8D8F929497999C9FA1A4A7AAADB0B3B6B8BCBFC2C5C7CACDD0D3D5D8DBDDDFE1E4E6E7E9EBEDEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F6F5F4F3F1F0EEECEBE9E7E5E32D000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9EAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5C3D3E6E8E8E8E8E8E8E9E9E9E9EBEBECECECECECECEDEDEDEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEDEDEDECECECEBE9E9E8E7E7E7E5E4E3E1E0E0D7BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382767879797C7E818388898A8E909396979B9C9FA2A5A8ABAEB1B5B6B9BCBFC3C4C8C9CACACED0D1D5D7D9DADBDBDBDBDCDADBDCDBDEDCDCDCDBDBDBDADAD9D7D6D5D3D3B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B29F94909294999B9C9EA1A2A5A7A8AAABAEB0B1B2B5B6B6B9BBBCBDC0C1C1C3C5C5C5C8C8C9C9CACBCBCBCECFCECECBCECECECFCECECFCFCECECECBC7BBB5B3B3B3B3B3B3B3B3B3B3B3B3B3B9D0D1D1D1D1D0D0D0D0D0D0D0D1D1D3D1D0D0CFCFCECECECFD0D0D1D3D5D5D5D3D5D6D5D6D6D5D6D7D7D9D9D7D9D9D9DADADADADBDADADBDCDCDCDEDEDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDF4719191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919171717171717171717171717171717171717171716161616161616161615151515151515151516141414141414141414141515151515141414141414141414141414141413131313131313131313131313131313131112121212121212121211111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1900000000000000000000000000000000000000000000000000137A7B7C7D7F8081838586888A8D8F919396989B9DA0A3A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D4D7DADCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F4F3F2F1EFEEECEAE9E7E5C700000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9EAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C1D0E6E9E9E9E9E9E9EBEBEBECECECECECECECECEDEDEDEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEDEDEDECECECEBE9E9E8E7E7E7E5E4E3E1E0E0DEDDD4B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3886E70727477787B7D80818386898C8D8F9296999CA1A2A5A8ABACB0B1B3B8B9BDBFC0C4C5C5C8CACACECED0D0D1D3D5D7D6D6D7D7D7D6D7D7D9D7D6D6D6D6D5D5D1D1C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1A1989B9C9FA2A5A7ABACB1B3B6BBBDC0C3C5C8CBD0D0D3D3D5D9DADBDCDEDEDEDFDEDFE1E1E1E1E3E3E2E4E6E6E6E6E6E6E9E9E9E7E9E9E7E7E9E6E6E6E6E6E2CCBCB3B3B3B3B3B3B3B3B3B3B3BCE3E4E4E4E6E4E4E6E4E3E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E2E1E1E1E1DFDFE1E1E1E1E1E1E1E1E1DFDFDFDFDFDEDEDFDFDFDFDFE1E1DFE1E1DFE2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2B619191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191717171717171717171717171717171717171717161616161616161615151515151515151516141414141414141414141515151515141414141414141414141414141413131313131313131313131313131313131112121212121212121211111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000000000627B7C7D7E8081838486888A8C8E909395989A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CBCED1D4D7D9DCDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F7F5F4F3F2F0EFEDEBEAE8E6E4760000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9FAFAFAFAFAEBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9CDE3ECECECECECECECECECECECECECECECEDEDEDEDEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E8E8E7E7E7E5E4E3E1E0E0DEDDDCDACFB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39867686A6D6E6F717275777B7C7F8184898A8C8F9296979B9EA1A5A7AAACB0B1B2B3B3B6B9BDBDBDC0C1C1C4C5C5C5C8C8C8C9C9C9C9CACACACACBCBCACACBCACAC9C9BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B29D8F8F9297999B9C9FA2A4A7A7ABACB0B2B3B8B9B9BCBDBFC0C3C4C5C6C8C9CACACECFD0D0D1D3D3D3D3D5D5D6D3D3D5D6D6D6D7D7D7D7D7D7D9D7D7D6D7D9D7D9D9D9D9C9B9B3B3B3B3B3B3B3B3B3BAD5D5D5D5D3D3D3D1D0D0D1D1D1D1D0D1D1D1D1D1D1D1D1D1D1D1D1D3D3D1D1D5D3D5D7D6D6D7D7D6D6D7D7DADADADADADBDBDBDBDADADADAD9D9D7D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1621919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919171717171717171717171717171717171717171616161616161616161515151515151515161414141414141414141415151515151414141414141414141414141414131313131313131313131313131313131311121212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE300000000000000000000000000000000000000000000000000003A7A7B7C7D7F8082848587898B8D8F929497999C9FA1A4A8AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EEEDEBE9E7E6E41B000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9FAFAFAFAFAFAEBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C7DAEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0EFEFEFEFEDEDEDECECECECE9E9E8E8E7E7E5E5E4E3E1E0E0DEDDDCDAD9D8C8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB6E6F72737676787A7C7D7F8185888A8D909396999B9EA2A5A7AAACAEB0B2B3B5B8BBBFBFC3C5C6C8CACECFD1D1D3D5D5D6D7D7D7D6D9D9DADADADBDADADAD7D5D6D3BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A5908F9094979B9C9FA2A4A5A7A8AAABAEB1B5B8BBBCBDBFC1C4C5C6C9C9C9C9CBCBCECFCFCFCFCFD0D1D1D1D3D1D3D3D3D1D1D1D1D5D6D7D7D7D7D5D5D6D6D6D5D5D6D5D5D5D5D5C4B5B3B3B3B3B3B3B3B8D1D1D1D1D1D1D3D5D5D3D5D5D6D5D5D3D3D1D3D3D5D5D6D6D6D7D7D9DADADADBDADCDCDCDCDCDCDEDBDCDCDCDCDCDCDEDEDEDEDCDBDBDBDBDEDEDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCC619191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919191919191919191919191919191717171717171717171717171717171717171616161616161616161515151515151515161614141414141414141415151515151414141414141414141414141413131313131313131313131313131313131112121212121212121211111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000097A7B7C7D7F8081838586898A8D8F919496999B9EA1A4A6A9ADAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADDDFE1E4E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F6F5F4F2F1EFEEECEBE9E7E5B6000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9F9FAFAFAFBFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C2D5EDEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E8E8E7E7E7E5E5E4E3E1E0E0DEDCDCDAD9D8D6D4BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3696565686A6C6E727477787B7D8184878A8E9093979B9C9FA2A4A5A8ABAEB0B2B6B9BDBFC3C4C6C9C9CACBCECFCFD0D0D3D3D5D5D5D5D6D7D6D5D5D3D3D3D1D3D1D0B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B090888A8E90939497999C9FA1A2A5A7AAACB0B2B5B9BBBDBFBFBFC1C4C4C5C8C8C9C8C9C9CBCECECFD0D0D1D3D5D5D5D5D5D6D7D7DAD9DADADADADADCDEDEDEDEDEDEDEDFDFDFE1DFDEE1DDC4B5B3B3B3B3B3BCD9D9DADADADBDBDBDEDCDCDEDFDFDFDEDEDEDEDEDEDFE1DFE1E1E2E1E1E1E1E1E1E1E1E1DFDEDEDEDEDFE1E2E2E3E2E3E3E4E6E6E6E4E6E4E4E4E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1721919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919191919191919191919171717171717171717171717171717171716161616161616161615151515151515151616141414141414141414151515151514141414141414141414141414131313131313131313131313131313131311121212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0000000000000000000000000000000000000000000000000000587B7C7D7E8081838486888A8C8E919396989B9DA0A2A6A9ABAEB2B4B7BBBDC0C4C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEAE9E6E56C0000000000000000000000000000000000000000000000000007F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9F9FAFAFBFBFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9CCE6F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F3F3F3F3F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E9E8E7E7E7E5E5E4E3E3E0E0DEDDDCDCDAD9D7D6D4D3CFB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E71727577777B7C7E818386898C8D909497999B9EA2A5A5A7AAACB1B2B6B9BBBDC0C1C3C6C9CAC9CBCFCFCFD0D0D3D5D5D5D5D5D5D7D6D5D5D5D3D5D3D1D0D1CFCEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3898C8E8F929397999C9FA4A5A7A8ACB0B2B6B8B9BCBFBFC1C4C6C9C9CBCECED0D1D3D5D6D9DADBDBDEE1DFE1E1E2E1E3E3E3E4E3E3E3E3E3E4E4E4E3E6E4E4E4E6E4E6E6E6E6E7E7E7E9E9E6E6DBBDB3B3B3B3BCE6E6E6E6E6E6E4E6E6E7E7E7E7E9E9E9E7E7E7E9E9EAEAE9E9E9E9E9EAEAEAEAEBEEEEECECECECEEEEEEEEECECEEEEEEEFEEEEEEEEEEEFEFEFF1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E2291A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191919191919191919191919171717171717171717171717171717171717161616161616161615151515151515151614141414141414141414151515151514141414141414141414141414131313131313131313131313131313131311121212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60F00000000000000000000000000000000000000000000000000307A7B7C7E7F8182848588898B8E909295979A9C9FA2A5A8ABAEB0B3B7B9BCC0C2C6C9CBCED1D3D6D9DBDEE0E2E4E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F7F5F4F3F2F0EFEDEBEAE8E6E41B0000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFAFBFBFBFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3DAF1F3F3F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F1F1F1F0F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E9E8E7E7E7E5E5E4E4E3E0E0E0DEDDDCDADAD9D7D6D4D3D0D0C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6F72737576787B7C80808386898C9094979B9C9EA2A4A7AAACAEB2B3B6B8BBBCBFC0C0C3C3C4C6C6C9CACBCECFD0D0D0D3D5D5D3D5D5D5D3D3D1D0CFD0CFCEC5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2917F8185888A8C90909396999B9E9FA4A5A7A8ABAEB2B3B6B9B9BBBDBFC0C4C6C5C8C9C9CBCECECECFD0D3D3D5D5D3D1D3D3D1D0D0D0D1D3D5D5D5D3D5D5D5D5D5D5D5D5D3D3D1D3D1D1D1D1D1D1D1D1D0C1B5B3B3BAD5D6D7D7D7D7D9DADAD9D9D7D7D7D7D9D9D7D7D6D6D7D7D7D9D9DAD9D9DADADADBDCDBDCDEDEDEDEDEE1E1E1E1E1E1E2E2E2E2E1E1E2E3E3E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7991A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919191919191917171717171717171717171717171717171616161616161616151515151515151516141414141414141414141515151514141414141414141414141414141313131313131313131313131313131311121212121212121212111111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000000000000000000000000000000000000000000000000000097A7B7C7D7F8081838587898B8D8F929497999C9FA1A4A7AAADB0B3B6B9BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EEEDEBE9E7E6B60000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9CFE9F5F5F5F3F3F3F3F3F3F3F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F1F0F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E9E8E7E7E7E5E5E5E4E3E1E0E0DEDDDCDCDAD9D8D7D4D4D1D0D0CCCBB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3977677787A7C8183868A8A8D909296979B9CA2A5A5A8ABAEB0B2B3B6B9BDC0C1C5C5C8CACED0D3D5D7D7DADBDCDBDBDCDCDBDBDEDEDEDEDCDBDBDCDBDADAD7D5D3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE82797C7E81838689898E9094979B9B9CA1A2A5A7AAAEB1B3B5B5B9BBBDBFBFC1C3C4C4C5C6C6C9CACBCBCECECFD1D1D3D3D3D3D5D3D5D5D5D6D7D6D6D6D5D7D9D7D7D7D7D7D7D5D5D5D5D7D7D7D9D9DADADAD7D1BBB3BBDBDAD9DADADAD9D7D7D7D9DAD9D7D9DADADADADADADADAD9D9D9D9D9DADADBDCDCDCDADBDADBDBDBDAD9DBDADAD9D9DADBDADADADADADADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1361A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191919191919191917171717171717171717171717171717171616161616161616151515151515151516141414141414141414141515151514141414141414141414141414141313131313131313131313131313131311121212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000000000587B7C7D7F8081838586888A8D8E919396989B9DA0A3A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADCDFE1E4E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F6F5F4F2F1EFEEECEBE9E7E56D000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4DCF3F6F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F0F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E9E8E7E7E7E5E5E5E4E3E1E0E0DEDDDCDCDADAD9D7D6D4D3D1D0CECCCBC9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A06E6E7273767578797B7C7F818488898D8F90929697999C9EA2A5A8AAACAEB2B5B8B8B9BCBCBFBFC3C5C6C6C6C9C9C9C9C9C9C9C9CBC9CBC9C9CBCBCECBCACAC9BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE87868A8C8F929396999B9EA2A5A5ABACB0B3B6B9BCBDC0C1C5C6C9CACBCECED0D3D5D6D7D9DBDBDEDEE1E1DFE1E2E1E3E2E2E2E2E3E3E2E3E3E4E3E3E2E2E1E1E1E1DEDEDEDFDEDEDEDBDEDBDBDADADBDAD9DADAD9D9C1BBDADBDADADBDBDBDEDCDCDCDBDBDBDBDBDBDBDCDEDEDEDFDFDEDEDFDFDEDCDBDBDBDCDEDEDEDEDEDCDBDBDEDEDEDEDEDEDEDEDBDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEAA1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919191919171717171717171717171717171717171716161616161616161515151515151515161414141414141414141515151515141414141414141414141414141313131313131313131313131313131313111212121212121212111111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1900000000000000000000000000000000000000000000000000317A7B7D7E8081838486888A8B8E909395989A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEAE9E6E51B0000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6D0ECF8F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E8E8E7E7E7E5E5E4E4E3E1E0E0DEDDDDDCDADAD9D7D6D4D4D1D0D0CCCCCAC9C7C5B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD747577787B7C7E818183868A8D8F93979B9B9FA2A5A8ACB1B3B5B6BCBDC0C3C3C5C5C9CBCFCFD0D1D3D5D7DADBDBDBDCDBDEDEDFDFDFDEDEDCDBDBDAD9D7D6D5BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD81818386888C8F9093979C9EA2A4A7A8AAAEB1B3B5B9BCBDC1C3C5C9C9CBCFD0D3D5D5D7D9DADBDCDBDCDEDEDFE1DEE1E3E4E3E4E6E6E4E3E3E3E3E2E1E1DFDFDFDFDFDFDEDEDEDFDFDEDEDCDBDBDBDBDBDEDEDEDEDEDEDFD6DEDEDEDFDEDEDEDEDFDEDEDEDEDCDEDEDEDEDCDEDEDEDBDADADBDBDADBDBDBDCDEDEDCDEDEDEDCDEDEDEDBDEDBDEDEDCDCDBDBDBDEDCDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDE5A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191919191919191717171717171717171717171717171716161616161616161515151515151515161414141414141414141515151515141414141414141414141414141313131313131313131313131313131311121212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000097A7B7C7D7F8082848587898B8D8F929497999C9FA2A5A8AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDDE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F7F5F4F3F2F0EFEDEBEAE8E6B60000000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFAFBFBFBFBFCFCEEB3B3B3B3B3B3B3B3B3B3B3B3B3BEDBF5F9F9F8F8F8F8F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F0F0F0F0F0F0EFEFEFEDEDEDECECECECEBE9E8E8E7E7E7E5E5E4E4E3E1E0E0DEDDDCDCDADAD9D8D7D6D4D3D1D0CECCCBC9C7C7C5C3BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B36D6F727375777A7C7E818385868A8D8F929496999C9FA2A5A8ABAEAEB1B3B6B9BDBFC3C4C5C8C9CAC9CECFCECFD1D0D0D0D1D1D1D1D3D1D1D1D0D0D0D0D1CFCEBAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A47C7D7E81838489898E909497979C9FA2A4A5A8ABAEB1B3B5B8BCBDBDC0C3C4C6C6CAC9CBCECFD1D1D0D3D5D6D5D7D6D9D9D9D9DADBDBDBDBDCDEDFDFDEDFE1DFE1DFDEDCDEDCDCDEDBDAD9D9DADBDADAD9DAD9D9DADADADADADADBDBDADADADADADADADADBDBDBDBDADBDBDCDEDCDADADADCDCDEDEDFE1E1E1E1DFDFE1E1E1E3E3E2E2E1DFDFE1E1E1E1E1DFE1E2E3E4E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEE01B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919191917171717171717171717171717171717161616161616161615151515151515151614141414141414141415151515151414141414141414141414141413131313131313131313131313131313111212121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30000000000000000000000000000000000000000000000000000587B7C7D7F8081838587898A8D8F919496999B9EA1A4A7AAADAFB2B6B8BCBFC1C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBE9E7E66D0000000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFBFCFCFCEEB3B3B3B3B3B3B3B3B3B3B3CCE7F9F9F9F9F9F9F9F9F8F8F8F8F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F1F1F1F1F0F0F0F0F0F0EFEFEFEDEDECECECECEBE9E9E8E8E7E7E7E5E5E4E3E3E0E0E0DEDDDCDCDADAD9D8D7D6D4D3D1D0D0CCCCCAC9C7C5C4C3C1BEB4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B377757577787C7C818386888C8E9093969B9C9FA2A5A8ACB0B2B5B6BBBDC1C4C4C5C6C8C8CACACBCBD0D0D0D3D5D5D6D7D7D7D7D9D9D9D9D9D9DADAD7D9D6D5D3BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD807D80828386898C8F909297999CA1A4A5A7ABACB0B3B9BBBDBFC3C4C5C6C9CBCED0D0D3D5D7DADCDEDCDEDFE1E1DFE1E1E3E3E3E3E3E3E2E2E1E1E1E2E3E3E3E2E2E3E4E4E6E6E6E6E6E6E6E4E3E3E3E2E1E3E3E3E3E1E1E1E2E1E1E1DFDEDEDCDEDEDEDEDCDBDBDBDADBDBDBDBDADADADADADADAD9DADADADBDAD9D9D7D9DAD7D7DAD7D7D6D7D6D6D5D3D3D1D1D3D5D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6761B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191919191917171717171717171717171717171717161616161616161615151515151515151614141414141414141415151515141414141414141414141414141313131313131313131313131313131313111212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000000317B7C7D7E8081838486888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADCDFE1E4E6E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE9E7E51C0000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFCFCFCFCEEB3B3B3B3B3B3B3B3B9D6F5FBFBFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F7F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F1F1F1F0F0F0F0F0F0EFEFEFEDEDECECECECEBE9E9E8E7E7E7E5E5E5E4E3E1E0E0E0DEDDDCDCDADAD9D8D7D6D4D3D1D0D0CCCCCBC9C7C5C5C3C1C0BEBDB4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B381797B7E818386888A8D90929497999B9EA2A4A7ABAEB1B3B8BCBDC1C3C5C5C9CBCED1D5D5D9DADBDEDFE1E1E3E4E3E3E6E4E3E3E4E3E2E2E1E1DEDEDEDCDAD7B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B17D77787D7E818387898A8E929396999CA1A4A5A8AAACB1B3B6B9BCBCBFC0C3C5C8C8CACECFD0D3D1D3D5D7D7D7D9D9D9DADADADBDBDEDEDFDFDEDFDFDEDEDFDFE1E1E1E1E1DFDFE1E1E1DEDEDCDBDBDBDCDCDCDCDCDBDBDBDBDADADADBDBDCDCDCDEDEDEDEDEE1E1E1E1E1E1E3E3E3E3E3E3E2E2E2E1E1E2E2E3E3E3E3E3E3E3E3E4E6E7E7E6E7E7E6E4E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3291B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919171717171717171717171717171717171616161616161616151515151515151616141414141414141414151515151414141414141414141414141413131313131313131313131313131313111212121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000097A7B7C7E7F81838486888A8B8E909295979A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F1EFEEECEAE9E7B70000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFCFCFCFCEEB3B3B3B3B3B3C4E1FCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F1F1F1F0F0F0F0F0EFEFEFEDEDECECECECEBE9E8E8E7E7E7E5E5E4E4E3E1E0E0DEDEDDDCDADADAD9D7D6D4D4D3D1D0D0CCCCCBC9C7C7C5C4C1C1BEBDBBB9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38675777B7B7E818388898D8F929497999CA1A4A5A7ACB0B2B5B6B9BBBDC0C0C3C5C6C9CBCBCBCED0D1D3D3D5D6D7D7D7D9D7D9D7D7D7D7D7D6D5D5D3D3D0D0CFB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3806F7376777B7D818286888C8E909397999B9CA2A4A7AAACB0B2B6B9B9BBBDBFC1C4C5C9C9CBCED0D0D3D3D5D7D7D7D7DAD9DBDBDCDEDFDFE1E1E1E1E1E1E2E2E2E3E3E1E1E1E2E2E3E3E6E6E4E4E3E2E2E2E3E3E3E2E1E1DEDEDEDEDEDCDEDEDCDEDEDEDEDCDEDEDCDCDCDEDEDEDEDCDCDCDBDCDCDADCDCDCDCDCDADBDBDBDCDCDEDEDEDEDEDEDEDEDBDCDCDBDBDBDBDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4A71B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919171717171717171717171717171717171616161616161616151515151515151616141414141414141415151515151414141414141414141414141413131313131313131313131313131313111212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0000000000000000000000000000000000000000000000000000587B7C7D7F8082848587898B8D8F929497999C9FA1A5A8AAADB0B3B6B9BCC0C2C5C8CBCED1D3D6D9DBDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE8E677000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCEEB3B3B3B6CDEEFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F1F1F1F0F0F0F0F0EFEFEFEDEDECECECECE9E9E8E8E7E7E7E5E5E4E3E3E0E0E0DEDDDCDCDADAD9D9D7D6D4D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C0BDBDBAB9B7B5B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F72737577787B7D80818486898A8E8F9094979B9EA1A2A5A7ACAEB0B1B2B5B8B8BCBFC1C1C1C5C5C5C5C6C8C6C8C9C9CACACACBCECFCFCECFCECFCBCBCBC9B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3997C7D81838589888C8E8F93979B9CA1A2A5AAABB0B2B3B6B9BDBFC1C4C6C8C8CACED0D1D3D5D9D9DADCDEDEDEDFE1E1E3E2E2E2E3E3E4E3E3E3E4E4E4E3E3E2E1E1E1DFDFDFE1DFDEDEDCDEDCDCDBDBDCDBDADBDBDBDBDBDCDCDEDCDCDEDEDEDFDEDEDEDEDEDEDEDEDCDCDEDEDEDEE1E1DEDEE1E1DFDEDCDCDCDEDEDEDEDEDEDEDBDBDEDEDEDEDEDEDEDEDBDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDE521B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191919191717171717171717171717171717171716161616161616151515151515151516141414141414141414151515151514141414141414141414141413131313131313131313131313131313111212121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000003A7B7C7D7F8081838586898A8D8F919496999B9EA1A4A6AAADAFB3B6B9BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EFEDEBEAE7E62E0000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCEEB3B9D9F6FCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F3F3F3F3F3F1F1F0F0F0F0F0EFEFEFEDEDECECECEBE9E9E8E7E7E7E5E5E5E4E3E1E0E0E0DEDDDCDCDADAD9D8D7D6D4D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C0BEBDBBB9B7B7B5B3B0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38E76767A7B7D7F818386898C8E909397979B9EA1A4A7AAACB1B2B6B8B9BCBCBFC1C3C4C5C8C8C9CBCFD0D3D5D5D5D5D3D5D5D5D3D6D5D3D1D1D1D1D1D0D0CFCEB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD7676797B7E818386888D909093979B9C9FA2A5A8ABACB1B2B5B8BCBDC0C1C4C5C6C9CBCBCFCED0D3D3D1D3D5D5D5D6D6D7D7D7DADBDCDCDCDBDEDEDEDEE1E1E1E1DEDEDEDEE1E1E1E1E1DFDFDFDFDFE1DFDEDEDEDEDEDEE1E1E1E3E2E2E2E1E1E2E2E1E2E2E2E2E2E1E1E2E2E2E2E1E2E2E3E3E4E4E3E4E6E6E6E6E4E6E6E4E4E6E4E6E4E6E6E6E6E7E6E7E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2CC1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191917171717171717171717171717171717161616161616161515151515151515161414141414141414141515151514141414141414141414141414131313131313131313131313131313131112121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000000F7B7C7D7E8081838486888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADDDFE1E4E6E7E9EBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE9E7C90000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCF3E5FCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F6F6F5F5F5F5F5F5F5F5F3F3F3F3F1F1F1F0F0F0F0EFEFEFEDEDECECECEBE9E9E8E7E7E7E5E5E4E4E3E1E0E0DEDDDDDCDADADAD9D7D6D6D4D3D1D0D0CECCCCCBC9C7C7C5C4C3C1C1BEBDBBBAB7B7B5B4B2B1AFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39978787D7F818387898C8F9093979B9EA1A5A7ABB0B1B5B8BBBCC0C3C4C6C9CACBCFD0D3D5D6D7DADADCDCDEDEE1E1E3E3E3E4E6E7E7E6E3E3E3E1E2E1DFDEDEB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38B7F8181828386898A8D909496999C9EA2A5A7A8ABAEB1B3B8BBBCBFC3C3C5C9CACECFD1D3D3D5D6D9D9DCDCDFDFE1DFE1E1E1DFE1E1E1E2E1E1E1E1E1E2E2E2E1E1E1E1E1E1E1E2E1DFDFDFDEDEDEE1DEDEDEDCDEDFDFDEDEDEDEDEDCDBDBDADAD9D7D7D7D6D6D7D9D9D9DADBDADADADADBDCDBDBDADADADADADADADADADADAD9D9D9D9D9D9D7D7D7D7D7D5D5D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5751B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191917171717171717171717171717171717161616161616161515151515151515161414141414141414141515151514141414141414141414141414131313131313131313131313131313131212121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0000000000000000000000000000000000000000000000000000627B7C7E7F81838486888A8B8E909295979A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEECEAE9E780000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F7F6F6F6F6F5F5F5F5F5F5F5F3F3F3F3F1F1F0F0F0F0EFEFEFEDEDECECECEBE9E8E8E7E7E7E5E5E4E3E3E0E0E0DEDDDCDCDADAD9D8D7D6D4D4D3D1D0D0CCCCCBCAC9C7C7C5C4C3C1C1BEBDBDBAB9B7B5B4B3B1B1ADAEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B397757778797B7E8186898C8E909292979B9B9EA2A4A5A7A8ACB0B2B5B8B9BBBFC1C3C4C6C8CACACFD0D3D3D5D5D6D7D7DADBDCDCDCDCDEDCDCDCDBDCDADADAD7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3747577797C7D7F818386898A8D8F9294979B9C9FA4A7A8ABACB1B5B8BBBDC0C1C5C5C6C8CACED0D0D1D3D3D5D6D7D7D9D9DADADBDBDCDEDFE1E1E2E1E2E2E1E1E2E3E2E3E3E3E3E3E2E2E3E3E3E3E2E3E3E4E4E6E6E4E6E6E6E6E6E4E6E6E4E4E6E4E6E4E6E6E6E6E6E6E6E6E6E7E7E6E6E6E6E4E4E4E6E6E4E3E3E4E4E3E3E2E3E4E3E2E3E3E4E6E4E3E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDE321B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191919171717171717171717171717171717171616161616161615151515151515161614141414141414141515151515141414141414141414141414131313131313131313131313131313131112121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000407B7C7D7F8082848587898B8D8F929497999C9FA1A5A8AAADB0B3B7B9BDC0C2C5C9CBCED1D4D7D9DCDEE0E2E5E7E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEAE8E63F0000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F6F6F6F5F5F5F5F5F5F3F3F3F3F1F1F1F0F0F0EFEFEFEDEDECECECEBE9E8E8E7E7E7E5E5E4E3E1E0E0DEDEDDDCDADADAD9D7D7D6D4D3D1D0D0CECCCCCBC9C7C7C5C5C4C3C1C0BEBDBBBAB9B7B6B4B3B1B1AFACAAAEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D767B7D81838688898D8F9294979B9C9FA4A5A7ABAEB1B3B6B8BBBDC3C4C6C9C9CECFD1D3D5D5D7D9D9DADBDBDEDCDFDFE1E1E2E1E2E1DFDFDFDEDEDCDBDAD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37B6F73757677787B7C80818589898C9092969B9C9FA4A4A7AAACB1B3B5B9B9BCBFBFC1C4C5C9C9C9CBCBCECECECECECFD0D0D0D0D0D0D1D3D5D6D7D7D7D7D7D6D7D9DADAD9D7D7D9D7D7D7D7D9DADADBDBDADADADAD7D7D9DADAD9D7D7D7D6D6D5D7D7D6D7D9D9D9D9DADADAD9D9D9DAD9D7D9DADADADADAD7D7D7D7D7D7D7D6D6D7D7D7D7D9D9D9D7D7D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEAA1B1B1B1B1B1B1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191919171717171717171717171717171717161616161616161615151515151515161414141414141414141515151514141414141414141414141414131313131313131313131313131313131212121212121212121111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000187B7C7D7F8081838587898A8D8F919496999B9EA1A4A6AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEBEAE8DD0000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9F9FBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F7F6F6F6F6F5F5F5F5F5F3F3F3F3F1F1F0F0F0F0EFEFEDEDECECECEBE9E8E8E7E7E7E5E4E4E3E1E0E0DEDDDCDCDADAD9D8D7D6D4D4D3D1D0D0CECCCCCBC9C7C7C5C4C3C1C1C0BDBDBBBAB7B7B6B4B3B2B1AFADABA9A8AFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A678787C7E808184888A8C8F929497999B9FA2A5AAACB1B1B5B8BBBFC1C3C5C5C6C9CACBCBCED0D1D3D3D3D5D7D7D7D9D9DADADBDAD9D7D6D6D5D3D3D5D5D1D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A56B6D6F727375777B7B7F8386888C8F9296999B9CA2A5A5AAACB1B3B6B8BBBFBFC1C4C5C6CACACED0D3D5D6D7DADADBDCDBDEE1E1E2E3E4E3E6E4E6E6E4E3E4E4E6E6E4E6E6E6E6E6E6E3E3E3E6E4E4E4E3E4E6E6E4E4E3E3E2E2E3E3E3E3E3E3E3E3E3E2E3E3E3E4E6E6E7E6E6E7E7E6E4E6E6E6E6E6E4E4E3E3E2E3E3E2E2E2E3E3E4E3E4E4E3E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4641B1B1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191717171717171717171717171717171616161616161615151515151515151614141414141414141515151515141414141414141414141414131313131313131313131313131313131112121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0000000000000000000000000000000000000000000000000000717C7D7E8081838486888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBFC1C4C7CACDD0D3D5D8DBDDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EFEDEBE9E79B000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F8F8F8F7F7F6F6F6F5F5F5F5F5F3F3F3F1F1F0F0F0F0EFEFEFEDECECECEBE9E8E8E7E7E5E5E4E4E3E0E0E0DEDDDCDCDADAD9D8D7D6D4D3D3D1D0D0CCCCCBCAC9C7C7C5C4C3C1C1BEBDBDBAB9B7B7B5B4B3B1B1AFADABAAA8A7A4B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A67B7C7E81848688888C8F9396979B9C9EA2A7AAAEB0B3B6B9BCBDC0C3C5C6C8CACBCFD0D3D5D5D7D7DBDBDEDFE1E3E3E6E6E9EAEAEAEAE9EAE9E9E9E7E6E2E3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38573767778797C7E81818488898C8F9094979B9CA1A2A5AAABB0B1B5B6B9BFC0C1C4C5C9CACBCECFD1D3D3D5D6DADADBDEDCDEDEDEDEDEDFDEDEDEDEDFE1E1E1E3E3E2E2E2E2E2E2E2E1E1E2E3E4E6E7E6E4E4E4E6E6E7E9E9E9E9E9E9E9E7E7E7E9E7E6E6E6E6E6E7E6E7E7E7E7E9E9E9E9E9E9E9E9E9E7E6E6E9E9E9E9E9EAE9E9E9E7E7E7E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2EA251D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191917171717171717171717171717171716161616161616151515151515151616141414141414141415151515151414141414141414141414141313131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000004E7B7C7E7F81838486888A8B8E909295979A9DA0A2A5A8ABAEB2B4B8BBBDC1C4C6C9CDCFD2D4D7DADCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE9E75C0000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F8F8F8F7F6F6F6F5F5F5F5F5F3F3F3F1F1F0F0F0EFEFEFEDECECECEBE9E8E8E7E7E5E5E4E3E3E0E0E0DEDDDCDADADAD9D7D6D4D4D3D1D0D0CECCCCCBC9C7C7C5C5C4C3C1C0BEBDBDBAB9B7B7B5B4B3B1B1AFADABAAA9A7A5A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6787B7C7F8386898C8E909294999B9C9FA2A7AAAEB1B2B5B8BCBDC0C1C4C8C9CBCED3D1D6D6D9D9DADADBDBDCDEDEDFE1E1E1E1E1DEDEDEDFDEDEDCDADADADAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B175737578797C7D7F8183878A8C8F9094979B9EA2A5A7ABACB1B3B6BBBCBDC0C1C3C5C6C8C9CACECFD0D1D5D5D5D7D9D7D9DADBDCDBDCDCDEDEDEDEDEDFDFDFDFDFDFDFDFDFE1E1E1E1E1DFE1E1DFDFDFDFE1E1E2E2E3E4E4E4E3E3E3E2E2E3E1E1DFDFDFE1E1E2E1E2E3E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E3E3E4E4E4E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1961D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191917171717171717171717171717171716161616161616151515151515151614141414141414141415151515141414141414141414141414141313131313131313131313131313131112121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000277B7C7D7F8082848588898B8D8F929497999C9FA2A5A8ABAEB0B4B7BABDC0C3C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFEEECEAE9E71C00000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F8F8F8F7F7F6F6F5F5F5F5F5F3F3F3F1F0F0F0F0EFEFEDEDECECEBE9E8E8E7E7E5E5E4E3E3E0E0DEDDDDDCDADAD9D8D7D6D4D4D3D1D0D0CCCCCBCAC9C7C7C5C4C3C1C1BEBDBDBBBAB9B7B7B5B4B3B1B1AFADABAAA9A8A5A4A2A2ACB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6787B7D81818386898C8D909096979B9CA1A5A7A8ABACB1B3B8B9BDBFC1C3C5C9CACBCFD1D1D5D7D7D7D9D9D9D7D7D7D7D7D6D7D9D9D9D7D7D6D6D6D5D6D3D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39C757676797C7E8183868A8A8E909397999B9FA2A5A7ABAEB1B5B6B9BCC0C1C4C6C9CBCFD1D3D7D9DADADBDEDEDEE1E1E2E3E4E6E6E7E7E7E7E9EAEAEBEBECECECEBEBEBECEEEEEEEEEEECECEBECECECECEEEFEFEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEEFEFEFEFEFF1F1F1F1F1F2F1F1F1F2F1EFEFEFEFEFEEEEEEEEEEEFEFF1F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1521D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919171717171717171717171717171717161616161616161515151515151516141414141414141415151515151414141414141414141414141313131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000000A7B7C7D7F8081838587898B8D8F929496999C9FA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E6E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFFFF
-FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEAE8C10000000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F8F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0EFEFEFEDECECECE9E9E8E7E7E5E5E4E3E1E0E0DEDDDCDCDADAD9D8D7D6D4D3D1D0D0CECCCCCBC9C7C7C5C5C4C3C1C1BEBDBDBAB9B7B7B6B5B3B2B1B1AFADABAAA9A8A5A4A3A2A09FB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6787B7D7F8285888A8D90929496999B9EA1A2A5A7AAACB0B2B5B9BBBDBFBFC3C5C8C9CACED0D1D1D3D5D6D7D7D7D9D9DBDBDCDEDCDEDEDCDBDADBDADAD9D7D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6B6D6F72767677787C7D818386898C8E909296979B9EA1A2A4A5A8ACAEB1B3B3B6B6B9BBBDC0C0C0C1C3C1C4C5C5C6C9CACBCBCECED0D0D1D1D3D3D5D5D7D6D6D6D5D3D5D5D5D3D5D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDBDBDBDBDCDEDEDBDBDBDBDBDBDEDEDEDEDEDEDEDFDFDEE1E1DFDFDFDEDFDFE1E1E2E1E2E3E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCCF1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919171717171717171717171717171716161616161616151515151515151616141414141414141415151515141414141414141414141414141313131313131313131313131313131112121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000005E7C7D7E8081838586888A8D8F919396989B9EA1A4A6A9ADAFB2B6B8BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF
-FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEBEAE878000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F8F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0EFEFEDECECECEBE9E8E7E7E5E5E4E3E3E0E0DEDDDCDCDADAD9D7D6D4D4D3D1D0D0CCCCCBCAC9C7C7C5C4C3C1C1C0BEBDBBBAB9B7B7B5B4B3B1B1AFADACABAAA8A7A5A4A3A2A0A09CB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7828386898C8F909296979B9EA2A5A7AAACB0B1B5B8BBBDC1C3C4C8CACBCED1D3D5D6D7D7D9D9DCDCDEDEE1E1E2E3E3E4E4E4E3E4E4E4E4E3E2E1DEDEDEDEDCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B373717273757678797C7F8183878A8C8D8F93979B9C9FA4A5A7A8ACB1B2B5B8BBBCBDC0C3C5C8C9C9C9CACED0D3D1D5D3D5D5D6D7D9D9DADADADADADBDADBDBDEDEDEDCDBDEDEDEDFDEDEDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1DFDFDFDEDEDEDEDEDBDBDBDEDEDEDEDEDEDFDFDFDEDFE1E1E1E1E1DFE1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E18C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191717171717171717171717171717161616161616161515151515151516141414141414141414151515151414141414141414141414141313131313131313131313131313131312121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000003A7B7D7E7F81838486888A8C8E919395989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DBDDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF
-FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EFEDEBE9E73700000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAF9F9F9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F3F1F0F0F0EFEFEDEDECECEBE9E8E7E7E7E5E4E3E3E0E0DEDDDCDCDADAD9D7D6D4D4D3D1D0D0CCCCCBC9C7C7C5C5C4C3C1C1BEBDBDBAB9B7B7B6B5B4B3B1B1AFADABAAA9A8A7A5A3A2A2A0A09E9CA8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A786878A8C8E8F9397999C9FA2A5A7ABAEB2B5B8BBBCBFC1C5C5C6C8CACBCED0D1D3D5D5D6D7D7D7D9DADBDBDCDEDEDFDEDEDFDEDEDCDCDBDBDBDAD9D9D6D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B16E71727375777A7C7E818285898C8E8F93979B9CA1A2A5A8ABACB0B3B5B8B9BCBDC0C3C5C9CACBCBD0D1D1D1D6D7DADADBDBDBDBDCDEDFDFDEDCDBDBDBDBDEDEDEDEDEDEDEDEDEDBDBDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E3E4E4E4E4E3E3E3E3E4E6E7E7E6E7E7E6E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDE431D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191717171717171717171717171717171616161616161615151515151515161414141414141414151515151514141414141414141414141413131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE00000000000000000000000000000000000000000000000000147B7C7D7F8082848588898B8E909294979A9C9FA2A5A8ABAEB1B4B7BABDC0C4C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF
-FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE9DE0000000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F1F0F0F0EFEFEDECECECE9E8E8E7E7E5E4E4E3E0E0DEDDDCDCDADAD9D7D6D4D4D3D0D0CECCCCCBC9C7C7C5C4C3C1C1C0BEBDBDBAB9B7B7B5B4B3B2B1B1ADACABAAA9A8A5A4A3A2A2A09E9D9C9AA1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D80818385898A8D8F9294999B9B9EA2A4A7A8ACB1B2B5B6B8BCBFC1C4C5C5C8CACACACECFD0D0D1D3D6D6D7D9D9DADADADBDBDADADAD9D9D6D7D6D3D1D1D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A56E71737576777B7B7F818286898A8E9093969B9CA1A4A4A7ABACAEB1B2B5B6B9BCBFC0C3C4C4C8C9C9CACECECFD3D5D5D5D7D7D7D7D7D9D9D9D9D9D9DADADBDBDBDCDBDCDBDBDCDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9C21D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191717171717171717171717171717161616161616161515151515151516161414141414141414151515151414141414141414141414141313131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F00000000000000000000000000000000000000000000000000717C7D7F8082848587898B8D8F929497999C9FA1A5A8AAAEB0B3B7B9BDC0C3C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF
-FFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEECEAE9A7000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F0F0F0EFEFEDEDECECEBE9E8E7E7E5E5E4E3E0E0DEDDDCDCDADAD9D7D6D4D3D1D0D0CECCCBCAC9C7C7C5C4C3C1C1BEBDBDBBBAB7B7B6B5B4B3B1B1AFADABAAA9A8A7A5A4A3A2A0A09E9D9C9A999FB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3838586888A8E90929396979B9EA2A2A7AAACB1B2B5B8BCBDC0C3C4C5C8C9CBCED0D0D3D3D7D7D7DAD9DADADADADBDBDADBDADADBDEDEDEDEDBDCDBDBDBDBDAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3957072747577797B7E80818688898E8F9097999C9EA1A5A7ACAEB2B5B6BBBDC0C3C4C5C9CACBCFD0D1D5D5D9DADBDCDEDEE1E1E1E2E3E2E3E3E3E3E3E3E4E4E4E3E3E4E4E3E3E2E3E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7811D1D1D1D1D1D1D1D1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191917171717171717171717171717171616161616161615151515151515161414141414141414151515151514141414141414141414141413131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5500000000000000000000000000000000000000000000000000537C7D7F8081838586898A8D8F919496999B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E6E9EAECEEEFF1F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFF
-FFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEAE8650000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F0F0F0EFEFEDECECEBE9E8E7E7E5E5E4E3E0E0DEDDDCDCDADAD9D7D6D4D3D1D0D0CCCCCBCAC7C7C5C5C4C3C1C0BEBDBDBAB9B7B7B5B4B3B2B1B1AFADABAAA9A8A5A4A3A2A2A0A09E9C9A999897A4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39A7E80828586898A8D9093979B9C9FA2A5A7A7ABAEB0B2B6B9BBBFC0C1C3C5C5C6C9CECECFD0D1D5D6D7D7D7D7D7D7D9DADADADADBDBDADADADADBDADAD9D7D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3936A6D6E70737677787C7F818286898C8E9093979B9C9FA2A5A7ABAEB1B3B5B8B9BDC0C3C5C9CACBCED1D0D1D6D7D9DADADADCDADADBDEDFDFDFDEDEE1E1E2E4E3E4E4E4E4E4E4E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1441D1D1D1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919171717171717171717171717171716161616161616151515151515151614141414141414141515151514141414141414141414141413131313131313131313131313131313121212121212121211111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000002C7C7D7E8081838486888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC1C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEBEAE82500000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0F0EFEDEDECECE9E9E8E7E7E5E4E3E1E0E0DEDCDCDADAD9D7D6D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C1C0BDBDBBBAB9B7B6B5B4B3B1B1AFADACABA9A8A7A5A4A3A2A0A0A09E9C9A99989796ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D838689898C8E909396999B9CA2A2A5A7AAACAEB1B3B5B8BBBDBFC1C1C5C5C9C9CACBCFD0D0D0D1D5D6D7D6D7D9DBDBDBDCDEDCDEDCDAD9DAD9D7D7D5D3D0CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C70727575787B7D7F818388898E9096999CA1A4A8ACB0B2B5B6BDBFC1C5C6C9CACECFD1D3D5D7D9DBDEDCDFE3E3E4E4E6E6EAEAEAEAEBECEBECEEECEBEBEBECECECECEBEBEBECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6D01D1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191917171717171717171717171717171616161616161615151515151515161614141414141414141515151514141414141414141414141413131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED000000000000000000000000000000000000000000000000000F7B7C7E7F81838486888A8C8E919395989A9DA0A2A6A9ABAFB2B4B8BBBEC1C4C7CACDCFD2D5D8DBDDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EFEDEBE9D50000000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0EFEFEDECECEBE9E8E7E7E5E5E4E3E0E0DEDDDCDADAD9D7D6D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C1BEBDBDBAB9B7B7B5B4B3B2B1B1AFADABAAA9A8A5A4A3A2A2A0A09E9D9C9A999795959BB0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39383868A8E8F9393979B9EA2A4A7A7ABACB1B3B5B9BBBDBFC1C3C4C6CACACECED0D0D3D3D6D7D7D7D7DAD9D7D9DAD9D7D9D9D9D7D7D9DADAD9D9D6D7D7D7D6D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38772757777797B7D7E8183888A8C8E9094979B9C9EA2A5A8A8AEB1B3B9BBBCBDC0C3C4C6CACBD0D1D5D5D6D7DADBDADADBDBDCDEDEDFDFE1DFDFDFE1E1E1E1E1DFDEDEDEDEDBDBDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADA811F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919171717171717171717171717171716161616161616151515151515151614141414141414141515151514141414141414141414141413131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35000000000000000000000000000000000000000000000000006C7C7D7F8082848588898B8E909294979A9C9FA2A5A8ABAEB1B4B7BABDC0C4C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE99D0000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEFEDECECEBE9E8E7E7E5E4E3E0E0DEDDDCDADAD9D7D6D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C0BEBDBDBAB9B7B7B5B4B3B1B1AFADACABAAA8A7A5A4A3A2A2A0A09E9C9A999997959593A4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3907E8283868A8C8E9093979B9C9EA2A5A7A8ABACAEB0B3B5B9B9BFBFC1C3C4C6C9CBCBCFD0D1D3D5D6D7D7D7D7D7D7D9D9D9D9D9DADAD9D7D6D5D5D5D5D5D5D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382696A6D6F737576777B7D7F818286898E90939697999C9FA1A2A5A7AAAEB1B3B6B8BBBDBFC0C3C3C5C6C6C8C9CBCBCECECFD0D0D0D1D1D3D3D6D7D7D7D9DADBDBDBDEDEDEDCDCDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEE471F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191717171717171717171717171717161616161616161515151515151616141414141414141415151515141414141414141414141414131313131313131313131313131313111212121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000457C7D7F8082838587898B8D8F929497999C9FA1A4A8AAADB0B3B7B9BDC0C3C6C9CBCED2D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEECEBE95300000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEDECECECE9E8E7E7E5E5E3E1E0E0DDDCDCDAD9D8D6D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C0BEBDBBBAB9B7B6B5B4B2B1B1AFADABAAA9A8A7A5A4A3A2A0A09E9D9C9A9998979595939CB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38D8A8C8E90929697999B9C9EA1A4A5A8ABB1B1B5B6B9BCBFC3C5C6C9CBCBCFD0D1D3D3D3D5D6D9DADADADADBDEDEE1E1E1E1E1DEE1E1E1E1E1DEDEDBDADAD9D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3867072757778787C7E818386888C8F9094979B9CA1A4A7ACAEB2B5B8BBBBBDC0C3C5C8CACBCFD0D3D6D6DADBDCDEDFDFE1E1E3E3E3E3E4E4E4E6E6E4E6E7E9E9E9E9E9E9E6E6E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2CB1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919171717171717171717171717171716161616161616151515151515151614141414141414141515151514141414141414141414141413131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD900000000000000000000000000000000000000000000000000287C7D7E8081838586898A8D8F919496999C9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED1D4D6D9DCDEE0E2E5E7E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFEEECEAE91C00000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F3F3F3F1F0F0EFEFEDECECEBE9E8E7E7E5E4E3E0E0DEDDDCDADAD8D7D4D4D1D0D0CCCCCBC9C7C7C5C4C1C1C0BDBDBBB9B7B7B6B4B3B2B1AFADACABAAA9A8A5A4A3A2A2A0A09E9C9A9A99979595959396ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38E90929497999B9C9FA2A5A7AAACB1B2B6B8BCBDBFC1C4C5C9C9C9CACED0D3D3D5D5D9D9DADADADADADADADADADADCDBDBDAD9DAD9D9D7D6D7D5D3D5D3D1D1D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6D7071737577787B7C818386888C8E9296999C9EA1A4A7AAABAEB1B3B5B9BBBFC0C3C6C6CACACECFD1D1D3D5D5D6D6D7D7D7D7D9DADCDBDBDBDEDEDEDEDEDFE1E1E1E1E1E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDB8A1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191717171717171717171717171717161616161616161515151515151616141414141414141415151515141414141414141414141414131313131313131313131313131313111212121212121212111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0000000000000000000000000000000000000000000000000A7B7D7E8081838486888A8C8E919396989B9DA0A4A6A9ACAFB2B6B8BCBFC2C5C7CBCED0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEAD60000000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F3F3F1F1F0F0EFEFEDECECE9E8E7E7E5E4E3E1E0DEDDDCDADAD9D7D6D4D3D0D0CCCCCBC9C7C7C5C4C1C1BEBDBDBAB9B7B7B5B4B3B1B1AFADABAAA9A8A7A5A4A3A2A0A09E9D9C9A9998979595939396ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B387898C8E90939396979B9C9FA2A5A7AAACB0B1B5B8B9BBBDBFC0C0C4C4C8C9C9CACBCECFD0D0D1D3D5D3D5D5D5D6D7D6D6D7D9DAD9D7D7D6D7D7D7D7D7D6D5D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F72737677797C7E818184878C8E909397999C9EA1A5A8ABAEB1B3B6B8BCBFC1C4C6CACBCFD1D5D7D7DADCDEDCDFE1E1E2E3E3E3E4E4E6E6E6E6E9E7E7E7EAE9EAE9EAEAEAEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9571F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191917171717171717171717171717161616161616161515151515151516141414141414141415151515141414141414141414141414131313131313131313131313131313111212121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C00000000000000000000000000000000000000000000000000677C7D7F81838486888A8C8E919396989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEBEA9D0000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0F0EFEDECECEBE9E8E7E7E5E4E3E0E0DEDCDCDAD9D7D6D4D3D1D0CECCCBC9C7C7C5C4C3C1BEBDBDBAB9B7B7B5B4B3B1B1AFADABAAA9A8A5A4A3A2A2A0A09E9C9A9A9997959595939296ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A780818186898C8D90929697999C9CA1A4A5A8AAACB1B2B5B8B9B9BBBCBCBDC0C3C3C3C4C5C6C8C8C8C8C9CACBCBCBCBCBCECECECECFCFCECECFCFCECBCBCACACAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3826A6C6E6F727575787B7C808184898C8E9094999C9CA1A4A5A7ABACB0B2B5B8B9BDBFC0C3C4C5C6C9CBCECFCFD1D1D3D6D6D9D9DADADADBDADBDBDCDADADADEDEDEDEDEDEDEDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFD91F1F1F1F1F1F1F1F1F20202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191717171717171717171717171717161616161616161515151515151616141414141414141415151515141414141414141414141414131313131313131313131313131313121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000004A7C7D7F8082848588898B8E909295979A9DA0A2A5A8ABAEB1B4B7BBBDC1C4C7CACDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EFEDEBE96500000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0F0EFEDECECEBE9E8E7E5E5E4E1E0DEDDDCDADAD8D7D4D4D1D0D0CCCCCAC7C7C5C4C3C1C0BDBDBAB9B7B7B5B4B2B1B1ADACABAAA9A7A5A4A3A2A0A09E9D9C9A99989795959393929AADB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E8A8D8F909396999B9C9FA2A7A7AAABB0B0B2B5B6B9BCBFC0C1C4C5C5C5C5C9C9CACBCECFD0D1D3D3D5D5D6D7D7D7D7D6D6D5D5D5D6D5D5D6D6D5D3D5D5D5D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38772737577787A7C7E8183888A8C8E909396999B9EA1A5A7A8ACB1B3B5B8BBBFC1C3C5C6C8C9CACBCED0D3D3D6D7D7D9D7D7D7D7D6D7DADBDEDCDCDCDCDEDEDFDFDFDEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEA51F1F1F2020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A191919191919191919191919191919191919191917171717171717171717171717171616161616161515151515151516141414141414141415151515141414141414141414141414131313131313131313131313131313111212121212121212111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000002C7C7D7F8082848587898B8D8F929497999C9FA2A5A8ABAEB0B4B7BABDC0C3C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE9250000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEFEDECECE9E8E7E7E5E4E3E0E0DEDDDCDAD9D7D6D4D3D0D0CCCCCBC9C7C5C4C3C1C0BDBDBAB9B7B6B5B4B2B1AFADACAAA9A8A7A5A4A2A2A0A09E9C9A9A9997959595939292A0B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39A929396999B9C9EA2A4A7A8ABACAEB2B3B6B8B9BCC0C1C3C5C6C9CBCBCECFD0D3D3D5D7DADBDBDCDEDEDEE1E1E1DEDFDFDEDEDEDFDEDEDCDCDBDBDAD9D9D7D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38167686C6E7172757778787D818388898A8D909296999C9EA2A5A8ACAEB1B3B5B6B9BCBFC1C1C1C3C5C5C6C8CACBCBCED0D1D1D5D6D6D7D6D6D7D7D7D7D7D9DADADADAD7D7D7D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1652020202020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919171717171717171717171717171616161616161615151515151516161414141414141414151515151414141414141414141414131313131313131313131313131313111212121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF190000000000000000000000000000000000000000000000000F7C7D7F8081838587898B8D8F929497999C9FA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEECEBD7000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEFEDECECE9E8E7E7E5E4E3E0E0DDDCDADAD8D7D4D3D1D0CECCCBC9C7C5C4C3C1C0BEBDBAB9B7B6B5B3B2B1AFADABAAA9A8A5A4A3A2A2A0A09D9C9A999897959593939296A5B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3928E8F9294979B9C9CA2A2A5A5A8ACAEB1B2B5B8B9B9BBBCBFC0C3C3C5C6C9C9CACBCFCFD0D3D5D3D5D3D3D1D3D3D5D6D6D7D7D9D7D9DAD9DAD9D9D7D6D6D5D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F737677787B7C7E818186898A8E909294999C9FA1A5A7ABAEB1B3B6B6BBBDBFC0C3C5C8CACACBD0CFD0D0CFD0D1D5D6D7D9DADADADBDEDEDEDEDCDCDCDCDEDEDEDBDBDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DF2E2020202020202020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919171717171717171717171717171716161616161615151515151515161414141414141414151515151414141414141414141414141313131313131313131313131313131112121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55000000000000000000000000000000000000000000000000006D7D7E8081838586888A8D8F919396989B9EA1A4A6AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFEEECEA9E000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEFEDECECE9E8E7E5E5E4E1E0DEDDDCDAD9D7D6D4D3D0D0CCCCCAC7C7C5C4C1C1BEBDBBB9B7B7B5B4B2B1AFADABAAA9A8A5A4A3A2A0A09E9D9C9A99979595959392929DADB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B286898A8E8E909394979B9C9FA2A5A7AAACB0B1B3B3B8B9BBBDBFC1C3C3C5C6C8C9CBCECECECFD0D0D0D1D1D1D5D6D7D7D7D9D9D9D7D7D9D9DAD9D9D5D7D6D3D1CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6A6D6E6F71727577787C7E818385888A8C8E9093979B9EA1A2A5A7ACAEB0B1B2B5B8B9BCBFC3C3C3C5C5C5C8C8C8C9C9CBCACECECED0D1D5D5D5D5D5D6D6D6D7D6D7D7D7D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEABE20202020202020202020202020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919171717171717171717171717171616161616161615151515151515161414141414141414151515151414141414141414141414131313131313131313131313131313111212121212121212111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000004F7C7E7F81838486888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC2C5C7CACED0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEA6F00000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEFEDECEBE9E8E7E5E4E3E0E0DEDCDCDAD9D7D4D3D1D0CECCCBC9C7C5C4C3C1BEBDBBBAB7B7B5B4B2B1AFADABAAA9A8A5A4A3A2A0A09E9C9A999897959593939297A7B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A794979B9C9E9FA2A4A7A8ABAEB1B2B5B8B9BBBDBFC0C3C4C6C9CBCECFCFD0D1D1D3D5D5D7D9DAD9DADBDCDCDEDEDFDFDFDFDEDEDEDEDEDCDBDEDBDCDADAD9D7D3D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F70727476757A7C7E818589898D9093979B9CA1A2A7AAACB0B2B5B8B9BCBFC0C1C4C5C8CACECBCECFCFD0D1D5D7D9D9DADBDBDEDEDEDCDCDEDEDCDCDEDEDEDEDCDEDFE1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDC7C20202020202020202020202020202020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191717171717171717171717171716161616161615151515151515161414141414141414151515151414141414141414141414141313131313131313131313131313111212121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE300000000000000000000000000000000000000000000000000317C7D7F81828486888A8B8E909395989A9DA0A2A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEBEA370000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEDECECEBE9E7E7E5E4E3E0E0DDDCDADAD8D6D4D3D0D0CCCBC9C7C5C5C3C1C0BDBDBAB9B7B5B4B3B1AFADABAAA9A8A5A4A3A2A0A09E9C9A9998979595939393A1B0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B8F90939496999B9C9EA2A4A7AAACB0B2B3B3B6B9B9BCBDC0C0C3C3C4C5C8C9C9CBCECED0D1D3D5D5D5D6D6D9D9DBDADADADBDBDBDEDEDFDEDEDCDEDBDCDBDADAD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3867272767778797B7D818186888A8E8F909397999B9CA1A4A5A7ACB0B2B5B8B9BDC0C3C5C8C9CACBCECFD1D1D5D7D7D7D9D9DADADBDBDEDEDEDCDEDEDEDEE1E2E2E3E3E3E3E2E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDB4E20202020202022222222222222222222222222202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191717171717171717171717171716161616161616151515151515161614141414141414141515151514141414141414141414141313131313131313131313131313131112121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19000000000000000000000000000000000000000000000000147C7D7F8082848588898B8E909295979A9D9FA2A5A8ABAEB1B4B7BBBDC1C4C7CACDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3F2F0EFEDEBEA090000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F5F5F5F3F3F1F0F0EFEDECECEBE8E7E7E5E4E3E0DEDDDCDAD9D7D6D4D1D0CECCCBC9C7C5C4C1C1BEBDBAB9B7B6B4B3B1B1ADACAAA9A8A5A4A3A2A0A09E9C9A999795959593929CABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38F8C8E909394999B9B9EA2A5A7A7A8AAAEAEB1B3B5B8BBBFC0C3C4C5C6C6C6C8C9CECECECBCECFCFCFCFD0D1D0D3D5D5D5D6D7D7D7D5D5D5D5D3D1D1D3D3D1D1CFCBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F71727576777B7D8183888A8C909093969B9B9FA4A5A7ACB0B1B3B6B8BBBDC1C3C4C5C9CACECFD0D1D1D3D3D7D7D9D9DADCDCDEDEDFDFE1E2E1E1E1E1E1DFDFDFDEDFE1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3D42020222222222222222222222222222222222222222222222220202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A191919191919191919191919191919191919191917171717171717171717171717161616161616151515151515151614141414141414141515151514141414141414141414141313131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5500000000000000000000000000000000000000000000000000777D7F8082848587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EEECEBBA000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E1E0DEDDDCDAD9D7D4D3D1D0CCCCCAC7C5C4C3C1BEBDBBB9B7B6B5B3B1B1AFACAAA9A8A5A4A3A2A0A09E9C9A99979595939397A8B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B29397999C9C9FA2A5A7A8ACAEB0B1B3B5B6B9BDBDC1C1C4C5C5C5C6C6C6C9CBCED0D1D3D3D5D6D7D7D9DAD7D9D9DADADADAD9D9D9D9D9D7D7D7D6D3D3D3D3D0CFCBCEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E6F71737577797C7F8285898C8E909396979C9EA1A4A5A8ACB0B1B5B8BBBFBFC3C5C8C9CACED0D1D5D7D7D9DADBDADBDBDBDBDBDADBDBDADADADADADADADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2A822222222222222222222222222222222222222222222222222222222222220202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A191919191919191919191919191919191919191717171717171717171717171716161616161616151515151515161614141414141414151515151414141414141414141414141313131313131313131313131313111212121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000005E7D7F8081838586898B8D8F929497999C9FA1A4A8AAADB0B3B7B9BDC0C3C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEB8300000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F6F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E3E1E0DEDCDADAD8D6D4D3D0D0CCCBC9C7C5C4C1C1BEBDBAB7B7B5B4B2B1AFACABA9A8A5A4A3A2A0A09E9C9A999795959396A3B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E8A8D8F90939799999C9CA1A2A5A7AAACB0B1B3B5B8B8B9B9B9BCBFC1C1C1C3C4C5C5C6C8C6C9C9C9CBCBCBCBCECECECED0D0D0D0D1D1D0D0D0D0D0D0D0D0CECFCBCAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3826A6D6E70737575787C7E8184898C8C8F9294969B9B9FA2A5A7AAACB1B2B5B8B9BBBFC1C4C4C6C8CACACFD0D1D3D5D7D6D7D7D9DADAD9DADADBDBDCDEDEDEDEDEDEDEDCDCDBDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E17622222222222222222222232223222222222222222222222222222222222222222222202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191919191917171717171717171717171717161616161616151515151515151614141414141414141515151514141414141414141414141313131313131313131313131313131112121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE300000000000000000000000000000000000000000000000000407D7E8081838586888A8D8F919396989B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED1D4D6D9DCDEE0E2E5E7E9EBECEEEFF1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEECEA5400000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E3E0E0DEDCDADAD8D6D4D1D0CECCCAC7C7C5C3C1BEBDBBB9B7B6B4B3B1AFADABAAA8A5A4A3A2A0A09E9C9A99979595959FAFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39590939397999B9E9FA2A5A5A8AAACB0B2B3B6B6B9BBBDBCBFC1C3C5C8C9CACBCFD0D0D0D1D5D6D7D9D9D7DADADAD9D7D7DADADBDAD7D9DADADAD7D7D7D5D5D3D1D0CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3806565686A6D6F707375787B7C7E818286898D909696979C9C9FA2A5A5A7AAAEB0B2B5B6BBBDC0C3C4C5C6CAC9CACECED0D1D1D1D3D0D1D5D5D7D7D9DAD9DADADADBDBDBDCDBDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E639222222232323232323232323232323232323232323232222222222222222222222222222222020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191917171717171717171717171717161616161616161515151515151614141414141414141515151514141414141414141414141413131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F000000000000000000000000000000000000000000000000287C7E7F81838486888A8C8E919396989B9DA0A4A6A9ADAFB3B6B9BCBFC2C5C8CBCED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFEEECEA2500000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E3E0E0DDDCDAD9D7D6D4D1D0CCCCC9C7C5C4C3C1BEBDBAB7B7B5B3B1B1ADABAAA9A7A4A3A2A0A09E9C9A999795959DAAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2A2A5A8AAABACAEB1B1B3B5B6B9BDBFC0C3C5C6C9C9CACBCED0D1D5D5D6D7D9D9DADCDCDFDFE1E1E1E1E1E2E2E4E4E6E4E6E4E4E3E3E1E1E1DFE1DEDEDEDBDBDBDAD9D6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3826567686B6D6F727577787B7C7F8185898C8E9094979B9EA1A4A5A7A8AAACB0B3B3B5B8B9BCBDBFC0C0C3C4C5C6C8C9C9CACBCBCECFD0D0D1D3D3D5D3D3D3D5D6D7D7D6D7D7D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEC923232323232323232323232323232323232323232323232323232323222222222222222222222222222020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191917171717171717171717171717161616161616151515151515151614141414141414141515151514141414141414141414141313131313131313131313131313111212121212121212111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C0000000000000000000000000000000000000000000000000A7C7D7F81838486888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBFC1C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F0EFEEECE10000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F6F5F5F5F3F1F0F0EFEFECECE9E8E7E7E5E3E0E0DDDCDAD9D7D4D3D1D0CCCBC9C7C5C4C1C0BDBBB9B7B6B4B2B1AFACABA9A8A5A3A2A0A09E9C9A9997959BA8B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A09496979B9E9FA1A4A4A5A7AAACB0B2B3B5B8B9BDBFC1C4C4C6C9CACACECFD1D3D5D6D7D7DADADBDBDBDCDEDFDFDFDFE1E1DFE1E1E1E1E1E1DFDFE1E1DFDEDFDFDEDBDBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38671737677777B7C7E818283898C8D8F929497999C9EA2A5A5AAACB0B1B5B6B9BCBDC1C1C4C5C8C9CECED0D0D1D5D6D9DADADADBDBDBDEDFDFDFDFE1E1E1E1E3E3E3E3E4E4E4E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6A3232323232323232323232323232323232323232323232323232323232323232322222222222222222222222220202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191917171717171717171717171717161616161616161515151515151614141414141414141515151514141414141414141414141313131313131313131313131313131112121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000006D7D7F8082848588898B8E909295979A9DA0A2A5A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEDEBB200000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEFEDECE9E8E7E7E5E3E0E0DDDCDAD9D7D4D3D0D0CCCBC9C7C5C3C1BEBDBAB9B7B5B3B1B1ADABAAA8A5A4A3A2A09E9C9A999799A4B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E9FA2A4A5A8AAABB0B2B6B8B9BBBDBFC1C4C6C8C9CBCBD0D1D3D5D7D9DADADBDBDCDBDEDFE1E1E3E3E3E6E6E6E6E6E6E7E7E7E7E7E6E6E3E4E4E4E3E3E3E3E1E1E1E1DEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6F7172757778787C7E8285898A8D909293979B9EA1A4A7A7AAACB1B5B8B9B9BBBFC0C4C6C6C9C9CACBCFCFD1D3D6D5D5D6D7D9D7D9DADBDBDBDBDBDCDEDEDFDEDEDEDEDEDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E168232323232323232323232323232323232323232323232323232323232323232323232322222222222222222222222220202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A19191919191919191919191919191919191919171717171717171717171717171616161616161515151515151516141414141414141515151514141414141414141414141413131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC400000000000000000000000000000000000000000000000000547D7F8082848587898B8D90929497999C9FA2A5A8ABAEB1B4B7BBBDC1C4C6CACDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFF
-FFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEB8300000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEFEDECEBE8E7E7E5E3E0E0DDDCDAD9D7D4D3D0CECCCAC7C7C4C3C1BEBDBAB7B6B4B3B1AFACAAA9A7A4A3A2A0A09D9C9998A1AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9B9CA1A4A5A5A7ABACAEB1B2B6B8BBBDBFC0C4C5C6C9CBCFD0D1D3D5D6D7D9DADEDEDFDFE1DFE1E3E3E3E4E4E4E4E6E6E6E4E3E3E3E3E3E4E4E3E3E3E3E4E3E3E1E1DEDEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E717376777B7D7E818286888D8F9296979B9FA2A5A7ABAEB2B5B8B9BBBFBFBFC3C3C4C5C9CACBCED0D1D1D5D6D7D7D9DADADBDBDEE1E1DEDFDEDFDFE1E1E1E1DFDFDFDFE1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9392323232323232323232323232323232323232323232323232323232323232323232323232323232222222222222222222222202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191919171717171717171717171717171616161616161615151515151516141414141414141415151515141414141414141414141413131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000000000000000000000000000000000000000000000000003B7D7F8081838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7DADCDEE1E4E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EEEDEB5400000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F6F6F5F5F3F3F1F0F0EFEDECEBE8E7E7E5E3E0E0DDDCDAD9D7D4D3D0CECCCAC7C5C4C1C0BDBBB9B7B5B4B2B1ADABAAA8A5A4A2A0A09E9C9A9DA9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A09EA2A2A5A7ABACAEB1B3B5B6B8BBBDBFC1C4C5C6C9C9CECFD1D5D6D9DBDEDEE1E3E4E6E6E6E9EAEBEBEBEBEAECEAEBEBEAEAEAEBEBE9EBECEBEAE9E9E9EAE9E9E6E6E6E2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856E70727677777A7D818284888A8E909296979B9FA2A4A7ABAEB1B5B6B9BBBDBFC1C4C5C5C8C9CBD0D0D1D6D7D7D9DADADBDCDEDEDEDFE1E2E4E4E6E3E3E3E6E6E7E9E9E9E9E9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2DC2323232323232323232323232323232323232323232323232323232323232323232323232323232323232322222222222222222222202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A191919191919191919191919191919191919191717171717171717171717171716161616161615151515151515161414141414141415151515141414141414141414141413131313131313131313131313131311121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000237D7E8081838586898B8D8F929496999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F5F4F3F2F0EEECEB2500000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F7F6F5F5F3F3F1F0F0EFEDECEBE9E7E7E5E3E0E0DDDCDAD9D6D4D3D0CECCC9C7C5C4C1C0BDBAB9B7B5B3B1AFADABA9A7A4A3A2A09E9C9CA5B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B29EA1A4A5A7A8ABACAEB1B3B6B9BCBFC1C3C4C8CACACED0D1D3D5D6D7D9D9DADBDCDCDEDFE1E1E2E3E3E3E4E4E6E6E7E7E7E7E9EAEAE9E7E7E7E6E6E6E4E6E4E3E3E2E1E1DEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A7678797B7C7E818488898A8F909497999B9CA1A5A7AAACB0B2B6B8BBBFC1C4C5C9CACACECFD1D3D7D7DBDBDCDBDCDEDEDEDEDFDFE1E1E1E1E1E1E2E2E2E1E1E1E1E1E1E1E2E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D19423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323222222222222222222222020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A191919191919191919191919191919191919171717171717171717171717171616161616161515151515151516141414141414141415151515141414141414141414141413131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000000A7D7E8081838586888A8D8F919396999B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECE2000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEDECECE9E7E7E5E4E0E0DDDCDAD9D6D4D1D0CECCC9C7C5C3C1BEBDBAB7B7B4B3B1AFACAAA8A5A4A2A0A09DA1ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A09B9C9EA1A2A5A5A7AAACACB0B1B3B9B9BBBCBDC0C3C5C6C9CACACED0D1D1D3D6D9D9DADCDADBDBDBDCDBDBDADADADADBDCDCDCDBDBDBDBDBDBDCDCDBDBDCDAD9DAD7D7D6D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B388757777797C7D818184868A8D909294979C9CA1A5A8AAAEB1B5B6BBBDC0C5C6C9C9CBCED0D3D5D5D9DADBDEDEDFE1E1E3E4E6E7E7E7EAEAEAEAEAEBEBECEEEEEEEEECECEBECEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E170232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323222222222222222222222020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191919191717171717171717171717171616161616161615151515151516141414141414141415151515141414141414141414141413131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000006D7E7F81838486888A8C8E919396989B9EA1A4A6A9ADAFB3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E7E9EBECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEECB200000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F8F7F6F6F5F5F3F1F0F0EFEDECECE9E8E7E5E4E1E0DDDCDAD9D7D4D1D0CCCCC9C7C5C3C1BEBDBAB7B6B4B2B1ADABA9A8A5A3A2A09EA7B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7A8AAACB0B2B3B5B6B9BDBFC1C3C5C6C9C9CBCFD0D3D6D7D9DAD9DADBDEDFE1E1E3E6E6E6E7E7E9EAEAEAEAEAEBEBEBEBEEECEBEBECECECECECECECECEBEBEBEBEAE9E7E6E6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856E70727477787B7C7D808285898C8E909396979B9FA2A5A7A8ACB0B1B2B5B6B9BBBCBFBFC0C3C5C9C9CACECFD0D0D3D3D5D7D7D9D7D7D9D9D9D9D9D9D9D9DAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADA3F2323232424242424242424242424242424242424242323232323232323232323232323232323232323232323232323232323232222222222222222222020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191717171717171717171717171716161616161615151515151515161414141414141415151515141414141414141414141413131313131313131313131313131312121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD900000000000000000000000000000000000000000000000000547D7F81838486888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC1C5C7CACED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F2F3F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFEEEC8300000000000000000000000000000000000000000000000000F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F6F6F5F5F3F3F1F0EFEFECECE9E8E7E5E4E1E0DEDCDAD9D7D4D3D0CCCCC9C7C5C3C1BEBDB9B7B5B4B1B1ADABA9A7A4A2A0A2ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A19EA1A2A2A4A5A8ABAEB0B1B2B3B5B8B9BCBFC0C0C3C4C4C6C8C9CACBCFD0D0D0D3D5D6D7D7D7D7D9DAD9DADADADBDBDBDCDBDCDEDCDEDEDEDEDEDEDCDBDBDAD7D9D6D5D3D1D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856E71737676787B7C7F818286898C8E9096979B9FA2A5A5A8ACAEB0B1B3B6B8BBBDBFC1C4C5C5C9C9CACBCECFD0D3D5D5D6D9D9D9D7D9DAD9D9D9DAD9DADADBDBDBDCDBDCDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD02324242424242424242424242424242424242424242424242424242323232323232323232323232323232323232323232323232323232222222222222222222220202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191919191917171717171717171717171716161616161616151515151515161414141414141414151515151414141414141414141414131313131313131313131313131311121212121212121111111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000417D7F80828486888A8B8E909395989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F0EFEEEC5E00000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFBFCFCFCFCFBFBFBFBFBFAF9F9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDCDAD9D7D4D3D0CECCC9C7C5C3C1BEBDB9B7B5B3B1AFACAAA8A5A4A2A6B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0A3A5A7AAACACAEB1B3B6B8B9BBBDBFC0C0C1C4C6C5C9CACACACBCFD0D0D1D1D3D3D7D7D7D7D7D7D7D9D9DAD9DADADAD9DADADADADAD9D7D7D7D7D6D6D7D5D5D5D1D1D1D0D0CECAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6C6E71737577787B7E818486888A8E9093979B9EA1A5A7AAACB1B2B6B9BBBDBFC1C4C6C9CACED0D1D5D5D6D9DADBDBDCDEDFDEDEDFE1E1E2E3E6E6E4E4E4E3E3E3E4E4E4E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4B124242424252525252525252525252525252525252424242424242424242424232323232323232323232323232323232323232323232323232322222222222222222220202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191717171717171717171717171716161616161615151515151516161414141414141415151515141414141414141414141413131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000287D7F8082848587898B8E909294979A9DA0A2A5A8ABAEB2B4B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEDEB2F00000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFBFBFBFBFBFBFBFBFBFAF9F9F9F9F8F8F6F5F5F5F3F1F0F0EFEDECEBE9E7E7E5E3E0DEDCDAD9D7D4D3D0CECCC9C7C5C3C1BDBBB9B7B5B3B1AFACAAA8A5A4AAB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39F9B9B9C9E9EA1A4A5A7A7AAABACAEB1B1B2B5B6B6B9BBBCBDBFC0C1C3C5C6C6C8CACACBCBCECFCFD0D1D3D1D5D6D5D5D3D5D5D5D6D5D5D6D6D5D3D3D3D1D1D3D0D0D0CECECAC9C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F71737575787B7E8183868A8C8E9294979B9EA2A4A5A7ACAEB1B2B5B8BCBDC0C3C5C6C9CACBCECED0CFD1D5D7D7D9DADADCDBDADBDADADADADBDBDBDADBDBDBDBDADADBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DF87252525252525252525252525252525252525252525252525252424242424242424242323232323232323232323232323232323232323232323232322222222222222222220202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191919191917171717171717171717171716161616161615151515151515161414141414141415151515141414141414141414141413131313131313131313131313131312121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000147D7F8081838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BBBDC0C4C6CACDCFD2D5D8DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFF
-FFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEB090000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFBFBFBFBFBFBFBFBFAFAF9F9F9F8F8F7F6F5F5F3F3F1F0EFEFECECE9E7E7E5E3E0DEDDDCDAD7D4D3D0CECCC9C7C5C3C1BDBBB9B7B5B3B1AFABA9A8A4ACB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEA8AAABACAEAEB1B1B5B5B6B8BBBCBDBFBFC1C1C3C4C4C6C6C6C9CACBCECFD0D1D5D5D5D7D7D9DADADBDBDADBDCDCDCDBDBDCDEDEDEDFDFDEDEDFDFDEDCDADADAD9D9D7D7D7D6D5D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6F72737675787B7C7C8184898A8C8F9397999C9EA2A5A8ACB0B1B2B6B9BCC0C3C5C5C6C9CBCBD0D3D3D5D5D7DADCDEDFDFDEDFE1E2E2E2E4E4E6E4E3E3E6E4E3E4E3E4E6E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3612525252525252525252525252525252525252525252525252525252525252424242424242424232323232323232323232323232323232323232323232322222222222222222220202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A19191919191919191919191919191919191917171717171717171717171717161616161616151515151515161414141414141414151515151414141414141414141414131313131313131313131313131311121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000007D7F8081838586898B8D8F929497999C9FA2A5A8AAAEB0B4B7BABDC0C3C6C9CCCFD2D4D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F6F5F4F3F2F0EFEDC500000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFAFBFBFBFBFBFBFBFBFBFAFAF9F9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECE9E8E7E5E4E1E0DDDCDAD8D6D3D0CECCC9C7C5C3C1BDBBB9B7B5B3B1ADABA9A7AFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A2A4A5A7A7AAACACB1B2B3B6B8B8B9BBBDBFC0C3C5C5C8CACAC9CBCBCECFCFD0D0D1D1D3D5D5D7D9DADADAD9D9DADADAD9DAD9D7D7D7D7D7D7D7D9D9D7D9D9D9D9D7D6D5D5D6D5D6D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38671747677787B7C80818388898E909293979B9EA1A4A5AAABAEB1B5B6B9BBBDC0C1C1C4C5C6C8C9CBCBCED0D0D5D6D7D7D7DADBDCDCDEDFDFDFDEDEDEDEE1E1E1E1E1DFDFDFE1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E23325252525252425252525252525242424252525252525252525252525252525252524242424242424232323232323232323232323232323232323232323232322222222222222222220202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191919171717171717171717171717161616161616151515151515161614141414141414151515151414141414141414141414131313131313131313131313131311121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE00000000000000000000000000000000000000000000000000647E8081838586898A8D8F929497999C9FA1A4A8AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3F2F0EEEC9F00000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBFBFBFAFAF9F9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDCDAD9D6D4D1D0CCCAC7C5C3C1BEBDB9B7B5B3B1ADABAAB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ACAAACACB0B2B3B6B6B9B9BBBDC1C1C4C3C6C5C8C9CBCBCECECED0D0D0D0D1D1D1D5D5D6D5D5D7D9DBDADBDADCDEDEDEDFDFDFDFDEDEDEDEDFDFDFDEDEDEDEDCDBDBDBDAD9D7D7D7D6D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F73767677797B7E8183888A8E909296999B9FA2A4A5A8ABAEB0B2B6B8BBBDBFC1C4C5C8C9CACACECED0D0CFD0D1D5D5D6D7D7D7D7D9DADADADADBDCDBDBDEDEDBDCDCDEDCDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9C425252525252525252525252525252525252525252525252425252525252525252525252525242424242424242323232323232323232323232323232323232323232323222222222222222220202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191919171717171717171717171717161616161616161515151515151614141414141414151515151414141414141414141414131313131313131313131313131311121212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000004B7E8081838486888A8D8F919396999C9EA1A4A7AAADB0B3B6B9BCC0C2C5C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EEEC7B00000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBFBFAFAF9F9F9F9F8F8F7F6F5F5F3F3F1F0EFEDECECE9E7E7E5E3E0DEDCDAD9D7D4D1D0CCCBC7C5C3C1BEBDB9B7B5B3B1ADABB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1A3A5A7A8AAABACAEB1B2B5B8B9BCBFBFC0C1C1C4C4C5C6C8C9C9C9CBCFD0D1D3D5D5D3D3D5D5D6D6D7D7D6D6D7D7D7D7D7D9D9D7DADADBDADADADADADBDBDEDBDADADAD9D9DADADAD9D7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3867274767678787C7E818388898D8F909397999C9EA2A5A7A7ABACB0B1B3B6B9BBBDC0C3C6C6C9C9CED0D1D3D5D7D7D9D7D9DADBDEDEDEDEDEDEDEDEDEDEDFDFDFDEDFDFDFDFE2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDCD9D7D6D6D6D6D6D6D6D6D5D5D6D6D6D6D6D6D7D6D6D7D7D6D6D6D7D6D6D3D3D3D3D3D3D5D5D3D5D5D5D6D6D6D7D6D5D6D7D7D7D6D7D6D6D6D5D6D6D6D7D7D6D6D5D5D3D1D1D0D0D0CFCFCFCFCECFCFD0D0D1D1D1D1D1D0D1D3D3D3D1D0D0D1D0D0D0D1D1D3D3D5D5D5D5D5D3D1D1D3D3D3D1D0D0D0CFCFCFD0D0D0D0D1D1D1D3D3D3D3D1D1D3D3D1D1D1D3D3D3D5D3D1D0D0D1D1D1D1D0D0D1D0D0D1D3D3D1D0D0D0D0D1D3D5D6D6D6D6D6D6D3D6D6D3D3D6D3D1D1D1D3D1D1D3D3D1D3D1D1D1D3D5D5D3D5D5D5D5D5D3D3D3D3D5D3D3D5D5D5D5D5D5D5D6D5D6D6D6D6D6D6D6D6D6D3D3D3D3D3D5D6D6D6D6D6D7D6D6D6D6D5D5D6D6D6D7D7D6D6D6D5D5D6D7D7D6D6D7D9D9D9D9D9D7D7D681101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23000000000000000000000000000000000000000000000000367E7F81838486888A8C8F919396989B9EA1A4A7AAADAFB3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F5F4F3F1F0EEEC5500000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBFBFAF9F9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEDECE9E8E7E5E4E0E0DDDCDAD7D4D3D0CCCBC7C5C4C1BEBDB9B7B5B3B1ABB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A5A7ABACAEB0B1B2B3B3B8B9BBBDBFC1C0C1C4C4C8C9C9C9C9CACBCED0D0D0D1D1D1D5D5D6D7D7D7D9D7D9DADADADADBDBDBDADBDCDEDEDEDCDCDBDCDCDADBDADADAD9D7D9D6D7D7D5D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3877173757777797C7E7F8185898A8E8F9296979B9FA2A5A7A8ACB0B1B3B5B8BCBFC1C3C5C9CACBCBCFD0D1D0D0D3D3D5D5D6D7D7D9D9D9DADAD9D9DADADADBDCDCDCDEDEDCDBDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1991010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55000000000000000000000000000000000000000000000000237E7F81838486888A8C8E919396989B9DA1A4A6A9ACAFB2B6B8BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E7E9EBECEEEFF1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1EFEEEC2F0000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFAFBFBFBFBFBFAFAF9F9F9F9F8F8F7F6F5F5F3F1F0F0EFEDECEBE8E7E5E4E1E0DDDCDAD8D6D3D0CECBC9C7C4C1BEBDBAB7B5B3AEB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ACACACAEB1B2B5B8B9BCBDC1C3C5C8C9CACBCECFD0D3D3D5D5D7D7D9DADBDCDCDCDFDFE1E1E3E3E4E4E6E6E7E7E9EAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E7E7E7E6E7E6E4E3E2E1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887576787A7C7D7F8285868A8D909293979B9CA2A5A7AAABAEB1B3B6BBBDC1C3C5C6C9C9CBCBCED0D1D3D3D6D7D7DADBDBDCDBDCDCDCDEDFDFE1DEDEDEDEDEDEDEE1DEDEDEDCDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDE96101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000000F7D7F80828486888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBFC1C5C7CBCED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEEC00000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFAFAFAFAFAFAFAF9F9F9F9F9F8F7F6F5F5F3F3F1F0EFEFECECE9E7E7E5E3E0DEDCDAD9D6D4D1D0CCC9C7C5C3C0BDBAB7B5B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0A8ABABAEB1B1B1B2B3B6B6B6BBBBBDBDBFC1C3C4C4C5C6C5C6C8C9C9CBCECBCECECED0D0D0D1D1D1D1D3D3D3D5D5D5D6D5D6D7D7D7D7D7D6D6D7D7DADADADADADAD9D7D7D5D5D3D3D0D0CECBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F72757577787A7B7E818488888D9093969B9EA1A5A7AAACAEB2B5B8BBBCBFC1C5C9CACBCFD1D1D1D1D5D5D6D7D7D9D9DADADBDBDADADADADBDBDBDCDBDBDBDBDBDEDEDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DF9810101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000007D7F8082848588898B8E909395989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F5F5F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFEECF00000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFAFAFAFAFAFAF9F9F9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECEBE8E7E5E4E0E0DDDAD9D7D4D1D0CCCAC7C5C3C1BDBAB7B5B1B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A0A2A5A5A7A7A8AAAAABACAEB1B2B5B6B6B8BBBDBFBDBFC0C0C1C3C5C6C9C9C9C9C9C9C9CACACACACBCBCECECFD0D1D5D5D5D5D5D6D5D5D6D5D6D6D6D6D6D5D5D5D5D5D5D6D6D5D3D3D1D3D1CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887475777A7C7E818286898A8E909394979B9CA1A5A7AAAEB0B3B6BBBCBFC1C4C5C9C9CACBCFD1D3D5D6D7DADADBDADCDBDBDCDEDCDCDEDFDEDEDEDCDEDCDCDCDBDEDBDADBDBDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDA941110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE300000000000000000000000000000000000000000000000000647F8082848587898B8E909295979A9DA0A2A5A9ABAEB2B4B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F0EFEEAA00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9F9FAFAFAFAFAF9F9F9F9F9F9F8F7F6F5F5F3F3F1F0EFEDECECE9E7E7E4E3E0DDDCDAD7D4D3D0CCCBC7C5C4C1BEBBB9B3B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1BCBDBFC0C1C4C5C5C6C9CACBCECFD0D0D1D6D7DADBDBDBDBDBDBDBDEDEDFE1E1E1E3E3E3E4E4E3E3E4E4E4E6E6E6E6E6E6E6E7E7E9E7E9E7E6E6E6E6E6E6E6E7E6E6E4E3E2E1DEDEDCDADBDAD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38267696C6D6E71737576777A7C808385898D8E8F9294999C9EA2A5A7ABACB1B3B5B6B8B8B9BCBFC1C3C1C4C5C5C8C8C9C9CACBCBCBCBCECFCFD0D0D0D1D3D1D3D5D5D5D5D5D5D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E29B111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07000000000000000000000000000000000000000000000000507F8081838587898B8D909294979A9C9FA2A5A8ABAEB1B4B7BBBDC1C4C7CACDCFD2D5D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEE8400000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9F9F9FAFAFAF9F9F9F9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD9D6D4D0CECCC9C7C4C1BEBDB5B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AAA7ABACAEB1B2B3B6B8BBBBBDBFC1C4C5C5C8C9CBCECECFD0D0D3D5D6D6D7D7D9D9DADADBDCDEDEDEDFE1E2E2E2E3E6E6E4E4E6E6E6E6E6E9E9E9E7E7E6E6E6E6E6E6E6E4E4E6E3E3E1DFDEDCDBDBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E70727577777B7C7F8185898A8C9093979B9EA2A2A5A7ABAEB1B5B6B9BDBFC3C5C6C9CBCED0D3D3D5D5D6D7D6D7D7D7D7DADBDADBDCDCDCDCDEDEDEDEDFDEDEDFE1E2E2E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDB9511111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000417F8081838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC0C4C6CACDCFD2D5D8DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFED5E00000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F3F3F1F0EFEDECECE9E7E5E4E1E0DDDCDAD7D4D1D0CCCAC7C5C3C0BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEA5A7A8ACAEB0B1B0B3B5B6B8B9B9BCBFBFC1C4C4C5C5C6C9CAC9CBCFCFCFD1D3D5D5D6D7D9D7D7D9D9D9D9D9DADADADADADADBDADADADADADADBDBDBDBDBDBDBDBDBDCDBDBDADAD9D7D7D6D6D3D1D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F71737576787B7C7E818385898C8F9092969B9C9EA1A4A5A7AAACB0B3B5B8BBBDC1C3C4C4C6C8CACFCED0D3D7D7D7D7DADBDBDCDEDEDEDEDEDEDEDEDFE1E1E1DEE1DEDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDA93111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000002D7F8081838587898B8D8F929497999C9FA2A5A8AAAEB0B4B7BABDC0C3C6C9CDCFD2D5D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFED380000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD8D6D3D0CCCBC7C5C3C1B6B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2AAACACAEB1B2B2B3B5B5B6B9BBBFC0C1C3C4C6C6C6C8C9C9CACECED0D0D3D1D3D5D3D5D6D9D9D7D9DADBDBDCDEDEDCDBDBDCDEDEDEDEDFDFDFDFE1E1E2E2E1E1E1DEDEDEDEDCDADBDBDBDAD7D9D9D7D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6D6F717577787B7D7E8185898C8D8E9294979C9FA2A7A8ACB0B2B3B6BBBDC0C3C5C5C9C9C9CAD0D0D1D3D3D5D7DADBDEDEE1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E4E4E4E4E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DA9211111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000197E8081838586898A8D8F929497999C9FA1A5A8AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDEE1E4E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFED1D00000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F3F3F1F0EFEDECEBE8E7E5E4E1E0DDDAD9D7D4D1D0CCC9C7C4C0B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2ACAEB0B1B2B2B3B3B5B6B9B9BBBBBCBFC0C3C3C4C3C5C5C6C8C8C8CACECECBCBCECECECECECECECFCFD1D0D1D3D3D1D3D3D5D6D7D7D7D7D7D7D7D7D7D7D7D7D9D7D7D9DADADADAD9DADAD7D6D7D7D5D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38671757678797C7E818383888C8E90929499999C9FA4A5A7AAAEB1B5B8B9BDC0C1C3C5C6C9CBCBCFD1D0D1D3D3D5D5D7D9D9DBDCDEDEDEDFE1E1E3E3E3E3E2E4E4E4E4E3E2E1E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E49B1111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000057E8081838586898A8D8F919496999C9FA1A4A7AAADB0B3B6B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F6F5F4F3F2F0EFED00000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD8D6D3D0CCCBC7C5BCB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2AAAEB1B1B2B5B5B8BBB9BBBCBDBFBFC3C5C6C6C9CACACBCFCFCFD0D0D1D1D3D5D5D5D7D5D7DADADBDADBDEDEDEDEDFDFE1E2E3E2E2E2E2E1E1E1DEDEDEDCDCDCDBDADADAD9D9D7D7D6D7D6D5D3D5D1D0CFCEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D7073757677787B7C808386898A8C909294979C9EA2A4A7AAACB1B3B8B9BDBFC1C3C5C8CACBD0D0D1D3D6D9D9DADADADCDEDFDEDFE1E1DFE1E1E1E2E3E3E3E3E4E4E4E4E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDB94111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE00000000000000000000000000000000000000000000000000798081838486888A8D8F919396999B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3F2F0EEC600000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F3F3F1F0EFEDECECE9E7E5E4E1E0DDDAD9D6D4D1CECCC9C5B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2A9ACACAEAEB0B1B2B2B3B5B5B6B8BBBCBFC0C1C3C3C4C5C6C8C9CACACACBCECECECED0D1D3D5D5D6D6D7D7D7D6D6D7D7D7D7D6D6D6D5D5D5D6D7D6D7D9D9D7D7D9D9D9D7D7D7D7D6D6D5D6D5D3D3D3D0CECECBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6C6E6F7175777B7C7E8184898A8A8E9292969B9CA1A4A7A8ACAEB0B2B6BBBDBDC0C3C6C8C9CACECECFD0D1D5D6D7D7DADADBDCDEDEE1E1E1E1E1DFDFDEDFDFDEDFDFE1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E79E11111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000657F81838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCBFC2C5C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3F2F0EEAA00000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD8D4D3D0CCCAC3B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2A9ACAEAEB0B2B3B5B6B6B8B9BCBDBCBCBDBFC0C1C4C4C4C5C5C5C5C8C9CACACACBCACACBCBCECECECECECECECFCFD0D0CECECECBCECECBCECFD0D0D0D0D0D1D3D1D1D3D3D5D5D7D5D5D5D0CFD0CFCFCBCECECECEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B386717273767677787C7C7F8285898C8E909496999C9EA2A5A7ABACB1B1B3B6B8BCBDBFC1C4C5C8C9C9CACECFD0D1D3D7D7D7D9DADADAD9DADADADADADADADADBDCDEDEDEDEDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9921111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19000000000000000000000000000000000000000000000000517F81838486888A8C8E919396989B9EA1A4A6A9ADAFB3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3F2F0EE8E0000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F8F8F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F5F3F1F0F0EFECECE9E7E5E4E1E0DDDAD9D6D4D0CECBBFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2AAB1B2B5B6B8B9BCBDBCBDBFBFBFC0C3C4C4C4C6C8C8C9C9CACBCACACBCECECFD0CFD0D1D0D1D1D1D1D3D3D3D5D5D5D6D5D5D6D5D6D7D7D7D7D9D7D7D7D9DADBDBDADADADADAD9D7D9D7D7D5D5D1D1D1D1D0CFCECBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6C6E6E717376787A7D8083858A8C8F9396999C9EA2A5A7AAACB0B2B6BBBDC1C3C5C6C8C8CACACECED0D1D1D5D5D7D7D6D6D7D7D9DADADBDADADADADADCDEDEDFE1E1E2E1E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E29B111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6B390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F20821A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000467F81828486888A8C8E919396989B9DA0A4A6A9ADAFB3B6B9BCBFC2C5C8CBCED0D3D6D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EE680000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F8F8F9F9F9F9F9F9F9F9F9F9F8F8F6F6F5F5F3F3F1F0EFEDECEBE8E7E5E3E0DEDCDAD8D4D3D0CCBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2AAB2B1B5B5B6B8B9BBBBBDBFBFC0C1C1C4C4C5C5C8C8C9C9CBCFD0D0CFD0D1D5D6D6D7D9D9DADADCDCDEDEE1E1E1E2E1E1E1DFE1DEDEDEDCDBDBDEDEDEDEDEDEDEDEDCDCDEDEDEDEDFDEDEDFDBDBDBD9D7D7D7D7D7D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B388757676787B7D7F818486898D909296979C9EA2A5A7ABB0B3B6B8B9BDC0C1C5C8C9CBCED0D3D5D6D9D9DBDEDFE1E2E3E6E6E7E7E7E7E9EBEBECEBECEBEBEAECECECECEEEFEFEFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1DCDBDDDAD9D9D9D9D9D9DAD9D9D9D6D7D9D9D9D9D7D9D9D7D6D6D5D5D3D3D3D1D1D1D3D3D3D3D5D6D5D5D5D5D6D7D6D6D5D5D5D5D5D5D3D3D3D3D3D1D1D1D1D1D1D1D1D0D0D0CFCFCFCFCECCCCCCCCCECECECECFCFCECECCCECECECFCFCFD0D0D0D0D0CFCFCECBCBCECFCECBCBCBCBCBCCCAC9CACBCBCACACACBCBCBCBCBCBCECBCECFCFCFCFCFCFCFCFD0D0D0D1D1D0D0CFCFCFCFD0CFCFD0D0CFCFCFCFCFCFD0CFCFCFCFCFCECECFD0D1D1D1D1D1D3D5D5D5D5D3D3D3D3D3D3D3D5D5D5D3D1D1D0D0CFCFCFCFD0D0D0D3D3D3D3D0D1D3D1D1D1D0D1D3D3D5D5D3D3D3D3D5D5D3D5D6D5D5D6D6D6D6D7D7D7D7D7D6D7D6D6D6D6D6D6D6D6D6D6D6D6D6D5D5D5D6D6D6D6D6D6D5D6D6D7D6D7D7D6D6811111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB58A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000327F80828486888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC2C5C7CBCED0D3D6D9DBDEE0E2E5E7E9EAECEEEFF1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F5F4F3F1F0EE550000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F8F8F7F6F5F5F5F3F1F0F0EFECECE9E7E5E4E1E0DDDAD9D6D4D0CDBAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6B8BBBBBDBFBFBFC0C1C3C5C5C6C8C9CACBCFD0D0D1D3D3D3D5D6D7D9D9DADADBDCDCDBDEDEDEDEDEDEDEDFDFE1E1DEDEDEDFDFDFDFDEDEDFE1E1DEDEDEDEDEDEDEDCDBDBDADAD9DADADADAD7D7D5D5D3D3D0CFD0CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382696C6F71737577787B7D7F8185898A8E9093979B9C9FA2A5A7AAACB1B3B6B9BDBFC1C4C5C6CACBCECFD0D1D3D5D7D9DADADCDEDEDEE1E1E1E1E1E3E3E1E1E2E3E3E3E4E6E7E6E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E336282828282829292929292929292929282828282828282828282828282828282828282828282727272727272727272727272727262625252525252525252525252525252425252525252525252424242424232323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191919171717171717171717171717161616161616151515151515161414141414141415151515141414141414141414141313131313131313131313131313111212121212121211111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000001E7F80828486888A8B8E909395989B9DA0A3A6A9ACAFB2B5B8BBBFC1C5C7CACED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1EFEE2F00000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F8F8F7F6F5F5F3F3F1F0EFEDECEBE8E7E5E3E0DEDCDAD8D4D3CCB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2AFB2B5B6B8B9B9BBBBBCBDBFBFBFC1C3C4C3C3C5C8C8C9C9C9CBCBCECFD0D0D1D1D1D1D3D5D5D5D7D7D7D7D6D7D9D9DADAD7D9DADAD9D9D9D9DADAD9D7D7D7D6D5D5D5D6D5D5D3D3D1D1D0D0CFCFCECECBCECBCAC9C9CAC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6F727576787B7E818187898E9292979B9CA1A4A5A8AAAEB1B5B9BBBFC0C3C5C6CACBCFD1D3D5D7DADADCDEDFE1E1E1E1E3E2E4E4E6E6E6E7E7E9E9E9E9EAE9EAEAEAEAEAE9E9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDED7282929292929292929292929292929292929292929292828282828282828282828282828282828282827272727272727272727272727262626252525252525252525252525252425252525252525252424242424232323232323232323232323232323232322222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171717161616161616151515151515161414141414141415151515141414141414141414141313131313131313131313131313111212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000197F8082848588898B8E909395989A9DA0A3A6A9ACAFB2B5B8BBBFC1C5C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1EFEE13000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F8F8F7F6F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DDDCD9D7D4CAB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2AEB1B3B3B5B8BBBBBDBDBDBFC1C3C4C4C5C6C8C8C8C9CACBCECFCFCFCFCFCECECFCFCFD0CFD0D0D0CFD0D0D1D5D6D6D6D7D7D6D7D7D9D9D7D6D7D9D7D7D7D7D9DADADBDBDADADAD9D7D7D7D7D7D6D5D3D3D0D0CFD0CFCECECEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382696C6E6F727577787B7D7F8288898A8E9094979B9B9FA2A2A5A7AAAEB2B6B9BBBDC0C3C4C4C6C8C9CACFD0D0D3D5D5D6D6D6D7DADBDBDBDBDCDEDEDEDEDEDEDEDEDEDFDFDEDFE1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEBC29292929292929292929292929292929292929292929292929292828282828282828282828282828282828282727272727272727272727272726262525252525252525252525252525252525252525252524242424232323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171717161616161616151515151515161414141414141415151515141414141414141414141413131313131313131313131313111212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE000000000000000000000000000000000000000000000000007F8082848588898B8E909295979A9DA0A2A5A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEE00000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F8F8F8F7F6F5F5F5F3F1F0F0EFECECE9E7E5E4E0DEDCDAD9D6C8B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B4B8B9B9BDBDC0C0C1C1C1C1C3C3C3C3C5C8CACACACBCECFD0D0D1D3D0D1D3D5D5D6D6D5D5D5D5D6D6D7D7D7D7D7D7D7D7D7D7D7D9DADBDBDCDCDBDBDBDBDBDADADBDBDBDADAD9D9D9D7D6D6D6D5D5D5D3D3D5D3D1D1D0D1D1CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856E71737778787B7E81818487898C8D8F9294979B9B9FA2A4A5A7ABAEB2B3B6B9BBBCBFC0C3C4C4C8C8C9C9CBCED0D0D1D3D3D3D3D5D5D7D9D7D7D9D9DADADAD9DADADBDBDBDBDAD9D9DAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7A7292929292929292929292929292929292929292929292929292929292929282828282828282828282828282828282727272727272727272727272726262525252525252525252525252524252525252525252424242424232323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191919191717171717171717171717161616161616151515151515161614141414141414151515141414141414141414141413131313131313131313131313111212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED000000000000000000000000000000000000000000000000007A8082848587898B8D909295979A9DA0A2A5A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F3F2F1EFC800000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F8F8F7F6F6F5F5F3F3F1F0EFEDECEBE8E7E5E3E0DEDCDAD7CAB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFB2B5B6B5B8B9BBBCBDC0C1C3C3C4C6C6C8CACACACBCBCECFD0D0D0D0D3D5D6D6D9D9D7D9DADADADAD9DADADADBDCDCDCDCDBDADADCDEDEDEDEDEDEDEDBDEDEDEDEDEDEDCDBDCDCDEDEDCDADAD9DADADCDAD9D7D7D5D5D5D5D5D3D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F72737576787C7F838386898D909294999C9FA2A4A7AAACAEB2B5B8BBBDC1C3C4C8C9CBCBCECED0D3D3D5D5D9D9DADADADBDCDCDEDFE1E1E1DEE1E1DEDFDFDFE1E1E1E1E1E2E2E2E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E38D29292929292929292929292929292929292929292929292929292929292929292928282828282828282828282828282827272727272727272727272727262625252525252525252525252525242525252525252524242424242323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616161515151515151614141414141414151515151414141414141414141413131313131313131313131313131212121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000668081838587898B8D8F9294979A9C9FA2A5A8ABAEB2B4B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF1F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFBE0000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F8F8F8F7F6F6F5F5F3F1F0F0EFEDECE9E8E7E4E1E0DDDAD9CAB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B9BCBDBFBFC1C3C4C5C5C8C9C9CBCACACBCBCECFCFCECECFD0D1D3D3D6D6D7DADADADADEDCDEDEDEDEDEDEDFE1E1E1E1E1E3E2E1E3E1E1E1E1E1E2E1DFE1DFDFE1E2E3E3E3E2E3E3E3E4E4E4E3E3E3E2E2E2E2E2E1DFDEDBDBDADBD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F72757777787C7F8185888A8E909296999B9EA2A4A7AAACB1B2B6B9BCBFC3C4C6C9C9CECFD0D1D3D5D6D7D9DADBDBDBDCDFE1DFE1DFE1E2E2E1E2E2E3E4E4E3E3E3E3E3E3E4E4E6E6E6E6E6E4E6E6E4E3E3E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D96F292929292929292929292929292929292929292929292929292929292929292929292929282828282828282828282828282828272727272727272727272727262625252525252525252525252525242525252525252524242424242323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616161515151515151614141414141414151515151414141414141414141413131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23000000000000000000000000000000000000000000000000568081838587898B8D8F929497999C9FA2A5A8ABAEB2B4B8BBBEC1C4C7CACDCFD2D5D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EF8F0000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F8F9F9F9F8F8F8F8F7F6F5F5F5F3F1F0F0EFECECE9E7E5E4E0DEDCDACBB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2ABB1B3B3B5B5B6B9B9BBBCBFBFBFBFC0C1C3C3C5C8CACACACBCECECECFD0CED0D1D0D0D0D1D1D1D1D3D5D3D5D3D5D5D7D9D9D7D9D9D9DADAD9D9D7D9DADADADADBDBDBDBDBDBDCDBDBDCDBDBDBDADADADAD7D7D6D5D6D6D7D6D5D5D5D3D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846D6F71737675787A7D7E8185898C8C8F9296999C9CA2A5A8ACAEB1B5B6BBBDBDBFC1C3C5C8C8C9C9CACED0CFD0D1D3D3D5D6D7D7D9D9DADBDBDADADBDBDADADBDCDEDEDEDEDCDEDEDEDFDEDCDCDCDEDEDFDFE1E1E1E1E2E1E1E2E2E2E3E3E2E2E1DFDFE1E1E1E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEEC6029292929292A2A2A2A2A2A2A2A2A292929292929292929292929292929292929292929292929292828282828282828282828282828272727272727272727272727262625252525252525252525252525252525252525252524242424242323232323232323232323232323232322222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616161515151515151614141414141414151515151414141414141414141413131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000004C8081838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BBBDC1C4C7CACDCFD2D5D8DBDDDFE2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF850000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F8F8F8F8F8F8F8F7F6F6F5F5F3F3F1F0EFEDECEBE8E7E5E3E0DEDCCDB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B5B5B9BBBBBDBDBDBFC1C3C4C4C5C4C6C6C6C9C9CACBCECBCBCECECECECECECECECECECFCECECFCFD0D1D5D3D3D5D6D5D6D7D7D7D7D6D6D7D6D6D6D7D9DADADBDBDADADADAD7D7D9DADAD7D6D6D6D5D5D5D5D5D3D3D5D3D1D1D3D1D0CECEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6E71757577797C7E818286888A8C8F9093979BA1A2A5A7ACB0B1B2B5B8B9BCC0C1C4C5C9C9CACBCECFD0D3D5D5D6D7DADADADBDBDCDBDBDCDEDEDEDEDFE1E1E1E1E1E3E3E2E2E1E1E1DFDFDFDEDFDFE1E1DFE1E1E1DFDFDFDFDFDFE1DFDFE1DFDEDEDEDEDEDEDEDEDEDEDEDFDEDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDE4E292A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A29292929292929292929292929292929292929292928282828282828282828282828282727272727272727272727272626252525252525252525252525252525252525252525242424242323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171716161616161515151515151614141414141414151515151414141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000378081838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BBBDC1C4C6CACDCFD2D5D8DBDDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF5F00000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F8F7F6F6F5F5F3F1F0F0EFEDECE9E8E7E4E1E0DDD1B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BFC1C3C5C5C6C6C8C9CACBCECFD1D1D1D3D5D5D6D9D9DADADADADBDADCDCDEDEDFE1E1E2E3E3E3E4E3E6E6E6E6E6E6E4E3E4E6E6E6E6E6E9E7E9E9EAE9E7E9EAE9E9E7E6E6E6E7E7E6E6E6E7E4E4E3E3E2E1E1E1DEDEDCDEDBDAD9D6D7D5D3D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6F6F72737677787B7E8184858A8A8E9093969B9CA1A4A5A7ACB0B2B6B8B9BBBFC1C1C4C5C8C9CACBCFD0D1D5D5D7D7D9D9DADADBDBDBDCDBDCDBDBDBDBDCDEDEDEDEDEDFDFDFDEDFE1E1E1E1E1DFE1E1E1E2E3E2E1E1E1E2E1E2E3E2E2E1E2E3E4E6E6E4E3E3E4E4E4E4E6E6E6E6E4E4E6E4E3E4E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDB2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2929292929292929292929292929292929292929282828282828282828282828282727272727272727272727272626252525252525252525252525242525252525252524242424242323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616161515151515151614141414141414151515141414141414141414141413131313131313131313131313111212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000328081838586898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC1C4C6C9CDCFD2D5D8DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF5F0000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F7F7F6F5F5F5F3F1F0F0EFECECE9E7E5E4E0DED6B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B7C0C1C1C3C3C4C5C5C6C6C9CACBCBCECECFCFCED0D0D0D1D3D3D3D5D7D7D7D9D9DADADADADBDADADBDBDBDBDEDEDEDEDEDFDEDCDBDAD9D9DADCDEDEDEDCDCDEDFDFDFDFDEDEDEDEDEDEDEDBDBDBDADADADAD9D9D7D7D7D7D3D3D3D1D3D5D5D3D3D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6E71737677787B7E81828587898D8F9294979B9EA1A5A7ABAEB0B2B6B9BBBDC1C4C6C9CBCECFD1D3D3D3D5D5D6D6D6D6D7D7D7D7D7D7D9D7D7D7D9DADAD9DAD9D9D9D9D9DAD9D9D9D9D7D9D9DADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADADBDBDBDBDAD9D9D9D7D6D6D6D6D7D9D9D9D7D9D9D9D9D7D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1DC2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2929292929292929292929292929292929292828282828282828282828282828272727272727272727272726262525252525252525252525252425252525252525242424242423232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616161515151515151614141414141414151515151414141414141414141413131313131313131313131313111212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000238081838586898B8D8F929497999C9FA1A5A8ABAEB1B4B7BABDC0C4C6C9CCCFD2D5D7DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF2F00000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F7F6F6F5F5F3F3F1F0EFEFECEBE8E7E5E3E0DCBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B9BFBFC0C1C4C4C5C5C5C6C8C9CACBCBCBCFD0D3D1D1D3D1D3D3D3D5D6D5D5D6D6D6D7DADADBDCDBDEDEDFE1E1E2E1E2E2E2E2E2E3E3E4E3E3E1E2E3E4E3E3E2E3E3E3E3E3E3E3E1E1E2E1DFDFDFDEDCDCDCDCDADADBDCDEDBDBD9DADAD9D7D9D7D7D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38772757677787B7C7F818386898C8F909496999C9FA1A5A8ACB1B2B5B6B9BBBDC0C4C6CACBCED0D1D1D6D6D7D7D9DADADADBDCDCDEDEDEDEDFDFDFDFDFDEDEDEDEDCDADBDBDCDCDCDCDBDBDBDBDBDBDBDBDBDEDCDBDEDEDBDCDCDEDCDBDADAD9DAD9DADADADADADADADBDCDBDEDBDADBDEDEDEDCDEDBDCDBDADBDCDCDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6B72B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A29292929292929292929292929292929292928282828282828282828282828272727272727272727272726262525252525252525252525252525252525252525242424242323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616161515151515151614141414141414151515151414141414141414141413131313131313131313131313131212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000198081838586898A8D8F929497999C9FA1A5A8AAAEB0B4B7BABDC0C4C6C9CCCFD2D4D7DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF2F000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F7F6F6F5F5F3F3F1F0EFEDECEBE8E7E5E3E0C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9BBBBBDBFBFBFC1C3C5C5C5C8C9C9CBCBCACACBCBCECFCECECBCED0D0CFD0D0D1D1D1D3D3D5D5D5D5D7D7D7D7D7D9D7D7D9DADBDBDBDBDADBDBDCDEDEDBDBDBDEDEDFDFE1E1E1E1E2E1E1E2E2E2E2E2E1E1DFDEDEDFDFDFDFDCDBDCDCDEDEDADBDADAD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887577787B7C7E818489898D8F929697999B9CA1A4A5A8ACB0B2B3B5B9BBBDC1C3C5C5C9C9CACECFD0D1D3D5D6D7D9D9D9D9DADADADADBDCDEDEDEDEDEDEDFDFDEE1E1E1E1E1E2E2E2E1E1E2E2E2E1E1E2E2E1E1E1E3E3E3E4E3E3E2E2E1E1E1E1DFDFDFE1E1E1E1E3E3E2E2E2E2E2E2E2E1E1E2E3E4E6E7E6E4E4E4E6E6E7E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBBB2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2929292929292929292929292929292929282828282828282828282828282727272727272727272727262625252525252525252525252525252525252525242424242423232323232323232323232323232323232222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171616161616161515151515151614141414141414151515151414141414141414141413131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD82200F0F0F0F0F0F0F0F135DB5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000000F8081838586898A8D8F919497999C9FA1A4A8AAAEB0B4B7BABDC0C3C6C9CCCFD2D4D7DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF09000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F7F6F6F5F5F5F3F1F0F0EFEDECE9E8E7E4E1C8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B8BFC0C3C1C3C3C5C5C8C9CBCBCBCECBCFD1D1D3D3D5D3D3D3D5D3D3D5D5D5D6D7D7D7D9D7D9D9D9D9DADBDBDADBDADBDBDBDBDCDEDEDEDEDEDEDEDEDEDFDFDFE1E1DEE1E1DFDFDFDFE1E1E2E2E3E4E3E3E2E2E2E1E1E1DFDFDEDCDBDCDCDCDADADADAD9D9D7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866E7173767777797B7E81838589898C8F9294979C9EA2A5A7ABB0B0B2B6B8BCBDBFC1C3C6C6CACACBCED0D1D1D3D5D7D7D7D6D7D6D9DAD9DADBDBDBDCDCDBDEDEDEDCDCDEDCDBDEDBDEDEDCDCDBDBDBDEDCDBDBDBDADBDADADADBDADADADBDEDEDCDBDBDCDEDEDEE1DFDFDFE1E1E1E1E2E3E2E3E4E3E3E2E1E1DFDEDEDEDCDBDEDEDEDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E39C2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A292929292929292929292929292929292828282828282828282828282727272727272727272727262625252525252525252525252525252525252525252424242423232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171716161616161615151515151616141414141414141515151414141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB55D130F0F0F0F0F399FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000008081838486888A8D8F919496999C9FA1A4A8AAADB0B4B7BABDC0C3C6C9CCCFD2D4D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF00000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F7F6F6F5F5F5F3F1F0F0EFECECE9E7E5E4D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9B9BBBDBDBDBFBFBFC0C0C1C3C4C4C5C5C6C9C9C9C9CACBCED0D0D3D1D3D3D5D6D7D7DADADADBDEDBDBDBDBDBDADADADAD9D9DADBDCDCDBDBDBDBDBDBDEDEDEDEE1DEDEE1DEDEDFDEDEDEE1E1E1DFDEDEDEDEDEDEDEDCDCDCDCDEDCDBDEDEDCDCDADBDAD9D9D7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A7576777A7C7D818285898A8D909396999B9FA2A5A8ACB1B2B5B9BBBDC1C4C6C9CBCFD0D0D3D5D7DADBDEDEE2E3E3E4E4E6E9EAE9E9E9E9EAEBEBECECEBEBECEEEEEEEEEEEFF1EFEFEFF1F1EFEFEFF1EFEFEEEEEFEEECEEECEEECEEEFF1F1EFEEECECEBEAEAEAEBECEAEAEBEBEBEBEAE9E9E9E9E9E9E9E9E9E9E7E7E9E9E9E9E9E9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDF8B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A292929292929292929292929292929292828282828282828282828282727272727272727272727262625252525252525252525252524252525252525252424242423232323232323232323232323232323232222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171716161616161615151515151516141414141414141515151414141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9F390F0F2082BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000007581838486888A8D8F919496999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0C900000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F7F6F6F5F5F3F3F1F0EFEFECEBE8E7E5E0B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B1B5B6B9B9BBBBBBBDBFC1C1C3C4C6C8C9C9CACACACBCFCFD0D0D1D1D1D1D3D5D5D5D5D7D5D6D6D7D7D7D7D9D9DAD9D9D7D6D7D7D7D7D9DADAD9DADADADADADBDADADAD9D9D7D7D7D9D9D9DADADBDADBDCDCDEDEDEDEDCDCDCDCDCDBDCDBDCDEDEDEDCDBDAD9D6D6D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F72727677797B7C81838688898D8F9294979B9CA1A2A7A8ABAEB0B1B2B3B6B8BCBFC3C4C6C6C9CACECFD0D1D0D1D5D5D6D6D7D6D7D6D7D7D9D9D9D9D7D7D7D7D7D7D7D7D9DADBDBDCDBDADADADADBDADADBDADAD9D9D9D9D9D7D6D6D6D6D6D7D7D7D7D7D7D7D7DADBDBDADBDBDBDADADAD9D7DADADADADBDADADADADBDEDEDEDEDCDEDEDEDEDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1762C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A29292929292929292929292929292928282828282828282828282827272727272727272727272626252525252525252525252525252525252525252424242424232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171716161616161615151515151516141414141414141515151514141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8264B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF070000000000000000000000000000000000000000000000006681838486888A8D8F919396999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDEE1E4E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0BF00000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F7F7F6F6F5F5F3F3F1F0EFEDECEBE8E7E5C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B2B9BBBBBDBDBDBFC1C1C3C3C4C4C5C5C5C6C8C9C9CAC9C9C9CAC9C9CACACACAC9CACACAC9CACBCECFD0D0D0D1D1D1D1D3D5D5D3D3D3D5D3D5D5D6D6D7D7D9D9D9D9D9D7D7D7D7D9D9D7D6D6D6D5D5D5D6D6D5D6D7D7D7D7D7D7D7D7D6D7D7D5D3D3D5D3D3D3D1CFCBCBCAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6C6E6F717577797C7E818387898A8E909296999C9FA2A5A7ABACAEB2B5B9BBBDBFC3C5C6C8CACACBCECFD0D3D3D5D7D7D9DADADBDCDFDFDFDFDFDEDEDEDEDEDCDEDEE1E1DEE1E1E1DEDEDEDEDEDEDFDEDEDFDEDEDEDEDEDEDEDEDCDEDEDEDEDEDCDEDEDEDBDEDCDEDEDCDCDCDEDEDEDEDEDFE1E1E1E1E2E1E2E1DFDEDFDEDEDFDEDCDBDBDCDEDBDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3772C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A29292929292929292929292929292928282828282828282828282827272727272727272727272626252525252525252525252525252525252525252424242423232323232323232323232323232323232222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171716161616161615151515151516141414141414141515151514141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000006681838486888A8D8F919396999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDEE1E3E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F0BF0000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F7F8F8F8F8F7F6F6F5F5F5F3F1F0F0EFEDECE9E8E7D2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BABDBFC1C1C4C5C6C9C9CAC9CACBCACBCBCBCECACBCECFD0D1D1D3D3D3D5D6D7D7D9D7DADADADADADADBDBDBDBDCDEDCDEDFDEDFE1E1E1E1E1E3E4E4E6E4E4E4E4E4E4E4E3E3E6E4E6E6E6E7E6E7E7E7E9E9E7E7E7E7E7E7E4E6E6E6E4E4E3E3E4E6E3E3E3E2E1DEDCDBDAD7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F72757677787B7C7F818489898D909297999B9EA1A5A7ABAEB2B3B6B9BDC0C1C5C6CACACED0D0D3D3D3D5D5D5D6D6D5D5D7D9DADADADADADADBDBDEDEDEDEDFDEDEDFDEDEDEDCDCDEDFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE1E1E1E2E1E2E1E1E3E2E1E1E2E2E2E2E2E1E1E1E1E1E3E3E3E2E2E2E3E3E3E3E3E3E3E3E2E2E3E3E3E3E3E3E2E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEB522C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A292929292929292929292929292929282828282828282828282828272727272727272727272626252525252525252525252525242525252525252524242424232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171717161616161615151515151516141414141414141515151514141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000005181838486888A8D8F919396999B9EA1A4A7AAADB0B3B6B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F08F00000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F7F7F8F8F7F7F6F6F5F5F5F3F1F0F0EFEDECE9E7E0B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BAC1C1C3C5C6C8CAC9CACBCED0CECFD0D0D1D1D5D6D5D7D6D7D7D7DADADADCDCDCDEDEDEDEDFE1E1E1E1DFE1DEE1E1E2E1E3E3E3E4E6E6E6E4E6E6E6E6E6E7E6E6E3E4E6E6E6E6E6E7E7E9E9EAE9E7E7E9E7E9E6E6E6E6E6E6E4E4E4E4E3E3E2E2DFDEDEDEDADAD9D9D7D6D3D0D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F71757677787C7D818186898C8D909296999B9EA1A5A7AAACAEB2B6B8BCBDBFC0C3C5C5C8C9CACBCECFD1D0D5D6D6D7D9D9DADADADADBDBDBDADCDBDADADADBDCDBDBDBDCDEDEDEDBDEDEDFDFDFDFDEDEDEDEE1E1E1DEDEDEE1DEE1E1E1E1E1E1E2E3E4E4E3E2E2E3E3E3E3E4E6E6E4E3E3E4E3E3E4E3E4E6E6E6E4E4E6E4E4E3E3E2E3E3E2E1E1E2E2E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDE4E2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2929292929292929292929292929282828282828282828282828272727272727272727272626252525252525252525252525252525252525252424242423232323232323232323232323232323232222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171717161616161616151515151516161414141414141515151514141414141414141414131313131313131313131313131312121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004C81838486888A8C8F919396989B9EA1A4A7AAADB0B3B6B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F08F00000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F7F6F6F5F5F5F3F1F0F0EFECECE9E7C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B6C0C1C3C5C5C6C8C8C9C8C9C9C9CACBCED0D0D0D0D0D1D3D3D5D6D7D7D7D9D9DAD7DADADBDADADBDCDEDEE1E1E1DFE1E1E1DFE1E1E3E3E1E2E2E1E1E1DFDFE1E1E2E2E3E1E1E3E4E4E6E6E6E6E7E7E7E6E4E4E3E3E2E3E3E3E3E1E1E1E2E1E1E1DFDCDBDADBDADAD7D7D6D5D5D0D0D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38265686A6C6E70737477797C7E81828588898E9093979B9E9FA1A5A7A8ACAEB0B3B5B6B8BBBDBDC1C3C4C5C6C8CBCECECFD0D0D0D0D1D3D3D5D5D5D5D6D5D7D9D7D7D7D7D7D7D5D6D7D7D7D9D9DADADADADAD9D9DADBDCDCDCDADCDCDBDAD9D9DADADBDAD9DADBDBDBDADADBDBDBDADADADADADBDBDCDEDEDEDBDCDBDBDBDBDBDADBDADAD9D9DADBDADADADADADADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7322C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A29292929292929292929292929292828282828282828282828282727272727272727272726262525252525252525252525252525252525252524242424232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717161616161616151515151515161414141414141415151514141414141414141414131313131313131313131313131312121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004C81838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F08600000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F6F5F5F3F3F1F0F0EFECECE8DBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCBFBFBFC1C1C0C0C1C1C4C4C4C5C4C6C5C6C8C9CACACED0D0D1D1D3D3D3D6D7D9D7D9DADADADADBDCDEDEDCDCDEDCDEDEDEDEDEDEDFDFDFDEDEE1DFDFDEE1E1E1E2E2E1E1E1E1E1E1DFE1E1E1DFE1E2E2E1E1E1E2E2E2E2E1E1DFDFDFDEDEE1DFE1DEDEDEDADAD7D5D5D3D5D5D5D3D1D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382696B6E6F727375777B7E818386898C8F9294979B9C9FA2A5A7AAACB0B2B6B8B9BBBCBFC0C3C5C8CACACECED0D3D3D3D3D5D6D7D6D6D7D7D9DAD7DADBDBDCDBDCDFDFDEDEDFDFE1E1E2E1E1E1E1E1E1DFDEDEDCDBDBDBDADADADAD9D9D7D7D7D9D9D9D7DAD7D7D7D7D7D7D7D7D7D7D6D7D7D9D9D9D9D9D7D7D7D7D9DADADADADADBDBDAD9DADADBDBDBDBDAD9D9D9D7D6D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDC2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292929292828282828282828282828282727272727272727272726252525252525252525252525242525252525252424242424232323232323232323232323232323232222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717161616161616151515151515161414141414141415151514141414141414141414141313131313131313131313131311121212121212121111111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000003381838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F06000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3F3F1F0EFEDECEBE8BFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B8BBBBBCBBBBBCBCBDBDBDBDBDBDBDBFC0C3C3C4C5C5C6C6C6C8C8C9C9C8C8C8CACACACACBCBCECECFCFD0D0D0D0CECFD0D0D1D0CFD0D0CFD0CFD0D1D0D1D3D3D3D5D6D6D6D5D5D7D7D6D6D6D7D7D7D9D7D7D6D6D7D7D7D7D5D5D7D6D6D7D7D7D6D5D5D5D3D5D6D6D6D6D5D5D5D3D0D0CFCECAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846D6F70727677797B7D80818386888D8F9096999B9EA2A4A7ACAEB1B2B5B6B9BBBDBFC0C3C5C9C9CACBCFD0D0D0D1D3D3D6D7D7D7D9D7D9D9D9DADADBDBDADBDBDBDCDBDADBDBDCDADCDBDCDCDBDBDBDCDCDCDBDCDEDFDFDEDFE1DFE1DFDEDCDEDCDCDEDBDAD9D9DADBDADAD9DAD9D9DADADADADADBDCDCDBDBDBDBDADADADCDEDEDEDEDCDEDEDEDFDEDCDCDCDEDEDFDFE1E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E42D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A292929292929292929292929292928282828282828282828282727272727272727272726262525252525252525252525252525252525252524242424232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717161616161616151515151515161414141414141415151514141414141414141414141313131313131313131313131311121212121212121111111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970000000000000000000000000000000000000000000000003381838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F06000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3F3F1F0EFEDECEBD2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BFC4C5C5C5C5C6C8CAC9CACACBCBCBCBCECECECECECFCECBCECECECECECECECECECFD0D1D1D1D0D3D3D5D5D6D6D7D7D6D6D6D7D9D9D9D7D7D7D9D7D7D9DADADAD9DBDADADBDEDEDEE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E3E2E3E3E2E3E2E2E2E1E1E1DFDEDCDEDBDCDADADAD7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6D6F6F727577787B7D7F8285888C8E8F9396999B9C9CA1A2A5A7ABAEB1B2B5B8B9BDC0C1C4C4C5C8C9CBCECED0CFD0D1D0D3D5D5D6D6D5D6D5D6D5D3D3D3D3D3D1D1D1D0D0D0D1D3D5D5D5D5D5D5D5D5D6D7D7D5D5D5D5D5D5D5D5D5D7D7D9D9D9D9D9D7D6D6D7D7D7D6D5D5D5D5D5D5D6D6D5D6D7D7D7D7D9D9D9D7D7D7D9D9D7D9DADADADADAD7D7D7D7D7D7D7D6D6D7D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAB82D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2A2929292929292929292929292929282828282828282828282827272727272727272727262625252525252525252525252425252525252524242424242323232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616151515151515161414141414141415151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970000000000000000000000000000000000000000000000002E81838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F05600000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3F3F0F0EFEDECE9BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B9BFBFC0C1C1C3C4C3C4C4C5C5C4C4C5C8C9C9C9C9CACBCECBCBCED0D0D1D1D1D1D1D1D1D3D6D5D3D3D3D6D3D7D7D7D7D7D7DADADBDCDBDADADCDCDCDEDEDFE1DFDFDFE1E1DFE1DFE1E2E2E2E2E2E3E2E2E1E1E1E1E1E1DFDFE1E1E1E1DFDFDFDFE1E1E1E1DFDCDEDEDADBDADAD9D9D9D7D7D7D7D5D1D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866E70717375777B7B7E818388898D8F9294979B9CA1A4A5A7ACB0B2B3B5B8BBBDBFC0C1C4C6C8C9CBCACBCED0D0D1D3D3D3D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D7D7D7D7D7D7D6D6D6D6D3D3D6D5D5D5D3D5D5D5D5D3D1D1D1D1D1D3D3D1D3D3D1D1D1D1D3D3D1D3D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0CECECECBCECECBCECFCFD0D0D0D0D1D3D3D3D5D5D5D6D7D6D6D6D5D3D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCBB2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2929292929292929292929292928282828282828282828282827272727272727272727262525252525252525252525252525252525252524242424232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191717171717171717171717171616161616161515151515161414141414141415151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0000000000000000000000000000000000000000000000001981838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F030000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3F1F0F0EFEDECD4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6B7BFBFBFC0C0C1C3C3C3C5C5C6C6C9C9CACACACACACACACACECFCFCECFCECECFD0D0D1D0D0D0D0D1D1D1D5D6D6D7D6D7D7D7D9D9D9D9DADADADADADADADADADADBDBDBDBDBDCDEDEDEDEDFDEDFDFDEDFE1E1E1E1E1E1E1E1E1E1E2E2E3E3E3E4E6E6E6E6E7E7E4E6E6E4E4E3E3E3E2E1E1DFDFDEDEDCDBDADAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A787A7B7D80828386888C8F909396979B9CA1A2A7A8ACB0B3B6B8B9BBBDBFC0C3C5C9CACBCED0D3D5D6D6D6D7D9DADBDCDCDCDEDEDEDFE1E1E2E1E3E3E1E1E1E1E2E3E3E4E3E3E2E2E1E1DFDFDFDEE1DEDEDEDEDEDEDEDEDEDEDCDCDCDEDEDEDCDBDBDBDBDBDBDCDBDBDBDADADCDEDCDCDBDCDCDBDADAD9D9D7D7D7D7D6D6D7D9D9D9DADBDADADADADBDEDBDBDADADADADADADADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5B42D2D2D2D2D2D2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A2A29292929292929292929292929282828282828282828282827272727272727272727262625252525252525252525252525252525252525242424242323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171616161616161515151515161614141414141415151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000001981838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F030000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3F1F0F0EFEDECBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8CCC9C4C5C6C6C6C6C5C6C9CBCACACACBCBCED0D0D1D0D1D0D1D5D5D5D5D5D3D3D3D3D3D1D1D1D1D1D3D3D5D5D3D5D5D3D3D3D5D5D5D5D3D3D5D5D6D6D7D7D7D7D7D7D7D7D7D9D9DADBDBDADBDCDADADBDBDEDEDFDFE1E2E2E2E1E1E1E1E1E1DFDFDEDEDEDEDEDFDEDEDFDEDEDEDEDEDEDBDBDBDADAD9D9D6D5D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E6F727376777B7C7E818389898C8E909697999C9EA2A4A7AAABAEB1B5B6B8BBBDBFC1C1C3C3C5C8C9C9CBCECED0D0D0D3D3D6D5D5D6D6D5D6D5D6D7D6D6D6D6D6D7D7D6D6D6D5D6D5D5D5D6D6D6D6D7D9D9D7D7D7D7D9DADADBDBDBDBDBDCDCDCDEDFDEDFE1DFDFDEDEDEDBDBDBDADAD9DBDCDCDCDBDBDBDBDBDBDEDEDEDEE1DEDEE1DEDEDFDEDEDEE1E1E1DFDFDEDEDEDFDFDFDEDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3A62E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292929282828282828282828282827272727272727272727262625252525252525252525252525252525252524242424232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717161616161616151515151515161414141414141515151514141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000001981838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F030000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F6F6F6F5F5F5F3F1F0F0EFEDD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BAC5D0C1BBB9BBBBBBBCBFBFBFBFBFBDBFC0C0C3C3C1C1C1C1C1C1C3C3C3C3C3C1C1C3C3C3C3C1C1C1C0C0C0C0C1C3C3C4C4C4C4C5C6C6C6C9C9C9CACBCACACBCAC9CBCBCBCBCECFD0D3D1D3D5D6D6D6D6D7D6D7D7D6D6D9D9D9D9DADADADBDBDADADADAD9D9DADADADADBDADADADAD9DAD9D7D7D7D5D5D5D3D3D3D1D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6E6E71737475777A7B7D8083888A8D90929396979B9E9FA2A5A7A8AAACB1B2B5B8B9BBBDC0C3C4C5C6C8C9CBCED0D0D0D1D3D3D5D7DADADADADADBDBDCDCDCDEDEDCDEDCDBDBDBDCDCDBDAD9D9D9DADADADBDBDBDEDCDCDEDFDEDEDEDEDEDEDCDEDEDFDEDFDFE1DFDEDFDEDEDEDEDEDEDEDCDEDCDEDEE1E1E1E1E1E2E2E3E3E3E4E3E4E3E3E3E3E6E6E6E4E4E3E3E3E6E3E4E3E4E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E29C2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A2A292929292929292929292929292828282828282828282828272727272727272727272625252525252525252525252525252525252525242424242323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717161616161616151515151515161414141414141415151514141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000000F81838486888A8C8F919396989B9EA1A4A7AAADB0B3B6B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F026000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F7F6F6F6F5F5F5F3F1F0F0EFECC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC5D0D1D5DCCEC9C9C9CACACBCACACACBCBCBCBCECFD0D0D0D1D1D1D0D1D1D1D3D3D3D3D0D1D0D0CFCFD0D1D1D1D1D1D1D1D1D5D5D7D7D7D7D6D7D9D9D9D7D7D6D7D7DADADAD9DADADADCDEDEDEDEDBDEE1E1E1E1E1E1DFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDCDCDEDEDBDBDADADADAD9D7D9D7D7D6D6D5D3D1D0D0D0CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38672737677797C7D818285888A8C8F9094979B9C9EA2A5A5A8AEB1B2B5B9BCBDBDC0C3C4C4C5C5C5C8C9CACBCECECFD0D1D3D1D3D1D1D3D5D5D5D7D7D7D7D7D7D9D7D9D9D9DAD9D9D9D9DAD9D9D9D9D7D9D9D7D7D7D7D7D7D6D6D5D7D7D6D7D7D7D7D9D9D7DADADAD7D7DAD9D7D9D7D9D9D9D9D7D9D9DADAD9DADAD9DAD9D9D9DAD9D9D9DBDCDCDBDADADBDEDEDEE1DFDFDFE1E1E1E1E2E3E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E19C2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A2A2929292929292929292929292928282828282828282828272727272727272727272626252525252525252525252525252525252525242424242323232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191717171717171717171717161616161616151515151515161414141414141415151514141414141414141414141313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000081838486888A8D8F919396999B9EA1A4A7AAADB0B3B6B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F000000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F7F6F6F5F5F5F5F3F1F0F0EFE2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7BFC5C5C6C9CED7C9C1C0C3C3C3C3C4C4C4C6C6C8C8C9C9C9C9C9C9C9C9C9C9C9C9CACACACACBCACECACACECECECECFD0D0D1D0D0D0D0D0D1D0D1D1D3D3D5D6D5D7D7D6D7D7D7D9DAD9D9D9D7D7D7DAD9DADADADBDCDEDEDFDEDEDEDFDFDFE1E1DFDFE1E1E1E1DFDFDFDFDFDEDCDCDEDBDCDCDAD7D9D7D7D7D7D3D3D3D3D1CFCECBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B380646568696C6E70737778797C7E818284888A8D9093979C9CA1A2A7AAACACB1B2B3B6B8B9BCBFC0C3C4C5C6C9C9CACACBCBCBCFD0D0D1D1D5D5D5D6D7D6D7D7D7D7D7D7D7D7D7D9DAD9DADBDADADBDBDBDBDADBDBDADADADBDBDCDEDFDFDEDEDEDBDBDBDEDEDEDCDBDBDAD9D9D9D9D9DADADADBDBDBDBDBDBDCDBDCDCDEDEDEDEDBDBDBDADCDCDADCDCDCDCDEDBDBDBDBDCDCDEDEDEDEDEDEDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADA982E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A2A2929292929292929292929292828282828282828282828272727272727272727272625252525252525252525252525252525252525242424242323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191717171717171717171717171616161616151515151515161414141414141415151515141414141414141414141313131313131313131313131312121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000081838486888A8D8F919396999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDEE1E3E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F6F6F6F5F5F5F3F3F1F0F0EFCAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B8C3C8C9C6C8C9CAD0D9C9C5C4C3C4C4C6C6C6C5C5C6C6C9CAC9C9C9C9C9C9C9CACACBCACACACACACACACACBCBCBCBCACECFCFD0CFCFCECFCFCECECECFCFCFCFD0D0D0D1D1D1D3D3D3D5D3D3D5D5D5D5D6D5D5D5D5D6D7D7D7D7D9DADBDAD9DADBDEDEDEDEDBDCDCDCDEDFDEDBDBDBDEDADCDEDBDBDADADBDBDCDBDAD9D7D7D6D5D5D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6E7172757577787B7D7F8183868A8C8E9094979B9B9EA2A5A7ABACB1B3B6B8B9BBBFBFC3C3C5C6C9CACECFCFD1D3D3D3D3D5D5D7D6D7D6D5D6D6D9D7D9D7D7DADADADADADADADADADADADADADADADADBDBDADADADADADAD9D9D9DAD9DADAD7D7D7D7D9D9D9D7D7D7DADAD9D9D9D9D7D7D9D9D7D7D7D7D7D7D9D9DADAD9D7D7D7D7D7D7D7D7D7D7D7D7D7D9D9D7D6D6D6D6D6D7D7D6D7D6D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCF752E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A2929292929292929292929292928282828282828282828282727272727272727272626252525252525252525252525252525252525242424242323232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151515141414141414141414141313131313131313131313131312121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000081838486888A8D8F919396999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDEE1E4E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0F0EFB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BCC7CACACACACACBCECED6E1D0CACACBCBCBCFD0D0D0D0D0D0D0D0D3D3D3D3D3D1D1D3D5D3D5D1D3D1D1D1D3D3D3D0D0D1D0CFCFCFCECECECECBCBCBCECECFCFCFCED0D1D1D1D1D3D3D3D1D3D3D3D6D6D7D7D7D7D7D7D7D7D9D9D9D9DADADADADCDEDEDFDEDEDEDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDBDADBDADADADBDBD9D9D7D6D5D5D1D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856C6E6F7172737577797C7E818283868A8C8F9293969B9C9EA2A5A5A8ACAEB1B1B2B3B5B9B9BBBDBFC0C3C4C5C6C9C9CBCAC9CBCFCFD0D0D0CFD0CFCFD0D0D0D3D3D0D1D0D0CFCECECECECECBCBCBCAC9CACACBCECECECECECECECFD0D0D0CFCECECFCECECFD0D0D1D1D3D5D3D3D3D3D1D1D3D5D5D1D1D1D1D1D1D0D3D5D3D5D6D6D6D7D7D7D7D7D7D7D9D7D7D7D9DADADADAD7D7D7D7D7D7D7D6D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDA732E2E2E2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292929282828282828282828282727272727272727272726252525252525252525252525252525252525242424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151515141414141414141414141313131313131313131313131312121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000007C838486888A8D8F919496999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0F0DAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC8D3C9C9CACBCECFD0D0D1D1D6E1D0C8C9C9C9CACACACACACACBCBCACBCBCECBCFCECBCACACAC9C9C9CACBCBCACACAC9C9C9C9C9C9C9C9C9C9C9C9CAC9CACACBC9C9CACECECECFCECECFCECBCBCECECECECECBCECED0D0D0D0D0D1D0D0D1D1D0D1D3D3D1D0D0D0D0D0CFCECECFCFD0CFCFD0CFCECFCECFCFD0CFCFCECECBCBCBCACAC9C8C9C5C5C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856E6F72757677787C7E7F818588898D909297999B9FA1A4A5A8ACAEB1B2B3B6B6B9BBBDBFC0C3C4C6C9CACBCECFCFCFD0D0D1D3D3D3D3D1D3D3D1D1D1D3D3D3D5D5D6D6D6D6D7D9DADADADAD9DADADADAD9D7D6D7D7DAD9D9D7D9D9DADADBDBDADADADADBDCDCDCDBDBDADBDBDAD9DADADADADADADBDBDADCDCDBDCDCDEDEDCDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE1E1E1E1E1DFE1E1DFDFDFE1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3792F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292928282828282828282828282727272727272727272626252525252525252525252525252525252525242424242323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515161614141414141415151515141414141414141414141313131313131313131313131311121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2300000000000000000000000000000000000000000000000067838486888A8D8F919496999C9FA1A4A8AAADB0B3B7BABDC0C3C6C9CCCFD2D4D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2DD00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0F0C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BECCDADACBBFBFBFC1C1C4C5C5C6C8CBD7C6C1C1C3C3C3C3C5C3C5C6C8C8C9C9C9CACAC9C9CBCBCACBCBCECECECECECFCECECBCBCBCBCBCECFD0D0D0D0D0D0D0D0CFD0D1D3D5D5D6D5D6D6D7D6D6D5D7D7D7D9D7DADADADADBDBDADADADCDCDCDCDBDEDEDFDFDFDEDEDCDCDEDEDEDEDEDEDEDEDEDBDCDCDCDEDEDEDEDCDBDBDBDBD9D9D9D7D6D5D3D1CECBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E7173757677787C7E7F8184888A8C8E909396999B9CA2A2A5A7AAABAEB1B2B6B8B9BDBFBFC1C4C3C5C5C6C9CACBCECFD1D3D3D3D3D3D3D3D3D1D3D1D1D1D3D5D5D3D5D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D9D9D9DADADADADADBDCDCDEDEDEDCDBDCDCDEDCDEDEDEDFDFDFE2E1E3E3E3E4E4E3E4E4E4E4E4E3E4E4E4E6E6E4E4E6E9E7E7E9E9E7E6E6E6E6E4E3E2E1E1E1E1E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2762F30303030303030303030303030302F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2A292929292929292929292929282828282828282828282727272727272727272726262525252525252525252525252525252525242424242323232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515151614141414141415151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F9FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD2D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000067838586888A8D8F919496999C9FA1A4A8AAAEB0B4B7BABDC0C3C6C9CCCFD2D4D7DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2C00000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0EFB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BFD1D9DADADCD6CBCECBCBCECFD0D3D1D3DAE2D1CBCBCECECECFCFD0D0CFCFCFD0D0D0D0D0D0D0D1D0D0D1D1D1D1D1D3D5D5D5D5D3D3D1D1D1D3D1D1D3D1D3D3D3D5D3D5D5D5D5D6D5D5D5D6D6D7D5D7D7D7D7D7D7D7DADCDBDCDEDEDCDBDCDBDCDBDBDAD9DADADADADADADADADBDBDADAD9D7D7D7D7D6D7D9D7D7D7D7D7D6D5D5D3D5D1D1D1D0D0CECBCACAC8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E6F6F72737577787C7D808183868A8C8E9296979B9E9EA2A5A5A8ABACAEB1B5B8B9BBBCBDBFBFC3C4C5C5C6C6C8C9CACACECFD0D1D0D3D1D3D3D3D3D3D3D3D3D5D3D3D5D5D5D5D5D5D5D3D3D3D5D5D5D5D7D6D6D6D5D5D6D6D7D6D6D6D6D7D7D7D9D9DBDBDBDBDCDEDEDFDFDFDFE1E1E1E1E1E1E1E1E2E3E3E3E3E4E3E4E4E6E4E6E6E7E7E7E9E9EBEBEAE9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF18030303030303030303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A292929292929292929292929282828282828282828282827272727272727272726262525252525252525252525252525252525252424242423232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515151614141414141414151515141414141414141414141313131313131313131313131311121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1391BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDAE340F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000067838586898A8D8F929497999C9FA1A5A8AAAEB0B4B7BABDC0C4C6C9CCCFD2D4D7DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2C00000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0DDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC6D4D9DADADADCDCCFC1C1C3C3C3C5C5C8C9C9CED7C9C5C5C5C5C4C4C4C5C5C5C5C6C6C8C6C5C5C4C3C3C3C1C1C3C3C3C5C5C5C5C3C4C5C3C3C3C3C3C5C4C5C5C4C4C4C4C5C5C5C5C6C5C5C8C9C9C9C9CACBCBCBCBCECBCECBCBCFCFCFCFD0D0D0D1D1D1D1D1D5D5D5D5D5D5D5D7D7D7D7D7D7D7D6D5D6D6D6D3D3D3D5D5D5D5D3D3D1D0D0D0CECECAC9CACACAC9C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38167696A6C6D6F7171747577797C7E8183898C8D8F9093979B9CA1A2A7A8ABACB0B2B3B6B9BBBCBFBFC0C3C4C5C6C6C8C6CAC9CACACACBCBCBCECECECECBCAC9CACBCACACACBCBCACBCBCBCBCECECECBCBC9C9C9C9C9CACACACBCBCECBCECFD0D0D0D1D1D0D1D1D1D1D0D3D3D5D7D7DADADADAD9D7D9D7D9D7D7D9D9D9D9DADAD7D7D7D7DADADADBDADADADADADCDEDEDEE1E1E2E1E2E2E3E4E6E6E4E4E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4793030303030303030303030303030303030303030303030302F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A292929292929292929292929282828282828282828282827272727272727272726262525252525252525252525252525252525242424242323232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171716161616161515151515151614141414141414151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2098BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB54F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000067838586898A8D8F929497999C9FA1A5A8ABAEB1B4B7BABDC0C4C6C9CCCFD2D5D7DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2C00000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0CBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BECCD7D8D9DADADCDCDDDDD7CECFCECFD0D0D1D1D3D3D9E3D3CBCACACBCAC9C9C9C9C8C9C9C9C9C9C9C6C9C8C6C6C6C6C6C9C8C8C8C9C9C8C5C5C5C5C5C4C4C4C4C4C4C4C4C5C4C5C4C4C5C6C8C8C9CACACBCACACACBCBCECECFCFD1D1D3D5D5D6D7D6D7D7D9D9DADADAD9D7D7D7DADADADADADBDBDCDCDCDBDBDBDADADADADADAD9D9D9D9D7D5D3D3D3D1CFCECBCECACAC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E6465646567696A6C6D6F747678797D7E8184878A8D909296999B9C9FA1A1A5A5A8AAACB0B2B5B6B9BBBDBFBFBFC1C3C3C4C3C4C5C6C6C8C8C9C9C9CAC9C9C9C9C9C9CBCBCBCBCECECECFCFCED0D0CFCFCFCECFCFD0D0D1D0D1D3D3D3D3D3D3D3D3D5D5D3D3D5D5D6D7D7DADBDADBDAD9D9DADADADBDADAD9D9D7D7D9D9D7DADADADBDBDBDCDCDEDEDCDCDCDEDEDEDEDCDCDCDBDEDEDBDEDEDEDEDEDBDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDF7630302F2F2F2F2F2F2F2F2F2F3030303030303030303030303030302F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2A2929292929292929292929292828282828282828282827272727272727272726262525252525252525252525252525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171716161616161515151515151614141414141414151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2DA7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD720F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000067838586898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC1C4C6C9CDCFD2D5D8DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2C00000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C2D0D6D7D8D9DADADCDCDDDDDEDAD0D1D3D5D3D5D3D3D5D5D7E1D1C9C8C9C9C9C8C8C9CACACACAC9CACBCBCBCBCBCBCBCACACACACACACACAC9C9C9C8C8C8C9C6C6C6C6C6C6C6C9C9CACBCACACACACACBCBCACBCBCBCBCECBCED0D0D1D1D1D3D3D5D6D9D9D7DADBDBDBDBDADBDCDBDBDEDCDEDCDEDEDEDEDFDEDFDEDEDEDEDCDBDBDBDADAD9D9D9D7D5D3D3D3D1D0CECECECBC9C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38268696B6D6F72737577777B7D81828388898C8D8F9094979B9C9EA1A2A4A4A5A8A8AAACAEAEB1B1B1B3B6B8BBBCBDBDBFBFBFC0C3C4C4C3C3C3C3C3C3C3C4C5C6C6C8C8C8C8C8C6C5C5C5C6C6C6C5C5C5C4C4C3C5C5C5C6C6C6C6C8C9C9C9C8C8C8C9C8C8C8C9C9CACBCAC9CACACACBCBCBCACACBCECECFD0D0D0D0D0D1D1D1D5D6D7D7D7D7DADAD7DADAD7D7DAD7D7D7D7D7D7D9DAD9D9D9D7D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDE532F303030303030303030303030302F2F2F2F3030303030303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2A29292929292929292929292828282828282828282828272727272727272727262625252525252525252525242525252525252424242423232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161615151515151614141414141414151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD911A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000067838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BBBDC1C4C6CACDCFD2D5D8DBDDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2C10000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F6F6F6F5F5F5F3F3F1EBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCC6D3D4D6D7D8D9DADADCDCDDDEDEE0D6CACECFCFCFCECBCECECED1DECBC4C3C3C4C5C5C5C5C5C5C5C6C6C6C6C6C6C6C9C8C9C9C9C9C8C8C8C9CACBCACACACACACACACACAC9C9CAC9C8C6C8C8C8C6C5C5C5C5C6C8C8C9C9C9CBCBCBCED0D0D0D1D1D3D3D3D5D5D6D6D7D7DAD9D9DAD9D9DADADADAD9D7D7D7D7D7DADADADADADADADADADADAD9D9D7D6D6D5D5D5D5D1D0CECBCBCBC9C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856E6E6F72757678797D7E818386888A8D8F929496999B9CA1A2A7A8AAACB1B1B5B6B6BBBBBCBDBFC1C1C3C4C5C6C6C6C8C9CACACACACACBCBCBCECECFD0D0CFCECECECECED0D0D1D1D1D1D1D0D3D1D0CFCFCFCECECECFCECECECECECECECECECFCBCECBCBCBCACACACECECECECECECECFCFCFCFD0D0D3D3D1D5D5D5D5D5D6D6D6D5D5D5D5D5D6D7D7D7D9D9D9DADADADCDBDADBDEDEDEDCDEDBDCDBDADBDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D950303030303030303030303030303030303030302F2F2F30303030303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2929292929292929292929292828282828282828282827272727272727272726262525252525252525252525252525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161615151515151614141414141414151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA72D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000058838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BBBDC1C4C7CACDCFD2D5D8DBDDDFE2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2C10000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F7F6F6F5F5F5F3F3F1DBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7BFCDD1D3D4D6D7D8D9DADADCDCDDDEDEE0E0D9D1D3D5D3D5D5D5D5D5D7DAE3D5CBCBCBCBCBCECECECECECECECFCFD0D0CFD0D0CFCFCECECECECBCBCBCBCBCBCBCBCACACBCACACAC9CACACACAC9C9C9C9C9C9C9C9C9C9CACBCACACACACBCBCBCFCED0D3D1D3D1D3D3D3D5D7D7D9DADADBDBDADCDBDADADADADADADADADADAD9D7D7D7D7D6D6D5D3D1D0D0CFCBCACACAC9C9C8C6C4C3C3C3C0BFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3806767686A6B6D71737577787B7C7E7F8183888A8C8D8F909296979B9C9C9FA4A5A7A8ACAEB0B0B1B3B5B5B6B8B9BBBCBDBDBDBCBDBFBFBFBFBFBFC0C0C0C1C3C3C3C1C1C1C1C3C4C5C6C6C5C5C6C5C4C5C5C4C4C5C4C3C3C3C4C3C3C5C4C3C5C4C4C4C6C8C8C6C9C9C9C9CAC9C9C9CACBCBCBCECFCFCFCFD0D1D3D1D3D5D5D5D5D5D6D6D7D5D6D5D6D7D9DADADADADBDEDBDADBDBDBDBDEDCDCDEDEDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E15430303030303030303030303030303030303030303030302F2F303030303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292928282828282828282828272727272727272727262625252525252525252525242525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161615151515151616141414141414151515151414141414141414141413131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5410F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004D838587898B8D8F929497999C9FA2A5A8ABAEB2B4B8BBBEC1C4C7CACDCFD2D5D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2C10000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F7F6F6F5F5F5F5F3F1CCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9C2CED0D1D3D4D6D7D8D9DADADCDCDDDDDEE0E0E0D5CACAC9C9C9C9CBCACACAD0D7C9C3C4C4C4C4C4C3C3C3C3C4C5C4C4C4C4C4C4C3C1C3C3C4C3C3C3C1BFBFBFBDBBBBBBBBBBBCBCBBBBBBBBBBBBBBBBBBBBB9B9BBBBBBBBBBBBBCBCBDBDBDBDBFC1C3C3C3C5C8C9C9CACBCFCFCED0CFCFCFD0D0D1D0D1D0D0D0D0D0D1D1D1D0D0D1D1D0D1D3D0D1D0D0D0D0D0D0D0CFCECBCBCBCACAC9C5C5C5C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887274757778787C7C7D7F818383888A8D8D8E8F9396999B9C9FA2A4A5A8AAACACAEB1B2B5B5B6B8B8B9BBBBBDBDBFBFBFC0C1C1C1C1C1C3C3C4C3C3C4C4C4C5C5C5C5C6C6C6C9C9C9C6C8C6C6C8C9C9C9C9C9C9CACACBCBCBCBCBCBCECBCBCBCACACAC9C9C9CACAC9CACACBCBCECFCECFCFD1D0D1D1D3D6D7D5D7D6D7D7D9D9DADAD9DADADBDBDEDBDEDFDFDFE1DFDFDFE1E1DEE1E1DFDFDFDEDFDFE1E1E1E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDC5430303030303030303030303030303030303030303030303030302F2F303030303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2A292929292929292929292928282828282828282828272727272727272727262625252525252525252525252525252525252424242423232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161615151515151516141414141414151515151414141414141414141413131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1379BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004D838587898B8D8F929497999C9FA2A5A8ABAEB2B4B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF1F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2C10000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F7F6F6F6F5F5F5F3F1C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BCC7CCCCD0D0D1D4D4D6D7D9DADADADCDCDDDEDEE0E0E0DCD3D5D5D5D3D3D1D1D3D0D5DED0C8C6C8C8C8C8C8C9C8C6C6C8C6C6C8C8C9C9C8C8C6C6C5C5C5C5C5C4C4C3C3C3C4C1C4C3C3C1C3C1C1C1C1C1BFC1C0C0C0C0BFC1C1C4C4C5C5C4C5C5C5C6C8C9CACBCBCBCECBCBD0D0D0D0D0CFCECFCFD0D0D1D1D1D3D3D5D3D1D1D1D3D3D5D3D3D3D3D3D3D3D3D3D3D1D3D1D1D1D0D0CECBCAC9C8C5C5C4C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6D6D6E717173757678787C7E7F81838689898D8E90929697999B9C9FA2A4A5A5A7A8A8ACACAEB1B1B1B1B3B3B3B3B3B3B2B3B6B8B8B9B8B8B9B9B9B9BBBBBCBDBDBDBDBDBDBCBDBDBDBDBDBFBDBDBCBCBCBDBDBDBDBDBDBDBDBDBDBDBDBDBCBDBDBFBDC0C0C0C1C3C3C3C3C3C3C4C4C5C6C6C8C9CBCAC9CACBCBCECBCBCFCFCECED0CFD0D1D1D3D3D3D5D7D7D7D7D7D7D7D7D7D7D9DADAD9D9D9D7DADADADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDF5430303030303030303030303030303030303030303030303030303030302F2F3030303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292928282828282828282828272727272727272727262625252525252525252525252525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161615151515151516141414141414151515151414141414141414141413131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1A91BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004E848587898B8D909295979A9DA0A2A5A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3C10000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F6F6F6F5F5F5F3F1B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8BEC7C9CBCCCED0D1D3D4D6D7D8D9DADADCDCDDDDDEDEE0E0E0D8CECFCECFD0D0D0CFD1D1D7E2D1CBCBCBCAC9C8C9C8C8C6C6C6C6C6C5C5C5C3C1C1C1C3C1C1C1BFBFBFBFBDBFBFBFBFC1C1C1C0C1C1C1C3C4C4C3C3C4C4C4C4C5C6C6C6C6C5C9C8C9C9CACACACBCBCECBCECED0D0D0D1D3D5D5D5D6D6D7D6D6D7D6D6D7D7D7D6D7D7D7D7D7D7D7D7D7D6D5D3D1D1D1D0CFD0CECECBCACAC8C5C4C1BFBFBFBFBFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B381656768696B6E6F72737576787C7E818185898A8D8F90939797999B9C9FA2A4A5A8AAABACACACB0B1B3B6B6B8B9BBBCBDBFBDBDBFBFBFBFBFBFC0C0C1BFC1C3C3C3C3C3C5C5C4C4C5C5C5C8C9C6C6C6C6C5C5C5C4C4C3C3C1C3C3C1C1C1C1C1C1C1C1C3C3C3C3C4C4C3C3C4C4C5C4C5C5C6C5C8C8C9CACBCBCBCBCECECED0D1D0D1D3D3D5D5D5D3D5D7D7D9DADAD9D7D7D7D7D5D5D5D6D7D9D9D9D7D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D95330303030303030303030303030303030303030303030303030303030303030302F2F30303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A292929292929292929292928282828282828282828272727272727272727262625252525252525252525242525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717161616161615151515151516141414141414151515151414141414141414141413131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F20A7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9F200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004E848588898B8E909295979A9DA0A2A5A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3B70000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B8C0C5C7C7CACCCCD0D0D1D3D4D6D7D9D9DADADCDCDDDDDEDEE0E0E0D7CECECECBCFD1D0D0D0D0D5DECBC5C6C6C5C6C8C8C8C6C8C8C9C9C8C6C5C5C5C4C4C3C1C3C3C4C3C0C1C1C1BFBFBFBDBDBDBFBDBDBDBCBBBBBBBBBBBBBBB9BBBCBDBFBDBDBFBFBFBFC1C0C3C3C3C4C4C6C6C8C8C9CACECFCFD0D1D1D3D1D0D1D1D1D1D3D0D0CFCFD0D1CFCFCFCFCECECECBCECECACACBCAC9C9C8C6C4C4C3C3C3C1C0BFBDBDBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887377767778797B7D7E818185898A8D8F909296999B9CA1A2A4A5A7AAABACAEB1B2B3B6B8B9BBBCBDBDBFC0C0C1C3C4C5C6C8C8C9CACACBCACAC9C9C8C9C9C9C9C8C9C9C6C6C6C6C6C8C6C6C5C5C4C4C5C5C5C5C5C5C5C5C5C4C5C4C4C4C4C4C4C4C5C5C5C5C6C5C8C8C8C9CACACBCBCECFCFCFD0D1D3D3D1D3D5D6D5D6D7DADADADCDBDBDBDCDBDCDCDCDBDCDEDEDFDFDFE1E2E1E1E1E2E2E2E2E1E1E2E3E4E6E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E755313131313131313131313131313131303030303030303030303030303030303030302F2F30303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A292929292929292929292929282828282828282828282727272727272727272625252525252525252525252525252525252524242424232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191717171717171717171717161616161615151515151516141414141414151515151414141414141414141413131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004E848588898B8E909395989A9DA0A2A6A9ACAFB2B5B8BBBFC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F5F4F39100000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3E1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C0C1C3C5C7C9CBCCCCD0D0D3D4D4D6D7D9DADADADCDCDDDDDEDEE0E0E0DACFD0D0D0D1D0D1D0D0D0D5DECEC5C8C8C8C8C6C8C6C5C5C5C5C6C6C6C5C5C4C3C5C5C3C0BFBDBCBBBBBCBCBCBBBBBBB9B9B9B8B6B6B9B9B9B9B9B9BBBBBBBBBDBDBFBFC0C1C3C4C4C4C4C5C5C5C6C6C9CACBCECFD0D0D0D0D3D3D5D7D9D9D9DADADAD9DADADBDADADADBDBDBDCDCDAD9D9D9D7D5D5D3D5D5D1D1CFCECBC9C6C6C5C4C4C3C3BFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E636465656769696C6E6F72757878787C7E81818386898A8C8F90929396979B9B9C9EA1A4A4A5A5A7A8AAAAAAACACAEAEAEB1B0B1B2B3B3B3B3B3B3B3B5B5B6B6B8B9B6B5B6B6B6B6B5B5B6B6B6B6B6B5B6B8B8B8B8B8B8B9BBBBBBBBB9BBBBBCBCBDBDBFBFBFBFBDC0C1C3C3C3C3C3C3C3C3C4C5C9C9C9CBCBCED0D0CFCFD1D5D6D6D7D5D7D7D7D6D6D6D7D9DADAD9DADBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADA53313131313131313131313131313131313131313130303030303030303030303030303030302F30303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2929292929292929292929282828282828282828282727272727272727272626252525252525252525252425252525252524242424232323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616151515151515161414141414141415151514141414141414141414131313131313131313131313111212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F48B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD560F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004E8486888A8B8E909395989B9DA0A3A6A9ACAFB2B5B8BBBFC1C5C7CACED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F39100000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3D7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9BBBDC0C1C4C5C7C9CBCCCCD0D0D3D4D4D6D7D9D9DADADCDCDCDDDDDEDEE0E0D8D0D1D1D1D1D3D3D5D6D6DAE1D1CACACAC9CACACAC9C9C6C6C6C9C6C6C5C6C4C4C4C4C3C1C0BFC0BFBCBCBBBBB9B9B9B8B6B6B6B8B8B6B6B6B8B8B8B8B9B9B9B9B9BBBBBBBDBDBFBFBFBFBFC0C1C3C5C5C5C5C6C8C9CACBCECFD3D1D3D3D3D3D3D5D3D6D6D6D6D6D5D5D6D6D5D5D3D3D3D5D5D5D5D1D1D1D0CFCECBCBCAC9C8C8C5C5C3C3C1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382676869696C6D6F7172757678797C7D81818286898A8A8C8E8F929396999B9C9C9FA2A4A7A7AAA8AAACAEB1B1B1B2B2B2B2B3B3B6B6B8B9B6B6B6B6B5B3B5B3B3B3B3B3B3B2B1B2B2B3B3B5B5B5B6B5B5B5B6B8B9B6B6B6B6B6B6B6B8B8BBBBBBBCBCBCBDBDBBBCBDBFBFBFBDBDBFBDBFBFC1C3C3C4C6C6C8C8C9CACBCACBCECFCECFCFD1D3D3D3D3D3D1D3D3D5D6D6D5D5D7D6D6D7D7D7D9D7D7D7D7D9DADADBDBDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DA523131313131313131313131313131313131313131313131303030303030303030303030303030302F2F30303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A292929292929292929292929282828282828282828282727272727272727272625252525252525252525252525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313111212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F56BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD79130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004E8486888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC2C5C7CBCED0D3D6D9DBDEE0E2E5E7E9EAECEEEFF1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F39100000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3CCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B0B5B7B9BDBDC1C1C4C5C7C9CBCCCED0D0D3D4D4D6D7D8D9DADADADCDCDCDDDDDEDEDED6CBCBCBCBCECECACBCBCBD0DAC9C3C3C3C1C1C0BFBFBFC0C1C1C0C0BFC0C0C0BFBDBDBDBCB9BBB9B9B9B9B6B8B8B8B8B6B6B8B8B6B6B6B6B8B9BBB9B9B9B9B9B9B9B8B8B8B8B9B9B9B9B9BBBBBCBCBDBFC0C1C3C3C4C4C4C4C5C5C9C6C8C8C8C6C9C9CBCBCBCBCBCACAC9C9CACAC9C9C9C9C9C8C5C4C5C5C4C4C3C1C0BFBCBBB9B6B5B3B2B2B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6C6D6D6F7273757576787B7C7F818186888A8C8F909294999C9C9FA1A2A5A7A7AAACAEB1B1B2B2B5B6B8B8B9BBBBBCBDBDBDBDBDBCBDBDBDBFC0BFBFC1C3C3C3C4C3C3C1C3C3C3C4C4C4C5C5C5C5C6C6C6C6C6C6C6C6C6C6C5C6C5C5C5C5C5C4C5C5C5C4C4C4C5C6C8C8C9C9C9CACACBCBCBCBCECECFD0D0D0D1D1D1D1D3D5D5D5D5D6D7D7D7D7D7D9D9D9DADADADADBDBDCDCDEDCDEDEDFE1E1E1DFE1DFDFE1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E15431313131313131313131313131313131313131313131313131313030303030303030303030303030302F2F303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2929292929292929292929282828282828282828282727272727272727272626252525252525252525252525252525252524242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313111212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F72BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD98200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004E8486888A8C8E919396989B9DA0A4A6A9ACAFB2B6B8BCBFC2C5C8CBCED0D3D6D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3AF00000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3C7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ADACB1B3B5B7B9BDBDC1C1C4C5C7C9CBCCCCD0D0D1D3D4D6D7D8D9DADADADADCDCDCDDDDDDDED6CAC9C9CACBCBCBCACBCBD0D7C8C1C1C1C1C1BFBFBFBFBFBFBFBCBBBBBBBBBDBBB9B9B8B6B6B6B6B6B6B3B3B2B2B2B2B2B1B2B2B2B1B0B1B2B2B2B2B1B1B2B2B2B3B3B5B5B5B6B8B9BBBCBCBFBFBFC0C3C3C4C5C5C6C5C8C8C6C8C9CACECECECECFD1D1D0CFD0D1D1D1D1D1D0D0D0CFD0D0CFCBCACACBC9C9C9C6C6C5C5C4C4C4C4C1BDBCBCBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3816567676A6C6D6E717275747577787B7B7E7E818585898A8E8F90929397999B9C9EA2A2A5A5A7A8AAABABACAEAEB1B1B3B6B6B6B6B6B6B6B8B8B9B8B9B8B8B8B8B9B8B9B9B9BBBBBCBCBCBBBBBBBBBBBBBCBCBCBCBDBDBDBDBDBDBDBDBDBCBDBDBFBDBFC0BFBFBFC0C0C1C1C1C3C4C5C5C5C6C5C6C8C9C9C9C9CACACBCBCECFCFD0D0D0D0D0D1D3D0D1D3D5D5D5D3D5D6D7D7D6D5D5D5D5D5D7D7D6D7D6D5D5D5D5D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D069313131313131313131313131313131313131313131313131313131313130303030303030303030303030302F2F303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292929292828282828282828282727272727272727272626252525252525252525252525252525252524242424232323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F138ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA7340F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004F8486888A8C8E919396989B9EA1A4A6A9ADAFB3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEA8AAACAFB1B3B5B7B9BDBDC1C1C4C5C7C9CBCCCCD0D0D1D3D4D4D6D7D8D9DADADADADCDCDCDCDDDDD6CBCECED0D0D1D1D0D0D1D7DCCEC9C9C9C8C6C5C6C5C5C4C4C4C4C4C3C1C1BFBFBFBDBDBCBDBCBCBCBBB9B9B6B6B6B5B3B5B5B5B2B3B3B3B2B2B2B3B5B5B5B5B3B5B6B5B5B6B9B9BBBBBCBDBCBDBDBCBCBFC0C3C5C5C6C5C6C9CACACBCBCBCBCECECECECECBCBCACACACACAC9C9C9C9C6C6C4C3C3C3C3C4C4C3C3C0BFBCBCBBB9B6B5B5B3B2AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3826767696A6A6C6E7172747577787B7C7C81838586898C8D90939697979B9C9C9F9F9FA1A2A2A4A5A5A5A7A7A7A7A7A8A8ABACACACAEACACACACACAEAEAEAEAEACAEAEAEB0B0B0B0AEAEAEAEB0B2B1B1B1B1B2B2B1AEB1B2B2B2B2B3B3B1B2B2B1B1B1B1B2B3B5B6B6B6B8B9B9BBBBBBBCBDBCBDBFC0C0C1C3C3C3C5C5C6C5C6C8CACBCBCED0D3D3D5D5D7D9D9D9D9D9D9D9DADADAD9DAD9D9DADADADBDBDBDADADBDCDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3793131313132323232313131313131313131313131313131313131313131313130303030303030303030303030302F2F303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2929292929292929292929282828282828282828282727272727272727272625252525252525252525252525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2098BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB54F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004F8486888A8C8E919396989B9EA1A4A6AAADB0B3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F6F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F8F7F7F7F6F6F5F5F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2A8A3A4A8AAACAFB1B3B5B7B9BBBDC0C1C3C5C7C7CACBCCCED0D0D1D3D4D6D6D7D8D9D9DADADADADADCDCDCCFC3C3C3C4C4C4C4C5C6C4C9D1C3BDBDBCBCB9B9B9B9B9B9B8B6B6B6B5B3B3B2B2B2B1B0B0AEAEACAAAAAAA8A7A5A4A5A5A5A5A5A5A5A5A4A4A2A4A5A5A5A5A5A8A7A8AAABAAABAAAAABAEB1B0B0B1B2B2B3B6B5B5B6B9BBBBBCBCBDBFBFC0C0C1C4C3C3C5C5C5C5C5C5C5C5C5C5C4C5C4C3C3C1C0BFBDBFBCBBBBB9B8B6B3B2B1B1B1AEACABAAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38065676769696C6D6E6F7172737678797B7D7E81828688898C8D90909293969799999B9B9F9FA1A4A5A5A5A7A7A8A7A8A7ABACACAEB0B0B0B1B1AEAEAEAEAEACAEAEAEACAEAEAEAEACACACACABABACACACACACACACABACACACACACAEACAEAEAEAEAEAEB0B0B2B3B3B3B6B6B6B6B9B9BCBFBFC0C1C1C3C3C4C4C5C5C6C8C8C6C8CACACBCECBCED0D0D0D0D0D0D0D0D1D1D3D5D5D7D7D7D9D9D7D7D9DADBDADBDCDEDEDEDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DF7932323232323232323232323232323232313131313131313131313131313131313131303030303030303030303030302F2F303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292929292828282828282828282727272727272727272626252525252525252525252425252525252524242424232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F27A7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD720F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004F8486888A8D8F919396999B9EA1A4A7AAADB0B3B6B9BCC0C2C5C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F7F8F8F8F7F7F6F6F5F5F5B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0A39EA0A2A4A8A9ABAFB1B3B5B7B9BBBDBEC1C3C4C5C7C9CBCCCCD0D0D1D3D3D4D4D6D7D7D8D9D9DADADADADADACFC4C5C5C5C4C4C4C6C6C8CBD5C4BDBBB9B9B9B8B6B6B5B3B3B3B3B3B3B2B1B1B0AEAEAEACACAEACAAA8A7A7A5A5A5A2A2A4A2A5A2A2A4A2A1A2A2A4A5A5A7A7A8A8A8A8A8ABACACAEB1B0B2B5B6B9B9BCBDBFC1C0C1C4C5C5C6C9CACACBCBCBCFCECECFCFCFCFCFD0D1D1D1D0D0D0D0CFCFCBCBCBCBCBCACAC8C9C6C5C4C3C0BFBDBCBBB9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3826767696A6C6D6F7173757677787C7E8181838688888A8C8D8E9093969797999B9C9EA2A2A4A5A5A5A7AAABACACACACACAEAEAEACACAEB0B0B0B1B1B1B0B1B1B0B1B1B1B1B0B1B0B0B0B0B0B0B1B1B1B1B1B1B1B1B1B1B1B1B3B3B2B3B5B2B2B3B3B6B6B9B9BBBDBDBFBDBFBFC0C1C3C1C3C3C3C4C5C8CAC9CBCECECFD1D3D3D5D5D7D7D9DADADADBDBDCDEDEDFDFDFE2E1E1E2E3E3E3E3E6E6E7E9E7E7E7E6E6E6E6E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E97D333333333333333333333333333332323232323231313131313131313131313131313131303030303030303030303030302F2F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292828282828282828282827272727272727272726252525252525252525252525252525252524242424232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD911A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004F8486888A8D8F919496999C9FA1A4A7AAADB0B3B6B9BDC0C2C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFE
-FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F7F8F8F8F8F7F6F6F5F5F5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9D989A9EA0A2A4A7A9ABADB1B2B4B7B7BABDBEC1C1C4C5C7C7CACBCCCCD0D0D1D3D3D4D4D6D6D7D7D8D8D9D9D9D9DAC9B9B9BBB9B8B8B6B5B6B6B9C3B5AEAEAEAEAEAEAEAEAEAEAEAEAEB0AEACACAAA8AAAAA8A7A7A8A8AAA8A7A7A8A7A7A7A7A7A5A5A5A5A5A5A7A7A7A7A7A8A8A8A7A8AAABACACAEB1B1B2B5B6B8B8B9BDBDBFBFC0C1C3C4C5C8C9C9CBCECBCED0D0D1D1D1D3D3D1D1D1D1D1D1D1D3D3D1D0CFCBCACACAC9C8C5C4C1BFBDBBBBB8B6B6B3B1B2B1AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B380646567696A6B6D6F6F72757678797B7C7F818385888A8C8C8F8F9090939697979799999B9C9EA1A2A2A4A7A7A7A8ABABABACACACACACAEAEAEAEB0B0B1B0AEB0AEB0B0B0B0B0AEACACACACAEB0B1B1B1B0B1B1B2B2B3B3B3B3B3B3B3B5B5B5B6B6B6B6B6B8BBB9BCBBBDBDBDBFC0C1C1C1C3C5C5C4C5C5C6C5C6C9C9C9CACECFD1D0D1D0D3D7D7D7D9DADADBDADBDBDBDEDFDFDEDEDEDEDEDEDEE1DFDFDEDFDFDFDFE1E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E47C3333333333333333333333333333333333333232323232313131313131313131313131313131313030303030303030303030302F2F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929292928282828282828282827272727272727272726262525252525252525252525252525252524242424232323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34989898989898989898989898989898989898989898989898989898AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA79898989898989898989898989898989898989898989898989898821A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004F8586898A8D8F929497999C9FA1A5A8AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDEE1E4E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFE
-FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F7F7F6F6F5F5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB969395979A9DA0A2A3A5A9AAADB1B1B4B5B7B9BDBDC0C1C3C4C5C7C9CACBCCCCD0D0D0D1D3D3D4D4D4D6D6D7D7D7D7D7D8CDC1C3C3C3C0BFBFC1C0C0C3CEC0B8B9B8B6B8B8B8B5B6B6B6B5B5B5B3B5B5B5B5B3B5B5B3B5B2B3B2B2B2B1B1B1AEAEAEB0B0AEAEAEAEAEAEB0B0AEB1B1B1B1B3B3B3B6B6B8B9B9B9BBBBBDBFC1C1C3C5C5C9C9C9CBCBCED0D0D1D1D5D5D3D3D3D5D5D6D6D6D7D6D7D6D7D6D5D5D5D3D3D0CECBCBCBCAC8C6C5C5C4C3BFBDBBB9B6B5B2B1B0B0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B380656767676769696D6D71717373757678787B7D7F8181828586898A8C8E909292929697999B9B9C9C9E9F9E9FA1A2A2A2A4A5A5A5A7A5A7A8A8A8A8A8A8A8A8A8A7A8A7A7A7A7A7A8A7A7A7A8AAABABA8ABABACACACACABACACACB0B1B0AEB0B0B1B1B2B5B5B6B5B6B9BCBDBFBDBDBFC1C3C4C4C6C9C9CACACBCECECFD0D0D5D5D6D7D7D9DBDADADADBDBDBDEDCDCDEDEDFE1E1DFDFDFE1E1E1E1E2E2E1E1E1DFE1DFDFE1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDE7833333333333333333333333333333333333333333333323232323131313131313131313131313131313030303030303030303030302F2F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929292828282828282828282827272727272727272626252525252525252525252425252525252524242424232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161515151515161414141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD2D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000548587898B8D8F929497999C9FA2A5A8AAAEB0B4B7BABDC0C3C6C9CDCFD2D5D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F7F6F6F5F5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A4919091939597999CA0A0A3A5A8AAACAFB1B3B5B7B9BABDBEC1C1C3C5C5C7C9CACBCCCCCED0D0D1D1D3D3D4D4D4D4D4D4D6D6D6CFC6C6C6C6C6C5C5C5C5C5C8D1C1BBB9B9B8B8B8B5B6B5B3B5B3B5B2B2B2B2B1B0B0B0AEABAAA8A7A7A7A7A5A5A5A4A2A2A2A2A2A1A1A1A2A2A2A2A5A4A4A2A4A4A5A5A5A7A7A8AAABACAEB1B2B3B3B3B8BBBBBDBFC1C3C5C5C5C5C6C8CACACACACBCECFD0CFD0D0CFCFCECECECFCBCBC9C8C6C5C6C5C5C1C1C1C0C0BDBDBBBBB8B6B5B3B2B1AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37D6162616361646565676969696C6D6E6F71737575757777797C7C7E8181858686898A8D8E8E90909296979797979797999B9B9B9B9C9EA19FA1A1A2A2A2A2A2A2A2A4A2A2A4A4A4A4A4A4A5A5A5A4A4A5A5A5A5A5A7A7A7A8A8A8AAABAAABACABACACAEB0B0B1B2B5B5B6B8B9BBBCBDBDBFC0C3C4C3C5C5C6C9CACED0D1D1D3D3D3D3D5D7D9DAD9D9D9D7D7D9D9DAD9DBDADBDEDEDEDEDCDEDEDEDEDEDFDFDFDFDEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDF80333333333333333333333333333333333333333333333333333232323231313131313131313131313131313030303030303030303030302F2F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929292828282828282828282827272727272727272726252525252525252525252525252525252524242424232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161515151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA70F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000698587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC0C4C6CACDCFD2D5D8DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F7F6F6F5F5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A28D8B8D8F91939597999C9EA0A2A4A7A9ABADB1B2B4B6B7B9BBBDBEC1C1C4C5C5C7C9CACBCCCCCCCED0D0D0D1D1D1D3D3D3D3D3D4D4D1C9C9C9C9C9C9CACAC9C9CED1C4BFBCBDBCBBBBBBB9B9BBB9B8B8B8B8B6B3B3B1B1B0AEACAAAAA8A8A7A7A5A5A5A5A5A2A2A2A1A19F9F9FA2A2A2A2A4A4A5A5A5A7A7A8A8AAABACB0B0B1B2B2B3B8B8B9B9BBBDBFC0C0C0C0C3C4C4C5C6C8C9C9CAC9CACBCBC9C9CAC9C8C9C6C8C6C5C4C3C3C1C1BFBFBCBBB9B9B5B3B3B2B0AEACACACABA7A7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38267696A6A6C6D6E6E6F727275767778787C7E7E8081838688898C8C8E8F8F90929496979799999B9C9C9FA1A2A2A4A5A5A7A7A8AAAAA8ABABAAABAAABABABABABABABAAACABABACACACACACACACAEAEB0B1B1B0AEAEB0AEB0B0B0B1B1B1B2B2B3B3B3B6B6B9BBBBBCBCBDBFBFC1C1C4C5C8C9C9CAC9CBCBD0D0D3D3D6DADADADBDCDEE1E1E1E2E2E3E4E6E7E9E9E9E9EAEAEBECECEEEEEFEFEFEFF1F2F1F1F1F2F1EFEFEFF1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBA53333343434343434343434343333333333333333333333333333333332323231313131313131313131313131313030303030303030303030302F2F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A292929292929292929292928282828282828282828272727272727272726262525252525252525252525252525252524242424232323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161515151515151614141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD5D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000698587898B8D909294979A9C9FA2A5A8ABAEB1B4B7BBBDC1C4C7CACDCFD2D5D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F7F7F6F5E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78B87888B8D8F90929395989A9EA0A2A3A5A8AAADAFB1B3B5B7B7BABDBDBEC1C1C4C5C5C7C7C9CACBCCCCCCCED0D0D0D0D0D0D0D0D1D1D1C8BBB9B9B9B9BBB8B8B8B8BBC4B5AEAEAEAEACABAAA8A8AAAAA8A7A7A7A7A7A5A4A4A5A5A4A4A2A29E9E9E9C9B9B9B999B9B99999999999999999B9B9B9B9B9B9C9C9C9E9FA1A2A2A4A5A5A7AAACAEB0B2B5B8B9BBBDBFC0C0C1C1C3C3C4C5C6C5C6C5C5C5C5C5C6C6C6C5C5C5C5C5C5C5C4C4C3C1C0BFBFBFBDBDBBB9B8B6B6B3B2B1AEACACABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E6F6E6E71727273757777777979797B7D7E81818284888988898C8D8F8F9090929393949696979999999999999B9C9C9C9C9C9C9C9C9E9C9C9E9F9F9F9F9F9FA1A1A2A2A2A2A2A2A2A2A2A2A2A2A4A4A4A5A5A5A5A7A7A7A8A8A8A7A8A7A7A7A7A7A7AAABABACAEAEB0B1B2B2B5B6B8B8BBBCBFC1C3C3C5C4C5C8C9CACBCECECFD0D1D1D5D3D7D7D9D9DBDADBDCDCDEDBDEDEDEDEDEDCDEDEE1E1E1E1DFE1E1DFDFE1E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDE9D34343434343434343434343434343434343333333333333333333333333332323232313131313131313131313131313030303030303030303030302F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A292929292929292929292928282828282828282828272727272727272726262525252525252525252524252525252525242424232323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161515151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F72BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000006A8587898B8E909295979A9DA0A2A5A9ABAEB2B4B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F7F6F6E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD8C838586888B8B8D90929395979A9CA0A0A3A4A8A9ABADB1B1B4B5B7B9BABDBDBEC1C1C3C4C5C7C7C7C9CACBCBCCCCCCCCCCCECECECED0D0D0C4B9B8B8B6B6B6B6B6B5B5B9BFB1AAA7A7A7A5A5A2A2A2A2A2A2A1A1A1A19E9E9C9C9C9C9B9B9B9B9B9B9B9B979794939393969292929292929392909393949496979799999B9C9EA1A1A4A5A7A8AAACACAEB1B3B5B6B9B9B9BBBCBDBDBDC0C0C1C1C3C1C1C1C1C1C1C3C1C1C0BFBDBCBBBBBBBCB9B9B8B6B6B6B5B3B2AEACACA8A8A7A5A5A4A2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3806465656567676969696A6E6F717274757777787A7B7C7C7F8183848789898C8C8C8C8E8E8F8F909292929394949694979796949497979797979797979997979797979797979797979799979999999999999999999B9C9C9C9E9E9E9F9E9F9EA1A1A2A2A2A2A4A4A4A5A7A7A8AAABAEACAEAEAEB1B3B5B6B9B9BCBDC1C1C3C3C4C5C9CAC9CED0D1D3D5D5D7D7D7DADADBDBDCDCDEDEDEDEDFDFDFDEE1DEDEDEDEDFDFDFDFE1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDC9B343434343434343434343434343434343434343433333333333333333333333333323232313131313131313131313131313030303030303030303030302F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292929282828282828282828272727272727272727262525252525252525252524252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161515151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F39BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD980F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000006A8588898B8E909395989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F5F5F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4E000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F7F6F6EDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B292808083848687898B8D8F91939597999C9EA0A2A3A5A8AAACAFB1B2B4B5B7B9BABDBDBEC1C1C3C4C4C5C5C7C7C7C9C9CACBCBCBCCCCCCCCCCCCCCC9C1C3C1C0BFC1C1C0C0C0C3C9B9B2B2B1B0B0AEACACACABABAAAAA8A8A7A7A5A5A5A4A2A2A2A19F9E9E9E9E9C9C9C9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9CA1A1A2A4A5A7AAABAAACAEAEB0B2B1B3B3B6B8B9BCBFBFC1C4C4C5C6C9CACBCACBCBCECECECECECECECECECECBCBCBCAC9C9C9C8C6C5C5C5C3C3C1BFBDBBB9B8B6B3B2B1B0AEACAAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38064656567676768696A6C6D6D6F7172737577777A7B7D7D7E7F8181818286888889888A8C8E8E8E8F8F909290909293939494969797979797979999999C9B9B9B9C9C9C9C9C9E9E9E9F9E9E9E9C9C9C9C9C9B9B9B9B9C9C9C9C9C9C9E9F9FA2A2A2A4A5A5A5A8A8A8AAAAABACB0B1B2B2B3B5B6B8BBBCBFBFBFC1C1C5C5C6CACBCED1D0D3D3D5D7D9D9D9DADADBDCDEDEDEDEDFE1E1E1E1E1E1E1E2E2E3E3E3E3E3E3E2E2E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAA53434343434343434343434343434343434343434343434343333333333333333333333323232313131313131313131313131313030303030303030303030302F303030303030302F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A292929292929292929292928282828282828282828272727272727272726262525252525252525252525252525252524242424232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD5D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000006A86888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBFC1C5C7CBCED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F5F4F300000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F8F7F6F5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3817D808082848587888B8D8F90929395989A9CA0A0A2A4A7A9AAADAFB1B3B4B5B7B7BABBBDBEC0C1C1C3C3C4C5C5C5C7C7C7C7C9C9C9C9C9C9C9C9C9C4B9BBBBBCBBBBBBB9B8B8BBC4B5ABABABACACAAABAAA8A7A7A5A5A5A4A4A4A2A2A29F9E9E9C9C9C9C9B9B9B999B9997979797969797979797979799999B999C9C9FA1A2A2A5A5A7A8A8AAABACAEB1B1B1B2B3B6B9B9BBBBBDBFBFC0C1C4C4C4C4C6C8C6C6C6C6C5C5C5C5C5C5C5C4C3C1C1C1C0BFBCBBB9B9B8B6B6B5B3B1B1B0ACAAAAA7A7A5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E706F7172727275757576777A7A7B7C7E817F818283858889898D8E8F90929394969694969697979799999B9B9B99999B9B9C9B9B9B9B9B9B9B9B9B9B9C9B9B9B9B9B9B999B9B999999999999999B9B9B9B9B9B9B9C9C9C9C9F9FA19FA1A1A4A4A2A4A5A7A7A8A8ACAEAEB1B1B2B3B5B5B6B9B9B9BCBDBFC1C4C5C8C9CACBCBCFD0D1D3D1D5D6D9DADCDEDFDEDFDFE1E2E3E4E6E6E7E6E7E7E6E6E7E9E7E6E6E6E6E6E7E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7C8343434343434343434343434343434343434343434343434343433333333333333333333333232323231313131313131313131313130303030303030303030302F2F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282828272727272727272726262525252525252525252525252525252524242424232323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000006A86888A8C8E919396989B9DA0A4A6A9ACAFB2B6B8BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E7E9EBECEEEFF1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F300000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F8F8F8F8F8F8F8F7F6F6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1907B7B7D808082838586888B8B8D9091939597999A9EA0A2A3A5A8A9ABADAFB1B3B4B5B7B7B9BABDBDBEC0C1C1C1C3C3C4C4C5C5C5C5C7C7C7C7C7C7C7C7C4BCBDBDBDBDBCB9BBBBB9BCC4B5AEB0AEAEACACACABAAA8A7A5A5A5A4A2A2A2A1A1A19E9E9C9C9C9C9B9B9B99999797979796969697969799999997999B9999999B9B9B9E9FA1A2A4A5A5A7A8AAACAEAEB2B3B6B8B9BDBDBFBDBFC0C0C1C1C3C3C4C4C5C5C5C6C6C5C4C4C4C5C4C4C4C4C3C3BFBFBDBCB9B8B6B6B3B5B1B2B1AEACABA8A7A5A4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E6060616363646564656768696A6A6C6C6D6E7072727476757576777B7C7B7C7C7E7F808081838182828285858686858484858686858889898A8A8A8A8A8C8C8C8D8D8D8E8F8E8E8E8D8C8E8E8E8D8E8F909292929396969696969797979797999B9B9B9C9EA1A2A2A2A4A5A7A7A7ACACAEB1B2B5B6B8B9BBBFC0C1C3C4C5C6C8CACBCFD0D1D5D5D6D9D9DADADADCDEDCDEDEDFE1E1E2E4E4E4E4E3E2E3E3E4E4E4E3E2E1DFDFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFBF3434343434343434343434343434343434343434343434343434343434333333333333333333333232323231313131313131313131313130303030303030303030302F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292929282828282828282828272727272727272727262525252525252525252524252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161615151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F48BDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000007A86888A8C8E919396989B9EA1A4A6AAADAFB3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F300000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F8F8F9F9F8F8F8F7F6F6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE85797B7B7D7E808283848687898B8D8F9192939597999C9EA0A2A3A5A8A9ABADAFB1B2B4B5B6B7B9BABABDBDBDBEC0C1C1C1C1C3C3C3C4C4C4C4C4C4C4C4C4BDB1B1B0B0B1B1B1B1B1B1B5BDACA5A5A4A2A2A5A2A4A2A2A2A2A19E9C9B9B9B999999979696969494929090908F8F8F8E8E8E8E8E8E8D8E8E8E8E8F8F8F90909293949699979B9C9E9FA2A4A4A5A8AAACB1B2B3B5B8B9B9BBBBBDBFBFBFC0BFBFC3C1C1C3C1C1C3C1C1BFBFBDBCBCBBB9B9B9B8B6B5B5B3B2B0AEACACACA7A7A7A7A5A5A2A19EB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3816565656567686768696C6C6C6D6F70717171727376777778787B7B7C7D7F818183868988888A8C8E8F9090909292939494969797979797979797979797979797979796969797979797979797979797979797979697979797999999999B9B9C9C9E9E9F9FA1A2A2A2A4A7A7A8AAABACACAEAEAEB0B2B5B6BBBBBFBFC0C1C5C5C6C9C9C9CACECED0D0CFD0D1D1D3D5D5D5D6D5D6D7D7D6D7D7D7D9DADBDCDEDCDBDBDBDBDBDADBDCDBDBDADADADADAD9D9D9D9D9D7D9D9B834353535353535353535353534343434343434343434343434343434343434343333333333333333333332323231313131313131313131313130303030303030303030302F303030303030302F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292929282828282828282828282727272727272727262625252525252525252525252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161615151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000008486888A8D8F919396999C9EA1A4A7AAADB0B3B6B9BCC0C2C5C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F6F5F4F300000000000000000000000000000000000000000000000000F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F8F9F9F9F9F8F8F8F7F6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D78787B7B7D7E808082838587888B8B8D9091939595989A9DA0A0A2A4A5A8A9ABADAFB1B1B3B4B5B7B7B9B9BABBBDBDBDBEBEC0C1C1C1C1C1C1C1C1C1C1C1C1C1BBBBB9B9B9B9B6B8B6B6BCC0B1ACACACAAA8A7A7A5A5A4A19F9F9E9C9C9C9B999B9B9B9797949392929292929292909090929090909293929292939694969799999B9C9C9C9EA2A4A5A5A7A7AAACACB1B1B2B5B8B9BBBDBFC0C0C1C3C3C3C4C4C5C5C5C5C4C4C4C5C4C4C3C3C0C0BFBDBDBCB9B9B8B6B6B5B2B1AEACACABAAAAA7A5A4A2A29FB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38065656567696969696A6C6E6E6E707272747576777878797B7D7C7E7F8182838688898A8C8E8E8E8F909090929093929393939494949494979697979797979797979999999B9B9B999999979999999999999B9B9B9B9B9B9C9C9E9E9EA1A2A2A2A2A4A5A7A8AAABACACACACB1B2B5B5B9BCBDBDBFC1C3C5C8C9CACBCED0D1D3D7D7D7DADBDEDFE1E2E3E3E7E7E9E9EAEBEBEBEBECECECECEEEEEEECEEECEEEEEFEFF1F1EFEEEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E93535353535353535353535353535353535343434343434343434343434343434343433333333333333333333323232313131313131313131313131303030303030303030302F2F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282828272727272727272726262525252525252525252525252525252524242424232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919191717171717171717171716161616161615151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000008586898A8D8F929497999C9FA1A4A8AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFF
-FFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F31D000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F8F8F8F7F6BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A478787878797B7B7D80808283858687898B8D8F9092939597999A9DA0A0A2A4A5A8A9AAACADB1B1B2B3B4B5B7B7B7B9B9BABBBDBDBDBDBDBDBEBEBEBEBEBEBEBEBEB4AAA8A8A8A8AAA8A7A5A7ABB3A59E9E9C9B9B9999969696949494939392929290908F8E8E8D8C8C8A8C8A8A89898988888887888889888A8A8C8D8F8F9092939394969797999B9E9E9FA2A2A4A5A7A8ACAEB1B1B3B6B9BBBDBFBFC1C1C4C4C5C6C9C9C9C9C9C9CACACAC9C8C6C6C6C6C5C3C1C0BFBFBCBBB9B8B6B5B2B2B1AEACACABA8A7A5A2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38265656567686969696A6A6C6D6D6D6E6F71727373757676777778787A7B7C7C7D7F7F8181828283838686888889898A8C8C8C8A8C8D8D8D8D8D8E8E8F8F8F8F8F8F9090908F8F8F8F8E8E8D8C8C8D8D8C8D8E8E8F8F8F8F9090929092939497979799999B9B9C9E9FA1A1A2A4A5A5A8AAACB0B1B1B6B6B8B9BCBFBFC1C1C3C5C5C5C9CACED0D0D1D1D5D6D5D6D9D9DBDBDCDEDEDCDEE1E1DFDEDEDCDBDBDBDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E335353535353535353535353535353535353535353534343434343434343434343434343433333333333333333333323232313131313131313131313130303030303030303030302F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292929282828282828282828272727272727272727262525252525252525252524252525252525242424232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5DBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000000000000000000000000000000000000000000000000008586898B8D8F929497999C9FA2A5A8AAAEB0B4B7BABDC0C3C6C9CCCFD2D4D7DADCDFE1E4E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFF
-FFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F330000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E5E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F8F8F8F7C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD7C76787878797B7B7D7E808082848587888B8B8D8F9192939597999A9DA0A0A2A3A5A7A9AAABADAFB1B1B2B3B4B5B5B7B7B7B7B9B9BABABABBBBBBBBBBBBBBBBBBBBB6ACAEAEACACACABAAAAAAACB5A59C9E9C9C9C9C9B999997979796949494949393929290929292908F8F8E8E8E8E8E8E8E8D8D8E8F8F8F8F95A092939392939494969697999B9C9C9FA2A4A5A7AAABACAEB2B2B5B8B9BDBFBFC1C0C3C4C5C5C6C8C6C6C6C8C8C9C6C9C9C8C6C6C5C5C4C3C1BFBFBDB9B8B6B5B3B1B1B1AEACA8A8A7A2A2A19F9EB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382656768696A6C6C6C6D6E6F6F707172737576777675777878787A7C7D7E7E80818383868689898A8A8A8A8A8A8A898A8A8C8C8C8C8C8C8D8C8C8C8C8A8A898C8C8C8A898A8A8A898888888889898A8A8A8A89888A8A8A8A8A8A8A8A8A8C8C8C8F8E8E8E8F90909092929394979B9C9E9EA1A2A4A5A7AAACAEB1B2B3B6B9B9BBBCBDBFC1C3C4C5C6C5C8C9CACACBCBCED0D0D0D0D1D3D3D3D1D3D3D5D3D3D5D3D5D6D6D6D6D5D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D73C3535353535353535353535353535353535353535353535343434343434343434343434343433333333333333333333323232313131313131313131313130303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929282828282828282828282727272727272727262625252525252525252525252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F20BDBDBDBDBDBDBDBDBDBDBDBDBD480F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE000000000000000000000000000000000000000000000000108587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BBBDC0C4C6CACDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F330000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDC0C3C5C9CCD0D1D4D8DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F8F8F7C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37F7676787878787B7B7B7D80808283858687888B8D8D909193959597999A9DA0A0A2A3A4A5A8A9AAABADAFB1B1B1B3B3B4B5B5B6B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B2AAA8A8A8A8A8A7A7A7A7AAB2A29C9B999997999997979696979694929394939392928F8F8E8E8F8F8F8D8D8C8D8C8D8D8C8C8C8D8E98AAB3AA8F9092939496979B9B9B9C9EA2A2A4A5A7AAACAEB1B2B3B6B8BBBBBDBDBFC1C1C3C3C5C6C6C6C8C8C9C9C9C9C9C9C9C6C8C6C5C5C3C1C1C0C0BDBDBDBBB9B5B3B2B0ACAAA7A5A4A19F9E9B9B97B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38065656565656567696A6A6A6C6E6F6F6E6F7272727374757777777878787B7B7B7C7D7D7E7E8181818181818181818182828182818383838383838283838381818382828281828282828281818181818383818382828282838585848685858689898A8A8A8A8A8D8E8F929292949497979B9B9CA2A2A5A7A8AAACB0B2B3B8B9BBBDC1C1C3C3C4C3C5C8C9C9CACED0D3D1D5D5D7D7D9D9DAD9D9D9D9D9DADBDBDBDBDBDCDEDEDBDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E159353535353535353535353535353535353535353535353535353534343434343434343434343434333333333333333333333232313131313131313131313131303030303030303030302F2F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929292828282828282828282727272727272727272625252525252525252525252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA7BDBDBDBDBDBDBDBDBDBDBDB5130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000001A8587898B8E909294979A9DA0A2A5A8ABAEB2B4B8BBBEC1C4C7CACDCFD2D5D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F330000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828486888B8D909295989A9EA2A4A8ABAFB2B5B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F8F8F7CDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B397767676787878787B7B7B7D7E80808284858688898B8D8F909293959597999A9D9EA0A2A3A4A5A7A8A9AAABADAFAFB1B1B1B2B3B3B4B4B4B5B5B5B5B5B5B5B5B5B5B5B5B1ABA8A8A7A8A7A5A7A5A4A7B0A199999797979696949492929290908F8E8E8E8D8D8D8C8C8C8C8C8C8C8989888989898A88888893ACB3B3B3AA8E8F90929292939496969797999B9C9FA1A4A5A7A8ABAEB0B1B2B6B6B9BBBDC1C1C1C4C3C5C5C6C8C8C9C6C6C6C6C6C8C5C5C5C5C5C4C1C1BFBDBDB9B9B6B3B1B1ACACABAAA8A7A4A1A19E9B99B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B381656565676769696B6D6D6C6E6F7070717173757576777775777778787A7C7C7D7D7E8182828385868486868888878788868687878989888688898888888685858385868684838383838284848484858583838383858385868588888688888888888A8C8C8D8D8F90909092939397999C9CA1A1A2A5A5A7AAACAEB1B3B6B9BBBCBDBDC0C1C3C4C5C6C8C9C9CACACBCBCECFCFD1D1D0D3D3D3D5D3D1D3D3D5D3D5D5D3D5D6D6D6D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9553535353535353535353535353535353535353535353535353535353534343434343434343434343434343333333333333333323232313131313131313131313130303030303030303030302F303030303030302F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292929292828282828282828282727272727272727272625252525252525252525242525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F64BDBDBDBDBDBDBDBDBDBDBD820F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000001A85888A8B8E909395989A9DA0A2A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F45700000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828586888B8D909395989CA0A2A4A8ABAFB3B5B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F8F8D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B17776767678787878797B7B7D7D80808283858687888B8B8D8F909293959597999A9C9EA0A0A2A3A4A5A7A8A9AAABACADADAFAFB1B1B1B1B2B2B2B3B3B3B3B3B3B3B3B3B3ABA2A2A2A2A2A2A2A2A2A2A5AC9F999997979697979794939392909290909090908F8E8F8E8D8D8D8E8E8D8D8D8C8C8C8A8E9AB2B3B3B3B3B3AA9090909293979799999B9B9C9EA1A4A5A7A8ACAEB3B5B6B8BBBBBFC1C3C5C6C8CACBCECFD1D1D3D3D3D3D3D3D3D1D0D1CFCECBCACAC8C6C5C4C1BDBCBCBBB9B6B3B2B1ACACABA7A5A4A19C9C9BB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E616163636565656567676768696A6B6C6D6D6D6E717072737575777777777778787B7B7A7B7B7B7D7D7F7F81817F81818181828283838383838181838383838181818181818181818181818181818181818183838384868888888A8A8A8D8E8F90929294949797979B9B9C9EA1A4A5A7AAAAACAEB1B3B8BBBDBDC0C3C4C4C6C9CACBCED0D3D5D7DADBDBDBDCDEDFDEDFE1E3E3E3E3E4E3E2E3E1E2E2E3E3E4E6E3E3E4E6E6E7E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E47536363636363636363636363635353535353535353535353535353535353534343434343434343434343434343333333333333333323232313131313131313131313130303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A292929292929292929292828282828282828282827272727272727272625252525252525252525242525252525252424242323232323232323232323232323232222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34BDBDBDBDBDBDBDBDBDBDBD410F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0000000000000000000000000000000000000000000000001A86888A8C8E919395989B9DA0A3A6A9ACAFB2B6B8BCBFC1C5C7CACED0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F46100000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828586888B8D909395989CA0A2A4A9ABAFB3B5B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F8F8DDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7676767678787878797B7B7B7D7E80808283858687888B8B8D8F909293959597999A9C9DA0A0A2A2A3A4A5A7A8A9A9AAABABACADADADAFAFAFAFB1B1B1B1B1B1B1B1B1AFA59B9B9B9B9B9B999799979BA2938E8D8D8C8A8A8A8A8A898989898788888585838385858583838281828281818181849AB2B3B3B3B3B3B3B3A78283818485858889898D8E8F9293979B9C9C9EA1A4A7A7ACAEB1B5B5B6B9BBBDBFC1C3C3C5C5C5C6C6C6C9C8C8C5C6C5C5C4C3C3C1C0BFBFBDB9B9B5B2B1B0ACABA8A7A5A4A2A19E9B9B999794B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3806465656767676768696A6A6A6A6D6D6D6F6F70717072737375757577787878787879797B7B7C7C7C7C7C7D7F7F7E81818181818181818181818181818181818181807F7E7C7D7D7E7F8181817F7F818181818181818182818183828383858586888988888C8C8D8E8F909296999B9C9FA1A2A4A7A7ABACACB1B2B3B5B6B9BBBDBDBFBFC3C3C4C6C8C9CBCECECFD0D3D5D5D5D7D7D7D7D9D7D7D7D9D9D9D9DBDADADADADBDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDE7A3635353535353535353535363636363636353535353535353535353535353535353434343434343434343434343433333333333333333232323131313131313131313131303030303030303030302F2F3030303030302F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929292828282828282828282727272727272727262625252525252525252525252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FAEBDBDBDBDBDBDBDBDBDB5130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970000000000000000000000000000000000000000000000002A86888A8C8E919396989B9EA1A4A6A9ADAFB3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E7E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F5F46100000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80838587888B8D919395989CA0A2A4A9ABB1B3B5B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F6F8F8F9F9F9F9F9F9F9F9F9F9F8E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A7676767678787878787B7B7B7D7E8080828384858687898B8B8D8F90929393959598999A9C9EA0A0A2A2A3A4A4A5A7A8A8A9A9AAAAAAABABABACACACACACACACACACACABA8A2A2A2A19F9F9F9F9E9EA2A79B969496949393929292929090908F8E8E8C8D8A8D8C89898A8889898889898890A4B3B3B3B3B3B3B3B3B3B3A988898A8C8F8F8F929396999B9C9C9EA1A4A5A7ABAEB1B2B3B6B8BBBCBDBDBFC1C1C3C4C5C5C5C5C6C8C8C9C9C9C8C5C5C4C4C1BFBFBDBDBCBBB9B6B3B2B2B0ACABA8A7A7A4A2A19F9B9B979794B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37D5E5D5D5F6061616060616161626264646467676767696A6B6B6C6D6E6E6E6F6F72727273747273757575757576767577777778787878787878787B7B7C7C7B7B7C7B7B7B7B7B7B7B7B7878787B78787B7B7B7C7A7B7C7D7E7E7E7F81818283838585868988898D8E90929294979B9B9CA1A2A4A7A7A8ACACAEB1B1B3B6B9BDBFC0C3C5C8C8C8C9CACACED0D0D3D5D7D6D7D7D7D9DADBDCDBDBDCDEDEDEDEDFDEDEDEDEDFDFDEE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E19135353535353535353535353535353535363636363535353535353535353535353535353434343434343434343434343433333333333333333232323131313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A2A292929292929292929292828282828282828282727272727272727272625252525252525252525252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79BDBDBDBDBDBDBDBDBD720F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970000000000000000000000000000000000000000000000003586888A8D8F919396999B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F47F00000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8080838587888B8D919395989CA0A2A5A9ABB1B3B6B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F8F5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37F767676787878787878797B7B7B7D7E8080828384858788898B8B8D8F9091929395959798999A9C9EA0A0A0A2A2A3A3A4A5A5A7A7A8A8A8A9A9A9A9A9A9A9A9A9A9A9A9A99F92909292909090929293979E908C8A8A888A898988868685858585838383838381818080807E817F7F8092AAB3B3B3B3B3B3B3B3B3B3B3B3A98689898A8C8D8E90929497979B9C9E9FA1A5A7A8ACB1B2B3B6B6B6BBBCBFC1C3C3C3C3C3C3C3C4C5C4C5C5C5C6C6C6C5C4C5C4C3C1BFBFBDBCBBB8B6B3B1B1AEABAAA7A5A5A29F9E9B99979693B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E6262616161616464656565676869696A6D6C6D6E6E6E6F6F717273727575777675767776767777787777787878797B7C7C7D7C7D7E7E7F7F7F7F7F7E7E7F7F7F7F8180807E7E7E817E817F817F7F7F807F817F7F80807E8080818181818182838688898A8C8C8E90929497999B9C9C9EA1A2A7A8ABACAEB1B2B3B6B8BCBDBFBFC3C5C5C8CACED0D3D3D5D6D7D9DADBDADBDEDEDEDFDFE1E1E1E1E2E1E2E2E4E4E6E6E4E6E6E6E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7A43535353535353535353535353535353535353536363636353535353535353535353535353534343434343434343434343433333333333333333332323231313131313131313131303030303030303030302F2F3030303030302F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A292929292929292929292828282828282828282727272727272727272625252525252525252525242525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F41BDBDBDBDBDBDBDBDBD390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000003586898B8D8F929496999C9FA1A4A7AAADB0B3B7B9BDC0C2C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF
-FFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F49200000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8080838587898B8F919395999CA0A2A5A9ACB1B3B6B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F8BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37F767678787878787878797B7B7B7D7D808080828385868788898B8B8D8F909192939395959799999A9C9D9EA0A0A0A2A2A2A3A3A4A4A4A5A5A5A5A5A5A5A5A5A5A5A5A5A5A29B9B9997979997979694979E908A8A8C8C8C8A89898889888886868583838383828181817F817F869EB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78183848786898C8C8C8F8F92949697999B9EA1A2A4A7A8AAACACB0B2B3B5B6B9BBBDBFBFBFC0C3C4C5C5C6C6C6C6C6C6C5C5C5C6C5C4C4C1BFBDBBB9B6B2B1AEACA8A7A7A5A29F9E9C99979696B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E636464656567676869696A6C6D6C6D6D6E6E6F707272727273737475777777787878797B7B7C7D7D7F7F7E7E7E7E7D7F7F7F8181818181818181818181828282838383828282838384848383838383848484868689898989898A8A8C8C8D8E8F909092969697979B9B9EA1A2A5A5AAACAEB1B2B6B8B9BDBFC0C3C4C5C9CACBCFD0D1D5D7DADCDEDEDEDEDEDEDFE1E1E3E4E4E6E6E7E7E9E7E6E6E6E7E7E7E9E9E9E9E7E7E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6B935353535353535353535353535353535353535353535363636363535353535353535353535353534343434343434343434343433333333333333333232323131313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A292929292929292929292928282828282828282827272727272727272626252525252525252525252525252525252424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F13B5BDBDBDBDBDBDBDAE0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004B87898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFF
-FFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F49200000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8080838587898B8F919395999CA0A2A5A9ACB1B3B6B9BDC1C3C7C9CCD0D3D6D9DADDE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F8C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B381787878787878787878797B7B7B7B7D7E808082838385868788898B8B8D8D8F909192939595959798999A9C9C9D9EA0A0A0A0A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A3A3A2A29C9C9C9B9B9B9B9B9B9B9FA2968F8E8E8D8C8989898888888886868684848281817F7F818293A7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78181818383858688898A8C8D909294979B9E9EA2A2A5A8ACACAEB0B1B3B5B6B9B9BBBCBDBDBDBFBFBFBFBFC0BFBDBDBDBBBBBBB9B8B3B2B2B1B1AEACABAAA8A5A4A19F9E9C9B99979693928F8EB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37C5D5E5E5D5F60606060616161636361636363636363646565676869696A6A6A6D6C6D6D6D6D6E6F7272717272727273737374737576767676757777757775777676757577757575777775777775757777777878787878797B7C7B7D7D7D7E7F81818181838589898C8E9090939697999B9C9CA1A5A5AAABAEB1B3B5B6B8B9BBBCBDC0C3C4C5C6C9C9CACACECFCECECFD0D1D3D3D3D5D5D5D6D6D6D6D6D6D6D7D7D7D7D6D6D7D6D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCBD3535353535353535353535353535353535353535353535353536363635353535353535353535353535343434343434343434343434333333333333333332323231313131313131313131303030303030303030302F2F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282827272727272727272626252525252525252525252525252525252424242423232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBD720F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000005087898B8D90929497999C9FA2A5A8ABAEB1B4B7BBBDC1C4C6C9CDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFF
-FFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4B90000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D80828385878B8B8F919395999CA0A2A5A9ACB1B3B6B9BDC1C3C7C9CCD0D3D6D9DADDE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C78787878787878787878797B7B7B7D7D7E808082838385868787888B8B8D8D8F9091929393959595979899999A9A9C9C9D9E9EA0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A09990909290909392929092979C8F8A8A8A88868684848383828381817F7F7F7F7C7E7E89A0B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77E7F8181838588888A8E8F90929497999C9FA1A2A5A5A7A7AAACAEB0B1B3B3B6B9BBBCBDBCBFBDBFBFBFBFC0C1C1BFBDBDBCBBB9B8B5B3B3B1B2AEAEACAAA7A7A5A4A4A19E9C9B99979492908FB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38063636463636364646565656767676769676A6A6A6B6D6D6F6F6F7171727173757475757575747575767776777776767877787877777777777778787877777677777777777777777777777779787B7B7B7B7B7C7D7C7C7D7C7C7C7E81818181818486898A8C8C8E8F90949699999B9C9E9FA4A4A5A7AAACB0B1B3B6B8B9BDBFC0C1C4C5C9C9CACACECFD1D1D3D5D7D7D7D9D9DADADBDCDEDEDFDFDEE1E1DEDEDFDFE1E1E2E2E3E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3DB37373737373737373737373737353535353535353535353535353535363636353535353535353535353535343434343434343434343434333333333333333332323231313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282827272727272727272726252525252525252525252525252525252424242423232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBD340F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000005588898B8E909295979A9DA0A2A5A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4C200000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D80828486878B8D8F919395999DA0A3A5A9ACB1B3B7B9BDC1C4C7C9CCD0D3D6D9DADDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9E3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39278787878787878787878797B7B7B7B7D7E80808082838385868687888B8B8B8D8D8F90919292939395959597979899999A9A9C9C9C9C9D9D9E9E9E9E9E9E9E9E9E9D9D9D989292929090909090908F90978982818181818181817F7F7E7C7D7D7C7C7C7D8195ADB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78386878788898D8F929497979B9C9F9FA2A5A8AAABAEB1B5B8BBBDBFBFC3C3C5C5C5C8CACACACACBCBCBCBCACACACACBCACAC8C6C6C6C5C5C5C3C1C0BDBCB9B5B3B1ACAAAAA7A5A49F9C9B9B97B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37A5A5A5B5B5C5B5C5D5D5E5F5F5F5F5F60615F6161636263636465656565656767676869696A6C6B6D6D6B6D6D6D6D6C6D6E6E6D6D6E6D6E6F6F6F6F6F6F71717171716F716F7171717272717171707273737372737373737575767777787A7B7D7E817F818286888A8A8C8F90929294979B9B9FA1A2A5A7ABACAEB1B3B5B6B9BBBCBFC0C4C5C8CACBCECECFCFD0D1D3D3D3D5D5D6D5D5D7D9D7D7D7D9DAD9DADBDBDBDBDADADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDB373737373737373737373737373737373735353535353535353535353535363636353535353535353535353535343434343434343434343434333333333333333232323131313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A292929292929292929292928282828282828282827272727272727272625252525252525252525242525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F20BDBDBDBDBDBDA70F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000006B888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBFC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5CD00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D80828486888B8D90929397999DA0A3A5A9ADB1B3B7B9BDC1C4C7C9CCD0D3D6D9DADDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F7F8F9F9F9F9F9F9F9F9F9F9F9F9F9F3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A078787878787878787878797B7B7B7B7D7D7E8080808283838586868788898B8B8B8D8F8F909191929393939595959597979899999999999A9A9A9A9A9A9A9A9A9A9A9A99948C8A8A8A8C8A898C8C8C9096898281818181818180808181817F7F7F818EA7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7838385898A898C8E8F90939396979B9C9FA2A2A4A5AAABAEB1B1B3B5B8BBBBBCBDBFBFC1C1C3C3C4C3C4C3C4C4C4C3C3C1BFBFBFBDB9B9B9B6B5B3B1B0AEACAAA7A4A29F9E9B9B999693908E8DB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37D5F5D5D5F5F5F60616161616363646464656767676767676869696B6D6D6E6E6E6F6F6F72727272737272727575757675777777757676767575757675757372727273727372727373737375757575757575767676767676767776777879797C7C7C7C7E8181828689898C8E9090929397999B9C9FA2A2A5A7ACAEB1B5B6B9B9BBBDBFC0C1C4C5C5C6C8C9CBCECED0D1D1D3D5D6D7D9D9D9DADBDBDEDEDEDEDEDEDFE1E2E3E2E2E2E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E159373737373737373737373737373737373737373735353535353535353535353636363535353535353535353535353434343434343434343434333333333333333332323231313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A2A2929292929292929292928282828282828282827272727272727272626252525252525252525242525252525252424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98BDBDBDBDBD640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF070000000000000000000000000000000000000000000000006B888A8C8E919396989B9DA0A4A6A9ADAFB3B6B9BCBFC2C5C7CBCED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F2F3F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F400000000000000000000000000000000000000000000000000F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E80828586888B8D909295979A9EA0A3A7AAADB1B4B7BABDC1C4C7CACCD0D3D6D9DADDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F7F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B079787878787878787879797B7B7B7B7B7D7D7E808080828383858586878788898B8B8D8D8F8F909091929293939393959595959597979797979797979797979797979797948D8D8D8C8C8C8A8989898C92837D7D7D7D7D7C7C7B787B78787B8BA0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D7E8181828685888A898D8F929497979B9C9C9E9FA4A4A5A8AAABACAEB0B1B3B6B9BBBCBDBFBFBFBFC1C1C1C0BFBFBFBFBDBDBDBCBCBBBBB9B8B5B3B1ACABAAA8A7A4A19F9C9B979494928F8EB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37C5D5D5D5D5D5D5E60605F5F5F616261636364656565656565656565656769696A6A6A6C6D6C6A6D6D6D6D6E6D6E6F6F6F6F6F6F6F7071717070717272727272717170717272717273737373757575757676767575757676757777777A787B7C7D7E7E8081828386898A8D8E8F90929697999C9CA1A4A5A8AAACB0B1B3B5B9BBBDBFC0C3C4C6C9CAC9CED0D3D3D5D7DAD9DADADADADBDBDBDEDBDAD9DADBDCDBDBDBDBDBDBDBDBDCDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDE603737373737373737373737373737373737373737373735353535353535353535353636363535353535353535353535353434343434343434343434333333333333333332323131313131313131313131303030303030303030302F3030303030302F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282827272727272727272626252525252525252525252525252525252424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5DBDBDBDBDBD2D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000007B888A8D8F919396989B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED1D4D6D9DCDEE0E2E5E7E9EBECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F400000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E80838587888B8D909295979A9EA0A3A7AAADB1B4B7BABDC1C4C7CACCD0D3D6D9DCDDE0E3E5E7E8ECECEFF0F0F3F3F5F5F6F7F8F9F9F9F9F9F9FAFAFAF9F9F9F9F9D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A797978787878787979797B7B7B7B7B7B7D7D7E808080828383848586868788888B8B8B8D8D8D8F8F9090919192929293939393939595959595959595959595959595959490908F8F8E8F8D8D8D8D9094898181817F7E7E7C7B7B7E8CA2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D7F818383868A8C8C8E9093949697999B9EA1A4A5A7AAACACAEB2B5B6B9BBBDBFBFBFC1C1C3C4C4C5C4C4C4C4C5C5C5C3C1C0C0C0C1BFBCB9B9B6B5B2B2B1AEABA8A7A5A4A19E9C9B99979492B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E6363636364646464646565656565656768676969696A6A6A6A6A6A6B6C6D6C6D6D6D6E6E6D6E6E6E6F707072727071716F7070707171727172727272717172716F6F6F6E6E6E6E6F6F6F6F6E6F6F6E6E6F6F6F71727373757575747575777777797A7B7D7E7F818586898A8C8E929396999C9EA2A4A5A8ABACB0B1B3B6BBBDC0C3C5C6C9CACBCBCFD1D3D3D5D6D6D7D7DADADCDCDEDEDFE1E1E2E1E2E2E2E2E3E3E3E3E3E3E4E4E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E17C373737373737373737373737373737373737373737373737373535353535353535353535363635353535353535353535353534343434343434343434343333333333333333323231313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282827272727272727272726252525252525252525252525252525252424242423232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2DBDBDBDBDA70F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30000000000000000000000000000000000000000000000000086898B8D8F929497999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F431000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E82838587898B8D909395989A9EA2A4A8AAADB1B4B7BABDC1C4C7CBCCD0D4D7D9DCDEE0E3E5E7E9ECECEFF0F0F3F3F5F5F6F8F8F9F9F9F9F9FAFAFAFAFAF9F9F9F9E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A67B7B7B797979797979797B7B7B7B7B7B7D7D7D7E80808082828384858586868788888B8B8B8B8D8D8D8F8F9090909191919292929292929393939393939393929292928D86858585838383838383848C7F7B7B797B7A787D8CA0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A67B7C7B7E7E7F828385888A8C8E8F929497979B9E9FA2A5A7A8ACAEAEB1B3B6B9BCBDBFB3B6B6B6B6B6B6B6B6B6B6B3B3B6B3B3B3B3B3B3B3B3B2B2B2B0B0AFAFAFAFAFAFAEAEAEAEACABABABABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A9A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A6A6A5A5A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A5A5A6A5A6A6A6A6A6A6A6A6A6A6A6A6A6A6A7A7A7A79E8181828586898C8D8F90909396979B9CA1A2A5A7A8ABACAEB1B1B2B3B9BCBFC1C3C4C5C8CACBCED0CFD0D0D3D3D5D6D5D6D6D6D7D9D9D9D9D7D9D9D9D7D7D7D9DADBDCDCDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD98D3737373737373737373737373737373737373737373737373737373735353535353535353535363636353535353535353535353534343434343434343434343333333333333332323231313131313131313131303030303030303030302F30303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A2A29292929292929292929282828282828282828272727272727272726252525252525252525252525252525252424242423232323232323232323232323232222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131312121212121212111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA7BDBDBD5D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000000A87898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF
-FFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F43100000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E828486878B8B8F919395989C9EA2A4A8ABAFB1B4B7BABDC1C4C7CBCCD0D4D7DADCDEE0E3E5E7E9ECECEFF0F0F3F3F5F5F6F8F8F9F9F9F9FAFAFAFAFAFAFAF9F9F9F5B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887B7B7B7B7B7B797B7B7B7B7B7B7B7B7B7D7D7E7E808080828283838485858687878888898B8B8B8B8D8D8D8D8F8F8F909090909091919191919191919191919090908E898989868686888687868C90837E7D7D8091A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D7E7E8181838688898D8F90939697999B9CA1A2A4A7A7A8ACAEB1B5B8B9BBBCBCBCBFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A782838388898A8A8E909293979B9C9FA2A4A7A8AAAEB1B1B3B6B9BCBDC0C3C5C5C6C9CBCECFD0D1D3D6D7D6DADADBDEDEDEDEDEDFE1E1E2E3E4E4E4E4E4E4E6E6E4E3E3E3E2E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFA5373737373737373737373737373737373737373737373737373737373737353535353535353535353636353535353535353535353535343434343434343434343333333333333333323231313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929282828282828282828272727272727272726262525252525252525252425252525252424242423232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131312121212121212111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F72BDBDBD200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB90000000000000000000000000000000000000000000000001B88898B8E909295979A9D9FA2A5A8ABAEB1B4B7BBBDC1C4C6CACDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFF
-FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F45800000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E838586888B8D8F919395999CA0A2A4A8ABAFB2B5B7BBBEC1C5C7CBCCD0D4D7DADCDEE0E3E5E7E9ECEDEFF0F0F3F3F5F5F6F8F8F9F9F9F9FAFAFAFBFBFAFAFAF9F9F9C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE7C7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7D7D7D7E808080808082828383848585868687878888898B8B8B8B8B8D8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F8F8F8F8F8F8D867D7D7E7E7D7E7E7D7E7E8186798293ADB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7E7F818183868A8A8C8F929497999B9C9FA1A4A5AAABACB1B3B5B8B9BDBFC1C3C4C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7878789898D8E8F90939497999C9EA2A5A7ACAEB0B3B5B6B8B9BBBFC1C3C5C5C9CACACBCFD1D3D5D5D7D7D9D9DADADBDBDEDFDEDFDFE1DFDFDEDFDFDEDEDFDFDFDFDFE1E1DFE1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D3D3D3D1D1D1911A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131312121212121212111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F39BDBD980F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000020888A8B8E909395989A9DA0A2A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F46100000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E838587888B8D90929395999CA0A2A5A9ABAFB2B5B7BBBEC1C5C7CBCED1D4D7DADCDEE0E4E5E7E9ECEDEFF0F1F3F3F5F5F6F8F8F9F9F9F9FAFAFBFBFBFBFAFAF9F9F9D9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A17D7B7B7B7B7B7B7B7B7B7B7B7B7B7B7D7D7D7D7E808080808082828383848485858686878788888889898B8B8B8B8B8B8B8B8B8D8D8D8D8D8D8D8D8D8D8D8D8B8B82787B7C7879797876787A89A1AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77E8081838588888D8E909394979B9C9FA1A4A5A8AAACB0B2B3B6BBBDC0C1C3C4C4C5C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A67B7C7D7F818388888A8C8F9094969B9B9EA1A2A4A7A8ACB1B1B3B6B8BBBDBFC0C4C5C6C6CACBCECFD1D5D6DADADADADBDCDEDEDEE1E1E1E1E1E1E1E2E2E3E3E2E3E3E4E4E6E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDB991A1A1A1A1A1919191919191919191919191919191717171717171717171717161616161615151515151614141414141415151514141414141414141414131313131313131313131313121212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5BD5D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7500000000000000000000000000000000000000000000000036888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5890000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A08486878B8B8F909295979A9DA0A3A5A9ACB1B3B5B9BDBEC1C5C7CBCED1D4D7DADCDEE0E4E5E7E9ECEDEFF0F1F3F3F5F5F6F8F8F9F9F9F9FAFBFBFBFBFBFBFAFAF9F9F1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D7D7B7B7B7B7B7B7B7B7B7B7B7B7B7D7D7D7E7E80808080808282828383848485858686868787878888888889898B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B867E7D7D7C7B7B8695A5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A781818484868A8C8D8E909397979B9C9FA2A5A7A8A8ACAEB1B1B5B8B9BDBDBFC0C0C1C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A677797B7D7F8182848588898A8C8E909296999B9E9FA4A5A8A8ABAEB0B2B3B6B8BBBCBDBFC3C3C5C5C6C8C9CACBCFD0D1D3D6D7D7D9DBDCDBDADADADADADBDBDBDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DF9B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171717161616161615151515151614141414141415151514141414141414141414131313131313131313131313121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82BD200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000003B888A8D8F919396989B9EA1A4A6AAADAFB3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5920000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A08587888B8D8F919395989A9EA0A3A7AAADB1B3B6B9BDC0C3C5C9CCD0D1D4D8DADCDEE0E4E5E7E9ECEDEFF0F1F3F5F5F6F6F8F9F9F9F9FAFAFBFBFBFBFBFBFBFAFAF9F9C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7F7D7D7D7B7B7B7B7B7B7B7B7B7D7D7D7D7D7E7E808080808080828282838383848585858686868787878787888888888888888888888888888888888888888681818994A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77E7F81818286898C8C8F909397999B9EA1A2A5A5A8ABAEB1B3B5B8B9B9BCBDBFC0C3C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6767879787C7E818386898A8D8F90929397999C9E9FA2A5A7A7AAACB0B2B3B6B9BCBFC0C3C5C6C6C8C9CBCBCBCED0D1D3D5D5D3D3D5D6D6D7D7D5D5D7D6D7D7D9D9D9D7D7D7D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAA51B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171717161616161615151515151614141414141415151514141414141414141414131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F488A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3500000000000000000000000000000000000000000000000050898B8D8F929497999C9FA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5C30000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A18687898B8D90929395999CA0A2A4A8AAADB1B4B7B9BDC1C3C5C9CCD0D1D4D8DADCE0E1E4E7E7E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBFBFBFBFAFAF9DFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD847D7D7D7D7D7B7B7B7B7B7D7D7D7D7D7D7E7E7E80808080808082828282838383848485858585868686868686878787878787878787878787878787878F99A3B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7F808181828586868A8C8D8F9394999B9C9EA1A4A5A7A8AAACAEB0B3B3B6B6B9BBBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7E80818385898A8D8F9093979B9B9C9FA1A2A4A5A7AAACB0B2B3B6B9BBBDBFC3C4C5C6CACACECFD1D5D6D5D7D7D7D9DBDCDCDEDCDEDEDEDEDFDEE1E1E1E1E2E1E1E1E1E1E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7941B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171717161616161615151515151614141414141415151514141414141414141414131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1A4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000005C898B8D8F929497999C9FA2A5A8AAAEB0B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5CD00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A187888B8D8F91929597999DA0A2A4A8ABAFB1B4B7BABDC1C4C7C9CCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBFBFBFBFBFAF9F7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B29B837E7E7D7D7D7D7D7D7D7D7D7D7D7D7D7E7E80808080808080808282828283838383848485858585858585868686868686868686868689929DA8B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D7E81818588888C8D909296979B9CA1A2A5A7A8ABB0B1B2B6B6B9BCBFC1C1C3C5C5C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7E7F80818385898A8D8F929396999B9C9EA2A5A8ABAEB1B1B3B6B9BDBFBFBFC1C1C3C4C9C9CBCECFD0D0D1D3D3D5D5D7D9DADBDBDEDEDEDEDEE1E1E1E2E3E3E4E4E4E4E3E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDC9A1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171717161616161615151515151614141414141415151514141414141414141413131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000006D898B8E909295979A9DA0A2A5A8ABAEB1B4B7BBBDC1C4C6CACDCFD2D5D8DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F400000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A188898B8D90919395989A9EA0A3A5A9ABAFB2B5B7BABEC1C4C7CACCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBFBFBFBFBFAFAF9CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B29B83807E7E7D7D7D7D7D7D7D7D7D7E7E7E7E808080808080808080828282828283838383838384848484858585858585868F99A3AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7858486898A8C8D8E8F909397999B9EA1A2A7A7ABAEB2B3B6B6B9BBBDBFC1C3C5C5C8C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7C7E7F81818285898A8C8E909294979B9B9EA1A4A7A8ABAEB1B2B5B8BBBCBDBFBFC1C3C4C6C9C9CACECFD0D1D5D5D6D6D6D7DADADBDADBDADADBDADADCDCDEDEDBDBDADADAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DE9A1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171716161616161615151515151614141414141415151514141414141414141413131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED000000000000000000000000000000000000000000000000007D8A8C8E919395989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDDFE2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F413000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A1888B8D8F91929595999CA0A2A3A7AAADB1B3B5B7BDBEC1C5C7CBCCD0D4D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFAFBFBFBFBFCFCFCFBFBFBFBFAFAE7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A58D81807E7E7E7E7E7E7E7E7E7E7E808080808080808080808080828282828282828383838383838387919AA3ACB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A988888C8E9090949797999B9C9E9FA1A4A4A7A8ABACB1B1B1B5B8B9BBBCBDBFC0C1C3C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7838486888A898E8F909397979B9CA1A2A5A7ABB0B2B3B5B8B9BCC0C1C3C6C9C9CBCFD1D5D5D7D9DBDEDEDFE2E3E3E3E4E6E9E9EAEBEBEBEAEAEAEBEBEBECEEEFEFEEEEEEEEF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADB991B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171717161616161615151515151614141414141415151514141414141414141413131313131313131313131311121212121212111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE00000000000000000000000000000000000000000000000000888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC2C5C7CACED0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F53100000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A18B8B8D90919395979A9DA0A2A4A8AAADB1B4B7B9BDC0C3C5C7CBCED1D4D7DADCDDE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFBFCFCFCFCFCFBFBFBFBFAF9BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7988B838080807E7E7E7E8080808080808080808080808080808082828282868A939BA3ACB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78384868688898C8E8F92929697999B9EA1A4A5A7ABACAEB1B2B5B5B8B9BCBFC0C3C3C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D7D80818386898C8E8F909396999B9C9EA2A5A8ACB0B2B5B6B9BBBFC0C4C6C9CBCED0D1D3D5D6D7DADADADBDBDCDEE1E1E2E2E3E4E6E6E6E7E9E9E7E9E9E7E6E6E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D3D3D3D1D1D1D0D1D1D1D0D1D1D1D3D1D3D3D5D7D7D7D7D7D7D9D7D7D7D7D5D6D6D7D7D5D5D5D5D5D6D6D6D6D7D7D7D7D7D7D7D7D7D9D9DADAD9D9D9D9DADADADBDCDCDEDEDEDCDEDFE1DFE1E1E1DFDEDEDEDEDEDFE1E2E3E2E2E3E3E4E3E2E3E3E3E3E1E3E2E2E1E2E2E2E2E2E39D1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515141414141414141414131313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA200000000000000000000000000000000000000000000000016898A8D8F919496999B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED1D3D6D9DCDEE0E2E5E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F54E0000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A28B8D8F91939597999C9EA0A3A5A9ABAFB2B4B7BABDC1C3C5C9CCD0D1D4D7DADCDEE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFBFBFBFBFADFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0A79E98918D8787878380808080818787888892929A9E9FA8B0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77F81828688898C8C8F8F909394979B9CA1A1A2A4A5A5A8AAABACB0B1B5B5B8B9BBBBBDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77E7F8183858589898C8E8F9294979B9C9EA1A2A5A7AAACB1B1B6B8B8BDBFBFC1C3C5C9CACBCFD1D5D6D7D7D9DADADADBDBDCDBDBDCDEDFE1DFE1E2E1E1E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4A01B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515141414141414141414131313131313131313131313121212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000020898B8D8F929497999C9FA1A4A8AAADB0B3B7B9BDC0C2C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F56200000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A28D8F91929395989A9DA0A2A4A8AAADB1B3B5B7BBBDC1C4C7C9CCD0D3D4D8DADCDEE0E4E5E7E9ECEDEFF0F0F3F3F5F5F6F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFBFBFBFBFABEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A98A8D8E9090929697999B9C9E9FA2A4A5A7AAACB0B1B1B5B6B9BCBDBFC1C3C3C5C5C5C8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A5747678787B7D7E81818589898D90939496999B9B9FA2A5A5A8ACB0B3B5B9BBBFC0C1C3C5C6C8C9C9CACECFD0D1D3D5D5D7D9D9D7D9DADADADBDCDCDCDEDEDEDFDFDEE1E1DFE1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DF9B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515141414141414141414131313131313131313131313121212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000000000000000000000000000000000000000000000000036898B8E90929497999C9FA2A5A8ABAEB1B4B7BABDC0C4C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5920000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A38F9092939597999C9EA0A3A5A9ABAFB1B4B7B9BDBEC1C5C7CACCD0D3D6D9DADCE0E1E4E5E7E9ECEDEFF0F0F3F3F5F5F6F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFBFBFBFAD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8D8E90939697999B9C9EA1A4A5A7ABACAEB1B5B5B8B9BBBBBDC0C3C4C6C8C9CBCFD1D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77E81818486888A8D8F9293979B9C9EA1A2A5A7A8ABAEB1B2B6B9BCBDBFC1C4C5C9CBCFD1D1D5D5D7D6D9DADBDCDEDEE1E3E3E6E6E4E4E6E6E6E6E6E6E7E9E7E7E7E6E4E4E3E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDB991B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515141414141414141414131313131313131313131313121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35000000000000000000000000000000000000000000000000478A8C8E919395989A9DA0A2A5A9ABAFB2B4B8BBBEC1C4C7CACDCFD2D5D8DBDDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF
-FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5B000000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F6F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A49192939597999A9EA0A2A4A8AAACB1B2B5B7BABDC1C3C5C7CBCCD0D4D7D9DADDE0E1E4E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFBFBFBF7B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8E9092929497979B9C9CA1A2A5A7A8ACB1B1B3B5B5BBBBBCBFC1C3C4C5C6C9CACBCBCBB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7E8082838389888A8C8F9090939497999B9FA1A4A5A7A8ACB1B3B6B6B9BCBDBFC3C3C4C5C6C9C9CBCECFD1D1D3D5D5D7D6D7D9DADADADADADADAD9D9D9D9DADBDCDCDCDCDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBA41B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161615151515151516141414141414151515141414141414141414131313131313131313131313121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19000000000000000000000000000000000000000000000000578A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BBBFC1C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF
-FFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6C400000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A492939595989A9DA0A2A3A5A9ABADB1B3B6B7BBBEC1C4C7C9CCD0D1D4D7DADCDDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBDAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A987888A8D8D9090939497979B9C9F9FA1A4A5A5A7A8AAAEB0B1B2B3B3B6B6B8B9BBBBBDBBB4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78182838589898C8D8F9092949797999CA1A2A5A8ABABAEB1B5B6B6B9BBBDBFC1C4C5C6C9C9C9CACED0D1D3D5D6D7D6D5D7D9DADADADCDADADADBDEDEDCDBDBDBDBDCDEDCDCDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E19E1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161615151515151514141414141414151515141414141414141414131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000006E8A8D8F919496999B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDDE0E2E5E6E9EAECEEEFF1F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFF
-FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F500000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A4939595989A9CA0A0A3A5A8AAADB1B2B4B7B9BDC0C1C5C7CACCD0D3D4D8DADCDEE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBF7BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8E8F90929496979B9C9C9E9FA2A5A5AAABB0B0B2B3B5B6B6B9B9BBBCBFC3C3C4C5C6C5C6C0B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A98687888A888A8C8D909294979B9B9EA1A2A5A8ACB0B2B3B6B9BCBDC0C0C1C3C5C8CBCBCECED0D3D5D7DADADADBDBDEDFE1E1E2E1E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E19C1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191919171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE000000000000000000000000000000000000000000000000007E8B8D8F929497999C9FA1A4A8AAADB0B3B7B9BDC0C2C6C9CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF
-FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F51E00000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A49597989A9C9EA0A2A4A7A9ABAFB1B3B6B7BBBDC1C3C5C7CBCCD0D3D6D9DADCDEE0E4E5E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBE3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA909293939697999B9E9FA2A4A5A7ABACB0B1B3B6B9BCBDBDBFC1C1C3C3C4C4C5C8C9C9CACBC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78183838688888A8D8E9092929494999C9C9EA2A2A5A5A8AAACACAEB0B1B2B6B9BBBDBDC0C1C3C4C5C8C9CACECECFD0D0D0D0D1D1D3D5D5D6D5D5D3D3D5D6D5D5D5D5D7D6D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E29E1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD00000000000000000000000000000000000000000000000005898B8E909294979A9C9FA2A5A8ABAEB1B4B7BABDC0C4C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF
-FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F7F53A0000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F8F6F5F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A697999A9C9EA0A2A4A5A9ABADB1B3B5B7B9BDBEC1C4C7C9CCD0D1D4D7D9DADDE0E1E4E7E7E9ECEDEFF0F0F3F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8C8D8F8F92939396999B9C9EA2A2A5A5A7A8ABAEB2B2B5B6B9BBBDBFBDC0C3C4C6C6C8C9C8C8B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7858689898A8D8F8F92929497979B9C9FA2A5A7A8ABAEB0B2B6B9BCBCBFBFC1C5C6C9CACBCED0D3D3D6D7D7DADBDCDEDEDCDEDEDBDEDCDBDBDCDEDCDEDEDEDEDEDFDEDEDEE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6941B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191919171717171717171717171616161616151515151516141414141414151515141414141414141414131313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000001B8A8C8E919395989B9DA0A2A6A9ABAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF
-FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5620000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6999C9DA0A0A2A4A5A9AAADAFB1B4B6B9BBBDC1C3C5C7CBCCD0D3D4D8DADCDEE0E3E5E7E8E9ECEDEFF0F1F3F3F5F5F6F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBEBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8F9090949697999B9E9FA2A4A5A8ABACACB1B2B5B8B9BDBDC0C3C5C6C8CBCED0D1D1D5D5D7D9D7BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A9868888898D8E90929397999B9C9EA1A2A4A5A8A8ACACAEB1B2B6B9BBBDBFC3C4C6C8C8CACBD0D1D1D5D3D6D7D7DADBDCDBDBDCDFDEE1E1E1E1E1E1E2E4E6E6E4E3E3E4E4E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5951B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171616161616151515151516141414141414151515141414141414141414131313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000318A8D8F919396989B9EA0A4A6A9ADAFB2B6B8BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF
-FFFFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F58900000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F6F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A89C9EA0A0A2A4A5A8AAACAFB1B3B5B7BABDC0C1C4C7C9CCCED0D4D6D9DADCDEE0E4E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBCFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB97999B9B9E9FA2A5A5A7A8ACAEB0B2B5B9BBBBBDBFC1C3C5C6C9CBCECFD0D0D3D5D5D7D9D9D9DADAB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A989898A8C8E8F9092939797999C9B9EA1A4A5A8ABACB1B3B5B8B9BDC0C1C4C5C8CBCBD0D0D1D3D3D5D6D7D9DADBDEDEDFE1DEE1E1E1E2E4E6E6E4E6E6E6E4E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6D23A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939393A3A3A3A3A3939393939393939393939383838383837373737373737373737373737373737353535353535353636353535353535353535353434343434353535353434343434343435353434343333333333333232323232323232323131313131313131313030302F2F2F2F2F2F2E2E2E2E2E2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828282727272727272727262525252525252525252425252525252424242423232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171616161616151515151516141414141414151515141414141414141414131313131313131313131313121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000428B8D8F929496999C9FA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E6E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6B100000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A9A0A0A2A3A4A7A9AAACAFB1B3B5B7B9BDBEC1C3C5C7CBCCD0D1D4D7DADCDDE0E1E4E7E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBF9BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB949799999B9B9CA1A1A2A4A7A7AAABACAEB1B2B6B8B9BBBCBDBFC1C4C5C5C9C9C9CACACBCECFCECFCBB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8C8E8E8F9092939497979B9C9C9C9FA2A5A7A7ACACAEB1B2B3B9BBBDBFC4C5C8C9CBCBD0D3D5D7D7D9DADBDCDEDFE1E2E3E3E2E3E3E3E3E4E4E4E4E4E6E4E3E3E4E3E3E3E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3493A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3939393939393939393A3A3A3A3A3939393939393939393939383838383737373737373737373737373737373735353535353535353636353535353535353535343434353535353535343434353535353535343434343333353535353535353533333333323131313131313131313030302F2F2F2F2F2F2E2E2E2E2E2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282827272727272727272625252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171616161616151515151516141414141414151515141414141414141414131313131313131313131313121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07000000000000000000000000000000000000000000000000588B8D8F929497999C9FA2A5A8ABAEB0B4B7BABDC0C3C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6CE00000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AAA0A2A3A5A7A9AAACAFB1B3B5B7B9BBBDC0C1C5C7C9CCCED0D3D6D8DADCDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBE6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AC97999B9C9C9FA1A4A5A5A7A7AAABACB1B2B6B6B9BBBDBFC1C1C3C4C5C6C8C9C9C9CBCECED0D0D1D3D1C7B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9696979799999B9C9EA1A4A5A7A8ACB0B1B3B5B6B8BCBDC0C1C5C6C9CBCFD0D3D5D7D9DADADCDEDEDEDEE1E1E1E1E2E3E2E3E3E3E2E1E1E3E3E3E3E3E4E4E3E3E4E3E3E2E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDE6B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A39393939393939393A3A3A3A3A39393939393939393939393838383837373737373737373737373737373737353535353535353636353535353535353535363535353535353535363535353535353536363535353535353535353535353535333333333232323232313131313030303030302F2F2F2E2E2E2E2E2E2E2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282727272727272727262625252525252525252525252525252524242423232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000006E8B8E909295979A9DA0A2A5A8ABAEB2B4B7BBBDC1C4C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F7F500000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AAA3A4A5A8A9ABADAFB1B3B4B7B7BABDBEC1C4C5C7CBCCD0D1D4D7D9DADDE0E0E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBCFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA7AAACACAEB0B2B2B6B8BBBDBDBDBFBFC0C1C3C5C8C9CACBCED0D1D3D3D5D5D5D7D7D9DADADBDCDBDCDCC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A98A8C8E90909293939697999B9C9FA2A4A5A5A7A7AAAAACAEB1B3B5B8BCBFBFC0C0C3C5C6C8C8C8CACECFD0D1D1D3D5D5D6D7D6D7DAD9D9DADBDBDBDCDEDEDEDEDEDEDBDCDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDE933B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3939393939393939393A3A3A3A3939393939393939393939383838383737373737373737373737373737373535353535353535363635353535353535353535353535353636363635353536363636363635353535353535353535353535353333333332323232323232323130303030303030302F2E2E2E2E2E2E2E2E2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727272626252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB900000000000000000000000000000000000000000000000000858C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBFC1C4C7CACDD0D3D5D8DBDDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F53100000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F6C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ACA5A8A9AAABADAFB1B3B5B7B7BABDBEC1C3C5C7CACCD0D1D3D6D8DADCDEE0E3E4E7E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBF9BFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEA1A1A2A5A7A8A8ABACAEB0B2B2B5B6B9BCBDBFC1C4C4C5C9CBCECECFD0D3D3D6D7DADADBDBDCDBDCDEDEDEC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB93949497999B9B9B9B9B9E9EA2A4A5A7A8ACACAEB1B2B2B5B9BBBFBFC1C4C5C8C9CACFD0D1D3D5D7DADADBDCDCDCDEDEDEDEDFE1E1E3E3E3E3E2E3E3E3E4E6E7E7E6E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9BE3B3B3B3C3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A393939393939393A3A3A3A3A3939393939393939393938383838373737373737373737373737373737373535353535353536363535353535353535353535363636363636373736363636363636363635353535353535353535353535353535353532323232323232323131303030303030302F2E2E2E2E2E2E2E2E2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282827272727272727262625252525252525252525252525252524242423232323232323232323232323232222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000118A8D8F919496999B9EA1A4A6AAADB0B3B6B9BCBFC2C5C7CBCED0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F64F00000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ADA9AAABADAFB1B1B3B5B7B7BABDBEC1C3C5C7C9CCCCD0D3D4D7D9DADDDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AC9B9B9E9F9FA1A4A5A7A7ABABACACAEB1B2B3B5B6B6B9BBBCBFC1C3C3C3C4C5C6C8CACBCFCFCFD0D1D1D0D3D3BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9293949797999B9C9C9E9FA2A5A7A8ACAEB1B1B5B5B8B9BDBFC1C3C4C5C5C5C8CACBCED0D0D1D5D6D7DADADCDEDEDFE1E1E1E2E2E1E2E3E3E3E3E3E4E4E4E6E6E7E9EAEAEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEE23C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A393939393939393A3A3A3A3A3939393939393939393938383838373737373737373737373737373737373535353535353536363535353535353536363636363636373737373636353535353536363535363536363636363535353535353535353533333332323232323131313130303030302F2E2E2E2E2E2E2E2E2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282827272727272727262625252525252525252525252525252524242423232323232323232323232323232222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55000000000000000000000000000000000000000000000000268B8D8F929497999C9FA1A5A8AAADB0B3B7B9BDC0C2C5C9CBCED1D4D7D9DCDEE0E2E5E7E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F67500000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEABADAFB1B1B3B4B5B7B9BABDBEC1C3C5C7C9CBCCD0D1D4D6D9DADCDEE0E1E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA8A8ABAEB0B1B1B2B5B6B6B9B9BCBCBDC0C1C4C4C5C6C9CACBCBCBCED0D1D1D3D3D6D9D9D7D7D9DADADADBDBDCB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA90929393949799999B9C9E9EA2A5A7A7AAABACB0B2B2B3B5B8B9BBBDBFC1C3C4C6C6C9CBCACBD0D0D1D3D3D3D5D5D5D5D5D5D7D9DADADADBDCDEDBDBDBDBDBDBDEDCDCDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1573C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3A3A3A3A3A3A3A393939393939393A3A3A3A3939393939393939393939383838383737373737373737373737373737373535353535353536363535353535363636363636363636373736363636353535373737373636363636363636363535353535353535353533333333333332323131313131303030302F2F2E2E2E2E2E2E2E2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282827272727272727272625252525252525252524252525252524242424232323232323232323232323232222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161615151515151614141414141415151514141414141414141313131313131313131313131112121212121211111111111111111111111110101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000003D8B8E909295979A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6A600000000000000000000000000000000000000000000000000F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEAFB1B1B2B4B5B7B7B9BBBDBEC1C3C5C7C9CBCCD0D1D3D6D7DADCDDE0E0E3E5E7E8E9ECECEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBCFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE9E9FA2A4A7A7A8A8ABAEB0B1B3B3B6B6B8B9BCBDBFBFC1C4C5C9C8C9CACBCECED0D1D3D3D3D7D6D9D9DADADADCD6B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9797999B9C9E9FA1A2A2A5A5A7A8AAACACB0B1B5B5B8BBBBBFBFC3C3C5C5C8CACACACBCECFCECFD0D3D5D5D6D6D9DADBDBDADCDEDFDFDFE1DEDFDFE1E2E3E2E1E1E1E2E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E67D3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A393939393939393A3A3A3A39393939393939393939393838383737373737373737373737373737373535353535353636363635353636363638383836363636363636363836373737373737383837373737373737373736363635353535353434353533333333333131313131313130302F2F2F2F2E2E2E2E2E2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727272625252525252525252524252525252524242424232323232323232323232323232222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161615151515161614141414141515151514141414141414141313131313131313131313131212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000538C8E919396989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADDDFE1E4E6E7E9EBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7CE00000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F8F7C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B1B2B4B5B6B7B9BABDBDC0C1C3C5C7C7CBCCCED0D3D4D7D9DADCDEE0E3E4E5E7E8EBECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBF9C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA2A4A5A5A5A8AAA8ABAEB1B1B3B5B5B5B6B8B9BCBDBDBDBFC1C3C3C5C8C8C8C8CACACACECFD0D3D3D3D3D5D5D3D5CAB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AC999B9B9C9E9EA1A2A5A5A5A7A7AAACAEB1B2B6B8B9BCBFBFC0C3C5C5C9CACBCBCBCBCED1D1D3D5D5D6D9DADBDEDEE1E1E1E2E2E2E2E3E3E3E3E3E3E4E4E4E4E4E4E6E6E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFB23C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A393939393939393A3A3A3A393939393939393939393838383837373737373737373737373737373735353536363636363836363636383838383836363636383838383836383838383838383837373737373737373736363636363636363534353535353333333232313131313131302F2F2F2F2F2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727272625252525252525252525252525252524242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313131212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE000000000000000000000000000000000000000000000000006E8D8F919496999B9EA1A4A6A9ADAFB3B6B8BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B4B5B6B7B7BABBBDBEC1C1C3C5C7C9CBCCCED0D3D4D6D9DADCDDE0E0E3E5E7E8E9ECECEFEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBF1BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA4A4A5A5A8A8AAABACAEAEB0B2B3B6B9B9B9BDBFBFBFC1C3C5C8C9C9CACBCBCECECECFCFD0D0D0CFCFD1D1D0D1D0D0C2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEA1A2A2A2A2A4A5A5A7AAABACAEB1B1B1B1B2B2B3B6B9BBBFBFC1C3C3C5C8C9CACBCBCECED0D0D1D3D1D3D3D5D5D5D6D7D7D7D7D7D7D7D7D7D7D9DBDCDCDEDCDBDBDBDBDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADAC83D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A393939393939393A3A3A3A393939393939393939393838383837373737373737373737373737373737363636363738383837373738383737373638383838393939393838383939393939393838383838383838383737373736363636363535353535353333333232323131313131302F2F2F2F2F2E2E2E2D2D2D2D2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727272625252525252525252525252525252524242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191717171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA200000000000000000000000000000000000000000000000000868D8F929497999C9FA1A4A8AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDDE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F63100000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B7B7B9BABBBDBDC0C1C1C4C5C7C9CBCCCED0D1D4D6D8DADCDDDEE0E3E4E5E7E8EBECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBE9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0AAACACAEB0B1B2B3B6B6B8B9B9B9BBBDBFC3C3C5C5C6C9CACBCBCBCECFD0D0D0D0D1D3D5D5D6D7D7D9D7D9DADADADADAC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA7AAAAAAAAABABACAEB0B2B5B5B6B9BBBFC0C1C3C4C4C8C9CACBCFD1D3D5D7D7DBDBDEDEDFDFE1E3E3E2E2E3E3E3E3E4E4E4E4E4E4E3E2E2E3E3E4E4E4E4E4E3E3E4E3E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDE523D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393A3A3A3939393939393939393938383838373737373737373737373737373737373736373737373939373738373737393939383A3A3A3A393A3A3A3A39393A393A3A3A3A3939393939393939383737373737373736353535353535353333323232323231313131302F2F2F2F2F2E2E2E2D2D2D2D2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727272626252525252525252525252525252524242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191717171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A000000000000000000000000000000000000000000000000168B8E909295979A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F66200000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9BABBBDBDBEC1C1C3C5C5C7C9CBCCCED0D1D4D6D8DADADCDEE0E1E4E5E7E8E9ECECEFEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBE9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFABACB1B0B1B1B2B3B5B6B9BBBCBCBDBFBFC0C1C4C4C6C9C9C9CACECFD0D1D1D1D1D3D5D5D5D6D6D6D6D7D9D7D9DAD9DADABBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA5A5A7A8AAAAACACAEB0B1B3B5B6B6B9BCBCBDBFBFC1C3C4C5C5C6CAC9CBCECBCECFD0D1D3D3D3D6D7D7D9D9D9DADADADADADBDADADADADADADADBDBDBDADADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6753E3E3E3E3E3E3E3E3E3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3A3A3939393939393A3A3A3A39393939393939393939383838383737373737373737373737373737373837373739393939383838393939393B3B3A3A3B3B3B3A3A3B3B3A3A3A3A3B3B3B3A3A3A3A3A393939393938383838383837373736363535353535333332323232323231313130302F2F2F2F2F2E2E2D2D2D2D2D2C2C2C2C2B2B2B2B2B2B2B2B2A292929292929292929282828282828282828272727272727272626252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171717161616161615151515151614141414141415151514141414141414141413131313131313131313131112121212121211111111111111111111111110101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000002C8C8E919396989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDCFD2D5D7DADCDEE1E4E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F78900000000000000000000000000000000000000000000000000F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F8C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BDBDBEC0C1C1C3C4C5C7C7CACCCCD0D0D3D4D6D7D9DADCDEE0E1E3E5E7E7E9ECECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBE3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFAAABABAEB0B0B2B1B3B3B3B5B6B8B9BBBDBFC0C3C4C5C4C5C8C9CBCACED0D1D3D3D3D6D6D7D7D9D9D9DADADADADADADBDAD7B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA2A2A4A4A5A5A5A7A7A8A8AAABAEB1B2B5B6B9B9B9BBBDBFC0C0C1C4C5C6C6C8C9C9CACACACBCBCECED0D0D1D3D5D5D5D6D9D9D9D9DADADADADADAD9D7DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFA83E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3A3A3939393939393A3A3A3A39393939393939393939383838373737373737373737383837373A3A3837393939393939393939393B3B3B3B3C3C3B3B3C3C3C3B3C3C3B3B3B3B3B3C3C3C3C3B3B3B3A3A3939393939393938383838383736363635353534343232323232323231313030302F2F2F2F2F2E2D2D2D2D2D2C2C2C2C2B2B2B2B2B2B2B2B2A292929292929292929282828282828282828272727272727272626252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171717161616161615151515151614141414141415151514141414141414141413131313131313131313131112121212121211111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07000000000000000000000000000000000000000000000000428D8F919496999B9EA1A4A6AAADAFB2B6B8BCBFC1C5C7CACDD0D3D6D8DBDDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7B100000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BEC1C1C1C3C4C5C7C7C9CBCCCCD0D1D3D4D6D8D9DADCDDE0E0E3E5E5E7E8EBECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBBBBCBCBDBFC1C1C3C4C6C9C9CBCECECED0D0D3D1D3D3D7D7D7D9D9D9D9DAD9DADADADCDEDEDEDEDFE1E1E3E3E3E3E3E3E3DBB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA2A5A7A7A8A8A8ABACAEB1B1B1B2B2B5B6B6B8B9BBBFBFC3C4C5C5C5C8C6C9CACACBCBCFCECFCFCFD1D5D3D3D3D5D7D6D9DADADADAD9D9D9D9DBDADBDBDBDBDAD9DADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6C43E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3A393939393939393A3A3A393939393939393939393838383837373737373738383838373A3A3A3939393939393B3B3B393B3B3B3C3C3C3C3C3C3C3C3C3C3C3D3D3D3C3C3C3D3D3D3B3B3C3C3C3C3A3A3A3A3A3939393939383838383736363636353434343232323232323231303030302F2F2F2F2E2D2D2D2D2D2D2C2C2C2B2B2B2B2B2B2B2B2A292929292929292929282828282828282828272727272727272726252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171717161616161615151515151614141414141415151514141414141414141313131313131313131313131212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9000000000000000000000000000000000000000000000000005E8D8F929497999C9FA1A5A8AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDDE0E2E4E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7E3000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C1C3C4C5C5C7C7C9CBCCCCD0D0D1D3D4D6D8DADADCDDE0E0E3E4E5E7E8E9ECECEDEFF0F0F1F3F5F5F6F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B5B6B8B9BBBDBDBDC0C1C3C3C3C4C5C5C6C9C9CACBCBCBCECFD0D0D1D1D1D5D5D6D7D7D6D7D7D9D7D9D9DADAD9D9D9DADADAD9CCB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B0B1B1B1B1B2B2B3B6B6B8B8B9B9BBBCBDBDBFC0C0C1C4C5C5C6C8CACBCBCFD0D0D1D3D5D6D7D9DADADADADCDEDEDEDEDFE1DFDFDFE2E2E2E3E3E3E2E2E1E1E1E1DFE1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7553E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3A3939393939393A3A3A3A3939393939393939393838383837373737393938383839393A3B3B3B3939393B3B3B3B3C3C3B3B3B3C3C3C3D3D3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3B3B3B3B3B3B3939393938383838373737373636353434333232323232323231303030302F2F2F2F2D2D2D2D2D2D2C2C2C2B2B2B2B2B2B2B2B2A292929292929292929292828282828282828272727272727272726252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171717161616161615151515151614141414141415151514141414141414141313131313131313131313131212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000007A8E909395989A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F61E00000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8C4C5C5C7C7C9CBCCCCCED0D0D3D4D6D7D9DADADCDDE0E0E3E4E5E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9B9BBBBBCBFBFC0C0C3C3C5C5C5C6C6C9C9CAC9C9CACBCECED0D0D0D1D3D5D5D7D7D7D6D7D9D7D7D9D7DADAD9D9D7D9D9DAD9D7C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8B9B9BBBDBDC0C0C1C0C1C1C5C5C6C8C9CECFCFD0D1D1D6D7D7D9D9DADBDEDEE1E1E1E2E3E4E6E7E9E9EAEBEBEBEBEEEFEEEEEEEFEFEFEEEEEFEFEEEEEEEEEEEFEFF2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9863E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3C3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3A3939393939393A3A3A3A393939393939393939383838383737393939383939393B3B3B3B3B393B3B3B3B3B3B3D3D3D3D3D3D3D3D3E3E3F3D3D3D3E3E3F3F3F3D3E3E3E3E3E3E3E3E3D3D3D3B3B3B3B3B3B3A3A3A393838383838373737373636353433333332323232323230303030312F2F2F2F2D2D2D2D2D2D2C2C2B2B2B2B2B2B2B2B2A292929292929292929292828282828282828272727272727272726252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919171717171717171717171616161616151515151516141414141415151514141414141414141413131313131313131313131112121212121211111111111111111111111110101010101010101010100F0F0F0F0F0F3A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000000B8D8E919396989B9DA0A3A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D5D7DADCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F74F00000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8C7C7C9C9CBCCCCCED0D0D1D3D4D6D7D9DADCDCDDE0E0E3E4E5E7E7E9EBECEDEFEFF0F0F1F3F5F5F6F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBE3B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C8C8C9CACECFD0D1D0D1D1D1D1D1D3D5D6D7D7D7DADADBDCDEDBDCDCDEDEDFE1E1E1E1E1E2E3E3E4E3E6E4E3E3E3E3E3E4E4E6E4E3C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFABABAAABACACAEAEB1B2B3B3B5B3B5B5B6B6B8B8B9BCBDBFC3C4C5C5C5C6C9C9CACACACED0D0D1D3D3D3D5D5D6D7D6D7DAD9D9DADADBDBDCDEDEDEDEDEDEDBDCDBDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEAD3E3E3E3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A393939393939393A3A3A39393939393939393939383838393939393B3B39393B3B3B3B3B3B3B3B3B3B3C3C3C3D3D3C3C3D3E3E3E3E3E3F3E3E3F3F3F40403F3F3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3B3B3B3A3A3A383838383737373737353535333333323232323231303030312F2F2F2F2D2D2D2D2D2D2C2C2B2B2B2B2B2B2B2B2A292929292929292929292828282828282828272727272727272726252525252525252525242525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919171717171717171717171616161616151515151614141414141415151514141414141414141413131313131313131313131112121212121211111111111111111111111110101010101010101010100F0F0F0F0F8A82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F20828A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35000000000000000000000000000000000000000000000000278D8F929497999C9FA1A4A7AAADAFB3B6B8BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F78000000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BACACBCBCCCCCED0D0D1D3D4D6D7D8DADADCDDDEE0E0E3E4E5E7E7E8EBECECEDEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBE9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDBFC0C0C1C0C3C3C3C4C5C6C8C9C9CACACACBCACACBCBCECFCFD0D1D1D3D3D3D5D5D7D7D6D7D5D6D5D5D5D6D7D7D9D9D9D7D9DADADBBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0ACACACAEB0B2B2B2B3B5B6B6B8B8B9B9BBBDBDBFC0C1C3C4C5C6C9C9CBCBCED0D1D1D3D5D5D7D6D6D7D7D7D9DADADBDCDBDADADADADBDCDEDEDEDEDEDFE1E1DFDEDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4D83F3F3F3F3F3F3F3F3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3C3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3939393939393A3A3A3A3939393939393939393838393939393B3B3B3B3B3B3A3A3B3B3B3C3B3C3C3E3E3D3D3E3F3D3F3F3F3F3F3F3F3F3F3F3F40414141413F3F3F40403F3F3F3E3E3E3E3E3D3D3D3D3C3C3C3B3B3A3A3A3838373737373737353535333333323232323131303030312F2F2F2E2D2D2D2D2D2D2C2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272726252525252525252525242525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919171717171717171717171616161615151515151614141414141415151514141414141414141413131313131313131313131112121212121211111111111111111111111010101010101010101010100F0F0F0F4FBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000438E90929497999C9FA2A5A8AAAEB0B3B7B9BCC0C2C5C9CBCED1D3D6D9DBDEE0E2E4E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7B200000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCCCCCCED0D0D0D1D3D4D6D7D8D9DADADCDDDEE0E0E3E4E5E7E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F6F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBECBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBBDBFBFBFC0C1C3C3C3C3C3C4C4C5C8C9C9C9CACBCED0CFD1D0D0D1D5D6D6D5D6D5D7D6D6D7D9D9DADAD9D9D7D9D7D6D6D5D5D5D1D1CEB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B5B5B6B6B8B9BCBDBDBDBDBDBFBFBFC1C1C3C4C5C8C6C9CACBCACBCECFD0D0D3D3D3D6D6D6D7D7D7D9D9DAD9DBDBDBDEDCDBDCDCDEDBDEDCDEDEDEDEDEDEDEDEDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDC653F3F3F3F3F3F3F3F3F3F3F3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3A3939393939393A3A3A393939393939393939393939393B3B3B3B3B3B3A3A3B3B3C3C3C3E3C3E3E3D3D3F3F40404040403F3F4040404140404141414142424241414141414141413F3F3F3F3F3E3E3E3D3D3D3C3C3A3A3A3A3937373737373737353535333333323232313131303031312F2F2E2E2D2D2D2D2D2C2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828282727272727272726252525252525252525242525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191919171717171717171717161616161615151515151614141414141415151514141414141414141413131313131313131313131212121212121111111111111111111111111010101010101010101010100F0F0F1ABDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4000000000000000000000000000000000000000000000000005F8E919396989B9DA0A2A5A9ABAEB1B4B7BABDC0C4C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7E30000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDD0D0D0D1D3D3D4D6D7D7D9DADADCDCDDDEE0E1E3E4E5E7E7E8E9ECECEDEFF0F0F1F1F3F5F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBF1C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9BBB9BBBCBBBDBDBDBDBDBDC0C0C1C3C4C4C5C5C5C6C5C8C9C9CACBCECFCFD0D0D0D0D0CECECED0D1D0D0D0D0D0D0D0CFCECFCECECECBC7B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B0B1B1B2B2B3B3B3B5B5B6B6B8B9BBBBBCBDBDBDBFC0C1C3C3C4C8C8C8C9CBCACBCBCFD1D3D3D5D5D6D6D6D7D6D7D7D7D7D7D6D6D7D7D7D9D7D7D9D9D9D7D7D6D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E18E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3D3D3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3A39393939393A3A3A3A393939393939393A3A39393A3B3B3B3B3B3B3B3B3B3C3C3E3E3E3E3D3D3F3F40414141404141404141424242424243434342424242424242424242424242404040403F3F3F3E3D3D3D3D3B3B3A3A3939373737373737373535353333333232323131303031312F2F2E2E2D2D2D2D2D2D2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272726262525252525252525252525252525242424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919191717171717171717171616161616151515151516141414141414151515141414141414141414131313131313131313131312121212121211111111111111111111111110101010101010101010100F0F0F0F8ABDBDBDBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D000000000000000000000000000000000000000000000000007C8F919396989B9EA1A4A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADDDFE1E4E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F71E00000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCD1D3D3D4D4D6D7D8D9DADADCDCDDDEE0E0E3E4E5E5E7E7E8E9ECECEDEFEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBF9CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C5C5C5C5C6C8C8C9CAC9CACACBCECECECFD0CFD0D0D0D0D1D1D3D1D3D5D5D5D6D5D5D5D5D6D3D5D7D7D7D7D6D6D6D7D7D5D5D5D5D5D3D5D3C7B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B5B5B6B6B6B9BBBCBDBFBFBFBFBFC0C0C1C1C4C4C4C3C4C5C8C9C9CACBCBCECFD0D1D1D3D5D5D6D7DADADADADADBDEDFE1E1E1E1E1E2E2E3E3E3E4E3E3E4E3E2E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4BF3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3939393939393A3A3A39393939393A3A3A3A3A3A3A3B3B3B3B3B3C3B3C3C3D3D3E3E3F403F40404141414142434242434343434444434444444544444444444343434343434242424241414140403E3E3D3D3D3D3D3B3B3A3A39393737373737363535353333323232313131303131312F2E2E2E2D2D2D2D2D2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828282727272727272726262525252525252525252525252525242424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919171717171717171717171616161616151515151516141414141414151515141414141414141413131313131313131313131112121212121211111111111111111111111110101010101010101010100F0F0F4FBDBDBDBDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C0000000000000000000000000000000000000000000000000B8D8F929497999C9FA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F75800000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDD4D4D6D7D7D8D9DADADCDCDDDEE0E0E0E3E4E5E5E7E7E8E9ECECEDEFEFF0F0F1F3F3F5F5F6F6F7F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBDDB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C3C4C4C4C5C6CAC9CAC9CBCECFD0D1D1D1D3D1D3D5D5D7D7D9D7D7D7D9D9DADADBDBDBDBDBDCDEDEDFE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B3B3B3B5B6B8B9BBBCBCBDBFBFBFBDBFC0C3C3C3C3C3C4C4C5C5C6C8C8CACBCECECFD0D1D3D1D1D3D5D3D3D5D7D7D7D9D7D7D6D6D7D7D7D7D6D6D7D7D7D7D9D9D9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DA4C3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3A39393939393A3A3A3A3939393A3A3A3A3B3B3B3B3B3B3B3C3C3D3D3D3D3D3D3E404041404141414243434343444444444545464647464646464747474746464646444444444343434242424141403E3E3E3E3D3D3D3B3B3A3A393937373737363635353533333232313131313131312F2E2E2E2D2D2D2D2D2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828282727272727272726262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919171717171717171717171616161616151515151516141414141414151515141414141414141413131313131313131313131112121212121211111111111111111111111010101010101010101010100F0F1ABDBDBDBDBDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19000000000000000000000000000000000000000000000000278E909395979A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CBCED1D4D6D9DCDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F78A00000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BFD7D7D8D9DADADADCDCDDDEDEE0E0E3E3E4E5E7E7E8E9EBECECEDEFEFF0F0F1F3F3F5F5F5F6F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBECBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BAC3C4C4C4C3C3C3C3C4C5C5C5C5C5C5C6C8C9CACECBCECECFCFD0D1D3D3D1D1D1D3D3D3D3D5D6D7D7D9D9D9D9D9D7D7D7D7D7D7D6D5D5D5D3D3D0BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDBCBFBFBFC0BFBFC1C1C3C1C4C4C5C6C5C6C8CACACACBCBCFD1D1D3D5D6D6D7D7D7D7D7D7D9DAD7D7D7D7DADBDADAD9DAD9DADADADBDCDBDBDEDEDCDCDCDCDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E37D3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3939393939393A3A3A39393A3A3A3B3B3B3C3B3B3B3C3C3D3D3F3F3D3D3E40404142424242424343434545454545464647474848484747474747464647474747474747474747444343434242424240403E3E3E3D3D3D3D3B3B3A393937373736363635353333333231313131303131312F2E2E2D2D2D2D2D2D2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828282727272727272726262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919171717171717171717171616161616151515151516141414141415151514141414141414141413131313131313131313131112121212121111111111111111111111111010101010101010101010100F0F8ABDBDBDBDBDBDBDBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000004A8F919396989B9DA0A3A6A9ACAFB2B4B8BBBDC1C4C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7BB000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C0D9DADADADCDCDCDDDEE0E0E0E1E3E4E5E5E7E7E8E9EBECECEDEFEFF0F0F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBF5C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B6C0C0BFC0C3C3C3C4C5C6C6C6C6C6C8C9CECECFD0D0D0D3D3D0D3D5D3D3D6D5D1D3D3D5D5D5D7D7D6D7D6D7D7D7D9D9D7D9D9D9D9D9D7D7D7D7D9D7D7D7BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C1C1C1C4C5C5C5C5C5C6C5C5C5C9C9CACACACACED0D1D3D3D5D6D7D7D9DADADADBDBDBDEDEDFDFE1E1E1E1E3E3E4E6E7E9E9EBEBECEFEFEFEFEEF1F1F1F1F1F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEBA4040404040403E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3A39393939393A3A3A3A39393A3B3B3C3C3C3C3B3C3C3D3D3F3F3F3E40404142424243444344454545474747494748484848494949484848484848494849474747474646464647474444434342424141403E3E3E3E3D3D3C3B3B3A3939373737363635353533333331313131313131312F2E2E2E2D2D2D2D2D2C2B2B2B2B2B2B2B2A2929292929292929292928282828282828282727272727272726262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191717171717171717171716161616161515151515141414141414151515141414141414141414131313131313131313131312121212121211111111111111111111111110101010101010101010100F0F4FBDBDBDBDBDBDBDBDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA200000000000000000000000000000000000000000000000000668F929497999C9FA1A4A7AAADAFB3B6B8BCBFC1C5C7CACDD0D3D5D8DBDDDFE1E4E6E7E9EBEDEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C1DADCDCDCDDDDDEE0E0E0E1E3E4E5E5E7E7E8E8E9ECECECEDEFEFF0F0F1F3F3F5F5F5F6F6F7F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBE3B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B8C0C5C5C8C6C8C9C9C9C9CACECECBCECFCFD1D3D3D6D6D7D9D9DADADADBDADADBDADBDBDBDBDEDEDEDCDCDEDEDCDEDEDFDEDFDEDCDBDADAD9D9D9DADBDBDADAD9D4B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C8C8C8C8C6C6C6C8C9C9CACACBCBCFCFD0D0D0D1D1D3D3D3D5D6D7D5D6D6D6D6D7D7D9D9DBDBDCDCDEDEDFE1E2E2E3E3E1E3E3E3E3E3E2E1E2E3E4E3E3E2E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1D5404040404040404040403E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3939393939393A3A3A39393B3B3C3C3C3C3D3C3D3D3F3F3F40404141424242424444444545474747494948494849494A4A4B4B4B4B4B4B4B4B4A4A4A4A4949494848484847464646464644444341424140403E3E3E3D3C3C3B3B3A3A38373736363635353333333131313131313131312E2E2E2D2D2D2D2D2C2B2B2B2B2B2B2B2A2929292929292929292928282828282828282727272727272727262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191717171717171717171716161616161515151516141414141414151515141414141414141414131313131313131313131312121212121211111111111111111111111110101010101010101010100F1ABDBDBDBDBDBDBDBDBDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000000088909294979A9C9FA2A5A8AAAEB0B3B6B9BCC0C2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F73B0000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C0DCDDDDDEDEE0E0E0E1E3E4E5E5E7E7E7E8E9EBECECEDEDEFF0F0F0F1F3F3F5F5F5F6F6F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBF5C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BCC6C9C8CACACACACACBCED0D1D3D3D3D3D5D7D7D6D9DADADBDBDEDCDFDEE1DFDFDFE1E1E1E2E1E3E3E3E3E3E3E2E2E2E3E3E3E3E2E3E4E4E3E3E2E1E1E1E1E2E1E1E1E1DBB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C6C9C8C9CACBCBCBCBCFD0D1D3D3D3D3D3D5D5D6D6D6D9D7DADADBDCDBDEDFE1E1E2E1E3E3E3E3E4E3E4E4E4E4E6E4E4E6E9E7E7E9E9E9E6E6E6E6E4E3E2E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E16D404040404040404040404040403E3E3E3E3E3E3E3F3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3A39393939393A3A3A3C3A3A3C3C3C3C3D3D3F3F3F3E404041424342424244454545474747474848494A4B4B494A4C4B4C4C4C4F4C4B4E4E4E4E4E4C4C4C4B4B494949494948474646454646444442424141403E3E3E3D3C3C3B3A3A39383736363635353533333331313131313131312E2E2E2D2D2D2D2D2C2B2B2B2B2B2B2B2A2929292929292929292928282828282828282727272727272726262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191717171717171717171716161616151515151516141414141414151515141414141414141413131313131313131313131112121212121211111111111111111111111010101010101010101010100F8ABDBDBDBDBDBDBDBDBDBDBDBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23000000000000000000000000000000000000000000000000178E919396989B9DA0A2A6A9ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F76C00000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3DEDEE0E0E0E1E3E3E4E5E5E5E7E7E8E8E9EBECECEDEFEFF0F0F0F1F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBE3B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BDC5C4C5C5C6C6C6C9C9C9CACACACECECECFD0D0CFD0D0D1D5D5D5D5D5D6D6D7D9D9D7D7D7DADADBDBDEDFDFDFE1DEDEE1E1E1E2E2E1E1DFDEDEE1E1E1E1DEDEDFE1E1E2E1E2E2D3B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C6C8C9CACBCECFD0CFCFD0D1D1D3D5D7D7D9D7D9DAD9DADADCDBDBDBDBDCDEDFDEDFE1E1E2E3E4E4E6E6E6E6E6E6E6E4E6E7E7E7E9E9EAE9E9E9E7E7E7E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEA04040404040404040404040404040403E3E3E3E3E3E3F3F3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3939393A3A3A3A3C3C3C3C3C3C3D3D3E3F403E3E40414242434344444545474747484948494A4A4B4C4C4C4D4E4E4E4E5050505050505050504F4F4F4E4E4D4B4B4B4B494948484745454545464342424241403E3E3E3C3C3C3B3A3A383737363635353535333331313131313131312E2E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2A2A29292929292929292928282828282828282727272727272727262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414141515151414141414141414131313131313131313131311121212121212111111111111111111111110101010101010101010100F4FBDBDBDBDBDBDBDBDBDBDBDBDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED00000000000000000000000000000000000000000000000000388F929496999C9EA1A4A6A9ADAFB2B5B8BBBEC1C4C7CACDCFD2D5D7DADCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7A700000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4E0E0E0E1E3E3E4E5E5E5E7E7E7E8E9EBECECECEDEFEFF0F0F0F1F3F3F5F5F5F5F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBF7D3B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BBC2C5C5C5C5C5C6C8C6C8C9C9C9C8C8C9C9CACACACBCBCBCBCACACBCBCBC9C9CBCBCECECECFD0D0CFCFCFD0D1D1D3D5D5D6D5D6D6D6D5D3D1D0D0D1D3D1D0D0D0D0D0D0D0CFD0CFCFCFCEC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C4C4C4C4C5C5C3C3C3C5C5C5C5C5C6C8C6C8C8C8CACACACACBCBCBCBCECECFCFD0D3D1D3D5D5D3D3D5D7D9DADADADADADADADADADADADAD9D9D7D7D9D9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFCD40404040404040404040404040404040403E3E3E3E3E3E3E3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A393A3A3A3A3C3C3D3D3C3C3D3D3E4040404040404343434445474547474848494949494B4C4C4C4E4E4E4E50505051515152525050505050505050504E4E4E4E4E4D4D4B494949484745454544434342424040403E3D3B3C3C3B3A393837373635353535333332313131313131312F2E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272727262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414141515151414141414141414131313131313131313131311121212121211111111111111111111111110101010101010101010101ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000005B90929497999C9FA2A5A8AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7E40000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4E1E3E3E4E4E5E5E7E7E7E7E8E9E9EBECECECEDEFEFF0F0F0F1F3F3F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBEEC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B7BFC4C4C4C5C6C6C5C5C5C6C5C5C5C5C6C6C6C6C8C6C6C6C6C6C8C8C9C9CACACACACBCFCFCECBCBCBCECECFD0D3D1D0D1D1D0D0D0D0CFCFD0CFD0D0D0D1D3D5D5D5D5D5D6D5D5D6D5D6D6D5D5D5D1BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CACACACACAC9C9C9C9CACBCBCBCECECBCECFD0D1D1D1D3D3D3D1D5D5D6D6D6D7D7D6D7D7DADADAD9D9D9DADADCDADADADBDADBDBDCDCDEDBDBDBDBDBDBDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E161404040404040404040404040404040404040403E3E3E3E3E3E3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3A3A3A3C3C3C3D3D3D3C3D3E3E40404040424343444445474647474849494A4B4C4C4C4E4E50505151515252525252535353535352525252525252524F50504F4E4E4E4D4B4B49494948474545444443424240403E3E3C3B3C3C3B39383737363635353535333231313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414151515141414141414141414131313131313131313131312121212121211111111111111111111111110101010101010101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD82200F0F0F0F0F0F0F0F0F0F2082BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A000000000000000000000000000000000000000000000000007D919395989B9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CBCED1D4D6D9DBDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7280000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4E4E4E5E5E5E7E7E7E7E8E8E9EBECECECEDEDEFEFF0F0F0F1F3F3F3F5F5F5F6F6F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBFAE7BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B7C0C9C9C9C9C9C9CACBCECED0D0CFD0D1D1D1D0D0D0D0D0D3D3D3D5D5D5D3D5D6D7D7D7D7D9D9D7D7D9DADADADADBDADADADADCDCDBDADADADBDBDEDBDBDADBDADBDADBDBDCDBDBDADBDBDADADADBDBDBDAD9BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C9CACACACECBCBCECECECFCED0D0D1D1D5D6D6D7D9D7D9D9D9DADBDADADADADADADEDCDEDEDEDFE1E1E1E2E1E1E1E2E2E2E3E3E3E3E3E4E4E3E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDC934040404040404040404040404040404040404040403E3E3E3E3E3E3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3B3B3B3A3A3A3A3C3C3A3C3C3D3D3D3D3E3D4040404042434343434444454747484949494A4C4C4C4D4F4E505151535353535353535454545454565554545454535353535252525250504F4E4E4D4B4A494948474645454443414240403E3C3C3B3C3B39393837373635353535333231313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272727262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717171616161616151515151514141414141415151514141414141414141413131313131313131313131212121212121111111111111111111111101010101010101010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB55D130F0F0F0F0F0F135DB5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF230000000000000000000000000000000000000000000000000B8F919496999B9EA1A4A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F75900000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C5E5E5E5E7E7E7E7E8E8E9E9EBECECECEDEFEFEFF0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFADFBEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C2CACED0D0CED0D0D1D3D3D3D3D3D3D3D5D6D7D9D9DADADBDADBDBDADADADADADADBDBDADBDBDBDBDCDCDCDEDEDBDBDCDCDBDADADADADADADBDBDADADBDBDBDBDBDBDEDCDBDEDEDBDBDBDCDBDAD9D7D7D7D7D7D9D7D4B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C6C8C6C8C9C9CBCBCBCECED0CECECFCFCFCFD1D0D1D5D5D5D5D6D5D5D6D9D9D7D9DADBDBDBDCDEDCDBDBDCDEDEDEDEDFDFDFE1E1E1E3E3E2E2E1E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDECD42424242424242424040404040404040404040404040403E3E3E3E3E3E3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3C3C3C3C3C3D3D3D3D3E404040404042434343434445464647494B4A4C4C4C4C4F505151525353535355555556575656565757575757565656565656565454535352525252504F4E4D4B4C4A49494845454544434142403E3E3C3B3B3C3B393837373636353535333232313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919171717171717171717171616161616151515151614141414141415151514141414141414141313131313131313131313111212121212121111111111111111111111101010101010101010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9F390F0F0F0F399FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000002E90929497999C9FA1A4A7AAADB0B3B6B9BCBFC2C5C7CACDD0D3D6D8DBDDDFE1E4E6E7E9EBEDEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F79E000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C5E5E7E7E7E7E8E8E9E9EBECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFADFBEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7BDC6CACACACBCBCBCBCBC9C9CACACACACBCECECECFCFCFD0D0D1D1D1D1D0D0CFD0D0D3D3D3D5D6D6D5D7D9D9DBDBDBDBDADCDCDCDCDBDCDCDEE1E1E2E2E2E1E1DFE1DFDFDEDEDEDEDEDEDFDEDBDADADADBDBDADBDADADADAD9D2B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CECECECED0CECECFCFCFD0D0D0D1D1D0D0D0D0D1D1D5D6D7D7D7D7D9DADADADADADADADADADBDBDBDCDADCDEDEDEDEDEE1E1E1E1E1E1E2E3E4E3E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADA614242424242424242424242404040404040404040404040403E3E3E3E3E3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3B3B3B3C3C3C3C3D3D3D3D3D3D3E4040404041434343444647484648484B4A4C4C4D4E4F5151535353535355555657585959595959595A5A5A5A5A59595959595957575655545353535252504E4D4E4D4C4A49494745454444434142403E3E3C3B3C3B3A3937373736353535353332313131313131312E2E2E2E2D2D2D2D2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919171717171717171717171616161615151515151614141414141415151514141414141414141313131313131313131313111212121212111111111111111111111111101010101010101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD82202082BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA20000000000000000000000000000000000000000000000000050919395989B9DA0A2A5A8ABAEB1B4B7B9BDC0C2C6C9CBCED1D3D6D9DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8D9000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C7E7E7E7E7E8E8E9E9ECECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAE2C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B6BDC7CACAC9C9C8C9CACAC9C9CAC9CAC9C9CACECBCBCECECFCECFD1D1D1D1D1D0D1D1D3D3D5D5D5D5D5D3D5D6D6D7D7D6D7D7D9D7D7D7D7D9D9D7D7D6D6D5D3D5D5D5D6D6D5D5D3D3D1D1D0D0D0D1D1D3D1D0D0D1D3D3D1D0D0D0D0CFD0C5B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9CECECECECFCECBCECFCFCFCFD0D1D3D1D3D5D5D6D7D7D7D9D7D7D7D9D9D7D9DADBDBDBDEDFDEDEDFDFDEDCDCDCDCDCDEDEDEDEDEDEDBDBDEDEDEDEDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDC9541414141414141414242424242404040404040404040404040403E3E3E3E3E3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3B3B3C3C3C3D3D3D3E3D3D3E3E4040404043434443444648484848494A4B4C4D4F51515153535355565758585859595A5B5A5B5C5C5D5D5D5D5D5D5D5C5C5B5B5B5A59595856565653535352504F4E4D4D4C4A494847454545434142403E3E3C3C3B3C3A3937373736363535353332313131313131312F2E2E2E2D2D2D2D2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171717161616161515151515161414141414141515151414141414141414131313131313131313131312121212121211111111111111111111111110101010101010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000000078919496989B9EA1A3A6A9ACAFB2B5B8BBBDC1C4C6C9CCCFD2D4D7D9DCDEE1E2E5E7E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F71E00000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C7E7E7E8E8E9E9EBECECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAE7CBB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B8BFC7CAC9C9CACACBCBCBCECBCFD0CFD1D1D1D1D1D1D3D3D3D3D1D5D3D1D1D3D5D6D6D6D6D7D9D9DAD7DADADCDCDCDEDBDCDEDEE1E1E1DEDEDEE1DEE1E1E1E1E1E1E2E3E6E6E4E3E3E4E4E4E4E6E6E6E6E4E4E6E4E3E3E3E3E4E4E3E3E3E3E2E2E1CAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CACBCBCBCACACBCECECECBCECECECFCECBCECECECED0D0CFD0D0CFCFD0D0D0D1D0D1D0D1D1D1D3D3D1D0D0D0D0D0D0D0D0CFCFCFCECECECECED0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADACA414141414141414141414142424242424040404040404040404040403E3E3E3E3E3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3C3C3C3D3D3E3E3F3E3E40404041434344444446464848494B4A4B4C4E4F51515355535356575859595B5B5B5B5D5D5D5E5F5F5F5F5F5F5F605F5F5F5E5E5E5D5D5C5B5B5959595656545352504F4F4D4D4C4A484847454544434142403E3E3C3B3C3A3A38373737363535353332313131313131312F2E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414151515141414141414141414131313131313131313131312121212121211111111111111111111111010101010101010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0000000000000000000000000000000000000000000000000B90929497999C9FA1A4A7AAADB0B3B6B9BCBFC1C5C7CACDD0D3D5D8DADDDFE1E4E5E7E9EBECEEF0F1F3F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F75900000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCC2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C7E7E8E8E9E9EBECECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F3D9BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7BBC2CBCACBCBCECECBCBCACACECECBCECBCECECECFCFD0D0D0D0D1D3D3D3D3D5D3D3D3D5D6D6D6D7D6D7D7D9DADAD7D7D9DADADCDCDFDFDFDFE1DEDEE1E1E1E2E2E1E1DFDEDFE1E1E1E1E1DFE1E2E3E4E3E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E2E2E3E3C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCD9DBDCDEDEDEDCDCDCDBDCDEDEDCDCDCDCDEDEE1DEDFE1E1E1E3E3E3E4E6E6E4E6E6E4E3E3E6E6E6E6E6E9E7E7E7E6E7E7E9E9E9E9E9E9E9E9EAEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EF6641414141414141414141414141424242424040404040404040404040403E3E3E3E3E3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3D3C3C3D3D3E3E3F3F40404040414243444444454848484B4A4C4D4F4E515153555556565858595B5B5B5C5F605E5F61626362636362636262626262626260605F5F5E5E5B5A5A5959595554535152504F4D4D4C49484845454544434140403E3E3B3B3B3A39373737363535353332323131313131312F2E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414151515141414141414141414131313131313131313131112121212121211111111111111111111111010101010101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9000000000000000000000000000000000000000000000000002E919396989A9DA0A2A5A8ABAEB0B4B7B9BDC0C2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F79E0000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCC2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C7E8E8E9E9EBECECECECEDEDEFEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9E4C9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B8BAC3C8C5C6C8C9C9C8C6C6C6C6C6C5C8C9C8CACACBCBCECECECECECECFD0CECFCFD0D1D1D3D3D0D0D1D1D1D1D1D0D0D3D3D3D3D5D6D5D5D5D5D5D6D7D9DADADADADBDAD9DADAD9DADBDAD9D9D9D9D9D9DAD9D9D9D7D9D9DADBDBDADADADADADAD9D9D7D7D9D7D7D9D9D9BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8D3D3D3D5D7D7D7D7D9D7D7DADADADADADADAD9D7D9DBDBDBDBDBDBDCDEDFE1E1E2E2E2E2E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E6E6E7E9EAEAEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1A0414141414141414141414141414141424242424040404040404040404040403E3E3E3E3E3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3E3D3D3D3D3F3E3F4040414040414243444646484848494B4B4D4F4F515153555556585859595B5B5D5F5F616162636464646666666666666766666664646462626262605F5E5D5C5A5A59595555545152504F4D4D4B494847454545434140403E3E3C3B3B3A39373737363535353532323131313131312F2E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191717171717171717171616161616151515151514141414141415151514141414141414141313131313131313131313111212121212111111111111111111111111101010101010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000000050929496989B9EA1A3A6A9ACAFB2B4B8BBBDC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8D9000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCE5DEDEDEDEDDDDDDDBDBDBDBDADADADADAD9D9D8D8D8D8D7D7D7D7D7D6D5D5D5D4D4D3D3D3D3D3D2D0D0D0D0D0D0D0CFCFCFCFCFCFCECECECECECECECECECECECECECECECECFCFCFCFCFCFD0D0D9E8E9E9E9EBECECECEDEDEFEFEFF0F0F0F1F1F3F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F7E2C8B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8BEC6D1D1D1D1D3D5D5D6D6D6D7D7D6D7D9D7D6D6D7D6D6D7D7D7D7D7D7D7D7D9D9D9D9D7D7D7D7D6D5D5D6D7D7D7D7D7D6D6D9D9D9D9D9D9DBDADADBDBDADADADBDADAD9D9D7D9D7D9DADADADADADADBDCDBDEDBDADBDEDEDEDCDEDBDCDBDADBDCDCDCDCDADADAD9D7D7D7D5D5D5D0B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B397848485868688888B8C8E8E90919294959797999C9C9C9E9EA2A2A4A7A7A9AAACADADB0B1B3B3B3B5B5B7B8B8BBB8BBBCBCBBBDBDBDBDBDBEBEC0C0C0C1C1C1C1C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C2C1C1C1C1C1C1C2C1C1C2C2C2C2C2C1C1C2C5D3D3D3D5D6D6D7D7D7D6D6D6D7D7D7D7D7DADADADADBDCDEDEDEDEDEDCDEDCDEDEDCDEDEDFDFDEE1E1E1DEDEDEDFDFDFE1DFDFE1DFDEDEDEDEDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DECD42424242424141414141414141414141414142424242404040404040404040403E3E3E3E3E3F3F3F3F3F3D3E3E3E3E3E3E3E3E3D3D3C3C3C3E3E3E3E3D3F3F3F40404143424243444445464948484A4A4D4D4F5152535355565859595C5B5D5D6061626364656466676769696A6A6868696A6A6868686666666664636262625F5E5D5C5A5A595555545252504F4D4D4A4948474545444342403E3E3C3B3B3B3A38373736363535353232313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2A2A292929292929292929282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717171616161616151515151614141414141415151514141414141414141313131313131313131313121212121212111111111111111111111110101010101010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000000000000000000000000000000000000000000000000079929497999C9FA1A4A7AAADB0B3B6B9BCBFC1C5C7CACDD0D3D5D8DADDDFE1E3E5E7E9EBECEEF0F1F2F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F72800000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFAFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F1F0F0F0EFEFEFEDEDECECECEBE9E9E9E8E8E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E7E7E7E7E7E7E8E8E9E9EBECECECECEDEDEFEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F7E1C8B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BEBFC3CBCECECECECFCFCFCFD0CFCECED0D1D1D1D0D1D1D0D0D1D1D1D3D3D5D3D1D5D5D6D7D6D3D5D5D5D5D7D7D7D6D6D6D7D7D7D9DAD9D9D9D9D9DADADADBDBDBDADADBDCDCDEDEDEDCDEDEDCDEDEDEDEDEDEDEDEDEDFDEDFDFDFDFDFDFDFDFDEDEDEDEDEDBDBDBDCDEDCDCDCDCDEDEDEDBDEDED6B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3877273757575777A7B7C7C7E818286888A8E8F929297999B9E9FA2A5A7ABACB0B2B5B6B8B9BBBCBFBFC0C1C3C4C5C6C8C9CACBCACACECFD0D0D0D1D3D5D3D3D3D3D3D5D3D5D5D7D7D9D9D9D9D9D9D9D7D9D9DAD9D7D7D7D7D7D9D7D9D7D7D9D9DADADADADADADADADADBDBDBDADCDEDEDCDCDCDEDEDEDBDCDCDEDEDEDEDCDBDCDEDEDEDEDEDEDEDEDEDEDEDEDEDCDCDEDEDCDCDBDBDADBDBDBDBDBDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D36D4242424242424242414141414141414141414142424240404040404040404040403E3E3E3E3E3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3C3E3E3E3F3E403F3F404141434243434444454849484B4A4D4D4F5153535555565759595C5B5D606162636465666969686B6B6C6B6B6D6D6B6C6C6B6B6B6C6C6A696868666766636361605F5E5D5C59595655545252504F4D4C4A4848454545444340403E3E3C3B3B3A38373737363535353232313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717171616161615151515151614141414141415151514141414141414141313131313131313131313121212121212111111111111111111111110101010101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000011919396989A9DA0A2A5A8ABAEB0B4B7B9BDC0C2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F76C00000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F1F0F0F0EFEFEFEDEDECECECEBE9E9E9E8E8E7E7E7E7E7E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E7E7E7E7E7E8E8E9E9EBECECECECEDEDEFEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F5E4D3BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B8BCC3CBD7C9C3C3C3C1C1C3C3C3C4C4C4C4C4C4C5C5C6C9C8C8C9CACACACACACACBCECECED0D0CECFCFCFD0D0D1D0D0D0D1D0D0D0D0D0D1D3D1D3D3D3D3D1D1D3D5D7D7D7D7D7D7DADADADAD7D7D9D9D9D9DADBDBDBDAD9D9D7D6D5D5D5D5D6D7D7D9DADAD9D7D9DAD9D9D9D7D7D9D9DADAD7D7D7D7D9D9D7CBB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6F71727475757778797B7E818286878A8D8E929396999B9E9FA2A5A7A8AAACB0B1B3B8B9B9BDBFBFBFC1C3C5C9C9C9CACBCBCBCECECECECECECECBCBCECECECECECECFCECECBCBCBCACBCBCBCBCECECFCFD0D0D0CFCFD0D0D3D0D3D5D6D6D6D5D7D7D7D7D7D7D7D9D9D9D9D9D9DADADAD9DADADADADADBDBDBDBDBDCDBDBDAD9DADAD9D9D9DADBDADADADADADCDEDCDBDBDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEA242424242424242424242424141414141414141414142424240404040404040404040403E3E3E3E3F3F3F3F3F3D3E3E3E3E3E3E3E3E3D3D3E3E3E3F3F40403F404141434243444445474848494B4C4E4F4F52535556575958595B5C5D606162636566676A6A6B6D6B6E6F6F6F6F707070706F6F6F6F6F6F6D6B6B6A69696866666262625F5F5D5B59595655535152504F4D4C4948474545444342403E3E3C3B3B3A38373737363535353232313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525252425252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414151515141414141414141414131313131313131313131112121212121211111111111111111111111010101010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0000000000000000000000000000000000000000000000000034929496999B9EA1A4A6A9ACAFB2B5B8BBBDC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8A8000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F1F0F0F0EFEFEFEDEDECECECEBE9E9E8E8E8E7E7E7E7E7E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E7E7E7E7E7E8E8E8E9E9EBECECECEDEDEFEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F3DFCBBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BBC0C9D2D7D9DAD9DEE9D9D1D1D3D3D1D1D5D5D3D1D0D0D1D1D3D3D3D3D5D5D1D1D5D6D6D6D7D7D7D6D5D6D6D6D7D7D9D7D6D7D7DADAD9D7D7D7D9D9DBDADADADAD9DADADADADBDADADADBDBDADBDBDCDCDEDCDBDEDEDEDFDEDEDEDEDEDCDEDEDEDEDEDEDEDEDEDFDEDFDFDFDFDFDFDFDFDEDEDCDEDCDBDBDADBDCDBDBDBDBC7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3877273737676787C7B7F81838686888C8E90929396979B9EA1A2A5A7A8ACAEB0B2B3B6B8BCBFBFC1C4C5C5C5C6C8C9C9C9CACACBCECECFD0D0D0D1D1D1D3D5D5D5D6D7D7D9D7D7D6D7D7D7D7D7D7D9D9DADBDADBDBDADADADADADBDADAD9D7D7D7DADADADADADBDBDCDEDEDCDEDEDEDEDEDFDFDEDEE1E1E1E1DFE1E1E1E1DFDFDFE1DFE1E1DEDEDEDFDFDFDFDEDFDFE1E1DEDEDEDEDEDEDEDEDCDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5CA4842424242424242424242424242414141414141414141424242424040404040404040403E3E3E3E3E3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3F404040404041424242434445474748484A4C4C4F4F515353565658595B5B5D5F6061626466676A6A6B6D6E6F7171717372727373727373737372727271716F6F6D6C6A6A696665626162605F5E5B5A5756545351504F4D4C4A4848474545434240403E3C3B3B3A38383737363535353232313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414151515141414141414141413131313131313131313131112121212121111111111111111111111111010101010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000005C929497999C9FA1A4A7AAADB0B3B6B9BCBFC1C5C7CACDD0D3D5D8DADCDEE1E3E5E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8ED000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F1F0F0F0EFEFEFEDECECECECEBE9E9E8E8E7E7E7E7E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E7E7E7E7E8E8E9E9EBECECECECEDEFEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F3E3D3C6B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBC5CDD6DBE2E2E3E4E4E3E4E7E6EBF1E2DCDCDCDEDCDEDCDBDBDBDCDCDBDCDBDCDBDCDBDBDADADADAD7D7D9DAD9D9D9D7DAD7D7D7D6D9D7D6D7D9D9D9D9DADADBDADBDCDCDCDEDEDEDEDCDCDCDCDEDCDCDEDEDEDEE1E1DFDFE1E1E1DEDEDEDEDEDEDEDEDEDEDEDBDBDEDEDEDEDEDEDEDEDBDEDEDEDEDEDEDCDBDBDBDEDEDCDAD9D9DADADCDABEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887273757677797C7E818183888A8E909293979B9C9FA2A5A8ACAEB0B2B5B6B9BCBDC0C4C5C6C8C9CBCBCECFD0CFD1D3D3D1D3D5D6D6D7D7D7D7D7DADADADADAD7D9D9D7D7D7D7D7D7D9D9DADADADAD9D9DAD9D7D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D7D7D7D7D9D7D7D7D7D7D6D6D7D7D6D7D7D7D9D9DADADAD9D9DADBDBDBDCDEDEE1DEDEDEDEDEDFDEDFDFE1E1E2E3E2E3E3E2E2E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E179424242424242424242424242424242424141414141414141424242404040404040404040403E3E3E3E3E3F3F3F3F3D3E3E3E3E3E3E3E3F3E3E3F404040404142424243444645474848494A4C4E4F4F52535556575A5A5B5D5F6062646567696B6C6D6E6F7172727275757575767676767676757574757373737272706F6D6C6A6A6666636262605F5E5A5A5755545252504F4C4C4948474545444340403E3E3C3B3B3A383737363535353232313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262625252525252525252425252525252424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515141414141414151515141414141414141413131313131313131313131212121212121111111111111111111111101010101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1900000000000000000000000000000000000000000000000000869396989B9DA0A2A5A8ABAEB1B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F73B00000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F1F0F0F0EFEFEDEDECECECEBE9E9E8E8E7E7E7E7E5E5E5E5E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E5E5E5E5E7E7E7E7E8E8E9E9EBECECECEDEDEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F8ECDFD5C9C1B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BFC7CDD7E2F0F0F0F0E5D9DAD9D6D9DAD9D7DADADEE7D6CFCFCECBCBCECECFCFCECECECECFCECECECFCFCFCFCFD0D0CFCFD1D0D1D3D1D1D3D5D1D1D3D5D7D7D7D7D7D9D9D9D9D7D9D7D7D7D7D6D6D7D7D7D7D6D6D7D7D7D6D6D6D5D6D6D6D7D7D7D7D7DADADAD7D7D9DADBDADBDCDFDFDFDEDFDEDEDFE1DFDFE1DFDFDFDFDFE1E1DFDEDFDEDEDCDCDEDEDEDEDCBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38670727475777A7B7E7F8184888A8F909296999B9EA2A5A7AAACB0B1B5B5B9BBBDC0C1C4C5C8C9C9CBCECED0D0D3D5D5D6D7D7D7D7D7D9D9D7DADADAD9DADADBDADBDBDBDBDBDBDBDADADADADADADBDADBDADADAD9D7D7D5D5D5D6D7DAD9D9D7D7D9DADADADAD7D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D7D7DADADADBDBDADADADADBDADADBDBDBDADADADADAD9D7D7D7D7D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEB64242424242424242424242424242424242424141414141414142424242404040404040404040403E3E3E3E3F3F3F3F3F3E3E3E3E3E3E3F3F3F3F3F40404141424242434446454748494A4C4C4E5052535557575A5A5B5D5F6264646667696C6D6E707172737375757779787979797A7A7A79797979777778757473727271706F6F6A696866666262605F5D5A5A5855535152504D4C4A48484545444340403E3E3C3B3B3A383737363635353332323131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262625252525252525252525252525252424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919191717171717171717171616161616151515151614141414141415151514141414141414141313131313131313131313121212121212111111111111111111111110101010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000000017929497999B9EA1A4A6A9ACAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8810000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0F0EFEFEDEDECECECEBE9E9E8E8E7E7E7E7E5E5E5E4E4E4E3E3E3E3E1E1E1E1E1E1E1E1E1E1E3E3E3E3E4E4E4E5E5E5E7E7E7E7E8E8E9E9EBECECECEDEFEFEFF0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F0E5DACDCDC1C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C0C0C6CAD6DBE2EEF0F0F0F0F0F0F0F0F0F0EDE3E4E7E9E7E7E6E6E7E7EEF3E3DFDFDEDFE1DFE1E1E1E1E1E1E1E1DEE1E1E2E1E2E2E2E3E3E4E4E4E3E4E6E4E4E4E4E3E3E3E4E4E4E4E4E6E6E6E6E7E7E6E6E7E6E7E6E4E4E6E6E6E4E6E4E6E4E6E4E4E3E2E2E2E1E1E1E1E1DFDFDEDFDEDEDCDCDEDCDBDCDCDCDCDCDEDEDFDEDEDEDEDEE1DFDFDFDEDEDEDEDEDCDCDCDEDEDEDFDFDEDAB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3877273757775787B7D7F818385898A8D8F909394999B9B9EA2A5A8AAACB0B2B6B8BBBBBFC1C5C5C8C9CACACBCED1D3D3D1D3D3D7D6D9DADADAD9DADBDEDEDEDEDCDCDEDFDFDFE1E1E1E1DFDFE1DFDEDFDEDFE1E1E1DFDFE1DFDFDEDEDCDEDEDEDCDCDEDEDEDEDCDCDCDEDEDEDEDEDEDCDEDEDCDEDCDEDEDEDFDEDFE1E1E1DEDEDFDEDEDCDCDBDBDBDCDCDCDCDCDBDCDBDBDBDBDBDBDCDCDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3584242424242424242424242424242424242424241414141414141424242424040404040404040403E3E3E3E3E3F3F3F3F3D3E3E3E3E3F3F40403F3F404141424242434446474748494C4C4C4F5153545657595A5C5B5F60626467676A6A6D7071727375757878797A7C7C7C7D7C7D7D7D7D7E7D7D7C7C7B7979787775757272706F6F6C696966666262605F5B5A5956545352504D4C4A49484545454341403E3E3C3B3B3A383737363635353532323131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252524242423232323232323232323232322222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717171616161615151515151614141414141415151514141414141414141313131313131313131311121212121212111111111111111111111110101010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000459395979A9C9FA2A5A8AAADB0B3B6B9BCBFC2C5C7CACDD0D3D5D8DADDDFE1E3E5E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8C60000000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F0F0F0EFEFEFEDECECECEBE9E9E8E7E7E7E7E5E5E5E4E4E3E3E3E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E3E3E3E4E4E5E5E5E7E7E7E7E8E9E9EBECECECEDEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F7F7F7F6F6EAE7DED8D8D8D6CDCCCCCCCCCCCCCBCBCBCBCBCBD1D7D7D7DFE5E5E7F3F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F3F3F3E8DBDBDEDEDEDFDEDEE1E1E4EEDED6D7D7D7D9DAD9DADBDADADBDBDCDBDBDCDEDBDBDCDEDEDEDFE2E2E1E1E1DEDFDFE1E1E1E1DFDEDEDCDCDCDCDBDEDCDCDEDEDEDEDCDEDEDEDEDEDEDEDEDEDEDEDEDBDEDEDBDEDEDEDEDEDBDBDBDBDCDCDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDADBDCDEDEDEDEDEDBDBDBDBDADADADAD7D7D7D7D7D7D7D2B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38875757577777B7C81818586888C8F909497999C9EA2A4A7AAACB0B1B3B6B6BBBDBFC3C3C5C5C8CACBCBCFCED0D1D1D0D1D3D3D3D5D5D5D5D5D6D7D9D9D9D7DADADADADBDCDCDCDADBDBDBDCDCDCDBDBDADBDADADADBDBDBDADBDADADADCDEDEE1DFDFDFDEDEDFDFDEDFDFDFDFE1DFDFE1E1E1E1E1E1E1E2E3E4E4E3E4E4E4E4E4E3E4E4E3E3E4E4E6E4E6E6E6E6E7E6E7E7E6E7E7E6E6E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E39144444444444242424242424242424242424242424241414141414141424242404040404040404040403E3E3E3E3F3F3F3F3F3E3E3E3F3F3F40413F3F4141424243444646474748494C4D4F4F5254555758595B5C5F5F626365676A6C6D6F717275757879797C7E7D7E8081818182828282828282807F7E7E7E7D7B79797777757372706F6C6A69666362625F5D5A5A58555351504E4D4C4948474545434140403E3C3B3B3A383737363635353532323131313131312E2E2E2D2D2D2D2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252524242423232323232323232323232322222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717171616161615151515151614141414141515151414141414141414131313131313131313131311121212121211111111111111111111111010101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000000699396989B9DA0A2A5A8ABAEB1B4B7BABDC0C2C6C9CBCED1D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F71300000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0F0EFEFEDECECECEBE9E8E8E7E7E7E5E5E5E4E4E3E3E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E3E3E4E4E5E5E5E7E7E7E8E8E9EBECECECEDEFEFF0F0F0F1F1F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3ECE2E1E1DFE1DFDFDFE1DFE4EEDCD6D7D7D7D7D6D7D7D6D5D5D5D5D3D1D3D1D1D1D3D3D5D5D6D7D6D7D7D7D9DAD9D9D7D7D7D9D9D9D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D5D5D5D5D3D1D0D3D3D3D3D3D3D5D5D3D3D1D3D3D3D5D5D5D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D1D0D0D0D0D0D0D0D0D0D0D0D0D0D1D3D1D1D3D3D3D3D1C5B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B386717273757677787B7C7E81838687898E909396999C9FA1A4A5A8AAACAEB1B5B5B9B9BFBFC0C1C4C4C5C6C9CBCBCECFCFD0D3D3D6D5D7D7D6D6D6D7D7D7D6D7D7D9D9D9DADADADADADADAD9D9D7D9DADADBDBDBDBDCDBDADAD9D9D9D7D9D9D9D7D7D7D7D7D6D7D7D6D5D5D6D7D7D7D6D6D6D5D6D5D6D6D6D6D6D6D6D6D6D5D5D6D5D6D7D7D7D9D9D7D7D7D9DADBDBDBDBDBDBDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1CD4444444444444444444242424242424242424242424242414141414141414242424040404040404040403E3E3E3E3E3F3F3F3F3D3E3F3F3F3F41414141414242434446474747484A4C4D4F5052545657595C5C5F5F606465666A6C6E7071727577797A7D7D7D82828283868685858585878585858585858383807F7E7E7B797877757372706F6C6967676361605F5D5A59585452524E4D4C4A48484545434140403E3C3B3B3A383737373635353532323131313131312E2E2E2D2D2D2D2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252524242423232323232323232323232322222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191917171717171717171716161616161515151515161414141414151515141414141414141413131313131313131313131212121212121111111111111111111111101010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30000000000000000000000000000000000000000000000000006929497999C9FA1A4A6A9ACAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8590000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0F0EFEFEDECECECEBE9E8E7E7E7E5E5E5E4E4E3E3E1E0E0E0E0E0DEDEDEDEDDDDDDDDDDDDDDDDDEDEDEDEE0E0E0E0E0E1E3E3E4E4E5E5E7E7E7E8E8E9EBECECECEDEFEFF0F0F0F1F3F3F3F5F5F5F6F6F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F7F7F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E8DBDCDCDBDEDCDCDEDEDEE3ECDBD5D5D3D3D1D1D3D5D6D7D7D7D7D9D7D6D7D7D6D7D9D7D9DADBDADADAD9D9DADBDCDBDBDCDEDEDEDEDEDCDBDBDCDEDEDCDEDFDFDFDFE1E1E2E2E2E2E1E1E1DFDFDFDEDFDFE1E1DFE1E1E1DFDFDFE1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDEDEDEDCDEDEDEDEDEDEDCDEDEDEDCDCDEDFDFDEDFDFC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A777779797C7E81818386898A8D8F9094979B9C9FA2A5A7ABB0B1B6B9BDC0C3C6C9CED0D1D3D5D9DADCDEDEDEDEE1E1E1E3E3E3E3E6E6E4E7EAEAE9E9E9E9EAEAEBEAEBEBEAEAEBE9E9E9E9E9E9E7E9E7E7E7E7E7E7E6E6E6E6E7E6E7E9E9E9EAEAEAEAE9E9E7E6E6E6E6E6E6E4E6E6E4E3E3E4E4E4E4E4E3E3E2E2E2E2E2E2E3E2E2E2E2E1E1E1E1E1DFDFDFDFDFDFDFE1E1DFE1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E36D444444444444444444444442424242424242424242424241414141414141414242424040404040404040403E3E3E3E3F3F3F3F3F3F3F3F3F4141414241424243444747474B484A4C4E5050545556575A5C5C6060646468686C6D7072747578797C7E7E82828585858588888889898989898989898988878784848382807D7B7B79787573726F6F6C69676763625F5E5A5A58555351504D4C4C48484545444140403E3C3B3B3A383737363635353532323131313131312E2E2E2D2D2D2D2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252524252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151516141414141414151515141414141414141413131313131313131313111212121212121111111111111111111111101010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D000000000000000000000000000000000000000000000000002F9395989A9D9FA2A5A8AAADB0B3B6B9BCBFC2C5C7CACDD0D3D5D8DADDDFE1E3E5E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8A8000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F5F5F5F3F3F3F1F0F0F0EFEFEDECECECE9E9E8E7E7E7E5E5E4E4E3E1E0E0E0E0DEDEDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDEDEDEE0E0E0E0E1E3E4E4E5E5E7E7E7E8E9EBECECECEDEFEFF0F0F0F1F3F3F5F5F5F5F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5ECDEDEDEDBDBDADADADBDCE1ECDCD5D3D6D7D7D9D9D9D9D7DADADADAD9DADADCDEDEDFDFDFDEDEDCDEDCDEDCDCDCDCDCDCDEDCDADADADADADADADBDBDBDADADADCDEDEDEE1E1E2E1E2E2E3E4E6E6E4E4E6E6E6E6E6E7E7E7E6E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E3E3E2E3E2E1E2E2E2E1E2E2E2E1E1E1E1E1E1E1E1DFDEC2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F7173757577787B7C7E818386898C8E90929697999B9EA2A4A7AAACAEB1B3B6BBBDBFC1C3C5C6C9CACBCED0CFD0D0D1D3D3D5D6D7D7D7D7D6D7D7D7D9DBDBDBDBDBDBDEDEDCDBDBDBDBDADADADADADBDADBDCDCDEDCDEDFDFDEDEDFDFE1E1E2E1E1E1E1E1E1DFDEDEDCDBDBDBDADADADAD9D9D7D7D7DADADAD9DAD9D7D7D7D7DAD9D9D9D9D7D9D9DADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9A64444444444444444444444444442424242424242424242424241414141414141424242404040404040404040403E3E3E3E3F3F3F403E3F3F4141414242434343444747484A4A4A4C4F5052545657575A5D5F5F636467686A6D707274757A797D7E808284858588888B8B8D8D8D8F8F8F8F8F8F8F8C8C89898A8786848484807F7C7B79787573726F6C6A696766615F5F5B5A59565452514E4D4C49484745454341403E3E3C3B3A383737373635353532313131313131312E2E2E2D2D2D2D2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151516141414141414151515141414141414141413131313131313131313111212121212111111111111111111111110101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000589496989B9DA0A3A6A9ABAEB1B4B7BABDC0C3C6C9CBCED1D3D6D9DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8E40000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEFEDECECECE9E8E8E7E7E5E5E4E4E3E1E0E0E0DEDEDDDDDCDCDCDCDCDADADADADADADADADADADADADCDCDCDCDCDDDDDEDEE0E0E0E1E3E4E4E5E5E7E7E8E9E9ECECECEDEFEFF0F0F0F1F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6E9DBDCDCDADADBDEDFDEE1E6F1E1D9D7D9DADADADBDBDBDBDBDBDBDBDBDEDCDCDBDCDBDBDBDBDEDEDEDEDEDEDCDBDAD9DADAD9D9D9DADADADADADADADBDCDBDADADADAD9D9D9DADADADBDBDBDADBDEDEDEDEDEDEDEDEDEDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDBDBDCDCDCDEDBDBDBDBDBDCDEDEDEE1DFE1DFE1E1E1E2BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38875777778787B7D7E81828489898C8D90929497999B9E9FA2A5A7AAACAEB1B3B5B6B9B9BDC0C4C5C8C9CACACACECFD0D0D0D3D3D3D3D3D5D3D5D3D1D3D3D3D3D5D5D5D6D7D7D7D7D9D9D9D9DADADAD9D9D7D7D6D7D7D7D7D9D9D9D9D9DADBDBDBDBDADCDCDCDCDCDCDEDBDBDBDBDBDBDBDBDCDCDCDBDBDADADBDCDEDEDEDEDEDFE1E1DFDEDEDEDEDEDEDEDEDEDEDCDEDFDFE1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADAD5504444444444444444444444444444444242424242424242424242414141414141414242424040404040404040403E3E3E3E3F3F4040403F4141414242434443464747484A4A4D4C4F50545556585B5C5C5F606466676A6C6F727475787A7D8082848685888A8C8D8F8F8F9191919392929292929091918F8F8C8B8A8787848481807D7B79787573726F6C6A696763605F5D5A59585552514E4D4C4A484745454341403E3E3C3B3A383737373635353532323131313131312E2E2E2D2D2D2D2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919191717171717171717171616161615151515151614141414141515151414141414141414131313131313131313131312121212121211111111111111111111111010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0000000000000000000000000000000000000000000000000000809497999C9FA1A4A7AAADAFB2B6B8BBBEC1C4C7CACDCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F83B0000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEFEDECECEBE9E8E7E7E7E5E5E4E3E1E0E0E0DEDDDDDCDCDCDADADADADADAD9D9D9D9D9D9D9D9D9D9DADADADADADADCDCDCDDDDDEE0E0E0E1E3E4E5E5E7E7E7E8E9EBECECEDEFEFF0F0F0F1F3F3F5F5F5F6F6F7F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F3EAEBEBEAEBEAEAE9EAEAEFF7E6DFDFE1E1E1E1DEDFE1E1DEE1DFE1E2E2E1E1E1E1E1E1E2E2E3E3E3E3E4E3E4E4E3E1E1E1E1E1E1E2E1E1E1E1E1E1E1E1E1E1DFDEDEDEDEDBDBDBDCDCDCDCDBDBDBDBDBDBDBDBDBDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDCDEDBDCDBDADBDCDBDCDCDADAD9D9D7D6D6D5D2B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38772727575767778787C7E818285868A8C8E9094999B9EA2A4A7A8AAAEB1B1B3B8B9B9BBBDBFC0C3C5C5C6C9C9CACBCED1D1D0D3D3D3D5D5D5D5D5D6D7D6D7D7D9D9D9D9D9D9DAD9DADADADADADADADADAD7D7D7D7D7D9DADADADADBDCDADADADAD9DADBDADADBDCDBDBDBDADADBDCDEDCDCDEDEDEDEDEDEDEDCDCDEDFDFDEDFE1E1E1E1E1E1E3E3E2E2E1E1E1DFDFDFDFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E290434343434343444444444444444444444442424242424242424242424141414141414142424040404040404040403E3E3E3E3E404040414141414242434444444747484A4A4D4F5051545557585A5D5F5F6263676A6C6F727275787A7D7F828485878B8C8D8F90919193939595969898979696969595929490908E8C8B8A898684837F7D7B79787573706D6A696766615F5E5B5A58555352504D4C49484745454341403E3E3C3B3A383737373635353532313131313131312F2E2E2D2D2D2D2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252424242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717171616161615151515151614141414141515151414141414141414131313131313131313131312121212121211111111111111111111111010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000001D9396989B9DA0A2A5A8ABAEB0B3B7B9BCBFC2C5C8CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F881000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F6F6F5F5F5F3F3F1F0F0F0EFEFEDECECEBE9E8E7E7E5E5E4E3E1E0E0E0DEDDDCDCDCDADADADAD9D9D8D8D7D7D7D7D7D7D7D7D7D7D7D7D8D8D9D9DADADADADCDCDDDDDEE0E0E0E1E3E4E5E5E7E7E8E9EBECECEDEFEFF0F0F0F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F9F9F9F9F9F9F9F9F9F9F2EAEAEAE9EAE9EAEBEBECF1F7E7E1DFDFDEDEDEDEDEDEDEDEDEDEDEDFDFDEDEDEDFDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFE1E1DEE1E1DFDFDFDFE1E1E2E2E3E4E4E4E3E3E3E2E2E3E1E1DFDFDFE1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E4E4E6E7E7E9E7E7E7E6E6E4E6E4E4E4E3E4E4E4E6E4DDB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C777778787B7D7E7F81818688898C8E909297999B9EA2A5A5A7ABACAEB2B2B8B9BBBFBFC0C3C5C6C8C9CACACECECFCFD1D1D3D3D5D7D7D7D7D7D9DADBDBDEDEDEDEDEDFDFDFE1E1E1E1E3E1E1E1DFDFDEDCDCDBDADADBDCDCDCDBDBDBDBDBDBDEDEDEDEDFDEDEDFDEDEDEDEDEDEDFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFE1E2E2E3E2E3E2E2E3E3E2E2E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAD74343434343434343434444444444444444444442424242424242424242424141414141414242424040404040404040403E3E3E404040414242414242434444464847484A4A4D4D51515455575A5C5D5F606465686A6D70727577797D7F8284878A8B8C8F90919395969798989A9B9A9B9B9A9A989A9A989796959392908E8D8B89868483807E7A797774726F6C6A696662605F5D5A59565352504D4C4A484745454341403E3E3C3B3A383737363635353532313131313131312E2E2D2D2D2D2D2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272625252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191917171717171717171716161616161515151515141414141414151515141414141414141413131313131313131313111212121212111111111111111111111110101050B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB54F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000469497999C9EA1A4A6A9ACAFB2B4B8BBBDC0C3C6C9CCCED1D4D6D9DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8D90000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0F0EFEDEDECECE9E8E8E7E7E5E4E4E3E0E0E0DEDDDCDCDADADAD9D9D8D7D7D6D6D6D4D4D4D4D4D4D4D4D4D4D4D4D6D6D6D7D7D8D9D9DADADADCDCDDDEE0E0E0E3E4E5E5E7E7E8E9E9ECECEDEFEFF0F0F0F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9EDE1DFDFDEDFE1DEDFE1E1E6EFDFD7D9DAD9D9DADADADADADADADAD7D7D7D7D7D9DADADADADBDCDADADADAD9DADCDBDBDCDEDCDCDCDBDBDCDEDEDEDEDEDFDFDFDFDFDEDEDEDEDFDFDEDFE1E1E1E1E1E1E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDCDEDCDEDEDBDBDBDCDCDCDACFB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C79797A7B7E7F80818385898C8F9293979B9C9EA2A4A7AAACAEB1B3B6B9BCBFC1C4C5C9CACED0D5D6D9DBDEDFE3E3E4E6E6E9E9EAEBEBEAEAEBEAEAEBEAEAEAEBEBEAEBEEEEECEBEBEBEEEEEEECEEEEECECEEEBEBEBEBEBEBEAEBEAEAEBEBEBEAE9E9E9E9EAE9EAEBEBEBECECECECEBEBEAE9E7E7E7E9E9E7E9E9E7E6E6E6E6E7E6E6E4E4E3E3E3E3E3E3E3E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3744444444443434343434343444444444444444444424242424242424242424141414141414142424040404040404040403E3E404040414142424242434444464848484A4A4D4D51545555575A5C5C60626567696A6F727476797C7F828486888C8D8F90929596989A9B9B9BA0A0A0A0A0A0A0A0A09E9C9C9B9A9896939291918F8A888684837F7C7B7875736F6D6C696566615F5D5A59565452504D4C4A484845454341403E3E3C3B3A383737363635353332313131313131312F2E2D2D2D2D2D2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252424242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717161616161615151515161414141414141515151414141414141414131313131313131313131112121212121111111111111111111111105DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD720F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED00000000000000000000000000000000000000000000000000007695989A9C9FA2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D5D7D9DCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8280000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0F0EFEDECECECE9E8E7E7E5E5E4E3E1E0E0DEDDDCDCDADAD9D9D8D7D6D6D4D4D4D3D3D3D3D1D1D1D1D1D1D1D1D3D3D3D3D4D4D4D6D6D7D8D9DADADADCDCDDDEE0E0E1E3E4E5E7E7E7E8E9ECECEDEDEFF0F0F1F1F3F3F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9EFE1E3E2DFE3E3E3E4E3E4E7F2E1D9DADADADBDBDADAD9D9D7D6D6D6D6D6D5D5D5D3D3D5D5D5D6D7D7D7D7D7D6D7D7D9D9D7D6D6D7D7D7D7D7D9DADADBDBDADADADAD7D7D9DADAD9D7D7D7D6D6D5D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D7D7D7D9DADADBDBDBDBDCDAD9DADAD7D7DAD7D6D6D5C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38B7878797B7D7E818182848688898D909394979B9CA2A2A7A8AEB1B2B5B6B8BBBCBFC0C1C5C6C9CBCAD0D0D1D1D3D3D6D7D7D9D7DADADADADBDBDBDCDCDCDBDCDCDCDEDCDBDCDEDEDBDEDCDEDEDCDCDCDEDEDEDCDEDEE1E1DFE1E1E1E1E1DEDEDEDEDEDEDCDBDADADBDCDBDBDADADADADADADCDCDBDBDEDEDCDCDCDCDBDBDBDCDEDEDEDEDCDEDEDEDFDEDCDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1C544444444444444444343434343444444444444444444424242424242424242424141414141414242424040404040404040404040404241424242434344444648484A4A4A4D4D51545558595A5D5E616265686A6C717475797C7E828286888B8F8F919297999A9B9FA0A0A2A3A3A2A2A4A4A4A4A1A1A1A1A0A09E9B9A97969592908F8B888683817F7C7B7773726F6C6A6766615F5E5B59565452504E4D4C484845454341403E3E3C3B3A3837373636353533323131313131312F2F2E2D2D2D2D2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272625252525252525252525252525252424242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919171717171717171717161616161515151515161414141414151515141414141414141413131313131313131313131212121212121111111111111111111574BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD911A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000129496989B9DA0A3A6A9ABAEB1B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E6E7E9EBECEEF0F1F2F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F876000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F6F6F5F5F3F3F1F0F0F0EFEDECECEBE9E8E7E7E5E4E3E1E0E0DEDDDCDCDADAD9D8D7D6D6D4D4D3D3D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D1D1D3D3D4D4D6D6D7D8D9DADADCDCDDDEE0E0E3E4E5E5E7E7E8E9ECECECEDEFF0F0F1F1F3F3F5F5F6F6F7F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF0E3E3E2E2E3E3E2E1E3E1E6EEDED7D9D7D7D7D7D9D7D9DADADADAD9D7D7D7D9D7D9DADADADAD7D9DADADADAD9DADADAD9DADADADADAD9D7D7D7D6D5D5D5D6D6D6D5D5D3D3D1D1D0D0D0D1D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D7D7D7D7D7D5D5D7D7D7D7D9DAD9DAD7D7DADAD9DAD9BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B390818181838586898A8C8D8F909497999B9EA1A2A4A7AAAEB1B2B5B9BBBFC1C4C6C6C9CBCBD0D0D1D3D5D7D9D9DADBDCDCDEDEDEDEDEDEDEDCDEDEDFDEDEDEDBDEDBDBDBDBDCDBDADBDBDBDBDBDCDCDEDCDCDEDEDEDFDEDEDEDEDEDEDEDEDCDCDEDEDEDEE1E1DEDEE1E1DFDEDEDEDEDEDEDEDEDEDEDEDBDBDEDEDEDEDEDEDEDEDBDEDEDEDEDEDEDCDBDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDE60444444444444444444444343434344444444444444444442424242424242424242414141414141424242404040404040404040404242424242434444444648474A4A4C4D4D515455575B5C5D5E616465696A6E7174777A7D818285888B8F8F939597999B9FA0A2A3A5A5A5A8A8A8A8A8A8A8A8A8A8A5A4A4A1A09D9C9B98979392908D8B898683807E7B7875726F6D6A696662605F5B5A585552504E4D4C484845454341403E3E3C3B3A3837373635353533323131313131312F2F2E2D2D2D2D2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272625252525252525252525252525252424242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171716161616151515151516141414141415151514141414141414141313131313131313131311121212121211111111111111111591BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA72D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000003A9497999C9FA1A4A7AAADAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8C60000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F6F5F5F3F3F1F0F0F0EFEDECECEBE9E8E7E7E5E4E3E0E0DEDDDCDCDADAD9D8D7D6D4D4D3D1D1D0D0D0D0CECCCCCCCCCCCCCCCCCCCCCCCCCCCCCED0D0D0D0D1D1D3D4D4D6D7D8D9DADADCDCDDE0E0E1E3E4E5E7E7E8E9EBECECEDEFF0F0F1F1F3F3F5F5F6F6F7F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBEFE2E1E2E1E2E2E1E1E2E2E7F2E1DADADBDBDADADADADADADBDBDBDBDCDEDEDEDEDEDFDFDEDEDEDEDEDEDFE1E1E1E2E3E2E2E3E3E3E3E3E3E3E2E2E2E3E3E3E4E6E7E6E6E4E3E3E3E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDEDEDEDEDEDEDEDBDCDCDADADADADAD9DADADBDCDCDBBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38E7D7E808082818386868A8C8E8F9294999B9C9EA1A2A5A7ABACB1B1B3B5B8BCBFC3C4C8C8CBCBD0D3D5D6D6D9D9DADADBDEDEDFDFE1DEDFE1E3E1E2E1E3E1E1E1E3E2E2E1E1E1E1DEDEDEDEDCDCDCDCDBDBDCDEDEDEDEDCDEDFDFDFE1E1E1E1DEDEDEDEE1E1E1E1E1DFDFDFDFDFE1DFDFDEDFDFDFDFE1E2E2E3E3E3E3E2E2E3E3E2E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4A1444444444444444444444444434343434344444444444444424242424242424242424141414141414242424040404040404042424242434342434446444648474A4A4C4F4D505456575B5C5E5F616367696D707276797C7F8284878B8E8F9395999A9EA0A0A1A6A6A8A8A9ABADADADADAEADADADABAAA9A8A8A5A4A2A09D9C99979592908C8A8984817F7B797773706F6C6A66625F5F5D5A585552504E4D4C494845454341403E3E3B3B3A3837373635353533323131313031312F2F2E2D2D2D2D2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272625252525252525252525252525252424242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171716161616161515151515141414141414151515141414141414141413131313131313131313111212121212111111111111239FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5410F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED00000000000000000000000000000000000000000000000000006A96989B9DA0A2A5A8ABAEB0B3B6B9BCBFC2C5C7CACDD0D3D5D8DADCDEE1E3E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F81E0000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F6F6F5F5F3F3F1F1F0F0EFEDECECEBE9E8E7E5E5E4E3E0E0DEDDDCDADAD9D8D7D6D4D3D3D1D0D0D0CECCCCCCCCCBCBCACACACAC9C9CACACACBCBCBCCCCCCCCCED0D0D0D1D3D3D4D6D7D8D9DADADCDDDEE0E0E3E4E5E5E7E8E9EBECECEDEFF0F0F1F1F3F5F5F5F6F6F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBEBDAD9D9D7D9D7DADBDEDBDEE9D7D0D0D0D0CFCFD0CFD0D0D0D1D3D5D5D5D5D5D6D5D5D6D5D6D6D6D6D7D5D5D7D7D7D9DADBDADADADADBDBDBDCDBDBDADADADBDADADADBDCDCDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBE9E9EAEAEAEAE9E9E9E6E9E7E9E7E9E7E7E9E9E7E7E6E2BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C7B7D7D7D7F818181838689888C8F9294979B9C9EA1A5A7AAABACAEB1B3B8B9BDBFC1C3C3C4C8CACACECFD0D1D1D1D3D5D6D6D7D9D7D7D9DADCDCDBDAD9D9DADBDEDBDBDADBDADBDADBDBDCDBDBDBDBDBDBDBDBDEDEDEDCDBDEDEDEDFDEDEDEDEDEDCDEDEDEDEDEDEDEDEDEDFDEDFDFDFDFDFDFDFDFDEDEDEDEDEDBDBDBDEDEDEDEDEDEE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2DC4C4444444444444444444444444444434343434444444444444442424242424242424242414141414141424242404040404042424242434343434446464548474A4A4C4F50515456575B5C5F606263676A6D7175767A7D8182868A8C8F9196999A9DA0A0A6A6A8A9ACADADB0B0B2B2B2B2B2B2B2B1AEAEADACA9A8A6A4A2A09D9B99979392908C888683807E7B7873726F6C6A6562605F5D5A585552504E4D4C494845454341403E3E3B3B3A3837373635353533323131313031312F2F2E2D2D2D2D2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272625252525252525252525252525252424242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717161616161615151515161414141414141515141414141414141414131313131313131313131212121212121111111135A7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000000B9497999C9EA1A4A6A9ACAFB2B4B7BBBDC0C3C6C9CBCED1D4D6D8DBDDE0E2E4E6E7EAEBEDEEF0F1F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F863000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F1F1F0F0EFEDECECEBE8E7E7E5E4E3E1E0DEDDDCDADAD9D8D7D6D4D3D1D0D0D0CCCCCCCBCBCAC9C9C7C7C7C7C7C7C7C7C7C7C7C7C7C7C9C9CACBCBCCCCCCD0D0D0D1D3D4D6D7D8D9DADCDCDDE0E0E1E3E5E5E7E7E9EBECECEDEFF0F0F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF6ECEBEAEAEAEBEAEAEBEAEFF8E6DEDEDFDFDEDEDEDFDFDFDEDEDCDCDEDBDCDCDCDCDCDCDEDEDCDCDEDEDEE1E1E1E1E2E2E2E3E3E3E2E1E1E1E1E1E1DFDFE1E1E1DEDEE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADAD9D9D7D9D9DADADADAD9D9D7D7D7D7D6D7D7D7D6D3CBB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39080808181838588898C8D8F92939697999C9EA2A4A5A8ACAEB1B5B6B8BBBDC1C3C4C6C6CACBD0D0D1D3D3D3D5D7DADADBDCDEDEDEDEDEDFE1E1E2E4E4E4E4E4E6E6E4E3E4E6E6E6E6E4E4E3E3E2E3E3E2E2E2E3E3E4E3E4E4E3E3E3E3E3E3E3E3E3E1E1E1DFDEDEDFDFDFE1E1E1E1E1E1E2E3E4E4E4E4E3E4E4E4E4E3E2E1E2E3E4E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E68E4444444444444444444444444444444443434344444444444444444242424242424242424141414141414242424040404042424242434343434446464749474A4A4C4F50515456585B5C5E616466686A6D7276797D7F8284878B8F909599999DA1A3A6A6ABADADAEB0B2B2B3B3B4B4B4B4B4B4B4B3B2B2B1B0ADACAAA8A5A2A19E9C989693908D8B8784837F7B7874726F6C6B6766615F5D5A595552514E4D4C494845454342403E3C3B3B3A3837373635353533333131313031312F2F2D2D2D2D2D2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191717171717171717171616161615151515151614141414141515151414141414141414131313131313131313131312121212121211113CB5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000002F95989A9C9FA2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D4D7D9DCDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8B30000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEDECECEBE8E7E7E5E4E3E0E0DEDDDCDADAD8D7D6D4D3D1D0D0CECCCCCBCAC9C7C7C7C7C5C5C5C5C4C4C4C4C4C4C4C4C5C5C5C5C7C7C7C7C9CACBCCCCCED0D0D1D3D4D6D7D9DADADCDDDEE0E0E3E4E5E7E7E8EBECECEDEFF0F0F1F3F3F5F5F5F6F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF6EBECECECEBEBEBEAE9E9ECF4E3DEDEDCDEDEDEDEDEDEDEDEDEDEDEDEDEDFE2E2E1E1DFE1E1E1E1E1E1DFDFDFDFDFE1DFE1E1E1E1E2E1E1E1E1E1DFE1E1DFE1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E3E4E4E4E4E3E3E3E3E3E2E1E2E2E3E3E3E3E1E1E1E1D3B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B390818181818182818588898A8A8C8F909396999B9C9FA2A4A7A8ABACAEB2B5B6BBBBBDBFBFC1C4C4C5C9C8C9C9CBCBCECBCBCECECECED0D1D3D1D1D3D3D3D3D3D3D5D6D6D7D7D7D7D6D6D6D6D6D6D7D6D6D5D5D5D6D5D5D5D5D7D6D5D6D6D6D6D5D3D5D5D5D3D5D5D3D5D6D6D6D6D5D5D5D5D6D6D6D7D7D9D7D6D7D7D7D7D6D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCCA454545454444444444444444444444444444434343444444444444444242424242424242424241414141414142424040404242424342434343444646474849484A4C4F5051545657595C5E616466696A6D7276797C818286888E8F93979A9DA0A2A6A6ABADAEB1B2B3B7B7B8B8BABABABABBBAB7B7B7B7B4B2B2AFB0ADACA8A5A2A29E99989592908B8986837F7B797573706C6A6766615F5D5A585553504E4D4A484845454342403E3C3B3B3A3937373635353533323131313031312F2F2D2D2D2D2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232322222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919191717171717171717171616161615151515151614141414141515151414141414141414131313131313131313131112121212121151BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9F200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE300000000000000000000000000000000000000000000000000006496989B9DA0A3A6A9ABAEB1B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8130000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F5F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E3E0E0DDDCDADAD9D7D6D4D3D1D0D0CCCCCCCBC9C7C7C7C5C5C4C4C3C3C1C1C1C1C1C1C1C1C1C1C1C1C3C3C4C4C5C5C7C7C7C9CBCCCCCED0D0D1D3D4D6D7D9DADCDCDEE0E0E3E4E5E7E7E8EBECECEDEFF0F0F1F3F3F5F5F6F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCEDDEE1DFDEDFDEDCDCDCDEE3ECDAD3D1D1D1D3D3D3D1D0D0D0D0D0D0D1D0CFCFCFCECECECECED0D0D0D0D0D0D1D3D3D3D5D5D5D6D7D6D6D6D5D3D5D5D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E3E3E3E3E2E2E2E3E3E3E4E6E6E4E4E3E1E1E1E2E2E2CAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38E7D7C7D7E7E7F818282838688898C8F909496999B9EA2A4A7A8ABB0B2B6B8B9BDBFC1C4C8CACECED0D1D3D5D7D9DADBDBDBDEDEDEDEDEDFE1DFDEDCDCDEDEDFDFE1E1E1E3E2E2E3E4E3E3E3E3E3E3E2E3E3E3E3E3E3E6E3E3E3E2E2E2E2E2E2E1DFE1DFDFE1E2E3E3E3E2E3E3E4E6E6E6E4E6E4E4E4E4E6E6E6E4E4E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E37C46464645454544444444444444444444444444434343444444444444444242424242424242424141414141414242424041424243434243434444464748494A4B4C4F5053555658595C5E616466696D6E72767A7D8183888B909096999C9FA3A5A8ABADAFB2B4B7B7B8BBBBBBBBBDBDBEBEC0BDBDBDBBB9B9B8B5B4B2AFADAAA8A5A1A09E999693908D888784807C7A7773706D6A6766615F5D5A595553514E4C4C484745454342403E3C3B3B3A39373736353533333231313130312F2F2F2D2D2D2D2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232322222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171716161616161515151515141414141414151515141414141414141413131313131313131313121212121274BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000068F97999C9FA1A4A7AAADAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DBDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8630000000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E1E0DEDDDCDADAD8D7D4D4D1D0D0CCCCCBCAC9C7C7C5C5C4C3C1C1C1C1C0BEBEBEBEBEBEBEBEBEBEBEBEC0C1C1C1C1C3C4C5C5C7C7C9CACBCCCED0D0D1D4D4D7D9DADADCDDDEE0E3E4E5E7E7E8EBECECEDEFF0F0F1F3F3F5F5F6F6F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF7ECECECECEBEBEBECECEEF3FBEBE4E4E3E2E2E3E4E4E4E3E2E1DFDEDEDEDEDEDFDEDEDFDFDFDFDEDFDFDEDEDEDFDFDFDFDEDEDEDBDEDEDBDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDEDFE1E2E3E2E2E2E3E3E3E3E3E3E3E1E3E1E1E1E1DFC2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3928383838588888A8A8C8D8F8F939497979B9C9E9FA2A5A5A7ABACB1B1B3B8BBBFBFC1C3C5C9CACBCFD0D1D3D3D5D6D7D9DADBDADBDBDBDCDEDEDEDEDEDEDEDEDEDEE1E2E2E3E3E3E3E2E2E3E3E2E3E3E3E3E3E2E2E3E3E3E3E2E3E3E4E4E6E6E4E6E6E6E6E6E4E6E6E4E4E6E4E6E4E6E6E6E6E7E6E7E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEBB46464646464646454544444444444444444444444443434344444444444444424242424242424242414141414142424240414143434243444344464748494A4C4D4F50515556585B5E5F6164686B6C7172767A7F82848A8C9091979A9FA0A5A7A9ADB0B4B5B7BABBBCBEBEC1C2C1C2C2C2C2C2C2C1C0BEBDBBBAB8B7B4B3B0ADA9A8A5A19E9B9895928D8B8784817E7A7874726F6A6966615F5D5A595552514E4C4A484745454340403E3C3B3B3938373636353533333231313030312F2F2F2D2D2D2D2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717171616161616151515151614141414141515151414141414141414131313131313131313131312121682BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD560F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23000000000000000000000000000000000000000000000000002F96989B9DA0A2A5A8ABAEB0B3B6B9BCBFC2C5C7CACDD0D3D5D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8B30000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F6F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E1E0DEDDDCDAD9D7D6D4D3D1D0CECCCBCAC9C7C5C5C4C3C1C1C1BEBEBDBDBDBDBDBBBBBBBBBBBBBBBBBDBDBDBDBDBEBEC1C1C1C3C4C5C5C7C9CACBCCCED0D1D3D4D6D8D9DADCDDDEE0E1E4E5E7E7E8EBECECEDEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF3E7E9E9E9E9EAE9E9EAEAEEF8E7DFE1E1E2E2E3E4E4E4E3E3E3E2E2E3E1E1DFDFDFE1E1E2E1E2E3E2E2E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E1E1E1E1E1DFE1E1E1DFDFDEDCDCDCDCDBDEDEDEDEDEDCBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38E7D7D7F8181818283888A8A8D909294979B9C9FA2A5A8A8ACB1B2B5B6B8BBBCBFBFC0C3C3C5CACACBCECFD0D0D1D5D7D7D9DADCDBDBDEDEDEDEDCDCDEDFDFDFDEDFDEDEDEDFDFDFDEDEDEDEDFDFDFE1E2E2E3E2E3E2E2E3E3E2E2E3E3E3E3E3E2E2E2E2E2E3E3E3E2E2E2E3E3E3E3E3E3E3E3E2E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEE71464646464646464646454544444444444444444444434343434444444444444242424242424242424141414141414242424142434243434446464647494A4C4C5050515556595B5E5F6164686B6D7175797B8083868A8E9095999CA0A3A7A9ADB0B4B5B8B8BCBEC0C2C4C5C5C5C5C6C5C6C6C6C6C4C1C2C1BDBDBBB7B7B4B1AEACA9A6A4A09C9B9792908B8984837F7A7874726F6A6966615F5D5A585552514E4C4A484745444340403E3C3B3A3938373635353533333231313030312F2F2E2D2D2D2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919171717171717171717161616161515151515161414141414151515141414141414141413131313131313131313112391BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD79130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE00000000000000000000000000000000000000000000000000006497999C9FA1A4A6A9ACAFB2B4B8BBBDC0C3C6C9CBCED1D4D6D8DBDDE0E2E4E6E7E9EBECEEF0F1F2F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8130000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F8F8F7F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E1E0DEDCDCDAD9D7D4D4D1D0CECCCBCAC7C7C5C5C4C1C1C1BEBDBDBDBBBABAB9B9B9B7B7B7B7B7B7B7B7B9B9B9BABABBBDBDBDBEC1C1C3C4C5C5C7C9CACCCCD0D0D1D4D6D7D9DADCDDDEE0E1E4E5E7E7E8EBECECEFEFF0F0F1F3F5F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCEFE1DFDFDEDEDCDEDEDEDEE2EEDFDAD9DADADBDBDBDADBDBDBDBDADADBDBDBDBDBDBDCDEDEDBDBDBDBDBDBDEDEDEDEDEDEDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDBDEDEDEDEDEDBDBDBDBDBDBDCDEDCDCDCDCDBDBD9D6B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3948384848686868788898A8D8F909396979C9CA1A4A7A8ACAEB1B2B6B6BBBDC0C1C4C6CACACBCFCFD0D1D3D5D6D7D6D7D7D7DADEDEDFE1E1E1E2E3E3E4E4E3E4E4E4E4E4E6E6E6E4E4E3E3E3E6E3E4E3E4E3E3E3E3E3E3E1E1E2E1DFDFDFDEDEDEDEDEDCDCDEDEDFDEDEDEDFE1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4BB464646464646464646464646454444444444444444444443434344444444444444424242424242424242414141414142424241424242434445464647494A4A4C4F51515556595A5D5F6164676B6D7176797B8083878B8E93969B9FA2A6A9ADB0B2B7B7BBBDBEC2C4C5C5C7C8CACACACBCBCACACACAC7C7C6C4C2BDBDBABAB7B2B1AEACA8A5A19E9B9793908C8886837F7B7874726F6A6966615F5D5A585552514E4C4A4847454441403E3E3C3C3B39383736353535333232313130302F2F2F2E2D2D2D2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717161616161515151515161414141414151515141414141414141413131313131313131323A7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD98200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000000C90989A9DA0A2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D4D7D9DCDEE0E2E5E6E8EAECEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8630000000000000000000000000000000000000000000000000007F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEFECECEBE8E7E7E5E4E1E0DEDCDADAD8D6D4D3D1D0CCCCCAC9C7C5C4C3C1C1C0BEBDBDBABAB9B7B7B7B7B6B6B5B5B5B5B5B5B5B5B6B6B7B7B7B7B9BABABDBDBEC0C1C1C3C5C5C7C9CBCCCCD0D1D3D4D7D9DADADCDEE0E1E4E5E7E7E8EBECEDEFEFF0F0F1F3F5F5F6F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF6EBEAE9E7E9EAEBECECEEF4FBEAE1E1E2E2E2E3E3E3E4E3E2E2E2E3E2E2E2E1E1E1E1E1E1E1E1DFDFDFE1E1E1E1DFDEDEDFDEDEDEDEDEDEDEDFDEDEDEDEDEDFE1E1E2E2E3E3E3E3E3E3E3E2E2E2E1E1E1E1E1E2E1E1DFDFE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDBDBDBDEDEDEDEDEDEDEDBDAD9D9D7D7D7D7D6D6D6D0B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39283848486868989898C8C8E8F9294979B9C9EA2A4A7AAACAEB1B5B8BBBDC1C3C5C6CACACBCED0D3D5D5D6DADADBDBDEDEDCDEDFE1E1E2E2E1E3E3E3E3E3E2E3E2E2E3E3E3E3E3E3E3E3E3E2E3E3E3E4E6E6E7E6E6E7E7E6E4E6E6E6E6E6E4E4E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E161474747474746464646464646464544444444444444444444434343444444444444424242424242424242414141414142424242424243444546474849484B4C4F50535556595A5C5F6164676A6E7175797D8083888B9093979CA0A3A6AAADB3B5B7BABDBEC1C5C5C8CACACDCECECECFCFCFCECECECBCBCAC7C7C4C1C0BEBBB9B7B2B0AEA9A6A19F9C9893908C8A86837F7B7874726F6A6766605F5D5A585452504D4C4A4847454441403E3E3B3C3B39383736353533333232313130302F2F2F2E2D2D2D2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717171616161616151515151514141414141415151414141414141414131313131313131337B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA7340F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F000000000000000000000000000000000000000000000000003B97999B9EA1A4A6A9ABAEB2B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8BD0000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F6F6F5F5F3F3F1F0EFEFEDECEBE8E7E7E5E4E1E0DEDCDADAD8D6D4D3D0D0CCCBC9C7C5C5C3C1C1BEBDBDBBBAB9B7B7B6B5B5B4B4B3B3B3B3B2B2B2B2B3B3B3B3B4B4B5B5B6B7B7B9BABBBDBDBEC1C1C4C5C7C7C9CBCCD0D0D3D4D6D8DADADCDEE0E1E4E5E7E7E9EBECEDEFF0F0F1F3F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9F3F3F2F3F2F3F3F3F3F3F7FCECE6E6E6E7E7E7E6E7E9EAE9EAE9E9E7E9E9EAEAEAEAECECECECECEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E2E2E3E3E3E3E4E4E4E3E2E1E1DEDEDCDBDBDCDCDBDBCEB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39487868686888A898A898C8C8D8F929397999B9C9FA2A5A5A8AAAEB1B5B6B9BCBFC1C4C5C9CBCBCFD1D3D6D7D9DADADBDBDCDEDEDEDFE1E2E2E3E3E2E3E3E3E4E6E7E7E6E7E7E6E4E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7A6474747474747474746464646464645454444444444444444444343434444444444444442424242424242424141414141424243434243444545474749484B4C4F50515556595A5C5F6164686B6D7176797D8084888D9095979CA1A4A9ADAFB2B8BABCC0C2C5C5C8CACDCECFD1D2D0D2D2D2D2D2CFCFCFCECECBCAC7C4C1BDBDBAB7B2AFAEAAA6A2A09C9895908D8886837F7B7874726F6A6766615F5D5A585451504D4C494845454341403E3C3B3C3B38373636353533333232313030302F2F2F2E2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252524252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919171717171717171717161616161615151515161414141414151515141414141414141413131313131351B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB54F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD00000000000000000000000000000000000000000000000000006C989A9C9FA2A5A8AAADB0B3B6B8BBBEC1C4C6C9CCCFD2D4D7D9DBDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F81E0000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECEBE9E7E7E5E4E1E0DEDCDADAD7D6D4D1D0CECCCBC9C7C5C4C1C1BEBDBDBAB9B7B7B6B5B4B3B3B2B1B1B1B1B1AFAFAFAFAFAFB1B1B1B1B1B2B3B3B4B5B6B7B7B9BABDBDC0C1C3C4C5C7C9CBCCCED0D1D4D6D8DADADCDEE0E1E4E5E7E7E9ECECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF5E7E9EAE9E9E9EAECECEAEFF8E9E1E1E1E1E1DFDFDFDFDFE1DFE1E1E1E1E2E1E1E1E1E1E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E6E4E6E6E7E6E6E6E7E9E9E9E9E7E6E6E6E6E4E3E3E4CCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39283838383838586888A8A8C8C8D8F92939497999B9C9FA1A4A5A5A8AAACAEB3B5B9B8B9BDBDC0C1C4C5C6CACBCBCECFD0D0D0D0D1D1D3D5D3D5D3D3D3D5D3D5D5D5D7D6D5D6D6D6D6D5D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDA5B47474747474747474746464646464646454444444444444444444343434444444444444242424242424242424141414242434343434444454647484A4A4C4D50515556595A5C5F6164686B6D7175797D8086888E90959A9EA1A6ACADB1B4B8BCBEC1C5C7C8CBCDCFD1D2D6D6D5D6D6D8D6D6D5D5D5D1CFCFCECBC8C7C4C1C0BDB9B7B1B0ACA8A5A29E9895928D8A86847F7B7873726D6A6766605F5B5A585451504D4C494745454342403E3C3B3B3A383736363535333332323130302F2F2F2E2E2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525242525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717171616161615151515151614141414141515151414141414141414131313135FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD720F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C000000000000000000000000000000000000000000000000000C96989B9DA0A3A6A9ABAEB1B4B7B9BCC0C2C5C8CACDD0D3D5D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8770000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEDECECE9E7E7E5E4E1E0DEDCDAD9D7D6D4D1D0CCCCCAC7C7C5C3C1C0BDBDBAB9B7B7B5B4B3B2B1B1B1AFAFADADACACABABABABABABACACADADAFAFB1B1B1B3B3B4B5B7B7B9BABDBEC0C1C3C5C7C7CACCCCD0D1D4D6D8DADADCDEE0E1E4E5E7E8E9ECECEDEFF0F0F1F3F5F5F5F6F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF3E6E6E6E9E9E9E9E9E9EAEFF8E7DFDEDFDFE1E1E2E1E2E3E2E2E3E3E3E3E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADAD9D9DADADADADADADADBDBDBDBDBDBDADBDBDEDCDCDBC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39588888989898A8C8E8F90939397999B9EA1A2A5A7AAACAEB1B3B6BBBBBDBFC0C4C6C6C9CACECED0D1D3D3D6D6D7DAD9D7D9DADADADADADBDADADBDEDEDEDEDEDFE1E1E1E1E1E1E1DFE1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2A04747474747474747474747474646464646454544444444444444444443434344444444444442424242424242424141424242434343444445464748494B4C4D50515456595B5C5F6165686B6D7375797D8086888C91969A9FA3A6ACAFB3B7B8BDC0C2C6CACDCED0D2D5D6D7D9DADADAD8D8DAD8D7D6D6D6D5D1D0CFCBC8C5C4C1BEBAB7B2B1ADA9A5A19E9996928D8A87837F7A7874706D6A6763605F5B59565352504D4A4847454443423E3E3C3C3B3A383736363535333232323130302F2F2F2E2E2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525242525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717171616161615151515151614141414141515151414141414141413131774BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD911A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED00000000000000000000000000000000000000000000000000003C97999C9FA1A4A7AAADAFB2B5B8BBBEC1C4C6C9CCCED1D4D6D9DBDDE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9D0000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECECE9E8E7E5E4E1E0DEDCDAD9D7D6D3D1D0CCCBC9C7C5C4C1C1BEBDBBB9B7B7B5B4B3B1B1AFAFADACABAAAAAAA9A9A9A9A9A9A9A9A9A9AAAAABABACADAFB1B1B1B3B4B5B7B7B9BBBDBEC1C3C4C5C7C9CBCCD0D1D4D6D8DADADCDEE0E3E4E5E7E8E9ECECEFEFF0F1F3F3F5F5F6F7F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDDBDEDEDEDCDEDEDCDEDFE3EEDED5D5D5D5D6D6D6D7D7D9D9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADBDADAD9D9DADBDADADADADAD9DADBDBDADAD9D7D7D7D9BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3907F807F7E81818181818584898A8A8E909396979B9C9FA2A5A8A8ACAEB1B3B5B6B8BCBDC0C3C5C8C9CACACED0D1D1D5D5D5D5D5D6D7D7D9D9DADADBDEDBDBDEDEDEDCDEDFDFDFDFE2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFD95548484848474747474747474747464646464645454444444444444444434343444444444444424242424242424242414242434443444545454747494B4C4D50515356575A5D606164656B6E7276797D8086888D91969A9DA4A9ADB0B5B8BBBEC2C5C8CACED0D2D5D6D7DBDADBDCDCDCDCDEDCDBDBDAD8D7D6D4D1D0CDCBC7C4C1C0BDB7B4B1ADA9A5A19F9B96928E8A86837F7A7873706C6A6563605E5A59555352504C4A4847454441423E3C3B3C3B3A383736363533333232323030302F2F2E2E2E2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525242525252524242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191917171717171717171716161616161515151516141414141415151514141414141414141892BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA72D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000000078989B9DA0A2A5A8ABAEB0B3B7B9BCBFC2C5C7CACDCFD2D5D7D9DCDEE1E2E5E6E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F831000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECE9E8E7E5E4E3E0DEDCDADAD7D6D3D1D0CCCBC9C7C5C3C1C0BDBDBAB7B7B5B4B3B1B1AFADACABAAA9A9A8A7A7A5A5A5A5A4A4A5A5A5A5A7A8A8A9A9AAABACADAFB1B1B3B4B5B7B9BABDBDC0C1C4C5C7C9CBCCD0D1D4D6D8DADADCDEE0E3E4E5E7E8EBECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFAF3F3F2F3F6F3F3F6F6F6F9FDEEE9E6E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDEDEDEDEDBDBDEDEDEDEDEDEDEDCDBDBDBDBDBDBDCDAD5B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3978A8A8C8A8C898C8C8C8E8F92949497999C9EA2A4A5A7ABB0B1B3B6B6B9BCBFC1C5C5C5C8CACECBD0D3D5D5D6D9DADCDEDFDFDEDFE1E2E2E2E4E4E6E4E3E4E6E4E3E4E3E4E6E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3A348484848484848474747474747474746464646464544444444444444444443434344444444444442424242424242424242434344444547454647494A4C4D50505356575A5D5F636465696E7175797E8184888E91989B9FA4A9ADB2B5B8BCC0C4C5CACED0D2D6D6D8DBDCDEDFDFE1E2E1E1E1E1DFDEDCDCDAD6D6D5D2D0CDC8C5C4C1BBB9B4B1AEA9A5A19E9B96928E8A86837F7A77736F6C6965625F5E5A595552504F4C494845454441403E3C3B3C3B393737363635333332323230302F2F2F2E2E2E2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525252525252524242424232323232323232323232323222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171716161616161515151516141414141415151514141414141425A0BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5410F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23000000000000000000000000000000000000000000000000001297999C9FA1A4A7A9ACAFB2B5B8BBBDC0C3C6C9CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F88B0000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F5F5F5F3F1F0F0EFEDECEBE8E7E7E5E3E0DEDDDADAD7D6D3D1D0CCCBC9C7C5C3C1BEBDBBB9B7B6B4B3B1B1AFADABAAA9A8A8A5A5A4A4A3A3A3A2A2A2A2A2A2A3A3A3A4A4A5A5A8A8A9AAABADAFB1B1B3B4B6B7B9BBBDBEC1C3C5C7C9CBCCD0D1D4D6D8DADCDDDEE0E3E5E7E7E9ECECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF8EEEFEFEFEEEEEFEFEFEEF2FBEAE3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DEDFDFE1E1E1E1DFE1E1DFDEE1E1E1E1E1E1DFDEDEDFD9B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39A9290929292909294979799999B9FA1A2A7A7A7ACAEB1B1B3B5BBBDBDC0C3C4C4C6C6CACBCED0D1D5D3D6D9DBDBDEE1E1E1E3E3E4E3E3E3E3E2E1E3E3E3E4E3E2E3E3E3E2E2E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADAD353484848484848484848474747474747474646464646454444444444444444434343444444444444424242424242424444434344444445474747484A4C4D50515355575A5C5F616466686D7175797E82848A8D91969BA0A4A8ADB2B7BABEC1C5C8CDCFD1D6D7D9DBDCDFE1E2E2E2E3E4E2E4E4E2E2E2E1DEDBDAD8D5D5D0CECBC7C4C1BEB9B5B2AEA9A5A19E9B96928D8886837E7B77726F6C696762605D5A585451504D4C494845454342403E3C3C3B3A393737363535333232323230302F2F2F2E2E2E2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282727272727272727262525252525252525252525252524242424232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171716161616151515151516141414141415151514141414143E5252525252525251515151515151515151515151505050505050509FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD5D4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC400000000000000000000000000000000000000000000000000004E989B9DA0A2A5A8ABAEB0B3B6B9BCBFC1C4C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9E5000000000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F3F3F1F0EFEDECECE9E7E7E5E3E0E0DDDCDAD8D6D4D1D0CCCBC9C7C4C3C1BEBDBAB7B7B5B3B2B1AFADABAAA9A8A5A4A4A3A2A2A2A0A0A0A0A0A0A0A0A0A0A0A0A2A2A2A3A4A5A5A8A9AAABADAFB1B2B4B5B7B9BABDBEC1C3C5C7C9CBCCD0D1D4D6D8DADCDDE0E0E4E5E7E8E9ECECEFEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFFFFFFFFFFFFFFFFFFF6E9E9E9EAE9E9E9EAEAEAEFF9EAE3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E6E4E6E6E7E6E6E6E7E9E7E9E9E7E6E6E6E6E3E3E3D7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3978C8C8A8C8C8C8D8E8E8E9092929697979B9B9CA1A1A4A7A7A8AAAEAEB1B2B2B5B6B8BBBDC0C3C1C4C5C5C8C9CACBCED0D1D1D1D3D3D3D3D5D5D5D5D6D5D6D5D5D5D6D5D5D5D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD99E48484848484848484848484747474747474746464646454544444444444444444343434444444444444242424242444444444444444547474748484B4C4F4E535457595B5F606367686B7074797E80848A8D91969B9FA4A9ADB2B7B8BEC2C6C8CFD0D5D6D9DCDEE1E2E4E3E5E5E7E6E6E6E6E5E5E4E2E1E1DEDCDAD7D5D1CFCBC7C4C1BDBAB5B1AEAAA5A19E9996908D8886837E7975726F6C6967615F5B5A565351504D4A484745444142403E3B3C3B3A393737363533333232323130302F2F2E2E2E2E2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282727272727272726262525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919171717171717171717161616161515151516141414141414151514141414141414141313131313131313131311121212121211111111111111111165BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA70F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55000000000000000000000000000000000000000000000000000085999C9FA1A4A6A9ACAFB2B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8450000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F5F5F5F3F1F0F0EFEDECE9E8E7E5E4E1E0DDDCDAD8D6D4D1D0CCCBC9C7C4C3C1BDBDBAB7B6B4B3B1AFADABAAA9A7A5A4A3A2A2A0A0A09E9E9E9D9D9C9C9C9C9D9D9E9E9EA0A0A0A2A2A3A4A5A8A9AAABADAFB1B3B4B6B7BABDBEC1C3C5C7C9CBCCD0D1D4D6D9DADCDDE0E1E4E5E7E8EBECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E7E7E9E9E9E9E9EAEBEFF9E9DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDEDEDEDEDEDFDFDFDEDEDFE1E1E1DFDEDEDEDEE1E1C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B399909090909090909393939497979B9C9E9FA2A5A7A8AAACB1B1B1B3B5B8B9BCBFBFC1C4C5C5C9C9CACACECFCFD3D5D5D5D9D7D7D7D9DAD9D9D9D9D9DADADBDBDBDCDBDCDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5CF52484848484848484848484848474747474747464646464645444444444444444443434344444444444442424242424444444444444547474749484B4C4F4E515556575A5C606365696C6F74787B8084888D91969AA0A5AAAEB3B7BBBEC2C9CBD0D2D6D7DADCE1E2E2E5E6E7E8E8E9E9E9E9E7E8E6E5E5E3E3DFDEDBD7D6D5D0CBC8C5C1BDBAB7B2AEAAA6A19E9995908C8984807C7875726D6A6763625F5A595552524F4D4A484545434140403D3B3C3A393737373635333332323231302F2F2F2E2E2E2E2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282727272727272726262525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191917171717171717171716161616161515151516141414141415151514141414141414141313131313131313131312121212121111111111111111112FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED00000000000000000000000000000000000000000000000000001E989B9DA0A2A5A8AAADB0B3B6B9BCBFC1C4C7CACCCFD2D4D7D9DBDDE0E2E4E6E8EAEBEDEEF0F1F2F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9A8000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDCDAD9D6D4D1D0CCCBC9C7C4C1C1BDBBB9B7B5B4B2B1ADACAAA9A7A5A4A3A2A0A09E9E9D9C9A9A9A99999999999999999A9A9C9C9D9EA0A0A0A2A3A4A5A8A9AAACAFB1B2B4B6B7B9BDBDC1C3C5C7C9CBCCD0D1D4D7D9DADCDEE0E3E5E7E7E9ECECEDEFF0F0F3F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E2E2E1E2E1DFE2E1E1E6F2E1D9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E1E3E3E2E2E1E1E1DFDFDEDEDEDEE1DFDEDFDFDFDEDCC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3978D8E8F8E8E8E8F90909093949797999C9F9FA1A4A7A7A8ACAEB1B3B6B9B9BDBFC1C5C5C5C6C9CBCED0D1D5D6D7D9DAD9DADEDEDEE1E1E1E1DEDEDEE1E1E1E1E1DFE1E2E3E4E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1A64848484848484848484848484848474747474747464646464645444444444444444443434344444444444242424244444444444444454747494A4A4C4D50505457575A5D616365696D6F73787B7F84888C90959AA0A4A9AEB2B8BBBEC1C9CBD0D2D7DADCDEE2E4E5E7E8E9E9EAEBECECECEAE9E9E9E8E6E5E3E2DFDCD8D6D4D0CDC8C7C1BDBAB7B1AEA9A5A19E9893908B87847F7C7874706D6A6663605F5A575452504F4D494845454342403E3D3C3B3A393737373533333232323131302F2F2F2E2E2E2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282827272727272727262525252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717171616161615151515151614141414141515151414141414141413131313131313131313111212121212111111111111111111A7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD270F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000005B999C9FA1A4A6A9ACAFB2B4B7BABDC0C2C5C8CBCED0D3D5D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9EE13000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F5F5F3F3F1F0EFEFECECE9E7E7E5E3E0DEDCDAD9D7D4D3D0CCCBC9C7C4C3C1BDBBB9B7B5B3B1AFADABA9A8A5A4A3A2A0A09E9D9C9A9999989797979595959595959797979899999A9C9D9EA0A0A2A3A4A5A8A9ABADB1B1B3B5B7B9BDBDC1C3C5C7C9CBCCD0D3D4D7DADADDDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAEAEAE9E9E9E7E7E7E7ECF8E9DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E3E4E4E6E6E6E6E6E4E6E6E3E2E2E2E1E1E1E1E1E1DFDEBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3998F909090909090929292949697999B9B9C9EA2A2A4A4A5A8AAABAEB0B1B2B5B6BBBDC0C1C3C4C6C6C9CBCECECECECFD1D1D1D1D3D5D7D7D9D9DADADAD9D7D7D9DADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDF6348484848484848484848484848484847474747474746464646454544444444444444434343444444444444424242444444444444454747474A4B4C4C4E505356585A5D5F6065686C6F73777B7E82898C90959A9FA4A9AEB2B7BBC0C4C8CDD0D2D7DADDE1E2E5E7E7E8EAEBEBEDEDECEDEFECEBEBE9E9E6E6E5E3DFDCD8D6D4D0CDCAC5C1BEBAB7B1AEA9A5A29C9893908B86837E7A77736F6C696762605D5A565451504D4C484745444242403E3C3C3B3A373737373533333232323131302F2F2E2E2E2E2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282827272727272727262525252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717171616161615151515161414141414141515141414141414141413131313131313131313121212121212111111111111111174BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD980F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF190000000000000000000000000000000000000000000000000006929B9DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CCCFD2D4D6D9DBDDE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F86D0000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFEDECEBE8E7E5E4E1E0DDDCDAD7D6D3D0CECCC9C7C5C3C1BDBBB9B7B5B3B1AFACAAA9A7A4A3A2A0A09E9C9A9999979795959595959393939393939595959595979799999A9C9EA0A0A2A3A4A7A9AAADAFB1B3B5B7B9BDBDC1C3C5C7C9CCCED0D3D6D8DADCDDE0E1E4E5E7E8EBECEDEFF0F0F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEBEBEBECECECEEEEEEF2FBE9E2E1E1E1E1E1E2E1E1DFDFE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADADBDBDBDCDCDEDEDCDCDEDEDCDEDEDEDEDEDEDEDFDCDAB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39C96969797979797999B9B9B9C9EA1A2A4A7A8ABACB0B2B5B6B6BBBDBDC1C4C4C5C5C8CACBCECFD1D1D5D7D9DADADBDBDBDEDEDEDFE1E1E1DFDFDFDEDEDEDFDFDFE1E1E1E1E1E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9B44948484848484848484848484848484848474747474747464646464544444444444444444343444444444444424244444444444546474747484A4C4D4E505155575B5C5F6065676B6F7276797E83878C90939A9DA4A7ADB3B7BBC0C5C8CDD0D6D8DCDEE2E4E5E8E9EBEBEFEFEFEFEFF1F0EFEFEFEDEBE9E8E7E6E3E0DEDBD7D4D0CDCAC5C1BEBAB5B1AEA8A5A09B97928E8A86837E7B75726F6C6766625F5D5A5653524F4D4A4845454442403E3E3C3B3A393737373535333232323231312F2F2F2E2E2E2E2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282827272727272727262525252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717161616161615151515161414141414151515141414141414141413131313131313131311121212121211111111111111113CBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD5D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9000000000000000000000000000000000000000000000000000036999C9FA1A4A6A9ABAEB1B4B7BABDC0C2C5C8CACDD0D3D5D7DADCDEE1E2E5E6E9EAECEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9C6000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F5F5F3F3F1F0EFEFECECE9E7E7E4E3E0DEDCDAD9D6D4D1D0CCCAC7C5C3C1BDBBB9B7B5B3B1AFABAAA8A5A4A2A0A09E9C9A999897959593939392929292919191919292929293939595959798999A9C9EA0A0A2A4A5A8AAACAFB1B3B5B7B9BDBEC1C3C5C7CACCD0D1D4D6D9DADCDEE0E3E5E7E7E9ECECEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEFEFEEEEEEEEEEEFEFF4FBEBE6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEDFDFDFDEDEDEDEDBDEDBDCDCDBDBDADADADBDADAD9D2B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D96969697969697979999999B9B9E9FA2A2A4A5A7AAACAEB1B2B5B6B8BBBDBFC4C5C8CACBCECFD1D3D5D5D6D9DADADBDBDCDEDEDEDFE1E1E1E1E1E1E2E2E3E3E3E3E3E3E2E2E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F16649494949484848484848484848484848484847474747474646464645454444444444444443434344444444444444444444444445474747484A4A4E4F50505357595C5E6164666A6C7075797E80848A9094999EA3A7AEB2B7BBC0C4C9CBD0D6D7DADCE3E4E6E8EAECEDEFF0F2F0F1F2F2F2F1F0F0EFEDEBE9E7E6E4E2DEDAD8D4D1CEC8C4C1BDB7B4B0ADA8A49F9B96928D8884807B7875726C6A6662625F5B595552504D4D4A4845454342403E3E3C3B3A393737373533333232323131312F2F2E2E2E2E2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292929282828282828282827272727272727262525252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191917171717171717171716161616161515151516141414141415151514141414141414131313131313131313131112121212121111111111111115B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000000000000000000000000000000000000000000000000000749B9DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CCCED1D4D6D8DBDDE0E1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8320000000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDDDAD9D7D4D1D0CCCBC7C5C3C1BEBDB9B7B5B3B1AFABAAA8A5A3A2A09E9C9A99979595959393929191909090908F8F8F8F90909090919192939395959798999A9D9EA0A2A3A5A8AAACAFB1B3B5B7B9BDBEC1C4C5C7CBCCD0D1D4D7D9DADDE0E0E4E5E7E8EBECEDEFF0F0F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7EAEAEAEAEAEAEBEBEBF1F9E9E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1DFDFDEDEDEDFDFDFDEDEDEDEDEDEDEDFE1E1E1E1E1DFD0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A39F9E9C9E9C9E9F9FA1A2A2A4A5A7A7A8ABAEAEB2B3B6B9BCBFC0C4C6C6C8C9CBCBD0D1D5D5D7D9DADBDEDEDEE1E2E4E4E6E7E9E9E9E9E9EAEBECEEEEECEEECECEBECECECECEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDAD6D5D3D3D3D3D3D3D5D5D5D6D6D6D6D6D6D6D9D6D6D6D6D6D6D6D6D5D5D5D5D5D3D3D3D3D3D3D3D3D1D1D1CFCFCFCFCFCECCCECECFCFCFCFD1D1CFCFCECFCFCFD0D0D0D3D2D4D4D4D1D2D0CFCFD0D2D0CFD1D1D0D0D0D0CFD0D0D0D1D1D1D1D1D1D3D3D5D6D5D5D7D7D7D7D7D7D7D7D9D9D7DADAD7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D5D6D7D6D6D6D3D3D3D3D3D5D6D6D6D6D6D6D7D7D7D7D6D6D6D5D5D5D6D7D7D7D6D3D3D2D1D0D0D0D0D0D2D1D3D5D5D3D1D3D5D3D3D3D1D3D5D5D6D6D5D5D3D3D5D5D3D5D6D5D5D6D6D6D6D7D9D9D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D5D5D5D6D6D6D6D6D6D6D7D7D9D7D98D2525252525252525252525242424232323232323232323232322222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171716161616151515151514141414141415151414141414141414131313131313131313131212121212111111111111111182BDBDBDBDBDBDBDBDBDBDBDBDBDBDBD980F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9000000000000000000000000000000000000000000000000000012999C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDD0D2D5D7D9DCDEE0E2E5E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F995000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F6F5F5F3F1F0EFEFECECE9E7E5E4E3E0DDDCDAD7D4D3D0CCCBC7C5C4C1BEBDB9B7B5B3B1AFABA9A8A4A3A2A09E9C9A9897959393929191908F8F8D8D8D8D8D8D8D8D8D8D8D8D8F8F9091919293959597989A9C9EA0A2A3A5A8AAABAFB1B3B5B7BABDBEC1C4C7C9CBCCD0D3D6D8DADCDEE0E3E5E7E7E9ECECEFF0F0F1F3F5F5F6F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEAE9EAEBEAEAEAEAEBEFF9E9E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDBDEDEDFDEDEDEDEDEDFE1E1E2E1E1E1E1E1E2E1E1E2CAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E9B9B9B9B9C9B9C9C9EA1A2A2A4A5A5A7AAABAEB0B1B3B5B6B6BBBDBDC1C3C5C5C6C9CBCBCFCED0D3D1D1D3D5D6D6D6D7D7D7D9DADBDEDCDCDBDEDFDFDFE1E1E1E1DFDFDFE1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDE9E252525252525242525252525242424232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171716161616151515151614141414141515151414141414141414131313131313131313111212121212111111111111114ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000004F9B9DA0A2A5A8AAADAFB2B6B8BBBEC1C4C6C9CBCED1D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9E50A0000000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F3F0F0EFEDECE9E8E7E5E3E0DEDCDAD9D6D4D1CECCC9C7C4C1C0BDBAB7B5B3B1AFABA9A8A4A3A0A09D9A9997959593929190908F8D8D8B8B8B8B8B8B8B8B8B8B8B8B8B8B8D8D8F9090919293959597999A9DA0A2A3A5A8AAABAFB1B3B5B7BABDC0C1C5C7C9CCD0D1D4D6D9DADCDEE0E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F1F2F1F1F1F2F3F3F4F6F9FDEFE9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D6D5D5D5D6D5D5D5D5D7D5D5D5D5D5D5D3D1D3D3D3D0BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39C9494949396979797979799999B9B9C9EA2A2A5A7AAACAEB1B1B2B6B9BCBFBFC0C4C5C5C6C6C9CACBD0CFCFD1D5D6D6D6D7D7D9D9D9D9D9D9D9DBDBDCDEDEDEDCDCDBDBDBDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDE9E25252525252525242525252524242424232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919171717171717171716161616161515151516141414141415151514141414141414131313131313131313131112121212121111111111111CBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0700000000000000000000000000000000000000000000000000008D9C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F1F3F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F963000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFECECE9E7E5E4E3E0DDDCDAD7D4D3D0CCCAC7C5C3C1BDBAB7B6B3B1AFABAAA8A4A2A0A09C9A989795939291908F8D8D8B8B8B8B8988888888888888888888898B8B8B8D8D8F8F909192939597999A9DA0A0A3A4A8AAACAFB1B4B6B7BBBDC1C3C5C7CBCCD0D3D4D7DADCDDE0E3E4E7E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEBEBECEAEBEBEAEAEFF8E7E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E7E9E9E7E9E9E9E7E6E6E4E3E2E3E3E3E3E1E1E1E1E1DFBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B9493949292929393969697999B9B9C9E9FA2A2A4A5A7AAABAEAEB1B2B3B5B9B9BBBDBFC3C3C3C5C6C8C9C9C9CBCBCECECFD0D0D0D3D5D5D5D5D5D3D3D5D6D6D7D7D9D7D6D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDE9E25252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919171717171717171717161616161515151515141414141414151514141414141414141313131313131313131312121212121111111111111191BDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D0000000000000000000000000000000000000000000000000000319B9DA0A2A5A8AAADAFB2B5B8BBBDC0C3C6C9CBCED1D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9C600000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F5F5F3F3F1F0EFEDECEBE8E7E5E3E0DEDCDAD9D6D3D0CECBC9C5C4C1BEBBB9B7B4B1AFACAAA8A4A4A2A0A3A29C9999969291908D8D8B8B8B8988878787868686868686868687878788898B8B8B8D8F909192939595989A9DA0A0A3A5A8AAACAFB2B4B7B9BDBEC1C4C7C9CCCED1D4D6D9DADCDEE0E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F8F8F9F9FAFBFBFBFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF3F4F4F4F4F6F4F6F7F7FCFFF1EBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E6E6E4E4E2E2E2E1E2E1E1DEB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A09B9B9B9B9B9C9B9B9B9C9C9C9E9FA1A2A2A5A7A7A8A8ACAEB0B1B3B3B6B9B8BBBCBDBDBFBFC1C3C5C6C8C9CACBCACBCBCECFD0D0D1D3D5D5D6D6D6D5D5D3D1D1D3D5D3D1D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDF9F2625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919171717171717171717161616161515151516141414141415151514141414141414131313131313131313131112121212121111111111115DBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF190000000000000000000000000000000000000000000000000000749C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8320000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFEDECE9E7E7E4E3E0DDDCDAD7D4D1D0CCCAC7C5C1C0BDBAB7B5AFADAEB0B1B3B3B3B3B3B3B3B3B3B3B3B3ADA7A0948B888787868685858584848484848585858586868788888B8B8B8D8F9091939595989A9CA0A0A3A5A8AAADB1B3B5B7BABDC0C3C5C7CACCD0D3D4D7DADCDDE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9E9E9E6E9E9E7E6E4E4EBF6E6DCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D0D3D3D5D5D5D6D6D7D6D6D6D5D6D6D6D6D6D5D3D5D3CEB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7A7A7A5A5A5A5A5A7A7AAAAAAAAACACB0B2B3B5B6B8BBBDC0C1C3C5C6C9C9CBCBCFCFD3D3D6D7DADADCDEDEE1E1E1E2E4E4E4E6E6E6E6E4E4E6E7E7E7E9EAE9E9E9EAEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3A2262625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171616161616151515151614141414141515151414141414141413131313131313131313121212121211111111111123BDBDBDBDBDBDBDBDBDBDBDBDB51A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA20000000000000000000000000000000000000000000000000000189B9DA0A2A5A8AAADAFB2B5B8BBBDC0C3C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F995000000000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECEBE8E7E5E4E0DEDCDAD9D6D3D0CCCBC7C5C3C1BDB9B2B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD9E928684838383828282828282838383848585868787888B8B8D8F9091929395989A9DA0A2A3A5A9ABADB1B3B6B7BBBDC1C4C5C9CBCED1D4D6D9DADCDEE0E4E5E7E9ECECEFEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFCFBFBFCFBF9FBF9FBFDFFF3F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D7D7D7D7D7D5D5D5D5D3D0D0D1D0D1D0C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E9B9999999999999B9B9B9B9E9E9E9FA1A2A4A5A8A8AAACAEB0B1B2B3B6B9BBBCBDBFC0C3C1C3C5C6CACBCBCECFD0D3D5D6D6D5D6D7D7D7D7D7DADADADAD9D9D7D6D5D5D5D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2A227262625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191917171717171717171716161616151515151514141414141515151414141414141414131313131313131313111212121212111111111111A7BDBDBDBDBDBDBDBDBDBDBD82100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000000000569C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9EE130000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F3F1F0EFEDECE9E8E7E5E3E0DDDCDAD7D4D1D0CCC9C7C4C1B7B6B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B19E8980808080808080808080828283838485868788898B8B8D9091929395989A9DA0A2A4A7A9ABAFB1B4B7B9BDBEC1C5C7CACCD0D3D4D7DADCDEE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F6F8F8F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEECECECEBEAEBECEBEFF8E6E1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1DFDFDFDFDFDFDFDEDEDEDEDCDBDBDBDBDCDBDBDBDCDCC7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A9A7A7A8A8A7A7A7A8A7A8A8AAA8ABACAEACB0B1B2B5B6B6B9BBBDBFC1C3C5C5C5C9C9CACBCBCFD0D1D5D5D7D9DADAD9DADCDBDADADBDADADADBDBDBDBDCDBDCDBDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDE9F2727262625252525252525252525252525242424232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191917171717171717171716161616151515151614141414141515151414141414141413131313131313131313121212121211111111111165BDBDBDBDBDBDBDBDBDBDBD42100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC40000000000000000000000000000000000000000000000000000068F9DA0A2A5A8AAADAFB2B5B8BBBDC0C3C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F96D000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFECECE9E7E5E4E1E0DDDAD9D6D4D0CECBC7C4BAB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD93817E7E7E7E80808080808082838385858687888B8B8D8F91929595999A9EA0A2A4A8AAADB1B3B5B7BABDC1C3C5C9CBCED1D4D6D9DADDE0E1E4E5E7E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF2F2F2F3F4F2F2F2F2EFF4FBEBE4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D5D3D5D5D3D5D6D6D6D6D5D5D3D3D5D5D5D6D6D7D5D3BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A39FA1A2A2A2A2A2A2A4A2A4A5A7A8AAABABACB0B1B0B1B2B5B6B9BBBBBDC1C1C4C4C5C8C9CACACBCECFCFD3D5D6D7D7D9D7D9D7D9DADADAD7DAD9DAD7D9DADBDADADADADADADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1A02727272625252525252525252525252525252424242323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171616161616151515151614141414141515141414141414141413131313131313131311121212121211111111113CBDBDBDBDBDBDBDBDBDBDB51410100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000000000379C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9D0000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECEBE8E7E5E3E0DEDCDAD7D4D3D0CCC7BBB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0927F7D7D7D7D7D7E80808080828384858687888B8B8D8F91939597999C9EA0A3A5A9ABAFB1B4B7B9BDBEC1C5C7CACCD0D3D6D8DADCDEE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E7E7E6E6E6E6E6E4E4E7F2E2DBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDBDBDBDBDBDBDBDCDCDBDBDCDCDBDBDBDADADADADADBDABBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ACACACACACABABABABACACACACAEB0B1B2B3B6B9BBBDC0C1C5C6C9CECFD0D1D3D7D9DADCDEDEDEE1E1E1E3E3E3E4E6E7E6E9EBEBEBEBEBEBEEEFEFECEEEFEEEEEFEEECECECEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D3D3D3D1D1D1D0D1D1D1D0D1D1D1D3D1D3D3D5D7D7D7D7D7D7D9D7D7D7D7D5D6D698272727272625252525252525252425252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919171717171717171717161616161515151516141414141415151514141414141414131313131313131313131112121212121111111111AEBDBDBDBDBDBDBDBDBD821010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD90000000000000000000000000000000000000000000000000000007C9DA0A2A5A8AAADB0B3B5B8BBBDC0C3C6C9CBCED0D3D6D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F94500000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F1F0EFEDECE9E8E7E4E3E0DDDCD9D7D4D1CEBFB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B08F7B7B7B7B7B7D7D7E8080808283858687888B8B8D90919395979A9CA0A2A4A7AAACB1B3B5B7BABDC1C3C5C9CCD0D1D4D7DADCDDE0E3E5E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E2E2E3E4E4E3E4E3E3E6F1E1D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E3E3E3E4E6E6E7E6E6E7E7E4E3E4E6E3E3E3E3E2E1E1DDB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ADAEACABAAABACACACACACACAEB0B1B2B3B5B6B6B9BBBCBFC0C1C3C3C4C5C6C6C9CACBCECFD0D1D1D3D5D6D7D7D7DADADADBDBDBDCDEDEDEDEDFDFDEDEDFDFDFDFE1E1E1E1E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBA927272727272625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191917171717171717171716161616151515151614141414141515151414141414141413131313131313131313121212121211111111117BBDBDBDBDBDBDBDBDBD3B101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000000000259C9FA1A4A6A9ACAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DBDDE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9BD000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F8F6F5F5F3F1F0F0EFECECE9E7E5E4E0DEDCDAD9D6D3C6B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6817B7B7B7B7B7D7D7E80808283848687888B8B8F90929395989A9EA0A3A5A8ABAFB1B4B7B9BDBEC1C5C7CBCCD0D3D6D9DADDE0E1E4E7E7E9ECEDEFF0F0F3F3F5F5F6F8F8F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCFCFBFDFDFCFCFCFDFDFFF3F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDADADADADADAD9D9D9D9D9D7D7D7D6D6D6D5D5D3D3D0C8B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A39F9E9E9E9E9EA1A1A1A1A2A4A5A5A5A7A7AAACAEAEB1B3B2B3B5B6B9B9BDBDBFC1C3C3C4C5C5C6C9CBCACBCBCECECECED0D1D3D5D6D6D7D7DADADADAD9D9D9D9D9D9DADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3A32727272727272625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717161616161615151515161414141414151514141414141414141313131313131313131112121212121111111143BDBDBDBDBDBDBDBDAE10101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000000000639DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DADCDEE1E3E5E7E9EAECEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F928000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFECEBE8E7E5E3E0DEDCDAD7D1BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3977A797B7B7B7B7D7E80808283848687888B8D8F91929597999CA0A2A4A7AAACB1B3B5B7BABDC1C4C7C9CCD0D3D4D8DADCDEE0E4E5E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E6E7E6E6E6E4E6E6E7ECF6E6DFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADAD9D7D9D9D9D9D7D6D6D6D6D5D7D6D5D6D5D3D3D3D3D3C7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7A5A4A4A4A2A2A2A5A5A7A7A8AAACACAEAEB1B2B2B3B3B6B8B9BCBDBFC0C3C5C5C6C8C9C9CACBD0D0D1D3D6D7D7D7DADADBDCDCDEDEDCDEDEDFE1E1E1E2E3E2E2E3E3E3E3E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2A2272727272727272625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171616161615151515161414141414151515141414141414141313131313131313131312121212121111111116BDBDBDBDBDBDBDBD7310101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000000000139C9FA1A4A6A9ACAFB2B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DBDDE0E2E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF995000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECEBE8E7E5E3E0DDDCD9CEB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D78787B7B7B7D7D80808283858687898B8D8F919395979A9DA0A2A5A8ABAFB1B4B7BABDC0C3C5C7CBCED1D4D7DADCDDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAEAEAEAEAEBEAEAEAEBEFF8E7E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDBDBDBDEDCDBDEDEDBDCDBDCDBDAD9D7D7D7D7D7D9D7C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7A8A8A7A7A8A7A7A7A8A8AAA8A8A8ABABACAEB0B1B3B5B8B9B9BCBDBDBDBFC1C4C5C4C5C6C6C6C9C9CBCECECFD1D1D1D5D5D6D7D6D6D7D7D7D7D7D9DADADADAD7D7D7D7D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6A7282727272727272626252525252525252525252525252424242323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919171717171717171717161616161515151516141414141415151414141414141414131313131313131313111212121212111111118ABDBDBDBDBDBDBD3B1010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED070000000000000000000000000000000000000000000000000000579DA0A2A5A8ABADB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DBDCDEE1E3E5E7E9EAECEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9EF13000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECE9E8E7E4E1E0DDDAC8B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1887878797B7B7B7D808082838586888B8B8D90929395999CA0A2A4A7AAADB1B3B6B9BDBEC1C5C7CBCCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E7E9E7E7E7E6E6E4E6EBF6E3DBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E4E4E4E4E4E4E3E3E4E3E3E1E1E1E1E1DFDFDFDEDEDCC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B5B5B3B3B3B5B5B5B3B2B3B3B2B2B2B2B3B6B6B6B9BBBCBDBFC1C1C3C5C6C6C9CACBD0D1D0D3D1D5D6D7D9D9DAD9DADBDBDBDEDEDFDFDFE1E1E1E1E1E1E1DFE1E1DFDFE1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDC9F28282727272727272626252525252525252525252525252424242323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171616161615151515151414141414151515141414141414141313131313131313131312121212121111111150BDBDBDBDBDBDAE101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A000000000000000000000000000000000000000000000000000006909FA1A4A7A9ACAFB2B4B7BABDC0C2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF96D000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F0F0EFECECE9E7E5E4E0DEDCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3927878797B7B7B7D808082838587888B8D8F919395979A9EA0A3A5A9ABAFB2B5B7BABDC1C4C7C9CCD0D3D6D9DADCDEE0E4E5E7E9ECEDEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EFF2F1EFEFF1EFF2F1F2F7FDECE9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDAD9D9D9D7D7D7D6D6D6D5D3D5D5D5D6D7D7D7D6D6D5D5BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ACAEAEACABACACABABABACAEAEB0B0AEAEB0B1B2B3B5B3B6B9B9BBBDBFC0C1C1C3C3C4C6C9CBCFCFD0D0D3D3D1D5D6D5D5D7D6D5D6D6D7D7D7D9D7D7D9D7D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3A32828282727272727272625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191917171717171717171716161616151515151614141414141515151414141414141413131313131313131311121212121211111123BDBDBDBDBDBD6510101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED070000000000000000000000000000000000000000000000000000459EA0A3A5A8ABAEB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9E50A000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F8F6F5F5F3F1F0F0EFECECE8E7E5E3E0DCC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B7878787B7B7D7E808083848687898B8D90929395999CA0A2A4A8AAADB1B4B7BABDC1C3C5C9CCD0D1D4D7DADCDEE0E3E5E7E9ECECEFF0F0F1F3F5F5F6F8F8F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E4E3E3E3E2DFE1E1E1E6F1E1D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E6E7E9EAE9EAE9E9E7E9E9E9E9EAE9EAEAEAE9EAEAE7BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B6B5B3B3B3B3B2B2B2B2B3B5B5B5B5B5B6B8B9B9BBBCBFBFC1C1C4C4C6C6CACBCED0CFD0D0D1D3D6D7D9D9DADADCDEDEDFDFE1E2E2E3E1E1E1E1DEDFDEDEDEDEDEDEDEDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDE9E282828272727272727272625252525252525252425252525242424232323232323232323232323222222222220202020202020416C241F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919194F5C191917171717171717171716161616151515151614141414141515141414141414141413131313131313131312121212121111111198BDBDBDBDBD2E10101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A000000000000000000000000000000000000000000000000000000849FA2A4A7AAADAFB2B4B7BABDC0C2C5C8CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF959000000000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECEBE8E7E5E3DDBEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7978797B7B7D7E8082838586888B8D8F919395989A9EA2A3A7AAADB1B3B6B9BDC0C3C5C7CBCED1D4D7DADCDDE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F9F9F9FBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E3E4E4E3E3E3E3E3E1E1E7F1E2DBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D3D3D3D3D1D1D1D0D0D0D1CFD0D0D0D1D3D5D5D3D5D3CDB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B5B5B5B5B2B5B5B5B5B5B8B6B9B9BCBDBDC0C1C4C5C5C6C9CACBCBCECFD0D1D3D5D9D9DADADBDCDCDFE1E1E2E3E3E4E6E6E6E7E7E9E9E7E7E7E6E7E9E9E9E9E9E9EAEAEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2A328282828272727272727272625252525252525252425252525242424232323232323232323232323222222222220202020202020AEA94D1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919192F92BD35191919171717171717171716161616151515151514141414141515151414141414141413131313131313131311121212121211111165BDBDBDBDA7101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED070000000000000000000000000000000000000000000000000000389EA1A3A6A9ABAEB0B3B6B9BCBFC1C4C6C9CCCED1D3D6D8DBDDDFE1E3E5E7E9EAECEDEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9D100000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECE9E8E7E4DFBEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A07878797B7B7D808082848687898B8F909295979A9DA0A3A5A9ABAFB3B5B7BBBEC1C5C7CBCCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEAEAEAEAEAECECECF1F9E9E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E3E3E4E4E4E4E3E3E3E3E4E6E6E6E4E4E4E4E3E3E3E4D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8C1C1C1C0BFBDBDBCBCBBBDBDBDBFBDBFBFC0C1C1C3C1C3C3C3C5C6C8C9C9C9C9CBCBCECFD0D0D0D3D3D5D5D5D5D3D6D7D7D9D9D7D7D7D7D9D7D7DAD7D7D6D7D6D6D5D3D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBA92828282828272727272727272625252525252525252525252525242424232323232323232323232323222222222020202020202079BDBD8E351F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191D6FBDBDA71919191917171717171717171716161616151515151614141414141515141414141414141413131313131313131312121212121111112FBDBDBDBD65111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000000000007EA0A2A5A8AAADAFB2B5B8BBBDC0C2C5C8CBCDD0D2D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF959000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECE9E7E7E4C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3997878797B7B7E8082838587888B8D90929395999CA0A2A4A8ABAFB1B4B7BABDC1C4C7CACCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E9E9E7E9E9EAEAEBEAEFF8E9E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDEDFDFDFE1E2E2E3E2E3E1E1E3E2E1E1E1E1E1E1E1DFC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBC3C3C3C3C3C3C3C3C3C1C3C3C3C3C4C4C5C5C8C8C9CACBCBCED0D1D3D5D5D7DADBDBDBDCDEDEDFE1E1E2E3E3E4E6E6E7E6E7E7E9EAEAEBECEBEBEBEBEBECEEEEEEEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDC9F2828282828282727272727272726252525252525252525252525252424242323232323232323232323222222222220202020202046BDBDBDB56C241F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A194FAEBDBDBD6919191919191717171717171717161616161615151515141414141415151514141414141414131313131313131313111212121212111111A7BDBDBD29111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED070000000000000000000000000000000000000000000000000000259FA1A4A6A9ABAEB1B4B7B9BCBFC1C4C7CACCCFD1D4D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9BD00000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F3F3F1F0EFEDECE9E7E5C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39578787B7B7D8080828486888B8D8F919395989C9EA2A4A8AAADB1B4B7BABDC1C3C7C9CCD0D3D4D8DADCDEE1E4E7E7E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEBEBECEEECEAEBEBECF1FBEAE3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E2E3E3E2E2E2E2E2E3E2E1E1DFDFDFE1DFE1DFDFE1DFC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BDBCBDBCBBBBB9B9B9B9B9B9B9BBB9B9B9BCBDBDBFBFBFBFC1C3C3C3C3C5C5C8C8C8CACACECECECECECECFD0D1D1D1D3D3D3D3D3D5D5D5D3D3D1D3D3D3D3D3D3D1D1D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3A42828282828282827272727272726262525252525252525252525252524242423232323232323232323232222222222202020202020AEBDBDBDBDA94D1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A3192BDBDBDBDBD351919191919191717171717171717161616161515151516141414141415151514141414141414131313131313131313121212121211111174BDBD981111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000000077A0A2A5A8AAADB0B3B5B8BBBDC0C3C6C8CBCED0D3D5D7D9DCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF93B000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F0F0EFEDECE9E7CBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C78797B7D7E8082838587898B8D909295979A9EA0A3A7AAADB1B3B7B9BDC0C3C5C9CCD0D1D4D7DADCDEE0E4E5E7E9ECEDEFF0F1F3F3F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFE2E1E1E2E3E3E2E1E1E6EFE1DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1DFDFE1DFDEDEDEDEDEDEDEDCDEDEDEDEDCDBDCDCDCDABBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBBBB9B9B9BBBBB9B9BCBCBBBBBCBCBCBDBDBFC1C3C3C3C4C5C5C9CACAC9CACBCFD0D1D3D6D7D7D9DAD9D9DCDCDEDFDFDFE1DEDEDEDFE1E1E1DFDFE1E2E3E4E3E4E4E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3DCDCDCDFDEDEE0DFDFDDDDDCDCDCDCDADADADCDCDCDCDFDFDDDDDDDDDDDDDDDCDCDCDEE0E1E2E3E0E0E0E1E1E3E4E5E5E5E4E4E4E2E3E3E4E2E1E1E1E1E1E2E3E2E2E3E3E5E4E4E4E4E6E5E6E4E4E3E5E6E6E6E6E6E9E7E7E7E6E6E7E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F1EFEFEEEEEEEEEEEEECECEBEBECECECECECECECEBEBECEBEBEBEBEBEBEBEBEBEBEBEDECECECECEEEFEEEEEBEBEBECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE9E8E6E6E6E6E6E8E8E8E7E7E6E6E6E6E5E5E5E2E3E1E1DFDFDFDCDDDDDDDDDBDCDCDCDADADDDCDCDBDBDAD9D9D98C282828282828282827272727272726262525252525252524252525252424242423232323232323232323232222222222202020202079BDBDBDBDBDBD8E351F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1E71BDBDBDBDBDBDA719191919191919171717171717171717161616161515151516141414141415151414141414141413131313131313131311121212121211113CBDBD5D1111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9070000000000000000000000000000000000000000000000000000199FA1A4A6A9ACAFB1B4B7B9BCBFC2C5C7CACDCFD2D4D6D8DBDDDFE1E4E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9BD00000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F0F0EFECECE9D8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B17F787B7B7D8080838587888B8D909295979A9DA0A3A5A9ACB1B3B6B9BDBEC3C5C7CBCED1D4D7DADCDEE0E4E5E7E9ECEDEFF0F0F3F3F5F6F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBFCFBF9FBF9FBF9FBFDFFF4F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D3D1D0D3D3D3D3D3D3D5D5D1D1D0D1D3D3D5D5D3D5D5D2B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B6B5B5B5B5B5B6B6B6B8B8B6B6B6B8B8B9BBB9BBBDBDBDBDBFC0C1C3C4C4C5C6C5C6C6C8C9CBCFCFD0D0D1D3D6D6D7D7D6D7D7D7D7D7D9DADADBDAD9D9D7D6D5D5D5D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCC6534B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A494949494949494949484848484848484847474747464648484747484849484A4A4C4C4D4F51525456585C5E616366676C6E74777A7F82868B90939A9DA4A8ABB0B5BABDC0C5CACFD2D2D8DADEDFE2E4E6E7E8E9EAEAEAEAEAEAEAE9E7E7E6E4E2E1DCDCD8D6D2CFCDC8C4C1BDBAB4B2ADA8A4A09B9793918A8783807B7875706F6B6764605E5A59565352504B4A4846464442413F3D3D3B3B3A39383736363535353332323131303030302E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292828282828282828272727272727262525252525252525242525252524242423232323232323232323232322222222202020202046BDBDBDBDBDBDBDB56C241F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B4FAEBDBDBDBDBDBDBD6B191919191919191917171717171717171616161615151515161414141414151515141414141414141313131313131313131212121212111116B5BD23111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5500000000000000000000000000000000000000000000000000000065A1A3A6A8ABAEB0B3B6B8BBBEC1C3C6C9CBCED0D3D5D8DADCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF928000000000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F0F0EFECECE4B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA7A7B7B7D8080838586888B8D90929395999CA0A2A5A9ABB1B3B5B7BDBEC1C5C7CBCED1D4D7DADCDEE0E3E5E7E9ECECEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F1F1F1F1F2F3F2F2F3F4FBFFEFEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E1E1E1E1DFDFDFDFDFE1DEE1E1E1DFE1DFDFDFDFDFD6B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BFC0BFBFBFBFBFBFBFBFBDBDBFBFC0C1C3C3C5C5C6C8C8CACBCBCED0D1D3D3D5D6D7D7D7D9DADADADBDBDFDFE1E1DFE1E1E1E2E4E6E6E4E6E6E6E4E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7954B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A49494949494949494848484848484848474747474646484848474849494A4A4A4C4D4D4F51535657595B5F616467696D7173777B8081888B90949A9EA4A8ACB0B5B9BDC0C5C9CDD0D2D7D8DDDCE1E3E3E6E6E8E8E8E8E8E8E8E6E6E5E4E2E1DFDCDAD7D5D2CECBC5C4C1BBB8B4B2AFA9A5A09B9794918C8785807C7773726F6C6764625E5B59565352504E4A484747444342403E3D3B3B3A3939373736353535353332313131303030302E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292928282828282828272727272727272625252525252525252525252525242424232323232323232323232322222222222020202020AEBDBDBDBDBDBDBDBDA94D1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B3194BDBDBDBDBDBDBDBDBD36191919191919191919171717171717171716161616151515151614141414141515141414141414141313131313131313131112121212121111829811111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD900000000000000000000000000000000000000000000000000000019A0A2A5A7AAADAFB2B4B7BABDC0C2C5C7CACDCFD2D4D7D9DBDDE0E1E4E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF99F00000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1F0F0EFECECC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E797B7D8080828486888B8D8F919395999CA0A2A4A9ABAFB2B5B7BBBEC1C5C7CBCCD0D4D7DADCDEE0E3E5E7E8ECECEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E9E9E9E9E7E9E9E7E7EAF3E4DCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D7D7D7D7D5D5D7D7D7D9DADAD9DAD9D7DADAD9DADAD9CBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDCACACACAC9C9C9C8C8C9CACACACACACACBCBCFD0D0D1D3D3D5D6D6D7D9DADBDBDCDCDCDBDEDFE1E1E2E3E3E6E6E6E6E6E6E7E9E7E7E9E9E7E6E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE16C4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A49494949494949494948484848484848484747474746484848474849494A4A4C4C4D4E4F52535657595B5F6265676B6E7174777B8183888B9394999EA3A8ABB0B5B9BDC0C4C8CAD0D1D6D9D8DCDEE1E2E3E4E5E5E6E6E6E5E4E4E4E1E1DCDCDAD8D6D2D0CECAC8C2BEBCB8B4B0ADA8A4A29B98948F8C8885807C7975716F6C6764625E5C59565452504E4C494747444342403F3D3D3B3A3939393736363535353333313131303030302E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292928282828282828272727272727272625252525252525252525252525242424232323232323232323232322222222222020202079BDBDBDBDBDBDBDBDBDBD8E341F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1F71BDBDBDBDBDBDBDBDBDBDA7191919191919191919191717171717171717161616161615151515141414141415151514141414141414131313131313131313121212121211114A581111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5500000000000000000000000000000000000000000000000000000066A1A4A6A9ABAEB0B3B6B9BCBEC1C4C6C9CBCED0D3D6D8DADCDEE1E2E5E6E8EAEBEDEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF928000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1F0F0EFECD2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3877B7D7E80828486878B8D8F919395999CA0A2A4A8ABAFB2B5B7BBBEC1C5C7CBCCD0D4D7D9DCDDE0E3E5E7E8ECECEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDCDEDEDFDEDEDEDEDEDEE3ECDED9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDCDCDEDEDEDEDCDCDBDBDBDBDAD9DAD7D9D7D6D7D9C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7BFBFBFBFBFBFBDBCBCBBB9BBBBBCBCBCBCBDBCBCBCBCBCBDBFC0C0C3C3C3C4C5C8C9C8C8C8C8C9C9CBCED0CFCED0CFCFD0D0D0CFCFD0CFD0D0D0D3D3D5D5D5D6D6D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DECD534B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A494949494949494948484848484848484747474748484848484849494A4A4C4C4D4E4F525456585B5D5F6265676A6D7074797B8185898D9395999EA4A7ABB0B4B8BBBEC1C8C9CDD0D2D6D8D8DCDEDEE1E1E1E3E3E3E2E2E2E1DFDCDBDAD8D6D2D0CECBC8C5C2BEBBB8B3B0ACA6A2A09D98948F8D8785807C7975716F6C6866625F5C5A565452504E4C4A4746444342413F3E3D3D3B3A39393836363535353333313131303030302F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B292929292929292929282828282828282727272727272726252525252525252525252525252424242323232323232323232323222222222220202046BDBDBDBDBDBDBDBDBDBDBDB56C231F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B50AEBDBDBDBDBDBDBDBDBDBDBD6B191919191919191919191917171717171717171616161615151515161414141414151514141414141414131313131313131313111212121212111D1C1111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC400000000000000000000000000000000000000000000000000000019A0A2A5A8AAADAFB2B5B8BBBDC0C2C5C8CACDCFD2D4D7D9DBDDE0E2E4E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF99F00000000000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1F0EFEDE7B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA7C7B7E80828386878B8B8F919395989CA0A2A4A8ABAFB1B5B7BABEC1C4C7CBCCD0D4D6D9DCDDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E6E4E6E7E7E9E6E7E7E7EBF3E4DEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADAD9DADADADADADBDBDBDBDADADBDADADADADADADADAD9BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC5C4C5C5C5C5C5C5C4C3C3C5C5C5C5C5C8C8C9C9CACBCECFCFD0D0D0D0D1D0D1D1D5D5D7D9D7D9DADADADADADBDBDCDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDEDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1B34D4D4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494948484848484848484747474748484848484849494A4A4C4C4D4F51525457585C5E5F6265686A6E7177797D8186898D9194999EA4A5ACB0B3B8BABEC1C5C9CBCFD0D5D6D9D8DCDCDDDEDEDFDFE1DEDCDCDCDAD8D7D6D5D1CFCDCAC5C4C1BEBAB7B2B0ACA6A5A09B97948F8D8883807C7975726F6C6864625F5D5957545250504C4A4847464342413F3E3E3D3C3A39393837363535353333333131303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929292828282828282827272727272727262525252525252525252525252524242323232323232323232323232222222220202020AEBDBDBDBDBDBDBDBDBDBDBDBDA94C1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B3294BDBDBDBDBDBDBDBDBDBDBDBDBD361919191919191919191919171717171717171717161616161515151514141414141515151414141414141413131313131313131312121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3500000000000000000000000000000000000000000000000000000066A2A4A7A9ACAEB1B4B7B9BCBFC1C4C7C9CCCED1D3D6D8DBDCDEE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF928000000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1F0EFEDC8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3947B7E8082838587898B8F919395989CA0A2A4A8ABAFB1B5B7BABEC1C4C7CACCD0D3D6D9DCDDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBECEBEBECEBEAEBECECEFF9E7E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1DFDEDEDEDEDEDEDFDFDFDFDEDEE1DEDEDEDEDFDEDEDEDCBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCC5C6C5C4C5C4C4C4C4C4C3C4C4C5C4C4C4C5C5C6C5C6C8C9C9C9C9CBCFD0D0CFD0D0D5D6D6D7D9D9DADADCDCDEDEE1E1E1E3E1E1E1E1E1DEDEDEDEDCDBDEDEDEDEDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEE7D4D4D4D4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A49494949494949484848484848484847474747484848484849494A4A4C4C4D4D4F51525657585C5E616366696D6E71767A7D8186898D91949A9EA2A5ABAEB0B7BABDBEC4C6C9CECFD1D2D5D6D7D8D8DCDADCDADADAD8D7D7D7D6D2D0D0CECBC5C5C1BEBCB8B4B1ADA9A6A1A09A95938F8D8886807C7975726F6C6A64635F5C5A57545250504E4A494746434341403E3E3D3C3B3939383737353535353333323131303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828282827272727272726262525252525252524252525252424242323232323232323232323222222222220202079BDBDBDBDBDBDBDBDBDBDBDBDBDBD8E341D1D1D1D1D1D1D1D1D1D1D1D1B1B1B2071BDBDBDBDBDBDBDBDBDBDBDBDBDBDA71A191919191919191919191919171717171717171716161616151515151614141414141515141414141414141313131313131313131112121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0000000000000000000000000000000000000000000000000000000CA1A3A6A8ABAEB0B3B6B8BBBDC0C3C6C8CBCDD0D2D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF99F0000000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1F0EFE0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B17F7D8082838587898B8F919395989C9EA2A4A8ABAFB1B4B7BABDC1C4C7CACCD0D3D6D9DCDDE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7E9E9E9E9E9E7E6E7E7EEF8E7DFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E6E4E4E3E3E2E3E3E2E1E1E1E1E1E1E1DFDFDFE1E1E1DDB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCC6C5C5C5C4C4C4C4C4C5C5C5C5C8C6C6C5C6C6C6C8C8C9C9C9CACACBCED0CFD0CFD1D3D5D6D6D7D9DADCDADBDBDCDEDEDCDEDEE1E1E1E2E2E3E3E2E2E2E2E2E3E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBD2584D4D4D4D4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A49494949494949494848484848484847474747484848494849494A4A4C4D4D4E5152535657585C5F616366696A6F71767A7B8186898D9194989DA1A5AAACB0B5B8BBBEC1C4C8C9CDCFD1D1D2D5D6D6D7D8D7D8D7D8D6D5D5D2D0CFCDCAC8C6C2BEBCB8B7B4B0ADA8A5A29F9A96918F8B8783817C7975726F6B6A66635F5D5A57565350504E4C494747444341403E3E3D3C3B3A3938383736353535353332323130303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292828282828282828272727272727262525252525252525252525252524242423232323232323232323232222222222202046BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB56C231D1D1D1D1D1D1D1D1D1D1D1B50AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1A1A1919191919191919191919191717171717171717161616161515151516141414141515151414141414141413131313131313131312121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF230000000000000000000000000000000000000000000000000000005AA2A5A8AAADAFB2B4B7BABCBFC2C5C7CACDCFD1D4D6D8DBDDDFE1E3E5E7E9EAECEDEFF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9280000000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1F0EFC4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39A7E8082838587898B8F919395989CA0A2A4A8ABAFB1B5B7BABEC1C4C7CACCD0D3D6D9DCDDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E3E4E3E3E1E2E3E3E3E7EFE1DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADADADAD9D9D7D7D9D9D7D7D6D6D7D7D7D6D5D5D3CDB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDCBCACACACACACACACAC9CAC9C9C9C9CACACACBCBCBCBCBCACACBCBCECECFD0D0D1D1D3D3D3D5D7D7D6D7D5D6D5D5D6D7D7D7D9DADBDADBDEDEDEDEDEDEDEDEDEDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEB14D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A49494949494949494848484848484848474748484848494849494A4A4C4D4D4E51525356575A5B5F616467696D6F73777A7D8186898B9094999D9FA4A8ACAFB3B7BABCBEC1C4C8C9CBCFD0D1D1D2D1D2D2D2D5D5D2D1CFD0CECACAC7C5C4BEBDBCB7B5B2AEABA8A2A09D9A96918F8A8583817C7875736F6B6966635F5D5A57565352504E4C4A4747444341403F3E3D3B3B3A393838373636353535353232323030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292928282828282828282727272727272625252525252525252525252525242424232323232323232323232322222222222020AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA94B1D1D1D1D1D1D1D1D1D3294BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD361A1A1919191919191919191919191717171717171717161616161515151516141414141415151414141414141413131313131313131311121212121111111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D0000000000000000000000000000000000000000000000000000000C9BA4A6A9ABAEB0B3B6B9BCBEC1C4C6C9CBCED0D3D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF99F00000000000000000000000000000000000000000000000000000007EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1F0E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B28180828386878B8B8F919395999CA0A2A4A8ABAFB1B5B7BABEC1C4C7CBCCD0D4D6D9DCDDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4F4F4F3F3F2F2F2F2F1F4FBECE6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E2E2E1E1E1E2E2E1DFDEDEDBDBDBDCDBDBDBDBDBDBDBCFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C1CFCFCFCFD0D0D0D0CECFCFD0D0D3D3D5D3D5D5D5D5D5D6D7D7D7D9DADCDCDEE1DEDEE1E1E1E1E1E1E3E3E3E3E4E3E2E2E1E1E1E3E3E3E6E3E3E4E6E6E7E9E9E7E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADA884D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949494848484848484848474748484848494849494A4A4C4D4E4E51525356575A5B5F616466696D6E73777A7B8186888A9093979B9EA3A7ABB0B0B5B8BBBCC0C1C4C8C9CACACDCDCFCFCFD0D0CECECFCBCBC8CAC5C5C2C0BDBCB8B6B4B0ADA9A5A1A09A9893908D8A85827E7C7975716F6B696662615D5A57545352504E4C4A4847444342403F3E3D3D3C3A39383837363635353535323232313030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292928282828282828272727272727272625252525252525252525252525242424232323232323232323232322222222222079BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8E341D1D1D1D1D2271BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91A1A1A1A1919191919191919191919191717171717171717161616161515151516141414141515151414141414141413131313131313131312121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60F00000000000000000000000000000000000000000000000000000066A3A5A8AAADAFB2B5B8BBBDC0C2C5C8CACDCFD2D4D7D9DBDDDFE1E3E5E7E9EAECEDEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF92800000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1F0C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B80828486878B8D8F919395999CA0A2A4A8ABAFB2B5B7BBBEC1C5C7CBCCD0D4D7D9DCDDE0E3E5E7E8ECECEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E6E6E9E9E9EAE9E9E9E9EEF6E6DEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDCDCDCDCDEDEDCDBDBDBDADADADAD7D9D9D9D9DADAC6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C2D1D1D0D0CFD0CFCFCECBCBCBCFCED0CFD0D1D1D3D3D3D5D5D5D6D6D7D9D9DADADADCDCDCDBDCDEDEDEDEDEDEE1DFE1E1DEDEDEDFDFDFE1DFDFDFE1E1DEDEDEDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E2674D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A49494949494949494848484848484847474848484849494A494A4C4C4D4E4E51525456585A5B5F636466696D6E73777A7B8184868B8E9395999EA1A4A8ACB0B2B5B8BBBCBEC1C3C5C6C9CAC9CACBCACACAC8CAC8C9C6C5C4C1C0BDBBB8B6B5B0AEABA7A5A09D9A9693908C8885817D7C7775716F6C6964635F5C5A59545352504E4C4A4847474342403F3E3D3D3C3A39393837373635353535323232313130303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292929282828282828282727272727272726252525252525252525252525252424232323232323232323232323222222222046BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB56C231D1D51AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1A1A1A1A1A19191919191919191919191717171717171717171616161615151516141414141415151414141414141413131313131313131311121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000000000001AA2A4A7A9ACAFB1B4B7B9BCBFC1C4C7C9CCCED0D3D6D8DADCDEE1E2E4E6E8EAEBECEEEFF1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9B400000000000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B283828486888B8D8F919395999CA0A2A5A9ABAFB2B5B7BBBEC1C5C7CBCCD0D4D7DADCDEE0E3E5E7E9ECECEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E3E3E4E4E6E6E4E6E6E7EAF4E6DEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDCDBDBDEDEDCDCDCDCDBDADADBDCDCDBDBDADBDBDCDEC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C2D0D0D0CED0D1D1D3D1D3D3D3D5D3D3D3D3D3D3D3D6D6D7D7D7D9D9DADBDCDEDFE1E2E3E4E6E9EAEAEAEBEAECEEEEEEEFEEECEFECECEEECECECEEEEECEEEFEFEFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7D1544D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949494848484848484847474848484849494A4A4A4C4C4D4E4F51525456585A5B5F636466696D6E7177797C8084858A8D9394989D9FA3A5AAAEAFB2B4B7BABBBBC0C0C3C4C5C5C6C5C6C6C6C5C5C5C2C1C0BDBCBAB7B8B4B0AFADA8A6A2A09B9995918F8B8885827D797773716E6C6764635F5C5956555352504E4C4A4847454342413F3E3D3D3C3A3A39383737363535353532323231313130303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292828282828282827272727272726262525252525252524252525252424242323232323232323232323222222222220AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA95894BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD361A1A1A1A1A19191919191919191919191917171717171717171616161615151515161414141415151514141414141414131313131313131313121212121211111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD90000000000000000000000000000000000000000000000000000000067A4A6A9ABAEB0B3B6B8BBBDC0C3C6C9CBCDD0D2D4D7D9DCDDE0E2E4E5E7E9EBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF93C00000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B392838586888B8D90929397999DA0A2A5A9ACB1B3B5B7BDBEC1C5C7CBCED1D4D7DADCDEE0E3E5E7E9ECECEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBECECEEEFF1EFEFEFEFF6FCECE4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9E9E9E9E9E9E9E9E9E6E6E6E6E6E6E4E4E6E7E6E6E6BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C0CFCED0D0CFCFCFCFD0CFCFD0D0D0D0D0D0D0D1D1D1D1D1D1D3D5D3D5D5D7D7D7D6D5D5D7D7D7D9D9DADADBDCDBDEDEDEDBDCDEDCDBDEDBDEDEDCDCDBDBDBDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBB04D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949494848484848484847474848494849494A4A4A4C4C4D4E4F51525456585C5D5F636466696D6E7077777B7F8286898B909397999EA2A4A7AAAEB0B2B4B7B9BBBBBBBEC0C1C1C1C1C1C1C1C0BEC0BDBCBAB7B7B7B4B1AFADA8A6A3A19D9897928F8D8A85827E7D797573716D6B6764635F5D5B57555352504E4C4A484745444241413E3D3D3C3B3A3A3837373635353535353232313131312F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929292828282828282827272727272726252525252525252525252525252424242323232323232323232323222222222279BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91B1B1A1A1A1A1A19191919191919191919191917171717171717171616161615151515141414141415151414141414141413131313131313131311121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000000000000000000000000000000000000000000000000000001AA2A5A8AAADAFB2B4B7BABDBFC2C5C7CACDCFD1D4D6D8DBDDDFE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9BD00000000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7838587898B8D909295979A9EA0A3A5A9ACB1B3B6B9BDC0C3C5C7CBCED1D4D7DADCDEE0E4E5E7E9ECEDEFF0F0F3F3F5F6F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFEEEEEBECECEBEAEAEAEEF7E6DEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E1E1E1E1E1DFDEDEDEDEDBDADADBDBDBDADAD9D9DADAD8B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C0CBCBCECECFCECBCECECECECECFCECECECBCECFD0D0D0CFD0CFD0CFCECFCECFCFCFCFD0CFCED0D0D1D3D5D6D6D6D7D6D7D7D9D9D7D7D7D9D7D7D7D7D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E17F4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494848484848484848484848494949494A4A4A4C4C4D4E4F51525457585B5B5F636466696D6D7074777B7F8285888B8E9294989B9FA4A4A7AAAEAFB0B3B5B7B9BABABBBBBBBBBDBDBCBCBBBABAB8B8B7B4B3B1ADADAAA5A3A19F9A9995908F8C8885827E7C787573716D6A6764625E5B5A57565352504F4C4B49474544424141403D3D3C3B3A3A393737363535353535323231313131302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272727262525252525252525252525252524242423232323232323232323232222222249BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1B1B1B1A1A1A1A19191919191919191919191917171717171717171616161615151515161414141414151514141414141414131313131313131313121212121211111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB90000000000000000000000000000000000000000000000000000000068A4A6A9ABAEB1B4B6B9BCBFC1C4C6C9CBCED0D3D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF93C00000000000000000000000000000000000000000000000000000019F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F6F5F3DFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3878687898B8F919395979A9EA0A3A7AAADB1B4B7B9BDC1C3C5C9CCD0D1D4D8DADCDEE0E4E5E7E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E6E6E6E6E7E7EAE9E9EEF8E7E1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1DFE1E2E2E3E3E3E3E2E2E3E2E1E2E2E2E1E1E1E1E1E1DAB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C6DADADADAD9DAD9D7D9D9D9D9D7D7D7D7D7D9DAD9D7D9DADADADAD9DADBDBDADCDBDEE1DFDFDEDFDFE1E1E2E2E3E4E4E4E4E3E6E4E4E3E3E3E2E2E2E3E2E2E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D3604D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494848484848484848484848494949494A4A4A4C4C4D4E4F51525456585B5B5F616466696C6E7073767B7B8181858A8D9093979A9D9FA3A4A8AAACADB0B2B3B5B7B7B8B9B9B9B8B8B8B8B8B5B5B4B3B1AFADA9A9A6A5A19D9B9995918F8C8A8684827E7A7773716F6C6A6662615D5B5958565352504F4B4A48484544424141403F3D3C3B3A3A393837363535353535323231313131303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292928282828282828272727272727272625252525252525252525252525242424232323232323232323232322222222AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD361B1B1B1A1A1A1A1A191919191919191919191919171717171717171716161616151515151414141414151514141414141414131313131313131313121212121211111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62300000000000000000000000000000000000000000000000000000020A3A6A8ABAEB0B3B6B8BBBDC0C2C5C8CACDCFD2D4D7D9DBDDDFE1E3E5E7E9EAECEDEFF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFBFAC70000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5CBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D86888B8D8F919395999CA0A2A4A8AAADB1B4B7BABDC1C4C7C9CCD0D3D6D9DADCE0E1E4E7E7E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF7F7F8F8FBFBF8F9F8F8FBFFF2EEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D7D7D9DADADADADBDADADADADBDCDBDBD9D9D9D9D9D9CCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBC8C8C8C8C8C8C8C6C6C5C6C6C6C9C9C9CAC9CBCBCBCACAC9C8C9CACBCACACACBCBCBCECBCACBCECECECFCFCFD0D0D0D0D1D3D1D3D5D5D5D5D5D5D5D6D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDAC1544D4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A494949494949494948484848484848484848494949494A4A4A4C4D4D4E4F51525456585B5D5F616365686B6E6F74767A7B808285898A8E9394989A9D9FA2A4A7AAAAACADAFB0B0B2B3B3B4B4B4B2B3B3B3B2AFAFADABAAA6A5A2A09F9A999591908F8B8786827E7D797573716E6A696463615D5B5957555351504E4B4A48484544424140403F3D3C3B3A3A39383836353535353533323131313130302F30303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292828282828282827272727272727262525252525252524252525252424242323232323232323232323222222227ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91B1B1B1B1B1A1A1A1A1A191919191919191919191917171717171717171616161615151515161414141414151514141414141414131313131313131311121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000000000007BA5A8AAADAFB2B4B7BABCBFC2C4C7CACCCED1D3D6D8DADCDEE1E2E4E6E8EAEBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF95A00000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A887888B8D90929397999CA0A2A5A8ABAFB2B5B7BABDC1C4C7CACCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDCDEDEDEDEDEDEDEE1E1E6EEE1D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1DFDFE1DFDEDEDCDCDBDADBDBDBDADADAD9DAD7D9D9D7C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDCBCACBCECBCBCECECACACBCECFD0D0D0D0D0D0D0D1D0D0D0D0D0D0CFD0D1D1D1D1D1D1D5D5D5D3D3D5D3D3D5D5D6D6D6D7D7D9DADAD7D7D9DADBDADBDCDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3AA4D4D4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A494949494949494948484848484848484849494949494A4A4A4C4C4D4E4F51525456585B5D5F616365676A6D6F7374777B7F818186898B8E9394989A9D9FA1A4A5A7A9AAACAEADADAEAFAFAFAFADADADADABAAA9A7A6A3A2A09D9C999593908F8B888684827D797876726F6D6A676562615D5A5956555352504C4C4A4848464342413F403F3D3D3B3A3A3938383735353535353333313131313030302F30303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292929282828282828282727272727272626252525252525252525252525242424232323232323232323232322222249BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1B1B1B1B1B1B1A1A1A1A191919191919191919191919171717171717171716161616151515151414141414151514141414141414131313131313131313121212121211111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3070000000000000000000000000000000000000000000000000000002DA4A6A9ABAEB1B3B6B9BCBEC1C4C6C9CBCED0D2D5D7D9DCDDE0E2E4E5E7E9EAECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAD10A00000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5E8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3898B8B8F919395979A9EA0A3A5A9ACB1B3B5B7BDBEC1C5C7CBCCD0D4D7D9DCDDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EBEAEAE9E9E9E9E9E9EAEEF6E4DCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D7D7D7D7D7D9D7D7D9D7D7D7D7DAD9D9D9DADADABFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4D5D5D5D5D5D3D3D1D1D1D1D1D3D5D5D3D3D1D1D1D3D5D6D7D7D7D7D7D9DADAD9DADADADADADADADBDCDADCDEDEDEDEDEE1E1E1E1E1E1E2E3E4E3E3E3E3E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E78A4E4E4D4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4949494949494948484848484848484849494949494A4A4A4C4C4D4E4F51525456575B5C5E5F6365676A6D6D7073777A7B7F8185888A8D909394979A9B9D9FA0A3A5A5A7A9A9AAAAACACACAAAAA9A9A7A6A5A4A1A09F9C9A999695908F8C888683827F7C79757272706B6A666461605C5B59565353514E4C4A494847464442403F3F3F3D3D3B3A39393838373635353535333332313131303030302F30303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2929292929292929282828282828282827272727272726252525252525252525252525252424242323232323232323232323222222B0BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD371B1B1B1B1B1B1A1A1A1A1A1919191919191919191919171717171717171716161616151515151614141414151515141414141414141313131313131313111212121211111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C0000000000000000000000000000000000000000000000000000000089A6A8ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD2D4D6D8DBDDDFE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF96D00000000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFAF9F9F9F8F7F6F5D6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3948B8D8F919395999C9EA2A4A8AAADB1B3B7B9BDC0C3C5C7CBCED1D4D7DADCDEE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F8F8F6F8F8F8F8F9FBFDFFF3EFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDADADBDEDBDBDADADADADADAD9D9D9D9D7D7D7D7D7D6BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BECACAC9C9C9C9CACACACBCBCBCBCBCACACAC9C9CACBCAC9C9CACACACBCBCACBCBCBCBCBCBCECECFCFCFD1D3D1D1D3D3D5D3D3D5D5D6D7D7D6D7D7D6D6D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD4674E4E4D4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494948484848484848494849494949494A4A4A4C4C4D4E4F5152545657595C5D5F636467696C6E717377777B7F808186888A8D9093949598999B9E9FA0A3A3A3A4A4A5A4A6A5A5A4A4A3A3A09F9F9C9B98979593908F8B88868682807D79777572706D6B676563615D5B595855535351504D4A494847454443403F3F3E3D3D3C3B3A39383837363635353533333232313130303030302F303030302F2F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282828272727272727272625252525252525252525252525242424232323232323232323232222227ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191919191717171717171717161616161515151514141414141515141414141414141313131313131313131212121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9000000000000000000000000000000000000000000000000000000003AA5A8AAADAFB2B4B7B9BCBFC1C4C7C9CCCED0D3D6D8DADCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAE5140000000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F8F6F5C7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A08B8F90929597999DA0A2A4A8ABAFB1B4B7BABDC1C3C5C9CCD0D1D4D8DADCDEE0E4E5E7E9ECECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9EAEAEAEAE9EAEAEAEAEEF8E7E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E4E6E4E4E4E4E6E6E6E4E4E3E2E3E4E3E3E2E3E1E1E1DEB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C5D7D6D7D7D7D7D9D9D9D9D7D7D7D7D9D9D9D7D7D7D7D7D7D7D9D9DAD9DADADADADEDEDEE1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E3E3E3E3E2E3E3E4E4E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DACA544E4E4E4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494949484848484848494849494949494A4A4A4C4C4D4E4F5151535657595C5D5F616365686B6D6E707376797B7F808185898A8C8E919294959899999C9E9F9F9F9FA0A0A0A0A0A09D9D9C9B9A97969593908F8E8B8A868682807D7C7A7572716E6C6A676462605D5B5958555352514E4C4B494846454442413F3F3E3D3D3C3B3A3A38383735363635353333323232313030303030302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272727262525252525252524252525252424242323232323232323232323222249BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191717171717171716161616151515151614141414151515141414141414131313131313131313121212121211111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6190000000000000000000000000000000000000000000000000000000697A6A9ACAEB1B4B6B9BCBEC1C3C6C9CBCDD0D2D4D7D9DBDDE0E1E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF98C000000000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB8D8F919395989A9EA0A3A5A9ACB1B2B5B7BBBEC1C4C7CACCD0D3D6D9DADDE0E1E4E7E7E9ECEDEFF0F0F3F3F5F6F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEBEBEAECEAEAEAEBEBEFF9E9E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E3E2E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFE1DFDEDEDED6B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C5DADAD7D7D7D7D9D9DADADBDCDCDCDADADADADADBDADAD9D9DADADBDEDCDEDEDEDEDFE1E1E1E1E1E2E2E2E1E2E2E2E2E2E3E3E3E3E4E3E3E4E4E4E4E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEB94E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494949484848484848494849494949494A4A4A4C4C4D4E4F5151535657595C5B5F616365676A6A6E707377777A7B80808185888A8B8D9091919495979999999A9D9A9A9B9A9B9B9A999996969595918F8E8C8B87868482817D7C7A7574726F6D6B676564615F5B5B5957555351504E4C4B49484645434241403E3E3D3C3C3B3A383837373535363535343332323232303030303030302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282828272727272727272625252525252525242525252524242423232323232323232323232222B0BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD381B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191717171717171717161616161515151514141414141515141414141414141313131313131313111212121211111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000000000004EA6A9ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD1D4D6D8DBDDDEE1E2E5E6E8EAEBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAEF2800000000000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B28F90929597999CA0A2A4A8AAADB1B3B6B9BDBEC1C5C7CBCCD0D4D6D9DCDDE0E3E5E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E6E4E6E6E4E3E3E3E3E9F3E3DBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1DFDFDFDFDFE1DFDFDEDFDFDFDEE1E1E1E3E2E1E1E1E1D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C9DFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDEDFDFE1E1E2E1E2E1E1E2E2E1E2E2E2E2E2E2E3E3E2E2E2E3E3E2E3E1E2E3E3E2E3E3E4E6E4E3E3E3E3E3E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7974E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494949484848484848494849494949494A4A4A4C4C4D4E4F5151535657585A5C5E5F636466686B6D6E717477797B7D7E81818687898A8C8E909191929495959596969696969595959591919090908C8B88868682827F7D7C79777572706D6A68676462605D5B595857535351504E4C4A494946444442413F3F3D3C3C3C3B3A39383737353536363434343232323231303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292828282828282827272727272726252525252525252525252525252424242323232323232323232323227ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191917171717171717161616161515151516141414141515151414141414141313131313131313131212121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9070000000000000000000000000000000000000000000000000000000D9FA8AAADAFB2B4B7BABCBFC1C4C6C9CBCED0D3D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAA90000000000000000000000000000000000000000000000000000000023F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B390929395989A9EA0A3A5A9ABAFB1B4B7BABDC1C3C5C9CCD0D1D4D7DADCDEE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFDFE1DFDFE1E1E1DFE3ECDED7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD7D7D9D9D9D9D7D9D9D7D9D7D6D6D6D6D6D6D6D6D6D5C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4D6D6D5D5D3D3D3D3D1D1D1D1D1D1D1D1D1D1D3D1D1D0D1D0D0D0D0D1D3D3D3D5D5D7D7D7D6D7D7D7DAD7DADBDEDEDEDEDEDEDEDFE1DFDFE1DFDFE1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDC7E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484848494849494949494A4A4A4C4C4D4E4F515152545657595C5E5F61636567696A6E6F717476797B7B7F80818585868A8A8C8D8D8E9090919291919291919090908E8E8C8C8B8A88868482817F7D7C78767472716E6C6A676462615F5C5B5857545352514F4C4B4A484947444442403F3F3E3C3C3C3C3A39393637353536363534343332323231303030303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292928282828282828282727272727272625252525252525252525252525242423232323232323232323232249BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191917171717171717171616161615151515141414141415151414141414141413131313131313131112121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000000000000069A7A9ACAFB1B4B6B9BCBEC1C3C6C8CBCDD0D2D4D7D9DBDDDFE1E3E5E7E9EAEBEDEEF0F1F2F3F4F5F6F7F8F8F9FAFBFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF93C0000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7DCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B395939597999CA0A2A4A8AAADB1B3B5B7BBBEC1C4C7CACCD0D3D6D8DADCDEE0E4E5E7E9ECECEFF0F0F1F3F5F5F6F8F8F9F9F9FBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7ECEBEBEAEBEBEBEBECECEFF9E9E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E4E4E4E4E3E2E3E3E3E2E2E1DFDEDEDEDFDFDEDCDBDBC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4D7D5D5D5D1D1D3D1D1D3D1D1D0D1D0D0CFCECECECECED0D0D0D0D0D0D0D0D1D3D3D5D5D5D6D6D6D6D5D5D5D5D5D5D7D6D6D5D5D5D6D5D5D5D5D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D1674E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484848494849494949494A4A4A4C4C4D4D4F4F5152545657595B5B5F5F62646666696C6D71737476797A7B7D7E808383858689898A8A8C8D8D8C8D8D8D8C8C8C8C8A8A88888685848282817F7D7979767471706E6C6A67666362605D5B595856545351514F4C4B49484747454342403F3F3E3E3C3C3B3B393938363536363635353433333232313130303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828282727272727272726252525252525252525252525242424232323232323232323232322B0BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD381B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919191917171717171717161616161515151516141414141515151414141414141313131313131313131212121211111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D0000000000000000000000000000000000000000000000000000000021A6A9ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD1D4D6D8DBDCDEE1E2E4E6E7E9EBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAD10000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8D2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39C9395999C9EA0A3A5A9ABAFB1B4B7BABDC0C3C5C7CBCED0D4D6D9DADDE0E1E4E7E7E9ECEDEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F1F1F1F2F3F3F4F6F4F8FFEEE9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D7D7D9D7D6D7D7D7D7D6D6D7D7D5D5D5D3D5D6D6D6D6BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3C4D5D5D3D5D6D5D5D5D5D5D3D1D1D3D3D5D6D6D7D7D7D7D9D7D7D9DADBDBDCDADCDCDBDAD9D9DADADCDBDADBDCDCDCDCDCDCDBDBDBDBDBDBDBDCDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7D75B4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484848494949494949494A4C4A4C4C4D4D4F4F515153565758595C5E5F62636566686A6C6E7173747679797A7D7E8080828386878686868989888A898A88898987868684838181807F7D7A7977757472706D6C6A67666462605F5B5B5958545353514E4D4C4948494745454342403F3E3E3E3D3C3B3B3A3938363636363635353533333332313131303030303030302F30303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282828272727272727262625252525252525242525252524242423232323232323232323237ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191917171717171717171616161615151516141414141415151414141414141413131313131313131212121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE307000000000000000000000000000000000000000000000000000000007EA8AAADAFB2B5B7BABCBFC2C4C6C9CBCED0D3D5D7D9DCDEE0E2E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9640000000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39F95989A9DA0A2A4A8AAADB1B3B5B7BBBEC1C4C7C9CCD0D1D4D7DADCDEE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F1F1EFEFEEF1F1F2F2F1F6FCEBE4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1DFE1E1E1DFDFDEDEDEDEDEDEDEDEDEDEDEDEE1DEDCBBBCBBBCBCBCBCBBBCBBBBBBBBBBCDDBDBDBDADADAD9D7D7D9D9D7D9D9D9D9DADADADBDBDBDADADBDAD9DBDADBDBDADADADADADBDADBDBDBDADBDADADADBDADADADBDEDEDCDBDBDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEECD544E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484848494949494949494A4C4A4A4C4D4D4E4F515152545657585B5D5F6062646467686A6D6D7170727476797B7B7B7F7E808083828382848484868683838382828180807F7D7C7D7A7776767472706F6C6A67666464615F5B5B595856555351514F4C4C494847474545434240403E3E3D3D3C3B3B3A383836363636363535353533333231313131303030303030302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292828282828282827272727272726252525252525252525252525252424242323232323232323232349BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191919171717171717171616161615151515161414141415151414141414141413131313131313131112121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000000000003CA8AAADAFB2B4B7B9BCBFC1C4C6C9CBCDD0D2D4D7D9DBDDDFE1E3E5E6E8EAEBEDEEEFF1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAE5140000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A697999CA0A2A3A5A9ABAFB1B4B7BABDC0C3C5C7CBCCD0D3D6D9DADCDEE0E4E5E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEEEF1EEEFEFEFF1F1F1F7FDEEE9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E2E3E4E3E3E2E1E1DFDEDEDEDCDBDCDEDEDEDCDCDBDBDBDBDEDEDEDEDFDEDEDFDCDCDCDBDADBDCDCDCDBDBDADADADBDBDBDBDBDBDADBDBDBDEDEDFE1DFE1E1E1E1E1E1E1E1E1E1E1E2E1E1E1E1E1E2E3E3E2E2E2E3E3E3E3E3E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9B54E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949494848484848494948494949494A4A4A4A4C4C4D4E4E51515253565758595C5D5F6162626567686A6D6D6D7073737677787A7A7D7B7B7E807E7F808080808080807F7F7D7D7D7B7A797976767472716F6D6A6B68666462625F5D5B595858555553514F4E4C4B494847454543434241403F3E3D3C3C3C3A3A38383636373635353534353533333131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292928282828282828272727272727262525252525252525252525252424242323232323232323232323B0BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD381B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919171717171717171716161616151515161414141414151514141414141413131313131313131312121212111111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000000000000692A9ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD1D4D6D8DBDCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFA8C0000000000000000000000000000000000000000000000000000000007E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6999C9EA0A3A5A8ABADB1B3B6B7BBBEC1C4C7C9CCD0D1D4D7D9DCDDE0E3E4E7E8E9ECEDEFF0F0F3F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEEEFEEEEEFEFECEEEEF3FBEBE6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E3E6E3E3E3E2E2E2E2E2E2E1DFE1DFDEDFE1E2E2E3E1E2E2E3E3E3E3E2E3E2E2E2E2E3E3E3E2E2E1DFE1E2E1E1DFE1DFDFDFE1DFE1DEDEDFDEDEDEDEDCDBDBDBDBDADADBDCDEDEDEDCDEDFDFDFE1E1E1E1DFDFDFDFE1E1E1E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDE954E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494949484848484849494849494949494A4A4A4C4C4D4D4F4F515253565657585B5B5E5F6161646567686A6D6D6C707073737677777A79797B7B7B7B7B7B7E7E7B7B7B7B7B7B79787676767472726F6D6C6A6B67676462605F5E5B5B585755555353504E4C4C4A494847454543424141403D3D3D3C3C3C3A3A3838363737373535353434353531313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2929292929292929282828282828282727272727272726252525252525252425252525242424232323232323232323237ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191919191717171717171716161616151515151414141414151514141414141414131313131313131312121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3070000000000000000000000000000000000000000000000000000000057A9ABAEB0B3B5B8BABDBFC2C4C7C9CCCED0D3D5D7D9DCDEE0E2E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9FAFBFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9280000000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A89C9EA0A2A4A8AAACB1B2B5B7BABDC0C3C5C7CBCCD0D3D6D8DADCDEE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E6E6E4E4E3E3E2E3E3E9F2E3DBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D6D6D6D5D5D5D7D7D7D9DADBDBDBDBDCDEDCDBDBDADAD9DADADAD9D9D7D7D7D7D7D9D9DAD9D9DADADADADBDADBDBDCDBDCDCDEDFDFDFDFDFE1E1E1E1DFDFE1E1E1E1E1E1E1E1E1E1E1E2E3E3E3E3E4E4E4E4E6E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2884E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484849494849494949494A4A4A4C4C4D4D4E4F51515254565658595C5D5F606162646567676A696C6D6E706F727373747677787978797979797978787876767675727271716E6D6D6A6A6867666363605F5D5C5B5A595655535351514C4C4C49494747454443424141403D3C3D3C3C3B3B38383636373737353535343434353131313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272726262525252525252525252525252424242323232323232323235ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD7D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919171717171717171716161615151515161414141415151514141414141413131313131313131112121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000000000001BA1AAADAFB2B4B7B9BCBFC1C4C6C9CBCED0D2D4D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAC7000000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A89EA0A2A4A7A9ABAFB1B4B7B9BDBEC1C4C7C9CCD0D1D4D7D9DADDE0E1E4E5E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F1F1F1EFEFEFEFEFEFEFF4FCECE6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDEDEDEDFE1E1DFDEDEDEDEDEDEDEDEDEDEDBDEDEDEDEDEDEDFDFDEDEDFDFE1E2E2E1E1E1E1E1E1DFDEDEDCDBDBDBDADADADAD9D9D7D7D7D9D9D9D7DAD7D7D7D7D7D9D7D7D7D7D6D7D9DADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E4754E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484849494849494949494A4A4A4A4C4C4D4E4E4F51525354565758595C5D5F5E616263646666676A6A6C6C6E6F70707072737373747574747475747372727272716E6D6C6C6A6B69676563646260605E5C5A59585855555351514D4D4C4949484745444342414140403F3C3D3B3C3B3B39383636363737363535343434343231313131313131303030303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272726252525252525252525252525252424242323232323232349B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD711D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191717171717171716161616151515151414141414151514141414141413131313131313131112121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000000000000079AAACAFB1B4B6B9BBBEC0C3C5C8CACDCFD2D4D6D8DBDCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9640000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A9A0A2A3A5A9ABADB1B3B5B7BABDC1C3C5C7CBCCD0D3D6D8DADCDEE0E3E5E7E8E9ECEDEFF0F0F3F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E7E9EAEAE9E9E9E9E9ECF6E4DBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D6D5D5D5D5D6D7D7D9DADAD9D7D9DAD9D7D7D6D7D9D9DADAD7D7D7D7D9D9D7D9DAD9D9DADADADADBDCDCDBDBDBDBDADADADADADADADADADADADADADADADADBDBDBDBDBDBDBDEDEDEDEDEDEDEDEDCDEDEDEDBDBDBDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFD5624E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484849494849494949494A4A4A4A4C4C4D4D4D4F4F515253555557585B5C5D5E5E5F606364666666676A6C6C6D6D6C6D6F6F6F6E6F70707070706F6F6D6D6D6C6D6A6A69676768656462605F5F5D5C5A5A585756555351514F4D4C4C49484747454444424141403F3D3E3D3B3B3B3B3939363636363636363434343433333231313131313131303030303030302F30303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282828272727272727262525252525252525252525252424242323232323235BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD94211B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919191717171717171717161616151515151614141414151514141414141414131313131313131312121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3070000000000000000000000000000000000000000000000000000000035A9ABAEB0B3B6B8BBBDC0C2C5C7CACCCED0D3D6D8DADCDEE0E2E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAE514000000000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFBFAF9F9CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AAA2A3A5A9AAADB1B3B5B7BABDBEC1C4C7C9CCD0D1D4D7D9DADDE0E1E4E5E7E9ECECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E2E3E3E1E1E1E3E4E6EBF4E4DCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E4E4E6E6E6E6E6E7E7E7E6E6E6E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E3E3E3E3E3E2E2E1E1E1E1DFE1E1E1DFE1E1E1E1E1E1E1E1E2E2E1E1E1E1E1DFDFE1E1E2E1E1E1DFDEDEDBDBDBDCDEDFDEDEDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9C85F4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494948484848484849484949494949494A4A4A4A4C4D4D4D4E4F51525254555657585B5C5B5D5D5F6162646465666667696A6868696C6D6C6B6B6B6B6B6B6B6B6B6B6B696968676565656462625F605E5C5B5A59575756555352514E4F4C4C4A494747454544434241403F3F3D3E3D3B3B3B39393737363636363636353434343333323231313131313131303030303030302F303030302F2F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929282828282828282727272727272726252525252525252425252525242424232323237ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA9321B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191917171717171717161616161515151514141414141515141414141414131313131313131311121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000000000000794ABADB0B2B5B7BABCBFC1C4C6C9CBCED0D2D4D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFA95000000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A8A3A5A8AAADB1B2B4B7B9BDBEC1C4C5C7CBCCD0D3D6D8DADCDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E3E3E3E2E1E1E1E1E1E3E6F1E1DADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D7D7D7D7D6D6D6D7D6D6D6D6D6D6D6D5D3D5D5D6D7D7D7D9DADADADADBDCDBDADADAD9D9DADADAD9D9D7D7D7D7D7D9DADADADADADBDBDCDEDCDEDEDFDEDFDFE1E1E1E1E1E1E2E2E2E2E1E1E2E3E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2BF544E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494948484848484849484849494949494A4A4A4A4C4C4D4D4D4E4F51525454555657585B5B5B5C5D5E61616063646566666666676969696969676868696868676768686665646262626061605F5C5C5C5A5A595756555353524F4F4C4B4A4B494745454442424242403F3D3E3E3D3D3B3B3939373738363636363635353434333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828282727272727272626252525252525252525252525242424232788BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB54B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191917171717171717171616161515151516141414141515141414141414131313131313131311121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D00000000000000000000000000000000000000000000000000000000005EAAADAFB2B4B7B9BCBEC1C4C6C8CBCDCFD2D4D6D8DBDDDEE1E2E4E6E7E9EBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9320000000000000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6A5A8AAADAFB1B4B6B9BBBDC1C3C5C7CACCD0D1D4D7D9DADDE0E1E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E6E7E6E7E6E4E6E7E7ECF6E6DCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDBDADAD9D9DADBDCDCDCDCDEDEDCDBDBDBDBDADCDBDBDCDEDCDCDCDBDBDCDEDEDCDCDCDEDEDEDEDEDCDBDBDEDEDEDEDEDFDFDFDFE1E1E2E2E1E1E1E1E1DFDFDFDEDFDFE1E1DFE1E1E1DFDFDFDFE1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECCA4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494948484848484849484849494949494A494A4A4C4C4C4C4D4E4F4F5152525455565758585B5C5C5D5D5F5F616163646365656565656566646666666665656464646464636161605F5E5C5D5D5A5A59575756545353514F4F4D4B4A4948474647454242424241403D3D3E3C3C3C3C39393737383838363636353535353433333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282828272727272727262525252525252525252525252424243294BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD641B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919171717171717171616161615151516141414141515151414141414141313131313131313121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD907000000000000000000000000000000000000000000000000000000001BA9ACAEB1B3B6B8BBBDC0C2C5C7CACDCFD1D3D6D8DADCDEE0E2E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAD10A0000000000000000000000000000000000000000000000000000000023F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9D9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A8A8AAACAFB1B4B6B7BABDC0C1C5C7C9CCCED0D4D6D9DADCDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E2E4E4E4E6E6E6E7E7E6EAF6E6DFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDCDBDBDADADADBDADADADBDCDCDEDCDCDEDEDEDCDEDEDEDEDEE1DEE1E1E2E2E2E3E4E4E6E4E6E6E6E7E6E6E6E4E4E6E7E9E7E7E6E6E6E6E9E9E9EAE9E9E9EAE9E9EAEAEAEAE9E9E9E6E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCA64E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848494848494949494949494A4A4A4C4C4C4D4D4E4F4F515252545656575858595B5B5C5E5D5E5F616161616063636363636362626262626261616160605F5F5E5E5D5C5C5A5B57575756535352514F4F4D4D4A494848464745444242424140403F3E3E3C3B3B3C3B39383738383837363635353535343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282828272727272727262525252525252524252525252434A8BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD86201B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191919171717171717171616161615151515141414141415151414141414141313131313131313121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F17CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62C000000000000000000000000000000000000000000000000000000000087ABAEB0B3B6B8BBBDC0C2C5C7C9CCCED0D3D5D7D9DCDDE0E1E3E5E6E8EAEBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFA77000000000000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9E2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A8AAADAFB1B4B6B7BABDBEC1C4C7C9CBCCD0D3D4D7DADCDDE0E1E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF1F2F2F2F3F2F3F3F3F4F9FFEFE9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDEDEE1E1E1DFDFDEDEDEDFDFDFDEDEDEDEDFDFDFE1E1E1E2E1E2E1E1E3E2E1E1E2E2E2E2E2E1E1E1E1E1E2E2E2E1E1E1E2E2E3E3E3E3E3E3E2E2E3E3E3E3E3E3E2E3E3E3E4E4E6E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFA84E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494948484848484848484848494849494949494A4A4A4C4C4C4C4D4E4F50505252535456565758585B5C5C5B5C5D5D5E5F5F5F616060606160606060605F5F5F5F5F5F5E5E5D5A5A5A5A58575655545453524F4F4F4D4B4A4B4A48464645444443424141403F3E3E3C3C3B3B3B3B38383738383636373535353535343433333333333231313131313131313030303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929282828282828282727272727272726252525252525252525252544B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA22C1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919171717171717171716161615151515161414141415151414141414141313131313131313111212121211111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7500000000000000000000000000000000000000000000000000000000004AABADAFB2B4B7B9BCBFC1C4C6C9CBCED0D2D4D7D9DBDDDFE1E2E5E6E8E9EBECEEEFF0F2F3F4F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAEF280000000000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9EDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ABADAFB1B4B5B7BABDBEC1C4C5C7CBCCD0D1D4D7D9DADCDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0DEDFE1E1E2E2E3E6E4E4E9F3E4DCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E1DFDFE1E1E1DEDEDEDEDEDEDEDEDEDEDEDBDBDEDEDEDEDEDEDEDCDBDCDCDCDCDCDEDBDADBDBDEDEDCDADADADBDCDEDCDCDBDBDBDBDBDCDCDEDBDBDBDBDBDBDBDBDEDEDEDCDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3944E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494948484848484848484848494849494949494A4A4A4C4A4C4B4C4D4E504E505251535456565657585A5A595A5A5C5C5D5D5D5C5C5F5F5F5E5E5E5E5E5E5E5C5C5C5C5C5A5B58575757565552535251504F4E4C4D4A4B4948484645454443434241403E3E3E3E3E3B3B3B3B393937373738363636353535353434343333333333333231313131313131303030303030302F303030302F2F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B29292929292929292828282828282827272727272726252525252525252525255DB5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDAE3E1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191919171717171717171616161615151516141414141515151414141414141313131313131311121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9000000000000000000000000000000000000000000000000000000000014A3ADAFB2B4B7B9BCBEC1C3C6C8CACDCFD2D4D6D8DADCDEE0E2E4E6E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFABD00000000000000000000000000000000000000000000000000000000000FE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1ADB1B2B4B6B7BABDBEC1C3C5C7CACCD0D1D4D6D9DADCDEE0E3E4E5E7E9ECECEDEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDEE1E1DFE1DFDEDEDEE1E3EEDFD9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D5D5D3D1D1D0D1D0D3D3D6D3D3D3D3D1D1D1D0D0D0D1D0D1D0D0D1D3D5D5D5D5D5D6D5D5D6D6D7D7D7D7D7D5D5D7D7D7D9DADBDADADADADBDBDBDCDBDBDADADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDB884E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494948484848484848484848484849484949494A4A4A4A4C4B4B4C4D4E4E4E50505151525356565656575758595B5B5A5C5A5B5B5C5C5C5B5C5A5A5A5B5B5959585859595856555554545251504F4F4E4C4C4A494948484847444444434242413E3E3D3D3E3C3B3B3B3B39393937373636363535353535343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272726252525252525252568BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD5D1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919171717171717171716161615151515141414141415151414141414141313131313131313121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED1900000000000000000000000000000000000000000000000000000000007BACAFB1B3B6B8BBBDC0C2C5C7CACDCFD1D3D6D8D9DCDEE0E2E4E5E7E9EAEBEDEEEFF1F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFA64000000000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B1B2B4B6B7BABDBEC1C3C5C7CACCCED0D3D6D8DADCDDE0E1E4E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F2F2EFEEECEBECECECF2F9E9E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E2E2E2E2E3E3E3E2E2E2E3E3E3E3E3E3E3E3E2E2E3E3E3E3E3E3E2E3E3E3E4E4E6E6E6E7E9E9E9E9EAEAE9E9E9E9EAE9E9E9E9E9E9E9E9E7E9E9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDC8B4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A494949494949494848484848484748484848484948484949494A4A4A4A4C4B4B4C4D4D4E4E4F50515151535656555656575757585857575959595B5B59595959595858575756565656555554525250504E4E4C4C4C4B4B48484848464643444342414140403D3D3D3C3C3C3B3B393939393936363636353535353434343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828272727272727272625252525252A7CBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD77201B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919191717171717171716161616151515161414141415151414141414141313131313131313121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000000000000036ABAEB0B3B6B8BBBDC0C2C5C7C9CBCED0D3D5D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F4F4F5F7F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAEF1E000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAD0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFB3B5B7B7BABDBEC1C3C5C7C9CCCED0D3D4D7DADADDDEE0E3E5E7E7E9ECECEFEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E6E4E4E6E6E4E4E4E4E9F2E1D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D7D7D7D7D6D6D6D7D6D6D6D6D6D6D6D6D5D5D5D7D7D7D9DADBDBDBDBDEDEDEDCDCDBDBDADBDBDBDBDBDADADADADADBDBDBDADADBDCDCDEDEDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3DD734E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484848474848484848484848494949484A4A4A4A4C4B4B4A4C4D4E4E4E4F5051505153535453545556575756575757565656565656565656565455555554525151504F4F4E4E4C4C4A4A4948484846464644434343404140403F3D3D3C3C3C3B3B3939393939393836363535353535343434343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292828282828282827272727272726252525252A96BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD942B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191717171717171716161616151515151414141415151514141414141413131313131313111212121111111111111111101010101010100F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D00000000000000000000000000000000000000000000000000000000000D9EAEB0B3B5B7BABCBFC1C4C6C9CBCED0D2D4D7D9DBDDDEE1E2E4E6E7E9EBECEEEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAB4000000000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAE2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B5B7B9BABDBEC1C3C5C7C9CCCCD0D3D4D7D9DADCDEE0E3E4E5E7E8EBECEDEFF0F0F1F3F5F5F6F7F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9EAE9EAEAEAEAEAEAEAEFF8E7DEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E3E2E2E1E1E1E1E2E1E2E1E1E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E3E3E3E3E3E3E1E1E1E2E1E2E2E1DFDFE1E1E1E1DFDFDFE1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDED9724E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474748484848484848484949484A484A494A4C4B4B4A4C4C4D4F4E4F4E4F515051515252535354555454555555555555555555545252525251515150504F4F4D4C4C4C4A494848494848454444434343424040403F3F3F3C3C3C3B3B3B3B39393939373838353535353535353434343434343433333333333232313131313131313030303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272726252534A2BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA93D1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191917171717171717161616151515151614141414151514141414141413131313131313111212121211111111111111101010101010100F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE07000000000000000000000000000000000000000000000000000000000074ADAFB2B4B7B9BCBFC1C4C6C8CACDCFD2D4D6D8DADCDEE0E2E4E5E7E9EAECEDEEF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFA64000000000000000000000000000000000000000000000000000000000019EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBF4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B6B7B9BBBDC0C1C3C5C7C9CCCCD0D1D4D7D9DADCDDE0E1E4E5E7E8E9ECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDEDFDFE1DFDFDFDFDFDEE2ECDED9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDBDBDBDBDBDADADADAD9D9D7D7D9D9D7D9D7D7D9D9D9D7D7D6D5D6D6D6D7D7D7D7D7DADADAD7D7D9DADBDADBDCDEDEDEDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBD6714E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A494949494949494848484848484847484848484848484848494848484849494A4C4B4C4A4A4B4D4D4D4C4E4E4F515150505050515153535353535353515151515151515150504D4D4F4C4C4C4C4A4A4948484848464646444343434340403E3E3F3F3D3D3C3B3B3A3B3B3B39393737373836353535353535353434343434343333333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828272727272727272645A8BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5501B1B1B1B1B1B1B1A1A1A1A191919191919191919191917171717171717161616161515151614141414151514141414141413131313131313131212121211111111111111101010101010100F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF619000000000000000000000000000000000000000000000000000000000037ADAFB2B4B7B9BBBEC0C3C5C7CACDCFD1D3D6D8DADCDDE0E1E4E5E7E8EAEBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAEF1E000000000000000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFABEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9BABDBEC1C1C4C5C7CACCCCD0D1D4D6D9DADCDDE0E0E4E5E7E8E9ECECEDEFF0F1F3F3F5F5F6F7F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7E9E9E7E9E9EAEAEBEBF1F9E9E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1EFEFEFEFEFEEEEEEEEEEEFEFF1F1EFEEECECEBEAEAEAEBECEAEAEBEBEBEBEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADAD5714E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474747484848484847484849474849484949494A4A4A4C4C4B4B4B4B4D4D4C4C4F4F4E5050504E4E50505050505151505050504F4F4F4D4D4D4D4C4C4A4A4A48484848474747454444444443434242403E3F3F3D3D3D3C3B3A3A3A3B3B3B38373737363636353535353535343434343434343333333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727274BB5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD711B1B1B1B1B1B1A1A1A1A1A1919191919191919191917171717171717171616161515151514141414151514141414141413131313131313131212121211111111111111101010101010100F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C00000000000000000000000000000000000000000000000000000000000D9FAFB1B3B6B8BBBDC0C2C5C7CACCCED0D3D5D7D9DBDDDFE1E3E5E6E8E9EBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAB400000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBD7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BBBDBEC1C3C4C5C7CACCCED0D1D4D6D9DADCDDE0E0E3E5E7E7E9EBECEDEFF0F0F1F3F5F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF4F3F3F2F2F1F1EFEFEFF3FCEAE4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBD9D9D9D9D9D9DADBDBDBDAD9D9D7D6D5D5D5D5D6D7D7D9DADAD9D7D9DAD9D9D9D7D9DADADADADADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCD6724E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494948484848484847474747484848484747484847474949494949494A484A4A4B4B4B4A4A4C4C4D4E4D4C4D4D4F4F4F4F4F4F4F4F4F4F4D4F4F4D4D4D4C4C4A4A4A4A4A48484848474747454444444443434142404040403F3D3D3C3C3C3B3A3A3B3B3B3A3A38373636363636353535353535343434343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292928282828282828272727275DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD941F1B1B1B1B1B1A1A1A1A1919191919191919191919171717171717171616161515151514141414141515141414141414131313131313131212121211111111111111101010101010100F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D00000000000000000000000000000000000000000000000000000000000075AEB0B3B6B8BBBDBFC2C4C7C9CBCED0D2D4D7D9DBDDDEE1E2E4E6E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA64000000000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BBBEC0C1C3C5C7C9CBCCCED0D3D4D6D9DADCDDDEE0E3E5E7E7E8EBECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E2E3E3E3E2E1E1E3E1E6EFE1D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2DFE1E1E1DFDFDFDFDFDFE1DFDFE1DFDEDEDEDEDEDEDEDEDEDEDEDFDEDEDEDEDEDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1DA734E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474748484847474747484747464947494949474748484A4A4B4A4A4A4A4B4C4C4C4C4C4C4C4C4C4C4C4C4C4D4D4A4A4C4A4A4A4A4A4A4A4A4A484747474745454644444343434340404040403E3F3D3C3C3C3B3B3B3B3B3B393A3A3A37363636363635353535353535343434343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827277CBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA9311B1B1B1B1A1A1A1A1A19191919191919191919171717171717171616161615151516141414141515141414141414131313131313131212121211111111111111101010101010100F0F0F0F65F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC400000000000000000000000000000000000000000000000000000000000037AEB0B3B5B7BABCBFC1C4C6C9CBCDCFD2D4D6D8DBDCDEE0E2E4E5E7E9EAEBEDEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBF01E000000000000000000000000000000000000000000000000000000000007E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BEC1C3C4C5C7C9CBCCD0D0D3D4D7D9DADCDDDEE0E3E4E5E7E8E9ECECEFEFF0F1F3F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9E9E7E7E7E7E7E7E7EAECF8E9DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E2E1E2E1E1E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDED6724E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494948484848484847474747464848474647474747474746464747494747474749494A494A4A4A4A4B4B4A4B4B4B4C4C4B4B4B4A4C4C4A4A4A4A4A4A4A48484848484847464646464644444342424140404040403E3E3D3D3C3C3B3B3B3B3B3B3939393A3737373636353536353535353535353434343434343433333333333232313131313131313030303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282B88BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB54A1B1B1B1B1A1A1A1A191919191919191919191917171717171717161616151515161414141415151414141414141313131313131311121212111111111111111010101010100F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000DA0B0B2B4B7B9BCBFC1C3C6C8CACDCFD1D3D6D8DADCDEE0E1E4E5E7E8EAEBECEEEFF0F2F3F4F4F5F6F7F8F8F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFABD0000000000000000000000000000000000000000000000000000000000002CF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBDBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC1C4C5C7C7CACCCCD0D1D3D4D7D9DADCDDDEE0E3E4E5E7E8E9ECECEDEFF0F0F1F3F5F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E7E6E6E7E9E9E9E9EAEAECF6E6DEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDCDBDBDBDBDBDADBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2DD734E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848484747474646484746464747464747474646474747474747484849474848484A4A4848494A4A4A4A48484A4A4A4A4A484848484848474747474747474644444443434241414140404040403E3D3D3D3C3B3B3B3B3B3B3939393938373737363535353636353535353535353434343434343433333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292928282828283696BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD631B1B1B1A1A1A1A1A1919191919191919191917171717171717161616151515151414141415151514141414141313131313131311121212111111111111111010101010100F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000000000000000007DAFB2B4B7B9BCBEC0C3C5C7CACCCED0D3D5D7D9DCDDDFE1E3E5E6E8E9EBECEEEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFA7700000000000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBF9B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5C3C5C5C7C9CBCCCED0D1D4D6D7D9DADCDDDEE0E3E4E5E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAECECEAEAECEBECEEEEF2FBE9E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D3714E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474747474646464746464647464647474646464646464747474848464747474849474848484848494949494949494948484848484847474646464646434343424242414040404040403D3D3D3C3C3C3C3B3B3B3B3B3B3939383837373735353535353636353535353535353434343434343333333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828282727272727272625252525252525252525252524242323232327BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD861F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191917171717171717161616161515151614141414151514141414141313131313131311121212111111111111111010101010100F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000000000000045AFB2B4B6B9BBBDC0C2C5C7CACCCED0D3D4D7D9DBDDDFE1E2E4E6E7E9EAECEDEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBF03200000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBD4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBC5C7C9CACCCCD0D0D3D4D6D7D9DADCDDE0E0E3E4E5E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F6F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEFEFEEEEEFEFF1F1F2F8FDECE7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D17C4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474747474646464546464646464646474646464646464646474747474747474747464647474747484747474848484747474747464644444444444342424243434343404040403E3E3E3C3C3C3C3C3C3C3B3A3B3B3B393838383837373735353535353636353535353535343434343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282827272727272726252525252525252525252525242424232323238FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4D1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191919171717171717171616161515151614141414151514141414141413131313131313121212111111111111111010101010100F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA20000000000000000000000000000000000000000000000000000000000001CA8B1B3B6B8BBBDC0C2C4C7C9CBCED0D2D4D7D8DBDCDEE0E2E4E6E7E9EAEBEDEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAD10A000000000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBF5B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5C7C7CACBCCCED0D1D3D4D7D8DADADCDDE0E0E3E4E5E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAE9E9EAE9E7E4E6E7E9EBF6E3DCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9884E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444646464646464646464646444646474747474747474747474545464747474746464647464744444444444444434343434242424242414141413E3E3E3E3D3D3D3C3C3C3C3C3C3A3A3A3B39393938383837373737353535353536353535353535353434343434343433333333333232313131313131313030303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727272625252525252525242525252524242323232360BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5241F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919171717171717171616161515151514141414151514141414141413131313131313121212121111111111111010101010107AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE070000000000000000000000000000000000000000000000000000000000078BB1B3B6B8BABDBFC1C4C6C9CBCDCFD2D4D6D8DADCDEE0E2E4E5E7E9EAEBECEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFA950000000000000000000000000000000000000000000000000000000000000FE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBD1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCCACBCCCED0D1D3D4D6D7D9DADCDCDEE0E0E3E4E5E7E8E9ECECEDEFF0F0F1F3F3F5F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F9F9F8F9FBFBFBF9F9FDFFF3F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9884E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444446464646444646464646444446454545474545454747474545464646464646464646464644444444444444434242424242414141404040403E3D3D3D3D3D3D3C3C3C3B3B3B3A3A393939393938373737373737353535353536353535353535353434343434343433333333333232313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272726252525252525252525252524242423232332BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD791F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919171717171717171616161515151514141414151514141414141413131313131313121212121111111111111010101010A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000005BB0B3B5B8BABCBFC1C4C6C8CACDCFD1D3D6D8DADCDDE0E1E3E5E6E8EAEBECEEEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA4500000000000000000000000000000000000000000000000000000000000023F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBF5B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CBCCCED0D0D3D4D4D7D8DADADCDDDEE0E1E3E5E5E7E8E9ECECEDEFEFF0F0F1F3F5F5F5F6F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAE9E9E7E9E9E6E9E7E7ECF7E6DFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEA14E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444464646444446464646444444444445454444454545454445454545454644444444444443434343434343424242424141404040403F3F3F3D3D3D3D3D3D3C3A3B3B3B3B3A3939393939393737373737373735353535353536353535353535353434343434343433333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828272727272727262525252525252524252525252424242323239BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD461F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191917171717171716161616151515161414141415151414141414131313131313131212121211111111111110101010A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6350000000000000000000000000000000000000000000000000000000000002AB0B3B5B7B9BCBFC1C3C6C8CACDCFD1D3D5D7D9DCDDDFE1E3E5E6E7E9EBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBE61E0000000000000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4CED0D0D3D4D4D6D7D9DADADCDDE0E0E3E4E5E7E7E8E9ECECEDEFEFF0F0F1F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E7E6E6E6E7E7E7E9E9ECF7E6DEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADAA64E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494948484848484847474747464646454444444446444444444446464444444444444444444444444444444444444444434343434343424242424242414141414140403F3F3F3F3E3E3E3D3D3D3D3C3C3A3A3B3A3A3A3A3939393737373737373737373735353535353636353535353535353434343434343333333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727272625252525252525252525252524242323236EBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDAE201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919171717171717171616161515151614141414151514141414141313131313131312121212111111111111101018B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000000000000000000E9BB2B4B7B9BCBEC1C3C5C7CACCCED0D3D5D7D9DBDDDFE1E2E4E6E7E9EAECEDEEF0F1F2F3F4F5F5F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFABD0000000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBD0D1D3D4D4D6D7D9DADADCDDDEE0E0E3E4E5E7E7E8E9ECECEDEFEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEECEBECEEEFEEEEECF3FBEBE6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1B9544E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474747474646464544444444444344444444444544444444444444444444444344434343434343434343434343434242414141413F3F40404040403F3F3F3E3E3E3E3C3C3C3C3C3C39393A3A3A3A3A3838373737373737373737373735353535353636353535353535343434343434343333333333323231313131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B29292929292929292828282828282727272727272626252525252525252525252524242423233DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD79201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191717171717171716161615151516141414141515141414141413131313131313121212121111111111111018C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D000000000000000000000000000000000000000000000000000000000000007FB2B4B7B9BBBEC0C2C5C7CACCCED0D2D4D7D9DBDDDEE0E2E4E5E7E9EAEBEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA820000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6CCD3D4D4D6D7D9DADADCDCDEE0E0E1E4E5E5E7E7E8EBECECEDEFF0F0F0F1F3F3F5F5F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E9E9E7E6E6E6E4E6E4E4E9F3E3DBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6C3544E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474747474646464544444444444343444444444544444444444444434444444343424242424243434343424242424141414141413F3F40404040403F3F3F3D3D3D3C3C3C3C3A3A3A393A3A3A3A393938383737373737373737373737353535353536363535353535353434343434343433333333333232313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282828272727272727262525252525252524252525252424232323B0BDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4120201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191917171717171716161615151515141414141515141414141413131313131313121212121111111111112BDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000000000000000004DB2B4B7B9BBBDC0C2C5C7C9CBCED0D2D4D6D8DBDCDEE0E2E4E5E7E9EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA4500000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBD6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4D4D6D7D8D9DADADCDCDDDEE0E1E3E4E5E7E7E8E9EBECECEDEFF0F0F0F1F3F3F5F5F6F6F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E4E6E6E6E6E6E6E7E7ECF4E4DCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1CB624E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474747474646464544444444444343444444444544444444444444434343434343424242424243434343424242424141414141413F3F40403F3F3E3D3D3D3D3D3D3A3A3A3A3A3A3A393A393939393838383737373737373737373735353535353536353535353535353434343434343433333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292828282828282827272727272726252525252525252525252524242423237ABDBDBDBDBDBDBDBDBDBDBDBDBDBDA92020201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191717171717171616161615151514141414151514141414141313131313131312121211111111111136E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC40700000000000000000000000000000000000000000000000000000000000023ABB4B6B8BBBDC0C2C4C6C9CBCDCFD2D4D6D8DADCDEE0E1E3E5E6E8EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBDC1400000000000000000000000000000000000000000000000000000000000007E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBC6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BED6D7D8D9DADADCDCDDDEE0E0E3E4E5E5E7E7E8E9ECECEDEFEFF0F0F1F1F3F3F5F5F6F6F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF2F2F2F1F2F2F3F4F3F4F8FDEEE9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCCD6D4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494948484848484848474747474646464444444444444343444444444444444444444442424243434343424343434342424242414141413F3F3F3F40403F3F3F3F3F3E3E3D3C3C3C3C3C3A3A3A3A3A3A3A3939393939393838383737373737373737373735353535353536353535353535353434343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2929292929292929282828282828272727272727262525252525252525252525252424242349BDBDBDBDBDBDBDBDBDBDBDBDBDBD6D202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191717171717171716161615151516141414151514141414141413131313131312121211111111114AF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000079BB4B6B8BBBDBFC2C4C6C9CBCDCFD2D3D6D8D9DCDDE0E1E3E5E6E8E9EBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAB40000000000000000000000000000000000000000000000000000000000000019EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCF5BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8D6D9DADADADCDDDDDEE0E0E3E4E5E5E7E7E8E9EBECECEDEFEFF0F0F1F3F3F5F5F5F6F6F7F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E3E2E3E3E4E6E4E4E6E9F4E3DCDCDEDFDFE1E1E1E2E1DFDEE1E1E2E3E3E4E6E4E3E2E2E3E3E3E4E4E4E6E4E3E3E3E3E3E3E3E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDEDEDFDEDEDEDEDEDEDEDFDEDEDEDEDEDFE1E1E2E2E3E3E3E3E3E3E3E2E2E2E1E1E1E1E1E2E1E1DFDFE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4DE754E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494948484848484848474747474646464444444444444343444444444442424444444442424242424242414343434342424242414141403F3F3F3F40403F3E3E3E3E3D3C3C3C3C3C3C3C3A3A39393A3A3A393939393939383838373737373737373737373535353535363635353535353534343434343434333333333332323131313131313130303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727272625252525252525252525252424242328B5BDBDBDBDBDBDBDBDBDBDBDBDBD3B202020201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919171717171717171616161515151614141415151414141414141313131313131212121111111166F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6230000000000000000000000000000000000000000000000000000000000000078B3B6B8BBBDBFC1C4C6C8CACDCFD1D3D6D7D9DBDDDFE1E2E4E6E7E9EAECEDEEF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA770000000000000000000000000000000000000000000000000000000000000035F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCE9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6D1DADADCDCDDDEE0E0E0E3E4E4E5E7E7E7E8E9ECECEDEDEFEFF0F0F1F3F3F5F5F5F6F6F8F8F9F9F9F9FAFAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E1E1E3E3E4E3E3E2E3E6F2E1DADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E18C4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A49494949494949484848484848484747474646464544444444444443434444444444424242424244424242424242414142424242424040404040403E3F3F3F3F3F3F3E3E3E3E3E3D3C3C3C3C3A3A3A393939393A3A3939393939393938383737373737373737373737353535353536363535353535353434343434343433333333333232313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727272625252525252525252525252424242388BDBDBDBDBDBDBDBDBDBDBDBDA92020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191717171717171616161515151614141414151414141414141313131313131212121111118EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35000000000000000000000000000000000000000000000000000000000000004EB3B6B8BABCBFC1C4C6C8CACDCFD1D3D5D7D9DBDDDFE1E2E4E6E7E9EAEBEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA45000000000000000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCE1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6CFDCDCDDDEDEE0E0E1E3E4E4E5E7E7E7E8E9EBECECEDEFEFF0F0F0F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFAFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E2E3E3E3E2E1E1E3E1E6EFE1D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2AA4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949484848484848484747474646464544444444444443434444444442424242424242414141414242414142424242404040404040403F3F3F3F3F3F3E3E3E3E3E3E3C3B3B3B3A3A3A3A393939393A3A3939393939393938383737373737373737373737353535353536353535353535353434343434343433333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828272727272727262525252525252525252525252424235BBDBDBDBDBDBDBDBDBDBDBDBD662020202020201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919171717171717161616151515151414141415151414141414131313131313121212111AADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000000000000000002AB3B6B8BABCBFC1C4C6C8CACDCFD0D3D5D7D9DBDDDEE0E2E4E5E7E9EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBE61E0000000000000000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3CFDDDEE0E0E0E0E3E3E4E5E5E7E7E7E8E9EBECECEDEDEFEFF0F0F1F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDEDEDEDBDBDADADADBDBDFE6D7D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2BB544E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848484747474646464544444444444443434444444442424242424242414141414242404040404042424040404040403F3F3F3F3E3E3D3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3A3939393939393838383737373737373737373735353535353536353535353535353434343434343333333333323231313131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727272625252525252525252525252424242CBDBDBDBDBDBDBDBDBDBDBDBD32202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A191919191919191919191717171717171616161615151514141414151514141414141313131313131212122DCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000000000000000159DB6B8BABCBFC1C3C5C7CACCCED0D3D4D7D9DBDCDEE0E2E4E5E7E8EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBC80A0000000000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBD6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3CBE0E0E0E1E3E3E4E4E5E5E7E7E7E8E9EBECECECEDEFEFF0F0F0F1F3F3F5F5F5F5F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEAEAEAEBEAEAE9EBEAEFF8E9E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCC6614E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484847474746464645444444444444434344444444424242424242424141414142424040404040403E3E3E3F3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3A39393939393938383837373737373737373737353535353536363535353535353534343434343433333333333232313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828272727272727262525252525252524252525252424239BBDBDBDBDBDBDBDBDBDBD9B22202020202020201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919171717171717171616161515151414141415151414141414131313131311121236E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000000000000000000088B5B7B9BCBFC1C3C5C7CACCCED0D2D4D7D8DBDCDEE0E2E4E5E6E8EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFA9F000000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5CDE1E3E3E3E4E5E5E5E7E7E7E8E8E9EBECECECEDEFEFF0F0F0F1F1F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCFCFDFCFCFBFBFCFBFDFFF3EFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFD6734E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444444444434444444444424242424242414141414142424040404040403E3E3E3F3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A3A393939393A3A3939393939393938383837373737373737373737353535353536363535353535353434343434343433333333333232313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282827272727272726252525252525252525252524242467BDBDBDBDBDBDBDBDBDBD672222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919171717171717171616161515151414141415151414141414131313131311125DF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000000000000000000064B5B7B9BCBEC1C3C5C7CACCCED0D2D4D6D8DADCDEE0E1E3E5E6E8E9EBECEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA640000000000000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBDDB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5D5E4E4E5E5E5E5E7E7E7E8E8E9E9EBECECECEDEFEFEFF0F0F1F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDADADADADADADADCDEDCE1ECDCD6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1914E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444444443434444444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A3A393939393A3A3939393939393938383737373737373737373737353535353536353535353535353434343434343433333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282828272727272726252525252525252425252525242438BDBDBDBDBDBDBDBDBDBD322222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919171717171717161616151515141414141515141414141313131313131290FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC407000000000000000000000000000000000000000000000000000000000000003AB5B7B9BCBEC0C2C5C7C9CBCED0D2D4D6D8DADCDEE0E1E3E5E6E7E9EBECEDEEEFF0F2F3F4F4F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBF03C0000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBE9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9D6E5E5E7E7E7E7E7E8E8E9E9EBECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E1E1E1E1E1E1E1E1E3E6F1E1DAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7A6544E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444444443434444444444424242424242414141414242404040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3B3A3A3A3A393939393A3A39393939393939383837373737373737373737373535353535363535353535353534343434343433333333333232313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2929292929292929282828282828272727272727262525252525252525252525242424A8BDBDBDBDBDBDBDBD8F222222222020202020201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191717171717171616161515151614141415151414141413131313131BC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4070000000000000000000000000000000000000000000000000000000000000024AEB7B9BCBEC0C2C5C7C9CBCED0D2D4D6D8DADCDDDFE1E3E5E6E7E9EAECEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBDC1E0000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCF1C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C1E1E7E7E7E7E8E8E9E9E9EBECECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF3F4F4F3F3F3F3F4F4F3F9FDEEE7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCC3614E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444444443434444444444424242424242414141414142404040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3A39393939393938383837373737373737373737353535353536363535353535353534343434343433333333333232313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282828272727272726262525252525252425252525242474BDBDBDBDBDBDBDBD5A22222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919171717171717161616151515161414141515141414141313131338E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD907000000000000000000000000000000000000000000000000000000000000000E9FB7B9BCBEC0C2C5C7C9CBCECFD2D4D6D8D9DCDDDFE1E2E4E6E7E9EAEBEDEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBC80A0000000000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCF9D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3CCE8E8E8E9E9E9E9EBECECECECECEDEDEFEFEFF0F0F0F0F1F3F3F3F5F5F5F5F6F6F7F8F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7E7E7E9E7E6E6E7E9E9ECF4E3DBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFD6794E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949484848484848484747474746464544444444444443434444444442424242424242414141414242404040404040403E3E3F3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3A39393939393938383837373737373737373737353535353536363535353535353434343434343433333333333232313131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282827272727272726252525252525252525252524244ABDBDBDBDBDBDBDBD2C22222222202020202020201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191717171717171616161515151614141415151414141413131368F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000078AB7B9BCBEC0C2C5C7C9CBCECFD2D3D6D8D9DBDDDFE1E2E4E6E7E9EAEBECEEEFF0F2F3F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBA0000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBE6BFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCDDEBEBEBECECECECECECECEDEDEDEFEFEFF0F0F0F0F1F1F3F3F3F5F5F5F5F6F6F6F7F8F8F9F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8ECEEEFEEECECEBEAEBE9EFF9E9E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDC934E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494848484848484847474746464645444444444444434344444444424242424242424141414142424040404040403E3E3E3F3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A3A393939393A3A39393939393939383837373737373737373737373535353535363535353535353534343434343434333333333232313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727272625252525252524252525252424B0BDBDBDBDBDBD8F232322222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191917171717171716161615151516141414151514141414131B9AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000006DB7B9BCBEC0C2C5C7C9CBCDCFD2D3D6D7D9DBDDDFE1E2E4E6E7E9EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F8F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA77000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBF9D4B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6D1ECECECECECECECEDEDEDEDEFEFEFEFF0F0F0F0F1F1F1F3F3F3F5F5F5F5F6F6F6F7F8F8F8F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF2F2F2F2F3F3F1F2F2F3F7FDECE6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6B0594E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494848484848484847474746464645444444444444434344444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A3A393939393A3A39393939393939383837373737373737373737353535353535363535353535353534343434343433333333333232313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828272727272727262525252525252525252525242488BDBDBDBDBDBD54232322222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A191919191919191919171717171717161616151515161414141514141414142ED3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000048B7B9BCBEC0C2C5C7C9CBCDCFD1D3D6D7D9DBDDDEE0E2E4E5E7E9EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA45000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBEFCCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C5E7EDEDEDEDEDEFEFEFEFEFEFEFF0F0F0F0F0F1F1F1F3F3F3F3F5F5F5F5F6F6F6F7F8F8F8F9F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D7D7D7D7DADADADADBDBE1EADAD5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCCE724E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484847474746464645444444444443434344444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3A39393939393938383837373737373737373737353535353536363535353535353434343434343433333333333231313131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B29292929292929292828282828282727272727272625252525252525252525252450BDBDBDBDBDB52823232322222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919171717171716161615151516141414151414141456F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000002BB7B9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E7E8EAEBECEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBF032000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBEFCCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6CBE6EFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F3F3F3F3F5F5F5F5F5F6F6F6F7F8F8F8F9F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEEFEEECECECECECECEAEEF8E7E1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDE954E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444444443434444444444424242424242414141414142404040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3A393939393939383838373737373737373737373535353535363535353535353534343434343434333333333332313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828272727272727262525252525252525252525242DBDBDBDBDBD882323232322222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191717171717161616151515141414141514141C9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000016B0B9BCBEC0C2C5C6C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8EAEBECEEEFF0F1F2F3F4F4F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBDC1E000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBEFD1B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBD0EBF0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F3F3F3F3F3F5F5F5F5F5F5F6F6F6F7F8F8F8F9F9F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E6E6E4E6E6E6E6E6E7ECF6E6DCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEC6644E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444444443434444444444424242424242414141414242404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A39393939393939383838373737373737373737373535353535363535353535353534343434343433333333333232313131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2929292929292929282828282828272727272727262525252525252425252525248FBDBDBDBD4F2323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919171717171716161615151514141415151439D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61900000000000000000000000000000000000000000000000000000000000000000EA1B9BCBEC0C2C5C6C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8E9EBECEDEFF0F1F2F3F4F4F5F6F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBC80A000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBE3C9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C9DFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F5F5F5F5F5F5F5F6F6F6F7F7F8F8F8F9F9F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEECECEBEAEAE9EBEBF1F8E7DEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3793131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292828282828282727272727272625252525252525252525252460BDBDBDB527232323232322222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191717171717161616151515141414151569F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6350000000000000000000000000000000000000000000000000000000000000000078BB9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8E9EBECEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBB400000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF7E4D3C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3D1E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F5F5F5F5F5F5F5F5F5F6F6F6F7F7F8F8F8F8F9F9F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDEDFE1E1E1E2E1E1E1E1E3EEDED9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADA743131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282827272727272726252525252525242525252534BDBDBD8123232323232323222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A19191919191919191917171717171616161515151414141CB7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63500000000000000000000000000000000000000000000000000000000000000000075B9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8E9EBECEDEEEFF0F2F3F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFB9600000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F3EADBD0C8C1BCB3B3B3B3B3B3BBC1C9D2D8E7F2F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F7F7F8F8F8F8F9F9F9F9F9F9F9FAFAFAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAECECEAEBEAEAEBECECF1F9E9E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E17A313131313131303030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A2929292929292928282828282827272727272726252525252525252525252524A2BDBD4923232323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1919191919191919191717171717161616151516141456E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE32C00000000000000000000000000000000000000000000000000000000000000000060BABCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDCDEE0E2E4E5E6E7E9EBECEDEEEFF0F2F3F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFB6400000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F7F7F7F8F8F8F8F9F9F9F9F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEAE9E9E9E9E9E9E9E9ECF7E6DEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EA7E3131313131313130303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292828282828282727272727272625252525252524252525246EBDB0232323232323232322222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A19191919191919191917171717171616161515161D91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000000000004ABABCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDCDEE0E2E4E5E6E7E9EAECEDEEEFF0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA6400000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E6E6E3E4E2E2E3E2E2E9F1DFD7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E77D32313131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A292929292929292828282828282727272727272625252525252525252525253FBD7A232323232323232323222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A191919191919191919171717171716161615153BDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000000033BABCBFC1C2C5C7C9CBCDCFD1D3D5D7D9DBDCDEE0E1E3E5E6E7E9EAECEDEEEFF0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBF03C00000000000000000000000000000000000000000000000000000000000000000019CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E4E6E6E4E6E4E4E4E3E2E6F2E1DADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9803232313131313131303030303030302F3030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828272727272727262525252525252525252524B04A232323232323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191917171717171616151586F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000000000002CB3BCBFC1C3C5C7C9CBCDCFD1D3D5D7D9DBDCDEE0E1E3E5E6E7E9EAECEDEEEFF0F2F2F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBF03C00000000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAECEBEBECECECEBEBECEFF8E6DEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E77D3332313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A29292929292929282828282828272727272727262525252525252525252525682423232323232323232322222222202020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919171717171716163BD4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD91900000000000000000000000000000000000000000000000000000000000000000016B4BDBFC1C3C5C7C9CBCECFD2D3D5D7D9DBDCDEE0E1E3E5E6E7E9EAECEDEEEFF0F2F2F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBDC1E00000000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBECEBEBEBEAE9E7E7E6EAF6E6E1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E77D333232313131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292828282828282727272727262525252525252525252525242424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191917171717171F91F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC40700000000000000000000000000000000000000000000000000000000000000000016A4BDBFC1C3C5C7C9CBCECFD2D3D6D7D9DBDDDEE0E1E3E5E6E7E9EAEBEDEEEFF0F2F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBDC1E00000000000000000000000000000000000000000000000000000000000000000007A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E3E2E3E4E4E3E3E3E3E7EFDFD9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E27A3333323231313131313130303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A292929292929292828282828282727272727272625252525252524252525242424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919171717171744DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC407000000000000000000000000000000000000000000000000000000000000000000079DBDBFC1C4C5C7CACBCED0D2D3D6D7D9DBDDDEE0E2E3E5E6E7E9EAEBEDEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBC80A0000000000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E4E3E3E3E3E3E2E3E3E7EFE1DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADA7533333332313131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282827272727272625252525252525252525252424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A1919191919191919171717209CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000000000000000000000078EBDC0C1C4C6C7CACCCED0D2D4D6D7D9DBDDDEE0E2E4E5E6E7E9EAEBEDEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFBBE0A0000000000000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E6E3E3E3E3E4E3E6E7EBF4E4DBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADA75333333323231313131313130303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A292929292929292828282828282727272727272625252525252525252525242424232323232323232323222222202020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A1919191919191919171762E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000000000000000000000078FBDC0C2C4C6C8CACCCED0D2D4D6D8D9DBDDDEE0E2E4E5E6E7E9EAEBEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFBBE0A0000000000000000000000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E6E7E7E9E9E9EAEBEBF1F9EAE3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDE783333333332313131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282827272727272625252525252525252525252424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A191919191919191933B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000000000000000000000008FBEC0C2C4C6C8CACCCED0D2D4D6D8D9DBDDDEE0E2E4E5E6E7E9EAEBEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBBE0A0000000000000000000000000000000000000000000000000000000000000000000040F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E3E3E4E6E6E4E6E6E6ECF4E4DEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D3D3D3D1D1D1D0D1D1D1D0D1D1D1D3D1D3D3D5D775333333333232313131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A2929292929292928282828282827272727272726252525252525252525252424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A1919191919191980F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF655000000000000000000000000000000000000000000000000000000000000000000000071BEC0C2C5C6C9CACDCED0D2D4D6D8D9DBDDDEE0E2E4E5E6E7E9EAECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFB96000000000000000000000000000000000000000000000000000000000000000000000035E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEFEEEFEFEFEFF2F3F3F7FDEEE7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDC7A333333333332323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292928282828282827272727272726252525252525252525252424242323232323232323232222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A19191919194FDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF635000000000000000000000000000000000000000000000000000000000000000000000071BFC1C2C5C7C9CBCDCFD0D2D4D6D8D9DBDDDEE0E2E4E5E6E8E9EAECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFB96000000000000000000000000000000000000000000000000000000000000000000000019D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFEFEEEEEFF1EFEFEEEEF3FBEAE2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D67534333333333332313131313131313030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A2929292929292928282828282827272727272625252525252525252525252424232323232323232323222222202020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A19191934AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000000000071BFC1C3C5C7C9CBCDCFD0D3D4D6D8DADCDDDFE1E2E4E5E6E8E9EBECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFB96000000000000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E7E7E6E7E7E7E7E6E4E9F2E2DADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E97E34333333333332323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2929292929292928282828282827272727272726252525252525252525252424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A192188F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC40F000000000000000000000000000000000000000000000000000000000000000000000071BFC1C4C5C7C9CBCDCFD1D3D4D7D8DADCDDDFE1E2E4E5E6E8E9EBECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFA9600000000000000000000000000000000000000000000000000000000000000000000000797FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFF1F1EFF2F3F2F4F3F3F7FDECE7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9753434333333333332313131313131313030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A29292929292929282828282828272727272726252525252525252525252424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1A1A1A196DDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA207000000000000000000000000000000000000000000000000000000000000000000000071C0C2C4C6C7CACBCECFD1D3D5D7D8DADCDDDFE1E2E4E5E7E8E9EBECEDEEEFF0F2F2F3F4F5F5F6F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFA960000000000000000000000000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEEEEEEFEEEEEEECEEEFF3FBEAE3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDC783434343333333332323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B29292929292929282828282828272727272726252525252525252525252424242323232323232323222222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1A1A51CDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7500000000000000000000000000000000000000000000000000000000000000000000000072C0C2C4C6C8CACCCED0D2D3D5D7D9DBDCDEE0E1E2E4E5E7E8EAEBECEDEEEFF0F2F2F3F4F5F5F6F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFA9600000000000000000000000000000000000000000000000000000000000000000000000035F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEBEBEBEBEAE9E9E9ECF4E4DCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E97E343434333333333332313131313131313030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929282828282828272727272727262525252525252525252524242323232323232323232222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B35AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64C00000000000000000000000000000000000000000000000000000000000000000000000073C1C2C5C6C9CACCCED0D2D4D6D7D9DBDCDEE0E1E2E4E6E7E8EAEBECEDEEEFF0F2F2F3F4F5F5F6F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFA9600000000000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEEECECECECECEEEFEFF2FBEAE4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E17A343434343333333332323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A292929292929292828282828282727272727262525252525252525252524242323232323232323232222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B2C9EF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE32C00000000000000000000000000000000000000000000000000000000000000000000000073C1C3C5C7C9CBCDCED0D2D4D6D8D9DBDDDEE0E1E3E4E6E7E9EAEBECEDEEEFF0F2F2F3F4F5F5F7F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFB9600000000000000000000000000000000000000000000000000000000000000000000000007B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7ECECECECEBEAE9E9EAEBF1F9E9E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E17A34343434333333333332313131313131313030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B292929292929292828282828282727272727262525252525252425252524242323232323232323232222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B2394F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC40F00000000000000000000000000000000000000000000000000000000000000000000000073C1C4C5C7C9CBCDCFD0D3D4D6D8D9DBDDDEE0E1E3E5E6E7E9EAEBECEDEEEFF0F2F3F3F4F5F5F7F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFB960000000000000000000000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F3F2F2F3F4F4F4F6F4F9FDEFEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D67534343434343333333332323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A2929292929292828282828282727272727262525252525252525252524242423232323232323232222222220202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B2480F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D0700000000000000000000000000000000000000000000000000000000000000000000000073C2C4C6C8CACBCDCFD1D3D4D7D8DADCDDDEE0E2E3E5E6E7E9EAEBECEEEFEFF0F2F3F3F4F5F5F7F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBAA0A0000000000000000000000000000000000000000000000000000000000000000000000004CF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E4E6E7E6E6E4E4E4E4EAF3E2DADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDE7A3434343434333333333332313131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A2929292929292928282828282827272727272625252525252525252525242423232323232323232222222220202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B2482F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6550000000000000000000000000000000000000000000000000000000000000000000000000074C2C5C6C8CACCCECFD2D3D5D7D8DADCDDDFE1E2E4E5E6E7E9EAEBECEEEFF0F0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBBE0A00000000000000000000000000000000000000000000000000000000000000000000000023D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E3E2E1E3E4E6E4E6E7EEF8E7DEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDE793434343434343333333332323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2929292929292928282828282827272727272625252525252525252525242423232323232323232222222220202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1B2482F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE32C0000000000000000000000000000000000000000000000000000000000000000000000000774C3C5C7C9CACDCED0D2D4D6D7D9DBDCDDDFE1E2E4E5E6E7E9EAEBECEEEFF0F1F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBBE0A00000000000000000000000000000000000000000000000000000000000000000000000007ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4F3F4F4F4F6F6F6F8F8FCFFF2EEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADA7A343434343434333333333332313131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A29292929292928282828282827272727272625252525252525252525242423232323232323232222222220202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D2582F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9070000000000000000000000000000000000000000000000000000000000000000000000000893C4C5C7C9CBCDCFD0D2D4D6D7D9DBDCDEE0E1E2E4E5E7E8E9EAEBECEEEFF0F1F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBBE0A000000000000000000000000000000000000000000000000000000000000000000000000006AF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAE9E7E6E7E6E4E6E7E7EAF4E4DBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7C385504A4A4A49494949494949484848484848484747474746464645444444444443434444444444424242424242414141414142404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A3A393939393939383837373737373737373737353535353536353535353535343434343434343333333332323131313131313030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A29292929292929282828282827272727272625252525252525252525242423232323232323232222222220202020201F1F1F1F1F1F1F1F1D1D1D1D1D2582F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000000000000000000000000000000894C4C6C8CACBCDCFD1D3D4D6D8D9DBDDDEE0E1E3E4E6E7E8EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBDC1E000000000000000000000000000000000000000000000000000000000000000000000000002CE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBECECEAEBEBEAEAEBEAF1F9E9E1DFDEDEDFDEDEDEDEDEDEDEDFDEDEDEDEDEDFE1E1E2E2E3E3E3E3E3E3E3E2E2E2E1E1E1E1E1E2E1E1DFDFE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1D68E514A49494949494949494848484848484847474746464645444444444444434344444444424242424242424141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A3939393939393838383737373737373737373535353535363635353535353534343434343433333333333231313131313130303030303030303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B29292929292929282828282828272727272726252525252525252525242423232323232323232222222220202020201F1F1F1F1F1F1F1D1D1D1D2E9FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE335000000000000000000000000000000000000000000000000000000000000000000000000001794C5C6C8CACCCECFD2D3D5D7D8DADCDDDEE0E2E3E5E6E7E9EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBDC1E0000000000000000000000000000000000000000000000000000000000000000000000000007ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEEEEEEEEECECECEEEEF3FBEBE3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBD69D5549494949494949484848484848484747474746464645444444444443434344444444424242424242414141414142404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A3A393939393939383837373737373737373737353535353536353535353535343434343434343333333332323131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A292929292929282828282828272727272726252525252525252525242423232323232323232222222220202020201F1F1F1F1F1F1F1D1D439FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB90F0000000000000000000000000000000000000000000000000000000000000000000000000017ACC5C7C9CBCDCED0D2D3D6D7D9DBDCDDDFE0E2E4E5E6E7E9EAEBECEDEEEFF0F2F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBF03C00000000000000000000000000000000000000000000000000000000000000000000000000006AF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F3F3F4F4F4F3F4F3F3F9FFEEEAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDED7AA624949494949484848484848484847474746464645444444444444434344444444424242424242424141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A393939393939383838373737373737373737353535353536363535353535353434343434343333333333323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A292929292929282828282828272727272726252525252525252525242424232323232323232222222220202020201F1F1F1F1F1F1F54B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7500000000000000000000000000000000000000000000000000000000000000000000000000001FACC6C7CACBCDCFD0D2D4D6D7D9DBDCDEDFE1E2E4E5E6E7E9EAEBECEEEFEFF0F2F2F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBF03C00000000000000000000000000000000000000000000000000000000000000000000000000002CE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF2F3F2F2F3F4F3F3F4F4F8FDECE7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1B37749494948484848484848484747474746464645444444444443434344444444424242424242414141414142424040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A3A393939393939383837373737373737373737353535353536353535353535343434343434333333333332313131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A292929292929292828282828272727272726252525252525252525242424232323232323232222222220202020201F1F1F1F1F70D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE33500000000000000000000000000000000000000000000000000000000000000000000000000002FBDC6C8CACCCECFD1D3D4D6D8D9DBDDDEE0E1E2E4E5E6E8E9EAEBECEEEFF0F0F2F3F3F4F5F5F6F7F8F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBF06400000000000000000000000000000000000000000000000000000000000000000000000000000797FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E6E6E6E7E7E7E7E7E9EEF8E9DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFC88D5049484848484848484747474746464645444444444444434344444444424242424242424141414142424040404040403E3E3E3F3F3F3F3E3E3E3E3E3E3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A393939393939383838373737373737373737373535353536353535353535353434343434343333333332323131313131313030303030302F303030302F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B292929292929292828282828272727272726252525252525252525242423232323232323232222222020202020201F1F318DF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0700000000000000000000000000000000000000000000000000000000000000000000000000003FBDC7C9CBCDCED0D2D3D5D7D8DADCDDDEE0E1E3E4E6E7E8E9EAEBECEEEFF0F1F2F3F3F4F5F5F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFA780000000000000000000000000000000000000000000000000000000000000000000000000000004CEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFF1EFEEECECECECEEEFF4FBECE4E3E3E3E3E3E3E3E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDEDEDFDEDEDEDEDEDEDEDFDEDEDEDEDEDFE1E1E2E2E3E3E3E3E3E3E3E2E2E2E1E1E1E1E1E2E1E1DFDFE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1DAA669484848484848484747474646464545444444444443434444444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A3A3939393939393838373737373737373737373535353535363535353535353434343434343333333333323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A29292929292928282828282727272727262525252525252525252424242323232323232322222220202020201F55B1F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6550000000000000000000000000000000000000000000000000000000000000000000000000000004EC6C8CACBCDCFD0D2D4D6D7D9DBDCDDDFE0E2E3E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFB960A000000000000000000000000000000000000000000000000000000000000000000000000000019B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9E7E9E7E9E9E7E9E9EAEEF8E6DFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D3D3D3D1D1D1D0D1D1D1D0D1D1D1D3D1D3D3D5D7D7D7D7D7D7D9D7D7D7D7D5D6D6D7D7D5D5BA814E484848484747474746464645444444444444434344444444424242424242424141414142424040404040403E3E3E3F3F3F3F3E3E3E3E3E3E3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A393939393939383838373737373737373737353535353536353535353535353434343434333333333332323131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A2929292929292828282828282727272726252525252525252525242423232323232323232222222020203285DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE1900000000000000000000000000000000000000000000000000000000000000000000000000000076C7C9CACCCECFD1D3D4D6D8D9DBDCDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBBE0A00000000000000000000000000000000000000000000000000000000000000000000000000000075F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9EAEBEAECECEBEEECECF3FCEBE4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1D5A6694848474747474646464544444444444443434444444444424242424242414141414142404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A393939393939383838373737373737373737373535353536363535353535353434343434343333333332323131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A2929292929292828282828282727272726252525252525252525242423232323232323232222222055B3F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000000000000000000000000000000000088FC7C9CBCDCED0D2D3D5D7D8DADCDDDEE0E1E2E4E5E6E8E9EAEBECEEEFEFF0F2F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBD21E00000000000000000000000000000000000000000000000000000000000000000000000000000023CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEAEBEAEAEBEAEAEBE9EEF8E9E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCC38C534747474646464544444444444443434444444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A3939393939393838373737373737373737373535353535363535353535353434343434343333333333323131313131313030303030302F303030302F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A292929292929282828282828272727272625252525252525252524242323232323232323223C8DE7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD92C0000000000000000000000000000000000000000000000000000000000000000000000000000001897C8CACBCDCFD0D2D4D6D7D9DBDCDDDFE0E2E3E4E6E7E8E9EAEBECEEEFF0F0F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBDC3C0000000000000000000000000000000000000000000000000000000000000000000000000000000075F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFDFE1DFDFE1E1E1DFE3ECDED7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEAE7A474646464545444444444444434344444444424242424242424141414142424040404040403E3E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A39393939393938383837373737373737373735353535353636353535353535343434343434333333333232313131313131303030303030303030302F2F2E2E2E2E2E2E2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A292929292929282828282828272727272625252525252525252524242323232323232A6BC7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820700000000000000000000000000000000000000000000000000000000000000000000000000000020AFC9CACCCECFD1D3D4D6D8D9DBDCDEDFE1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBF05A0000000000000000000000000000000000000000000000000000000000000000000000000000000023CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEEEEFEEEFEFF1F1F1F6FDEEE9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6CBA07046464544444444444443434444444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A3A3939393A3A3A3939393939393838373737373737373737373535353535363535353535353434343434343333333332323131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2B2B2B2B2B2B292929292929282828282828272727272625252525252525252524242323232361BBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD92C0000000000000000000000000000000000000000000000000000000000000000000000000000000040C0CACBCDCFD0D2D3D5D7D8DADCDDDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFA82000000000000000000000000000000000000000000000000000000000000000000000000000000000075F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEEEEEEEEEEEEEEEECECF1F8E7DFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBD9A26944444444444443434444444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A3939393939393838383737373737373737373535353535363535353535353434343434343333333333323131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B292929292929282828282828272727272625252525252425252524242361ABF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8207000000000000000000000000000000000000000000000000000000000000000000000000000000005FC9CACCCECFD1D3D4D6D7D9DBDCDDDFE0E2E3E4E6E7E8E9EAEBECEEEFEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFAAA0A0000000000000000000000000000000000000000000000000000000000000000000000000000000023CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEBECEBECECEBEAEBF1F9E9E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCCC97664444444343444444444442424242424242414141414242404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A3939393939393838383737373737373737373735353535363635353535353534343434343433333333323131313131313030303030302F303030302F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B292929292929282828282828272727272625252525252525252461ABF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE2C00000000000000000000000000000000000000000000000000000000000000000000000000000000087FC9CBCDCED0D2D3D5D7D8D9DBDCDEDFE1E2E4E5E6E7E9EAEBECECEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBD21E000000000000000000000000000000000000000000000000000000000000000000000000000000000060F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEECECEBECECEBEBECECF1F8E7DFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1D0A0724343444444444442424242424242414141414142404040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3C3B3B3A3A3A3A3939393A3A3A39393939393938383737373737373737373735353535353635353535353534343434343433333333323231313131313130303030302F303030302F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B292929292929282828282827272727272625252525252562ACF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67500000000000000000000000000000000000000000000000000000000000000000000000000000000001899CACCCECFD1D2D4D6D7D9DADCDDDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBE63C000000000000000000000000000000000000000000000000000000000000000000000000000000000019ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E3E4E6E4E6E6E6E6E7E9ECF6E4DCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9CDA6765044444442424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A393939393939383837373737373737373737353535353536353535353535343434343434333333333232313131313131303030303030303030302F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B292929292929282828282827272727272525253675BDF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB919000000000000000000000000000000000000000000000000000000000000000000000000000000000030B1CBCDCED0D2D3D5D6D8D9DBDCDDDFE0E2E3E4E6E7E8E9EAEBECEEEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFA770000000000000000000000000000000000000000000000000000000000000000000000000000000000004CEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE1E2E2E2E3E6E6E6E7E7EEF7E6DEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADAB28E5F42424242424242414141414142424040404040403E3E3E3F3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A393939393939383838373737373737373737353535353536353535353535343434343434333333333332313131313131303030303030303030302F2F2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B29292929292928282828282727272726518FD0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED5500000000000000000000000000000000000000000000000000000000000000000000000000000000000058C2CCCECFD0D2D4D6D7D8DADCDDDEE0E1E2E4E5E6E7E9EAEBECECEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAAA0A0000000000000000000000000000000000000000000000000000000000000000000000000000000000078DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEEEECEEEEECECEEEFF4FCEBE6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBD9B47D5042424241414141414242404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A3A39393939393938383737373737373737373735353535363635353535353434343434343333333333323131313131313030303030302F3030302F2F2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2A2929292929292828282828273775B4F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970F00000000000000000000000000000000000000000000000000000000000000000000000000000000000881CBCDCED0D2D3D4D6D8D9DBDCDDDFE0E1E3E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBD22800000000000000000000000000000000000000000000000000000000000000000000000000000000000023C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEBECECECECECECECF3FBEAE3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBBF966F47414141414242404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3C3B3B3A3A3A3A3939393A3A3A39393939393938383737373737373737373735353535363635353535353534343434343433333333323131313131313030303030302F3030302F2F2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2A29292929292928283A63A3E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE2C00000000000000000000000000000000000000000000000000000000000000000000000000000000000018A2CCCECFD0D2D4D6D7D8DADBDDDEE0E1E2E4E5E6E7E8E9EAEBECEEEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBF0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000055EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4F7F7F6F7F6F3F4F4F4F9FFEFE9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7C39A71504242404040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A39393939393938383737373737373737373735353535353635353535353534343434343433333333323131313131313030303030302F3030302F2F2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2B2B2B2B2B2A292929293A6EA3E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED600000000000000000000000000000000000000000000000000000000000000000000000000000000000000038BBCDCED0D2D3D4D6D8D9DBDCDDDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F8F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFA8C0A000000000000000000000000000000000000000000000000000000000000000000000000000000000000078DF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD7D7D7D9DADADADADBDCE1EADBD6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9C19F785B40404040403E3E3E3F3F3F3E3E3E3E3E3E3E3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A39393939393938383837373737373737373735353535353635353535353534343434343433333333323131313131313030303030302F3030302F2F2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2B2B2B2B2B294B81B5E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970F000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ACDCECFD1D2D4D6D7D8DADBDDDEDFE1E2E3E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F3F4F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAC81E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000023ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEEEEEFF1F2F2F2F3F4F9FFEFEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDED5B68F6D4D3E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A39393939393938383837373737373737373735353535353635353535353534343434343433333333323131313131313030303030302F3030302F2F2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2B446F9BC9F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC42300000000000000000000000000000000000000000000000000000000000000000000000000000000000000199BCDCFD0D2D3D5D6D8D9DBDCDDDEE0E1E2E4E5E6E7E9EAEBECECEEEFEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBF050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E7E7E6E6E6E6E6E4E4E7F2E2DBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DACFB29272543F3E3E3E3E3E3E3D3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3939393939393838383737373737373737373535353535363535353535353434343434343333333332313131313131303030303030303030302F2E2E2E2E2E2E2D2D2D2D2D2C2C4E79A6C9F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD94C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039BDCED0D1D3D4D6D7D8DADBDDDEDFE1E2E3E5E6E7E8E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFA8C0A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7ECEEEEEFEFEFEFEEEFEFF4FCECE9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFD9C2A2876C523E3D3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A3939393939393838383737373737373737373535353535363535353535353434343434343333333332313131313131303030303030303030302F2E2E2E2E2E2E2D507193B8D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66A0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ACECFD0D2D4D5D7D8D9DBDCDDDEE0E1E2E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAC71E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078DF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEEEEEEEEEEFEFEEEEEFF6FCEBE3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADABCAB977E63513C3B3B3A3A3A3A393939393A3A393939393939383838373737373737373737353535353536353535353535343434343434333333333231313131313130303030302F3030302F2F516982A6C0D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68D0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000199CCFD0D2D3D4D6D7D9DADCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFAF05A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F97FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E3E3E3E4E6E4E6E3E3E7EFDED6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBC3BC9C907D6A5B4839393A3A3939393939393838373737373737373737373535353535363535353535353434343434333333333332313131313131303041586B84A8AFD9E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA21900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042C6CFD1D3D4D6D7D8D9DBDCDDDFE0E1E3E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F3F3F4F4F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAA90A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAE9E7E6E6E6E7E7E7E9ECF7E6DEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFD3C0BAA0A18B7D7D715B5B533737373737373737373535353536363535353535343434343434335D5D5D7587859FB0B0DADAF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000884CFD0D2D3D5D6D8D9DBDCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFADC450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E3E4E2E3E3E2E1E3E3E9F3E2DADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADABCBCBCBBBABBBBBCBC877373737373737582828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029B6D0D2D3D4D6D7D8DADBDDDEDFE0E2E3E4E5E6E7E9EAEAEBECEDEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFA820A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEFECEFEFEFF1F1F1F1F6FCECE6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2A58383838383828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC435000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063D0D1D3D4D6D7D8D9DBDCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFEFF0F1F2F3F3F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAC728000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFBFBFCFBF9FBF9FDFFF3F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD935000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021A6D1D2D4D5D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF07700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAEAEBEAEBE9E9EBEBEAF1F9E9E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD95500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063C8D2D3D5D6D7D9DADBDDDEDFE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F1F2F3F3F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAC72800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEF1F1F1F2F2F1F2F1F2F7FCEBE4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAA28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC44C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019A6D2D3D4D6D7D8D9DBDCDDDEE0E1E2E4E5E6E7E7E9EAEBECECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF0770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAE9E9E7E9E9E6E9E7E7ECF7E6DFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDE9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053CAD3D4D6D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E9E9EAEBECEDEEEFF0F0F1F2F3F3F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFBFAC7280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7E9E7E7E6E7E6E4E6E7ECF7E6DCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEA48282828383838383838283D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA235000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001997D3D4D6D7D8D9DBDCDDDEDFE0E1E2E4E5E6E7E8E9EAEBECECEEEFEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAF0770A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002397F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EFEFEFEEEFEEEEEEECEFF3FBEAE2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDB9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A223000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064CBD4D5D6D8D9DADBDDDEDFE0E1E2E4E5E6E7E7E9EAEBEBECEDEEEFF0F0F2F2F3F3F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAD13200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F75EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4F3F4F4F4F6F6F6F8F8FCFFF2EEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADC9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED820F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002AA8D4D5D6D7D9DADBDCDDDEE0E1E2E3E4E5E6E7E9E9EAEBECEDEEEFEFF0F1F2F3F3F4F4F5F5F6F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9950A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000755D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E4E3E3E3E2DFE1E1E1E6F1E1D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDC9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD960070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086ED4D5D6D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E8E9EAEBECECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAFADB500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFE1E1E1E3E2E1E3E3E1E6F1E1DBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB94C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003AB9D5D6D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E8E9EAEBECECEDEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAA91E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198DEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E7E7E9E9E9E9E9E7E7EBF6E6DCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDF9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED8D23000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001A8FD5D6D7D8D9DBDCDDDEDFE0E1E2E4E5E6E7E7E9EAEAEBECEDEEEFEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAEF770A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000755CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E7E9E6E6E6E6E6E7E9EEF9E9E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DF9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9600700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005DCDD6D7D8D9DBDCDDDEDFE0E1E2E4E5E5E6E7E9E9EAEBECEDEEEFEFF0F1F2F2F3F3F4F5F5F6F7F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAD1450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C97F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9E7E6E6E6E7E6E7E7E7EAF4E4DCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A23500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033B3D6D7D8D9DBDCDDDEDFE0E1E2E4E4E5E6E7E8E9EAEBECECEEEEEFF0F0F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9A91E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000760CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E3E3E3E2E3E4E4E4E3E7F2E1D9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E39F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE600F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001188D6D7D8D9DBDCDDDEDFE0E1E2E4E4E5E6E7E8E9EAEBECECEDEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAEF820A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000238DEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDEDEDFDEDEDEDEDFE1E1E4F1E1D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D99C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6972C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000866CED7D8D9DBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBEBECEDEEEFEFF0F1F2F2F3F4F4F5F5F6F7F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAF9E55A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074CADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAE9EAEAEBEBEAECECEEF3FBEAE2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D3D3D3D1D1D1D0D1D1D1D0D1D1D1D3D1D3D3D5D7D7D7D7D7D7D9D7D7D7D7D5D6D6D7D7D5D5D5D5D5D6D6D6D6D7D7D7D7D7D7D7D7D7D9D9DADAD9D9D9D9DADADADBDCDCDEDEDEDCDEDFE1DFE1E1E1DFDEDEDEDEDEDFE19F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9550700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004DBCD7D8D9DBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBEBECEDEEEFEFF0F1F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9C73C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F60CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EEEFF1F1EFEFEEEEECECF3FBEBE4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE750F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002BA4D8D9D9DBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEAEBECEDEEEFEFF0F0F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF99F1E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001982E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFF1EFEFF1F1EEEFF1EFF4FBEAE2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3822C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001189D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEAEBECEDEEEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9EF8C1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C82E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F1EFEFEEEEECECEEEFEFF4FBEBE4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED974000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000870D0D9DADBDCDDDEDFE0E1E2E4E4E5E6E7E8E9EAEAEBECEDEEEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9E56D0A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C82E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEBEBECECEEEEEEEFF4FCECE4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED9740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085EC7D9DBDBDCDDDEE0E0E1E2E4E4E5E6E7E8E9EAEAEBECECEEEEEFF0F0F1F2F2F3F4F4F5F5F6F6F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9E55A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003582E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAE9E9E7E9E9E7EAEBEBEFF8E7E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDC9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3974000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004EB5D9DBDCDDDDDEE0E1E1E2E4E4E5E6E7E8E9EAEAEBECECEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9D15A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C75CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E6E4E6E6E6E6E4E6E7E6EBF4E4DCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDF9F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE822C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034B6DADBDCDDDEDFE0E1E2E2E4E5E5E6E7E8E9EAEAEBECECEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9D13C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001960B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EFF1F1EFEEEEEEEEEEEEF3FBE9E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADA9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB975190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034A5DADBDCDDDEDFE0E1E2E3E4E5E6E6E7E8E9EAEAEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9BD3B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074C97E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFE1E1DFE1DEDEDFE1E2E6F1E2DBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADC9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3974C07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034A5DBDCDDDDDEE0E0E1E2E3E4E5E6E6E7E8E9EAEBEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9BD3B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002375B9F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E7E7E9E9E9EAEAEBEBEBF2FBEAE3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDE9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB975230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034A6DBDCDDDEDFE0E1E2E2E4E4E5E6E7E7E9E9EAEBEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9F9BD3B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074082C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E3E1DFE1E1E1E1E1E1E6EFDED6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDE9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD98D4007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034A7DCDCDDDEDFE0E1E2E3E4E5E5E6E7E8E9E9EAEBEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9F9C759000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F4C8DD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E6E6E6E6E6E7E7E7E7EBF7E7DFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE38D4C0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034A7DCDDDEDEE0E1E1E2E3E4E5E6E6E7E8E9EAEAEBECECEDEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9D1590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F4C8DCEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E6E6E6E6E7E7E6E9E7E7EBF4E4DEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD98D4C190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004FB9DDDDDEDFE0E1E2E2E4E4E5E6E7E7E9E9EAEAEBECECEDEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9D16D0A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074082B9F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF6F6F4F3F4F4F3F4F4F4F9FFEEE9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDE9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C482400700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004FB9DDDEDFE0E1E1E2E3E4E5E5E6E7E8E9E9EAEBEBECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9E57713000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C6097D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEBEBECECECECECECF2FBEBE3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D79C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9A26A2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001161CCDEDEE0E0E1E2E2E4E4E5E6E6E7E8E9EAEAEBECECEDEEEEEFF0F0F1F2F2F3F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9EF952800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007356AADE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F3F4F2F2F2F1EFEFEFF3FBEBE6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E19F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3AD754007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000237CD4DEDFE0E1E2E2E3E4E5E5E6E7E7E9E9EAEBEBECECEDEEEFEFF0F0F1F2F2F3F3F4F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9B33B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007356A97CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDCDBDBDBDADAD9DBDADBDFE9DAD5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDB9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEA26A350F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000358DDEDFE0E1E1E2E3E4E5E5E6E7E7E8E9EAEAEBEBECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9C6590A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C5582ADD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBECEFEFEEEEEEEEECECF1F9E9DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D79C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9B98D552C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000950A9DFE0E0E1E2E2E4E4E5E6E6E7E8E9E9EAEBEBECECEDEEEEEFF0F0F1F2F2F2F3F3F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9E58B1E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C5582ADCEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDCDEDFDEDCDEDCDBDBDBDEE7D7D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADA9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEAD82552C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B74CEE0E0E1E2E2E4E4E5E5E6E7E7E8E9EAEAEBEBECEDEEEEEFEFF0F0F1F2F2F3F3F3F4F4F5F5F6F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8B34500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001935608DADCEF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAECECECEFEFEEEEEFEFF2FBE9E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D99C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEAD8D60351900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003597E0E0E1E2E2E3E4E5E5E6E7E7E8E9E9EAEBEBECECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F4F5F5F6F7F7F7F8F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9DA6D130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F2C4C6097A2CEEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E3E3E2E2E3E4E3E4E4E3E9F1E1D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBA28282828282828282828282D0FFFFFFFFFFFFFFEDCEAD9760552C0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162BCE0E1E2E2E3E4E5E5E6E7E7E8E9E9EAEAEBECECEDEEEEEFEFF0F0F1F2F2F3F3F3F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8A845000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003E8FD7E1E2E2E3E4E5E5E6E7E7E8E9E9EAEAEBEBECECEEEEEFEFF0F0F1F1F2F2F3F3F4F4F4F5F5F6F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F8DA811E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000116BC6E1E2E2E3E4E5E5E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F1F2F2F3F3F3F4F4F5F5F5F6F7F7F7F7F8F8F8F9F9F9FAFAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8B3500A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004899E1E2E3E4E4E5E5E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F1F2F2F2F3F3F4F4F4F5F5F5F6F7F7F7F8F8F8F8F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8E595450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002D87D0E2E3E4E4E5E6E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F8F8DA81280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B6CC7E2E3E4E5E5E6E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F0F1F2F2F3F3F3F4F4F4F5F5F6F6F7F7F7F8F8F8F8F9F9F9FAFAFAFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8C67613000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125AACE3E4E4E5E5E6E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F0F1F2F2F2F3F3F4F4F4F5F5F5F6F7F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F8F8F8B36313000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125AA4E4E4E5E5E6E6E7E7E8E9E9EAEAEAEBEBECECEDEEEEEFEFF0F0F0F1F2F2F2F3F3F4F4F4F5F5F5F6F6F7F7F7F8F8F8F8F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8B36313000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125BA5E4E4E5E5E6E6E7E7E8E9E9EAEAEBEBECECECEDEEEEEFEFF0F0F0F1F2F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8B26C1E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5BA5E4E5E5E6E6E7E7E8E9E9EAEAEAEBEBECECEDEEEEEEEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F5F5F6F6F7F7F7F7F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8F8C681310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E6DB7E5E5E6E6E7E7E8E9E9E9EAEAEBEBECECECEDEEEEEFEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F5F5F5F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8D994450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003F77C9E6E6E6E7E7E8E9E9E9EAEAEBEBEBECECEDEEEEEEEFEFF0F0F0F1F1F2F2F2F3F3F4F4F4F4F5F5F5F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8EDA8631E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5C9BDDE6E7E7E7E8E9E9E9EAEAEBEBEBECECECEDEEEEEFEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F5F5F5F5F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7CF81450A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004077C1E6E7E7E7E8E9E9E9EAEAEBEBEBECECECEDEEEEEEEFEFF0F0F0F1F1F2F2F2F3F3F3F4F4F4F5F5F5F6F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAF9F9F9F9F9F8F8F8F8F7EDB27628000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025659CDEE7E7E8E8E9E9EAEAEAEBEBEBECECECEDEEEEEEEFEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F4F5F5F5F6F6F7F7F7F7F8F8F8F8F9F9F9F9F9FAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F8F8F8F8F7F7E4A86C280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5C9DD5E7E8E8E9E9E9EAEAEAEBEBECECECEDEDEEEEEEEFEFEFF0F0F0F1F2F2F2F2F3F3F3F4F4F4F5F5F5F5F6F6F7F7F7F7F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAFAF9F9F9F9F8F8F8F8F7F7F7D99E622800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000255394CBE8E8E9E9E9EAEAEAEBEBEBECECECEDEEEEEEEFEFEFEFF0F0F0F1F1F2F2F2F3F3F3F4F4F4F4F5F5F5F6F6F7F7F7F7F7F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F8F7F7F7E4A7763B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037659DD6E9E9E9EAEAEAEAEBEBEBECECECEDEDEEEEEEEFEFEFF0F0F0F0F1F2F2F2F2F3F3F3F4F4F4F4F5F5F5F5F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9FAFAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F8F7F7F7F7EDBB804F1E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124179A8E0E9EAEAEAEAEBEBEBEBECECECEDEDEEEEEEEFEFEFEFF0F0F0F1F1F2F2F2F2F3F3F3F4F4F4F4F5F5F5F5F6F6F7F7F7F7F7F8F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F8F8F8F8F8F7F7F7F7F7D8A775440A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000938669ECDEAEAEAEAEBEBEBEBECECECECEDEDEEEEEEEFEFEFEFF0F0F0F0F1F1F2F2F2F3F3F3F3F4F4F4F4F5F5F5F5F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F8F8F7F7F7F7F6F6CE9D6C3B1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000938678CC4EAEAEBEBEBEBECECECECECEDEDEEEEEEEEEFEFEFEFF0F0F0F0F1F1F2F2F2F2F3F3F3F3F4F4F4F4F5F5F5F5F6F6F6F7F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F8F8F8F8F8F7F7F7F7F7F6F6F6D7A6804F27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C4B7A9FCEEBEBEBEBECECECECECEDEDEEEEEEEEEEEFEFEFEFF0F0F0F0F0F1F1F2F2F2F2F3F3F3F3F4F4F4F4F4F5F5F5F5F6F6F6F7F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F8F8F8F8F8F7F7F7F7F7F7F6F6F5EBC4936C4E27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D41678DBCE3ECECECECECECEDEDEDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F2F2F2F2F2F3F3F3F3F4F4F4F4F4F5F5F5F5F5F6F6F7F7F7F7F7F7F8F8F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F6F6F6F5F5F5C49D7558310A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092F557197BDE3ECEDEDEDEDEEEEEEEEEEEEEEEFEFEFEFEFEFF0F0F0F0F0F0F1F1F2F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5F6F6F6F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F5F5F5F5E2C3927F623113000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132F56728FBEDBEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F1F1F1F2F2F2F2F2F2F3F3F3F3F3F4F4F4F4F4F4F5F5F5F5F5F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F5F5F5F5F5F5F4CDBA927F623A310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000263960728FB6BFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F1F1F1F1F2F2F2F2F2F2F2F3F3F3F3F3F3F4F4F4F4F4F4F5F5F5F5F5F5F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2F2F2F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0C8A4A8A4A7A7A7AAACB0B0B9D0AEA09C9CA09CA0A0A0A09F9C9C9F9FA1A3A5A8A7A7A7A7AAAAA8ACABABA7A7A7AAA7A7A7AAACACB0ACACB0B0B0ACB0B2B2B2B2B5B2B6B6BBBBBBBDBFBFC3BFC3C3C4C5C3C3C3C0C0C3C5C8C5C5C4C4C4C4C6C6C5C8C6C5C6C9C6C6C9C9C9C9C6C5C5C1C5C5C6C5C6C6C6C9C9C9C9C8C6C9C9C8C8C8C6C5C1C3C5C5C5C5C5C8C5C6C6C9C8C5C5C8C5C6C4C1C1C1C4C4C0C1C0C3C0C0BDBDBBB9B8B8B5B5B5B6B5B2B2AEB2AEAEACABACABA7ABABABABABACACB1AEAEB1B1B1B5B2B2B2B0B0B0B0B0ACAEB0B2B2B2B6B6B2B2B6B6B5B1AEAEAEAEB0B0B0B0B1AEABABACB1B1B1B0B1B1AEABACACACACACB0ACAAACACB0B0ACAAA8A8ABACB0ACACAAABA8ABAAACACACABABAAABABAAABABACACACACABAEB1B1B2B1B0AEB0B0ACAEACACACACACB1ACB1B2B1B2B2B2B2B2B2B2B2B1B1ACB1ACABABABACB1AEAEAEB1B2B2B2AEB2B5B6B6B6B6B2B5B5B5B8BBB8B5B5B5B8B5B8BBB9B9B5B8BBBDC0C0BDBBBBBDBDBDBDC0C1C1BFBDBDBFBDBDBDBDBDC0BFBFBDBDC0BDBDBDBDB9BBBBB9B6B6B9B9B8B8B5B5B5B5B8B8B8B8B8B5B5B5B2B5B2B2B5B5B6B5B6B8B8B8B5B5B5B2B0ACACACABACACACACACACA8ACAAA8A8A8A8A8ACACACACB0AEACAAAAAAA8A8A7A7A5A7A8A8A8AAACABACA8A8ACAEACACB0B2B2B5B2B2B1B2B2B2B1B2B2B5B5B9BBB9BBBBB9B9B8B9B9BDB9B8B5B5B5B5B8B5B8B5B6B9B9BDBDBDBBBBBBBBBBBBBDBDBBBBBDBDBDBDBBBBBBBBBBB6B5B5B9B5B8B8B5B2B2B5B5B5B5B2B2B2B5B5B1B1B0B0ACACACACACACAAAAA7AAAAAAAAAAA7A7A7A7A5A1A1A5A5A5A5A1A3A3A5A5A09E9E9E9E9EA1A09E9F9E9B9B9B9C9E9E9B9B9898989A9A9A989797949494949694908F8F8D8E8E8C8E929294949494979797989B9B9C9EA19E9E9E9C989B9B9C9A9C9FA1A5A5A7A7AAAAAAA7AAA8A8A8A7A72A010101010101020101010190F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F5F5F5F5F5F5F6F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F7F6F6F6F6F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2D3B5B8B6B6B8B6B5B6BBBCC5D7B2A2A3A2A2A2A3A3A7A7AAAAA8A8A8A7A3A3A5A7A7A3A2A2A29F9F9EA2A2A1A2A3A3A3A5A7A7A7A3A3A5A7A3A3A3A7A7A7A8A7A3A2A2A3A3A3A3A1A1A3A2A2A3A5A5A3A2A2A2A2A3A7A8ACACABABAEABA7ABABA7A7ABA7A3A3A3A5A3A3A7A5A3A5A3A3A3A7AAAAA7A8A8A8AAAAA7A7A5A7A8A7A7A8AAAAAAAAAAAAAEAAABAEAEAEAEABABABABA7A7A5A5A7AAAEAEAEAEB0B2AEABACACAAABB0AEAEB1B2B0B0B0ACACB0B2B2B0B0B2B5B5B3B3B3B2B1B0B2B3B3B2B3B5B5B5B5B8B8BBBBB9B9B6B5B5B5B3B5B2B5B5B6B6B3B6B6B8B5B3B3B3B3B3B5B3B3B5B3B2B2B2B2B2B2B2B0B2B2B2B5B2B0B2B2B2AEB2B1B2B2B0B1B1B2B2B2B1B2B3B6B6B5B8B9B8B9B6B3B2B3B2B2B3B1AEAAAAAEB1ACACAAABAAAAABABAEAEACACB1B1AEAEAEAEABABABAEB1B1B1B1AEB0B1B2B3B2AEAEAEB2B2B3B5B6B6B6B6B9B5B5B9B9B9BBBBB9B9B5B3B3B6B6B6B6B5B5B8BBBBBFBBBFBFBFC0BFBFBFBFBFBDBDBFBFBFBFC0C0C0C0C3C3C5C8C9CACBCFD0D3D5D5D5D5D4D7D7D7D7D9D7D3D7D3D3D4D1D0D0D1D1CFD1D5D5D4D1D1D1D5D7D7D3D5D5D3D3D5D1D0D0D0D0D0CFD0CECECECFCFCAC9C9C9C9CAC9CBD0D0D0D1D1D1D1D0CECAC8C6C8C8C8C8C5C6C6C4C1C1C3C3C4C3C3C0C0BCBCBCBCBCBCBDBBBBB9B9B8B8B5B5B5B3B3B3B3B3B3B3B5B5B3B5B5B5B8B6B6B6B6BBBBB9B8B8BBBBBBB8B8B9B9B6B6B8BBBCBCBFBBBBB9B9B6B8B8B5B3B3B3B5B6B6B8BBBBB9B9B9B9B9B9B9B8B8BBBCBFC3C4C3C0C0C0C3C3C5C6C8C8C8C6C6C6C4C5C5C6C4C3C3C3C3C3C5C3C4C4C4C4C6C8C8C8C8C8C6C8C8C5C3C3C6C6C6C8C8C9C8C8C8C4C4C5C6C6C6C6C6C6C6C8C9CBCBCECECBD0D0D3D1D3D3D7D4D7D9D7DAD9D7D4D1D1D1D1D4D1D0D0D0D0D1D3D3D3D3D3D3D1D3D5D3D3D3D3D3D4D4D4D4D5D5D7DAD9D9DADBDE3A020202020202020202020292F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F6F6F6F6F7F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E6CED3D5D3D6D9D9DBDADAE6F2D0C1C3C4C3C3C3C0C0BCBCBBBDBDBBBBBBBFBFC1BFC1C1BFBCBCBCBCBCBCBCBCB9B9B6B3B2B2B5B5B5B9B9B9B9B9B9BBBDC0C1C1C0BDC0C1C0C0BDBBB9BBBCC0BCBCBBBCBCBFC1C3C3C0C1BDC1C3C3C3C3C1C0BFBDBDBBB9B9B9B9B9B9B9B9B9B6B9B9B6B6B6B9B9B5B6B3B3B5B5B5B3B6B6B6B5B5B5B3B3B3B6B6B6B9B8B5B8B8B3B3B3B3B8B8BBBBBDC0C0C0BCBCBCBBBBBCB9B9B5B5B5B6B9BBB8BBBCBBBBBDBFBFBFBCBFBFBFBFBDBDBDBDBDBDBFBFBDBDC1BDBFC0C1C1C1C1C4C5C5C8C5C5C5C3C3C3C4C3C3C5C3C4C4C5C6C5C6C6C6C9C9C8C8C6C6C6C6C4C5C5C5C5C5C3C4C6C9C6C6C9C9C6C4C4C3C3C0BDBBB9B9B9B9B9B8B6B3B6B8B8B5B3B2B1B1B1B1B1B3B5B5B3B3B3B8B5B5B6B6B8B5B5B5B5B8B5B6B5B5B2B6B6B3B3B2B3B3B3B1B0ACB1B1B0B1B1B1B1B2B2B1B3B3B3B1B1B2B1ACB1ACB1B1B0B0ACACACB1B0ACACACAAACAAAAAAACAAAAAAACB1B1B0ACACB0B1B2B2B6B5B5B5B6B8B8B8BBBDBBBDC0BCBCBBB8B8B5B2B2B1B0ACB1B2B2B2B1B1B1B1B1B1B3B3B5B5B8B5B5B8B5B5B5B2B2B2B6B6B6B5B5B2B2B2B5B5B5B2B2B2B2B3B3B5B9BBBBBDBBBDBBBBBFBDBBBBBCBCBCBDBCBBBBBBBBBBBDBDBDBBBBBBBDBDBDBDBFBCBCBCBBBBBDBDBFBCBCBDBBBCBCBDC1C1C3C4C4C5C8C9C8C9C9C9C8C9C9C8C9C6C6C6C6C6C6C6C6C5C9C8C8C8C9C8C9C9CACACBCBCED1D1CECACACAC9CACAC9CACACACACACBCBC9CBCBD0D0D0D0D1D1D1CFCFCFD1D3D5D5D3D3D0D0CED1D1D1D1D3D7D7D5D4D4D4D7D7D5D5D3D3D3D3D5D7D5D3D3D5D5D7D7D7D7D7DAD9D9D9DADBDAD9D9DBD9D7D7D7D7D7D4D5D4D5D4D7D7DADAD7D5D1D0CECACACACED0CBCACECECECECAC8C8C8C8C8C8C8C8C8C8C5C5C8C8C9C6C9C6C5C5C5C5C5C6C6C9C6C6C5C5C3C3BFBFBFBCC0BCBDBDBBBDBDBCBCB9B9B6B62E020202020202020202020292F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F6F6F6F6F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F1EAECECECECECECEFF2F1F3F6E1DBDAD9D9DBD9D7D7D7D7D7D4D7D4D7D4D7D7DADAD7D7D3D0CFCBCBCBCFD0CECBCFCFCFCFCBC9C9C9C9C9C9C9C9C9C9C6C6C9C9C9C8C9C8C5C5C5C5C5C8C8CAC8C8C5C5C3C3C0C0C0BDC1BDBFBFBBBFBFBDBDB9B9B8B8B8B9B9BBB8B5B5B5B3B3B3B8B3B3B2B0B1B5B5B2B2B1B2B2B1ACACABABAAA7A7A5A3A3A7A8A8A8AAACAAAAAAAAACB1ACACAAAAAAAAAAAAAAAAAAAAA8A5A5A5A5A5A5A5A5A2A2A29F9F9F9F9C99979B9B9C9C9C9C9E9E9B9B999B9C9C9F9F9FA2A2A2A2A29F9E9B97979B9E9B979797979799969396979796969697979797979B9C9B9B9E9E9F9E9E9E9EA1A2A2A2A5A5A2A2A1A1A1A1A3A1A1A2A2A19F9F9E9FA1A3A1A1A19F9F9C9C9FA2A5A5A5A5A5A7AAAAAAAAA7A7A7A7A7A7AAABABABA8A5A5A2A29F9F9E9EA2A2A3A7AAAAA7A3A5A8A5A5A5A3A5A8A8AAAAAAA8AAAAAAABAAAAACAAAAACB0B0B0B1B3B3B1B1B1B1ACB0ACACB0ACACACB0B0ACACACAAAAABB0B0ACACACACACB1B1B2B1B2B2B1B1B0B1B1B1ACACACB1B1B1B3B2B2B2B2B2B2B0B0ACB0B2B2B5B5B5B5B8B5B1B1B0B0ACAAACACACAAACACABACAAAAAAA7A5A5A7A7A7A7A5A5A5A3A5A3A3A3A3A3A2A2A2A2A2A2A2A3A2A3A7A5A5A7A7A3A3A5A7AAACACACACACACABABAAAAAAAAA7A7A3A3A7A5A5A5A3A3A7A5A5A2A2A29FA1A1A1A2A2A2A5A5A8A8A8A5A5A7AAACAAACB0B2B2B2B1B3B3B3B5B8B6B6B8B6B6B6B6B6B9B8B8B3B8B3B3B2B2B5B5B5B5B5B5B2B1ACAAACACABABABACACABACACACACB0B1B0ACACAAA8A5A5A5A8AAA8ABACACAAACB1B1B3B3B3B3B1B3B3B3B3B1B3B3B8BBBBBDBDBDBCB9B6B9B6B6B3B3B3B3B3B2B5B2B0ACACACB0B0B0B1ACACACACACB1B2B2B6B9B9BBB9BBBBBDC1C3C3C1C1C3C3C3C3C4C6C6C6C4C3C4C3C3C3C3C3C3C3C3C3C1C0C0C1C0C0BFC1C1C1C1C1C0C0BDBBBDBB2F020202020202020202020292F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5CFCECECBD0D0D0CECBCBD5EAC5B5B9B5B5B3B1B2B6B6B3B3B2B3B3B1AEAEACACAAA7A7A5A3A3A7A8A8A8ABAEABABABABAEB1AEAEABABABABABABAAAAAAAAA8A5A5A5A5A5A5A5A5A2A2A2A1A1A1A19D9B979B9B9D9D9D9D9F9F9C9C9B9C9D9DA1A1A1A2A2A2A2A2A19F9C99999C9F9C99999999999B979497979797979797979797979B9D9B9C9F9FA19F9F9F9FA2A2A2A2A5A5A2A2A2A2A2A2A3A2A2A2A2A2A1A19FA1A2A3A2A2A2A1A19D9DA1A2A5A5A5A5A5A7ABABABABA7A7A7A7A7A7AAACACACA8A5A5A2A2A1A19F9FA2A2A3A7AAAAA7A3A5A8A5A5A5A3A5A8A8ABABAAA8AAAAABACAAABACABABAEB1B1B1B1B5B5B1B2B1B2AEB1ACACB1ACACACB1B1ACACACABABACB1B1AEAEAEAEAEB1B1B3B1B3B3B1B1B1B1B1B1ACACACB1B1B2B5B3B3B3B3B3B3B1B1ACB1B3B3B6B6B6B6B9B6B2B1B1B1AEABAEAEAEABACACACACAAABABA7A5A5A7A7A7A7A5A5A5A3A5A3A3A3A3A3A2A2A2A2A2A2A2A3A2A3A7A5A5A7A7A3A3A5A7ABACACACACACACACACAAABAAAAA7A7A3A3A7A5A5A5A3A3A7A5A5A2A2A2A1A2A2A2A2A2A2A5A5A8A8A8A5A5A7AAACAAACB1B3B3B3B1B5B5B5B6B9B6B6B9B6B6B6B6B6BBB9B9B5B9B5B5B3B3B6B6B6B6B6B6B3B1ACABACACACACACAEAEACACACACACB1B1B1ACACAAA8A5A5A5A8AAA8ACACAEABAEB2B2B5B5B5B5B2B5B5B5B5B2B5B5B9BCBCBDBDBDBDBBB6BBB6B6B5B5B5B5B5B3B6B3B1ACACACB1B1B1B2AEAEACACACB1B3B3B6B9B9BCB9BCBCBDC1C3C3C1C1C3C3C3C3C5C8C8C8C5C3C5C3C3C3C4C3C3C3C3C3C1C0C0C1C0C0BFC1C1C1C1C1C0C0BDBCBDBCBBBDBDBDB9BCBDBDBCBDBDBFBFBDBDBDBBBBBBB9B9B9BCB9BCB9B9B9B6B3B1AEACACB1B2B6B5B5B2B2B3B6B6B6B6B2B2B2B2B1B1B1AEAEACACACACACABABA8A8A8A8A5A5A5A5AAACB1B1B2B1ACACACACAEABABAEACACAAAAAAA8A8A5A3A3A3A328010101010101010101010193F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6E4D0CECBCACBC9CACBD0D1DBEEC8BBBBB6B6BBBBBDBDBDBCBBB9B9BCBCB9B6B5B2B0B0B0B2B2B2B3B3B3B3B3B2B0B0B0B2B2B6B6B5B6B9B9B9B9BCBCBCBDBFBFC1C1C1C1C1C1BFBFBFBCBDBFBFC1C1C1C1BFC1C1C1C3C6C9C9C5C6C6C6C3C4C4C6C4C4C4C6C9C9CBCECAC9CAC9C9C6C6C6C9CAC6C6C6C5C1C1BFBFBFC1C1C1C4C1C1C3C5C5C9CACAC9C9C9C9C6C4C4C3C1BFC1C1C3C3BFBDBFC1BFBDBDB9B6B6B5B6B9B9B6B5B3B3B3B1B2B2B2B2B1B1B0B0B0B0ACAAACAEACB0ACABABA7A7AAA5A5AAA5A5A2A5A2A29F9C9C9B9B9C9F9FA29D9D9D9D9D9F9F9FA2A5A5A5A5A4A4A2A2A2A2A2A2A5A2A29F9F9FA29F9F9FA1A4A2A1A2A2A2A29F9C9F9FA19D9FA19DA1A2A2A2A2A1A19F9FA2A2A2A5A5A8A5A2A4A4A4A5A2A2A4A4A1A1A29FA2A4A4A4A4A4A5A8A8ABA8A8A5A8A5A8A8A8AAABA8A8A8A5AAACABABA8A8A8A8A5A5A7A7ABACACAEAEB1B1B1ACACB1B3B6B6B5B1B5B5B2B0ACACAEB0B2B0ACB0B2B2B2B1B1B1B0B0ACACACACACB1B1B3B6B5B5B1B1ACB0B0B0AEABAEABACA8A7AAACAAAAAAAAACAAACB0B0AEAEACABABABACABACAEAEACACA8ABACACAEAEABACACACABABABABACACA8A5A5A5A29FA1A1A2A2A29F9F9C9C9B9B99999999999C9B99999B9F9F9B99999999999B9DA29D9B9D9B99999997969699969999999B9DA1A1A1A2A2A5A2A2A5A2A5A5A5A5A4A1A1A4A4A5A7AAACABACABABAEAEACB1B0B0ACABABAEACACACAEB1B1B5B1B1B5B5B5B1B5B6B6B6B6B9B6BBBBBFBFBFC1C4C4C6C4C6C6C9CAC6C6C6C5C5C6C9CEC9CAC9C9C9C9CBCBCACECBC9CBCFCBCBCFCFCFCECBC9C9C6C9C9CBC9CBCBCBCECECECECECBCECECECECECBC9C6C6C9CAC9C9C9CECACBCBCFCECACACEC9CBC9C6C6C6C9C9C5C6C5C6C5C5C1C1BFBDBCBCB9B9B9BBB9B6B6B3B6B3B3B1B0B2B0ACB0B0B0B0B0B2B2B6B3B3B6B6B6B9B6B6B62E020202020102020202020295F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7EFDCDEDEDCDFDFE2E3E3E1ECF6D5CBCBCACECACBCBCECACAC8C6C6C5C5C6C8C9C8C6C9CBCECECECECEC9CECECECECFCFD3D3D3D3D4D4D4D4D4D1D1D4D1CFCECFCECBCBCBCAC8C8C8C6C4C1C0C3C3C4C3C3C4C4C0C1C4C1C1BFBFBCBFBFBBBBBBB8B8B8B8B8B6B6B3B5B5B5B5B5B2B2B2B1B5B1B1B1B3B3B6B5B5B2B6B6B8BBBCBBB8B9B6B6B9BCBBBBBBBBBCBFBDBFBFBFC0C3C3C3C0BFBFBBB8B8B5B2B2B6B6B3B6B6B6B5B6B6B5B5B6B8B6B6B6B9BDBDB9BBB8B9B9BBBBBBBBB8B8B8B8B8BBB6BBBCBCBBBFBBBBBBBBBCB8BCB9B6B6B6B5B6B6BBBCBCBCB8BCBCB8B8BCBCBFBFBFBDBCB9B9BDBDBBB8B5B2B0B0B0B2B2B2B3B3B3B3B3B2B0B0B0B2B2B6B6B5B6B9B9B9B9BDBDBDBFBFC0C3C3C3C3C1C1BFBFBFBDBFC0C0C3C3C3C3BFC1C1C1C4C6C9C9C6C8C8C6C4C5C5C8C5C5C5C8CACACECECBC9CBCACAC6C6C6CACBC8C8C8C6C3C3C0C0C0C1C3C3C5C1C1C4C6C6C9CBCBC9CACACAC8C5C5C4C1BFC3C3C4C4C0BFC0C1C0BFBFBBB8B8B5B8B9B9B6B5B3B3B3B1B2B2B2B2B1B1B0B0B0B0AEABAEAEAEB0AEACACA8A8ABA7A7ABA7A5A4A5A4A4A19D9D9B9B9DA1A1A29D9D9D9D9DA1A1A1A4A5A5A5A5A5A5A2A2A2A2A4A4A5A2A2A1A1A1A2A1A1A1A2A5A2A2A2A2A2A2A19DA1A1A29DA1A29DA2A4A4A4A4A2A2A1A1A2A2A4A5A7AAA5A2A5A5A5A5A2A2A5A5A2A2A2A1A2A5A5A5A5A5A5AAAAACAAAAA7AAA7AAAAAAABACAAAAAAA7ABACACACAAAAAAAAA5A5A8A8ACACACAEAEB1B1B1AEAEB1B3B6B6B5B1B5B5B2B0ACACAEB0B2B0ACB0B2B2B2B1B1B1B0B0AEAEAEAEAEB1B1B3B6B5B5B1B1AEB0B0B0AEACAEACACAAA8ABAEABABABABACABAEB0B0AEAEACACACACAEACAEAEAEAEACAAACACACAEAEACACACAEACACACACACACAAA7A5A5A2A1A2A2A2A2A2A1A19D9D9B9B9999999B9B9D9C9B9B9CA1A19C9B9B999B999C9DA29D9C9D9C9B9B26010101010101010101010194F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E6CECFD1CED1D3D1D3D0D0DBEEC6B3B3B2B1B2B2B2B2B2B2AEB2B0AEAEAEAEAEB2B2B2B2B6B5B2B0B0B0AEAEACACABACAEAEAEB0B2B1B2AEAEB2B5B3B3B6B9B9BCB8B8B6B8B8B9B6B9B9BCBCBFC1BFC1C1BFBFBFBFBFC3BFBFBCBBBBBBBFBCBFBCBDBFBFC3C3C3C1C1C1C0C0C0C3C3C1C0C3C5C5C3C0C0C0C0C0BDBCBCBFBCBFBFBBB8B9BBBBBBBBB8B8B8BBBBB6B6B6B6B3B3B3B3B2B2B0B0ACB0B0B0B0B0ACACACACABA7A7ABAAAAAAA7A8A8AAAAA5A4A4A4A4A4A7A5A4A5A4A2A2A2A2A4A4A2A29D9D9D9F9F9F9D9C9C9B9B9B9B9B9B969494929393909397979B9B9B9B9C9C9C9DA2A2A2A4A7A4A4A4A29DA2A2A29FA2A5A7ABAAACACB0B0B0ACB0AEAEAEACACAEAEB0B1B0B0B2B5B3B1B0B0B0B0B0B3B3B3B3B6B6B6B8B8B6BBBBB8B8B8B6B9B9BBBCBFBCBFC1BFBFC1C1C3C1C0C3C3BFBFBFC1C1C3C5C8C8C6C6C4C1C1C1C4C4C4C1BFBDB9B6B6B6B6B5B8B6B6B9B9B9B9B6B9B9B6B6B6B8B8B8B8B5B5B5B1B5B3B0B3B3B5B5B3B0B1B1B1B2B2B3B6B6B6B6B6B3B3B0B2B2B0B0B0B0ACACB0B2B3B6B6B6B5B1AEB0B0B0ACB0AEACAAAAAAABABACACACACACB0B1B1B1B1B1B1B3B5B8B6B6B6B6B6B8BCBFC1BFBFBFC1C1C3C3C3C4C3C1C4C1BFBFBFBFBFBCB8B6B6B6B9BBBBBDBDBDC0BFBFC0C4C3C3C1C0C0C1BFC1C1C3C0C3C3C6C3C0C3BFBFBFBFBFBFBCB9BBB8B8BBBFC0C0C3BFC3C3C4C6C6C6C5C6C4C4C5C5C6C6C6C4C4C1C1C3C6C3C5C1C4C0C0C0C3C0C0BDBDBFBCB8B8B8B6B5B5B5B3B2B2B5B6B9B6B6B5B8BBBBBBBCBCBCBCB8B9B9B9BCBCBCBBBBB8B9B8B8B8BBB9B9B6B9B8B8B8BCBFBFC3C0C0C0BFBFC0C1BFC0C0C0C0C0BFBFC1C1C1C1BFC1C1C5C5C6C6C5C6C6C6C6C6C5C6C6C5C4C6C5C8C5C8C8C8C8C9C8C9C8C6C8C8C6C6C6C6C4C4C4C6C6C5C3C3C4C4C3C3BFC1C4C3BFC3C1C5C6C4C3C0C0C0C1C1C5C5C633020202020202020202020296F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E3C6C9C8C4C1C1BFC0C0C1CEE2BDAEAEAEB1B3B2B5B2AEB2B5B5B5B3B5B2B3B2AEB1B3B3B5B5B1B1AEAEABA8A8A7A7A7A4A4A4A29FA2A2A5A7A8A8A8A8A8A7A8ABACACA8A7A7A8A7A7A7A8A8ACACB0B0AEAEAEACA8A8ABACACA8A5A5A5A4A4A2A5A7A5A7A8A8A8ABACACACA8A8ABACA8A8A8ACACACAEACA8A7A7A8A8A8A8A5A5A8A7A7A8ABABA8A7A7A7A7A8ACAEB2B2B1B1B3B1ACB1B1ACACB1ACA8A8A8ABA8A8ACABA8ABA8A8A8ACB0B0ACAEAEAEB0B0ACACABACAEACACAEB0B0B0B0B0B0B3B0B1B3B3B3B3B1B1B1B1ACACABABACB0B3B3B3B3B5B6B3B1B2B2B0B1B5B3B3B5B8B5B5B5B2B2B5B8B6B5B5B8BBBBB9B9B9B6B5B5B6B9B9B6B9BCBCBCBCBDBDC0C0BFBFBDBCBCBBB9BBB6BBBBBDBDB9BDBDBDBBB9B9B9B9B9BCB9B9BCB9B6B8B8B8B8B8B8B5B8B8B8BBB8B5B6B6B6B3B6B5B8B8B5B5B5B8B8B8B5B6B9BDBDBCBDBFBDBFBDB9B8B9B8B8B9B5B3B0B0B3B5B2B2B0B1B0B0B1B1B3B3B2B2B5B5B3B3B3B3B1B1B1B3B5B5B5B5B3B5B5B6B9B6B3B3B3B6B6B9BBBDBDBDBDBFBCBCBFBFBFC0C0BFBFBCB9B9BDBDBDBDBCBBBDC0C0C4C0C4C4C4C5C4C4C4C4C4C3C3C4C4C4C4C5C5C5C5C6C8CACBCFD1D3D5D6D9DBDBDBDBDADEDEDEDEDEDCD9DCD9D9DAD7D6D6D7D7D5D7DBDBDAD7D7D7DBDCDCD9DBDBD9D9DBD7D6D6D6D6D6D5D6D3D3D3D5D5D1D0D0CFCFD1D0D3D6D6D6D7D7D7D7D6D3D1CECBCBCBCBCBCACBCBC9C6C6C6C6C9C6C6C5C5C1C1C1C1C1C1C3C0C0BFBFBDBDBCBCBCB9B9B9B9B9B9B9BCBCB9BCBCBBBDBDBDBDBDC0C0BFBDBDC0C0C0BDBDBFBFBDBDBDC0C1C1C4C0C0BFBFBDBDBDBCB9B9B9BCBDBDBDC0C0BFBFBFBFBFBFBFBDBDC0C1C4C6C9C8C5C5C5C6C6CACBCECECECBCBCBC9CACACBC9C6C6C6C6C6CAC6C9C9C9C9CBCBCBCECECECBCECBCAC8C8CBCBCBCBCBCFCBCBCBC9C9CACBCBCBCBCBCBCBCBD0D3D3D337020202020202020202020296F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAE6CFD0CFCECFD3CFD0D1D1DEEFCABBBBBDBBBCBBBBB8BCBCB9B9B8B9B9B9B5B3B2B5B5B3B5B5B5B5B6B6B5B9B9B9B5B5B8B5B2B5B2B5B5B3B3B2B2B2B5B3B2B2B2B0B2B0B0B0B2B0B0B0B2B5B5B3B2B2B3B5B6B8BCBBBBBBBCBDBDBDBFC3C0C3C5C1C1BFBDBDBBB8B6B5B3B2B5B8B6B6B5B5B5B5B5B5B9B9BBBBBDBBBBBDBBBBBBB6B6B8BCBCBCBBBBB6B6B6BBBBBBB8B8B8B6B9B9BBBDBFBFC3BFC3C0C0C4C3C0C0C1C1C1C3C1BFC0C0C0C0C3C3C3BFBFBFC3C3C3C3C4C1C1C1C0C0C3C3C4C1C1C3C0C1C1C3C5C5C8C9C9C9CECFCECFD0D0CECFCFCED0CBCBCBCBCBCBCBCBCBCFCECECED0CED0CFD1D1D1D1D3D7D7D3D1D1D1CFD1D1D0D1D1D1D1D1D1D1D0D1D1D6D6D6D6D7D7D7D4D4D4D7D9DBDBD9D9D6D6D3D7D7D7D7D9DCDCDBDADADADCDCDBDBD9D9D9D9DBDCDBD9D9DBDBDCDCDCDCDEE1DEDEDEE1E1DFDEDEE1DEDEDCDCDEDCDADBDADBDADCDCDFDFDEDBD7D6D3D1D1D1D3D6D1D1D3D3D3D3D1CECECECECECECECECECECBCBCECECFCBCFCBC9C9C9C9C9CBCBD0CBCBC9C9C6C6C4C4C4C1C5C1C3C3BFC3C3C1C1BDBDBCBCBCBDBDBFBCB9B9B9B8B8B8BCB8B8B6B3B5B9B9B6B6B5B6B6B5B2B2B1B1AEACACA8A8A8ACACACACB0B2B0B0B0B0B2B5B2B2B0B0B0B0B0B0AEAEAEAEACAAAAAAAAAAAAA8A8A7A7A7A4A4A4A4A09C9B9E9EA0A0A0A0A2A29F9F9C9FA0A0A4A4A4A7A5A7A7A7A4A29F9C9C9FA29F9C9C9C9C9C9C9B989B9B9B9B9B9B9B9B9B9B9B9EA09E9FA2A2A4A2A2A2A2A5A7A7A5A8A8A5A5A5A5A5A5A8A5A5A7A7A5A4A4A2A4A5A8A5A5A5A4A4A0A0A4A5A8A8A8A8A8ACB0B0B0B0ACACACACACACAEB1B1B1ACAAAAA7A5A4A4A2A2A5A7A8ACAEAEACA8AAACAAAAAAA8AAACACB0B0AEACAEAEB0B1AEB0B2B0B0B2B3B3B3B5B8B8B5B5B5B5B2B3B2B2B3B2B2B2B3B3B2B2B2B0B0B1B3B3B2B2B2B2B2B5B5B6B5B6B6B5B52D010101010101010102020297FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBDCB8B9B6B5B6B9B5B6B6B8C5D7B3A5A5A5A5A2A1A2A2A4A1A2A4A1A4A5A5A5A5A4A4A2A2A5A5A5A8A8ACA8A5A7A7A7A8A5A5A7A7A4A4A5A2A5A7A7A7A7A7A8ACACAEACACA8ACA8ACACACACAEACACACA8ACB0AEAEACACACACA8A8AAAAAEB0B0B2B2B5B5B5B1B1B5B6B9B9B8B5B8B8B5B2B0B0B2B2B5B2B0B2B5B5B5B5B5B5B2B2B1B1B1B1B1B5B5B6B9B8B8B5B5B1B2B2B2B2AEB2AEB0ACAAACB1ACACACACB0ACB1B2B2B2B2B0AEAEAEB1AEB1B2B2B1B0ACAEB0B0B2B2AEB0B0B1AEAEAEAEB0B0ACA8A8A8A5A2A4A4A5A5A5A2A2A1A19E9E9C9C9C9C9CA19F9C9C9FA2A29F9C9C9C9C9C9FA1A5A19FA19F9C9C9C9B98989C989C9C9C9FA1A4A4A4A5A5A8A5A5A8A5A8A8A8A8A7A4A4A7A7A8AAACB1AEB0AEAEB2B2B1B5B2B2B0AEAEB2B0B0B0B2B5B5B8B5B5B8B8B8B5B8BBBBBBBBBDBBBFBFC3C3C3C5C8C8CAC8CACACBCFCACACAC9C9CACED1CECFCBCBCBCBD0D0CFD1D0CED0D3D0D0D3D3D3D1D0CECEC9CECED0CED0D0D0D1D1D1D1D1D0D1D1D1D1D1D0CEC9CACECFCECECED1CFD0D0D3D1CFCFD1CED0CBC9C9C9CBCBC9C9C9CAC9C9C5C5C3C1C0C0BDBDBDBFBDBBBBB6BBB6B6B5B2B5B2B0B2B2B2B2B2B5B5B9B6B6B9B9B9BDBBBBBBB8B8B8B8B8B5B6B8BBBBBBBFBFBBBBBFBFBDB9B6B6B6B6B8B8B8B8B9B6B2B2B5B9B9B9B8B9B9B6B2B5B5B5B5B5B8B5B2B5B5B8B8B5B2B1B1B2B5B8B5B5B2B2B1B2B2B5B5B5B2B2B2B2B2B2B2B2B5B5B5B5B2B6B9B9BBB9B8B6B8B8B5B6B5B5B5B5B5B9B5B9BBB9BBBBBBBBBBBBBBBBB9B9B5B9B5B2B2B2B5B9B6B6B6B9BBBBBBB6BBBDBFBFBFBFBBBDBDBDC0C3C0BDBDBDC0BDC0C3C1C1BDC0C3C5C9C9C5C3C3C6C6C6C6C9C9C9C8C5C6C8C5C5C5C5C6C9C8C8C6C5C9C6C6C5C5C1C3C3C1BFBFC1C1C0C0BDBDBDBDC0C0C0C0C0BDBDBDBBBDBBBBBDBDBFBDBFC0C0C0BDBDBDBBB8B5B5B5B2B5B52D010101010101010101010197FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBD6B1B0B0B1B6B6B1B0B1AEB9CBAEA1A5A19FA19F9C9C9C9B98989C989C9C9C9FA1A4A4A4A5A5A8A5A5A8A5A8A8A8A8A7A4A4A7A7A8AAACB1AEB0AEAEB2B2B1B5B2B2B0AEAEB2B0B0B0B2B5B5B8B5B5B8B8B8B5B8BBBBBBBBBDBBBFBFC3C3C3C5C8C8CAC8CACACBCFCACACAC9C9CACED1CECFCBCBCBCBD0D0CFD1D0CED0D3D0D0D3D3D3D1D0CECEC9CECED0CED0D0D0D1D1D1D1D1D0D1D1D1D1D1D0CEC9CACECFCECECED1CFD0D0D3D1CFCFD1CED0CBC9C9C9CBCBC9C9C9CAC9C9C5C5C3C1C0C0BDBDBDBFBDBBBBB6BBB6B6B5B2B5B2B0B2B2B2B2B2B5B5B9B6B6B9B9B9BDBBBBBBB8B8B8B8B8B5B6B8BBBBBBBFBFBBBBBFBFBDB9B6B6B6B6B8B8B8B8B9B6B2B2B5B9B9B9B8B9B9B6B2B5B5B5B5B5B8B5B2B5B5B8B8B5B2B1B1B2B5B8B5B5B2B2B1B2B2B5B5B5B2B2B2B2B2B2B2B2B5B5B5B5B2B6B9B9BBB9B8B6B8B8B5B6B5B5B5B5B5B9B5B9BBB9BBBBBBBBBBBBBBBBB9B9B5B9B5B2B2B2B5B9B6B6B6B9BBBBBBB6BBBDBFBFBFBFBBBDBDBDC0C3C0BDBDBDC0BDC0C3C1C1BDC0C3C5C9C9C5C3C3C6C6C6C6C9C9C9C8C5C6C8C5C5C5C5C6C9C8C8C6C5C9C6C6C5C5C1C3C3C1BFBFC1C1C0C0BDBDBDBDC0C0C0C0C0BDBDBDBBBDBBBBBDBDBFBDBFC0C0C0BDBDBDBBB8B5B5B5B2B5B5B5B5B5B5B1B5B2B1B1B1B1B1B5B5B5B5B8B6B5B2B2B2B1B1B0B0ACB0B1B1B1B2B5B2B5B1B1B5B6B5B5B8BBBBBDBBBBB9BBBBBBB9BBBBBDBDC1C3C1C3C3C1C1C0C1C1C5C1C0BDBDBDBDC0BDC0BDBFC1C1C5C5C5C3C3C3C3C3C3C5C5C3C3C5C6C6C5C3C3C3C3C3BFBDBDC1BDC0C0BDBBBBBDBDBDBDBBBBBBBDBDB9B9B8B8B5B5B5B5B5B5B2B2B0B2B2B2B2B2B0AEAEAEACA8A8ACACACACA8AAAAACACA8A5A5A5A5A5A8A8A5A7A5A2A2A2A4A5A5A2A2A1A1A1A1A1A1A19E9E9C9C9C9C9C9C989797949696939698989C9C9C9C9E9F9FA1A2A2A4A5A8A5A529010101010101010101010197FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCEFDAD9DBDADEDBD7DBD9D7E1F3D1C1BFBCBDBBBBBDC1C3C3C5C3C5C5C6C9C9C9C8C9C6C6C8C8C9C9C9C6C6C4C4C5C9C5C8C4C6C3C3C3C5C3C3C0C0C1BFBBBBBBBBB8B8B8B6B5B5B8BBBCBBBBB8BBBDBDBDBFBFBFBFBBBCBCBCBFBFBFBDBDBBBCBBBBBBBDBCBCBBBCBBBBBBBFC1C3C5C3C3C3C3C3C3C4C1C3C3C3C3C3C1C1C4C4C4C4C3C4C4C8C8C9C9C8C9C9C9C9C9C8C9C9C8C6C9C8CAC8CACACACACECACECBC9CBCBC9C9C9C9C6C6C6C9C9C8C5C5C6C6C5C5C3C4C6C5C3C5C4C8C9C6C5C3C3C3C4C4C8C8C9C9C9C9C9C8CAC9C8C4C4C4C3C3C3C3C1C1C0C0C0BFBFBFBFBFBBBBB9B9B6B2B2B2B5B5B5B5B3B2B2B3B3B3B3B3B3B8B5B3B6B6B3B5B5B6B5B2B0B0ACAEACB0B1B1B0B1B1B1B2B5B3B6B3B1B3B6B6B8B5B6B3B5B3B1B2B5B5B6B6B2B2B1B1ACABABA8A8A8A5A5A5A4A1A5A5A7A8ABAAAAABAAA8AAACAEAEABA8A8ABA8A8A8AAABB0B0B2B2B1B1B1AEAAAAACB0B0ABA7A7A7A5A5A5A7A8A7A8ABABABACAEAEAEABABACAEABAAABAEAEAEB1AEAAA8A8AAAAAAAAA7A7AAA8A8AAACACABA8A8A8A8ABB0B1B3B3B2B2B5B2B0B2B2B0B0B2B0ABABABACABABAEACABACAAABABAEB2B2AEB1B1B1B2B2B0B0ACB0B1AEAEB1B2B2B2B2B2B2B5B2B2B5B5B5B5B2B2B2B2B0B0ACACB0B2B5B5B5B5B6B9B5B2B3B3B2B2B6B5B5B8BBB6B6B6B3B3B6BBB9B6B6BBBCBCBBBBBBB9B8B6B9BBBBB9BBBDBDBDBDC0C0C3C3C1C1BFBDBDBCBBBCB9BCBCBFBFBBBFBFC0BCBBBBBBBBBBBDBBBBBDBBB9BBBBBBBBBBBBB6BBBBBBBCBBB6B9B9B9B5B9B8BBBBB6B8B8BBBBBBB8B9BBBFBFBDC0C1C0C1BFBBBBBBBBBBBBB8B5B2B2B5B8B3B3B2B2B2B2B2B2B5B5B3B3B8B8B5B5B5B5B2B2B2B5B8B8B8B8B5B6B8B9BBB9B5B5B5B9B9BBBCBFBFBFBFC1BDBDC1C1C1C3C3C1C1BDBBBBBFBFBFBFBDBCC0C3C3C6C3C6C6C6C8C6C6C6C6C6C5C5C6C6C6C6C8C833020202020202020202020298FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF1DBDCDEDCDEDEDEDCDCDAE4F6D7C5C8C4C6C3C3C3C5C3C3C0C0C1BFBBBBBBBBB8B8B8B6B5B5B8BBBCBBBBB8BBBDBDBDBFBFBFBFBBBCBCBCBFBFBFBDBDBBBCBBBBBBBDBCBCBBBCBBBBBBBFC1C3C5C3C3C3C3C3C3C4C1C3C3C3C3C3C1C1C4C4C4C4C3C4C4C8C8C9C9C8C9C9C9C9C9C8C9C9C8C6C9C8CAC8CACACACACECACECBC9CBCBC9C9C9C9C6C6C6C9C9C8C5C5C6C6C5C5C3C4C6C5C3C5C4C8C9C6C5C3C3C3C4C4C8C8C9C9C9C9C9C8CAC9C8C4C4C4C3C3C3C3C1C1C0C0C0BFBFBFBFBFBBBBB9B9B6B2B2B2B5B5B5B5B3B2B2B3B3B3B3B3B3B8B5B3B6B6B3B5B5B6B5B2B0B0ACAEACB0B1B1B0B1B1B1B2B5B3B6B3B1B3B6B6B8B5B6B3B5B3B1B2B5B5B6B6B2B2B1B1ACABABA8A8A8A5A5A5A4A1A5A5A7A8ABAAAAABAAA8AAACAEAEABA8A8ABA8A8A8AAABB0B0B2B2B1B1B1AEAAAAACB0B0ABA7A7A7A5A5A5A7A8A7A8ABABABACAEAEAEABABACAEABAAABAEAEAEB1AEAAA8A8AAAAAAAAA7A7AAA8A8AAACACABA8A8A8A8ABB0B1B3B3B2B2B5B2B0B2B2B0B0B2B0ABABABACABABAEACABACAAABABAEB2B2AEB1B1B1B2B2B0B0ACB0B1AEAEB1B2B2B2B2B2B2B5B2B2B5B5B5B5B2B2B2B2B0B0ACACB0B2B5B5B5B5B6B9B5B2B3B3B2B2B6B5B5B8BBB6B6B6B3B3B6BBB9B6B6BBBCBCBBBBBBB9B8B6B9BBBBB9BBBDBDBDBDC0C0C3C3C1C1BFBDBDBCBBBCB9BCBCBFBFBBBFBFC0BCBBBBBBBBBBBDBBBBBDBBB9BBBBBBBBBBBBB6BBBBBBBCBBB6B9B9B9B5B9B8BBBBB6B8B8BBBBBBB8B9BBBFBFBDC0C1C0C1BFBBBBBBBBBBBBB8B5B2B2B5B8B3B3B2B2B2B2B2B2B5B5B3B3B8B8B5B5B5B5B2B2B2B5B8B8B8B8B5B6B8B9BBB9B5B5B5B9B9BBBCBFBFBFBFC1BDBDC1C1C1C3C3C1C1BDBBBBBFBFBFBFBDBCC0C3C3C6C3C6C6C6C8C6C6C6C6C6C5C5C6C6C6C6C8C8C8C8C9CACED0D1D4D5D7D7DBDCDCDCDCDCDFDFDFDFE1DEDBDEDBDBDCD9D7D7DADA38020202020202020202020298FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECD1D1D1D0CED1D0D5D7D7E1F1D0C0BCBCC0C0C3C3C3C1C0BDBDC1C1BFBCB9B6B3B3B3B6B6B6B8B8B8B8B8B6B3B3B3B6B6BBBBB9BBBDBDBDBDC1C1C1C3C3C4C6C6C6C6C5C5C3C3C3C1C3C4C4C6C6C6C6C3C5C5C5C8CACECEC9CBCBCAC8C9C9CBC9C9C9CBCFCFD1D3D0CED0CFCFCACACACFD0CBCBCBC9C6C6C4C4C4C5C6C6C9C5C5C8C9C9CED0D0CECFCFCFCBC9C9C8C5C3C6C6C8C8C4C3C4C5C4C3C3BFBCBCB9BCBDBDBBB9B8B8B8B5B6B6B6B6B5B5B3B3B3B3B2AEB2B2B2B3B2B0B0ABABAEAAAAAEAAA8A7A8A7A7A4A0A09E9EA0A4A4A5A1A1A1A1A1A4A4A4A7A8A8A8A8A7A7A5A5A5A5A7A7A8A5A5A4A4A4A5A4A4A4A5A7A5A5A5A5A5A5A4A0A4A4A5A1A4A5A1A5A7A7A7A7A5A5A4A4A5A5A7A8AAACA8A5A7A7A7A8A5A5A7A7A5A5A5A4A5A7A7A7A7A7A8ACACB0ACACAAACAAACACACAEB0ACACACAAAEB1B0B0ACACACACA8A8ABABB0B1B1B2B2B5B5B5B2B2B5B8BBBBB9B5B9B9B6B3B1B1B2B3B6B3B1B3B6B6B6B5B5B5B3B3B2B2B2B2B2B5B5B8BBB9B9B5B5B2B3B3B3B2B0B2B0B1ACABAEB2AEAEAEAEB1AEB2B3B3B2B2B1B0B0B0B2B0B2B2B2B2B1ACB0B1B1B2B2B0B1B1B2B0B0B0B0B1B1ACAAA8A8A5A4A5A5A5A5A5A4A4A0A09E9E9C9C9C9C9CA09F9C9C9FA4A49F9C9C9C9C9C9FA1A5A19FA19F9C9C9C9B98989C989C9C9C9FA1A5A5A5A7A7A8A5A5A8A5A8A8A8A8A7A5A5A7A7AAABAEB2B0B1B0B0B2B2B2B5B3B3B1B0B0B2B1B1B1B2B5B5B9B5B5B9B9B9B5B9BBBBBBBBBFBCC0C0C3C3C3C6C9C9CBC9CBCBCED0CBCBCBC9C9CBCFD1CFD0CECECECED1D1D0D1D1CFD1D4D1D1D4D4D4D3D1CFCFCACFCFD1CFD1D1D1D3D3D3D3D1D1D3D3D1D1D1D1CFCACBCFD0CFCFCFD1D0D1D1D4D1D0D0D1CFD1CECACACACECEC9CAC9CBC9C9C6C6C3C3C1C1BDBDBDC0BDBCBBB8BBB8B8B5B3B6B3B1B3B3B3B3B3B6B6BBB8B8BBBBBBBDBBBCBCB92E020202010202020202020298FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDDFC0C4C5C4C8C8C9CACAC6D1EBC9BBBBBBB6BBBBB8B5B1B1B3B5B8B5B1B5B8B8B8B6B6B6B5B5B2B2B2B2B2B6B6B9BBBBBBB6B6B2B5B5B5B3B1B3B1B1AEACB0B2B0B0B0B0B1B0B2B5B5B3B3B1B1B1B1B2B1B2B3B3B2B1AEB1B1B1B3B3B1B1B1B2B1B1B1B1B1B1AEABAAAAA7A5A5A5A7A7A7A5A5A1A19F9F9C9C9C9E9EA1A19E9EA1A5A5A19E9E9C9E9CA1A3A7A3A1A3A19E9E9E9C9A9A9E9A9E9C9CA1A3A5A5A5A7A7AAA7A7AAA7AAAAAAAAA8A5A5A8A8ABACB0B2B1B1B1B1B3B3B2B6B5B5B1B1B1B3B1B1B1B3B6B6BBB6B6BBBBBBB6BBBCBCBCBCC0BDC1C1C3C3C3C6C9C9CBC9CBCBCED0CBCBCBC9C9CBCFD1CFD0CECECECED1D1D0D1D1CFD1D4D1D1D4D4D4D3D1CFCFCACFCFD1CFD1D1D1D3D3D3D3D1D1D3D3D1D1D1D1CFCACBCFD0CFCFCFD1D0D1D1D4D1D0D0D1CFD1CECACACACECEC9CAC9CBC9C9C6C6C3C3C3C3BFBFBFC1BFBDBCB9BCB9B9B6B5B8B5B1B5B5B5B5B5B8B8BBB9B9BBBBBBBFBCBDBDBBBBBBBBBBB8B9BBBDBDBDC1C1BDBDC1C1BFBBB9B9B9B9BBBBBBBBBBB9B5B5B8BBBBBBBBBBBBB9B5B8B8B8B8B8BBB6B3B6B6BBBBB8B3B2B2B5B6BBB6B6B3B5B2B5B3B6B6B8B5B5B3B5B5B3B5B5B8B8B8B6B5B9BBBBBDBBBBB9BBBBB6B9B8B8B8B8B8BBB8BBBDBBBDBDBDBDBDBCBCBDBBBBB8BBB8B5B5B5B8BBB9B9B9BBBDBDBCB9BCBFC1C1C1C1BDBFBFBFC3C3C3BFBFBFC3BFC3C3C3C3C0C3C4C6C9C9C6C4C4C8C8C8C8C9CACAC9C6C8C9C6C5C6C5C8C9C9C9C8C6C9C8C8C5C5C3C3C4C3C1C1C3C3C3C3C0C0C0C0C3C3C3C3C3BFC0C0BCBFBCBCBFBFC1BFC1C3C3C3BFBFC0BDBBB8B8B6B5B6B6B6B6B6B6B2B6B3B2B2B2B2B2B6B6B6B6BBB9B6B3B3B3B2B2B1B1B0B1B2B2B2B3B6B5B6B2B2B6B9B8B8BBBDBDC0BCBCBBBCBCBDBBBDBDC0C0C3C4C3C4C4C3C3C3C3C3C5C3C3C0BFBFBFC3C0C3C0C1C3C3C5C5C5C4C4C4C3C3C3C533020202020202020202020299FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF1D9DBDBDBDEE2E3E4E1E3EEF9D6C9C9CBC9C9C9CBCFCFD1D3D0CED0CFCFCACACACFD0CBCBCBC9C6C6C4C4C4C5C6C6C9C5C5C8C9C9CED0D0CECFCFCFCBC9C9C8C5C3C6C6C8C8C4C3C4C5C4C3C3C0BDBDBBBDBFBFBCBBB9B9B9B6B8B8B8B8B6B6B5B5B5B5B2B0B2B3B2B5B2B1B1ACACB0ABABB0ABAAA7AAA7A7A5A1A19F9FA1A5A5A7A3A3A3A3A3A5A5A5A7AAAAAAAAA8A8A7A7A7A7A7A7AAA7A7A5A5A5A7A5A5A5A5A8A7A5A7A7A7A7A5A1A5A5A5A3A5A5A3A5A7A7A7A7A5A5A5A5A7A7A7AAABAEAAA7A8A8A8AAA7A7A8A8A5A5A7A5A7A8A8A8A8A8AAAEAEB1AEAEABAEABAEAEAEB0B1AEAEAEABB0B1B1B1AEAEAEAEAAAAACACB1B1B1B3B3B6B6B6B2B2B6B9BBBBBBB6BBBBB8B5B1B1B3B5B8B5B1B5B8B8B8B6B6B6B5B5B2B2B2B2B2B6B6B9BBBBBBB6B6B2B5B5B5B3B1B3B1B1AEACB0B2B0B0B0B0B1B0B2B5B5B3B3B1B1B1B1B2B1B2B3B3B2B1AEB1B1B1B3B3B1B1B1B2B1B1B1B1B1B1AEABAAAAA7A5A5A5A7A7A7A5A5A1A19F9F9C9C9C9E9EA1A19E9EA1A5A5A19E9E9C9E9CA1A3A7A3A1A3A19E9E9E9C9A9A9E9A9E9C9CA1A3A5A5A5A7A7AAA7A7AAA7AAAAAAAAA8A5A5A8A8ABACB0B2B1B1B1B1B3B3B2B6B5B5B1B1B1B3B1B1B1B3B6B6BBB6B6BBBBBBB6BBBCBCBCBCC0BDC1C1C3C3C3C6C9C9CBC9CBCBCED0CBCBCBC9C9CBCFD1CFD0CECECECED1D1D0D1D1CFD1D4D1D1D4D4D4D3D1CFCFCACFCFD1CFD1D1D1D3D3D3D3D1D1D3D3D1D1D1D1CFCACBCFD0CFCFCFD1D0D1D1D4D1D0D0D1CFD1CECACACACECEC9CAC9CBC9C9C6C6C3C3C3C3BFBFBFC1BFBDBCB9BCB9B9B6B5B8B5B1B5B5B5B5B5B8B8BBB9B9BBBBBBBFBCBDBDBBBBBBBBBBB8B9BBBDBDBDC1C1BDBDC1C1BFBBB9B9B9B9BBBBBBBBBBB9B5B5B8BBBBBBBBBBBBB9B5B8B8B8B8B8BBB6B3B6B6BBBBB8B3B2B2B5B6BBB6B6B3B5B2B5B3B6B6B8B5B5B3B5B5B3B5B5B8B8B82E010202020202020202020199FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDEED7D5D7DADEE1DFDEDBDBE9F8D6C8C9CACAC9C6C8C9C6C5C6C5C8C9C9C9C8C6C9C8C8C5C5C3C3C4C3C1C1C3C3C3C3C0C0C0C0C3C3C3C3C3BFC0C0BCBFBCBCBFBFC1BFC1C3C3C3BFBFC0BDBBB8B8B6B5B6B6B6B6B6B6B2B6B3B2B2B2B2B2B6B6B6B6BBB9B6B3B3B3B2B2B1B1B0B1B2B2B2B3B6B5B6B2B2B6B9B8B8BBBDBDC0BCBCBBBCBCBDBBBDBDC0C0C3C4C3C4C4C3C3C3C3C3C5C3C3C0BFBFBFC3C0C3C0C1C3C3C5C5C5C4C4C4C3C3C3C5C5C4C3C5C8C8C5C3C3C3C3C3C1C0C0C3C0C3C3BFBCBDBFBFBFBFBCBCBCBFBFBBBBBBBBB8B8B8B8B6B6B3B3B1B3B3B3B3B3B1B1B1B1B0ABABB0AEAEAEABACACAEAEAAA7A7A7A7A7ABAAA7A8A7A5A5A5A5A7A7A5A5A1A1A1A3A3A3A19F9F9C9C9C9C9E9C98979796979794979A9A9C9C9C9C9FA1A1A1A5A5A5A7ABA7A7A7A5A1A5A5A5A3A5A8ABB0AEB1B1B3B3B3B1B3B2B2B2B1B1B2B2B3B5B3B3B6B9B8B5B3B3B3B3B3B8B8B8B8BBBBBBBCBCBBBFBFBCBCBCBBBDBDBFC0C3C0C3C4C3C3C4C4C5C4C3C5C5C3C3C3C4C4C5C8CACBC9C9C6C4C4C4C6C6C6C4C3C1BDBBBBBBBBB9BCBBBBBDBDBDBDBBBDBDBBBBBBBCBCBCBCB9B9B9B5B9B8B3B8B8B9B9B8B3B5B5B5B6B6B8BBBBBBBBBBB8B8B3B6B6B3B3B3B3B1B1B3B6B8BBBBBBB9B5B2B3B3B3B1B3B2B1AEAEAEB0B0B1B1B1B1B1B3B5B5B5B5B5B5B8B9BCBBBBBBBBBBBCC0C3C4C3C3C3C4C4C5C5C5C6C5C4C6C4C3C3C3C3C3C0BCBBBBBBBDBFBFC1C1C1C3C3C3C3C6C5C5C4C3C3C4C3C4C4C5C3C5C5C9C5C3C5C3C3C3C3C3C3C0BDBFBCBCBFC3C3C3C5C3C5C5C6C9C9C9C8C9C6C6C8C8C9C9C9C6C6C4C4C5C9C5C8C4C6C3C3C3C5C3C3C1C1C3C0BCBCBCBBB9B9B9B8B6B6B9BBBDBBBBB9BCBFBFBFC0C0C0C0BCBDBDBDC0C0C0BFBFBCBDBCBCBCBFBDBDBBBDBCBCBCC0C3C3C5C3C3C3C3C3C3C4C3C3C3C3C3C3C3C3C4C4C4C4C3C4C4C8C8C935020202020202020202020299FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF3DFDFDCDADEDEDEDFDCDAE7F7D4C3C3C0BDBDBBBDBFBFBCBBB9B9B9B6B8B8B8B8B6B6B5B5B5B5B2B0B2B3B2B5B2B1B1ACACB0ABABB0ABAAA7AAA7A7A5A1A19F9FA1A5A5A7A3A3A3A3A3A5A5A5A7AAAAAAAAA8A8A7A7A7A7A7A7AAA7A7A5A5A5A7A5A5A5A5A8A7A5A7A7A7A7A5A1A5A5A5A3A5A5A3A5A7A7A7A7A5A5A5A5A7A7A7AAABAEAAA7A8A8A8AAA7A7A8A8A5A5A7A5A7A8A8A8A8A8AAAEAEB1AEAEABAEABAEAEAEB0B1AEAEAEABB0B1B1B1AEAEAEAEAAAAACACB1B1B1B3B3B6B6B6B2B2B6B9BBBBBBB6BBBBB8B5B1B1B3B5B8B5B1B5B8B8B8B6B6B6B5B5B2B2B2B2B2B6B6B9BBBBBBB6B6B2B5B5B5B3B1B3B1B1AEACB0B2B0B0B0B0B1B0B2B5B5B3B3B1B1B1B1B2B1B2B3B3B2B1AEB1B1B1B3B3B1B1B1B2B1B1B1B1B1B1AEABAAAAA7A5A5A5A7A7A7A5A5A1A19F9F9C9C9C9E9EA1A19E9EA1A5A5A19E9E9C9E9CA1A3A7A3A1A3A19E9E9E9C9A9A9E9A9E9C9CA1A3A5A5A5A7A7AAA7A7AAA7AAAAAAAAA8A5A5A8A8ABACB0B2B1B1B1B1B3B3B2B6B5B5B1B1B1B3B1B1B1B3B6B6BBB6B6BBBBBBB6BBBCBCBCBCC0BDC1C1C4C4C4C8C9C9CEC9CECECFD0CECECECACACED0D3D0D0CFCFCFCFD1D1D0D3D1D0D1D4D1D1D4D4D4D4D1D0D0CBD0D0D1D0D1D1D1D4D4D4D4D3D1D4D4D3D3D3D1D0CBCED0D0D0D0D0D3D0D1D1D4D3D0D0D3D0D1CFCBCBCBCFCFCACBCACECACAC8C8C4C3C3C3BFBFBFC1BFBDBCB9BCB9B9B6B5B8B5B1B5B5B5B5B5B8B8BBB9B9BBBBBBBFBCBDBDBBBBBBBBBBB8B9BBBDBDBDC1C1BDBDC1C1BFBBB9B9B9B9BBBBBBBBBBB9B5B5B8BBBBBBBBBBBBB9B5B8B8B8B8B8BBB6B3B6B6BBBBB8B3B2B2B5B6BBB6B6B3B5B2B5B3B6B6B8B5B5B3B5B5B3B5B5B8B8B8B6B5B9BBBBBDBBBBB9BBBBB6B9B8B8B8B8B8BBB8BBBDBBBDBDBDBDBDBCBCBDBBBBB8BBB8B5B5B5B8BBB9B9B9BBBDBDBCB9BCBFC1C1C1C1BDBFBFBFC3C432020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE5CACECFD0D5D3D1D3D4D6E1F4D1C5C3C5C8C4C4C3C0C0BDBBBBB9B6B5B8BBBBBBB9B9B9B9B9B9BCBCBDBDC0BDBDC0BDBDBDBBBBBBBFBFBFBDBDBBBBBBBDBDBDBBBBBBBBBCBCBDC1C3C3C5C3C5C3C3C6C5C3C3C4C4C4C5C4C3C3C3C3C3C5C5C5C3C3C3C5C5C5C5C6C4C4C4C3C3C5C5C6C4C4C5C3C4C4C5C9C9CACBCBCED0D1D0D1D3D3D0D1D1D0D3D0D0D0D0D0D0D0D0CFD1D0D0D0D3D0D3D1D4D4D4D4D7DADAD7D4D4D4D1D4D4D3D4D4D4D4D4D4D4D3D4D4D9D9D9D9DBDADAD7D7D7DADBDEDEDBDBD9D9D7DADADADADBDFDFDEDCDCDCDFDFDEDEDBDBDBDBDEDFDEDBDBDEDEDFDFDFDFE1E3E1E1E1E3E4E2E1E1E4E1E1DFDFE1DFDCDEDCDEDCDFDFE2E2E1DEDBD9D7D4D4D4D7D9D4D4D7D7D7D7D4D0D0D0D0D0D0D0D0D0D0CFCFD0D0D1D0D1D0CECECECECED0D0D3D0D0CECEC9C9C6C6C6C4C8C4C5C5C3C5C5C4C4C1C1BFBFBFC1C1C3BFBCBCBCBBBBBBBFBBBBBBB6B9BCBCBBBBB9BBBBB8B5B5B2B2B1AEAEABAAAAAEB0B0B0B1B5B1B1B1B1B5B8B5B5B1B1B1B1B1B1B1B1B1B1B0ACACACACACACABABA8A8A8A5A5A5A5A39F9CA1A1A3A3A3A3A5A5A1A19FA1A3A3A5A5A5A8A7A8A8A8A5A5A19E9EA1A5A19E9E9E9E9E9F9C9A9C9C9C9C9C9C9C9C9C9C9CA1A3A1A1A5A5A5A5A5A5A5A7A8A8A7ABABA7A7A7A7A7A7AAA7A7A8A8A7A5A5A5A5A7AAA7A7A7A5A5A3A3A5A7ABABABABABAEB1B1B1B1AEAEAEAEAEAEB1B2B2B2B0ACACA8A7A5A5A5A5A7A8AAAEB1B1AEAAACB0ACACACAAACB0B0B1B1B1B0B1B1B1B2B1B1B3B1B1B5B6B6B6B8BBBBB8B9B8B9B5B6B3B3B6B3B3B3B6B6B3B3B3B1B1B2B6B6B5B5B5B5B5B8B8BBB8BBBBB8B8B6B8B8B8B3B3B3B8B8B9BBBBBBBBBBBBBBB6B6B3B6BBBBBCBCBCBCBFBCB9B8B6B6B5B1B5B5B5B1B3B3B2B3B1B1B1AEABABAEAEAEAEABACACAAACAAAAAAAAAAA8A8A8A8A8A7A7AAA7AAAEABABAEAEAA2B010101010101010101010198FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE0C4C5C1BDBDBDBBBBBBBFC9DBBBACACACAEB0B0B0ACACAEB0ACABACB0B0B0B1B0ABAAAAABABABABA7A7ABAAAAABAEAEACAAAAAAAAACB1B1B5B5B3B3B6B3B1B3B3B1B1B3B1ACACACAEACACB0AEACAEABACACB0B2B2B0B1B1B1B2B2B1B1AEB1B1B0B0B1B2B2B2B2B2B2B6B2B3B6B6B6B6B3B3B3B3B1B1AEAEB1B2B6B6B6B6B8BBB6B3B5B5B2B3B8B6B6B9BBB8B8B8B5B5B8BBBBB8B8BBBDBDBCBCBCBBB9B8BBBCBCBBBCBFBFBFBFC1C1C4C4C3C3C0BFBFBDBCBDBBBDBDC0C0BCC0C0C1BDBCBCBCBCBCBFBCBCBFBCBBBBBBBBBBBBBBB8BBBBBBBDBBB8BBBBBBB6BBB9BBBBB8B9B9BBBBBBB9BBBCC0C0BFC1C3C1C3C0BCBBBCBBBBBCB9B6B2B2B6B9B5B5B2B3B2B2B3B3B6B6B5B5B9B9B6B6B6B6B3B3B3B6B9B9B9B9B6B8B9BBBCBBB6B6B6BBBBBCBDC0C0C0C0C3BFBFC3C3C3C4C4C3C3BFBCBCC0C0C0C0BFBDC1C3C4C8C4C8C8C8C9C8C8C8C8C8C6C6C8C8C8C8C9C9C9C9CACBCFD0D3D4D7D9DADCDFDFDFDFDEE1E1E1E1E2E1DCE1DCDCDEDBDADADBDBD9DBDFDFDEDBDBDBDFE1E1DCDFDFDCDCDFDBDADADADADAD9DAD7D7D7D9D9D4D4D4D3D3D4D4D7DADADADBDBDBDBDAD7D4D1D0D0D0D0D0CFD0D0CEC9C9CACACECACAC9C9C5C5C5C5C5C5C6C4C4C3C3C1C1BFBFBFBCBCBCBCBCBCBCBFBFBCBFBFBDC1C0C0C0C0C3C3C3C1C1C3C3C3C1C1C3C3C0C0C1C4C5C5C8C4C4C3C3C0C1C1BFBCBCBCBFC0C0C1C4C4C3C3C3C3C3C3C3C1C1C3C5C8CACECBC9C9C9CACACFD0D1D1D1D0D0D0CECFCFD0CECACACACACACFCACECECECED0D0D0D1D1D1D0D1D0CFCBCBD0D0D0D0D0D3D0D0D0CECECFD0D0D0D0D0D0D0D0D4D7D7D7D7D7DADADCDBDCDCE1DEE1E2E1E3E2E1DEDBDBDBDBDEDBDADADADADBDCDCDCDCDCDCDBDCDFDCDCDCDCDCDEDEDEDEDFDFE1E4E2E2E4E6E9E6E6E2E2E2E6E6E3E4E4E3E2E2E3E1E1E4E1E3E3E4E4E1E1DEDBD9D9D9D9D93A020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF5E3E4E4E4E6EAE4E6E4E4EBF9D5C6C6C4C8C4C5C5C3C5C5C4C4C1C1BFBFBFC1C1C3BFBCBCBCBBBBBBBFBBBBBBB6B9BCBCBBBBB9BBBBB8B5B5B2B2B1AEAEABAAAAAEB0B0B0B1B5B1B1B1B1B5B8B5B5B1B1B1B1B1B1B1B1B1B1B0ACACACACACACABABA8A8A8A5A5A5A5A39F9CA1A1A3A3A3A3A5A5A1A19FA1A3A3A5A5A5A8A7A8A8A8A5A5A19E9EA1A5A19E9E9E9E9E9F9C9A9C9C9C9C9C9C9C9C9C9C9CA1A3A1A1A5A5A5A5A5A5A5A7A8A8A7ABABA7A7A7A7A7A7AAA7A7A8A8A7A5A5A5A5A7AAA7A7A7A5A5A3A3A5A7ABABABABABAEB1B1B1B1AEAEAEAEAEAEB1B2B2B2B0ACACA8A7A5A5A5A5A7A8AAAEB1B1AEAAACB0ACACACAAACB0B0B1B1B1B0B1B1B1B2B1B1B3B1B1B5B6B6B6B8BBBBB8B9B8B9B5B6B3B3B6B3B3B3B6B6B3B3B3B1B1B2B6B6B5B5B5B5B5B8B8BBB8BBBBB8B8B6B8B8B8B3B3B3B8B8B9BBBBBBBBBBBBBBB6B6B3B6BBBBBCBCBCBCBFBCB9B8B6B6B5B1B5B5B5B1B3B3B2B3B1B1B1AEABABAEAEAEAEABACACAAACAAAAAAAAAAA8A8A8A8A8A7A7AAA7AAAEABABAEAEAAAAABAEB1B3B3B3B3B3B3B2B2B1B1B1B1AEAEAAAAAEACABACAAAAAEACACA8A8A7A5A7A7A7A8A8A8ABABB0B0B0ABABAEB1B3B1B3B6BBBBBBB8BBBBBBBCBFBDBDBFBDBDBDBDBDC1BFBFBBBFBBBBBBBBBCBCBCBCBCBCBBB8B3B1B3B3B2B2B2B5B5B2B3B3B3B3B6B8B6B3B3B1B0ACACACB0B1B0B2B3B5B1B5B9B9BBBBBBBBB9BBBBBBBBB9BBBBBFC3C3C4C4C4C3C1BDC1BDBDBBBBBBBBBBBBBCBBB6B3B3B3B6B6B6B9B5B5B3B3B3B8BBBBBDC0C0C3C0C3C3C4C8C9C9C8C8C9C9C9C9CBCFCFCFCBC9CBC9C9C9CAC9C9C9C9C9C8C6C6C9C6C6C5C8C9C9C9C9C6C6C4C3C4C3C1C3C3C3C0C3C4C4C3C3C3C5C5C4C4C3C1C1C1C0BFBFC3C0C3C0C0C0BCBBB8B5B2B2B6B9BCBBBBB9B9BBBCBCBCBCB9B9B9B9B8B8B8B5B5B2B2B2B2B2B1B1B0B0B0B0ABABABAC2C010101020101010101010198FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEBFC3C6C5C6C6C1C3C3C3CEE2C1B2B2B2B0ACACA8A7A5A5A5A5A7A8AAAEB1B1AEAAACB0ACACACAAACB0B0B1B1B1B0B1B1B1B2B1B1B3B1B1B5B6B6B6B8BBBBB8B9B8B9B5B6B3B3B6B3B3B3B6B6B3B3B3B1B1B2B6B6B5B5B5B5B5B8B8BBB8BBBBB8B8B6B8B8B8B3B3B3B8B8B9BBBBBBBBBBBBBBB6B6B3B6BBBBBCBCBCBCBFBCB9B8B6B6B5B1B5B5B5B1B3B3B2B3B1B1B1AEABABAEAEAEAEABACACAAACAAAAAAAAAAA8A8A8A8A8A7A7AAA7AAAEABABAEAEAAAAABAEB1B3B3B3B3B3B3B2B2B1B1B1B1AEAEAAAAAEACABACAAAAAEACACA8A8A7A5A7A7A7A8A8A8ABABB0B0B0ABABAEB1B3B1B3B6BBBBBBB8BBBBBBBCBFBDBDBFBDBDBDBDBDC1BFBFBBBFBBBBBBBBBCBCBCBCBCBCBBB8B3B1B3B3B2B2B2B5B5B2B3B3B3B3B6B8B6B3B3B1B0ACACACB0B1B0B2B3B5B1B5B9B9BBBBBBBBB9BBBBBBBBB9BBBBBFC3C3C4C4C4C3C1BDC1BDBDBBBBBBBBBBBBBCBBB6B3B3B3B6B6B6B9B5B5B3B3B3B8BBBBBDC0C0C3C0C3C3C4C8C9C9C8C8C9C9C9C9CBCFCFCFCBC9CBC9C9C9CAC9C9C9C9C9C8C6C6C9C6C6C5C8C9C9C9C9C6C6C4C3C4C3C1C3C3C3C0C3C4C4C3C3C3C5C5C4C4C3C1C1C1C0BFBFC3C0C3C0C0C0BCBBB8B5B2B2B6B9BCBBBBB9B9BBBCBCBCBCB9B9B9B9B8B8B8B5B5B2B2B2B2B2B1B1B0B0B0B0ABABABACB1B3B6B6B9B6B2B2B3B3B5B1B1B5B2B2B1B1B1B0B0ACAAAAAAAAA8ACABABAEAEAEAEAEB1B2B2B1B3B3B3B1B1B0AEABB0B0B0B0B2B1B1B1B1B5B8B8B8B8B6BBBBBBBBBBBBBCB9B9B9B9B8B8B8B8BBBBB8B6B5B3B3B5B9BBBBBBBBBBBCBFBFBCBBBBBBBBB8B9B9B9B9BBB6BBBCBCBDBBBDC0C0BFBFC1C1C3C6C8C5C4C5C5C3C3C0BDBDBBB9B8B8B6B3B3B3B1B1B1B1B1B2B2B2B1B3B1AEAEAEAEB1ACAEAEACA8ACAEB1B1B1B0B0ACACACACB1B2B1B0B1B1B2B2B1ACB1B1B3B5B5B3B1AEAEAEABA7A7A7A7AAACACACAAACACACAC2B010101010101010101010198FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE2C4C5C4C0C1C1C0C1C3C1CADCB9A8A5A5A5A5A39F9CA1A1A3A3A3A3A5A5A1A19FA1A3A3A5A5A5A8A7A8A8A8A5A5A19E9EA1A5A19E9E9E9E9E9F9C9A9C9C9C9C9C9C9C9C9C9C9CA1A3A1A1A5A5A5A5A5A5A5A7A8A8A7ABABA7A7A7A7A7A7AAA7A7A8A8A7A5A5A5A5A7AAA7A7A7A5A5A3A3A5A7ABABABABABAEB1B1B1B1AEAEAEAEAEAEB1B2B2B2B0ACACA8A7A5A5A5A5A7A8AAAEB1B1AEAAACB0ACACACAAACB0B0B1B1B1B0B1B1B1B2B1B1B3B1B1B5B6B6B6B8BBBBB8B9B8B9B5B6B3B3B6B3B3B3B6B6B3B3B3B1B1B2B6B6B5B5B5B5B5B8B8BBB8BBBBB8B8B6B8B8B8B3B3B3B8B8B9BBBBBBBBBBBBBBB6B6B3B6BBBBBCBCBCBCBFBCB9B8B6B6B5B1B5B5B5B1B3B3B2B3B1B1B1AEABABAEAEAEAEABACACAAACAAAAAAAAAAA8A8A8A8A8A7A7AAA7AAAEABABAEAEAAAAABAEB1B3B3B3B3B3B3B2B2B1B1B1B1AEAEAAAAAEACABACAAAAAEACACA8A8A7A5A7A7A7A8A8A8ABABB0B0B0ABABAEB1B3B1B3B6BBBBBBB8BBBBBBBCBFBDBDBFBDBDBDBDBDC1BFBFBBBFBBBBBBBBBCBCBCBCBCBCBBB8B3B1B3B3B2B2B2B5B5B2B3B3B3B3B6B8B6B3B3B1B0ACACACB0B1B0B2B3B5B1B5B9B9BBBBBBBBB9BBBBBBBBB9BBBBBFC3C3C4C4C4C3C1BDC1BDBDBBBBBBBBBBBBBCBBB6B3B3B3B6B6B6B9B5B5B3B3B3B8BBBBBDC0C0C3C0C3C3C4C8C9C9C8C8C9C9C9C9CBCFCFCFCBC9CBC9C9C9CAC9C9C9C9C9C8C6C6C9C6C6C5C8C9C9C9C9C6C6C4C3C4C3C1C3C3C3C0C3C4C4C3C3C3C5C5C4C4C3C1C1C1C0BFBFC3C0C3C0C0C0BCBBB8B5B2B2B6B9BCBBBBB9B9BBBCBCBCBCB9B9B9B9B8B8B8B5B5B2B2B2B2B2B1B1B0B0B0B0ABABABACB1B3B6B6B9B6B2B2B3B3B5B1B1B5B2B2B1B1B1B0B0ACAAAAAAAAA8ACABABAEAEAEAEAEB1B2B2B1B3B3B3B1B1B0AEABB0B0B0B0B2B1B1B1B1B5B8B8B8B8B6BBBBBBBBBBBBBCB9B9B9B9B8B8B8B8BBBBB8B6B5B3B3B5B930020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEECD5D6D6D5D7D9D7DADBDBE7F8D6C8C5C3C3C0BDBDBBB8B8BBBBB9BBBBBBBBBBBCBBBBBBBDBBBBBCBFC3C3BFC0BDBFBFC0C0C0C0BDBDBDBDBDC0BCC0C1C1C0C3C0C0C0C0C1BDC1BFBCBCBCBBBCBCC0C1C1C1BDC1C1BDBDC1C1C3C3C3C3C1BFBFC3C3C0BDBBB8B5B5B5B8B8B8B9B9B9B9B9B8B5B5B5B8B8BBBBBBBCBFBFBFBFC3C3C3C3C4C5C8C8C8C8C6C6C4C4C4C3C3C5C5C8C8C8C8C4C6C6C6C9CBCFCFCACECECBC9C9C9CEC9C9C9CED0D0D1D4D0CFD0D0D0CBCBCBD0D0CECECECAC8C8C5C5C5C6C8C8C9C6C6C9CACACFD0D0CFD0D0D0CEC9C9C9C6C4C8C8C9C9C5C3C5C6C5C3C3C0BDBDBBBDBFBFBCBBB9B9B9B6B8B8B8B8B6B6B5B5B5B5B2B0B2B3B2B5B2B1B1ACACB0ABABB0ABAAA7AAA7A7A5A1A19F9FA1A5A5A7A3A3A3A3A3A5A5A5A7AAAAAAAAA8A8A7A7A7A7A7A7AAA7A7A5A5A5A7A5A5A5A5A8A7A5A7A7A7A7A5A1A5A5A5A3A5A5A3A5A7A7A7A7A5A5A5A5A7A7A7AAABAEAAA7A8A8A8AAA7A7A8A8A5A5A7A5A7A8A8A8A8A8AAAEAEB1AEAEABAEABAEAEAEB0B1AEAEAEABB0B1B1B1AEAEAEAEAAAAACACB1B1B1B3B3B6B6B6B2B2B6B9BBBBBBB6BBBBB8B5B1B1B3B5B8B5B1B5B8B8B8B6B6B6B5B5B2B2B2B2B2B6B6B9BBBBBBB6B6B2B5B5B5B3B1B3B1B1AEACB0B2B0B0B0B0B1B0B2B5B5B3B3B1B1B1B1B2B1B2B3B3B2B1AEB1B1B1B3B3B1B1B1B2B1B1B1B1B1B1AEABAAAAA7A5A5A5A7A7A7A5A5A1A19F9F9C9C9C9E9EA1A19E9EA1A5A5A19E9E9C9E9CA1A3A7A3A1A3A19E9E9E9C9A9A9E9A9E9C9CA1A3A5A5A5A7A7AAA7A7AAA7AAAAAAAAA8A5A5A8A8ABACB0B2B1B1B1B1B3B3B2B6B5B5B1B1B1B3B1B1B1B3B6B6BBB6B6BBBBBBB6BBBCBCBCBCC0BDC1C1C4C4C4C8C9C9CEC9CECECFD0CECECECACACED0D3D0D0CFCFCFCFD1D1D0D3D1D0D1D4D1D1D4D4D4D4D1D0D0CBD0D0D1D0D1D1D1D4D4D4D4D3D1D4D4D3D3D3D1D035020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF4DEDEDBDBDCE1DBDFDCDEE6F6D3C6C4C4C1C1C3C0BCBCBCBBB9B9B9B8B6B6B9BBBDBBBBB9BCBFBFBFC0C0C0C0BCBDBDBDC0C0C0BFBFBCBDBCBCBCBFBDBDBBBDBCBCBCC0C3C3C6C4C4C4C3C3C4C5C3C4C4C4C4C4C3C3C5C5C5C5C3C5C5C9C9CACAC9CACACACACAC9CAC9C9C8C9C9CBC9CBCBCBCBCFCBCFCEC9CECECACAC9C9C8C8C8C9C9C9C6C6C8C8C6C6C3C5C8C6C3C6C5C9C9C8C6C4C4C4C5C5C9C9CACACACACAC9CBCAC9C5C5C5C3C3C3C4C3C3C1C1C1C0C0C0C0C0BCBBBBBBB8B3B3B3B6B6B6B6B5B2B2B5B5B5B5B5B5B9B6B5B8B8B5B6B6B8B6B3B1B1AEB0AEB1B1B1B1B1B1B1B3B6B5B8B5B1B5B8B8B9B6B8B5B6B5B1B3B6B6B8B8B3B3B1B1AEACACAAAAAAA7A7A7A5A3A5A5A7AAACABABACABAAABAEB0B0ACAAAAACAAAAAAABACB1B1B2B2B1B1B1B0ABABAEB1B1ACA8A8A8A7A7A5A8AAA7AAACACACAEB0B0B0ACACAEB0ACABACB0B0B0B1B0ABAAAAABABABABA7A7ABAAAAABAEAEACAAAAAAAAACB1B1B5B5B3B3B6B3B1B3B3B1B1B3B1ACACACAEACACB0AEACAEABACACB0B2B2B0B1B1B1B2B2B1B1AEB1B1B0B0B1B2B2B2B2B2B2B6B2B3B6B6B6B6B3B3B3B3B1B1AEAEB1B2B6B6B6B6B8BBB6B3B5B5B2B3B8B6B6B9BBB8B8B8B5B5B8BBBBB8B8BBBDBDBCBCBCBBB9B8BBBCBCBBBCBFBFBFBFC1C1C4C4C3C3C0BFBFBDBCBDBBBDBDC0C0BCC0C0C1BDBCBCBCBCBCBFBCBCBFBCBBBBBBBBBBBBBBB8BBBBBBBDBBB8BBBBBBB6BBB9BBBBB8B9B9BBBBBBB9BBBCC0C0BFC1C3C1C3C0BCBBBCBBBBBCB9B6B2B2B6B9B5B5B2B3B2B2B3B3B6B6B5B5B9B9B6B6B6B6B3B3B3B6B9B9B9B9B6B8B9BBBCBBB6B6B6BBBBBCBDC0C0C0C0C3BFBFC3C3C3C4C4C3C3BFBCBCC0C0C0C0BFBDC1C3C4C8C4C8C8C8C9C8C8C8C8C8C6C6C8C8C8C8C9C9C9C9CACBCFD0D3D4D7D9DADCDFDFDFDFDEE1E1E1E1E2E1DCE1DCDCDEDBDADADBDBD9DBDFDFDEDBDB3A020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CACBCBCBCBC9C5C6C4C5CEE6C3B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D73902020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0D1D1CED1D1D0D1D0D1DCF4D3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8C9CBCBC9C9C9C9C6C8CAD7EECBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C33002020202020202010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D5D9D5D9DBD9DAD7DAE7F8DACBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C63302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9DCDAD9DADCDBDEDEDEEAF8D4C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBF3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBCFCFCECFD3D3CFD3D6D6E1F4D1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B92F01010202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCDEE1E3E6E6E1E4E6E4EBF9D9CECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B62F020202020202020201020199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D1D7D7D5D7D9D7D9D7D3DCF3CEBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C93402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9DADBDBDFDFDEDFDEDEE6F7D5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BB2E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB9B9BCBDBFBDC0C1BDBDC5DBB8A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7EAEAEAE9EAE9E9EBE7F2FDDCD0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BC3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D4D4D3D3D5D5D5D4D4DFF3CEBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E26010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E4EAEAEAEBECEBF1F1F1F8FFE4DBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C9C6C4C3C4C4C5C3C4C4CBDEBFB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0AC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFD0D0CFD0CECBCECED1D7ECC9B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D33802020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9ECEBE9E7E9E9E7E9E9E9F3FDDCD0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B92F020101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9D9D7D1D1D1D0D4D6D6E3F6D1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C9C9CBCBCBC9C8CBD0D1DCF1C9BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C83402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C9C6C5C6C6C4C1C1C5CEE3C0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8ECEEEEECEBE9E7E9E9E9F3FDDED1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBD30020202020101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7EAE7E6E4E3E1E1E2E3EFFCDBCED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A72B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3C1C3C3BFC3C5C4C6C8C6D0E6C1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B32D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EAEBEBEAEAEAEAEBEBEBF6FFDCCECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B92D01010101010101010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C6C6C3C3C3BFC0C0BDC5DBB5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DE3B02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D9DADADBDCDEDCDEDFDEE7F8D4C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBCBCBCBC9CBC9C9C9C9D3E9C9B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C132020202020202020202010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD1CFCFCECFCECBCECED1DCEEC9B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8AB2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDB9BCBFBDBFBFBDC0C4C4D0E3C0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBF3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CBCFD3D1D0D0CED0D1CED6EBC5B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B22C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3C4C3C3C3C5C3C0C3C5C5D0E7C1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7B6B9B6B2B2B2B2B2B5B1B9CEAC9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B92E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAECEBEBEAEAEBEAEAECECF6FFDFD6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B82F01010101010102020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D1D0CBC9C9C9CBCBCED0D6EBC6B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C130020202020202010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C6C6C9CBCECFD1D1D0D6E9C6B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBC30020101010102010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBCECBC9C8CBCFCACAC9CAD3E9C6B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACAC9CBCBCBCECECA3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D0D5D5D5D4D4CFD0D1D4DFF3CEBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B52E02020201020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0C3C6C6C6C6C4C3C4C4C4CEE6C5B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0D1D1D0D3D5D5D3D1D1DBF1C9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A329010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED6D7D3D3D4D4D6D7D7D6E1F3CFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D33602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCB6B5B5B6B8BCB6BBBDBBC9E7D3D7D7D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADADBDBDBDEDEDEDEDEDEDEDEDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E1E2E3E3E3E3E3E4E4E4E3E4E6E6E6E6E9E6E9E7E9E7E6E6E6E6E6E6E6E7E7E6E6E7E6E4E4E4E6E6E6E6E3E4E6E6E4E4E3E3E2E2E3E4E4E4E4E4E4E3E3E2E3E4E4E4E6E6E7E6E6E7E7E6E6E6E7E6E6E6E4E4E3E3E3E3E3E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1DFDFDFE1E1E1E2E2E2E2E2E2E3E3E4E6E6E4E3E4E6E4E4E3E3E2E2E3E4E3E3E2E3E3E4E6E6E6E4E6E3E6E6E6E6E6E6E4E4E3E3E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1DFDFE1E1E1DFE1E1E1E1E1E1DFDFDFE1E1E1E2E1E1E1E1DFDFDFDFE1E1E2E3E3E4E4E4E3E3E3E2E2E3E2E2E1E1E1E1E2E3E1E2E3E2E3E3E4E4E4E3E4E4E4E4E3E3E3E3E3E3E4E4E3E3E6E3E4E4E6E6E6E6E7E9E9E9E9E9E7E6E6E6E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E6E7E9EAE9E9EAEAE9E7E7E6E6E4E3E3E2E2E2E2E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDFE1E1DFDFDFE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFE1E1DFDFDFDFDFDFDEDEDCDEDEDEDEDEDEDEDEDEDEDFDFDFDEDEDFDEDCDEDBDEDEDEDEDBDCDCDEDEDCDCDCDADCDADADADCDADADADCDEDEDEDBDBDEDEDEDFE1E1E1E1E1E1E1E1E2E3E3E3E4E3E3E2E1E1E1DFDEDEDEDCDEDFDEDEDEDEDEDEDEDEDFDFE1E1E1E1E1E1E1E1E1DEDEDFE1E1E1E1E1DEDEDEE1E1E1DFDFDFDEDFDFE1E2E2E2E3E2E3E3E3E4E3E3E3E3E3E3E3E3E2E3E3E3E3E3E3E3E2E2E2E3E3E3E3E4E3E3E3E3E3E3E3E4E3E3E3E3E3E3E3E6E6E6E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEAEAEBEBEBECECEBEAEAEAEAEAEAEAEAEAEAEAEAEBEBEAEBEBECECECECEEECECEBEBEBECEEEFEFEEEEECECEBECECCF5503020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB6B3B3B1B1B1B1B2B2BDDBF7F6EFEFEBEFF3F3F7F7F7F7F9FBFBFCFDFDFDFFFFFFFFFFFDFCFDFDFDFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE8D1A0201010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6C6C9C9C9CBCBDBF1FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFFDFDFDFCFCFCFDFDFBF9F9F9F9F9FCFBF9FBF9F8F8F8F8F9F9F8F8F7F7F7F7F7F7F7F4F4F2F2F2F2F3F2ECEBEBE7EAEAE6EAEEEEF2F2F2F2F4F6F6F7F8F8F8F9FCF9F9F9F8F7F8F8F8F7F8FBFCFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE17E1D0202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0BFC1C4C4C5C3C0CFECFBFDFBF9F9FDFDFFFFFFFFFFFCF8F8FCFDFDF9F6F6F6F3F3F2F6F7F4F7F9F9F9FCFCFCFCF9F9FCFCF9F8F9FCFCFCFFFCF8F7F7F8F8F8F8F4F4F8F7F7F8FCFCF9F7F7F7F7F9FDFFFFFFFFFFFFFFFDFFFFFDFDFFFDF9F9F9FCF9F9FCFCF9FCF8F9F9FCFFFFFCFFFFFFFFFFFDFDFCFDFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE68D2504020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB9BDBFBFC4C6D5ECFCFFFFFBF9F9F7F9FCFCFFFFFDFCFDFDFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFCF8F8FCFCFCFCF8F9F9F7F9F7F7F7F7F7F6F6F6F6F6F4F4F7F4F7FCF8F8FCFCF7F7F8FCFFFFFFFFFFFFFFFFFFFDFFFDFDFCFCF7F7FCF9F8F9F7F7FCF9F9F6F6F4F2F3F3F3F6F6F6F8F8FCFCFCF8F8FCFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF9F9F9FCFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCF8F8F8F9FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFCFCF9F7F7F7F7F6F9F8F8FCFCFCFCFCFFFFFFFFFFFFFFFFFFFCFCF8FCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFDFFFDFCFCFCFCFDF9FCFCF9F6F9FCFDFDFDFCFCF9F9F9F9FDFFFDFCFDFDFFFFFDF9FDFFFFFFFFFFFFFCFCFCF8F4F4F4F4F7F9F9F9F7F9F9F9F9F7F7F7F7F4F4F4F7F4F4F4F4F4F4F4F4EFF2F2F6F8F8F9FCFFFBD9781C0201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDBDBFBFBFBDCAE9FBFBF6F3EFF2F4F4F4F4F4F7FBFBFDFBFBF8FBF8FBFBFBFCFDFBFBFBF8FCFDFDFDFBFBFBFBF7F7F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDFDFBF9FCFFFCFCFCFCFDFCFFFFFFFFFFFDFDFDFDFFFDFFFFFFFFFDFBFDFDFDFFFFFDFDFDFFFDFDFDFDFDFDFBF8F7F7F2EFF1F1F2F2F2EFEFECECEAEAE6E6E6E7E7ECEBE7E7EBEFEFEBE7E7E6E7E6EBEEF2EEEBEEEBE7E7E7E4E3E3E7E3E7E6E6EBEEF1F1F1F3F3F7F2F2F7F2F7F7F7F7F4F1F1F4F4F8F9FCFFFDFDFDFDFFFFFFFFFFFFFDFDFDFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7A1B0202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CECFD1D4E1F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFCFCFCFCFBF7F7FBF9F9F9F7F8F8F9F9F6F2F2F2F2F2F7F6F2F4F2EEEEEEEFF2F2EEEEEBEBEBECECECEBE9E9E4E4E4E4E7E4E1DFDFDBDEDEDADEE2E2E4E4E4E4E9EAEAEBEEEEEFF2F7F2F2F2EFEBEEEEEFECEFF4F7FBF9FCFCFFFFFFFCFFFFFFFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFCF9F9F9FBFBFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE17F1D03020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED3D4D7E1F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBF8F7F7FBFCFCFCFDFFFDFDFDFDFFFFFFFFFDFDFDFDFDFDFDFDFDFDFCF9F9F9F9F9F9F8F8F4F4F4F1F1F1F1EEEAE6EBEBEEEEEEEEEFEFECECEAECEEEEF1F1F1F4F3F4F4F4F1EFECE7E7ECEFECE7E7E7E7E7EAE4E3E4E6E6E4E4E4E6E6E6E6E6EBEEEBECEFEFF1EFEFEFEFF2F4F4F3F8F8F3F3F2F2F2F2F7F2F2F4F4F2F1F1EFF1F2F7F2F2F2F1F1EEEEF1F3F8F8F8F8F8FBFDFDFDFDFBFBFBFBFBFBFDFFFFFFFCF9F9F4F3F1F1EFEFF3F4F7FBFDFDFBF7F9FCF9F9F9F7F9FCFCFDFDFDFCFDFDFDFFFDFDFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFDFFFFFFFFFDFDFDFBF8F8FBFBFBFBF8F9F9F7F9F7F7F7F7F7F4F4F4F4F4F3F3F7F3F7FBF8F8FBFBF7F7F8FBFDFFFFFFFFFFFFFFFFFDFDFDFDFBFBF7F7FBF9F8F9F7F7FBF9F9F4F4F3F1F2F2F2F4F4F4F8F8FCFCFCF8F8FBF9D9751A0202020299FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CFD1DEF2FDFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDFDFBF9FCFFFCFCFCFCFDFCFFFFFFFFFFFDFDFDFDFFFDFFFFFFFFFDFBFDFDFDFFFFFDFDFDFFFDFDFDFDFDFDFBF8F7F7F2EFF1F1F2F2F2EFEFECECEAEAE6E6E6E7E7ECEBE7E7EBEFEFEBE7E7E6E7E6EBEEF2EEEBEEEBE7E7E7E4E3E3E7E3E7E6E6EBEEF1F1F1F3F3F7F2F2F7F2F7F7F7F7F4F1F1F4F4F8F9FCFFFDFDFDFDFFFFFFFFFFFFFDFDFDFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE17C1C0202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6D6F1FDFFFBF9F8F8F8F8F7F7F4F4F4EFEFEFEFECE9E4EAEAECECECECEEEEEBEBE9EBECECEFEFEFF4F2F4F4F4EFEEEBE7E7EBEEEBE7E7E7E7E7E9E3E2E3E4E4E3E3E3E4E4E4E4E4EAECEAEBEEEEEFEEEEEEEEF1F4F4F2F7F7F2F2F1F1F1F1F6F1F1F4F4F1EFEFEEEFF1F6F1F1F1EFEFECECEFF2F7F7F7F7F7F9FCFCFCFCF9F9F9F9F9F9FCFFFFFFFBF8F8F4F2EFEFEEEEF2F4F6F9FCFCF9F6F8FBF8F8F8F6F8FBFBFCFCFCFBFCFCFCFFFCFCFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFCFFFFFFFFFCFCFCF9F7F7F9F9F9F9F7F8F8F6F8F6F6F6F6F6F4F4F4F4F4F2F2F6F2F6F9F7F7F9F9F6F6F7F9FCFFFFFFFFFFFFFFFFFCFCFCFCF9F9F6F6F9F8F7F8F6F6F9F8F8F4F4F2EFF1F1F1F4F4F4F7F7FBFBFBF7F7F9FCFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBF8F8F8FBFCFBFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFBFBFBFBF7F7F7F8FCFFFFFFFFFFFFFFFFFFFFFCFCFFFFFFFCFCFCFBFBF8F6F6F6F6F4F8F7F7F9F9F9F9F9FCFFFFFCFFFFFFFCFCFBF9F7FBFBFBFBFFFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDE7C1D03029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE1F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBF8F7F7FBFCFCFCFDFFFDFDFDFDFFFFFFFFFDFDFDFDFDFDFDFDFDFDFCF9F9F9F9F9F9F8F8F4F4F4F1F1F1F1EEEAE6EBEBEEEEEEEEEFEFECECEAECEEEEF1F1F1F4F3F4F4F4F1EFECE7E7ECEFECE7E7E7E7E7EAE4E3E4E6E6E4E4E4E6E6E6E6E6EBEEEBECEFEFF1EFEFEFEFF2F4F4F3F8F8F3F3F2F2F2F2F7F2F2F4F4F2F1F1EFF1F2F7F2F2F2F1F1EEEEF1F3F8F8F8F8F8FBFDFDFDFDFBFBFBFBFBFBFDFFFFFFFCF9F9F4F3F1F1EFEFF3F4F7FBFDFDFBF7F9FCF9F9F9F7F9FCFCFDFDFDFCFDFDFDFFFDFDFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFDFFFFFFFFFDFDFDFBF8F8FBFBFBFBF8F9F9F7F9F7F7F7F7F7F4F4F4F4F4F3F3F7F3F7FBF8F8FBFBF7F7F8FBFDFFFFFFFFFFFFFFFFFDFDFDFDFBFBF7F7FBF9F8F9F7F7FBF9F9F4F4F3F1F2F2F2F4F4F4F8F8FCFCFCF8F8FBFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF9F9F9FCFDFCFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFCFCF8F8F8F9FDFFFFFFFFFFFFFFFFFFFFFDFDFFFFFFFDFDFDFCFCF9F7F7F7F7F4F9F8F8FBFBFBFBF7D7751B0299FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBFCFBFDFDFDFDFDFDFDFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFDFDFBF9F9F7F7F7F2F2F2EFEEF1F1F3F7F9F8F8F9F8F7F8FBFCFCF9F7F7F9F7F7F7F8F9FDFDFFFFFDFDFDFCF8F8FBFDFDF9F4F4F4F2F2F1F4F7F3F7F9F9F9FBFCFCFCF9F9FBFCF9F8F9FCFCFCFDFCF8F7F7F8F8F8F8F3F3F8F7F7F8FBFBF9F7F7F7F7F9FDFDFFFFFFFFFFFFFDFFFFFDFDFFFDF9F9F9FBF9F9FCFBF9FBF8F9F9FCFFFFFCFDFDFDFFFFFDFDFBFDFDFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBFBFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE689209AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBF7F7F6F6F6F7F7F9F9F9F9F7F2EFECECECE9E9E4E9E9E4E4E7EAEAEAEAE7E7E4E4E4E2E4E4E4E2E3E3E3E9E4E7EAECF1F1F1F1F4F4F6F2F1F1F1ECEEEEF1F1ECECEBEBEBEFEFEFEFF2F2F2F1F4F4F4F4F4F6F6F9FCF8F8F7F7FBF9F9FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE17EA7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFAFCFCFCFAFAF9F8F9F9F9FAFAFAFCFCFCFCFCFCFCFCFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCFCFCFCFDFCFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFCFCFCFCFCFCFDFFFFFFFFFFFFFFFFFFFFFDFDFFFFFFFDFDFDFCFCFCFAFAFAFAFAFCFCFCFCFCFCFCFCFDFFFFFDFFFFFFFDFDFCFCFCFCFCFCFCFFFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFFFFFFFDFFFDFCFCFCFCFDFCFCFCFCFAFCFCFDFDFDFCFCFCFCFCFCFDFFFDFCFDFDFFFFFDFCFDFDFFFFFFFFFDFCFCFCFCF9F9F9F9FAFCFCFCFAFCFCFCFCFAFAFAFAF9F9F9FAF9F9F9F9F9F9F9F9F7F8F8FAFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFCFCFDFDFDFFFFFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE3D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-%%Trailer
-
-
-%%EndDocument
- @endspecial 94 3203 a Fl(Con)m(tract)32 b(for:)1000
-3416 y Fk(Shared-cost)38 b(R)-10 b(TD)39 b(\(FET)f(Programme\))1095
-3822 y(Annex)g(1)h(-)g(\\Description)e(of)h(W)-10 b(ork")94
-4129 y Fl(Pro)5 b(ject)31 b(Acron)m(ym:)41 b(MO)m(W)m(GLI)94
-4242 y(Pro)5 b(ject)31 b(full)d(title:)41 b(Mathematics)31
-b(On)f(the)g(W)-8 b(eb:)42 b(Get)31 b(it)f(b)m(y)g(Logic)h(and)f(In)m
-(terfaces)94 4355 y(Prop)s(osal/Con)m(tract)h(no.:)41
-b(IST-2001-33562)34 b(MO)m(W)m(GLI)94 4468 y(Related)d(to)g(other)f
-(Con)m(tract)i(no.:)94 4694 y(Date)g(of)e(Preparation)g(of)h(Annex)f
-(1:)41 b(17)31 b(o)s(ctob)s(er)g(2001)94 4920 y(Op)s(erativ)m(e)f
-(commencemen)m(t)i(date)f(of)f(con)m(tract:)p eop
-%%Page: 2 2
-2 1 bop 94 171 a Fj(Con)l(ten)l(ts)94 375 y Fi(1)84 b(Pro)6
-b(ject)36 b(summary)2710 b(4)230 488 y Fl(1.1)94 b(Ob)5
-b(jectiv)m(es)38 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)140 b(4)230 601 y(1.2)94
-b(Description)30 b(of)g(w)m(ork)f(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)140 b(4)230 714 y(1.3)94
-b(Milestones)30 b(and)g(exp)s(ected)h(results)40 b(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)140 b(4)94 918 y Fi(2)84
-b(Pro)6 b(ject)36 b(ob)6 b(jectiv)m(es)2681 b(5)94 1121
-y(3)84 b(P)m(articipan)m(t)36 b(list)2821 b(7)94 1325
-y(4)84 b(Con)m(tribution)35 b(to)g(programme/k)m(ey)f(action)h(ob)6
-b(jectiv)m(es)1225 b(7)94 1529 y(5)84 b(Inno)m(v)-6 b(ation)3024
-b(8)94 1733 y(6)84 b(Comm)m(unit)m(y)33 b(added)i(v)-6
-b(alue)35 b(and)g(con)m(tribution)h(to)f(EC)f(p)s(olicies)865
-b(10)94 1937 y(7)84 b(Con)m(tribution)35 b(to)g(Comm)m(unit)m(y)e(So)s
-(cial)i(Ob)6 b(jectiv)m(es)1347 b(11)94 2141 y(8)84 b(Economic)36
-b(dev)m(elopmen)m(t)e(and)h(Scien)m(ti\014c)g(and)230
-2253 y(T)-9 b(ec)m(hnological)37 b(Prosp)s(ects)2365
-b(12)230 2366 y Fl(8.1)94 b(Iden)m(ti\014cation)30 b(of)h(exploitable)e
-(results)63 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(12)230
-2479 y(8.2)f(T)-8 b(arget)32 b(Mark)m(et)93 b(.)45 b(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95
-b(13)230 2592 y(8.3)f(Consortium's)29 b(Dissemination)g(and)h
-(Exploitation)f(Strategy)39 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)95 b(13)94 2796 y Fi(9)84 b(W)-9 b(orkplan)3012
-b(14)230 2909 y Fl(9.1)94 b(W)-8 b(orkpac)m(k)j(age)34
-b(list)61 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)95 b(14)230 3022 y(9.2)f(General)31 b(description)h(.)46
-b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95
-b(15)230 3135 y(9.3)f(W)-8 b(ork)32 b(P)m(ac)m(k)-5 b(age)33
-b(descriptions)26 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-95 b(17)439 3248 y(9.3.1)106 b(Pro)5 b(ject)32 b(Managemen)m(t)41
-b(.)k(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(17)439
-3361 y(9.3.2)106 b(Requiremen)m(t)30 b(Analysis)69 b(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(18)439 3473
-y(9.3.3)106 b(T)-8 b(ransformation)46 b(.)g(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)95 b(20)439 3586 y(9.3.4)106
-b(Metadata)68 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)95 b(22)439 3699 y(9.3.5)106 b(In)m(terfaces)66
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)95 b(23)439 3812 y(9.3.6)106 b(Distribution)31 b(.)46
-b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95
-b(24)439 3925 y(9.3.7)106 b(T)-8 b(esting)31 b(and)e(V)-8
-b(alidation)34 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95
-b(25)439 4038 y(9.3.8)106 b(Information)30 b(Dissemination)e(and)i
-(Exploitation)e(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)95 b(26)230 4151 y(9.4)f(Deliv)m(erable)30
-b(list)f(b)m(y)h(W)-8 b(orkP)m(ac)m(k)j(age)95 b(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(27)230 4264 y(9.5)f(Pro)5
-b(ject)32 b(Planning)c(and)i(timetable)45 b(.)h(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)95 b(29)230 4377 y(9.6)f(Graphical)30 b(presen)m(tation)g(of)g
-(pro)5 b(ject)31 b(comp)s(onen)m(ts)47 b(.)e(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(30)230
-4490 y(9.7)f(Pro)5 b(ject)32 b(Managemen)m(t)49 b(.)c(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(31)439 4603
-y(9.7.1)106 b(Decision)30 b(Pro)s(cess)69 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(31)439 4715 y(9.7.2)106
-b(Information)30 b(Flo)m(w)36 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)95 b(32)439 4828 y(9.7.3)106 b(Qualit)m(y)30
-b(Pro)s(cedures)i(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95
-b(32)439 4941 y(9.7.4)106 b(Con\014den)m(tialit)m(y)29
-b(and)h(IPR)g(handling)i(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(32)94
-5145 y Fi(10)32 b(Clustering)2982 b(32)1920 5627 y Fl(2)p
-eop
-%%Page: 3 3
-3 2 bop 94 171 a Fi(11)32 b(Other)i(con)m(tractual)i(conditions)2141
-b(33)230 284 y Fl(11.1)49 b(Other)30 b(signi\014can)m(t)g(pro)5
-b(ject)31 b(costs)j(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95
-b(33)230 397 y(11.2)49 b(T)-8 b(ra)m(v)m(el)31 b(costs)h(outside)d
-(MS/AS)50 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95
-b(33)94 601 y Fi(A)57 b(Consortium)35 b(Description)2359
-b(35)230 714 y Fl(A.1)71 b(Univ)m(ersit)m(y)30 b(of)h(Bologna,)g
-(Departmen)m(t)h(of)e(Computer)g(Science)47 b(.)f(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(37)230 827 y(A.2)71 b(INRIA)45
-b(.)h(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)95 b(39)439 940 y(A.2.1)83 b(The)30
-b(Lemme)h(pro)5 b(ject)85 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)95 b(40)439 1053 y(A.2.2)83 b(The)30 b(LogiCal)g(pro)5
-b(ject)65 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95
-b(41)230 1165 y(A.3)71 b(German)31 b(Researc)m(h)g(Cen)m(ter)g(for)f
-(Arti\014cial)f(In)m(telligence)g(Gm)m(bH,)i(DFKI)67
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(41)230 1278 y(A.4)71
-b(Nijmegen)30 b(\(&)h(Eindho)m(v)m(en\))26 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(43)230 1391 y(A.5)71
-b(MPG)31 b(&)f(TU)g(Berlin)54 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(45)439 1504 y(A.5.1)83
-b(Max)31 b(Planc)m(k)g(Institute)e(for)i(Gra)m(vitational)f(Ph)m(ysics)
-57 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95
-b(45)439 1617 y(A.5.2)83 b(Cen)m(ter)31 b(for)f(Information)f
-(Managemen)m(t)k(in)c(the)h(Max)i(Planc)m(k)e(So)s(ciet)m(y)38
-b(.)46 b(.)g(.)g(.)f(.)95 b(46)439 1730 y(A.5.3)83 b(TU)30
-b(Berlin)40 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)95 b(47)230 1843 y(A.6)71 b(T)-8 b(rusted)30
-b(Logic)47 b(.)f(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)95 b(48)1920 5627 y(3)p eop
-%%Page: 4 4
-4 3 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2578
-b Fl(4)94 171 y Fj(1)135 b(Pro)7 b(ject)46 b(summary)94
-354 y Fg(1.1)112 b(Ob)6 b(jectiv)m(es)94 526 y Fl(The)42
-b(W)-8 b(orld)42 b(Wide)g(W)-8 b(eb)44 b(is)d(already)h(the)h(largest)g
-(resource)g(of)f(mathematical)h(kno)m(wledge,)j(and)c(its)94
-638 y(imp)s(ortance)36 b(will)e(b)s(e)j(exp)s(onen)m(tiated)g(b)m(y)f
-(emerging)h(displa)m(y)e(tec)m(hnologies)j(lik)m(e)e(MathML.)i(Ho)m(w)m
-(ev)m(er,)94 751 y(almost)25 b(all)f(mathematical)h(do)s(cumen)m(ts)g
-(a)m(v)-5 b(ailable)24 b(on)h(the)g(W)-8 b(eb)26 b(are)f(mark)m(ed)g
-(up)f(only)g(for)h(presen)m(tation,)94 864 y(sev)m(erely)37
-b(crippling)c(the)k(p)s(oten)m(tialities)e(for)h(automation,)j(in)m
-(terop)s(erabilit)m(y)-8 b(,)36 b(sophisticated)g(searc)m(hing)94
-977 y(mec)m(hanisms,)24 b(in)m(telligen)m(t)f(applications,)g
-(transformation)g(and)g(pro)s(cessing.)37 b(The)24 b(goal)g(of)f(the)h
-(pro)5 b(ject)24 b(is)94 1090 y(to)31 b(o)m(v)m(ercome)h(these)f
-(limitations,)d(passing)h(form)g(a)i(mac)m(hine-readable)e(to)i(a)g
-(mac)m(hine-understandable)94 1203 y(represen)m(tation)j(of)g(the)g
-(information,)g(and)f(dev)m(eloping)g(the)h(tec)m(hnological)h
-(infrastructure)d(for)h(its)h(ex-)94 1316 y(ploitation.)47
-b(MO)m(W)m(GLI)34 b(builds)c(on)j(previous)e(\\standards")i(for)g(the)g
-(managemen)m(t)h(and)f(publishing)28 b(of)94 1429 y(mathematical)41
-b(do)s(cumen)m(ts)f(\(MA)m(thML,)j(Op)s(enMath,)f(OMDo)s(c\),)j(in)m
-(tegrating)c(them)f(with)g(di\013eren)m(t)94 1542 y(XML)31
-b(tec)m(hnology)g(\(XSL)-8 b(T,)31 b(RDF,)g(.)15 b(.)h(.)f(\).)94
-1762 y Fg(1.2)112 b(Description)36 b(of)i(w)m(ork)94
-1933 y Fl(The)30 b(goal)h(of)f(the)h(pro)5 b(ject)31
-b(is)e(to)i(pro)m(vide)f(a)h(comprehensiv)m(e)e(description,)g(from)h
-(con)m(ten)m(t)i(to)f(metadata,)94 2046 y(of)h(a)h(giv)m(en)g(\014eld)e
-(of)h(kno)m(wledge)g(\(in)g(our)g(case)h(mathematics\),)h(in)d(order)h
-(to)h(enhance)f(its)g(accessibilit)m(y)-8 b(,)94 2159
-y(exc)m(hange)34 b(and)e(elab)s(oration)f(via)h(the)h(W)-8
-b(orld)32 b(Wide)g(W)-8 b(eb.)47 b(MO)m(W)m(GLI)34 b(will)29
-b(mak)m(e)34 b(an)e(essen)m(tial)g(use)g(of)94 2272 y(standard)25
-b(XML)h(tec)m(hnology)i(and)d(aspires)g(to)h(b)s(ecome)h(an)f(example)f
-(of)h(\\b)s(est)g(practice")h(in)e(its)g(use,)i(and)94
-2385 y(a)k(leading)e(pro)5 b(ject)31 b(in)e(the)h(new)g(area)h(of)g
-(the)g(Seman)m(tic)f(W)-8 b(eb.)94 2498 y(In)30 b(particular,)f(w)m(e)h
-(shall)f(deeply)g(explore)h(the)h(p)s(oten)m(tialities)e(of)h(XML)h(in)
-e(the)i(follo)m(wing)d(directions:)94 2611 y Fi(Publishing)p
-Fl(.)49 b(XML)33 b(o\013ers)g(sophisticated)f(publishing)c(tec)m
-(hnologies)34 b(\(St)m(ylesheets,)g(MathML,)g(SV)m(G,)94
-2724 y(.)15 b(.)h(.)f(\))43 b(whic)m(h)30 b(can)h(b)s(e)f(pro\014tably)
-g(used)g(to)i(solv)m(e,)f(in)f(a)h(standard)g(w)m(a)m(y)-8
-b(,)32 b(the)g(anno)m(ying)e(notational)h(prob-)94 2836
-y(lems)42 b(that)h(traditionally)e(a\017ict)i(con)m(ten)m(t)h(based)f
-(and)f(mac)m(hine-understandable)f(enco)s(dings)g(of)i(the)94
-2949 y(information.)94 3062 y Fi(Searc)m(hing)37 b(and)f(Retrieving)p
-Fl(.)45 b(Metadata)34 b(will)29 b(pla)m(y)i(a)h(ma)5
-b(jor)32 b(role)f(in)f(MO)m(W)m(GLI.)j(New)f(W3C)g(lan-)94
-3175 y(guages)43 b(suc)m(h)e(as)h(the)f(Resource)h(Description)f(F)-8
-b(ramew)m(ork)42 b(or)g(XML)g(Query)e(are)i(lik)m(ely)e(to)j(pro)s
-(duce)94 3288 y(ma)5 b(jor)30 b(inno)m(v)-5 b(ativ)m(e)31
-b(solutions)e(in)g(this)g(\014eld.)94 3401 y Fi(In)m(terop)s(erabilit)m
-(y)p Fl(.)71 b(Disp)s(osing)39 b(of)h(a)h(common,)j(mac)m(hine)c
-(understandable)f(la)m(y)m(er)i(is)e(a)i(ma)5 b(jor)41
-b(and)94 3514 y(essen)m(tial)30 b(step)h(in)e(this)g(direction.)94
-3627 y Fi(Distribution)p Fl(.)69 b(All)38 b(XML)i(tec)m(hnology)h(is)d
-(\014nally)g(aimed)h(to)h(the)g(access)h(of)f(the)f(W)-8
-b(eb)41 b(as)e(a)h(single,)94 3740 y(distributed)27 b(resource,)k(with)
-e(no)i(cen)m(tral)f(authorit)m(y)h(and)e(few,)i(simple)d(rules.)235
-3853 y(MO)m(W)m(GLI)22 b(builds)c(on)i(the)h(solid)e(ground)g(already)h
-(pro)m(vided)g(b)m(y)g(previous)f(Europ)s(ean)h(pro)5
-b(jects)21 b(\(Suc)m(h)94 3966 y(as)42 b(Op)s(enMA)m(th)f(and)g
-(Euler\))f(and)h(sev)m(eral)h(XML)g(dialects)f(for)g(the)h(managemen)m
-(t)h(of)f(mathematical)94 4078 y(do)s(cumen)m(ts)h(\(MathML,)i(Op)s
-(enMA)m(th,)i(OMDo)s(c,)h(.)15 b(.)g(.)h(\).)81 b(All)42
-b(these)i(languages)g(co)m(v)m(er)h(di\013eren)m(t)e(and)94
-4191 y(orthogonal)g(asp)s(ects)g(of)g(the)g(information;)k(our)42
-b(aim)g(is)g(not)h(to)g(prop)s(ose)f(a)h(new)g(standard,)i(but)d(to)94
-4304 y(study)e(and)g(to)h(dev)m(elop)f(the)h(tec)m(hnological)g
-(infrastructure)e(required)f(for)j(taking)f(adv)-5 b(an)m(tage)43
-b(of)d(the)94 4417 y(p)s(oten)m(tialities)29 b(of)h(all)g(of)g(them.)94
-4637 y Fg(1.3)112 b(Milestones)37 b(and)h(exp)s(ected)g(results)94
-4809 y Fi(First)i(MO)m(W)m(GLI)g(protot)m(yp)s(e)35 b
-Fl(\(mon)m(th)h(18\),)h(supp)s(orting)c(bro)m(wsing,)i(rendering)f(and)
-g(on-line)g(con-)94 4922 y(sultation)k(of)h(large)g(rep)s(ositories)f
-(of)h(\(con)m(ten)m(t-based\))j(mathematical)d(kno)m(wledge.)67
-b(The)38 b(translation)94 5034 y(from)30 b(con)m(ten)m(t)i(to)f(presen)
-m(tation)g(will)c(b)s(e)j(done)g(via)g(suitable)f(notational)i(st)m
-(ylesheets.)94 5147 y Fi(Adv)-6 b(anced)35 b(MO)m(W)m(GLI)f(protot)m
-(yp)s(e)c Fl(\(mon)m(th)h(24\),)g(supp)s(orting)d(distribution,)e
-(indexing,)j(searc)m(hing)94 5260 y(and)h(retriev)-5
-b(al)29 b(\(based)i(on)f(a)h(sophisticated)e(metadata)j(mo)s(del\).)94
-5373 y Fi(Final)j(MO)m(W)m(GLI)f(protot)m(yp)s(e)d Fl(\(mon)m(th)f
-(30\).)42 b(Result)30 b(of)g(v)-5 b(alidation.)p eop
-%%Page: 5 5
-5 4 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2578
-b Fl(5)94 171 y Fj(2)135 b(Pro)7 b(ject)46 b(ob)7 b(jectiv)l(es)94
-374 y Fl(The)42 b(new)f(fron)m(tier)h(of)g(Con)m(ten)m(t)h(Based)g
-(Information)e(Systems)h(is)f(the)h(so)g(called)g(\\Seman)m(tic)g(W)-8
-b(eb")94 487 y(\(see)29 b([3]\).)41 b(Asso)s(ciating)27
-b(meaning)g(with)f(con)m(ten)m(t)j(or)f(establishing)d(a)j(la)m(y)m(er)
-h(of)e(mac)m(hine)h(understandable)94 600 y(data)46 b(will)d(allo)m(w)h
-(automated)j(agen)m(ts,)j(sophisticated)45 b(searc)m(h)h(engines)e(and)
-h(in)m(terop)s(erable)f(services)94 713 y(and)32 b(will)d(enable)j
-(higher)f(degree)i(of)g(automation)f(and)g(more)g(in)m(telligen)m(t)g
-(applications.)44 b(The)32 b(ultimate)94 826 y(goal)38
-b(of)f(the)h(Seman)m(tic)g(W)-8 b(eb)38 b(is)e(to)i(allo)m(w)f(mac)m
-(hines)g(to)h(share)f(and)g(exploit)g(kno)m(wledge)g(in)f(the)i(W)-8
-b(eb)94 939 y(w)m(a)m(y)g(,)36 b(i.e.)52 b(without)33
-b(cen)m(tral)h(authorit)m(y)-8 b(,)36 b(with)c(few)i(basic)f(rules,)h
-(in)f(a)h(scalable,)h(adaptable,)g(extensible)94 1052
-y(manner.)k(Ho)m(w)m(ev)m(er,)31 b(the)d(actual)g(dev)m(elopmen)m(t)g
-(of)g(the)g(Seman)m(tic)f(W)-8 b(eb)29 b(and)e(its)g(tec)m(hnologies)i
-(has)e(b)s(een)94 1165 y(hindered)19 b(so)i(far)f(b)m(y)h(the)g(lac)m
-(k)h(of)f(large)g(scale,)i(distributed)18 b(rep)s(ositories)i(of)h
-(structured,)h(con)m(ten)m(t)g(orien)m(ted)94 1277 y(information.)42
-b(The)31 b(case)i(of)e(Mathematical)i(kno)m(wledge,)f(the)f(most)h
-(rigorous)f(and)f(condensed)h(form)g(of)94 1390 y(kno)m(wledge,)h(is)f
-(paradigmatic.)44 b(The)31 b(W)-8 b(orld)31 b(Wide)g(W)-8
-b(eb)33 b(is)d(already)h(no)m(w)h(the)g(largest)g(single)e(resource)94
-1503 y(of)c(mathematical)g(kno)m(wledge,)g(and)f(its)g(imp)s(ortance)g
-(will)e(b)s(e)i(exp)s(onen)m(tiated)h(b)m(y)f(the)h(emerging)f(displa)m
-(y)94 1616 y(tec)m(hnologies)h(lik)m(e)e(MathML.)i(Ho)m(w)m(ev)m(er,)i
-(almost)d(all)f(mathematical)i(do)s(cumen)m(ts)e(a)m(v)-5
-b(ailable)25 b(on)f(the)i(W)-8 b(eb)94 1729 y(are)25
-b(mark)m(ed)g(up)f(only)g(for)h(presen)m(tation)g(\(in)f(this)f(resp)s
-(ect,)k(curren)m(t)d(practice)h(in)f(MathML)i(impro)m(v)m(es)e(on,)94
-1842 y(but)33 b(do)s(es)h(not)g(fundamen)m(tally)e(di\013er)h(from)g
-(the)h(older)f(pap)s(er-orien)m(ted)h(markup)e(sc)m(hemes)j(lik)m(e)e
-(L)3583 1825 y Ff(A)3622 1842 y Fl(T)3673 1862 y(E)3723
-1842 y(X)94 1955 y(or)c(P)m(ostscript\).)41 b(A)30 b(consequence)g(of)f
-(this)g(is)f(that)i(the)g(online)e(material)g(is)h(mac)m
-(hine-readable,)g(but)g(not)94 2068 y(mac)m(hine-understandable,)f(sev)
-m(erely)j(crippling)c(the)k(p)s(ossibilit)m(y)c(to)k(o\013er)f(added-v)
--5 b(alue)30 b(services)g(lik)m(e)230 2255 y Fe(\017)46
-b Fl(Preserv)-5 b(ation)31 b(of)h(the)g(real)f(informativ)m(e)g(con)m
-(ten)m(t)i(in)d(a)i(highly)e(structured)g(and)h(mac)m(hine)h(under-)321
-2368 y(standable)e(format,)h(suitable)e(for)h(transformation,)g
-(automatic)h(elab)s(oration)f(and)f(pro)s(cessing.)230
-2556 y Fe(\017)46 b Fl(Cut)33 b(and)f(paste)h(on)g(the)g(lev)m(el)f(of)
-h(computation)g(\(tak)m(e)i(the)e(output)f(from)h(a)g(W)-8
-b(eb)33 b(searc)m(h)h(engine)321 2669 y(and)c(paste)h(it)f(in)m(to)g(a)
-h(computer)f(algebra)h(system\).)230 2857 y Fe(\017)46
-b Fl(Automatic)31 b(pro)s(of)f(c)m(hec)m(king)h(of)g(published)26
-b(pro)s(ofs)230 3044 y Fe(\017)46 b Fl(Seman)m(tical)30
-b(searc)m(h)h(for)g(mathematical)f(concepts)h(\(rather)g(than)f(k)m
-(eyw)m(ords\).)230 3232 y Fe(\017)46 b Fl(Classi\014cation:)38
-b(giv)m(en)29 b(a)g(concrete)h(mathematical)f(structure,)f(is)g(there)g
-(a)h(general)g(theory)g(for)f(it?)235 3419 y(Due)22 b(to)g(its)f(ric)m
-(h)f(notational,)j(logical)e(and)g(seman)m(tical)g(structure,)i
-(mathematical)f(kno)m(wledge)f(is)g(th)m(us)94 3532 y(a)32
-b(main)e(case)j(study)e(for)g(the)h(dev)m(elopmen)m(t)g(of)f(the)h(new)
-f(generation)h(of)g(seman)m(tic)f(W)-8 b(eb)33 b(systems.)44
-b(The)94 3645 y(aim)33 b(of)g(the)h(prop)s(osed)e(pro)5
-b(ject)34 b(is)f(b)s(oth)f(to)j(help)d(in)g(this)g(pro)s(cess,)i(as)g
-(w)m(ell)e(as)i(pa)m(v)m(e)h(the)e(w)m(a)m(y)i(to)m(w)m(ards)94
-3758 y(a)42 b(really)f(useful)g(virtual,)i(distributed,)g(h)m(yp)s
-(er-textual)e(resource)i(for)f(the)g(w)m(orking)f(mathematician,)94
-3871 y(scien)m(tist)j(or)g(engineer.)81 b(All)43 b(mo)s(dern)g
-(sciences)h(ha)m(v)m(e)h(a)g(strongly)e(mathematicised)h(core,)49
-b(and)43 b(will)94 3984 y(b)s(ene\014t.)59 b(The)36 b(real)g(mark)m(et)
-i(and)e(application)f(area)i(for)g(the)g(tec)m(hniques)f(dev)m(elop)s
-(ed)g(in)f(this)h(pro)5 b(ject,)94 4097 y(apart)35 b(from)e(the)i(ob)m
-(vious)f(realm)f(of)i(education,)g(lies)e(with)g(high-tec)m(h)h(and)g
-(engineering)f(corp)s(orations)94 4210 y(that)24 b(rely)f(on)g(h)m(uge)
-g(form)m(ula)g(databases.)39 b(Curren)m(tly)-8 b(,)24
-b(b)s(oth)f(the)g(con)m(ten)m(t)i(markup)e(as)g(w)m(ell)g(as)g(the)h
-(added-)94 4323 y(v)-5 b(alue)34 b(services)h(alluded)e(to)i(ab)s(o)m
-(v)m(e)h(are)g(v)m(ery)f(underdev)m(elop)s(ed,)f(limiting)e(the)j
-(usefulness)e(of)i(the)g(vital)94 4436 y(kno)m(wledge.)40
-b(The)28 b(infrastructure)e(and)h(kno)m(who)m(w)i(needed)e(for)h
-(mining)e(this)h(information)g(treasure)h(and)94 4549
-y(obtaining)g(a)h(comp)s(etitiv)m(e)g(edge)h(in)e(dev)m(elopmen)m(t)h
-(is)g(exactly)g(what)g(w)m(e)h(are)f(attempting)h(to)g(dev)m(elop)f(in)
-94 4661 y(our)h(pro)5 b(ject.)235 4774 y(Sev)m(eral)38
-b(languages)h(ha)m(v)m(e)h(b)s(een)d(already)h(prop)s(osed)f(for)h(the)
-h(managemen)m(t)g(of)g(mathematical)f(in-)94 4887 y(formation)j(on)g
-(the)g(W)-8 b(eb,)45 b(b)s(oth)c(for)g(publishing,)f(comm)m(unication)h
-(and)f(arc)m(hiving)g(purp)s(oses:)61 b(most)94 5000
-y(notably)-8 b(,)37 b(MathML)f([11)q(],)h(Op)s(enMath)e([15)q(],)i
-(OMDo)s(c)f([14)q(].)56 b(Other)35 b(languages)h(m)m(ust)f(b)s(e)g
-(also)g(consid-)94 5113 y(ered)f(for)f(de\014nition)f(and)h(sp)s
-(eci\014cation)f(of)i(Metadata,)j(suc)m(h)d(as)g(the)g(Dublin-core)e
-(System)i([5],)h(or)f(the)94 5226 y(Resource)d(Description)f(F)-8
-b(ramew)m(ork)32 b([16)r(].)42 b(All)30 b(these)h(languages,)h(whic)m
-(h)e(tend)g(to)i(co)m(v)m(er)h(di\013eren)m(t)d(and)94
-5339 y(orthogonal)f(asp)s(ects)f(of)h(the)f(managemen)m(t)i(of)f
-(mathematical)f(do)s(cumen)m(ts,)h(m)m(ust)f(b)s(e)g(ev)m(en)m(tually)g
-(tak)m(en)p eop
-%%Page: 6 6
-6 5 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2578
-b Fl(6)94 171 y(in)m(to)25 b(accoun)m(t)i(for)f(the)f(am)m(bitious)f
-(goal)i(of)g(our)f(pro)5 b(ject.)40 b(One)25 b(of)g(our)g(aims)g(is)f
-(actually)h(the)h(de\014nition)d(of)94 284 y(a)33 b(mo)s(dular)e(arc)m
-(hitecture)i(whic)m(h)f(could)g(exploit)f(the)i(distinctiv)m(e)f(p)s
-(oten)m(tialities)f(of)i(eac)m(h)h(one)f(of)g(these)94
-397 y(languages,)40 b(in)m(tegrating)d(them)h(in)m(to)f(a)h(single)e
-(application.)61 b(The)37 b(in)m(tegration)g(is)g(in)f(this)g(case)j
-(facili-)94 510 y(tated)28 b(b)m(y)g(the)f(fact)i(that)f(all)e(the)i
-(languages)f(men)m(tioned)g(are)h(particular)e(instances)h(of)h(XML,)f
-(pro)m(viding)94 623 y(the)32 b(opp)s(ortunit)m(y)d(to)j(use)f
-(standard)g(XML)g(tec)m(hnology)-8 b(,)34 b(and)d(in)f(particular)f
-(XSL)i(T)-8 b(ransformations)30 b(or)94 736 y(st)m(ylesheets)h([18)q
-(],)g(to)g(pass)f(from)g(one)h(language)f(to)i(the)e(other.)1018
-2387 y @beginspecial 0 @llx 0 @lly 202 @urx 167 @ury
-2218 @rwi @setspecial
-%%BeginDocument: arch.eps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: arch.eps
-%%Creator: fig2dev Version 3.2 Patchlevel 3a
-%%CreationDate: Tue Jan 30 13:45:06 2001
-%%For: asperti@marcello (Andrea Asperti, docente, 2094505)
-%%BoundingBox: 0 0 202 167
-%%Magnification: 0.3000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
-newpath 0 167 moveto 0 0 lineto 202 0 lineto 202 167 lineto closepath clip newpath
--16.0 175.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-%%Page: 1 1
-10 setmiterlimit
- 0.01890 0.01890 sc
-% Polyline
-7.500 slw
-n 2025 8325 m 4050 8325 l 4050 9000 l 2025 9000 l
- cp gs col0 s gr 
-/Times-Roman ff 300.00 scf sf
-2565 8910 m
-gs 1 -1 sc (Interface) col0 sh gr
-/Times-Roman ff 300.00 scf sf
-2610 8640 m
-gs 1 -1 sc (Textual) col0 sh gr
-% Polyline
-n 900 6750 m 2925 6750 l 2925 7425 l 900 7425 l
- cp gs col0 s gr 
-/Times-Roman ff 300.00 scf sf
-1575 7020 m
-gs 1 -1 sc (Type) col0 sh gr
-/Times-Roman ff 300.00 scf sf
-1395 7335 m
-gs 1 -1 sc (Checker) col0 sh gr
-% Polyline
-n 4725 8325 m 6750 8325 l 6750 9000 l 4725 9000 l
- cp gs col0 s gr 
-/Times-Roman ff 300.00 scf sf
-5175 8595 m
-gs 1 -1 sc (Graphical) col0 sh gr
-/Times-Roman ff 300.00 scf sf
-5265 8910 m
-gs 1 -1 sc (Interface) col0 sh gr
-% Polyline
-n 3600 6750 m 5625 6750 l 5625 7425 l 3600 7425 l
- cp gs col0 s gr 
-/Times-Roman ff 300.00 scf sf
-4050 7335 m
-gs 1 -1 sc (Extractor) col0 sh gr
-/Times-Roman ff 300.00 scf sf
-4095 7020 m
-gs 1 -1 sc (Program) col0 sh gr
-% Polyline
-n 6300 6750 m 8325 6750 l 8325 7425 l 6300 7425 l
- cp gs col0 s gr 
-/Times-Roman ff 300.00 scf sf
-6480 7200 m
-gs 1 -1 sc (Search Engine) col0 sh gr
-% Polyline
-n 9225 6750 m 11250 6750 l 11250 7425 l 9225 7425 l
- cp gs col0 s gr 
-/Times-Roman ff 300.00 scf sf
-9630 7020 m
-gs 1 -1 sc (Stylesheet) col0 sh gr
-/Times-Roman ff 300.00 scf sf
-9675 7335 m
-gs 1 -1 sc (Processor) col0 sh gr
-% Polyline
-n 7425 8325 m 9450 8325 l 9450 9000 l 7425 9000 l
- cp gs col0 s gr 
-/Times-Roman ff 300.00 scf sf
-8010 8910 m
-gs 1 -1 sc (Browser) col0 sh gr
-/Times-Roman ff 300.00 scf sf
-8190 8640 m
-gs 1 -1 sc (Web) col0 sh gr
-% Polyline
-n 1035 495 m 2655 495 l 2655 1440 l 1035 1440 l
- cp gs col0 s gr 
-/Times-Roman ff 300.00 scf sf
-1305 1215 m
-gs 1 -1 sc (Libraries ) col0 sh gr
-/Times-Roman ff 300.00 scf sf
-1305 900 m
-gs 1 -1 sc (Digital) col0 sh gr
-% Arc
-n 8677.4 3120.9 345.6 -122.0 -41.0 arc
-gs col0 s gr
-
-% Arc
-n 4665.2 3785.1 574.1 -165.3 -45.9 arc
-gs col0 s gr
-
-% Arc
-n 5330.3 3706.7 409.3 -130.4 -29.4 arc
-gs col0 s gr
-
-% Arc
-n 5805.2 3711.8 237.3 -119.9 3.9 arc
-gs col0 s gr
-
-% Arc
-n 6247.4 4020.9 345.6 -122.0 -41.0 arc
-gs col0 s gr
-
-% Arc
-n 4795.2 4682.2 292.7 32.2 -166.9 arc
-gs col0 s gr
-
-% Arc
-n 4229.1 4400.2 354.2 37.5 -164.4 arc
-gs col0 s gr
-
-% Arc
-n 3897.6 4027.5 277.7 92.0 -173.1 arc
-gs col0 s gr
-
-% Arc
-n 3867.5 3807.4 308.3 142.8 -38.1 arc
-gs col0 s gr
-
-% Arc
-n 8445.2 4145.1 574.1 -165.3 -45.9 arc
-gs col0 s gr
-
-% Arc
-n 10027.4 4380.9 345.6 -122.0 -41.0 arc
-gs col0 s gr
-
-% Arc
-n 10314.7 4542.9 389.0 -90.7 93.9 arc
-gs col0 s gr
-
-% Arc
-n 9725.8 4496.7 727.9 36.6 138.8 arc
-gs col0 s gr
-
-% Arc
-n 8923.0 4963.1 255.3 2.9 113.1 arc
-gs col0 s gr
-
-% Arc
-n 5287.5 4747.5 256.5 164.7 74.7 arcn
-gs col0 s gr
-
-% Arc
-n 6695.0 4199.7 432.0 -119.9 16.2 arc
-gs col0 s gr
-
-% Arc
-30.000 slw
-n 1944.7 3461.5 615.0 138.4 -30.4 arc
-gs col0 s gr
-
-% Arc
-n 5917.5 3105.0 334.5 -137.7 -42.3 arc
-gs col0 s gr
-
-% Arc
-n 6390.0 2880.0 225.0 180.0 -53.1 arc
-gs col0 s gr
-
-% Arc
-n 7738.5 2887.5 492.2 -123.1 -34.3 arc
-gs col0 s gr
-
-% Arc
-n 8280.0 2739.4 187.0 -136.2 15.7 arc
-gs col0 s gr
-
-% Arc
-n 8683.4 3159.6 394.1 -124.5 -36.5 arc
-gs col0 s gr
-
-% Arc
-n 9625.1 4007.9 189.6 -133.3 12.8 arc
-gs col0 s gr
-
-% Arc
-n 10025.0 4475.0 436.6 -119.5 -50.1 arc
-gs col0 s gr
-
-% Arc
-n 10299.4 4550.6 410.7 -89.2 76.5 arc
-gs col0 s gr
-
-% Arc
-n 9709.6 4274.2 931.1 46.5 124.7 arc
-gs col0 s gr
-
-% Arc
-n 8910.0 4905.0 301.9 26.6 116.6 arc
-gs col0 s gr
-
-% Arc
-n 8366.4 5253.2 371.9 -12.1 89.5 arc
-gs col0 s gr
-
-% Arc
-n 2701.7 4693.8 692.9 39.0 -167.6 arc
-gs col0 s gr
-
-% Arc
-n 3609.3 3409.0 1163.5 -167.1 -43.4 arc
-gs col0 s gr
-
-% Arc
-n 1915.4 4008.9 495.3 82.5 -163.7 arc
-gs col0 s gr
-
-% Arc
-n 3788.2 5271.1 566.1 38.7 -165.6 arc
-gs col0 s gr
-
-% Arc
-n 4967.0 3174.5 762.2 -132.2 -22.7 arc
-gs col0 s gr
-
-% Arc
-n 7048.8 2803.1 533.9 -168.9 -37.9 arc
-gs col0 s gr
-
-% Arc
-n 9208.1 4038.8 354.2 -79.9 -20.4 arc
-gs col0 s gr
-
-% Arc
-n 6952.5 5719.5 208.5 -13.7 122.7 arc
-gs col0 s gr
-
-% Arc
-7.500 slw
-n 6420.2 4820.1 574.1 -165.3 -45.9 arc
-gs col0 s gr
-
-% Arc
-n 7085.3 4741.7 409.3 -130.4 -29.4 arc
-gs col0 s gr
-
-% Arc
-n 8002.4 5055.9 345.6 -122.0 -41.0 arc
-gs col0 s gr
-
-% Arc
-n 5984.1 5435.2 354.2 37.5 -164.4 arc
-gs col0 s gr
-
-% Arc
-n 5652.6 5062.5 277.7 92.0 -173.1 arc
-gs col0 s gr
-
-% Arc
-n 5622.5 4842.4 308.3 142.8 -38.1 arc
-gs col0 s gr
-
-% Arc
-30.000 slw
-n 4462.5 5617.5 238.4 24.1 167.3 arc
-gs col0 s gr
-
-% Arc
-n 5124.5 5730.9 400.6 24.2 175.8 arc
-gs col0 s gr
-
-% Arc
-n 5798.9 5528.9 451.3 24.4 125.8 arc
-gs col0 s gr
-
-% Arc
-n 7740.0 5040.0 859.7 42.9 132.9 arc
-gs col0 s gr
-
-% Arc
-n 6557.9 5690.3 348.5 36.0 -176.7 arc
-gs col0 s gr
-
-% Arc
-n 8962.8 3349.6 426.2 -85.0 43.9 arc
-gs col0 s gr
-
-% Arc
-7.500 slw
-n 9180.0 4725.0 1038.9 -107.7 -85.0 arc
-gs col0 s gr
-
-% Arc
-n 8402.1 5123.6 331.9 -111.6 8.9 arc
-gs col0 s gr
-
-% Arc
-n 6086.0 3214.8 344.0 -76.7 133.3 arcn
-gs col0 s gr
-
-% Arc
-n 7362.8 4473.7 694.2 -42.5 -119.6 arcn
-gs col0 s gr
-
-% Arc
-n 7560.0 4786.9 277.0 -119.2 -12.9 arc
-gs col0 s gr
-
-% Arc
-n 3672.8 4538.4 270.6 -76.7 159.1 arcn
-gs col0 s gr
-
-% Arc
-n 3763.9 5078.6 526.4 -130.8 174.4 arcn
-gs col0 s gr
-
-% Polyline
-n 1125 7425 m 1125 7650 l 3150 7650 l 3150 6975 l
- 2925 6975 l gs col0 s gr 
-% Polyline
-n 3825 7425 m 3825 7650 l 5850 7650 l 5850 6975 l
- 5625 6975 l gs col0 s gr 
-% Polyline
-n 6525 7425 m 6525 7650 l 8550 7650 l 8550 6975 l
- 8325 6975 l gs col0 s gr 
-% Polyline
-n 9450 7425 m 9450 7650 l 11475 7650 l 11475 6975 l
- 11250 6975 l gs col0 s gr 
-% Polyline
-n 7650 9000 m 7650 9225 l 9675 9225 l 9675 8550 l
- 9450 8550 l gs col0 s gr 
-% Polyline
-n 4950 9000 m 4950 9225 l 6975 9225 l 6975 8550 l
- 6750 8550 l gs col0 s gr 
-% Polyline
-n 2250 9000 m 2250 9225 l 4275 9225 l 4275 8550 l
- 4050 8550 l gs col0 s gr 
-% Polyline
-gs  clippath
-3272 5362 m 3226 5324 l 3128 5440 l 3229 5368 l 3174 5479 l cp
-eoclip
-n 2070 6750 m
- 3240 5355 l gs col0 s gr gr
-
-% arrowhead
-n 3174 5479 m 3229 5368 l 3128 5440 l  col0 s
-% Polyline
-gs  clippath
-2068 7706 m 2043 7761 l 2181 7824 l 2085 7747 l 2206 7769 l cp
-eoclip
-n 3150 8235 m
- 2070 7740 l gs col0 s gr gr
-
-% arrowhead
-n 2206 7769 m 2085 7747 l 2181 7824 l  col0 s
-% Polyline
-gs  clippath
-4748 7764 m 4730 7706 l 4585 7752 l 4709 7745 l 4603 7809 l cp
-eoclip
-n 3150 8235 m
- 4725 7740 l gs col0 s gr gr
-
-% arrowhead
-n 4603 7809 m 4709 7745 l 4585 7752 l  col0 s
-% Polyline
-gs  clippath
-2374 7707 m 2365 7767 l 2514 7791 l 2401 7743 l 2524 7732 l cp
-eoclip
-n 5715 8280 m
- 2385 7740 l gs col0 s gr gr
-
-% arrowhead
-n 2524 7732 m 2401 7743 l 2514 7791 l  col0 s
-% Polyline
-gs  clippath
-4862 7706 m 4831 7758 l 4961 7836 l 4874 7749 l 4992 7785 l cp
-eoclip
-n 5760 8280 m
- 4860 7740 l gs col0 s gr gr
-
-% arrowhead
-n 4992 7785 m 4874 7749 l 4961 7836 l  col0 s
-% Polyline
-gs  clippath
-7493 7764 m 7475 7706 l 7330 7752 l 7454 7745 l 7348 7809 l cp
-eoclip
-n 5760 8280 m
- 7470 7740 l gs col0 s gr gr
-
-% arrowhead
-n 7348 7809 m 7454 7745 l 7330 7752 l  col0 s
-% Polyline
-gs  clippath
-10368 7722 m 10361 7663 l 10211 7682 l 10334 7697 l 10218 7741 l cp
-eoclip
-n 5760 8280 m
- 10350 7695 l gs col0 s gr gr
-
-% arrowhead
-n 10218 7741 m 10334 7697 l 10211 7682 l  col0 s
-% Polyline
-gs  clippath
-7561 7706 m 7532 7759 l 7665 7832 l 7575 7748 l 7694 7779 l cp
-eoclip
-n 8460 8235 m
- 7560 7740 l gs col0 s gr gr
-
-% arrowhead
-n 7694 7779 m 7575 7748 l 7665 7832 l  col0 s
-% Polyline
-gs  clippath
-10192 7810 m 10176 7752 l 10030 7791 l 10154 7789 l 10045 7849 l cp
-eoclip
-n 8505 8235 m
- 10170 7785 l gs col0 s gr gr
-
-% arrowhead
-n 10045 7849 m 10154 7789 l 10030 7791 l  col0 s
-% Polyline
- [60] 0 sd
-gs  clippath
-2823 2461 m 2867 2420 l 2763 2310 l 2824 2418 l 2719 2351 l cp
-eoclip
-n 1980 1530 m
- 2835 2430 l gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 2719 2351 m 2824 2418 l 2763 2310 l  col0 s
-% Polyline
-gs  clippath
-9926 5244 m 9867 5255 l 9894 5404 l 9903 5281 l 9953 5393 l cp
-eoclip
-n 10170 6750 m
- 9900 5265 l gs col0 s gr gr
-
-% arrowhead
-n 9953 5393 m 9903 5281 l 9894 5404 l  col0 s
-% Polyline
-gs  clippath
-8188 5816 m 8163 5871 l 8301 5933 l 8205 5857 l 8326 5879 l cp
-eoclip
-n 10170 6750 m
- 8190 5850 l gs col0 s gr gr
-
-% arrowhead
-n 8326 5879 m 8205 5857 l 8301 5933 l  col0 s
-% Polyline
-gs  clippath
-7456 5928 m 7396 5921 l 7379 6071 l 7423 5956 l 7439 6078 l cp
-eoclip
-n 7335 6750 m
- 7425 5940 l gs col0 s gr gr
-
-% arrowhead
-n 7439 6078 m 7423 5956 l 7379 6071 l  col0 s
-% Polyline
-gs  clippath
-5758 5996 m 5733 6051 l 5871 6114 l 5775 6037 l 5896 6059 l cp
-eoclip
-n 7335 6750 m
- 5760 6030 l gs col0 s gr gr
-
-% arrowhead
-n 5896 6059 m 5775 6037 l 5871 6114 l  col0 s
-% Polyline
-gs  clippath
-4712 5930 m 4652 5920 l 4627 6069 l 4677 5956 l 4686 6079 l cp
-eoclip
-n 4545 6750 m
- 4680 5940 l gs col0 s gr gr
-
-% arrowhead
-n 4686 6079 m 4677 5956 l 4627 6069 l  col0 s
-% Polyline
- [60] 0 sd
-gs  clippath
-7662 2288 m 7709 2325 l 7801 2204 l 7705 2282 l 7754 2168 l cp
-eoclip
-n 8280 1530 m
- 7695 2295 l gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 7754 2168 m 7705 2282 l 7801 2204 l  col0 s
-% Polyline
- [60] 0 sd
-gs  clippath
-5235 2356 m 5295 2353 l 5287 2201 l 5264 2323 l 5227 2204 l cp
-eoclip
-n 5220 1485 m
- 5265 2340 l gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 5227 2204 m 5264 2323 l 5287 2201 l  col0 s
-% Polyline
-n 7515 450 m 9855 450 l 9855 1395 l 7515 1395 l
- cp gs col0 s gr 
-% Polyline
-n 4185 450 m 6300 450 l 6300 1395 l 4185 1395 l
- cp gs col0 s gr 
-/Times-Roman ff 270.00 scf sf
-3870 3285 m
-gs 1 -1 sc ( ) col0 sh gr
-/Times-Roman ff 360.00 scf sf
-2115 3915 m
-gs 1 -1 sc (XML) col0 sh gr
-/Times-Roman ff 300.00 scf sf
-8460 4500 m
-gs 1 -1 sc (Stylesheets) col0 sh gr
-/Times-Roman ff 270.00 scf sf
-4770 4140 m
-gs 1 -1 sc (RDF) col0 sh gr
-/Times-Roman ff 270.00 scf sf
-6390 5175 m
-gs 1 -1 sc (OMDoc) col0 sh gr
-/Times-Roman ff 270.00 scf sf
-4005 5355 m
-gs 1 -1 sc (MathML) col0 sh gr
-/Times-Roman ff 270.00 scf sf
-6840 3240 m
-gs 1 -1 sc (OpenMath) col0 sh gr
-/Times-Roman ff 300.00 scf sf
-4545 855 m
-gs 1 -1 sc (Logical) col0 sh gr
-/Times-Roman ff 300.00 scf sf
-4545 1185 m
-gs 1 -1 sc (Frameworks) col0 sh gr
-/Times-Roman ff 300.00 scf sf
-7740 900 m
-gs 1 -1 sc (Computer) col0 sh gr
-/Times-Roman ff 300.00 scf sf
-7740 1215 m
-gs 1 -1 sc (Algebra Systems) col0 sh gr
-$F2psEnd
-rs
-
-%%EndDocument
- @endspecial 235 2676 a(The)23 b(fact)h(of)f(enco)s(ding)f(also)h(the)g
-(microscopic,)h(logical)f(lev)m(el)g(of)g(mathematics)g(op)s(ens)g(the)
-g(p)s(ossibilit)m(y)94 2789 y(to)i(ha)m(v)m(e)h(completely)e
-(formalised)f(subsystems)h(of)g(the)h(library)-8 b(,)24
-b(whic)m(h)f(could)h(b)s(e)g(c)m(hec)m(k)m(ed)j(automatically)94
-2902 y(b)m(y)37 b(standard)f(to)s(ols)h(for)g(the)h(automation)f(of)h
-(formal)e(reasoning)h(and)f(the)i(mec)m(hanisation)e(of)i(mathe-)94
-3015 y(matics)33 b(\(pro)s(of)f(assistan)m(ts)h(and)f(logical)g(framew)
-m(orks)h([8)q(,)g(9]\).)48 b(A)m(t)34 b(the)f(same)g(time,)g(an)m(y)g
-(of)g(these)h(to)s(ols)94 3128 y(could)29 b(b)s(e)g(used)f(as)i(an)g
-(authoring)e(system)i(for)f(do)s(cumen)m(ts)h(of)f(the)h(library)-8
-b(,)28 b(b)m(y)i(simply)d(exp)s(orting)h(their)94 3241
-y(in)m(ternal)35 b(libraries)f(in)m(to)i(XML,)h(and)f(using)f(st)m
-(ylesheets)j(to)f(transform)f(the)g(output)h(in)m(to)f(a)h(standard,)94
-3354 y(mac)m(hine-understandable)28 b(represen)m(tation,)j(suc)m(h)f
-(as)h(MathML)g(con)m(ten)m(t)h(markup)d(or)h(Op)s(enMath.)94
-3466 y(The)h(precise)g(formal)g(con)m(ten)m(t)i(can)f(still)e(b)s(e)h
-(preserv)m(ed)g(b)m(y)g(the)h(mac)m(hinery)f(of)h(Xlinks)d([17)q(].)45
-b(Moreo)m(v)m(er,)94 3579 y(st)m(ylesheets)c(can)g(b)s(e)f(also)h(used)
-e(to)j(solv)m(e)f(the)f(anno)m(ying)g(notational)h(problem)e(that)i
-(usually)d(a\017icts)94 3692 y(formal)30 b(mathematics,)h(pro)m(viding)
-d(a)j(simple)d(w)m(a)m(y)j(for)g(adding)e(user-de\014ned)f(st)m(yles)j
-(and)f(notations.)235 3805 y(So,)35 b(our)f(approac)m(h)g(leads)f(to)i
-(a)g(natural)e(in)m(tegration)h(of)g(pro)s(of)f(assistan)m(t)h(to)s
-(ols)g(and)g(the)g(W)-8 b(eb.)52 b(In)94 3918 y(this)30
-b(in)m(tegration,)g(the)h(emphasis)e(is)h(just)g(on)h(\\con)m(ten)m
-(t":)44 b(w)m(e)31 b(do)f(not)h(try)g(to)g(link)d(directly)i(the)h(sp)s
-(eci\014c)94 4031 y(applications)d(to)j(the)f(W)-8 b(eb,)31
-b(that)f(w)m(ould)f(b)s(e)g(a)i(ma)5 b(jor)30 b(mistak)m(e,)h(for)e(ob)
-m(vious)h(mo)s(dularit)m(y)e(reasons.)40 b(On)94 4144
-y(the)d(con)m(trary)-8 b(,)41 b(w)m(e)d(adopt)f(XML)h(as)f(a)h(neutral)
-e(sp)s(eci\014cation)g(language,)k(and)d(then)g(w)m(e)h(merely)e(w)m
-(ork)94 4257 y(on)29 b(XML-do)s(cumen)m(ts,)g(forgetting)g(the)g
-(underlying)d(application.)38 b(In)28 b(this)g(w)m(a)m(y)-8
-b(,)30 b(similar)c(soft)m(w)m(are)31 b(to)s(ols)94 4370
-y(can)42 b(b)s(e)f(applied)f(to)j(di\013eren)m(t)e(logical)g(dialects,)
-k(regardless)c(of)h(their)f(concrete)i(nature.)75 b(Moreo)m(v)m(er,)94
-4483 y(if)35 b(ha)m(ving)g(a)h(common)g(represen)m(tation)g(la)m(y)m
-(er)h(is)e(not)h(the)g(ultimate)f(solution)f(to)j(all)e(in)m(ter-op)s
-(erabilit)m(y)94 4596 y(problems)20 b(b)s(et)m(w)m(een)j(di\013eren)m
-(t)e(applications,)h(it)g(is)f(ho)m(w)m(ev)m(er)i(a)g(\014rst)e(and)g
-(essen)m(tial)h(step)g(in)f(this)f(direction.)94 4708
-y(Finally)-8 b(,)40 b(this)e(\\standardisation")g(pro)s(cess)h(should)e
-(naturally)h(lead)g(to)i(a)g(substan)m(tial)e(simpli\014cation)94
-4821 y(and)d(re-organisation)h(of)g(the)g(curren)m(t,)i(\\monolithic")c
-(arc)m(hitecture)j(of)f(logical)f(framew)m(orks.)58 b(All)34
-b(the)94 4934 y(man)m(y)g(di\013eren)m(t)f(and)g(often)i(lo)s(osely)e
-(connected)h(functionalities)e(of)i(these)g(complex)f(programs)h(\(pro)
-s(of)94 5047 y(c)m(hec)m(king,)47 b(editing,)f(searc)m(h)e(and)e
-(consulting,)j(program)e(extraction,)48 b(and)42 b(so)i(on\))f(could)g
-(b)s(e)f(clearly)94 5160 y(split)29 b(in)h(more)h(or)g(less)g
-(autonomous)g(tasks,)h(and)f(could)f(b)s(e)g(dev)m(elop)s(ed)h(b)m(y)g
-(di\013eren)m(t)f(teams,)j(in)c(totally)94 5273 y(di\013eren)m(t)g
-(languages.)41 b(This)28 b(is)h(the)h(new,)g(\\con)m(ten)m(t-based")j
-(arc)m(hitectural)d(design)f(of)h(future)f(systems.)p
-eop
-%%Page: 7 7
-7 6 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2578
-b Fl(7)94 171 y Fj(3)135 b(P)l(articipan)l(t)46 b(list)p
-94 386 3746 4 v 92 499 4 113 v 144 465 a Fl(P)m(art.)p
-393 499 V 100 w(P)m(art.)p 694 499 V 101 w(P)m(articipan)m(t)p
-1711 499 V 571 w(P)m(articipan)m(t)p 2256 499 V 100 w(Coun)m(try)p
-2834 499 V 248 w(Date)32 b(en)m(ter)p 3354 499 V 101
-w(Date)g(exit)p 3838 499 V 92 612 V 144 578 a(Role)p
-393 612 V 122 w(no.)p 694 612 V 180 w(name)p 1711 612
-V 805 w(short)e(name)p 2256 612 V 2834 612 V 678 w(Pro)5
-b(ject)p 3354 612 V 230 w(Pro)g(ject)p 3838 612 V 94
-615 3746 4 v 92 728 4 113 v 144 694 a(C)p 393 728 V 234
-w(1)p 694 728 V 256 w(Univ)m(ersit\022)-45 b(a)30 b(degli)p
-1711 728 V 391 w(UNIBO)p 2256 728 V 242 w(Italy)p 2834
-728 V 390 w(Start)p 3354 728 V 319 w(End)p 3838 728 V
-92 841 V 393 841 V 694 841 V 745 807 a(Studi)e(di)i(Bologna)p
-1711 841 V 2256 841 V 2834 841 V 1470 w(of)h(pro)5 b(ject)p
-3354 841 V 137 w(of)30 b(pro)5 b(ject)p 3838 841 V 94
-844 3746 4 v 92 957 4 113 v 144 923 a(P)p 393 957 V 238
-w(2)p 694 957 V 256 w(Institut)29 b(National)i(de)p 1711
-957 V 223 w(INRIA)p 2256 957 V 277 w(F)-8 b(rance)p 2834
-957 V 314 w(Start)p 3354 957 V 319 w(End)p 3838 957 V
-92 1070 V 393 1070 V 694 1070 V 745 1036 a(Rec)m(herc)m(he)32
-b(en)e(Informa-)p 1711 1070 V 2256 1070 V 2834 1070 V
-1244 w(of)h(pro)5 b(ject)p 3354 1070 V 137 w(of)30 b(pro)5
-b(ject)p 3838 1070 V 92 1183 V 393 1183 V 694 1183 V
-745 1149 a(tique)30 b(et)h(Automatique)p 1711 1183 V
-2256 1183 V 2834 1183 V 3354 1183 V 3838 1183 V 94 1186
-3746 4 v 92 1299 4 113 v 144 1265 a(P)p 393 1299 V 238
-w(3)p 694 1299 V 256 w(German)f(Cen)m(ter)h(for)p 1711
-1299 V 263 w(DFKI)p 2256 1299 V 314 w(German)m(y)p 2834
-1299 V 213 w(Start)p 3354 1299 V 319 w(End)p 3838 1299
-V 92 1412 V 393 1412 V 694 1412 V 745 1378 a(Arti\014cial)e(In)m
-(telligence)p 1711 1412 V 2256 1412 V 2834 1412 V 1308
-w(of)i(pro)5 b(ject)p 3354 1412 V 137 w(of)30 b(pro)5
-b(ject)p 3838 1412 V 94 1415 3746 4 v 92 1528 4 113 v
-144 1494 a(P)p 393 1528 V 238 w(4)p 694 1528 V 256 w(Katholiek)m(e)31
-b(Univ)m(ersiteit)p 1711 1528 V 98 w(KUN)p 2256 1528
-V 339 w(Netherlands)p 2834 1528 V 98 w(Start)p 3354 1528
-V 319 w(End)p 3838 1528 V 92 1641 V 393 1641 V 694 1641
-V 745 1607 a(Nijmegen)p 1711 1641 V 2256 1641 V 2834
-1641 V 1766 w(of)g(pro)5 b(ject)p 3354 1641 V 137 w(of)30
-b(pro)5 b(ject)p 3838 1641 V 94 1644 3746 4 v 92 1757
-4 113 v 144 1723 a(P)p 393 1757 V 238 w(5)p 694 1757
-V 256 w(Max-Plank-Gesellshaft)p 1711 1757 V 115 w(MPG)p
-2256 1757 V 330 w(German)m(y)p 2834 1757 V 213 w(Start)p
-3354 1757 V 319 w(End)p 3838 1757 V 92 1870 V 393 1870
-V 694 1870 V 745 1836 a(zur)30 b(F)-8 b(o)s(erderung)30
-b(der)p 1711 1870 V 2256 1870 V 2834 1870 V 1377 w(of)h(pro)5
-b(ject)p 3354 1870 V 137 w(of)30 b(pro)5 b(ject)p 3838
-1870 V 92 1983 V 393 1983 V 694 1983 V 745 1949 a(Wissenshaften)30
-b(e.V.)p 1711 1983 V 2256 1983 V 2834 1983 V 3354 1983
-V 3838 1983 V 94 1986 3746 4 v 92 2099 4 113 v 144 2066
-a(P)p 393 2099 V 238 w(6)p 694 2099 V 256 w(T)-8 b(rusted)30
-b(Logic)g(S.A.)p 1711 2099 V 268 w(T)-8 b(rusted)p 2256
-2099 V 239 w(F)g(rance)p 2834 2099 V 314 w(Start)p 3354
-2099 V 319 w(End)p 3838 2099 V 92 2212 V 393 2212 V 694
-2212 V 1711 2212 V 1762 2178 a(Logic)p 2256 2212 V 2834
-2212 V 910 w(of)31 b(pro)5 b(ject)p 3354 2212 V 137 w(of)30
-b(pro)5 b(ject)p 3838 2212 V 94 2216 3746 4 v 94 2451
-a Fj(4)135 b(Con)l(tribution)46 b(to)f(programme/k)l(ey)i(action)e(ob)7
-b(jectiv)l(es)94 2654 y Fl(The)25 b(Pro)5 b(ject)27 b(con)m(tributes)e
-(to)i(build)c(a)j(user)f(friendly)e(information)h(so)s(ciet)m(y)-8
-b(,)28 b(and)e(in)e(particular)g(it)i(meets)94 2766 y(the)31
-b(follo)m(wing)d(general)j(ob)5 b(jectiv)m(es)31 b(of)g(this)e
-(program:)205 2954 y(1.)46 b(\(m)m(ultimedia)38 b(con)m(ten)m(t\))k
-(con\014rming)d(Europ)s(e)f(as)i(a)h(leading)d(force)j(in)d(this)h
-(\014eld,)i(realizing)d(the)321 3067 y(p)s(oten)m(tial)30
-b(of)h(its)e(creativit)m(y)i(and)f(culture;)205 3255
-y(2.)46 b(\(essen)m(tial)35 b(tec)m(hnologies)g(and)f(infrastructure\))
-f(enabling)g(tec)m(hnologies)i(whic)m(h)e(are)i(the)g(founda-)321
-3368 y(tions)24 b(of)g(the)g(information)f(so)s(ciet)m(y)-8
-b(,)27 b(driving)21 b(their)j(dev)m(elopmen)m(t,)i(enhancing)d(their)g
-(applicabilit)m(y)-8 b(,)321 3480 y(and)30 b(accelerating)h(their)f
-(tak)m(e)i(up)d(in)g(Europ)s(e.)94 3668 y(As)35 b(a)h(matter)g(of)f
-(fact,)j(the)d(pro)5 b(ject)36 b(is)e(based)h(in)f(an)h(essen)m(tial)g
-(w)m(a)m(y)h(on)f(the)g(use)g(of)g(most)h(part)f(of)g(the)94
-3781 y(recen)m(t)24 b(recommendations)f(of)h(the)f(W)-8
-b(orld)23 b(Wide)g(W)-8 b(eb)24 b(Organization)e(for)h(W)-8
-b(eb)24 b(publishing)19 b(and)k(h)m(uman-)94 3894 y(computer)39
-b(in)m(teraction)f(\(XML,)i(XSL,)e(XLL,)h(Namespaces,)j(MathML,)e(RDF,)
-f(etc.\).)68 b(In)38 b(particular,)94 4007 y(w)m(e)i(aim)f(to)h(pro)m
-(v)m(e)g(ho)m(w)g(all)e(these)i(sp)s(eci\014cations)f(naturally)e
-(\014t)j(together,)j(when)c(trying)f(to)j(build)36 b(a)94
-4120 y(full,)42 b(in)m(tegrated)g(description)d(\(comprising)h(con)m
-(ten)m(t,)46 b(notation,)f(metadata,)g(etc.\))75 b(of)42
-b(a)f(giv)m(en)h(\014eld)94 4233 y(of)e(kno)m(wledge.)70
-b(A)m(t)41 b(our)e(kno)m(wledge,)k(the)d(pro)5 b(ject)41
-b(is)e(the)h(\014rst)f(of)h(the)g(kind,)h(and)f(could)f(b)s(ecome)h(a)
-94 4346 y(paradigmatic)30 b(example)g(in)f(the)h(in)m(tegrated)i(use)e
-(of)g(these)h(tec)m(hnologies.)235 4458 y(The)23 b(pro)5
-b(ject)24 b(also)g(addresses)e(most)i(of)g(the)g(issues)e(of)i(the)f(m)
-m(ultimedia)f(con)m(ten)m(t)j(k)m(ey)f(action,)i(namely:)94
-4571 y(electronic)44 b(publishing,)f(digital)f(heritage)i(and)g
-(cultural)e(con)m(ten)m(t,)49 b(education,)f(information)42
-b(access,)94 4684 y(\014ltering)30 b(and)i(handling.)42
-b(Actually)-8 b(,)33 b(all)e(these)h(asp)s(ects)g(are)g(and)g(m)m(ust)g
-(b)s(e)f(co)m(v)m(ered)j(in)c(our)i(pro)5 b(ject,)33
-b(in)94 4797 y(order)i(to)h(reac)m(h)h(our)e(ob)5 b(jectiv)m(es.)57
-b(In)35 b(particular,)h(the)g(educational)f(p)s(oten)m(tial)g(of)g(our)
-h(system)f(should)94 4910 y(not)44 b(b)s(e)g(neglected)g(either:)68
-b(it)43 b(could)g(b)s(ecome)i(an)e(essen)m(tial)h(to)s(ol)g(for)g(a)g
-(wider)f(and)g(more)h(friendly)94 5023 y(dissemination)22
-b(of)j(mathematical)f(kno)m(wledge.)39 b(F)-8 b(or)25
-b(instance,)h(if)e(supp)s(orted)e(b)m(y)j(a)f(suitable)g(tec)m(hnology)
--8 b(,)94 5136 y(pro)m(ving)21 b(theorems)h(in)f(a)h(pro)s(of)f
-(assistan)m(t)h(could)f(b)s(e)h(as)g(am)m(using)f(as)h(pla)m(ying)f(a)h
-(video)f(game.)39 b(W)-8 b(e)23 b(imagine)94 5249 y(bunc)m(hes)28
-b(of)i(y)m(oung)f(researc)m(hers)h(con)m(tributing)e(to)i(the)f(free)h
-(dev)m(elopmen)m(t)f(of)h(the)f(library)e(for)i(the)g(mere)p
-eop
-%%Page: 8 8
-8 7 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2578
-b Fl(8)94 171 y(grati\014cation)33 b(of)f(seeing)h(their)f(name)g(as)h
-(actual)g(editor)f(\(or,)i(wh)m(y)e(not,)i(original)d(author\))i(of)g
-(a)g(sp)s(eci\014c)94 284 y(fragmen)m(t.)235 397 y(Finally)-8
-b(,)32 b(the)h(pro)5 b(ject)33 b(is)f(particularly)e(related)j(to)g
-(the)g(sp)s(eci\014c)f(k)m(ey-action)i(I)s(I)s(I.2.3)f(\(access)h(to)g
-(sci-)94 510 y(en)m(ti\014c)f(and)f(cultural)f(heritage\).)50
-b(In)32 b(fact,)j(the)e(aim)f(of)h(our)g(system)g(is)f(exactly)i(to)f
-(impro)m(v)m(e)g(access)h(b)m(y)94 623 y(studen)m(ts)d(and)h
-(professionals)e(to)i(the)g(fast-gro)m(wing)g(mathematical)g(kno)m
-(wledge)g(base,)h(allo)m(wing)d(math-)94 736 y(ematical)38
-b(do)s(cumen)m(ts)f(to)h(b)s(e)e(retriev)m(ed,)j(serv)m(ed,)h(and)c
-(pro)s(cessed)h(directly)f(on)h(the)h(W)-8 b(eb.)62 b(Moreo)m(v)m(er,)
-94 849 y(our)34 b(system)h(is)e(mean)m(t)j(to)f(b)s(e)f(compatible)g
-(with)f(most)i(of)f(the)h(existing)e(to)s(ols)i(for)f(the)h(mec)m
-(hanisation)94 962 y(of)g(mathematics)g(and)f(the)g(automation)h(of)g
-(formal)f(reasoning)f(\(pro)s(of)i(assistan)m(ts)f(and)g(logical)g
-(frame-)94 1075 y(w)m(orks\).)48 b(The)33 b(p)s(ossibilit)m(y)c(to)k
-(build)d(coheren)m(t)k(sub-libraries)29 b(of)k(formal)f(mathematical)h
-(dev)m(elopmen)m(ts)94 1187 y(w)m(ould)28 b(pro)m(vide)g(an)h(essen)m
-(tial)f(\(and)h(unique\))e(added)i(v)-5 b(alue)28 b(to)i(the)f(library)
-e(itself,)h(making)g(of)h(Europ)s(e)f(a)94 1300 y(leader)i(in)f(this)g
-(area.)235 1413 y(Ma)m(yb)s(e,)36 b(ha)m(ving)d(the)h(p)s(ossibilit)m
-(y)d(to)j(pro)s(cess,)h(analyse)e(and)h(elab)s(orate)g(mathematical)g
-(structures)94 1526 y(as)24 b(data,)h(the)f(time)f(will)e(come)j(when)e
-(w)m(e)i(shall)e(\014nally)f(b)s(e)i(able)f(to)j(start)e(a)h
-(completely)f(new)g(and)g(exciting)94 1639 y(\014eld)29
-b(of)h(researc)m(h)h(on)f(mathematics:)41 b(namely)30
-b(a)g(scien)m(ti\014c,)g(empirical)e(study)h(on)h(the)h
-Fd(r)-5 b(e)g(al)31 b Fl(structure)f(of)94 1752 y(mathematical)h(en)m
-(tities,)f(and)g(the)g(`w)m(a)m(y)i(of)f(thinking')d(of)i
-(mathematicians.)94 2038 y Fj(5)135 b(Inno)l(v)-7 b(ation)94
-2241 y Fl(The)32 b(main)f(tec)m(hnical)h(no)m(v)m(elt)m(y)h(of)g(the)f
-(pro)5 b(ject)33 b(is)e(in)g(its)g(synergy)h(of)g(di\013eren)m(t)g
-(scien)m(ti\014c)f(comm)m(unities)94 2354 y(and)f(researc)m(h)h
-(topics:)40 b(digital)29 b(libraries,)f(W)-8 b(eb)31
-b(publishing,)26 b(logical)k(en)m(vironmen)m(ts.)1018
-3661 y @beginspecial 0 @llx 0 @lly 227 @urx 146 @ury
-2218 @rwi @setspecial
-%%BeginDocument: logo.eps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: logo.eps
-%%Creator: fig2dev Version 3.2 Patchlevel 3a
-%%CreationDate: Tue Nov  7 12:09:01 2000
-%%For: asperti@marcello (Andrea Asperti, docente, 2094505)
-%%BoundingBox: 0 0 227 146
-%%Magnification: 0.5000
-%%EndComments
-/MyAppDict 100 dict dup begin def
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
-newpath 0 146 moveto 0 0 lineto 227 0 lineto 227 146 lineto closepath clip newpath
--17.0 235.0 translate
-1 -1 scale
-
-% This junk string is used by the show operators
-/PATsstr 1 string def
-/PATawidthshow {       % cx cy cchar rx ry string
-  % Loop over each character in the string
-  {  % cx cy cchar rx ry char
-    % Show the character
-    dup                                % cx cy cchar rx ry char char
-    PATsstr dup 0 4 -1 roll put        % cx cy cchar rx ry char (char)
-    false charpath             % cx cy cchar rx ry char
-    /clip load PATdraw
-    % Move past the character (charpath modified the
-    % current point)
-    currentpoint                       % cx cy cchar rx ry char x y
-    newpath
-    moveto                     % cx cy cchar rx ry char
-    % Reposition by cx,cy if the character in the string is cchar
-    3 index eq {                       % cx cy cchar rx ry
-      4 index 4 index rmoveto
-    } if
-    % Reposition all characters by rx ry
-    2 copy rmoveto             % cx cy cchar rx ry
-  } forall
-  pop pop pop pop pop          % -
-  currentpoint
-  newpath
-  moveto
-} bind def
-/PATcg {
-  7 dict dup begin
-    /lw currentlinewidth def
-    /lc currentlinecap def
-    /lj currentlinejoin def
-    /ml currentmiterlimit def
-    /ds [ currentdash ] def
-    /cc [ currentrgbcolor ] def
-    /cm matrix currentmatrix def
-  end
-} bind def
-% PATdraw - calculates the boundaries of the object and
-% fills it with the current pattern
-/PATdraw {                     % proc
-  save exch
-    PATpcalc                   % proc nw nh px py
-    5 -1 roll exec             % nw nh px py
-    newpath
-    PATfill                    % -
-  restore
-} bind def
-% PATfill - performs the tiling for the shape
-/PATfill { % nw nh px py PATfill -
-  PATDict /CurrentPattern get dup begin
-    setfont
-    % Set the coordinate system to Pattern Space
-    PatternGState PATsg
-    % Set the color for uncolored pattezns
-    PaintType 2 eq { PATDict /PColor get PATsc } if
-    % Create the string for showing
-    3 index string             % nw nh px py str
-    % Loop for each of the pattern sources
-    0 1 Multi 1 sub {          % nw nh px py str source
-       % Move to the starting location
-       3 index 3 index         % nw nh px py str source px py
-       moveto                  % nw nh px py str source
-       % For multiple sources, set the appropriate color
-       Multi 1 ne { dup PC exch get PATsc } if
-       % Set the appropriate string for the source
-       0 1 7 index 1 sub { 2 index exch 2 index put } for pop
-       % Loop over the number of vertical cells
-       3 index                 % nw nh px py str nh
-       {                       % nw nh px py str
-         currentpoint          % nw nh px py str cx cy
-         2 index show          % nw nh px py str cx cy
-         YStep add moveto      % nw nh px py str
-       } repeat                % nw nh px py str
-    } for
-    5 { pop } repeat
-  end
-} bind def
-
-% PATkshow - kshow with the current pattezn
-/PATkshow {                    % proc string
-  exch bind                    % string proc
-  1 index 0 get                        % string proc char
-  % Loop over all but the last character in the string
-  0 1 4 index length 2 sub {
-                               % string proc char idx
-    % Find the n+1th character in the string
-    3 index exch 1 add get     % string proe char char+1
-    exch 2 copy                        % strinq proc char+1 char char+1 char
-    % Now show the nth character
-    PATsstr dup 0 4 -1 roll put        % string proc chr+1 chr chr+1 (chr)
-    false charpath             % string proc char+1 char char+1
-    /clip load PATdraw
-    % Move past the character (charpath modified the current point)
-    currentpoint newpath moveto
-    % Execute the user proc (should consume char and char+1)
-    mark 3 1 roll              % string proc char+1 mark char char+1
-    4 index exec               % string proc char+1 mark...
-    cleartomark                        % string proc char+1
-  } for
-  % Now display the last character
-  PATsstr dup 0 4 -1 roll put  % string proc (char+1)
-  false charpath               % string proc
-  /clip load PATdraw
-  neewath
-  pop pop                      % -
-} bind def
-% PATmp - the makepattern equivalent
-/PATmp {                       % patdict patmtx PATmp patinstance
-  exch dup length 7 add                % We will add 6 new entries plus 1 FID
-  dict copy                    % Create a new dictionary
-  begin
-    % Matrix to install when painting the pattern
-    TilingType PATtcalc
-    /PatternGState PATcg def
-    PatternGState /cm 3 -1 roll put
-    % Check for multi pattern sources (Level 1 fast color patterns)
-    currentdict /Multi known not { /Multi 1 def } if
-    % Font dictionary definitions
-    /FontType 3 def
-    % Create a dummy encoding vector
-    /Encoding 256 array def
-    3 string 0 1 255 {
-      Encoding exch dup 3 index cvs cvn put } for pop
-    /FontMatrix matrix def
-    /FontBBox BBox def
-    /BuildChar {
-       mark 3 1 roll           % mark dict char
-       exch begin
-       Multi 1 ne {PaintData exch get}{pop} ifelse  % mark [paintdata]
-         PaintType 2 eq Multi 1 ne or
-         { XStep 0 FontBBox aload pop setcachedevice }
-         { XStep 0 setcharwidth } ifelse
-         currentdict           % mark [paintdata] dict
-         /PaintProc load       % mark [paintdata] dict paintproc
-       end
-       gsave
-         false PATredef exec true PATredef
-       grestore
-       cleartomark             % -
-    } bind def
-    currentdict
-  end                          % newdict
-  /foo exch                    % /foo newlict
-  definefont                   % newfont
-} bind def
-% PATpcalc - calculates the starting point and width/height
-% of the tile fill for the shape
-/PATpcalc {    % - PATpcalc nw nh px py
-  PATDict /CurrentPattern get begin
-    gsave
-       % Set up the coordinate system to Pattern Space
-       % and lock down pattern
-       PatternGState /cm get setmatrix
-       BBox aload pop pop pop translate
-       % Determine the bounding box of the shape
-       pathbbox                        % llx lly urx ury
-    grestore
-    % Determine (nw, nh) the # of cells to paint width and height
-    PatHeight div ceiling              % llx lly urx qh
-    4 1 roll                           % qh llx lly urx
-    PatWidth div ceiling               % qh llx lly qw
-    4 1 roll                           % qw qh llx lly
-    PatHeight div floor                        % qw qh llx ph
-    4 1 roll                           % ph qw qh llx
-    PatWidth div floor                 % ph qw qh pw
-    4 1 roll                           % pw ph qw qh
-    2 index sub cvi abs                        % pw ph qs qh-ph
-    exch 3 index sub cvi abs exch      % pw ph nw=qw-pw nh=qh-ph
-    % Determine the starting point of the pattern fill
-    %(px, py)
-    4 2 roll                           % nw nh pw ph
-    PatHeight mul                      % nw nh pw py
-    exch                               % nw nh py pw
-    PatWidth mul exch                  % nw nh px py
-  end
-} bind def
-
-% Save the original routines so that we can use them later on
-/oldfill       /fill load def
-/oldeofill     /eofill load def
-/oldstroke     /stroke load def
-/oldshow       /show load def
-/oldashow      /ashow load def
-/oldwidthshow  /widthshow load def
-/oldawidthshow /awidthshow load def
-/oldkshow      /kshow load def
-
-% These defs are necessary so that subsequent procs don't bind in
-% the originals
-/fill     { oldfill } bind def
-/eofill           { oldeofill } bind def
-/stroke           { oldstroke } bind def
-/show     { oldshow } bind def
-/ashow    { oldashow } bind def
-/widthshow { oldwidthshow } bind def
-/awidthshow { oldawidthshow } bind def
-/kshow            { oldkshow } bind def
-/PATredef {
-  MyAppDict begin
-    {
-    /fill { /clip load PATdraw newpath } bind def
-    /eofill { /eoclip load PATdraw newpath } bind def
-    /stroke { PATstroke } bind def
-    /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def
-    /ashow { 0 0 null 6 3 roll PATawidthshow }
-    bind def
-    /widthshow { 0 0 3 -1 roll PATawidthshow }
-    bind def
-    /awidthshow { PATawidthshow } bind def
-    /kshow { PATkshow } bind def
-  } {
-    /fill   { oldfill } bind def
-    /eofill { oldeofill } bind def
-    /stroke { oldstroke } bind def
-    /show   { oldshow } bind def
-    /ashow  { oldashow } bind def
-    /widthshow { oldwidthshow } bind def
-    /awidthshow { oldawidthshow } bind def
-    /kshow  { oldkshow } bind def
-    } ifelse
-  end
-} bind def
-false PATredef
-% Conditionally define setcmykcolor if not available
-/setcmykcolor where { pop } {
-  /setcmykcolor {
-    1 sub 4 1 roll
-    3 {
-       3 index add neg dup 0 lt { pop 0 } if 3 1 roll
-    } repeat
-    setrgbcolor - pop
-  } bind def
-} ifelse
-/PATsc {               % colorarray
-  aload length         % c1 ... cn length
-    dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor
-  } ifelse } ifelse
-} bind def
-/PATsg {               % dict
-  begin
-    lw setlinewidth
-    lc setlinecap
-    lj setlinejoin
-    ml setmiterlimit
-    ds aload pop setdash
-    cc aload pop setrgbcolor
-    cm setmatrix
-  end
-} bind def
-
-/PATDict 3 dict def
-/PATsp {
-  true PATredef
-  PATDict begin
-    /CurrentPattern exch def
-    % If it's an uncolored pattern, save the color
-    CurrentPattern /PaintType get 2 eq {
-      /PColor exch def
-    } if
-    /CColor [ currentrgbcolor ] def
-  end
-} bind def
-% PATstroke - stroke with the current pattern
-/PATstroke {
-  countdictstack
-  save
-  mark
-  {
-    currentpoint strokepath moveto
-    PATpcalc                           % proc nw nh px py
-    clip newpath PATfill
-    } stopped {
-       (*** PATstroke Warning: Path is too complex, stroking
-         with gray) =
-    cleartomark
-    restore
-    countdictstack exch sub dup 0 gt
-       { { end } repeat } { pop } ifelse
-    gsave 0.5 setgray oldstroke grestore
-  } { pop restore pop } ifelse
-  newpath
-} bind def
-/PATtcalc {            % modmtx tilingtype PATtcalc tilematrix
-  % Note: tiling types 2 and 3 are not supported
-  gsave
-    exch concat                                        % tilingtype
-    matrix currentmatrix exch                  % cmtx tilingtype
-    % Tiling type 1 and 3: constant spacing
-    2 ne {
-       % Distort the pattern so that it occupies
-       % an integral number of device pixels
-       dup 4 get exch dup 5 get exch           % tx ty cmtx
-       XStep 0 dtransform
-       round exch round exch                   % tx ty cmtx dx.x dx.y
-       XStep div exch XStep div exch           % tx ty cmtx a b
-       0 YStep dtransform
-       round exch round exch                   % tx ty cmtx a b dy.x dy.y
-       YStep div exch YStep div exch           % tx ty cmtx a b c d
-       7 -3 roll astore                        % { a b c d tx ty }
-    } if
-  grestore
-} bind def
-/PATusp {
-  false PATredef
-  PATDict begin
-    CColor PATsc
-  end
-} bind def
-
-% this is the pattern fill program from the Second edition Reference Manual
-% with changes to call the above pattern fill
-% left30
-11 dict begin
-/PaintType 1 def
-/PatternType 1 def
-/TilingType 1 def
-/BBox [0 0 1 1] def
-/XStep 1 def
-/YStep 1 def
-/PatWidth 1 def
-/PatHeight 1 def
-/Multi 2 def
-/PaintData [
-  { clippath } bind
-  { 32 16 true [ 32 0 0 -16 0 16 ]
-       {<c000c000300030000c000c000300030000c000c000300030
-       000c000c00030003c000c000300030000c000c0003000300
-       00c000c000300030000c000c00030003>}
-     imagemask } bind
-] def
-/PaintProc {
-       pop
-       exec fill
-} def
-currentdict
-end
-/P1 exch def
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Times-Roman /Times-Roman-iso isovec ReEncode
- /DrawEllipse {
-       /endangle exch def
-       /startangle exch def
-       /yrad exch def
-       /xrad exch def
-       /y exch def
-       /x exch def
-       /savematrix mtrx currentmatrix def
-       x y tr xrad yrad sc 0 0 1 startangle endangle arc
-       closepath
-       savematrix setmatrix
-       } def
-
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-%%Page: 1 1
-10 setmiterlimit
- 0.03000 0.03000 sc
-7.500 slw
-% Ellipse
-n 5325 5625 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P1 [16 0 0 -8 350.00 370.00]  PATmp PATsp ef gr PATusp gs col0 s gr
-
-% Ellipse
-n 3525 4800 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P1 [16 0 0 -8 230.00 315.00]  PATmp PATsp ef gr PATusp gs col0 s gr
-
-% Ellipse
-n 4650 4800 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P1 [16 0 0 -8 305.00 315.00]  PATmp PATsp ef gr PATusp gs col0 s gr
-
-% Ellipse
-n 3300 5850 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P1 [16 0 0 -8 215.00 385.00]  PATmp PATsp ef gr PATusp gs col0 s gr
-
-% Ellipse
-n 4350 4425 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P1 [16 0 0 -8 285.00 290.00]  PATmp PATsp ef gr PATusp gs col0 s gr
-
-% Ellipse
-n 3150 6900 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P1 [16 0 0 -8 205.00 455.00]  PATmp PATsp ef gr PATusp gs col0 s gr
-
-% Ellipse
-n 2250 6975 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P1 [16 0 0 -8 145.00 460.00]  PATmp PATsp ef gr PATusp gs col0 s gr
-
-% Polyline
-n 5400 5550 m 5925 5025 l
- 7575 5025 l gs col0 s gr 
-% Polyline
-n 3450 4725 m 2550 4425 l
- 1275 4425 l gs col0 s gr 
-% Polyline
-n 4725 4725 m 5625 4425 l
- 6900 4425 l gs col0 s gr 
-% Polyline
-n 3300 5850 m 2775 5325 l
- 1125 5325 l gs col0 s gr 
-% Polyline
-n 4425 4425 m 6225 3750 l
- 8100 3750 l gs col0 s gr 
-% Polyline
-n 3150 6975 m 3675 7800 l
- 4575 7800 l gs col0 s gr 
-% Polyline
-n 2250 7050 m 1950 7725 l
- 600 7725 l gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
-5850 4950 m
-gs 1 -1 sc (MathML Presentation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-1500 4350 m
-gs 1 -1 sc (OpenMath) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-5550 4350 m
-gs 1 -1 sc (MathML-Content) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-1275 5250 m
-gs 1 -1 sc (OMDoc) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-6225 3675 m
-gs 1 -1 sc (Specific XML-Dialects) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-3900 7725 m
-gs 1 -1 sc (RDF) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-825 7650 m
-gs 1 -1 sc (Dublin-Core) col0 sh gr
-% Rotated Ellipse
-gs
-3225 6000 tr
--120.000 rot
-n 0 0 1050 1650 0 360 DrawEllipse 120.000 rot
-gs col0 s gr
-gr
-
-% Rotated Ellipse
-gs
-4800 6000 tr
--240.001 rot
-n 0 0 1050 1650 0 360 DrawEllipse 240.001 rot
-gs col0 s gr
-gr
-
-% Ellipse
-n 4050 4650 1050 1650 0 360 DrawEllipse gs col0 s gr
-
-/Times-Roman-iso ff 270.00 scf sf
-2175 6150 m
-gs 1 -1 sc (Digital) col0 sh gr
-/Times-Roman-iso ff 270.00 scf sf
-4800 6525 m
-gs 1 -1 sc (Publishing) col0 sh gr
-/Times-Roman-iso ff 270.00 scf sf
-4800 6150 m
-gs 1 -1 sc (Electronic) col0 sh gr
-/Times-Roman-iso ff 270.00 scf sf
-2100 6525 m
-gs 1 -1 sc (Libraries) col0 sh gr
-/Times-Roman-iso ff 270.00 scf sf
-3450 5625 m
-gs 1 -1 sc (MOWGLI) col0 sh gr
-/Times-Roman-iso ff 270.00 scf sf
-3600 3750 m
-gs 1 -1 sc (Logical) col0 sh gr
-/Times-Roman-iso ff 270.00 scf sf
-3225 4125 m
-gs 1 -1 sc (Environments) col0 sh gr
-$F2psEnd
-rs
-end
-
-%%EndDocument
- @endspecial 235 3856 a(F)-8 b(rom)37 b(the)g(p)s(oin)m(t)e(of)i(view)e
-(of)i(W)-8 b(eb)37 b(publishing,)c(our)j(pro)5 b(ject)37
-b(is)f(the)g(\014rst)g(attempt)h(to)g(pro)m(vide)f(a)94
-3968 y(comprehensiv)m(e)22 b(description,)h(from)g(con)m(ten)m(t)i(to)e
-(metadata,)k(of)c(a)g(giv)m(en)g(\014eld)f(of)h(kno)m(wledge)g(\(in)f
-(our)g(case)94 4081 y(mathematics\),)38 b(in)33 b(order)i(to)h(enhance)
-f(its)g(accessibilit)m(y)-8 b(,)36 b(exc)m(hange)h(and)d(elab)s
-(oration)h(via)f(the)i(W)-8 b(orld)94 4194 y(Wide)32
-b(W)-8 b(eb.)47 b(T)-8 b(o)33 b(this)e(aim,)h(w)m(e)h(shall)e(put)g(to)
-i(use)f(most)h(of)g(the)f(tec)m(hnologies)h(recen)m(tly)g(in)m(tro)s
-(duced)d(b)m(y)94 4307 y(the)h(W3C:)h(XML,)g(DOM,)g(XSL,)f(XLL,)g
-(Namespaces,)i(MathML,)f(RDF,)g(etc.)45 b(F)-8 b(rom)31
-b(this)g(resp)s(ect,)g(the)94 4420 y(pro)5 b(ject)28
-b(is)e(\014rst)h(of)h(all)e(a)i(complex)f(test)h(for)g(all)e(these)i
-(tec)m(hnologies,)h(and)e(should)e(hop)s(efully)g(b)s(ecome)i(an)94
-4533 y(example)22 b(of)h(`b)s(est)g(practice')g(in)e(their)h(use.)38
-b(Note)24 b(that)f(the)g(\014nal)e(arc)m(hitecture)j(is)d(lik)m(ely)g
-(to)j(b)s(e)e(extendible)94 4646 y(to)36 b(other)f(\014elds)e(of)j
-(structured)e(information:)48 b(the)35 b(emphasis)f(on)g(mathematics)i
-(is)e(motiv)-5 b(ated)35 b(b)m(y)g(the)94 4759 y(fact)c(that,)g(due)f
-(to)h(its)e(complex)h(in)m(terpla)m(y)g(b)s(et)m(w)m(een)h(con)m(ten)m
-(t,)h(structure)e(and)f(notation,)i(it)f(pro)m(vides)f(a)94
-4872 y(ma)5 b(jor)29 b(case)i(study)d(for)h(W)-8 b(eb-based)30
-b(information)e(systems)h(\(it)g(is)g(not)g(a)h(case)g(that)g(MathML)g
-(has)f(b)s(een)94 4985 y(one)35 b(of)g(few)f(instances)h(of)g(XML)g
-(completely)f(dev)m(elop)s(ed)g(under)f(the)i(aegis)g(of)g(the)g(W)-8
-b(orld)34 b(Wide)h(W)-8 b(eb)94 5098 y(Consortium\).)235
-5210 y(F)g(rom)27 b(the)g(p)s(oin)m(t)e(of)h(view)g(of)h(digital)d
-(libraries,)h(our)h(w)m(ork)g(is)g(aimed)f(at)i(exploiting)e(all)g(the)
-i(p)s(oten)m(tial)94 5323 y(functionalities)36 b(o\013ered)k(b)m(y)e
-(the)h(W)-8 b(eb,)42 b(and)c(in)g(particular)f(a)i(more)g(in)m
-(tegrated)h(use)e(of)h(its)g(bro)m(wsing)p eop
-%%Page: 9 9
-9 8 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2578
-b Fl(9)94 171 y(and)29 b(searc)m(hing)h(facilities.)39
-b(The)29 b(library)f(is)h(not)h(merely)g(seen)g(as)g(a)g(more)g(or)g
-(less)g(structured)f(collection)94 284 y(of)j(texts,)i(but)e(as)g(a)h
-(virtual)e(structure)g(inside)f(whic)m(h)h(w)m(e)i(can)g(freely)e(na)m
-(vigate,)k(jumping)30 b(for)i(instance)94 397 y(from)41
-b(an)h(en)m(tit)m(y)h(to)g(its)e(de\014nition,)i(or)e(p)s(eeping)g
-(inside)e(some)k(information)d(at)j(deep)s(er)e(and)g(deep)s(er)94
-510 y(lev)m(els)g(of)h(details)f(\(suc)m(h)h(as)g(di\013eren)m(t)g(lev)
-m(els)f(of)h(detail)f(of)h(a)g(pro)s(of)7 b(\).)75 b(This)40
-b(is)h(similar)f(to)i(what)g(w)m(e)94 623 y(curren)m(tly)30
-b(do)h(with)f(HTML)g(texts,)j(but)d(in)g(order)g(to)i(enhance)f(the)g
-(e\013ectiv)m(eness)h(of)g(the)f(consultation,)94 736
-y(w)m(e)i(clearly)f(need)g(a)h(go)s(o)s(d)g(metadata)h(mo)s(del)e(of)g
-(the)h(information.)46 b(Moreo)m(v)m(er,)36 b(in)31 b(suc)m(h)h(an)h
-(in)m(tegrated)94 849 y(view,)g(it)g(is)f(hardly)g(conceiv)-5
-b(able)33 b(to)h(just)f(apply)e(some)j(`general)g(purp)s(ose')d
-(metadata)k(mo)s(del)d(\(lik)m(e)h(the)94 962 y(Dublin)e(Core)j
-(system,)i(sa)m(y\):)49 b(the)34 b(metadata)i(mo)s(del)c(m)m(ust)i(b)s
-(e)g(ev)m(en)m(tually)g(sp)s(ecialised)d(to)k(the)f(actual)94
-1075 y(structure)41 b(of)i(the)f(information)e(it)h(is)g(supp)s(osed)f
-(to)j(mo)s(del)e(\(and)g(more)h(structure)g(w)m(e)g(ha)m(v)m(e)h(on)f
-(the)94 1187 y(information,)c(more)f(relev)-5 b(an)m(t)37
-b(metadata)i(w)m(e)f(can)g(usually)d(infer)g(on)i(the)h(do)s(cumen)m
-(t\).)61 b(F)-8 b(or)38 b(instance,)94 1300 y(metadata)g(could)e(con)m
-(tain)h(the)g(whole)f(signature)g(of)h(a)g(giv)m(en)f(mo)s(dule)f(of)i
-(mathematical)g(kno)m(wledge.)94 1413 y(The)28 b(usual)f(motiv)-5
-b(ation)29 b(for)f(k)m(eeping)h(metadata)h(simple)d(and)h(general)h(is)
-e(that)j(it)e(is)g(usually)e(di\016cult)h(to)94 1526
-y(add)j(this)f(information)f(b)m(y)i(hand;)g(but)f(in)g(our)h(case)h(a)
-g(large)f(part)g(of)g(the)h(metadata)h(is)d(supp)s(osed)f(to)j(b)s(e)94
-1639 y(extracted)g(automatically)f(b)m(y)g(the)g(\(structured\))g(text)
-h(itself,)e(allo)m(wing)g(for)g(prett)m(y)i(complex)f(metadata)94
-1752 y(mo)s(dels.)235 1865 y(Finally)-8 b(,)45 b(a)e(main)f(asp)s(ect)i
-(of)f(our)g(pro)5 b(ject)43 b(is)f(the)i(in)m(tegration)f(with)e
-(curren)m(t)i(to)s(ols)g(for)g(the)g(au-)94 1978 y(tomation)30
-b(of)g(formal)f(reasoning)h(and)f(mec)m(hanisation)g(of)h(mathematics)g
-(\(pro)s(of)g(assistan)m(ts)g(and)f(logical)94 2091 y(framew)m(orks\).)
-59 b(This)34 b(in)m(tegration)i(has)g(a)h(m)m(utual)e(b)s(ene\014t.)58
-b(F)-8 b(rom)36 b(the)h(p)s(oin)m(t)e(of)h(view)g(of)g(the)h(mathe-)94
-2204 y(matical)e(library)-8 b(,)34 b(the)h(\014rst)f(and)g(fundamen)m
-(tal)g(role)h(of)g(these)g(systems)g(is)f(that)h(of)g(pro)m(viding)e
-(friendly)94 2317 y(authoring)e(to)s(ols)g(\(for)h(instance,)g(our)g
-(`core')h(library)c(will)g(b)s(e)i(automatically)h(extracted)h(from)e
-(existing)94 2429 y(libraries)i(of)k(these)f(systems\).)59
-b(The)35 b(relev)-5 b(ance)37 b(of)f(this)f(p)s(oin)m(t)g(should)g(not)
-h(b)s(e)f(underestimated:)52 b(as)36 b(a)94 2542 y(matter)g(of)f(fact,)
-i(the)e(main)f(reason)i(for)e(the)i(failure)d(of)i(complex)g(markup)e
-(mo)s(dellings)f(is)i(usually)f(the)94 2655 y(lac)m(k)i(of)g(suitable)e
-(authoring)g(to)s(ols)h(\(it)h(is)e(often)i(painful)d(to)j(add)f(the)g
-(markup)g(b)m(y)g(hand\).)52 b(Of)34 b(course,)94 2768
-y(they)39 b(can)h(also)f(pro)m(vide)f(other)h(functionalities)e(\(lik)m
-(e)h(automatic)i(pro)s(of)e(c)m(hec)m(king\))j(on)e(fragmen)m(ts)g(of)
-94 2881 y(the)28 b(library)d(\(t)m(ypically)-8 b(,)28
-b(the)g(fragmen)m(ts)g(generated)h(b)m(y)e(the)h(to)s(ol)f(itself,)h
-(in)e(its)h(sp)s(eci\014c)f(logical)h(dialect\).)94 2994
-y(These)k(additional)e(functionalities)g(ma)m(y)i(b)s(e)g(esp)s
-(ecially)e(relev)-5 b(an)m(t)31 b(for)g(industrial)d(applications,)i
-(e.g.)44 b(in)94 3107 y(the)34 b(con)m(text)h(of)f(IT)f(securit)m(y)g
-(ev)-5 b(aluation)33 b(standards)g(lik)m(e)g(the)g(Common)g(Criteria)g
-(standard)f(\([4)q(]\).)51 b(In)94 3220 y(its)28 b(highest)g(assurance)
-h(lev)m(el,)g(this)f(standard)f(requires)h(the)h(dev)m(elopmen)m(t)g
-(of)g(formal)f(mo)s(dels)f(of)i(the)g(IT)94 3333 y(pro)s(duct)j(under)g
-(ev)-5 b(aluation,)34 b(as)f(w)m(ell)f(as)i(mec)m(hanized)f(pro)s(ofs)g
-(that)h(it)e(meets)i(its)f(securit)m(y)g(ob)5 b(jectiv)m(es.)94
-3446 y(Suc)m(h)26 b(mo)s(dels)g(and)h(pro)s(ofs)f(m)m(ust)h(b)s(e)g
-(published)c(in)j(a)i(format)f(that)h(can)f(b)s(e)g(easily)f(readable)h
-(and)g(under-)94 3559 y(sto)s(o)s(d)j(b)m(y)g(securit)m(y)g(ev)-5
-b(aluators.)41 b(Hence,)32 b(there)e(is)g(a)h(strong)f(need)g(from)g
-(soft)m(w)m(are)i(industry)c(to)j(b)s(e)f(able)94 3671
-y(to)38 b(pro)s(duce)e(suc)m(h)h(do)s(cumen)m(tation)g(directly)f(from)
-h(the)g(mo)s(dels)f(in)m(tro)s(duced)g(in)g(the)h(pro)s(of)g(assistan)m
-(t,)94 3784 y(and)30 b(to)h(link)d(it)i(with)f(do)s(cumen)m(ts)h
-(describing)e(the)j(IT)f(pro)s(duct,)f(etc.)235 3897
-y(On)40 b(the)i(other)f(side,)j(there)d(is)f(a)i(comp)s(elling)d(need)i
-(of)g(in)m(tegration)g(b)s(et)m(w)m(een)h(the)g(curren)m(t)f(to)s(ols)
-94 4010 y(for)36 b(automation)h(of)g(formal)f(reasoning)f(and)h(mec)m
-(hanisation)g(of)h(mathematics)g(and)f(the)g(most)h(recen)m(t)94
-4123 y(tec)m(hnologies)23 b(for)e(the)h(dev)m(elopmen)m(t)g(of)g(W)-8
-b(eb)23 b(applications)d(and)h(electronic)h(publishing.)33
-b(XML,)23 b(whic)m(h)d(is)94 4236 y(rapidly)h(imp)s(osing)h(as)i(a)g
-(piv)m(otal)f(tec)m(hnology)i(in)e(the)h(future)f(dev)m(elopmen)m(t)h
-(of)g(all)f(In)m(ternet)h(applications,)94 4349 y(and)g(the)h(main)f
-(to)s(ol)g(for)h(represen)m(tation,)h(manipulation,)e(and)g(exc)m
-(hange)i(of)f(structured)f(information)f(in)94 4462 y(the)g(net)m(w)m
-(ork)m(ed)i(age,)h(lo)s(oks)d(as)g(a)h(natural,)g(almost)f(mandatory)-8
-b(,)26 b(c)m(hoice)e(for)f(mo)s(delling)d(the)k(information.)235
-4575 y(In)39 b(this)f(w)m(a)m(y)-8 b(,)43 b(w)m(e)d(just)f(ob)s(ey)g
-(to)h(the)f(v)m(ery)h(primitiv)m(e)d(commandmen)m(t)j(of)f(the)h(W)-8
-b(eb:)59 b(mak)m(e)40 b(y)m(our)94 4688 y(information)j(a)m(v)-5
-b(ailable.)82 b(Curren)m(tly)-8 b(,)47 b(libraries)41
-b(in)i(logical)h(framew)m(orks)h(are)f(usually)e(sa)m(v)m(ed)k(in)d(t)m
-(w)m(o)94 4801 y(formats:)d(a)28 b(textual)h(one,)g(in)e(the)h(sp)s
-(eci\014c)f(tactical)j(language)e(of)h(the)f(pro)s(of)f(assistan)m(t,)j
-(and)d(a)i(compiled)94 4913 y(\(pro)s(of)h(c)m(hec)m(k)m(ed\))j(one)d
-(in)g(some)g(in)m(ternal,)g(concrete)i(represen)m(tation)e(language.)41
-b(Both)31 b(represen)m(tations)94 5026 y(are)45 b(ob)m(viously)e
-(unsatisfactory)-8 b(,)48 b(since)c(they)h(are)g(to)s(o)g(orien)m(ted)f
-(to)h(the)g(sp)s(eci\014c)e(application:)67 b(they)94
-5139 y(restrict)31 b(the)g(access)h(of)f(the)h(libraries)c(to)j(the)h
-(users)e(of)h(the)g(giv)m(en)g(application,)f(and)g(at)i(the)f(same)h
-(time)94 5252 y(they)i(are)h(to)s(o)f(sensible)e(to)j(the)f(ev)m
-(olution)g(and)f(the)h(main)m(tenance)h(of)f(the)g(application)f
-(itself.)50 b(On)33 b(the)94 5365 y(other)i(side,)h(as)g(so)s(on)e(as)i
-(the)f(information)f(is)g(put)h(in)f(a)h(standard)g(format)g(on)g(the)h
-(W)-8 b(eb,)37 b Fd(any)f Fl(kind)d(of)p eop
-%%Page: 10 10
-10 9 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(10)94 171 y(researc)m(h)40 b(b)s(ecomes)g(virtually)d(p)s
-(ossible,)i(and)g Fd(anyb)-5 b(o)g(dy)42 b Fl(could)c(start)i(dev)m
-(eloping)f(his)f(o)m(wn)h Fd(spider)i Fl(for)94 284 y(implemen)m(ting)
-25 b(his)h(o)m(wn)i(searc)m(hing)f(requiremen)m(ts.)39
-b(This)25 b(is)i(clearly)f(a)i(ma)5 b(jor)28 b(impro)m(v)m(emen)m(t)f
-(w.r.t.)40 b(the)94 397 y(presen)m(t)31 b(situation.)42
-b(Curren)m(tly)-8 b(,)30 b(y)m(ou)i(m)m(ust)f(not)g(only)f(rely)g(on)h
-(the)h(searc)m(hing)f(facilities)e(o\013ered)i(b)m(y)g(the)94
-510 y(sp)s(eci\014c)d(applications,)g(but)h(ev)m(en)h(if)e(y)m(ou)i(w)m
-(ould)e(wish)g(to)i(implemen)m(t)e(y)m(our)h(o)m(wn)h(searc)m(hing)f
-(algorithm,)94 623 y(y)m(ou)36 b(w)m(ould)e(b)s(e)h(prev)m(en)m(ted)h
-(b)m(y)g(the)g(simple)d(reason)j(that)g(the)g(information)e(is)g(not)i
-(accessible)f(\(in)g(an)m(y)94 736 y(reasonable)30 b(sense)h(of)f(the)h
-(w)m(ord\).)235 849 y(The)d(pro)5 b(ject)29 b(builds)c(on)j(the)h
-(solid)d(ground)h(pro)m(vided)g(b)m(y)i(sev)m(eral)f(existing)f
-(XML-based)i(languages)94 962 y(for)34 b(the)g(managemen)m(t)h(of)f
-(mathematical)h(do)s(cumen)m(ts)e(suc)m(h)h(as)g(MathML,)h(Op)s(enMath)
-e(and)g(OMDo)s(c.)94 1075 y(Eac)m(h)25 b(of)g(these)g(markup)f
-(languages)g(co)m(v)m(ers)j(a)e(di\013eren)m(t)f(asp)s(ect)h(of)g(the)g
-(information.)37 b(Our)23 b(aim)h(is)g(not)h(to)94 1187
-y(prop)s(ose)h(a)g(new)g(language,)i(but)e(to)h(study)f(and)g(to)h(dev)
-m(elop)f(the)h(tec)m(hnological)g(infrastructure)d(required)94
-1300 y(to)29 b(in)m(tegrate)h(all)e(these)h(languages)g(together,)h(in)
-e(order)g(to)h(tak)m(e)i(adv)-5 b(an)m(tage)30 b(of)f(the)g(sp)s
-(eci\014c)e(features)i(of)94 1413 y(eac)m(h)j(of)e(them.)94
-1700 y Fj(6)135 b(Comm)l(unit)l(y)46 b(added)e(v)-7 b(alue)46
-b(and)e(con)l(tribution)i(to)f(EC)g(p)t(olicies)94 1903
-y Fl(The)31 b(Pro)5 b(ject)32 b(relies)f(in)f(an)h(essen)m(tial)h(w)m
-(a)m(y)g(on)g(the)f(con)m(v)m(ergence)j(of)e(information)e(pro)s
-(cessing,)h(comm)m(u-)94 2016 y(nication)i(and)h(new)f(media,)i
-(meeting)f(the)g(main)f(p)s(olicy)f(issue)h(of)i(the)f(IST)f
-(programme.)52 b(In)33 b(fact,)j(due)94 2128 y(to)f(its)f(v)m(ery)h
-(nature,)g(mathematical)g(information)e(is)g(particularly)f(suited)h
-(to)i(an)g(in)m(tegrated)g(analysis)94 2241 y(under)29
-b(the)h(di\013eren)m(t)f(p)s(ersp)s(ectiv)m(es)h(of)g(elab)s(oration,)f
-(comm)m(unication)h(and)f(\(h)m(yp)s(er\)media)h(publishing,)94
-2354 y(pro)m(viding)24 b(a)i(main)f(arena)h(for)f(inno)m(v)-5
-b(ativ)m(e)26 b(exp)s(erimen)m(ts)f(and)g(solutions,)g(esp)s(ecially)f
-(in)h(view)g(of)h(the)g(new)94 2467 y(tec)m(hnological)31
-b(fron)m(tier)f(of)g(the)h(Seman)m(tic)f(W)-8 b(eb.)235
-2580 y(The)26 b(Pro)5 b(ject)27 b(also)f(tries)g(to)h(answ)m(er)f(to)h
-(a)f(clear)h(need)f(for)g(wider)e(in)m(terop)s(erabilit)m(y)g(and)h
-(coherence)j(in)94 2693 y(the)j(realm)g(of)g(mathematics)g(o)m(v)m(er)i
-(the)e(W)-8 b(eb,)32 b(esp)s(ecially)d(for)i(educational,)g(scien)m
-(ti\014c)f(and)h(commercial)94 2806 y(purp)s(oses.)235
-2919 y(Electronic)i(textb)s(o)s(oks)h(are)g(rapidly)d(b)s(ecoming)i(a)h
-(main)e(to)s(ol)h(for)h(education)f(and)g(kno)m(wledge)h(dis-)94
-3032 y(semination.)50 b(Electronic)33 b(textb)s(o)s(oks)h(m)m(ust)g(b)s
-(e)f(in)m(teractiv)m(e,)i(allo)m(wing)e(in)m(tercomm)m(unication)g(b)s
-(et)m(w)m(een)94 3145 y(the)39 b(text)g(and)f(scien)m(ti\014c)g(soft)m
-(w)m(are)i(and)d(graphics.)64 b(This)37 b(is)h(v)m(ery)g(hard)g(to)h
-(ac)m(hiev)m(e)h(starting)e(form)g(a)94 3258 y(mere)31
-b(presen)m(tational)g(description)e(of)i(the)g(information,)f(clearly)g
-(requiring)f(a)i(sophisticated)f(seman)m(ti-)94 3370
-y(cal)g(description)f(of)h(the)h(con)m(ten)m(t.)235 3483
-y(Similarly)-8 b(,)39 b(the)g(academic)h(and)f(commercial)g(researc)m
-(h)h(comm)m(unities)e(generate)j(large)e(v)m(olume)g(of)94
-3596 y(dense)g(scien)m(ti\014c)g(material.)67 b(Increasingly)-8
-b(,)41 b(researc)m(h)f(publications)d(are)j(b)s(eing)e(stored)h(in)f
-(databases,)94 3709 y(esp)s(ecially)i(for)i(those)h(areas)g(of)f(ph)m
-(ysics)f(and)h(mathematics)h(where)e(academic)i(journal)e(prices)g(ha)m
-(v)m(e)94 3822 y(b)s(een)33 b(gro)m(wing)h(at)g(an)g(unsustainable)d
-(rate.)52 b(Still,)33 b(ho)m(w)m(ev)m(er,)j(the)e(information)e(is)h
-(stored)h(in)f(a)h(format)94 3935 y(whic)m(h)26 b(is)h(mac)m(hine)g
-(readable)g(but)g(not)h(mac)m(hine)f(understandable;)g(in)f(particular)
-g(it)h(is)g(not)h(suitable)e(for)94 4048 y(an)m(y)h(form)f(of)g(elab)s
-(oration)f(other)i(than)f(its)g(rendering.)37 b(MO)m(W)m(GLI's)28
-b(con)m(ten)m(t)g(and)e(metadata)i(lev)m(els)e(are)94
-4161 y(exactly)h(mean)m(t)g(to)g(address)e(complex)h(elab)s(oration)g
-(requiremen)m(ts,)g(and)g(to)g(facilitate)h(the)f(main)m(tenance)94
-4274 y(and)h(op)s(erabilit)m(y)e(of)i(large)g(do)s(cumen)m(t)h
-(collections,)f(for)g(whic)m(h)f(automatic)i(searc)m(hing)f(and)g
-(indexing)e(are)94 4387 y(crucial.)235 4500 y(Corp)s(orate)d(and)g
-(academic)h(scien)m(tists)f(and)f(engineers)h(also)g(use)g(tec)m
-(hnical)g(do)s(cumen)m(ts)g(in)f(their)g(w)m(ork)94 4612
-y(to)27 b(collab)s(orate,)g(to)g(record)f(results)f(of)h(exp)s(erimen)m
-(ts)f(and)g(computer)h(sim)m(ulations,)f(and)h(to)h(v)m(erify)e(calcu-)
-94 4725 y(lations.)40 b(The)29 b(W)-8 b(eb)30 b(is,)f(p)s(oten)m
-(tially)-8 b(,)30 b(the)g(natural)e(media)h(for)h(sharing)e(this)h
-(information;)f(MO)m(W)m(GLI)j(is)94 4838 y(mean)m(t)c(to)h(pro)m(vide)
-d(the)i(basic)f(tec)m(hnology)h(to)g(transform)f(this)g(p)s(oten)m
-(tialit)m(y)g(in)m(to)g(an)g(actual)h(p)s(ossibilit)m(y)-8
-b(.)235 4951 y(Commercial)32 b(publishers)d(are)k(also)g(in)m(v)m(olv)m
-(ed)g(with)e(mathematics)j(on)e(the)h(W)-8 b(eb)34 b(at)g(all)d(lev)m
-(els)i(from)94 5064 y(electronic)i(v)m(ersions)g(of)h(prin)m(ted)e(b)s
-(o)s(oks)h(to)h(in)m(teractiv)m(e)g(textb)s(o)s(oks)g(and)f(academic)h
-(journals.)55 b(In)34 b(this)94 5177 y(case,)g(MO)m(W)m(GLI)f(o\013ers)
-f(supp)s(ort)e(for)i(adv)-5 b(anced)32 b(capabilities,)f(suc)m(h)g(as)h
-(bro)m(wsing,)g(in)m(teractivit)m(y)-8 b(,)33 b(pre-)94
-5290 y(sen)m(tational)e(and)e(st)m(ylistic)h(customisation,)g(and)g
-(adv)-5 b(anced)30 b(searc)m(hing)g(and)g(retrieving)f(features.)p
-eop
-%%Page: 11 11
-11 10 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(11)235 171 y(The)23 b(pro)5 b(ject)25 b(deals)e(with)g(problems)f
-(traditionally)f(b)s(elonging)h(to)j(di\013eren)m(t)e(scien)m(ti\014c)g
-(comm)m(unities:)94 284 y(digital)31 b(libraries,)f(W)-8
-b(eb)33 b(publishing,)28 b(automation)33 b(of)g(mathematics)f(and)g
-(computer)g(aided)g(reasoning.)94 397 y(An)m(y)41 b(serious)g(solution)
-f(needs)g(a)i(co)s(ordinated)f(e\013ort)h(of)g(all)e(these)i(groups)e
-(and)h(a)h(synergy)f(of)g(their)94 510 y(di\013eren)m(t)31
-b(exp)s(ertise.)45 b(The)32 b(mem)m(b)s(ers)f(of)h(the)g(consortium)f
-(ha)m(v)m(e)i(b)s(een)f(also)g(carefully)e(c)m(hosen)j(for)e(their)94
-623 y(exp)s(erience)37 b(in)f(the)h(ab)s(o)m(v)m(e)i(men)m(tioned)d
-(areas.)63 b(F)-8 b(rom)38 b(this)e(in)m(teraction,)j(w)m(e)f(exp)s
-(ect)g(to)g(dev)m(elop)f(new)94 736 y(tec)m(hnologies)23
-b(and)e(solutions,)i Fd(fostering)i(innovation)f Fl(to)m(w)m(ards)f
-(the)f(construction)g(of)g(the)g(Seman)m(tic)g(W)-8 b(eb.)235
-849 y(MO)m(W)m(GLI)33 b(con)m(tributes)e(in)f(the)h Fd(spr)-5
-b(e)g(ad)36 b(of)d(information)j(and)e(know-how)p Fl(,)g(since)c(new)h
-(information)94 962 y(tec)m(hnologies)23 b(will)d(b)s(e)i(applied)e(to)
-j(realms)f(suc)m(h)g(as)h(education)f(and)g(publishing,)e(whic)m(h)h
-(are)i(traditionally)94 1075 y(not)31 b(v)m(ery)g(inclined)c(to)32
-b(inno)m(v)-5 b(ation.)40 b(More)31 b Fd(c)-5 b(omp)g(etitiveness)33
-b Fl(will)28 b(b)s(e)i(acquired)f(b)s(oth)h(b)m(y)g(the)h(end)f(users)
-94 1187 y(of)k(the)g(system)g(and)g(b)m(y)f(the)h(tec)m(hnology)i(pro)m
-(viders,)d(whic)m(h)g(will)e(ev)m(en)m(tually)j(pro\014t)f(b)m(y)h(the)
-g(exp)s(ertise)94 1300 y(gained)26 b(b)m(y)h(applying)e(new)h(and)h
-(emerging)f(tec)m(hnologies)i(to)g(the)f(h)m(uge)g(and)f(comp)s(elling)
-f(problem)g(of)i(the)94 1413 y(managemen)m(t)32 b(of)e(mathematical)h
-(do)s(cumen)m(ts)f(o)m(v)m(er)i(the)e(W)-8 b(eb.)235
-1526 y(By)47 b(op)s(ening)e(new)h(p)s(ersp)s(ectiv)m(es)f(in)g(the)i
-(domains)e(of)h(in)m(teractiv)m(e)i(publishing)42 b(and)j(education,)94
-1639 y(MO)m(W)m(GLI)36 b(suggests)f Fd(new)i(job-pr)-5
-b(o\014les)36 b Fl(in)e(these)h(domains,)f(and)g Fd(incr)-5
-b(e)g(ases)38 b(job)f(opp)-5 b(ortunities)37 b Fl(in)c(the)94
-1752 y(Information)c(So)s(ciet)m(y)i(sector.)235 1865
-y(Finally)-8 b(,)32 b(the)i Fd(so)-5 b(cial)36 b(and)g(cultur)-5
-b(al)36 b(c)-5 b(ohesion)35 b Fl(of)e(Europ)s(e)f(is)g(ev)m(en)m
-(tually)h(strengthened)g(b)m(y)g(the)g(cre-)94 1978 y(ation)d(of)h(a)g
-(large)f(distributed)d(rep)s(ositories)i(of)i(scien)m(ti\014c)f(kno)m
-(wledge.)94 2264 y Fj(7)135 b(Con)l(tribution)46 b(to)f(Comm)l(unit)l
-(y)h(So)t(cial)f(Ob)7 b(jectiv)l(es)94 2467 y Fl(The)34
-b(qualit)m(y)f(of)h(life,)g(in)f(a)h(civilised)d(coun)m(try)-8
-b(,)36 b(strictly)d(dep)s(ends)g(on)h(the)g(qualit)m(y)f(of)i(its)e
-(services,)i(and)94 2580 y(in)28 b(particular)g(on)i(the)g(atten)m
-(tion)h(dev)m(oted)g(to)f(those)g(services)g(aimed)f(to)h(preserv)m(e,)
-h(increase)e(and)g(mak)m(e)94 2693 y(accessible)h(to)h(a)f(wider)f
-(audience)h(its)f(cultural)g(and)g(scien)m(ti\014c)h(heritage.)41
-b(Building)27 b(a)k(user)e(friendly)f(In-)94 2806 y(formation)23
-b(So)s(ciet)m(y)-8 b(,)26 b(with)21 b(particular)h(emphasis)g(on)h
-(digital)f(heritage,)j(cultural)d(con)m(ten)m(t)j(and)e(education)94
-2919 y(is)29 b(indeed)g(a)i(main)e(so)s(cial)h(ob)5 b(jectiv)m(e)31
-b(of)g(the)f(Europ)s(ean)f(Comm)m(unit)m(y)-8 b(.)235
-3032 y(The)29 b(new)g(Information)f(So)s(ciet)m(y)i(is)e(essen)m
-(tially)g(based)h(on)h(the)f(con)m(v)m(ergence)j(of)d(information,)g
-(com-)94 3145 y(m)m(unication)e(and)g(net)m(w)m(orking)h(tec)m
-(hnologies)h(and)f(tak)m(es)h(adv)-5 b(an)m(tage)30 b(of)e
-(infrastructures)e(lik)m(e)i(the)g(In)m(ter-)94 3258
-y(net)j(and)e(the)i(W)-8 b(eb.)235 3370 y(Our)37 b(pro)5
-b(ject)38 b(builds)c(on)k(these)g(grounds,)h(to)f(create)h(the)f(tec)m
-(hnological)g(infrastructure)e(required)94 3483 y(for)45
-b(the)g(creation)h(and)e(main)m(tenance)i(of)f(a)h(digital)d(kno)m
-(wledge)j(base)f(of)g Fd(structur)-5 b(e)g(d)47 b Fl(mathematical)94
-3596 y(information,)29 b(univ)m(ersally)f(and)i(seamlessly)g
-(accessible)g(to)i(all)d(p)s(eople,)h(and)g(in)f(particular)g(to)j
-(studen)m(ts)94 3709 y(and)e(professionals,)f(through)g(in)m(terop)s
-(erable,)h(dep)s(endable)e(and)i(a\013ordable)g(pro)s(ducts)f(and)g
-(services.)235 3822 y(F)-8 b(rom)25 b(the)f(educational)f(p)s(oin)m(t)g
-(of)h(view,)h(our)e(system)h(could)f(easily)h(b)s(ecome)g(a)g(main)f
-(to)s(ol)h(for)g(a)g(wider)94 3935 y(and)35 b(more)g(friendly)e
-(dissemination)g(of)i(mathematical)h(kno)m(wledge.)55
-b(Indeed,)36 b(its)f(in)m(teractiv)m(e)h(nature,)94 4048
-y(and)f(the)h(p)s(ossibilit)m(y)d(to)j(access)h(single)e(information)f
-(units,)i(and)f(p)s(ossibly)e(applying)h(them,)j(pro)m(vides)94
-4161 y(a)32 b(more)f(op)s(erational)g(and)f(far)h(less)g(abstract)h
-(comprehension)e(of)h(mathematical)h(en)m(tities,)g(and)e(should)94
-4274 y(naturally)39 b(induce)g(the)j(user)e(to)h(pla)m(y)g(with)e(the)i
-(kno)m(wledge)g(base,)j(assem)m(bling)c(comp)s(onen)m(ts)h(in)e(the)94
-4387 y(dev)m(elopmen)m(t)31 b(of)f(new)g(theorems)h(and)f(results.)235
-4500 y(F)-8 b(rom)43 b(the)f(p)s(oin)m(t)f(of)h(view)f(of)h(emplo)m
-(ymen)m(t)h(and)e(dev)m(elopmen)m(t)i(of)f(individual)37
-b(skills,)43 b(there)f(are)94 4612 y(t)m(w)m(o)31 b(di\013eren)m(t)e
-(asp)s(ects)h(to)h(b)s(e)e(considered,)g(according)h(to)g(the)g
-Fd(obje)-5 b(ctives)30 b Fl(and)f(the)h Fd(metho)-5 b(dolo)g(gy)33
-b Fl(of)d(the)94 4725 y(pro)5 b(ject.)235 4838 y(F)-8
-b(orm)30 b(the)g(metho)s(dological)f(p)s(oin)m(t)f(of)i(view,)f(the)h
-(pro)5 b(ject)30 b(mak)m(es)g(an)g(essen)m(tial)f(use)g(of)h(tec)m
-(hnologies)94 4951 y(whic)m(h)19 b(are)i(the)g(v)m(ery)f(foundations)f
-(of)i(the)g(information)d(so)s(ciet)m(y)-8 b(,)24 b(driving)18
-b(their)h(dev)m(elopmen)m(t,)k(enhancing)94 5064 y(their)39
-b(applicabilit)m(y)-8 b(,)41 b(and)e(accelerating)i(their)f(tak)m(e)i
-(up)d(in)g(Europ)s(e.)69 b(In)40 b(particular,)h(w)m(e)g(shall)d(build)
-94 5177 y(on)k(most)g(of)h(the)f(recen)m(t)h(recommendations)f(of)g
-(the)g(W)-8 b(orld)42 b(Wide)f(W)-8 b(eb)43 b(Consortium)e(\(W3C\),)i
-(lik)m(e)94 5290 y(XML,)30 b(DOM,)g(XSL,)f(XLL,)g(MathML,)h(RDF,)h
-(etc.)41 b(testing)29 b(their)g(applicabilit)m(y)d(to)k(the)g
-(de\014nition)d(of)i(a)p eop
-%%Page: 12 12
-12 11 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(12)94 171 y(comprehensiv)m(e,)30 b(in)m(tegrated)h(description)e
-(of)h(a)h(giv)m(en)f(\014eld)f(of)i(kno)m(wledge.)235
-284 y(This)e(kind)g(of)i(to)s(ols)g(and)f(tec)m(hniques)g(is)g(of)h
-(crucial)e(imp)s(ortance)h(in)g(the)h(dev)m(elopmen)m(t)g(of)g(the)g(W)
--8 b(eb)94 397 y(and)29 b(of)g(the)h(Information)e(T)-8
-b(ec)m(hnology)30 b(of)g(the)f(next)h(y)m(ears,)g(and)f(our)g(pro)5
-b(ject)29 b(could)g(pla)m(y)g(a)g(ma)5 b(jor)30 b(role)94
-510 y(in)f(their)g(dissemination)f(in)h(Europ)s(e,)h(and)f(in)h
-(training)e(p)s(eople)i(in)f(their)g(use.)235 623 y(On)39
-b(the)h(other)h(side,)g(MO)m(W)m(GLI)h(itself)c(could)h(b)s(ecome)i(a)f
-(ma)5 b(jor)40 b(source)g(of)h(inspiration)36 b(for)k(the)94
-736 y(re-in)m(v)m(en)m(tion)28 b(of)g(existing)f(activities,)h(and)f
-(in)g(particular)f(for)i(the)g(exploitation)f(of)h(new)g(business)e(in)
-g(the)94 849 y(publishing)32 b(mark)m(et.)60 b(Curren)m(tly)-8
-b(,)37 b(digital)e(journals)g(just)h(o\013er)h(purely)d(textual)j(ob)5
-b(jects:)54 b(our)36 b(pro)5 b(ject)94 962 y(could)27
-b(help)f(to)i(de\014ne)f(new)g(mark)m(et)i(p)s(ossibilit)m(y)24
-b(for)j(con)m(ten)m(t-based)j(publishing)23 b(\()p Fd(i.e.)39
-b Fl(structured,)28 b(p)s(os-)94 1075 y(sibly)e(formal)i(mathematical)h
-(dev)m(elopmen)m(ts\),)h(with)d(all)g(the)i(p)s(oten)m(tialities)e
-(o\013ered)i(b)m(y)f(this)g(approac)m(h,)94 1187 y(from)f(bro)m(wsing)g
-(facilities,)g(to)h(the)g(p)s(ersonalisation)e(of)i(the)g(st)m(yle,)g
-(from)g(enhanced)f(forms)g(of)h(searc)m(hing,)94 1300
-y(to)j(more)g(or)f(less)g(arbitrarily)d(complex)j(forms)g(of)h(elab)s
-(oration.)235 1413 y(Our)39 b(system)g(also)h(op)s(ens)f(new)g(p)s
-(ersp)s(ectiv)m(es)g(on)h(the)g(mec)m(hanisation)f(of)h(mathematics)g
-(and)f(the)94 1526 y(automation)34 b(of)f(formal)f(reasoning.)49
-b(The)33 b(gro)m(wing)g(complexit)m(y)g(of)g(adv)-5 b(anced)33
-b(tec)m(hnological)h(pro)5 b(jects)94 1639 y(\(in)29
-b(the)i(areas)f(of)h(electronic)f(and)f(a)m(vionic)h(engineering,)f
-(for)h(example\))h(has)f(recen)m(tly)g(arose)h(a)f(renew)m(ed)94
-1752 y(in)m(terest)36 b(in)e(formal)g(metho)s(ds.)56
-b(F)-8 b(rom)36 b(this)e(resp)s(ect,)j(our)e(pro)5 b(ject)36
-b(con)m(tributes)f(to)h(build)c(an)k(essen)m(tial)94
-1865 y(infrastructure)28 b(for)h(the)h(exploitation)e(of)i(these)g
-(metho)s(ds,)f(pro)m(viding)f(a)i(ma)5 b(jor)29 b(help)g(for)g
-(professionals,)94 1978 y(and)h(fostering)g(their)f(skills.)235
-2091 y(Let)f(us)f(\014nally)e(remark)i(that)h(the)f(pro)5
-b(ject)28 b(has)f(no)g(negativ)m(e)i(impact)e(on)g(the)g(natural)g(en)m
-(vironmen)m(t.)94 2204 y(W)-8 b(e)32 b(could)f(ev)m(en)h(claim)e(a)i
-(few)f(b)s(ene\014ts,)f(related)i(to)g(the)f(electronic)g(distribution)
-d(of)j(do)s(cumen)m(ts,)h(suc)m(h)94 2317 y(as)f(the)f(minimisation)d
-(in)i(the)i(use)f(of)g(means)h(of)f(con)m(v)m(ey)m(ance)j(and)d(the)h
-(sa)m(ving)f(of)h(pap)s(er.)235 2429 y(The)43 b(p)s(ossible)f
-(customisation)h(via)g(suitable)g(st)m(yle-sheets)i(of)f
-Fd(structur)-5 b(e)g(d)45 b Fl(electronic)f(do)s(cumen)m(ts)94
-2542 y(could)37 b(also)g(meet)i(the)f(needs)f(of)h(particular)e(users,)
-j(suc)m(h)e(as)h(disabled)d(\(in)i(particular,)h(disabled)d(stu-)94
-2655 y(den)m(ts\))26 b(or)g(elderly)e(\(as)i(retired)f(researc)m(hers)h
-(who)g(w)m(ould)e(lik)m(e)h(to)i(con)m(tin)m(ue)f(their)e(professional)
-g(activit)m(y\),)94 2768 y(pro)m(viding)38 b(at)i(the)g(same)h(time)e
-(comfortable)i(w)m(orking)e(conditions)f(\()p Fd(e.g.)69
-b Fl(at)40 b(home\).)70 b(Another)40 b(gen-)94 2881 y(eral)29
-b(design)f(requiremen)m(t)g(is)h(the)g(abilit)m(y)f(to)i(render)e
-(mathematical)i(material)e(in)g(other)i(media)e(suc)m(h)h(as)94
-2994 y(sp)s(eec)m(h)h(or)h(braille,)d(whic)m(h)h(is)h(extremely)g(imp)s
-(ortan)m(t)g(for)g(the)g(visually)e(impaired.)235 3107
-y(In)j(conclusion,)g(the)h(aim)f(of)h(our)f(w)m(ork)h(is)e(to)j(con)m
-(tribute)e(to)i(the)e(creation)h(of)g(the)g(next)g(generation)94
-3220 y(of)26 b(user-friendly)-8 b(,)25 b(dep)s(endable)f(and)h(in)m
-(terop)s(erable)g(general-in)m(terest)h(services,)h(meeting)f(user)f
-(demands)94 3333 y(for)30 b(\015exible)f(access,)j(for)e(ev)m(eryb)s(o)
-s(dy)-8 b(,)30 b(from)g(an)m(ywhere,)h(at)g(an)m(y)f(time.)94
-3619 y Fj(8)135 b(Economic)45 b(dev)l(elopmen)l(t)i(and)d(Scien)l
-(ti\014c)h(and)296 3769 y(T)-11 b(ec)l(hnological)46
-b(Prosp)t(ects)94 3975 y Fg(8.1)112 b(Iden)m(ti\014cation)36
-b(of)i(exploitable)e(results)94 4147 y Fl(MO)m(W)m(GLI)23
-b(is)e(mean)m(t)h(to)g(dev)m(elop,)i(ev)-5 b(aluate,)24
-b(\014ne-tune)d(and)g(deliv)m(er)g(a)h(complete)g(protot)m(yp)s(e)g
-(supp)s(orting)94 4259 y(friendly)h(and)h(in)m(teractiv)m(e)i(access)h
-(to)f(h)m(uge,)h(distributed)22 b(rep)s(ositories)i(of)i(con)m(ten)m
-(t-based)h(mathematical)94 4372 y(kno)m(wledge.)38 b(The)20
-b(purp)s(ose)g(of)h(the)g(pro)5 b(ject)22 b(is)e(to)i(o)m(v)m(ercome)i
-(some)d(of)h(the)f(main)f(obstacles)i(that)f(curren)m(tly)94
-4485 y(hinder)33 b(a)i(wider)f(dissemination)e(of)k(Information)e(T)-8
-b(ec)m(hnologies)35 b(in)f(the)i(mathematical)f(and)g(researc)m(h)94
-4598 y(comm)m(unit)m(y)28 b(\(comprising)f(b)s(oth)h(professionals)f
-(and)h(studen)m(ts\).)40 b(This)27 b(is)g(in)m(tended)h(as)h(a)g
-(public)d(service)94 4711 y(for)k(the)h(whole)e(comm)m(unit)m(y)h(of)h
-(users,)f(and)g(w)m(e)g(exp)s(ect)h(no)g(direct)e(commercial)h
-(pro\014t)g(b)m(y)g(our)g(w)m(ork.)235 4824 y(Of)j(course,)h(the)f
-(core)h(tec)m(hnologies)f(and)g(languages)g(dev)m(elop)s(ed)f(in)g(MO)m
-(W)m(GLI)i(ma)m(y)g(b)s(e)e(exploited)94 4937 y(in)d(a)i(lot)f(of)h
-(di\013eren)m(t)f(w)m(a)m(ys,)h(according)f(to)h(the)g(nature)f(and)g
-(exploitation)f(plan)g(of)i(eac)m(h)h(partner.)235 5050
-y(In)h(particular,)g(it)g(should)f(b)s(e)h(clear)h(that)g(ha)m(ving)g
-(a)g(coheren)m(t,)h(distributed)c(library)g(of)j(structured)94
-5163 y(mathematical)j(kno)m(wledge,)h(sa)m(v)m(ed)f(in)e(a)i(clearly)e
-(de\014ned,)i(w)m(ell)e(do)s(cumen)m(ted)h(and)g(application)e(inde-)94
-5276 y(p)s(enden)m(t)c(format,)j(is)d(just)h(the)g(starting)g(p)s(oin)m
-(t)g(of)g(a)h(wider,)e(p)s(oten)m(tially)g(enormous)h(pro)s(cess.)43
-b(Building)p eop
-%%Page: 13 13
-13 12 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(13)94 171 y(on)32 b(the)g(grounds)f(pro)m(vided)g(b)m(y)h(MO)m(W)m
-(GLI,)i(a)e(lot)g(of)g(di\013eren)m(t)g(services)g(can)g(b)s(e)g
-(imagined,)f(and)g(inde-)94 284 y(p)s(enden)m(tly)k(dev)m(elop)s(ed)i
-(b)m(y)g(di\013eren)m(t)f(organisations.)60 b(Inside)35
-b(the)i(pro)5 b(ject,)40 b(w)m(e)d(shall)e(just)i(giv)m(e)g(a)h(few)94
-397 y(hin)m(ts)24 b(in)g(this)g(direction,)h(supp)s(orting)e(adv)-5
-b(anced)25 b(and)g(in)m(teractiv)m(e)h(forms)e(of)h(searc)m(hing)g(and)
-g(na)m(vigation,)94 510 y(as)31 b(w)m(ell)e(as)i(automatic)g(v)-5
-b(alidation)29 b(facilities,)f(for)j(suitable)d(fragmen)m(ts)j(of)g
-(the)f(library)-8 b(.)94 753 y Fg(8.2)112 b(T)-9 b(arget)37
-b(Mark)m(et)94 925 y Fl(The)22 b(main)g(target)i(mark)m(et)f(of)g(MO)m
-(W)m(GLI)h(is)e(education.)38 b(Here,)25 b(the)d(p)s(oten)m(tialit)m(y)
-h(o\013ered)f(b)m(y)h(a)g(seman)m(tic)94 1038 y(description)40
-b(of)i(the)g(information)e(for)i(the)g(dev)m(elopmen)m(t)g(of)g(in)m
-(teractiv)m(e,)k(electronic)c(textb)s(o)s(oks)g(are)94
-1151 y(enormous.)h(In)30 b(particular,)g(the)i(MO)m(W)m(GLI)g(protot)m
-(yp)s(e)g(could)e(b)s(ecome)i(an)f(essen)m(tial)g(to)s(ol)g(for)g(a)h
-(wider)94 1264 y(and)e(more)g(friendly)e(dissemination)g(of)i
-(mathematical)h(kno)m(wledge.)235 1377 y(A)42 b(second,)i(p)s(oten)m
-(tial)d(mark)m(et)h(is)e(Publishing.)70 b(Digital)40
-b(libraries)f(curren)m(tly)h(su\013ers)g(from)h(clear)94
-1490 y(limitations)h(due)h(to)i(the)f(mac)m(hine-readable)g(but)f(not)h
-(mac)m(hine)g(understandable)e(enco)s(ding)h(of)h(the)94
-1603 y(information.)74 b(No)43 b(other)f(kind)e(of)i(elab)s(oration)g
-(than)f(displa)m(ying)f(or)i(prin)m(ting)e(is)h(usually)f(p)s(ossible.)
-94 1715 y(There)28 b(is)f(no)g(p)s(ossibilit)m(y)e(of)j(cut-and)g
-(paste,)h(formal)f(c)m(hec)m(king,)h(complex)f(searc)m(hing.)40
-b(F)-8 b(or)28 b(instance,)h(w)m(e)94 1828 y(cannot)f(write)f(a)h
-(spider)e(going)h(around)g(searc)m(hing)g(for)h(a)g(pro)s(of)f(with)f
-(a)i(giv)m(en)g(template,)h(b)s(ecause)e(there)94 1941
-y(is)i(not)i(structure,)f(and)g(in)f(particular)g(no)h(seman)m(tics)h
-(inside)d(the)i(text.)235 2054 y(A)40 b(third)e(mark)m(et)j(are)f
-(industries)d(sp)s(ecialised)g(in)i(formal)g(v)m(eri\014cation)g(and)h
-(securit)m(y)-8 b(.)69 b(These)39 b(in-)94 2167 y(dustries)d(are)i
-(usually)d(ask)m(ed)k(to)f(c)m(hec)m(k)h(a)f(giv)m(en)g(system)g(or)g
-(proto)s(col)f(for)h(securit)m(y)f(issues)f(or)i(formal)94
-2280 y(v)-5 b(alidation)27 b(of)j(functional/temp)s(oral)d(b)s(eha)m
-(viour.)39 b(The)28 b(result)g(of)h(the)h(formalisation)d(w)m(ork)i
-(and)g(its)f(au-)94 2393 y(tomatic)c(v)-5 b(alidation)22
-b(is)g(t)m(ypically)h(in)f(an)h(in)m(ternal)f(format)i(whic)m(h)e(is)g
-(obscure)h(ev)m(en)h(to)g(exp)s(erts.)38 b(Studying)94
-2506 y(the)32 b(p)s(ossibilit)m(y)d(to)k(automatically)f(generate)i(a)e
-(more)h(friendly)c(presen)m(tation)j(in)f(usual)g(mathematical)94
-2619 y(notation)g(is)e(th)m(us)h(a)h(ma)5 b(jor)30 b(topic.)94
-2862 y Fg(8.3)112 b(Consortium's)37 b(Dissemination)e(and)j
-(Exploitation)d(Strategy)94 3034 y Fl(According)h(to)i(the)f(Pro)5
-b(ject)38 b(W)-8 b(orkplan,)38 b(a)f(considerable)e(e\013ort)j(will)c
-(b)s(e)i(dev)m(oted)i(to)f(the)g(dissemina-)94 3147 y
-(tion/exploitation)23 b(of)h(the)g(results.)38 b(During)22
-b(the)i(\014rst)g(six)e(mon)m(ths,)k(the)e(consortium)f(will)e
-(undertak)m(e)j(the)94 3260 y(dev)m(elopmen)m(t)36 b(and)f(execution)g
-(of)h(a)g(w)m(orkplan)e(to)i(ac)m(hiev)m(e)h(successful)d
-(dissemination)f(of)i(the)h(pro)5 b(ject)94 3373 y(results.)38
-b(In)25 b(particular,)g(the)g(v)m(ery)h(nature)f(of)h(the)f(pro)5
-b(ject)26 b(suggests)g(to)h(in)m(v)m(olv)m(e)e(the)h(largest)g(comm)m
-(unit)m(y)94 3485 y(of)j(professionals)e(during)g(the)i(mo)s(delling)d
-(phase.)40 b(Here,)30 b(w)m(e)g(shall)d(b)s(e)h(op)s(en)h(to)g(an)m(y)h
-(con)m(tribution,)e(ev)m(en)94 3598 y(soliciting)g(them,)j(still)d(k)m
-(eeping)i(\014nal)f(tec)m(hnical)i(decisions)e(inside)f(the)i(Pro)5
-b(ject.)94 3711 y(The)30 b(foreseen)h(dissemination)c(steps)k(include:)
-205 3899 y(1.)46 b(Preparation)30 b(of)h(an)f(\\information)f(pac)m
-(k",)j(including)27 b(a)j(folder)g(and)g(CDR)m(OM)g(with)f(demos.)205
-4087 y(2.)46 b(Presen)m(tation)25 b(of)f(MO)m(W)m(GLI)i(to)f(national)e
-(and)h(in)m(ternational)f(conferences)i(on)f(I.T.T)-8
-b(ec)m(hnologies.)205 4274 y(3.)46 b(Presen)m(tation)29
-b(of)f(MO)m(W)m(GLI)h(to)g(thematic)f(conferences)h(on)f(Education,)g
-(Digital)f(Libraries,)f(F)-8 b(or-)321 4387 y(mal)30
-b(V)-8 b(eri\014cation)30 b(and)g(so)h(on.)205 4575 y(4.)46
-b(Adv)m(ertising)32 b(to)h(actors/institutions)f(whic)m(h)g(ma)m(y)h(b)
-s(e)f(direct)g(users)g(or)h(ma)m(y)g(c)m(hannel)g(the)g(infor-)321
-4688 y(mation)d(to)h(\014nal)e(users)h(\(suc)m(h)g(as)h(the)g(W)-8
-b(orld)30 b(Wide)f(W)-8 b(eb)32 b(Consortium\).)205 4875
-y(5.)46 b(T)-8 b(ec)m(hnical)30 b(pap)s(ers)f(and)h(articles)g(to)h(b)s
-(e)f(sen)m(t)h(to)g(sp)s(ecialised)d(reviews.)205 5063
-y(6.)46 b(Managemen)m(t)33 b(of)d(the)h(MO)m(W)m(GLI)g(W)-8
-b(eb)32 b(site.)205 5250 y(7.)46 b(Dissemination)23 b(of)h(tec)m
-(hnical)h(ac)m(hiev)m(emen)m(ts)h(in)d(sp)s(eci\014c)g(scien)m(ti\014c)
-g(comm)m(unities,)i(suc)m(h)f(as)h(XML-)321 5363 y(related)31
-b(in)m(terests)f(groups.)p eop
-%%Page: 14 14
-14 13 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(14)235 171 y(Managemen)m(t)37 b(of)d(the)h(Exploitation)e(and)h
-(Dissemination)f(activities)h(is)f(a)i(sp)s(eci\014c)e(W)-8
-b(ork-pac)m(k)j(age)94 284 y(that)44 b(will)c(b)s(e)j(lead)g(b)m(y)g
-(the)h(Pro)5 b(ject)44 b(Exploitation)e(Board.)79 b(It)44
-b(is)e(planned)f(that)j(all)f(partners)f(will)94 397
-y(nominate)j(quali\014ed)e(p)s(ersons)h(as)h(exploitation)g(managers)g
-(to)h(co)s(ordinate)g(their)e(o)m(wn)h(exploitation)94
-510 y(activities.)39 b(The)26 b(Exploitation)f(Board)h(will)e(b)s(e)i
-(in)f(c)m(harge)i(of)g(the)f(preparation)g(of)g(the)h(exploitation)e
-(and)94 623 y(dissemination)j(plan.)94 909 y Fj(9)135
-b(W)-11 b(orkplan)94 1115 y Fg(9.1)112 b(W)-9 b(orkpac)m(k)j(age)38
-b(list)94 1286 y Fl(The)30 b(w)m(ork)g(plan)f(is)h(structured)f(in)g
-(the)i(follo)m(wing)e(w)m(ork)h(pac)m(k)-5 b(ages)32
-b(and)e(T)-8 b(asks.)94 1494 y Fi(WP0)36 b(Pro)6 b(ject)35
-b(Managemen)m(t)94 1680 y(WP1)h(State)e(of)h(the)f(art)h(and)f
-(Requiremen)m(ts)h(Analysis)321 1866 y(T1.1)46 b Fl(Mathematics)31
-b(and)f(the)h(W)-8 b(eb;)321 2011 y Fi(T1.2)46 b Fl(Structured)29
-b(and)h(F)-8 b(ormal)30 b(Mathematics;)321 2155 y Fi(T1.3)46
-b Fl(Metadata;)321 2300 y Fi(T1.4)g Fl(Searc)m(hing)30
-b(and)g(Retrieving;)321 2444 y Fi(T1.5)46 b Fl(Distribution;)321
-2589 y Fi(T1.6)g Fl(Do)s(cumen)m(t)31 b(Authoring)94
-2775 y Fi(WP2)36 b(T)-9 b(ransformation)321 2961 y(T2.1)46
-b Fl(XML)31 b(Exp)s(ortation;)321 3106 y Fi(T2.2)46 b
-Fl(St)m(ylesheets)31 b(to)g(In)m(termediate)f(Represen)m(tation;)321
-3250 y Fi(T2.3)46 b Fl(Pro)s(of)30 b(T)-8 b(ransformations;)321
-3395 y Fi(T2.4)46 b Fl(Automatic)31 b(extraction)g(of)g(metadata;)321
-3539 y Fi(T2.5)46 b Fl(Presen)m(tational)31 b(St)m(ylesheets)f
-(\(HTML/MathML\);)321 3684 y Fi(T2.6)46 b Fl(Automatic)31
-b(Generation)g(of)f(Pro)s(ofs)g(in)f(Natural)h(Language;)94
-3870 y Fi(WP3)36 b(Metadata)321 4056 y(T3.1)46 b Fl(Use,)31
-b(meaning)f(and)f(classi\014cation;)321 4200 y Fi(T3.2)46
-b Fl(Mo)s(delling;)94 4386 y Fi(WP4)36 b(In)m(terfaces)321
-4572 y(T4.1)46 b Fl(MathML)31 b(rendering/bro)m(wsing)d(engines;)321
-4717 y Fi(T4.2)46 b Fl(Consultation)29 b(Engine)g(\(arc)m(hiving,)h
-(searc)m(hing)g(and)g(retrieving\);)321 4861 y Fi(T4.3)46
-b Fl(Assisted)30 b(Annotation;)321 5006 y Fi(T4.4)46
-b Fl(L)597 4989 y Ff(A)636 5006 y Fl(T)687 5025 y(E)737
-5006 y(X-based)31 b(authoring)e(to)s(ol;)94 5192 y Fi(WP5)36
-b(Distribution)321 5378 y(T5.1)46 b Fl(Arc)m(hitectural)30
-b(Design)g(of)h(the)f(Distribution)e(Mo)s(del;)p eop
-%%Page: 15 15
-15 14 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(15)321 171 y Fi(T5.2)46 b Fl(Protot)m(yp)s(e)31
-b(implemen)m(tation;)321 317 y Fi(T5.3)46 b Fl(In)m(tegration)31
-b(with)e(the)i(Consultation)e(Engine;)94 505 y Fi(WP6)36
-b(T)-9 b(esting)35 b(and)g(V)-9 b(alidation)321 693 y(T6.1)46
-b Fl(Pilot)30 b(Application:)38 b(education;)321 839
-y Fi(T6.2)46 b Fl(Pilot)30 b(Application:)38 b(certi\014ed)30
-b(co)s(de)h(for)f(Ja)m(v)-5 b(a)31 b(cards;)321 985 y
-Fi(T6.3)46 b Fl(Pilot)30 b(Application:)38 b(electronic)31
-b(publishing)94 1173 y Fi(WP7)36 b(Information)d(Dissemination)i(and)g
-(Exploitation)94 1416 y Fg(9.2)112 b(General)38 b(description)94
-1588 y Fl(The)30 b(previous)f(w)m(ork)h(pac)m(k)-5 b(ages)32
-b(are)f(not)g(strictly)e(sequen)m(tial.)235 1700 y(WP1)23
-b(should)d(b)s(e)i(reasonably)f(short;)k(apart)e(from)e(a)i(few)f
-(topics)g(requiring)d(a)k(deep)s(er)e(analysis)g(\(T)-8
-b(asks)94 1813 y(1.3-5\),)31 b(this)d(phase)g(is)g(essen)m(tially)g
-(mean)m(t)h(to)h(rapidly)c(reac)m(h)j(a)h(go)s(o)s(d)e(lev)m(el)g(of)h
-(in)m(ter-op)s(erabilit)m(y)e(among)94 1926 y(the)k(di\013eren)m(t)e
-(sites.)235 2039 y(Most)34 b(part)e(of)h(the)g(w)m(ork)f(is)g(based)g
-(on)h(the)f(p)s(ossibilit)m(y)d(to)34 b(ha)m(v)m(e)g(at)f(our)f(disp)s
-(osal,)f(and)h(as)h(so)s(on)f(as)94 2152 y(p)s(ossible,)g(large)h
-(collections)g(of)g(do)s(cumen)m(ts)g(enco)s(ded)g(with)f(seman)m(tic)i
-(markup.)48 b(One)33 b(strategy)i(is)d(the)94 2265 y(imp)s(ort)k(of)i
-(material)f(\(e.g.)64 b(journal)37 b(articles\))g(written)g(in)g(LaT)-8
-b(eX.)38 b(The)g(dev)m(elopmen)m(t)g(of)g(a)g(suitable)94
-2378 y(LaT)-8 b(eX)42 b(based)e(authoring)g(to)s(ol)h(\(T)-8
-b(ask)41 b(4.4\))h(will)d(need)h(to)i(b)s(egin)d(immediately)-8
-b(,)43 b(as)e(an)f(appropriate)94 2491 y(seman)m(tic)32
-b(enco)s(ding)f(in)g(LaT)-8 b(eX)33 b(has)e(to)i(b)s(e)e(dev)m(elop)s
-(ed)h(\014rst.)44 b(The)32 b(deliv)m(ery)e(of)i(the)h(\014rst)e(protot)
-m(yp)s(e)h(of)94 2604 y(the)f(authoring)e(to)s(ol)h(is)g(sc)m(heduled)f
-(for)h(mon)m(th)g(18.)235 2717 y(A)h(more)h(rapid)d(w)m(a)m(y)k(to)f
-(get)g(meaningful)d(rep)s(ositories)h(of)h(fully)e(structured)h
-(mathematical)i(kno)m(wl-)94 2830 y(edge)j(is)e(b)m(y)h(exp)s(orting)f
-(them)h(from)f(the)h(a)m(v)-5 b(ailable)34 b(libraries)d(of)j(Logical)g
-(F)-8 b(ramew)m(orks)35 b(and)e(Pro)s(of)h(As-)94 2943
-y(sistan)m(ts)i(\(T)-8 b(ask)36 b(2.1\).)58 b(The)35
-b(in)m(telligence)f(con)m(tained)i(in)f(the)g(exp)s(orted)h(XML)g
-(\014les)e(should)g(re\015ect)i(the)94 3055 y(requiremen)m(ts)d
-(de\014ned)g(in)g(the)h(previous)f(w)m(ork)h(pac)m(k)-5
-b(age,)37 b(requiring)32 b(a)i(deep)g(analysis)f(of)h(the)h(markup)94
-3168 y(mo)s(del.)44 b(After)32 b(six)f(mon)m(ths)h(from)g(the)g(b)s
-(eginning)d(of)j(the)g(pro)5 b(ject)33 b(w)m(e)f(plan)f(to)h(ha)m(v)m
-(e)h(a)g(\014rst)e(protot)m(yp)s(e)94 3281 y(of)37 b(the)g(Exp)s
-(ortation)g(Mo)s(dule)f(and)g(a)i(\014rst)e(draft)h(of)g(the)g(Do)s
-(cumen)m(t)h(T)m(yp)s(e)e(Descriptor)h(for)g(the)g(lo)m(w,)94
-3394 y(logical)30 b(lev)m(el.)40 b(This)29 b(is)g(our)h(\014rst)g
-(Milestone.)235 3507 y(A)m(t)k(this)f(p)s(oin)m(t)f(w)m(e)i(ma)m(y)g
-(start)g(the)g(study)e(of)i(the)f(in)m(termediate)g(format)h(of)g(the)f
-(information,)g(and)94 3620 y(the)25 b(implemen)m(tation)e(of)i(the)f
-(st)m(ylesheets)i(p)s(erforming)c(the)j(transformation)f(\(tasks)h
-(T2.2-3\).)41 b(This)23 b(part)94 3733 y(of)33 b(the)g(w)m(ork)h(is)e
-(exp)s(ected)h(to)h(b)s(e)e(essen)m(tially)g(completed)h(after)h(one)f
-(y)m(ear)h(\(second)g(Milestone\).)48 b(Since)94 3846
-y(a)29 b(strong)g(feedbac)m(k)g(is)f(exp)s(ected)h(with)f(presen)m
-(tational)g(issues,)g(w)m(e)h(plan)f(to)h(b)s(egin)e(the)i(dev)m
-(elopmen)m(t)g(of)94 3959 y(presen)m(tational)j(st)m(ylesheets)h
-(around)e(mon)m(th)h(9.)46 b(In)32 b(turn,)g(the)g(need)g(of)g(rapidly)
-e(ha)m(v)m(e)j(at)g(our)f(disp)s(osal)94 4072 y(go)s(o)s(d)25
-b(presen)m(tational)f(engines)h(suggests)g(to)h(b)s(egin)d(their)h(dev)
-m(elopmen)m(t)i(as)f(so)s(on)f(as)h(p)s(ossible)e(\(task)j(4.1\).)235
-4185 y(In)32 b(parallel)e(with)i(these)g(transformation)g(issues,)g(w)m
-(e)h(shall)e(start)i(the)f(study)g(and)g(classi\014cation)f(of)94
-4297 y(metadata,)h(and)e(their)f(concrete)j(mo)s(delling.)235
-4410 y(Summing)c(up,)i(at)h(the)f(end)g(of)h(\014rst)e(y)m(ear)j(w)m(e)
-e(plan)f(to)i(ha)m(v)m(e:)230 4598 y Fe(\017)46 b Fl(a)31
-b(formal)f(Do)s(cumen)m(t)h(T)m(yp)s(e)f(Descriptor)g(of)g(the)h(in)m
-(termediate)f(lev)m(el;)230 4786 y Fe(\017)46 b Fl(a)23
-b(bunc)m(h)e(of)i(st)m(ylesheet)g(p)s(erforming)d(the)i(transformation)
-g(to)h(in)m(termediate)f(represen)m(tation,)i(b)s(oth)321
-4899 y(for)30 b(form)m(ulae)g(and)g(pro)s(ofs;)230 5086
-y Fe(\017)46 b Fl(a)31 b(detailed)e(rep)s(ort)h(on)g(metadata;)230
-5274 y Fe(\017)46 b Fl(a)31 b(\014rst)f(protot)m(yp)s(e)h(mo)s(del)e
-(of)h(metadata)i(\(in)e(RDF)h(format\);)p eop
-%%Page: 16 16
-16 15 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(16)230 171 y Fe(\017)46 b Fl(a)31 b(protot)m(yp)s(e)g(MathML-view)
-m(er.)235 359 y(During)e(the)i(\014rst)e(half)h(of)g(second)h(y)m(ear)g
-(w)m(e)g(shall)d(p)s(erform,)i(in)f(parallel,)f(four)i(ma)5
-b(jor)30 b(activities:)205 547 y(1.)46 b(study)37 b(and)g(dev)m
-(elopmen)m(t)h(of)f(presen)m(tational)h(st)m(ylesheets,)i(b)s(oth)d
-(for)g(expressions)f(and)h(pro)s(ofs,)321 659 y(and)30
-b(automatic)h(extraction)g(of)g(metadata)h(\(tasks)f(T2.4-6\).)205
-847 y(2.)46 b(arc)m(hitectural)25 b(design)g(and)f(implemen)m(tation)g
-(of)i(the)f(consultation)g(engine)f(\(task)j(T4.2,)g(requiring)321
-960 y(the)34 b(metadata)i(mo)s(del\),)e(and)g(of)g(the)g
-(functionalities)d(for)j(assisted)f(annotation)h(in)f(natural)g(lan-)
-321 1073 y(guage)g(of)e(the)h(do)s(cumen)m(ts)f(\(task)h(T4.3,)h
-(requiring)c(b)s(oth)h(the)i(MathML-view)m(er,)h(and)e(a)g(detailed)321
-1186 y(description)e(of)h(the)h(in)m(termediate)f(lev)m(el\).)205
-1373 y(3.)46 b(o)m(v)m(erall)25 b(arc)m(hitectural)g(design)e(and)h
-(\014rst)g(protot)m(yp)s(e)h(implemen)m(tation)e(of)i(the)g
-(distribution)c(mo)s(del)321 1486 y(\(task)32 b(T5.1-T5.2\).)205
-1674 y(4.)46 b(\014nalize)29 b(the)i(\014rst)f(protot)m(yp)s(e)g(of)h
-(a)g(LaT)-8 b(eX)31 b(based)f(authoring)f(to)s(ol)i(\(T)-8
-b(ask)31 b(4.4\))235 1862 y(The)c(second)h(half)f(of)h(the)g(second)g
-(y)m(ear)g(is)f(dev)m(oted)i(to)g(the)f(completion)f(of)h(the)g
-(previous)e(tasks,)j(and)94 1975 y(to)40 b(their)e(in)m(tegration)h
-(inside)e(a)j(single,)g(comp)s(ound)d(application.)66
-b(Around)38 b(this)g(time)g(w)m(e)i(shall)d(also)94 2087
-y(start)31 b(a)g(detailed)e(v)-5 b(alidation)29 b(of)h(the)h
-(application,)e(according)h(to)h(three)g(pilot)e(applications:)205
-2275 y(1.)46 b(F)-8 b(ormalisation)36 b(of)h(a)g(full)e(undergraduate)h
-(course)g(in)g(algebra)h(or)f(analysis)g(for)g(didactical)g(pur-)321
-2388 y(p)s(oses.)205 2576 y(2.)46 b(F)-8 b(ormalization)44
-b(of)f(\(part)h(of)7 b(\))44 b(the)f(pro)s(cess)g(of)h(loading,)h(v)m
-(erifying)d(and)h(executing)h(an)f(applet)321 2689 y(in)m(to)32
-b(a)g(smart)f(card.)44 b(This)29 b(application)h(will)f(pro)m(vide)i(a)
-g(case)i(study)d(close)i(to)g(b)s(oth)f(information)321
-2801 y(tec)m(hnology)38 b(\(IT\))g(industry)c(and)j(Computer)f(Science)
-h(researc)m(h,)i(where)e(the)g(presen)m(tation)g(and)321
-2914 y(la)m(y)m(out)h(needs)f(are)g(not)h(exactly)g(the)f(same)g(as)h
-(in)e(Mathematics.)62 b(The)36 b(example)h(concerns)g(the)321
-3027 y(represen)m(tation)c(of)f(di\013eren)m(t)g(abstract)i(state)g
-(mac)m(hines,)e(transition)f(systems,)j(t)m(yping)e(calculus,)321
-3140 y(and)h(program)g(co)s(de.)51 b(Suc)m(h)33 b(concepts)h(are)g
-(pragmatic)g(use)f(cases)h(of)g(the)g(formal)e(concepts)j(that)321
-3253 y(usually)28 b(app)s(ears)i(in)f(securit)m(y)h(ev)-5
-b(aluations)30 b(of)g(IT)g(pro)s(ducts)f(and)h(Computer)g(Science)g
-(articles.)205 3441 y(3.)46 b(Mak)m(e)33 b(maximal)c(use)i(of)f(con)m
-(ten)m(t)j(mark)m(ed-up)d(articles)g(in)g(a)h(solely)f(electronic)h
-(scien)m(ti\014c)f(ph)m(ysics)321 3554 y(journal.)52
-b(This)33 b(will)f(allo)m(w)j(us)f(to)h(demonstrate)g(the)g(b)s
-(ene\014ts)f(of)h(con)m(ten)m(t)h(mark-up)e(for)g(searc)m(h,)321
-3667 y(retriev)-5 b(al,)34 b(and)f(re-use)h(of)g(mathematical)g(con)m
-(ten)m(t,)i(and)d(user)g(customisable)g(con)m(ten)m(t)j(presen)m(ta-)
-321 3779 y(tion.)k(Sev)m(eral)30 b(articles)g(will)d(b)s(e)i(pro)s
-(cessed)h(to)g(test)h(scop)s(e,)g(functionalit)m(y)-8
-b(,)29 b(and)g(user)g(friendliness)321 3892 y(of)e(the)h(authoring)e
-(to)s(ol)h(dev)m(elop)s(ed)f(in)g(T)-8 b(ask)27 b(4.4.)41
-b(The)26 b(to)s(ol)h(will)d(b)s(e)j(re\014ned)f(and)g(the)h(mathemat-)
-321 4005 y(ical)34 b(seman)m(tics)i(co)m(v)m(ered)g(extended.)54
-b(The)35 b(suite)f(of)h(articles)f(will)f(b)s(e)h(used)g(to)i(sho)m(w)e
-(b)s(ene\014ts)g(of)321 4118 y(automated)e(annotation)e(and)g
-(cross-linking)e(b)s(et)m(w)m(een)j(related)f(mathematical)h(concepts.)
-235 4306 y(The)26 b(last)h(six)f(mon)m(ths)h(are)g(mainly)e(dev)m(oted)
-j(to)f(testing,)h(debugging,)f(v)-5 b(alidation,)26 b(dissemination)e
-(of)94 4419 y(results)29 b(and)h(exploitation)f(plans.)p
-eop
-%%Page: 17 17
-17 16 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(17)94 171 y Fg(9.3)112 b(W)-9 b(ork)37 b(P)m(ac)m(k)-6
-b(age)38 b(descriptions)94 343 y Fi(9.3.1)105 b(Pro)6
-b(ject)36 b(Managemen)m(t)94 633 y(w)m(ork)f(pac)m(k)-6
-b(age)36 b(n)m(um)m(b)s(er:)k Fl(0)30 b(-)h(Pro)5 b(ject)31
-b(Managemen)m(t)94 746 y Fi(Start)j(date)g(or)i(starting)e(ev)m(en)m
-(t:)41 b Fl(mon)m(th)30 b(0)h(-)f(mon)m(th)h(30)94 1035
-y Fi(P)m(articipan)m(t)k(Num)m(b)s(er:)479 b Fl(1)236
-b(2)f(3)g(4)g(5)h(6)94 1148 y Fi(P)m(erson-mon)m(th)35
-b(p)s(er)g(participan)m(t:)40 b Fl(8)236 b(0)f(0)g(0)g(0)h(0)94
-1507 y Fi(Ob)6 b(jectiv)m(es:)49 b Fl(General)35 b(pro)5
-b(ject)35 b(managemen)m(t)i(and)d(co)s(ordination.)53
-b(Kno)m(wledge)34 b(and)h(skills)d(transfer)94 1620 y(b)s(et)m(w)m(een)
-f(consortium)e(mem)m(b)s(ers.)40 b(Relation)30 b(to)h(the)g(Europ)s
-(ean)e(Commission.)94 1851 y Fi(Description)43 b(of)f(w)m(ork:)53
-b Fl(The)36 b(Pro)5 b(ject)38 b(managemen)m(t)g(will)c(b)s(e)i(assured)
-g(b)m(y)g(the)h(follo)m(wing)e(relev)-5 b(an)m(t)94 1964
-y(roles:)57 b(a\))39 b(Pro)5 b(ject)40 b(Manager,)i(b\))c(Exploitation)
-f(manager,)42 b(c\))d(W)-8 b(ork-pac)m(k)j(age)42 b(Leaders)d(d\)T)-8
-b(ec)m(hnical)94 2077 y(Con)m(tributors,)22 b(and)g(b)m(y)g(the)g
-(follo)m(wing)f(Pro)5 b(ject)22 b(Bo)s(dies:)36 b(a\)Pro)5
-b(ject)24 b(Co)s(ordination)c(Committee)i(\(PCC\),)94
-2190 y(b\))30 b(Pro)5 b(ject)31 b(Exploitation)e(Board)i(\(PEB\))g(and)
-f(e\))h(W)-8 b(ork-pac)m(k)j(age)34 b(T)-8 b(eams.)94
-2303 y(The)25 b Fi(Pro)6 b(ject)30 b(Manager)25 b Fl(c)m(hairs)g(the)h
-(PCC.)e(The)h(mandate)h(of)g(the)f(PCC)g(is)f(to)i(represen)m(t)g(the)f
-(Pro)5 b(ject,)94 2416 y(rep)s(ort)25 b(to)h(the)g(Commission,)e
-(monitor)h(o)m(v)m(erall)h(p)s(erformance)f(of)g(the)h(pro)5
-b(ject,)27 b(ensure)e(accomplishmen)m(t)94 2529 y(of)g(the)h(tec)m
-(hnical)f(ob)5 b(jectiv)m(es,)27 b(promote)f(pro)5 b(ject)26
-b(visibilit)m(y)-8 b(,)23 b(promote)j(dissemination)c(of)k(pro)5
-b(ject)26 b(results)94 2642 y(in)e(the)i(relev)-5 b(an)m(t)26
-b(in)m(ternational)e(forums,)i(promote)g(acceptance)h(of)f(pro)5
-b(ject)26 b(results,)f(administer)f(pro)5 b(ject)94 2755
-y(resources)27 b(and)g(monitor)g(pro)5 b(ject)27 b(sp)s(ending.)38
-b(The)26 b Fi(Exploitation)31 b(Manager)d Fl(will)d(b)s(e)h(resp)s
-(onsible)f(for)94 2868 y(co)s(ordinating)f(dissemination)f(and)i
-(exploitation)g(activities)g(undertak)m(en)h(b)m(y)f(the)h(Pro)5
-b(ject)27 b(Exploitation)94 2981 y(Board)k(\(PEB\))g(in)e(close)i(co)s
-(op)s(eration)f(with)f(the)h(Pro)5 b(ject)32 b(Co)s(ordination)c
-(Committee)j(\(PCC\).)94 3093 y(Information)e(\015o)m(w)h(within)d(the)
-j(Pro)5 b(ject)31 b(will)c(b)s(e)j(ensured)e(b)m(y)i(exc)m(hange)i(of)e
-(in)m(ternal)e(tec)m(hnical)i(pap)s(ers,)94 3206 y(noti\014cation)f(of)
-g(relev)-5 b(an)m(t)30 b(new)f(publications)d(tec)m(hnologies)k(or)g
-(standards,)e(and)h(rep)s(orts)g(from)f(external)94 3319
-y(meetings.)40 b(All)29 b(tec)m(hnical)h(do)s(cumen)m(tation)g
-(generated)g(b)m(y)g(the)g(pro)5 b(ject)31 b(will)c(b)s(e)i(exc)m
-(hangeable)i(in)e(elec-)94 3432 y(tronic)k(format,)i(according)f(to)g
-(a)g(set)g(of)g(guidelines)d(to)j(b)s(e)f(agreed)h(at)h(pro)5
-b(ject)34 b(start-up.)50 b(The)33 b(pro)5 b(ject)94 3545
-y(Manager)33 b(will)c(enforce)j(adherence)g(to)g(these)g(guidelines.)42
-b(Only)30 b(strictly)h(formal)g(corresp)s(ondence)g(will)94
-3658 y(b)s(e)h(exc)m(hanged)i(b)m(y)e(ordinary)f(mail)g(and)h(telefax.)
-48 b(Urgen)m(t)34 b(corresp)s(ondence)e(o)m(v)m(er)i(e-email)e(will)e
-(b)s(e)i(sen)m(t)94 3771 y(with)d(a)i(request)f(for)g(explicit)f(ac)m
-(kno)m(wledgemen)m(t.)94 3884 y(The)40 b(Co)s(ordinating)e(P)m(artner)i
-(will)e(b)s(e)h(resp)s(onsible)f(to)j(prepare)e(and)h(main)m(tain)f(a)i
-(W)-8 b(eb)41 b(page)g(of)f(the)94 3997 y(pro)5 b(ject)31
-b(and)f(a)g(CVS)g(rep)s(ository)f(\(also)i(a)m(v)-5 b(ailable)30
-b(via)g(W)-8 b(eb\).)94 4228 y Fi(Deliv)m(erables:)41
-b Fl(Cost)31 b(Statemen)m(ts)g(and)f(Pro)5 b(ject)31
-b(Rep)s(orts)f(\(mon)m(th)h(12,)g(20,)h(30\).)94 4404
-y Fi(D0.a)46 b Fl(Self)29 b(Assesmen)m(t)i(parameters)g(and)e
-(criteria.)94 4587 y Fi(D0.b)46 b Fl(First)30 b(Self-assesmen)m(t)g
-(Rep)s(ort.)94 4770 y Fi(D0.c)46 b Fl(Second)30 b(Self-assesmen)m(t)h
-(Rep)s(ort.)94 4953 y Fi(D0.d)46 b Fl(Final)29 b(Self-assesmen)m(t)i
-(Rep)s(ort.)94 5247 y Fi(Milestones)41 b(and)f(exp)s(ected)h(results:)
-50 b Fl(Main)34 b(milestones)h(are)g(the)h(p)s(erio)s(dic)c(meetings,)
-37 b(at)e(mon)m(th)94 5360 y(6,)c(12,)g(20,)h(24,)f(30.)p
-eop
-%%Page: 18 18
-18 17 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(18)94 171 y Fi(9.3.2)105 b(Requiremen)m(t)35 b(Analysis)94
-461 y(w)m(ork)g(pac)m(k)-6 b(age)36 b(n)m(um)m(b)s(er:)k
-Fl(1)30 b(-)h(Requiremen)m(t)f(Analysis)94 574 y Fi(Start)k(date)g(or)i
-(starting)e(ev)m(en)m(t:)41 b Fl(mon)m(th)30 b(0)h(-)f(mon)m(th)h(6)94
-874 y Fi(P)m(articipan)m(t)k(Num)m(b)s(er:)479 b Fl(1)236
-b(2)f(3)g(4)g(5)h(6)94 987 y Fi(P)m(erson-mon)m(th)35
-b(p)s(er)g(participan)m(t:)40 b Fl(3)236 b(4)f(3)g(6)g(3)h(1)94
-1335 y Fi(Ob)6 b(jectiv)m(es:)45 b Fl(De\014nition)31
-b(of)i(the)g(application)e(scenarios.)47 b(Precise)33
-b(articulation)e(of)i(all)f(the)g(function-)94 1448 y(alities)26
-b(required)g(b)m(y)h(the)g(system,)h(and)f(all)f(p)s(ossible)f(exp)s
-(ected)j(in)m(teractions)f(with)f(do)s(cumen)m(ts.)39
-b(Ov)m(erall)94 1561 y(requiremen)m(ts)29 b(of)i(the)g(distribution)26
-b(mo)s(del)j(of)i(the)g(library)-8 b(.)94 1792 y Fi(Description)44
-b(of)g(w)m(ork:)55 b Fl(The)37 b(w)m(ork)h(plan)f(is)f(naturally)g
-(organised)i(in)e(subtasks)h(according)h(to)g(the)94
-1905 y(di\013eren)m(t)30 b(basic)g(kind)e(of)j(in)m(teractions)f(and)g
-(manipulation)d(to)k(b)s(e)f(considered,)f(namely:)94
-2093 y Fi(T1.1)46 b Fl(Mathematics)31 b(and)f(the)h(W)-8
-b(eb.)41 b(State)31 b(of)g(the)f(art,)h(standards)f(and)g(to)s(ols.)94
-2280 y Fi(T1.2)46 b Fl(Structured)39 b(and)h(F)-8 b(ormal)41
-b(Mathematics.)73 b(Delineation)40 b(and)g(la)m(y)m(ering)g(of)h(Seman)
-m(tic)g(Comp)s(o-)321 2393 y(nen)m(ts.)g(Requiremen)m(ts)28
-b(for)h(the)h(in)m(teraction)f(with)f(to)s(ols)h(for)g(the)h
-(automation)g(of)f(formal)g(reason-)321 2506 y(ing.)94
-2694 y Fi(T1.3)46 b Fl(Metadata.)i(Classi\014cation)31
-b(and)h(data)h(mining)d(for)i(con)m(ten)m(t-based)i(mathematical)e(do)s
-(cumen)m(ts,)321 2807 y(and)e(k)m(ey)h(arc)m(hitectural)g(guidelines)c
-(for)j(the)h(metadata)h(mo)s(del.)94 2994 y Fi(T1.4)46
-b Fl(Searc)m(hing)30 b(and)f(Retrieving.)40 b(State)32
-b(of)e(the)h(art,)g(use)f(cases)h(and)f(application)e(scenarios.)94
-3182 y Fi(T1.5)46 b Fl(Distribution.)38 b(Distributed)28
-b(do)s(cumen)m(t)i(rep)s(ositories)f(and)h(p)s(eer-to-p)s(eer)h(in)m
-(terop)s(erabilit)m(y)-8 b(.)94 3369 y Fi(T1.6)46 b Fl(Do)s(cumen)m(t)
-31 b(Authoring.)39 b(State)32 b(of)e(the)h(art,)g(use)f(cases)h(and)f
-(application)f(scenarios.)94 3557 y(P)m(art)24 b(of)f(the)g(activit)m
-(y)-8 b(,)25 b(co)m(v)m(ering)f(T)-8 b(asks)23 b(T1.1-2-6)i(should)c(b)
-s(e)i(concluded)e(within)g(the)i(\014rst)f(three)h(mon)m(ths,)94
-3670 y(with)k(the)h(preliminary)d(rep)s(ort)j(D1.a.)41
-b(The)28 b(main)f(aim)h(of)h(this)e(phase)h(is)f(to)i(rapidly)d(reac)m
-(h)j(a)g(go)s(o)s(d)f(lev)m(el)94 3783 y(of)h(in)m(ter-op)s(erabilit)m
-(y)e(among)i(the)g(di\013eren)m(t)g(sites,)g(b)m(y)g(implemen)m(ting)e
-(a)i(suitable)e(p)s(olitic)g(of)i(kno)m(wledge)94 3896
-y(and)c(skills)e(transfer)j(b)s(et)m(w)m(een)g(the)g(mem)m(b)s(ers)g
-(of)g(the)g(consortium)f(\(short)g(visits)g(and/or)h(small)e(thematic)
-94 4009 y(w)m(orkshops,)30 b(according)g(to)h(the)g(case\).)235
-4122 y(Ho)m(w)m(ev)m(er,)i(some)e(delicate)g(issues,)f(suc)m(h)g(as)h
-(Metadata,)i(Searc)m(hing)d(and)h(Retrieving)e(and)h(Distribu-)94
-4235 y(tion)g(\(T)-8 b(ask)31 b(T1.3-4-5\))i(will)28
-b(ev)m(en)m(tually)i(require)f(a)i(deep)s(er)e(analysis)g(\(deliv)m
-(erables)g(D1.b)i(and)f(D1.c\).)235 4347 y(WP1)k(will)d(b)s(e)h(ev)m
-(en)m(tually)i(closed)f(during)e(the)i(\014rst)g(meeting)g(of)h(the)f
-(Pro)5 b(ject)34 b(\(mon)m(th)g(six\),)f(when)94 4460
-y(all)c(the)i(rep)s(orts)e(will)f(b)s(e)i(discussed)e(and)i(appro)m(v)m
-(ed.)94 4691 y Fi(Deliv)m(erables:)94 4879 y(D1.a)46
-b Fl(Preliminary)27 b(Rep)s(ort)j(on)g(Application)f(Scenarios)h(and)f
-(Requiremen)m(t)h(Analysis.)94 5067 y Fi(D1.b)46 b Fl(Structure)30
-b(and)f(Meta-Structure)j(of)e(Mathematical)i(Do)s(cumen)m(ts.)94
-5254 y Fi(D1.c)46 b Fl(Distributed)29 b(Electronic)h(Libraries:)38
-b(dev)m(elopmen)m(t,)31 b(arc)m(hiving,)e(retrieving.)p
-eop
-%%Page: 19 19
-19 18 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(19)94 385 y Fi(Milestones)35 b(and)f(exp)s(ected)g(results:)40
-b Fl(The)29 b(preliminary)d(rep)s(ort)j(D1.a)i(is)e(not)h(a)g(real)f
-(milestone:)40 b(it)94 498 y(should)24 b(b)s(e)i(considered)f(as)i(a)f
-(\014rst)g(in)m(ternal)f(draft)h(summarising)d(the)k(main)e
-(functionalities)f(required)g(b)m(y)94 610 y(the)35 b(system)g(and)f
-(the)i(basic)e(in)m(telligence)g(to)h(add)f(to)i(do)s(cumen)m(ts,)g(as)
-f(markup)f(and/or)h(metadata,)j(to)94 723 y(meet)30 b(these)g
-(requiremen)m(ts.)39 b(All)28 b(these)i(issues)e(will)f(b)s(e)i(ev)m
-(en)m(tually)g(detailed)g(in)f(D1.b)i(and)e(D1.c,)k(whic)m(h)94
-836 y(are)f(real)f(Milestones,)g(since)g(the)g(rest)h(of)f(the)h(w)m
-(ork)f(will)e(b)s(e)i(largely)g(driv)m(en)f(b)m(y)h(them.)p
-eop
-%%Page: 20 20
-20 19 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(20)94 171 y Fi(9.3.3)105 b(T)-9 b(ransformation)94
-414 y(w)m(ork)35 b(pac)m(k)-6 b(age)36 b(n)m(um)m(b)s(er:)k
-Fl(2)30 b(-)h(T)-8 b(ransformation)94 527 y Fi(Start)34
-b(date)g(or)i(starting)e(ev)m(en)m(t:)41 b Fl(mon)m(th)30
-b(3)h(-)f(mon)m(th)h(21)94 827 y Fi(P)m(articipan)m(t)k(Num)m(b)s(er:)
-479 b Fl(1)236 b(2)f(3)g(4)g(5)h(6)94 940 y Fi(P)m(erson-mon)m(th)35
-b(p)s(er)g(participan)m(t:)40 b Fl(13)191 b(4)235 b(3)g(11)190
-b(3)236 b(0)94 1241 y Fi(Ob)6 b(jectiv)m(es:)43 b Fl(This)31
-b(w)m(ork)h(pac)m(k)-5 b(age)34 b(is)d(dev)m(oted)i(to)f(the)g(complex)
-g(issue)f(of)h(transforming)e(a)j(lo)m(w)e(lev)m(el,)94
-1354 y(con)m(ten)m(t)i(description)c(of)i(mathematics)g
-(\(understandable)e(b)m(y)i(automatic)h(applications)d(for)h(the)i(mec)
-m(h-)94 1466 y(anization)c(of)g(mathematics\))h(in)m(to)f(a)h(h)m
-(uman-readable)e(presen)m(tational)h(format.)40 b(It)29
-b(co)m(v)m(ers)g(b)s(oth)f(state-)94 1579 y(men)m(ts)43
-b(and)g(pro)s(ofs.)77 b(The)43 b(transformation)f(will)e(b)s(e)j
-(decomp)s(osed)f(in)g(a)h(sequence)h(of)f(in)m(termediate)94
-1692 y(steps,)37 b(for)e(mo)s(dularit)m(y)f(reasons.)56
-b(All)34 b(transformations)h(will)d(b)s(e)j(implemen)m(ted)f(b)m(y)i
-(means)f(of)h(XSL)-8 b(T-)94 1805 y(st)m(ylesheets.)38
-b(St)m(ylesheets)21 b(will)d(b)s(e)i(simple,)h(mo)s(dular,)f(and)g
-(easily)g(comp)s(osable.)37 b(All)19 b(the)i(transformation)94
-1918 y(pro)s(cess)30 b(should)e(b)s(e)i(indep)s(enden)m(t)e(from)i(an)m
-(y)h(sp)s(eci\014c)e(application.)94 2149 y Fi(Description)36
-b(of)f(w)m(ork:)40 b Fl(The)30 b(w)m(ork)h(pac)m(k)-5
-b(age)32 b(is)e(articulated)f(in)h(the)g(follo)m(wing)f(tasks.)94
-2337 y Fi(T2.1)46 b Fl(XML)29 b(exp)s(ortation.)40 b(The)28
-b(task)h(is)e(dev)m(oted)j(to)f(the)g(translation)f(of)h(the)f
-(standard)g(library)e(of)j(the)321 2450 y(COQ)36 b(Pro)s(of)g(assistan)
-m(t)h(in)m(to)f(a)h(suitable)e(XML)i(dialect,)g(and)f(to)h(the)g
-(de\014nition)d(of)j(a)g(lo)m(w-lev)m(el)321 2563 y(DTD)e(for)f(the)h
-(terms)f(of)h(the)f(Calculus)f(of)h(Inductiv)m(e)g(Construction)f
-(\(the)i(logical)f(system)g(used)321 2676 y(b)m(y)d(COQ\).)94
-2863 y Fi(T2.2)46 b Fl(St)m(ylesheets)38 b(to)g(in)m(termediate)g
-(represen)m(tation.)62 b(Implemen)m(tation)37 b(of)h(a)g(bunc)m(h)f(of)
-h(st)m(ylesheets)321 2976 y(transforming)30 b(the)g(lo)m(w-lev)m(el)h
-(logical)f(description)f(of)i(COQ-expressions)e(in)m(to)h(a)i
-(\\standard")e(in-)321 3089 y(termediate,)h(con)m(ten)m(t-lev)m(el)i
-(represen)m(tation)d(suc)m(h)g(as)h(MathML)g(con)m(ten)m(t.)94
-3277 y Fi(T2.3)46 b Fl(Pro)s(of)30 b(transformation.)43
-b(Similar)28 b(to)j(the)h(previous)d(task,)j(but)f(for)g(pro)s(ofs.)42
-b(The)30 b(delicate)h(p)s(oin)m(t,)321 3389 y(here,)41
-b(is)c(the)i(fact)g(that)g(no)f(\\standard")h(in)m(termediate)f
-(represen)m(tation)g(curren)m(tly)g(exists,)i(and)321
-3502 y(th)m(us)30 b(it)g(has)g(to)h(b)s(e)f(de\014ned.)94
-3690 y Fi(T2.4)46 b Fl(Automatic)27 b(extraction)f(of)h(metadata.)41
-b(Relev)-5 b(an)m(t)26 b(metadata)i(suc)m(h)e(as)g(list)f(of)h(iden)m
-(ti\014ers)e(in)h(criti-)321 3803 y(cal)k(p)s(ositions)d(inside)g
-(statemen)m(ts)k(can)e(b)s(e)g(automatically)g(extracted)h(from)f(the)g
-(fully)e(structured)321 3916 y(represen)m(tation)44 b(of)f
-(mathematical)h(ob)5 b(jects.)81 b(This)42 b(information)f(can)j(then)f
-(b)s(e)g(exploited)g(for)321 4029 y(searc)m(hing)32 b(and)g
-(retrieving.)45 b(The)31 b(precise)h(list)f(of)h(metadata)i(will)29
-b(b)s(e)j(de\014ned)f(in)g(W)-8 b(ork)33 b(P)m(ac)m(k)-5
-b(age)321 4142 y(3.)94 4329 y Fi(T2.5)46 b Fl(Presen)m(tational)32
-b(St)m(ylesheets.)46 b(Implemen)m(tation)31 b(of)h(a)h(bunc)m(h)e(of)h
-(st)m(ylesheets)h(transforming)d(the)321 4442 y(in)m(termediate)j(con)m
-(ten)m(t)h(represen)m(tation)f(in)m(to)g(a)g(suitable)e(rendering)g
-(format)i(\(MathML)h(presen-)321 4555 y(tation,)d(HTML,)g(etc.\))94
-4743 y Fi(T2.6)46 b Fl(Automatic)39 b(Pro)s(of)g(Generation)g(in)f
-(Natural)h(Language.)67 b(Similar)36 b(to)k(the)f(previous)f(task)h
-(but)321 4856 y(for)33 b(pro)s(ofs.)46 b(In)32 b(this)g(case,)i(a)f
-(fully)d(automated)k(approac)m(h)f(is)f(unlik)m(ely)e(to)j(pro)s(duce)f
-(really)f(satis-)321 4969 y(factory)g(results,)e(and)g(the)h(pro)s
-(cess)f(should)f(b)s(e)h(p)s(ossibly)e(in)m(tegrated)j(with)e(some)j
-(mec)m(hanism)e(for)321 5081 y(in)m(teractiv)m(e)i(annotation)g(\(see)g
-(T)-8 b(ask)31 b(4.3\).)94 5340 y Fi(Deliv)m(erables:)p
-eop
-%%Page: 21 21
-21 20 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(21)94 171 y Fi(D2.a)46 b Fl(Exp)s(ortation)29 b(mo)s(dule.)94
-359 y Fi(D2.b)46 b Fl(Do)s(cumen)m(t)31 b(T)m(yp)s(e)f(Descriptors.)94
-547 y Fi(D2.c-d)46 b Fl(St)m(ylesheets)31 b(to)g(in)m(termediate)f
-(represen)m(tation)h(\(form)m(ulae)f(and)g(pro)s(ofs\).)94
-734 y Fi(D2.e-f)46 b Fl(Presen)m(tational)30 b(St)m(ylesheets)h(\(form)
-m(ulae)f(and)g(pro)s(ofs\).)94 922 y Fi(D2.g)46 b Fl(T)-8
-b(o)s(ols)30 b(for)g(automatic)i(extraction)f(of)f(Metadata.)94
-1180 y Fi(Milestones)41 b(and)g(exp)s(ected)g(results:)51
-b Fl(The)35 b(exp)s(ortation)g(mo)s(dule)f(D2.a.)58 b(is)34
-b(our)h(\014rst)g(milestone:)94 1293 y(without)27 b(a)h(large)h(amoun)m
-(t)f(of)g(a)m(v)-5 b(ailable)27 b(do)s(cumen)m(ts)h(it)g(w)m(ould)f(b)s
-(e)g(imp)s(ossible)d(to)29 b(test)g(the)f(transforma-)94
-1406 y(tions.)39 b(Similarly)-8 b(,)26 b(without)i(a)h(precise)f
-(de\014nition)e(of)i(the)h(in)m(termediate)f(language,)i(and)e(a)h
-(large)f(sample)94 1519 y(of)34 b(do)s(cumen)m(ts)g(in)f(this)g(format)
-i(\(D2c-d\))h(w)m(e)e(cannot)h(start)g(to)g(seriously)d(address)h(the)i
-(presen)m(tational)94 1632 y(issue.)40 b(Note)31 b(that)g(the)g(in)m
-(termediate)f(language)h(is)e(the)i(real)f(core)h(of)f(the)h(whole)e
-(pro)5 b(ject.)235 1745 y(The)29 b(dev)m(elopmen)m(t)g(of)g(presen)m
-(tational)g(st)m(ylesheets)g(also)g(dep)s(ends)e(in)h(an)h(essen)m
-(tial)f(w)m(a)m(y)i(on)f(the)g(de-)94 1858 y(v)m(elopmen)m(t)23
-b(of)h(rendering/bro)m(wsing)c(engines)i(for)h(the)g(c)m(hosen)h
-(presen)m(tational)e(language)i(\(in)e(particular,)94
-1971 y(for)30 b(MathML\).)235 2084 y(F)-8 b(or)32 b(the)g(end)f(of)g
-(mon)m(th)h(18,)g(w)m(e)g(exp)s(ect)g(to)g(ha)m(v)m(e)h(a)f(\014rst)f
-(w)m(orking)f(protot)m(yp)s(e)i(of)g(the)g(whole)e(appli-)94
-2196 y(cation.)p eop
-%%Page: 22 22
-22 21 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(22)94 171 y Fi(9.3.4)105 b(Metadata)94 579 y(w)m(ork)35
-b(pac)m(k)-6 b(age)36 b(n)m(um)m(b)s(er:)k Fl(3)30 b(-)h(Metadata)94
-692 y Fi(Start)j(date)g(or)i(starting)e(ev)m(en)m(t:)41
-b Fl(mon)m(th)30 b(6)h(-)f(mon)m(th)h(21)94 993 y Fi(P)m(articipan)m(t)
-k(Num)m(b)s(er:)479 b Fl(1)236 b(2)f(3)g(4)g(5)h(6)94
-1105 y Fi(P)m(erson-mon)m(th)35 b(p)s(er)g(participan)m(t:)40
-b Fl(3)236 b(3)f(8)g(3)g(3)h(0)94 1524 y Fi(Ob)6 b(jectiv)m(es:)39
-b Fl(Delineation)28 b(of)h(the)g(basic)f(in)m(telligence)g(to)h(b)s(e)f
-(considered)g(for)g(encapsulation)g(in)f(meta-)94 1637
-y(data,)34 b(in)d(order)h(to)h(meet)g(the)g(needs)f(delineated)g
-(during)e(Requiremen)m(t)i(Analysis)e(\(WP1\).)49 b(De\014nition)94
-1750 y(and)30 b(Dev)m(elopmen)m(t)h(of)g(a)g(sp)s(eci\014c)e(Markup)h
-(Mo)s(del)f(in)g(RDF.)94 1981 y Fi(Description)42 b(of)f(w)m(ork:)51
-b Fl(The)35 b(precise)g(de\014nition)e(of)j(metadata)h(and)e(their)g
-(actual)h(Markup)f(Mo)s(del)94 2094 y(are)24 b(essen)m(tial)g(asp)s
-(ects)g(for)g(implemen)m(ting)e(the)i(main)f(functionalities)e(of)j
-(the)h(library)-8 b(,)23 b(and)g(esp)s(ecially)g(for)94
-2207 y(arc)m(hiving,)33 b(searc)m(hing)g(and)g(retrieving)f(issues.)48
-b(The)32 b(w)m(ork)i(will)c(b)s(e)j(articulated)g(in)f(t)m(w)m(o)i
-(main,)f(almost)94 2320 y(sequen)m(tial,)d(tasks:)94
-2507 y Fi(T3.1)46 b Fl(Use,)36 b(meaning)f(and)f(classi\014cation.)53
-b(This)34 b(task,)j(based)d(on)h(the)g(previous)f(do)s(cumen)m(ts)g(D1)
-i(and)321 2620 y(D2,)h(is)d(aimed)g(to)i(pro)m(vide)e(a)h(precise)f
-(de\014nition)f(and)h(classi\014cation)g(of)h(all)f(metadata)i
-(required)321 2733 y(for)30 b(an)h(e\013ectiv)m(e)h(and)d(e\016cien)m
-(t)i(managemen)m(t)h(of)f(the)f(library)-8 b(.)94 2921
-y Fi(T3.2)46 b Fl(Mo)s(delling.)51 b(This)32 b(is)i(dev)m(oted)i(to)f
-(the)g(de\014nition)d(of)i(a)h(precise)f(markup)f(mo)s(del.)52
-b(T)-8 b(o)35 b(this)f(aim,)321 3034 y(w)m(e)d(plan)e(to)i(use)f(the)h
-(Resource)g(Description)e(F)-8 b(ramew)m(ork)32 b(of)e(W3C.)94
-3339 y Fi(Deliv)m(erables:)94 3527 y(D3.a)46 b Fl(Metadata)32
-b(for)f(Mathematics;)94 3715 y Fi(D3.b)46 b Fl(Metadata)33
-b(Mo)s(del;)94 4020 y Fi(Milestones)39 b(and)f(exp)s(ected)g(results:)
-46 b Fl(The)32 b(de\014nition)f(of)i(the)h(Metadata)h(mo)s(del)d(is)g
-(a)h(main)f(mile-)94 4133 y(stone,)c(since)e(the)h(arc)m(hitectural)f
-(design)g(and)f(implemen)m(tation)h(of)g(the)h(consultation)f(engine)g
-(\(T)-8 b(ask)27 b(4.2\))94 4246 y(will)j(b)s(e)j(essen)m(tially)f
-(based)g(on)h(it.)48 b(Similarly)-8 b(,)31 b(it)h(is)g(required)f(for)i
-(T)-8 b(ask)33 b(2.4)h(\(automatic)h(extraction)e(of)94
-4359 y(metadata\).)p eop
-%%Page: 23 23
-23 22 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(23)94 171 y Fi(9.3.5)105 b(In)m(terfaces)94 461
-y(w)m(ork)35 b(pac)m(k)-6 b(age)36 b(n)m(um)m(b)s(er:)k
-Fl(4)30 b(-)h(In)m(terfaces)94 574 y Fi(Start)j(date)g(or)i(starting)e
-(ev)m(en)m(t:)41 b Fl(mon)m(th)30 b(3)h(-)f(mon)m(th)h(24)94
-869 y Fi(P)m(articipan)m(t)k(Num)m(b)s(er:)479 b Fl(1)236
-b(2)f(3)g(4)g(5)h(6)94 982 y Fi(P)m(erson-mon)m(th)35
-b(p)s(er)g(participan)m(t:)40 b Fl(16)191 b(16)f(5)235
-b(4)g(14)191 b(0)94 1396 y Fi(Ob)6 b(jectiv)m(es:)65
-b Fl(This)41 b(W)-8 b(ork-P)m(ac)m(k)j(age)47 b(is)41
-b(dev)m(oted)j(to)g(the)e(design)g(and)g(the)h(implemen)m(tation)e(of)i
-(the)94 1509 y(in)m(terfaces)25 b(to)h(the)f(library)-8
-b(,)24 b(co)m(v)m(ering)i(rendering,)e(bro)m(wsing,)h(searc)m(hing)g
-(and)f(retrieving)g(functionalities.)94 1622 y(Some)29
-b(additional)e(functionalities)f(for)j(authoring)f(purp)s(oses)f(\(suc)
-m(h)i(as)g(computer)g(assisted)f(annotation)94 1735 y(of)j(pro)s(ofs\))
-e(will)f(b)s(e)i(also)g(tak)m(en)i(in)m(to)e(accoun)m(t.)235
-1847 y(Our)g(privileged)e(rendering)i(language)h(will)d(b)s(e)j
-(MathML,)h(whic)m(h)d(is)h(lik)m(ely)g(to)h(b)s(e)g(rapidly)d(adopted)
-94 1960 y(as)j(the)f(main)f(language)i(for)f(represen)m(ting)g
-(mathematical)h(notation)f(on)h(the)f(W)-8 b(eb.)94 2191
-y Fi(Description)36 b(of)f(w)m(ork:)40 b Fl(The)30 b(w)m(ork)h(is)e
-(organised)h(in)f(the)i(follo)m(wing)d(tasks:)94 2374
-y Fi(T4.1)46 b Fl(MathML)21 b(rendering/bro)m(wsing)c(engines.)37
-b(Our)19 b(privileged)f(rendering)g(language)j(will)d(b)s(e)h(MathML.)
-321 2487 y(In)28 b(order)g(to)h(b)s(e)f(able)f(to)j(test)f(the)f
-(presen)m(tational)h(st)m(ylesheets,)g(\(T)-8 b(ask)29
-b(2.5\))h(w)m(e)f(need)f(a)h(MathML)321 2600 y(complian)m(t)43
-b(bro)m(wser,)j(that)e(will)c(b)s(e)j(dev)m(elop)s(ed)f(as)h(a)h(part)f
-(of)g(the)g(pro)5 b(ject)44 b(\(starting)f(from)g(a)321
-2713 y(previous)29 b(protot)m(yp)s(e\).)94 2898 y Fi(T4.2)46
-b Fl(Consultation)32 b(Engine)g(\(arc)m(hiving,)i(searc)m(hing)f(and)g
-(retrieving\).)48 b(The)33 b(task)h(is)f(dev)m(oted)h(to)g(the)321
-3011 y(arc)m(hitectural)f(design)f(an)h(implemen)m(tation)f(of)h(the)g
-(main)f(functionalities)e(for)j(the)g(consultation)321
-3124 y(and)d(the)h(managemen)m(t)g(of)g(the)g(library)-8
-b(.)94 3310 y Fi(T4.3)46 b Fl(Assisted)32 b(Annotation.)49
-b(This)31 b(co)m(v)m(er)k(an)e(additional)e(functionalit)m(y)h(of)h
-(the)h(in)m(terface,)g(aimed)f(to)321 3423 y(supp)s(ort)c(the)h(user)g
-(in)f(the)i(pro)s(cess)f(of)g(annotating)h(a)g(pro)s(of)e(in)g(natural)
-h(language.)94 3608 y Fi(T4.4)46 b Fl(L)370 3591 y Ff(A)409
-3608 y Fl(T)460 3628 y(E)510 3608 y(X-based)20 b(authoring)g(to)s(ol.)
-37 b(A)20 b(to)s(ol)h(supp)s(orting)c(automatic)22 b(generation)e(of)h
-(Con)m(ten)m(t-MathML)321 3721 y(from)30 b(a)h(suitably)d
-(\(macro-\)enric)m(hed)j(v)m(ersion)f(of)h(L)2100 3704
-y Ff(A)2139 3721 y Fl(T)2190 3741 y(E)2240 3721 y(X.)94
-4022 y Fi(Deliv)m(erables:)94 4204 y(D4.a)46 b Fl(MathML)31
-b(Rendering/Bro)m(wsing)e(engine;)94 4390 y Fi(D4.b)46
-b Fl(First)30 b(MO)m(W)m(GLI)h(Protot)m(yp)s(e;)94 4575
-y Fi(D4.c)46 b Fl(Protot)m(yp)s(e)32 b(functionalities)c(for)i
-(assisted)g(annotation.)94 4761 y Fi(D4.d)46 b Fl(L)383
-4744 y Ff(A)422 4761 y Fl(T)473 4781 y(E)523 4761 y(X-based)31
-b(authoring)e(to)s(ol)i(\(\014rst)f(protot)m(yp)s(e\).)94
-4947 y Fi(D4.e)46 b Fl(Re\014ned)29 b(and)h(extended)h(proto)m(yp)s(e)f
-(of)h(the)f(L)1907 4930 y Ff(A)1946 4947 y Fl(T)1997
-4966 y(E)2048 4947 y(X-based)g(authoring)f(to)s(ol)94
-5247 y Fi(Milestones)i(and)g(exp)s(ected)f(results:)39
-b Fl(The)26 b(main)g(milestone)g(is)g(the)g(release)h(of)g(the)g
-(\014rst)f(MO)m(W)m(GLI)94 5360 y(protot)m(yp)s(e,)31
-b(at)g(mon)m(th)g(18.)p eop
-%%Page: 24 24
-24 23 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(24)94 171 y Fi(9.3.6)105 b(Distribution)94 579 y(w)m(ork)35
-b(pac)m(k)-6 b(age)36 b(n)m(um)m(b)s(er:)k Fl(5)30 b(-)h(Distribution)
-94 692 y Fi(Start)j(date)g(or)i(starting)e(ev)m(en)m(t:)41
-b Fl(mon)m(th)30 b(18)h(-)g(mon)m(th)f(30)94 993 y Fi(P)m(articipan)m
-(t)35 b(Num)m(b)s(er:)479 b Fl(1)236 b(2)f(3)g(4)g(5)h(6)94
-1105 y Fi(P)m(erson-mon)m(th)35 b(p)s(er)g(participan)m(t:)40
-b Fl(6)236 b(5)f(8)g(3)g(5)h(0)94 1524 y Fi(Ob)6 b(jectiv)m(es:)48
-b Fl(Ov)m(erall)34 b(arc)m(hitectural)g(design)f(of)i(the)f
-(distribution)d(mo)s(del,)j(its)g(implemen)m(tation)f(and)94
-1637 y(in)m(tegration)d(with)f(the)i(consultation)f(engine.)94
-1868 y Fi(Description)36 b(of)f(w)m(ork:)40 b Fl(The)30
-b(w)m(ork)h(is)e(articulated)h(in)f(three,)i(conceptually)f(sequen)m
-(tial)f(tasks:)94 2056 y Fi(T5.1)46 b Fl(Arc)m(hitectural)29
-b(Design)h(of)h(the)f(Distribution)d(Mo)s(del.)40 b(The)30
-b(big)f(issue)g(it)g(to)i(\014nd)e(the)h(righ)m(t)g(com-)321
-2169 y(promise)h(b)s(et)m(w)m(een)h(t)m(w)m(o)h(opp)s(osite)e
-(requiremen)m(ts:)42 b Fd(distribution)33 b Fl(\(in)e(the)g(sense)h(of)
-g(the)g(W)-8 b(eb:)44 b(few)321 2282 y(rules,)28 b(no)g(cen)m(tral)h
-(authorit)m(y\))f(and)g Fd(c)-5 b(oher)g(enc)g(e)30 b
-Fl(\(coherence)g(b)s(et)m(w)m(een)f(di\013eren)m(t)f(copies)g(of)g(a)h
-(same)321 2394 y(do)s(cumen)m(t)22 b(and)g(global)f(managemen)m(t)j(of)
-e(the)h(library)d(as)i(a)h(single)e(rational)g(dev)m(elopmen)m(t\).)39
-b(Other)321 2507 y(arc)m(hitectural)24 b(problems)e(to)j(b)s(e)f(solv)m
-(ed)f(are)i(the)f(managemen)m(t)h(of)g(Uniform)d(Resource)i(Iden)m
-(ti\014ers,)321 2620 y(their)36 b(mapping)f(to)j(Uniform)d(Resource)i
-(Lo)s(cators,)j(and)c(the)h(in)m(tegration)f(of)h(databases)h(in)d(the)
-321 2733 y(distribution)23 b(mo)s(del.)39 b(The)26 b(\014nal)g(aim)g
-(is)g(to)i(ha)m(v)m(e)g(a)f Fd(phisic)-5 b(al)5 b(ly)28
-b Fl(distributed)c(library)h(with)g(a)j(single)321 2846
-y Fd(lo)-5 b(gic)g(al)32 b Fl(view.)94 3034 y Fi(T5.2)46
-b Fl(Protot)m(yp)s(e)31 b(implemen)m(tation.)39 b(First)29
-b(protot)m(yping)h(implemen)m(tation)e(of)i(the)g(distribution)d(la)m
-(y)m(er.)94 3221 y Fi(T5.3)46 b Fl(In)m(tegration)c(with)e(the)i
-(Consultation)f(Engine.)73 b(First)42 b(implemen)m(tation)e(of)i(the)g
-(library)d(as)j(a)321 3334 y(distributed)36 b(rep)s(ository)-8
-b(.)67 b(Distribution)36 b(should)h(b)s(e)i(completely)g(transparen)m
-(t)g(to)h(users)e(of)h(the)321 3447 y(Consultation)29
-b(Engine.)94 3753 y Fi(Deliv)m(erables:)94 3941 y(D5.a)46
-b Fl(Ov)m(erall)29 b(Arc)m(hitectural)h(Design)g(of)h(the)g
-(Distribution)c(Mo)s(del;)94 4128 y Fi(D5.b)46 b Fl(Adv)-5
-b(anced)30 b(MO)m(W)m(GLI)i(Protot)m(yp)s(e.)94 4434
-y Fi(Milestones)51 b(and)f(exp)s(ected)g(results:)67
-b Fl(The)43 b(main)f(milestone)h(is)f(the)i(release)g(of)g(the)f(adv)-5
-b(anced)94 4547 y(MO)m(W)m(GLI)45 b(protot)m(yp)s(e,)j(for)43
-b(the)h(fourth)e(meeting)i(of)g(the)g(pro)5 b(ject,)47
-b(at)d(mon)m(th)g(24.)81 b(The)43 b(adv)-5 b(anced)94
-4660 y(protot)m(yp)s(e)38 b(will)d(in)m(tegrate)j(the)g(previous)e(one)
-h(with)f(the)i(new)f(distribution)d(facilities)h(o\013ered)j(b)m(y)f
-(the)94 4773 y(distribution)27 b(la)m(y)m(er.)p eop
-%%Page: 25 25
-25 24 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(25)94 171 y Fi(9.3.7)105 b(T)-9 b(esting)35 b(and)g(V)-9
-b(alidation)94 579 y(w)m(ork)35 b(pac)m(k)-6 b(age)36
-b(n)m(um)m(b)s(er:)k Fl(6)30 b(-)h(T)-8 b(esting)30 b(and)g(V)-8
-b(alidation)94 692 y Fi(Start)34 b(date)g(or)i(starting)e(ev)m(en)m(t:)
-41 b Fl(mon)m(th)30 b(12)h(-)g(mon)m(th)f(30)94 993 y
-Fi(P)m(articipan)m(t)35 b(Num)m(b)s(er:)479 b Fl(1)236
-b(2)f(3)g(4)g(5)h(6)94 1105 y Fi(P)m(erson-mon)m(th)35
-b(p)s(er)g(participan)m(t:)40 b Fl(5)236 b(6)f(3)g(17)190
-b(14)h(9)94 1524 y Fi(Ob)6 b(jectiv)m(es:)71 b Fl(The)45
-b(WP)g(in)m(tends)g(to)h(measure)f(the)h(system)g(suitabilit)m(y)c(and)
-j(scalabilit)m(y)f(and)h(the)94 1637 y(satisfaction)30
-b(lev)m(el)g(of)h(users)e(with)g(the)i(service.)94 1868
-y Fi(Description)41 b(of)g(w)m(ork:)50 b Fl(Large)35
-b(scale)h(testing)f(and)f(v)-5 b(alidation)34 b(will)e(start)k(after)f
-(the)h(release)f(of)g(the)94 1981 y(\014rst)30 b(MO)m(W)m(GLI)h(protot)
-m(yp)s(e,)g(at)h(mon)m(th)e(18.)42 b(W)-8 b(e)31 b(shall)e(consider)g
-(three)i(main)e(v)-5 b(alidation)29 b(tests:)94 2169
-y Fi(T6.1)46 b Fl(Education.)39 b(F)-8 b(ull)27 b(dev)m(elopmen)m(t)i
-(of)g(a)g(fragmen)m(t)g(of)g(the)g(library)d(co)m(v)m(ering)j(a)g(t)m
-(ypical)g(undergrad-)321 2282 y(uate)i(course)g(in)e(algebra)h(of)h
-(analysis.)94 2469 y Fi(T6.2)46 b Fl(Certi\014ed)21 b(co)s(de.)39
-b(The)23 b(aim)f(is)g(to)i(b)s(e)e(able)h(to)h(presen)m(t)f(the)g
-(formalization)f(and)h(the)g(demonstration)321 2582 y(of)j(some)g
-(securit)m(y)f(prop)s(erties)f(related)i(to)g(the)g(co)s(de)f(em)m(b)s
-(edded)g(in)m(to)g(a)h(smart)g(card.)39 b(The)25 b(presen-)321
-2695 y(tation)32 b(m)m(ust)f(b)s(e)g(in)f(a)i(format)f(understandable)f
-(b)m(y)h(the)g(compan)m(y)h(in)e(c)m(harge)j(of)e(the)h(ev)-5
-b(aluation)321 2808 y(of)31 b(the)f(co)s(de)h(and)f(in)f(accordance)j
-(with)d(the)h(Common)g(Criteria)f(standard.)94 2995 y
-Fi(T6.3)46 b Fl(Electronic)24 b(Publishing.)35 b(The)24
-b(aim)h(is)f(to)h(test)h(the)f(L)2147 2979 y Ff(A)2186
-2995 y Fl(T)2237 3015 y(E)2288 2995 y(X-based)g(authoring)f(to)s(ol)h
-(and)f(to)i(demon-)321 3108 y(strate)f(ho)m(w)e(an)h(electronic)g(ph)m
-(ysics)e(journal)g(b)s(ene\014ts)h(from)g(the)h(exploitation)e(of)i
-(con)m(ten)m(t)i(markup)321 3221 y(in)j(journal)g(articles.)94
-3527 y Fi(Deliv)m(erables:)94 3715 y(D6.a)46 b Fl(V)-8
-b(alidation)29 b(1:)41 b(Education.)94 3902 y Fi(D6.b)46
-b Fl(V)-8 b(alidation)29 b(2:)41 b(Do)s(cumen)m(ts)30
-b(describing)e(the)i(formalization)e(of)i(a)g(securit)m(y)g(function)e
-(em)m(b)s(edded)321 4015 y(in)m(to)j(a)f(smart)h(card)f(and)g(the)g
-(pro)s(of)g(that)h(the)f(co)s(de)h(meets)g(its)f(securit)m(y)g(ob)5
-b(jectiv)m(es.)94 4203 y Fi(D6.c)46 b Fl(V)-8 b(alidation)32
-b(3:)46 b(Journal)31 b(in)m(terface)i(with)e(added)h(functionalities)e
-(due)i(to)h(con)m(ten)m(t)i(markup,)d(e.g.)321 4316 y(searc)m(h)f(in)m
-(terface)94 4503 y Fi(D6.d)46 b Fl(Final)29 b(MO)m(W)m(GLI)j(Protot)m
-(yp)s(e)94 4809 y Fi(Milestones)d(and)f(exp)s(ected)g(results:)38
-b Fl(W)-8 b(e)26 b(exp)s(ect)f(a)g(lot)f(of)h(feed-bac)m(k)h(during)c
-(this)h(phase,)j(that)f(will)94 4922 y(b)s(e)34 b(tak)m(en)i(in)m(to)e
-(accoun)m(t)i(for)e(the)h(de\014nition)d(of)j(the)g(adv)-5
-b(anced)35 b(and)e(\014nal)h(v)m(ersions)g(of)g(the)h(MO)m(W)m(GLI)94
-5035 y(protot)m(yp)s(e.)p eop
-%%Page: 26 26
-26 25 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(26)94 171 y Fi(9.3.8)105 b(Information)34 b(Dissemination)h(and)g
-(Exploitation)94 461 y(w)m(ork)g(pac)m(k)-6 b(age)36
-b(n)m(um)m(b)s(er:)k Fl(7)30 b(-)h(Information)e(Dissemination)g(and)h
-(Exploitation)f(Plan)94 574 y Fi(Start)34 b(date)g(or)i(starting)e(ev)m
-(en)m(t:)41 b Fl(mon)m(th)30 b(3)h(-)f(30)94 874 y Fi(P)m(articipan)m
-(t)35 b(Num)m(b)s(er:)479 b Fl(1)236 b(2)f(3)g(4)g(5)h(6)94
-987 y Fi(P)m(erson-mon)m(th)35 b(p)s(er)g(participan)m(t:)40
-b Fl(1)236 b(0)f(0)g(1)g(6)h(0)94 1406 y Fi(Ob)6 b(jectiv)m(es:)40
-b Fl(The)30 b(w)m(ork)h(pac)m(k)-5 b(age)32 b(aims)e(to:)205
-1594 y(1.)46 b(in)m(v)m(olv)m(e)31 b(the)f(largest)h(comm)m(unit)m(y)f
-(of)h(professionals)d(in)h(the)i(mo)s(delling)d(phase.)205
-1781 y(2.)46 b(promote)31 b(dissemination)d(of)i(pro)5
-b(ject)31 b(results)e(in)g(the)i(relev)-5 b(an)m(t)31
-b(in)m(ternational)e(forums.)205 1969 y(3.)46 b(promote)39
-b(the)g(use)f(of)h(the)g(service,)i(b)s(oth)c(for)i(educational)f(and)g
-(professional)f(purp)s(oses.)63 b(This)321 2082 y(phase)30
-b(will)e(start)j(after)g(the)f(release)h(of)g(the)f(\014rst)g(protot)m
-(yp)s(e,)h(at)g(mon)m(th)f(18.)94 2388 y Fi(Description)h(of)g(w)m
-(ork:)38 b Fl(The)26 b(dissemination)e(of)i(results)f(is)g(in)g(c)m
-(harge)j(of)e(the)h(Pro)5 b(ject)27 b(Dissemination)94
-2500 y(&)39 b(Exploitation)g(Committee,)j(whic)m(h)d(is)g(resp)s
-(onsible)d(to)41 b(prepare,)h(during)37 b(the)j(\014rst)f(six)g(mon)m
-(ths,)j(a)94 2613 y(detailed)29 b(dissemination)f(w)m(ork-plan)i
-(\(D2\),)i(and)e(to)h(follo)m(w)e(its)h(execution)h(during)d(the)i(Pro)
-5 b(ject.)235 2726 y(Information)25 b(dissemination)e(will)g(tak)m(e)28
-b(place)d(via)h(professional)e(journal)g(articles,)j(presen)m(tations)f
-(at)94 2839 y(conferences,)j(in)m(ternational)d(news)h(groups,)h(sp)s
-(eci\014c)e(in)m(terest)h(groups)g(and)g(so)h(on.)39
-b(Relev)-5 b(an)m(t)29 b(rep)s(orts)d(of)94 2952 y(the)31
-b(pro)5 b(jects)32 b(will)d(b)s(e)h(made)i(publicly)27
-b(a)m(v)-5 b(ailable)31 b(on)g(the)h(W)-8 b(orld)31 b(Wide)f(W)-8
-b(eb.)45 b(F)-8 b(or)32 b(adv)-5 b(anced)31 b(releases,)94
-3065 y(w)m(e)g(also)f(plan)f(to)i(prepare)f(an)g(\\information)f(pac)m
-(k",)j(including)27 b(a)k(folder)e(and)h(CDR)m(OM)h(with)e(demos.)94
-3296 y Fi(Deliv)m(erables:)94 3484 y(D7.a)46 b Fl(Dissemination)28
-b(and)i(Use)h(Plan;)94 3671 y Fi(D7.b)46 b Fl(T)-8 b(ec)m(hnological)31
-b(Implemen)m(tation)e(Plan;)94 3859 y Fi(Articles)46
-b Fl(Scien)m(ti\014c)29 b(Publications)f(on)i(professional)f(journals)g
-(and)h(conference)h(pro)s(ceedings.)94 4165 y Fi(Milestones)39
-b(and)g(exp)s(ected)g(results:)47 b Fl(Criteria)33 b(for)g(ev)-5
-b(aluating)34 b(MO)m(W)m(GLI's)h(dissemination)c(and)94
-4278 y(its)41 b(tec)m(hnological)i(impact)e(will)e(b)s(e)i(detailed)g
-(in)g(the)h(Dissemination)e(and)h(use)g(Plan.)74 b(The)42
-b(Pro)5 b(ject)94 4390 y(Dissemination)19 b(&)h(Exploitation)f
-(Committee)i(will)d(b)s(e)i(in)f(c)m(harge)j(to)f(monitor)f(the)h
-(state)h(of)e(adv)-5 b(ancemen)m(t)94 4503 y(of)31 b(the)f(Pro)5
-b(ject)31 b(according)g(to)g(these)g(criteria.)p eop
-%%Page: 27 27
-27 26 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(27)94 171 y Fg(9.4)112 b(Deliv)m(erable)36 b(list)f(b)m(y)j(W)-9
-b(orkP)m(ac)m(k)j(age)p 94 379 3888 4 v 92 492 4 113
-v 144 458 a Fl(n.)p 313 492 V 145 w(Deliv)m(erable)29
-b(Title)p 1957 492 V 978 w(WP)p 2212 492 V 100 w(Lead)p
-2618 492 V 213 w(Estim.)p 3009 492 V 131 w(T)m(yp)s(e)p
-3313 492 V 99 w(Secu-)p 3625 492 V 100 w(Deliv.)p 3980
-492 V 92 605 V 313 605 V 1957 605 V 2009 571 a(no.)p
-2212 605 V 134 w(P)m(artic.)p 2618 605 V 140 w(p)s(erson-)p
-3009 605 V 3313 605 V 403 w(rit)m(y)p 3625 605 V 170
-w(mon)m(th)p 3980 605 V 92 718 V 313 718 V 1957 718 V
-2212 718 V 2618 718 V 2670 684 a(mon)m(th)p 3009 718
-V 3313 718 V 3625 718 V 3980 718 V 94 721 3888 4 v 92
-834 4 113 v 144 800 a(0.a)p 313 834 V 106 w(Self-Assesmen)m(t)p
-1957 834 V 1054 w(0)p 2212 834 V 210 w(UNIBO)p 2618 834
-V 102 w(2)p 3009 834 V 346 w(R)p 3313 834 V 237 w(Pub)p
-3625 834 V 148 w(6)p 3980 834 V 92 947 V 313 947 V 365
-913 a(parameters)h(and)g(criteria.)p 1957 947 V 2212
-947 V 2618 947 V 3009 947 V 3313 947 V 3625 947 V 3980
-947 V 94 950 3888 4 v 92 1063 4 113 v 144 1029 a(0.b)p
-313 1063 V 100 w(First)f(Self-Assesmen)m(t)i(Rep)s(ort)p
-1957 1063 V 525 w(0)p 2212 1063 V 210 w(UNIBO)p 2618
-1063 V 102 w(1)p 3009 1063 V 346 w(R)p 3313 1063 V 237
-w(Pub)p 3625 1063 V 148 w(12)p 3980 1063 V 94 1067 3888
-4 v 92 1179 4 113 v 144 1146 a(0.c)p 313 1179 V 111 w(Second)f
-(Self-Assesmen)m(t)g(Rep)s(ort)p 1957 1179 V 439 w(0)p
-2212 1179 V 210 w(UNIBO)p 2618 1179 V 102 w(1)p 3009
-1179 V 346 w(R)p 3313 1179 V 237 w(Pub)p 3625 1179 V
-148 w(20)p 3980 1179 V 94 1183 3888 4 v 92 1296 4 113
-v 144 1262 a(0.d)p 313 1296 V 100 w(Final)f(Self-Assesmen)m(t)h(Rep)s
-(ort)p 1957 1296 V 511 w(0)p 2212 1296 V 210 w(UNIBO)p
-2618 1296 V 102 w(1)p 3009 1296 V 346 w(R)p 3313 1296
-V 237 w(Pub)p 3625 1296 V 148 w(30)p 3980 1296 V 94 1299
-3888 4 v 92 1412 4 113 v 144 1378 a(1.a)p 313 1412 V
-106 w(Preliminary)d(Rep)s(ort)j(on)g(Application)p 1957
-1412 V 248 w(1)p 2212 1412 V 210 w(KUN)p 2618 1412 V
-199 w(6)p 3009 1412 V 346 w(R)p 3313 1412 V 237 w(Pub)p
-3625 1412 V 148 w(3)p 3980 1412 V 92 1525 V 313 1525
-V 365 1491 a(Scenarios)f(and)h(Requiremen)m(t)g(Analysis)p
-1957 1525 V 2212 1525 V 2618 1525 V 3009 1525 V 3313
-1525 V 3625 1525 V 3980 1525 V 94 1528 3888 4 v 92 1641
-4 113 v 144 1607 a(1.b)p 313 1641 V 100 w(Structure)f(and)h
-(Metastructure)h(of)p 1957 1641 V 396 w(1)p 2212 1641
-V 210 w(DFKI)p 2618 1641 V 174 w(8)p 3009 1641 V 346
-w(R)p 3313 1641 V 237 w(Pub)p 3625 1641 V 148 w(6)p 3980
-1641 V 92 1754 V 313 1754 V 365 1720 a(Mathematical)g(Do)s(cumen)m(ts)p
-1957 1754 V 2212 1754 V 2618 1754 V 3009 1754 V 3313
-1754 V 3625 1754 V 3980 1754 V 94 1757 3888 4 v 92 1870
-4 113 v 144 1836 a(1.c)p 313 1870 V 111 w(Distributed)d(Digital)i
-(Libraries:)p 1957 1870 V 480 w(1)p 2212 1870 V 210 w(MPG)p
-2618 1870 V 190 w(6)p 3009 1870 V 346 w(R)p 3313 1870
-V 237 w(Pub)p 3625 1870 V 148 w(6)p 3980 1870 V 92 1983
-V 313 1983 V 365 1949 a(dev)m(elopmen)m(t,)h(arc)m(hiving,)e
-(retrieving.)p 1957 1983 V 2212 1983 V 2618 1983 V 3009
-1983 V 3313 1983 V 3625 1983 V 3980 1983 V 94 1986 3888
-4 v 92 2099 4 113 v 144 2065 a(2.a)p 313 2099 V 106 w(XML)h(Exp)s
-(ortation)g(Mo)s(dule\(s\))p 1957 2099 V 489 w(2)p 2212
-2099 V 210 w(INRIA)p 2618 2099 V 137 w(4)p 3009 2099
-V 346 w(P)p 3313 2099 V 242 w(Pub)p 3625 2099 V 148 w(6)p
-3980 2099 V 94 2103 3888 4 v 92 2216 4 113 v 144 2182
-a(2.b)p 313 2216 V 100 w(Do)s(cumen)m(t)h(T)m(yp)s(e)f(Descriptors)p
-1957 2216 V 521 w(2)p 2212 2216 V 210 w(INRIA)p 2618
-2216 V 137 w(2)p 3009 2216 V 346 w(R)p 3313 2216 V 237
-w(Pub)p 3625 2216 V 148 w(12)p 3980 2216 V 94 2219 3888
-4 v 92 2332 4 113 v 144 2298 a(2.c)p 313 2332 V 111 w(St)m(ylesheets)g
-(to)h(In)m(termediate)p 1957 2332 V 563 w(2)p 2212 2332
-V 210 w(UNIBO)p 2618 2332 V 102 w(7)p 3009 2332 V 346
-w(P)p 3313 2332 V 242 w(Pub)p 3625 2332 V 148 w(12)p
-3980 2332 V 92 2445 V 313 2445 V 365 2411 a(represen)m(tation)f(\(form)
-m(ulae\))p 1957 2445 V 2212 2445 V 2618 2445 V 3009 2445
-V 3313 2445 V 3625 2445 V 3980 2445 V 94 2448 3888 4
-v 92 2561 4 113 v 144 2527 a(2.d)p 313 2561 V 100 w(St)m(ylesheets)g
-(to)h(In)m(termediate)p 1957 2561 V 563 w(2)p 2212 2561
-V 210 w(UNIBO)p 2618 2561 V 102 w(9)p 3009 2561 V 346
-w(P)p 3313 2561 V 242 w(Pub)p 3625 2561 V 148 w(12)p
-3980 2561 V 92 2674 V 313 2674 V 365 2640 a(represen)m(tation)f(\(pro)s
-(ofs\))p 1957 2674 V 2212 2674 V 2618 2674 V 3009 2674
-V 3313 2674 V 3625 2674 V 3980 2674 V 94 2677 3888 4
-v 92 2790 4 113 v 144 2756 a(2.e)p 313 2790 V 111 w(Presen)m(tational)g
-(St)m(ylesheets)h(\(form)m(ulae\))p 1957 2790 V 164 w(2)p
-2212 2790 V 210 w(KUN)p 2618 2790 V 199 w(4)p 3009 2790
-V 346 w(P)p 3313 2790 V 242 w(Pub)p 3625 2790 V 148 w(18)p
-3980 2790 V 94 2793 3888 4 v 92 2906 4 113 v 144 2872
-a(2.f)p 313 2906 V 123 w(Presen)m(tational)f(St)m(ylesheets)h(\(pro)s
-(ofs\))p 1957 2906 V 264 w(2)p 2212 2906 V 210 w(KUN)p
-2618 2906 V 199 w(6)p 3009 2906 V 346 w(P)p 3313 2906
-V 242 w(Pub)p 3625 2906 V 148 w(18)p 3980 2906 V 94 2910
-3888 4 v 92 3023 4 113 v 144 2989 a(2.g)p 313 3023 V
-106 w(T)-8 b(o)s(ols)30 b(for)g(metadata)i(extraction)p
-1957 3023 V 457 w(2)p 2212 3023 V 210 w(INRIA)p 2618
-3023 V 137 w(4)p 3009 3023 V 346 w(P)p 3313 3023 V 242
-w(Pub)p 3625 3023 V 148 w(18)p 3980 3023 V 94 3026 3888
-4 v 92 3139 4 113 v 144 3105 a(3.a)p 313 3139 V 106 w(Rep)s(ort)e(on)g
-(Metadata)j(for)p 1957 3139 V 690 w(3)p 2212 3139 V 210
-w(DFKI)p 2618 3139 V 174 w(9)p 3009 3139 V 346 w(R)p
-3313 3139 V 237 w(Pub)p 3625 3139 V 148 w(12)p 3980 3139
-V 92 3252 V 313 3252 V 365 3218 a(Mathematical)e(Libraries)p
-1957 3252 V 2212 3252 V 2618 3252 V 3009 3252 V 3313
-3252 V 3625 3252 V 3980 3252 V 94 3255 3888 4 v 92 3368
-4 113 v 144 3334 a(3.b)p 313 3368 V 100 w(Metadata)h(Mo)s(del)p
-1957 3368 V 985 w(3)p 2212 3368 V 210 w(DFKI)p 2618 3368
-V 174 w(11)p 3009 3368 V 301 w(R)p 3313 3368 V 237 w(Pub)p
-3625 3368 V 148 w(12)p 3980 3368 V 94 3371 3888 4 v 92
-3484 4 113 v 144 3450 a(4.a)p 313 3484 V 106 w(First)d(Protot)m(yp)s(e)
-j(implemen)m(tation)d(of)p 1957 3484 V 272 w(4)p 2212
-3484 V 210 w(UNIBO)p 2618 3484 V 102 w(16)p 3009 3484
-V 301 w(P)p 3313 3484 V 242 w(Pub)p 3625 3484 V 148 w(12)p
-3980 3484 V 92 3597 V 313 3597 V 365 3563 a(Rendering)f(Engines)i(for)g
-(MathML)p 1957 3597 V 2212 3597 V 2618 3597 V 3009 3597
-V 3313 3597 V 3625 3597 V 3980 3597 V 94 3600 3888 4
-v 92 3713 4 113 v 144 3679 a(4.b)p 313 3713 V 100 w Fi(First)k(MO)m(W)m
-(GLI)h(Protot)m(yp)s(e)p 1957 3713 V 429 w Fl(4)p 2212
-3713 V 210 w(INRIA)p 2618 3713 V 137 w(15)p 3009 3713
-V 301 w(P)p 3313 3713 V 242 w(Pub)p 3625 3713 V 148 w(18)p
-3980 3713 V 92 3826 V 313 3826 V 365 3792 a(\(bro)m(wsing,)29
-b(rendering)g(and)h(consultation\))p 1957 3826 V 2212
-3826 V 2618 3826 V 3009 3826 V 3313 3826 V 3625 3826
-V 3980 3826 V 94 3829 3888 4 v 92 3942 4 113 v 144 3909
-a(4.c)p 313 3942 V 111 w(Protot)m(yp)s(e)h(for)f(assisted)g(annotation)
-p 1957 3942 V 313 w(4)p 2212 3942 V 210 w(UNIBO)p 2618
-3942 V 102 w(7)p 3009 3942 V 346 w(P)p 3313 3942 V 242
-w(Pub)p 3625 3942 V 148 w(18)p 3980 3942 V 94 3946 3888
-4 v 92 4059 4 113 v 144 4025 a(4.d)p 313 4059 V 100 w(L)389
-4008 y Ff(A)428 4025 y Fl(T)479 4044 y(E)529 4025 y(X-based)g
-(authoring)g(to)s(ol)p 1957 4059 V 560 w(4)p 2212 4059
-V 210 w(MPG)p 2618 4059 V 190 w(9)p 3009 4059 V 346 w(P)p
-3313 4059 V 242 w(Pub)p 3625 4059 V 148 w(18)p 3980 4059
-V 94 4062 3888 4 v 92 4175 4 113 v 144 4141 a(4.e)p 313
-4175 V 111 w(Extended)f(L)796 4124 y Ff(A)835 4141 y
-Fl(T)886 4161 y(E)937 4141 y(X-authoring)h(protot)m(yp)s(e)p
-1957 4175 V 173 w(4)p 2212 4175 V 210 w(MPG)p 2618 4175
-V 190 w(8)p 3009 4175 V 346 w(P)p 3313 4175 V 242 w(Pub)p
-3625 4175 V 148 w(24)p 3980 4175 V 94 4178 3888 4 v 92
-4291 4 113 v 144 4257 a(5.a)p 313 4291 V 106 w(Ov)m(erall)f(Arc)m
-(hitectural)h(Design)g(of)p 1957 4291 V 400 w(5)p 2212
-4291 V 210 w(DFKI)p 2618 4291 V 174 w(11)p 3009 4291
-V 301 w(R)p 3313 4291 V 237 w(Pub)p 3625 4291 V 148 w(18)p
-3980 4291 V 92 4404 V 313 4404 V 365 4370 a(the)g(distribution)d(Mo)s
-(del)p 1957 4404 V 2212 4404 V 2618 4404 V 3009 4404
-V 3313 4404 V 3625 4404 V 3980 4404 V 94 4407 3888 4
-v 92 4520 4 113 v 144 4486 a(5.b)p 313 4520 V 100 w Fi(Adv)-6
-b(anced)35 b(MO)m(W)m(GLI)g(Protot)m(yp)s(e)p 1957 4520
-V 201 w Fl(5)p 2212 4520 V 210 w(DFKI)p 2618 4520 V 174
-w(16)p 3009 4520 V 301 w(P)p 3313 4520 V 242 w(Pub)p
-3625 4520 V 148 w(24)p 3980 4520 V 92 4633 V 313 4633
-V 365 4599 a(\(distribution\))p 1957 4633 V 2212 4633
-V 2618 4633 V 3009 4633 V 3313 4633 V 3625 4633 V 3980
-4633 V 94 4636 3888 4 v 92 4749 4 113 v 144 4715 a(6.a)p
-313 4749 V 106 w(V)-8 b(alidation)29 b(1:)41 b(MO)m(W)m(GLI)32
-b(for)e(education)p 1957 4749 V 137 w(6)p 2212 4749 V
-210 w(KUN)p 2618 4749 V 199 w(16)p 3009 4749 V 301 w(R)p
-3313 4749 V 237 w(Pub)p 3625 4749 V 148 w(30)p 3980 4749
-V 94 4753 3888 4 v 92 4866 4 113 v 144 4832 a(6.b)p 313
-4866 V 100 w(V)-8 b(alidation)29 b(2:)41 b(MO)m(W)m(GLI)32
-b(and)p 1957 4866 V 513 w(6)p 2212 4866 V 210 w(T)-8
-b(rusted)p 2618 4866 V 99 w(9)p 3009 4866 V 346 w(R)p
-3313 4866 V 237 w(Pub)p 3625 4866 V 148 w(30)p 3980 4866
-V 92 4979 V 313 4979 V 365 4945 a(smart)30 b(card)g(securit)m(y)p
-1957 4979 V 2212 4979 V 1130 w(Logic)p 2618 4979 V 3009
-4979 V 3313 4979 V 3625 4979 V 3980 4979 V 94 4982 3888
-4 v 92 5095 4 113 v 144 5061 a(6.c)p 313 5095 V 111 w(V)-8
-b(alidation)29 b(3:)41 b(Journal)29 b(in)m(terface)p
-1957 5095 V 426 w(6)p 2212 5095 V 210 w(MPG)p 2618 5095
-V 190 w(14)p 3009 5095 V 301 w(P)p 3313 5095 V 242 w(Pub)p
-3625 5095 V 148 w(30)p 3980 5095 V 94 5098 3888 4 v 92
-5211 4 113 v 144 5177 a(6.d)p 313 5211 V 100 w Fi(Final)34
-b(MO)m(W)m(GLI)h(Protot)m(yp)s(e)p 1957 5211 V 416 w
-Fl(6)p 2212 5211 V 210 w(UNIBO)p 2618 5211 V 102 w(12)p
-3009 5211 V 301 w(P)p 3313 5211 V 242 w(Pub)p 3625 5211
-V 148 w(30)p 3980 5211 V 94 5214 3888 4 v 92 5327 4 113
-v 144 5293 a(7.a)p 313 5327 V 106 w(Dissemination)28
-b(and)i(Use)h(Plan)p 1957 5327 V 518 w(7)p 2212 5327
-V 210 w(MPG)p 2618 5327 V 190 w(3)p 3009 5327 V 346 w(R)p
-3313 5327 V 237 w(Pub)p 3625 5327 V 148 w(6)p 3980 5327
-V 94 5331 3888 4 v 92 5443 4 113 v 144 5410 a(7.b)p 313
-5443 V 100 w(T)-8 b(ec)m(hnological)30 b(Implemen)m(tation)g(Plan)p
-1957 5443 V 238 w(7)p 2212 5443 V 210 w(MPG)p 2618 5443
-V 190 w(3)p 3009 5443 V 346 w(P)p 3313 5443 V 242 w(Pub)p
-3625 5443 V 148 w(30)p 3980 5443 V 94 5447 3888 4 v 94
-5463 V 92 5576 4 113 v 144 5542 a Fc(R)c Fl(=Rep)s(ort,)k
-Fc(P)38 b Fl(=Protot)m(yp)s(e,)31 b(Pub=Public)p 3980
-5576 V 94 5580 3888 4 v eop
-%%Page: 28 28
-28 27 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(28)748 171 y Fj(W)-11 b(ork)44 b(pac)l(k)-7 b(age)46
-b(list)g(and)e(team)i(in)l(v)l(olv)l(emen)l(t)94 384
-y Fl(UNIBO)31 b(=)f(1)94 497 y(INRIA)g(=)g(2)94 610 y(DFKI)h(=)f(3)94
-723 y(KUN)g(=)g(4)94 835 y(MPG)h(=)f(5)94 948 y(T)-8
-b(rusted)30 b(Logic)g(=)g(6)94 1161 y(Ov)m(erview)g(o)m(v)m(er)h(the)g
-(W)-8 b(ork)31 b(pac)m(k)-5 b(ages)p 192 1399 3501 4
-v 190 1512 4 113 v 242 1478 a(n.)p 366 1512 V 100 w(Title)p
-1651 1512 V 1092 w(Lead)p 2006 1512 V 161 w(P)m(erson-)p
-2403 1512 V 101 w(Start-)p 2758 1512 V 122 w(End-)p 3112
-1512 V 161 w(Deliv)m(erables)p 3691 1512 V 190 1625 V
-366 1625 V 1651 1625 V 1703 1591 a(Con)m(tr.)p 2006 1625
-V 99 w(mon)m(ths)p 2403 1625 V 107 w(mon)m(th)p 2758
-1625 V 99 w(mon)m(th)p 3112 1625 V 3691 1625 V 192 1628
-3501 4 v 190 1741 4 113 v 242 1707 a(0)p 366 1741 V 131
-w(Pro)5 b(ject)31 b(Managemen)m(t)p 1651 1741 V 455 w(1)p
-2006 1741 V 309 w(8)p 2403 1741 V 353 w(0)p 2758 1741
-V 309 w(30)p 3112 1741 V 265 w(a,b,c,d)p 3691 1741 V
-192 1745 3501 4 v 190 1858 4 113 v 242 1824 a(1)p 366
-1858 V 131 w(Requiremen)m(t)e(Analysis)p 1651 1858 V
-413 w(4)p 2006 1858 V 309 w(20)p 2403 1858 V 308 w(0)p
-2758 1858 V 309 w(6)p 3112 1858 V 310 w(a,b,c)p 3691
-1858 V 192 1861 3501 4 v 190 1974 4 113 v 242 1940 a(2)p
-366 1974 V 131 w(T)-8 b(ransformation)p 1651 1974 V 672
-w(1)p 2006 1974 V 309 w(34)p 2403 1974 V 308 w(3)p 2758
-1974 V 309 w(21)p 3112 1974 V 265 w(a,b,c,d,e,f,g)p 3691
-1974 V 192 1977 3501 4 v 190 2090 4 113 v 242 2056 a(3)p
-366 2090 V 131 w(Metadata)p 1651 2090 V 906 w(3)p 2006
-2090 V 309 w(20)p 2403 2090 V 308 w(6)p 2758 2090 V 309
-w(21)p 3112 2090 V 265 w(a,b)p 3691 2090 V 192 2093 3501
-4 v 190 2206 4 113 v 242 2172 a(4)p 366 2206 V 131 w(In)m(terfaces)p
-1651 2206 V 904 w(2)p 2006 2206 V 309 w(55)p 2403 2206
-V 308 w(3)p 2758 2206 V 309 w(24)p 3112 2206 V 265 w(a,b,c,d,e)p
-3691 2206 V 192 2210 3501 4 v 190 2322 4 113 v 242 2289
-a(5)p 366 2322 V 131 w(Distribution)p 1651 2322 V 798
-w(3)p 2006 2322 V 309 w(27)p 2403 2322 V 308 w(9)p 2758
-2322 V 309 w(27)p 3112 2322 V 265 w(a,b)p 3691 2322 V
-192 2326 3501 4 v 190 2439 4 113 v 242 2405 a(6)p 366
-2439 V 131 w(T)g(esting)30 b(and)g(V)-8 b(alidation)p
-1651 2439 V 377 w(4)p 2006 2439 V 309 w(54)p 2403 2439
-V 308 w(12)p 2758 2439 V 264 w(30)p 3112 2439 V 265 w(a,b,c,d)p
-3691 2439 V 192 2442 3501 4 v 190 2555 4 113 v 242 2521
-a(7)p 366 2555 V 131 w(Dissemination)28 b(&)i(Exploitation)p
-1651 2555 V 99 w(5)p 2006 2555 V 309 w(8)p 2403 2555
-V 353 w(3)p 2758 2555 V 309 w(30)p 3112 2555 V 265 w(a,b)p
-3691 2555 V 192 2558 3501 4 v 190 2671 4 113 v 940 2637
-a(TOT)-8 b(AL)p 2006 2671 V 797 w(226)p 2403 2671 V 2403
-2671 V 3691 2671 V 192 2675 3501 4 v 94 3062 a(In)m(v)m(olv)m(emen)m(t)
-32 b(b)m(y)e(Researc)m(h)h(T)-8 b(eam)31 b(\(leader)f(in)g(b)s
-(oldface\))p 888 3300 2111 4 v 886 3413 4 113 v 937 3379
-a(T)-8 b(eam)p 1205 3413 V 1205 3413 V 514 w(W)g(ork)31
-b(P)m(ac)m(k)-5 b(age)p 2693 3413 V 2710 3413 V 532 w(total)p
-2996 3413 V 888 3417 2111 4 v 886 3529 4 113 v 937 3496
-a(n.)p 1205 3529 V 244 w(0)p 1357 3529 V 107 w(1)p 1548
-3529 V 145 w(2)p 1752 3529 V 159 w(3)p 1942 3529 V 146
-w(4)p 2147 3529 V 159 w(5)p 2337 3529 V 146 w(6)p 2541
-3529 V 159 w(7)p 2693 3529 V 2710 3529 V 2996 3529 V
-888 3533 2111 4 v 888 3549 V 886 3662 4 113 v 937 3628
-a(1)p 1205 3662 V 275 w Fi(8)p 1357 3662 V 100 w Fl(3)p
-1548 3662 V 145 w Fi(13)p 1752 3662 V 100 w Fl(3)p 1942
-3662 V 146 w(16)p 2147 3662 V 114 w(6)p 2337 3662 V 146
-w(5)p 2541 3662 V 159 w(1)p 2693 3662 V 2710 3662 V 123
-w(55)p 2996 3662 V 888 3666 2111 4 v 886 3779 4 113 v
-937 3745 a(2)p 1205 3779 V 275 w(0)p 1357 3779 V 107
-w(4)p 1548 3779 V 145 w(4)p 1752 3779 V 159 w(3)p 1942
-3779 V 146 w Fi(16)p 2147 3779 V 100 w Fl(5)p 2337 3779
-V 146 w(6)p 2541 3779 V 159 w(0)p 2693 3779 V 2710 3779
-V 123 w(38)p 2996 3779 V 888 3782 2111 4 v 886 3895 4
-113 v 937 3861 a(3)p 1205 3895 V 275 w(0)p 1357 3895
-V 107 w(3)p 1548 3895 V 145 w(3)p 1752 3895 V 159 w Fi(8)p
-1942 3895 V 139 w Fl(5)p 2147 3895 V 159 w Fi(8)p 2337
-3895 V 139 w Fl(3)p 2541 3895 V 159 w(0)p 2693 3895 V
-2710 3895 V 123 w(30)p 2996 3895 V 888 3898 2111 4 v
-886 4011 4 113 v 937 3977 a(4)p 1205 4011 V 275 w(0)p
-1357 4011 V 107 w Fi(6)p 1548 4011 V 138 w Fl(11)p 1752
-4011 V 114 w(3)p 1942 4011 V 146 w(4)p 2147 4011 V 159
-w(3)p 2337 4011 V 146 w Fi(17)p 2541 4011 V 100 w Fl(1)p
-2693 4011 V 2710 4011 V 123 w(45)p 2996 4011 V 888 4014
-2111 4 v 886 4127 4 113 v 937 4093 a(5)p 1205 4127 V
-275 w(0)p 1357 4127 V 107 w(3)p 1548 4127 V 145 w(3)p
-1752 4127 V 159 w(3)p 1942 4127 V 146 w(14)p 2147 4127
-V 114 w(5)p 2337 4127 V 146 w(14)p 2541 4127 V 114 w
-Fi(6)p 2693 4127 V 2710 4127 V 116 w Fl(48)p 2996 4127
-V 888 4131 2111 4 v 886 4243 4 113 v 937 4210 a(6)p 1205
-4243 V 275 w(0)p 1357 4243 V 107 w(1)p 1548 4243 V 145
-w(0)p 1752 4243 V 159 w(0)p 1942 4243 V 146 w(0)p 2147
-4243 V 159 w(0)p 2337 4243 V 146 w(9)p 2541 4243 V 159
-w(0)p 2693 4243 V 2710 4243 V 123 w(10)p 2996 4243 V
-888 4247 2111 4 v 888 4263 V 886 4376 4 113 v 937 4342
-a(total)p 1205 4376 V 134 w(8)p 1357 4376 V 107 w(20)p
-1548 4376 V 100 w(34)p 1752 4376 V 114 w(20)p 1942 4376
-V 101 w(55)p 2147 4376 V 114 w(27)p 2337 4376 V 101 w(54)p
-2541 4376 V 114 w(8)p 2693 4376 V 2710 4376 V 123 w(226)p
-2996 4376 V 888 4380 2111 4 v 94 4625 a(The)29 b(total)g(of)g(226)i
-(m.m.)40 b(comprises)28 b(59)i(m.m.)40 b(of)29 b(p)s(ermanen)m(t)f
-(sta\013)i(w)m(ork)f(for)g(the)g(four)f(sites)h(under)e(an)94
-4738 y(Additional)34 b(Cost)i(Regime:)52 b(UNIBO)36 b(\(17)h(m.m\),)h
-(DFKI)e(\(9)h(m.m\),)g(KUN)f(\(15)h(m.m\))f(and)g(MPG)g(\(18)94
-4851 y(m.m\).)p eop
-%%Page: 29 29
-29 28 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(29)94 171 y Fg(9.5)112 b(Pro)6 b(ject)37 b(Planning)g(and)h
-(timetable)94 3861 y @beginspecial 0 @llx 0 @lly 497
-@urx 471 @ury 4437 @rwi @setspecial
-%%BeginDocument: gantt_new.eps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: gantt_new.eps
-%%Creator: fig2dev Version 3.2 Patchlevel 3a
-%%CreationDate: Mon Jul  2 13:23:36 2001
-%%For: asperti@marcello (Andrea Asperti, docente, 2094505)
-%%BoundingBox: 0 0 497 471
-%%Magnification: 0.8000
-%%EndComments
-/MyAppDict 100 dict dup begin def
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
-newpath 0 471 moveto 0 0 lineto 497 0 lineto 497 471 lineto closepath clip newpath
--24.0 492.0 translate
-1 -1 scale
-
-% This junk string is used by the show operators
-/PATsstr 1 string def
-/PATawidthshow {       % cx cy cchar rx ry string
-  % Loop over each character in the string
-  {  % cx cy cchar rx ry char
-    % Show the character
-    dup                                % cx cy cchar rx ry char char
-    PATsstr dup 0 4 -1 roll put        % cx cy cchar rx ry char (char)
-    false charpath             % cx cy cchar rx ry char
-    /clip load PATdraw
-    % Move past the character (charpath modified the
-    % current point)
-    currentpoint                       % cx cy cchar rx ry char x y
-    newpath
-    moveto                     % cx cy cchar rx ry char
-    % Reposition by cx,cy if the character in the string is cchar
-    3 index eq {                       % cx cy cchar rx ry
-      4 index 4 index rmoveto
-    } if
-    % Reposition all characters by rx ry
-    2 copy rmoveto             % cx cy cchar rx ry
-  } forall
-  pop pop pop pop pop          % -
-  currentpoint
-  newpath
-  moveto
-} bind def
-/PATcg {
-  7 dict dup begin
-    /lw currentlinewidth def
-    /lc currentlinecap def
-    /lj currentlinejoin def
-    /ml currentmiterlimit def
-    /ds [ currentdash ] def
-    /cc [ currentrgbcolor ] def
-    /cm matrix currentmatrix def
-  end
-} bind def
-% PATdraw - calculates the boundaries of the object and
-% fills it with the current pattern
-/PATdraw {                     % proc
-  save exch
-    PATpcalc                   % proc nw nh px py
-    5 -1 roll exec             % nw nh px py
-    newpath
-    PATfill                    % -
-  restore
-} bind def
-% PATfill - performs the tiling for the shape
-/PATfill { % nw nh px py PATfill -
-  PATDict /CurrentPattern get dup begin
-    setfont
-    % Set the coordinate system to Pattern Space
-    PatternGState PATsg
-    % Set the color for uncolored pattezns
-    PaintType 2 eq { PATDict /PColor get PATsc } if
-    % Create the string for showing
-    3 index string             % nw nh px py str
-    % Loop for each of the pattern sources
-    0 1 Multi 1 sub {          % nw nh px py str source
-       % Move to the starting location
-       3 index 3 index         % nw nh px py str source px py
-       moveto                  % nw nh px py str source
-       % For multiple sources, set the appropriate color
-       Multi 1 ne { dup PC exch get PATsc } if
-       % Set the appropriate string for the source
-       0 1 7 index 1 sub { 2 index exch 2 index put } for pop
-       % Loop over the number of vertical cells
-       3 index                 % nw nh px py str nh
-       {                       % nw nh px py str
-         currentpoint          % nw nh px py str cx cy
-         2 index show          % nw nh px py str cx cy
-         YStep add moveto      % nw nh px py str
-       } repeat                % nw nh px py str
-    } for
-    5 { pop } repeat
-  end
-} bind def
-
-% PATkshow - kshow with the current pattezn
-/PATkshow {                    % proc string
-  exch bind                    % string proc
-  1 index 0 get                        % string proc char
-  % Loop over all but the last character in the string
-  0 1 4 index length 2 sub {
-                               % string proc char idx
-    % Find the n+1th character in the string
-    3 index exch 1 add get     % string proe char char+1
-    exch 2 copy                        % strinq proc char+1 char char+1 char
-    % Now show the nth character
-    PATsstr dup 0 4 -1 roll put        % string proc chr+1 chr chr+1 (chr)
-    false charpath             % string proc char+1 char char+1
-    /clip load PATdraw
-    % Move past the character (charpath modified the current point)
-    currentpoint newpath moveto
-    % Execute the user proc (should consume char and char+1)
-    mark 3 1 roll              % string proc char+1 mark char char+1
-    4 index exec               % string proc char+1 mark...
-    cleartomark                        % string proc char+1
-  } for
-  % Now display the last character
-  PATsstr dup 0 4 -1 roll put  % string proc (char+1)
-  false charpath               % string proc
-  /clip load PATdraw
-  neewath
-  pop pop                      % -
-} bind def
-% PATmp - the makepattern equivalent
-/PATmp {                       % patdict patmtx PATmp patinstance
-  exch dup length 7 add                % We will add 6 new entries plus 1 FID
-  dict copy                    % Create a new dictionary
-  begin
-    % Matrix to install when painting the pattern
-    TilingType PATtcalc
-    /PatternGState PATcg def
-    PatternGState /cm 3 -1 roll put
-    % Check for multi pattern sources (Level 1 fast color patterns)
-    currentdict /Multi known not { /Multi 1 def } if
-    % Font dictionary definitions
-    /FontType 3 def
-    % Create a dummy encoding vector
-    /Encoding 256 array def
-    3 string 0 1 255 {
-      Encoding exch dup 3 index cvs cvn put } for pop
-    /FontMatrix matrix def
-    /FontBBox BBox def
-    /BuildChar {
-       mark 3 1 roll           % mark dict char
-       exch begin
-       Multi 1 ne {PaintData exch get}{pop} ifelse  % mark [paintdata]
-         PaintType 2 eq Multi 1 ne or
-         { XStep 0 FontBBox aload pop setcachedevice }
-         { XStep 0 setcharwidth } ifelse
-         currentdict           % mark [paintdata] dict
-         /PaintProc load       % mark [paintdata] dict paintproc
-       end
-       gsave
-         false PATredef exec true PATredef
-       grestore
-       cleartomark             % -
-    } bind def
-    currentdict
-  end                          % newdict
-  /foo exch                    % /foo newlict
-  definefont                   % newfont
-} bind def
-% PATpcalc - calculates the starting point and width/height
-% of the tile fill for the shape
-/PATpcalc {    % - PATpcalc nw nh px py
-  PATDict /CurrentPattern get begin
-    gsave
-       % Set up the coordinate system to Pattern Space
-       % and lock down pattern
-       PatternGState /cm get setmatrix
-       BBox aload pop pop pop translate
-       % Determine the bounding box of the shape
-       pathbbox                        % llx lly urx ury
-    grestore
-    % Determine (nw, nh) the # of cells to paint width and height
-    PatHeight div ceiling              % llx lly urx qh
-    4 1 roll                           % qh llx lly urx
-    PatWidth div ceiling               % qh llx lly qw
-    4 1 roll                           % qw qh llx lly
-    PatHeight div floor                        % qw qh llx ph
-    4 1 roll                           % ph qw qh llx
-    PatWidth div floor                 % ph qw qh pw
-    4 1 roll                           % pw ph qw qh
-    2 index sub cvi abs                        % pw ph qs qh-ph
-    exch 3 index sub cvi abs exch      % pw ph nw=qw-pw nh=qh-ph
-    % Determine the starting point of the pattern fill
-    %(px, py)
-    4 2 roll                           % nw nh pw ph
-    PatHeight mul                      % nw nh pw py
-    exch                               % nw nh py pw
-    PatWidth mul exch                  % nw nh px py
-  end
-} bind def
-
-% Save the original routines so that we can use them later on
-/oldfill       /fill load def
-/oldeofill     /eofill load def
-/oldstroke     /stroke load def
-/oldshow       /show load def
-/oldashow      /ashow load def
-/oldwidthshow  /widthshow load def
-/oldawidthshow /awidthshow load def
-/oldkshow      /kshow load def
-
-% These defs are necessary so that subsequent procs don't bind in
-% the originals
-/fill     { oldfill } bind def
-/eofill           { oldeofill } bind def
-/stroke           { oldstroke } bind def
-/show     { oldshow } bind def
-/ashow    { oldashow } bind def
-/widthshow { oldwidthshow } bind def
-/awidthshow { oldawidthshow } bind def
-/kshow            { oldkshow } bind def
-/PATredef {
-  MyAppDict begin
-    {
-    /fill { /clip load PATdraw newpath } bind def
-    /eofill { /eoclip load PATdraw newpath } bind def
-    /stroke { PATstroke } bind def
-    /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def
-    /ashow { 0 0 null 6 3 roll PATawidthshow }
-    bind def
-    /widthshow { 0 0 3 -1 roll PATawidthshow }
-    bind def
-    /awidthshow { PATawidthshow } bind def
-    /kshow { PATkshow } bind def
-  } {
-    /fill   { oldfill } bind def
-    /eofill { oldeofill } bind def
-    /stroke { oldstroke } bind def
-    /show   { oldshow } bind def
-    /ashow  { oldashow } bind def
-    /widthshow { oldwidthshow } bind def
-    /awidthshow { oldawidthshow } bind def
-    /kshow  { oldkshow } bind def
-    } ifelse
-  end
-} bind def
-false PATredef
-% Conditionally define setcmykcolor if not available
-/setcmykcolor where { pop } {
-  /setcmykcolor {
-    1 sub 4 1 roll
-    3 {
-       3 index add neg dup 0 lt { pop 0 } if 3 1 roll
-    } repeat
-    setrgbcolor - pop
-  } bind def
-} ifelse
-/PATsc {               % colorarray
-  aload length         % c1 ... cn length
-    dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor
-  } ifelse } ifelse
-} bind def
-/PATsg {               % dict
-  begin
-    lw setlinewidth
-    lc setlinecap
-    lj setlinejoin
-    ml setmiterlimit
-    ds aload pop setdash
-    cc aload pop setrgbcolor
-    cm setmatrix
-  end
-} bind def
-
-/PATDict 3 dict def
-/PATsp {
-  true PATredef
-  PATDict begin
-    /CurrentPattern exch def
-    % If it's an uncolored pattern, save the color
-    CurrentPattern /PaintType get 2 eq {
-      /PColor exch def
-    } if
-    /CColor [ currentrgbcolor ] def
-  end
-} bind def
-% PATstroke - stroke with the current pattern
-/PATstroke {
-  countdictstack
-  save
-  mark
-  {
-    currentpoint strokepath moveto
-    PATpcalc                           % proc nw nh px py
-    clip newpath PATfill
-    } stopped {
-       (*** PATstroke Warning: Path is too complex, stroking
-         with gray) =
-    cleartomark
-    restore
-    countdictstack exch sub dup 0 gt
-       { { end } repeat } { pop } ifelse
-    gsave 0.5 setgray oldstroke grestore
-  } { pop restore pop } ifelse
-  newpath
-} bind def
-/PATtcalc {            % modmtx tilingtype PATtcalc tilematrix
-  % Note: tiling types 2 and 3 are not supported
-  gsave
-    exch concat                                        % tilingtype
-    matrix currentmatrix exch                  % cmtx tilingtype
-    % Tiling type 1 and 3: constant spacing
-    2 ne {
-       % Distort the pattern so that it occupies
-       % an integral number of device pixels
-       dup 4 get exch dup 5 get exch           % tx ty cmtx
-       XStep 0 dtransform
-       round exch round exch                   % tx ty cmtx dx.x dx.y
-       XStep div exch XStep div exch           % tx ty cmtx a b
-       0 YStep dtransform
-       round exch round exch                   % tx ty cmtx a b dy.x dy.y
-       YStep div exch YStep div exch           % tx ty cmtx a b c d
-       7 -3 roll astore                        % { a b c d tx ty }
-    } if
-  grestore
-} bind def
-/PATusp {
-  false PATredef
-  PATDict begin
-    CColor PATsc
-  end
-} bind def
-
-% crosshatch30
-11 dict begin
-/PaintType 1 def
-/PatternType 1 def
-/TilingType 1 def
-/BBox [0 0 1 1] def
-/XStep 1 def
-/YStep 1 def
-/PatWidth 1 def
-/PatHeight 1 def
-/Multi 2 def
-/PaintData [
-  { clippath } bind
-  { 32 16 true [ 32 0 0 -16 0 16 ]
-       {<033003300c0c0c0c30033003c000c000300330030c0c0c0c
-       0330033000c000c0033003300c0c0c0c30033003c000c000
-       300330030c0c0c0c0330033000c000c0>}
-     imagemask } bind
-] def
-/PaintProc {
-       pop
-       exec fill
-} def
-currentdict
-end
-/P3 exch def
-
-% left45
-11 dict begin
-/PaintType 1 def
-/PatternType 1 def
-/TilingType 1 def
-/BBox [0 0 1 1] def
-/XStep 1 def
-/YStep 1 def
-/PatWidth 1 def
-/PatHeight 1 def
-/Multi 2 def
-/PaintData [
-  { clippath } bind
-  { 32 32 true [ 32 0 0 -32 0 32 ]
-       {<808080804040404020202020101010100808080804040404
-       020202020101010180808080404040402020202010101010
-       080808080404040402020202010101018080808040404040
-       202020201010101008080808040404040202020201010101
-       808080804040404020202020101010100808080804040404
-       0202020201010101>}
-     imagemask } bind
-] def
-/PaintProc {
-       pop
-       exec fill
-} def
-currentdict
-end
-/P4 exch def
-
-% crosshatch45
-11 dict begin
-/PaintType 1 def
-/PatternType 1 def
-/TilingType 1 def
-/BBox [0 0 1 1] def
-/XStep 1 def
-/YStep 1 def
-/PatWidth 1 def
-/PatHeight 1 def
-/Multi 2 def
-/PaintData [
-  { clippath } bind
-  { 32 32 true [ 32 0 0 -32 0 32 ]
-       {<828282824444444428282828101010102828282844444444
-       828282820101010182828282444444442828282810101010
-       282828284444444482828282010101018282828244444444
-       282828281010101028282828444444448282828201010101
-       828282824444444428282828101010102828282844444444
-       8282828201010101>}
-     imagemask } bind
-] def
-/PaintProc {
-       pop
-       exec fill
-} def
-currentdict
-end
-/P6 exch def
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Times-Roman /Times-Roman-iso isovec ReEncode
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-%%Page: 1 1
-10 setmiterlimit
- 0.04800 0.04800 sc
-% Polyline
-7.500 slw
-n 4800 450 m
- 4800 8250 l gs col7 0.90 shd ef gr gs col0 s gr 
-% Polyline
-n 5400 4275 m 7200 4275 l 7200 4500 l 5400 4500 l
- cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P3 [16 0 0 -8 360.00 285.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 6000 4500 m 7800 4500 l 7800 4725 l 6000 4725 l
- cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P3 [16 0 0 -8 400.00 300.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 6000 4725 m 7800 4725 l 7800 4950 l 6000 4950 l
- cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P3 [16 0 0 -8 400.00 315.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 7200 450 m
- 7200 8325 l gs col7 0.90 shd ef gr gs col0 s gr 
-% Polyline
-n 6000 450 m
- 6000 8325 l gs col7 0.90 shd ef gr gs col0 s gr 
-% Polyline
-n 6000 6000 m 7200 6000 l 7200 6225 l 6000 6225 l
- cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P4 [16 0 0 -16 400.00 400.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 7200 4950 m 9000 4950 l 9000 5175 l 7200 5175 l
- cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P3 [16 0 0 -8 480.00 330.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 7200 5400 m 9000 5400 l 9000 5625 l 7200 5625 l
- cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P3 [16 0 0 -8 480.00 360.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 6600 5175 m 9000 5175 l 9000 5400 l 6600 5400 l
- cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P3 [16 0 0 -8 440.00 345.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 7200 7350 m 9600 7350 l 9600 7575 l 7200 7575 l
- cp gs col7 0.55 shd ef gr gs col0 s gr 
-% Polyline
-n 5400 6900 m 7800 6900 l 7800 7125 l 5400 7125 l
- cp gs col7 0.55 shd ef gr gs col0 s gr 
-% Polyline
-n 6600 6225 m 9000 6225 l 9000 6450 l 6600 6450 l
- cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P4 [16 0 0 -16 440.00 415.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 7200 7125 m 9600 7125 l 9600 7350 l 7200 7350 l
- cp gs col7 0.55 shd ef gr gs col0 s gr 
-% Polyline
-n 525 450 m
- 10800 450 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 4800 825 m
- 10800 825 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 525 1275 m
- 10800 1275 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 525 5625 m
- 10800 5625 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 525 6450 m
- 10800 6450 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 525 2175 m
- 10800 2175 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 525 1800 m
- 10800 1800 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 525 3900 m
- 10800 3900 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 4800 1800 m 10800 1800 l 10800 2175 l 4800 2175 l
- cp gs col7 0.40 shd ef gr gs col0 s gr 
-% Polyline
-n 6600 450 m
- 6600 8325 l gs col7 0.90 shd ef gr gs col0 s gr 
-% Polyline
-n 525 450 m
- 525 8925 l gs col7 0.90 shd ef gr gs col0 s gr 
-% Polyline
-n 5400 7575 m 8400 7575 l 8400 7800 l 5400 7800 l
- cp gs col7 0.55 shd ef gr gs col0 s gr 
-% Polyline
-n 6600 8175 m 8400 8175 l 8400 8400 l 6600 8400 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 4800 8250 m
- 4800 10050 l gs col0 s gr 
-% Polyline
-n 6000 8250 m
- 6000 10050 l gs col0 s gr 
-% Polyline
-n 8400 8625 m 10200 8625 l 10200 8850 l 8400 8850 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-45.000 slw
-n 7200 9225 m
- 7200 10050 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 8400 9150 m
- 8400 10050 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 9600 9150 m
- 9600 10050 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 10800 9075 m
- 10800 10050 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-7.500 slw
-n 525 7800 m
- 10800 7800 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 525 8850 m
- 10800 8850 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 7800 8400 m 9000 8400 l 9000 8625 l 7800 8625 l
- cp gs col7 0.75 shd ef gr gs col0 s gr 
-% Polyline
-n 525 10200 m
- 10800 10200 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 7200 9675 m 10800 9675 l 10800 9900 l 7200 9900 l
- cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P3 [16 0 0 -8 480.00 645.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 7200 9225 m 10800 9225 l 10800 9450 l 7200 9450 l
- cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P3 [16 0 0 -8 480.00 615.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 9600 8250 m
- 9600 10050 l gs col0 s gr 
-% Polyline
-n 525 9900 m
- 525 8925 l gs col0 s gr 
-% Polyline
-n 525 9900 m
- 525 10200 l gs col0 s gr 
-% Polyline
-n 675 10200 m 10800 10200 l
- 10800 9975 l gs col0 s gr 
-% Polyline
-n 525 9900 m
- 10800 9900 l gs col0 s gr 
-% Polyline
-n 5400 8100 m
- 5400 10200 l gs col0 s gr 
-% Polyline
-n 5400 9900 m 10800 9900 l 10800 10200 l 5400 10200 l
- cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P6 [16 0 0 -16 360.00 660.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 6600 8025 m
- 6600 10200 l gs col0 s gr 
-% Polyline
-n 7200 9450 m 10800 9450 l 10800 9675 l 7200 9675 l
- cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P3 [16 0 0 -8 480.00 630.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 7800 7875 m
- 7800 10200 l gs col0 s gr 
-% Polyline
-n 9000 8250 m
- 9000 10200 l gs col0 s gr 
-% Polyline
-n 10200 8175 m
- 10200 10200 l gs col0 s gr 
-% Polyline
-45.000 slw
-n 6000 9150 m
- 6000 9975 l gs col7 0.95 shd ef gr gs col0 s gr 
-% Polyline
-n 6000 9825 m
- 6000 10200 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P6 [16 0 0 -16 400.00 655.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 7200 9150 m
- 7200 10200 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P6 [16 0 0 -16 480.00 610.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 8400 9000 m
- 8400 10200 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P6 [16 0 0 -16 560.00 600.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 9600 9000 m
- 9600 10200 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P6 [16 0 0 -16 640.00 600.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 10800 9075 m
- 10800 10200 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P6 [16 0 0 -16 720.00 605.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-7.500 slw
-n 7800 825 m
- 7800 8700 l gs col7 0.90 shd ef gr gs col0 s gr 
-% Polyline
-n 4800 9675 m
- 4800 10200 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
-15.00 15.00 sc P6 [16 0 0 -16 320.00 645.00] PATmp PATsp ef gr PATusp gs col0 s gr 
-% Polyline
-n 4800 2550 m 5400 2550 l 5400 2775 l 4800 2775 l
- cp gs col7 0.90 shd ef gr gs col0 s gr 
-% Polyline
-n 4800 2775 m 5400 2775 l 5400 3000 l 4800 3000 l
- cp gs col7 0.90 shd ef gr gs col0 s gr 
-% Polyline
-n 4800 3000 m 6000 3000 l 6000 3225 l 4800 3225 l
- cp gs col7 0.90 shd ef gr gs col0 s gr 
-% Polyline
-n 4800 3225 m 6000 3225 l 6000 3450 l 4800 3450 l
- cp gs col7 0.90 shd ef gr gs col0 s gr 
-% Polyline
-n 4800 3450 m 6000 3450 l 6000 3675 l 4800 3675 l
- cp gs col7 0.90 shd ef gr gs col0 s gr 
-% Polyline
-n 4800 3675 m 5400 3675 l 5400 3900 l 4800 3900 l
- cp gs col7 0.90 shd ef gr gs col0 s gr 
-% Polyline
-n 5400 450 m
- 5400 8325 l gs col7 0.90 shd ef gr gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
-675 5325 m
-gs 1 -1 sc (T2.5 Presentational Stylesheets) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 5550 m
-gs 1 -1 sc (T2.6 Automatic Proof Generation in Natural Language) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 6150 m
-gs 1 -1 sc (T3.1 Use, meaning and classification) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 8550 m
-gs 1 -1 sc (T5.2 Prototype Implementation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 8775 m
-gs 1 -1 sc (T5.3. Integration with the Consultation Engine) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 3825 m
-gs 1 -1 sc (T1.6 Document Authoring) col0 sh gr
-% Polyline
-n 10785 450 m
- 10785 9165 l gs col0 s gr 
-% Polyline
-n 9600 450 m
- 9600 9165 l gs col0 s gr 
-% Polyline
-n 8400 450 m
- 8400 9165 l gs col0 s gr 
-% Polyline
-45.000 slw
-n 6000 825 m
- 6000 9150 l gs col0 s gr 
-% Polyline
-7.500 slw
-n 9000 450 m
- 9000 9165 l gs col0 s gr 
-% Polyline
-n 10200 450 m
- 10200 9165 l gs col0 s gr 
-% Polyline
-45.000 slw
-n 9600 825 m
- 9600 9150 l gs col0 s gr 
-% Polyline
-n 10800 825 m
- 10800 9150 l gs col0 s gr 
-% Polyline
-n 7200 825 m
- 7200 9150 l gs col0 s gr 
-% Polyline
-n 8400 825 m
- 8400 9150 l gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
-10485 720 m
-gs 1 -1 sc (30) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-9300 720 m
-gs 1 -1 sc (24) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-8085 720 m
-gs 1 -1 sc (18) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-6915 720 m
-gs 1 -1 sc (12) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-5790 720 m
-gs 1 -1 sc (6) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-3825 1050 m
-gs 1 -1 sc (Milestones) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-3510 780 m
-gs 1 -1 sc (Review months) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-660 2070 m
-gs 1 -1 sc (WP0 - PROJECT MANAGEMENT) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-660 1545 m
-gs 1 -1 sc (Work Packages and Tasks) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 4200 m
-gs 1 -1 sc (WP2 TRANSFORMATION) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 4425 m
-gs 1 -1 sc (T2.1 XML Exportation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 4650 m
-gs 1 -1 sc (T2.2. Stylesheets to Intermediate Representation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 4875 m
-gs 1 -1 sc (T2.3 Proof Transformation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 5100 m
-gs 1 -1 sc (T2.4 Automatic Extraction of Metadata) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 5925 m
-gs 1 -1 sc (WP3 METADATA) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 6375 m
-gs 1 -1 sc (T3.2 Modeling) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 7275 m
-gs 1 -1 sc (T4.2 Consultation Engine ) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 7500 m
-gs 1 -1 sc (T4.3 Assisted Annotation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 6825 m
-gs 1 -1 sc (WP4 INTERFACES) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 7050 m
-gs 1 -1 sc (T4.1 MathML Rendering/Browsing Engines) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 7725 m
-gs 1 -1 sc (T4.4 Latex-based authoring tools) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 8100 m
-gs 1 -1 sc (WP5 DISTRIBUTION) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 8325 m
-gs 1 -1 sc (T5.1 Overall architectural Design) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 9150 m
-gs 1 -1 sc (WP6 TESTING AND VALIDATION) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 9375 m
-gs 1 -1 sc (T6.1 Education) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 9600 m
-gs 1 -1 sc (T6.2 Certified Code) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 10125 m
-gs 1 -1 sc (WP7 DISSEMINATION AND EXPLOITATION) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 2475 m
-gs 1 -1 sc (WP1 -REQUIREMENT ANALYSIS) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 2700 m
-gs 1 -1 sc (T1.1 Mathematics and the Web) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 2925 m
-gs 1 -1 sc (T1.2 Structured and Formal Mathematics) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 3150 m
-gs 1 -1 sc (T1.3 Metadata) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 3375 m
-gs 1 -1 sc (T1.4 Searching and Retrieving) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 3600 m
-gs 1 -1 sc (T1.5 Distribution) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-675 9825 m
-gs 1 -1 sc (T6.3 Electronic Publishing) col0 sh gr
-$F2psEnd
-rs
-end
-
-%%EndDocument
- @endspecial eop
-%%Page: 30 30
-30 29 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(30)94 171 y Fg(9.6)112 b(Graphical)37 b(presen)m(tation)g(of)h
-(pro)6 b(ject)37 b(comp)s(onen)m(ts)94 5876 y @beginspecial
-0 @llx 0 @lly 372 @urx 628 @ury 3993 @rwi @setspecial
-%%BeginDocument: pert_new.eps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: pert_new.eps
-%%Creator: fig2dev Version 3.2 Patchlevel 3a
-%%CreationDate: Mon Jul  2 13:36:49 2001
-%%For: asperti@marcello (Andrea Asperti, docente, 2094505)
-%%BoundingBox: 0 0 372 628
-%%Magnification: 0.4500
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
-newpath 0 628 moveto 0 0 lineto 372 0 lineto 372 628 lineto closepath clip newpath
-373.0 627.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Times-Roman /Times-Roman-iso isovec ReEncode
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-%%Page: 1 1
-10 setmiterlimit
- 0.02700 0.02700 sc
-% Polyline
-7.500 slw
-n -2325 6750 m -2325 9075 l -3150 9075 l -3150 6750 l
- cp gs col0 s gr 
-% Polyline
-n -3450 6750 m -3450 9075 l -4275 9075 l -4275 6750 l
- cp gs col0 s gr 
-% Polyline
-n -2775 6450 m
- -5025 6450 l gs col0 s gr 
-% Polyline
-n -4575 6750 m -4575 9075 l -5400 9075 l -5400 6750 l
- cp gs col0 s gr 
-% Polyline
-n -3450 10875 m -3450 13200 l -4275 13200 l -4275 10875 l
- cp gs col0 s gr 
-% Polyline
-n -6975 14925 m -6975 16950 l -7800 16950 l -7800 14925 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--7200 15000 m
-gs 1 -1 sc  270.0 rot (6.1) col0 sh gr
-% Polyline
-n -6975 18675 m -6975 20700 l -7800 20700 l -7800 18675 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--7200 18750 m
-gs 1 -1 sc  270.0 rot (6.1) col0 sh gr
-% Polyline
-n -5775 2700 m -5775 9075 l -6600 9075 l -6600 2700 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--6000 2775 m
-gs 1 -1 sc  270.0 rot (4.1) col0 sh gr
-% Polyline
-n -11025 14625 m
- -11025 14925 l gs col0 s gr 
-% Polyline
-n -10950 14625 m
- -12225 14625 l gs col0 s gr 
-% Polyline
-n -12225 14625 m
- -12225 14925 l gs col0 s gr 
-% Polyline
-n -11775 14925 m -11775 16950 l -12600 16950 l -12600 14925 l
- cp gs col0 s gr 
-% Polyline
-n -10650 14925 m -10650 16950 l -11475 16950 l -11475 14925 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--10875 15000 m
-gs 1 -1 sc  270.0 rot (4.2) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--12000 15000 m
-gs 1 -1 sc  270.0 rot (5.2-5.3) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8475 17700 m
-gs 1 -1 sc  270.0 rot (M8) col0 sh gr
-% Polyline
-n -6675 10875 m -6675 13200 l -7500 13200 l -7500 10875 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--6900 10950 m
-gs 1 -1 sc  270.0 rot (4.4) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--7200 10950 m
-gs 1 -1 sc  270.0 rot (Latex-based authoring tool) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--7425 10950 m
-gs 1 -1 sc  270.0 rot (6,0) col0 sh gr
-% Polyline
-n -8400 1500 m -8400 4950 l -9225 4950 l -9225 1500 l
- cp gs col0 s gr 
-% Polyline
-n -9600 1500 m -9600 4950 l -10425 4950 l -10425 1500 l
- cp gs col0 s gr 
-% Polyline
-n -10725 10875 m -10725 13200 l -11550 13200 l -11550 10875 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--10950 10950 m
-gs 1 -1 sc  270.0 rot (4.2) col0 sh gr
-% Polyline
-n -9675 10875 m -9675 13200 l -10500 13200 l -10500 10875 l
- cp gs col0 s gr 
-% Polyline
-n -8700 10875 m -8700 13200 l -9525 13200 l -9525 10875 l
- cp gs col0 s gr 
-% Polyline
-n -3300 3225 m
- -4500 3225 l gs col0 s gr 
-% Polyline
-n -3900 4950 m
- -3900 5550 l gs col0 s gr 
-% Polyline
-n -3900 6075 m
- -3900 6750 l gs col0 s gr 
-% Polyline
-n -2775 9375 m
- -4950 9375 l gs col0 s gr 
-% Polyline
-n -3900 10425 m
- -3900 10875 l gs col0 s gr 
-% Polyline
-n -4575 10875 m -4575 13200 l -5400 13200 l -5400 10875 l
- cp gs col0 s gr 
-% Polyline
-n -5025 10575 m
- -3900 10575 l gs col0 s gr 
-% Polyline
-n -6225 1350 m
- -6225 2700 l gs col0 s gr 
-% Polyline
-n -4950 10575 m
- -6150 10575 l gs col0 s gr 
-% Polyline
-n -6150 10200 m
- -6150 10575 l gs col0 s gr 
-% Polyline
-n -6150 9075 m
- -6150 9675 l gs col0 s gr 
-% Polyline
-n -5700 10575 m
- -8175 10575 l gs col0 s gr 
-% Polyline
-n -2325 10875 m -2325 13200 l -3150 13200 l -3150 10875 l
- cp gs col0 s gr 
-% Polyline
-n -3900 10575 m -2775 10575 l
- -2775 10875 l gs col0 s gr 
-% Polyline
-n -6150 10575 m
- -6150 10875 l gs col0 s gr 
-% Polyline
-n -2775 13500 m
- -9825 13500 l gs col0 s gr 
-% Polyline
-n -7650 13500 m
- -7650 13800 l gs col0 s gr 
-% Polyline
-n -7650 14625 m -6150 14625 l
- -6150 14925 l gs col0 s gr 
-% Polyline
-n -7575 14625 m
- -9825 14625 l gs col0 s gr 
-% Polyline
-n -5700 14925 m -5700 16950 l -6525 16950 l -6525 14925 l
- cp gs col0 s gr 
-% Polyline
-n -4350 21075 m
- -8400 21075 l gs col0 s gr 
-% Polyline
-n -8400 20700 m
- -8400 21075 l gs col0 s gr 
-% Polyline
-n -7500 20700 m
- -7500 21075 l gs col0 s gr 
-% Polyline
-n -1575 19125 m -1575 21075 l
- -4350 21075 l gs col0 s gr 
-% Polyline
-n -1575 6075 m
- -1575 7725 l gs col0 s gr 
-% Polyline
-n -1575 12750 m
- -1575 19275 l gs col0 s gr 
-% Polyline
-n -7425 18375 m
- -7425 18675 l gs col0 s gr 
-% Polyline
-n -5925 21900 m
- -5925 22200 l gs col0 s gr 
-% Polyline
-n -5925 21075 m
- -5925 21375 l gs col0 s gr 
-% Polyline
-n -7650 10575 m
- -9450 10575 l gs col0 s gr 
-% Polyline
-n -7425 9075 m
- -7425 10875 l gs col0 s gr 
-% Polyline
-n -7575 9075 m
- -7575 9375 l gs col0 s gr 
-% Polyline
-n -7575 9375 m -8100 9375 l -8100 6450 l -8775 6450 l
- -8775 6750 l gs col0 s gr 
-% Polyline
-n -9075 1200 m
- -10350 1200 l gs col0 s gr 
-% Polyline
-n -9675 13500 m
- -11100 13500 l gs col0 s gr 
-% Polyline
-n -9150 14925 m -9150 16950 l -9975 16950 l -9975 14925 l
- cp gs col0 s gr 
-% Polyline
-n -8025 14925 m -8025 16950 l -8850 16950 l -8850 14925 l
- cp gs col0 s gr 
-% Polyline
-n -9150 18675 m -9150 20700 l -9975 20700 l -9975 18675 l
- cp gs col0 s gr 
-% Polyline
-n -8025 18675 m -8025 20700 l -8850 20700 l -8850 18675 l
- cp gs col0 s gr 
-% Polyline
-n -6225 17250 m
- -12150 17250 l gs col0 s gr 
-% Polyline
-n -7425 18375 m -9675 18375 l
- -9675 18675 l gs col0 s gr 
-% Polyline
-n -8475 18300 m
- -8475 18675 l gs col0 s gr 
-% Polyline
-n -9750 14625 m
- -11625 14625 l gs col0 s gr 
-% Polyline
-n -12225 14625 m
- -12225 14925 l gs col0 s gr 
-% Polyline
-n -2700 1200 m
- -3450 1200 l gs col0 s gr 
-% Polyline
-n -1575 1200 m
- -525 1200 l gs col0 s gr 
-% Polyline
-n -525 1200 m
- -525 7725 l gs col0 s gr 
-% Polyline
-n -525 12750 m -525 21075 l
- -1725 21075 l gs col0 s gr 
-% Polyline
-n -9450 10200 m
- -9450 10575 l gs col0 s gr 
-% Polyline
-n -9375 10575 m
- -11100 10575 l gs col0 s gr 
-% Polyline
-n -11100 10575 m
- -11100 10875 l gs col0 s gr 
-% Polyline
-n -10125 10575 m
- -10125 10875 l gs col0 s gr 
-% Polyline
-n -11850 7650 m -11850 13200 l -12675 13200 l -12675 7650 l
- cp gs col0 s gr 
-% Polyline
-n -12300 7350 m
- -10050 7350 l gs col0 s gr 
-% Polyline
-n -8850 5250 m
- -10050 5250 l gs col0 s gr 
-% Polyline
-n -8400 6750 m -8400 9075 l -9225 9075 l -9225 6750 l
- cp gs col0 s gr 
-% Polyline
-n -8850 6450 m -10050 6450 l
- -10050 7650 l gs col0 s gr 
-% Polyline
-n -9450 6075 m
- -9450 6450 l gs col0 s gr 
-% Polyline
-n -8775 9375 m
- -10050 9375 l gs col0 s gr 
-% Polyline
-n -9450 9375 m
- -9450 9675 l gs col0 s gr 
-% Polyline
-n -11850 1500 m -11850 4950 l -12675 4950 l -12675 1500 l
- cp gs col0 s gr 
-% Polyline
-n -10125 1200 m -12300 1200 l
- -12300 1500 l gs col0 s gr 
-% Polyline
-n -12300 6075 m
- -12300 7350 l gs col0 s gr 
-% Polyline
-n -12300 4950 m
- -12300 5550 l gs col0 s gr 
-% Polyline
-n -12975 10875 m -12975 13200 l -13800 13200 l -13800 10875 l
- cp gs col0 s gr 
-% Polyline
-n -13425 10875 m -13425 10575 l
- -12675 10575 l gs col0 s gr 
-% Polyline
-n -11025 13500 m
- -13425 13500 l gs col0 s gr 
-% Polyline
-n -7725 10875 m -7725 13200 l -8550 13200 l -8550 10875 l
- cp gs col0 s gr 
-% Polyline
-n -7050 13200 m
- -7050 13500 l gs col0 s gr 
-% Polyline
-n -8175 13200 m
- -8175 13500 l gs col0 s gr 
-% Polyline
-n -9075 10575 m
- -9075 10875 l gs col0 s gr 
-% Polyline
-n -9600 20700 m
- -9600 21075 l gs col0 s gr 
-% Polyline
-n -9600 21075 m
- -8325 21075 l gs col0 s gr 
-% Polyline
-n -5700 10875 m -5700 13200 l -6525 13200 l -6525 10875 l
- cp gs col0 s gr 
-% Polyline
-n -6975 3675 m -6975 9075 l -7800 9075 l -7800 3675 l
- cp gs col0 s gr 
-% Polyline
-n -7425 1200 m
- -7425 1575 l gs col0 s gr 
-% Polyline
-n -7425 3000 m
- -7425 3675 l gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--7650 13950 m
-gs 1 -1 sc  270.0 rot (M7) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--6000 21525 m
-gs 1 -1 sc  270.0 rot (M9) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8250 15000 m
-gs 1 -1 sc  270.0 rot (6.2) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8250 18750 m
-gs 1 -1 sc  270.0 rot (6.2) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--9900 15000 m
-gs 1 -1 sc  270.0 rot (6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--9900 18750 m
-gs 1 -1 sc  270.0 rot (6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--1725 7800 m
-gs 1 -1 sc  270.0 rot (Dissemination and Exploitation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--9375 15000 m
-gs 1 -1 sc  270.0 rot (6.3) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--9375 18750 m
-gs 1 -1 sc  270.0 rot (6.3) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8550 16500 m
-gs 1 -1 sc  270.0 rot ( ) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8550 15000 m
-gs 1 -1 sc  270.0 rot (Validation:Certified Code) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8550 18750 m
-gs 1 -1 sc  270.0 rot (Validation:Certified Code) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--12075 7725 m
-gs 1 -1 sc  270.0 rot (5.1) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--13200 10950 m
-gs 1 -1 sc  270.0 rot (5.2) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8250 10950 m
-gs 1 -1 sc  270.0 rot (Validation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--7950 10950 m
-gs 1 -1 sc  270.0 rot (6.1-3) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--5925 10950 m
-gs 1 -1 sc  270.0 rot (4.3) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--5925 15000 m
-gs 1 -1 sc  270.0 rot (4.3) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--7200 3825 m
-gs 1 -1 sc  270.0 rot (4.4) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--7200 1650 m
-gs 1 -1 sc  270.0 rot (1.6) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--7500 1650 m
-gs 1 -1 sc  270.0 rot (Authoring) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--7725 1650 m
-gs 1 -1 sc  270.0 rot (3,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--9675 15000 m
-gs 1 -1 sc  270.0 rot (Validation: e-publishing) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--9675 18750 m
-gs 1 -1 sc  270.0 rot (Validation: e-publishing) col0 sh gr
-% Polyline
-n -6000 750 m -6225 975 l
- -6450 750 l gs col0 s gr 
-% Polyline
-n -6450 750 m -6450 0 l -6000 0 l
- -6000 750 l gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--6300 150 m
-gs 1 -1 sc  270.0 rot (START) col0 sh gr
-% Polyline
-n -2850 1500 m -2850 2925 l -3675 2925 l -3675 1500 l
- cp gs col0 s gr 
-% Polyline
-n -2850 1500 m -2850 2475 l -3150 2475 l -3150 1500 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--3600 1575 m
-gs 1 -1 sc  270.0 rot (3,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3375 1575 m
-gs 1 -1 sc  270.0 rot (Math & the Web) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3075 1575 m
-gs 1 -1 sc  270.0 rot (1.1) col0 sh gr
-% Polyline
-n -4050 1500 m -4050 2925 l -4875 2925 l -4875 1500 l
- cp gs col0 s gr 
-% Polyline
-n -4050 1500 m -4050 2475 l -4350 2475 l -4350 1500 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--4575 1575 m
-gs 1 -1 sc  270.0 rot (Structured and ) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--4800 1575 m
-gs 1 -1 sc  270.0 rot (Formal Math 3,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--4275 1575 m
-gs 1 -1 sc  270.0 rot (1.2) col0 sh gr
-% Polyline
-n -3675 5550 m -3675 6075 l -4200 6075 l -4200 5550 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--3975 5700 m
-gs 1 -1 sc  270.0 rot (M1) col0 sh gr
-% Polyline
-n -2325 6750 m -2325 7725 l -2625 7725 l -2625 6750 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--2550 6825 m
-gs 1 -1 sc  270.0 rot (2.1) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--2850 6825 m
-gs 1 -1 sc  270.0 rot (XML Exportation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3075 6825 m
-gs 1 -1 sc  270.0 rot (6,0) col0 sh gr
-% Polyline
-n -3450 6750 m -3450 7725 l -3750 7725 l -3750 6750 l
- cp gs col0 s gr 
-% Polyline
-n -3900 9075 m
- -3900 9375 l gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--3975 6825 m
-gs 1 -1 sc  270.0 rot (Stylesheets to Intermediate) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3675 6825 m
-gs 1 -1 sc  270.0 rot (2.2) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--4200 6825 m
-gs 1 -1 sc  270.0 rot (Rerpresentation   6,0) col0 sh gr
-% Polyline
-n -4575 6750 m -4575 7725 l -4875 7725 l -4875 6750 l
- cp gs col0 s gr 
-% Polyline
-n -4950 9075 m
- -4950 9375 l gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--5325 6825 m
-gs 1 -1 sc  270.0 rot (6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--5100 6825 m
-gs 1 -1 sc  270.0 rot (Proof Transformation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--4800 6825 m
-gs 1 -1 sc  270.0 rot (2.3) col0 sh gr
-% Polyline
-n -3450 3525 m -3450 4500 l -3750 4500 l -3750 3525 l
- cp gs col0 s gr 
-% Polyline
-n -3450 3525 m -3450 4950 l -4275 4950 l -4275 3525 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--4200 3600 m
-gs 1 -1 sc  270.0 rot (3,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3675 3600 m
-gs 1 -1 sc  270.0 rot (2.1) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3975 3600 m
-gs 1 -1 sc  270.0 rot (XML Exportation) col0 sh gr
-% Polyline
-n -3450 3525 m -3450 4500 l -3750 4500 l -3750 3525 l
- cp gs col0 s gr 
-% Polyline
-n -3450 3525 m -3450 4950 l -4275 4950 l -4275 3525 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--4200 3600 m
-gs 1 -1 sc  270.0 rot (3,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3675 3600 m
-gs 1 -1 sc  270.0 rot (2.1) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3975 3600 m
-gs 1 -1 sc  270.0 rot (XML Exportation) col0 sh gr
-% Polyline
-n -3450 3525 m -3450 4500 l -3750 4500 l -3750 3525 l
- cp gs col0 s gr 
-% Polyline
-n -3450 3525 m -3450 4950 l -4275 4950 l -4275 3525 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--4200 3600 m
-gs 1 -1 sc  270.0 rot (3,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3675 3600 m
-gs 1 -1 sc  270.0 rot (2.1) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3975 3600 m
-gs 1 -1 sc  270.0 rot (XML Exportation) col0 sh gr
-% Polyline
-n -3450 3525 m -3450 4500 l -3750 4500 l -3750 3525 l
- cp gs col0 s gr 
-% Polyline
-n -3450 3525 m -3450 4950 l -4275 4950 l -4275 3525 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--4200 3600 m
-gs 1 -1 sc  270.0 rot (3,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3675 3600 m
-gs 1 -1 sc  270.0 rot (2.1) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3975 3600 m
-gs 1 -1 sc  270.0 rot (XML Exportation) col0 sh gr
-% Polyline
-n -3450 10875 m -3450 11850 l -3750 11850 l -3750 10875 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--3675 10950 m
-gs 1 -1 sc  270.0 rot (2.5) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3975 10950 m
-gs 1 -1 sc  270.0 rot (Presentational Stylesheets) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--4200 10950 m
-gs 1 -1 sc  270.0 rot ( 6,0) col0 sh gr
-% Polyline
-n -6975 14925 m -6975 15900 l -7275 15900 l -7275 14925 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--7725 15000 m
-gs 1 -1 sc  270.0 rot ( 6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--7500 15000 m
-gs 1 -1 sc  270.0 rot (Validation: Education) col0 sh gr
-% Polyline
-n -6975 18675 m -6975 19650 l -7275 19650 l -7275 18675 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--7725 18750 m
-gs 1 -1 sc  270.0 rot ( 6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--7500 18750 m
-gs 1 -1 sc  270.0 rot (Validation: Education) col0 sh gr
-% Polyline
-n -5700 22425 m -5925 22200 l
- -6150 22425 l gs col0 s gr 
-% Polyline
-n -6150 22425 m -6150 23175 l -5700 23175 l
- -5700 22425 l gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--6000 22500 m
-gs 1 -1 sc  270.0 rot (END) col0 sh gr
-% Polyline
-n -5775 2700 m -5775 3675 l -6075 3675 l -6075 2700 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--6300 2775 m
-gs 1 -1 sc  270.0 rot (MathML Rendering/Browsing Engines) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--6525 2775 m
-gs 1 -1 sc  270.0 rot (9,0) col0 sh gr
-% Polyline
-n -11775 14925 m -11775 15900 l -12075 15900 l -12075 14925 l
- cp gs col0 s gr 
-% Polyline
-n -10650 14925 m -10650 15900 l -10950 15900 l -10950 14925 l
- cp gs col0 s gr 
-% Polyline
-n -11100 16950 m
- -11100 17250 l gs col0 s gr 
-% Polyline
-n -12150 16950 m
- -12150 17250 l gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--12300 15000 m
-gs 1 -1 sc  270.0 rot (Integration Consultation/) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--12525 15000 m
-gs 1 -1 sc  270.0 rot (Distribution  6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--11400 15000 m
-gs 1 -1 sc  270.0 rot ( 6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--11175 15000 m
-gs 1 -1 sc  270.0 rot (Consultation Engine) col0 sh gr
-% Polyline
-n -8175 17550 m -8175 18075 l -8700 18075 l -8700 17550 l
- cp gs col0 s gr 
-% Polyline
-n -8475 17250 m
- -8475 17550 l gs col0 s gr 
-% Polyline
-n -8475 18075 m
- -8475 18375 l gs col0 s gr 
-% Polyline
-n -6675 10875 m -6675 11850 l -6975 11850 l -6975 10875 l
- cp gs col0 s gr 
-% Polyline
-n -8400 1500 m -8400 2475 l -8700 2475 l -8700 1500 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--9150 1575 m
-gs 1 -1 sc  270.0 rot (3,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8925 1575 m
-gs 1 -1 sc  270.0 rot (Metadata) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8625 1575 m
-gs 1 -1 sc  270.0 rot (1.3) col0 sh gr
-% Polyline
-n -10050 4950 m
- -10050 5250 l gs col0 s gr 
-% Polyline
-n -9600 1500 m -9600 2475 l -9900 2475 l -9900 1500 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--10350 1575 m
-gs 1 -1 sc  270.0 rot (3,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--9825 1575 m
-gs 1 -1 sc  270.0 rot (1.4) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--10125 1575 m
-gs 1 -1 sc  270.0 rot (Searching & Retrieving) col0 sh gr
-% Polyline
-n -9225 5550 m -9225 6075 l -9750 6075 l -9750 5550 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--9525 5700 m
-gs 1 -1 sc  270.0 rot (M2) col0 sh gr
-% Polyline
-n -9600 7650 m -9600 9075 l -10425 9075 l -10425 7650 l
- cp gs col0 s gr 
-% Polyline
-n -9600 7650 m -9600 8625 l -9900 8625 l -9900 7650 l
- cp gs col0 s gr 
-% Polyline
-n -10050 9075 m
- -10050 9375 l gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--9825 7725 m
-gs 1 -1 sc  270.0 rot (3.2) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--10125 7725 m
-gs 1 -1 sc  270.0 rot (Metadata) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--10350 7725 m
-gs 1 -1 sc  270.0 rot (Modeling  3,0) col0 sh gr
-% Polyline
-n -10725 10875 m -10725 11850 l -11025 11850 l -11025 10875 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--11475 10950 m
-gs 1 -1 sc  270.0 rot ( 6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--11250 10950 m
-gs 1 -1 sc  270.0 rot (Consultation Engine) col0 sh gr
-% Polyline
-n -9675 10875 m -9675 11850 l -9975 11850 l -9975 10875 l
- cp gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--10425 10950 m
-gs 1 -1 sc  270.0 rot ( 6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--9900 10950 m
-gs 1 -1 sc  270.0 rot (3.2) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--10200 10950 m
-gs 1 -1 sc  270.0 rot (Metadata Modeling) col0 sh gr
-% Polyline
-n -8700 10875 m -8700 11850 l -9000 11850 l -9000 10875 l
- cp gs col0 s gr 
-% Polyline
-n -9150 13200 m
- -9150 13500 l gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--8925 10950 m
-gs 1 -1 sc  270.0 rot (2.4) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--9225 10950 m
-gs 1 -1 sc  270.0 rot (Automatics Extraction of) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--9450 10950 m
-gs 1 -1 sc  270.0 rot (Metadata  6,0) col0 sh gr
-% Polyline
-n -6225 975 m
- -6225 1200 l gs col0 s gr 
-% Polyline
-n -1575 6300 m -1575 1200 l
- -2850 1200 l gs col0 s gr 
-% Polyline
-n -3300 2925 m
- -3300 3225 l gs col0 s gr 
-% Polyline
-n -4500 2925 m
- -4500 3225 l gs col0 s gr 
-% Polyline
-n -3300 1200 m
- -3300 1500 l gs col0 s gr 
-% Polyline
-n -4500 1200 m
- -4500 1500 l gs col0 s gr 
-% Polyline
-n -3900 3225 m
- -3900 3525 l gs col0 s gr 
-% Polyline
-n -2775 6450 m
- -2775 6750 l gs col0 s gr 
-% Polyline
-n -5025 6450 m
- -5025 6750 l gs col0 s gr 
-% Polyline
-n -2775 9075 m
- -2775 9375 l gs col0 s gr 
-% Polyline
-n -3900 9375 m
- -3900 9675 l gs col0 s gr 
-% Polyline
-n -3900 10200 m
- -3900 10500 l gs col0 s gr 
-% Polyline
-n -6225 1200 m
- -6225 1500 l gs col0 s gr 
-% Polyline
-n -3900 13200 m
- -3900 13500 l gs col0 s gr 
-% Polyline
-n -4575 10875 m -4575 11850 l -4875 11850 l -4875 10875 l
- cp gs col0 s gr 
-% Polyline
-n -5025 10575 m
- -5025 10875 l gs col0 s gr 
-% Polyline
-n -5850 9675 m -5850 10200 l -6375 10200 l -6375 9675 l
- cp gs col0 s gr 
-% Polyline
-n -2325 10875 m -2325 11850 l -2625 11850 l -2625 10875 l
- cp gs col0 s gr 
-% Polyline
-n -2775 13200 m
- -2775 13500 l gs col0 s gr 
-% Polyline
-n -6150 13200 m
- -6150 13500 l gs col0 s gr 
-% Polyline
-n -5025 13200 m
- -5025 13500 l gs col0 s gr 
-% Polyline
-n -7350 13800 m -7350 14325 l -7875 14325 l -7875 13800 l
- cp gs col0 s gr 
-% Polyline
-n -7650 14325 m
- -7650 14625 l gs col0 s gr 
-% Polyline
-n -8475 14625 m
- -8475 14925 l gs col0 s gr 
-% Polyline
-n -5700 14925 m -5700 15900 l -6000 15900 l -6000 14925 l
- cp gs col0 s gr 
-% Polyline
-n -7425 14625 m
- -7425 14925 l gs col0 s gr 
-% Polyline
-n -6225 16950 m
- -6225 17250 l gs col0 s gr 
-% Polyline
-n -8475 16950 m
- -8475 17250 l gs col0 s gr 
-% Polyline
-n -1200 7725 m -1200 8700 l -1500 8700 l -1500 7725 l
- cp gs col0 s gr 
-% Polyline
-n -1200 7725 m -1200 12750 l -2025 12750 l -2025 7725 l
- cp gs col0 s gr 
-% Polyline
-n -7425 16950 m
- -7425 17250 l gs col0 s gr 
-% Polyline
-n -3675 9675 m -3675 10200 l -4200 10200 l -4200 9675 l
- cp gs col0 s gr 
-% Polyline
-n -5700 21375 m -5700 21900 l -6225 21900 l -6225 21375 l
- cp gs col0 s gr 
-% Polyline
-n -9150 14925 m -9150 15900 l -9450 15900 l -9450 14925 l
- cp gs col0 s gr 
-% Polyline
-n -8025 14925 m -8025 15900 l -8325 15900 l -8325 14925 l
- cp gs col0 s gr 
-% Polyline
-n -9150 18675 m -9150 19650 l -9450 19650 l -9450 18675 l
- cp gs col0 s gr 
-% Polyline
-n -8025 18675 m -8025 19650 l -8325 19650 l -8325 18675 l
- cp gs col0 s gr 
-% Polyline
-n -75 7725 m -75 12750 l -900 12750 l -900 7725 l
- cp gs col0 s gr 
-% Polyline
-n -75 7725 m -75 8700 l -375 8700 l -375 7725 l
- cp gs col0 s gr 
-% Polyline
-n -10200 1200 m
- -10200 1500 l gs col0 s gr 
-% Polyline
-n -8700 1200 m
- -8700 1500 l gs col0 s gr 
-% Polyline
-n -10050 13200 m
- -10050 13500 l gs col0 s gr 
-% Polyline
-n -11100 13200 m
- -11100 13500 l gs col0 s gr 
-% Polyline
-n -11850 7650 m -11850 8625 l -12150 8625 l -12150 7650 l
- cp gs col0 s gr 
-% Polyline
-n -12300 7350 m
- -12300 7650 l gs col0 s gr 
-% Polyline
-n -9450 5250 m
- -9450 5550 l gs col0 s gr 
-% Polyline
-n -8850 4950 m
- -8850 5250 l gs col0 s gr 
-% Polyline
-n -8400 6750 m -8400 7725 l -8700 7725 l -8700 6750 l
- cp gs col0 s gr 
-% Polyline
-n -8775 9075 m
- -8775 9375 l gs col0 s gr 
-% Polyline
-n -8850 6450 m
- -8850 6750 l gs col0 s gr 
-% Polyline
-n -11850 1500 m -11850 2475 l -12150 2475 l -12150 1500 l
- cp gs col0 s gr 
-% Polyline
-n -12975 10875 m -12975 11850 l -13275 11850 l -13275 10875 l
- cp gs col0 s gr 
-% Polyline
-n -12300 13200 m
- -12300 13500 l gs col0 s gr 
-% Polyline
-n -13425 13200 m
- -13425 13500 l gs col0 s gr 
-% Polyline
-n -12000 5550 m -12000 6075 l -12525 6075 l -12525 5550 l
- cp gs col0 s gr 
-% Polyline
-n -9225 9675 m -9225 10200 l -9750 10200 l -9750 9675 l
- cp gs col0 s gr 
-% Polyline
-n -7725 10875 m -7725 11850 l -8025 11850 l -8025 10875 l
- cp gs col0 s gr 
-% Polyline
-n -5700 10875 m -5700 11850 l -6000 11850 l -6000 10875 l
- cp gs col0 s gr 
-% Polyline
-n -6975 3675 m -6975 4650 l -7275 4650 l -7275 3675 l
- cp gs col0 s gr 
-% Polyline
-n -6975 1575 m -6975 3000 l -7800 3000 l -7800 1575 l
- cp gs col0 s gr 
-% Polyline
-n -6975 1575 m -6975 2550 l -7275 2550 l -7275 1575 l
- cp gs col0 s gr 
-% Polyline
-n -3300 1200 m
- -9375 1200 l gs col0 s gr 
-/Times-Roman-iso ff 180.00 scf sf
--4800 10950 m
-gs 1 -1 sc  270.0 rot (2.6) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--5325 10950 m
-gs 1 -1 sc  270.0 rot (Proofs in NL 6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--2850 10950 m
-gs 1 -1 sc  270.0 rot (Stylesheets to intermediate) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3075 10950 m
-gs 1 -1 sc  270.0 rot (Representation  6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--2550 10950 m
-gs 1 -1 sc  270.0 rot (2.2-2.3) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--5100 10950 m
-gs 1 -1 sc  270.0 rot (Automatic Generation of) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--6450 15000 m
-gs 1 -1 sc  270.0 rot ( 6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--6225 15000 m
-gs 1 -1 sc  270.0 rot (Assisted Annotation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--1425 7800 m
-gs 1 -1 sc  270.0 rot (0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--3975 9825 m
-gs 1 -1 sc  270.0 rot (M4) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--6150 9825 m
-gs 1 -1 sc  270.0 rot (M6) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--300 7800 m
-gs 1 -1 sc  270.0 rot (0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--600 7800 m
-gs 1 -1 sc  270.0 rot (Project Management.) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--825 7875 m
-gs 1 -1 sc  270.0 rot (30,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--1950 7800 m
-gs 1 -1 sc  270.0 rot (27,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8775 15000 m
-gs 1 -1 sc  270.0 rot ( 6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8775 18750 m
-gs 1 -1 sc  270.0 rot (6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--12375 7725 m
-gs 1 -1 sc  270.0 rot (Architectural Design of the Distribution Model) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8625 6825 m
-gs 1 -1 sc  270.0 rot (3.1) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--8925 6825 m
-gs 1 -1 sc  270.0 rot (Metadata: use, meaning and ) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--9150 6825 m
-gs 1 -1 sc  270.0 rot (classification  6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--12600 1575 m
-gs 1 -1 sc  270.0 rot (3,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--12075 1575 m
-gs 1 -1 sc  270.0 rot (1.5) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--12375 1575 m
-gs 1 -1 sc  270.0 rot (Distribution) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--12600 7725 m
-gs 1 -1 sc  270.0 rot ( 9,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--13725 10950 m
-gs 1 -1 sc  270.0 rot ( 6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--13500 10950 m
-gs 1 -1 sc  270.0 rot (Prototype Implementation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--12300 5700 m
-gs 1 -1 sc  270.0 rot (M3) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--9525 9825 m
-gs 1 -1 sc  270.0 rot (M5) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--6450 10950 m
-gs 1 -1 sc  270.0 rot ( 6,0) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--6225 10950 m
-gs 1 -1 sc  270.0 rot (Assisted Annotation) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--7500 3750 m
-gs 1 -1 sc  270.0 rot (Latex-based authoring tool) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
--7725 3825 m
-gs 1 -1 sc  270.0 rot (9,0) col0 sh gr
-$F2psEnd
-rs
-
-%%EndDocument
- @endspecial eop
-%%Page: 31 31
-31 30 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(31)94 171 y Fg(9.7)112 b(Pro)6 b(ject)37 b(Managemen)m(t)94
-343 y Fl(The)28 b(Pro)5 b(ject)29 b(managemen)m(t)g(will)d(b)s(e)h
-(assured)h(b)m(y)g(the)g(follo)m(wing)f(relev)-5 b(an)m(t)28
-b(roles:)39 b(a\))29 b(Pro)5 b(ject)29 b(Manager,)94
-456 y(b\))g(Exploitation)g(manager,)h(c\))g(W)-8 b(ork-pac)m(k)j(age)33
-b(Leaders)d(d\))f(T)-8 b(ec)m(hnical)29 b(Con)m(tributors)f(and)h(b)m
-(y)h(the)g(fol-)94 569 y(lo)m(wing)k(Pro)5 b(ject)36
-b(Bo)s(dies:)50 b(a\))35 b(Pro)5 b(ject)36 b(Co)s(ordination)d
-(Committee)j(\(PCC\),)f(b\))g(Pro)5 b(ject)36 b(Exploitation)94
-682 y(Board)31 b(and)e(c\))j(W)-8 b(ork-pac)m(k)j(age)33
-b(T)-8 b(eams.)94 795 y Fi(Pro)6 b(ject)38 b(Manager)32
-b Fl(The)g(mandate)h(of)f(the)h(Pro)5 b(ject)33 b(Manager)h(is)d(to)i
-(represen)m(t)f(the)h(Pro)5 b(ject,)34 b(rep)s(ort)94
-907 y(to)28 b(the)f(Commission,)f(monitor)h(o)m(v)m(erall)h(p)s
-(erformance)e(of)i(the)f(pro)5 b(ject,)29 b(ensure)d(accomplishmen)m(t)
-h(of)g(the)94 1020 y(tec)m(hnical)40 b(ob)5 b(jectiv)m(es,)43
-b(promote)d(pro)5 b(ject)41 b(visibilit)m(y)-8 b(,)39
-b(promote)h(dissemination)e(of)i(pro)5 b(ject)40 b(results)f(in)94
-1133 y(the)d(relev)-5 b(an)m(t)36 b(in)m(ternational)e(forums,)i
-(promote)g(acceptance)i(of)e(pro)5 b(ject)36 b(results,)f(administer)f
-(pro)5 b(ject)94 1246 y(resources)30 b(and)g(monitor)g(pro)5
-b(ject)31 b(sp)s(ending.)94 1359 y Fi(Exploitation)j(Manager)d
-Fl(S/he)f(will)d(b)s(e)i(resp)s(onsible)f(for)h(co)s(ordinating)g
-(exploitation)h(activities)f(un-)94 1472 y(dertak)m(en)44
-b(b)m(y)g(the)g(Pro)5 b(ject)44 b(Exploitation)e(Board)i(\(PEB\))h(in)d
-(close)i(co)s(op)s(eration)f(with)g(the)h(Pro)5 b(ject)94
-1585 y(Co)s(ordination)28 b(Committee)j(\(PCC\).)94 1698
-y Fi(W)-9 b(ork-pac)m(k)j(age)45 b(Leaders)37 b Fl(They)h(are)g(resp)s
-(onsible)d(for)i(the)h(p)s(erformance)f(of)h(W)-8 b(ork-pac)m(k)j
-(ages,)43 b(and)94 1811 y(they)31 b(m)m(ust)f(b)s(e)g(committed)g(to)h
-(the)g(W)-8 b(ork-pac)m(k)j(age)33 b(for)d(at)i(least)e(\014v)m(e)h
-(man)f(mon)m(ths)g(p)s(er)f(y)m(ear.)94 1924 y Fi(T)-9
-b(ec)m(hnical)38 b(Con)m(tributors)32 b Fl(T)-8 b(ec)m(hnical)32
-b(Con)m(tributors)f(are)i(sp)s(ecialised)d(sta\013)j(pro)m(vided)e(b)m
-(y)h(the)g(part-)94 2037 y(ners.)39 b(They)26 b(could)g(b)s(e)g(either)
-h(p)s(eople)f(activ)m(e)i(on)e(a)i(stable)e(basis)g(in)m(to)h(a)g(W)-8
-b(ork-pac)m(k)j(age,)31 b(or)c(p)s(eople)f(who)94 2149
-y(con)m(tribute)e(from)g(time)g(to)h(time)f(on)g(sp)s(eci\014c)f(tasks)
-i(related)f(to)h(the)g(w)m(ork-plan)e(\(external)i(con)m(tributors\).)
-94 2262 y Fi(Pro)6 b(ject)36 b(Co)s(ordination)f(Committee)28
-b Fl(The)i(PCC)g(is)g(c)m(haired)g(b)m(y)h(the)g(Pro)5
-b(ject)32 b(Manager)g(and)e(con-)94 2375 y(stituted)i(b)m(y)g(one)g
-(represen)m(tativ)m(e)h(from)f(eac)m(h)h(P)m(artner,)g(and)e(is)h(the)g
-(main)f(decision)f(b)s(o)s(dy)h(of)h(the)h(Con-)94 2488
-y(sortium.)k(It)25 b(is)f(in)f(c)m(harge)j(of)f(all)e(formal)h
-(decisions)f(regarding)h(tec)m(hnical)g(direction)f(of)i(the)g(w)m
-(ork,)h(prop)s(er)94 2601 y(in)m(terrelation)32 b(b)s(et)m(w)m(een)i(W)
--8 b(ork-pac)m(k)j(ages,)38 b(relations)32 b(with)g(IST)h(O\016ce,)h(p)
-s(olicies)e(for)h(promotion)g(of)g(re-)94 2714 y(sults,)c
-(administrativ)m(e)f(arrangemen)m(ts.)41 b(In)29 b(view)g(of)h
-(minimising)c(managemen)m(t)31 b(o)m(v)m(erhead)g(and)e(pro)5
-b(ject)94 2827 y(costs,)36 b(partners)d(pro)m(viding)e(the)j(Pro)5
-b(ject)35 b(Manager,)h(and)d(the)h(W)-8 b(ork-pac)m(k)j(ages)36
-b(Leaders)e(are)g(required)94 2940 y(to)f(app)s(oin)m(t)e(the)h(same)g
-(p)s(erson)f(as)h(their)f(o\016cial)h(represen)m(tativ)m(e)h(in)d(the)j
-(Pro)5 b(ject)32 b(Co)s(ordination)e(Com-)94 3053 y(mittee.)94
-3166 y Fi(Pro)6 b(ject)26 b(Exploitation)f(Board)e Fl(The)e(PEB)h(will)
-e(b)s(e)h(c)m(haired)h(b)m(y)g(the)g(Pro)5 b(ject)23
-b(Exploitation)e(Manager,)94 3279 y(and)29 b(comp)s(osed)h(b)m(y)g(the)
-g(Exploitation)f(Managers)i(of)f(eac)m(h)h(partner.)40
-b(It)30 b(will)d(monitor)j(the)g(state)h(of)f(the)94
-3391 y(art)25 b(in)d(the)j(domains)e(of)h(con)m(ten)m(t-based)i
-(information)d(tec)m(hnologies,)j(W3C)f(activities,)g(W)-8
-b(eb)25 b(publishing,)94 3504 y(and)37 b(digital)f(libraries.)59
-b(It)38 b(will)d(b)s(e)i(resp)s(onsible)d(for)k(planning)d(the)i
-(dissemination)e(and)i(exploitation)94 3617 y(strategies)31
-b(for)f(the)h(consortium,)f(to)h(b)s(e)f(appro)m(v)m(ed)g(b)m(y)g(the)h
-(PCC.)94 3730 y Fi(W)-9 b(ork-pac)m(k)j(age)41 b(T)-9
-b(eams)34 b Fl(They)g(are)h(constituted)g(of)g(the)g(tec)m(hnical)f
-(con)m(tributors.)53 b(Eac)m(h)35 b(team)h(will)94 3843
-y(b)s(e)e(c)m(haired)f(b)m(y)i(a)f(W)-8 b(ork-pac)m(k)j(age)38
-b(Leader,)d(and)f(it)g(will)d(b)s(e)j(in)f(c)m(harge)j(of)e(carrying)f
-(out)i(the)f(tec)m(hnical)94 3956 y(w)m(ork)c(describ)s(ed)f(in)g
-(Section)h(9.)94 4196 y Fi(9.7.1)105 b(Decision)37 b(Pro)s(cess)94
-4368 y Fl(Decisions)c(will)f(normally)g(b)s(e)i(tak)m(en)h(b)m(y)f
-(seeking)g(consensus.)51 b(Ho)m(w)m(ev)m(er,)37 b(after)e(a)f
-(reasonable)g(amoun)m(t)94 4481 y(of)k(time)f(has)g(b)s(een)g(allo)m(w)
-m(ed)g(to)i(illustrate)c(and)i(defend)g(of)g(con\015icting)g(p)s
-(ositions,)g(in)g(order)g(to)h(a)m(v)m(oid)94 4594 y(deadlo)s(c)m(k)d
-(in)f(pro)5 b(ject)35 b(op)s(erational)f(progress,)j(the)e(appro)m(v)-5
-b(al)34 b(of)i(t)m(w)m(o-third)f(ma)5 b(jorit)m(y)35
-b(of)g(the)g(partners)94 4706 y(will)23 b(b)s(e)j(su\016cien)m(t.)38
-b(If)26 b(the)g(decision)f(b)s(eing)f(tak)m(en)j(is)e(unacceptable)h
-(to)h(partners)e(found)g(in)g(the)h(minorit)m(y)94 4819
-y(p)s(ositions,)d(the)i(resolution)d(of)i(the)g(con\015ict)g(will)e(b)s
-(e)h(elev)-5 b(ated)24 b(to)h(eac)m(h)g(partner's)f(higher)e(executiv)m
-(e)j(lev)m(el.)94 4932 y(If)d(no)h(resolution)e(is)g(p)s(ossible,)h
-(than)h(the)f(standard)g(\\red)h(\015ag")g(pro)s(cedure)e(will)f(b)s(e)
-i(used,)i(as)f(a)f(last)h(resort.)94 5045 y(Either)29
-b(the)i(PCC)e(or)i(the)f(Pro)5 b(ject)31 b(Manager)h(can)f(initiate)e
-(the)h(con\015ict)h(resolution)d(pro)s(cedure.)p eop
-%%Page: 32 32
-32 31 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(32)94 171 y Fi(9.7.2)105 b(Information)34 b(Flo)m(w)94
-343 y Fl(Information)29 b(\015o)m(w)h(within)d(the)j(Pro)5
-b(ject)31 b(will)c(b)s(e)j(ensured)e(b)m(y)i(exc)m(hange)i(of)e(in)m
-(ternal)e(tec)m(hnical)i(pap)s(ers,)94 456 y(noti\014cation)f(of)g
-(relev)-5 b(an)m(t)30 b(new)f(publications)d(tec)m(hnologies)k(or)g
-(standards,)e(and)h(rep)s(orts)g(from)f(external)94 569
-y(meetings.)60 b(All)36 b(tec)m(hnical)h(do)s(cumen)m(tation)f
-(generated)i(b)m(y)f(the)g(pro)5 b(ject)37 b(should)e(b)s(e)i(exc)m
-(hangeable)h(in)94 682 y(electronic)24 b(format,)i(according)e(to)g(a)h
-(set)f(of)g(guidelines)d(to)k(b)s(e)e(agreed)i(at)g(pro)5
-b(ject)24 b(start-up.)38 b(The)24 b(pro)5 b(ject)94 795
-y(Manager)33 b(will)c(enforce)j(adherence)g(to)g(these)g(guidelines.)42
-b(Only)30 b(strictly)h(formal)g(corresp)s(ondence)g(will)94
-907 y(b)s(e)k(exc)m(hanged)h(b)m(y)f(ordinary)f(mail)g(and)g(telefax.)
-56 b(Urgen)m(t)37 b(corresp)s(ondence)d(o)m(v)m(er)j(e-mail)e(will)d(b)
-s(e)j(sen)m(t)94 1020 y(with)29 b(a)i(request)f(for)g(explicit)f(ac)m
-(kno)m(wledgemen)m(t.)94 1133 y(The)40 b(Co)s(ordinating)e(P)m(artner)i
-(will)e(b)s(e)h(resp)s(onsible)f(to)j(prepare)e(and)h(main)m(tain)f(a)i
-(W)-8 b(eb)41 b(page)g(of)f(the)94 1246 y(pro)5 b(ject)43
-b(and)f(a)g(CVS)g(rep)s(ository)f(\(also)i(a)m(v)-5 b(ailable)42
-b(via)g(W)-8 b(eb\).)77 b(The)42 b(CVS)g(rep)s(ository)f(is)g(mean)m(t)
-j(to)94 1359 y(k)m(eep)g(the)f(trace)i(of)e(the)h(o)m(v)m(erall)f
-(progress)g(of)h(the)f(Pro)5 b(ject,)48 b(and)42 b(it)h(will)e(b)s(e)h
-(used)h(b)m(y)g(the)g(PCC)g(to)94 1472 y(monitor)34 b(the)h(state)i(of)
-e(adv)-5 b(ancemen)m(t)36 b(of)f(the)g(w)m(ork.)55 b(Eac)m(h)36
-b(partner)e(p)s(erio)s(dically)d(submit)i(rep)s(orts)i(to)94
-1585 y(the)27 b(prime)f(con)m(tractor,)k(listing)25 b(all)h(tec)m
-(hnical)h(con)m(tributions,)g(publications,)e(meeting)j(attendance)g
-(and)94 1698 y(other)j(information)d(whic)m(h)h(ma)m(y)i(help)e(in)g
-(understanding)f(the)j(pro)m(vided)e(e\013ort)i(and)f(cost)h
-(\014gures.)94 1811 y(The)g(Pro)5 b(ject)33 b(will)c(establish)h(a)i
-(high)e(qualit)m(y)h(W)-8 b(eb)32 b(site)f(for)h(in)m(ternal)e(and)h
-(external)h(comm)m(unications.)94 1924 y(It)h(will)c(b)s(e)j(op)s
-(erational)g(as)h(from)f(one)h(mon)m(th)f(of)h(the)g(commencemen)m(t)h
-(date)f(and)f(will)e(b)s(e)i(main)m(tained)94 2037 y(during)19
-b(the)j(pro)5 b(ject)23 b(duration.)36 b(The)21 b(\\mem)m(b)s(ers)h
-(only")f(area)i(will)c(include)g(e.g.)39 b(all)21 b(priv)-5
-b(ate)21 b(deliv)m(erables,)94 2149 y(progress)i(and)f(managemen)m(t)j
-(rep)s(orts,)f(and)f(cost)h(statemen)m(ts.)40 b(The)23
-b(op)s(en)f(area)i(will)d(include)g(the)i(pro)5 b(ject)94
-2262 y(presen)m(tation)24 b(as)g(de\014ned)f(in)f(App)s(endix)g(2)i(of)
-g(the)g(\\Guidelines)e(for)h(Con)m(tract)j(Preparation")d(do)s(cumen)m
-(t,)94 2375 y(all)37 b(public)f(deliv)m(erables,)j(and)e(an)m(y)i
-(relev)-5 b(an)m(t)38 b(information)f(suggested)i(b)m(y)f(the)h(Pro)5
-b(ject)39 b(Exploitation)94 2488 y(Board.)94 2728 y Fi(9.7.3)105
-b(Qualit)m(y)35 b(Pro)s(cedures)94 2900 y Fl(F)-8 b(or)41
-b(all)e(deliv)m(erables,)j(the)e(follo)m(wing)f(review)h(pro)s(cedure)f
-(will)f(b)s(e)i(adopted:)61 b(release)40 b(b)m(y)h(the)f(W)-8
-b(ork-)94 3013 y(P)m(ac)m(k)j(age)43 b(Leader,)g(t)m(w)m(o-w)m(eek)f
-(review)e(p)s(erio)s(d)d(for)j(commen)m(ts)h(b)m(y)f(the)g(PCC,)g(t)m
-(w)m(o-w)m(eek)i(amendmen)m(t)94 3126 y(p)s(erio)s(d)31
-b(to)k(incorp)s(orate)e(PCC)g(recommendations,)h(one-w)m(eek)h
-(balloting)d(p)s(erio)s(d)g(for)h(appro)m(v)-5 b(al)34
-b(b)m(y)f(the)94 3239 y(PCC.)94 3479 y Fi(9.7.4)105 b(Con\014den)m
-(tialit)m(y)35 b(and)g(IPR)g(handling)94 3650 y Fl(Matters)25
-b(related)e(to)h(Con\014den)m(tialit)m(y)d(and)i(IPR)g(handling)d(will)
-h(b)s(e)i(de\014ned)f(in)g(the)h(\\Consortium)f(Agree-)94
-3763 y(men)m(t".)59 b(As)37 b(regards)f(literature)f(pap)s(ers)g
-(originated)h(from)g(w)m(ork)g(in)f(the)h(Pro)5 b(ject,)39
-b(there)e(will)c(b)s(e)j(t)m(w)m(o)94 3876 y(categories)c(of)e(pap)s
-(ers:)205 4064 y(1.)46 b(Pro)5 b(ject)31 b(Endorsed)e(Publications,)g
-(requiring)f(noti\014cation)h(and)h(appro)m(v)-5 b(al)30
-b(b)m(y)g(the)h(PCC.)205 4251 y(2.)46 b(Pro)5 b(ject-related)29
-b(publications,)d(only)h(requiring)f(noti\014cation)h(to)i(the)f(PCC.)f
-(They)g(m)m(ust)h(con)m(tain)321 4364 y(an)f(ac)m(kno)m(wledgemen)m(t)h
-(of)e(supp)s(ort)f(b)m(y)h(the)h(pro)5 b(ject)27 b(Consortium)d(and,)j
-(if)f(required)e(b)m(y)i(the)h(PCC,)321 4477 y(a)k(disclaimer)d(that)j
-(the)g(views)e(are)i(not)f(necessarily)g(those)h(of)f(the)h
-(Consortium.)94 4665 y(Concerning)37 b(p)s(ossible)f(con)m(tributions)g
-(to)j(Standards,)g(they)f(will)e(b)s(e)h(directly)g(submitted)g(b)m(y)h
-(pro)5 b(ject)94 4778 y(mem)m(b)s(ers.)94 5064 y Fj(10)135
-b(Clustering)94 5267 y Fl(Not)31 b(applicable.)p eop
-%%Page: 33 33
-33 32 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(33)94 171 y Fj(11)135 b(Other)45 b(con)l(tractual)h(conditions)94
-378 y Fg(11.1)112 b(Other)38 b(signi\014can)m(t)e(pro)6
-b(ject)38 b(costs)94 549 y Fl(One)e(category)j(of)e(other)g
-(signi\014can)m(t)f(pro)5 b(ject)37 b(costs)g(is)f(due)g(to)i(\\audit)e
-(certi\014cates")i(for)e(INRIA)h(and)94 662 y(DFKI.)235
-775 y(UNIBO)26 b(\(co)s(ordinator\))f(requires)f(11.25Keuro)j(to)f(co)m
-(v)m(er)h(the)e(mem)m(b)s(ership)e(fee)j(to)g(the)f(W)-8
-b(orld)25 b(Wide)94 888 y(W)-8 b(eb)28 b(Consortium)e(\(5000)k(dollars)
-c(p)s(er)h(y)m(ear\))h(for)g(the)g(duration)e(of)i(the)g(Pro)5
-b(ject.)40 b(W)-8 b(e)29 b(recall)e(that)h(mem-)94 1001
-y(b)s(ership)e(is)i(required)g(in)f(order)i(to)h(participate)e(to)i
-(some)g(activities)e(and)h(W)-8 b(orking)29 b(Groups)f(of)h(strategic)
-94 1114 y(relev)-5 b(ance)26 b(for)g(MO)m(W)m(GLI,)h(suc)m(h)f(as)g
-(the)g(MathML)h(or)f(RDF)g(W)m(G's.)41 b(Establishing)23
-b(a)j(tigh)m(t)h(co)s(op)s(eration)94 1227 y(with)32
-b(the)i(W)-8 b(orld)33 b(Wide)g(W)-8 b(eb)35 b(Consortium)d(is)g(moreo)
-m(v)m(er)j(a)f(crucial)f(p)s(oin)m(t)f(of)i(our)f(dissemination)e(and)
-94 1340 y(exploitation)f(plan.)235 1452 y(Finally)-8
-b(,)29 b(a)i(small)e(amoun)m(t)i(of)f(money)h(is)e(required)g(to)i(co)m
-(v)m(er)h(conference)f(fees.)94 1696 y Fg(11.2)112 b(T)-9
-b(ra)m(v)m(el)37 b(costs)g(outside)g(MS/AS)94 1867 y
-Fl(Some)26 b(tra)m(v)m(els)g(outside)g(MS/AS)f(will)e(b)s(e)j(p)s
-(ossibly)d(required)h(for)h(dissemination)e(purp)s(oses.)38
-b(This)24 b(co)m(v)m(ers)94 1980 y(b)s(oth)j(the)g(participation)f(to)i
-(In)m(ternational)f(Conferences)g(outside)g(Europ)s(e)f(to)i(presen)m
-(t)g(scien)m(ti\014c)e(w)m(orks)94 2093 y(related)j(to)h(the)g(Pro)5
-b(ject,)31 b(participation)c(to)j(relev)-5 b(an)m(t)30
-b(In)m(ternational)f(Meetings)h(\(suc)m(h)f(as)h(A)m(C)f(meetings)94
-2206 y(of)g(the)f(W3C\),)i(and)e(p)s(ossibly)d(tra)m(v)m(els)30
-b(aimed)d(to)j(establish)d(co)s(op)s(erations)h(with)f(other)i(related)
-f(pro)5 b(jects)94 2319 y(outside)21 b(MS/AS.)g(F)-8
-b(or)22 b(ob)m(vious)f(reasons,)i(a)f(detailed)f(list)f(of)h(these)h
-(tra)m(v)m(els)g(cannot)g(b)s(e)f(presen)m(tly)f(de\014ned,)94
-2432 y(and)30 b(the)g(cost)i(\014gures)d(in)g(the)i(CPF's)f(are)h
-(purely)e(indicativ)m(e.)p eop
-%%Page: 34 34
-34 33 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(34)94 171 y Fj(References)139 374 y Fl([1])47 b(Comm)m(unication)
-29 b(of)h(the)h(A)m(CM.)g(Sp)s(ecial)e(Issue)h(on)g(Digital)g
-(Libraries.)e(April)g(1998.)139 562 y([2])47 b Fd(Digital)28
-b(Libr)-5 b(aries)29 b(in)g(Computer)g(Scienc)-5 b(e:)40
-b(the)28 b(MeDo)-5 b(c)28 b(Appr)-5 b(o)g(ach)p Fl(.)29
-b(Lecture)d(Notes)h(in)d(Computer)281 675 y(Science)30
-b(1392,)i(Springer)d(V)-8 b(erlag.)31 b(1998.)139 862
-y([3])47 b(Tim)110 b(Berner's)h(Lee.)h Fd(The)c(Semantic)g(Web)p
-Fl(.)j(W3C)g(Arc)m(hitecture)h(Note,)133 b(1998.)281
-975 y Fb(http://www.w3.org/Design)o(Iss)o(ues/)o(Sema)o(nti)o(c.ht)o
-(ml)139 1163 y Fl([4])47 b(Common)36 b(Criteria)f(for)i(Information)e
-(T)-8 b(ec)m(hnology)38 b(Securit)m(y)e(Ev)-5 b(aluation.)35
-b(P)m(art)j(1,2,)h(3.)f(August)281 1276 y(1999,)32 b(V)-8
-b(ersion)30 b(2.1,)i(CCIMB-99-031.)139 1463 y([5])47
-b(The)30 b(Dublin)d(Core)k(Metadata)i(Inititiativ)m(e.)c
-Fb(http://purl.org/dc/)139 1651 y Fl([6])47 b(C.LaGuardia,)37
-b(B.A.Mitc)m(hell)f(eds.)g Fd(Finding)i(Common)i(Gr)-5
-b(ound:)54 b(Cr)-5 b(e)g(ating)39 b(the)f(Libr)-5 b(ary)39
-b(of)f(the)281 1764 y(F)-7 b(utur)i(e)26 b(without)i(Diminishing)e(the)
-g(Libr)-5 b(ary)27 b(of)f(the)h(Past)p Fl(.)c(New)h(Y)-8
-b(ork:)37 b(Neal-Sc)m(h)m(uman)24 b(Publishers,)281 1877
-y(Inc.1998.)139 2065 y([7])47 b(Goldfarb)30 b(and)g(Presco)s(d.)h
-Fd(The)i(XML)f(Handb)-5 b(o)g(ok)p Fl(.)34 b(The)c(C.F.Goldfarb)g
-(Series)g(on)h(Op)s(en)f(Informa-)281 2177 y(tion)g(Managemen)m(t.)i
-(Pren)m(tice)f(Hall.)f(1998.)139 2365 y([8])47 b(G.)31
-b(Huet,)g(G.)g(Plotkin)e(\(eds\).)i Fd(L)-5 b(o)g(gic)g(al)34
-b(F)-7 b(r)i(ameworks)p Fl(.)33 b(Cam)m(bridge)d(Univ)m(ersit)m(y)f
-(Press.)i(1991.)139 2553 y([9])47 b(G.)31 b(Huet,)g(G.)g(Plotkin)e
-(\(eds\).)i Fd(L)-5 b(o)g(gic)g(al)34 b(Envir)-5 b(onments)p
-Fl(.)32 b(Cam)m(bridge)d(Univ)m(ersit)m(y)h(Press.)g(1993.)94
-2740 y([10])47 b(M.Lev)m(en)m(thal,)114 b(D.Lewis,)g(M.F)-8
-b(uc)m(hs.)98 b Fd(Designing)92 b(XML)h(Internet)h(Applic)-5
-b(ations)p Fl(.)99 b(The)281 2853 y(C.F.Goldfarb)55 b(Series)g(on)h(Op)
-s(en)f(Information)f(Managemen)m(t.)59 b(Pren)m(tice)d(Hall,)62
-b(ISBN)55 b(0-13-)281 2966 y(616822-1.)34 b(1998.)94
-3154 y([11])47 b(Mathematical)35 b(Markup)f(Language)h(\(MathML\))h(V)
--8 b(ersion)34 b(2.0.)h(W3C)g(Prop)s(osed)f(Recommenda-)281
-3267 y(tion,)c(Jan)m(uary)g(2001.)i Fb(http://www.w3.org/TR/2001/)o
-(PR-)o(Math)o(ML2-)o(200)o(1010)o(8/)94 3454 y Fl([12])47
-b(Megginson.)p Fd(Structuring)34 b(XML)f(Do)-5 b(cuments)p
-Fl(.)32 b(The)f(C.F.Goldfarb)g(Series)f(on)h(Op)s(en)f(Information)281
-3567 y(Managemen)m(t.)j(Pren)m(tice)d(Hall.)g(1998.)94
-3755 y([13])47 b(E.)38 b(Maler,)j(J.)d(El)f(Andaloussi.)f
-Fd(Developing)k(SGML)g(DTD's.)f(F)-7 b(r)i(om)42 b(text)e(to)g(mo)-5
-b(del)42 b(to)e(markup)p Fl(.)281 3868 y(Pren)m(tice)30
-b(Hall,)g(ISBN)g(0-13-309881-8,)36 b(1996.)94 4055 y([14])47
-b(OMDo)s(c:)387 b(A)203 b(Standard)f(for)h(Op)s(en)e(Mathematical)k(Do)
-s(cumen)m(ts.)281 4168 y Fb(http://www.mathweb.org/o)o(mdo)o(c/)94
-4356 y Fl([15])47 b(The)30 b(Op)s(enMath)f(So)s(ciet)m(y)-8
-b(.)32 b Fb(http://www.nag.co.uk/pr)o(ojec)o(ts/)o(open)o(math)o(/om)o
-(soc/)94 4544 y Fl([16])47 b(Resource)31 b(Description)e(F)-8
-b(ramew)m(ork)32 b(\(RDF\))f Fb(http://www.w3.org/RDF/)94
-4731 y Fl([17])47 b(XML)30 b(Linking)f(Language)i(\(XLink\).)f
-Fb(http://www.w3.org/XML/Li)o(nkin)o(g)p Fl(.)94 4919
-y([18])47 b(XSL)39 b(T)-8 b(ransformations)39 b(\(XSL)-8
-b(T\))40 b(V)-8 b(ersion)39 b(1.0.)j(W3C)e(Recommendation)g(16)g(No)m
-(v)m(em)m(b)s(er)h(1999.)281 5032 y Fb(http://www.w3.org/TR/xsl)o(t)p
-eop
-%%Page: 35 35
-35 34 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(35)94 171 y Fj(A)134 b(Consortium)46 b(Description)94
-374 y Fl(The)30 b(Consortium)f(is)g(comp)s(osed)h(of)h(the)f(follo)m
-(wing)f(partners:)230 562 y Fe(\017)46 b Fl(Univ)m(ersit)m(y)20
-b(of)g(Bologna)h(\(Italy\),)i(Departmen)m(t)f(of)e(Computer)g(Science)g
-Fb(http://www.cs.unibo.it)p Fl(.)321 675 y(Resp)s(onsible:)38
-b(A.Asp)s(erti.)230 862 y Fe(\017)46 b Fl(INRIA)31 b(Ro)s(cquencourt)f
-(\(F)-8 b(rance\))32 b Fb(http://www.inria.fr)p Fl(.)j(Resp)s(onsible:)
-k(H.Herb)s(elin.)230 1050 y Fe(\017)46 b Fl(German)34
-b(Researc)m(h)h(Cen)m(ter)f(for)f(Arti\014cial)f(In)m(telligence)h(Gm)m
-(bH,)h(DFKI)g(\(German)m(y\).)52 b(Resp)s(on-)321 1163
-y(sible:)39 b(M.Kohlhase.)230 1351 y Fe(\017)46 b Fl(Katholiek)m(e)28
-b(Univ)m(ersiteit)e(Nijmegen,)i(\(The)f(Netherlands\))g
-Fb(http://www.cs.kun.nl)p Fl(.)34 b(Resp)s(on-)321 1463
-y(sible:)39 b(H.Geuv)m(ers.)230 1651 y Fe(\017)46 b Fl(Max)31
-b(Planc)m(k)g(Institute)e(for)h(Gra)m(vitational)h(Ph)m(ysics)e(\(Alb)s
-(ert)h(Einstein)e(Institute/AEI\).)321 1764 y Fb(http://www.aei.mpg.de)
-p Fl(.)35 b(Resp)s(onsible:)j(B.F.Sc)m(h)m(utz.)230 1952
-y Fe(\017)46 b Fl(T)-8 b(rusted)30 b(Logic)h(\(F)-8 b(rance\))32
-b Fb(http://www.trusted-logi)o(c.fr)o Fl(.)j(Resp)s(onsible:)j
-(D.Bolignano.)235 2139 y(The)h(Consortium)e(has)i(b)s(een)f(built)f
-(with)h(the)h(aim)f(to)i(join)e(some)i(essen)m(tial)e(kno)m(who)m(w)i
-(in)d(di\013er-)94 2252 y(en)m(t)j(areas)g(of)f(I.T.)g(related)g(to)h
-(the)f(creation)h(and)e(main)m(tenance)i(of)f(a)h(digital)d(library)g
-(of)i(structured)94 2365 y(mathematical)31 b(kno)m(wledge.)235
-2478 y(As)41 b(describ)s(ed)e(in)h(the)h(T)-8 b(ec)m(hnical)41
-b(Annex,)i(MO)m(W)m(GLI)g(is)d(mean)m(t)i(to)g(dev)m(elop)f(the)g(tec)m
-(hnological)94 2591 y(infrastructure)18 b(required)h(to)i(in)m(tegrate)
-h(existing)d(Markup)h(languages)h(and)e(standards)h(suc)m(h)g(as)g
-(MathML,)94 2704 y(Op)s(enMath)36 b(or)h(OMDo)s(c,)i(co)m(v)m(ering)f
-(di\013eren)m(t)e(asp)s(ects)h(of)g(mathematical)g(in)m(telligence,)g
-(in)m(to)g(a)g(single)94 2817 y(application.)g(Exp)s(ertise)23
-b(on)h(these)h(languages)f(and)g(the)h(related)f(tec)m(hnologies)h(is)e
-(resp)s(ectiv)m(ely)h(pro)m(vided)94 2930 y(b)m(y)30
-b(the)h(follo)m(wing)e(partners:)94 3117 y Fi(MathML)45
-b Fl(Departmen)m(t)40 b(of)f(Computer)f(Science,)j(Univ)m(ersit)m(y)d
-(of)h(Bologna,)j(mem)m(b)s(er)c(of)h(the)g(W)-8 b(orld)321
-3230 y(Wide)35 b(W)-8 b(eb)37 b(Consortium)d(and)h(of)g(the)h(W3C)g(W)
--8 b(orking)36 b(Group)f(on)g(MathML;)i(Lemme-Pro)5 b(ject)321
-3343 y(at)31 b(INRIA)g(Sophia-An)m(tip)s(olis.)94 3531
-y Fi(Op)s(enMath)45 b Fl(Univ)m(ersit)m(y)25 b(of)i(Eindho)m(v)m(en)e
-(\(sub-site)h(of)h(Nijmegen\):)39 b(Professor)26 b(Arjeh)g(Cohen)g(is)f
-(one)i(of)321 3644 y(the)f(leaders)g(of)g(the)g(Op)s(enMath)f
-(initiativ)m(e,)g(and)g(MO)m(W)m(GLI)i(is)e(exp)s(ected)i(to)f(tak)m(e)
-h(the)g(maxim)m(um)321 3757 y(pro\014t)j(from)g(the)g(successful)g(Op)s
-(enMath)f(Esprit)g(pro)5 b(ject,)31 b(no.24969.)94 3944
-y Fi(OMDo)s(c)46 b Fl(DFKI.)22 b(Dr.Mic)m(hael)f(Kohlhase)g(is)f(the)i
-(main)e(auh)m(tor)i(of)f(OMDo)s(c;)k(DFKI)d(has)f(a)h(long)f(researc)m
-(h)321 4057 y(tradition)j(in)f(the)i(managemen)m(t)h(of)f(mathematical)
-g(kno)m(wledge)g(bases,)h(metadata,)h(searc)m(hing)e(and)321
-4170 y(retriev)-5 b(al)30 b(issues.)94 4358 y(More)41
-b(generally)-8 b(,)42 b(the)f(Departmen)m(t)g(of)g(Computer)e(Science)h
-(in)f(Bologna)i(has)f(a)g(long)g(exp)s(erience)g(in)94
-4471 y(XML-related)f(tec)m(hnology)-8 b(,)43 b(and)38
-b(in)g(particular)f(in)h(their)g(application)f(to)i(the)g(particular)f
-(domain)f(of)94 4583 y(mathematical)f(dev)m(elopmen)m(ts,)h(as)e
-(testi\014ed)g(b)m(y)h(the)f(\\Hyp)s(ertextual)g(Electronic)g(Library)f
-(of)h(Mathe-)94 4696 y(matics")k(\(HELM\))g(Pro)5 b(ject)40
-b(\()p Fb(http://www.cs.unibo.it/h)o(elm)p Fl(\).)59
-b(A)38 b(main)g(comp)s(onen)m(t)h(of)f(HELM)94 4809 y(is)g(the)i
-(GtkMathView)g(widget)f(\()p Fb(http://www.cs.unibo.it/he)o(lm/m)o
-(ml-w)o(idg)o(et/i)o(ndex)o(.ht)o(ml)p Fl(\),)d(a)94
-4922 y(C++)29 b(rendering)f(engine)h(for)h(MathML)g(that)h(will)c(b)s
-(e)i(distributed)e(as)j(an)g(o\016cial)f(pac)m(k)-5 b(age)32
-b(of)e(the)g(next)94 5035 y(Debian)g(release)h(of)f(Lin)m(ux.)235
-5148 y(Similarly)-8 b(,)22 b(the)h(Lemme)g(Pro)5 b(ject)24
-b(in)d(Sophia-An)m(tip)s(olis)f(has)i(a)i(large)f(exp)s(erience)f(of)h
-(edition)f(of)h(math-)94 5261 y(ematical)32 b(ob)5 b(jects.)47
-b(It)32 b(dev)m(elops)g(the)g(graphical)f(en)m(vironmen)m(t)h(Pco)s(q,)
-h(dedicated)f(to)h(the)f(dev)m(elopmen)m(t)94 5374 y(of)39
-b(mathematical)g(pro)s(ofs,)g(using)e(the)i(Co)s(q)f(pro)s(of)g
-(assistan)m(t.)66 b(Among)38 b(man)m(y)h(features,)i(Pco)s(q)e(has)f(a)
-p eop
-%%Page: 36 36
-36 35 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(36)94 171 y(sophisticated)30 b(t)m(w)m(o)i(dimensional)c(form)m
-(ula)j(and)f(natural)g(language)h(pro)s(of)f(edition)g(comp)s(onen)m
-(t,)i(allo)m(w-)94 284 y(ing)i(in)m(tuitiv)m(e)f(and)h(p)s(o)m(w)m
-(erful)g(in)m(teractions.)53 b(Built)34 b(on)g(the)h(Figue)g(en)m
-(vironmen)m(t,)g(Pco)s(q)g(can)g(b)s(e)f(made)94 397
-y(compatible)k(with)g(MathML.)i(The)e(Pco)s(q)h(in)m(terface)h(is)e(in)
-m(tensiv)m(ely)f(used)h(b)m(y)h(teams)h(whose)f(researc)m(h)94
-510 y(activit)m(y)31 b(concerns)f(the)h(certi\014cation)f(of)h
-(mathematical)f(algorithms.)235 623 y(DFKI)36 b(will)d(con)m(tribute)j
-(requiremen)m(ts)f(and)g(metadata)i(from)f(the)g(viewp)s(oin)m(t)e(of)i
-(educational)f(ap-)94 736 y(plications)27 b(including)f(searc)m(h)j
-(functionalities.)38 b(It)29 b(will)d(activ)m(ely)k(w)m(ork)f(on)g
-(presen)m(tational)f(transforma-)94 849 y(tions,)37 b(the)e(generation)
-h(of)g(pro)s(ofs)f(in)f(natural)h(language)h(as)g(w)m(ell)e(as)i(on)f
-(kno)m(wledge)h(bases)g(for)f(math-)94 962 y(ematical)43
-b(kno)m(wledge)h(DFKI)f(in)m(tends)f(to)i(exploit)e(the)h(results)f(of)
-h(the)h(MO)m(W)m(GLI)g(pro)5 b(ject)44 b(in)e(pilot)94
-1075 y(applications)33 b(in)g(curren)m(t)h(and)f(planned)g(researc)m(h)
-i(and)f(in)f(pro)5 b(jects)34 b(for)g(the)h(protot)m(ypical)f
-(implemen-)94 1187 y(tation)h(of)g(in)m(telligen)m(t)e(en)m(vironmen)m
-(ts)h(for)h(learning)e(of)h(mathematics.)54 b(In)34 b(particular,)h
-(the)f(kno)m(wledge)94 1300 y(represen)m(tation)26 b(for)h(mathematics)
-f(on)h(the)f(W)-8 b(eb)27 b(is)f(imp)s(ortan)m(t)f(for)i(suc)m(h)f(W)-8
-b(eb-based)27 b(systems.)39 b(Kno)m(wl-)94 1413 y(edge)c(bases)f(that)h
-(pro)m(vide)e(a)i(common)f(rep)s(ository)f(and)h(on)m(tology)h(for)f
-(mathematical)h(kno)m(wledge)f(are)94 1526 y(indisp)s(ensible)26
-b(in)31 b(systems)g(that)h(in)m(tegrate)h(v)-5 b(arious)31
-b(systems)h(w)m(orking)f(on)g(mathematical)h(kno)m(wledge.)94
-1639 y(DFKI)37 b(also)g(has)g(a)g(\014erce)g(in)m(terest)h(in)d
-(pushing)g(and)h(lev)m(eraging)h(the)g(qualit)m(y)g(of)g
-(standardisation)e(ef-)94 1752 y(forts)h(within)d(the)j(w)m(orldwide)e
-(initiativ)m(e)g(of)i(the)g(Seman)m(tic)g(W)-8 b(eb)37
-b(education)e(systems)h(and)f(electronic)94 1865 y(publishing.)235
-1978 y(In)28 b(order)g(to)h(immediately)e(disp)s(ose)f(of)j(a)g(large)f
-(rep)s(ository)g(of)g(structured)g(mathematical)g(informa-)94
-2091 y(tion,)39 b(the)f(consortium)f(comprises)g(the)h(dev)m(elop)s
-(ers)f(of)h(one)g(of)g(the)f(most)i(successful)d(pro)s(of)h(assistan)m
-(t)94 2204 y(to)s(ols)21 b(curren)m(tly)f(a)m(v)-5 b(ailable:)36
-b(the)21 b(Co)s(q)g(pro)s(of)f(engine)h(\()p Fb
-(http://pauillac.inria.fr/)o(coq/)o Fl(\))16 b(of)21
-b(INRIA-)94 2317 y(Ro)s(cquencourt.)40 b(The)28 b(Co)s(q)f(standard)h
-(library)e(includes)f(more)k(than)f(thousand)f(lemmas)h(and)f(theorems)
-94 2429 y(and)h(the)i(whole)e(n)m(um)m(b)s(er)f(of)j(statemen)m(ts)g
-(pro)m(v)m(ed)g(b)m(y)e(users)h(is)f(ev)-5 b(aluated)29
-b(to)g(h)m(undred)e(thousands,)i(co)m(v-)94 2542 y(ering)f
-(arithmetics,)h(algebra,)g(analysis)f(and)g(computer)h(science.)40
-b(W)-8 b(e)30 b(exp)s(ect)g(to)f(in)m(tegrate)h(the)g(curren)m(t)94
-2655 y(di\013eren)m(t)36 b(w)m(a)m(ys)i(of)f(bro)m(wsing,)g(searc)m
-(hing)g(and)f(rendering)f(Co)s(q)i(mathematical)g(dev)m(elopmen)m(ts)g
-(in)m(to)g(a)94 2768 y(coheren)m(t)31 b(and)f(W)-8 b(eb-orien)m(ted)32
-b(arc)m(hitecture)f(op)s(en)e(to)i(the)g(Co)s(q)f(user)g(comm)m(unit)m
-(y)g(and)f(b)s(ey)m(ond.)235 2881 y(An)22 b(alternativ)m(e)h(route)g
-(for)g(the)g(creation)g(of)f(con)m(ten)m(t-based)j(mathematical)e
-(information)e(from)h(stan-)94 2994 y(dard)i(digital)g(rep)s(ositories)
-f(b)m(y)i(means)h(of)f(a)g(suitable)f(L)1978 2977 y Ff(A)2017
-2994 y Fl(T)2068 3014 y(E)2118 2994 y(X-based)i(authoring)e(system)h
-(will)e(b)s(e)h(explored)94 3107 y(b)m(y)29 b(the)h(Alb)s(ert)e
-(Einstein)f(Institute)i(\(AEI\))h(in)e(Golm)h(\(German)m(y\).)41
-b(AEI)29 b(publishes)d(a)k(solely)e(electronic)94 3220
-y(review)36 b(journal,)h Fd(Living)h(R)-5 b(eviews)39
-b(in)g(R)-5 b(elativity)38 b Fl(on)e(the)h(W)-8 b(eb,)40
-b(whic)m(h)35 b(pro)m(vides)h(refereed,)j(regularly)94
-3333 y(up)s(dated)27 b(review)g(articles)h(on)g(all)g(areas)h(of)f(gra)
-m(vitational)g(ph)m(ysics.)39 b(Since)28 b(its)f(release)i(in)e(Jan)m
-(uary)h(1998)94 3446 y(the)i(journal)e(has)h(b)s(ecome)h(a)f(primary)f
-(en)m(try)i(p)s(oin)m(t)e(for)h(studen)m(ts,)h(lecturers)f(and)f
-(researc)m(hers)i(alik)m(e)g(for)94 3559 y(up-to-date)f(information)d
-(on)i(the)g(curren)m(t)g(status)h(of)f(researc)m(h)g(in)f(gra)m
-(vitational)h(ph)m(ysics.)39 b(Mo)m(ving)28 b(this)94
-3671 y(unique)d(rep)s(ository)i(and)g(comm)m(unication)g(forum)f(of)i
-(curren)m(t)f(ph)m(ysical)f(and)h(mathematical)g(kno)m(wledge)94
-3784 y(in)32 b(relativit)m(y)h(to)h(con)m(ten)m(t)i(mark-up,)d(making)g
-(it)g(a)m(v)-5 b(ailable)33 b(for)g(seman)m(tic)h(searc)m(h,)h(and)e
-(for)g(re-use)h(and)94 3897 y(ev)-5 b(aluation)30 b(e.g.)44
-b(in)30 b(math)h(algebra)g(systems)g(motiv)-5 b(ates)32
-b(the)f(in)m(v)m(olv)m(emen)m(t)g(in)f(the)h(MO)m(W)m(GLI)i(pro)5
-b(ject.)94 4010 y(The)31 b(journal)g(will)e(dev)m(elop)j(a)g(L)1199
-3993 y Ff(A)1238 4010 y Fl(T)1289 4030 y(E)1339 4010
-y(X)g(based)g(authoring)e(to)s(ol)i(in)m(terfacing)f(with)g(MO)m(W)m
-(GLI,)i(and)f(serv)m(e)94 4123 y(as)39 b(a)h(sho)m(w)m(case)g(to)g
-(demonstrate)f(ho)m(w)g(con)m(ten)m(t-mark-up)i(in)c(mathematics)j
-(impro)m(v)m(es)e(the)i(usabilit)m(y)94 4236 y(and)30
-b(information)e(depth)i(of)h(electronic)f(science)g(journals.)235
-4349 y(The)40 b(AEI)g(will)e(b)s(e)h(supp)s(orted)g(b)m(y)h(the)h
-(newly)e(founded)f(Cen)m(ter)j(for)f(Information)f(Managemen)m(t)94
-4462 y(\(CIM\))44 b(of)g(the)g(Max)g(Planc)m(k)g(So)s(ciet)m(y)-8
-b(.)81 b(The)43 b(CIM)h(has)f(b)s(een)g(set)i(up)d(b)m(y)i(the)g(So)s
-(ciet)m(y)g(to)g(supp)s(ort)94 4575 y(researc)m(hers)31
-b(and)f(researc)m(h)i(pro)s(cesses)e(in)g(the)h(area)g(of)g
-(information)e(managemen)m(t.)43 b(The)31 b(ob)5 b(jectiv)m(es)31
-b(of)94 4688 y(the)h(pro)5 b(ject)32 b(include)d(co)s(ordination)h(of)h
-(existing)g(activities)g(within)e(the)i(So)s(ciet)m(y)h(and)f(implemen)
-m(tation)94 4801 y(of)40 b(a)h(strategy)g(to)g(dev)m(elop)f(electronic)
-g(researc)m(h)g(arc)m(hiv)m(es.)70 b(The)40 b(curren)m(t)g(Managing)g
-(Editor)f(of)h(the)94 4913 y(AEI's)26 b(electronic)g(journal)f(Living)f
-(Reviews)i(in)f(Relativit)m(y)h(has)g(b)s(een)f(app)s(oin)m(ted)g
-(executiv)m(e)i(director)f(of)94 5026 y(the)g(CIM)f(\(starting)g(from)g
-(1)h(Sep)e(2001\))k(and)c(will)f(b)s(e)i(in)f(c)m(harge)i(of)g(the)f
-(pro)5 b(ject)26 b(managemen)m(t)h(for)e(T)-8 b(asks)94
-5139 y(4.4)25 b(and)f(6.3)h(of)g(the)f(prop)s(osal.)38
-b(The)24 b(CIM)g(will)d(b)s(e)j(in)f(an)h(excellen)m(t)h(p)s(osition)d
-(to)j(promote)g(dissemination)94 5252 y(and)36 b(use)g(of)g(the)h(pro)5
-b(ject)36 b(results)f(within)f(the)i(Max)h(Planc)m(k)g(So)s(ciet)m(y)-8
-b(.)59 b(It)36 b(will)e(further)h(giv)m(e)h(tec)m(hnical)94
-5365 y(supp)s(ort)29 b(to)i(the)f(Dissemination)f(Manager)i(in)f(pro)m
-(viding)e(the)i(MO)m(W)m(GLI)i(w)m(ebsite.)p eop
-%%Page: 37 37
-37 36 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(37)235 171 y(Professor)36 b(W)-8 b(egner,)40 b(Scien)m(ti\014c)35
-b(Co)s(ordinator)g(of)i(EMIS)f(\(Europ)s(ean)f(Mathematical)i
-(Information)94 284 y(Service\),)47 b(will)41 b(also)j(pro)m(vide)e(a)i
-(main)f(liaison)e(with)i(previous)f(and)h(successful)f(Europ)s(ean)h
-(Pro)5 b(jects)94 397 y(on)33 b(digital)f(libraries)e(and)j(metadata,)j
-(suc)m(h)d(as)h(EULER)f(\()p Fb(http://www.emis.de/projec)o(ts/)o(EULE)
-o(R)p Fl(\))94 510 y(and)38 b(the)g(TRIAL)g(Solution)f(pro)5
-b(ject)39 b(\()p Fb(http://www.trial-solutio)o(n.de)o
-Fl(\).)59 b(In)38 b(particular,)h(all)e(the)94 623 y(ac)m(hiev)m(emen)m
-(ts)i(of)f(these)h(Pro)5 b(jects)38 b(will)d(b)s(e)i(in)m(tegrated)i
-(inside)c(MO)m(W)m(GLI,)40 b(as)e(far)f(as)h(the)g(resp)s(ectiv)m(e)94
-736 y(teams)32 b(will)d(agree)j(to)g(this.)42 b(Moreo)m(v)m(er,)34
-b(in)c(his)g(qualit)m(y)g(of)h(Scien)m(ti\014c)g(Co)s(ordinator)f(of)h
-(EMIS,)g(mem)m(b)s(er)94 849 y(of)c(the)g(advisory)e(b)s(oard)h(for)g
-(MA)-8 b(THDI,)28 b(and)e(Chairman)f(of)i(the)g(Electronic)f
-(Publishing)c(Committee)27 b(of)94 962 y(Europ)s(ean)34
-b(Mathematical)i(So)s(ciet)m(y)-8 b(,)37 b(Professor)e(W)-8
-b(egner)36 b(is)e(an)h(excellen)m(t)h(candidate)e(to)i(organise)f(the)
-94 1075 y(information)29 b(dissemination)e(and)j(exploitation)g
-(activities)g(for)g(the)g(pro)5 b(ject.)235 1187 y(Some)37
-b(of)h(the)f(partners)g(of)g(the)h(consortium)e(will)f(primarily)f(w)m
-(ork)j(in)f(the)h(dev)m(elopmen)m(t)h(of)g(pilot)94 1300
-y(applications.)e(In)22 b(particular,)g(the)g(Departmen)m(t)i(of)e
-(Computer)f(Science)h(of)h(the)f(Univ)m(ersit)m(y)f(of)i(Nijmegen)94
-1413 y(will)36 b(apply)g(MO)m(W)m(GLI's)k(tec)m(hnologies)f(to)g(the)f
-(dev)m(elopmen)m(t)h(of)f(an)g(\\electronic)h(b)s(o)s(ok",)h(co)m(v)m
-(ering)f(a)94 1526 y(t)m(ypical)33 b(undergraduate)g(course)h(in)e
-(Algebra)h(or)h(Analysis.)48 b(The)33 b(Departmen)m(t)i(of)f(Computer)f
-(Science)94 1639 y(in)j(Nijmegen)h(has)h(a)g(lot)f(of)h(exp)s(erience)f
-(in)f(formal)g(mathematics)i(and)f(theorem)h(pro)m(ving.)62
-b(Notably)-8 b(,)94 1752 y(the)28 b(group)f(has)g(done)h(large)g
-(theory)f(dev)m(elopmen)m(ts)h(in)f(the)g(theorem)i(pro)m(v)m(er)f(Co)s
-(q.)39 b(\(The)27 b(FT)-8 b(A)29 b(pro)5 b(ject:)94 1865
-y Fb(http://www.cs.kun.nl/gi/)o(proj)o(ects)o(/ft)o(a/)p
-Fl(\))25 b(Eindho)m(v)m(en)k(Univ)m(ersit)m(y)h(of)h(T)-8
-b(ec)m(hnology)g(,)32 b(a)f(sub-site)94 1978 y(of)45
-b(Nijmegen,)j(has)c(exp)s(ertise)f(in)h(Op)s(enMath)f(and)h(in)f(using)
-g(WWW)j(tec)m(hnology)g(for)e(educational)94 2091 y(purp)s(oses.)i
-(This)31 b(has)h(resulted)g({)h(among)g(other)g(things)e({)j(in)d(`ID)m
-(A',)j(the)f(in)m(teractiv)m(e)h(course)e(notes)i(in)94
-2204 y(algebra)24 b(\()p Fb(http://www.win.tue.nl/)42
-b(ida/)p Fl(\),)25 b(where)f(a)h(com)m(bination)f(of)g(HTML)g(and)g
-(applets)g(is)f(used)94 2317 y(to)33 b(presen)m(t)f(the)h(mathematics.)
-46 b(Join)m(tly)-8 b(,)33 b(Nijmegen)e(and)h(Eindho)m(v)m(en)f(ha)m(v)m
-(e)i(exp)s(erience)f(in)f(com)m(bining)94 2429 y(theorem)g(pro)m(v)m
-(ers)f(and)g(computer)h(algebra)f(pac)m(k)-5 b(ages,)32
-b(notably)e(Co)s(q)g(and)g(GAP)-8 b(.)235 2542 y(T)g(rusted)40
-b(Logic)h(\(F)-8 b(rance\),)45 b(whic)m(h)39 b(is)h(sp)s(ecialized)f
-(in)g(secure)i(and)f(v)-5 b(alidated)40 b(solutions)f(for)h(op)s(en)94
-2655 y(systems,)29 b(aims)f(to)i(presen)m(t)f(the)g(formalization)f
-(and)g(the)h(demonstration)f(of)h(some)g(securit)m(y)g(prop)s(erties)94
-2768 y(related)44 b(to)g(the)h(co)s(de)f(em)m(b)s(edded)e(in)m(to)i(a)h
-(smart)f(card.)81 b(The)43 b(presen)m(tation)h(m)m(ust)g(b)s(e)f(in)g
-(a)h(format)94 2881 y(understandable)37 b(b)m(y)h(the)h(compan)m(y)g
-(in)f(c)m(harge)i(of)f(the)g(ev)-5 b(aluation)38 b(of)h(the)g(co)s(de)g
-(and)f(in)g(accordance)94 2994 y(with)29 b(the)i(Common)f(Criteria)e
-(standard.)235 3107 y(A)22 b(third)f(pilot)f(application)h(is)g(the)h
-(seman)m(tic)h(markup)d(of)j(the)f(Journal)e Fd(Living)25
-b(R)-5 b(eviews)25 b(in)g(R)-5 b(elativity)94 3220 y
-Fl(published)27 b(b)m(y)j(AEI-Golm,)g(already)g(men)m(tioned)g(ab)s(o)m
-(v)m(e.)133 3432 y Fj(Description)46 b(of)f(the)g(P)l(articipan)l(ts)94
-3676 y Fg(A.1)112 b(Univ)m(ersit)m(y)36 b(of)h(Bologna,)h(Departmen)m
-(t)e(of)i(Computer)f(Science)94 3847 y Fl(Dipartimen)m(to)30
-b(di)f(Scienze)h(dell'Informazione)94 3960 y(Univ)m(ersit\022)-45
-b(a)30 b(degli)f(Studi)f(di)h(Bologna)94 4073 y(Via)h(di)f(m)m(ura)h
-(An)m(teo)i(Zam)m(b)s(oni)d(VI)s(I,)h(40127,)j(Bologna,)e(IT)-8
-b(AL)g(Y.)94 4186 y(h)m(ttp://www.cs.unib)s(o.it)94 4412
-y(The)32 b(Departmen)m(t)i(of)e(Computer)g(Science)g(of)h(Bologna)g(is)
-e(the)i(only)f(educational)f(institution)f(in)i(Italy)94
-4525 y(to)42 b(b)s(e)e(a\016liated)g(to)i(the)f(W)-8
-b(orld)40 b(Wide)g(W)-8 b(eb)42 b(Consortium)d(\(and)i(one)g(of)g(the)g
-(few)f(mem)m(b)s(ers)g(of)h(this)94 4638 y(category)34
-b(in)d(Europ)s(e\).)45 b(This)30 b(a\016liation)h(testi\014es)g(the)i
-(in)m(terest,)g(b)s(oth)e(tec)m(hnical)h(and)f(didactic,)h(tradi-)94
-4751 y(tionally)h(dev)m(oted)j(b)m(y)f(our)f(Departmen)m(t)i(to)g(W)-8
-b(eb)36 b(tec)m(hnologies,)h(In)m(ternet)e(and,)h(more)f(generally)-8
-b(,)36 b(dis-)94 4864 y(tributed)25 b(computing.)38 b(This)24
-b(is)i(joined)f(to)i(a)f(solid)f(exp)s(ertise)g(in)g(programming)g
-(languages,)i(algorithms,)94 4977 y(theory)k(and)g(formal)f(metho)s
-(ds,)h(that)h(pro)m(vides)e(a)i(v)m(ery)f(stim)m(ulating)f(and)h
-(dialectical)f(en)m(vironmen)m(t)h(for)94 5089 y(researc)m(h.)57
-b(The)35 b(Departmen)m(t)i(is)d(in)h(c)m(harge)i(of)e(an)h
-(undergraduate)f(Program)g(in)g(Computer)f(Science,)94
-5202 y(with)24 b(more)h(than)f(three)h(h)m(undreds)e(new)h(studen)m(ts)
-h(a)g(y)m(ear,)i(and)d(a)h(graduate)h(Ph.D.)f(Program,)h(curren)m(tly)p
-eop
-%%Page: 38 38
-38 37 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(38)94 171 y(comprising)28 b(sixteen)i(studen)m(ts.)94
-402 y Fi(The)41 b(HELM)f(Pro)6 b(ject)36 b Fl(The)f(\\Hyp)s(ertextual)h
-(Electronic)f(Library)e(of)j(Mathematics")h(Pro)5 b(ject)36
-b(\(see)94 515 y Fb(http://www.cs.unibo.it/h)o(elm)p
-Fl(\))15 b(is)21 b(activ)m(e)i(in)d(Bologna)j(since)e(1999.)39
-b(Its)22 b(aim)f(is)f(the)i(dev)m(elopmen)m(t)g(of)94
-628 y(a)29 b(suitable)f(tec)m(hnology)i(for)e(the)i(creation)f(and)f
-(main)m(tenance)h(of)h(a)f(virtual,)f(distributed,)e(h)m(yp)s
-(ertextual)94 741 y(library)g(of)j(formal)e(mathematical)i(kno)m
-(wledge.)40 b(As)29 b(a)g(subsidiary)c(goal,)k(HELM)g(is)f(mean)m(t)h
-(to)g(in)m(tegrate)94 854 y(the)22 b(curren)m(t)g(to)s(ols)g(for)g(the)
-h(automation)f(of)h(formal)e(reasoning)h(and)f(the)i(mec)m(hanisation)f
-(of)g(mathematics)94 967 y(\(pro)s(of)e(assistan)m(ts)g(and)g(logical)g
-(framew)m(orks\))h(with)e(the)h(most)h(recen)m(t)g(tec)m(hnologies)g
-(for)f(the)h(dev)m(elopmen)m(t)94 1080 y(of)29 b(W)-8
-b(eb)29 b(applications)e(and)h(electronic)g(publishing,)d(taking)j(adv)
--5 b(an)m(tage)31 b(of)e(the)f(p)s(oten)m(tialit)m(y)h(o\013ered)f(b)m
-(y)94 1193 y(XML)37 b(T)-8 b(ec)m(hnologies.)62 b(The)37
-b(Pro)5 b(ject)38 b(is)e(dev)m(elop)s(ed)h(in)f(tigh)m(t)h(co)s(op)s
-(eration)h(with)d(the)j(W3C)g(MathML)94 1306 y(W)-8 b(orking)30
-b(Group,)g(whic)m(h)f(w)m(e)i(are)g(a)g(mem)m(b)s(er)f(of.)94
-1537 y Fi(T)-9 b(ec)m(hnical)36 b(Con)m(tributors)30
-b Fl(The)g(p)s(eople)f(in)m(v)m(olv)m(ed)i(in)e(the)h(pro)5
-b(ject)31 b(are:)230 1715 y Fe(\017)46 b Fl(Andrea)30
-b(Asp)s(erti)f(\(F)-8 b(ull)30 b(Professor,)g(Mem)m(b)s(er)g(of)h(W3C)g
-(Advisory)e(Committee\))230 1899 y Fe(\017)46 b Fl(Irene)30
-b(Sc)m(hena)h(\(Ph.D.)g(Studen)m(t,)f(Mem)m(b)s(er)g(of)h(MathML-W)m
-(G\))230 2083 y Fe(\017)46 b Fl(Luca)31 b(P)m(ado)m(v)-5
-b(ani)30 b(\(Ph.D)h(Studen)m(t\))230 2267 y Fe(\017)46
-b Fl(F)-8 b(erruccio)31 b(Guidi)d(\(Ph.D.)j(Studen)m(t\))230
-2451 y Fe(\017)46 b Fl(Claudio)29 b(Sacerdoti)h(Co)s(en)g(\(Ph.D.)h
-(Studen)m(t\))94 2630 y(In)f(case)h(of)g(appro)m(v)-5
-b(al,)30 b(w)m(e)h(exp)s(ect)f(to)i(o\013er)e(a)h(t)m(w)m(o-y)m(ear)i
-(P)m(ost-Do)s(c)g(p)s(osition)28 b(on)i(pro)5 b(ject)31
-b(funding.)94 2861 y Fa(Andrea)i(Asper)-6 b(ti)33 b(\(Coordina)-6
-b(ting)34 b(pr)n(oposer\))94 2997 y Fl(Born)c(05/09/1961.)94
-3110 y(F)-8 b(ull)29 b(Professor)h(of)h(F)-8 b(ormal)30
-b(Languages)i(and)d(Compilers)94 3223 y(Mem)m(b)s(er)h(of)h(the)f
-(Advisory)g(Committee)g(of)h(the)f(W)-8 b(orld)30 b(Wide)g(W)-8
-b(eb)31 b(Consortium.)94 3336 y(Dip.)40 b(di)29 b(Scienze)h
-(dell'Informazione,)f(Via)h(di)f(Mura)h(An)m(teo)i(Zam)m(b)s(oni)d(7,)i
-(Bologna,)g(Italy)-8 b(.)94 3449 y(Phone:)40 b(+39)31
-b(51)h(35)f(45)g(05.)94 3562 y(E-mail:)40 b Fb(asperti@cs.unibo.it)94
-3698 y Fl(Andrea)f(Asp)s(erti)f(w)m(as)i(b)s(orn)f(in)f(Italy)-8
-b(,)42 b(in)d(1961.)70 b(He)40 b(w)m(as)g(a)m(w)m(arded)g(a)g(Ph.D)f
-(in)g(Computer)g(Science)94 3811 y(b)m(y)45 b(the)g(Univ)m(ersit)m(y)f
-(of)g(Pisa)h(in)e(1989.)86 b(In)44 b(the)h(same)g(y)m(ear)g(he)g
-(obtained)f(a)h(p)s(ost-do)s(c)g(p)s(osition)e(at)94
-3923 y(INRIA-Ro)s(cquencourt,)37 b(where)d(he)h(w)m(as)g(emplo)m(y)m
-(ed)h(as)f(a)g(researc)m(her)h(in)e(1991.)56 b(In)34
-b(1992)j(he)e(obtained)94 4036 y(the)42 b(c)m(hair)g(of)g(F)-8
-b(ormal)42 b(Languages)h(and)e(Compilers)f(at)j(the)f(Departmen)m(t)h
-(of)f(Computer)f(Science)h(of)94 4149 y(the)e(Univ)m(ersit)m(y)e(of)i
-(Bologna,)i(b)s(ecoming)d(F)-8 b(ull)38 b(Professor)h(in)f(y)m(ear)j
-(2000.)69 b(He)40 b(is)e(curren)m(tly)h(teac)m(hing)94
-4262 y(courses)i(on)g(Programming)f(Languages,)45 b(Theoretical)c
-(Computer)f(Science)h(and)f(Human-Computer)94 4375 y(In)m(teraction.)94
-4534 y Fi(P)m(ositions)c(and)f(Managemen)m(t)f(Exp)s(erience)230
-4713 y Fe(\017)46 b Fl(Mem)m(b)s(er)31 b(of)f(the)h(Advisory)e
-(Committee)h(of)h(the)g(W)-8 b(orld)30 b(Wide)f(W)-8
-b(eb)230 4897 y Fe(\017)46 b Fl(F)-8 b(ormer)29 b(Director)f(of)g(the)h
-(the)f(Undergraduate)g(Program)g(in)e(Computer)i(Science)f(of)i(the)f
-(Univ)m(er-)321 5010 y(sit)m(y)i(of)h(Bologna.)230 5194
-y Fe(\017)46 b Fl(Resp)s(onsible)28 b(of)j(the)f(Bologna)h(site)g(for)f
-(the)g(Europ)s(ean)f(TMR)i(Pro)5 b(ject)31 b(\\LINEAR".)230
-5378 y Fe(\017)46 b Fl(F)-8 b(ormer)31 b(Resp)s(onsible)d(of)i(the)h
-(Bologna)g(site)f(for)h(the)f(W)m(G-21836)k(CONFER-I)s(I.)p
-eop
-%%Page: 39 39
-39 38 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(39)230 171 y Fe(\017)46 b Fl(Main)30 b(Resp)s(onsible)e(for)i(the)
-h(National)f(Researc)m(h)h(Pro)5 b(ject)31 b(\\Linear)f(Logic)h(and)f
-(b)s(ey)m(ond".)94 394 y Fi(Researc)m(h)35 b(In)m(terests)30
-b Fl(The)f(researc)m(h)i(in)m(terests)f(of)g(Andrea)f(Asp)s(erti)g(are)
-h(fo)s(cused)g(on)g(forms,)f(formats)94 507 y(and)35
-b(metho)s(ds)g(of)h(kno)m(wledge)g(represen)m(tation)f(and)g(elab)s
-(oration.)56 b(This)34 b(co)m(v)m(ers)j(Markup)e(Languages,)94
-620 y(Information)25 b(Pro)s(cessing,)h(Programming)g(Languages,)i(In)m
-(terpreters)e(and)f(Compilers,)g(T)m(yp)s(e)g(Systems,)94
-733 y(Higher-order)38 b(Logics,)j(Linear)d(Logic,)j(Category)f(Theory)
--8 b(.)65 b(He)39 b(is)f(author)g(of)h(o)m(v)m(er)h(40)g(in)m
-(ternational)94 846 y(publications)28 b(on)i(formal)f(asp)s(ects)i(of)g
-(the)f(theory)h(of)f(Computing,)f(and)h(sev)m(eral)h(b)s(o)s(oks.)94
-959 y(He)43 b(has)f(b)s(een)f(mem)m(b)s(er)g(of)i(the)f(Programme)h
-(Committees)f(of)g(sev)m(eral)h(In)m(ternational)e(Conferences,)94
-1072 y(comprising)28 b(CONCUR'98,)j(R)-8 b(T)g(A'99,)32
-b(LICS'99,)e(PPDP'00,)h(CSL'01,)g(MKM'01)g(\(First)f(In)m(ternational)
-94 1185 y(W)-8 b(orkshop)31 b(on)f(Mathematical)h(Kno)m(wledge)f
-(Managemen)m(t\).)94 1298 y(His)k(recen)m(t)h(scien)m(ti\014c)f
-(activit)m(y)h(has)f(b)s(een)f(mostly)h(fo)s(cused)g(on)g(the)h(HELM)f
-(Pro)5 b(ject,)37 b(aimed)c(to)i(build)94 1411 y(the)c(tec)m
-(hnological)f(infrastructure)f(for)h(an)g(Hyp)s(ertextual)g(Electronic)
-g(Library)f(of)h(Mathematics.)94 1569 y Fi(Selected)35
-b(Publications)230 1747 y Fe(\017)46 b Fl(A.Asp)s(erti,)22
-b(L.P)m(ado)m(v)-5 b(ani,)23 b(C.Sacerdoti)d(Co)s(en,)i(I.Sc)m(hena.)37
-b Fd(XML,)23 b(Styleshe)-5 b(ets)24 b(and)h(the)e(r)-5
-b(e-mathematization)321 1860 y(of)29 b(F)-7 b(ormal)30
-b(Content)p Fl(.)40 b(Pro)s(ceedings)25 b(of)h(\\Extreme)g(Markup)f
-(Languages)i(2001)g(Conference",)g(Au-)321 1972 y(gust)k(12-17,)h
-(2001,)h(Mon)m(tr'eal,)e(Canada.)230 2156 y Fe(\017)46
-b Fl(A.Asp)s(erti,)e(L.P)m(ado)m(v)-5 b(ani,)45 b(C.Sacerdoti)d(Co)s
-(en,)i(I.Sc)m(hena.)75 b Fd(HELM)42 b(and)i(the)f(semantic)h(Math-)321
-2269 y(Web)p Fl(.)i(Pro)s(ceedings)31 b(of)h(the)h(14th)g(In)m
-(ternational)e(Conference)h(on)h(Theorem)e(Pro)m(ving)h(in)f(Higher)321
-2382 y(Order)e(Logics)i(\(TPHOLS)e(2001\),)k(3-6)f(Septem)m(b)s(er)d
-(2001,)k(Edin)m(burgh,)27 b(Scotland.)230 2565 y Fe(\017)46
-b Fl(A.Asp)s(erti,)35 b(L.P)m(ado)m(v)-5 b(ani,)36 b(C.Sacerdoti)e(Co)s
-(en,)i(I.Sc)m(hena.)53 b Fd(F)-7 b(ormal)38 b(Mathematics)g(on)f(the)g
-(Web)p Fl(.)321 2678 y(Pro)s(ceedings)g(of)g(the)h(Eigh)m(th)e(In)m
-(ternational)h(Conference)g(on)g("Libraries)e(and)i(Asso)s(ciations)g
-(in)321 2791 y(the)i(T)-8 b(ransien)m(t)39 b(W)-8 b(orld:)57
-b(New)39 b(T)-8 b(ec)m(hnologies)39 b(and)g(New)g(F)-8
-b(orms)39 b(of)g(Co)s(op)s(eration",)i(June)d(9-17,)321
-2904 y(2001,)33 b(Sudak,)c(Autonomous)h(Republic)f(of)h(Crimea,)g
-(Ukraine.)230 3088 y Fe(\017)46 b Fl(A.Asp)s(erti,)36
-b(L.P)m(ado)m(v)-5 b(ani,)36 b(C.Sacerdoti)f(Co)s(en,)h(I.Sc)m(hena.)54
-b Fd(F)-7 b(ormal)39 b(Mathematics)f(in)f(MathML)p Fl(.)321
-3201 y(First)32 b(MathML)h(In)m(ternational)f(Conference,)h(Octob)s(er)
-f(20-21,)j(2000,)g(Urbana-Champaign,)d(IL,)321 3313 y(USA.)230
-3497 y Fe(\017)46 b Fl(A.Asp)s(erti,)40 b(G.Longo.)64
-b Fd(Cate)-5 b(gories,)43 b(T)-7 b(yp)i(es,)42 b(and)f(Structur)-5
-b(es.)64 b(A)n(n)39 b(intr)-5 b(o)g(duction)42 b(to)e(Cate)-5
-b(gory)321 3610 y(The)g(ory)44 b(for)f(the)g(Working)g(Computer)g
-(Scientist)p Fl(.)73 b(F)-8 b(oundation)41 b(of)g(Computing)f(Series,)i
-(Mas-)321 3723 y(sac)m(h)m(usetts)32 b(Institute)e(of)g(T)-8
-b(ec)m(hnology)32 b(Press,)e(ISBN)g(0)h(262)g(01125-5.)44
-b(1991.)94 3964 y Fg(A.2)112 b(INRIA)94 4136 y Fl(Institut)29
-b(National)i(de)f(Rec)m(herc)m(he)i(en)e(Informatique)f(et)i
-(Automatique)f(\(INRIA\))94 4249 y(Domaine)h(de)f(V)-8
-b(oluceau)94 4362 y(78153)33 b(Ro)s(cquencourt)d(Cedex)94
-4475 y(F)-8 b(rance)94 4813 y(INRIA)27 b(\(National)h(Institute)f(for)g
-(Researc)m(h)i(in)d(Computer)h(Science)g(and)g(Con)m(trol\))h(is)f(a)h
-(F)-8 b(renc)m(h)28 b(public-)94 4926 y(sector)g(scien)m(ti\014c)e(and)
-g(tec)m(hnological)h(institute)f(op)s(erating)g(under)f(the)i(dual)f
-(authorit)m(y)g(of)h(the)g(Ministry)94 5039 y(of)42 b(Researc)m(h)i
-(and)e(the)g(Ministry)e(of)j(Industry)-8 b(.)75 b(INRIA's)42
-b(missions)e(are)j(\\to)h(undertak)m(e)e(basic)g(and)94
-5152 y(applied)29 b(researc)m(h,)j(to)g(design)e(exp)s(erimen)m(tal)g
-(systems,)h(to)h(ensure)e(tec)m(hnology)j(and)d(kno)m(wledge)h(trans-)
-94 5265 y(fer,)36 b(to)f(organise)g(in)m(ternational)e(scien)m(ti\014c)
-h(exc)m(hanges,)k(to)d(carry)g(out)g(scien)m(ti\014c)f(assessmen)m(ts,)
-j(and)d(to)94 5378 y(con)m(tribute)c(to)h(standardisation".)p
-eop
-%%Page: 40 40
-40 39 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(40)94 171 y(The)36 b(researc)m(h)h(carried)f(out)h(at)h(INRIA)e
-(brings)f(together)j(exp)s(erts)e(from)g(the)h(\014elds)e(of)i
-(computer)g(sci-)94 284 y(ence)31 b(and)f(applied)f(mathematics)i(co)m
-(v)m(ering)h(the)f(follo)m(wing)e(areas:)42 b(Net)m(w)m(orks)32
-b(and)e(Systems;)h(Soft)m(w)m(are)94 397 y(Engineering)42
-b(and)h(Sym)m(b)s(olic)f(Computing;)49 b(Man-Mac)m(hine)44
-b(In)m(teraction;)52 b(Image)44 b(Pro)s(cessing,)j(Data)94
-510 y(Managemen)m(t,)33 b(Kno)m(wledge)d(Systems;)g(Sim)m(ulation)e
-(and)i(Optimisation)e(of)i(Complex)g(Systems.)94 623
-y(INRIA)c(gathers)h(in)e(its)h(premises)f(around)h(2)h(100)g(p)s
-(ersons)e(including)e(1)k(600)h(scien)m(tists)e(,)h(man)m(y)g(of)g
-(whic)m(h)94 736 y(b)s(elong)e(to)j(partner)d(organisations)h(\(CNRS,)g
-(industrial)d(labs,)k(univ)m(ersities\))d(and)i(are)h(assigned)e(to)i
-(w)m(ork)94 849 y(in)33 b(common)i(\\pro)5 b(jects".)53
-b(On)34 b(INRIA's)g(budget,)h(around)f(500)h(full-time)d(equiv)-5
-b(alen)m(t)34 b(R&D)g(p)s(ositions)94 962 y(can)d(b)s(e)e(accoun)m(ted)
-j(for.)94 1075 y(A)f(large)f(n)m(um)m(b)s(er)f(of)i(INRIA)g(senior)e
-(researc)m(hers)i(are)g(in)m(v)m(olv)m(ed)f(in)g(teac)m(hing)h(and)f
-(their)f(PhD)i(studen)m(ts)94 1187 y(\(ab)s(out)f(550\))i(prepare)e
-(their)g(thesis)f(within)f(the)j(di\013eren)m(t)e(INRIA)i(researc)m(h)g
-(pro)5 b(jects)30 b(\(curren)m(tly)g(74\).)94 1300 y(Its)23
-b(budget)f(is)g(roughly)g(90)i(MEuro,)g(20\045)f(of)g(whic)m(h)f(comes)
-i(from)e(researc)m(h)i(and)e(dev)m(elopmen)m(t)h(con)m(tracts,)94
-1413 y(ro)m(y)m(alties)31 b(and)f(sales.)40 b(Industrial)28
-b(relations)h(are)i(strategic)g(for)f(INRIA:)94 1650
-y Fi(Industrial)43 b(con)m(tracts)i(and)e(Europ)s(ean)h(Pro)6
-b(jects.)92 b Fl(Numerous)37 b(industrial)d(partners)j(con)m(tract)94
-1763 y(with)h(the)i(Institute)e(for)h(collab)s(orativ)m(e)h(researc)m
-(h.)68 b(They)39 b(are)h(F)-8 b(renc)m(h)39 b(or)h(foreign)f
-(companies,)i(of)e(all)94 1876 y(sizes.)45 b(400)34 b(suc)m(h)d(con)m
-(tracts)j(are)f(presen)m(tly)e(activ)m(e.)47 b(Roughly)31
-b(40\045)i(of)f(these)g(con)m(tracts)i(are)f(Europ)s(ean)94
-1989 y(funded)43 b(ones.)85 b(Since)44 b(1984,)50 b(250)c(Europ)s(ean)e
-(F)-8 b(ramew)m(ork-Programme)47 b(\(FP\))f(pro)5 b(jects)45
-b(ha)m(v)m(e)h(b)s(een)94 2102 y(executed.)94 2338 y
-Fi(T)-9 b(ec)m(hnology)32 b(companies.)91 b Fl(As)26
-b(the)h(ultimate)f(step)g(in)g(tec)m(hnology)h(transfer,)g(researc)m
-(hers)g(are)g(part)m(y)94 2451 y(to)k(the)f(setting)h(up)e(of)h
-(companies)g(in)f(order)h(to)h(implemen)m(t)e(their)g(tec)m(hnology)i
-(on)g(the)f(mark)m(et.)42 b(Thirt)m(y)94 2564 y(sev)m(en)e(spin-o\013)f
-(companies)h(ha)m(v)m(e)h(b)s(een)e(created)i(since)e(1984.)71
-b(In)39 b(1999,)45 b(INRIA)40 b(has)f(launc)m(hed)g(t)m(w)m(o)94
-2677 y(subsidiaries)26 b(to)31 b(promote)f(high-tec)m(h)g(start-up)f
-(companies:)40 b(INRIA-TRANSFER)-8 b(T)30 b(deals)f(with)g(early)94
-2790 y(accompanimen)m(t)35 b(of)g(the)f(future)g(companies,)h(whereas)f
-(I-SOUR)m(CE)g(GESTION)f(pro)m(vides)g(for)i(\\seed-)94
-2903 y(money".)94 3016 y(INRIA)c(is)f(a)h(mem)m(b)s(er)g(of)g(ER)m(CIM)
-g(EEIG,)g(Europ)s(ean)f(Researc)m(h)i(Consortium)e(for)g(Computer)h
-(Science)94 3129 y(and)e(Mathematics.)41 b(Outside)28
-b(Europ)s(e,)h(INRIA)g(also)h(has)f(a)h(signi\014can)m(t)e(activit)m
-(y:)41 b(it)29 b(has)g(created)i(join)m(t)94 3242 y(researc)m(h)e(lab)s
-(oratories)e(\(Russia)h(and)f(China\),)h(signed)f(co)s(op)s(eration)h
-(agreemen)m(ts)i(\(NSF,)e(India,)g(Brazil,)94 3355 y(etc.\))42
-b(and)30 b(promotes)h(in)m(tensiv)m(e)e(scien)m(ti\014c)h(exc)m
-(hanges.)94 3468 y(INRIA)g(W)-8 b(eb:)42 b(h)m(ttp://www.inria.fr/)94
-3704 y Fi(A.2.1)105 b(The)35 b(Lemme)e(pro)6 b(ject)94
-3876 y Fl(The)39 b(purp)s(ose)g(of)h(the)g(Lemme)g(pro)5
-b(ject)40 b(is)f(to)h(in)m(tro)s(duce)f(and)g(dev)m(elop)h(formal)f
-(metho)s(ds)g(for)h(use)g(in)94 3989 y(writing)35 b(scien)m(ti\014c)i
-(computing)f(soft)m(w)m(are.)63 b(In)37 b(scien)m(ti\014c)g(computing,)
-h(algorithms)e(and)h(mathematics)94 4102 y(are)j(at)g(the)f(forefron)m
-(t.)67 b(W)-8 b(e)41 b(are)e(th)m(us)g(dev)m(eloping)g(to)s(ols)g(and)f
-(metho)s(ds)h(to)h(help)d(pro)s(ducing)g(correct)94 4215
-y(programs)f(starting)h(from)g(the)g(usual)e(mathematical)i
-(descriptions)e(of)i(data,)i(algorithms,)f(prop)s(erties)94
-4328 y(and)30 b(pro)s(ofs,)f(structured)h(in)m(to)g(four)g(researc)m(h)
-h(themes:)230 4498 y Fe(\017)46 b Fl(Pro)s(of)27 b(en)m(vironmen)m(ts)f
-(\(dev)m(elopmen)m(t)i(of)f(the)g(Pco)s(q)g(system)g(in)f(Ja)m(v)-5
-b(a)28 b(and)e(its)h(compatibilit)m(y)e(with)321 4610
-y(XML/MathML\).)230 4791 y Fe(\017)46 b Fl(F)-8 b(ormalisation)45
-b(of)g(mathematical)g(theories)g(\(algebraic)g(geometry)-8
-b(,)50 b(elemen)m(tary)c(algebra)f(and)321 4904 y(analysis\).)230
-5084 y Fe(\017)h Fl(Certi\014ed)37 b(implemen)m(tation)g(of)i(scien)m
-(ti\014c)f(computing)f(algorithms)h(\(computer)g(algebra,)j(arith-)321
-5197 y(metics,)31 b(logic\).)230 5378 y Fe(\017)46 b
-Fl(Pro)s(ofs)30 b(on)g(seman)m(tics)h(of)g(programming)e(languages)h
-(\(Ja)m(v)-5 b(acard\).)p eop
-%%Page: 41 41
-41 40 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(41)235 171 y(The)25 b(pro)5 b(ject)27 b(b)s(elongs)e(to)h(the)g
-(Europ)s(ean)f(w)m(orking)g(group)g(T)m(yp)s(es,)i(and)e(to)i(the)f(F)
--8 b(renc)m(h)26 b(action)g(A)m(OC)94 284 y(\(Arithm)m(\023)-43
-b(etique)30 b(des)g(Ordinateurs)d(Certi\014e\).)40 b(It)30
-b(k)m(eeps)h(up)e(industrial)e(collab)s(orations)h(with)h(Dassault-)94
-397 y(Aviation)39 b(\(program)h(pro)s(of)g(en)m(vironmen)m(ts\),)i
-(Alcatel)e(Space)g(Industry)e(\(certi\014ed)i(n)m(umerical)f(co)s
-(de\),)94 510 y(and)25 b(GemPlus)g(\(Ja)m(v)-5 b(acard)28
-b(certi\014cation\),)f(and)e(also)h(collab)s(orates)g(with)f(teac)m
-(hers)i(at)g(univ)m(ersit)m(y)d(on)i(the)94 623 y(use)k(of)h(formal)e
-(pro)s(ofs)h(and)f(W)-8 b(eb-based)32 b(en)m(vironmen)m(ts)d(in)g
-(mathematics)i(courses.)235 736 y(P)m(eople)j(of)g(Lemme)g(in)m(v)m
-(olv)m(ed)g(in)e(the)i(MO)m(W)m(GLI)i(prop)s(osal)c(are:)48
-b(Laurence)34 b(Rideau)f(\(researc)m(her\),)94 849 y(Hanane)42
-b(Naciri)e(\(PhD)h(studen)m(t\),)k(Lo)-10 b(\177)-35
-b(\020c)41 b(P)m(ottier)g(\(researc)m(her\),)46 b(Yv)m(es)c(Bertot)h
-(\(researc)m(her\),)i(Ahmed)94 962 y(Amerk)-5 b(ad)30
-b(\(engineer\),)h(Lauren)m(t)f(Th)m(\023)-43 b(ery)31
-b(\(researc)m(her\))h(and)d(Lauren)m(t)i(Chicli)c(\(PhD)k(studen)m
-(t\).)94 1198 y Fi(A.2.2)105 b(The)35 b(LogiCal)f(pro)6
-b(ject)94 1370 y Fl(The)31 b(LogiCal)g(team)i(of)f(INRIA)g(is)e(w)m
-(orking)i(on)f(theoretical)h(and)g(practical)f(asp)s(ects)h(of)g
-(mathematical)94 1483 y(pro)s(ofs.)64 b(It)39 b(dev)m(elops)f(the)h(Co)
-s(q)f(pro)s(of)g(assistan)m(t,)j(an)e(implemen)m(tation)e(of)i(an)f
-(expressiv)m(e)g(formalism)94 1596 y(called)25 b(Calculus)g(of)h
-(Inductiv)m(e)f(Constructions.)38 b(Co)s(q)26 b(is)f(used)h(b)s(oth)f
-(for)h(dev)m(elopmen)m(t)h(of)g(formal)e(math-)94 1708
-y(ematics)31 b(and)f(for)g(certi\014cation)g(of)g(programs,)h(esp)s
-(ecially)d(proto)s(cols)i(and)g(critical)g(systems.)235
-1821 y(The)43 b(LogiCal)f(pro)5 b(ject)44 b(is)e(a)i(join)m(t)f(pro)5
-b(ject)43 b(with)f(Univ)m(ersit)m(y)g(P)m(aris)h(11.)80
-b(It)43 b(is)f(in)m(v)m(olv)m(ed)h(in)f(the)94 1934 y(Europ)s(ean)33
-b(TYPES)g(w)m(orking)h(group)g(and)f(in)g(sev)m(eral)i(F)-8
-b(renc)m(h)35 b(actions.)52 b(Esp)s(ecially)-8 b(,)34
-b(it)f(is)h(in)m(v)m(olv)m(ed)g(in)94 2047 y(the)g(S-Ja)m(v)-5
-b(a)34 b(action)h(aiming)d(at)i(certifying)f(safet)m(y)i(prop)s(erties)
-d(for)i(Ja)m(v)-5 b(aCard)34 b(programs,)g(in)f(a)h(pro)5
-b(ject)94 2160 y(aiming)31 b(at)j(certifying)d(algorithms)h(used)g(in)f
-(computer)i(algebra)f(systems.)48 b(LogiCal)32 b(collab)s(orates)g
-(also)94 2273 y(on)e(pro)s(of)g(automation)h(with)e(F)-8
-b(rance)31 b(T)-8 b(elecom.)94 2504 y Fi(T)f(ec)m(hnical)36
-b(Con)m(tributors)f(of)g(LogiCal)g(team)28 b Fl(The)i(p)s(eople)g(in)m
-(v)m(olv)m(ed)g(in)f(the)h(pro)5 b(ject)31 b(are:)230
-2672 y Fe(\017)46 b Fl(Hugo)31 b(Herb)s(elin)d(\(Asso)s(ciate)k
-(Professor)e(at)h(Univ)m(ersit)m(y)e(P)m(aris)h(10,)i(seconded)e(at)h
-(INRIA\))230 2852 y Fe(\017)46 b Fl(Da)m(vid)31 b(Delaha)m(y)m(e)h
-(\(Ph.D.)f(Studen)m(t\))94 3021 y(In)f(case)h(of)g(appro)m(v)-5
-b(al,)30 b(w)m(e)h(exp)s(ect)f(to)i(o\013er)e(a)h(three-mon)m(th)g
-(training)e(course)h(on)h(pro)5 b(ject)30 b(funding.)94
-3252 y Fa(Hugo)k(Herbelin)94 3386 y Fl(Born)c(June)g(9,)h(1967.)94
-3499 y(Asso)s(ciate)g(Professor)f(at)h(Univ)m(ersit)m(y)f(P)m(aris)g
-(10,)h(seconded)g(at)g(INRIA.)94 3612 y(Domaine)g(de)f(V)-8
-b(oluceau)94 3724 y(78153)33 b(Ro)s(cquencourt)d(Cedex)94
-3837 y(F)-8 b(rance)94 4063 y(Phone:)40 b(+33)31 b(\(0\))h(1)f(39)g(63)
-g(53)g(77.)94 4176 y(E-mail:)40 b Fb(Hugo.Herbelin@inria.fr)94
-4416 y Fg(A.3)112 b(German)37 b(Researc)m(h)h(Cen)m(ter)f(for)h
-(Arti\014cial)c(In)m(telligence)h(Gm)m(bH,)h(DFKI)94
-4588 y Fl(The)f(German)h(Researc)m(h)h(Cen)m(ter)f(for)g(Arti\014cial)e
-(In)m(telligence)i(Gm)m(bH,)g(DFKI)g(w)m(as)g(founded)f(in)f(1988.)94
-4700 y(T)-8 b(o)s(da)m(y)g(,)33 b(DFKI)g(is)e(one)i(of)g(the)f(largest)
-h(non-pro\014t)e(con)m(tract)j(researc)m(h)f(institutes)e(in)g(the)i
-(\014eld)e(of)h(inno-)94 4813 y(v)-5 b(ativ)m(e)29 b(soft)m(w)m(are)g
-(tec)m(hnology)g(based)f(on)g(Arti\014cial)e(In)m(telligence)h(\(AI\))i
-(metho)s(ds.)39 b(DFKI)28 b(is)f(fo)s(cusing)f(on)94
-4926 y(the)f(complete)h(cycle)f(of)h(inno)m(v)-5 b(ation)24
-b(-)h(from)g(w)m(orld-class)f(basic)g(researc)m(h)i(and)f(tec)m
-(hnology)h(dev)m(elopmen)m(t)94 5039 y(through)j(leading-edge)h
-(demonstrators)f(and)h(protot)m(yp)s(es)g(to)g(pro)s(duct)f(functions)f
-(and)h(commercializa-)94 5152 y(tion.)64 b(Based)39 b(in)d
-(Kaiserslautern)h(and)h(Saarbr)s(\177)-48 b(uc)m(k)m(en,)40
-b(the)e(German)g(Researc)m(h)i(Cen)m(ter)e(for)g(Arti\014cial)94
-5265 y(In)m(telligence)e(ranks)g(among)i(the)e(imp)s(ortan)m(t)g(\\Cen)
-m(ters)i(of)f(Excellence")g(w)m(orldwide.)57 b(The)36
-b(k)m(ey)i(direc-)94 5378 y(tors)f(of)g(DFKI)h(are)f(Prof.)60
-b(Dr.)h(W)-8 b(olfgang)38 b(W)-8 b(ahlster)37 b(\(CEO\))g(and)f(Dr.)61
-b(W)-8 b(alter)38 b(G.)f(Oltho\013)f(\(CF)m(O\).)p eop
-%%Page: 42 42
-42 41 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(42)94 171 y(DFKI's)27 b(mission)d(is)i(tec)m(hnology)h(transfer,)g
-(that)g(is)f(to)h(mo)m(v)m(e)h(inno)m(v)-5 b(ations)25
-b(in)g(AI)h(as)h(quic)m(kly)e(as)i(p)s(ossible)94 284
-y(from)g(the)g(lab)f(in)m(to)h(the)h(mark)m(etplace)g(b)m(y)f(main)m
-(taining)e(researc)m(h)j(pro)5 b(jects)27 b(at)h(the)f(forefron)m(t)h
-(of)f(science.)94 397 y(Exp)s(ertise)j(and)h(exp)s(erience)f(of)i(the)g
-(compan)m(y)f(DFKI)h(has)f(strong)h(exp)s(ertise)e(in)g(eac)m(h)j(of)e
-(the)h(follo)m(wing)94 510 y(domains:)230 698 y Fe(\017)46
-b Fl(Information)23 b(Managemen)m(t)i(and)e(Do)s(cumen)m(t)h(Analysis)e
-(\(Director:)38 b(Prof.)g(Dr.)h(Andreas)23 b(Dengel\))230
-885 y Fe(\017)46 b Fl(In)m(telligen)m(t)30 b(Visualization)f(and)g(Sim)
-m(ulation)f(Systems)i(\(Director:)42 b(Prof.)e(Dr.)h(Hans)30
-b(Hagen\))230 1073 y Fe(\017)46 b Fl(Deduction)30 b(and)g(Multiagen)m
-(t)h(Systems)f(\(Director:)41 b(Prof.)g(Dr.)f(J\177)-45
-b(org)31 b(Siekmann\))230 1261 y Fe(\017)46 b Fl(Language)32
-b(T)-8 b(ec)m(hnology)31 b(\(Director:)41 b(Prof.)g(Dr.)f(Hans)31
-b(Uszk)m(oreit\))230 1448 y Fe(\017)46 b Fl(In)m(telligen)m(t)30
-b(User)g(In)m(terfaces)i(\(Director:)41 b(Prof.)g(Dr.)f(W)-8
-b(olfgang)32 b(W)-8 b(ahlster\))94 1636 y(DFKI)26 b(is)f(in)m(v)m(olv)m
-(ed)h(in)f(n)m(umerous)g(industrial,)e(academian)j(pro)5
-b(jects)27 b(including)22 b(pro)5 b(jects)27 b(in)d(the)j(curren)m(t)94
-1749 y(EC)34 b(IST)f(programme)h(dealing)g(with)f(researc)m(h)i(and)f
-(dev)m(elopmen)m(t)g(in)f(the)i(broad)f(areas)h(of)g(in)m(telligen)m(t)
-94 1862 y(in)m(terface)26 b(agen)m(ts,)h(and)e(m)m(ultiagen)m(t)g
-(systems)g(for)g(applications)e(in)h(supply-c)m(hain)e(managemen)m(t,)
-28 b(virtual)94 1975 y(en)m(terprises,)39 b(e-commerce)g(and)e(adv)-5
-b(anced)37 b(information)f(systems.)62 b(The)37 b(partners)g(of)h(the)f
-(DFKI)h(are)94 2087 y(leading)30 b(large-scale)i(concerns)f(suc)m(h)g
-(as)g(DaimlerChrysler,)d(SAP)-8 b(,)31 b(and)g(Alcatel,)h(plus)d(the)i
-(t)m(w)m(o)h(univ)m(er-)94 2200 y(sities)e(of)h(Kaiserlautern)e(and)h
-(Saarbr)s(\177)-48 b(uc)m(k)m(en.)42 b(In)30 b(the)h(range)g(of)g
-(medium-sized)e(\014rms)h(INSIDERS,)g(IDS)94 2313 y(Sc)m(heer,)44
-b(T)-8 b(ecmath)41 b(and)f(KIBG)g(are)h(to)h(b)s(e)d(added.)71
-b(Finally)-8 b(,)42 b(the)e(t)m(w)m(o)i(most)f(imp)s(ortan)m(t)f
-(large-scale)94 2426 y(researc)m(h)c(cen)m(ters)g(on)f(in)m
-(ternational)f(lev)m(el,)j(i.e.)55 b(the)36 b(F)-8 b(raunhofer)35
-b(So)s(ciet)m(y)g(and)g(GMD,)i(round)c(o\013)j(the)94
-2539 y(circle)23 b(of)h(partners.)38 b(DFKI)24 b(is)f(part)h(of)g(sev)m
-(eral)g(Europ)s(ean)f(Net)m(w)m(orks)i(of)f(Excellence)g(suc)m(h)f(as)i
-(Agen)m(tLink)94 2652 y(and)30 b(CompuLog.)235 2765 y(Recen)m(tly)-8
-b(,)48 b(an)43 b(Education)g(T)-8 b(ec)m(hnology)44 b(Group)f(of)g
-(DFKI,)h(headed)f(b)m(y)g(Prof.)79 b(J.H.)44 b(Siekmann,)94
-2878 y(has)39 b(b)s(een)g(established.)g(It)h(has)f(carried)g(out)h
-(basic)f(researc)m(h)h(and)g(applications)e(in)g(sev)m(eral)i(\014elds)
-e(of)94 2991 y(AI,)c(including)29 b(presen)m(tation)34
-b(planning)c(\(for)k(education)f(material\),)h(user)f(mo)s(deling,)f
-(pro)s(of)h(planning,)94 3104 y(kno)m(wledge)24 b(represen)m(tation)g
-(\(for)h(educational)e(and)h(mathematical)h(W)-8 b(eb-do)s(cumen)m
-(ts\))25 b(and)e(in)m(tegration)94 3217 y(of)40 b(\(mathematical)h
-(services\).)69 b(Its)40 b(main)e(protot)m(ypical)i(pro)s(duct)f(so)h
-(far)g(has)f(b)s(een)g(the)h(W)-8 b(eb-based,)94 3329
-y(user-adaptiv)m(e,)41 b(generativ)m(e)f(learning)e(en)m(vironmen)m(t)g
-(Activ)m(eMath)j(that)e(in)m(tegrates)h(sev)m(eral)f(external)94
-3442 y(services.)68 b(Mem)m(b)s(ers)39 b(of)h(the)f(group)g(are)h
-(activ)m(ely)g(in)m(v)m(olv)m(ed)f(in)f(the)i(in)m(ternational)e
-(academic)i(life)e(b)m(y)94 3555 y(organizing)30 b(or)g(con)m
-(tributing)f(to)i(conferences)g(and)f(w)m(orkshops.)94
-3786 y Fa(Pr)n(of.Dr.)45 b(Joer)n(g)33 b(Siekmann)94
-3899 y Fl(Prof.)56 b(Dr.)g(Jo)s(erg)36 b(Siekmann)e(is)g(Professor)h
-(of)h(Computer)f(Science)g(and)g(Director)h(of)g(the)g(Deduction)94
-4012 y(and)f(Multiagen)m(t)i(Systems)e(researc)m(h)i(departmen)m(t)f
-(at)h(the)f(DFKI.)g(He)h(studied)d(at)j(the)f(Univ)m(ersit)m(y)f(of)94
-4125 y(Go)s(ettingen)25 b(\(Mathematics)i(and)d(Ph)m(ysics,)h(1972\))i
-(and)d(the)h(Univ)m(ersit)m(y)f(of)h(Essex)g(\(M.Sc.)40
-b(in)23 b(Computer)94 4238 y(Science,)34 b(1973,)i(and)c(Ph.D.)h(in)f
-(Computer)g(Science,)i(1976\).)51 b(F)-8 b(rom)34 b(1976)g(to)g(1983)h
-(he)e(w)m(as)g(a)h(researc)m(h)94 4351 y(assistan)m(t)j(at)f(the)h
-(Univ)m(ersit)m(y)e(of)i(Karlsruhe.)56 b(F)-8 b(rom)36
-b(1983)i(to)f(1991)h(he)e(w)m(as)h(Professor)f(of)g(Computer)94
-4464 y(Science)28 b(at)i(the)f(Univ)m(ersit)m(y)f(of)g(Kaiserslautern)f
-(and)h(since)g(1991)j(he)d(has)h(a)g(join)m(t)f(p)s(osition)f(as)i
-(professor)94 4577 y(for)36 b(Computer)g(Science)g(at)h(the)f(Univ)m
-(ersitaet)h(des)f(Saarlandes)f(and)h(as)h(one)f(of)h(the)f(directors)g
-(at)h(the)94 4690 y(DFKI.)42 b(He)g(has)f(published)c(widely)j(in)g
-(AI,)h(Automated)h(Reasoning)f(and)g(Uni\014cation)f(Theory)h(and)94
-4802 y(serv)m(ed)30 b(on)g(man)m(y)f(programme)h(committees)h(and)e(w)m
-(as)h(programme)g(c)m(hairman)f(of)h(v)-5 b(arious)29
-b(conferences)94 4915 y(\(suc)m(h)e(as)h(CADE,)g(KI)e(etc.\).)42
-b(He)28 b(is)e(editor)h(of)g(sev)m(eral)h(logic)f(and)g(AI)g(orien)m
-(ted)g(scien)m(ti\014c)g(journals)e(\(suc)m(h)94 5028
-y(as)36 b(Journal)f(of)h(Automated)h(Reasoning,)g(Journal)e(of)h
-(Arti\014cial)e(In)m(telligence,)j(Journal)d(of)j(Logic)f(and)94
-5141 y(Computation)30 b(etc\).)44 b(His)30 b(biograph)m(y)h(is)f
-(included)e(in)i(most)h(in)m(ternational)f(Whos)h(Who,)h(as)f(one)g(of)
-g(the)p eop
-%%Page: 43 43
-43 42 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(43)94 171 y(founders)29 b(of)h(AI)h(in)e(German)m(y)-8
-b(.)94 402 y Fa(PD.Dr.)46 b(Erica)34 b(Melis)94 515 y
-Fl(Erica)g(Melis)f(is)g(a)h(Senior)f(Researc)m(her)i(at)f(the)h(German)
-f(Researc)m(h)h(Cen)m(ter)f(for)g(Arti\014cial)e(In)m(telligence)94
-628 y(\(DFKI)j(Gm)m(bH\).)h(She)e(w)m(as)h(a)g(researc)m(h)g(scien)m
-(tist)f(at)i(the)f(Sc)m(ho)s(ol)f(of)h(Computer)e(Science)i(of)g
-(Carnegie)94 741 y(Mellon)h(Univ)m(ersit)m(y)h(and)g(at)h(the)f
-(Departmen)m(t)h(of)g(AI)f(at)h(the)f(Univ)m(ersit)m(y)g(of)g(Edin)m
-(burgh.)59 b(Later)38 b(she)94 854 y(has)g(b)s(een)f(an)h(Assistan)m(t)
-h(Professor)f(at)h(the)f(Univ)m(ersit)m(y)g(of)g(Saarland)f(and)g(is)h
-(mem)m(b)s(er)f(of)i(a)f(Sonder-)94 967 y(forsc)m(h)m(ungsb)s(ereic)m
-(h)d(in)g(Saarbruec)m(k)m(en.)59 b(She)36 b(serv)m(ed)g(on)h(n)m
-(umerous)e(programme)h(committees.)60 b(Erica)94 1080
-y(Melis)38 b(is)g(the)g(editor)h(of)g(pro)s(ceedings)e(and)h(the)h
-(co/author)h(of)f(n)m(umerous)f(scien)m(ti\014c)g(pap)s(ers)f(in)h
-(jour-)94 1193 y(nals,)32 b(conferences,)h(and)f(collections)f(in)g
-(areas)i(suc)m(h)f(as)g(deduction,)f(planning,)g(case-based)i
-(reasoning,)94 1306 y(in)m(telligen)m(t)k(tutor)i(systems.)g(Curren)m
-(tly)-8 b(,)40 b(her)e(researc)m(h)h(in)m(terests)g(fo)s(cus)f(pro)s
-(of)g(planning)e(and)i(on)g(the)94 1418 y(application)32
-b(of)i(Arti\014cial)e(In)m(telligence)h(tec)m(hnology)i(in)d(in)m
-(telligen)m(t)h(learning)f(en)m(vironmen)m(ts.)h(She)g(is)g(a)94
-1531 y(mem)m(b)s(er)d(of)g(AAAI)h(and)f(GI.)94 1775 y
-Fg(A.4)112 b(Nijmegen)36 b(\(&)h(Eindho)m(v)m(en\))94
-1946 y Fl(Subfaculteit)29 b(Informatica)94 2059 y(F)-8
-b(aculteit)31 b(Natuurw)m(etensc)m(happ)s(en,)f(Wiskunde)f(en)h
-(Informatica)94 2172 y(Katholiek)m(e)h(Univ)m(ersiteit)e(Nijmegen)94
-2285 y(T)-8 b(o)s(erno)s(oiv)m(eld)29 b(1)94 2398 y(6525)j(ED)f
-(Nijmegen)94 2511 y(The)f(Netherlands)94 2624 y(h)m
-(ttp://www.cs.kun.nl)235 2737 y(The)41 b(Sub-facult)m(y)e(of)j
-(Computer)e(Science)g(at)i(the)f(Univ)m(ersit)m(y)f(of)i(Nijmegen)e
-(hosts)h(a)g(broad)g(ex-)94 2850 y(p)s(erience)f(in)f(logic,)k(formal)d
-(metho)s(ds)g(and)g(theorem)h(pro)m(ving.)71 b(The)40
-b(F)-8 b(acult)m(y)41 b(of)g(Mathematics)h(and)94 2963
-y(Computer)29 b(Science)i(of)f(Eindho)m(v)m(en)f(Univ)m(ersit)m(y)h(of)
-g(T)-8 b(ec)m(hnology)31 b(is)f(strong)g(in)f(computer)h(algebra,)h
-(the-)94 3076 y(orem)j(pro)m(ving)e(and)h(applying)f(W)-8
-b(eb)34 b(tec)m(hnology)h(to)f(mathematics.)51 b(Nijmegen)33
-b(and)g(Eindho)m(v)m(en)f(ha)m(v)m(e)94 3188 y(a)39 b(long)f(history)g
-(in)f(co)s(op)s(eration)i(on)f(topics)h(related)f(to)i(this)d(FET)i
-(prop)s(osal,)g(notably)g(t)m(yp)s(e)f(theory)-8 b(,)94
-3301 y(theorem)31 b(pro)m(ving)f(and)g(com)m(bining)f(v)-5
-b(arious)29 b(computer)i(mathematics)g(applications,)e(esp)s(ecially)g
-(using)94 3414 y(Op)s(enMath.)38 b(This)23 b(co)s(op)s(eration)h(w)m
-(as)h(mainly)e(taking)i(place)g(b)s(et)m(w)m(een)g(the)g(researc)m(h)g
-(groups)f(of)h(Geuv)m(ers)94 3527 y(and)30 b(Barendregt)h(in)e
-(Nijmegen)h(and)g(the)g(researc)m(h)h(group)f(of)h(Cohen)e(in)g(Eindho)
-m(v)m(en.)235 3640 y(The)41 b(researc)m(h)i(group)e(of)h(Geuv)m(ers)g
-(and)f(Barendregt)h(is)f(part)g(of)h(the)g(EC)f(sp)s(onsored)g
-(Thematic)94 3753 y(Net)m(w)m(ork)32 b(\\TYPES")f(\(IST-1999-29001\))k
-(and)30 b(of)h(its)f(ancestor,)i(the)e(EC)g(W)-8 b(orking)31
-b(Group)f(\\T)m(yp)s(es)h(for)94 3866 y(Pro)s(ofs)c(and)g(Programs",)i
-(whic)m(h)e(testi\014es)h(there)g(in)m(terest)g(in)e(theorem)i(pro)m
-(ving,)g(esp)s(ecially)e(using)g(t)m(yp)s(e)94 3979 y(theory)j(based)g
-(theorem)h(pro)m(v)m(ers.)40 b(The)29 b(FT)-8 b(A)29
-b(pro)5 b(ject)30 b(\(F)-8 b(undamen)m(tal)29 b(Theorem)g(of)g
-(Algebra\),)h(started)94 4092 y(in)f(1999)j(and)e(to)h(b)s(e)e
-(\014nished)f(in)h(2001,)j(has)e(as)h(its)e(main)h(goal)g(to)h
-(formalize)f(\(in)f(Co)s(q\))h(a)h(large)g(b)s(o)s(dy)d(of)94
-4205 y(undergraduate)d(mathematics)h(\(algebra)g(and)f(analysis\),)g
-(culminating)e(in)h(a)i(pro)s(of)f(of)h(the)f(fundamen)m(tal)94
-4318 y(theorem)i(of)g(algebra.)39 b(The)26 b(formalization)f(of)i(the)g
-(mathematics)g(is)e(no)m(w)i(\014nished)d(and)h(the)i(next)g(step)f(is)
-94 4430 y(to)g(mak)m(e)h(the)e(formalization)f(accessible)i(and)e
-(usable)h(b)m(y)g(others,)i(preferably)d(through)g(the)i(W)-8
-b(orld)25 b(Wide)94 4543 y(W)-8 b(eb.)40 b(The)25 b(researc)m(h)h
-(group)e(in)h(Nijmegen)g(and)f(the)i(researc)m(h)g(group)f(of)g(Cohen)g
-(in)f(Eindho)m(v)m(en)g(are)i(b)s(oth)94 4656 y(part)i(of)h(the)g(EC)e
-(W)-8 b(orking)29 b(Group)f(Calculem)m(us,)f(whic)m(h)h(aims)f(at)i
-(bridging)d(the)j(gap)g(b)s(et)m(w)m(een)g(di\013eren)m(t)94
-4769 y(mathematical)44 b(computer)g(applications,)h(lik)m(e)e(computer)
-g(algebra)h(systems)g(and)f(theorem)h(pro)m(v)m(ers.)94
-4882 y(One)26 b(of)i(the)f(v)m(ehicles)f(for)h(doing)f(so)h(is)f(the)h
-(de\014nition)e(of)i(Op)s(enMath)f(as)h(an)g(in)m(termediate)f
-(language)i(for)94 4995 y(the)35 b(exc)m(hange)h(of)f(mathematical)h
-(ob)5 b(jects)35 b(among)h(computer)f(applications.)52
-b(The)34 b(researc)m(h)i(group)e(of)94 5108 y(Cohen)29
-b(is)f(part)h(of)g(the)h(IST)e(Thematic)h(Net)m(w)m(ork)h(\\Op)s
-(enMath")g(\(IST-2000-28719\))j(and)c(its)f(ancestor,)94
-5221 y(the)j(Op)s(enMath)e(Esprit)g(pro)5 b(ject)31 b(\()p
-Fb(http://www.openmath.org/)p Fl(\).)p eop
-%%Page: 44 44
-44 43 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(44)94 171 y Fi(T)-9 b(ec)m(hnical)29 b(Con)m(tributors)91
-b Fl(The)24 b(p)s(eople)g(from)g(Nijmegen)g(and)g(Eindho)m(v)m(en)f(in)
-m(v)m(olv)m(ed)h(in)f(the)i(pro)5 b(ject)94 284 y(are:)230
-460 y Fe(\017)46 b Fl(Herman)30 b(Geuv)m(ers)h(\(Asso)s(ciate)h
-(Professor,)e(Nijmegen\))230 644 y Fe(\017)46 b Fl(Arjeh)30
-b(Cohen)g(\(F)-8 b(ull)29 b(Professor,)i(Eindho)m(v)m(en\))230
-827 y Fe(\017)46 b Fl(Henk)31 b(Barendregt)g(\(F)-8 b(ull)29
-b(Professor,)i(Nijmegen\))230 1010 y Fe(\017)46 b Fl(Milad)29
-b(Niqui)g(\(Ph.D.)i(studen)m(t,)f(Nijmegen\))230 1193
-y Fe(\017)46 b Fl(Jasp)s(er)30 b(Stein)f(\(Ph.D.)i(studen)m(t,)f
-(Nijmegen\))230 1376 y Fe(\017)46 b Fl(Luis)29 b(Cruz-Filip)s(e)e
-(\(Ph.D.)k(studen)m(t,)g(Nijmegen\))230 1559 y Fe(\017)46
-b Fl(F)-8 b(reek)32 b(Wiedijk)d(\(P)m(ost)i(Do)s(c)g(researc)m(her,)h
-(Nijmegen\))230 1742 y Fe(\017)46 b Fl(Dan)31 b(Synek)f(\(Programmer,)h
-(Nijmegen\))230 1925 y Fe(\017)46 b Fl(Ernesto)31 b(Reinaldo)e
-(Barreiro)h(\(Ph.D.)h(studen)m(t,)f(Eindho)m(v)m(en\))235
-2101 y(In)g(case)h(of)g(appro)m(v)-5 b(al,)30 b(w)m(e)h(exp)s(ect)g(to)
-g(o\013er)g(a)f(30-mon)m(ths)i(Ph.D.)e(p)s(osition)f(on)h(pro)5
-b(ject)31 b(funding.)94 2327 y Fa(Herman)i(Geuvers)g(\(Nijmegen-Eindho)
-n(ven)g(Site)h(Leader\))94 2440 y Fl(Born)c(19/05/64)94
-2553 y(Asso)s(ciate)h(Professor)f(in)f(F)-8 b(oundations)30
-b(of)h(Mathematics)g(and)f(Computer)f(Science)94 2666
-y(F)-8 b(aculteit)31 b(NWI,)g(KUN,)g(T)-8 b(o)s(erno)s(oiv)m(eld)29
-b(1,)i(6525)h(ED)f(Nijmegen,)f(NL)94 2779 y(Phone:)40
-b(+31)31 b(243)h(652603)94 2892 y(E-mail:)p Fb(herman@cs.kun.nl)235
-3005 y Fl(Herman)37 b(Geuv)m(ers)g(studied)e(Mathematics)j(at)g(the)f
-(Univ)m(ersit)m(y)f(of)h(Nijmegen)f(and)h(got)h(his)d(Ph.D.)94
-3118 y(in)d(Mathematics)j(and)f(Computer)f(Science)g(in)g(1993)i(at)g
-(the)f(same)g(Univ)m(ersit)m(y)-8 b(.)51 b(In)33 b(the)h(same)g(y)m
-(ear)h(he)94 3230 y(b)s(ecame)30 b(assistan)m(t)g(professor)f(in)g
-(computer)g(science)h(at)h(the)f(Eindho)m(v)m(en)e(Univ)m(ersit)m(y)h
-(of)h(T)-8 b(ec)m(hnology)31 b(in)94 3343 y(the)21 b(F)-8
-b(ormal)20 b(Metho)s(ds)g(group.)37 b(F)-8 b(rom)21 b(Jan)m(uary)f(1st)
-h(2000,)k(he)20 b(is)f(asso)s(ciate)j(professor)d(at)j(the)e(Departmen)
-m(t)94 3456 y(of)29 b(Computer)f(Science)g(of)h(the)g(Univ)m(ersit)m(y)
-f(of)h(Nijmegen)g(in)e(the)i(F)-8 b(oundations)29 b(group.)39
-b(He)30 b(is)d(curren)m(tly)94 3569 y(teac)m(hing)k(in)e(F)-8
-b(ormal)31 b(Languages)g(and)f(Computabilit)m(y)e(and)i(T)m(yp)s(e)f
-(Theory)-8 b(.)94 3807 y Fi(P)m(ositions)36 b(and)f(Managemen)m(t)f
-(Exp)s(erience)230 3983 y Fe(\017)46 b Fl(Resp)s(onsible)19
-b(for)i(the)g(Nijmegen-Utrec)m(h)m(t)i(site)e(of)h(the)f(EC)g(Thematic)
-g(Net)m(w)m(ork)i(\\TYPES")e(\(Com-)321 4096 y(puter)30
-b(Assisted)g(Reasoning)g(Based)h(on)f(T)m(yp)s(e)g(Theory\),)g
-(IST-1999-29001.)230 4279 y Fe(\017)46 b Fl(Presiden)m(t)40
-b(of)g(the)g(education)g(committee)h(of)f(the)h(Sub-facult)m(y)e(of)h
-(Computer)f(Science)h(at)h(the)321 4392 y(Univ)m(ersit)m(y)30
-b(of)g(Nijmegen.)230 4575 y Fe(\017)46 b Fl(F)-8 b(ormer)32
-b(mem)m(b)s(er)f(of)h(the)f(Managemen)m(t)j(Board)d(of)h(the)g(Dutc)m
-(h)g(researc)m(h)g(sc)m(ho)s(ol)f(IP)-8 b(A)32 b(\(Institute)321
-4688 y(for)e(Programming)g(Researc)m(h)h(and)f(Algorithmics\).)94
-4926 y Fi(Researc)m(h)g(In)m(terests)90 b Fl(The)25 b(researc)m(h)h(in)
-m(terests)f(of)g(Herman)g(Geuv)m(ers)h(are:)38 b(F)-8
-b(ormalization)25 b(of)g(Math-)94 5039 y(ematics,)38
-b(In)m(teractiv)m(e)f(Theorem)e(Pro)m(ving,)i(Higher-order)e(Logics,)j
-(Comm)m(unicating)c(F)-8 b(ormal)36 b(Mathe-)94 5152
-y(matics,)g(T)m(yp)s(e)e(Theory)g(and)f Fc(\025)p Fl(-calculus.)52
-b(His)34 b(recen)m(t)h(scien)m(ti\014c)f(activities)g(range)h(from)f
-(the)h(study)e(of)94 5265 y(formal)40 b(theories)g(\(esp)s(ecially)f(t)
-m(yp)s(ed)h Fc(\025)p Fl(-calculi\))g(to)h(doing)f(large)g(theory)h
-(dev)m(elopmen)m(ts)g(in)e(theorem)94 5378 y(pro)m(v)m(ers,)31
-b(notably)f(the)g(formalization)g(of)g(the)h(fundamen)m(tal)e(theorem)i
-(of)f(algebra)h(in)e(Co)s(q.)p eop
-%%Page: 45 45
-45 44 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(45)94 171 y Fi(Selected)35 b(Publications)230 343
-y Fe(\017)46 b Fl(H.)25 b(Geuv)m(ers,)i(E.)e(Barendsen,)g(Some)g
-(logical)f(and)g(syn)m(tactical)i(observ)-5 b(ations)24
-b(concerning)g(the)h(\014rst)321 456 y(order)30 b(dep)s(enden)m(t)g(t)m
-(yp)s(e)g(system)h(lam)m(b)s(da)e(P)-8 b(,)31 b Fd(Mathematic)-5
-b(al)35 b(Structur)-5 b(es)34 b(in)e(Computer)i(Scienc)-5
-b(e)p Fl(,)321 569 y(v)m(ol.)31 b(9-4,)h(1999,)g(pp.)e(335)h({)g(360)
-230 750 y Fe(\017)46 b Fl(H.)28 b(Geuv)m(ers,)h(F.)f(Wiedijk,)f(J.)g
-(Zw)m(anen)m(burg,)g(Equational)g(Reasoning)g(via)g(P)m(artial)g
-(Re\015ection,)i(in)321 863 y Fd(The)-5 b(or)g(em)39
-b(Pr)-5 b(oving)36 b(for)h(Higher)g(Or)-5 b(der)37 b(L)-5
-b(o)g(gics,)38 b(TPHOL)d(2000)p Fl(,)j(P)m(ortland)c(OR,)g(USA,)g(eds.)
-h(M.)321 976 y(Aagaard)d(and)d(J.)i(Harrison,)e(LNCS)h(1869,)i(pp.)e
-(162)h({)g(178.)230 1157 y Fe(\017)46 b Fl(M.)37 b(Oostdijk)e(and)h(H.)
-h(Geuv)m(ers,)h(Pro)s(of)e(b)m(y)h(Computation)e(in)g(the)i(Co)s(q)f
-(system,)i(to)f(app)s(ear)f(in)321 1270 y Fd(The)-5 b(or)g(etic)g(al)35
-b(Computer)f(Scienc)-5 b(e)p Fl(,)31 b(2001.)230 1451
-y Fe(\017)46 b Fl(H.)c(Barendregt)g(and)f(H.)h(Geuv)m(ers,)j(Pro)s(of)c
-(Assistan)m(ts)g(using)f(Dep)s(enden)m(t)i(T)m(yp)s(e)f(Systems,)j(to)
-321 1564 y(app)s(ear)29 b(as)h(a)f(c)m(hapter)h(of)g(the)f
-Fd(Handb)-5 b(o)g(ok)34 b(of)e(A)n(utomate)-5 b(d)33
-b(R)-5 b(e)g(asoning)p Fl(,)31 b(eds.)f(A.)f(Robinson)f(and)h(A.)321
-1677 y(V)-8 b(oronk)m(o)m(v,)33 b(Elsevier)c(2001.)230
-1859 y Fe(\017)46 b Fl(P)-8 b(.A.M.)41 b(Seuren,)e(V.)h(Capretta)f(and)
-f(H.)h(Geuv)m(ers,)j(The)c(logic)h(and)f(mathematics)h(of)g(o)s
-(ccasion)321 1971 y(sen)m(tences,)32 b(to)f(app)s(ear)f(in)f(the)h
-Fd(Journal)k(of)f(Linguistics)f(and)i(Philosophy)p Fl(,)f(2001.)94
-2212 y Fg(A.5)112 b(MPG)37 b(&)h(TU)f(Berlin)94 2384
-y Fi(A.5.1)105 b(Max)35 b(Planc)m(k)h(Institute)e(for)h(Gra)m
-(vitational)g(Ph)m(ysics)94 2555 y Fl(Alb)s(ert)29 b(Einstein)f
-(Institute)94 2668 y(Am)i(M)s(\177)-48 b(uhlen)m(b)s(erg)29
-b(1)94 2781 y(14476)k(Golm,)d(German)m(y)94 2894 y(h)m
-(ttp://www.aei.mpg.de)94 3120 y(Since)42 b(1998)i(the)f(Max)g(Planc)m
-(k)g(Institute)f(for)h(Gra)m(vitational)f(Ph)m(ysics,)k(whic)m(h)41
-b(is)h(dev)m(oted)i(to)f(basic)94 3233 y(researc)m(h)33
-b(in)d(relativit)m(y)-8 b(,)32 b(publishes)d(one)j(of)g(the)g(most)g
-(inno)m(v)-5 b(ativ)m(e)32 b(electronic)g(science)g(journals,)f
-Fd(Living)94 3346 y(R)-5 b(eviews)34 b(in)g(R)-5 b(elativity)32
-b Fl(\(h)m(ttp://www.livingreviews.org\).)43 b(Its)31
-b(mission)f(is)g(to)i(build)d(the)i(journal)f(in)m(to)94
-3458 y(a)36 b(primary)d(reference)j(p)s(oin)m(t)e(in)g(the)h(\014eld,)h
-(exploiting)d(new)i(and)g(cutting)g(edge)h(W)-8 b(eb)36
-b(tec)m(hnologies)g(to)94 3571 y(maximise)25 b(use,)i(transparency)-8
-b(,)28 b(and)e(depth)g(of)g(the)h(information)e(pro)m(vided.)38
-b(The)26 b(Institute)g(has)g(a)h(n)m(um-)94 3684 y(b)s(er)i(of)h
-(sta\013)h(who)e(are)h(exceptionally)f(skilled)f(in)h(computing,)g(and)
-g(man)m(y)h(of)g(them)g(con)m(tributed)f(to)i(the)94
-3797 y(dev)m(elopmen)m(t)26 b(of)g(soft)m(w)m(are)h(that)g(has)e(made)h
-(the)g(journal's)f(W)-8 b(eb)26 b(site)g(one)g(of)g(the)g(most)g(adv)-5
-b(anced)26 b(in)e(the)94 3910 y(w)m(orld)32 b(of)h(electronic)g
-(publishing.)44 b(F)-8 b(urther)33 b(bac)m(kground)g(information)e(on)i
-(the)g(journal)f(can)h(b)s(e)g(found)94 4023 y(at)28
-b(h)m(ttp://www.livingreviews.org/Pro)5 b(ject/index.h)m(tml.)38
-b(F)-8 b(ast)29 b(and)e(e\013ectiv)m(e)i(in)m(ternational)e(dissem-)94
-4136 y(ination)k(of)i(the)f(W)-8 b(eb)34 b(journal)d(is)g(pro)m(vided)g
-(b)m(y)h(the)h(Europ)s(ean)e(Mathematical)j(So)s(ciet)m(y's)e
-(Information)94 4249 y(Service,)e(whic)m(h)f(main)m(tains)g(a)i(net)m
-(w)m(ork)g(of)g(more)f(than)h(30)g(mirror)d(serv)m(ers)j(w)m(orldwide.)
-94 4475 y(The)40 b(Institute)f(has)h(close)h(connections)f(to)h(the)g
-(newly)e(founded)g(Cen)m(ter)h(for)g(Information)g(Manage-)94
-4588 y(men)m(t)35 b(of)g(the)g(Max)g(Planc)m(k)f(So)s(ciet)m(y)h(that)g
-(will)d(act)k(as)f(a)g(cen)m(tral)g(service)f(to)h(the)g(more)g(than)f
-(80)i(Max)94 4700 y(Planc)m(k)23 b(Institutes,)h(to)g(impro)m(v)m(e)f
-(their)g(abilit)m(y)f(to)i(access)g(and)f(to)h(publish)19
-b(information)j(on)h(the)h(In)m(ternet.)94 4813 y(It)32
-b(is)f(further)g(co)s(op)s(erating)h(with)f(the)h(leading)f(Europ)s
-(ean)g(publisher)e(of)j(original)e(researc)m(h)j(in)e(gra)m(vita-)94
-4926 y(tional)c(ph)m(ysics,)g(the)h(Institute)e(of)i(Ph)m(ysics)f
-(Publishing)c(\(Bristol,)28 b(UK\))g(with)e(its)h(journal)f
-Fd(Classic)-5 b(al)31 b(and)94 5039 y(Quantum)i(R)-5
-b(elativity)p Fl(.)94 5152 y(The)43 b(Max)h(Planc)m(k)f(Institute)g
-(for)g(Gra)m(vitational)h(Ph)m(ysics)f(will)d(join)j(forces)h(with)e
-(Professor)h(Bernd)94 5265 y(W)-8 b(egner)35 b(at)g(the)f(T)-8
-b(ec)m(hnical)33 b(Univ)m(ersit)m(y)h(in)e(Berlin.)50
-b(Both)34 b(parties)g(are)g(curren)m(tly)f(co)s(op)s(erating)h(in)e
-(the)94 5378 y(dissemination)c(and)h(mirroring)f(of)j(electronic)f
-(journals)f(lik)m(e)h Fd(Living)i(R)-5 b(eviews)33 b(in)f(R)-5
-b(elativity)p Fl(.)p eop
-%%Page: 46 46
-46 45 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(46)94 171 y Fi(T)-9 b(ec)m(hnical)36 b(Con)m(tributors)30
-b Fl(P)m(eople)h(in)m(v)m(olv)m(ed)f(in)f(the)i(pro)5
-b(ject)30 b(are:)230 346 y Fe(\017)46 b Fl(Bernard)30
-b(Sc)m(h)m(utz)h(\(Institute)f(Director)h(and)f(Editor-in-Chief)7
-b(\))230 529 y Fe(\017)46 b Fl(Ian)30 b(Kelley)g(\(Programmer\))230
-712 y Fe(\017)46 b Fl(N.N.)31 b(\(Ph.D.)g(Studen)m(ts)f(and)g(P)m
-(ost-Do)s(cs\))235 887 y(In)g(case)h(of)g(appro)m(v)-5
-b(al)30 b(w)m(e)g(exp)s(ect)h(to)g(o\013er)g(a)g(full)d(scien)m
-(ti\014c)i(programmer)g(p)s(osition)e(for)i(a)h(p)s(erio)s(d)d(of)94
-1000 y(2-y)m(ears.)235 1225 y(Prof.)50 b(Bernard)33 b(Sc)m(h)m(utz)h
-(\(b)s(orn)e(in)g(1946)j(in)e(the)g(USA\))h(is)e(director)h(of)h(the)g
-(Max)g(Planc)m(k)f(Institute)94 1338 y(for)41 b(Gra)m(vitational)h(Ph)m
-(ysics)f(\(Alb)s(ert)f(Einstein)g(Institute\),)k(heading)c(the)i
-(Astroph)m(ysical)f(Relativit)m(y)94 1451 y(Division)d(of)j(the)f
-(Institute,)i(and)e(Professor)g(at)h(Cardi\013)e(Univ)m(ersit)m(y)-8
-b(.)70 b(In)39 b(ac)m(kno)m(wledgemen)m(t)k(of)d(pio-)94
-1564 y(neering)d(scien)m(ti\014c)h(w)m(ork)h(in)e(gra)m(vitational)i
-(ph)m(ysics)e(he)h(has)g(b)s(een)g(elected)h(F)-8 b(ello)m(w)39
-b(of)f(the)h(American)94 1677 y(Ph)m(ysical)28 b(So)s(ciet)m(y)-8
-b(.)41 b(He)30 b(in)m(v)m(en)m(ted)f(the)h(\\Living)d(Reviews")i
-(concept)i(in)c(1996)k(and)e(acts)h(as)f(the)h(journal's)94
-1790 y(Editor-in-c)m(hief.)42 b(Bernard)30 b(Sc)m(h)m(utz)i(has)f(serv)
-m(ed)h(on)f(the)g(Editorial)e(Board)j(of)f Fd(Classic)-5
-b(al)36 b(and)e(Quantum)94 1903 y(Gr)-5 b(avity)27 b
-Fl(b)s(et)m(w)m(een)f(1988)h(and)e(1990,)k(and)c(since)g(1998)i(is)e
-(mem)m(b)s(er)g(of)g(the)h(Editorial)e(Board)h(of)h(the)g(mono-)94
-2016 y(graph)f(series)g(Studies)f(In)h(High)g(Energy)h(Ph)m(ysics,)g
-(Cosmology)g(and)f(Gra)m(vitation)h(\(Institute)f(of)h(Ph)m(ysics)94
-2129 y(Publishing,)h(Bristol,)i(UK\).)230 2326 y Fe(\017)46
-b Fl(Sc)m(h)m(utz,)35 b(B.F.)f Fd(A)h(First)h(Course)f(in)g(Gener)-5
-b(al)37 b(R)-5 b(elativity)p Fl(.)50 b(Cam)m(bridge)32
-b(Univ)m(ersit)m(y)h(Press,)g(Cam-)321 2439 y(bridge)c(\(1985\).)230
-2622 y Fe(\017)46 b Fl(Sc)m(h)m(utz,)26 b(B.F.)e Fd(Ge)-5
-b(ometric)g(al)29 b(metho)-5 b(ds)28 b(of)e(mathematic)-5
-b(al)29 b(physics)p Fl(.)40 b(Cam)m(bridge)22 b(Univ)m(ersit)m(y)h
-(Press,)321 2735 y(Cam)m(bridge,)30 b(\(1980\).)230 2917
-y Fe(\017)46 b Fl(Wheary)-8 b(,)39 b(J.,)f(and)d(Sc)m(h)m(utz,)j(B.)f
-Fd(Making)h(an)g(Ele)-5 b(ctr)g(onic)39 b(Journal)g(Live)p
-Fl(.)57 b(Journal)35 b(of)h(Electronic)321 3030 y(Publishing,)19
-b(v)m(ol.3,)k(is.)36 b(1,)23 b(Septem)m(b)s(er)d(\(1997\).)40
-b(\(h)m(ttp://www.press.umic)m(h.edu/jep/03-01/LR.h)m(tml\))230
-3213 y Fe(\017)46 b Fl(Wheary)-8 b(,)30 b(J.;)f(Wild,)e(L.;)i(Sc)m(h)m
-(utz,)h(B.)e(F.)h(and)f(W)-8 b(eyher,)29 b(C.)f Fd(Thinking)j(and)g
-(Developing)g(Ele)-5 b(ctr)g(oni-)321 3326 y(c)g(al)5
-b(ly)p Fl(,)24 b(Journal)18 b(of)j(Electronic)e(Publishing,)g(v)m
-(ol.4,)k(is.)37 b(2,)23 b(Decem)m(b)s(er)e(\(1998\).)40
-b(\(h)m(ttp://www.press.umic)m(h.edu/jep/04-)321 3439
-y(02/wheary2.h)m(tml\))94 3676 y Fi(A.5.2)105 b(Cen)m(ter)34
-b(for)h(Information)f(Managemen)m(t)g(in)h(the)g(Max)g(Planc)m(k)h(So)s
-(ciet)m(y)94 3848 y Fl(c/o)c(Max)f(Planc)m(k)f(So)s(ciet)m(y)94
-3961 y(Hofgartenstrasse)i(8)94 4074 y(PF)f(10)g(10)g(62)94
-4187 y(D-80084)i(Munic)m(h,)d(German)m(y)94 4300 y(h)m
-(ttp://www.zim.mpg.de)g(\(not)h(y)m(et)h(a)m(v)-5 b(ailable\))94
-4525 y(The)38 b(mission)f(of)i(the)h(new)e(Cen)m(ter)h(for)g
-(Information)f(Managemen)m(t)j(of)e(the)g(Max)h(Planc)m(k)f(So)s(ciet)m
-(y)g(is)94 4638 y(to)d(allo)m(w)e(the)i(So)s(ciet)m(y)f(with)f(its)g
-(more)h(than)g(80)h(sp)s(ecialized)d(researc)m(h)j(Institutes)e(to)i(k)
-m(eep)g(pace)g(with)94 4751 y(and)c(ev)m(en)m(tually)g(pla)m(y)g(a)h
-(leadership)c(role)j(in)f(Europ)s(e)h(in)e(the)j(managemen)m(t)h(of)e
-(scien)m(ti\014c)g(information.)94 4864 y(It)i(will)d(b)s(e)i
-(sta\013ed)i(with)d(6)i(emplo)m(y)m(ees)h(and)e(start)i(op)s(erating)e
-(in)f(Septem)m(b)s(er)i(2001.)52 b(The)34 b(pro)5 b(ject)34
-b(will)94 4977 y(b)s(e)i(advised)f(b)m(y)h(a)h(commission)d(of)j(MPG)f
-(Institute)g(directors)g(and)f(Ric)m(k)i(Luce,)h(the)e(Director)h(of)f
-(the)94 5090 y(Los)30 b(Alamos)h(National)f(Lab)s(oratory's)h("Library)
-e(Without)h(W)-8 b(alls".)94 5203 y Fi(T)f(ec)m(hnical)36
-b(Con)m(tributors)230 5378 y Fe(\017)46 b Fl(Theresa)30
-b(V)-8 b(elden)30 b(\(Executiv)m(e)i(Director,)f(CIM\))p
-eop
-%%Page: 47 47
-47 46 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(47)230 171 y Fe(\017)46 b Fl(N.N.)31 b(\(T)-8 b(ec)m(hnical)31
-b(supp)s(ort\))235 359 y(Theresa)36 b(V)-8 b(elden)36
-b(\(b)s(orn)f(in)f(1970)k(in)d(German)m(y\))i(graduated)f(in)e(Ph)m
-(ysics)i(from)f(Bielefeld)g(Univ)m(er-)94 472 y(sit)m(y)c(in)f(1997)k
-(after)e(ha)m(ving)f(completed)g(a)h(diploma)d(thesis)i(on)g
-(Mathematical)i(Relativit)m(y)e(at)h(the)g(Max)94 585
-y(Planc)m(k)27 b(Institute)f(for)g(Gra)m(vitational)h(Ph)m(ysics.)39
-b(Since)26 b(1998)i(she)f(has)g(b)s(een)f(leading)f(the)i(editorial)e
-(team)94 698 y(of)34 b Fd(Living)h(R)-5 b(eviews)36 b(in)g(R)-5
-b(elativity)35 b Fl(as)f(Managing)g(Editor,)f(organizing)g(the)h
-(editorial)e(pro)s(cess)i(and)f(su-)94 811 y(p)s(ervising)28
-b(the)i(dev)m(elopmen)m(t)h(of)g(soft)m(w)m(are)g(for)f(electronic)h
-(publishing)26 b(and)j(journal)g(managemen)m(t.)94 1164
-y Fi(A.5.3)105 b(TU)35 b(Berlin)94 1335 y Fl(F)-8 b(ac)m(h)m(b)s(ereic)
-m(h)31 b(Mathematik)94 1448 y(T)-8 b(ec)m(hnisc)m(he)31
-b(Univ)m(ersitt)e(Berlin)94 1561 y(Strae)i(des)f(17.)41
-b(Juni)29 b(135)94 1674 y(D)i(-)f(10623)j(Berlin)94 1787
-y Fb(http://www.emis.de)94 2013 y Fl(The)i(group)g(at)h(TU)f(Berlin)f
-(will)e(b)s(e)j(lead)g(b)m(y)g(Prof.Dr.)56 b(Bernd)35
-b(W)-8 b(egner.)57 b(He)36 b(is)e(professor)h(for)g(math-)94
-2126 y(ematics)f(with)f(a)h(full)e(p)s(osition)f(at)k(the)f
-(mathematics)g(departmen)m(t.)52 b(Under)33 b(his)f(guidance)h(TU)h
-(Berlin)94 2238 y(is)c(partner)f(in)h(sev)m(eral)g(pro)5
-b(jects)31 b(and)f(en)m(terprises)g(dealing)f(with)g(information)g(and)
-h(comm)m(unication)g(in)94 2351 y(mathematics:)235 2464
-y(He)h(is)230 2652 y Fe(\017)46 b Fl(editor-in-c)m(hief)41
-b(of)i(Zen)m(tralblatt)f(MA)-8 b(TH,)43 b(the)g(most)g(comprehensiv)m
-(e)f(literature)f(information)321 2765 y(service)30 b(in)g
-(mathematics,)h(with)e(W)-8 b(eb)31 b(access)g(under)e(EMIS,)230
-2952 y Fe(\017)46 b Fl(mem)m(b)s(er)31 b(of)h(the)g(advisory)f(b)s
-(oard)f(for)i(MA)-8 b(THDI,)33 b(an)e(information)f(data)j(base)f(on)f
-(education)h(in)321 3065 y(mathematics,)230 3253 y Fe(\017)46
-b Fl(Scien)m(ti\014c)34 b(Co)s(ordinator)f(of)h(EMIS,)g(the)h(Europ)s
-(ean)e(Mathematical)i(Information)e(Service,)j(pro-)321
-3366 y(viding)29 b(a)h(mathematics)h(p)s(ortal)f(with)f(an)h
-(electronic)g(library)e(as)j(the)f(main)g(con)m(ten)m(t,)230
-3554 y Fe(\017)46 b Fl(leader)38 b(of)h(the)f(TU-group)g(for)g(the)g
-(EULER-pro)5 b(ject,)41 b(whic)m(h)c(has)h(dev)m(elop)s(ed)g(a)h
-(protot)m(yp)s(e)g(for)321 3666 y(an)34 b(in)m(tegrated)g(access)h(to)f
-(W)-8 b(eb-based)34 b(mathematical)g(do)s(cumen)m(ts,)h(funded)c(b)m(y)
-j(T)-8 b(elematics)34 b(for)321 3779 y(Libraries,)40
-b(and)f(supp)s(orted)f(b)m(y)i(a)g(small)e(T)-8 b(AKEUP-pro)5
-b(ject)40 b(for)g(the)g(transition)e(to)i(a)g(regular)321
-3892 y(W)-8 b(eb)31 b(service,)230 4080 y Fe(\017)46
-b Fl(Scien)m(ti\014c)38 b(Director)g(of)h(the)f(LIMES-pro)5
-b(ject)39 b(\(Large)g(Infrastructures)e(in)g(Mathematics)i(-)g(En-)321
-4193 y(hanced)30 b(Services\))h(whic)m(h)e(is)g(designed)h(to)h
-(transform)f(Zen)m(tralblatt)f(MA)-8 b(TH)32 b(in)m(to)e(Europ)s(ean)f
-(co-)321 4306 y(op)s(eration)23 b(with)f(W)-8 b(eb-based)25
-b(input)c(structures,)k(funded)c(b)m(y)j(the)g(Fifth)e(F)-8
-b(ramew)m(ork)25 b(Programme,)230 4493 y Fe(\017)46 b
-Fl(Director)38 b(of)g(the)g(ERAM-pro)5 b(ject)39 b(\(Electronic)e
-(Researc)m(h)i(Arc)m(hiv)m(e)f(in)e(Mathematics\),)41
-b(funded)321 4606 y(b)m(y)31 b(Deutsc)m(he)h(F)-8 b(orsc)m(h)m
-(ungsgemeinsc)m(haft)32 b(and)e(designed)g(to)h(build)d(up)i(a)h
-(digital)e(arc)m(hiv)m(e)i(of)g(clas-)321 4719 y(sical)h(mathematics,)h
-(capturing)e(the)h(Jahrbuc)m(h)f(ueb)s(er)g(die)g(F)-8
-b(ortsc)m(hritte)34 b(in)d(database)i(as)f(a)h(pre-)321
-4832 y(Zen)m(talblatt)d(access)i(facilit)m(y)e(to)h(the)f(arc)m(hiv)m
-(e,)230 5020 y Fe(\017)46 b Fl(Chairman)41 b(of)h(the)h(Electronic)f
-(Publishing)c(Committee)43 b(of)f(EMS)g(\(Europ)s(ean)f(Mathematical)
-321 5133 y(So)s(ciet)m(y\),)230 5320 y Fe(\017)46 b Fl(mem)m(b)s(er)30
-b(of)h(the)f(Database)i(Committee)f(of)g(the)f(EMS)p
-eop
-%%Page: 48 48
-48 47 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(48)230 171 y Fe(\017)46 b Fl(asso)s(ciated)33 b(with)d(pro)5
-b(ject)33 b(Euclid)c(\(Cornell)h(Univ)m(ersit)m(y)-8
-b(,)33 b(Ithak)-5 b(a,)33 b(U.S.A.\),)g(establishing)c(a)k(non-)321
-284 y(pro\014t)d(\(electronic\))h(publication)d(facilit)m(y)h(for)h
-(mathematics,)230 472 y Fe(\017)46 b Fl(mem)m(b)s(er)30
-b(of)h(the)f(b)s(oard)f(of)i(IWI)f(\(Institute)g(for)h(Scien)m(ti\014c)
-e(Information)g(in)g(Osnabruec)m(k\).)94 659 y(He)j(has)e(participated)
-g(with)g(one)i(or)f(more)g(talks)g(at)g(ab)s(out)g(20)h(ev)m(en)m(ts)h
-(on)e(electronic)g(information)e(and)94 772 y(comm)m(unication)24
-b(in)f(2000,)28 b(including)21 b(con)m(tinen)m(tal)k(congresses)g(in)f
-(Lisb)s(on,)f(Barcelona,)k(Rio)d(de)h(Janeiro,)94 885
-y(Ha)m(v)-5 b(anna,)38 b(Mosco)m(w,)h(and)c(Manila.)57
-b(He)36 b(has)f(b)s(een)h(elected)g(as)g(mem)m(b)s(er)f(of)h(the)g
-(scien)m(ti\014c)f(committee)94 998 y(for)f(sev)m(eral)h(conferences)g
-(on)f(the)h(sub)5 b(ject)34 b(in)f(2001:)50 b(\(Crimea,)35
-b(A)m(thens,)h(Coim)m(bra,)f(Linz,)f(Guatemala)94 1111
-y(Cit)m(y\))c(and)g(receiv)m(ed)h(in)m(vitations)e(for)h(plenary)f
-(lectures)h(at)h(additional)e(conferences.)235 1224 y(These)38
-b(activities)f(giv)m(e)h(an)g(excellen)m(t)g(bac)m(kground)f(to)i
-(organise)e(the)h(information)e(dissemination)94 1337
-y(and)30 b(exploitation)f(activities)h(for)g(the)h(pro)5
-b(ject.)94 1580 y Fg(A.6)112 b(T)-9 b(rusted)37 b(Logic)94
-1752 y Fl(Created)21 b(in)f(Jan)m(uary)h(1999,)k(TR)m(USTED)c(LOGIC)f
-(S.A.)i(is)e(a)i(frenc)m(h)e(start-up)h(compan)m(y)-8
-b(,)25 b(whic)m(h)19 b(presen)m(ts)94 1865 y(a)39 b(unique)d(com)m
-(bination)i(of)g(exp)s(ertise)g(in)f(em)m(b)s(edded)g(soft)m(w)m(are)j
-(c)m(hallenges)f(and)e(in)g(formal)h(metho)s(ds)94 1978
-y(analysis.)60 b(TR)m(USTED)37 b(LOGIC)f(o\013ers)i(a)g(wide)e(range)h
-(of)h(e\016cien)m(t)g(and)e(secure)i(solutions)d(for)i(smart)94
-2091 y(cards)24 b(and)f(terminals)g(in)f(the)j(follo)m(wing)d(areas)j
-(:)37 b(op)s(en)24 b(systems)g(for)g(smart)g(cards)f(\(Ja)m(v)-5
-b(a)26 b(Card,Windo)m(ws)94 2204 y(SmartCards,)h(Multos\),)h(op)s(en)e
-(systems)i(for)e(terminals)g(\(mobile)g(phones,)h(PD)m(A,)i(bank)d
-(terminals,)h(etc\),)94 2317 y(e-commerce,)35 b(remote)e(secured)g
-(access)g(to)g(in)m(tranets,)g(and)f(secured)g(net)m(w)m(orks)i
-(infrastructures)c(\(home)94 2429 y(or)g(car)h(con)m(trol\).)235
-2542 y(The)24 b(dev)m(elopmen)m(t)g(metho)s(dology)-8
-b(,)26 b(inside)c(T)-8 b(rusted)24 b(Logic)g(S.A.,)i(includes)c(a)i(p)s
-(ermanen)m(t)g(concern)g(of)94 2655 y(qualit)m(y)31 b(and)g(securit)m
-(y)g(asp)s(ects)h(\(formal)g(sp)s(eci\014cation)e(and)h(pro)s(ofs\))g
-(that)i(pro)m(vides)d(a)j(soft)m(w)m(are)g(whic)m(h)94
-2768 y(is)c(e\016cien)m(t,)j(reliable)c(and)i(ready)g(to)h(face)g(high)
-e(lev)m(el)i(Common)e(Criteria)g(ev)-5 b(aluations)30
-b(when)f(needed.)235 2881 y(The)i(main)g(actors)i(in)e(the)h(smart)f
-(card)h(and)f(in)g(the)h(em)m(b)s(edded)f(soft)m(w)m(are)i(industry)c
-(are)k(among)f(its)94 2994 y(customers)j(:)49 b(Sun)33
-b(Microsystems)i(Inc.,)g(Bull,)g(Gemplus,)f(Ob)s(erth)m(ur,)g(Sc)m
-(hlum)m(b)s(erger,)g(ST)g(Micro)s(elec-)94 3107 y(tronics,)39
-b(VISA)e(In)m(ternational,)j(Carte)e(Bleue,)h(GIE)f(Cartes)g
-(Bancaires,)i(ActivCard,)f(Proton)f(W)-8 b(orld)94 3220
-y(In)m(ternational,)30 b(etc.)94 3451 y Fa(Dominique)k(Bolignano)94
-3564 y Fl(Dominique)40 b(Bolignano)h(is)f(Chairman)g(and)h(Chief)f
-(Executiv)m(e)i(O\016cer)f(of)h(T)-8 b(rusted)40 b(Logic.)74
-b(He)42 b(also)94 3677 y(teac)m(hes)c(securit)m(y)f(and)f(languages)h
-(as)f(a)h(part-time)g(full)d(professor)i(\(Professeur)h(Asso)s(ci\))f
-(at)h(the)g(Uni-)94 3790 y(v)m(ersit)30 b(P)m(aris-Dauphine.)39
-b(F)-8 b(rom)31 b(1996)h(to)f(1999,)h(Dominique)d(Bolignano)h(w)m(ork)m
-(ed)g(with)f(Dy)m(ade,)j(a)f(join)m(t)94 3902 y(v)m(en)m(ture)37
-b(b)s(et)m(w)m(een)g(Bull)e(and)h(INRIA)g(\(F)-8 b(renc)m(h)37
-b(National)g(Researc)m(h)g(Institute)f(in)f(Computer)h(Science)94
-4015 y(and)42 b(Con)m(trol\),)j(as)e(Director,)j(Resp)s(onsible)39
-b(for)j(tec)m(hnology)i(transfer)e(in)f(securit)m(y)-8
-b(,)45 b(electronic)e(com-)94 4128 y(merce,)38 b(and)d(smart)g(cards,)i
-(and)e(Pro)5 b(ject)36 b(Director)g(in)e(the)i(follo)m(wing)e(areas)i
-(:)51 b(formal)35 b(v)m(eri\014cation)g(of)94 4241 y(electronic)41
-b(commerce)h(proto)s(cols)e(\(and)g(more)h(generally)f(cryptographic)g
-(proto)s(cols\),)k(ev)-5 b(aluation)40 b(or)94 4354 y(design)d(of)g
-(securit)m(y)h(arc)m(hitectures)g(\(mainly)e(for)h(secure)h(em)m(b)s
-(edded)f(systems,)j(suc)m(h)d(as)h(smart)f(cards,)94
-4467 y(pa)m(ymen)m(t)d(terminals,)e(GSM)h(phones,)g(etc.\),)j(dev)m
-(elopmen)m(t)d(of)h(highly)d(secure)i(Ja)m(v)-5 b(a)34
-b(Virtual)d(Mac)m(hines)94 4580 y(\(Bull)24 b(Odyssey)h(Ja)m(v)-5
-b(aCard,)27 b(pa)m(ymen)m(t)f(terminals\),)f(formal)g(metho)s(ds)g(for)
-g(ITSEC)f(and)h(Common)g(Crite-)94 4693 y(ria)h(securit)m(y)h(ev)-5
-b(aluations)26 b(\(participation)g(to)i(v)-5 b(arious)26
-b(securit)m(y)g(ev)-5 b(aluations)27 b(including)c(some)28
-b(on)e(smart)94 4806 y(cards)f(op)s(erating)g(systems\).)40
-b(Before)26 b(that,)i(Dominique)c(Bolignano)h(w)m(as)h(the)g(head)f(of)
-h(a)g(researc)m(h)g(group)94 4919 y(in)d(the)h(Corp)s(orate)g(Researc)m
-(h)h(Cen)m(tre)g(of)f(Bull)f(and)g(he)h(has)g(acquired,)h(from)f(1982)i
-(to)e(1996,)k(a)c(deep)g(exp)s(e-)94 5032 y(rience)k(in)f(industry)f
-(soft)m(w)m(are)j(dev)m(elopmen)m(t)g(and)f(formal)f(v)m(eri\014cation)
-h(systems)g(\(distributed)e(systems,)94 5144 y(securit)m(y)35
-b(proto)s(cols\).)57 b(Dominique)34 b(Bolignano)i(tak)m(es)h(part)e(in)
-g(the)g(Ja)m(v)-5 b(a)37 b(Card)e(F)-8 b(orum.)56 b(He)37
-b(also)e(is)g(a)94 5257 y(Mem)m(b)s(er)f(of)g(the)h(newly)e(created)i
-(IFIP)f(W)-8 b(orking)34 b(group)g(on)g(F)-8 b(oundations)34
-b(of)g(Securit)m(y)g(Analysis)e(and)94 5370 y(Design.)39
-b(He)26 b(has)g(b)s(een)f(an)h(in)m(vited)e(sp)s(eak)m(er)i(at)h
-(MFPS'98,)h(CA)-10 b(V'99,)28 b(CARI'98,)f(CIRM'98,)h(JFMM'98,)p
-eop
-%%Page: 49 49
-49 48 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533
-b Fl(49)94 171 y(R)-8 b(TCS'96,)30 b(Cartier'96,)g(F)-8
-b(emSys'97,)32 b(and)c(to)i(man)m(y)g(securit)m(y)f(or)h(formal)e
-(metho)s(ds)h(symp)s(osia)f(and)h(pre-)94 284 y(sen)m(ted)41
-b(in)m(vited)e(tutorials)h(at)i(F)-8 b(orte'98,)46 b(Cartier'96,)e(F)-8
-b(orte'93.)74 b(Dominique)39 b(Bolignano)i(also)f(acted)94
-397 y(as)35 b(a)g(PhD)g(advisor,)g(as)g(a)g(review)m(er)f(and)g(ev)-5
-b(aluator)36 b(for)e(Europ)s(ean)g(Comm)m(unit)m(y)f(programs.)54
-b(He)35 b(is)f(a)94 510 y(review)m(er)i(in)f(sev)m(eral)h(journals)e
-(\(Journal)h(of)h(Theoretical)g(Computer)f(Science)h(\(TCS\),)g(TSI,)f
-(...\))59 b(and)94 623 y(has)27 b(b)s(een)g(a)g(review)m(er)h(and/or)f
-(a)h(mem)m(b)s(er)e(of)i(the)f(Program)h(Committee)g(in)e(in)m
-(ternational)g(conferences)94 736 y(\(SESS'93,)k(FME'96,VDM)k(91)d(et)g
-(F)m(OR)-8 b(TE)31 b(92,)g(SaS'94,)g(...\))p eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/helm/mowgli/home/misc/proposal/proposal.tgz b/helm/mowgli/home/misc/proposal/proposal.tgz
deleted file mode 100644 (file)
index 50e8901..0000000
Binary files a/helm/mowgli/home/misc/proposal/proposal.tgz and /dev/null differ
diff --git a/helm/mowgli/home/style/mowgli.css b/helm/mowgli/home/style/mowgli.css
deleted file mode 100644 (file)
index 4a32870..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-
-table.menuborder {
-  background-color: #003377;
-}
-
-td.menutitle {
-  background-color: #ffeeaa;
-  color:            black;
-  font-family:      sans-serif;
-  font-weight:      bold;
-  text-align:       left;
-}
-
-td.menuentries {
-  background-color: #ccddff;
-  color:            black;
-  font-family:      sans-serif;
-  font-size:        smaller;
-  text-align:       left;
-}
-
-dl.news {
-  font-family:      sans-serif;
-}
-
-dt.news {
-  font-family:      monospace;
-  font-weight:      bold;
-}
-
-dd.news {
-  font-family:      sans-serif;
-}
-
-div.small {
-  font-size:        smaller;
-}
-
-div.center {
-  text-align:       center;
-}
-
-div.right {
-  text-align:       right;
-}
-
-body {
-  font-family:      sans-serif;
-  background-color: white;
-  color:            black;
-}
-
-body.content {
-  font-family:      sans-serif;
-  background-color: white;
-  color:            black;
-
-}
-
-a {
-  color:            #003377;
-}
-
-a:hover {
-  background-color: #ffeeaa;
-  color:            #003377;
-}
-
-a:visited {
-  color:            black;
-}
-
-table.small {
-  font-size: small
-}
-
-td.title {
-  font-family: sans-serif;
-  font-weight: bold;
-  font-size: large
-}
-
-td.top {
-  font-weight: bold;
-  font-size: x-small
-}
-
-li {
-  list-style-type: circle
-}
diff --git a/helm/mowgli/home/templates/index.html b/helm/mowgli/home/templates/index.html
deleted file mode 100644 (file)
index 7a2929c..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
-     "http://www.w3.org/TR/html4/frameset.dtd">
-
-<html>
-
-  <head>
-
-  <title>MoWGLI Home Page</title>
-
-  </head>
-
-  <frameset cols="200,*" border="0">
-    <frame name="menu" src="menu.html">
-    <frame name="content" src="home.html" marginwidth="30">
-  </frameset>
-
-</html>
diff --git a/helm/mowgli/home/templates/ml-help-example.txt b/helm/mowgli/home/templates/ml-help-example.txt
deleted file mode 100644 (file)
index 1c6ed11..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-***** help
-Help for MOWGLI-dev mailing list:
-
-This is email command help for version 1.1 of the "Mailman" list
-manager.  The following describes commands you can send to get
-information about and control your subscription to Mailman lists at
-this site.  A command can be in the subject line or in the body of the
-message.
-
-Note that much of the following can also be accomplished via the World
-Wide Web, at:
-
-    http://mowgli.cs.unibo.it/mailman/listinfo/mowgli-dev
-
-In particular, you can use the Web site to have your password sent to
-your delivery address.
-
-List specific commands (subscribe, who, etc) should be sent to the
-*-request address for the particular list, e.g. for the 'mailman'
-list, use 'mailman-request@...'.
-
-About the descriptions - words in "<>"s signify REQUIRED items and
-words in "[]" denote OPTIONAL items.  Do not include the "<>"s or
-"[]"s when you use the commands.
-
-The following commands are valid:
-
-    subscribe [password] [digest-option] [address=<address>]
-        Subscribe to the mailing list.  Your password must be given to
-        unsubscribe or change your options.  When you subscribe to the
-        list, you'll be reminded of your password periodically.
-        'digest-option' may be either: 'nodigest' or 'digest' (no
-        quotes!)  If you wish to subscribe an address other than the
-        address you send this request from, you may specify
-        "address=<email address>" (no brackets around the email
-        address, no quotes!)
-
-    unsubscribe <password> [address]
-        Unsubscribe from the mailing list.  Your password must match
-        the one you gave when you subscribed.  If you are trying to
-        unsubscribe from a different address than the one you
-subscribed
-        from, you may specify it in the 'address' field.
-
-    who
-        See everyone who is on this mailing list.
-
-    info
-        View the introductory information for this list.
-
-    lists
-        See what mailing lists are run by this Mailman server.
-
-    help
-        This message.
-
-    set <option> <on|off> <password> 
-        Turn on or off list options.  Valid options are:
-
-        ack:
-            Turn this on to receive acknowlegement mail when you send
-            mail to the list.
-
-        digest:
-            Receive mail from the list bundled together instead of one
-            post at a time.
-
-        plain:
-            Get plain-text, not MIME-compliant, digests (only if
-            digest is set)
-
-        nomail:
-            Stop delivering mail.  Useful if you plan on taking a
-            short vacation.
-
-        norcv:
-            Turn this on to NOT receive posts you send to the list.
-            Does not work if digest is set.
-
-        hide:
-            Conceals your address when people look at who is on this
-            list.
-
-
-    options
-        Show the current values of your list options.
-
-    password <oldpassword> <newpassword> 
-        Change your list password.
-    
-    end or --
-       Stop processing commands (good to do if your mailer
-automatically
-       adds a signature file - it'll save you from a lot of cruft).
-
-
-Commands should be sent to mowgli-dev-request@cs.unibo.it
-
-Questions and concerns for the attention of a person should be sent to
-
-    mowgli-dev-admin@cs.unibo.it
diff --git a/helm/mowgli/home/xml/Makefile b/helm/mowgli/home/xml/Makefile
deleted file mode 100644 (file)
index adf0b59..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-check:
-       find . -name "*.xml" -exec xmllint -valid -loaddtd -noout {} \; 2> errors
-       if [ -s errors ] ; \
-        then \
-         echo ; \
-         echo "**************************************************" ; \
-         echo "There are validity errors. Check the file \"errors\"" ; \
-         echo "**************************************************" ; \
-        else \
-         rm errors ; \
-         echo ; \
-         echo "****************************" ; \
-         echo "All the documents are valid." ; \
-         echo "****************************" ; \
-       fi
diff --git a/helm/mowgli/home/xml/consortium.xml b/helm/mowgli/home/xml/consortium.xml
deleted file mode 100644 (file)
index c21af15..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE consortium [
- <!ELEMENT consortium (site+,description)>
- <!ELEMENT site EMPTY>
- <!ATTLIST site
-           file CDATA #REQUIRED>
- <!ELEMENT description (p|dl|ul|ol)+>
-
- <!-- A subset of XHTML -->
- <!ELEMENT p (#PCDATA|em|a)*>
- <!ELEMENT em (#PCDATA)>
- <!ELEMENT a (#PCDATA)>
- <!ATTLIST a
-           href CDATA #REQUIRED>
- <!ELEMENT dl (dt|dd)+>
- <!ELEMENT dt (#PCDATA)>
- <!ELEMENT dd (#PCDATA)>
- <!ELEMENT ul (li)+>
- <!ELEMENT ol (li)+>
- <!ELEMENT li (#PCDATA)>
-]>
-
-<consortium>
- <site file="bologna"/>
- <site file="inria"/>
- <site file="dfki"/>
- <site file="nijmegen"/>
- <site file="aei"/>
- <site file="trusted-logic"/>
- <description>
-  <p>The Consortium has been built with the aim to join some essential
-     knowhow in different areas of I.T. related to the creation and
-     maintenance of a digital library of structured mathematical knowledge.</p>
-
-  <p>MOWGLI is meant to develop the technological infrastructure required to
-     integrate existing Markup languages and standards such as
-     <a href="http://www.w3.org/Math/">MathML</a>,
-     <a href="http://www.openmath.org">OpenMath</a> or
-     <a href="http://www.mathweb.org/omdoc/">OMDoc</a>,
-     covering different aspects of mathematical
-     intelligence, into a single application.
-     Expertise on these languages and the related technologies is
-     respectively provided by the following partners:</p>
-  <dl>
-   <dt>MathML</dt>
-   <dd>Department of Computer Science, University of Bologna,
-       member of the World Wide Web Consortium and of the W3C Working Group
-       on MathML; Lemme-Project at INRIA Sophia-Antipolis.</dd>
-
-   <dt>OpenMath</dt>
-   <dd>University of Eindhoven (sub-site of Nijmegen):
-       Professor Arjeh Cohen is one of the leaders of the
-       OpenMath initiative, and MOWGLI is expected to take the maximum profit
-       from the successful OpenMath Esprit project, no.24969.</dd>
-
-   <dt>OMDoc</dt>
-   <dd>DFKI. Dr.Michael Kohlhase is the main
-       auhtor of OMDoc; DFKI has a long research tradition in the management of
-       mathematical knowledge bases, metadata, searching and retrieval
-       issues.</dd>
-  </dl>
-
-  <p>More generally, the Department of Computer Science in Bologna has a
-     long experience in XML-related technology, and in particular in their
-     application to the particular domain of mathematical developments,
-     as testified by the 
-     <a href="http://www.cs.unibo.it/helm">``Hypertextual Electronic Library
-     of Mathematics'' (HELM) Project</a>. A main
-     component of HELM is the
-     <a href="http://www.cs.unibo.it/helm/mml-widget/index.html">GtkMathView
-     widget</a>, a C++ rendering engine for MathML that will be distributed as
-     an official package of the next Debian release of Linux.</p>
-
-  <p>Similarly, the Lemme Project in Sophia-Antipolis has a large experience of
-     edition of mathematical objects. It develops the graphical environment
-     Pcoq, dedicated to the development of mathematical proofs, using the
-     Coq proof assistant. Among many features, Pcoq has a sophisticated two
-     dimensional formula and natural language proof edition component,
-     allowing intuitive and powerful interactions. Built on the Figue
-     environment, Pcoq can be made compatible with MathML. The Pcoq interface
-     is intensively used by teams whose research activity concerns
-     the certification of mathematical algorithms.</p>
-
-  <p>DFKI will contribute requirements and metadata from the
-     viewpoint of educational applications including search
-     functionalities. It will actively work on presentational transformations,
-     the generation of proofs in natural language as well as on knowledge bases
-     for mathematical knowledge DFKI intends to exploit the results of the
-     MOWGLI project in pilot applications in current and planned research and
-     in projects for the prototypical implementation of intelligent
-     environments for learning of mathematics. In particular, the knowledge
-     representation for mathematics on the Web is important for such Web-based
-     systems. Knowledge bases that provide a common repository and ontology for
-     mathematical knowledge are indispensible in systems that integrate various
-     systems working on mathematical knowledge. DFKI also has a fierce interest
-     in pushing and leveraging the quality of standardisation efforts within
-     the worldwide initiative of the Semantic Web education systems and
-     electronic publishing.</p>
-
-  <p>In order to immediately dispose of a large repository of structured
-     mathematical information, the consortium comprises the developers of
-     one of the most successful proof assistant tools currently
-     available: the <a href="http://pauillac.inria.fr/coq/">Coq</a> proof
-     engine of INRIA-Rocquencourt.
-     The Coq standard library includes more than thousand lemmas and theorems
-     and the whole number of statements proved by users is evaluated to
-     hundred thousands, covering arithmetics, algebra, analysis and
-     computer science. We expect to integrate the current different ways of
-     browsing, searching and rendering Coq mathematical developments into a
-     coherent and Web-oriented architecture open to the Coq user community
-     and beyond.</p>
-
-  <p>An alternative route for the creation of content-based mathematical
-     information from standard digital repositories by means of a suitable
-     LaTeX-based authoring system will be explored by the Albert
-     Einstein Institute (AEI) in Golm (Germany). AEI publishes a solely
-     electronic review journal, <em>Living Reviews in Relativity</em> on
-     the Web, which provides refereed, regularly updated review
-     articles on all areas of gravitational physics. Since its
-     release in January 1998 the journal has become a primary
-     entry point for students, lecturers and researchers alike
-     for up-to-date information on the current status of research
-     in gravitational physics. Moving this unique repository and
-     communication forum of current physical and mathematical
-     knowledge in relativity to content mark-up, making it
-     available for semantic search, and for re-use and evaluation
-     e.g. in math algebra systems motivates the involvement
-     in the MOWGLI project. The journal will develop a
-     LaTeX based authoring tool interfacing with MOWGLI, and
-     serve as a showcase to demonstrate how content-mark-up in
-     mathematics improves the usability and information depth
-     of electronic science journals.</p>
-
-  <p>The AEI will be supported by the newly founded Center for Information
-     Management (CIM) of the Max Planck Society. The CIM has been set up
-     by the Society to support researchers and research processes in the area
-     of information management. The objectives of the project include
-     coordination of existing activities within the Society and
-     implementation of a strategy to develop electronic research archives.
-     The current Managing Editor of the AEI's electronic journal Living
-     Reviews in Relativity has been appointed executive director of the CIM
-     (starting from 1 Sep 2001) and will be in charge of the project management
-     for Tasks 4.4 and 6.3 of the proposal. The CIM will be in an
-     excellent position to promote dissemination and use of the project results
-     within the Max Planck Society. It will further give technical support to
-     the Dissemination Manager in providing the MOWGLI website.</p>
-
-  <p>Professor Wegner, Scientific Coordinator of EMIS (European
-     Mathematical Information Service), will also provide a main liaison with
-     previous and successful European Projects on digital libraries and
-     metadata, such as <a href="http://www.emis.de/projects/EULER">EULER</a>
-     and the TRIAL Solution project (\verb+http://www.trial-solution.de+).
-     In particular, all the achievements of these Projects
-     will be integrated inside MOWGLI, as far as the respective teams
-     will agree to this.
-     Moreover, in his quality of Scientific Coordinator of EMIS, member
-     of the advisory board for MATHDI, and Chairman of the Electronic
-     Publishing Committee of European
-     Mathematical Society, Professor Wegner is an excellent candidate
-     to organise the information
-     dissemination and exploitation activities for the project.</p>
-
-  <p>In particular, the Department of Computer Science of the University of
-     Nijmegen will apply MOWGLI's technologies to the development of
-     an ``electronic book'', covering a typical undergraduate course
-     in Algebra or Analysis.  The Department of Computer Science in Nijmegen
-     has a lot of experience in formal mathematics and theorem proving.
-     Notably, the group has done large theory developments in the theorem
-     prover Coq. (The <a href="http://www.cs.kun.nl/gi/projects/fta/">FTA
-     project</a>: Eindhoven University of Technology, a sub-site of Nijmegen,
-     has expertise in OpenMath and in using WWW technology for educational
-     purposes. This has resulted -- among other things -- in
-     <a href="http://www.win.tue.nl/~ida/">IDA</a>, the
-     interactive course notes in algebra where a combination of HTML
-     and applets is used to present the mathematics. Jointly, Nijmegen and
-     Eindhoven have experience in combining theorem provers and computer
-     algebra packages, notably Coq and GAP.</p>
-
-  <p>Trusted Logic (France), which is specialized in secure and
-     validated solutions for open systems, aims to present the
-     formalization and the demonstration of some security
-     properties related to the code embedded into a smart card. The presentation
-     must be in a format understandable by the company in charge of the
-     evaluation of the code and in accordance with the Common Criteria
-     standard.</p>
-  <p>A third pilot application is the semantic markup of the Journal
-     <em>Living Reviews in Relativity</em> published by AEI-Golm,
-     already mentioned above.</p>
- </description>
-</consortium>
diff --git a/helm/mowgli/home/xml/deliverables/deliverable.dtd b/helm/mowgli/home/xml/deliverables/deliverable.dtd
deleted file mode 100644 (file)
index 74478b4..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<!ELEMENT deliverable (name,working-package,leader-site,extimated-person-month,type,to-be-delivered)>
-<!ATTLIST deliverable
-          id ID #REQUIRED>
-
-<!ELEMENT name (#PCDATA)>
-
-<!ELEMENT working-package EMPTY>
-<!ATTLIST working-package
-          file CDATA #REQUIRED>
-
-<!ELEMENT leader-site EMPTY>
-<!ATTLIST leader-site
-          file CDATA #REQUIRED>
-
-<!ELEMENT extimated-person-month EMPTY>
-<!ATTLIST extimated-person-month
-          value CDATA #REQUIRED>
-
-<!ELEMENT type EMPTY>
-<!ATTLIST type
-          value (report|prototype) #REQUIRED>
-
-<!ELEMENT to-be-delivered (#PCDATA)>
diff --git a/helm/mowgli/home/xml/deliverables/distribution/d5a.xml b/helm/mowgli/home/xml/deliverables/distribution/d5a.xml
deleted file mode 100644 (file)
index 9b0f055..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D5.a">
- <name>Overall Architectural Design of the Distribution Model.</name>
- <working-package file="distribution"/>
- <leader-site file="dfki"/>
- <extimated-person-month value="11"/>
- <type value="report"/>
- <to-be-delivered>Month 18</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/distribution/d5b.xml b/helm/mowgli/home/xml/deliverables/distribution/d5b.xml
deleted file mode 100644 (file)
index d529248..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D5.b">
- <name>Advanced MOWGLI Prototype (distribution).</name>
- <working-package file="distribution"/>
- <leader-site file="dfki"/>
- <extimated-person-month value="16"/>
- <type value="prototype"/>
- <to-be-delivered>Month 24</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/information-dissemination-and-exploitation/d7a.xml b/helm/mowgli/home/xml/deliverables/information-dissemination-and-exploitation/d7a.xml
deleted file mode 100644 (file)
index 161a039..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D7.a">
- <name>Dissemination and Use Plan.</name>
- <working-package file="dissemination-and-exploitation"/>
- <leader-site file="aei"/>
- <extimated-person-month value="3"/>
- <type value="report"/>
- <to-be-delivered>Month 6</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/information-dissemination-and-exploitation/d7b.xml b/helm/mowgli/home/xml/deliverables/information-dissemination-and-exploitation/d7b.xml
deleted file mode 100644 (file)
index 8598601..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D7.b">
- <name>Technological Implementation Plan.</name>
- <working-package file="dissemination-and-exploitation"/>
- <leader-site file="aei"/>
- <extimated-person-month value="3"/>
- <type value="prototype"/>
- <to-be-delivered>Month 30</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/interfaces/d4a.xml b/helm/mowgli/home/xml/deliverables/interfaces/d4a.xml
deleted file mode 100644 (file)
index 4879050..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D4.a">
- <name>MathML Rendering/Browsing engine.</name>
- <working-package file="interfaces"/>
- <leader-site file="bologna"/>
- <extimated-person-month value="16"/>
- <type value="prototype"/>
- <to-be-delivered>Month 12</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/interfaces/d4b.xml b/helm/mowgli/home/xml/deliverables/interfaces/d4b.xml
deleted file mode 100644 (file)
index 4ae4bbf..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D4.b">
- <name>First MOWGLI Prototype (browsing, rendering and consultation).</name>
- <working-package file="interfaces"/>
- <leader-site file="inria"/>
- <extimated-person-month value="15"/>
- <type value="prototype"/>
- <to-be-delivered>Month 18</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/interfaces/d4c.xml b/helm/mowgli/home/xml/deliverables/interfaces/d4c.xml
deleted file mode 100644 (file)
index fa49711..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D4.c">
- <name>Prototype functionalities for assisted annotation.</name>
- <working-package file="interfaces"/>
- <leader-site file="bologna"/>
- <extimated-person-month value="7"/>
- <type value="prototype"/>
- <to-be-delivered>Month 18</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/interfaces/d4d.xml b/helm/mowgli/home/xml/deliverables/interfaces/d4d.xml
deleted file mode 100644 (file)
index 60eca71..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D4.d">
- <name>LaTeX-based authoring tool (first prototype).</name>
- <working-package file="interfaces"/>
- <leader-site file="aei"/>
- <extimated-person-month value="9"/>
- <type value="prototype"/>
- <to-be-delivered>Month 18</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/interfaces/d4e.xml b/helm/mowgli/home/xml/deliverables/interfaces/d4e.xml
deleted file mode 100644 (file)
index 82c6ab9..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D4.e">
- <name>Refined and extended protoype of the LaTeX-based authoring tool.</name>
- <working-package file="interfaces"/>
- <leader-site file="aei"/>
- <extimated-person-month value="8"/>
- <type value="prototype"/>
- <to-be-delivered>Month 24</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/metadata/d3a.xml b/helm/mowgli/home/xml/deliverables/metadata/d3a.xml
deleted file mode 100644 (file)
index a123da4..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D3.a">
- <name>Metadata for Mathematical Libraries.</name>
- <working-package file="metadata"/>
- <leader-site file="dfki"/>
- <extimated-person-month value="9"/>
- <type value="report"/>
- <to-be-delivered>Month 12</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/metadata/d3b.xml b/helm/mowgli/home/xml/deliverables/metadata/d3b.xml
deleted file mode 100644 (file)
index 5c95c27..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D3.b">
- <name>Metadata Model.</name>
- <working-package file="metadata"/>
- <leader-site file="dfki"/>
- <extimated-person-month value="11"/>
- <type value="report"/>
- <to-be-delivered>Month 12</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/project-management/d0a.xml b/helm/mowgli/home/xml/deliverables/project-management/d0a.xml
deleted file mode 100644 (file)
index 5d633d3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D0.a">
- <name>Self-Assesment parameters and criteria.</name>
- <working-package file="project-management"/>
- <leader-site file="bologna"/>
- <extimated-person-month value="2"/>
- <type value="report"/>
- <to-be-delivered>Month 6</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/project-management/d0b.xml b/helm/mowgli/home/xml/deliverables/project-management/d0b.xml
deleted file mode 100644 (file)
index 28deebd..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D0.b">
- <name>First Self-Assesment Report.</name>
- <working-package file="project-management"/>
- <leader-site file="bologna"/>
- <extimated-person-month value="1"/>
- <type value="report"/>
- <to-be-delivered>Month 12</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/project-management/d0c.xml b/helm/mowgli/home/xml/deliverables/project-management/d0c.xml
deleted file mode 100644 (file)
index da83343..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D0.c">
- <name>Second Self-Assesment Report.</name>
- <working-package file="project-management"/>
- <leader-site file="bologna"/>
- <extimated-person-month value="1"/>
- <type value="report"/>
- <to-be-delivered>Month 20</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/project-management/d0d.xml b/helm/mowgli/home/xml/deliverables/project-management/d0d.xml
deleted file mode 100644 (file)
index c7d0acc..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D0.d">
- <name>Final Self-Assesment Report.</name>
- <working-package file="project-management"/>
- <leader-site file="bologna"/>
- <extimated-person-month value="1"/>
- <type value="report"/>
- <to-be-delivered>Month 30</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/requirement-analysis/d1a.xml b/helm/mowgli/home/xml/deliverables/requirement-analysis/d1a.xml
deleted file mode 100644 (file)
index 02d355d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D1.a">
- <name>Preliminary Report on Application Scenarios and Requirement Analysis.</name>
- <working-package file="requirement-analysis"/>
- <leader-site file="nijmegen"/>
- <extimated-person-month value="6"/>
- <type value="report"/>
- <to-be-delivered>Month 3</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/requirement-analysis/d1b.xml b/helm/mowgli/home/xml/deliverables/requirement-analysis/d1b.xml
deleted file mode 100644 (file)
index 57e90cc..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D1.b">
- <name>Structure and Meta-Structure of Mathematical Documents.</name>
- <working-package file="requirement-analysis"/>
- <leader-site file="dfki"/>
- <extimated-person-month value="8"/>
- <type value="report"/>
- <to-be-delivered>Month 6</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/requirement-analysis/d1c.xml b/helm/mowgli/home/xml/deliverables/requirement-analysis/d1c.xml
deleted file mode 100644 (file)
index b91a870..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D1.c">
- <name>Distributed Digital Libraries: development, archiving, retrieving.</name>
- <working-package file="requirement-analysis"/>
- <leader-site file="aei"/>
- <extimated-person-month value="6"/>
- <type value="report"/>
- <to-be-delivered>Month 6</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/testing-and-validation/d6a.xml b/helm/mowgli/home/xml/deliverables/testing-and-validation/d6a.xml
deleted file mode 100644 (file)
index d2a60b7..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D6.a">
- <name>Validation 1: Education.</name>
- <working-package file="testing-and-validation"/>
- <leader-site file="nijmegen"/>
- <extimated-person-month value="16"/>
- <type value="report"/>
- <to-be-delivered>Month 30</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/testing-and-validation/d6b.xml b/helm/mowgli/home/xml/deliverables/testing-and-validation/d6b.xml
deleted file mode 100644 (file)
index fb8539b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D6.b">
- <name>Validation 2: Smart Card Security</name>
- <working-package file="testing-and-validation"/>
- <leader-site file="trusted-logic"/>
- <extimated-person-month value="9"/>
- <type value="report"/>
- <to-be-delivered>Month 30</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/testing-and-validation/d6c.xml b/helm/mowgli/home/xml/deliverables/testing-and-validation/d6c.xml
deleted file mode 100644 (file)
index 0a84000..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D6.c">
- <name>Validation 3: Journal interface.</name>
- <working-package file="testing-and-validation"/>
- <leader-site file="aei"/>
- <extimated-person-month value="14"/>
- <type value="prototype"/>
- <to-be-delivered>Month 30</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/testing-and-validation/d6d.xml b/helm/mowgli/home/xml/deliverables/testing-and-validation/d6d.xml
deleted file mode 100644 (file)
index 9980ac0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D6.d">
- <name>Final MOWGLI Prototype.</name>
- <working-package file="testing-and-validation"/>
- <leader-site file="bologna"/>
- <extimated-person-month value="12"/>
- <type value="prototype"/>
- <to-be-delivered>Month 30</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/transformation/d2a.xml b/helm/mowgli/home/xml/deliverables/transformation/d2a.xml
deleted file mode 100644 (file)
index 6e127f3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D2.a">
- <name>Exportation module.</name>
- <working-package file="transformation"/>
- <leader-site file="inria"/>
- <extimated-person-month value="4"/>
- <type value="prototype"/>
- <to-be-delivered>Month 6</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/transformation/d2b.xml b/helm/mowgli/home/xml/deliverables/transformation/d2b.xml
deleted file mode 100644 (file)
index 05b68b1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D2.b">
- <name>Document Type Descriptors.</name>
- <working-package file="transformation"/>
- <leader-site file="inria"/>
- <extimated-person-month value="2"/>
- <type value="report"/>
- <to-be-delivered>Month 12</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/transformation/d2c.xml b/helm/mowgli/home/xml/deliverables/transformation/d2c.xml
deleted file mode 100644 (file)
index e911df5..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D2.c">
- <name>Stylesheets to intermediate representation (formulae).</name>
- <working-package file="transformation"/>
- <leader-site file="bologna"/>
- <extimated-person-month value="7"/>
- <type value="prototype"/>
- <to-be-delivered>Month 12</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/transformation/d2d.xml b/helm/mowgli/home/xml/deliverables/transformation/d2d.xml
deleted file mode 100644 (file)
index c6884fb..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D2.d">
- <name>Stylesheets to intermediate representation (proofs).</name>
- <working-package file="transformation"/>
- <leader-site file="bologna"/>
- <extimated-person-month value="9"/>
- <type value="prototype"/>
- <to-be-delivered>Month 12</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/transformation/d2e.xml b/helm/mowgli/home/xml/deliverables/transformation/d2e.xml
deleted file mode 100644 (file)
index 32aacc8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D2.e">
- <name>Presentational Stylesheets (formulae).</name>
- <working-package file="transformation"/>
- <leader-site file="nijmegen"/>
- <extimated-person-month value="4"/>
- <type value="prototype"/>
- <to-be-delivered>Month 18</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/transformation/d2f.xml b/helm/mowgli/home/xml/deliverables/transformation/d2f.xml
deleted file mode 100644 (file)
index 5ee0a5f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D2.f">
- <name>Presentational Stylesheets (proofs).</name>
- <working-package file="transformation"/>
- <leader-site file="nijmegen"/>
- <extimated-person-month value="6"/>
- <type value="prototype"/>
- <to-be-delivered>Month 18</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/deliverables/transformation/d2g.xml b/helm/mowgli/home/xml/deliverables/transformation/d2g.xml
deleted file mode 100644 (file)
index 48f47c9..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE deliverable SYSTEM "../deliverable.dtd">
-
-<deliverable id="D2.g">
- <name>Tools for automatic extraction of Metadata.</name>
- <working-package file="transformation"/>
- <leader-site file="inria"/>
- <extimated-person-month value="4"/>
- <type value="prototype"/>
- <to-be-delivered>Month 18</to-be-delivered>
-</deliverable>
diff --git a/helm/mowgli/home/xml/home.xml b/helm/mowgli/home/xml/home.xml
deleted file mode 100644 (file)
index 5241961..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html SYSTEM "mowgli-xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:mowgli="http://mowgli.cs.unibo.it/website">
-
-  <head>
-    <title>MoWGLI Home Page</title>
-  </head>
-
-  <body class="content">
-      <br />
-
-      <table width="100%" border="0" cellspacing="0" cellpadding="0">
-        <tr>
-         <td align="left" valign="top">
-            <img alt="MoWGLI Logo" src="../images/mowgli_combo.gif"/>
-         </td>
-         <td align="right" valign="top">
-           <a href="http://www.cordis.lu/ist"><img border="0" alt="IST Logo" src="../images/istdrop.gif" width="200"/></a>
-         </td>
-       </tr>
-      </table>
-
-      <br />
-
-      <table width="100%" border="0" cellspacing="0" cellpadding="0">
-      <tr>
-
-      <td valign="top">
-
-      <h3>Abstract</h3>
-      
-      <p>The World Wide Web is already the largest resource of mathematical
-     knowledge, and its importance will be exponentiated by emerging display
-     technologies like
-     <a target="_top" href="http://www.w3.org/Math">MathML</a>.
-     However, almost all mathematical documents
-     available on the Web are marked up only for presentation, severely
-     crippling the potentialities for automation, interoperability,
-     sophisticated searching mechanisms, intelligent applications,
-     transformation and processing. The goal of the project is to overcome
-     these limitations, passing from a machine-readable to a
-     machine-understandable representation of the information, and developing
-     the technological infrastructure for its exploitation. MoWGLI builds on
-     previous standards for the management and publishing of mathematical
-     documents (<a target="_top" href="http://www.w3.org/Math">MathML</a>,
-     <a target="_top" href="http://www.openmath.org">OpenMath</a>,
-     <a target="_top" href="http://www.mathweb.org/omdoc/index.html">OMDoc</a>),
-     integrating them with different
-     <a target="_top" href="http://www.w3.org/XML/">XML</a> technologies
-     (<a target="_top" href="http://www.w3.org/TR/xslt">XSLT</a>,
-     <a target="_top" href="http://www.w3.org/RDF/">RDF</a>, etc).</p>
-
-      <br/>     
-      <p>For further description see 
-         <a target="content" href="project.html">Project</a>
-         in the Project Menu.</p>
-
-      </td>
-
-      <td>
-        &#x0A0;&#x0a0;&#x0a0;&#x0a0;
-      </td>
-
-      <td valign="top">
-
-      <div class="small">
-
-      <mowgli:latest-news />
-      <mowgli:approaching-deadlines />
-
-      </div>
-
-      </td>
-      </tr>
-      </table>
-
-      <br />
-
-  </body>
-
-</html>
diff --git a/helm/mowgli/home/xml/members-index.xml b/helm/mowgli/home/xml/members-index.xml
deleted file mode 100644 (file)
index 05575df..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html>
- <head>
-  <title>Members Area</title>
- </head>
- <body>
-  <h1>Members Area</h1>
-
-  This page has restricted access, so that members of the project only
-  can access its content.
-
-  <h3>Summary</h3>
-
-  <ul>
-    <li><a href="#ml">Mailing Lists</a></li>
-    <li><a href="#proposal">The Proposal</a></li>
-    <li><a href="#contract">The Contract</a></li>
-    <li><a href="#minutes">Reports of the Meetings</a></li>
-  </ul>
-  
-  <hr/>
-
-  <h2><a name="ml">Mailing Lists</a></h2>
-
-  These are mailing list provided for discussion and development on
-  the MoWGLI project. Note that all mailing list administrativia <b>MUST</b>
-  be sent to a <b>*-request</b> address, <em>never</em> to the list itself.
-  For <b>mowgli-dev@cs.unibo.it</b>, for example, send mailing list
-  requests to <b>mowgli-dev-request@cs.unibo.it</b>. Mail sent to the
-  <b>*-request</b> address must have a command word in the subject
-  header. To get information about the mailing list, use the
-  <b>help</b> command (<a href="ml-help-example.txt">here</a> is an example of a possible
-  answer to a help request).
-
-  <dl>
-    <dt>
-      <b>mowgli-dev (<a href="http://mowgli.cs.unibo.it/mailman/listinfo/mowgli-dev">Info and Subscription</a>,
-      <a href="http://mowgli.cs.unibo.it/pipermail/mowgli-dev/">Archive</a>)</b>
-    </dt>
-    <dd>
-      General development issues of the project
-    </dd>
-    <dt>
-      <b>mowgli-adm (<a href="http://mowgli.cs.unibo.it/mailman/listinfo/mowgli-adm">Info and Subscription</a>,
-      <a href="http://mowgli.cs.unibo.it/pipermail/mowgli-adm/">Archive</a>)</b>
-    </dt>
-    <dd>
-      Administrative issues
-    </dd>
-  </dl>
-
-  <hr />
-
-  <h2><a name="proposal">The Proposal</a></h2>
-
-   <p>The proposal in <a href="../../misc/proposal/mowgli.ps">PostScript</a>
-      and <a href="../../misc/proposal/mowgli.pdf">PDF</a>. The
-      <a href="../../misc/proposal/proposal.tgz">proposal sources</a> (in
-      LaTeX) and the <a href="../../misc/proposal/MOWGLI.xls">Excel forms</a>
-      are also available.</p>
-
-  <hr />
-
-  <h2><a name="contract">The Contract</a></h2>
-
-   <p><a href="../../misc/contract/mowgli-ctr-final.pdf">The contract</a> in
-       PDF. See also
-      <a href="../../misc/contract/mowgli-an1-final.pdf">the first annex </a>
-      (that is just a copy of the proposal),
-      <a href="../../misc/contract/RTD-annex2-rtd-final.pdf">the second
-      annex</a>,
-      <a href="../../misc/contract/RTD-annex3-ist-fet.pdf">the third annex</a>,
-      <a href="../../misc/contract/RTD-audit-cert-annex4.pdf">the fourth
-      annex</a> and the
-      <a href="../../misc/contract/MOWGLIfinal-for-ceto.zip">Electra Sheet</a>
-      (compressed using winzip; to be opened using Excel).</p>
-
-  <hr />
-
-  <h2><a name="minutes">Reports of the Meetings</a></h2>
-
-  <p>Reports are available for the following meetings:</p>
-  <ul>
-   <li><a href="kick-off.html">The MOWGLI Kick-Off</a></li>
-  </ul>
- </body>
-</html>
diff --git a/helm/mowgli/home/xml/members/kick-off.xml b/helm/mowgli/home/xml/members/kick-off.xml
deleted file mode 100644 (file)
index 2b8028f..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE minutes [
- <!ELEMENT minutes (about,participant*,presentation*,entry*)>
- <!ELEMENT about (#PCDATA)>
-
- <!ELEMENT entry (#PCDATA)>
- <!ATTLIST entry
-           author CDATA #IMPLIED>
-
- <!ELEMENT presentation (slides*,description)>
- <!ATTLIST presentation
-           media (blackboard|slides) #REQUIRED
-           site CDATA #REQUIRED
-           author CDATA #REQUIRED>
-
- <!ELEMENT description (#PCDATA|ul)*>
-
- <!ELEMENT slides (#PCDATA)>
- <!ATTLIST slides
-           file   CDATA #REQUIRED
-           format (PowerPoint|PS|PDF|HTML) #REQUIRED>
-
- <!ELEMENT participant (#PCDATA)>
- <!ATTLIST participant
-           site CDATA #REQUIRED
-           file CDATA #REQUIRED>
-
- <!ELEMENT ul (li*)>
-
- <!ELEMENT li (#PCDATA|ul)*>
-]>
-
-<minutes>
- <about>the Kick-Off</about>
- <participant site="bologna" file="asperti"/>
- <participant site="bologna" file="sacerdoti"/>
- <participant site="inria" file="herbelin"/>
- <participant site="inria" file="rideau"/>
- <participant site="inria" file="pottier"/>
- <participant site="inria" file="werner"/>
- <participant site="nijmegen" file="geuvers"/>
- <participant site="nijmegen" file="wiedijk"/>
- <participant site="dfki" file="moschner"/>
- <participant site="trusted-logic" file="gimenez"/>
- <participant site="aei" file="schutz"/>
- <participant site="aei" file="wegner"/>
- <participant site="aei" file="velden"/>
- <participant site="aei" file="kelley"/>
- <participant site="aei" file="weyher"/>
- <participant site="aei" file="pollney"/>
- <presentation site="bologna" author="asperti" media="blackboard">
-  <description>
-   A comparison of the aims and approaches of HELM and OpenMath.
-  </description>
- </presentation>
- <presentation site="inria" author="pottier" media="slides">
-  <slides file="kick-off/lemme2.ppt" format="PowerPoint"/>
-  <description>
-   Presentation of the work of Sophia-Antipolis: Project Lemme;
-   PCoq (an interface to the Coq system based on Aioli [for tree management],
-   PPML [a sort of stylesheet language] and Figue [rendering engine]).
-  </description>
- </presentation>
- <presentation site="inria" author="herbelin" media="slides">
-  <slides file="kick-off/MoWGLI-LogiCal.ps" format="PS"/>
-  <description>
-   Presentation of the work of Rocquencourt: Coq (proof assistant) and its
-   problems:
-   <ul>
-    <li>Classification of theories:
-     <ul>
-      <li>Actually based only on the affiliation of the author.</li>
-      <li>We should have classifications based on subject, theme, author, etc.</li>
-     </ul>
-    </li>
-    <li>Retrieving:
-     <ul>
-      <li>By pattern. Problem: the patterns (n &lt; m+1) and (n &lt;= m) are
-          differents but denote the same thing.</li>
-      <li>By isomorphisms. Problem: we can capture just a few of them.</li>
-     </ul>
-    </li>
-    <li>Proof Rendering in Natural Language: still too many detailed.
-        Views at different levels of detail can probably help.
-    </li>
-    <li>Modularity</li>
-   </ul>
-  </description>
- </presentation>
- <presentation site="nijmegen" author="geuvers" media="slides">
-  <slides file="mowgligroup.html" format="HTML"/>
-  <description>
-   Presentation of the work of Nijmegen; why Nijmegen is interested in MOWGLI;
-   planned contributions to MOWGLI.
-  </description>
- </presentation>
- <presentation site="aei" author="wegner" media="blackboard">
-  <description>
-   Presentation of the projects in which he is envolved or that he is
-   coordinating; interest in metadata; problems related to having papers
-   in electronic form. His main contribution will be providing links to
-   mathematicians.
-  </description>
- </presentation>
- <presentation site="aei" author="schutz" media="slides">
-  <slides file="kick-off/AIP_Intro.ppt" format="PowerPoint"/>
-  <description>
-   Presentation of the work done at the Max Planck Institute for Gravitational
-   Physics; presentation of Living Reviews in Relativity and expectations
-   from MOWGLI (i.e. searching, rendering, interoperability). He points out
-   how Living Reviews in  Relativity already provide a notion of versioning;
-   how hyperlinks are managed (often opening pop-ups). He finally presents
-   some data that show that on-line browsing of papers really happens.
-  </description>
- </presentation>
- <presentation site="trusted-logic" author="gimenez" media="blackboard">
-  <description>
-   Presentation of the work done at Trusted Logic. Brief introduction to
-   the Common Criteria Software: lot of documentation must be produced for
-   third (and fourth!) parties evaluation; formal evaluation is one goal
-   (not yet reached). The main problems Trusted Logic meets are:
-   <ul>
-    <li>Presentation</li>
-    <li>Managing thousands of definitions/theorems and links between them</li>
-    <li>Evaluators needs: hiding/displaying information; different views on the
-        same proofs/definitions; metadata; backpointers (which lemmas are
-        used in a theorem)</li>
-    <li>Interoperability with other software tools</li>
-    <li>Proofs mantainance</li>
-   </ul>
-   A final remark is that Trusted Logic is just interested in provability
-   (and proof-scripts) and not in proofs (i.e. lambda-terms or natural
-   language description of them).
-  </description>
- </presentation>
- <presentation site="dfki" author="moschner" media="slides">
-  <slides file="kick-off/KM2002GO.ps" format="PS">
-   about the "Usability of MBase for MOWGLI"
-  </slides>
-  <slides file="kick-off/KM2002GO_mathweb.ps" format="PS"/>
-  <description>
-   Presentation of the work done at DFKI. Contributions to MOWGLI: OMDoc
-   (to encode mathematical documents) and/or MBase (to distribute mathematical
-   documents) and metadata.
-  </description>
- </presentation>
- <entry author="aei/wegner">
-  Whenever someone is going to make a talk, he must report this to him.
- </entry>
- <entry>
-  To reach an agreement on the consortium agreement, Trusted Logic will
-  send a completely filled-in, light version of the agreement to everybody.
-  If the agreement will not satisfy everybody up to minor modifications,
-  we will go for the heavy proposal.
- </entry>
- <entry author="nijmegen/geuvers">
-  The members of the PCC are responsible to communicate the name of the
-  site responsible for every WP.
- </entry>
- <entry>
-  There will be two mailing lists. The first one (for everybody) is
-  the one already created. The second one will be an administrative
-  mailing list.
- </entry>
- <entry>
-  All the meetings have already been scheduled: the first one will be held
-  in Nijmegen from the 17th to the 19th of July. The others will be
-  in Bertinoro (just after MKM03), Sophia (October 2003), Saarbrucken
-  and Paris.
- </entry>
- <entry author="trusted-logic/gimenez">
-  It will be simpler to have PCC meetings by phones.
- </entry>
- <entry author="aei/wegner">
-  During the plenary meetings, sub-meetings will be organized to discuss
-  technical details.
- </entry>
- <entry author="bologna/asperti">
-  Every Package Leader must submit a contribution to the deliverable 0.a.
- </entry>
- <entry author="aei/wegner">
-  It is better to use a task-force of external experts to comment on
-  deliverable 1.a.
- </entry>
- <entry author="aei/wegner">
-  The set of requirements must be ordered by importance (useful if some of
-  them are not fulfilled).
- </entry>
- <entry>
-  A long discussion on the topic of deliverable 1.c showed that there is
-  some mismatch in the vocabulary of the participants.
- </entry>
- <entry author="bologna/asperti">
-  The choice between MathML and OpenMath is quite difficult, because
-  there are really no strong pro and cons in favor or against any of them.
- </entry>
- <entry author="aei/schutz">
-  Maybe not having browsers supporting MathML is not a huge problem.
- </entry>
-</minutes>
diff --git a/helm/mowgli/home/xml/menu.xml b/helm/mowgli/home/xml/menu.xml
deleted file mode 100644 (file)
index 60431f4..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0"?>
-<!--
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
- "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
--->
-
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:mowgli="http://mowgli.cs.unibo.it/website">
-
-  <head>
-    <title>MoWGLI Menu</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-    <link rel="stylesheet" href="../style/mowgli.css" type="text/css"/>
-  </head>
-
-  <body>
-
-  <table class="menuborder" width="100%" border="0" cellspacing="0" cellpadding="0">
-  <tr><td>
-  <table class="menusect" width="100%" border="0" cellspacing="1" cellpadding="3">
-  <tr>
-    <td class="menutitle">Project</td>
-  </tr>
-  <tr>
-    <td class="menuentries">
-      <table width="100%" border="0">
-      <tr><td><a class="menulink" target="content" href="home.html">Home</a></td></tr>
-      <tr><td><a class="menulink" target="content" href="consortium.html">Consortium</a></td></tr>
-      <tr><td><a class="menulink" target="content" href="people-list.html">People</a></td></tr>
-      <tr><td><a class="menulink" target="content" href="project.html">Project</a></td></tr>
-      <tr><td><a class="menulink" target="content" href="work-packages/index.html">Work Packages</a></td></tr>
-      <tr><td><a class="menulink" target="content" href="mowgli-events.html">MoWGLI Events</a></td></tr>
-      <tr><td><a class="menulink" target="content" href="other-events.html">Other Events</a></td></tr>
-      <tr><td><a class="menulink" target="content" href="news.html">News Archive</a></td></tr>
-      <tr><td><a class="menulink" target="content" href="members/index.html">Members Area</a></td></tr>
-      <tr><td><a class="menulink" target="content" href="publications/index.html">Publications</a></td></tr>
-      <tr><td><a class="menulink" target="content" href="software/index.html">Software</a> (<a class="menulink" target="content" href="software/index.html">CVS</a>)</td></tr>
-      </table>
-    </td>
-  </tr>
-  <tr>
-    <td class="menutitle">Related</td>
-  </tr>
-  <tr>
-    <td class="menuentries">
-      <table width="100%" border="0">
-      <tr><td><a class="menulink" target="_top" href="http://www.cs.unibo.it/helm">HELM</a></td></tr>
-      <tr><td><a class="menulink" target="_top" href="http://www.activemath.org">ActiveMath</a></td></tr>
-      <tr><td><a class="menulink" target="_top" href="http://www.w3.org/Math">MathML</a></td></tr>
-      <tr><td><a class="menulink" target="_top" href="http://www.openmath.org">OpenMath</a></td></tr>
-      <tr><td><a class="menulink" target="_top" href="http://www.mathweb.org/omdoc/index.html">OMDoc</a></td></tr>
-      <tr><td><a class="menulink" target="content" href="publications/index.html#related">Bibliography</a></td></tr>
-      </table>
-    </td>
-  </tr>
-  <!--
-  <tr>
-    <td class="menutitle">Technologies</td>
-  </tr>
-  <tr>
-    <td class="menuentries">
-      <table width="100%" border="0">
-      <tr><td>
-        <a class="menulink" target="_top" href="">SGML</a>,
-        <a class="menulink" target="_top" href="">HTML</a>,
-        <a class="menulink" target="_top" href="">CSS</a>
-      </td></tr>
-      <tr><td>
-        <a class="menulink" target="_top" href="">XML</a>,
-        <a class="menulink" target="_top" href="">XSL</a>,
-        <a class="menulink" target="_top" href="">MathML</a>,
-        <a class="menulink" target="_top" href="">SVG</a>
-      </td></tr>
-      <tr><td><a class="menulink" target="_top" href="">DOM</a></td></tr>
-      </table>
-    </td>
-  </tr>
-  -->
-
-  <tr><td class="menutitle">Contact</td></tr>
-
-  <tr>
-    <td class="menuentries">
-      <table width="100%" border="0">
-        <tr>
-         <td><div class="small">Project Leader:</div></td>
-       </tr>
-        <tr>
-         <td><div class="small"><a href="people/bologna/asperti.html" target="content">Prof. Andrea Asperti</a></div></td>
-       </tr>
-        <tr>
-         <td><div class="small">Webmaster:</div></td>
-       </tr>
-        <tr>
-         <td><div class="small"><a href="mailto:mowgli-webmaster@cs.unibo.it">mowgli-webmaster@cs.unibo.it</a></div></td>
-       </tr>
-      </table>
-    </td>
-  </tr>
-  </table>
-  </td></tr>
-  </table>
-
-  <div class="center">
-    <div class="small">
-      <mowgli:change-frame-settings/>
-    </div>
-  </div>
-
-  </body>
-
-</html>
diff --git a/helm/mowgli/home/xml/mowgli-events.xml b/helm/mowgli/home/xml/mowgli-events.xml
deleted file mode 100644 (file)
index ff36320..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE events [
- <!ELEMENT events (event*)>
- <!ELEMENT event (name,url,description?,where?,when?,deadline*)>
- <!ELEMENT name (#PCDATA)>
- <!ELEMENT url (#PCDATA)>
- <!ELEMENT description (#PCDATA)>
- <!ELEMENT where (#PCDATA)>
- <!ELEMENT when (begin,end)>
- <!ELEMENT begin (#PCDATA)>
- <!ELEMENT end (#PCDATA)>
- <!ELEMENT deadline (description,date)>
- <!ATTLIST deadline
-           kind (submission|notification|registration|camera-ready) #REQUIRED>
- <!ELEMENT date (#PCDATA)>
-]>
-
-<events>
- <event>
-  <name>MOWGLI Kick-Off</name>
-  <url>mowgli-events/kick-off.html</url>
-  <where>Max Planck Institute for Gravitational Physics / Albert Einstein Institute in Golm near Potsdam.</where>
-  <when>
-   <begin>20020315</begin>
-   <end>20020315</end>
-  </when>
- </event>
-</events>
diff --git a/helm/mowgli/home/xml/mowgli-events/kick-off.xml b/helm/mowgli/home/xml/mowgli-events/kick-off.xml
deleted file mode 100644 (file)
index ac56278..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html>
- <head>
-   <title>MOWGLI Kick-Off</title>
- </head>
- <body>
-  <h1>MOWGLI Kick-Off</h1>
-  <h2>VENUE</h2>
-  <p>The meeting will be held on Friday, 15 March 2002 at the
-     <a href="http://www.aei-potsdam.mpg.de">Max Planck
-     Institute for Gravitational Physics / Albert Einstein Institute</a>
-     in Golm near Potsdam. The institute can
-     be easily reached from Berlin via public transport or car. Please check
-     <a href="http://www.aei-potsdam.mpg.de/people/directions">our institute's
-     homepage</a> for maps and information how to reach the institute from
-     several destinations in Berlin.</p>
-
-  <h2>ACCOMODATION</h2>
-  <p>Accomodation can be arranged in a hotel nearby, within walking distance
-     from the institute (singles 62 Euro, doubles 86 Euro). Since the
-     reservation needs to be made very soon, please let me know how many
-     people are attending from your node, indicating day of arrival and day
-     of departure. A copy of this message should be sent to
-     <a href="mailto:ute@aei-potsdam.mpg.de">Mrs. Ute
-     Schlichting</a>, who is taking care of the
-     reservations. However, if you prefer to organize a stay in Berlin, you
-     may want to refer to one of the following links</p>
-
-  <ul>
-   <li><a href="http://berlin.hotelguide.net">Berlin HotelGuide Network</a></li>
-   <li><a href="http://www.berlin.de/home/English">Tourist Information Berlin</a></li>
-   <li><a href="http://www.berlin-info.de/english/hotels/index.html">Berlin
-       Info</a></li>
-  </ul>
-
-  <h2>AGENDA &amp; SOCIAL EVENTS</h2>
-  <p>This is the current tentative agenda:</p>
-  <table>
-   <tr>
-    <td style="text-align: right">9:25</td><td>-</td><td>9:30</td>
-    <td style="font-weight: bold">Welcome.</td>
-   </tr>
-   <tr>
-    <td style="text-align: right">9:30</td><td>-</td><td>11:00</td>
-    <td style="font-weight: bold">Short presentation of the partners (15 m. each).</td>
-   </tr>
-   <tr>
-    <td>11:00</td><td>-</td><td>11:30</td>
-    <td style="font-weight: bold">Coffee break.</td>
-   </tr>
-   <tr>
-    <td>11:30</td><td>-</td><td>11:40</td>
-    <td style="font-weight: bold">Consortium Agreement.</td>
-   </tr>
-   <tr>
-    <td>11:40</td><td>-</td><td>12:10</td>
-    <td style="font-weight: bold">Project Roles and Bodies.</td>
-   </tr>
-   <tr>
-    <td>12:10</td><td>-</td><td>12:30</td>
-    <td style="font-weight: bold">Scheduling and location of the meetings.</td>
-   </tr>
-   <tr>
-    <td>&#x0A0;</td>
-    <td>&#x0A0;</td>
-    <td>&#x0A0;</td>
-    <td>&#x0A0;</td>
-   </tr>
-   <tr>
-    <td>12:30</td><td>-</td><td>14:00</td>
-    <td style="font-weight: bold">Lunch.</td>
-   </tr>
-   <tr>
-    <td>&#x0A0;</td>
-    <td>&#x0A0;</td>
-    <td>&#x0A0;</td>
-    <td>&#x0A0;</td>
-   </tr>
-   <tr>
-    <td>14:00</td><td>-</td><td>15:30</td>
-    <td style="font-weight: bold">Deliverables for the first six months.</td>
-   </tr>
-   <tr>
-    <td>15:30</td><td>-</td><td>16:00</td>
-    <td style="font-weight: bold">Coffee  break</td>
-   </tr>
-   <tr>
-    <td>16:00</td><td>-</td><td>17:00</td>
-    <td style="font-weight: bold">MOWGLI web site (demo and discussion)</td>
-   </tr>
-  </table>
-  <p>This is a brief explanation of some of the topics we should discuss:</p>
-  <ul>
-   <li><span style="font-weight: bold">short presentation of the partners
-       (15 m. each).</span></li>
-   <li><span style="font-weight: bold">Consortium Agreement.</span>
-       I will send you a draft asap, and we may
-       discuss possible amendments by email; it would be nice to have it
-       signed for the kick-off.
-       This point should take almost no time, unless there are major
-       issue - e.g on copyrights or background proprietary technologies
-       which have not been solved by email)</li>
-   <li><span style="font-weight: bold">Project Roles and Bodies.</span>
-       We should define
-       <ol>
-        <li>Roles:
-         <ul>
-          <li>Project Manager (that should be Prof. Andrea Asperti)</li>
-          <li>Eploitation and Dissemination Manager (that should be Bernd)</li>
-          <li>Work-package leaders (the leader should belong to the site
-              responsible of the Work-package)</li>
-         </ul>
-        </li>
-        <li>Bodies:
-         <ul>
-          <li>Project Coordination Committee (PCC) one for each site + the
-              Project Manager (and the EDM ?)</li>
-          <li>Project Dissemination Board
-              one for each site + the EDM (and the PM?)</li>
-          <li>Workpackage teams (even for WP0)</li>
-         </ul>
-        </li>
-       </ol>
-       We can fix all the roles by email, if you agree. We shall set
-       up specialized mailing lists for each body (if required).
-       Of course the roles may largely overlap, but in any case we need
-       people who can promtly react. You may already start sending me the
-       relevant information (comprising email, telephone, etc.).</li>
-   <li><span style="font-weight: bold">Scheduling and location of the first
-       and the second meeting.</span>
-       The second meeting (and annual review) should be in Bologna
-       from February 19 to February 20 (just after MKM 2003).
-       Since KUN is responsible for WP1, I would suggest to do the
-       first meeting in Nijmegen (july/august)</li>
-   <li><span style="font-weight: bold">Deliverables for the first six
-       months.</span>
-       We have three kinds of deliverables:
-       <ol>
-        <li><span style="font-weight: bold">Technical:</span>
-            1.a, 1.b, 1.c, 2.a (1.3 should be ready at month 3).<br />
-
-            The only software here is the exportation module 2.a (that will
-            require some joint effort between Bologna and Rocquencourt and
-            a sufficiently stable version of COQ). This is a point to be
-            discussed in the kick-off.</li>
-        <li><span style="font-weight: bold">Managemant:</span>
-            0.a (self assesment parameters and criteria)</li>
-        <li><span style="font-weight: bold">Dissemination:</span>
-            7.a (Dissemination and use plan).</li>
-       </ol>
-       I would expect each site responsible for the deliverable suggest
-       a procedure and a precise scheduling for collecting material,
-       distributing the work and preparing the draft.
-       The draft should be ready some time (15 days?) before the deadline,
-       to get approval by the PCC.
-       We should also probably agree on the format of these deliverables
-       (e.g. LaTeX).
-
-       Any other technical issue relative to the preparation of these
-       deliverables should be discussed during the Kick-off.</li>
-   <li><span style="font-weight: bold">MOWGLI web site.</span>
-        We are setting up the MOWGLI web site and a CVS repository.
-        We plan to have a first prototype for the kick-off, and we may discuss
-        its design and functionalities there. We could possibly need a few
-        administrative document to grant you an access to the CVS repository
-        (we have to check).</li>
-  </ul>
-
-  <h2>TECHNICAL FACILITIES</h2>
-  <p>Full network access is provided, as well as the usual presentation
-     facilities (Video Projector, Overhead projector).</p>
-
-  <br />
-
-  <p>For further informations on the organization, please contact
-     <a href="mailto:EditorLR@aei-potsdam.mpg.de">Christina Weyher</a>.<br />
-     For further informations on the agenda, please contact
-     <a href="../people/bologna/asperti.html">Prof. Andrea Asperti</a>.</p>
- </body>
-</html>
diff --git a/helm/mowgli/home/xml/mowgli-xhtml1-transitional.dtd b/helm/mowgli/home/xml/mowgli-xhtml1-transitional.dtd
deleted file mode 100644 (file)
index 82fc78c..0000000
+++ /dev/null
@@ -1,1223 +0,0 @@
-<!--
-   MOWGLI extension of Extensible HTML version 1.0 Transitional DTD
-     
-   This is a slight modification of the Extensible HTML Version 1.0
-   Transitional DTD to allow some elements in the mowgli namespace
-   to appear in the document.
-
-   All the relative SYSTEM identifiers in the DTD have been made absolute
-   (to make them refer to the original documents).
-
-   The parts of the DTD that have been modified are enclosed between
-   couples of comments like these:
-   <!- - BEGIN MOWGLI extension - ->
-   <!- - END MOWGLI extension - ->
-   The comments above are omitted when the only modification is the
-   change of the SYSTEM identifier from relative to absolute.
--->
-
-<!--
-   Extensible HTML version 1.0 Transitional DTD
-
-   This is the same as HTML 4.0 Transitional except for
-   changes due to the differences between XML and SGML.
-
-   Namespace = http://www.w3.org/1999/xhtml
-
-   For further information, see: http://www.w3.org/TR/xhtml1
-
-   Copyright (c) 1998-2000 W3C (MIT, INRIA, Keio),
-   All Rights Reserved. 
-
-   This DTD module is identified by the PUBLIC and SYSTEM identifiers:
-
-   PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-   SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
-
-   $Revision$
-   $Date$
-
--->
-
-<!--================ Character mnemonic entities =========================-->
-
-<!ENTITY % HTMLlat1 PUBLIC
-   "-//W3C//ENTITIES Latin 1 for XHTML//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
-%HTMLlat1;
-
-<!ENTITY % HTMLsymbol PUBLIC
-   "-//W3C//ENTITIES Symbols for XHTML//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
-%HTMLsymbol;
-
-<!ENTITY % HTMLspecial PUBLIC
-   "-//W3C//ENTITIES Special for XHTML//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
-%HTMLspecial;
-
-<!--================== Imported Names ====================================-->
-
-<!ENTITY % ContentType "CDATA">
-    <!-- media type, as per [RFC2045] -->
-
-<!ENTITY % ContentTypes "CDATA">
-    <!-- comma-separated list of media types, as per [RFC2045] -->
-
-<!ENTITY % Charset "CDATA">
-    <!-- a character encoding, as per [RFC2045] -->
-
-<!ENTITY % Charsets "CDATA">
-    <!-- a space separated list of character encodings, as per [RFC2045] -->
-
-<!ENTITY % LanguageCode "NMTOKEN">
-    <!-- a language code, as per [RFC1766] -->
-
-<!ENTITY % Character "CDATA">
-    <!-- a single character from [ISO10646] -->
-
-<!ENTITY % Number "CDATA">
-    <!-- one or more digits -->
-
-<!ENTITY % LinkTypes "CDATA">
-    <!-- space-separated list of link types -->
-
-<!ENTITY % MediaDesc "CDATA">
-    <!-- single or comma-separated list of media descriptors -->
-
-<!ENTITY % URI "CDATA">
-    <!-- a Uniform Resource Identifier, see [RFC2396] -->
-
-<!ENTITY % UriList "CDATA">
-    <!-- a space separated list of Uniform Resource Identifiers -->
-
-<!ENTITY % Datetime "CDATA">
-    <!-- date and time information. ISO date format -->
-
-<!ENTITY % Script "CDATA">
-    <!-- script expression -->
-
-<!ENTITY % StyleSheet "CDATA">
-    <!-- style sheet data -->
-
-<!ENTITY % Text "CDATA">
-    <!-- used for titles etc. -->
-
-<!ENTITY % FrameTarget "NMTOKEN">
-    <!-- render in this frame -->
-
-<!ENTITY % Length "CDATA">
-    <!-- nn for pixels or nn% for percentage length -->
-
-<!ENTITY % MultiLength "CDATA">
-    <!-- pixel, percentage, or relative -->
-
-<!ENTITY % MultiLengths "CDATA">
-    <!-- comma-separated list of MultiLength -->
-
-<!ENTITY % Pixels "CDATA">
-    <!-- integer representing length in pixels -->
-
-<!-- these are used for image maps -->
-
-<!ENTITY % Shape "(rect|circle|poly|default)">
-
-<!ENTITY % Coords "CDATA">
-    <!-- comma separated list of lengths -->
-
-<!-- used for object, applet, img, input and iframe -->
-<!ENTITY % ImgAlign "(top|middle|bottom|left|right)">
-
-<!-- a color using sRGB: #RRGGBB as Hex values -->
-<!ENTITY % Color "CDATA">
-
-<!-- There are also 16 widely known color names with their sRGB values:
-
-    Black  = #000000    Green  = #008000
-    Silver = #C0C0C0    Lime   = #00FF00
-    Gray   = #808080    Olive  = #808000
-    White  = #FFFFFF    Yellow = #FFFF00
-    Maroon = #800000    Navy   = #000080
-    Red    = #FF0000    Blue   = #0000FF
-    Purple = #800080    Teal   = #008080
-    Fuchsia= #FF00FF    Aqua   = #00FFFF
--->
-
-<!--=================== Generic Attributes ===============================-->
-
-<!-- core attributes common to most elements
-  id       document-wide unique id
-  class    space separated list of classes
-  style    associated style info
-  title    advisory title/amplification
--->
-<!ENTITY % coreattrs
- "id          ID             #IMPLIED
-  class       CDATA          #IMPLIED
-  style       %StyleSheet;   #IMPLIED
-  title       %Text;         #IMPLIED"
-  >
-
-<!-- internationalization attributes
-  lang        language code (backwards compatible)
-  xml:lang    language code (as per XML 1.0 spec)
-  dir         direction for weak/neutral text
--->
-<!ENTITY % i18n
- "lang        %LanguageCode; #IMPLIED
-  xml:lang    %LanguageCode; #IMPLIED
-  dir         (ltr|rtl)      #IMPLIED"
-  >
-
-<!-- attributes for common UI events
-  onclick     a pointer button was clicked
-  ondblclick  a pointer button was double clicked
-  onmousedown a pointer button was pressed down
-  onmouseup   a pointer button was released
-  onmousemove a pointer was moved onto the element
-  onmouseout  a pointer was moved away from the element
-  onkeypress  a key was pressed and released
-  onkeydown   a key was pressed down
-  onkeyup     a key was released
--->
-<!ENTITY % events
- "onclick     %Script;       #IMPLIED
-  ondblclick  %Script;       #IMPLIED
-  onmousedown %Script;       #IMPLIED
-  onmouseup   %Script;       #IMPLIED
-  onmouseover %Script;       #IMPLIED
-  onmousemove %Script;       #IMPLIED
-  onmouseout  %Script;       #IMPLIED
-  onkeypress  %Script;       #IMPLIED
-  onkeydown   %Script;       #IMPLIED
-  onkeyup     %Script;       #IMPLIED"
-  >
-
-<!-- attributes for elements that can get the focus
-  accesskey   accessibility key character
-  tabindex    position in tabbing order
-  onfocus     the element got the focus
-  onblur      the element lost the focus
--->
-<!ENTITY % focus
- "accesskey   %Character;    #IMPLIED
-  tabindex    %Number;       #IMPLIED
-  onfocus     %Script;       #IMPLIED
-  onblur      %Script;       #IMPLIED"
-  >
-
-<!ENTITY % attrs "%coreattrs; %i18n; %events;">
-
-<!-- text alignment for p, div, h1-h6. The default is
-     align="left" for ltr headings, "right" for rtl -->
-
-<!ENTITY % TextAlign "align (left|center|right) #IMPLIED">
-
-<!--=================== Text Elements ====================================-->
-
-<!ENTITY % special
-   "br | span | bdo | object | applet | img | map | iframe">
-
-<!ENTITY % fontstyle "tt | i | b | big | small | u
-                      | s | strike |font | basefont">
-
-<!ENTITY % phrase "em | strong | dfn | code | q | sub | sup |
-                   samp | kbd | var | cite | abbr | acronym">
-
-<!ENTITY % inline.forms "input | select | textarea | label | button">
-
-<!-- these can occur at block or inline level -->
-<!ENTITY % misc "ins | del | script | noscript">
-
-<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
-
-<!-- %Inline; covers inline or "text-level" elements -->
-<!-- BEGIN MOWGLI extension -->
-<!ENTITY % Inline "(#PCDATA | mowgli:date | %inline; | %misc;)*">
-<!-- END MOWGLI extension -->
-
-<!--================== Block level elements ==============================-->
-
-<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
-<!ENTITY % lists "ul | ol | dl | menu | dir">
-<!ENTITY % blocktext "pre | hr | blockquote | address | center | noframes">
-
-<!ENTITY % block
-    "p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table">
-
-<!ENTITY % Block "(%block; | form | %misc;)*">
-
-<!-- BEGIN MOWGLI extension -->
-<!-- %Flow; mixes Block and Inline and is used for list items etc. -->
-<!ENTITY % Flow "(#PCDATA | mowgli:latest-news | approaching-deadlines | %block; | form | %inline; | %misc;)*">
-<!-- END MOWGLI extension -->
-
-<!--================== Content models for exclusions =====================-->
-
-<!-- a elements use %Inline; excluding a -->
-
-<!ENTITY % a.content
-   "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc;)*">
-
-<!-- pre uses %Inline excluding img, object, applet, big, small,
-     sub, sup, font, or basefont -->
-
-<!ENTITY % pre.content
-   "(#PCDATA | a | br | span | bdo | map | tt | i | b | u | s |
-      %phrase; | %inline.forms;)*">
-
-<!-- form uses %Flow; excluding form -->
-
-<!ENTITY % form.content "(#PCDATA | %block; | %inline; | %misc;)*">
-
-<!-- button uses %Flow; but excludes a, form, form controls, iframe -->
-
-<!ENTITY % button.content
-   "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
-      table | br | span | bdo | object | applet | img | map |
-      %fontstyle; | %phrase; | %misc;)*">
-
-<!--================ Document Structure ==================================-->
-
-<!-- the namespace URI designates the document profile -->
-
-<!ELEMENT html (head, body)>
-<!ATTLIST html
-  %i18n;
-  xmlns       %URI;          #FIXED 'http://www.w3.org/1999/xhtml'
-  >
-
-<!--================ Document Head =======================================-->
-
-<!ENTITY % head.misc "(script|style|meta|link|object|isindex)*">
-
-<!-- content model is %head.misc; combined with a single
-     title and an optional base element in any order -->
-
-<!ELEMENT head (%head.misc;,
-     ((title, %head.misc;, (base, %head.misc;)?) |
-      (base, %head.misc;, (title, %head.misc;))))>
-
-<!ATTLIST head
-  %i18n;
-  profile     %URI;          #IMPLIED
-  >
-
-<!-- The title element is not considered part of the flow of text.
-       It should be displayed, for example as the page header or
-       window title. Exactly one title is required per document.
-    -->
-<!ELEMENT title (#PCDATA)>
-<!ATTLIST title %i18n;>
-
-<!-- document base URI -->
-
-<!ELEMENT base EMPTY>
-<!ATTLIST base
-  href        %URI;          #IMPLIED
-  target      %FrameTarget;  #IMPLIED
-  >
-
-<!-- generic metainformation -->
-<!ELEMENT meta EMPTY>
-<!ATTLIST meta
-  %i18n;
-  http-equiv  CDATA          #IMPLIED
-  name        CDATA          #IMPLIED
-  content     CDATA          #REQUIRED
-  scheme      CDATA          #IMPLIED
-  >
-
-<!--
-  Relationship values can be used in principle:
-
-   a) for document specific toolbars/menus when used
-      with the link element in document head e.g.
-        start, contents, previous, next, index, end, help
-   b) to link to a separate style sheet (rel="stylesheet")
-   c) to make a link to a script (rel="script")
-   d) by stylesheets to control how collections of
-      html nodes are rendered into printed documents
-   e) to make a link to a printable version of this document
-      e.g. a PostScript or PDF version (rel="alternate" media="print")
--->
-
-<!ELEMENT link EMPTY>
-<!ATTLIST link
-  %attrs;
-  charset     %Charset;      #IMPLIED
-  href        %URI;          #IMPLIED
-  hreflang    %LanguageCode; #IMPLIED
-  type        %ContentType;  #IMPLIED
-  rel         %LinkTypes;    #IMPLIED
-  rev         %LinkTypes;    #IMPLIED
-  media       %MediaDesc;    #IMPLIED
-  target      %FrameTarget;  #IMPLIED
-  >
-
-<!-- style info, which may include CDATA sections -->
-<!ELEMENT style (#PCDATA)>
-<!ATTLIST style
-  %i18n;
-  type        %ContentType;  #REQUIRED
-  media       %MediaDesc;    #IMPLIED
-  title       %Text;         #IMPLIED
-  xml:space   (preserve)     #FIXED 'preserve'
-  >
-
-<!-- script statements, which may include CDATA sections -->
-<!ELEMENT script (#PCDATA)>
-<!ATTLIST script
-  charset     %Charset;      #IMPLIED
-  type        %ContentType;  #REQUIRED
-  language    CDATA          #IMPLIED
-  src         %URI;          #IMPLIED
-  defer       (defer)        #IMPLIED
-  xml:space   (preserve)     #FIXED 'preserve'
-  >
-
-<!-- alternate content container for non script-based rendering -->
-
-<!ELEMENT noscript %Flow;>
-<!ATTLIST noscript
-  %attrs;
-  >
-
-<!--======================= Frames =======================================-->
-
-<!-- inline subwindow -->
-
-<!ELEMENT iframe %Flow;>
-<!ATTLIST iframe
-  %coreattrs;
-  longdesc    %URI;          #IMPLIED
-  name        NMTOKEN        #IMPLIED
-  src         %URI;          #IMPLIED
-  frameborder (1|0)          "1"
-  marginwidth %Pixels;       #IMPLIED
-  marginheight %Pixels;      #IMPLIED
-  scrolling   (yes|no|auto)  "auto"
-  align       %ImgAlign;     #IMPLIED
-  height      %Length;       #IMPLIED
-  width       %Length;       #IMPLIED
-  >
-
-<!-- alternate content container for non frame-based rendering -->
-
-<!ELEMENT noframes %Flow;>
-<!ATTLIST noframes
-  %attrs;
-  >
-
-<!--=================== Document Body ====================================-->
-
-<!ELEMENT body %Flow;>
-<!ATTLIST body
-  %attrs;
-  onload      %Script;       #IMPLIED
-  onunload    %Script;       #IMPLIED
-  background  %URI;          #IMPLIED
-  bgcolor     %Color;        #IMPLIED
-  text        %Color;        #IMPLIED
-  link        %Color;        #IMPLIED
-  vlink       %Color;        #IMPLIED
-  alink       %Color;        #IMPLIED
-  >
-
-<!ELEMENT div %Flow;>  <!-- generic language/style container -->
-<!ATTLIST div
-  %attrs;
-  %TextAlign;
-  >
-
-<!--=================== Paragraphs =======================================-->
-
-<!ELEMENT p %Inline;>
-<!ATTLIST p
-  %attrs;
-  %TextAlign;
-  >
-
-<!--=================== Headings =========================================-->
-
-<!--
-  There are six levels of headings from h1 (the most important)
-  to h6 (the least important).
--->
-
-<!ELEMENT h1  %Inline;>
-<!ATTLIST h1
-  %attrs;
-  %TextAlign;
-  >
-
-<!ELEMENT h2 %Inline;>
-<!ATTLIST h2
-  %attrs;
-  %TextAlign;
-  >
-
-<!ELEMENT h3 %Inline;>
-<!ATTLIST h3
-  %attrs;
-  %TextAlign;
-  >
-
-<!ELEMENT h4 %Inline;>
-<!ATTLIST h4
-  %attrs;
-  %TextAlign;
-  >
-
-<!ELEMENT h5 %Inline;>
-<!ATTLIST h5
-  %attrs;
-  %TextAlign;
-  >
-
-<!ELEMENT h6 %Inline;>
-<!ATTLIST h6
-  %attrs;
-  %TextAlign;
-  >
-
-<!--=================== Lists ============================================-->
-
-<!-- Unordered list bullet styles -->
-
-<!ENTITY % ULStyle "(disc|square|circle)">
-
-<!-- Unordered list -->
-
-<!ELEMENT ul (li)+>
-<!ATTLIST ul
-  %attrs;
-  type        %ULStyle;     #IMPLIED
-  compact     (compact)     #IMPLIED
-  >
-
-<!-- Ordered list numbering style
-
-    1   arabic numbers      1, 2, 3, ...
-    a   lower alpha         a, b, c, ...
-    A   upper alpha         A, B, C, ...
-    i   lower roman         i, ii, iii, ...
-    I   upper roman         I, II, III, ...
-
-    The style is applied to the sequence number which by default
-    is reset to 1 for the first list item in an ordered list.
--->
-<!ENTITY % OLStyle "CDATA">
-
-<!-- Ordered (numbered) list -->
-
-<!ELEMENT ol (li)+>
-<!ATTLIST ol
-  %attrs;
-  type        %OLStyle;      #IMPLIED
-  compact     (compact)      #IMPLIED
-  start       %Number;       #IMPLIED
-  >
-
-<!-- single column list (DEPRECATED) --> 
-<!ELEMENT menu (li)+>
-<!ATTLIST menu
-  %attrs;
-  compact     (compact)     #IMPLIED
-  >
-
-<!-- multiple column list (DEPRECATED) --> 
-<!ELEMENT dir (li)+>
-<!ATTLIST dir
-  %attrs;
-  compact     (compact)     #IMPLIED
-  >
-
-<!-- LIStyle is constrained to: "(%ULStyle;|%OLStyle;)" -->
-<!ENTITY % LIStyle "CDATA">
-
-<!-- list item -->
-
-<!ELEMENT li %Flow;>
-<!ATTLIST li
-  %attrs;
-  type        %LIStyle;      #IMPLIED
-  value       %Number;       #IMPLIED
-  >
-
-<!-- definition lists - dt for term, dd for its definition -->
-
-<!ELEMENT dl (dt|dd)+>
-<!ATTLIST dl
-  %attrs;
-  compact     (compact)      #IMPLIED
-  >
-
-<!ELEMENT dt %Inline;>
-<!ATTLIST dt
-  %attrs;
-  >
-
-<!ELEMENT dd %Flow;>
-<!ATTLIST dd
-  %attrs;
-  >
-
-<!--=================== Address ==========================================-->
-
-<!-- information on author -->
-
-<!ELEMENT address %Inline;>
-<!ATTLIST address
-  %attrs;
-  >
-
-<!--=================== Horizontal Rule ==================================-->
-
-<!ELEMENT hr EMPTY>
-<!ATTLIST hr
-  %attrs;
-  align       (left|center|right) #IMPLIED
-  noshade     (noshade)      #IMPLIED
-  size        %Pixels;       #IMPLIED
-  width       %Length;       #IMPLIED
-  >
-
-<!--=================== Preformatted Text ================================-->
-
-<!-- content is %Inline; excluding 
-        "img|object|applet|big|small|sub|sup|font|basefont" -->
-
-<!ELEMENT pre %pre.content;>
-<!ATTLIST pre
-  %attrs;
-  width       %Number;      #IMPLIED
-  xml:space   (preserve)    #FIXED 'preserve'
-  >
-
-<!--=================== Block-like Quotes ================================-->
-
-<!ELEMENT blockquote %Flow;>
-<!ATTLIST blockquote
-  %attrs;
-  cite        %URI;          #IMPLIED
-  >
-
-<!--=================== Text alignment ===================================-->
-
-<!-- center content -->
-<!ELEMENT center %Flow;>
-<!ATTLIST center
-  %attrs;
-  >
-
-<!--=================== Inserted/Deleted Text ============================-->
-
-<!--
-  ins/del are allowed in block and inline content, but its
-  inappropriate to include block content within an ins element
-  occurring in inline content.
--->
-<!ELEMENT ins %Flow;>
-<!ATTLIST ins
-  %attrs;
-  cite        %URI;          #IMPLIED
-  datetime    %Datetime;     #IMPLIED
-  >
-
-<!ELEMENT del %Flow;>
-<!ATTLIST del
-  %attrs;
-  cite        %URI;          #IMPLIED
-  datetime    %Datetime;     #IMPLIED
-  >
-
-<!--================== The Anchor Element ================================-->
-
-<!-- content is %Inline; except that anchors shouldn't be nested -->
-
-<!ELEMENT a %a.content;>
-<!ATTLIST a
-  %attrs;
-  charset     %Charset;      #IMPLIED
-  type        %ContentType;  #IMPLIED
-  name        NMTOKEN        #IMPLIED
-  href        %URI;          #IMPLIED
-  hreflang    %LanguageCode; #IMPLIED
-  rel         %LinkTypes;    #IMPLIED
-  rev         %LinkTypes;    #IMPLIED
-  accesskey   %Character;    #IMPLIED
-  shape       %Shape;        "rect"
-  coords      %Coords;       #IMPLIED
-  tabindex    %Number;       #IMPLIED
-  onfocus     %Script;       #IMPLIED
-  onblur      %Script;       #IMPLIED
-  target      %FrameTarget;  #IMPLIED
-  >
-
-<!--===================== Inline Elements ================================-->
-
-<!ELEMENT span %Inline;> <!-- generic language/style container -->
-<!ATTLIST span
-  %attrs;
-  >
-
-<!ELEMENT bdo %Inline;>  <!-- I18N BiDi over-ride -->
-<!ATTLIST bdo
-  %coreattrs;
-  %events;
-  lang        %LanguageCode; #IMPLIED
-  xml:lang    %LanguageCode; #IMPLIED
-  dir         (ltr|rtl)      #REQUIRED
-  >
-
-<!ELEMENT br EMPTY>   <!-- forced line break -->
-<!ATTLIST br
-  %coreattrs;
-  clear       (left|all|right|none) "none"
-  >
-
-<!ELEMENT em %Inline;>   <!-- emphasis -->
-<!ATTLIST em %attrs;>
-
-<!ELEMENT strong %Inline;>   <!-- strong emphasis -->
-<!ATTLIST strong %attrs;>
-
-<!ELEMENT dfn %Inline;>   <!-- definitional -->
-<!ATTLIST dfn %attrs;>
-
-<!ELEMENT code %Inline;>   <!-- program code -->
-<!ATTLIST code %attrs;>
-
-<!ELEMENT samp %Inline;>   <!-- sample -->
-<!ATTLIST samp %attrs;>
-
-<!ELEMENT kbd %Inline;>  <!-- something user would type -->
-<!ATTLIST kbd %attrs;>
-
-<!ELEMENT var %Inline;>   <!-- variable -->
-<!ATTLIST var %attrs;>
-
-<!ELEMENT cite %Inline;>   <!-- citation -->
-<!ATTLIST cite %attrs;>
-
-<!ELEMENT abbr %Inline;>   <!-- abbreviation -->
-<!ATTLIST abbr %attrs;>
-
-<!ELEMENT acronym %Inline;>   <!-- acronym -->
-<!ATTLIST acronym %attrs;>
-
-<!ELEMENT q %Inline;>   <!-- inlined quote -->
-<!ATTLIST q
-  %attrs;
-  cite        %URI;          #IMPLIED
-  >
-
-<!ELEMENT sub %Inline;> <!-- subscript -->
-<!ATTLIST sub %attrs;>
-
-<!ELEMENT sup %Inline;> <!-- superscript -->
-<!ATTLIST sup %attrs;>
-
-<!ELEMENT tt %Inline;>   <!-- fixed pitch font -->
-<!ATTLIST tt %attrs;>
-
-<!ELEMENT i %Inline;>   <!-- italic font -->
-<!ATTLIST i %attrs;>
-
-<!ELEMENT b %Inline;>   <!-- bold font -->
-<!ATTLIST b %attrs;>
-
-<!ELEMENT big %Inline;>   <!-- bigger font -->
-<!ATTLIST big %attrs;>
-
-<!ELEMENT small %Inline;>   <!-- smaller font -->
-<!ATTLIST small %attrs;>
-
-<!ELEMENT u %Inline;>   <!-- underline -->
-<!ATTLIST u %attrs;>
-
-<!ELEMENT s %Inline;>   <!-- strike-through -->
-<!ATTLIST s %attrs;>
-
-<!ELEMENT strike %Inline;>   <!-- strike-through -->
-<!ATTLIST strike %attrs;>
-
-<!ELEMENT basefont EMPTY>  <!-- base font size -->
-<!ATTLIST basefont
-  id          ID             #IMPLIED
-  size        CDATA          #REQUIRED
-  color       %Color;        #IMPLIED
-  face        CDATA          #IMPLIED
-  >
-
-<!ELEMENT font %Inline;> <!-- local change to font -->
-<!ATTLIST font
-  %coreattrs;
-  %i18n;
-  size        CDATA          #IMPLIED
-  color       %Color;        #IMPLIED
-  face        CDATA          #IMPLIED
-  >
-
-<!--==================== Object ======================================-->
-<!--
-  object is used to embed objects as part of HTML pages.
-  param elements should precede other content. Parameters
-  can also be expressed as attribute/value pairs on the
-  object element itself when brevity is desired.
--->
-
-<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*>
-<!ATTLIST object
-  %attrs;
-  declare     (declare)      #IMPLIED
-  classid     %URI;          #IMPLIED
-  codebase    %URI;          #IMPLIED
-  data        %URI;          #IMPLIED
-  type        %ContentType;  #IMPLIED
-  codetype    %ContentType;  #IMPLIED
-  archive     %UriList;      #IMPLIED
-  standby     %Text;         #IMPLIED
-  height      %Length;       #IMPLIED
-  width       %Length;       #IMPLIED
-  usemap      %URI;          #IMPLIED
-  name        NMTOKEN        #IMPLIED
-  tabindex    %Number;       #IMPLIED
-  align       %ImgAlign;     #IMPLIED
-  border      %Pixels;       #IMPLIED
-  hspace      %Pixels;       #IMPLIED
-  vspace      %Pixels;       #IMPLIED
-  >
-
-<!--
-  param is used to supply a named property value.
-  In XML it would seem natural to follow RDF and support an
-  abbreviated syntax where the param elements are replaced
-  by attribute value pairs on the object start tag.
--->
-<!ELEMENT param EMPTY>
-<!ATTLIST param
-  id          ID             #IMPLIED
-  name        CDATA          #REQUIRED
-  value       CDATA          #IMPLIED
-  valuetype   (data|ref|object) "data"
-  type        %ContentType;  #IMPLIED
-  >
-
-<!--=================== Java applet ==================================-->
-<!--
-  One of code or object attributes must be present.
-  Place param elements before other content.
--->
-<!ELEMENT applet (#PCDATA | param | %block; | form | %inline; | %misc;)*>
-<!ATTLIST applet
-  %coreattrs;
-  codebase    %URI;          #IMPLIED
-  archive     CDATA          #IMPLIED
-  code        CDATA          #IMPLIED
-  object      CDATA          #IMPLIED
-  alt         %Text;         #IMPLIED
-  name        NMTOKEN        #IMPLIED
-  width       %Length;       #REQUIRED
-  height      %Length;       #REQUIRED
-  align       %ImgAlign;     #IMPLIED
-  hspace      %Pixels;       #IMPLIED
-  vspace      %Pixels;       #IMPLIED
-  >
-
-<!--=================== Images ===========================================-->
-
-<!--
-   To avoid accessibility problems for people who aren't
-   able to see the image, you should provide a text
-   description using the alt and longdesc attributes.
-   In addition, avoid the use of server-side image maps.
--->
-
-<!ELEMENT img EMPTY>
-<!ATTLIST img
-  %attrs;
-  src         %URI;          #REQUIRED
-  alt         %Text;         #REQUIRED
-  name        NMTOKEN        #IMPLIED
-  longdesc    %URI;          #IMPLIED
-  height      %Length;       #IMPLIED
-  width       %Length;       #IMPLIED
-  usemap      %URI;          #IMPLIED
-  ismap       (ismap)        #IMPLIED
-  align       %ImgAlign;     #IMPLIED
-  border      %Length;       #IMPLIED
-  hspace      %Pixels;       #IMPLIED
-  vspace      %Pixels;       #IMPLIED
-  >
-
-<!-- usemap points to a map element which may be in this document
-  or an external document, although the latter is not widely supported -->
-
-<!--================== Client-side image maps ============================-->
-
-<!-- These can be placed in the same document or grouped in a
-     separate document although this isn't yet widely supported -->
-
-<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
-<!ATTLIST map
-  %i18n;
-  %events;
-  id          ID             #REQUIRED
-  class       CDATA          #IMPLIED
-  style       %StyleSheet;   #IMPLIED
-  title       %Text;         #IMPLIED
-  name        CDATA          #IMPLIED
-  >
-
-<!ELEMENT area EMPTY>
-<!ATTLIST area
-  %attrs;
-  shape       %Shape;        "rect"
-  coords      %Coords;       #IMPLIED
-  href        %URI;          #IMPLIED
-  nohref      (nohref)       #IMPLIED
-  alt         %Text;         #REQUIRED
-  tabindex    %Number;       #IMPLIED
-  accesskey   %Character;    #IMPLIED
-  onfocus     %Script;       #IMPLIED
-  onblur      %Script;       #IMPLIED
-  target      %FrameTarget;  #IMPLIED
-  >
-
-<!--================ Forms ===============================================-->
-
-<!ELEMENT form %form.content;>   <!-- forms shouldn't be nested -->
-
-<!ATTLIST form
-  %attrs;
-  action      %URI;          #REQUIRED
-  method      (get|post)     "get"
-  name        NMTOKEN        #IMPLIED
-  enctype     %ContentType;  "application/x-www-form-urlencoded"
-  onsubmit    %Script;       #IMPLIED
-  onreset     %Script;       #IMPLIED
-  accept      %ContentTypes; #IMPLIED
-  accept-charset %Charsets;  #IMPLIED
-  target      %FrameTarget;  #IMPLIED
-  >
-
-<!--
-  Each label must not contain more than ONE field
-  Label elements shouldn't be nested.
--->
-<!ELEMENT label %Inline;>
-<!ATTLIST label
-  %attrs;
-  for         IDREF          #IMPLIED
-  accesskey   %Character;    #IMPLIED
-  onfocus     %Script;       #IMPLIED
-  onblur      %Script;       #IMPLIED
-  >
-
-<!ENTITY % InputType
-  "(text | password | checkbox |
-    radio | submit | reset |
-    file | hidden | image | button)"
-   >
-
-<!-- the name attribute is required for all but submit & reset -->
-
-<!ELEMENT input EMPTY>     <!-- form control -->
-<!ATTLIST input
-  %attrs;
-  type        %InputType;    "text"
-  name        CDATA          #IMPLIED
-  value       CDATA          #IMPLIED
-  checked     (checked)      #IMPLIED
-  disabled    (disabled)     #IMPLIED
-  readonly    (readonly)     #IMPLIED
-  size        CDATA          #IMPLIED
-  maxlength   %Number;       #IMPLIED
-  src         %URI;          #IMPLIED
-  alt         CDATA          #IMPLIED
-  usemap      %URI;          #IMPLIED
-  tabindex    %Number;       #IMPLIED
-  accesskey   %Character;    #IMPLIED
-  onfocus     %Script;       #IMPLIED
-  onblur      %Script;       #IMPLIED
-  onselect    %Script;       #IMPLIED
-  onchange    %Script;       #IMPLIED
-  accept      %ContentTypes; #IMPLIED
-  align       %ImgAlign;     #IMPLIED
-  >
-
-<!ELEMENT select (optgroup|option)+>  <!-- option selector -->
-<!ATTLIST select
-  %attrs;
-  name        CDATA          #IMPLIED
-  size        %Number;       #IMPLIED
-  multiple    (multiple)     #IMPLIED
-  disabled    (disabled)     #IMPLIED
-  tabindex    %Number;       #IMPLIED
-  onfocus     %Script;       #IMPLIED
-  onblur      %Script;       #IMPLIED
-  onchange    %Script;       #IMPLIED
-  >
-
-<!ELEMENT optgroup (option)+>   <!-- option group -->
-<!ATTLIST optgroup
-  %attrs;
-  disabled    (disabled)     #IMPLIED
-  label       %Text;         #REQUIRED
-  >
-
-<!ELEMENT option (#PCDATA)>     <!-- selectable choice -->
-<!ATTLIST option
-  %attrs;
-  selected    (selected)     #IMPLIED
-  disabled    (disabled)     #IMPLIED
-  label       %Text;         #IMPLIED
-  value       CDATA          #IMPLIED
-  >
-
-<!ELEMENT textarea (#PCDATA)>     <!-- multi-line text field -->
-<!ATTLIST textarea
-  %attrs;
-  name        CDATA          #IMPLIED
-  rows        %Number;       #REQUIRED
-  cols        %Number;       #REQUIRED
-  disabled    (disabled)     #IMPLIED
-  readonly    (readonly)     #IMPLIED
-  tabindex    %Number;       #IMPLIED
-  accesskey   %Character;    #IMPLIED
-  onfocus     %Script;       #IMPLIED
-  onblur      %Script;       #IMPLIED
-  onselect    %Script;       #IMPLIED
-  onchange    %Script;       #IMPLIED
-  >
-
-<!--
-  The fieldset element is used to group form fields.
-  Only one legend element should occur in the content
-  and if present should only be preceded by whitespace.
--->
-<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
-<!ATTLIST fieldset
-  %attrs;
-  >
-
-<!ENTITY % LAlign "(top|bottom|left|right)">
-
-<!ELEMENT legend %Inline;>     <!-- fieldset label -->
-<!ATTLIST legend
-  %attrs;
-  accesskey   %Character;    #IMPLIED
-  align       %LAlign;       #IMPLIED
-  >
-
-<!--
- Content is %Flow; excluding a, form, form controls, iframe
---> 
-<!ELEMENT button %button.content;>  <!-- push button -->
-<!ATTLIST button
-  %attrs;
-  name        CDATA          #IMPLIED
-  value       CDATA          #IMPLIED
-  type        (button|submit|reset) "submit"
-  disabled    (disabled)     #IMPLIED
-  tabindex    %Number;       #IMPLIED
-  accesskey   %Character;    #IMPLIED
-  onfocus     %Script;       #IMPLIED
-  onblur      %Script;       #IMPLIED
-  >
-
-<!-- single-line text input control (DEPRECATED) -->
-<!ELEMENT isindex EMPTY>
-<!ATTLIST isindex
-  %coreattrs;
-  %i18n;
-  prompt      %Text;         #IMPLIED
-  >
-
-<!--======================= Tables =======================================-->
-
-<!-- Derived from IETF HTML table standard, see [RFC1942] -->
-
-<!--
- The border attribute sets the thickness of the frame around the
- table. The default units are screen pixels.
-
- The frame attribute specifies which parts of the frame around
- the table should be rendered. The values are not the same as
- CALS to avoid a name clash with the valign attribute.
--->
-<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
-
-<!--
- The rules attribute defines which rules to draw between cells:
-
- If rules is absent then assume:
-     "none" if border is absent or border="0" otherwise "all"
--->
-
-<!ENTITY % TRules "(none | groups | rows | cols | all)">
-  
-<!-- horizontal placement of table relative to document -->
-<!ENTITY % TAlign "(left|center|right)">
-
-<!-- horizontal alignment attributes for cell contents
-
-  char        alignment char, e.g. char=':'
-  charoff     offset for alignment char
--->
-<!ENTITY % cellhalign
-  "align      (left|center|right|justify|char) #IMPLIED
-   char       %Character;    #IMPLIED
-   charoff    %Length;       #IMPLIED"
-  >
-
-<!-- vertical alignment attributes for cell contents -->
-<!ENTITY % cellvalign
-  "valign     (top|middle|bottom|baseline) #IMPLIED"
-  >
-
-<!ELEMENT table
-     (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
-<!ELEMENT caption  %Inline;>
-<!ELEMENT thead    (tr)+>
-<!ELEMENT tfoot    (tr)+>
-<!ELEMENT tbody    (tr)+>
-<!ELEMENT colgroup (col)*>
-<!ELEMENT col      EMPTY>
-<!ELEMENT tr       (th|td)+>
-<!ELEMENT th       %Flow;>
-<!ELEMENT td       %Flow;>
-
-<!ATTLIST table
-  %attrs;
-  summary     %Text;         #IMPLIED
-  width       %Length;       #IMPLIED
-  border      %Pixels;       #IMPLIED
-  frame       %TFrame;       #IMPLIED
-  rules       %TRules;       #IMPLIED
-  cellspacing %Length;       #IMPLIED
-  cellpadding %Length;       #IMPLIED
-  align       %TAlign;       #IMPLIED
-  bgcolor     %Color;        #IMPLIED
-  >
-
-<!ENTITY % CAlign "(top|bottom|left|right)">
-
-<!ATTLIST caption
-  %attrs;
-  align       %CAlign;       #IMPLIED
-  >
-
-<!--
-colgroup groups a set of col elements. It allows you to group
-several semantically related columns together.
--->
-<!ATTLIST colgroup
-  %attrs;
-  span        %Number;       "1"
-  width       %MultiLength;  #IMPLIED
-  %cellhalign;
-  %cellvalign;
-  >
-
-<!--
- col elements define the alignment properties for cells in
- one or more columns.
-
- The width attribute specifies the width of the columns, e.g.
-
-     width=64        width in screen pixels
-     width=0.5*      relative width of 0.5
-
- The span attribute causes the attributes of one
- col element to apply to more than one column.
--->
-<!ATTLIST col
-  %attrs;
-  span        %Number;       "1"
-  width       %MultiLength;  #IMPLIED
-  %cellhalign;
-  %cellvalign;
-  >
-
-<!--
-    Use thead to duplicate headers when breaking table
-    across page boundaries, or for static headers when
-    tbody sections are rendered in scrolling panel.
-
-    Use tfoot to duplicate footers when breaking table
-    across page boundaries, or for static footers when
-    tbody sections are rendered in scrolling panel.
-
-    Use multiple tbody sections when rules are needed
-    between groups of table rows.
--->
-<!ATTLIST thead
-  %attrs;
-  %cellhalign;
-  %cellvalign;
-  >
-
-<!ATTLIST tfoot
-  %attrs;
-  %cellhalign;
-  %cellvalign;
-  >
-
-<!ATTLIST tbody
-  %attrs;
-  %cellhalign;
-  %cellvalign;
-  >
-
-<!ATTLIST tr
-  %attrs;
-  %cellhalign;
-  %cellvalign;
-  bgcolor     %Color;        #IMPLIED
-  >
-
-<!-- Scope is simpler than headers attribute for common tables -->
-<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
-
-<!-- th is for headers, td for data and for cells acting as both -->
-
-<!ATTLIST th
-  %attrs;
-  abbr        %Text;         #IMPLIED
-  axis        CDATA          #IMPLIED
-  headers     IDREFS         #IMPLIED
-  scope       %Scope;        #IMPLIED
-  rowspan     %Number;       "1"
-  colspan     %Number;       "1"
-  %cellhalign;
-  %cellvalign;
-  nowrap      (nowrap)       #IMPLIED
-  bgcolor     %Color;        #IMPLIED
-  width       %Pixels;       #IMPLIED
-  height      %Pixels;       #IMPLIED
-  >
-
-<!ATTLIST td
-  %attrs;
-  abbr        %Text;         #IMPLIED
-  axis        CDATA          #IMPLIED
-  headers     IDREFS         #IMPLIED
-  scope       %Scope;        #IMPLIED
-  rowspan     %Number;       "1"
-  colspan     %Number;       "1"
-  %cellhalign;
-  %cellvalign;
-  nowrap      (nowrap)       #IMPLIED
-  bgcolor     %Color;        #IMPLIED
-  width       %Pixels;       #IMPLIED
-  height      %Pixels;       #IMPLIED
-  >
-
-<!-- BEGIN MOWGLI extension -->
-<!ELEMENT mowgli:latest-news EMPTY>
-<!ELEMENT mowgli:approaching-deadlines EMPTY>
-<!ELEMENT mowgli:date EMPTY>
-<!-- END MOWGLI extension -->
diff --git a/helm/mowgli/home/xml/news.xml b/helm/mowgli/home/xml/news.xml
deleted file mode 100644 (file)
index 0eb677a..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE news [
- <!ELEMENT news (event*)>
- <!ELEMENT event (date,header?,description,who?)>
- <!ELEMENT date (#PCDATA)>
- <!ELEMENT header (#PCDATA)>
- <!ELEMENT description (#PCDATA|a)*>
- <!ELEMENT who EMPTY>
- <!ATTLIST who
-           file CDATA #REQUIRED>
-
- <!-- Small subset of XHTML -->
- <!ELEMENT a (#PCDATA)>
- <!ATTLIST a
-           target CDATA #REQUIRED
-           href CDATA #REQUIRED>
-]>
-
-<news>
-  <event>
-    <date>20020320</date>
-    <description>
-     New: the
-     <a href="http://mowgli.cs.unibo.it/mailman/listinfo/mowgli-adm" target="content">administrative mailing list</a> has been set up
-     (members only).
-    </description>
-    <who file="bologna/sacerdoti"/>
-  </event>
-      
-  <event>
-    <date>20020320</date>
-    <description>
-     The MOWGLI Kick-Off was held in Golm the 15th of March.
-     MOWGLI members can find a
-     <a href="members/kick-off.html" target="content">report</a> of the
-     meeting in the members area.
-    </description>
-    <who file="bologna/sacerdoti"/>
-  </event>
-      
-  <event>
-    <date>20020311</date>
-    <description>
-     <a href="people/dfki/libbrecht.html" target="content">Paul Libbrecht</a>
-     contributes a much improved PDF file for the MOWGLI proposal in the
-     member area.
-    </description>
-    <who file="bologna/sacerdoti"/>
-  </event>
-      
-  <event>
-    <date>20020306</date>
-    <description>
-     The agenda of the
-     <a href="mowgli-events/kick-off.html" target="content">MOWGLI Kick-Off meeting</a>
-     has been detailed.
-    </description>
-    <who file="bologna/sacerdoti"/>
-  </event>
-      
-  <event>
-    <date>20020226</date>
-    <description>
-      The site is now available in two versions: with and without
-      frames. Please, try
-      <a href="http://mowgli.cs.unibo.it/html_no_frames" target="_top">the one
-      without frames</a> and give us some feedback.
-    </description>
-    <who file="bologna/sacerdoti"/>
-  </event>
-      
-  <event>
-    <date>20020222</date>
-    <description>
-      The MOWGLI Kick-Off is approaching. Find out more
-      informations under MOWGLI Events.
-    </description>
-    <who file="bologna/sacerdoti"/>
-  </event>
-      
-  <event>
-    <date>20020222</date>
-    <description>
-      MOWGLI Web Site announced. MKM03 added to events.
-    </description>
-    <who file="bologna/sacerdoti"/>
-  </event>
-      
-  <event>
-    <date>20020214</date>
-    <header>Valentine's Day</header>
-    <description>
-      New fancy colours, improved layout, especially for I.E. (bleah), main page
-      generated automatically.
-    </description>
-    <who file="bologna/padovani"/>
-  </event>
-  
-  <event>
-    <date>20020212</date>
-    <description>
-      Site moved into CVS. XSLT stylesheets are used to generate
-      HTML pages from XML sources.
-    </description>
-    <who file="bologna/sacerdoti"/>
-  </event>
-  
-  <event>
-    <date>20020119</date>
-    <description>
-      First Web pages created.
-    </description>
-    <who file="bologna/padovani"/>
-  </event>
-  
-</news>
-
diff --git a/helm/mowgli/home/xml/other-events.xml b/helm/mowgli/home/xml/other-events.xml
deleted file mode 100644 (file)
index efc4070..0000000
+++ /dev/null
@@ -1,370 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE events [
- <!ELEMENT events (event*)>
- <!ELEMENT event (name,url,description?,where?,when,deadline*)>
- <!ELEMENT name (#PCDATA)>
- <!ELEMENT url (#PCDATA)>
- <!ELEMENT description (#PCDATA)>
- <!ELEMENT where (#PCDATA)>
- <!ELEMENT when (begin,end)>
- <!ELEMENT begin (#PCDATA)>
- <!ELEMENT end (#PCDATA)>
- <!ELEMENT deadline (description,date)>
- <!ATTLIST deadline
-           kind (submission|notification|registration|camera-ready) #REQUIRED>
- <!ELEMENT date (#PCDATA)>
-]>
-
-<events>
- <event>
-  <name>6th European Conference on Research and Advanced Technology for
-   Digital Libraries (ECDL2002)</name>
-  <url>http://www.ecdl2002.org</url>
-  <where>Rome, Italy</where>
-  <when>
-   <begin>20020916</begin>
-   <end>20020918</end>
-  </when>
-  <deadline kind="submission">
-   <description>Deadline for ALL the proposals</description>
-   <date>20020501</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Notification of acceptance for tutorials and workshops</description>
-   <date>20020515</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Notification of acceptance for papers, panels and posters</description>
-   <date>20020615</date>
-  </deadline>
-  <deadline kind="submission">
-   <description>Camera ready papers due</description>
-   <date>20020701</date>
-  </deadline>
- </event>
- <event>
-  <name>Sixth International Conference on Typed Lambda Calculi and Applications (TLCA '03)</name>
-  <url>http://www.tcs.informatik.uni-muenchen.de/~mhofmann/tlca03cfp.html</url>
-  <where>Valencia, Spain</where>
-  <when>
-   <begin>????</begin>
-   <end>????</end>
-  </when>
-  <deadline kind="submission">
-   <description>Papers due</description>
-   <date>20021129</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Notification of acceptance</description>
-   <date>20030130</date>
-  </deadline>
-  <deadline kind="submission">
-   <description>Full papers due</description>
-   <date>20030315</date>
-  </deadline>
- </event>
-
- <event>
-  <name>Third International Workshop on Logical Frameworks and
-   Meta-Languages</name>
-  <url>http://www.cs.cmu.edu/~lfm02</url>
-  <description>A FLoC'02 affiliated workshop</description>
-  <where>Copenhagen, Denmark</where>
-  <when>
-   <begin>20020726</begin>
-   <end>20020726</end>
-  </when>
-  <deadline kind="submission">
-   <description>Papers due</description>
-   <date>20020415</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Notification of acceptance</description>
-   <date>20020513</date>
-  </deadline>
-  <deadline kind="submission">
-   <description>Full papers due</description>
-   <date>20020603</date>
-  </deadline>
- </event>
-
- <event>
-  <name>Internet Accessible Mathematical Computation</name>
-  <url>http://www.SymbolicNet.org/conferences/iamc02</url>
-  <description>a Workshop at ISSAC 2002</description>
-  <where>Lille, France</where>
-  <when>
-   <begin>20020707</begin>
-   <end>20020707</end>
-  </when>
-  <deadline kind="submission">
-   <description>Abstract due</description>
-   <date>20020512</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Notification of acceptance</description>
-   <date>20020527</date>
-  </deadline>
-  <deadline kind="submission">
-   <description>Description of the software required for demos due.</description>
-   <date>20020610</date>
-  </deadline>
-  <deadline kind="submission">
-   <description>Full papers due</description>
-   <date>20020627</date>
-  </deadline>
- </event>
-
- <event>
-  <name>Calculemus 2002</name>
-  <url>http://www.ags.uni-sb.de/~calculemus2002/</url>
-  <description>10th Symposium on the Integration of Symbolic Computation and
-   Mechanized Reasoning</description>
-  <where>Marseille, France</where>
-  <when>
-   <begin>20020701</begin>
-   <end>20020715</end>
-  </when>
-  <deadline kind="submission">
-   <description>Papers due</description>
-   <date>20020308</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Notification of acceptance</description>
-   <date>20020402</date>
-  </deadline>
-  <deadline kind="camera-ready">
-   <description>Camera-ready papers due</description>
-   <date>20020419</date>
-  </deadline>
- </event>
-
- <event>
-  <name>MKM 2001</name>
-  <url>http://www.risc.uni-linz.ac.at/institute/conferences/MKM2001</url>
-  <description>First International Workshop on Mathematical Knowledge
-   Management. Special Issue for Annals of Mathematics and Artificial
-   Intelligence to appear in Fall 2002</description>
-  <where>RISC, A-4232 Schloss Hagenberg</where>
-  <when>
-   <begin>20010924</begin>
-   <end>20010926</end>
-  </when>
-  <deadline kind="notification">
-   <description>Notification of acceptance for the special issue on
-     Annals of Mathematics and Artificial Intelligence.</description>
-   <date>20020228</date>
-  </deadline>
-  <deadline kind="camera-ready">
-   <description>Final version of papers for the special issue.</description>
-   <date>20020531</date>
-  </deadline>
- </event>
-
- <event>
-  <name>International Congress of Mathematical Software 2002</name>
-  <url>http://www.mathsoftware.org</url>
-  <description>Satellite conference of ICM.</description>
-  <where>Beijing</where>
-  <when>
-   <begin>20020817</begin>
-   <end>20020819</end>
-  </when>
-  <deadline kind="submission">
-   <description>Papers due</description>
-   <date>20020215</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Notification of acceptance for papers</description>
-   <date>20020331</date>
-  </deadline>
-  <deadline kind="camera-ready">
-   <description>Camera-ready due</description>
-   <date>20020515</date>
-  </deadline>
- </event>
-
- <event>
-  <name>Find and Post Mathematics in the Web</name>
-  <url>http://icms.math.tsinghua.edu.cn</url>
-  <description>A workshop on Electronic Information and Communication in Mathematics. Satellite conference of ICM.</description>
-  <where>Beijing</where>
-  <when>
-   <begin>20020829</begin>
-   <end>20020831</end>
-  </when>
-  <deadline kind="submission">
-   <description>Abstracts due</description>
-   <date>20020331</date>
-  </deadline>
- </event>
-
- <event>
-  <name>MathML 2002</name>
-  <url>http://www.mathmlconference.org</url>
-  <where>Chicago</where>
-  <when>
-   <begin>20020628</begin>
-   <end>20020630</end>
-  </when>
-  <deadline kind="submission">
-   <description>Abstracts for papers and panel proposals due</description>
-   <date>20020218</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Notification of acceptance for papers and panels</description>
-   <date>20020311</date>
-  </deadline>
-  <deadline kind="submission">
-   <description>Poster abstracts and demo proposals due</description>
-   <date>20020315</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Notification of acceptance for posters and demos</description>
-   <date>20020329</date>
-  </deadline>
-  <deadline kind="registration">
-   <description>Last day for early registration</description>
-   <date>20020517</date>
-  </deadline>
-  <deadline kind="camera-ready">
-   <description>Deadline for full papers for JSC special issue</description>
-   <date>20020626</date>
-  </deadline>
- </event>
-
- <event>
-  <name>6th International Conference on Electronic Publishing (ELPUB 2002)</name>
-  <url>http://www.tu-chemnitz.de/elpub02/</url>
-  <where>Karlovy Vary, Czech Republic</where>
-  <when>
-   <begin>20021106</begin>
-   <end>20021109</end>
-  </when>
-  <deadline kind="submission">
-   <description>Abstracts due</description>
-   <date>20020215</date>
-  </deadline>
-  <deadline kind="submission">
-   <description>Full papers due</description>
-   <date>20020628</date>
-  </deadline>
- </event>
-
- <event>
-  <name>TPHOLS 2002</name>
-  <url>http://shemesh.larc.nasa.gov/tphols2002</url>
-  <where>Hampton (Virginia)</where>
-  <when>
-   <begin>20020820</begin>
-   <end>20020823</end>
-  </when>
-  <deadline kind="submission">
-   <description>Category A papers due</description>
-   <date>20020222</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Category A notification of acceptance</description>
-   <date>20020422</date>
-  </deadline>
-  <deadline kind="submission">
-   <description>Category B papers due</description>
-   <date>20020517</date>
-  </deadline>
-  <deadline kind="submission">
-   <description>Category A camera-ready copy due</description>
-   <date>20020524</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Category B notification of acceptance</description>
-   <date>20020617</date>
-  </deadline>
-  <deadline kind="camera-ready">
-   <description>Category B camera-ready copy due</description>
-   <date>20020705</date>
-  </deadline>
- </event>
- <event>
-  <name>WWW-2002: Semantic Web Workshop</name>
-  <url>http://semanticweb2002.aifb.uni-karlsruhe.de</url>
-  <description>Workshop associated to WWW2002</description>
-  <where>Hawaii</where>
-  <when>
-   <begin>20020507</begin>
-   <end>20020507</end>
-  </when>
-  <deadline kind="submission">
-   <description>Paper submission</description>
-   <date>20020301</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Notification of acceptance</description>
-   <date>20020401</date>
-  </deadline>
-  <deadline kind="camera-ready">
-   <description>Deadline for final contributions</description>
-   <date>20020415</date>
-  </deadline>
- </event>
- <event>
-  <name>Extreme 2002</name>
-  <url>http://www.extrememarkup.com</url>
-  <where>Montreal Canada</where>
-  <when>
-   <begin>20020806</begin>
-   <end>20020809</end>
-  </when>
-  <deadline kind="submission">
-   <description>Paper Submission</description>
-   <date>20020403</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Speakers Notified</description>
-   <date>20020513</date>
-  </deadline>
-  <deadline kind="camera-ready">
-   <description>Revised Papers Due</description>
-   <date>20020611</date>
-  </deadline>
- </event>
- <event>
-  <name>35 Years of Automath</name>
-  <url>http://www.cee.hw.ac.uk/~fairouz/automath2002/</url>
-  <where>Edinburgh</where>
-  <when>
-   <begin>20020410</begin>
-   <end>20020413</end>
-  </when>
-  <deadline kind="submission">
-   <description>Submission deadline of papers in special issue of an international journal.</description>
-   <date>20020510</date>
-  </deadline>
-  <deadline kind="submission">
-   <description>Submission deadline of special edited book celebrating de Bruijn's 85th anniversary.</description>
-   <date>20020710</date>
-  </deadline>
- </event>
-
- <event>
-  <name>Second International Conference on Mathematical Knowledge Management (MKM 2003)</name>
-  <url>http://www.cs.unibo.it/MKM03</url>
-  <where>Bertinoro (IT)</where>
-  <when>
-   <begin>20030216</begin>
-   <end>20030218</end>
-  </when>
-  <deadline kind="submission">
-   <description>Papers due</description>
-   <date>20020901</date>
-  </deadline>
-  <deadline kind="notification">
-   <description>Notification</description>
-   <date>20021101</date>
-  </deadline>
-  <deadline kind="camera-ready">
-   <description>Camera-ready due</description>
-   <date>20021122</date>
-  </deadline>
- </event>
-</events>
diff --git a/helm/mowgli/home/xml/people/aei/kelley.xml b/helm/mowgli/home/xml/people/aei/kelley.xml
deleted file mode 100644 (file)
index 7312782..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Ian</name>
- <surname>Kelley</surname>
- <position>Programmer</position>
- <e-mail>ikelley@aei-potsdam.mpg.de</e-mail>
-</person>
diff --git a/helm/mowgli/home/xml/people/aei/pollney.xml b/helm/mowgli/home/xml/people/aei/pollney.xml
deleted file mode 100644 (file)
index 76a8ef1..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Dennis</name>
- <surname>Pollney</surname>
- <qualification>Dr.</qualification>
- <e-mail>pollney@aei-potsdam.mpg.de</e-mail>
- <url>http://www.aei.mpg.de/cgi-bin/interface/people.cgi?key=pollney</url>
- <address>
-  Max-Planck-Institut für Gravitationsphysik,
-  Albert-Einstein-Institut,
-  Am Mühlenberg 1,
-  14476 Golm
- </address>
- <telephone>+49 (331) 567-7367</telephone>
- <fax>+49 (331) 567-7298</fax>
-</person>
diff --git a/helm/mowgli/home/xml/people/aei/schutz.xml b/helm/mowgli/home/xml/people/aei/schutz.xml
deleted file mode 100644 (file)
index 5cd0fb9..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Bernard F.</name>
- <surname>Schutz</surname>
- <qualification>Prof.</qualification>
- <position>Institute Director</position>
- <position>Editor-in-Chief</position>
- <position>Member of the Project Coordination Committee
-  of the European IST project MOWGLI</position>
- <e-mail>schutz@aei-potsdam.mpg.de</e-mail>
- <url>http://www.aei-potsdam.mpg.de/cgi-bin/interface/people.cgi?key=schutz</url>
- <curriculum>
-  <p>Prof. Bernard Schutz (born in 1946 in the USA) is director of the Max
-     Planck Institute for Gravitational Physics (Albert Einstein Institute),
-     heading the Astrophysical Relativity Division of the Institute, and
-     Professor at Cardiff University. In acknowledgement of pioneering
-     scientific work in gravitational physics he has been elected Fellow of
-     the American Physical Society. He invented the ``Living Reviews'' concept
-     in 1996 and acts as the journal's Editor-in-chief. Bernard Schutz has
-     served on the Editorial Board of Classical and Quantum Gravity between
-     1988 and 1990, and since 1998 is member of the Editorial Board of the
-     monograph series Studies In High Energy Physics, Cosmology and Gravitation
-     (Institute of Physics Publishing, Bristol, UK).</p>
- </curriculum>
- <selected-publication file="others/cup_s"/>
- <selected-publication file="others/cup_s2"/>
- <selected-publication file="others/jep_ws"/>
- <selected-publication file="others/jep_wwsw"/>
-</person>
diff --git a/helm/mowgli/home/xml/people/aei/velden.xml b/helm/mowgli/home/xml/people/aei/velden.xml
deleted file mode 100644 (file)
index 7198c48..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Theresa</name>
- <surname>Velden</surname>
- <position>Executive Director, CIM</position>
- <e-mail>velden@zim.mpg.de</e-mail>
- <url>http://www.zim.mpg.de</url>
- <address>Heinz Nixdorf Zentrum fuer
-          Informationsmanagement in der
-          Max-Planck-Gesellschaft (ZIM)
-          Boltzmannstrasse 2/ITER Gebaeude
-          D- 85748 Garching</address>
- <telephone>+49(0)89-3299-1550</telephone>
- <fax>+49(0)89-3299-1555</fax>
- <curriculum>
-  <p>Theresa Velden (born in 1970 in Germany) graduated in Physics
-     from Bielefeld University in 1997 after having completed a diploma
-     thesis on Mathematical Relativity at the Max Planck Institute
-     for Gravitational Physics. Since 1998 she has been leading the
-     editorial team of <em>Living Reviews in Relativity</em> as Managing
-     Editor, organizing the editorial process and supervising the
-     development of software for electronic publishing and journal
-     management.</p>
-  <p>In September 2001 she moved to the Max
-     Planck Society's new Heinz Nixdorf Center for Information Management,
-     where she is acting as executive director.</p>
- </curriculum>
-</person>
diff --git a/helm/mowgli/home/xml/people/aei/wegner.xml b/helm/mowgli/home/xml/people/aei/wegner.xml
deleted file mode 100644 (file)
index e9c7fa8..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Bernd</name>
- <surname>Wegner</surname>
- <qualification>Prof.</qualification>
- <position>Full Professor of Mathematics</position>
- <position>Editor-in-chief of Zentralblatt MATH, the most comprehensive
-  literature information service in mathematics, with Web access under
-  EMIS</position>
- <position>Member of the advisory board for MATHDI, an information data base on
-  education in mathematics</position>
- <position>Scientific Coordinator of EMIS, the European Mathematical
-  Information Service, providing a mathematics portal with an electronic
-  library as the main conten</position>
- <position>Leader of the TU-group for the EULER-project, which has developed a
-  prototype for an integrated access to Web-based mathematical documents,
-  funded by Telematics for Libraries, and supported by a small TAKEUP-project
-  for the transition to a regular Web service</position>
- <position>Scientific Director of the LIMES-project (Large Infrastructures in
-  Mathematics - Enhanced Services) which is designed to transform Zentralblatt
-  MATH into European cooperation with Web-based input structures, funded by the
-  Fifth Framework Programme</position>
- <position>Director of the ERAM-project (Electronic Research Archive in
-  Mathematics),funded by Deutsche Forschungsgemeinschaft and designed to build
-  up a digital archive of classical mathematics, capturing the Jahrbuch ueber
-  die Fortschritte in database as a pre-Zentalblatt access facility to the
-  archive</position>
- <position>Chairman of the Electronic Publishing Committee of EMS (European
-  Mathematical Society)</position>
- <position>member of the Database Committee of the EMS</position>
- <position>associated with project Euclid (Cornell University, Ithaka, U.S.A.),
-  establishing a non-profit (electronic) publication facility for
-  mathematics</position>
- <position>member of the board of IWI (Institute for Scientific Information in
-  Osnabrueck)</position>
- <position>Exploitation Manager of the European IST Project MOWGLI</position>
- <e-mail>wegner@math.TU-Berlin.DE</e-mail>
- <url>http://www.zblmath.fiz-karlsruhe.de/people/wegner.html</url>
- <curriculum>
-  <p>He has participated with one or more talks at about 20 events on electronic
-     information and communication in 2000, including continental congresses in
-     Lisbon, Barcelona, Rio de Janeiro, Havanna, Moscow, and Manila. He has been
-     elected as member of the scientific committee for several conferences on
-     the subject in 2001: (Crimea, Athens, Coimbra, Linz, Guatemala City) and
-     received invitations for plenary lectures at additional conferences.</p>
-  <p>These activities give an excellent background to organise the information
-     dissemination and exploitation activities for the project.</p>
- </curriculum>
-</person>
diff --git a/helm/mowgli/home/xml/people/aei/weyher.xml b/helm/mowgli/home/xml/people/aei/weyher.xml
deleted file mode 100644 (file)
index 51cc00c..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Christina</name>
- <surname>Weyher</surname>
- <e-mail>weyher@aei-potsdam.mpg.de</e-mail>
- <url>http://www.aei.mpg.de/cgi-bin/interface/people.cgi?key=weyher</url>
- <address>
-  Max-Planck-Institut für Gravitationsphysik,
-  Albert-Einstein-Institut,
-  Am Mühlenberg 1,
-  14476 Golm
- </address>
- <telephone>+49 (331) 567-7441</telephone>
- <fax>+49 (331) 567-7449</fax>
-</person>
diff --git a/helm/mowgli/home/xml/people/bologna/asperti.xml b/helm/mowgli/home/xml/people/bologna/asperti.xml
deleted file mode 100644 (file)
index a4540b7..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Andrea</name>
- <surname>Asperti</surname>
- <qualification>Prof.</qualification>
- <position>Full Professor of Formal Languages and Compilers</position>
- <position>Member of the Advisory Committee of the World Wide Web</position>
- <position>Former Director of the Undergraduate Program in Computer Science
-   of the University of Bologna</position>
- <position>Responsible of the Bologna site for the European TMR Project
-           LINEAR</position>
- <position>Former Responsible of the Bologna site for the WG-21836
-           CONFER-II</position>
- <position>Main Responsible for the Nation Research Project Linear Logic and
-           beyond</position>
- <position>Project Manager of the European IST Project MOWGLI</position>
- <e-mail>asperti@cs.unibo.it</e-mail>
- <url>http://www.cs.unibo.it/~asperti</url>
- <address>Dipartimento di Scienze dell'Informazione, Mura Anteo Zamboni 7, Bologna, Italy</address>
- <telephone>+39 51 35 45 05</telephone>
- <curriculum>
-  <p>Andrea Asperti was born in Italy, in 1961. He was awarded a Ph.D in
-     Computer Science by the University of Pisa in 1989. In the same year
-     he obtained a post-doc position at INRIA-Rocquencourt, where he was
-     employed as a researcher in 1991. In 1992 he obtained the chair
-     of Formal Languages and Compilers at the Department of
-     Computer Science of the University of Bologna, becoming
-     Full Professor in year 2000.
-     He is currently teaching courses on Programming Languages,
-     Theoretical Computer Science and Human-Computer Interaction.</p>
- </curriculum>
- <research-interests>
-  <p>The research interests of Andrea Asperti are focused on forms,
-     formats and methods of knowledge representation and elaboration.
-     This covers Markup Languages, Information Processing,
-     Programming Languages, Interpreters and
-     Compilers, Type Systems, Higher-order Logics, Linear Logic, Category
-     Theory.  He is author of over 40 international publications on formal
-     aspects of the theory of Computing, and several books.</p>
-  <p>He has been member of the Programme Committees of several
-     International Conferences, comprising CONCUR'98, RTA'99,
-     LICS'99, PPDP'00, CSL'01, MKM'01 (First International Workshop
-     on Mathematical Knowledge Management).</p>
-  <p>His recent scientific activity has been mostly focused on the
-     HELM Project, aimed to build the technological infrastructure
-     for an Hypertextual Electronic Library of Mathematics.</p>
- </research-interests>
- <selected-publication file="others/extreme2001_apss"/>
- <selected-publication file="others/tphols2001_apss"/>
- <selected-publication file="others/crimea2001_apss"/>
- <selected-publication file="others/mathml2000_apss"/>
- <selected-publication file="others/category_al"/>
-</person>
diff --git a/helm/mowgli/home/xml/people/bologna/guidi.xml b/helm/mowgli/home/xml/people/bologna/guidi.xml
deleted file mode 100644 (file)
index a40864b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Ferruccio</name>
- <surname>Guidi</surname>
- <position>Ph.D. Student</position>
- <e-mail>fguidi@cs.unibo.it</e-mail>
- <url>http://www.cs.unibo.it/~fguidi</url>
- <address>Dipartimento di Scienze dell'Informazione, Mura Anteo Zamboni 7, Bologna, Italy</address>
- <telephone>+39 51 20 94 871</telephone>
- <selected-publication file="others/extreme2001_apss"/>
- <selected-publication file="others/tphols2001_apss"/>
- <selected-publication file="others/crimea2001_apss"/>
- <selected-publication file="others/mathml2000_apss"/>
-</person>
diff --git a/helm/mowgli/home/xml/people/bologna/padovani.xml b/helm/mowgli/home/xml/people/bologna/padovani.xml
deleted file mode 100644 (file)
index 6d88775..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Luca</name>
- <surname>Padovani</surname>
- <position>Ph.D. Student</position>
- <position>Member of Math-WG</position>
- <e-mail>lpadovan@cs.unibo.it</e-mail>
- <url>http://www.cs.unibo.it/~lpadovan</url>
- <address>Dipartimento di Scienze dell'Informazione, Mura Anteo Zamboni 7, Bologna, Italy</address>
- <telephone>+39 51 20 94 871</telephone>
- <selected-publication file="others/extreme2001_apss"/>
- <selected-publication file="others/tphols2001_apss"/>
- <selected-publication file="others/crimea2001_apss"/>
- <selected-publication file="others/mathml2000_apss"/>
-</person>
diff --git a/helm/mowgli/home/xml/people/bologna/sacerdoti.xml b/helm/mowgli/home/xml/people/bologna/sacerdoti.xml
deleted file mode 100644 (file)
index 7578030..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Claudio</name>
- <surname>Sacerdoti Coen</surname>
- <position>Ph.D. Student</position>
- <position>Leader of the ``Transformation'' Work-Package of the European
-  IST project MOWGLI</position>
- <e-mail>sacerdot@cs.unibo.it</e-mail>
- <url>http://www.cs.unibo.it/~sacerdot</url>
- <address>Dipartimento di Scienze dell'Informazione, Mura Anteo Zamboni 7, Bologna, Italy</address>
- <telephone>+39 51 20 94 871</telephone>
- <selected-publication file="others/extreme2001_apss"/>
- <selected-publication file="others/tphols2001_apss"/>
- <selected-publication file="others/crimea2001_apss"/>
- <selected-publication file="others/mathml2000_apss"/>
-</person>
diff --git a/helm/mowgli/home/xml/people/bologna/schena.xml b/helm/mowgli/home/xml/people/bologna/schena.xml
deleted file mode 100644 (file)
index fffe796..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Irene</name>
- <surname>Schena</surname>
- <position>Ph. Doctor in Computer Science</position>
- <position>Member of Math-WG</position>
- <e-mail>schena@cs.unibo.it</e-mail>
- <url>http://www.cs.unibo.it/~schena</url>
- <address>Dipartimento di Scienze dell'Informazione, Mura Anteo Zamboni 7, Bologna, Italy</address>
- <telephone>+39 51 20 94 871</telephone>
- <selected-publication file="others/extreme2001_apss"/>
- <selected-publication file="others/tphols2001_apss"/>
- <selected-publication file="others/crimea2001_apss"/>
- <selected-publication file="others/mathml2000_apss"/>
-</person>
diff --git a/helm/mowgli/home/xml/people/dfki/goguadze.xml b/helm/mowgli/home/xml/people/dfki/goguadze.xml
deleted file mode 100644 (file)
index 67d135e..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>George</name>
- <surname>Goguadze</surname>
- <position>Ph.D. Student</position>
- <e-mail>george@activemath.org</e-mail>
- <url>http://www.activemath.org/~george/</url>
- <address>
-  Faculty of Computer Science,
-  University of Saarland,
-  Im.Stadwald 36.1,
-  66123, Saarbruecken,
-  Germany
- </address>
- <telephone>+-49 (681) 302 5322</telephone>
-</person>
diff --git a/helm/mowgli/home/xml/people/dfki/kohlhase.xml b/helm/mowgli/home/xml/people/dfki/kohlhase.xml
deleted file mode 100644 (file)
index 7544fc8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Michael</name>
- <surname>Kohlhase</surname>
- <qualification>Dr.</qualification>
- <e-mail>kohlhase@cs.cmu.edu</e-mail>
- <url>http://www.ags.uni-sb.de/~kohlhase/</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/dfki/libbrecht.xml b/helm/mowgli/home/xml/people/dfki/libbrecht.xml
deleted file mode 100644 (file)
index ab886a0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Paul</name>
- <surname>Libbrecht</surname>
- <position>Ph.D. Student</position>
- <e-mail>paul@activemath.org</e-mail>
- <url>http://www.activemath.org/~paul/</url>
- <address>AG Siekmann, DFKI, Stuhlsatzenhausweg 3, 66123 Saarbr&#x00fc;cken,
-  Germany</address>
- <telephone>+49 681 302 4628</telephone>
- <fax>+49 681 302 5076</fax>
-</person>
diff --git a/helm/mowgli/home/xml/people/dfki/melis.xml b/helm/mowgli/home/xml/people/dfki/melis.xml
deleted file mode 100644 (file)
index 849a256..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Erica</name>
- <surname>Melis</surname>
- <qualification>PD. Dr.</qualification>
- <position>Senior Researcher at the German Research Center for Artificial
-  Intelligence (DFKI GmbH)</position>
- <e-mail>melis@dfki.de</e-mail>
- <url>http://www.ags.uni-sb.de/~melis</url>
- <curriculum>
-  <p>Erica Melis is a Senior Researcher at the German
-     Research Center for Artificial Intelligence (DFKI GmbH). She was a
-     research scientist at the School of Computer Science of Carnegie Mellon
-     University and at the Department of AI at the University of Edinburgh.
-     Later she has been an Assistant Professor at the University of Saarland
-     and is member of a Sonderforschungsbereich in Saarbruecken. She served on
-     numerous programme committees. Erica Melis is the editor of proceedings
-     and the co/author of numerous scientific papers in journals, conferences,
-     and collections in areas such as deduction, planning, case-based
-     reasoning, intelligent tutor systems.</p>
-  <p>Currently, her research interests focus proof planning and on the
-     application of Artificial Intelligence technology in intelligent learning
-     environments.</p>
-  <p>She is a member of AAAI and GI.</p>
- </curriculum>
-</person>
diff --git a/helm/mowgli/home/xml/people/dfki/moschner.xml b/helm/mowgli/home/xml/people/dfki/moschner.xml
deleted file mode 100644 (file)
index 279da18..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Markus</name>
- <surname>Moschner</surname>
- <qualification>Dr.</qualification>
- <position>Member of the Project Exploitation Board
-  of the European IST project MOWGLI</position>
- <e-mail>moschm@ags.uni-sb.de</e-mail>
- <address>
-  Dept. Computer Science,
-  Saarland University,
-  Im Stadtwald,
-  PF    151 150,
-  D-66041 Saarbruecken          
- </address>
- <telephone>+49 0681/302/5003</telephone>
- <fax>+49 0681/302/5076</fax>
-</person>
diff --git a/helm/mowgli/home/xml/people/dfki/siekmann.xml b/helm/mowgli/home/xml/people/dfki/siekmann.xml
deleted file mode 100644 (file)
index de59184..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Joerg</name>
- <surname>Siekmann</surname>
- <qualification>Prof.</qualification>
- <position>Professor of Computer Science</position>
- <position>Director of the Deduction and Multiagent Systems research
-     department at the DFKI</position>
- <e-mail>Joerg.Siekmann@dfki.de</e-mail>
- <url>http://www.dfki.de/~siekmann</url>
- <curriculum>
-  <p>Prof. Dr. Joerg Siekmann is Professor of Computer
-     Science and Director of the Deduction and Multiagent Systems research
-     department at the DFKI. He studied at the University of Goettingen
-     (Mathematics and Physics, 1972) and the University of Essex (M.Sc. in
-     Computer Science, 1973, and Ph.D. in Computer Science, 1976). From 1976
-     to 1983 he was a research assistant at the University of Karlsruhe.
-     From 1983 to 1991 he was Professor of Computer Science at the University
-     of Kaiserslautern and since 1991 he has a joint position as professor for
-     Computer Science at the Universitaet des Saarlandes and as one of the
-     directors at the DFKI. He has published widely in AI, Automated Reasoning
-     and Unification Theory and served on many programme committees and was
-     programme chairman of various conferences (such as CADE, KI etc.). He is
-     editor of several logic and AI oriented scientific journals (such
-     as Journal of Automated Reasoning, Journal of Artificial Intelligence,
-     Journal of Logic and Computation etc). His biography is included
-     in most international Whos Who, as one of the founders of AI in
-     Germany.</p>
- </curriculum>
-</person>
diff --git a/helm/mowgli/home/xml/people/index.xml b/helm/mowgli/home/xml/people/index.xml
deleted file mode 100644 (file)
index adc800c..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE people [
- <!ELEMENT people (from*)>
- <!ELEMENT from (person*)>
- <!ATTLIST from
-           site CDATA #REQUIRED>
- <!ELEMENT person EMPTY>
- <!ATTLIST person
-           file CDATA #REQUIRED>
-]>
-
-<people>
- <from site="bologna">
-  <person file="asperti"/>
-  <person file="guidi"/>
-  <person file="padovani"/>
-  <person file="sacerdoti"/>
-  <person file="schena"/>
- </from>
- <from site="inria">
-  <person file="herbelin"/>
-  <person file="amerkad"/>
-  <person file="bertot"/>
-  <person file="chicli"/>
-  <person file="delahaye"/>
-  <person file="naciri"/>
-  <person file="pottier"/>
-  <person file="rideau"/>
-  <person file="thery"/>
-  <person file="werner"/>
- </from>
- <from site="dfki">
-  <person file="siekmann"/>
-  <person file="kohlhase"/>
-  <person file="melis"/>
-  <person file="moschner"/>
-  <person file="goguadze"/>
-  <person file="libbrecht"/>
- </from>
- <from site="nijmegen">
-  <person file="geuvers"/>
-  <person file="cohen"/>
-  <person file="barendregt"/>
-  <person file="wiedijk"/>
-  <person file="barreiro"/>
-  <person file="cruz-filipe"/>
-  <person file="niqui"/>
-  <person file="stein"/>
-  <person file="synek"/>
- </from>
- <from site="aei">
-  <person file="schutz"/>
-  <person file="wegner"/>
-  <person file="pollney"/>
-  <person file="kelley"/>
-  <person file="velden"/>
-  <person file="weyher"/>
- </from>
- <from site="trusted-logic">
-  <person file="bolignano"/>
-  <person file="gimenez"/>
- </from>
-</people>
diff --git a/helm/mowgli/home/xml/people/inria/amerkad.xml b/helm/mowgli/home/xml/people/inria/amerkad.xml
deleted file mode 100644 (file)
index 462e432..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Ahmed</name>
- <surname>Amerkad</surname>
- <e-mail>Ahmed.Amerkad@inria.fr</e-mail>
- <url>http://www-sop.inria.fr/lemme/Ahmed.Amerkad</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/inria/bertot.xml b/helm/mowgli/home/xml/people/inria/bertot.xml
deleted file mode 100644 (file)
index 6ad788c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Yves</name>
- <surname>Bertot</surname>
- <position>Researcher</position>
- <e-mail>Yves.Bertot@sophia.inria.fr</e-mail>
- <url>http://www-sop.inria.fr/lemme/Yves.Bertot</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/inria/chicli.xml b/helm/mowgli/home/xml/people/inria/chicli.xml
deleted file mode 100644 (file)
index 095ad41..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Laurent</name>
- <surname>Chicli</surname>
- <position>Ph.D. Student</position>
- <e-mail>Laurent.Chicli@sophia.inria.fr</e-mail>
- <url>http://www-sop.inria.fr/lemme/Laurent.Chicli</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/inria/delahaye.xml b/helm/mowgli/home/xml/people/inria/delahaye.xml
deleted file mode 100644 (file)
index b25f922..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>David</name>
- <surname>Delahaye</surname>
- <position>Ph.D. Student</position>
- <e-mail>David.Delahaye@inria.fr</e-mail>
- <url>http://pauillac.inria.fr/~delahaye</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/inria/herbelin.xml b/helm/mowgli/home/xml/people/inria/herbelin.xml
deleted file mode 100644 (file)
index 99025a5..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Hugo</name>
- <surname>Herbelin</surname>
- <qualification>Prof.</qualification>
- <position>Associate Professor at University Paris 10</position>
- <position>Seconded at INRIA</position>
- <position>Member of the Project Exploitation Board
-  of the European IST project MOWGLI</position>
- <e-mail>Hugo.Herbelin@inria.fr</e-mail>
- <url>http://pauillac.inria.fr/~herbelin</url>
- <address>Domaine de Voluceau, 78153 Rocquencourt Cedex, France</address>
- <telephone>+33 (0) 1 39 63 53 77</telephone>
- <curriculum>
-  <p>Born June 9, 1967.</p>
- </curriculum>
-</person>
diff --git a/helm/mowgli/home/xml/people/inria/naciri.xml b/helm/mowgli/home/xml/people/inria/naciri.xml
deleted file mode 100644 (file)
index 95dd741..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Hanane</name>
- <surname>Naciri</surname>
- <position>Ph.D. Student</position>
- <e-mail>Hanane.Naciri@sophia.inria.fr</e-mail>
- <url>http://www-sop.inria.fr/lemme/Hanane.Naciri</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/inria/pottier.xml b/helm/mowgli/home/xml/people/inria/pottier.xml
deleted file mode 100644 (file)
index 33c1a93..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Loic</name>
- <surname>Pottier</surname>
- <position>Researcher</position>
- <position>Leader of the ``Interfaces'' Work-Package of the European
-  IST project MOWGLI</position>
- <e-mail>Loic.Pottier@sophia.inria.fr</e-mail>
- <url>http://www-sop.inria.fr/lemme/Loic.Pottier</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/inria/rideau.xml b/helm/mowgli/home/xml/people/inria/rideau.xml
deleted file mode 100644 (file)
index 1e90e64..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Laurence</name>
- <surname>Rideau</surname>
- <position>Researcher</position>
- <position>Member of the Project Coordination Committee
-  of the European IST project MOWGLI</position>
- <e-mail>Laurence.Rideau@sophia.inria.fr</e-mail>
- <url>http://www-sop.inria.fr/lemme/Laurece.Rideau</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/inria/thery.xml b/helm/mowgli/home/xml/people/inria/thery.xml
deleted file mode 100644 (file)
index 79caf6f..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Laurent</name>
- <surname>Thery</surname>
- <position>Researcher</position>
- <e-mail>Laurent.Thery@sophia.inria.fr</e-mail>
- <url>http://www-sop.inria.fr/lemme/Laurente.Thery</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/inria/werner.xml b/helm/mowgli/home/xml/people/inria/werner.xml
deleted file mode 100644 (file)
index 746624e..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Benjamin</name>
- <surname>Werner</surname>
- <qualification>Dr.</qualification>
- <position>Permanent researcher at INRIA.</position>
- <position>Teaching a graduate course at Université Paris 7 and
-  undergraduate course at ENSTA.</position>
- <e-mail>Benjamin.Werner@inria.fr</e-mail>
- <url>http://logical.inria.fr/~werner/</url>
- <curriculum>
-  <p>Benjamin Werner was born in 1966. He graduated from Ecole Polytechnique
-     in 1989 and was awarded a PhD in computer science form université
-     Paris 7 in 1994. He is since a researcher at INRIA-Rocquencourt,
-     working on logical formalisms, type theory and the proof system Coq.</p>
- </curriculum>
-</person>
diff --git a/helm/mowgli/home/xml/people/nijmegen/barendregt.xml b/helm/mowgli/home/xml/people/nijmegen/barendregt.xml
deleted file mode 100644 (file)
index e509f74..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Henk</name>
- <surname>Barendregt</surname>
- <qualification>Prof.</qualification>
- <position>Full Professor, Nijmegen</position>
- <e-mail>henk@cs.kun.nl</e-mail>
- <url>http://www.cs.kun.nl/~henk</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/nijmegen/barreiro.xml b/helm/mowgli/home/xml/people/nijmegen/barreiro.xml
deleted file mode 100644 (file)
index ab70ec6..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Ernesto Reinaldo</name>
- <surname>Barreiro</surname>
- <position>Ph.D. Student, Eindhoven</position>
- <e-mail>ereinald@win.tue.nl</e-mail>
-</person>
diff --git a/helm/mowgli/home/xml/people/nijmegen/cohen.xml b/helm/mowgli/home/xml/people/nijmegen/cohen.xml
deleted file mode 100644 (file)
index 5dde5b1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Arjeh</name>
- <surname>Cohen</surname>
- <qualification>Prof.</qualification>
- <position>Full Professor, Eindhoven</position>
- <e-mail>A.M.Cohen@tue.nl</e-mail>
- <url>http://www.win.tue.nl/~amc</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/nijmegen/cruz-filipe.xml b/helm/mowgli/home/xml/people/nijmegen/cruz-filipe.xml
deleted file mode 100644 (file)
index 6ac44ef..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Lu&#x0ed;s</name>
- <surname>Cruz-Filipe</surname>
- <position>Ph.D. Student, Nijmegen</position>
- <e-mail>lcf@cs.kun.nl</e-mail>
- <url>http://www.cs.kun.nl/~lcf</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/nijmegen/geuvers.xml b/helm/mowgli/home/xml/people/nijmegen/geuvers.xml
deleted file mode 100644 (file)
index 65337f6..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Herman</name>
- <surname>Geuvers</surname>
- <qualification>Prof.</qualification>
- <position>Associate Professor in Foundations of Mathematics and Computer
-  Science</position>
- <position>Responsible for the Nijmegen-Utrecht site of the EC Thematic
-  Network ``TYPES'' (Computer Assisted Reasoning Based on Type Theory),
-  IST-1999-29001</position>
- <position>President of the education committee of the Sub-faculty of
-  Computer Science at the University of Nijmegen</position>
- <position>Former member of the Management Board of the Dutch
-  research school IPA (Institute for Programming Research and
-  Algorithmics)</position>
- <position>Member of the Project Coordination Committee and of the
-  Project Exploitation Board of the European IST project MOWGLI</position>
- <position>Leader of the ``Requirement Analysis'' and ``Testing'' Work-Packages
-  of the European IST project MOWGLI</position>
- <e-mail>herman@cs.kun.nl</e-mail>
- <url>http://www.cs.kun.nl/~herman</url>
- <address>Faculteit NWI, KUN, Toernooiveld 1, 6525 ED Nijmegen, NL</address>
- <telephone>+31 243 652603</telephone>
- <curriculum>
-  <p>Herman Geuvers studied Mathematics at the University of Nijmegen and
-     got his Ph.D. in Mathematics and Computer Science in 1993 at the same
-     University. In the same year he became assistant professor in computer
-     science at the Eindhoven University of Technology in the Formal
-     Methods group. From January 1st 2000, he is associate professor at the
-     Department of Computer Science of the University of Nijmegen in the
-     Foundations group. He is currently teaching in Formal Languages and
-     Computability and Type Theory.</p>
- </curriculum>
- <research-interests>
-  <p>The research interests of Herman
-     Geuvers are: Formalization of Mathematics, Interactive Theorem
-     Proving, Higher-order Logics, Communicating Formal Mathematics, Type
-     Theory and lambda-calculus. His recent scientific activities range from
-     the study of formal theories (especially typed lambda-calculi) to
-     doing large theory developments in theorem provers, notably the
-     formalization of the fundamental theorem of algebra in Coq.</p>
- </research-interests>
- <selected-publication file="others/mscs_gb"/>
- <selected-publication file="others/tphols2000_gwz"/>
- <selected-publication file="others/tcs2001_og"/>
- <selected-publication file="others/har_bg"/>
- <selected-publication file="others/jlp2001_scg"/>
-</person>
diff --git a/helm/mowgli/home/xml/people/nijmegen/niqui.xml b/helm/mowgli/home/xml/people/nijmegen/niqui.xml
deleted file mode 100644 (file)
index 6d11633..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Milad</name>
- <surname>Niqui</surname>
- <position>Ph.D. student, Nijmegen</position>
- <e-mail>milad@cs.kun.nl</e-mail>
- <url>http://www.cs.kun.nl/~milad</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/nijmegen/stein.xml b/helm/mowgli/home/xml/people/nijmegen/stein.xml
deleted file mode 100644 (file)
index d3d1552..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Jasper</name>
- <surname>Stein</surname>
- <position>Ph.D. Student, Nijmegen</position>
- <e-mail>jasper@cs.kun.nl</e-mail>
- <url>http://www.cs.kun.nl/~jasper</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/nijmegen/synek.xml b/helm/mowgli/home/xml/people/nijmegen/synek.xml
deleted file mode 100644 (file)
index a230637..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Dan</name>
- <surname>Synek</surname>
- <position>Programmer, Nijmegen</position>
- <e-mail>synek@cs.kun.nl</e-mail>
- <url>http://www.cs.kun.nl/~synek</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/nijmegen/wiedijk.xml b/helm/mowgli/home/xml/people/nijmegen/wiedijk.xml
deleted file mode 100644 (file)
index 1244fe6..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Freek</name>
- <surname>Wiedijk</surname>
- <qualification>Dr.</qualification>
- <position>Post Doc Researcher, Nijmegen</position>
- <e-mail>freek@cs.kun.nl</e-mail>
- <url>http://www.cs.kun.nl/~freek</url>
-</person>
diff --git a/helm/mowgli/home/xml/people/person.dtd b/helm/mowgli/home/xml/people/person.dtd
deleted file mode 100644 (file)
index dd783fa..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<!ELEMENT person  (name,surname,qualification?,position*,e-mail,url?,address?,telephone?,fax?,curriculum?,research-interests?,selected-publication*)>
-<!ELEMENT name (#PCDATA)>
-<!ELEMENT surname (#PCDATA)>
-<!ELEMENT qualification (#PCDATA)>
-<!ELEMENT position (#PCDATA)>
-<!ELEMENT e-mail (#PCDATA)>
-<!ELEMENT url (#PCDATA)>
-<!ELEMENT address (#PCDATA)>
-<!ELEMENT telephone (#PCDATA)>
-<!ELEMENT fax (#PCDATA)>
-<!ELEMENT curriculum (p|dl|ul)+>
-<!ELEMENT research-interests (p|dl|ul)+>
-<!ELEMENT selected-publication EMPTY>
-<!ATTLIST selected-publication
-          file CDATA #REQUIRED>
-
-<!-- A subset of XHTML -->
-<!ELEMENT p (#PCDATA|em|a)*>
-<!ELEMENT em (#PCDATA)>
-<!ELEMENT a (#PCDATA)>
-<!ATTLIST a
-          href CDATA #REQUIRED>
-<!ELEMENT dl (dt|dd)+>
-<!ELEMENT dt (#PCDATA)>
-<!ELEMENT dd (#PCDATA)>
-<!ELEMENT ul (li)+>
-<!ELEMENT li (#PCDATA)>
diff --git a/helm/mowgli/home/xml/people/trusted-logic/bolignano.xml b/helm/mowgli/home/xml/people/trusted-logic/bolignano.xml
deleted file mode 100644 (file)
index 7b0d92c..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Dominique</name>
- <surname>Bolignano</surname>
- <position>Chairman and Chief Executive Officer of Trusted Logic</position>
- <position>Part-time Full Professor at the Université Paris-Dauphine</position>
- <!-- <e-mail>Dominique.Bolignano@trusted-logic.fr</e-mail> -->
- <e-mail>mowgli@trusted-logic.fr</e-mail>
- <curriculum>
-  <p>Dominique Bolignano is Chairman and Chief Executive Officer of
-     Trusted Logic. He also teaches security and languages as a part-time
-     full professor (Professeur Associé) at the Université Paris-Dauphine.
-     From 1996 to 1999,  Dominique Bolignano worked with Dyade, a joint
-     venture between Bull and INRIA (French National Research Institute
-     in Computer Science and Control), as Director, Responsible for
-     technology transfer in security, electronic commerce, and smart cards,
-     and Project Director in the following areas : formal verification of
-     electronic commerce protocols (and more generally cryptographic protocols),
-     evaluation or design of security architectures  (mainly for secure
-     embedded systems, such as smart cards, payment terminals, GSM phones,
-     etc.), development of highly secure Java Virtual Machines (Bull Odyssey
-     JavaCard, payment terminals), formal methods for ITSEC and Common
-     Criteria security evaluations (participation to various security
-     evaluations including some on smart cards operating systems).
-     Before that, Dominique Bolignano was the head of a research group
-     in the Corporate Research Centre of Bull and he has acquired, from
-     1982 to 1996, a deep experience in industry software development and
-     formal verification systems (distributed systems, security protocols).
-     Dominique Bolignano takes part in the Java Card Forum. He also is a
-     Member of the newly created IFIP Working group on Foundations of Security
-     Analysis and Design. He has been an invited speaker at MFPS'98, CAV'99,
-     CARI'98, CIRM'98, JFMM'98, RTCS'96, Cartier'96, FemSys'97, and to many
-     security or formal methods symposia and presented invited tutorials at
-     Forte'98, Cartier'96, Forte'93. Dominique Bolignano also acted as a PhD
-     advisor, as a reviewer and evaluator for European Community programs.
-     He is a reviewer in several journals (Journal of Theoretical
-     Computer Science (TCS), TSI, ...) and has been a reviewer and/or
-     a member of the Program Committee in international
-     conferences (SESS'93, FME'96,VDM 91 et FORTE 92, SaS'94, ...)</p>
- </curriculum>
-</person>
diff --git a/helm/mowgli/home/xml/people/trusted-logic/gimenez.xml b/helm/mowgli/home/xml/people/trusted-logic/gimenez.xml
deleted file mode 100644 (file)
index 70113c7..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Eduardo</name>
- <surname>Gimenez</surname>
- <qualification>Dr.</qualification>
- <!-- <e-mail>Eduardo.Gimenez@trusted-logic.fr</e-mail> -->
- <e-mail>mowgli@trusted-logic.fr</e-mail>
- <url>http://pauillac.inria.fr/~gimenez/</url>
- <address>5, rue du Bailliage 78000 Versailles FRANCE</address>
- <telephone>+33 - 1 30 97 25 13</telephone>
- <fax>+33 - 1 30 97 25 19</fax>
- <research-interests>
-  <p>The keywords of my work are : formal methods, program specification and
-     program certification, type theory, proof environments, Java cards,
-     information security.</p>
-  <p>My work concerns the application of type theory as a programming logic for
-     developping certified programs. I am specially interested in verifying
-     security properties concerning  open embedded systems like Java smart
-     cards.</p>
- </research-interests>
-</person>
diff --git a/helm/mowgli/home/xml/people/trusted-logic/loiseaux.xml b/helm/mowgli/home/xml/people/trusted-logic/loiseaux.xml
deleted file mode 100644 (file)
index 7ff442f..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE person SYSTEM "../person.dtd">
-
-<person>
- <name>Claire</name>
- <surname>Loiseaux</surname>
- <!-- <e-mail>Claire.Loiseaux@trusted-logic.fr</e-mail> -->
- <e-mail>mowgli@trusted-logic.fr</e-mail>
- <position>Member of the Project Coordination Committee
-  of the European IST project MOWGLI</position>
- <position>Member of the Project Exploitation Board
-  of the European IST project MOWGLI</position>
- <address>5, rue du Bailliage 78000 Versailles FRANCE</address>
- <telephone>+33 - 1 30 97 25 00</telephone>
- <fax>+33 - 1 30 97 25 19</fax>
-</person>
diff --git a/helm/mowgli/home/xml/project.xml b/helm/mowgli/home/xml/project.xml
deleted file mode 100644 (file)
index a31a497..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE project [
- <!ELEMENT project (full_title,acronym,type,type_acronym,proposal_contract_no,operative_commencement_of_contract,proposal)>
- <!ELEMENT full_title (#PCDATA)>
- <!ELEMENT acronym (#PCDATA)>
- <!ELEMENT type (#PCDATA)>
- <!ELEMENT type_acronym (#PCDATA)>
- <!ELEMENT proposal_contract_no (#PCDATA)>
- <!ELEMENT operative_commencement_of_contract (#PCDATA)>
- <!ELEMENT proposal (ul)+>
-
-<!-- A subset of XHTML -->
- <!ELEMENT ul (li)+>
- <!ELEMENT li (a)+>
- <!ELEMENT a (#PCDATA)>
- <!ATTLIST a
-          target CDATA #IMPLIED
-          href CDATA #REQUIRED>
-]>
-
-<project>
- <full_title>Mathematics On the Web: Get it by Logic and Interfaces</full_title>
- <acronym>MOWGLI</acronym>
- <type>Information Society Technologies Programme</type>
- <type_acronym>IST</type_acronym>
- <proposal_contract_no>IST-2001-33562 MOWGLI</proposal_contract_no>
- <operative_commencement_of_contract>20020301</operative_commencement_of_contract>
- <proposal>
-  <ul>
-   <li><a href="proposal/project-summary.html">Summary</a></li>
-   <li><a href="proposal/project-objectives.html">Objectives</a></li>
-   <li><a href="proposal/project-management.html">Management</a></li>
-   <li><a href="proposal/contribution.html">Contribution to programme/key action objectives</a></li>
-   <li><a href="proposal/innovation.html">Innovation</a></li>
-   <li><a href="proposal/EC-contribution.html">Contribution to policies of the European Community</a></li>
-   <li><a href="proposal/econ-scient-tech-prospects.html">Economic development and Scientific and Technological Prospects</a></li>
-   <li><a href="proposal/project-planning.html">Project Planning and timetable</a></li>
-   <li><a href="proposal/project-components.html">Graphical presentation of projects components</a></li> 
-  </ul>
- </proposal>
-
-</project>
diff --git a/helm/mowgli/home/xml/proposal/EC-contribution.xml b/helm/mowgli/home/xml/proposal/EC-contribution.xml
deleted file mode 100644 (file)
index cc9c4b9..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html>
- <head>
-   <title>Contribution to policies of the European Community</title>
- </head>
- <body>
-
- <table width="550">
-   <tr>
-    <td>
-     <a href="innovation.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="econ-scient-tech-prospects.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
-  <br/>
-
-  <h1>Community added value and contribution to EC policies</h1>
-  <p>The Project relies in an essential way on the convergence of information 
-     processing, communication and new media, meeting the main policy issue of 
-     the IST programme. In fact, due to its very nature, mathematical 
-     information is particularly suited to an integrated analysis under the 
-     different perspectives of elaboration, communication and (hyper)media 
-     publishing, providing a main arena for innovative experiments and 
-     solutions, especially in view of the new technological frontier of the 
-     Semantic Web.</p>
-  <p>The Project also tries to answer to a clear need for wider 
-     interoperability and coherence in the realm of mathematics over the Web, 
-     especially for educational, scientific and commercial purposes.</p>
-  <p>Electronic textbooks are rapidly becoming a main tool for education and 
-     knowledge dissemination. Electronic textbooks must be interactive, 
-     allowing intercommunication between the text and scientific software and 
-     graphics. This is very hard to achieve starting form a mere presentational
-     description of the information, clearly requiring a sophisticated 
-     semantical description of the content.</p>
-  <p>Similarly, the academic and commercial research communities generate large
-     volume of dense scientific material. Increasingly, research publications 
-     are being stored in databases, especially for those areas of physics and 
-     mathematics where academic journal prices have been growing at an 
-     unsustainable rate. Still, however, the information is stored in a format 
-     which is machine readable but not machine understandable; in particular it
-     is not suitable for any form of elaboration other than its rendering. 
-     MOWGLI's content and metadata levels are exactly meant to address complex 
-     elaboration requirements, and to facilitate the maintenance and 
-     operability of large document collections, for which automatic searching 
-     and indexing are crucial.</p>
-  <p>Corporate and academic scientists and engineers also use technical 
-     documents in their work to collaborate, to record results of experiments 
-     and computer simulations, and to verify calculations. The Web is, 
-     potentially, the natural media for sharing this information; MOWGLI is 
-     meant to provide the basic technology to transform this potentiality into 
-     an actual possibility.</p>
-  <p>Commercial publishers are also involved with mathematics on the Web at all
-     levels from electronic versions of printed books to interactive textbooks 
-     and academic journals. In this case, MOWGLI offers support for advanced 
-     capabilities, such as browsing, interactivity, presentational and 
-     stylistic customisation, and advanced searching and retrieving 
-     features.</p>
-  <p>The project deals with problems traditionally belonging to different 
-     scientific communities: digital libraries, Web publishing, automation of 
-     mathematics and computer aided reasoning. Any serious solution needs a 
-     coordinated effort of all these groups and a synergy of their different 
-     expertise. The members of the consortium have been also carefully chosen 
-     for their experience in the above mentioned areas. From this interaction,
-     we expect to develop new technologies  and solutions, <i>fostering 
-     innovation</i> towards the construction of the Semantic Web.</p>
-  <p>MOWGLI contributes in the <i>spread of information and know-how</i>, since
-     new information technologies will be applied to realms such as education 
-     and publishing, which are traditionally not very inclined to innovation.
-     More <i>competitiveness</i> will be acquired both by the end users of the 
-     system and by the technology providers, which will eventually profit by 
-     the expertise gained by applying new and emerging technologies to the huge
-     and compelling problem of the management of mathematical documents over 
-     the Web.</p>
-  <p>By opening new perspectives in the domains of interactive publishing and 
-     education, MOWGLI suggests <i>new job-profiles</i> in these domains, and 
-     <i>increases job opportunities</i> in the Information Society sector.</p>
-  <p>Finally, the <i>social and cultural cohesion</i> of Europe is eventually 
-     strengthened by the creation of a large distributed repositories of 
-     scientific knowledge.</p>
-
-  <h1>Contribution to Community Social Objectives</h1>
-  <p>The quality of life, in a civilised country, strictly depends on the 
-     quality of its services, and in particular on the attention devoted to 
-     those services aimed to preserve, increase and make accessible to a wider 
-     audience its cultural and scientific heritage. Building a user friendly 
-     Information Society, with particular emphasis on digital heritage, 
-     cultural content and education is indeed a main social objective of the 
-     European Community.</p>
-  <p>The new Information Society is essentially based on the convergence of 
-     information, communication and networking technologies and takes 
-     advantage of infrastructures like the Internet and the Web.</p>
-  <p>Our project builds on these grounds, to create the technological
-     infrastructure required for the creation and maintenance of a digital 
-     knowledge base of <i>structured</i> mathematical information, universally
-     and seamlessly accessible to all people, and in particular to students and
-     professionals, through interoperable, dependable and affordable products 
-     and services.</p>
-  <p>From the educational point of view, our system could easily become a main 
-     tool for a wider and more friendly dissemination of mathematical 
-     knowledge. Indeed, its interactive nature, and the possibility to access 
-     single information units, and possibly applying them, provides a more 
-     operational and far less abstract comprehension of mathematical entities, 
-     and should naturally induce the user to play with the knowledge base, 
-     assembling components in the development of new theorems and results.
-     From the educational point of view, our system could easily become a main
-     tool for a wider and more friendly dissemination of mathematical 
-     knowledge. Indeed, its interactive nature, and the possibility to access 
-     single information units, and possibly applying them, provides a more 
-     operational and far less abstract comprehension of mathematical entities, 
-     and should naturally induce the user to play with the knowledge base, 
-     assembling components in the development of new theorems and results.</p>
-  <p>From the point of view of employment and development of individual skills,
-     there are two different aspects to be considered, according to the 
-     <i>objectives</i> and the <i>methodology</i> of the project.</p>
-  <p>From the methodological point of view, the project makes an essential use
-     of technologies which are the very foundations of the information society,
-     driving their development, enhancing their applicability, and accelerating
-     their take up in Europe. In particular, we shall build on most of the 
-     recent recommendations of the World Wide Web Consortium (W3C), like XML, 
-     DOM, XSL, XLL, MathML, RDF, etc. testing their applicability to the 
-     definition of a comprehensive, integrated description of a given field of 
-     knowledge.</p>
-  <p>This kind of tools and techniques is of crucial importance in the 
-     development of the Web and of the Information Technology of the next 
-     years, and our project could play a major role in their dissemination in 
-     Europe, and in training people in their use.</p>
-  <p>On the other side, MOWGLI itself could become a major source of 
-     inspiration for the re-invention of existing activities, and in particular
-     for the exploitation of new business in the publishing market. Currently,
-     digital journals just offer purely textual objects:  our project could 
-     help to define new market possibility for content-based publishing (i.e. 
-     structured, possibly formal mathematical developments), with all the 
-     potentialities offered by this approach, from browsing facilities, to the 
-     personalisation of the style, from enhanced forms of searching, to more 
-     or less arbitrarily complex forms of elaboration.</p>
-  <p>Our system also opens new perspectives on the mechanisation of mathematics
-     and the automation of formal reasoning. The growing complexity of advanced
-     technological projects (in the areas of electronic and avionic 
-     engineering, for example) has recently arose a renewed interest in formal 
-     methods. From this respect, our project contributes to build an essential
-     infrastructure for the exploitation of these methods, providing a major 
-     help for professionals, and fostering their skills.</p>
-  <p>Let us finally remark that the project has no negative impact on the 
-     natural environment. We could even claim a few benefits, related to the 
-     electronic distribution of documents, such as the minimisation in the use 
-     of means of conveyance and the saving of paper.</p>
-  <p>The possible customisation via suitable style-sheets of <i>structured</i> 
-     electronic documents could also meet the needs of particular users, such 
-     as disabled (in particular, disabled students) or elderly (as retired 
-     researchers who would like to continue their professional activity), 
-     providing at the same time comfortable working conditions (e.g. at home).
-     Another general design requirement is the ability to render mathematical 
-     material in other media such as speech or braille, which is extremely 
-     important for the visually impaired.</p>
-  <p>In conclusion, the aim of our work is to contribute to the creation of the
-     next generation of user-friendly, dependable and interoperable 
-     general-interest services, meeting user demands for flexible access, for 
-     everybody, from anywhere, at any time.</p>
-
- <br/>
-
- <table width="550">
-   <tr>
-    <td>
-     <a href="innovation.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="econ-scient-tech-prospects.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
- </body>
-</html>
diff --git a/helm/mowgli/home/xml/proposal/contribution.xml b/helm/mowgli/home/xml/proposal/contribution.xml
deleted file mode 100644 (file)
index 8442270..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html>
- <head>
-   <title>Contribution to programme/key action objectives</title>
- </head>
- <body>
-
- <table width="550">
-   <tr>
-    <td>
-     <a href="project-management.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="innovation.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
-  <br/>
-
-  <h1>Contribution to programme/key action objectives</h1>
-  <p>The Project contributes to build a user friendly information society, and
-     in particular it meets the following general objectives of this 
-     program:</p>
-  <ol>
-   <li>(multimedia content) confirming Europe as a leading force in this field,
-  realizing the potential of its creativity and culture;</li>
-   <li>(essential technologies and infrastructure) enabling technologies which
-       are the foundations of the information society, driving their 
-       development, enhancing their applicability, and accelerating their take 
-       up in Europe.</li>
-  </ol>
-  <p>As a matter of fact, the project is based in an essential way on the use 
-     of most part of the recent recommendations of the World Wide Web 
-     Organization for Web publishing and human-computer interaction (XML, XSL, 
-     XLL, Namespaces, MathML, RDF, etc.). In particular, we aim to prove how 
-     all these specifications naturally fit together, when trying to build a 
-     full, integrated description (comprising content, notation, metadata, 
-     etc.) of a given field of knowledge. At our knowledge, the project is the 
-     first of the kind, and could become a paradigmatic example in the 
-     integrated use of these technologies.</p>
-  <p>The project also addresses most of the issues of the multimedia content 
-     key action, namely: electronic publishing, digital heritage and cultural 
-     content, education, information access, filtering and handling. Actually, 
-     all these aspects are and must be covered in our project, in order to 
-     reach our objectives. In particular, the educational potential of our 
-     system should not be neglected either: it could become an essential tool 
-     for a wider and more friendly dissemination of mathematical knowledge. For
-     instance, if supported by a suitable technology, proving theorems in a 
-     proof assistant could be as amusing as playing a video game. We imagine 
-     bunches of young researchers contributing to the free development of the 
-     library for the mere gratification of seeing their name as actual editor 
-     (or, why not, original author) of a specific fragment.</p>
-  <p>Finally, the project is particularly related to the specific key-action 
-     III.2.3 (access to scientific and cultural heritage). In fact, the aim 
-     of our system is exactly to improve access by students and professionals 
-     to the fast-growing mathematical knowledge base, allowing mathematical 
-     documents to be retrieved, served, and processed directly on the Web. More
-     over, our system is meant to be compatible with most of the existing tools
-     for the mechanisation of mathematics and the automation of formal 
-     reasoning (proof assistants and logical frameworks). The possibility to 
-     build coherent sub-libraries of formal mathematical developments would 
-     provide an essential (and unique) added value to the library itself, 
-     making of Europe a leader in this area.</p>
-  <p>Maybe, having the possibility to process, analyse and elaborate 
-     mathematical structures as data, the time will come when we shall finally
-     be able to start a completely new and exciting field of research on 
-     mathematics: namely a scientific, empirical study on the <i>real</i> 
-     structure of mathematical entities, and the ``way of thinking'' of 
-     mathematicians.</p>
-
- <br/>
-
- <table width="550">
-   <tr>
-    <td>
-     <a href="project-management.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="innovation.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
- </body>
-</html>
diff --git a/helm/mowgli/home/xml/proposal/econ-scient-tech-prospects.xml b/helm/mowgli/home/xml/proposal/econ-scient-tech-prospects.xml
deleted file mode 100644 (file)
index 9114d80..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html>
- <head>
-   <title>Economic development and Scientific and Technological Prospects</title>
- </head>
- <body>
-
- <table width="550">
-   <tr>
-    <td>
-     <a href="EC-contribution.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="project-planning.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
-  <br/>
-
-  <h1>Economic development and Scientific and Technological Prospects</h1>
-
-  <h2>Identification of exploitable results</h2>
-  <p>MOWGLI is meant to develop, evaluate, fine-tune and deliver a complete 
-     prototype supporting friendly and interactive access to huge, distributed 
-     repositories of content-based mathematical knowledge. The purpose of the 
-     project is to overcome some of the main obstacles that currently hinder a
-     wider dissemination of Information Technologies in the mathematical and 
-     research community (comprising both professionals and students). This is 
-     intended as a public service for the whole community of users, and we 
-     expect no direct commercial profit by our work.</p>
-  <p>Of course, the core technologies and languages developed in MOWGLI may be
-     exploited in a lot of different ways, according to the nature and 
-     exploitation plan of each partner.</p>
-  <p>In particular, it should be clear that having a coherent, distributed 
-     library of structured mathematical knowledge, saved in a clearly defined,
-     well documented and application independent format, is just the starting 
-     point of a wider, potentially enormous process. Building on the grounds 
-     provided by MOWGLI, a lot of different services can be imagined, and 
-     independently developed by different organisations. Inside the project, we
-     shall just give a few hints in this direction, supporting advanced and 
-     interactive forms of searching and navigation, as well as automatic 
-     validation facilities, for suitable fragments of the library.</p>
-
-  <h2>Target Market</h2>
-  <p>The main target market of MOWGLI is education. Here, the potentiality 
-     offered by a semantic description of the information for the development 
-     of interactive, electronic textbooks are enormous. In particular, the 
-     MOWGLI prototype could become an essential tool for a wider and more 
-     friendly dissemination of mathematical knowledge.</p>
-  <p>A second, potential market is Publishing. Digital libraries currently 
-     suffers from clear limitations due to the machine-readable but not 
-     machine understandable encoding of the information. No other kind of 
-     elaboration than displaying or printing is usually possible. There is no 
-     possibility of cut-and paste, formal checking, complex searching. For 
-     instance, we cannot write a spider going around searching for a proof with
-     a given template, because there is not structure, and in particular no 
-     semantics inside the text.</p>
-  <p>A third market are industries specialised in formal verification and 
-     security. These industries are usually asked to check a given system or 
-     protocol for security issues or formal validation of functional/temporal 
-     behaviour. The result of the formalisation work and its automatic 
-     validation is typically in an internal format which is obscure even to 
-     experts. Studying the possibility to automatically generate a more 
-     friendly presentation in usual mathematical notation is thus a major 
-     topic.</p>
-
-  <h2>Consortium's Dissemination and Exploitation Strategy</h2>
-  <p>According to the Project Workplan, a considerable effort will be devoted 
-     to the dissemination/exploitation of the results. During the first six 
-     months, the consortium will undertake the development and execution of a 
-     workplan to achieve successful dissemination of the project results. In 
-     particular, the very nature of the project suggests to involve the 
-     largest community of professionals during the modelling phase. Here, we 
-     shall be open to any contribution, even soliciting them, still keeping 
-     final technical decisions inside the Project.
-   <br/>
-     The foreseen dissemination steps include:</p>
-
-  <ol>
-   <li>Preparation of an ``information pack'', including a folder and CDROM 
-       with demos.</li>
-   <li>Presentation of MOWGLI to national and international conferences on 
-       I.T.Technologies.</li>
-   <li>Presentation of MOWGLI to thematic conferences on Education, Digital 
-       Libraries, Formal Verification and so on.</li>
-   <li>Advertising to actors/institutions which may be direct users or may 
-       channel the information to final users (such as the World Wide Web 
-       Consortium).</li>
-   <li>Technical papers and articles to be sent to specialised reviews.</li>
-   <li>Management of the MOWGLI Web site.</li>
-   <li>Dissemination of technical achievements in specific scientific 
-       communities, such as XML-related interests groups.</li>
-  </ol>
-
-  <p>Management of the Exploitation and Dissemination activities is a specific
-     Work-package that will be lead by the Project Exploitation Board. It is 
-     planned that all partners will nominate qualified persons as exploitation 
-     managers to coordinate their own exploitation activities. The Exploitation
-     Board will be in charge of the preparation of the exploitation and 
-     dissemination plan.</p>
-
- <br/> 
-
- <table width="550">
-   <tr>
-    <td>
-     <a href="EC-contribution.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="project-planning.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
- </body>
-</html>
diff --git a/helm/mowgli/home/xml/proposal/innovation.xml b/helm/mowgli/home/xml/proposal/innovation.xml
deleted file mode 100644 (file)
index aa83768..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html>
- <head>
-   <title>Innovation</title>
- </head>
- <body>
-
- <table width="550">
-   <tr>
-    <td>
-     <a href="contribution.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="EC-contribution.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
-  <br/>
-
-  <h1>Innovation</h1>
-  <p>The main technical novelty of the project is in its synergy of different
-     scientific communities and research topics: digital libraries, Web 
-     publishing, logical environments.</p>
-
-  <img border="0" alt="Architecture" src="./../../images/logo.png" />
-
-  <p>From the point of view of Web publishing, our project is the first attempt
-     to provide a comprehensive description, from content to metadata, of a 
-     given field of knowledge (in our case mathematics), in order to enhance 
-     its accessibility, exchange and elaboration via the World Wide Web. To 
-     this aim, we shall put to use most of the technologies recently introduced
-     by the W3C: XML, DOM, XSL, XLL, Namespaces, MathML, RDF, etc. From this 
-     respect, the project is first of all a complex test for all these 
-     technologies, and should hopefully become an example of ``best practice''
-     in their use.  Note that the final architecture is likely to be extendible
-     to other fields of structured information: the emphasis on mathematics is 
-     motivated by the fact that, due to its complex interplay between content,
-     structure and notation, it provides a major case study for Web-based 
-     information systems (it is not a case that MathML has been one of few 
-     instances of XML completely developed under the aegis of the World Wide 
-     Web Consortium).</p>
-  <p>From the point of view of digital libraries, our work is aimed at 
-     exploiting all the potential functionalities offered by the Web, and in 
-     particular a more integrated use of its browsing and searching facilities.
-     The library is not merely seen as a more or less structured collection of 
-     texts, but as a virtual structure inside which we can freely navigate, 
-     jumping for instance from an entity to its definition, or peeping inside 
-     some information at deeper and deeper levels of details (such as different
-     levels of detail of a proof).  This is similar to what we currently do 
-     with HTML texts, but in order to enhance the effectiveness of the 
-     consultation, we clearly need a good metadata model of the information. 
-     Moreover, in such an integrated view, it is hardly conceivable to just 
-     apply some ``general purpose'' metadata model (like the Dublin Core 
-     system, say): the metadata model must be eventually specialised to the 
-     actual structure of the information it is supposed to model (and more 
-     structure we have on the information, more relevant metadata we can 
-     usually infer on the document).  For instance, metadata could contain the 
-     whole signature of a given module of mathematical knowledge. The usual 
-     motivation for keeping metadata simple and general is that it is usually
-     difficult to add this information by hand; but in our case a large part of
-     the metadata is supposed to be extracted automatically by the (structured)
-     text itself, allowing for pretty complex metadata models.</p>
-  <p>Finally, a main aspect of our project is the integration with current 
-     tools for the automation of formal reasoning and mechanisation of 
-     mathematics (proof assistants and logical frameworks). This integration 
-     has a mutual benefit. From the point of view of the mathematical library, 
-     the first and fundamental role of these systems is that of providing 
-     friendly authoring tools (for instance, our ``core'' library will be 
-     automatically extracted from existing libraries of these systems). The 
-     relevance of this point should not be underestimated: as a matter of fact,
-     the main reason for the failure of complex markup modellings is usually 
-     the lack of suitable authoring tools (it is often painful to add the 
-     markup by hand). Of course, they can also provide other functionalities 
-     (like automatic proof checking) on fragments of the library (typically, 
-     the fragments generated by the tool itself, in its specific logical 
-     dialect). These additional functionalities may be especially relevant for
-     industrial applications, e.g. in the context of IT security evaluation 
-     standards like the Common Criteria standard (see 
-     <a href="./../publications/others/cc.html">others/cc</a>). In its highest 
-     assurance level, this standard requires the development of formal models 
-     of the IT product under evaluation, as well as mechanized proofs that it
-     meets its security objectives. Such models and proofs must be published in
-     a format that can be easily readable and understood by security 
-     evaluators. Hence, there is a strong need from software industry to be 
-     able to produce such documentation directly from the models introduced in 
-     the proof assistant, and to link it with documents describing the IT 
-     product, etc.</p>
-  <p>On the other side, there is a compelling need of integration between the 
-     current tools for automation of formal reasoning and mechanisation of 
-     mathematics and the most recent technologies for the development of Web 
-     applications and electronic publishing. XML, which is rapidly imposing as
-     a pivotal technology in the future development of all Internet 
-     applications, and the main tool for representation, manipulation, and 
-     exchange of structured information in the networked age, looks as a 
-     natural, almost mandatory, choice for modelling the information.</p>
-  <p>In this way, we just obey to the very primitive commandment of the Web: 
-     make your information available.  Currently, libraries in logical 
-     frameworks are usually saved in two formats: a textual one, in the 
-     specific tactical language of the proof assistant, and a compiled (proof 
-     checked) one in some internal, concrete representation language.  Both 
-     representations are obviously unsatisfactory, since they are too oriented 
-     to the specific application: they restrict the access of the libraries to
-     the users of the given application, and at the same time they are too
-     sensible to the evolution and the maintenance of the application itself.  
-     On the other side, as soon as the information is put in a standard format 
-     on the Web, <i>any</i> kind of research becomes virtually possible, and 
-     <i>anybody</i> could start developing his own <i>spider</i> for 
-     implementing his own searching requirements. This is clearly a major 
-     improvement w.r.t. the present situation. Currently, you must not only 
-     rely on the searching facilities offered by the specific applications, but
-     even if you would wish to implement your own searching algorithm, you 
-     would be prevented by the simple reason that the information is not 
-     accessible (in any reasonable sense of the word).</p>
-  <p>The project builds on the solid ground provided by several existing 
-     XML-based languages for the management of mathematical documents such as 
-     MathML, OpenMath and OMDoc. Each of these markup languages covers a 
-     different aspect of the information. Our aim is not to propose a new 
-     language, but to study and to develop the technological infrastructure 
-     required to integrate all these languages together, in order to take 
-     advantage of the specific features of each of them.</p>
-
- <br/>
-
- <table width="550">
-   <tr>
-    <td>
-     <a href="contribution.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="EC-contribution.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
- </body>
-</html>
diff --git a/helm/mowgli/home/xml/proposal/project-components.xml b/helm/mowgli/home/xml/proposal/project-components.xml
deleted file mode 100644 (file)
index ab2bcb4..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html>
- <head>
-  <title>Graphical presentation of projects components</title>
- </head>
- <body>
-
- <table width="550">
-   <tr>
-    <td>
-     <a href="project-planning.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="../project.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
-  <br/>
-
-  <h1>Graphical presentation of projects components</h1>
-
-  <br/>
-
-  <img border="0" alt="Architecture" src="./../../images/pert_new.png" />
-
-  <br/>
-
-  <table width="550">
-   <tr>
-    <td>
-     <a href="project-planning.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="../project.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
- </body>
-</html>
diff --git a/helm/mowgli/home/xml/proposal/project-management.xml b/helm/mowgli/home/xml/proposal/project-management.xml
deleted file mode 100644 (file)
index 86b9fac..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE management [
- <!ELEMENT management (head-links,introduction,main,other-infos,tail-links)>
- <!ELEMENT main (project-manager,exploitation-manager,
-                 work-package-leaders,
-                 technical-contributors,
-                 project-coordination-committee,
-                 project-exploitation-board,
-                 work-package-teams)>
- <!ELEMENT project-coordination-committee (chair,member+,mandate)>
- <!ELEMENT project-exploitation-board (chair,member+,mandate)>
- <!ELEMENT work-package-leaders (mandate)>
- <!ELEMENT technical-contributors (mandate)>
-
- <!ELEMENT project-manager (mandate)>
- <!ATTLIST project-manager
-           site CDATA #REQUIRED
-           file CDATA #REQUIRED>
-
- <!ELEMENT exploitation-manager (mandate)>
- <!ATTLIST exploitation-manager
-           site CDATA #REQUIRED
-           file CDATA #REQUIRED>
-
- <!ELEMENT work-package-teams (mandate)>
-
- <!ELEMENT chair EMPTY>
- <!ATTLIST chair
-           site CDATA #REQUIRED
-           file CDATA #REQUIRED>
-
- <!ELEMENT member EMPTY>
- <!ATTLIST member
-           site CDATA #REQUIRED
-           file CDATA #REQUIRED>
-
- <!ELEMENT mandate (#PCDATA)>
-
- <!ELEMENT introduction (p|dl|ul)*>
- <!ELEMENT other-infos (p|dl|ul)*>
- <!ELEMENT head-links (p|dl|ul)*>
- <!ELEMENT tail-links (p|dl|ul)*>
-
-
- <!-- A subset of XHTML -->
- <!ELEMENT p (#PCDATA|em|a)*>
- <!ELEMENT em (#PCDATA)>
- <!ELEMENT a (#PCDATA)>
- <!ATTLIST a
-           href CDATA #REQUIRED>
- <!ELEMENT dl (dt|dd)+>
- <!ELEMENT dt (#PCDATA)>
- <!ELEMENT dd (#PCDATA)>
- <!ELEMENT ul (li)+>
- <!ELEMENT ol (li)+>
- <!ELEMENT li (#PCDATA)>
- <!ELEMENT h1 (#PCDATA)>
- <!ELEMENT h2 (#PCDATA)>
-]>
-
-<management>
- <head-links>
-  <table width="550">
-    <tr>
-     <td>
-      <a href="project-objectives.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-     </td>
-     <td>
-      <a href="../project.html" target="content">Index</a>
-     </td>
-     <td>
-      <a href="contribution.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-     </td>
-    </tr>
-   </table>
-   <br/>
- </head-links>
- <introduction>
-  <h1>Project Management</h1>
-  <p>The Project management will be assured by the following relevant
-     roles:</p>
-  <ol>
-   <li>Project Manager</li>
-   <li>Exploitation manager</li>
-   <li>Work-package Leaders</li>
-   <li>Technical Contributors</li>
-  </ol>
-  <p>and by the following Project Bodies:</p>
-  <ol>
-   <li>Project Coordination Committee (PCC)</li>
-   <li>Project Exploitation Board</li>
-   <li>Work-package Teams.</li>
-  </ol>
- </introduction>
- <main>
-  <project-manager site="bologna" file="asperti">
-   <mandate>
-    The mandate of the Project Manager is to represent the Project, report to
-    the Commission, monitor overall performance of the project, ensure
-    accomplishment of the technical objectives, promote project visibility,
-    promote dissemination of project results in the relevant international
-    forums, promote acceptance of project results, administer
-    project resources and monitor project spending.
-   </mandate>
-  </project-manager>
-  <exploitation-manager site="aei" file="wegner">
-   <mandate>
-    He is responsible for coordinating exploitation activities undertaken
-    by the Project Exploitation Board (PEB) in close cooperation with the
-    Project Coordination Committee (PCC).
-   </mandate>
-  </exploitation-manager>
-  <work-package-leaders>
-   <mandate>
-    They are responsible for the performance of
-    Work-packages, and they must be committed to the Work-package for at
-    least five man months per year.
-   </mandate>
-  </work-package-leaders>
-  <technical-contributors>
-   <mandate>
-    Technical Contributors are specialised
-    staff provided by the partners. They could be either people active on
-    a stable basis into a Work-package, or people who contribute from time
-    to time on specific tasks related to the work-plan (external
-    contributors).
-   </mandate>
-  </technical-contributors>
-  <project-coordination-committee>
-   <chair site="bologna" file="asperti"/>
-   <member site="bologna" file="asperti"/>
-   <member site="dfki" file="kohlhase"/>
-   <member site="nijmegen" file="geuvers"/>
-   <member site="aei" file="schutz"/>
-   <member site="trusted-logic" file="loiseaux"/>
-   <member site="inria" file="rideau"/>
-   <mandate>
-    The PCC is chaired by the Project
-    Manager and constituted by one representative from each Partner, and
-    is the main decision body of the Consortium. It is in charge
-    of all formal decisions regarding technical direction of the work,
-    proper interrelation between Work-packages,
-    relations with IST Office, policies for promotion of results,
-    administrative arrangements.
-   </mandate>
-  </project-coordination-committee>
-  <project-exploitation-board>
-   <chair site="aei" file="wegner"/>
-   <member site="bologna" file="asperti"/>
-   <member site="dfki" file="moschner"/>
-   <member site="nijmegen" file="geuvers"/>
-   <member site="aei" file="wegner"/>
-   <member site="trusted-logic" file="loiseaux"/>
-   <member site="inria" file="herbelin"/>
-   <mandate>
-    The PEB is chaired by the
-    Project Exploitation Manager, and composed by the Exploitation
-    Managers of each partner. It monitors the state of the art in
-    the domains of content-based information technologies, W3C activities,
-    Web publishing, and digital libraries. It is responsible for
-    planning the dissemination and exploitation strategies for the
-    consortium, to be approved by the PCC.
-   </mandate>
-  </project-exploitation-board>
-  <work-package-teams>
-   <mandate>
-    They are constituted of the technical contributors.
-    Each team is chaired by a Work-package Leader, and it is in
-    charge of carrying out the technical work described in
-    each Work-Package.
-   </mandate>
-  </work-package-teams>
- </main>
- <other-infos>
-  <h2>Decision Process</h2>
-  <p>Decisions is normally taken by seeking consensus. However, 
-     after a reasonable amount of time has been allowed to illustrate
-     and defend of conflicting positions, in order to avoid deadlock
-     in project operational progress, the approval of two-third majority
-     of the partners is sufficient. If the decision being taken 
-     is unacceptable 
-     to partners found in the minority positions, the resolution of the
-     conflict will be elevated to each partner's higher executive level.
-     If no resolution is possible, than the standard ``red flag'' procedure
-     will be used, as a last resort. Either the PCC or the Project Manager
-     can initiate the conflict resolution procedure.</p>
-
-  <h2>Information Flow</h2>
-  <p>Information flow within the Project is ensured by exchange of
-     internal technical papers, notification of relevant new publications
-     technologies or standards, and reports from external meetings.
-     All technical documentation generated by the project should be
-     exchangeable in electronic format, according to a set of guidelines
-     agreed at project start-up. The project Manager enforces
-     adherence to these guidelines. Only strictly formal correspondence 
-     is exchanged by ordinary mail and telefax. Urgent correspondence
-     over e-mail is sent with a request for explicit acknowledgement.</p>
-  <p>The Coordinating Partner is responsible to prepare and maintain
-     a Web page of the project and a CVS repository (also available via Web).
-     The CVS repository is meant to keep the trace of the overall 
-     progress of the Project, and it is used by the PCC to monitor
-     the state of advancement of the work. Each partner periodically 
-     submit reports to the prime contractor, listing all technical 
-     contributions, publications, meeting attendance and other information
-     which may help in understanding the provided effort and cost figures.</p>
-  <p>The Project has established a high quality Web site for internal and 
-     external communications. It has been operational as from one month of 
-     the commencement date and will be maintained during the project duration.
-     The ``members only'' area includes e.g. all private deliverables,
-     progress and management reports, and cost statements. The open area
-     includes the project presentation as defined in Appendix 2 of the
-     ``Guidelines
-     for Contract Preparation'' document, all public deliverables, and any
-     relevant information suggested by the Project Exploitation Board.</p>
-
-  <h2>Quality Procedures</h2>
-  <p>For all deliverables, the following review procedure
-     is adopted: release by the Work-Package Leader, two-week review
-     period for comments by the PCC, two-week amendment period to incorporate
-     PCC recommendations, one-week balloting period for approval by the
-     PCC.</p>
-
-  <h2>Confidentiality and IPR handling</h2>
-  <p>Matters related to Confidentiality and IPR handling have been defined
-     in the ``Consortium Agreement''. As regards literature papers
-     originated from work in the Project, there are two
-     categories of papers:</p>
-  <ol>
-   <li>Project Endorsed Publications, requiring notification and approval by
-       the PCC.</li>
-   <li>Project-related publications, only requiring notification to 
-       the PCC. They must contain an acknowledgement of support by the
-       project Consortium and, if required by the PCC, a disclaimer that
-       the views are not necessarily those of the Consortium.</li>
-  </ol>
-  <p>Concerning possible contributions to Standards, they are
-     directly submitted by project members.</p>
- </other-infos>
- <tail-links>
-  <br/>
-  <table width="550">
-   <tr>
-    <td>
-     <a href="project-objectives.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="contribution.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
- </tail-links>
-</management>
diff --git a/helm/mowgli/home/xml/proposal/project-objectives.xml b/helm/mowgli/home/xml/proposal/project-objectives.xml
deleted file mode 100644 (file)
index 554222c..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html>
- <head>
-   <title>Project Objectives</title>
- </head>
- <body>
-
- <table width="550">
-   <tr>
-    <td>
-     <a href="project-summary.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="project-management.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
-  <br/>
-
-  <h1>Project Objectives</h1>
-  <p>The new frontier of Content Based Information Systems is the so called 
-     ``Semantic Web'' (see 
-     <a href="./../publications/others/w3c_bl98.html">others/w3c_bl98</a>).  
-     Associating meaning with content or establishing a layer of machine 
-     understandable data will allow automated agents, sophisticated search 
-     engines and interoperable services and will enable higher degree
-     of automation and more intelligent applications.  The ultimate goal of the
-     Semantic Web is to allow machines to share and exploit knowledge in the
-     Web way, i.e. without central authority, with few basic rules, in a 
-     scalable, adaptable, extensible manner.  However, the actual development 
-     of the Semantic Web and its technologies has been hindered so far by the 
-     lack of large scale, distributed repositories of structured, content 
-     oriented information. The case of Mathematical knowledge, the most 
-     rigorous and condensed form of knowledge, is paradigmatic.  The World Wide
-     Web is already now the largest single resource of mathematical knowledge, 
-     and its importance will be exponentiated by the emerging display 
-     technologies like MathML.  However, almost all mathematical documents
-     available on the Web are marked up only for presentation (in this respect,
-     current practice in MathML improves on, but does not fundamentally differ 
-     from the older paper-oriented markup schemes like LaTeX or Postscript).
-     A consequence of this is that the online material is machine-readable, but
-     not machine-understandable, severely crippling the possibility to offer 
-     added-value services like</p>
-  <ul>
-   <li>Preservation of the real informative content in a highly structured and
-       machine understandable format, suitable for transformation, automatic
-       elaboration and processing.</li>
-   <li>Cut and paste on the level of computation (take the output from a Web 
-       search engine and paste it into a computer algebra system).</li>
-   <li>Automatic proof checking of published proofs.</li>
-   <li>Semantical search for mathematical concepts (rather than keywords).</li>
-   <li>Classification: given a concrete mathematical structure, is there a 
-       general theory for it?</li>
-  </ul>
-  <p>Due to its rich notational, logical and semantical structure, mathematical
-     knowledge is thus a main case study for the development of the new 
-     generation of semantic Web systems.  The aim of the proposed project is 
-     both to help in this process, as well as pave the way towards a really 
-     useful virtual, distributed, hyper-textual resource for the working 
-     mathematician, scientist or engineer.  All modern sciences have a 
-     strongly mathematicised core, and will benefit. The real market and 
-     application area for the techniques developed in this project, apart from 
-     the obvious realm of education, lies with high-tech and engineering 
-     corporations that rely on huge formula databases. Currently, both the 
-     content markup as well as the added-value services alluded to above are 
-     very underdeveloped, limiting the usefulness of the vital knowledge. The 
-     infrastructure and knowhow needed for mining this information treasure 
-     and obtaining a competitive edge in development is exactly what we are 
-     attempting to develop in our project.</p>
-  <p>Several languages have been already proposed for the management of 
-     mathematical information on the Web, both for publishing, communication 
-     and archiving purposes: most notably, 
-     <a href="http://www.w3.org/TR/MathML2/">MathML</a>, 
-     <a href="http://www.nag.co.uk/projects/openmath/omsoc/">OpenMath</a>, 
-     <a href="http://www.mathweb.org/omdoc/">OMDoc</a>. Other languages
-     must be also considered for definition and specification of Metadata, 
-     such as the <a href="http://purl.org/dc/">Dublin Core</a> System, or 
-     the Resource Description Framework 
-     [<a href="http://www.w3.org/RDF/">RDF</a>].
-     All these languages, which tend to cover different and orthogonal aspects 
-     of the management of mathematical documents, must be eventually taken into
-     account for the ambitious goal of our project. One of our aims is actually
-     the definition of a modular architecture which could exploit the 
-     distinctive potentialities of each one of these languages, integrating 
-     them into a single application.  The integration is in this case 
-     facilitated by the fact that all the languages mentioned are particular 
-     instances of XML, providing the opportunity to use standard XML 
-     technology, and in particular XSL Transformations or 
-     stylesheets [<a href="http://www.w3.org/TR/xslt">XSLT</a>], to pass from 
-     one language to the other.</p>
-  
-  <img border="0" alt="Architecture" src="./../../images/arch.png" />
-
-  <p>The fact of encoding also the microscopic, logical level of mathematics 
-     opens the possibility to have completely formalised subsystems of the 
-     library, which could be checked automatically by standard tools for the 
-     automation of formal reasoning and the mechanisation of mathematics 
-     (proof assistants and logical frameworks, see
-     <a href="./../publications/others/cup_hp91.html">others/cup_hp91</a> and
-     <a href="./../publications/others/cup_hp93.html">others/cup_hp93</a>). At
-     the same time, any of these tools could be used as an authoring system for
-     documents of the library, by simply exporting their internal libraries 
-     into XML, and using stylesheets to transform the output into a standard, 
-     machine-understandable representation, such as MathML content markup or 
-     OpenMath.</p>
-  <p>The precise formal content can still be preserved by the machinery of 
-     <a href="http://www.w3.org/TR/xlink/">Xlinks</a>. Moreover, stylesheets 
-     can be also used to solve the annoying notational problem that usually 
-     afflicts formal mathematics, providing a simple way for adding 
-     user-defined styles and notations.</p>
-
-    <p>So, our approach leads to a natural integration of proof assistant tools
-       and the Web. In this integration, the emphasis is just on ``content'': 
-       we do not try to link directly the specific applications to the Web, 
-       that would be a major mistake, for obvious modularity reasons. On the 
-       contrary, we adopt XML as a neutral specification language, and then we 
-       merely work on XML-documents, forgetting the underlying application. In 
-       this way, similar software tools can be applied to different logical 
-       dialects, regardless of their concrete nature. Moreover, if having a 
-       common representation layer is not the ultimate solution to all 
-       inter-operability problems between different applications, it is 
-       however a first and essential step in this direction.  Finally, this 
-       ``standardisation'' process should naturally lead to a substantial 
-       simplification and re-organisation of the current, ``monolithic'' 
-       architecture of logical frameworks. All the many different and often 
-       loosely connected functionalities of these complex programs (proof 
-       checking, editing, search and consulting, program extraction, and so on)
-       could be clearly split in more or less autonomous tasks, and could be 
-       developed by different teams, in totally different languages. This is 
-       the new, ``content-based'' architectural design of future systems.</p>
-
- <br/>
-
- <table width="550">
-   <tr>
-    <td>
-     <a href="project-summary.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="project-management.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
- </body>
-</html>
diff --git a/helm/mowgli/home/xml/proposal/project-planning.xml b/helm/mowgli/home/xml/proposal/project-planning.xml
deleted file mode 100644 (file)
index c45626d..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html>
- <head>
-   <title>Project Planning and timetable</title>
- </head>
- <body>
-
- <table width="550">
-   <tr>
-    <td>
-     <a href="econ-scient-tech-prospects.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="project-components.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
-  <br/>
-
-  <h1>Project Planning and timetable</h1>
-
-  <br/>
-
-  <img border="0" alt="Architecture" src="./../../images/gantt_new.png" />
-
-  <br/>
-
-  <table width="550">
-   <tr>
-    <td>
-     <a href="econ-scient-tech-prospects.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="project-components.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
- </body>
-</html>
diff --git a/helm/mowgli/home/xml/proposal/project-summary.xml b/helm/mowgli/home/xml/proposal/project-summary.xml
deleted file mode 100644 (file)
index 00c2374..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html>
- <head>
-   <title>Project Summary</title>
- </head>
- <body>
-
-  <table width="550">
-   <tr>
-    <td>
-     <a href="../project.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="project-objectives.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
-  <br/>
-
-  <h1>Project Summary</h1>
-
-  <h2>Objectives</h2>
-  <p>The World Wide Web is already the largest resource of mathematical 
-     knowledge, and its importance will be exponentiated by emerging display 
-     technologies like MathML. However, almost all mathematical documents 
-     available on the Web are marked up only for presentation, severely 
-     crippling the potentialities for automation, interoperability, 
-     sophisticated searching mechanisms, intelligent applications,
-     transformation and processing. The goal of the project is to overcome 
-     these limitations, passing form a machine-readable to a 
-     machine-understandable representation of the information, and developing 
-     the technological infrastructure for its exploitation. MOWGLI builds on
-     previous ``standards'' for the management and publishing of mathematical 
-     documents (MathML, OpenMath, OMDoc), integrating them with different XML
-     technology (XSLT, RDF, ...).</p>
-
-  <h2>Description of Work</h2>
-  <p>The goal of the project is to provide a comprehensive description, from
-     content to metadata, of a given field of knowledge (in our case 
-     mathematics), in order to enhance its accessibility, exchange and 
-     elaboration via the World Wide Web. MOWGLI will make an essential use of 
-     standard XML technology and aspires to become an example of ``best 
-     practice'' in its use, and a leading project in the new area of the 
-     Semantic Web.</p>
-  <p>In particular, we shall deeply explore the potentialities of XML in the 
-     following directions:</p>
-
-  <dl>
-   <dt>Publishing</dt>
-   <dd>XML offers sophisticated publishing technologies (Stylesheets, MathML, 
-       SVG, ...) which can be profitably used to solve, in a standard way, the 
-       annoying notational problems that traditionally afflict
-       content based and machine-understandable encodings of the 
-       information.</dd>
-
-   <dt>Searching and Retrieving</dt>
-   <dd>Metadata will play a major role in MOWGLI. New W3C languages such as 
-       the Resource Description Framework or XML Query are likely to produce 
-       major innovative solutions in this field.</dd>
-
-   <dt>Interoperability</dt>
-   <dd>Disposing of a common, machine understandable layer is a major and 
-       essential step in this direction.</dd>
-
-   <dt>Distribution</dt>
-   <dd>All XML technology is finally aimed to the access of the Web as a 
-       single, distributed resource, with no central authority and few, 
-       simple rules.</dd>
-  </dl>
-
-  <p>MOWGLI builds on the solid ground already provided by previous European
-     projects (Such as OpenMAth and Euler) and several XML dialects for the 
-     management of mathematical documents (MathML, OpenMath, OMDoc, ...).
-     All these languages cover different and orthogonal aspects of the 
-     information; our aim is not to propose a new standard, but to study and 
-     to develop the technological infrastructure required for taking advantage 
-     of the potentialities of all of them.</p>
-  
-  <h2>Milestones and Expected Results</h2>
-  <dl>
-   <dt>First MOWGLI prototype (month 18)</dt>
-   <dd>Supporting browsing, rendering and on-line consultation of large 
-       repositories of (content-based) mathematical knowledge. The translation 
-       from content to presentation will be done via suitable notational 
-       stylesheets.</dd>
-
-   <dt>Advanced MOWGLI prototype (month 24)</dt>
-   <dd>Supporting distribution, indexing, searching and retrieval (based on a 
-       sophisticated metadata model).</dd>
-
-   <dt>Final MOWGLI prototype (month 30)</dt>
-   <dd>Result of validation.</dd>
-  </dl>
-
-  <br/>
-
-  <table width="550">
-   <tr>
-    <td>
-     <a href="../project.html" target="content"><img src="./../../images/PreviousArrow.gif" width="26" height="26" border="0" alt="Previous Page"/></a>
-    </td>
-    <td>
-     <a href="../project.html" target="content">Index</a>
-    </td>
-    <td>
-     <a href="project-objectives.html" target="content"><img src="./../../images/NextArrow.gif" width="26" height="26" border="0" alt="Next Page"/></a>
-    </td>
-   </tr>
-  </table>
-
- </body>
-</html>
-
diff --git a/helm/mowgli/home/xml/publications/index.xml b/helm/mowgli/home/xml/publications/index.xml
deleted file mode 100644 (file)
index 7ea341e..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publications [
- <!ELEMENT publications (project,related)>
- <!ELEMENT project (entry*)>
- <!ELEMENT related (entry*)>
- <!ELEMENT entry EMPTY>
- <!ATTLIST entry file CDATA #REQUIRED>
-]>
-
-<publications>
-  <project>
-    <entry file="crimea2002_aw"/>
-  </project>
-  <related>
-    <entry file="cup_s2"/>
-    <entry file="jep_wwsw"/>
-    <entry file="category_al"/>
-    <entry file="extreme2001_apss"/>
-    <entry file="jlp2001_scg"/>
-    <entry file="tcs2001_og"/>
-    <entry file="crimea2001_apss"/>
-    <entry file="har_bg"/>
-    <entry file="mathml2000_apss"/>
-    <entry file="tphols2000_gwz"/>
-    <entry file="cup_s"/>
-    <entry file="jep_ws"/>
-    <entry file="mscs_gb"/>
-    <entry file="tphols2001_apss"/>
-    <entry file="w3c_bl98"/>
-    <entry file="cup_hp91"/>
-    <entry file="cup_hp93"/>
-    <entry file="cc"/>
-  </related>
-</publications>
-
diff --git a/helm/mowgli/home/xml/publications/mowgli/crimea2002_aw.xml b/helm/mowgli/home/xml/publications/mowgli/crimea2002_aw.xml
deleted file mode 100644 (file)
index 04dcc1d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "../others/publication.dtd">
-
-<publication>
- <title>MOWGLI - A New Approach for the Content Description in Digital
-  Documents</title>
- <author file="bologna/asperti"/>
- <author file="aei/wegner"/>
- <where>To be presented at the Nineth International Conference on 
-        New Technologies and New Forms of Cooperation",
-        Autonomous Republic of Crimea, Ukraine</where>
- <html file="crimea2002_aw_on_line"/>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/mowgli/crimea2002_aw_on_line.xml b/helm/mowgli/home/xml/publications/mowgli/crimea2002_aw_on_line.xml
deleted file mode 100644 (file)
index 7d5d25b..0000000
+++ /dev/null
@@ -1,411 +0,0 @@
-<html>
-<head>
- <title>MOWGLI - A New Approach for the Content Description in Digital
-  Documents</title>
- <link rel="stylesheet" href="../../../style/mowgli.css" type="text/css" />
-</head>
-<body>
-<h1 style="text-align: center">MOWGLI - A New Approach for the Content Description in Digital Documents</h1> 
-
-<h2 style="text-align: center">Andrea Asperti, University of Bologna, and Bernd Wegner, TU Berlin</h2>
-
-
-<h2>Abstract:</h2>
-
-<div style="font-style: italic">
-<p>The acronym MOWGLI stands for "Mathematics On the Web: Get it by Logic and
-Interfaces". MOWGLI is an European Project founded by the European Community
-in the ``Information Society Technologies'' (IST) Programme. The partners are
-the University of Bologna, INRIA (Rocquencourt), the German Research Centre
-for Artificial Intelligence (DFKI, Saarbruecken), the Katholieke Universiteit
-Nijmegen, the Max Planck Institute for Gravitational Physics (Albert Einstein
-Institute, Golm), Trusted Logic (Paris) and TU Berlin.</p>
-<p>The aim of the project is the study and the development of a technological
-infrastructure for the creation and maintenance of a virtual, distributed,
-hypertextual library of mathematical knowledge based on a content description
-of the information. Currently, almost all mathematical documents available on
-the Web are marked up only for presentation, severely crippling the
-potentialities for automation, interoperability, sophisticated searching
-mechanisms, intelligent applications, transformation and processing. The goal
-of MOWGLI is to overcome these limitations, passing from a machine-readable to
-a machine-understandable representation of the information, and developing the
-technological infrastructure for its exploitation.</p>
-
-<p>The project deals with problems traditionally belonging to different
-scientific communities: digital libraries, Web publishing, automation of
-mathematics and computer aided reasoning. Any serious solution to the complex
-problem of mathematical knowledge management needs a co-ordinated effort of
-all these groups and a synergy of their different expertise. MOWGLI attempts
-to build a solid co-operation environment between these communities. The
-current paper will concentrate on the aspects related to digital libraries.</p>
-</div>
-
-
-<h2>1. Aims and mission of MOWGLI</h2>
-
-<p>After a ten years period of electronic publishing in mathematics we are still
-confronted with slightly enhanced electronic versions of printed publications.
-Almost all mathematical documents available on the Web are marked up only for
-presentation, if such an enhancement is available at all. Only a minority of
-documents try to care about some of the potentialities for automation,
-interoperability, sophisticated searching mechanisms, intelligent
-applications, transformation and processing. But these approaches could be
-considered as first preliminary steps towards an electronic document providing
-all these facilities. Hence, the goal of MOWGLI is to overcome these
-limitations, passing form a machine-readable to a machine-understandable
-representation of the information, and developing the technological
-infrastructure for its exploitation.</p>
-
-<p>In order to reach this goal MOWGLI has to deal with problems traditionally
-belonging to different scientific communities: digital libraries, Web
-publishing, automation of mathematics and computer aided reasoning. To our
-knowledge, MOWGLI is the first attempt to build a solid co-operation
-environment between these communities. In principle, any serious approach for
-providing good tools for mathematical knowledge management needs a
-co-ordinated effort of several partners from the above mentioned communities
-and a synergy of
-their different expertise. The choice of partners for the took this condition
-into account, as can be seen below.</p>
-
-<p>The goals of MOWGLI largely overlap with the aims of the so called "Semantic
-Web" <a href="#14">[14]</a>.
-Associating meaning with content or establishing a layer of machine
-understandable data will allow automated agents, sophisticated search engines
-and interoperable services and will enable higher degree of automation and
-more intelligent applications. The ultimate goal of the Semantic Web is to
-allow machines to share and exploit knowledge in the Web way, i.e. without
-central authority, with few basic rules, in a scalable, adaptable, extensible
-manner. However, the actual development of the Semantic Web and its
-technologies has been hindered so far by the lack of large scale, distributed
-repositories of structured, content oriented information. The case of
-mathematical knowledge, the most rigorous and condensed form of knowledge, is
-paradigmatic. The World Wide Web is already now the largest single resource of
-mathematical knowledge, and its importance hopefully be increased by the
-emerging display technologies like MathML.</p>
-
-<p>Machine understandable information will make possible to offer added-value
-services like:
-<ul>
- <li>Preservation of the real informative content in a highly structured and
-  machine understandable format, suitable for transformation, automatic
-  elaboration and processing.</li>
- <li>Cut and paste on the level of computation (take the output from a Web
-  search engine and paste it into a computer algebra system).</li>
- <li>Automatic proof checking of published proofs.</li>
- <li>Semantic search for mathematical concepts (rather than keywords).</li>
- <li>Indexing and Classification.</li>
-</ul>
-</p>
-
-<p>Due to its rich notational, logical and semantic structure, mathematical
-knowledge is a main case study for the development of the new generation of
-semantic Web systems. The aim of the MOWGLI project is both to help in this
-process, as well as pave the way towards a really useful virtual, distributed,
-hyper-textual resource for the working mathematician, scientist or engineer.</p>
-
-
-<h2>2. Standards and Tools</h2>
-
-<p>Current standards for electronic publishing in mathematics are mainly
-presentation oriented. New tools for the management and publishing of
-mathematical documents are in development like MathML
-<a href="#3">[3]</a>, OpenMath, OMDoc
-(<a href="#17">[17]</a>,<a href="#18">[18]</a>) and integrated with different
-XML technology <a href="#7">[7]</a> (XSLT <a href="#8">[8]</a>, RDF
-<a href="#4">[4]</a>, <a href="#5">[5]</a>, SOAP <a href="#6">[6]</a>, ...).
-All these languages cover different and orthogonal
-aspects of the information and its management; our aim is not to propose a new
-standard, but to study and to develop the technological infrastructure
-required for taking advantage of the potentialities of all of current
-standards and those which are likely to be established in the near future.</p>
-
-<p>MOWGLI makes an essential use of standard XML technology and aspires to
-become an example of ``best practice'' in its use, and a pioneering leading
-project in the new area of the Semantic Web <a href="#12">[12]</a>.
-In particular, the potentialities of
-XML will be deeply explored in the following directions:
-<ul>
- <li>Publishing. XML offers sophisticated publishing technologies (Stylesheets,
-  MathML, SVG, etc.) which can be profitably used to solve, in a standard way,
-  the annoying notational problems that traditionally afflict content based and
-  machine-understandable encodings of the information.</li>
- <li>Searching and Retrieving. Metadata will play a major role in MOWGLI. New
-  W3C languages such as the Resource Description Framework or XML Query are
-  likely to produce major innovative solutions in this field.</li>
- <li>Interoperability. Disposing of a common, machine understandable layer is a
-  major and essential step in this direction.</li>
- <li>Distribution. All XML technology is finally aimed to the access of the Web
-  as a single, distributed resource, with no central authority and few, simple
-  rules.</li>
-</ul>
-</p>
-
-<p>MathML <a href="#3">[3]</a>, introducing for the first time a content markup
-layer in parallel
-with a presentational one, has indubitably been a pioneering project towards
-the mining of the mathematical treasure available on the web. Still, its
-limitations are evident as well: 
-<ul>
- <li>MathML is merely focused on mathematical expressions. However, in order to
-bring the idea of a Semantic Web of Mathematics to its full potentialities,
-other layers of mathematical information must be considered as well. In
-particular, we need a clean, microscopic description of proofs, a markup for
-mathematichal "objects" (Theorems, Lemmas, Corollaries, Examples, etc.), a
-markup for "structured collections" of these objects (Documents, Theories,
-etc.), possibly "functors" between these  collections, and finally a good
-"metadata" layer.</li>
- <li>MathML is just an (important) piece in a much wider technological puzzle.
-Passing from content to a good presentational format requires sophisticated
-operations; on the other side, these transformations are themselves a basic
-component of the whole mathematical knowledge (like mathematical fonts). XSLT
-<a href="#8">[8]</a> provides here the right technology, opening the way to
-the creation of well maintained and documented libraries of mathematical
-stylesheets <a href="#11">[11]</a>.</li>
-</ul>
-</p>
-
-<p>Similarly, the creation and maintenance of the library as a distributed
-repository, and the crucial aspect of managing the information in the ``web
-way'' requires a light but powerful communication protocol, overcoming some of
-the limitations of HTTP (SOAP <a href="#6">[6]</a> looks as a promising
-solution).</p>
-
-<p>Metadata will eventually require a fairly sophisticated model, much beyond
-what is currently offered by typical metadata models as the Dublin-Core system
-<a href="#1">[1]</a>. Here, RDF (Resource Description Framework)
-(<a href="#4">[4]</a>, <a href="#5">[5]</a>) looks as the right
-framework for developing the model, providing a general architectural model
-for expressing metadata and a precise syntax for the encoding and interchange
-of these metadata over the Web.</p>
-
-<p>The fact of encoding also the microscopic, logical level of mathematics opens
-the possibility to have completely formalised subsystems of the library
-(<a href="#9">[9]</a>,<a href="#10">[10]</a>), which could be checked
-automatically by standard tools for the
-automation of formal reasoning and the mechanisation of mathematics (proof
-assistants and logical frameworks
-(<a href="#15">[15]</a>,<a href="#16">[16]</a>). At the same time, any of these
-tools could be used as an authoring system for documents of the library, by
-simply exporting their internal libraries into XML, and using stylesheets to
-transform the output into a standard, machine-understandable representation,
-such as MathML content markup or OpenMath. In MOWGLI we shall use the COQ
-Proof Assistant of INRIA <a href="#13">[13]</a> as a paradigmatic example of
-these applications.</p>
-
-<p>An alternative route for the creation of content-based mathematical
-information from standard digital repositories by means of a suitable
-LaTeX-based authoring system will be explored by the Albert Einstein
-Institute. They publish the "Living Reviews in Relativity"
-<a href="#2">[2]</a>, a solely
-electronic journal on the Web, which provides refereed, regularly updated
-review articles on all areas of gravitational physics. AEI will develop a
-LaTeX-based authoring tool interfacing with MOWGLI, and serve as a showcase to
-demonstrate how content-mark-up in mathematics improves the usability and
-information depth of electronic science journals.</p>
-
-
-<h2>3. A minimal technological infrastructure</h2>
-
-<p>It is clear that the creation and maintenance of large repositories of
-content-based mathematical knowledge can only be conceived as a cooperative
-and distributed process, comprising not only the creation of documents, but
-also libraries of notational rules, metadata and management tools. The crucial
-point is to build a minimal infrastructure to start up this process, so that
-more and more tools can be added by interested parties. All these
-considerations lead to two requirements for the developments in MOWGLI:
-<ul>
- <li>Information must be accessible with few basic rules an no central
-  authority (the web way).</li>
- <li>Make extensive use of standard XML technology and tools, even when it would
-  be easier or more efficient just to develop an ad-hoc solution.</li>
-</ul>
-</p>
-
-<p>In this way, we put no barrier to third party development and, every time a
-standard technology or tool is improved, we can simply benefit of the new
-implementation with minimal effort.</p>
-
-<p>The MOWGLI architecture is essentially based on three components, which are
-distribution sites, standard browsers and plug-outs, and active components,
-such as XSLT processors, to elaborate the information. Distribution sites are
-simply HTTP and FTP servers, widespread throughout the world; user browsers
-are HTTP clients and run on the user host. We do not require any other
-components to run on a specific host. Active components must provide answers
-to browsers, requiring an HTTP server interface; they must also ask data to
-distribution sites, acting as HTTP clients. Hence, MOWGLI is essentially
-conceived as an HTTP pipeline.</p>
-
-<p>The module client of the distribution sites is the "getter", which maps URIs
-to URLs and hence documents, offering functionalities similar to the APT
-packet management system
-(<a href="http://www.debian.org">http://www.debian.org</a>).</p>
-
-<p>The main active component is the XSLT stylesheet manager, whose typical
-functionality is the application of a list of stylesheets (each one with the
-respective list of parameters) to a document. However, other components may be
-added in a completely modular way. This is exactly the content-based
-architectural design of future web system enabled by XML technology.</p>
-
-
-<h2>4. The contributions from the participants</h2>
-
-<p>The concrete background for the work in MOWGLI is represented by the
-activities at the participating institutions. Though details could easily be
-obtained from the MOWGLI web-page
-(<a href="http://mowgli.cs.unibo.it">http://mowgli.cs.unibo.it</a>) some short
-remarks on this background should be made here.</p>
-
-<p>The Department of Computer Science at the University of Bologna is the only
-educational institution in Italy to be affiliated to W3C. They care about the
-coordination of the project. The HELM project (Hypertextual Electronic Library
-of Mathematics,
-<a href="http://www.cs.unibo.it/helm">http://www.cs.unibo.it/helm</a>, see also 
-<a href="#12">[12]</a>) is active in
-Bologna since 1999. It is one of the systems of reference mentioned in the
-previous section.</p>
-
-<p>INRIA (Institut National de Recherche en Informatique et Automatique) is a
-French institution located in Rocquencourt. They pursue two projects of
-importance for MOWGLI: the Lemme project, introducing and developing formal
-methods for use in writing scientific computing software, and the LogiCal
-project, which developed the Coq proof assistant (see
-<a href="#13">[13]</a>).</p>
-
-<p>The German Research Center for Artificial Intelligence (DFKI) is based in
-Kaiserslautern and Saarbruecken. Its main mission is technology transfer, i.e.
-to move innovations in Artificial Intelligence from the lab to the market
-place. Its main MOWGLI-related prototypical product so far has been the
-Web-based learning environment ActiveMath that integrates several external services.</p>
-
-<p>The Subfaculteit Informatica of Katholieke Universiteit Nijmegen hosts a
-broad experience in logic, formal methods and theorem proving. They are
-involved in several research activities in this domain as the EC sponsored
-Network "TYPES", the FTA project (Fundamental Theorem of Algebra), the EC
-Working group Calculemus which also deals with OpenMath et al.</p>
-
-<p>The role of the Albert Einstein Institute (MPG, Golm) near Potsdam has been
-described above already. They provide a test bed with the Living Reviews which
-will represent the important link to the domain of mathematical publishing.
-This also is the main concern of the partner TU Berlin which is formally
-associated to AEI caring about the exploitation and information dissemination
-for MOWGLI.</p>
-
-<p>Trusted Logic makes the group complete. This is a French start-up company,
-which offers a wide range of efficient and secure solutions of smart cards and
-terminals in a wide range of areas. Their development methodology includes a
-permanent concern of quality and security aspects.</p>
-
-<p>As it is common for projects like MOWGLI the cooperation between the partners
-is regulated by workpackages and a time schedule for the deliveries. But the
-project started formally in March 2002. Hence these things are still theory,
-and it will be subject of the next report on MOWGLI to describe, how theory
-came into practise.</p>
-
-
-<h2>BIBLIOGRAPHY</h2>
-
-<dl>
- <dt><a name="1"></a>[1]</dt>
- <dd>The Dublin Core Metadata Inititiative. <a href="http://purl.org/dc/">http://purl.org/dc/</a></dd>
-
- <dt><a name="2"></a>[2]</dt>
- <dd>Living Reviews in Relativity.
-  <a href="http://www.livingreviews.org">http://www.livingreviews.org.</a></dd>
-
- <dt><a name="3"></a>[3]</dt>
- <dd>Mathematical Markup Language (MathML) 2.0 W3C Recommendation, 21 February
-2001. <a href="http://www.w3.org/TR/MathML2/">http://www.w3.org/TR/MathML2/.</a>
- </dd>
-
- <dt><a name="4"></a>[4]</dt>
- <dd>Resource Description Framework (RDF) Model and Syntax Specification, W3C
-Recommendation 22 February 1999.
- <a href="http://www.w3.org/TR/1999/REC-rdf-syntax-19990222">/http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/</a></dd>
-
- <dt><a name="5"></a>[5]</dt>
- <dd>Resource Description Framework (RDF) Schema Specification 1.0, W3C
- Candidate Recommendation 27 March 2000.
- <a href="http://www.w3.org/TR/rdf-schema/">http://www.w3.org/TR/rdf-schema/</a></dd>
-
- <dt><a name="6"></a>[6]</dt>
- <dd>SOAP Version 1.2 Part 0: Primer. W3C Working Draft 17 December 2001.
- <a href="http://www.w3.org/TR/2001/WD-soap12-part0-20011217">http://www.w3.org/TR/2001/WD-soap12-part0-20011217</a>.</dd>
-
- <dt><a name="7"></a>[7]</dt>
- <dd>Extensible Markup Language (XML) Specification. Version 1.0. W3C
-     Recommendation, 10 February 1998.
-     <a href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a>
- </dd>
-
- <dt><a name="8"></a>[8]</dt>
- <dd>XSL Transformations (XSLT). Version 1.0, W3C Recommendation, 16 November
-  1999. <a href="http://www.w3.org/TR/xslt">http://www.w3.org/TR/xslt</a>.</dd>
-
- <dt><a name="9"></a>[9]</dt>
- <dd>Asperti, A.; Padovani, L.; Sacerdoti Coen C.; Schena, I.: Formal
-Mathematics in MathML. Proceedings of the First International Conference on
-MathML and Math on the Web, October 20-21 2000, University of Illinois at Urbana-Champaign.</dd>
-
- <dt><a name="10"></a>[10]</dt>
- <dd>Asperti, A.; Padovani, L.; Sacerdoti Coen, C.; Schena, I.: Formal
-Mathematics on the Web. Proceedings of the Eighth International Conference on 
-Libraries and Associations in the Transient World: New Technologies and New
-Forms of Cooperation, June 9-17, 2001, Sudak, Autonomous Republic of Crimea, Ukraine.</dd>
-
- <dt><a name="11"></a>[11]</dt>
- <dd>Asperti, A.; Padovani, L.; Sacerdoti Coen, C.; Schena, I.: XML,
-Stylesheets and the re-mathematization of Formal Content. Proceedings of
-Extreme Markup Languages 2001 Conference, August 12-17, 2001, Montreal, Canada.</dd>
-
- <dt><a name="12"></a>[12]</dt>
- <dd>Asperti, A.; Padovani, L.; Sacerdoti Coen, C.; Schena, I.: HELM and the
-semantic Math-Web. Proceedings of the 14th International Conference on Theorem
-Proving in Higher Order Logics (TPHOLS 2001), 3-6 September 2001, 
-Edinburgh, Scotland.</dd>
-
- <dt><a name="13"></a>[13]</dt>
- <dd>B. Barras et al.:The Coq Proof Assistant Reference Manual, version 6.3.1,
-  <a href="http://pauillac.inria.fr/coq">http://pauillac.inria.fr/coq</a></dd>
-
- <dt><a name="14"></a>[14]</dt>
- <dd>Tim Berner's Lee: The Semantic Web. W3C Architecture Note, 1998. </dd>
-
- <dt><a name="15"></a>[15]</dt>
- <dd>G. Huet, G. Plotkin (eds): Logical Frameworks. Cambridge University</dd>
-Press. 1991.
-
- <dt><a name="16"></a>[16]</dt>
- <dd>G. Huet, G. Plotkin (eds): Logical Environments. Cambridge University
-Press. 1993.</dd>
-
- <dt><a name="17"></a>[17]</dt>
- <dd>Kohlase, M.: OMDoc: Towards an Internet Standard for the Administration,
-Distribution and Teaching of mathematical Knowledge. Proceedings of Artificial
-Intelligence and Symbolic Computation, Springer LNAI, 2000. </dd>
-
- <dt><a name="18"></a>[18]</dt>
- <dd>Kohlase, M.: OMDoc: An Infrastructure for OpenMath Content Dictionary
-Information. Bulletin of the ACM Special Interest Group for Algorithmic
-Mathematics SIGSAM, 2000.</dd>
-</dl>
-
-<p>
-Prof. Dr. Andrea Asperti<br />
-Dipartimento di Scienze dell Informazione<br />
-Universita degli Studii di Bologna<br />
-Via di mura Anteo Zamboni VII<br />
-I - 40127 Bologna<br />
-Italy
-</p>
-
-<p>
-Prof. Dr. Bernd Wegner<br />
-Fakultaet II, Institut fuer Mathematik<br />
-TU Berlin, Sekr. MA 8-1<br />
-Strasse des 17. Juni 135<br />
-D - 10623 Berlin<br />
-Germany
-</p>
-</body>
-</html>
diff --git a/helm/mowgli/home/xml/publications/others/category_al.xml b/helm/mowgli/home/xml/publications/others/category_al.xml
deleted file mode 100644 (file)
index ffeab60..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Categories, Types and Structures. An introduction to Category
-  Theory for the Working Computer Scientist.</title>
- <author file="bologna/asperti"/>
- <author>
-  <name>Giuseppe</name>
-  <surname>Longo</surname>
- </author>
- <where>Foundation of Computing Series, Massachusetts Institute of Technology
-  Press, ISBN 0 262 01125-5, 1991</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/cc.xml b/helm/mowgli/home/xml/publications/others/cc.xml
deleted file mode 100644 (file)
index f6cc239..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Common Criteria for Information Technology Security Evaluation</title>
- <where>Part 1, 2, 3, Version 2.1. CCIMB-99-031, August 1999</where>
-</publication>
\ No newline at end of file
diff --git a/helm/mowgli/home/xml/publications/others/crimea2001_apss.xml b/helm/mowgli/home/xml/publications/others/crimea2001_apss.xml
deleted file mode 100644 (file)
index 1f151a6..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Formal Mathematics on the Web</title>
- <author file="bologna/asperti"/>
- <author file="bologna/padovani"/>
- <author file="bologna/sacerdoti"/>
- <author file="bologna/schena"/>
- <where>Proceedings of the Eighth International Conference on 
-        "Libraries and Associations in the Transient World:
-        New Technologies and New Forms of Cooperation", June 9-17, 2001,
-        Sudak, Autonomous Republic of Crimea, Ukraine</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/cup_hp91.xml b/helm/mowgli/home/xml/publications/others/cup_hp91.xml
deleted file mode 100644 (file)
index 6b94c6f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Logical Frameworks</title>
- <author>
-  <name>G.</name>
-  <surname>Huet</surname>
- </author>
- <author>
-  <name>G.</name>
-  <surname>Plotkin</surname>
- </author>
- <where>Cambridge University Press, 1991</where>
-</publication>
\ No newline at end of file
diff --git a/helm/mowgli/home/xml/publications/others/cup_hp93.xml b/helm/mowgli/home/xml/publications/others/cup_hp93.xml
deleted file mode 100644 (file)
index 22dcd18..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Logical Environments</title>
- <author>
-  <name>G.</name>
-  <surname>Huet</surname>
- </author>
- <author>
-  <name>G.</name>
-  <surname>Plotkin</surname>
- </author>
- <where>Cambridge University Press, 1993</where>
-</publication>
\ No newline at end of file
diff --git a/helm/mowgli/home/xml/publications/others/cup_s.xml b/helm/mowgli/home/xml/publications/others/cup_s.xml
deleted file mode 100644 (file)
index 2299f18..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>A First Course in General Relativity</title>
- <author file="aei/schutz"/>
- <where>Cambridge University Press, Cambridge (1985)</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/cup_s2.xml b/helm/mowgli/home/xml/publications/others/cup_s2.xml
deleted file mode 100644 (file)
index 353ee59..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Geometrical methods of mathematical physics</title>
- <author file="aei/schutz"/>
- <where>Cambridge University Press, Cambridge, (1980)</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/extreme2001_apss.xml b/helm/mowgli/home/xml/publications/others/extreme2001_apss.xml
deleted file mode 100644 (file)
index 43e30b0..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>XML, Stylesheets and the re-mathematization of Formal Content</title>
- <author file="bologna/asperti"/>
- <author file="bologna/padovani"/>
- <author file="bologna/sacerdoti"/>
- <author file="bologna/schena"/>
- <where>Proceedings of ``Extreme Markup Languages 2001 Conference'',
-  August 12-17, 2001, Montr'eal, Canada.</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/har_bg.xml b/helm/mowgli/home/xml/publications/others/har_bg.xml
deleted file mode 100644 (file)
index 2896fc3..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Proof Assistants using Dependent Type Systems</title>
- <author file="nijmegen/barendregt"/>
- <author file="nijmegen/geuvers"/>
- <where>to appear as a chapter of the Handbook of Automated Reasoning, eds.
-  A. Robinson and A. Voronkov, Elsevier 2001</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/jep_ws.xml b/helm/mowgli/home/xml/publications/others/jep_ws.xml
deleted file mode 100644 (file)
index 43064e5..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Making an Electronic Journal Live</title>
- <author>
-  <name>J.</name>
-  <surname>Wheary</surname>
- </author>
- <author file="aei/schutz"/>
- <where>Journal of Electronic Publishing, vol.3, is. 1, September (1997). (http://www.press.umich.edu/jep/03-01/LR.html)</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/jep_wwsw.xml b/helm/mowgli/home/xml/publications/others/jep_wwsw.xml
deleted file mode 100644 (file)
index dfb77dc..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Thinking and Developing Electronically</title>
- <author>
-  <name>J.</name>
-  <surname>Wheary</surname>
- </author>
- <author>
-  <name>L.</name>
-  <surname>Wild</surname>
- </author>
- <author file="aei/schutz"/>
- <author>
-  <name>C.</name>
-  <surname>Weyher</surname>
- </author>
- <where>Journal of Electronic Publishing, vol.4, is. 2, December (1998).
-  (http://www.press.umich.edu/jep/04-02/wheary2.html)</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/jlp2001_scg.xml b/helm/mowgli/home/xml/publications/others/jlp2001_scg.xml
deleted file mode 100644 (file)
index abb8b15..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>The logic and mathematics of occasion sentences</title>
- <author>
-  <name>P.A.M.</name>
-  <surname>Seuren</surname>
- </author>
- <author>
-  <name>Venanzio</name>
-  <surname>Capretta</surname>
- </author>
- <author file="nijmegen/geuvers"/>
- <where>The logic and mathematics of occasion sentences, to appear in the
-  Journal of Linguistics and Philosophy, 2001</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/mathml2000_apss.xml b/helm/mowgli/home/xml/publications/others/mathml2000_apss.xml
deleted file mode 100644 (file)
index 67d4946..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Formal Mathematics in MathML</title>
- <author file="bologna/asperti"/>
- <author file="bologna/padovani"/>
- <author file="bologna/sacerdoti"/>
- <author file="bologna/schena"/>
- <where>First MathML International Conference, October 20-21, 2000,
-  Urbana-Champaign, IL, USA.</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/mscs_gb.xml b/helm/mowgli/home/xml/publications/others/mscs_gb.xml
deleted file mode 100644 (file)
index 504d68d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Some logical and syntactical observations concerning the first
-  order dependent type system lambda P</title>
- <author file="nijmegen/geuvers"/>
- <author>
-  <name>E.</name>
-  <surname>Barendsen</surname>
- </author>
- <where>Mathematical Structures in Computer Science, vol. 9-4, 1999,
-   pp. 335 -- 360</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/publication.dtd b/helm/mowgli/home/xml/publications/others/publication.dtd
deleted file mode 100644 (file)
index 87efc81..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<!ELEMENT publication (title,author*,where,html?)>
-<!ELEMENT title (#PCDATA)>
-
-<!-- name,surname must be provided iff the "file" attribute is not provided -->
-<!ELEMENT author (name,surname)?>
-<!ATTLIST author
-          file CDATA #IMPLIED>
-
-<!ELEMENT where (#PCDATA)>
-<!ELEMENT name (#PCDATA)>
-<!ELEMENT surname (#PCDATA)>
-
-<!ELEMENT html EMPTY>
-<!ATTLIST html
-          file CDATA #REQUIRED>
diff --git a/helm/mowgli/home/xml/publications/others/tcs2001_og.xml b/helm/mowgli/home/xml/publications/others/tcs2001_og.xml
deleted file mode 100644 (file)
index 2844b10..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Proof by Computation in the Coq system</title>
- <author>
-  <name>M.</name>
-  <surname>Oostdijk</surname>
- </author>
- <author file="nijmegen/geuvers"/>
- <where>To appear in Theoretical Computer Science, 2001</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/tphols2000_gwz.xml b/helm/mowgli/home/xml/publications/others/tphols2000_gwz.xml
deleted file mode 100644 (file)
index 4707310..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>Equational Reasoning via Partial Reflection</title>
- <author file="nijmegen/geuvers"/>
- <author file="nijmegen/wiedijk"/>
- <author>
-  <name>J.</name>
-  <surname>Zwanenburg</surname>
- </author>
- <where>Theorem Proving for Higher Order Logics, TPHOL 2000, Portland OR, USA,
-   eds. M. Aagaard and J. Harrison, LNCS 1869, pp. 162 -- 178</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/tphols2001_apss.xml b/helm/mowgli/home/xml/publications/others/tphols2001_apss.xml
deleted file mode 100644 (file)
index 14154d3..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>HELM and the semantic Math-Web</title>
- <author file="bologna/asperti"/>
- <author file="bologna/padovani"/>
- <author file="bologna/sacerdoti"/>
- <author file="bologna/schena"/>
- <where>Proceedings of the 14th International Conference on Theorem
-  Proving in Higher Order Logics (TPHOLS 2001), 3-6 September 2001,
-  Edinburgh, Scotland</where>
-</publication>
diff --git a/helm/mowgli/home/xml/publications/others/w3c_bl98.xml b/helm/mowgli/home/xml/publications/others/w3c_bl98.xml
deleted file mode 100644 (file)
index 0d6dd98..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE publication SYSTEM "publication.dtd">
-
-<publication>
- <title>The Semantic Web</title>
- <author>
-  <name>Tim</name>
-  <surname>Berners-Lee</surname>
- </author>
- <where>W3C Architecture Note, 1998</where>
-</publication>
\ No newline at end of file
diff --git a/helm/mowgli/home/xml/sites/aei.xml b/helm/mowgli/home/xml/sites/aei.xml
deleted file mode 100644 (file)
index a4a1174..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<!DOCTYPE site SYSTEM "site.dtd">
-
-<site>
- <subsite>
-  <name>Max Planck Institute for Gravitational Physics (Albert Einstein
-   Institute)</name>
-  <country>Germany</country>
-  <url>http://www.aei.mpg.de</url>
-  <address>Am Muhlenberg 1, 14476 Golm, Germany</address>
-  <responsible file="aei/schutz"/>
-  <description>
-   <p>Since 1998 the Max Planck Institute for Gravitational Physics, which is
-      devoted to basic research in relativity, publishes one of the most
-      innovative electronic science journals, 
-      <a target="_top" href="http://www.livingreviews.org">Living Reviews in
-      Relativity</a>. Its mission is to build the
-      journal into a primary reference point in the field, exploiting new and
-      cutting edge Web technologies to maximise use, transparency, and depth
-      of the information provided. The Institute has a number of staff who
-      are exceptionally skilled in computing, and many of them contributed to
-      the development of software that has made the journal's Web site one of
-      the most advanced in the world of electronic publishing. Further
-      background information on the journal can be found at
-      <a target="_top" href="http://www.livingreviews.org/Project/index.html">http://www.livingreviews.org/Project/index.html</a>.  Fast and effective
-      international dissemination of the Web journal is provided by the
-      European Mathematical Society's Information Service, which maintains a
-      network of more than 30 mirror servers worldwide</p>
-   <p>The Institute has close connections to the newly founded Center for
-      Information Management of the Max Planck Society that will act as a
-      central service to the more than 80 Max Planck Institutes, to improve
-      their ability to access and to publish information on the Internet. It
-      is further cooperating with the leading European publisher of original
-      research in gravitational physics, the Institute of Physics Publishing
-      (Bristol, UK) with its journal <em>Classical and Quantum Relativity</em>.</p>
-    <p>The Max Planck Institute for Gravitational Physics will join forces
-       with Professor Bernd Wegner at the Technical University in Berlin.
-       Both parties are currently cooperating in the dissemination and
-       mirroring of electronic journals like
-       <em>Living Reviews in Relativity</em>.</p>
-  </description>
-  <member file="aei/schutz"/>
-  <member file="aei/kelley"/>
- </subsite>
- <subsite>
-  <name>Center for Information Management in the Max Planck Society</name>
-  <country>Germany</country>
-  <url>http://www.zim.mpg.de</url>
-  <address>c/o Max Planck Society, Hofgartenstrasse 8, PF 10 10 62,
-   D-80084 Munich, Germany</address>
-  <responsible file="aei/velden"/>
-  <description>
-   <p>The mission of the new Center for Information Management of the Max
-      Planck Society is to allow the Society with  its more than 80
-      specialized research Institutes to keep pace with and eventually play
-      a leadership role in Europe in the management of scientific information.
-      It will be staffed with 6 employees and start operating in September
-      2001. The project will be advised by a commission of MPG Institute
-      directors and Rick Luce, the Director of the Los Alamos National
-      Laboratory's "Library Without Walls".</p>
-  </description>
-  <member file="aei/velden"/>
- </subsite>
- <subsite>
-  <name>TU Berlin</name>
-  <country>Germany</country>
-  <url>http://www.emis.de</url>
-  <address>Fachbereich Mathematik, Technische Universität Berlin,
-   Straße des 17. Juni 135, D - 10623 Berlin</address>
-  <responsible file="aei/wegner"/>
-  <description>
-   <p>The Technische Universität Berlin, with some 28 300 students,
-      is the largest technical universities in Germany. In
-      contrast to most other such institutions it offers a wide range
-      of subjects. In addition to the core subjects in natural
-      sciences and engineering, the TU Berlin also has faculties and
-      institutes specialising in planning, humanities, social sciences
-      and economics. In the Berlin region it offers the widest range
-      of engineering options.</p>
-  </description>
-  <member file="aei/wegner"/>
- </subsite>
-</site>
diff --git a/helm/mowgli/home/xml/sites/bologna.xml b/helm/mowgli/home/xml/sites/bologna.xml
deleted file mode 100644 (file)
index 99949fb..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE site SYSTEM "site.dtd">
-
-<site>
- <name>University of Bologna (Italy), Department of Computer Science</name>
- <country>Italy</country>
- <url>http://www.cs.unibo.it</url>
- <address>Via di mura Anteo Zamboni VII, 40127, Bologna, ITALY</address>
- <responsible file="bologna/asperti"/>
- <description>
-  <p>The Department of Computer Science of Bologna is the
-     only educational institution in Italy to be affiliated
-     to the World Wide Web Consortium (and one of the few
-     members of this category in Europe). This affiliation
-     testifies the interest, both technical and didactic,
-     traditionally devoted by our Department to Web technologies,
-     Internet and, more generally, distributed computing.
-     This is joined to a solid expertise in programming
-     languages, algorithms, theory and formal methods,
-     that provides a very stimulating and dialectical environment
-     for research.
-     The Department is in charge of an undergraduate
-     Program in Computer Science, with more than three hundreds new
-     students a year, and a graduate Ph.D. Program, currently
-     comprising sixteen students.</p>
- </description>
- <project>
-  <name>Hypertextual Library of Mathematics</name>
-  <acronym>HELM</acronym>
-  <url>http://www.cs.unibo.it/helm</url>
-  <member file="bologna/asperti"/>
-  <member file="bologna/padovani"/>
-  <member file="bologna/schena"/>
-  <member file="bologna/guidi"/>
-  <member file="bologna/sacerdoti"/>
-  <description>
-   <p>The <em>Hypertextual Electronic Library of Mathematics</em> Project
-    is active in Bologna since 1999. Its aim is the development of a suitable
-    technology for the creation and maintenance of a virtual, distributed,
-    hypertextual library of formal mathematical knowledge. As a subsidiary
-    goal, HELM is meant to integrate the current tools for the automation of
-    formal reasoning and the mechanisation of mathematics (proof assistants
-    and logical frameworks) with the most recent technologies for the
-    development of Web applications and electronic publishing, taking
-    advantage of the potentiality offered by XML Technologies.
-    The Project is developed in tight cooperation with the W3C
-    MathML Working Group, which we are a member of.</p>
-  </description>
- </project>
-</site>
diff --git a/helm/mowgli/home/xml/sites/dfki.xml b/helm/mowgli/home/xml/sites/dfki.xml
deleted file mode 100644 (file)
index 102915b..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE site SYSTEM "site.dtd">
-
-<site>
- <name>German Research Center for Artificial Intelligence, GmbH, DFKI</name>
- <country>Germany</country>
- <url>http://www.dfki.uni-sb.de</url>
- <address>
-  DFKI GmbH,
-  Stuhlsatzenhausweg 3,
-  D-66123 Saarbr&#x00fc;cken
- </address>
- <responsible file="dfki/kohlhase"/>
- <description>
-  <p>The German Research Center for Artificial Intelligence
-     GmbH, DFKI was founded in 1988. Today, DFKI is one of the largest
-     non-profit contract research institutes in the field of innovative
-     software technology based on Artificial Intelligence (AI) methods. DFKI
-     is focusing on the complete cycle of innovation - from world-class basic
-     research and technology development through leading-edge demonstrators
-     and prototypes to product functions and commercialization. Based in
-     Kaiserslautern and Saarbr&#x00fc;cken, the German Research Center for
-     Artificial Intelligence ranks among the important ``Centers of
-     Excellence'' worldwide. The key directors of DFKI are Prof. Dr. Wolfgang
-     Wahlster (CEO) and Dr. Walter G. Olthoff (CFO).DFKI's mission is
-     technology transfer, that is to move innovations in AI as quickly as
-     possible from the lab into the marketplace by maintaining research
-     projects at the forefront of science. Expertise and experience of the
-     company DFKI has strong expertise in each of the following domains:</p>
-  <ul>
-   <li>Information Management and Document Analysis (Director: Prof. Dr.
-       Andreas Dengel)</li>
-   <li>Intelligent Visualization and Simulation Systems
-       (Director: Prof. Dr. Hans Hagen)</li>
-   <li>Deduction and Multiagent Systems (Director: Prof.
-       Dr. Jorg Siekmann)</li>
-   <li>Language Technology (Director: Prof. Dr. Hans Uszkoreit)</li>
-   <li>Intelligent User Interfaces (Director: Prof. Dr.
-       Wolfgang Wahlster)</li>
-  </ul>
-  <p>DFKI is involved in numerous industrial, academian
-     projects including projects in the current EC IST programme dealing with
-     research and development in the broad areas of intelligent interface
-     agents, and multiagent systems for applications in supply-chain
-     management, virtual enterprises, e-commerce and advanced information
-     systems. The partners of the DFKI are leading large-scale
-     concerns such as DaimlerChrysler, SAP, and Alcatel, plus the two
-     universities of Kaiserlautern and Saarbrucken. In the range of
-     medium-sized firms INSIDERS, IDS Scheer, Tecmath and KIBG are to be added.
-     Finally, the two most important large-scale research centers on
-     international level, i.e.  the Fraunhofer Society and GMD, round off the
-     circle of partners. DFKI is part of several European Networks of
-     Excellence such as AgentLink and CompuLog.</p>
-  <p>Recently, an Education Technology Group of DFKI, headed
-     by Prof. J.H. Siekmann, has been established. It has carried out basic
-     research and applications in several fields of AI, including presentation
-     planning (for education material), user modeling, proof planning,
-     knowledge representation (for educational and mathematical Web-documents)
-     and integration of (mathematical services). Its main prototypical product
-     so far has been the Web-based, user-adaptive, generative learning
-     environment ActiveMath that integrates several external services.
-     Members of the group are actively involved in the international academic
-     life by organizing or contributing to conferences and workshops.</p>
- </description>
- <member file="dfki/siekmann"/>
- <member file="dfki/kohlhase"/>
- <member file="dfki/melis"/>
- <member file="dfki/moschner"/>
- <member file="dfki/goguadze"/>
- <member file="dfki/libbrecht"/>
-</site>
diff --git a/helm/mowgli/home/xml/sites/inria.xml b/helm/mowgli/home/xml/sites/inria.xml
deleted file mode 100644 (file)
index ac3f5c2..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<!DOCTYPE site SYSTEM "site.dtd">
-
-<site>
- <name>Institut National de Recherche en Informatique et Automatique (INRIA)
-   Rocquencourt</name>
- <country>France</country>
- <url>http://www.inria.fr</url>
- <address>Domaine de Voluceau, 78153 Rocquencourt Cedex, France</address>
- <responsible file="inria/herbelin"/>
- <description>
-  <p>INRIA (National Institute for Research in Computer Science and
-     Control) is a French public-sector scientific and technological
-     institute operating under the dual authority of the Ministry of
-     Research and the Ministry of Industry. INRIA's missions are ``to
-     undertake basic and applied research, to design experimental systems,
-     to ensure technology and knowledge transfer, to organise international
-     scientific exchanges, to carry out scientific assessments, and to
-     contribute to standardisation''.</p>
-  <p>The research carried out at INRIA brings together experts from the
-     fields of computer science and applied mathematics covering the
-     following areas: Networks and Systems; Software Engineering and
-     Symbolic Computing; Man-Machine Interaction; Image Processing, Data
-     Management, Knowledge Systems; Simulation and Optimisation of Complex
-     Systems.</p>
-  <p>INRIA gathers in its premises around 2 100 persons including 1 600
-     scientists , many of which belong to partner organisations (CNRS,
-     industrial labs, universities) and are assigned to work in common
-     ``projects''. On INRIA's budget, around 500 full-time equivalent R&amp;D
-     positions can be accounted for.</p>
-  <p>A large number of INRIA senior researchers are involved in teaching
-     and their PhD students (about 550) prepare their thesis within the
-     different INRIA research projects (currently 74).</p>
-  <p>Its budget is roughly 90 MEuro, 20% of which comes from research and
-     development contracts, royalties and sales. Industrial relations are
-     strategic for INRIA:</p>
-  <dl>
-   <dt>Industrial contracts and European Projects.</dt>
-   <dd>Numerous industrial partners contract with the Institute for
-       collaborative research. They are French or foreign
-       companies, of all sizes. 400 such contracts are presently
-       active. Roughly 40% of these contracts are European funded
-       ones. Since 1984, 250 European Framework-Programme (FP)
-       projects have been executed.</dd>
-
-   <dt>Technology companies.</dt>
-   <dd>As the ultimate step in technology transfer, researchers are party to
-       the setting up of companies in order to implement their
-       technology on the market. Thirty seven spin-off companies
-       have been created since 1984. In 1999, INRIA has launched
-       two subsidiaries to promote high-tech start-up companies:
-       INRIA-TRANSFERT deals with early accompaniment of the
-       future companies, whereas I-SOURCE GESTION provides for
-       ``seed-money''.</dd>
-  </dl>
-  <p>INRIA is a member of ERCIM EEIG, European Research Consortium for
-     Computer Science and Mathematics. Outside Europe, INRIA also has a
-     significant activity: it has created joint research laboratories
-     (Russia and China), signed cooperation agreements (NSF, India, Brazil,
-     etc.) and promotes intensive scientific exchanges.</p>
- </description>
- <project>
-  <name>Lemme</name>
-  <url>http://www-sop.inria.fr/lemme</url>
-  <member file="inria/rideau"/>
-  <member file="inria/naciri"/>
-  <member file="inria/pottier"/>
-  <member file="inria/bertot"/>
-  <member file="inria/amerkad"/>
-  <member file="inria/thery"/>
-  <member file="inria/chicli"/>
-  <description>
-   <p>The purpose of the Lemme project is to introduce and develop formal
-      methods for use in writing scientific computing software. In scientific
-      computing, algorithms and mathematics are at the forefront. We are thus
-      developing tools and methods to help producing correct programs starting
-      from the usual mathematical descriptions of data, algorithms, properties
-      and proofs, structured into four research themes:</p>
-   <ul>
-    <li>Proof environments (development of the Pcoq system in Java and its
-        compatibility with XML/MathML).</li>
-    <li>Formalisation of mathematical theories (algebraic geometry, elementary
-        algebra and analysis).</li>
-    <li>Certified implementation of scientific computing algorithms (computer
-        algebra, arithmetics, logic).</li>
-    <li>Proofs on semantics of programming languages (Javacard).</li>
-   </ul>
-   <p>The project belongs to the European working group Types, and to the
-      French action AOC (Arithm\'etique des Ordinateurs Certifiée). It keeps
-      up industrial collaborations with Dassault-Aviation (program proof
-      environments), Alcatel Space Industry (certified numerical code), and
-      GemPlus (Javacard certification), and also collaborates with teachers at
-      university on the use of formal proofs and Web-based environments in
-      mathematics courses.</p>
-  </description>
- </project>
- <project>
-  <name>LogiCal</name>
-  <url>http://www.logical.inria.fr</url>
-  <member file="inria/herbelin"/>
-  <member file="inria/delahaye"/>
-  <description>
-   <p>The LogiCal team of INRIA is working on theoretical and practical
-      aspects of mathematical proofs. It develops the Coq proof assistant,
-      an implementation of an expressive formalism called Calculus of
-      Inductive Constructions. Coq is used both for development of formal
-      mathematics and for certification of programs, especially protocols
-      and critical systems.</p>
-   <p>The LogiCal project is a joint project with University Paris 11.  It
-      is involved in the European TYPES working group and in several French
-      actions. Especially, it is involved in the S-Java action aiming at
-      certifying safety properties for JavaCard programs, in a project
-      aiming at certifying algorithms used in computer algebra
-      systems. LogiCal collaborates also on proof automation with France
-      Telecom.</p>
-  </description>
- </project>
-</site>
diff --git a/helm/mowgli/home/xml/sites/nijmegen.xml b/helm/mowgli/home/xml/sites/nijmegen.xml
deleted file mode 100644 (file)
index a8daab2..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE site SYSTEM "site.dtd">
-
-<site>
- <name>Katholieke Universiteit Nijmegen</name>
- <country>The Netherlands</country>
- <url>http://www.cs.kun.nl</url>
- <address>Subfaculteit Informatica,
-  Faculteit Natuurwetenschappen, Wiskunde en Informatica,
-  Katholieke Universiteit Nijmegen,
-  Toernooiveld 1, 6525 ED Nijmegen, The Netherlands</address>
- <responsible file="nijmegen/geuvers"/>
- <description>
-  <p>The Sub-faculty of Computer Science at the University of Nijmegen hosts
-     a broad experience in logic, formal methods and theorem proving. The
-     Faculty of Mathematics and Computer Science of Eindhoven University of
-     Technology is strong in computer algebra, theorem proving and applying
-     Web technology to mathematics. Nijmegen and Eindhoven have a long
-     history in cooperation on topics related to this FET proposal, notably
-     type theory, theorem proving and combining various computer
-     mathematics applications, especially using OpenMath. This cooperation
-     was mainly taking place between the research groups of Geuvers and
-     Barendregt in Nijmegen and the research group of Cohen in Eindhoven.</p>
-  <p>The research group of Geuvers and Barendregt is part of the EC
-     sponsored Thematic Network ``TYPES'' (IST-1999-29001) and of its
-     ancestor, the EC Working Group ``Types for Proofs and Programs'',
-     which testifies there interest in theorem proving, especially using
-     type theory based theorem provers. The FTA project (Fundamental
-     Theorem of Algebra), started in 1999 and to be finished in 2001, has
-     as its main goal to formalize (in Coq) a large body of undergraduate
-     mathematics (algebra and analysis), culminating in a proof of the
-     fundamental theorem of algebra. The formalization of the mathematics
-     is now finished and the next step is to make the formalization
-     accessible and usable by others, preferably through the World Wide
-     Web.</p>
-  <p>The research group in Nijmegen and the research group of Cohen in
-     Eindhoven are both part of the EC Working Group Calculemus, which aims
-     at bridging the gap between different mathematical computer
-     applications, like computer algebra systems and theorem provers. One
-     of the vehicles for doing so is the definition of OpenMath as an
-     intermediate language for the exchange of mathematical objects among
-     computer applications.
-     The research group of Cohen is part of the
-     IST Thematic Network ``OpenMath'' (IST-2000-28719) and its ancestor,
-     the OpenMath Esprit project (see <a target="_top" href="http://www.openmath.org/">http://www.openmath.org/</a>).</p>
- </description>
- <member file="nijmegen/geuvers"/>
- <member file="nijmegen/cohen"/>
- <member file="nijmegen/barendregt"/>
- <member file="nijmegen/wiedijk"/>
- <member file="nijmegen/barreiro"/>
- <member file="nijmegen/cruz-filipe"/>
- <member file="nijmegen/niqui"/>
- <member file="nijmegen/stein"/>
- <member file="nijmegen/synek"/>
-
-</site>
diff --git a/helm/mowgli/home/xml/sites/site.dtd b/helm/mowgli/home/xml/sites/site.dtd
deleted file mode 100644 (file)
index ce43fdd..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<!ENTITY % in_site "(name,country,url,address,responsible,description,member*,project*)">
-
-<!ELEMENT site (%in_site;|subsite+)>
-<!ELEMENT subsite %in_site;>
-<!ELEMENT name (#PCDATA)>
-<!ELEMENT country (#PCDATA)>
-<!ELEMENT url (#PCDATA)>
-<!ELEMENT address (#PCDATA)>
-<!ELEMENT responsible EMPTY>
-<!ATTLIST responsible
-          file CDATA #REQUIRED>
-<!ELEMENT description (p|dl|ul)+>
-<!ELEMENT project (name,acronym?,url,member+,description)>
-<!ELEMENT acronym (#PCDATA)>
-<!ELEMENT member EMPTY>
-<!ATTLIST member
-          file CDATA #REQUIRED>
-
-<!-- A subset of XHTML -->
-<!ELEMENT p (#PCDATA|em|a)*>
-<!ELEMENT em (#PCDATA)>
-<!ELEMENT a (#PCDATA)>
-<!ATTLIST a
-          target CDATA #IMPLIED
-          href CDATA #REQUIRED>
-<!ELEMENT dl (dt|dd)+>
-<!ELEMENT dt (#PCDATA)>
-<!ELEMENT dd (#PCDATA)>
-<!ELEMENT ul (li)+>
-<!ELEMENT li (#PCDATA)>
diff --git a/helm/mowgli/home/xml/sites/trusted-logic.xml b/helm/mowgli/home/xml/sites/trusted-logic.xml
deleted file mode 100644 (file)
index ed5a5d8..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE site SYSTEM "site.dtd">
-
-<site>
- <name>Trusted Logic</name>
- <country>France</country>
- <url>http://www.trusted-logic.fr</url>
- <address>
-   5 rue du Bailliage,
-   78000 Versailles,
-   FRANCE
- </address>
- <responsible file="trusted-logic/bolignano"/>
- <description>
-  <p>Created in January 1999, TRUSTED LOGIC S.A. is a french start-up company,
-     which presents a unique combination of expertise in embedded
-     software challenges and in formal methods analysis.
-     TRUSTED LOGIC offers a wide range of efficient and secure solutions for
-     smart cards and terminals in the following areas : open systems for smart
-     cards (Java Card,Windows SmartCards, Multos), open systems for terminals
-     (mobile phones, PDA, bank terminals, etc), e-commerce, remote secured
-     access to intranets, and secured networks infrastructures (home or car
-     control).</p>
-  <p>The development methodology, inside Trusted Logic S.A., includes a
-     permanent concern of quality and security aspects (formal specification
-     and proofs) that provides a software which is efficient, reliable and
-     ready to face high level Common Criteria evaluations when needed</p>
-  <p>The main actors in the smart card and in the embedded software industry
-     are among its customers : Sun Microsystems Inc., Bull, Gemplus,  Oberthur,
-     Schlumberger,  ST Microelectronics, VISA International, Carte Bleue, GIE
-     Cartes Bancaires, ActivCard, Proton World International, etc.</p>
- </description>
- <member file="trusted-logic/bolignano"/> 
-</site>
diff --git a/helm/mowgli/home/xml/slides/mowgligroup.xml b/helm/mowgli/home/xml/slides/mowgligroup.xml
deleted file mode 100644 (file)
index 4988948..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0"?>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>Activities in the Nijmegen - Eindhoven site</title>
-</head>
-<body>
-<H1> MOWGLI Kick-Off Meeting Berlin, March 15, 2002</H1>
-
-<H3>Activities in the Nijmegen - Eindhoven site</H3>
-
-
-<H4>People</H4>
-<B> Nijmegen</B>:
-<UL>
-<LI> Henk Barendregt (prof.) </LI>
-<LI>  Herman Geuvers (assoc. prof.) </LI>
-<LI>  Freek Wiedijk (post-doc)  </LI>
-<LI>  Dan Synek (sci. progr.) </LI>
-<LI>  Milad Niqui (Ph.D. stud.) </LI>
-<LI>  Jasper Stein (Ph.D. stud.) </LI>
-<LI>  Luis Cruz-Filipe (Ph.D. stud.) </LI>
-<LI>  Georgi Jojgov (Ph.D. stud.) </LI>
-</UL>
-<B> Eindhoven</B>
-<UL>
-<LI> Arjeh Cohen (prof.) </LI>
-<LI> Scott Murray (post-doc) </LI>
-<LI> Ernesto Reinaldo (Ph.D. stud.) </LI>
-</UL>
-<H4>Focus</H4>
-<B> Nijmegen</B>:
-<B>Formalizing Mathematics</B>: To devise and study computer systems
-for formalizing mathematics, which includes mathematical activities as
-defining, computing and proving, but also the
-activities of presenting and editing formalized
-mathematics.
-<BR />
-<B> Eindhoven</B>
-<B>Interactive Mathematical Documents</B>: Mathematical documents on
-the WWW, with interaction possibilities with various
-mathematical applications. Use of OpenMath (resp.
-OmDoc) to represent these documents, in order to have
-semantically meaningful representation of mathematical objects.
-
-<H4> Actual Activities</H4>
-<UL>
-<LI> Study the underlying formal logic of theorem provers. </LI>
-<LI> Formalizing mathematics (Coq: FTA, Analysis, Lin.
-Alg., Reals). </LI>
-<LI> Adding automation/computation facilities to a theorem
-prover (Coq). </LI>
-<LI> Investigate various proof styles, notably by comparing
-various theorem provers (Coq, Mizar, Hol-light). </LI>
-<LI> Develop a benchmark for mathematical theorem provers. </LI>
-<LI> Study the presentation and communication of proof developments. </LI>
-<LI> Development and use of OpenMath as a language for coding
-and communicating `meaningful' mathematical objects. </LI>
-<LI> IDA: Interactive Course Notes Algebra, based on OpenMath/OMDoc. </LI>
-<LI> Develop packages for XML-based interaction between
-math. applications. </LI>
-</UL>
-
-<H4> Interest in Mowgli</H4>
-<UL> 
-<LI> Rendering of Libraries of Formalized Mathematics. </LI>
-<LI> Searching/Retrieving information (knowledge) from these Libraries. </LI>
-<LI> Presentation of Formal proof/theory developments. </LI>
-</UL>
-
-<H4> Interest in Mowgli</H4>
-<UL> 
-<LI> Rendering of Libraries of Formalized Mathematics. </LI>
-<LI> Searching/Retrieving information (knowledge) from these Libraries. </LI>
-<LI> Presentation of Formal proof/theory developments. </LI>
-</UL>
-
-
-<H4> Planned Contribution to Mowgli</H4>
-<UL> 
-<LI> Requirements Analysis: What do we need &amp; What is already there? </LI>
-<LI> Transformation of formal proofs (into MathMl/XML/...). </LI>
-<LI> Generation of Natural Language proofs. (Views on proofs.) </LI>
-<LI> Validation of the system through large math. theory developments. </LI>
-</UL>
-</body>
-</html>
diff --git a/helm/mowgli/home/xml/software/index.xml b/helm/mowgli/home/xml/software/index.xml
deleted file mode 100644 (file)
index d9e3bdb..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html [
- <!-- A subset of XHTML -->
- <!ELEMENT html (head,body)>
- <!ELEMENT head (title)>
- <!ELEMENT title (#PCDATA)>
- <!ELEMENT body (h1|p|br)*>
- <!ELEMENT h1 (#PCDATA)>
- <!ELEMENT p (#PCDATA)>
- <!ELEMENT br EMPTY>
-]>
-
-<html>
- <head>
-  <title>Software</title>
- </head>
-
- <body>
-  <h1>Software</h1>
-
-  <p>Nothing has been released yet. Try later.</p>
-
-  <br/><br/>
- </body>
-
-</html>
-
diff --git a/helm/mowgli/home/xml/work-packages/distribution.xml b/helm/mowgli/home/xml/work-packages/distribution.xml
deleted file mode 100644 (file)
index 2f81e8d..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE work-package SYSTEM "work-package.dtd">
-
-<work-package number="5">
- <name>Distribution</name>
- <begin>Month 18</begin>
- <end>Month 30</end>
- <leader file="dfki/kohlhase"/>
- <person-month participant="bologna" number="6"/>
- <person-month participant="inria" number="5"/>
- <person-month participant="dfki" number="8"/>
- <person-month participant="nijmegen" number="3"/>
- <person-month participant="aei" number="5"/>
- <person-month participant="trusted-logic" number="0"/>
- <objectives>
-  <p>Overall architectural design of the distribution model,
-     its implementation and integration with the consultation
-     engine.</p>
- </objectives>
- <description>
-  <p>The work is articulated in three, conceptually sequential
-     tasks:</p>
-  <tasks>
-   <task id="T5.1">
-    <name>Architectural Design of the Distribution Model.</name>
-    <p>The big
-       issue it to find the right compromise between two opposite
-       requirements: <em>distribution</em> (in the sense of the
-       Web: few rules, no central authority) and <em>coherence</em>
-       (coherence between different copies of a same document
-       and global management of the library as a single rational
-       development). Other architectural problems to be solved
-       are the management of Uniform Resource Identifiers, their
-       mapping to Uniform Resource Locators, and the integration
-       of databases in the distribution model. The final aim is
-       to have a <em>phisically</em> distributed library with a
-       single <em>logical</em> view.</p>
-   </task>
-   <task id="T5.2">
-    <name>Prototype implementation.</name> 
-    <p>First prototyping implementation
-       of the distribution layer.</p>
-   </task>
-   <task id="T5.3">
-    <name>Integration with the Consultation Engine.</name>
-    <p>First
-       implementation of the library as a distributed repository.
-       Distribution should be completely transparent to users of
-       the Consultation Engine.</p>
-   </task>
-  </tasks>
- </description>
- <deliverable file="distribution/d5a"/>
- <deliverable file="distribution/d5b"/>
- <milestones>
-  <p>The main milestone is the release of the advanced MOWGLI
-     prototype, for the fourth meeting of the project, at month
-     24. The advanced prototype will integrate the previous one
-     with the new distribution facilities offered by the
-     distribution layer.</p>
- </milestones>
-</work-package>
diff --git a/helm/mowgli/home/xml/work-packages/index.xml b/helm/mowgli/home/xml/work-packages/index.xml
deleted file mode 100644 (file)
index f032a7d..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE work-packages [
- <!ELEMENT work-packages (work-package+,description)>
-
- <!ELEMENT work-package EMPTY>
- <!ATTLIST work-package
-           file CDATA #REQUIRED>
-
- <!ELEMENT description (p|dl|ul|ol)+>
-
- <!-- A subset of XHTML -->
- <!ELEMENT p (#PCDATA|em|a)*>
- <!ELEMENT em (#PCDATA)>
- <!ELEMENT a (#PCDATA)>
- <!ATTLIST a
-           href CDATA #REQUIRED>
- <!ELEMENT dl (dt|dd)+>
- <!ELEMENT dt (#PCDATA)>
- <!ELEMENT dd (#PCDATA)>
- <!ELEMENT ul (li)+>
- <!ELEMENT ol (li)+>
- <!ELEMENT li (#PCDATA)>
-]>
-
-<work-packages>
- <work-package file="project-management"/>
- <work-package file="requirement-analysis"/>
- <work-package file="transformation"/>
- <work-package file="metadata"/>
- <work-package file="interfaces"/>
- <work-package file="distribution"/>
- <work-package file="testing-and-validation"/>
- <work-package file="information-dissemination-and-exploitation"/>
- <description>
-  <p>The previous work packages are not strictly sequential.</p>
-  <p> WP1 should be reasonably short; apart from a few topics requiring a
-      deeper analysis (Tasks 1.3-5), this phase is essentially meant to rapidly
-      reach a good level of inter-operability among the different sites.</p>
-  <p>Most part of the work is based on the possibility to have at our
-     disposal, and as soon as possible, large collections of documents encoded
-     with semantic markup. One strategy is the import of material (e.g.
-     journal articles) written in LaTeX. The development of a suitable LaTeX
-     based authoring tool (Task 4.4) will need to begin immediately, as an
-     appropriate semantic encoding in LaTeX has to be developed first.
-     The delivery of the first prototype of the authoring tool is scheduled
-     for month 18.</p>
-  <p>A more rapid way to get meaningful repositories of fully structured
-     mathematical knowledge is by exporting them from the available
-     libraries of Logical Frameworks and Proof Assistants (Task 2.1).
-     The intelligence contained in the exported XML files should reflect the
-     requirements defined
-     in the previous work package, requiring a deep analysis of the markup
-     model. After six months from the beginning of the project we plan to have
-     a first prototype of the Exportation Module and a first draft of the
-     Document Type Descriptor for thelow, logical level. This is our first
-     Milestone.</p>
-  <p>At this point we may start the study of the intermediate format of the
-     information, and the implementation of the stylesheets performing the
-     transformation (tasks T2.2-3). This part of the work is expected to be
-     essentially completed after one year (second Milestone). Since a strong
-     feedback is expectedwith presentational issues, we plan to begin the
-     development of presentational stylesheets around month 9. In turn, the
-     need of rapidly have at our disposal good presentational engines suggests
-     to begin their development as soon as possible (task 4.1).</p>
-  <p>In parallel with these transformation issues, we shall start the study and
-     classification of metadata, and their concrete modelling.</p>
-  <p>Summing up, at the end of first year we plan to have:</p>
-  <ul>
-   <li>a formal Document Type Descriptor of the intermediate level;</li>
-   <li>a bunch of stylesheet performing the transformation to intermediate
-       representation, both for formulae and proofs;</li>
-   <li>a detailed report on metadata;</li>
-   <li>a first prototype model of metadata (in RDF format);</li>
-   <li>a prototype MathML-viewer.</li>
-  </ul>
-  <p>During the first half of second year we shall perform, in parallel, four
-     major activities:</p>
-  <ul>
-   <li>study and development of presentational stylesheets, both for expressions
-       and proofs, and automatic extraction of metadata (tasks T2.4-6).</li>
-   <li>architectural design and implementation of the consultation engine (task
-       T4.2, requiring the metadata model), and of the functionalities for
-       assisted annotation in natural language of the documents (task T4.3,
-       requiring both the MathML-viewer, and a detailed description of the
-       intermediate level).</li>
-   <li>overall architectural design and first prototype implementation of the
-       distribution model (task T5.1-T5.2).</li>
-   <li>finalize the first prototype of a LaTeX based authoring tool
-       (Task 4.4)</li>
-  </ul>
-  <p>The second half of the second year is devoted to the completion of the
-     previous tasks, and to their integration inside a single, compound
-     application. Around this time we shall also start a detailed validation
-     of the application, according to three pilot applications:</p>
-  <ol>
-   <li>Formalisation of a full undergraduate course in algebra or analysis for
-       didactical purposes.</li>
-   <li>Formalization of (part of) the process of loading, verifying and
-       executing an applet into a smart card. This application will provide
-       a case study close to both information technology (IT) industry and
-       Computer Science research, where the presentation and layout needs are
-       not exactly the same as in Mathematics. The example concerns the
-       representation of different abstract state machines, transition systems,
-       typing calculus, and program code. Such concepts are pragmatic use cases
-       of the formal concepts that usually appears in security evaluations of
-       IT products and Computer Science articles.</li>
-   <li>Make maximal use of content marked-up articles in a solely
-       electronic scientific physics journal. This will allow us to demonstrate
-       the benefits of content mark-up for search, retrieval, and re-use of
-       mathematical content, and user customisable content presentation.
-       Several articles will be processed to test scope, functionality, and
-       user friendliness of the authoring tool developed in Task 4.4. The tool
-       will be refined and the mathematical semantics covered extended. The
-       suite of articles will be used to show benefits of automated
-       annotation and cross-linking between related mathematical concepts.</li>
-  </ol>
-  <p>The last six months are mainly devoted to testing, debugging, validation,
-     dissemination of results and exploitation plans.</p>
- </description>
-</work-packages>
diff --git a/helm/mowgli/home/xml/work-packages/information-dissemination-and-exploitation.xml b/helm/mowgli/home/xml/work-packages/information-dissemination-and-exploitation.xml
deleted file mode 100644 (file)
index fe427b1..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE work-package SYSTEM "work-package.dtd">
-
-<work-package number="7">
- <name>Information Dissemination and Exploitation</name>
- <begin>Month 3</begin>
- <end>Month 30</end>
- <leader file="aei/wegner"/>
- <person-month participant="bologna" number="1"/>
- <person-month participant="inria" number="0"/>
- <person-month participant="dfki" number="0"/>
- <person-month participant="nijmegen" number="1"/>
- <person-month participant="aei" number="6"/>
- <person-month participant="trusted-logic" number="0"/>
- <objectives>
-  <p>The work package aims to:</p>
-  <ul>
-   <li>involve the largest community of professionals in the
-       modelling phase.</li>
-   <li>promote dissemination of project results in the relevant
-       international forums.</li>
-   <li>promote the use of the service, both for educational and
-       professional purposes. This phase will start after the
-       release of the first prototype, at month 18.</li>
-  </ul>
- </objectives>
- <description>
-  <p>The dissemination of results is in charge of the Project
-     Dissemination &amp; Exploitation Committee, which is
-     responsible to prepare, during the first six months, a
-     detailed dissemination work-plan (D2), and to follow its
-     execution during the Project.</p>
-  <p>Information dissemination will take place via
-     professional journal articles, presentations at conferences,
-     international news groups, specific interest groups and so
-     on. Relevant reports of the projects will be made publicly
-     available on the World Wide Web. For advanced
-     releases, we also plan to prepare an ``information pack'',
-     including a folder and CDROM with demos.</p>
- </description>
- <deliverable file="information-dissemination-and-exploitation/d7a"/>
- <deliverable file="information-dissemination-and-exploitation/d7b"/>
- <deliverable>Scientific Publications on professional journals
-  and conference proceedings.</deliverable>
- <milestones>
-  <p>Criteria for evaluating MOWGLI's dissemination and its
-     technological impact will be detailed in the Dissemination
-     and use Plan. The Project Dissemination &amp; Exploitation
-     Committee will be in charge to monitor the state of
-     advancement of the Project according to these criteria.</p>
- </milestones>
-</work-package>
diff --git a/helm/mowgli/home/xml/work-packages/interfaces.xml b/helm/mowgli/home/xml/work-packages/interfaces.xml
deleted file mode 100644 (file)
index b8ca886..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE work-package SYSTEM "work-package.dtd">
-
-<work-package number="4">
- <name>Interfaces</name>
- <begin>Month 3</begin>
- <end>Month 24</end>
- <leader file="inria/pottier"/>
- <person-month participant="bologna" number="16"/>
- <person-month participant="inria" number="16"/>
- <person-month participant="dfki" number="5"/>
- <person-month participant="nijmegen" number="4"/>
- <person-month participant="aei" number="14"/>
- <person-month participant="trusted-logic" number="0"/>
- <objectives>
-  <p>This Work-Package is devoted to the design and the
-     implementation of the interfaces to the library, covering
-     rendering, browsing, searching and retrieving
-     functionalities. Some additional functionalities for
-     authoring purposes (such as computer assisted annotation of
-     proofs) will be also taken into account.</p>
-  <p>Our privileged rendering language will be MathML, which is
-     likely to be rapidly adopted as the main language for
-     representing mathematical notation on the Web.</p>
- </objectives>
- <description>
-  <p>The work is organised in the following tasks:</p>
-  <tasks>
-   <task id="T4.1">
-    <name>MathML rendering/browsing engines.</name>
-    <p>Our privileged
-       rendering language will be MathML. In order to be able to
-       test the presentational stylesheets,(Task 2.5) we need a
-       MathML compliant browser, that will be developed as a
-       part of the project (starting from a previous
-       prototype).</p>
-   </task>
-   <task id="T4.2">
-    <name>Consultation Engine (archiving, searching and retrieving).</name>
-    <p>The task is devoted to the architectural design and
-       implementation of the main functionalities for the
-       consultation and the management of the library.</p>
-   </task>
-   <task id="T4.3">
-    <name>Assisted Annotation.</name>
-    <p>This cover an additional
-       functionality of the interface, aimed to support the user
-       in the process of annotating a proof in natural
-       language.</p>
-   </task>
-   <task id="T4.4">
-    <name>LaTeX-based authoring tool.</name>
-    <p>A tool supporting automatic
-       generation of Content-MathML from a suitably
-       (macro-)enriched version of LaTeX.</p>
-   </task>
-  </tasks>
- </description>
- <deliverable file="interfaces/d4a"/>
- <deliverable file="interfaces/d4b"/>
- <deliverable file="interfaces/d4c"/>
- <deliverable file="interfaces/d4d"/>
- <deliverable file="interfaces/d4e"/>
- <milestones>
-  <p>The main milestone is the release of the first MOWGLI
-     prototype, at month 18.</p>
- </milestones>
-</work-package>
diff --git a/helm/mowgli/home/xml/work-packages/metadata.xml b/helm/mowgli/home/xml/work-packages/metadata.xml
deleted file mode 100644 (file)
index c6eff07..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE work-package SYSTEM "work-package.dtd">
-
-<work-package number="3">
- <name>Metadata</name>
- <begin>Month 6</begin>
- <end>Month 21</end>
- <leader file="dfki/melis"/>
- <person-month participant="bologna" number="3"/>
- <person-month participant="inria" number="3"/>
- <person-month participant="dfki" number="8"/>
- <person-month participant="nijmegen" number="3"/>
- <person-month participant="aei" number="3"/>
- <person-month participant="trusted-logic" number="0"/>
- <objectives>
-  <ul>
-   <li>Delineation of the basic intelligence to be considered
-       for encapsulation in metadata, in order to meet the needs
-       delineated during Requirement Analysis (WP1).</li>
-   <li>Definition and Development of a specific Markup Model
-       in RDF.</li>
-  </ul>
- </objectives>
- <description>
-  <p>The precise definition of metadata and their actual
-     Markup Model are essential aspects for implementing the
-     main functionalities of the library, and especially for
-     archiving, searching and retrieving issues. The work will
-     be articulated in two main, almost sequential, tasks:</p>
-  <tasks>
-   <task id="T3.1">
-    <name>Use, meaning and classification.</name>
-    <p>This task, based on the
-       previous documents D1 and D2, is aimed to provide a
-       precise definition and classification of all metadata
-       required for an effective and efficient management of the
-       library.</p>
-   </task>
-   <task id="T3.2">
-    <name>Modelling.</name>
-    <p>This is devoted to the definition of a precise
-       markup model. To this aim, we plan to use the Resource
-       Description Framework of W3C.</p>
-   </task>
-  </tasks>
- </description>
- <deliverable file="metadata/d3a"/>
- <deliverable file="metadata/d3b"/>
- <milestones>
-  <p>The definition of the Metadata model is amain milestone,
-     since the architectural design and implementation of the
-     consultation engine (Task 4.2) will be essentially based on
-     it. Similarly, it is required for Task 2.4 (automatic
-     extraction of metadata).</p>
- </milestones>
-</work-package>
diff --git a/helm/mowgli/home/xml/work-packages/project-management.xml b/helm/mowgli/home/xml/work-packages/project-management.xml
deleted file mode 100644 (file)
index 645d2be..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE work-package SYSTEM "work-package.dtd">
-
-<work-package number="0">
- <name>Project Management</name>
- <begin>Month 0</begin>
- <end>Month 30</end>
- <leader file="bologna/asperti"/>
- <person-month participant="bologna" number="8"/>
- <person-month participant="inria" number="0"/>
- <person-month participant="dfki" number="0"/>
- <person-month participant="nijmegen" number="0"/>
- <person-month participant="aei" number="0"/>
- <person-month participant="trusted-logic" number="0"/>
- <objectives>
-  <ul>
-   <li>General project management and coordination.</li>
-   <li>Knowledge and skills transfer between consortium
-    members.</li>
-   <li>Relation to the European Commission.</li>
-  </ul>
- </objectives>
- <description>
-  <p>The Project management will be assured by the following
-     relevant roles: a) Project Manager, b) Exploitation manager,
-     c) Work-package Leaders d)Technical Contributors, and by
-     the following Project Bodies: a)Project Coordination
-     Committee (PCC), b) Project Exploitation Board (PEB) and e)
-     Work-package Teams.</p>
-  <p>The {\bf Project Manager} chairs the PCC. The
-     mandate of the PCC is to represent the Project, report to
-     the Commission, monitor overall performance of the project,
-     ensure accomplishment of the technical objectives, promote
-     project visibility, promote dissemination of project results
-     in the relevant international forums, promote acceptance of
-     project results, administer project resources and monitor
-     project spending. The {\bf Exploitation Manager} will be
-     responsible for coordinating dissemination and exploitation
-     activities undertaken by the Project Exploitation Board
-     (PEB) in close cooperation with the Project Coordination
-     Committee (PCC).</p>
-   <p>Information flow within the Project will be ensured by
-      exchange of internal technical papers, notification of
-      relevant new publications technologies or standards, and
-      reports from external meetings. All technical documentation
-      generated by the project will be exchangeable in electronic
-      format, according to a set of guidelines to be agreed at
-      project start-up. The project Manager will enforce
-      adherence to these guidelines. Only strictly formal
-      correspondence will be exchanged by ordinary mail and
-      telefax. Urgent correspondence over e-email will be sent
-      with a request for explicit acknowledgement.</p>
-   <p>The Coordinating Partner will be responsible to prepare
-      and maintain a Web page of the project and a CVS repository
-      (also available via Web).</p>
- </description>
- <deliverable>Cost Statements and Project Reports (month 12, 20,
-  30).</deliverable>
- <deliverable file="project-management/d0a"/>
- <deliverable file="project-management/d0b"/>
- <deliverable file="project-management/d0c"/>
- <deliverable file="project-management/d0d"/>
- <milestones>
-  <p>Main milestones are the periodic meetings, at month 6, 12,
-   20, 24, 30.</p>
- </milestones>
-</work-package>
diff --git a/helm/mowgli/home/xml/work-packages/requirement-analysis.xml b/helm/mowgli/home/xml/work-packages/requirement-analysis.xml
deleted file mode 100644 (file)
index 996fce7..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE work-package SYSTEM "work-package.dtd">
-
-<work-package number="1">
- <name>Requirement Analysis</name>
- <begin>Month 0</begin>
- <end>Month 6</end>
- <leader file="nijmegen/geuvers"/>
- <person-month participant="bologna" number="3"/>
- <person-month participant="inria" number="4"/>
- <person-month participant="dfki" number="3"/>
- <person-month participant="nijmegen" number="6"/>
- <person-month participant="aei" number="3"/>
- <person-month participant="trusted-logic" number="1"/>
- <objectives>
-  <ul>
-   <li>Definition of the application scenarios.</li>
-   <li>Precise articulation of all the functionalities required
-       by the system, and all possible expected interactions
-       with documents.</li>
-   <li>Overall requirements of the distribution model of the
-       library.</li>
-  </ul>
- </objectives>
- <description>
-  <p>The work plan is naturally organised in subtasks according
-     to the different basic kind of interactions and manipulation
-     to be considered, namely:</p>
-  <tasks>
-   <task id="T1.1">
-    <name>Mathematics and the Web.</name>
-    <p>State of the art, standards and
-       tools.</p>
-   </task>
-   <task id="T1.2">
-    <name>Structured and Formal Mathematics.</name>
-    <p>Delineation and
-       layering of Semantic Components. Requirements for
-       the interaction with tools for the automation of formal
-       reasoning.</p>
-   </task>
-   <task id="T1.3">
-    <name>Metadata.</name>
-    <p>Classification and data mining for content-based
-       mathematical documents, and key architectural guidelines
-       for the metadata model.</p>
-   </task>
-   <task id="T1.4">
-    <name>Searching and Retrieving.</name> 
-    <p>State of the art, use cases and
-       application scenarios.</p>
-   </task>
-   <task id="T1.5">
-    <name>Distribution.</name>
-    <p>Distributed document repositories and
-       peer-to-peer interoperability.</p>
-   </task>
-   <task id="T1.6">
-    <name>Document Authoring.</name> 
-    <p>State of the art, use cases and
-       application scenarios.</p>
-   </task>
-  </tasks>
-  <p>Part of the activity, covering Tasks T1.1-2-6 should be
-     concluded within the first three months, with the
-     preliminary report D1.a. The main aim of this phase is
-     to rapidly reach a good level of inter-operability among the
-     different sites, by implementing a suitable politic of
-     knowledge and skills transfer between the members of the
-     consortium (short visits and/or small thematic workshops,
-     according to the case).</p>
-  <p>However, some delicate issues, such as Metadata, Searching
-     and Retrieving and Distribution (Task T1.3-4-5) will
-     eventually require a deeper analysis (deliverables D1.b and
-     D1.c).</p>
-  <p>WP1 will be eventually closed during the first meeting of
-     the Project (month six), when all the reports will be
-     discussed and approved.</p>
- </description>
- <deliverable file="requirement-analysis/d1a"/>
- <deliverable file="requirement-analysis/d1b"/>
- <deliverable file="requirement-analysis/d1c"/>
- <milestones>
-  <p>The preliminary report D1.a is not a realmilestone:
-     it should be considered as a first internal draft summarising
-     the main functionalities required by the system and the basic
-     intelligence to add to documents, as markup and/or metadata,
-     to meet these requirements. All these issues will be
-     eventually detailed in D1.b and D1.c, which are real
-     Milestones, since the rest of the work will be largely
-     driven by them.</p>
- </milestones>
-</work-package>
diff --git a/helm/mowgli/home/xml/work-packages/testing-and-validation.xml b/helm/mowgli/home/xml/work-packages/testing-and-validation.xml
deleted file mode 100644 (file)
index bbdd09c..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE work-package SYSTEM "work-package.dtd">
-
-<work-package number="6">
- <name>Testing and Validation</name>
- <begin>Month 12</begin>
- <end>Month 30</end>
- <leader file="nijmegen/geuvers"/>
- <person-month participant="bologna" number="5"/>
- <person-month participant="inria" number="6"/>
- <person-month participant="dfki" number="3"/>
- <person-month participant="nijmegen" number="17"/>
- <person-month participant="aei" number="14"/>
- <person-month participant="trusted-logic" number="9"/>
- <objectives>
-  <p>The WP intends to measure the system suitability and
-     scalability and the satisfaction level of users with the
-     service.</p>
- </objectives>
- <description>
-  <p>Large scale testing and validation will start after the
-     release of the first MOWGLI prototype, at month 18. We
-     shall consider three main validation tests:</p>
-  <tasks>
-   <task id="T6.1">
-    <name>Education.</name> 
-    <p>Full development of a fragment of the library
-       covering a typical undergraduate course in algebra of
-       analysis.</p>
-   </task>
-   <task id="T6.2">
-    <name>Certified code.</name> 
-    <p>The aim is to be able to present the
-       formalization and the demonstration of some security
-       properties related to the code embedded into a smart card.
-       The presentation must be in a format understandable by
-       the company in charge of the evaluation of the code and
-       in accordance with the Common Criteria standard.</p>
-   </task>
-   <task id="T6.3">
-    <name>Electronic Publishing.</name> 
-    <p>The aim is to test the LaTeX-based
-       authoring tool and to demonstrate how an electronic
-       physics journal benefits from the exploitation of
-       content markup in journal articles.</p>
-   </task>
-  </tasks>
- </description>
- <deliverable file="testing-and-validation/d6a"/>
- <deliverable file="testing-and-validation/d6b"/>
- <deliverable file="testing-and-validation/d6c"/>
- <deliverable file="testing-and-validation/d6d"/>
- <milestones>
-  <p>We expect a lot of feed-back during this phase, that will
-     be taken into account for the definition of the advanced and
-     final versions of the MOWGLI prototype.</p>
- </milestones>
-</work-package>
diff --git a/helm/mowgli/home/xml/work-packages/transformation.xml b/helm/mowgli/home/xml/work-packages/transformation.xml
deleted file mode 100644 (file)
index 972abe1..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE work-package SYSTEM "work-package.dtd">
-
-<work-package number="2">
- <name>Transformation</name>
- <begin>Month 0</begin>
- <end>Month 21</end>
- <leader file="bologna/sacerdoti"/>
- <person-month participant="bologna" number="13"/>
- <person-month participant="inria" number="4"/>
- <person-month participant="dfki" number="3"/>
- <person-month participant="nijmegen" number="11"/>
- <person-month participant="aei" number="3"/>
- <person-month participant="trusted-logic" number="0"/>
- <objectives>
-  <p>This work package is devoted to the complex issue of
-     transforming a low level, content description of mathematics
-     (understandable by automatic applications for the
-     mechanization of mathematics) into a human-readable
-     presentational format. It covers both statements and proofs.
-     The transformation will be decomposed in a sequence of
-     intermediate steps, for modularity reasons. All
-     transformations will be implemented by means of
-     XSLT-stylesheets. Stylesheets will be simple, modular, and
-     easily composable. All the transformation process should be
-     independent from any specific application.</p>
- </objectives>
- <description>
-  <p>The work package is articulated in the following tasks:</p>
-  <tasks>
-   <task id="T2.1">
-    <name>XML exportation.</name>
-    <p>The task is devoted to the translation
-       of the standard library of the COQ Proof assistant into a
-       suitable XML dialect, and to the definition of a low-level
-       DTD for the terms of the Calculus of Inductive
-       Construction (the logical system used by COQ).</p>
-   </task>
-   <task id="T2.2">
-    <name>Stylesheets to intermediate representation.</name>
-    <p>Implementation of a bunch of stylesheets transforming the
-       low-level logical description of COQ-expressions into a
-       ``standard'' intermediate, content-level representation
-       such as MathML content.</p>
-   </task>
-   <task id="T2.3">
-    <name>Proof transformation.</name> 
-    <p>Similar to the previous task, but
-       for proofs. The delicate point, here, is the fact that no
-       ``standard'' intermediate representation currently exists,
-       and thus it has to be defined.</p>
-   </task>
-   <task id="T2.4">
-    <name>Automatic extraction of metadata.</name> 
-    <p>Relevant metadata such
-       as list of identifiers in critical positions inside
-       statements can be automatically extracted from the fully
-       structured representation of mathematical objects. This
-       information can then be exploited for searching and
-       retrieving. The precise list of metadata will be defined
-       in Work Package 3.</p>
-   </task>
-   <task id="T2.5">
-    <name>Presentational Stylesheets.</name> 
-    <p>Implementation of a bunch of
-       stylesheets transforming the intermediate content
-       representation into a suitable rendering format (MathML
-       presentation, HTML, etc.)</p>
-   </task>
-   <task id="T2.6">
-    <name>Automatic Proof Generation in Natural Language.</name> 
-    <p>Similar
-       to the previous task but for proofs. In this case, a fully
-       automated approach is unlikely to produce really
-       satisfactory results, and the process should be possibly
-       integrated with some mechanism for interactive annotation
-       (see Task 4.3).</p>
-   </task>
-  </tasks>
- </description>
- <deliverable file="transformation/d2a"/>
- <deliverable file="transformation/d2b"/>
- <deliverable file="transformation/d2c"/>
- <deliverable file="transformation/d2d"/>
- <deliverable file="transformation/d2e"/>
- <deliverable file="transformation/d2f"/>
- <deliverable file="transformation/d2g"/>
- <milestones>
-  <p>The exportation module D2.a. is our first
-     milestone: without a large amount of available documents it
-     would be impossible to test the transformations. Similarly,
-     without a precise definition of the intermediate language,
-     and a large sample of documents in this format (D2c-d) we
-     cannot start to seriously address the presentational issue.
-     Note that the intermediate language is the real core of the
-     whole project.</p>
-  <p>The development of presentational stylesheets also depends
-     in an essential way on the development of rendering/browsing
-     engines for the chosen presentational language (in
-     particular, for MathML).</p>
-  <p>For the end of month 18, we expect to have a first working
-     prototype of the whole application.</p>
- </milestones>
-</work-package>
diff --git a/helm/mowgli/home/xml/work-packages/work-package.dtd b/helm/mowgli/home/xml/work-packages/work-package.dtd
deleted file mode 100644 (file)
index 215bd52..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<!ELEMENT work-package (name,begin,end,leader,person-month+,objectives,
-                        description,deliverable*,milestones)>
-<!ATTLIST work-package
-          number CDATA #REQUIRED>
-
-<!ELEMENT name (#PCDATA)>
-
-<!ELEMENT begin (#PCDATA)>
-
-<!ELEMENT end (#PCDATA)>
-
-<!ELEMENT leader (#PCDATA)>
-<!ATTLIST leader
-          file CDATA #REQUIRED>
-
-<!ELEMENT person-month EMPTY>
-<!ATTLIST person-month
-          participant CDATA #REQUIRED
-          number      CDATA #REQUIRED>
-
-<!ELEMENT objectives (p|dl|ul)*>
-
-<!ELEMENT description ((p|dl|ul)*,tasks?,(p|dl|ul)*)>
-
-<!ELEMENT tasks (task*)>
-
-<!ELEMENT task (name,(p|dl|ul)*)>
-<!ATTLIST task
-          id ID #REQUIRED>
-
-<!-- Constraint: the element is empty iff the file attribute is specified -->
-<!ELEMENT deliverable (#PCDATA)>
-<!ATTLIST deliverable
-          file CDATA #IMPLIED>
-
-<!ELEMENT milestones (p|dl|ul)*>
-
-<!-- A subset of XHTML -->
-<!ELEMENT p (#PCDATA|em|a)*>
-<!ELEMENT em (#PCDATA)>
-<!ELEMENT a (#PCDATA)>
-<!ATTLIST a
-          href CDATA #REQUIRED>
-<!ELEMENT dl (dt|dd)+>
-<!ELEMENT dt (#PCDATA)>
-<!ELEMENT dd (#PCDATA)>
-<!ELEMENT ul (li)+>
-<!ELEMENT li (#PCDATA)>
diff --git a/helm/mowgli/home/xsl/approaching-deadlines.xsl b/helm/mowgli/home/xsl/approaching-deadlines.xsl
deleted file mode 100644 (file)
index 7a7317f..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-<xsl:import href="deadlines.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:param name="today"/>
-
-<xsl:template match="/">
- <html-fragment>
-  <h3>Approaching Deadlines:</h3>
-  <xsl:for-each select="events/event/deadline[date &gt;= $today]">
-   <xsl:sort select="date" data-type="number"/>
-   <xsl:if test="position() &lt; 4">
-    <xsl:apply-templates select="."/>
-   </xsl:if>
-  </xsl:for-each>
- </html-fragment>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/common.xsl b/helm/mowgli/home/xsl/common.xsl
deleted file mode 100644 (file)
index 9381c2d..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:param name="current-date" select="'???'"/>
-
-<xsl:template name="head">
-  <xsl:param name="path_to_top" select="'.'"/>
-  <br />
-  <table border="0" cellspacing="0" cellpadding="0" width="100%">
-    <tr>
-      <td align="left" valign="bottom">
-        <div class="small">
-          <a href="{$path_to_top}/home.html">MoWGLI: Mathematics on the Web: Get It by Logic and Interfaces</a>
-       </div>
-      </td>
-      <td align="right" valign="bottom">
-        <div class="small">
-          <a href="http://www.cordis.lu/ist"><img border="0" alt="IST Logo Small" src="{$path_to_top}/../images/istbutton_small.gif"/></a>
-        </div>
-      </td>
-    </tr>
-  </table>
-  <hr/>
-</xsl:template>
-
-<xsl:template name="foot">
-  <xsl:param name="path_to_top" select="'.'"/>
-  <hr/>
-  <table border="0" cellspacing="0" cellpadding="0" width="100%">
-    <tr>
-      <td align="left" valign="top">
-        <div class="small">
-          This page is hosted by the
-          <a href="http:/www.cs.unibo.it">Department of Computer Science</a>,
-          <a href="http://www.unibo.it">University of Bologna</a>.
-         <br />
-         Last updated <b><xsl:value-of select="$current-date"/></b>.
-        </div>
-      </td>
-      <td align="right" valign="top">
-        <div class="small">
-          <a href="http://www.cordis.lu/ist"><img border="0" alt="IST Logo Small" src="{$path_to_top}/../images/istbutton_small.gif"/></a>
-        </div>
-      </td>
-    </tr>
-  </table>
-  <br />
-</xsl:template>
-
-<xsl:template name="person-name">
-  <xsl:param name="file" select="''"/>
-  <xsl:param name="form" select="'full'"/>
-  <xsl:variable name="person" select="document(concat('../xml/people/',$file,'.xml'))/person"/>
-  <xsl:if test="$person/qualification and $form = 'full'">
-   <xsl:value-of select="$person/qualification"/>
-   <xsl:value-of select="' '"/>
-  </xsl:if>
-  <xsl:choose>
-   <xsl:when test="$form = 'full'">
-    <xsl:value-of select="$person/name"/>
-   </xsl:when>
-   <xsl:otherwise>
-    <!-- Bug: just the first name is abbreviated. The others are ignored. -->
-    <xsl:value-of select="substring($person/name,1,1)"/>
-    <xsl:text>.</xsl:text>
-   </xsl:otherwise>
-  </xsl:choose>
-  <xsl:value-of select="' '"/>
-  <xsl:value-of select="$person/surname"/>
-</xsl:template>
-
-<xsl:template name="print_date">
- <xsl:param name="date"/>
- <xsl:variable name="year" select="substring($date,1,4)"/>
- <xsl:variable name="month" select="substring($date,5,2)"/>
- <xsl:variable name="day" select="substring($date,7,2)"/>
- <xsl:call-template name="print_month">
-  <xsl:with-param name="month" select="$month"/>
- </xsl:call-template>
- <xsl:text> </xsl:text>
- <xsl:call-template name="print_day">
-  <xsl:with-param name="day" select="$day"/>
- </xsl:call-template>
- <xsl:text>, </xsl:text>
- <xsl:value-of select="$year"/>
-</xsl:template>
-
-<xsl:template name="print_month">
- <xsl:param name="month"/>
- <xsl:choose>
-  <xsl:when test="$month = '01'">January</xsl:when>
-  <xsl:when test="$month = '02'">February</xsl:when>
-  <xsl:when test="$month = '03'">March</xsl:when>
-  <xsl:when test="$month = '04'">April</xsl:when>
-  <xsl:when test="$month = '05'">May</xsl:when>
-  <xsl:when test="$month = '06'">June</xsl:when>
-  <xsl:when test="$month = '07'">July</xsl:when>
-  <xsl:when test="$month = '08'">August</xsl:when>
-  <xsl:when test="$month = '09'">September</xsl:when>
-  <xsl:when test="$month = '10'">October</xsl:when>
-  <xsl:when test="$month = '11'">November</xsl:when>
-  <xsl:when test="$month = '12'">December</xsl:when>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template name="print_day">
- <xsl:param name="day"/>
- <xsl:choose>
-  <xsl:when test="$day = '01'">1st</xsl:when>
-  <xsl:when test="$day = '02'">2nd</xsl:when>
-  <xsl:when test="$day = '03'">3rd</xsl:when>
-  <xsl:when test="$day = '11'">11th</xsl:when>
-  <xsl:when test="$day = '11'">12th</xsl:when>
-  <xsl:when test="$day = '11'">13th</xsl:when>
-  <xsl:when test="substring($day,2,1) = '1'">
-   <xsl:value-of select="$day"/>
-   <xsl:text>st</xsl:text>
-  </xsl:when>
-  <xsl:when test="substring($day,2,1) = '2'">
-   <xsl:value-of select="$day"/>
-   <xsl:text>nd</xsl:text>
-  </xsl:when>
-  <xsl:when test="substring($day,2,1) = '3'">
-   <xsl:value-of select="$day"/>
-   <xsl:text>rd</xsl:text>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="$day"/>
-   <xsl:text>th</xsl:text>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template name="print_interval">
- <xsl:param name="begin"/>
- <xsl:param name="end"/>
- <xsl:variable name="byear" select="substring($begin,1,4)"/>
- <xsl:variable name="bmonth" select="substring($begin,5,2)"/>
- <xsl:variable name="bday" select="substring($begin,7,2)"/>
- <xsl:variable name="eyear" select="substring($end,1,4)"/>
- <xsl:variable name="emonth" select="substring($end,5,2)"/>
- <xsl:variable name="eday" select="substring($end,7,2)"/>
- <xsl:choose>
-  <xsl:when test="$byear != $eyear">
-   <xsl:call-template name="print_date">
-    <xsl:with-param name="date" select="$begin"/>
-   </xsl:call-template>
-   <xsl:call-template name="print_date">
-    <xsl:text> - </xsl:text>
-    <xsl:with-param name="date" select="$end"/>
-   </xsl:call-template>
-  </xsl:when>
-  <xsl:when test="$bmonth != $emonth">
-   <xsl:call-template name="print_month">
-    <xsl:with-param name="month" select="$bmonth"/>
-   </xsl:call-template>
-   <xsl:text> </xsl:text>
-   <xsl:call-template name="print_day">
-    <xsl:with-param name="day" select="$bday"/>
-   </xsl:call-template>
-   <xsl:text> - </xsl:text>
-   <xsl:call-template name="print_month">
-    <xsl:with-param name="month" select="$emonth"/>
-   </xsl:call-template>
-   <xsl:text> </xsl:text>
-   <xsl:call-template name="print_day">
-    <xsl:with-param name="day" select="$eday"/>
-   </xsl:call-template>
-   <xsl:text>, </xsl:text>
-   <xsl:value-of select="$byear"/>
-  </xsl:when>
-  <xsl:when test="$bday != $eday">
-   <xsl:call-template name="print_month">
-    <xsl:with-param name="month" select="$bmonth"/>
-   </xsl:call-template>
-   <xsl:text> </xsl:text>
-   <xsl:call-template name="print_day">
-    <xsl:with-param name="day" select="$bday"/>
-   </xsl:call-template>
-   <xsl:text> - </xsl:text>
-   <xsl:call-template name="print_day">
-    <xsl:with-param name="day" select="$eday"/>
-   </xsl:call-template>
-   <xsl:text>, </xsl:text>
-   <xsl:value-of select="$byear"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:call-template name="print_date">
-    <xsl:with-param name="date" select="$begin"/>
-   </xsl:call-template>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template name="color_of_deadline_kind">
- <xsl:param name="kind"/>
- <xsl:choose>
-  <xsl:when test="$kind = 'submission'">
-   <xsl:text>red</xsl:text>
-  </xsl:when>
-  <xsl:when test="$kind = 'notification'">
-   <xsl:text>green</xsl:text>
-  </xsl:when>
-  <xsl:when test="$kind = 'registration'">
-   <xsl:text>blue</xsl:text>
-  </xsl:when>
-  <xsl:when test="$kind = 'camera-ready'">
-   <xsl:text>maroon</xsl:text>
-  </xsl:when>
- </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/consortium.xsl b/helm/mowgli/home/xsl/consortium.xsl
deleted file mode 100644 (file)
index 17420ee..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title>Consortium</title>
-  </head>
-  <body>
-    <xsl:apply-templates/>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="consortium">
- <h1>The Consortium</h1>
- <p>
-  <xsl:text>The Consortium is made of </xsl:text>
-  <xsl:value-of select="count(site)"/>
-  <xsl:text> sites:</xsl:text>
- </p>
- <ul>
-  <xsl:for-each select="site">
-   <li>
-    <a href="sites/{@file}.html">
-     <xsl:variable name="site" select="document(concat('../xml/sites/',@file,'.xml'))/site"/>
-    <xsl:choose>
-     <xsl:when test="$site/name">
-      <xsl:value-of select="$site/name"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="$site/subsite/name"/>
-     </xsl:otherwise>
-    </xsl:choose>
-    </a>
-   </li>
-  </xsl:for-each>
- </ul>
- <xsl:copy-of select="description/*"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/deadlines.xsl b/helm/mowgli/home/xsl/deadlines.xsl
deleted file mode 100644 (file)
index a71a04f..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:param name="events-class" select="''"/>
-<xsl:param name="today" select="''"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title>
-    <xsl:value-of select="$events-class"/>
-    <xsl:text> Events Sorted by Deadlines</xsl:text>
-   </title>
-  </head>
-  <body>
-    <h1>
-     <xsl:value-of select="$events-class"/>
-     <xsl:text> Events</xsl:text>
-    </h1>
-    <xsl:variable name="url">
-     <xsl:choose>
-      <xsl:when test="$events-class='Other'">other-events.html</xsl:when>
-      <xsl:otherwise>mowgli-events.html</xsl:otherwise>
-     </xsl:choose>
-    </xsl:variable>
-    [<a href="{$url}">Sorted by event date</a>] [Sorted by deadline]
-    <br /><br />
-    <hr />
-    <ul>
-     <xsl:apply-templates select="events/event/deadline[date &gt;= $today]">
-      <xsl:sort select="date" data-type="number"/>
-     </xsl:apply-templates>
-    </ul>
-    <hr />
-    <h1>Past Events</h1>
-    <ul>
-     <xsl:apply-templates select="events/event/deadline[date &lt; $today]">
-      <xsl:sort select="date" data-type="number" order="descending"/>
-     </xsl:apply-templates>
-    </ul>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="deadline">
- <li>
-  <b>
-   <xsl:variable name="kind">
-    <xsl:call-template name="color_of_deadline_kind">
-     <xsl:with-param name="kind" select="@kind"/>
-    </xsl:call-template>
-   </xsl:variable>
-   <span style="color: {$kind}">
-    <xsl:call-template name="print_date">
-     <xsl:with-param name="date" select="date/text()"/>
-    </xsl:call-template>
-   </span>
-  </b>
-  <xsl:text> </xsl:text>
-  <xsl:value-of select="description"/>
-  <xsl:text> </xsl:text>
-  <a href="{../url}" target="_top"><xsl:value-of select="../name"/></a>
- </li>
-</xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/helm/mowgli/home/xsl/deliverable.xsl b/helm/mowgli/home/xsl/deliverable.xsl
deleted file mode 100644 (file)
index 3d7fa81..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title>
-    <xsl:value-of select="deliverable/@id"/>
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="deliverable/@name"/>
-   </title>
-  </head>
-  <body>
-    <xsl:apply-templates/>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="deliverable">
- <h1>
-  <xsl:value-of select="deliverable/@id"/>
-  <xsl:text> </xsl:text>
-  <xsl:value-of select="deliverable/@name"/>
- </h1>
- <p>
-  <xsl:text>Working package: </xsl:text>
-  <a href="../../work-packages/{working-package/@file}.html">
-   <xsl:value-of select="working-package/@file"/>
-  </a>
- </p>
- <p>
-  <xsl:text>Leader site: </xsl:text>
-  <a href="../../sites/{leader-site/@file}.html">
-   <xsl:value-of select="leader-site/@file"/>
-  </a>
- </p>
- <p>
-  <xsl:text>Extimated person-month: </xsl:text>
-  <xsl:value-of select="extimated-person-month/@value"/>
- </p>
- <p>
-  <xsl:text>Type: </xsl:text>
-  <xsl:value-of select="type/@value"/>
- </p>
- <p>
-  <xsl:text>To be delivered at: </xsl:text>
-  <xsl:value-of select="to-be-delivered"/>
- </p>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/events.xsl b/helm/mowgli/home/xsl/events.xsl
deleted file mode 100644 (file)
index 8b8ed5a..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:param name="events-class" select="''"/>
-<xsl:param name="today"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title>
-    <xsl:value-of select="$events-class"/>
-    <xsl:text> Events</xsl:text>
-   </title>
-  </head>
-  <body>
-    <h1>
-     <xsl:value-of select="$events-class"/>
-     <xsl:text> Events</xsl:text>
-    </h1>
-    <xsl:if test="$events-class = 'Other'">
-     [Sorted by event date] [<a href="deadlines.html">Sorted by deadline</a>]
-     <br /><br />
-     <hr />
-    </xsl:if>
-    <dl>
-     <xsl:apply-templates select="events/event[when/begin &gt;= $today]">
-      <xsl:sort select="when/begin" data-type="number"/>
-     </xsl:apply-templates>
-    </dl>
-    <hr />
-    <h1>Past Events</h1>
-    <dl>
-     <xsl:apply-templates select="events/event[when/begin &lt; $today]">
-      <xsl:sort select="when/begin" data-type="number"/>
-     </xsl:apply-templates>
-    </dl>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="event">
- <dt>
-  <a href="{url}"><xsl:value-of select="name"/></a>
- </dt>
- <dd>
-  <xsl:if test="where">
-   <b><xsl:value-of select="where"/></b>
-   <xsl:text> </xsl:text>
-  </xsl:if>
-  <xsl:if test="when">
-   <b>
-    <xsl:call-template name="print_interval">
-     <xsl:with-param name="begin" select="when/begin/text()"/>
-     <xsl:with-param name="end" select="when/end/text()"/>
-    </xsl:call-template>
-   </b>
-   <br />
-  </xsl:if>
-  <xsl:if test="description">
-   <p><xsl:value-of select="description"/></p>
-  </xsl:if>
-  <xsl:if test="deadline">
-   <p>Deadlines:</p>
-   <ul>
-    <xsl:apply-templates select="deadline"/>
-   </ul>
-  </xsl:if>
-  <br />
- </dd>
-</xsl:template>
-
-<xsl:template match="deadline">
- <li>
-  <xsl:variable name="kind">
-   <xsl:call-template name="color_of_deadline_kind">
-    <xsl:with-param name="kind" select="@kind"/>
-   </xsl:call-template>
-  </xsl:variable>
-  <b>
-   <span style="color: {$kind}">
-    <xsl:call-template name="print_date">
-     <xsl:with-param name="date" select="date/text()"/>
-    </xsl:call-template>
-   </span>
-  </b>
-  <xsl:text> </xsl:text>
-  <xsl:value-of select="description"/>
- </li>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/latest-news.xsl b/helm/mowgli/home/xsl/latest-news.xsl
deleted file mode 100644 (file)
index 974c2e9..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-<xsl:import href="news.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="/">
- <html-fragment>
-  <h3>Latest News</h3>
-  <dl>
-  <xsl:apply-templates select="news/event[position() &lt; 4]">
-    <xsl:with-param name="small" select="true()"/>
-  </xsl:apply-templates>
-  </dl>
-  <a href="news.html">Older news</a>
- </html-fragment>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/management.xsl b/helm/mowgli/home/xsl/management.xsl
deleted file mode 100644 (file)
index a0fb276..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title>Project Management</title>
-  </head>
-  <body>
-   <xsl:apply-templates/>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="management">
-   <xsl:copy-of select="head-links/*"/>
-   <xsl:copy-of select="introduction/*"/>
-   <dl>
-    <xsl:apply-templates select="main"/>
-   </dl>
-   <xsl:copy-of select="other-infos/*"/>
-   <xsl:copy-of select="tail-links/*"/>
-</xsl:template>
-
-<xsl:template match="project-manager">
- <dt>
-  <span style="font-weight: bold">Project Manager: </span>
-  <a href="../people/{@site}/{@file}.html">
-   <xsl:call-template name="person-name">
-    <xsl:with-param name="file" select="concat(@site,'/',@file)"/>
-   </xsl:call-template>
-  </a>
- </dt>
- <dd>
-  <xsl:value-of select="mandate"/>
- </dd>
-</xsl:template>
-
-<xsl:template match="exploitation-manager">
- <dt>
-  <span style="font-weight: bold">Exploitation Manager: </span>
-  <a href="../people/{@site}/{@file}.html">
-   <xsl:call-template name="person-name">
-    <xsl:with-param name="file" select="concat(@site,'/',@file)"/>
-   </xsl:call-template>
-  </a>
- </dt>
- <dd>
-  <xsl:value-of select="mandate"/>
- </dd>
-</xsl:template>
-
-<xsl:template match="work-package-leaders">
- <dt>
-  <span style="font-weight: bold">Work-Package Leaders</span>
- </dt>
- <dd>
-  <table border="1">
-   <tr>
-    <xsl:for-each select="document('../xml/work-packages/index.xml')/work-packages/work-package">
-     <td>
-      <a href="../work-packages/{@file}.html">
-       <xsl:value-of select="document(concat('../xml/work-packages/',@file,'.xml'))/*/name"/>
-      </a>
-     </td>
-    </xsl:for-each>
-   </tr>
-   <tr>
-    <xsl:for-each select="document('../xml/work-packages/index.xml')/work-packages/work-package">
-     <td>
-      <xsl:variable name="leader" select="document(concat('../xml/work-packages/',@file,'.xml'))/*/leader/@file"/>
-      <a href="../people/{$leader}.html">
-       <xsl:call-template name="person-name">
-        <xsl:with-param name="file" select="$leader"/>
-       </xsl:call-template>
-      </a>
-     </td>
-    </xsl:for-each>
-   </tr>
-  </table>
-  <xsl:value-of select="mandate"/>
- </dd>
-</xsl:template>
-
-<xsl:template match="technical-contributors">
- <dt>
-  <span style="font-weight: bold">Technical Contributors</span>
- </dt>
- <dd>
-  <xsl:value-of select="mandate"/>
- </dd>
-</xsl:template>
-
-<xsl:template match="project-coordination-committee">
- <dt>
-  <span style="font-weight: bold">Project Coordination Committee</span>
- </dt>
- <dd>
-  <p>
-   <xsl:text>Chaired by </xsl:text>
-   <xsl:variable name="filename" select="concat(chair/@site,'/',chair/@file)"/>
-   <a href="../people/{$filename}.html">
-    <xsl:call-template name="person-name">
-     <xsl:with-param name="file" select="$filename"/>
-    </xsl:call-template>
-   </a>
-  </p>
-  <p>
-   <xsl:text>Members:</xsl:text>
-   <span style="margin-left: 1cm">
-    <table border="1">
-     <tr>
-      <xsl:for-each select="member">
-       <td style="text-align: center">
-        <a href="../sites/{@site}.html">
-         <xsl:value-of select="@site"/>
-        </a>
-       </td>
-      </xsl:for-each>
-     </tr>
-     <tr>
-      <xsl:for-each select="member">
-       <td style="text-align: center">
-        <xsl:variable name="filename" select="concat(@site,'/',@file)"/>
-        <a href="../people/{$filename}.html">
-         <xsl:call-template name="person-name">
-          <xsl:with-param name="file" select="$filename"/>
-         </xsl:call-template>
-        </a>
-       </td>
-      </xsl:for-each>
-     </tr>
-    </table>
-   </span>
-  </p>
-  <xsl:value-of select="mandate"/>
- </dd>
-</xsl:template>
-
-<xsl:template match="project-exploitation-board">
- <dt>
-  <span style="font-weight: bold">Project Exploitation Board</span>
- </dt>
- <dd>
-  <p>
-   <xsl:text>Chaired by </xsl:text>
-   <xsl:variable name="filename" select="concat(chair/@site,'/',chair/@file)"/>
-   <a href="../people/{$filename}.html">
-    <xsl:call-template name="person-name">
-     <xsl:with-param name="file" select="$filename"/>
-    </xsl:call-template>
-   </a>
-  </p>
-  <p>
-   <xsl:text>Members:</xsl:text>
-   <span style="margin-left: 1cm">
-    <table border="1">
-     <tr>
-      <xsl:for-each select="member">
-       <td style="text-align: center">
-        <a href="../sites/{@site}.html">
-         <xsl:value-of select="@site"/>
-        </a>
-       </td>
-      </xsl:for-each>
-     </tr>
-     <tr>
-      <xsl:for-each select="member">
-       <td style="text-align: center">
-        <xsl:variable name="filename" select="concat(@site,'/',@file)"/>
-        <a href="../people/{$filename}.html">
-         <xsl:call-template name="person-name">
-          <xsl:with-param name="file" select="$filename"/>
-         </xsl:call-template>
-        </a>
-       </td>
-      </xsl:for-each>
-     </tr>
-    </table>
-   </span>
-  </p>
-  <xsl:value-of select="mandate"/>
- </dd>
-</xsl:template>
-
-<xsl:template match="work-package-teams">
- <dt>
-  <span style="font-weight: bold">Work-Package Teams</span>
- </dt>
- <dd>
-  <xsl:value-of select="mandate"/>
- </dd>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/minutes.xsl b/helm/mowgli/home/xsl/minutes.xsl
deleted file mode 100644 (file)
index 0270a15..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title>
-    <xsl:text>Summary of </xsl:text>
-    <xsl:value-of select="minutes/about"/>
-   </title>
-  </head>
-  <body>
-   <h1>Summary of <xsl:value-of select="minutes/about"/></h1>
-   <h2>Participants:</h2>
-   <ul>
-    <xsl:apply-templates select="minutes/participant">
-     <xsl:sort select="document(concat('../xml/people/',@site,'/',@file,'.xml'))/*/surname"/>
-    </xsl:apply-templates>
-   </ul>
-   <h2>Presentations:</h2>
-   <dl>
-    <xsl:apply-templates select="minutes/presentation"/>
-   </dl>
-   <h2>Minutes:</h2>
-   <p>
-    <span style="font-weight: bold">Note:</span>
-    The following entries reports only the important observations raised during
-    the meeting and the decisions taken.
-   </p>
-   <ul>
-    <xsl:apply-templates select="minutes/entry"/>
-   </ul>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="entry">
- <li>
-  <xsl:if test="@author">
-   <xsl:text>[</xsl:text>
-    <a href="../people/{@author}.html">
-     <xsl:call-template name="person-name">
-      <xsl:with-param name="file" select="@author"/>
-     </xsl:call-template>
-    </a>
-   <xsl:text>]</xsl:text>
-  </xsl:if>
-  <xsl:apply-templates/>
- </li>
-</xsl:template>
-
-<xsl:template match="participant">
- <li>
-  <a href="../people/{@site}/{@file}.html">
-   <xsl:call-template name="person-name">
-    <xsl:with-param name="file" select="concat(@site,'/',@file)"/>
-   </xsl:call-template>
-  </a>
-  <xsl:text>&#x0A0;&#x0A0;(</xsl:text>
-  <a href="../sites/{@site}.html">
-   <xsl:value-of select="@site"/>
-  </a>
-  <xsl:text>)</xsl:text>
- </li>
-</xsl:template>
-
-<xsl:template match="presentation">
- <dt>
-  <a href="../people/{@site}/{@author}.html">
-   <xsl:call-template name="person-name">
-    <xsl:with-param name="file" select="concat(@site,'/',@author)"/>
-   </xsl:call-template>
-  </a>
-  <xsl:text>&#x0A0;(</xsl:text>
-  <a href="../sites/{@site}.html">
-   <xsl:value-of select="@site"/>
-  </a>
-  <xsl:text>): </xsl:text>
-  <xsl:if test="@media = 'slides'">
-   <xsl:choose>
-    <xsl:when test="slides">
-     <xsl:for-each select="slides">
-      <xsl:text>[</xsl:text>
-      <xsl:variable name="location">
-       <xsl:choose>
-        <xsl:when test="@format = 'HTML'">
-         <xsl:value-of select="concat('../slides/',@file)"/>
-        </xsl:when>
-        <xsl:otherwise>
-         <xsl:value-of select="concat('../../misc/',@file)"/>
-        </xsl:otherwise>
-       </xsl:choose>
-      </xsl:variable>
-      <a href="{$location}">
-       <xsl:text>Get the slides</xsl:text>
-       <xsl:if test="text()">
-        <xsl:text> </xsl:text>
-        <xsl:value-of select="text()"/>
-       </xsl:if>
-      </a>
-      <xsl:text>]</xsl:text>
-     </xsl:for-each>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:text>[slides unavailable]</xsl:text>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:if>
- </dt>
- <dd>
-  <xsl:copy-of select="description/*|description/text()"/>
- </dd>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/news.xsl b/helm/mowgli/home/xsl/news.xsl
deleted file mode 100644 (file)
index 6ed83b3..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title>News Archive</title>
-  </head>
-  <body>
-    <h1>News Archive</h1>
-    <dl>
-     <xsl:apply-templates/>
-    </dl>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="event">
- <xsl:param name="small" select="false()"/>
- <dt>
-  <b>
-   <xsl:call-template name="print_date">
-    <xsl:with-param name="date" select="date"/>
-   </xsl:call-template>
-  </b>
-  <xsl:if test="header">
-   <xsl:value-of select="' -- '"/>
-   <em>
-    <xsl:value-of select="header"/>
-   </em>
-  </xsl:if>
- </dt>
- <dd>
-  <xsl:copy-of select="description/*|description/text()"/>
-  <xsl:if test="not($small) and who">
-   <br/><br/>
-   <div class="right">
-    <xsl:variable name="who" select="document(concat('../xml/people/',who/@file,'.xml'))/person"/>
-    <em>
-     <a href="people/{who/@file}.html">
-      <div class="small">
-       <xsl:call-template name="person-name">
-        <xsl:with-param name="file" select="who/@file"/>
-       </xsl:call-template>
-      </div>
-     </a>
-    </em>
-   </div>
-  </xsl:if>
- </dd>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/people-list.xsl b/helm/mowgli/home/xsl/people-list.xsl
deleted file mode 100644 (file)
index ab23781..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="people">
- <html>
-  <head>
-   <title>People Directory</title>
-  </head>
-  <body>
-    <h1>People</h1>
-
-    <table border="0" width="100%">
-    <tr>
-    <td valign="top">
-
-    <h3><a name="#site">By Site</a></h3>
-    <xsl:apply-templates select="from"/>
-
-    </td>
-    <td valign="top">
-
-    <h3><a name="#alpha">Alphabetical</a></h3>
-    <xsl:apply-templates select="from/person" mode="alphabetical">
-      <xsl:sort select="@file"/>
-    </xsl:apply-templates>
-
-    </td>
-    </tr>
-    </table>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="person">
- <xsl:variable name="person" select="document(concat('../xml/people/',../@site,'/',@file,'.xml'))/person"/>
- <a href="people/{../@site}/{@file}.html">
-  <xsl:call-template name="person-name">
-   <xsl:with-param name="file" select="concat(../@site,'/',@file)"/>
-  </xsl:call-template>
- </a>
- <br />
-</xsl:template>
-
-<xsl:template match="person" mode="alphabetical">
- <xsl:variable name="person" select="document(concat('../xml/people/',../@site,'/',@file,'.xml'))/person"/>
- <a href="people/{../@site}/{@file}.html">
-  <xsl:value-of select="$person/surname"/>
-  <xsl:text>, </xsl:text>
-  <xsl:value-of select="$person/name"/>
- </a>
- <br />
-</xsl:template>
-
-<xsl:template match="name">
- <xsl:param name="file" select="''"/>
- <h4><a href="sites/{$file}.html"><xsl:value-of select="."/></a></h4>
-</xsl:template>
-
-<xsl:template match="from">
- <xsl:variable name="site" select="document(concat('../xml/sites/',@site,'.xml'))/site"/>
- <xsl:apply-templates select="$site/name | $site/subsite[1]/name">
-  <xsl:with-param name="file" select="@site"/>
- </xsl:apply-templates>
- <xsl:apply-templates select="person">
-  <xsl:sort select="@file"/>
- </xsl:apply-templates>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/person.xsl b/helm/mowgli/home/xsl/person.xsl
deleted file mode 100644 (file)
index 385465c..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title>
-    <xsl:call-template name="qualified-name">
-     <xsl:with-param name="qualification"
-                     select="person/qualification"/>
-     <xsl:with-param name="name"
-                     select="person/name"/>
-     <xsl:with-param name="surname"
-                     select="person/surname"/>
-    </xsl:call-template>
-   </title>
-  </head>
-  <body>
-    <xsl:apply-templates/>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template name="qualified-name">
- <xsl:param name="qualification" select="/.."/>
- <xsl:param name="name"/>
- <xsl:param name="surname"/>
- <xsl:if test="qualification">
-  <xsl:value-of select="$qualification"/>
-  <xsl:text> </xsl:text>
- </xsl:if>
- <xsl:value-of select="$name"/>
- <xsl:text> </xsl:text>
- <xsl:value-of select="$surname"/>
-</xsl:template>
-
-<xsl:template match="person">
- <h1>
-  <xsl:call-template name="qualified-name">
-   <xsl:with-param name="qualification"
-                   select="qualification"/>
-   <xsl:with-param name="name"
-                   select="name"/>
-   <xsl:with-param name="surname"
-                   select="surname"/>
-  </xsl:call-template>
- </h1>
- <xsl:choose>
-  <xsl:when test="count(position) &gt; 1">
-   <ul>
-    <xsl:for-each select="position">
-     <li><xsl:value-of select="."/></li>
-    </xsl:for-each>
-   </ul>
-  </xsl:when>
-  <xsl:when test="count(position) = 1">
-   <p><xsl:value-of select="position"/></p>
-  </xsl:when>
- </xsl:choose>
- <p>
-  <xsl:text>e-mail: </xsl:text>
-  <a href="mailto:{e-mail}">
-   <xsl:value-of select="e-mail"/>
-  </a>
- </p>
- <xsl:if test="url">
-  <p>
-   <xsl:text>Home Page: </xsl:text>
-   <a target="_top" href="{url}">
-    <xsl:value-of select="url"/>
-   </a>
-  </p>
- </xsl:if>
- <xsl:if test="address">
-  <p>
-   <xsl:text>Address: </xsl:text>
-   <xsl:value-of select="address"/>
-  </p>
- </xsl:if>
- <xsl:if test="telephone">
-  <p>
-   <xsl:text>Telephone number: </xsl:text>
-   <xsl:value-of select="telephone"/>
-  </p>
- </xsl:if>
- <xsl:if test="fax">
-  <p>
-   <xsl:text>Fax number: </xsl:text>
-   <xsl:value-of select="fax"/>
-  </p>
- </xsl:if>
- <xsl:if test="curriculum">
-  <h2>Short Curriculum Vitae:</h2>
-  <xsl:copy-of select="curriculum/*"/>
- </xsl:if>
- <xsl:if test="research-interests">
-  <h2>Research Interests:</h2>
-  <xsl:copy-of select="research-interests/*"/>
- </xsl:if>
- <xsl:if test="selected-publication">
-  <h2>Selected Publications:</h2>
-  <ul>
-   <xsl:for-each select="selected-publication">
-    <li>
-     <a href="../../publications/{@file}.html">
-      <xsl:value-of select="document(concat('../xml/publications/',@file,'.xml'))/publication/title"/>
-     </a>
-    </li>
-   </xsl:for-each>
-  </ul>
- </xsl:if>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/project.xsl b/helm/mowgli/home/xsl/project.xsl
deleted file mode 100644 (file)
index 70ad6ae..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title>The Project</title>
-  </head>
-  <body>
-    <xsl:apply-templates/>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="project">
- <h1>
-  <xsl:value-of select="full_title"/>
-  <xsl:text> (</xsl:text>
-  <xsl:value-of select="acronym"/>
-  <xsl:text>)</xsl:text>
- </h1>
- <p>
-  <xsl:text>Project type: </xsl:text>
-  <xsl:value-of select="type"/>
-  <xsl:text> (</xsl:text>
-  <xsl:value-of select="type_acronym"/>
-  <xsl:text>)</xsl:text>
- </p>
- <p>
-  <xsl:text>Proposal Contract Number: </xsl:text>
-  <xsl:value-of select="proposal_contract_no"/>
- </p>
- <p>
-  <xsl:text>Operative Commencement Date: </xsl:text>
-  <xsl:call-template name="print_date">
-   <xsl:with-param name="date" select="operative_commencement_of_contract"/>
-  </xsl:call-template>
- </p>
- <br/>
-  <p><xsl:text>More about the Proposal:</xsl:text></p>
-  <xsl:copy-of select="proposal/*"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/publication.xsl b/helm/mowgli/home/xsl/publication.xsl
deleted file mode 100644 (file)
index 3bd290e..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title><xsl:value-of select="publication/title"/></title>
-  </head>
-  <body>
-    <xsl:apply-templates/>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="publication">
- <h1><xsl:value-of select="title"/></h1>
- <h2>
-  <xsl:for-each select="author">
-   <xsl:choose>
-    <xsl:when test="@file">
-     <a href="../../people/{@file}.html">
-      <xsl:call-template name="person-name">
-       <xsl:with-param name="form" select="'abbreviated'"/>
-       <xsl:with-param name="file" select="@file"/>
-      </xsl:call-template>
-     </a>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="surname"/>
-     <xsl:text>, </xsl:text>
-     <xsl:value-of select="name"/>
-    </xsl:otherwise>
-   </xsl:choose>
-   <xsl:if test="position() != last()">
-    <xsl:text> ; </xsl:text>
-   </xsl:if>
-  </xsl:for-each>
- </h2>
- <p><xsl:value-of select="where"/></p>
- <xsl:if test="html">
-  <p>Download: <a href="{html/@file}.html">[HTML]</a></p>
- </xsl:if>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/publications-index.xsl b/helm/mowgli/home/xsl/publications-index.xsl
deleted file mode 100644 (file)
index aba4960..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="publications">
- <html>
-  <head>
-   <title>List of Publications</title>
-  </head>
-  <body>
-    <h1>Publications</h1>
-    <h2>About MoWGLI</h2>
-    <xsl:apply-templates select="project"/>
-    <h2>Related Publications</h2>
-    <a name="related"/>
-    <xsl:apply-templates select="related"/>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="project">
-  <xsl:choose>
-    <xsl:when test="entry">
-      <ul>
-        <xsl:apply-templates select="entry">
-         <xsl:with-param name="section" select="'mowgli'"/>
-       </xsl:apply-templates>
-      </ul>
-    </xsl:when>
-    <xsl:otherwise>
-      None.
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match="related">
-  <xsl:choose>
-    <xsl:when test="entry">
-      <ul>
-        <xsl:apply-templates select="entry">
-         <xsl:with-param name="section" select="'others'"/>
-       </xsl:apply-templates>
-      </ul>
-    </xsl:when>
-    <xsl:otherwise>
-      None.
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match="entry">
- <xsl:param name="section" select="''"/>
- <xsl:variable name="file" select="document(concat('../xml/publications/',$section,'/',@file,'.xml'))/publication"/>
- <li>
-  <xsl:apply-templates select="$file/author"/>,
-  <a href="{$section}/{@file}.html">
-   <xsl:text>``</xsl:text>
-   <xsl:value-of select="$file/title"/>
-   <xsl:text>''</xsl:text>
-  </a>
- </li>
-</xsl:template>
-
-<xsl:template match="author">
- <xsl:choose>
-  <xsl:when test="@file">
-   <xsl:call-template name="person-name">
-    <xsl:with-param name="file" select="@file"/>
-   </xsl:call-template>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="surname"/>, <xsl:value-of select="name"/>
-  </xsl:otherwise>
- </xsl:choose>
- <xsl:if test="position() &lt; last()">, </xsl:if>
-</xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/helm/mowgli/home/xsl/site.xsl b/helm/mowgli/home/xsl/site.xsl
deleted file mode 100644 (file)
index eb1f0ab..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title><xsl:value-of select="site/name"/></title>
-  </head>
-  <body>
-    <xsl:apply-templates/>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="site|subsite">
- <xsl:choose>
-  <xsl:when test="subsite">
-   <p>This is an aggregate site, whose members are:</p>
-   <ul>
-    <xsl:for-each select="subsite">
-     <li>
-      <a href="#{generate-id()}">
-       <xsl:value-of select="name"/>
-      </a>
-     </li>
-    </xsl:for-each>
-   </ul>
-   <xsl:for-each select="subsite">
-    <hr />
-    <a name="{generate-id()}"/>
-    <xsl:apply-templates select="."/>
-   </xsl:for-each>
-  </xsl:when>
-  <xsl:otherwise>
-   <h1><xsl:value-of select="name"/></h1>
-   <h2><xsl:value-of select="country"/></h2>
-   <p><xsl:value-of select="address"/></p>
-   <p><a href="{url}">Visit the institution home page.</a></p>
-   <p>
-    <xsl:text>Site responsible: </xsl:text>
-    <a href="../people/{responsible/@file}.html">
-     <xsl:call-template name="person-name">
-      <xsl:with-param name="file" select="responsible/@file"/>
-     </xsl:call-template>
-    </a>
-    <xsl:text>.</xsl:text>
-   </p>
-   <xsl:if test="./member">
-    <p>Site members:</p>
-    <ul>
-     <xsl:for-each select="./member">
-      <li>
-       <a href="../people/{@file}.html">
-        <xsl:call-template name="person-name">
-         <xsl:with-param name="file" select="@file"/>
-        </xsl:call-template>
-       </a>
-      </li>
-     </xsl:for-each>
-    </ul>
-   </xsl:if>
-   <xsl:copy-of select="description/*"/>
-   <xsl:if test="project">
-    <h1>Projects developed by this site related to MOWGLI:</h1>
-   </xsl:if>
-   <xsl:apply-templates select="project"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template match="project">
- <h2>
-  <xsl:value-of select="name"/>
-  <xsl:if test="acronym">
-   <xsl:text> (</xsl:text>
-   <xsl:value-of select="acronym"/>
-   <xsl:text>)</xsl:text>
-  </xsl:if>
- </h2>
- <p><a href="{url}">Visit the project home page.</a></p>
- <p>Members of the project also involved in MOWGLI:</p>
- <ul>
-  <xsl:for-each select="member">
-   <li>
-    <a href="../people/{@file}.html">
-     <xsl:call-template name="person-name">
-      <xsl:with-param name="file" select="@file"/>
-     </xsl:call-template>
-    </a>
-   </li>
-  </xsl:for-each>
- </ul>
- <xsl:copy-of select="description/*"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/work-package.xsl b/helm/mowgli/home/xsl/work-package.xsl
deleted file mode 100644 (file)
index 8cb465b..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title>
-    <xsl:text>Work Package </xsl:text>
-    <xsl:value-of select="work-package/@number"/>
-    <xsl:text>: </xsl:text>
-    <xsl:value-of select="work-package/name"/>
-   </title>
-  </head>
-  <body>
-    <xsl:apply-templates/>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="work-package">
- <h1>
-  <xsl:text>Work Package </xsl:text>
-  <xsl:value-of select="number"/>
-  <xsl:text>: </xsl:text>
-  <xsl:value-of select="name"/>
- </h1>
- <h2>
-   Begin: <xsl:value-of select="begin"/> &#x0A0;&#x0A0;&#x0A0;
-   End: <xsl:value-of select="end"/>
- </h2>
- <h2>
-  <xsl:text>Work Package Leader: </xsl:text>
-  <a href="../people/{leader/@file}.html">
-   <xsl:call-template name="person-name">
-    <xsl:with-param name="file" select="leader/@file"/>
-   </xsl:call-template>
-  </a>
- </h2>
- <h2>Contribution of Each Site (in Man Monthes):</h2>
- <span style="margin-left: 1cm">
- <table>
-  <tr>
-   <xsl:for-each select="person-month">
-    <td>
-     <a href="../sites/{@participant}.html">
-      <xsl:value-of select="@participant"/>
-     </a>
-    </td>
-   </xsl:for-each>
-  </tr>
-  <tr>
-   <xsl:for-each select="person-month">
-    <td align="center"><xsl:value-of select="@number"/></td>
-   </xsl:for-each>
-  </tr>
- </table>
- </span>
- <h2>Objectives:</h2>
- <xsl:copy-of select="objectives/*"/>
- <h2>Description:</h2>
- <xsl:apply-templates select="description/*"/>
- <h2>Deliverables:</h2>
- <ul>
-  <xsl:for-each select="deliverable">
-   <li>
-    <xsl:choose>
-     <xsl:when test="@file">
-      <a href="../deliverables/{@file}.html">
-       <xsl:variable name="deliverable"
-                     select="document(concat('../xml/deliverables/',@file,'.xml'))/deliverable"/>
-       <xsl:value-of select="$deliverable/@id"/>
-       <xsl:text> </xsl:text>
-       <xsl:value-of select="$deliverable/name"/>
-      </a>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="."/>
-     </xsl:otherwise>
-    </xsl:choose>
-   </li>
-  </xsl:for-each>
- </ul>
- <h2>Milestones and Expected Results:</h2>
- <xsl:copy-of select="milestones/*"/>
-</xsl:template>
-
-<xsl:template match="tasks">
- <dl>
-  <xsl:apply-templates/>
- </dl>
-</xsl:template>
-
-<xsl:template match="task">
- <dt>
-  <a name="{@id}"/>
-  <xsl:value-of select="@id"/>
-  <xsl:text> </xsl:text>
-  <xsl:value-of select="name"/>
- </dt>
- <dd>
-  <xsl:copy-of select="*"/>
- </dd>
-</xsl:template>
-
-<xsl:template name="p|ul|dl">
- <xsl:copy-of select="."/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/work-packages_index.xsl b/helm/mowgli/home/xsl/work-packages_index.xsl
deleted file mode 100644 (file)
index d13fd45..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="xml"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title>Work Packages</title>
-  </head>
-  <body>
-    <xsl:apply-templates/>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="work-packages">
- <h1>Work Packages</h1>
- <table border="1">
-  <thead>
-   <tr>
-    <td>Work Package:</td>
-    <td>Tasks:</td>
-    <td>Deliverables:</td>
-   </tr>
-  </thead>
-  <tbody>
-   <xsl:apply-templates select="work-package"/>
-  </tbody>
- </table>
- <xsl:copy-of select="description/*"/>
-</xsl:template>
-
-<xsl:template match="work-package">
- <xsl:variable name="work-package"
-               select="document(concat('../xml/work-packages/',@file,'.xml'))/work-package"/>
- <tr>
-  <td valign="top">
-   <xsl:value-of select="$work-package/@number"/>.
-   <a href="{@file}.html">
-    <xsl:value-of select="$work-package/name"/>
-   </a>
-  </td>
-  <td valign="top">
-   <xsl:choose>
-    <xsl:when test="$work-package/description/tasks">
-     <xsl:apply-templates select="$work-package/description/tasks">
-      <xsl:with-param name="url" select="concat(@file,'.html')"/>
-     </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>&#x00A0;</xsl:otherwise>
-   </xsl:choose>
-  </td>
-  <td valign="top">
-   <xsl:if test="$work-package/deliverable">
-    <ul>
-     <xsl:for-each select="$work-package/deliverable[@file]">
-      <xsl:apply-templates select="document(concat('../xml/deliverables/',@file,'.xml'))/deliverable">
-       <xsl:with-param name="url" select="concat('../deliverables/',@file,'.html')"/>
-      </xsl:apply-templates>
-     </xsl:for-each>
-    </ul>
-   </xsl:if>
-  </td>
- </tr>
-</xsl:template>
-
-<xsl:template match="tasks">
- <xsl:param name="url"/>
- <ul>
-  <xsl:apply-templates>
-   <xsl:with-param name="url" select="$url"/>
-  </xsl:apply-templates>
- </ul>
-</xsl:template>
-
-<xsl:template match="deliverable">
- <xsl:param name="url"/>
- <li>
-  <a href="{$url}">
-   <xsl:value-of select="@id"/>
-   <xsl:text> </xsl:text>
-   <xsl:value-of select="name"/>
-  </a>
- </li>
-</xsl:template>
-
-<xsl:template match="task">
- <xsl:param name="url"/>
- <li>
-  <a href="{$url}#{@id}">
-   <xsl:value-of select="@id"/>
-   <xsl:text> </xsl:text>
-   <xsl:value-of select="name"/>
-  </a>
- </li>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/mowgli/home/xsl/xhtml-content.xsl b/helm/mowgli/home/xsl/xhtml-content.xsl
deleted file mode 100644 (file)
index 296dbf8..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:mowgli="http://mowgli.cs.unibo.it/website">
-
-<xsl:import href="common.xsl"/>
-
-<xsl:output method="html"/>
-
-<xsl:param name="path_to_top" select="'.'"/>
-<xsl:param name="current-date"/>
-<xsl:param name="make_header" select="true()"/>
-<xsl:param name="make_footer" select="true()"/>
-<xsl:param name="use_frames" select="'yes'"/>
-
-<!--CSC: The following mess is due to a bug of xsltproc w.r.t. patterns
-         precedence: the less general pattern is sometimes applied ;-( -->
-<xsl:template match="html">
- <xsl:call-template name="html"/>
-</xsl:template>
-
-<xsl:template name="html">
- <html>
-  <head>
-   <title><xsl:value-of select="head/title"/></title>
-   <link rel="stylesheet" href="{$path_to_top}/../style/mowgli.css" type="text/css"/>
-  </head>
-  <body>
-   <xsl:variable name="body">
-    <xsl:if test="$make_header">
-     <xsl:call-template name="head">
-      <xsl:with-param name="path_to_top" select="$path_to_top"/>
-     </xsl:call-template>
-    </xsl:if>
-    <xsl:apply-templates select="*[2]/node()"/>
-    <xsl:if test="$make_footer">
-     <xsl:call-template name="foot">
-      <xsl:with-param name="path_to_top" select="$path_to_top"/>
-     </xsl:call-template>
-    </xsl:if>
-   </xsl:variable>
-   <xsl:choose>
-    <xsl:when test="$use_frames = 'yes'">
-     <xsl:copy-of select="$body"/>
-    </xsl:when>
-    <xsl:otherwise>
-     <table>
-      <tr>
-       <td nowrap="true" valign="top">
-        <xsl:apply-templates mode="menu" select="document('../xml/menu.xml')/*/*[2]/*"/>
-       </td>
-       <td width="5%">&#x0A0;</td>
-       <td valign="top">
-        <xsl:copy-of select="$body"/>
-       </td>
-      </tr>
-     </table>
-    </xsl:otherwise>
-   </xsl:choose>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="*|text()|@*">
- <xsl:choose>
-  <xsl:when test="name(.) = 'html'">
-   <xsl:call-template name="html"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:copy>
-    <xsl:apply-templates select="*|text()|@*"/>
-   </xsl:copy>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template match="mowgli:latest-news">
- <xsl:copy-of select="document('../html/latest-news.xml')/*/*"/>
-</xsl:template>
-
-<xsl:template match="mowgli:approaching-deadlines">
- <xsl:copy-of select="document('../html/approaching-deadlines.xml')/*/*"/>
-</xsl:template>
-
-<xsl:template match="mowgli:date">
- <xsl:copy-of select="$current-date"/>
-</xsl:template>
-
-<xsl:template match="mowgli:change-frame-settings">
- <br/>
- <p>
- <xsl:choose>
-  <xsl:when test="$use_frames = 'yes'">
-   [<a href="../html_no_frames" target="_top">No frames</a>]
-  </xsl:when>
-  <xsl:otherwise>
-   [<a href="{$path_to_top}/../html_yes_frames" target="_top">Frames</a>]
-  </xsl:otherwise>
- </xsl:choose>
- </p>
-</xsl:template>
-
-<xsl:template name="a_menu">
- <xsl:copy>
-  <xsl:choose>
-   <xsl:when test="starts-with(@href,'/') or
-                   starts-with(@href,'http://') or
-                   starts-with(@href,'mailto:')">
-    <xsl:copy-of select="@href"/>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:attribute name="href">
-     <xsl:value-of select="$path_to_top"/>
-     <xsl:text>/</xsl:text>
-     <xsl:value-of select="@href"/>
-    </xsl:attribute>
-   </xsl:otherwise>
-  </xsl:choose>
-  <xsl:value-of select="text()"/>
- </xsl:copy>
-</xsl:template>
-
-<xsl:template mode="menu" match="*|text()|@*">
- <xsl:choose>
-  <xsl:when test="name(.) = 'a'">
-   <xsl:call-template name="a_menu"/>
-  </xsl:when>
-  <xsl:when test="name(.) = 'mowgli:change-frame-settings'">
-   <xsl:apply-templates select="."/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:copy>
-    <xsl:apply-templates mode="menu" select="*|text()|@*"/>
-   </xsl:copy>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/nuprl_stylesheets/nuprl_abstract.xsl b/helm/nuprl_stylesheets/nuprl_abstract.xsl
deleted file mode 100644 (file)
index fa6d815..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-
-<xsl:template match="term">
-  <xsl:choose>
-  
-  <xsl:when test="@opid=&quot;le&quot;">
-    <m:apply>
-      <m:leq definitionURL="{@uri}"/>
-        <xsl:apply-templates select="*"/>
-    </m:apply>
-  </xsl:when>
-  <xsl:when test="string(@opid)=&quot;exists&quot;">
-    <m:apply>
-      <m:exists definitionURL="{@uri}"/>
-      <m:bvar>
-        <m:ci>
-         <xsl:value-of select="binder[1]/@var"/>
-       </m:ci>
-      </m:bvar>
-      <m:condition>
-        <xsl:apply-templates select="*[1]"/>
-      </m:condition>
-      <xsl:apply-templates select="*[3]"/>
-    </m:apply>
-  </xsl:when>
-  
-  <xsl:when test="string(@opid)=&quot;all&quot;">
-    <m:apply>
-      <m:csymbol definitionURL="{@uri}">forall</m:csymbol>
-      <m:bvar>
-        <m:ci>
-          <xsl:value-of select="binder[1]/@var"/>
-        </m:ci>
-        <m:type>
-          <xsl:apply-templates select="*[1]"/>
-        </m:type>
-      </m:bvar>
-      <xsl:apply-templates select="*[3]"/>
-    </m:apply>
-  </xsl:when>
-
-  <xsl:when test="string(@opid)=&quot;and&quot;">
-    <m:apply>
-      <m:and definitionURL="{@uri}"/>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:apply>
-  </xsl:when>
-  
-  <xsl:when test="string(@opid)=&quot;or&quot;">
-    <m:apply>
-      <m:or definitionURL="{@uri}"/>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:apply>
-  </xsl:when>
-  
-  <xsl:when test="string(@opid)=&quot;member&quot;">
-    <m:apply>
-      <m:in definitionURL="{@uri}"/>
-      <xsl:apply-templates select="*[2]"/>
-      <xsl:apply-templates select="*[1]"/>
-    </m:apply>
-  </xsl:when>
-    
-  <xsl:when test="string(@opid)=&quot;implies&quot;">
-    <m:apply>
-      <m:implies definitionURL="{@uri}"/>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:apply>
-  </xsl:when>
-  
-  <xsl:when test="string(@opid)=&quot;not&quot;">
-    <m:apply>
-      <m:not definitionURL="{@uri}"/>
-      <xsl:apply-templates select="*[1]"/>
-    </m:apply>
-  </xsl:when>
-  
-  <xsl:when test="string(@opid)=&quot;nat&quot;">
-    <m:naturalnumbers definitionURL="{@uri}"/>
-  </xsl:when>
-  
-  <xsl:when test="string(@opid)=&quot;so_lambda&quot;">
-    <m:apply>
-      <m:csymbol definitionURL="{@uri}">so_lambda</m:csymbol>
-      <xsl:choose>
-      <xsl:when test="*[1]=so_variable">
-        <m:apply>
-        <m:ci>so_variable</m:ci>
-        <m:ci>
-          <xsl:value-of select="so_variable/@var"/>
-       </m:ci>
-        </m:apply>
-        <!--<xsl:apply-templates select="*[2]"/>
-        <xsl:apply-templates select="*[3]"/>-->
-        <xsl:apply-templates/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:apply-templates select="*[1]"/>
-        <xsl:apply-templates select="*[2]"/>
-      </xsl:otherwise>
-      </xsl:choose>
-    </m:apply>
-  </xsl:when>
-  
-  <xsl:when test="string(@opid)=&quot;so_apply&quot;">
-    <m:apply>
-      <m:csymbol definitionURL="{@uri}">so_apply</m:csymbol>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:apply>
-  </xsl:when>  
-  
-  <xsl:when test="string(@opid)=&quot;gcd_p&quot;">
-    <m:apply>
-      <m:ci definitionURL="{@uri}">gcd_p</m:ci>
-      <xsl:apply-templates/>
-    </m:apply>
-  </xsl:when>
-  
-  <xsl:when test="string(@opid)=&quot;decidable&quot;">
-    <m:apply>
-      <m:ci definitionURL="{@uri}">decidable</m:ci>
-      <xsl:apply-templates/>
-    </m:apply>
-  </xsl:when>
-  
-  <xsl:when test="string(@opid)=&quot;int_seg&quot;">
-    <m:interval definitionURL="{@uri}">
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:interval>
-  </xsl:when>
-  <xsl:when test="string(@opid)=&quot;ge&quot;">
-    <m:apply>
-      <m:geq definitionURL="{@uri}"/>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:apply>
-  </xsl:when>
-  
-  <xsl:when test="string(@opid)=&quot;false&quot;">
-    <m:false definitionURL="{@uri}"/>
-  </xsl:when>
-  
-  <xsl:when test="string(@opid)=&quot;true&quot;">
-    <m:true definitionURL="{@uri}"/>
-  </xsl:when>
-  
-    <!-- ALTRE ASTRAZIONI -->
-  <xsl:otherwise>
-    <m:apply>
-     <m:csymbol>app</m:csymbol>
-     <m:ci definitionURL="{@uri}">
-       <xsl:value-of select="@opid"/>
-     </m:ci>
-     <xsl:apply-templates/>
-    </m:apply>
-  </xsl:otherwise>
-  
-  </xsl:choose>
-  
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/nuprl_stylesheets/nuprl_annotatedpres.xsl b/helm/nuprl_stylesheets/nuprl_annotatedpres.xsl
deleted file mode 100644 (file)
index f97a08b..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- XSLT version 0.1 of annotated MathML content to MathML presentation:  -->
-<!-- First draft: March 29 2000, Claudio Sacerdoti Coen, Irene Schena      -->
-<!--***********************************************************************--> 
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-<xsl:import href="nuprl_mmlextension.xsl"/>
-
-<!-- ANNOTATION -->
-
-<xsl:template match="annotation">
-    <xsl:choose>
-    <xsl:when test=". = /">
-      <m:math><m:mrow helm:xref="{@helm:xref}">
-      <xsl:apply-templates/>
-      </m:mrow>
-      </m:math>
-    </xsl:when>
-    <xsl:otherwise>
-     <m:mrow helm:xref="{@helm:xref}"><xsl:apply-templates/></m:mrow>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-<xsl:template match="text()">
- <xsl:variable name="text" select="normalize-space(.)"/>
- <xsl:if test="$text != ''">
-  <m:mtext><xsl:value-of select="$text"/></m:mtext>
- </xsl:if>
-</xsl:template>
-
-</xsl:stylesheet> 
diff --git a/helm/nuprl_stylesheets/nuprl_content_to_html2.xsl b/helm/nuprl_stylesheets/nuprl_content_to_html2.xsl
deleted file mode 100644 (file)
index cc6e7c9..0000000
+++ /dev/null
@@ -1,3047 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!--***********************************************************************--> 
-<!-- From MathML content to HTML                                           -->
-<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena, Guidi               -->
-<!--***********************************************************************--> 
-
-<xsl:param name="CICURI" select="''"/>
-<xsl:param name="type" select="'standalone'"/>
-<xsl:param name="UNICODEvsSYMBOL" select="'symbol'"/>
-<xsl:param name="explode_tactics" select="false()"/>
-
-<xsl:include href="nuprl_html_arith.xsl"/>
-<xsl:include href="nuprl_html_basic.xsl"/>
-
-<xsl:variable name="showcast" select="0"/>
-
-<!--***********************************************************************-->
-<!-- HTML Head and Body                                                    -->
-<!--***********************************************************************-->
-
-<!-- <xsl:output method="html" encoding="iso-8859-1"/> -->
-
-<!-- document needs method="xml" and searches locally for the dtd if        -->
-<!-- doctype-system is specified (the dtd must exist locally for parsing).  -->
-<!-- For having output html must be media-type="html" and for having the    -->
-<!-- correct <br /> you must specify at least the remote dtd by means of    -->
-<!-- doctype-public                                                         -->
-
-<!-- Commentd out by Zack, a try-fix for NuPRL stylesheets with OCaml UWOBO -->
-<!--
-<xsl:output 
-       method="xml" 
-       encoding="iso-8859-1" 
-       media-type="text/html"
-       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
--->
-<xsl:output 
-       method="html" 
-       encoding="iso-8859-1" 
-       media-type="text/html"
-       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
-
-<xsl:variable name="framewidth" select="55"/>
-
-<!--forall-->
-  <xsl:variable name="forall">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&quot;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x2200;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--lambda-->
-  <xsl:variable name="lambda">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">l</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x3BB;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--prod-->
-  <xsl:variable name="prod">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xD5;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x3A0;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--arrow-->
-  <xsl:variable name="arrow">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xAE;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x2192;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--RightArrow-->
-  <xsl:variable name="RightArrow">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xDE;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x21D2;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--product-->
-  <xsl:variable name="product">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">S</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#931;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--member-->
-  <xsl:variable name="member">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xce;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#8712;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--member-->
-  <xsl:variable name="intersection">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xc7;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#8745;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--integers-->
-  <xsl:variable name="integers">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">I</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#921;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--naturalnumbers-->
-  <xsl:variable name="naturalnumbers">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">N</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#925;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--implies-->
-  <xsl:variable name="implies">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xee;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#8658;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--exists-->
-  <xsl:variable name="exists">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#x24;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#8707;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-
-
-
-<xsl:template name="mksymbol">
-        <xsl:param name="symbol" select="'???'"/>
-        <xsl:param name="color"  select="'blue'"/>
-        <xsl:param name="size"   select="''"/>
-
-        <xsl:choose>
-                <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">
-                        <FONT FACE="symbol" SIZE="{$size}" COLOR="{$color}">
-                                <xsl:value-of select="$symbol"/>
-                        </FONT>
-                </xsl:when>
-                <xsl:otherwise>
-                        <FONT COLOR="{$color}">
-                                <xsl:value-of select="$symbol"/>
-                        </FONT>
-                </xsl:otherwise>
-        </xsl:choose>
-</xsl:template>
-
-<xsl:template match="/">
- <xsl:param name="current_indent" select="0"/>
- <xsl:choose>
-  <xsl:when test="$type = 'standalone'">
-   <html> 
-      <head>
-        <title> <xsl:value-of select="$CICURI"/> </title> <!-- FG -->
-         <style> A { text-decoration: none } </style>
-         <script>
-          <xsl:text disable-output-escaping="yes">
-           <![CDATA[
-            function Hide(which){
-             if (!document.getElementById)
-              return
-             which.style.display="none"
-            }
-
-            function Show(which){
-             if (!document.getElementById)
-              return
-             which.style.display=""
-            }
-
-            document.to_be_deleted = new Array();
-          ]]>
-          </xsl:text>
-         </script>
-       </head>
-      <body bgcolor="white">
-         <xsl:attribute name="onLoad">
-          if(document.getElementById)
-           for(var i=0;i&lt;document.to_be_deleted.length;i++)
-            Hide(document.getElementById(document.to_be_deleted[i]));
-         </xsl:attribute>
-         <xsl:apply-templates>
-            <xsl:with-param name="current_indent" select="0"/>
-         </xsl:apply-templates>
-      </body>
-   </html>
-  </xsl:when>
-  <xsl:otherwise>
-   <to_be_embedded>
-    <xsl:apply-templates>
-     <xsl:with-param name="current_indent" select="0"/>
-    </xsl:apply-templates>
-   </to_be_embedded>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!--***********************************************************************-->
-<!-- Indentation                                                          -->
-<!--***********************************************************************-->
-
-<xsl:template name="make_indent">
-       <xsl:param name="current_indent" select="0"/>
-       <xsl:if test="$current_indent > 0">
-               <xsl:text>&#x00a0;</xsl:text>
-               <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent - 1"/> 
-               </xsl:call-template>
-       </xsl:if>
-</xsl:template>
-
-<!-- Syntactic Sugar -->
-<xsl:template match="m:type">
-<xsl:param name="current_indent" select="0"/> 
-<xsl:apply-templates>
- <xsl:with-param name="current_indent" 
-           select="$current_indent"/>
-</xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="m:condition">
-<xsl:param name="current_indent" select="0"/> 
-<xsl:apply-templates>
- <xsl:with-param name="current_indent" 
-           select="$current_indent"/>
-</xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="m:math">
-<xsl:param name="current_indent" select="0"/> 
-<xsl:apply-templates>
- <xsl:with-param name="current_indent" 
-           select="$current_indent"/>
-</xsl:apply-templates>
-</xsl:template>
-
-
-
-<!--*********************************************************************-->
-<!--                         INLINE MODE                                 -->
-<!--*********************************************************************-->
-
-<!-- href -->
-<xsl:template mode="inline" match="m:ci">
- <xsl:choose>
-  <xsl:when test="boolean(@definitionURL)">
-   <a href="{@definitionURL}">
-   <xsl:apply-templates/>
-   </a>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="."/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- CSYMBOL -->
-
-<xsl:template match="m:apply[m:csymbol]" mode="inline">
- <xsl:param name="current_indent" select="0"/>
-   <xsl:variable name="name">
-    <xsl:value-of select="m:csymbol"/>
-   </xsl:variable>
-   <xsl:variable name="uri"><xsl:value-of select="*[1]/@definitionURL"/></xsl:variable>
-   <xsl:choose>
-
-    <!-- FUNCTION-DIP (PROD) -->
-       <xsl:when test="$name='prod'">
-               <xsl:call-template name="mksymbol">
-                       <xsl:with-param name="symbol" select="$prod"/>
-                       <xsl:with-param name="color" select="'blue'"/>
-                       <xsl:with-param name="size" select="'+2'"/>
-               </xsl:call-template>
-               <xsl:apply-templates select="m:bvar/m:ci"/>
-               <xsl:if test="m:bvar/m:ci=&quot;&quot;">
-                       <xsl:text>""</xsl:text>
-               </xsl:if>
-               <xsl:text>:</xsl:text>
-               <!--<xsl:if test="m:bvar/m:type/*[*]">
-                       <xsl:text>( </xsl:text>
-               </xsl:if>-->
-               <xsl:apply-templates select="m:bvar/m:type"/>
-               <!--<xsl:if test="m:bvar/m:type/*[*]">
-                       <xsl:text>) </xsl:text>
-               </xsl:if>-->
-               <xsl:text>.</xsl:text>
-               <xsl:apply-templates select="*[position()=3]"/>
-       </xsl:when>
-       
-       <!-- ARROW --> <!-- FUNCTION (IND) -->
-    <xsl:when test="$name='arrow'">
-       <xsl:text>(</xsl:text>
-       <xsl:apply-templates mode="inline" select="*[position()=2]"/>
-       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$arrow"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+0'"/>
-       </xsl:call-template>
-       <xsl:apply-templates  select="*[position()=3]"/>
-       <xsl:text>)</xsl:text>
-    </xsl:when>
-
-    
-    <!-- FORALL -->
-    <xsl:when test="$name='forall'">
-       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$forall"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+2'"/>
-       </xsl:call-template>
-       <xsl:apply-templates select="m:bvar/m:ci"/>
-       <xsl:text>:</xsl:text>
-       <!--<xsl:if test="count(m:bvar/m:type/m:apply/*) > 1">
-               <xsl:text>(</xsl:text>
-       </xsl:if>-->
-       <xsl:apply-templates select="m:bvar/m:type"/>
-       <!--<xsl:if test="count(m:bvar/m:type/m:apply/*) > 1">
-               <xsl:text>)</xsl:text>
-       </xsl:if>-->
-       <xsl:text>.</xsl:text>
-       <xsl:apply-templates select="*[position()=3]"/>
-   </xsl:when>
-   
-   
-    <!-- PRODUCT -->
-    <xsl:when test="$name='product'">
-       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$product"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+2'"/>
-       </xsl:call-template>
-       <xsl:apply-templates select="m:bvar/m:ci"/>
-       <xsl:text>:</xsl:text>
-       <xsl:apply-templates mode="inline" select="m:bvar/m:type"/>
-       <xsl:text>.</xsl:text>
-       <xsl:apply-templates select="*[position()=3]"/>
-    </xsl:when>
-    
-    <!-- PROD_IND -->
-    <xsl:when test="$name='product_ind'">
-     <FONT color="blue">
-     <xsl:text>( </xsl:text>
-     </FONT>
-     <xsl:apply-templates mode="inline" select="m:type"/>
-     <FONT color="blue" size="+2">
-     <xsl:text>x</xsl:text>
-     </FONT>
-     <xsl:apply-templates mode="inline" select="*[position()=3]"/>
-     <FONT color="blue">
-     <xsl:text> )</xsl:text>
-     </FONT>
-
-    </xsl:when>
-   
-   <!-- PAIR -->
-   <xsl:when test="$name='pair'">
-       <FONT color="blue" size="+1">
-       <xsl:text>&lt;</xsl:text>
-       </FONT>
-       <xsl:apply-templates select="*[2]"/>
-       <xsl:text>, </xsl:text>
-       <xsl:apply-templates select="*[3]"/>
-       <FONT color="blue" size="+1">
-       <xsl:text>&gt;</xsl:text>
-       </FONT>
-   </xsl:when>
-
-   <!-- UNION -->
-   <xsl:when test="$name='union'">
-       <xsl:apply-templates select="*[2]"/>
-       <FONT color="blue" size="+2">
-       <xsl:text>+</xsl:text>
-       </FONT>
-       <xsl:apply-templates select="*[3]"/>
-  </xsl:when>
-
-  <!-- INL -->
-  <xsl:when test="$name='inl'">
-       <FONT color="blue">
-       <xsl:text>inl (</xsl:text>
-       </FONT>
-       <xsl:apply-templates select="*[2]"/>
-       <FONT color="blue">
-       <xsl:text> )</xsl:text>
-       </FONT>
-  </xsl:when>
-
-   <!-- INR -->
-  <xsl:when test="$name='inr'">
-       <FONT color="blue" size="+1">
-       <xsl:text>inr (</xsl:text>
-       </FONT>
-       <xsl:apply-templates select="*[2]"/>
-       <FONT color="blue" size="+1">
-       <xsl:text> )</xsl:text>
-       </FONT>
-  </xsl:when>
-
-       <!-- EQUAL -->
-       <xsl:when test="$name='equal'">
-               <xsl:apply-templates select="*[position()=3]"/>
-               <FONT color="blue" size="+1">
-               <xsl:text> = </xsl:text>
-               </FONT>
-                       <xsl:apply-templates select="*[position()=4]"/>
-               <xsl:text> </xsl:text>
-                       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$member"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+0'"/>
-                       </xsl:call-template>
-               <xsl:text> </xsl:text>
-                       <xsl:apply-templates select="*[position()=2]">
-                <xsl:with-param name="current_indent" select="$current_indent"/>
-                       </xsl:apply-templates>
-               </xsl:when>
-       
-       <!-- CONS -->
-       <xsl:when test="$name='cons'">
-               <xsl:apply-templates select="*[2]"/>
-               <FONT color="blue">
-               <xsl:text>::</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[3]"/>
-       </xsl:when>
-
-       <!-- REC -->
-
-       <xsl:when test="$name='rec'">
-               <FONT color="blue">
-               <xsl:text>rectype</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[2]"/>
-               <FONT color="blue">
-               <xsl:text>=</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[3]"/>
-       </xsl:when>
-
-
-       <!-- SET -->
-
-       <xsl:when test="$name='t_set'">
-               <FONT color="blue">
-               <xsl:text>{</xsl:text>
-               </FONT>
-               <xsl:choose>
-               <xsl:when test="m:bvar/m:ci">
-                       <xsl:apply-templates select="m:bvar/m:ci"/>
-                       <FONT color="blue">
-                       <xsl:text>:</xsl:text>
-                       </FONT>
-                       <xsl:apply-templates select="m:bvar/m:type"/>
-               </xsl:when>
-               <xsl:otherwise>
-               <xsl:apply-templates select="m:bvar/m:type"/>
-               </xsl:otherwise>
-               </xsl:choose>
-               <FONT color="blue">
-               <xsl:text>|</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[3]"/>
-               <FONT color="blue">
-                       <xsl:text>}</xsl:text>
-               </FONT>
-
-       </xsl:when>
-
-       <!-- ISECT -->
-
-       <xsl:when test="$name='isect'">
-               <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$intersection"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+0'"/>
-                       </xsl:call-template>
-               <xsl:apply-templates select="m:bvar/m:ci"/>
-               <FONT color="blue">
-               <xsl:text>:</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="m:bvar/m:type"/>
-               <FONT color="blue">
-               <xsl:text>.</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[3]"/>
-       </xsl:when>
-
-       <!-- QUOTIENT --> 
-
-       <xsl:when test="$name='quotient'">
-               <xsl:apply-templates select="m:bvar[1]"/>
-               <xsl:text>,</xsl:text>
-               <xsl:apply-templates select="m:bvar[2]"/>
-               <FONT color="blue">
-               <xsl:text>:</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[2]"/>
-               <FONT color="blue">
-               <xsl:text>//</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[5]"/>
-       </xsl:when>
-
-       <!-- SO_LAMBDA -->
-       <xsl:when test="$name='so_lambda'">
-                               <xsl:call-template name="mksymbol">
-                               <xsl:with-param name="symbol" select="$lambda"/>
-                               <xsl:with-param name="color" select="'red'"/>
-                               <xsl:with-param name="size" select="'+2'"/>
-                               </xsl:call-template>
-                               <xsl:apply-templates select="m:apply[1]/*[2]"/>
-                               <xsl:text>.</xsl:text>
-                               <xsl:apply-templates select="*[3]"/>
-     </xsl:when>
-
-
-       <!-- SO_APPLY -->
-
-       <xsl:when test="$name='so_apply'">
-               <xsl:text>(</xsl:text>
-               <xsl:apply-templates select="*[position()=2]"/>
-                       <xsl:for-each select="*[position()>2]">
-                       <xsl:text>&#x00A0;</xsl:text>
-                       <xsl:apply-templates mode="inline" select="."/>
-               </xsl:for-each>
-               <xsl:text>)</xsl:text>
-      </xsl:when>
-   <!-- APP -->
-    <xsl:when test="$name='app'">
-     <!-- NuPRL rendering -->
-     <xsl:apply-templates mode="inline" select="*[position()=2]"/>
-     <xsl:if test="count(*) &gt; 2">
-      <xsl:text>(</xsl:text>
-      <xsl:for-each select="*[position() &gt; 2]">
-       <xsl:apply-templates select="." mode="inline"/>
-       <xsl:if test="not(position() = last())">
-        <xsl:text>,</xsl:text>
-       </xsl:if>
-      </xsl:for-each>
-      <xsl:text>)</xsl:text>
-     </xsl:if>
-     <!-- CIC rendering
-     <xsl:text>(</xsl:text>
-     <xsl:apply-templates mode="inline" select="*[position()=2]"/>
-     <xsl:for-each select="*[position()>2]">
-      <xsl:text>&#x00A0;</xsl:text>
-      <xsl:apply-templates mode="inline" select="."/>
-     </xsl:for-each>
-     <xsl:text>)</xsl:text>
-     -->
-    </xsl:when>
-    <!-- CAST -->
-    <xsl:when test="$name='cast'">
-     <xsl:text>(</xsl:text>
-     <xsl:apply-templates mode="inline" select="*[position()=2]"/>
-     <xsl:text>:></xsl:text>
-     <xsl:apply-templates mode="inline" select="*[position()=3]"/>
-     <xsl:text>)</xsl:text>
-    </xsl:when>
-    <xsl:when test="$name='Prop'">
-     <FONT color="violet">Prop</FONT>
-    </xsl:when>
-    <xsl:when test="$name='Set'">
-     <FONT color="violet">Set</FONT>
-    </xsl:when>
-    <xsl:when test="$name='Type'">
-     <FONT color="violet">Type</FONT>
-    </xsl:when>
-   
-   <!-- MUTCASE -->
-    <xsl:when test="$name='mutcase'">
-     <xsl:text>&lt;</xsl:text> 
-     <xsl:apply-templates mode="inline" select="*[position()=2]"/> 
-     <xsl:text>&gt; </xsl:text>
-     <FONT color="red">CASE </FONT>
-     <xsl:apply-templates mode="inline" select="*[position()=3]"/>
-     <FONT color="red"> OF </FONT>
-<xsl:for-each select="m:piecewise/m:piece">
-<!--<xsl:for-each select="*[position() mod 2 = 0 and position()>3]">-->
-      <xsl:choose>
-       <xsl:when test="not(position() = 1)">
-        <xsl:text> | </xsl:text> 
-       </xsl:when> 
-      </xsl:choose>
-<xsl:apply-templates mode="inline" select="./*[2]"/>
-      <xsl:call-template name="mksymbol">
-       <xsl:with-param name="symbol" select="$RightArrow"/>
-       <xsl:with-param name="color" select="'green'"/>
-       <xsl:with-param name="size" select="'+0'"/>
-      </xsl:call-template>
-      <xsl:apply-templates mode="inline"
-           select="./*[1]"/>
-     </xsl:for-each>
-    </xsl:when>
-   
-   <!-- FIX -->
-    <xsl:when test="$name='fix'">
-     <FONT color="red">FIX</FONT>
-     <xsl:value-of select="m:ci"/>
-     <xsl:text>{</xsl:text>
-     <xsl:for-each select="m:bvar"> 
-      <xsl:value-of select="m:ci"/>
-      <xsl:text>:</xsl:text>
-      <xsl:apply-templates mode="inline" select="m:type"/>
-      <xsl:text>:=</xsl:text>
-      <xsl:apply-templates mode="inline" 
-             select="following-sibling::*[position() = 1]"/>
-      <xsl:choose>
-       <xsl:when test="position()=last()">
-        <xsl:text>}</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:text>;</xsl:text>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:for-each>
-    </xsl:when>
-   
-   <!-- COFIX -->
-    <xsl:when test="$name='cofix'">
-     <xsl:text>COFIX</xsl:text>
-     <xsl:value-of select="m:ci"/>
-     <xsl:text>{</xsl:text>
-     <xsl:for-each select="m:bvar"> 
-      <xsl:value-of select="m:ci"/>
-      <xsl:text>:</xsl:text>
-      <xsl:apply-templates mode="inline" select="m:type"/>
-      <xsl:text>:=</xsl:text>
-      <xsl:apply-templates mode="inline" 
-          select="following-sibling::*[position() = 1]"/>
-      <xsl:choose>
-       <xsl:when test="position()=last()">
-        <xsl:text>}</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:text>;</xsl:text>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:for-each>
-    </xsl:when>
-   
-   <!-- proof -->
-    <xsl:when test="$name='proof' or $name='side_proof'">
-       <xsl:apply-templates mode="inline" select="*[position()=2]"/>
-       <FONT color="red">&#x00a0;proves&#x00a0;</FONT>
-       <xsl:apply-templates mode="inline" select="*[position()=3]"/>
-    </xsl:when>
-    <xsl:when test="$name='letin1'">
-     <xsl:text>letin1 (inline error)</xsl:text>
-    </xsl:when>
-    <!-- false_ind -->
-    <xsl:when test="$name='false_ind'">
-    <xsl:apply-templates mode="inline" select="*[3]"/>
-    <FONT color="red">Contradiction.</FONT>
-    </xsl:when>
-    <!-- and_ind -->
-    <xsl:when test="$name='and_ind'">
-     <FONT color="red">From&#x00a0;</FONT>
-     <xsl:apply-templates select="*[2]"/>
-     <FONT color="red">&#x00a0;we get</FONT>
-     (
-     <xsl:apply-templates select="*[3]"/>
-     )&#x00a0;
-     <xsl:apply-templates mode="inline" select="*[4]"/>
-     <FONT color="red">&#x00a0;and&#x00a0;</FONT>
-     (
-     <xsl:apply-templates select="*[5]"/>
-     )&#x00a0;
-     <xsl:apply-templates mode="inline" select="*[6]"/>
-     ;
-     <FONT color="red">&#x00a0;hence&#x00a0;</FONT>
-     <xsl:apply-templates mode="inline" select="*[7]"/>
-    </xsl:when>
-   </xsl:choose>
-</xsl:template>
-
-<xsl:template mode="inline" match="m:lambda">
-       <xsl:call-template name="mksymbol">
-                       <xsl:with-param name="symbol" select="$lambda"/>
-                       <xsl:with-param name="color" select="'red'"/>
-                       <xsl:with-param name="size" select="'+2'"/>
-       </xsl:call-template>
-      
-      <!-- IN NuPrl non e' specificato il tipo -->
-       <xsl:apply-templates select="m:bvar/m:ci"/>
-       <xsl:if test="m:bvar[m:mtype]">
-               <xsl:text>:</xsl:text>
-               <xsl:apply-templates mode="inline" select="m:bvar/m:type"/>
-       </xsl:if>
-       <xsl:text>.</xsl:text>
-      <xsl:apply-templates mode="inline" select="*[position()=2]"/>
-</xsl:template>
-
-<!--*********************************************************************-->
-<!--                       NORMAL MODE                                   -->
-<!--*********************************************************************-->
-
-<xsl:template match="m:apply[m:csymbol]">
-    <xsl:param name="current_indent" select="0"/> 
-    <xsl:param name="width" select="$framewidth"/> 
-    <xsl:variable name="name">
-     <xsl:value-of select="m:csymbol"/>
-    </xsl:variable>
-    <xsl:variable name="charlength">
-     <xsl:apply-templates select="m:csymbol" mode="charcount"/>
-    </xsl:variable>
-    <xsl:variable name="uri">
-     <xsl:value-of select="*[1]/@definitionURL"/>
-    </xsl:variable>
-     
-     
-     <xsl:choose>
-     
-     <!-- FUNCTION-DIP (PROD) -->
-     <xsl:when test="$name='prod'">
-       <xsl:choose>
-               <xsl:when test="$charlength > $framewidth">
-                       <xsl:call-template name="mksymbol">
-                               <xsl:with-param name="symbol" select="$prod"/>
-                               <xsl:with-param name="color" select="'blue'"/>
-                               <xsl:with-param name="size" select="'+2'"/>
-                       </xsl:call-template>
-                       <xsl:apply-templates select="m:bvar/m:ci">
-                       <xsl:with-param name="current_indent" select="$current_indent"/>
-                       </xsl:apply-templates>
-                       <xsl:if test="m:bvar/m:ci=&quot;&quot;">
-                               <xsl:text>""</xsl:text>
-                       </xsl:if>
-                       <xsl:text>:</xsl:text>
-                       <!--<xsl:if test="m:bvar/m:type/*[*]">
-                               <xsl:text>( </xsl:text>
-                       </xsl:if>-->
-                       <xsl:apply-templates select="m:bvar/m:type">
-                               <xsl:with-param name="current_indent" 
-                               select="$current_indent + 5 + 2*string-length(m:bvar/m:ci)"/>
-                       </xsl:apply-templates>
-                       <!--<xsl:if test="m:bvar/m:type/*[*]">
-                               <xsl:text>) </xsl:text>
-                       </xsl:if>-->
-                       <br/>
-                       <xsl:call-template name="make_indent">
-                               <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-                       </xsl:call-template>
-                       <xsl:text>.</xsl:text>
-                       <xsl:apply-templates select="*[position()=3]">
-                       <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-               </xsl:when>
-                       <xsl:otherwise>
-                       <xsl:apply-templates mode="inline" select="."/>
-                       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-    
-    <!-- ARROW --> <!-- FUNCTION IND -->
-       <xsl:when test="$name='arrow'">
-                       <xsl:choose>
-                               <xsl:when test="$charlength > $framewidth">
-                       <xsl:text>arrow</xsl:text>
-                               <xsl:text>(</xsl:text>
-                               <xsl:apply-templates select="*[position()=2]">
-                        <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                               </xsl:apply-templates>
-                               <br/>
-                               <xsl:call-template name="make_indent">
-                               <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-                               </xsl:call-template>
-                       <!-- -> -->
-                       <xsl:text> </xsl:text>
-                               <xsl:call-template name="mksymbol">
-                               <xsl:with-param name="symbol" select="$arrow"/>
-                               <xsl:with-param name="color" select="'blue'"/>
-                               <xsl:with-param name="size" select="'+0'"/>
-                               </xsl:call-template>
-                               <xsl:apply-templates select="*[position()=3]">
-                               <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-                               </xsl:apply-templates>
-                               <xsl:text>)</xsl:text>
-                       </xsl:when>
-                       <xsl:otherwise>
-                       <xsl:apply-templates mode="inline" select="."/>
-                       </xsl:otherwise>
-       </xsl:choose>
-</xsl:when>
-
-     <!-- TYPE_OF --> 
-     <xsl:when test="$name='type_of'">
-               <xsl:value-of select="*[2]"/>
-         <xsl:text>:</xsl:text>
-       <xsl:if test="count(*[3]/*) > 1">
-               <xsl:text>(</xsl:text>
-       </xsl:if>
-       <xsl:apply-templates select="*[3]"/>
-       <xsl:if test="count(*[3]/*) > 1">
-               <xsl:text>)</xsl:text>
-       </xsl:if>
-      </xsl:when>      
-
-       <!-- AXIOM -->
-       <xsl:when test="$name='Ax'">
-               <FONT color="blue">
-               <xsl:text>Ax</xsl:text>
-               </FONT>
-       </xsl:when>
-       
-       <!-- VOID -->
-       <xsl:when test="$name='void'">
-               <FONT color="blue">
-               <xsl:text>Void</xsl:text>
-               </FONT>
-       </xsl:when>     
-       
-       <!-- ATOM -->
-       <xsl:when test="$name='atom'">
-               <FONT color="blue">
-               <xsl:text>Atom</xsl:text>
-               </FONT>
-       </xsl:when>     
-
-       
-       
-     <!-- FORALL -->
-     <xsl:when test="$name='forall'">
-       <xsl:choose>
-       <xsl:when test="$charlength > $framewidth">
-       <!-- &#x03a0; -->
-         <xsl:call-template name="mksymbol">
-          <xsl:with-param name="symbol" select="$forall"/>
-          <xsl:with-param name="color" select="'blue'"/>
-          <xsl:with-param name="size" select="'+2'"/>
-         </xsl:call-template>
-         <xsl:apply-templates select="m:bvar/m:ci">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-         <xsl:text>:</xsl:text>
-         <xsl:apply-templates select="m:bvar/m:type">
-          <xsl:with-param name="current_indent" 
-           select="$current_indent + 5 + 2*string-length(m:bvar/m:ci)"/>
-         </xsl:apply-templates>
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-         </xsl:call-template>
-         <xsl:text>.</xsl:text>
-         <xsl:apply-templates select="*[position()=3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-         </xsl:apply-templates>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-
-      <!-- PRODUCT -->
-      <xsl:when test="$name='product'">
-       <xsl:choose>
-       <xsl:when test="$charlength > $framewidth">
-         <xsl:call-template name="mksymbol">
-          <xsl:with-param name="symbol" select="$product"/>
-          <xsl:with-param name="color" select="'blue'"/>
-          <xsl:with-param name="size" select="'+2'"/>
-         </xsl:call-template>
-         <xsl:apply-templates select="m:bvar/m:ci">
-         <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-         <xsl:text>:</xsl:text>
-         <xsl:apply-templates select="m:bvar/m:type">
-          <xsl:with-param name="current_indent" 
-           select="$current_indent + 5 + 2*string-length(m:bvar/m:ci)"/>
-         </xsl:apply-templates><br/> 
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-         </xsl:call-template>
-         <xsl:text>.</xsl:text>
-         <xsl:apply-templates select="*[position()=3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-         </xsl:apply-templates>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      
-       <!-- PROD_IND -->
-      <xsl:when test="$name='product_ind'">
-       <xsl:choose>
-       <xsl:when test="$charlength > $framewidth">
-       <FONT color="blue">
-               <xsl:text>( </xsl:text>
-       </FONT>
-         <xsl:apply-templates select="m:type">
-          <xsl:with-param name="current_indent" 
-           select="$current_indent + 5 + 2*string-length(m:bvar/m:ci)"/>
-         </xsl:apply-templates>
-        <br/> 
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-         </xsl:call-template>
-       <FONT color="blue" size="+1">
-         <xsl:text> x </xsl:text>
-        </FONT>
-         <xsl:apply-templates select="*[position()=3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-         </xsl:apply-templates>
-        <FONT color="blue">
-               <xsl:text> )</xsl:text>
-       </FONT>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-
-      <!-- PAIR -->
-       <xsl:when test="$name='pair'">
-               <xsl:choose>
-               <xsl:when test="$charlength > $framewidth">
-                       <FONT color="blue" size="+1">
-                       <xsl:text>&lt;</xsl:text>
-                       </FONT>
-                       <xsl:apply-templates select="*[position()=2]">
-                        <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                               </xsl:apply-templates>
-                       <xsl:text>, </xsl:text>
-                               <br/>
-                               <xsl:call-template name="make_indent">
-                       <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-                               </xsl:call-template>
-                       <xsl:apply-templates select="*[position()=3]">  
-                        <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                               </xsl:apply-templates>
-                       <FONT color="blue" size="+1">
-                       <xsl:text>&gt;</xsl:text>
-                       </FONT>
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:apply-templates mode="inline" select="."/>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:when>
-
-       <!-- UNION -->  
-               <xsl:when test="$name='union'">
-               <xsl:choose>
-               <xsl:when test="$charlength > $framewidth">
-                       <xsl:apply-templates select="*[position()=2]">
-                        <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                               </xsl:apply-templates>
-                               <br/>
-                               <xsl:call-template name="make_indent">
-                       <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-                               </xsl:call-template>
-                       <FONT color="blue" size="+1">
-                       <xsl:text>+</xsl:text>
-                       </FONT>
-                       <xsl:apply-templates select="*[position()=3]">
-                        <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                               </xsl:apply-templates>
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:apply-templates mode="inline" select="."/>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:when>
-       
-     <!-- INL -->
-       <xsl:when test="$name='inl'">
-               <xsl:choose>
-               <xsl:when test="$charlength > $framewidth">
-                       <FONT color="blue">
-                       <xsl:text>inl (</xsl:text>
-                       </FONT>
-                       <xsl:apply-templates select="*[position()=2]">
-                        <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                               </xsl:apply-templates>
-                       <FONT color="blue">
-                       <xsl:text> )</xsl:text>
-                       </FONT>
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:apply-templates mode="inline" select="."/>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:when>
-
-       <!-- INR -->
-       <xsl:when test="$name='inr'">
-               <xsl:choose>
-               <xsl:when test="$charlength > $framewidth">
-                       <FONT color="blue" size="+1">
-                       <xsl:text>inr (</xsl:text>
-                       </FONT>
-                       <xsl:apply-templates select="*[position()=2]">
-                        <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                               </xsl:apply-templates>
-                       <FONT color="blue" size="+1">
-                       <xsl:text> )</xsl:text>
-                       </FONT>
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:apply-templates mode="inline" select="."/>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:when>
-
-       <!-- PROP -->
-       <xsl:when test="$name='prop'">
-               <FONT color="blue">
-               <xsl:text>P</xsl:text>
-               </FONT>
-               <FONT color="blue" size="-2"> 
-               <xsl:apply-templates select="m:cn">
-                <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-               </FONT>
-       </xsl:when>
-
-       <!-- UNIVERSE -->
-       <xsl:when test="$name='universe'">
-               <FONT color="blue" size="+1">
-               <xsl:text>U</xsl:text>
-               </FONT>
-               <FONT color="blue" size="2"> 
-               <xsl:apply-templates select="m:cn"/>
-               </FONT>
-       </xsl:when>
-
-       <!-- EQUAL -->
-       <xsl:when test="$name='equal'">
-                       <xsl:choose>
-                               <xsl:when test="$charlength > $framewidth">
-                       <xsl:apply-templates select="*[position()=3]">
-                        <xsl:with-param name="current_indent" select="$current_indent"/> 
-                               </xsl:apply-templates>
-                       <br/>
-                       <xsl:call-template name="make_indent">
-                        <xsl:with-param name="current_indent" select="$current_indent"/> 
-                               </xsl:call-template>
-                       <FONT color="blue" size="+1">
-                        <xsl:text>= </xsl:text>
-                       </FONT>
-                               <xsl:apply-templates select="*[position()=4]">
-                        <xsl:with-param name="current_indent" select="$current_indent"/>
-                               </xsl:apply-templates>
-                               <br/>
-                               <xsl:call-template name="make_indent">
-                       <xsl:with-param name="current_indent" select="$current_indent"/> 
-                               </xsl:call-template>
-                               <!-- member -->
-                               <xsl:call-template name="mksymbol">
-                       <xsl:with-param name="symbol" select="$member"/>
-                       <xsl:with-param name="color" select="'blue'"/>
-                       <xsl:with-param name="size" select="'+0'"/>
-                               </xsl:call-template>
-                               <xsl:apply-templates select="*[position()=2]">
-                       <xsl:with-param name="current_indent" select="$current_indent"/>
-                               </xsl:apply-templates>
-                       </xsl:when>
-                       <xsl:otherwise>
-                       <xsl:apply-templates mode="inline" select="."/>
-                       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-
-       <!-- TOKEN -->
-
-       <xsl:when test="$name='token'">
-               <FONT color="blue">
-               <xsl:text>"</xsl:text>
-               </FONT> 
-               <xsl:apply-templates select="m:ci"/>
-               <FONT color="blue">
-               <xsl:text>"</xsl:text>
-               </FONT> 
-       </xsl:when>
-
-       <!-- NIL -->
-
-       <xsl:when test="$name='nil'">
-               <FONT color="blue">
-               <xsl:text>[]</xsl:text>
-               </FONT> 
-       </xsl:when>
-
-       <!-- CONS -->
-       <xsl:when test="$name='cons'">
-               <xsl:apply-templates select="*[2]">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-                       <br/>
-                       <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-                       </xsl:call-template>
-               <FONT color="blue">
-               <xsl:text>::</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[3]">
-                <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-       </xsl:when>
-       
-       
-       <!-- REC --> 
-
-       <xsl:when test="$name='rec'">
-               <xsl:choose>
-               <xsl:when test="$charlength > $framewidth">
-               <FONT color="blue">
-               <xsl:text>rectype</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[2]">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-                       <br/>
-                       <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-                       </xsl:call-template>
-               <FONT color="blue">
-               <xsl:text>=</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[3]">
-                <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:apply-templates mode="inline" select="."/>
-                       </xsl:otherwise>
-                       </xsl:choose>
-       </xsl:when>
-
-       <!-- SET -->
-
-       <xsl:when test="$name='t_set'">
-       <xsl:choose>
-               <xsl:when test="$charlength > $framewidth">
-               <FONT color="blue">
-               <xsl:text>{</xsl:text>
-               </FONT>
-               <xsl:choose>
-               <xsl:when test="m:bvar/m:ci">
-                       <xsl:apply-templates select="m:bvar/m:ci"/>
-                       <FONT color="blue">
-                               <xsl:text>:</xsl:text>
-                       </FONT>
-                       <xsl:apply-templates select="m:bvar/m:type">
-                               <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                               </xsl:apply-templates>
-                               <br/>
-                               <xsl:call-template name="make_indent">
-                               <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-                               </xsl:call-template>
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:apply-templates select="m:bvar/m:type">
-                               <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                               </xsl:apply-templates>
-                               <br/>
-                               <xsl:call-template name="make_indent">
-                               <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-                               </xsl:call-template>
-               </xsl:otherwise>
-               </xsl:choose>
-               <FONT color="blue">
-                       <xsl:text>|</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[3]">
-                <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-
-               <FONT color="blue">
-                       <xsl:text>}</xsl:text>
-               </FONT>
-
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:apply-templates mode="inline" select="."/>
-                       </xsl:otherwise>
-                       </xsl:choose>
-       </xsl:when>
-
-       <!-- ISECT -->
-
-       <xsl:when test="$name='isect'">
-               <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$intersection"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+0'"/>
-                       </xsl:call-template>
-               <xsl:apply-templates select="m:bvar/m:ci"/>
-               <FONT color="blue">
-               <xsl:text>:</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="m:bvar/m:type">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-                       <br/>
-                       <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-                       </xsl:call-template>
-               <FONT color="blue">
-               <xsl:text>.</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[3]">
-                <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-
-       </xsl:when>
-
-       <!-- QUOTIENT --> 
-
-       <xsl:when test="$name='quotient'">
-               <xsl:apply-templates select="m:bvar[1]"/>
-               <xsl:text>,</xsl:text>
-               <xsl:apply-templates select="m:bvar[2]"/>
-               <FONT color="blue">
-               <xsl:text>:</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[2]">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-                       <br/>
-                       <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-                       </xsl:call-template>
-               <FONT color="blue">
-               <xsl:text>//</xsl:text>
-               </FONT>
-               <xsl:apply-templates select="*[5]">
-                <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-
-       </xsl:when>
-
-       <!-- IF_THEN_ELSE -->
-       <xsl:when test="$name='if_then_else'">
-               <xsl:choose>
-               <xsl:when test="m:where = 'atom_eq'">
-                       <FONT color="blue">
-                       <xsl:text>atom_eq (</xsl:text>
-                       </FONT>
-               </xsl:when>
-               <xsl:when test="m:where = 'int_eq'">
-                       <FONT color="blue">
-                       <xsl:text>int_eq (</xsl:text>
-                       </FONT>
-               </xsl:when>
-               <xsl:when test="m:where = 'less'">
-                       <FONT color="blue">
-                       <xsl:text>less (</xsl:text>
-                       </FONT>
-               </xsl:when>
-               </xsl:choose>
-               <xsl:apply-templates select="*[3]"/>
-               <xsl:text>; </xsl:text>
-               <xsl:apply-templates select="*[4]"/>
-               <xsl:text>; </xsl:text>
-               <xsl:apply-templates select="*[5]"/>
-               <xsl:text>; </xsl:text> 
-               <xsl:apply-templates select="*[6]"/>
-               <FONT color="blue">
-               <xsl:text>)</xsl:text>
-               </FONT>
-       </xsl:when>
-
-
-       <!-- SO_LAMBDA -->
-       <xsl:when test="$name='so_lambda'">
-       <xsl:choose>
-               <xsl:when test="$charlength > $framewidth">
-                               <xsl:call-template name="mksymbol">
-                               <xsl:with-param name="symbol" select="$lambda"/>
-                               <xsl:with-param name="color" select="'red'"/>
-                               <xsl:with-param name="size" select="'+2'"/>
-                               </xsl:call-template>
-                               <xsl:apply-templates select="m:apply[1]/*[2]"/>
-                               <br/>
-                       <xsl:call-template name="make_indent">
-                               <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-                               </xsl:call-template>
-                       <xsl:text>.</xsl:text>
-                               <xsl:apply-templates select="*[3]">
-                        <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                               </xsl:apply-templates>
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:apply-templates mode="inline" select="."/>
-               </xsl:otherwise>
-     </xsl:choose>
-     </xsl:when>
-
-
-       <!-- SO_APPLY -->
-
-       <xsl:when test="$name='so_apply'">
-       <xsl:choose>
-               <xsl:when test="$charlength  > $framewidth">
-               <xsl:text>(</xsl:text>
-               <xsl:apply-templates select="*[position()=2]">
-                <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-               </xsl:apply-templates>
-                       <xsl:for-each select="*[position()>2]">
-                       <br/>
-                       <xsl:call-template name="make_indent">
-                               <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:call-template>
-                       <xsl:apply-templates select=".">
-                               <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-               </xsl:for-each>
-               <xsl:text>)</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-               <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      
-      <!-- APP -->
-      <xsl:when test="$name='app'">
-               <xsl:choose>
-               <xsl:when test="$charlength  > $framewidth">
-         <!-- NuPRL rendering -->
-         <xsl:apply-templates select="*[position()=2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-         </xsl:apply-templates>
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-         </xsl:call-template>
-         <xsl:if test="count(*) &gt; 2">
-          <xsl:text>(</xsl:text>
-          <xsl:for-each select="*[position() &gt; 2]">
-           <br/>
-           <xsl:call-template name="make_indent">
-            <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-           </xsl:call-template>
-           <xsl:apply-templates select="." mode="inline"/>
-           <xsl:if test="not(position() = last())">
-            <xsl:text>,</xsl:text>
-           </xsl:if>
-          </xsl:for-each>
-          <xsl:text>)</xsl:text>
-         </xsl:if>
-                <!-- CIC rendering
-               <xsl:text>(</xsl:text>
-               <xsl:apply-templates select="*[position()=2]">
-                <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-               </xsl:apply-templates>
-                       <xsl:for-each select="*[position()>2]">
-                       <br/>
-                       <xsl:call-template name="make_indent">
-                       <xsl:with-param name="current_indent" select="$current_indent + 2"/>         
-                       </xsl:call-template>
-                       <xsl:apply-templates select=".">
-                       <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-                       </xsl:apply-templates>
-               </xsl:for-each>
-               <xsl:text>)</xsl:text>
-                -->
-       </xsl:when>
-       <xsl:otherwise>
-               <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      
-      <xsl:when test="$name='cast'">
-       <xsl:choose>
-        <xsl:when test="$showcast = 1">
-         <xsl:choose>
-          <xsl:when test="$charlength > $framewidth">
-           <xsl:text>(</xsl:text>
-           <xsl:apply-templates select="*[position()=2]">
-            <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-           </xsl:apply-templates><br/>
-           <xsl:call-template name="make_indent">
-            <xsl:with-param name="current_indent" select="$current_indent + 2"/>   
-          </xsl:call-template>
-           <xsl:text>:</xsl:text>
-           <xsl:apply-templates select="*[position()=3]">
-            <xsl:with-param name="current_indent" select="$current_indent + 3"/>
-           </xsl:apply-templates>
-           <xsl:text>)</xsl:text>
-          </xsl:when>
-          <xsl:otherwise>
-           <xsl:apply-templates mode="inline" select="."/>
-          </xsl:otherwise>
-         </xsl:choose>
-        </xsl:when>
-        <xsl:otherwise>
-         <xsl:apply-templates select="*[position()=2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <xsl:when test="$name='Prop'">
-       <xsl:text>Prop</xsl:text>
-      </xsl:when>
-      <xsl:when test="$name='Set'">
-       <xsl:text>Set</xsl:text>
-      </xsl:when>
-      <xsl:when test="$name='Type'">
-       <xsl:text>Type</xsl:text>
-      </xsl:when>
-      <xsl:when test="$name='mutcase'">
-       <xsl:choose>
-       <xsl:when test="$charlength > $framewidth">
-         <xsl:text>&lt;</xsl:text>
-         <xsl:apply-templates select="*[position()=2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-         </xsl:apply-templates>
-         <xsl:text>&gt; </xsl:text>
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>           </xsl:call-template>
-         <xsl:text>CASE </xsl:text>
-         <xsl:apply-templates select="*[position()=3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 8"/>
-         </xsl:apply-templates>
-         <xsl:text> OF </xsl:text> 
-         <xsl:for-each select="m:piecewise/m:piece">
-    <!--   <xsl:for-each select="*[position() mod 2 = 0 and position()>3]">-->
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-         </xsl:call-template> 
-            <xsl:choose>
-            <xsl:when test="position() = 1">
-             <xsl:text>&#x00A0;&#x00A0;</xsl:text>
-            </xsl:when>
-            <xsl:otherwise>
-             <xsl:text>| </xsl:text>
-            </xsl:otherwise>
-            </xsl:choose>
-          <xsl:apply-templates select="./*[2]"/>
-            <xsl:call-template name="mksymbol">
-             <xsl:with-param name="symbol" select="$RightArrow"/>
-             <xsl:with-param name="color" select="'green'"/>
-             <xsl:with-param name="size" select="'+0'"/>
-            </xsl:call-template>
-            <xsl:variable name="body_size">
-  <xsl:apply-templates 
-              select="./*[1]/*[1]" mode="charcount"/>
-            </xsl:variable>
-            <xsl:choose>
-             <xsl:when test="$body_size > $framewidth">
-              <br/>
-              <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" 
-                    select="$current_indent + 8"/>   
-              </xsl:call-template>
-<xsl:apply-templates 
-                   select="./*[1]">
-              <xsl:with-param name="current_indent" 
-                   select="$current_indent + 8"/>      
-             </xsl:apply-templates>
-            </xsl:when>
-            <xsl:otherwise>
-     <xsl:apply-templates select="./*[1]"
-                   mode="inline" />
-            </xsl:otherwise>
-           </xsl:choose>
-         </xsl:for-each>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="."/> 
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- FIX -->
-      <xsl:when test="$name='fix'">
-       <xsl:choose>
-       <xsl:when test="$charlength  > $framewidth">
-            <xsl:text>FIX</xsl:text>
-            <xsl:value-of select="m:ci"/>
-            <xsl:text>{</xsl:text> 
-            <xsl:for-each select="m:bvar"> 
-              <br/>
-              <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/>  
-              </xsl:call-template>
-              <xsl:value-of select="m:ci"/>
-              <xsl:text>:</xsl:text>
-              <xsl:apply-templates select="m:type">
-               <xsl:with-param name="current_indent" 
-                    select="$current_indent + 5 + string-length(m:ci)"/>
-               </xsl:apply-templates>
-              <br/>
-              <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/>       
-              </xsl:call-template>
-              <xsl:text>:=</xsl:text> 
-              <xsl:apply-templates select="following-sibling::*[position() = 1]">
-               <xsl:with-param name="current_indent" select="$current_indent +2"/>
-              </xsl:apply-templates>
-            </xsl:for-each>
-             <br/>
-              <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/>       
-              </xsl:call-template> 
-           <xsl:text>}</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when> 
-      <!-- COFIX -->
-      <xsl:when test="$name='cofix'">
-       <xsl:choose>
-       <xsl:when test="($charlength + 10) > $framewidth">
-            <xsl:text>COFIX</xsl:text>
-            <xsl:value-of select="m:ci"/>
-            <xsl:text>{</xsl:text>
-            <br/>
-            <xsl:call-template name="make_indent">
-             <xsl:with-param name="current_indent" select="$current_indent + 2"/>       
-            </xsl:call-template>
-            <xsl:for-each select="m:bvar"> 
-                <xsl:value-of select="m:ci"/>
-                <xsl:text>:</xsl:text>
-                <xsl:apply-templates select="m:type">
-                 <xsl:with-param name="current_indent" 
-                    select="$current_indent + 5 + string-length(m:ci)"/>
-                </xsl:apply-templates>
-                <br/> 
-                <xsl:call-template name="make_indent">
-                 <xsl:with-param name="current_indent" select="$current_indent + 2"/>       
-                </xsl:call-template>
-                <xsl:text>:=</xsl:text>
-                <xsl:apply-templates select="following-sibling::*[position() = 1]">
-                 <xsl:with-param name="current_indent" select="$current_indent + 3"/>
-                </xsl:apply-templates>
-            </xsl:for-each>
-            <br/>
-              <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/>       
-              </xsl:call-template>
-            <xsl:text>}</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="m:type"/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <xsl:when test="$name='let_in'">
-       <xsl:text>let&#x00a0;</xsl:text>
-       <xsl:apply-templates select="m:bvar/m:ci"/>
-       <xsl:text>&#x00a0;:=&#x00a0;</xsl:text>
-       <xsl:apply-templates select="*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent+14"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:text>in&#x00a0;</xsl:text>
-       <xsl:apply-templates select="*[4]">
-        <xsl:with-param name="current_indent" select="$current_indent+5"/>
-       </xsl:apply-templates>
-      </xsl:when>
-
-      <!-- ***************************************** -->
-      <!-- *********** PROOF ELEMENTS ************** -->
-      <!-- ***************************************** -->
-      <!-- PROOF -->
-      <xsl:when test="$name='proof'">
-       <xsl:variable name="nonce" select="generate-id()"/>
-       <xsl:variable name="freshid1" select="concat('a',$nonce)"/>
-       <xsl:variable name="freshid2" select="concat('b',$nonce)"/>
-       <xsl:variable name="freshid3" select="concat('c',$nonce)"/>
-       <span ID="{$freshid1}">
-        <xsl:apply-templates select="*[position()=2]">
-         <xsl:with-param name="current_indent" select="$current_indent"/>
-        </xsl:apply-templates>
-        &#x00a0;
-       </span>
-       <xsl:choose>
-        <xsl:when test="(preceding-sibling::*[1]/text()='letin1') or
-                        (preceding-sibling::*[1]/text()='rw_step') or
-                        (name(..)='m:lambda')">
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:call-template>
-         <FONT color="red">we proved&#x00a0;</FONT> 
-        </xsl:when>
-        <xsl:otherwise>
-         <script>
-          if(document.getElementById) {
-           document.write('\
-            <span ID="{$freshid2}">\
-             <a style="text-decoration:underline ; color:green" href="" onClick="Show(document.getElementById(\'{$freshid1}\')); Hide(document.getElementById(\'{$freshid2}\'));Show(document.getElementById(\'{$freshid3}\'));return (0==1);">Proof of</a>\
-            </span>\
-            <span ID="{$freshid3}">\
-             <br/>\
-             <xsl:call-template name="make_indent">
-              <xsl:with-param name="current_indent" select="$current_indent"/>
-             </xsl:call-template>\
-             <a style="text-decoration:underline ; color:red" href="" onClick="Hide(document.getElementById(\'{$freshid1}\')); Show(document.getElementById(\'{$freshid2}\'));Hide(document.getElementById(\'{$freshid3}\'));return (0==1);">we proved</a>\
-            </span>\
-           ');
-           document.to_be_deleted.push('<xsl:value-of select="$freshid1"/>');
-           document.to_be_deleted.push('<xsl:value-of select="$freshid3"/>');
-           document.write('&#x00a0;');
-          } else {
-           document.write('\
-            <br/>\
-            <xsl:call-template name="make_indent">
-             <xsl:with-param name="current_indent" select="$current_indent"/>
-            </xsl:call-template>\
-            <FONT color="red">we proved&#x00a0;</FONT>\
-           ');
-          }
-         </script>
-        </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[position()=3]">
-        <xsl:with-param name="current_indent" select="$current_indent + 16"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- side_proof -->
-      <xsl:when test="$name='side_proof'">
-       <xsl:variable name="nonce" select="generate-id()"/>
-       <xsl:variable name="freshid1" select="concat('a',$nonce)"/>
-       <xsl:variable name="freshid2" select="concat('b',$nonce)"/>
-       <xsl:variable name="freshid3" select="concat('c',$nonce)"/>
-       <xsl:variable name="freshid4" select="concat('d',$nonce)"/>
-       <span ID="{$freshid1}">
-        <xsl:apply-templates select="*[position()=2]">
-         <xsl:with-param name="current_indent" select="$current_indent"/>
-        </xsl:apply-templates>
-        &#x00a0;
-       </span>
-         <script>
-          if(document.getElementById) {
-           document.write('\
-            <span ID="{$freshid2}">\
-             <a style="text-decoration:underline ; color:green" href="" onClick="Show(document.getElementById(\'{$freshid1}\')); Hide(document.getElementById(\'{$freshid2}\'));Show(document.getElementById(\'{$freshid3}\'));Show(document.getElementById(\'{$freshid4}\'));return (0==1);">Justification</a>\
-            </span>\
-            <span ID="{$freshid3}">\
-             <br/>\
-             <xsl:call-template name="make_indent">
-              <xsl:with-param name="current_indent" select="$current_indent"/>
-             </xsl:call-template>\
-             <a style="text-decoration:underline ; color:red" href="" onClick="Hide(document.getElementById(\'{$freshid1}\')); Show(document.getElementById(\'{$freshid2}\'));Hide(document.getElementById(\'{$freshid3}\'));Hide(document.getElementById(\'{$freshid4}\'));return (0==1);">we proved</a>\
-            </span>\
-           ');
-           document.to_be_deleted.push('<xsl:value-of select="$freshid1"/>');
-           document.to_be_deleted.push('<xsl:value-of select="$freshid3"/>');
-           document.to_be_deleted.push('<xsl:value-of select="$freshid4"/>');
-           document.write('&#x00a0;');
-          } else {
-           document.write('\
-            <br/>\
-            <xsl:call-template name="make_indent">
-             <xsl:with-param name="current_indent" select="$current_indent"/>
-            </xsl:call-template>\
-            <FONT color="red">we proved&#x00a0;</FONT>\
-           ');
-          }
-         </script>
-       <span ID="{$freshid4}">
-        <xsl:apply-templates select="*[position()=3]">
-         <xsl:with-param name="current_indent" select="$current_indent + 16"/>
-        </xsl:apply-templates>
-       </span>
-      </xsl:when> 
-      <!-- eq_chain -->
-      <xsl:when test="$name='eq_chain'">
-       <FONT color="red">We have the following equality chain:</FONT>
-       <xsl:for-each select="*[position() mod 2 = 0]">
-        <xsl:variable name="pos" select="position()"/>
-        <br/>
-        <xsl:call-template name="make_indent">
-         <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-        </xsl:call-template>
-        <xsl:choose>
-         <xsl:when test="$pos=1">
-          <xsl:apply-templates select=".">
-           <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-          </xsl:apply-templates>
-          <xsl:text>&#x00a0;=</xsl:text>
-         </xsl:when>
-         <xsl:otherwise>
-          <xsl:text>=&#x00a0;</xsl:text>
-          <xsl:apply-templates select=".">
-           <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-          </xsl:apply-templates>
-         </xsl:otherwise>
-        </xsl:choose>
-        <xsl:if test="$pos != last()">
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 15"/>
-         </xsl:call-template>
-         <xsl:apply-templates select="../*[position()=2*$pos +1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 15"/>
-         </xsl:apply-templates>
-        </xsl:if>
-       </xsl:for-each>
-      </xsl:when>
-       <!-- diseq_chain -->
-      <xsl:when test="$name='diseq_chain'">
-       <FONT color="red">We have the following chain of disequalities:</FONT>
-       <xsl:for-each select="*[position() mod 3 = 2]">
-        <xsl:variable name="pos" select="position()"/>
-        <br/>
-        <xsl:call-template name="make_indent">
-         <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-        </xsl:call-template>
-        <xsl:choose>
-         <xsl:when test="$pos=1">
-          <xsl:apply-templates select=".">
-           <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-          </xsl:apply-templates>
-          <xsl:text>&#x00a0;</xsl:text>
-          <xsl:apply-templates mode="inline" select="../*[position()=3*$pos]"/>
-         </xsl:when>
-         <xsl:otherwise>
-          <xsl:apply-templates mode="inline" select="../*[position()=3*($pos - 1)]"/>
-          <xsl:text>&#x00a0;</xsl:text>
-          <xsl:apply-templates select=".">
-           <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-          </xsl:apply-templates>
-         </xsl:otherwise>
-        </xsl:choose>
-        <xsl:if test="$pos != last()">
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 15"/>
-         </xsl:call-template>
-         <xsl:apply-templates select="../*[position()=3*$pos +1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 15"/>
-         </xsl:apply-templates>
-        </xsl:if>
-       </xsl:for-each>
-      </xsl:when>
-      <!-- letin1 -->
-      <xsl:when test="$name='letin1'">
-       <xsl:apply-templates select="*[position()=2]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:apply-templates select="*[position()=3]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- letin -->
-      <xsl:when test="$name='letin'">
-       <xsl:for-each select="*[position()>1 and last()>position()]">
-        <xsl:apply-templates select=".">
-         <xsl:with-param name="current_indent" select="$current_indent"/>
-        </xsl:apply-templates>
-        <br/>
-        <xsl:call-template name="make_indent">
-         <xsl:with-param name="current_indent" select="$current_indent"/> 
-        </xsl:call-template>
-       </xsl:for-each>
-       <xsl:apply-templates select="*[position()=last()]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- Let -->
-      <xsl:when test="$name='let'">
-       (
-       <xsl:apply-templates select="m:ci"/>
-       )
-       <xsl:apply-templates select="*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent + 7"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- rw_step -->
-      <xsl:when test="$name='rw_step'">
-       <xsl:choose>
-        <xsl:when test="name(*[2])='m:apply'">
-         <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-         <FONT color="red">Consider&#x00a0;</FONT>
-         <xsl:apply-templates select="*[2]"/>
-        </xsl:otherwise>
-       </xsl:choose>
-       <xsl:variable name="charlength_first">
-        <xsl:apply-templates select="*[3]" mode="root_charcount"/>
-       </xsl:variable>
-       <xsl:variable name="charlength_second">
-        <xsl:apply-templates select="*[4]" mode="root_charcount"/>
-       </xsl:variable>
-       <xsl:variable name="charlength_side_proof">
-        <xsl:apply-templates select="*[5]" mode="root_charcount"/>
-       </xsl:variable>
-       <xsl:variable name="split1"
-         select="($charlength_first + $charlength_second) > $framewidth"/>
-       <xsl:variable name="split2"
-         select="($charlength_second + $charlength_side_proof) > $framewidth"/>
-     <!-- <xsl:value-of select="$current_indent"/> -->
-     <!-- <xsl:value-of select="string($charlength_second)"/>  -->
-     <!-- <xsl:value-of select="$charlength_side_proof"/>  -->
-     <!-- <xsl:value-of select="$split2"/>  -->
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">Rewrite&#x00a0;</FONT>
-       <xsl:apply-templates mode="inline" select="*[3]"/>
-       <xsl:text>&#x00a0;</xsl:text>
-       <xsl:if test="$split1">
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-       </xsl:call-template>
-       </xsl:if>
-       <FONT color="red">with&#x00a0;</FONT>
-       <xsl:apply-templates mode="inline" select="*[4]"/>
-       <xsl:text>&#x00a0;</xsl:text>
-       <xsl:if test="$split2">
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-       </xsl:call-template>
-       </xsl:if>
-       <FONT color="red">by&#x00a0;</FONT>
-       <xsl:apply-templates select="*[5]">
-        <xsl:with-param name="current_indent" select="$current_indent+7"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- rewrite and apply -->
-      <xsl:when test="$name='rewrite_and_apply'">
-       <xsl:apply-templates select="*[2]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">Then apply it to&#x00a0;</FONT>
-       <xsl:apply-templates select="*[position()>2]"/>
-      </xsl:when>
-      <!-- by_induction -->
-      <xsl:when test="$name='by_induction'">
-       <FONT color="red">We prove&#x00a0;</FONT>
-       <xsl:apply-templates select="../*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent+18"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">by induction on&#x00a0;</FONT>
-       <xsl:apply-templates select="*[position()=last()]/*[position()=last()]">
-        <xsl:with-param name="current_indent" select="$current_indent+30"/>
-       </xsl:apply-templates>
-       <!-- 
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:text>The induction property is</xsl:text>
-       <br/> 
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:apply-templates select="*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-       -->
-       <xsl:apply-templates 
-            select="*[position()>3 and not(position()=last())]">
-        <xsl:with-param name="current_indent" select="$current_indent+4"/>
-       </xsl:apply-templates>
-       <!-- <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:text>End induction</xsl:text> -->
-      </xsl:when>
-      <!-- inductive_case -->
-      <xsl:when test="$name='inductive_case'">
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">Case&#x00a0;</FONT>
-       <xsl:apply-templates select="*[2]">
-        <xsl:with-param name="current_indent" select="$current_indent +10"/>
-       </xsl:apply-templates>
-       <xsl:if test="*[3]/*[position()>1]">
-        <br/>
-        <xsl:call-template name="make_indent">
-         <xsl:with-param name="current_indent" select="$current_indent+4"/> 
-        </xsl:call-template>
-        <FONT color="red">By induction hypothesis, we have:</FONT>
-        <xsl:for-each select="*[3]/*[position()>1]">
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 4"/> 
-         </xsl:call-template>
-         <xsl:text>(</xsl:text>
-         <xsl:apply-templates select="m:ci"/>
-         <xsl:text>)&#x00a0;</xsl:text>
-         <xsl:apply-templates select="m:type">
-          <xsl:with-param name="current_indent" select="$current_indent + 8"/>
-         </xsl:apply-templates>
-        </xsl:for-each>
-       </xsl:if>
-       <br/>
-        <xsl:call-template name="make_indent">
-         <xsl:with-param name="current_indent" select="$current_indent + 4"/> 
-        </xsl:call-template>
-       <xsl:apply-templates select="*[4]">
-        <xsl:with-param name="current_indent" select="$current_indent +4"/>
-       </xsl:apply-templates>
-       <!-- <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:text>End Case</xsl:text> -->
-      </xsl:when>
-      <!-- case_lhs  -->
-      <xsl:when test="$name='case_lhs'">
-       <xsl:choose>
-        <xsl:when test="count(*)=2">
-         <xsl:apply-templates mode="inline" select="*[2]"/>
-        </xsl:when>
-        <xsl:otherwise>
-         <xsl:text>(</xsl:text>
-         <xsl:apply-templates mode="inline" select="*[2]"/>
-         <xsl:for-each select="m:bvar">
-          <xsl:text>&#x00a0;</xsl:text>
-          <xsl:apply-templates mode="inline" select="*[1]"/>
-          <xsl:text>:</xsl:text>
-          <xsl:apply-templates mode="inline" select="m:type/*[1]"/>
-         </xsl:for-each>
-         <xsl:text>)</xsl:text>
-        </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- false_ind -->
-      <xsl:when test="$name='false_ind'">
-       <xsl:apply-templates select="*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates> 
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template> 
-       <FONT color="red">Contradiction.</FONT>
-      </xsl:when>
-      <!-- and_ind -->
-      <xsl:when test="$name='and_ind'">
-       <xsl:choose>
-        <xsl:when test="name(*[2])='m:apply'">
-         <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>      
-        </xsl:when>
-        <xsl:otherwise>
-         <FONT color="red">Consider&#x00a0;</FONT>
-         <xsl:apply-templates select="*[2]"/>
-        </xsl:otherwise>
-       </xsl:choose>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">In particular, we have</FONT>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       (
-       <xsl:apply-templates select="*[3]"/>
-       )&#x00a0;
-       <xsl:apply-templates select="*[4]">
-        <xsl:with-param name="current_indent" select="$current_indent + 9"/> 
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       (
-       <xsl:apply-templates select="*[5]"/>
-       )&#x00a0;
-       <xsl:apply-templates select="*[6]">
-        <xsl:with-param name="current_indent" select="$current_indent + 9"/> 
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:apply-templates select="*[7]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- full_or_ind -->
-      <xsl:when test="$name='full_or_ind'">
-       <xsl:choose>
-        <xsl:when test="name(*[2])='m:apply'">
-         <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/> 
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-         <FONT color="red">Consider&#x00a0;</FONT>
-         <xsl:apply-templates select="*[2]"/>
-        </xsl:otherwise>
-       </xsl:choose>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">We proceed by cases to prove&#x00a0;</FONT>
-       <xsl:apply-templates select="*[3]"/>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent+4"/> 
-       </xsl:call-template>
-       <FONT color="red">Left: suppose&#x00a0;</FONT>
-       <xsl:text>(</xsl:text>
-       <xsl:value-of select="*[4]/m:bvar/m:ci"/>
-       <xsl:text>)&#x00a0;</xsl:text>
-       <xsl:apply-templates 
-            select="*[4]/m:bvar/m:type/*[1]"/>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent+15"/> 
-       </xsl:call-template>
-       <xsl:apply-templates 
-            select="*[4]/*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent+15"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent+4"/> 
-       </xsl:call-template>
-       <FONT color="red">Right: suppose&#x00a0;</FONT>
-       <xsl:text>(</xsl:text>
-       <xsl:value-of select="*[5]/m:bvar/m:ci"/>
-       <xsl:text>)&#x00a0;</xsl:text>
-       <xsl:apply-templates 
-            select="*[5]/m:bvar/m:type/*[1]"/>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent+16"/> 
-       </xsl:call-template>
-       <xsl:apply-templates 
-            select="*[5]/*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent+16"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- or_ind -->
-      <xsl:when test="$name='or_ind'">
-       <xsl:choose>
-        <xsl:when test="name(*[2])='m:apply'">
-         <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/> 
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-         <FONT color="red">Consider&#x00a0;</FONT>
-         <xsl:apply-templates select="*[2]"/>
-        </xsl:otherwise>
-       </xsl:choose>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">We prove&#x00a0;</FONT>
-       <xsl:apply-templates select="*[3]"/>
-       <FONT color="red">&#x00a0;by cases:</FONT>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       Left:&#x00a0;
-       <xsl:apply-templates select="*[4]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       Right:&#x00a0;
-       <xsl:apply-templates select="*[5]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- Ex_ind -->
-      <xsl:when test="$name='ex_ind'">
-       <xsl:choose>
-        <xsl:when test="name(*[2])='m:apply'">
-         <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-         <FONT color="red">Consider&#x00a0;</FONT>
-         <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:otherwise>
-       </xsl:choose>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">Let&#x00a0;</FONT>
-       <xsl:apply-templates mode="inline" select="*[3]"/>
-       :
-       <xsl:apply-templates mode="inline" select="*[4]"/>
-       <FONT color="red">&#x00a0;such that</FONT>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       (
-       <xsl:apply-templates mode="inline" select="*[5]"/>
-       )
-       <xsl:apply-templates select="*[6]">
-        <xsl:with-param name="current_indent" select="$current_indent +7"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:apply-templates select="*[7]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-      </xsl:when>
-     </xsl:choose>
-</xsl:template>
-
-<!-- LAMBDA -->
-
-<xsl:template match="m:lambda">
-<xsl:param name="current_indent" select="0"/>
-    <xsl:variable name="charlength">
-     <xsl:apply-templates select="*[position()=1]" mode="charcount"/>
-     <!-- <xsl:apply-templates select="." mode="charcount"/> -->
-    </xsl:variable>
-    <!-- <xsl:value-of select="$charlength"/> -->
-    <!-- <xsl:value-of select="$current_indent"/> -->
-     <xsl:choose>
-     <xsl:when test="$charlength > $framewidth">
-       <!-- &#x03bb; -->
-       <xsl:call-template name="mksymbol">
-        <xsl:with-param name="symbol" select="$lambda"/>
-        <xsl:with-param name="color" select="'red'"/>
-        <xsl:with-param name="size" select="'+2'"/>
-       </xsl:call-template>
-       <xsl:apply-templates select="m:bvar/m:ci"/>
-       <xsl:text>:</xsl:text>
-       <xsl:apply-templates select="m:bvar/m:type">
-        <xsl:with-param name="current_indent" 
-           select="$current_indent + 4 + 2*string-length(m:bvar/m:ci)"/>
-       </xsl:apply-templates><br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent + 2"/>       
-       </xsl:call-template>
-       <xsl:text>.</xsl:text>
-       <xsl:apply-templates select="*[position()=2]">
-        <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-       </xsl:apply-templates>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:apply-templates mode="inline" select="."/>
-     </xsl:otherwise>
-     </xsl:choose>
-</xsl:template>
-
-<!-- href -->
-<xsl:template match="m:ci">
- <xsl:choose>
-  <xsl:when test="boolean(@definitionURL)">
-   <a href="{@definitionURL}">
-   <xsl:apply-templates/>
-   </a>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="."/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- CHAR COUNTING -->
-
-<!-- enter this counting mode selecting the root -->
-<xsl:template match="*" mode="root_charcount">
-<xsl:param name="incurrent_length" select="0"/>
- <xsl:choose>
-  <xsl:when test="count(*)=0">
-   <xsl:value-of select="0"/>
-  </xsl:when>
-  <xsl:when test="name()='m:ci'">
-   <xsl:value-of select="string-length()"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:apply-templates select="*[1]" mode="charcount">
-    <xsl:with-param name="incurrent_length" select="$incurrent_length"/>
-   </xsl:apply-templates>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-
-       <!-- CASI PARTICOLARI MODE=INLINE -->
-
-<xsl:template mode="inline" match="m:interval">
-       <FONT color="blue">
-       <xsl:text>[</xsl:text>
-       </FONT>
-       <xsl:apply-templates select="*[1]"/>
-       <xsl:text>, </xsl:text>
-       <xsl:apply-templates select="*[2]"/>
-       <FONT color="blue">
-       <xsl:text>]</xsl:text>
-       </FONT>
-</xsl:template>
-
-<xsl:template mode="inline" match="m:apply[m:in]">
-       <xsl:apply-templates select="*[2]"/>
-       <xsl:text> </xsl:text>
-       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$member"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+0'"/>
-               </xsl:call-template>
-       <xsl:text> </xsl:text>
-       <xsl:apply-templates select="*[3]"/>
-</xsl:template>
-
-<xsl:template mode="inline" match="m:integers">
-       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$integers"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+0'"/>
-               </xsl:call-template>
-</xsl:template>
-
-<xsl:template mode="inline" match="m:naturalnumbers">
-       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$naturalnumbers"/>
-               <xsl:with-param name="size" select="'+0'"/>
-               </xsl:call-template>
-</xsl:template>
-
-<xsl:template mode="inline" match="m:apply[m:implies]">
-       <xsl:text>(</xsl:text>
-       <xsl:apply-templates select="*[2]"/>
-       <xsl:text> </xsl:text>
-       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$implies"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+0'"/>
-               </xsl:call-template>
-       <xsl:text> </xsl:text>
-       <xsl:apply-templates select="*[3]"/>
-       <xsl:text>)</xsl:text>
-</xsl:template>
-
-<xsl:template mode="inline" match="m:apply[m:exists]">
-               <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$exists"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+0'"/>
-       </xsl:call-template>
-       <xsl:apply-templates select="m:bvar/m:ci"/>
-       <xsl:text>:</xsl:text>
-         <xsl:apply-templates select="m:condition/*"/>
-<!-- CSC: old wrong code
-       <xsl:if test="count(m:condition/m:apply/*[3]) > 1">
-               <xsl:text>(</xsl:text>
-       </xsl:if>
-       <xsl:apply-templates select="m:condition/m:apply/*[3]"/>
-       <xsl:if test="count(m:bvar/m:type/m:apply/*[3]) > 1">
-               <xsl:text>)</xsl:text>
-       </xsl:if>
--->
-       <xsl:text>.</xsl:text>
-       <xsl:apply-templates select="*[position()=4]"/>
-
-
-</xsl:template>
-<!--
-<xsl:template mode="inline" match="m:apply/*[m:ci][position()=1]">
-       <xsl:apply-templates select="*[1]"/>
-       <xsl:text>(</xsl:text>
-       <xsl:for-each select="*[position()>1 and position()!=last()]">
-               <xsl:apply-templates/>
-               <xsl:text>, </xsl:text>
-       </xsl:for-each>
-       <xsl:apply-templates select="*[position()=last()]"/>
-       <xsl:text>)</xsl:text>
-</xsl:template>
--->
-<!-- CASI PARTICOLARI NON IN LINE -->
-
-<xsl:template match="m:interval">
-       <FONT color="blue">
-       <xsl:text>[</xsl:text>
-       </FONT>
-       <xsl:apply-templates select="*[1]"/>
-       <xsl:text>, </xsl:text>
-       <xsl:apply-templates select="*[2]"/>
-       <FONT color="blue">
-       <xsl:text>]</xsl:text>
-       </FONT>
-
-
- <!--<xsl:param name="current_indent" select="0"/>
-        <xsl:variable name="charlength">
-        <xsl:apply-templates select="." mode="charcount"/>
-       </xsl:variable>
-       <xsl:choose>
-       <xsl:when test="$charlength > $framewidth">
-       <FONT color="blue">
-       <xsl:text>[</xsl:text>
-       </FONT>
-       <xsl:apply-templates select="*[1]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-       <xsl:text>, </xsl:text>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-        </xsl:call-template>
-       <xsl:apply-templates select="*[2]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-       <FONT color="blue">
-       <xsl:text>]</xsl:text>
-       </FONT>
-       </xsl:when>
-       <xsl:otherwise>
-       </xsl:otherwise>
-       </xsl:choose>-->
-</xsl:template>
-
-<xsl:template match="m:apply[m:in]">
- <xsl:param name="current_indent" select="0"/>
-       <xsl:variable name="charlength">
-        <xsl:apply-templates select="m:in" mode="charcount"/>
-       </xsl:variable>
-       <xsl:choose>
-       <xsl:when test="$charlength > $framewidth">
-       <xsl:apply-templates select="*[2]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-        </xsl:call-template>
-       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$member"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+0'"/>
-               </xsl:call-template>
-       <xsl:text> </xsl:text>
-       <xsl:apply-templates select="*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-</xsl:template>
-
-<xsl:template match="m:integers">
-       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$integers"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+0'"/>
-               </xsl:call-template>
-</xsl:template>
-
-<xsl:template match="m:naturalnumbers">
-       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$naturalnumbers"/>
-               <xsl:with-param name="size" select="'+0'"/>
-               </xsl:call-template>
-</xsl:template>
-
-<xsl:template match="m:apply[m:implies]">
-    <xsl:param name="current_indent" select="0"/>
-       <xsl:variable name="charlength">
-        <xsl:apply-templates select="m:implies" mode="charcount"/>
-       </xsl:variable>
-       <xsl:choose>
-       <xsl:when test="$charlength > $framewidth">
-                       <xsl:text>implies</xsl:text>
-       <xsl:text>(</xsl:text>
-       <xsl:apply-templates select="*[2]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-        </xsl:call-template>
-       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$implies"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+0'"/>
-               </xsl:call-template>
-       <xsl:text> </xsl:text>
-       <xsl:apply-templates select="*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-       <xsl:text>)</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-</xsl:template>
-
-<xsl:template  match="m:apply[m:exists]">
-  <xsl:param name="current_indent" select="0"/>
-       <xsl:variable name="charlength">
-        <xsl:apply-templates select="m:implies" mode="charcount"/>
-       </xsl:variable>
-       <xsl:choose>
-       <xsl:when test="$charlength > $framewidth">
-       <xsl:call-template name="mksymbol">
-               <xsl:with-param name="symbol" select="$exists"/>
-               <xsl:with-param name="color" select="'blue'"/>
-               <xsl:with-param name="size" select="'+0'"/>
-       </xsl:call-template>
-       <xsl:apply-templates select="m:bvar/m:ci"/>
-       <xsl:text>:</xsl:text>
-       <!--<xsl:if test="count(m:condition/m:apply/*[3]) > 1">
-               <xsl:text>(</xsl:text>
-       </xsl:if>-->
-       <xsl:apply-templates select="m:condition/m:apply/*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-       <!--<xsl:if test="count(m:bvar/m:type/m:apply/*[3]) > 1">
-               <xsl:text>)</xsl:text>
-       </xsl:if>-->
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-        </xsl:call-template>
-       <xsl:text>.</xsl:text>
-       <xsl:apply-templates select="*[position()=4]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-</xsl:template>
-
-<!--
-<xsl:template match="m:apply/m:ci">
-       <xsl:apply-templates/>
-       <xsl:text>(</xsl:text>
-       <xsl:for-each select="*[position()>1 and position()!=last()]">
-               <xsl:apply-templates/>
-               <xsl:text>, </xsl:text>
-       </xsl:for-each>
-       <xsl:apply-templates select="*[position()=last()]"/>
-       <xsl:text>)</xsl:text>
-</xsl:template>
--->
-<!-- enter this mode selecting the first child --> 
-
-<xsl:template match="m:ci|m:csymbol|m:implies|m:exists|m:interval|m:in" mode="charcount">
-<xsl:param name="incurrent_length" select="0"/> 
-    <xsl:choose>
-    <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
-     <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length + string-length()"/></xsl:apply-templates></xsl:variable>
-     <xsl:choose>
-     <xsl:when test="string($siblength) = &quot;&quot;">
-      <xsl:value-of select="$incurrent_length + string-length()"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="$incurrent_length + string-length()"/>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template> 
-
-<xsl:template match="*" mode="charcount">
- <xsl:param name="incurrent_length" select="0"/>
- <xsl:choose>
-  <xsl:when test="count(child::*) = 0">
-   <xsl:value-of select="$incurrent_length"/>
-  </xsl:when>
-  <xsl:otherwise>
-    <xsl:variable name="childlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/></xsl:apply-templates></xsl:variable>
-    <xsl:choose>
-     <xsl:when test="$framewidth >= number($childlength)">
-      <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$childlength"/></xsl:apply-templates></xsl:variable>
-      <xsl:choose>
-       <xsl:when test="string($siblength) = &quot;&quot;">
-        <xsl:value-of select="number($childlength)"/>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:value-of select="number($siblength)"/>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($childlength)"/>
-     </xsl:otherwise>
-    </xsl:choose>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-
-<!--***********************************************************************-->
-<!-- OBJECTS                                                               -->
-<!--***********************************************************************-->
-
-<!-- Rule -->
-
-<xsl:template match="Rule">
-<xsl:param name="current_indent" select="0"/>
-    
-    <xsl:variable name="char">
-     <xsl:value-of select="m:apply"/>
-    </xsl:variable>
-    <xsl:variable name="length" select="string-length($char)"/>
-    
-<p>
-<xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-<FONT color="red">Rule: </FONT>
-<xsl:choose>
-       <xsl:when test="m:ci">
-               <FONT color="red">
-               <xsl:apply-templates>
-                 <xsl:with-param name="current_indent" select="$current_indent"/>
-               </xsl:apply-templates>
-               </FONT>
-       </xsl:when>
-       <xsl:otherwise>
-               <xsl:choose>
-               <xsl:when test="$length > $framewidth">
-               <br/>
-               <xsl:call-template name="make_indent">
-                <xsl:with-param name="current_indent" select="$current_indent"/> 
-                </xsl:call-template>
-               <xsl:variable name="char_rule">
-                <xsl:value-of select="m:apply/*[1]"/>
-               </xsl:variable>
-               <xsl:variable name="length_rule" select="string-length($char_rule)"/>
-               <FONT>
-                <xsl:apply-templates select="m:apply/*[1]">
-                 <xsl:with-param name="current_indent" select="$current_indent"/>
-                </xsl:apply-templates>
-                <xsl:if test="count(m:apply/*)>2">
-                <br/>
-                <xsl:call-template name="make_indent">
-                 <xsl:with-param name="current_indent" select="$current_indent + $length_rule"/> 
-                 </xsl:call-template>
-                </xsl:if>
-                <FONT color="red">
-                 <xsl:text> ( </xsl:text>
-                </FONT>
-               </FONT>
-               <xsl:for-each select="m:apply/*[position()!=1]">
-               <xsl:if test="position()!=1">
-               <xsl:call-template name="make_indent">
-                <xsl:with-param name="current_indent" select="$current_indent + $length_rule"/> 
-                </xsl:call-template>
-               </xsl:if>
-               <xsl:choose>
-                       <xsl:when test="*[1]='level-exp'">
-                               <xsl:text>level-exp(</xsl:text>
-                               <xsl:apply-templates select="*[2]">
-                                <xsl:with-param name="current_indent" select="$current_indent"/>
-                               </xsl:apply-templates>
-                               <xsl:text>)</xsl:text>
-                       </xsl:when>
-                       <xsl:when test="m:apply">
-                               <xsl:apply-templates select=".">
-                                <xsl:with-param name="current_indent" select="$current_indent"/>
-                               </xsl:apply-templates>
-                       </xsl:when>
-                       <xsl:otherwise>
-                        <xsl:apply-templates>
-                         <xsl:with-param name="current_indent" select="$current_indent"/>
-                        </xsl:apply-templates>
-                       </xsl:otherwise>
-               </xsl:choose>
-               <xsl:if test="position()!=last()">
-                       <xsl:text>, </xsl:text>
-                       <br/>
-               </xsl:if>
-               </xsl:for-each>
-               <FONT color="red">
-               <xsl:text> )</xsl:text>
-               </FONT>
-
-               </xsl:when>
-               <xsl:otherwise>
-               <FONT>
-               <xsl:apply-templates select="m:apply/*[1]">
-                <xsl:with-param name="current_indent" select="$current_indent"/>
-               </xsl:apply-templates>
-
-               <FONT color="red">
-               <xsl:text> ( </xsl:text>
-               </FONT>
-               </FONT>
-               <xsl:for-each select="m:apply/*[position()!=1]">
-               <xsl:choose>
-                       <xsl:when test="*[1]='level-exp'">
-                               <xsl:text>level-exp(</xsl:text>
-                               <xsl:apply-templates select="*[2]">
-                                <xsl:with-param name="current_indent" select="$current_indent"/>
-                               </xsl:apply-templates>
-                                <xsl:text>)</xsl:text>
-                       </xsl:when>
-                       <xsl:when test="m:apply">
-                               <xsl:apply-templates select=".">
-                                <xsl:with-param name="current_indent" select="$current_indent"/>
-                               </xsl:apply-templates>
-
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:apply-templates>
-                                <xsl:with-param name="current_indent" select="$current_indent"/>
-                               </xsl:apply-templates>
-                       </xsl:otherwise>
-               </xsl:choose>
-               <xsl:if test="position()!=last()">
-                       <xsl:text>, </xsl:text>
-               </xsl:if>
-               </xsl:for-each>
-               <FONT color="red">
-               <xsl:text> )</xsl:text>
-               </FONT>
-               </xsl:otherwise>
-               </xsl:choose>
-       </xsl:otherwise>
-</xsl:choose>
-</p>
-</xsl:template>
-
-<!-- Sequent -->
-
-<xsl:template match="Sequent">
-<xsl:param name="current_indent" select="0"/>
-<xsl:call-template name="make_indent">
- <xsl:with-param name="current_indent" select="$current_indent"/> 
-</xsl:call-template>
-<FONT color="red">Sequent <xsl:value-of select="@id"/></FONT>
-<br/>
-<br/>
-<xsl:for-each select="Decl">
-       <xsl:variable name="num" select="position()"/>
-       <xsl:call-template name="make_indent">
-         <xsl:with-param name="current_indent" select="$current_indent"/> 
-        </xsl:call-template>
-       <xsl:value-of select="$num"/>
-       <xsl:text>) </xsl:text>
-               <xsl:if test="@name">
-                       <FONT color="green">
-                       <xsl:value-of select="@name"/>
-                       <xsl:text>:</xsl:text>
-                       </FONT>
-               </xsl:if>
-               
-               <xsl:apply-templates>
-                <xsl:with-param name="current_indent" select="$current_indent + 10"/>
-               </xsl:apply-templates>
-       <!--<xsl:choose>
-               <xsl:when test="m:apply">
-                       <xsl:apply-templates select=".">
-                        <xsl:with-param name="current_indent" select="$current_indent"/>
-                       </xsl:apply-templates>
-               </xsl:when>
-               <xsl:otherwise>
-                       <xsl:apply-templates>
-                        <xsl:with-param name="current_indent" select="$current_indent"/>
-                       </xsl:apply-templates>
-               </xsl:otherwise>
-       </xsl:choose>-->
-<br/>
- </xsl:for-each>
- <xsl:call-template name="make_indent">
-  <xsl:with-param name="current_indent" select="$current_indent"/> 
- </xsl:call-template>
-
- <FONT color="red" size="+1">|- </FONT>
- <br/>
- <xsl:call-template name="make_indent">
-  <xsl:with-param name="current_indent" select="$current_indent"/> 
- </xsl:call-template>
- <xsl:apply-templates select="Goal/*">
-  <xsl:with-param name="current_indent" select="$current_indent"/>
- </xsl:apply-templates>
-</xsl:template>
-
-<!-- NODE -->
-
-<xsl:template match="Node">
- <xsl:param name="current_indent" select="0"/>
-
-       <xsl:variable name="nonce" select="generate-id()"/>
-       <xsl:variable name="freshid2" select="concat('b',$nonce)"/>
-       <xsl:variable name="freshid3" select="concat('c',$nonce)"/>
-       <xsl:variable name="freshid4" select="concat('d',$nonce)"/>
-       <xsl:variable name="freshid5" select="concat('e',$nonce)"/>
-       <br/>
-       <xsl:apply-templates select="Sequent">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-       <xsl:choose>
-        <xsl:when test="Rule">
-         <xsl:apply-templates select="Rule">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:when test="TacticInstance">
-         <br/>
-         <br/>
-        <span>
-         <xsl:call-template name="make_indent">
-           <xsl:with-param name="current_indent" select="$current_indent"/> 
-          </xsl:call-template>
-          <xsl:text>By </xsl:text>
-          <xsl:apply-templates select="TacticInstance/@name"/>
-          <a style="text-decoration:underline ; color:green" href="{TacticInstance/@uri}">Tactic Details</a>
-          <xsl:if test="$explode_tactics">
-          <span ID="{$freshid4}">
-            <a style="text-decoration:underline ; color:green" href="" onClick="Hide(document.getElementById('{$freshid4}'));Show(document.getElementById('{$freshid5}'));return (0==1);">Details</a>
-           </span>
-          </xsl:if>
-         </span>
-         <xsl:if test="$explode_tactics">
-          <div ID="{$freshid5}">
-          <xsl:call-template name="make_indent">
-            <xsl:with-param name="current_indent" select="$current_indent"/> 
-           </xsl:call-template>
-           <a style="text-decoration:underline ; color:red" href="" onClick="Show(document.getElementById('{$freshid4}'));Hide(document.getElementById('{$freshid5}'));return (0==1);">Hide details</a>
-          <br/>
-          <xsl:apply-templates select="TacticProof">
-                <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-          </xsl:apply-templates>
-          </div>
-         </xsl:if>
-         <br/><br/>
-        </xsl:when>
-       </xsl:choose>
-        <xsl:if test="count(Node)!=0">
-            <xsl:choose> 
-           <xsl:when test="count(Node)=1">
-           <span ID="{$freshid2}">
-            <xsl:call-template name="make_indent">
-              <xsl:with-param name="current_indent" select="$current_indent"/> 
-             </xsl:call-template>
-             <a style="text-decoration:underline ; color:green" href="" onClick="Hide(document.getElementById('{$freshid2}'));Show(document.getElementById('{$freshid3}'));return (0==1);">Subgoal</a>
-            <br/>
-            </span>
-           </xsl:when>
-           <xsl:otherwise>
-           <span ID="{$freshid2}">
-            <xsl:call-template name="make_indent">
-              <xsl:with-param name="current_indent" select="$current_indent"/> 
-             </xsl:call-template>
-             <a style="text-decoration:underline ; color:green" href="" onClick="Hide(document.getElementById('{$freshid2}'));Show(document.getElementById('{$freshid3}'));return (0==1);">Subgoals</a>
-            <br/>
-            </span>
-           </xsl:otherwise>
-           </xsl:choose>
-            <div ID="{$freshid3}">
-            <xsl:call-template name="make_indent">
-              <xsl:with-param name="current_indent" select="$current_indent"/> 
-             </xsl:call-template>
-             <a style="text-decoration:underline ; color:red" href="" onClick="Show(document.getElementById('{$freshid2}'));Hide(document.getElementById('{$freshid3}'));return (0==1);">Back</a>
-            <br/>
-            <xsl:apply-templates select="Node">
-               <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-            </xsl:apply-templates>
-            </div>
-         <script>
-           document.to_be_deleted.push('<xsl:value-of select="$freshid3"/>');
-         </script>
-         </xsl:if>
-</xsl:template>
-
-<!-- NuPRLDefinition -->
-
-<xsl:template match="NuPrlDefinition">
- <xsl:apply-templates select="*[1]"/>
- <xsl:text> := </xsl:text>
- <xsl:apply-templates select="*[2]"/>
-</xsl:template>
-
-<!-- DEFINITION -->
-
-<xsl:template match="Definition">
-<xsl:param name="current_indent" select="0"/>
-<p>
-DEFINITION <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>)<br/>
-TYPE =<br/>
-      <xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent + 7"/> 
-      </xsl:call-template>
-       <xsl:apply-templates select="type/*[1]">
-        <xsl:with-param name="current_indent" select="$current_indent + 7"/>
-       </xsl:apply-templates><br/>
-BODY =<br/>
-      <xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent + 7"/> 
-      </xsl:call-template>
-       <xsl:apply-templates select="body/Node">
-        <xsl:with-param name="current_indent" select="$current_indent + 7"/>
-       </xsl:apply-templates>
-</p>
-</xsl:template>
-
-<!-- AXIOM -->
-
-<xsl:template match="Axiom">
-<xsl:param name="current_indent" select="0"/>
-<p>
-AXIOM <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>)<br/>
-TYPE =<br/>
-      <xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent + 7"/> 
-      </xsl:call-template> 
-<xsl:apply-templates select="type/*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 7"/>
-       </xsl:apply-templates>
-</p>
-</xsl:template>
-
-<!-- UNFINISHED PROOF -->
-
-<xsl:template match="CurrentProof">
-<xsl:param name="current_indent" select="0"/>
-<p>
-UNFINISHED PROOF <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>)<br/>
-THESIS:  <xsl:apply-templates select="type/*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 8"/>
-         </xsl:apply-templates><br/>
-CONJECTURES: 
-      <xsl:for-each select="Conjecture">
-      <br/>
-      <xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent + 8"/> 
-      </xsl:call-template>
-      <xsl:for-each select="Decl|Def|Hidden">
-       <xsl:choose>
-        <xsl:when test="name(.)='Decl'">
-         <xsl:choose>
-          <xsl:when test="@name">
-           <xsl:value-of select="@name"/>
-          </xsl:when>
-          <xsl:otherwise>
-           <xsl:text>_</xsl:text>
-          </xsl:otherwise>
-         </xsl:choose>
-         <xsl:text> : </xsl:text>
-         <xsl:apply-templates select="./*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:when test="name(.)='Def'">
-         <xsl:choose>
-          <xsl:when test="@name">
-           <xsl:value-of select="@name"/>
-          </xsl:when>
-          <xsl:otherwise>
-           <xsl:text>_</xsl:text>
-          </xsl:otherwise>
-         </xsl:choose>
-         <xsl:text> := </xsl:text>
-         <xsl:apply-templates select="./*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-         <xsl:text> _ :? _ </xsl:text>
-        </xsl:otherwise>
-       </xsl:choose>
-      </xsl:for-each>
-      |- <xsl:value-of select="./@no"/> : 
-      <xsl:apply-templates select="./Goal/*[1]">
-       <xsl:with-param name="current_indent" select="$current_indent + 11"/>
-      </xsl:apply-templates>
-      </xsl:for-each> 
-      <br/>
-PROOF:
-      <xsl:apply-templates select="body/*[1]">
-        <xsl:with-param name="current_indent" select="$current_indent + 8"/>
-      </xsl:apply-templates>
-</p>
-</xsl:template>
-
-<!-- MUTUAL INDUCTIVE DEFINITION -->
-
-<xsl:template match="InductiveDefinition">
-<xsl:param name="current_indent" select="0"/>
-<p>
-     <xsl:for-each select="InductiveType">
-         <xsl:choose>
-         <xsl:when test="position() = 1">
-          <xsl:choose>
-          <xsl:when test="string(./@inductive) = &quot;true&quot;">
-          INDUCTIVE DEFINITION 
-          </xsl:when>
-          <xsl:otherwise>
-          COINDUCTIVE DEFINITION 
-          </xsl:otherwise>
-          </xsl:choose>  
-         </xsl:when>
-         <xsl:otherwise>
-          AND 
-         </xsl:otherwise>
-         </xsl:choose>
-         <xsl:value-of select="./@name"/>(<xsl:if test="string(../Params) != &quot;&quot;"><xsl:value-of select="../Params"/></xsl:if>)
-         [
-          <xsl:if test="string(../Param) != &quot;&quot;">         
-           <xsl:for-each select="../Param">
-            <xsl:value-of select="./@name"/>
-            :
-            <xsl:apply-templates select="*"/>
-           </xsl:for-each>
-          </xsl:if>
-         ] <br/>
-         OF ARITY 
-         <xsl:apply-templates select="./arity/*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 9"/>
-         </xsl:apply-templates> <br/>
-         BUILT FROM:
-      <xsl:for-each select="./Constructor">
-      <br/>
-      <xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent + 3"/> 
-      </xsl:call-template>
-         <xsl:choose>
-         <xsl:when test="position() = 1">
-         <xsl:text>&#x00A0;&#x00A0;</xsl:text>
-         </xsl:when>
-         <xsl:otherwise>
-         <xsl:text>| </xsl:text>
-         </xsl:otherwise>
-         </xsl:choose>
-         <xsl:value-of select="./@name"/>
-         <xsl:text>: </xsl:text>
-         <xsl:apply-templates select="./*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2*string-length(./@name) + 5"/>
-         </xsl:apply-templates>
-      </xsl:for-each>
-     </xsl:for-each>
-</p>
-</xsl:template>
-
-<!-- VARIABLE -->
-
-<xsl:template match="Variable">
-<xsl:param name="current_indent" select="0"/>
-<p>
-VARIABLE <xsl:value-of select="@name"/><br/>
-TYPE = <xsl:apply-templates select="type/*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 7"/>
-       </xsl:apply-templates>
-<xsl:if test="body">
-<br/>
-BODY = <xsl:apply-templates select="body/*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 7"/>
-       </xsl:apply-templates>
-</xsl:if>
-</p>
-</xsl:template>
-
-<!--***********************************************************************-->
-<!-- SECTIONS                                                              -->
-<!--***********************************************************************-->
-
-<!-- SECTION -->
-
-<xsl:template match="SECTION">
-<xsl:param name="current_indent" select="0"/>
- <h1>BEGIN OF SECTION</h1>
-  <xsl:apply-templates/>
- <h1>END OF SECTION</h1>
-</xsl:template>
-
-</xsl:stylesheet> 
diff --git a/helm/nuprl_stylesheets/nuprl_expand.xsl b/helm/nuprl_stylesheets/nuprl_expand.xsl
deleted file mode 100644 (file)
index c31b479..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<xsl:key name="sequent" use="m:mtr/m:mtd/m:mrow/m:mtext/text()" match="m:mtable[starts-with(m:mtr/m:mtd/m:mrow/m:mtext/text(),'Sequent (')]"/>
-
-<xsl:template match="/">
-    <xsl:apply-templates select="*"/>
-</xsl:template>
-
-<xsl:template match="m:mi">
- <xsl:param name="sequentno" select="'/..'"/>
-    <xsl:choose>
-    <xsl:when test="contains(.,'%')">
-    <xsl:variable name="var" select="."/>
-     <m:maction actiontype="toggle">
-      <m:mi mathcolor="green"><xsl:value-of select="."/></m:mi>
-      <m:mrow>
-       <m:mi mathcolor="green"><xsl:value-of select="$var"/>: </m:mi>
-       <xsl:call-template name="look_for_decl">
-        <xsl:with-param name="csequent" select="$sequentno"/>
-        <xsl:with-param name="var" select="$var"/>
-       </xsl:call-template>
-      </m:mrow>
-     </m:maction>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:copy>
-      <xsl:apply-templates select="@*|node()"/>
-     </xsl:copy>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-<xsl:template match="m:mtable[starts-with(m:mtr/m:mtd/m:mrow/m:mtext/text(),'Sequent')]">
- <xsl:copy>
-  <xsl:variable name="text" select="m:mtr/m:mtd/m:mrow/m:mtext/text()"/>
-  <xsl:variable name="tmp1" select="substring-after($text,'Sequent (')"/>
-  <xsl:variable name="tmp2" select="substring-before($tmp1,')')"/>
-  <xsl:apply-templates select="*|@*|text()">
-   <xsl:with-param name="sequentno" select="$tmp2"/>
-  </xsl:apply-templates>
- </xsl:copy>
-</xsl:template>
-
-<xsl:template match="*|@*|text()">
- <xsl:param name="sequentno" select="'/..'"/> 
- <xsl:copy>
-  <xsl:apply-templates select="*|@*|text()">
-   <xsl:with-param name="sequentno" select="$sequentno"/>
-  </xsl:apply-templates>
- </xsl:copy>
-</xsl:template>
-
-<xsl:template name="look_for_decl">
-   <xsl:param name="csequent" select="/.."/>
-   <xsl:param name="var" select="''"/>
-   <xsl:param name="result" select="0"/>
-   <xsl:choose>
-   <xsl:when test="$csequent=''">
-        <m:mi>
-        ERROR
-       </m:mi>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:variable name="sect_table" select="key('sequent',concat('Sequent (',$csequent,')'))"/>
-    <xsl:variable name="check_res" select="$sect_table/m:mtr/m:mtable/m:mtr/m:mtd/m:mrow/m:mo[text()=$var]/following-sibling::*[2]"/>
-     <xsl:choose>
-     <xsl:when test="not ($check_res)">
-      <xsl:variable name="new_sequent">
-       <xsl:call-template name="truncate">
-        <xsl:with-param name="tail" select="$csequent"/>
-       </xsl:call-template>
-      </xsl:variable>
-      <xsl:call-template name="look_for_decl">
-       <xsl:with-param name="csequent" select="$new_sequent"/>
-       <xsl:with-param name="var" select="$var"/>
-      </xsl:call-template>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:copy-of select="$check_res"/>
-     </xsl:otherwise>
-     </xsl:choose>
-   </xsl:otherwise>
-   </xsl:choose>
-</xsl:template>
-
-<xsl:template name="truncate">
- <xsl:param name="tail" select="''"/>
- <xsl:param name="head" select="''"/>
- <xsl:choose>
- <xsl:when test="substring-before($tail,' ')=''">
-  <xsl:value-of select="$head"/>
- </xsl:when>
- <xsl:otherwise>
-  <xsl:variable name="head1">
-   <xsl:if test="$head !=''">
-    <xsl:value-of select="concat($head,' ')"/>
-   </xsl:if>
-  </xsl:variable>
-  <xsl:call-template name="truncate">
-   <xsl:with-param name="tail" select="substring-after($tail,' ')"/>
-   <xsl:with-param name="head" select="concat($head1,substring-before($tail,' '))"/>
-  </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-</xsl:stylesheet>
diff --git a/helm/nuprl_stylesheets/nuprl_html_arith.xsl b/helm/nuprl_stylesheets/nuprl_html_arith.xsl
deleted file mode 100644 (file)
index 74cec30..0000000
+++ /dev/null
@@ -1,650 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!-- HELM 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.            -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:i="http://www.cs.unibo.it/helm/InputNotationalElements" xmlns:o="http://www.cs.unibo.it/helm/OutputNotationalElements" version="1.0">
-<!-- HTML SYMBOLS  -->
-<!--leq-->
-  <xsl:variable name="leq">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xA3;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x2264;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--lt-->
-  <xsl:variable name="lt">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&lt;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&lt; </xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--geq-->
-  <xsl:variable name="geq">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xB3;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x2265;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--gt-->
-  <xsl:variable name="gt">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&gt;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&gt;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--plus-->
-  <xsl:variable name="plus">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">+</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">+</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--minus-->
-  <xsl:variable name="minus">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">-</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">-</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--times-->
-  <xsl:variable name="times">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">*</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x2217;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--min-->
-  <xsl:variable name="min" select="'min'"/>
-<!--abs-->
-  <xsl:variable name="abs" select="'|'"/>
-<!-- LESS EQUAL -->
-  <xsl:template match="m:apply[m:leq[count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <a href="{m:leq/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($leq)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$leq"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>leq</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>)</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- LESS EQUAL (INLINE MODE) -->
-  <xsl:template match="m:apply[m:leq[count(*) = 0] and count(*) = 3]" mode="inline">
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:leq/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($leq)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$leq"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>leq</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>)</xsl:text>
-  </xsl:template>
-<!-- LESS EQUAL (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:leq[count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- LESS THAN -->
-  <xsl:template match="m:apply[m:lt[count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <a href="{m:lt/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($lt)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$lt"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>lt</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>)</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- LESS THAN (INLINE MODE) -->
-  <xsl:template match="m:apply[m:lt[count(*) = 0] and count(*) = 3]" mode="inline">
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:lt/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($lt)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$lt"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>lt</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>)</xsl:text>
-  </xsl:template>
-<!-- LESS THAN (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:lt[count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- GREATER EQUAL -->
-  <xsl:template match="m:apply[m:geq[count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <a href="{m:geq/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($geq)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$geq"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>geq</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>)</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- GREATER EQUAL (INLINE MODE) -->
-  <xsl:template match="m:apply[m:geq[count(*) = 0] and count(*) = 3]" mode="inline">
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:geq/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($geq)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$geq"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>geq</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>)</xsl:text>
-  </xsl:template>
-<!-- GREATER EQUAL (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:geq[count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- GREATER THAN -->
-  <xsl:template match="m:apply[m:gt[count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <a href="{m:gt/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($gt)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$gt"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>gt</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>)</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- GREATER THAN (INLINE MODE) -->
-  <xsl:template match="m:apply[m:gt[count(*) = 0] and count(*) = 3]" mode="inline">
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:gt/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($gt)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$gt"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>gt</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>)</xsl:text>
-  </xsl:template>
-<!-- GREATER THAN (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:gt[count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- PLUS -->
-  <xsl:template match="m:apply[m:plus[count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <a href="{m:plus/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($plus)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$plus"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>plus</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>)</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- PLUS (INLINE MODE) -->
-  <xsl:template match="m:apply[m:plus[count(*) = 0] and count(*) = 3]" mode="inline">
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:plus/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($plus)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$plus"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>plus</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>)</xsl:text>
-  </xsl:template>
-<!-- PLUS (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:plus[count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- MINUS -->
-  <xsl:template match="m:apply[m:minus[count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <a href="{m:minus/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($minus)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$minus"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>minus</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>)</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- MINUS (INLINE MODE) -->
-  <xsl:template match="m:apply[m:minus[count(*) = 0] and count(*) = 3]" mode="inline">
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:minus/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($minus)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$minus"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>minus</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>)</xsl:text>
-  </xsl:template>
-<!-- MINUS (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:minus[count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- TIMES -->
-  <xsl:template match="m:apply[m:times[count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <a href="{m:times/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($times)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$times"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>times</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>)</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- TIMES (INLINE MODE) -->
-  <xsl:template match="m:apply[m:times[count(*) = 0] and count(*) = 3]" mode="inline">
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:times/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($times)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$times"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>times</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>)</xsl:text>
-  </xsl:template>
-<!-- TIMES (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:times[count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- MIN -->
-  <xsl:template match="m:apply[m:min[count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <a href="{m:min/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($min)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$min"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>min</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:text>{</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>,</xsl:text>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>}</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- MIN (INLINE MODE) -->
-  <xsl:template match="m:apply[m:min[count(*) = 0] and count(*) = 3]" mode="inline">
-    <a href="{m:min/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($min)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$min"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>min</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:text>{</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <xsl:text>,</xsl:text>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>}</xsl:text>
-  </xsl:template>
-<!-- MIN (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:min[count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 4"/>
-  </xsl:template>
-<!-- MINUS -->
-  <xsl:template match="m:apply[m:minus[count(*) = 0] and count(*) = 2]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <a href="{m:minus/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($minus)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$minus"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>minus</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[2]">
-      <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-    </xsl:apply-templates>
-  </xsl:template>
-<!-- MINUS (INLINE MODE) -->
-  <xsl:template match="m:apply[m:minus[count(*) = 0] and count(*) = 2]" mode="inline">
-    <a href="{m:minus/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($minus)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$minus"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>minus</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-  </xsl:template>
-<!-- MINUS (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:minus[count(*) = 0] and count(*) = 2]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 1"/>
-  </xsl:template>
-<!-- ABSOLUTE VALUE -->
-  <xsl:template match="m:apply[m:abs[count(*) = 0] and count(*) = 2]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <a href="{m:abs/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($abs)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$abs"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>abs</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[2]">
-      <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-    </xsl:apply-templates>
-    <a href="{m:abs/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($abs)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$abs"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>abs</xsl:otherwise>
-      </xsl:choose>
-    </a>
-  </xsl:template>
-<!-- ABSOLUTE VALUE (INLINE MODE) -->
-  <xsl:template match="m:apply[m:abs[count(*) = 0] and count(*) = 2]" mode="inline">
-    <a href="{m:abs/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($abs)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$abs"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>abs</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:abs/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($abs)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$abs"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>abs</xsl:otherwise>
-      </xsl:choose>
-    </a>
-  </xsl:template>
-<!-- ABSOLUTE VALUE (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:abs[count(*) = 0] and count(*) = 2]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 2"/>
-  </xsl:template>
-</xsl:stylesheet>
diff --git a/helm/nuprl_stylesheets/nuprl_html_basic.xsl b/helm/nuprl_stylesheets/nuprl_html_basic.xsl
deleted file mode 100644 (file)
index 58478b6..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!-- HELM 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.            -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:i="http://www.cs.unibo.it/helm/InputNotationalElements" xmlns:o="http://www.cs.unibo.it/helm/OutputNotationalElements" version="1.0">
-<!-- HTML SYMBOLS  -->
-<!--and-->
-  <xsl:variable name="and">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xD9;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x2227;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--or-->
-  <xsl:variable name="or">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xDA;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x2228;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--iff-->
-  <xsl:variable name="iff">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xDB;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x21D4;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--not-->
-  <xsl:variable name="not">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xD8;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#xAC;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--eq-->
-  <xsl:variable name="eq">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">=</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">=</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--neq-->
-  <xsl:variable name="neq">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">&#xB9;</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x2260;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!--exists-->
-  <xsl:variable name="exists">
-    <xsl:choose>
-      <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">$</xsl:when>
-      <xsl:when test="$UNICODEvsSYMBOL = 'unicode'">&#x2203;</xsl:when>
-      <xsl:otherwise>???</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-<!-- AND -->
-  <xsl:template match="m:apply[m:and[count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <a href="{m:and/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($and)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$and"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>and</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>)</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- AND (INLINE MODE) -->
-  <xsl:template match="m:apply[m:and[count(*) = 0] and count(*) = 3]" mode="inline">
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:and/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($and)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$and"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>and</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>)</xsl:text>
-  </xsl:template>
-<!-- AND (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:and[count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- OR -->
-  <xsl:template match="m:apply[m:or[count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <a href="{m:or/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($or)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$or"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>or</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>)</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- OR (INLINE MODE) -->
-  <xsl:template match="m:apply[m:or[count(*) = 0] and count(*) = 3]" mode="inline">
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:or/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($or)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$or"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>or</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>)</xsl:text>
-  </xsl:template>
-<!-- OR (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:or[count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- IFF -->
-  <xsl:template match="m:apply[m:csymbol[text() = 'iff' and count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <a href="{m:csymbol/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($iff)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$iff"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>iff</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>)</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- IFF (INLINE MODE) -->
-  <xsl:template match="m:apply[m:csymbol[text() = 'iff' and count(*) = 0] and count(*) = 3]" mode="inline">
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:csymbol/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($iff)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$iff"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>iff</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>)</xsl:text>
-  </xsl:template>
-<!-- IFF (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:csymbol[text() = 'iff' and count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- NOT -->
-  <xsl:template match="m:apply[m:not[count(*) = 0] and count(*) = 2]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <a href="{m:not/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($not)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$not"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>not</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[2]">
-      <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-    </xsl:apply-templates>
-  </xsl:template>
-<!-- NOT (INLINE MODE) -->
-  <xsl:template match="m:apply[m:not[count(*) = 0] and count(*) = 2]" mode="inline">
-    <a href="{m:not/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($not)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$not"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>not</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-  </xsl:template>
-<!-- NOT (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:not[count(*) = 0] and count(*) = 2]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 1"/>
-  </xsl:template>
-<!-- EQUALITY and TYPE EQUALITY -->
-  <xsl:template match="m:apply[m:eq[count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <a href="{m:eq/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($eq)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$eq"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>eq</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>)</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- EQUALITY and TYPE EQUALITY (INLINE MODE) -->
-  <xsl:template match="m:apply[m:eq[count(*) = 0] and count(*) = 3]" mode="inline">
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:eq/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($eq)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$eq"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>eq</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>)</xsl:text>
-  </xsl:template>
-<!-- EQUALITY and TYPE EQUALITY (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:eq[count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- NOT-EQ and NOT-EQT -->
-  <xsl:template match="m:apply[m:neq[count(*) = 0] and count(*) = 3]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <a href="{m:neq/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($neq)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$neq"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>neq</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:apply-templates select="*[3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>)</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- NOT-EQ and NOT-EQT (INLINE MODE) -->
-  <xsl:template match="m:apply[m:neq[count(*) = 0] and count(*) = 3]" mode="inline">
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates select="*[2]" mode="inline"/>
-    <a href="{m:neq/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($neq)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$neq"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>neq</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:apply-templates select="*[3]" mode="inline"/>
-    <xsl:text>)</xsl:text>
-  </xsl:template>
-<!-- NOT-EQ and NOT-EQT (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:neq[count(*) = 0] and count(*) = 3]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- EXIST -->
-  <xsl:template match="m:apply[m:exists[count(*) = 0] and m:bvar/m:ci[count(*) = 0] and m:condition[count(*) = 1] and count(*) = 4]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <a href="{m:exists/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($exists)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$exists"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>exists</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:value-of select="m:bvar/m:ci/text()"/>
-        <xsl:text>:</xsl:text>
-        <xsl:apply-templates select="m:condition/*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <xsl:text>.</xsl:text>
-        <xsl:apply-templates select="*[4]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- EXIST (INLINE MODE) -->
-  <xsl:template match="m:apply[m:exists[count(*) = 0] and m:bvar/m:ci[count(*) = 0] and m:condition[count(*) = 1] and count(*) = 4]" mode="inline">
-    <a href="{m:exists/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($exists)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$exists"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>exists</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:value-of select="m:bvar/m:ci/text()"/>
-    <xsl:text>:</xsl:text>
-    <xsl:apply-templates select="m:condition/*[1]" mode="inline"/>
-    <xsl:text>.</xsl:text>
-    <xsl:apply-templates select="*[4]" mode="inline"/>
-  </xsl:template>
-<!-- EXIST (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:exists[count(*) = 0] and m:bvar/m:ci[count(*) = 0] and m:condition[count(*) = 1] and count(*) = 4]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-<!-- EXIST -->
-  <xsl:template match="m:apply[m:exists[count(*) = 0] and m:bvar/m:ci[count(*) = 0] and m:condition[count(*) = 1] and count(*) = 4]">
-    <xsl:param name="current_indent" select="0"/>
-    <xsl:param name="width" select="$framewidth"/>
-    <xsl:variable name="charlength">
-      <xsl:apply-templates select="." mode="root_charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="$width &gt;= $charlength">
-        <xsl:apply-templates select="." mode="inline"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <a href="{m:exists/@definitionURL}">
-          <xsl:choose>
-            <xsl:when test="boolean($exists)">
-              <xsl:call-template name="mksymbol">
-                <xsl:with-param name="symbol" select="$exists"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>exists</xsl:otherwise>
-          </xsl:choose>
-        </a>
-        <xsl:value-of select="m:bvar/m:ci/text()"/>
-        <xsl:text>:</xsl:text>
-        <xsl:apply-templates select="m:condition/*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <BR/>
-        <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <xsl:text>.</xsl:text>
-        <xsl:apply-templates select="*[4]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-<!-- EXIST (INLINE MODE) -->
-  <xsl:template match="m:apply[m:exists[count(*) = 0] and m:bvar/m:ci[count(*) = 0] and m:condition[count(*) = 1] and count(*) = 4]" mode="inline">
-    <a href="{m:exists/@definitionURL}">
-      <xsl:choose>
-        <xsl:when test="boolean($exists)">
-          <xsl:call-template name="mksymbol">
-            <xsl:with-param name="symbol" select="$exists"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>exists</xsl:otherwise>
-      </xsl:choose>
-    </a>
-    <xsl:value-of select="m:bvar/m:ci/text()"/>
-    <xsl:text>:</xsl:text>
-    <xsl:apply-templates select="m:condition/*[1]" mode="inline"/>
-    <xsl:text>.</xsl:text>
-    <xsl:apply-templates select="*[4]" mode="inline"/>
-  </xsl:template>
-<!-- EXIST (CHARCOUNT MODE) -->
-  <xsl:template match="m:apply[m:exists[count(*) = 0] and m:bvar/m:ci[count(*) = 0] and m:condition[count(*) = 1] and count(*) = 4]" mode="root_charcount">
-    <xsl:param name="incurrent_length" select="0"/>
-    <xsl:value-of select="$incurrent_length + 3"/>
-  </xsl:template>
-</xsl:stylesheet>
diff --git a/helm/nuprl_stylesheets/nuprl_link.xsl b/helm/nuprl_stylesheets/nuprl_link.xsl
deleted file mode 100644 (file)
index 849e06c..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm"
-                              xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!--***********************************************************************--> 
-<!-- From MathML presentation or HTML to themselves with links             -->
-<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena                      -->
-<!-- First draft: March 16 2001, Irene Schena                              -->
-<!--***********************************************************************--> 
-
-<xsl:import href="nuprl_links_library.xsl"/>
-
-<xsl:key name="id" use="@id" match="m:*"/>
-
-<xsl:param name="URLs_or_URIs" select="'URLs'"/>
-
-<xsl:template match = "m:semantics">
-   <xsl:apply-templates select="*[1]" mode="semantics"/>
-</xsl:template>
-
-<!-- Discharging content markup mantaining the linking info (helm:xref and 
-xlink:href) -->
-<xsl:template match = "*" mode="semantics">
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:if test="@xref">
-    <xsl:variable name="cnode" select="key('id',@xref)"/>
-    <xsl:if test="$cnode/@definitionURL"> 
-     <xsl:attribute name="xlink:href">
-      <xsl:choose>
-       <xsl:when test="$URLs_or_URIs = 'URLs'">
-        <xsl:call-template name="makeURL"><xsl:with-param name="uri" select="$cnode/@definitionURL"/></xsl:call-template>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:value-of select="$cnode/@definitionURL"/> 
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:attribute>
-    <!-- xlink:show='other' requires the exact modality to be -->
-    <!-- specified in non-xlink markup. The point is that the -->
-    <!-- element is already MathML ==> we can't add other     -->
-    <!-- markup without introducing another new namespace.    -->
-    <!-- So, for now no markup is used.                       -->
-     <xsl:attribute name="xlink:show">other</xsl:attribute>
-    </xsl:if>
-    <xsl:if test="$cnode/@helm:xref">
-     <xsl:attribute name="helm:xref">
-      <xsl:value-of select="$cnode/@helm:xref"/>
-     </xsl:attribute>
-    </xsl:if> 
-   </xsl:if>
-   <xsl:apply-templates mode="semantics"/>
-  </xsl:copy>
-</xsl:template>
-
-<!-- _top to refresh the whole frameset (avoids the matrioska effect ;-) -->
-<!-- a[@href] doesn't match with every anchor elements!!!                -->
-<xsl:template match="*[@href]">
-   <xsl:copy>
-    <xsl:copy-of select="@*"/> 
-    <xsl:choose>
-    <xsl:when test="starts-with(@href,&quot;nuprl:&quot;)">
-     <xsl:attribute name="href">
-      <xsl:call-template name="makeURL">
-       <xsl:with-param name="uri" select="@href"/>
-      </xsl:call-template>
-     </xsl:attribute>
-     <xsl:attribute name="target">cic</xsl:attribute>
-    </xsl:when>
-    <xsl:when test="starts-with(@href,&quot;theory:&quot;)">
-     <xsl:attribute name="href">
-      <xsl:call-template name="makeTheoryURL">
-       <xsl:with-param name="uri" select="@href"/>
-      </xsl:call-template>
-     </xsl:attribute>
-     <xsl:attribute name="target">theory</xsl:attribute>
-    </xsl:when>
-    <xsl:when test="starts-with(@href,&quot;#&quot;)">
-     <xsl:attribute name="href"><xsl:value-of  select="@href"/></xsl:attribute>
-     <xsl:if test="@target">
-      <xsl:attribute name="target"><xsl:value-of select="@target"/></xsl:attribute>
-     </xsl:if>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:attribute name="href"><xsl:value-of  select="@href"/></xsl:attribute>
-     <xsl:attribute name="target">_blank</xsl:attribute>
-    </xsl:otherwise>
-    </xsl:choose>
-    <xsl:apply-templates/>
-   </xsl:copy>
-</xsl:template>
-
-<xsl:template match = "/|*">
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:apply-templates/>
-  </xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet> 
diff --git a/helm/nuprl_stylesheets/nuprl_links_library.xsl b/helm/nuprl_stylesheets/nuprl_links_library.xsl
deleted file mode 100644 (file)
index 29426a3..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!--***********************************************************************--> 
-<!-- auxiliary functions                                                   -->
-<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena                      -->
-<!--***********************************************************************--> 
-
-<!--      * is used for objects                      -->
-<!--    th* is used for theories                     -->
-<!-- embed* is used for objects embedded in theories -->
-
-<xsl:param name="getterURL" select="'http://localhost:8081/'"/>
-<xsl:param name="processorURL" select="'http://localhost:8080/helm/servlet/uwobo/'"/>
-<xsl:param name="draw_graphURL" select="'http://localhost:8083/'"/>
-<xsl:param name="uri_set_queueURL" select="'http://localhost:8084/'"/>
-<xsl:param name="proofcheckerURL" select="'http://localhost:48084/'"/>
-<!-- URL to the frameset (control + output) -->
-<xsl:param name="topurl" select="''"/>
-<xsl:param name="interfaceURL" select="''"/>
-<xsl:param name="thinterfaceURL" select="''"/>
-
-<xsl:param name="keys" select="'C1,HC2,L'"/>
-<xsl:param name="embedkeys" select="'TC1,HC2,L'"/>
-<xsl:param name="thkeys" select="'T1,T2,L,E'"/>
-
-<xsl:param name="naturalLanguage" select="'yes'"/>
-<xsl:param name="annotations" select="'no'"/>
-<xsl:param name="UNICODEvsSYMBOL" select="'symbol'"/>
-
-<xsl:param name="media-type" select="'text/html'"/>
-<xsl:param name="thmedia-type" select="'text/html'"/>
-<xsl:param name="doctype-public" select="'-//W3C//DTD XHTML 1.0 Transitional//EN'"/>
-<xsl:param name="encoding" select="'iso-8859-1'"/>
-<xsl:param name="thencoding" select="'iso-8859-1'"/>
-
-
-<xsl:template name="quote">
- <xsl:param name="s" select="''"/>
- <xsl:param name="news" select="''"/>
- <xsl:choose>
-  <xsl:when test="$s = ''"><xsl:value-of select="$news"/></xsl:when>
-  <xsl:otherwise>
-   <xsl:variable name="char" select="substring($s,1,1)"/>
-   <xsl:choose>
-    <xsl:when test="$char = ' '">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%20')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = '&amp;'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%26')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = '?'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%3F')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = '='">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%3D')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = '%'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%25')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = ','">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%2C')"/>
-     </xsl:call-template>
-    </xsl:when>
-<!--CSC: This breaks all the rest ;-)
-    <xsl:when test="$char = ':'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%3A')"/>
-     </xsl:call-template>
-    </xsl:when>
--->
-    <xsl:otherwise>
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,$char)"/>
-     </xsl:call-template>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:variable name="absPath">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s"><xsl:value-of select="$getterURL"/>getxml?uri=</xsl:with-param>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="escaped-doctype-public">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$doctype-public"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="escaped-processorURL">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$processorURL"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="escaped-getterURL">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$getterURL"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="escaped-interfaceURL">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$interfaceURL"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="escaped-topurl">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$topurl"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="escaped-thinterfaceURL">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$thinterfaceURL"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedthkeys">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$thkeys"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedembedkeys">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$embedkeys"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedkeys">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$keys"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedquotedkeys">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$quotedkeys"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedquotedthkeys">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$quotedthkeys"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedquotedembedkeys">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$quotedembedkeys"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="header0"><xsl:value-of select="$interfaceURL"/>?url=</xsl:variable>
-<xsl:variable name="thheader0"><xsl:value-of select="$thinterfaceURL"/>?url=</xsl:variable>
-<xsl:variable name="header1"><xsl:value-of select="$escaped-processorURL"/>apply?keys=</xsl:variable>
-<xsl:variable name="bothheader2">&#x26;param.naturalLanguage=<xsl:value-of select="$naturalLanguage"/>&#x26;param.proofcheckerURL=<xsl:value-of select="$proofcheckerURL"/>&#x26;param.draw_graphURL=<xsl:value-of select="$draw_graphURL"/>&#x26;param.uri_set_queueURL=<xsl:value-of select="$uri_set_queueURL"/>&#x26;param.UNICODEvsSYMBOL=<xsl:value-of select="$UNICODEvsSYMBOL"/>&#x26;param.annotations=<xsl:value-of select="$annotations"/>&#x26;prop.doctype-public=<xsl:value-of select="$escaped-doctype-public"/>&#x26;param.doctype-public=<xsl:value-of select="$escaped-doctype-public"/>&#x26;param.encoding=<xsl:value-of select="$encoding"/>&#x26;param.media-type=<xsl:value-of select="$media-type"/>&#x26;param.keys=<xsl:value-of select="$quotedkeys"/>&#x26;param.getterURL=<xsl:value-of select="$escaped-getterURL"/>&#x26;param.processorURL=<xsl:value-of select="$escaped-processorURL"/>&#x26;param.interfaceURL=<xsl:value-of select="$escaped-interfaceURL"/>&#x26;param.topurl=<xsl:value-of select="$escaped-topurl"/>&#x26;xmluri=<xsl:value-of select="$absPath"/></xsl:variable>
-<xsl:variable name="header2">&#x26;prop.media-type=<xsl:value-of select="$media-type"/>&#x26;prop.encoding=<xsl:value-of select="$encoding"/></xsl:variable>
-<xsl:variable name="thheader2">&#x26;prop.media-type=<xsl:value-of select="$thmedia-type"/>&#x26;param.thmedia-type=<xsl:value-of select="$thmedia-type"/>&#x26;param.thkeys=<xsl:value-of select="$quotedthkeys"/>&#x26;param.embedkeys=<xsl:value-of select="$quotedembedkeys"/>&#x26;param.thinterfaceURL=<xsl:value-of select="$escaped-thinterfaceURL"/>&#x26;param.thencoding=<xsl:value-of select="$thencoding"/>&#x26;prop.encoding=<xsl:value-of select="$thencoding"/></xsl:variable>
-
-<xsl:variable name="quotedheader1">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$header1"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedbothheader2">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$bothheader2"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedheader2">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$header2"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedthheader2">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$thheader2"/>
- </xsl:call-template>
-</xsl:variable>
-
-<!-- makeURL() maps URIs into URLs               -->
-<!-- The target of the URL is the whole frameset -->
-
-<xsl:variable name="biquotedfixedheader">
- <xsl:value-of select="$header0"/>
- <xsl:value-of select="$quotedheader1"/>
- <xsl:value-of select="$quotedquotedkeys"/>
- <xsl:value-of select="$quotedheader2"/>
- <xsl:value-of select="$quotedbothheader2"/>
-</xsl:variable>
-
-<xsl:variable name="biquotedthfixedheader">
- <xsl:value-of select="$thheader0"/>
- <xsl:value-of select="$quotedheader1"/>
- <xsl:value-of select="$quotedquotedthkeys"/>
- <xsl:value-of select="$quotedthheader2"/>
- <xsl:value-of select="$quotedbothheader2"/>
-</xsl:variable>
-
-<!-- NOTE: embedkeys and thkeys are propagated, but we are sure that -->
-<!-- they won't never be used.                                       -->
-<!--CSC: fixare il punto sopra!!! -->
-<!-- type, instead, is not propagated                                -->
-<xsl:template name="makeURL">
-<xsl:param name="uri" select="''"/>
- <xsl:variable name="uri_after_sharp" select="substring-after($uri,'#')"/>
- <xsl:variable name="cleanuri">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">
-    <xsl:value-of select="substring-before($uri,'#')"/>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:value-of select="$uri"/>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <xsl:variable name="sharpsuffix">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">%23<xsl:value-of select="$uri_after_sharp"/></xsl:when>
-   <xsl:otherwise></xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
-  <!-- CIC CODE removed -->
-  <!-- NuPRL CODE -->
-     <xsl:text>http://mowgli.cs.unibo.it:58080/apply?keys=NT,NC2,NL&amp;prop.doctype-public=&amp;prop.media-type=text/html&amp;param.doctype-public=&amp;param.encoding=&amp;param.media-type=text/html&amp;param.CICURI=cic:/CICURI.con&amp;param.naturalLanguage=yes&amp;param.annotations=no&amp;param.topurl=http://helm.cs.unibo.it/helm&amp;param.UNICODEvsSYMBOL=</xsl:text>
-     <xsl:value-of select="$UNICODEvsSYMBOL"/>
-     <xsl:text>&amp;xmluri=</xsl:text>
-     <xsl:call-template name="quote">
-      <!-- The hard-coded getterURL -->
-      <xsl:with-param name="s" select="'http://mowgli.cs.unibo.it:58081/getxml?uri='"/>
-     </xsl:call-template>
-     <xsl:value-of select="$cleanuri"/>
-     <xsl:value-of select="$sharpsuffix"/>
-</xsl:template>
-
-<xsl:template name="makeTheoryURL">
-<xsl:param name="uri" select="''"/>
- <xsl:variable name="uri_after_sharp" select="substring-after($uri,'#')"/>
- <xsl:variable name="cleanuri">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">
-    <xsl:value-of select="substring-before($uri,'#')"/>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:value-of select="$uri"/>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <xsl:variable name="sharpsuffix">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">%23<xsl:value-of select="$uri_after_sharp"/></xsl:when>
-   <xsl:otherwise></xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
-     <xsl:value-of select="$biquotedthfixedheader"/>
-     <xsl:value-of select="$cleanuri"/>%26param.CICURI%3D<xsl:value-of select="$cleanuri"/>
-     <xsl:value-of select="$sharpsuffix"/>
-</xsl:template>
-
-<!-- makeURL4embedding() maps URIs into URLs              -->
-<!-- The target of the URL is only the processed document -->
-
-<xsl:template name="makeURL4embedding">
-<xsl:param name="uri" select="''"/>
-<xsl:param name="type" select="'standalone'"/>
- <xsl:variable name="uri_after_sharp" select="substring-after($uri,'#')"/>
- <xsl:variable name="cleanuri">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">
-    <xsl:value-of select="substring-before($uri,'#')"/>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:value-of select="$uri"/>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <xsl:variable name="sharpsuffix">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">%23<xsl:value-of select="$uri_after_sharp"/></xsl:when>
-   <xsl:otherwise></xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <xsl:value-of select="$header1"/>
- <xsl:value-of select="$quotedembedkeys"/>
- <xsl:value-of select="$header2"/>
- <xsl:value-of select="$bothheader2"/>
- <xsl:value-of select="$cleanuri"/>&#x26;param.CICURI=<xsl:value-of select="$cleanuri"/>&#x26;param.type=<xsl:value-of select="$type"/><xsl:value-of select="$sharpsuffix"/>
-</xsl:template>
-
-<!-- makeURL4InnerTypes() maps URIs into URLs              -->
-<!-- The target of the URL is only the processed document -->
-
-<xsl:template name="makeURL4InnerTypes">
-<xsl:param name="uri" select="''"/>
- <xsl:variable name="uri_after_sharp" select="substring-after($uri,'#')"/>
- <xsl:variable name="cleanuri">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">
-    <xsl:value-of select="substring-before($uri,'#')"/>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:value-of select="$uri"/>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <xsl:variable name="sharpsuffix">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">%23<xsl:value-of select="$uri_after_sharp"/></xsl:when>
-   <xsl:otherwise></xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <xsl:value-of select="$header1"/>d_c&#x26;param.getterURL=<xsl:value-of select="$escaped-getterURL"/>&#x26;param.CICURI=<xsl:value-of select="$cleanuri"/>&#x26;xmluri=<xsl:value-of select="$absPath"/><xsl:value-of select="$cleanuri"/>
- <xsl:value-of select="$sharpsuffix"/>
-</xsl:template>
-
-</xsl:stylesheet> 
diff --git a/helm/nuprl_stylesheets/nuprl_mmlextension.xsl b/helm/nuprl_stylesheets/nuprl_mmlextension.xsl
deleted file mode 100644 (file)
index f6c1590..0000000
+++ /dev/null
@@ -1,3046 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- Extension to the XSLT version 0.07 of MathML content to presentation: -->
-<!-- First draft: February 19 2000, Andrea Asperti, Irene Schena           -->
-<!-- Revised: March 3 2000, Irene Schena                                   -->
-<!-- Revised: March 15 2000, Claudio Sacerdoti Coen, Irene Schena          -->
-<!-- Revised: March 21 2000, Irene Schena                                  -->
-<!--***********************************************************************--> 
-
-<!-- NOTE: the namespace declaration has to be done in the stylesheets 
-which generates the toplevel element (see for instance xlink) -->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm"
-                              xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!-- OLD: <xsl:import href="mml2mmlv1_0.xsl"/> -->
-
-<xsl:import href="mmlnotation.xsl"/>
-
-<xsl:import href="mmltheoryextension.xsl"/>
-
-<xsl:key name="sequent_number" use="@id" match="Sequent"/>
-
-<xsl:param name="explodeall" select="false()"/>
-
-<!--***********************************************************************-->
-<!-- Parameter affecting line-breaking                                     -->
-<!--***********************************************************************-->
-
-<xsl:variable name="framewidth" select="35"/> 
-
-<!--***********************************************************************-->
-<!-- Gli oggetti sono stampati come mtext all'interno di una marca toplevel-->
-<!-- math ma al di fuori di semantics. Ora vi sono tanti semantics quanti  -->
-<!-- sono i termini: la presentation per un termine e' generata come primo -->
-<!-- figlio di un semantics e l'originario content viene inserito nel      -->
-<!-- nel secondo figlio di semantics, annotation-xml                       -->
-<!--***********************************************************************-->
-
-<!--**********************-->
-<!--        OBJECTS       -->
-<!--**********************-->
-
-
-<!--<xsl:key name="variable" use="@name" match="Decl"/> -->
-
-<xsl:param name="type" select="'standalone'"/>
-
-<xsl:template match="/">
- <xsl:choose>
-  <xsl:when test="$type = 'standalone'">
-   <xsl:apply-templates select="*"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <to_be_embedded>
-    <xsl:apply-templates select="*"/>
-   </to_be_embedded>
-  </xsl:otherwise> 
- </xsl:choose>
-</xsl:template>
-
-
-<!-- NODE -->
-
- <xsl:template match="Node">
-     <xsl:choose>
-      <xsl:when test="count(Node)=0">    <!-- E' una foglia -->
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left" stretchy="false">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="red">Sequent <xsl:apply-templates select="Sequent/@id"/>
-          </m:mtext>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       <m:mtr>
-        <xsl:if test="*[Decl]">
-         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-          <xsl:for-each select="Sequent/Decl">
-           <m:mtr columnalign="left">
-            <m:mtd columnalign="left">
-             <m:mrow>
-             <xsl:variable name="num" select="position()"/>
-             <m:mtext>
-              <xsl:value-of select="$num"/>)
-             </m:mtext>
-              <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-             <xsl:if test="@name">
-              <m:mo mathcolor="green"><xsl:value-of select="@name"/></m:mo>
-              <m:mo mathcolor="green" stretchy="false">:</m:mo>
-             </xsl:if>
-              <xsl:apply-templates select="."/>
-            </m:mrow>
-            </m:mtd>
-           </m:mtr>
-          </xsl:for-each>
-         </m:mtable>
-        </xsl:if>
-       </m:mtr>
-        <m:mtr>
-         <m:mrow>
-          <m:mtext mathcolor="red" mathvariant="bold">|-</m:mtext>
-         </m:mrow>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-         <xsl:apply-templates select="Sequent/Goal"/>
-         </m:mtd>
-        </m:mtr>
-       <m:mtr>
-        <m:mtd>
-         <m:mrow>
-          <m:mo mathcolor="red">Rule: </m:mo>
-          <xsl:choose>
-          <xsl:when test="Rule[m:apply]">
-           <m:mo mathcolor="brown"><xsl:value-of select="Rule/m:apply/m:ci"/></m:mo>
-          </xsl:when>
-          <xsl:when test="count(Rule)=0">
-           <m:mi>NESSUNA REGOLA</m:mi>
-          </xsl:when>
-          <xsl:otherwise>
-           <m:mo mathcolor="brown"><xsl:value-of select="Rule/m:ci"/></m:mo>
-          </xsl:otherwise>
-          </xsl:choose>
-         </m:mrow>
-        </m:mtd>
-        </m:mtr>
-       <m:mspace height="1ex"/>
-       </m:mtable>
-      </xsl:when>
-     
-     <xsl:otherwise>   <!--E' un nodo -->
-     <m:mtable equalrows="false" columnalign="left">
-      <m:mtr>
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left" stretchy="false">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="red">Sequent <xsl:apply-templates select="Sequent/@id"/>
-          </m:mtext>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       <m:mtr>
-        <xsl:if test="*[Decl]">
-         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-          <xsl:for-each select="Sequent/Decl">
-           <m:mtr columnalign="left">
-            <m:mtd columnalign="left">
-             <m:mrow>
-             <xsl:variable name="num" select="position()"/>
-             <m:mtext>
-              <xsl:value-of select="$num"/>)
-             </m:mtext>
-              <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-             <xsl:if test="@name">
-              <m:mo mathcolor="green"><xsl:value-of select="@name"/></m:mo>
-              <m:mo mathcolor="green" stretchy="false">:</m:mo>
-             </xsl:if>
-              <xsl:apply-templates select="."/>
-            </m:mrow>
-            </m:mtd>
-           </m:mtr>
-          </xsl:for-each>
-         </m:mtable>
-        </xsl:if>
-       </m:mtr>
-        <m:mtr>
-         <m:mrow>
-          <m:mtext mathcolor="red" mathvariant="bold">|-</m:mtext>
-         </m:mrow>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-         <xsl:apply-templates select="Sequent/Goal"/>
-         </m:mtd>
-        </m:mtr>
-       <m:mtr>
-        <m:mtd>
-         <m:mrow>
-          <m:mo mathcolor="red">Rule: </m:mo>
-          <xsl:choose>
-          <xsl:when test="Rule[m:apply]">
-           <m:mo mathcolor="brown"><xsl:value-of select="Rule/m:apply/m:ci"/></m:mo>
-          </xsl:when>
-          <xsl:when test="count(Rule)=0">
-           <m:mi>NESSUNA REGOLA</m:mi>
-          </xsl:when>
-          <xsl:otherwise>
-           <m:mo mathcolor="brown"><xsl:value-of select="Rule/m:ci"/></m:mo>
-          </xsl:otherwise>
-          </xsl:choose>
-         </m:mrow>
-        </m:mtd>
-        </m:mtr>
-       </m:mtable>
-      </m:mtr>
-      <m:mtr>
-       <m:maction>
-        <xsl:choose>
-       <xsl:when test="count(Node)=1">
-         <m:mi mathcolor="blue" mathvariant="script">Subgoal</m:mi>
-       </xsl:when>
-       <xsl:otherwise>
-         <m:mi mathcolor="blue" mathvariant="script">Subgoals</m:mi>
-       </xsl:otherwise>
-       </xsl:choose>
-        <m:mrow>
-        <m:mspace width="1em"/>
-         <m:mtable equalrows="false" columnalign="left">
-         <xsl:for-each select="Node">
-          <m:mtr>
-           <xsl:apply-templates select="."/>
-          </m:mtr>
-          <m:mspace height="1ex"/>
-         </xsl:for-each>
-        </m:mtable>
-       </m:mrow>
-       </m:maction>
-      </m:mtr>
-     </m:mtable>
-     </xsl:otherwise>
-     </xsl:choose>
-</xsl:template>
-
-
-<!-- NuPRLDefinition -->
-
-<xsl:template match="NuPrlDefinition">
- <m:math>
-  <m:mrow>
-   <xsl:apply-templates select="*[1]"/>
-   <m:mo> := </m:mo>
-   <xsl:apply-templates select="*[2]"/>
-  </m:mrow>
- </m:math>
-</xsl:template>
-
-<!-- DEFINITION -->
-
-<xsl:template match="Definition">
-    <m:math>
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>DEFINITION <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>) OF TYPE</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="type/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>AS</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="body/Node"/>   <!-- body/*[1]"/>-->
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-     </m:mtable>
-    </m:math>
-</xsl:template>
-
-<!-- AXIOM -->
-
-<xsl:template match="Axiom">
-    <m:math>
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>AXIOM <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>) OF TYPE</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="type/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-     </m:mtable>
-    </m:math>
-</xsl:template>
-
-<!-- UNFINISHED PROOF -->
-
-<xsl:template match="CurrentProof">
-    <m:math>
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>UNFINISHED PROOF <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>)</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>THESIS:</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="type/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>CONJECTURES:</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <xsl:for-each select="Conjecture">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow helm:xref="{@helm:xref}">
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:for-each select="Decl|Def|Hidden">
-          <xsl:choose>
-           <xsl:when test="name(.)='Decl'">
-            <m:mrow helm:xref="{@helm:xref}">
-             <xsl:choose>
-              <xsl:when test="@name">
-               <m:mi><xsl:value-of select="@name"/></m:mi>
-              </xsl:when>
-              <xsl:otherwise>
-               <m:mi>_</m:mi>
-              </xsl:otherwise>
-             </xsl:choose>
-             <m:mo>:</m:mo>
-             <xsl:apply-templates select="./*[1]"/>
-            </m:mrow>
-           </xsl:when>
-           <xsl:when test="name(.)='Def'">
-            <m:mrow helm:xref="{@helm:xref}">
-             <xsl:choose>
-              <xsl:when test="@name">
-               <m:mi><xsl:value-of select="@name"/></m:mi>
-              </xsl:when>
-              <xsl:otherwise>
-               <m:mi>_</m:mi>
-              </xsl:otherwise>
-             </xsl:choose>
-             <m:mo>:=</m:mo>
-             <xsl:apply-templates select="./*[1]"/>
-            </m:mrow>
-           </xsl:when>
-           <xsl:otherwise>
-            <m:mrow helm:xref="{@helm:xref}">
-             <m:mi>_</m:mi>
-             <m:mo>:?</m:mo>
-             <m:mi>_</m:mi>
-            </m:mrow>
-           </xsl:otherwise>
-          </xsl:choose>
-          <xsl:if test="not (position() = last())">
-           <m:mo>;</m:mo>
-          </xsl:if>
-         </xsl:for-each>
-         <m:mo>|-</m:mo>
-         <m:msub><m:mi>?</m:mi><m:mn><xsl:value-of select="@no"/></m:mn></m:msub>
-         <m:mo>:</m:mo>
-         <xsl:apply-templates select="./Goal/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      </xsl:for-each>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>PROOF:</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="body/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-     </m:mtable>
-    </m:math>
-</xsl:template>
-
-<!-- MUTUAL INDUCTIVE DEFINITION -->
-
-<xsl:template match="InductiveDefinition">
-    <m:math>
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
-     <xsl:for-each select="InductiveType">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <xsl:choose>
-         <xsl:when test="position() = 1">
-          <xsl:choose>
-          <xsl:when test="string(./@inductive) = &quot;true&quot;">
-           <m:mtext>INDUCTIVE DEFINITION</m:mtext>
-          </xsl:when>
-          <xsl:otherwise>
-           <m:mtext>COINDUCTIVE DEFINITION</m:mtext>
-          </xsl:otherwise>
-          </xsl:choose>  
-         </xsl:when>
-         <xsl:otherwise>
-          <m:mtext>AND</m:mtext>
-         </xsl:otherwise>
-         </xsl:choose>
-         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-         <m:mtext><xsl:value-of select="./@name"/>(<xsl:if test="string(../Params) != &quot;&quot;"><xsl:value-of select="../Params"/></xsl:if>)</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow> 
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <m:mtext>[</m:mtext>
-         <xsl:choose>
-         <xsl:when test="string(../Param) != &quot;&quot;">         
-          <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-           <xsl:for-each select="../Param">
-            <m:mtr>
-             <m:mtd>
-              <m:mrow>   
-               <m:mi><xsl:value-of select="./@name"/></m:mi>
-               <m:mo>:</m:mo>
-               <xsl:apply-templates select="*"/>
-              </m:mrow>
-             </m:mtd>
-            </m:mtr>
-           </xsl:for-each>
-            <m:mtr>
-             <m:mtd>
-              <m:mrow>
-               <m:mtext>]</m:mtext>
-              </m:mrow>
-             </m:mtd>
-            </m:mtr>
-          </m:mtable>
-         </xsl:when>
-         <xsl:otherwise>
-          <m:mtext>]</m:mtext>
-         </xsl:otherwise>
-         </xsl:choose>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>OF ARITY</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="./arity/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>BUILT FROM</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <xsl:for-each select="./Constructor">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <xsl:choose>
-         <xsl:when test="position() = 1">
-          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         </xsl:when>
-         <xsl:otherwise>
-          <m:mtext>|</m:mtext>
-          <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-         </xsl:otherwise>
-         </xsl:choose>
-         <m:mtext><xsl:value-of select="./@name"/> OF</m:mtext>
-         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-         <xsl:apply-templates select="./*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      </xsl:for-each>
-     </xsl:for-each>
-     </m:mtable>
-    </m:math>
-</xsl:template>
-
-<!-- VARIABLE -->
-
-<xsl:template match="Variable">
-    <m:math>
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>VARIABLE <xsl:value-of select="@name"/> OF TYPE</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="type/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <xsl:if test="name(*[1])='body'">
-       <m:mtr>
-        <m:mtd>
-         <m:mrow>
-          <m:mtext>AS</m:mtext>
-         </m:mrow>
-        </m:mtd>
-       </m:mtr>
-       <m:mtr>
-        <m:mtd>
-         <m:mrow>
-          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-          <xsl:apply-templates select="body/*[1]"/>
-         </m:mrow>
-        </m:mtd>
-       </m:mtr>
-      </xsl:if>
-     </m:mtable>
-    </m:math>
-</xsl:template>        
-               
-
-
-<!-- SEQUENT -->
-<!--
-<xsl:template match="Sequent">
- <xsl:variable name="rowlines">
-  <xsl:for-each select="Decl|Def">
-   <xsl:if test="position() != last()">
-    <xsl:text>none </xsl:text>
-   </xsl:if>
-  </xsl:for-each>
-  <xsl:text>solid</xsl:text>
- </xsl:variable>
- <xsl:variable name="no" select="@no"/>
-    <m:math>
-     <m:mi><xsl:text>?</xsl:text><xsl:value-of select="$no"/></m:mi>
-     <m:mo>:</m:mo>
-     <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}" rowlines="{$rowlines}">
-      <xsl:for-each select="Decl|Def">
-       <m:mtr>
-        <m:mtd>
-         <m:mrow helm:xref="{@helm:xref}">
-          <m:mi><xsl:value-of select="@name"/></m:mi>
-          <xsl:choose>
-           <xsl:when test="name(.) = 'Decl'">
-            <m:mo>:</m:mo>
-           </xsl:when>
-           <xsl:otherwise>
-            <m:mo>:=</m:mo>
-           </xsl:otherwise>
-          </xsl:choose>
-          <xsl:apply-templates select="*[1]"/>
-         </m:mrow>
-        </m:mtd>
-       </m:mtr>
-      </xsl:for-each>
-      <xsl:if test="not(Decl|Def)">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      </xsl:if>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <xsl:apply-templates select="Goal/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-     </m:mtable>
-    </m:math>
-</xsl:template>-->
-
-<!--**********************-->
-<!--        TERMS         -->
-<!--**********************-->
-
-<xsl:template match="m:bvar">
- <xsl:choose>
-  <xsl:when test="m:type">
-   <xsl:variable name="charlength">
-    <xsl:apply-templates select="m:ci" mode="charcount"/>
-   </xsl:variable>
-   <xsl:choose>
-    <xsl:when test="$charlength >= $framewidth">
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <xsl:apply-templates select="m:ci"/>
-         <m:mo>:</m:mo>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <xsl:apply-templates select="m:type"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-     </m:mtable>
-    </xsl:when>
-    <xsl:otherwise>
-     <m:mrow>
-      <xsl:apply-templates select="m:ci"/>
-      <m:mo>:</m:mo>
-      <xsl:apply-templates select="m:type"/>
-     </m:mrow>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:apply-templates select="m:ci"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template match="m:apply[m:implies]">
-    <xsl:variable name="charlength"><xsl:apply-templates select="m:implies" mode="charcount"/></xsl:variable>
-      <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[2]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>&#8658;</m:mo>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates select="*[2]"/>
-        <m:mo>&#8658;</m:mo>
-        <xsl:apply-templates select="*[position()=3]"/>
-       </xsl:otherwise>
-      </xsl:choose> 
-</xsl:template>
-
-<!-- CSYMBOL -->
-
-<xsl:template match="m:apply[m:csymbol]">
-<xsl:param name="nopar" select="0"/>
-    <xsl:variable name="name"><xsl:value-of select="m:csymbol"/></xsl:variable>
-    <xsl:variable name="charlength"><xsl:apply-templates select="m:csymbol" mode="charcount"/></xsl:variable>
-    <m:mrow>
-     <xsl:if test="@id">
-      <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
-     </xsl:if>
-     <xsl:variable name="id" select="m:csymbol/@id"/>
-     <xsl:choose>
-      <!-- META -->
-      <xsl:when test="$name='meta'">
-       <m:mrow>
-        <xsl:apply-templates select="*[position()=2]"/>
-        <m:mfenced open="[" close="]" separators=";">
-         <xsl:apply-templates select="*[position()>2]"/>
-        </m:mfenced>
-       </m:mrow>
-      </xsl:when>
-      <!-- FORALL *-->
-      <xsl:when test="$name='forall'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo mathcolor="Blue">&#8704;</m:mo>
-            <xsl:apply-templates select="m:bvar"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>.</m:mo>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo mathcolor="Blue">&#8704;</m:mo>
-        <xsl:apply-templates select="m:bvar/m:ci"/>
-        <m:mo>:</m:mo>
-        <xsl:apply-templates select="m:bvar/m:type"/>
-        <m:mo>.</m:mo>
-        <xsl:apply-templates select="*[position()=3]"/>
-       </xsl:otherwise>
-       </xsl:choose> 
-      </xsl:when>
-      <!-- LET-IN -->
-      <xsl:when test="$name='let_in'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>LET</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="m:bvar"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>=</m:mo>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>IN</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[position()=4]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo>LET</m:mo>
-        <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        <xsl:apply-templates select="m:bvar/m:ci"/>
-        <m:mo>=</m:mo>
-        <xsl:apply-templates select="*[position()=3]"/>
-        <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        <m:mtext>IN</m:mtext>
-        <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        <xsl:apply-templates select="*[position()=4]"/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when> 
-      <!-- PROD *-->
-      <xsl:when test="$name='prod'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo mathcolor="Blue">&#x03a0;</m:mo>
-            <xsl:apply-templates select="m:bvar"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>.</m:mo>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo mathcolor="Blue">&#x03a0;</m:mo>
-        <xsl:apply-templates select="m:bvar/m:ci"/>
-        <m:mo>:</m:mo>
-        <xsl:apply-templates select="m:bvar/m:type"/>
-        <m:mo>.</m:mo>
-        <xsl:apply-templates select="*[position()=3]"/>
-       </xsl:otherwise>
-       </xsl:choose> 
-      </xsl:when>
-      <!-- ARROW *-->
-      <xsl:when test="$name='arrow'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:if test="$nopar=0">
-             <m:mo stretchy="false">(</m:mo>
-            </xsl:if>
-            <xsl:apply-templates select="*[position()=2]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo mathmathcolor="Blue">&#x2192;</m:mo>
-            <xsl:choose>
-            <xsl:when test="*[position()=3]/m:csymbol">
-             <xsl:variable name="nextp"><xsl:value-of select="*[position()=3]/m:csymbol"/></xsl:variable>
-             <xsl:choose>
-             <xsl:when test="$nextp='arrow'">
-              <xsl:apply-templates select="*[position()=3]"><xsl:with-param name="nopar" select="1"/></xsl:apply-templates>
-             </xsl:when>
-             <xsl:otherwise>
-              <xsl:apply-templates select="*[position()=3]"/>
-             </xsl:otherwise>
-             </xsl:choose>
-            </xsl:when>
-            <xsl:otherwise>
-             <xsl:apply-templates select="*[position()=3]"/>
-            </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <xsl:if test="$nopar=0">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">)</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:if>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:if test="$nopar=0">
-         <m:mo stretchy="false">(</m:mo>
-        </xsl:if>
-        <xsl:apply-templates select="*[position()=2]"/>
-        <m:mo mathcolor="Blue">&#x2192;</m:mo>
-        <xsl:choose>
-        <xsl:when test="*[position()=3]/m:csymbol">
-         <xsl:variable name="nextp"><xsl:value-of select="*[position()=3]/m:csymbol"/></xsl:variable>
-         <xsl:choose>
-         <xsl:when test="$nextp='arrow'">
-          <xsl:apply-templates select="*[position()=3]"><xsl:with-param name="nopar" select="1"/></xsl:apply-templates>
-         </xsl:when>
-         <xsl:otherwise>
-          <xsl:apply-templates select="*[position()=3]"/>
-         </xsl:otherwise>
-         </xsl:choose>
-        </xsl:when>
-        <xsl:otherwise>
-         <xsl:apply-templates select="*[position()=3]"/>
-        </xsl:otherwise>
-        </xsl:choose>
-        <xsl:if test="$nopar=0">
-         <m:mo stretchy="false">)</m:mo>
-        </xsl:if>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- TYPE_OF -->
-      <xsl:when test="$name='type_of'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-          <m:mrow>
-           <xsl:value-of select="*[2]"/>
-           <m:mo>:</m:mo>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <xsl:apply-templates select="*[3]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mrow>
-        <xsl:apply-templates select="*[2]"/>
-        <m:mo>:</m:mo>
-        <xsl:apply-templates select="*[3]"/>
-       </m:mrow>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!--PRODUCT -->
-      <xsl:when test="$name='product'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-          <m:mrow>
-           <m:mo mathcolor="Blue">&#931;</m:mo>
-           <xsl:apply-templates select="m:bvar/m:ci"/>
-           <m:mo>:</m:mo>
-           <xsl:apply-templates select="m:bvar/m:type"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext>.</m:mtext>
-           <xsl:apply-templates select="*[position()=3]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mrow>
-        <m:mo mathcolor="Blue">&#931;</m:mo>
-        <xsl:apply-templates select="m:bvar/m:ci"/>
-         <m:mo>:</m:mo>
-        <xsl:apply-templates select="m:bvar/m:type"/>
-        <m:mtext>.</m:mtext>
-        <xsl:apply-templates select="*[position()=3]"/>
-       </m:mrow>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- PROD_IND -->
-      <xsl:when test="$name='product_ind'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mo stretchy="false">(</m:mo>
-           <xsl:apply-templates select="m:type"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mo mathcolor="Blue">x</m:mo>
-           <xsl:apply-templates select="*[position()=3]"/>
-           <m:mo stretchy="false">)</m:mo>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mrow>
-        <m:mo stretchy="false">(</m:mo>
-        <xsl:apply-templates select="m:type"/>
-        <m:mo mathcolor="Blue">x</m:mo>
-        <xsl:apply-templates select="*[position()=3]"/>
-         <m:mo stretchy="false">)</m:mo>
-       </m:mrow>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- PAIR -->
-      <xsl:when test="$name='pair'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-           <m:mo mathcolor="Blue">&lt;</m:mo>
-           <xsl:apply-templates select="*[2]"/>
-           <m:mtext>, </m:mtext>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <xsl:apply-templates select="*[3]"/>
-           <m:mo mathcolor="Blue">&gt;</m:mo>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mrow>
-         <m:mo mathcolor="Blue">&lt;</m:mo>
-        <xsl:apply-templates select="*[2]"/>
-        <m:mtext>, </m:mtext>
-        <xsl:apply-templates select="*[3]"/>
-        <m:mo mathcolor="Blue">&gt;</m:mo>
-       </m:mrow>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- UNION -->
-      <xsl:when test="$name='union'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-          <xsl:apply-templates select="*[2]"/>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-          <m:mtd>
-           <m:mrow>
-           <m:mo mathcolor="Blue">+</m:mo>
-            <xsl:apply-templates select="*[3]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mrow>
-        <xsl:apply-templates select="*[2]"/>
-        <m:mo mathcolor="Blue">+</m:mo>
-        <xsl:apply-templates select="*[3]"/>
-       </m:mrow>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- INL -->
-      <xsl:when test="$name='inl'">
-       <m:mrow>
-        <m:mo stretchy="false" mathcolor="Blue">inl(</m:mo>
-       <xsl:apply-templates select="*[position()=2]"/>
-        <m:mo stretchy="false" mathcolor="Blue">)</m:mo>
-       </m:mrow>
-      </xsl:when>
-      <!-- INR -->
-      <xsl:when test="$name='inr'">
-       <m:mrow>
-        <m:mo stretchy="false" mathcolor="Blue">inr(</m:mo>
-        <xsl:apply-templates select="*[position()=2]"/>
-        <m:mo stretchy="false" mathcolor="Blue">)</m:mo>
-       </m:mrow>
-      </xsl:when>
-      <!-- AXIOM -->
-      <xsl:when test="$name='Ax'">
-       <m:mo mathcolor="Blue">Ax</m:mo>
-      </xsl:when>
-      <!-- VOID -->
-      <xsl:when test="$name='void'">
-       <m:mo mathcolor="Blue">Void</m:mo>
-      </xsl:when>
-      <!-- ATOM -->
-      <xsl:when test="$name='atom'">
-       <m:mo mathcolor="Blue">Atom</m:mo>
-      </xsl:when>
-      <!-- UNIVERSE -->
-      <xsl:when test="$name='universe'">
-       <m:msub>
-        <m:mo>U</m:mo>
-        <xsl:apply-templates select="m:cn"/>
-       </m:msub>
-      </xsl:when>
-      <!-- PROP -->
-      <xsl:when test="$name='prop'">
-       <m:msub>
-        <m:mo>P</m:mo>
-        <xsl:apply-templates select="m:cn"/>
-       </m:msub>
-      </xsl:when>
-      <!-- EQUAL -->
-      <xsl:when test="$name='equal'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-          <xsl:apply-templates select="*[position()=3]"/>
-         </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo mathcolor="Blue">=</m:mo>
-            <xsl:apply-templates select="*[position()=4]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo mathcolor="Blue">&#x02208;</m:mo>
-            <xsl:apply-templates select="*[position()=2]"/>
-           </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-      </xsl:when>
-      <xsl:otherwise>
-       <m:mrow>
-        <xsl:apply-templates select="*[position()=3]"/>
-        <m:mo mathcolor="Blue">=</m:mo>
-        <xsl:apply-templates select="*[position()=4]"/>
-        <m:mo mathcolor="Blue">&#x02208;</m:mo>
-        <xsl:apply-templates select="*[position()=2]"/>
-       </m:mrow>
-      </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <!-- TOKEN  -->
-    <xsl:when test="$name='token'">
-     <m:mrow>
-      <m:mo mathcolor="Blue">"</m:mo>
-      <xsl:apply-templates select="m:ci"/>
-      <m:mo mathcolor="Blue">"</m:mo>
-     </m:mrow>
-    </xsl:when>
-    <!-- NIL  -->
-    <xsl:when test="$name='nil'">
-     <m:mo mathcolor="Blue">[]</m:mo>
-    </xsl:when>
-    <!-- CONS -->
-    <xsl:when test="$name='cons'">
-     <xsl:choose>
-     <xsl:when test="$charlength >= $framewidth">
-      <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-       <m:mtr>
-        <m:mtd>
-         <xsl:apply-templates select="*[2]"/>
-        </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mo mathcolor="Blue">::</m:mo>
-         <xsl:apply-templates select="*[3]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-     </m:mtable>
-    </xsl:when>
-    <xsl:otherwise>
-     <m:mrow>
-      <xsl:apply-templates select="*[2]"/>
-      <m:mo mathcolor="Blue">::</m:mo>
-      <xsl:apply-templates select="*[3]"/>
-     </m:mrow>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:when>
-
-<!-- REC -->
-<xsl:when test="$name='rec'">
-<xsl:choose>
-<xsl:when test="$charlength >= $framewidth">
-<m:mtable align="baseline 1" equalrows="false" columnalign="left">
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <m:mo>rectype</m:mo>
-    <xsl:apply-templates select="*[2]"/>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <m:mo>=</m:mo>
-    <xsl:apply-templates select="*[3]"/>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
-</m:mtable>
-</xsl:when>
-<xsl:otherwise>
-<m:mrow>
- <m:mo>rectype</m:mo>
- <xsl:apply-templates select="*[2]"/>
- <m:mo>=</m:mo>
- <xsl:apply-templates select="*[3]"/>
-</m:mrow>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:when>
-
-<!-- SET  -->
-<xsl:when test="$name='t_set'">
-<xsl:choose>
-<xsl:when test="$charlength >= $framewidth">
-<m:mtable align="baseline 1" equalrows="false" columnalign="left">
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <m:mo mathcolor="Blue" stretchy="false">{</m:mo>
-    <xsl:choose>
-    <xsl:when test="m:bvar/m:ci">
-     <xsl:apply-templates select="m:bvar/m:ci"/>
-     <m:mo mathcolor="Blue">:</m:mo>
-     <xsl:apply-templates select="m:bvar/m:type"/>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-templates select="m:bvar/m:type"/>
-    </xsl:otherwise>
-    </xsl:choose>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
- <m:mtr>
-  <m:mtd>
-   <m:row>
-    <m:mo mathcolor="Blue" stretchy="false">|</m:mo>
-    <xsl:apply-templates select="*[3]"/>
-    <m:mo mathcolor="Blue" stretchy="false">}</m:mo>
-   </m:row>
-  </m:mtd>
- </m:mtr>
-</m:mtable>
-</xsl:when>
-<xsl:otherwise>
-<m:row>
- <m:mo mathcolor="Blue" stretchy="false">{</m:mo>
- <xsl:choose>
- <xsl:when test="m:bvar/m:ci">
-  <xsl:apply-templates select="m:bvar/m:ci"/>
-  <m:mo mathcolor="Blue">:</m:mo>
-  <xsl:apply-templates select="m:bvar/m:type"/>
- </xsl:when> 
- <xsl:otherwise>
-  <xsl:apply-templates select="m:bvar/m:type"/>
- </xsl:otherwise>
- </xsl:choose>
- <m:mo mathcolor="Blue" stretchy="false">|</m:mo>
- <xsl:apply-templates select="*[3]"/>
- <m:mo mathcolor="Blue" stretchy="false">}</m:mo>
-</m:row>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:when>
-
-<!-- ISECT -->
-<xsl:when test="$name='isect'">
-<xsl:choose>
-<xsl:when test="$charlength >= $framewidth">
-<m:mtable align="baseline 1" equalrows="false" columnalign="left">
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <m:mo mathcolor="Blue">&#xc7;</m:mo>
-    <xsl:apply-templates select="m:bvar/m:ci"/>
-    <m:mo mathcolor="Blue">:</m:mo>
-    <xsl:apply-templates select="m:bvar/m:type"/>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <m:mo mathcolor="Blue">.</m:mo>
-    <xsl:apply-templates select="*[3]"/>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
-</m:mtable>
-</xsl:when>
-<xsl:otherwise>
-<m:mrow>
- <m:mo mathcolor="Blue">&#xc7;</m:mo>
- <xsl:apply-templates select="m:bvar/m:ci"/>
- <m:mo mathcolor="Blue">:</m:mo>
- <xsl:apply-templates select="m:bvar/m:type"/>
- <m:mo mathcolor="Blue">.</m:mo>
- <xsl:apply-templates select="*[3]"/>
-</m:mrow>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:when>
-<!-- QUOTIENT -->
-<xsl:when test="$name='quotient'">
-<xsl:choose>
-<xsl:when test="$charlength >= $framewidth">
-<m:mtable align="baseline 1" equalrows="false" columnalign="left">
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <xsl:apply-templates select="m:bvar[1]"/>
-    <m:mo mathcolor="Blue">,</m:mo>
-    <xsl:apply-templates select="m:bvar[2]"/>
-    <m:mo mathcolor="Blue">:</m:mo>
-    <xsl:apply-templates select="*[2]"/>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <m:mo mathcolor="Blue">//</m:mo>
-    <xsl:apply-templates select="*[5]"/>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
-</m:mtable>
-</xsl:when>
-<xsl:otherwise>
-<m:mrow>
- <xsl:apply-templates select="m:bvar[1]"/>
- <m:mo mathcolor="Blue">,</m:mo>
- <xsl:apply-templates select="m:bvar[2]"/>
- <m:mo mathcolor="Blue">:</m:mo>
- <xsl:apply-templates select="*[2]"/>
- <m:mo mathcolor="Blue">//</m:mo>
- <xsl:apply-templates select="*[5]"/>
-</m:mrow>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:when>
-<!-- IF_THEN_ELSE -->
-<xsl:when test="$name='if_then_else'">
-<xsl:choose>
-<xsl:when test="$charlength >= $framewidth">
-<m:mtable align="baseline 1" equalrows="false" columnalign="left">
- <m:mtr>
-  <m:mtd>
-  <m:mrow>
-   <xsl:choose>
-   <xsl:when test="m:where = 'atom_eq'">
-    <m:mo stretchy="false" mathcolor="Blue">atom_eq (</m:mo>
-   </xsl:when>
-   <xsl:when test="m:where = 'int_eq'">
-    <m:mo stretchy="false" mathcolor="Blue">int_eq (</m:mo>
-   </xsl:when>
-   <xsl:when test="m:where = 'less'">
-    <m:mo stretchy="false" mathcolor="Blue">less (</m:mo>
-   </xsl:when>
-   </xsl:choose>
-   <xsl:apply-templates select="*[3]"/>
-   <m:mo mathcolor="Blue">;</m:mo>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <xsl:apply-templates select="*[4]"/>
-    <m:mo mathcolor="Blue">;</m:mo>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <xsl:apply-templates select="*[5]"/>
-    <m:mo mathcolor="Blue">;</m:mo>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <xsl:apply-templates select="*[6]"/>
-    <m:mo stretchy="false" mathcolor="Blue">)</m:mo>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
-</m:mtable>
-</xsl:when>
-<xsl:otherwise>
-<m:mrow>
- <xsl:choose>
- <xsl:when test="m:where = 'atom_eq'">
-  <m:mo stretchy="false" mathcolor="Blue">atom_eq (</m:mo>
- </xsl:when>
- <xsl:when test="m:where = 'int_eq'">
-  <m:mo stretchy="false" mathcolor="Blue">int_eq (</m:mo>
- </xsl:when>
- <xsl:when test="m:where = 'less'">
-  <m:mo stretchy="false" mathcolor="Blue">less (</m:mo>
- </xsl:when>
- </xsl:choose>
- <xsl:apply-templates select="*[3]"/>
- <m:mo mathcolor="Blue">;</m:mo>
- <xsl:apply-templates select="*[4]"/>
- <m:mo mathcolor="Blue">;</m:mo>
- <xsl:apply-templates select="*[5]"/>
- <m:mo mathcolor="Blue">;</m:mo> 
- <xsl:apply-templates select="*[6]"/>
- <m:mo stretchy="false" mathcolor="Blue">)</m:mo>
-</m:mrow>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:when>
-<!-- SO_LAMBDA -->
-<xsl:when test="$name='so_lambda'">
-<xsl:choose>
-<xsl:when test="($charlength - 4) >= $framewidth">
-<m:mtable align="baseline 1" equalrows="false" columnalign="left">
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <m:mo mathcolor="red">&#x03bb;</m:mo>
-    <xsl:apply-templates select="m:apply[1]/*[2]"/>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <m:mo>.</m:mo>
-    <xsl:apply-templates select="*[3]"/>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
-</m:mtable>
-</xsl:when>
-<xsl:otherwise>
-<m:mrow>
- <m:mo mathcolor="red">&#x03bb;</m:mo>
- <xsl:apply-templates select="m:apply[1]/m:ci[2]"/>
- <m:mo>.</m:mo>
- <xsl:apply-templates select="*[3]"/>
-</m:mrow>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:when>
-<!-- SO_APPLY -->
-<xsl:when test="$name='so_apply'">
-<xsl:choose>
-<xsl:when test="($charlength - 4) >= $framewidth">
-<m:mtable align="baseline 1" equalrows="false" columnalign="left">
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <m:mo stretchy="false">(</m:mo>
-    <xsl:apply-templates select="*[position()=2]">
-     <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-    </xsl:apply-templates>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
- <xsl:for-each select="*[position()>2]">
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <m:mphantom stretchy="false"><m:mtext>(</m:mtext></m:mphantom>
-    <xsl:apply-templates select=".">
-     <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-    </xsl:apply-templates>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
- </xsl:for-each>
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <m:mo stretchy="false">)</m:mo>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
-</m:mtable>
-</xsl:when>
-<xsl:otherwise>
-<m:mo stretchy="false">(</m:mo>
-<xsl:apply-templates select="*[position()=2]">
- <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-</xsl:apply-templates>
-<xsl:for-each select="*[position()>2]">
- <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
- <xsl:apply-templates select=".">
-  <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
- </xsl:apply-templates>
-</xsl:for-each>
-<m:mo stretchy="false">)</m:mo>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:when>
-<!-- CAST -->
-<xsl:when test="$name='cast'">
-<xsl:choose>
-<xsl:when test="$charlength >= $framewidth">
-<m:mtable align="baseline 1" equalrows="false" columnalign="left">
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-    <m:mo stretchy="false">(</m:mo>
-    <xsl:apply-templates select="*[position()=2]"/>
-   </m:mrow>
-  </m:mtd>
- </m:mtr>
- <m:mtr>
-  <m:mtd>
-   <m:mrow>
-            <m:mo mathcolor="Maroon">:></m:mo>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">)</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo stretchy="false">(</m:mo>
-        <xsl:apply-templates select="*[position()=2]"/>
-        <m:mo mathcolor="Maroon">:></m:mo>
-        <xsl:apply-templates select="*[position()=3]"/>
-        <m:mo stretchy="false">)</m:mo>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- APP *-->
-      <xsl:when test="$name='app'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">(</m:mo>
-<!-- added precedence to app = FUNCTION_PREC (99) -->
-            <xsl:apply-templates select="*[position()=2]">
-             <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-            </xsl:apply-templates>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <xsl:for-each select="*[position()>2]">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mphantom><m:mtext>(</m:mtext></m:mphantom>
-<!-- added precedence to app = FUNCTION_PREC (99) -->
-            <xsl:apply-templates select=".">
-             <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-            </xsl:apply-templates>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:for-each>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">)</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo stretchy="false">(</m:mo>
-<!-- added precedence to app = FUNCTION_PREC (99) -->
-        <xsl:apply-templates select="*[position()=2]">
-         <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        </xsl:apply-templates>
-        <xsl:for-each select="*[position()>2]">
-         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-<!-- added precedence to app = FUNCTION_PREC (99) -->
-         <xsl:apply-templates select=".">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-         </xsl:apply-templates>
-        </xsl:for-each>
-        <m:mo stretchy="false">)</m:mo>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- CAST -->
-      <xsl:when test="$name='cast'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">(</m:mo>
-            <xsl:apply-templates select="*[position()=2]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo mathcolor="Maroon">:></m:mo>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">)</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo stretchy="false">(</m:mo>
-        <xsl:apply-templates select="*[position()=2]"/>
-        <m:mo mathcolor="Maroon">:></m:mo>
-        <xsl:apply-templates select="*[position()=3]"/>
-        <m:mo stretchy="false">)</m:mo>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- PROP -->
-      <!--<xsl:when test="$name='Prop'">
-       <m:mo>Prop</m:mo>
-      </xsl:when>-->
-      <!-- SET -->
-      <!--<xsl:when test="$name='Set'">
-       <m:mo>Set</m:mo>
-      </xsl:when>-->
-      <!-- TYPE -->
-      <!--<xsl:when test="$name='Type'">
-       <m:mo>Type</m:mo>
-      </xsl:when>-->
-      <!-- MUTCASE -->
-      <xsl:when test="$name='mutcase'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <xsl:variable name="charlength"><xsl:apply-templates select="*[position()=2]" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>&lt;</m:mo>
-            <xsl:apply-templates select="*[position()=2]"/>
-            <xsl:if test="$framewidth > $charlength">
-             <m:mo>&gt;</m:mo>
-             <m:mo>CASES</m:mo>
-             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-             <xsl:apply-templates select="*[position()=3]"/>
-            </xsl:if>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <xsl:if test="$charlength >= $framewidth">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>&gt;</m:mo>
-            <m:mo>CASES</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:if>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>OF</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <xsl:for-each select="m:piecewise/m:piece">
-         <xsl:variable name="charlength"><xsl:apply-templates select="./*[2]" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-            <xsl:when test="position() = 1">
-              <m:mphantom><m:mtext>|</m:mtext></m:mphantom>
-            </xsl:when>
-            <xsl:otherwise>
-             <m:mo stretchy="false">|</m:mo>
-            </xsl:otherwise>
-            </xsl:choose>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="./*[2]"/>
-            <xsl:if test="$framewidth > $charlength">
-             <m:mo mathcolor="Green">&#x21d2;</m:mo>
-             <xsl:apply-templates select="./*[1]"/>
-            </xsl:if>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <xsl:if test="$charlength >= $framewidth">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mphantom><m:mtext>|_</m:mtext></m:mphantom>  
-            <m:mo mathcolor="Green">&#x21d2;</m:mo>
-            <xsl:apply-templates select="./*[1]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:if>
-        </xsl:for-each>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>END</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo>&lt;</m:mo><xsl:apply-templates select="*[position()=2]"/><m:mo>&gt;</m:mo>
-        <m:mo>CASES</m:mo>
-        <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        <xsl:apply-templates select="*[position()=3]"/>
-        <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        <m:mo>OF</m:mo>
-        <xsl:for-each select="m:piecewise/m:piece">
-         <xsl:choose>
-         <xsl:when test="position() != 1">
-          <m:mo stretchy="false">|</m:mo>
-         </xsl:when> 
-         </xsl:choose>
-         <xsl:apply-templates select="./*[2]"/>
-         <m:mo mathcolor="Green">&#x21d2;</m:mo>
-         <xsl:apply-templates select="./*[1]"/>
-        </xsl:for-each>
-        <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        <m:mo>END</m:mo>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- FIX -->
-      <xsl:when test="$name='fix'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>FIX</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mi><xsl:value-of select="m:ci"/></m:mi>
-            <m:mo stretchy="false">{</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-            <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-            <xsl:for-each select="m:bvar"> 
-             <xsl:variable name="charlength"><xsl:apply-templates select="m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mi><xsl:value-of select="m:ci"/></m:mi>
-                <m:mo>:</m:mo>
-                <xsl:if test="$framewidth > $charlength">
-                 <xsl:apply-templates select="m:type"/>
-                </xsl:if>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr> 
-             <xsl:if test="$charlength >= $framewidth">
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mphantom><m:mtext>:=</m:mtext></m:mphantom>
-                <xsl:apply-templates select="m:type"/>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr>
-             </xsl:if>
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mo>:=</m:mo>
-                <xsl:apply-templates select="following-sibling::*[position()=1]"/>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr> 
-            </xsl:for-each>
-            </m:mtable>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">}</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo>FIX</m:mo>
-        <m:mi><xsl:value-of select="m:ci"/></m:mi>
-        <m:mo stretchy="false">{</m:mo>
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <xsl:for-each select="m:bvar"> 
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mi><xsl:value-of select="m:ci"/></m:mi>
-            <m:mo>:</m:mo>
-            <xsl:apply-templates select="m:type"/>
-            <m:mo>:=</m:mo>
-            <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
-            <xsl:if test="position()=last()">
-             <m:mo stretchy="false">}</m:mo>
-            </xsl:if>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:for-each>
-        </m:mtable>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- COFIX -->
-      <xsl:when test="$name='cofix'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>COFIX</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mi><xsl:value-of select="m:ci"/></m:mi>
-            <m:mo stretchy="false">{</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-            <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-            <xsl:for-each select="m:bvar">
-             <xsl:variable name="charlength"><xsl:apply-templates select="m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable> 
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mi><xsl:value-of select="m:ci"/></m:mi>
-                <m:mo>:</m:mo>
-                <xsl:if test="$framewidth > $charlength">
-                 <xsl:apply-templates select="m:type"/>
-                </xsl:if>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr> 
-             <xsl:if test="$charlength >= $framewidth">
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mphantom><m:mtext>:=</m:mtext></m:mphantom>
-                <xsl:apply-templates select="m:type"/>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr>
-             </xsl:if>
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mo>:=</m:mo>
-                <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr>
-            </xsl:for-each>
-            </m:mtable>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">}</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo>COFIX</m:mo>
-        <m:mi><xsl:value-of select="m:ci"/></m:mi>
-        <m:mo stretchy="false">{</m:mo>
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">  
-        <xsl:for-each select="m:bvar"> 
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mi><xsl:value-of select="m:ci"/></m:mi>
-            <m:mo>:</m:mo>
-            <xsl:apply-templates select="m:type"/>
-            <m:mo>:=</m:mo>
-            <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
-            <xsl:if test="position()=last()">
-             <m:mo stretchy="false">}</m:mo>
-            </xsl:if>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:for-each>
-        </m:mtable>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- ***************************************** -->
-      <!-- *********** PROOF ELEMENTS ************** -->
-      <!-- ***************************************** -->
-      <!-- PROOF -->
-      <xsl:when test="$name='proof'">
-        <!-- CSC: $explodeall until the annotationHelper can handle mactions -->
-        <xsl:variable name="test" select="(not($explodeall)) and
-          (not(preceding-sibling::*[1]/text()='letin1')) and
-          (not(preceding-sibling::*[1]/text()='rw_step')) and
-          (not(name(..)='m:lambda'))"/>
-        <xsl:variable name="hidden_details">
-         <xsl:if test="$test">
-          <!-- Details hided (default) -->
-          <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-           <m:mtr>
-            <m:mtd>
-             <m:mrow>
-              <m:mtext mathcolor="Red">We&#x00a0;can&#x00a0;prove</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <!-- the last child is either the expected type, if provided,-->
-              <!-- or the synthesized type.                                -->
-              <xsl:apply-templates select="*[position()=last()]"/>
-              <m:mrow>
-               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-               <m:mtext mathcolor="Green">(explain)</m:mtext>
-              </m:mrow>
-             </m:mrow>
-            </m:mtd>
-           </m:mtr>
-          </m:mtable>
-         </xsl:if>
-        </xsl:variable>
-        <xsl:variable name="shown_details">
-         <!-- Show details -->
-         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-          <m:mtr>
-           <m:mtd>
-            <m:mrow>
-             <xsl:apply-templates select="*[position()=2]"/>
-            </m:mrow>
-           </m:mtd>
-          </m:mtr>
-          <xsl:variable name="hidedetails">
-            <m:mrow>
-             <m:mphantom>
-              <m:mtext>_</m:mtext>
-             </m:mphantom>
-             <xsl:if test="$test">
-              <m:mtext mathcolor="Green">(hide&#x00a0;details)</m:mtext>
-             </xsl:if>
-            </m:mrow>
-          </xsl:variable>
-          <m:mtr>
-           <m:mtd>
-            <m:mrow>
-             <m:mtext mathcolor="Red">we&#x00a0;proved</m:mtext>
-             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-             <xsl:apply-templates select="*[position()=3]"/>
-             <xsl:if test="not(*[4])">
-              <xsl:copy-of select="$hidedetails"/>
-             </xsl:if>
-            </m:mrow>
-           </m:mtd>
-          </m:mtr>
-          <xsl:if test="*[4]">
-           <m:mtr>
-            <m:mtd>
-             <m:mrow>
-              <m:mtext mathcolor="Red">that&#x00a0;is&#x00a0;equivalent&#x00a0;to</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[position()=4]"/>
-              <xsl:copy-of select="$hidedetails"/>
-             </m:mrow>
-            </m:mtd>
-           </m:mtr>
-          </xsl:if>
-         </m:mtable>
-        </xsl:variable>
-        <xsl:choose>
-         <xsl:when test="$test">
-          <m:maction actiontype="toggle">
-           <xsl:copy-of select="$hidden_details"/>
-           <xsl:copy-of select="$shown_details"/>
-          </m:maction>
-         </xsl:when>
-         <xsl:otherwise>
-          <xsl:copy-of select="$shown_details"/>
-         </xsl:otherwise>
-        </xsl:choose>
-      </xsl:when>
-      <!-- SIDE_PROOF -->
-      <xsl:when test="$name='side_proof'">
-        <xsl:variable name="test" select="(not($explodeall))"/>
-        <xsl:variable name="hidden_details">
-         <xsl:if test="$test">
-          <!-- Details hided (default) -->
-          <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-           <m:mtr>
-            <m:mtd>
-             <m:mrow>
-              <m:mtext mathcolor="Red">We&#x00a0;can&#x00a0;prove</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <!-- the last child is either the expected type, if provided,-->
-              <!-- or the synthesized type.                                -->
-              <xsl:apply-templates select="*[position()=last()]"/>
-              <m:mrow>
-               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-               <m:mtext mathcolor="Green">(explain)</m:mtext>
-              </m:mrow>
-             </m:mrow>
-            </m:mtd>
-           </m:mtr>
-          </m:mtable>
-         </xsl:if>
-        </xsl:variable>
-        <xsl:variable name="shown_details">
-         <!-- Show details -->
-         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-          <m:mtr>
-           <m:mtd>
-            <m:mrow>
-             <xsl:apply-templates select="*[position()=2]"/>
-            </m:mrow>
-           </m:mtd>
-          </m:mtr>
-          <xsl:variable name="hidedetails">
-            <m:mrow>
-             <m:mphantom>
-              <m:mtext>_</m:mtext>
-             </m:mphantom>
-             <xsl:if test="$test">
-              <m:mtext mathcolor="Green">(hide&#x00a0;details)</m:mtext>
-             </xsl:if>
-            </m:mrow>
-          </xsl:variable>
-          <m:mtr>
-           <m:mtd>
-            <m:mrow>
-             <m:mtext mathcolor="Red">we&#x00a0;proved</m:mtext>
-             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-             <xsl:apply-templates select="*[position()=3]"/>
-             <xsl:if test="not(*[4])">
-              <xsl:copy-of select="$hidedetails"/>
-             </xsl:if>
-            </m:mrow>
-           </m:mtd>
-          </m:mtr>
-          <xsl:if test="*[4]">
-           <m:mtr>
-            <m:mtd>
-             <m:mrow>
-              <m:mtext mathcolor="Red">that&#x00a0;is&#x00a0;equivalent&#x00a0;to</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[position()=4]"/>
-              <xsl:copy-of select="$hidedetails"/>
-             </m:mrow>
-            </m:mtd>
-           </m:mtr>
-          </xsl:if>
-         </m:mtable>
-        </xsl:variable>
-        <xsl:choose>
-         <xsl:when test="$test">
-          <m:maction actiontype="toggle">
-           <xsl:copy-of select="$hidden_details"/>
-           <xsl:copy-of select="$shown_details"/>
-          </m:maction>
-         </xsl:when>
-         <xsl:otherwise>
-          <xsl:copy-of select="$shown_details"/>
-         </xsl:otherwise>
-        </xsl:choose>
-      </xsl:when>
-      <!-- LETIN1 -->
-      <xsl:when test="$name='letin1'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[position()=2]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <xsl:when test="$name='by_induction'">
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="Red">We&#x00a0;prove</m:mtext>
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <xsl:apply-templates select="../*[3]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="Red">by&#x00a0;induction&#x00a0;on</m:mtext>
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <xsl:apply-templates 
-            select="*[position()=last()]/*[position()=last()]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-            <xsl:for-each select="*[position()>3 and not(position()=last())]">
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <xsl:apply-templates select="."/>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr>
-            </xsl:for-each>
-           </m:mtable>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-      </xsl:when>
-      <!-- inductive_case -->
-      <xsl:when test="$name='inductive_case'">
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="Red">Case</m:mtext>
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <xsl:apply-templates select="*[2]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-            <xsl:if test="*[3]/*[position()>1]">
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mtext mathcolor="Red">By&#x00a0;induction&#x00a0;hypothesis,&#x00a0;we&#x00a0;have:</m:mtext>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr>
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-                <xsl:for-each select="*[3]/*[position()>1]">
-                 <m:mo stretchy="false">(</m:mo>
-                 <xsl:apply-templates select="m:ci"/>
-                 <m:mo stretchy="false">) </m:mo>
-                 <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-                 <xsl:apply-templates select="m:type"/>
-                </xsl:for-each>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr>
-            </xsl:if>
-            <m:mtr>
-             <m:mtd>
-              <m:mrow>
-               <xsl:apply-templates select="*[4]"/>
-              </m:mrow>
-             </m:mtd>
-            </m:mtr>
-           </m:mtable>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-      </xsl:when>
-      <!-- case_lhs  -->
-      <xsl:when test="$name='case_lhs'">
-       <m:mrow>
-        <xsl:choose>
-         <xsl:when test="count(*)=2">
-          <xsl:apply-templates select="*[2]"/>
-         </xsl:when>
-         <xsl:otherwise>
-          <m:mo stretchy="false">(</m:mo>
-          <xsl:apply-templates select="*[2]"/>
-          <xsl:for-each select="m:bvar">
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <xsl:apply-templates select="*[1]"/>
-           <m:mtext>:</m:mtext>
-           <xsl:apply-templates select="m:type/*[1]"/>
-          </xsl:for-each>
-          <m:mo stretchy="false">)</m:mo>
-         </xsl:otherwise>
-        </xsl:choose>
-       </m:mrow>
-      </xsl:when>
-      <!-- false_ind  -->
-      <xsl:when test="$name='false_ind'">
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <xsl:apply-templates select="*[3]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="Red">Contradiction.</m:mtext>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-      </xsl:when>
-      <!-- LET-IN -->
-      <xsl:when test="$name='letin'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <!-- <xsl:for-each select="APPLY[m:csymbol and (string(m:csymbol)='let')]"> -->
-        <xsl:for-each select="*[(last() > position()) and (position()>1)]">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="."/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:for-each>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[position()=last()]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <!-- LET -->
-      <xsl:when test="$name='let'">
-       <m:mtext>(</m:mtext>
-       <xsl:apply-templates select="m:ci"/>
-       <m:mtext>) </m:mtext>
-       <xsl:apply-templates select="*[3]"/>
-      </xsl:when>
-      <!-- RW_STEP -->
-      <xsl:when test="$name='rw_step'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-             <xsl:when test="name(*[2])='m:apply'">
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:when>
-             <xsl:otherwise>
-              <m:mtext>Consider</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Rewrite</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[3]"/>
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <m:mtext>with</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[4]"/>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mtext>by</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[5]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <!-- not existing any more
-      <xsl:when test="$name='thread'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-             <xsl:when test="name(*[last()])='m:apply'">
-              <xsl:apply-templates select="*[last()]"/>
-             </xsl:when>
-             <xsl:otherwise>
-              <m:mtext>Consider</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[last()]"/>
-             </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        <xsl:apply-templates mode="thread" select="*[(last()-2)]"/> 
-        </m:mtable>
-      </xsl:when>
-      --> 
-      <!-- REWRITE_AND_APPLY -->
-      <xsl:when test="$name='rewrite_and_apply'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[2]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Then&#x00a0;apply&#x00a0;it&#x00a0;to</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[position()>2]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-       </m:mtable>
-      </xsl:when>
-      <!-- AND_IND -->
-      <xsl:when test="$name='and_ind'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-             <xsl:when test="name(*[2])='m:apply'">
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:when>
-             <xsl:otherwise>
-              <m:mtext>Consider</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>In&#x00a0;particular,&#x00a0;we&#x00a0;have</m:mtext>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>(</m:mtext>
-            <xsl:apply-templates select="*[3]"/>
-            <m:mtext>)</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[4]"/>
-            </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>(</m:mtext>
-            <xsl:apply-templates select="*[5]"/>
-            <m:mtext>)</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[6]"/>
-            </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[7]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <!-- full_or_ind -->
-      <xsl:when test="$name='full_or_ind'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-             <xsl:when test="name(*[2])='m:apply'">
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:when>
-             <xsl:otherwise>
-              <m:mtext>Consider</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>We&#x00a0;proceed&#x00a0;by&#x00a0;cases&#x00a0;to&#x00a0;prove</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Left:&#x00a0;suppose</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mo stretchy="false">(</m:mo>
-            <xsl:apply-templates select="*[4]/m:bvar/m:ci"/>
-            <m:mo stretchy="false">)</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[4]/m:bvar/m:type/*[1]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[4]/*[3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Right:&#x00a0;suppose</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mo stretchy="false">(</m:mo>
-            <xsl:apply-templates select="*[5]/m:bvar/m:ci"/>
-            <m:mo stretchy="false">)</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[5]/m:bvar/m:type/*[1]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[5]/*[3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <!-- OR_IND -->
-      <xsl:when test="$name='or_ind'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-             <xsl:when test="name(*[2])='m:apply'">
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:when>
-             <xsl:otherwise>
-              <m:mtext>Consider</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>We&#x00a0;prove</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[3]"/>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mtext>by&#x00a0;cases:</m:mtext>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Left</m:mtext>
-            <xsl:apply-templates select="*[4]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Right</m:mtext>
-            <xsl:apply-templates select="*[5]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <!-- EX_IND -->
-      <xsl:when test="$name='ex_ind'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-             <xsl:when test="name(*[2])='m:apply'">
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:when>
-             <xsl:otherwise>
-              <m:mtext>Consider</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Let</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[3]"/>
-            <m:mtext>:</m:mtext>
-            <xsl:apply-templates select="*[4]"/>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mtext>such&#x00a0;that</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mtext>(</m:mtext>
-             <xsl:apply-templates select="*[5]"/>
-            <m:mtext>)</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[6]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[7]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <!-- EQ_CHAIN -->
-      <xsl:when test="$name='eq_chain'">
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="Red">We&#x00a0;have&#x00a0;the&#x00a0;following&#x00a0;equality&#x00a0;chain:</m:mtext>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <xsl:for-each select="*[position() mod 2 = 0]">
-        <xsl:variable name="pos" select="position()"/>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <xsl:choose>
-           <xsl:when test="$pos = 1">
-            <xsl:apply-templates select="."/>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mo>=</m:mo>
-           </xsl:when>
-           <xsl:otherwise>
-            <m:mo>=</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="."/>
-           </xsl:otherwise>
-           </xsl:choose>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <xsl:if test="$pos != last()">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-           <xsl:apply-templates select="../*[position()=2*$pos +1]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        </xsl:if>
-        </xsl:for-each>
-       </m:mtable>
-      </xsl:when>
-      <!-- DISEQ_CHAIN -->
-      <xsl:when test="$name='diseq_chain'">
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="Red">We&#x00a0;have&#x00a0;the&#x00a0;following&#x00a0;disequality&#x00a0;chain:</m:mtext>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <xsl:for-each select="*[position() mod 3 = 2]">
-        <xsl:variable name="pos" select="position()"/>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <xsl:choose>
-           <xsl:when test="$pos = 1">
-            <xsl:apply-templates select="."/>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <mo><xsl:apply-templates select="../*[position()=3*$pos]"/></mo>
-           </xsl:when>
-           <xsl:otherwise>
-            <mo><xsl:apply-templates select="../*[position()=3*($pos - 1)]"/></mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="."/>
-           </xsl:otherwise>
-           </xsl:choose>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <xsl:if test="$pos != last()">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-           <xsl:apply-templates select="../*[position()=3*$pos +1]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        </xsl:if>
-        </xsl:for-each>
-       </m:mtable>
-      </xsl:when>
-      <!-- ***************************************** -->
-      <!-- *********** NOTATIONS ******************* -->
-      <!-- ***************************************** -->
-      <!-- subst -->
-      <xsl:when test="$name='subst'">
-        <xsl:apply-templates select="*[3]"/>
-<!-- no font for ApplyFunction: <m:mo>&#xe8a0;</m:mo> -->
-        <m:mo stretchy="false">[</m:mo>
-        <xsl:apply-templates select="*[4]"/>
-        <m:mo mathcolor="Green">
-         <xsl:if test="$id != ''">
-          <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-         </xsl:if>&#8592;</m:mo>
-        <xsl:apply-templates select="*[2]"/>
-        <m:mo stretchy="false">]</m:mo>
-      </xsl:when>
-      <!-- lift -->
-      <xsl:when test="$name='lift'">
-        <m:msup>
-         <m:mo mathcolor="Green">
-          <xsl:if test="$id != ''">
-           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-          </xsl:if>&#8593;</m:mo>
-        <xsl:apply-templates select="*[2]"/>
-        </m:msup>
-       <m:mrow>
-        <m:mo stretchy="false">(</m:mo>
-         <xsl:apply-templates select="*[3]"/>
-        <m:mo stretchy="false">)</m:mo>
-        </m:mrow>
-      </xsl:when>
-      <!-- lift_with_base -->
-      <xsl:when test="$name='lift_with_base'">
-        <m:msubsup>
-         <m:mo mathcolor="Green">
-          <xsl:if test="$id != ''">
-           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-          </xsl:if>&#8593;</m:mo>
-        <xsl:apply-templates select="*[3]"/>
-        <xsl:apply-templates select="*[4]"/>
-        </m:msubsup>
-       <m:mrow>
-        <m:mo stretchy="false">(</m:mo>
-         <xsl:apply-templates select="*[2]"/>
-        <m:mo stretchy="false">)</m:mo>
-        </m:mrow>      
-      </xsl:when>
-      <!-- beta_red1 -->
-      <xsl:when test="$name='beta_red1'">
-        <xsl:apply-templates select="*[2]"/>
-        <m:munder>
-         <m:mo mathcolor="Green">
-          <xsl:if test="$id != ''">
-           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-          </xsl:if>&#8594;</m:mo>
-          <m:mi mathcolor="Green">&#946;</m:mi>
-        </m:munder>
-        <xsl:apply-templates select="*[3]"/>
-      </xsl:when>
-      <!-- beta_red -->
-      <xsl:when test="$name='beta_red'">
-        <xsl:apply-templates select="*[2]"/>
-        <m:munderover>
-         <m:mo mathcolor="Green">
-          <xsl:if test="$id != ''">
-           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-          </xsl:if>&#8594;</m:mo>
-          <m:mi mathcolor="Green">&#946;</m:mi>
-          <m:mi mathcolor="Green">*</m:mi>
-        </m:munderover>
-        <xsl:apply-templates select="*[3]"/>
-      </xsl:when>
-      <!-- par_beta_red1 -->
-      <xsl:when test="$name='par_beta_red1'">
-        <xsl:apply-templates select="*[2]"/>
-        <m:munder>
-         <m:mo mathcolor="Green">
-          <xsl:if test="$id != ''">
-           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-          </xsl:if>&#8658;</m:mo>
-          <m:mi mathcolor="Green">&#946;</m:mi>
-        </m:munder>
-        <xsl:apply-templates select="*[3]"/>
-      </xsl:when>
-      <!-- par_beta_red -->
-      <xsl:when test="$name='par_beta_red'">
-        <xsl:apply-templates select="*[2]"/>
-        <m:munderover>
-         <m:mo mathcolor="Green">
-          <xsl:if test="$id != ''">
-           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-          </xsl:if>&#8658;</m:mo>
-          <m:mi mathcolor="Green">&#946;</m:mi>
-          <m:mi mathcolor="Green">*</m:mi>
-        </m:munderover>
-        <xsl:apply-templates select="*[3]"/>
-      </xsl:when>
-      <!-- forgetful -->
-      <xsl:when test="$name='forgetful'">
-       <m:mfenced open="|" close="|">
-        <xsl:if test="$id != ''">
-         <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]"/>
-       </m:mfenced>
-      </xsl:when>
-      <!-- isomorphic -->
-      <xsl:when test="$name='isomorphic'">
-        <xsl:apply-templates select="*[2]"/>
-        <m:mo mathcolor="Green">
-         <xsl:if test="$id != ''">
-          <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-         </xsl:if>&#8773;</m:mo>
-        <xsl:apply-templates select="*[3]"/>
-      </xsl:when>
-      <!-- interp -->
-      <xsl:when test="$name='forgetful'">
-       <m:mfenced open="[" close="]">
-        <xsl:if test="$id != ''">
-         <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]"/>
-       </m:mfenced>
-      </xsl:when> 
-
-      <!-- ERROR -->
-      <xsl:otherwise>
-       <m:mi>ERROR</m:mi>
-      </xsl:otherwise>
-     </xsl:choose>
-    </m:mrow>
-</xsl:template>
-
-<!-- Il modo Thread non esiste piu' 
-<xsl:template match="*" mode="thread">
- <xsl:variable name="name"><xsl:value-of select="following-sibling::*[position()=1]/m:csymbol"/></xsl:variable>
- <xsl:choose>
-  <xsl:when test="$name='rw_step'">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Rewrite</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="following-sibling::*[position()=1]/*[2]"/>
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <m:mtext>with</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="following-sibling::*[position()=1]/*[3]"/>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mtext>by</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="following-sibling::*[position()=1]/*[4]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext mathcolor="Red">we&#x00a0;get</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="."/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-   </xsl:when>
-   <xsl:otherwise>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="following-sibling::*[position()=1]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext mathcolor="Red">we&#x00a0;get</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="."/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-    </xsl:otherwise>
-   </xsl:choose>
-         <xsl:apply-templates mode="thread" select="preceding-sibling::*[position()=2]"/>
-</xsl:template>
--->
-
-<!-- LAMBDA -->
-
-<xsl:template match="m:lambda">
-    <xsl:variable name="charlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"/></xsl:variable>
-    <m:mrow>
-     <xsl:if test="@id">
-      <xsl:attribute name="xref">
-       <xsl:value-of select="@id"/>
-      </xsl:attribute>
-     </xsl:if>
-     <xsl:choose>
-     <xsl:when test="$charlength >= $framewidth">
-      <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo mathcolor="Red">&#x03bb;</m:mo>
-            <!--<xsl:apply-templates select="m:bvar"/>-->
-           <xsl:apply-templates select="m:bvar/m:ci"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-       <m:mtr>
-        <m:mtd>
-         <m:mrow>
-          <m:mo>.</m:mo>
-          <xsl:apply-templates select="*[position()=2]"/>
-         </m:mrow>
-        </m:mtd>
-       </m:mtr>
-      </m:mtable>
-     </xsl:when>
-     <xsl:otherwise>
-      <m:mo mathcolor="Red">&#x03bb;</m:mo>
-      <!--<xsl:apply-templates select="m:bvar/m:ci"/>
-      <m:mo>:</m:mo>
-      <xsl:apply-templates select="m:bvar/m:type"/>-->
-      <xsl:apply-templates select="m:bvar/m:ci"/>
-      <m:mo>.</m:mo>
-      <xsl:apply-templates select="*[position()=2]"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </m:mrow>
-</xsl:template>
-
-
-<!--**********************-->
-<!--       COUNTING       -->
-<!--**********************-->
-
-<xsl:template match="m:cn|m:and|m:or|m:not|m:exists|m:eq|m:lt|m:leq|m:gt|m:geq
- |m:in|m:notin|m:intersect|m:union|m:subset|m:prsubset|m:card|m:setdiff
- |m:plus|m:minus|m:times" mode="charcount">
-<xsl:param name="incurrent_length" select="0"/> 
-    <xsl:choose>
-    <xsl:when test="$framewidth > ($incurrent_length + 3 + string-length())">
-     <xsl:variable name="siblength">
-      <xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount">
-       <xsl:with-param name="incurrent_length" select="$incurrent_length + string-length()"/>
-      </xsl:apply-templates>
-     </xsl:variable>
-     <xsl:choose>
-     <xsl:when test="string($siblength) = &quot;&quot;">
-      <xsl:value-of select="$incurrent_length + 3 + string-length()"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="$incurrent_length + 3 + string-length()"/>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-<xsl:template match="m:ci|m:csymbol" mode="charcount">
-<xsl:param name="incurrent_length" select="0"/> 
-<xsl:param name="nosibling" select="0"/>
-    <xsl:choose>
-    <xsl:when test="$framewidth > ($incurrent_length + string-length()) and ($nosibling = 0)">
-     <xsl:variable name="siblength">
-      <xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount">
-       <xsl:with-param name="incurrent_length" select="$incurrent_length + string-length()"/>
-      </xsl:apply-templates>
-     </xsl:variable>
-     <xsl:choose>
-     <xsl:when test="string($siblength) = &quot;&quot;">
-      <xsl:value-of select="$incurrent_length + string-length()"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="$incurrent_length + string-length()"/>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template> 
-
-<xsl:template match="*" mode="charcount">
-<xsl:param name="incurrent_length" select="0"/>
-<xsl:param name="nosibling" select="0"/>
- <xsl:choose>
-  <xsl:when test="count(child::*) = 0">
-   <!-- CSC: tremendous bug fixed. An empty element can still have siblings!!! -->
-   <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/></xsl:apply-templates></xsl:variable>
-   <xsl:choose>
-    <xsl:when test="string($siblength) = &quot;&quot;">
-     <xsl:value-of select="$incurrent_length"/>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:when>
-  <xsl:otherwise>
-    <xsl:variable name="childlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/><xsl:with-param name="nosibling" select="0"/></xsl:apply-templates></xsl:variable>
-    <xsl:choose>
-    <xsl:when test="$framewidth > number($childlength) and ($nosibling = 0)">
-     <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$childlength"/></xsl:apply-templates></xsl:variable>
-     <xsl:choose>
-     <xsl:when test="string($siblength) = &quot;&quot;">
-      <xsl:value-of select="number($childlength)"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="number($childlength)"/>
-    </xsl:otherwise>
-    </xsl:choose>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet> 
-
diff --git a/helm/nuprl_stylesheets/nuprl_proof.xsl b/helm/nuprl_stylesheets/nuprl_proof.xsl
deleted file mode 100644 (file)
index b699ed4..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:cn="http://www.......">
-
-
-<xsl:template match="NuPrlProof">
-  <Definition>
-    <Params />
-    <body>
-      <xsl:apply-templates/>
-    </body>
-    <type>
-      <xsl:apply-templates select="node/sequent/conclusion/*[1]"/>
-    </type>
-  </Definition>
-</xsl:template>
-
-<xsl:template match="NuPrlDefinition">
- <NuPrlDefinition>
-  <xsl:apply-templates select="*"/>
- </NuPrlDefinition>
-</xsl:template>
-
-<xsl:template match="node">
-  <xsl:element name="Node">
-    <xsl:apply-templates/>
-  </xsl:element>
-</xsl:template>
-
-<xsl:template match="sequent">
-  <xsl:element name="Sequent">
-    <xsl:attribute name="id">
-      <xsl:value-of select="@number"/>
-    </xsl:attribute>
-    <xsl:apply-templates/>
-  </xsl:element>
-</xsl:template>
-
-<xsl:template match="hypothesis">
-  <xsl:element name="Decl">
-    <xsl:if test="@var!=&quot;&quot;">
-      <xsl:attribute name="name">
-        <xsl:value-of select="@var"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates/>
-  </xsl:element>
-</xsl:template>
-
-<xsl:template match="conclusion">
-  <xsl:element name="Goal">
-    <xsl:apply-templates/>
-  </xsl:element>
-</xsl:template>
-
-<xsl:template match="ruleinstance">
-  <xsl:element name="Rule">
-    <xsl:apply-templates/>
-  </xsl:element>
-</xsl:template>
-
-<xsl:template match="tacticinstance">
-  <TacticInstance name="{@name}" uri="{@uri}"/>
-</xsl:template>
-
-<xsl:template match="tacticproof">
-  <xsl:element name="TacticProof">
-    <xsl:apply-templates/>
-  </xsl:element>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/nuprl_stylesheets/nuprl_rules.xsl b/helm/nuprl_stylesheets/nuprl_rules.xsl
deleted file mode 100644 (file)
index 6926dde..0000000
+++ /dev/null
@@ -1,876 +0,0 @@
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:cn="http://www.......">
-
-<xsl:template match="level-expression">
-  <m:apply>
-    <m:ci>level-exp</m:ci>
-    <m:ci>
-      <xsl:value-of select="@level"/>
-    </m:ci>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="parameter-substitution-list">
-  <m:apply>
-    <m:ci>parameter-substitution-list</m:ci>
-    <m:ci>
-      <xsl:value-of select="@val"/>
-    </m:ci>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="tag">
-  <m:apply>
-    <m:ci>tag <xsl:value-of select="@step"/>:</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="dependent_functionFormation">
-  <m:apply>
-    <m:ci>dependent_functionFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="independent_functionFormation">
-  <m:ci>independent_functionFormation</m:ci>
-</xsl:template>
-
-<xsl:template match="functionEquality">
-  <m:apply>
-    <m:ci>functionEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="independent_functionEquality">
-  <m:ci>independent_functionEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="lambdaEquality">
-  <m:apply>
-    <m:ci>lambdaEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="lambdaFormation">
-  <m:apply>
-    <m:ci>lambdaFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="applyEquality">
-  <m:apply>
-    <m:ci>applyEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="independent_functionElimination">
-  <m:apply>
-    <m:ci>independent_functionElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="dependent_functionElimination">
-  <m:apply>
-    <m:ci>dependent_functionElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="applyReduce">
-  <m:ci>functionEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="functionExtensionality">
-  <m:apply>
-    <m:ci>functionExtensionality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="dependent_productFormation">
-  <m:apply>
-    <m:ci>dependent_productFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="independent_productFormation">
-  <m:ci>independent_productFormation</m:ci>
-</xsl:template>
-
-<xsl:template match="productEquality">
-  <m:apply>
-    <m:ci>productEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="independent_productEquality">
-  <m:ci>independent_productEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="dependent_pairEquality">
-  <m:apply>
-    <m:ci>dependent_pairEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="dependent_pairFormation">
-  <m:apply>
-    <m:ci>dependent_pairFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="independent_pairEquality">
-  <m:ci>independent_pairEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="independent_pairFormation">
-  <m:ci>independent_pairFormation</m:ci>
-</xsl:template>
-
-<xsl:template match="spreadEquality">
-  <m:apply>
-    <m:ci>spreadEquality</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="productElimination">
-  <m:apply>
-    <m:ci>productElimination</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="spreadReduce">
-  <m:ci>spreadReduce</m:ci>
-</xsl:template>
-
-<xsl:template match="unionFormation">
-  <m:ci>unionFormation</m:ci>
-</xsl:template>
-
-<xsl:template match="unionEquality"> 
-  <m:ci>unionEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="inlEquality">
-  <m:apply>
-    <m:ci>inlEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="inlFormation">
-  <m:apply>
-    <m:ci>inlFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="inrEquality">
-  <m:apply>
-    <m:ci>inrEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="inrFormation">
-  <m:apply>
-    <m:ci>inrFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="decideEquality">
-  <m:apply>
-    <m:ci>decideEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="unionElimination">
-  <m:apply>
-    <m:ci>unionElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="decideReduceLeft">
-  <m:ci>decideReduceLeft</m:ci>
-</xsl:template>
-
-<xsl:template match="decideReduceRight">
-  <m:ci>decideReduceRight</m:ci>
-</xsl:template>
-
-<xsl:template match="universeFormation">
-  <m:apply>
-    <m:ci>universeFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="universeEquality">
-  <m:ci>universeEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="cumulativity">
-  <m:apply>
-    <m:ci>cumulativity</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="equalityFormation">
-  <m:apply>
-    <m:ci>equalityFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="equalityEquality">
-  <m:ci>equalityEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="axiomEquality">
-  <m:ci>axiomEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="equalityElimination">
-  <m:apply>
-    <m:ci>equalityElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="hypothesisEquality">
-  <m:apply>
-    <m:ci>hypothesisEquality</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="substitution">
-  <m:apply>
-    <m:ci>substitution</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="equality">
-  <m:ci>equality</m:ci>
-</xsl:template>
-
-<xsl:template match="voidFormation">
-  <m:ci>voidFormation</m:ci>
-</xsl:template>
-
-<xsl:template match="voidEquality">
-  <m:ci>voidEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="anyEquality">
-  <m:ci>anyEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="voidElimination">
-  <m:apply>
-    <m:ci>voidElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="atomFormation">
-  <m:ci>atomFormation</m:ci>
-</xsl:template>
-
-<xsl:template match="atomEquality">
-  <m:ci>atomEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="tokenEquality">
-  <m:ci>tokenEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="tokenFormation">
-  <m:apply>
-    <m:ci>tokenFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="atom_eqEquality">
-  <m:apply>
-    <m:ci>atom_eqEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="atom_eqReduceTrue">
-  <m:apply>
-    <m:ci>atom_eqReduceTrue</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="atom_eqReduceFalse">
-  <m:ci>atom_eqReduceFalse</m:ci>
-</xsl:template>
-
-<xsl:template match="intFormation">
-  <m:ci>intFormation</m:ci>
-</xsl:template>
-
-<xsl:template match="intEquality">
-  <m:ci>intEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="natural_numberEquality">
-  <m:ci>natural_numberEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="minusEquality">
-  <m:ci>minusEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="addEquality">
-  <m:ci>addEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="subtractEquality">
-  <m:ci>subtractEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="multiplyEquality">
-  <m:ci>multiplyEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="divideFormation">
-  <m:ci>divideFormation</m:ci>
-</xsl:template>
-
-<xsl:template match="addEquality">
-  <m:ci>addEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="subtractEquality">
-  <m:ci>subtractEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="multiplyEquality">
-  <m:ci>multiplyEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="divideEquality">
-  <m:ci>divideEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="remainderBounds1">
-  <m:ci>remainderBounds1</m:ci>
-</xsl:template>
-
-<xsl:template match="remainderBounds2">
-  <m:ci>remainderBounds2</m:ci>
-</xsl:template>
-
-<xsl:template match="remainderBounds3">
-  <m:ci>remainderBounds3</m:ci>
-</xsl:template>
-
-<xsl:template match="remainderBounds4">
-  <m:ci>remainderBounds4</m:ci>
-</xsl:template>
-
-<xsl:template match="divideRemainderSum">
-  <m:ci>divideRemainderSum</m:ci>
-</xsl:template>
-
-<xsl:template match="arith">
-  <m:apply>
-    <m:ci>arith</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="indEquality">
-  <m:apply>
-    <m:ci>indEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="intElimination">
-  <m:apply>
-    <m:ci>intElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="indReduceDown">
-  <m:ci>indReduceDown</m:ci>
-</xsl:template>
-
-<xsl:template match="indReduceUp">
-  <m:ci>indReduceUp</m:ci>
-</xsl:template>
-
-<xsl:template match="indReduceBase">
-  <m:ci>indReduceBase</m:ci>
-</xsl:template>
-
-<xsl:template match="ind_eqEquality">
-  <m:ci>ind_eqEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="ind_eqReduceTrue">
-  <m:ci>ind_eqReduceTrue</m:ci>
-</xsl:template>
-
-<xsl:template match="ind_eqReduceFalse">
-  <m:ci>ind_eqReduceFalse</m:ci>
-</xsl:template>
-
-<xsl:template match="lessEquality">
-  <m:ci>lessEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="lessReduceTrue">
-  <m:ci>lessReduceTrue</m:ci>
-</xsl:template>
-
-<xsl:template match="lessReduceFalse">
-  <m:ci>lessReduceFalse</m:ci>
-</xsl:template>
-
-<xsl:template match="less_thanEquality">
-  <m:ci>less_thanEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="less_thanFormation">
-  <m:ci>less_thanFormation</m:ci>
-</xsl:template>
-
-<xsl:template match="less_thanMember">
-  <m:ci>less_thanMember</m:ci>
-</xsl:template>
-
-<xsl:template match="listFormation">
-  <m:ci>listFormation</m:ci>
-</xsl:template>
-
-<xsl:template match="listEquality">
-  <m:ci>listEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="nilEquality">
-  <m:apply>
-    <m:ci>nilEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="nilFormation">
-  <m:apply>
-    <m:ci>nilFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="consFormation">
-  <m:ci>consFormation</m:ci>
-</xsl:template>
-
-<xsl:template match="consEquality">
-  <m:ci>consEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="list_indEquality">
-  <m:apply>
-    <m:ci>list_indEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="listElimination">
-  <m:apply>
-    <m:ci>listElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="list_indReduceUp">
-  <m:ci>list_indReduceUp</m:ci>
-</xsl:template>
-
-<xsl:template match="list_indReduceBase">
-  <m:ci>list_indReduceBase</m:ci>
-</xsl:template>
-
-<xsl:template match="recEquality">
-  <m:apply>
-    <m:ci>recEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="rec_memberEquality">
-  <m:apply>
-    <m:ci>rec_memberEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="rec_memberFormation">
-  <m:apply>
-    <m:ci>rec_memberFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="rec_indEquality">
-  <m:apply>
-    <m:ci>rec_indEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="recElimination">
-  <m:apply>
-    <m:ci>recElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="recUnrollElimination">
-  <m:apply>
-    <m:ci>recUnrollElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="dependent_setFormation">
-  <m:apply>
-    <m:ci>dependent_setFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="independent_setFormation">
-  <m:ci>independent_setFormation</m:ci>
-</xsl:template>
-
-<xsl:template match="setEquality">
-  <m:apply>
-    <m:ci>setEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="dependent_set_memberEquality">
-  <m:apply>
-    <m:ci>dependent_set_memberEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="dependent_set_memberFormation">
-  <m:apply>
-    <m:ci>dependent_set_memberFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="independent_set_memberEquality">
-  <m:ci>independent_set_memberEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="independent_set_memberFormation">
-  <m:apply>
-    <m:ci>independent_set_memberFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="setElimination">
-  <m:apply>
-    <m:ci>setElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="isectFormation">
-  <m:apply>
-    <m:ci>isectFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="isectEquality">
-  <m:apply>
-    <m:ci>isectEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="isect_memberEquality">
-  <m:apply>
-    <m:ci>isect_memberEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="isect_memberFormation">
-  <m:apply>
-    <m:ci>isect_memberFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="isect_member_caseEquality">
-  <m:apply>
-    <m:ci>isect_member_caseEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="isectElimination">
-  <m:apply>
-    <m:ci>isectElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="quotientFormation">
-  <m:apply>
-    <m:ci>quotientFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="quotientWeakEquality">
-  <m:apply>
-    <m:ci>quotientWeakEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="quotientEquality">
-  <m:ci>quotientEquality</m:ci>
-</xsl:template>
-
-<xsl:template match="quotient_memberWeakEquality">
-  <m:apply>
-    <m:ci>quotient_memberWeakEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="quotient_memberFormation">
-  <m:apply>
-    <m:ci>quotient_memberFormation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="quotient_memberEquality">
-  <m:apply>
-    <m:ci>quotient_memberEquality</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="quotient_equalityElimination">
-  <m:apply>
-    <m:ci>quotient_equalityElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="quotientElimination">
-  <m:apply>
-    <m:ci>quotientElimination</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="quotientElimination_2">
-  <m:apply>
-    <m:ci>quotientElimination_2</m:ci>
-    <m:cn> 
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="direct_computation">
-  <m:apply>
-    <m:ci>direct_computation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="reverse_direct_computation">
-  <m:apply>
-    <m:ci>reverse_direct_computation</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="direct_computation_hypothesis">
-  <m:apply>
-    <m:ci>direct_computation_hypothesis</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="reverse_direct_computation_hypothesis">
-  <m:apply>
-    <m:ci>reverse_direct_computation_hypothesis</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="ruleinstance/hypothesis">
-  <m:apply>
-    <m:ci>hypothesis</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="thin">
-  <m:apply>
-    <m:ci>thin</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="cut">
-  <m:apply>
-    <m:ci>cut</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="hyp_replacement">
-  <m:apply>
-    <m:ci>hyp_replacement</m:ci>
-    <m:cn>
-      <xsl:value-of select="@number_hyp"/>
-    </m:cn>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="lemma">
-  <m:apply>
-    <m:ci>lemma</m:ci>
-    <m:ci>
-      <xsl:value-of select="@name"/>
-    </m:ci>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="extract">
-  <m:apply>
-    <m:ci>extract</m:ci>
-    <m:ci>
-      <xsl:value-of select="@name"/>
-    </m:ci>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="instantiate">
-  <m:apply>
-    <m:ci>instantiate</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="because">
-  <m:ci>because</m:ci>
-</xsl:template>
-
-<xsl:template match="rename">
-  <m:apply>
-    <m:ci>rename</m:ci>
-    <xsl:apply-templates/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="introduction">
-  <m:apply>
-    <m:ci>introducition</m:ci>
-    <xsl:apply-templates/> 
-  </m:apply>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/nuprl_stylesheets/nuprl_term.xsl b/helm/nuprl_stylesheets/nuprl_term.xsl
deleted file mode 100644 (file)
index 1bd02c9..0000000
+++ /dev/null
@@ -1,598 +0,0 @@
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<xsl:include href="nuprl_proof.xsl"/>
-<xsl:include href="nuprl_abstract.xsl"/>
-<xsl:include href="nuprl_rules.xsl"/>
-
-<!-- NuPrl Term -->
-<xsl:template match="var">
-  <m:ci>
-    <xsl:value-of select="@val"/>
-  </m:ci>
-</xsl:template>
-
-
-<xsl:template match="function">
-  <xsl:choose>
-  <xsl:when test="type_of">
-    <xsl:choose>
-    <xsl:when test="type_of/@var=&quot;&quot;">
-    <m:apply>
-      <m:csymbol>arrow</m:csymbol>
-      <xsl:apply-templates select="type_of/*"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:apply>
-  </xsl:when>
-  <xsl:otherwise>
-    <m:apply>
-      <m:csymbol>prod</m:csymbol>
-      <m:bvar>
-        <m:ci>
-         <xsl:value-of select="type_of/@var"/>
-       </m:ci>
-        <m:type>
-         <xsl:apply-templates select="type_of/*"/>
-       </m:type>
-      </m:bvar>
-      <xsl:apply-templates select="*[2]"/>
-    </m:apply>
-  </xsl:otherwise>
-  </xsl:choose>
-  </xsl:when>
-  <xsl:otherwise>
-    <m:apply>
-      <m:csymbol>arrow</m:csymbol>
-      <xsl:apply-templates select="*[1]"/>
-      <xsl:apply-templates select="*[2]"/>
-    </m:apply>
-  </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-
-<xsl:template match="lambda">
-  <m:lambda>
-    <m:bvar>
-      <m:ci>
-        <xsl:value-of select="@binder"/>
-      </m:ci>
-    </m:bvar>
-    <xsl:apply-templates/>
-  </m:lambda>
-</xsl:template>
-
-
-<xsl:template match="apply">
-  <m:apply>
-    <m:csymbol>app</m:csymbol>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="product">
-  <m:apply>
-    <xsl:choose>
-      <xsl:when test="type_of">
-        <xsl:choose>
-        <xsl:when test="type_of/@var=&quot;&quot;">
-          <m:csymbol>product_ind</m:csymbol>
-          <m:type>
-            <xsl:apply-templates select="type_of/*"/>
-          </m:type>
-        </xsl:when>
-        <xsl:otherwise>
-          <m:csymbol>product</m:csymbol>
-          <m:bvar>
-            <m:ci>
-             <xsl:value-of select="type_of/@var"/>
-           </m:ci>
-          <m:type>
-           <xsl:apply-templates select="type_of/*"/>
-         </m:type>
-          </m:bvar>
-        </xsl:otherwise>
-        </xsl:choose>
-      </xsl:when>
-      <xsl:otherwise>
-        <m:csymbol>product_ind</m:csymbol>
-       <m:type>
-          <xsl:apply-templates select="*[1]"/>
-        </m:type>
-      </xsl:otherwise>
-    </xsl:choose>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="pair">
-  <m:apply>
-    <m:csymbol>pair</m:csymbol>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="spread">
-  <m:apply>
-  <m:csymbol>mutcase</m:csymbol>
-  <m:csymbol>NONE</m:csymbol>
-  <xsl:apply-templates select="*[1]"/>
-  <m:piecewise>
-    <m:piece>
-      <xsl:apply-templates select="*[4]"/>
-      <m:apply>
-        <m:csymbol>pair</m:csymbol>
-        <xsl:apply-templates select="binder[1]"/>
-        <xsl:apply-templates select="binder[2]"/>
-      </m:apply>
-    </m:piece>
-  </m:piecewise>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="union">
-  <m:apply>
-    <m:csymbol>union</m:csymbol>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="inl">
-  <m:apply>
-    <m:csymbol>inl</m:csymbol>
-    <xsl:apply-templates select="*[1]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="inr">
-  <m:apply>
-    <m:csymbol>inr</m:csymbol>
-    <xsl:apply-templates select="*[1]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="decide">
-  <m:apply>
-    <m:csymbol>mutcase</m:csymbol>
-    <m:csymbol>NONE</m:csymbol>
-    <xsl:apply-templates select="*[1]"/>
-    <m:piecewise>
-    <m:piece>
-      <xsl:apply-templates select="*[3]"/>
-      <m:apply>
-        <m:csymbol>inl</m:csymbol>
-        <xsl:apply-templates select="binder[1]"/>
-      </m:apply>
-    </m:piece>
-    <m:piece>
-      <xsl:apply-templates select="*[5]"/>
-      <m:apply>
-        <m:csymbol>inr</m:csymbol>
-        <xsl:apply-templates select="binder[2]"/>
-      </m:apply>
-    </m:piece>
-    </m:piecewise>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="universe">
-  <m:apply>
-    <m:csymbol>universe</m:csymbol>
-    <m:cn>
-      <xsl:value-of select="@level"/>
-    </m:cn>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="equal">
-  <m:apply>
-    <m:csymbol>equal</m:csymbol>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-    <xsl:apply-templates select="*[3]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="axiom">
-  <m:apply>
-    <m:csymbol>Ax</m:csymbol>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="void">
-  <m:apply>
-    <m:csymbol>void</m:csymbol>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="any">
-  <m:apply>
-    <m:csymbol>mutcase</m:csymbol>
-    <m:csymbol>NONE</m:csymbol>
-    <xsl:apply-templates select="*[1]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="atom">
-  <m:apply>
-    <m:csymbol>atom</m:csymbol>  
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="token">
-  <m:apply>
-    <m:csymbol>token</m:csymbol>
-    <m:ci>
-      <xsl:value-of select="@val"/>
-    </m:ci>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="atom_eq">
-  <m:apply>
-    <m:csymbol>if_then_else</m:csymbol>
-    <m:where>atom_eq</m:where>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-    <xsl:apply-templates select="*[3]"/>
-    <xsl:apply-templates select="*[4]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="int">
-  <m:integers/>
-</xsl:template>
-
-
-<xsl:template match="natural_number">
-  <m:cn>
-    <xsl:value-of select="@val"/>
-  </m:cn>
-</xsl:template>
-
-
-<xsl:template match="minus">
-  <m:apply>
-    <m:minus/>
-    <xsl:apply-templates select="*[1]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="add">
-  <m:apply>
-    <m:plus/>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="subtract">
-  <m:apply>
-    <m:minus/>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="multiply">
-  <m:apply>
-    <m:times/>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="divide">
-  <m:apply>
-    <m:divide/>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="remainder">
-  <m:apply>
-    <m:rem/>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="int_eq">
-  <m:apply>
-    <m:csymbol>if_then_else</m:csymbol>
-    <m:where>int_eq</m:where>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-    <xsl:apply-templates select="*[3]"/>
-    <xsl:apply-templates select="*[4]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="less">
-  <m:apply>
-    <m:csymbol>if_then_else</m:csymbol>
-    <m:where>less</m:where>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-    <xsl:apply-templates select="*[3]"/>
-    <xsl:apply-templates select="*[4]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="ind">
-  <m:apply>
-    <m:csymbol>by_induction</m:csymbol>
-    <m:ci>ind</m:ci>
-    <m:csymbol>NONE</m:csymbol>
-    <m:apply>   <!-- CASO BASE -->
-      <m:csymbol>inductive_case</m:csymbol>
-      <m:apply>
-        <m:csymbol>case_lhs</m:csymbol>
-       <m:ci>0</m:ci>
-      </m:apply>
-      <m:apply>
-        <m:csymbol>induction_hypothesis</m:csymbol>
-      </m:apply>
-      <xsl:apply-templates select="*[5]"/>
-    </m:apply>
-       
-    <m:apply> <!--CASO INDUTTIVO PER I NUMERI POSITIVI-->
-      <m:csymbol>inductive_case</m:csymbol>
-      <m:apply>
-        <m:csymbol>case_lhs</m:csymbol>
-       <m:ci>succ</m:ci>
-       <m:bvar>
-          <xsl:apply-templates select="*[6]"/> <!-- u -->
-         <m:type>int</m:type>
-       </m:bvar>
-      </m:apply>
-      <m:apply>
-        <m:csymbol>induction_hypothesis</m:csymbol>
-        <xsl:apply-templates select="*[7]"/> <!-- v  -->
-      </m:apply>
-      <xsl:apply-templates select="*[8]"/> <!-- t -->
-    </m:apply>
-
-    <m:apply> <!--CASO INDUTTIVO PER I NUMERI NEGATIVI-->
-      <m:csymbol>inductive_case</m:csymbol>
-      <m:apply>
-        <m:csymbol>case_lhs</m:csymbol>
-       <m:ci>pred</m:ci>
-       <m:bvar>
-          <xsl:apply-templates select="*[2]"/> <!-- x -->
-         <m:type>int</m:type>
-       </m:bvar>
-      </m:apply>
-      <m:apply>
-        <m:csymbol>induction_hypothesis</m:csymbol>
-       <xsl:apply-templates select="*[3]"/> <!-- y -->
-      </m:apply>
-      <xsl:apply-templates select="*[4]"/>
-    </m:apply>
-    <m:apply> 
-      <m:csymbol>extra_args</m:csymbol>
-      <xsl:apply-templates select="*[1]"/>  <!-- a -->
-    </m:apply> 
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="less_than">
-  <m:apply>
-    <m:lt/>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="list">
-  <m:ci>list</m:ci>
-</xsl:template>
-
-
-<xsl:template match="nil">
-  <m:apply>
-    <m:csymbol>nil</m:csymbol> 
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="cons">
-  <m:apply>
-    <m:csymbol>cons</m:csymbol>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="list_ind">
-  <m:apply>
-    <m:csymbol>by_induction</m:csymbol>
-    <m:ci>list_ind</m:ci>
-    <m:csymbol>NONE</m:csymbol>
-    <m:apply>
-      <m:csymbol>inductive_case</m:csymbol>
-      <m:apply>
-        <m:csymbol>case_lhs</m:csymbol>
-       <m:ci>nil</m:ci>
-      </m:apply>
-      <m:apply>
-        <m:csymbol>induction_hypothesis</m:csymbol>
-      </m:apply>
-      <xsl:apply-templates select="*[2]"/> <!-- base -->
-    </m:apply>
-    <m:apply>
-      <m:csymbol>inductive_case</m:csymbol>
-      <m:apply>
-        <m:csymbol>case_lhs</m:csymbol>
-       <m:ci>cons</m:ci>
-       <m:bvar>
-         <xsl:apply-templates select="*[3]"/> <!-- x -->
-         <m:type>?</m:type>
-        </m:bvar>
-        <m:bvar>
-       <xsl:apply-templates select="*[4]"/> <!-- l -->
-          <m:type>?</m:type>
-       </m:bvar>
-      </m:apply>
-      <m:apply>
-        <m:csymbol>induction_hypothesis</m:csymbol>
-        <xsl:apply-templates select="*[5]"/> <!-- Fxl -->
-      </m:apply>
-      <xsl:apply-templates select="*[6]"/> <!-- t -->
-    </m:apply>
-    <m:apply>
-      <m:csymbol>extra_args</m:csymbol>
-      <xsl:apply-templates select="*[1]"/> <!-- s -->
-    </m:apply>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="rec">
-  <m:apply>
-    <m:csymbol>rec</m:csymbol>
-    <xsl:apply-templates select="*[1]"/>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="rec_ind">
-  <m:apply>
-    <m:csymbol>app</m:csymbol>
-    <m:apply>
-      <m:csymbol>fix</m:csymbol>
-      <m:ci>
-        <xsl:apply-templates select="*[2]"/>
-      </m:ci>
-      <m:bvar>
-        <m:ci>
-          <xsl:apply-templates select="*[2]"/>
-        </m:ci>
-        <m:type>?</m:type>
-      </m:bvar>
-      <m:lambda>
-        <m:bvar>
-         <xsl:apply-templates select="*[3]"/>
-        </m:bvar>
-        <xsl:apply-templates select="*[4]"/>
-      </m:lambda>
-    </m:apply>
-    <xsl:apply-templates select="*[1]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="set">
-  <m:apply>
-    <m:csymbol>t_set</m:csymbol>
-    <m:bvar>
-      <xsl:choose>
-      <xsl:when test="type_of">
-        <m:ci>
-          <xsl:value-of select="type_of/@var"/>
-        </m:ci>
-        <m:type>
-          <xsl:apply-templates select="type_of/*"/>
-        </m:type>
-      </xsl:when>
-      <xsl:otherwise>
-        <m:type>
-          <xsl:apply-templates select="*[1]"/>
-        </m:type>
-      </xsl:otherwise>
-      </xsl:choose>
-    </m:bvar>
-    <xsl:apply-templates select="*[2]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="isect">
-  <m:apply>
-    <m:csymbol>isect</m:csymbol>
-    <m:bvar>
-      <m:ci>
-        <xsl:value-of select="type_of/@var"/>
-      </m:ci>  
-      <m:type>
-        <xsl:apply-templates select="type_of/*"/>
-      </m:type>
-    </m:bvar>
-    <xsl:apply-templates select="*[1]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="quotient">
-  <m:apply>
-    <m:csymbol>quotient</m:csymbol>
-    <xsl:apply-templates select="*[1]"/>
-    <m:bvar>
-      <xsl:value-of select="binder[1]/@var"/>
-    </m:bvar>
-    <m:bvar>
-      <xsl:value-of select="binder[2]/@var"/>
-    </m:bvar>
-    <xsl:apply-templates select="*[4]"/>
-  </m:apply>
-</xsl:template>
-
-
-<xsl:template match="type_of">
-  <m:apply>
-    <m:csymbol>type_of</m:csymbol>
-    <m:ci>
-      <xsl:value-of select="@var"/>
-    </m:ci>
-    <xsl:apply-templates select="*[1]"/>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="prop">
-  <m:apply>
-    <m:csymbol>prop</m:csymbol>
-    <m:cn>
-      <xsl:value-of select="@level"/>
-    </m:cn>
-  </m:apply>
-</xsl:template>
-
-<xsl:template match="binder">
-  <m:ci>
-    <xsl:value-of select="@var"/>
-  </m:ci>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/nuprl_stylesheets/nuprl_tree.xsl b/helm/nuprl_stylesheets/nuprl_tree.xsl
deleted file mode 100644 (file)
index 03daa47..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                             xmlns:xlink="http://www.w3.org/1999/xlink">
-
-
-
-<xsl:template match="/">
-    <xsl:apply-templates select="*"/>
-</xsl:template>
-
-<xsl:template match="*|@*|text()">
-  <xsl:copy>
-   <xsl:apply-templates select="*|@*|text()"/>
-  </xsl:copy>
-</xsl:template>
-
-         
-<xsl:template match="body">
-    <xsl:for-each select="Node">
-      <xsl:attribute name="child" select="1"/>
-      <xsl:attribute name="brother" select="2"/>
-    </xsl:for-each>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/nuprl_stylesheets/xslt_index.txt b/helm/nuprl_stylesheets/xslt_index.txt
deleted file mode 100644 (file)
index d193b31..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-nuprl_abstract.xsl
-nuprl_proof.xsl
-nuprl_rules.xsl
-nuprl_term.xsl
-nuprl_content_to_html2.xsl
-nuprl_annotatedpres.xsl
-nuprl_mmlextension.xsl
-nuprl_expand.xsl
-nuprl_tree.xsl
-nuprl_link.xsl
-nuprl_links_library.xsl
-nuprl_html_arith.xsl
-nuprl_html_basic.xsl
diff --git a/helm/ocaml/.cvsignore b/helm/ocaml/.cvsignore
deleted file mode 100644 (file)
index dc4fce3..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-META.helm-cic
-META.helm-cic_annotations
-META.helm-cic_annotations_cache
-META.helm-cic_cache
-META.helm-cic_proof_checking
-META.helm-tex_cic_textual_parser
-META.helm-cic_textual_parser
-META.helm-cic_unification
-META.helm-getter
-META.helm-mathql
-META.helm-mathql_interpreter
-META.helm-mathql_test
-META.helm-mathql_generator
-META.helm-pxp
-META.helm-tactics
-META.helm-urimanager
-META.helm-xml
-Makefile
-Makefile.common
-autom4te.cache
-config.cache
-config.log
-config.status
-configure
-libraries.ps
-.dep.dot
diff --git a/helm/ocaml/META.helm-cic.src b/helm/ocaml/META.helm-cic.src
deleted file mode 100644 (file)
index ee898d8..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="helm-urimanager helm-pxp"
-version="0.0.1"
-archive(byte)="cic.cma"
-archive(native)="cic.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-cic_annotations.src b/helm/ocaml/META.helm-cic_annotations.src
deleted file mode 100644 (file)
index 829efba..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="helm-cic helm-xml"
-version="0.0.1"
-archive(byte)="cic_annotations.cma"
-archive(native)="cic_annotations.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-cic_annotations_cache.src b/helm/ocaml/META.helm-cic_annotations_cache.src
deleted file mode 100644 (file)
index 38f5d1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="helm-cic_annotations"
-version="0.0.1"
-archive(byte)="cic_annotations_cache.cma"
-archive(native)="cic_annotations_cache.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-cic_cache.src b/helm/ocaml/META.helm-cic_cache.src
deleted file mode 100644 (file)
index 28ea57e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="helm-cic"
-version="0.0.1"
-archive(byte)="cic_cache.cma"
-archive(native)="cic_cache.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-cic_proof_checking.src b/helm/ocaml/META.helm-cic_proof_checking.src
deleted file mode 100644 (file)
index 08b099e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-requires="helm-cic"
-version="0.0.1"
-archive(byte)="cic_proof_checking.cma"
-archive(native)="cic_proof_checking.cmxa"
-archive(byte,miniReduction)="cicSubstitution.cmo cicMiniReduction.cmo"
-archive(native,miniReduction)="cicSubstitution.cmx cicMiniReduction.cmx"
-linkopts=""
diff --git a/helm/ocaml/META.helm-cic_textual_parser.src b/helm/ocaml/META.helm-cic_textual_parser.src
deleted file mode 100644 (file)
index bc4f2fc..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="helm-cic"
-version="0.0.1"
-archive(byte)="cic_textual_parser.cma"
-archive(native)="cic_textual_parser.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-cic_unification.src b/helm/ocaml/META.helm-cic_unification.src
deleted file mode 100644 (file)
index 6cb775d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="helm-cic_proof_checking"
-version="0.0.1"
-archive(byte)="cic_unification.cma"
-archive(native)="cic_unification.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-getter.src b/helm/ocaml/META.helm-getter.src
deleted file mode 100644 (file)
index 8ba941f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="helm-urimanager pxp netclient"
-version="0.0.1"
-archive(byte)="getter.cma"
-archive(native)="getter.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-mathql.src b/helm/ocaml/META.helm-mathql.src
deleted file mode 100644 (file)
index df553d7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="helm-urimanager"
-version="1.3"
-archive(byte)="mathql.cma"
-archive(native)="mathql.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-mathql_generator.src b/helm/ocaml/META.helm-mathql_generator.src
deleted file mode 100644 (file)
index c416820..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="helm-cic helm-cic_proof_checking helm-mathql"
-version="1.3"
-archive(byte)="mathql_generator.cma"
-archive(native)="mathql_generator.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-mathql_interpreter.src b/helm/ocaml/META.helm-mathql_interpreter.src
deleted file mode 100644 (file)
index 24a1929..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-requires="helm-cic helm-cic_textual_parser postgres helm-mathql"
-#natile-galax 
-version="1.3"
-archive(byte)="mathql_interpreter.cma"
-archive(native)="mathql_interpreter.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-pxp.src b/helm/ocaml/META.helm-pxp.src
deleted file mode 100644 (file)
index 33210a7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="helm-getter"
-version="0.0.1"
-archive(byte)="pxp.cma"
-archive(native)="pxp.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-tactics.src b/helm/ocaml/META.helm-tactics.src
deleted file mode 100644 (file)
index cffd94f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-requires="helm-cic_textual_parser helm-cic_proof_checking helm-cic_unification helm-mathql_generator"
-version="0.0.1"
-archive(byte)="tactics.cma"
-archive(native)="tactics.cmxa"
diff --git a/helm/ocaml/META.helm-tex_cic_textual_parser.src b/helm/ocaml/META.helm-tex_cic_textual_parser.src
deleted file mode 100644 (file)
index dec21ee..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="helm-cic"
-version="0.0.1"
-archive(byte)="tex_cic_textual_parser.cma"
-archive(native)="tex_cic_textual_parser.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-urimanager.src b/helm/ocaml/META.helm-urimanager.src
deleted file mode 100644 (file)
index ff18746..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires="str"
-version="0.0.1"
-archive(byte)="urimanager.cma"
-archive(native)="urimanager.cmxa"
-linkopts=""
diff --git a/helm/ocaml/META.helm-xml.src b/helm/ocaml/META.helm-xml.src
deleted file mode 100644 (file)
index 1cd68fe..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires=""
-version="0.0.1"
-archive(byte)="xml.cma"
-archive(native)="xml.cmxa"
-linkopts=""
diff --git a/helm/ocaml/Makefile.common.in b/helm/ocaml/Makefile.common.in
deleted file mode 100644 (file)
index 47d02bb..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-# This Makefile must be included by another one defining:
-#  $PACKAGE
-#  $REQUIRES
-#  $PREDICATES
-#  $INTERFACE_FILES
-#  $IMPLEMENTATION_FILES
-#  $EXTRA_OBJECTS_TO_INSTALL
-#  $EXTRA_OBJECTS_TO_CLEAN
-# and put in a directory where there is a .depend file.
-
-OCAMLFIND_DEST_DIR = @OCAMLFIND_DEST_DIR@
-
-OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)" -pp camlp4o
-OCAMLC = ocamlfind ocamlc $(OCAMLOPTIONS)
-OCAMLOPT = ocamlfind ocamlopt $(OCAMLOPTIONS)
-OCAMLDEP = ocamldep -pp camlp4o
-OCAMLLEX = ocamllex
-OCAMLYACC = ocamlyacc
-
-LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-
-
-ARCHIVE = $(PACKAGE).cma
-ARCHIVE_OPT = $(PACKAGE).cmxa
-OBJECTS_TO_INSTALL = $(ARCHIVE) $(ARCHIVE_OPT) $(ARCHIVE_OPT:%.cmxa=%.a) \
-                     $(INTERFACE_FILES) $(INTERFACE_FILES:%.mli=%.cmi) \
-                     $(EXTRA_OBJECTS_TO_INSTALL)
-DEPEND_FILES = $(INTERFACE_FILES) $(IMPLEMENTATION_FILES)
-
-$(ARCHIVE): $(IMPLEMENTATION_FILES:%.ml=%.cmo) $(LIBRARIES)
-       $(OCAMLC) -a -o $@ $(IMPLEMENTATION_FILES:%.ml=%.cmo)
-
-$(ARCHIVE_OPT): $(IMPLEMENTATION_FILES:%.ml=%.cmx) $(LIBRARIES_OPT)
-       $(OCAMLOPT) -a -o $@ $(IMPLEMENTATION_FILES:%.ml=%.cmx)
-
-all: $(IMPLEMENTATION_FILES:%.ml=%.cmo) $(ARCHIVE)
-opt: $(IMPLEMENTATION_FILES:%.ml=%.cmx) $(ARCHIVE_OPT)
-
-depend: $(DEPEND_FILES)
-       $(OCAMLDEP) $(INTERFACE_FILES) $(IMPLEMENTATION_FILES) > .depend
-
-$(PACKAGE).ps: .dep.dot
-       dot -Tps -o $@ $<
-
-.dep.dot: .depend
-       ocamldot < .depend > $@
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx .mll .mly
-.ml.cmo:
-       $(OCAMLC) -c $<
-.mli.cmi:
-       $(OCAMLC) -c $<
-.ml.cmx:
-       $(OCAMLOPT) -c $<
-.mly.ml:
-       $(OCAMLYACC) $<
-.mly.mli:
-       $(OCAMLYACC) $<
-.mll.ml:
-       $(OCAMLLEX) $<
-
-$(IMPLEMENTATION_FILES:%.ml=%.cmo): $(LIBRARIES)
-$(IMPLEMENTATION_FILES:%.ml=%.cmx): $(LIBRARIES_OPT)
-
-clean:
-       rm -f *.cm[ioax] *.cmxa *.o *.a $(EXTRA_OBJECTS_TO_CLEAN)
-
-install:
-       mkdir $(OCAMLFIND_DEST_DIR)/$(PACKAGE)
-       cp $(OBJECTS_TO_INSTALL) $(OCAMLFIND_DEST_DIR)/$(PACKAGE)
-
-uninstall:
-       cd $(OCAMLFIND_DEST_DIR)/$(PACKAGE) && rm -f $(OBJECTS_TO_INSTALL)
-       rmdir $(OCAMLFIND_DEST_DIR)/$(PACKAGE)
-
-.PHONY: all opt depend install uninstall clean
-
-ifneq ($(MAKECMDGOALS), depend)
-   include .depend   
-endif
diff --git a/helm/ocaml/Makefile.in b/helm/ocaml/Makefile.in
deleted file mode 100644 (file)
index c53affe..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# Warning: the modules must be in compilation order
-MODULES = xml urimanager getter pxp cic cic_annotations cic_annotations_cache \
-          cic_cache cic_proof_checking cic_textual_parser \
-          tex_cic_textual_parser cic_unification mathql mathql_interpreter \
-          mathql_generator tactics
-
-OCAMLFIND_DEST_DIR = @OCAMLFIND_DEST_DIR@
-OCAMLFIND_META_DIR = @OCAMLFIND_META_DIR@
-
-METAS = $(MODULES:%=META.helm-%)
-CWD=`pwd`
-
-all: $(METAS) $(MODULES:%=%.all)
-opt: $(METAS) $(MODULES:%=%.opt)
-depend: $(MODULES:%=%.depend)
-install: $(MODULES:%=%.install)
-uninstall: $(MODULES:%=%.uninstall)
-clean: $(MODULES:%=%.clean)
-       rm -f $(METAS)
-
-dist-clean: clean
-       rm -f Makefile Makefile.common configure config.log config.cache config.status
-
-$(MODULES:%=%.all):
-       export OCAMLPATH=$(CWD):$$OCAMLPATH ; cd $(@:%.all=%) && make all
-$(MODULES:%=%.opt):
-       export OCAMLPATH=$(CWD):$$OCAMLPATH ; cd $(@:%.opt=%) && make opt
-$(MODULES:%=%.depend):
-       export OCAMLPATH=$(CWD):$$OCAMLPATH ; cd $(@:%.depend=%) && make depend
-$(MODULES:%=%.install):
-       cd $(@:%.install=%) && make install
-       export TARGET=$(OCAMLFIND_META_DIR)/$(@:%.install=META.helm-%) ; \
-       cp $(@:%.install=META.helm-%.src) $$TARGET && \
-       echo "directory=\"$(OCAMLFIND_DEST_DIR)/$(@:%.install=%)\"" >> $$TARGET
-$(MODULES:%=%.uninstall):
-       cd $(@:%.uninstall=%) && make uninstall
-       rm -f $(OCAMLFIND_META_DIR)/$(@:%.uninstall=META.helm-%)
-$(MODULES:%=%.clean):
-       cd $(@:%.clean=%) && make clean
-META.helm-%: META.helm-%.src
-       cp $< $@ && echo "directory=\"$(CWD)/$(@:META.helm-%=%)\"" >> $@
-
-.PHONY: .dep.dot
-.dep.dot:
-       echo "digraph G {" > $@
-       echo "   rankdir = TB ;" >> $@
-       for i in $(MODULES); do ocamlfind query helm-$$i -recursive -p-format | grep helm | sed "s/^helm-/ \"$$i\" -> \"/g" | sed "s/$$/\";/g" >> $@ ; done
-       mv $@ $@.old ; ./simplify_deps/simplify_deps.opt < $@.old > $@ ; rm $@.old
-       echo "}" >> $@
-
-libraries.ps: .dep.dot
-       dot -Tps -o $@ $<
diff --git a/helm/ocaml/cic/.cvsignore b/helm/ocaml/cic/.cvsignore
deleted file mode 100644 (file)
index 6b3eba3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa
diff --git a/helm/ocaml/cic/.depend b/helm/ocaml/cic/.depend
deleted file mode 100644 (file)
index 591cea8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-deannotate.cmi: cic.cmo 
-cicParser3.cmi: cic.cmo 
-cicParser2.cmi: cic.cmo cicParser3.cmi 
-cicParser.cmi: cic.cmo 
-deannotate.cmo: cic.cmo deannotate.cmi 
-deannotate.cmx: cic.cmx deannotate.cmi 
-cicParser3.cmo: cic.cmo cicParser3.cmi 
-cicParser3.cmx: cic.cmx cicParser3.cmi 
-cicParser2.cmo: cic.cmo cicParser3.cmi cicParser2.cmi 
-cicParser2.cmx: cic.cmx cicParser3.cmx cicParser2.cmi 
-cicParser.cmo: cicParser2.cmi cicParser3.cmi deannotate.cmi cicParser.cmi 
-cicParser.cmx: cicParser2.cmx cicParser3.cmx deannotate.cmx cicParser.cmi 
diff --git a/helm/ocaml/cic/Makefile b/helm/ocaml/cic/Makefile
deleted file mode 100644 (file)
index c18667d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-PACKAGE = cic
-REQUIRES = helm-urimanager helm-pxp
-PREDICATES =
-
-INTERFACE_FILES = deannotate.mli cicParser3.mli cicParser2.mli cicParser.mli
-IMPLEMENTATION_FILES = cic.ml $(INTERFACE_FILES:%.mli=%.ml)
-EXTRA_OBJECTS_TO_INSTALL = cic.ml cic.cmi
-EXTRA_OBJECTS_TO_CLEAN =
-
-include ../Makefile.common
diff --git a/helm/ocaml/cic/cic.ml b/helm/ocaml/cic/cic.ml
deleted file mode 100644 (file)
index fd46c22..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 29/11/2000                                 *)
-(*                                                                            *)
-(* This module defines the internal representation of the objects (variables, *)
-(* blocks of (co)inductive definitions and constants) and the terms of cic    *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* STUFF TO MANAGE IDENTIFIERS *)
-type id = string  (* the abstract type of the (annotated) node identifiers *)
-type 'term explicit_named_substitution = (UriManager.uri * 'term) list
-
-type anntarget =
-   Object of annobj         (* if annobj is a Constant, this is its type *)
- | ConstantBody of annobj
- | Term of annterm
- | Conjecture of annconjecture
- | Hypothesis of annhypothesis
-
-(* INTERNAL REPRESENTATION OF CIC OBJECTS AND TERMS *)
-and sort =
-   Prop
- | Set
- | Type
-and name =
-   Name of string
- | Anonymous
-and term =
-   Rel of int                                       (* DeBrujin index *)
- | Var of UriManager.uri *                          (* uri,                   *)
-     term explicit_named_substitution               (*  explicit named subst. *)
- | Meta of int * (term option) list                 (* numeric id,    *)
-                                                    (*  local context *)
- | Sort of sort                                     (* sort *)
- | Implicit                                         (* *)
- | Cast of term * term                              (* value, type *)
- | Prod of name * term * term                       (* binder, source, target *)
- | Lambda of name * term * term                     (* binder, source, target *)
- | LetIn of name * term * term                      (* binder, term, target *)
- | Appl of term list                                (* arguments *)
- | Const of UriManager.uri *                        (* uri,                   *)
-     term explicit_named_substitution               (*  explicit named subst. *)
- | MutInd of UriManager.uri * int *                 (* uri, typeno, *)
-     term explicit_named_substitution               (*  explicit named subst. *)
-                                                    (* typeno is 0 based      *)
- | MutConstruct of UriManager.uri *                 (* uri,                   *)
-    int * int *                                     (*  typeno, consno        *)
-     term explicit_named_substitution               (*  explicit named subst. *)
-                                                    (* typeno is 0 based      *)
-                                                    (* consno is 1 based      *)
- | MutCase of UriManager.uri *                      (* ind. uri,             *)
-    int *                                           (*  ind. typeno,         *)
-    term * term *                                   (*  outtype, ind. term   *)
-    term list                                       (*  patterns             *)
- | Fix of int * inductiveFun list                   (* funno, functions *)
- | CoFix of int * coInductiveFun list               (* funno, functions *)
-and obj =
-   Constant of string * term option * term *      (* id, body, type,          *)
-    UriManager.uri list                           (*  parameters              *)
- | Variable of string * term option * term *      (* name, body, type         *)
-    UriManager.uri list                           (* parameters               *)
- | CurrentProof of string * metasenv *            (* name, conjectures,       *)
-    term * term * UriManager.uri list             (*  value, type, parameters *)
- | InductiveDefinition of inductiveType list *    (* inductive types,         *)
-    UriManager.uri list * int                     (*  parameters, n ind. pars *)
-and inductiveType = 
- string * bool * term *                       (* typename, inductive, arity *)
-  constructor list                            (*  constructors              *)
-and constructor =
- string * term                                (* id, type *)
-and inductiveFun =
- string * int * term * term                   (* name, ind. index, type, body *)
-and coInductiveFun =
- string * term * term                         (* name, type, body *)
-
-(* a metasenv is a list of declarations of metas in declarations *)
-(* order (i.e. [oldest ; ... ; newest]). Older variables can not *)
-(* depend on new ones.                                           *)
-and conjecture = int * context * term
-and metasenv = conjecture list
-
-(* a metasenv is a list of declarations of metas in declarations *)
-(* order (i.e. [oldest ; ... ; newest]). Older variables can not *)
-(* depend on new ones.                                           *)
-and annconjecture = id * int * anncontext * annterm
-and annmetasenv = annconjecture list
-
-and annterm =
-   ARel of id * id * int *                          (* idref, DeBrujin index, *)
-    string                                          (*  binder                *)
- | AVar of id * UriManager.uri *                    (* uri,                   *)
-    annterm explicit_named_substitution             (*  explicit named subst. *)
- | AMeta of id * int * (annterm option) list        (* numeric id,    *)
-                                                    (*  local context *)
- | ASort of id * sort                               (* sort *)
- | AImplicit of id                                  (* *)
- | ACast of id * annterm * annterm                  (* value, type *)
- | AProd of id * name * annterm * annterm           (* binder, source, target *)
- | ALambda of id * name * annterm * annterm         (* binder, source, target *)
- | ALetIn of id * name * annterm * annterm          (* binder, term, target *)
- | AAppl of id * annterm list                       (* arguments *)
- | AConst of id * UriManager.uri *                  (* uri,                   *)
-    annterm explicit_named_substitution             (*  explicit named subst. *)
- | AMutInd of id * UriManager.uri * int *           (* uri, typeno            *)
-    annterm explicit_named_substitution             (*  explicit named subst. *)
-                                                    (* typeno is 0 based *)
- | AMutConstruct of id * UriManager.uri *           (* uri,                   *)
-    int * int *                                     (*  typeno, consno        *)
-    annterm explicit_named_substitution             (*  explicit named subst. *)
-                                                    (* typeno is 0 based *)
-                                                    (* consno is 1 based *)
- | AMutCase of id * UriManager.uri *                (* ind. uri,             *)
-    int *                                           (*  ind. typeno,         *)
-    annterm * annterm *                             (*  outtype, ind. term   *)
-    annterm list                                    (*  patterns             *)
- | AFix of id * int * anninductiveFun list          (* funno, functions *)
- | ACoFix of id * int * anncoInductiveFun list      (* funno, functions *)
-and annobj =
-   AConstant of id * id option * string *           (* name,         *)
-    annterm option * annterm *                      (*  body, type,  *)
-    UriManager.uri list                             (*  parameters   *)
- | AVariable of id *
-    string * annterm option * annterm *             (* name, body, type *)
-    UriManager.uri list                             (*  parameters      *)
- | ACurrentProof of id * id *
-    string * annmetasenv *                          (*  name, conjectures,    *)
-    annterm * annterm * UriManager.uri list         (*  value,type,parameters *)
- | AInductiveDefinition of id *
-    anninductiveType list *                         (* inductive types ,      *)
-    UriManager.uri list * int                       (*  parameters,n ind. pars*)
-and anninductiveType = 
- id * string * bool * annterm *               (* typename, inductive, arity *)
-  annconstructor list                         (*  constructors              *)
-and annconstructor =
- string * annterm                             (* id, type *)
-and anninductiveFun =
- id * string * int * annterm * annterm        (* name, ind. index, type, body *)
-and anncoInductiveFun =
- id * string * annterm * annterm              (* name, type, body *)
-and annotation =
- string
-
-and context_entry =                            (* A declaration or definition *)
-   Decl of term
- | Def of term
-
-and hypothesis =
- (name * context_entry) option               (* None means no more accessible *)
-
-and context = hypothesis list
-
-and anncontext_entry =                         (* A declaration or definition *)
-   ADecl of annterm
- | ADef of annterm
-
-and annhypothesis =
- id * (name * anncontext_entry) option       (* None means no more accessible *)
-
-and anncontext = annhypothesis list;;
diff --git a/helm/ocaml/cic/cicParser.ml b/helm/ocaml/cic/cicParser.ml
deleted file mode 100644 (file)
index 38fe9e2..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This is the main (top level) module of a parser for cic objects from xml   *)
-(* files to the internal representation. It uses the modules cicParser2       *)
-(* (objects level) and cicParser3 (terms level)                               *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception Warnings;;
-
-class warner =
-  object 
-    method warn w =
-      prerr_endline ("WARNING: " ^ w) ;
-      (raise Warnings : unit)
-  end
-;;
-
-exception EmptyUri of string;;
-
-(* given the filename of an xml file of a cic object it returns its internal *)
-(* representation.                                                           *)
-let annobj_of_xml filename filenamebody =
- let module Y = Pxp_yacc in
-  try 
-    let root, rootbody =
-     let config = {Y.default_config with Y.warner = new warner} in
-      let doc =
-       Y.parse_document_entity config
-        (Y.from_file ~alt:[PxpUrlResolver.url_resolver] filename)
-        CicParser3.domspec in
-      let docroot = doc#root in
-       match filenamebody with
-          None -> docroot,None
-        | Some filename ->
-           let docbody =
-            Y.parse_document_entity config
-             (Y.from_file ~alt:[PxpUrlResolver.url_resolver] filename)
-             CicParser3.domspec
-           in
-            docroot,Some docbody#root
-    in
-     CicParser2.get_term root rootbody
-  with
-   e ->
-     prerr_endline ("Filenames: " ^ filename ^
-      (match filenamebody with None -> "" | Some s -> ", " ^ s)) ;
-     prerr_endline ("Exception: " ^ Pxp_types.string_of_exn e) ;
-     raise e
-;;
-
-let obj_of_xml filename filenamebody =
- Deannotate.deannotate_obj (annobj_of_xml filename filenamebody)
-;;
diff --git a/helm/ocaml/cic/cicParser.mli b/helm/ocaml/cic/cicParser.mli
deleted file mode 100644 (file)
index a965cf2..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 22/03/2000                                 *)
-(*                                                                            *)
-(* This is the main (top level) module of a parser for cic objects from xml   *)
-(* files to the internal representation. It uses the modules cicParser2       *)
-(* (objects level) and cicParser3 (terms level)                               *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* given the filename of an xml file of a cic object, it returns              *)
-(* its internal annotated representation. In the case of constants (whose     *)
-(* type is splitted from the body), a second xml file (for the body) must be  *)
-(* provided.                                                                  *)
-val annobj_of_xml : string -> string option -> Cic.annobj
-
-(* given the filename of an xml file of a cic object, it returns              *)
-(* its internal logical representation. In the case of constants (whose       *)
-(* type is splitted from the body), a second xml file (for the body) must be  *)
-(* provided.                                                                  *)
-val obj_of_xml : string -> string option -> Cic.obj
diff --git a/helm/ocaml/cic/cicParser2.ml b/helm/ocaml/cic/cicParser2.ml
deleted file mode 100644 (file)
index 15bc2b9..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@@cs.unibo.it>              *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module is the objects level of a parser for cic objects from xml      *)
-(* files to the internal representation. It uses the module cicParser3        *)
-(* cicParser3 (terms level) and it is used only through cicParser2 (top       *)
-(* level).                                                                    *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception IllFormedXml of int;;
-exception NotImplemented;;
-
-(* Utility functions that transform a Pxp attribute into something useful *)
-
-let uri_list_of_attr a =
- let module T = Pxp_types in
-  match a with
-     T.Value s ->
-      List.map UriManager.uri_of_string (Str.split (Str.regexp " ") s)
-   | _ -> raise (IllFormedXml 0)
-;;
-
-let string_of_attr a =
- let module T = Pxp_types in
-  match a with
-     T.Value s -> s
-   | _ -> raise (IllFormedXml 0)
-;;
-
-let int_of_attr a =
- int_of_string (string_of_attr a)
-;;
-
-let bool_of_attr a =
- bool_of_string (string_of_attr a)
-;;
-
-let name_of_attr a =
- let module T = Pxp_types in
- let module C = Cic in
-  match a with
-     T.Value s -> C.Name s
-   | T.Implied_value -> C.Anonymous
-   | _ -> raise (IllFormedXml 0)
-;;
-
-(* Other utility functions *)
-
-let get_content n =
- match n#sub_nodes with
-    [ t ] -> t
-  | _     -> raise (IllFormedXml 1)
-;;
-
-(* Functions that, given the list of sons of a node of the cic dom (objects   *)
-(* level), retrieve the internal representation associated to the node.       *)
-(* Everytime a cic term subtree is found, it is translated to the internal    *)
-(* representation using the method to_cic_term defined in cicParser3.         *)
-(* Each function raise IllFormedXml if something goes wrong, but this should  *)
-(* be impossible due to the presence of the dtd                               *)
-(* The functions should really be obvious looking at their name and the cic   *)
-(* dtd                                                                        *)
-
-(* called when a CurrentProof is found *)
-let get_conjs_value l =
- let rec rget (c, v) l =
-  let module D = Pxp_document in
-   match l with
-      [] -> (c, v)
-    | conj::tl when conj#node_type = D.T_element "Conjecture" ->
-       let no = int_of_attr (conj#attribute "no") in
-       let id = string_of_attr (conj#attribute "id") in
-       let typ,canonical_context =
-        match List.rev (conj#sub_nodes) with
-           [] -> raise (IllFormedXml 13)
-         | typ::canonical_context ->
-            (get_content typ)#extension#to_cic_term [],
-            List.map
-             (function n ->
-               let id = string_of_attr (n#attribute "id") in
-                match n#node_type with
-                   D.T_element "Decl" ->
-                    let name = name_of_attr (n#attribute "name") in
-                    let term = (get_content n)#extension#to_cic_term [] in
-                     id, Some (name,Cic.ADecl term)
-                 | D.T_element "Def" ->
-                    let name = name_of_attr (n#attribute "name") in
-                    let term = (get_content n)#extension#to_cic_term [] in
-                     id, Some (name,Cic.ADef term)
-                 | D.T_element "Hidden" -> id, None
-                 | _ -> raise (IllFormedXml 14)
-             ) canonical_context
-       in
-        rget ((id, no, canonical_context, typ)::c, v) tl
-    | value::tl when value#node_type = D.T_element "body" ->
-       let v' = (get_content value)#extension#to_cic_term [] in
-        (match v with
-            None -> rget (c, Some v') tl
-          | _    -> raise (IllFormedXml 2)
-        )
-    | _ -> raise (IllFormedXml 4)
- in
-  match rget ([], None) l with
-     (revc, Some v) -> (List.rev revc, v)
-   | _ -> raise (IllFormedXml 5)
-;;
-
-(* used only by get_inductive_types; called one time for each inductive  *)
-(* definitions in a block of inductive definitions                       *)
-let get_names_arity_constructors l =
- let rec rget (a,c) l =
-  let module D = Pxp_document in
-   match l with
-      [] -> (a, c)
-    | arity::tl when arity#node_type = D.T_element "arity" ->
-       let a' = (get_content arity)#extension#to_cic_term [] in
-        rget (Some a',c) tl
-    | con::tl when con#node_type = D.T_element "Constructor" ->
-       let id = string_of_attr (con#attribute "name")
-       and ty = (get_content con)#extension#to_cic_term [] in
-         rget (a,(id,ty)::c) tl
-    | _ -> raise (IllFormedXml 9)
- in
-  match rget (None,[]) l with
-     (Some a, c) -> (a, List.rev c)
-   | _ -> raise (IllFormedXml 8)
-;;
-
-(* called when an InductiveDefinition is found *)
-let rec get_inductive_types =
- function
-    []     -> []
-  | he::tl ->
-     let tyname    = string_of_attr (he#attribute "name")
-     and inductive = bool_of_attr   (he#attribute "inductive")
-     and xid = string_of_attr (he#attribute "id")
-     and (arity,cons) =
-      get_names_arity_constructors (he#sub_nodes)
-     in
-      (xid,tyname,inductive,arity,cons)::(get_inductive_types tl)
-;;
-
-(* This is the main function and also the only one used directly from *)
-(* cicParser. Given the root of the dom tree, it returns the internal *)
-(* representation of the cic object described in the tree             *)
-(* It uses the previous functions and the to_cic_term method defined  *)
-(* in cicParser3 (used for subtrees that encode cic terms)            *)
-let rec get_term (n : CicParser3.cic_term Pxp_document.node) nbody
-=
- let module U = UriManager in
- let module D = Pxp_document in
- let module C = Cic in
-  let ntype = n#node_type in
-  match ntype with
-    D.T_element "ConstantType" ->
-      let name = string_of_attr (n # attribute "name") in
-      let params = uri_list_of_attr (n#attribute "params") in
-      let xid = string_of_attr (n#attribute "id") in
-      let typ = (get_content n)#extension#to_cic_term [] in
-       (match nbody with
-           None ->
-            (* Axiom *)
-            C.AConstant (xid, None, name, None, typ, params)
-         | Some nbody' ->
-            let nbodytype = nbody'#node_type in
-            match nbodytype with
-             D.T_element "ConstantBody" ->
-(*CSC: the attribute "for" is ignored and not checked
-              let for_ = string_of_attr (nbody'#attribute "for") in
-*)
-              let paramsbody = uri_list_of_attr (nbody'#attribute "params") in
-              let xidbody = string_of_attr (nbody'#attribute "id") in
-              let value = (get_content nbody')#extension#to_cic_term [] in
-               if paramsbody = params then
-                C.AConstant (xid, Some xidbody, name, Some value, typ, params)
-               else
-                raise (IllFormedXml 6)
-           | D.T_element "CurrentProof" ->
-(*CSC: the attribute "of" is ignored and not checked
-              let for_ = string_of_attr (nbody'#attribute "of") in
-*)
-              let xidbody = string_of_attr (nbody'#attribute "id") in
-              let sons = nbody'#sub_nodes in
-               let (conjs, value) = get_conjs_value sons in
-                C.ACurrentProof (xid, xidbody, name, conjs, value, typ, params)
-           | D.T_element _
-           | D.T_data
-           | _ -> raise (IllFormedXml 6)
-       )
-  | D.T_element "InductiveDefinition" ->
-     let sons = n#sub_nodes
-     and xid = string_of_attr (n#attribute "id") in
-      let inductiveTypes = get_inductive_types sons
-      and params = uri_list_of_attr (n#attribute "params")
-      and nparams = int_of_attr (n#attribute "noParams") in
-       C.AInductiveDefinition (xid, inductiveTypes, params, nparams)
-  | D.T_element "Variable" ->
-     let name = string_of_attr (n#attribute "name")
-     and params = uri_list_of_attr (n#attribute "params")
-     and xid = string_of_attr (n#attribute "id")
-     and (body, typ) = 
-      let sons = n#sub_nodes in
-       match sons with
-          [b ; t] when
-            b#node_type = D.T_element "body" &&
-            t#node_type = D.T_element "type" ->
-             let b' = get_content b
-             and t' = get_content t in
-              (Some (b'#extension#to_cic_term []), t'#extension#to_cic_term [])
-        | [t] when t#node_type = D.T_element "type" ->
-             let t' = get_content t in
-              (None, t'#extension#to_cic_term [])
-        | _ -> raise (IllFormedXml 6)
-     in
-      C.AVariable (xid,name,body,typ,params)
-  | D.T_element _
-  | D.T_data
-  | _ -> raise (IllFormedXml 7)
-;;
diff --git a/helm/ocaml/cic/cicParser2.mli b/helm/ocaml/cic/cicParser2.mli
deleted file mode 100644 (file)
index 1d95f35..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module is the objects level of a parser for cic objects from xml      *)
-(* files to the internal representation. It uses the module cicParser3        *)
-(* cicParser3 (terms level) and it is used only through cicParser2 (top       *)
-(* level).                                                                    *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception IllFormedXml of int
-exception NotImplemented
-
-(* This is the main function and also the only one used directly from *)
-(* cicParser. Given the root of the dom tree and, possibly, also the  *)
-(* root of the dom tree of the constant body, it returns the internal *)
-(* representation of the cic object described in the tree(s).         *)
-(* It uses the previous functions and the to_cic_term method defined  *)
-(* in cicParser3 (used for subtrees that encode cic terms)            *)
-val get_term :
-  CicParser3.cic_term Pxp_document.node ->
-  CicParser3.cic_term Pxp_document.node option ->
-  Cic.annobj
diff --git a/helm/ocaml/cic/cicParser3.ml b/helm/ocaml/cic/cicParser3.ml
deleted file mode 100644 (file)
index 02d22b3..0000000
+++ /dev/null
@@ -1,550 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module is the terms level of a parser for cic objects from xml        *)
-(* files to the internal representation. It is used by the module cicParser2  *)
-(* (objects level). It defines an extension of the standard dom using the     *)
-(* object-oriented extension machinery of markup: an object with a method     *)
-(* to_cic_term that returns the internal representation of the subtree is     *)
-(* added to each node of the dom tree                                         *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception IllFormedXml of int;;
-
-(* Utility functions to map a markup attribute to something useful *)
-
-let cic_attr_of_xml_attr =
- function
-    Pxp_types.Value s       -> Cic.Name s
-  | Pxp_types.Implied_value -> Cic.Anonymous
-  | _             -> raise (IllFormedXml 1)
-
-let cic_sort_of_xml_attr =
- function
-    Pxp_types.Value "Prop" -> Cic.Prop
-  | Pxp_types.Value "Set"  -> Cic.Set
-  | Pxp_types.Value "Type" -> Cic.Type
-  | _            -> raise (IllFormedXml 2)
-
-let int_of_xml_attr =
- function
-    Pxp_types.Value n -> int_of_string n
-  | _       -> raise (IllFormedXml 3)
-
-let uri_of_xml_attr =
- function
-    Pxp_types.Value s -> UriManager.uri_of_string s
-  | _       -> raise (IllFormedXml 4)
-
-let string_of_xml_attr =
- function
-    Pxp_types.Value s -> s
-  | _       -> raise (IllFormedXml 5)
-
-let binder_of_xml_attr =
- function
-    Pxp_types.Value s -> s
-  | _       -> raise (IllFormedXml 17)
-;;
-
-(* the "interface" of the class linked to each node of the dom tree *)
-
-class virtual cic_term =
-  object (self)
-
-    (* fields and methods always required by markup *)
-    val mutable node = (None : cic_term Pxp_document.node option)
-
-    method clone = {< >} 
-    method node =
-      match node with
-          None ->
-            assert false
-        | Some n -> n
-    method set_node n =
-      node <- Some n
-
-    (* a method that returns the internal representation of the tree (term) *)
-    (* rooted in this node                                                  *)
-    method virtual to_cic_term :
-     (UriManager.uri * Cic.annterm) list -> Cic.annterm
-  end
-;;
-
-(* the class of the objects linked to nodes that are not roots of cic terms *)
-class eltype_not_of_cic =
-  object (self)
-
-     inherit cic_term
-
-     method to_cic_term _ = raise (IllFormedXml 6)
-  end
-;;
-
-(* the class of the objects linked to nodes whose content is a cic term *)
-(* (syntactic sugar xml entities) e.g. <type> ... </type>               *)
-class eltype_transparent =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      match n#sub_nodes with
-         [ t ]  -> t#extension#to_cic_term []
-       | _  -> raise (IllFormedXml 7)
-  end
-;;
-
-(* A class for each cic node type *)
-
-class eltype_fix =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      let nofun = int_of_xml_attr (n#attribute "noFun")
-      and id = string_of_xml_attr (n#attribute "id")
-      and functions =
-       let sons = n#sub_nodes in
-        List.map
-         (function
-             f when f#node_type = Pxp_document.T_element "FixFunction" ->
-              let name = string_of_xml_attr (f#attribute "name")
-              and id = string_of_xml_attr (f#attribute "id")
-              and recindex = int_of_xml_attr (f#attribute "recIndex")
-              and (ty, body) =
-               match f#sub_nodes with
-                  [t ; b] when
-                    t#node_type = Pxp_document.T_element "type" &&
-                    b#node_type = Pxp_document.T_element "body" ->
-                     (t#extension#to_cic_term [], b#extension#to_cic_term [])
-                | _ -> raise (IllFormedXml 14)
-              in
-               (id, name, recindex, ty, body)
-           | _ -> raise (IllFormedXml 13)
-         ) sons
-      in
-       Cic.AFix (id, nofun, functions)
-  end
-;;
-
-class eltype_cofix =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      let nofun = int_of_xml_attr (n#attribute "noFun")
-      and id = string_of_xml_attr (n#attribute "id")
-      and functions =
-       let sons = n#sub_nodes in
-        List.map
-         (function
-             f when f#node_type = Pxp_document.T_element "CofixFunction" ->
-              let name = string_of_xml_attr (f#attribute "name")
-              and id = string_of_xml_attr (f#attribute "id")
-              and (ty, body) =
-               match f#sub_nodes with
-                  [t ; b] when
-                    t#node_type = Pxp_document.T_element "type" &&
-                    b#node_type = Pxp_document.T_element "body" ->
-                     (t#extension#to_cic_term [], b#extension#to_cic_term [])
-                | _ -> raise (IllFormedXml 16)
-              in
-               (id, name, ty, body)
-           | _ -> raise (IllFormedXml 15)
-         ) sons
-      in
-       Cic.ACoFix (id, nofun, functions)
-  end
-;;
-
-class eltype_implicit =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      let id = string_of_xml_attr (n#attribute "id") in
-       Cic.AImplicit id
-  end
-;;
-
-class eltype_rel =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      let value  = int_of_xml_attr (n#attribute "value")
-      and binder = binder_of_xml_attr (n#attribute "binder")
-      and id = string_of_xml_attr (n#attribute "id")
-      and idref = string_of_xml_attr (n#attribute "idref") in
-       Cic.ARel (id,idref,value,binder)
-  end
-;;
-
-class eltype_meta =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      let value = int_of_xml_attr (n#attribute "no")
-      and id = string_of_xml_attr (n#attribute "id")
-      in
-       let local_context =
-        let sons = n#sub_nodes in
-         List.map
-          (function substitution ->
-            match substitution#sub_nodes with
-               [] -> None
-             | [he] -> Some (he#extension#to_cic_term [])
-             | _ -> raise (IllFormedXml 20)
-          ) sons
-       in
-        Cic.AMeta (id,value,local_context)
-  end
-;;
-
-class eltype_var =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      let uri = uri_of_xml_attr (n#attribute "uri")
-      and xid = string_of_xml_attr (n#attribute "id") in
-(*CSC: BIG BUG: [] MUST BE REPLACED WITH THE PARSED EXPLICIT NAMED SUBSTITUTION *)
-       Cic.AVar (xid,uri,[])
-  end
-;;
-
-class eltype_apply =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      let children = n#sub_nodes
-      and id = string_of_xml_attr (n#attribute "id") in
-       if List.length children < 2 then raise (IllFormedXml 8)
-       else
-        Cic.AAppl
-         (id,List.map (fun x -> x#extension#to_cic_term []) children)
-  end
-;;
-
-class eltype_cast =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      let sons = n#sub_nodes
-      and id = string_of_xml_attr (n#attribute "id") in
-       match sons with
-          [te ; ty] when
-            te#node_type = Pxp_document.T_element "term" &&
-            ty#node_type = Pxp_document.T_element "type" ->
-             let term = te#extension#to_cic_term []
-             and typ  = ty#extension#to_cic_term [] in
-              Cic.ACast (id,term,typ)
-        | _  -> raise (IllFormedXml 9)
-  end
-;;
-
-class eltype_sort =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      let sort = cic_sort_of_xml_attr (n#attribute "value")
-      and id = string_of_xml_attr (n#attribute "id") in
-       Cic.ASort (id,sort)
-  end
-;;
-
-class eltype_const =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     let module U = UriManager in
-      let n = self#node in
-       let value = uri_of_xml_attr (n#attribute "uri")
-       and id = string_of_xml_attr (n#attribute "id") in
-        Cic.AConst (id,value, exp_named_subst)
-  end
-;;
-
-class eltype_mutind =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     let module U = UriManager in
-      let n = self#node in
-       let name = uri_of_xml_attr (n#attribute "uri")
-       and noType = int_of_xml_attr (n#attribute "noType")
-       and id = string_of_xml_attr (n#attribute "id") in
-        Cic.AMutInd
-         (id,name, noType, exp_named_subst)
-  end
-;;
-
-class eltype_mutconstruct =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     let module U = UriManager in
-      let n = self#node in
-       let name = uri_of_xml_attr (n#attribute "uri")
-       and noType = int_of_xml_attr (n#attribute "noType")
-       and noConstr = int_of_xml_attr (n#attribute "noConstr")
-       and id = string_of_xml_attr (n#attribute "id") in
-        Cic.AMutConstruct
-         (id, name, noType, noConstr, exp_named_subst)
-  end
-;;
-
-class eltype_prod =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      let sons = n#sub_nodes in
-       let rec get_decls_and_target =
-        function
-           [t] when t#node_type = Pxp_document.T_element "target" ->
-            [],t#extension#to_cic_term []
-         | s::tl when s#node_type = Pxp_document.T_element "decl" ->
-            let decls,target = get_decls_and_target tl in
-             let id = string_of_xml_attr (s#attribute "id") in
-             let binder = cic_attr_of_xml_attr (s#attribute "binder") in
-              (id,binder,s#extension#to_cic_term [])::decls, target
-         | _  -> raise (IllFormedXml 10)
-       in
-        let decls,target = get_decls_and_target sons in
-         List.fold_right
-          (fun (id,b,s) t -> Cic.AProd (id,b,s,t))
-          decls target
-  end
-;;
-
-class eltype_mutcase =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let module U = UriManager in
-      let n = self#node in
-       let sons = n#sub_nodes
-       and id = string_of_xml_attr (n#attribute "id") in
-        match sons with
-           ty::te::patterns when
-             ty#node_type = Pxp_document.T_element "patternsType" &&
-             te#node_type = Pxp_document.T_element "inductiveTerm" ->
-              let ci = uri_of_xml_attr (n#attribute "uriType")
-              and typeno = int_of_xml_attr (n#attribute "noType")
-              and inductiveType = ty#extension#to_cic_term []
-              and inductiveTerm = te#extension#to_cic_term []
-              and lpattern =
-               List.map (fun x -> x#extension#to_cic_term []) patterns
-              in
-               Cic.AMutCase (id,ci, typeno,inductiveType,inductiveTerm,lpattern)
-         | _  -> raise (IllFormedXml 11)
-  end
-;;
-
-class eltype_lambda =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      let sons = n#sub_nodes in
-       let rec get_decls_and_target =
-        function
-           [t] when t#node_type = Pxp_document.T_element "target" ->
-            [],t#extension#to_cic_term []
-         | s::tl when s#node_type = Pxp_document.T_element "decl" ->
-            let decls,target = get_decls_and_target tl in
-             let id = string_of_xml_attr (s#attribute "id") in
-             let binder = cic_attr_of_xml_attr (s#attribute "binder") in
-              (id,binder,s#extension#to_cic_term [])::decls, target
-         | _  -> raise (IllFormedXml 12)
-       in
-        let decls,target = get_decls_and_target sons in
-         List.fold_right
-          (fun (id,b,s) t -> Cic.ALambda (id,b,s,t))
-          decls target
-  end
-;;
-
-class eltype_letin =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-      let sons = n#sub_nodes in
-       let rec get_defs_and_target =
-        function
-           [t] when t#node_type = Pxp_document.T_element "target" ->
-            [],t#extension#to_cic_term []
-         | s::tl when s#node_type = Pxp_document.T_element "def" ->
-            let defs,target = get_defs_and_target tl in
-             let id = string_of_xml_attr (s#attribute "id") in
-             let binder = cic_attr_of_xml_attr (s#attribute "binder") in
-              (id,binder,s#extension#to_cic_term [])::defs, target
-         | _  -> raise (IllFormedXml 12)
-       in
-        let defs,target = get_defs_and_target sons in
-         List.fold_right
-          (fun (id,b,s) t -> Cic.ALetIn (id,b,s,t))
-          defs target
-  end
-;;
-
-class eltype_instantiate =
-  object (self)
-
-    inherit cic_term
-
-    method to_cic_term exp_named_subst =
-     assert (exp_named_subst = []) ;
-     let n = self#node in
-(* CSC: this optional attribute should be parsed and reflected in Cic.annterm
-      and id = string_of_xml_attr (n#attribute "id")
-*)
-       match n#sub_nodes with
-          t::l  ->
-           let baseUri =
-            UriManager.buri_of_uri (uri_of_xml_attr (t#attribute "uri")) in
-           let exp_named_subst =
-            List.map
-             (function
-                 n when n#node_type = Pxp_document.T_element "arg" ->
-                  let relUri = string_of_xml_attr (n#attribute "relUri") in
-                  let uri = UriManager.uri_of_string (baseUri ^ "/" ^ relUri) in
-                  let arg =
-                   match n#sub_nodes with
-                      [ t ]  -> t#extension#to_cic_term []
-                    | _  -> raise (IllFormedXml 7)
-                  in
-                   (uri, arg)
-               | _ -> raise (IllFormedXml 7)
-             ) l
-           in
-            t#extension#to_cic_term exp_named_subst
-        | _  -> raise (IllFormedXml 7)
-  end
-;;
-
-
-(* The definition of domspec, an hashtable that maps each node type to the *)
-(* object that must be linked to it. Used by markup.                       *)
-
-let domspec =
- let module D = Pxp_document in
-  D.make_spec_from_alist
-   ~data_exemplar: (new D.data_impl (new eltype_not_of_cic))
-   ~default_element_exemplar: (new D.element_impl (new eltype_not_of_cic))
-   ~element_alist:
-    [ "REL",           (new D.element_impl (new eltype_rel)) ;
-      "VAR",           (new D.element_impl (new eltype_var)) ;
-      "META",          (new D.element_impl (new eltype_meta)) ;
-      "SORT",          (new D.element_impl (new eltype_sort)) ;
-      "IMPLICIT",      (new D.element_impl (new eltype_implicit)) ;
-      "CAST",          (new D.element_impl (new eltype_cast)) ;
-      "PROD",          (new D.element_impl (new eltype_prod)) ;
-      "LAMBDA",        (new D.element_impl (new eltype_lambda)) ;
-      "LETIN",         (new D.element_impl (new eltype_letin)) ;
-      "APPLY",         (new D.element_impl (new eltype_apply)) ;
-      "CONST",         (new D.element_impl (new eltype_const)) ;
-      "MUTIND",        (new D.element_impl (new eltype_mutind)) ;
-      "MUTCONSTRUCT",  (new D.element_impl (new eltype_mutconstruct)) ;
-      "MUTCASE",       (new D.element_impl (new eltype_mutcase)) ;
-      "FIX",           (new D.element_impl (new eltype_fix)) ;
-      "COFIX",         (new D.element_impl (new eltype_cofix)) ;
-      "instantiate",   (new D.element_impl (new eltype_instantiate)) ;
-      "arity",         (new D.element_impl (new eltype_transparent)) ;
-      "term",          (new D.element_impl (new eltype_transparent)) ;
-      "type",          (new D.element_impl (new eltype_transparent)) ;
-      "body",          (new D.element_impl (new eltype_transparent)) ;
-      "decl",          (new D.element_impl (new eltype_transparent)) ;
-      "def",           (new D.element_impl (new eltype_transparent)) ;
-      "target",        (new D.element_impl (new eltype_transparent)) ;
-      "letintarget",   (new D.element_impl (new eltype_transparent)) ;
-      "patternsType",  (new D.element_impl (new eltype_transparent)) ;
-      "inductiveTerm", (new D.element_impl (new eltype_transparent)) ;
-      "pattern",       (new D.element_impl (new eltype_transparent))
-    ]
-   ()
-;;
diff --git a/helm/ocaml/cic/cicParser3.mli b/helm/ocaml/cic/cicParser3.mli
deleted file mode 100644 (file)
index 3c2f5d9..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module is the terms level of a parser for cic objects from xml        *)
-(* files to the internal representation. It is used by the module cicParser2  *)
-(* (objects level). It defines an extension of the standard dom using the     *)
-(* object-oriented extension machinery of markup: an object with a method     *)
-(* to_cic_term that returns the internal representation of the subtree is     *)
-(* added to each node of the dom tree                                         *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception IllFormedXml of int
-
-(* the "interface" of the class linked to each node of the dom tree *)
-class virtual cic_term :
-  object ('a)
-
-    (* fields and methods ever required by markup *)
-    val mutable node : cic_term Pxp_document.node option
-    method clone : 'a
-    method node : cic_term Pxp_document.node
-    method set_node : cic_term Pxp_document.node -> unit
-
-    (* a method that returns the internal representation of the tree (term) *)
-    (* rooted in this node                                                  *)
-    method virtual to_cic_term :
-     (UriManager.uri * Cic.annterm) list -> Cic.annterm
-
-  end
-
-(* The definition of domspec, an hashtable that maps each node type to the *)
-(* object that must be linked to it. Used by markup.                       *)
-val domspec : cic_term Pxp_document.spec
diff --git a/helm/ocaml/cic/deannotate.ml b/helm/ocaml/cic/deannotate.ml
deleted file mode 100644 (file)
index df59305..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(* converts annotated terms into cic terms (forgetting ids and names) *)
-let rec deannotate_term =
- let module C = Cic in
-  function
-     C.ARel (_,_,n,_) -> C.Rel n
-   | C.AVar (_,uri,exp_named_subst) ->
-      let deann_exp_named_subst =
-       List.map (function (uri,t) -> uri,deannotate_term t) exp_named_subst
-      in
-       C.Var (uri, deann_exp_named_subst)
-   | C.AMeta (_,n, l) ->
-      let l' =
-       List.map
-        (function
-            None -> None
-          | Some at -> Some (deannotate_term at)
-        ) l
-      in
-       C.Meta (n, l')
-   | C.ASort (_,s) -> C.Sort s
-   | C.AImplicit _ -> C.Implicit
-   | C.ACast (_,va,ty) -> C.Cast (deannotate_term va, deannotate_term ty)
-   | C.AProd (_,name,so,ta) ->
-      C.Prod (name, deannotate_term so, deannotate_term ta)
-   | C.ALambda (_,name,so,ta) ->
-      C.Lambda (name, deannotate_term so, deannotate_term ta)
-   | C.ALetIn (_,name,so,ta) ->
-      C.LetIn (name, deannotate_term so, deannotate_term ta)
-   | C.AAppl (_,l) -> C.Appl (List.map deannotate_term l)
-   | C.AConst (_,uri,exp_named_subst) ->
-      let deann_exp_named_subst =
-       List.map (function (uri,t) -> uri,deannotate_term t) exp_named_subst
-      in
-       C.Const (uri, deann_exp_named_subst)
-   | C.AMutInd (_,uri,i,exp_named_subst) ->
-      let deann_exp_named_subst =
-       List.map (function (uri,t) -> uri,deannotate_term t) exp_named_subst
-      in
-       C.MutInd (uri,i,deann_exp_named_subst)
-   | C.AMutConstruct (_,uri,i,j,exp_named_subst) ->
-      let deann_exp_named_subst =
-       List.map (function (uri,t) -> uri,deannotate_term t) exp_named_subst
-      in
-       C.MutConstruct (uri,i,j,deann_exp_named_subst)
-   | C.AMutCase (_,uri,i,outtype,te,pl) ->
-      C.MutCase (uri,i,deannotate_term outtype,
-       deannotate_term te, List.map deannotate_term pl)
-   | C.AFix (_,funno,ifl) ->
-      C.Fix (funno, List.map deannotate_inductiveFun ifl)
-   | C.ACoFix (_,funno,ifl) ->
-      C.CoFix (funno, List.map deannotate_coinductiveFun ifl)
-
-and deannotate_inductiveFun (_,name,index,ty,bo) =
- (name, index, deannotate_term ty, deannotate_term bo)
-
-and deannotate_coinductiveFun (_,name,ty,bo) =
- (name, deannotate_term ty, deannotate_term bo)
-;;
-
-let deannotate_inductiveType (_, name, isinductive, arity, cons) =
- (name, isinductive, deannotate_term arity,
-  List.map (fun (id,ty) -> (id,deannotate_term ty)) cons)
-;;
-
-let deannotate_obj =
- let module C = Cic in
-  function
-     C.AConstant (_, _, id, bo, ty, params) ->
-      C.Constant (id,
-       (match bo with None -> None | Some bo -> Some (deannotate_term bo)),
-       deannotate_term ty, params)
-   | C.AVariable (_, name, bo, ty, params) ->
-      C.Variable (name,
-       (match bo with None -> None | Some bo -> Some (deannotate_term bo)),
-       deannotate_term ty, params)
-   | C.ACurrentProof (_, _, name, conjs, bo, ty, params) ->
-      C.CurrentProof (
-       name,
-        List.map
-         (function 
-           (_,id,acontext,con) -> 
-           let context = 
-            List.map 
-             (function 
-                 _,Some (n,(C.ADef at)) ->
-                   Some (n,(C.Def (deannotate_term at)))
-               | _,Some (n,(C.ADecl at)) ->
-                   Some (n,(C.Decl (deannotate_term at)))
-               | _,None -> None
-              ) acontext  
-            in
-            (id,context,deannotate_term con) 
-         ) conjs,
-       deannotate_term bo,deannotate_term ty,params
-      )
-   | C.AInductiveDefinition (_, tys, params, parno) ->
-      C.InductiveDefinition (List.map deannotate_inductiveType tys,
-       params, parno)
-;;
diff --git a/helm/ocaml/cic/deannotate.mli b/helm/ocaml/cic/deannotate.mli
deleted file mode 100644 (file)
index 89b18d2..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 29/11/2000                                 *)
-(*                                                                            *)
-(******************************************************************************)
-
-val deannotate_term : Cic.annterm -> Cic.term
-val deannotate_obj : Cic.annobj -> Cic.obj
diff --git a/helm/ocaml/cic_annotations/.cvsignore b/helm/ocaml/cic_annotations/.cvsignore
deleted file mode 100644 (file)
index 6b3eba3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa
diff --git a/helm/ocaml/cic_annotations/.depend b/helm/ocaml/cic_annotations/.depend
deleted file mode 100644 (file)
index 2c30fa7..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-cicXPath.cmo: cicXPath.cmi 
-cicXPath.cmx: cicXPath.cmi 
-cicAnnotation2Xml.cmo: cicXPath.cmi cicAnnotation2Xml.cmi 
-cicAnnotation2Xml.cmx: cicXPath.cmx cicAnnotation2Xml.cmi 
-cicAnnotationParser2.cmo: cicAnnotationParser2.cmi 
-cicAnnotationParser2.cmx: cicAnnotationParser2.cmi 
-cicAnnotationParser.cmo: cicAnnotationParser2.cmi cicAnnotationParser.cmi 
-cicAnnotationParser.cmx: cicAnnotationParser2.cmx cicAnnotationParser.cmi 
diff --git a/helm/ocaml/cic_annotations/Makefile b/helm/ocaml/cic_annotations/Makefile
deleted file mode 100644 (file)
index 2fbfe1b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-PACKAGE = cic_annotations
-REQUIRES = helm-cic helm-xml
-PREDICATES =
-
-INTERFACE_FILES = cicXPath.mli cicAnnotation2Xml.mli cicAnnotationParser2.mli \
-                  cicAnnotationParser.mli
-IMPLEMENTATION_FILES = $(INTERFACE_FILES:%.mli=%.ml)
-EXTRA_OBJECTS_TO_INSTALL =
-EXTRA_OBJECTS_TO_CLEAN =
-
-include ../Makefile.common
diff --git a/helm/ocaml/cic_annotations/cicAnnotation2Xml.ml b/helm/ocaml/cic_annotations/cicAnnotation2Xml.ml
deleted file mode 100644 (file)
index 353ef1f..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*CSC codice cut & paste da cicPp e xmlcommand *)
-
-exception NotImplemented;;
-
-let dtdname = "http://www.cs.unibo.it/helm/dtd/annotations.dtd";;
-
-let get_ann ids_to_annotations =
- CicXPath.get_annotation ids_to_annotations
-;;
-
-let print_ann i2a id =
- let module X = Xml in
-  let ann = get_ann i2a id in
-   match ann with
-      None -> [<>]
-    | Some ann -> (X.xml_nempty "Annotation" ["of", id] (X.xml_cdata ann))
-;;
-
-(*CSC ottimizzazione: al posto di curi cdepth (vedi codice) *)
-(* It takes in input a hash table mapping ids to annotations, an annotated 
-term, and gives back a Xml.token Stream.t representing the .ann file *)
-let print_term i2a =
- let rec aux =
-  let module C = Cic in
-  let module X = Xml in
-  let module U = UriManager in
-    function
-       C.ARel (id,_,_,_) -> print_ann i2a id
-     | C.AMeta (id,_,_) -> print_ann i2a id
-     | C.ASort (id,_) -> print_ann i2a id
-     | C.AImplicit _ -> raise NotImplemented
-     | C.AProd (id,_,s,t) -> [< print_ann i2a id ; aux s ; aux t >]
-     | C.ACast (id,v,t) -> [< print_ann i2a id ; aux v ; aux t >]
-     | C.ALambda (id,_,s,t) -> [< print_ann i2a id ; aux s ; aux t >]
-     | C.ALetIn (id,_,s,t) -> [< print_ann i2a id ; aux s ; aux t >]
-     | C.AAppl (id,li) ->
-        [< print_ann i2a id ;
-           List.fold_right (fun x i -> [< (aux x) ; i >]) li [<>]
-        >]
-     | C.AVar (id,_,exp_named_subst)
-     | C.AConst (id,_,exp_named_subst)
-     | C.AMutInd (id,_,_,exp_named_subst)
-     | C.AMutConstruct (id,_,_,_,exp_named_subst) ->
-        [< print_ann i2a id ;
-           List.fold_right
-            (fun (_,x) i -> [< aux x ; i >])
-            exp_named_subst [<>]
-        >] 
-     | C.AMutCase (id,_,_,ty,te,patterns) ->
-        [< print_ann i2a id ;
-           aux ty ;
-           aux te ;
-           List.fold_right
-            (fun x i -> [< aux x ; i>])
-            patterns [<>]
-        >]
-     | C.AFix (id,_,funs) ->
-        [< print_ann i2a id ;
-           List.fold_right
-            (fun (_,_,_,ti,bi) i -> [< aux ti ; aux bi ; i >]) funs [<>]
-        >]
-     | C.ACoFix (id,no,funs) ->
-        [< print_ann i2a id ;
-           List.fold_right
-            (fun (_,_,ti,bi) i -> [< aux ti ; aux bi ; i >]) funs [<>]
-        >]
- in
-  aux
-;;
-
-let print_mutual_inductive_type i2a (_,_,_,arity,constructors) =
- [< print_term i2a arity ;
-    List.fold_right
-     (fun (name,ty) i -> [< print_term i2a ty ; i >]) constructors [<>]
- >]
-;;
-
-let pp_annotation obj i2a curi =
- let module C = Cic in
- let module X = Xml in
-  [< X.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
-     X.xml_cdata ("<!DOCTYPE Annotations SYSTEM \"" ^ dtdname ^ "\">\n\n") ;
-     X.xml_nempty "Annotations"
-      ["of", UriManager.string_of_uri (UriManager.cicuri_of_uri curi)]
-      begin
-       match obj with
-         C.AConstant (xid, xidobj, _, te, ty, _) ->
-          [< print_ann i2a xid ;
-             (match xidobj,te with
-                 Some xidobj, Some te ->
-                  [< print_ann i2a xidobj ;
-                     print_term i2a te
-                  >]
-               | None, None -> [<>]
-               | _,_ -> assert false
-             ) ;
-             print_term i2a ty
-          >]
-       | C.AVariable (xid, _, bo, ty,_) ->
-          [< print_ann i2a xid ;
-             (match bo with
-                 None -> [<>]
-               | Some bo -> print_term i2a bo
-             ) ;
-             print_term i2a ty
-          >]
-       | C.ACurrentProof (xid, xidobj, _, conjs, bo, ty,_) ->
-          [< print_ann i2a xid ;
-             print_ann i2a xidobj ;
-             List.fold_right
-              (fun (cid, _, context, t) i ->
-                [< print_ann i2a cid ;
-                   List.fold_right
-                   (fun (hid,context_entry) i -> 
-                     [<print_ann i2a hid ;
-                        (match context_entry with
-                           Some (_,C.ADecl at) -> print_term i2a at
-                         | Some (_,C.ADef at) -> print_term i2a at
-                         | None -> [< >]
-                        ) ; i
-                       >]
-                   ) context [< >];
-                  print_term i2a t ; i
-                >]
-              ) conjs [<>] ;
-             print_term i2a bo ;
-             print_term i2a ty
-          >]
-       | C.AInductiveDefinition (xid, tys, params, paramsno) ->
-          [< print_ann i2a xid ;
-             List.fold_right
-              (fun x i -> [< print_mutual_inductive_type i2a x ; i >])
-              tys [< >]
-          >]
-      end
-  >]
-;;
-
-
-
diff --git a/helm/ocaml/cic_annotations/cicAnnotation2Xml.mli b/helm/ocaml/cic_annotations/cicAnnotation2Xml.mli
deleted file mode 100644 (file)
index 69faf6e..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 29/11/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-val pp_annotation :
- Cic.annobj -> (Cic.id, string) Hashtbl.t -> UriManager.uri ->
-  Xml.token Stream.t
diff --git a/helm/ocaml/cic_annotations/cicAnnotationParser.ml b/helm/ocaml/cic_annotations/cicAnnotationParser.ml
deleted file mode 100644 (file)
index d8c67ea..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception Warnings;;
-
-class warner =
-  object 
-    method warn w =
-      print_endline ("WARNING: " ^ w) ;
-      (raise Warnings : unit)
-  end
-;;
-
-exception EmptyUri;;
-
-let get_annotations filename =
- let module Y = Pxp_yacc in
-  try 
-    let d =
-     let config = {Y.default_config with Y.warner = new warner} in
-      Y.parse_document_entity config
-       (Y.from_file ~alt:[PxpUrlResolver.url_resolver] filename)
-       Y.default_spec
-
-    in
-     CicAnnotationParser2.get_annotations d#root
-  with
-   e ->
-     print_endline (Pxp_types.string_of_exn e) ;
-     raise e
-;;
diff --git a/helm/ocaml/cic_annotations/cicAnnotationParser.mli b/helm/ocaml/cic_annotations/cicAnnotationParser.mli
deleted file mode 100644 (file)
index 582013e..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 29/11/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-val get_annotations : string -> (Cic.id, string) Hashtbl.t
diff --git a/helm/ocaml/cic_annotations/cicAnnotationParser2.ml b/helm/ocaml/cic_annotations/cicAnnotationParser2.ml
deleted file mode 100644 (file)
index 15d86f5..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception IllFormedXml of int;;
-
-(* Utility functions that transform a Pxp attribute into something useful *)
-
-let string_of_attr a =
- let module T = Pxp_types in
-  match a with
-     T.Value s -> s
-   | _ -> raise (IllFormedXml 0)
-;;
-
-exception DontKnowWhatToDo;;
-
-let rec string_of_annotations n =
- let module D = Pxp_document in
- let module T = Pxp_types in
-  match n#node_type with
-     D.T_element s ->
-      "<" ^ s ^
-      List.fold_right
-       (fun att i ->
-         match n#attribute att with
-            T.Value s -> " " ^ att ^ "=\"" ^ s ^ "\"" ^ i
-          | T.Implied_value -> i
-          | T.Valuelist l -> " " ^ att ^ "=\"" ^ String.concat " " l ^ "\"" ^ i
-       ) (n#attribute_names) "" ^
-      (match n#sub_nodes with
-          [] -> "/>"
-        | l ->
-           ">" ^
-           String.concat "" (List.map string_of_annotations l) ^
-           "</" ^ s ^ ">"
-      )
-   | D.T_data -> n#data
-   | _ -> raise DontKnowWhatToDo
-;;
-
-let get_annotation_from_node n =
- String.concat "" (List.map string_of_annotations (n#sub_nodes))
-;;
-
-exception MoreThanOneAnnotationFor of Cic.id;;
-
-let set_annotation ids_to_annotations id ann =
- try
-  ignore (Hashtbl.find ids_to_annotations id) ;
-  raise (MoreThanOneAnnotationFor id)
- with
-  Not_found -> Hashtbl.add ids_to_annotations id ann
-;;
-
-let get_annotations n =
- let module D = Pxp_document in
- let module C = Cic in
-  let ids_to_annotations = Hashtbl.create 503 in
-   let annotate_elem n =
-    let ntype = n # node_type in
-    match ntype with
-      D.T_element "Annotation" ->
-        let of_uri = string_of_attr (n # attribute "of") in
-         set_annotation ids_to_annotations of_uri (get_annotation_from_node n)
-    | D.T_element _ | D.T_data ->
-       raise (IllFormedXml 1)
-    | _ -> raise DontKnowWhatToDo
-   in
-    match n # node_type with
-       D.T_element "Annotations" ->
-        List.iter annotate_elem (n # sub_nodes) ;
-        ids_to_annotations
-     | _ -> raise (IllFormedXml 2)
-;;
diff --git a/helm/ocaml/cic_annotations/cicAnnotationParser2.mli b/helm/ocaml/cic_annotations/cicAnnotationParser2.mli
deleted file mode 100644 (file)
index f16bb6f..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 29/11/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception IllFormedXml of int
-val get_annotations :
-  < node_type : Pxp_document.node_type;
-    sub_nodes : < attribute : string -> Pxp_types.att_value;
-                  node_type : Pxp_document.node_type;
-                  sub_nodes : (< attribute : string -> Pxp_types.att_value;
-                                 attribute_names : string list;
-                                 data : string;
-                                 node_type : Pxp_document.node_type;
-                                 sub_nodes : 'a list; .. > as 'a)
-                              list;
-                  .. >
-                list;
-    .. > ->
-  (Cic.id, string) Hashtbl.t
diff --git a/helm/ocaml/cic_annotations/cicXPath.ml b/helm/ocaml/cic_annotations/cicXPath.ml
deleted file mode 100644 (file)
index b20fbd5..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 14/06/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-let get_annotation ids_to_annotations xpath =
- try
-  Some (Hashtbl.find ids_to_annotations xpath)
- with
-  Not_found -> None
-;;
-
-exception MoreThanOneTargetFor of Cic.id;;
-
-(* creates a hashtable mapping each unique id to a node of the annotated 
-object *)
-let get_ids_to_targets annobj =
- let module C = Cic in
-  let ids_to_targets = Hashtbl.create 503 in
-   let set_target id target =
-    try
-     ignore (Hashtbl.find ids_to_targets id) ;
-     raise (MoreThanOneTargetFor id)
-    with
-     Not_found -> Hashtbl.add ids_to_targets id target
-   in
-    let rec add_target_term t =
-     match t with
-        C.ARel (id,_,_,_)
-      | C.AMeta (id,_,_)
-      | C.ASort (id,_)
-      | C.AImplicit id ->
-         set_target id (C.Term t)
-      | C.ACast (id,va,ty) ->
-         set_target id (C.Term t) ;
-         add_target_term va ;
-         add_target_term ty
-      | C.AProd (id,_,so,ta)
-      | C.ALambda (id,_,so,ta)
-      | C.ALetIn (id,_,so,ta) ->
-         set_target id (C.Term t) ;
-         add_target_term so ;
-         add_target_term ta
-      | C.AAppl (id,l) ->
-         set_target id (C.Term t) ;
-         List.iter add_target_term l
-      | C.AVar (id,_,exp_named_subst)
-      | C.AConst (id,_,exp_named_subst)
-      | C.AMutInd (id,_,_,exp_named_subst)
-      | C.AMutConstruct (id,_,_,_,exp_named_subst) ->
-         set_target id (C.Term t) ;
-         List.iter (function (_,t) -> add_target_term t) exp_named_subst
-      | C.AMutCase (id,_,_,ot,it,pl) ->
-         set_target id (C.Term t) ;
-         List.iter add_target_term (ot::it::pl)
-      | C.AFix (id,_,ifl) ->
-         set_target id (C.Term t) ;
-         List.iter
-          (function (_,_,_,ty,bo) ->
-            add_target_term ty ;
-            add_target_term bo
-          ) ifl
-      | C.ACoFix (id,_,cfl) ->
-         set_target id (C.Term t) ;
-         List.iter
-          (function (_,_,ty,bo) ->
-            add_target_term ty ;
-            add_target_term bo
-          ) cfl
-    in
-     let add_target_obj annobj =
-      match annobj with
-        C.AConstant (id,idbody,_,bo,ty,_) ->
-         set_target id (C.Object annobj) ;
-         (match idbody,bo with
-             Some idbody,Some bo ->
-              set_target idbody (C.ConstantBody annobj) ;
-              add_target_term bo
-           | None, None -> ()
-           | _,_ -> assert false
-         ) ;
-         add_target_term ty
-      | C.AVariable (id,_,None,ty,_) ->
-         set_target id (C.Object annobj) ;
-         add_target_term ty
-      | C.AVariable (id,_,Some bo,ty,_) ->
-         set_target id (C.Object annobj) ;
-         add_target_term bo ;
-         add_target_term ty
-      | C.ACurrentProof (id,idbody,_,cl,bo,ty,_) ->
-         set_target id (C.Object annobj) ;
-         set_target idbody (C.ConstantBody annobj) ;
-         List.iter (function (cid,_,context, t) as annconj ->
-           set_target cid (C.Conjecture annconj) ;
-          List.iter 
-            (function ((hid,h) as annhyp) ->
-               set_target hid (C.Hypothesis annhyp) ;
-               match h with
-                 Some (_,C.ADecl at) -> add_target_term at
-               | Some (_,C.ADef at) -> add_target_term at
-               | None -> ()
-            ) context;
-          add_target_term t) cl ;
-         add_target_term bo ;
-         add_target_term ty
-      | C.AInductiveDefinition (id,itl,_,_) ->
-         set_target id (C.Object annobj) ;
-         List.iter
-          (function (_,_,_,arity,cl) ->
-            add_target_term arity ;
-            List.iter (function (_,ty) -> add_target_term ty) cl
-          ) itl
-     in
-      add_target_obj annobj ;
-      ids_to_targets
-;;
diff --git a/helm/ocaml/cic_annotations/cicXPath.mli b/helm/ocaml/cic_annotations/cicXPath.mli
deleted file mode 100644 (file)
index 23380e0..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 29/11/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-val get_annotation :
- (Cic.id, string) Hashtbl.t -> Cic.id -> string option
-
-val get_ids_to_targets : Cic.annobj -> (Cic.id, Cic.anntarget) Hashtbl.t
diff --git a/helm/ocaml/cic_annotations_cache/.cvsignore b/helm/ocaml/cic_annotations_cache/.cvsignore
deleted file mode 100644 (file)
index 6b3eba3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa
diff --git a/helm/ocaml/cic_annotations_cache/.depend b/helm/ocaml/cic_annotations_cache/.depend
deleted file mode 100644 (file)
index 06775e1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-cicCache.cmo: cicCache.cmi 
-cicCache.cmx: cicCache.cmi 
diff --git a/helm/ocaml/cic_annotations_cache/Makefile b/helm/ocaml/cic_annotations_cache/Makefile
deleted file mode 100644 (file)
index 8b80b4f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-PACKAGE = cic_annotations_cache
-REQUIRES = helm-cic_annotations
-PREDICATES =
-
-INTERFACE_FILES = cicCache.mli
-IMPLEMENTATION_FILES = $(INTERFACE_FILES:%.mli=%.ml)
-EXTRA_OBJECTS_TO_INSTALL =
-EXTRA_OBJECTS_TO_CLEAN =
-
-include ../Makefile.common
diff --git a/helm/ocaml/cic_annotations_cache/cicCache.ml b/helm/ocaml/cic_annotations_cache/cicCache.ml
deleted file mode 100644 (file)
index de5c192..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module implements a trival cache system (an hash-table) for cic       *)
-(* objects. Uses the getter (getter.ml) and the parser (cicParser.ml)         *)
-(*                                                                            *)
-(******************************************************************************)
-
-let get_annobj uri =
- let module G = Getter in
- let module U = UriManager in
-  let cicfilename = G.getxml (U.cicuri_of_uri uri) in
-  let cicbodyfilename =
-   match U.bodyuri_of_uri uri with
-      None -> None
-    | Some bodyuri ->
-       Some (G.getxml (U.cicuri_of_uri bodyuri))
-  in
-   let annobj = CicParser.annobj_of_xml cicfilename cicbodyfilename in
-    annobj,
-     if U.uri_is_annuri uri then
-      begin
-       let annfilename = G.getxml (U.annuri_of_uri uri) in
-        Some (CicAnnotationParser.get_annotations annfilename)
-      end
-     else
-      None
-;;
diff --git a/helm/ocaml/cic_annotations_cache/cicCache.mli b/helm/ocaml/cic_annotations_cache/cicCache.mli
deleted file mode 100644 (file)
index 160a162..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module implements a trival cache system (an hash-table) for cic       *)(* objects. Uses the getter (getter.ml) and the parser (cicParser.ml)         *)(*                                                                            *)
-(******************************************************************************)
-
-val get_annobj :
- UriManager.uri -> Cic.annobj * (Cic.id, string) Hashtbl.t option
diff --git a/helm/ocaml/cic_cache/.cvsignore b/helm/ocaml/cic_cache/.cvsignore
deleted file mode 100644 (file)
index 6b3eba3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa
diff --git a/helm/ocaml/cic_cache/.depend b/helm/ocaml/cic_cache/.depend
deleted file mode 100644 (file)
index 06775e1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-cicCache.cmo: cicCache.cmi 
-cicCache.cmx: cicCache.cmi 
diff --git a/helm/ocaml/cic_cache/Makefile b/helm/ocaml/cic_cache/Makefile
deleted file mode 100644 (file)
index 672f904..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-PACKAGE = cic_cache
-REQUIRES = helm-cic
-PREDICATES =
-
-INTERFACE_FILES = cicCache.mli
-IMPLEMENTATION_FILES = $(INTERFACE_FILES:%.mli=%.ml)
-EXTRA_OBJECTS_TO_INSTALL =
-EXTRA_OBJECTS_TO_CLEAN =
-
-include ../Makefile.common
diff --git a/helm/ocaml/cic_cache/cicCache.ml b/helm/ocaml/cic_cache/cicCache.ml
deleted file mode 100644 (file)
index 1080c39..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module implements a trival cache system (an hash-table) for cic       *)
-(* objects. Uses the getter (getter.ml) and the parser (cicParser.ml)         *)
-(*                                                                            *)
-(******************************************************************************)
-
-let get_annobj uri =
- let module G = Getter in
- let module U = UriManager in
-  let cicfilename = G.getxml (U.cicuri_of_uri uri) in
-   match (U.bodyuri_of_uri uri) with
-      None ->
-        CicParser.annobj_of_xml cicfilename None
-    | Some bodyuri ->
-       let cicbodyfilename = G.getxml (U.cicuri_of_uri bodyuri) in
-        CicParser.annobj_of_xml cicfilename (Some cicbodyfilename)
-;;
-
-let get_obj uri =
- let module G = Getter in
- let module U = UriManager in
-  let cicfilename = G.getxml (U.cicuri_of_uri uri) in
-   match (U.bodyuri_of_uri uri) with
-      None ->
-        CicParser.obj_of_xml cicfilename None
-    | Some bodyuri ->
-       let cicbodyfilename = G.getxml (U.cicuri_of_uri bodyuri) in
-        CicParser.obj_of_xml cicfilename (Some cicbodyfilename)
-;;
diff --git a/helm/ocaml/cic_cache/cicCache.mli b/helm/ocaml/cic_cache/cicCache.mli
deleted file mode 100644 (file)
index 58aa617..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module implements a trival cache system (an hash-table) for cic       *)(* objects. Uses the getter (getter.ml) and the parser (cicParser.ml)         *)(*                                                                            *)
-(******************************************************************************)
-
-val get_obj : UriManager.uri -> Cic.obj
-val get_annobj : UriManager.uri -> Cic.annobj
diff --git a/helm/ocaml/cic_proof_checking/.cvsignore b/helm/ocaml/cic_proof_checking/.cvsignore
deleted file mode 100644 (file)
index 333bd15..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-*.cm[iaox] *.cmxa
-cicReduction.ml
-.dep.dot
-cic_proof_checking.ps
diff --git a/helm/ocaml/cic_proof_checking/.depend b/helm/ocaml/cic_proof_checking/.depend
deleted file mode 100644 (file)
index c1319a6..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-logger.cmo: logger.cmi 
-logger.cmx: logger.cmi 
-cicEnvironment.cmo: logger.cmi cicEnvironment.cmi 
-cicEnvironment.cmx: logger.cmx cicEnvironment.cmi 
-cicPp.cmo: cicEnvironment.cmi cicPp.cmi 
-cicPp.cmx: cicEnvironment.cmx cicPp.cmi 
-cicSubstitution.cmo: cicEnvironment.cmi cicSubstitution.cmi 
-cicSubstitution.cmx: cicEnvironment.cmx cicSubstitution.cmi 
-cicMiniReduction.cmo: cicSubstitution.cmi cicMiniReduction.cmi 
-cicMiniReduction.cmx: cicSubstitution.cmx cicMiniReduction.cmi 
-cicReductionNaif.cmo: cicEnvironment.cmi cicPp.cmi cicSubstitution.cmi \
-    cicReductionNaif.cmi 
-cicReductionNaif.cmx: cicEnvironment.cmx cicPp.cmx cicSubstitution.cmx \
-    cicReductionNaif.cmi 
-cicReduction.cmo: cicEnvironment.cmi cicPp.cmi cicSubstitution.cmi \
-    cicReduction.cmi 
-cicReduction.cmx: cicEnvironment.cmx cicPp.cmx cicSubstitution.cmx \
-    cicReduction.cmi 
-cicTypeChecker.cmo: cicEnvironment.cmi cicPp.cmi cicReduction.cmi \
-    cicSubstitution.cmi logger.cmi cicTypeChecker.cmi 
-cicTypeChecker.cmx: cicEnvironment.cmx cicPp.cmx cicReduction.cmx \
-    cicSubstitution.cmx logger.cmx cicTypeChecker.cmi 
diff --git a/helm/ocaml/cic_proof_checking/Makefile b/helm/ocaml/cic_proof_checking/Makefile
deleted file mode 100644 (file)
index 0259eff..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-PACKAGE = cic_proof_checking
-REQUIRES = helm-cic
-PREDICATES =
-
-REDUCTION_IMPLEMENTATION = cicReductionMachine.ml
-
-INTERFACE_FILES = logger.mli cicEnvironment.mli cicPp.mli cicSubstitution.mli \
-                  cicMiniReduction.mli cicReductionNaif.mli cicReduction.mli \
-                  cicTypeChecker.mli
-IMPLEMENTATION_FILES = $(INTERFACE_FILES:%.mli=%.ml)
-
-# Metadata tools only need zeta-reduction
-EXTRA_OBJECTS_TO_INSTALL = \
-            cicSubstitution.cmo cicSubstitution.cmx cicSubstitution.o \
-            cicMiniReduction.cmo cicMiniReduction.cmx cicMiniReduction.o
-EXTRA_OBJECTS_TO_CLEAN =
-
-include ../Makefile.common
-
-cicReduction.ml: $(REDUCTION_IMPLEMENTATION)
-       if ! [ -f $@ ]; then \
-               echo "Using $< for $@"; \
-               ln -s $< $@;    \
-       else    \
-               true;   \
-       fi
-
diff --git a/helm/ocaml/cic_proof_checking/cicEnvironment.ml b/helm/ocaml/cic_proof_checking/cicEnvironment.ml
deleted file mode 100644 (file)
index 823aa3a..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module implements a trival cache system (an hash-table) for cic       *)
-(* objects. Uses the getter (getter.ml) and the parser (cicParser.ml)         *)
-(*                                                                            *)
-(******************************************************************************)
-
-let cleanup_tmp = true;;
-
-let trust_obj = function uri -> true;;
-
-type type_checked_obj =
-   CheckedObj of Cic.obj     (* cooked obj *)
- | UncheckedObj of Cic.obj   (* uncooked obj to proof-check *)
-;;
-
-
-exception AlreadyCooked of string;;
-exception CircularDependency of string;;
-exception CouldNotFreeze of string;;
-exception CouldNotUnfreeze of string;;
-
-(* Cache that uses == instead of = for testing equality *)
-(* Invariant: an object is always in at most one of the *)
-(* following states: unchecked, frozen and cooked.      *)
-module Cache :
-  sig
-   val find_or_add_unchecked :
-    UriManager.uri -> get_object_to_add:(unit -> Cic.obj) -> Cic.obj
-   val unchecked_to_frozen : UriManager.uri -> unit
-   val frozen_to_cooked :
-    uri:UriManager.uri -> unit
-   val find_cooked : key:UriManager.uri -> Cic.obj
-   val add_cooked : key:UriManager.uri -> Cic.obj -> unit
-  end 
-=
-  struct
-   module CacheOfCookedObjects :
-    sig
-     val mem  : UriManager.uri -> bool
-     val find : UriManager.uri -> Cic.obj
-     val add  : UriManager.uri -> Cic.obj -> unit
-    end
-   =
-    struct
-     module HashedType =
-      struct
-       type t = UriManager.uri
-       let equal = UriManager.eq
-       let hash = Hashtbl.hash
-      end
-     ;;
-     module HT = Hashtbl.Make(HashedType);;
-     let hashtable = HT.create 1009;;
-     let mem uri =
-      try
-       HT.mem hashtable uri
-      with
-       Not_found -> false
-     ;;
-     let find uri = HT.find hashtable uri
-     ;;
-     let add uri obj =
-      HT.add hashtable uri obj
-     ;;
-    end
-   ;;
-   let frozen_list = ref [];;
-   let unchecked_list = ref [];;
-
-   let find_or_add_unchecked uri ~get_object_to_add =
-    try
-     List.assq uri !unchecked_list
-    with
-     Not_found ->
-      if List.mem_assq uri !frozen_list then
-       raise (CircularDependency (UriManager.string_of_uri uri))
-      else
-       if CacheOfCookedObjects.mem uri then
-        raise (AlreadyCooked (UriManager.string_of_uri uri))
-       else
-        (* OK, it is not already frozen nor cooked *)
-        let obj = get_object_to_add () in
-         unchecked_list := (uri,obj)::!unchecked_list ;
-         obj
-   ;;
-   let unchecked_to_frozen uri =
-    try
-     let obj = List.assq uri !unchecked_list in
-      unchecked_list := List.remove_assq uri !unchecked_list ;
-      frozen_list := (uri,obj)::!frozen_list
-    with
-     Not_found -> raise (CouldNotFreeze (UriManager.string_of_uri uri))
-   ;;
-   let frozen_to_cooked ~uri =
-    try
-     let obj = List.assq uri !frozen_list in
-      frozen_list := List.remove_assq uri !frozen_list ;
-       CacheOfCookedObjects.add uri obj
-    with
-     Not_found -> raise (CouldNotUnfreeze (UriManager.string_of_uri uri))
-   ;;
-   let find_cooked ~key:uri = CacheOfCookedObjects.find uri;;
-   let add_cooked ~key:uri obj = CacheOfCookedObjects.add uri obj;;
-  end
-;;
-
-let find_or_add_unchecked_to_cache uri =
- Cache.find_or_add_unchecked uri
-  ~get_object_to_add:
-   (function () ->
-     let filename = Getter.getxml uri in
-     let bodyfilename =
-      match UriManager.bodyuri_of_uri uri with
-         None -> None
-       | Some bodyuri ->
-          try
-           ignore (Getter.resolve bodyuri) ;
-           (* The body exists ==> it is not an axiom *)
-           Some (Getter.getxml bodyuri)
-          with
-           Getter.Unresolved ->
-            (* The body does not exist ==> we consider it an axiom *)
-            None
-     in
-      let obj = CicParser.obj_of_xml filename bodyfilename in
-       if cleanup_tmp then
-        begin
-         Unix.unlink filename ;
-         match bodyfilename with
-            Some f -> Unix.unlink f
-          | None -> ()
-        end ;
-       obj
-   )
-;;
-
-(* set_type_checking_info uri                               *)
-(* must be called once the type-checking of uri is finished *)
-(* The object whose uri is uri is unfreezed                 *)
-let set_type_checking_info uri =
- Cache.frozen_to_cooked uri
-;;
-
-(* is_type_checked uri                                                *)
-(* CSC: commento falso ed obsoleto *)
-(* returns a CheckedObj if the term has been type-checked             *)
-(* otherwise it freezes the term for type-checking and returns
- it *)
-(* set_type_checking_info must be called to unfreeze the term         *)
-let is_type_checked ?(trust=true) uri =
- try
-  CheckedObj (Cache.find_cooked uri)
- with
-  Not_found ->
-   let obj = find_or_add_unchecked_to_cache uri in
-    Cache.unchecked_to_frozen uri ;
-    if trust && trust_obj uri then
-     begin
-      Logger.log (`Trusting uri) ;
-      set_type_checking_info uri ;
-      CheckedObj (Cache.find_cooked uri)
-     end
-    else
-     UncheckedObj obj
-;;
-
-(* get_cooked_obj ~trust uri *)
-(* returns the object if it is already type-checked or if it can be *)
-(* trusted (if [trust] = true and the trusting function accepts it) *)
-(* Otherwise it raises Not_found                                    *)
-let get_cooked_obj ?(trust=true) uri =
- try
-  Cache.find_cooked uri
- with Not_found ->
-  if trust && trust_obj uri then
-   begin
-    match is_type_checked uri with
-       CheckedObj obj -> obj
-     | _ -> assert false
-   end
-  else
-   begin
-    prerr_endline ("@@@ OOOOOOOPS: get_cooked_obj(" ^ UriManager.string_of_uri uri ^ ") raises Not_found since the object is not type-checked nor trusted.") ;
-    raise Not_found
-   end
-;;
-
-(* get_obj uri                                                                *)
-(* returns the cic object whose uri is uri. If the term is not just in cache, *)
-(* then it is parsed via CicParser.term_of_xml from the file whose name is    *)
-(* the result of Getter.getxml uri                                            *)
-let get_obj uri =
- try
-  get_cooked_obj uri
- with
-  Not_found ->
-   find_or_add_unchecked_to_cache uri
-;; 
-
-exception OnlyPutOfInductiveDefinitionsIsAllowed
-
-let put_inductive_definition uri obj =
- match obj with
-    Cic.InductiveDefinition _ -> Cache.add_cooked uri obj
-  | _ -> raise OnlyPutOfInductiveDefinitionsIsAllowed
-;;
diff --git a/helm/ocaml/cic_proof_checking/cicEnvironment.mli b/helm/ocaml/cic_proof_checking/cicEnvironment.mli
deleted file mode 100644 (file)
index e93db95..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module implements a trival cache system (an hash-table) for cic       *)
-(* objects. Uses the getter (getter.ml) and the parser (cicParser.ml)         *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception CircularDependency of string;;
-
-(* get_obj uri                                                                *)
-(* returns the cic object whose uri is uri. If the term is not just in cache, *)
-(* then it is parsed via CicParser.term_of_xml from the file whose name is    *)
-(* the result of Getter.get uri                                               *)
-val get_obj : UriManager.uri -> Cic.obj
-
-type type_checked_obj =
-   CheckedObj of Cic.obj    (* cooked obj *)
- | UncheckedObj of Cic.obj  (* uncooked obj *)
-
-(* is_type_checked uri cookingsno                                   *)
-(*CSC commento falso ed obsoleto *)
-(* returns (true,object) if the object has been type-checked        *)
-(* otherwise it returns (false,object) and freeze the object for    *)
-(* type-checking                                                    *)
-(* set_type_checking_info must be called to unfreeze the object     *)
-val is_type_checked : ?trust:bool -> UriManager.uri -> type_checked_obj
-
-(* set_type_checking_info uri                                         *)
-(* must be called once the type-checking of uri is finished           *)
-(* The object whose uri is uri is unfreezed and won't be type-checked *)
-(* again in the future (is_type_checked will return true)             *)
-val set_type_checking_info : UriManager.uri -> unit
-
-(* get_cooked_obj ~trust uri                                        *)
-(* returns the object if it is already type-checked or if it can be *)
-(* trusted (if [trust] = true and the trusting function accepts it) *)
-(* Otherwise it raises Not_found                                    *)
-val get_cooked_obj : ?trust:bool -> UriManager.uri -> Cic.obj
-
-(* FUNCTIONS USED ONLY IN THE TOPLEVEL/PROOF-ENGINE *)
-
-exception OnlyPutOfInductiveDefinitionsIsAllowed
-
-(* put_inductive_definition uri obj                                      *)
-(* put [obj] (that must be an InductiveDefinition and show URI is [uri]) *)
-(* in the environment.                                                   *)
-(* WARNING: VERY UNSAFE.                                                 *)
-(* This function should be called only on a well-typed definition.       *)
-val put_inductive_definition : UriManager.uri -> Cic.obj -> unit
diff --git a/helm/ocaml/cic_proof_checking/cicMiniReduction.ml b/helm/ocaml/cic_proof_checking/cicMiniReduction.ml
deleted file mode 100644 (file)
index 1f6b726..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let rec letin_nf =
- let module C = Cic in
-  function
-     C.Rel _ as t -> t
-   | C.Var (uri,exp_named_subst) ->
-      let exp_named_subst' =
-       List.map (function (uri,t) -> (uri,letin_nf t)) exp_named_subst
-      in
-       C.Var (uri,exp_named_subst')
-   | C.Meta _ as t -> t
-   | C.Sort _ as t -> t
-   | C.Implicit as t -> t
-   | C.Cast (te,ty) -> C.Cast (letin_nf te, letin_nf ty)
-   | C.Prod (n,s,t) -> C.Prod (n, letin_nf s, letin_nf t)
-   | C.Lambda (n,s,t) -> C.Lambda (n, letin_nf s, letin_nf t)
-   | C.LetIn (n,s,t) -> CicSubstitution.subst (letin_nf s) t
-   | C.Appl l -> C.Appl (List.map letin_nf l)
-   | C.Const (uri,exp_named_subst) ->
-      let exp_named_subst' =
-       List.map (function (uri,t) -> (uri,letin_nf t)) exp_named_subst
-      in
-       C.Const (uri,exp_named_subst')
-   | C.MutInd (uri,typeno,exp_named_subst) ->
-      let exp_named_subst' =
-       List.map (function (uri,t) -> (uri,letin_nf t)) exp_named_subst
-      in
-       C.MutInd (uri,typeno,exp_named_subst')
-   | C.MutConstruct (uri,typeno,consno,exp_named_subst) ->
-      let exp_named_subst' =
-       List.map (function (uri,t) -> (uri,letin_nf t)) exp_named_subst
-      in
-       C.MutConstruct (uri,typeno,consno,exp_named_subst')
-   | C.MutCase (sp,i,outt,t,pl) ->
-      C.MutCase (sp,i,letin_nf outt, letin_nf t, List.map letin_nf pl)
-   | C.Fix (i,fl) ->
-      let substitutedfl =
-       List.map
-        (fun (name,i,ty,bo) -> (name, i, letin_nf ty, letin_nf bo))
-         fl
-      in
-       C.Fix (i, substitutedfl)
-   | C.CoFix (i,fl) ->
-      let substitutedfl =
-       List.map
-        (fun (name,ty,bo) -> (name, letin_nf ty, letin_nf bo))
-         fl
-      in
-       C.CoFix (i, substitutedfl)
-;;
diff --git a/helm/ocaml/cic_proof_checking/cicMiniReduction.mli b/helm/ocaml/cic_proof_checking/cicMiniReduction.mli
deleted file mode 100644 (file)
index c923c6a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val letin_nf : Cic.term -> Cic.term
diff --git a/helm/ocaml/cic_proof_checking/cicPp.ml b/helm/ocaml/cic_proof_checking/cicPp.ml
deleted file mode 100644 (file)
index d3f7f0f..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module implements a very simple Coq-like pretty printer that, given   *)
-(* an object of cic (internal representation) returns a string describing the *)
-(* object in a syntax similar to that of coq                                  *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception CicPpInternalError;;
-exception NotEnoughElements;;
-
-(* Utility functions *)
-
-let string_of_name =
- function
-    Cic.Name s     -> s
-  | Cic.Anonymous  -> "_"
-;;
-
-(* get_nth l n   returns the nth element of the list l if it exists or *)
-(* raises NotEnoughElements if l has less than n elements             *)
-let rec get_nth l n =
- match (n,l) with
-    (1, he::_) -> he
-  | (n, he::tail) when n > 1 -> get_nth tail (n-1)
-  | (_,_) -> raise NotEnoughElements
-;;
-
-(* pp t l                                                                  *)
-(* pretty-prints a term t of cic in an environment l where l is a list of  *)
-(* identifier names used to resolve DeBrujin indexes. The head of l is the *)
-(* name associated to the greatest DeBrujin index in t                     *)
-let rec pp t l =
- let module C = Cic in
-   match t with
-      C.Rel n ->
-       begin
-        try
-         (match get_nth l n with
-             Some (C.Name s) -> s
-           | Some C.Anonymous -> "__" ^ string_of_int n
-           | _ -> raise CicPpInternalError
-         )
-        with
-         NotEnoughElements -> string_of_int (List.length l - n)
-       end
-    | C.Var (uri,exp_named_subst) ->
-       UriManager.string_of_uri (*UriManager.name_of_uri*) uri ^ pp_exp_named_subst exp_named_subst l
-    | C.Meta (n,l1) ->
-       "?" ^ (string_of_int n) ^ "[" ^ 
-        String.concat " ; "
-         (List.map (function None -> "_" | Some t -> pp t l) l1) ^
-        "]"
-    | C.Sort s ->
-       (match s with
-           C.Prop -> "Prop"
-         | C.Set  -> "Set"
-         | C.Type -> "Type"
-       )
-    | C.Implicit -> "?"
-    | C.Prod (b,s,t) ->
-       (match b with
-          C.Name n -> "(" ^ n ^ ":" ^ pp s l ^ ")" ^ pp t ((Some b)::l)
-        | C.Anonymous -> "(" ^ pp s l ^ "->" ^ pp t ((Some b)::l) ^ ")"
-       )
-    | C.Cast (v,t) -> pp v l
-    | C.Lambda (b,s,t) ->
-       "[" ^ string_of_name b ^ ":" ^ pp s l ^ "]" ^ pp t ((Some b)::l)
-    | C.LetIn (b,s,t) ->
-       "[" ^ string_of_name b ^ ":=" ^ pp s l ^ "]" ^ pp t ((Some b)::l)
-    | C.Appl li ->
-       "(" ^
-       (List.fold_right
-        (fun x i -> pp x l ^ (match i with "" -> "" | _ -> " ") ^ i)
-        li ""
-       ) ^ ")"
-    | C.Const (uri,exp_named_subst) ->
-       UriManager.name_of_uri uri ^ pp_exp_named_subst exp_named_subst l
-    | C.MutInd (uri,n,exp_named_subst) ->
-       (try
-         match CicEnvironment.get_obj uri with
-            C.InductiveDefinition (dl,_,_) ->
-             let (name,_,_,_) = get_nth dl (n+1) in
-              name ^ pp_exp_named_subst exp_named_subst l
-          | _ -> raise CicPpInternalError
-        with
-         _ -> UriManager.string_of_uri uri ^ "#1/" ^ string_of_int (n + 1)
-       )
-    | C.MutConstruct (uri,n1,n2,exp_named_subst) ->
-       (try
-         match CicEnvironment.get_obj uri with
-            C.InductiveDefinition (dl,_,_) ->
-             let (_,_,_,cons) = get_nth dl (n1+1) in
-              let (id,_) = get_nth cons n2 in
-               id ^ pp_exp_named_subst exp_named_subst l
-          | _ -> raise CicPpInternalError
-        with
-         _ ->
-          UriManager.string_of_uri uri ^ "#1/" ^ string_of_int (n1 + 1) ^ "/" ^
-           string_of_int n2
-       )
-    | C.MutCase (uri,n1,ty,te,patterns) ->
-       let connames =
-        (match CicEnvironment.get_obj uri with
-            C.InductiveDefinition (dl,_,_) ->
-             let (_,_,_,cons) = get_nth dl (n1+1) in
-              List.map (fun (id,_) -> id) cons
-          | _ -> raise CicPpInternalError
-        )
-       in
-        "\n<" ^ pp ty l ^ ">Cases " ^ pp te l ^ " of " ^
-          List.fold_right (fun (x,y) i -> "\n " ^ x ^ " => " ^ pp y l ^ i)
-           (List.combine connames patterns) "" ^
-          "\nend"
-    | C.Fix (no, funs) ->
-       let snames = List.map (fun (name,_,_,_) -> name) funs in
-        let names =
-         List.rev (List.map (function name -> Some (C.Name name)) snames)
-        in
-         "\nFix " ^ get_nth snames (no + 1) ^ " {" ^
-         List.fold_right
-          (fun (name,ind,ty,bo) i -> "\n" ^ name ^ " / " ^ string_of_int ind ^
-            " : " ^ pp ty l ^ " := \n" ^
-            pp bo (names@l) ^ i)
-          funs "" ^
-         "}\n"
-    | C.CoFix (no,funs) ->
-       let snames = List.map (fun (name,_,_) -> name) funs in
-        let names =
-         List.rev (List.map (function name -> Some (C.Name name)) snames)
-        in
-         "\nCoFix " ^ get_nth snames (no + 1) ^ " {" ^
-         List.fold_right
-          (fun (name,ty,bo) i -> "\n" ^ name ^ 
-            " : " ^ pp ty l ^ " := \n" ^
-            pp bo (names@l) ^ i)
-          funs "" ^
-         "}\n"
-and pp_exp_named_subst exp_named_subst l =
- if exp_named_subst = [] then "" else
-  "{" ^
-   String.concat " ; " (
-    List.map
-     (function (uri,t) -> UriManager.name_of_uri uri ^ ":=" ^ pp t l)
-     exp_named_subst
-   ) ^ "}"
-;;
-
-let ppterm t =
- pp t []
-;;
-
-(* ppinductiveType (typename, inductive, arity, cons)                       *)
-(* pretty-prints a single inductive definition                              *)
-(* (typename, inductive, arity, cons)                                       *)
-let ppinductiveType (typename, inductive, arity, cons) =
-  (if inductive then "\nInductive " else "\nCoInductive ") ^ typename ^ ": " ^
-  pp arity [] ^ " =\n   " ^
-  List.fold_right
-   (fun (id,ty) i -> id ^ " : " ^ pp ty [] ^ 
-    (if i = "" then "\n" else "\n | ") ^ i)
-   cons ""
-;;
-
-(* ppobj obj  returns a string with describing the cic object obj in a syntax *)
-(* similar to the one used by Coq                                             *)
-let ppobj obj =
- let module C = Cic in
- let module U = UriManager in
-  match obj with
-    C.Constant (name, Some t1, t2, params) ->
-      "Definition of " ^ name ^
-       "(" ^ String.concat ";" (List.map UriManager.string_of_uri params) ^
-       ")" ^ ":\n" ^ pp t1 [] ^ " : " ^ pp t2 []
-   | C.Constant (name, None, ty, params) ->
-      "Axiom " ^ name ^
-       "(" ^ String.concat ";" (List.map UriManager.string_of_uri params) ^
-       "):\n" ^ pp ty []
-   | C.Variable (name, bo, ty, params) ->
-      "Variable " ^ name ^
-       "(" ^ String.concat ";" (List.map UriManager.string_of_uri params) ^
-       ")" ^ ":\n" ^
-       pp ty [] ^ "\n" ^
-       (match bo with None -> "" | Some bo -> ":= " ^ pp bo [])
-   | C.CurrentProof (name, conjectures, value, ty, params) ->
-      "Current Proof of " ^ name ^
-       "(" ^ String.concat ";" (List.map UriManager.string_of_uri params) ^
-       ")" ^ ":\n" ^
-      let separate s = if s = "" then "" else s ^ " ; " in
-       List.fold_right
-        (fun (n, context, t) i -> 
-          let conjectures',name_context =
-          List.fold_right 
-           (fun context_entry (i,name_context) ->
-             (match context_entry with
-                 Some (n,C.Decl at) ->
-                   (separate i) ^
-                    string_of_name n ^ ":" ^ pp at name_context ^ " ",
-                   (Some n)::name_context
-               | Some (n,C.Def at) ->
-                   (separate i) ^
-                    string_of_name n ^ ":= " ^ pp at name_context ^ " ",
-                   (Some n)::name_context
-                | None ->
-                   (separate i) ^ "_ :? _ ", None::name_context)
-             ) context ("",[])
-          in
-           conjectures' ^ " |- " ^ "?" ^ (string_of_int n) ^ ": " ^
-            pp t name_context ^ "\n" ^ i
-        ) conjectures "" ^
-        "\n" ^ pp value [] ^ " : " ^ pp ty [] 
-   | C.InductiveDefinition (l, params, nparams) ->
-      "Parameters = " ^
-       String.concat ";" (List.map UriManager.string_of_uri params) ^ "\n" ^
-       "NParams = " ^ string_of_int nparams ^ "\n" ^
-        List.fold_right (fun x i -> ppinductiveType x ^ i) l ""
-;;
diff --git a/helm/ocaml/cic_proof_checking/cicPp.mli b/helm/ocaml/cic_proof_checking/cicPp.mli
deleted file mode 100644 (file)
index 9f68d05..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(* This module implements a very simple Coq-like pretty printer that, given   *)
-(* an object of cic (internal representation) returns a string describing the *)
-(* object in a syntax similar to that of coq                                  *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* ppobj obj  returns a string with describing the cic object obj in a syntax *)
-(* similar to the one used by Coq                                             *)
-val ppobj : Cic.obj -> string
-
-val ppterm : Cic.term -> string
-
-(* Required only by the topLevel. It is the generalization of ppterm to *)
-(* work with environments.                                              *)
-val pp : Cic.term -> (Cic.name option) list -> string
diff --git a/helm/ocaml/cic_proof_checking/cicReduction.mli b/helm/ocaml/cic_proof_checking/cicReduction.mli
deleted file mode 100644 (file)
index 7a62550..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception WrongUriToInductiveDefinition
-exception ReferenceToConstant
-exception ReferenceToVariable
-exception ReferenceToCurrentProof
-exception ReferenceToInductiveDefinition
-val fdebug : int ref
-val whd : Cic.context -> Cic.term -> Cic.term
-val are_convertible : Cic.context -> Cic.term -> Cic.term -> bool
diff --git a/helm/ocaml/cic_proof_checking/cicReductionMachine.ml b/helm/ocaml/cic_proof_checking/cicReductionMachine.ml
deleted file mode 100644 (file)
index 30b6882..0000000
+++ /dev/null
@@ -1,894 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception CicReductionInternalError;;
-exception WrongUriToInductiveDefinition;;
-exception Impossible of int;;
-exception ReferenceToConstant;;
-exception ReferenceToVariable;;
-exception ReferenceToCurrentProof;;
-exception ReferenceToInductiveDefinition;;
-
-let fdebug = ref 1;;
-let debug t env s =
- let rec debug_aux t i =
-  let module C = Cic in
-  let module U = UriManager in
-   CicPp.ppobj (C.Variable ("DEBUG", None, t, [])) ^ "\n" ^ i
- in
-  if !fdebug = 0 then
-   begin
-    print_endline (s ^ "\n" ^ List.fold_right debug_aux (t::env) "") ;
-    flush stdout
-   end
-;;
-
-module type Strategy =
- sig
-  type stack_term
-  type env_term
-  type ens_term
-  val to_stack : Cic.term -> stack_term
-  val to_stack_list : Cic.term list -> stack_term list
-  val to_env : Cic.term -> env_term
-  val to_ens : Cic.term -> ens_term
-  val from_stack :
-   unwind:
-    (int -> env_term list -> ens_term Cic.explicit_named_substitution ->
-      Cic.term -> Cic.term) ->
-   stack_term -> Cic.term
-  val from_stack_list :
-   unwind:
-    (int -> env_term list -> ens_term Cic.explicit_named_substitution ->
-      Cic.term -> Cic.term) ->
-   stack_term list -> Cic.term list
-  val from_env : env_term -> Cic.term
-  val from_ens : ens_term -> Cic.term
-  val stack_to_env :
-   reduce:
-    (int * env_term list * ens_term Cic.explicit_named_substitution *
-      Cic.term * stack_term list -> Cic.term) ->
-   unwind:
-    (int -> env_term list -> ens_term Cic.explicit_named_substitution ->
-      Cic.term -> Cic.term) ->
-   stack_term -> env_term
-  val compute_to_env :
-   reduce:
-    (int * env_term list * ens_term Cic.explicit_named_substitution * Cic.term *
-      stack_term list -> Cic.term) ->
-   unwind:
-    (int -> env_term list -> ens_term Cic.explicit_named_substitution ->
-      Cic.term -> Cic.term) ->
-   int -> env_term list -> ens_term Cic.explicit_named_substitution ->
-    Cic.term -> env_term
-  val compute_to_stack :
-   reduce:
-    (int * env_term list * ens_term Cic.explicit_named_substitution * Cic.term *
-      stack_term list -> Cic.term) ->
-   unwind:
-    (int -> env_term list -> ens_term Cic.explicit_named_substitution ->
-      Cic.term -> Cic.term) ->
-   int -> env_term list -> ens_term Cic.explicit_named_substitution ->
-    Cic.term -> stack_term
- end
-;;
-
-module CallByNameStrategy =
- struct
-  type stack_term = Cic.term
-  type env_term = Cic.term
-  type ens_term = Cic.term
-  let to_stack v = v
-  let to_stack_list l = l
-  let to_env v = v
-  let to_ens v = v
-  let from_stack ~unwind v = v
-  let from_stack_list ~unwind l = l
-  let from_env v = v
-  let from_ens v = v
-  let stack_to_env ~reduce ~unwind v = v
-  let compute_to_stack ~reduce ~unwind k e ens t = unwind k e ens t
-  let compute_to_env ~reduce ~unwind k e ens t = unwind k e ens t
- end
-;;
-
-module CallByValueStrategy =
- struct
-  type stack_term = Cic.term
-  type env_term = Cic.term
-  type ens_term = Cic.term
-  let to_stack v = v
-  let to_stack_list l = l
-  let to_env v = v
-  let to_ens v = v
-  let from_stack ~unwind v = v
-  let from_stack_list ~unwind l = l
-  let from_env v = v
-  let from_ens v = v
-  let stack_to_env ~reduce ~unwind v = v
-  let compute_to_stack ~reduce ~unwind k e ens t = reduce (k,e,ens,t,[])
-  let compute_to_env ~reduce ~unwind k e ens t = reduce (k,e,ens,t,[])
- end
-;;
-
-module CallByValueStrategyByNameOnConstants =
- struct
-  type stack_term = Cic.term
-  type env_term = Cic.term
-  type ens_term = Cic.term
-  let to_stack v = v
-  let to_stack_list l = l
-  let to_env v = v
-  let to_ens v = v
-  let from_stack ~unwind v = v
-  let from_stack_list ~unwind l = l
-  let from_env v = v
-  let from_ens v = v
-  let stack_to_env ~reduce ~unwind v = v
-  let compute_to_stack ~reduce ~unwind k e ens =
-   function
-      Cic.Const _ as t -> unwind k e ens t    
-    | t -> reduce (k,e,ens,t,[])
-  let compute_to_env ~reduce ~unwind k e ens =
-   function
-      Cic.Const _ as t -> unwind k e ens t    
-    | t -> reduce (k,e,ens,t,[])
- end
-;;
-
-module LazyCallByValueStrategy =
- struct
-  type stack_term = Cic.term lazy_t
-  type env_term = Cic.term lazy_t
-  type ens_term = Cic.term lazy_t
-  let to_stack v = lazy v
-  let to_stack_list l = List.map to_stack l
-  let to_env v = lazy v
-  let to_ens v = lazy v
-  let from_stack ~unwind v = Lazy.force v
-  let from_stack_list ~unwind l = List.map (from_stack ~unwind) l
-  let from_env v = Lazy.force v
-  let from_ens v = Lazy.force v
-  let stack_to_env ~reduce ~unwind v = v
-  let compute_to_stack ~reduce ~unwind k e ens t = lazy (reduce (k,e,ens,t,[]))
-  let compute_to_env ~reduce ~unwind k e ens t = lazy (reduce (k,e,ens,t,[]))
- end
-;;
-
-module LazyCallByValueStrategyByNameOnConstants =
- struct
-  type stack_term = Cic.term lazy_t
-  type env_term = Cic.term lazy_t
-  type ens_term = Cic.term lazy_t
-  let to_stack v = lazy v
-  let to_stack_list l = List.map to_stack l
-  let to_env v = lazy v
-  let to_ens v = lazy v
-  let from_stack ~unwind v = Lazy.force v
-  let from_stack_list ~unwind l = List.map (from_stack ~unwind) l
-  let from_env v = Lazy.force v
-  let from_ens v = Lazy.force v
-  let stack_to_env ~reduce ~unwind v = v
-  let compute_to_stack ~reduce ~unwind k e ens t =
-   lazy (
-    match t with
-       Cic.Const _ as t -> unwind k e ens t    
-     | t -> reduce (k,e,ens,t,[]))
-  let compute_to_env ~reduce ~unwind k e ens t =
-   lazy (
-    match t with
-       Cic.Const _ as t -> unwind k e ens t    
-     | t -> reduce (k,e,ens,t,[]))
- end
-;;
-
-module LazyCallByNameStrategy =
- struct
-  type stack_term = Cic.term lazy_t
-  type env_term = Cic.term lazy_t
-  type ens_term = Cic.term lazy_t
-  let to_stack v = lazy v
-  let to_stack_list l = List.map to_stack l
-  let to_env v = lazy v
-  let to_ens v = lazy v
-  let from_stack ~unwind v = Lazy.force v
-  let from_stack_list ~unwind l = List.map (from_stack ~unwind) l
-  let from_env v = Lazy.force v
-  let from_ens v = Lazy.force v
-  let stack_to_env ~reduce ~unwind v = v
-  let compute_to_stack ~reduce ~unwind k e ens t = lazy (unwind k e ens t)
-  let compute_to_env ~reduce ~unwind k e ens t = lazy (unwind k e ens t)
- end
-;;
-
-module
- LazyCallByValueByNameOnConstantsWhenFromStack_ByNameStrategyWhenFromEnvOrEns
-=
- struct
-  type stack_term = reduce:bool -> Cic.term
-  type env_term = reduce:bool -> Cic.term
-  type ens_term = reduce:bool -> Cic.term
-  let to_stack v =
-   let value = lazy v in
-    fun ~reduce -> Lazy.force value
-  let to_stack_list l = List.map to_stack l
-  let to_env v =
-   let value = lazy v in
-    fun ~reduce -> Lazy.force value
-  let to_ens v =
-   let value = lazy v in
-    fun ~reduce -> Lazy.force value
-  let from_stack ~unwind v = (v ~reduce:false)
-  let from_stack_list ~unwind l = List.map (from_stack ~unwind) l
-  let from_env v = (v ~reduce:true)
-  let from_ens v = (v ~reduce:true)
-  let stack_to_env ~reduce ~unwind v = v
-  let compute_to_stack ~reduce ~unwind k e ens t =
-   let svalue =
-     lazy (
-      match t with
-         Cic.Const _ as t -> unwind k e ens t    
-       | t -> reduce (k,e,ens,t,[])
-     ) in
-   let lvalue =
-    lazy (unwind k e ens t)
-   in
-    fun ~reduce ->
-     if reduce then Lazy.force svalue else Lazy.force lvalue
-  let compute_to_env ~reduce ~unwind k e ens t =
-   let svalue =
-     lazy (
-      match t with
-         Cic.Const _ as t -> unwind k e ens t    
-       | t -> reduce (k,e,ens,t,[])
-     ) in
-   let lvalue =
-    lazy (unwind k e ens t)
-   in
-    fun ~reduce ->
-     if reduce then Lazy.force svalue else Lazy.force lvalue
- end
-;;
-
-module ClosuresOnStackByValueFromEnvOrEnsStrategy =
- struct
-  type stack_term =
-   int * Cic.term list * Cic.term Cic.explicit_named_substitution * Cic.term
-  type env_term = Cic.term
-  type ens_term = Cic.term
-  let to_stack v = (0,[],[],v)
-  let to_stack_list l = List.map to_stack l
-  let to_env v = v
-  let to_ens v = v
-  let from_stack ~unwind (k,e,ens,t) = unwind k e ens t
-  let from_stack_list ~unwind l = List.map (from_stack ~unwind) l
-  let from_env v = v
-  let from_ens v = v
-  let stack_to_env ~reduce ~unwind (k,e,ens,t) = reduce (k,e,ens,t,[])
-  let compute_to_env ~reduce ~unwind k e ens t =
-   unwind k e ens t
-  let compute_to_stack ~reduce ~unwind k e ens t = (k,e,ens,t)
- end
-;;
-
-module ClosuresOnStackByValueFromEnvOrEnsByNameOnConstantsStrategy =
- struct
-  type stack_term =
-   int * Cic.term list * Cic.term Cic.explicit_named_substitution * Cic.term
-  type env_term = Cic.term
-  type ens_term = Cic.term
-  let to_stack v = (0,[],[],v)
-  let to_stack_list l = List.map to_stack l
-  let to_env v = v
-  let to_ens v = v
-  let from_stack ~unwind (k,e,ens,t) = unwind k e ens t
-  let from_stack_list ~unwind l = List.map (from_stack ~unwind) l
-  let from_env v = v
-  let from_ens v = v
-  let stack_to_env ~reduce ~unwind (k,e,ens,t) =
-   match t with
-      Cic.Const _ as t -> unwind k e ens t    
-    | t -> reduce (k,e,ens,t,[])
-  let compute_to_env ~reduce ~unwind k e ens t =
-   unwind k e ens t
-  let compute_to_stack ~reduce ~unwind k e ens t = (k,e,ens,t)
- end
-;;
-
-module Reduction(RS : Strategy) =
- struct
-  type env = RS.env_term list
-  type ens = RS.ens_term Cic.explicit_named_substitution
-  type stack = RS.stack_term list
-  type config = int * env * ens * Cic.term * stack
-
-  (* k is the length of the environment e *)
-  (* m is the current depth inside the term *)
-  let unwind' m k e ens t = 
-   let module C = Cic in
-   let module S = CicSubstitution in
-    if k = 0 && ens = [] then
-     t
-    else 
-     let rec unwind_aux m =
-      function
-         C.Rel n as t ->
-          if n <= m then t else
-           let d =
-            try
-             Some (RS.from_env (List.nth e (n-m-1)))
-            with _ -> None
-           in
-            (match d with 
-                Some t' ->
-                 if m = 0 then t' else S.lift m t'
-              | None -> C.Rel (n-k)
-            )
-       | C.Var (uri,exp_named_subst) ->
-(*
-prerr_endline ("%%%%%UWVAR " ^ String.concat " ; " (List.map (function (uri,t) -> UriManager.string_of_uri uri ^ " := " ^ CicPp.ppterm t) ens)) ;
-*)
-         if List.exists (function (uri',_) -> UriManager.eq uri' uri) ens then
-          CicSubstitution.lift m (RS.from_ens (List.assq uri ens))
-         else
-          let params =
-           (match CicEnvironment.get_obj uri with
-               C.Constant _ -> raise ReferenceToConstant
-             | C.Variable (_,_,_,params) -> params
-             | C.CurrentProof _ -> raise ReferenceToCurrentProof
-             | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-           )
-          in
-           let exp_named_subst' =
-            substaux_in_exp_named_subst params exp_named_subst m 
-           in
-            C.Var (uri,exp_named_subst')
-       | C.Meta (i,l) ->
-          let l' =
-           List.map
-            (function
-                None -> None
-              | Some t -> Some (unwind_aux m t)
-            ) l
-          in
-           C.Meta (i, l')
-       | C.Sort _ as t -> t
-       | C.Implicit as t -> t
-       | C.Cast (te,ty) -> C.Cast (unwind_aux m te, unwind_aux m ty) (*CSC ???*)
-       | C.Prod (n,s,t) -> C.Prod (n, unwind_aux m s, unwind_aux (m + 1) t)
-       | C.Lambda (n,s,t) -> C.Lambda (n, unwind_aux m s, unwind_aux (m + 1) t)
-       | C.LetIn (n,s,t) -> C.LetIn (n, unwind_aux m s, unwind_aux (m + 1) t)
-       | C.Appl l -> C.Appl (List.map (unwind_aux m) l)
-       | C.Const (uri,exp_named_subst) ->
-          let params =
-           (match CicEnvironment.get_obj uri with
-               C.Constant (_,_,_,params) -> params
-             | C.Variable _ -> raise ReferenceToVariable
-             | C.CurrentProof (_,_,_,_,params) -> params
-             | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-           )
-          in
-           let exp_named_subst' =
-            substaux_in_exp_named_subst params exp_named_subst m 
-           in
-            C.Const (uri,exp_named_subst')
-       | C.MutInd (uri,i,exp_named_subst) ->
-          let params =
-           (match CicEnvironment.get_obj uri with
-               C.Constant _ -> raise ReferenceToConstant
-             | C.Variable _ -> raise ReferenceToVariable
-             | C.CurrentProof _ -> raise ReferenceToCurrentProof
-             | C.InductiveDefinition (_,params,_) -> params
-           )
-          in
-           let exp_named_subst' =
-            substaux_in_exp_named_subst params exp_named_subst m 
-           in
-            C.MutInd (uri,i,exp_named_subst')
-       | C.MutConstruct (uri,i,j,exp_named_subst) ->
-          let params =
-           (match CicEnvironment.get_obj uri with
-               C.Constant _ -> raise ReferenceToConstant
-             | C.Variable _ -> raise ReferenceToVariable
-             | C.CurrentProof _ -> raise ReferenceToCurrentProof
-             | C.InductiveDefinition (_,params,_) -> params
-           )
-          in
-           let exp_named_subst' =
-            substaux_in_exp_named_subst params exp_named_subst m 
-           in
-            C.MutConstruct (uri,i,j,exp_named_subst')
-       | C.MutCase (sp,i,outt,t,pl) ->
-          C.MutCase (sp,i,unwind_aux m outt, unwind_aux m t,
-           List.map (unwind_aux m) pl)
-       | C.Fix (i,fl) ->
-          let len = List.length fl in
-          let substitutedfl =
-           List.map
-            (fun (name,i,ty,bo) ->
-              (name, i, unwind_aux m ty, unwind_aux (m+len) bo))
-             fl
-          in
-           C.Fix (i, substitutedfl)
-       | C.CoFix (i,fl) ->
-          let len = List.length fl in
-          let substitutedfl =
-           List.map
-            (fun (name,ty,bo) -> (name, unwind_aux m ty, unwind_aux (m+len) bo))
-             fl
-          in
-           C.CoFix (i, substitutedfl)
-     and substaux_in_exp_named_subst params exp_named_subst' m  =
-  (*CSC: Idea di Andrea di ordinare compatibilmente con l'ordine dei params
-      let ens' =
-       List.map (function (uri,t) -> uri, unwind_aux m t) exp_named_subst' @
-  (*CSC: qui liftiamo tutti gli ens anche se magari me ne servono la meta'!!! *)
-        List.map (function (uri,t) -> uri, CicSubstitution.lift m t) ens
-      in
-      let rec filter_and_lift =
-       function
-          [] -> []
-        | uri::tl ->
-           let r = filter_and_lift tl in
-            (try
-              (uri,(List.assq uri ens'))::r
-             with
-              Not_found -> r
-            )
-      in
-       filter_and_lift params
-  *)
-  
-  (*CSC: invece di concatenare sarebbe meglio rispettare l'ordine dei params *)
-  (*CSC: e' vero???? una veloce prova non sembra confermare la teoria        *)
-  
-  (*CSC: codice copiato e modificato dalla cicSubstitution.subst_vars *)
-  (*CSC: codice altamente inefficiente *)
-      let rec filter_and_lift already_instantiated =
-       function
-          [] -> []
-        | (uri,t)::tl when
-            List.for_all
-             (function (uri',_)-> not (UriManager.eq uri uri')) exp_named_subst'
-            &&
-             not (List.mem uri already_instantiated)
-            &&
-             List.mem uri params
-           ->
-            (uri,CicSubstitution.lift m (RS.from_ens t)) ::
-             (filter_and_lift (uri::already_instantiated) tl)
-        | _::tl -> filter_and_lift already_instantiated tl
-(*
-        | (uri,_)::tl ->
-prerr_endline ("---- SKIPPO " ^ UriManager.string_of_uri uri) ;
-if List.for_all (function (uri',_) -> not (UriManager.eq uri uri')) exp_named_subst' then prerr_endline "---- OK1" ;
-prerr_endline ("++++ uri " ^ UriManager.string_of_uri uri ^ " not in " ^ String.concat " ; " (List.map UriManager.string_of_uri params)) ;
-if List.mem uri params then prerr_endline "---- OK2" ;
-        filter_and_lift tl
-*)
-      in
-       List.map (function (uri,t) -> uri, unwind_aux m t) exp_named_subst' @
-        (filter_and_lift [] (List.rev ens))
-     in
-      unwind_aux m t          
-  ;;
-  
-  let unwind =
-   unwind' 0 
-  ;;
-  
-  let reduce context : config -> Cic.term = 
-   let module C = Cic in
-   let module S = CicSubstitution in 
-   let rec reduce =
-    function
-       (k, e, _, (C.Rel n as t), s) ->
-        let d =
-         try
-          Some (RS.from_env (List.nth e (n-1)))
-         with
-          _ ->
-           try
-            begin
-             match List.nth context (n - 1 - k) with
-                None -> assert false
-              | Some (_,C.Decl _) -> None
-              | Some (_,C.Def x) -> Some (S.lift (n - k) x)
-            end
-           with
-            _ -> None
-        in
-         (match d with 
-             Some t' -> reduce (0,[],[],t',s)
-           | None ->
-              if s = [] then
-               C.Rel (n-k)
-              else C.Appl (C.Rel (n-k)::(RS.from_stack_list ~unwind s))
-         )
-     | (k, e, ens, (C.Var (uri,exp_named_subst) as t), s) -> 
-         if List.exists (function (uri',_) -> UriManager.eq uri' uri) ens then
-          reduce (0, [], [], RS.from_ens (List.assq uri ens), s)
-         else
-          (match CicEnvironment.get_obj uri with
-              C.Constant _ -> raise ReferenceToConstant
-            | C.CurrentProof _ -> raise ReferenceToCurrentProof
-            | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-            | C.Variable (_,None,_,_) ->
-               let t' = unwind k e ens t in
-                if s = [] then t' else
-                 C.Appl (t'::(RS.from_stack_list ~unwind s))
-            | C.Variable (_,Some body,_,_) ->
-               let ens' = push_exp_named_subst k e ens exp_named_subst in
-                reduce (0, [], ens', body, s)
-          )
-     | (k, e, ens, (C.Meta _ as t), s) ->
-        let t' = unwind k e ens t in
-         if s = [] then t' else C.Appl (t'::(RS.from_stack_list ~unwind s))
-     | (k, e, _, (C.Sort _ as t), s) -> t (* s should be empty *)
-     | (k, e, _, (C.Implicit as t), s) -> t (* s should be empty *)
-     | (k, e, ens, (C.Cast (te,ty) as t), s) ->
-        reduce (k, e, ens, te, s) (* s should be empty *)
-     | (k, e, ens, (C.Prod _ as t), s) ->
-         unwind k e ens t (* s should be empty *)
-     | (k, e, ens, (C.Lambda (_,_,t) as t'), []) -> unwind k e ens t' 
-     | (k, e, ens, C.Lambda (_,_,t), p::s) ->
-         reduce (k+1, (RS.stack_to_env ~reduce ~unwind p)::e, ens, t,s)
-     | (k, e, ens, (C.LetIn (_,m,t) as t'), s) ->
-        let m' = RS.compute_to_env ~reduce ~unwind k e ens m in
-         reduce (k+1, m'::e, ens, t, s)
-     | (_, _, _, C.Appl [], _) -> raise (Impossible 1)
-     | (k, e, ens, C.Appl (he::tl), s) ->
-        let tl' =
-         List.map
-          (function t -> RS.compute_to_stack ~reduce ~unwind k e ens t) tl
-        in
-         reduce (k, e, ens, he, (List.append tl') s)
-  (* CSC: Old Dead Code 
-     | (k, e, ens, C.Appl ((C.Lambda _ as he)::tl), s) 
-     | (k, e, ens, C.Appl ((C.Const _ as he)::tl), s)  
-     | (k, e, ens, C.Appl ((C.MutCase _ as he)::tl), s) 
-     | (k, e, ens, C.Appl ((C.Fix _ as he)::tl), s) ->
-  (* strict evaluation, but constants are NOT unfolded *)
-        let red =
-         function
-            C.Const _ as t -> unwind k e ens t
-          | t -> reduce (k,e,ens,t,[])
-        in
-         let tl' = List.map red tl in
-          reduce (k, e, ens, he , List.append tl' s)
-     | (k, e, ens, C.Appl l, s) ->
-         C.Appl (List.append (List.map (unwind k e ens) l) s)
-  *)
-     | (k, e, ens, (C.Const (uri,exp_named_subst) as t), s) ->
-        (match CicEnvironment.get_obj uri with
-            C.Constant (_,Some body,_,_) ->
-             let ens' = push_exp_named_subst k e ens exp_named_subst in
-              (* constants are closed *)
-              reduce (0, [], ens', body, s) 
-          | C.Constant (_,None,_,_) ->
-             let t' = unwind k e ens t in
-              if s = [] then t' else C.Appl (t'::(RS.from_stack_list ~unwind s))
-          | C.Variable _ -> raise ReferenceToVariable
-          | C.CurrentProof (_,_,body,_,_) ->
-             let ens' = push_exp_named_subst k e ens exp_named_subst in
-              (* constants are closed *)
-              reduce (0, [], ens', body, s)
-          | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-        )
-     | (k, e, ens, (C.MutInd _ as t),s) ->
-        let t' = unwind k e ens t in 
-         if s = [] then t' else C.Appl (t'::(RS.from_stack_list ~unwind s))
-     | (k, e, ens, (C.MutConstruct _ as t),s) -> 
-         let t' = unwind k e ens t in
-          if s = [] then t' else C.Appl (t'::(RS.from_stack_list ~unwind s))
-     | (k, e, ens, (C.MutCase (mutind,i,_,term,pl) as t),s) ->
-        let decofix =
-         function
-            C.CoFix (i,fl) as t ->
-             let (_,_,body) = List.nth fl i in
-              let body' =
-               let counter = ref (List.length fl) in
-                List.fold_right
-                 (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl)))
-                 fl
-                 body
-              in
-               (* the term is the result of a reduction; *)
-               (* so it is already unwinded.             *)
-               reduce (0,[],[],body',[])
-          | C.Appl (C.CoFix (i,fl) :: tl) ->
-             let (_,_,body) = List.nth fl i in
-              let body' =
-               let counter = ref (List.length fl) in
-                List.fold_right
-                 (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl)))
-                 fl
-                 body
-              in
-               (* the term is the result of a reduction; *)
-               (* so it is already unwinded.             *)
-               reduce (0,[],[],body',RS.to_stack_list tl)
-          | t -> t
-        in
-         (match decofix (reduce (k,e,ens,term,[])) with
-             C.MutConstruct (_,_,j,_) ->
-              reduce (k, e, ens, (List.nth pl (j-1)), s)
-           | C.Appl (C.MutConstruct (_,_,j,_) :: tl) ->
-              let (arity, r) =
-               match CicEnvironment.get_obj mutind with
-                  C.InductiveDefinition (tl,ingredients,r) ->
-                    let (_,_,arity,_) = List.nth tl i in
-                     (arity,r)
-                | _ -> raise WrongUriToInductiveDefinition
-              in
-               let ts =
-                let num_to_eat = r in
-                 let rec eat_first =
-                  function
-                     (0,l) -> l
-                   | (n,he::tl) when n > 0 -> eat_first (n - 1, tl)
-                   | _ -> raise (Impossible 5)
-                 in
-                  eat_first (num_to_eat,tl)
-               in
-                (* ts are already unwinded because they are a sublist of tl *)
-                reduce (k, e, ens, (List.nth pl (j-1)), (RS.to_stack_list ts)@s)
-          | C.Cast _ | C.Implicit ->
-              raise (Impossible 2) (* we don't trust our whd ;-) *)
-           | _ ->
-             let t' = unwind k e ens t in
-              if s = [] then t' else C.Appl (t'::(RS.from_stack_list ~unwind s))
-         )
-     | (k, e, ens, (C.Fix (i,fl) as t), s) ->
-        let (_,recindex,_,body) = List.nth fl i in
-         let recparam =
-          try
-           Some (RS.from_stack ~unwind (List.nth s recindex))
-          with
-           _ -> None
-         in
-          (match recparam with
-              Some recparam ->
-               (match reduce (0,[],[],recparam,[]) with
-                   (* match recparam with *) 
-                   C.MutConstruct _
-                 | C.Appl ((C.MutConstruct _)::_) ->
-                    (* OLD 
-                    let body' =
-                     let counter = ref (List.length fl) in
-                      List.fold_right
-                       (fun _ -> decr counter ; S.subst (C.Fix (!counter,fl)))
-                       fl
-                       body
-                    in 
-                     reduce (k, e, ens, body', s) *)
-                    (* NEW *)
-                    let leng = List.length fl in
-                    let fl' = 
-                     let unwind_fl (name,recindex,typ,body) = 
-                      (name,recindex,unwind k e ens typ,
-                        unwind' leng k e ens body)
-                     in
-                     List.map unwind_fl fl
-                    in
-                     let new_env =
-                      let counter = ref 0 in
-                      let rec build_env e =
-                       if !counter = leng then e
-                       else
-                        (incr counter ;
-                         build_env ((RS.to_env (C.Fix (!counter -1, fl')))::e))
-                      in
-                       build_env e
-                     in
-                      reduce (k+leng, new_env, ens, body, s)  
-                 | _ ->
-                   let t' = unwind k e ens t in 
-                    if s = [] then t' else
-                     C.Appl (t'::(RS.from_stack_list ~unwind s))
-               )
-            | None ->
-               let t' = unwind k e ens t in 
-                if s = [] then t' else
-                 C.Appl (t'::(RS.from_stack_list ~unwind s))
-          )
-     | (k, e, ens, (C.CoFix (i,fl) as t),s) ->
-        let t' = unwind k e ens t in 
-         if s = [] then t' else C.Appl (t'::(RS.from_stack_list ~unwind s))
-   and push_exp_named_subst k e ens =
-    function
-       [] -> ens
-     | (uri,t)::tl ->
-         push_exp_named_subst k e ((uri,RS.to_ens (unwind k e ens t))::ens) tl
-   in
-    reduce
-  ;;
-  
-  let rec whd context t = reduce context (0, [], [], t, []);;
-  
-(* DEBUGGING ONLY
-let whd context t =
- let res = whd context t in
- let rescsc = CicReductionNaif.whd context t in
-  if not (CicReductionNaif.are_convertible context res rescsc) then
-   begin
-    prerr_endline ("PRIMA: " ^ CicPp.ppterm t) ;
-    flush stderr ;
-    prerr_endline ("DOPO: " ^ CicPp.ppterm res) ;
-    flush stderr ;
-    prerr_endline ("CSC: " ^ CicPp.ppterm rescsc) ;
-    flush stderr ;
-CicReductionNaif.fdebug := 0 ;
-let _ =  CicReductionNaif.are_convertible context res rescsc in
-    assert false ;
-   end
-  else 
-   res
-;;
-*)
- end
-;;
-
-
-(*
-module R = Reduction CallByNameStrategy;;
-module R = Reduction CallByValueStrategy;;
-module R = Reduction CallByValueStrategyByNameOnConstants;;
-module R = Reduction LazyCallByValueStrategy;;
-module R = Reduction LazyCallByValueStrategyByNameOnConstants;;
-module R = Reduction LazyCallByNameStrategy;;
-module R = Reduction
- LazyCallByValueByNameOnConstantsWhenFromStack_ByNameStrategyWhenFromEnvOrEns;;
-module R = Reduction ClosuresOnStackByValueFromEnvOrEnsStrategy;;
-module R = Reduction
- ClosuresOnStackByValueFromEnvOrEnsByNameOnConstantsStrategy;;
-*)
-module R = Reduction ClosuresOnStackByValueFromEnvOrEnsStrategy;;
-
-let whd = R.whd;;
-
-(* t1, t2 must be well-typed *)
-let are_convertible =
- let module U = UriManager in
- let rec aux context t1 t2 =
-  let aux2 t1 t2 =
-   (* this trivial euristic cuts down the total time of about five times ;-) *)
-   (* this because most of the time t1 and t2 are "sintactically" the same   *)
-   if t1 = t2 then
-    true
-   else
-    begin
-     let module C = Cic in
-       match (t1,t2) with
-          (C.Rel n1, C.Rel n2) -> n1 = n2
-        | (C.Var (uri1,exp_named_subst1), C.Var (uri2,exp_named_subst2)) ->
-            U.eq uri1 uri2 &&
-             (try
-               List.fold_right2
-                (fun (uri1,x) (uri2,y) b ->
-                  U.eq uri1 uri2 && aux context x y && b
-                ) exp_named_subst1 exp_named_subst2 true 
-              with
-               Invalid_argument _ -> false
-             )
-        | (C.Meta (n1,l1), C.Meta (n2,l2)) -> 
-            n1 = n2 &&
-             List.fold_left2
-              (fun b t1 t2 ->
-                b &&
-                 match t1,t2 with
-                    None,_
-                  | _,None  -> true
-                  | Some t1',Some t2' -> aux context t1' t2'
-              ) true l1 l2
-        | (C.Sort s1, C.Sort s2) -> true (*CSC da finire con gli universi *)
-        | (C.Prod (name1,s1,t1), C.Prod(_,s2,t2)) ->
-           aux context s1 s2 && aux ((Some (name1, (C.Decl s1)))::context) t1 t2
-        | (C.Lambda (name1,s1,t1), C.Lambda(_,s2,t2)) ->
-           aux context s1 s2 && aux ((Some (name1, (C.Decl s1)))::context) t1 t2
-        | (C.LetIn (name1,s1,t1), C.LetIn(_,s2,t2)) ->
-           aux context s1 s2 && aux ((Some (name1, (C.Def s1)))::context) t1 t2
-        | (C.Appl l1, C.Appl l2) ->
-           (try
-             List.fold_right2 (fun  x y b -> aux context x y && b) l1 l2 true 
-            with
-             Invalid_argument _ -> false
-           )
-        | (C.Const (uri1,exp_named_subst1), C.Const (uri2,exp_named_subst2)) ->
-            U.eq uri1 uri2 &&
-             (try
-               List.fold_right2
-                (fun (uri1,x) (uri2,y) b ->
-                  U.eq uri1 uri2 && aux context x y && b
-                ) exp_named_subst1 exp_named_subst2 true 
-              with
-               Invalid_argument _ -> false
-             )
-        | (C.MutInd (uri1,i1,exp_named_subst1),
-           C.MutInd (uri2,i2,exp_named_subst2)
-          ) ->
-            U.eq uri1 uri2 && i1 = i2 &&
-             (try
-               List.fold_right2
-                (fun (uri1,x) (uri2,y) b ->
-                  U.eq uri1 uri2 && aux context x y && b
-                ) exp_named_subst1 exp_named_subst2 true 
-              with
-               Invalid_argument _ -> false
-             )
-        | (C.MutConstruct (uri1,i1,j1,exp_named_subst1),
-           C.MutConstruct (uri2,i2,j2,exp_named_subst2)
-          ) ->
-            U.eq uri1 uri2 && i1 = i2 && j1 = j2 &&
-             (try
-               List.fold_right2
-                (fun (uri1,x) (uri2,y) b ->
-                  U.eq uri1 uri2 && aux context x y && b
-                ) exp_named_subst1 exp_named_subst2 true 
-              with
-               Invalid_argument _ -> false
-             )
-        | (C.MutCase (uri1,i1,outtype1,term1,pl1),
-           C.MutCase (uri2,i2,outtype2,term2,pl2)) -> 
-            U.eq uri1 uri2 && i1 = i2 && aux context outtype1 outtype2 &&
-             aux context term1 term2 &&
-             List.fold_right2 (fun x y b -> b && aux context x y) pl1 pl2 true
-        | (C.Fix (i1,fl1), C.Fix (i2,fl2)) ->
-           let tys =
-            List.map (function (n,_,ty,_) -> Some (C.Name n,(C.Decl ty))) fl1
-           in
-            i1 = i2 &&
-             List.fold_right2
-              (fun (_,recindex1,ty1,bo1) (_,recindex2,ty2,bo2) b ->
-                b && recindex1 = recindex2 && aux context ty1 ty2 &&
-                 aux (tys@context) bo1 bo2)
-              fl1 fl2 true
-        | (C.CoFix (i1,fl1), C.CoFix (i2,fl2)) ->
-           let tys =
-            List.map (function (n,ty,_) -> Some (C.Name n,(C.Decl ty))) fl1
-           in
-            i1 = i2 &&
-             List.fold_right2
-              (fun (_,ty1,bo1) (_,ty2,bo2) b ->
-                b && aux context ty1 ty2 && aux (tys@context) bo1 bo2)
-              fl1 fl2 true
-        | (C.Cast _, _) | (_, C.Cast _)
-        | (C.Implicit, _) | (_, C.Implicit) ->
-           raise (Impossible 3) (* we don't trust our whd ;-) *)
-        | (_,_) -> false
-    end
-  in
-   if aux2 t1 t2 then true
-   else
-    begin
-     debug t1 [t2] "PREWHD";
-     let t1' = whd context t1 in
-     let t2' = whd context t2 in
-      debug t1' [t2'] "POSTWHD";
-      aux2 t1' t2'
-    end
- in
-  aux
-;;
diff --git a/helm/ocaml/cic_proof_checking/cicReductionMachine.mli b/helm/ocaml/cic_proof_checking/cicReductionMachine.mli
deleted file mode 100644 (file)
index 7a62550..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception WrongUriToInductiveDefinition
-exception ReferenceToConstant
-exception ReferenceToVariable
-exception ReferenceToCurrentProof
-exception ReferenceToInductiveDefinition
-val fdebug : int ref
-val whd : Cic.context -> Cic.term -> Cic.term
-val are_convertible : Cic.context -> Cic.term -> Cic.term -> bool
diff --git a/helm/ocaml/cic_proof_checking/cicReductionNaif.ml b/helm/ocaml/cic_proof_checking/cicReductionNaif.ml
deleted file mode 100644 (file)
index 987f4b6..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception CicReductionInternalError;;
-exception WrongUriToInductiveDefinition;;
-
-let fdebug = ref 1;;
-let debug t env s =
- let rec debug_aux t i =
-  let module C = Cic in
-  let module U = UriManager in
-   CicPp.ppobj (C.Variable ("DEBUG", None, t, [])) ^ "\n" ^ i
- in
-  if !fdebug = 0 then
-   prerr_endline (s ^ "\n" ^ List.fold_right debug_aux (t::env) "")
-;;
-
-exception Impossible of int;;
-exception ReferenceToConstant;;
-exception ReferenceToVariable;;
-exception ReferenceToCurrentProof;;
-exception ReferenceToInductiveDefinition;;
-exception RelToHiddenHypothesis;;
-
-(* takes a well-typed term *)
-let whd context =
- let rec whdaux l =
-  let module C = Cic in
-  let module S = CicSubstitution in
-   function
-      C.Rel n as t ->
-       (match List.nth context (n-1) with
-           Some (_, C.Decl _) -> if l = [] then t else C.Appl (t::l)
-         | Some (_, C.Def bo) -> whdaux l (S.lift n bo)
-         | None -> raise RelToHiddenHypothesis
-       )
-    | C.Var (uri,exp_named_subst) as t ->
-       (match CicEnvironment.get_cooked_obj ~trust:false uri with
-           C.Constant _ -> raise ReferenceToConstant
-         | C.CurrentProof _ -> raise ReferenceToCurrentProof
-         | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-         | C.Variable (_,None,_,_) -> if l = [] then t else C.Appl (t::l)
-         | C.Variable (_,Some body,_,_) ->
-            whdaux l (CicSubstitution.subst_vars exp_named_subst body)
-       )
-    | C.Meta _ as t -> if l = [] then t else C.Appl (t::l)
-    | C.Sort _ as t -> t (* l should be empty *)
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) -> whdaux l te  (*CSC E' GIUSTO BUTTARE IL CAST? *)
-    | C.Prod _ as t -> t (* l should be empty *)
-    | C.Lambda (name,s,t) as t' ->
-       (match l with
-           [] -> t'
-         | he::tl -> whdaux tl (S.subst he t)
-           (* when name is Anonimous the substitution should be superfluous *)
-       )
-    | C.LetIn (n,s,t) -> whdaux l (S.subst (whdaux [] s) t)
-    | C.Appl (he::tl) -> whdaux (tl@l) he
-    | C.Appl [] -> raise (Impossible 1)
-    | C.Const (uri,exp_named_subst) as t ->
-       (match CicEnvironment.get_cooked_obj ~trust:false uri with
-           C.Constant (_,Some body,_,_) ->
-            whdaux l (CicSubstitution.subst_vars exp_named_subst body)
-         | C.Constant _ -> if l = [] then t else C.Appl (t::l)
-         | C.Variable _ -> raise ReferenceToVariable
-         | C.CurrentProof (_,_,body,_,_) ->
-            whdaux l (CicSubstitution.subst_vars exp_named_subst body)
-         | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-       )
-    | C.MutInd _ as t -> if l = [] then t else C.Appl (t::l)
-    | C.MutConstruct _ as t -> if l = [] then t else C.Appl (t::l)
-    | C.MutCase (mutind,i,_,term,pl) as t->
-       let decofix =
-        function
-           C.CoFix (i,fl) as t ->
-            let (_,_,body) = List.nth fl i in
-             let body' =
-              let counter = ref (List.length fl) in
-               List.fold_right
-                (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl)))
-                fl
-                body
-             in
-              whdaux [] body'
-         | C.Appl (C.CoFix (i,fl) :: tl) ->
-            let (_,_,body) = List.nth fl i in
-             let body' =
-              let counter = ref (List.length fl) in
-               List.fold_right
-                (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl)))
-                fl
-                body
-             in
-              whdaux tl body'
-         | t -> t
-       in
-        (match decofix (whdaux [] term) with
-            C.MutConstruct (_,_,j,_) -> whdaux l (List.nth pl (j-1))
-          | C.Appl (C.MutConstruct (_,_,j,_) :: tl) ->
-             let (arity, r) =
-              match CicEnvironment.get_obj mutind with
-                 C.InductiveDefinition (tl,ingredients,r) ->
-                   let (_,_,arity,_) = List.nth tl i in
-                    (arity,r)
-               | _ -> raise WrongUriToInductiveDefinition
-             in
-              let ts =
-               let rec eat_first =
-                function
-                   (0,l) -> l
-                 | (n,he::tl) when n > 0 -> eat_first (n - 1, tl)
-                 | _ -> raise (Impossible 5)
-               in
-                eat_first (r,tl)
-              in
-               whdaux (ts@l) (List.nth pl (j-1))
-          | C.Cast _ | C.Implicit ->
-             raise (Impossible 2) (* we don't trust our whd ;-) *)
-          | _ -> if l = [] then t else C.Appl (t::l)
-       )
-    | C.Fix (i,fl) as t ->
-       let (_,recindex,_,body) = List.nth fl i in
-        let recparam =
-         try
-          Some (List.nth l recindex)
-         with
-          _ -> None
-        in
-         (match recparam with
-             Some recparam ->
-              (match whdaux [] recparam with
-                  C.MutConstruct _
-                | C.Appl ((C.MutConstruct _)::_) ->
-                   let body' =
-                    let counter = ref (List.length fl) in
-                     List.fold_right
-                      (fun _ -> decr counter ; S.subst (C.Fix (!counter,fl)))
-                      fl
-                      body
-                   in
-                    (* Possible optimization: substituting whd recparam in l *)
-                    whdaux l body'
-               | _ -> if l = [] then t else C.Appl (t::l)
-             )
-          | None -> if l = [] then t else C.Appl (t::l)
-         )
-    | C.CoFix (i,fl) as t ->
-       if l = [] then t else C.Appl (t::l)
- in
-(*CSC
-function t ->
-prerr_endline ("PRIMA WHD" ^ CicPp.ppterm t) ; flush stderr ;
-List.iter (function (Cic.Decl t) -> prerr_endline ("Context: " ^ CicPp.ppterm t) | (Cic.Def t) -> prerr_endline ("Context:= " ^ CicPp.ppterm t)) context ; flush stderr ; prerr_endline "<PRIMA WHD" ; flush stderr ;
-let res =
-*)
-  whdaux []
-(*CSC
-t in prerr_endline "DOPO WHD" ; flush stderr ; res
-*)
-;;
-
-(* t1, t2 must be well-typed *)
-let are_convertible =
- let module U = UriManager in
- let rec aux context t1 t2 =
-  let aux2 t1 t2 =
-   (* this trivial euristic cuts down the total time of about five times ;-) *)
-   (* this because most of the time t1 and t2 are "sintactically" the same   *)
-   if t1 = t2 then
-    true
-   else
-    begin
-     let module C = Cic in
-       match (t1,t2) with
-          (C.Rel n1, C.Rel n2) -> n1 = n2
-        | (C.Var (uri1,exp_named_subst1), C.Var (uri2,exp_named_subst2)) ->
-            U.eq uri1 uri2 &&
-             (try
-               List.fold_right2
-                (fun (uri1,x) (uri2,y) b ->
-                  U.eq uri1 uri2 && aux context x y && b
-                ) exp_named_subst1 exp_named_subst2 true 
-              with
-               Invalid_argument _ -> false
-             )
-        | (C.Meta (n1,l1), C.Meta (n2,l2)) -> 
-            n1 = n2 &&
-             List.fold_left2
-              (fun b t1 t2 ->
-                b &&
-                 match t1,t2 with
-                    None,_
-                  | _,None  -> true
-                  | Some t1',Some t2' -> aux context t1' t2'
-              ) true l1 l2
-        | (C.Sort s1, C.Sort s2) -> true (*CSC da finire con gli universi *)
-        | (C.Prod (name1,s1,t1), C.Prod(_,s2,t2)) ->
-           aux context s1 s2 && aux ((Some (name1, (C.Decl s1)))::context) t1 t2
-        | (C.Lambda (name1,s1,t1), C.Lambda(_,s2,t2)) ->
-           aux context s1 s2 && aux ((Some (name1, (C.Decl s1)))::context) t1 t2
-        | (C.LetIn (name1,s1,t1), C.LetIn(_,s2,t2)) ->
-           aux context s1 s2 && aux ((Some (name1, (C.Def s1)))::context) t1 t2
-        | (C.Appl l1, C.Appl l2) ->
-           (try
-             List.fold_right2 (fun  x y b -> aux context x y && b) l1 l2 true 
-            with
-             Invalid_argument _ -> false
-           )
-        | (C.Const (uri1,exp_named_subst1), C.Const (uri2,exp_named_subst2)) ->
-            U.eq uri1 uri2 &&
-             (try
-               List.fold_right2
-                (fun (uri1,x) (uri2,y) b ->
-                  U.eq uri1 uri2 && aux context x y && b
-                ) exp_named_subst1 exp_named_subst2 true 
-              with
-               Invalid_argument _ -> false
-             )
-        | (C.MutInd (uri1,i1,exp_named_subst1),
-           C.MutInd (uri2,i2,exp_named_subst2)
-          ) ->
-            U.eq uri1 uri2 && i1 = i2 &&
-             (try
-               List.fold_right2
-                (fun (uri1,x) (uri2,y) b ->
-                  U.eq uri1 uri2 && aux context x y && b
-                ) exp_named_subst1 exp_named_subst2 true 
-              with
-               Invalid_argument _ -> false
-             )
-        | (C.MutConstruct (uri1,i1,j1,exp_named_subst1),
-           C.MutConstruct (uri2,i2,j2,exp_named_subst2)
-          ) ->
-            U.eq uri1 uri2 && i1 = i2 && j1 = j2 &&
-             (try
-               List.fold_right2
-                (fun (uri1,x) (uri2,y) b ->
-                  U.eq uri1 uri2 && aux context x y && b
-                ) exp_named_subst1 exp_named_subst2 true 
-              with
-               Invalid_argument _ -> false
-             )
-        | (C.MutCase (uri1,i1,outtype1,term1,pl1),
-           C.MutCase (uri2,i2,outtype2,term2,pl2)) -> 
-            U.eq uri1 uri2 && i1 = i2 && aux context outtype1 outtype2 &&
-             aux context term1 term2 &&
-             List.fold_right2 (fun x y b -> b && aux context x y) pl1 pl2 true
-        | (C.Fix (i1,fl1), C.Fix (i2,fl2)) ->
-           let tys =
-            List.map (function (n,_,ty,_) -> Some (C.Name n,(C.Decl ty))) fl1
-           in
-            i1 = i2 &&
-             List.fold_right2
-              (fun (_,recindex1,ty1,bo1) (_,recindex2,ty2,bo2) b ->
-                b && recindex1 = recindex2 && aux context ty1 ty2 &&
-                 aux (tys@context) bo1 bo2)
-              fl1 fl2 true
-        | (C.CoFix (i1,fl1), C.CoFix (i2,fl2)) ->
-           let tys =
-            List.map (function (n,ty,_) -> Some (C.Name n,(C.Decl ty))) fl1
-           in
-            i1 = i2 &&
-             List.fold_right2
-              (fun (_,ty1,bo1) (_,ty2,bo2) b ->
-                b && aux context ty1 ty2 && aux (tys@context) bo1 bo2)
-              fl1 fl2 true
-        | (C.Cast _, _) | (_, C.Cast _)
-        | (C.Implicit, _) | (_, C.Implicit) ->
-           raise (Impossible 3) (* we don't trust our whd ;-) *)
-        | (_,_) -> false
-    end
-  in
-   if aux2 t1 t2 then true
-   else
-    begin
-     debug t1 [t2] "PREWHD";
-     let t1' = whd context t1 
-     and t2' = whd context t2 in
-      debug t1' [t2'] "POSTWHD";
-      aux2 t1' t2'
-    end
- in
-  aux
-;;
diff --git a/helm/ocaml/cic_proof_checking/cicReductionNaif.mli b/helm/ocaml/cic_proof_checking/cicReductionNaif.mli
deleted file mode 100644 (file)
index 7a62550..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception WrongUriToInductiveDefinition
-exception ReferenceToConstant
-exception ReferenceToVariable
-exception ReferenceToCurrentProof
-exception ReferenceToInductiveDefinition
-val fdebug : int ref
-val whd : Cic.context -> Cic.term -> Cic.term
-val are_convertible : Cic.context -> Cic.term -> Cic.term -> bool
diff --git a/helm/ocaml/cic_proof_checking/cicSubstitution.ml b/helm/ocaml/cic_proof_checking/cicSubstitution.ml
deleted file mode 100644 (file)
index 4a938ac..0000000
+++ /dev/null
@@ -1,412 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception CannotSubstInMeta;;
-exception RelToHiddenHypothesis;;
-exception ReferenceToVariable;;
-exception ReferenceToConstant;;
-exception ReferenceToCurrentProof;;
-exception ReferenceToInductiveDefinition;;
-
-let lift n =
- let rec liftaux k =
-  let module C = Cic in
-   function
-      C.Rel m ->
-       if m < k then
-        C.Rel m
-       else
-        C.Rel (m + n)
-    | C.Var (uri,exp_named_subst) ->
-       let exp_named_subst' = 
-        List.map (function (uri,t) -> (uri,liftaux k t)) exp_named_subst
-       in
-        C.Var (uri,exp_named_subst')
-    | C.Meta (i,l) ->
-       let l' =
-        List.map
-         (function
-             None -> None
-           | Some t -> Some (liftaux k t)
-         ) l
-       in
-        C.Meta(i,l')
-    | C.Sort _ as t -> t
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) -> C.Cast (liftaux k te, liftaux k ty)
-    | C.Prod (n,s,t) -> C.Prod (n, liftaux k s, liftaux (k+1) t)
-    | C.Lambda (n,s,t) -> C.Lambda (n, liftaux k s, liftaux (k+1) t)
-    | C.LetIn (n,s,t) -> C.LetIn (n, liftaux k s, liftaux (k+1) t)
-    | C.Appl l -> C.Appl (List.map (liftaux k) l)
-    | C.Const (uri,exp_named_subst) ->
-       let exp_named_subst' = 
-        List.map (function (uri,t) -> (uri,liftaux k t)) exp_named_subst
-       in
-        C.Const (uri,exp_named_subst')
-    | C.MutInd (uri,tyno,exp_named_subst) ->
-       let exp_named_subst' = 
-        List.map (function (uri,t) -> (uri,liftaux k t)) exp_named_subst
-       in
-        C.MutInd (uri,tyno,exp_named_subst')
-    | C.MutConstruct (uri,tyno,consno,exp_named_subst) ->
-       let exp_named_subst' = 
-        List.map (function (uri,t) -> (uri,liftaux k t)) exp_named_subst
-       in
-        C.MutConstruct (uri,tyno,consno,exp_named_subst')
-    | C.MutCase (sp,i,outty,t,pl) ->
-       C.MutCase (sp, i, liftaux k outty, liftaux k t,
-        List.map (liftaux k) pl)
-    | C.Fix (i, fl) ->
-       let len = List.length fl in
-       let liftedfl =
-        List.map
-         (fun (name, i, ty, bo) -> (name, i, liftaux k ty, liftaux (k+len) bo))
-          fl
-       in
-        C.Fix (i, liftedfl)
-    | C.CoFix (i, fl) ->
-       let len = List.length fl in
-       let liftedfl =
-        List.map
-         (fun (name, ty, bo) -> (name, liftaux k ty, liftaux (k+len) bo))
-          fl
-       in
-        C.CoFix (i, liftedfl)
- in
-  if n = 0 then
-   (function t -> t)
-  else
-   liftaux 1
-;;
-
-let subst arg =
- let rec substaux k =
-  let module C = Cic in
-   function
-      C.Rel n as t ->
-       (match n with
-           n when n = k -> lift (k - 1) arg
-         | n when n < k -> t
-         | _            -> C.Rel (n - 1)
-       )
-    | C.Var (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> (uri,substaux k t)) exp_named_subst
-       in
-        C.Var (uri,exp_named_subst')
-    | C.Meta (i, l) as t -> 
-       let l' =
-        List.map
-         (function
-             None -> None
-           | Some t -> Some (substaux k t)
-         ) l
-       in
-        C.Meta(i,l')
-    | C.Sort _ as t -> t
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) -> C.Cast (substaux k te, substaux k ty)
-    | C.Prod (n,s,t) -> C.Prod (n, substaux k s, substaux (k + 1) t)
-    | C.Lambda (n,s,t) -> C.Lambda (n, substaux k s, substaux (k + 1) t)
-    | C.LetIn (n,s,t) -> C.LetIn (n, substaux k s, substaux (k + 1) t)
-    | C.Appl (he::tl) ->
-       (* Invariant: no Appl applied to another Appl *)
-       let tl' = List.map (substaux k) tl in
-        begin
-         match substaux k he with
-            C.Appl l -> C.Appl (l@tl')
-          | _ as he' -> C.Appl (he'::tl')
-        end
-    | C.Appl _ -> assert false
-    | C.Const (uri,exp_named_subst)  ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> (uri,substaux k t)) exp_named_subst
-       in
-        C.Const (uri,exp_named_subst')
-    | C.MutInd (uri,typeno,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> (uri,substaux k t)) exp_named_subst
-       in
-        C.MutInd (uri,typeno,exp_named_subst')
-    | C.MutConstruct (uri,typeno,consno,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> (uri,substaux k t)) exp_named_subst
-       in
-        C.MutConstruct (uri,typeno,consno,exp_named_subst')
-    | C.MutCase (sp,i,outt,t,pl) ->
-       C.MutCase (sp,i,substaux k outt, substaux k t,
-        List.map (substaux k) pl)
-    | C.Fix (i,fl) ->
-       let len = List.length fl in
-       let substitutedfl =
-        List.map
-         (fun (name,i,ty,bo) -> (name, i, substaux k ty, substaux (k+len) bo))
-          fl
-       in
-        C.Fix (i, substitutedfl)
-    | C.CoFix (i,fl) ->
-       let len = List.length fl in
-       let substitutedfl =
-        List.map
-         (fun (name,ty,bo) -> (name, substaux k ty, substaux (k+len) bo))
-          fl
-       in
-        C.CoFix (i, substitutedfl)
- in
-  substaux 1
-;;
-
-(*CSC: i controlli di tipo debbono essere svolti da destra a             *)
-(*CSC: sinistra: i{B/A;b/a} ==> a{B/A;b/a} ==> a{b/a{B/A}} ==> b         *)
-(*CSC: la sostituzione ora e' implementata in maniera simultanea, ma     *)
-(*CSC: dovrebbe diventare da sinistra verso destra:                      *)
-(*CSC: t{a=a/A;b/a} ==> \H:a=a.H{b/a} ==> \H:b=b.H                       *)
-(*CSC: per la roba che proviene da Coq questo non serve!                 *)
-let subst_vars exp_named_subst =
-(*
-prerr_endline ("@@@POSSIBLE BUG: SUBSTITUTION IS NOT SIMULTANEOUS") ;
-*)
- let rec substaux k =
-  let module C = Cic in
-   function
-      C.Rel _ as t -> t
-    | C.Var (uri,exp_named_subst') ->
-       (try
-         let (_,arg) =
-          List.find
-           (function (varuri,_) -> UriManager.eq uri varuri) exp_named_subst
-         in
-          lift (k -1) arg
-        with
-         Not_found ->
-          let params =
-           (match CicEnvironment.get_cooked_obj ~trust:true uri with
-               C.Constant _ -> raise ReferenceToConstant
-             | C.Variable (_,_,_,params) -> params
-             | C.CurrentProof _ -> raise ReferenceToCurrentProof
-             | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-           )
-          in
-(*
-prerr_endline "\n\n---- BEGIN " ;
-prerr_endline ("----params: " ^ String.concat " ; " (List.map UriManager.string_of_uri params)) ;
-prerr_endline ("----S(" ^ UriManager.string_of_uri uri ^ "): " ^ String.concat " ; " (List.map (function (uri,_) -> UriManager.string_of_uri uri) exp_named_subst)) ;
-prerr_endline ("----P: " ^ String.concat " ; " (List.map (function (uri,_) -> UriManager.string_of_uri uri) exp_named_subst')) ;
-*)
-           let exp_named_subst'' =
-            substaux_in_exp_named_subst uri k exp_named_subst' params
-           in
-(*
-prerr_endline ("----D: " ^ String.concat " ; " (List.map (function (uri,_) -> UriManager.string_of_uri uri) exp_named_subst'')) ;
-prerr_endline "---- END\n\n " ;
-*)
-            C.Var (uri,exp_named_subst'')
-       )
-    | C.Meta (i, l) as t -> 
-       let l' =
-        List.map
-         (function
-             None -> None
-           | Some t -> Some (substaux k t)
-         ) l
-       in
-        C.Meta(i,l')
-    | C.Sort _ as t -> t
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) -> C.Cast (substaux k te, substaux k ty)
-    | C.Prod (n,s,t) -> C.Prod (n, substaux k s, substaux (k + 1) t)
-    | C.Lambda (n,s,t) -> C.Lambda (n, substaux k s, substaux (k + 1) t)
-    | C.LetIn (n,s,t) -> C.LetIn (n, substaux k s, substaux (k + 1) t)
-    | C.Appl (he::tl) ->
-       (* Invariant: no Appl applied to another Appl *)
-       let tl' = List.map (substaux k) tl in
-        begin
-         match substaux k he with
-            C.Appl l -> C.Appl (l@tl')
-          | _ as he' -> C.Appl (he'::tl')
-        end
-    | C.Appl _ -> assert false
-    | C.Const (uri,exp_named_subst')  ->
-       let params =
-        (match CicEnvironment.get_cooked_obj ~trust:true uri with
-            C.Constant (_,_,_,params) -> params
-          | C.Variable _ -> raise ReferenceToVariable
-          | C.CurrentProof (_,_,_,_,params) -> params
-          | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-        )
-       in
-        let exp_named_subst'' =
-         substaux_in_exp_named_subst uri k exp_named_subst' params
-        in
-         C.Const (uri,exp_named_subst'')
-    | C.MutInd (uri,typeno,exp_named_subst') ->
-       let params =
-        (match CicEnvironment.get_cooked_obj ~trust:true uri with
-            C.Constant _ -> raise ReferenceToConstant
-          | C.Variable _ -> raise ReferenceToVariable
-          | C.CurrentProof _ -> raise ReferenceToCurrentProof
-          | C.InductiveDefinition (_,params,_) -> params
-        )
-       in
-        let exp_named_subst'' =
-         substaux_in_exp_named_subst uri k exp_named_subst' params
-        in
-         C.MutInd (uri,typeno,exp_named_subst'')
-    | C.MutConstruct (uri,typeno,consno,exp_named_subst') ->
-       let params =
-        (match CicEnvironment.get_cooked_obj ~trust:true uri with
-            C.Constant _ -> raise ReferenceToConstant
-          | C.Variable _ -> raise ReferenceToVariable
-          | C.CurrentProof _ -> raise ReferenceToCurrentProof
-          | C.InductiveDefinition (_,params,_) -> params
-        )
-       in
-        let exp_named_subst'' =
-         substaux_in_exp_named_subst uri k exp_named_subst' params
-        in
-         C.MutConstruct (uri,typeno,consno,exp_named_subst'')
-    | C.MutCase (sp,i,outt,t,pl) ->
-       C.MutCase (sp,i,substaux k outt, substaux k t,
-        List.map (substaux k) pl)
-    | C.Fix (i,fl) ->
-       let len = List.length fl in
-       let substitutedfl =
-        List.map
-         (fun (name,i,ty,bo) -> (name, i, substaux k ty, substaux (k+len) bo))
-          fl
-       in
-        C.Fix (i, substitutedfl)
-    | C.CoFix (i,fl) ->
-       let len = List.length fl in
-       let substitutedfl =
-        List.map
-         (fun (name,ty,bo) -> (name, substaux k ty, substaux (k+len) bo))
-          fl
-       in
-        C.CoFix (i, substitutedfl)
- and substaux_in_exp_named_subst uri k exp_named_subst' params =
-(*CSC: invece di concatenare sarebbe meglio rispettare l'ordine dei params *)
-(*CSC: e' vero???? una veloce prova non sembra confermare la teoria        *)
-  let rec filter_and_lift =
-   function
-      [] -> []
-    | (uri,t)::tl when
-        List.for_all
-         (function (uri',_) -> not (UriManager.eq uri uri')) exp_named_subst'
-        &&
-         List.mem uri params
-       ->
-        (uri,lift (k-1) t)::(filter_and_lift tl)
-    | _::tl -> filter_and_lift tl
-(*
-    | (uri,_)::tl ->
-prerr_endline ("---- SKIPPO " ^ UriManager.string_of_uri uri) ;
-if List.for_all (function (uri',_) -> not (UriManager.eq uri uri')) exp_named_subst' then prerr_endline "---- OK1" ;
-prerr_endline ("++++ uri " ^ UriManager.string_of_uri uri ^ " not in " ^ String.concat " ; " (List.map UriManager.string_of_uri params)) ;
-if List.mem uri params then prerr_endline "---- OK2" ;
-        filter_and_lift tl
-*)
-  in
-   List.map (function (uri,t) -> (uri,substaux k t)) exp_named_subst' @
-    (filter_and_lift exp_named_subst)
- in
-  substaux 1
-;;
-
-(* l is the relocation list *)
-let lift_meta l t = 
-    let module C = Cic in
-    if l = [] then t else 
-    let rec aux k = function
-      C.Rel n as t -> 
-       if n <= k then t else 
-         (try
-           match List.nth l (n-k-1) with
-              None -> raise RelToHiddenHypothesis
-            | Some t -> lift k t
-          with
-           (Failure _) -> assert false
-         )
-    | C.Var (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> (uri,aux k t)) exp_named_subst
-       in
-        C.Var (uri,exp_named_subst')
-    | C.Meta (i,l) ->
-       let l' =
-        List.map
-         (function
-             None -> None
-           | Some t ->
-              try
-               Some (aux k t)
-              with
-               RelToHiddenHypothesis -> None
-         ) l
-       in
-        C.Meta(i,l')
-    | C.Sort _ as t -> t
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) -> C.Cast (aux k te, aux k ty) (*CSC ??? *)
-    | C.Prod (n,s,t) -> C.Prod (n, aux k s, aux (k + 1) t)
-    | C.Lambda (n,s,t) -> C.Lambda (n, aux k s, aux (k + 1) t)
-    | C.LetIn (n,s,t) -> C.LetIn (n, aux k s, aux (k + 1) t)
-    | C.Appl l -> C.Appl (List.map (aux k) l)
-    | C.Const (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> (uri,aux k t)) exp_named_subst
-       in
-        C.Const (uri,exp_named_subst')
-    | C.MutInd (uri,typeno,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> (uri,aux k t)) exp_named_subst
-       in
-        C.MutInd (uri,typeno,exp_named_subst')
-    | C.MutConstruct (uri,typeno,consno,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> (uri,aux k t)) exp_named_subst
-       in
-        C.MutConstruct (uri,typeno,consno,exp_named_subst')
-    | C.MutCase (sp,i,outt,t,pl) ->
-       C.MutCase (sp,i,aux k outt, aux k t, List.map (aux k) pl)
-    | C.Fix (i,fl) ->
-       let len = List.length fl in
-       let substitutedfl =
-        List.map
-         (fun (name,i,ty,bo) -> (name, i, aux k ty, aux (k+len) bo))
-          fl
-       in
-        C.Fix (i, substitutedfl)
-    | C.CoFix (i,fl) ->
-       let len = List.length fl in
-       let substitutedfl =
-        List.map
-         (fun (name,ty,bo) -> (name, aux k ty, aux (k+len) bo))
-          fl
-       in
-        C.CoFix (i, substitutedfl)
- in
-  aux 0 t          
-;;
diff --git a/helm/ocaml/cic_proof_checking/cicSubstitution.mli b/helm/ocaml/cic_proof_checking/cicSubstitution.mli
deleted file mode 100644 (file)
index 038b5de..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception CannotSubstInMeta;;
-exception RelToHiddenHypothesis;;
-exception ReferenceToVariable;;
-exception ReferenceToConstant;;
-exception ReferenceToInductiveDefinition;;
-
-(* lift n t         *)
-(* lifts [t] of [n] *)
-val lift : int -> Cic.term -> Cic.term
-
-(* subst t1 t2                          *)
-(* substitutes [t1] for [Rel 1] in [t2] *)
-val subst : Cic.term -> Cic.term -> Cic.term
-
-(* subst_vars exp_named_subst t2     *)
-(* applies [exp_named_subst] to [t2] *)
-val subst_vars :
- Cic.term Cic.explicit_named_substitution -> Cic.term -> Cic.term
-
-(* ?????????? *)
-val lift_meta : (Cic.term option) list -> Cic.term -> Cic.term
diff --git a/helm/ocaml/cic_proof_checking/cicTypeChecker.ml b/helm/ocaml/cic_proof_checking/cicTypeChecker.ml
deleted file mode 100644 (file)
index 48d8b2e..0000000
+++ /dev/null
@@ -1,1785 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-type type_checker_exn =
-   Impossible of int
- | NotWellTyped of string
- | WrongUriToConstant of string
- | WrongUriToVariable of string
- | WrongUriToMutualInductiveDefinitions of string
- | ListTooShort
- | NotPositiveOccurrences of string
- | NotWellFormedTypeOfInductiveConstructor of string
- | WrongRequiredArgument of string
- | RelToHiddenHypothesis
- | MetasenvInconsistency;;
-
-(* This is the only exception that will be raised *)
-exception TypeCheckerFailure of type_checker_exn;;
-
-let fdebug = ref 0;;
-let debug t context =
- let rec debug_aux t i =
-  let module C = Cic in
-  let module U = UriManager in
-   CicPp.ppobj (C.Variable ("DEBUG", None, t, [])) ^ "\n" ^ i
- in
-  if !fdebug = 0 then
-   raise
-    (TypeCheckerFailure
-      (NotWellTyped ("\n" ^ List.fold_right debug_aux (t::context) "")))
-   (*print_endline ("\n" ^ List.fold_right debug_aux (t::context) "") ; flush stdout*)
-;;
-
-let rec split l n =
- match (l,n) with
-    (l,0) -> ([], l)
-  | (he::tl, n) -> let (l1,l2) = split tl (n-1) in (he::l1,l2)
-  | (_,_) -> raise (TypeCheckerFailure ListTooShort)
-;;
-
-let debrujin_constructor uri number_of_types =
- let rec aux k =
-  let module C = Cic in
-   function
-      C.Rel n as t when n <= k -> t
-    | C.Rel _ ->
-        raise (TypeCheckerFailure (NotWellTyped ("Debrujin: open term found")))
-    | C.Var (uri,exp_named_subst) ->
-       let exp_named_subst' = 
-        List.map (function (uri,t) -> (uri,aux k t)) exp_named_subst
-       in
-        C.Var (uri,exp_named_subst')
-    | C.Meta _ -> assert false
-    | C.Sort _
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) -> C.Cast (aux k te, aux k ty)
-    | C.Prod (n,s,t) -> C.Prod (n, aux k s, aux (k+1) t)
-    | C.Lambda (n,s,t) -> C.Lambda (n, aux k s, aux (k+1) t)
-    | C.LetIn (n,s,t) -> C.LetIn (n, aux k s, aux (k+1) t)
-    | C.Appl l -> C.Appl (List.map (aux k) l)
-    | C.Const (uri,exp_named_subst) ->
-       let exp_named_subst' = 
-        List.map (function (uri,t) -> (uri,aux k t)) exp_named_subst
-       in
-        C.Const (uri,exp_named_subst')
-    | C.MutInd (uri',tyno,exp_named_subst) when UriManager.eq uri uri' ->
-       if exp_named_subst != [] then
-        raise
-         (TypeCheckerFailure
-           (NotWellTyped
-            ("Debrujin: a non-empty explicit named substitution is applied to "^
-             "a mutual inductive type which is being defined"))) ;
-       C.Rel (k + number_of_types - tyno) ;
-    | C.MutInd (uri',tyno,exp_named_subst) ->
-       let exp_named_subst' = 
-        List.map (function (uri,t) -> (uri,aux k t)) exp_named_subst
-       in
-        C.MutInd (uri',tyno,exp_named_subst')
-    | C.MutConstruct (uri,tyno,consno,exp_named_subst) ->
-       let exp_named_subst' = 
-        List.map (function (uri,t) -> (uri,aux k t)) exp_named_subst
-       in
-        C.MutConstruct (uri,tyno,consno,exp_named_subst')
-    | C.MutCase (sp,i,outty,t,pl) ->
-       C.MutCase (sp, i, aux k outty, aux k t,
-        List.map (aux k) pl)
-    | C.Fix (i, fl) ->
-       let len = List.length fl in
-       let liftedfl =
-        List.map
-         (fun (name, i, ty, bo) -> (name, i, aux k ty, aux (k+len) bo))
-          fl
-       in
-        C.Fix (i, liftedfl)
-    | C.CoFix (i, fl) ->
-       let len = List.length fl in
-       let liftedfl =
-        List.map
-         (fun (name, ty, bo) -> (name, aux k ty, aux (k+len) bo))
-          fl
-       in
-        C.CoFix (i, liftedfl)
- in
-  aux 0
-;;
-
-exception CicEnvironmentError;;
-
-let rec type_of_constant uri =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  let cobj =
-   match CicEnvironment.is_type_checked ~trust:true uri with
-      CicEnvironment.CheckedObj cobj -> cobj
-    | CicEnvironment.UncheckedObj uobj ->
-       Logger.log (`Start_type_checking uri) ;
-       (* let's typecheck the uncooked obj *)
-       (match uobj with
-           C.Constant (_,Some te,ty,_) ->
-             let _ = type_of ty in
-              if not (R.are_convertible [] (type_of te) ty) then
-               raise
-                (TypeCheckerFailure
-                  (NotWellTyped ("Constant " ^ (U.string_of_uri uri))))
-         | C.Constant (_,None,ty,_) ->
-           (* only to check that ty is well-typed *)
-           let _ = type_of ty in ()
-         | C.CurrentProof (_,conjs,te,ty,_) ->
-             let _ =
-              List.fold_left
-               (fun metasenv ((_,context,ty) as conj) ->
-                 ignore (type_of_aux' metasenv context ty) ;
-                 metasenv @ [conj]
-               ) [] conjs
-             in
-              let _ = type_of_aux' conjs [] ty in
-               if not (R.are_convertible [] (type_of_aux' conjs [] te) ty)
-               then
-                raise
-                 (TypeCheckerFailure
-                   (NotWellTyped ("CurrentProof" ^ (U.string_of_uri uri))))
-         | _ ->
-           raise (TypeCheckerFailure (WrongUriToConstant (U.string_of_uri uri)))
-       ) ;
-       CicEnvironment.set_type_checking_info uri ;
-       Logger.log (`Type_checking_completed uri) ;
-       match CicEnvironment.is_type_checked ~trust:false uri with
-          CicEnvironment.CheckedObj cobj -> cobj
-        | CicEnvironment.UncheckedObj _ -> raise CicEnvironmentError
-  in
-   match cobj with
-      C.Constant (_,_,ty,_) -> ty
-    | C.CurrentProof (_,_,_,ty,_) -> ty
-    | _ -> raise (TypeCheckerFailure (WrongUriToConstant (U.string_of_uri uri)))
-
-and type_of_variable uri =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  (* 0 because a variable is never cooked => no partial cooking at one level *)
-  match CicEnvironment.is_type_checked ~trust:true uri with
-     CicEnvironment.CheckedObj (C.Variable (_,_,ty,_)) -> ty
-   | CicEnvironment.UncheckedObj (C.Variable (_,bo,ty,_)) ->
-      Logger.log (`Start_type_checking uri) ;
-      (* only to check that ty is well-typed *)
-      let _ = type_of ty in
-       (match bo with
-           None -> ()
-         | Some bo ->
-            if not (R.are_convertible [] (type_of bo) ty) then
-             raise
-              (TypeCheckerFailure
-                (NotWellTyped ("Variable " ^ (U.string_of_uri uri))))
-       ) ;
-       CicEnvironment.set_type_checking_info uri ;
-       Logger.log (`Type_checking_completed uri) ;
-       ty
-   |  _ ->
-       raise
-        (TypeCheckerFailure (WrongUriToVariable (UriManager.string_of_uri uri)))
-
-and does_not_occur context n nn te =
- let module C = Cic in
-   (*CSC: whd sembra essere superflua perche' un caso in cui l'occorrenza *)
-   (*CSC: venga mangiata durante la whd sembra presentare problemi di *)
-   (*CSC: universi                                                    *)
-   match CicReduction.whd context te with
-      C.Rel m when m > n && m <= nn -> false
-    | C.Rel _
-    | C.Meta _
-    | C.Sort _
-    | C.Implicit -> true
-    | C.Cast (te,ty) ->
-       does_not_occur context n nn te && does_not_occur context n nn ty
-    | C.Prod (name,so,dest) ->
-       does_not_occur context n nn so &&
-        does_not_occur((Some (name,(C.Decl so)))::context) (n + 1) (nn + 1) dest
-    | C.Lambda (name,so,dest) ->
-       does_not_occur context n nn so &&
-        does_not_occur((Some (name,(C.Decl so)))::context) (n + 1) (nn + 1) dest
-    | C.LetIn (name,so,dest) ->
-       does_not_occur context n nn so &&
-        does_not_occur ((Some (name,(C.Def so)))::context) (n + 1) (nn + 1) dest
-    | C.Appl l ->
-       List.fold_right (fun x i -> i && does_not_occur context n nn x) l true
-    | C.Var (_,exp_named_subst)
-    | C.Const (_,exp_named_subst)
-    | C.MutInd (_,_,exp_named_subst)
-    | C.MutConstruct (_,_,_,exp_named_subst) ->
-       List.fold_right (fun (_,x) i -> i && does_not_occur context n nn x)
-        exp_named_subst true
-    | C.MutCase (_,_,out,te,pl) ->
-       does_not_occur context n nn out && does_not_occur context n nn te &&
-        List.fold_right (fun x i -> i && does_not_occur context n nn x) pl true
-    | C.Fix (_,fl) ->
-       let len = List.length fl in
-        let n_plus_len = n + len in
-        let nn_plus_len = nn + len in
-        let tys =
-         List.map (fun (n,_,ty,_) -> Some (C.Name n,(Cic.Decl ty))) fl
-        in
-         List.fold_right
-          (fun (_,_,ty,bo) i ->
-            i && does_not_occur context n nn ty &&
-            does_not_occur (tys @ context) n_plus_len nn_plus_len bo
-          ) fl true
-    | C.CoFix (_,fl) ->
-       let len = List.length fl in
-        let n_plus_len = n + len in
-        let nn_plus_len = nn + len in
-        let tys =
-         List.map (fun (n,ty,_) -> Some (C.Name n,(Cic.Decl ty))) fl
-        in
-         List.fold_right
-          (fun (_,ty,bo) i ->
-            i && does_not_occur context n nn ty &&
-            does_not_occur (tys @ context) n_plus_len nn_plus_len bo
-          ) fl true
-
-(*CSC l'indice x dei tipi induttivi e' t.c. n < x <= nn *)
-(*CSC questa funzione e' simile alla are_all_occurrences_positive, ma fa *)
-(*CSC dei controlli leggermente diversi. Viene invocata solamente dalla  *)
-(*CSC strictly_positive                                                  *)
-(*CSC definizione (giusta???) tratta dalla mail di Hugo ;-)              *)
-and weakly_positive context n nn uri te =
- let module C = Cic in
-(*CSC: Che schifo! Bisogna capire meglio e trovare una soluzione ragionevole!*)
-  let dummy_mutind =
-   C.MutInd (UriManager.uri_of_string "cic:/Coq/Init/Datatypes/nat.ind",0,[])
-  in
-  (*CSC mettere in cicSubstitution *)
-  let rec subst_inductive_type_with_dummy_mutind =
-   function
-      C.MutInd (uri',0,_) when UriManager.eq uri' uri ->
-       dummy_mutind
-    | C.Appl ((C.MutInd (uri',0,_))::tl) when UriManager.eq uri' uri ->
-       dummy_mutind
-    | C.Cast (te,ty) -> subst_inductive_type_with_dummy_mutind te
-    | C.Prod (name,so,ta) ->
-       C.Prod (name, subst_inductive_type_with_dummy_mutind so,
-        subst_inductive_type_with_dummy_mutind ta)
-    | C.Lambda (name,so,ta) ->
-       C.Lambda (name, subst_inductive_type_with_dummy_mutind so,
-        subst_inductive_type_with_dummy_mutind ta)
-    | C.Appl tl ->
-       C.Appl (List.map subst_inductive_type_with_dummy_mutind tl)
-    | C.MutCase (uri,i,outtype,term,pl) ->
-       C.MutCase (uri,i,
-        subst_inductive_type_with_dummy_mutind outtype,
-        subst_inductive_type_with_dummy_mutind term,
-        List.map subst_inductive_type_with_dummy_mutind pl)
-    | C.Fix (i,fl) ->
-       C.Fix (i,List.map (fun (name,i,ty,bo) -> (name,i,
-        subst_inductive_type_with_dummy_mutind ty,
-        subst_inductive_type_with_dummy_mutind bo)) fl)
-    | C.CoFix (i,fl) ->
-       C.CoFix (i,List.map (fun (name,ty,bo) -> (name,
-        subst_inductive_type_with_dummy_mutind ty,
-        subst_inductive_type_with_dummy_mutind bo)) fl)
-    | C.Const (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map
-         (function (uri,t) -> (uri,subst_inductive_type_with_dummy_mutind t))
-         exp_named_subst
-       in
-        C.Const (uri,exp_named_subst')
-    | C.MutInd (uri,typeno,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map
-         (function (uri,t) -> (uri,subst_inductive_type_with_dummy_mutind t))
-         exp_named_subst
-       in
-        C.MutInd (uri,typeno,exp_named_subst')
-    | C.MutConstruct (uri,typeno,consno,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map
-         (function (uri,t) -> (uri,subst_inductive_type_with_dummy_mutind t))
-         exp_named_subst
-       in
-        C.MutConstruct (uri,typeno,consno,exp_named_subst')
-    | t -> t
-  in
-  match CicReduction.whd context te with
-     C.Appl ((C.MutInd (uri',0,_))::tl) when UriManager.eq uri' uri -> true
-   | C.MutInd (uri',0,_) when UriManager.eq uri' uri -> true
-   | C.Prod (C.Anonymous,source,dest) ->
-      strictly_positive context n nn
-       (subst_inductive_type_with_dummy_mutind source) &&
-       weakly_positive ((Some (C.Anonymous,(C.Decl source)))::context)
-        (n + 1) (nn + 1) uri dest
-   | C.Prod (name,source,dest) when
-      does_not_occur ((Some (name,(C.Decl source)))::context) 0 n dest ->
-       (* dummy abstraction, so we behave as in the anonimous case *)
-       strictly_positive context n nn
-        (subst_inductive_type_with_dummy_mutind source) &&
-        weakly_positive ((Some (name,(C.Decl source)))::context)
-         (n + 1) (nn + 1) uri dest
-   | C.Prod (name,source,dest) ->
-      does_not_occur context n nn
-       (subst_inductive_type_with_dummy_mutind source)&&
-       weakly_positive ((Some (name,(C.Decl source)))::context)
-        (n + 1) (nn + 1) uri dest
-   | _ ->
-     raise
-      (TypeCheckerFailure
-        (NotWellFormedTypeOfInductiveConstructor
-          ("Guess where the error is ;-)")))
-
-(* instantiate_parameters ps (x1:T1)...(xn:Tn)C                             *)
-(* returns ((x_|ps|:T_|ps|)...(xn:Tn)C){ps_1 / x1 ; ... ; ps_|ps| / x_|ps|} *)
-and instantiate_parameters params c =
- let module C = Cic in
-  match (c,params) with
-     (c,[]) -> c
-   | (C.Prod (_,_,ta), he::tl) ->
-       instantiate_parameters tl
-        (CicSubstitution.subst he ta)
-   | (C.Cast (te,_), _) -> instantiate_parameters params te
-   | (t,l) -> raise (TypeCheckerFailure (Impossible 1))
-
-and strictly_positive context n nn te =
- let module C = Cic in
- let module U = UriManager in
-  match CicReduction.whd context te with
-     C.Rel _ -> true
-   | C.Cast (te,ty) ->
-      (*CSC: bisogna controllare ty????*)
-      strictly_positive context n nn te
-   | C.Prod (name,so,ta) ->
-      does_not_occur context n nn so &&
-       strictly_positive ((Some (name,(C.Decl so)))::context) (n+1) (nn+1) ta
-   | C.Appl ((C.Rel m)::tl) when m > n && m <= nn ->
-      List.fold_right (fun x i -> i && does_not_occur context n nn x) tl true
-   | C.Appl ((C.MutInd (uri,i,exp_named_subst))::tl) -> 
-      let (ok,paramsno,ity,cl,name) =
-       match CicEnvironment.get_obj uri with
-           C.InductiveDefinition (tl,_,paramsno) ->
-            let (name,_,ity,cl) = List.nth tl i in
-             (List.length tl = 1, paramsno, ity, cl, name)
-         | _ ->
-           raise
-            (TypeCheckerFailure
-              (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)))
-      in
-       let (params,arguments) = split tl paramsno in
-       let lifted_params = List.map (CicSubstitution.lift 1) params in
-       let cl' =
-        List.map
-         (fun (_,te) ->
-           instantiate_parameters lifted_params
-            (CicSubstitution.subst_vars exp_named_subst te)
-         ) cl
-       in
-        ok &&
-         List.fold_right
-          (fun x i -> i && does_not_occur context n nn x)
-          arguments true &&
-         (*CSC: MEGAPATCH3 (sara' quella giusta?)*)
-         List.fold_right
-          (fun x i ->
-            i &&
-             weakly_positive
-              ((Some (C.Name name,(Cic.Decl ity)))::context) (n+1) (nn+1) uri x
-          ) cl' true
-   | t -> does_not_occur context n nn t
-
-(*CSC l'indice x dei tipi induttivi e' t.c. n < x <= nn *)
-and are_all_occurrences_positive context uri indparamsno i n nn te =
- let module C = Cic in
-  match CicReduction.whd context te with
-     C.Appl ((C.Rel m)::tl) when m = i ->
-      (*CSC: riscrivere fermandosi a 0 *)
-      (* let's check if the inductive type is applied at least to *)
-      (* indparamsno parameters                                   *)
-      let last =
-       List.fold_left
-        (fun k x ->
-          if k = 0 then 0
-          else
-           match CicReduction.whd context x with
-              C.Rel m when m = n - (indparamsno - k) -> k - 1
-            | _ ->
-              raise
-               (TypeCheckerFailure
-                 (WrongRequiredArgument (UriManager.string_of_uri uri)))
-        ) indparamsno tl
-      in
-       if last = 0 then
-        List.fold_right (fun x i -> i && does_not_occur context n nn x) tl true
-       else
-        raise
-         (TypeCheckerFailure
-          (WrongRequiredArgument (UriManager.string_of_uri uri)))
-   | C.Rel m when m = i ->
-      if indparamsno = 0 then
-       true
-      else
-       raise
-        (TypeCheckerFailure
-          (WrongRequiredArgument (UriManager.string_of_uri uri)))
-   | C.Prod (C.Anonymous,source,dest) ->
-      strictly_positive context n nn source &&
-       are_all_occurrences_positive
-        ((Some (C.Anonymous,(C.Decl source)))::context) uri indparamsno
-        (i+1) (n + 1) (nn + 1) dest
-   | C.Prod (name,source,dest) when
-      does_not_occur ((Some (name,(C.Decl source)))::context) 0 n dest ->
-      (* dummy abstraction, so we behave as in the anonimous case *)
-      strictly_positive context n nn source &&
-       are_all_occurrences_positive
-        ((Some (name,(C.Decl source)))::context) uri indparamsno
-        (i+1) (n + 1) (nn + 1) dest
-   | C.Prod (name,source,dest) ->
-      does_not_occur context n nn source &&
-       are_all_occurrences_positive ((Some (name,(C.Decl source)))::context)
-        uri indparamsno (i+1) (n + 1) (nn + 1) dest
-   | _ ->
-     raise
-      (TypeCheckerFailure
-       (NotWellFormedTypeOfInductiveConstructor (UriManager.string_of_uri uri)))
-
-(* Main function to checks the correctness of a mutual *)
-(* inductive block definition. This is the function    *)
-(* exported to the proof-engine.                       *)
-and typecheck_mutual_inductive_defs uri (itl,_,indparamsno) =
- let module U = UriManager in
-  (* let's check if the arity of the inductive types are well *)
-  (* formed                                                   *)
-  List.iter (fun (_,_,x,_) -> let _ = type_of x in ()) itl ;
-
-  (* let's check if the types of the inductive constructors  *)
-  (* are well formed.                                        *)
-  (* In order not to use type_of_aux we put the types of the *)
-  (* mutual inductive types at the head of the types of the  *)
-  (* constructors using Prods                                *)
-  let len = List.length itl in
-   let tys =
-    List.map (fun (n,_,ty,_) -> Some (Cic.Name n,(Cic.Decl ty))) itl in
-   let _ =
-    List.fold_right
-     (fun (_,_,_,cl) i ->
-       List.iter
-        (fun (name,te) -> 
-          let debrujinedte = debrujin_constructor uri len te in
-          let augmented_term =
-           List.fold_right
-            (fun (name,_,ty,_) i -> Cic.Prod (Cic.Name name, ty, i))
-            itl debrujinedte
-          in
-           let _ = type_of augmented_term in
-            (* let's check also the positivity conditions *)
-            if
-             not
-              (are_all_occurrences_positive tys uri indparamsno i 0 len
-                debrujinedte)
-            then
-             raise
-              (TypeCheckerFailure
-                (NotPositiveOccurrences (U.string_of_uri uri)))
-        ) cl ;
-       (i + 1)
-    ) itl 1
-   in
-    ()
-
-(* Main function to checks the correctness of a mutual *)
-(* inductive block definition.                         *)
-and check_mutual_inductive_defs uri =
- function
-    Cic.InductiveDefinition (itl, params, indparamsno) ->
-     typecheck_mutual_inductive_defs uri (itl,params,indparamsno)
-  | _ ->
-    raise
-     (TypeCheckerFailure
-       (WrongUriToMutualInductiveDefinitions (UriManager.string_of_uri uri)))
-
-and type_of_mutual_inductive_defs uri i =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  let cobj =
-   match CicEnvironment.is_type_checked ~trust:true uri with
-      CicEnvironment.CheckedObj cobj -> cobj
-    | CicEnvironment.UncheckedObj uobj ->
-       Logger.log (`Start_type_checking uri) ;
-       check_mutual_inductive_defs uri uobj ;
-       CicEnvironment.set_type_checking_info uri ;
-       Logger.log (`Type_checking_completed uri) ;
-       (match CicEnvironment.is_type_checked ~trust:false uri with
-          CicEnvironment.CheckedObj cobj -> cobj
-        | CicEnvironment.UncheckedObj _ -> raise CicEnvironmentError
-       )
-  in
-   match cobj with
-      C.InductiveDefinition (dl,_,_) ->
-       let (_,_,arity,_) = List.nth dl i in
-        arity
-    | _ ->
-      raise
-       (TypeCheckerFailure
-         (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri)))
-
-and type_of_mutual_inductive_constr uri i j =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  let cobj =
-   match CicEnvironment.is_type_checked ~trust:true uri with
-      CicEnvironment.CheckedObj cobj -> cobj
-    | CicEnvironment.UncheckedObj uobj ->
-       Logger.log (`Start_type_checking uri) ;
-       check_mutual_inductive_defs uri uobj ;
-       CicEnvironment.set_type_checking_info uri ;
-       Logger.log (`Type_checking_completed uri) ;
-       (match CicEnvironment.is_type_checked ~trust:false uri with
-          CicEnvironment.CheckedObj cobj -> cobj
-        | CicEnvironment.UncheckedObj _ -> raise CicEnvironmentError
-       )
-  in
-   match cobj with
-      C.InductiveDefinition (dl,_,_) ->
-       let (_,_,_,cl) = List.nth dl i in
-        let (_,ty) = List.nth cl (j-1) in
-         ty
-    | _ ->
-      raise
-       (TypeCheckerFailure
-         (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri)))
-
-and recursive_args context n nn te =
- let module C = Cic in
-  match CicReduction.whd context te with
-     C.Rel _ -> []
-   | C.Var _
-   | C.Meta _
-   | C.Sort _
-   | C.Implicit
-   | C.Cast _ (*CSC ??? *) ->
-      raise (TypeCheckerFailure (Impossible 3)) (* due to type-checking *)
-   | C.Prod (name,so,de) ->
-      (not (does_not_occur context n nn so)) ::
-       (recursive_args ((Some (name,(C.Decl so)))::context) (n+1) (nn + 1) de)
-   | C.Lambda _
-   | C.LetIn _ ->
-      raise (TypeCheckerFailure (Impossible 4)) (* due to type-checking *)
-   | C.Appl _ -> []
-   | C.Const _ -> raise (TypeCheckerFailure (Impossible 5))
-   | C.MutInd _
-   | C.MutConstruct _
-   | C.MutCase _
-   | C.Fix _
-   | C.CoFix _ ->
-      raise (TypeCheckerFailure (Impossible 6)) (* due to type-checking *)
-
-and get_new_safes context p c rl safes n nn x =
- let module C = Cic in
- let module U = UriManager in
- let module R = CicReduction in
-  match (R.whd context c, R.whd context p, rl) with
-     (C.Prod (_,so,ta1), C.Lambda (name,_,ta2), b::tl) ->
-       (* we are sure that the two sources are convertible because we *)
-       (* have just checked this. So let's go along ...               *)
-       let safes' =
-        List.map (fun x -> x + 1) safes
-       in
-        let safes'' =
-         if b then 1::safes' else safes'
-        in
-         get_new_safes ((Some (name,(C.Decl so)))::context)
-          ta2 ta1 tl safes'' (n+1) (nn+1) (x+1)
-   | (C.Prod _, (C.MutConstruct _ as e), _)
-   | (C.Prod _, (C.Rel _ as e), _)
-   | (C.MutInd _, e, [])
-   | (C.Appl _, e, []) -> (e,safes,n,nn,x,context)
-   | (_,_,_) ->
-      (* CSC: If the next exception is raised, it just means that   *)
-      (* CSC: the proof-assistant allows to use very strange things *)
-      (* CSC: as a branch of a case whose type is a Prod. In        *)
-      (* CSC: particular, this means that a new (C.Prod, x,_) case  *)
-      (* CSC: must be considered in this match. (e.g. x = MutCase)  *)
-      raise (TypeCheckerFailure (Impossible 7))
-
-and split_prods context n te =
- let module C = Cic in
- let module R = CicReduction in
-  match (n, R.whd context te) with
-     (0, _) -> context,te
-   | (n, C.Prod (name,so,ta)) when n > 0 ->
-       split_prods ((Some (name,(C.Decl so)))::context) (n - 1) ta
-   | (_, _) -> raise (TypeCheckerFailure (Impossible 8))
-
-and eat_lambdas context n te =
- let module C = Cic in
- let module R = CicReduction in
-  match (n, R.whd context te) with
-     (0, _) -> (te, 0, context)
-   | (n, C.Lambda (name,so,ta)) when n > 0 ->
-      let (te, k, context') =
-       eat_lambdas ((Some (name,(C.Decl so)))::context) (n - 1) ta
-      in
-       (te, k + 1, context')
-   | (_, _) -> raise (TypeCheckerFailure (Impossible 9))
-
-(*CSC: Tutto quello che segue e' l'intuzione di luca ;-) *)
-and check_is_really_smaller_arg context n nn kl x safes te =
- (*CSC: forse la whd si puo' fare solo quando serve veramente. *)
- (*CSC: cfr guarded_by_destructors                             *)
- let module C = Cic in
- let module U = UriManager in
- match CicReduction.whd context te with
-     C.Rel m when List.mem m safes -> true
-   | C.Rel _ -> false
-   | C.Var _
-   | C.Meta _
-   | C.Sort _
-   | C.Implicit 
-   | C.Cast _
-(*   | C.Cast (te,ty) ->
-      check_is_really_smaller_arg n nn kl x safes te &&
-       check_is_really_smaller_arg n nn kl x safes ty*)
-(*   | C.Prod (_,so,ta) ->
-      check_is_really_smaller_arg n nn kl x safes so &&
-       check_is_really_smaller_arg (n+1) (nn+1) kl (x+1)
-        (List.map (fun x -> x + 1) safes) ta*)
-   | C.Prod _ -> raise (TypeCheckerFailure (Impossible 10))
-   | C.Lambda (name,so,ta) ->
-      check_is_really_smaller_arg context n nn kl x safes so &&
-       check_is_really_smaller_arg ((Some (name,(C.Decl so)))::context)
-        (n+1) (nn+1) kl (x+1) (List.map (fun x -> x + 1) safes) ta
-   | C.LetIn (name,so,ta) ->
-      check_is_really_smaller_arg context n nn kl x safes so &&
-       check_is_really_smaller_arg ((Some (name,(C.Def so)))::context)
-        (n+1) (nn+1) kl (x+1) (List.map (fun x -> x + 1) safes) ta
-   | C.Appl (he::_) ->
-      (*CSC: sulla coda ci vogliono dei controlli? secondo noi no, ma *)
-      (*CSC: solo perche' non abbiamo trovato controesempi            *)
-      check_is_really_smaller_arg context n nn kl x safes he
-   | C.Appl [] -> raise (TypeCheckerFailure (Impossible 11))
-   | C.Const _
-   | C.MutInd _ -> raise (TypeCheckerFailure (Impossible 12))
-   | C.MutConstruct _ -> false
-   | C.MutCase (uri,i,outtype,term,pl) ->
-      (match term with
-          C.Rel m when List.mem m safes || m = x ->
-           let (tys,len,isinductive,paramsno,cl) =
-            match CicEnvironment.get_obj uri with
-               C.InductiveDefinition (tl,_,paramsno) ->
-                let tys =
-                 List.map (fun (n,_,ty,_) -> Some (Cic.Name n,(Cic.Decl ty))) tl
-                in
-                 let (_,isinductive,_,cl) = List.nth tl i in
-                  let cl' =
-                   List.map
-                    (fun (id,ty) ->
-                      (id, snd (split_prods tys paramsno ty))) cl
-                  in
-                   (tys,List.length tl,isinductive,paramsno,cl')
-             | _ ->
-               raise
-                (TypeCheckerFailure
-                 (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)))
-           in
-            if not isinductive then
-              List.fold_right
-               (fun p i ->
-                 i && check_is_really_smaller_arg context n nn kl x safes p)
-               pl true
-            else
-              List.fold_right
-               (fun (p,(_,c)) i ->
-                 let rl' =
-                  let debrujinedte = debrujin_constructor uri len c in
-                   recursive_args tys 0 len debrujinedte
-                 in
-                  let (e,safes',n',nn',x',context') =
-                   get_new_safes context p c rl' safes n nn x
-                  in
-                   i &&
-                   check_is_really_smaller_arg context' n' nn' kl x' safes' e
-               ) (List.combine pl cl) true
-        | C.Appl ((C.Rel m)::tl) when List.mem m safes || m = x ->
-           let (tys,len,isinductive,paramsno,cl) =
-            match CicEnvironment.get_obj uri with
-               C.InductiveDefinition (tl,_,paramsno) ->
-                let (_,isinductive,_,cl) = List.nth tl i in
-                 let tys =
-                  List.map (fun (n,_,ty,_) -> Some(Cic.Name n,(Cic.Decl ty))) tl
-                 in
-                  let cl' =
-                   List.map
-                    (fun (id,ty) ->
-                      (id, snd (split_prods tys paramsno ty))) cl
-                  in
-                   (tys,List.length tl,isinductive,paramsno,cl')
-             | _ ->
-               raise
-                (TypeCheckerFailure
-                  (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)))
-           in
-            if not isinductive then
-              List.fold_right
-               (fun p i ->
-                 i && check_is_really_smaller_arg context n nn kl x safes p)
-               pl true
-            else
-              (*CSC: supponiamo come prima che nessun controllo sia necessario*)
-              (*CSC: sugli argomenti di una applicazione                      *)
-              List.fold_right
-               (fun (p,(_,c)) i ->
-                 let rl' =
-                  let debrujinedte = debrujin_constructor uri len c in
-                   recursive_args tys 0 len debrujinedte
-                 in
-                  let (e, safes',n',nn',x',context') =
-                   get_new_safes context p c rl' safes n nn x
-                  in
-                   i &&
-                   check_is_really_smaller_arg context' n' nn' kl x' safes' e
-               ) (List.combine pl cl) true
-        | _ ->
-          List.fold_right
-           (fun p i ->
-             i && check_is_really_smaller_arg context n nn kl x safes p
-           ) pl true
-      )
-   | C.Fix (_, fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len
-       and nn_plus_len = nn + len
-       and x_plus_len = x + len
-       and tys = List.map (fun (n,_,ty,_) -> Some (C.Name n,(C.Decl ty))) fl
-       and safes' = List.map (fun x -> x + len) safes in
-        List.fold_right
-         (fun (_,_,ty,bo) i ->
-           i &&
-            check_is_really_smaller_arg (tys@context) n_plus_len nn_plus_len kl
-             x_plus_len safes' bo
-         ) fl true
-   | C.CoFix (_, fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len
-       and nn_plus_len = nn + len
-       and x_plus_len = x + len
-       and tys = List.map (fun (n,ty,_) -> Some (C.Name n,(C.Decl ty))) fl
-       and safes' = List.map (fun x -> x + len) safes in
-        List.fold_right
-         (fun (_,ty,bo) i ->
-           i &&
-            check_is_really_smaller_arg (tys@context) n_plus_len nn_plus_len kl
-             x_plus_len safes' bo
-         ) fl true
-
-and guarded_by_destructors context n nn kl x safes =
- let module C = Cic in
- let module U = UriManager in
-  function
-     C.Rel m when m > n && m <= nn -> false
-   | C.Rel n ->
-      (match List.nth context (n-1) with
-          Some (_,C.Decl _) -> true
-        | Some (_,C.Def bo) -> guarded_by_destructors context n nn kl x safes bo
-       | None -> raise (TypeCheckerFailure RelToHiddenHypothesis)
-      )
-   | C.Meta _
-   | C.Sort _
-   | C.Implicit -> true
-   | C.Cast (te,ty) ->
-      guarded_by_destructors context n nn kl x safes te &&
-       guarded_by_destructors context n nn kl x safes ty
-   | C.Prod (name,so,ta) ->
-      guarded_by_destructors context n nn kl x safes so &&
-       guarded_by_destructors ((Some (name,(C.Decl so)))::context)
-        (n+1) (nn+1) kl (x+1) (List.map (fun x -> x + 1) safes) ta
-   | C.Lambda (name,so,ta) ->
-      guarded_by_destructors context n nn kl x safes so &&
-       guarded_by_destructors ((Some (name,(C.Decl so)))::context)
-        (n+1) (nn+1) kl (x+1) (List.map (fun x -> x + 1) safes) ta
-   | C.LetIn (name,so,ta) ->
-      guarded_by_destructors context n nn kl x safes so &&
-       guarded_by_destructors ((Some (name,(C.Def so)))::context)
-        (n+1) (nn+1) kl (x+1) (List.map (fun x -> x + 1) safes) ta
-   | C.Appl ((C.Rel m)::tl) when m > n && m <= nn ->
-      let k = List.nth kl (m - n - 1) in
-       if not (List.length tl > k) then false
-       else
-        List.fold_right
-         (fun param i ->
-           i && guarded_by_destructors context n nn kl x safes param
-         ) tl true &&
-         check_is_really_smaller_arg context n nn kl x safes (List.nth tl k)
-   | C.Appl tl ->
-      List.fold_right
-       (fun t i -> i && guarded_by_destructors context n nn kl x safes t)
-       tl true
-   | C.Var (_,exp_named_subst)
-   | C.Const (_,exp_named_subst)
-   | C.MutInd (_,_,exp_named_subst)
-   | C.MutConstruct (_,_,_,exp_named_subst) ->
-      List.fold_right
-       (fun (_,t) i -> i && guarded_by_destructors context n nn kl x safes t)
-       exp_named_subst true
-   | C.MutCase (uri,i,outtype,term,pl) ->
-      (match term with
-          C.Rel m when List.mem m safes || m = x ->
-           let (tys,len,isinductive,paramsno,cl) =
-            match CicEnvironment.get_obj uri with
-               C.InductiveDefinition (tl,_,paramsno) ->
-                let (_,isinductive,_,cl) = List.nth tl i in
-                 let tys =
-                  List.map (fun (n,_,ty,_) -> Some(Cic.Name n,(Cic.Decl ty))) tl
-                 in
-                  let cl' =
-                   List.map
-                    (fun (id,ty) ->
-                      (id, snd (split_prods tys paramsno ty))) cl
-                  in
-                   (tys,List.length tl,isinductive,paramsno,cl')
-             | _ ->
-               raise
-                (TypeCheckerFailure
-                  (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)))
-           in
-            if not isinductive then
-             guarded_by_destructors context n nn kl x safes outtype &&
-              guarded_by_destructors context n nn kl x safes term &&
-              (*CSC: manca ??? il controllo sul tipo di term? *)
-              List.fold_right
-               (fun p i ->
-                 i && guarded_by_destructors context n nn kl x safes p)
-               pl true
-            else
-             guarded_by_destructors context n nn kl x safes outtype &&
-              (*CSC: manca ??? il controllo sul tipo di term? *)
-              List.fold_right
-               (fun (p,(_,c)) i ->
-                 let rl' =
-                  let debrujinedte = debrujin_constructor uri len c in
-                   recursive_args tys 0 len debrujinedte
-                 in
-                  let (e,safes',n',nn',x',context') =
-                   get_new_safes context p c rl' safes n nn x
-                  in
-                   i &&
-                   guarded_by_destructors context' n' nn' kl x' safes' e
-               ) (List.combine pl cl) true
-        | C.Appl ((C.Rel m)::tl) when List.mem m safes || m = x ->
-           let (tys,len,isinductive,paramsno,cl) =
-            match CicEnvironment.get_obj uri with
-               C.InductiveDefinition (tl,_,paramsno) ->
-                let (_,isinductive,_,cl) = List.nth tl i in
-                 let tys =
-                  List.map (fun (n,_,ty,_) -> Some(Cic.Name n,(Cic.Decl ty))) tl
-                 in
-                  let cl' =
-                   List.map
-                    (fun (id,ty) ->
-                      (id, snd (split_prods tys paramsno ty))) cl
-                  in
-                   (tys,List.length tl,isinductive,paramsno,cl')
-             | _ ->
-               raise
-                (TypeCheckerFailure
-                  (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)))
-           in
-            if not isinductive then
-             guarded_by_destructors context n nn kl x safes outtype &&
-              guarded_by_destructors context n nn kl x safes term &&
-              (*CSC: manca ??? il controllo sul tipo di term? *)
-              List.fold_right
-               (fun p i ->
-                 i && guarded_by_destructors context n nn kl x safes p)
-               pl true
-            else
-             guarded_by_destructors context n nn kl x safes outtype &&
-              (*CSC: manca ??? il controllo sul tipo di term? *)
-              List.fold_right
-               (fun t i ->
-                 i && guarded_by_destructors context n nn kl x safes t)
-               tl true &&
-              List.fold_right
-               (fun (p,(_,c)) i ->
-                 let rl' =
-                  let debrujinedte = debrujin_constructor uri len c in
-                   recursive_args tys 0 len debrujinedte
-                 in
-                  let (e, safes',n',nn',x',context') =
-                   get_new_safes context p c rl' safes n nn x
-                  in
-                   i &&
-                   guarded_by_destructors context' n' nn' kl x' safes' e
-               ) (List.combine pl cl) true
-        | _ ->
-          guarded_by_destructors context n nn kl x safes outtype &&
-           guarded_by_destructors context n nn kl x safes term &&
-           (*CSC: manca ??? il controllo sul tipo di term? *)
-           List.fold_right
-            (fun p i -> i && guarded_by_destructors context n nn kl x safes p)
-            pl true
-      )
-   | C.Fix (_, fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len
-       and nn_plus_len = nn + len
-       and x_plus_len = x + len
-       and tys = List.map (fun (n,_,ty,_) -> Some (C.Name n,(C.Decl ty))) fl
-       and safes' = List.map (fun x -> x + len) safes in
-        List.fold_right
-         (fun (_,_,ty,bo) i ->
-           i && guarded_by_destructors context n nn kl x_plus_len safes' ty &&
-            guarded_by_destructors (tys@context) n_plus_len nn_plus_len kl
-             x_plus_len safes' bo
-         ) fl true
-   | C.CoFix (_, fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len
-       and nn_plus_len = nn + len
-       and x_plus_len = x + len
-       and tys = List.map (fun (n,ty,_) -> Some (C.Name n,(C.Decl ty))) fl
-       and safes' = List.map (fun x -> x + len) safes in
-        List.fold_right
-         (fun (_,ty,bo) i ->
-           i &&
-            guarded_by_destructors context n nn kl x_plus_len safes' ty &&
-            guarded_by_destructors (tys@context) n_plus_len nn_plus_len kl
-             x_plus_len safes' bo
-         ) fl true
-
-(* the boolean h means already protected *)
-(* args is the list of arguments the type of the constructor that may be *)
-(* found in head position must be applied to.                            *)
-(*CSC: coInductiveTypeURI non cambia mai di ricorsione in ricorsione *)
-and guarded_by_constructors context n nn h te args coInductiveTypeURI =
- let module C = Cic in
-  (*CSC: There is a lot of code replication between the cases X and    *)
-  (*CSC: (C.Appl X tl). Maybe it will be better to define a function   *)
-  (*CSC: that maps X into (C.Appl X []) when X is not already a C.Appl *)
-  match CicReduction.whd context te with
-     C.Rel m when m > n && m <= nn -> h
-   | C.Rel _ -> true
-   | C.Meta _
-   | C.Sort _
-   | C.Implicit
-   | C.Cast _
-   | C.Prod _
-   | C.LetIn _ ->
-      (* the term has just been type-checked *)
-      raise (TypeCheckerFailure (Impossible 17))
-   | C.Lambda (name,so,de) ->
-      does_not_occur context n nn so &&
-       guarded_by_constructors ((Some (name,(C.Decl so)))::context)
-        (n + 1) (nn + 1) h de args coInductiveTypeURI
-   | C.Appl ((C.Rel m)::tl) when m > n && m <= nn ->
-      h &&
-       List.fold_right (fun x i -> i && does_not_occur context n nn x) tl true
-   | C.Appl ((C.MutConstruct (uri,i,j,exp_named_subst))::tl) ->
-      let consty =
-       match CicEnvironment.get_cooked_obj ~trust:false uri with
-          C.InductiveDefinition (itl,_,_) ->
-           let (_,_,_,cl) = List.nth itl i in
-            let (_,cons) = List.nth cl (j - 1) in
-             CicSubstitution.subst_vars exp_named_subst cons
-        | _ ->
-         raise
-          (TypeCheckerFailure
-            (WrongUriToMutualInductiveDefinitions
-              (UriManager.string_of_uri uri)))
-      in
-       let rec analyse_branch context ty te =
-        match CicReduction.whd context ty with
-           C.Meta _ -> raise (TypeCheckerFailure (Impossible 34))
-         | C.Rel _
-         | C.Var _
-         | C.Sort _ ->
-            does_not_occur context n nn te
-         | C.Implicit
-         | C.Cast _ ->
-            raise (TypeCheckerFailure (Impossible 24))(* due to type-checking *)
-         | C.Prod (name,so,de) ->
-            analyse_branch ((Some (name,(C.Decl so)))::context) de te
-         | C.Lambda _
-         | C.LetIn _ ->
-            raise (TypeCheckerFailure (Impossible 25))(* due to type-checking *)
-         | C.Appl ((C.MutInd (uri,_,_))::_) as ty
-            when uri == coInductiveTypeURI -> 
-             guarded_by_constructors context n nn true te [] coInductiveTypeURI
-         | C.Appl ((C.MutInd (uri,_,_))::_) as ty -> 
-            guarded_by_constructors context n nn true te tl coInductiveTypeURI
-         | C.Appl _ ->
-            does_not_occur context n nn te
-         | C.Const _ -> raise (TypeCheckerFailure (Impossible 26))
-         | C.MutInd (uri,_,_) when uri == coInductiveTypeURI ->
-            guarded_by_constructors context n nn true te [] coInductiveTypeURI
-         | C.MutInd _ ->
-            does_not_occur context n nn te
-         | C.MutConstruct _ -> raise (TypeCheckerFailure (Impossible 27))
-         (*CSC: we do not consider backbones with a MutCase, Fix, Cofix *)
-         (*CSC: in head position.                                       *)
-         | C.MutCase _
-         | C.Fix _
-         | C.CoFix _ ->
-            raise (TypeCheckerFailure (Impossible 28))(* due to type-checking *)
-       in
-       let rec analyse_instantiated_type context ty l =
-        match CicReduction.whd context ty with
-           C.Rel _
-         | C.Var _
-         | C.Meta _
-         | C.Sort _
-         | C.Implicit
-         | C.Cast _ ->
-            raise (TypeCheckerFailure (Impossible 29))(* due to type-checking *)
-         | C.Prod (name,so,de) ->
-            begin
-             match l with
-                [] -> true
-              | he::tl ->
-                 analyse_branch context so he &&
-                  analyse_instantiated_type ((Some (name,(C.Decl so)))::context)
-                   de tl
-            end
-         | C.Lambda _
-         | C.LetIn _ ->
-            raise (TypeCheckerFailure (Impossible 30))(* due to type-checking *)
-         | C.Appl _ -> 
-            List.fold_left
-             (fun i x -> i && does_not_occur context n nn x) true l
-         | C.Const _ -> raise (TypeCheckerFailure (Impossible 31))
-         | C.MutInd _ ->
-            List.fold_left
-             (fun i x -> i && does_not_occur context n nn x) true l
-         | C.MutConstruct _ -> raise (TypeCheckerFailure (Impossible 32))
-         (*CSC: we do not consider backbones with a MutCase, Fix, Cofix *)
-         (*CSC: in head position.                                       *)
-         | C.MutCase _
-         | C.Fix _
-         | C.CoFix _ ->
-            raise (TypeCheckerFailure (Impossible 33))(* due to type-checking *)
-       in
-        let rec instantiate_type args consty =
-         function
-            [] -> true
-          | tlhe::tltl as l ->
-             let consty' = CicReduction.whd context consty in
-              match args with 
-                 he::tl ->
-                  begin
-                   match consty' with
-                      C.Prod (_,_,de) ->
-                       let instantiated_de = CicSubstitution.subst he de in
-                        (*CSC: siamo sicuri che non sia troppo forte? *)
-                        does_not_occur context n nn tlhe &
-                         instantiate_type tl instantiated_de tltl
-                    | _ ->
-                      (*CSC:We do not consider backbones with a MutCase, a    *)
-                      (*CSC:FixPoint, a CoFixPoint and so on in head position.*)
-                      raise (TypeCheckerFailure (Impossible 23))
-                  end
-               | [] -> analyse_instantiated_type context consty' l
-                  (* These are all the other cases *)
-       in
-        instantiate_type args consty tl
-   | C.Appl ((C.CoFix (_,fl))::tl) ->
-      List.fold_left (fun i x -> i && does_not_occur context n nn x) true tl &&
-       let len = List.length fl in
-        let n_plus_len = n + len
-        and nn_plus_len = nn + len
-        (*CSC: Is a Decl of the ty ok or should I use Def of a Fix? *)
-        and tys = List.map (fun (n,ty,_) -> Some (C.Name n,(C.Decl ty))) fl in
-         List.fold_right
-          (fun (_,ty,bo) i ->
-            i && does_not_occur context n nn ty &&
-             guarded_by_constructors (tys@context) n_plus_len nn_plus_len h bo
-              args coInductiveTypeURI
-          ) fl true
-   | C.Appl ((C.MutCase (_,_,out,te,pl))::tl) ->
-       List.fold_left (fun i x -> i && does_not_occur context n nn x) true tl &&
-        does_not_occur context n nn out &&
-         does_not_occur context n nn te &&
-          List.fold_right
-           (fun x i ->
-             i &&
-             guarded_by_constructors context n nn h x args coInductiveTypeURI
-           ) pl true
-   | C.Appl l ->
-      List.fold_right (fun x i -> i && does_not_occur context n nn x) l true
-   | C.Var (_,exp_named_subst)
-   | C.Const (_,exp_named_subst) ->
-      List.fold_right
-       (fun (_,x) i -> i && does_not_occur context n nn x) exp_named_subst true
-   | C.MutInd _ -> assert false
-   | C.MutConstruct (_,_,_,exp_named_subst) ->
-      List.fold_right
-       (fun (_,x) i -> i && does_not_occur context n nn x) exp_named_subst true
-   | C.MutCase (_,_,out,te,pl) ->
-       does_not_occur context n nn out &&
-        does_not_occur context n nn te &&
-         List.fold_right
-          (fun x i ->
-            i &&
-             guarded_by_constructors context n nn h x args coInductiveTypeURI
-          ) pl true
-   | C.Fix (_,fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len
-       and nn_plus_len = nn + len
-       (*CSC: Is a Decl of the ty ok or should I use Def of a Fix? *)
-       and tys = List.map (fun (n,_,ty,_) -> Some (C.Name n,(C.Decl ty))) fl in
-        List.fold_right
-         (fun (_,_,ty,bo) i ->
-           i && does_not_occur context n nn ty &&
-            does_not_occur (tys@context) n_plus_len nn_plus_len bo
-         ) fl true
-   | C.CoFix (_,fl) ->
-      let len = List.length fl in
-       let n_plus_len = n + len
-       and nn_plus_len = nn + len
-       (*CSC: Is a Decl of the ty ok or should I use Def of a Fix? *)
-       and tys = List.map (fun (n,ty,_) -> Some (C.Name n,(C.Decl ty))) fl in
-        List.fold_right
-         (fun (_,ty,bo) i ->
-           i && does_not_occur context n nn ty &&
-            guarded_by_constructors (tys@context) n_plus_len nn_plus_len h bo
-             args coInductiveTypeURI
-         ) fl true
-
-and check_allowed_sort_elimination context uri i need_dummy ind arity1 arity2 =
- let module C = Cic in
- let module U = UriManager in
-  match (CicReduction.whd context arity1, CicReduction.whd context arity2) with
-     (C.Prod (_,so1,de1), C.Prod (_,so2,de2))
-      when CicReduction.are_convertible context so1 so2 ->
-       check_allowed_sort_elimination context uri i need_dummy
-        (C.Appl [CicSubstitution.lift 1 ind ; C.Rel 1]) de1 de2
-   | (C.Sort C.Prop, C.Sort C.Prop) when need_dummy -> true
-   | (C.Sort C.Prop, C.Sort C.Set)
-   | (C.Sort C.Prop, C.Sort C.Type) when need_dummy ->
-(*CSC: WRONG. MISSING CONDITIONS ON THE ARGUMENTS OF THE CONSTRUTOR *)
-       (match CicEnvironment.get_obj uri with
-           C.InductiveDefinition (itl,_,_) ->
-            let (_,_,_,cl) = List.nth itl i in
-             (* is a singleton definition or the empty proposition? *)
-             List.length cl = 1 || List.length cl = 0
-         | _ ->
-           raise
-            (TypeCheckerFailure
-              (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri)))
-       )
-   | (C.Sort C.Set, C.Sort C.Prop) when need_dummy -> true
-   | (C.Sort C.Set, C.Sort C.Set) when need_dummy -> true
-   | (C.Sort C.Set, C.Sort C.Type) when need_dummy ->
-       (match CicEnvironment.get_obj uri with
-           C.InductiveDefinition (itl,_,paramsno) ->
-            let tys =
-             List.map (fun (n,_,ty,_) -> Some (Cic.Name n,(Cic.Decl ty))) itl
-            in
-             let (_,_,_,cl) = List.nth itl i in
-              List.fold_right
-               (fun (_,x) i -> i && is_small tys paramsno x) cl true
-         | _ ->
-           raise
-            (TypeCheckerFailure
-              (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri)))
-       )
-   | (C.Sort C.Type, C.Sort _) when need_dummy -> true
-   | (C.Sort C.Prop, C.Prod (name,so,ta)) when not need_dummy ->
-       let res = CicReduction.are_convertible context so ind
-       in
-        res &&
-        (match CicReduction.whd ((Some (name,(C.Decl so)))::context) ta with
-            C.Sort C.Prop -> true
-          | C.Sort C.Set ->
-             (match CicEnvironment.get_obj uri with
-                 C.InductiveDefinition (itl,_,_) ->
-                  let (_,_,_,cl) = List.nth itl i in
-                   (* is a singleton definition? *)
-                   List.length cl = 1
-               | _ ->
-                 raise
-                  (TypeCheckerFailure
-                    (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)))
-             )
-          | _ -> false
-        )
-   | (C.Sort C.Set, C.Prod (name,so,ta)) when not need_dummy ->
-       let res = CicReduction.are_convertible context so ind
-       in
-        res &&
-        (match CicReduction.whd ((Some (name,(C.Decl so)))::context) ta with
-            C.Sort C.Prop
-          | C.Sort C.Set  -> true
-          | C.Sort C.Type ->
-             (match CicEnvironment.get_obj uri with
-                 C.InductiveDefinition (itl,_,paramsno) ->
-                  let (_,_,_,cl) = List.nth itl i in
-                   let tys =
-                    List.map
-                     (fun (n,_,ty,_) -> Some (Cic.Name n,(Cic.Decl ty))) itl
-                   in
-                    List.fold_right
-                     (fun (_,x) i -> i && is_small tys paramsno x) cl true
-               | _ ->
-                 raise
-                  (TypeCheckerFailure
-                    (WrongUriToMutualInductiveDefinitions(U.string_of_uri uri)))
-             )
-          | _ -> raise (TypeCheckerFailure (Impossible 19))
-        )
-   | (C.Sort C.Type, C.Prod (_,so,_)) when not need_dummy ->
-       CicReduction.are_convertible context so ind
-   | (_,_) -> false
-  
-and type_of_branch context argsno need_dummy outtype term constype =
- let module C = Cic in
- let module R = CicReduction in
-  match R.whd context constype with
-     C.MutInd (_,_,_) ->
-      if need_dummy then
-       outtype
-      else
-       C.Appl [outtype ; term]
-   | C.Appl (C.MutInd (_,_,_)::tl) ->
-      let (_,arguments) = split tl argsno
-      in
-       if need_dummy && arguments = [] then
-        outtype
-       else
-        C.Appl (outtype::arguments@(if need_dummy then [] else [term]))
-   | C.Prod (name,so,de) ->
-      let term' =
-       match CicSubstitution.lift 1 term with
-          C.Appl l -> C.Appl (l@[C.Rel 1])
-        | t -> C.Appl [t ; C.Rel 1]
-      in
-       C.Prod (C.Anonymous,so,type_of_branch
-        ((Some (name,(C.Decl so)))::context) argsno need_dummy
-        (CicSubstitution.lift 1 outtype) term' de)
-  | _ -> raise (TypeCheckerFailure (Impossible 20))
-
-(* check_metasenv_consistency checks that the "canonical" context of a
-metavariable is consitent - up to relocation via the relocation list l -
-with the actual context *)
-
-and check_metasenv_consistency metasenv context canonical_context l =
-  let module C = Cic in
-  let module R = CicReduction in
-  let module S = CicSubstitution in
-   let lifted_canonical_context = 
-    let rec aux i =
-     function
-        [] -> []
-      | (Some (n,C.Decl t))::tl ->
-         (Some (n,C.Decl (S.lift_meta l (S.lift i t))))::(aux (i+1) tl)
-      | (Some (n,C.Def t))::tl ->
-         (Some (n,C.Def (S.lift_meta l (S.lift i t))))::(aux (i+1) tl)
-      | None::tl -> None::(aux (i+1) tl)
-    in
-     aux 1 canonical_context
-   in
-    List.iter2 
-     (fun t ct -> 
-       let res =
-        match (t,ct) with
-           _,None -> true
-         | Some t,Some (_,C.Def ct) ->
-            R.are_convertible context t ct
-         | Some t,Some (_,C.Decl ct) ->
-            R.are_convertible context (type_of_aux' metasenv context t) ct
-         | _, _  -> false
-       in
-        if not res then raise (TypeCheckerFailure MetasenvInconsistency)
-     ) l lifted_canonical_context 
-
-(* type_of_aux' is just another name (with a different scope) for type_of_aux *)
-and type_of_aux' metasenv context t =
- let rec type_of_aux context =
-  let module C = Cic in
-  let module R = CicReduction in
-  let module S = CicSubstitution in
-  let module U = UriManager in
-   function
-      C.Rel n ->
-       (try
-         match List.nth context (n - 1) with
-            Some (_,C.Decl t) -> S.lift n t
-          | Some (_,C.Def bo) -> type_of_aux context (S.lift n bo)
-         | None -> raise (TypeCheckerFailure RelToHiddenHypothesis)
-        with
-         _ -> raise (TypeCheckerFailure (NotWellTyped "Not a close term"))
-       )
-    | C.Var (uri,exp_named_subst) ->
-      incr fdebug ;
-      check_exp_named_subst context exp_named_subst ;
-      let ty =
-       CicSubstitution.subst_vars exp_named_subst (type_of_variable uri)
-      in
-       decr fdebug ;
-       ty
-    | C.Meta (n,l) -> 
-       let (_,canonical_context,ty) =
-        List.find (function (m,_,_) -> n = m) metasenv
-       in
-        check_metasenv_consistency metasenv context canonical_context l;
-        CicSubstitution.lift_meta l ty
-    | C.Sort s -> C.Sort C.Type (*CSC manca la gestione degli universi!!! *)
-    | C.Implicit -> raise (TypeCheckerFailure (Impossible 21))
-    | C.Cast (te,ty) ->
-       let _ = type_of_aux context ty in
-        if R.are_convertible context (type_of_aux context te) ty then ty
-        else raise (TypeCheckerFailure (NotWellTyped "Cast"))
-    | C.Prod (name,s,t) ->
-       let sort1 = type_of_aux context s
-       and sort2 = type_of_aux ((Some (name,(C.Decl s)))::context) t in
-        sort_of_prod context (name,s) (sort1,sort2)
-   | C.Lambda (n,s,t) ->
-       let sort1 = type_of_aux context s
-       and type2 = type_of_aux ((Some (n,(C.Decl s)))::context) t in
-        let sort2 = type_of_aux ((Some (n,(C.Decl s)))::context) type2 in
-         (* only to check if the product is well-typed *)
-         let _ = sort_of_prod context (n,s) (sort1,sort2) in
-          C.Prod (n,s,type2)
-   | C.LetIn (n,s,t) ->
-      (* only to check if s is well-typed *)
-      let _ = type_of_aux context s in
-       (* The type of a LetIn is a LetIn. Extremely slow since the computed
-          LetIn is later reduced and maybe also re-checked.
-       (C.LetIn (n,s, type_of_aux ((Some (n,(C.Def s)))::context) t))
-       *)
-       (* The type of the LetIn is reduced. Much faster than the previous
-          solution. Moreover the inferred type is probably very different
-          from the expected one.
-       (CicReduction.whd context
-        (C.LetIn (n,s, type_of_aux ((Some (n,(C.Def s)))::context) t)))
-       *)
-       (* One-step LetIn reduction. Even faster than the previous solution.
-          Moreover the inferred type is closer to the expected one. *)
-       (CicSubstitution.subst s
-        (type_of_aux ((Some (n,(C.Def s)))::context) t))
-   | C.Appl (he::tl) when List.length tl > 0 ->
-      let hetype = type_of_aux context he
-      and tlbody_and_type = List.map (fun x -> (x, type_of_aux context x)) tl in
-       eat_prods context hetype tlbody_and_type
-   | C.Appl _ -> raise (TypeCheckerFailure (NotWellTyped "Appl: no arguments"))
-   | C.Const (uri,exp_named_subst) ->
-      incr fdebug ;
-      check_exp_named_subst context exp_named_subst ;
-      let cty =
-       CicSubstitution.subst_vars exp_named_subst (type_of_constant uri)
-      in
-       decr fdebug ;
-       cty
-   | C.MutInd (uri,i,exp_named_subst) ->
-      incr fdebug ;
-      check_exp_named_subst context exp_named_subst ;
-      let cty =
-       CicSubstitution.subst_vars exp_named_subst
-        (type_of_mutual_inductive_defs uri i)
-      in
-       decr fdebug ;
-       cty
-   | C.MutConstruct (uri,i,j,exp_named_subst) ->
-      check_exp_named_subst context exp_named_subst ;
-      let cty =
-       CicSubstitution.subst_vars exp_named_subst
-        (type_of_mutual_inductive_constr uri i j)
-      in
-       cty
-   | C.MutCase (uri,i,outtype,term,pl) ->
-      let outsort = type_of_aux context outtype in
-      let (need_dummy, k) =
-       let rec guess_args context t =
-        match CicReduction.whd context t with
-           C.Sort _ -> (true, 0)
-         | C.Prod (name, s, t) ->
-            let (b, n) = guess_args ((Some (name,(C.Decl s)))::context) t in
-             if n = 0 then
-              (* last prod before sort *)
-              match CicReduction.whd context s with
-(*CSC: for _ see comment below about the missing named_exp_subst ?????????? *)
-                 C.MutInd (uri',i',_) when U.eq uri' uri && i' = i ->
-                  (false, 1)
-(*CSC: for _ see comment below about the missing named_exp_subst ?????????? *)
-               | C.Appl ((C.MutInd (uri',i',_)) :: _)
-                  when U.eq uri' uri && i' = i -> (false, 1)
-               | _ -> (true, 1)
-             else
-              (b, n + 1)
-         | _ ->
-           raise
-            (TypeCheckerFailure (NotWellTyped "MutCase: outtype ill-formed"))
-       in
-        (*CSC whd non serve dopo type_of_aux ? *)
-        let (b, k) = guess_args context outsort in
-         if not b then (b, k - 1) else (b, k)
-      in
-      let (parameters, arguments, exp_named_subst) =
-        match R.whd context (type_of_aux context term) with
-           (*CSC manca il caso dei CAST *)
-(*CSC: ma servono i parametri (uri,i)? Se si', perche' non serve anche il *)
-(*CSC: parametro exp_named_subst? Se no, perche' non li togliamo?         *)
-(*CSC: Hint: nella DTD servono per gli stylesheet.                        *)
-           C.MutInd (uri',i',exp_named_subst) as typ ->
-            if U.eq uri uri' && i = i' then ([],[],exp_named_subst)
-            else raise (TypeCheckerFailure
-             (NotWellTyped ("MutCase: the term is of type " ^
-             CicPp.ppterm typ ^
-             " instead of type " ^ (U.string_of_uri uri) ^ "#1/" ^
-             string_of_int i ^ "{_}")))
-         | C.Appl ((C.MutInd (uri',i',exp_named_subst) as typ):: tl) ->
-            if U.eq uri uri' && i = i' then
-             let params,args =
-              split tl (List.length tl - k)
-             in params,args,exp_named_subst
-            else raise (TypeCheckerFailure (NotWellTyped
-             ("MutCase: the term is of type " ^
-             CicPp.ppterm typ ^
-             " instead of type " ^ (U.string_of_uri uri) ^ "#1/" ^
-             string_of_int i ^ "{_}")))
-         | _ -> raise (TypeCheckerFailure
-                 (NotWellTyped "MutCase: the term is not an inductive one"))
-      in
-       (* let's control if the sort elimination is allowed: [(I q1 ... qr)|B] *)
-       let sort_of_ind_type =
-        if parameters = [] then
-         C.MutInd (uri,i,exp_named_subst)
-        else
-         C.Appl ((C.MutInd (uri,i,exp_named_subst))::parameters)
-       in
-        if not (check_allowed_sort_elimination context uri i need_dummy
-         sort_of_ind_type (type_of_aux context sort_of_ind_type) outsort)
-        then
-         raise
-          (TypeCheckerFailure
-            (NotWellTyped "MutCase: not allowed sort elimination")) ;
-
-        (* let's check if the type of branches are right *)
-        let parsno =
-         match CicEnvironment.get_cooked_obj ~trust:false uri with
-            C.InductiveDefinition (_,_,parsno) -> parsno
-          | _ ->
-            raise
-             (TypeCheckerFailure
-               (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri)))
-        in
-         let (_,branches_ok) =
-          List.fold_left
-           (fun (j,b) p ->
-             let cons =
-              if parameters = [] then
-               (C.MutConstruct (uri,i,j,exp_named_subst))
-              else
-               (C.Appl (C.MutConstruct (uri,i,j,exp_named_subst)::parameters))
-             in
-(*
-              (j + 1, b &&
-*)
-              (j + 1,
-let res = b &&
-               R.are_convertible context (type_of_aux context p)
-                (type_of_branch context parsno need_dummy outtype cons
-                  (type_of_aux context cons))
-in if not res then prerr_endline ("#### " ^ CicPp.ppterm (type_of_aux context p) ^ " <==> " ^ CicPp.ppterm (type_of_branch context parsno need_dummy outtype cons (type_of_aux context cons))) ; res
-              )
-           ) (1,true) pl
-         in
-          if not branches_ok then
-           raise
-            (TypeCheckerFailure
-              (NotWellTyped "MutCase: wrong type of a branch")) ;
-
-          if not need_dummy then
-           C.Appl ((outtype::arguments)@[term])
-          else if arguments = [] then
-           outtype
-          else
-           C.Appl (outtype::arguments)
-   | C.Fix (i,fl) ->
-      let types_times_kl =
-       List.rev
-        (List.map
-          (fun (n,k,ty,_) ->
-            let _ = type_of_aux context ty in
-             (Some (C.Name n,(C.Decl ty)),k)) fl)
-      in
-      let (types,kl) = List.split types_times_kl in
-       let len = List.length types in
-        List.iter
-         (fun (name,x,ty,bo) ->
-           if
-            (R.are_convertible (types@context) (type_of_aux (types@context) bo)
-             (CicSubstitution.lift len ty))
-           then
-            begin
-             let (m, eaten, context') =
-              eat_lambdas (types @ context) (x + 1) bo
-             in
-              (*let's control the guarded by destructors conditions D{f,k,x,M}*)
-              if
-               not
-                (guarded_by_destructors context' eaten (len + eaten) kl 1 [] m)
-              then
-               raise
-                (TypeCheckerFailure
-                  (NotWellTyped "Fix: not guarded by destructors"))
-            end
-           else
-            raise (TypeCheckerFailure (NotWellTyped "Fix: ill-typed bodies"))
-         ) fl ;
-      
-        (*CSC: controlli mancanti solo su D{f,k,x,M} *)
-        let (_,_,ty,_) = List.nth fl i in
-        ty
-   | C.CoFix (i,fl) ->
-      let types =
-       List.rev
-        (List.map
-          (fun (n,ty,_) -> 
-           let _ = type_of_aux context ty in Some (C.Name n,(C.Decl ty))) fl)
-      in
-       let len = List.length types in
-        List.iter
-         (fun (_,ty,bo) ->
-           if
-            (R.are_convertible (types @ context)
-             (type_of_aux (types @ context) bo) (CicSubstitution.lift len ty))
-           then
-            begin
-             (* let's control that the returned type is coinductive *)
-             match returns_a_coinductive context ty with
-                None ->
-                 raise
-                  (TypeCheckerFailure
-                    (NotWellTyped "CoFix: does not return a coinductive type"))
-              | Some uri ->
-                 (*let's control the guarded by constructors conditions C{f,M}*)
-                 if
-                  not
-                   (guarded_by_constructors (types @ context) 0 len false bo
-                     [] uri)
-                 then
-                  raise
-                   (TypeCheckerFailure
-                     (NotWellTyped "CoFix: not guarded by constructors"))
-            end
-           else
-            raise
-             (TypeCheckerFailure
-               (NotWellTyped "CoFix: ill-typed bodies"))
-         ) fl ;
-      
-        let (_,ty,_) = List.nth fl i in
-         ty
-
- and check_exp_named_subst context =
-  let rec check_exp_named_subst_aux substs =
-   function
-      [] -> ()
-    | ((uri,t) as subst)::tl ->
-       let typeofvar =
-        CicSubstitution.subst_vars substs (type_of_variable uri) in
-       (match CicEnvironment.get_cooked_obj ~trust:false uri with
-           Cic.Variable (_,Some bo,_,_) ->
-            raise
-             (TypeCheckerFailure
-               (NotWellTyped
-                 "A variable with a body can not be explicit substituted"))
-         | Cic.Variable (_,None,_,_) -> ()
-         | _ ->
-            raise
-             (TypeCheckerFailure
-               (WrongUriToVariable (UriManager.string_of_uri uri)))
-       ) ;
-       let typeoft = type_of_aux context t in
-        if CicReduction.are_convertible context typeoft typeofvar then
-         check_exp_named_subst_aux (substs@[subst]) tl
-        else
-         begin
-          CicReduction.fdebug := 0 ;
-          ignore (CicReduction.are_convertible context typeoft typeofvar) ;
-          fdebug := 0 ;
-          debug typeoft [typeofvar] ;
-          raise
-           (TypeCheckerFailure
-             (NotWellTyped "Wrong Explicit Named Substitution"))
-         end
-  in
-   check_exp_named_subst_aux []
-
- and sort_of_prod context (name,s) (t1, t2) =
-  let module C = Cic in
-   let t1' = CicReduction.whd context t1 in
-   let t2' = CicReduction.whd ((Some (name,C.Decl s))::context) t2 in
-   match (t1', t2') with
-      (C.Sort s1, C.Sort s2)
-        when (s2 = C.Prop or s2 = C.Set) -> (* different from Coq manual!!! *)
-         C.Sort s2
-    | (C.Sort s1, C.Sort s2) -> C.Sort C.Type (*CSC manca la gestione degli universi!!! *)
-    | (_,_) ->
-      raise
-       (TypeCheckerFailure
-        (NotWellTyped
-         ("Prod: sort1= " ^ CicPp.ppterm t1' ^ " ; sort2= "^ CicPp.ppterm t2')))
-
- and eat_prods context hetype =
-  (*CSC: siamo sicuri che le are_convertible non lavorino con termini non *)
-  (*CSC: cucinati                                                         *)
-  function
-     [] -> hetype
-   | (hete, hety)::tl ->
-    (match (CicReduction.whd context hetype) with
-        Cic.Prod (n,s,t) ->
-         if CicReduction.are_convertible context s hety then
-          (CicReduction.fdebug := -1 ;
-           eat_prods context (CicSubstitution.subst hete t) tl
-          )
-         else
-          begin
-           CicReduction.fdebug := 0 ;
-           ignore (CicReduction.are_convertible context s hety) ;
-           fdebug := 0 ;
-           debug s [hety] ;
-           raise
-            (TypeCheckerFailure (NotWellTyped "Appl: wrong parameter-type"))
-          end
-      | _ -> raise (TypeCheckerFailure (NotWellTyped "Appl: wrong Prod-type"))
-    )
-
- and returns_a_coinductive context ty =
-  let module C = Cic in
-   match CicReduction.whd context ty with
-      C.MutInd (uri,i,_) ->
-       (*CSC: definire una funzioncina per questo codice sempre replicato *)
-       (match CicEnvironment.get_cooked_obj ~trust:false uri with
-           C.InductiveDefinition (itl,_,_) ->
-            let (_,is_inductive,_,_) = List.nth itl i in
-             if is_inductive then None else (Some uri)
-         | _ ->
-           raise
-            (TypeCheckerFailure (WrongUriToMutualInductiveDefinitions
-             (UriManager.string_of_uri uri)))
-        )
-    | C.Appl ((C.MutInd (uri,i,_))::_) ->
-       (match CicEnvironment.get_obj uri with
-           C.InductiveDefinition (itl,_,_) ->
-            let (_,is_inductive,_,_) = List.nth itl i in
-             if is_inductive then None else (Some uri)
-         | _ ->
-           raise
-            (TypeCheckerFailure
-             (WrongUriToMutualInductiveDefinitions
-              (UriManager.string_of_uri uri)))
-        )
-    | C.Prod (n,so,de) ->
-       returns_a_coinductive ((Some (n,C.Decl so))::context) de
-    | _ -> None
-
- in
-(*CSC
-prerr_endline ("INIZIO TYPE_OF_AUX " ^ CicPp.ppterm t) ; flush stderr ;
-let res =
-*)
-  type_of_aux context t
-(*
-in prerr_endline "FINE TYPE_OF_AUX" ; flush stderr ; res
-*)
-
-(* is a small constructor? *)
-(*CSC: ottimizzare calcolando staticamente *)
-and is_small context paramsno c =
- let rec is_small_aux context c =
-  let module C = Cic in
-   match CicReduction.whd context c with
-      C.Prod (n,so,de) ->
-       (*CSC: [] is an empty metasenv. Is it correct? *)
-       let s = type_of_aux' [] context so in
-        (s = C.Sort C.Prop || s = C.Sort C.Set) &&
-        is_small_aux ((Some (n,(C.Decl so)))::context) de
-    | _ -> true (*CSC: we trust the type-checker *)
- in
-  let (context',dx) = split_prods context paramsno c in
-   is_small_aux context' dx
-
-and type_of t =
-(*CSC
-prerr_endline ("INIZIO TYPE_OF_AUX' " ^ CicPp.ppterm t) ; flush stderr ;
-let res =
-*)
- type_of_aux' [] [] t
-(*CSC
-in prerr_endline "FINE TYPE_OF_AUX'" ; flush stderr ; res
-*)
-;;
-
-let typecheck uri =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  match CicEnvironment.is_type_checked ~trust:false uri with
-     CicEnvironment.CheckedObj _ -> ()
-   | CicEnvironment.UncheckedObj uobj ->
-      (* let's typecheck the uncooked object *)
-      Logger.log (`Start_type_checking uri) ;
-      (match uobj with
-          C.Constant (_,Some te,ty,_) ->
-           let _ = type_of ty in
-            if not (R.are_convertible [] (type_of te ) ty) then
-             raise
-              (TypeCheckerFailure
-                (NotWellTyped ("Constant " ^ (U.string_of_uri uri))))
-        | C.Constant (_,None,ty,_) ->
-          (* only to check that ty is well-typed *)
-          let _ = type_of ty in ()
-        | C.CurrentProof (_,conjs,te,ty,_) ->
-           let _ =
-            List.fold_left
-             (fun metasenv ((_,context,ty) as conj) ->
-               ignore (type_of_aux' metasenv context ty) ;
-               metasenv @ [conj]
-             ) [] conjs
-           in
-            let _ = type_of_aux' conjs [] ty in
-             if not (R.are_convertible [] (type_of_aux' conjs [] te) ty)
-             then
-              raise
-               (TypeCheckerFailure
-                 (NotWellTyped ("CurrentProof" ^ (U.string_of_uri uri))))
-        | C.Variable (_,bo,ty,_) ->
-           (* only to check that ty is well-typed *)
-           let _ = type_of ty in
-            (match bo with
-                None -> ()
-              | Some bo ->
-                 if not (R.are_convertible [] (type_of bo) ty) then
-                  raise
-                   (TypeCheckerFailure
-                     (NotWellTyped ("Variable" ^ (U.string_of_uri uri))))
-            )
-        | C.InductiveDefinition _ ->
-           check_mutual_inductive_defs uri uobj
-      ) ;
-      CicEnvironment.set_type_checking_info uri ;
-      Logger.log (`Type_checking_completed uri)
-;;
diff --git a/helm/ocaml/cic_proof_checking/cicTypeChecker.mli b/helm/ocaml/cic_proof_checking/cicTypeChecker.mli
deleted file mode 100644 (file)
index 1dbcc11..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-type type_checker_exn =
-   Impossible of int
- | NotWellTyped of string
- | WrongUriToConstant of string
- | WrongUriToVariable of string
- | WrongUriToMutualInductiveDefinitions of string
- | ListTooShort
- | NotPositiveOccurrences of string
- | NotWellFormedTypeOfInductiveConstructor of string
- | WrongRequiredArgument of string
- | RelToHiddenHypothesis
- | MetasenvInconsistency;;
-
-(* This is the only exception that will be raised *)
-exception TypeCheckerFailure of type_checker_exn;;
-
-val typecheck : UriManager.uri -> unit
-
-(* FUNCTIONS USED ONLY IN THE TOPLEVEL *)
-
-(* type_of_aux' metasenv context term *)
-val type_of_aux':
- Cic.metasenv -> Cic.context -> Cic.term -> Cic.term
-
-(* typecheck_mutual_inductive_defs uri (itl,params,indparamsno) *)
-val typecheck_mutual_inductive_defs :
- UriManager.uri -> Cic.inductiveType list * UriManager.uri list * int -> unit
diff --git a/helm/ocaml/cic_proof_checking/logger.ml b/helm/ocaml/cic_proof_checking/logger.ml
deleted file mode 100644 (file)
index 2fe8ac0..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-type msg =
- [ `Start_type_checking of UriManager.uri
- | `Type_checking_completed of UriManager.uri
- | `Trusting of UriManager.uri
- ]
-;;
-
-let log_to_html ~print_and_flush =
- let module U = UriManager in
-  let indent = ref 0 in
-   let mkindent () = 
-    String.make !indent ' '
-   in
-    function
-       `Start_type_checking uri ->
-         print_and_flush (
-          mkindent () ^
-          "<div style=\"margin-left: " ^
-          string_of_float (float_of_int !indent *. 0.5) ^ "cm\">" ^
-          "Type-Checking of " ^ (U.string_of_uri uri) ^ " started</div>\n"
-         ) ;
-         incr indent
-     | `Type_checking_completed uri ->
-         decr indent ;
-         print_and_flush (
-           mkindent () ^
-          "<div style=\"color: green ; margin-left: " ^
-          string_of_float (float_of_int !indent *. 0.5) ^ "cm\">" ^
-          "Type-Checking of " ^ (U.string_of_uri uri) ^ " completed.</div>\n"
-         )
-     | `Trusting uri ->
-         print_and_flush (
-           mkindent () ^
-          "<div style=\"color: blue ; margin-left: " ^
-          string_of_float (float_of_int !indent *. 0.5) ^ "cm\">" ^
-          (U.string_of_uri uri) ^ " is trusted.</div>\n"
-         )
-;;
-
-let log_callback = ref (function (_:msg) -> ())
-let log msg = !log_callback msg;;
diff --git a/helm/ocaml/cic_proof_checking/logger.mli b/helm/ocaml/cic_proof_checking/logger.mli
deleted file mode 100644 (file)
index 781abde..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-type msg =
- [ `Start_type_checking of UriManager.uri
- | `Type_checking_completed of UriManager.uri
- | `Trusting of UriManager.uri
- ]
-;;
-
-(* A callback that can be used to log to html *)
-val log_to_html : print_and_flush:(string -> unit) -> msg -> unit
-
-(* The log function used. The default does nothing. *)
-val log_callback : (msg -> unit) ref
-
-(* Log something via log_callback *)
-val log : msg -> unit
diff --git a/helm/ocaml/cic_textual_parser/.cvsignore b/helm/ocaml/cic_textual_parser/.cvsignore
deleted file mode 100644 (file)
index b94a819..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa cicTextualParser.ml cicTextualParser.mli cicTextualLexer.ml
diff --git a/helm/ocaml/cic_textual_parser/.depend b/helm/ocaml/cic_textual_parser/.depend
deleted file mode 100644 (file)
index f5ce25f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-cicTextualParser.cmi: cicTextualParser0.cmo 
-cicTextualParserContext.cmi: cicTextualParser.cmi cicTextualParser0.cmo 
-cicTextualParser.cmo: cicTextualParser0.cmo cicTextualParser.cmi 
-cicTextualParser.cmx: cicTextualParser0.cmx cicTextualParser.cmi 
-cicTextualParserContext.cmo: cicTextualParser.cmi cicTextualParser0.cmo \
-    cicTextualParserContext.cmi 
-cicTextualParserContext.cmx: cicTextualParser.cmx cicTextualParser0.cmx \
-    cicTextualParserContext.cmi 
-cicTextualLexer.cmo: cicTextualParser.cmi cicTextualParser0.cmo 
-cicTextualLexer.cmx: cicTextualParser.cmx cicTextualParser0.cmx 
diff --git a/helm/ocaml/cic_textual_parser/Makefile b/helm/ocaml/cic_textual_parser/Makefile
deleted file mode 100644 (file)
index 8863155..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-PACKAGE = cic_textual_parser
-REQUIRES = helm-cic
-PREDICATES =
-
-INTERFACE_FILES = cicTextualParser.mli cicTextualParserContext.mli
-IMPLEMENTATION_FILES = cicTextualParser0.ml $(INTERFACE_FILES:%.mli=%.ml) \
-                       cicTextualLexer.ml
-EXTRA_OBJECTS_TO_INSTALL = cicTextualParser0.ml cicTextualParser0.cmi \
-                           cicTextualLexer.mll cicTextualParser.mly
-
-EXTRA_OBJECTS_TO_CLEAN = cicTextualParser.ml cicTextualParser.mli \
-                         cicTextualLexer.ml
-
-include ../Makefile.common
diff --git a/helm/ocaml/cic_textual_parser/cicTextualLexer.mll b/helm/ocaml/cic_textual_parser/cicTextualLexer.mll
deleted file mode 100644 (file)
index 6db492e..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-{
- open CicTextualParser;;
- module L = Lexing;;
- module U = UriManager;;
-
- let indtyuri_of_uri uri =
-  let index_sharp =  String.index uri '#' in
-  let index_num = index_sharp + 3 in
-   try
-    (UriManager.uri_of_string (String.sub uri 0 index_sharp),
-     int_of_string(String.sub uri index_num (String.length uri - index_num)) - 1
-    )
-   with
-    Failure msg ->
-     raise (CicTextualParser0.LexerFailure "Not an inductive URI")
- ;;
-
- let indconuri_of_uri uri =
-  let index_sharp =  String.index uri '#' in
-  let index_div = String.rindex uri '/' in
-  let index_con = index_div + 1 in
-   try
-    (UriManager.uri_of_string (String.sub uri 0 index_sharp),
-     int_of_string
-      (String.sub uri (index_sharp + 3) (index_div - index_sharp - 3)) - 1,
-     int_of_string
-      (String.sub uri index_con (String.length uri - index_con))
-    )
-   with
-    Failure msg ->
-     raise (CicTextualParser0.LexerFailure "Not a constructor URI")
- ;;
-}
-let num = ['1'-'9']['0'-'9']* | '0'
-let alfa = ['A'-'Z' 'a'-'z' '_' ''' '-']
-let ident = alfa (alfa | num)*
-let baseuri = '/'(ident '/')* ident '.'
-let conuri = baseuri "con"
-let varuri = baseuri "var"
-let indtyuri = baseuri "ind#1/" num
-let indconuri = baseuri "ind#1/" num "/" num
-let blanks = [' ' '\t' '\n']
-rule token =
- parse
-    blanks      { token lexbuf } (* skip blanks *)
-  | "Case"      { CASE }
-  | "Fix"       { FIX }
-  | "CoFix"     { COFIX }
-  | "Set"       { SET }
-  | "Prop"      { PROP }
-  | "Type"      { TYPE }
-  | ident       { ID (L.lexeme lexbuf) }
-  | conuri      { CONURI (U.uri_of_string ("cic:" ^ L.lexeme lexbuf)) }
-  | varuri      { VARURI (U.uri_of_string ("cic:" ^ L.lexeme lexbuf)) }
-  | indtyuri    { INDTYURI (indtyuri_of_uri ("cic:" ^ L.lexeme lexbuf)) }
-  | indconuri   { INDCONURI (indconuri_of_uri("cic:" ^ L.lexeme lexbuf)) }
-  | num         { NUM (int_of_string (L.lexeme lexbuf)) }
-  | '?' num     { let lexeme = L.lexeme lexbuf in
-                   META
-                    (int_of_string
-                     (String.sub lexeme 1 (String.length lexeme - 1))) }
-  | ":>"        { CAST }
-  | ":="        { LETIN }
-  | '?'         { IMPLICIT }
-  | '('         { LPAREN }
-  | ')'         { RPAREN }
-  | '['         { LBRACKET }
-  | ']'         { RBRACKET }
-  | '{'         { LCURLY }
-  | '}'         { RCURLY }
-  | ';'         { SEMICOLON }
-  | '\\'        { LAMBDA }
-  | '!'         { PROD }
-  | ':'         { COLON }
-  | '.'         { DOT }
-  | "->"        { ARROW }
-  | "_"         { NONE }
-  | eof         { EOF }
-{}
diff --git a/helm/ocaml/cic_textual_parser/cicTextualParser.mly b/helm/ocaml/cic_textual_parser/cicTextualParser.mly
deleted file mode 100644 (file)
index 08d85a5..0000000
+++ /dev/null
@@ -1,512 +0,0 @@
-/* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- */
-
-%{
- open Cic;;
- module U = UriManager;;
-
- exception InvalidSuffix of string;;
- exception InductiveTypeURIExpected;;
- exception UnknownIdentifier of string;;
- exception ExplicitNamedSubstitutionAppliedToRel;;
- exception TheLeftHandSideOfAnExplicitNamedSubstitutionMustBeAVariable;;
- (* merge removing duplicates of two lists free of duplicates *)
- let union dom1 dom2 =
-  let rec filter =
-   function
-      [] -> []
-    | he::tl ->
-       if List.mem he dom1 then filter tl else he::(filter tl)
-  in
-   dom1 @ (filter dom2)
- ;;
-
- let get_index_in_list e =
-  let rec aux i =
-   function
-      [] -> raise Not_found
-    | (Some he)::_ when he = e -> i
-    | _::tl -> aux (i+1) tl
-  in
-   aux 1
- ;;
-
- (* Returns the first meta whose number is above the *)
- (* number of the higher meta.                       *)
- (*CSC: cut&pasted from proofEngine.ml *)
- let new_meta () =
-  let rec aux =
-   function
-      None,[] -> 1
-    | Some n,[] -> n
-    | None,(n,_,_)::tl -> aux (Some n,tl)
-    | Some m,(n,_,_)::tl -> if n > m then aux (Some n,tl) else aux (Some m,tl)
-  in
-   1 + aux (None,!CicTextualParser0.metasenv)
- ;;
-
- (* identity_relocation_list_for_metavariable i canonical_context         *)
- (* returns the identity relocation list, which is the list [1 ; ... ; n] *)
- (* where n = List.length [canonical_context]                             *)
- (*CSC: ma mi basta la lunghezza del contesto canonico!!!*)
- (*CSC: cut&pasted from proofEngine.ml *)
- let identity_relocation_list_for_metavariable canonical_context =
-  let canonical_context_length = List.length canonical_context in
-   let rec aux =
-    function
-       (_,[]) -> []
-     | (n,None::tl) -> None::(aux ((n+1),tl))
-     | (n,_::tl) -> (Some (Cic.Rel n))::(aux ((n+1),tl))
-   in
-    aux (1,canonical_context)
- ;;
-
- let deoptionize_exp_named_subst =
-  function
-     None -> [], (function _ -> [])
-   | Some (dom,mk_exp_named_subst) -> dom,mk_exp_named_subst
- ;;
-
- let term_of_con_uri uri exp_named_subst =
-  Const (uri,exp_named_subst)
- ;;
-
- let term_of_var_uri uri exp_named_subst =
-  Var (uri,exp_named_subst)
- ;;
-
- let term_of_indty_uri (uri,tyno) exp_named_subst =
-  MutInd (uri, tyno, exp_named_subst)
- ;;
-
- let term_of_indcon_uri (uri,tyno,consno) exp_named_subst =
-  MutConstruct (uri, tyno, consno, exp_named_subst)
- ;;
-
- let term_of_uri uri =
-  match uri with
-     CicTextualParser0.ConUri uri ->
-      term_of_con_uri uri
-   | CicTextualParser0.VarUri uri ->
-      term_of_var_uri uri
-   | CicTextualParser0.IndTyUri (uri,tyno) ->
-      term_of_indty_uri (uri,tyno) 
-   | CicTextualParser0.IndConUri (uri,tyno,consno) ->
-      term_of_indcon_uri (uri,tyno,consno)
- ;;
-
- let var_uri_of_id id interp =
-  let module CTP0 = CicTextualParser0 in
-   match interp (CicTextualParser0.Id id) with
-      None -> raise (UnknownIdentifier id)
-    | Some (CTP0.Uri (CTP0.VarUri uri)) -> uri
-    | Some _ -> raise TheLeftHandSideOfAnExplicitNamedSubstitutionMustBeAVariable
- ;;
-
- let indty_uri_of_id id interp =
-  let module CTP0 = CicTextualParser0 in
-   match interp (CicTextualParser0.Id id) with
-      None -> raise (UnknownIdentifier id)
-    | Some (CTP0.Uri (CTP0.IndTyUri (uri,tyno))) -> (uri,tyno)
-    | Some _ -> raise InductiveTypeURIExpected
- ;;
-
- let mk_implicit () =
-  let newmeta = new_meta () in
-   let new_canonical_context = [] in
-    let irl =
-     identity_relocation_list_for_metavariable new_canonical_context
-    in
-     CicTextualParser0.metasenv :=
-      [newmeta, new_canonical_context, Sort Type ;
-       newmeta+1, new_canonical_context, Meta (newmeta,irl);
-       newmeta+2, new_canonical_context, Meta (newmeta+1,irl)
-      ] @ !CicTextualParser0.metasenv ;
-     [], function _ -> Meta (newmeta+2,irl)
- ;;
-%}
-%token <string> ID
-%token <int> META
-%token <int> NUM
-%token <UriManager.uri> CONURI
-%token <UriManager.uri> VARURI
-%token <UriManager.uri * int> INDTYURI
-%token <UriManager.uri * int * int> INDCONURI
-%token LPAREN RPAREN PROD LAMBDA COLON DOT SET PROP TYPE CAST IMPLICIT NONE
-%token LETIN FIX COFIX SEMICOLON LCURLY RCURLY CASE ARROW LBRACKET RBRACKET EOF
-%right ARROW
-%start main
-%type <CicTextualParser0.interpretation_domain_item list * (CicTextualParser0.interpretation -> Cic.term)> main
-%%
-main:
- | EOF { raise CicTextualParser0.Eof } /* FG: was never raised */
- | expr EOF { $1 }
- | expr SEMICOLON { $1 } /*  FG: to read several terms in a row
-                          *  Do we need to clear some static variables? 
-                         */
-;
-expr2:
-   CONURI exp_named_subst
-   { let dom,mk_exp_named_subst = deoptionize_exp_named_subst $2 in
-      dom, function interp -> term_of_con_uri $1 (mk_exp_named_subst interp)
-   }
- | VARURI exp_named_subst
-   { let dom,mk_exp_named_subst = deoptionize_exp_named_subst $2 in
-      dom, function interp -> term_of_var_uri $1 (mk_exp_named_subst interp)
-   }
- | INDTYURI exp_named_subst
-   { let dom,mk_exp_named_subst = deoptionize_exp_named_subst $2 in
-      dom, function interp -> term_of_indty_uri $1 (mk_exp_named_subst interp)
-   }
- | INDCONURI exp_named_subst
-   { let dom,mk_exp_named_subst = deoptionize_exp_named_subst $2 in
-      dom, function interp -> term_of_indcon_uri $1 (mk_exp_named_subst interp)
-   }
- | ID exp_named_subst
-   { try
-      let res =
-       Rel (get_index_in_list (Name $1) !CicTextualParser0.binders)
-      in
-       (match $2 with
-           None -> ([], function _ -> res)
-         | Some _ -> raise (ExplicitNamedSubstitutionAppliedToRel)
-       )
-     with
-      Not_found ->
-       let dom1,mk_exp_named_subst = deoptionize_exp_named_subst $2 in
-        let dom = union dom1 [CicTextualParser0.Id $1] in
-         dom,
-          function interp ->
-           match interp (CicTextualParser0.Id $1) with
-             None  -> raise (UnknownIdentifier $1)
-           | Some (CicTextualParser0.Uri uri) ->
-               term_of_uri uri (mk_exp_named_subst interp)
-            | Some CicTextualParser0.Implicit ->
-               (*CSC: not very clean; to maximize code reusage *)
-               snd (mk_implicit ()) ""
-            | Some (CicTextualParser0.Term mk_term) ->
-               (mk_term interp)
-   }
- | CASE LPAREN expr COLON INDTYURI SEMICOLON expr RPAREN LCURLY branches RCURLY
-    { let dom1,mk_expr1 = $3 in
-      let dom2,mk_expr2 = $7 in
-      let dom3,mk_expr3 = $10 in
-       let dom = (union  dom1 (union dom2 dom3)) in
-        dom,
-        function interp ->
-         MutCase
-          (fst $5,snd $5,(mk_expr2 interp),(mk_expr1 interp),(mk_expr3 interp))
-    }
- | CASE LPAREN expr COLON ID SEMICOLON expr RPAREN LCURLY branches RCURLY
-    { let dom1,mk_expr1 = $3 in
-      let dom2,mk_expr2 = $7 in
-      let dom3,mk_expr3 = $10 in
-       let dom = union [CicTextualParser0.Id $5] (union dom1 (union dom2 dom3)) in
-        dom,
-        function interp ->
-         let uri,typeno = indty_uri_of_id $5 interp in
-          MutCase
-           (uri,typeno,(mk_expr2 interp),(mk_expr1 interp),
-             (mk_expr3 interp))
-    }
- | fixheader LCURLY exprseplist RCURLY
-    { let dom1,foo,ids_and_indexes,mk_types = $1 in
-      let dom2,mk_exprseplist = $3 in
-       let dom = union dom1 dom2 in
-        for i = 1 to List.length ids_and_indexes do
-         CicTextualParser0.binders := List.tl !CicTextualParser0.binders
-        done ;
-        dom,
-         function interp ->
-          let types = mk_types interp in
-          let fixfunsbodies = (mk_exprseplist interp) in
-           let idx =
-            let rec find idx =
-             function
-                [] -> raise Not_found
-              | (name,_)::_  when name = foo -> idx
-              | _::tl -> find (idx+1) tl
-            in
-             find 0 ids_and_indexes
-           in
-            let fixfuns =
-             List.map2 (fun ((name,recindex),ty) bo -> (name,recindex,ty,bo))
-              (List.combine ids_and_indexes types) fixfunsbodies
-            in
-             Fix (idx,fixfuns)
-    }
- | cofixheader LCURLY exprseplist RCURLY
-    { let dom1,foo,ids,mk_types = $1 in
-      let dom2,mk_exprseplist = $3 in
-       let dom = union dom1 dom2 in
-        dom,
-         function interp ->
-          let types = mk_types interp in
-          let fixfunsbodies = (mk_exprseplist interp) in
-           let idx =
-            let rec find idx =
-             function
-                [] -> raise Not_found
-              | name::_  when name = foo -> idx
-              | _::tl -> find (idx+1) tl
-            in
-             find 0 ids
-           in
-            let fixfuns =
-             List.map2 (fun (name,ty) bo -> (name,ty,bo))
-              (List.combine ids types) fixfunsbodies
-            in
-             for i = 1 to List.length fixfuns do
-              CicTextualParser0.binders := List.tl !CicTextualParser0.binders
-             done ;
-             CoFix (idx,fixfuns)
-    }
- | IMPLICIT
-    { mk_implicit () }
- | SET  { [], function _ -> Sort Set }
- | PROP { [], function _ -> Sort Prop }
- | TYPE { [], function _ -> Sort Type }
- | LPAREN expr CAST expr RPAREN
-    { let dom1,mk_expr1 = $2 in
-      let dom2,mk_expr2 = $4 in
-       let dom = union dom1 dom2 in
-        dom, function interp -> Cast ((mk_expr1 interp),(mk_expr2 interp))
-    }
- | META LBRACKET substitutionlist RBRACKET
-    { let dom,mk_substitutionlist = $3 in
-       dom, function interp -> Meta ($1, mk_substitutionlist interp)
-    } 
- | LPAREN expr exprlist RPAREN
-    { let length,dom2,mk_exprlist = $3 in
-       match length with
-          0 -> $2
-        | _ ->
-          let dom1,mk_expr1 = $2 in
-           let dom = union dom1 dom2 in
-            dom,
-             function interp ->
-              Appl ((mk_expr1 interp)::(mk_exprlist interp))
-    }
-;
-exp_named_subst :
-    { None }
- | LCURLY named_substs RCURLY
-    { Some $2 }
-;
-named_substs :
-   VARURI LETIN expr2
-    { let dom,mk_expr = $3 in
-       dom, function interp -> [$1, mk_expr interp] }
- | ID LETIN expr2
-    { let dom1,mk_expr = $3 in
-       let dom = union [CicTextualParser0.Id $1] dom1 in
-        dom, function interp -> [var_uri_of_id $1 interp, mk_expr interp] }
- | VARURI LETIN expr2 SEMICOLON named_substs
-    { let dom1,mk_expr = $3 in
-      let dom2,mk_named_substs = $5 in
-       let dom = union dom1 dom2 in
-        dom, function interp -> ($1, mk_expr interp)::(mk_named_substs interp)
-    }
- | ID LETIN expr2 SEMICOLON named_substs
-    { let dom1,mk_expr = $3 in
-      let dom2,mk_named_substs = $5 in
-       let dom = union [CicTextualParser0.Id $1] (union dom1 dom2) in
-        dom,
-         function interp ->
-          (var_uri_of_id $1 interp, mk_expr interp)::(mk_named_substs interp)
-    }
-;
-expr :
-   pihead expr
-    { CicTextualParser0.binders := List.tl !CicTextualParser0.binders ;
-      let dom1,mk_expr1 = snd $1 in
-      let dom2,mk_expr2 = $2 in
-       let dom = union dom1 dom2 in
-        dom, function interp -> Prod (fst $1, mk_expr1 interp, mk_expr2 interp)
-    }
- | lambdahead expr
-    { CicTextualParser0.binders := List.tl !CicTextualParser0.binders ;
-      let dom1,mk_expr1 = snd $1 in
-      let dom2,mk_expr2 = $2 in
-       let dom = union dom1 dom2 in
-        dom,function interp -> Lambda (fst $1, mk_expr1 interp, mk_expr2 interp)
-    }
- | letinhead expr
-    { CicTextualParser0.binders := List.tl !CicTextualParser0.binders ;
-      let dom1,mk_expr1 = snd $1 in
-      let dom2,mk_expr2 = $2 in
-       let dom = union dom1 dom2 in
-        dom, function interp -> LetIn (fst $1, mk_expr1 interp, mk_expr2 interp)
-    }
- | expr2
-    { $1 }
-;
-fixheader:
-   FIX ID LCURLY fixfunsdecl RCURLY
-    { let dom,ids_and_indexes,mk_types = $4 in
-       let bs =
-        List.rev_map (function (name,_) -> Some (Name name)) ids_and_indexes
-       in
-        CicTextualParser0.binders := bs@(!CicTextualParser0.binders) ;
-        dom, $2, ids_and_indexes, mk_types
-    }
-;
-fixfunsdecl:
-   ID LPAREN NUM RPAREN COLON expr
-    { let dom,mk_expr = $6 in
-       dom, [$1,$3], function interp -> [mk_expr interp]
-    }
- | ID LPAREN NUM RPAREN COLON expr SEMICOLON fixfunsdecl
-    { let dom1,mk_expr = $6 in
-      let dom2,ids_and_indexes,mk_types = $8 in
-       let dom = union dom1 dom2 in
-        dom, ($1,$3)::ids_and_indexes,
-         function interp -> (mk_expr interp)::(mk_types interp)
-    }
-;
-cofixheader:
-   COFIX ID LCURLY cofixfunsdecl RCURLY
-    { let dom,ids,mk_types = $4 in
-       let bs =
-        List.rev_map (function name -> Some (Name name)) ids
-       in
-        CicTextualParser0.binders := bs@(!CicTextualParser0.binders) ;
-        dom, $2, ids, mk_types
-    }
-;
-cofixfunsdecl:
-   ID COLON expr
-    { let dom,mk_expr = $3 in
-       dom, [$1], function interp -> [mk_expr interp]
-    }
- | ID COLON expr SEMICOLON cofixfunsdecl
-    { let dom1,mk_expr = $3 in
-      let dom2,ids,mk_types = $5 in
-       let dom = union dom1 dom2 in
-        dom, $1::ids,
-         function interp -> (mk_expr interp)::(mk_types interp)
-    }
-;
-pihead:
-   PROD ID COLON expr DOT
-    { CicTextualParser0.binders := (Some (Name $2))::!CicTextualParser0.binders;
-      let dom,mk_expr = $4 in
-       Cic.Name $2, (dom, function interp -> mk_expr interp)
-    }
- | expr2 ARROW
-   { CicTextualParser0.binders := (Some Anonymous)::!CicTextualParser0.binders ;
-     let dom,mk_expr = $1 in
-      Anonymous, (dom, function interp -> mk_expr interp)
-   }
- | PROD ID DOT
-    { CicTextualParser0.binders := (Some (Name $2))::!CicTextualParser0.binders;
-      let newmeta = new_meta () in
-       let new_canonical_context = [] in
-        let irl =
-         identity_relocation_list_for_metavariable new_canonical_context
-        in
-         CicTextualParser0.metasenv :=
-          [newmeta, new_canonical_context, Sort Type ;
-           newmeta+1, new_canonical_context, Meta (newmeta,irl)
-          ] @ !CicTextualParser0.metasenv ;
-         Cic.Name $2, ([], function _ -> Meta (newmeta+1,irl))
-    }
-;
-lambdahead:
-   LAMBDA ID COLON expr DOT
-    { CicTextualParser0.binders := (Some (Name $2))::!CicTextualParser0.binders;
-      let dom,mk_expr = $4 in
-       Cic.Name $2, (dom, function interp -> mk_expr interp)
-    }
- | LAMBDA ID DOT
-    { CicTextualParser0.binders := (Some (Name $2))::!CicTextualParser0.binders;
-      let newmeta = new_meta () in
-       let new_canonical_context = [] in
-        let irl =
-         identity_relocation_list_for_metavariable new_canonical_context
-        in
-         CicTextualParser0.metasenv :=
-          [newmeta, new_canonical_context, Sort Type ;
-           newmeta+1, new_canonical_context, Meta (newmeta,irl)
-          ] @ !CicTextualParser0.metasenv ;
-         Cic.Name $2, ([], function _ -> Meta (newmeta+1,irl))
-    }
-;
-letinhead:
-  LAMBDA ID LETIN expr DOT
-   { CicTextualParser0.binders := (Some (Name $2))::!CicTextualParser0.binders ;
-     let dom,mk_expr = $4 in
-      Cic.Name $2, (dom, function interp -> mk_expr interp)
-   }
-;
-branches:
-    { [], function _ -> [] }
- | expr SEMICOLON branches
-    { let dom1,mk_expr = $1 in
-      let dom2,mk_branches = $3 in
-       let dom = union dom1 dom2 in
-        dom, function interp -> (mk_expr interp)::(mk_branches interp)
-    }
- | expr
-    { let dom,mk_expr = $1 in
-       dom, function interp -> [mk_expr interp]
-    }
-;
-exprlist:
-    
-    { 0, [], function _ -> [] }
- | expr exprlist
-    { let dom1,mk_expr = $1 in
-      let length,dom2,mk_exprlist = $2 in
-       let dom = union dom1 dom2 in
-        length+1, dom, function interp -> (mk_expr interp)::(mk_exprlist interp)
-    }
-;
-exprseplist:
-   expr
-    { let dom,mk_expr = $1 in
-       dom, function interp -> [mk_expr interp]
-    }
- | expr SEMICOLON exprseplist
-    { let dom1,mk_expr = $1 in
-      let dom2,mk_exprseplist = $3 in
-       let dom = union dom1 dom2 in
-        dom, function interp -> (mk_expr interp)::(mk_exprseplist interp)
-    }
-;
-substitutionlist:
-    { [], function _ -> [] }
- | expr SEMICOLON substitutionlist
-    { let dom1,mk_expr = $1 in
-      let dom2,mk_substitutionlist = $3 in
-       let dom = union dom1 dom2 in
-        dom,
-         function interp ->(Some (mk_expr interp))::(mk_substitutionlist interp)
-    }
- | NONE SEMICOLON substitutionlist
-    { let dom,mk_exprsubstitutionlist = $3 in
-       dom, function interp -> None::(mk_exprsubstitutionlist interp)
-    }
diff --git a/helm/ocaml/cic_textual_parser/cicTextualParser0.ml b/helm/ocaml/cic_textual_parser/cicTextualParser0.ml
deleted file mode 100644 (file)
index 7a53057..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception Eof;;
-exception LexerFailure of string;;
-
-type uri =
-   ConUri of UriManager.uri
- | VarUri of UriManager.uri
- | IndTyUri of UriManager.uri * int
- | IndConUri of UriManager.uri * int * int
-;;
-
-type interpretation_domain_item =
-   Id of string
- | Symbol of string * (string * (interpretation -> Cic.term)) list
-and interpretation_codomain_item =
-   Uri of uri
- | Implicit
- | Term of (interpretation -> Cic.term)
-and interpretation =
- interpretation_domain_item -> interpretation_codomain_item option
-;;
-
-let binders = ref ([] : (Cic.name option) list);;
-let metasenv = ref ([] : Cic.metasenv);;
diff --git a/helm/ocaml/cic_textual_parser/cicTextualParserContext.ml b/helm/ocaml/cic_textual_parser/cicTextualParserContext.ml
deleted file mode 100644 (file)
index 6901bd4..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let main ~context ~metasenv lexer lexbuf =
- (* Warning: higly non-reentrant code!!! *)
- CicTextualParser0.binders := context ;
- CicTextualParser0.metasenv := metasenv ;
- let dom,mk_term = CicTextualParser.main lexer lexbuf in
-  dom,
-   function interp ->
-    let term = mk_term interp in 
-    let metasenv = !CicTextualParser0.metasenv in
-     metasenv,term
-;;
diff --git a/helm/ocaml/cic_textual_parser/cicTextualParserContext.mli b/helm/ocaml/cic_textual_parser/cicTextualParserContext.mli
deleted file mode 100644 (file)
index 0b8871e..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val main :
-  context:((Cic.name option) list) ->
-  metasenv:Cic.metasenv ->
-  (Lexing.lexbuf  -> CicTextualParser.token) -> Lexing.lexbuf ->
-   CicTextualParser0.interpretation_domain_item list *
-    (CicTextualParser0.interpretation -> (Cic.metasenv * Cic.term))
diff --git a/helm/ocaml/cic_unification/.cvsignore b/helm/ocaml/cic_unification/.cvsignore
deleted file mode 100644 (file)
index 6b3eba3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa
diff --git a/helm/ocaml/cic_unification/.depend b/helm/ocaml/cic_unification/.depend
deleted file mode 100644 (file)
index d22689d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-cicRefine.cmi: cicUnification.cmi 
-cicUnification.cmo: cicUnification.cmi 
-cicUnification.cmx: cicUnification.cmi 
-cicRefine.cmo: cicUnification.cmi cicRefine.cmi 
-cicRefine.cmx: cicUnification.cmx cicRefine.cmi 
diff --git a/helm/ocaml/cic_unification/Makefile b/helm/ocaml/cic_unification/Makefile
deleted file mode 100644 (file)
index fbf0d22..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-PACKAGE = cic_unification
-REQUIRES = helm-cic_proof_checking
-PREDICATES =
-
-INTERFACE_FILES = cicUnification.mli cicRefine.mli
-IMPLEMENTATION_FILES = $(INTERFACE_FILES:%.mli=%.ml)
-EXTRA_OBJECTS_TO_INSTALL =
-
-include ../Makefile.common
diff --git a/helm/ocaml/cic_unification/cicRefine.ml b/helm/ocaml/cic_unification/cicRefine.ml
deleted file mode 100644 (file)
index e5e8469..0000000
+++ /dev/null
@@ -1,365 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception Impossible of int;;
-exception NotRefinable of string;;
-exception Uncertain of string;;
-exception WrongUriToConstant of string;;
-exception WrongUriToVariable of string;;
-exception WrongUriToMutualInductiveDefinitions of string;;
-exception RelToHiddenHypothesis;;
-exception MetasenvInconsistency;;
-exception MutCaseFixAndCofixRefineNotImplemented;;
-exception FreeMetaFound of int;;
-
-let fdebug = ref 0;;
-let debug t context =
- let rec debug_aux t i =
-  let module C = Cic in
-  let module U = UriManager in
-   CicPp.ppobj (C.Variable ("DEBUG", None, t, [])) ^ "\n" ^ i
- in
-  if !fdebug = 0 then
-   raise (NotRefinable ("\n" ^ List.fold_right debug_aux (t::context) ""))
-   (*print_endline ("\n" ^ List.fold_right debug_aux (t::context) "") ; flush stdout*)
-;;
-
-let rec type_of_constant uri =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  match CicEnvironment.get_cooked_obj uri with
-     C.Constant (_,_,ty,_) -> ty
-   | C.CurrentProof (_,_,_,ty,_) -> ty
-   | _ -> raise (WrongUriToConstant (U.string_of_uri uri))
-
-and type_of_variable uri =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  match CicEnvironment.get_cooked_obj uri with
-     C.Variable (_,_,ty,_) -> ty
-   |  _ -> raise (WrongUriToVariable (UriManager.string_of_uri uri))
-
-and type_of_mutual_inductive_defs uri i =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  match CicEnvironment.get_cooked_obj uri with
-     C.InductiveDefinition (dl,_,_) ->
-      let (_,_,arity,_) = List.nth dl i in
-       arity
-   | _ -> raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri))
-
-and type_of_mutual_inductive_constr uri i j =
- let module C = Cic in
- let module R = CicReduction in
- let module U = UriManager in
-  match CicEnvironment.get_cooked_obj uri with
-      C.InductiveDefinition (dl,_,_) ->
-       let (_,_,_,cl) = List.nth dl i in
-        let (_,ty) = List.nth cl (j-1) in
-         ty
-   | _ -> raise (WrongUriToMutualInductiveDefinitions (U.string_of_uri uri))
-
-(* type_of_aux' is just another name (with a different scope) for type_of_aux *)
-and type_of_aux' metasenv context t =
- let rec type_of_aux subst metasenv context =
-  let module C = Cic in
-  let module S = CicSubstitution in
-  let module U = UriManager in
-  let module Un = CicUnification in
-   function
-      C.Rel n ->
-       (try
-         match List.nth context (n - 1) with
-            Some (_,C.Decl t) -> S.lift n t,subst,metasenv
-          | Some (_,C.Def bo) ->
-             type_of_aux subst metasenv context (S.lift n bo)
-         | None -> raise RelToHiddenHypothesis
-        with
-         _ -> raise (NotRefinable "Not a close term")
-       )
-    | C.Var (uri,exp_named_subst) ->
-      incr fdebug ;
-      let subst',metasenv' =
-       check_exp_named_subst subst metasenv context exp_named_subst in
-      let ty =
-       CicSubstitution.subst_vars exp_named_subst (type_of_variable uri)
-      in
-       decr fdebug ;
-       ty,subst',metasenv'
-    | C.Meta (n,l) -> 
-       let (_,canonical_context,ty) =
-        try
-         List.find (function (m,_,_) -> n = m) metasenv
-        with
-         Not_found -> raise (FreeMetaFound n)
-       in
-        let subst',metasenv' =
-         check_metasenv_consistency subst metasenv context canonical_context l
-        in
-         CicSubstitution.lift_meta l ty, subst', metasenv'
-    | C.Sort s ->
-       C.Sort C.Type, (*CSC manca la gestione degli universi!!! *)
-        subst,metasenv
-    | C.Implicit -> raise (Impossible 21)
-    | C.Cast (te,ty) ->
-       let _,subst',metasenv' =
-        type_of_aux subst metasenv context ty in
-       let inferredty,subst'',metasenv'' =
-        type_of_aux subst' metasenv' context ty
-       in
-        (try
-          let subst''',metasenv''' =
-           Un.fo_unif_subst subst'' context metasenv'' inferredty ty
-          in
-           ty,subst''',metasenv'''
-         with
-          _ -> raise (NotRefinable "Cast"))
-    | C.Prod (name,s,t) ->
-       let sort1,subst',metasenv' = type_of_aux subst metasenv context s in
-       let sort2,subst'',metasenv'' =
-        type_of_aux subst' metasenv' ((Some (name,(C.Decl s)))::context) t
-       in
-        sort_of_prod subst'' metasenv'' context (name,s) (sort1,sort2)
-   | C.Lambda (n,s,t) ->
-       let sort1,subst',metasenv' = type_of_aux subst metasenv context s in
-       let type2,subst'',metasenv'' =
-        type_of_aux subst' metasenv' ((Some (n,(C.Decl s)))::context) t
-       in
-        let sort2,subst''',metasenv''' =
-         type_of_aux subst'' metasenv''((Some (n,(C.Decl s)))::context) type2
-        in
-         (* only to check if the product is well-typed *)
-         let _,subst'''',metasenv'''' =
-          sort_of_prod subst''' metasenv''' context (n,s) (sort1,sort2)
-         in
-          C.Prod (n,s,type2),subst'''',metasenv''''
-   | C.LetIn (n,s,t) ->
-      (* only to check if s is well-typed *)
-      let _,subst',metasenv' = type_of_aux subst metasenv context s in
-      let inferredty,subst'',metasenv'' =
-       type_of_aux subst' metasenv' ((Some (n,(C.Def s)))::context) t
-      in
-       (* One-step LetIn reduction. Even faster than the previous solution.
-          Moreover the inferred type is closer to the expected one. *)
-       CicSubstitution.subst s inferredty,subst',metasenv'
-   | C.Appl (he::tl) when List.length tl > 0 ->
-      let hetype,subst',metasenv' = type_of_aux subst metasenv context he in
-      let tlbody_and_type,subst'',metasenv'' =
-       List.fold_right
-        (fun x (res,subst,metasenv) ->
-          let ty,subst',metasenv' =
-           type_of_aux subst metasenv context x
-          in
-           (x, ty)::res,subst',metasenv'
-        ) tl ([],subst',metasenv')
-      in
-       eat_prods subst'' metasenv'' context hetype tlbody_and_type
-   | C.Appl _ -> raise (NotRefinable "Appl: no arguments")
-   | C.Const (uri,exp_named_subst) ->
-      incr fdebug ;
-      let subst',metasenv' =
-       check_exp_named_subst subst metasenv context exp_named_subst in
-      let cty =
-       CicSubstitution.subst_vars exp_named_subst (type_of_constant uri)
-      in
-       decr fdebug ;
-       cty,subst',metasenv'
-   | C.MutInd (uri,i,exp_named_subst) ->
-      incr fdebug ;
-      let subst',metasenv' =
-       check_exp_named_subst subst metasenv context exp_named_subst in
-      let cty =
-       CicSubstitution.subst_vars exp_named_subst
-        (type_of_mutual_inductive_defs uri i)
-      in
-       decr fdebug ;
-       cty,subst',metasenv'
-   | C.MutConstruct (uri,i,j,exp_named_subst) ->
-      let subst',metasenv' =
-       check_exp_named_subst subst metasenv context exp_named_subst in
-      let cty =
-       CicSubstitution.subst_vars exp_named_subst
-        (type_of_mutual_inductive_constr uri i j)
-      in
-       cty,subst',metasenv'
-   | C.MutCase _
-   | C.Fix _
-   | C.CoFix _ -> raise MutCaseFixAndCofixRefineNotImplemented
-
- (* check_metasenv_consistency checks that the "canonical" context of a
- metavariable is consitent - up to relocation via the relocation list l -
- with the actual context *)
- and check_metasenv_consistency subst metasenv context canonical_context l =
-   let module C = Cic in
-   let module R = CicReduction in
-   let module S = CicSubstitution in
-    let lifted_canonical_context = 
-     let rec aux i =
-      function
-         [] -> []
-       | (Some (n,C.Decl t))::tl ->
-          (Some (n,C.Decl (S.lift_meta l (S.lift i t))))::(aux (i+1) tl)
-       | (Some (n,C.Def t))::tl ->
-          (Some (n,C.Def (S.lift_meta l (S.lift i t))))::(aux (i+1) tl)
-       | None::tl -> None::(aux (i+1) tl)
-     in
-      aux 1 canonical_context
-    in
-     List.fold_left2 
-      (fun (subst,metasenv) t ct -> 
-        match (t,ct) with
-           _,None -> subst,metasenv
-         | Some t,Some (_,C.Def ct) ->
-            (try
-              CicUnification.fo_unif_subst subst context metasenv t ct
-             with _ -> raise MetasenvInconsistency)
-         | Some t,Some (_,C.Decl ct) ->
-            let inferredty,subst',metasenv' =
-             type_of_aux subst metasenv context t
-            in
-             (try
-               CicUnification.fo_unif_subst subst context metasenv inferredty ct
-             with _ -> raise MetasenvInconsistency)
-         | _, _  -> raise MetasenvInconsistency
-      ) (subst,metasenv) l lifted_canonical_context 
-
- and check_exp_named_subst metasubst metasenv context =
-  let rec check_exp_named_subst_aux metasubst metasenv substs =
-   function
-      [] -> metasubst,metasenv
-    | ((uri,t) as subst)::tl ->
-       let typeofvar =
-        CicSubstitution.subst_vars substs (type_of_variable uri) in
-       (match CicEnvironment.get_cooked_obj ~trust:false uri with
-           Cic.Variable (_,Some bo,_,_) ->
-            raise
-             (NotRefinable
-               "A variable with a body can not be explicit substituted")
-         | Cic.Variable (_,None,_,_) -> ()
-         | _ -> raise (WrongUriToVariable (UriManager.string_of_uri uri))
-       ) ;
-       let typeoft,metasubst',metasenv' =
-        type_of_aux metasubst metasenv context t
-       in
-        try
-         let metasubst'',metasenv'' =
-          CicUnification.fo_unif_subst
-           metasubst' context metasenv' typeoft typeofvar
-         in
-          check_exp_named_subst_aux metasubst'' metasenv'' (substs@[subst]) tl
-        with _ ->
-         raise (NotRefinable "Wrong Explicit Named Substitution")
-  in
-   check_exp_named_subst_aux metasubst metasenv []
-
- and sort_of_prod subst metasenv context (name,s) (t1, t2) =
-  let module C = Cic in
-   (* ti could be a metavariable in the domain of the substitution *)
-   let subst',metasenv' = CicUnification.unwind_subst metasenv subst in
-   let t1' = CicUnification.apply_subst subst' t1 in
-   let t2' = CicUnification.apply_subst subst' t2 in
-    let t1'' = CicReduction.whd context t1' in
-    let t2'' = CicReduction.whd ((Some (name,C.Decl s))::context) t2' in
-    match (t1'', t2'') with
-       (C.Sort s1, C.Sort s2)
-         when (s2 = C.Prop or s2 = C.Set) -> (* different from Coq manual!!! *)
-          C.Sort s2,subst',metasenv'
-     | (C.Sort s1, C.Sort s2) ->
-         (*CSC manca la gestione degli universi!!! *)
-         C.Sort C.Type,subst',metasenv'
-     | (C.Meta _,_)
-     | (_,C.Meta _) ->
-       raise
-        (Uncertain
-          ("Two sorts were expected, found " ^ CicPp.ppterm t1'' ^ " and " ^
-           CicPp.ppterm t2''))
-     | (_,_) ->
-       raise
-        (NotRefinable
-         ("Prod: sort1= "^ CicPp.ppterm t1'' ^ " ; sort2= "^ CicPp.ppterm t2''))
-
- and eat_prods subst metasenv context hetype =
-  function
-     [] -> hetype,subst,metasenv
-   | (hete, hety)::tl ->
-    (match (CicReduction.whd context hetype) with
-        Cic.Prod (n,s,t) ->
-         let subst',metasenv' =
-          try
-           CicUnification.fo_unif_subst subst context metasenv s hety
-          with _ ->
-           raise (NotRefinable "Appl: wrong parameter-type")
-         in
-          CicReduction.fdebug := -1 ;
-          eat_prods subst' metasenv' context (CicSubstitution.subst hete t) tl
-      | Cic.Meta _ as t ->
-         raise
-          (Uncertain
-            ("Prod expected, " ^ CicPp.ppterm t ^ " found"))
-      | _ -> raise (NotRefinable "Appl: wrong Prod-type")
-    )
- in
-  let ty,subst',metasenv' =
-   type_of_aux [] metasenv context t
-  in
-   let subst'',metasenv'' = CicUnification.unwind_subst metasenv' subst' in
-   (* we get rid of the metavariables that have been instantiated *)
-   let metasenv''' =
-    List.filter
-     (function (i,_,_) -> not (List.exists (function (j,_) -> j=i) subst''))
-     metasenv''
-   in
-    CicUnification.apply_subst subst'' t,
-     CicUnification.apply_subst subst'' ty,
-     subst'', metasenv'''
-;;
-
-(* DEBUGGING ONLY *)
-let type_of_aux' metasenv context term =
- try
-  let (t,ty,s,m) =
-   type_of_aux' metasenv context term
-  in
-   List.iter
-    (function (i,t) ->
-      prerr_endline ("+ ?" ^ string_of_int i ^ " := " ^ CicPp.ppterm t)) s ;
-   List.iter
-    (function (i,_,t) ->
-      prerr_endline ("+ ?" ^ string_of_int i ^ " : " ^ CicPp.ppterm t)) m ;
-   prerr_endline
-    ("@@@ REFINE SUCCESSFUL: " ^ CicPp.ppterm t ^ " : " ^ CicPp.ppterm ty) ;
-   (t,ty,s,m)
- with
-  e ->
-   List.iter
-    (function (i,_,t) ->
-      prerr_endline ("+ ?" ^ string_of_int i ^ " : " ^ CicPp.ppterm t))
-    metasenv ;
-   prerr_endline ("@@@ REFINE FAILED: " ^ Printexc.to_string e) ;
-   raise e
-;;
diff --git a/helm/ocaml/cic_unification/cicRefine.mli b/helm/ocaml/cic_unification/cicRefine.mli
deleted file mode 100644 (file)
index 338f506..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception NotRefinable of string
-exception Uncertain of string
-exception WrongUriToConstant of string
-exception WrongUriToVariable of string
-exception WrongUriToMutualInductiveDefinitions of string
-exception MutCaseFixAndCofixRefineNotImplemented;;
-exception FreeMetaFound of int;;
-
-(* type_of_aux' metasenv context term                        *)
-(* refines [term] and returns the refined form of [term],    *)
-(* its type, the computed substitution and the new metasenv. *)
-(* The substitution returned is already unwinded             *)
-val type_of_aux':
- Cic.metasenv -> Cic.context -> Cic.term ->
-  Cic.term * Cic.term * CicUnification.substitution * Cic.metasenv
diff --git a/helm/ocaml/cic_unification/cicUnification.ml b/helm/ocaml/cic_unification/cicUnification.ml
deleted file mode 100644 (file)
index f7c1907..0000000
+++ /dev/null
@@ -1,703 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception UnificationFailed;;
-exception Free;;
-exception OccurCheck;;
-exception RelToHiddenHypothesis;;
-exception OpenTerm;;
-
-(**** DELIFT ****)
-
-(* the delift function takes in input an ordered list of integers [n1,...,nk]
-   and a term t, and relocates rel(nk) to k. Typically, the list of integers 
-   is a parameter of a metavariable occurrence. *)
-
-exception NotInTheList;;
-
-let position n =
-  let rec aux k =
-   function 
-       [] -> raise NotInTheList
-     | (Some (Cic.Rel m))::_ when m=n -> k
-     | _::tl -> aux (k+1) tl in
-  aux 1
-;;
-let restrict to_be_restricted =
-  let rec erase i n = 
-    function
-       [] -> []
-      |        _::tl when List.mem (n,i) to_be_restricted ->
-         None::(erase (i+1) n tl) 
-      | he::tl -> he::(erase (i+1) n tl) in
-  let rec aux =
-    function 
-       [] -> []
-      |        (n,context,t)::tl -> (n,erase 1 n context,t)::(aux tl) in
-  aux
-;;
-
-
-let delift context metasenv l t =
- let module S = CicSubstitution in
-  let to_be_restricted = ref [] in
-  let rec deliftaux k =
-   let module C = Cic in
-    function
-       C.Rel m -> 
-         if m <=k then
-          C.Rel m   (*CSC: che succede se c'e' un Def? Dovrebbe averlo gia' *)
-                    (*CSC: deliftato la regola per il LetIn                 *)
-         else
-         (match List.nth context (m-k-1) with
-           Some (_,C.Def t) -> deliftaux k (S.lift m t)
-         | Some (_,C.Decl t) ->
-             (* It may augment to_be_restricted *)
-             ignore (deliftaux k (S.lift m t)) ;
-             C.Rel ((position (m-k) l) + k)
-         | None -> raise RelToHiddenHypothesis)
-     | C.Var (uri,exp_named_subst) ->
-        let exp_named_subst' =
-         List.map (function (uri,t) -> uri,deliftaux k t) exp_named_subst
-        in
-         C.Var (uri,exp_named_subst')
-     | C.Meta (i, l1) as t -> 
-        let rec deliftl j =
-         function
-            [] -> []
-          | None::tl -> None::(deliftl (j+1) tl)
-          | (Some t)::tl ->
-             let l1' = (deliftl (j+1) tl) in
-              try
-               Some (deliftaux k t)::l1'
-              with
-                 RelToHiddenHypothesis
-               | NotInTheList ->
-                  to_be_restricted := (i,j)::!to_be_restricted ; None::l1'
-        in
-         let l' = deliftl 1 l1 in
-          C.Meta(i,l')
-     | C.Sort _ as t -> t
-     | C.Implicit as t -> t
-     | C.Cast (te,ty) -> C.Cast (deliftaux k te, deliftaux k ty)
-     | C.Prod (n,s,t) -> C.Prod (n, deliftaux k s, deliftaux (k+1) t)
-     | C.Lambda (n,s,t) -> C.Lambda (n, deliftaux k s, deliftaux (k+1) t)
-     | C.LetIn (n,s,t) -> C.LetIn (n, deliftaux k s, deliftaux (k+1) t)
-     | C.Appl l -> C.Appl (List.map (deliftaux k) l)
-     | C.Const (uri,exp_named_subst) ->
-        let exp_named_subst' =
-         List.map (function (uri,t) -> uri,deliftaux k t) exp_named_subst
-        in
-         C.Const (uri,exp_named_subst')
-     | C.MutInd (uri,typeno,exp_named_subst) ->
-        let exp_named_subst' =
-         List.map (function (uri,t) -> uri,deliftaux k t) exp_named_subst
-        in
-         C.MutInd (uri,typeno,exp_named_subst')
-     | C.MutConstruct (uri,typeno,consno,exp_named_subst) ->
-        let exp_named_subst' =
-         List.map (function (uri,t) -> uri,deliftaux k t) exp_named_subst
-        in
-         C.MutConstruct (uri,typeno,consno,exp_named_subst')
-     | C.MutCase (sp,i,outty,t,pl) ->
-        C.MutCase (sp, i, deliftaux k outty, deliftaux k t,
-         List.map (deliftaux k) pl)
-     | C.Fix (i, fl) ->
-        let len = List.length fl in
-        let liftedfl =
-         List.map
-          (fun (name, i, ty, bo) ->
-           (name, i, deliftaux k ty, deliftaux (k+len) bo))
-           fl
-        in
-         C.Fix (i, liftedfl)
-     | C.CoFix (i, fl) ->
-        let len = List.length fl in
-        let liftedfl =
-         List.map
-          (fun (name, ty, bo) -> (name, deliftaux k ty, deliftaux (k+len) bo))
-           fl
-        in
-         C.CoFix (i, liftedfl)
-  in
-    let res = deliftaux 0 t in
-    res, restrict !to_be_restricted metasenv
-;;
-
-(**** END OF DELIFT ****)
-
-type substitution = (int * Cic.term) list
-
-(* NUOVA UNIFICAZIONE *)
-(* A substitution is a (int * Cic.term) list that associates a
-   metavariable i with its body.
-   A metaenv is a (int * Cic.term) list that associate a metavariable
-   i with is type. 
-   fo_unif_new takes a metasenv, a context, two terms t1 and t2 and gives back
-   a new substitution which is _NOT_ unwinded. It must be unwinded before
-   applying it. *)
-let rec fo_unif_subst subst context metasenv t1 t2 =  
- let module C = Cic in
- let module R = CicReduction in
- let module S = CicSubstitution in
-  match (t1, t2) with
-     (C.Meta (n,ln), C.Meta (m,lm)) when n=m ->
-       let ok =
-        List.fold_left2
-         (fun b t1 t2 ->
-           b &&
-            match t1,t2 with
-               None,_
-             | _,None -> true
-             | Some t1', Some t2' ->
-                (* First possibility:  restriction    *)
-                (* Second possibility: unification    *)
-                (* Third possibility:  convertibility *)
-               R.are_convertible context t1' t2'
-         ) true ln lm
-       in
-        if ok then subst,metasenv else raise UnificationFailed
-   | (C.Meta (n,l), C.Meta (m,_)) when n>m ->
-       fo_unif_subst subst context metasenv t2 t1
-   | (C.Meta (n,l), t)   
-   | (t, C.Meta (n,l)) ->
-       let subst',metasenv' =
-       try
-        let oldt = (List.assoc n subst) in
-        let lifted_oldt = S.lift_meta l oldt in
-         fo_unif_subst subst context metasenv lifted_oldt t
-       with Not_found ->
-        let t',metasenv' = delift context metasenv l t in
-         (n, t')::subst, metasenv'
-       in
-       let (_,_,meta_type) = 
-        List.find (function (m,_,_) -> m=n) metasenv' in
-       let tyt = CicTypeChecker.type_of_aux' metasenv' context t in
-        fo_unif_subst subst' context metasenv' (S.lift_meta l meta_type) tyt
-   | (C.Var (uri1,exp_named_subst1),C.Var (uri2,exp_named_subst2))
-   | (C.Const (uri1,exp_named_subst1),C.Const (uri2,exp_named_subst2)) ->
-      if UriManager.eq uri1 uri2 then
-       fo_unif_subst_exp_named_subst subst context metasenv
-        exp_named_subst1 exp_named_subst2
-      else
-       raise UnificationFailed
-   | C.MutInd (uri1,i1,exp_named_subst1),C.MutInd (uri2,i2,exp_named_subst2) ->
-      if UriManager.eq uri1 uri2 && i1 = i2 then
-       fo_unif_subst_exp_named_subst subst context metasenv
-        exp_named_subst1 exp_named_subst2
-      else
-       raise UnificationFailed
-   | C.MutConstruct (uri1,i1,j1,exp_named_subst1),
-     C.MutConstruct (uri2,i2,j2,exp_named_subst2) ->
-      if UriManager.eq uri1 uri2 && i1 = i2 && j1 = j2 then
-       fo_unif_subst_exp_named_subst subst context metasenv
-        exp_named_subst1 exp_named_subst2
-      else
-       raise UnificationFailed
-   | (C.Rel _, _)
-   | (_,  C.Rel _) 
-   | (C.Var _, _)
-   | (_, C.Var _) 
-   | (C.Sort _ ,_)
-   | (_, C.Sort _)
-   | (C.Implicit, _)
-   | (_, C.Implicit) -> 
-       if R.are_convertible context t1 t2 then
-        subst, metasenv
-       else
-        raise UnificationFailed
-   | (C.Cast (te,ty), t2) -> fo_unif_subst subst context metasenv te t2
-   | (t1, C.Cast (te,ty)) -> fo_unif_subst subst context metasenv t1 te
-   | (C.Prod (n1,s1,t1), C.Prod (_,s2,t2)) -> 
-       let subst',metasenv' = fo_unif_subst subst context metasenv s1 s2 in
-        fo_unif_subst subst' ((Some (n1,(C.Decl s1)))::context) metasenv' t1 t2
-   | (C.Lambda (n1,s1,t1), C.Lambda (_,s2,t2)) -> 
-       let subst',metasenv' = fo_unif_subst subst context metasenv s1 s2 in
-        fo_unif_subst subst' ((Some (n1,(C.Decl s1)))::context) metasenv' t1 t2
-   | (C.LetIn (_,s1,t1), t2)  
-   | (t2, C.LetIn (_,s1,t1)) -> 
-       fo_unif_subst subst context metasenv t2 (S.subst s1 t1)
-   | (C.Appl l1, C.Appl l2) -> 
-       let lr1 = List.rev l1 in
-       let lr2 = List.rev l2 in
-       let rec fo_unif_l subst metasenv =
-        function
-           [],_
-         | _,[] -> assert false
-         | ([h1],[h2]) ->
-             fo_unif_subst subst context metasenv h1 h2
-         | ([h],l) 
-         | (l,[h]) ->
-             fo_unif_subst subst context metasenv h (C.Appl (List.rev l))
-         | ((h1::l1),(h2::l2)) -> 
-            let subst', metasenv' = 
-             fo_unif_subst subst context metasenv h1 h2
-            in 
-             fo_unif_l subst' metasenv' (l1,l2)
-       in
-       fo_unif_l subst metasenv (lr1, lr2) 
-   | (C.Const _, _) 
-   | (_, C.Const _)
-   | (C.MutInd  _, _) 
-   | (_, C.MutInd _)
-   | (C.MutConstruct _, _)
-   | (_, C.MutConstruct _) -> 
-      if R.are_convertible context t1 t2 then
-       subst, metasenv
-      else
-       raise UnificationFailed
-   | (C.MutCase (_,_,outt1,t1,pl1), C.MutCase (_,_,outt2,t2,pl2))->
-       let subst', metasenv' = 
-        fo_unif_subst subst context metasenv outt1 outt2 in
-       let subst'',metasenv'' = 
-       fo_unif_subst subst' context metasenv' t1 t2 in
-       List.fold_left2 
-       (function (subst,metasenv) ->
-          fo_unif_subst subst context metasenv
-        ) (subst'',metasenv'') pl1 pl2 
-   | (C.Fix _, _)
-   | (_, C.Fix _) 
-   | (C.CoFix _, _)
-   | (_, C.CoFix _) -> 
-       if R.are_convertible context t1 t2 then
-        subst, metasenv
-       else
-        raise UnificationFailed
-   | (_,_) ->
-       if R.are_convertible context t1 t2 then
-        subst, metasenv
-       else
-        raise UnificationFailed
-
-and fo_unif_subst_exp_named_subst subst context metasenv
- exp_named_subst1 exp_named_subst2
-=
-try
- List.fold_left2
-  (fun (subst,metasenv) (uri1,t1) (uri2,t2) ->
-    assert (uri1=uri2) ;
-    fo_unif_subst subst context metasenv t1 t2
-  ) (subst,metasenv) exp_named_subst1 exp_named_subst2
-with
-e ->
-let uri = UriManager.uri_of_string "cic:/dummy.var" in
-prerr_endline ("@@@: " ^ CicPp.ppterm (Cic.Var (uri,exp_named_subst1)) ^
-" <==> " ^ CicPp.ppterm (Cic.Var (uri,exp_named_subst2))) ; raise e
-;;
-
-(*CSC: ???????????????
-(* m is the index of a metavariable to restrict, k is nesting depth
-of the occurrence m, and l is its relocation list. canonical_context
-is the context of the metavariable we are instantiating - containing
-m - Only rel in the domain of canonical_context are accessible.
-This function takes in input a metasenv and gives back a metasenv.
-A rel(j) in the canonical context of m, is rel(List.nth l j) for the 
-instance of m under consideration, that is rel (List.nth l j) - k 
-in canonical_context. *)
-
-let restrict canonical_context m k l =
-  let rec erase i = 
-    function
-       [] -> []
-      |        None::tl -> None::(erase (i+1) tl)
-      |        he::tl -> 
-         let i' = (List.nth l (i-1)) in
-         if i' <= k 
-          then he::(erase (i+1) tl) (* local variable *) 
-          else 
-           let acc = 
-             (try List.nth canonical_context (i'-k-1)
-              with Failure _ -> None) in
-           if acc = None 
-            then None::(erase (i+1) tl)
-            else he::(erase (i+1) tl) in
-  let rec aux =
-    function 
-       [] -> []
-      |        (n,context,t)::tl when n=m -> (n,erase 1 context,t)::tl
-      |        hd::tl -> hd::(aux tl)
-  in
-   aux
-;;
-
-
-let check_accessibility metasenv i =
-  let module C = Cic in
-  let module S = CicSubstitution in
-  let (_,canonical_context,_) = 
-    List.find (function (m,_,_) -> m=i) metasenv in
-   List.map
-    (function t ->
-      let =
-       delift canonical_context metasenv ? t
-    ) canonical_context
-CSCSCS
-
-
-
-  let rec aux metasenv k =
-    function
-      C.Rel i -> 
-       if i <= k then
-        metasenv
-       else 
-        (try
-          match List.nth canonical_context (i-k-1) with
-            Some (_,C.Decl t) 
-          | Some (_,C.Def t) -> aux metasenv k (S.lift i t)
-          | None -> raise RelToHiddenHypothesis
-          with
-           Failure _ -> raise OpenTerm
-        )
-    | C.Var _  -> metasenv
-    | C.Meta (i,l) -> restrict canonical_context i k l metasenv 
-    | C.Sort _ -> metasenv
-    | C.Implicit -> metasenv
-    | C.Cast (te,ty) -> 
-       let metasenv' = aux metasenv k te in
-       aux metasenv' k ty
-    | C.Prod (_,s,t) 
-    | C.Lambda (_,s,t) 
-    | C.LetIn (_,s,t) ->
-       let metasenv' = aux metasenv k s in
-       aux metasenv' (k+1) t
-    | C.Appl l ->
-       List.fold_left
-         (function metasenv -> aux metasenv k) metasenv l
-    | C.Const _
-    | C.MutInd _ 
-    | C.MutConstruct _ -> metasenv
-    | C.MutCase (_,_,_,outty,t,pl) ->
-       let metasenv' = aux metasenv k outty in
-       let metasenv'' = aux metasenv' k t in
-       List.fold_left
-         (function metasenv -> aux metasenv k) metasenv'' pl
-    | C.Fix (i, fl) ->
-       let len = List.length fl in
-       List.fold_left
-         (fun metasenv f ->
-          let (_,_,ty,bo) = f in
-          let metasenv' = aux metasenv k ty in
-          aux metasenv' (k+len) bo
-         ) metasenv fl
-    | C.CoFix (i, fl) ->
-       let len = List.length fl in
-        List.fold_left
-         (fun metasenv f ->
-          let (_,ty,bo) = f in
-          let metasenv' = aux metasenv k ty in
-          aux metasenv' (k+len) bo
-         ) metasenv fl
-  in aux metasenv 0
-;;
-*)
-
-
-let unwind metasenv subst unwinded t =
- let unwinded = ref unwinded in
- let frozen = ref [] in
- let rec um_aux metasenv =
-  let module C = Cic in
-  let module S = CicSubstitution in 
-   function
-      C.Rel _ as t -> t,metasenv
-    | C.Var _  as t -> t,metasenv
-    | C.Meta (i,l) -> 
-       (try
-          S.lift_meta l (List.assoc i !unwinded), metasenv
-         with Not_found ->
-           if List.mem i !frozen then raise OccurCheck
-           else
-            let saved_frozen = !frozen in 
-           frozen := i::!frozen ;
-            let res =
-             try
-             let t = List.assoc i subst in
-              let t',metasenv' = um_aux metasenv t in
-             let _,metasenv'' =
-               let (_,canonical_context,_) = 
-                List.find (function (m,_,_) -> m=i) metasenv
-               in
-                delift canonical_context metasenv' l t'
-              in
-               unwinded := (i,t')::!unwinded ;
-               S.lift_meta l t', metasenv'
-             with
-              Not_found ->
-               (* not constrained variable, i.e. free in subst*)
-               let l',metasenv' =
-                List.fold_right
-                (fun t (tl,metasenv) ->
-                   match t with
-                      None -> None::tl,metasenv
-                    | Some t -> 
-                      let t',metasenv' = um_aux metasenv t in
-                       (Some t')::tl, metasenv'
-                ) l ([],metasenv)
-               in
-                C.Meta (i,l'), metasenv'
-            in
-            frozen := saved_frozen ;
-            res
-        ) 
-    | C.Sort _
-    | C.Implicit as t -> t,metasenv
-    | C.Cast (te,ty) ->
-       let te',metasenv' = um_aux metasenv te in
-       let ty',metasenv'' = um_aux metasenv' ty in
-       C.Cast (te',ty'),metasenv''
-    | C.Prod (n,s,t) ->
-       let s',metasenv' = um_aux metasenv s in
-       let t',metasenv'' = um_aux metasenv' t in
-       C.Prod (n, s', t'), metasenv''
-    | C.Lambda (n,s,t) ->
-       let s',metasenv' = um_aux metasenv s in
-       let t',metasenv'' = um_aux metasenv' t in
-       C.Lambda (n, s', t'), metasenv''
-    | C.LetIn (n,s,t) ->
-       let s',metasenv' = um_aux metasenv s in
-       let t',metasenv'' = um_aux metasenv' t in
-       C.LetIn (n, s', t'), metasenv''
-    | C.Appl (he::tl) ->
-       let tl',metasenv' =
-        List.fold_right
-        (fun t (tl,metasenv) ->
-          let t',metasenv' = um_aux metasenv t in
-           t'::tl, metasenv'
-        ) tl ([],metasenv)
-       in
-        begin
-         match um_aux metasenv' he with
-            (C.Appl l, metasenv'') -> C.Appl (l@tl'),metasenv''
-          | (he', metasenv'') -> C.Appl (he'::tl'),metasenv''
-        end
-    | C.Appl _ -> assert false
-    | C.Const (uri,exp_named_subst) ->
-       let exp_named_subst', metasenv' =
-        List.fold_right
-        (fun (uri,t) (tl,metasenv) ->
-          let t',metasenv' = um_aux metasenv t in
-           (uri,t')::tl, metasenv'
-        ) exp_named_subst ([],metasenv)
-       in
-        C.Const (uri,exp_named_subst'),metasenv'
-    | C.MutInd (uri,typeno,exp_named_subst) ->
-       let exp_named_subst', metasenv' =
-        List.fold_right
-        (fun (uri,t) (tl,metasenv) ->
-          let t',metasenv' = um_aux metasenv t in
-           (uri,t')::tl, metasenv'
-        ) exp_named_subst ([],metasenv)
-       in
-        C.MutInd (uri,typeno,exp_named_subst'),metasenv'
-    | C.MutConstruct (uri,typeno,consno,exp_named_subst) ->
-       let exp_named_subst', metasenv' =
-        List.fold_right
-        (fun (uri,t) (tl,metasenv) ->
-          let t',metasenv' = um_aux metasenv t in
-           (uri,t')::tl, metasenv'
-        ) exp_named_subst ([],metasenv)
-       in
-        C.MutConstruct (uri,typeno,consno,exp_named_subst'),metasenv'
-    | C.MutCase (sp,i,outty,t,pl) ->
-       let outty',metasenv' = um_aux metasenv outty in
-       let t',metasenv'' = um_aux metasenv' t in
-       let pl',metasenv''' =
-        List.fold_right
-        (fun p (pl,metasenv) ->
-          let p',metasenv' = um_aux metasenv p in
-           p'::pl, metasenv'
-        ) pl ([],metasenv'')
-       in
-        C.MutCase (sp, i, outty', t', pl'),metasenv'''
-    | C.Fix (i, fl) ->
-       let len = List.length fl in
-       let liftedfl,metasenv' =
-        List.fold_right
-         (fun (name, i, ty, bo) (fl,metasenv) ->
-          let ty',metasenv' = um_aux metasenv ty in
-          let bo',metasenv'' = um_aux metasenv' bo in
-           (name, i, ty', bo')::fl,metasenv''
-        ) fl ([],metasenv)
-       in
-        C.Fix (i, liftedfl),metasenv'
-    | C.CoFix (i, fl) ->
-       let len = List.length fl in
-       let liftedfl,metasenv' =
-        List.fold_right
-         (fun (name, ty, bo) (fl,metasenv) ->
-          let ty',metasenv' = um_aux metasenv ty in
-          let bo',metasenv'' = um_aux metasenv' bo in
-           (name, ty', bo')::fl,metasenv''
-        ) fl ([],metasenv)
-       in
-        C.CoFix (i, liftedfl),metasenv'
- in
-  let t',metasenv' = um_aux metasenv t in
-   t',metasenv',!unwinded 
-;;
-
-(* apply_subst_reducing subst (Some (mtr,reductions_no)) t              *)
-(* performs as (apply_subst subst t) until it finds an application of   *)
-(* (META [meta_to_reduce]) that, once unwinding is performed, creates   *)
-(* a new beta-redex; in this case up to [reductions_no] consecutive     *)
-(* beta-reductions are performed.                                       *)
-(* Hint: this function is usually called when [reductions_no]           *)
-(*  eta-expansions have been performed and the head of the new          *)
-(*  application has been unified with (META [meta_to_reduce]):          *)
-(*  during the unwinding the eta-expansions are undone.                 *)
-
-let apply_subst_reducing subst meta_to_reduce t =
- let unwinded = ref subst in
- let rec um_aux =
-  let module C = Cic in
-  let module S = CicSubstitution in 
-   function
-      C.Rel _
-    | C.Var _  as t -> t
-    | C.Meta (i,l) as t ->
-       (try
-         S.lift_meta l (List.assoc i !unwinded)
-        with Not_found ->
-          C.Meta (i,l))
-    | C.Sort _ as t -> t
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) -> C.Cast (um_aux te, um_aux ty)
-    | C.Prod (n,s,t) -> C.Prod (n, um_aux s, um_aux t)
-    | C.Lambda (n,s,t) -> C.Lambda (n, um_aux s, um_aux t)
-    | C.LetIn (n,s,t) -> C.LetIn (n, um_aux s, um_aux t)
-    | C.Appl (he::tl) ->
-       let tl' = List.map um_aux tl in
-        let t' =
-         match um_aux he with
-            C.Appl l -> C.Appl (l@tl')
-          | _ as he' -> C.Appl (he'::tl')
-        in
-         begin
-          match meta_to_reduce,he with
-             Some (mtr,reductions_no), C.Meta (m,_) when m = mtr ->
-              let rec beta_reduce =
-               function
-                  (n,(C.Appl (C.Lambda (_,_,t)::he'::tl'))) when n > 0 ->
-                    let he'' = CicSubstitution.subst he' t in
-                     if tl' = [] then
-                      he''
-                     else
-                      beta_reduce (n-1,C.Appl(he''::tl'))
-                | (_,t) -> t
-              in
-               beta_reduce (reductions_no,t')
-           | _,_ -> t'
-         end
-    | C.Appl _ -> assert false
-    | C.Const (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> (uri,um_aux t)) exp_named_subst
-       in
-        C.Const (uri,exp_named_subst')
-    | C.MutInd (uri,typeno,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> (uri,um_aux t)) exp_named_subst
-       in
-        C.MutInd (uri,typeno,exp_named_subst')
-    | C.MutConstruct (uri,typeno,consno,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> (uri,um_aux t)) exp_named_subst
-       in
-        C.MutConstruct (uri,typeno,consno,exp_named_subst')
-    | C.MutCase (sp,i,outty,t,pl) ->
-       C.MutCase (sp, i, um_aux outty, um_aux t,
-        List.map um_aux pl)
-    | C.Fix (i, fl) ->
-       let len = List.length fl in
-       let liftedfl =
-        List.map
-         (fun (name, i, ty, bo) -> (name, i, um_aux ty, um_aux bo))
-          fl
-       in
-        C.Fix (i, liftedfl)
-    | C.CoFix (i, fl) ->
-       let len = List.length fl in
-       let liftedfl =
-        List.map
-         (fun (name, ty, bo) -> (name, um_aux ty, um_aux bo))
-          fl
-       in
-        C.CoFix (i, liftedfl)
- in
-   um_aux t
-;;
-
-(* UNWIND THE MGU INSIDE THE MGU *)
-let unwind_subst metasenv subst =
- let identity_relocation_list_for_metavariable i =
-  let (_,canonical_context,_) =
-   List.find (function (m,_,_) -> m=i) metasenv
-  in
-   let canonical_context_length = List.length canonical_context in
-    let rec aux =
-     function
-        n when n > canonical_context_length -> []
-      | n -> (Some (Cic.Rel n))::(aux (n+1))
-    in
-     aux 1
- in
-  List.fold_left
-   (fun (unwinded,metasenv) (i,_) ->
-     let identity_relocation_list =
-      identity_relocation_list_for_metavariable i
-     in
-      let (_,metasenv',subst') =
-       unwind metasenv subst unwinded (Cic.Meta (i,identity_relocation_list))
-      in
-       subst',metasenv'
-   ) ([],metasenv) subst
-;;
-
-let apply_subst subst t = 
- (* metasenv will not be used nor modified. So, let's use a dummy empty one *)
- let metasenv = [] in
-  let (t',_,_) = unwind metasenv [] subst t in
-   t'
-;;
-
-(* A substitution is a (int * Cic.term) list that associates a               *)
-(* metavariable i with its body.                                             *)
-(* metasenv is of type Cic.metasenv                                          *)
-(* fo_unif takes a metasenv, a context, two terms t1 and t2 and gives back   *)
-(* a new substitution which is already unwinded and ready to be applied and  *)
-(* a new metasenv in which some hypothesis in the contexts of the            *)
-(* metavariables may have been restricted.                                   *)
-let fo_unif metasenv context t1 t2 =
-prerr_endline "INIZIO FASE 1" ; flush stderr ;
- let subst_to_unwind,metasenv' = fo_unif_subst [] context metasenv t1 t2 in
-prerr_endline "FINE FASE 1" ; flush stderr ;
-let res =
-  unwind_subst metasenv' subst_to_unwind
-in
-prerr_endline "FINE FASE 2" ; flush stderr ; res
-;;
diff --git a/helm/ocaml/cic_unification/cicUnification.mli b/helm/ocaml/cic_unification/cicUnification.mli
deleted file mode 100644 (file)
index 30094f7..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception UnificationFailed
-exception Free
-exception OccurCheck
-
-val delift : 
- Cic.context -> Cic.metasenv -> (Cic.term option) list -> Cic.term -> Cic.term * Cic.metasenv
-
-(* The entry (i,t) in a substitution means that *)
-(* (META i) have been instantiated with t.      *)
-type substitution = (int * Cic.term) list
-
-(* fo_unif metasenv context t1 t2                *)
-(* unifies [t1] and [t2] in a context [context]. *)
-(* Only the metavariables declared in [metasenv] *)
-(* can be used in [t1] and [t2].                 *)
-(* The returned substitution can be directly     *)
-(* withouth first unwinding it.                  *)
-val fo_unif :
-  Cic.metasenv -> Cic.context -> Cic.term -> Cic.term ->
-   substitution * Cic.metasenv
-
-(* fo_unif_subst metasenv subst context t1 t2    *)
-(* unifies [t1] and [t2] in a context [context]  *)
-(* and with [subst] as the current substitution  *)
-(* (i.e. unifies ([subst] [t1]) and              *)
-(* ([subst] [t2]) in a context                   *)
-(* ([subst] [context]) using the metasenv        *)
-(* ([subst] [metasenv])                          *)
-(* Only the metavariables declared in [metasenv] *)
-(* can be used in [t1] and [t2].                 *)
-(* [subst] and the substitution returned are not *)
-(* unwinded.                                     *)
-(*CSC: fare un tipo unione Unwinded o ToUnwind e fare gestire la
- cosa all'apply_subst!!!*)
-val fo_unif_subst :
-  substitution -> Cic.context -> Cic.metasenv -> Cic.term -> Cic.term ->
-   substitution * Cic.metasenv
-
-(* unwind_subst metasenv subst                         *)
-(* unwinds [subst] w.r.t. itself.                      *)
-(* It can restrict some metavariable in the [metasenv] *)
-val unwind_subst : Cic.metasenv -> substitution -> substitution * Cic.metasenv
-
-(* apply_subst subst t                     *)
-(* applies the substitution [subst] to [t] *)
-(* [subst] must be already unwinded        *)
-val apply_subst : substitution -> Cic.term -> Cic.term
-
-(* apply_subst_reducing subst (Some (mtr,reductions_no)) t              *)
-(* performs as (apply_subst subst t) until it finds an application of   *)
-(* (META [mtr]) that, once unwinding is performed, creates a new        *)
-(* beta-redex; in this case up to [reductions_no] consecutive           *)
-(* beta-reductions are performed.                                       *)
-(* Hint: this function is usually called when [reductions_no]           *)
-(*  eta-expansions have been performed and the head of the new          *)
-(*  application has been unified with (META [meta_to_reduce]):          *)
-(*  during the unwinding the eta-expansions are undone.                 *)
-(* [subst] must be already unwinded                                     *)
-val apply_subst_reducing :
- substitution -> (int * int) option -> Cic.term -> Cic.term
diff --git a/helm/ocaml/configure.in b/helm/ocaml/configure.in
deleted file mode 100644 (file)
index d586e33..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-AC_INIT(Makefile.in)
-
-AC_CHECK_PROG(HAVE_OCAMLC, ocamlc, yes, no)
-if test $HAVE_OCAMLC = "no"; then
-  AC_MSG_ERROR(could not find ocamlc in PATH, please make sure ocaml is installed)
-fi
-
-AC_CHECK_PROG(HAVE_OCAMLFIND, ocamlfind, yes, no)
-if test $HAVE_OCAMLFIND = "no"; then
-  AC_MSG_ERROR(could not find ocamlfind in PATH, please make sure findlib is installed)
-fi
-
-AC_MSG_CHECKING("where to install the library")
-OCAMLFIND_DEST_DIR="/public/sacerdot/prova"
-AC_MSG_RESULT($OCAMLFIND_DEST_DIR)
-
-AC_MSG_CHECKING("where to install the META files")
-OCAMLFIND_META_DIR="/public/sacerdot/prova/META"
-AC_MSG_RESULT($OCAMLFIND_META_DIR)
-
-AC_SUBST(OCAMLFIND_DEST_DIR)
-AC_SUBST(OCAMLFIND_META_DIR)
-
-AC_OUTPUT([
-  Makefile
-  Makefile.common
-])
diff --git a/helm/ocaml/getter/.cvsignore b/helm/ocaml/getter/.cvsignore
deleted file mode 100644 (file)
index 6b3eba3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa
diff --git a/helm/ocaml/getter/.depend b/helm/ocaml/getter/.depend
deleted file mode 100644 (file)
index c51f1a8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-configuration.cmo: configuration.cmi 
-configuration.cmx: configuration.cmi 
-clientHTTP.cmo: clientHTTP.cmi 
-clientHTTP.cmx: clientHTTP.cmi 
-getter.cmo: clientHTTP.cmi configuration.cmi getter.cmi 
-getter.cmx: clientHTTP.cmx configuration.cmx getter.cmi 
diff --git a/helm/ocaml/getter/Makefile b/helm/ocaml/getter/Makefile
deleted file mode 100644 (file)
index 576b046..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-PACKAGE = getter
-REQUIRES = pxp netclient helm-urimanager
-PREDICATES =
-
-INTERFACE_FILES = configuration.mli clientHTTP.mli getter.mli
-IMPLEMENTATION_FILES = $(INTERFACE_FILES:%.mli=%.ml)
-EXTRA_OBJECTS_TO_INSTALL =
-EXTRA_OBJECTS_TO_CLEAN =
-
-include ../Makefile.common
diff --git a/helm/ocaml/getter/clientHTTP.ml b/helm/ocaml/getter/clientHTTP.ml
deleted file mode 100644 (file)
index 2444bde..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception HttpClientError of exn * string;;
-
-let send cmd =
- try
-  ignore (Http_client.Convenience.http_get cmd)
- with
-  e -> raise (HttpClientError (e,cmd))
-;;
-
-let get uri =
- try
-  Http_client.Convenience.http_get uri
- with
-  e -> raise (HttpClientError (e,uri))
-;;
-
-let get_and_save uri dest_filename =
- let reply = get uri
- and out_channel = open_out dest_filename in
-  output_string out_channel reply ;
-  close_out out_channel
-;;
-
-let get_and_save_to_tmp uri =
- let flat_string s s' c =
-  let cs = String.copy s in
-   for i = 0 to (String.length s) - 1 do
-    if String.contains s' s.[i] then cs.[i] <- c
-   done ;
-   cs
- in
-  let user = try Unix.getlogin () with _ -> "" in
-  let tmp_file =
-    Filename.temp_file (user ^ flat_string uri ".-=:;!?/&" '_') ""
-  in
-  get_and_save uri tmp_file ;
-  tmp_file
-;;
-
diff --git a/helm/ocaml/getter/clientHTTP.mli b/helm/ocaml/getter/clientHTTP.mli
deleted file mode 100644 (file)
index 59587ed..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception HttpClientError of exn * string;;
-val send : string -> unit
-val get : string -> string
-val get_and_save : string -> string -> unit
-val get_and_save_to_tmp : string -> string
diff --git a/helm/ocaml/getter/configuration.ml b/helm/ocaml/getter/configuration.ml
deleted file mode 100644 (file)
index 1eb4ab6..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 28/12/2000                                 *)
-(*                                                                            *)
-(* This is the parser that reads the configuration file of helm               *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception MalformedDir of string
-
-(* this should be the only hard coded constant *)
-let filename =
- let prefix =
-  try
-   Sys.getenv "HELM_CONFIGURATION_DIR"
-  with
-   Not_found -> "/projects/helm/V7/phd/local/etc/helm"
- in
-  if prefix.[(String.length prefix) - 1] = '/' then
-   raise (MalformedDir prefix) ;
-  prefix ^ "/configuration.xml";;
-
-exception Warnings;;
-
-class warner =
-  object 
-    method warn w =
-      print_endline ("WARNING: " ^ w) ;
-      (raise Warnings : unit)
-  end
-;;
-
-let xml_document () =
- let error e =
-  prerr_endline ("Warning: configuration file not found, or incorrect: " ^
-   Pxp_types.string_of_exn e) ;
-  None
- in
- let module Y = Pxp_yacc in
-  try 
-   let config = {Y.default_config with Y.warner = new warner} in
-    Some (Y.parse_document_entity config (Y.from_file filename) Y.default_spec)
-  with
-   | (Pxp_types.Error _) as e -> error e
-   | (Pxp_types.At _) as e -> error e
-   | (Pxp_types.Validation_error _) as e -> error e
-   | (Pxp_types.WF_error _) as e -> error e
-   | (Pxp_types.Namespace_error _) as e -> error e
-   | (Pxp_types.Character_not_supported) as e -> error e
-;;
-
-exception Impossible;;
-
-let vars = Hashtbl.create 14;;
-
-(* resolve <value-of> tags and returns the string values of the variable tags *)
-let rec resolve =
- let module D = Pxp_document in
-  function
-     [] -> ""
-   | he::tl when he#node_type = D.T_element "value-of" ->
-      (match he#attribute "var" with
-          Pxp_types.Value var -> Hashtbl.find vars var
-        | _ -> raise Impossible
-      ) ^ resolve tl
-   | he::tl when he#node_type = D.T_data ->
-      he#data ^ resolve tl
-   | _ -> raise Impossible
-;;
-
-(* we trust the xml file to be valid because of the validating xml parser *)
-let _ =
- match xml_document () with
-    None -> ()
-  | Some d ->
-     List.iter
-      (function
-          n ->
-           match n#node_type with
-              Pxp_document.T_element var ->
-               Hashtbl.add vars var (resolve (n#sub_nodes))
-            | _ -> raise Impossible
-      )
-      (d#root#sub_nodes)
-;;
-
-(* try to read a configuration variable, given its name into the
- * configuration.xml file and its name into the shell environment.
- * The shell variable, if present, has precedence over configuration.xml
- *)
-let read_configuration_var_env xml_name env_name =
- try
-  try
-   Sys.getenv env_name
-  with
-   Not_found -> Hashtbl.find vars xml_name
- with
-  Not_found ->
-   Printf.printf "Sorry, cannot find variable `%s', please check your configuration\n" xml_name ;
-   flush stdout ;
-   raise Not_found
-
-let read_configuration_var xml_name =
- try
-  Hashtbl.find vars xml_name
- with
-  Not_found ->
-   Printf.printf "Sorry, cannot find variable `%s', please check your configuration\n" xml_name ;
-   flush stdout ;
-   raise Not_found
-
-(* Zack: no longer used *)
-(* let tmp_dir       = read_configuration_var_env "tmp_dir" "HELM_TMP_DIR";; *)
-let getter_url    = read_configuration_var_env "getter_url" "HELM_GETTER_URL";;
-let processor_url = read_configuration_var_env "processor_url" "HELM_PROCESSOR_URL";;
-let annotations_dir = read_configuration_var_env "annotations_dir" "HELM_ANNOTATIONS_DIR"
-let annotations_url = read_configuration_var_env "annotations_url" "HELM_ANNOTATIONS_URL"
-
-let _ = Hashtbl.clear vars;;
diff --git a/helm/ocaml/getter/configuration.mli b/helm/ocaml/getter/configuration.mli
deleted file mode 100644 (file)
index 20daaa4..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 29/11/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* Zack: no longer needed *)
-(* val tmp_dir : string *)
-val getter_url : string
-val processor_url : string
-val annotations_dir : string
-val annotations_url : string
diff --git a/helm/ocaml/getter/getter.ml b/helm/ocaml/getter/getter.ml
deleted file mode 100644 (file)
index c1ba010..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(******************************************************************************)
-
-let getter_url = ref Configuration.getter_url;;
-
-let update () =
- (* deliver update request to http_getter *)
- ClientHTTP.send (!getter_url ^ "update")
-;;
-
-type format =
-   Normal
- | GZipped
-;;
-
-let getxml ?(format=Normal) ?(patchdtd=true) uri =
- (* deliver getxml request to http_getter *)
- ClientHTTP.get_and_save_to_tmp
-  (!getter_url ^ "getxml" ^
-    "?uri=" ^ UriManager.string_of_uri uri ^
-    "&format=" ^ (match format with Normal -> "normal" | GZipped -> "gzipped") ^
-    "&patch_dtd=" ^ (match patchdtd with true -> "yes" | false -> "no")
-  )
-;;
-
-let register uri url =
- (* deliver register request to http_getter *)
- ClientHTTP.send
-  (!getter_url ^ "register" ^
-    "?uri=" ^ (UriManager.string_of_uri uri) ^
-    "&url=" ^ url)
-;;
-
-exception Unresolved;;
-exception UnexpectedGetterOutput;;
-
-(* resolve_result is needed because it is not possible to raise *)
-(* an exception in a pxp even-processing callback. Too bad.     *)
-type resolve_result =
-   Unknown
- | Exception of exn
- | Resolved of string
-
-let resolve uri =
- (* deliver resolve request to http_getter *)
- let doc =
-  ClientHTTP.get
-   (!getter_url ^ "resolve" ^ "?uri=" ^ (UriManager.string_of_uri uri))
- in
-  let res = ref Unknown in
-   Pxp_yacc.process_entity Pxp_yacc.default_config (`Entry_content [])
-    (Pxp_yacc.create_entity_manager ~is_document:true Pxp_yacc.default_config
-     (Pxp_yacc.from_string doc))
-    (function
-        Pxp_yacc.E_start_tag ("url",["value",url],_) -> res := Resolved url
-      | Pxp_yacc.E_start_tag ("unresolved",[],_) -> res := Exception Unresolved
-      | Pxp_yacc.E_start_tag _ -> res := Exception UnexpectedGetterOutput
-      | _ -> ()
-    ) ;
-   match !res with
-      Unknown -> raise UnexpectedGetterOutput
-    | Exception e -> raise e
-    | Resolved url -> url
-;;
diff --git a/helm/ocaml/getter/getter.mli b/helm/ocaml/getter/getter.mli
deleted file mode 100644 (file)
index 3fbec80..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 24/01/2000                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* THE URL OF THE HTTP GETTER *)
-val getter_url : string ref
-
-(* SIMPLE BINDINGS TO THE HTTP GETTER *)
-(* synchronize with the servers *)
-val update : unit -> unit
-
-type format =
-   Normal
- | GZipped
-;;
-
-(* get the xml file                              *)
-(* defaults: format = Normal and patchdtd = true *)
-val getxml : ?format:format -> ?patchdtd:bool -> UriManager.uri -> string
-
-(* adds an (URI -> URL) entry in the map from URIs to URLs *)
-val register : UriManager.uri -> string -> unit
-
-exception Unresolved
-exception UnexpectedGetterOutput
-
-(* resolves an URI to its corresponding URL.                  *)
-(* Unresolved is raised if there is no URL for the given URI. *)
-(* UnexceptedGetterOutput is raised if the output of the real *)
-(*  getter has not the expected format.                       *)
-val resolve: UriManager.uri -> string 
diff --git a/helm/ocaml/mathql/.cvsignore b/helm/ocaml/mathql/.cvsignore
deleted file mode 100644 (file)
index cd9b591..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa mQueryTLexer.ml mQueryTParser.ml mQueryTParser.mli
diff --git a/helm/ocaml/mathql/.depend b/helm/ocaml/mathql/.depend
deleted file mode 100644 (file)
index 769e30c..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-mQueryTParser.cmi: mathQL.cmo 
-mQueryUtil.cmi: mathQL.cmo 
-mQueryTParser.cmo: mathQL.cmo mQueryTParser.cmi 
-mQueryTParser.cmx: mathQL.cmx mQueryTParser.cmi 
-mQueryTLexer.cmo: mQueryTParser.cmi 
-mQueryTLexer.cmx: mQueryTParser.cmx 
-mQueryUtil.cmo: mQueryTLexer.cmo mQueryTParser.cmi mathQL.cmo mQueryUtil.cmi 
-mQueryUtil.cmx: mQueryTLexer.cmx mQueryTParser.cmx mathQL.cmx mQueryUtil.cmi 
diff --git a/helm/ocaml/mathql/Makefile b/helm/ocaml/mathql/Makefile
deleted file mode 100644 (file)
index 6d54819..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-PACKAGE = mathql
-REQUIRES =  helm-urimanager
-PREDICATES =
-
-INTERFACE_FILES = mQueryTParser.mli mQueryUtil.mli
-
-IMPLEMENTATION_FILES = mathQL.ml mQueryTParser.ml mQueryTLexer.ml \
-                      mQueryUtil.ml 
-
-EXTRA_OBJECTS_TO_INSTALL = mathQL.ml mathQL.cmi mQueryTLexer.cmi \
-                          mQueryTLexer.mll mQueryTParser.mly
-
-EXTRA_OBJECTS_TO_CLEAN = mQueryTParser.ml mQueryTParser.mli \
-                        mQueryTLexer.ml
-
-include ../Makefile.common
diff --git a/helm/ocaml/mathql/mQueryTLexer.mll b/helm/ocaml/mathql/mQueryTLexer.mll
deleted file mode 100644 (file)
index abccb46..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-{ 
-   open MQueryTParser
-   
-   let debug = false
-   
-   let out s = if debug then prerr_endline s
-}
-
-let SPC   = [' ' '\t' '\n']+
-let ALPHA = ['A'-'Z' 'a'-'z' '_']
-let NUM   = ['0'-'9']
-let IDEN  = ALPHA (NUM | ALPHA)*
-let QSTR  = [^ '"' '\\']+
-
-rule comm_token = parse
-   | "(*"         { comm_token lexbuf; comm_token lexbuf }
-   | "*)"         { () }
-   | ['*' '(']    { comm_token lexbuf }
-   | [^ '*' '(']* { comm_token lexbuf }  
-and string_token = parse
-   | '"'         { DQ  }
-   | '\\' _      { STR (String.sub (Lexing.lexeme lexbuf) 1 1) }
-   | QSTR        { STR (Lexing.lexeme lexbuf) }
-   | eof         { EOF }
-and query_token = parse
-   | "(*"        { comm_token lexbuf; query_token lexbuf }
-   | SPC         { query_token lexbuf }
-   | '"'         { let str = qstr string_token lexbuf in
-                   out ("STR " ^ str); STR str }
-   | '('         { out "LP"; LP }
-   | ')'         { out "RP"; RP }
-   | '{'         { out "LC"; LC }
-   | '}'         { out "RC"; RC }
-   | '@'         { out "AT"; AT }
-   | '%'         { out "PC"; PC }
-   | '$'         { out "DL"; DL }
-   | '.'         { out "FS"; FS }
-   | ','         { out "CM"; CM }
-   | ';'         { out "SC"; SC }
-   | '/'         { out "SL"; SL }
-   | "add"       { out "ADD"   ; ADD    }
-   | "align"     { out "ALIGN" ; ALIGN  }
-   | "allbut"    { out "BUT"   ; BUT    }
-   | "and"       { out "AND"   ; AND    }
-   | "as"        { out "AS"    ; AS     }
-   | "attr"      { out "ATTR"  ; ATTR   }
-   | "be"        { out "BE"    ; BE     }
-   | "count"     { out "COUNT" ; COUNT  }
-   | "diff"      { out "DIFF"  ; DIFF   }
-   | "distr"     { out "DISTR" ; DISTR  }
-   | "else"      { out "ELSE"  ; ELSE   }
-   | "empty"     { out "EMPTY" ; EMPTY  }
-   | "eq"        { out "EQ"    ; EQ     }
-   | "ex"        { out "EX"    ; EX     }
-   | "false"     { out "FALSE" ; FALSE  }
-   | "for"       { out "FOR"   ; FOR    }
-   | "from"      { out "FROM"  ; FROM   }
-   | "if"        { out "IF"    ; IF     }
-   | "in"        { out "IN"    ; IN     }
-   | "inf"       { out "INF"   ; INF    }   
-   | "intersect" { out "INTER" ; INTER  }
-   | "inverse"   { out "INV"   ; INV    }   
-   | "istrue"    { out "IST"   ; IST    }
-   | "isfalse"   { out "ISF"   ; ISF    }
-   | "keep"      { out "KEEP"  ; KEEP   }
-   | "le"        { out "LE"    ; LE     }
-   | "let"       { out "LET"   ; LET    }
-   | "log"       { out "LOG"   ; LOG    }
-   | "lt"        { out "LT"    ; LT     }
-   | "main"      { out "MAIN"  ; MAIN   }
-   | "match"     { out "MATCH" ; MATCH  }
-   | "meet"      { out "MEET"  ; MEET   }
-   | "not"       { out "NOT"   ; NOT    }
-   | "of"        { out "OF"    ; OF     }
-   | "or"        { out "OR"    ; OR     }
-   | "pattern"   { out "PAT"   ; PAT    }
-   | "proj"      { out "PROJ"  ; PROJ   }
-   | "property"  { out "PROP"  ; PROP   }
-   | "select"    { out "SELECT"; SELECT }
-   | "source"    { out "SOURCE"; SOURCE }
-   | "stat"      { out "STAT"  ; STAT   }
-   | "sub"       { out "SUB"   ; SUB    }
-   | "subj"      { out "SUBJ"  ; SUBJ   }
-   | "sup"       { out "SUP"   ; SUP    }
-   | "super"     { out "SUPER" ; SUPER  }
-   | "then"      { out "THEN"  ; THEN   }
-   | "true"      { out "TRUE"  ; TRUE   }
-   | "union"     { out "UNION" ; UNION  }
-   | "where"     { out "WHERE" ; WHERE  }
-   | "xor"       { out "XOR"   ; XOR    }
-   | IDEN        { let id = Lexing.lexeme lexbuf in 
-                   out ("ID " ^ id); ID id }
-   | eof         { out "EOF"   ; EOF    }
-and result_token = parse
-   | SPC         { result_token lexbuf }
-   | "(*"        { comm_token lexbuf; result_token lexbuf }
-   | '"'         { STR (qstr string_token lexbuf) }
-   | '{'         { LC }
-   | '}'         { RC }
-   | ','         { CM }
-   | ';'         { SC }
-   | '='         { IS }
-   | "attr"      { ATTR }
-   | eof         { EOF  }
diff --git a/helm/ocaml/mathql/mQueryTParser.mly b/helm/ocaml/mathql/mQueryTParser.mly
deleted file mode 100644 (file)
index 313636c..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-/* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- */
-
-/*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- */ 
-
-%{
-   module M = MathQL
-
-   let analyze x =
-      let rec join l1 l2 = match l1, l2 with
-         | [], _                           -> l2
-         | _, []                           -> l1
-         | s1 :: tl1, s2 :: _ when s1 < s2 -> s1 :: join tl1 l2
-         | s1 :: _, s2 :: tl2 when s2 < s1 -> s2 :: join l1 tl2
-         | s1 :: tl1, s2 :: tl2            -> s1 :: join tl1 tl2 
-      in
-      let rec iter f = function
-         | []  -> []
-        | head :: tail -> join (f head) (iter f tail)
-      in
-      let rec an_val = function
-        | M.True       -> []
-        | M.False      -> []
-         | M.Const _    -> []
-         | M.VVar _     -> []
-         | M.Ex _       -> []
-         | M.Dot rv _   -> [rv]
-         | M.Not x      -> an_val x
-         | M.StatVal x  -> an_val x
-        | M.Count x    -> an_val x
-        | M.Align _ x  -> an_val x
-         | M.Proj _ x   -> an_set x
-         | M.Test _ x y -> iter an_val [x; y]
-        | M.Set l      -> iter an_val l
-      and an_set = function
-        | M.Empty                      -> []
-         | M.SVar _                     -> []
-         | M.AVar _                     -> []
-         | M.Subj x                     -> an_val x
-        | M.Keep _ _ x                 -> an_set x
-        | M.Log _ _ x                  -> an_set x
-        | M.StatQuery x                -> an_set x
-         | M.Bin _ x y                  -> iter an_set [x; y]
-         | M.LetSVar _ x y              -> iter an_set [x; y]
-         | M.For _ _ x y                -> iter an_set [x; y]
-        | M.Add _ g x                  -> join (an_grp g) (an_set x)
-         | M.LetVVar _ x y              -> join (an_val x) (an_set y)
-         | M.Select _ x y               -> join (an_set x) (an_val y)
-         | M.Property _ _ _ _ c d _ _ x -> 
-           join (an_val x) (iter an_con [c; List.concat d])
-        | M.If x y z                   -> join (an_val x) (iter an_set [y; z])
-      and fc (_, _, v) = an_val v 
-      and an_con c = iter fc c
-      and fg (_, v) = an_val v
-      and an_grp = function
-         | M.Attr g -> iter (iter fg) g
-        | M.From _ -> [] 
-      in
-      an_val x
-      
-   let f (x, y, z) = x
-   let s (x, y, z) = y
-   let t (x, y, z) = z
-%}
-   %token    <string> ID STR
-   %token    SL IS LC RC CM SC LP RP AT PC DL FS DQ EOF 
-   %token    ADD ALIGN AND AS ATTR BE BUT COUNT DIFF DISTR ELSE EMPTY EQ EX  
-   %token    FALSE FOR FROM IF IN INF INTER INV ISF IST KEEP LE LET LOG LT   
-   %token    MAIN MATCH MEET NOT OF OR PAT PROJ PROP SELECT SOURCE STAT SUB 
-   %token    SUBJ SUP SUPER THEN TRUE UNION WHERE XOR
-   %nonassoc IN SUP INF ELSE LOG STAT 
-   %left     DIFF   
-   %left     UNION
-   %left     INTER
-   %nonassoc WHERE EX
-   %left     XOR OR
-   %left     AND
-   %nonassoc NOT 
-   %nonassoc SUB MEET EQ LT LE
-   %nonassoc SUBJ OF PROJ COUNT ALIGN
-   
-   %start    qstr query result
-   %type     <string>        qstr      
-   %type     <MathQL.query>  query
-   %type     <MathQL.result> result 
-%%
-   qstr:
-      | DQ       { ""      }
-      | STR qstr { $1 ^ $2 }
-   ;
-   svar:
-      | PC ID { $2 }
-   ;
-   avar:
-      | AT ID { $2 }
-   ;
-   vvar:
-      | DL ID { $2 }
-   ;
-   strs:
-      | STR CM strs { $1 :: $3 }
-      | STR         { [$1]     } 
-   ;
-   subpath:
-      | STR SL subpath { $1 :: $3 }
-      | STR            { [$1]     } 
-   ;
-   path:
-      | subpath    { $1 }
-      | SL subpath { $2 }
-      | SL         { [] }
-   ;   
-   paths:
-      | path CM paths { $1 :: $3 }
-      | path          { [$1]     }
-   inv:
-      | INV { true  }
-      |     { false }
-   ;
-   ref:
-      | SUB   { M.RefineSub   }
-      | SUPER { M.RefineSuper }
-      |       { M.RefineExact }
-   ;
-   qualif:
-      | inv ref path { $1, $2, $3 } 
-   ;
-   cons:
-      | path IN val_exp    { (false, $1, $3) }
-      | path MATCH val_exp { (true, $1, $3)  }
-   ;
-   conss:
-      | cons CM conss { $1 :: $3 }
-      | cons          { [$1]     }
-   ;
-   istrue:
-      | IST conss { $2 }
-      |           { [] }
-   ;
-   isfalse:
-      |                   { []       }
-      | ISF conss isfalse { $2 :: $3 }
-   ;
-   mainc: 
-      | MAIN path { $2 }
-      |           { [] }
-   ;
-   exp:
-      | path AS path { $1, Some $3 }
-      | path         { $1, None    }
-   ;
-   exps:
-      | exp CM exps { $1 :: $3 }
-      | exp         { [$1]     }
-   ;   
-   attrc:
-      | ATTR exps { $2 }
-      |           { [] }
-   ;
-   pattern:
-      | PAT { true  }
-      |     { false }
-   ;
-   opt_path:
-      | path { Some $1 }
-      |      { None    }
-   ;
-   ass:
-      | val_exp AS path { ($3, $1) }
-   ;
-   asss:
-      | ass CM asss { $1 :: $3 }
-      | ass         { [$1]     }
-   ;
-   assg:
-      | asss SC assg { $1 :: $3 }
-      | asss         { [$1]     }
-   ;      
-   distr:
-      | DISTR { true  }
-      |       { false }
-   ;
-   allbut:
-      | BUT { true  }
-      |     { false }
-   ;
-   bin_op:
-      | set_exp DIFF set_exp  { M.BinFDiff, $1, $3 }
-      | set_exp UNION set_exp { M.BinFJoin, $1, $3 }
-      | set_exp INTER set_exp { M.BinFMeet, $1, $3 }
-   ;   
-   gen_op:
-      | SUP set_exp { M.GenFJoin, $2 }
-      | INF set_exp { M.GenFMeet, $2 }
-   ;   
-   test_op:
-      | val_exp XOR val_exp  { M.Xor, $1, $3  }
-      | val_exp OR val_exp   { M.Or, $1, $3   }
-      | val_exp AND val_exp  { M.And, $1, $3  }
-      | val_exp SUB val_exp  { M.Sub, $1, $3  }
-      | val_exp MEET val_exp { M.Meet, $1, $3 }
-      | val_exp EQ val_exp   { M.Eq, $1, $3   }
-      | val_exp LE val_exp   { M.Le, $1, $3   }
-      | val_exp LT val_exp   { M.Lt, $1, $3   }
-   ;
-   source:
-      | SOURCE { true  }
-      |        { false }
-   ;
-   xml:
-      |    { false}
-   ;
-   grp_exp:
-      | assg { M.Attr $1 }
-      | avar { M.From $1 }
-   ;
-   val_exp:
-      | TRUE                    { M.True                      }
-      | FALSE                   { M.False                     }
-      | STR                     { M.Const $1                  }
-      | avar FS path            { M.Dot $1 $3                 }
-      | vvar                    { M.VVar $1                   }
-      | LC vals RC              { M.Set $2                    }
-      | LC RC                   { M.Set []                    }
-      | LP val_exp RP           { $2                          }
-      | STAT val_exp            { M.StatVal $2                }
-      | EX val_exp              { M.Ex (analyze $2) $2        }
-      | NOT val_exp             { M.Not $2                    }
-      | test_op                 { M.Test (f $1) (s $1) (t $1) }      
-      | PROJ opt_path set_exp   { M.Proj $2 $3                }
-      | COUNT val_exp           { M.Count $2                  }
-      | ALIGN STR IN val_exp    { M.Align $2 $4               }
-   ;   
-   vals:
-      | val_exp CM vals { $1 :: $3 }
-      | val_exp         { [$1]     }
-   ;
-   set_exp:
-      | EMPTY                                  { M.Empty                }
-      | LP set_exp RP                          { $2                     }
-      | svar                                   { M.SVar $1              }
-      | avar                                   { M.AVar $1              }
-      | LET svar BE set_exp IN set_exp         { M.LetSVar $2 $4 $6     }
-      | LET vvar BE val_exp IN set_exp         { M.LetVVar $2 $4 $6     }
-      | FOR avar IN set_exp gen_op             
-         { M.For (fst $5) $2 $4 (snd $5) }
-      | ADD distr grp_exp IN set_exp           { M.Add $2 $3 $5         }
-      | IF val_exp THEN set_exp ELSE set_exp   { M.If $2 $4 $6          }
-      | PROP qualif mainc istrue isfalse attrc OF pattern val_exp     
-         { M.Property (f $2) (s $2) (t $2) $3 $4 $5 $6 $8 $9 }
-      | LOG xml source set_exp                 { M.Log $2 $3 $4         }
-      | STAT set_exp                           { M.StatQuery $2         }
-      | KEEP allbut paths IN set_exp           { M.Keep $2 $3 $5        } 
-      | KEEP allbut IN set_exp                 { M.Keep $2 [] $4        } 
-      | bin_op                                 
-         { M.Bin (f $1) (s $1) (t $1) }
-      | SELECT avar FROM set_exp WHERE val_exp { M.Select $2 $4 $6      }
-      | SUBJ val_exp                           { M.Subj $2              }
-   ;
-   query:
-      | set_exp       { $1                }
-      | set_exp error { $1                }
-      | EOF           { raise End_of_file }
-   ;
-   attr:
-      | path IS strs { $1, $3 }
-      | path         { $1, [] }
-   ;
-   attrs:
-      | attr SC attrs { $1 :: $3 }
-      | attr          { [$1]     }
-   ;
-   group:
-      LC attrs RC { $2 }
-   ;
-   groups:
-      | group CM groups { $1 :: $3 }
-      | group           { [$1]     }
-   ;
-   resource:
-      | STR ATTR groups { ($1, $3) }
-      | STR             { ($1, []) }
-   ;
-   resources:
-      | resource SC resources { $1 :: $3 }
-      | resource              { [$1]     }
-      |                       { []       }
-   ;   
-   result:
-      | resources { $1                }
-      | EOF       { raise End_of_file }
diff --git a/helm/ocaml/mathql/mQueryUtil.ml b/helm/ocaml/mathql/mQueryUtil.ml
deleted file mode 100644 (file)
index 3b16bb6..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-(* text linearization and parsing *******************************************)
-
-let rec txt_list out f s = function
-   | []        -> ()
-   | [a]       -> f a
-   | a :: tail -> f a; out s; txt_list out f s tail
-   
-let txt_str out s = out ("\"" ^ s ^ "\"")
-
-let txt_path out p = out "/"; txt_list out (txt_str out) "/" p 
-
-let text_of_query out x sep =
-   let module M = MathQL in 
-   let txt_path_list l = txt_list out (txt_path out) ", " l in 
-   let txt_svar sv = out ("%" ^ sv) in 
-   let txt_avar av = out ("@" ^ av) in
-   let txt_vvar vv = out ("$" ^ vv) in
-   let txt_inv i = if i then out "inverse " in
-   let txt_ref = function
-      | M.RefineExact -> ()
-      | M.RefineSub   -> out "sub "
-      | M.RefineSuper -> out "super "
-   in
-   let txt_qualif i r p = txt_inv i; txt_ref r; txt_path out p in
-   let main = function
-      | [] -> ()
-      | p  -> out " main "; txt_path out p
-   in
-   let txt_exp = function
-      | (pl, None)    -> txt_path out pl 
-      | (pl, Some pr) -> txt_path out pl; out " as "; txt_path out pr
-   in
-   let txt_exp_list = function
-      | [] -> ()
-      | l  -> out " attr "; txt_list out txt_exp ", " l 
-   in
-   let pattern b = if b then out "pattern " in
-   let txt_opt_path = function
-      | None   -> ()
-      | Some p -> txt_path out p; out " "
-   in
-   let txt_distr d = if d then out "distr " in
-   let txt_bin = function
-      | M.BinFJoin -> out " union "
-      | M.BinFMeet -> out " intersect "
-      | M.BinFDiff -> out " diff "
-   in
-   let txt_gen = function
-      | M.GenFJoin -> out " sup "
-      | M.GenFMeet -> out " inf "
-   in
-   let txt_test = function
-      | M.Xor  -> out " xor "
-      | M.Or   -> out " or "
-      | M.And  -> out " and "
-      | M.Sub  -> out " sub "
-      | M.Meet -> out " meet "
-      | M.Eq   -> out " eq "
-      | M.Le   -> out " le "
-      | M.Lt   -> out " lt "
-   in
-   let txt_log a b = 
-      if a then out "xml ";
-      if b then out "source "
-   in
-   let txt_allbut b = if b then out "allbut " in   
-   let rec txt_con (pat, p, x) = 
-      txt_path out p; 
-      if pat then out " match " else out " in ";
-      txt_val x
-   and txt_con_list s = function
-      | [] -> ()
-      | l  -> out s; txt_list out txt_con ", " l 
-   and txt_istrue lt = txt_con_list " istrue " lt 
-   and txt_isfalse lf = txt_con_list " isfalse " lf
-   and txt_ass (p, x) = txt_val x; out " as "; txt_path out p
-   and txt_ass_list l = txt_list out txt_ass ", " l
-   and txt_assg_list g = txt_list out txt_ass_list "; " g
-   and txt_val_list = function
-      | [v] -> txt_val v
-      | l   -> out "{"; txt_list out txt_val ", " l; out "}" 
-   and txt_grp = function
-      | M.Attr g  -> txt_assg_list g
-      | M.From av -> txt_avar av
-   and txt_val = function
-      | M.True       -> out "true"
-      | M.False      -> out "false"
-      | M.Const s    -> txt_str out s
-      | M.Set l      -> txt_val_list l
-      | M.VVar vv    -> txt_vvar vv
-      | M.Dot av p   -> txt_avar av; out "."; txt_path out p
-      | M.Proj op x  -> out "proj "; txt_opt_path op; txt_set x
-      | M.Ex b x     -> out "ex "; txt_val x
-(*    | M.Ex b x     -> out "ex ["; txt_list out txt_avar "," b; out "] "; txt_val x
-*)    | M.Not x      -> out "not "; txt_val x
-      | M.Test k x y -> out "("; txt_val x; txt_test k; txt_val y; out ")"
-      | M.StatVal x  -> out "stat "; txt_val x
-      | M.Count x    -> out "count "; txt_val x
-      | M.Align s x  -> out "align "; txt_str out s; out " in "; txt_val x
-   and txt_set = function
-      | M.Empty              -> out "empty"
-      | M.SVar sv            -> txt_svar sv
-      | M.AVar av            -> txt_avar av
-      | M.Property q0 q1 q2 mc ct cfl xl b x -> 
-         out "property "; txt_qualif q0 q1 q2; main mc;
-        txt_istrue ct; txt_list out txt_isfalse "" cfl; txt_exp_list xl;
-        out " of "; pattern b; txt_val x
-      | M.Bin k x y          -> out "("; txt_set x; txt_bin k; txt_set y;
-                                out ")"
-      | M.LetSVar sv x y     -> out "let "; txt_svar sv; out " be "; 
-                                txt_set x; out " in "; txt_set y
-      | M.LetVVar vv x y     -> out "let "; txt_vvar vv; out " be "; 
-                                txt_val x; out " in "; txt_set y
-      | M.Select av x y      -> out "select "; txt_avar av; out " from ";
-                                txt_set x; out " where "; txt_val y
-      | M.Subj x             -> out "subj "; txt_val x
-      | M.For k av x y       -> out "for "; txt_avar av; out " in ";
-                                txt_set x; txt_gen k; txt_set y
-      | M.If x y z           -> out "if "; txt_val x; out " then ";
-                                txt_set y; out " else "; txt_set z
-      | M.Add d g x          -> out "add "; txt_distr d; txt_grp g; 
-                                out " in "; txt_set x
-      | M.Log a b x          -> out "log "; txt_log a b; txt_set x
-      | M.StatQuery x        -> out "stat "; txt_set x
-      | M.Keep b l x         -> out "keep "; txt_allbut b; txt_path_list l;
-                                txt_set x
-
-   in 
-   txt_set x; out sep
-
-let text_of_result out x sep = 
-   let txt_attr = function
-      | (p, []) -> txt_path out p
-      | (p, l)  -> txt_path out p; out " = "; txt_list out (txt_str out) ", " l
-   in
-   let txt_group l = out "{"; txt_list out txt_attr "; " l; out "}" in
-   let txt_res = function
-      | (s, []) -> txt_str out s 
-      | (s, l)  -> txt_str out s; out " attr "; txt_list out txt_group ", " l
-   in   
-   let txt_set l = txt_list out txt_res ("; " ^ sep) l; out sep in
-   txt_set x
-
-let query_of_text lexbuf =
-   MQueryTParser.query MQueryTLexer.query_token lexbuf 
-
-let result_of_text lexbuf =
-   MQueryTParser.result MQueryTLexer.result_token lexbuf 
-
-(* time handling  ***********************************************************)
-
-type time = float * float 
-
-let start_time () =
-   (Sys.time (), Unix.time ())
-   
-let stop_time (s0, u0) =
-   let s1 = Sys.time () in
-   let u1 = Unix.time () in
-   Printf.sprintf "%.2fs,%.2fs" (s1 -. s0) (u1 -. u0)
-
-(* conversion functions *****************************************************)
-
-type uriref = UriManager.uri * (int list)
-
-let string_of_uriref (uri, fi) =
-   let module UM = UriManager in
-   let str = UM.string_of_uri uri in
-   let xp t = "#xpointer(1/" ^ string_of_int (t + 1) in
-   match fi with
-      | []          -> str 
-      | [t]         -> str ^ xp t ^ ")" 
-      | t :: c :: _ -> str ^ xp t ^ "/" ^ string_of_int c ^ ")" 
-
diff --git a/helm/ocaml/mathql/mQueryUtil.mli b/helm/ocaml/mathql/mQueryUtil.mli
deleted file mode 100644 (file)
index 69aaebd..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-val text_of_query  : (string -> unit) -> MathQL.query -> string -> unit
-
-val text_of_result : (string -> unit) -> MathQL.result -> string -> unit
-
-val query_of_text  : Lexing.lexbuf -> MathQL.query
-
-val result_of_text : Lexing.lexbuf -> MathQL.result
-
-type time
-
-val start_time : unit -> time
-
-val stop_time  : time -> string
-
-
-type uriref = UriManager.uri * (int list)
-
-val string_of_uriref : uriref -> string
diff --git a/helm/ocaml/mathql/mathQL.ml b/helm/ocaml/mathql/mathQL.ml
deleted file mode 100644 (file)
index 7e82fe5..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://www.cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-(* output data structures ***************************************************)
-
-type path            = string list            (* the name of an attribute *)
-
-type value           = string list            (* the value of an attribute *)
-
-type attribute       = path * value           (* an attribute *)
-
-type attribute_group = attribute list         (* a group of attributes *)
-
-type attribute_set   = attribute_group list   (* the attributes of an URI *)
-
-type resource        = string * attribute_set (* an attributed URI *)
-
-type resource_set    = resource list          (* the query result *)
-
-type result = resource_set
-
-
-(* input data structures ****************************************************)
-
-type svar = string (* the name of a variable for a resource set *)
-
-type avar = string (* the name of a variable for a resource *)
-
-type vvar = string (* the name of a variable for an attribute value *)
-
-type inverse = bool 
-
-type refine = RefineExact
-            | RefineSub
-           | RefineSuper
-
-type main = path
-
-type pattern = bool
-
-type exp = path * (path option) 
-
-type exp_list = exp list
-
-type allbut = bool
-
-type xml = bool
-
-type source = bool
-
-type bin = BinFJoin (* full union - with attr handling *)
-         | BinFMeet (* full intersection - with attr handling *)
-         | BinFDiff (* full difference - with attr handling *)
-
-type gen = GenFJoin (* full union - with attr handling *)
-         | GenFMeet (* full intersection - with attr handling *)
-
-type test = Xor
-          | Or
-         | And
-          | Sub
-         | Meet
-         | Eq
-         | Le
-         | Lt
-
-type query = Empty
-           | SVar of svar
-          | AVar of avar
-           | Subj of msval
-          | Property of inverse * refine * path * 
-                        main * istrue * isfalse list * exp_list *
-                        pattern * msval
-           | Select of avar * query * msval
-          | Bin of bin * query * query
-          | LetSVar of svar * query * query
-          | LetVVar of vvar * msval * query
-          | For of gen * avar * query * query 
-          | Add of bool * groups * query
-          | If of msval * query * query
-          | Log of xml * source * query
-          | StatQuery of query
-          | Keep of allbut * path list * query
-          
-and msval = False
-          | True
-          | Not of msval
-         | Ex of avar list * msval
-         | Test of test * msval * msval
-         | Const of string
-         | Set of msval list
-          | Proj of path option * query 
-         | Dot of avar * path
-         | VVar of vvar
-         | StatVal of msval
-         | Count of msval
-         | Align of string * msval
-
-and groups = Attr of (path * msval) list list
-           | From of avar
-
-and con = pattern * path * msval
-
-and istrue = con list
-
-and isfalse = con list
diff --git a/helm/ocaml/mathql_generator/.cvsignore b/helm/ocaml/mathql_generator/.cvsignore
deleted file mode 100644 (file)
index 539f5b5..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-*.cmi
-*.cmo
-*.cma
-*.cmx
-*.cmxa
diff --git a/helm/ocaml/mathql_generator/.depend b/helm/ocaml/mathql_generator/.depend
deleted file mode 100644 (file)
index b8ecb13..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-mQGUtil.cmi: mQGTypes.cmo 
-mQueryGenerator.cmi: mQGTypes.cmo 
-mQueryLevels2.cmi: mQGTypes.cmo 
-mQGUtil.cmo: mQGTypes.cmo mQGUtil.cmi 
-mQGUtil.cmx: mQGTypes.cmx mQGUtil.cmi 
-mQueryGenerator.cmo: mQGTypes.cmo mQGUtil.cmi mQueryGenerator.cmi 
-mQueryGenerator.cmx: mQGTypes.cmx mQGUtil.cmx mQueryGenerator.cmi 
-mQueryLevels.cmo: mQueryLevels.cmi 
-mQueryLevels.cmx: mQueryLevels.cmi 
-mQueryLevels2.cmo: mQGTypes.cmo mQGUtil.cmi mQueryLevels2.cmi 
-mQueryLevels2.cmx: mQGTypes.cmx mQGUtil.cmx mQueryLevels2.cmi 
diff --git a/helm/ocaml/mathql_generator/Makefile b/helm/ocaml/mathql_generator/Makefile
deleted file mode 100644 (file)
index 6b8252c..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-PACKAGE = mathql_generator
-
-REQUIRES = helm-cic helm-cic_proof_checking helm-mathql
-   
-PREDICATES =
-
-INTERFACE_FILES = mQGUtil.mli mQueryGenerator.mli \
-                 mQueryLevels.mli mQueryLevels2.mli
-
-IMPLEMENTATION_FILES = mQGTypes.ml $(INTERFACE_FILES:%.mli=%.ml)
-
-EXTRA_OBJECTS_TO_INSTALL = mQGTypes.ml mQGTypes.cmi
-
-EXTRA_OBJECTS_TO_CLEAN =
-
-include ../Makefile.common
diff --git a/helm/ocaml/mathql_generator/mQGTypes.ml b/helm/ocaml/mathql_generator/mQGTypes.ml
deleted file mode 100644 (file)
index 2dacfe1..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTORS: Ferruccio Guidi        <fguidi@cs.unibo.it>
- *          Claudio Sacerdoti Coen <sacerdot@cs.unibo.it> 
- *)
-
-(* low level types  *********************************************************)
-
-type uri = string
-type position = MainHypothesis
-              | InHypothesis
-              | MainConclusion
-              | InConclusion
-              | InBody
-type depth = int
-type sort = Set
-          | Prop
-          | Type
-type spec = MustObj  of uri list * position list * depth list
-          | MustSort of sort list * position list * depth list
-         | MustRel  of position list * depth list
-         | OnlyObj  of uri list * position list * depth list
-          | OnlySort of sort list * position list * depth list
-         | OnlyRel  of position list * depth list
-         | Universe of position list 
-
-(* high-level types  ********************************************************)
-
-type optional_depth = int option
-
-type full_position  = [ `MainHypothesis of optional_depth
-                      | `MainConclusion of optional_depth
-                      | `InHypothesis
-                      | `InConclusion
-                      | `InBody
-                      ]
-
-type main_position = [ `MainHypothesis of optional_depth
-                     | `MainConclusion of optional_depth
-                     ]
-                   
-type r_obj  = full_position * uri
-type r_sort = main_position * sort
-type r_rel  = main_position 
-
-type must_restrictions = (r_obj list * r_rel list * r_sort list)
-type only_restrictions =
-   (r_obj list option * r_rel list option * r_sort list option)
-
-type universe = position list
diff --git a/helm/ocaml/mathql_generator/mQGUtil.ml b/helm/ocaml/mathql_generator/mQGUtil.ml
deleted file mode 100644 (file)
index a7a6bc6..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-module T = MQGTypes
-
-(* low level functions  *****************************************************)
-
-let string_of_position p = 
-   let ns = "http://www.cs.unibo.it/helm/schemas/schema-helm#" in
-   match p with
-      | T.MainHypothesis -> ns ^ "MainHypothesis"
-      | T.InHypothesis   -> ns ^ "InHypothesis"
-      | T.MainConclusion -> ns ^ "MainConclusion"
-      | T.InConclusion   -> ns ^ "InConclusion"
-      | T.InBody         -> ns ^ "InBody"
-      
-let string_of_sort = function
-   | T.Set  -> "Set"
-   | T.Prop -> "Prop"
-   | T.Type -> "Type"
-
-let string_of_depth = string_of_int
-
-let mathql_of_position = function
-   | T.MainHypothesis -> "$MH"
-   | T.InHypothesis   -> "$IH"
-   | T.MainConclusion -> "$MC"
-   | T.InConclusion   -> "$IC"
-   | T.InBody         -> "$IB"
-      
-let mathql_of_sort = function
-   | T.Set  -> "$SET"
-   | T.Prop -> "$PROP"
-   | T.Type -> "$TYPE"
-
-let mathql_of_depth = string_of_int
-
-let mathql_of_uri u = u
-
-let mathql_of_specs out l =
-   let rec iter f = function 
-      | []        -> ()
-      | [s]       -> out "\""; out (f s); out "\""
-      | s :: tail -> out "\""; out (f s); out "\", "; iter f tail
-   in
-   let txt_uri l = out "{"; iter mathql_of_uri l; out "} " in
-   let txt_pos l = out "{"; iter mathql_of_position l; out "} " in
-   let txt_sort l = out "{"; iter mathql_of_sort l; out "} " in
-   let txt_depth l = out "{"; iter mathql_of_depth l; out "} " in
-   let txt_spec = function
-      | T.MustObj  (u, p, d) -> out "mustobj  "; txt_uri u; txt_pos p; txt_depth d; out "\n" 
-      | T.MustSort (s, p, d) -> out "mustsort "; txt_sort s; txt_pos p; txt_depth d; out "\n" 
-      | T.MustRel  (   p, d) -> out "mustrel  "; txt_pos p; txt_depth d; out "\n" 
-      | T.OnlyObj  (u, p, d) -> out "onlyobj  "; txt_uri u; txt_pos p; txt_depth d; out "\n" 
-      | T.OnlySort (s, p, d) -> out "onlysort "; txt_sort s; txt_pos p; txt_depth d; out "\n" 
-      | T.OnlyRel  (   p, d) -> out "onlyrel  "; txt_pos p; txt_depth d; out "\n" 
-      | T.Universe (   p   ) -> out "universe "; txt_pos p; out "\n" 
-   in   
-   List.iter txt_spec l  
-
-let position_of_mathql = function
-   | "$MH" -> T.MainHypothesis 
-   | "$IH" -> T.InHypothesis
-   | "$MC" -> T.MainConclusion
-   | "$IC" -> T.InConclusion
-   | "$IB" -> T.InBody
-   | _     -> raise Parsing.Parse_error 
-
-let sort_of_mathql = function
-   | "$SET"  -> T.Set 
-   | "$PROP" -> T.Prop
-   | "$TYPE" -> T.Type
-   | _       -> raise Parsing.Parse_error 
-
-let depth_of_mathql s =
-   try 
-      let d = int_of_string s in
-      if d < 0 then raise (Failure "") else d
-   with Failure _ -> raise Parsing.Parse_error
-
-let uri_of_mathql s = s
-
-(* high level functions  ****************************************************)
-
-let text_of_position = function
-   | `MainHypothesis _ -> "MainHypothesis"
-   | `MainConclusion _ -> "MainConclusion"
-   | `InHypothesis     -> "InHypothesis" 
-   | `InConclusion     -> "InConclusion" 
-   | `InBody           -> "InBody" 
-
-let text_of_depth pos no_depth_text = match pos with
-   | `MainHypothesis (Some d)
-   | `MainConclusion (Some d) -> string_of_int d
-   | _                        -> no_depth_text
-
-let text_of_sort = function
-   | T.Set  -> "Set"
-   | T.Prop -> "Prop"
-   | T.Type -> "Type"
-
-let is_main_position = function
-   | `MainHypothesis _
-   | `MainConclusion _ -> true
-   | _                 -> false
-
-let is_conclusion = function
-   | `MainConclusion _ 
-   | `InConclusion     -> true
-   | _                 -> false
-
-let set_full_position pos depth = match pos with
-   | `MainHypothesis _ -> `MainHypothesis depth
-   | `MainConclusion _ -> `MainConclusion depth
-   | _                 -> pos
-
-let set_main_position pos depth = match pos with
-   | `MainHypothesis _ -> `MainHypothesis depth
-   | `MainConclusion _ -> `MainConclusion depth
-
-let universe_for_search_pattern =
-   [T.MainHypothesis; T.InHypothesis; T.MainConclusion; T.InConclusion]
-   
-let universe_for_match_conclusion = [T.MainConclusion; T.InConclusion]
diff --git a/helm/ocaml/mathql_generator/mQGUtil.mli b/helm/ocaml/mathql_generator/mQGUtil.mli
deleted file mode 100644 (file)
index bb623cc..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-(* low level functions  *****************************************************)
-
-(* these functions give the string representation used in the db  ----------*)
-
-val string_of_position : MQGTypes.position -> string
-val string_of_depth    : MQGTypes.depth -> string
-val string_of_sort     : MQGTypes.sort -> string
-
-(* these functions give the string representation used in MathQL  ----------*)
-
-val mathql_of_position : MQGTypes.position -> string
-val mathql_of_depth    : MQGTypes.depth -> string
-val mathql_of_uri      : MQGTypes.uri -> string
-val mathql_of_sort     : MQGTypes.sort -> string
-
-val mathql_of_specs    : (string -> unit) -> MQGTypes.spec list -> unit
-
-val position_of_mathql : string -> MQGTypes.position
-val depth_of_mathql    : string -> MQGTypes.depth
-val uri_of_mathql      : string -> MQGTypes.uri
-val sort_of_mathql     : string -> MQGTypes.sort
-
-(* high level functions  ****************************************************)
-
-(* these functions give the textual representation used by umans  ----------*)
-
-val text_of_position : MQGTypes.full_position -> string
-val text_of_depth    : MQGTypes.full_position -> string -> string
-val text_of_sort     : MQGTypes.sort -> string
-
-(* these functions classify the positions  ---------------------------------*)
-
-val is_main_position : MQGTypes.full_position -> bool
-val is_conclusion    : MQGTypes.full_position -> bool
-
-(* these function apply changes to positions  ------------------------------*)
-
-val set_full_position : MQGTypes.full_position -> MQGTypes.optional_depth ->
-                        MQGTypes.full_position
-val set_main_position : MQGTypes.main_position -> MQGTypes.optional_depth ->
-                        MQGTypes.main_position
-
-(* these functions give some universes for "query_of_constraints"  ---------*)
-
-val universe_for_search_pattern   : MQGTypes.universe
-val universe_for_match_conclusion : MQGTypes.universe
diff --git a/helm/ocaml/mathql_generator/mQueryGenerator.ml b/helm/ocaml/mathql_generator/mQueryGenerator.ml
deleted file mode 100644 (file)
index 1a02111..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-module M = MathQL
-module T = MQGTypes
-module U = MQGUtil
-
-(* low level functions  *****************************************************)
-
-let locate s =
-   let query = 
-      M.Property true M.RefineExact ["objectName"] [] [] [] []
-                 false (M.Const s) 
-   in M.StatQuery query
-
-let compose cl = 
-   let letin = ref [] in
-   let must = ref [] in
-   let onlyobj = ref [] in
-   let onlysort = ref [] in
-   let onlyrel = ref [] in
-   let only = ref true in
-   let univ = ref [] in
-   let set_val = function
-      | [s] -> M.Const s
-      | l   -> 
-        let msval = M.Set (List.map (fun s -> M.Const s) l) in
-        if ! only then begin
-          let vvar = "val" ^ string_of_int (List.length ! letin) in
-          letin := (vvar, msval) :: ! letin;
-          M.VVar vvar
-        end else msval
-   in
-   let cons o (r, s, p, d) =      
-      let con p = function
-         | [] -> []
-         | l  -> [(false, [p], set_val l)]
-      in
-      only := o;
-      con "h:occurrence" r @ 
-      con "h:sort" (List.map U.string_of_sort s) @ 
-      con "h:position" (List.map U.string_of_position p) @ 
-      con "h:depth" (List.map U.string_of_depth d)
-   in
-   let property_must n c =
-      M.Property true M.RefineExact [n] []
-                (cons false c) [] [] false (M.Const "") 
-   in   
-   let property_only n cl =
-      let cll = List.map (cons true) cl in
-      M.Property false M.RefineExact [n] []
-                ! univ cll [] false (M.Proj None (M.AVar "obj"))
-   in
-   let rec aux = function 
-      | [] -> ()
-      | T.Universe l :: tail    -> 
-         only := true; 
-        let l = List.map U.string_of_position l in
-        univ := [(false, ["h:position"], set_val l)]; aux tail 
-      | T.MustObj r p d :: tail ->
-         must := property_must "refObj" (r, [], p, d) :: ! must; aux tail  
-      | T.MustSort s p d :: tail ->
-        must := property_must "refSort" ([], s, p, d) :: ! must; aux tail 
-      | T.MustRel p d :: tail ->
-        must := property_must "refRel" ([], [], p, d) :: ! must; aux tail
-      | T.OnlyObj r p d :: tail ->
-        onlyobj := (r, [], p, d) :: ! onlyobj; aux tail
-      | T.OnlySort s p d :: tail ->
-         onlysort := ([], s, p, d) :: ! onlysort; aux tail
-      | T.OnlyRel p d :: tail ->
-         onlyrel := ([], [], p, d) :: ! onlyrel; aux tail
-   in
-   let rec iter f g = function
-      | []           -> raise (Failure "MQueryGenerator.iter")
-      | [head]       -> (f head) 
-      | head :: tail -> let t = (iter f g tail) in g (f head) t
-   in
-   U.mathql_of_specs prerr_string cl;
-   aux cl;
-   let must_query =
-      if ! must = [] then  
-         M.Property false M.RefineExact [] [] [] [] [] true (M.Const ".*")
-      else 
-         iter (fun x -> x) (fun x y -> M.Bin M.BinFMeet x y) ! must   
-   in 
-   let onlyobj_val = M.Not (M.Proj None (property_only "refObj" ! onlyobj)) in
-   let onlysort_val = M.Not (M.Proj None (property_only "refSort" ! onlysort)) in
-   let onlyrel_val = M.Not (M.Proj None (property_only "refRel" ! onlyrel)) in
-   let select_query x =
-      match ! onlyobj, ! onlysort, ! onlyrel with
-         | [], [], [] -> x
-        | _, [], []  -> M.Select "obj" x onlyobj_val
-        | [], _, []  -> M.Select "obj" x onlysort_val
-         | [], [], _  -> M.Select "obj" x onlyrel_val
-         | _, _, []   -> M.Select "obj" x (M.Test M.And onlyobj_val onlysort_val)
-         | _, [], _   -> M.Select "obj" x (M.Test M.And onlyobj_val onlyrel_val)
-         | [], _, _   -> M.Select "obj" x (M.Test M.And onlysort_val onlyrel_val)
-        | _, _, _    -> M.Select "obj" x (M.Test M.And (M.Test M.And onlyobj_val onlysort_val) onlyrel_val)
-   in   
-   let letin_query = 
-      if ! letin = [] then fun x -> x
-      else 
-        let f (vvar, msval) x = M.LetVVar vvar msval x in 
-        iter f (fun x y z -> x (y z)) ! letin
-   in 
-   M.StatQuery (letin_query (select_query must_query))
-
-(* high-level functions  ****************************************************)
-
-let query_of_constraints u (musts_obj, musts_rel, musts_sort)
-                           (onlys_obj, onlys_rel, onlys_sort) =
-   let conv = function
-      | `MainHypothesis None     -> [T.MainHypothesis], []
-      | `MainHypothesis (Some d) -> [T.MainHypothesis], [d]
-      | `MainConclusion None     -> [T.MainConclusion], []
-      | `MainConclusion (Some d) -> [T.MainConclusion], [d]
-      | `InHypothesis            -> [T.InHypothesis], []
-      | `InConclusion            -> [T.InConclusion], []
-      | `InBody                  -> [T.InBody], []
-   in
-   let must_obj (p, u) = let p, d = conv p in T.MustObj ([u], p, d) in
-   let must_sort (p, s) = let p, d = conv p in T.MustSort ([s], p, d) in
-   let must_rel p = let p, d = conv p in T.MustRel (p, d) in
-   let only_obj (p, u) = let p, d = conv p in T.OnlyObj ([u], p, d) in
-   let only_sort (p, s) = let p, d = conv p in T.OnlySort ([s], p, d) in
-   let only_rel p = let p, d = conv p in T.OnlyRel (p, d) in
-   let must = List.map must_obj musts_obj @
-              List.map must_rel musts_rel @
-             List.map must_sort musts_sort
-   in
-   let only = 
-      (match onlys_obj with 
-         | None    -> []
-         | Some [] -> [T.OnlyObj ([], [], [])]
-        | Some l  -> List.map only_obj l
-      ) @
-      (match onlys_rel with 
-         | None    -> []
-         | Some [] -> [T.OnlyRel ([], [])]
-        | Some l  -> List.map only_rel l
-      ) @
-      (match onlys_sort with 
-         | None    -> []
-         | Some [] -> [T.OnlySort ([], [], [])]
-        | Some l  -> List.map only_sort l
-      )
-   in
-   let univ = match u with None -> [] | Some l -> [T.Universe l] in
-   compose (must @ only @ univ)
-
diff --git a/helm/ocaml/mathql_generator/mQueryGenerator.mli b/helm/ocaml/mathql_generator/mQueryGenerator.mli
deleted file mode 100644 (file)
index c4dc0f9..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-(* interface for the low-level constraints  *********************************)
-
-val locate  : string -> MathQL.query
-
-val compose : MQGTypes.spec list -> MathQL.query
-
-(* interface for the high-level constraints  ********************************)
-
-val query_of_constraints : MQGTypes.universe option -> 
-                           MQGTypes.must_restrictions ->
-                           MQGTypes.only_restrictions -> 
-                          MathQL.query
diff --git a/helm/ocaml/mathql_generator/mQueryLevels.ml b/helm/ocaml/mathql_generator/mQueryLevels.ml
deleted file mode 100644 (file)
index d10f5d6..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-let levels_of_term metasenv context term =
-   let module TC = CicTypeChecker in
-   let module Red = CicReduction in
-   let module Util = MQueryUtil in
-   let degree t =
-      let rec degree_aux = function
-         | Cic.Sort _         -> 1 
-         | Cic.Cast (u, _)    -> degree_aux u
-         | Cic.Prod (_, _, t) -> degree_aux t
-         | _                  -> 2
-      in 
-      let u = TC.type_of_aux' metasenv context t in
-      degree_aux (Red.whd context u)
-   in
-   let entry_eq (s1, b1, v1) (s2, b2, v2) =
-      s1 = s2 && b1 = b2 
-   in
-   let rec entry_in e = function
-      | []           -> [e]
-      | head :: tail -> 
-         head :: if entry_eq head e then tail else entry_in e tail
-   in
-   let inspect_uri main l uri tc v term =
-      let d = degree term in 
-      entry_in (Util.string_of_uriref (uri, tc), main, 2 * v + d - 1) l 
-   in
-   let rec inspect_term main l v term = match term with
-        Cic.Rel _                        -> l
-      | Cic.Meta _                       -> l
-      | Cic.Sort _                       -> l 
-      | Cic.Implicit                     -> l 
-      | Cic.Var (u,exp_named_subst)      ->
-         let l' = inspect_uri main l u [] v term in
-          inspect_exp_named_subst l' (v+1) exp_named_subst
-      | Cic.Const (u,exp_named_subst)    ->
-         let l' = inspect_uri main l u [] v term in
-          inspect_exp_named_subst l' (v+1) exp_named_subst
-      | Cic.MutInd (u, t, exp_named_subst) ->
-         let l' = inspect_uri main l u [t] v term in
-          inspect_exp_named_subst l' (v+1) exp_named_subst
-      | Cic.MutConstruct (u, t, c, exp_named_subst)    ->
-         let l' = inspect_uri main l u [t; c] v term in
-          inspect_exp_named_subst l' (v+1) exp_named_subst
-      | Cic.Cast (uu, _)                 -> 
-         inspect_term main l v uu
-      | Cic.Prod (_, uu, tt)             ->
-         let luu = inspect_term false l (v + 1) uu in
-         inspect_term main luu (v + 1) tt         
-      | Cic.Lambda (_, uu, tt)           ->
-         let luu = inspect_term false l (v + 1) uu in
-         inspect_term false luu (v + 1) tt 
-      | Cic.LetIn (_, uu, tt)            ->
-         let luu = inspect_term false l (v + 1) uu in
-         inspect_term false luu (v + 1) tt
-      | Cic.Appl m                       -> inspect_list main l true v m 
-      | Cic.MutCase (u, t, tt, uu, m) -> 
-         let lu = inspect_uri main l u [t] (v + 1) term in
-         let ltt = inspect_term false lu (v + 1) tt in
-         let luu = inspect_term false ltt (v + 1) uu in
-         inspect_list main luu false (v + 1) m
-      | Cic.Fix (_, m)                   -> inspect_ind l (v + 1) m 
-      | Cic.CoFix (_, m)                 -> inspect_coind l (v + 1) m 
-   and inspect_list main l head v = function
-      | []      -> l
-      | tt :: m -> 
-         let ltt = inspect_term main l (if head then v else v + 1) tt in
-         inspect_list false ltt false v m
-   and inspect_exp_named_subst l v = function
-        []      -> l
-      | (_,t) :: tl -> 
-         let l' = inspect_term false l v t in
-          inspect_exp_named_subst l' v tl
-   and inspect_ind l v = function
-      | []                  -> l
-      | (_, _, tt, uu) :: m ->  
-         let ltt = inspect_term false l v tt in
-         let luu = inspect_term false ltt v uu in
-         inspect_ind luu v m
-   and inspect_coind l v = function
-      | []               -> l
-      | (_, tt, uu) :: m ->
-         let ltt = inspect_term false l v tt in
-         let luu = inspect_term false ltt v uu in
-         inspect_coind luu v m
-   in
-   let rec inspect_backbone = function
-      | Cic.Cast (uu, _)      -> inspect_backbone uu
-      | Cic.Prod (_, _, tt)   -> inspect_backbone tt                
-      | Cic.LetIn (_, uu, tt) -> inspect_backbone tt
-      | t                     -> inspect_term true [] 0 t
-   in 
-   inspect_backbone term  
-
-let out_restr e c t =   
-  let can = levels_of_term e c t in  (* can restrictions *)
-prerr_endline "";
-prerr_endline
- ("#### IN LEVELS @@@@ lunghezza can: " ^ string_of_int (List.length can));
-prerr_endline "";
-(*  let rest = restrict level levels in   *)
-  let uri_pos (u,b,v) = (u,b) in
-  let can_use = List.map uri_pos can in
-  let lofl (u,b,v) = [(u,b)] in
-  let rec organize_restr rlist prev_r= 
-    match rlist with
-      [] -> []
-    | r::tl ->let curr_r = r@prev_r in
-                curr_r::(organize_restr tl curr_r)
-  in
-  let mrest = List.map lofl can in
-  let must_use = organize_restr mrest [] in (* must restrictions *)
-  (must_use,can_use)
-;;
diff --git a/helm/ocaml/mathql_generator/mQueryLevels.mli b/helm/ocaml/mathql_generator/mQueryLevels.mli
deleted file mode 100644 (file)
index c16d12b..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-val out_restr: Cic.metasenv -> Cic.context -> Cic.term -> ( ((string * bool) list) list * (string * bool) list)
diff --git a/helm/ocaml/mathql_generator/mQueryLevels2.ml b/helm/ocaml/mathql_generator/mQueryLevels2.ml
deleted file mode 100644 (file)
index 60633f8..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 02/12/2002                                 *)
-(*                                                                            *)
-(*                            Missing description                             *)
-(*                                                                            *)
-(******************************************************************************)
-
-module T = MQGTypes
-module U = MQGUtil
-
-type classification =
-   Backbone of int
- | Branch of int
- | InConclusion
- | InHypothesis
-;;
-
-let soften_classification =
- function
-    Backbone _ -> InConclusion
-  | Branch _ -> InHypothesis
-  | k -> k
-;;
-
-let (!!) =
- function
-    Backbone n -> `MainConclusion (Some n)
-  | Branch n -> `MainHypothesis (Some n)
-  | _        -> assert false
-;;
-
-let (!!!) =
- function
-    Backbone n -> `MainConclusion (Some n)
-  | Branch n -> `MainHypothesis (Some n)
-  | InConclusion -> `InConclusion
-  | InHypothesis -> `InHypothesis
-;;
-
-
-let (@@) (l1,l2,l3) (l1',l2',l3') =
- let merge l1 l2 =
-  List.fold_left (fun i t -> if List.mem t l2 then i else t::i) l2 l1
- in
-  merge l1 l1', merge l2 l2', merge l3 l3'
-;;
-
-let get_constraints term =
- let module U = UriManager in
- let module C = Cic in
-  let rec process_type_aux kind =
-   function
-      C.Var (uri,expl_named_subst) ->
-       ([!!!kind, UriManager.string_of_uri uri],[],[]) @@
-         (process_type_aux_expl_named_subst kind expl_named_subst)
-    | C.Rel _ ->
-       (match kind with
-         | InConclusion 
-         | InHypothesis -> [],[],[] 
-         | _            -> [],[!!kind],[])
-    | C.Sort s ->
-       (match kind with
-           Backbone _
-         | Branch _ ->
-            let s' =
-             match s with
-                Cic.Prop -> T.Prop
-              | Cic.Set -> T.Set
-              | Cic.Type -> T.Type
-            in
-            [],[],[!!kind,s']
-         | _ -> [],[],[])
-    | C.Meta _
-    | C.Implicit -> assert false
-    | C.Cast (te,_) ->
-       (* type ignored *)
-       process_type_aux kind te
-    | C.Prod (_,sou,ta) ->
-       let (source_kind,target_kind) =
-        match kind with
-           Backbone n -> (Branch 0, Backbone (n+1))
-         | Branch n -> (InHypothesis, Branch (n+1))
-         | k -> (k,k)
-       in
-        process_type_aux source_kind sou @@
-        process_type_aux target_kind ta
-    | C.Lambda (_,sou,ta) ->
-        let kind' = soften_classification kind in
-         process_type_aux kind' sou @@
-         process_type_aux kind' ta
-    | C.LetIn (_,te,ta)->
-       let kind' = soften_classification kind in
-        process_type_aux kind' te @@
-        process_type_aux kind ta
-    | C.Appl (he::tl) ->
-       let kind' = soften_classification kind in
-        process_type_aux kind he @@
-        List.fold_left (fun i t -> i @@ process_type_aux kind' t) ([],[],[]) tl
-    | C.Appl _ -> assert false
-    | C.Const (uri,_) ->
-       [!!!kind, UriManager.string_of_uri uri],[],[]
-    | C.MutInd (uri,typeno,expl_named_subst) ->
-       ([!!!kind, U.string_of_uri uri ^ "#xpointer(1/" ^ 
-        string_of_int (typeno + 1) ^ ")"],[],[]) @@
-         (process_type_aux_expl_named_subst kind expl_named_subst)
-    | C.MutConstruct (uri,typeno,consno,expl_named_subst) ->
-        ([!!!kind, U.string_of_uri uri ^ "#xpointer(1/" ^
-        string_of_int (typeno + 1) ^ "/" ^ string_of_int consno ^ ")"],[],[])
-         @@ (process_type_aux_expl_named_subst kind expl_named_subst)
-    | C.MutCase (_,_,_,term,patterns) ->
-       (* outtype ignored *)
-       let kind' = soften_classification kind in
-        process_type_aux kind' term @@
-        List.fold_left (fun i t -> i @@ process_type_aux kind' t)
-         ([],[],[]) patterns
-    | C.Fix (_,funs) ->
-       let kind' = soften_classification kind in
-        List.fold_left
-         (fun i (_,_,bo,ty) ->
-           i @@
-            process_type_aux kind' bo @@
-            process_type_aux kind' ty
-         ) ([],[],[]) funs
-    | C.CoFix (_,funs) ->
-       let kind' = soften_classification kind in
-        List.fold_left
-         (fun i (_,bo,ty) ->
-           i @@
-            process_type_aux kind' bo @@
-            process_type_aux kind' ty
-         ) ([],[],[]) funs
- and process_type_aux_expl_named_subst kind =
-  List.fold_left
-   (fun i (_,t) -> i @@ (process_type_aux (soften_classification kind) t))
-   ([],[],[])
-in
- let obj_constraints,rel_constraints,sort_constraints =
-  process_type_aux (Backbone 0) (CicMiniReduction.letin_nf term)
- in
-  (obj_constraints,rel_constraints,sort_constraints)
-;;
-
-(*CSC: Debugging only *)
-let get_constraints term =
- let res = get_constraints term in
- let (objs,rels,sorts) = res in
-  let text_of_pos p =
-    U.text_of_position p ^ " " ^ U.text_of_depth p "NULL"
-  in
-  prerr_endline "Constraints on objs:" ;
-  List.iter
-   (function (p, u) -> prerr_endline (text_of_pos p ^ " " ^ u)) objs ;
-  prerr_endline "Constraints on Rels:" ;
-  List.iter (function p -> prerr_endline (text_of_pos (p:>T.full_position))) rels ;
-  prerr_endline "Constraints on Sorts:" ;
-  List.iter
-   (function (p, s) -> prerr_endline (text_of_pos (p:>T.full_position) ^ " " ^ U.text_of_sort s)
-   ) sorts ;
-  res
-;;
diff --git a/helm/ocaml/mathql_generator/mQueryLevels2.mli b/helm/ocaml/mathql_generator/mQueryLevels2.mli
deleted file mode 100644 (file)
index 83f6814..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 02/12/2002                                 *)
-(*                                                                            *)
-(*                            Missing description                             *)
-(*                                                                            *)
-(******************************************************************************)
-
-val get_constraints: Cic.term -> MQGTypes.must_restrictions
diff --git a/helm/ocaml/mathql_interpreter/.cvsignore b/helm/ocaml/mathql_interpreter/.cvsignore
deleted file mode 100644 (file)
index 6b3eba3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa
diff --git a/helm/ocaml/mathql_interpreter/.depend b/helm/ocaml/mathql_interpreter/.depend
deleted file mode 100644 (file)
index 927d5dc..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-mQIProperty.cmi: mQIConn.cmi 
-mQueryInterpreter.cmi: mQIConn.cmi 
-mQueryMisc.cmo: mQueryMisc.cmi 
-mQueryMisc.cmx: mQueryMisc.cmi 
-mQIPostgres.cmo: mQIPostgres.cmi 
-mQIPostgres.cmx: mQIPostgres.cmi 
-mQIConn.cmo: mQIPostgres.cmi mQIConn.cmi 
-mQIConn.cmx: mQIPostgres.cmx mQIConn.cmi 
-mQIUtil.cmo: mQIUtil.cmi 
-mQIUtil.cmx: mQIUtil.cmi 
-mQIProperty.cmo: mQIConn.cmi mQIPostgres.cmi mQIUtil.cmi mQIProperty.cmi 
-mQIProperty.cmx: mQIConn.cmx mQIPostgres.cmx mQIUtil.cmx mQIProperty.cmi 
-mQueryInterpreter.cmo: mQIConn.cmi mQIProperty.cmi mQIUtil.cmi \
-    mQueryInterpreter.cmi 
-mQueryInterpreter.cmx: mQIConn.cmx mQIProperty.cmx mQIUtil.cmx \
-    mQueryInterpreter.cmi 
diff --git a/helm/ocaml/mathql_interpreter/Makefile b/helm/ocaml/mathql_interpreter/Makefile
deleted file mode 100644 (file)
index 18fcd55..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-PACKAGE = mathql_interpreter
-REQUIRES = helm-cic helm-cic_textual_parser helm-mathql postgres
-#natile-galax 
-
-PREDICATES =
-
-INTERFACE_FILES = mQueryMisc.mli mQIPostgres.mli mQIConn.mli \
-                  mQIUtil.mli mQIProperty.mli \
-                 mQueryInterpreter.mli
-
-IMPLEMENTATION_FILES = $(INTERFACE_FILES:%.mli=%.ml)
-
-EXTRA_OBJECTS_TO_INSTALL =
-
-EXTRA_OBJECTS_TO_CLEAN =
-
-include ../Makefile.common
diff --git a/helm/ocaml/mathql_interpreter/mQIConn.ml b/helm/ocaml/mathql_interpreter/mQIConn.ml
deleted file mode 100644 (file)
index a51242b..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-type flag = Postgres | Galax | Stat | Quiet | Warn | Log
-
-type handle = {log : string -> unit;            (* logging function    *)
-               set : flag list;                 (* options             *)
-              pgc : Postgres.connection option (* Postgres connection *)
-             }
-
-let log handle = handle.log
-
-let set handle flag = List.mem flag handle.set
-
-let pgc handle = handle.pgc 
-
-let flags handle = handle.set 
-
-let string_of_flag = function
-      | Postgres -> "P"
-      | Galax    -> "G"
-      | Stat     -> "S"
-      | Quiet    -> "Q"
-      | Warn     -> "W"
-      | Log      -> "L"
-
-let flag_of_char = function
-      | 'P' -> [Postgres]
-      | 'G' -> [Galax]
-      | 'S' -> [Stat]
-      | 'Q' -> [Quiet] 
-      | 'W' -> [Warn] 
-      | 'L' -> [Log]
-      | _   -> []
-
-let string_fold_left f a s =
-   let l = String.length s in
-   let rec aux b i = if i = l then b else aux (f b s.[i]) (succ i) in 
-   aux a 0
-
-let string_of_flags flags =
-   List.fold_left (fun s flag -> s ^ string_of_flag flag) "" flags
-
-let flags_of_string s =
-   string_fold_left (fun l c -> l @ flag_of_char c) [] s
-
-let init myflags mylog =
-   {log = mylog; set = myflags; 
-    pgc = if List.mem Galax myflags 
-       then None else MQIPostgres.init ()
-   }      
-
-let close handle =
-   if set handle Galax then () else MQIPostgres.close handle.pgc
-
-let connected handle =
-   if set handle Galax then false else (pgc handle) <> None  
-
-let init_if_connected myflags mylog =
-   let handle = init myflags mylog in
-   ignore (pgc handle); handle
diff --git a/helm/ocaml/mathql_interpreter/mQIConn.mli b/helm/ocaml/mathql_interpreter/mQIConn.mli
deleted file mode 100644 (file)
index 405e405..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-type flag = Postgres | Galax | Stat | Quiet | Warn | Log 
-
-val string_of_flags : flag list -> string
-val flags_of_string : string -> flag list
-
-type handle
-
-val init      : flag list -> (string -> unit) -> handle
-val close     : handle -> unit
-val connected : handle -> bool
-
-val init_if_connected : flag list -> (string -> unit) -> handle
-
-(* The following functions allow to read the handle internal fields. 
- * For exclusive use of the interpreter.  
- *)
-
-val log   : handle -> string -> unit
-val set   : handle -> flag -> bool   
-val pgc   : handle -> Postgres.connection option
-val flags : handle -> flag list  
diff --git a/helm/ocaml/mathql_interpreter/mQIPostgres.ml b/helm/ocaml/mathql_interpreter/mQIPostgres.ml
deleted file mode 100644 (file)
index 7c4abcb..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-let default_connection_string =
-   "dbname=mowgli user=helm"
-
-let connection_string =
-   try Sys.getenv "POSTGRESQL_CONNECTION_STRING"
-   with Not_found -> default_connection_string 
-
-let init () =
-   try Some (new Postgres.connection connection_string)
-   with _ -> raise (Failure ("MQIPostgres.init: " ^ connection_string))
-
-let close = function
-   |  None   -> ()
-   |  Some c -> c#close
-
-let exec c q = match c with
-   | None   -> []
-   | Some c -> (c#exec q)#get_list 
-   
-let quote s =
-   let rec quote_aux s =
-      try
-         let l = String.length s in
-         let i = String.index s '\'' in
-         String.sub s 0 i ^ "\\'" ^ quote_aux (String.sub s (succ i) (l - (succ i)))
-      with Not_found -> s
-   in
-   "'" ^ quote_aux s ^ "'"
diff --git a/helm/ocaml/mathql_interpreter/mQIPostgres.mli b/helm/ocaml/mathql_interpreter/mQIPostgres.mli
deleted file mode 100644 (file)
index 8acd2a2..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-val init  : unit -> Postgres.connection option
-
-val close : Postgres.connection option -> unit
-
-val exec  : Postgres.connection option -> string -> string list list
-
-val quote : string -> string
diff --git a/helm/ocaml/mathql_interpreter/mQIProperty.ml b/helm/ocaml/mathql_interpreter/mQIProperty.ml
deleted file mode 100644 (file)
index 026e11b..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-module M = MathQL
-module P = MQIPostgres
-module C = MQIConn
-module U = MQIUtil
-
-let not_supported s = 
-   raise (Failure ("MQIProperty: feature not supported: " ^ s)) 
-
-(* debugging  ***************************************************************)
-
-let pg_print l =
-   let rec pg_record = function 
-      | []           -> prerr_newline ()
-      | head :: tail -> prerr_string (head ^ " "); pg_record tail
-   in
-   List.iter pg_record l
-
-let cl_print l =  
-   let c_print (b, p, v) =
-      prerr_string (if b then "match " else "in ");
-      List.iter (fun x -> prerr_string ("/" ^ x)) p;
-      prerr_newline ();
-      List.iter prerr_endline v
-   in
-   List.iter c_print l
-
-(* PostgreSQL backend  ******************************************************)
-
-let pg_query h table cols ct cfl =
-   let exec q = 
-      if C.set h C.Log then C.log h (q ^ "\n");
-      P.exec (C.pgc h) q 
-   in
-   let rec iter f sep = function
-      | []           -> ""
-      | [head]       -> f head 
-      | head :: tail -> f head ^ sep ^ iter f sep tail
-   in
-   let pg_cols = iter (fun x -> x) ", " cols in
-   let pg_msval v = iter P.quote ", " v in
-   let pg_con (pat, col, v) = 
-      if col <> "" then 
-         let f s = col ^ " ~ " ^ P.quote ("^" ^ s ^ "$") in
-         if pat then "(" ^ iter f " or " v ^ ")"
-        else match v with 
-           | [s] -> col ^ " = " ^ (P.quote s)     
-           | v   -> col ^ " in (" ^ pg_msval v ^ ")"
-      else "true"
-   in
-   let pg_cons l = iter pg_con " and " l in
-   let pg_cons_not l = "not (" ^ pg_cons l ^ ")" in
-   let pg_cons_not_l ll = iter pg_cons_not " and " ll in
-   let pg_where = match ct, cfl with
-      | [], []  -> ""
-      | lt, []  -> " where " ^ pg_cons lt
-      | [], llf -> " where " ^ pg_cons_not_l llf
-      | lt, llf -> " where " ^ pg_cons lt ^ " and " ^ pg_cons_not_l llf
-   in
-   if cols = [] then
-      let r = exec ("select count (source) from " ^ table ^ pg_where) in
-      match r with
-         | [[s]] when int_of_string s > 0 -> [[]]
-        | _                              -> []
-   else
-      exec ("select " ^ pg_cols ^ " from " ^ table ^ pg_where ^ 
-            " order by " ^ List.hd cols ^ " asc")
-
-(* Galax backend  ***********************************************************)
-
-let gx_query h table cols ct cfl = not_supported "Galax"
-
-(* Common functions  ********************************************************)
-
-let pg_result distinct subj el res =
-  let compose = if distinct then List.map else fun f -> U.mql_iter (fun x -> [f x]) in 
-  let get_name = function (p, None) -> p | (_, Some p) -> p in
-  let names = List.map get_name el in
-  let mk_grp l = 
-     let grp = U.mql_iter2 (fun p s -> [(p, [s])]) names l in 
-     if grp = [] then [] else [grp]
-  in
-  let mk_avs l =
-     if subj = "" then ("", mk_grp l) else (List.hd l, mk_grp (List.tl l))
-  in
-  compose mk_avs res
-
-let get_table mc ct cfl el =
-   let fst = function
-      | []           -> None
-      | head :: tail -> Some head
-   in
-   let comp n1 n2 = match n1, n2 with
-      | None, _                   -> n2 
-      | Some h, Some k when h = k -> n2
-      | _, None                   -> n1
-      | _                         -> not_supported "comp"
-   in   
-   let rec get_c prev = function
-      | []                -> prev
-      | (_, p, _) :: tail -> get_c (comp prev (fst p)) tail
-   in
-   let rec get_e prev = function
-      | []             -> prev
-      | (p, _) :: tail -> get_e (comp prev (fst p)) tail
-   in
-   get_e (get_c (get_c (fst mc) ct) (List.concat cfl)) el  
-
-let rec decolon s =
-   let l = String.length s in
-   try 
-      let i = String.index s ':' in
-      String.sub s 0 i ^ "_" ^ decolon (String.sub s (succ i) (l - succ i))
-   with Not_found -> s
-
-let conv_bp = function
-   | []                  -> "h_occurrence" 
-   | [t]                 -> ""
-   | [_; "h:occurrence"] -> "source"
-   | [_; t]              -> decolon t
-   | _                   -> not_supported "conv_bp"
-
-let conv_gen = function
-   | []             -> "source"
-   | ["objectName"] -> "value" 
-   | [t]            -> ""
-   | [_; t]         -> decolon t
-   | _              -> not_supported "conv" 
-
-let exec_single h mc ct cfl el t =
-   let table = match t with Some t -> decolon t | None -> "objectName" in
-   let table, conv = 
-      if table = "backPointer" then "refObj", conv_bp else table, conv_gen
-   in
-   let first = conv mc in
-   let mk_con l = List.map (fun (pat, p, v) -> (pat, conv p, v)) l in
-   let cons_true = mk_con ct in 
-   let cons_false = List.map mk_con cfl in
-   let other_cols = List.map (fun (p, _) -> conv p) el in 
-   let cols = if first = "" then other_cols else first :: other_cols in
-   let low_level = if C.set h C.Galax then gx_query else pg_query in
-   pg_result false first el (low_level h table cols cons_true cons_false) 
-   
-let deadline = 100
-
-let exec h refine mc ct cfl el =
-   if refine <> M.RefineExact then not_supported "exec";   
-   let table = get_table mc ct cfl el in
-   let rec exec_aux ct = match ct with 
-      | (pat, p, v) :: tail when List.length v > deadline ->
-         let single s = exec_aux ((pat, p, [s]) :: tail) in
-        U.mql_iter single v
-      | _                                                 ->
-         exec_single h mc ct cfl el table
-   in exec_aux ct       
-
-(* funzioni vecchie  ********************************************************)
-
-let pg_name h s = 
-   let q = "select id from registry where uri = " ^ P.quote s in
-   match P.exec h q with
-      | [[id]] -> "t" ^ id
-      | _      -> ""
-
-let get_id b = if b then ["B"] else ["F"] 
diff --git a/helm/ocaml/mathql_interpreter/mQIProperty.mli b/helm/ocaml/mathql_interpreter/mQIProperty.mli
deleted file mode 100644 (file)
index 1084cc9..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-open MathQL
-open MQIConn
-
-val exec: handle -> refine -> path ->  
-          (bool * path * value) list -> (bool * path * value) list list -> 
-         exp_list -> result
diff --git a/helm/ocaml/mathql_interpreter/mQIUtil.ml b/helm/ocaml/mathql_interpreter/mQIUtil.ml
deleted file mode 100644 (file)
index 00f5390..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-(* boolean constants  *******************************************************)
-
-let mql_false = []
-
-let mql_true = [""]
-
-(* set theoretic operations *************************************************)
-
-let rec set_sub v1 v2 =
-   match v1, v2 with
-      | [], _                          -> mql_true 
-      | _, []                          -> mql_false
-      | h1 :: _, h2 :: _ when h1 < h2  -> mql_false
-      | h1 :: _, h2 :: t2 when h1 > h2 -> set_sub v1 t2
-      | _ :: t1, _ :: t2               -> set_sub t1 t2
-
-let rec set_meet v1 v2 =
-   match v1, v2 with
-      | [], _                          -> mql_false 
-      | _, []                          -> mql_false
-      | h1 :: t1, h2 :: _ when h1 < h2 -> set_meet t1 v2
-      | h1 :: _, h2 :: t2 when h1 > h2 -> set_meet v1 t2
-      | _, _                           -> mql_true
-
-let set_eq v1 v2 =
-   if v1 = v2 then mql_true else mql_false
-
-let rec set_union v1 v2 =
-   match v1, v2 with
-      | [], v                           -> v
-      | v, []                           -> v 
-      | h1 :: t1, h2 :: t2 when h1 < h2 -> h1 :: set_union t1 v2
-      | h1 :: t1, h2 :: t2 when h1 > h2 -> h2 :: set_union v1 t2
-      | h1 :: t1, _ :: t2               -> h1 :: set_union t1 t2
-
-let rec set_intersect v1 v2 =
-   match v1, v2 with
-      | [], v                          -> []
-      | v, []                          -> []
-      | h1 :: t1, h2 :: _ when h1 < h2 -> set_intersect t1 v2
-      | h1 :: _, h2 :: t2 when h1 > h2 -> set_intersect v1 t2
-      | h1 :: t1, _ :: t2              -> h1 :: set_intersect t1 t2
-
-let rec iter f = function
-   | []           -> []
-   | head :: tail -> set_union (f head) (iter f tail)  
-
-(* MathQL specific set operations  ******************************************)
-
-let rec mql_union s1 s2 =
-   match s1, s2 with
-      | [], s                                     -> s
-      | s, []                                     -> s
-      | (r1, g1) :: t1, (r2, _) :: _ when r1 < r2 ->
-         (r1, g1) :: mql_union t1 s2
-      | (r1, _) :: _, (r2, g2) :: t2 when r1 > r2 ->
-         (r2, g2) :: mql_union s1 t2
-      | (r1, g1) :: t1, (_, g2) :: t2             ->
-         (r1, set_union g1 g2) :: mql_union t1 t2
-
-let rec mql_iter f = function
-   | []           -> []
-   | head :: tail -> mql_union (f head) (mql_iter f tail)  
-
-let rec mql_iter2 f l1 l2 = match l1, l2 with
-   | [], []             -> []
-   | h1 :: t1, h2 :: t2 -> mql_union (f h1 h2) (mql_iter2 f t1 t2)
-   | _                  -> raise (Invalid_argument "mql_iter2")
-
-let rec mql_prod g1 g2 =
-   let mql_prod_aux a = iter (fun h -> [mql_union a h]) g2 in
-   iter mql_prod_aux g1      
-
-let rec mql_intersect s1 s2 =
-   match s1, s2 with
-      | [], s                                    -> []
-      | s, []                                    -> []
-      | (r1, _) :: t1, (r2, _) :: _ when r1 < r2 -> mql_intersect t1 s2
-      | (r1, _) :: _, (r2, _) :: t2 when r1 > r2 -> mql_intersect s1 t2
-      | (r1, g1) :: t1, (_, g2) :: t2            ->
-         (r1, set_intersect g1 g2) :: mql_intersect t1 t2
-
-let rec mql_diff s1 s2 =
-   match s1, s2 with
-      | [], _                                     -> []
-      | s, []                                     -> s
-      | (r1, g1) :: t1 , (r2, _) ::_ when r1 < r2 -> 
-         (r1, g1) :: (mql_diff t1 s2)
-      | (r1, _) :: _, (r2, _) :: t2 when r1 > r2  -> mql_diff s1 t2
-      | _ :: t1, _ :: t2                          -> mql_diff t1 t2
-
-(* logic operations  ********************************************************)
-
-let xor v1 v2 =
-   let b = v1 <> mql_false in 
-   if b && v2 <> mql_false then mql_false else
-   if b then v1 else v2
-
-(* numeric operations  ******************************************************)
-
-let int_of_list = function
-   | [s] -> int_of_string s
-   | _   -> raise (Failure "int_of_list")
-
-let le v1 v2 =
-   try if int_of_list v1 <= int_of_list v2 then mql_true else mql_false
-   with _ -> mql_false
-
-let lt v1 v2 =
-   try if int_of_list v1 < int_of_list v2 then mql_true else mql_false
-   with _ -> mql_false
-
-let align n v =
-   let c = String.length v in
-   try
-      let l = int_of_list [n] in
-      if c < l then [(String.make (l - c) ' ') ^ v] else [v] 
-   with _ -> [v]
-
-(* context handling  ********************************************************)
-
-let rec set ap = function
-   | []                                  -> [ap]
-   | head :: tail when fst head = fst ap -> ap :: tail
-   | head :: tail                        -> head :: set ap tail
diff --git a/helm/ocaml/mathql_interpreter/mQIUtil.mli b/helm/ocaml/mathql_interpreter/mQIUtil.mli
deleted file mode 100644 (file)
index 76735a8..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-val mql_true      : MathQL.value
-
-val mql_false     : MathQL.value
-
-val set_sub       : MathQL.value -> MathQL.value -> MathQL.value
-
-val set_meet      : MathQL.value -> MathQL.value -> MathQL.value
-
-val set_eq        : MathQL.value -> MathQL.value -> MathQL.value
-
-val set_union     : 'a list -> 'a list -> 'a list
-
-val set_intersect : 'a list -> 'a list -> 'a list
-
-val mql_union     : ('a * 'b list) list -> ('a * 'b list) list -> 
-                    ('a * 'b list) list
-
-val mql_prod      : MathQL.attribute_set -> MathQL.attribute_set ->
-                    MathQL.attribute_set
-
-val mql_intersect : MathQL.result -> MathQL.result -> MathQL.result
-
-val mql_diff      : MathQL.result -> MathQL.result -> MathQL.result
-
-val iter          : ('a -> 'b list) -> 'a list -> 'b list 
-
-val mql_iter      : ('c -> ('a * 'b list) list) -> 'c list -> 
-                    ('a * 'b list) list 
-
-val mql_iter2     : ('c -> 'd -> ('a * 'b list) list) -> 'c list -> 
-                    'd list -> ('a * 'b list) list 
-
-val xor           : MathQL.value -> MathQL.value -> MathQL.value 
-
-val le            : MathQL.value -> MathQL.value -> MathQL.value 
-
-val lt            : MathQL.value -> MathQL.value -> MathQL.value 
-
-val align         : string -> string -> MathQL.value
-
-val set           : string * 'a -> (string * 'a) list -> (string * 'a) list
diff --git a/helm/ocaml/mathql_interpreter/mQueryInterpreter.ml b/helm/ocaml/mathql_interpreter/mQueryInterpreter.ml
deleted file mode 100644 (file)
index 58fb7b8..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-(* contexts *****************************************************************)
-
-type svar_context = (MathQL.svar * MathQL.resource_set) list
-
-type avar_context = (MathQL.avar * MathQL.resource) list
-
-type group_context = (MathQL.avar * MathQL.attribute_group) list
-
-type vvar_context = (MathQL.vvar * MathQL.value) list
-
-type context = {svars: svar_context;   
-                avars: avar_context;   
-                groups: group_context; (* auxiliary context *)
-                vvars: vvar_context  
-               }
-
-(* execute  *****************************************************************)
-
-exception Found
-
-module M = MathQL
-module P = MQueryUtil 
-module C = MQIConn
-module U = MQIUtil
-
-let execute h x =
-   let warn q = 
-     if C.set h C.Warn then 
-     begin
-        C.log h "MQIExecute: waring: reference to undefined variables: ";
-       P.text_of_query (C.log h) q "\n"
-     end
-   in
-   let rec eval_val c = function
-      | M.False -> U.mql_false
-      | M.True -> U.mql_true
-      | M.Const s -> [s]
-      | M.Set l -> U.iter (eval_val c) l
-      | M.Test k y1 y2 ->
-         let cand y1 y2 =
-           if eval_val c y1 = U.mql_false then U.mql_false else eval_val c y2
-        in
-        let cor y1 y2 =
-            let v1 = eval_val c y1 in
-           if v1 = U.mql_false then eval_val c y2 else v1
-        in
-        let h f y1 y2 = f (eval_val c y1) (eval_val c y2) in
-         let f = match k with
-           | M.And  -> cand
-           | M.Or   -> cor
-           | M.Xor  -> h U.xor
-           | M.Sub  -> h U.set_sub
-           | M.Meet -> h U.set_meet
-           | M.Eq   -> h U.set_eq
-           | M.Le   -> h U.le
-           | M.Lt   -> h U.lt
-        in
-         f y1 y2 
-      | M.Not y -> 
-         if eval_val c y = U.mql_false then U.mql_true else U.mql_false
-      | M.VVar i -> begin
-         try List.assoc i c.vvars 
-         with Not_found -> warn (M.Subj (M.VVar i)); [] end
-      | M.Dot i p -> begin
-         try List.assoc p (List.assoc i c.groups) 
-        with Not_found -> warn (M.Subj (M.Dot i p)); [] end
-      | M.Proj None x -> List.map (fun (r, _) -> r) (eval_query c x)
-      | M.Proj (Some p) x -> 
-         let proj_group_aux (q, v) = if q = p then v else [] in 
-         let proj_group a = U.iter proj_group_aux a in
-         let proj_set (_, g) = U.iter proj_group g in
-         U.iter proj_set (eval_query c x)
-      | M.Ex l y -> 
-         let rec ex_aux h = function
-           | []        -> 
-              let d = {c with groups = h} in
-               if eval_val d y = U.mql_false then () else raise Found 
-           | i :: tail -> 
-               begin
-                 try 
-                    let (_, a) = List.assoc i c.avars in 
-                    let rec add_group = function
-                       | []     -> ()
-                       | g :: t -> ex_aux ((i, g) :: h) tail; add_group t 
-                    in
-                    add_group a
-                 with Not_found -> ()
-              end
-         in
-        (try ex_aux [] l; U.mql_false with Found -> U.mql_true)
-      | M.StatVal y ->
-         let t = P.start_time () in
-        let r = (eval_val c y) in
-        let s = P.stop_time t in
-         C.log h (Printf.sprintf "Stat: %s,%i\n" s (List.length r));
-        r
-      | M.Count y -> [string_of_int (List.length (eval_val c y))]
-      | M.Align s y -> U.iter (U.align s) (eval_val c y)
-   and eval_query c = function
-      | M.Empty -> [] 
-      | M.Subj x ->
-         List.map (fun s -> (s, [])) (eval_val c x)
-      | M.Log _ b x ->
-         if b then begin
-           let t = P.start_time () in
-           P.text_of_query (C.log h) x "\n";
-           let s = P.stop_time t in
-           if C.set h C.Stat then 
-              C.log h (Printf.sprintf "Log source: %s\n" s);
-           eval_query c x
-        end else begin
-            let s = (eval_query c x) in
-           let t = P.start_time () in
-           P.text_of_result (C.log h) s "\n"; 
-           let r = P.stop_time t in
-           if C.set h C.Stat then 
-              C.log h (Printf.sprintf "Log: %s\n" r);
-           s
-        end
-      | M.If y x1 x2 ->
-         if (eval_val c y) = U.mql_false 
-           then (eval_query c x2) else (eval_query c x1)
-      | M.Bin k x1 x2 ->
-         let f = match k with
-           | M.BinFJoin -> U.mql_union
-           | M.BinFMeet -> U.mql_intersect
-           | M.BinFDiff -> U.mql_diff
-        in
-        f (eval_query c x1) (eval_query c x2) 
-      | M.SVar i -> begin
-         try List.assoc i c.svars 
-        with Not_found -> warn (M.SVar i); [] end  
-      | M.AVar i -> begin
-         try [List.assoc i c.avars] 
-        with Not_found -> warn (M.AVar i); [] end
-      | M.LetSVar i x1 x2 ->
-        let d = {c with svars = U.set (i, eval_query c x1) c.svars} in
-         eval_query d x2
-      | M.LetVVar i y x ->
-        let d = {c with vvars = U.set (i, eval_val c y) c.vvars} in
-         eval_query d x
-      | M.For k i x1 x2 ->
-         let f = match k with
-           | M.GenFJoin -> U.mql_union
-           | M.GenFMeet -> U.mql_intersect
-        in
-         let rec for_aux = function
-           | []     -> []
-           | h :: t ->
-              let d = {c with avars = U.set (i, h) c.avars} in
-              f (eval_query d x2) (for_aux t)
-        in
-        for_aux (eval_query c x1)
-      | M.Add b z x ->
-         let f = if b then U.mql_prod else U.set_union in
-        let g a s = (fst a, f (snd a) (eval_grp c z)) :: s in
-        List.fold_right g (eval_query c x) []
-      | M.Property q0 q1 q2 mc ct cfl el pat y ->
-        let subj, mct = 
-           if q0 then [], (pat, q2 @ mc, eval_val c y)
-                 else (q2 @ mc), (pat, [], eval_val c y)  
-        in
-         let eval_cons (pat, p, y) = (pat, q2 @ p, eval_val c y) in
-        let cons_true = mct :: List.map eval_cons ct in
-        let cons_false = List.map (List.map eval_cons) cfl in
-        let eval_exp (p, po) = (q2 @ p, po) in
-        let exp = List.map eval_exp el in
-        let t = P.start_time () in
-        let r = MQIProperty.exec h q1 subj cons_true cons_false exp in 
-        let s = P.stop_time t in
-         if C.set h C.Stat then 
-           C.log h (Printf.sprintf "Property: %s,%i\n" s (List.length r));
-        r 
-      | M.StatQuery x ->
-         let t = P.start_time () in
-        let r = (eval_query c x) in
-        let s = P.stop_time t in
-         C.log h (Printf.sprintf "Stat: %s,%i\n" s (List.length r));
-        r
-      | M.Select i x y ->
-         let rec select_aux = function
-           | []     -> []
-           | h :: t ->
-              let d = {c with avars = U.set (i, h) c.avars} in
-              if eval_val d y = U.mql_false 
-                 then select_aux t else h :: select_aux t
-        in
-        select_aux (eval_query c x)
-      | M.Keep b l x -> 
-         let keep_path (p, v) t = 
-           if List.mem p l = b then t else (p, v) :: t in
-        let keep_grp a = List.fold_right keep_path a [] in
-         let keep_set a g = 
-           let kg = keep_grp a in
-           if kg = [] then g else kg :: g
-        in
-        let keep_av (s, g) = (s, List.fold_right keep_set g []) in
-        List.map keep_av (eval_query c x) 
-   and eval_grp c = function
-      | M.Attr gs ->
-         let attr_aux g (p, y) = U.mql_union g [(p, eval_val c y)] in
-        let attr_auxs s l = U.set_union s [List.fold_left attr_aux [] l] in
-        List.fold_left attr_auxs [] gs
-      | M.From i ->
-         try snd (List.assoc i c.avars) 
-        with Not_found -> warn (M.AVar i); []
-   in
-   let c = {svars = []; avars = []; groups = []; vvars = []} in
-   let t = P.start_time () in
-   let r = eval_query c x in
-   let s = P.stop_time t in
-   if C.set h C.Stat then 
-      C.log h (Printf.sprintf "MQIExecute: %s,%s\n" s 
-         (C.string_of_flags (C.flags h)));
-   r
diff --git a/helm/ocaml/mathql_interpreter/mQueryInterpreter.mli b/helm/ocaml/mathql_interpreter/mQueryInterpreter.mli
deleted file mode 100644 (file)
index 9d7081f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*  AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
- *)
-
-val execute : MQIConn.handle -> MathQL.query -> MathQL.result
diff --git a/helm/ocaml/mathql_interpreter/mQueryMisc.ml b/helm/ocaml/mathql_interpreter/mQueryMisc.ml
deleted file mode 100644 (file)
index cb6f92a..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 15/01/2003                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception IllFormedUri of string;;
-
-let string_of_cic_textual_parser_uri uri =
- let module C = Cic in
- let module CTP = CicTextualParser0 in
-  let uri' =
-   match uri with
-      CTP.ConUri uri -> UriManager.string_of_uri uri
-    | CTP.VarUri uri -> UriManager.string_of_uri uri
-    | CTP.IndTyUri (uri,tyno) ->
-       UriManager.string_of_uri uri ^ "#1/" ^ string_of_int (tyno + 1)
-    | CTP.IndConUri (uri,tyno,consno) ->
-       UriManager.string_of_uri uri ^ "#1/" ^ string_of_int (tyno + 1) ^ "/" ^
-        string_of_int consno
-  in
-   (* 4 = String.length "cic:" *)
-   String.sub uri' 4 (String.length uri' - 4)
-;;
-
-let cic_textual_parser_uri_of_string uri' =
- prerr_endline ("cic_textual_parser_uri_of_string INPUT = " ^ uri');
- try
-  (* Constant *)
-  if String.sub uri' (String.length uri' - 4) 4 = ".con" then
-   CicTextualParser0.ConUri (UriManager.uri_of_string uri')
-  else
-   if String.sub uri' (String.length uri' - 4) 4 = ".var" then
-    CicTextualParser0.VarUri (UriManager.uri_of_string uri')
-   else
-    (try
-      (* Inductive Type *)
-      let uri'',typeno = CicTextualLexer.indtyuri_of_uri uri' in
-       CicTextualParser0.IndTyUri (uri'',typeno)
-     with
-        UriManager.IllFormedUri _
-      | CicTextualParser0.LexerFailure _
-      | Invalid_argument _ ->
-         (* Constructor of an Inductive Type *)
-         let uri'',typeno,consno =
-          CicTextualLexer.indconuri_of_uri uri'
-         in
-          CicTextualParser0.IndConUri (uri'',typeno,consno)
-    )
- with
-    UriManager.IllFormedUri _
-  | CicTextualParser0.LexerFailure _
-  | Invalid_argument _ ->
-     raise (IllFormedUri uri')
-;;
-let cic_textual_parser_uri_of_string uri' =
-  let res = cic_textual_parser_uri_of_string uri' in
-  prerr_endline ("RESULT: " ^ (string_of_cic_textual_parser_uri res));
-  res
-
-(* CSC: quick fix: a function from [uri#xpointer(path)] to [uri#path] *)
-let wrong_xpointer_format_from_wrong_xpointer_format' uri =
- try
-  let index_sharp =  String.index uri '#' in
-  let index_rest = index_sharp + 10 in
-   let baseuri = String.sub uri 0 index_sharp in
-   let rest =
-    String.sub uri index_rest (String.length uri - index_rest - 1)
-   in
-    baseuri ^ "#" ^ rest
- with Not_found -> uri
-;;
-
-let term_of_cic_textual_parser_uri uri =
- let module C = Cic in
- let module CTP = CicTextualParser0 in
-  match uri with
-     CTP.ConUri uri -> C.Const (uri,[])
-   | CTP.VarUri uri -> C.Var (uri,[])
-   | CTP.IndTyUri (uri,tyno) -> C.MutInd (uri,tyno,[])
-   | CTP.IndConUri (uri,tyno,consno) -> C.MutConstruct (uri,tyno,consno,[])
-;;
diff --git a/helm/ocaml/mathql_interpreter/mQueryMisc.mli b/helm/ocaml/mathql_interpreter/mQueryMisc.mli
deleted file mode 100644 (file)
index 7c0aa74..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 15/01/2003                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-exception IllFormedUri of string
-
-val string_of_cic_textual_parser_uri : CicTextualParser0.uri -> string
-val cic_textual_parser_uri_of_string : string -> CicTextualParser0.uri
-val term_of_cic_textual_parser_uri: CicTextualParser0.uri -> Cic.term
-val wrong_xpointer_format_from_wrong_xpointer_format' : string -> string
diff --git a/helm/ocaml/pxp/.cvsignore b/helm/ocaml/pxp/.cvsignore
deleted file mode 100644 (file)
index 6b3eba3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa
diff --git a/helm/ocaml/pxp/.depend b/helm/ocaml/pxp/.depend
deleted file mode 100644 (file)
index c2a1a4b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-pxpUrlResolver.cmo: pxpUrlResolver.cmi 
-pxpUrlResolver.cmx: pxpUrlResolver.cmi 
diff --git a/helm/ocaml/pxp/Makefile b/helm/ocaml/pxp/Makefile
deleted file mode 100644 (file)
index 40f6983..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-PACKAGE = pxp
-REQUIRES = helm-getter
-PREDICATES =
-
-INTERFACE_FILES = pxpUrlResolver.mli
-IMPLEMENTATION_FILES = $(INTERFACE_FILES:%.mli=%.ml)
-EXTRA_OBJECTS_TO_INSTALL =
-EXTRA_OBJECTS_TO_CLEAN =
-
-include ../Makefile.common
diff --git a/helm/ocaml/pxp/pxpUrlResolver.ml b/helm/ocaml/pxp/pxpUrlResolver.ml
deleted file mode 100644 (file)
index 89d540e..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(* This resolver uses ClientHTTP to download the files from the Web *)
-let url_resolver =
- let url_of_id =
-  function
-     Pxp_types.System url ->
-      let http = Hashtbl.find Neturl.common_url_syntax "http" in
-       Neturl.url_of_string http url
-   | _ -> raise Pxp_reader.Not_competent
- in
- let channel_of_url _ url =
-  let file = ClientHTTP.get_and_save_to_tmp (Neturl.string_of_url url) in
-  let ch = open_in file in
-   Unix.unlink file ;
-   ch,None
- in
-  new Pxp_reader.resolve_read_url_channel
-   ~url_of_id ~channel_of_url ()
-;;
diff --git a/helm/ocaml/pxp/pxpUrlResolver.mli b/helm/ocaml/pxp/pxpUrlResolver.mli
deleted file mode 100644 (file)
index 07ac2fb..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(* This resolver uses ClientHTTP to download the files from the Web *)
-val url_resolver : Pxp_reader.resolver
diff --git a/helm/ocaml/tactics/.cvsignore b/helm/ocaml/tactics/.cvsignore
deleted file mode 100644 (file)
index 8d98e3e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-*.cmi
-*.cma
-*.cmo
-*.cmx
-*.cmxa
-*.o
-*.a
-.dep.dot
-tactics.ps
diff --git a/helm/ocaml/tactics/.depend b/helm/ocaml/tactics/.depend
deleted file mode 100644 (file)
index fd3a652..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-proofEngineHelpers.cmi: proofEngineTypes.cmo 
-tacticals.cmi: proofEngineTypes.cmo 
-reductionTactics.cmi: proofEngineTypes.cmo 
-proofEngineStructuralRules.cmi: proofEngineTypes.cmo 
-primitiveTactics.cmi: proofEngineTypes.cmo 
-variousTactics.cmi: proofEngineTypes.cmo 
-introductionTactics.cmi: proofEngineTypes.cmo 
-eliminationTactics.cmi: proofEngineTypes.cmo 
-negationTactics.cmi: proofEngineTypes.cmo 
-equalityTactics.cmi: proofEngineTypes.cmo 
-discriminationTactics.cmi: proofEngineTypes.cmo 
-ring.cmi: proofEngineTypes.cmo 
-fourierR.cmi: proofEngineTypes.cmo 
-tacticChaser.cmi: proofEngineTypes.cmo 
-proofEngineReduction.cmo: proofEngineReduction.cmi 
-proofEngineReduction.cmx: proofEngineReduction.cmi 
-proofEngineHelpers.cmo: proofEngineHelpers.cmi 
-proofEngineHelpers.cmx: proofEngineHelpers.cmi 
-fourier.cmo: fourier.cmi 
-fourier.cmx: fourier.cmi 
-tacticals.cmo: proofEngineTypes.cmo tacticals.cmi 
-tacticals.cmx: proofEngineTypes.cmx tacticals.cmi 
-reductionTactics.cmo: proofEngineReduction.cmi reductionTactics.cmi 
-reductionTactics.cmx: proofEngineReduction.cmx reductionTactics.cmi 
-proofEngineStructuralRules.cmo: proofEngineTypes.cmo \
-    proofEngineStructuralRules.cmi 
-proofEngineStructuralRules.cmx: proofEngineTypes.cmx \
-    proofEngineStructuralRules.cmi 
-primitiveTactics.cmo: proofEngineHelpers.cmi proofEngineReduction.cmi \
-    proofEngineTypes.cmo reductionTactics.cmi tacticals.cmi \
-    primitiveTactics.cmi 
-primitiveTactics.cmx: proofEngineHelpers.cmx proofEngineReduction.cmx \
-    proofEngineTypes.cmx reductionTactics.cmx tacticals.cmx \
-    primitiveTactics.cmi 
-variousTactics.cmo: primitiveTactics.cmi proofEngineHelpers.cmi \
-    proofEngineReduction.cmi proofEngineTypes.cmo tacticals.cmi \
-    variousTactics.cmi 
-variousTactics.cmx: primitiveTactics.cmx proofEngineHelpers.cmx \
-    proofEngineReduction.cmx proofEngineTypes.cmx tacticals.cmx \
-    variousTactics.cmi 
-introductionTactics.cmo: primitiveTactics.cmi proofEngineTypes.cmo \
-    introductionTactics.cmi 
-introductionTactics.cmx: primitiveTactics.cmx proofEngineTypes.cmx \
-    introductionTactics.cmi 
-eliminationTactics.cmo: primitiveTactics.cmi proofEngineStructuralRules.cmi \
-    tacticals.cmi eliminationTactics.cmi 
-eliminationTactics.cmx: primitiveTactics.cmx proofEngineStructuralRules.cmx \
-    tacticals.cmx eliminationTactics.cmi 
-negationTactics.cmo: eliminationTactics.cmi primitiveTactics.cmi \
-    proofEngineTypes.cmo tacticals.cmi variousTactics.cmi negationTactics.cmi 
-negationTactics.cmx: eliminationTactics.cmx primitiveTactics.cmx \
-    proofEngineTypes.cmx tacticals.cmx variousTactics.cmx negationTactics.cmi 
-equalityTactics.cmo: introductionTactics.cmi primitiveTactics.cmi \
-    proofEngineHelpers.cmi proofEngineReduction.cmi \
-    proofEngineStructuralRules.cmi proofEngineTypes.cmo reductionTactics.cmi \
-    tacticals.cmi equalityTactics.cmi 
-equalityTactics.cmx: introductionTactics.cmx primitiveTactics.cmx \
-    proofEngineHelpers.cmx proofEngineReduction.cmx \
-    proofEngineStructuralRules.cmx proofEngineTypes.cmx reductionTactics.cmx \
-    tacticals.cmx equalityTactics.cmi 
-discriminationTactics.cmo: eliminationTactics.cmi equalityTactics.cmi \
-    introductionTactics.cmi primitiveTactics.cmi proofEngineTypes.cmo \
-    tacticals.cmi discriminationTactics.cmi 
-discriminationTactics.cmx: eliminationTactics.cmx equalityTactics.cmx \
-    introductionTactics.cmx primitiveTactics.cmx proofEngineTypes.cmx \
-    tacticals.cmx discriminationTactics.cmi 
-ring.cmo: eliminationTactics.cmi equalityTactics.cmi primitiveTactics.cmi \
-    proofEngineStructuralRules.cmi proofEngineTypes.cmo tacticals.cmi \
-    ring.cmi 
-ring.cmx: eliminationTactics.cmx equalityTactics.cmx primitiveTactics.cmx \
-    proofEngineStructuralRules.cmx proofEngineTypes.cmx tacticals.cmx \
-    ring.cmi 
-fourierR.cmo: equalityTactics.cmi fourier.cmi primitiveTactics.cmi \
-    proofEngineHelpers.cmi proofEngineTypes.cmo reductionTactics.cmi ring.cmi \
-    tacticals.cmi fourierR.cmi 
-fourierR.cmx: equalityTactics.cmx fourier.cmx primitiveTactics.cmx \
-    proofEngineHelpers.cmx proofEngineTypes.cmx reductionTactics.cmx ring.cmx \
-    tacticals.cmx fourierR.cmi 
-tacticChaser.cmo: primitiveTactics.cmi proofEngineTypes.cmo tacticChaser.cmi 
-tacticChaser.cmx: primitiveTactics.cmx proofEngineTypes.cmx tacticChaser.cmi 
diff --git a/helm/ocaml/tactics/Makefile b/helm/ocaml/tactics/Makefile
deleted file mode 100644 (file)
index 0018ce2..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-PACKAGE = tactics
-REQUIRES = \
-       helm-cic_textual_parser helm-cic_proof_checking helm-cic_unification \
-       helm-mathql_interpreter helm-mathql_generator
-
-INTERFACE_FILES =      \
-       proofEngineReduction.mli proofEngineHelpers.mli \
-       tacticals.mli reductionTactics.mli proofEngineStructuralRules.mli       \
-       primitiveTactics.mli variousTactics.mli introductionTactics.mli \
-       eliminationTactics.mli negationTactics.mli equalityTactics.mli  \
-       discriminationTactics.mli ring.mli fourierR.mli tacticChaser.mli
-IMPLEMENTATION_FILES = \
-       proofEngineTypes.ml proofEngineReduction.ml proofEngineHelpers.ml       \
-       fourier.ml tacticals.ml reductionTactics.ml proofEngineStructuralRules.ml       \
-       primitiveTactics.ml variousTactics.ml introductionTactics.ml    \
-       eliminationTactics.ml negationTactics.ml equalityTactics.ml     \
-       discriminationTactics.ml ring.ml fourierR.ml tacticChaser.ml
-
-
-include ../Makefile.common
-
diff --git a/helm/ocaml/tactics/discriminationTactics.ml b/helm/ocaml/tactics/discriminationTactics.ml
deleted file mode 100644 (file)
index 4a349e5..0000000
+++ /dev/null
@@ -1,583 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-
-let rec injection_tac ~term ~status:((proof, goal) as status) = 
-  let module C = Cic in
-  let module U = UriManager in
-  let module P = PrimitiveTactics in
-  let module T = Tacticals in
-   let _,metasenv,_,_ = proof in
-    let _,context,_ = List.find (function (m,_,_) -> m=goal) metasenv in
-     let termty = (CicTypeChecker.type_of_aux' metasenv context term) in  
-      (match termty with
-          (C.Appl [(C.MutInd (equri, 0, [])) ; tty ; t1 ; t2])
-             when (U.eq equri (U.uri_of_string "cic:/Coq/Init/Logic/eq.ind"))
-             or (U.eq equri (U.uri_of_string "cic:/Coq/Init/Logic_Type/eqT.ind")) -> (
-           match tty with
-              (C.MutInd (turi,typeno,exp_named_subst))
-            | (C.Appl (C.MutInd (turi,typeno,exp_named_subst)::_)) -> (
-                   match t1,t2 with
-                      ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1)),
-                       (C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2)))
-                         when (uri1 = uri2) && (typeno1 = typeno2) && (consno1 = consno2) && (exp_named_subst1 = exp_named_subst2) ->
-                       (* raise (ProofEngineTypes.Fail "Injection: nothing to do") ; *) T.id_tac
-                    | ((C.Appl ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1))::applist1)),
-                       (C.Appl ((C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2))::applist2)))
-                         when (uri1 = uri2) && (typeno1 = typeno2) && (consno1 = consno2) && (exp_named_subst1 = exp_named_subst2) ->
-                       let rec traverse_list i l1 l2 =
-                         match l1,l2 with
-                            [],[] -> T.id_tac
-                          | hd1::tl1,hd2::tl2 -> 
-                             T.then_ 
-                              ~start:(injection1_tac ~i ~term)
-                              ~continuation:(traverse_list (i+1) tl1 tl2)
-                          | _ -> raise (ProofEngineTypes.Fail "Discriminate: i 2 termini hanno in testa lo stesso costruttore, ma applicato a un numero diverso di termini. possibile???") ; T.id_tac
-                       in traverse_list 1 applist1 applist2
-                    | ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1)),
-                       (C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2)))
-                    | ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1)),
-                       (C.Appl ((C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2))::_)))
-                    | ((C.Appl ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1))::_)),
-                       (C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2)))
-                    | ((C.Appl ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1))::_)),
-                       (C.Appl ((C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2))::_)))
-                         when (consno1 <> consno2) || (exp_named_subst1 <> exp_named_subst2) ->
-                       (* raise (ProofEngineTypes.Fail "Injection: not a projectable equality but a discriminable one") ; *) T.id_tac
-                    | _ -> (* raise (ProofEngineTypes.Fail "Injection: not a projectable equality") ; *) T.id_tac
-                   )
-            | _ -> raise (ProofEngineTypes.Fail "Injection: not a projectable equality")
-           )
-        | _ -> raise (ProofEngineTypes.Fail "Injection: not an equation")
-      ) ~status
-
-
-and injection1_tac ~term ~i ~status:((proof, goal) as status) = 
-(* precondizione: t1 e t2 hanno in testa lo stesso costruttore ma differiscono (o potrebbero differire?) nell'i-esimo parametro del costruttore *)
-  let module C = Cic in
-  let module S = CicSubstitution in
-  let module U = UriManager in
-  let module P = PrimitiveTactics in
-  let module T = Tacticals in
-   let _,metasenv,_,_ = proof in
-    let _,context,_ = List.find (function (m,_,_) -> m=goal) metasenv in
-     let termty = (CicTypeChecker.type_of_aux' metasenv context term) in
-      match termty with (* an equality *)
-         (C.Appl [(C.MutInd (equri, 0, [])) ; tty ; t1 ; t2])
-            when (U.eq equri (U.uri_of_string "cic:/Coq/Init/Logic/eq.ind"))
-            or (U.eq equri (U.uri_of_string "cic:/Coq/Init/Logic_Type/eqT.ind")) -> (
-          match tty with (* some inductive type *)
-             (C.MutInd (turi,typeno,exp_named_subst))
-           | (C.Appl (C.MutInd (turi,typeno,exp_named_subst)::_)) ->
-prerr_endline ("XXXX term " ^ CicPp.ppterm term) ;
-prerr_endline ("XXXX termty " ^ CicPp.ppterm termty) ;
-prerr_endline ("XXXX t1 " ^ CicPp.ppterm t1) ;
-prerr_endline ("XXXX t2 " ^ CicPp.ppterm t2) ;
-prerr_endline ("XXXX tty " ^ CicPp.ppterm tty) ;
-              let t1',t2',consno = (* sono i due sottotermini che differiscono *)
-               match t1,t2 with
-                  ((C.Appl ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1))::applist1)),
-                   (C.Appl ((C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2))::applist2)))
-                     when (uri1 = uri2) && (typeno1 = typeno2) && (consno1 = consno2) && (exp_named_subst1 = exp_named_subst2) -> (* controllo ridondante *)
-                   (List.nth applist1 (i-1)),(List.nth applist2 (i-1)),consno2
-                | _ -> raise (ProofEngineTypes.Fail "Injection: qui non dovrei capitarci mai")
-              in
-               let tty' = (CicTypeChecker.type_of_aux' metasenv context t1') in
-prerr_endline ("XXXX tty' " ^ CicPp.ppterm tty') ;
-prerr_endline ("XXXX t1' " ^ CicPp.ppterm t1') ;
-prerr_endline ("XXXX t2' " ^ CicPp.ppterm t2') ;
-prerr_endline ("XXXX consno " ^ string_of_int consno) ;
-               let pattern =
-                     match (CicEnvironment.get_obj turi) with
-                        C.InductiveDefinition (ind_type_list,_,nr_ind_params_dx)  ->
-                         let _,_,_,constructor_list = (List.nth ind_type_list typeno) in
-                          let i_constr_id,_ = List.nth constructor_list (consno - 1) in
-                           List.map
-                            (function (id,cty) ->
-                              let reduced_cty = CicReduction.whd context cty in
-                               let rec aux t k =
-                                match t with
-                                   C.Prod (_,_,target) when (k <= nr_ind_params_dx) ->
-                                    aux target (k+1)
-                                 | C.Prod (binder,source,target) when (k > nr_ind_params_dx) ->
-                                   let binder' =
-                                     match binder with
-                                        C.Name b -> C.Name b
-                                      | C.Anonymous -> C.Name "y"
-                                    in
-                                     C.Lambda (binder',source,(aux target (k+1)))
-                                 | _ ->
-                                    let nr_param_constr = k - 1 - nr_ind_params_dx in
-                                     if (id = i_constr_id)
-                                      then C.Rel (nr_param_constr - i + 1)
-                                      else S.lift (nr_param_constr + 1) t1' (* + 1 per liftare anche il lambda agguinto esternamente al case *)
-                               in aux reduced_cty 1
-                            )
-                            constructor_list
-                      | _ -> raise (ProofEngineTypes.Fail "Discriminate: object is not an Inductive Definition: it's imposible")
-               in
-prerr_endline ("XXXX cominciamo!") ;
-                T.thens 
-                 ~start:(P.cut_tac (C.Appl [(C.MutInd (equri,0,[])) ; tty' ; t1' ; t2']))
-                 ~continuations:[
-                   T.then_ 
-                    ~start:(injection_tac ~term:(C.Rel 1))
-                    ~continuation:T.id_tac (* !!! qui devo anche fare clear di term tranne al primo passaggio *) 
-                   ;
-                   T.then_ 
-                    ~start:
-                      (fun ~status:((proof,goal) as status) ->    
-                        let _,metasenv,_,_ = proof in
-                         let _,context,gty = List.find (function (m,_,_) -> m=goal) metasenv in
-prerr_endline ("XXXX goal " ^ string_of_int goal) ;
-prerr_endline ("XXXX gty " ^ CicPp.ppterm gty) ;
-prerr_endline ("XXXX old t1' " ^ CicPp.ppterm t1') ;
-prerr_endline ("XXXX change " ^ CicPp.ppterm (C.Appl [ C.Lambda (C.Name "x", tty, C.MutCase (turi, typeno, (C.Lambda ((C.Name "x"),(S.lift 1 tty),(S.lift 2 tty'))), (C.Rel 1), pattern)); t1])) ;
-                          let new_t1' = 
-                           match gty with 
-                              (C.Appl (C.MutInd (_,_,_)::arglist)) -> 
-                               List.nth arglist 1
-                            | _ -> raise (ProofEngineTypes.Fail "Injection: goal after cut is not correct")
-                          in
-prerr_endline ("XXXX new t1' " ^ CicPp.ppterm new_t1') ;
-                           P.change_tac
-                              ~what:new_t1'
-                              ~with_what:
-                                (C.Appl [
-                                  C.Lambda (
-                                   C.Name "x", tty,
-                                   C.MutCase (
-                                    turi, typeno,
-                                    (C.Lambda (
-                                     (C.Name "x"),
-                                     (S.lift 1 tty),
-                                     (S.lift 2 tty'))),
-                                    (C.Rel 1), pattern
-                                   )
-                                  );
-                                  t1]
-                                )
-                       ~status
-                      )
-                    ~continuation:
-                      (T.then_
-                        ~start:(EqualityTactics.rewrite_simpl_tac ~term)
-                        ~continuation:EqualityTactics.reflexivity_tac
-                      )
-                  ]     
-                 ~status
-           | _ -> raise (ProofEngineTypes.Fail "Discriminate: not a discriminable equality")
-          )
-       | _ -> raise (ProofEngineTypes.Fail "Discriminate: not an equality")
-;;
-
-
-
-exception TwoDifferentSubtermsFound of int 
-
-(* term ha tipo t1=t2; funziona solo se t1 e t2 hanno in testa costruttori
-diversi *)
-
-let discriminate'_tac ~term ~status:((proof, goal) as status) = 
-  let module C = Cic in
-  let module U = UriManager in
-  let module P = PrimitiveTactics in
-  let module T = Tacticals in
-   let _,metasenv,_,_ = proof in
-    let _,context,_ = List.find (function (m,_,_) -> m=goal) metasenv in
-     let termty = (CicTypeChecker.type_of_aux' metasenv context term) in
-      match termty with
-         (C.Appl [(C.MutInd (equri, 0, [])) ; tty ; t1 ; t2]) 
-          when (U.eq equri (U.uri_of_string "cic:/Coq/Init/Logic/eq.ind")) 
-            or (U.eq equri (U.uri_of_string "cic:/Coq/Init/Logic_Type/eqT.ind")) -> (
-           match tty with
-              (C.MutInd (turi,typeno,exp_named_subst))
-            | (C.Appl (C.MutInd (turi,typeno,exp_named_subst)::_)) ->
-
-                let consno2 = (* bruuutto: uso un eccezione per terminare con successo! buuu!! :-/ *)
-                 try
-                  let rec traverse t1 t2 =
-prerr_endline ("XXXX t1 " ^ CicPp.ppterm t1) ;
-prerr_endline ("XXXX t2 " ^ CicPp.ppterm t2) ;
-                   match t1,t2 with
-                      ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1)),
-                       (C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2)))
-                         when (uri1 = uri2) && (typeno1 = typeno2) && (consno1 = consno2) && (exp_named_subst1 = exp_named_subst2) ->
-                       0
-                    | ((C.Appl ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1))::applist1)),
-                       (C.Appl ((C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2))::applist2))) 
-                         when (uri1 = uri2) && (typeno1 = typeno2) && (consno1 = consno2) && (exp_named_subst1 = exp_named_subst2) ->
-                       let rec traverse_list l1 l2 =
-                         match l1,l2 with
-                            [],[] -> 0
-                          | hd1::tl1,hd2::tl2 -> traverse hd1 hd2; traverse_list tl1 tl2
-                          | _ -> raise (ProofEngineTypes.Fail "Discriminate: i 2 termini hanno in testa lo stesso costruttore, ma applicato a un numero diverso di termini. possibile???")
-                       in traverse_list applist1 applist2
-
-                    | ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1)),
-                       (C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2)))
-                    | ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1)),
-                       (C.Appl ((C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2))::_)))
-                    | ((C.Appl ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1))::_)),
-                       (C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2)))
-                    | ((C.Appl ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1))::_)),
-                       (C.Appl ((C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2))::_)))
-                         when (consno1 <> consno2) || (exp_named_subst1 <> exp_named_subst2) ->
-                       raise (TwoDifferentSubtermsFound consno2)
-                    | _ -> raise (ProofEngineTypes.Fail "Discriminate: not a discriminable equality")
-                  in traverse t1 t2
-                 with (TwoDifferentSubtermsFound consno2) -> consno2
-                in
-prerr_endline ("XXXX consno2 " ^ (string_of_int consno2)) ;
-                 if consno2 = 0 
-                  then raise (ProofEngineTypes.Fail "Discriminate: Discriminating terms are structurally equal")
-                  else
-
-                   let pattern = 
-                     (* a list of "True" except for the element in position consno2 which is "False" *)
-                     match (CicEnvironment.get_obj turi) with
-                        C.InductiveDefinition (ind_type_list,_,nr_ind_params)  ->
-prerr_endline ("XXXX nth " ^ (string_of_int (List.length ind_type_list)) ^ " " ^ (string_of_int typeno)) ;
-                         let _,_,_,constructor_list = (List.nth ind_type_list typeno) in 
-prerr_endline ("XXXX nth " ^ (string_of_int (List.length constructor_list)) ^ " " ^ (string_of_int consno2)) ;
-                          let false_constr_id,_ = List.nth constructor_list (consno2 - 1) in
-prerr_endline ("XXXX nth funzionano ") ;
-                           List.map 
-                            (function (id,cty) ->
-                              let red_ty = CicReduction.whd context cty in (* dubbio: e' corretto ridurre in questo context ??? *)
-                               let rec aux t k =
-                                match t with
-                                   C.Prod (_,_,target) when (k <= nr_ind_params) ->
-                                    aux target (k+1)
-                                 | C.Prod (binder,source,target) when (k > nr_ind_params) -> 
-                                    C.Lambda (binder,source,(aux target (k+1)))
-                                 | _ -> 
-                                    if (id = false_constr_id)
-                                     then (C.MutInd (U.uri_of_string "cic:/Coq/Init/Logic/False.ind") 0 [])
-                                     else (C.MutInd (U.uri_of_string "cic:/Coq/Init/Logic/True.ind") 0 [])
-                               in aux red_ty 1
-                            ) 
-                            constructor_list
-                      | _ -> raise (ProofEngineTypes.Fail "Discriminate: object is not an Inductive Definition: it's imposible")
-                   in
-
-                    let (proof',goals') = 
-                     EliminationTactics.elim_type_tac 
-                      ~term:(C.MutInd (U.uri_of_string "cic:/Coq/Init/Logic/False.ind") 0 [] ) 
-                      ~status 
-                    in
-                     (match goals' with
-                         [goal'] -> 
-                          let _,metasenv',_,_ = proof' in
-                           let _,context',gty' = List.find (function (m,_,_) -> m=goal') metasenv' in
-prerr_endline ("XXXX gty " ^ CicPp.ppterm gty') ;
-prerr_endline ("XXXX tty " ^ CicPp.ppterm tty) ;
-prerr_endline ("XXXX t1 " ^ CicPp.ppterm t1) ;
-prerr_endline ("XXXX t2 " ^ CicPp.ppterm t2) ;
-ignore (List.map (fun t -> prerr_endline ("XXXX t " ^ CicPp.ppterm t)) pattern) ;
-prerr_endline ("XXXX case " ^ CicPp.ppterm (C.Appl [
-                                  C.Lambda (
-                                   C.Name "x", tty,
-                                   C.MutCase (
-                                    turi, typeno,
-                                    (C.Lambda ((C.Name "x"),tty,(C.Sort C.Prop))),
-                                    (C.Rel 1), pattern
-                                   )
-                                  ); t2])) ;
-                            T.then_
-                             ~start:
-                              (P.change_tac 
-                               ~what:gty' 
-                               ~with_what:
-                                (C.Appl [
-                                  C.Lambda (
-                                   C.Name "x", tty, 
-                                   C.MutCase (
-                                    turi, typeno,
-                                    (C.Lambda ((C.Name "x"),tty,(C.Sort C.Prop))),
-                                    (C.Rel 1), pattern
-                                   )
-                                  ); 
-                                  t2]
-                                )
-                              )
-                             ~continuation:
-                              (
-prerr_endline ("XXXX rewrite<-: " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' (C.Appl [(C.MutInd (equri,0,[])) ; tty ; t1 ; t2])));
-prerr_endline ("XXXX rewrite<-: " ^ CicPp.ppterm (C.Appl [(C.MutInd (equri,0,[])) ; tty ; t1 ; t2])) ;
-prerr_endline ("XXXX equri: " ^ U.string_of_uri equri) ;
-prerr_endline ("XXXX tty : " ^ CicPp.ppterm tty) ;
-prerr_endline ("XXXX tt1': " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' t1)) ;
-prerr_endline ("XXXX tt2': " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' t2)) ;
-if (CicTypeChecker.type_of_aux' metasenv' context' t1) <> tty then prerr_endline ("XXXX tt1': " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' t1)) ;
-if (CicTypeChecker.type_of_aux' metasenv' context' t2) <> tty then prerr_endline ("XXXX tt2': " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' t2)) ;
-if (CicTypeChecker.type_of_aux' metasenv' context' t1) <> (CicTypeChecker.type_of_aux' metasenv' context' t2) 
- then prerr_endline ("XXXX tt1': " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' t1)) ; prerr_endline ("XXXX tt2': " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' t2)) ;
-prerr_endline ("XXXX rewrite<- " ^ CicPp.ppterm term ^ " : " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' term));
-                                 T.then_
-                                   ~start:(EqualityTactics.rewrite_back_simpl_tac ~term)
-                                   ~continuation:(IntroductionTactics.constructor_tac ~n:1) 
-                              )
-                             ~status:(proof',goal')
-                       | _ -> raise (ProofEngineTypes.Fail "Discriminate: ElimType False left more (or less) than one goal")
-                     )    
-            | _ -> raise (ProofEngineTypes.Fail "Discriminate: not a discriminable equality")
-           )
-       | _ -> raise (ProofEngineTypes.Fail "Discriminate: not an equality")
-;;
-
-
-let discriminate_tac ~term ~status =
-  Tacticals.then_
-   ~start:(* (injection_tac ~term) *) Tacticals.id_tac
-   ~continuation:(discriminate'_tac ~term) (* NOOO!!! non term ma una (qualunque) delle nuove hyp introdotte da inject *)
-   ~status
-;;
-
-
-
-let decide_equality_tac =
-(* il goal e' un termine della forma t1=t2\/~t1=t2; la tattica decide se l'uguaglianza
-e' vera o no e lo risolve *)
-  Tacticals.id_tac
-;;
-
-
-
-let compare_tac ~term ~status:((proof, goal) as status) = Tacticals.id_tac ~status
-(*
-(* term is in the form t1=t2; the tactic leaves two goals: in the first you have to          *)
-(* demonstrate the goal with the additional hyp that t1=t2, in the second the hyp is ~t1=t2  *)
-  let module C = Cic in
-  let module U = UriManager in
-  let module P = PrimitiveTactics in
-  let module T = Tacticals in
-   let _,metasenv,_,_ = proof in
-    let _,context,gty = List.find (function (m,_,_) -> m=goal) metasenv in
-     let termty = (CicTypeChecker.type_of_aux' metasenv context term) in
-      match termty with
-         (C.Appl [(C.MutInd (uri, 0, [])); _; t1; t2]) when (uri = (U.uri_of_string "cic:/Coq/Init/Logic/eq.ind")) ->
-          
-          let term' = (* (t1=t2)\/~(t1=t2) *)
-           C.Appl [
-            (C.MutInd ((U.uri_of_string "cic:/Coq/Init/Logic/or.ind"), 0, [])) ; 
-            term ; 
-            C.Appl [
-             (C.MutInd ((U.uri_of_string "cic:/Coq/Init/Logic/eq.ind"), 1, [])) ; 
-             t1 ; 
-             C.Appl [C.Const ((U.uri_of_string "cic:/Coq/Init/Logic/not.con"), []) ; t2]
-            ]
-           ] 
-          in
-            T.thens 
-               ~start:(P.cut_tac ~term:term')
-               ~continuations:[
-                 T.then_ ~start:(P.intros_tac) ~continuation:(P.elim_intros_simpl_tac ~term:(C.Rel 1)) ; 
-                 decide_equality_tac]  
-               ~status
-      | (C.Appl [(C.MutInd (uri, 0, [])); _; t1; t2]) when (uri = (U.uri_of_string "cic:/Coq/Init/Logic_Type/eqT.ind")) ->
-          let term' = (* (t1=t2) \/ ~(t1=t2) *)
-           C.Appl [
-            (C.MutInd ((U.uri_of_string "cic:/Coq/Init/Logic/or.ind"), 0, [])) ; 
-            term ; 
-            C.Appl [
-             (C.MutInd ((U.uri_of_string "cic:/Coq/Init/Logic_Type/eqT.ind"), 1, [])) ; 
-             t1 ; 
-             C.Appl [C.Const ((U.uri_of_string "cic:/Coq/Init/Logic/not.con"), []) ; t2]
-            ]
-           ] 
-          in
-            T.thens 
-               ~start:(P.cut_tac ~term:term')
-               ~continuations:[
-                 T.then_ ~start:(P.intros_tac) ~continuation:(P.elim_intros_simpl_tac ~term:(C.Rel 1)) ; 
-                 decide_equality_tac]  
-               ~status
-      | _ -> raise (ProofEngineTypes.Fail "Compare: Not an equality") 
-*)
-;;
-
-
-
-(* DISCRIMINTATE SENZA INJECTION 
-
-exception TwoDifferentSubtermsFound of (Cic.term * Cic.term * int) 
-
-let discriminate_tac ~term ~status:((proof, goal) as status) =
-  let module C = Cic in
-  let module U = UriManager in
-  let module P = PrimitiveTactics in
-  let module T = Tacticals in
-   let _,metasenv,_,_ = proof in
-    let _,context,_ = List.find (function (m,_,_) -> m=goal) metasenv in
-     let termty = (CicTypeChecker.type_of_aux' metasenv context term) in
-      match termty with
-         (C.Appl [(C.MutInd (equri, 0, [])) ; tty ; t1 ; t2]) 
-          when (U.eq equri (U.uri_of_string "cic:/Coq/Init/Logic/eq.ind")) 
-            or (U.eq equri (U.uri_of_string "cic:/Coq/Init/Logic_Type/eqT.ind")) -> (
-           match tty with
-              (C.MutInd (turi,typeno,exp_named_subst))
-            | (C.Appl (C.MutInd (turi,typeno,exp_named_subst)::_)) ->
-
-                let (t1',t2',consno2') = (* bruuutto: uso un eccezione per terminare con successo! buuu!! :-/ *)
-                 try
-                  let rec traverse t1 t2 =
-prerr_endline ("XXXX t1 " ^ CicPp.ppterm t1) ;
-prerr_endline ("XXXX t2 " ^ CicPp.ppterm t2) ;
-                   match t1,t2 with
-                      ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1)),
-                       (C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2)))
-                         when (uri1 = uri2) && (typeno1 = typeno2) && (consno1 = consno2) && (exp_named_subst1 = exp_named_subst2) ->
-                       t1,t2,0
-                    | ((C.Appl ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1))::applist1)),
-                       (C.Appl ((C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2))::applist2))) 
-                         when (uri1 = uri2) && (typeno1 = typeno2) && (consno1 = consno2) && (exp_named_subst1 = exp_named_subst2) ->
-                       let rec traverse_list l1 l2 =
-                         match l1,l2 with
-                            [],[] -> t1,t2,0
-                          | hd1::tl1,hd2::tl2 -> traverse hd1 hd2; traverse_list tl1 tl2
-                          | _ -> raise (ProofEngineTypes.Fail "Discriminate: i 2 termini hanno in testa lo stesso costruttore, ma applicato a un numero diverso di termini. possibile???")
-                       in traverse_list applist1 applist2
-
-                    | ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1)),
-                       (C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2)))
-                    | ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1)),
-                       (C.Appl ((C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2))::_)))
-                    | ((C.Appl ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1))::_)),
-                       (C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2)))
-                    | ((C.Appl ((C.MutConstruct (uri1,typeno1,consno1,exp_named_subst1))::_)),
-                       (C.Appl ((C.MutConstruct (uri2,typeno2,consno2,exp_named_subst2))::_)))
-                         when (consno1 <> consno2) || (exp_named_subst1 <> exp_named_subst2) ->
-                       raise (TwoDifferentSubtermsFound (t1,t2,consno2))
-                    | _ -> raise (ProofEngineTypes.Fail "Discriminate: not a discriminable equality")
-                  in traverse t1 t2
-                 with (TwoDifferentSubtermsFound (t1,t2,consno2)) -> (t1,t2,consno2)
-                in
-prerr_endline ("XXXX consno2' " ^ (string_of_int consno2')) ;
-                 if consno2' = 0 
-                  then raise (ProofEngineTypes.Fail "Discriminate: Discriminating terms are structurally equal")
-                  else
-
-                   let pattern = 
-                     (* a list of "True" except for the element in position consno2' which is "False" *)
-                     match (CicEnvironment.get_obj turi) with
-                        C.InductiveDefinition (ind_type_list,_,nr_ind_params)  ->
-prerr_endline ("XXXX nth " ^ (string_of_int (List.length ind_type_list)) ^ " " ^ (string_of_int typeno)) ;
-                         let _,_,_,constructor_list = (List.nth ind_type_list typeno) in 
-prerr_endline ("XXXX nth " ^ (string_of_int (List.length constructor_list)) ^ " " ^ (string_of_int consno2')) ;
-                          let false_constr_id,_ = List.nth constructor_list (consno2' - 1) in
-prerr_endline ("XXXX nth funzionano ") ;
-                           List.map 
-                            (function (id,cty) ->
-                              let red_ty = CicReduction.whd context cty in (* dubbio: e' corretto ridurre in questo context ??? *)
-                               let rec aux t k =
-                                match t with
-                                   C.Prod (_,_,target) when (k <= nr_ind_params) ->
-                                    aux target (k+1)
-                                 | C.Prod (binder,source,target) when (k > nr_ind_params) -> 
-                                    C.Lambda (binder,source,(aux target (k+1)))
-                                 | _ -> 
-                                    if (id = false_constr_id)
-                                     then (C.MutInd (U.uri_of_string "cic:/Coq/Init/Logic/False.ind") 0 [])
-                                     else (C.MutInd (U.uri_of_string "cic:/Coq/Init/Logic/True.ind") 0 [])
-                               in aux red_ty 1
-                            ) 
-                            constructor_list
-                      | _ -> raise (ProofEngineTypes.Fail "Discriminate: object is not an Inductive Definition: it's imposible")
-                   in
-
-                    let (proof',goals') = 
-                     EliminationTactics.elim_type_tac 
-                      ~term:(C.MutInd (U.uri_of_string "cic:/Coq/Init/Logic/False.ind") 0 [] ) 
-                      ~status 
-                    in
-                     (match goals' with
-                         [goal'] -> 
-                          let _,metasenv',_,_ = proof' in
-                           let _,context',gty' = List.find (function (m,_,_) -> m=goal') metasenv' in
-prerr_endline ("XXXX gty " ^ CicPp.ppterm gty') ;
-prerr_endline ("XXXX tty " ^ CicPp.ppterm tty) ;
-prerr_endline ("XXXX t1' " ^ CicPp.ppterm t1') ;
-prerr_endline ("XXXX t2' " ^ CicPp.ppterm t2') ;
-ignore (List.map (fun t -> prerr_endline ("XXXX t " ^ CicPp.ppterm t)) pattern) ;
-prerr_endline ("XXXX case " ^ CicPp.ppterm (C.Appl [
-                                  C.Lambda (
-                                   C.Name "x", tty,
-                                   C.MutCase (
-                                    turi, typeno,
-                                    (C.Lambda ((C.Name "x"),tty,(C.Sort C.Prop))),
-                                    (C.Rel 1), pattern
-                                   )
-                                  ); t2'])) ;
-                            T.then_
-                             ~start:
-                              (P.change_tac 
-                               ~what:gty' 
-                               ~with_what:
-                                (C.Appl [
-                                  C.Lambda (
-                                   C.Name "x", tty, 
-                                   C.MutCase (
-                                    turi, typeno,
-                                    (C.Lambda ((C.Name "x"),tty,(C.Sort C.Prop))),
-                                    (C.Rel 1), pattern
-                                   )
-                                  ); 
-                                  t2']
-                                )
-                              )
-                             ~continuation:
-                              (
-prerr_endline ("XXXX rewrite<-: " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' (C.Appl [(C.MutInd (equri,0,[])) ; tty ; t1' ; t2'])));
-prerr_endline ("XXXX rewrite<-: " ^ CicPp.ppterm (C.Appl [(C.MutInd (equri,0,[])) ; tty ; t1' ; t2'])) ;
-prerr_endline ("XXXX equri: " ^ U.string_of_uri equri) ;
-prerr_endline ("XXXX tty : " ^ CicPp.ppterm tty) ;
-prerr_endline ("XXXX tt1': " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' t1')) ;
-prerr_endline ("XXXX tt2': " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' t2')) ;
-if (CicTypeChecker.type_of_aux' metasenv' context' t1') <> tty then prerr_endline ("XXXX tt1': " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' t1')) ;
-if (CicTypeChecker.type_of_aux' metasenv' context' t2') <> tty then prerr_endline ("XXXX tt2': " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' t2')) ;
-if (CicTypeChecker.type_of_aux' metasenv' context' t1') <> (CicTypeChecker.type_of_aux' metasenv' context' t2') 
- then prerr_endline ("XXXX tt1': " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' t1')) ; prerr_endline ("XXXX tt2': " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' t2')) ;
-
-                               let termty' = ProofEngineReduction.replace_lifting ~equality:(==) ~what:t1 ~with_what:t1' ~where:termty in
-                                let termty'' = ProofEngineReduction.replace_lifting ~equality:(==) ~what:t2 ~with_what:t2' ~where:termty' in
-
-prerr_endline ("XXXX rewrite<- " ^ CicPp.ppterm term ^ " : " ^ CicPp.ppterm (CicTypeChecker.type_of_aux' metasenv' context' term));
-                                 T.then_
-                                   ~start:(EqualityTactics.rewrite_back_simpl_tac ~term:term)
-                                   ~continuation:(IntroductionTactics.constructor_tac ~n:1) 
-                              )
-                             ~status:(proof',goal')
-                       | _ -> raise (ProofEngineTypes.Fail "Discriminate: ElimType False left more (or less) than one goal")
-                     )    
-            | _ -> raise (ProofEngineTypes.Fail "Discriminate: not a discriminable equality")
-           )
-       | _ -> raise (ProofEngineTypes.Fail "Discriminate: not an equality")
-;;
-
-*)
-
-
-
diff --git a/helm/ocaml/tactics/discriminationTactics.mli b/helm/ocaml/tactics/discriminationTactics.mli
deleted file mode 100644 (file)
index f115325..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val injection_tac: term:Cic.term -> ProofEngineTypes.tactic
-val discriminate_tac: term:Cic.term -> ProofEngineTypes.tactic
-val decide_equality_tac: ProofEngineTypes.tactic
-val compare_tac: term:Cic.term -> ProofEngineTypes.tactic
-
diff --git a/helm/ocaml/tactics/eliminationTactics.ml b/helm/ocaml/tactics/eliminationTactics.ml
deleted file mode 100644 (file)
index b614109..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- *
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- *
- * HELM 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.
- *
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- *
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(** DEBUGGING *)
-
-  (** perform debugging output? *)
-let debug = false
-
-  (** debugging print *)
-let warn s =
-  if debug then
-    prerr_endline ("DECOMPOSE: " ^ s)
-
-
-
-(*
-let induction_tac ~term ~status:((proof,goal) as status) =
-  let module C = Cic in
-  let module R = CicReduction in
-  let module P = PrimitiveTactics in
-  let module T = Tacticals in
-  let module S = ProofEngineStructuralRules in
-  let module U = UriManager in 
-   let (_,metasenv,_,_) = proof in
-    let _,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-     let termty = CicTypeChecker.type_of_aux' metasenv context term in (* per ora non serve *)
-
-     T.then_ ~start:(T.repeat_tactic 
-                       ~tactic:(T.then_ ~start:(VariousTactics.generalize_tac ~term) (* chissa' se cosi' funziona? *)
-                       ~continuation:(P.intros))
-             ~continuation:(P.elim_intros_simpl ~term)
-             ~status
-;;
-*)
-
-
-let elim_type_tac ~term ~status =
-  let module C = Cic in
-  let module P = PrimitiveTactics in
-  let module T = Tacticals in
-   T.thens
-    ~start: (P.cut_tac term)
-    ~continuations:[ P.elim_intros_simpl_tac ~term:(C.Rel 1) ; T.id_tac ]
-    ~status
-;;
-
-
-(* Decompose related stuff *)
-
-exception InteractiveUserUriChoiceNotRegistered
-
-let interactive_user_uri_choice =
- (ref (fun ~selection_mode -> raise InteractiveUserUriChoiceNotRegistered) :
-  (selection_mode:[`SINGLE | `EXTENDED] ->
-      ?ok:string ->
-      ?enable_button_for_non_vars:bool ->
-      title:string -> msg:string -> string list -> string list) ref)
-;;
-
-exception IllFormedUri of string
-
-let cic_textual_parser_uri_of_string uri' =
- try
-  (* Constant *)
-  if String.sub uri' (String.length uri' - 4) 4 = ".con" then
-   CicTextualParser0.ConUri (UriManager.uri_of_string uri')
-  else
-   if String.sub uri' (String.length uri' - 4) 4 = ".var" then
-    CicTextualParser0.VarUri (UriManager.uri_of_string uri')
-   else
-    (try
-      (* Inductive Type *)
-      let uri'',typeno = CicTextualLexer.indtyuri_of_uri uri' in
-       CicTextualParser0.IndTyUri (uri'',typeno)
-     with
-      _ ->
-       (* Constructor of an Inductive Type *)
-       let uri'',typeno,consno =
-        CicTextualLexer.indconuri_of_uri uri'
-       in
-        CicTextualParser0.IndConUri (uri'',typeno,consno)
-    )
- with
-  _ -> raise (IllFormedUri uri')
-;;
-
-(*
-let constructor_uri_of_string uri = 
-  match cic_textual_parser_uri_of_string uri with
-     CicTextualParser0.IndTyUri (uri,typeno) -> (uri,typeno,[])
-   | _ -> assert false
-;;
-
-let call_back uris = 
-(* N.B.: nella finestra c'e' un campo "nessuno deei precedenti, prova questo" che non ha senso? *)
-(* N.B.: in questo passaggio perdo l'informazione su exp_named_subst !!!! *)
-(* domanda: due triple possono essere diverse solo per avere exp_named_subst diverse?? *)
-  let module U = UriManager in 
-   List.map 
-    (constructor_uri_of_string)
-    (!interactive_user_uri_choice 
-      ~selection_mode:`EXTENDED ~ok:"Ok" ~enable_button_for_non_vars:false 
-      ~title:"Decompose" ~msg:"Please, select the Inductive Types to decompose" 
-      (List.map 
-        (function (uri,typeno,_) -> U.string_of_uri uri ^ "#1/" ^ string_of_int (typeno+1)) 
-        uris)
-    ) 
-;;
-*)
-
-let decompose_tac ?(uris_choice_callback=(function l -> l)) term ~status:((proof,goal) as status) =
-  let module C = Cic in
-  let module R = CicReduction in
-  let module P = PrimitiveTactics in
-  let module T = Tacticals in
-  let module S = ProofEngineStructuralRules in
-   let _,metasenv,_,_ = proof in
-    let _,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-     let old_context_len = List.length context in
-     let termty = CicTypeChecker.type_of_aux' metasenv context term in
-
-      let rec make_list termty = 
-      (* N.B.: altamente inefficente? *)
-       let rec search_inductive_types urilist termty =
-        (* search in term the Inductive Types and return a list of uris as triples like this: (uri,typeno,exp_named_subst) *)
-        match termty with
-           (C.MutInd (uri,typeno,exp_named_subst)) (* when (not (List.mem (uri,typeno,exp_named_subst) urilist)) *) -> 
-               (uri,typeno,exp_named_subst)::urilist
-         | (C.Appl ((C.MutInd (uri,typeno,exp_named_subst))::applist)) (* when (not (List.mem (uri,typeno,exp_named_subst) urilist)) *) -> 
-               (uri,typeno,exp_named_subst)::(List.fold_left search_inductive_types urilist applist)
-         | _ -> urilist
-         (* N.B: in un caso tipo (and A !C:Prop.(or B C)) l'or *non* viene selezionato! *)
-       in 
-       let rec purge_duplicates urilist = 
-        let rec aux triple urilist =
-         match urilist with 
-            [] -> []
-          | hd::tl -> 
-             if (hd = triple) 
-              then aux triple tl
-              else hd::(aux triple tl)
-        in
-        match urilist with
-           [] -> []
-         | hd::tl -> hd::(purge_duplicates (aux hd tl))
-       in
-        purge_duplicates (search_inductive_types [] termty) 
-      in
-
-       let urilist =  
-          (* list of triples (uri,typeno,exp_named_subst) of Inductive Types found in term and chosen by the user *)
-          (* N.B.: due to a bug in uris_choice_callback exp_named_subst are not significant (they all are []) *)
-         uris_choice_callback (make_list termty) in
-
-        let rec elim_clear_tac ~term' ~nr_of_hyp_still_to_elim ~status:((proof,goal) as status) =
-         warn ("nr_of_hyp_still_to_elim=" ^ (string_of_int nr_of_hyp_still_to_elim));
-         if nr_of_hyp_still_to_elim <> 0 then
-          let _,metasenv,_,_ = proof in
-           let _,context,_ = List.find (function (m,_,_) -> m=goal) metasenv in
-            let old_context_len = List.length context in
-            let termty = CicTypeChecker.type_of_aux' metasenv context term' in
-             warn ("elim_clear termty= " ^ CicPp.ppterm termty);
-             match termty with
-                C.MutInd (uri,typeno,exp_named_subst)
-              | C.Appl((C.MutInd (uri,typeno,exp_named_subst))::_) 
-                 when (List.mem (uri,typeno,exp_named_subst) urilist) ->
-                   warn ("elim " ^ CicPp.ppterm termty);
-                   T.then_ 
-                      ~start:(P.elim_intros_simpl_tac ~term:term')
-                      ~continuation:(
-                        (* clear the hyp that has just been eliminated *)
-                        (fun ~status:((proof,goal) as status) -> 
-                          let _,metasenv,_,_ = proof in
-                           let _,context,_ = List.find (function (m,_,_) -> m=goal) metasenv in
-                            let new_context_len = List.length context in   
-                             warn ("newcon=" ^ (string_of_int new_context_len) ^ " & oldcon=" ^ (string_of_int old_context_len) ^ " & old_nr_of_hyp=" ^ (string_of_int nr_of_hyp_still_to_elim));
-                             let new_nr_of_hyp_still_to_elim = nr_of_hyp_still_to_elim + (new_context_len - old_context_len) - 1 in
-                             T.then_ 
-                                ~start:(
-                                  if (term'==term) (* if it's the first application of elim, there's no need to clear the hyp *) 
-                                   then begin prerr_endline ("%%%%%%% no clear"); T.id_tac end
-                                   else begin prerr_endline ("%%%%%%% clear " ^ (string_of_int (new_nr_of_hyp_still_to_elim))); (S.clear ~hyp:(List.nth context (new_nr_of_hyp_still_to_elim))) end)
-                                ~continuation:(elim_clear_tac ~term':(C.Rel new_nr_of_hyp_still_to_elim) ~nr_of_hyp_still_to_elim:new_nr_of_hyp_still_to_elim)
-                                ~status
-                        ))
-                      ~status
-              | _ ->
-                   let new_nr_of_hyp_still_to_elim = nr_of_hyp_still_to_elim - 1 in 
-                    warn ("fail; hyp=" ^ (string_of_int new_nr_of_hyp_still_to_elim));
-                    elim_clear_tac ~term':(C.Rel new_nr_of_hyp_still_to_elim) ~nr_of_hyp_still_to_elim:new_nr_of_hyp_still_to_elim ~status
-         else (* no hyp to elim left in this goal *)
-          T.id_tac ~status
-
-        in
-         elim_clear_tac ~term':term ~nr_of_hyp_still_to_elim:1 ~status
-;;
-
-
diff --git a/helm/ocaml/tactics/eliminationTactics.mli b/helm/ocaml/tactics/eliminationTactics.mli
deleted file mode 100644 (file)
index 92d9eee..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val elim_type_tac: term:Cic.term -> ProofEngineTypes.tactic
-
-(* The default callback always decomposes the term as much as possible *)
-val decompose_tac:
- ?uris_choice_callback:
-  ((UriManager.uri * int * (UriManager.uri * Cic.term) list) list ->
-   (UriManager.uri * int * (UriManager.uri * Cic.term) list) list) ->
- Cic.term ->
-  ProofEngineTypes.tactic
diff --git a/helm/ocaml/tactics/equalityTactics.ml b/helm/ocaml/tactics/equalityTactics.ml
deleted file mode 100644 (file)
index 8cb794f..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- *
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- *
- * HELM 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.
- *
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- *
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-
-let rewrite_tac ~term:equality ~status:(proof,goal) =
- let module C = Cic in
- let module U = UriManager in
-  let curi,metasenv,pbo,pty = proof in
-  let metano,context,gty = List.find (function (m,_,_) -> m=goal) metasenv in
-   let eq_ind_r,ty,t1,t2 =
-    match CicTypeChecker.type_of_aux' metasenv context equality with
-       C.Appl [C.MutInd (uri,0,[]) ; ty ; t1 ; t2]
-        when U.eq uri (U.uri_of_string "cic:/Coq/Init/Logic/eq.ind") ->
-         let eq_ind_r =
-          C.Const
-           (U.uri_of_string "cic:/Coq/Init/Logic/eq_ind_r.con",[])
-         in
-          eq_ind_r,ty,t1,t2
-     | C.Appl [C.MutInd (uri,0,[]) ; ty ; t1 ; t2]
-        when U.eq uri (U.uri_of_string "cic:/Coq/Init/Logic_Type/eqT.ind") ->
-         let eqT_ind_r =
-          C.Const
-           (U.uri_of_string "cic:/Coq/Init/Logic_Type/eqT_ind_r.con",[])
-         in
-          eqT_ind_r,ty,t1,t2
-     | _ ->
-       raise
-        (ProofEngineTypes.Fail
-          "Rewrite: the argument is not a proof of an equality")
-   in
-    let pred =
-     let gty' = CicSubstitution.lift 1 gty in
-     let t1' = CicSubstitution.lift 1 t1 in
-     let gty'' =
-      ProofEngineReduction.replace_lifting
-       ~equality:ProofEngineReduction.alpha_equivalence
-       ~what:[t1'] ~with_what:[C.Rel 1] ~where:gty'
-     in
-      C.Lambda
-       (ProofEngineHelpers.mk_fresh_name context C.Anonymous ty, ty, gty'')
-    in
-    let fresh_meta = ProofEngineHelpers.new_meta proof in
-    let irl =
-     ProofEngineHelpers.identity_relocation_list_for_metavariable context in
-    let metasenv' = (fresh_meta,context,C.Appl [pred ; t2])::metasenv in
-
-     let (proof',goals) =
-      PrimitiveTactics.exact_tac
-       ~term:(C.Appl
-         [eq_ind_r ; ty ; t2 ; pred ; C.Meta (fresh_meta,irl) ; t1 ;equality])
-        ~status:((curi,metasenv',pbo,pty),goal)
-     in
-      assert (List.length goals = 0) ;
-      (proof',[fresh_meta])
-;;
-
-
-let rewrite_simpl_tac ~term ~status =
- Tacticals.then_ 
-  ~start:(rewrite_tac ~term)
-  ~continuation:
-   (ReductionTactics.simpl_tac ~also_in_hypotheses:false ~terms:None)
-  ~status
-;;
-
-
-let rewrite_back_tac ~term:equality ~status:(proof,goal) =
- let module C = Cic in
- let module U = UriManager in
-  let curi,metasenv,pbo,pty = proof in
-  let metano,context,gty = List.find (function (m,_,_) -> m=goal) metasenv in
-   let eq_ind_r,ty,t1,t2 =
-    match CicTypeChecker.type_of_aux' metasenv context equality with
-       C.Appl [C.MutInd (uri,0,[]) ; ty ; t1 ; t2]
-        when U.eq uri (U.uri_of_string "cic:/Coq/Init/Logic/eq.ind") ->
-         let eq_ind_r =
-          C.Const
-           (U.uri_of_string "cic:/Coq/Init/Logic/eq_ind.con",[])
-         in
-          eq_ind_r,ty,t2,t1
-     | C.Appl [C.MutInd (uri,0,[]) ; ty ; t1 ; t2]
-        when U.eq uri (U.uri_of_string "cic:/Coq/Init/Logic_Type/eqT.ind") ->
-         let eqT_ind_r =
-          C.Const
-           (U.uri_of_string "cic:/Coq/Init/Logic_Type/eqT_ind.con",[])
-         in
-          eqT_ind_r,ty,t2,t1
-     | _ ->
-       raise
-        (ProofEngineTypes.Fail
-          "Rewrite: the argument is not a proof of an equality")
-   in
-    let pred =
-     let gty' = CicSubstitution.lift 1 gty in
-     let t1' = CicSubstitution.lift 1 t1 in
-     let gty'' =
-      ProofEngineReduction.replace_lifting
-       ~equality:ProofEngineReduction.alpha_equivalence
-       ~what:[t1'] ~with_what:[C.Rel 1] ~where:gty'
-     in
-      C.Lambda
-       (ProofEngineHelpers.mk_fresh_name context C.Anonymous ty, ty, gty'')
-    in
-    let fresh_meta = ProofEngineHelpers.new_meta proof in
-    let irl =
-     ProofEngineHelpers.identity_relocation_list_for_metavariable context in
-    let metasenv' = (fresh_meta,context,C.Appl [pred ; t2])::metasenv in
-
-     let (proof',goals) =
-      PrimitiveTactics.exact_tac
-       ~term:(C.Appl
-         [eq_ind_r ; ty ; t2 ; pred ; C.Meta (fresh_meta,irl) ; t1 ;equality])
-        ~status:((curi,metasenv',pbo,pty),goal)
-     in
-      assert (List.length goals = 0) ;
-      (proof',[fresh_meta])
-
-;;
-
-
-let rewrite_back_simpl_tac ~term ~status =
- Tacticals.then_ 
-  ~start:(rewrite_back_tac ~term)
-  ~continuation:
-   (ReductionTactics.simpl_tac ~also_in_hypotheses:false ~terms:None)
-  ~status
-;;
-
-
-let replace_tac ~what ~with_what ~status:((proof, goal) as status) =
-  let module C = Cic in
-  let module U = UriManager in
-  let module P = PrimitiveTactics in
-  let module T = Tacticals in
-   let _,metasenv,_,_ = proof in
-    let _,context,_ = List.find (function (m,_,_) -> m=goal) metasenv in
-     let wty = CicTypeChecker.type_of_aux' metasenv context what in
-      try
-      if (wty = (CicTypeChecker.type_of_aux' metasenv context with_what))
-       then T.thens
-              ~start:(
-                P.cut_tac 
-                 (C.Appl [
-                   (C.MutInd ((U.uri_of_string "cic:/Coq/Init/Logic/eq.ind"), 0, [])) ; (* quale uguaglianza usare, eq o eqT ? *)
-                     wty ; 
-                     what ; 
-                     with_what]))
-              ~continuations:[
-                T.then_
-                   ~start:(rewrite_back_tac ~term:(C.Rel 1))
-                   ~continuation:(
-                     ProofEngineStructuralRules.clear
-                      ~hyp:(List.hd context)) ;
-                T.id_tac]
-              ~status
-       else raise (ProofEngineTypes.Fail "Replace: terms not replaceable")
-       with (Failure "hd") -> raise (ProofEngineTypes.Fail "Replace: empty context")
-;;
-
-
-(* All these tacs do is applying the right constructor/theorem *)
-
-let reflexivity_tac =
-  IntroductionTactics.constructor_tac ~n:1
-;;
-
-
-let symmetry_tac ~status:(proof, goal) =
-  let module C = Cic in
-  let module R = CicReduction in
-  let module U = UriManager in
-   let (_,metasenv,_,_) = proof in
-    let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-     match (R.whd context ty) with
-        (C.Appl [(C.MutInd (uri, 0, [])); _; _; _]) when (U.eq uri (U.uri_of_string "cic:/Coq/Init/Logic/eq.ind")) ->
-         PrimitiveTactics.apply_tac ~status:(proof,goal)
-          ~term: (C.Const (U.uri_of_string "cic:/Coq/Init/Logic/sym_eq.con", []))
-
-      | (C.Appl [(C.MutInd (uri, 0, [])); _; _; _]) when (U.eq uri (U.uri_of_string "cic:/Coq/Init/Logic_Type/eqT.ind")) ->
-         PrimitiveTactics.apply_tac ~status:(proof,goal)
-          ~term: (C.Const (U.uri_of_string "cic:/Coq/Init/Logic_Type/sym_eqT.con", []))
-
-      | _ -> raise (ProofEngineTypes.Fail "Symmetry failed")
-;;
-
-
-let transitivity_tac ~term ~status:((proof, goal) as status) =
-  let module C = Cic in
-  let module R = CicReduction in
-  let module U = UriManager in
-  let module T = Tacticals in
-   let (_,metasenv,_,_) = proof in
-    let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-     match (R.whd context ty) with
-        (C.Appl [(C.MutInd (uri, 0, [])); _; _; _]) when (uri = (U.uri_of_string "cic:/Coq/Init/Logic/eq.ind")) ->
-         T.thens
-          ~start:(PrimitiveTactics.apply_tac
-            ~term: (C.Const (U.uri_of_string "cic:/Coq/Init/Logic/trans_eq.con", [])))
-          ~continuations:
-            [PrimitiveTactics.exact_tac ~term ; T.id_tac ; T.id_tac]
-          ~status
-
-      | (C.Appl [(C.MutInd (uri, 0, [])); _; _; _]) when (uri = (U.uri_of_string "cic:/Coq/Init/Logic_Type/eqT.ind")) ->
-         T.thens
-          ~start:(PrimitiveTactics.apply_tac
-            ~term: (C.Const (U.uri_of_string "cic:/Coq/Init/Logic_Type/trans_eqT.con", [])))
-          ~continuations:
-            [T.id_tac ; T.id_tac ; PrimitiveTactics.exact_tac ~term]
-          ~status
-
-      | _ -> raise (ProofEngineTypes.Fail "Transitivity failed")
-;;
-
-
diff --git a/helm/ocaml/tactics/equalityTactics.mli b/helm/ocaml/tactics/equalityTactics.mli
deleted file mode 100644 (file)
index 7d57a0c..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val rewrite_tac: term:Cic.term -> ProofEngineTypes.tactic
-val rewrite_simpl_tac: term:Cic.term -> ProofEngineTypes.tactic
-val rewrite_back_tac: term:Cic.term -> ProofEngineTypes.tactic
-val rewrite_back_simpl_tac: term:Cic.term -> ProofEngineTypes.tactic
-val replace_tac: what:Cic.term -> with_what:Cic.term -> ProofEngineTypes.tactic
-
-val reflexivity_tac: ProofEngineTypes.tactic
-val symmetry_tac: ProofEngineTypes.tactic
-val transitivity_tac: term:Cic.term -> ProofEngineTypes.tactic
-
diff --git a/helm/ocaml/tactics/fourier.ml b/helm/ocaml/tactics/fourier.ml
deleted file mode 100644 (file)
index d7728c0..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-(***********************************************************************)
-(*  v      *   The Coq Proof Assistant  /  The Coq Development Team    *)
-(* <O___,, *        INRIA-Rocquencourt  &  LRI-CNRS-Orsay              *)
-(*   \VV/  *************************************************************)
-(*    //   *      This file is distributed under the terms of the      *)
-(*         *       GNU Lesser General Public License Version 2.1       *)
-(***********************************************************************)
-
-(* $Id$ *)
-
-(* Méthode d'élimination de Fourier *)
-(* Référence:
-Auteur(s) : Fourier, Jean-Baptiste-Joseph
-Titre(s) : Oeuvres de Fourier [Document Ã©lectronique]. Tome second. Mémoires publiés dans divers recueils / publ. par les soins de M. Gaston Darboux,...
-Publication : Numérisation BnF de l'édition de Paris : Gauthier-Villars, 1890
-Pages: 326-327
-
-http://gallica.bnf.fr/
-*)
-
-(** @author The Coq Development Team *)
-
-
-(* Un peu de calcul sur les rationnels... 
-Les opérations rendent des rationnels normalisés,
-i.e. le numérateur et le dénominateur sont premiers entre eux.
-*)
-
-
-(** Type for coefficents *)
-type rational = {
-num:int; (** Numerator *)
-den:int;  (** Denumerator *)
-};;
-
-(** Debug function.
-    @param x the rational to print*)
-let print_rational x =
-        print_int x.num;
-        print_string "/";
-        print_int x.den
-;;
-
-let rec pgcd x y = if y = 0 then x else pgcd y (x mod y);;
-
-(** The constant 0*)
-let r0 = {num=0;den=1};;
-(** The constant 1*)
-let r1 = {num=1;den=1};;
-
-let rnorm x = let x = (if x.den<0 then {num=(-x.num);den=(-x.den)} else x) in
-              if x.num=0 then r0
-              else (let d=pgcd x.num x.den in
-                   let d= (if d<0 then -d else d) in
-                    {num=(x.num)/d;den=(x.den)/d});;
-
-(** Calculates the opposite of a rational.
-    @param x The rational
-    @return -x*)
-let rop x = rnorm {num=(-x.num);den=x.den};;
-
-(** Sums two rationals.
-    @param x A rational
-    @param y Another rational
-    @return x+y*)
-let rplus x y = rnorm {num=x.num*y.den + y.num*x.den;den=x.den*y.den};;
-(** Substracts two rationals.
-    @param x A rational
-    @param y Another rational
-    @return x-y*)
-let rminus x y = rnorm {num=x.num*y.den - y.num*x.den;den=x.den*y.den};;
-(** Multiplyes two rationals.
-    @param x A rational
-    @param y Another rational
-    @return x*y*)
-let rmult x y = rnorm {num=x.num*y.num;den=x.den*y.den};;
-(** Inverts arational.
-    @param x A rational
-    @return x{^ -1} *)
-let rinv x = rnorm {num=x.den;den=x.num};;
-(** Divides two rationals.
-    @param x A rational
-    @param y Another rational
-    @return x/y*)
-let rdiv x y = rnorm {num=x.num*y.den;den=x.den*y.num};;
-
-let rinf x y = x.num*y.den < y.num*x.den;;
-let rinfeq x y = x.num*y.den <= y.num*x.den;;
-
-
-(* {coef;hist;strict}, où coef=[c1; ...; cn; d], représente l'inéquation
-c1x1+...+cnxn < d si strict=true, <= sinon,
-hist donnant les coefficients (positifs) d'une combinaison linéaire qui permet d'obtenir l'inéquation Ã  partir de celles du départ.
-*)
-
-type ineq = {coef:rational list;
-             hist:rational list;
-             strict:bool};;
-
-let pop x l = l:=x::(!l);;
-
-(* sépare la liste d'inéquations s selon que leur premier coefficient est 
-négatif, nul ou positif. *)
-let partitionne s =
-   let lpos=ref [] in
-   let lneg=ref [] in
-   let lnul=ref [] in
-   List.iter (fun ie -> match ie.coef with
-                        [] ->  raise (Failure "empty ineq")
-                       |(c::r) -> if rinf c r0
-                                 then pop ie lneg
-                                  else if rinf r0 c then pop ie lpos
-                                              else pop ie lnul)
-             s;
-   [!lneg;!lnul;!lpos]
-;;
-(* initialise les histoires d'une liste d'inéquations données par leurs listes de coefficients et leurs strictitudes (!):
-(add_hist [(equation 1, s1);...;(équation n, sn)])
-=
-[{équation 1, [1;0;...;0], s1};
- {équation 2, [0;1;...;0], s2};
- ...
- {équation n, [0;0;...;1], sn}]
-*)
-let add_hist le =
-   let n = List.length le in
-   let i=ref 0 in
-   List.map (fun (ie,s) -> 
-              let h =ref [] in
-              for k=1 to (n-(!i)-1) do pop r0 h; done;
-              pop r1 h;
-              for k=1 to !i do pop r0 h; done;
-              i:=!i+1;
-              {coef=ie;hist=(!h);strict=s})
-             le
-;;
-(* additionne deux inéquations *)      
-let ie_add ie1 ie2 = {coef=List.map2 rplus ie1.coef ie2.coef;
-                      hist=List.map2 rplus ie1.hist ie2.hist;
-                     strict=ie1.strict || ie2.strict}
-;;
-(* multiplication d'une inéquation par un rationnel (positif) *)
-let ie_emult a ie = {coef=List.map (fun x -> rmult a x) ie.coef;
-                     hist=List.map (fun x -> rmult a x) ie.hist;
-                    strict= ie.strict}
-;;
-(* on enlève le premier coefficient *)
-let ie_tl ie = {coef=List.tl ie.coef;hist=ie.hist;strict=ie.strict}
-;;
-(* le premier coefficient: "tête" de l'inéquation *)
-let hd_coef ie = List.hd ie.coef
-;;
-
-(* calcule toutes les combinaisons entre inéquations de tête négative et inéquations de tête positive qui annulent le premier coefficient.
-*)
-let deduce_add lneg lpos =
-   let res=ref [] in
-   List.iter (fun i1 ->
-                List.iter (fun i2 ->
-                               let a = rop (hd_coef i1) in
-                               let b = hd_coef i2 in
-                               pop (ie_tl (ie_add (ie_emult b i1)
-                                                  (ie_emult a i2))) res)
-                          lpos)
-             lneg;
-   !res
-;;
-(* Ã©limination de la première variable Ã  partir d'une liste d'inéquations:
-opération qu'on itère dans l'algorithme de Fourier.
-*)
-let deduce1 s i=
-    match (partitionne s) with 
-      [lneg;lnul;lpos] ->
-         let lnew = deduce_add lneg lpos in
-        (match lneg with [] -> print_string("non posso ridurre "^string_of_int i^"\n")|_->();
-         match lpos with [] -> print_string("non posso ridurre "^string_of_int i^"\n")|_->());
-         (List.map ie_tl lnul)@lnew
-   |_->assert false
-;;
-(* algorithme de Fourier: on Ã©limine successivement toutes les variables.
-*)
-let deduce lie =
-   let n = List.length (fst (List.hd lie)) in
-   let lie=ref (add_hist lie) in
-   for i=1 to n-1 do
-      lie:= deduce1 !lie i;
-   done;
-   !lie
-;;
-
-(* donne [] si le système a des  find solutions,
-sinon donne [c,s,lc]
-où lc est la combinaison linéaire des inéquations de départ
-qui donne 0 < c si s=true
-       ou 0 <= c sinon
-cette inéquation Ã©tant absurde.
-*)
-(** Tryes to find if the system admits solutions.
-    @param lie the list of inequations 
-    @return a list that can be empty if the system has solutions. Otherwise it returns a
-            one elements list [\[(c,s,lc)\]]. {b c} is the rational that can be obtained solving the system,
-           {b s} is true if the inequation that proves that the system is absurd is of type [c < 0], false if 
-           [c <= 0], {b lc} is a list of rational that represents the liear combination to obtain the
-           absurd inequation *)
-let unsolvable lie =
-   let lr = deduce lie in
-   let res = ref [] in
-   (try (List.iter (fun e ->
-         match e with
-           {coef=[c];hist=lc;strict=s} ->
-                 if (rinf c r0 && (not s)) || (rinfeq c r0 && s) 
-                  then (res := [c,s,lc];
-                       raise (Failure "contradiction found"))
-          |_->assert false)
-                            lr)
-   with _ -> ());
-   !res
-;;
-
-(* Exemples:
-
-let test1=[[r1;r1;r0],true;[rop r1;r1;r1],false;[r0;rop r1;rop r1],false];;
-deduce test1;;
-unsolvable test1;;
-
-let test2=[
-[r1;r1;r0;r0;r0],false;
-[r0;r1;r1;r0;r0],false;
-[r0;r0;r1;r1;r0],false;
-[r0;r0;r0;r1;r1],false;
-[r1;r0;r0;r0;r1],false;
-[rop r1;rop r1;r0;r0;r0],false;
-[r0;rop r1;rop r1;r0;r0],false;
-[r0;r0;rop r1;rop r1;r0],false;
-[r0;r0;r0;rop r1;rop r1],false;
-[rop r1;r0;r0;r0;rop r1],false
-];;
-deduce test2;;
-unsolvable test2;;
-
-*)
diff --git a/helm/ocaml/tactics/fourier.mli b/helm/ocaml/tactics/fourier.mli
deleted file mode 100644 (file)
index 8b26bc2..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-type rational = { num : int; den : int; } 
-val print_rational : rational -> unit
-val pgcd : int -> int -> int
-val r0 : rational
-val r1 : rational
-val rnorm : rational -> rational
-val rop : rational -> rational
-val rplus : rational -> rational -> rational
-val rminus : rational -> rational -> rational
-val rmult : rational -> rational -> rational
-val rinv : rational -> rational
-val rdiv : rational -> rational -> rational
-val rinf : rational -> rational -> bool
-val rinfeq : rational -> rational -> bool
-type ineq = { coef : rational list; hist : rational list; strict : bool; } 
-val pop : 'a -> 'a list ref -> unit
-val partitionne : ineq list -> ineq list list
-val add_hist : (rational list * bool) list -> ineq list
-val ie_add : ineq -> ineq -> ineq
-val ie_emult : rational -> ineq -> ineq
-val ie_tl : ineq -> ineq
-val hd_coef : ineq -> rational
-val deduce_add : ineq list -> ineq list -> ineq list
-val deduce1 : ineq list -> int -> ineq list
-val deduce : (rational list * bool) list -> ineq list
-val unsolvable :
-  (rational list * bool) list -> (rational * bool * rational list) list
diff --git a/helm/ocaml/tactics/fourierR.ml b/helm/ocaml/tactics/fourierR.ml
deleted file mode 100644 (file)
index b1aa1a2..0000000
+++ /dev/null
@@ -1,1233 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-
-(******************** THE FOURIER TACTIC ***********************)
-
-(* La tactique Fourier ne fonctionne de manière sûre que si les coefficients 
-des inéquations et Ã©quations sont entiers. En attendant la tactique Field.
-*)
-
-open Fourier
-
-
-let debug x = print_string ("____ "^x) ; flush stdout;;
-
-let debug_pcontext x = 
- let str = ref "" in
- List.iter (fun y -> match y with Some(Cic.Name(a),_) -> str := !str ^ 
-  a ^ " " | _ ->()) x ;
- debug ("contesto : "^ (!str) ^ "\n")
-;;
-
-(******************************************************************************
-Operations on linear combinations.
-
-Opérations sur les combinaisons linéaires affines.
-La partie homogène d'une combinaison linéaire est en fait une table de hash 
-qui donne le coefficient d'un terme du calcul des constructions, 
-qui est zéro si le terme n'y est pas. 
-*)
-
-
-
-(**
-       The type for linear combinations
-*)
-type flin = {fhom:(Cic.term , rational)Hashtbl.t;fcste:rational}            
-;;
-
-(**
-       @return an empty flin
-*)
-let flin_zero () = {fhom = Hashtbl.create 50;fcste=r0}
-;;
-
-(**
-       @param f a flin
-       @param x a Cic.term
-       @return the rational associated with x (coefficient)
-*)
-let flin_coef f x = 
-       try
-               (Hashtbl.find f.fhom x)
-       with
-               _ -> r0
-;;
-                       
-(**
-       Adds c to the coefficient of x
-       @param f a flin
-       @param x a Cic.term
-       @param c a rational
-       @return the new flin
-*)
-let flin_add f x c = 
-    match x with
-    Cic.Rel(n) ->(
-      let cx = flin_coef f x in
-      Hashtbl.remove f.fhom x;
-      Hashtbl.add f.fhom x (rplus cx c);
-      f)
-    |_->debug ("Internal error in Fourier! this is not a Rel "^CicPp.ppterm x^"\n");
-      let cx = flin_coef f x in
-      Hashtbl.remove f.fhom x;
-      Hashtbl.add f.fhom x (rplus cx c);
-      f
-;;
-(**
-       Adds c to f.fcste
-       @param f a flin
-       @param c a rational
-       @return the new flin
-*)
-let flin_add_cste f c =              
-    {fhom=f.fhom;
-     fcste=rplus f.fcste c}
-;;
-
-(**
-       @return a empty flin with r1 in fcste
-*)
-let flin_one () = flin_add_cste (flin_zero()) r1;;
-
-(**
-       Adds two flin
-*)
-let flin_plus f1 f2 = 
-    let f3 = flin_zero() in
-    Hashtbl.iter (fun x c -> let _=flin_add f3 x c in ()) f1.fhom;
-    Hashtbl.iter (fun x c -> let _=flin_add f3 x c in ()) f2.fhom;
-    flin_add_cste (flin_add_cste f3 f1.fcste) f2.fcste;
-;;
-
-(**
-       Substracts two flin
-*)
-let flin_minus f1 f2 = 
-    let f3 = flin_zero() in
-    Hashtbl.iter (fun x c -> let _=flin_add f3 x c in ()) f1.fhom;
-    Hashtbl.iter (fun x c -> let _=flin_add f3 x (rop c) in ()) f2.fhom;
-    flin_add_cste (flin_add_cste f3 f1.fcste) (rop f2.fcste);
-;;
-
-(**
-       @return a times f
-*)
-let flin_emult a f =
-    let f2 = flin_zero() in
-    Hashtbl.iter (fun x c -> let _=flin_add f2 x (rmult a c) in ()) f.fhom;
-    flin_add_cste f2 (rmult a f.fcste);
-;;
-
-   
-(*****************************************************************************)
-
-
-(**
-       @param t a term
-       @raise Failure if conversion is impossible
-       @return rational proiection of t
-*)
-let rec rational_of_term t =
-  (* fun to apply f to the first and second rational-term of l *)
-  let rat_of_binop f l =
-       let a = List.hd l and
-           b = List.hd(List.tl l) in
-       f (rational_of_term a) (rational_of_term b)
-  in
-  (* as before, but f is unary *)
-  let rat_of_unop f l =
-       f (rational_of_term (List.hd l))
-  in
-  match t with
-  | Cic.Cast (t1,t2) -> (rational_of_term t1)
-  | Cic.Appl (t1::next) ->
-        (match t1 with
-           Cic.Const (u,boh) ->
-               (match (UriManager.string_of_uri u) with
-                "cic:/Coq/Reals/Rdefinitions/Ropp.con" -> 
-                     rat_of_unop rop next 
-               |"cic:/Coq/Reals/Rdefinitions/Rinv.con" -> 
-                      rat_of_unop rinv next 
-                |"cic:/Coq/Reals/Rdefinitions/Rmult.con" -> 
-                      rat_of_binop rmult next
-                |"cic:/Coq/Reals/Rdefinitions/Rdiv.con" -> 
-                      rat_of_binop rdiv next
-                |"cic:/Coq/Reals/Rdefinitions/Rplus.con" -> 
-                      rat_of_binop rplus next
-                |"cic:/Coq/Reals/Rdefinitions/Rminus.con" -> 
-                      rat_of_binop rminus next
-                | _ -> failwith "not a rational")
-          | _ -> failwith "not a rational")
-  | Cic.Const (u,boh) ->
-        (match (UriManager.string_of_uri u) with
-              "cic:/Coq/Reals/Rdefinitions/R1.con" -> r1
-              |"cic:/Coq/Reals/Rdefinitions/R0.con" -> r0
-              |  _ -> failwith "not a rational")
-  |  _ -> failwith "not a rational"
-;;
-
-(* coq wrapper
-let rational_of_const = rational_of_term;;
-*)
-let fails f a =
- try
-   let tmp = (f a) in
-   false
- with 
-   _-> true
- ;;
-
-let rec flin_of_term t =
-       let fl_of_binop f l =
-               let a = List.hd l and
-                   b = List.hd(List.tl l) in
-               f (flin_of_term a)  (flin_of_term b)
-       in
-  try(
-    match t with
-  | Cic.Cast (t1,t2) -> (flin_of_term t1)
-  | Cic.Appl (t1::next) ->
-       begin
-       match t1 with
-        Cic.Const (u,boh) ->
-            begin
-           match (UriManager.string_of_uri u) with
-            "cic:/Coq/Reals/Rdefinitions/Ropp.con" -> 
-                  flin_emult (rop r1) (flin_of_term (List.hd next))
-           |"cic:/Coq/Reals/Rdefinitions/Rplus.con"-> 
-                  fl_of_binop flin_plus next 
-           |"cic:/Coq/Reals/Rdefinitions/Rminus.con"->
-                  fl_of_binop flin_minus next
-           |"cic:/Coq/Reals/Rdefinitions/Rmult.con"->
-               begin
-               let arg1 = (List.hd next) and
-                   arg2 = (List.hd(List.tl next)) 
-               in
-               if fails rational_of_term arg1 
-                  then
-                  if fails rational_of_term arg2
-                     then
-                     ( (* prodotto tra 2 incognite ????? impossibile*)
-                     failwith "Sistemi lineari!!!!\n" 
-                     )
-                     else
-                     (
-                     match arg1 with
-                     Cic.Rel(n) -> (*trasformo al volo*)
-                                   (flin_add (flin_zero()) arg1 (rational_of_term arg2))
-                     |_-> (* test this *)
-                          let tmp = flin_of_term arg1 in
-                          flin_emult  (rational_of_term arg2) (tmp)
-                     )
-                  else
-                  if fails rational_of_term arg2
-                     then
-                     (
-                     match arg2 with
-                     Cic.Rel(n) -> (*trasformo al volo*)
-                                   (flin_add (flin_zero()) arg2 (rational_of_term arg1))
-                     |_-> (* test this *)
-                          let tmp = flin_of_term arg2 in
-                          flin_emult (rational_of_term arg1) (tmp)
-
-                     )
-                     else
-                     (  (*prodotto tra razionali*)
-                     (flin_add_cste (flin_zero()) (rmult (rational_of_term arg1) (rational_of_term arg2)))  
-                     )
-                       (*try
-                       begin
-                       (*let a = rational_of_term arg1 in
-                       debug("ho fatto rational of term di "^CicPp.ppterm arg1^
-                        " e ho ottenuto "^string_of_int a.num^"/"^string_of_int a.den^"\n");*)
-                       let a = flin_of_term arg1  
-                       try 
-                               begin
-                               let b = (rational_of_term arg2) in
-                               debug("ho fatto rational of term di "^CicPp.ppterm arg2^
-                                " e ho ottenuto "^string_of_int b.num^"/"^string_of_int b.den^"\n");
-                               (flin_add_cste (flin_zero()) (rmult a b))
-                               end
-                       with 
-                               _ -> debug ("ho fallito2 su "^CicPp.ppterm arg2^"\n");
-                                    (flin_add (flin_zero()) arg2 a)
-                       end
-               with 
-                       _-> debug ("ho fallito1 su "^CicPp.ppterm arg1^"\n");
-                           (flin_add(flin_zero()) arg1 (rational_of_term arg2))
-                           *)
-               end
-           |"cic:/Coq/Reals/Rdefinitions/Rinv.con"->
-              let a=(rational_of_term (List.hd next)) in
-              flin_add_cste (flin_zero()) (rinv a)
-           |"cic:/Coq/Reals/Rdefinitions/Rdiv.con"->
-               begin
-               let b=(rational_of_term (List.hd(List.tl next))) in
-               try 
-                       begin
-                       let a = (rational_of_term (List.hd next)) in
-                       (flin_add_cste (flin_zero()) (rdiv a b))
-                       end
-               with 
-                       _-> (flin_add (flin_zero()) (List.hd next) (rinv b))
-               end
-            |_->assert false
-           end
-       |_ -> assert false
-       end
-  | Cic.Const (u,boh) ->
-        begin
-       match (UriManager.string_of_uri u) with
-        "cic:/Coq/Reals/Rdefinitions/R1.con" -> flin_one ()
-        |"cic:/Coq/Reals/Rdefinitions/R0.con" -> flin_zero ()
-        |_-> assert false
-       end
-  |_-> assert false)
-  with _ -> debug("eccezione = "^CicPp.ppterm t^"\n");flin_add (flin_zero()) t r1
-;;
-
-(* coq wrapper
-let flin_of_constr = flin_of_term;;
-*)
-
-(**
-       Translates a flin to (c,x) list
-       @param f a flin
-       @return something like (c1,x1)::(c2,x2)::...::(cn,xn)
-*)
-let flin_to_alist f =
-    let res=ref [] in
-    Hashtbl.iter (fun x c -> res:=(c,x)::(!res)) f;
-    !res
-;;
-
-(* Représentation des hypothèses qui sont des inéquations ou des Ã©quations.
-*)
-
-(**
-       The structure for ineq
-*)
-type hineq={hname:Cic.term; (* le nom de l'hypothèse *)
-            htype:string; (* Rlt, Rgt, Rle, Rge, eqTLR ou eqTRL *)
-            hleft:Cic.term;
-            hright:Cic.term;
-            hflin:flin;
-            hstrict:bool}
-;;
-
-(* Transforme une hypothese h:t en inéquation flin<0 ou flin<=0
-*)
-
-let ineq1_of_term (h,t) =
-    match t with (* match t *)
-       Cic.Appl (t1::next) ->
-         let arg1= List.hd next in
-         let arg2= List.hd(List.tl next) in
-         (match t1 with (* match t1 *)
-           Cic.Const (u,boh) ->
-            (match UriManager.string_of_uri u with (* match u *)
-                "cic:/Coq/Reals/Rdefinitions/Rlt.con" ->
-                          [{hname=h;
-                           htype="Rlt";
-                          hleft=arg1;
-                          hright=arg2;
-                          hflin= flin_minus (flin_of_term arg1)
-                                             (flin_of_term arg2);
-                          hstrict=true}]
-               |"cic:/Coq/Reals/Rdefinitions/Rgt.con" ->
-                          [{hname=h;
-                           htype="Rgt";
-                          hleft=arg2;
-                          hright=arg1;
-                          hflin= flin_minus (flin_of_term arg2)
-                                             (flin_of_term arg1);
-                          hstrict=true}]
-               |"cic:/Coq/Reals/Rdefinitions/Rle.con" ->
-                           [{hname=h;
-                           htype="Rle";
-                          hleft=arg1;
-                          hright=arg2;
-                          hflin= flin_minus (flin_of_term arg1)
-                                             (flin_of_term arg2);
-                          hstrict=false}]
-               |"cic:/Coq/Reals/Rdefinitions/Rge.con" ->
-                           [{hname=h;
-                           htype="Rge";
-                          hleft=arg2;
-                          hright=arg1;
-                          hflin= flin_minus (flin_of_term arg2)
-                                             (flin_of_term arg1);
-                          hstrict=false}]
-                |_->assert false)(* match u *)
-          | Cic.MutInd (u,i,o) ->
-              (match UriManager.string_of_uri u with 
-                "cic:/Coq/Init/Logic_Type/eqT.ind" ->  
-                          let t0= arg1 in
-                           let arg1= arg2 in
-                           let arg2= List.hd(List.tl (List.tl next)) in
-                   (match t0 with
-                         Cic.Const (u,boh) ->
-                          (match UriManager.string_of_uri u with
-                             "cic:/Coq/Reals/Rdefinitions/R.con"->
-                         [{hname=h;
-                           htype="eqTLR";
-                          hleft=arg1;
-                          hright=arg2;
-                          hflin= flin_minus (flin_of_term arg1)
-                                             (flin_of_term arg2);
-                          hstrict=false};
-                          {hname=h;
-                           htype="eqTRL";
-                          hleft=arg2;
-                          hright=arg1;
-                          hflin= flin_minus (flin_of_term arg2)
-                                             (flin_of_term arg1);
-                          hstrict=false}]
-                           |_-> assert false)
-                         |_-> assert false)
-                   |_-> assert false)
-          |_-> assert false)(* match t1 *)
-        |_-> assert false (* match t *)
-;;
-(* coq wrapper 
-let ineq1_of_constr = ineq1_of_term;;
-*)
-
-(* Applique la méthode de Fourier Ã  une liste d'hypothèses (type hineq)
-*)
-
-let rec print_rl l =
- match l with
- []-> ()
- | a::next -> Fourier.print_rational a ; print_string " " ; print_rl next
-;;
-
-let rec print_sys l =
- match l with
- [] -> ()
- | (a,b)::next -> (print_rl a;
-               print_string (if b=true then "strict\n"else"\n");
-               print_sys next)
- ;;
-
-(*let print_hash h =
-       Hashtbl.iter (fun x y -> print_string ("("^"-"^","^"-"^")")) h
-;;*)
-
-let fourier_lineq lineq1 = 
-   let nvar=ref (-1) in
-   let hvar=Hashtbl.create 50 in (* la table des variables des inéquations *)
-   List.iter (fun f ->
-               Hashtbl.iter (fun x c ->
-                                try (Hashtbl.find hvar x;())
-                                with _-> nvar:=(!nvar)+1;
-                                         Hashtbl.add hvar x (!nvar);
-                                         debug("aggiungo una var "^
-                                          string_of_int !nvar^" per "^
-                                           CicPp.ppterm x^"\n"))
-                            f.hflin.fhom)
-             lineq1;
-   (*print_hash hvar;*)
-   debug("Il numero di incognite e' "^string_of_int (!nvar+1)^"\n");
-   let sys= List.map (fun h->
-               let v=Array.create ((!nvar)+1) r0 in
-               Hashtbl.iter (fun x c -> v.(Hashtbl.find hvar x) <- c) 
-                  h.hflin.fhom;
-               ((Array.to_list v)@[rop h.hflin.fcste],h.hstrict))
-             lineq1 in
-   debug ("chiamo unsolvable sul sistema di "^ 
-    string_of_int (List.length sys) ^"\n");
-   print_sys sys;
-   unsolvable sys
-;;
-
-(*****************************************************************************
-Construction de la preuve en cas de succès de la méthode de Fourier,
-i.e. on obtient une contradiction.
-*)
-
-
-let _eqT = Cic.MutInd((UriManager.uri_of_string
- "cic:/Coq/Init/Logic_Type/eqT.ind"), 0, []) ;;
-let _False = Cic.MutInd ((UriManager.uri_of_string
- "cic:/Coq/Init/Logic/False.ind"), 0, []) ;;
-let _not = Cic.Const ((UriManager.uri_of_string
- "cic:/Coq/Init/Logic/not.con"), []);;
-let _R0 = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/Reals/Rdefinitions/R0.con"), []) ;;
-let _R1 = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/Reals/Rdefinitions/R1.con"), []) ;;
-let _R = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/Reals/Rdefinitions/R.con"), []) ;;
-let _Rfourier_eqLR_to_le=Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_eqLR_to_le.con"), []) ;;
-let _Rfourier_eqRL_to_le=Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_eqRL_to_le.con"), []) ;;
-let _Rfourier_ge_to_le  =Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_ge_to_le.con"), []) ;;
-let _Rfourier_gt_to_lt         =Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_gt_to_lt.con"), []) ;;
-let _Rfourier_le=Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_le.con"), []) ;;
-let _Rfourier_le_le =Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_le_le.con"), []) ;;
-let _Rfourier_le_lt =Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_le_lt.con"), []) ;;
-let _Rfourier_lt=Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_lt.con"), []) ;;
-let _Rfourier_lt_le =Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_lt_le.con"), []) ;;
-let _Rfourier_lt_lt =Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_lt_lt.con"), []) ;;
-let _Rfourier_not_ge_lt = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_not_ge_lt.con"), []) ;;
-let _Rfourier_not_gt_le = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_not_gt_le.con"), []) ;;
-let _Rfourier_not_le_gt = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_not_le_gt.con"), []) ;;
-let _Rfourier_not_lt_ge = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rfourier_not_lt_ge.con"), []) ;;
-let _Rinv  = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/Reals/Rdefinitions/Rinv.con"), []) ;;
-let _Rinv_R1 = Cic.Const((UriManager.uri_of_string 
- "cic:/Coq/Reals/Rbase/Rinv_R1.con" ), []) ;;
-let _Rle = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/Reals/Rdefinitions/Rle.con"), []) ;;
-let _Rle_mult_inv_pos =  Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rle_mult_inv_pos.con"), []) ;;
-let _Rle_not_lt = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rle_not_lt.con"), []) ;;
-let _Rle_zero_1 = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rle_zero_1.con"), []) ;;
-let _Rle_zero_pos_plus1 =  Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rle_zero_pos_plus1.con"), []) ;;
-(*let _Rle_zero_zero = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rle_zero_zero.con"), []) ;;*)
-let _Rlt = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/Reals/Rdefinitions/Rlt.con"), []) ;;
-let _Rlt_mult_inv_pos = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rlt_mult_inv_pos.con"), []) ;;
-let _Rlt_not_le =  Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rlt_not_le.con"), []) ;;
-let _Rlt_zero_1 = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rlt_zero_1.con"), []) ;;
-let _Rlt_zero_pos_plus1 = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rlt_zero_pos_plus1.con"), []) ;;
-let _Rminus = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/Reals/Rdefinitions/Rminus.con"), []) ;;
-let _Rmult = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/Reals/Rdefinitions/Rmult.con"), []) ;;
-let _Rnot_le_le =Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rnot_le_le.con"), []) ;;
-let _Rnot_lt0 = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rnot_lt0.con"), []) ;;
-let _Rnot_lt_lt =Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/fourier/Fourier_util/Rnot_lt_lt.con"), []) ;;
-let _Ropp = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/Reals/Rdefinitions/Ropp.con"), []) ;;
-let _Rplus = Cic.Const ((UriManager.uri_of_string 
- "cic:/Coq/Reals/Rdefinitions/Rplus.con"), []) ;;
-
-(******************************************************************************)
-
-let is_int x = (x.den)=1
-;;
-
-(* fraction = couple (num,den) *)
-let rec rational_to_fraction x= (x.num,x.den)
-;;
-    
-(* traduction -3 -> (Ropp (Rplus R1 (Rplus R1 R1)))
-*)
-
-let rec int_to_real_aux n =
-  match n with
-    0 -> _R0 (* o forse R0 + R0 ????? *)
-  | 1 -> _R1
-  | _ -> Cic.Appl [ _Rplus ; _R1 ; int_to_real_aux (n-1) ]
-;;     
-       
-
-let int_to_real n =
-   let x = int_to_real_aux (abs n) in
-   if n < 0 then
-       Cic.Appl [ _Ropp ; x ] 
-   else
-       x
-;;
-
-
-(* -1/2 -> (Rmult (Ropp R1) (Rinv (Rplus R1 R1)))
-*)
-
-let rational_to_real x =
-   let (n,d)=rational_to_fraction x in 
-   Cic.Appl [ _Rmult ; int_to_real n ; Cic.Appl [ _Rinv ; int_to_real d ]  ]
-;;
-
-(* preuve que 0<n*1/d
-*)
-
-let tac_zero_inf_pos (n,d) ~status =
-   (*let cste = pf_parse_constr gl in*)
-   let pall str ~status:(proof,goal) t =
-     debug ("tac "^str^" :\n" );
-     let curi,metasenv,pbo,pty = proof in
-     let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-     debug ("th = "^ CicPp.ppterm t ^"\n"); 
-     debug ("ty = "^ CicPp.ppterm ty^"\n"); 
-   in
-   let tacn=ref 
-     (fun ~status -> pall "n0" ~status _Rlt_zero_1 ;
-       PrimitiveTactics.apply_tac ~term:_Rlt_zero_1 ~status ) in
-   let tacd=ref 
-     (fun ~status -> pall "d0" ~status _Rlt_zero_1 ;
-       PrimitiveTactics.apply_tac ~term:_Rlt_zero_1 ~status ) in
-
-
-  for i=1 to n-1 do 
-       tacn:=(Tacticals.then_ ~start:(fun ~status -> pall ("n"^string_of_int i) 
-        ~status _Rlt_zero_pos_plus1;
-        PrimitiveTactics.apply_tac ~term:_Rlt_zero_pos_plus1 ~status) 
-         ~continuation:!tacn); 
-  done;
-  for i=1 to d-1 do
-       tacd:=(Tacticals.then_ ~start:(fun ~status -> pall "d" 
-        ~status _Rlt_zero_pos_plus1 ;PrimitiveTactics.apply_tac 
-        ~term:_Rlt_zero_pos_plus1 ~status) ~continuation:!tacd); 
-  done;
-
-
-
-debug("TAC ZERO INF POS\n");
-
-(Tacticals.thens ~start:(PrimitiveTactics.apply_tac ~term:_Rlt_mult_inv_pos) 
-  ~continuations:[
-   !tacn ;
-   !tacd ] 
-  ~status)
-;;
-
-
-
-(* preuve que 0<=n*1/d
-*)
-let tac_zero_infeq_pos gl (n,d) ~status =
- (*let cste = pf_parse_constr gl in*)
- debug("inizio tac_zero_infeq_pos\n");
- let tacn = ref 
-  (*(if n=0 then
-    (PrimitiveTactics.apply_tac ~term:_Rle_zero_zero ) 
-   else*)
-    (PrimitiveTactics.apply_tac ~term:_Rle_zero_1 )
- (* ) *)
-  in
-  let tacd=ref (PrimitiveTactics.apply_tac ~term:_Rlt_zero_1 ) in
-  for i=1 to n-1 do 
-      tacn:=(Tacticals.then_ ~start:(PrimitiveTactics.apply_tac 
-       ~term:_Rle_zero_pos_plus1) ~continuation:!tacn); 
-  done;
-  for i=1 to d-1 do
-      tacd:=(Tacticals.then_ ~start:(PrimitiveTactics.apply_tac 
-       ~term:_Rlt_zero_pos_plus1) ~continuation:!tacd); 
-  done;
-  let r = 
-  (Tacticals.thens ~start:(PrimitiveTactics.apply_tac 
-   ~term:_Rle_mult_inv_pos) ~continuations:[!tacn;!tacd]) ~status in
-   debug("fine tac_zero_infeq_pos\n");
-   r
-;;
-
-
-(* preuve que 0<(-n)*(1/d) => False 
-*)
-
-let tac_zero_inf_false gl (n,d) ~status=
-  debug("inizio tac_zero_inf_false\n");
-    if n=0 then 
-     (debug "1\n";let r =(PrimitiveTactics.apply_tac ~term:_Rnot_lt0 ~status) in
-     debug("fine\n");
-     r)
-    else
-     (debug "2\n";let r = (Tacticals.then_ ~start:(
-       fun ~status:(proof,goal as status) -> 
-       let curi,metasenv,pbo,pty = proof in
-       let metano,context,ty =List.find (function (m,_,_) -> m=goal) metasenv in
-         debug("!!!!!!!!!1: unify "^CicPp.ppterm _Rle_not_lt^" with "
-         ^ CicPp.ppterm ty ^"\n");
-       let r = PrimitiveTactics.apply_tac ~term:_Rle_not_lt ~status in
-       debug("!!!!!!!!!2\n");
-       r
-       )
-     ~continuation:(tac_zero_infeq_pos gl (-n,d))) ~status in
-     debug("fine\n");
-     r
-     )
-;;
-
-(* preuve que 0<=n*(1/d) => False ; n est negatif
-*)
-
-let tac_zero_infeq_false gl (n,d) ~status:(proof,goal as status)=
-debug("stat tac_zero_infeq_false\n");
-let r = 
-     let curi,metasenv,pbo,pty = proof in
-     let metano,context,ty =List.find (function (m,_,_) -> m=goal) metasenv in
-     
-     debug("faccio fold di " ^ CicPp.ppterm
-            (Cic.Appl
-              [_Rle ; _R0 ;
-               Cic.Appl
-                [_Rmult ; int_to_real n ; Cic.Appl [_Rinv ; int_to_real d]]
-              ]
-            ) ^ "\n") ;
-     debug("apply di _Rlt_not_le a "^ CicPp.ppterm ty ^"\n");
-     (*CSC: Patch to undo the over-simplification of RewriteSimpl *)
-     Tacticals.then_
-      ~start:
-        (ReductionTactics.fold_tac ~reduction:CicReduction.whd
-          ~also_in_hypotheses:false
-          ~term:
-            (Cic.Appl
-              [_Rle ; _R0 ;
-               Cic.Appl
-                [_Rmult ; int_to_real n ; Cic.Appl [_Rinv ; int_to_real d]]
-              ]
-            )
-        )
-      ~continuation:
-        (Tacticals.then_ ~start:(PrimitiveTactics.apply_tac ~term:_Rlt_not_le)
-         ~continuation:(tac_zero_inf_pos (-n,d))) ~status in
- debug("end tac_zero_infeq_false\n");
- r
-(*PORTING
- Tacticals.id_tac ~status
-*)
-;;
-
-
-(* *********** ********** ******** ??????????????? *********** **************)
-
-let apply_type_tac ~cast:t ~applist:al ~status:(proof,goal) = 
-  let curi,metasenv,pbo,pty = proof in
-  let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-  let fresh_meta = ProofEngineHelpers.new_meta proof in
-  let irl =
-   ProofEngineHelpers.identity_relocation_list_for_metavariable context in
-  let metasenv' = (fresh_meta,context,t)::metasenv in
-   let proof' = curi,metasenv',pbo,pty in
-    let proof'',goals =
-     PrimitiveTactics.apply_tac 
-      (*~term:(Cic.Appl ((Cic.Cast (Cic.Meta (fresh_meta,irl),t))::al)) (* ??? *)*)
-      ~term:(Cic.Appl ((Cic.Meta (fresh_meta,irl))::al)) (* ??? *)
-       ~status:(proof',goal)
-    in
-     proof'',fresh_meta::goals
-;;
-
-
-
-
-   
-let my_cut ~term:c ~status:(proof,goal)=
-  let curi,metasenv,pbo,pty = proof in
-  let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-
-debug("my_cut di "^CicPp.ppterm c^"\n");
-
-
-  let fresh_meta = ProofEngineHelpers.new_meta proof in
-  let irl =
-   ProofEngineHelpers.identity_relocation_list_for_metavariable context in
-  let metasenv' = (fresh_meta,context,c)::metasenv in
-   let proof' = curi,metasenv',pbo,pty in
-    let proof'',goals =
-     apply_type_tac ~cast:(Cic.Prod(Cic.Name "Anonymous",c,
-      CicSubstitution.lift 1 ty)) ~applist:[Cic.Meta(fresh_meta,irl)] 
-       ~status:(proof',goal)
-    in
-     (* We permute the generated goals to be consistent with Coq *)
-     match goals with
-        [] -> assert false
-      | he::tl -> proof'',he::fresh_meta::tl
-;;
-
-
-let exact = PrimitiveTactics.exact_tac;;
-
-let tac_use h ~status:(proof,goal as status) = 
-debug("Inizio TC_USE\n");
-let curi,metasenv,pbo,pty = proof in
-let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-debug ("hname = "^ CicPp.ppterm h.hname ^"\n"); 
-debug ("ty = "^ CicPp.ppterm ty^"\n"); 
-
-let res = 
-match h.htype with
-  "Rlt" -> exact ~term:h.hname ~status
-  |"Rle" -> exact ~term:h.hname ~status
-  |"Rgt" -> (Tacticals.then_ ~start:(PrimitiveTactics.apply_tac 
-             ~term:_Rfourier_gt_to_lt) 
-             ~continuation:(exact ~term:h.hname)) ~status
-  |"Rge" -> (Tacticals.then_ ~start:(PrimitiveTactics.apply_tac 
-             ~term:_Rfourier_ge_to_le)
-              ~continuation:(exact ~term:h.hname)) ~status
-  |"eqTLR" -> (Tacticals.then_ ~start:(PrimitiveTactics.apply_tac 
-               ~term:_Rfourier_eqLR_to_le)
-                ~continuation:(exact ~term:h.hname)) ~status
-  |"eqTRL" -> (Tacticals.then_ ~start:(PrimitiveTactics.apply_tac 
-               ~term:_Rfourier_eqRL_to_le)
-                ~continuation:(exact ~term:h.hname)) ~status
-  |_->assert false
-in
-debug("Fine TAC_USE\n");
-res
-;;
-
-
-
-let is_ineq (h,t) =
-    match t with
-       Cic.Appl ( Cic.Const(u,boh)::next) ->
-         (match (UriManager.string_of_uri u) with
-                "cic:/Coq/Reals/Rdefinitions/Rlt.con" -> true
-               |"cic:/Coq/Reals/Rdefinitions/Rgt.con" -> true
-               |"cic:/Coq/Reals/Rdefinitions/Rle.con" -> true
-               |"cic:/Coq/Reals/Rdefinitions/Rge.con" -> true
-               |"cic:/Coq/Init/Logic_Type/eqT.con" ->
-                   (match (List.hd next) with
-                       Cic.Const (uri,_) when
-                        UriManager.string_of_uri uri =
-                        "cic:/Coq/Reals/Rdefinitions/R.con" -> true
-                     | _ -> false)
-                |_->false)
-     |_->false
-;;
-
-let list_of_sign s = List.map (fun (x,_,z)->(x,z)) s;;
-
-let mkAppL a =
-   Cic.Appl(Array.to_list a)
-;;
-
-(* Résolution d'inéquations linéaires dans R *)
-let rec strip_outer_cast c = match c with
-  | Cic.Cast (c,_) -> strip_outer_cast c
-  | _ -> c
-;;
-
-(*let find_in_context id context =
-  let rec find_in_context_aux c n =
-       match c with
-       [] -> failwith (id^" not found in context")      
-       | a::next -> (match a with 
-                       Some (Cic.Name(name),_) when name = id -> n 
-                             (*? magari al posto di _ qualcosaltro?*)
-                       | _ -> find_in_context_aux next (n+1))
-  in 
-  find_in_context_aux context 1 
-;;
-
-(* mi sembra quadratico *)
-let rec filter_real_hyp context cont =
-  match context with
-  [] -> []
-  | Some(Cic.Name(h),Cic.Decl(t))::next -> (
-                               let n = find_in_context h cont in
-                               debug("assegno "^string_of_int n^" a "^CicPp.ppterm t^"\n");
-                       [(Cic.Rel(n),t)] @ filter_real_hyp next cont)
-  | a::next -> debug("  no\n"); filter_real_hyp next cont
-;;*)
-let filter_real_hyp context _ =
-  let rec filter_aux context num =
-   match context with
-  [] -> []
-  | Some(Cic.Name(h),Cic.Decl(t))::next -> 
-               (
-               (*let n = find_in_context h cont in*)
-               debug("assegno "^string_of_int num^" a "^h^":"^CicPp.ppterm t^"\n");
-               [(Cic.Rel(num),t)] @ filter_aux next (num+1)
-               )
-  | a::next -> filter_aux next (num+1)
-  in
-  filter_aux context 1
-;;
-
-
-(* lifts everithing at the conclusion level *) 
-let rec superlift c n=
-  match c with
-  [] -> []
-  | Some(name,Cic.Decl(a))::next  -> [Some(name,Cic.Decl(
-                  CicSubstitution.lift n a))] @ superlift next (n+1)
-  | Some(name,Cic.Def(a))::next   -> [Some(name,Cic.Def(
-                  CicSubstitution.lift n a))] @ superlift next (n+1)
-  | _::next -> superlift next (n+1) (*??  ??*)
-;;
-
-let equality_replace a b ~status =
-debug("inizio EQ\n");
- let module C = Cic in
-  let proof,goal = status in
-  let curi,metasenv,pbo,pty = proof in
-  let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-   let a_eq_b = C.Appl [ _eqT ; _R ; a ; b ] in
-   let fresh_meta = ProofEngineHelpers.new_meta proof in
-   let irl =
-    ProofEngineHelpers.identity_relocation_list_for_metavariable context in
-   let metasenv' = (fresh_meta,context,a_eq_b)::metasenv in
-debug("chamo rewrite tac su"^CicPp.ppterm (C.Meta (fresh_meta,irl)));
-   let (proof,goals) =
-    EqualityTactics.rewrite_simpl_tac ~term:(C.Meta (fresh_meta,irl))
-     ~status:((curi,metasenv',pbo,pty),goal)
-   in
-   let new_goals = fresh_meta::goals in
-debug("fine EQ -> goals : "^string_of_int( List.length new_goals)  ^" = "
-  ^string_of_int( List.length goals)^"+ meta\n");
-    (proof,new_goals)
-;;
-
-let tcl_fail a ~status:(proof,goal) =
-       match a with
-       1 -> raise (ProofEngineTypes.Fail "fail-tactical")
-       |_-> (proof,[goal])
-;;
-
-(* Galla: moved in variousTactics.ml 
-let assumption_tac ~status:(proof,goal)=
-  let curi,metasenv,pbo,pty = proof in
-  let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-  let num = ref 0 in
-  let tac_list = List.map 
-       ( fun x -> num := !num + 1;
-               match x with
-                 Some(Cic.Name(nm),t) -> (nm,exact ~term:(Cic.Rel(!num)))
-                 | _ -> ("fake",tcl_fail 1)
-       )  
-       context 
-  in
-  Tacticals.try_tactics ~tactics:tac_list ~status:(proof,goal)
-;;
-*)
-(* Galla: moved in negationTactics.ml
-(* !!!!! fix !!!!!!!!!! *)
-let contradiction_tac ~status:(proof,goal)=
-       Tacticals.then_ 
-                (*inutile sia questo che quello prima  della chiamata*)
-               ~start:PrimitiveTactics.intros_tac
-               ~continuation:(Tacticals.then_ 
-                       ~start:(VariousTactics.elim_type_tac ~term:_False) 
-                       ~continuation:(assumption_tac))
-       ~status:(proof,goal) 
-;;
-*)
-
-(* ********************* TATTICA ******************************** *)
-
-let rec fourier ~status:(s_proof,s_goal)=
-  let s_curi,s_metasenv,s_pbo,s_pty = s_proof in
-  let s_metano,s_context,s_ty = List.find (function (m,_,_) -> m=s_goal) 
-   s_metasenv in
-       
-  debug ("invoco fourier_tac sul goal "^string_of_int(s_goal)^" e contesto :\n");
-  debug_pcontext s_context;
-
-  let fhyp = String.copy "new_hyp_for_fourier" in 
-   
-(* here we need to negate the thesis, but to do this we need to apply the right
-theoreme,so let's parse our thesis *)
-  
-  let th_to_appl = ref _Rfourier_not_le_gt in   
-  (match s_ty with
-   Cic.Appl ( Cic.Const(u,boh)::args) ->
-    (match UriManager.string_of_uri u with
-       "cic:/Coq/Reals/Rdefinitions/Rlt.con" -> th_to_appl := 
-               _Rfourier_not_ge_lt
-       |"cic:/Coq/Reals/Rdefinitions/Rle.con" -> th_to_appl := 
-               _Rfourier_not_gt_le
-       |"cic:/Coq/Reals/Rdefinitions/Rgt.con" -> th_to_appl := 
-               _Rfourier_not_le_gt
-       |"cic:/Coq/Reals/Rdefinitions/Rge.con" -> th_to_appl := 
-               _Rfourier_not_lt_ge
-       |_-> failwith "fourier can't be applyed")
-   |_-> failwith "fourier can't be applyed"); 
-   (* fix maybe strip_outer_cast goes here?? *)
-
-   (* now let's change our thesis applying the th and put it with hp *) 
-
-   let proof,gl =
-    Tacticals.then_ 
-     ~start:(PrimitiveTactics.apply_tac ~term:!th_to_appl)
-     ~continuation:(PrimitiveTactics.intros_tac ())
-     ~status:(s_proof,s_goal) in
-   let goal = if List.length gl = 1 then List.hd gl 
-                                    else failwith "a new goal" in
-
-   debug ("port la tesi sopra e la nego. contesto :\n");
-   debug_pcontext s_context;
-
-   (* now we have all the right environment *)
-   
-   let curi,metasenv,pbo,pty = proof in
-   let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-
-
-   (* now we want to convert hp to inequations, but first we must lift
-      everyting to thesis level, so that a variable has the save Rel(n) 
-      in each hp ( needed by ineq1_of_term ) *)
-    
-    (* ? fix if None  ?????*)
-    (* fix change superlift with a real name *)
-
-  let l_context = superlift context 1 in
-  let hyps = filter_real_hyp l_context l_context in
-  
-  debug ("trasformo in diseq. "^ string_of_int (List.length hyps)^" ipotesi\n");
-  
-  let lineq =ref [] in
-  
-  (* transform hyps into inequations *)
-  
-  List.iter (fun h -> try (lineq:=(ineq1_of_term h)@(!lineq))
-                       with _-> ())
-              hyps;
-
-           
-  debug ("applico fourier a "^ string_of_int (List.length !lineq)^
-         " disequazioni\n");
-
-  let res=fourier_lineq (!lineq) in
-  let tac=ref Tacticals.id_tac in
-  if res=[] then 
-       (print_string "Tactic Fourier fails.\n";flush stdout;
-        failwith "fourier_tac fails")
-  else 
-  (
-  match res with (*match res*)
-  [(cres,sres,lc)]->
-  
-     (* in lc we have the coefficient to "reduce" the system *)
-     
-     print_string "Fourier's method can prove the goal...\n";flush stdout;
-         
-     debug "I coeff di moltiplicazione rit sono: ";
-     
-     let lutil=ref [] in
-     List.iter 
-        (fun (h,c) -> if c<>r0 then (lutil:=(h,c)::(!lutil);
-          (* DBG *)Fourier.print_rational(c);print_string " "(* DBG *))
-                                    )
-        (List.combine (!lineq) lc); 
-       
-     print_string (" quindi lutil e' lunga "^
-      string_of_int (List.length (!lutil))^"\n");                 
-       
-     (* on construit la combinaison linéaire des inéquation *)
-     
-     (match (!lutil) with (*match (!lutil) *)
-       (h1,c1)::lutil ->
-       debug ("elem di lutil ");Fourier.print_rational c1;print_string "\n"; 
-         
-       let s=ref (h1.hstrict) in
-         
-          
-       let t1 = ref (Cic.Appl [_Rmult;rational_to_real c1;h1.hleft] ) in
-       let t2 = ref (Cic.Appl [_Rmult;rational_to_real c1;h1.hright]) in
-
-       List.iter (fun (h,c) ->
-              s:=(!s)||(h.hstrict);
-              t1:=(Cic.Appl [_Rplus;!t1;Cic.Appl 
-                    [_Rmult;rational_to_real c;h.hleft ]  ]);
-              t2:=(Cic.Appl [_Rplus;!t2;Cic.Appl 
-                    [_Rmult;rational_to_real c;h.hright]  ]))
-               lutil;
-              
-       let ineq=Cic.Appl [(if (!s) then _Rlt else _Rle);!t1;!t2 ] in
-       let tc=rational_to_real cres in
-
-
-(* ora ho i termini che descrivono i passi di fourier per risolvere il sistema *)
-       
-       debug "inizio a costruire tac1\n";
-       Fourier.print_rational(c1);
-         
-       let tac1=ref ( fun ~status -> 
-        if h1.hstrict then 
-          (Tacticals.thens 
-            ~start:(
-             fun ~status -> 
-             debug ("inizio t1 strict\n");
-             let curi,metasenv,pbo,pty = proof in
-             let metano,context,ty = List.find 
-              (function (m,_,_) -> m=goal) metasenv in
-             debug ("th = "^ CicPp.ppterm _Rfourier_lt ^"\n"); 
-             debug ("ty = "^ CicPp.ppterm ty^"\n"); 
-              PrimitiveTactics.apply_tac ~term:_Rfourier_lt ~status)
-            ~continuations:[tac_use h1;tac_zero_inf_pos  
-             (rational_to_fraction c1)] 
-           ~status
-          )
-           else 
-          (Tacticals.thens 
-            ~start:(PrimitiveTactics.apply_tac ~term:_Rfourier_le)
-             ~continuations:[tac_use h1;tac_zero_inf_pos
-             (rational_to_fraction c1)] ~status
-          )
-        )
-                   
-       in
-       s:=h1.hstrict;
-       List.iter (fun (h,c) -> 
-         (if (!s) then 
-          (if h.hstrict then 
-            (debug("tac1 1\n");
-            tac1:=(Tacticals.thens 
-              ~start:(PrimitiveTactics.apply_tac 
-               ~term:_Rfourier_lt_lt)
-              ~continuations:[!tac1;tac_use h;tac_zero_inf_pos
-               (rational_to_fraction c)])
-            )
-          else 
-            (debug("tac1 2\n");
-            Fourier.print_rational(c1);
-            tac1:=(Tacticals.thens 
-             ~start:(
-               fun ~status -> 
-               debug("INIZIO TAC 1 2\n");
-               let curi,metasenv,pbo,pty = proof in
-               let metano,context,ty = List.find (function (m,_,_) -> m=goal) 
-                metasenv in
-               debug ("th = "^ CicPp.ppterm _Rfourier_lt_le ^"\n"); 
-               debug ("ty = "^ CicPp.ppterm ty^"\n"); 
-                PrimitiveTactics.apply_tac ~term:_Rfourier_lt_le ~status)
-             ~continuations:[!tac1;tac_use h;tac_zero_inf_pos 
-               (rational_to_fraction c)])
-             )
-           )
-        else 
-           (if h.hstrict then 
-            (debug("tac1 3\n");
-            tac1:=(Tacticals.thens 
-              ~start:(PrimitiveTactics.apply_tac ~term:_Rfourier_le_lt)
-              ~continuations:[!tac1;tac_use h;tac_zero_inf_pos  
-                (rational_to_fraction c)])
-            )
-          else 
-            (debug("tac1 4\n");
-            tac1:=(Tacticals.thens 
-              ~start:(PrimitiveTactics.apply_tac ~term:_Rfourier_le_le)
-              ~continuations:[!tac1;tac_use h;tac_zero_inf_pos  
-                (rational_to_fraction c)])
-            )
-           )
-        );
-        s:=(!s)||(h.hstrict)) lutil;(*end List.iter*)
-                     
-       let tac2 = 
-         if sres then 
-          tac_zero_inf_false goal (rational_to_fraction cres)
-         else 
-          tac_zero_infeq_false goal (rational_to_fraction cres)
-       in
-       tac:=(Tacticals.thens 
-         ~start:(my_cut ~term:ineq) 
-         ~continuations:[(*Tacticals.id_tac;Tacticals.id_tac*)(**)Tacticals.then_  
-          ~start:(fun ~status:(proof,goal as status) ->
-             let curi,metasenv,pbo,pty = proof in
-             let metano,context,ty = List.find (function (m,_,_) -> m=goal) 
-             metasenv in
-             PrimitiveTactics.change_tac ~what:ty 
-             ~with_what:(Cic.Appl [ _not; ineq]) ~status)
-          ~continuation:(Tacticals.then_ 
-             ~start:(PrimitiveTactics.apply_tac ~term:
-              (if sres then _Rnot_lt_lt else _Rnot_le_le))
-            ~continuation:(Tacticals.thens 
-              ~start:( 
-                fun ~status ->
-                debug("t1 ="^CicPp.ppterm !t1 ^"t2 ="^CicPp.ppterm !t2 ^"tc="^ CicPp.ppterm tc^"\n");
-                let r = equality_replace (Cic.Appl [_Rminus;!t2;!t1] ) tc 
-                 ~status
-                in
-                (match r with (p,gl) -> 
-                  debug("eq1 ritorna "^string_of_int(List.length gl)^"\n" ));
-                 r)
-              ~continuations:[(Tacticals.thens 
-                ~start:(
-                  fun ~status ->
-                  let r = equality_replace (Cic.Appl[_Rinv;_R1]) _R1 ~status in
-                  (match r with (p,gl) ->
-                    debug("eq2 ritorna "^string_of_int(List.length gl)^"\n" ));
-                  r)
-                ~continuations:
-                   [PrimitiveTactics.apply_tac ~term:_Rinv_R1
-                ;Tacticals.try_tactics 
-                  ~tactics:[ "ring", (fun ~status -> 
-                                       debug("begin RING\n");
-                                       let r = Ring.ring_tac  ~status in
-                                       debug ("end RING\n");
-                                       r)
-                       ; "id", Tacticals.id_tac] 
-                ])
-              ;(*Tacticals.id_tac*)
-               Tacticals.then_ 
-                ~start:
-                 (
-                 fun ~status:(proof,goal as status) ->
-                  let curi,metasenv,pbo,pty = proof in
-                  let metano,context,ty = List.find (function (m,_,_) -> m=
-                   goal) metasenv in
-                  (* check if ty is of type *)
-                  let w1 = 
-                    debug("qui c'e' gia' l'or "^CicPp.ppterm ty^"\n");
-                    (match ty with
-                    Cic.Prod (Cic.Anonymous,a,b) -> (Cic.Appl [_not;a])
-                    |_ -> assert false)
-                  in
-                  let r = PrimitiveTactics.change_tac ~what:ty ~with_what:w1 ~status in
-                  debug("fine MY_CHNGE\n");
-                  r
-                  
-                 ) 
-                ~continuation:(*PORTINGTacticals.id_tac*)tac2]))
-        ;(*Tacticals.id_tac*)!tac1]);(*end tac:=*)
-
-    |_-> assert false)(*match (!lutil) *)
-  |_-> assert false); (*match res*)
-  debug ("finalmente applico tac\n");
-  (
-  let r = !tac ~status:(proof,goal) in
-  debug("\n\n]]]]]]]]]]]]]]]]]) That's all folks ([[[[[[[[[[[[[[[[[[[\n\n");r
-  
-  ) 
-;;
-
-let fourier_tac ~status:(proof,goal) = fourier ~status:(proof,goal);;
-
-
diff --git a/helm/ocaml/tactics/fourierR.mli b/helm/ocaml/tactics/fourierR.mli
deleted file mode 100644 (file)
index e5790ec..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-(* 
-val rewrite_tac: term:Cic.term -> ProofEngineTypes.tactic
-val rewrite_simpl_tac: term:Cic.term -> ProofEngineTypes.tactic
-*)
-val fourier_tac: ProofEngineTypes.tactic
diff --git a/helm/ocaml/tactics/introductionTactics.ml b/helm/ocaml/tactics/introductionTactics.ml
deleted file mode 100644 (file)
index 6318f48..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- *
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- *
- * HELM 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.
- *
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- *
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-
-let constructor_tac ~n ~status:(proof, goal) =
-  let module C = Cic in
-  let module R = CicReduction in
-   let (_,metasenv,_,_) = proof in
-    let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-     match (R.whd context ty) with
-        (C.MutInd (uri, typeno, exp_named_subst))
-      | (C.Appl ((C.MutInd (uri, typeno, exp_named_subst))::_)) ->
-         PrimitiveTactics.apply_tac 
-          ~term: (C.MutConstruct (uri, typeno, n, exp_named_subst))
-          ~status:(proof, goal)
-      | _ -> raise (ProofEngineTypes.Fail "Constructor: failed")
-;;
-
-
-let exists_tac ~status =
-  constructor_tac ~n:1 ~status
-;;
-
-
-let split_tac ~status =
-  constructor_tac ~n:1 ~status
-;;
-
-
-let left_tac ~status =
-  constructor_tac ~n:1 ~status
-;;
-
-
-let right_tac ~status =
-  constructor_tac ~n:2 ~status
-;;
-
diff --git a/helm/ocaml/tactics/introductionTactics.mli b/helm/ocaml/tactics/introductionTactics.mli
deleted file mode 100644 (file)
index c3a1272..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val constructor_tac: n:int -> ProofEngineTypes.tactic
-
-val exists_tac: ProofEngineTypes.tactic
-val split_tac: ProofEngineTypes.tactic
-val left_tac: ProofEngineTypes.tactic
-val right_tac: ProofEngineTypes.tactic
diff --git a/helm/ocaml/tactics/negationTactics.ml b/helm/ocaml/tactics/negationTactics.ml
deleted file mode 100644 (file)
index 25c2991..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- *
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- *
- * HELM 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.
- *
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- *
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-
-let absurd_tac ~term ~status:((proof,goal) as status) =
-  let module C = Cic in
-  let module U = UriManager in
-  let module P = PrimitiveTactics in
-   let _,metasenv,_,_ = proof in
-    let _,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-     if ((CicTypeChecker.type_of_aux' metasenv context term) = (C.Sort C.Prop)) (* ma questo controllo serve?? *)
-      then P.apply_tac 
-              ~term:(C.Appl [(C.Const ((U.uri_of_string "cic:/Coq/Init/Logic/absurd.con") , [] )) ; term ; ty]) ~status
-      else raise (ProofEngineTypes.Fail "Absurd: Not a Proposition")
-;;
-
-
-let contradiction_tac ~status =
-  let module C = Cic in
-  let module U = UriManager in
-  let module P = PrimitiveTactics in
-  let module T = Tacticals in
-   try
-    T.then_
-      ~start:(P.intros_tac ())
-      ~continuation:(
-        T.then_
-           ~start:
-             (EliminationTactics.elim_type_tac 
-                ~term:
-                  (C.MutInd ((U.uri_of_string "cic:/Coq/Init/Logic/False.ind"), 0, [])))
-           ~continuation: VariousTactics.assumption_tac)
-    ~status
-   with 
-    (ProofEngineTypes.Fail "Assumption: No such assumption") -> raise (ProofEngineTypes.Fail "Contradiction: No such assumption")
-    (* sarebbe piu' elegante se Assumtion sollevasse un'eccezione tutta sua che questa cattura, magari con l'aiuto di try_tactics *)
-;;
-
-(* Questa era in fourierR.ml
-(* !!!!! fix !!!!!!!!!! *)
-let contradiction_tac ~status:(proof,goal)=
-        Tacticals.then_
-                ~start:(PrimitiveTactics.intros_tac ~name:"bo?" ) (*inutile sia questo che quello prima  della chiamata*)
-                ~continuation:(Tacticals.then_
-                        ~start:(VariousTactics.elim_type_tac ~term:_False)
-                        ~continuation:(assumption_tac))
-        ~status:(proof,goal)
-;;
-*)
-
-
diff --git a/helm/ocaml/tactics/negationTactics.mli b/helm/ocaml/tactics/negationTactics.mli
deleted file mode 100644 (file)
index bfa3e8d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val absurd_tac: term:Cic.term -> ProofEngineTypes.tactic
-val contradiction_tac: ProofEngineTypes.tactic
-
diff --git a/helm/ocaml/tactics/primitiveTactics.ml b/helm/ocaml/tactics/primitiveTactics.ml
deleted file mode 100644 (file)
index 91cd619..0000000
+++ /dev/null
@@ -1,565 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-open ProofEngineHelpers
-open ProofEngineTypes
-
-exception NotAnInductiveTypeToEliminate
-exception NotTheRightEliminatorShape
-exception NoHypothesesFound
-exception WrongUriToVariable of string
-
-(* lambda_abstract newmeta ty *)
-(* returns a triple [bo],[context],[ty'] where              *)
-(* [ty] = Pi/LetIn [context].[ty'] ([context] is a vector!) *)
-(* and [bo] = Lambda/LetIn [context].(Meta [newmeta])       *)
-(* So, lambda_abstract is the core of the implementation of *)
-(* the Intros tactic.                                       *)
-let lambda_abstract context newmeta ty mk_fresh_name =
- let module C = Cic in
-  let rec collect_context context =
-   function
-      C.Cast (te,_)   -> collect_context context te
-    | C.Prod (n,s,t)  ->
-       let n' = mk_fresh_name context n ~typ:s in
-        let (context',ty,bo) =
-         collect_context ((Some (n',(C.Decl s)))::context) t
-        in
-         (context',ty,C.Lambda(n',s,bo))
-    | C.LetIn (n,s,t) ->
-       let (context',ty,bo) =
-        collect_context ((Some (n,(C.Def s)))::context) t
-       in
-        (context',ty,C.LetIn(n,s,bo))
-    | _ as t ->
-      let irl = identity_relocation_list_for_metavariable context in
-       context, t, (C.Meta (newmeta,irl))
-  in
-   collect_context context ty
-
-let eta_expand metasenv context t arg =
- let module T = CicTypeChecker in
- let module S = CicSubstitution in
- let module C = Cic in
-  let rec aux n =
-   function
-      t' when t' = S.lift n arg -> C.Rel (1 + n)
-    | C.Rel m  -> if m <= n then C.Rel m else C.Rel (m+1)
-    | C.Var (uri,exp_named_subst) ->
-       let exp_named_subst' = aux_exp_named_subst n exp_named_subst in
-        C.Var (uri,exp_named_subst')
-    | C.Meta _
-    | C.Sort _
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) -> C.Cast (aux n te, aux n ty)
-    | C.Prod (nn,s,t) -> C.Prod (nn, aux n s, aux (n+1) t)
-    | C.Lambda (nn,s,t) -> C.Lambda (nn, aux n s, aux (n+1) t)
-    | C.LetIn (nn,s,t) -> C.LetIn (nn, aux n s, aux (n+1) t)
-    | C.Appl l -> C.Appl (List.map (aux n) l)
-    | C.Const (uri,exp_named_subst) ->
-       let exp_named_subst' = aux_exp_named_subst n exp_named_subst in
-        C.Const (uri,exp_named_subst')
-    | C.MutInd (uri,i,exp_named_subst) ->
-       let exp_named_subst' = aux_exp_named_subst n exp_named_subst in
-        C.MutInd (uri,i,exp_named_subst')
-    | C.MutConstruct (uri,i,j,exp_named_subst) ->
-       let exp_named_subst' = aux_exp_named_subst n exp_named_subst in
-        C.MutConstruct (uri,i,j,exp_named_subst')
-    | C.MutCase (sp,i,outt,t,pl) ->
-       C.MutCase (sp,i,aux n outt, aux n t,
-        List.map (aux n) pl)
-    | C.Fix (i,fl) ->
-       let tylen = List.length fl in
-        let substitutedfl =
-         List.map
-          (fun (name,i,ty,bo) -> (name, i, aux n ty, aux (n+tylen) bo))
-           fl
-        in
-         C.Fix (i, substitutedfl)
-    | C.CoFix (i,fl) ->
-       let tylen = List.length fl in
-        let substitutedfl =
-         List.map
-          (fun (name,ty,bo) -> (name, aux n ty, aux (n+tylen) bo))
-           fl
-        in
-         C.CoFix (i, substitutedfl)
-  and aux_exp_named_subst n =
-   List.map (function uri,t -> uri,aux n t)
-  in
-   let argty =
-    T.type_of_aux' metasenv context arg
-   in
-    let fresh_name =
-     ProofEngineHelpers.mk_fresh_name context (Cic.Name "Heta") ~typ:argty
-    in
-     (C.Appl [C.Lambda (fresh_name,argty,aux 0 t) ; arg])
-
-(*CSC: ma serve solamente la prima delle new_uninst e l'unione delle due!!! *)
-let classify_metas newmeta in_subst_domain subst_in metasenv =
- List.fold_right
-  (fun (i,canonical_context,ty) (old_uninst,new_uninst) ->
-    if in_subst_domain i then
-     old_uninst,new_uninst
-    else
-     let ty' = subst_in canonical_context ty in
-      let canonical_context' =
-       List.fold_right
-        (fun entry canonical_context' ->
-          let entry' =
-           match entry with
-              Some (n,Cic.Decl s) ->
-               Some (n,Cic.Decl (subst_in canonical_context' s))
-            | Some (n,Cic.Def s) ->
-               Some (n,Cic.Def (subst_in canonical_context' s))
-            | None -> None
-          in
-           entry'::canonical_context'
-        ) canonical_context []
-     in
-      if i < newmeta then
-       ((i,canonical_context',ty')::old_uninst),new_uninst
-      else
-       old_uninst,((i,canonical_context',ty')::new_uninst)
-  ) metasenv ([],[])
-
-(* Auxiliary function for apply: given a type (a backbone), it returns its   *)
-(* head, a META environment in which there is new a META for each hypothesis,*)
-(* a list of arguments for the new applications and the indexes of the first *)
-(* and last new METAs introduced. The nth argument in the list of arguments  *)
-(* is just the nth new META.                                                 *)
-let new_metasenv_for_apply newmeta proof context ty =
- let module C = Cic in
- let module S = CicSubstitution in
-  let rec aux newmeta =
-   function
-      C.Cast (he,_) -> aux newmeta he
-    | C.Prod (name,s,t) ->
-       let irl = identity_relocation_list_for_metavariable context in
-        let newargument = C.Meta (newmeta,irl) in
-         let (res,newmetasenv,arguments,lastmeta) =
-          aux (newmeta + 1) (S.subst newargument t)
-         in
-          res,(newmeta,context,s)::newmetasenv,newargument::arguments,lastmeta
-    | t -> t,[],[],newmeta
-  in
-   (* WARNING: here we are using the invariant that above the most *)
-   (* recente new_meta() there are no used metas.                  *)
-   let (res,newmetasenv,arguments,lastmeta) = aux newmeta ty in
-    res,newmetasenv,arguments,lastmeta
-
-(* Useful only inside apply_tac *)
-let
- generalize_exp_named_subst_with_fresh_metas context newmeta uri exp_named_subst
-=
- let module C = Cic in
-  let params =
-   match CicEnvironment.get_obj uri with
-      C.Constant (_,_,_,params)
-    | C.CurrentProof (_,_,_,_,params)
-    | C.Variable (_,_,_,params)
-    | C.InductiveDefinition (_,params,_) -> params
-  in
-   let exp_named_subst_diff,new_fresh_meta,newmetasenvfragment,exp_named_subst'=
-    let next_fresh_meta = ref newmeta in
-    let newmetasenvfragment = ref [] in
-    let exp_named_subst_diff = ref [] in
-     let rec aux =
-      function
-         [],[] -> []
-       | uri::tl,[] ->
-          let ty =
-           match CicEnvironment.get_obj uri with
-              C.Variable (_,_,ty,_) ->
-               CicSubstitution.subst_vars !exp_named_subst_diff ty
-            | _ -> raise (WrongUriToVariable (UriManager.string_of_uri uri))
-          in
-           let irl = identity_relocation_list_for_metavariable context in
-           let subst_item = uri,C.Meta (!next_fresh_meta,irl) in
-            newmetasenvfragment :=
-             (!next_fresh_meta,context,ty)::!newmetasenvfragment ;
-            exp_named_subst_diff := !exp_named_subst_diff @ [subst_item] ;
-            incr next_fresh_meta ;
-            subst_item::(aux (tl,[]))
-       | uri::tl1,((uri',_) as s)::tl2 ->
-          assert (UriManager.eq uri uri') ;
-          s::(aux (tl1,tl2))
-       | [],_ -> assert false
-     in
-      let exp_named_subst' = aux (params,exp_named_subst) in
-       !exp_named_subst_diff,!next_fresh_meta,
-        List.rev !newmetasenvfragment, exp_named_subst'
-   in
-prerr_endline ("@@@ " ^ CicPp.ppterm (Cic.Var (uri,exp_named_subst)) ^ " |--> " ^ CicPp.ppterm (Cic.Var (uri,exp_named_subst'))) ;
-    new_fresh_meta,newmetasenvfragment,exp_named_subst',exp_named_subst_diff
-;;
-
-let apply_tac ~term ~status:(proof, goal) =
-  (* Assumption: The term "term" must be closed in the current context *)
- let module T = CicTypeChecker in
- let module R = CicReduction in
- let module C = Cic in
-  let (_,metasenv,_,_) = proof in
-  let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-  let newmeta = new_meta ~proof in
-   let exp_named_subst_diff,newmeta',newmetasenvfragment,term' =
-    match term with
-       C.Var (uri,exp_named_subst) ->
-        let newmeta',newmetasenvfragment,exp_named_subst',exp_named_subst_diff =
-         generalize_exp_named_subst_with_fresh_metas context newmeta uri
-          exp_named_subst
-        in
-         exp_named_subst_diff,newmeta',newmetasenvfragment,
-          C.Var (uri,exp_named_subst')
-     | C.Const (uri,exp_named_subst) ->
-        let newmeta',newmetasenvfragment,exp_named_subst',exp_named_subst_diff =
-         generalize_exp_named_subst_with_fresh_metas context newmeta uri
-          exp_named_subst
-        in
-         exp_named_subst_diff,newmeta',newmetasenvfragment,
-          C.Const (uri,exp_named_subst')
-     | C.MutInd (uri,tyno,exp_named_subst) ->
-        let newmeta',newmetasenvfragment,exp_named_subst',exp_named_subst_diff =
-         generalize_exp_named_subst_with_fresh_metas context newmeta uri
-          exp_named_subst
-        in
-         exp_named_subst_diff,newmeta',newmetasenvfragment,
-          C.MutInd (uri,tyno,exp_named_subst')
-     | C.MutConstruct (uri,tyno,consno,exp_named_subst) ->
-        let newmeta',newmetasenvfragment,exp_named_subst',exp_named_subst_diff =
-         generalize_exp_named_subst_with_fresh_metas context newmeta uri
-          exp_named_subst
-        in
-         exp_named_subst_diff,newmeta',newmetasenvfragment,
-          C.MutConstruct (uri,tyno,consno,exp_named_subst')
-     | _ -> [],newmeta,[],term
-   in
-   let metasenv' = metasenv@newmetasenvfragment in
-prerr_endline ("^^^^^TERM': " ^ CicPp.ppterm term') ; 
-   let termty =
-    CicSubstitution.subst_vars exp_named_subst_diff
-     (CicTypeChecker.type_of_aux' metasenv' context term)
-   in
-prerr_endline ("^^^^^TERMTY: " ^ CicPp.ppterm termty) ; 
-    (* newmeta is the lowest index of the new metas introduced *)
-    let (consthead,newmetas,arguments,_) =
-     new_metasenv_for_apply newmeta' proof context termty
-    in
-     let newmetasenv = metasenv'@newmetas in
-      let subst,newmetasenv' =
-       CicUnification.fo_unif newmetasenv context consthead ty
-      in
-       let in_subst_domain i = List.exists (function (j,_) -> i=j) subst in
-       let apply_subst = CicUnification.apply_subst subst in
-        let old_uninstantiatedmetas,new_uninstantiatedmetas =
-         (* subst_in doesn't need the context. Hence the underscore. *)
-         let subst_in _ = CicUnification.apply_subst subst in
-          classify_metas newmeta in_subst_domain subst_in newmetasenv'
-        in
-         let bo' =
-          apply_subst
-           (if List.length newmetas = 0 then
-             term'
-            else
-             Cic.Appl (term'::arguments)
-           )
-         in
-prerr_endline ("XXXX " ^ CicPp.ppterm (if List.length newmetas = 0 then term' else Cic.Appl (term'::arguments)) ^ " |>>> " ^ CicPp.ppterm bo') ;
-          let newmetasenv'' = new_uninstantiatedmetas@old_uninstantiatedmetas in
-          let (newproof, newmetasenv''') =
-           let subst_in = CicUnification.apply_subst ((metano,bo')::subst) in
-            subst_meta_and_metasenv_in_proof
-              proof metano subst_in newmetasenv''
-          in
-           (newproof, List.map (function (i,_,_) -> i) new_uninstantiatedmetas)
-
-  (* TODO per implementare i tatticali e' necessario che tutte le tattiche
-  sollevino _solamente_ Fail *)
-let apply_tac ~term ~status =
-  try
-    apply_tac ~term ~status
-      (* TODO cacciare anche altre eccezioni? *)
-  with CicUnification.UnificationFailed as e ->
-    raise (Fail (Printexc.to_string e))
-
-let intros_tac
- ?(mk_fresh_name_callback = ProofEngineHelpers.mk_fresh_name) ()
- ~status:(proof, goal)
-=
- let module C = Cic in
- let module R = CicReduction in
-  let (_,metasenv,_,_) = proof in
-  let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-   let newmeta = new_meta ~proof in
-    let (context',ty',bo') =
-     lambda_abstract context newmeta ty mk_fresh_name_callback
-    in
-     let (newproof, _) =
-       subst_meta_in_proof proof metano bo' [newmeta,context',ty']
-     in
-      (newproof, [newmeta])
-
-let cut_tac
- ?(mk_fresh_name_callback = ProofEngineHelpers.mk_fresh_name)
- term ~status:(proof, goal)
-=
- let module C = Cic in
-  let curi,metasenv,pbo,pty = proof in
-  let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-   let newmeta1 = new_meta ~proof in
-   let newmeta2 = newmeta1 + 1 in
-   let fresh_name =
-    mk_fresh_name_callback context (Cic.Name "Hcut") ~typ:term in
-   let context_for_newmeta1 =
-    (Some (fresh_name,C.Decl term))::context in
-   let irl1 =
-    identity_relocation_list_for_metavariable context_for_newmeta1 in
-   let irl2 = identity_relocation_list_for_metavariable context in
-    let newmeta1ty = CicSubstitution.lift 1 ty in
-    let bo' =
-     C.Appl
-      [C.Lambda (fresh_name,term,C.Meta (newmeta1,irl1)) ;
-       C.Meta (newmeta2,irl2)]
-    in
-     let (newproof, _) =
-      subst_meta_in_proof proof metano bo'
-       [newmeta2,context,term; newmeta1,context_for_newmeta1,newmeta1ty];
-     in
-      (newproof, [newmeta1 ; newmeta2])
-
-let letin_tac
- ?(mk_fresh_name_callback = ProofEngineHelpers.mk_fresh_name)
- term ~status:(proof, goal)
-=
- let module C = Cic in
-  let curi,metasenv,pbo,pty = proof in
-  let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-   let _ = CicTypeChecker.type_of_aux' metasenv context term in
-    let newmeta = new_meta ~proof in
-    let fresh_name =
-     mk_fresh_name_callback context (Cic.Name "Hletin") ~typ:term in
-    let context_for_newmeta =
-     (Some (fresh_name,C.Def term))::context in
-    let irl =
-     identity_relocation_list_for_metavariable context_for_newmeta in
-     let newmetaty = CicSubstitution.lift 1 ty in
-     let bo' = C.LetIn (fresh_name,term,C.Meta (newmeta,irl)) in
-      let (newproof, _) =
-        subst_meta_in_proof
-          proof metano bo'[newmeta,context_for_newmeta,newmetaty]
-      in
-       (newproof, [newmeta])
-
-  (** functional part of the "exact" tactic *)
-let exact_tac ~term ~status:(proof, goal) =
- (* Assumption: the term bo must be closed in the current context *)
- let (_,metasenv,_,_) = proof in
- let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
- let module T = CicTypeChecker in
- let module R = CicReduction in
- if R.are_convertible context (T.type_of_aux' metasenv context term) ty then
-  begin
-   let (newproof, metasenv') =
-     subst_meta_in_proof proof metano term [] in
-   (newproof, [])
-  end
- else
-  raise (Fail "The type of the provided term is not the one expected.")
-
-
-(* not really "primitive" tactics .... *)
-
-let elim_tac ~term ~status:(proof, goal) =
- let module T = CicTypeChecker in
- let module U = UriManager in
- let module R = CicReduction in
- let module C = Cic in
-  let (curi,metasenv,_,_) = proof in
-  let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-   let termty = T.type_of_aux' metasenv context term in
-   let uri,exp_named_subst,typeno,args =
-    match termty with
-       C.MutInd (uri,typeno,exp_named_subst) -> (uri,exp_named_subst,typeno,[])
-     | C.Appl ((C.MutInd (uri,typeno,exp_named_subst))::args) ->
-         (uri,exp_named_subst,typeno,args)
-     | _ -> raise NotAnInductiveTypeToEliminate
-   in
-    let eliminator_uri =
-     let buri = U.buri_of_uri uri in
-     let name = 
-      match CicEnvironment.get_obj uri with
-         C.InductiveDefinition (tys,_,_) ->
-          let (name,_,_,_) = List.nth tys typeno in
-           name
-       | _ -> assert false
-     in
-     let ext =
-      match T.type_of_aux' metasenv context ty with
-         C.Sort C.Prop -> "_ind"
-       | C.Sort C.Set  -> "_rec"
-       | C.Sort C.Type -> "_rect"
-       | _ -> assert false
-     in
-      U.uri_of_string (buri ^ "/" ^ name ^ ext ^ ".con")
-    in
-     let eliminator_ref = C.Const (eliminator_uri,exp_named_subst) in
-      let ety = T.type_of_aux' metasenv context eliminator_ref in
-      let newmeta = new_meta ~proof in
-       let (econclusion,newmetas,arguments,lastmeta) =
-         new_metasenv_for_apply newmeta proof context ety
-       in
-        (* Here we assume that we have only one inductive hypothesis to *)
-        (* eliminate and that it is the last hypothesis of the theorem. *)
-        (* A better approach would be fingering the hypotheses in some  *)
-        (* way.                                                         *)
-        let meta_of_corpse =
-         let (_,canonical_context,_) =
-          List.find (function (m,_,_) -> m=(lastmeta - 1)) newmetas
-         in
-          let irl =
-           identity_relocation_list_for_metavariable canonical_context
-          in
-           Cic.Meta (lastmeta - 1, irl)
-        in
-        let newmetasenv = newmetas @ metasenv in
-        let subst1,newmetasenv' =
-         CicUnification.fo_unif newmetasenv context term meta_of_corpse
-        in
-         let ueconclusion = CicUnification.apply_subst subst1 econclusion in
-          (* The conclusion of our elimination principle is *)
-          (*  (?i farg1 ... fargn)                         *)
-          (* The conclusion of our goal is ty. So, we can   *)
-          (* eta-expand ty w.r.t. farg1 .... fargn to get   *)
-          (* a new ty equal to (P farg1 ... fargn). Now     *)
-          (* ?i can be instantiated with P and we are ready *)
-          (* to refine the term.                            *)
-          let emeta, fargs =
-           match ueconclusion with
-              C.Appl ((C.Meta (emeta,_))::fargs) -> emeta,fargs
-            | C.Meta (emeta,_) -> emeta,[]
-            | _ -> raise NotTheRightEliminatorShape
-          in
-           let ty' = CicUnification.apply_subst subst1 ty in
-           let eta_expanded_ty =
-(*CSC: newmetasenv' era metasenv ??????????? *)
-            List.fold_left (eta_expand newmetasenv' context) ty' fargs
-           in
-            let subst2,newmetasenv'' =
-(*CSC: passo newmetasenv', ma alcune variabili sono gia' state sostituite
-da subst1!!!! Dovrei rimuoverle o sono innocue?*)
-             CicUnification.fo_unif
-              newmetasenv' context ueconclusion eta_expanded_ty
-            in
-             let in_subst_domain i =
-              let eq_to_i = function (j,_) -> i=j in
-               List.exists eq_to_i subst1 ||
-               List.exists eq_to_i subst2
-             in
-              (* When unwinding the META that corresponds to the elimination *)
-              (* predicate (which is emeta), we must also perform one-step   *)
-              (* beta-reduction. apply_subst doesn't need the context. Hence *)
-              (* the underscore.                                             *)
-              let apply_subst _ t =
-               let t' = CicUnification.apply_subst subst1 t in
-                CicUnification.apply_subst_reducing
-                 subst2 (Some (emeta,List.length fargs)) t'
-              in
-                let old_uninstantiatedmetas,new_uninstantiatedmetas =
-                 classify_metas newmeta in_subst_domain apply_subst
-                  newmetasenv''
-                in
-                 let arguments' = List.map (apply_subst context) arguments in
-                  let bo' = Cic.Appl (eliminator_ref::arguments') in
-                   let newmetasenv''' =
-                    new_uninstantiatedmetas@old_uninstantiatedmetas
-                   in
-                    let (newproof, newmetasenv'''') =
-                     (* When unwinding the META that corresponds to the *)
-                     (* elimination predicate (which is emeta), we must *)
-                     (* also perform one-step beta-reduction.           *)
-                     (* The only difference w.r.t. apply_subst is that  *)
-                     (* we also substitute metano with bo'.             *)
-                     (*CSC: Nota: sostituire nuovamente subst1 e' superfluo, *)
-                     (*CSC: no?                                              *)
-                     let apply_subst' t =
-                      let t' = CicUnification.apply_subst subst1 t in
-                       CicUnification.apply_subst_reducing
-                        ((metano,bo')::subst2)
-                        (Some (emeta,List.length fargs)) t'
-                     in
-                      subst_meta_and_metasenv_in_proof
-                        proof metano apply_subst' newmetasenv'''
-                    in
-                     (newproof,
-                      List.map (function (i,_,_) -> i) new_uninstantiatedmetas)
-;;
-
-(* The simplification is performed only on the conclusion *)
-let elim_intros_simpl_tac ~term =
- Tacticals.then_ ~start:(elim_tac ~term)
-  ~continuation:
-   (Tacticals.thens
-     ~start:(intros_tac ())
-     ~continuations:
-       [ReductionTactics.simpl_tac ~also_in_hypotheses:false ~terms:None])
-;;
-
-exception NotConvertible
-
-(*CSC: Bug (or feature?). [with_what] is parsed in the context of the goal,  *)
-(*CSC: while [what] can have a richer context (because of binders)           *)
-(*CSC: So it is _NOT_ possible to use those binders in the [with_what] term. *)
-(*CSC: Is that evident? Is that right? Or should it be changed?              *)
-let change_tac ~what ~with_what ~status:(proof, goal) =
- let curi,metasenv,pbo,pty = proof in
- let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-  (* are_convertible works only on well-typed terms *)
-  ignore (CicTypeChecker.type_of_aux' metasenv context with_what) ;
-  if CicReduction.are_convertible context what with_what then
-   begin
-    let replace =
-     ProofEngineReduction.replace
-      ~equality:(==) ~what:[what] ~with_what:[with_what]
-    in
-    let ty' = replace ty in
-    let context' =
-     List.map
-      (function
-          Some (name,Cic.Def  t) -> Some (name,Cic.Def  (replace t))
-        | Some (name,Cic.Decl t) -> Some (name,Cic.Decl (replace t))
-        | None -> None
-      ) context
-    in
-     let metasenv' = 
-      List.map
-       (function
-           (n,_,_) when n = metano -> (metano,context',ty')
-         | _ as t -> t
-       ) metasenv
-     in
-      (curi,metasenv',pbo,pty), [metano]
-   end
-  else
-   raise (ProofEngineTypes.Fail "Not convertible")
diff --git a/helm/ocaml/tactics/primitiveTactics.mli b/helm/ocaml/tactics/primitiveTactics.mli
deleted file mode 100644 (file)
index bef3bb2..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val apply_tac:
-  term: Cic.term -> ProofEngineTypes.tactic
-val exact_tac:
-  term: Cic.term -> ProofEngineTypes.tactic
-val intros_tac:
-  ?mk_fresh_name_callback:ProofEngineTypes.mk_fresh_name_type -> unit ->
-   ProofEngineTypes.tactic
-val cut_tac:
-  ?mk_fresh_name_callback:ProofEngineTypes.mk_fresh_name_type -> Cic.term ->
-   ProofEngineTypes.tactic 
-val letin_tac:
-  ?mk_fresh_name_callback:ProofEngineTypes.mk_fresh_name_type -> Cic.term ->
-   ProofEngineTypes.tactic 
-
-val elim_intros_simpl_tac:
-  term: Cic.term -> ProofEngineTypes.tactic 
-
-val change_tac:
-  what: Cic.term -> with_what: Cic.term -> ProofEngineTypes.tactic 
diff --git a/helm/ocaml/tactics/proofEngineHelpers.ml b/helm/ocaml/tactics/proofEngineHelpers.ml
deleted file mode 100644 (file)
index 16be77e..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(* mk_fresh_name context name typ                      *)
-(* returns an identifier which is fresh in the context *)
-(* and that resembles [name] as much as possible.      *)
-(* [typ] will be the type of the variable              *)
-let mk_fresh_name context name ~typ =
- let module C = Cic in
-  let basename =
-   match name with
-      C.Anonymous ->
-       (*CSC: great space for improvements here *)
-       (try
-         (match CicTypeChecker.type_of_aux' [] context typ with
-             C.Sort C.Prop -> "H"
-           | C.Sort C.Set -> "x"
-           | _ -> "H"
-         )
-        with CicTypeChecker.TypeCheckerFailure _ -> "H"
-       )
-    | C.Name name ->
-       Str.global_replace (Str.regexp "[0-9]*$") "" name
-  in
-   let already_used name =
-    List.exists (function Some (C.Name n,_) -> n=name | _ -> false) context
-   in
-    if not (already_used basename) then
-     C.Name basename
-    else
-     let rec try_next n =
-      let name' = basename ^ string_of_int n in
-       if already_used name' then
-        try_next (n+1)
-       else
-        C.Name name'
-     in
-      try_next 1
-;;
-
-(* identity_relocation_list_for_metavariable i canonical_context         *)
-(* returns the identity relocation list, which is the list [1 ; ... ; n] *)
-(* where n = List.length [canonical_context]                             *)
-(*CSC: ma mi basta la lunghezza del contesto canonico!!!*)
-let identity_relocation_list_for_metavariable canonical_context =
- let canonical_context_length = List.length canonical_context in
-  let rec aux =
-   function
-      (_,[]) -> []
-    | (n,None::tl) -> None::(aux ((n+1),tl))
-    | (n,_::tl) -> (Some (Cic.Rel n))::(aux ((n+1),tl))
-  in
-   aux (1,canonical_context)
-
-(* Returns the first meta whose number is above the *)
-(* number of the higher meta.                       *)
-let new_meta ~proof =
- let (_,metasenv,_,_) = proof in
-  let rec aux =
-   function
-      None,[] -> 1
-    | Some n,[] -> n
-    | None,(n,_,_)::tl -> aux (Some n,tl)
-    | Some m,(n,_,_)::tl -> if n > m then aux (Some n,tl) else aux (Some m,tl)
-  in
-   1 + aux (None,metasenv)
-
-let subst_meta_in_proof proof meta term newmetasenv =
- let uri,metasenv,bo,ty = proof in
-  let subst_in = CicUnification.apply_subst [meta,term] in
-   let metasenv' =
-    newmetasenv @ (List.filter (function (m,_,_) -> m <> meta) metasenv)
-   in
-    let metasenv'' =
-     List.map
-      (function i,canonical_context,ty ->
-        let canonical_context' =
-         List.map
-          (function
-              Some (n,Cic.Decl s) -> Some (n,Cic.Decl (subst_in s))
-            | Some (n,Cic.Def s) -> Some (n,Cic.Def (subst_in s))
-            | None -> None
-          ) canonical_context
-        in
-         i,canonical_context',(subst_in ty)
-      ) metasenv'
-    in
-     let bo' = subst_in bo in
-      let newproof = uri,metasenv'',bo',ty in
-       (newproof, metasenv'')
-
-(*CSC: commento vecchio *)
-(* refine_meta_with_brand_new_metasenv meta term subst_in newmetasenv     *)
-(* This (heavy) function must be called when a tactic can instantiate old *)
-(* metavariables (i.e. existential variables). It substitues the metasenv *)
-(* of the proof with the result of removing [meta] from the domain of     *)
-(* [newmetasenv]. Then it replaces Cic.Meta [meta] with [term] everywhere *)
-(* in the current proof. Finally it applies [apply_subst_replacing] to    *)
-(*  current proof.                                                        *)
-(*CSC: A questo punto perche' passare un bo' gia' istantiato, se tanto poi *)
-(*CSC: ci ripasso sopra apply_subst!!!                                     *)
-(*CSC: Attenzione! Ora questa funzione applica anche [subst_in] a *)
-(*CSC: [newmetasenv].                                             *)
-let subst_meta_and_metasenv_in_proof proof meta subst_in newmetasenv =
- let (uri,_,bo,ty) = proof in
-  let bo' = subst_in bo in
-  let metasenv' =
-   List.fold_right
-    (fun metasenv_entry i ->
-      match metasenv_entry with
-         (m,canonical_context,ty) when m <> meta ->
-           let canonical_context' =
-            List.map
-             (function
-                 None -> None
-               | Some (i,Cic.Decl t) -> Some (i,Cic.Decl (subst_in t))
-               | Some (i,Cic.Def t)  -> Some (i,Cic.Def (subst_in t))
-             ) canonical_context
-           in
-            (m,canonical_context',subst_in ty)::i
-       | _ -> i
-    ) newmetasenv []
-  in
-   let newproof = uri,metasenv',bo',ty in
-    (newproof, metasenv')
-
diff --git a/helm/ocaml/tactics/proofEngineHelpers.mli b/helm/ocaml/tactics/proofEngineHelpers.mli
deleted file mode 100644 (file)
index 0e2244f..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(* mk_fresh_name context name typ                      *)
-(* returns an identifier which is fresh in the context *)
-(* and that resembles [name] as much as possible.      *)
-(* [typ] will be the type of the variable              *)
-val mk_fresh_name : ProofEngineTypes.mk_fresh_name_type
-
-(* identity_relocation_list_for_metavariable i canonical_context         *)
-(* returns the identity relocation list, which is the list               *)
-(* [Rel 1 ; ... ; Rel n] where n = List.length [canonical_context]       *)
-val identity_relocation_list_for_metavariable :
-  'a option list -> Cic.term option list
-
-(* Returns the first meta whose number is above the *)
-(* number of the higher meta.                       *)
-val new_meta : proof:ProofEngineTypes.proof -> int
-
-val subst_meta_in_proof :
-  ProofEngineTypes.proof ->
-  int -> Cic.term -> Cic.metasenv ->
-  ProofEngineTypes.proof * Cic.metasenv
-val subst_meta_and_metasenv_in_proof :
-  ProofEngineTypes.proof ->
-  int -> (Cic.term -> Cic.term) -> Cic.metasenv ->
-  ProofEngineTypes.proof * Cic.metasenv
diff --git a/helm/ocaml/tactics/proofEngineReduction.ml b/helm/ocaml/tactics/proofEngineReduction.ml
deleted file mode 100644 (file)
index c70be1f..0000000
+++ /dev/null
@@ -1,867 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 12/04/2002                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-
-(* The code of this module is derived from the code of CicReduction *)
-
-exception Impossible of int;;
-exception ReferenceToConstant;;
-exception ReferenceToVariable;;
-exception ReferenceToCurrentProof;;
-exception ReferenceToInductiveDefinition;;
-exception WrongUriToInductiveDefinition;;
-exception WrongUriToConstant;;
-exception RelToHiddenHypothesis;;
-
-let alpha_equivalence =
- let module C = Cic in
-  let rec aux t t' =
-   if t = t' then true
-   else
-    match t,t' with
-       C.Var (uri1,exp_named_subst1), C.Var (uri2,exp_named_subst2) ->
-        UriManager.eq uri1 uri2 &&
-         aux_exp_named_subst exp_named_subst1 exp_named_subst2
-     | C.Cast (te,ty), C.Cast (te',ty') ->
-        aux te te' && aux ty ty'
-     | C.Prod (_,s,t), C.Prod (_,s',t') ->
-        aux s s' && aux t t'
-     | C.Lambda (_,s,t), C.Lambda (_,s',t') ->
-        aux s s' && aux t t'
-     | C.LetIn (_,s,t), C.LetIn(_,s',t') ->
-        aux s s' && aux t t'
-     | C.Appl l, C.Appl l' ->
-        (try
-          List.fold_left2
-           (fun b t1 t2 -> b && aux t1 t2) true l l'
-         with
-          Invalid_argument _ -> false)
-     | C.Const (uri,exp_named_subst1), C.Const (uri',exp_named_subst2) ->
-        UriManager.eq uri uri' &&
-         aux_exp_named_subst exp_named_subst1 exp_named_subst2
-     | C.MutInd (uri,i,exp_named_subst1), C.MutInd (uri',i',exp_named_subst2) ->
-        UriManager.eq uri uri' && i = i' &&
-         aux_exp_named_subst exp_named_subst1 exp_named_subst2
-     | C.MutConstruct (uri,i,j,exp_named_subst1),
-       C.MutConstruct (uri',i',j',exp_named_subst2) ->
-        UriManager.eq uri uri' && i = i' && j = j' &&
-         aux_exp_named_subst exp_named_subst1 exp_named_subst2
-     | C.MutCase (sp,i,outt,t,pl), C.MutCase (sp',i',outt',t',pl') ->
-        UriManager.eq sp sp' && i = i' &&
-         aux outt outt' && aux t t' &&
-          (try
-            List.fold_left2
-             (fun b t1 t2 -> b && aux t1 t2) true pl pl'
-           with
-            Invalid_argument _ -> false)
-     | C.Fix (i,fl), C.Fix (i',fl') ->
-        i = i' &&
-        (try
-          List.fold_left2
-           (fun b (_,i,ty,bo) (_,i',ty',bo') ->
-             b && i = i' && aux ty ty' && aux bo bo'
-           ) true fl fl'
-         with
-          Invalid_argument _ -> false)
-     | C.CoFix (i,fl), C.CoFix (i',fl') ->
-        i = i' &&
-        (try
-          List.fold_left2
-           (fun b (_,ty,bo) (_,ty',bo') ->
-             b && aux ty ty' && aux bo bo'
-           ) true fl fl'
-         with
-          Invalid_argument _ -> false)
-     | _,_ -> false (* we already know that t != t' *)
-  and aux_exp_named_subst exp_named_subst1 exp_named_subst2 =
-   try
-     List.fold_left2
-      (fun b (uri1,t1) (uri2,t2) ->
-        b && UriManager.eq uri1 uri2 && aux t1 t2
-      ) true exp_named_subst1 exp_named_subst2
-    with
-     Invalid_argument _ -> false
-  in
-   aux
-;;
-
-exception WhatAndWithWhatDoNotHaveTheSameLength;;
-
-(* "textual" replacement of several subterms with other ones *)
-let replace ~equality ~what ~with_what ~where =
- let module C = Cic in
-  let find_image t =
-   let rec find_image_aux =
-    function
-       [],[] -> raise Not_found
-     | what::tl1,with_what::tl2 ->
-        if equality t what then with_what else find_image_aux (tl1,tl2)
-     | _,_ -> raise WhatAndWithWhatDoNotHaveTheSameLength
-   in
-    find_image_aux (what,with_what)
-  in
-  let rec aux t =
-   try
-    find_image t
-   with Not_found ->
-    match t with
-       C.Rel _ -> t
-     | C.Var (uri,exp_named_subst) ->
-        C.Var (uri,List.map (function (uri,t) -> uri, aux t) exp_named_subst)
-     | C.Meta _ -> t
-     | C.Sort _ -> t
-     | C.Implicit as t -> t
-     | C.Cast (te,ty) -> C.Cast (aux te, aux ty)
-     | C.Prod (n,s,t) -> C.Prod (n, aux s, aux t)
-     | C.Lambda (n,s,t) -> C.Lambda (n, aux s, aux t)
-     | C.LetIn (n,s,t) -> C.LetIn (n, aux s, aux t)
-     | C.Appl l ->
-        (* Invariant enforced: no application of an application *)
-        (match List.map aux l with
-            (C.Appl l')::tl -> C.Appl (l'@tl)
-          | l' -> C.Appl l')
-     | C.Const (uri,exp_named_subst) ->
-        C.Const (uri,List.map (function (uri,t) -> uri, aux t) exp_named_subst)
-     | C.MutInd (uri,i,exp_named_subst) ->
-        C.MutInd
-         (uri,i,List.map (function (uri,t) -> uri, aux t) exp_named_subst)
-     | C.MutConstruct (uri,i,j,exp_named_subst) ->
-        C.MutConstruct
-         (uri,i,j,List.map (function (uri,t) -> uri, aux t) exp_named_subst)
-     | C.MutCase (sp,i,outt,t,pl) ->
-        C.MutCase (sp,i,aux outt, aux t,List.map aux pl)
-     | C.Fix (i,fl) ->
-        let substitutedfl =
-         List.map
-          (fun (name,i,ty,bo) -> (name, i, aux ty, aux bo))
-           fl
-        in
-         C.Fix (i, substitutedfl)
-     | C.CoFix (i,fl) ->
-        let substitutedfl =
-         List.map
-          (fun (name,ty,bo) -> (name, aux ty, aux bo))
-           fl
-        in
-         C.CoFix (i, substitutedfl)
-   in
-    aux where
-;;
-
-(* replaces in a term a term with another one. *)
-(* Lifting are performed as usual.             *)
-let replace_lifting ~equality ~what ~with_what ~where =
- let module C = Cic in
- let module S = CicSubstitution in
-  let find_image what t =
-   let rec find_image_aux =
-    function
-       [],[] -> raise Not_found
-     | what::tl1,with_what::tl2 ->
-        if equality t what then with_what else find_image_aux (tl1,tl2)
-     | _,_ -> raise WhatAndWithWhatDoNotHaveTheSameLength
-   in
-    find_image_aux (what,with_what)
-  in
-  let rec substaux k what t =
-   try
-    S.lift (k-1) (find_image what t)
-   with Not_found ->
-    match t with
-      C.Rel n as t -> t
-    | C.Var (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> uri,substaux k what t) exp_named_subst
-       in
-        C.Var (uri,exp_named_subst')
-    | C.Meta (i, l) as t -> 
-       let l' =
-        List.map
-         (function
-             None -> None
-           | Some t -> Some (substaux k what t)
-         ) l
-       in
-        C.Meta(i,l')
-    | C.Sort _ as t -> t
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) -> C.Cast (substaux k what te, substaux k what ty)
-    | C.Prod (n,s,t) ->
-       C.Prod
-        (n, substaux k what s, substaux (k + 1) (List.map (S.lift 1) what) t)
-    | C.Lambda (n,s,t) ->
-       C.Lambda
-        (n, substaux k what s, substaux (k + 1) (List.map (S.lift 1) what) t)
-    | C.LetIn (n,s,t) ->
-       C.LetIn
-        (n, substaux k what s, substaux (k + 1) (List.map (S.lift 1) what) t)
-    | C.Appl (he::tl) ->
-       (* Invariant: no Appl applied to another Appl *)
-       let tl' = List.map (substaux k what) tl in
-        begin
-         match substaux k what he with
-            C.Appl l -> C.Appl (l@tl')
-          | _ as he' -> C.Appl (he'::tl')
-        end
-    | C.Appl _ -> assert false
-    | C.Const (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> uri,substaux k what t) exp_named_subst
-       in
-       C.Const (uri,exp_named_subst')
-    | C.MutInd (uri,i,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> uri,substaux k what t) exp_named_subst
-       in
-        C.MutInd (uri,i,exp_named_subst')
-    | C.MutConstruct (uri,i,j,exp_named_subst) ->
-       let exp_named_subst' =
-        List.map (function (uri,t) -> uri,substaux k what t) exp_named_subst
-       in
-        C.MutConstruct (uri,i,j,exp_named_subst')
-    | C.MutCase (sp,i,outt,t,pl) ->
-       C.MutCase (sp,i,substaux k what outt, substaux k what t,
-        List.map (substaux k what) pl)
-    | C.Fix (i,fl) ->
-       let len = List.length fl in
-       let substitutedfl =
-        List.map
-         (fun (name,i,ty,bo) ->
-           (name, i, substaux k what ty,
-             substaux (k+len) (List.map (S.lift len) what) bo)
-         ) fl
-       in
-        C.Fix (i, substitutedfl)
-    | C.CoFix (i,fl) ->
-       let len = List.length fl in
-       let substitutedfl =
-        List.map
-         (fun (name,ty,bo) ->
-           (name, substaux k what ty,
-             substaux (k+len) (List.map (S.lift len) what) bo)
-         ) fl
-       in
-        C.CoFix (i, substitutedfl)
- in
-  substaux 1 what where
-;;
-
-(* replaces in a term a list of terms with other ones. *)
-(* Lifting are performed as usual.                     *)
-let replace_lifting_csc nnn ~equality ~what ~with_what ~where =
- let module C = Cic in
- let module S = CicSubstitution in
-  let find_image t =
-   let rec find_image_aux =
-    function
-       [],[] -> raise Not_found
-     | what::tl1,with_what::tl2 ->
-        if equality t what then with_what else find_image_aux (tl1,tl2)
-     | _,_ -> raise WhatAndWithWhatDoNotHaveTheSameLength
-   in
-    find_image_aux (what,with_what)
-  in
-  let rec substaux k t =
-   try
-    S.lift (k-1) (find_image t)
-   with Not_found ->
-    match t with
-       C.Rel n as t ->
-        if n < k then C.Rel n else C.Rel (n + nnn)
-     | C.Var (uri,exp_named_subst) ->
-        let exp_named_subst' =
-         List.map (function (uri,t) -> uri,substaux k t) exp_named_subst
-        in
-         C.Var (uri,exp_named_subst')
-     | C.Meta (i, l) as t -> 
-        let l' =
-         List.map
-          (function
-              None -> None
-            | Some t -> Some (substaux k t)
-          ) l
-        in
-         C.Meta(i,l')
-     | C.Sort _ as t -> t
-     | C.Implicit as t -> t
-     | C.Cast (te,ty) -> C.Cast (substaux k te, substaux k ty)
-     | C.Prod (n,s,t) ->
-        C.Prod (n, substaux k s, substaux (k + 1) t)
-     | C.Lambda (n,s,t) ->
-        C.Lambda (n, substaux k s, substaux (k + 1) t)
-     | C.LetIn (n,s,t) ->
-        C.LetIn (n, substaux k s, substaux (k + 1) t)
-     | C.Appl (he::tl) ->
-        (* Invariant: no Appl applied to another Appl *)
-        let tl' = List.map (substaux k) tl in
-         begin
-          match substaux k he with
-             C.Appl l -> C.Appl (l@tl')
-           | _ as he' -> C.Appl (he'::tl')
-         end
-     | C.Appl _ -> assert false
-     | C.Const (uri,exp_named_subst) ->
-        let exp_named_subst' =
-         List.map (function (uri,t) -> uri,substaux k t) exp_named_subst
-        in
-        C.Const (uri,exp_named_subst')
-     | C.MutInd (uri,i,exp_named_subst) ->
-        let exp_named_subst' =
-         List.map (function (uri,t) -> uri,substaux k t) exp_named_subst
-        in
-         C.MutInd (uri,i,exp_named_subst')
-     | C.MutConstruct (uri,i,j,exp_named_subst) ->
-        let exp_named_subst' =
-         List.map (function (uri,t) -> uri,substaux k t) exp_named_subst
-        in
-         C.MutConstruct (uri,i,j,exp_named_subst')
-     | C.MutCase (sp,i,outt,t,pl) ->
-        C.MutCase (sp,i,substaux k outt, substaux k t,
-         List.map (substaux k) pl)
-     | C.Fix (i,fl) ->
-        let len = List.length fl in
-        let substitutedfl =
-         List.map
-          (fun (name,i,ty,bo) ->
-            (name, i, substaux k ty, substaux (k+len) bo))
-           fl
-        in
-         C.Fix (i, substitutedfl)
-     | C.CoFix (i,fl) ->
-        let len = List.length fl in
-        let substitutedfl =
-         List.map
-          (fun (name,ty,bo) ->
-            (name, substaux k ty, substaux (k+len) bo))
-           fl
-        in
-         C.CoFix (i, substitutedfl)
- in
-  substaux 1 where
-;;
-
-(* Takes a well-typed term and fully reduces it. *)
-(*CSC: It does not perform reduction in a Case *)
-let reduce context =
- let rec reduceaux context l =
-  let module C = Cic in
-  let module S = CicSubstitution in
-   function
-      C.Rel n as t ->
-       (match List.nth context (n-1) with
-           Some (_,C.Decl _) -> if l = [] then t else C.Appl (t::l)
-         | Some (_,C.Def bo) -> reduceaux context l (S.lift n bo)
-        | None -> raise RelToHiddenHypothesis
-       )
-    | C.Var (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        reduceaux_exp_named_subst context l exp_named_subst
-       in
-       (match CicEnvironment.get_obj uri with
-           C.Constant _ -> raise ReferenceToConstant
-         | C.CurrentProof _ -> raise ReferenceToCurrentProof
-         | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-         | C.Variable (_,None,_,_) ->
-            let t' = C.Var (uri,exp_named_subst') in
-             if l = [] then t' else C.Appl (t'::l)
-         | C.Variable (_,Some body,_,_) ->
-            (reduceaux context l
-              (CicSubstitution.subst_vars exp_named_subst' body))
-       )
-    | C.Meta _ as t -> if l = [] then t else C.Appl (t::l)
-    | C.Sort _ as t -> t (* l should be empty *)
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) ->
-       C.Cast (reduceaux context l te, reduceaux context l ty)
-    | C.Prod (name,s,t) ->
-       assert (l = []) ;
-       C.Prod (name,
-        reduceaux context [] s,
-        reduceaux ((Some (name,C.Decl s))::context) [] t)
-    | C.Lambda (name,s,t) ->
-       (match l with
-           [] ->
-            C.Lambda (name,
-             reduceaux context [] s,
-             reduceaux ((Some (name,C.Decl s))::context) [] t)
-         | he::tl -> reduceaux context tl (S.subst he t)
-           (* when name is Anonimous the substitution should be superfluous *)
-       )
-    | C.LetIn (n,s,t) ->
-       reduceaux context l (S.subst (reduceaux context [] s) t)
-    | C.Appl (he::tl) ->
-       let tl' = List.map (reduceaux context []) tl in
-        reduceaux context (tl'@l) he
-    | C.Appl [] -> raise (Impossible 1)
-    | C.Const (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        reduceaux_exp_named_subst context l exp_named_subst
-       in
-        (match CicEnvironment.get_obj uri with
-            C.Constant (_,Some body,_,_) ->
-             (reduceaux context l
-               (CicSubstitution.subst_vars exp_named_subst' body))
-          | C.Constant (_,None,_,_) ->
-             let t' = C.Const (uri,exp_named_subst') in
-              if l = [] then t' else C.Appl (t'::l)
-          | C.Variable _ -> raise ReferenceToVariable
-          | C.CurrentProof (_,_,body,_,_) ->
-             (reduceaux context l
-               (CicSubstitution.subst_vars exp_named_subst' body))
-          | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-        )
-    | C.MutInd (uri,i,exp_named_subst) ->
-       let exp_named_subst' =
-        reduceaux_exp_named_subst context l exp_named_subst
-       in
-        let t' = C.MutInd (uri,i,exp_named_subst') in
-         if l = [] then t' else C.Appl (t'::l)
-    | C.MutConstruct (uri,i,j,exp_named_subst) as t ->
-       let exp_named_subst' =
-        reduceaux_exp_named_subst context l exp_named_subst
-       in
-        let t' = C.MutConstruct (uri,i,j,exp_named_subst') in
-         if l = [] then t' else C.Appl (t'::l)
-    | C.MutCase (mutind,i,outtype,term,pl) ->
-       let decofix =
-        function
-           C.CoFix (i,fl) as t ->
-            let tys =
-             List.map (function (name,ty,_) -> Some (C.Name name, C.Decl ty)) fl
-            in
-             let (_,_,body) = List.nth fl i in
-              let body' =
-               let counter = ref (List.length fl) in
-                List.fold_right
-                 (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl)))
-                 fl
-                 body
-              in
-               reduceaux context [] body'
-         | C.Appl (C.CoFix (i,fl) :: tl) ->
-            let tys =
-             List.map (function (name,ty,_) -> Some (C.Name name, C.Decl ty)) fl
-            in
-             let (_,_,body) = List.nth fl i in
-              let body' =
-               let counter = ref (List.length fl) in
-                List.fold_right
-                 (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl)))
-                 fl
-                 body
-              in
-               let tl' = List.map (reduceaux context []) tl in
-                reduceaux context tl' body'
-         | t -> t
-       in
-        (match decofix (reduceaux context [] term) with
-            C.MutConstruct (_,_,j,_) -> reduceaux context l (List.nth pl (j-1))
-          | C.Appl (C.MutConstruct (_,_,j,_) :: tl) ->
-             let (arity, r) =
-              match CicEnvironment.get_obj mutind with
-                 C.InductiveDefinition (tl,_,r) ->
-                   let (_,_,arity,_) = List.nth tl i in
-                    (arity,r)
-               | _ -> raise WrongUriToInductiveDefinition
-             in
-              let ts =
-               let rec eat_first =
-                function
-                   (0,l) -> l
-                 | (n,he::tl) when n > 0 -> eat_first (n - 1, tl)
-                 | _ -> raise (Impossible 5)
-               in
-                eat_first (r,tl)
-              in
-               reduceaux context (ts@l) (List.nth pl (j-1))
-         | C.Cast _ | C.Implicit ->
-            raise (Impossible 2) (* we don't trust our whd ;-) *)
-         | _ ->
-           let outtype' = reduceaux context [] outtype in
-           let term' = reduceaux context [] term in
-           let pl' = List.map (reduceaux context []) pl in
-            let res =
-             C.MutCase (mutind,i,outtype',term',pl')
-            in
-             if l = [] then res else C.Appl (res::l)
-       )
-    | C.Fix (i,fl) ->
-       let tys =
-        List.map (function (name,_,ty,_) -> Some (C.Name name, C.Decl ty)) fl
-       in
-        let t' () =
-         let fl' =
-          List.map
-           (function (n,recindex,ty,bo) ->
-             (n,recindex,reduceaux context [] ty, reduceaux (tys@context) [] bo)
-           ) fl
-         in
-          C.Fix (i, fl')
-        in
-         let (_,recindex,_,body) = List.nth fl i in
-          let recparam =
-           try
-            Some (List.nth l recindex)
-           with
-            _ -> None
-          in
-           (match recparam with
-               Some recparam ->
-                (match reduceaux context [] recparam with
-                    C.MutConstruct _
-                  | C.Appl ((C.MutConstruct _)::_) ->
-                     let body' =
-                      let counter = ref (List.length fl) in
-                       List.fold_right
-                        (fun _ -> decr counter ; S.subst (C.Fix (!counter,fl)))
-                        fl
-                        body
-                     in
-                      (* Possible optimization: substituting whd recparam in l*)
-                      reduceaux context l body'
-                  | _ -> if l = [] then t' () else C.Appl ((t' ())::l)
-                )
-             | None -> if l = [] then t' () else C.Appl ((t' ())::l)
-           )
-    | C.CoFix (i,fl) ->
-       let tys =
-        List.map (function (name,ty,_) -> Some (C.Name name, C.Decl ty)) fl
-       in
-        let t' =
-         let fl' =
-          List.map
-           (function (n,ty,bo) ->
-             (n,reduceaux context [] ty, reduceaux (tys@context) [] bo)
-           ) fl
-         in
-          C.CoFix (i, fl')
-        in
-         if l = [] then t' else C.Appl (t'::l)
- and reduceaux_exp_named_subst context l =
-  List.map (function uri,t -> uri,reduceaux context [] t)
- in
-  reduceaux context []
-;;
-
-exception WrongShape;;
-exception AlreadySimplified;;
-
-(* Takes a well-typed term and                                               *)
-(*  1) Performs beta-iota-zeta reduction until delta reduction is needed     *)
-(*  2) Attempts delta-reduction. If the residual is a Fix lambda-abstracted  *)
-(*     w.r.t. zero or more variables and if the Fix can be reduced, than it  *)
-(*     is reduced, the delta-reduction is succesfull and the whole algorithm *)
-(*     is applied again to the new redex; Step 3) is applied to the result   *)
-(*     of the recursive simplification. Otherwise, if the Fix can not be     *)
-(*     reduced, than the delta-reductions fails and the delta-redex is       *)
-(*     not reduced. Otherwise, if the delta-residual is not the              *)
-(*     lambda-abstraction of a Fix, then it is reduced and the result is     *)
-(*     directly returned, without performing step 3).                        *) 
-(*  3) Folds the application of the constant to the arguments that did not   *)
-(*     change in every iteration, i.e. to the actual arguments for the       *)
-(*     lambda-abstractions that precede the Fix.                             *)
-(*CSC: It does not perform simplification in a Case *)
-let simpl context =
- (* reduceaux is equal to the reduceaux locally defined inside *)
- (* reduce, but for the const case.                            *) 
- (**** Step 1 ****)
- let rec reduceaux context l =
-  let module C = Cic in
-  let module S = CicSubstitution in
-   function
-      C.Rel n as t ->
-       (match List.nth context (n-1) with
-           Some (_,C.Decl _) -> if l = [] then t else C.Appl (t::l)
-         | Some (_,C.Def bo) ->
-            try_delta_expansion l t (S.lift n bo)
-        | None -> raise RelToHiddenHypothesis
-       )
-    | C.Var (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        reduceaux_exp_named_subst context l exp_named_subst
-       in
-        (match CicEnvironment.get_obj uri with
-            C.Constant _ -> raise ReferenceToConstant
-          | C.CurrentProof _ -> raise ReferenceToCurrentProof
-          | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-          | C.Variable (_,None,_,_) ->
-            let t' = C.Var (uri,exp_named_subst') in
-             if l = [] then t' else C.Appl (t'::l)
-          | C.Variable (_,Some body,_,_) ->
-             reduceaux context l
-              (CicSubstitution.subst_vars exp_named_subst' body)
-        )
-    | C.Meta _ as t -> if l = [] then t else C.Appl (t::l)
-    | C.Sort _ as t -> t (* l should be empty *)
-    | C.Implicit as t -> t
-    | C.Cast (te,ty) ->
-       C.Cast (reduceaux context l te, reduceaux context l ty)
-    | C.Prod (name,s,t) ->
-       assert (l = []) ;
-       C.Prod (name,
-        reduceaux context [] s,
-        reduceaux ((Some (name,C.Decl s))::context) [] t)
-    | C.Lambda (name,s,t) ->
-       (match l with
-           [] ->
-            C.Lambda (name,
-             reduceaux context [] s,
-             reduceaux ((Some (name,C.Decl s))::context) [] t)
-         | he::tl -> reduceaux context tl (S.subst he t)
-           (* when name is Anonimous the substitution should be superfluous *)
-       )
-    | C.LetIn (n,s,t) ->
-       reduceaux context l (S.subst (reduceaux context [] s) t)
-    | C.Appl (he::tl) ->
-       let tl' = List.map (reduceaux context []) tl in
-        reduceaux context (tl'@l) he
-    | C.Appl [] -> raise (Impossible 1)
-    | C.Const (uri,exp_named_subst) ->
-       let exp_named_subst' =
-        reduceaux_exp_named_subst context l exp_named_subst
-       in
-        (match CicEnvironment.get_obj uri with
-           C.Constant (_,Some body,_,_) ->
-            try_delta_expansion l
-             (C.Const (uri,exp_named_subst'))
-             (CicSubstitution.subst_vars exp_named_subst' body)
-         | C.Constant (_,None,_,_) ->
-            let t' = C.Const (uri,exp_named_subst') in
-             if l = [] then t' else C.Appl (t'::l)
-         | C.Variable _ -> raise ReferenceToVariable
-         | C.CurrentProof (_,_,body,_,_) -> reduceaux context l body
-         | C.InductiveDefinition _ -> raise ReferenceToInductiveDefinition
-       )
-    | C.MutInd (uri,i,exp_named_subst) ->
-       let exp_named_subst' =
-        reduceaux_exp_named_subst context l exp_named_subst
-       in
-        let t' = C.MutInd (uri,i,exp_named_subst') in
-         if l = [] then t' else C.Appl (t'::l)
-    | C.MutConstruct (uri,i,j,exp_named_subst) ->
-       let exp_named_subst' =
-        reduceaux_exp_named_subst context l exp_named_subst
-       in
-        let t' = C.MutConstruct(uri,i,j,exp_named_subst') in
-         if l = [] then t' else C.Appl (t'::l)
-    | C.MutCase (mutind,i,outtype,term,pl) ->
-       let decofix =
-        function
-           C.CoFix (i,fl) as t ->
-            let tys =
-             List.map (function (name,ty,_) -> Some (C.Name name, C.Decl ty)) fl            in
-             let (_,_,body) = List.nth fl i in
-              let body' =
-               let counter = ref (List.length fl) in
-                List.fold_right
-                 (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl)))
-                 fl
-                 body
-              in
-               reduceaux context [] body'
-         | C.Appl (C.CoFix (i,fl) :: tl) ->
-            let tys =
-             List.map (function (name,ty,_) -> Some (C.Name name, C.Decl ty)) fl            in
-             let (_,_,body) = List.nth fl i in
-              let body' =
-               let counter = ref (List.length fl) in
-                List.fold_right
-                 (fun _ -> decr counter ; S.subst (C.CoFix (!counter,fl)))
-                 fl
-                 body
-              in
-               let tl' = List.map (reduceaux context []) tl in
-                reduceaux context tl body'
-         | t -> t
-       in
-        (match decofix (reduceaux context [] term) with
-            C.MutConstruct (_,_,j,_) -> reduceaux context l (List.nth pl (j-1))
-          | C.Appl (C.MutConstruct (_,_,j,_) :: tl) ->
-             let (arity, r) =
-              match CicEnvironment.get_obj mutind with
-                 C.InductiveDefinition (tl,ingredients,r) ->
-                   let (_,_,arity,_) = List.nth tl i in
-                    (arity,r)
-               | _ -> raise WrongUriToInductiveDefinition
-             in
-              let ts =
-               let rec eat_first =
-                function
-                   (0,l) -> l
-                 | (n,he::tl) when n > 0 -> eat_first (n - 1, tl)
-                 | _ -> raise (Impossible 5)
-               in
-                eat_first (r,tl)
-              in
-               reduceaux context (ts@l) (List.nth pl (j-1))
-         | C.Cast _ | C.Implicit ->
-            raise (Impossible 2) (* we don't trust our whd ;-) *)
-         | _ ->
-           let outtype' = reduceaux context [] outtype in
-           let term' = reduceaux context [] term in
-           let pl' = List.map (reduceaux context []) pl in
-            let res =
-             C.MutCase (mutind,i,outtype',term',pl')
-            in
-             if l = [] then res else C.Appl (res::l)
-       )
-    | C.Fix (i,fl) ->
-       let tys =
-        List.map (function (name,_,ty,_) -> Some (C.Name name, C.Decl ty)) fl
-       in
-        let t' () =
-         let fl' =
-          List.map
-           (function (n,recindex,ty,bo) ->
-             (n,recindex,reduceaux context [] ty, reduceaux (tys@context) [] bo)
-           ) fl
-         in
-          C.Fix (i, fl')
-        in
-         let (_,recindex,_,body) = List.nth fl i in
-          let recparam =
-           try
-            Some (List.nth l recindex)
-           with
-            _ -> None
-          in
-           (match recparam with
-               Some recparam ->
-                (match reduceaux context [] recparam with
-                    C.MutConstruct _
-                  | C.Appl ((C.MutConstruct _)::_) ->
-                     let body' =
-                      let counter = ref (List.length fl) in
-                       List.fold_right
-                        (fun _ -> decr counter ; S.subst (C.Fix (!counter,fl)))
-                        fl
-                        body
-                     in
-                      (* Possible optimization: substituting whd recparam in l*)
-                      reduceaux context l body'
-                  | _ -> if l = [] then t' () else C.Appl ((t' ())::l)
-                )
-             | None -> if l = [] then t' () else C.Appl ((t' ())::l)
-           )
-    | C.CoFix (i,fl) ->
-       let tys =
-        List.map (function (name,ty,_) -> Some (C.Name name, C.Decl ty)) fl
-       in
-        let t' =
-         let fl' =
-          List.map
-           (function (n,ty,bo) ->
-             (n,reduceaux context [] ty, reduceaux (tys@context) [] bo)
-           ) fl
-         in
-         C.CoFix (i, fl')
-       in
-         if l = [] then t' else C.Appl (t'::l)
- and reduceaux_exp_named_subst context l =
-  List.map (function uri,t -> uri,reduceaux context [] t)
- (**** Step 2 ****)
- and try_delta_expansion l term body =
-  let module C = Cic in
-  let module S = CicSubstitution in
-   try
-    let res,constant_args =
-     let rec aux rev_constant_args l =
-      function
-         C.Lambda (name,s,t) as t' ->
-          begin
-           match l with
-              [] -> raise WrongShape
-            | he::tl ->
-               (* when name is Anonimous the substitution should *)
-               (* be superfluous                                 *)
-               aux (he::rev_constant_args) tl (S.subst he t)
-          end
-       | C.LetIn (_,s,t) ->
-          aux rev_constant_args l (S.subst s t)
-       | C.Fix (i,fl) as t ->
-          let tys =
-           List.map (function (name,_,ty,_) ->
-            Some (C.Name name, C.Decl ty)) fl
-          in
-           let (_,recindex,_,body) = List.nth fl i in
-            let recparam =
-             try
-              List.nth l recindex
-             with
-              _ -> raise AlreadySimplified
-            in
-             (match CicReduction.whd context recparam with
-                 C.MutConstruct _
-               | C.Appl ((C.MutConstruct _)::_) ->
-                  let body' =
-                   let counter = ref (List.length fl) in
-                    List.fold_right
-                     (function _ ->
-                       decr counter ; S.subst (C.Fix (!counter,fl))
-                     ) fl body
-                  in
-                   (* Possible optimization: substituting whd *)
-                   (* recparam in l                           *)
-                   reduceaux context l body',
-                    List.rev rev_constant_args
-               | _ -> raise AlreadySimplified
-             )
-       | _ -> raise WrongShape
-     in
-      aux [] l body
-    in
-     (**** Step 3 ****)
-     let term_to_fold, delta_expanded_term_to_fold =
-      match constant_args with
-         [] -> term,body
-       | _ -> C.Appl (term::constant_args), C.Appl (body::constant_args)
-     in
-      let simplified_term_to_fold =
-       reduceaux context [] delta_expanded_term_to_fold
-      in
-       replace (=) [simplified_term_to_fold] [term_to_fold] res
-   with
-      WrongShape ->
-       (* The constant does not unfold to a Fix lambda-abstracted  *)
-       (* w.r.t. zero or more variables. We just perform reduction.*)
-       reduceaux context l body
-    | AlreadySimplified ->
-       (* If we performed delta-reduction, we would find a Fix   *)
-       (* not applied to a constructor. So, we refuse to perform *)
-       (* delta-reduction.                                       *)
-       if l = [] then term else C.Appl (term::l)
- in
-  reduceaux context []
-;;
diff --git a/helm/ocaml/tactics/proofEngineReduction.mli b/helm/ocaml/tactics/proofEngineReduction.mli
deleted file mode 100644 (file)
index 02e56ba..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception Impossible of int
-exception ReferenceToConstant
-exception ReferenceToVariable
-exception ReferenceToCurrentProof
-exception ReferenceToInductiveDefinition
-exception WrongUriToInductiveDefinition
-exception RelToHiddenHypothesis
-exception WrongShape
-exception AlreadySimplified
-exception WhatAndWithWhatDoNotHaveTheSameLength;;
-
-val alpha_equivalence: Cic.term -> Cic.term -> bool
-val replace :
-  equality:(Cic.term -> 'a -> bool) ->
-  what:'a list -> with_what:Cic.term list -> where:Cic.term -> Cic.term
-val replace_lifting :
-  equality:(Cic.term -> Cic.term -> bool) ->
-  what:Cic.term list -> with_what:Cic.term list -> where:Cic.term -> Cic.term
-val replace_lifting_csc :
-  int -> equality:(Cic.term -> Cic.term -> bool) ->
-  what:Cic.term list -> with_what:Cic.term list -> where:Cic.term -> Cic.term
-val reduce : Cic.context -> Cic.term -> Cic.term
-val simpl : Cic.context -> Cic.term -> Cic.term
diff --git a/helm/ocaml/tactics/proofEngineStructuralRules.ml b/helm/ocaml/tactics/proofEngineStructuralRules.ml
deleted file mode 100644 (file)
index d89420f..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-open ProofEngineTypes
-
-let clearbody ~hyp ~status:(proof, goal) =
- let module C = Cic in
-  match hyp with
-     None -> assert false
-   | Some (_, C.Decl _) -> raise (Fail "No Body To Clear")
-   | Some (n_to_clear_body, C.Def term) as hyp_to_clear_body ->
-      let curi,metasenv,pbo,pty = proof in
-       let metano,_,_ = List.find (function (m,_,_) -> m=goal) metasenv in
-        let string_of_name =
-         function
-            C.Name n -> n
-          | C.Anonymous -> "_"
-        in
-        let metasenv' =
-         List.map
-          (function
-              (m,canonical_context,ty) when m = metano ->
-                let canonical_context' =
-                 List.fold_right
-                  (fun entry context ->
-                    match entry with
-                       t when t == hyp_to_clear_body ->
-                        let cleared_entry =
-                         let ty =
-                          CicTypeChecker.type_of_aux' metasenv context term
-                         in
-                          Some (n_to_clear_body, Cic.Decl ty)
-                        in
-                         cleared_entry::context
-                     | None -> None::context
-                     | Some (n,C.Decl t)
-                     | Some (n,C.Def t) ->
-                        let _ =
-                         try
-                          CicTypeChecker.type_of_aux' metasenv context t
-                         with
-                          _ ->
-                            raise
-                             (Fail
-                               ("The correctness of hypothesis " ^
-                                string_of_name n ^
-                                " relies on the body of " ^
-                                string_of_name n_to_clear_body)
-                             )
-                        in
-                         entry::context
-                  ) canonical_context []
-                in
-                 let _ =
-                  try
-                   CicTypeChecker.type_of_aux' metasenv canonical_context' ty
-                  with
-                   _ ->
-                    raise
-                     (Fail
-                      ("The correctness of the goal relies on the body of " ^
-                       string_of_name n_to_clear_body))
-                 in
-                  m,canonical_context',ty
-            | t -> t
-          ) metasenv
-        in
-         (curi,metasenv',pbo,pty), [goal]
-
-let clear ~hyp:hyp_to_clear ~status:(proof, goal) =
- let module C = Cic in
-  match hyp_to_clear with
-     None -> assert false
-   | Some (n_to_clear, _) ->
-      let curi,metasenv,pbo,pty = proof in
-       let metano,context,ty =
-        List.find (function (m,_,_) -> m=goal) metasenv
-       in
-        let string_of_name =
-         function
-            C.Name n -> n
-          | C.Anonymous -> "_"
-        in
-        let metasenv' =
-         List.map
-          (function
-              (m,canonical_context,ty) when m = metano ->
-                let canonical_context' =
-                 List.fold_right
-                  (fun entry context ->
-                    match entry with
-                       t when t == hyp_to_clear -> None::context
-                     | None -> None::context
-                     | Some (n,C.Decl t)
-                     | Some (n,C.Def t) ->
-                        let _ =
-                         try
-                          CicTypeChecker.type_of_aux' metasenv context t
-                         with
-                          _ ->
-                            raise
-                             (Fail
-                               ("Hypothesis " ^
-                                string_of_name n ^
-                                " uses hypothesis " ^
-                                string_of_name n_to_clear)
-                             )
-                        in
-                         entry::context
-                  ) canonical_context []
-                in
-                 let _ =
-                  try
-                   CicTypeChecker.type_of_aux' metasenv canonical_context' ty
-                  with
-                   _ ->
-                    raise
-                     (Fail
-                      ("Hypothesis " ^ string_of_name n_to_clear ^
-                       " occurs in the goal"))
-                 in
-                  m,canonical_context',ty
-            | t -> t
-          ) metasenv
-        in
-         (curi,metasenv',pbo,pty), [goal]
-
diff --git a/helm/ocaml/tactics/proofEngineStructuralRules.mli b/helm/ocaml/tactics/proofEngineStructuralRules.mli
deleted file mode 100644 (file)
index 32ba812..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val clearbody: hyp: Cic.hypothesis -> ProofEngineTypes.tactic
-val clear: hyp: Cic.hypothesis -> ProofEngineTypes.tactic
diff --git a/helm/ocaml/tactics/proofEngineTypes.ml b/helm/ocaml/tactics/proofEngineTypes.ml
deleted file mode 100644 (file)
index 178be54..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-  (**
-    current proof (proof uri * metas * (in)complete proof * term to be prooved)
-  *)
-type proof = UriManager.uri * Cic.metasenv * Cic.term * Cic.term
-  (** current goal, integer index *)
-type goal = int
-type status = proof * goal
-  (**
-    a tactic: make a transition from one status to another one or, usually,
-    raise a "Fail" (@see Fail) exception in case of failure
-  *)
-  (** an unfinished proof with the optional current goal *)
-type tactic = status:status -> proof * goal list
-
-  (** tactic failure *)
-exception Fail of string
-
-  (** constraint: the returned value will always be constructed by Cic.Name **)
-type mk_fresh_name_type =
- Cic.context -> Cic.name -> typ:Cic.term -> Cic.name
diff --git a/helm/ocaml/tactics/reductionTactics.ml b/helm/ocaml/tactics/reductionTactics.ml
deleted file mode 100644 (file)
index b29873a..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(*
-let reduction_tac ~reduction ~status:(proof,goal) =
- let curi,metasenv,pbo,pty = proof in
- let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-  let new_ty = reduction context ty in
-   let new_metasenv = 
-    List.map
-    (function
-      (n,_,_) when n = metano -> (metano,context,new_ty)
-      | _ as t -> t
-    ) metasenv
-   in
-    (curi,new_metasenv,pbo,pty), [metano]
-;;
-*)
-
-(* The default of term is the thesis of the goal to be prooved *)
-let reduction_tac ~also_in_hypotheses ~reduction ~terms ~status:(proof,goal) =
- let curi,metasenv,pbo,pty = proof in
- let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-  let terms =
-   match terms with None -> [ty] | Some l -> l
-  in
-  (* We don't know if [term] is a subterm of [ty] or a subterm of *)
-  (* the type of one metavariable. So we replace it everywhere.   *)
-  (*CSC: Il vero problema e' che non sapendo dove sia il term non *)
-  (*CSC: sappiamo neppure quale sia il suo contesto!!!! Insomma,  *)
-  (*CSC: e' meglio prima cercare il termine e scoprirne il        *)
-  (*CSC: contesto, poi ridurre e infine rimpiazzare.              *)
-   let replace context where=
-(*CSC: Per il momento se la riduzione fallisce significa solamente che *)
-(*CSC: siamo nel contesto errato. Metto il try, ma che schifo!!!!      *)
-(*CSC: Anche perche' cosi' catturo anche quelle del replace che non dovrei *)
-   try
-    let terms' = List.map (reduction context) terms in
-     ProofEngineReduction.replace ~equality:(==) ~what:terms ~with_what:terms'
-      ~where:where
-   with
-    _ -> where
-   in
-    let ty' = replace context ty in
-    let context' =
-     if also_in_hypotheses then
-      List.fold_right
-       (fun entry context ->
-         match entry with
-            Some (name,Cic.Def  t) ->
-             (Some (name,Cic.Def  (replace context t)))::context
-          | Some (name,Cic.Decl t) ->
-             (Some (name,Cic.Decl (replace context t)))::context
-          | None -> None::context
-       ) context []
-     else
-      context
-    in
-     let metasenv' = 
-      List.map
-       (function
-           (n,_,_) when n = metano -> (metano,context',ty')
-         | _ as t -> t
-       ) metasenv
-     in
-      (curi,metasenv',pbo,pty), [metano]
-;;
-
-let simpl_tac = reduction_tac ~reduction:ProofEngineReduction.simpl ;;
-let reduce_tac = reduction_tac ~reduction:ProofEngineReduction.reduce ;;
-let whd_tac = reduction_tac ~reduction:CicReduction.whd ;;
-
-let fold_tac ~reduction ~also_in_hypotheses ~term ~status:(proof,goal) =
- let curi,metasenv,pbo,pty = proof in
- let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-  let term' = reduction context term in
-   (* We don't know if [term] is a subterm of [ty] or a subterm of *)
-   (* the type of one metavariable. So we replace it everywhere.   *)
-   (*CSC: ma si potrebbe ovviare al problema. Ma non credo *)
-   (*CSC: che si guadagni nulla in fatto di efficienza.    *) 
-   let replace =
-    ProofEngineReduction.replace ~equality:(=) ~what:[term'] ~with_what:[term]
-   in
-    let ty' = replace ty in
-    let metasenv' =
-     let context' =
-      if also_in_hypotheses then
-       List.map
-        (function
-            Some (n,Cic.Decl t) -> Some (n,Cic.Decl (replace t))
-          | Some (n,Cic.Def t)  -> Some (n,Cic.Def  (replace t))
-          | None -> None
-        ) context
-      else
-       context
-     in
-      List.map
-       (function
-           (n,_,_) when n = metano -> (metano,context',ty')
-         | _ as t -> t
-       ) metasenv
-     
-    in
-     (curi,metasenv',pbo,pty), [metano]
-;;
diff --git a/helm/ocaml/tactics/reductionTactics.mli b/helm/ocaml/tactics/reductionTactics.mli
deleted file mode 100644 (file)
index f97b4cf..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(* The default of term is the thesis of the goal to be prooved *)
-val simpl_tac:
- also_in_hypotheses:bool -> terms:(Cic.term list option) ->
-  ProofEngineTypes.tactic
-val reduce_tac:
- also_in_hypotheses:bool -> terms:(Cic.term list option) ->
-  ProofEngineTypes.tactic
-val whd_tac:
- also_in_hypotheses:bool -> terms:(Cic.term list option) ->
-  ProofEngineTypes.tactic
-
-val fold_tac:
- reduction:(Cic.context -> Cic.term -> Cic.term) ->
- also_in_hypotheses:bool -> term:Cic.term -> ProofEngineTypes.tactic
diff --git a/helm/ocaml/tactics/ring.ml b/helm/ocaml/tactics/ring.ml
deleted file mode 100644 (file)
index c7015a7..0000000
+++ /dev/null
@@ -1,594 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-open CicReduction
-open PrimitiveTactics
-open ProofEngineTypes
-open UriManager
-
-(** DEBUGGING *)
-
-  (** perform debugging output? *)
-let debug = false
-
-  (** debugging print *)
-let warn s =
-  if debug then
-    prerr_endline ("RING WARNING: " ^ s)
-
-(** CIC URIS *)
-
-(**
-  Note: For constructors URIs aren't really URIs but rather triples of
-  the form (uri, typeno, consno).  This discrepancy is to preserver an
-  uniformity of invocation of "mkXXX" functions.
-*)
-
-let eqt_uri = uri_of_string "cic:/Coq/Init/Logic_Type/eqT.ind"
-let refl_eqt_uri = (eqt_uri, 0, 1)
-let equality_is_a_congruence_A =
- uri_of_string "cic:/Coq/Init/Logic_Type/Equality_is_a_congruence/A.var"
-let equality_is_a_congruence_x =
- uri_of_string "cic:/Coq/Init/Logic_Type/Equality_is_a_congruence/x.var"
-let equality_is_a_congruence_y =
- uri_of_string "cic:/Coq/Init/Logic_Type/Equality_is_a_congruence/y.var"
-let sym_eqt_uri = uri_of_string "cic:/Coq/Init/Logic_Type/sym_eqT.con"
-let bool_uri = uri_of_string "cic:/Coq/Init/Datatypes/bool.ind"
-let true_uri = (bool_uri, 0, 1)
-let false_uri = (bool_uri, 0, 2)
-
-let r_uri = uri_of_string "cic:/Coq/Reals/Rdefinitions/R.con"
-let rplus_uri = uri_of_string "cic:/Coq/Reals/Rdefinitions/Rplus.con"
-let rmult_uri = uri_of_string "cic:/Coq/Reals/Rdefinitions/Rmult.con"
-let ropp_uri = uri_of_string "cic:/Coq/Reals/Rdefinitions/Ropp.con"
-let r0_uri = uri_of_string "cic:/Coq/Reals/Rdefinitions/R0.con"
-let r1_uri = uri_of_string "cic:/Coq/Reals/Rdefinitions/R1.con"
-let rtheory_uri = uri_of_string "cic:/Coq/Reals/Rbase/RTheory.con"
-
-let apolynomial_uri =
-  uri_of_string "cic:/Coq/ring/Ring_abstract/apolynomial.ind"
-let apvar_uri = (apolynomial_uri, 0, 1)
-let ap0_uri = (apolynomial_uri, 0, 2)
-let ap1_uri = (apolynomial_uri, 0, 3)
-let applus_uri = (apolynomial_uri, 0, 4)
-let apmult_uri = (apolynomial_uri, 0, 5)
-let apopp_uri = (apolynomial_uri, 0, 6)
-
-let quote_varmap_A_uri = uri_of_string "cic:/Coq/ring/Quote/variables_map/A.var"
-let varmap_uri = uri_of_string "cic:/Coq/ring/Quote/varmap.ind"
-let empty_vm_uri = (varmap_uri, 0, 1)
-let node_vm_uri = (varmap_uri, 0, 2)
-let varmap_find_uri = uri_of_string "cic:/Coq/ring/Quote/varmap_find.con"
-let index_uri = uri_of_string "cic:/Coq/ring/Quote/index.ind"
-let left_idx_uri = (index_uri, 0, 1)
-let right_idx_uri = (index_uri, 0, 2)
-let end_idx_uri = (index_uri, 0, 3)
-
-let abstract_rings_A_uri =
- uri_of_string "cic:/Coq/ring/Ring_abstract/abstract_rings/A.var"
-let abstract_rings_Aplus_uri =
- uri_of_string "cic:/Coq/ring/Ring_abstract/abstract_rings/Aplus.var"
-let abstract_rings_Amult_uri =
- uri_of_string "cic:/Coq/ring/Ring_abstract/abstract_rings/Amult.var"
-let abstract_rings_Aone_uri =
- uri_of_string "cic:/Coq/ring/Ring_abstract/abstract_rings/Aone.var"
-let abstract_rings_Azero_uri =
- uri_of_string "cic:/Coq/ring/Ring_abstract/abstract_rings/Azero.var"
-let abstract_rings_Aopp_uri =
- uri_of_string "cic:/Coq/ring/Ring_abstract/abstract_rings/Aopp.var"
-let abstract_rings_Aeq_uri =
- uri_of_string "cic:/Coq/ring/Ring_abstract/abstract_rings/Aeq.var"
-let abstract_rings_vm_uri =
- uri_of_string "cic:/Coq/ring/Ring_abstract/abstract_rings/vm.var"
-let abstract_rings_T_uri =
- uri_of_string "cic:/Coq/ring/Ring_abstract/abstract_rings/T.var"
-let interp_ap_uri = uri_of_string "cic:/Coq/ring/Ring_abstract/interp_ap.con"
-let interp_sacs_uri =
-  uri_of_string "cic:/Coq/ring/Ring_abstract/interp_sacs.con"
-let apolynomial_normalize_uri =
-  uri_of_string "cic:/Coq/ring/Ring_abstract/apolynomial_normalize.con"
-let apolynomial_normalize_ok_uri =
-  uri_of_string "cic:/Coq/ring/Ring_abstract/apolynomial_normalize_ok.con"
-
-(** CIC PREDICATES *)
-
-  (**
-    check whether a term is a constant or not, if argument "uri" is given and is
-    not "None" also check if the constant correspond to the given one or not
-  *)
-let cic_is_const ?(uri: uri option = None) term =
-  match uri with
-  | None ->
-      (match term with
-        | Cic.Const _ -> true
-        | _ -> false)
-  | Some realuri ->
-      (match term with
-        | Cic.Const (u, _) when (eq u realuri) -> true
-        | _ -> false)
-
-(** PROOF AND GOAL ACCESSORS *)
-
-  (**
-    @param proof a proof
-    @return the uri of a given proof
-  *)
-let uri_of_proof ~proof:(uri, _, _, _) = uri
-
-  (**
-    @param metano meta list index
-    @param metasenv meta list (environment)
-    @raise Failure if metano is not found in metasenv
-    @return conjecture corresponding to metano in metasenv
-  *)
-let conj_of_metano metano =
-  try
-    List.find (function (m, _, _) -> m = metano)
-  with Not_found ->
-    failwith (
-      "Ring.conj_of_metano: " ^
-      (string_of_int metano) ^ " no such meta")
-
-  (**
-    @param status current proof engine status
-    @raise Failure if proof is None
-    @return current goal's metasenv
-  *)
-let metasenv_of_status ~status:((_,m,_,_), _) = m
-
-  (**
-    @param status a proof engine status
-    @raise Failure when proof or goal are None
-    @return context corresponding to current goal
-  *)
-let context_of_status ~status:(proof, goal as status) =
-  let metasenv = metasenv_of_status ~status:status in
-  let _, context, _ = List.find (function (m,_,_) -> m=goal) metasenv in
-   context
-
-(** CIC TERM CONSTRUCTORS *)
-
-  (**
-    Create a Cic term consisting of a constant
-    @param uri URI of the constant
-    @proof current proof
-    @exp_named_subst explicit named substitution
-  *)
-let mkConst ~uri ~exp_named_subst =
-  Cic.Const (uri, exp_named_subst)
-
-  (**
-    Create a Cic term consisting of a constructor
-    @param uri triple <uri, typeno, consno> where uri is the uri of an inductive
-    type, typeno is the type number in a mutind structure (0 based), consno is
-    the constructor number (1 based)
-    @exp_named_subst explicit named substitution
-  *)
-let mkCtor ~uri:(uri, typeno, consno) ~exp_named_subst =
- Cic.MutConstruct (uri, typeno, consno, exp_named_subst)
-
-  (**
-    Create a Cic term consisting of a type member of a mutual induction
-    @param uri pair <uri, typeno> where uri is the uri of a mutual inductive
-    type and typeno is the type number (0 based) in the mutual induction
-    @exp_named_subst explicit named substitution
-  *)
-let mkMutInd ~uri:(uri, typeno) ~exp_named_subst =
- Cic.MutInd (uri, typeno, exp_named_subst)
-
-(** EXCEPTIONS *)
-
-  (**
-    raised when the current goal is not ringable; a goal is ringable when is an
-    equality on reals (@see r_uri)
-  *)
-exception GoalUnringable
-
-(** RING's FUNCTIONS LIBRARY *)
-
-  (**
-    Check whether the ring tactic can be applied on a given term (i.e. that is
-    an equality on reals)
-    @param term to be tested
-    @return true if the term is ringable, false otherwise
-  *)
-let ringable =
-  let is_equality = function
-    | Cic.MutInd (uri, 0, []) when (eq uri eqt_uri) -> true
-    | _ -> false
-  in
-  let is_real = function
-    | Cic.Const (uri, _) when (eq uri r_uri) -> true
-    | _ -> false
-  in
-  function
-    | Cic.Appl (app::set::_::_::[]) when (is_equality app && is_real set) ->
-        warn "Goal Ringable!";
-        true
-    | _ ->
-        warn "Goal Not Ringable :-((";
-        false
-
-  (**
-    split an equality goal of the form "t1 = t2" in its two subterms t1 and t2
-    after checking that the goal is ringable
-    @param goal the current goal
-    @return a pair (t1,t2) that are two sides of the equality goal
-    @raise GoalUnringable if the goal isn't ringable
-  *)
-let split_eq = function
-  | (Cic.Appl (_::_::t1::t2::[])) as term when ringable term ->
-        warn ("<term1>" ^ (CicPp.ppterm t1) ^ "</term1>");
-        warn ("<term2>" ^ (CicPp.ppterm t2) ^ "</term2>");
-        (t1, t2)
-  | _ -> raise GoalUnringable
-
-  (**
-    @param i an integer index representing a 1 based number of node in a binary
-    search tree counted in a fbs manner (i.e.: 1 is the root, 2 is the left
-    child of the root (if any), 3 is the right child of the root (if any), 4 is
-    the left child of the left child of the root (if any), ....)
-    @param proof the current proof
-    @return an index representing the same node in a varmap (@see varmap_uri),
-    the returned index is as defined in index (@see index_uri)
-  *)
-let path_of_int n =
-  let rec digits_of_int n =
-    if n=1 then [] else (n mod 2 = 1)::(digits_of_int (n lsr 1))
-  in
-  List.fold_right
-    (fun digit path ->
-      Cic.Appl [
-        mkCtor (if (digit = true) then right_idx_uri else left_idx_uri) [];
-        path])
-    (List.rev (digits_of_int n)) (* remove leading true (i.e. digit 1) *)
-    (mkCtor end_idx_uri [])
-
-  (**
-    Build a variable map (@see varmap_uri) from a variables array.
-    A variable map is almost a binary tree so this function receiving a var list
-    like [v;w;x;y;z] will build a varmap of shape:       v
-                                                        / \
-                                                       w   x
-                                                      / \
-                                                     y   z
-    @param vars variables array
-    @return a cic term representing the variable map containing vars variables
-  *)
-let btree_of_array ~vars =
-  let r = mkConst r_uri [] in                (* cic objects *)
-  let empty_vm_r = mkCtor empty_vm_uri [quote_varmap_A_uri,r] in
-  let node_vm_r = mkCtor node_vm_uri [quote_varmap_A_uri,r] in
-  let size = Array.length vars in
-  let halfsize = size lsr 1 in
-  let rec aux n =   (* build the btree starting from position n *)
-      (*
-        n is the position in the vars array _1_based_ in order to access
-        left and right child using (n*2, n*2+1) trick
-      *)
-    if n > size then
-      empty_vm_r
-    else if n > halfsize then  (* no more children *)
-      Cic.Appl [node_vm_r; vars.(n-1); empty_vm_r; empty_vm_r]
-    else  (* still children *)
-      Cic.Appl [node_vm_r; vars.(n-1); aux (n*2); aux (n*2+1)]
-  in
-  aux 1
-
-  (**
-    abstraction function:
-    concrete polynoms       ----->      (abstract polynoms, varmap)
-    @param terms list of conrete polynoms
-    @return a pair <aterms, varmap> where aterms is a list of abstract polynoms
-    and varmap is the variable map needed to interpret them
-  *)
-let abstract_poly ~terms =
-  let varhash = Hashtbl.create 19 in (* vars hash, to speed up lookup *)
-  let varlist = ref [] in  (* vars list in reverse order *)
-  let counter = ref 1 in  (* index of next new variable *)
-  let rec aux = function  (* TODO not tail recursive *)
-    (* "bop" -> binary operator | "uop" -> unary operator *)
-    | Cic.Appl (bop::t1::t2::[])
-      when (cic_is_const ~uri:(Some rplus_uri) bop) -> (* +. *)
-        Cic.Appl [mkCtor applus_uri []; aux t1; aux t2]
-    | Cic.Appl (bop::t1::t2::[])
-      when (cic_is_const ~uri:(Some rmult_uri) bop) -> (* *. *)
-        Cic.Appl [mkCtor apmult_uri []; aux t1; aux t2]
-    | Cic.Appl (uop::t::[])
-      when (cic_is_const ~uri:(Some ropp_uri) uop) -> (* ~-. *)
-        Cic.Appl [mkCtor apopp_uri []; aux t]
-    | t when (cic_is_const ~uri:(Some r0_uri) t) -> (* 0. *)
-        mkCtor ap0_uri []
-    | t when (cic_is_const ~uri:(Some r1_uri) t) -> (* 1. *)
-        mkCtor ap1_uri []
-    | t ->  (* variable *)
-      try
-        Hashtbl.find varhash t (* use an old var *)
-      with Not_found -> begin (* create a new var *)
-        let newvar =
-          Cic.Appl [mkCtor apvar_uri []; path_of_int !counter]
-        in
-        incr counter;
-        varlist := t :: !varlist;
-        Hashtbl.add varhash t newvar;
-        newvar
-      end
-  in
-  let aterms = List.map aux terms in  (* abstract vars *)
-  let varmap =  (* build varmap *)
-    btree_of_array ~vars:(Array.of_list (List.rev !varlist))
-  in
-  (aterms, varmap)
-
-  (**
-    given a list of abstract terms (i.e. apolynomials) build the ring "segments"
-    that is triples like (t', t'', t''') where
-          t'    = interp_ap(varmap, at)
-          t''   = interp_sacs(varmap, (apolynomial_normalize at))
-          t'''  = apolynomial_normalize_ok(varmap, at)
-    at is the abstract term built from t, t is a single member of aterms
-  *)
-let build_segments ~terms =
-  let r = mkConst r_uri [] in              (* cic objects *)
-  let rplus = mkConst rplus_uri [] in
-  let rmult = mkConst rmult_uri [] in
-  let ropp = mkConst ropp_uri [] in
-  let r1 = mkConst r1_uri [] in
-  let r0 = mkConst r0_uri [] in
-  let theory_args_subst varmap =
-   [abstract_rings_A_uri, r ;
-    abstract_rings_Aplus_uri, rplus ;
-    abstract_rings_Amult_uri, rmult ;
-    abstract_rings_Aone_uri, r1 ;
-    abstract_rings_Azero_uri, r0 ;
-    abstract_rings_Aopp_uri, ropp ;
-    abstract_rings_vm_uri, varmap] in
-  let theory_args_subst' eq varmap t =
-   [abstract_rings_A_uri, r ;
-    abstract_rings_Aplus_uri, rplus ;
-    abstract_rings_Amult_uri, rmult ;
-    abstract_rings_Aone_uri, r1 ;
-    abstract_rings_Azero_uri, r0 ;
-    abstract_rings_Aopp_uri, ropp ;
-    abstract_rings_Aeq_uri, eq ;
-    abstract_rings_vm_uri, varmap ;
-    abstract_rings_T_uri, t] in
-  let interp_ap varmap =
-   mkConst interp_ap_uri (theory_args_subst varmap) in
-  let interp_sacs varmap =
-   mkConst interp_sacs_uri (theory_args_subst varmap) in
-  let apolynomial_normalize = mkConst apolynomial_normalize_uri [] in
-  let apolynomial_normalize_ok eq varmap t =
-   mkConst apolynomial_normalize_ok_uri (theory_args_subst' eq varmap t) in
-  let rtheory = mkConst rtheory_uri [] in
-  let lxy_false =   (** Cic funcion "fun (x,y):R -> false" *)
-    Cic.Lambda (Cic.Anonymous, r,
-      Cic.Lambda (Cic.Anonymous, r,
-        mkCtor false_uri []))
-  in
-  let (aterms, varmap) = abstract_poly ~terms in  (* abstract polys *)
-  List.map    (* build ring segments *)
-   (fun t ->
-     Cic.Appl [interp_ap varmap ; t],
-     Cic.Appl (
-       [interp_sacs varmap ; Cic.Appl [apolynomial_normalize; t]]),
-     Cic.Appl [apolynomial_normalize_ok lxy_false varmap rtheory ; t]
-   ) aterms
-
-
-let status_of_single_goal_tactic_result =
- function
-    proof,[goal] -> proof,goal
-  | _ ->
-    raise (Fail "status_of_single_goal_tactic_result: the tactic did not produce exactly a new goal")
-
-(* Galla: spostata in variousTactics.ml 
-  (**
-    auxiliary tactic "elim_type"
-    @param status current proof engine status
-    @param term term to cut
-  *)
-let elim_type_tac ~term ~status =
-  warn "in Ring.elim_type_tac";
-  Tacticals.thens ~start:(cut_tac ~term)
-   ~continuations:[elim_simpl_intros_tac ~term:(Cic.Rel 1) ; Tacticals.id_tac] ~status
-*)
-
-  (**
-    auxiliary tactic, use elim_type and try to close 2nd subgoal using proof
-    @param status current proof engine status
-    @param term term to cut
-    @param proof term used to prove second subgoal generated by elim_type
-  *)
-let elim_type2_tac ~term ~proof ~status =
-  let module E = EliminationTactics in
-  warn "in Ring.elim_type2";
-  Tacticals.thens ~start:(E.elim_type_tac ~term)
-   ~continuations:[Tacticals.id_tac ; exact_tac ~term:proof] ~status
-
-(* Galla: spostata in variousTactics.ml
-  (**
-    Reflexivity tactic, try to solve current goal using "refl_eqT"
-    Warning: this isn't equale to the coq's Reflexivity because this one tries
-    only refl_eqT, coq's one also try "refl_equal"
-    @param status current proof engine status
-  *)
-let reflexivity_tac ~status:(proof, goal) =
-  warn "in Ring.reflexivity_tac";
-  let refl_eqt = mkCtor ~uri:refl_eqt_uri ~exp_named_subst:[] in
-  try
-    apply_tac ~status:(proof, goal) ~term:refl_eqt
-  with (Fail _) as e ->
-    let e_str = Printexc.to_string e in
-    raise (Fail ("Reflexivity failed with exception: " ^ e_str))
-*)
-
-  (** lift an 8-uple of debrujins indexes of n *)
-let lift ~n (a,b,c,d,e,f,g,h) =
-  match (List.map (CicSubstitution.lift n) [a;b;c;d;e;f;g;h]) with
-  | [a;b;c;d;e;f;g;h] -> (a,b,c,d,e,f,g,h)
-  | _ -> assert false
-
-  (**
-    remove hypothesis from a given status starting from the last one
-    @param count number of hypotheses to remove
-    @param status current proof engine status
-  *)
-let purge_hyps_tac ~count ~status:(proof, goal as status) =
-  let module S = ProofEngineStructuralRules in
-  let rec aux n context status =
-    assert(n>=0);
-    match (n, context) with
-    | (0, _) -> status
-    | (n, hd::tl) ->
-        aux (n-1) tl
-         (status_of_single_goal_tactic_result (S.clear ~hyp:hd ~status))
-    | (_, []) -> failwith "Ring.purge_hyps_tac: no hypotheses left"
-  in
-   let (_, metasenv, _, _) = proof in
-    let (_, context, _) = conj_of_metano goal metasenv in
-     let proof',goal' = aux count context status in
-      assert (goal = goal') ;
-      proof',[goal']
-
-(** THE TACTIC! *)
-
-  (**
-    Ring tactic, does associative and commutative rewritings in Reals ring
-    @param status current proof engine status
-  *)
-let ring_tac ~status:((proof, goal) as status) =
-  warn "in Ring tactic";
-  let eqt = mkMutInd (eqt_uri, 0) [] in
-  let r = mkConst r_uri [] in
-  let metasenv = metasenv_of_status ~status in
-  let (metano, context, ty) = conj_of_metano goal metasenv in
-  let (t1, t2) = split_eq ty in (* goal like t1 = t2 *)
-  match (build_segments ~terms:[t1; t2]) with
-  | (t1', t1'', t1'_eq_t1'')::(t2', t2'', t2'_eq_t2'')::[] -> begin
-      List.iter  (* debugging, feel free to remove *)
-        (fun (descr, term) ->
-          warn (descr ^ " " ^ (CicPp.ppterm term)))
-        (List.combine
-          ["t1"; "t1'"; "t1''"; "t1'_eq_t1''";
-           "t2"; "t2'"; "t2''"; "t2'_eq_t2''"]
-          [t1; t1'; t1''; t1'_eq_t1'';
-           t2; t2'; t2''; t2'_eq_t2'']);
-      try
-        let new_hyps = ref 0 in  (* number of new hypotheses created *)
-        Tacticals.try_tactics
-          ~status
-          ~tactics:[
-            "reflexivity", EqualityTactics.reflexivity_tac ;
-            "exact t1'_eq_t1''", exact_tac ~term:t1'_eq_t1'' ;
-            "exact t2'_eq_t2''", exact_tac ~term:t2'_eq_t2'' ;
-            "exact sym_eqt su t1 ...", exact_tac
-            ~term:(
-              Cic.Appl
-               [mkConst sym_eqt_uri
-                 [equality_is_a_congruence_A, mkConst r_uri [] ;
-                  equality_is_a_congruence_x, t1'' ;
-                  equality_is_a_congruence_y, t1
-                 ] ;
-                t1'_eq_t1''
-               ]) ;
-            "elim_type eqt su t1 ...", (fun ~status ->
-              let status' = (* status after 1st elim_type use *)
-                let context = context_of_status ~status in
-                if not (are_convertible context t1'' t1) then begin
-                  warn "t1'' and t1 are NOT CONVERTIBLE";
-                  let newstatus =
-                    elim_type2_tac  (* 1st elim_type use *)
-                      ~status ~proof:t1'_eq_t1''
-                      ~term:(Cic.Appl [eqt; r; t1''; t1])
-                  in
-                   incr new_hyps; (* elim_type add an hyp *)
-                   match newstatus with
-                      (proof,[goal]) -> proof,goal
-                    | _ -> assert false
-                end else begin
-                  warn "t1'' and t1 are CONVERTIBLE";
-                  status
-                end
-              in
-              let (t1,t1',t1'',t1'_eq_t1'',t2,t2',t2'',t2'_eq_t2'') =
-                lift 1 (t1,t1',t1'',t1'_eq_t1'', t2,t2',t2'',t2'_eq_t2'')
-              in
-              let status'' =
-                Tacticals.try_tactics (* try to solve 1st subgoal *)
-                  ~status:status'
-                  ~tactics:[
-                    "exact t2'_eq_t2''", exact_tac ~term:t2'_eq_t2'';
-                    "exact sym_eqt su t2 ...",
-                      exact_tac
-                       ~term:(
-                         Cic.Appl
-                          [mkConst sym_eqt_uri
-                            [equality_is_a_congruence_A, mkConst r_uri [] ;
-                             equality_is_a_congruence_x, t2'' ;
-                             equality_is_a_congruence_y, t2
-                            ] ;
-                           t2'_eq_t2''
-                          ]) ;
-                    "elim_type eqt su t2 ...", (fun ~status ->
-                      let status' =
-                        let context = context_of_status ~status in
-                        if not (are_convertible context t2'' t2) then begin
-                          warn "t2'' and t2 are NOT CONVERTIBLE";
-                          let newstatus =
-                            elim_type2_tac  (* 2nd elim_type use *)
-                              ~status ~proof:t2'_eq_t2''
-                              ~term:(Cic.Appl [eqt; r; t2''; t2])
-                          in
-                          incr new_hyps; (* elim_type add an hyp *)
-                          match newstatus with
-                             (proof,[goal]) -> proof,goal
-                           | _ -> assert false
-                        end else begin
-                          warn "t2'' and t2 are CONVERTIBLE";
-                          status
-                        end
-                      in
-                      try (* try to solve main goal *)
-                        warn "trying reflexivity ....";
-                        EqualityTactics.reflexivity_tac ~status:status'
-                      with (Fail _) ->  (* leave conclusion to the user *)
-                        warn "reflexivity failed, solution's left as an ex :-)";
-                        purge_hyps_tac ~count:!new_hyps ~status:status')]
-              in
-              status'')]
-      with (Fail s) ->
-        raise (Fail ("Ring failure: " ^ s))
-    end
-  | _ -> (* impossible: we are applying ring exacty to 2 terms *)
-    assert false
-
-  (* wrap ring_tac catching GoalUnringable and raising Fail *)
-let ring_tac ~status =
-  try
-    ring_tac ~status
-  with GoalUnringable ->
-    raise (Fail "goal unringable")
-
diff --git a/helm/ocaml/tactics/ring.mli b/helm/ocaml/tactics/ring.mli
deleted file mode 100644 (file)
index b6eb34b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-  (* ring tactics *)
-val ring_tac: ProofEngineTypes.tactic
-
-(*Galla: spostata in variuosTactics.ml
-  (* auxiliary tactics *)
-val elim_type_tac: term: Cic.term -> ProofEngineTypes.tactic
-*)
-
-(* spostata in variousTactics.ml
-val reflexivity_tac: ProofEngineTypes.tactic
-*)
diff --git a/helm/ocaml/tactics/tacticChaser.ml b/helm/ocaml/tactics/tacticChaser.ml
deleted file mode 100644 (file)
index c4bfc5e..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 18/02/2003                                 *)
-(*                                                                            *)
-(*                                                                            *)
-(******************************************************************************)
-
-module I = MQueryInterpreter
-module U = MQGUtil
-module G = MQueryGenerator
-
-  (* search arguments on which Apply tactic doesn't fail *)
-let matchConclusion mqi_handle ?(output_html = (fun _ -> ())) ~choose_must () ~status =
- let ((_, metasenv, _, _), metano) = status in
- let (_, ey ,ty) = List.find (function (m,_,_) -> m=metano) metasenv in
-  let list_of_must,only = MQueryLevels.out_restr metasenv ey ty in
-  let must = choose_must list_of_must only in
-  let torigth_restriction (u,b) =
-   (if b then `MainConclusion None else `InConclusion), u
-  in
-  let rigth_must = List.map torigth_restriction must in
-  let rigth_only = Some (List.map torigth_restriction only) in
-  let result =
-        I.execute mqi_handle 
-           (G.query_of_constraints
-        (Some U.universe_for_match_conclusion)
-        (rigth_must,[],[]) (rigth_only,None,None)) in 
-       let uris =
-        List.map
-               (function uri,_ ->
-                       MQueryMisc.wrong_xpointer_format_from_wrong_xpointer_format' uri
-               ) result in
-        let uris',exc =
-               let rec filter_out =
-                function
-                               [] -> [],""
-                       | uri::tl ->
-                                let tl',exc = filter_out tl in
-                                       try
-                                        if
-                                               (try
-                                                ignore
-                                                       (PrimitiveTactics.apply_tac
-                                                        ~term:(MQueryMisc.term_of_cic_textual_parser_uri
-                                                               (MQueryMisc.cic_textual_parser_uri_of_string uri))
-                                                        ~status);
-                                                true
-                                               with ProofEngineTypes.Fail _ -> false)
-                                        then
-                                               uri::tl',exc
-                                        else
-                                               tl',exc
-                                       with
-           (ProofEngineTypes.Fail _) as e ->
-                                                let exc' =
-                                                 "<h1 color=\"red\"> ^ Exception raised trying to apply " ^
-                                                        uri ^ ": " ^ Printexc.to_string e ^ " </h1>" ^ exc
-                                                in
-                                                 tl',exc'
-               in
-                filter_out uris
-        in
-               let html' =
-                " <h1>Objects that can actually be applied: </h1> " ^
-                String.concat "<br>" uris' ^ exc ^
-                " <h1>Number of false matches: " ^
-                       string_of_int (List.length uris - List.length uris') ^ "</h1>" ^
-                " <h1>Number of good matches: " ^
-                       string_of_int (List.length uris') ^ "</h1>"
-               in
-                output_html html' ;
-                uris'
-;;
-
diff --git a/helm/ocaml/tactics/tacticChaser.mli b/helm/ocaml/tactics/tacticChaser.mli
deleted file mode 100644 (file)
index 847dbc8..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(* Copyright (C) 2000-2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val matchConclusion : MQIConn.handle ->
-  ?output_html:(string -> unit) ->
-    (* boolean value: true = in main position *)
-  choose_must:((MQGTypes.uri * bool) list list ->
-               (MQGTypes.uri * bool) list ->
-               (MQGTypes.uri * bool) list) ->
-  unit -> status: ProofEngineTypes.status -> string list
-
diff --git a/helm/ocaml/tactics/tacticals.ml b/helm/ocaml/tactics/tacticals.ml
deleted file mode 100644 (file)
index d499acb..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-open CicReduction
-open ProofEngineTypes
-open UriManager
-
-(** DEBUGGING *)
-
-  (** perform debugging output? *)
-let debug = false
-
-  (** debugging print *)
-let warn s =
-  if debug then
-    prerr_endline ("TACTICALS WARNING: " ^ s)
-
-
-(** TACTIC{,AL}S *)
-
-  (* not a tactical, but it's used only here (?) *)
-
-let id_tac ~status:(proof,goal) =
-  (proof,[goal])
-
-
-  (**
-    naive implementation of ORELSE tactical, try a sequence of tactics in turn:
-    if one fails pass to the next one and so on, eventually raises (failure "no
-    tactics left")
-    TODO warning: not tail recursive due to "try .. with" boxing
-
-    Galla: is this exactly Coq's "First"?
-
-  *)
-let rec try_tactics ~(tactics: (string * tactic) list) ~status =
-  warn "in Tacticals.try_tactics";
-  match tactics with
-  | (descr, tac)::tactics ->
-      warn ("Tacticals.try_tactics IS TRYING " ^ descr);
-      (try
-        let res = tac ~status in
-        warn ("Tacticals.try_tactics: " ^ descr ^ " succedeed!!!");
-        res
-       with
-        e ->
-         match e with
-            (Fail _)
-          | (CicTypeChecker.TypeCheckerFailure (CicTypeChecker.NotWellTyped _))
-          | (CicUnification.UnificationFailed) ->
-              warn (
-                "Tacticals.try_tactics failed with exn: " ^
-                Printexc.to_string e);
-              try_tactics ~tactics ~status
-        | _ -> raise e (* [e] must not be caught ; let's re-raise it *)
-      )
-  | [] -> raise (Fail "try_tactics: no tactics left")
-
-
-
-let thens ~start ~continuations ~status =
- let (proof,new_goals) = start ~status in
-  try
-   List.fold_left2
-    (fun (proof,goals) goal tactic ->
-      let (proof',new_goals') = tactic ~status:(proof,goal) in
-       (proof',goals@new_goals')
-    ) (proof,[]) new_goals continuations
-  with
-   Invalid_argument _ -> raise (Fail "thens: wrong number of new goals")
-
-
-
-let then_ ~start ~continuation ~status =
- let (proof,new_goals) = start ~status in
-  List.fold_left
-   (fun (proof,goals) goal ->
-     let (proof',new_goals') = continuation ~status:(proof,goal) in
-      (proof',goals@new_goals')
-   ) (proof,[]) new_goals
-
-
-(* Galla *)
-(* si suppone che tutte le tattiche sollevino solamente Fail? *)
-
-
-(* TODO: x debug: i due tatticali seguenti non contano quante volte hanno applicato la tattica *)
-
-(* This keep on appling tactic until it fails *)
-(* When <tactic> generates more than one goal, you have a tree of
-   application on the tactic, repeat_tactic works in depth on this tree *)
-
-let rec repeat_tactic ~tactic ~status =
-  warn "in repeat_tactic";
-  try let (proof, goallist) = tactic ~status in
-   let rec step proof goallist =
-    match goallist with
-       [] -> (proof, [])
-     | head::tail -> 
-        let (proof', goallist') = repeat_tactic ~tactic ~status:(proof, head) in
-         let (proof'', goallist'') = step proof' tail in
-          proof'', goallist'@goallist''
-   in
-    step proof goallist
-  with 
-   (Fail _) as e ->
-    warn ("Tacticals.repeat_tactic failed after nth time with exception: " ^ Printexc.to_string e) ;
-    id_tac ~status
-;;
-
-
-
-(* This tries to apply tactic n times *)
-
-let rec do_tactic ~n ~tactic ~status =
-  warn "in do_tactic";
-  try 
-   let (proof, goallist) = 
-    if (n>0) then tactic ~status 
-             else id_tac ~status in
-(*             else (proof, []) in *)(* perche' non va bene questo? stessa questione di ##### ? *)
-   let rec step proof goallist =
-    match goallist with
-       [] -> (proof, [])
-     | head::tail -> 
-        let (proof', goallist') = do_tactic ~n:(n-1) ~tactic ~status:(proof, head) in
-        let (proof'', goallist'') = step proof' tail in
-         proof'', goallist'@goallist''
-   in
-    step proof goallist
-  with 
-   (Fail _) as e ->
-    warn ("Tacticals.do_tactic failed after nth time with exception: " ^ Printexc.to_string e) ;
-    id_tac ~status
-;;
-
-
-
-(* This applies tactic and catches its possible failure *)
-
-let rec try_tactic ~tactic ~status =
-  warn "in Tacticals.try_tactic";
-  try
-   tactic ~status
-  with
-   (Fail _) as e -> 
-    warn ( "Tacticals.try_tactic failed with exn: " ^ Printexc.to_string e);
-    id_tac ~status
-;;
-
-
-(* This tries tactics until one of them doesn't _solve_ the goal *)
-(* TODO: si puo' unificare le 2(due) chiamate ricorsive? *)
-
-let rec solve_tactics ~(tactics: (string * tactic) list) ~status =
-  warn "in Tacticals.solve_tactics";
-  match tactics with
-  | (descr, currenttactic)::moretactics ->
-      warn ("Tacticals.solve_tactics is trying " ^ descr);
-      (try
-        let (proof, goallist) = currenttactic ~status in
-         match goallist with 
-            [] -> warn ("Tacticals.solve_tactics: " ^ descr ^ " solved the goal!!!");
-(* questo significa che non ci sono piu' goal, o che current_tactic non ne ha aperti di nuovi? (la 2a!) ##### *)
-(* nel secondo caso basta per dire che solve_tactics has solved the goal? (si!) *)
-                  (proof, goallist)
-          | _ -> warn ("Tacticals.solve_tactics: try the next tactic");
-                 solve_tactics ~tactics:(moretactics) ~status
-       with
-        (Fail _) as e ->
-         warn ("Tacticals.solve_tactics: current tactic failed with exn: " ^ Printexc.to_string e);
-         solve_tactics ~tactics ~status
-      )
-  | [] -> raise (Fail "solve_tactics cannot solve the goal");
-          id_tac ~status
-;;
-
-
-
-
-
-
-
-
-
-
-  (** tattica di prova per debuggare i tatticali *)
-(*
-let thens' ~start ~continuations ~status =
- let (proof,new_goals) = start ~status in
-  try
-   List.fold_left2
-    (fun (proof,goals) goal tactic ->
-      let (proof',new_goals') = tactic ~status:(proof,goal) in
-       (proof',goals@new_goals')
-    ) (proof,[]) new_goals continuations
-  with
-   Invalid_argument _ -> raise (Fail "thens: wrong number of new goals")
-
-let prova_tac =
- let apply_T_tac ~status:((proof,goal) as status) =
-  let curi,metasenv,pbo,pty = proof in
-  let metano,context,gty = List.find (function (m,_,_) -> m=goal) metasenv in
-   let rel =
-    let rec find n =
-     function
-        [] -> assert false
-      | (Some (Cic.Name name,_))::_ when name = "T" -> n
-      | _::tl -> find (n+1) tl
-    in
-     prerr_endline ("eseguo find");
-     find 1 context
-   in
-    prerr_endline ("eseguo apply");    
-    apply_tac ~term:(Cic.Rel rel) ~status
- in
-(*  do_tactic ~n:2 *)
-  repeat_tactic
-   ~tactic:
-    (then_
-      ~start:(intros_tac ~name:"pippo")
-      ~continuation:(thens' ~start:apply_T_tac ~continuations:[id_tac ; apply_tac ~term:(Cic.Rel 1)]))
-(* id_tac *)
-;;
-*)
-
-
diff --git a/helm/ocaml/tactics/tacticals.mli b/helm/ocaml/tactics/tacticals.mli
deleted file mode 100644 (file)
index b1861b5..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-
-val id_tac : ProofEngineTypes.tactic
-
-
-
-  (* pseudo tacticals *)
-val try_tactics:
-  tactics: (string * ProofEngineTypes.tactic) list -> ProofEngineTypes.tactic
-
-val thens:
- start: ProofEngineTypes.tactic ->
- continuations: ProofEngineTypes.tactic list -> ProofEngineTypes.tactic
-
-val then_:
- start: ProofEngineTypes.tactic ->
- continuation: ProofEngineTypes.tactic -> ProofEngineTypes.tactic
-
-
-val repeat_tactic: 
- tactic: ProofEngineTypes.tactic -> ProofEngineTypes.tactic
-
-val do_tactic:
- n: int ->
- tactic: ProofEngineTypes.tactic -> ProofEngineTypes.tactic 
-
-val try_tactic:
- tactic: ProofEngineTypes.tactic -> ProofEngineTypes.tactic 
-
-val solve_tactics:
- tactics: (string * ProofEngineTypes.tactic) list -> ProofEngineTypes.tactic
-
-
-
-(*
-val prova_tac : ProofEngineTypes.tactic
-*)
diff --git a/helm/ocaml/tactics/variousTactics.ml b/helm/ocaml/tactics/variousTactics.ml
deleted file mode 100644 (file)
index 390d97f..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-
-(* TODO se ce n'e' piu' di una, prende la prima che trova... sarebbe meglio
-chiedere: find dovrebbe restituire una lista di hyp (?) da passare all'utonto con una
-funzione di callback che restituisce la (sola) hyp da applicare *)
-
-let assumption_tac ~status:((proof,goal) as status) =
-  let module C = Cic in
-  let module R = CicReduction in
-  let module S = CicSubstitution in
-   let _,metasenv,_,_ = proof in
-    let _,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-     let rec find n = function 
-        hd::tl -> 
-         (match hd with
-             (Some (_, C.Decl t)) when
-               (R.are_convertible context (S.lift n t) ty) -> n
-           | (Some (_, C.Def t)) when
-               (R.are_convertible context
-                (CicTypeChecker.type_of_aux' metasenv context (S.lift n t)) ty) -> n 
-           | _ -> find (n+1) tl
-         )
-      | [] -> raise (ProofEngineTypes.Fail "Assumption: No such assumption")
-     in PrimitiveTactics.apply_tac ~status ~term:(C.Rel (find 1 context))
-;;
-
-(* ANCORA DA DEBUGGARE *)
-
-exception AllSelectedTermsMustBeConvertible;;
-
-(* serve una funzione che cerchi nel ty dal basso a partire da term, i lambda
-e li aggiunga nel context, poi si conta la lunghezza di questo nuovo
-contesto e si lifta di tot... COSA SIGNIFICA TUTTO CIO'?????? *)
-
-let generalize_tac
- ?(mk_fresh_name_callback = ProofEngineHelpers.mk_fresh_name)
- terms ~status:((proof,goal) as status)
-=
-  let module C = Cic in
-  let module P = PrimitiveTactics in
-  let module T = Tacticals in
-   let _,metasenv,_,_ = proof in
-   let _,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
-    let typ =
-     match terms with
-        [] -> assert false
-      | he::tl ->
-         (* We need to check that all the convertibility of all the terms *)
-         List.iter
-          (function t ->
-            if not (CicReduction.are_convertible context he t) then 
-             raise AllSelectedTermsMustBeConvertible
-          ) tl ;
-         (CicTypeChecker.type_of_aux' metasenv context he)
-    in
-     T.thens 
-      ~start:
-        (P.cut_tac 
-         (C.Prod(
-           (mk_fresh_name_callback context C.Anonymous typ), 
-           typ,
-           (ProofEngineReduction.replace_lifting_csc 1
-             ~equality:(==) 
-             ~what:terms
-             ~with_what:(List.map (function _ -> C.Rel 1) terms)
-             ~where:ty)
-         )))
-      ~continuations: [(P.apply_tac ~term:(C.Rel 1)) ; T.id_tac]
-      ~status
-;;
-
-
diff --git a/helm/ocaml/tactics/variousTactics.mli b/helm/ocaml/tactics/variousTactics.mli
deleted file mode 100644 (file)
index 2b45aa1..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception AllSelectedTermsMustBeConvertible;;
-
-val assumption_tac: ProofEngineTypes.tactic
-val generalize_tac:
- ?mk_fresh_name_callback:ProofEngineTypes.mk_fresh_name_type -> Cic.term list ->
-  ProofEngineTypes.tactic
diff --git a/helm/ocaml/tex_cic_textual_parser/.cvsignore b/helm/ocaml/tex_cic_textual_parser/.cvsignore
deleted file mode 100644 (file)
index 1569cb4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa texCicTextualParser.ml texCicTextualParser.mli texCicTextualLexer.ml
diff --git a/helm/ocaml/tex_cic_textual_parser/.depend b/helm/ocaml/tex_cic_textual_parser/.depend
deleted file mode 100644 (file)
index 7115677..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-texCicTextualParserContext.cmi: texCicTextualParser.cmi 
-texCicTextualParser.cmo: texCicTextualParser0.cmo texCicTextualParser.cmi 
-texCicTextualParser.cmx: texCicTextualParser0.cmx texCicTextualParser.cmi 
-texCicTextualParserContext.cmo: texCicTextualParser.cmi \
-    texCicTextualParser0.cmo texCicTextualParserContext.cmi 
-texCicTextualParserContext.cmx: texCicTextualParser.cmx \
-    texCicTextualParser0.cmx texCicTextualParserContext.cmi 
-texCicTextualLexer.cmo: texCicTextualParser.cmi 
-texCicTextualLexer.cmx: texCicTextualParser.cmx 
diff --git a/helm/ocaml/tex_cic_textual_parser/Makefile b/helm/ocaml/tex_cic_textual_parser/Makefile
deleted file mode 100644 (file)
index b57b3a8..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-PACKAGE = tex_cic_textual_parser
-REQUIRES = helm-cic helm-cic_textual_parser
-PREDICATES =
-
-INTERFACE_FILES = texCicTextualParser.mli texCicTextualParserContext.mli
-IMPLEMENTATION_FILES = texCicTextualParser0.ml $(INTERFACE_FILES:%.mli=%.ml) \
-                       texCicTextualLexer.ml
-EXTRA_OBJECTS_TO_INSTALL = texCicTextualParser0.ml texCicTextualParser0.cmi \
-                           texCicTextualLexer.mll texCicTextualParser.mly
-
-EXTRA_OBJECTS_TO_CLEAN = texCicTextualParser.ml texCicTextualParser.mli \
-                         texCicTextualLexer.ml
-
-include ../Makefile.common
diff --git a/helm/ocaml/tex_cic_textual_parser/texCicTextualLexer.mll b/helm/ocaml/tex_cic_textual_parser/texCicTextualLexer.mll
deleted file mode 100644 (file)
index 01ddd0c..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-{
- open TexCicTextualParser;;
- module L = Lexing;;
- module U = UriManager;;
-
- let indtyuri_of_uri uri =
-  let index_sharp =  String.index uri '#' in
-  let index_num = index_sharp + 3 in
-   try
-    (UriManager.uri_of_string (String.sub uri 0 index_sharp),
-     int_of_string(String.sub uri index_num (String.length uri - index_num)) - 1
-    )
-   with
-    Failure msg ->
-     raise (CicTextualParser0.LexerFailure "Not an inductive URI")
- ;;
-
- let indconuri_of_uri uri =
-  let index_sharp =  String.index uri '#' in
-  let index_div = String.rindex uri '/' in
-  let index_con = index_div + 1 in
-   try
-    (UriManager.uri_of_string (String.sub uri 0 index_sharp),
-     int_of_string
-      (String.sub uri (index_sharp + 3) (index_div - index_sharp - 3)) - 1,
-     int_of_string
-      (String.sub uri index_con (String.length uri - index_con))
-    )
-   with
-    Failure msg ->
-     raise (CicTextualParser0.LexerFailure "Not a constructor URI")
- ;;
-
- (* TeX unquoting for "_" *)
- let unquote str =
-  Str.global_replace (Str.regexp "\\\\_") "_" str
- ;;
-}
-let dollar = '$'
-let num = ['1'-'9']['0'-'9']* | '0'
-let letter = ['A'-'Z' 'a'-'z']
-let alfa = letter | ['_' ''' '-'] | "\\_"
-let ident = letter (alfa | num)*
-let baseuri = '/'(ident '/')* ident '.'
-let conuri = baseuri "con"
-let varuri = baseuri "var"
-let indtyuri = baseuri "ind#1/" num
-let indconuri = baseuri "ind#1/" num "/" num
-let blanks = [' ' '\t' '\n' '~' '{' '}'] | "\\;" | "\\rm"
-rule token =
- parse
-    blanks      { token lexbuf } (* skip blanks *)
-  | "\\Case"    { CASE }
-  | "\\Fix"     { FIX }
-  | "\\CoFix"   { COFIX }
-  | "\\Set"     { SET }
-  | "\\Prop"    { PROP }
-  | "\\Type"    { TYPE }
-  | ident       { ID (unquote (L.lexeme lexbuf)) }
-  | conuri      { CONURI
-                   (U.uri_of_string ("cic:" ^ (unquote (L.lexeme lexbuf)))) }
-  | varuri      { VARURI
-                   (U.uri_of_string ("cic:" ^ (unquote (L.lexeme lexbuf)))) }
-  | indtyuri    { INDTYURI
-                   (indtyuri_of_uri ("cic:" ^ (unquote (L.lexeme lexbuf)))) }
-  | indconuri   { INDCONURI
-                   (indconuri_of_uri("cic:" ^ (unquote (L.lexeme lexbuf)))) }
-  | num         { NUM (int_of_string (L.lexeme lexbuf)) }
-  | '?' num     { let lexeme = L.lexeme lexbuf in
-                   META
-                    (int_of_string
-                     (String.sub lexeme 1 (String.length lexeme - 1))) }
-  | ":>"        { CAST }
-  | ":="        { LETIN }
-  | '?'         { IMPLICIT }
-  | '('         { LPAREN }
-  | ')'         { RPAREN }
-  | "\\["         { LBRACKET }
-  | "\\]"         { RBRACKET }
-  | "\\{"       { LCURLY }
-  | "\\}"       { RCURLY }
-  | ';'         { SEMICOLON }
-  | "\\lambda"  { LAMBDA }
-  | "\\pi"      { PROD }
-  | "\\forall"  { PROD }
-  | ':'         { COLON }
-  | '.'         { DOT }
-  | "\\to"      { ARROW }
-  | '_'         { NONE }
-  | dollar      { DOLLAR }
-  | eof         { EOF }
-  (* Arithmetical operators *)
-  | '+'         { PLUS }
-  | '-'         { MINUS }
-  | '*'         { TIMES }
-  | '='         { EQ }
-{}
diff --git a/helm/ocaml/tex_cic_textual_parser/texCicTextualParser.mly b/helm/ocaml/tex_cic_textual_parser/texCicTextualParser.mly
deleted file mode 100644 (file)
index e26145e..0000000
+++ /dev/null
@@ -1,598 +0,0 @@
-/* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- */
-
-%{
- open Cic;;
- module U = UriManager;;
-
- exception InvalidSuffix of string;;
- exception InductiveTypeURIExpected;;
- exception UnknownIdentifier of string;;
- exception ExplicitNamedSubstitutionAppliedToRel;;
- exception TheLeftHandSideOfAnExplicitNamedSubstitutionMustBeAVariable;;
- (* merge removing duplicates of two lists free of duplicates *)
- let union dom1 dom2 =
-  let rec filter =
-   function
-      [] -> []
-    | he::tl ->
-       if List.mem he dom1 then filter tl else he::(filter tl)
-  in
-   dom1 @ (filter dom2)
- ;;
-
- let get_index_in_list e =
-  let rec aux i =
-   function
-      [] -> raise Not_found
-    | (Some he)::_ when he = e -> i
-    | _::tl -> aux (i+1) tl
-  in
-   aux 1
- ;;
-
- (* Returns the first meta whose number is above the *)
- (* number of the higher meta.                       *)
- (*CSC: cut&pasted from proofEngine.ml *)
- let new_meta () =
-  let rec aux =
-   function
-      None,[] -> 1
-    | Some n,[] -> n
-    | None,(n,_,_)::tl -> aux (Some n,tl)
-    | Some m,(n,_,_)::tl -> if n > m then aux (Some n,tl) else aux (Some m,tl)
-  in
-   1 + aux (None,!TexCicTextualParser0.metasenv)
- ;;
-
- (* identity_relocation_list_for_metavariable i canonical_context         *)
- (* returns the identity relocation list, which is the list [1 ; ... ; n] *)
- (* where n = List.length [canonical_context]                             *)
- (*CSC: ma mi basta la lunghezza del contesto canonico!!!*)
- (*CSC: cut&pasted from proofEngine.ml *)
- let identity_relocation_list_for_metavariable canonical_context =
-  let canonical_context_length = List.length canonical_context in
-   let rec aux =
-    function
-       (_,[]) -> []
-     | (n,None::tl) -> None::(aux ((n+1),tl))
-     | (n,_::tl) -> (Some (Cic.Rel n))::(aux ((n+1),tl))
-   in
-    aux (1,canonical_context)
- ;;
-
- let deoptionize_exp_named_subst =
-  function
-     None -> [], (function _ -> [])
-   | Some (dom,mk_exp_named_subst) -> dom,mk_exp_named_subst
- ;;
-
- let term_of_con_uri uri exp_named_subst =
-  Const (uri,exp_named_subst)
- ;;
-
- let term_of_var_uri uri exp_named_subst =
-  Var (uri,exp_named_subst)
- ;;
-
- let term_of_indty_uri (uri,tyno) exp_named_subst =
-  MutInd (uri, tyno, exp_named_subst)
- ;;
-
- let term_of_indcon_uri (uri,tyno,consno) exp_named_subst =
-  MutConstruct (uri, tyno, consno, exp_named_subst)
- ;;
-
- let term_of_uri uri =
-  match uri with
-     CicTextualParser0.ConUri uri ->
-      term_of_con_uri uri
-   | CicTextualParser0.VarUri uri ->
-      term_of_var_uri uri
-   | CicTextualParser0.IndTyUri (uri,tyno) ->
-      term_of_indty_uri (uri,tyno) 
-   | CicTextualParser0.IndConUri (uri,tyno,consno) ->
-      term_of_indcon_uri (uri,tyno,consno)
- ;;
-
- let var_uri_of_id id interp =
-  let module CTP0 = CicTextualParser0 in
-   match interp (CicTextualParser0.Id id) with
-      None -> raise (UnknownIdentifier id)
-    | Some (CTP0.Uri (CTP0.VarUri uri)) -> uri
-    | Some _ -> raise TheLeftHandSideOfAnExplicitNamedSubstitutionMustBeAVariable
- ;;
-
- let indty_uri_of_id id interp =
-  let module CTP0 = CicTextualParser0 in
-   match interp (CicTextualParser0.Id id) with
-      None -> raise (UnknownIdentifier id)
-    | Some (CTP0.Uri (CTP0.IndTyUri (uri,tyno))) -> (uri,tyno)
-    | Some _ -> raise InductiveTypeURIExpected
- ;;
-
- let mk_implicit () =
-  let newmeta = new_meta () in
-   let new_canonical_context = [] in
-    let irl =
-     identity_relocation_list_for_metavariable new_canonical_context
-    in
-     TexCicTextualParser0.metasenv :=
-      [newmeta, new_canonical_context, Sort Type ;
-       newmeta+1, new_canonical_context, Meta (newmeta,irl);
-       newmeta+2, new_canonical_context, Meta (newmeta+1,irl)
-      ] @ !TexCicTextualParser0.metasenv ;
-     [], function _ -> Meta (newmeta+2,irl)
- ;;
-%}
-%token <string> ID
-%token <int> META
-%token <int> NUM
-%token <UriManager.uri> CONURI
-%token <UriManager.uri> VARURI
-%token <UriManager.uri * int> INDTYURI
-%token <UriManager.uri * int * int> INDCONURI
-%token LPAREN RPAREN PROD LAMBDA COLON DOT SET PROP TYPE CAST IMPLICIT NONE
-%token LETIN FIX COFIX SEMICOLON LCURLY RCURLY CASE ARROW LBRACKET RBRACKET EOF
-%token DOLLAR
-%token PLUS MINUS TIMES EQ
-%right ARROW
-%right EQ
-%right PLUS MINUS
-%right TIMES
-%start main
-%type <CicTextualParser0.interpretation_domain_item list * (CicTextualParser0.interpretation -> Cic.term)> main
-%%
-main:
- | EOF { raise CicTextualParser0.Eof } /* FG: was never raised */
- | DOLLAR DOLLAR EOF {raise CicTextualParser0.Eof }
- | DOLLAR DOLLAR DOLLAR DOLLAR EOF {raise CicTextualParser0.Eof }
- | expr EOF { $1 }
- | DOLLAR expr DOLLAR EOF { $2 }
- | DOLLAR DOLLAR expr DOLLAR DOLLAR EOF { $3 }
- | expr SEMICOLON { $1 } /*  FG: to read several terms in a row
-                          *  Do we need to clear some static variables? 
-                         */
-;
-expr2:
-   NUM
-   { [], function interp ->
-      let rec cic_int_of_int =
-       function
-          0 ->
-           Cic.MutConstruct
-            (UriManager.uri_of_string "cic:/Coq/Init/Datatypes/nat.ind",
-             0,1,[])
-        | n ->
-          Cic.Appl
-           [ Cic.MutConstruct
-              (UriManager.uri_of_string "cic:/Coq/Init/Datatypes/nat.ind",
-               0,2,[]) ;
-             cic_int_of_int (n - 1)
-           ]
-      in
-       cic_int_of_int $1
-   }
- | expr2 PLUS expr2
-   { let dom1,mk_expr1 = $1 in
-     let dom2,mk_expr2 = $3 in
-      let dom = union dom1 dom2 in
-       dom, function interp ->
-        Cic.Appl
-         [Cic.Const
-           (UriManager.uri_of_string "cic:/Coq/Init/Peano/plus.con",[]) ;
-          (mk_expr1 interp) ;
-          (mk_expr2 interp)
-         ]
-   }
- | expr2 MINUS expr2
-   { let dom1,mk_expr1 = $1 in
-     let dom2,mk_expr2 = $3 in
-      let dom = union dom1 dom2 in
-       dom, function interp ->
-        Cic.Appl
-         [Cic.Const
-           (UriManager.uri_of_string "cic:/Coq/Arith/Minus/minus.con",[]) ;
-          (mk_expr1 interp) ;
-          (mk_expr2 interp)
-         ]
-   }
- | expr2 TIMES expr2
-   { let dom1,mk_expr1 = $1 in
-     let dom2,mk_expr2 = $3 in
-      let dom = union dom1 dom2 in
-       dom, function interp ->
-        Cic.Appl
-         [Cic.Const
-           (UriManager.uri_of_string "cic:/Coq/Init/Peano/mult.con",[]) ;
-          (mk_expr1 interp) ;
-          (mk_expr2 interp)
-         ]
-   }
- | expr2 EQ expr2
-   { let dom1,mk_expr1 = $1 in
-     let dom2,mk_expr2 = $3 in
-     let dom3,mk_expr3 = mk_implicit () in
-      let dom = union dom1 (union dom2 dom3) in
-       dom, function interp ->
-        Cic.Appl
-         [Cic.MutInd
-           (UriManager.uri_of_string "cic:/Coq/Init/Logic/eq.ind",0,[]) ;
-          (mk_expr3 interp) ;
-          (mk_expr1 interp) ;
-          (mk_expr2 interp)
-         ]
-   }
- | CONURI exp_named_subst
-   { let dom,mk_exp_named_subst = deoptionize_exp_named_subst $2 in
-      dom, function interp -> term_of_con_uri $1 (mk_exp_named_subst interp)
-   }
- | VARURI exp_named_subst
-   { let dom,mk_exp_named_subst = deoptionize_exp_named_subst $2 in
-      dom, function interp -> term_of_var_uri $1 (mk_exp_named_subst interp)
-   }
- | INDTYURI exp_named_subst
-   { let dom,mk_exp_named_subst = deoptionize_exp_named_subst $2 in
-      dom, function interp -> term_of_indty_uri $1 (mk_exp_named_subst interp)
-   }
- | INDCONURI exp_named_subst
-   { let dom,mk_exp_named_subst = deoptionize_exp_named_subst $2 in
-      dom, function interp -> term_of_indcon_uri $1 (mk_exp_named_subst interp)
-   }
- | ID exp_named_subst
-   { try
-      let res =
-       Rel (get_index_in_list (Name $1) !TexCicTextualParser0.binders)
-      in
-       (match $2 with
-           None -> ([], function _ -> res)
-         | Some _ -> raise (ExplicitNamedSubstitutionAppliedToRel)
-       )
-     with
-      Not_found ->
-       let dom1,mk_exp_named_subst = deoptionize_exp_named_subst $2 in
-        let dom = union dom1 [CicTextualParser0.Id $1] in
-         dom,
-          function interp ->
-           match interp (CicTextualParser0.Id $1) with
-             None  -> raise (UnknownIdentifier $1)
-           | Some (CicTextualParser0.Uri uri) ->
-               term_of_uri uri (mk_exp_named_subst interp)
-            | Some CicTextualParser0.Implicit ->
-               (*CSC: not very clean; to maximize code reusage *)
-               snd (mk_implicit ()) ""
-            | Some (CicTextualParser0.Term mk_term) ->
-               (mk_term interp)
-   }
- | CASE LPAREN expr COLON INDTYURI SEMICOLON expr RPAREN LCURLY branches RCURLY
-    { let dom1,mk_expr1 = $3 in
-      let dom2,mk_expr2 = $7 in
-      let dom3,mk_expr3 = $10 in
-       let dom = union dom1 (union dom2 dom3) in
-        dom,
-        function interp ->
-         MutCase
-          (fst $5,snd $5,(mk_expr2 interp),(mk_expr1 interp),(mk_expr3 interp))
-    }
- | CASE LPAREN expr COLON ID SEMICOLON expr RPAREN LCURLY branches RCURLY
-    { let dom1,mk_expr1 = $3 in
-      let dom2,mk_expr2 = $7 in
-      let dom3,mk_expr3 = $10 in
-       let dom =
-        union [CicTextualParser0.Id $5] (union dom1 (union dom2 dom3))
-       in
-        dom,
-        function interp ->
-         let uri,typeno = indty_uri_of_id $5 interp in
-          MutCase
-           (uri,typeno,(mk_expr2 interp),(mk_expr1 interp),
-             (mk_expr3 interp))
-    }
- | fixheader LCURLY exprseplist RCURLY
-    { let dom1,foo,ids_and_indexes,mk_types = $1 in
-      let dom2,mk_exprseplist = $3 in
-       let dom = union dom1 dom2 in
-        for i = 1 to List.length ids_and_indexes do
-         TexCicTextualParser0.binders := List.tl !TexCicTextualParser0.binders
-        done ;
-        dom,
-         function interp ->
-          let types = mk_types interp in
-          let fixfunsbodies = (mk_exprseplist interp) in
-           let idx =
-            let rec find idx =
-             function
-                [] -> raise Not_found
-              | (name,_)::_  when name = foo -> idx
-              | _::tl -> find (idx+1) tl
-            in
-             find 0 ids_and_indexes
-           in
-            let fixfuns =
-             List.map2 (fun ((name,recindex),ty) bo -> (name,recindex,ty,bo))
-              (List.combine ids_and_indexes types) fixfunsbodies
-            in
-             Fix (idx,fixfuns)
-    }
- | cofixheader LCURLY exprseplist RCURLY
-    { let dom1,foo,ids,mk_types = $1 in
-      let dom2,mk_exprseplist = $3 in
-       let dom = union dom1 dom2 in
-        dom,
-         function interp ->
-          let types = mk_types interp in
-          let fixfunsbodies = (mk_exprseplist interp) in
-           let idx =
-            let rec find idx =
-             function
-                [] -> raise Not_found
-              | name::_  when name = foo -> idx
-              | _::tl -> find (idx+1) tl
-            in
-             find 0 ids
-           in
-            let fixfuns =
-             List.map2 (fun (name,ty) bo -> (name,ty,bo))
-              (List.combine ids types) fixfunsbodies
-            in
-             for i = 1 to List.length fixfuns do
-              TexCicTextualParser0.binders :=
-               List.tl !TexCicTextualParser0.binders
-             done ;
-             CoFix (idx,fixfuns)
-    }
- | IMPLICIT
-    { mk_implicit () }
- | SET  { [], function _ -> Sort Set }
- | PROP { [], function _ -> Sort Prop }
- | TYPE { [], function _ -> Sort Type }
- | LPAREN expr CAST expr RPAREN
-    { let dom1,mk_expr1 = $2 in
-      let dom2,mk_expr2 = $4 in
-       let dom = union dom1 dom2 in
-        dom, function interp -> Cast ((mk_expr1 interp),(mk_expr2 interp))
-    }
- | META LBRACKET substitutionlist RBRACKET
-    { let dom,mk_substitutionlist = $3 in
-       dom, function interp -> Meta ($1, mk_substitutionlist interp)
-    } 
- | LPAREN expr exprlist RPAREN
-    { let length,dom2,mk_exprlist = $3 in
-       match length with
-          0 -> $2
-        | _ ->
-          let dom1,mk_expr1 = $2 in
-           let dom = union dom1 dom2 in
-            dom,
-             function interp ->
-              Appl ((mk_expr1 interp)::(mk_exprlist interp))
-    }
-;
-exp_named_subst :
-    { None }
- | LCURLY named_substs RCURLY
-    { Some $2 }
-;
-named_substs :
-   VARURI LETIN expr2
-    { let dom,mk_expr = $3 in
-       dom, function interp -> [$1, mk_expr interp] }
- | ID LETIN expr2
-    { let dom1,mk_expr = $3 in
-       let dom = union [CicTextualParser0.Id $1] dom1 in
-        dom, function interp -> [var_uri_of_id $1 interp, mk_expr interp] }
- | VARURI LETIN expr2 SEMICOLON named_substs
-    { let dom1,mk_expr = $3 in
-      let dom2,mk_named_substs = $5 in
-       let dom = union dom1 dom2 in
-        dom, function interp -> ($1, mk_expr interp)::(mk_named_substs interp)
-    }
- | ID LETIN expr2 SEMICOLON named_substs
-    { let dom1,mk_expr = $3 in
-      let dom2,mk_named_substs = $5 in
-       let dom = union [CicTextualParser0.Id $1] (union dom1 dom2) in
-        dom,
-         function interp ->
-          (var_uri_of_id $1 interp, mk_expr interp)::(mk_named_substs interp)
-    }
-;
-expr :
-   pihead expr
-    { TexCicTextualParser0.binders := List.tl !TexCicTextualParser0.binders ;
-      let dom1,mk_expr1 = snd $1 in
-      let dom2,mk_expr2 = $2 in
-       let dom = union dom1 dom2 in
-        dom, function interp -> Prod (fst $1, mk_expr1 interp, mk_expr2 interp)
-    }
- | lambdahead expr
-    { TexCicTextualParser0.binders := List.tl !TexCicTextualParser0.binders ;
-      let dom1,mk_expr1 = snd $1 in
-      let dom2,mk_expr2 = $2 in
-       let dom = union dom1 dom2 in
-        dom,function interp -> Lambda (fst $1, mk_expr1 interp, mk_expr2 interp)
-    }
- | letinhead expr
-    { TexCicTextualParser0.binders := List.tl !TexCicTextualParser0.binders ;
-      let dom1,mk_expr1 = snd $1 in
-      let dom2,mk_expr2 = $2 in
-       let dom = union dom1 dom2 in
-        dom, function interp -> LetIn (fst $1, mk_expr1 interp, mk_expr2 interp)
-    }
- | expr2
-    { $1 }
-;
-fixheader:
-   FIX ID LCURLY fixfunsdecl RCURLY
-    { let dom,ids_and_indexes,mk_types = $4 in
-       let bs =
-        List.rev_map (function (name,_) -> Some (Name name)) ids_and_indexes
-       in
-        TexCicTextualParser0.binders := bs@(!TexCicTextualParser0.binders) ;
-        dom, $2, ids_and_indexes, mk_types
-    }
-;
-fixfunsdecl:
-   ID LPAREN NUM RPAREN COLON expr
-    { let dom,mk_expr = $6 in
-       dom, [$1,$3], function interp -> [mk_expr interp]
-    }
- | ID LPAREN NUM RPAREN COLON expr SEMICOLON fixfunsdecl
-    { let dom1,mk_expr = $6 in
-      let dom2,ids_and_indexes,mk_types = $8 in
-       let dom = union dom1 dom2 in
-        dom, ($1,$3)::ids_and_indexes,
-         function interp -> (mk_expr interp)::(mk_types interp)
-    }
-;
-cofixheader:
-   COFIX ID LCURLY cofixfunsdecl RCURLY
-    { let dom,ids,mk_types = $4 in
-       let bs =
-        List.rev_map (function name -> Some (Name name)) ids
-       in
-        TexCicTextualParser0.binders := bs@(!TexCicTextualParser0.binders) ;
-        dom, $2, ids, mk_types
-    }
-;
-cofixfunsdecl:
-   ID COLON expr
-    { let dom,mk_expr = $3 in
-       dom, [$1], function interp -> [mk_expr interp]
-    }
- | ID COLON expr SEMICOLON cofixfunsdecl
-    { let dom1,mk_expr = $3 in
-      let dom2,ids,mk_types = $5 in
-       let dom = union dom1 dom2 in
-        dom, $1::ids,
-         function interp -> (mk_expr interp)::(mk_types interp)
-    }
-;
-pihead:
-   PROD ID COLON expr DOT
-    { TexCicTextualParser0.binders :=
-       (Some (Name $2))::!TexCicTextualParser0.binders;
-      let dom,mk_expr = $4 in
-       Cic.Name $2, (dom, function interp -> mk_expr interp)
-    }
- | expr2 ARROW
-   { TexCicTextualParser0.binders :=
-      (Some Anonymous)::!TexCicTextualParser0.binders ;
-     let dom,mk_expr = $1 in
-      Anonymous, (dom, function interp -> mk_expr interp)
-   }
- | PROD ID DOT
-    { TexCicTextualParser0.binders :=
-       (Some (Name $2))::!TexCicTextualParser0.binders;
-      let newmeta = new_meta () in
-       let new_canonical_context = [] in
-        let irl =
-         identity_relocation_list_for_metavariable new_canonical_context
-        in
-         TexCicTextualParser0.metasenv :=
-          [newmeta, new_canonical_context, Sort Type ;
-           newmeta+1, new_canonical_context, Meta (newmeta,irl)
-          ] @ !TexCicTextualParser0.metasenv ;
-         Cic.Name $2, ([], function _ -> Meta (newmeta+1,irl))
-    }
-;
-lambdahead:
-   LAMBDA ID COLON expr DOT
-    { TexCicTextualParser0.binders :=
-       (Some (Name $2))::!TexCicTextualParser0.binders;
-      let dom,mk_expr = $4 in
-       Cic.Name $2, (dom, function interp -> mk_expr interp)
-    }
- | LAMBDA ID DOT
-    { TexCicTextualParser0.binders :=
-       (Some (Name $2))::!TexCicTextualParser0.binders;
-      let newmeta = new_meta () in
-       let new_canonical_context = [] in
-        let irl =
-         identity_relocation_list_for_metavariable new_canonical_context
-        in
-         TexCicTextualParser0.metasenv :=
-          [newmeta, new_canonical_context, Sort Type ;
-           newmeta+1, new_canonical_context, Meta (newmeta,irl)
-          ] @ !TexCicTextualParser0.metasenv ;
-         Cic.Name $2, ([], function _ -> Meta (newmeta+1,irl))
-    }
-;
-letinhead:
-  LAMBDA ID LETIN expr DOT
-   { TexCicTextualParser0.binders :=
-      (Some (Name $2))::!TexCicTextualParser0.binders ;
-     let dom,mk_expr = $4 in
-      Cic.Name $2, (dom, function interp -> mk_expr interp)
-   }
-;
-branches:
-    { [], function _ -> [] }
- | expr SEMICOLON branches
-    { let dom1,mk_expr = $1 in
-      let dom2,mk_branches = $3 in
-       let dom = union dom1 dom2 in
-        dom, function interp -> (mk_expr interp)::(mk_branches interp)
-    }
- | expr
-    { let dom,mk_expr = $1 in
-       dom, function interp -> [mk_expr interp]
-    }
-;
-exprlist:
-    
-    { 0, [], function _ -> [] }
- | expr exprlist
-    { let dom1,mk_expr = $1 in
-      let length,dom2,mk_exprlist = $2 in
-       let dom = union dom1 dom2 in
-        length+1, dom, function interp -> (mk_expr interp)::(mk_exprlist interp)
-    }
-;
-exprseplist:
-   expr
-    { let dom,mk_expr = $1 in
-       dom, function interp -> [mk_expr interp]
-    }
- | expr SEMICOLON exprseplist
-    { let dom1,mk_expr = $1 in
-      let dom2,mk_exprseplist = $3 in
-       let dom = union dom1 dom2 in
-        dom, function interp -> (mk_expr interp)::(mk_exprseplist interp)
-    }
-;
-substitutionlist:
-    { [], function _ -> [] }
- | expr SEMICOLON substitutionlist
-    { let dom1,mk_expr = $1 in
-      let dom2,mk_substitutionlist = $3 in
-       let dom = union dom1 dom2 in
-        dom,
-         function interp ->(Some (mk_expr interp))::(mk_substitutionlist interp)
-    }
- | NONE SEMICOLON substitutionlist
-    { let dom,mk_exprsubstitutionlist = $3 in
-       dom, function interp -> None::(mk_exprsubstitutionlist interp)
-    }
diff --git a/helm/ocaml/tex_cic_textual_parser/texCicTextualParser0.ml b/helm/ocaml/tex_cic_textual_parser/texCicTextualParser0.ml
deleted file mode 100644 (file)
index 133f2e0..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let binders = ref ([] : (Cic.name option) list);;
-let metasenv = ref ([] : Cic.metasenv);;
diff --git a/helm/ocaml/tex_cic_textual_parser/texCicTextualParserContext.ml b/helm/ocaml/tex_cic_textual_parser/texCicTextualParserContext.ml
deleted file mode 100644 (file)
index 28581bc..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-let main ~context ~metasenv lexer lexbuf =
- (* Warning: higly non-reentrant code!!! *)
- TexCicTextualParser0.binders := context ;
- TexCicTextualParser0.metasenv := metasenv ;
- let dom,mk_term = TexCicTextualParser.main lexer lexbuf in
-  dom,
-   function interp ->
-    let term = mk_term interp in 
-    let metasenv = !TexCicTextualParser0.metasenv in
-     metasenv,term
-;;
diff --git a/helm/ocaml/tex_cic_textual_parser/texCicTextualParserContext.mli b/helm/ocaml/tex_cic_textual_parser/texCicTextualParserContext.mli
deleted file mode 100644 (file)
index 492b52d..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-val main :
-  context:((Cic.name option) list) ->
-  metasenv:Cic.metasenv ->
-  (Lexing.lexbuf  -> TexCicTextualParser.token) -> Lexing.lexbuf ->
-   CicTextualParser0.interpretation_domain_item list *
-    (CicTextualParser0.interpretation -> (Cic.metasenv * Cic.term))
diff --git a/helm/ocaml/urimanager/.cvsignore b/helm/ocaml/urimanager/.cvsignore
deleted file mode 100644 (file)
index 6b3eba3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa
diff --git a/helm/ocaml/urimanager/.depend b/helm/ocaml/urimanager/.depend
deleted file mode 100644 (file)
index 4821484..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-uriManager.cmo: uriManager.cmi 
-uriManager.cmx: uriManager.cmi 
diff --git a/helm/ocaml/urimanager/Makefile b/helm/ocaml/urimanager/Makefile
deleted file mode 100644 (file)
index 8d5691a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-PACKAGE = urimanager
-REQUIRES = str
-PREDICATES =
-
-INTERFACE_FILES = uriManager.mli
-IMPLEMENTATION_FILES = $(INTERFACE_FILES:%.mli=%.ml)
-EXTRA_OBJECTS_TO_INSTALL =
-EXTRA_OBJECTS_TO_CLEAN =
-
-include ../Makefile.common
diff --git a/helm/ocaml/urimanager/uriManager.ml b/helm/ocaml/urimanager/uriManager.ml
deleted file mode 100644 (file)
index 6dad8dd..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(* "cic:/a/b/c.con" => [| "cic:/a" ; "cic:/a/b" ; "cic:/a/b/c.con" ; "c" |] *)
-type uri = string array;;
-
-let eq uri1 uri2 =
- uri1 == uri2
-;;
-
-let string_of_uri uri = uri.(Array.length uri - 2);;
-let name_of_uri uri = uri.(Array.length uri - 1);;
-let buri_of_uri uri = uri.(Array.length uri - 3);;
-let depth_of_uri uri = Array.length uri - 2;;
-
-module OrderedStrings =
- struct
-  type t = string
-  let compare (s1 : t) (s2 : t) = compare s1 s2
- end
-;;
-
-module SetOfStrings = Map.Make(OrderedStrings);;
-
-(*CSC: commento obsoleto ed errato *)
-(* Invariant: the map is the identity function,      *)
-(*  i.e. (SetOfStrings.find str !set_of_uri) == str  *)
-let set_of_uri = ref SetOfStrings.empty;;
-let set_of_prefixes = ref SetOfStrings.empty;;
-
-(* similar to uri_of_string, but used for prefixes of uris *)
-let normalize prefix =
- try
-  SetOfStrings.find prefix !set_of_prefixes
- with
-  Not_found ->
-   set_of_prefixes := SetOfStrings.add prefix prefix !set_of_prefixes ;
-   prefix
-;;
-
-exception IllFormedUri of string;;
-
-let mk_prefixes str =
- let rec aux curi =
-  function
-     [he] ->
-      let prefix_uri = curi ^ "/" ^ he
-      and name = List.hd (Str.split (Str.regexp "\.") he) in
-       [ normalize prefix_uri ; name ]
-   | he::tl ->
-      let prefix_uri = curi ^ "/" ^ he in
-       (normalize prefix_uri)::(aux prefix_uri tl)
-   | _ -> raise (IllFormedUri str)
- in
-  let tokens = (Str.split (Str.regexp "/") str) in
-   (* ty = "cic:" *)
-   let (ty, sp) =
-    (try (List.hd tokens, List.tl tokens)
-     with Failure "hd" | Failure "tl" ->
-      raise (IllFormedUri str))
-    in
-    aux ty sp
-;;
-
-let uri_of_string str =
- try
-  SetOfStrings.find str !set_of_uri
- with
-  Not_found ->
-   let uri = Array.of_list (mk_prefixes str) in
-    set_of_uri := SetOfStrings.add str uri !set_of_uri ;
-    uri
-;;
-
-let cicuri_of_uri uri =
- let completeuri = string_of_uri uri in
-  let newcompleteuri = 
-   (Str.replace_first (Str.regexp "\.types$") ""
-    (Str.replace_first (Str.regexp "\.ann$") "" completeuri))
-  in
-   if completeuri = newcompleteuri then
-    uri
-   else
-    let newuri = Array.copy uri in
-     newuri.(Array.length uri - 2) <- newcompleteuri ;
-     newuri
-;;
-
-let annuri_of_uri uri =
- let completeuri = string_of_uri uri in
-  if Str.string_match (Str.regexp ".*\.ann$") completeuri 0 then
-   uri
-  else
-   let newuri = Array.copy uri in
-    newuri.(Array.length uri - 2) <- completeuri ^ ".ann" ;
-    newuri
-;;
-
-let uri_is_annuri uri =
- Str.string_match (Str.regexp ".*\.ann$") (string_of_uri uri) 0
-;;
-
-let bodyuri_of_uri uri =
- let struri = string_of_uri uri in
-  if Str.string_match (Str.regexp ".*\.con$") (string_of_uri uri) 0 then
-   let newuri = Array.copy uri in
-    newuri.(Array.length uri - 2) <- struri ^ ".body" ;
-    Some newuri
-  else
-   None
-;;
-
-let innertypesuri_of_uri uri =
- let cicuri = cicuri_of_uri uri in
-  let newuri = Array.copy cicuri in
-   newuri.(Array.length cicuri - 2) <- (string_of_uri cicuri) ^ ".types" ;
-   newuri
-;;
diff --git a/helm/ocaml/urimanager/uriManager.mli b/helm/ocaml/urimanager/uriManager.mli
deleted file mode 100644 (file)
index 0f4f15e..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-exception IllFormedUri of string;;
-
-type uri
-
-val eq : uri -> uri -> bool
-
-val uri_of_string : string -> uri
-
-val string_of_uri : uri -> string  (* complete uri *)
-val name_of_uri   : uri -> string  (* name only (without extension)*)
-val buri_of_uri   : uri -> string  (* base uri only *)
-val depth_of_uri  : uri -> int     (* length of the path *)
-
-(* given an uri, returns the uri of the corresponding cic file, *)
-(* i.e. removes the [.types][.ann] suffix                       *)
-val cicuri_of_uri : uri -> uri
-
-(* given an uri, returns the uri of the corresponding annotation file, *)
-(* i.e. adds the .ann suffix if not already present                    *)
-val annuri_of_uri : uri -> uri
-
-(* given an uri, tells if it refers to an annotation *)
-val uri_is_annuri : uri -> bool
-
-(* given an uri of a constant, it gives back the uri of its body             *)
-(* it gives back None if the uri refers to a Variable or MutualInductiveType *)
-val bodyuri_of_uri : uri -> uri option
-
-(* given an uri, it gives back the uri of its inner types             *)
-val innertypesuri_of_uri : uri -> uri
diff --git a/helm/ocaml/xml/.cvsignore b/helm/ocaml/xml/.cvsignore
deleted file mode 100644 (file)
index 6b3eba3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iaox] *.cmxa
diff --git a/helm/ocaml/xml/.depend b/helm/ocaml/xml/.depend
deleted file mode 100644 (file)
index bc6941b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-xml.cmo: xml.cmi 
-xml.cmx: xml.cmi 
diff --git a/helm/ocaml/xml/Makefile b/helm/ocaml/xml/Makefile
deleted file mode 100644 (file)
index f6c43d2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-PACKAGE = xml
-REQUIRES =
-PREDICATES =
-
-INTERFACE_FILES = xml.mli
-IMPLEMENTATION_FILES = $(INTERFACE_FILES:%.mli=%.ml)
-EXTRA_OBJECTS_TO_INSTALL =
-EXTRA_OBJECTS_TO_CLEAN =
-
-include ../Makefile.common
diff --git a/helm/ocaml/xml/xml.ml b/helm/ocaml/xml/xml.ml
deleted file mode 100644 (file)
index 6670e1f..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                     A tactic to print Coq objects in XML                   *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 18/10/2000                                 *)
-(*                                                                            *)
-(* This module defines a pretty-printer and the stream of commands to the pp  *)
-(*                                                                            *)
-(******************************************************************************)
-
-
-(* the type token for XML cdata, empty elements and not-empty elements *)
-(* Usage:                                                                *)
-(*  Str cdata                                                            *)
-(*  Empty (element_name, [attrname1, value1 ; ... ; attrnamen, valuen]   *)
-(*  NEmpty (element_name, [attrname1, value2 ; ... ; attrnamen, valuen], *)
-(*          content                                                      *)
-type token = Str of string
-           | Empty of string * (string * string) list
-          | NEmpty of string * (string * string) list * token Stream.t
-;;
-
-(* currified versions of the constructors make the code more readable *)
-let xml_empty name attrs = [< 'Empty(name,attrs) >]
-let xml_nempty name attrs content = [< 'NEmpty(name,attrs,content) >]
-let xml_cdata str = [< 'Str str >]
-
-(** low level for other PPs: pretty print each token of strm applying 'f' to a
-canonical string representation of each token *)
-let pp_gen f strm =
- let rec pp_r m =
-  parser
-  | [< 'Str a ; s >] ->
-      print_spaces m ;
-      f (a ^ "\n") ;
-      pp_r m s
-  | [< 'Empty(n,l) ; s >] ->
-      print_spaces m ;
-      f ("<" ^ n) ;
-      List.iter (fun (n,v) -> f (" " ^ n ^ "=\"" ^ v ^ "\"")) l;
-      f "/>\n" ;
-      pp_r m s
-  | [< 'NEmpty(n,l,c) ; s >] ->
-      print_spaces m ;
-      f ("<" ^ n) ;
-      List.iter (fun (n,v) -> f (" " ^ n ^ "=\"" ^ v ^ "\"")) l;
-      f ">\n" ;
-      pp_r (m+1) c ;
-      print_spaces m ;
-      f ("</" ^ n ^ ">\n") ;
-      pp_r m s
-  | [< >] -> ()
- and print_spaces m =
-  for i = 1 to m do f "  " done
- in
- pp_r 0 strm
-;;
-
-(** pretty printer on output channels *)
-let pp_to_outchan strm oc =
-  pp_gen (fun s -> output_string oc s) strm;
-  flush oc
-;;
-
-(** pretty printer to string *)
-let pp_to_string strm =
-  let buf = Buffer.create 10240 in
-  pp_gen (Buffer.add_string buf) strm;
-  Buffer.contents buf
-;;
-
-(** pretty printer to file *)
-(* Usage:                                                                   *)
-(*  pp tokens None     pretty prints the output on stdout                   *)
-(*  pp tokens (Some filename) pretty prints the output on the file filename *)
-let pp ?(quiet=false) strm fn =
-  match fn with
-  | Some filename ->
-      let outchan = open_out filename in
-      (try
-        pp_to_outchan strm outchan;
-      with e ->
-        close_out outchan;
-        raise e);
-      close_out outchan;
-      if not quiet then
-        begin
-          print_string ("\nWriting on file \"" ^ filename ^
-            "\" was succesfull\n");
-          flush stdout
-        end
-  | None -> pp_to_outchan strm stdout
-;;
diff --git a/helm/ocaml/xml/xml.mli b/helm/ocaml/xml/xml.mli
deleted file mode 100644 (file)
index c52ae8e..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-(* Copyright (C) 2000, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(*                                                                            *)
-(*                               PROJECT HELM                                 *)
-(*                                                                            *)
-(*                     A tactic to print Coq objects in XML                   *)
-(*                                                                            *)
-(*                Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>               *)
-(*                                 18/10/2000                                 *)
-(*                                                                            *)
-(* This module defines a pretty-printer and the stream of commands to the pp  *)
-(*                                                                            *)
-(******************************************************************************)
-
-(* Tokens for XML cdata, empty elements and not-empty elements           *)
-(* Usage:                                                                *)
-(*  Str cdata                                                            *)
-(*  Empty (element_name, [attrname1, value1 ; ... ; attrnamen, valuen]   *)
-(*  NEmpty (element_name, [attrname1, value2 ; ... ; attrnamen, valuen], *)
-(*          content                                                      *)
-type token =
-  | Str of string
-  | Empty of string * (string * string) list
-  | NEmpty of string * (string * string) list * token Stream.t
-
-(* currified versions of the token constructors make the code more readable *)
-val xml_empty : string -> (string * string) list -> token Stream.t
-val xml_nempty :
-  string -> (string * string) list -> token Stream.t -> token Stream.t
-val xml_cdata : string -> token Stream.t
-
-(* The pretty printer for streams of token                                  *)
-(* Usage:                                                                   *)
-(*  pp tokens None     pretty prints the output on stdout                   *)
-(*  pp tokens (Some filename) pretty prints the output on the file filename *)
-val pp : ?quiet:bool -> token Stream.t -> string option -> unit
-val pp_to_outchan : token Stream.t -> out_channel -> unit
-val pp_to_string : token Stream.t -> string
-
diff --git a/helm/on-line/html/cic/control.html b/helm/on-line/html/cic/control.html
deleted file mode 100644 (file)
index c6afa70..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<html>
-
-<head>
-<title>???</title>
-
-<style type="text/css">
-#normal { background-color: #e6e6fa; font-family: sans-serif }
-td.head { font-weight: bold; background-color: #e6e6fa; color: brown }
-td.back { background-color: #e6e6fa; color: brown }
-#indent { margin-left: 1cm; margin-right: 1cm }
-#centered { text-align: center }
-</style>
-
-<script language="JavaScript" src="../../javascript/defaults.js"></script>
-<script language="JavaScript" src="../../javascript/utils.js"></script>
-<script language="JavaScript" src="../../javascript/control.js"></script>
-
-</head>
-
-<body id="normal">
- <h1>Object: 
-  &quot;<script>document.write(extractParam(unescape(getParam('url')),'param.CICURI'))</script>&quot;
- &nbsp;&nbsp;&nbsp;<font size="+1">[Annotations are
- <script>if ((extractParam(unescape(getParam('url')),'param.annotations')) == 'no') document.write('off'); else document.write('on')</script>
- ]</font>
- </h1>
- <table>
-  <tr>
-   <td>
-    <script>
-     var url = unescape(getParam('url'));
-     document.write('<a href="' + url + '" target="_blank">Object URL</a>');
-     </script>
-   </td>
-   <td>
-    Follow the link to view the displayed object alone (without this control frame)
-   </td>
-  </tr>
-  <tr>
-   <td>
-    <script>
-     var url = unescape(getParam('url'));
-     url = setParam(url,"keys",getCICMathMLKeys());
-     url = setParam(url,"prop.doctype-public","");
-     url = setParam(url,"prop.encoding","");
-     url = setParam(url,"prop.media-type","application/x-helm-annotation-helper");
-     url = url + "&param.explodeall=true";
-     document.write(
-      '<a target="result" href="' + url + '">Annotate it</a>'
-     )
-    </script>
-   </td>
-   <td>
-    (Before following the link, you must install the HELM Annotation Helper)
-   </td>
-  </tr>
-  <tr>
-   <td>
-    <script>
-     var url = unescape(getParam('url'));
-     var getterURL = extractParam(url,'param.getterURL');
-     var CICURI = dropBodySuffix(extractParam(url,'param.CICURI'));
-     url = setParam(url,"keys","MC%2CRT");
-     url = setParam(url,"xmluri", getterURL + "getxml%3Furi%3D" + CICURI);
-     url = setParam(url,"prop.media-type","text/html");
-     url = setParam(url,"prop.encoding","iso-8859-1");
-     url = setParam(url,"param.CICURI",CICURI);
-     document.write(
-      '<a target="metadata" href="' + url + '">View its metadata and dependencies</a>'
-     );
-    </script>
-   </td>
-   <td>DC Metadata and dependency metadata; Dependency graphs
-   </td>
-  </tr>
-  <tr>
-   <td>
-    <script>
-     var url = unescape(getParam('url'));
-     var proofcheckerURL = unescape(extractParam(url,'param.proofcheckerURL'));
-     var CICURI = dropBodySuffix(extractParam(url,'param.CICURI'));
-     url = proofcheckerURL + "proofCheck?uri=" + CICURI;
-     document.write(
-      '<a target="proofChecker" href="' + url + '">Proof-check it</a>'
-     );
-    </script>
-   </td>
-   <td>Proof-checking is recursively performed over the untrusted parts of the
-       library
-   </td>
-  </tr>
- </table>
-</body>
-</html>
diff --git a/helm/on-line/html/cic/index.html b/helm/on-line/html/cic/index.html
deleted file mode 100644 (file)
index c2a2ef5..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-"http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head>
- <script language="JavaScript" src="../../javascript/defaults.js"></script>
- <script language="JavaScript" src="../../javascript/utils.js"></script>
- <title>???</script></title>
-</head>
-<script>
-  document.write('<frameset onLoad="window.focus()" rows="18%,*" border="0" scrolling="no">');
-  document.write('<frame src="control.html?url=' + getParam('url') +'"/>');
-  document.write('<frame src="' + unescape(getParam('url')) + '" + name="result"/>');
-  document.write('</frameset>');
-</script>
-
-</html>
diff --git a/helm/on-line/html/control.html b/helm/on-line/html/control.html
deleted file mode 100644 (file)
index 183347a..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-<html>
-
-<head>
-<title>On-Line Library Configuration</title>
-
-<style type="text/css">
-#normal { background-color: white; font-family: sans-serif }
-td.head { font-weight: bold; background-color: #e6e6fa; color: brown }
-td.back { background-color: #e6e6fa; color: brown }
-#indent { margin-left: 1cm; margin-right: 1cm }
-#centered { text-align: center }
-</style>
-
-<script language="JavaScript" src="../javascript/defaults.js"></script>
-<script language="JavaScript" src="../javascript/prelude.js"></script>
-
-</head>
-
-<body id="normal" onLoad="refreshLinks()">
-<a name="top"/>
-<table border="0" width="100%" cellpadding="4">
-<tr><td class="head" align="center"><big><big>On-Line Library Configuration</big></big></td></tr>
-</table>
-
-<br />
-
-<div id="indent">
-The on-line interface will use a
-<a href="http://www.cs.unibo.it/helm/getter" target="_top">Getter</a> to locate and
-download documents and an
-<a href="http://www.cs.unibo.it/helm/uwobo" target="_top">UWOBO</a> to apply transformations
-to them.
-
-
-<br /><br />
-
-Here you can choose the Getter and the UWOBO to use, providing valid URLs
-to instances of them.
-
-<br /><br />
-
-To control the behaviour of them, use the apposite
-<a onClick="refreshLinks();" href="http://www.cs.unibo.it/helm/getter/panel/index.html" target="_top">Getter panel</a>
-and
-<a onClick="refreshLinks();" href="http://www.cs.unibo.it/helm/uwobo/panel/index.html" target="_top">UWOBO panel</a>.
-
-<br /><br />
-
-<table border="0">
-  <tr>
-    <th colspan="2" align="left">UWOBO URL</th>
-  </tr>
-  <tr>
-    <td>
-      <form name="uwoboURL">
-      <script>
-        document.write('<input type="text" value="' + getInitialProcessorURL() + '" size="50"/>');
-      </script>
-      </form>
-    </td>
-    <td>
-      <form>
-        <select onChange="selectUwoboURL(this)">
-         <option value="">---</option>
-         <option value="localhost">localhost</option>
-         <option value="mowgli.cs.unibo.it">mowgli</option>
-         <option value="marcello.cs.unibo.it">marcello</option>
-         <option value="phd.cs.unibo.it">phd</option>
-         <option value="eolo.cs.unibo.it">eolo</option>
-       </select>
-      </form>
-    </td>
-    <td>
-      <form>
-        <input type="button" value="Check" onClick="top.result.location = getUwoboURL() + 'help'"/>
-      </form>
-    </td>
-  </tr>
-</table>
-
-<br />
-
-<table border="0">
-  <tr>
-    <th colspan="2" align="left">Getter URL</th>
-  </tr>
-  <tr>
-    <td>
-      <form name="getterURL">
-        <script>
-         document.write('<input type="text" value="' + getInitialGetterURL() + '" size="50"/>');
-       </script>
-      </form>
-    </td>
-    <td>
-      <form>
-        <select onChange="selectGetterURL(this)">
-         <option value="">---</option>
-         <option value="localhost">localhost</option>
-         <option value="mowgli.cs.unibo.it">mowgli</option>
-         <option value="marcello.cs.unibo.it">marcello</option>
-         <option value="phd.cs.unibo.it">phd</option>
-         <option value="eolo.cs.unibo.it">eolo</option>
-       </select>
-      </form>
-    </td>
-    <td>
-      <form>
-        <input type="button" value="Check" onClick="top.result.location = getGetterURL() + 'help'"/>
-      </form>
-    </td>
-  </tr>
-</table>
-
-<br />
-
-<table border="0">
-  <tr>
-    <th colspan="2" align="left">URI-Set URL</th>
-  </tr>
-  <tr>
-    <td>
-      <form name="uri_set_queueURL">
-        <script>
-         document.write('<input type="text" value="' + getInitialURISetQueueURL() + '" size="50"/>');
-       </script>
-      </form>
-    </td>
-    <td>
-      <form>
-        <select onChange="selectURISetQueueURL(this)">
-         <option value="">---</option>
-         <option value="localhost">localhost</option>
-         <option value="mowgli.cs.unibo.it">mowgli</option>
-         <option value="marcello.cs.unibo.it">marcello</option>
-         <option value="phd.cs.unibo.it">phd</option>
-         <option value="eolo.cs.unibo.it">eolo</option>
-       </select>
-      </form>
-    </td>
-    <td>
-      <form>
-        <input type="button" value="Check" onClick="top.result.location = getURISetQueueURL() + 'help'"/>
-      </form>
-    </td>
-  </tr>
-</table>
-
-<br />
-
-<table border="0">
-  <tr>
-    <th colspan="2" align="left">Graph Drawer URL</th>
-  </tr>
-  <tr>
-    <td>
-      <form name="draw_graphURL">
-        <script>
-         document.write('<input type="text" value="' + getInitialDrawGraphURL() + '" size="50"/>');
-       </script>
-      </form>
-    </td>
-    <td>
-      <form>
-        <select onChange="selectDrawGraphURL(this)">
-         <option value="">---</option>
-         <option value="localhost">localhost</option>
-         <option value="mowgli.cs.unibo.it">mowgli</option>
-         <option value="marcello.cs.unibo.it">marcello</option>
-         <option value="phd.cs.unibo.it">phd</option>
-         <option value="eolo.cs.unibo.it">eolo</option>
-       </select>
-      </form>
-    </td>
-    <td>
-      <form>
-        <input type="button" value="Check" onClick="top.result.location = getDrawGraphURL() + 'help'"/>
-      </form>
-    </td>
-  </tr>
-</table>
-
-<br />
-
-<table border="0">
-  <tr>
-    <th colspan="2" align="left">Proof-Checker URL</th>
-  </tr>
-  <tr>
-    <td>
-      <form name="proofcheckerURL">
-        <script>
-         document.write('<input type="text" value="' + getInitialProofCheckerURL() + '" size="50"/>');
-       </script>
-      </form>
-    </td>
-    <td>
-      <form>
-        <select onChange="selectProofCheckerURL(this)">
-         <option value="">---</option>
-         <option value="localhost">localhost</option>
-         <option value="mowgli.cs.unibo.it">mowgli</option>
-         <option value="marcello.cs.unibo.it">marcello</option>
-         <option value="phd.cs.unibo.it">phd</option>
-         <option value="eolo.cs.unibo.it">eolo</option>
-       </select>
-      </form>
-    </td>
-    <td>
-      <form>
-        <input type="button" value="Check" onClick="top.result.location = getProofCheckerURL() + 'help'"/>
-      </form>
-    </td>
-  </tr>
-</table>
-
-<br />
-
-<table border="0">
-  <tr>
-    <th colspan="2" align="left">Browser</th>
-  </tr>
-  <tr>
-   <td>
-    Only new browsers support UNICODE, that is needed to render
-    mathematical documents. Some old browsers, though, can render
-    the most common symbols through the &quot;symbol&quot; font.
-   </td>
-  </tr>
-  <tr>
-   <td>
-    To make us understand what kind of browser you have, please
-    select below the symbol for &quot;not belongs to&quot;. If both options
-    do not show that symbol, then you will be only able to use
-    the MathML mode with an external plug-out for MathML presentation.
-   </td>
-  </tr>
-  <tr>
-    <td>
-      <form name="UNICODEvsSYMBOL">
-      <b>Where do you see the &quot;not belongs to&quot; symbol?</b>
-      &nbsp;&nbsp;&nbsp;
-      <script>
-       document.write('<input type="radio" name="radioUNICODEvsSYMBOL" value="symbol" ' + getInitialUNICODEvsSYMBOLsymbol() + ' />');
-      </script>
-      <font face="symbol">&#207;</font>
-      &nbsp;&nbsp;&nbsp;
-      <script>
-       document.write('<input type="radio" name="radioUNICODEvsSYMBOL" value="unicode" ' + getInitialUNICODEvsSYMBOLunicode() + ' />');
-      </script>
-      &#8713;
-    </td>
-  </tr>
-</table>
-</div>
-
-
-<div id="centered">
-<h1><a onClick="refreshLinks();" href="" target="_top"><script>if (top.location.search == '') document.write('ENTER THE LIBRARY'); else document.write('RETURN TO THE LIBRARY');</script></a></h1>
-</div>
-</body>
-</html>
-
diff --git a/helm/on-line/html/index.html b/helm/on-line/html/index.html
deleted file mode 100644 (file)
index caeebcf..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-
-<frameset rows="75%,*">
-  <frame src="control.html" name="control"/>
-  <frame src="welcome.html" name="result"/>
-</frameset>
-
-</html>
diff --git a/helm/on-line/html/library/control.html b/helm/on-line/html/library/control.html
deleted file mode 100644 (file)
index 72c13b6..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
--->
-
-<html xmlns:subst="http://www.cs.unibo.it/helm/subst">
-<head>
-<title>Control panel</title>
-<!-- Note: <subst:script/> are substitued by the stylesheet with <script />  -->
-<!-- after changing @src in the concatenation of the interface URL with @src -->
-<subst:script language="JavaScript" src="/javascript/defaults.js" />
-<subst:script language="JavaScript" src="/javascript/utils.js" />
-<subst:script language="JavaScript" src="/javascript/control.js" />
-</head>
-<body bgcolor="#ffffff" text="#000000">
-<form>
-<table>
-  <tr>
-    <td>
-      <b>Format</b>:
-    </td>
-    <td>
-      <select name="output" onChange="updateOutput(this,document.forms[0].format)">
-      <script>
-       var mode = getParam2('mode');
-       var mode_list = mode.split(',');
-       outputOption(document, "processed", "Processed", mode_list[0]);
-       outputOption(document, "raw", "Raw", mode_list[0]);
-      </script>
-      </select>
-    </td>
-    <td>
-      <select name="format" onChange="updateFormat(this)">
-      <script>
-       var mode = getParam2('mode');
-       var mode_list = mode.split(',');
-       if (mode_list[0] == "raw") {
-         outputOption(document, "cic",   "CIC", mode_list[1]);
-         outputOption(document, "types", "TYPES", mode_list[1]);
-         outputOption(document, "ann",   "ANN", mode_list[1]);
-         outputOption(document, "fwd",   "RDF: Forward pointers", mode_list[1]);
-         outputOption(document, "bwd",   "RDF: Backward pointers", mode_list[1]);
-       } else {
-         outputOption(document, "html", "HTML", mode_list[2]);
-         outputOption(document, "mml_cont", "MathML Content", mode_list[2]);
-         outputOption(document, "mml_pres", "MathML Presentation", mode_list[2]);
-       }
-      </script>
-      </select>
-    </td>
-    <td>
-     <script>
-<![CDATA[
-       document.write('<a target="_top" href="' +
-         getParam2('topurl') + '/html/library/index.html' +
-        '" onClick="refreshReload()">Reload</a>');
-]]>
-     </script>
-     <br />
-     (do it also before attempting to take a link to the current page)
-     <script>
-<![CDATA[
-       top.processorURL = getParam2('processorURL');
-       top.getterURL = getParam2('getterURL');
-       top.proofcheckerURL = getParam2('proofcheckerURL');
-       top.draw_graphURL = getParam2('draw_graphURL');
-       top.uri_set_queueURL = getParam2('uri_set_queueURL');
-       top.UNICODEvsSYMBOL = getParam2('UNICODEvsSYMBOL');
-       top.topurl = getParam2('topurl');
-       top.mode = getParam2('mode');
-       top.cicuri = getParam2('cicuri');
-       top.theoryuri = getParam2('theoryuri');
-]]>
-     </script>
-    </td>
-  </tr>
-  <tr>
-    <td colspan="3">
-      <script>
-<![CDATA[
-       var mode = getParam2('mode');
-       var mode_list = mode.split(',');
-       if (mode_list[0] == "raw") {
-         outputCheckbox(document, "updateCompressed(this)",
-          "&nbsp;Compressed", mode_list[5] == "gz");
-         outputCheckbox(document, "updateDTDPatched(this)",
-          "&nbsp;Resolve DTD URL", mode_list[6] == "yes");
-        } else {
-         outputCheckbox(document, "updateNatural(this)",
-          "&nbsp;Natural Language", mode_list[3] == "yes");
-         outputCheckbox(document, "updateAnnotations(this)",
-          "&nbsp;Annotations", mode_list[4] == "yes");
-        }
-]]>
-      </script>
-    </td>
-    <td>
-     <script>
-<![CDATA[
-       document.write('<a target="_top" href=""' +
-        ' onClick="refreshReload()">Configuration Panel</a>');
-]]>
-     </script>
-     <br />
-    </td>
-  </tr>
-</table>
-</form>
-</body>
-</html>
diff --git a/helm/on-line/html/library/header.html b/helm/on-line/html/library/header.html
deleted file mode 100644 (file)
index a1dcbda..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
--->
-<html xmlns:helm="http://www.cs.unibo.it/helm">
-<head>
-<title>Control panel</title>
-</head>
-<body bgcolor="#ffffff" text="#000000">
-<table width="100%">
-<tr>
- <td width="50%">
-  <font size="+3" face="Helvetica,Arial,sans-serif"><b>Index of <helm:getParam name="uri"/></b></font>
-  <hr noshade="yes" align="left" width="80%"/>
- </td>
-</tr>
-</table>
-</body>
-</html>
diff --git a/helm/on-line/html/library/index.html b/helm/on-line/html/library/index.html
deleted file mode 100644 (file)
index 4f1be5f..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
--->
-
-<html xmlns:subst="http://www.cs.unibo.it/helm/subst">
-<head>
-<!-- Note: <subst:script/> are substitued by the stylesheet with <script />  -->
-<!-- after changing @src in the concatenation of the interface URL with @src -->
-<subst:script language="JavaScript" src="/javascript/defaults.js" />
-<subst:script language="JavaScript" src="/javascript/utils.js" />
-<title>Index</title>
-</head>
-<script>
-  var topurl = "<subst:topurl/>";
-<![CDATA[
-  document.write('<frameset rows="18%,*" border="0" scrolling="no">');
-  var control_frame_URL=
-        topurl + '/html/library/control.html' +
-       '?topurl=' + topurl +
-       '&mode=' + getParam2('mode') +
-       '&cicuri=' + getParam2('cicuri') +
-       '&theoryuri=' + getParam2('theoryuri') +
-       '&processorURL=' + getParam2('processorURL') +
-       '&getterURL=' + getParam2('getterURL') +
-       '&proofcheckerURL=' + getParam2('proofcheckerURL') +
-       '&draw_graphURL=' + getParam2('draw_graphURL') +
-       '&uri_set_queueURL=' + getParam2('uri_set_queueURL') +
-       '&UNICODEvsSYMBOL=' + getParam2('UNICODEvsSYMBOL');
-  var escaped_control_frame_URL = escape(control_frame_URL);
-  document.write('<frame src="' +
-        getParam2('processorURL') + 'apply' +
-       '?keys=RT' +
-        '&param.topurl=' + topurl +
-        '&xmluri=' + escaped_control_frame_URL + '" name="control"/>');
-  document.write('<frameset cols="50%,50%" border="0" scrolling="no">');
-  document.write('<frameset rows="11%,*" border="0" scrolling="no">');
-  document.write('<frame src="' +
-       getParam2('processorURL') + 'apply' +
-       '?keys=GP' +
-       //'&xmluri=' + location.protocol + "//" + location.host + chopSlash(location.pathname) + "/header.html" +
-       '&xmluri=' + topurl + '/html/library/header.html' +
-       '&param.uri=' + getParam2('theoryuri') + 
-       '" name="theoryheader"/>');
-  document.write('<frame src="' +
-       getParam2('processorURL') + 'apply' +
-       '?keys=L2H' +
-       '&xmluri=' + escape(getParam2('getterURL') + 'ls?format=xml&baseuri=' + getParam2('theoryuri')) +
-        '&param.keys=L2H' +
-       '&param.uri=' + getParam2('theoryuri') +
-       '&param.getterURL=' + getParam2('getterURL') +
-       '&param.proofcheckerURL=' + getParam2('proofcheckerURL') +
-       '&param.draw_graphURL=' + getParam2('draw_graphURL') +
-       '&param.uri_set_queueURL='+getParam2('uri_set_queueURL') +
-       '&param.UNICODEvsSYMBOL=' + getParam2('UNICODEvsSYMBOL') +
-        '&param.target=theory' +
-       //'&param.interfaceURL=' + location.protocol + "//" + location.host + chopSlash(chopSlash(chopSlash(location.pathname))) + 
-       '&param.interfaceURL=' + topurl +
-       '" name="theoryresult"/>');
-  document.write('</frameset>');
-  document.write('<frameset rows="11%,*" border="0" scrolling="no">');
-  document.write('<frame src="' +
-       getParam2('processorURL') + 'apply' +
-       '?keys=GP' +
-       //'&xmluri=' + location.protocol + "//" + location.host + chopSlash(location.pathname) + "/header.html" +
-       '&xmluri=' + topurl + '/html/library/header.html' +
-       '&param.uri=' + getParam2('cicuri') + 
-       '" name="cicheader"/>');
-  document.write('<frame src="' +
-       getParam2('processorURL') + 'apply' +
-       '?keys=L2H' +
-       '&xmluri=' + escape(getParam2('getterURL') + 'ls?format=xml&baseuri=' + getParam2('cicuri')) +
-        '&param.keys=L2H' +
-       '&param.uri=' + getParam2('cicuri') +
-       '&param.getterURL=' + getParam2('getterURL') +
-       '&param.proofcheckerURL=' + getParam2('proofcheckerURL') +
-       '&param.draw_graphURL=' + getParam2('draw_graphURL') +
-       '&param.uri_set_queueURL='+getParam2('uri_set_queueURL') +
-       '&param.UNICODEvsSYMBOL=' + getParam2('UNICODEvsSYMBOL') +
-        '&param.target=cic' +
-       //'&param.interfaceURL=' + location.protocol + "//" + location.host + chopSlash(chopSlash(chopSlash(location.pathname))) +
-       '&param.interfaceURL=' + topurl +
-       '" name="cicresult"/>');
-  document.write('</frameset>');
-  document.write('</frameset>');
-  document.write('</frameset>');
-]]>
-</script>
-
-</html>
diff --git a/helm/on-line/html/theory/control.html b/helm/on-line/html/theory/control.html
deleted file mode 100644 (file)
index d399941..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<html>
-
-<head>
-<title>???</title>
-
-<style type="text/css">
-#normal { background-color: #e6e6fa; font-family: sans-serif }
-td.head { font-weight: bold; background-color: #e6e6fa; color: brown }
-td.back { background-color: #e6e6fa; color: brown }
-#indent { margin-left: 1cm; margin-right: 1cm }
-#centered { text-align: center }
-</style>
-
-<script language="JavaScript" src="../../javascript/defaults.js"></script>
-<script language="JavaScript" src="../../javascript/utils.js"></script>
-<script language="JavaScript" src="../../javascript/control.js"></script>
-
-</head>
-
-<body id="normal">
- <h1>Theory: 
-  &quot;<script>document.write(extractParam(unescape(getParam('url')),'param.CICURI'))</script>&quot;
- &nbsp;&nbsp;&nbsp;<font size="+1">[Annotations have no meaning for theories, yet]</font>
- </h1>
- <table>
-  <tr>
-   <td>
-    View its metadata
-   </td>
-   <td>(Not implemented, yet. Coming soon.)</td>
-  </tr>
-  <tr>
-   <td>
-    Proof-check it
-   </td>
-   <td>
-    (Not ported to V7, yet. Coming soon.)
-   </td>
-  </tr>
- </table>
-</body>
-</html>
diff --git a/helm/on-line/html/theory/index.html b/helm/on-line/html/theory/index.html
deleted file mode 100644 (file)
index c2a2ef5..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-"http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head>
- <script language="JavaScript" src="../../javascript/defaults.js"></script>
- <script language="JavaScript" src="../../javascript/utils.js"></script>
- <title>???</script></title>
-</head>
-<script>
-  document.write('<frameset onLoad="window.focus()" rows="18%,*" border="0" scrolling="no">');
-  document.write('<frame src="control.html?url=' + getParam('url') +'"/>');
-  document.write('<frame src="' + unescape(getParam('url')) + '" + name="result"/>');
-  document.write('</frameset>');
-</script>
-
-</html>
diff --git a/helm/on-line/html/welcome.html b/helm/on-line/html/welcome.html
deleted file mode 100644 (file)
index f6fbed4..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
-
-<body bgcolor="white">
-</body>
-
-</html>
diff --git a/helm/on-line/icons/back.gif b/helm/on-line/icons/back.gif
deleted file mode 100644 (file)
index a694ae1..0000000
Binary files a/helm/on-line/icons/back.gif and /dev/null differ
diff --git a/helm/on-line/icons/folder.gif b/helm/on-line/icons/folder.gif
deleted file mode 100644 (file)
index 4826460..0000000
Binary files a/helm/on-line/icons/folder.gif and /dev/null differ
diff --git a/helm/on-line/icons/generic.red.gif b/helm/on-line/icons/generic.red.gif
deleted file mode 100644 (file)
index 9474398..0000000
Binary files a/helm/on-line/icons/generic.red.gif and /dev/null differ
diff --git a/helm/on-line/icons/text.gif b/helm/on-line/icons/text.gif
deleted file mode 100644 (file)
index 4c62390..0000000
Binary files a/helm/on-line/icons/text.gif and /dev/null differ
diff --git a/helm/on-line/javascript/.cvsignore b/helm/on-line/javascript/.cvsignore
deleted file mode 100644 (file)
index e268d4a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.js_xml
diff --git a/helm/on-line/javascript/Makefile b/helm/on-line/javascript/Makefile
deleted file mode 100644 (file)
index 1a6baf6..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-
-TARGETS = control.js_xml defaults.js_xml utils.js_xml graphLinks.js_xml helmjsmenu.js_xml
-
-.SUFFIXES:
-.SUFFIXES: .js .js_xml
-
-.js.js_xml:
-       @echo "<?xml version='1.0'?>" >$@
-       @echo "<script>" >>$@
-       @echo "<![CDATA[" >>$@
-       @cat $< >>$@
-       @echo "]]>" >>$@
-       @echo "</script>" >>$@
-
-all: $(TARGETS)
-
-clean:
-       rm -rf $(TARGETS)
-
diff --git a/helm/on-line/javascript/control.js b/helm/on-line/javascript/control.js
deleted file mode 100644 (file)
index ca62cff..0000000
+++ /dev/null
@@ -1,298 +0,0 @@
-function updateMode(i, s)
-{
-  var mode = top.mode;
-  var mode_list = mode.split(",");
-  var res = "";
-  var j;
-
-  for (j = 0; j < mode_list.length; j++) {
-    if (j == i) res += s;
-    else res += mode_list[j];
-    if (j < mode_list.length - 1) res += ",";
-  }
-  
-  top.mode = res;
-}
-
-function updateOutput(output,format)
-{
-  var theoryuri = top.theoryuri;
-  var cicuri = top.cicuri;
-  var mode = top.mode;
-  var topurl = top.topurl;
-  var processorURL = top.processorURL;
-  var getterURL = top.getterURL;
-  var proofcheckerURL = top.proofcheckerURL;
-  var draw_graphURL = top.draw_graphURL;
-  var uri_set_queueURL = top.uri_set_queueURL;
-  var mode_list = mode.split(",");
-  var new_mode = output.options[output.selectedIndex].value;
-  var dest = "?theoryuri=" + theoryuri + "&cicuri=" + cicuri + "&topurl=" + topurl + "&processorURL=" + processorURL + "&getterURL=" + getterURL + "&proofcheckerURL=" + proofcheckerURL + "&draw_graphURL=" + draw_graphURL + "&uri_set_queueURL=" + uri_set_queueURL + "&mode=";
-  
-  if (new_mode != mode_list[0]) {
-    updateMode(0, new_mode);
-    if (new_mode == "raw") updateMode(2, format.options[format.selectedIndex].value);
-    else updateMode(1, format.options[format.selectedIndex].value);
-
-    var href =
-     top.processorURL + 'apply' +
-     '?keys=RT' +
-     '&param.topurl=' + topurl +
-     '&xmluri=' +
-     escape(top.topurl + '/html/library/control.html' + dest + top.mode);
-    
-    location.href = href;
-  }
-}
-
-function updateFormat(format)
-{
-  var mode = top.mode;
-  var mode_list = mode.split(",");
-
-  if (mode_list[0] == "raw") {
-    updateMode(1, format.options[format.selectedIndex].value);
-  } else {
-    updateMode(2, format.options[format.selectedIndex].value);
-  }
-
-  refreshReload();
-}
-
-function updateNatural(checkbox)
-{
-  if (checkbox.checked) updateMode(3, "yes");
-  else updateMode(3, "no");
-  refreshReload();
-}
-
-function updateAnnotations(checkbox)
-{
-  if (checkbox.checked) updateMode(4, "yes");
-  else updateMode(4, "no");
-  refreshReload();
-}
-
-function updateCompressed(checkbox)
-{
-  if (checkbox.checked) updateMode(5, "gz");
-  else updateMode(5, "normal");
-  refreshReload();
-}
-
-function updateDTDPatched(checkbox)
-{
-  if (checkbox.checked) updateMode(6, "yes");
-  else updateMode(6, "no");
-  refreshReload();
-}
-
-function refreshReload()
-{
-   var search = 
-      "?mode=" + top.mode +
-      "&cicuri=" + top.cicuri +
-      "&theoryuri=" + top.theoryuri +
-      "&processorURL=" + top.processorURL +
-      "&getterURL=" + top.getterURL +
-      "&proofcheckerURL=" + top.proofcheckerURL +
-      "&draw_graphURL=" + top.draw_graphURL +
-      "&uri_set_queueURL=" + top.uri_set_queueURL +
-      "&UNICODEvsSYMBOL=" + top.UNICODEvsSYMBOL;
-
-   var href =
-    top.processorURL + 'apply' +
-    '?keys=RT' +
-    '&param.topurl=' + top.topurl +
-    '&xmluri=' +
-    escape(top.topurl + '/html/library/index.html' + search);
-    
-   top.frames[0].document.links[0].href = href;
-   top.frames[0].document.links[1].href =
-    top.topurl + '/html/index.html' + search;
-
-   return true;
-}
-
-function refreshcicHeader(headerURL)
-{
-   top.cicheader.location.search = "?keys=GP&xmluri=" + headerURL + "&param.uri=" + top.cicuri;
-   return true;
-}
-
-function refreshtheoryHeader(headerURL)
-{
-   top.theoryheader.location.search = "?keys=GP&xmluri=" + headerURL + "&param.uri=" + top.theoryuri;
-   return true;
-}
-
-function getCICMathMLKeys()
-{
-  return escape("d_c,C1,G,C2,L");
-}
-
-function getTheoryKeys()
-{
-  return escape("T1,T2,L,E");
-}
-
-function getEmbedKeys()
-{
-  return escape("d_c,TC1,HC2,L");
-}
-
-function getCICHTMLKeys()
-{
-  return escape("d_c,C1,HC2,L");
-}
-
-function makeURL(type,uri,cicflags,typesflags)
-{
-  var mode = top.mode;
-  var processorURL = top.processorURL;
-  var getterURL = top.getterURL;
-  var proofcheckerURL = top.proofcheckerURL;
-  var draw_graphURL = top.draw_graphURL;
-  var uri_set_queueURL = top.uri_set_queueURL;
-  var UNICODEvsSYMBOL = top.UNICODEvsSYMBOL;
-  var mode_list = mode.split(",");
-  
-  var keys = "";
-  var url = "";
-
-  var interfaceURL = top.topurl + "/html/cic/index.html";
-  var thinterfaceURL = top.topurl + "/html/theory/index.html";
-
-  var output = mode_list[0];
-  var format;
-  if (output == "raw") format = mode_list[1];
-  else format = mode_list[2];
-  
-  if (output == "raw") {
-    var ext = "";
-    var rdfprefix = "";
-    if (format == "types") ext = ".types"
-    else if (format == "ann") ext = ".ann"
-    else if (format == "fwd") rdfprefix = "helm:rdf:www.cs.unibo.it/helm/rdf/forward//"
-    else if (format == "bwd") rdfprefix = "helm:rdf:www.cs.unibo.it/helm/rdf/backward//";
-    url = getterURL + "getxml?uri=" + rdfprefix + uri + ext + "&format=" +
-          mode_list[5] + "&patch_dtd=" + mode_list[6];
-  } else {
-    if (format == "html" && type == "cic") {
-      keys = getCICHTMLKeys() +
-       "&param.processorURL=" + escape(processorURL) +
-       "&param.getterURL=" + escape(getterURL) +
-       "&param.proofcheckerURL=" + escape(proofcheckerURL) +
-       "&param.draw_graphURL=" + escape(draw_graphURL) +
-       "&param.uri_set_queueURL=" + escape(uri_set_queueURL) +
-       "&param.UNICODEvsSYMBOL=" + escape(UNICODEvsSYMBOL) +
-       "&prop.doctype-public="+escape("-//W3C//DTD XHTML 1.0 Transitional//EN")+
-       "&prop.encoding=iso-8859-1" +
-       "&prop.media-type=text/html" +
-       "&prop.method=html" +
-       "&param.doctype-public="+escape("-//W3C//DTD XHTML 1.0 Transitional//EN")+
-       "&param.encoding=iso-8859-1" +
-       "&param.media-type=text/html" +
-       "&param.keys=" + getCICHTMLKeys() +
-       "&param.interfaceURL=" + escape(interfaceURL);
-    } else if (format == "html" && type == "theory") {
-      keys = getTheoryKeys()+
-       "&param.processorURL=" + escape(processorURL) +
-       "&param.getterURL=" + escape(getterURL) +
-       "&param.proofcheckerURL=" + escape(proofcheckerURL) +
-       "&param.draw_graphURL=" + escape(draw_graphURL) +
-       "&param.uri_set_queueURL=" + escape(uri_set_queueURL) +
-       "&param.UNICODEvsSYMBOL=" + escape(UNICODEvsSYMBOL) +
-       "&param.keys=" + getCICHTMLKeys() +
-       "&param.thkeys=" + getTheoryKeys() +
-       "&param.embedkeys=" + getEmbedKeys() +
-       "&param.doctype-public="+escape("-//W3C//DTD XHTML 1.0 Transitional//EN")+
-       "&param.encoding=iso-8859-1" +
-       "&param.thencoding=iso-8859-1" +
-       "&param.media-type=text/html" +
-       "&param.thmedia-type=text/html" +
-       "&param.interfaceURL=" + escape(interfaceURL) +
-       "&param.thinterfaceURL=" + escape(thinterfaceURL);
-    } else if (format == "mml_cont" && type == "cic") {
-      keys = escape("d_c,C1")+
-       "&param.processorURL=" + escape(processorURL) +
-       "&param.getterURL=" + escape(getterURL) +
-       "&prop.doctype-public="+
-       //"&prop.encoding=" +
-       "&prop.media-type=text/xml" +
-       "&param.doctype-public=" +
-       "&param.encoding=" +
-       "&param.media-type=text/xml";
-    } else if (format == "mml_cont" && type == "theory") {
-      keys = escape("T1,L,E")+
-       "&param.processorURL=" + escape(processorURL) +
-       "&param.getterURL=" + escape(getterURL) +
-       "&param.keys=" + escape("d_c,C1") +
-       "&param.thkeys=T1,L,E" +
-       "&param.embedkeys=" + escape("d_c,TC1") +
-
-       "&param.processorURL=" + escape(processorURL) +
-       "&param.getterURL=" + escape(getterURL) +
-       "&param.proofcheckerURL=" + escape(proofcheckerURL) +
-       "&param.draw_graphURL=" + escape(draw_graphURL) +
-       "&param.uri_set_queueURL=" + escape(uri_set_queueURL) +
-       "&param.doctype-public=" +
-       "&param.encoding=" +
-       "&param.thencoding=iso-8859-1" +
-       "&param.media-type=text/xml" +
-       "&param.thmedia-type=text/html" +
-       "&param.interfaceURL=" + escape(interfaceURL) +
-       "&param.thinterfaceURL=" + escape(thinterfaceURL);
-    } else if (format == "mml_pres" && type == "cic") {
-      keys = getCICMathMLKeys()+
-       "&param.processorURL=" + escape(processorURL) +
-       "&param.getterURL=" + escape(getterURL) +
-       "&param.proofcheckerURL=" + escape(proofcheckerURL) +
-       "&param.draw_graphURL=" + escape(draw_graphURL) +
-       "&param.uri_set_queueURL=" + escape(uri_set_queueURL) +
-       "&prop.doctype-public="+
-       //"&prop.encoding=" +
-       "&prop.media-type=text/xml" +
-       "&param.doctype-public=" +
-       "&param.encoding=" +
-       "&param.media-type=text/xml" +
-       "&param.keys=" + getCICMathMLKeys() +
-       "&param.interfaceURL=" + escape(interfaceURL);
-    } else if (format == "mml_pres" && type == "theory") {
-      keys = getTheoryKeys()+
-       "&param.keys=" + getCICMathMLKeys() +
-       "&param.thkeys=" + getTheoryKeys() +
-       "&param.embedkeys=" + escape("d_c,TC1,G,C2,L") +
-       "&param.processorURL=" + escape(processorURL) +
-       "&param.getterURL=" + escape(getterURL) +
-       "&param.proofcheckerURL=" + escape(proofcheckerURL) +
-       "&param.draw_graphURL=" + escape(draw_graphURL) +
-       "&param.uri_set_queueURL=" + escape(uri_set_queueURL) +
-       "&param.doctype-public=" +
-       "&param.encoding=" +
-       "&param.thencoding=iso-8859-1" +
-       "&param.media-type=text/xml" +
-       "&param.thmedia-type=text/html" +
-       "&param.interfaceURL=" + escape(interfaceURL) +
-       "&param.thinterfaceURL=" + escape(thinterfaceURL);
-    }
-
-    var naturalLanguage = typesflags.toLowerCase();
-    if (typesflags != "NO" || type == "theory") {
-       naturalLanguage = mode_list[3];
-    }
-    var annotations = cicflags.toLowerCase();
-    if (cicflags != "NO" || type == "theory") {
-       annotations = mode_list[4];
-    }
-    url = processorURL + "apply?xmluri=" + escape(getterURL + "getxml?uri=" + uri) + "&keys=" + keys + "&param.CICURI=" + uri + "&param.naturalLanguage=" + naturalLanguage + "&param.annotations=" + annotations + "&param.topurl=" + top.topurl;
-  }
-
-  if (output == "raw")
-   return url;
-  else if (type == "cic")
-   return interfaceURL + "?url=" + escape(url);
-  else if (type == "theory")
-   return thinterfaceURL + "?url=" + escape(url)
-}
-
diff --git a/helm/on-line/javascript/defaults.js b/helm/on-line/javascript/defaults.js
deleted file mode 100644 (file)
index c8f89a7..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-
-function getDefaultParam(name)
-{
-  switch (name) {
-  case "processorURL":
-    return "http://mowgli.cs.unibo.it:8081/helm/servlet/uwobo/";
-  case "getterURL":
-    return "http://mowgli.cs.unibo.it:48081/"; 
-  case "uri_set_queueURL":
-    return "http://mowgli.cs.unibo.it:48082/"; 
-  case "draw_graphURL":
-    return "http://mowgli.cs.unibo.it:48083/"; 
-  case "proofcheckerURL":
-    return "http://mowgli.cs.unibo.it:48084/"; 
-  case "UNICODEvsSYMBOL":
-    return "symbol";
-  case "cicuri":
-    return "cic:/";
-  case "theoryuri":
-    return "theory:/";
-  case "mode":
-    return "processed,cic,html,yes,no,normal,no";
-  }
-  
-  return "???";
-}
-
diff --git a/helm/on-line/javascript/graphLinks.js b/helm/on-line/javascript/graphLinks.js
deleted file mode 100644 (file)
index a01a6f6..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-function mkBackwardRDFURI(uri)
-{
-   var prefix = "helm:rdf:www.cs.unibo.it/helm/rdf/backward//";
-   var re1 = /#xpointer\(1\/(\d+)\/(\d+)\)/;
-   var re2 = /#xpointer\(1\/(\d+)\)/;
-   // Just one of the following replace will do something
-   uri = uri.replace(re1,",$1,$2");
-   uri = uri.replace(re2,",$1");
-
-   return (prefix + uri);
-}
-
-function removeXPointer(uri)
-{
-   //var re = /#xpointer(\.*)/;
-   // CSC: Why the r.e.s below work and the one above does not?
-   var re1 = /#xpointer\(1\/(\d+)\/(\d+)\)/;
-   var re2 = /#xpointer\(1\/(\d+)\)/;
-   var res = uri.replace(re1,"");
-   res = res.replace(re2,"");
-
-   return res;
-}
-
-
-function mkGraphURL(uri,keys)
-{
-   var getterURL = unescape(getParam("param.getterURL"));
-   var draw_graphURL = unescape(getParam("param.draw_graphURL"));
-   var url= setParam(location.href,"keys",keys);
-   url = setParam(url,"xmluri", getterURL + 'getempty');
-   url = setParam(url,"param.CICURI",escape(uri));
-   var uri_set_size = document.uri_set_size.elements[0].value;
-   url = setParam(url,"param.uri_set_size",uri_set_size);
-
-   // The generated URL is sometimes too long for I.E.
-   // So it is now better to remove some unuseful pararams from the inner URL
-   url = dropParam(url,"param.processorURL");
-
-   url = draw_graphURL + 'draw?url=' + escape(url);
-   var url2 = setParam(location.href,"keys","MGL,RT");
-   url2 = setParam(url2,"xmluri",escape(url));
-   url2 = setParam(url2,"param.uri_set_size",uri_set_size);
-   return url2;
-}
-
-function mkDepURL(uri)
-{
-   return mkGraphURL(uri,"MDG");
-}
-
-
-function mkMetaURL(uri)
-{
-   return mkGraphURL(uri,"MMG");
-}
-
-function mkCICURL(uri)
-{
-   var rawuri = removeXPointer(uri);
-   var getterURL = getParam("param.getterURL");
-   var interfaceURL = unescape(getParam("param.interfaceURL"));
-   var url= setParam(location.href,"keys",getParam("param.keys"));
-   url = setParam(url,"xmluri", getterURL + 'getxml%3Furi%3D' + rawuri);
-   url = setParam(url,"param.CICURI",rawuri);
-   url = interfaceURL + "?url=" + escape(url);
-   return url;
-}
-
-function mkMetaTheoryURL(uri)
-{
-   var rdfuri = mkBackwardRDFURI(uri);
-   var getterURL = getParam("param.getterURL");
-   var url = setParam(location.href,"keys","meta_theory," + unescape(getTheoryKeys()));
-   url = setParam(url,"param.embedkeys", getEmbedKeys());
-   url = setParam(url,"xmluri", getterURL + "getxml%3Furi%3D" + rdfuri);
-   return url;
-}
diff --git a/helm/on-line/javascript/helmjsmenu.js b/helm/on-line/javascript/helmjsmenu.js
deleted file mode 100644 (file)
index 0d76543..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-// Global variables.
-var HJMmenu;
-
-function initializeMenu() {
-   HJMmenu =
-      document.getElementById ?
-         // A DOM browser
-         document.getElementById("HJMmenu").style
-      :  // Probably Netscape Navigator 4.0
-         document.HJMmenu;
-   HJMmenu.visibility="hidden";
-}
-
-function showMenu() {
-   HJMmenu.visibility="visible";
-}
-
-function hideMenu() {
-   HJMmenu.visibility="hidden";
-}
-
-function moveMenu(x,y) {
- var y2 = y - 25;
- var x2 = x - 25;
- if (document.getElementById) {
-   // Not Netscape Navigator 4.0
-   HJMmenu.left = x2 + "px";
-   HJMmenu.top  = y2 + "px";
- } else {
-   // Probably Netscape Navigator 4.0
-   HJMmenu.left = x2;
-   HJMmenu.top  = y2;
- }
-}
-
-function getX(event) {
-   if(!event.pageX)
-      // Probably Internet Explorer
-      return event.clientX + document.body.scrollLeft;
-   else
-      // Probably Netscape Navigator
-      return event.pageX;
-}
-
-function getY(event) {
-   if(!event.pageY)
-      // Probably Internet Explorer
-      return event.clientY + document.body.scrollTop;
-   else
-      // Probably Netscape Navigator
-      return event.pageY;
-}
-
-if (!document.getElementById) {
-   // Probably Netscape Navigator
-   document.captureEvents(Event.MOUSEDOWN);
-   document.onmousedown = hideMenu;
-}
diff --git a/helm/on-line/javascript/prelude.js b/helm/on-line/javascript/prelude.js
deleted file mode 100644 (file)
index 83cff42..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-
-function getInitialProcessorURL()
-{
-  var search = top.location.search;
-  search = search.slice(1);
-  var args = search.split("&");
-  var processorURL = "-1";
-  for (var i = 0 ; i < args.length ; i++) {
-     var couple = args[i].split("=");
-     if (couple[0] == "processorURL") processorURL = couple[1];
-  }
-  if (processorURL == "-1") processorURL = getDefaultParam("processorURL");
-  return processorURL;
-}
-
-function getInitialGetterURL()
-{
-  var search = top.location.search;
-  search = search.slice(1);
-  var args = search.split("&");
-  var getterURL = "-1";
-  for (var i = 0 ; i < args.length ; i++) {
-     var couple = args[i].split("=");
-     if (couple[0] == "getterURL") getterURL = couple[1];
-  }
-  if (getterURL == "-1") getterURL = getDefaultParam("getterURL");
-  return getterURL;
-}
-
-function getInitialProofCheckerURL()
-{
-  var search = top.location.search;
-  search = search.slice(1);
-  var args = search.split("&");
-  var proofcheckerURL = "-1";
-  for (var i = 0 ; i < args.length ; i++) {
-     var couple = args[i].split("=");
-     if (couple[0] == "proofcheckerURL") proofcheckerURL = couple[1];
-  }
-  if (proofcheckerURL == "-1")
-     proofcheckerURL = getDefaultParam("proofcheckerURL");
-  return proofcheckerURL;
-}
-
-function getInitialDrawGraphURL()
-{
-  var search = top.location.search;
-  search = search.slice(1);
-  var args = search.split("&");
-  var draw_graphURL = "-1";
-  for (var i = 0 ; i < args.length ; i++) {
-     var couple = args[i].split("=");
-     if (couple[0] == "draw_graphURL") draw_graphURL = couple[1];
-  }
-  if (draw_graphURL == "-1") draw_graphURL = getDefaultParam("draw_graphURL");
-  return draw_graphURL;
-}
-
-function getInitialURISetQueueURL()
-{
-  var search = top.location.search;
-  search = search.slice(1);
-  var args = search.split("&");
-  var uri_set_queueURL = "-1";
-  for (var i = 0 ; i < args.length ; i++) {
-     var couple = args[i].split("=");
-     if (couple[0] == "uri_set_queueURL") uri_set_queueURL = couple[1];
-  }
-  if (uri_set_queueURL == "-1") uri_set_queueURL = getDefaultParam("uri_set_queueURL");
-  return uri_set_queueURL;
-}
-
-function getInitialUNICODEvsSYMBOL()
-{
-  var search = top.location.search;
-  search = search.slice(1);
-  var args = search.split("&");
-  var UNICODEvsSYMBOL = "-1";
-  for (var i = 0 ; i < args.length ; i++) {
-     var couple = args[i].split("=");
-     if (couple[0] == "UNICODEvsSYMBOL") UNICODEvsSYMBOL = couple[1];
-  }
-  if (UNICODEvsSYMBOL == "-1") UNICODEvsSYMBOL = getDefaultParam("UNICODEvsSYMBOL");
-  return UNICODEvsSYMBOL;
-}
-
-function getInitialUNICODEvsSYMBOLsymbol()
-{
-  if (getInitialUNICODEvsSYMBOL() == "symbol")
-   return "CHECKED";
-  else
-   return "";
-}
-
-function getInitialUNICODEvsSYMBOLunicode()
-{
-  if (getInitialUNICODEvsSYMBOL() == "unicode")
-   return "CHECKED";
-  else
-   return "";
-}
-
-function getUwoboURL()
-{
-  return document.uwoboURL.elements[0].value;
-}
-
-function getGetterURL()
-{
-  return document.getterURL.elements[0].value;
-}
-
-function getProofCheckerURL()
-{
-  return document.proofcheckerURL.elements[0].value;
-}
-
-function getDrawGraphURL()
-{
-  return document.draw_graphURL.elements[0].value;
-}
-
-function getURISetQueueURL()
-{
-  return document.uri_set_queueURL.elements[0].value;
-}
-
-function getUNICODEvsSYMBOL()
-{
-  if (document.UNICODEvsSYMBOL.radioUNICODEvsSYMBOL[0].checked)
-   return document.UNICODEvsSYMBOL.radioUNICODEvsSYMBOL[0].value;
-  else
-   return document.UNICODEvsSYMBOL.radioUNICODEvsSYMBOL[1].value;
-}
-
-function chopSlash(url)
-{
-  return url.slice(0,url.lastIndexOf('/'));
-}
-
-function refreshLinks()
-{
-  var search = top.location.search;
-  search = search.slice(1);
-  var args = search.split("&");
-  var cicuri = "-1", theoryuri = "-1", mode = "-1";
-  for (var i = 0 ; i < args.length ; i++) {
-     var couple = args[i].split("=");
-     switch (couple[0]) {
-        case "cicuri"       : cicuri     =couple[1]; break;
-        case "theoryuri"    : theoryuri  =couple[1]; break;
-        case "mode"         : mode       =couple[1]; break;
-     }
-  }
-  if (cicuri == "-1") cicuri = getDefaultParam("cicuri");
-  if (theoryuri == "-1") theoryuri = getDefaultParam("theoryuri");
-  if (mode == "-1") mode = getDefaultParam("mode");
-
-  document.links[2].href =
-   document.links[2].protocol + '//' +
-   document.links[2].host +
-   document.links[2].pathname +
-   "?getterURL=" + getGetterURL();
-
-  document.links[3].href = 
-   document.links[3].protocol + '//' +
-   document.links[3].host +
-   document.links[3].pathname +
-   "?processorURL=" + getUwoboURL() +
-   "&getterURL=" + getGetterURL();
-
-  var topurl =
-   chopSlash(chopSlash(
-    document.location.protocol + '//' +
-    document.location.host +
-    document.location.pathname));
-  document.links[4].href =
-     getUwoboURL() + "apply" +
-      "?keys=RT" +
-      "&param.topurl=" + topurl +
-      "&xmluri=" +
-      escape(
-       topurl + "/html/library/index.html" +
-       "?cicuri=" + cicuri +
-       "&theoryuri=" + theoryuri +
-       "&mode=" + mode +
-       "&processorURL=" + getUwoboURL() +
-       "&getterURL=" + getGetterURL() +
-       "&proofcheckerURL=" + getProofCheckerURL() +
-       "&draw_graphURL=" + getDrawGraphURL() +
-       "&uri_set_queueURL=" + getURISetQueueURL() +
-       "&UNICODEvsSYMBOL=" + getUNICODEvsSYMBOL()
-      );
-}
-
-function selectUwoboURL(ss)
-{
-  if (ss.selectedIndex == 0) {
-    document.uwoboURL.elements[0].value = "";
-  } else {
-    document.uwoboURL.elements[0].value = "http://" + ss.options[ss.selectedIndex].value + ":8081/helm/servlet/uwobo/";
-  }
-
-  refreshLinks();
-}
-
-function selectGetterURL(ss)
-{
-  if (ss.selectedIndex == 0) {
-    document.getterURL.elements[0].value = "";
-  } else {
-    document.getterURL.elements[0].value = "http://" + ss.options[ss.selectedIndex].value + ":48081/";
-  }
-
-  refreshLinks();
-}
-
-function selectProofCheckerURL(ss)
-{
-  if (ss.selectedIndex == 0) {
-    document.proofcheckerURL.elements[0].value = "";
-  } else {
-    document.proofcheckerURL.elements[0].value = "http://" + ss.options[ss.selectedIndex].value + ":48084/";
-  }
-
-  refreshLinks();
-}
-
-function selectDrawGraphURL(ss)
-{
-  if (ss.selectedIndex == 0) {
-    document.draw_graphURL.elements[0].value = "";
-  } else {
-    document.draw_graphURL.elements[0].value = "http://" + ss.options[ss.selectedIndex].value + ":48083/";
-  }
-
-  refreshLinks();
-}
-
-function selectURISetQueueURL(ss)
-{
-  if (ss.selectedIndex == 0) {
-    document.uri_set_queueURL.elements[0].value = "";
-  } else {
-    document.uri_set_queueURL.elements[0].value = "http://" + ss.options[ss.selectedIndex].value + ":48082/";
-  }
-
-  refreshLinks();
-}
diff --git a/helm/on-line/javascript/utils.js b/helm/on-line/javascript/utils.js
deleted file mode 100644 (file)
index a4ca9cc..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-function dropBodySuffix(url)
-{ var length = url.length;
-  if (url.slice(length - 5, length) == '.body')
-   return (url.slice(0, length - 5));
-  else
-   return url;
-}
-
-function chopSlash(url)
-{
-  return url.slice(0,url.lastIndexOf('/'));
-}
-
-function dropParam(url,name)
-{
-  var urla = url.split("?");
-  var search = urla[1];
-  var args = search.split("&");
-  var newargs = new Array();
-  var j = 0;
-
-  for (var i = 0 ; i < args.length ; i++) {
-     var couple = args[i].split("=");
-     if (couple[0] != name) {
-        newargs[j] = args[i];
-        j++;
-     }
-  }
-
-  return (urla[0] + "?" + newargs.join("&"));
-}
-
-function setParam(url,name,value)
-{
-  var urla = url.split("?");
-  var search = urla[1];
-  var args = search.split("&");
-  var found = false;
-
-  for (var i = 0 ; i < args.length ; i++) {
-     var couple = args[i].split("=");
-     if (couple[0] == name) {
-        found = true;
-        args[i] = name + "=" + value;
-     }
-  }
-
-  return (urla[0] + "?" + args.join("&") + (found ? "" : ("&" + name + "=" + value)));
-}
-
-function extractParam(url,name)
-{
-  var search = url.split("?")[1];
-  search = search.split("#")[0];
-  var args = search.split("&");
-  var value = "???";
-
-  for (var i = 0 ; i < args.length ; i++) {
-     var couple = args[i].split("=");
-     if (couple[0] == name) value = couple[1];
-  }
-
-  if (value == "???") value = getDefaultParam(name);
-
-  return value;
-}
-
-function getParam0(search,name)
-{
-  var args = search.split("&");
-  var value = "???";
-
-  for (var i = 0 ; i < args.length ; i++) {
-     var couple = args[i].split("=");
-     if (couple[0] == name) value = couple[1];
-  }
-
-  if (value == "???") value = getDefaultParam(name);
-
-  return value;
-}
-
-function getParam(name)
-{
-  return getParam0(location.search.slice(1),name);
-}
-
-function getParam2(name)
-{
-  var url = unescape(getParam('xmluri'));
-  var tmp = url.split("?");
-
-  if (tmp.length > 1)
-     return getParam0(tmp[1],name);
-  else
-     return getDefaultParam(name);
-}
-
-
-function outputOption(doc, value, content, selected)
-{
-  doc.write("<option value=\"" + value + "\" ");
-  if (value == selected) doc.write("selected ");
-  doc.write(">" + content + "</option>");
-}
-
-function outputCheckbox(doc, onclick, content, checked)
-{
-  doc.write("<input type=\"checkbox\" onClick=\"" + onclick + "\" ");
-  if (checked) doc.write("checked");
-  doc.write(">" + content + "</input>");
-}
-
diff --git a/helm/on-line/xslt/getParam.xsl b/helm/on-line/xslt/getParam.xsl
deleted file mode 100644 (file)
index 0ec71a8..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:helm="http://www.cs.unibo.it/helm">
-
-<xsl:output 
-       method="xml"
-       encoding="iso-8859-1" 
-       media-type="text/html"
-       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
-       doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
-
-<xsl:param name="uri" select="''"/>
-
-<xsl:template match="helm:getParam">
- <xsl:value-of select="$uri"/>
-</xsl:template>
-
-<xsl:template match = "/|*">
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:apply-templates/>
-  </xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/on-line/xslt/ls2html.xsl b/helm/on-line/xslt/ls2html.xsl
deleted file mode 100644 (file)
index f0376ba..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-<?xml version="1.0"?>
-
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="utils.xsl"/>
-
-<xsl:output method="html" encoding="iso-8859-1"/>
-
-<!-- uri must end with '/' -->
-<xsl:param name="uri" select="''"/>
-<xsl:param name="keys" select="''"/>
-<xsl:param name="getterURL" select="''"/>
-<xsl:param name="interfaceURL" select="''"/>
-<xsl:param name="target" select="''"/>
-
-<xsl:template name="chop">
- <xsl:param name="uri" select="''"/>
- <xsl:param name="prefix" select="''"/>
- <xsl:variable name="newprefix" select="substring-before($uri,'/')"/>
- <xsl:choose>
-  <xsl:when test="$newprefix = ''"><xsl:value-of select="$prefix"/></xsl:when>
-  <xsl:otherwise>
-   <xsl:call-template name="chop">
-    <xsl:with-param name="uri" select="substring-after($uri,'/')"/>
-    <xsl:with-param name="prefix" select="concat($prefix,$newprefix,'/')"/>
-   </xsl:call-template>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:variable name="uridotdot">
- <xsl:call-template name="chop">
-  <xsl:with-param name="uri" select="substring($uri,1,string-length($uri)-1)"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:template name="makeDir">
- <xsl:param name="uri" select="''"/>
- <xsl:param name="basename" select="''"/>
- <xsl:param name="icon" select="''"/>
- <xsl:param name="alt" select="''"/>
- <tr>
-  <td>
-   <img border="0" src="{concat($interfaceURL,'/icons/',$icon)}" alt="[{$alt}]"/>
-  </td>
-  <td>
-    <xsl:variable name="quoteduri">
-     <xsl:call-template name="jsquote">
-      <xsl:with-param name="s" select="$uri"/>
-     </xsl:call-template>
-    </xsl:variable>
-    <a
-      onClick=
-       "top.{$target}uri='{$quoteduri}';
-        refresh{$target}Header('{$interfaceURL}/html/library/header.html');
-        var search='?keys={$keys}' +
-         '&amp;xmluri=' + escape('{$getterURL}ls?format=xml'+'&amp;baseuri={$quoteduri}')+
-         '&amp;param.uri={$quoteduri}' +
-         '&amp;param.keys={$keys}' +
-         '&amp;param.getterURL={$getterURL}' +
-         '&amp;param.target={$target}' +
-         '&amp;param.interfaceURL={$interfaceURL}';
-        var pathname = this.pathname;
-        if (pathname.charAt(0) != '/')
-         pathname = '/' + pathname;
-        this.href=
-         this.protocol + '//' + this.host + pathname + search + this.hash;"
-      onMouseOver="window.status='{$quoteduri}'; return true"
-      href="apply"
-   ><xsl:value-of select="$basename"/></a>
-  </td>
- </tr>
-</xsl:template>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <title>Index of <xsl:value-of select="$uri"/></title>
-   <xsl:copy-of select="document(concat($interfaceURL,'/javascript/control.js_xml'))" />
-   <xsl:copy-of select="document(concat($interfaceURL,'/javascript/utils.js_xml'))" />
-  </head>
-  <body bgcolor="#ffffff" text="#000000">
-   <table>
-    <xsl:if test="$uridotdot != ''">
-     <xsl:call-template name="makeDir">
-      <xsl:with-param name="uri" select="$uridotdot"/>
-      <xsl:with-param name="basename" select="'Parent Directory'"/>
-      <xsl:with-param name="icon" select="'back.gif'"/>
-      <xsl:with-param name="alt" select="'Parent Directory'"/>
-     </xsl:call-template>
-    </xsl:if>
-    <xsl:apply-templates select="*"/>
-   </table>
-   <hr noshade="yes" align="left" width="80%"/>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template match="section">
- <xsl:variable name="diruri">
-  <xsl:value-of select="."/>
- </xsl:variable>
- <xsl:call-template name="makeDir">
-  <xsl:with-param name="uri" select="concat($uri,$diruri,'/')"/>
-  <xsl:with-param name="basename" select="$diruri"/>
-  <xsl:with-param name="icon" select="'folder.gif'"/>
-  <xsl:with-param name="alt" select="$uri"/>
- </xsl:call-template>
-</xsl:template>
-
-<xsl:template match="object">
- <xsl:variable name="name" select="@name"/>
- <xsl:variable name="ann" select="ann/@value"/>
- <xsl:variable name="types" select="types/@value"/>
- <xsl:variable name="body" select="body/@value"/>
- <xsl:variable name="icon">
-  <xsl:choose>
-   <xsl:when test="$ann = 'YES'">text.gif</xsl:when>
-   <xsl:otherwise>generic.red.gif</xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <tr>
-  <td>
-   <img border="0" src="{concat($interfaceURL,'/icons/',$icon)}" alt="[{@name}]"/>
-  </td>
-  <td>
-   <xsl:variable name="quoteduri">
-    <xsl:call-template name="jsquote">
-     <xsl:with-param name="s" select="$uri"/>
-    </xsl:call-template>
-   </xsl:variable>
-   <xsl:variable name="quotedname">
-    <xsl:call-template name="jsquote">
-     <xsl:with-param name="s" select="$name"/>
-    </xsl:call-template>
-   </xsl:variable>
-   <xsl:variable name="quotedbodyname">
-    <xsl:call-template name="jsquote">
-     <xsl:with-param name="s" select="concat($name,'.body')"/>
-    </xsl:call-template>
-   </xsl:variable>
-   <a href="" target="{$target}"
-      onClick="this.href=makeURL('{$target}','{concat($quoteduri,$quotedname)}','{$ann}','{$types}')"
-      onMouseOver="window.status='{concat($quoteduri,$quotedname)}'; return true"
-   ><xsl:value-of select="$name"/></a>
-   <xsl:if test="not($body='NO')">
-    <xsl:text> </xsl:text>
-    <a href="" target="{$target}"
-       onClick="this.href=makeURL('{$target}','{concat($quoteduri,$quotedbodyname)}','{$ann}','{$types}')"
-       onMouseOver="window.status='{concat($quoteduri,$quotedname)}'; return true"
-    >Body</a>
-   </xsl:if>
-  </td>
- </tr>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/on-line/xslt/makeGraphLinks.xsl b/helm/on-line/xslt/makeGraphLinks.xsl
deleted file mode 100644 (file)
index 49122be..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:subst="http://www.cs.unibo.it/helm/subst">
-
-<xsl:import href="utils.xsl"/>
-
-<!--CSC: code cut & pasted also in metadataLib.xsl -->
-<xsl:param name="uri_set_size" select="''"/>
-<!--CSC: end of cut & paste also in metadataLib.xsl -->
-
-<xsl:output method="html" encoding="iso-8859-1"/>
-
-<xsl:template match="/|*">
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:apply-templates/>
-  </xsl:copy>
-</xsl:template>
-
-<xsl:template match="head">
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <subst:script language="JavaScript" src="/javascript/defaults.js"/>
-   <subst:script language="JavaScript" src="/javascript/utils.js"/>
-   <subst:script language="JavaScript" src="/javascript/control.js"/>
-   <subst:script language="JavaScript" src="/javascript/graphLinks.js"/>
-   <subst:script language="JavaScript" src="/javascript/helmjsmenu.js"/>
-   <script>
-    var lastX, lastY;
-    var selectedURI;
-   </script>
-   <xsl:apply-templates/>
-  </xsl:copy>
-</xsl:template>
-
-<xsl:template match="body">
-  <!--CSC: end of cut & paste also in metadataLib.xsl -->
-  <form name="uri_set_size">
-   Number of nodes to show when following an hyperlink:
-   <input type="text" onClick="return false" value="{$uri_set_size}" size="2"/> (30 suggested)
-  </form>
-  <!--CSC: end of cut & paste also in metadataLib.xsl -->
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:attribute name="onClick">hideMenu();</xsl:attribute>
-   <xsl:apply-templates/>
-   <div style="position: absolute" id="HJMmenu">
-    <!-- The two nested tables are for NS 4.0 where every -->
-    <!-- layer has a default transparent background color -->
-    <table bgColor="green" id="pippo">
-     <tr><td>
-      <table bgColor="cyan" border="2">
-       <tr><td><a href="" onClick="this.href=mkDepURL(selectedURI);">Objects this one depends on.</a></td></tr>
-       <tr><td><a href="" onClick="this.href=mkCICURL(selectedURI);" target="cic">Render this object.</a></td></tr>
-       <tr><td><a href="" onClick="this.href=mkMetaTheoryURL(selectedURI);" target="theory">Objects depending directly on this one.</a></td></tr>
-       <tr><td><a href="" onClick="this.href=mkMetaURL(selectedURI);">Objects depending on this one.</a></td></tr>
-      </table>
-     </td></tr>
-    </table>
-   </div>
-   <script>initializeMenu()</script>
-  </xsl:copy>
-</xsl:template>
-
-<xsl:template match = "area">
- <xsl:variable name="quoteduri">
-  <xsl:call-template name="jsquote">
-   <xsl:with-param name="s" select="@href"/>
-  </xsl:call-template>
- </xsl:variable>
- <xsl:copy>
-  <xsl:copy-of select="@*"/> 
-  <xsl:if test="starts-with(@href,&quot;cic:&quot;)">
-   <xsl:attribute name="onMouseOver">lastX = getX(event); lastY = getY(event);selectedURI='<xsl:value-of select="$quoteduri"/>';</xsl:attribute>
-   <xsl:attribute name="href">javascript:moveMenu(lastX,lastY); showMenu();</xsl:attribute>
-  </xsl:if>
-  <xsl:apply-templates/>
- </xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/on-line/xslt/metadataControl.xsl b/helm/on-line/xslt/metadataControl.xsl
deleted file mode 100644 (file)
index 9960ab7..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:subst="http://www.cs.unibo.it/helm/subst">
-
-<xsl:output 
-       method="xml"
-       encoding="iso-8859-1" 
-       media-type="text/html"
-       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
-       doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
-
-<xsl:include href="metadataLib.xsl"/>
-
-<xsl:template match="InductiveDefinition">
- <xsl:for-each select="InductiveType">
-  <xsl:variable name="CICURIInductiveType" select="concat($CICURI,'#xpointer(1/',position())"/>
-  <xsl:variable name="RDFURIInductiveType" select="concat($CICURI,',',position())"/>
-  <h3>Metadata related to <xsl:value-of select="@name"/>:</h3>
-  <xsl:call-template name="makelink">
-   <xsl:with-param name="name" select="@name"/>
-   <xsl:with-param name="CICURI" select="concat($CICURIInductiveType,')')"/>
-   <xsl:with-param name="RDFURI" select="$RDFURIInductiveType"/>
-  </xsl:call-template>
-  <xsl:for-each select="Constructor">
-   <xsl:variable name="CICURIConstructor" select="concat($CICURIInductiveType,'/',position(),')')"/>
-   <xsl:variable name="RDFURIConstructor" select="concat($RDFURIInductiveType,',',position())"/>
-   <h3>Metadata related to <xsl:value-of select="@name"/>:</h3>
-   <xsl:call-template name="makelink">
-    <xsl:with-param name="name" select="@name"/>
-    <xsl:with-param name="CICURI" select="$CICURIConstructor"/>
-    <xsl:with-param name="RDFURI" select="$RDFURIConstructor"/>
-   </xsl:call-template>
-  </xsl:for-each>
- </xsl:for-each>
-</xsl:template>
-
-<!-- Not an Inductive Type -->
-<xsl:template match="*">
-  <xsl:call-template name="makelink">
-   <xsl:with-param name="name" select="$CICURI"/>
-   <xsl:with-param name="CICURI" select="$CICURI"/>
-   <xsl:with-param name="RDFURI" select="$CICURI"/>
-  </xsl:call-template>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/on-line/xslt/metadataLib.xsl b/helm/on-line/xslt/metadataLib.xsl
deleted file mode 100644 (file)
index a8c8540..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:subst="http://www.cs.unibo.it/helm/subst">
-
-<xsl:import href="utils.xsl"/>
-<xsl:import href="show_dc.xsl"/>
-
-<xsl:param name="CICURI" select="''"/>
-<xsl:param name="getterURL" select="''"/>
-<xsl:param name="draw_graphURL" select="''"/>
-
-<!--CSC: code cut & pasted from makeGraphLinks -->
-<xsl:param name="uri_set_size" select="'30'"/>
-<!--CSC: end of cut & paste from makeGraphLinks -->
-
-<xsl:variable name="BaseRDFURL" select="concat($getterURL,'getxml?uri=helm:rdf:www.cs.unibo.it/helm/rdf/')"/>
-<xsl:variable name="BaseRDFURLForward" select="concat($BaseRDFURL,'forward//')"/>
-<xsl:variable name="BaseRDFURLBackward" select="concat($BaseRDFURL,'backward//')"/>
-<xsl:variable name="BaseRDFURLDC" select="concat($BaseRDFURL,'dc//')"/>
-
-<xsl:template match="/">
- <html>
-  <head>
-   <subst:script language="JavaScript" src="/javascript/defaults.js"/>
-   <subst:script language="JavaScript" src="/javascript/utils.js"/>
-   <subst:script language="JavaScript" src="/javascript/control.js"/>
-   <subst:script language="JavaScript" src="/javascript/graphLinks.js"/>
-
-   <title>Metadata of <xsl:value-of select="$CICURI"/></title>
-  </head>
-  <body onLoad="window.focus()" bgColor="white">
-   <script>
-     var CICURI = "<xsl:value-of select="$CICURI"/>";
-<![CDATA[
-     document.write('<h1>Metadata of <a target="cic" href="' + mkCICURL(CICURI) + '">' + CICURI + '</a></h1>');
-]]>
-   </script>
-   <xsl:apply-templates select="*"/>
-   <!--CSC: code almost cut & pasted from makeGraphLinks -->
-   <form name="uri_set_size">
-    Number of nodes to show when following an hyperlink to a graph:
-    <input type="text" onClick="return false" value="{$uri_set_size}" size="2"/> (30 suggested)
-   </form>
-   <!--CSC: end of cut & paste from makeGraphLinks -->
-  <xsl:call-template name="loop_show_dc">
-   <xsl:with-param name="CICURI" select="$CICURI"/>
-  </xsl:call-template>
-  </body>
- </html>
-</xsl:template>
-
-<xsl:template name="makelink">
- <xsl:param name="name" select="''"/>
- <xsl:param name="CICURI" select="''"/>
- <xsl:param name="RDFURI" select="''"/>
- <xsl:variable name="quotedCICURI">
-  <xsl:call-template name="jsquote">
-   <xsl:with-param name="s" select="$CICURI"/>
-   <xsl:with-param name="times" select="2"/>
-  </xsl:call-template>
- </xsl:variable>
- <xsl:choose>
-  <xsl:when test="document(concat($BaseRDFURLBackward,$RDFURI))/*/*/*">
-   <p>
-    <script>
-     var CICURI = "<xsl:value-of select="$CICURI"/>";
-<![CDATA[
-     document.write('<a target="theory" href="' + mkMetaTheoryURL(CICURI) + '">View the objects depending on it.</a>');
-]]>
-    </script>
-   </p>
-   <p>
-    <script>
-<![CDATA[
-     document.write('<a href="" onClick="window.open(mkMetaURL(\']]><xsl:value-of select="$quotedCICURI"/><![CDATA[\'),\'graph\');return false;">View the graph of all the objects depending on this one.</a>');
-]]>
-    </script>
-   </p>
-  </xsl:when>
-  <xsl:otherwise>
-   <p>
-    Object <xsl:value-of select="$name"/> is never referenced in other objects
-   </p>
-  </xsl:otherwise>
- </xsl:choose>
-
- <xsl:choose>
-  <xsl:when test="document(concat($BaseRDFURLForward,$RDFURI))/*/*/*">
-   <p>
-    <!-- CSC: Cut & Paster from above ==> create a single javascript function -->
-    <script>
-<![CDATA[
-     document.write('<a href="" onClick="window.open(mkDepURL(\']]><xsl:value-of select="$quotedCICURI"/><![CDATA[\'),\'graph\');return false;">View the graph of all the dependencies of this object.</a>');
-]]>
-    </script>
-   </p>
-  </xsl:when>
-  <xsl:otherwise>
-   <p>
-    Object <xsl:value-of select="$name"/> does not reference any other object
-   </p>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/on-line/xslt/resolve_topurl.xsl b/helm/on-line/xslt/resolve_topurl.xsl
deleted file mode 100644 (file)
index 6cfe0ed..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:subst="http://www.cs.unibo.it/helm/subst">
-
-<xsl:output
-           method="html" 
-           encoding="ISO-8859-1" 
-           media-type="text/html" />
-
-<xsl:param name="topurl" select="''"/>
-
-<xsl:template match="subst:script">
- <xsl:copy-of select="document(concat($topurl,@src,'_xml'))" />
-</xsl:template>
-
-<xsl:template match="subst:topurl">
- <xsl:value-of select="$topurl"/>
-</xsl:template>
-
-<xsl:template match="/|*">
- <xsl:copy>
-  <xsl:copy-of select="@*"/>
-  <xsl:apply-templates/>
- </xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/on-line/xslt/utils.xsl b/helm/on-line/xslt/utils.xsl
deleted file mode 100644 (file)
index 9213c24..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<!-- Next function to quote strings for JavaScript (i.e. ' ==> \' -->
-<xsl:template name="jsquote">
- <xsl:param name="s" select="''"/>
- <xsl:param name="news" select="''"/>
- <xsl:param name="times" select="1"/>
- <xsl:choose>
-  <xsl:when test="$s = ''"><xsl:value-of select="$news"/></xsl:when>
-  <xsl:otherwise>
-   <xsl:variable name="char" select="substring($s,1,1)"/>
-   <xsl:choose>
-    <xsl:when test='$char = "&apos;" and $times = 1'>
-     <xsl:call-template name="jsquote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select='concat($news,"\&apos;")'/>
-      <xsl:with-param name="times" select="$times"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test='$char = "&apos;" and $times = 2'>
-     <xsl:call-template name="jsquote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select='concat($news,"\\\&apos;")'/>
-      <xsl:with-param name="times" select="$times"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:call-template name="jsquote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,$char)"/>
-      <xsl:with-param name="times" select="$times"/>
-     </xsl:call-template>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/on-line/xslt/xslt_index.txt b/helm/on-line/xslt/xslt_index.txt
deleted file mode 100644 (file)
index 2f27d8e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-getParam.xsl
-ls2html.xsl
-makeGraphLinks.xsl
-metadataControl.xsl
-metadataLib.xsl
-resolve_topurl.xsl
-utils.xsl
diff --git a/helm/pacchetti/Makefile b/helm/pacchetti/Makefile
deleted file mode 100644 (file)
index e47e23f..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-all: helm_configuration helm_data helm_http_getter helm_xsltd helm_gtk_interface
-clean:
-       rm -f helm_*.spec helm_*.tar.gz
-
-helm_configuration: prep_helm_configuration clean_helm_configuration
-
-prep_helm_configuration:
-       cvs export -D20100101 configuration
-       mv configuration/helm_configuration-0.0.1-1.spec .
-       (cd configuration ; autoconf)
-       mv configuration helm_configuration-0.0.1
-       tar -zcvf helm_configuration-0.0.1-1.tar.gz helm_configuration-0.0.1
-
-clean_helm_configuration:
-       rm -rf helm_configuration-0.0.1
-
-
-
-helm_data: prep_helm_data clean_helm_data
-
-prep_helm_data:
-       cvs export -D20100101 helm_data
-       mv helm_data/helm_data-0.0.1-1.spec .
-       (cd helm_data ; cvs export -D20100101 dtd ; cvs export -D20100101 style ; autoconf)
-       mv helm_data helm_data-0.0.1
-       tar -zcvf helm_data-0.0.1-1.tar.gz helm_data-0.0.1
-
-clean_helm_data:
-       rm -rf helm_data-0.0.1
-
-
-
-helm_http_getter: prep_helm_http_getter clean_helm_http_getter
-
-prep_helm_http_getter:
-       cvs export -D20100101 http_getter
-       mv http_getter/helm_http_getter-0.0.1-1.spec .
-       (cd http_getter ; autoconf)
-       mv http_getter helm_http_getter-0.0.1
-       tar -zcvf helm_http_getter-0.0.1-1.tar.gz helm_http_getter-0.0.1
-
-clean_helm_http_getter:
-       rm -rf helm_http_getter-0.0.1
-
-
-
-helm_xsltd: prep_helm_xsltd clean_helm_xsltd
-
-prep_helm_xsltd:
-       cvs export -D20100101 xsltd
-       mv xsltd/helm_xsltd-0.0.1-1.spec .
-       (cd xsltd ; autoconf)
-       mv xsltd helm_xsltd-0.0.1
-       tar -zcvf helm_xsltd-0.0.1-1.tar.gz helm_xsltd-0.0.1
-
-clean_helm_xsltd:
-       rm -rf helm_xsltd-0.0.1
-
-
-
-helm_gtk_interface: prep_helm_gtk_interface clean_helm_gtk_interface
-
-prep_helm_gtk_interface:
-       cvs export -D20100101 interface
-       mv interface/helm_gtk_interface-0.0.1-1.spec .
-       (cd interface ; autoconf)
-       mv interface helm_gtk_interface-0.0.1
-       tar -zcvf helm_gtk_interface-0.0.1-1.tar.gz helm_gtk_interface-0.0.1
-
-clean_helm_gtk_interface:
-       rm -rf helm_gtk_interface-0.0.1
-
-
-
-
-PHONY: all clean helm_configuration prep_helm_configuration clean_helm_configuration
diff --git a/helm/proofChecker/.cvsignore b/helm/proofChecker/.cvsignore
deleted file mode 100644 (file)
index aae07b8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[iox] *.o proofChecker proofChecker.opt
diff --git a/helm/proofChecker/.depend b/helm/proofChecker/.depend
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/proofChecker/Makefile b/helm/proofChecker/Makefile
deleted file mode 100644 (file)
index aada8a0..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-BIN_DIR = /usr/local/bin
-REQUIRES = helm-cic_proof_checking http
-PREDICATES =
-OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)"
-OCAMLC = ocamlfind ocamlc $(OCAMLOPTIONS) -g
-OCAMLOPT = ocamlfind ocamlopt $(OCAMLOPTIONS)
-OCAMLDEP = ocamldep
-
-LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES))
-
-all: $(PROOFCHECKEROBJS) proofChecker
-opt: $(PROOFCHECKEROBJS:.cmo=.cmx) proofChecker.opt
-
-DEPOBJS = proofChecker.ml
-
-PROOFCHECKEROBJS = proofChecker.cmo
-
-depend:
-       $(OCAMLDEP) $(DEPOBJS) > .depend
-
-proofChecker: $(PROOFCHECKEROBJS) $(LIBRARIES)
-       $(OCAMLC)  -linkpkg -o proofChecker $(PROOFCHECKEROBJS)
-
-proofChecker.opt: $(PROOFCHECKEROBJS:.cmo=.cmx) $(LIBRARIES_OPT)
-       $(OCAMLOPT) -linkpkg -o proofChecker.opt $(PROOFCHECKEROBJS:.cmo=.cmx)
-
-.SUFFIXES: .ml .mli .cmo .cmi .cmx
-.ml.cmo: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.mli.cmi: $(LIBRARIES)
-       $(OCAMLC) -c $<
-.ml.cmx: $(LIBRARIES_OPT)
-       $(OCAMLOPT) -c $<
-
-clean:
-       rm -f *.cm[iox] *.o proofChecker proofChecker.opt
-
-install:
-       cp proofChecker proofChecker.opt $(BIN_DIR)
-
-uninstall:
-       rm -f $(BIN_DIR)/proofChecker $(BIN_DIR)/proofChecker.opt
-
-.PHONY: install uninstall clean
-
-include .depend
diff --git a/helm/proofChecker/proofChecker.ml b/helm/proofChecker/proofChecker.ml
deleted file mode 100644 (file)
index 7c9c0f1..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-open Printf;;
-
-let default_port = 48084;;
-
-let port =
-  try
-    int_of_string (Sys.getenv "PROOF_CHECKER_PORT")
-  with
-  | Not_found -> default_port
-  | Failure "int_of_string" ->
-      prerr_endline "Warning: invalid port, reverting to default";
-      default_port
-;;
-
-let (html_preamble, html_postamble) =
-  ((fun uri ->
-    (sprintf
-"<html>
-<head>
- <title>Proof-Checking %s</title>
-</head>
-<body bgcolor=\"white\">
-<h1>Proof-Checking %s:</h1>
-"
-      uri uri)),
-("<h1>Done.</h1>
-</body>
-</html>
-END
-"))
-;;
-
-let bad_request outchan =
-  printf "INVALID REQUEST !!!!!\n\n";
-  flush stdout;
-  Http_daemon.respond_error ~status:(`Client_error `Bad_request) outchan;
-  flush outchan
-;;
-
-let usage_string =
-"
-<html>
-  <head>
-    <title>ProofChecker's help message</title>
-  </head>
-  <body>
-    <h1>ProofChecker</h1>
-    <h2>Usage</h2>
-    <p>
-    Usage: <kbd>http://hostname:proofcheckerport/</kbd><em>command</em>
-    </p>
-    <p>
-    Available commands:
-    </p>
-    <p>
-      <b><kbd>help</kbd></b><br />
-      display this help message
-    </p>
-    <p>
-      <b><kbd>proofCheck?uri=uri</kbd></b><br />
-      proof-checks the object whose URI is specified by <em>uri</em>
-    </p>
-  </body>
-</html>
-"
-;;
-
-let callback (req : Http_types.request) outchan =
-  match req#path with
-  | "/proofCheck" ->
-      begin
-        Logger.log_callback :=
-          (Logger.log_to_html
-            ~print_and_flush:(fun s -> fprintf outchan "%s" s; flush outchan));
-        try
-          let uri = req#param "uri" in
-          printf "Request to proof-check \"%s\"..." uri;
-          flush stdout;
-          fprintf outchan "%s" (html_preamble uri);
-          flush outchan;
-          (try
-            CicTypeChecker.typecheck (UriManager.uri_of_string uri);
-           with e ->
-            fprintf outchan "%s\n" (Printexc.to_string e);
-            flush outchan);
-          fprintf outchan "%s" html_postamble;
-          flush outchan;
-          printf " done\n\n";
-          flush stdout
-        with Not_found -> (* 'uri' argument not found *)
-          bad_request outchan
-      end
-  | "/help" ->
-      Http_daemon.respond ~body:usage_string
-       ~headers:["Content-Type", "text/html"] outchan
-  | req -> bad_request outchan
-
-in
-
-printf "Proof Checker started and listening on port %d\n" port;
-flush stdout;
-Http_daemon.start' ~port callback;
-printf "Proof Checker is terminating, bye!\n"
diff --git a/helm/schemas/13-dcagent b/helm/schemas/13-dcagent
deleted file mode 100644 (file)
index de0e6b4..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- HELM: OLD URL OF SCHEMAS: VRP gives errors --> 
-<!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-        xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
-WRONG    xmlns:dc="http://dublincore.org/2000/03/13-dces#"
-WRONG    xmlns:eor="http://dublincore.org/2000/03/13-eor#"
-ADDED    http://dublincore.org/2000/03/13-dcagent>-->
-
-<!DOCTYPE rdf:RDF [
-        <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-        <!ENTITY rdfsns 'http://www.w3.org/2000/01/rdf-schema#'>
-        <!ENTITY dcns 'http://www.cs.unibo.it/~schena/dces#'>
-        <!ENTITY dcqns 'http://www.cs.unibo.it/~schena/dcq#'>
-        <!ENTITY eorns 'http://www.cs.unibo.it/~schena/eor#'>
-        <!ENTITY dcagentns 'http://www.cs.unibo.it/~schena/13-dcagent#'>
-        <!ENTITY dctypens 'http://www.cs.unibo.it/~schena/dctype#'>
-   ]>
-
-<rdf:RDF xmlns:rdf="&rdfns;"
-         xmlns:rdfs="&rdfsns;"
-         xmlns:dc="&dcns;"
-         xmlns:dcq="&dcqns;"
-         xmlns:eor="&eorns;"
-         xmlns:dct="&dctypens;">
-
-<!-- Description of Schema --> 
-
-<eor:Schema rdf:about="&dcagentns;">
-  <!-- dumb down rule... use rdf:value for a simple default name -->   
-  <rdf:value>The Dublin Core Agent Core Vocabulary</rdf:value> 
-  <dc:title>The Dublin Core Agent Core Vocabulary</dc:title>
-  <dc:creator>The Dublin Core Metadata Initiative</dc:creator>
-  <dc:description>The Dublin Core metadata vocabulary is a simple vocabulary
-      intended to facilitate the discovery and description of agents.</dc:description>
-  <dc:language>English</dc:language>
-  <dc:date>2000-03-13</dc:date>
-</eor:Schema>
-
-<!-- HELM: added # to every internal resource reference 
-           every eor:note is eor:comment                -->
-
-<!-- Begin: Agent Declaration -->
-
-<!-- addition DC Vocabulary range declarations -->
-<!-- HELM: Here we want to constraint an external property to a particular 
-range. VRP gives a Warning when (extending or modifying) constraining the 
-range of a property defined in another schema. -->
-<!-- (NOTE: rdf:about was rdf:ID)
-<rdf:Description rdf:about = "&dcns;contributor">
-  <rdfs:range rdf:resource = "Agent" />
-</rdf:Description>
-
-<rdf:Description rdf:about = "&dcns;creator">
-  <rdfs:range rdf:resource = "Agent" />
-</rdf:Description>
-
-<rdf:Description rdf:about = "&dcns;publisher">
-  <rdfs:range rdf:resource = "Agent" />
-</rdf:Description>-->
-
-
-<!-- Class declaration -->
-
-<rdfs:Class rdf:ID = "Agent">
-  <rdfs:label>Agent</rdfs:label>
-  <rdfs:comment>An agent</rdfs:comment>
-<!-- HELM: now Resource is DCMIType
-<rdfs:subClassOf rdf:resource = "http://dublincore.org/2000/03/13-dctype#Resource" />-->
-  <rdfs:subClassOf rdf:resource = "&dctypens;DCMIType" />
-  <rdfs:isDefinedBy rdf:resource = "&dcagentns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID = "Person">
-  <rdfs:label>Person</rdfs:label>
-  <rdfs:comment>An individual human.</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#Agent" />
-  <rdfs:isDefinedBy rdf:resource = "&dcagentns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID = "Organization">
-  <rdfs:label>Organization</rdfs:label>
-  <rdfs:comment>A group that that acts as an agent. Typical examples of organizations are associations, institutions, business firms, nonprofit enterprises, governments, government agencies, cultural groups, and religious bodies.</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#Agent" />
-  <rdfs:isDefinedBy rdf:resource = "&dcagentns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID = "Event">
-  <rdfs:label>Event</rdfs:label>
-  <rdfs:comment>A non-persistent and time-based activity that acts as an agent. Typical examples of events are conferences, conventions, meetings, exhibitions, expositions ,festivals, athletic contests, workshops, and expeditions.</rdfs:comment>
-   <eor:comment>Name change and relation defined due to overlap with Event declaration from dc:type work... not sure how best to handle this... </eor:comment>
-  <rdfs:subClassOf rdf:resource = "#Agent" />
-  <rdfs:isDefinedBy rdf:resource = "&dcagentns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID = "Object">
-  <rdfs:label>Object</rdfs:label>
-  <rdfs:comment>A device that acts as an agent. Typical examples of objects are mechanical instruments, electronic services, non-human entities, and appliances.</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#Agent" />
-  <rdfs:isDefinedBy rdf:resource = "&dcagentns;" />
-</rdfs:Class>
-
-<!-- Properties associated with Classes -->
-
-<rdf:Property rdf:ID = "agentName">
-  <rdfs:label>Agent Name</rdfs:label>
-  <rdfs:comment>The formal or common name of the Agent</rdfs:comment>
-  <eor:comment>Typically, this would be the name which is used to refer to the Agent. The Family Name First Encoding Value Qualifier may also be used to express the order of the components of the Name.  Vocabularies of Names may also be used as values for this qualifier. </eor:comment>
-  <rdfs:domain rdf:resource = "#Agent" />
-  <rdfs:range rdf:resource = "#NameScheme" />
-  <rdfs:isDefinedBy rdf:resource = "&dcagentns;" />
-</rdf:Property>
-
-<!-- Encoding Scheme declarations for Name -->
-
-<rdfs:Class rdf:ID = "NameScheme">
-  <rdfs:label>Name Encoding Schemes</rdfs:label>
-  <rdfs:comment>A set of name encoding schemes and/or formats.</rdfs:comment>
-  <rdfs:isDefinedBy rdf:resource = "&dcagentns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID = "FNF">
-  <rdfs:label>DCMI Family Name First</rdfs:label>
-  <rdfs:comment>The DCMI encoding rule in which the family name of the Agent appears first, followed by a comma, then all other names.</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#NameScheme" />
-  <rdfs:seeAlso rdf:resource = "http://www.mailbase.ac.uk/lists/dc-agents/files/wd-agent-qual.html" />
-  <rdfs:isDefinedBy rdf:resource = "&dcagentns;" />
-</rdfs:Class>
-
-
-<!-- Agent Affiliation -->
-
-<rdf:Property rdf:ID = "agentAffiliation">
-  <rdfs:label>Agent Affiliation</rdfs:label>
-  <rdfs:comment>The organization with which the named Agent was associated when involved with the resource</rdfs:comment>
-  <rdfs:domain rdf:resource = "#Agent" /> 
- <rdfs:isDefinedBy rdf:resource = "&dcagentns;" />
-</rdf:Property>
-
-<!-- Agent Indetifier -->
-
-<rdf:Property rdf:ID = "agentID">
-  <rdfs:label>Agent Identifier</rdfs:label>
-  <rdfs:comment>An unambiguous reference to the named Agent within a given context.</rdfs:comment>
-  <eor:comment>Recommended best practice is to identify the named Agent
-by means of a string or number conforming to a formal identification
-system. The recommended Encoding Value Qualifier is the Uniform
-Resource Identifier.  In some cases, the Agent Identifier may provide
-or lead to more information about the named Agent.</eor:comment>
-  <eor:comment>This seems very wrong to me... again this seems like a syntactic mechansim for uniqly identifying some resource... this requirement is neccessary for all resource description and should be common (e.g. RDF)</eor:comment>
-  <rdfs:domain rdf:resource = "#Agent" />
-  <rdfs:range rdf:resource = "&dcqns;IdentifierScheme" />
-  <rdfs:isDefinedBy rdf:resource = "&dcagentns;" />
-</rdf:Property>
-
-<!-- Agent Type -->
-
-<rdf:Property rdf:ID = "agentType">
-  <rdfs:label>Agent Type</rdfs:label>
-  <rdfs:comment>The type of the entity for the named Agent.</rdfs:comment>
-  <eor:comment>The values are defined in the DC Agent Type vocabulary (referred to as DCAT1) which is maintained by the DCMI.  Other terms may be used but are not recommended.</eor:comment>
-  <rdfs:domain rdf:resource = "#Agent" />
-  <rdfs:isDefinedBy rdf:resource = "&dcagentns;" />
-</rdf:Property>
-
-
-<!-- End: Agent Declaration -->
-
-</rdf:RDF>
diff --git a/helm/schemas/21-euler b/helm/schemas/21-euler
deleted file mode 100644 (file)
index 22885d7..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- HELM: OLD URL OF SCHEMAS: VRP gives errors --> 
-<!--<rdf:RDF xml:lang="en"
-         xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:rdfs = "http://www.w3.org/2000/01/rdf-schema#"
-         xmlns:eor = "http://dublincore.org/2000/03/13-eor#"
-         xmlns:dc = "http://dublincore.org/2000/03/13-dces#"
-ADDED    xmlns:euler = "http://wip.dublincore.org/2000/11/21-euler#"
-ADDED    xmlns:dcag  = "http://dublincore.org/2000/03/13-dcagent#">-->
-
-<!DOCTYPE rdf:RDF [
-        <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-        <!ENTITY rdfsns 'http://www.w3.org/2000/01/rdf-schema#'>
-        <!ENTITY dcns 'http://www.cs.unibo.it/~schena/dces#'>
-        <!ENTITY eorns 'http://www.cs.unibo.it/~schena/eor#'>
-        <!ENTITY dcagentns 'http://www.cs.unibo.it/~schena/13-dcagent#'>
-        <!ENTITY eulerns 'http://www.cs.unibo.it/~schena/21-euler#'>
-   ]>
-
-<rdf:RDF xmlns:rdf="&rdfns;"
-         xmlns:rdfs="&rdfsns;"
-         xmlns:dc="&dcns;"
-         xmlns:eor="&eorns;"
-         xmlns:dcag="&dcagentns;">
-
-<!-- Description of Schema --> 
-
-<eor:Schema rdf:about="&eulerns;">
-  <rdf:value>The EULER namespace  v1.0</rdf:value> 
-  <dc:title>The EULER  namespace  v1.0</dc:title>
-  <dc:creator> Manjula Patel </dc:creator>
-  <dc:creator> Eric Miller </dc:creator>
-  <dc:publisher>The SCHEMAS Project</dc:publisher>
-  <dc:description>Semantic declarations for supporting EULER</dc:description>
-  <dc:language>English</dc:language>
-  <dc:date>2000-11-21</dc:date>
-</eor:Schema>
-
-<!-- HELM: added # to every internal resource reference -->
-
-<!-- Note: I (emiller@oclc.org ) would suggests *not* modeling
-personal & corporate more along the lines of
-http://dublincore.org/2000/03/13-agents in terms of the entity
-declarations and http://dublincore.org/2000/03/13-marcrel in terms of
-the extra relationships between information resources and agent
-resources... I'll try and model this both ways, but given the time
-contraints, I'm going to start with the simpler and more interoperable
-way... -->
-
-<!-- in this case, EULER simply declares an additional encoding scheme for "names" -->
-
-<rdfs:Class rdf:ID = "CityName">
-  <rdfs:label>City and Name Encoding</rdfs:label>
-  <rdfs:comment>The EULER encoding rule of the following format - City [(Country)]: Name</rdfs:comment>
-<!-- HELM: 1) wrong URI
-           2) NameScheme Class doesn't exist in dcq!
-<rdfs:subClassOf rdf:resource = "http://dublincore.org/2000/03/13-dcq#NameScheme" />-->
-  <rdfs:subClassOf rdf:resource = "&dcagentns;NameScheme" />
-<!-- HELM: wrong definition URI
-<rdfs:isDefinedBy rdf:resource = "http://dublincore.org/2000/03/13-dcagent" />-->
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-
-<rdf:Property rdf:ID="x-carrier">
-  <rdfs:label>Physical Carrier</rdfs:label>
-  <rdfs:comment>Physical carrier of information. The reason for 
-applying this EULER-invented sub-field is that the end-user should be able to 
-conclude if the resource described in the bibliographic record (displayed in the 
-hitlist) is available online or not. Example: book (= paper) -is the physical 
-description (compared to monograph which is an entity, irrespective of how it is 
-'delivered', in a printed version (paper) or in a file). The physical 
-[...] manifestation of the resource. Typically, Format may include the 
-media-type or dimensions of the resource. Format may be used to determine the 
-software, hardware or other equipment needed to display or operate the 
-resource. Examples of dimensions include size and duration.</rdfs:comment>
-  <rdfs:range rdf:resource = "#CarrierTypes" />
-<!-- HELM: 1) wrong URI
-           2) format doesn't exist in dcq!
-<rdfs:subPropertyOf rdf:resource = "http://dublincore.org/2000/03/13-dcq#format" /> -->
-  <rdfs:subPropertyOf rdf:resource = "&dcns;format" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdf:Property>
-
-<rdfs:Class rdf:ID = "CarrierTypes">
-  <rdfs:label>Carrier Types</rdfs:label>
-  <rdfs:comment>Types of EULER Carriers</rdfs:comment>
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-    
-<rdfs:Class rdf:ID = "PrintedMaterial">
-  <rdfs:label>printed material</rdfs:label>
-  <rdfs:comment>printed material</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="HandWrittenMaterial">
-  <rdfs:label>hand-written material</rdfs:label>
-  <rdfs:comment>hand-written material</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;"/>
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="CDROM">
-  <rdfs:label>cdrom</rdfs:label>
-  <rdfs:comment>cdrom</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="DVD">
-  <rdfs:label>dvd</rdfs:label>
-  <rdfs:comment>dvd</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="Slide">
-  <rdfs:label>(dia)slide</rdfs:label>
-  <rdfs:comment>(dia)slide</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="Diskette">
-  <rdfs:label>diskette</rdfs:label>
-  <rdfs:comment>diskette</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;"/>
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="Film">
-  <rdfs:label>film</rdfs:label>
-  <rdfs:comment>film</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="Audio">
-  <rdfs:label>audio</rdfs:label>
-  <rdfs:comment>audio</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="Microfiche">
-  <rdfs:label>microfiche</rdfs:label>
-  <rdfs:comment>microfiche</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="Microfilm">
-  <rdfs:label>microfilm</rdfs:label>
-  <rdfs:comment>microfilm</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="Video">
-  <rdfs:label>video</rdfs:label>
-  <rdfs:comment>video</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="Object">
-  <rdfs:label>object</rdfs:label>
-  <rdfs:comment>object</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="Internet">
-  <rdfs:label>internet</rdfs:label>
-  <rdfs:comment>internet</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:ID="MediaCombination">
-  <rdfs:label>media combination</rdfs:label>
-  <rdfs:comment>media combination</rdfs:comment>
-  <rdfs:subClassOf rdf:resource = "#CarrierTypes" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdfs:Class>
-
-
-<rdf:Property rdf:ID="x-metadata-created">
-  <rdfs:label>Metadata Creation Date</rdfs:label>
-  <rdfs:comment>Date of the creation of the original metadata record. 
-  YYYY=Year, MM=month, DD=day. Use "01" for unknown MM or DD. Useful for 
-  SDI services</rdfs:comment>
-<!-- HELM: 1) wrong URI
-           2) date doesn't exist in dcq!
-<rdfs:subPropertyOf rdf:resource = "http://dublincore.org/2000/03/13-dcq#date" />-->
-  <rdfs:subPropertyOf rdf:resource = "&dcns;date" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdf:Property>
-
-<rdf:Property rdf:ID="identifier">
-  <rdfs:label>EULER identifier</rdfs:label>
-  <rdfs:comment>An unambiguous reference to the resource within a given 
-context: The purpose of this field is to identify the resource in other 
-ways than those provided by the other fields. This can be serial name, page-, 
-issue- or volume-numbers for journal articles or similar. (Can be used 
-differently in different databases, e.g. ISO 4-1984) </rdfs:comment>
-<!-- HELM: 1) wrong URI
-           2) identifier doesn't exist in dcq!
-<rdfs:subPropertyOf rdf:resource = "http://dublincore.org/2000/03/13-dcq#identifier" />-->
-  <rdfs:subPropertyOf rdf:resource = "&dcns;identifier" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdf:Property>
-
-<rdf:Property rdf:ID="fullText">
-  <rdfs:label>Full Text</rdfs:label>
-  <rdfs:comment>The fulltext of web-pages and other resources available as a whole</rdfs:comment>
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdf:Property>
-
-<rdf:Property rdf:ID="eventLocation">
-  <rdfs:label>Event location</rdfs:label>
-  <rdfs:comment>Location of event for/at which the resource described in the record was 
-created</rdfs:comment>
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdf:Property>
-
-<rdf:Property rdf:ID="eventDate">
-  <rdfs:label>Event Date</rdfs:label>
-  <rdfs:comment>Date of event for/at which the resource described in the record was created</rdfs:comment>
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdf:Property>
-
-<rdf:Property rdf:ID="eventName">
-  <rdfs:label>Event Name</rdfs:label>
-  <rdfs:comment>Name of event where document was created</rdfs:comment>
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdf:Property>
-
-<rdf:Property rdf:ID="recordSource">
-  <rdfs:label>Record Source</rdfs:label>
-  <rdfs:comment>The source for the record i.e. describes which information 
- provider has delivered the record.
-  </rdfs:comment>
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdf:Property>
-
-<rdf:Property rdf:ID="recordSourceIdentifier">
-  <rdfs:label>Record Source URL</rdfs:label>
-  <rdfs:comment>Identifier of source record for the description delivered in EULER. URL 
-        pointing back to the original record at information providers' site. </rdfs:comment>
-<!-- HELM: 1) wrong URI
-           2) source doesn't exist in dcq!
-<rdfs:subPropertyOf rdf:resource = "http://dublincore.org/2000/03/13-dcq#source" />-->
-  <rdfs:subPropertyOf rdf:resource = "&dcns;source" />
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdf:Property>
-
-<rdf:Property rdf:ID="recordCreator">
-  <rdfs:label>Record Creator</rdfs:label>
-  <rdfs:comment>Creator of the record (describing the resource), e.g. a reviewer</rdfs:comment>
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdf:Property>
-
-<rdf:Property rdf:ID="delivery">
-  <rdfs:label>Address for delivery information</rdfs:label>
-  <rdfs:comment>Meant to give the URL to the library where the resource described in the 
-record can be acquired. (Pointer to online-order forms etc.)</rdfs:comment>
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdf:Property>
-
-<rdf:Property rdf:ID="deliveryDescription">
-  <rdfs:label>Additional retrieve/delivery information</rdfs:label>
-  <rdfs:comment>Additional information that a user and a local library need to 
-retrieve/deliver the resource described in the record. </rdfs:comment>
-  <rdfs:isDefinedBy rdf:resource = "&eulerns;" />
-</rdf:Property>
-
-</rdf:RDF>
diff --git a/helm/schemas/dces b/helm/schemas/dces
deleted file mode 100644 (file)
index f0723c5..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0"?>
-<!--<!DOCTYPE rdf:RDF [
-        <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-        <!ENTITY rdfsns 'http://www.w3.org/2000/01/rdf-schema#'>
-        <!ENTITY dcns 'http://purl.org/dc/elements/1.1/'>
-        <!ENTITY dctermsns 'http://purl.org/dc/terms/'>
-   ]>-->
-
-<!DOCTYPE rdf:RDF [
-         <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-         <!ENTITY rdfsns 'http://www.w3.org/2000/01/rdf-schema#'>
-         <!ENTITY dcns 'http://www.cs.unibo.it/~schena/dces#'>
-         <!ENTITY dctermsns 'http://www.cs.unibo.it/~schena/dcq#'>
- ]>
-
-<rdf:RDF xmlns:rdf="&rdfns;"
-         xmlns:rdfs="&rdfsns;"
-         xmlns:dc="&dcns;"
-         xmlns:dcterms="&dctermsns;">
-
-<rdf:Description rdf:about="http://dublincore.org/documents/dces/">
-  <dc:title xml:lang="en-US">Dublin Core Metadata Element Set, Version 1.1: Reference Description</dc:title>
-</rdf:Description>
-
-
-<rdf:Description rdf:about="&dcns;">
-  <dc:title xml:lang="en-US">The Dublin Core Element Set v1.1 namespace providing access to it's content by means of an RDF Schema</dc:title>
-  <dc:publisher xml:lang="en-US">The Dublin Core Metadata Initiative</dc:publisher>
-  <dc:description xml:lang="en-US"> The Dublin Core Element Set v1.1 namespace provides URIs for the Dublin Core Elements v1.1.  Entries are declared using RDF Schema language to support RDF applications.  </dc:description>
-  <dc:language xml:lang="en-US">English</dc:language>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-  <dcterms:modified>2002-05-22</dcterms:modified>
-  <dc:source rdf:resource="http://dublincore.org/documents/dces/"/>
-  <dc:source rdf:resource="http://dublincore.org/usage/decisions/"/>
-  <dcterms:isReferencedBy rdf:resource="http://www.dublincore.org/documents/2001/10/26/dcmi-namespace/"/>
-  <dcterms:isRequiredBy rdf:resource="http://purl.org/dc/terms/"/>
-  <dcterms:isReferencedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
-</rdf:Description>   
-
-<rdf:Property rdf:about = "&dcns;title">
-  <rdfs:label xml:lang="en-US">Title</rdfs:label>
-  <rdfs:comment xml:lang="en-US">A name given to the resource.</rdfs:comment>
-  <dc:description xml:lang="en-US">Typically, a Title will be a name by which the resource is formally known.</dc:description>
-  <rdfs:isDefinedBy rdf:resource="&dcns;"/>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-
-<rdf:Property rdf:about="&dcns;contributor">
-  <rdfs:label xml:lang="en-US">Contributor</rdfs:label>
-  <rdfs:comment xml:lang="en-US">An entity responsible for making contributions to the content of the resource.</rdfs:comment>
-  <dc:description xml:lang="en-US">Examples of a Contributor include a person, an organisation, or a service.  Typically, the name of a Contributor should be used to indicate the entity.</dc:description>
-  <rdfs:isDefinedBy rdf:resource="&dcns;"/>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-<rdf:Property rdf:about="&dcns;creator">
-  <rdfs:label xml:lang="en-US">Creator</rdfs:label>
-  <rdfs:comment xml:lang="en-US">An entity primarily responsible for making the content of the resource.</rdfs:comment>
-  <dc:description>Examples of a Creator include a person, an organisation, or a service. Typically, the name of a Creator should be used to indicate the entity.</dc:description>
-  <rdfs:isDefinedBy rdf:resource="&dcns;"/>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-
-<rdf:Property rdf:about="&dcns;publisher">
-  <rdfs:label xml:lang="en-US">Publisher</rdfs:label>
-  <rdfs:comment xml:lang="en-US">An entity responsible for making the resource available.</rdfs:comment>
-  <dc:description xml:lang="en-US"> Examples of a Publisher include a person, an organisation, or a service.  Typically, the name of a Publisher should be used to indicate the entity.</dc:description>
-  <rdfs:isDefinedBy rdf:resource="&dcns;"/>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-
-<rdf:Property rdf:about="&dcns;subject">
-  <rdfs:label xml:lang="en-US">Subject and Keywords</rdfs:label>
-  <rdfs:comment xml:lang="en-US">The topic of the content of the resource.
-  </rdfs:comment>
-  <dc:description xml:lang="en-US">Typically, a Subject will be expressed as keywords, key phrases or classification codes that describe a topic of the resource.  Recommended best practice is to select a value from a controlled vocabulary or formal classification scheme.</dc:description>
-  <rdfs:isDefinedBy rdf:resource="&dcns;"/>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-
-<rdf:Property rdf:about="&dcns;description">
-  <rdfs:label xml:lang="en-US">Description</rdfs:label>
-  <rdfs:comment xml:lang="en-US">An account of the content of the resource.</rdfs:comment>
-  <dc:description xml:lang="en-US">Description may include but is not limited to: an abstract, table of contents, reference to a graphical representation of content or a free-text account of the content.</dc:description>
-  <rdfs:isDefinedBy rdf:resource="&dcns;"/>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-
-<rdf:Property rdf:about="&dcns;date">
-  <rdfs:label xml:lang="en-US">Date</rdfs:label>
-  <rdfs:comment xml:lang="en-US">A date associated with an event in the life cycle of the resource.</rdfs:comment>
-  <dc:description xml:lang="en-US">Typically, Date will be associated with the creation or availability of the resource.  Recommended best practice for encoding the date value is defined in a profile of ISO 8601 [W3CDTF] and follows the YYYY-MM-DD format.</dc:description>
-  <rdfs:isDefinedBy rdf:resource="&dcns;"/>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-
-
-<rdf:Property rdf:about="&dcns;type">
-  <rdfs:label xml:lang="en-US">Resource Type</rdfs:label>
-  <rdfs:comment xml:lang="en-US">The nature or genre of the content of the resource.</rdfs:comment>
-  <dc:description xml:lang="en-US">Type includes terms describing general categories, functions, genres, or aggregation levels for content. Recommended best practice is to select a value from a controlled vocabulary (for example, the list of Dublin Core Types). To describe the physical or digital manifestation of the resource, use the FORMAT element.</dc:description> 
-  <rdfs:isDefinedBy rdf:resource="&dcns;"/>
-  <dcterms:references rdf:resource="http://purl.org/dc/dcmitype/"/>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-<rdf:Property rdf:about="&dcns;format">
-  <rdfs:label xml:lang="en-US">Format</rdfs:label>
-  <rdfs:comment xml:lang="en-US">The physical or digital manifestation of the
-  resource.</rdfs:comment>
-  <dc:description xml:lang="en-US">Typically, Format may include the media-type or dimensions of the resource. Format may be used to determine the software, hardware or other equipment needed to display or operate the resource. Examples of dimensions include size and duration.  Recommended best practice is to select a value from a controlled vocabulary (for example, the list of Internet Media Types defining computer media formats).</dc:description>
-  <rdfs:isDefinedBy rdf:resource="&dcns;"/>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-
-<rdf:Property rdf:about="&dcns;identifier">
-  <rdfs:label>Resource Identifier</rdfs:label>
-  <rdfs:comment xml:lang="en-US">An unambiguous reference to the resource within a given context.</rdfs:comment>
-  <dc:description xml:lang="en-US">Recommended best practice is to identify the resource by means of a string or number conforming to a formal identification system.  Example formal identification systems include the Uniform Resource Identifier (URI) (including the Uniform Resource Locator (URL)), the Digital Object Identifier (DOI) and the International Standard Book Number (ISBN).</dc:description>
-  <rdfs:isDefinedBy rdf:resource = "&dcns;" />
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-
-<rdf:Property rdf:about="&dcns;language">
-  <rdfs:label xml:lang="en-US">Language</rdfs:label>
-  <rdfs:comment xml:lang="en-US">A language of the intellectual content of the resource.</rdfs:comment>
-  <dc:description xml:lang="en-US"> Recommended best practice is to use RFC 3066 [RFC30 66], which, in conjunction with ISO 639 [ISO639], defines two- and three-letter primary language tags with optional subtags.  Examples include "en" or "eng" for English, "akk" for Akkadian, and "en-GB" for English used in the United Kingdom.  </dc:description>
-  <rdfs:isDefinedBy rdf:resource="&dcns;"/>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-  <dcterms:modified>2001-05-21</dcterms:modified>
-  <rdfs:seeAlso
-    rdf:resource="http://www.dublincore.org/usage/decisions/#2001.04"/>
-</rdf:Property>
-
-
-
-
-<rdf:Property rdf:about="&dcns;relation">
-  <rdfs:label xml:lang="en-US">Relation</rdfs:label>
-  <rdfs:comment xml:lang="en-US">A reference to a related resource.</rdfs:comment>
-  <dc:description xml:lang="en-US">Recommended best practice is to reference the resource by means of a string or number conforming to a formal identification system.</dc:description>
-  <rdfs:isDefinedBy rdf:resource="&dcns;"/>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-
-<rdf:Property rdf:about="&dcns;source">
-  <rdfs:label xml:lang="en-US">Source</rdfs:label>
-  <rdfs:comment xml:lang="en-US">A Reference to a resource from which the present resource is derived.</rdfs:comment>
-  <dc:description xml:lang="en-US">The present resource may be derived from the Source resource in whole or in part.  Recommended best practice is to reference the resource by means of a string or number conforming to a formal identification system.</dc:description>
-  <rdfs:isDefinedBy rdf:resource = "&dcns;" />
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-
-
-<rdf:Property rdf:about="&dcns;coverage">
-  <rdfs:label xml:lang="en-US">Coverage</rdfs:label>
-  <rdfs:comment xml:lang="en-US">The extent or scope of the content of the resource.</rdfs:comment>
-  <dc:description xml:lang="en-US">Coverage will typically include spatial location (a place name or geographic coordinates), temporal period (a period label, date, or date range) or jurisdiction (such as a named administrative entity).  Recommended best practice is to select a value from a controlled vocabulary (for example, the Thesaurus of Geographic Names [TGN]) and that, where appropriate, named places or time periods be used in preference to numeric identifiers such as sets of coordinates or date ranges.</dc:description>
-  <rdfs:isDefinedBy rdf:resource = "&dcns;" />
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-
-<rdf:Property rdf:about="&dcns;rights">
-  <rdfs:label xml:lang="en-US">Rights Management</rdfs:label>
-  <rdfs:comment xml:lang="en-US">Information about rights held in and over the resource.</rdfs:comment>
-  <dc:description xml:lang="en-US">Typically, a Rights element will contain a rights management statement for the resource, or reference a service providing such information. Rights information often encompasses Intellectual Property Rights (IPR), Copyright, and various Property Rights.  If the Rights element is absent, no assumptions can be made about the status of these and other rights with respect to the resource.</dc:description>
-  <rdfs:isDefinedBy rdf:resource="&dcns;"/>
-  <dcterms:issued>1999-07-02</dcterms:issued>
-</rdf:Property>
-
-
-</rdf:RDF>
diff --git a/helm/schemas/dcq b/helm/schemas/dcq
deleted file mode 100644 (file)
index 04ea953..0000000
+++ /dev/null
@@ -1,588 +0,0 @@
-<?xml version="1.0"?>
-<!--<!DOCTYPE rdf:RDF [
-     <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-     <!ENTITY rdfsns 'http://www.w3.org/2000/01/rdf-schema#'>
-     <!ENTITY dcns 'http://purl.org/dc/elements/1.1/'>
-     <!ENTITY dctermsns 'http://purl.org/dc/terms/'>
-     <!ENTITY dctypens 'http://purl.org/dc/dcmitype/'>
-  ]>-->
-
-  <!DOCTYPE rdf:RDF [
-     <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-     <!ENTITY rdfsns 'http://www.w3.org/2000/01/rdf-schema#'>
-     <!ENTITY dcns 'http://www.cs.unibo.it/~schena/dces#'>
-     <!ENTITY dctermsns 'http://www.cs.unibo.it/~schena/dcq#'>
-     <!ENTITY dctypens 'http://www.cs.unibo.it/~schena/dctype#'>
-  ]>
-
-  <rdf:RDF 
-     xmlns:rdf="&rdfns;"
-     xmlns:rdfs="&rdfsns;"
-     xmlns:dc="&dcns;"
-     xmlns:dcterms="&dctermsns;"
-     xmlns:dctype="&dctypens;">
-
-
-<rdf:Description rdf:about="&dctermsns;">
-   <dc:title xml:lang="en-US">The Dublin Core Terms Namespace providing access to it's content by means of an RDF Schema.</dc:title>
-   <dc:publisher xml:lang="de">The Dublin Core Metadata Initiative</dc:publisher>
-   <dc:description xml:lang="en-US"> The Dublin Core Terms namespace provides URIs for the Dublin Core Element Set Qualifier Vocabulary. Vocabulary terms are declared using RDF Schema language to support RDF applications.  The Dublin Core qualifiers form a richer vocabulary, which is intended to facilitate discovery of resources.  It will be updated according to dc-usage decisions.</dc:description>
-   <dc:language xml:lang="en-US">English</dc:language>
-   <dcterms:issued>2000-07-11</dcterms:issued>
-   <dcterms:modified>2002-05-24</dcterms:modified>
-   <dc:source 
-      rdf:resource="http://www.dublincore.org/documents/2000/07/11/dcmes-qualifiers/"/>
-   <dc:source rdf:resource="http://www.dublincore.org/usage/decisions/"/>
-   <dcterms:requires rdf:resource="http://purl.org/dc/elements/1.1/"/>
-   <dcterms:references rdf:resource="http://purl.org/dc/dcmitype/"/>
-</rdf:Description>
-    
-
-<rdf:Description 
-  rdf:about="http://www.dublincore.org/documents/2000/07/11/dcmes-qualifiers/">
-  <dc:title  xml:lang="en-US">Dublin Core Qualifiers</dc:title>
-</rdf:Description>
-
-
-<rdf:Description rdf:about="http://www.dublincore.org/usage/decisions/">
-  <dc:title xml:lang="en-US">DCMI Usage Board decisions</dc:title> 
-</rdf:Description>  
-  
-
-  <rdf:Property rdf:about="&dctermsns;alternative">
-    <rdfs:label xml:lang="en-US">Alternative</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Any form of the title used as a substitute or alternative to the formal title of the resource.</rdfs:comment>
-    <dc:description xml:lang="en-US">This qualifier can include Title abbreviations as well as translations.</dc:description>
-    <rdfs:subPropertyOf rdf:resource="&dcns;title"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-
-  <rdfs:Class rdf:about="&dctermsns;SubjectScheme">
-    <rdfs:label xml:lang="en-US">Subject Encoding Schemes</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A set of subject encoding schemes and/or formats</rdfs:comment>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:references rdf:resource="&dcns;subject"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdfs:Class>
-
-  <dcterms:SubjectScheme rdf:about="&dctermsns;LCSH">
-    <rdfs:label xml:lang="en-US">LCSH</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Library of Congress Subject Headings</rdfs:comment>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:SubjectScheme>
-
-  <dcterms:SubjectScheme rdf:about="&dctermsns;LCC">
-    <rdfs:label xml:lang="en-US">LCC</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Library of Congress Classifications</rdfs:comment>
-    <rdf:type rdf:resource="&rdfsns;Class" />
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <rdfs:seeAlso 
-         rdf:resource="http://lcweb.loc.gov/catdir/cpso/lcco/lcco.html"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:SubjectScheme>
-
-  <dcterms:SubjectScheme rdf:about="&dctermsns;DDC">
-    <rdfs:label xml:lang="en-US">DDC</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Dewey Decimal Classification</rdfs:comment>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdfs:seeAlso rdf:resource="http://www.oclc.org/dewey/index.htm" />
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:SubjectScheme>
-
-  <dcterms:SubjectScheme rdf:about="&dctermsns;UDC">
-    <rdfs:label xml:lang="en-US">UDC</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Universal Decimal Classification</rdfs:comment>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdfs:seeAlso rdf:resource="http://www.udcc.org/"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:SubjectScheme>
-
-  <dcterms:SubjectScheme rdf:about="&dctermsns;MESH">
-    <rdfs:label xml:lang="en-US">MeSH</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Medical Subject Headings</rdfs:comment>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdfs:seeAlso rdf:resource="http://www.nlm.nih.gov/mesh/meshhome.html"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:SubjectScheme>
-
-
-  <rdf:Property rdf:about="&dctermsns;abstract">
-    <rdfs:label xml:lang="en-US">Abstract</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A summary of the content of the resource.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;description"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;tableOfContents">
-    <rdfs:label xml:lang="en-US">Table Of Contents</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A list of subunits of the content of the resource.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;description"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-
-  <rdf:Property rdf:about="&dctermsns;created">
-    <rdfs:label xml:lang="en-US">Created</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Date of creation of the resource</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;date"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;issued">
-    <rdfs:label xml:lang="en-US">Issued</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Date of formal issuance (e.g., publication) of the resource.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;date"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;modified">
-    <rdfs:label xml:lang="en-US">Modified</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Date on which the resource was changed</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;date"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;valid">
-    <rdfs:label xml:lang="en-US">Valid</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Date (often a range) of validity of a resource</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;date"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;available">
-    <rdfs:label xml:lang="en-US">Available</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Date (often a range) that the resource will become or did become available.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;date"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-
-
-
-  <rdfs:Class rdf:about="&dctermsns;DateScheme">
-    <rdfs:label xml:lang="en-US">Date Encoding Schemes</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A set of date encoding schemes and/or formats </rdfs:comment>
-    <dcterms:references rdf:resource="&dcns;date"/>
-    <dcterms:references rdf:resource="&dctermsns;temporal"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdfs:Class>
-
-  <dcterms:DateScheme rdf:about="&dctermsns;W3CDTF">
-    <rdfs:label xml:lang="en-US">W3C-DTF</rdfs:label>
-    <rdfs:comment xml:lang="en-US">W3C Encoding rules for dates and times - a profile based on ISO8601 </rdfs:comment>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdf:type rdf:resource="&dctermsns;TemporalScheme"/>
-    <rdfs:seeAlso rdf:resource="http://www.w3.org/TR/NOTE-datetime"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/> 
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:DateScheme>
-
-  <dcterms:DateScheme rdf:about="&dctermsns;Period">
-    <rdfs:label xml:lang="en-US">DCMI Period</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A specification of the limits of a time interval.</rdfs:comment>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdf:type rdf:resource="&dctermsns;TemporalScheme"/>
-    <rdfs:seeAlso 
-      rdf:resource="http://dublincore.org/documents/2000/07/28/dcmi-period/"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/> 
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:DateScheme>
-
-
-
-
-
-
-  <rdf:Property rdf:about="&dctermsns;extent">
-    <rdfs:label xml:lang="en-US">Extent</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The size or duration of the resource</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;format"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;medium">
-    <rdfs:label xml:lang="en-US">Medium</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The material or physical carrier of the resource</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;format"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-
-
-
-  <rdfs:Class rdf:about="&dctermsns;FormatScheme">
-    <rdfs:label xml:lang="en-US">Format Encoding Schemes</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A set of format encoding schemes.</rdfs:comment>
-    <dcterms:references rdf:resource="&dcns;format"/>
-    <rdfs:isDefinedBy rdf:resource ="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdfs:Class>
-
-  <dcterms:FormatScheme rdf:about="&dctermsns;IMT">
-    <rdfs:label xml:lang="en-US">IMT</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The Internet media type of the resource</rdfs:comment>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <rdfs:seeAlso 
-  rdf:resource="http://www.isi.edu/in-notes/iana/assignments/media-types/media-types"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:FormatScheme>
-
-
-
-
-
-
-  <rdfs:Class rdf:about="&dctermsns;LanguageScheme">
-    <rdfs:label xml:lang="en-US">Language Encoding Schemes</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A set of language encoding schemes and/or formats.</rdfs:comment>
-    <dcterms:references rdf:resource="&dcns;language"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdfs:Class>
-
-
-  <dcterms:LanguageScheme rdf:about="&dctermsns;RFC1766">
-    <rdfs:label xml:lang="en-US">RFC1766</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Internet RFC 1766 'Tags for the identification of Language' specifies a two letter code taken from ISO 639, followed optionally by a two letter country code taken from ISO 3166.  </rdfs:comment>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdfs:seeAlso rdf:resource="http://www.ietf.org/rfc/rfc1766.txt"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:LanguageScheme>
-
-  <dcterms:LanguageScheme rdf:about="&dctermsns;ISO639-2">
-    <rdfs:label xml:lang="en-US">ISO 639-2</rdfs:label>
-    <rdfs:comment xml:lang="en-US">ISO 639-2: Codes for the representation of names of languages.</rdfs:comment>
-<!-- ERROR: namespace <rdf:type rdf:resource="&rdfns;Class"/> -->
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdfs:seeAlso 
-      rdf:resource="http://www.loc.gov/standards/iso639-2/langhome.html"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:LanguageScheme>
-
-  <rdf:Property rdf:about="&dctermsns;isPartOf">
-    <rdfs:label xml:lang="en-US">Is Part Of</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The described resource is a physical or logical part of the referenced resource.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;hasPart">
-    <rdfs:label xml:lang="en-US">Has Part</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The described resource includes the referenced resource either physically or logically.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;isVersionOf">
-    <rdfs:label xml:lang="en-US">Is Version Of</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The described resource is a version, edition, or adaptation of the referenced resource. Changes in version imply substantive changes in content rather than differences in format.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;hasVersion">
-    <rdfs:label xml:lang="en-US">Has Version</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The described resource has a version, edition, or adaptation, namely, the referenced resource.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;isFormatOf">
-    <rdfs:label xml:lang="en-US">Is Format Of</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The described resource is the same intellectual content of the referenced resource, but presented in another format.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;hasFormat">
-    <rdfs:label xml:lang="en-US">Has Format</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;" />
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;references">
-    <rdfs:label xml:lang="en-US">References</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The described resource references, cites, or otherwise points to the referenced resource.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource = "&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;isReferencedBy">
-    <rdfs:label xml:lang="en-US">Is Referenced By</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The described resource is referenced, cited, or otherwise pointed to by the referenced resource.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;requires">
-    <rdfs:label xml:lang="en-US">Requires</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The described resource requires the referenced resource to support its function, delivery, or coherence of content.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;isRequiredBy">
-    <rdfs:label xml:lang="en-US">Is Required By</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The described resource is required by the referenced resource, either physically or logically.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;replaces">
-    <rdfs:label xml:lang="en-US">Replaces</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The described resource supplants, displaces, or supersedes the referenced resource.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;isReplacedBy">
-    <rdfs:label xml:lang="en-US">Is Replaced By</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The described resource is supplanted, displaced, or superceded by the referenced resource.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;conformsTo">
-    <rdfs:label xml:lang="en-US">conforms to</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A reference to an established standard to which the resource conforms.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2001-05-21</dcterms:issued>
-    <rdfs:seeAlso 
-       rdf:resource="http://www.dublincore.org/usage/decisions/#2001.01"/>
-  </rdf:Property>
-  
-  <rdf:Property rdf:about="&dctermsns;spatial">
-    <rdfs:label xml:lang="en-US">Spatial</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Spatial characteristics of the intellectual content of the resource.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;coverage"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;temporal">
-    <rdfs:label xml:lang="en-US">Temporal</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Temporal characteristics of the intellectual content of the resource.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;coverage"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdf:Property>
-
-
-
-
-  <rdfs:Class rdf:about="&dctermsns;SpatialScheme">
-    <rdfs:label xml:lang="en-US">Place Encoding Schemes</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A set of geographic place encoding schemes and/or formats</rdfs:comment>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:references rdf:resource="&dctermsns;spatial"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </rdfs:Class>
-
-  <dcterms:SpatialScheme rdf:about="&dctermsns;TGN">
-    <rdfs:label xml:lang="en-US">TGN</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The Getty Thesaurus of Geographic Names</rdfs:comment>
-    <rdfs:seeAlso 
-           rdf:resource="http://www.gii.getty.edu/vocabulary/tgn.html"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:SpatialScheme>
-
-  <dcterms:SpatialScheme rdf:about="&dctermsns;ISO3166">
-    <rdfs:label xml:lang="en-US">ISO3166</rdfs:label>
-    <rdfs:comment xml:lang="en-US">ISO3166 Codes for the representation of names of countries</rdfs:comment>
-    <rdfs:seeAlso rdf:resource="http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:SpatialScheme>
-
-  <dcterms:SpatialScheme rdf:about="&dctermsns;Box">
-    <rdfs:label xml:lang="en-US">DCMI Box</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The DCMI Box identifies a region of space using its geographic limits.</rdfs:comment>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdfs:seeAlso 
-      rdf:resource="http://dublincore.org/documents/2000/07/28/dcmi-box/"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/> 
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:SpatialScheme>
-
-  <dcterms:SpatialScheme rdf:about="&dctermsns;Point">
-    <rdfs:label xml:lang="en-US">DCMI Point</rdfs:label>
-    <rdfs:comment xml:lang="en-US">The DCMI Point identifies a point in space using its geographic coordinates</rdfs:comment>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdfs:seeAlso 
-      rdf:resource="http://dublincore.org/documents/2000/07/28/dcmi-point/"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued> 
-  </dcterms:SpatialScheme>
-
-  <rdfs:Class rdf:about="&dctermsns;TemporalScheme">
-    <rdfs:label xml:lang="en-US">Encoding Schemes
-      for temporal characteristics</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A set of encoding schemes for 
-     the coverage qualifier &quot;temporal&quot;</rdfs:comment>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-    <dcterms:references rdf:resource="&dctermsns;temporal"/>
-  </rdfs:Class>
-
-
-  <rdfs:Class rdf:about="&dctermsns;TypeScheme">
-    <rdfs:label xml:lang="en-US">Resource Type Encoding Schemes</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A set of resource type encoding schemes and/or formats</rdfs:comment>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-    <dcterms:references rdf:resource="&dcns;type"/>
-  </rdfs:Class>
-
-  <dcterms:TypeScheme rdf:about="&dctermsns;DCMIType">
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdfs:label xml:lang="en-US">DCMI Type Vocabulary</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A list of types used to categorize the nature or genre of the content of the resource</rdfs:comment>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <rdfs:seeAlso rdf:resource="&dctypens;"/>
-    <rdfs:seeAlso 
-      rdf:resource="http://dublincore.org/documents/dcmi-type-vocabulary/"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-  </dcterms:TypeScheme> 
-
-  
-  <rdfs:Class rdf:about="&dctermsns;IdentifierScheme">
-    <rdfs:label xml:lang="en-US">Resource Identifier Encoding Schemes</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A set of resource identifier encoding schemes and/or formats</rdfs:comment>
-   <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-    <dcterms:references rdf:resource="&dcns;identifier"/>
-  </rdfs:Class>
-
-  <rdfs:Class rdf:about="&dctermsns;RelationScheme">
-    <rdfs:label xml:lang="en-US">Resource Relation Encoding Schemes</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A set of resource relation encoding schemes and/or formats</rdfs:comment>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-    <dcterms:references rdf:resource="&dcns;relation"/>
-  </rdfs:Class>
-
-  <rdfs:Class rdf:about="&dctermsns;SourceScheme">
-    <rdfs:label xml:lang="en-US">Source Encoding Schemes</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A set of source encoding schemes and/or formats</rdfs:comment>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-    <dcterms:references rdf:resource="&dcns;source"/>
-  </rdfs:Class>
-
-  <dcterms:IdentifierScheme rdf:about="&dctermsns;URI">
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <rdf:type rdf:resource="&dctermsns;RelationScheme"/>
-    <rdf:type rdf:resource="&dctermsns;SourceScheme"/>
-    <rdfs:label xml:lang="en-US">URI</rdfs:label>
-    <rdfs:comment xml:lang="en-US">A URI Uniform Resource Identifier</rdfs:comment>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <rdfs:seeAlso rdf:resource="http://www.ietf.org/rfc/rfc2396.txt"/>
-    <rdfs:seeAlso
-      rdf:resource="http://www.dublincore.org/usage/decisions/#2001.04"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-    <dcterms:modified>2001-05-21</dcterms:modified>
-  </dcterms:IdentifierScheme>
-
-
-  <rdf:Property rdf:about="&dctermsns;audience">
-   <rdfs:label xml:lang="en-US">Audience</rdfs:label>
-   <rdfs:comment>A class of entity for whom the resource is intended or useful.</rdfs:comment>
-   <dc:description>A class of entity may be determined by the creator or the publisher or by a third party.</dc:description>
-   <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-   <rdfs:seeAlso 
-     rdf:resource="http://dublincore.org/usage/decisions/#2001.01"/>
-   <dcterms:issued>2001-05-21</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;mediator">
-   <rdfs:label xml:lang="en-US">Mediator</rdfs:label>
-   <rdfs:comment>A class of entity that mediates access to the resource and for whom the resource is intended or useful.</rdfs:comment>
-   <dc:description>The audience for a resource of two basic classes: (1) an ultimate beneficiary of the resource, and (2) frequently, an entity that mediates access to the resource.  The mediator element refinement represents the second of these two classes.</dc:description>
-   <rdfs:subPropertyOf rdf:resource="&dctermsns;audience"/>
-   <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-   <rdfs:seeAlso 
-     rdf:resource="http://dublincore.org/usage/decisions/#2001.01"/>
-   <dcterms:issued>2001-05-21</dcterms:issued>
-  </rdf:Property>
-
-  <dcterms:LanguageScheme rdf:about="&dctermsns;RFC3066">
-    <rdfs:label xml:lang="en-US">RFC 3066</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Internet RFC 3066 'Tags for the Identification of Languages' 
-        specifies a primary subtag which is a two-letter code taken from ISO 639 part 1 or a three-letter 
-        code taken from ISO 639 part 2, followed optionally by a two-letter country code taken from 
-        ISO 3166.  When a language in ISO 639 has both a two-letter and three-letter code, use the 
-        two-letter code; when it has only a three-letter code, use the three-letter code.  This RFC 
-        replaces RFC 1766.</rdfs:comment>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <rdf:type rdf:resource="&rdfsns;Class"/>
-    <dcterms:issued>2002-07-13</dcterms:issued>
-  </dcterms:LanguageScheme>
-
-  <rdf:Property rdf:about="&dctermsns;dateAccepted">
-    <rdfs:label xml:lang="en-US">Date Accepted</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Date of acceptance of the resource (e.g. of thesis by university 
-        department, of article by journal, etc.).
-        </rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;date"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2002-07-13</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;dateCopyrighted">
-    <rdfs:label xml:lang="en-US">Date Copyrighted</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Date of a statement of copyright.</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;date"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2002-07-13</dcterms:issued>
-  </rdf:Property>
-
-  <rdf:Property rdf:about="&dctermsns;dateSubmitted">
-    <rdfs:label xml:lang="en-US">Date Submitted</rdfs:label>
-    <rdfs:comment xml:lang="en-US">Date of submission of the resource (e.g. thesis, articles, etc.).
-        </rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;date"/>
-    <rdfs:isDefinedBy rdf:resource="&dctermsns;"/>
-    <dcterms:issued>2002-07-13</dcterms:issued>
-  </rdf:Property>
-
-
-</rdf:RDF> 
-
diff --git a/helm/schemas/dctype b/helm/schemas/dctype
deleted file mode 100644 (file)
index 184c032..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0"?>
-
-<!--<!DOCTYPE rdf:RDF [
-     <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-     <!ENTITY rdfsns 'http://www.w3.org/2000/01/rdf-schema#'>
-     <!ENTITY dcns 'http://purl.org/dc/elements/1.1/'>
-     <!ENTITY dctermsns 'http://purl.org/dc/terms/'>
-     <!ENTITY dctypens 'http://purl.org/dc/dcmitype/'>
-  ]>-->
-
- <!DOCTYPE rdf:RDF [
-         <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-         <!ENTITY rdfsns 'http://www.w3.org/2000/01/rdf-schema#'>
-         <!ENTITY dcns 'http://www.cs.unibo.it/~schena/dces#'>
-         <!ENTITY dctermsns 'http://www.cs.unibo.it/~schena/dcq#'>
-         <!ENTITY dctypens 'http://www.cs.unibo.it/~schena/dctype#'>
- ]>
-
- <rdf:RDF 
-         xmlns:rdf="&rdfns;"
-         xmlns:rdfs="&rdfsns;"
-         xmlns:dc="&dcns;"
-         xmlns:dcterms="&dctermsns;"
-         xmlns:dctype="&dctypens;">         
-<!--ERROR: namespace
-         xmlns:dcmitype="&dctypens;" --> 
-
-
-<rdf:Description rdf:about="&dctypens;">
-    <dc:title xml:lang="en-US">The DCMI Types namespace providing access to its content by means of an RDF Schema</dc:title>
-    <dc:publisher xml:lang="en-US">The Dublin Core Metadata Initiative</dc:publisher>
-    <dc:description xml:lang="en-US"> The Dublin Core Types namespace provides URIs for the entries of the DCMI Type Vocabulary. Entries are declared using RDF Schema language to support RDF applications.  The Schema will be updated according to dc-usage decisions.  </dc:description>
-    <dc:language xml:lang="en-US">English</dc:language>
-    <dcterms:requires 
-        rdf:resource="http://dublincore.org/documents/dcmi-type-vocabulary/"/>
-    <dc:source 
-      rdf:resource="http://dublincore.org/documents/dcmi-type-vocabulary/"/>
-    <dc:source rdf:resource="http://dublincore.org/usage/terms/"/>
-    <dcterms:requires rdf:resource="http://purl.org/dc/elements/1.1/"/>
-    <dcterms:isReferencedBy rdf:resource="http://purl.org/dc/terms/"/>
-    <dcterms:issued>2000-07-11</dcterms:issued>
-    <dcterms:modified>2002-05-22</dcterms:modified>
-  </rdf:Description>
-
-
- <dcterms:TypeScheme rdf:about="&dctermsns;DCMIType">
-   <rdf:type rdf:resource="&rdfsns;Class"/> 
-   <dc:description xml:lang="en-US">The DCMI Type Vocabulary provides a general, 
-cross-domain list of approved terms that may be used as values for the 
-Resource Type element to identify the genre of a resource.</dc:description>
-   <dcterms:issued>2000-07-11</dcterms:issued>
- </dcterms:TypeScheme>
-
-
- <dcterms:DCMIType rdf:about="&dctypens;Collection">
-   <rdfs:label xml:lang="en-US">Collection</rdfs:label>
-   <rdfs:isDefinedBy rdf:resource="&dctypens;"/>
-   <rdfs:comment xml:lang="en-US">A collection is an aggregation of items. The term collection means that the resource is described as a group; its parts may be separately described and navigated.</rdfs:comment>
-   <rdf:type rdf:resource="&rdfsns;Class"/>
-   <dcterms:issued>2000-07-11</dcterms:issued>
- </dcterms:DCMIType>
-
- <dcterms:DCMIType rdf:about="&dctypens;Dataset">
-   <rdfs:label xml:lang="en-US">Dataset</rdfs:label>
-   <rdfs:isDefinedBy rdf:resource="&dctypens;"/>
-   <rdfs:comment xml:lang="en-US">A dataset is information encoded in a defined structure (for example, lists, tables, and databases), intended to be useful for direct machine processing.</rdfs:comment>
-   <rdf:type rdf:resource="&rdfsns;Class"/>
-   <dcterms:issued>2000-07-11</dcterms:issued>
- </dcterms:DCMIType>
-
- <dcterms:DCMIType rdf:about="&dctypens;Event">
-   <rdfs:label xml:lang="en-US">Event</rdfs:label>
-   <rdfs:isDefinedBy rdf:resource="&dctypens;"/>
-   <rdfs:comment xml:lang="en-US">An event is a non-persistent, time-based 
-     occurrence. Metadata for an event provides descriptive information that 
-     is the basis for discovery of the purpose, location, duration, responsible agents, and links to related events and resources. The resource of type Event may not be retrievable if the described instantiation has expired or is yet to occur. Examples - exhibition, web-cast, conference, workshop, open-day, performance, battle, trial, wedding, tea-party, conflagration.</rdfs:comment>
-   <rdf:type rdf:resource="&rdfsns;Class"/>
-   <dcterms:issued>2000-07-11</dcterms:issued>
- </dcterms:DCMIType>
-
- <dcterms:DCMIType rdf:about="&dctypens;Image">
-   <rdfs:label xml:lang="en-US">Image</rdfs:label>
-   <rdfs:isDefinedBy rdf:resource="&dctypens;"/>
-   <rdfs:comment xml:lang="en-US">An image is a primarily symbolic visual representation other than text. For example - images and photographs of physical objects, paintings, prints, drawings, other images and graphics, animations and moving pictures, film, diagrams, maps, musical notation. Note that image may include both electronic and physical representations.</rdfs:comment>
-   <rdf:type rdf:resource="&rdfsns;Class"/>
-   <dcterms:issued>2000-07-11</dcterms:issued>
- </dcterms:DCMIType>
-
- <dcterms:DCMIType rdf:about="&dctypens;InteractiveResource">
-   <rdfs:label xml:lang="en-US">Interactive Resource</rdfs:label>
-   <rdfs:isDefinedBy rdf:resource="&dctypens;"/>
-   <rdfs:comment xml:lang="en-US">An interactive resource is a resource which requires interaction from the user to be understood, executed, or experienced. For example - forms on web pages, applets, multimedia learning objects, chat services, virtual reality.</rdfs:comment>
-   <rdf:type rdf:resource="&rdfsns;Class"/>
-   <dcterms:issued>2000-07-11</dcterms:issued>
- </dcterms:DCMIType>
-
- <dcterms:DCMIType rdf:about="&dctypens;Software">
-   <rdfs:label xml:lang="en-US">Software</rdfs:label>
-   <rdfs:isDefinedBy rdf:resource="&dctypens;"/>
-   <rdfs:comment xml:lang="en-US">Software is a computer program in source or compiled form which may be available for installation non-transiently on another machine. For software which exists only to create an interactive environment, use interactive instead.</rdfs:comment>
-   <rdf:type rdf:resource="&rdfsns;Class"/>
-   <dcterms:issued>2000-07-11</dcterms:issued>
- </dcterms:DCMIType>
-
- <dcterms:DCMIType rdf:about="&dctypens;Service">
-   <rdfs:label xml:lang="en-US">Service</rdfs:label>
-   <rdfs:isDefinedBy rdf:resource="&dctypens;"/>
-   <rdfs:comment xml:lang="en-US">A service is a system that provides one or more functions of value to the end-user. Examples include: a photocopying service, a banking service, an authentication service, interlibrary loans, a Z39.50 or Web server.</rdfs:comment>
-   <rdf:type rdf:resource="&rdfsns;Class"/>
-   <dcterms:issued>2000-07-11</dcterms:issued>
- </dcterms:DCMIType>
-
- <dcterms:DCMIType rdf:about="&dctypens;Sound">
-   <rdfs:label xml:lang="en-US">Sound</rdfs:label>
-   <rdfs:isDefinedBy rdf:resource="&dctypens;"/>
-   <rdfs:comment xml:lang="en-US">A sound is a resource whose content is primarily intended to be rendered as audio. For example - a music playback file format, an audio compact disc, and recorded speech or sounds.</rdfs:comment>
-   <rdf:type rdf:resource="&rdfsns;Class"/>
-   <dcterms:issued>2000-07-11</dcterms:issued>
- </dcterms:DCMIType>
-
- <dcterms:DCMIType rdf:about="&dctypens;Text">
-   <rdfs:label xml:lang="en-US">Text</rdfs:label>
-   <rdfs:isDefinedBy rdf:resource="&dctypens;"/>
-   <rdfs:comment xml:lang="en-US">A text is a resource whose content is primarily words for reading. For example - books, letters, dissertations, poems, newspapers, articles, archives of mailing lists. Note that facsimiles or images of texts are still of the genre text.</rdfs:comment>
-   <rdf:type rdf:resource="&rdfsns;Class"/>
-   <dcterms:issued>2000-07-11</dcterms:issued>
- </dcterms:DCMIType>
-
- </rdf:RDF>
diff --git a/helm/schemas/schema-h b/helm/schemas/schema-h
deleted file mode 100644 (file)
index c852385..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Rdf Schema definition for CIC XML files:
-xmlns:h="http://www.cs.unibo.it/~schena/schema-h#" -->
-
-<!DOCTYPE rdf:RDF [
-        <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-        <!ENTITY rdfsns 'http://www.w3.org/2000/01/rdf-schema#'>
-        <!ENTITY hthns 'http://www.cs.unibo.it/~schena/schema-hth#'>
-        <!ENTITY hns 'http://www.cs.unibo.it/~schena/schema-h#'>
-        <!ENTITY xschemans 'http://www.w3.org/1999/XMLSchema-datatypes#'>
-        <!ENTITY dcns 'http://www.cs.unibo.it/~schena/dces#'>
-        <!ENTITY dcqns 'http://www.cs.unibo.it/~schena/dcq#'>
-   ]>
-
-<rdf:RDF xml:lang="en"
-       xmlns:rdf="&rdfns;"
-       xmlns:rdfs="&rdfsns;"
-       xmlns:xs="&xschemans;"
-       xmlns:dc="&dcns;"
-       xmlns:dcq="&dcqns;"
-       xmlns:hth="&hthns;">
-
-<!-- RICORDA: metadati solo su oggetto (come teoria ma piu' specifici) (non 
-distinzione tipi di body) e non ridondanze se non riducono il numero di doc 
-da parsare  -->
-
-<!-- Versione con rdf:parseType="resource" per le proprieta' strutturate
-     refObj e backPointer. Il valore di occurrence e' solo di tipo URI. -->
-
-<!-- Description of Schema -->
-       
-<rdf:Description rdf:about="&hns;">
-  <rdfs:label>The HELM Element Set v0.1</rdfs:label>
-  <dc:title>The HELM Object Element Set v0.1</dc:title>
-  <dc:publisher>The HELM Project</dc:publisher>
-  <dc:description>The HELM metadata vocabulary is a simple vocabulary
-      intended to facilitate discovery of mathematical resources. 
-  </dc:description>
-  <dc:language>English</dc:language>
-  <dc:relation rdf:resource="http://www.cs.unibo.it/helm/"/>
-  <dcq:isRequiredBy rdf:resource="&hns;"/>
-  <dcq:conformsTo rdf:resource="http://www.w3.org/RDF/"/>
-  <dcq:issued>2000-6-3</dcq:issued>
-  <dcq:modified>2002-9-6</dcq:modified>
-  <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Description>
-
-
-<!-- Classes -->
-
-<rdfs:Class rdf:about="&hns;Object">
-     <rdfs:comment>Mathematical objects represented by a CIC XML 
-file</rdfs:comment>
-     <rdfs:subClassOf rdf:resource="&hthns;MathResource"/>
-     <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<!-- Objects can inherit its dc properties -->
-<rdfs:Class rdf:about="&hns;DirectoryOfObjects">
-     <rdfs:comment>Mathematical resources (directories) represented by sets 
-of CIC XML files, contained in the tree that has the dir as root </rdfs:comment>
-     <rdfs:subClassOf rdf:resource="&hthns;MathResource"/>
-     <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hns;Statement">
-     <rdfs:comment>Types of objects</rdfs:comment>
-     <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hns;Body">
-     <rdfs:comment>Terms of objects</rdfs:comment>
-     <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<!--<rdfs:Class rdf:about="&hns;Occurrence">
-     <rdfs:comment>Occurrences of an object inside an object</rdfs:comment>
-     <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>-->
-
-<rdfs:Class rdf:about="&hns;Position">
-     <rdfs:comment>Positions of occurrences of an object inside an object</rdfs:comment>
-     <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hns;Postit">
-     <rdfs:comment>Additional information associated to fragments of the objects</rdfs:comment>
-     <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hns;Const">
-     <rdfs:comment>Constants in the body of an object</rdfs:comment>
-     <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hns;StatementId">
-     <rdfs:comment>Identifiers in the statement</rdfs:comment>
-     <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hns;BodyId">
-     <rdfs:comment>Identifiers in the body</rdfs:comment>
-     <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hns;ImplArg">
-     <rdfs:comment>Implicit arguments</rdfs:comment>
-     <rdfs:isDefinedBy rdf:resource = "&hns;" /> 
-</rdfs:Class>
-
-<!-- Instances of the class h:Position -->
-
-<rdfs:Class rdf:about="&hns;MainHypothesis">
-    <rdfs:comment>Occurrences of an object in head position of some hypothesis 
-     of an object statement</rdfs:comment>
-    <rdf:type rdf:resource="&hns;Position"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hns;InHypothesis">
-    <rdfs:comment>Occurrences of an object in the hypotheses of an object 
-     statement</rdfs:comment>
-    <rdf:type rdf:resource="&hns;Position"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hns;MainConclusion">
-    <rdfs:comment>Occurrences of an object in head position of the 
-     conclusion of an object statement</rdfs:comment>
-    <rdf:type rdf:resource="&hns;Position"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hns;InConclusion">
-    <rdfs:comment>Occurrences of an object in the conclusion of an object
-     statement</rdfs:comment>  
-    <rdf:type rdf:resource="&hns;Position"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hns;InBody">
-    <rdfs:comment>Occurrences of an object only in an object body (not in the 
-     statement)</rdfs:comment>
-    <rdf:type rdf:resource="&hns;Position"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdfs:Class>
-
-<!-- Properties -->
-
-<rdf:Property rdf:about="&hns;statement">
-    <rdfs:comment>Statement</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;Object"/>
-    <rdfs:range rdf:resource="&hns;Statement"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;body">
-    <rdfs:comment>Body</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;Object"/>
-    <rdfs:range rdf:resource="&hns;Body"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;statementId">
-    <rdfs:comment>Statement identifier</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;Statement"/>
-    <rdfs:range rdf:resource="&hns;StatementId"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;constrId">
-    <rdfs:comment>Constructor identifier of the statement conclusion</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;StatementId"/>
-    <rdfs:range rdf:resource="&hthns;HelmID"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;listId">
-    <rdfs:comment>List of all ids in the domain</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;StatementId"/>
-    <rdfs:domain rdf:resource="&hns;BodyId"/>
-    <rdfs:range rdf:resource="&rdfns;Seq"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;bodyId">
-    <rdfs:comment>Body identifier</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;Body"/>
-    <rdfs:range rdf:resource="&hns;BodyId"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;refObj">
-    <rdfs:comment>Reference to an object</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;Object"/>
-<!--    <rdfs:range rdf:resource="&hns;Occurrence"/>-->
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;occurrence">
-    <rdfs:comment>Position of an occurrence</rdfs:comment>
-<!--    <rdfs:domain rdf:resource="&hns;Occurrence"/>-->
-    <rdfs:range rdf:resource="&hns;Object"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;constrImplArg">
-    <rdfs:comment>Implicit arguments of constructors</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;Statement"/>
-    <rdfs:range rdf:resource="&hns;ImplArg"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;objImplArg">
-    <rdfs:comment>Implicit arguments of objects</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;Object"/>
-    <rdfs:range rdf:resource="&hns;ImplArg"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;listImplArg">
-    <rdfs:comment>List of implicit arguments</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;ImplArg"/>
-    <rdfs:range rdf:resource="&rdfns;Seq"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;backPointer">
-    <rdfs:comment>Backwards pointer: who points the object</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;Object"/>
-<!--    <rdfs:range rdf:resource="&hns;Occurrence"/> -->
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;position">
-    <rdfs:comment>Position of an occurrence</rdfs:comment>
-<!--    <rdfs:domain rdf:resource="&hns;Occurrence"/>-->
-    <rdfs:range rdf:resource="&hns;Position"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;postit">
-    <rdfs:comment>Postit</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;Object"/>
-    <rdfs:range rdf:resource="&hns;Postit"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;content">
-    <rdfs:comment>Content of a Postit</rdfs:comment>
-    <rdfs:domain rdf:resource="#Postit"/>
-    <rdfs:range rdf:resource="&xschemans;string"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;refersTo">
-    <rdfs:comment>Identifies the object fragment (Xpointer) which Postit
-refers to</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;Postit"/>
-    <rdfs:range rdf:resource="&hns;Object"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hns;coercion">
-    <rdfs:comment>If the object can be a coercion</rdfs:comment>
-    <rdfs:domain rdf:resource="&hns;Object"/>
-    <rdfs:range rdf:resource="&xschemans;boolean"/>
-    <rdfs:isDefinedBy rdf:resource = "&hns;" /> 
-</rdf:Property>
-
-</rdf:RDF>
\ No newline at end of file
diff --git a/helm/schemas/schema-hth b/helm/schemas/schema-hth
deleted file mode 100644 (file)
index 10e20c0..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Rdf Schema definition for theory files:
-xmlns:hth="http://www.cs.unibo.it/~schena/schema-hth#" -->
-
-<!DOCTYPE rdf:RDF [
-        <!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-        <!ENTITY rdfsns 'http://www.w3.org/2000/01/rdf-schema#'>
-        <!ENTITY dcns 'http://www.cs.unibo.it/~schena/dces#'>
-        <!ENTITY dcqns 'http://www.cs.unibo.it/~schena/dcq#'>
-        <!ENTITY dctns 'http://www.cs.unibo.it/~schena/dctype#'>
-        <!ENTITY xschemans 'http://www.w3.org/1999/XMLSchema-datatypes#'>
-        <!ENTITY hthns 'http://www.cs.unibo.it/~schena/schema-hth#'>
-       <!ENTITY hns 'http://www.cs.unibo.it/~schena/schema-h#'>
-   ]>
-
-<rdf:RDF xml:lang="en"
-       xmlns:rdf="&rdfns;"
-       xmlns:rdfs="&rdfsns;"
-       xmlns:dc="&dcns;"
-       xmlns:dcq="&dcqns;"
-       xmlns:dct="&dctns;"
-       xmlns:xs="&xschemans;">
-
-<!-- RICORDA: specificare i contenuti dei dc elements: problemi con RSSDB -->
-<!-- RICORDA: aggiungi euler properties -->
-
-<!-- Description of Schema -->
-       
-<rdf:Description rdf:about="&hthns;">
-  <rdfs:label>The HELM Element Set v0.1</rdfs:label>
-  <dc:title>The HELM Theory Element Set v0.1</dc:title>
-  <dc:publisher>The HELM Project</dc:publisher>
-  <dc:description>The HELM metadata vocabulary is a simple vocabulary
-      intended to facilitate discovery of mathematical resources. 
-  </dc:description>
-  <dc:language>English</dc:language>
-  <dc:relation rdf:resource="http://www.cs.unibo.it/helm/"/>
-  <dcq:isRequiredBy rdf:resource="&hns;"/>
-  <dcq:conformsTo rdf:resource="http://www.w3.org/RDF/"/>
-  <dcq:issued>2000-6-3</dcq:issued>
-  <dcq:modified>2002-9-6</dcq:modified>
-  <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdf:Description>
-
-
-<!-- Classes -->
-
-<rdfs:Class rdf:about="&hthns;MathResource">
-     <rdfs:comment>Mathematical resources</rdfs:comment>
-     <rdfs:subClassOf rdf:resource="&rdfsns;Resource"/>
-     <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hthns;Theory">
-     <rdfs:comment>Mathematical resources represented by theories</rdfs:comment>
-     <rdfs:subClassOf rdf:resource="&hthns;MathResource"/>
-     <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hthns;TheoryItem">
-     <rdfs:comment>Theory items represented by: axiom, fact, definition, theorem, lemma, corollary, variable, specified by a XPath expression</rdfs:comment>
-     <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hthns;Contact">
-     <rdfs:comment>Creator contact information</rdfs:comment>
-     <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdfs:Class>
-
-<!-- Subclass of dct:Text and dct:Software -->
-
-<!-- Non necessario: uso direttamente la MathResource interessata per non
-intendere implicitamente le stesse entita' (introduco cicli espliciti). -->
-<!--<rdfs:Class rdf:about="&hthns;HelmURI">
-     <rdfs:comment>HELM URIs of a mathematical resource. Subclass of dcq:URI 
-which is an instance of the IdentifierScheme class</rdfs:comment>
-     <rdfs:subClassOf rdf:resource="&dcqns;URI"/> 
-     <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdfs:Class>-->
-
-<rdfs:Class rdf:about="&hthns;HELMText">
-     <rdfs:comment>HELM File text types of a mathematical resource (possible 
-values of the Dublin Core property type). Possible values of the rdf:about 
-attribute can be: Abstract, Paper, Bibliography, HomePage, LectureNotes, 
-Monograph, PatentSpec, Preprints, Proceedings, Review, Separatum, Serial, 
-TechReport, Thesis, Enclosure, General. General describes a document not of 
-the previous types. A helm theory has no type per se. Subclass of dcq:Text 
-which is an instance of the TypeScheme class</rdfs:comment>
-     <rdfs:subClassOf rdf:resource="&dctns;Text"/> 
-     <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdfs:Class>
-
-<rdfs:Class rdf:about="&hthns;HELMSoftware">
-     <rdfs:comment>HELM File software types of a mathematical resource 
-(possible values of the Dublin Core property type). Possible values of the 
-rdf:about attribute can be: Exec, Source. Subclass of dcq:Software 
-which is an instance of the TypeScheme class</rdfs:comment>
-     <rdfs:subClassOf rdf:resource="&dctns;Software"/> 
-     <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdfs:Class>
-
-<!-- Instances of dcq:FormatScheme and dcq:IdentifierScheme -->
-<!-- Instances are only for typing classes not for using.   -->
-
-<dcq:FormatScheme rdf:about="&hthns;HelmFormat">
-     <rdfs:comment>Instance of the class FormatScheme to describe HELM File 
-formats of a mathematical resource (possible values of the Dublin Core property
-format). Possible values of the rdf:about 
-attribute can be XML.cic, XML.hol, XML.mizar. Each Helm format describes 
-a logical framework. The class dcq:IMT contains values as text/xml, text/xhtml,
-text/mml, text/ps, text/tex, text/pdf.</rdfs:comment>
-     <rdf:type rdf:resource="&rdfsns;Class"/>
-     <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</dcq:FormatScheme>
-
-<dcq:IdentifierScheme rdf:about="&hthns;HelmID">
-     <rdfs:comment>Instance of the class IdentifierScheme to describe HELM 
-identifiers</rdfs:comment>
-     <rdf:type rdf:resource="&rdfsns;Class"/>
-     <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</dcq:IdentifierScheme>
-
-<!--  SubProperties of dc:description, dc:creator, dc:relation and 
-      hth:dependence                                               -->
-
-<!-- SubProperty of dc:title -->
-<rdf:Property rdf:about="&hthns;shortName">
-    <rdfs:comment>Short name (alias) of the mathematical resource</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;title"/>
-    <rdfs:domain rdf:resource="&hthns;MathResource"/>
-    <rdfs:range rdf:resource="&xschemans;string"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" /> 
-</rdf:Property>
-
-
-<!-- There are also dcq:created and dcq:modified dc:date subProperties -->
-<rdf:Property rdf:ID="firstVersion">
-    <rdfs:comment>Any additional information about the first version of the
-mathematical resource</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;description"/> 
-    <rdfs:domain rdf:resource="#MathResource"/>
-    <rdfs:range rdf:resource="&xschemans;string"/>
-</rdf:Property>
-
-<rdf:Property rdf:ID="modified">
-    <rdfs:comment>Any additional information about the modified version of the
-mathematical resource</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;description"/> 
-    <rdfs:domain rdf:resource="#MathResource"/>
-    <rdfs:range rdf:resource="&xschemans;string"/>
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;institution">
-    <rdfs:comment>Affiliated institution of the creator of the mathematical 
-resource</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;creator"/>
-    <rdfs:domain rdf:resource="&hthns;MathResource"/>
-    <rdfs:range rdf:resource="&xschemans;string"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" /> 
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;contact">
-    <rdfs:comment>Contact of the creator of the mathematical 
-resource</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;creator"/>
-    <rdfs:domain rdf:resource="&hthns;MathResource"/>
-    <rdfs:range rdf:resource="#Contact"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" /> 
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;isBasedOn">
-    <rdfs:comment>A relation between mathematical resources</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:domain rdf:resource="&hthns;MathResource"/>
-    <rdfs:range rdf:resource="&hthns;MathResource"/>  
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;isBasisFor">
-    <rdfs:comment>A relation between mathematical resources</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:domain rdf:resource="&hthns;MathResource"/>
-    <rdfs:range rdf:resource="&hthns;MathResource"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;isSourceFor">
-    <rdfs:comment>A relation between mathematical resources</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:domain rdf:resource="&hthns;MathResource"/>
-    <rdfs:range rdf:resource="&hthns;MathResource"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;hasSource">
-    <rdfs:comment>A relation between mathematical resources</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&dcns;relation"/>
-    <rdfs:domain rdf:resource="&hthns;MathResource"/>
-    <rdfs:range rdf:resource="&hthns;MathResource"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;uses"> 
-    <rdfs:comment>A dependence between theory items (for instance: between a theorem or anything else and a variable)</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&hthns;dependence"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;isUsedBy">
-    <rdfs:comment>A dependence between theory items (for instance: between a variable and
-a theorem or anything else)</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&hthns;dependence"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;hasConsequence">
-    <rdfs:comment>A dependence between theory items (for instance: between a theorem and
-a corollary)</rdfs:comment>   
-    <rdfs:subPropertyOf rdf:resource="&hthns;dependence"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;isConsequenceOf">
-    <rdfs:comment>A dependence between theory items (for instance: between a corollary
-and a theorem). Alternatively: IsResultOf</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&hthns;dependence"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;hasPremise">
-    <rdfs:comment>A dependence between theory items (for instance: between a theorem
-and a lemma)</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&hthns;dependence"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" />
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;isPremiseOf">
-    <rdfs:comment>A dependence between theory items (for instance: between a lemma
-and a theorem)</rdfs:comment>
-    <rdfs:subPropertyOf rdf:resource="&hthns;dependence"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" /> 
-</rdf:Property>
-
-<!-- Properties -->
-
-<rdf:Property rdf:about="&hthns;theoryItem">
-    <rdfs:comment>Theory item</rdfs:comment>
-    <rdfs:domain rdf:resource="&hthns;Theory"/>
-    <rdfs:range rdf:resource="&hthns;TheoryItem"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" /> 
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;dependence">
-    <rdfs:comment>Dependence between theory items</rdfs:comment>
-    <rdfs:domain rdf:resource="&hthns;TheoryItem"/>
-    <rdfs:range rdf:resource="&hthns;HelmID"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" /> 
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;itemType">
-    <rdfs:comment>Axiom, Fact, Definition, Theorem, Lemma, Corollary, 
-Variable. Redundant info: it is already captured by the corresponding xml data</rdfs:comment>
-    <rdfs:domain rdf:resource="&hthns;TheoryItem"/>
-    <rdfs:range rdf:resource="&xschemans;string"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" /> 
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;label">
-    <rdfs:comment>Description of the kind of objects: data type, 
-algorithm, specification, theorem containing algorithm, verification (that the 
-implementation satisfies the specification), predicate/relation, proposition</rdfs:comment>
-    <rdfs:domain rdf:resource="&hthns;TheoryItem"/>
-    <rdfs:range rdf:resource="&xschemans;string"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" /> 
-</rdf:Property>
-
-<!-- ex. f:N->Z => N>->Z and n:Nat => n:Z -->
-<rdf:Property rdf:about="&hthns;isCoercion">
-    <rdfs:comment>A Definition item can be a coercion</rdfs:comment>
-    <rdfs:domain rdf:resource="&hthns;TheoryItem"/>
-    <rdfs:range rdf:resource="&xschemans;boolean"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" /> 
-</rdf:Property>
-
-<!-- The id info is no more contained in the theory xml doc, so there isn't
-redundant info between metadata and data -->
-<rdf:Property rdf:about="&hthns;ident">
-    <rdfs:comment>Identifier of a theory item</rdfs:comment>
-    <rdfs:domain rdf:resource="&hthns;TheoryItem"/>
-    <rdfs:range rdf:resource="&hthns;HelmID"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" /> 
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;email">
-    <rdfs:comment>E-mail of the creator of the mathematical 
-resource</rdfs:comment>
-    <rdfs:domain rdf:resource="&hthns;Contact"/>
-    <rdfs:range rdf:resource="&xschemans;string"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" /> 
-</rdf:Property>
-
-<rdf:Property rdf:about="&hthns;address">
-    <rdfs:comment>Address of the creator of the mathematical 
-resource</rdfs:comment>
-    <rdfs:domain rdf:resource="&hthns;Contact"/>
-    <rdfs:range rdf:resource="&xschemans;string"/>
-    <rdfs:isDefinedBy rdf:resource = "&hthns;" /> 
-</rdf:Property>
-
-<!-- HELM: Constraining an external (dc) property to a particular range and 
-domain (hth:MathResource) should be possible. VRP gives a Warning when 
-constraining (extending, adding constraints to) the range of a property 
-defined in another schema (Consistency problems?No because it's an error 
-modifying the original constraints): but where is the extensibility and 
-reusability of RDF schemas? It's ok specializing a property with a 
-subProperty. Anyway if the range of a property is not defined, VRP validates 
-both if the property value is a resource, a class or a Literal.
-<rdf:Description rdf:about = "&dcns;type">
-    <rdfs:domain rdf:resource="&hthns;MathResource"/>
-</rdf:Description> -->
-
-</rdf:RDF>
diff --git a/helm/scripts/Makefile b/helm/scripts/Makefile
deleted file mode 100644 (file)
index ccb1b24..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-
-all: 
-       chmod ug+w marcello*rc phd*rc
-       ./makeit V7 marcello marcello <template.cshrc >marcello.cshrc
-       ./makeit V7 marcello marcello <template.rc >marcello.rc
-       ./makeit V7 marcello phd <template.cshrc >marcello_phd.cshrc
-       ./makeit V7 marcello phd <template.rc >marcello_phd.rc
-       ./makeit V7 phd phd <template.cshrc >phd.cshrc
-       ./makeit V7 phd phd <template.rc >phd.rc
-       ./makeit V7 phd marcello <template.cshrc >phd_marcello.cshrc
-       ./makeit V7 phd marcello <template.rc >phd_marcello.rc
-       ./makeit V7_mowgli marcello marcello <template.cshrc >marcello_mowgli.cshrc
-       ./makeit V7_mowgli marcello marcello <template.rc >marcello_mowgli.rc
-       ./makeit V7_mowgli marcello phd <template.cshrc >marcello_phd_mowgli.cshrc
-       ./makeit V7_mowgli marcello phd <template.rc >marcello_phd_mowgli.rc
-       ./makeit V7_mowgli phd phd <template.cshrc >phd_mowgli.cshrc
-       ./makeit V7_mowgli phd phd <template.rc >phd_mowgli.rc
-       ./makeit V7_mowgli phd marcello <template.cshrc >phd_marcello_mowgli.cshrc
-       ./makeit V7_mowgli phd marcello <template.rc >phd_marcello_mowgli.rc
-       chmod a+x marcello*rc phd*rc
-       chmod ug-w marcello*rc phd*rc
-
-clean:
-       rm -f marcello*rc phd*rc
-
-cleanbak:
-       rm -f *~
-
diff --git a/helm/scripts/init.d/etc_default_helm b/helm/scripts/init.d/etc_default_helm
deleted file mode 100644 (file)
index 4d06f94..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# Configuration for helm daemons
-
-  # DAEMONS started/stopped/ecc. by /etc/init.d/helm, name listed here
-  # must correspond to scripts located in /etc/init.d
-DAEMONS="
-  helm-http-getter
-  helm-proof-checker
-  helm-uri-set-queue
-  helm-draw-graph
-"
-
-  # script used to define a good(TM) environment for daemons
-ENVSCRIPT="/projects/helm/shared/scripts/phd.rc"
-
-  # script used to load/unload uwobo predefined scripts
-UWOBO_INIT_SCRIPT="/projects/helm/shared/scripts/init.d/loadPredefinedStylesheets.pl"
-
-  # http getter cache dirs that need to be created at boot time
-HTTP_GETTER_CACHE_DIRS="
-  /projects/helm/shared/cache/library
-  /projects/helm/shared/cache/library/http_getter
-  /projects/helm/shared/cache/rdf_library
-  /projects/helm/shared/cache/rdf_library/http_getter
-"
-
-  # user which will own the daemons and the cache directories
-OWNER="sacerdot:helm"
-
-# vim: set ft=sh:
diff --git a/helm/scripts/init.d/etc_default_helm_mowgli b/helm/scripts/init.d/etc_default_helm_mowgli
deleted file mode 100644 (file)
index 08bf087..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# Configuration for helm daemons
-
-  # DAEMONS started/stopped/ecc. by /etc/init.d/helm, name listed here
-  # must correspond to scripts located in /etc/init.d
-DAEMONS="
-  helm-http-getter_mowgli
-  helm-proof-checker_mowgli
-  helm-uri-set-queue_mowgli
-  helm-draw-graph_mowgli
-  helm-search-engine_mowgli
-  helm-uwobo_mowgli
-"
-
-  # script used to define a good(TM) environment for daemons
-ENVSCRIPT="/projects/helm/shared/scripts/phd_mowgli.rc"
-
-  # script used to load/unload uwobo predefined scripts
-UWOBO_INIT_SCRIPT="/projects/helm/shared/scripts/init.d/loadPredefinedStylesheets.pl"
-
-  # http getter cache dirs that need to be created at boot time
-HTTP_GETTER_CACHE_DIRS="
-  /projects/helm/shared/cache/library
-  /projects/helm/shared/cache/library/http_getter_mowgli
-  /projects/helm/shared/cache/rdf_library
-  /projects/helm/shared/cache/rdf_library/http_getter_mowgli
-"
-
-  # user which will own the daemons and the cache directories
-OWNER="sacerdot:helm"
-
-NUPRL_UWOBO_PANEL_CONF="/projects/helm/NuPRL/uwobo-panel/control.html"
-
-# vim: set ft=sh:
diff --git a/helm/scripts/init.d/helm b/helm/scripts/init.d/helm
deleted file mode 100755 (executable)
index c58a15d..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/sh
-#
-# init.d script for HELM daemons
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Tue,  8 Oct 2002 17:18:17 +0200
-# Last-Modified: Tue,  8 Oct 2002 17:18:17 +0200
-
-DAEMONS=""
-if [ -f /etc/default/helm ]; then
-  . /etc/default/helm
-fi
-
-case "$1" in
-
-  start|stop|restart|force-reload|reload)
-    for d in $DAEMONS; do
-      /etc/init.d/$d $1
-    done
-    ;;
-
-  *)
-    echo
-    echo "Usage: /etc/init.d/helm { start | stop | restart | force-reload | reload }" >&2
-    echo
-    if [ -z "$DAEMONS" ]; then
-      echo "Actually, no daemons are considered!"
-    else
-      echo "Actually, considered daemons are: $DAEMONS"
-    fi
-    echo "to change this setting see /etc/default/helm"
-    echo
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm-bootmisc.sh b/helm/scripts/init.d/helm-bootmisc.sh
deleted file mode 100755 (executable)
index 79e3b69..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-
-HTTP_GETTER_CACHE_DIRS=""
-if [ -f /etc/default/helm ]; then
-  . /etc/default/helm
-fi
-
-# clean pid file for helm related daemons
-( cd /projects/helm/run/ && rm -f *.pid )
-
-# create http_getter cache dirs
-for d in $HTTP_GETTER_CACHE_DIRS; do
-  if ! [ -d $d ]; then
-    mkdir -m 2775 $d
-    OWNER=`echo -n $OWNER | sed -e 's/:/./'`
-    chown $OWNER $d
-  fi
-done
-
diff --git a/helm/scripts/init.d/helm-bootmisc_mowgli.sh b/helm/scripts/init.d/helm-bootmisc_mowgli.sh
deleted file mode 100755 (executable)
index 41a2af8..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-
-HTTP_GETTER_CACHE_DIRS=""
-if [ -f /etc/default/helm_mowgli ]; then
-  . /etc/default/helm_mowgli
-fi
-
-# clean pid file for helm related daemons
-( cd /projects/helm/run/ && rm -f *.pid )
-
-# create http_getter cache dirs
-for d in $HTTP_GETTER_CACHE_DIRS; do
-  if ! [ -d $d ]; then
-    mkdir -m 2775 $d
-    OWNER=`echo -n $OWNER | sed -e 's/:/./'`
-    chown $OWNER $d
-  fi
-done
-
diff --git a/helm/scripts/init.d/helm-draw-graph b/helm/scripts/init.d/helm-draw-graph
deleted file mode 100755 (executable)
index 3449079..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/sh
-#
-# init.d script for HELM draw_graph.cgi
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Wed,  9 Oct 2002 11:12:01 +0200
-# Last-Modified: Wed,  9 Oct 2002 11:12:01 +0200
-
-#DAEMON=/projects/helm/graphs/tools/draw_graph.cgi
-DAEMON=/projects/helm/graphs/tools/drawGraph.opt
-USAGE="Usage: /etc/init.d/helm-draw-graph { start | stop | restart }"
-
-ENVSCRIPT=""
-if [ -f /etc/default/helm ]; then
-  . /etc/default/helm
-fi
-if ! [ -f "$ENVSCRIPT" ]; then
-  echo "Can't find environment script '$ENVSCRIPT'"
-  exit 1
-fi
-. $ENVSCRIPT &> /dev/null
-
-NAME=`basename $DAEMON`
-PIDFILE=/projects/helm/run/$NAME.pid
-
-do_start () {
-  echo "Starting $DAEMON ..."
-  start-stop-daemon \
-    --start --background --pidfile $PIDFILE --make-pidfile \
-    --chuid $OWNER --exec $DAEMON
-}
-
-do_stop () {
-  echo "Stopping $DAEMON ..."
-  start-stop-daemon --stop --pidfile $PIDFILE && \
-  (if [ -f $PIDFILE ]; then rm -f $PIDFILE; else true; fi)
-}
-
-case "$1" in
-
-  start)
-    do_start
-    ;;
-
-  stop)
-    do_stop
-    ;;
-
-  restart)
-    do_stop
-    do_start
-    ;;
-
-  *)
-    echo "$USAGE" >&2
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm-draw-graph_mowgli b/helm/scripts/init.d/helm-draw-graph_mowgli
deleted file mode 100755 (executable)
index 769cd3f..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/sh
-#
-# init.d script for HELM draw_graph.cgi
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Wed,  9 Oct 2002 11:12:01 +0200
-# Last-Modified: Wed,  9 Oct 2002 11:12:01 +0200
-
-#DAEMON=/projects/helm/graphs/tools/draw_graph.cgi
-DAEMON=/projects/helm/graphs/tools/drawGraph.opt
-USAGE="Usage: /etc/init.d/helm-draw-graph_mowgli { start | stop | restart }"
-
-ENVSCRIPT=""
-if [ -f /etc/default/helm_mowgli ]; then
-  . /etc/default/helm_mowgli
-fi
-if ! [ -f "$ENVSCRIPT" ]; then
-  echo "Can't find environment script '$ENVSCRIPT'"
-  exit 1
-fi
-. $ENVSCRIPT &> /dev/null
-
-NAME=`basename $DAEMON`
-PIDFILE=/projects/helm/run/"$NAME"_mowgli.pid
-
-do_start () {
-  echo "Starting $DAEMON ..."
-  start-stop-daemon \
-    --start --background --pidfile $PIDFILE --make-pidfile \
-    --chuid $OWNER --exec $DAEMON
-}
-
-do_stop () {
-  echo "Stopping $DAEMON ..."
-  start-stop-daemon --stop --pidfile $PIDFILE && \
-  (if [ -f $PIDFILE ]; then rm -f $PIDFILE; else true; fi)
-}
-
-case "$1" in
-
-  start)
-    do_start
-    ;;
-
-  stop)
-    do_stop
-    ;;
-
-  restart)
-    do_stop
-    do_start
-    ;;
-
-  *)
-    echo "$USAGE" >&2
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm-http-getter b/helm/scripts/init.d/helm-http-getter
deleted file mode 100755 (executable)
index ac9c2cc..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/sh
-#
-# init.d script for http_getter.pl
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Tue,  8 Oct 2002 17:18:17 +0200
-# Last-Modified: Tue,  8 Oct 2002 17:18:17 +0200
-
-DAEMON=/projects/helm/http_getter/http_getter.pl
-USAGE="Usage: /etc/init.d/helm-http-getter { start | stop | restart }"
-
-ENVSCRIPT=""
-if [ -f /etc/default/helm ]; then
-  . /etc/default/helm
-fi
-if ! [ -f "$ENVSCRIPT" ]; then
-  echo "Can't find environment script '$ENVSCRIPT'"
-  exit 1
-fi
-. $ENVSCRIPT &> /dev/null
-
-NAME=`basename $DAEMON`
-PIDFILE=/projects/helm/run/$NAME.pid
-
-do_start () {
-  echo "Starting $DAEMON ..."
-  start-stop-daemon \
-    --start --background --pidfile $PIDFILE --make-pidfile \
-    --chuid $OWNER --exec $DAEMON
-}
-
-do_stop () {
-  echo "Stopping $DAEMON ..."
-  start-stop-daemon --stop --pidfile $PIDFILE && \
-  (if [ -f $PIDFILE ]; then rm -f $PIDFILE; else true; fi)
-}
-
-case "$1" in
-
-  start)
-    do_start
-    ;;
-
-  stop)
-    do_stop
-    ;;
-
-  restart)
-    do_stop
-    do_start
-    ;;
-
-  *)
-    echo "$USAGE" >&2
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm-http-getter_mowgli b/helm/scripts/init.d/helm-http-getter_mowgli
deleted file mode 100755 (executable)
index 25433a2..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/sh
-#
-# init.d script for http_getter
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Tue,  8 Oct 2002 17:18:17 +0200
-# Last-Modified: Wed,  8 Jan 2003 12:09:41 +0100
-
-DAEMON="/projects/helm/http_getter_mowgli/http_getter"
-USAGE="Usage: /etc/init.d/helm-http-getter_mowgli { start | stop | restart }"
-
-ENVSCRIPT=""
-if [ -f /etc/default/helm_mowgli ]; then
-  . /etc/default/helm_mowgli
-fi
-if ! [ -f "$ENVSCRIPT" ]; then
-  echo "Can't find environment script '$ENVSCRIPT'"
-  exit 1
-fi
-. $ENVSCRIPT &> /dev/null
-
-NAME=`basename $DAEMON`
-PIDFILE=/projects/helm/run/"$NAME"_mowgli.pid
-
-do_start () {
-  echo "Starting $DAEMON ..."
-  start-stop-daemon \
-    --start --background --pidfile $PIDFILE --make-pidfile \
-    --chuid $OWNER --exec $DAEMON
-}
-
-do_stop () {
-  echo "Stopping $DAEMON ..."
-  start-stop-daemon --stop --pidfile $PIDFILE && \
-  (if [ -f $PIDFILE ]; then rm -f $PIDFILE; else true; fi)
-}
-
-case "$1" in
-
-  start)
-    do_start
-    ;;
-
-  stop)
-    do_stop
-    ;;
-
-  restart)
-    do_stop
-    do_start
-    ;;
-
-  *)
-    echo "$USAGE" >&2
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm-proof-checker b/helm/scripts/init.d/helm-proof-checker
deleted file mode 100755 (executable)
index f3acbc1..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/sh
-#
-# init.d script for HELM proof checker
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Wed,  9 Oct 2002 11:12:01 +0200
-# Last-Modified: Wed, 13 Nov 2002 18:30:09 +0100
-
-DAEMON=/projects/helm/proofChecker/proofChecker.opt
-USAGE="Usage: /etc/init.d/helm-proof-checker { start | stop | restart }"
-
-ENVSCRIPT=""
-if [ -f /etc/default/helm ]; then
-  . /etc/default/helm
-fi
-if ! [ -f "$ENVSCRIPT" ]; then
-  echo "Can't find environment script '$ENVSCRIPT'"
-  exit 1
-fi
-. $ENVSCRIPT &> /dev/null
-
-NAME=`basename $DAEMON`
-PIDFILE=/projects/helm/run/$NAME.pid
-
-do_start () {
-  echo "Starting $DAEMON ..."
-  start-stop-daemon \
-    --start --background --pidfile $PIDFILE --make-pidfile \
-    --chuid $OWNER --exec $DAEMON
-}
-
-do_stop () {
-  echo "Stopping $DAEMON ..."
-  start-stop-daemon --stop --pidfile $PIDFILE && \
-  (if [ -f $PIDFILE ]; then rm -f $PIDFILE; else true; fi)
-}
-
-case "$1" in
-
-  start)
-    do_start
-    ;;
-
-  stop)
-    do_stop
-    ;;
-
-  restart)
-    do_stop
-    do_start
-    ;;
-
-  *)
-    echo "$USAGE" >&2
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm-proof-checker_mowgli b/helm/scripts/init.d/helm-proof-checker_mowgli
deleted file mode 100755 (executable)
index fac6481..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/sh
-#
-# init.d script for HELM proof checker
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Wed,  9 Oct 2002 11:12:01 +0200
-# Last-Modified: Wed, 13 Nov 2002 18:30:39 +0100
-
-DAEMON=/projects/helm/proofChecker_mowgli/proofChecker.opt
-USAGE="Usage: /etc/init.d/helm-proof-checker { start | stop | restart }"
-
-ENVSCRIPT=""
-if [ -f /etc/default/helm_mowgli ]; then
-  . /etc/default/helm_mowgli
-fi
-if ! [ -f "$ENVSCRIPT" ]; then
-  echo "Can't find environment script '$ENVSCRIPT'"
-  exit 1
-fi
-. $ENVSCRIPT &> /dev/null
-
-NAME=`basename $DAEMON`
-PIDFILE=/projects/helm/run/"$NAME"_mowgli.pid
-
-do_start () {
-  echo "Starting $DAEMON ..."
-  start-stop-daemon \
-    --start --background --pidfile $PIDFILE --make-pidfile \
-    --chuid $OWNER --exec $DAEMON
-}
-
-do_stop () {
-  echo "Stopping $DAEMON ..."
-  start-stop-daemon --stop --pidfile $PIDFILE && \
-  (if [ -f $PIDFILE ]; then rm -f $PIDFILE; else true; fi)
-}
-
-case "$1" in
-
-  start)
-    do_start
-    ;;
-
-  stop)
-    do_stop
-    ;;
-
-  restart)
-    do_stop
-    do_start
-    ;;
-
-  *)
-    echo "$USAGE" >&2
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm-search-engine_mowgli b/helm/scripts/init.d/helm-search-engine_mowgli
deleted file mode 100755 (executable)
index 836a2eb..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/bin/sh
-#
-# init.d script for HELM searchEngine
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Fri, 22 Nov 2002 15:51:25 +0100
-# Last-Modified: Thu,  6 Mar 2003 17:40:16 +0100
-
-DAEMON=/projects/helm/V7_mowgli/helm/searchEngine/searchEngine.opt
-USAGE="Usage: /etc/init.d/helm-search-engine_mowgli { start | stop | restart }"
-
-ENVSCRIPT=""
-if [ -f /etc/default/helm_mowgli ]; then
-  . /etc/default/helm_mowgli
-fi
-if ! [ -f "$ENVSCRIPT" ]; then
-  echo "Can't find environment script '$ENVSCRIPT'"
-  exit 1
-fi
-. $ENVSCRIPT &> /dev/null
-
-NAME=`basename $DAEMON`
-PIDFILE=/projects/helm/run/"$NAME"_mowgli.pid
-
-do_start () {
-  echo -n "Starting $DAEMON ... "
-  start-stop-daemon \
-    --start --pidfile $PIDFILE --make-pidfile \
-    --chuid $OWNER --background --exec $DAEMON
-  echo "done!"
-}
-
-do_stop () {
-  echo -n "Stopping $DAEMON ... "
-  start-stop-daemon --stop --pidfile $PIDFILE && \
-  (if [ -f $PIDFILE ]; then rm -f $PIDFILE; else true; fi)
-  echo "done!"
-}
-
-case "$1" in
-
-  start)
-    do_start
-    ;;
-
-  stop)
-    do_stop
-    ;;
-
-  restart)
-    do_stop
-    do_start
-    ;;
-
-  *)
-    echo "$USAGE" >&2
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm-tomcat b/helm/scripts/init.d/helm-tomcat
deleted file mode 100755 (executable)
index 166ab31..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-#
-# init.d script for HELM daemons
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Wed,  9 Oct 2002 14:26:27 +0200
-# Last-Modified: Wed,  9 Oct 2002 14:26:27 +0200
-
-UWOBO_INIT_SCRIPT=""
-ENVSCRIPT=""
-if [ -f /etc/default/helm ]; then
-  . /etc/default/helm
-fi
-test -x "$UWOBO_INIT_SCRIPT" || exit 0
-if ! [ -f "$ENVSCRIPT" ]; then
-  echo "Can't find environment script '$ENVSCRIPT'"
-  exit 1
-fi
-. $ENVSCRIPT &> /dev/null
-
-case "$1" in
-
-  start)
-    echo -n "Loading UWOBO stylesheets (helm) ... "
-    $UWOBO_INIT_SCRIPT > /dev/null
-    echo "done!"
-    ;;
-
-  stop)
-    $UWOBO_INIT_SCRIPT --unload > /dev/null
-    ;;
-
-  reload)
-    $UWOBO_INIT_SCRIPT --reload > /dev/null
-    ;;
-
-  restart)
-    $UWOBO_INIT_SCRIPT --unload > /dev/null
-    $UWOBO_INIT_SCRIPT > /dev/null
-    ;;
-
-  *)
-    echo
-    echo "Usage: /etc/init.d/helm-tomcat { start | stop | restart | reload }" >&2
-    echo
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm-tomcat_mowgli b/helm/scripts/init.d/helm-tomcat_mowgli
deleted file mode 100755 (executable)
index d56a1b2..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/sh
-#
-# init.d script for HELM daemons
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Wed,  9 Oct 2002 14:26:27 +0200
-# Last-Modified: Wed,  9 Oct 2002 14:26:27 +0200
-
-UWOBO_INIT_SCRIPT=""
-ENVSCRIPT=""
-if [ -f /etc/default/helm_mowgli ]; then
-  . /etc/default/helm_mowgli
-fi
-test -x "$UWOBO_INIT_SCRIPT" || exit 0
-if ! [ -f "$ENVSCRIPT" ]; then
-  echo "Can't find environment script '$ENVSCRIPT'"
-  exit 1
-fi
-. $ENVSCRIPT &> /dev/null
-
-case "$1" in
-
-  start)
-    echo -n "Loading UWOBO stylesheets (mowgli) ... "
-    $UWOBO_INIT_SCRIPT > /dev/null
-    echo "done!"
-    echo -n "Loading UWOBO stylesheets (mowgli NuPRL) ... "
-    $UWOBO_INIT_SCRIPT $NUPRL_UWOBO_PANEL_CONF > /dev/null
-    echo "done!"
-    ;;
-
-  stop)
-    $UWOBO_INIT_SCRIPT --unload > /dev/null
-    $UWOBO_INIT_SCRIPT --unload $NUPRL_UWOBO_PANEL_CONF > /dev/null
-    ;;
-
-  reload)
-    $UWOBO_INIT_SCRIPT --reload > /dev/null
-    $UWOBO_INIT_SCRIPT --reload $NUPRL_UWOBO_PANEL_CONF > /dev/null
-    ;;
-
-  restart)
-    $UWOBO_INIT_SCRIPT --unload > /dev/null
-    $UWOBO_INIT_SCRIPT --unload $NUPRL_UWOBO_PANEL_CONF > /dev/null
-    $UWOBO_INIT_SCRIPT > /dev/null
-    $UWOBO_INIT_SCRIPT $NUPRL_UWOBO_PANEL_CONF > /dev/null
-    ;;
-
-  *)
-    echo
-    echo "Usage: /etc/init.d/helm-tomcat_mowgli { start | stop | restart | reload }" >&2
-    echo
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm-uri-set-queue b/helm/scripts/init.d/helm-uri-set-queue
deleted file mode 100755 (executable)
index 242545a..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/sh
-#
-# init.d script for HELM uri_set_queue.cgi
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Tue,  8 Oct 2002 17:18:17 +0200
-# Last-Modified: Wed, 20 Nov 2002 10:50:14 +0100
-
-#DAEMON=/projects/helm/graphs/tools/uri_set_queue.cgi
-DAEMON=/projects/helm/graphs/tools/uriSetQueue.opt
-USAGE="Usage: /etc/init.d/helm-uri-set-queue { start | stop | restart }"
-
-ENVSCRIPT=""
-if [ -f /etc/default/helm ]; then
-  . /etc/default/helm
-fi
-if ! [ -f "$ENVSCRIPT" ]; then
-  echo "Can't find environment script '$ENVSCRIPT'"
-  exit 1
-fi
-. $ENVSCRIPT &> /dev/null
-
-NAME=`basename $DAEMON`
-PIDFILE=/projects/helm/run/$NAME.pid
-
-do_start () {
-  echo "Starting $DAEMON ..."
-  start-stop-daemon \
-    --start --background --pidfile $PIDFILE --make-pidfile \
-    --chuid $OWNER --exec $DAEMON
-}
-
-do_stop () {
-  echo "Stopping $DAEMON ..."
-  start-stop-daemon --stop --pidfile $PIDFILE && \
-  (if [ -f $PIDFILE ]; then rm -f $PIDFILE; else true; fi)
-}
-
-case "$1" in
-
-  start)
-    do_start
-    ;;
-
-  stop)
-    do_stop
-    ;;
-
-  restart)
-    do_stop
-    do_start
-    ;;
-
-  *)
-    echo "$USAGE" >&2
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm-uri-set-queue_mowgli b/helm/scripts/init.d/helm-uri-set-queue_mowgli
deleted file mode 100755 (executable)
index 2a03880..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/sh
-#
-# init.d script for HELM uri_set_queue.cgi
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Tue,  8 Oct 2002 17:18:17 +0200
-# Last-Modified: Wed, 20 Nov 2002 10:50:25 +0100
-
-#DAEMON=/projects/helm/graphs/tools/uri_set_queue.cgi
-DAEMON=/projects/helm/graphs/tools/uriSetQueue.opt
-USAGE="Usage: /etc/init.d/helm-uri-set-queue_mowgli { start | stop | restart }"
-
-ENVSCRIPT=""
-if [ -f /etc/default/helm_mowgli ]; then
-  . /etc/default/helm_mowgli
-fi
-if ! [ -f "$ENVSCRIPT" ]; then
-  echo "Can't find environment script '$ENVSCRIPT'"
-  exit 1
-fi
-. $ENVSCRIPT &> /dev/null
-
-NAME=`basename $DAEMON`
-PIDFILE=/projects/helm/run/"$NAME"_mowgli.pid
-
-do_start () {
-  echo "Starting $DAEMON ..."
-  start-stop-daemon \
-    --start --background --pidfile $PIDFILE --make-pidfile \
-    --chuid $OWNER --exec $DAEMON
-}
-
-do_stop () {
-  echo "Stopping $DAEMON ..."
-  start-stop-daemon --stop --pidfile $PIDFILE && \
-  (if [ -f $PIDFILE ]; then rm -f $PIDFILE; else true; fi)
-}
-
-case "$1" in
-
-  start)
-    do_start
-    ;;
-
-  stop)
-    do_stop
-    ;;
-
-  restart)
-    do_stop
-    do_start
-    ;;
-
-  *)
-    echo "$USAGE" >&2
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm-uwobo_mowgli b/helm/scripts/init.d/helm-uwobo_mowgli
deleted file mode 100755 (executable)
index 888b439..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/sh
-#
-# init.d script for http_getter
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Wed, 15 Jan 2003 15:14:07 +0100
-# Last-Modified: Tue,  8 Apr 2003 09:43:08 +0200 zacchiro
-
-DAEMON="/projects/helm/uwobo_mowgli/uwobo"
-USAGE="Usage: /etc/init.d/helm-uwobo_mowgli { start | stop | restart }"
-UWOBO_FOREVER="/etc/init.d/uwobo_forever.sh"
-
-ENVSCRIPT=""
-if [ -f /etc/default/helm_mowgli ]; then
-  . /etc/default/helm_mowgli
-fi
-if ! [ -f "$ENVSCRIPT" ]; then
-  echo "Can't find environment script '$ENVSCRIPT'"
-  exit 1
-fi
-. $ENVSCRIPT &> /dev/null
-
-NAME=`basename $DAEMON`
-# Warning: $PIDFILE value is shared by UWOBO respawner, change at your own risk
-PIDFILE=/projects/helm/run/"$NAME"_mowgli.pid
-
-do_start () {
-  echo -n "Starting $DAEMON ... "
-  start-stop-daemon \
-    --start --background --pidfile $PIDFILE --make-pidfile \
-    --chuid $OWNER --exec $DAEMON
-  echo "done!"
-  echo -n "Waiting for UWOBO to startup (2 seconds) ... "
-  sleep 2
-  echo "done!"
-  /etc/init.d/helm-tomcat_mowgli start
-  echo -n "Starting UWOBO respawner (uwobo_forever.sh) ... "
-  if [ -x "$UWOBO_FOREVER" ]; then
-     $UWOBO_FOREVER &
-     echo "done!"
-  else
-     echo "Can't find $UWOBO_FOREVER :-("
-  fi
-}
-
-do_stop () {
-  echo -n "Stopping $DAEMON ... "
-  start-stop-daemon --stop --pidfile $PIDFILE && \
-  (if [ -f $PIDFILE ]; then rm -f $PIDFILE; else true; fi)
-  echo "done!"
-  echo -n "Stopping UWOBO respawner (uwobo_forever.sh) ... "
-  killall `basename $UWOBO_FOREVER`
-  echo "done!"
-}
-
-case "$1" in
-
-  start)
-    do_start
-    ;;
-
-  stop)
-    do_stop
-    ;;
-
-  restart)
-    do_stop
-    do_start
-    ;;
-
-  *)
-    echo "$USAGE" >&2
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/helm_mowgli b/helm/scripts/init.d/helm_mowgli
deleted file mode 100755 (executable)
index fe73ec0..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/sh
-#
-# init.d script for HELM daemons
-#
-# by --Zack <zack@cs.unibo.it>
-# Created: Tue,  8 Oct 2002 17:18:17 +0200
-# Last-Modified: Tue,  8 Oct 2002 17:18:17 +0200
-
-DAEMONS=""
-if [ -f /etc/default/helm_mowgli ]; then
-  . /etc/default/helm_mowgli
-fi
-
-case "$1" in
-
-  start|stop|restart|force-reload|reload)
-    for d in $DAEMONS; do
-      /etc/init.d/$d $1
-    done
-    ;;
-
-  *)
-    echo
-    echo "Usage: /etc/init.d/helm { start | stop | restart | force-reload | reload }" >&2
-    echo
-    if [ -z "$DAEMONS" ]; then
-      echo "Actually, no daemons are considered!"
-    else
-      echo "Actually, considered daemons are: $DAEMONS"
-    fi
-    echo "to change this setting see /etc/default/helm"
-    echo
-    exit 1
-    ;;
-
-esac
-
diff --git a/helm/scripts/init.d/loadPredefinedStylesheets.pl b/helm/scripts/init.d/loadPredefinedStylesheets.pl
deleted file mode 100755 (executable)
index a4a31d9..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-
-use LWP::UserAgent;
-use URI::Escape;
-
-my $usage = <<EOHELP;
-loadPredefinedStylesheets.pl [ uwobo_panel_conf_file ]
-loadPredefinedStylesheets.pl { -u | --unload } [ uwobo_panel_conf_file ]
-loadPredefinedStylesheets.pl { -r | --reload } [ uwobo_panel_conf_file ]
-loadPredefinedStylesheets.pl { -h | --help   } [ uwobo_panel_conf_file ]
-
-If uwobo_panel_conf_file is provided, it's used as HTML file from which
-parse XSLT stylesheets, otherwise UWOBO_PANEL_CONF environment variable
-is used.
-EOHELP
-
-sub getPredefinedStylesheets ($) {
-  my $confile = shift;
-  my %stylesconf;
-  my $inForm = 0; # currenlty inside 'predefinedStylesheets' form
-  open(CONF, "< $confile") || die "Can't open $confile";
-  while(my $l = <CONF>) {
-    chomp($l);
-    if (not $inForm) {
-      if ($l =~ /<form name="predefinedStylesheets">/) {
-        $inForm = 1;
-      }
-    } else {  # in form
-      if ($l =~ /<\/form>/) {
-        $inForm = 0;
-      } elsif ($l =~ /<option value="[^"]+">/) {
-        my $val = $l;
-        $val =~ s/.*<option value="([^"]+)".*>/$1/;
-        my ($key, $ur, $use_getter) = split /,/, $val;
-        $stylesconf{$key}[0] = $ur;
-        if ($use_getter =~ /true/) {
-          $use_getter = 1;
-        } elsif ($use_getter =~ /false/) {
-          $use_getter = 0;
-        } else {
-          die "Unknown value '$use_getter' for 'use_getter' field.";
-        }
-        $stylesconf{$key}[1] = $use_getter;
-      }
-    }
-  }
-  close(CONF);
-  return %stylesconf;
-}
-
-my $action = "load";
-my $opt = shift || "";
-die $usage if (($opt eq "-h") or ($opt eq "--help"));
-if (($opt eq "-u") or ($opt eq "--unload")) {
-  $action = "unload";
-} elsif (($opt eq "-r") or ($opt eq "--reload")) {
-  $action = "reload";
-} else {
-  unshift (@ARGV, $opt);
-}
-my $confile =
-  shift || $ENV{"UWOBO_PANEL_CONF"} || die "UWOBO_PANEL_CONF not defined";
-my $getter_url = $ENV{"HELM_GETTER_URL"} || die "HELM_GETTER_URL not defined";
-my $uwobo_url = $ENV{"HELM_UWOBO_URL"} || die "HELM_UWOBO_URL not defined";
-my %styles = getPredefinedStylesheets($confile);
-my $request_url = "";
-
-if ($action eq "load") {  # load predefined stylesheets
-  foreach my $k (keys %styles) {
-    $request_url .= "&" unless ($request_url eq "");
-    my $ur = $styles{$k}[0];
-    my $use_getter = $styles{$k}[1];
-    $request_url .= "bind=$k,";
-    my $tmp = "";
-    if ($use_getter) {
-      $tmp .= $getter_url . "getxslt?uri="
-    }
-    $tmp .= $ur;
-    $request_url .= uri_escape($tmp);
-  }
-  $request_url = $uwobo_url . "add?$request_url";
-
-} elsif ($action eq "unload") { # unload predefined stylesheets
-  $request_url = $uwobo_url . "remove?keys=" . join(',', keys %styles);
-
-} elsif ($action eq "reload") { # reload predefined stylesheets
-  $request_url = $uwobo_url . "reload?keys=" . join(',', keys %styles);
-
-} else {  # unknown action
-  die "Unknown action '$action'";
-}
-
-my $agent = LWP::UserAgent->new();
-my $response = $agent->get($request_url);
-print $response->as_string();
-#   print "$request_url\n";
-
diff --git a/helm/scripts/init.d/uwobo_forever.sh b/helm/scripts/init.d/uwobo_forever.sh
deleted file mode 100755 (executable)
index 5c5a57b..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/sh
-#
-# respawner for UWOBO (http://helm.cs.unibo.it/software/uwobo)
-#
-# by --Zack <zack@cs.unibo.it>
-#
-# Created: Mon,  7 Apr 2003 18:59:56 +0200 zacchiro
-# Last-Modified: Tue,  8 Apr 2003 10:06:41 +0200 zacchiro
-#
-
-# Warning: $PIDFILE value is shared by UWOBO /etc/init.d script, change at your
-# own risk
-PIDFILE="/projects/helm/run/uwobo_mowgli.pid"
-
-MAILTO="root@mowgli.cs.unibo.it"
-INTERVAL="60"
-
-# Usage: alert <subject> <body>
-alert ()
-{
-  echo "$2" | mail -s "$1" $MAILTO
-}
-
-# check if uwobo is still alive
-uwobo_is_alive ()
-{
-   if [ -r "$PIDFILE" ]; then
-     ps `cat $PIDFILE` &> /dev/null
-   else # no pid file found, uwobo has been shutdown nicely
-     exit 0
-   fi
-}
-
-# start uwobo
-start_uwobo ()
-{
-   /etc/init.d/helm-uwobo_mowgli start &
-}
-
-# first check
-if ! uwobo_is_alive; then
-   alert "UWOBO failed to start :-((" "UWOBO died during initialization :-((, enjoy debugging! :-P. Cheers."
-   exit 0
-fi
-
-# continuous checks
-while true; do
-   sleep $INTERVAL
-   if ! uwobo_is_alive; then
-      alert "UWOBO died :-(, restarting it ..." "UWOBO died miserably :-(. I'm going to try restarting it, you will receive an additional mail in case of failure. Cheers."
-      start_uwobo # performed in background
-      exit 0
-   fi
-done
-
diff --git a/helm/scripts/makeit b/helm/scripts/makeit
deleted file mode 100755 (executable)
index bbd7cfd..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-if test $# != 3; then
-       echo "Usage: makeit <version> <where> <to>"
-       echo
-       echo "       <version> is either V6.2 or V7"
-       echo "       <from/to> is either phd or marcello"
-       exit 1
-fi
-       
-sed -e "s/@COQV@/$1/" -e "s/@WHERE@/$2/" -e "s/@FROM@/$3/"
diff --git a/helm/scripts/start-tomcat b/helm/scripts/start-tomcat
deleted file mode 100755 (executable)
index ac9912e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-trap stop-tomcat-debug EXIT
-start-tomcat-debug >/dev/null
-echo TOMCAT is on its way, wait a few seconds before using it.
-echo Press enter to kill TOMCAT.
-echo
-read
-echo Shutting down...
diff --git a/helm/scripts/start-tomcat-debug b/helm/scripts/start-tomcat-debug
deleted file mode 100755 (executable)
index bae236b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-$HELMROOT/shared/libraries/tomcat/bin/startup.sh
diff --git a/helm/scripts/stop-tomcat-debug b/helm/scripts/stop-tomcat-debug
deleted file mode 100755 (executable)
index 89f4e5d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#! /bin/sh
-exec $HELMROOT/shared/libraries/tomcat/bin/shutdown.sh
diff --git a/helm/scripts/template.cshrc b/helm/scripts/template.cshrc
deleted file mode 100644 (file)
index ef0e16b..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-
-set COQV=@COQV@
-set WHERE=@WHERE@
-set FROM=@FROM@
-
-setenv CVS_RSH=ssh
-
-echo "Configuring HELM for $WHERE (from $FROM), Coq $COQV"
-
-if ($WHERE == phd) then
-       setenv HELMROOT /projects/helm
-       setenv JAVA_HOME /opt/java/jdk1.3
-       setenv PATH .:$JAVA_HOME/bin/:$PATH
-       if ($?LD_LIBRARY_PATH == 1) then
-               setenv LD_LIBRARY_PATH /usr/local/lib:$LD_LIBRARY_PATH
-       else
-               setenv LD_LIBRARY_PATH /usr/local/lib
-       endif
-else
-       setenv HELMROOT /home/projects/helm
-       setenv JAVA_HOME /usr/local/jdk1.3
-       setenv PATH .:$JAVA_HOME/bin:$HELMROOT/local/bin:$PATH
-       if ($?LD_LIBRARY_PATH == 1) then
-               setenv LD_LIBRARY_PATH $HELMROOT/local/lib:$LD_LIBRARY_PATH
-       else
-               setenv LD_LIBRARY_PATH $HELMROOT/local/lib
-       endif
-endif
-
-if ($WHERE == $FROM) then
-       set FONTROOT=$HELMROOT
-else
-       if ($FROM == phd) then
-               set FONTROOT=/projects/helm
-       else
-               set FONTROOT=/home/projects/helm
-       endif
-endif
-
-setenv PATH $HELMROOT/http_getter:$PATH
-setenv PATH $HELMROOT/$COQV/interface:$PATH
-setenv PATH $HELMROOT/shared/scripts:$PATH
-
-setenv HELM_CONFIGURATION_DIR $HELMROOT/$COQV/$WHERE/local/etc/helm
-setenv HELM_STYLE_DIR $HELMROOT/$COQV/style
-setenv HELM_LIB_DIR $HELMROOT/$COQV/$WHERE/local/lib/helm
-setenv HTTP_GETTER_RDF_DIR $HELMROOT/shared/$COQV/rdf_library
-setenv HTTP_GETTER_RDF_DBM $HELMROOT/shared/$COQV/rdf_urls_of_uris.db
-setenv HTTP_GETTER_XSLT_DBM $HELMROOT/shared/$COQV/xslt_urls_of_uris.db
-setenv HTTP_GETTER_RDF_INDEXNAME rdf_index.txt
-setenv HTTP_GETTER_XSLT_INDEXNAME xslt_index.txt
-setenv HELM_ANNOTATIONS_DIR pippo
-setenv HELM_ANNOTATIONS_URL pippo
-setenv UWOBO_PANEL_CONF /projects/helm/public_html/uwobo/panel/control.html
-if ($COQV == V7) then
-       setenv UWOBO_PORT 8081
-       setenv HTTP_GETTER_PORT 48081
-       setenv URI_SET_QUEUE_PORT 48082
-       setenv DRAW_GRAPH_PORT 48083
-       setenv PROOF_CHECKER_PORT 48084
-       setenv SEARCH_ENGINE_PORT 48085
-       setenv DRAW_GRAPH_DIR /projects/helm/graphs/tools
-       setenv HELM_UWOBO_URL http://mowgli.cs.unibo.it:$UWOBO_PORT/helm/servlet/uwobo/
-       setenv HTTP_GETTER_DTD_BASE_URL http://www.cs.unibo.it/helm/dtd
-else
-       # V7_mowgli
-       setenv UWOBO_PORT 58080
-       setenv UWOBO_LOG_FILE /projects/helm/log/uwobo
-       setenv HTTP_GETTER_PORT 58081
-       setenv URI_SET_QUEUE_PORT 58082
-       setenv DRAW_GRAPH_PORT 58083
-       setenv PROOF_CHECKER_PORT 58084
-       setenv SEARCH_ENGINE_PORT 58085
-       setenv DRAW_GRAPH_DIR /projects/helm/graphs/tools
-       setenv HELM_UWOBO_URL http://mowgli.cs.unibo.it:$UWOBO_PORT/
-       setenv HTTP_GETTER_DTD_BASE_URL http://mowgli.cs.unibo.it/dtd
-endif
-setenv HELM_GETTER_URL http://mowgli.cs.unibo.it:$HTTP_GETTER_PORT/
-setenv SEARCH_ENGINE_HTML_DIR /projects/helm/V7_mowgli/helm/searchEngine/html
-
-echo HELM_CONFIGURATION_DIR=$HELM_CONFIGURATION_DIR
-echo HELM_LIB_DIR=$HELM_LIB_DIR
-echo HELM_STYLE_DIR=$HELM_STYLE_DIR
-
-setenv CLASSPATH .
-setenv CLASSPATH $CLASSPATH\:$HELMROOT/uwobo/lib/xalan.jar
-setenv CLASSPATH $CLASSPATH\:$HELMROOT/uwobo/lib/xerces.jar
-setenv CLASSPATH $CLASSPATH\:$HELMROOT/uwobo/lib/uwobo_client.jar
-setenv CLASSPATH $CLASSPATH\:$HELMROOT/uwobo/lib/uwobo_server.jar
-
-setenv MATHENGINECONF $HELMROOT/$COQV/$WHERE/local/etc/helm/helm-math-engine-configuration.xml
-
-umask 002
-
-# Stix font
-xset fp
-xset fp+ $FONTROOT/fonts/mathematica/Type1/
-xset fp rehash
diff --git a/helm/scripts/template.rc b/helm/scripts/template.rc
deleted file mode 100644 (file)
index 5695786..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-
-COQV=@COQV@
-WHERE=@WHERE@
-FROM=@FROM@
-
-export CVS_RSH=ssh
-
-echo "Configuring HELM for $WHERE (from $FROM), Coq $COQV"
-
-if test $WHERE = phd; then
-       export HELMROOT=/projects/helm
-       export JAVA_HOME=/opt/java/jdk1.3
-       export PATH=.:$JAVA_HOME/bin/:$PATH
-       export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
-else
-       export HELMROOT=/home/projects/helm
-       export JAVA_HOME=/usr/local/jdk1.3
-       export PATH=.:$JAVA_HOME/bin:$HELMROOT/local/bin:$PATH
-       export LD_LIBRARY_PATH=$HELMROOT/local/lib:$LD_LIBRARY_PATH
-fi
-
-if test $WHERE = $FROM; then
-       FONTROOT=$HELMROOT
-else
-       if test $FROM = phd; then
-               FONTROOT=/projects/helm
-       else
-               FONTROOT=/home/projects/helm
-       fi
-fi
-
-export PATH=$HELMROOT/http_getter:$PATH
-export PATH=$HELMROOT/$COQV/interface:$PATH
-export PATH=$HELMROOT/shared/scripts:$PATH
-
-export HELM_CONFIGURATION_DIR=$HELMROOT/$COQV/$WHERE/local/etc/helm
-export HELM_STYLE_DIR=$HELMROOT/$COQV/style
-export HELM_LIB_DIR=$HELMROOT/$COQV/$WHERE/local/lib/helm
-export HTTP_GETTER_RDF_DIR=$HELMROOT/shared/$COQV/rdf_library
-export HTTP_GETTER_RDF_DBM=$HELMROOT/shared/$COQV/rdf_urls_of_uris.db
-export HTTP_GETTER_XSLT_DBM=$HELMROOT/shared/$COQV/xslt_urls_of_uris.db
-export HTTP_GETTER_RDF_INDEXNAME=rdf_index.txt
-export HTTP_GETTER_XSLT_INDEXNAME=xslt_index.txt
-export HELM_ANNOTATIONS_DIR=pippo
-export HELM_ANNOTATIONS_URL=pippo
-export UWOBO_PANEL_CONF=/projects/helm/public_html/uwobo/panel/control.html
-if test  $COQV = V7; then
-       export UWOBO_PORT=8081
-       export HTTP_GETTER_PORT=48081
-       export URI_SET_QUEUE_PORT=48082
-       export DRAW_GRAPH_PORT=48083
-       export PROOF_CHECKER_PORT=48084
-       export SEARCH_ENGINE_PORT=48085
-       export DRAW_GRAPH_DIR=/projects/helm/graphs/tools
-       export HELM_UWOBO_URL=http://mowgli.cs.unibo.it:$UWOBO_PORT/helm/servlet/uwobo/
-       export HTTP_GETTER_DTD_BASE_URL=http://www.cs.unibo.it/helm/dtd
-else
-       # V7_mowgli
-       export UWOBO_PORT=58080
-       export UWOBO_LOG_FILE=/projects/helm/log/uwobo
-       export HTTP_GETTER_PORT=58081
-       export URI_SET_QUEUE_PORT=58082
-       export DRAW_GRAPH_PORT=58083
-       export PROOF_CHECKER_PORT=58084
-       export SEARCH_ENGINE_PORT=58085
-       export DRAW_GRAPH_DIR=/projects/helm/graphs/tools
-       export HELM_UWOBO_URL=http://mowgli.cs.unibo.it:$UWOBO_PORT/
-       export HTTP_GETTER_DTD_BASE_URL=http://mowgli.cs.unibo.it/dtd
-fi
-export HELM_GETTER_URL=http://mowgli.cs.unibo.it:$HTTP_GETTER_PORT/
-export SEARCH_ENGINE_HTML_DIR=/projects/helm/V7_mowgli/helm/searchEngine/html
-
-echo HELM_CONFIGURATION_DIR=$HELM_CONFIGURATION_DIR
-echo HELM_LIB_DIR=$HELM_LIB_DIR
-echo HELM_STYLE_DIR=$HELM_STYLE_DIR
-
-# export CLASSPATH=.
-# export CLASSPATH=$CLASSPATH:$HELMROOT/uwobo/lib/xalan.jar
-# export CLASSPATH=$CLASSPATH:$HELMROOT/uwobo/lib/xerces.jar
-# export CLASSPATH=$CLASSPATH:$HELMROOT/uwobo/lib/uwobo_client.jar
-# export CLASSPATH=$CLASSPATH:$HELMROOT/uwobo/lib/uwobo_server.jar
-
-export MATHENGINECONF=$HELMROOT/$COQV/$WHERE/local/etc/helm/helm-math-engine-configuration.xml
-
-umask 002
-
-# Stix font
-xset fp
-xset fp+ $FONTROOT/fonts/mathematica/Type1/
-xset fp rehash
diff --git a/helm/searchEngine/.cvsignore b/helm/searchEngine/.cvsignore
deleted file mode 100644 (file)
index 6ecb17c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cm[ioxa] *.o searchEngine searchEngine.opt
diff --git a/helm/searchEngine/Makefile b/helm/searchEngine/Makefile
deleted file mode 100644 (file)
index a2287e7..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-REQUIRES = http helm-cic_textual_parser helm-cic_proof_checking \
-           helm-xml gdome2-xslt helm-cic_unification helm-mathql \
-           helm-mathql_interpreter helm-mathql_generator netclient
-OCAMLOPTIONS = -package "$(REQUIRES)" -pp camlp4o -I ../gTopLevel
-OCAMLC = ocamlfind ocamlc $(OCAMLOPTIONS)
-OCAMLOPT = ocamlfind ocamlopt $(OCAMLOPTIONS)
-
-GTOPLEVEL_MODULES = disambiguate
-MODULES =
-CMOS = $(patsubst %,%.cmo,$(MODULES))
-CMXS = $(patsubst %,%.cmx,$(MODULES))
-LIBRARIES =    $(patsubst %,../gTopLevel/%.cmo,$(GTOPLEVEL_MODULES))
-LIBRARIES_OPT =        $(patsubst %,../gTopLevel/%.cmx,$(GTOPLEVEL_MODULES))
-
-all: byte
-world: byte opt
-byte: searchEngine
-opt: searchEngine.opt
-
-searchEngine: $(LIBRARIES) $(CMOS) searchEngine.ml
-       $(OCAMLC) -linkpkg -o $@ $^
-searchEngine.opt: $(LIBRARIES_OPT) $(CMXS) searchEngine.ml
-       $(OCAMLOPT) -linkpkg -o $@ $^
-
-clean:
-       rm -f *.cm[aiox] *.o searchEngine{,.opt}
-
-.PHONY: all opt clean
diff --git a/helm/searchEngine/html/aliaslist.html b/helm/searchEngine/html/aliaslist.html
deleted file mode 100644 (file)
index d030ea4..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-function invia()
-       {
-       stadd="";
-       for (num=0;num<parent.calias;num++)
-               {
-               stadd=stadd+parent.alist[num]+" ";
-               //alert(stadd);
-               }
-       //top.window.open(top.topurl+top.action+"editorpdq.html","sw");
-       top.window.sw.editalias(stadd);
-       //alert(parent.mcq);
-       parent.mcq=parent.mcq.replace("<font color=\"#ff0000\">[Alias list]</font>","");
-       //alert(parent.mcq);
-       //top.qw.document.close();
-       //top.qw.document.write(parent.mcq);
-       if (parent.mcq=="<font color=\"#ff0000\">[Alias list]</font> [Expr]")   
-               {
-               parent.mcq="[Expr]";
-               }
-       else 
-               {
-               parent.mcq=parent.mcq.replace("<font color=\"#ff0000\">","");
-               parent.mcq=parent.mcq.replace("</font>","");
-               }
-       parent.parse(parent.mcq);
-       }
-function rimuovialias()
-       {
-       //alert(document.aliaslist.elenco.value);
-       if (document.aliaslist.elenco.value!="")
-               {
-                       for (var i=document.aliaslist.elenco.length-1;i>-1;i--)
-                       {
-                       if (document.aliaslist.elenco.options[i].selected==true)
-                               {
-                               for (num=i;num<top.aliasglob.length;num++)
-                               {
-                               top.aliasglob[num]=top.aliasglob[num+1];
-                               }
-                               top.aliasglob.length--;
-                               //alert ("rimosso "+i);
-                               //parent.aggiorna();
-                               }
-                       }
-               top.window.open(top.topurl+top.action+"aliaslist.html",(top.cw.frames.length==0?"cw":"bw"));
-               }
-       }
-function listalias()
-       {
-       for (num=0;num<top.aliasglob.length;num++)
-               {
-               document.write("<OPTION value="+num+">"+top.aliasglob[num]);
-               //alert (top.aliasglob[num]);
-               }
-       }
-function addalias()
-       {
-       if (top.idcheck(document.aliaslist.idi.value)==1 && top.uricheck(document.aliaslist.uri.value)==1)
-               {
-               top.aliasglob[top.aliasglob.length]="alias "+document.aliaslist.idi.value+" "+document.aliaslist.uri.value;
-               //parent.aggiorna();
-               top.window.open(top.topurl+top.action+"aliaslist.html",(top.cw.frames.length==0?"cw":"bw"));
-               }
-       }
-function istruzioni()
-       {       
-       top.hw.document.close();
-       top.hw.document.write("You must now enter a list of alias. An Alias is the word 'alias' followed by an <a href='grammarpdq.html#Id' target='gw'>Id</a>, followed by an <a href='grammarpdq.html#Uri' target='gw'>Uri</a>.You may enter as many of them as you want, after each one click the button 'add alias' or press enter and it will be added. When you are done, click 'done'.");
-       }
-istruzioni();
-</SCRIPT>
-</HEAD>
-<BODY>
-<form name="aliaslist" action="Javascript:addalias();" method="get">
-alias
-<input name="idi" type=text size="15" value="">
-<input name="uri" type=text size="45" value="cic:/"><br>
-<input type=submit value="add alias"><input type=button value="delete selected" onClick="rimuovialias()";><br>
-<select name="elenco" multiple size=7>
-<SCRIPT language=Javascript> listalias(); document.aliaslist.idi.focus(); </SCRIPT>
-</select>
-<br>
-<input type=button value="Done" onClick="top.window.open(top.topurl+top.action+'blank.html','hw');top.window.open(top.topurl+top.action+'editorpdq.html','sw');invia();" ><br>
-</form>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/almost_blank.html b/helm/searchEngine/html/almost_blank.html
deleted file mode 100644 (file)
index 05204a5..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<HTML>
-<body bgcolor="#ffffff";>
-Are you lost? Consult the <a href="http://helm.cs.unibo.it/searchEngine/manual/index.html" target="_blank">on-line manual</a>
-</body>
-</HTML>
diff --git a/helm/searchEngine/html/blank.html b/helm/searchEngine/html/blank.html
deleted file mode 100644 (file)
index 3334d0b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<HTML>
-<body bgcolor="#ffffff";>
-</body>
-</HTML>
diff --git a/helm/searchEngine/html/boole.html b/helm/searchEngine/html/boole.html
deleted file mode 100644 (file)
index 6702432..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-function help()
-       {
-       with (document.form1) {
-       if (selopt[0].checked)
-       alert ("No help available.");
-       if (selopt[1].checked)
-       alert ("Parenthesis are employed to force precedence between operators.");
-       if (selopt[2].checked)
-       alert ("'not' returns true if the given [boole] is false, 'ex' returns true if there is at least one group of attributes for each [rvar] referenced by the operators or inside the given [boole] for which the condition is true.");
-       if (selopt[3].checked)
-       alert ("'and' returns true if both conditions are true, 'or' returns true if at least one is true.");
-       if (selopt[4].checked)
-       alert ("'sub' returns true if the first [val] is a subset of the second.\n'meet' returns true if the intersection between the two [val] is not empty.\n'eq' returns true if both [val] are identical.");
-       }
-       }
-function choice()
-{
-top.stadd="";
-with (document.form1) {
-       if (selopt[0].checked) {
-               top.stadd=boole1.value;
-                                         }
-       if (selopt[1].checked) {
-               top.stadd="([boole])";
-                                         }
-       if (selopt[2].checked) {
-               top.stadd=boole2.value+" [boole]";
-                                         }
-       if (selopt[3].checked) {
-               top.stadd="[boole] "+boole3.value+" [boole]";
-                                         }
-       if (selopt[4].checked) {
-               top.stadd="[val] "+boole4.value+" [val]";
-                                         }
-       if (selopt[5].checked) {
-               boole5.value=top.tpa(boole5.value);
-               top.stadd=boole5.value;
-                                         }
-                  }
-if (top.stadd!="") top.aggq();
-       else alert("You left at least one field unfilled");
-}
-</SCRIPT>
-</HEAD>
-<BODY>
-<h1> <SCRIPT language="Javascript">document.write(top.ltr) </SCRIPT>
-<input type="button" value="&lt;-" onmouseOver="top.help(-8)" onclick="top.annulla()">
-<input type="button" value="-&gt;" onmouseOver="top.help(-81)" onclick="top.ripristina()"></h1>
-<h2> Select one of the following: </h2>
-<form name="form1" action="Javascript:choice();" method="get">
-<input type="radio" name="selopt"> <select name="boole1" onFocus="selopt[0].checked=true">
-<OPTION value=false> false
-<OPTION value=true> true
-</select> <br>
-<input type="radio" name="selopt"> ( [boole] ) <br>
-<input type="radio" name="selopt"> <select name="boole2" onFocus="selopt[2].checked=true">
-<OPTION value=not> not
-<OPTION value=ex> ex
-</select> [boole] <br>
-<input type="radio" name="selopt"> [boole] <select name="boole3" onFocus="selopt[3].checked=true">
-<OPTION value=and> and
-<OPTION value=or> or
-</select> [boole]  <br>
-<input type="radio" name="selopt"> [val] <select name="boole4" onFocus="selopt[4].checked=true">
-<OPTION value=sub> sub
-<OPTION value=meet> meet
-<OPTION value=eq> eq
-</select>
-[val]<br>
-<input type="radio" name="selopt"> <input name="boole5" type=text onFocus="selopt[5].checked=true;top.help(1)"> <br>
-<input type="submit" value="compose"><input type="button" value="get help" onclick="help()">
-</form>
-</BODY>
-</HTML>
\ No newline at end of file
diff --git a/helm/searchEngine/html/constraints_choice_template.html b/helm/searchEngine/html/constraints_choice_template.html
deleted file mode 100644 (file)
index c81a8d7..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<html>
-  <head>
-    <title>Refine the Constraints</title>
-    <style> A { text-decoration: none } </style>
-  </head>
-  <body>
-    <form name="constraints">
-     <b>You can now proceed using the default generated constraints or you
-     can refine them by hand before going on.</b> <br /> <br />
-     <SCRIPT language="Javascript">
-      @VARIABLES_INITIALIZATION@
-     </SCRIPT>
-     <input type="button" value="Submit Query" onClick="top.constraints_choice_template_invia(document,aliases,constr_obj_len,constr_rel_len,constr_sort_len)"/>
-     @FORM@
-     <br />
-    </form>
-  </body>
-</html>
diff --git a/helm/searchEngine/html/editor.html b/helm/searchEngine/html/editor.html
deleted file mode 100644 (file)
index 1e6afe7..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-qbf=/[[^\[\]<>]*|<set>|<val>|<boole>]*/
-function invia()
-       {
-       window.open(top.ask_uwobo(top.topurl+"/execute?query="+escape(document.edit.qta.value)),"cw");
-       }
-function parse1()
-       {
-       while (fb.indexOf("<")>-1){
-       if (fb.indexOf("<")>0)
-               {
-               fb=fb.replace("<","&lt;");
-               }
-                                        }
-       while (fb.indexOf(">")>-1){
-       if (fb.indexOf(">")>0)
-               {
-               fb=fb.replace(">","&gt;");
-               }
-                                        }
-       //while (fb.indexOf("[?")>-1){
-               //fb=fb.replace("[?","&gt;");
-                       //               }
-       }
-function parse()
-       {
-       while (fb.indexOf("<set>")>-1)
-               {
-               fb=fb.replace("<set>","[set]");
-               }
-       while (fb.indexOf("<val>")>-1)
-               {
-               fb=fb.replace("<val>","[val]");
-               }
-       while (fb.indexOf("<boole>")>-1)
-               {
-               fb=fb.replace("<boole>","[boole]");
-               }
-       parse1();
-       }
-function armageddon()
-       {
-        if (confirm("This will delete your query and restart a new one. Are you sure?")) {
-       top.initialize();
-       top.window.open(top.topurl+top.action+"start.html","qw");
-       top.window.open(top.topurl+top.action+"blank.html","cw");
-       top.window.open(top.topurl+top.action+"blank.html","hw");
-       top.window.open(top.topurl+top.action+"blank.html","gw");
-       top.window.open(top.topurl+top.action+"blank.html","sw");
-       }
-        }
-function comprimispazi()
-       {
-       stringa=document.edit.qta.value;
-       while (stringa.charAt(0)==" ") {stringa=stringa.substring(1,stringa.length)}
-       sle=stringa.length;
-       for (i=1;i<sle;i++)
-               {
-               if (stringa.charAt(i)==" " && stringa.charAt(i+1)==" ") {
-                       //alert("i="+i+"char="+stringa.charAt(i));
-                       //alert(stringa.substring(0,i)+"---"+stringa.substring(i+1,stringa.length));
-                       stringa=stringa.substring(0,i)+stringa.substring(i+1,stringa.length); i--;}             
-               }
-       document.edit.qta.value=stringa;
-       }
-function apply()
-       {
-       top.storep=1;
-       fb=document.edit.qta.value;
-       ok=qbf.test(fb);
-       if (ok){
-       parse();
-       //alert("parse ok");
-       top.fb=fb;
-       top.storeps=1;top.storepv=1;top.storepb=1;
-       top.parse();
-       //alert("top.parse ok");
-       top.query=top.fb;
-       top.qw.document.close();
-       top.qw.document.write(top.query);
-       top.aggform();  //alert("aggform ok");
-       top.aggcw();//alert("aggcw ok");
-       comprimispazi();}
-       }
-function inserisci(mq)
-       {
-       document.edit.qta.focus();
-       var TR=document.selection.createRange();
-       if(TR!=null)
-               {
-                       TR.text=TR.text+mq;
-               } 
-       else document.edit.qta.value+=mq;
-       //comprimispazi();
-       }
-function agg()
-       {
-       document.edit.qta.value=top.cquery;
-       comprimispazi();
-       }
-</SCRIPT>
-</HEAD>
-<BODY>
-<table>
-<tr><td>
-<form name="edit" method="get" action="Javascript:invia()">
-<textarea name="qta" cols="40" rows="8" onMouseOver="top.help(-2)";>
-</textarea>
-</td>
-<td>
-<input type="button" value="set" onMouseOver="top.help(-6)" onClick="inserisci(' <set> ');"><br>
-<input type="button" value="val" onMouseOver="top.help(-6)" onClick="inserisci(' <val> ');"><br>
-<input type="button" value="bol" onMouseOver="top.help(-6)" onClick="inserisci(' <boole> ');"><br>
-</td></tr></table>
-<input type="submit" value="Submit the query" onMouseOver="top.help(-4)"></input>
-<input type="button" value="Restart" onMouseOver="top.help(-5)" onClick="armageddon()"></input>
-<input type="button" value="Apply Changes" onMouseOver="top.help(-3)" onClick="apply();top.actinput++;top.storia[top.actinput]=top.query;top.numeroazioniannullate=0;"></input>
-</form>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/editorpdq.html b/helm/searchEngine/html/editorpdq.html
deleted file mode 100644 (file)
index 21e8039..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-var alias="";
-var expr="";
-function armageddon()
-       {
-       if (confirm("Are you sure you want to delete your query and start a new one?"))
-               {
-               top.terminecic="";top.listaliases="";top.ricordaliaslist=0;top.vlds=new Array();var alias="";var expr="";
-               top.initialize();
-               top.window.open(top.topurl+top.action+"start.html","qw");
-               top.window.open(top.topurl+top.action+"blank.html","cw");
-               top.window.open(top.topurl+top.action+"blank.html","hw");
-               top.window.open(top.topurl+top.action+"blank.html","gw");
-               top.window.open(top.topurl+top.action+"blank.html","sw");
-               }
-       }
-function nuovapdqsa()
-       {
-       if (confirm("Are you sure you want to change expression?"))
-               {
-               top.terminecic="";
-               document.invio.expression.value="";document.invio.aliaslist.value=unescape(top.listaliases);
-               top.ricordaliaslist=1;
-               window.open(top.topurl+top.action+"pdq.html","cw");
-               window.open(top.topurl+top.action+"editorpdq.html","sw");
-               }
-       }
-function invia()
-       {
-       if (document.invio.expression.value!="")
-               {top.terminecic=escape(document.invio.expression.value);
-    top.listaliases="";
-               for (i=0;i<top.aliasglob.length;i++)
-                       {
-                       top.listaliases=top.listaliases+escape(top.aliasglob[i]+" ");
-                       }
-               //alert(top.listaliases);
-    window.open(top.ask_uwobo(top.topurl+"/"+top.current_query+"?term="+escape(document.invio.expression.value)+"&aliases="+top.listaliases),"cw");
-        }
-               //window.open(top.topurl+top.action+"templateambigpdq2.html","bw")}     
-       else {alert("Please complete the query before.")}
-       }
-function warning()
-       {
-       alert("You may not modify this field.",alias);
-       document.invio.aliaslist.value=alias;
-       document.invio.expression.value=expr;
-       }
-function editalias(valore)
-       {
-       top.window.sw.alias=valore;
-       document.invio.aliaslist.value=valore;
-       }
-function editexpr(valore)
-       {
-       top.window.sw.expr=valore;
-       document.invio.expression.value=valore;
-       }
-function listalias()
-       {
-       for (num=0;num<top.aliasglob.length;num++)
-               {
-               //alert(top.aliasglob[num]);
-               document.write("<OPTION value="+num+">"+top.aliasglob[num]);
-               }
-       }
-function editaalias()
-       {
-       if (document.invio.expression.value!=""){top.terminecic=escape(document.invio.expression.value)}
-       top.window.open(top.topurl+top.action+"aliaslist.html",(top.cw.frames.length==0?"cw":"bw"));
-       }
-</SCRIPT>
-</HEAD>
-<BODY>
-<form name="invio" action="Javascript:invia();">
-<select name="aliaslist" size=1>
-<SCRIPT language=Javascript> listalias(); </script>
-</select> Your list of alias.
-<input type=button value="edit" onMouseOver="top.help(-9)" onClick="editaalias()";>
-</br>
-<textarea name="expression" cols="43" rows="6"></textarea><br>Your expression.<br>
-<input type=submit value="Submit" onMouseOver="top.help(-4)"></input>
-<input type=button value="Restart" onMouseOver="top.help(-5)" onClick="armageddon()"></input>
-<input type=button value="New expression" onMouseOver="top.help(-7)" onClick="nuovapdqsa()"></input>
-</form>
-<SCRIPT language=Javascript>document.invio.expression.value=unescape(top.terminecic); </script>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/expnamedsubst.html b/helm/searchEngine/html/expnamedsubst.html
deleted file mode 100644 (file)
index 3db7aca..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-function invia()
-       {
-       stadd="{";
-       for (num=0;num<parent.calias;num++)
-               {
-               stadd=stadd+parent.alist[num]+":=[Expr];";
-               //alert(stadd);
-               }
-       //alert(parent.mcq);
-       //alert(stadd.charAt(stadd.length-1));
-       if (stadd.charAt(stadd.length-1)==";"){stadd=stadd.substring(0,stadd.length-1);}
-       stadd=stadd+"}"
-       if (stadd==("{}")){stadd=""}
-       parent.mcq=parent.mcq.replace("<font color=\"#ff0000\">[exp_named_subst]</font>",stadd);
-       //alert(parent.mcq);
-       //top.qw.document.close();
-       //top.qw.document.write(parent.mcq);
-       parent.parse(parent.mcq);
-       }
-function rimuovialias()
-       {
-       //alert(document.aliaslist.elenco.value);
-       if (document.aliaslist.elenco.value!=""){
-       for (num=Number(document.aliaslist.elenco.value);num<parent.calias;num++)
-               {
-               //alert (parent.alist[num]+" "+parent.alist[num+1]);
-               parent.alist[num]=parent.alist[num+1];
-               }
-       parent.calias--;parent.aggiorna2();}
-       }
-function listalias()
-       {
-       for (num=0;num<parent.calias;num++)
-               {
-               document.write("<OPTION value="+num+">"+parent.alist[num]);
-               //alert (parent.alist[num]);
-               }
-       }
-function addalias()
-       {
-       ok=0;
-       if (document.aliaslist.varid.value.indexOf("/")>0)
-               {if (top.uricheck(document.aliaslist.varid.value)==1 && document.aliaslist.varid.value.substring(document.aliaslist.varid.value.length-3,document.aliaslist.varid.value.length)=="var")
-                       {ok=1}
-               }
-       else {if (top.idcheck(document.aliaslist.varid.value)==1)
-               {ok=1}
-               }       
-       if (ok==1)
-               {
-               //alert (document.aliaslist.idi.value+" "+document.aliaslist.uri.value);
-               parent.alist[parent.calias]=document.aliaslist.varid.value
-               //alert (parent.alist[parent.calias]);
-               parent.calias=parent.calias+1;
-               parent.aggiorna2();
-               }
-       }
-</SCRIPT>
-</HEAD>
-<BODY>
-You must now enter a list of named_subst. A named_subst is an <a href="grammarpdq.html#Id" target="gw">Id</a> or a <a href="grammarpdq.html#Varuri" target="gw">Varuri</a> followed by ":=" followed by an expression.
-You may enter as many of them as you want (even none), after each one click the button "add" or press enter and it will be added. When you are done, click "done".
-<br>
-<form name="aliaslist" action="Javascript:addalias();" method="get">
-<input name="varid" type=text size="35"> Insert here the Id or the Uri you want to add.
-<input type=submit value="add"><input type=button value="delete selected" onClick="rimuovialias()";>
-<br>
-<select name="elenco" size=7>
-<SCRIPT language=Javascript> listalias(); </SCRIPT>
-</select>
-<br>
-<input type=button value="Done" onClick="invia();" >
-</form>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/expr.html b/helm/searchEngine/html/expr.html
deleted file mode 100644 (file)
index 3e302b8..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-function choice()
-       {
-with (document.form1) {        
-       stadd="";top.qw.document.close();quanti=0;
-       if (selopt[0].checked) {stadd="\[Genid]"+document.form1.ex1.value+"[Expr].[Expr]"}
-       if (selopt[1].checked) {stadd="![Genid]:[Expr].[Expr]"}
-       if (selopt[2].checked) {stadd="[Expr]-&gt;[Expr]"}
-       if (selopt[3].checked) {stadd="([Expr])-&gt;[Expr]"}
-       if (selopt[4].checked) {stadd=document.form1.ex2.value}
-       if (selopt[5].checked) {
-                               while (quanti<1)
-                                       {
-                                       quanti=prompt("How many expressions in the list?","1");//alert(quanti);
-                                       if (isNaN(quanti)){quanti=0;}
-                                       }
-                               stadd="(";
-                               for (i=0;i<Math.floor(quanti);i++)
-                               {stadd=stadd+"[Expr] "}
-                               stadd=stadd+")";
-                              }
-       if (selopt[6].checked) {
-                               stadd=document.form1.id_or_uri.value;
-                               //alert(stadd.substring(0,5));
-                               if (stadd.substring(0,5)=="cic:/") 
-                                       {if (!top.uricheck(stadd)){stadd="";}}
-                               else if (!top.idcheck(stadd)){stadd="";}
-                               //alert(stadd);                                 
-                               }
-       if (stadd!="") {parent.mcq=parent.mcq.replace("<font color=\"#ff0000\">[Expr]</font>",stadd);
-       //top.qw.document.write(parent.mcq);
-       parent.parse(parent.mcq);}
-                       }
-       }
-</SCRIPT>
-</HEAD>
-<BODY>
-You are entering an expression. Select one of the following.
-<form name="form1" action="Javascript:choice();" method="get">
-<input type="radio" name="selopt">\[Genid]<select name="ex1" onFocus="selopt[0].checked=true;">
-<option value=":">:
-<option value=":=">:=
-</select>[Expr].[Expr] <br>
-<input type="radio" name="selopt">![Genid]:[Expr].[Expr] <br>
-<input type="radio" name="selopt">[Expr]-&gt;[Expr]<br>
-<input type="radio" name="selopt">([Expr])-&gt;[Expr]<br>
-<input type="radio" name="selopt"> <select name="ex2" onFocus="selopt[4].checked=true;">
-<option value="Prop"> Prop 
-<option value="Set"> Set
-<option value="Type"> Type
-<option value="?"> ?
-</select> <br>
-<input type="radio" name="selopt"> ( [Expr list] ) <br>
-<input type="radio" name="selopt"> <input name="id_or_uri" type="text" onFocus="selopt[6].checked=true;top.help(-10)"><br>
-<input type=submit value="Select">
-</form>
-</BODY>
-</HTML>
\ No newline at end of file
diff --git a/helm/searchEngine/html/genid.html b/helm/searchEngine/html/genid.html
deleted file mode 100644 (file)
index 1ca94c4..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-sel=2;stadd="";
-function choice()
-       {
-       if (sel==0){stadd=document.form1.gen0.value;if (!top.idcheck(document.form1.gen0.value)){stadd=""}}
-       if (sel==1){stadd=document.form1.gen1.value;if (!top.uricheck(document.form1.gen1.value)){stadd=""}
-       if (stadd.substring(stadd.length-3,stadd.length)=="con"){stadd="";alert("You may not enter a Conuri.")}}
-       if (sel==1 && stadd!="") {stadd=stadd+" [exp_named_subst]";}
-       if (stadd!="") {parent.mcq=parent.mcq.replace("<font color=\"#ff0000\">[Genid]</font>",stadd);
-       //top.qw.document.close();top.qw.document.write(parent.mcq);
-       parent.parse(parent.mcq);}
-       sel=2;
-       }
-</SCRIPT>
-</HEAD>
-<BODY>
-You are now entering a Genid. It may be a simple <a href="grammarpdq.html#Id" target="gw">Id</a>, or an <a href="grammarpdq.html#Uri" target="gw">Uri</a> followed by nothing or by an <a href="grammarpdq.html#Exp_Named_Subst" target="gw">Exp_Named_Subst</a>.
-<form name="form1" action="Javascript:choice();" method="get">
-<input name="gen0" type=text onFocus="sel=0"> Insert here the <a href="grammarpdq.html#Id" target="gw">Id</a>
-<br>
-<input name="gen1" type=text value="cic:/" onFocus="sel=1"> Or insert here the <a href="grammarpdq.html#Uri" target="gw">Uri</a>. The uri may not be a <a href="grammarpdq.html#Conuri" target="gw">Conuri</a>.<br>
-<input type=submit value="Enter">
-</form>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/grammar.html b/helm/searchEngine/html/grammar.html
deleted file mode 100644 (file)
index a18b27c..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<HTML>
-<HEAD>
-</HEAD>
-<BODY>
-<A NAME="string">
-<P><B>&lt;string&gt;</B>::= '"' [ "\" . | '^ " \' ] * '"'</A>
-<A NAME="path">
-<P><B>&lt;path&gt;</B>::= &lt;<A HREF="#string">string</A>&gt; [ "/" &lt;<A HREF="#string">string</A>&gt; ] *</A>
-<A NAME="string_list">
-<P><B>&lt;string_list&gt;</B>::= &lt;<A HREF="#string">string</A>&gt; [ "," &lt;<A HREF="#string">string</A>&gt; ] *</A>
-<A NAME="alpha">
-<P><B>&lt;alpha&gt;</B>::= [ 'A - Z' | 'a - z' |' :_' ] + </A>
-<A NAME="number">
-<P><B>&lt;number&gt;</B>::= [ '0 - 9' ] + </A>
-<A NAME="id">
-<P><B>&lt;id&gt;</B>::= &lt;<A HREF="#alpha">alpha</A>&gt; [ &lt;<A HREF="#alpha">alpha</A>&gt; | &lt;<A HREF="#number">number</A>&gt; ] * </A>
-<A NAME="rvar">
-<P><B>&lt;rvar&gt;</B>::= "@" &lt;<A HREF="#id">id</A>&gt; </A>
-<A NAME="svar">
-<P><B>&lt;svar&gt;</B>::= "%" &lt;<A HREF="#id">id</A>&gt; </A>
-<A NAME="vvar">
-<P><B>&lt;vvar&gt;</B>::= "$" &lt;<A HREF="#id">id</A>&gt; </A>
-<A NAME="refine">
-<P><B>&lt;refine&gt;</B>::= [ "sub" | "super" ] ? </A>
-<A NAME="qualifier">
-<P><B>&lt;qualifier&gt;</B>::= [ "inverse" ] ? &lt;<A HREF="#refine">refine</A>&gt; &lt;<A HREF="#path">path</A>&gt; </A>
-<A NAME="assign">
-<P><B>&lt;assign&gt;</B>::= &lt;<A HREF="#vvar">vvar</A>&gt; "&lt;-" &lt;<A HREF="#path">path</A>&gt; </A>
-<A NAME="attr_list">
-<P><B>&lt;attr_list&gt;</B>::= [ "attr" &lt;<A HREF="#assign">assign</A>&gt; [ "," &lt;<A HREF="#assign">assign</A>&gt;] * ] ? </A>
-<A NAME="set">
-<P><B>&lt;set&gt;</B>::= "ref" &lt;<A HREF="#val">val</A>&gt; </A><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| "pattern" &lt;<A HREF="#val">val</A>&gt;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| &lt;<A HREF="#svar">svar</A>&gt;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| &lt;<A HREF="#rvar">rvar</A>&gt;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| "(" &lt;<A HREF="#set">set</A>&gt; ")"<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| "relation" &lt;<A HREF="#qualifier">qualifier</A>&gt; &lt;<A HREF="#val">val</A>&gt; &lt;<A HREF="#attr_list">attr_list</A>&gt;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| "select" &lt;<A HREF="#rvar">rvar</A>&gt; "in" &lt;<A HREF="#set">set</A>&gt; "where" &lt;<A HREF="#boole">boole</A>&gt;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| &lt;<A HREF="#set">set</A>&gt; [ "union" | "intersect" | "diff" ] &lt;<A HREF="#set">set</A>&gt;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| "let" &lt;<A HREF="#svar">svar</A>&gt; "be" &lt;<A HREF="#set">set</A>&gt; "in" &lt;<A HREF="#set">set</A>&gt; <BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| "let" &lt;<A HREF="#vvar">vvar</A>&gt; "be" &lt;<A HREF="#val">val</A>&gt; "in" &lt;<A HREF="#set">set</A>&gt; <BR> </A>
-<A NAME="boole">
-<P><B>&lt;boole&gt;</B>::= [ "false" | "true" ] </A><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| "(" &lt;<A HREF="#boole">boole</A>&gt; ")"<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| [ "not" | "ex" ] &lt;<A HREF="#boole">boole</A>&gt; <BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| &lt;<A HREF="#boole">boole</A>&gt; [ "and" | "or" ] &lt;<A HREF="#boole">boole</A>&gt; <BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| &lt;<A HREF="#val">val</A>&gt; [ "sub" | "meet" | "eq" ] &lt;<A HREF="#val">val</A>&gt; <BR> </A>
-<A NAME="val">
-<P><B>&lt;val&gt;</B>::= "{" [ &lt;<A HREF="#string_list">string_list</A>&gt; ] ? "}" </A><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| &lt;<A HREF="#string">string</A>&gt;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| "refof" &lt;<A HREF="#set">set</A>&gt;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| &lt;<A HREF="#rvar">rvar</A>&gt; "." &lt;<A HREF="#vvar">vvar</A>&gt;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| &lt;<A HREF="#vvar">vvar</A>&gt;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| "(" &lt;<A HREF="#val">val</A>&gt; ")"<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-| "property" &lt;<A HREF="#qualifier">qualifier</A>&gt; &lt;<A HREF="#val">val</A>&gt;</A>
-</BODY>
-</HTML>
\ No newline at end of file
diff --git a/helm/searchEngine/html/grammarpdq.html b/helm/searchEngine/html/grammarpdq.html
deleted file mode 100644 (file)
index bd3835b..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-</SCRIPT>
-</HEAD>
-<BODY>
-<a name="Id">
-<p><b>&lt;Id&gt;</b>::= [ 'A-Z' | 'a-z' ][ 'A-Z' | 'a-z' | '0-9' | \- | _ | \' ]*</a>
-<a name="Uri">
-<p><b>&lt;Uri&gt;</b>::= &lt;<a href="#Conuri">Conuri</a>&gt; | &lt;<a href="#Varuri">Varuri</a>&gt; | &lt;<a href="#Indtyuri">Indtyuri</a>&gt; | &lt;<a href="#Indconuri">Indconuri</a>&gt;</a>
-<a name="Conuri">
-<p><b>&lt;Conuri&gt;</b>::= &quot;cic:/&quot; [&lt;<a href="#Id">Id</a>&gt; &quot;/&quot; ]*&lt;<a href="#Id">Id</a>&gt; &quot;.con&quot;</a>
-<a name="Varuri">
-<p><b>&lt;Varuri&gt;</b>::= &quot;cic:/&quot; [&lt;<a href="#Id">Id</a>&gt; &quot;/&quot; ]*&lt;<a href="#Id">Id</a>&gt; &quot;.var&quot;</a>
-<a name="Indtyuri">
-<p><b>&lt;Indtyuri&gt;</b>::= &quot;cic:/&quot; [&lt;<a href="#Id">Id</a>&gt; &quot;/&quot; ]*&lt;<a href="#Id">Id</a>&gt; &quot;.ind#1/&quot; ['0-9']+</a>
-<a name="Indconuri">
-<p><b>&lt;Indconuri&gt;</b>::= &quot;cic:/&quot; [&lt;<a href="#Id">Id</a>&gt; &quot;/&quot; ]*&lt;<a href="#Id">Id</a>&gt; &quot;.ind#1/&quot; ['0-9']+ &quot;/&quot; ['0-9']+</a>
-<a name="Exp_Named_Subst">
-<p><b>&lt;Exp_Named_Subst&gt;</b>::= &quot;{&quot; [ [ [&lt;<a href="#Id">Id</a>&gt; | &lt;<a href="#Varuri">Varuri</a>&gt; ] &quot;:=&quot; &lt;Expression&gt; &quot;;&quot; ]* [ [&lt;<a href="#Id">Id</a>&gt; | &lt;<a href="#Varuri">Varuri</a>&gt; ] &quot;:=&quot; &lt;Expression&gt; ] ]? &quot;}&quot;</a>
-<a name="Alias">
-<p><b>&lt;Alias&gt;</b>::= &quot;alias&quot; &lt;<a href="#Id">Id</a>&gt; &lt;<a href="#Uri">Uri</a>&gt;
-<a name="Genid">
-<p><b>&lt;Genid&gt;</b>::= [ &lt;<a href="#Id">Id</a>&gt; | &lt;<a href="#Varuri">Varuri</a>&gt; | &lt;<a href="#Indtyuri">Indtyuri</a>&gt; | &lt;<a href="#Indconuri">Indconuri</a>&gt; ] &lt;<a href="#Exp_Named_Subst">Exp_Named_Subst</a>&gt;
-<a name="Expr">
-<p><b>&lt;Expr&gt;</b>::= &quot;\&quot; &lt;<a href="#Genid">Genid</a>&gt; [ &quot;:&quot; | &quot;:=&quot; ] &lt;<a href="#Expr">Expr</a>&gt;&quot;.&quot;&lt;<a href="#Expr">Expr</a>&gt;
-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-::= &quot;!&quot; &lt;<a href="#Genid">Genid</a>&gt; &quot;:&quot; &lt;<a href="#Expr">Expr</a>&gt;&quot;.&quot;&lt;<a href="#Expr">Expr</a>&gt;
-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-::= &lt;<a href="#Expr">Expr</a>&gt;&quot;->&quot;&lt;<a href="#Expr">Expr</a>&gt;
-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-::= &quot;(&quot; &lt;<a href="#Expr">Expr</a>&gt; &quot;)&quot; &quot;->&quot;&lt;<a href="#Expr">Expr</a>&gt;
-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-::= &quot;(&quot; &lt;<a href="#Expr">Expr</a>&gt; [ &quot; &quot; &lt;<a href="#Expr">Expr</a>&gt;]* &quot;)&quot;
-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-::= &quot;Prop&quot; | &quot;Set&quot; | &quot;Type&quot; | &quot;?&quot; | &lt;<a href="#Uri">Uri</a>&gt; | &lt;<a href="#Id">Id</a>&gt;
-</BODY>
-</HTML>
\ No newline at end of file
diff --git a/helm/searchEngine/html/index.html b/helm/searchEngine/html/index.html
deleted file mode 100644 (file)
index e7b73b5..0000000
+++ /dev/null
@@ -1,636 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-var query="*"; // stringa che contiene la query nel suo stato attuale.
-var storeps=1;
-var storepv=1;
-var storepb=1; // queste tre variabili contengono il numero da assegnare al prossimo simbolo set, val o boole per creare il link nel frame in alto a sinistra.
-var stadd; // contiene la stringa da aggiungere alla query.
-var fb; // contiene la stringa da aggiungere alla query prima che i set,val e boole siano convertiti in link.
-var ltr="*"; // qui viene memorizzato qual Ã¨ l' ultimo link su cui si Ã¨ cliccato.
-var norvars=0;
-var nosvars=0;
-var novvars1=0;
-var novvars2=0; // queste tre variabili servono per sapere dove memorizzare i nomi delle rvar,svar e vvar inserite dall' utente. 
-var wrong=0;
-var ricordaliaslist=0;
-var actinput=0;
-var numeroazioniannullate=0;
-var terminecic="";var listaliases="";var choices;var vlds=new Array();//contengono i parametri per dialogare col server in caso di ambiguità nella Match Conclusion.
-aliasglob=new Array();//per conservare la lista degli alias
-function initialize()
-       {
-       rvars=new Array(100);
-       svars=new Array(100);
-       vvars1=new Array(100);
-       vvars2=new Array(100); // contengono le rvar,svar e vvar inserite dall' utente. 
-       storia=new Array();
-       storia[0]="*";
-       norvars=0;
-       nosvars=0;
-       novvars1=0;
-       novvars2=0;
-       ltr="*";
-       query="*";
-       storeps=1;
-       storepv=1;
-       storepb=1;
-       ricordaliaslist=0;
-       vlds=new Array();
-       aliasglob=new Array();
-       actinput=0;
-       numeroazioniannullate=0;
-       }
-
-// @variable@ will be substituted by the searchEngine with the param.variable
-// argument value
-var processorURL="@processorURL@";
-var getterURL="@getterURL@";
-var thkeys="@thkeys@";
-var proofcheckerURL="@proofcheckerURL@";
-var draw_graphURL="@draw_graphURL@";
-var uri_set_queueURL="@uri_set_queueURL@";
-var UNICODEvsSYMBOL="@UNICODEvsSYMBOL@";
-var keys="@keys@";
-var thkeys="@thkeys@";
-var embedkeys="@embedkeys@";
-var doctype_public="@doctype-public@";
-var encoding="@encoding@";
-var thencoding="@thencoding@";
-var media_type="@media-type@";
-var thmedia_type="@thmedia-type@";
-var interfaceURL="@interfaceURL@";
-var thinterfaceURL="@thinterfaceURL@";
-var CICURI="@CICURI@";
-var naturalLanguage="@naturalLanguage@";
-var annotations="@annotations@";
-var interface_topurl="@topurl@";
-
-function ask_uwobo(url)
-       {
-         return (top.topurl+"/ask_uwobo?url="+
-                 escape(processorURL + "apply?" +
-                         "xmluri=" + escape(url) +
-                         "&keys=" + escape(thkeys) +
-                         "&param.processorURL=" + escape(processorURL) +
-                         "&param.getterURL=" + escape(getterURL) +
-                         "&param.proofcheckerURL=" + escape(proofcheckerURL) +
-                         "&param.draw_graphURL=" + escape(draw_graphURL) +
-                         "&param.uri_set_queueURL=" + escape(uri_set_queueURL) +
-                         "&param.UNICODEvsSYMBOL=" + escape(UNICODEvsSYMBOL) +
-                         "&param.keys=" + escape(keys) +
-                         "&param.thkeys=" + escape(thkeys) +
-                         "&param.embedkeys=" + escape(embedkeys) +
-                         "&param.doctype-public=" + escape(doctype_public) +
-                         "&param.encoding=" + escape(encoding) +
-                         "&param.thencoding=" + escape(thencoding) +
-                         "&param.media-type=" + escape(media_type) +
-                         "&param.thmedia-type=" + escape(thmedia_type) +
-                         "&param.interfaceURL=" + escape(interfaceURL) +
-                         "&param.thinterfaceURL=" + escape(thinterfaceURL) +
-                         "&param.CICURI=" + escape(CICURI) +
-                         "&param.naturalLanguage=" + escape(naturalLanguage) +
-                         "&param.annotations=" + escape(annotations) +
-                         "&param.topurl=" + escape(interface_topurl) +
-                         "&prop.method=html"));
-       }
-function help(w) // quando invocata, visualizza l' help relativo ad un oggetto. Di solito Ã¨ legata ad un evento onFocus o onMouseOver.  
-       {
-       hw.document.close();
-       switch (w)      {
-                       case -10: hw.document.write("Insert an <a href="+top.topurl+top.action+"grammarpdq.html#Id target=gw>Id</a> or an <a href="+top.topurl+top.action+"grammarpdq.html#Uri target=gw>Uri</a> here.")
-                               break;
-                       case -9: hw.document.write("By clicking this you may add or remove aliases as you wish.")
-                               break;
-                       case -81: hw.document.write("Allows you to recover your last input")
-                               break;
-                       case -8: hw.document.write("Allows you to delete your last input")
-                               break;
-                       case -7: hw.document.write("Erases your query and starts a new pre-defined query, you will keep your list of aliases.")
-                               break;
-                       case -6: hw.document.write("Puts this string in the current cursor position. This button works only with Internet Explorer.")
-                               break;
-                       case -5: hw.document.write("Erases your query and starts a new one.")
-                               break;
-                       case -4: hw.document.write("If you click this your query will be processed and the results will appear in the frame above.")
-                               break;
-                       case -3: hw.document.write("Substitutes your query with the text written in the area above. Unless you have a good knowledge of MathQL, it's recommended that you use this only to recover errors.")
-                               break;
-                       case -2: hw.document.write("This is the edit/submit window. You can modify your query here, but be aware that no syntax check will be performed and that if you enter a <a href="+top.topurl+top.action+"grammar.html#rvar target=gw>variable</a> it won't be available for quick composition later. You may also want to add a <a href="+top.topurl+top.action+"grammar.html#set target=gw>set</a>, a <a href="+top.topurl+top.action+"grammar.html#val target=gw>val</a> or a <a href="+top.topurl+top.action+"grammar.html#boole target=gw>boole</a> somewhere in the query. If you do, write '&lt;set&gt;','&lt;val&gt;' or '&lt;bol&gt;' in the point you'd like it to appear, or use the buttons on the right if you are using IE. When you're done with the query, click the Submit button.")
-                               break;
-                       case -1: hw.document.write("You may see the grammar here.")
-                               break;
-                       case 0: hw.document.write("")
-                               break;
-                       case 1: hw.document.write("You may enter an arbitrary statement here; be careful since syntax errors won't be detected.");                              
-                               break;  
-                       case 2: hw.document.write("Enter an <a href="+top.topurl+top.action+"grammar.html#attr_list target=gw>attr_list</a> here.");
-                               break;
-                       case 3: hw.document.write("Enter an <a href="+top.topurl+top.action+"grammar.html#id target=gw>id</a> here.");
-                               break;
-                       case 4: hw.document.write("You must select one previously entered <a href="+top.topurl+top.action+"grammar.html#rvar target=gw>rvar</a>. If you haven't already entered at least one, you can't choose this. ");
-                               break;
-                       case 5: hw.document.write("Enter a <a href="+top.topurl+top.action+"grammar.html#path target=gw>path</a> here.");
-                               break;
-                       case 6: hw.document.write("You must select one previously entered <a href="+top.topurl+top.action+"grammar.html#svar target=gw>svar</a>. If you haven't already entered at least one, you can't choose this. ");
-                               break;
-                       case 7: hw.document.write("Enter a <a href="+top.topurl+top.action+"grammar.html#string_list target=gw>string_list</a> here.");
-                               break;
-                       case 8: hw.document.write("You must select one <a href="+top.topurl+top.action+"grammar.html#vvar target=gw>vvar</a> previously entered as an 'attr'. If you haven't already entered at least one, you can't choose this. ");
-                               break;
-                       case 81: hw.document.write("You must select one <a href="+top.topurl+top.action+"grammar.html#vvar target=gw>vvar</a> previously entered in a 'let' statement. If you haven't already entered at least one, you can't choose this. ");
-                               break;
-                       case 9: hw.document.write("Enter a single <a href="+top.topurl+top.action+"grammar.html#quoted_string target=gw>quoted_string</a> here.");
-                               break;
-                       }       
-       }
-function tpa(quotpath)
-       {
-       while (quotpath.indexOf("<")>-1)
-               {quotpath=quotpath.replace("<","&lt;");}
-       while (quotpath.indexOf(">")>-1)
-               {quotpath=quotpath.replace(">","&gt;");}
-       return (quotpath);
-       }
-function idcheck(ident)
-       {
-       lettera=/[a-zA-Z]/;
-       partediid=/[a-zA-Z0-9_\-\']/;
-       if (!lettera.test(ident.charAt(0))){alert("an Id must begin with a letter.");return(0)}
-       while (ident.length>0)
-               {
-               ident=ident.substring(1,(ident.length));
-               if (ident.length>0){
-               if (!partediid.test(ident.charAt(0))){alert(ident.charAt(0)+" is not a valid character for an Id.");return(0);}
-               }}
-       return(1)
-       }
-function uricheck(ident)
-       {
-       cifra=/[0-9]/
-       cic=ident.substring(0,5);//alert(cic);
-       if (cic!="cic:/"){alert("an Uri must begin with the string 'cic:/'");return(0);}
-       ident=ident.substring(5,ident.length);//alert(ident);
-       if (ident.indexOf(".")<0){alert("an Uri must contain a '.'");return(0);}
-       ident1=ident.substring(0,ident.indexOf("."));//alert(ident1);
-       ident2=ident.substring(ident.indexOf(".")+1,ident.length);//alert(ident2);
-       while (ident1.length>0)
-               {       
-               if (ident1.indexOf("/")>-1)             
-                       {
-                       if (idcheck(ident1.substring(0,ident1.indexOf("/")))==0){return (0)}
-                       ident1=ident1.substring(ident1.indexOf("/")+1,ident1.length);//alert(ident1);
-                       }
-               else {if (idcheck(ident1)==0){return (0)}       
-                       ident1="";}
-               }
-       if (ident2=="con"||ident2=="var"){return(1)}
-       if (ident2.substring(0,6)!="ind#1/"){alert ("syntax error in the Uri.");return(0);}
-       ident2=ident2.substring(6,ident2.length);//alert(ident2);
-       if (!cifra.test(ident2.charAt(0))){alert ("syntax error in the Uri.");return(0);}
-       if (ident2.indexOf("/")>-1)
-               {
-               while (ident2.charAt(0)!="/")
-                       {
-                       //alert(ident2);
-                       if (!cifra.test(ident2.charAt(0))){alert ("syntax error in the Uri.");return(0);}
-                       ident2=ident2.substring(1,ident2.length);
-                       }
-               }
-       while (ident2.length>0)
-               {
-               //alert(ident2);
-               ident2=ident2.substring(1,ident2.length);
-               if (ident2.length>0){
-               if (!cifra.test(ident2.charAt(0))){alert ("syntax error in the Uri.");return(0);}
-               }}
-       
-       return(1)
-       }
-function gramcheck(how,what) // esegue il controllo sintattico sulla stringa "what", controllando che rispetti i requisiti indicati dalla clausola "how". Se qualcosa non Ã¨ ok, la variabile "wrong" viene posta ad 1 e la stringa da aggiungere viene ignorata, mentre viene visualizzato un apposito messaggio di errore.             
-       {
-       var slash=0;
-       var alpha=/[A-Za-z:_]/
-       var numero=/[0-9]/
-       switch (how)    {               
-                       case "qsl": // lista di quoted string
-                               if (what.charAt(0)!="{") {gramcheck("qs",what);break;}
-                               if (what.charAt(what.length-1)!="}") {alert ("The list must end with a '}'.");wrong=1;break;}
-                               what=what.substring(1,what.length-1);//alert (what);
-                               while (what.indexOf("\",\"")>-1)
-                                       {
-                                       as=what.substring(0,what.indexOf("\",\"")+1);//alert(as);
-                                       what=what.substring(what.indexOf("\",\"")+2,what.length);//alert(what);
-                                       gramcheck("qs",as);
-                                       }
-                               gramcheck("qs",what);
-                               break;
-                       case "qp": // quoted path
-                               if (what.charAt(0)!="\"") {alert ("A quoted string must be included between quotes."); wrong=1; break;}
-                               if (what.charAt(what.length-1)!="\"") {alert ("A quoted string must be included between quotes."); wrong=1; break;}
-                               while (what.indexOf("\"/\"")>-1)
-                                       {
-                                       as=what.substring(0,what.indexOf("\"/\"")+1);//alert(as);
-                                       what=what.substring(what.indexOf("\"/\"")+2,what.length);//alert(what);
-                                       gramcheck("qs",as);
-                                       }
-                               gramcheck("qs",what);
-                               break;
-                       case "qs": // quoted string
-                               if (what.charAt(0)!="\"") {alert ("A quoted string must be included between quotes."); wrong=1; break;}
-                               if (what.charAt(what.length-1)!="\"") {alert ("A quoted string must be included between quotes."); wrong=1; break;}
-                               what=what.substring(0,what.length-1);//alert (what);
-                               if (wrong==1) break;
-                               else while (what.length>0)
-                                       {
-                                       what=what.substring(1,what.length);
-                                       if (what.charAt(0)=="\"" && slash==0) {alert ("A \" in a quoted string must be preceded by a \\.");wrong=1;break;} 
-                                       if (what.charAt(0)=="\\") {slash=1} else {slash=0} 
-                                       if (slash==1 && what.length==1) {alert ("A \\ in a quoted string must be followed by something.");wrong=1;}
-                                       }
-                               break;
-                       case "vlist": // lista di vvar (tutto ciò che si trova dopo "attr")
-                               //alert(what.substring(0,4));                           
-                               if ((what.substring(0,4))!="attr"){wrong=1;alert("A vvar_list must begin with the word 'attr'")}
-                               what=what.substring(5,(what.length));vl=what;
-                               //alert(what+"what");
-                               while (what.length>0)
-                                                       {
-                                                       if (what.indexOf(",")>0) {vv=(what.substring(0,what.indexOf(",")));}
-                                                       else {vv=what}                                  
-                               //alert(vv+"vv");
-                                                       if (vv.charAt(0)!="$"){wrong=1;alert("A vvar must begin with a '$'");}
-                                                       if (vv.indexOf("<-")>0)
-                                                                       {
-                                                                       what=what.substring(vv.length+1,what.length);
-                               //alert(what+" nuovowhat "+wrong);
-                                                                       path=vv.substring(vv.indexOf("<-")+2,vv.length);
-                               //alert(path+" path "+wrong);
-                                                                       gramcheck("qp",path); 
-                                                                       vv=vv.substring(1,(vv.indexOf("<-")));
-                               //alert(vv+" vv "+wrong);
-                                                                       gramcheck("id",vv);
-                                                                       }
-                                                       else {wrong=1;alert("An Assign must contain a '<-'.");what="";}
-                               //alert (what+"what");  
-                                                       }
-                               break;
-                       case "id":
-                               //alert (what.charAt(0));
-                               if (!alpha.test(what.charAt(0))) {wrong=1;alert("An ID must begin with a letter , ':' , or '_' .");}
-                               while (what.length>1)   {
-                                       what=what.substring(1,(what.length));
-                                       if (!alpha.test(what.charAt(0)) && !numero.test(what.charAt(0)))
-                                       {wrong=1;alert(what.charAt(0)+" is not a valid character for an id.");}
-                                       //document.write(what+"<BR>");
-                                                       }       
-                               break;
-                       }
-       
-       if (how=="vlist" && wrong==0) // nel caso in cui sia stato eseguito il controllo su una lista di vvar e non siano stati riscontrati errori, tutte le variabili inserite vengono memorizzate.
-               {
-               while (vl.length>0)
-                       {
-                       if (vl.indexOf(",")>-1)
-                               {
-                               vvars2[novvars2++]=vl.substring(0,vl.indexOf("<"));
-                               vl=vl.substring(vl.indexOf(",")+1,vl.length);
-                               }
-                       else    
-                               {
-                               vvars2[novvars2++]=vl.substring(0,vl.indexOf("<"));;
-                               vl="";
-                               }                                               
-                       }
-               //alert ("esco dal loop");
-               }
-       if (wrong==0) {cw.inputok=1} else stadd="";
-       }
-function savelink(n,t) // invocata quando si clicca su un link, memorizza quale di questi debba poi essere sostituito. 
-       {
-       if (t=='s') { top.ltr="[?set"+String(n)+"]";}
-       if (t=='v') { top.ltr="[?val"+String(n)+"]";}
-       if (t=='b') { top.ltr="[?bol"+String(n)+"]";}
-//     alert(ltr);
-       }
-function aggcw() // invocata automaticamente ad ogni modifica della variabile "query", fa apparire nel frame in alto a destra il menu di composizione relativo al primo link della query. Consente quindi di comporre tutta la query senza mai cliccare su alcun link. 
-       {
-       pq=query;
-       while (pq.length>0)
-               {
-               if (pq.indexOf("[?")>-1)        
-                       {
-                       ltr=pq.slice(pq.indexOf("[?"));
-                       ltr=ltr.substring(ltr.indexOf("[?"),(ltr.length-ltr.indexOf("[?"))-(ltr.length-ltr.indexOf("]")-1));
-                       wto=ltr.substring(2,5);
-                       if (wto=="set") {window.open(top.topurl+action+"set.html","cw");pq="";}
-                       else if (wto=="val") {window.open(top.topurl+action+"val.html","cw");pq="";}
-                       else if (wto=="bol") {window.open(top.topurl+action+"boole.html","cw");pq="";}
-                       else pq=pq.substring(pq.indexOf("[?")+2,pq.length);
-                       }
-               else {window.open(top.topurl+action+"blank.html","cw");pq="";}
-               } 
-       }
-function aggform() // aggiorna il form nel frame centrale. Invocata ad ogni cambio della variabile "query".
-       {
-       cquery=query;
-       while (cquery.indexOf("<")>-1)
-               {
-               cquery=cquery.replace(cquery.substring(cquery.indexOf("<"),cquery.indexOf(">")+1),"");
-               //alert(cquery);
-               }
-       while (cquery.indexOf("[?")>-1)
-               {
-               //alert(cquery);
-               if (cquery.indexOf("]")>-1)
-                       {
-                       while (cquery.indexOf("]")<cquery.indexOf("[?") && cquery.indexOf("]")>-1)
-                       {cquery=cquery.replace("]","q+u+a+d+r+a+c+h+i+u+s+a");}//alert("loop"+cquery.indexOf("]")+cquery.indexOf("[?"))}
-                       ag1=cquery.slice(cquery.indexOf("[?"));//alert(ag1);
-                       ag1=ag1.substring(ag1.indexOf("[?"),(ag1.length-ag1.indexOf("[?"))-(ag1.length-ag1.indexOf("]")));//alert(ag1);
-                       ag2=ag1.substring(2,5);//alert(ag2);
-                       if (ag2=="set") cquery=cquery.replace(cquery.substring(cquery.indexOf("[?"),cquery.indexOf("]")+1),"<set>");
-                       else if (ag2=="val") cquery=cquery.replace(cquery.substring(cquery.indexOf("[?"),cquery.indexOf("]")+1),"<val>");
-                       else if (ag2=="bol") cquery=cquery.replace(cquery.substring(cquery.indexOf("[?"),cquery.indexOf("]")+1),"<boole>");
-                       else cquery=cquery.replace(cquery.substring(cquery.indexOf("[?"),cquery.indexOf("[?")+1),"q+u+a+d+r+a");
-                       //alert(cquery);
-                       }
-               else {cquery=cquery.replace("[?","q+u+a+d+r+a?")}
-               //alert(cquery);        
-               }
-       while (cquery.indexOf("q+u+a+d+r+a+c+h+i+u+s+a")>-1)
-               {
-               cquery=cquery.replace("q+u+a+d+r+a+c+h+i+u+s+a","]");
-               }
-       while (cquery.indexOf("q+u+a+d+r+a")>-1)
-               {
-               cquery=cquery.replace("q+u+a+d+r+a","[");
-               }
-       while (cquery.indexOf("&lt;")>-1)
-               {
-               cquery=cquery.replace("&lt;","<");
-               }
-       while (cquery.indexOf("&gt;")>-1)
-               {
-               cquery=cquery.replace("&gt;",">");
-               }
-       top.sw.agg();
-       }
-function ripristina()
-       {
-       //alert (actinput+" "+storia.length);
-       if (numeroazioniannullate>0)
-               {
-               numeroazioniannullate--;
-               query=storia[actinput+1];actinput++;
-               qw.document.close();
-               qw.document.write(query);
-               aggform();
-               sw.apply();
-               aggcw();
-               cw.focus();
-               }
-       }
-function annulla()
-       {
-       //alert (actinput+" "+storia.length);
-       if (actinput>0)
-               {
-               numeroazioniannullate++;
-               query=storia[actinput-1];actinput--;
-               qw.document.close();
-               qw.document.write(query);
-               aggform();
-               sw.apply();
-               if (query=="*"){cw.location=top.topurl+action+"set.html";ltr="*";} else {aggcw();}
-               cw.focus();
-               }
-       }
-function parse() // prende la stringa che si sta tentando di inserire nella query, aggiunge i link dove necessario e mette il risultato nella variabile "fb"
-       {
-       while (fb.indexOf("[set]")>-1){
-       if (fb.indexOf("set")>0)
-               {
-      fb=fb.replace("[set]","<A HREF="+top.topurl+action+"set.html target=cw onclick=top.savelink("+top.storeps+",'s')>[?set"+top.storeps+"]</A>");
-               top.storeps++;
-               }
-                                        }
-       while (fb.indexOf("[val]")>-1){
-       if (fb.indexOf("val")>0)
-               {
-      fb=fb.replace("[val]","<A HREF="+top.topurl+action+"val.html target=cw onclick=top.savelink("+top.storepv+",'v')>[?val"+top.storepv+"]</A>");
-               top.storepv++;
-               }
-                                        }
-       while (fb.indexOf("[boole]")>-1){
-       if (fb.indexOf("boole")>0)
-               {
-               fb=fb.replace("[boole]","<A HREF="+top.topurl+action+"boole.html target=cw onclick=top.savelink("+top.storepb+",'b')>[?bol"+top.storepb+"]</A>");
-               top.storepb++;
-               }
-                                        }
-       }
-function aggq() // aggiorna la query sostituendo l' ultimo link editato con la stringa inserita, poi aggiorna tutti i frame.
-       {
-       //window.open(top.topurl+action+"summary.html","cw");
-       qw.document.close();
-       fb=stadd;       
-       nst=ltr.substring(5,(ltr.length-1));// alert(nst+" "+ltr);
-       query=query.replace("<A HREF="+top.topurl+action+"set.html target=cw onclick=top.savelink("+nst+",'s')>"+ltr+"</A>",ltr);
-       query=query.replace("<A HREF="+top.topurl+action+"val.html target=cw onclick=top.savelink("+nst+",'v')>"+ltr+"</A>",ltr);
-       query=query.replace("<A HREF="+top.topurl+action+"boole.html target=cw onclick=top.savelink("+nst+",'b')>"+ltr+"</A>",ltr);
-       parse();
-       query=query.replace(ltr,fb);
-       actinput++;storia[actinput]=query;numeroazioniannullate=0;//alert (actinput+" "+storia.length);
-       qw.document.write(query);aggform();
-       aggcw();
-       cw.focus();
-       }
-var re1 = /(.*)\?.*/;
-var re2 = /(.*)\/.*/;
-var topurl=document.location+"";
-topurl = topurl.replace(re1,"$1");
-topurl = topurl.replace(re2,"$1");
-//var topurl=document.location.protocol+'//'+document.location.host;
-var action="/getpage?url=";
-//var action="";
-
-
-// UTILITY FUNCTIONS FOR templateambigpdq1.html
-function templateambigpdq1_armageddon()
-       {
-       top.initialize();
-       top.window.open(top.topurl+top.action+"start.html","qw");
-       top.window.open(top.topurl+top.action+"blank.html","cw");
-       top.window.open(top.topurl+top.action+"blank.html","hw");
-       top.window.open(top.topurl+top.action+"blank.html","gw");
-       top.window.open(top.topurl+top.action+"blank.html","sw");
-       }
-
-function templateambigpdq1_resetta()
-       {
-       if (confirm("This will erase your query and start a new one. Are you sure you want to do this?"))
-               {templateambigpdq1_armageddon();}
-       }
-
-function templateambigpdq1_listauri(document,elenco)
-       {
-       for (i=0;i<elenco.length;i++)
-               {
-               document.write("<input type=checkbox name=uricheck value="+elenco[i]+"> "+elenco[i]+"<br>"); 
-               }
-       }
-
-function templateambigpdq1_invia(document,top,elenco,ident)
-       {
-       vecchiavlds=top.vlds.length;
-       stringa=top.topurl+"/"+top.current_query+"?term="+top.terminecic;
-       stringa=stringa+"&aliases="+top.listaliases;
-       stringa=stringa+"&choices=";
-  var choices = "";
-       top.vlds[top.vlds.length]=ident;
-       for (j=0;j<elenco.length;j++)
-               {
-               if (document.disamb.uricheck[j].checked)
-                       {
-                       top.vlds[top.vlds.length]=document.disamb.uricheck[j].value;
-                       }
-               }
-       top.vlds[top.vlds.length]=";";
-       for (j=0;j<top.vlds.length;j++)
-       {
-           choices=choices+(top.vlds[j]==";"?";":escape(top.vlds[j]))+" ";
-       }
-       choices=choices.substring(0,choices.length-2);
-  top.choices = choices;
-  stringa=stringa+escape(choices);
-       if (top.vlds.length==vecchiavlds){alert("You must select at least one of the options.");}
-       else
-       {
-          window.open(ask_uwobo(stringa),"cw");
-       }
-       } 
-
-  function templateambigpdq1_selezionaCostanti(document,elenco) {
-    for (i=0; i<elenco.length; i++) {
-      if (elenco[i].substring(elenco[i].length-4, elenco[i].length) != ".var") {
-        document.disamb.uricheck[i].checked = true;
-      } else {
-        document.disamb.uricheck[i].checked = false;
-      }
-    }
-  }
-
-
-
-// UTILITY FUNCTIONS FOR templateambigpdq2.html
-function templateambigpdq2_armageddon()
-       {
-       top.initialize();
-       top.window.open(top.topurl+top.action+"start.html","qw");
-       top.window.open(top.topurl+top.action+"blank.html","cw");
-       top.window.open(top.topurl+top.action+"blank.html","hw");
-       top.window.open(top.topurl+top.action+"blank.html","gw");
-       top.window.open(top.topurl+top.action+"blank.html","sw");
-       }
-
-function templateambigpdq2_resetta()
-       {
-       if (confirm("This will erase your query and start a new one. Are you sure you want to do this?"))
-               {templateambigpdq2_armageddon();}
-       }
-
-function templateambigpdq2_listainterpretazioni(document,elenco,labels)
-       {
-       for (i=0;i<elenco.length;i++)
-               {
-                      document.write("<input type=radio name=interp value="+elenco[i]+"> "+labels[i]+"<br />"); 
-               }
-       }
-
-function templateambigpdq2_invia(document,elenco)
-       {
-       stringa=top.topurl+"/"+top.current_query+"?term="+top.terminecic;
-       stringa=stringa+"&aliases=";
-       controllo=stringa.length;
-       for (j=0;j<elenco.length;j++)
-               {
-               if (document.disamb.interp[j].checked)
-                       {
-                       stringa=stringa+escape(elenco[j]);
-
-      // TODO da implementare nella terza fase
-                       //top.aliasglob[top.aliasglob.length]=document.disamb.interp[j].value;
-
-                       //for (k=0;k<top.aliasglob.length;k++){alert(top.aliasglob[k])}
-                       //top.listaliases=top.listaliases+document.disamb.interp[j].value;//in caso di query ulteriori con la stessa lista di alias
-                       }
-                       
-               }
-       if (stringa.length!=controllo) 
-               {
-               window.open(ask_uwobo(stringa),"cw");
-               }
-               else {alert("You must choose one option.");}
-       } 
-
-
-
-// UTILITY FUNCTIONS FOR templateambigpdq3.html
-function templateambigpdq3_init(aliases)
-{
-   top.aliasglob = new Array();
-   for (i=0; i<aliases.length; i++) {
-      top.aliasglob[i] = aliases[i];
-   }
-   top.vlds=new Array();
-   top.window.open(top.topurl+top.action+"editorpdq.html", "sw");
-}
-
-// UTILITY FUNCTIONS FOR constraints_choice_template.html
-function get_value_of_checkbox(checkbox)
-  {
-    return (checkbox.checked ? "1" : "0");
-  }
-
-function constraints_choice_template_invia(document,aliases,constr_obj_len,constr_rel_len,constr_sort_len)
-       {
-       stringa=top.topurl+"/"+top.current_query+"?term="+top.terminecic;
-       stringa=stringa+"&aliases="+escape(aliases);
-       stringa=stringa+"&choices="+escape(top.choices);
-       stringa=stringa+"&constraints=";
-       for (j=0;j<constr_obj_len;j++)
-        {
-         stringa += document.constraints.constr_obj[j].checked ? "1" : "0";
-      stringa += !document.constraints.obj_depth[j] ||
-                 document.constraints.obj_depth[j].value == "" ? "_" :
-                 document.constraints.obj_depth[j].value;
-      if (j < constr_obj_len - 1) { stringa += "," }
-        }
-  stringa += ":";
-       for (j=0;j<constr_rel_len;j++)
-        {
-         stringa += document.constraints.constr_rel[j].checked ? "1" : "0";
-      stringa += document.constraints.rel_depth[j].value == "" ? "_" :
-                 document.constraints.rel_depth[j].value;
-        if (j < constr_rel_len - 1) { stringa += "," }
-        }
-  stringa += ":";
-       for (j=0;j<constr_sort_len;j++)
-        {
-         stringa += document.constraints.constr_sort[j].checked ? "1" : "0";
-      stringa += document.constraints.sort_depth[j].value == "" ? "_" :
-                 document.constraints.sort_depth[j].value;
-      if (j < constr_sort_len - 1) { stringa += "," }
-        }
-  stringa += ":"+get_value_of_checkbox(document.constraints.only_obj)+
-             ":"+get_value_of_checkbox(document.constraints.only_rel)+
-             ":"+get_value_of_checkbox(document.constraints.only_sort);
-       window.open(ask_uwobo(stringa),"cw");
-       } 
-</SCRIPT>
-</HEAD>
-  <SCRIPT>
-    document.write(' <FRAMESET ROWS="69%,31%"> <FRAMESET COLS="40%,60%"> <FRAMESET ROWS="46%,54%"> <FRAME NAME="qw" SRC="'+topurl+action+'start.html"> <FRAME NAME="sw" SRC="'+topurl+action+'blank.html"> </FRAMESET> <FRAME NAME="cw" SRC="'+topurl+action+'blank.html"> </FRAMESET> <FRAMESET COLS="49%,51%"> <FRAME NAME="gw" SRC="'+topurl+action+'blank.html" onFocus="help(-1)";> <FRAME NAME="hw" SRC="'+topurl+action+'blank.html"> </FRAMESET> </FRAMESET>');
-  </SCRIPT>
-</HTML>
diff --git a/helm/searchEngine/html/loc_obj.html b/helm/searchEngine/html/loc_obj.html
deleted file mode 100644 (file)
index b6b5222..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-function armageddon()
-       {
-               top.terminecic="";top.listaliases="";top.ricordaliaslist=0;top.vlds=new Array();var alias="";var expr="";
-               top.initialize();
-               top.window.open(top.topurl+top.action+"start.html","qw");
-               top.window.open(top.topurl+top.action+"blank.html","cw");
-               top.window.open(top.topurl+top.action+"blank.html","hw");
-               top.window.open(top.topurl+top.action+"blank.html","gw");
-               top.window.open(top.topurl+top.action+"blank.html","sw");
-       }
-function invia()
-       {
-       top.window.open(top.topurl+top.action+"start.html","qw");
-       top.window.open(top.ask_uwobo(top.topurl+"/locate?id="+document.locate.oggetto.value),"bw");
-       }
-</SCRIPT>
-</HEAD>
-<BODY>
-<form name="locate" method="get" action="Javascript:invia();">
-<input name="oggetto" type=text size=30>
-Insert here the name of the object you want to search.
-<br><input type=submit value="Display results" onMouseOver="top.help(-4)">
-<input type=button value="Restart" onMouseOver="top.help(-5)" onClick="armageddon()"></input>
-</form>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/manual/alias.jpg b/helm/searchEngine/html/manual/alias.jpg
deleted file mode 100644 (file)
index 0f57638..0000000
Binary files a/helm/searchEngine/html/manual/alias.jpg and /dev/null differ
diff --git a/helm/searchEngine/html/manual/ex1.jpg b/helm/searchEngine/html/manual/ex1.jpg
deleted file mode 100644 (file)
index 8e75c08..0000000
Binary files a/helm/searchEngine/html/manual/ex1.jpg and /dev/null differ
diff --git a/helm/searchEngine/html/manual/frames.jpg b/helm/searchEngine/html/manual/frames.jpg
deleted file mode 100644 (file)
index 994b7ae..0000000
Binary files a/helm/searchEngine/html/manual/frames.jpg and /dev/null differ
diff --git a/helm/searchEngine/html/manual/index.html b/helm/searchEngine/html/manual/index.html
deleted file mode 100644 (file)
index 8efa276..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<html>
-<head>
-<title>Search Engine Interface Online Manual</title>
-</head>
-<body>
-<h1>Search Engine Interface Online Manual</h1>
-<h2>Index</h2>
-1. <a href="#roles">Roles of the frames</a><br>
-2. <a href="#mqlquery">How to compose a low-level query</a><br>
-3. <a href="#pdqquery">How to compose a pre-defined query</a><br>
-<a name="roles"><h2>1. Roles of the frames</h2></a>
-<p>
-The interface is composed by five frames, as you can see below.<br><br>
-<img src="./frames.jpg"><br><br>
-Each frame has its own role, in particular:<br><ul>
-<li>frame <b>1</b> contains the query as it is, the frame is refreshed whenever you modify the query.<br>
-<li>frame <b>2</b> contains all the available options for the composition of the query, it's where most of the interaction happens.<br>
-<li>frame <b>3</b> contains the form used for the submission of the query and various buttons to modify it.<br>
-<li>frame <b>4</b> contains the grammar.<br>
-<li>frame <b>5</b> contains online help.<br>
-</ul>
-</p>
-<a name="mqlquery"><h2>2. How to compose a low-level query</h2></a>
-<p>
-In order to compose a low-level query, you must click the &quot;compose a query&quot; button in the main page. Here's what you'll get:<br> <ul><li>In frame 1, you have the query in its actual state, so at the beginning the frame is empty. Later, the frame will be updated automatically on every change of the query and will contain hypertextual links in this form: <b>[?&lt;production name&gt;&lt;production number&gt;]</b>. Possible names are &quot;set&quot;,&quot;val&quot; and &quot;bol&quot; and they represent the main productions of MathQL grammar. By clicking on each of these links you'll obtain the visualization of possible options for the corresponding production in frame 2, allowing the sobstitution of the link with what will be selected.<br> <li>Frame 2 contains, in order: the identifier of the production you are choosing (e.g. <b>[?set1]</b> or <b>[?bol3]</b>), an &quot;undo&quot; button, a &quot;redo&quot; button, the options list, a &quot;compose&quot; button to confirm your choice, a &quot;get help&quot; button to know the semantic meaning of the selected option. The options list is composed by various radio buttons, sometimes you'll have only to select one of them while sometimes you'll have to fill input areas with identifiers, paths or other things: anyway, whenever an input area gets the focus, a help about what you can write there will appear in frame 5.<br>
-<li>Frame 3 contains a textarea with the query, a &quot;submit the query&quot; button, a &quot;restart&quot; button (it will bring you to the main page, erasing you query) and an &quot;apply changes&quot; button to modify the query. <br><li> Frame 4 contains the MathQL grammar.<br> <li>Frame 5 contains various help messages, whenever an object gets the focus a message will appear there.<br></ul>
-Being &quot;set&quot; the main production of MathQL, at the beginning frame 1 is empty and frame 2 contains the menu for &quot;set&quot;. You should choose one option by clicking on its radio button and then press &quot;compose&quot;. The interface will perform a syntax check of what you entered and should something be wrong a message will appear, otherwise the query will be updated. Afterwards, the query will appear in frame 1 and in frame 3, and frame 2 will display the menu of the first production found in the new query string. For example, in the picture below you see the interface after the selection of the 10th production inserting &quot;positions&quot; as the requested identifier. As you can see, frame 2 now displays the &quot;val&quot; menu.<br><br>
-<img src="./ex1.jpg"><br><br>
-Now your options include following the instructions in frame 2, choosing a different production by clicking on a link in frame 1, or manually modifying the query by writing the changes in the textarea in frame 3 and then clicking &quot;apply changes&quot;. Obviously &quot;undo&quot; and &quot;redo&quot; buttons will allow you to recover from mistakes; just DON'T use &quot;back&quot;,&quot;forward&quot; and &quot;refresh&quot; buttons on your browser since they will cause unpredictable errors. Once the query is completed, the &quot;submit the query&quot; button will display the results in frame 2.</p>
-<a name="pdqquery"><h2>3. How to compose a pre-defined query</h2></a>
-<p>
-There are actually three pre-defined queries, <b>Locate Object</b>, <b>Search Pattern</b> and <b>Match Conclusion</b>. By clicking on &quot;submit a pre-defined query&quot; in the main page, a small menu with the three options will appear in frame 2. <br>
-<b>Locate Object</b> is very simple, you must enter the name of the object to search in the text box and click &quot;display results&quot;.<br>
-<b>Search Pattern</b>, which takes a CIC term and finds theorems which have it as thesis, and <b>Match Conclusion</b> which takes a CIC term and finds theorems which have it as conclusion, have an identical interface, being the only difference in the output. 
-First thing to do is to insert a list of aliases (you may skip this step since the search engine will ask you later about ambiguous interpretations of your query if you don't know objects names, for example), then you must compose the CIC term. Composing a CIC term is pretty much the same thing as composing a MathQL query, except that the term is usually so short that there is no need for links, undo buttons and the like. While composing the term, you may modify your list of aliases (i.e. add or remove them) anytime by clicking &quot;edit&quot; in the frame 3. When the query is completed, the &quot;submit&quot; button will display the results in frame 2, and the server will ask you to solve ambiguities, thus adding aliases to your list.  Once a result is displayed, you may want to submit a different query but keep your aliases; in this case, just click &quot;new expression&quot; in frame 3. The &quot;edit&quot; button will work even in this phase.<br><br>
-<img src="./alias.jpg"><br><br>
-</p>
-
-</body>
-</html>
diff --git a/helm/searchEngine/html/mat_con.html b/helm/searchEngine/html/mat_con.html
deleted file mode 100644 (file)
index 5fab873..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-parent.mcq="[Alias list] [Expr]";
-parent.aggq();
-</SCRIPT>
-</HEAD>
-<BODY>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/paginacollink.html b/helm/searchEngine/html/paginacollink.html
deleted file mode 100644 (file)
index 83f41bc..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-function apriquery()
-       {
-       window.open(top.topurl+"/getpage?url=index.html","new",hotkeys="no");
-       }
-</SCRIPT>
-</HEAD>
-<BODY>
-<a href="#" onClick="apriquery();">Query composer</a>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/pdq.html b/helm/searchEngine/html/pdq.html
deleted file mode 100644 (file)
index b4f5fe6..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-var mcq="";
-var toq=0;
-alist=new Array(10);
-var calias=0;
-function armageddon()
-       {
-       top.initialize();
-       top.window.open(top.topurl+top.action+"start.html","qw");
-       top.window.open(top.topurl+top.action+"blank.html","cw");
-       top.window.open(top.topurl+top.action+"blank.html","hw");
-       top.window.open(top.topurl+top.action+"blank.html","gw");
-       top.window.open(top.topurl+top.action+"blank.html","sw");
-       }
-function aggiorna()
-       {
-       window.open(top.topurl+top.action+"aliaslist.html","bw");
-       top.cw.bw.document.aliaslist.idi.focus();
-       }
-function aggiorna2()
-       {
-       window.open(top.topurl+top.action+"expnamedsubst.html","bw");
-       bw.document.aliaslist.varid.focus();
-       }
-function parse() 
-       {
-       //alert(mcq);
-       calias=0;
-       if (mcq.indexOf("[")>-1)
-               {
-               mcq=mcq.replace("[","<font color=\"#ff0000\">[");
-               mcq=mcq.replace("]","]</font>");
-               top.qw.document.close();
-               top.qw.document.write(mcq);
-               if (mcq.charAt(mcq.indexOf("[")+1)=="A")
-                       {
-                       window.open(top.topurl+top.action+"aliaslist.html","bw")
-                       }
-               if (mcq.charAt(mcq.indexOf("[")+1)=="E")
-                       {
-                       window.open(top.topurl+top.action+"expr.html","bw")
-                       }
-               if (mcq.charAt(mcq.indexOf("[")+1)=="G")
-                       {
-                       window.open(top.topurl+top.action+"genid.html","bw")
-                       }
-               if (mcq.charAt(mcq.indexOf("[")+1)=="e")
-                       {
-                       window.open(top.topurl+top.action+"expnamedsubst.html","bw")
-                       }
-               }
-               else 
-                       {
-                       while (mcq.indexOf("&gt;")>-1)
-                               {
-                               mcq=mcq.replace("&gt;",">");
-                               }
-                       top.window.sw.editexpr(mcq);
-                       window.open(top.topurl+top.action+"blank.html","bw");
-                       window.open(top.topurl+top.action+"blank.html","qw");
-                       }
-       }       
-function aggq()
-       {
-       parse(mcq);
-       //top.qw.document.write(mcq);   
-       }
-</SCRIPT>
-</HEAD>
-<SCRIPT>
-  document.write(' <frameset rows="24%,76%" border="0" noresize> <frame name=tw src="'+top.topurl+top.action+'query_choice.html";> <frame name=bw src="'+top.topurl+top.action+'blank.html";> </frameset> ');
-</SCRIPT>
-</HTML>
diff --git a/helm/searchEngine/html/query_choice.html b/helm/searchEngine/html/query_choice.html
deleted file mode 100644 (file)
index 3e1932a..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-function armageddon()
-       {
-       top.initialize();
-       top.window.open(top.topurl+top.action+"start.html","qw");
-       top.window.open(top.topurl+top.action+"blank.html","cw");
-       top.window.open(top.topurl+top.action+"blank.html","hw");
-       top.window.open(top.topurl+top.action+"blank.html","gw");
-       top.window.open(top.topurl+top.action+"blank.html","sw");
-       }
-</SCRIPT>
-</HEAD>
-<BODY>
-<form>
-<table><tr><td>
-      <input type=radio name="qc" onFocus="top.cw.bw.location=top.topurl+top.action+'loc_obj.html';top.qw.location=top.topurl+top.action+'blank.html';top.sw.location=top.topurl+top.action+'blank.html';top.gw.location=top.topurl+top.action+'blank.html';parent.toq=1;this.blur();"> Locate Object<br>
-      <input type=radio name="qc" onFocus="top.cw.bw.location=top.topurl+top.action+'mat_con.html';top.qw.location=top.topurl+top.action+'blank.html';top.current_query='matchConclusion';top.sw.location=top.topurl+top.action+'editorpdq.html';parent.toq=2;this.blur();"> Match Conclusion<br>
-      <input type=radio name="qc" onFocus="top.cw.bw.location=top.topurl+top.action+'mat_con.html';top.qw.location=top.topurl+top.action+'blank.html';top.current_query='searchPattern';top.sw.location=top.topurl+top.action+'editorpdq.html';parent.toq=3;this.blur();"> Search Pattern<br>
-      <input type=radio name="qc" onFocus="top.cw.bw.location=top.topurl+top.action+'mat_con.html';top.qw.location=top.topurl+top.action+'blank.html';top.current_query='locateInductivePrinciple';top.sw.location=top.topurl+top.action+'editorpdq.html';parent.toq=3;this.blur();"> Locate Inductive Principle
-</td>
-</tr></table>
-</form>
-<SCRIPT language="Javascript">
-if (top.ricordaliaslist==1)
-       {
-       window.open(top.topurl+top.action+"expr.html","bw");parent.mcq="<font color=\"#ff0000\">[Expr]</font>";
-       top.qw.document.close();top.qw.document.write("<font color=\"#ff0000\">[Expr]</font>");
-       }
-</script>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/set.html b/helm/searchEngine/html/set.html
deleted file mode 100644 (file)
index a070889..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-var inputok=0;
-function listrvars()
-       {
-       for (num=0; num<top.norvars; num++)
-               {
-               document.write("<OPTION value="+top.rvars[num]+">"+top.rvars[num]);
-               }
-       }
-function listsvars()
-       {
-       for (num=0; num<top.nosvars; num++)
-               {
-               document.write("<OPTION value="+top.svars[num]+">"+top.svars[num]);
-               }
-       }
-function listvvars()
-       {
-       for (num=0; num<top.novvars; num++)
-               {
-               document.write("<OPTION value="+top.vvars[num]+">"+top.vvars[num]);
-               }
-       }
-function help()
-       {
-with (document.form1) {
-       if (selopt[0].checked)
-       alert ("Turns a list of strings which cannot have attributes (the [val]) in a list of strings which can have them, but initially has none (a [set]).");
-       if (selopt[1].checked)
-       alert ("Taken a list of posix regular expressions, 'pattern [val]' searches the HELM library for all the URIs which match with at least one of those and returns a [set] representing them.");
-       if (selopt[2].checked)
-       alert ("A [svar] represents a list of URIs with attributes.");
-       if (selopt[3].checked)
-       alert ("A [rvar] is a single URI with attributes.");
-       if (selopt[4].checked)
-       alert ("Parenthesis are employed to force precedence between operators.");
-       if (selopt[5].checked)
-       alert ("The [path] you must enter represents a relation; this production returns a [set] composed by the union of all the URIs which match the chosen relation in the [val] you will enter afterwards, without attributes. If you select 'inverse', you'll obtain a list of all the URIs for which the [val] matches the chosen relation, 'sub' and 'super' modify the result depending on the chosen relation and the last input box allows you to add attributes to the result.");
-       if (selopt[6].checked)
-       alert ("This production returns a [set] composed by all the URIs in the given [set] which match the condition in the given [boole].");
-       if (selopt[7].checked)
-       alert ("'Union' returns a [set] which is the union of the two given [set]; should an URI be present in each [set] with different attributes, it will be included in the result only once with all the attributes.\n'Intersect' returns a [set] which contains the cartesian product of the URIs listed in each given [set].\n'Diff' returns a [set] which contains the URIs found in the first given [set] but not in the second. Attributes are ignored.");
-       if (selopt[8].checked)
-       alert ("Allows you to assign a value to a [svar]");
-       if (selopt[9].checked)
-       alert ("Allows you to assign a value to a [vvar]");
-       }
-       }
-function choice()
-{
-top.stadd="";
-with (document.form1) {
-       inputok=0;voidfield=0;top.wrong=0;
-       if (selopt[0].checked) {
-               top.stadd="ref [val]";
-               inputok=1;
-                                         }
-       if (selopt[1].checked) {
-               top.stadd="pattern [val]";
-               inputok=1;
-                                         }
-       if (selopt[2].checked) {
-               top.stadd=set1.value;
-               if (set1.value!="") {inputok=1} else voidfield=1;
-                                         }
-       if (selopt[3].checked) {
-               top.stadd=set2.value;
-               if (set2.value!="") {inputok=1} else voidfield=1;
-                                         }
-       if (selopt[4].checked) {
-               top.stadd="([set])";
-               inputok=1;
-                                         }
-       if (selopt[5].checked) {
-               if (set5.value.charAt(set5.value.length-1)==","){set5.value=set5.value.substring(0,set5.value.length-1)}
-               if (set5.value.length<7) {set5.value=""};
-               set4.value=top.tpa(set4.value);
-               top.stadd="relation "+set25.value+" "+set3.value+" "+set4.value+" [val] "+set5.value;
-               top.gramcheck("qp",set4.value);
-               //alert(set5.value.charAt(set5.value.length-1));
-               top.stadd=top.tpa(top.stadd);
-               //while (top.stadd.indexOf("<")>-1)
-                       //{top.stadd=top.stadd.replace("<","&lt;");}
-               if (set5.value!="")
-               {top.gramcheck("vlist",set5.value);}
-               else inputok=1;
-                                         }
-       if (selopt[6].checked) {
-               top.stadd="select @"+set6.value+" in [set] where [boole]";
-               top.gramcheck("id",set6.value);
-               if ((set6.value!="") && (inputok==1))
-                       {
-                       top.rvars[top.norvars]="@"+set6.value;
-                       top.norvars++;  
-                       }
-                                         }
-       if (selopt[7].checked) {
-               top.stadd="[set] "+set7.value+" [set]";
-               inputok=1;      
-                                         }
-       if (selopt[8].checked) {
-               top.stadd="let %"+set8.value+" be [set] in [set]";
-               top.gramcheck("id",set8.value);
-               if ((set8.value!="") && (inputok==1))
-                       {
-                       top.svars[top.nosvars]="%"+set8.value;
-                       top.nosvars++;  
-                       }
-                                         }
-       if (selopt[9].checked) {
-               top.stadd="let $"+set9.value+" be [val] in [set]";
-               top.gramcheck("id",set9.value);
-               if ((set9.value!="") && (inputok==1))
-                       {
-                       top.vvars1[top.novvars1]="$"+set9.value;
-                       top.novvars1++; 
-                       }
-                                         }
-       if (selopt[10].checked) {
-               set10.value=top.tpa(set10.value);
-               top.stadd=set10.value;
-               if (set10.value!="") {inputok=1} else voidfield=1;
-                                         }
-                  }
-if (top.stadd!="" && inputok==1) {top.aggq()}
-       else if (voidfield==1) alert("You left at least one field unfilled");
-}
-</SCRIPT>
-</HEAD>
-<BODY>
-<h1> <SCRIPT language="Javascript">document.write(top.ltr) </SCRIPT>
-<input type="button" value="&lt;-" onmouseOver="top.help(-8)" onclick="top.annulla()">
-<input type="button" value="-&gt;" onmouseOver="top.help(-81)" onclick="top.ripristina()"></h1>
-<h2> Select one of the following: </h2>
-<form name="form1" action="Javascript:choice();" method="get">
-<input type="radio" name="selopt"> ref [val] <br>
-<input type="radio" name="selopt"> pattern [val] <br>
-<input type="radio" name="selopt"> <select name="set1" type=text onFocus="selopt[2].checked=true;top.help(6)"> 
-<SCRIPT language=Javascript> listsvars(); </SCRIPT>
-</select>
-<br>
-<input type="radio" name="selopt"> <select name="set2" type=text onFocus="selopt[3].checked=true;top.help(4)">
-<SCRIPT language=Javascript> listrvars(); </SCRIPT>
-</select>
-<br>
-<input type="radio" name="selopt"> ( [set] ) <br>
-<input type="radio" name="selopt"> relation 
-<select name="set25" onFocus="selopt[5].checked=true">
-<OPTION selected value="">  
-<OPTION value=inverse> inverse
-</select> 
-<select name="set3" onFocus="selopt[5].checked=true">
-<OPTION selected value=""> 
-<OPTION value=sub> sub
-<OPTION value=super> super
-</select> 
-<input name="set4" type=text size=15 value="&quot;&quot;" onFocus="selopt[5].checked=true;top.help(5)">
-[val] <input name="set5" type=text size=20 onFocus="selopt[5].checked=true;top.help(2);if (this.value=='') this.value='attr $';">
-<br>
-<input type="radio" name="selopt"> select @ <input name="set6" type=text onFocus="selopt[6].checked=true;top.help(3)"> 
-in [set] where [boole] <br> <input type="radio" name="selopt"> [set] 
-<select name="set7" onFocus="selopt[7].checked=true">
-<OPTION value=union> union
-<OPTION value=intersect> intersect
-<OPTION value=diff> diff
-</select> 
-[set]  <br>
-<input type="radio" name="selopt"> let %<input name="set8" type=text onFocus="selopt[8].checked=true;top.help(3)"> be [set] in [set] <br>
-<input type="radio" name="selopt"> let $<input name="set9" type=text onFocus="selopt[9].checked=true;top.help(3)"> be [val] in [set] <br>
-<input type="radio" name="selopt"> <input name="set10" type=text 
-onFocus="selopt[10].checked=true;top.help(1)">  <br>
-<input type="submit" value="compose"><input type="button" value="get help" onclick="help()">
-<!--input type="button" value="compose" onclick="choice()"><!--input type="button" value="get help" onclick="help()">
-</form>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/start.html b/helm/searchEngine/html/start.html
deleted file mode 100644 (file)
index c5a6ef7..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-</SCRIPT>
-</HEAD>
-<BODY>
-Are you lost? Consult the <a href="http://helm.cs.unibo.it/searchEngine/manual/index.html" target="_blank">on-line manual</a>
-<br><br>
-<center>
-  <input type=button value="Compose a query" onClick="top.cw.location=top.topurl+top.action+'set.html';top.gw.location=top.topurl+top.action+'grammar.html#set';top.sw.location=top.topurl+top.action+'editor.html';top.qw.location=top.topurl+top.action+'almost_blank.html';top.initialize();">
-<br><br>
-<input type=button value="Submit a pre-defined query" onClick="top.cw.location=top.topurl+top.action+'pdq.html';top.gw.location=top.topurl+top.action+'blank.html';top.sw.location=top.topurl+top.action+'blank.html';top.qw.location=top.topurl+top.action+'almost_blank.html';top.initialize();"> 
-</center>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/summary.html b/helm/searchEngine/html/summary.html
deleted file mode 100644 (file)
index 8284f0d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-function armageddon()
-       {
-       top.ltr=top.query;
-       top.stadd=document.win.parqu.value;
-       top.aggq();
-       }
-function fill()
-       {
-       document.win.parqu.value=top.query;
-       }
-</SCRIPT>
-</HEAD>
-<BODY>
-<FORM NAME="win">
-<TEXTAREA ROWS=20 COLS=58 NAME="parqu" onMouseOver=fill()>
-</TEXTAREA><BR>
-<INPUT type="button" value="modifica" onClick=armageddon()>
-</FORM>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/templateambigpdq1.html b/helm/searchEngine/html/templateambigpdq1.html
deleted file mode 100644 (file)
index 3897e34..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>@TITLE@</TITLE>
-<style> A { text-decoration: none } </style>
-<SCRIPT language="Javascript">
-   var ambiguousinput='@MSG@';
-   var elenco = new Array(@CHOICES@);
-   var ident = '@ID@';
-</SCRIPT>
-</HEAD>
-<BODY>
-<h3><SCRIPT language="Javascript">document.write(ambiguousinput);</SCRIPT></h3>
-<br />Please select one or more of the following.
-<br />
-<form name="disamb">
-<SCRIPT language="Javascript">top.templateambigpdq1_listauri(document,elenco);</SCRIPT><br />
-<input type="button" value="Ok" onClick="top.templateambigpdq1_invia(document,top,elenco,ident);" />
-<input type="button" value="Constants Only" onClick="top.templateambigpdq1_selezionaCostanti(document,elenco);" />
-<input type="button" value="Cancel" onClick="top.templateambigpdq1_resetta();" />
-</form>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/templateambigpdq2.html b/helm/searchEngine/html/templateambigpdq2.html
deleted file mode 100644 (file)
index ad58e7f..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<HTML>
-<HEAD>
-<style> A { text-decoration: none } </style>
-<SCRIPT language="Javascript">
-   var elenco = new Array(@INTERPRETATIONS@);
-   var labels = new Array(@INTERPRETATIONS_LABELS@);
-</SCRIPT>
-</HEAD>
-<BODY>
-<h3>There are more than one possible interpretations.</h3>
-<br />Please choose one of the following.
-<br />
-<form name="disamb">
-<SCRIPT language="Javascript">top.templateambigpdq2_listainterpretazioni(document,elenco,labels);</SCRIPT><br />
-<input type="button" value="Ok" onClick="top.templateambigpdq2_invia(document,elenco);" />
-<input type="button" value="Cancel" onClick="top.templateambigpdq2_resetta();" />
-</form>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/html/templateambigpdq3.html b/helm/searchEngine/html/templateambigpdq3.html
deleted file mode 100644 (file)
index 297182c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-   <head>
-      <style> A { text-decoration: none } </style>
-      <SCRIPT>
-         top.templateambigpdq3_init(new Array(@NEW_ALIASES@));
-      </SCRIPT>
-   </head>
-   <body>
-      @RESULTS@
-   </body>
-</html>
diff --git a/helm/searchEngine/html/val.html b/helm/searchEngine/html/val.html
deleted file mode 100644 (file)
index cd80fbc..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<HTML>
-<HEAD>
-<SCRIPT language="Javascript">
-function listrvars()
-       {
-       for (num=0; num<top.norvars; num++)
-               {
-               document.write("<OPTION value="+top.rvars[num]+">"+top.rvars[num]);
-               }
-       }
-function listvvars1()
-       {
-       for (num=0; num<top.novvars1; num++)
-               {
-               document.write("<OPTION value="+top.vvars1[num]+">"+top.vvars1[num]);
-               }
-       }
-function listvvars2()
-       {
-       for (num=0; num<top.novvars2; num++)
-               {
-               document.write("<OPTION value="+top.vvars2[num]+">"+top.vvars2[num]);
-               }
-       }
-function help()
-       {
-       with (document.form1) {
-       if (selopt[0].checked)
-       alert ("No help available.");
-       if (selopt[1].checked)
-       alert ("Turns a list of strings which can have attributes ( the [set] ) in a list of strings which cannot have them ( a [val] ).");
-       if (selopt[2].checked)
-       alert ("Returns the attribute of the given [vvar] in the given [rvar].");
-       if (selopt[3].checked)
-       alert ("No help available.");
-       if (selopt[4].checked)
-       alert ("Parenthesis are employed to force precedence between operators.");
-       if (selopt[5].checked)
-       alert ("The [path] you must enter represents a relation; this production returns a [val] composed by the union of all the URIs which match the chosen relation in the [val] you will enter afterwards. If you select 'inverse', you'll obtain a list of all the URIs for which the [val] matches the chosen relation, 'sub' and 'super' modify the result depending on the chosen relation.");
-       }
-       }
-function choice()
-{
-top.stadd="";top.wrong=0;voidfield=1;
-with (document.form1) {
-       if (selopt[0].checked) {
-               voidfield=0;
-               val1.value=top.tpa(val1.value);
-               top.stadd=val1.value;
-               top.gramcheck("qsl",val1.value);
-                                         }
-       if (selopt[1].checked) {
-               top.stadd="refof [set]";
-                                         }
-       if (selopt[2].checked) {
-               if (val2.value==""||val8.value==""){voidfield=1;}
-               else {top.stadd=val2.value+"."+val8.value;}
-                                         }
-       if (selopt[3].checked) {
-               top.stadd=val3.value;
-                                         }
-       if (selopt[4].checked) {
-               top.stadd="([val])";
-                                         }
-       if (selopt[5].checked) {
-               voidfield=0;
-               val6.value=top.tpa(val6.value);
-               top.stadd="property "+val45.value+" "+val5.value+" "+val6.value+" [val]";
-               top.gramcheck("qp",val6.value);
-                                         }
-       if (selopt[6].checked) {
-               val7.value=top.tpa(val7.value);
-               top.stadd=val7.value;
-               if (val7.value!="") {inputok=1} else voidfield=1;
-                                         }
-                  }
-if (top.stadd!="") top.aggq();
-       else if (voidfield==1) alert ("You left at least one field unfilled");
-}
-</SCRIPT>
-</HEAD>
-<BODY>
-<h1> <SCRIPT language="Javascript">document.write(top.ltr) </SCRIPT>
-<input type="button" value="&lt;-" onmouseOver="top.help(-8)" onclick="top.annulla()">
-<input type="button" value="-&gt;" onmouseOver="top.help(-81)" onclick="top.ripristina()"></h1>
-<h2> Select one of the following: </h2>
-<form name="form1" action="Javascript:choice();" method="get">
-<input type="radio" name="selopt"> <input name="val1" type=text value="{&quot;&quot;}" onFocus="selopt[0].checked=true;top.help(7)"> <br>
-<input type="radio" name="selopt"> refof [set] <br>
-<input type="radio" name="selopt"> <select name="val2" type=text onFocus="selopt[2].checked=true;top.help(4)">
-<SCRIPT language=Javascript> listrvars(); </SCRIPT>
-</select> . <select name="val8" type=text onFocus="selopt[2].checked=true;top.help(8)">
-<SCRIPT language=Javascript> listvvars2(); </SCRIPT>
-</select>
-<br>
-<input type="radio" name="selopt"> <select name="val3" type=text onFocus="selopt[3].checked=true;top.help(81)">
-<SCRIPT language=Javascript> listvvars1(); </SCRIPT>
-</select>
-<br>
-<input type="radio" name="selopt"> ( [val] ) <br>
-<input type="radio" name="selopt"> property
-<select name="val45" onFocus="selopt[5].checked=true">
-<OPTION selected value="">  
-<OPTION value=inverse> inverse
-</select> 
-<select name="val5" onFocus="selopt[5].checked=true">
-<OPTION selected value=""> 
-<OPTION value=sub> sub
-<OPTION value=super> super
-</select> <input name="val6" type=text value="&quot;&quot;" onFocus="selopt[5].checked=true;top.help(5)"> [val] <br>
-<input type="radio" name="selopt"> <input name="val7" type=text onFocus="selopt[6].checked=true;top.help(1)">  <br>
-<input type="submit" value="compose"><input type="button" value="get help" onclick="help()">
-</form>
-</BODY>
-</HTML>
diff --git a/helm/searchEngine/searchEngine.ml b/helm/searchEngine/searchEngine.ml
deleted file mode 100644 (file)
index aaa5f48..0000000
+++ /dev/null
@@ -1,653 +0,0 @@
-(* Copyright (C) 2002, HELM Team.
- * 
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- * 
- * HELM 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.
- * 
- * HELM 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 HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA  02111-1307, USA.
- * 
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-module T = MQGTypes
-module U = MQGUtil
-module G = MQueryGenerator
-module C = MQIConn
-
-open Http_types ;;
-
-let debug = true;;
-let debug_print s = if debug then prerr_endline s;;
-Http_common.debug := true;;
-(* Http_common.debug := true;; *)
-
-  (** accepted HTTP servers for ask_uwobo method forwarding *)
-let valid_servers =
- [ "mowgli.cs.unibo.it:58080" ; "mowgli.cs.unibo.it" ; "localhost:58080" ];;
-
-let mqi_flags = [] (* default MathQL interpreter options *)
-
-open Printf;;
-
-let daemon_name = "Search Engine";;
-let default_port = 58085;;
-let port_env_var = "SEARCH_ENGINE_PORT";;
-
-let pages_dir =
-  try
-    Sys.getenv "SEARCH_ENGINE_HTML_DIR"
-  with Not_found -> "html"  (* relative to searchEngine's document root *)
-;;
-let interactive_user_uri_choice_TPL = pages_dir ^ "/templateambigpdq1.html";;
-let interactive_interpretation_choice_TPL =
-  pages_dir ^ "/templateambigpdq2.html";;
-let constraints_choice_TPL = pages_dir ^ "/constraints_choice_template.html";;
-let final_results_TPL = pages_dir ^ "/templateambigpdq3.html";;
-
-exception Chat_unfinished
-
-  (* build a bool from a 1-character-string *)
-let bool_of_string' = function
-  | "0" -> false
-  | "1" -> true
-  | s -> failwith ("Can't parse a boolean from string: " ^ s)
-;;
-
-  (* build an int option from a string *)
-let int_of_string' = function
-  | "_" -> None
-  | s ->
-      try
-        Some (int_of_string s)
-      with Failure "int_of_string" ->
-        failwith ("Can't parse an int option from string: " ^ s)
-;;
-
-  (* HTML pretty printers for mquery_generator types *)
-
-let html_of_r_obj (pos, uri) =
-  sprintf
-    "<tr><td><input type='checkbox' name='constr_obj' checked='on'/></td><td>%s</td><td>%s</td><td>%s</td></tr>"
-    uri (U.text_of_position pos)
-    (if U.is_main_position pos then
-      sprintf "<input name='obj_depth' size='2' type='text' value='%s' />"
-        (U.text_of_depth pos "")
-    else
-      "<input type=\"hidden\" name=\"obj_depth\" />")
-;;
-
-let html_of_r_rel pos =
-  sprintf
-    "<tr><td><input type='checkbox' name='constr_rel' checked='on'/></td><td>%s</td><td><input name='rel_depth' size='2' type='text' value='%s' /></td></tr>"
-    (U.text_of_position (pos:>T.full_position)) (U.text_of_depth (pos:>T.full_position) "")
-;;
-
-let html_of_r_sort (pos, sort) =
-  sprintf
-    "<tr><td><input type='checkbox' name='constr_sort' checked='on'/></td><td>%s</td><td>%s</td><td><input name='sort_depth' size='2' type='text' value='%s'/></td></tr>"
-    (U.text_of_sort sort) (U.text_of_position (pos:>T.full_position)) (U.text_of_depth (pos:>T.full_position) "")
-;;
-
-  (** pretty print a MathQL query result to an HELM theory file *)
-let theory_of_result result =
- let results_no = List.length result in
-  if results_no > 0 then
-   let mode = if results_no > 10 then "linkonly" else "typeonly" in
-   let results =
-    let idx = ref (results_no + 1) in
-     List.fold_right
-      (fun (uri,attrs) i ->
-        decr idx ;
-        "<tr><td valign=\"top\">" ^ string_of_int !idx ^ ".</td><td><ht:OBJECT uri=\"" ^ uri ^ "\" mode=\"" ^ mode ^ "\"/></td></tr>" ^  i
-      ) result ""
-   in
-    "<h1>Query Results:</h1><table xmlns:ht=\"http://www.cs.unibo.it/helm/namespaces/helm-theory\">" ^ results ^ "</table>"
-  else
-    "<h1>Query Results:</h1><p>No results found!</p>"
-;;
-
-let pp_result result =
- "<html xmlns:ht=\"http://www.cs.unibo.it/helm/namespaces/helm-theory\">\n<head><title>Query Results</title><style> A { text-decoration: none } </style></head>\n<body>" ^ theory_of_result result ^ "</body></html>"
-;;
-
-  (** chain application of Pcre substitutions *)
-let rec apply_substs substs line =
-  match substs with
-  | [] -> line
-  | (rex, templ) :: rest -> apply_substs rest (Pcre.replace ~rex ~templ line)
-  (** fold like function on files *)
-let fold_file f init fname =
-  let inchan = open_in fname in
-  let rec fold_lines' value =
-    try 
-      let line = input_line inchan in 
-      fold_lines' (f value line)
-    with End_of_file -> value
-  in
-  let res = (try fold_lines' init with e -> (close_in inchan; raise e)) in
-  close_in inchan;
-  res
-  (** iter like function on files *)
-let iter_file f = fold_file (fun _ line -> f line) ()
-
-let (title_tag_RE, choices_tag_RE, msg_tag_RE, id_to_uris_RE, id_RE,
-    interpretations_RE, interpretations_labels_RE, results_RE, new_aliases_RE,
-    form_RE, variables_initialization_RE)
-  =
-  (Pcre.regexp "@TITLE@", Pcre.regexp "@CHOICES@", Pcre.regexp "@MSG@",
-  Pcre.regexp "@ID_TO_URIS@", Pcre.regexp "@ID@",
-  Pcre.regexp "@INTERPRETATIONS@", Pcre.regexp "@INTERPRETATIONS_LABELS@",
-  Pcre.regexp "@RESULTS@", Pcre.regexp "@NEW_ALIASES@", Pcre.regexp "@FORM@",
-  Pcre.regexp "@VARIABLES_INITIALIZATION@")
-let server_and_port_url_RE = Pcre.regexp "^http://([^/]+)/.*$"
-
-exception NotAnInductiveDefinition
-
-let port =
-  try
-    int_of_string (Sys.getenv port_env_var)
-  with
-  | Not_found -> default_port
-  | Failure "int_of_string" ->
-      prerr_endline "Warning: invalid port, reverting to default";
-      default_port
-;;
-
-let pp_error = sprintf "<html><body><h1>Error: %s</h1></body></html>";;
-
-let bad_request body outchan =
-  Http_daemon.respond_error ~status:(`Client_error `Bad_request) ~body outchan
-;;
-
-let contype = "Content-Type", "text/html";;
-
-(* SEARCH ENGINE functions *)
-
-let refine_constraints ((constr_obj:T.r_obj list), (constr_rel:T.r_rel list), (constr_sort:T.r_sort list)) =
- function
-    "/searchPattern" ->
-      U.universe_for_search_pattern,
-       (constr_obj, constr_rel, constr_sort),
-       (Some constr_obj, Some constr_rel, Some constr_sort)
-  | "/matchConclusion" ->
-      let constr_obj' =
-       List.map
-        (function (pos, uri) -> U.set_full_position pos None, uri)
-        (List.filter
-          (function (pos, _) -> U.is_conclusion pos)
-          constr_obj)
-      in
-       U.universe_for_match_conclusion,
-       (*CSC: we must select the must constraints here!!! *)
-       (constr_obj',[],[]),(Some constr_obj', None, None)
-  | _ -> assert false
-;;
-
-let get_constraints term =
- function
-    "/locateInductivePrinciple" ->
-      let uri = 
-       match term with
-          Cic.MutInd (uri,t,_) -> MQueryUtil.string_of_uriref (uri,[t])
-        | _ -> raise NotAnInductiveDefinition
-      in
-      let constr_obj =
-       [(`InHypothesis, uri); (`MainHypothesis (Some 0), uri)]
-      in
-      let constr_rel = [`MainConclusion None] in
-      let constr_sort = [(`MainHypothesis (Some 1), T.Prop)] in
-       U.universe_for_search_pattern,
-        (constr_obj, constr_rel, constr_sort), (None,None,None)
-  | req_path ->
-     let must = MQueryLevels2.get_constraints term in
-      refine_constraints must req_path
-;;
-
-(*
-  format:
-    <must_obj> ':' <must_rel> ':' <must_sort> ':' <only_obj> ':' <only_rel> ':' <only_sort>
-
-    <must_*> ::= ('0'|'1') ('_'|<int>) (',' ('0'|'1') ('_'|<int>))*
-    <only> ::= '0'|'1'
-*)
-let add_user_constraints ~constraints
- ((obj, rel, sort), (only_obj, only_rel, only_sort))
-=
-  let parse_must s =
-    let l = Pcre.split ~pat:"," s in
-    (try
-      List.map
-        (fun s ->
-          let subs = Pcre.extract ~pat:"^(.)(\\d+|_)$" s in
-          (bool_of_string' subs.(1), int_of_string' subs.(2)))
-        l
-     with
-      Not_found -> failwith ("Can't parse constraint string: " ^ constraints)
-    )
-  in
-    (* to be used on "obj" *)
-  let add_user_must33 user_must must =
-    List.map2
-     (fun (b, i) (p, u) ->
-       if b then Some (U.set_full_position p i, u) else None)
-     user_must must
-  in
-    (* to be used on "rel" *)
-  let add_user_must22 user_must must =
-    List.map2
-     (fun (b, i) p -> if b then Some (U.set_main_position p i) else None)
-     user_must must
-  in
-    (* to be used on "sort" *)
-  let add_user_must32 user_must must =
-    List.map2
-     (fun (b, i) (p, s)-> if b then Some (U.set_main_position p i, s) else None)
-     user_must must
-  in
-  match Pcre.split ~pat:":" constraints with
-  | [user_obj;user_rel;user_sort;user_only_obj;user_only_rel;user_only_sort] ->
-      let
-       (user_obj,user_rel,user_sort,user_only_obj,user_only_rel,user_only_sort)
-      =
-        (parse_must user_obj,
-        parse_must user_rel,
-        parse_must user_sort,
-        bool_of_string' user_only_obj,
-        bool_of_string' user_only_rel,
-        bool_of_string' user_only_sort)
-      in
-      let only' =
-       (if user_only_obj  then only_obj else None),
-       (if user_only_rel  then only_rel else None),
-       (if user_only_sort then only_sort else None)
-      in
-      let must' =
-       let rec filter_some =
-        function
-           [] -> []
-         | None::tl -> filter_some tl
-         | (Some x)::tl -> x::(filter_some tl) 
-       in
-        filter_some (add_user_must33 user_obj obj),
-        filter_some (add_user_must22 user_rel rel),
-        filter_some (add_user_must32 user_sort sort)
-      in
-      (must', only')
-  | _ -> failwith ("Can't parse constraint string: " ^ constraints)
-in
-
-(* HTTP DAEMON CALLBACK *)
-
-let callback (req: Http_types.request) outchan =
-  try
-    debug_print (sprintf "Received request: %s" req#path);
-    (match req#path with
-    | "/execute" ->
-        let mqi_handle = C.init mqi_flags debug_print in 
-        let query_string = req#param "query" in
-        let lexbuf = Lexing.from_string query_string in
-        let query = MQueryUtil.query_of_text lexbuf in
-        let result = MQueryInterpreter.execute mqi_handle query in
-        let result_string = pp_result result in
-             C.close mqi_handle;
-        Http_daemon.respond ~body:result_string ~headers:[contype] outchan
-    | "/locate" ->
-        let mqi_handle = C.init mqi_flags debug_print in
-        let id = req#param "id" in
-        let query = G.locate id in
-       let result = MQueryInterpreter.execute mqi_handle query in
-             C.close mqi_handle;
-        Http_daemon.respond ~headers:[contype] ~body:(pp_result result) outchan
-    | "/getpage" ->
-        (* TODO implement "is_permitted" *)
-        (let is_permitted _ = true in
-        let remove_fragment uri = Pcre.replace ~pat:"#.*" uri in
-        let page = remove_fragment (req#param "url") in
-        let preprocess =
-          (try
-            bool_of_string (req#param "preprocess")
-          with Invalid_argument _ | Http_types.Param_not_found _ -> false)
-        in
-        (match page with
-        | page when is_permitted page ->
-            (let fname = sprintf "%s/%s" pages_dir (remove_fragment page) in
-            Http_daemon.send_basic_headers ~code:200 outchan;
-            Http_daemon.send_header "Content-Type" "text/html" outchan;
-            Http_daemon.send_CRLF outchan;
-            if preprocess then begin
-              iter_file
-                (fun line ->
-                  output_string outchan
-                    ((apply_substs
-                       (List.map
-                         (function (key,value) ->
-                           let key' =
-                            (Pcre.extract ~pat:"param\\.(.*)" key).(1)
-                           in
-                            Pcre.regexp ("@" ^ key' ^ "@"), value
-                         )
-                         (List.filter
-                           (fun (key,_) as p-> Pcre.pmatch ~pat:"^param\\." key)
-                           req#params)
-                       )
-                       line) ^
-                    "\n"))
-                fname
-            end else
-              Http_daemon.send_file ~src:(FileSrc fname) outchan)
-        | page -> Http_daemon.respond_forbidden ~url:page outchan))
-    | "/ask_uwobo" ->
-      let url = req#param "url" in
-      let server_and_port =
-        (Pcre.extract ~rex:server_and_port_url_RE url).(1)
-      in
-      if List.mem server_and_port valid_servers then
-        Http_daemon.respond
-          ~headers:["Content-Type", "text/html"]
-          ~body:(Http_client.Convenience.http_get url)
-          outchan
-      else
-        Http_daemon.respond
-          ~body:(pp_error ("Untrusted UWOBO server: " ^ server_and_port))
-          outchan
-    | "/searchPattern"
-    | "/matchConclusion"
-    | "/locateInductivePrinciple" ->
-        let mqi_handle = C.init mqi_flags debug_print in
-        let term_string = req#param "term" in
-        let lexbuf = Lexing.from_string term_string in
-        let (context, metasenv) = ([], []) in
-        let (dom, mk_metasenv_and_expr) =
-          CicTextualParserContext.main
-            ~context ~metasenv CicTextualLexer.token lexbuf
-        in
-        let id_to_uris_raw = req#param "aliases" in
-        let tokens = Pcre.split ~pat:"\\s" id_to_uris_raw in
-        let rec parse_tokens keys lookup = function (* TODO spostarla fuori *)
-          | [] -> keys, lookup
-          | "alias" :: key :: value :: rest ->
-              let key' = CicTextualParser0.Id key in
-               parse_tokens
-                 (key'::keys)
-                 (fun id ->
-                   if id = key' then
-                     Some
-                      (CicTextualParser0.Uri (MQueryMisc.cic_textual_parser_uri_of_string value))
-                   else lookup id)
-                 rest
-          | _ -> failwith "Can't parse aliases"
-        in
-        let parse_choices choices_raw =
-          let choices = Pcre.split ~pat:";" choices_raw in
-          List.fold_left
-            (fun f x ->
-              match Pcre.split ~pat:"\\s" x with
-              | ""::id::tail
-              | id::tail when id<>"" ->
-                  (fun id' ->
-prerr_endline ("#### " ^ id ^ " :=");
-List.iter (fun u -> prerr_endline ("<" ^ Netencoding.Url.decode u ^ ">")) tail;
-                    if id = id' then
-                      Some (List.map (fun u -> Netencoding.Url.decode u) tail)
-                    else
-                      f id')
-              | _ -> failwith "Can't parse choices")
-            (fun _ -> None)
-            choices
-        in
-        let (id_to_uris : Disambiguate.domain_and_interpretation) =
-         parse_tokens [] (fun _ -> None) tokens in
-        let id_to_choices =
-          try
-            let choices_raw = req#param "choices" in
-            parse_choices choices_raw
-          with Http_types.Param_not_found _ -> (fun _ -> None)
-        in
-        let module Chat: Disambiguate.Callbacks =
-          struct
-
-            let get_metasenv () =
-             !CicTextualParser0.metasenv
-
-            let set_metasenv metasenv =
-              CicTextualParser0.metasenv := metasenv
-
-            let output_html = prerr_endline
-
-            let interactive_user_uri_choice
-              ~selection_mode ?ok
-              ?enable_button_for_non_vars ~(title: string) ~(msg: string)
-              ~(id: string) (choices: string list)
-              =
-                (match id_to_choices id with
-                | Some choices -> choices
-                | None ->
-                  let msg = Pcre.replace ~pat:"\'" ~templ:"\\\'" msg in
-                  (match selection_mode with
-                  | `SINGLE -> assert false
-                  | `EXTENDED ->
-                      Http_daemon.send_basic_headers ~code:200 outchan ;
-                      Http_daemon.send_CRLF outchan ;
-                      iter_file
-                        (fun line ->
-                          let formatted_choices =
-                            String.concat ","
-                              (List.map (fun uri -> sprintf "\'%s\'" uri) choices)
-                          in
-                          let processed_line =
-                            apply_substs
-                              [title_tag_RE, title;
-                               choices_tag_RE, formatted_choices;
-                               msg_tag_RE, msg;
-                               id_to_uris_RE, id_to_uris_raw;
-                               id_RE, id]
-                              line
-                          in
-                          output_string outchan (processed_line ^ "\n"))
-                        interactive_user_uri_choice_TPL;
-                      raise Chat_unfinished))
-
-            let interactive_interpretation_choice interpretations =
-              let html_interpretations_labels =
-                String.concat ", "
-                  (List.map
-                    (fun l ->
-                      "\'" ^
-                      (String.concat "<br />"
-                        (List.map
-                          (fun (id, value) ->
-                            (sprintf "alias %s %s" id value))
-                          l)) ^
-                      "\'")
-                  interpretations)
-              in
-              let html_interpretations =
-                String.concat ", "
-                  (List.map
-                    (fun l ->
-                      "\'" ^
-                      (String.concat " "
-                        (List.map
-                          (fun (id, value) ->
-                            (sprintf "alias %s %s"
-                              id
-                              (MQueryMisc.wrong_xpointer_format_from_wrong_xpointer_format'
-                                value)))
-                          l)) ^
-                      "\'")
-                    interpretations)
-              in
-              Http_daemon.send_basic_headers ~code:200 outchan ;
-              Http_daemon.send_CRLF outchan ;
-              iter_file
-                (fun line ->
-                  let processed_line =
-                    apply_substs
-                      [interpretations_RE, html_interpretations;
-                       interpretations_labels_RE, html_interpretations_labels]
-                      line
-                  in
-                  output_string outchan (processed_line ^ "\n"))
-                interactive_interpretation_choice_TPL;
-              raise Chat_unfinished
-
-            let input_or_locate_uri ~title =
-              UriManager.uri_of_string "cic:/Coq/Init/DataTypes/nat_ind.con"
-
-          end
-        in
-        let module Disambiguate' = Disambiguate.Make (Chat) in
-        let (id_to_uris', metasenv', term') =
-          Disambiguate'.disambiguate_input mqi_handle
-            context metasenv dom mk_metasenv_and_expr id_to_uris
-        in
-        (match metasenv' with
-        | [] ->
-            let universe,
-                ((must_obj, must_rel, must_sort) as must'),
-                ((only_obj, only_rel, only_sort) as only) =
-              get_constraints term' req#path
-            in
-            let must'', only' =
-              (try
-                add_user_constraints
-                  ~constraints:(req#param "constraints")
-                  (must', only)
-              with Http_types.Param_not_found _ ->
-                let variables =
-                 "var aliases = '" ^ id_to_uris_raw ^ "';\n" ^
-                 "var constr_obj_len = " ^
-                  string_of_int (List.length must_obj) ^ ";\n" ^
-                 "var constr_rel_len = " ^
-                  string_of_int (List.length must_rel) ^ ";\n" ^
-                 "var constr_sort_len = " ^
-                  string_of_int (List.length must_sort) ^ ";\n" in
-                let form =
-                  (if must_obj = [] then "" else
-                    "<h4>Obj constraints</h4>" ^
-                    "<table>" ^
-                    (String.concat "\n" (List.map html_of_r_obj must_obj)) ^
-                    "</table>" ^
-                    (* The following three lines to make Javascript create *)
-                    (* the constr_obj[] and obj_depth[] arrays even if we  *)
-                    (* have only one real entry.                           *)
-                    "<input type=\"hidden\" name=\"constr_obj\" />" ^
-                    "<input type=\"hidden\" name=\"obj_depth\" />") ^
-                  (if must_rel = [] then "" else
-                   "<h4>Rel constraints</h4>" ^
-                   "<table>" ^
-                   (String.concat "\n" (List.map html_of_r_rel must_rel)) ^
-                   "</table>" ^
-                    (* The following two lines to make Javascript create *)
-                    (* the constr_rel[] and rel_depth[] arrays even if   *)
-                    (* we have only one real entry.                      *)
-                    "<input type=\"hidden\" name=\"constr_rel\" />" ^
-                    "<input type=\"hidden\" name=\"rel_depth\" />") ^
-                  (if must_sort = [] then "" else
-                    "<h4>Sort constraints</h4>" ^
-                    "<table>" ^
-                    (String.concat "\n" (List.map html_of_r_sort must_sort)) ^
-                    "</table>" ^
-                    (* The following two lines to make Javascript create *)
-                    (* the constr_sort[] and sort_depth[] arrays even if *)
-                    (* we have only one real entry.                      *)
-                    "<input type=\"hidden\" name=\"constr_sort\" />" ^
-                    "<input type=\"hidden\" name=\"sort_depth\" />") ^
-                    "<h4>Only constraints</h4>" ^
-                    "Enforce Only constraints for objects: " ^
-                      "<input type='checkbox' name='only_obj'" ^
-                      (if only_obj = None then "" else " checked='yes'") ^ " /><br />" ^
-                    "Enforce Rel constraints for objects: " ^
-                      "<input type='checkbox' name='only_rel'" ^
-                      (if only_rel = None then "" else " checked='yes'") ^ " /><br />" ^
-                    "Enforce Sort constraints for objects: " ^
-                      "<input type='checkbox' name='only_sort'" ^
-                      (if only_sort = None then "" else " checked='yes'") ^ " /><br />"
-                in
-                Http_daemon.send_basic_headers ~code:200 outchan ;
-                Http_daemon.send_CRLF outchan ;
-                iter_file
-                  (fun line ->
-                    let processed_line =
-                      apply_substs
-                       [form_RE, form ;
-                        variables_initialization_RE, variables] line
-                    in
-                    output_string outchan (processed_line ^ "\n"))
-                  constraints_choice_TPL;
-                  raise Chat_unfinished)
-            in
-            let query =
-             G.query_of_constraints (Some universe) must'' only'
-            in
-                 let results = MQueryInterpreter.execute mqi_handle query in 
-             Http_daemon.send_basic_headers ~code:200 outchan ;
-             Http_daemon.send_CRLF outchan ;
-             iter_file
-               (fun line ->
-                 let new_aliases =
-                   match id_to_uris' with
-                   | (domain, f) ->
-                       String.concat ", "
-                         (List.map
-                           (fun name ->
-                             sprintf "\'alias %s cic:%s\'"
-                               (match name with
-                                   CicTextualParser0.Id name -> name
-                                 | _ -> assert false (*CSC: completare *))
-                               (match f name with
-                               | None -> assert false
-                               | Some (CicTextualParser0.Uri t) ->
-                                   MQueryMisc.string_of_cic_textual_parser_uri
-                                     t
-                               | _ -> assert false (*CSC: completare *)))
-                           domain)
-                 in
-                 let processed_line =
-                   apply_substs
-                     [results_RE, theory_of_result results ;
-                      new_aliases_RE, new_aliases]
-                     line
-                 in
-                 output_string outchan (processed_line ^ "\n"))
-               final_results_TPL
-        | _ -> (* unable to instantiate some implicit variable *)
-            Http_daemon.respond
-              ~headers:[contype]
-              ~body:"some implicit variables are still unistantiated :-("
-              outchan);
-            C.close mqi_handle
-    | invalid_request ->
-        Http_daemon.respond_error ~status:(`Client_error `Bad_request) outchan);
-    debug_print (sprintf "%s done!" req#path)
-  with
-  | Chat_unfinished -> prerr_endline "Chat unfinished, Try again!"
-  | Http_types.Param_not_found attr_name ->
-      bad_request (sprintf "Parameter '%s' is missing" attr_name) outchan
-  | exc ->
-      Http_daemon.respond
-        ~body:(pp_error ("Uncaught exception: " ^ (Printexc.to_string exc)))
-        outchan
-in
-printf "%s started and listening on port %d\n" daemon_name port;
-printf "Current directory is %s\n" (Sys.getcwd ());
-printf "HTML directory is %s\n" pages_dir;
-flush stdout;
-Unix.putenv "http_proxy" "";
-Http_daemon.start' ~port callback;
-printf "%s is terminating, bye!\n" daemon_name
-
diff --git a/helm/style/annotatedcont.xsl b/helm/style/annotatedcont.xsl
deleted file mode 100644 (file)
index 97f259d..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- XSLT version 0.1 of annotated MathML content to MathML presentation:  -->
-<!-- First draft: March 29 2000, Claudio Sacerdoti Coen, Irene Schena      -->
-<!--***********************************************************************--> 
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-<xsl:import href="objcontent.xsl"/>
-
-<xsl:key name="id" use="@id" match="LAMBDA|LETIN|PROD|CAST|REL|SORT|APPLY|VAR|META|CONST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX|Definition|Axiom|CurrentProof|InductiveDefinition|Variable"/>
-
-<xsl:template match="Definition|Axiom|CurrentProof|InductiveDefinition|Variable">
-    <xsl:variable name="id" select="@id"/>
-    <xsl:choose>
-    <xsl:when test="$annotations='yes' and $CICAnnotations/Annotations/Annotation[@of=$id]">
-     <annotation helm:xref="{@id}">
-      <xsl:apply-templates select="$CICAnnotations/Annotations/Annotation[@of=$id]"/>
-     </annotation>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-templates select="." mode="noannot"/>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-<xsl:template match="LAMBDA|LETIN|PROD|CAST|REL|SORT|APPLY|VAR|META|CONST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX">
-    <xsl:variable name="id" select="@id"/>
-    <xsl:choose>
-    <xsl:when test="$annotations='yes' and $CICAnnotations/Annotations/Annotation[@of=$id]">
-     <annotation helm:xref="{@id}">
-      <xsl:apply-templates select="$CICAnnotations/Annotations/Annotation[@of=$id]"/>
-     </annotation>
-    </xsl:when>
-    <xsl:otherwise>
-     <m:math>
-      <xsl:apply-templates select="." mode="noannot"/>
-     </m:math>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-<!-- The next two templates must be invoked with the context node -->
-<!-- belonging to the original document DOM tree                  -->
-
-<xsl:template mode="changecontextdocumentnode" match="*">
- <xsl:param name="id" select="''"/>
- <xsl:apply-templates select="key('id',$id)"/>
-</xsl:template>
-
-<xsl:template mode="changecontextdocumentattribute" match="*">
- <xsl:param name="id" select="''"/>
- <xsl:param name="name" select="''"/>
- <xsl:param name="child" select="''"/>
- <xsl:param name="grandchild" select="''"/>
- <xsl:choose>
-  <xsl:when test="$child">
-   <xsl:choose>
-    <xsl:when test="$grandchild">
-     <xsl:value-of select="key('id',$id)/*[position() = $child]/*[position() = $grandchild]/attribute::*[name() = $name]"/>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="key('id',$id)/*[position() = $child]/attribute::*[name() = $name]"/>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="key('id',$id)/attribute::*[name() = $name]"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- $cicroot holds the root of the original document DOM tree  -->
-<!-- The next two templates are trampolines to the previous two -->
-<!-- that are used to change the context node to a node in the  -->
-<!-- document DOM tree of $cicroot                              -->
-
-<xsl:variable name="cicroot" select="/"/>
-
-<xsl:template match="node">
- <xsl:apply-templates select="$cicroot/*[1]" mode="changecontextdocumentnode">
-  <xsl:with-param name="id" select="@id"/>
- </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="attribute">
- <xsl:apply-templates select="$cicroot/*[1]" mode="changecontextdocumentattribute">
-  <xsl:with-param name="id" select="@id"/>
-  <xsl:with-param name="name" select="@name"/>
-  <xsl:with-param name="child" select="@child"/>
-  <xsl:with-param name="grandchild" select="@grandchild"/>
- </xsl:apply-templates>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/annotatedpres.xsl b/helm/style/annotatedpres.xsl
deleted file mode 100644 (file)
index 61d6211..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- XSLT version 0.1 of annotated MathML content to MathML presentation:  -->
-<!-- First draft: March 29 2000, Claudio Sacerdoti Coen, Irene Schena      -->
-<!--***********************************************************************--> 
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-<xsl:import href="mmlextension.xsl"/>
-
-<!-- ANNOTATION -->
-
-<xsl:template match="annotation">
-    <xsl:choose>
-    <xsl:when test=". = /">
-      <m:math><m:mrow helm:xref="{@helm:xref}"><xsl:apply-templates/></m:mrow></m:math>
-    </xsl:when>
-    <xsl:otherwise>
-     <m:mrow helm:xref="{@helm:xref}"><xsl:apply-templates/></m:mrow>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-<xsl:template match="text()">
- <xsl:variable name="text" select="normalize-space(.)"/>
- <xsl:if test="$text != ''">
-  <m:mtext><xsl:value-of select="$text"/></m:mtext>
- </xsl:if>
-</xsl:template>
-
-</xsl:stylesheet> 
diff --git a/helm/style/content.xsl b/helm/style/content.xsl
deleted file mode 100644 (file)
index e60a850..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--******************************************************************--> 
-<!-- XSLT version 0.1 of CIC objects to MathML content:               -->
-<!-- First draft: February 14 2000, Andrea Asperti, Irene Schena      -->
-<!-- Revised: March 3 2000, Irene Schena                              -->
-<!-- Revised: March 10 2000, Irene Schena                             -->
-<!-- Revised: March 15 2000, Claudio Sacerdoti Coen, Irene Schena     -->
-<!--******************************************************************-->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-<xsl:include href="params.xsl"/>
-<!-- adesso sono preprocessate -->
-<!-- <xsl:include href="coercions.xsl"/> -->
-
-<!--<xsl:output
-           method="xml" 
-           version="1.0" 
-           encoding="ISO-8859-1" 
-           omit-xml-declaration="no"
-           standalone="no" 
-           doctype-public="http://www.w3.org/TR/REC-MathML" 
-           indent="yes"
-           media-type="text/mathml" /> -->
-
-<!-- DA FARE: 
-1)risolvere nella fase di pre-processing le uri relative delle var, settando 
-l'attributo
-definitionURL dell'oggetto corrispondente (alcuni punteranno a nulla! -quelli 
-che non hanno il file di definizione corrispondente-); [le uri assolute hanno
-la forma cic:/.../ in definitionURL e questo schema di uri verra' risolto da
-Amaya o da chi di dovere in /really_very_local/helm/PARSER/example/.../]
--->
-
-
-<!-- CIC TERMS -->
-
-<xsl:template match="LAMBDA" mode="pure">
-    <m:lambda helm:xref="{@id}">
-     <m:bvar>
-      <m:ci>
-       <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="target/@binder"/></xsl:with-param></xsl:call-template>
-      </m:ci>
-      <m:type>
-       <xsl:apply-templates select="source/*[1]" mode="noannot"/>
-      </m:type>
-     </m:bvar>
-     <xsl:apply-templates select="target/*[1]" mode="noannot"/>
-    </m:lambda>
-</xsl:template>
-
-<xsl:template match="LETIN" mode="pure">
-    <m:apply helm:xref="{@id}">
-     <m:csymbol>let_in</m:csymbol>
-     <m:bvar>
-      <m:ci>
-       <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="letintarget/@binder"/></xsl:with-param></xsl:call-template>
-      </m:ci>
-     </m:bvar>
-     <xsl:apply-templates select="*[1]" mode="noannot"/>
-     <xsl:apply-templates select="letintarget/*[1]" mode="noannot"/>
-    </m:apply>
-</xsl:template>
-
-<xsl:template match="PROD" mode="pure">
-    <m:apply helm:xref="{@id}">
-     <xsl:choose>
-     <xsl:when test="string(target/@binder)= &quot;&quot;">
-      <m:csymbol>arrow</m:csymbol>
-      <xsl:apply-templates select="source/*[1]" mode="noannot"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:choose>
-       <xsl:when test="@type = 'Prop'">
-        <m:csymbol>forall</m:csymbol>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:csymbol>prod</m:csymbol>
-       </xsl:otherwise>
-      </xsl:choose>
-       <m:bvar>
-        <m:ci>
-         <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="target/@binder"/></xsl:with-param></xsl:call-template>
-        </m:ci>
-        <m:type>
-         <xsl:apply-templates select="source/*[1]" mode="noannot"/>
-        </m:type>
-       </m:bvar>
-     </xsl:otherwise>
-     </xsl:choose>
-     <xsl:apply-templates select="target/*[1]" mode="noannot"/>
-    </m:apply>
-</xsl:template>
-
-<xsl:template match="CAST" mode="pure">
-    <m:apply helm:xref="{@id}">
-     <m:csymbol>cast</m:csymbol>
-     <xsl:apply-templates mode="noannot" select="*/*"/>
-    </m:apply>
-</xsl:template>
-
-<xsl:template match="REL" mode="pure">
-    <m:ci helm:xref="{@id}">
-     <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="@binder"/></xsl:with-param></xsl:call-template>
-    </m:ci>
-</xsl:template>
-
-<xsl:template match="SORT" mode="pure">
-    <m:apply helm:xref="{@id}">
-     <m:csymbol>
-      <xsl:value-of select="@value"/>
-     </m:csymbol>
-    </m:apply>
-</xsl:template>
-
-<xsl:template match="APPLY" mode="pure">
-      <m:apply helm:xref="{@id}">
-       <m:csymbol>app</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*"/>
-      </m:apply>
-</xsl:template>
-
-<!-- Gestione senza pre-processing -->
-<!-- 
-<xsl:template match="APPLY" mode="pure">
-     <xsl:apply-templates mode="coercion" select="."/>
-</xsl:template>
-
-<xsl:template match="APPLY" mode="no_coercion">
-      <m:apply helm:xref="{@id}">
-       <m:csymbol>app</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*"/>
-      </m:apply>
-</xsl:template>
--->
-
-<xsl:template match="VAR" mode="pure">
-    <m:ci helm:xref="{@id}">
-     <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="substring-after(@relUri,&quot;,&quot;)"/></xsl:with-param></xsl:call-template>
-    </m:ci>
-</xsl:template>
-
-<xsl:template match="META" mode="pure">
-   <m:apply helm:xref="{@id}">
-    <m:csymbol>meta</m:csymbol>
-    <m:ci>
-     <xsl:call-template name="insert_subscript">
-      <xsl:with-param name="node_value">
-       <xsl:text>?</xsl:text>
-       <xsl:value-of select="@no"/>
-      </xsl:with-param>
-     </xsl:call-template>
-    </m:ci>
-    <xsl:for-each select="substitution">
-     <xsl:choose>
-      <xsl:when test="*[1]">
-       <xsl:apply-templates select="*[1]" mode="noannot"/>
-      </xsl:when>
-      <xsl:otherwise>
-       <m:ci>_</m:ci>
-      </xsl:otherwise>
-     </xsl:choose>
-    </xsl:for-each>
-   </m:apply>
-</xsl:template>
-
-<xsl:template match="CONST" mode="pure">
-   <m:ci definitionURL="{@uri}" helm:xref="{@id}">
-      <xsl:call-template name="insert_subscript">
-         <xsl:with-param name="node_value">
-            <xsl:call-template name="name_of_uri">
-               <xsl:with-param name="uri" select="@uri"/>
-            </xsl:call-template>
-         </xsl:with-param>
-      </xsl:call-template>
-   </m:ci>
-</xsl:template>
-
-<xsl:template match="MUTIND" mode="pure">
-    <m:ci definitionURL="{@uri}" helm:xref="{@id}">
-     <xsl:variable name="InductiveTypeUrl"><xsl:call-template name="URLofURI4getter"><xsl:with-param name="uri" select="@uri"/></xsl:call-template></xsl:variable>
-     <xsl:variable name="index"><xsl:value-of select="@noType"/></xsl:variable>
-     <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="document($InductiveTypeUrl)/InductiveDefinition/InductiveType[position()=number($index)+1]/@name"/></xsl:with-param></xsl:call-template>
-    </m:ci>
-</xsl:template>
-
-<xsl:template match="MUTCONSTRUCT" mode="pure">
-    <m:ci definitionURL="{@uri}" helm:xref="{@id}">
-     <xsl:variable name="InductiveTypeUrl"><xsl:call-template name="URLofURI4getter"><xsl:with-param name="uri" select="@uri"/></xsl:call-template></xsl:variable>
-     <xsl:variable name="Tindex"><xsl:value-of select="@noType"/></xsl:variable>
-     <xsl:variable name="Cindex"><xsl:value-of select="@noConstr"/></xsl:variable>
-     <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="document($InductiveTypeUrl)/InductiveDefinition/InductiveType[position()=number($Tindex)+1]/Constructor[position()=number($Cindex)]/@name"/></xsl:with-param></xsl:call-template>
-    </m:ci>
-</xsl:template>
-
-<xsl:template match="MUTCASE" mode="pure">
-    <xsl:variable name="Tindex"><xsl:value-of select="@noType"/></xsl:variable>
-    <xsl:variable name="Turi"><xsl:value-of select="@uriType"/></xsl:variable>
-     <xsl:variable name="InductiveTypeUrl"><xsl:call-template name="URLofURI4getter"><xsl:with-param name="uri" select="$Turi"/></xsl:call-template></xsl:variable>
-    <xsl:variable name="InductiveTypeDoc" select="document($InductiveTypeUrl)"/>
-    <m:apply helm:xref="{@id}">
-     <m:csymbol>mutcase</m:csymbol>
-     <xsl:apply-templates select="patternsType/*[1]" mode="noannot"/>
-     <xsl:apply-templates select="inductiveTerm/*[1]" mode="noannot"/>
-     <xsl:variable name="nop"><xsl:value-of select="$InductiveTypeDoc/InductiveDefinition/@noParams"/></xsl:variable>
-     <m:piecewise>
-      <xsl:for-each select="pattern">
-       <xsl:variable name="pos" select="position()"/>
-       <xsl:variable name="nopar"><xsl:apply-templates select="$InductiveTypeDoc/InductiveDefinition/InductiveType[position()=number($Tindex)+1]/Constructor[position()=number($pos)]/*[1]" mode="counting"><xsl:with-param name="noparams" select="$nop"/></xsl:apply-templates></xsl:variable>
-       <m:piece>
-        <xsl:apply-templates select="./*[1]" mode="abstparams"><xsl:with-param name="noparams" select="$nopar"/><xsl:with-param name="target" select="1"/><xsl:with-param name="binder">LAMBDA</xsl:with-param></xsl:apply-templates>
-        <xsl:choose>
-        <xsl:when test="$nopar = 0">
-         <m:ci>
-          <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="$InductiveTypeDoc/InductiveDefinition/InductiveType[position()=number($Tindex)+1]/Constructor[position()=number($pos)]/@name"/></xsl:with-param></xsl:call-template>
-         </m:ci>
-        </xsl:when>
-        <xsl:otherwise>
-         <m:apply>
-          <m:csymbol>app</m:csymbol>
-          <m:ci>
-           <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="$InductiveTypeDoc/InductiveDefinition/InductiveType[position()=number($Tindex)+1]/Constructor[position()=number($pos)]/@name"/></xsl:with-param></xsl:call-template>
-          </m:ci>
-          <xsl:apply-templates select="./*[1]" mode="abstparams"><xsl:with-param name="noparams" select="$nopar"/><xsl:with-param name="binder">LAMBDA</xsl:with-param></xsl:apply-templates>
-          </m:apply>
-         </xsl:otherwise>
-         </xsl:choose>
-        </m:piece>
-      </xsl:for-each>
-     </m:piecewise> 
-    </m:apply>
-</xsl:template>
-
-<xsl:template match="FIX" mode="pure">
-    <m:apply helm:xref="{@id}">
-     <xsl:variable name="findex"><xsl:value-of select="@noFun"/></xsl:variable>
-     <m:csymbol>fix</m:csymbol>
-     <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="FixFunction[position()=number($findex)+1]/@name"/></xsl:with-param></xsl:call-template></m:ci>
-     <xsl:apply-templates mode="pure" select="*"/>
-    </m:apply>
-</xsl:template>
-
-<xsl:template match="COFIX" mode="pure">
-   <m:apply helm:xref="{@id}">
-     <xsl:variable name="findex"><xsl:value-of select="@noFun"/></xsl:variable>
-     <m:csymbol>cofix</m:csymbol>
-     <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="CofixFunction[position()=number($findex)+1]/@name"/></xsl:with-param></xsl:call-template></m:ci>
-     <xsl:apply-templates mode="pure" select="*"/>
-    </m:apply>
-</xsl:template>
-
-<!-- ELEMENTS OF CIC TERMS -->
-
-<xsl:template match="FixFunction" mode="pure">
-    <m:bvar>
-     <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="@name"/></xsl:with-param></xsl:call-template></m:ci>
-     <m:type><xsl:apply-templates select="type/*[1]" mode="noannot"/></m:type>
-    </m:bvar> 
-    <xsl:apply-templates select="body/*[1]" mode="noannot"/>
-</xsl:template>
-
-<xsl:template match="CofixFunction" mode="pure">
-    <m:bvar>
-     <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="@name"/></xsl:with-param></xsl:call-template></m:ci>
-     <m:type><xsl:apply-templates select="type/*[1]" mode="noannot"/></m:type>
-    </m:bvar> 
-    <xsl:apply-templates select="body/*[1]" mode="noannot"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/content_to_html.xsl b/helm/style/content_to_html.xsl
deleted file mode 100644 (file)
index 856fd69..0000000
+++ /dev/null
@@ -1,2266 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!--***********************************************************************--> 
-<!-- From MathML content to HTML                                           -->
-<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena, Guidi               -->
-<!--***********************************************************************--> 
-
-<xsl:param name="CICURI" select="''"/>
-<xsl:param name="type" select="'standalone'"/>
-<xsl:param name="UNICODEvsSYMBOL" select="'symbol'"/>
-
-<xsl:include href="html_init.xsl"/>
-<xsl:include href="html_set.xsl"/>
-<xsl:include href="html_reals.xsl"/>
-
-<xsl:variable name="showcast" select="0"/>
-
-<!--***********************************************************************-->
-<!-- HTML Head and Body                                                    -->
-<!--***********************************************************************-->
-
-<!-- <xsl:output method="html" encoding="iso-8859-1"/> -->
-
-<!-- document needs method="xml" and searches locally for the dtd if        -->
-<!-- doctype-system is specified (the dtd must exist locally for parsing).  -->
-<!-- For having output html must be media-type="html" and for having the    -->
-<!-- correct <br /> you must specify at least the remote dtd by means of    -->
-<!-- doctype-public                                                         -->
-<xsl:output 
-       method="xml" 
-       encoding="iso-8859-1" 
-       media-type="text/html"
-       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
-
-<xsl:variable name="framewidth" select="55"/>
-
-<xsl:template name="mksymbol-1">
- <xsl:param name="symbol" select="''"/>
- <xsl:param name="color" select="''"/>
- <xsl:param name="size" select="''"/>
-  <xsl:choose>
-   <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">
-    <xsl:variable name="fontsymbol">
-     <xsl:choose>
-      <xsl:when test="$symbol = 'forall'">
-       <xsl:value-of select="'&#x22;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'lambda'">
-       <xsl:value-of select="'l'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'prod'">
-       <xsl:value-of select="'&#x00d5;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'arrow'">
-       <xsl:value-of select="'&#x00ae;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'RightArrow'">
-       <xsl:value-of select="'&#222;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'subst'">
-       <xsl:value-of select="'&#x00ac;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'lift' or $symbol = 'lift_with_base'">
-       <xsl:value-of select="'&#x00ad;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'beta_red' or $symbol = 'beta_red1'">
-       <xsl:value-of select="'&#x00ae;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'beta'">
-       <xsl:value-of select="'&#x0062;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'par_beta_red' or $symbol = 'par_beta_red1'">
-       <xsl:value-of select="'&#x00de;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'isomorphic'">
-       <xsl:value-of select="'&#x0040;'"/>
-      </xsl:when>
-      <xsl:otherwise>
-       <xsl:text>???</xsl:text>
-      </xsl:otherwise>
-     </xsl:choose>
-    </xsl:variable>
-    <FONT FACE="symbol" SIZE="{$size}" color="{$color}">
-     <xsl:value-of select="$fontsymbol"/>
-    </FONT>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:variable name="unicodesymbol">
-     <xsl:choose>
-      <xsl:when test="$symbol = 'forall'">
-       <xsl:value-of select="'&#8704;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'lambda'">
-       <xsl:value-of select="'&#955;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'prod'">
-       <xsl:value-of select="'&#928;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'arrow'">
-       <xsl:value-of select="'&#8594;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'RightArrow'">
-       <xsl:value-of select="'&#8658;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'subst'">
-       <xsl:value-of select="'&#8592;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'lift' or $symbol = 'lift_with_base'">
-       <xsl:value-of select="'&#8593;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'beta_red' or $symbol = 'beta_red1'">
-       <xsl:value-of select="'&#8594;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'beta'">
-       <xsl:value-of select="'&#946;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'par_beta_red' or $symbol = 'par_beta_red1'">
-       <xsl:value-of select="'&#8658;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'isomorphic'">
-       <xsl:value-of select="'&#8773;'"/>
-      </xsl:when>
-      <xsl:otherwise>
-       <xsl:text>???</xsl:text>
-      </xsl:otherwise>
-     </xsl:choose>
-    </xsl:variable>
-    <FONT color="{$color}">
-     <xsl:value-of select="$unicodesymbol"/>
-    </FONT>
-   </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match="/">
- <xsl:param name="current_indent" select="0"/>
- <xsl:choose>
-  <xsl:when test="$type = 'standalone'">
-   <html> 
-      <head>
-        <title> <xsl:value-of select="$CICURI"/> </title> <!-- FG -->
-         <style> A { text-decoration: none } </style>
-         <script>
-          <xsl:text disable-output-escaping="yes">
-           <![CDATA[
-            function Hide(which){
-             if (!document.getElementById)
-              return
-             which.style.display="none"
-            }
-
-            function Show(which){
-             if (!document.getElementById)
-              return
-             which.style.display=""
-            }
-
-            document.to_be_deleted = new Array();
-          ]]>
-          </xsl:text>
-         </script>
-      </head>
-      <body bgcolor="white">
-         <xsl:attribute name="onLoad">
-          if(document.getElementById)
-           for(var i=0;i&lt;document.to_be_deleted.length;i++)
-            Hide(document.getElementById(document.to_be_deleted[i]));
-         </xsl:attribute>
-         <xsl:apply-templates>
-            <xsl:with-param name="current_indent" select="0"/>
-         </xsl:apply-templates>
-      </body>
-   </html>
-  </xsl:when>
-  <xsl:otherwise>
-   <to_be_embedded>
-    <xsl:apply-templates>
-     <xsl:with-param name="current_indent" select="0"/>
-    </xsl:apply-templates>
-   </to_be_embedded>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!--***********************************************************************-->
-<!-- Indentation                                                          -->
-<!--***********************************************************************-->
-
-<xsl:template name="make_indent">
- <xsl:param name="current_indent" select="0"/>
-  <xsl:if test="$current_indent > 0">
-   <xsl:text>&#x00a0;</xsl:text>
-   <xsl:call-template name="make_indent">
-    <xsl:with-param name="current_indent" select="$current_indent - 1"/> 
-   </xsl:call-template>
-  </xsl:if>
-</xsl:template>
-
-<!-- Syntactic Sugar -->
-<xsl:template match="m:type">
-<xsl:param name="current_indent" select="0"/> 
-<xsl:apply-templates>
- <xsl:with-param name="current_indent" 
-           select="$current_indent"/>
-</xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="m:condition">
-<xsl:param name="current_indent" select="0"/> 
-<xsl:apply-templates>
- <xsl:with-param name="current_indent" 
-           select="$current_indent"/>
-</xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="m:math">
-<xsl:param name="current_indent" select="0"/> 
-<xsl:apply-templates>
- <xsl:with-param name="current_indent" 
-           select="$current_indent"/>
-</xsl:apply-templates>
-</xsl:template>
-
-<!--*********************************************************************-->
-<!--                         INLINE MODE                                 -->
-<!--*********************************************************************-->
-
-<!-- href -->
-<xsl:template mode="inline" match="m:ci">
- <xsl:choose>
-  <xsl:when test="boolean(@definitionURL)">
-   <a href="{@definitionURL}">
-   <xsl:apply-templates/>
-   </a>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="."/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- CSYMBOL -->
-
-<xsl:template match="m:apply[m:csymbol]" mode="inline">
-   <xsl:variable name="name">
-    <xsl:value-of select="m:csymbol"/>
-   </xsl:variable>
-   <xsl:variable name="uri"><xsl:value-of select="*[1]/@definitionURL"/></xsl:variable>
-   <xsl:choose>
-    <!-- FORALL -->
-    <xsl:when test="$name='forall'">
-     <xsl:call-template name="mksymbol-1">
-      <xsl:with-param name="symbol" select="$name"/>
-      <xsl:with-param name="color" select="'blue'"/>
-      <xsl:with-param name="size" select="'+2'"/>
-     </xsl:call-template>
-     <xsl:apply-templates select="m:bvar/m:ci"/>
-     <xsl:text>:</xsl:text>
-     <xsl:apply-templates mode="inline" select="m:bvar/m:type"/>
-     <xsl:text>.</xsl:text>
-     <xsl:apply-templates mode="inline" select="*[position()=3]"/>
-    </xsl:when>
-    <xsl:when test="$name='prod'">
-     <xsl:call-template name="mksymbol-1">
-      <xsl:with-param name="symbol" select="$name"/>
-      <xsl:with-param name="color" select="'blue'"/>
-      <xsl:with-param name="size" select="'+2'"/>
-     </xsl:call-template>
-     <xsl:apply-templates mode="inline" select="m:bvar/m:ci"/>
-     <xsl:text>:</xsl:text>
-     <xsl:apply-templates mode="inline" select="m:bvar/m:type"/>
-     <xsl:text>.</xsl:text>
-     <xsl:apply-templates mode="inline" select="*[position()=3]"/>
-    </xsl:when>
-    <!-- ARROW -->
-    <xsl:when test="$name='arrow'">
-     <xsl:text>(</xsl:text>
-     <xsl:apply-templates mode="inline" select="*[position()=2]"/>
-     <xsl:call-template name="mksymbol-1">
-      <xsl:with-param name="symbol" select="$name"/>
-      <xsl:with-param name="color" select="'blue'"/>
-      <xsl:with-param name="size" select="'+0'"/>
-     </xsl:call-template>
-     <xsl:apply-templates mode="inline" select="*[position()=3]"/>
-     <xsl:text>)</xsl:text>
-    </xsl:when>
-    <!-- APP -->
-    <xsl:when test="$name='app'">
-     <xsl:text>(</xsl:text>
-     <xsl:apply-templates mode="inline" select="*[position()=2]"/>
-     <xsl:for-each select="*[position()>2]">
-      <xsl:text>&#x00A0;</xsl:text>
-      <xsl:apply-templates mode="inline" select="."/>
-     </xsl:for-each>
-     <xsl:text>)</xsl:text>
-    </xsl:when>
-    <!-- CAST -->
-    <xsl:when test="$name='cast'">
-     <xsl:text>(</xsl:text>
-     <xsl:apply-templates mode="inline" select="*[position()=2]"/>
-     <xsl:text>:></xsl:text>
-     <xsl:apply-templates mode="inline" select="*[position()=3]"/>
-     <xsl:text>)</xsl:text>
-    </xsl:when>
-    <xsl:when test="$name='Prop'">
-     <FONT color="violet">Prop</FONT>
-    </xsl:when>
-    <xsl:when test="$name='Set'">
-     <FONT color="violet">Set</FONT>
-    </xsl:when>
-    <xsl:when test="$name='Type'">
-     <FONT color="violet">Type</FONT>
-    </xsl:when>
-    <!-- MUTCASE -->
-    <xsl:when test="$name='mutcase'">
-     <xsl:text>&lt;</xsl:text> 
-     <xsl:apply-templates mode="inline" select="*[position()=2]"/> 
-     <xsl:text>&gt; </xsl:text>
-     <FONT color="red">CASE </FONT>
-     <xsl:apply-templates mode="inline" select="*[position()=3]"/>
-     <FONT color="red"> OF </FONT>
-     <xsl:for-each select="m:piecewise/m:piece">
-<!--<xsl:for-each select="*[position() mod 2 = 0 and position()>3]">-->
-      <xsl:choose>
-       <xsl:when test="not(position() = 1)">
-        <xsl:text> | </xsl:text> 
-       </xsl:when> 
-      </xsl:choose>
-      <xsl:apply-templates mode="inline" select="./*[2]"/>
-      <xsl:call-template name="mksymbol-1">
-       <xsl:with-param name="symbol" select="'RightArrow'"/>
-       <xsl:with-param name="color" select="'green'"/>
-       <xsl:with-param name="size" select="'+0'"/>
-      </xsl:call-template>
-      <xsl:apply-templates mode="inline"
-           select="./*[1]"/>
-     </xsl:for-each>
-    </xsl:when>
-    <!-- FIX -->
-    <xsl:when test="$name='fix'">
-     <FONT color="red">FIX</FONT>
-     <xsl:value-of select="m:ci"/>
-     <xsl:text>{</xsl:text>
-     <xsl:for-each select="m:bvar"> 
-      <xsl:value-of select="m:ci"/>
-      <xsl:text>:</xsl:text>
-      <xsl:apply-templates mode="inline" select="m:type"/>
-      <xsl:text>:=</xsl:text>
-      <xsl:apply-templates mode="inline" 
-             select="following-sibling::*[position() = 1]"/>
-      <xsl:choose>
-       <xsl:when test="position()=last()">
-        <xsl:text>}</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:text>;</xsl:text>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:for-each>
-    </xsl:when>
-    <!-- COFIX -->
-    <xsl:when test="$name='cofix'">
-     <xsl:text>COFIX</xsl:text>
-     <xsl:value-of select="m:ci"/>
-     <xsl:text>{</xsl:text>
-     <xsl:for-each select="m:bvar"> 
-      <xsl:value-of select="m:ci"/>
-      <xsl:text>:</xsl:text>
-      <xsl:apply-templates mode="inline" select="m:type"/>
-      <xsl:text>:=</xsl:text>
-      <xsl:apply-templates mode="inline" 
-          select="following-sibling::*[position() = 1]"/>
-      <xsl:choose>
-       <xsl:when test="position()=last()">
-        <xsl:text>}</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:text>;</xsl:text>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:for-each>
-    </xsl:when>
-    <!-- proof and side_proof -->
-    <xsl:when test="$name='proof' or $name='side_proof'">
-       <xsl:apply-templates mode="inline" select="*[position()=2]"/>
-       <FONT color="red">&#x00a0;proves&#x00a0;</FONT>
-       <xsl:apply-templates mode="inline" select="*[position()=3]"/>
-       <xsl:if test="*[4]">
-        <FONT color="red">&#x00a0;which&#x00a0;is&#x00a0;equivalent&#x00a0;to&#x00a0;</FONT>
-        <xsl:apply-templates mode="inline" select="*[position()=4]"/>
-       </xsl:if>
-    </xsl:when>
-    <!-- letin1 -->
-    <xsl:when test="$name='letin1'">
-     <xsl:text>letin1 (inline error)</xsl:text>
-    </xsl:when>
-    <!-- false_ind -->
-    <xsl:when test="$name='false_ind'">
-    <xsl:apply-templates mode="inline" select="*[3]"/>
-    <FONT color="red">Contradiction.</FONT>
-    </xsl:when>
-    <!-- and_ind -->
-    <xsl:when test="$name='and_ind'">
-     <FONT color="red">From&#x00a0;</FONT>
-     <xsl:apply-templates select="*[2]"/>
-     <FONT color="red">&#x00a0;we get</FONT>
-     (
-     <xsl:apply-templates select="*[3]"/>
-     )&#x00a0;
-     <xsl:apply-templates mode="inline" select="*[4]"/>
-     <FONT color="red">&#x00a0;and&#x00a0;</FONT>
-     (
-     <xsl:apply-templates select="*[5]"/>
-     )&#x00a0;
-     <xsl:apply-templates mode="inline" select="*[6]"/>
-     ;
-     <FONT color="red">&#x00a0;hence&#x00a0;</FONT>
-     <xsl:apply-templates mode="inline" select="*[7]"/>
-    </xsl:when>
-
-       <xsl:when test="$name='subst'">
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-       <xsl:text>[</xsl:text>
-       <xsl:apply-templates select="*[4]" mode="inline"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:text>]</xsl:text>
-      </xsl:when>
-
-      <xsl:when test="$name='lift_with_base'">
-       <SUB>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-       </SUB>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-         <a href="{$uri}">
-          <xsl:call-template name="mksymbol-1">
-           <xsl:with-param name="symbol" select="$name"/>
-           <xsl:with-param name="color" select="'green'"/>
-           <xsl:with-param name="size" select="'+0'"/>
-          </xsl:call-template>
-         </a>
-       </xsl:when>
-       <xsl:otherwise>
-          <xsl:call-template name="mksymbol-1">
-           <xsl:with-param name="symbol" select="$name"/>
-           <xsl:with-param name="color" select="'green'"/>
-           <xsl:with-param name="size" select="'+0'"/>
-          </xsl:call-template>
-       </xsl:otherwise>
-       </xsl:choose>
-       <SUP>
-       <xsl:apply-templates select="*[4]" mode="inline"/>
-       </SUP>
-       <xsl:text>(</xsl:text>
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:text>)</xsl:text>
-      </xsl:when>
-
-      <xsl:when test="$name='lift'">
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-       </xsl:otherwise>
-       </xsl:choose>
-       <SUP>
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       </SUP>
-       <xsl:text>(</xsl:text>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-       <xsl:text>)</xsl:text>
-      </xsl:when>
-
-      <!-- reduction --> 
-      <xsl:when test="$name='beta_red1'">
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         </SUB>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         </SUB>
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-      </xsl:when>
-
-      <xsl:when test="$name='beta_red'">
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''"> 
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <xsl:text>*</xsl:text>
-         </SUB>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <xsl:text>*</xsl:text>
-         </SUB>
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-      </xsl:when>
-
-      <xsl:when test="$name='par_beta_red1'">
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         </SUB>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         </SUB>
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-      </xsl:when>
-
-      <xsl:when test="$name='par_beta_red'">
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <xsl:text>*</xsl:text>
-         </SUB>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <xsl:text>*</xsl:text>
-         </SUB>
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-      </xsl:when>
-
-      <!-- forgetful -->
-      <xsl:when test="$name='forgetful'">
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">|</a>
-       </xsl:when>
-       <xsl:otherwise>
-        |
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-        <xsl:choose>
-        <xsl:when test="$uri != ''">
-         <a href="{$uri}">|</a>
-        </xsl:when>
-       <xsl:otherwise>
-        |
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- boolean algebra of redexes -->
-
-      <!-- isomorphic -->
-      <xsl:when test="$name='isomorphic'">
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-      </xsl:when>
-
-      <!-- INTERP -->
-      <xsl:when test="$name='interp'">
-         <font color="green">[</font>
-            <xsl:apply-templates select="*[2]"/>
-         <font color="green">]</font>
-      </xsl:when>
-
-   </xsl:choose>
-</xsl:template>
-
-<xsl:template mode="inline" match="m:lambda">
-      <xsl:call-template name="mksymbol-1">
-       <xsl:with-param name="symbol" select="'lambda'"/>
-       <xsl:with-param name="color" select="'red'"/>
-       <xsl:with-param name="size" select="'+2'"/>
-      </xsl:call-template>
-      <xsl:apply-templates select="m:bvar/m:ci"/>
-      <xsl:text>:</xsl:text>
-      <xsl:apply-templates mode="inline" select="m:bvar/m:type"/>
-      <xsl:text>.</xsl:text>
-      <xsl:apply-templates mode="inline" select="*[position()=2]"/>
-</xsl:template>
-
-<!--*********************************************************************-->
-<!--                       COUNTING MODE                                 -->
-<!--*********************************************************************-->
-
-<xsl:template match="m:apply[m:csymbol]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/> 
-  <xsl:variable name="name">
-   <xsl:value-of select="m:csymbol"/>
-  </xsl:variable>
-  <xsl:variable name="charlength">
-   <xsl:apply-templates select="m:csymbol" mode="charcount"/>
-  </xsl:variable>
-     <!-- <xsl:value-of select="$current_indent"/> -->
-     <!-- <xsl:value-of select="$charlength"/> -->
-  <xsl:variable name="uri"><xsl:value-of select="*[1]/@definitionURL"/></xsl:variable>
-     <xsl:choose>
-     <!-- FORALL -->
-      <xsl:when test="$name='forall'">
-       <xsl:choose>
-       <xsl:when test="$charlength > $framewidth">
-         <!-- &#x03a0; -->
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'blue'"/>
-          <xsl:with-param name="size" select="'+2'"/>
-         </xsl:call-template>
-         <xsl:apply-templates select="m:bvar/m:ci"/>
-         <xsl:text>:</xsl:text>
-         <xsl:apply-templates select="m:bvar/m:type">
-          <xsl:with-param name="current_indent" 
-           select="$current_indent + 5 + 2*string-length(m:bvar/m:ci)"/>
-         </xsl:apply-templates>
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-         </xsl:call-template>
-         <xsl:text>.</xsl:text>
-         <xsl:apply-templates select="*[position()=3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-         </xsl:apply-templates>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- PROD -->
-      <xsl:when test="$name='prod'">
-       <xsl:choose>
-       <xsl:when test="$charlength > $framewidth">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'blue'"/>
-          <xsl:with-param name="size" select="'+2'"/>
-         </xsl:call-template>
-         <xsl:apply-templates select="m:bvar/m:ci"/>
-         <xsl:text>:</xsl:text>
-         <xsl:apply-templates select="m:bvar/m:type">
-          <xsl:with-param name="current_indent" 
-           select="$current_indent + 5 + 2*string-length(m:bvar/m:ci)"/>
-         </xsl:apply-templates><br/> 
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-         </xsl:call-template>
-         <xsl:text>.</xsl:text>
-         <xsl:apply-templates select="*[position()=3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-         </xsl:apply-templates>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- ARROW -->
-      <xsl:when test="$name='arrow'">
-       <xsl:choose>
-       <xsl:when test="$charlength > $framewidth">
-       <xsl:text>(</xsl:text>
-       <xsl:apply-templates select="*[position()=2]">
-        <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-       </xsl:call-template>
-       <!-- -> -->
-       <xsl:call-template name="mksymbol-1">
-        <xsl:with-param name="symbol" select="$name"/>
-        <xsl:with-param name="color" select="'blue'"/>
-        <xsl:with-param name="size" select="'+0'"/>
-       </xsl:call-template>
-       <xsl:apply-templates select="*[position()=3]">
-        <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-       </xsl:apply-templates>
-       <xsl:text>)</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- APP -->
-      <xsl:when test="$name='app'">
-       <xsl:choose>
-       <xsl:when test="$charlength  > $framewidth">
-        <xsl:text>(</xsl:text>
-        <xsl:apply-templates select="*[position()=2]">
-         <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-         <xsl:for-each select="*[position()>2]">
-          <br/>
-           <xsl:call-template name="make_indent">
-            <xsl:with-param name="current_indent" select="$current_indent + 2"/>         
-           </xsl:call-template>
-            <xsl:apply-templates select=".">
-             <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-            </xsl:apply-templates>
-         </xsl:for-each>
-         <xsl:text>)</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <xsl:when test="$name='cast'">
-       <xsl:choose>
-        <xsl:when test="$showcast = 1">
-         <xsl:choose>
-          <xsl:when test="$charlength > $framewidth">
-           <xsl:text>(</xsl:text>
-           <xsl:apply-templates select="*[position()=2]">
-            <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-           </xsl:apply-templates><br/>
-           <xsl:call-template name="make_indent">
-            <xsl:with-param name="current_indent" select="$current_indent + 2"/>          </xsl:call-template>
-           <xsl:text>:></xsl:text>
-           <xsl:apply-templates select="*[position()=3]">
-            <xsl:with-param name="current_indent" select="$current_indent + 3"/>
-           </xsl:apply-templates>
-           <xsl:text>)</xsl:text>
-          </xsl:when>
-          <xsl:otherwise>
-           <xsl:apply-templates mode="inline" select="."/>
-          </xsl:otherwise>
-         </xsl:choose>
-        </xsl:when>
-        <xsl:otherwise>
-         <xsl:apply-templates select="*[position()=2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <xsl:when test="$name='Prop'">
-       <xsl:text>Prop</xsl:text>
-      </xsl:when>
-      <xsl:when test="$name='Set'">
-       <xsl:text>Set</xsl:text>
-      </xsl:when>
-      <xsl:when test="$name='Type'">
-       <xsl:text>Type</xsl:text>
-      </xsl:when>
-      <xsl:when test="$name='mutcase'">
-       <xsl:choose>
-       <xsl:when test="$charlength > $framewidth">
-         <xsl:text>&lt;</xsl:text>
-         <xsl:apply-templates select="*[position()=2]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-         </xsl:apply-templates>
-         <xsl:text>&gt; </xsl:text>
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>           </xsl:call-template>
-         <xsl:text>CASE </xsl:text>
-         <xsl:apply-templates select="*[position()=3]">
-          <xsl:with-param name="current_indent" select="$current_indent + 8"/>
-         </xsl:apply-templates>
-         <xsl:text> OF </xsl:text> 
-         <xsl:for-each select="m:piecewise/m:piece">
-    <!--   <xsl:for-each select="*[position() mod 2 = 0 and position()>3]">-->
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-         </xsl:call-template> 
-            <xsl:choose>
-            <xsl:when test="position() = 1">
-             <xsl:text>&#x00A0;&#x00A0;</xsl:text>
-            </xsl:when>
-            <xsl:otherwise>
-             <xsl:text>| </xsl:text>
-            </xsl:otherwise>
-            </xsl:choose>
-          <xsl:apply-templates select="./*[2]"/>
-            <xsl:call-template name="mksymbol-1">
-             <xsl:with-param name="symbol" select="'RightArrow'"/>
-             <xsl:with-param name="color" select="'green'"/>
-             <xsl:with-param name="size" select="'+0'"/>
-            </xsl:call-template>
-            <xsl:variable name="body_size">
-  <xsl:apply-templates 
-              select="./*[1]/*[1]" mode="charcount"/>
-            </xsl:variable>
-            <xsl:choose>
-             <xsl:when test="$body_size > $framewidth">
-              <br/>
-              <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" 
-                    select="$current_indent + 8"/>   
-              </xsl:call-template>
-<xsl:apply-templates 
-                   select="./*[1]">
-              <xsl:with-param name="current_indent" 
-                   select="$current_indent + 8"/>      
-             </xsl:apply-templates>
-            </xsl:when>
-            <xsl:otherwise>
-     <xsl:apply-templates select="./*[1]"
-                   mode="inline" />
-            </xsl:otherwise>
-           </xsl:choose>
-         </xsl:for-each>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="."/> 
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- FIX -->
-      <xsl:when test="$name='fix'">
-       <xsl:choose>
-       <xsl:when test="$charlength  > $framewidth">
-            <xsl:text>FIX</xsl:text>
-            <xsl:value-of select="m:ci"/>
-            <xsl:text>{</xsl:text> 
-            <xsl:for-each select="m:bvar"> 
-              <br/>
-              <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/>  
-              </xsl:call-template>
-              <xsl:value-of select="m:ci"/>
-              <xsl:text>:</xsl:text>
-              <xsl:apply-templates select="m:type">
-               <xsl:with-param name="current_indent" 
-                    select="$current_indent + 5 + string-length(m:ci)"/>
-               </xsl:apply-templates>
-              <br/>
-              <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/>       
-              </xsl:call-template>
-              <xsl:text>:=</xsl:text> 
-              <xsl:apply-templates select="following-sibling::*[position() = 1]">
-               <xsl:with-param name="current_indent" select="$current_indent +2"/>
-              </xsl:apply-templates>
-            </xsl:for-each>
-             <br/>
-              <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/>       
-              </xsl:call-template> 
-           <xsl:text>}</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="."/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when> 
-      <!-- COFIX -->
-      <xsl:when test="$name='cofix'">
-       <xsl:choose>
-       <xsl:when test="($charlength + 10) > $framewidth">
-            <xsl:text>COFIX</xsl:text>
-            <xsl:value-of select="m:ci"/>
-            <xsl:text>{</xsl:text>
-            <br/>
-            <xsl:call-template name="make_indent">
-             <xsl:with-param name="current_indent" select="$current_indent + 2"/>       
-            </xsl:call-template>
-            <xsl:for-each select="m:bvar"> 
-                <xsl:value-of select="m:ci"/>
-                <xsl:text>:</xsl:text>
-                <xsl:apply-templates select="m:type">
-                 <xsl:with-param name="current_indent" 
-                    select="$current_indent + 5 + string-length(m:ci)"/>
-                </xsl:apply-templates>
-                <br/> 
-                <xsl:call-template name="make_indent">
-                 <xsl:with-param name="current_indent" select="$current_indent + 2"/>       
-                </xsl:call-template>
-                <xsl:text>:=</xsl:text>
-                <xsl:apply-templates select="following-sibling::*[position() = 1]">
-                 <xsl:with-param name="current_indent" select="$current_indent + 3"/>
-                </xsl:apply-templates>
-            </xsl:for-each>
-            <br/>
-              <xsl:call-template name="make_indent">
-               <xsl:with-param name="current_indent" select="$current_indent + 2"/>       
-              </xsl:call-template>
-            <xsl:text>}</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:apply-templates mode="inline" select="m:type"/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <xsl:when test="$name='let_in'">
-       <xsl:text>let&#x00a0;</xsl:text>
-       <xsl:apply-templates select="m:bvar/m:ci"/>
-       <xsl:text>&#x00a0;:=&#x00a0;</xsl:text>
-       <xsl:apply-templates select="*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent+14"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:text>in&#x00a0;</xsl:text>
-       <xsl:apply-templates select="*[4]">
-        <xsl:with-param name="current_indent" select="$current_indent+5"/>
-       </xsl:apply-templates>
-      </xsl:when>
-
-      <!-- ***************************************** -->
-      <!-- *********** PROOF ELEMENTS ************** -->
-      <!-- ***************************************** -->
-      <!-- PROOF -->
-      <xsl:when test="$name='proof'">
-       <xsl:variable name="nonce" select="generate-id()"/>
-       <xsl:variable name="freshid1" select="concat('a',$nonce)"/>
-       <xsl:variable name="freshid2" select="concat('b',$nonce)"/>
-       <xsl:variable name="freshid3" select="concat('c',$nonce)"/>
-       <span ID="{$freshid1}">
-        <xsl:apply-templates select="*[position()=2]">
-         <xsl:with-param name="current_indent" select="$current_indent"/>
-        </xsl:apply-templates>
-        &#x00a0;
-       </span>
-       <xsl:choose>
-        <xsl:when test="(preceding-sibling::*[1]/text()='letin1') or
-                        (preceding-sibling::*[1]/text()='rw_step') or
-                        (name(..)='m:lambda')">
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:call-template>
-         <FONT color="red">we proved&#x00a0;</FONT> 
-        </xsl:when>
-        <xsl:otherwise>
-         <script>
-          if(document.getElementById) {
-           document.write('\
-            <span ID="{$freshid2}">\
-             <a style="text-decoration:underline ; color:green" href="" onClick="Show(document.getElementById(\'{$freshid1}\')); Hide(document.getElementById(\'{$freshid2}\'));Show(document.getElementById(\'{$freshid3}\'));return (0==1);">Proof of</a>\
-            </span>\
-            <span ID="{$freshid3}">\
-             <br/>\
-             <xsl:call-template name="make_indent">
-              <xsl:with-param name="current_indent" select="$current_indent"/>
-             </xsl:call-template>\
-             <a style="text-decoration:underline ; color:red" href="" onClick="Hide(document.getElementById(\'{$freshid1}\')); Show(document.getElementById(\'{$freshid2}\'));Hide(document.getElementById(\'{$freshid3}\'));return (0==1);">we proved</a>\
-            </span>\
-           ');
-           document.to_be_deleted.push('<xsl:value-of select="$freshid1"/>');
-           document.to_be_deleted.push('<xsl:value-of select="$freshid3"/>');
-           document.write('&#x00a0;');
-          } else {
-           document.write('\
-            <br/>\
-            <xsl:call-template name="make_indent">
-             <xsl:with-param name="current_indent" select="$current_indent"/>
-            </xsl:call-template>\
-            <FONT color="red">we proved&#x00a0;</FONT>\
-           ');
-          }
-         </script>
-        </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[position()=3]">
-        <xsl:with-param name="current_indent" select="$current_indent + 16"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- side_proof -->
-      <xsl:when test="$name='side_proof'">
-       <xsl:variable name="nonce" select="generate-id()"/>
-       <xsl:variable name="freshid1" select="concat('a',$nonce)"/>
-       <xsl:variable name="freshid2" select="concat('b',$nonce)"/>
-       <xsl:variable name="freshid3" select="concat('c',$nonce)"/>
-       <xsl:variable name="freshid4" select="concat('d',$nonce)"/>
-       <span ID="{$freshid1}">
-        <xsl:apply-templates select="*[position()=2]">
-         <xsl:with-param name="current_indent" select="$current_indent"/>
-        </xsl:apply-templates>
-        &#x00a0;
-       </span>
-         <script>
-          if(document.getElementById) {
-           document.write('\
-            <span ID="{$freshid2}">\
-             <a style="text-decoration:underline ; color:green" href="" onClick="Show(document.getElementById(\'{$freshid1}\')); Hide(document.getElementById(\'{$freshid2}\'));Show(document.getElementById(\'{$freshid3}\'));Show(document.getElementById(\'{$freshid4}\'));return (0==1);">Justification</a>\
-            </span>\
-            <span ID="{$freshid3}">\
-             <br/>\
-             <xsl:call-template name="make_indent">
-              <xsl:with-param name="current_indent" select="$current_indent"/>
-             </xsl:call-template>\
-             <a style="text-decoration:underline ; color:red" href="" onClick="Hide(document.getElementById(\'{$freshid1}\')); Show(document.getElementById(\'{$freshid2}\'));Hide(document.getElementById(\'{$freshid3}\'));Hide(document.getElementById(\'{$freshid4}\'));return (0==1);">we proved</a>\
-            </span>\
-           ');
-           document.to_be_deleted.push('<xsl:value-of select="$freshid1"/>');
-           document.to_be_deleted.push('<xsl:value-of select="$freshid3"/>');
-           document.to_be_deleted.push('<xsl:value-of select="$freshid4"/>');
-           document.write('&#x00a0;');
-          } else {
-           document.write('\
-            <br/>\
-            <xsl:call-template name="make_indent">
-             <xsl:with-param name="current_indent" select="$current_indent"/>
-            </xsl:call-template>\
-            <FONT color="red">we proved&#x00a0;</FONT>\
-           ');
-          }
-         </script>
-       <span ID="{$freshid4}">
-        <xsl:apply-templates select="*[position()=3]">
-         <xsl:with-param name="current_indent" select="$current_indent + 16"/>
-        </xsl:apply-templates>
-       </span>
-      </xsl:when> 
-      <!-- eq_chain -->
-      <xsl:when test="$name='eq_chain'">
-       <FONT color="red">We have the following equality chain:</FONT>
-       <xsl:for-each select="*[position() mod 2 = 0]">
-        <xsl:variable name="pos" select="position()"/>
-        <br/>
-        <xsl:call-template name="make_indent">
-         <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-        </xsl:call-template>
-        <xsl:choose>
-         <xsl:when test="$pos=1">
-          <xsl:apply-templates select=".">
-           <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-          </xsl:apply-templates>
-          <xsl:text>&#x00a0;=</xsl:text>
-         </xsl:when>
-         <xsl:otherwise>
-          <xsl:text>=&#x00a0;</xsl:text>
-          <xsl:apply-templates select=".">
-           <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-          </xsl:apply-templates>
-         </xsl:otherwise>
-        </xsl:choose>
-        <xsl:if test="$pos != last()">
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 15"/>
-         </xsl:call-template>
-         <xsl:apply-templates select="../*[position()=2*$pos +1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 15"/>
-         </xsl:apply-templates>
-        </xsl:if>
-       </xsl:for-each>
-      </xsl:when>
-       <!-- diseq_chain -->
-      <xsl:when test="$name='diseq_chain'">
-       <FONT color="red">We have the following chain of disequalities:</FONT>
-       <xsl:for-each select="*[position() mod 3 = 2]">
-        <xsl:variable name="pos" select="position()"/>
-        <br/>
-        <xsl:call-template name="make_indent">
-         <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-        </xsl:call-template>
-        <xsl:choose>
-         <xsl:when test="$pos=1">
-          <xsl:apply-templates select=".">
-           <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-          </xsl:apply-templates>
-          <xsl:text>&#x00a0;</xsl:text>
-          <xsl:apply-templates mode="inline" select="../*[position()=3*$pos]"/>
-         </xsl:when>
-         <xsl:otherwise>
-          <xsl:apply-templates mode="inline" select="../*[position()=3*($pos - 1)]"/>
-          <xsl:text>&#x00a0;</xsl:text>
-          <xsl:apply-templates select=".">
-           <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-          </xsl:apply-templates>
-         </xsl:otherwise>
-        </xsl:choose>
-        <xsl:if test="$pos != last()">
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 15"/>
-         </xsl:call-template>
-         <xsl:apply-templates select="../*[position()=3*$pos +1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 15"/>
-         </xsl:apply-templates>
-        </xsl:if>
-       </xsl:for-each>
-      </xsl:when>
-      <!-- letin1 -->
-      <xsl:when test="$name='letin1'">
-       <xsl:apply-templates select="*[position()=2]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:apply-templates select="*[position()=3]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- letin -->
-      <xsl:when test="$name='letin'">
-       <xsl:for-each select="*[position()>1 and last()>position()]">
-        <xsl:apply-templates select=".">
-         <xsl:with-param name="current_indent" select="$current_indent"/>
-        </xsl:apply-templates>
-        <br/>
-        <xsl:call-template name="make_indent">
-         <xsl:with-param name="current_indent" select="$current_indent"/> 
-        </xsl:call-template>
-       </xsl:for-each>
-       <xsl:apply-templates select="*[position()=last()]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- Let -->
-      <xsl:when test="$name='let'">
-       (
-       <xsl:apply-templates select="m:ci"/>
-       )
-       <xsl:apply-templates select="*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent + 7"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- rw_step -->
-      <xsl:when test="$name='rw_step'">
-       <xsl:choose>
-        <xsl:when test="name(*[2])='m:apply'">
-         <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-         <FONT color="red">Consider&#x00a0;</FONT>
-         <xsl:apply-templates select="*[2]"/>
-        </xsl:otherwise>
-       </xsl:choose>
-       <xsl:variable name="charlength_first">
-        <xsl:apply-templates select="*[3]" mode="root_charcount"/>
-       </xsl:variable>
-       <xsl:variable name="charlength_second">
-        <xsl:apply-templates select="*[4]" mode="root_charcount"/>
-       </xsl:variable>
-       <xsl:variable name="charlength_side_proof">
-        <xsl:apply-templates select="*[5]" mode="root_charcount"/>
-       </xsl:variable>
-       <xsl:variable name="split1"
-         select="($charlength_first + $charlength_second) > $framewidth"/>
-       <xsl:variable name="split2"
-         select="($charlength_second + $charlength_side_proof) > $framewidth"/>
-     <!-- <xsl:value-of select="$current_indent"/> -->
-     <!-- <xsl:value-of select="string($charlength_second)"/>  -->
-     <!-- <xsl:value-of select="$charlength_side_proof"/>  -->
-     <!-- <xsl:value-of select="$split2"/>  -->
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">Rewrite&#x00a0;</FONT>
-       <xsl:apply-templates mode="inline" select="*[3]"/>
-       <xsl:text>&#x00a0;</xsl:text>
-       <xsl:if test="$split1">
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-       </xsl:call-template>
-       </xsl:if>
-       <FONT color="red">with&#x00a0;</FONT>
-       <xsl:apply-templates mode="inline" select="*[4]"/>
-       <xsl:text>&#x00a0;</xsl:text>
-       <xsl:if test="$split2">
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-       </xsl:call-template>
-       </xsl:if>
-       <FONT color="red">by&#x00a0;</FONT>
-       <xsl:apply-templates select="*[5]">
-        <xsl:with-param name="current_indent" select="$current_indent+7"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- rewrite and apply -->
-      <xsl:when test="$name='rewrite_and_apply'">
-       <xsl:apply-templates select="*[2]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">Then apply it to&#x00a0;</FONT>
-       <xsl:apply-templates select="*[position()>2]"/>
-      </xsl:when>
-      <!-- by_induction -->
-      <xsl:when test="$name='by_induction'">
-       <FONT color="red">We prove&#x00a0;</FONT>
-       <xsl:apply-templates select="../*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent+18"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">by induction on&#x00a0;</FONT>
-       <xsl:apply-templates select="*[position()=last()]/*[position()=last()]">
-        <xsl:with-param name="current_indent" select="$current_indent+30"/>
-       </xsl:apply-templates>
-       <!-- 
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:text>The induction property is</xsl:text>
-       <br/> 
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:apply-templates select="*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-       -->
-       <xsl:apply-templates 
-            select="*[position()>3 and not(position()=last())]">
-        <xsl:with-param name="current_indent" select="$current_indent+4"/>
-       </xsl:apply-templates>
-       <!-- <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:text>End induction</xsl:text> -->
-      </xsl:when>
-      <!-- inductive_case -->
-      <xsl:when test="$name='inductive_case'">
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">Case&#x00a0;</FONT>
-       <xsl:apply-templates select="*[2]">
-        <xsl:with-param name="current_indent" select="$current_indent +10"/>
-       </xsl:apply-templates>
-       <xsl:if test="*[3]/*[position()>1]">
-        <br/>
-        <xsl:call-template name="make_indent">
-         <xsl:with-param name="current_indent" select="$current_indent+4"/> 
-        </xsl:call-template>
-        <FONT color="red">By induction hypothesis, we have:</FONT>
-        <xsl:for-each select="*[3]/*[position()>1]">
-         <br/>
-         <xsl:call-template name="make_indent">
-          <xsl:with-param name="current_indent" select="$current_indent + 4"/> 
-         </xsl:call-template>
-         <xsl:text>(</xsl:text>
-         <xsl:apply-templates select="m:ci"/>
-         <xsl:text>)&#x00a0;</xsl:text>
-         <xsl:apply-templates select="m:type">
-          <xsl:with-param name="current_indent" select="$current_indent + 8"/>
-         </xsl:apply-templates>
-        </xsl:for-each>
-       </xsl:if>
-       <br/>
-        <xsl:call-template name="make_indent">
-         <xsl:with-param name="current_indent" select="$current_indent + 4"/> 
-        </xsl:call-template>
-       <xsl:apply-templates select="*[4]">
-        <xsl:with-param name="current_indent" select="$current_indent +4"/>
-       </xsl:apply-templates>
-       <!-- <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:text>End Case</xsl:text> -->
-      </xsl:when>
-      <!-- case_lhs  -->
-      <xsl:when test="$name='case_lhs'">
-       <xsl:choose>
-        <xsl:when test="count(*)=2">
-         <xsl:apply-templates mode="inline" select="*[2]"/>
-        </xsl:when>
-        <xsl:otherwise>
-         <xsl:text>(</xsl:text>
-         <xsl:apply-templates mode="inline" select="*[2]"/>
-         <xsl:for-each select="m:bvar">
-          <xsl:text>&#x00a0;</xsl:text>
-          <xsl:apply-templates mode="inline" select="*[1]"/>
-          <xsl:text>:</xsl:text>
-          <xsl:apply-templates mode="inline" select="m:type/*[1]"/>
-         </xsl:for-each>
-         <xsl:text>)</xsl:text>
-        </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- false_ind -->
-      <xsl:when test="$name='false_ind'">
-       <xsl:apply-templates select="*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates> 
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template> 
-       <FONT color="red">Contradiction.</FONT>
-      </xsl:when>
-      <!-- and_ind -->
-      <xsl:when test="$name='and_ind'">
-       <xsl:choose>
-        <xsl:when test="name(*[2])='m:apply'">
-         <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>      
-        </xsl:when>
-        <xsl:otherwise>
-         <FONT color="red">Consider&#x00a0;</FONT>
-         <xsl:apply-templates select="*[2]"/>
-        </xsl:otherwise>
-       </xsl:choose>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">In particular, we have</FONT>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       (
-       <xsl:apply-templates select="*[3]"/>
-       )&#x00a0;
-       <xsl:apply-templates select="*[4]">
-        <xsl:with-param name="current_indent" select="$current_indent + 9"/> 
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       (
-       <xsl:apply-templates select="*[5]"/>
-       )&#x00a0;
-       <xsl:apply-templates select="*[6]">
-        <xsl:with-param name="current_indent" select="$current_indent + 9"/> 
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:apply-templates select="*[7]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- full_or_ind -->
-      <xsl:when test="$name='full_or_ind'">
-       <xsl:choose>
-        <xsl:when test="name(*[2])='m:apply'">
-         <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/> 
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-         <FONT color="red">Consider&#x00a0;</FONT>
-         <xsl:apply-templates select="*[2]"/>
-        </xsl:otherwise>
-       </xsl:choose>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">We proceed by cases to prove&#x00a0;</FONT>
-       <xsl:apply-templates select="*[3]"/>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent+4"/> 
-       </xsl:call-template>
-       <FONT color="red">Left: suppose&#x00a0;</FONT>
-       <xsl:text>(</xsl:text>
-       <xsl:value-of select="*[4]/m:bvar/m:ci"/>
-       <xsl:text>)&#x00a0;</xsl:text>
-       <xsl:apply-templates 
-            select="*[4]/m:bvar/m:type/*[1]"/>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent+15"/> 
-       </xsl:call-template>
-       <xsl:apply-templates 
-            select="*[4]/*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent+15"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent+4"/> 
-       </xsl:call-template>
-       <FONT color="red">Right: suppose&#x00a0;</FONT>
-       <xsl:text>(</xsl:text>
-       <xsl:value-of select="*[5]/m:bvar/m:ci"/>
-       <xsl:text>)&#x00a0;</xsl:text>
-       <xsl:apply-templates 
-            select="*[5]/m:bvar/m:type/*[1]"/>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent+16"/> 
-       </xsl:call-template>
-       <xsl:apply-templates 
-            select="*[5]/*[3]">
-        <xsl:with-param name="current_indent" select="$current_indent+16"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- or_ind -->
-      <xsl:when test="$name='or_ind'">
-       <xsl:choose>
-        <xsl:when test="name(*[2])='m:apply'">
-         <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/> 
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-         <FONT color="red">Consider&#x00a0;</FONT>
-         <xsl:apply-templates select="*[2]"/>
-        </xsl:otherwise>
-       </xsl:choose>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">We prove&#x00a0;</FONT>
-       <xsl:apply-templates select="*[3]"/>
-       <FONT color="red">&#x00a0;by cases:</FONT>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       Left:&#x00a0;
-       <xsl:apply-templates select="*[4]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       Right:&#x00a0;
-       <xsl:apply-templates select="*[5]">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- Ex_ind -->
-      <xsl:when test="$name='ex_ind'">
-       <xsl:choose>
-        <xsl:when test="name(*[2])='m:apply'">
-         <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-         <FONT color="red">Consider&#x00a0;</FONT>
-         <xsl:apply-templates select="*[2]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:otherwise>
-       </xsl:choose>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <FONT color="red">Let&#x00a0;</FONT>
-       <xsl:apply-templates mode="inline" select="*[3]"/>
-       :
-       <xsl:apply-templates mode="inline" select="*[4]"/>
-       <FONT color="red">&#x00a0;such that</FONT>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       (
-       <xsl:apply-templates mode="inline" select="*[5]"/>
-       )
-       <xsl:apply-templates select="*[6]">
-        <xsl:with-param name="current_indent" select="$current_indent +7"/>
-       </xsl:apply-templates>
-       <br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent"/> 
-       </xsl:call-template>
-       <xsl:apply-templates select="*[7]">
-        <xsl:with-param name="current_indent" select="$current_indent"/>
-       </xsl:apply-templates>
-      </xsl:when>
-      <!-- ***************************************** -->
-      <!-- *********** LAMBDA ELEMENTS ************** -->
-      <!-- ***************************************** -->
-      <xsl:when test="$name='subst'">
-       <xsl:apply-templates select="*[3]"/>
-       <xsl:text>[</xsl:text>
-       <xsl:apply-templates select="*[4]"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'blue'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'blue'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[2]"/>
-       <xsl:text>]</xsl:text>
-      </xsl:when>
-
-      <xsl:when test="$name='lift_with_base'">
-       <SUB>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-       </SUB>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-       </xsl:otherwise>
-       </xsl:choose>
-       <SUP>
-       <xsl:apply-templates select="*[4]" mode="inline"/>
-       </SUP>
-       <xsl:text>(</xsl:text>
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:text>)</xsl:text>
-      </xsl:when>
-
-      <xsl:when test="$name='lift'">
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-       </xsl:otherwise>
-       </xsl:choose>
-       <SUP>
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       </SUP>
-       <xsl:text>(</xsl:text>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-       <xsl:text>)</xsl:text>
-      </xsl:when>
-
-      <!-- reduction --> 
-      <xsl:when test="$name='beta_red1'">
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         </SUB>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         </SUB>
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-      </xsl:when>
-      <xsl:when test="$name='beta_red'">
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <xsl:text>*</xsl:text>
-         </SUB>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <xsl:text>*</xsl:text>
-         </SUB>
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-      </xsl:when>
-
-      <xsl:when test="$name='par_beta_red1'">
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         </SUB>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         </SUB>
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-      </xsl:when>
-
-      <xsl:when test="$name='par_beta_red'">
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <xsl:text>*</xsl:text>
-         </SUB>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <SUB>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="'beta'"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-         <xsl:text>*</xsl:text>
-         </SUB>
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-      </xsl:when>
-
-      <!-- forgetful -->
-      <xsl:when test="$name='forgetful'">
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">|</a>
-       </xsl:when>
-       <xsl:otherwise>
-        |
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">|</a>
-       </xsl:when>
-       <xsl:otherwise>
-        |
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- boolean algebra of redexes -->
-
-      <!-- isomorphic -->
-      <xsl:when test="$name='isomorphic'">
-       <xsl:apply-templates select="*[2]" mode="inline"/>
-       <xsl:choose>
-       <xsl:when test="$uri != ''">
-        <a href="{$uri}">
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-        </a>
-       </xsl:when>
-       <xsl:otherwise>
-         <xsl:call-template name="mksymbol-1">
-          <xsl:with-param name="symbol" select="$name"/>
-          <xsl:with-param name="color" select="'green'"/>
-          <xsl:with-param name="size" select="'+0'"/>
-         </xsl:call-template>
-       </xsl:otherwise>
-       </xsl:choose>
-       <xsl:apply-templates select="*[3]" mode="inline"/>
-      </xsl:when>
-
-      <!-- INTERP -->
-      <xsl:when test="$name='interp'">
-         <font color="green">[</font>
-            <xsl:apply-templates select="*[2]"/>
-         <font color="green">]</font>
-      </xsl:when>
-
-     </xsl:choose>
-</xsl:template>
-
-<!-- LAMBDA -->
-
-<xsl:template match="m:lambda">
-<xsl:param name="current_indent" select="0"/>
-    <xsl:variable name="charlength">
-     <xsl:apply-templates select="*[position()=1]" mode="charcount"/>
-     <!-- <xsl:apply-templates select="." mode="charcount"/> -->
-    </xsl:variable>
-    <!-- <xsl:value-of select="$charlength"/> -->
-    <!-- <xsl:value-of select="$current_indent"/> -->
-     <xsl:choose>
-     <xsl:when test="$charlength > $framewidth">
-       <!-- &#x03bb; -->
-       <xsl:call-template name="mksymbol-1">
-        <xsl:with-param name="symbol" select="'lambda'"/>
-        <xsl:with-param name="color" select="'red'"/>
-        <xsl:with-param name="size" select="'+2'"/>
-       </xsl:call-template>
-       <xsl:apply-templates select="m:bvar/m:ci"/>
-       <xsl:text>:</xsl:text>
-       <xsl:apply-templates select="m:bvar/m:type">
-        <xsl:with-param name="current_indent" 
-           select="$current_indent + 4 + 2*string-length(m:bvar/m:ci)"/>
-       </xsl:apply-templates><br/>
-       <xsl:call-template name="make_indent">
-        <xsl:with-param name="current_indent" select="$current_indent + 2"/>       
-       </xsl:call-template>
-       <xsl:text>.</xsl:text>
-       <xsl:apply-templates select="*[position()=2]">
-        <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-       </xsl:apply-templates>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:apply-templates mode="inline" select="."/>
-     </xsl:otherwise>
-     </xsl:choose>
-</xsl:template>
-
-<!-- href -->
-<xsl:template match="m:ci">
- <xsl:choose>
-  <xsl:when test="boolean(@definitionURL)">
-   <a href="{@definitionURL}">
-   <xsl:apply-templates/>
-   </a>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="."/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- CHAR COUNTING -->
-
-<!-- enter this counting mode selecting the root -->
-<xsl:template match="*" mode="root_charcount">
-<xsl:param name="incurrent_length" select="0"/>
- <xsl:choose>
-  <xsl:when test="count(*)=0">
-   <xsl:value-of select="0"/>
-  </xsl:when>
-  <xsl:when test="name()='m:ci'">
-   <xsl:value-of select="string-length()"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:apply-templates select="*[1]" mode="charcount">
-    <xsl:with-param name="incurrent_length" select="$incurrent_length"/>
-   </xsl:apply-templates>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- enter this mode selecting the first child --> 
-
-<xsl:template match="m:ci|m:csymbol" mode="charcount">
-<xsl:param name="incurrent_length" select="0"/> 
-    <xsl:choose>
-    <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
-     <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length + string-length()"/></xsl:apply-templates></xsl:variable>
-     <xsl:choose>
-     <xsl:when test="string($siblength) = &quot;&quot;">
-      <xsl:value-of select="$incurrent_length + string-length()"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="$incurrent_length + string-length()"/>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template> 
-
-<xsl:template match="*" mode="charcount">
- <xsl:param name="incurrent_length" select="0"/>
- <xsl:choose>
-  <xsl:when test="count(child::*) = 0">
-   <xsl:value-of select="$incurrent_length"/>
-  </xsl:when>
-  <xsl:otherwise>
-    <xsl:variable name="childlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/></xsl:apply-templates></xsl:variable>
-    <xsl:choose>
-     <xsl:when test="$framewidth >= number($childlength)">
-      <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$childlength"/></xsl:apply-templates></xsl:variable>
-      <xsl:choose>
-       <xsl:when test="string($siblength) = &quot;&quot;">
-        <xsl:value-of select="number($childlength)"/>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:value-of select="number($siblength)"/>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($childlength)"/>
-     </xsl:otherwise>
-    </xsl:choose>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-
-<!--***********************************************************************-->
-<!-- OBJECTS                                                               -->
-<!--***********************************************************************-->
-
-<!-- DEFINITION -->
-
-<xsl:template match="Definition">
-<xsl:param name="current_indent" select="0"/>
-<p>
-DEFINITION <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>)<br/>
-TYPE =<br/>
-      <xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent + 7"/> 
-      </xsl:call-template>
-       <xsl:apply-templates select="type/*[1]">
-        <xsl:with-param name="current_indent" select="$current_indent + 7"/>
-       </xsl:apply-templates><br/>
-BODY =<br/>
-      <xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent + 7"/> 
-      </xsl:call-template>
-       <xsl:apply-templates select="body/*[1]">
-        <xsl:with-param name="current_indent" select="$current_indent + 7"/>
-       </xsl:apply-templates>
-</p>
-</xsl:template>
-
-<!-- AXIOM -->
-
-<xsl:template match="Axiom">
-<xsl:param name="current_indent" select="0"/>
-<p>
-AXIOM <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>)<br/>
-TYPE =<br/>
-      <xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent + 7"/> 
-      </xsl:call-template> 
-<xsl:apply-templates select="type/*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 7"/>
-       </xsl:apply-templates>
-</p>
-</xsl:template>
-
-<!-- UNFINISHED PROOF -->
-
-<xsl:template match="CurrentProof">
-<xsl:param name="current_indent" select="0"/>
-<p>
-UNFINISHED PROOF <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>)<br/>
-THESIS:  <xsl:apply-templates select="type/*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 8"/>
-         </xsl:apply-templates><br/>
-CONJECTURES: 
-      <xsl:for-each select="Conjecture">
-      <br/>
-      <xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent + 8"/> 
-      </xsl:call-template>
-      <xsl:for-each select="Decl|Def|Hidden">
-       <xsl:choose>
-        <xsl:when test="name(.)='Decl'">
-         <xsl:choose>
-          <xsl:when test="@name">
-           <xsl:value-of select="@name"/>
-          </xsl:when>
-          <xsl:otherwise>
-           <xsl:text>_</xsl:text>
-          </xsl:otherwise>
-         </xsl:choose>
-         <xsl:text> : </xsl:text>
-         <xsl:apply-templates select="./*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:when test="name(.)='Def'">
-         <xsl:choose>
-          <xsl:when test="@name">
-           <xsl:value-of select="@name"/>
-          </xsl:when>
-          <xsl:otherwise>
-           <xsl:text>_</xsl:text>
-          </xsl:otherwise>
-         </xsl:choose>
-         <xsl:text> := </xsl:text>
-         <xsl:apply-templates select="./*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent"/>
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-         <xsl:text> _ :? _ </xsl:text>
-        </xsl:otherwise>
-       </xsl:choose>
-      </xsl:for-each>
-      |- <xsl:value-of select="./@no"/> : 
-      <xsl:apply-templates select="./Goal/*[1]">
-       <xsl:with-param name="current_indent" select="$current_indent + 11"/>
-      </xsl:apply-templates>
-      </xsl:for-each> 
-      <br/>
-PROOF:
-      <xsl:apply-templates select="body/*[1]">
-        <xsl:with-param name="current_indent" select="$current_indent + 8"/>
-      </xsl:apply-templates>
-</p>
-</xsl:template>
-
-<!-- MUTUAL INDUCTIVE DEFINITION -->
-
-<xsl:template match="InductiveDefinition">
-<xsl:param name="current_indent" select="0"/>
-<p>
-     <xsl:for-each select="InductiveType">
-         <xsl:choose>
-         <xsl:when test="position() = 1">
-          <xsl:choose>
-          <xsl:when test="string(./@inductive) = &quot;true&quot;">
-          INDUCTIVE DEFINITION 
-          </xsl:when>
-          <xsl:otherwise>
-          COINDUCTIVE DEFINITION 
-          </xsl:otherwise>
-          </xsl:choose>  
-         </xsl:when>
-         <xsl:otherwise>
-          AND 
-         </xsl:otherwise>
-         </xsl:choose>
-         <xsl:value-of select="./@name"/>(<xsl:if test="string(../Params) != &quot;&quot;"><xsl:value-of select="../Params"/></xsl:if>)
-         [
-          <xsl:if test="string(../Param) != &quot;&quot;">         
-           <xsl:for-each select="../Param">
-            <xsl:value-of select="./@name"/>
-            :
-            <xsl:apply-templates select="*"/>
-           </xsl:for-each>
-          </xsl:if>
-         ] <br/>
-         OF ARITY 
-         <xsl:apply-templates select="./arity/*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 9"/>
-         </xsl:apply-templates> <br/>
-         BUILT FROM:
-      <xsl:for-each select="./Constructor">
-      <br/>
-      <xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent + 3"/> 
-      </xsl:call-template>
-         <xsl:choose>
-         <xsl:when test="position() = 1">
-         <xsl:text>&#x00A0;&#x00A0;</xsl:text>
-         </xsl:when>
-         <xsl:otherwise>
-         <xsl:text>| </xsl:text>
-         </xsl:otherwise>
-         </xsl:choose>
-         <xsl:value-of select="./@name"/>
-         <xsl:text>: </xsl:text>
-         <xsl:apply-templates select="./*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2*string-length(./@name) + 5"/>
-         </xsl:apply-templates>
-      </xsl:for-each>
-     </xsl:for-each>
-</p>
-</xsl:template>
-
-<!-- VARIABLE -->
-
-<xsl:template match="Variable">
-<xsl:param name="current_indent" select="0"/>
-<p>
-VARIABLE <xsl:value-of select="@name"/><br/>
-TYPE = <xsl:apply-templates select="type/*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 7"/>
-       </xsl:apply-templates>
-<xsl:if test="body">
-<br/>
-BODY = <xsl:apply-templates select="body/*[1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 7"/>
-       </xsl:apply-templates>
-</xsl:if>
-</p>
-</xsl:template>
-
-<!--***********************************************************************-->
-<!-- SECTIONS                                                              -->
-<!--***********************************************************************-->
-
-<!-- SECTION -->
-
-<xsl:template match="SECTION">
-<xsl:param name="current_indent" select="0"/>
- <h1>BEGIN OF SECTION</h1>
-  <xsl:apply-templates/>
- <h1>END OF SECTION</h1>
-</xsl:template>
-
-</xsl:stylesheet> 
diff --git a/helm/style/contentlib.xsl b/helm/style/contentlib.xsl
deleted file mode 100644 (file)
index 00671bd..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--******************************************************************--> 
-<!-- Library for MML Content                                          -->
-<!-- First draft: March 20 2001, Ferruccio Guidi                      -->
-<!--******************************************************************-->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-<xsl:template name="out-mml-op">       <!-- outputs MML nodes for operators -->
-   <xsl:param name="hide" select="0"/> <!-- number of hidden parameters     -->
-   <xsl:param name="arity"/>           <!-- operator arity                  -->
-   <xsl:param name="c-tag"/>           <!-- CIC    tag                      -->
-   <xsl:param name="m-tag"/>           <!-- MathML tag                      -->
-   <xsl:param name="mbody"/>           <!-- other sons of m:apply           -->
-   <xsl:choose>
-      <xsl:when test="count(child::*) = $arity + $hide + 1">
-         <m:apply helm:xref="{@id}">
-            <xsl:element name="{concat('m:',$m-tag)}">
-               <xsl:attribute name="definitionURL">
-                  <xsl:value-of select="$c-tag/@uri"/> 
-               </xsl:attribute>
-               <xsl:attribute name="helm:xref">
-                  <xsl:value-of select="$c-tag/@id"/>
-               </xsl:attribute>
-            </xsl:element>
-            <xsl:copy-of select="$mbody"/>
-         </m:apply>
-      </xsl:when>
-      <xsl:otherwise>
-         <xsl:apply-imports/>
-      </xsl:otherwise>
-   </xsl:choose>
-</xsl:template>
-
-<!-- noannot -->
-
-<xsl:template name="mk-mml-op-noannot">    <!-- makes MML nodes for operators (noannot mode) --> 
-   <xsl:param name="hide" 
-              select="0"/>                          <!-- hidden params      -->
-   <xsl:param name="arity"
-              select="2"/>                          <!-- operator arity      -->
-   <xsl:param name="c-tag"/>                        <!-- CIC    tag          -->
-   <xsl:param name="m-tag"/>                        <!-- MathML tag          -->
-   <xsl:param name="rnset" 
-              select="*[position() > 1 + $hide]"/>  <!-- nodes for recursion -->
-   <xsl:variable name="mbody">
-      <xsl:apply-templates select="$rnset" mode="noannot"/>
-   </xsl:variable>
-   <xsl:call-template name="out-mml-op">
-      <xsl:with-param name="hide"  select="$hide"/>
-      <xsl:with-param name="arity" select="$arity"/>
-      <xsl:with-param name="c-tag" select="$c-tag"/>
-      <xsl:with-param name="m-tag" select="$m-tag"/>
-      <xsl:with-param name="mbody" select="$mbody"/>
-   </xsl:call-template>
-</xsl:template>
-
-<!-- interp -->
-
-<xsl:template name="start-interp"> <!-- interp mode starter -->
-   <xsl:param name="rtree"/>
-   <xsl:param name="atree"/>   
-   <m:apply helm:xref="{@id}">
-      <m:csymbol>interp</m:csymbol>
-      <xsl:apply-templates mode="interp" select="$rtree">
-         <xsl:with-param name="atree" select="$atree"/>
-      </xsl:apply-templates>
-   </m:apply>
-</xsl:template>
-
-<xsl:template name="mk-mml-op-interp"> <!-- make MML node for operators (interp mode) --> 
-   <xsl:param name="arity"/>           <!-- operator arity        -->
-   <xsl:param name="c-tag"/>           <!-- CIC    tag            -->
-   <xsl:param name="m-tag"/>           <!-- MathML tag            -->
-   <xsl:param name="atree"/>           <!-- abstract tree pointer -->
-   <xsl:variable name="mbody">
-      <xsl:apply-templates select="*[position() > 1]" mode="interp">
-         <xsl:with-param name="atree" select="$atree"/>
-      </xsl:apply-templates>
-   </xsl:variable>
-   <xsl:call-template name="out-mml-op">
-      <xsl:with-param name="arity" select="$arity"/>
-      <xsl:with-param name="c-tag" select="$c-tag"/>
-      <xsl:with-param name="m-tag" select="$m-tag"/>
-      <xsl:with-param name="mbody" select="$mbody"/>
-   </xsl:call-template>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/drop_coercions.xsl b/helm/style/drop_coercions.xsl
deleted file mode 100644 (file)
index b31160e..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--******************************************************************--> 
-<!-- Coercions                                                        -->
-<!-- First draft: March 20 2001, Andrea Asperti                       -->
-<!--******************************************************************-->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<!-- ************************** LAMBDA ****************************** -->
-
-<xsl:param name="CICURI" select="''"/>
-<xsl:param name="getterURL" select="''"/>
-<xsl:include href="getter.xsl"/>
-<xsl:include href="params.xsl"/>
-
-<!-- coercions -->
-
-<xsl:template match="APPLY[CONST[position()='1' and 
-         (@uri='cic:/Algebra/CSemiGroups/csg_crr.con' or 
-          @uri='cic:/Algebra/CMonoids/cm_crr.con' or
-          @uri='cic:/Algebra/CGroups/cg_crr.con' or
-          @uri='cic:/Algebra/CRings/cr_crr.con' or
-          @uri='cic:/Algebra/CFields/cf_crr.con' or
-          @uri='cic:/Algebra/COrdFields/cof_crr.con' or
-          @uri='cic:/Algebra/CReals/crl_crr.con')]]">
-  <xsl:apply-templates select="*[position()=last()]"/>
-</xsl:template>
-
-<xsl:template match="APPLY[CONST[position()='1' and 
-   @uri='cic:/Algebra/CSetoids/CSetoid_functions/csf_fun.con']]">
-     <xsl:variable name="no_params">
-      <xsl:call-template name="get_no_params">
-       <xsl:with-param name="first_uri" select="$CICURI"/>
-       <xsl:with-param name="second_uri" select="CONST[1]/@uri"/>
-      </xsl:call-template>
-     </xsl:variable>
-    <xsl:choose>
-     <xsl:when test="(count(child::*) - number($no_params)) = 3">
-      <xsl:choose>
-       <xsl:when test="name(*[2+$no_params])='APPLY'">
-        <APPLY id="{@id}" sort="{@sort}">
-         <xsl:apply-templates select="*[2+$no_params]/*"/>
-         <xsl:apply-templates select="*[3+$no_params]"/>
-        </APPLY>
-       </xsl:when>
-       <xsl:otherwise>
-        <APPLY id="{@id}" sort="{@sort}">
-         <xsl:apply-templates select="*[2+$no_params]"/>
-         <xsl:apply-templates select="*[3+$no_params]"/> 
-        </APPLY>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:when>
-     <xsl:otherwise>
-      <APPLY id="{@id}" sort="{@sort}">
-       <xsl:apply-templates select="*"/>
-      </APPLY>
-     </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-<xsl:template match="APPLY[CONST[position()='1' and 
-   @uri='cic:/Algebra/CSetoids/CSetoid_functions/csbf_fun.con']]">
-     <xsl:variable name="no_params">
-      <xsl:call-template name="get_no_params">
-       <xsl:with-param name="first_uri" select="$CICURI"/>
-       <xsl:with-param name="second_uri" select="CONST[1]/@uri"/>
-      </xsl:call-template>
-     </xsl:variable>
-    <xsl:choose>
-     <xsl:when test="(count(child::*) - number($no_params)) = 4">
-      <xsl:choose>
-       <xsl:when test="name(*[2+$no_params])='APPLY'">
-        <APPLY id="{@id}" sort="{@sort}">
-         <xsl:apply-templates select="*[2+$no_params]/*"/>
-         <xsl:apply-templates select="*[3+$no_params]"/>
-         <xsl:apply-templates select="*[4+$no_params]"/>
-        </APPLY>
-       </xsl:when>
-       <xsl:otherwise>
-        <APPLY id="{@id}" sort="{@sort}">
-         <xsl:apply-templates select="*[2+$no_params]"/>
-         <xsl:apply-templates select="*[3+$no_params]"/>
-         <xsl:apply-templates select="*[4+$no_params]"/>
-        </APPLY>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:when>
-     <xsl:otherwise>
-      <APPLY id="{@id}" sort="{@sort}">
-       <xsl:apply-templates select="*"/>
-      </APPLY>
-     </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-<xsl:template match="APPLY[CONST[position()='1' and 
-   @uri='cic:/Algebra/CSetoids/CSetoid_relations_and_predicates/csr_rel.con']]">
-     <xsl:variable name="no_params">
-      <xsl:call-template name="get_no_params">
-       <xsl:with-param name="first_uri" select="$CICURI"/>
-       <xsl:with-param name="second_uri" select="CONST[1]/@uri"/>
-      </xsl:call-template>
-     </xsl:variable>
-    <xsl:choose>
-     <xsl:when test="(count(child::*) - number($no_params)) = 4">
-      <xsl:choose>
-       <xsl:when test="name(*[2+$no_params])='APPLY'">
-        <APPLY id="{@id}" sort="{@sort}">
-         <xsl:apply-templates select="*[2+$no_params]/*"/>
-         <xsl:apply-templates select="*[3+$no_params]"/>
-         <xsl:apply-templates select="*[4+$no_params]"/>
-        </APPLY>
-       </xsl:when>
-       <xsl:otherwise>
-        <APPLY id="{@id}" sort="{@sort}">
-         <xsl:apply-templates select="*[2+$no_params]"/>
-         <xsl:apply-templates select="*[3+$no_params]"/>
-         <xsl:apply-templates select="*[4+$no_params]"/>
-        </APPLY>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:when>
-     <xsl:otherwise>
-      <APPLY id="{@id}" sort="{@sort}">
-       <xsl:apply-templates select="*"/>
-      </APPLY>
-     </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-<xsl:template match="APPLY[CONST[position()='1' and 
-   @uri='cic:/Algebra/CRings/nat_injection/nring.con']]">
-     <xsl:variable name="no_params">
-      <xsl:call-template name="get_no_params">
-       <xsl:with-param name="first_uri" select="$CICURI"/>
-       <xsl:with-param name="second_uri" select="CONST[1]/@uri"/>
-      </xsl:call-template>
-     </xsl:variable>
-    <xsl:choose>
-     <xsl:when test="(count(child::*) - number($no_params)) = 2">
-      <xsl:apply-templates select="*[2+$no_params]"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <APPLY id="{@id}" sort="{@sort}">
-       <xsl:apply-templates select="*"/>
-      </APPLY>
-     </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "/|*">
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:apply-templates select="*"/>
-  </xsl:copy>
-</xsl:template>
-
-
-</xsl:stylesheet>
diff --git a/helm/style/expandobj.xsl b/helm/style/expandobj.xsl
deleted file mode 100644 (file)
index 6c61823..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- XSLT version 0.1 of theory sections to theory sections with objects   -->
-<!-- First draft: March 08 2001, Irene Schena                              -->
-<!--***********************************************************************--> 
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:ht="http://www.cs.unibo.it/helm/namespaces/helm-theory">
-
-<!--******************************************************************-->
-<!-- Parameters containing the absolute path of the CIC file          -->
-<!--******************************************************************-->
-
-<xsl:import href="links_library.xsl"/>
-
-<xsl:output 
-       method="xml"
-       encoding="iso-8859-1" 
-       media-type="text/html"
-       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
-       doctype-system="DTD/xhtml1-transitional.dtd" />
-
-<!-- THEORY CONTENT ELEMENTS -->
-<!-- document cannot return HTML, transforming it into XML!!! -->
-
-<xsl:template match="ht:THEOREM">
-<xsl:variable name="url"><xsl:call-template name="makeURL4embedding"><xsl:with-param name="type" select="'typeonly'"/><xsl:with-param name="uri" select="@uri"/></xsl:call-template></xsl:variable>
-   <xsl:copy>
-    <xsl:copy-of select="@*"/>
-    <xsl:copy-of select="document(string($url))"/>
-    <xsl:value-of select="$url"/>
-   </xsl:copy>
-</xsl:template>
-
-<xsl:template match="ht:AXIOM|ht:DEFINITION|ht:VARIABLE">
-<xsl:variable name="url"><xsl:call-template name="makeURL4embedding"><xsl:with-param name="type" select="'embed'"/><xsl:with-param name="uri" select="@uri"/></xsl:call-template></xsl:variable>
-   <xsl:copy>
-    <xsl:copy-of select="@*"/>
-    <xsl:copy-of select="document(string($url))"/>
-   </xsl:copy>
-</xsl:template>
-
-<!-- THEORY PRESENTATION ELEMENTS -->
-
-<xsl:template match="ENTITY">
-<xsl:variable name="url"><xsl:call-template name="makeURL4embedding"><xsl:with-param name="type" select="@type"/><xsl:with-param name="uri" select="@uri"/></xsl:call-template></xsl:variable>
-  <xsl:variable name="doc_to_embed" select="document(string($url))/to_be_embedded"/>
-  <xsl:copy-of select="$doc_to_embed/*|$doc_to_embed/text()"/>
-</xsl:template>
-
-<!-- CONTENT AND PRESENTATION THEORY AND SUBTHEORY -->
-
-<xsl:template match = "/|*">
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:apply-templates/>
-  </xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/genmmlid.xsl b/helm/style/genmmlid.xsl
deleted file mode 100644 (file)
index c4981c5..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- XSLT version 0.1 of a generation of id for MathML content elements:   -->
-<!-- First draft: April 28 2001, Irene Schena                              -->
-<!--***********************************************************************--> 
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<xsl:output method="xml"/>
-
-<!-- Copy of the root or m:math or a node different from mml elements -->
-<!-- with all its attributes                                          -->
-<xsl:template match = "/|*|m:math">
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:apply-templates/>
-  </xsl:copy>
-</xsl:template>
-
-<!-- Generates random id for all mml elements -->
-<xsl:template match = "m:*">
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:attribute name="id"><xsl:value-of select="generate-id()"/></xsl:attribute>
-   <xsl:apply-templates/>
-  </xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet> 
diff --git a/helm/style/getter.xsl b/helm/style/getter.xsl
deleted file mode 100644 (file)
index c2f36de..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:template name="URLofURI4getter">
- <xsl:param name="uri" select="''"/>
- <xsl:value-of select="$getterURL"/>getxml?uri=<xsl:value-of select="$uri"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/headercontent.xsl b/helm/style/headercontent.xsl
deleted file mode 100644 (file)
index f608830..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- XSLT version 0.1 of the stylesheet to list the notational stylesheets -->
-<!-- First draft: May 26 2000, C.Sacerdoti Coen, I.Schena, F.Guidi         -->
-<!--***********************************************************************-->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:include href="contentlib.xsl"/>   <!-- FG -->
-<xsl:include href="basic.xsl"/>
-<xsl:include href="arith.xsl"/>        <!-- FG -->
-<xsl:include href="set.xsl"/>
-<xsl:include href="reals.xsl"/>
-<xsl:include href="ring.xsl"/>        <!-- FG -->
-<xsl:include href="algebra.xsl"/> 
-<xsl:include href="lambda.xsl"/>
-
-</xsl:stylesheet>
diff --git a/helm/style/html_init.xsl b/helm/style/html_init.xsl
deleted file mode 100644 (file)
index 46fc61b..0000000
+++ /dev/null
@@ -1,509 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<xsl:template name="mksymbol-init">
- <xsl:param name="symbol" select="''"/>
-  <xsl:choose>
-   <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">
-    <xsl:variable name="fontsymbol">
-     <xsl:choose>
-      <xsl:when test="$symbol = 'and'">
-       <xsl:value-of select="'&#217;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'or'">
-       <xsl:value-of select="'&#218;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'eq'">
-       <xsl:value-of select="'&#61;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'neq'">
-       <xsl:value-of select="'&#185;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'leq'">
-       <xsl:value-of select="'&#163;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'lt'">
-       <xsl:value-of select="'&#60;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'geq'">
-       <xsl:value-of select="'&#179;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'gt'">
-       <xsl:value-of select="'&#62;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'plus'">
-       <xsl:value-of select="'&#43;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'times'">
-       <xsl:value-of select="'&#42;'"/>
-      </xsl:when> 
-      <xsl:when test="$symbol = 'divide'">
-       <xsl:value-of select="'&#47;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'minus'">
-       <xsl:value-of select="'&#45;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'not'">
-       <xsl:value-of select="'&#216;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'exists'">
-       <xsl:value-of select="'&#36;'"/>
-      </xsl:when>
-      <xsl:otherwise>
-       <xsl:text>???</xsl:text>
-      </xsl:otherwise>
-     </xsl:choose>
-    </xsl:variable>
-    <FONT FACE="symbol" color="'blue'">
-     <xsl:value-of select="$fontsymbol"/>
-    </FONT>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:variable name="unicodesymbol">
-     <xsl:choose>
-      <xsl:when test="$symbol = 'and'">
-       <xsl:value-of select="'&#8743;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'or'">
-       <xsl:value-of select="'&#8744;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'eq'">
-       <xsl:value-of select="'&#61;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'neq'">
-       <xsl:value-of select="'&#8800;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'leq'">
-       <xsl:value-of select="'&#8804;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'lt'">
-       <xsl:value-of select="'&#60;&#32;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'geq'">
-       <xsl:value-of select="'&#8805;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'gt'">
-       <xsl:value-of select="'&#62;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'plus'">
-       <xsl:value-of select="'&#43;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'times'">
-       <xsl:value-of select="'&#8727;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'divide'">
-       <xsl:value-of select="'&#47;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'minus'">
-       <xsl:value-of select="'&#8722;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'not'">
-       <xsl:value-of select="'&#172;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'exists'">
-       <xsl:value-of select="'&#8707;'"/>
-      </xsl:when>
-      <xsl:otherwise>
-       <xsl:text>???</xsl:text>
-      </xsl:otherwise>
-     </xsl:choose>
-    </xsl:variable>
-    <FONT color="'blue'">
-     <xsl:value-of select="$unicodesymbol"/>
-    </FONT>
-   </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-
-<!--***********************************************************************--> 
-<!-- INIT style for HTML                                                   -->
-<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena                      -->
-<!--***********************************************************************--> 
-
-<!-- INLINE MODE : BASIC OPERATORS -->
-
-<xsl:template mode="inline" match="m:infinity">
- <xsl:choose>
-  <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">
-   <FONT FACE="symbol" color="'blue'">
-    <xsl:value-of select="'&#165;'"/>
-   </FONT>
-  </xsl:when>
-  <xsl:otherwise>
-   <FONT color="'blue'">
-    <!-- VERIFICARE -->
-    <xsl:value-of select="'&#165;'"/>
-   </FONT>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template mode="inline" match="m:eq|m:leq|m:lt|m:geq|m:gt">
-  <xsl:variable name="uri"><xsl:value-of select="*[1]/@definitionURL"/></xsl:variable>
-  <xsl:choose>
-  <xsl:when test="$uri != ''">
-   <a href="{$uri}">
-    <xsl:call-template name="mksymbol-init">
-     <xsl:with-param name="symbol" select="local-name(.)"/>
-    </xsl:call-template>
-   </a>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:call-template name="mksymbol-init">
-     <xsl:with-param name="symbol" select="local-name(.)"/>
-   </xsl:call-template>
-  </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
- <xsl:template mode="inline" match="m:apply[m:and|m:or|m:eq|m:neq|m:leq|m:lt
-       |m:geq|m:gt|m:plus|m:times|m:divide]">
-  <xsl:variable name="uri"><xsl:value-of select="*[1]/@definitionURL"/></xsl:variable>
-  <xsl:text>(</xsl:text>
-  <xsl:apply-templates mode="inline" select="*[2]"/>
-  <xsl:choose>
-  <xsl:when test="$uri != ''">
-   <a href="{$uri}">
-    <xsl:call-template name="mksymbol-init">
-     <xsl:with-param name="symbol" select="local-name(*[1])"/>
-    </xsl:call-template>
-   </a>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:call-template name="mksymbol-init">
-     <xsl:with-param name="symbol" select="local-name(*[1])"/>
-   </xsl:call-template>
-  </xsl:otherwise>
-  </xsl:choose>
-  <xsl:apply-templates mode="inline" select="*[3]"/>
-  <xsl:text>)</xsl:text>
- </xsl:template>
-
-<!-- INLINE MODE - MINUS (can be unary!) -->
-
-<xsl:template mode="inline" match="m:apply[m:minus]">
-  <xsl:variable name="uri"><xsl:value-of select="*[1]/@definitionURL"/></xsl:variable>
-  <xsl:choose>
-   <xsl:when test="count(child::*)=2">
-    <xsl:choose>
-    <xsl:when test="$uri != ''">
-     <a href="{$uri}">
-      <xsl:call-template name="mksymbol-init">
-       <xsl:with-param name="symbol" select="'minus'"/>
-      </xsl:call-template>
-     </a>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:call-template name="mksymbol-init">
-       <xsl:with-param name="symbol" select="'minus'"/>
-     </xsl:call-template>
-    </xsl:otherwise>
-    </xsl:choose>
-    <xsl:apply-templates mode="inline" select="*[2]"/>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:text>(</xsl:text>
-    <xsl:apply-templates mode="inline" select="*[2]"/>
-    <xsl:choose>
-    <xsl:when test="$uri != ''">
-     <a href="{$uri}">
-      <xsl:call-template name="mksymbol-init">
-       <xsl:with-param name="symbol" select="'minus'"/>
-      </xsl:call-template>
-     </a>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:call-template name="mksymbol-init">
-       <xsl:with-param name="symbol" select="'minus'"/>
-     </xsl:call-template>
-    </xsl:otherwise>
-    </xsl:choose>
-    <xsl:apply-templates mode="inline" select="*[3]"/>
-    <xsl:text>)</xsl:text>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:template>
-
-<!-- INLINE MODE NOT -->
-
-<xsl:template mode="inline" match="m:apply[m:not]">
-  <xsl:variable name="uri"><xsl:value-of select="m:not/@definitionURL"/></xsl:variable>
-  <xsl:choose>
-  <xsl:when test="$uri != ''">
-   <a href="{$uri}">
-    <xsl:call-template name="mksymbol-init">
-     <xsl:with-param name="symbol" select="'not'"/>
-    </xsl:call-template>
-   </a>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:call-template name="mksymbol-init">
-    <xsl:with-param name="symbol" select="'not'"/>
-   </xsl:call-template>
-  </xsl:otherwise>
-  </xsl:choose>
-  <xsl:apply-templates mode="inline" select="*[2]"/>
-</xsl:template>
-
-<!-- INLINE MODE EXISTS -->
-
- <xsl:template mode="inline" match="m:apply[m:exists]">
-  <xsl:variable name="uri"><xsl:value-of select="m:exists/@definitionURL"/></xsl:variable>
-  <xsl:choose>
-  <xsl:when test="$uri != ''">
-   <a href="{$uri}">
-    <xsl:call-template name="mksymbol-init">
-     <xsl:with-param name="symbol" select="'exists'"/>
-    </xsl:call-template>
-   </a>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:call-template name="mksymbol-init">
-    <xsl:with-param name="symbol" select="'exists'"/>
-   </xsl:call-template>
-  </xsl:otherwise>
-  </xsl:choose>
-  <xsl:apply-templates select="m:bvar/m:ci"/>
-  <xsl:text>:</xsl:text>
-  <xsl:apply-templates mode="inline" select="m:condition"/>
-  <xsl:text>.</xsl:text>
-  <xsl:apply-templates mode="inline" select="*[last()]"/>
- </xsl:template>
-
-<!-- COUNTING MODE -->
-
-<!-- BASIC OPERATORS -->
-
- <xsl:template match="m:apply[m:and|m:or|m:eq|m:neq|m:leq|m:lt
-       |m:geq|m:gt|m:plus|m:times|m:divide]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri"><xsl:value-of select="*[1]/@definitionURL"/></xsl:variable>
-  <xsl:variable name="charlength">
-   <xsl:apply-templates select="*[1]" mode="charcount"/>
-  </xsl:variable>
-  <xsl:choose>
-    <xsl:when test="$charlength > $framewidth">
-     <xsl:text>(</xsl:text>
-     <xsl:apply-templates select="*[2]">
-      <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-     </xsl:apply-templates>
-     <BR/> 
-     <xsl:call-template name="make_indent">
-      <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-     </xsl:call-template>
-     <xsl:choose>
-     <xsl:when test="$uri != ''">
-      <a href="{$uri}">
-       <xsl:call-template name="mksymbol-init">
-        <xsl:with-param name="symbol" select="local-name(*[1])"/>
-       </xsl:call-template>
-      </a>
-     </xsl:when>
-     <xsl:otherwise>
-       <xsl:call-template name="mksymbol-init">
-        <xsl:with-param name="symbol" select="local-name(*[1])"/>
-       </xsl:call-template>
-     </xsl:otherwise>
-     </xsl:choose>
-     <xsl:apply-templates select="*[3]">
-      <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-     </xsl:apply-templates>
-     <xsl:text>)</xsl:text>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-templates mode="inline" select="."/>
-    </xsl:otherwise>
-   </xsl:choose>
- </xsl:template>
-
-<!-- MINUS (can be unary!) -->
-
-<xsl:template match="m:apply[m:minus]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri"><xsl:value-of select="*[1]/@definitionURL"/></xsl:variable>
-  <xsl:choose>
-   <xsl:when test="count(child::*)=2">
-    <xsl:choose>
-    <xsl:when test="$uri != ''">
-     <a href="{$uri}">
-      <xsl:call-template name="mksymbol-init">
-       <xsl:with-param name="symbol" select="'minus'"/>
-      </xsl:call-template>
-     </a>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:call-template name="mksymbol-init">
-       <xsl:with-param name="symbol" select="'minus'"/>
-      </xsl:call-template>
-    </xsl:otherwise>
-    </xsl:choose>
-    <xsl:apply-templates select="*[2]">
-     <xsl:with-param name="current_indent" select="$current_indent + 1"/>
-    </xsl:apply-templates>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:variable name="charlength">
-     <xsl:apply-templates select="*[1]" mode="charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-     <xsl:when test="$charlength > $framewidth">
-      <xsl:text>(</xsl:text>
-      <xsl:apply-templates select="*[2]">
-       <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-      </xsl:apply-templates>
-      <BR/> 
-      <xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-      </xsl:call-template>
-      <xsl:choose>
-      <xsl:when test="$uri != ''">
-       <a href="{$uri}">
-        <xsl:call-template name="mksymbol-init">
-         <xsl:with-param name="symbol" select="'minus'"/>
-        </xsl:call-template>
-       </a>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:call-template name="mksymbol-init">
-         <xsl:with-param name="symbol" select="'minus'"/>
-        </xsl:call-template>
-      </xsl:otherwise>
-      </xsl:choose>  
-      <xsl:apply-templates select="*[3]">
-       <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-      </xsl:apply-templates>
-      <xsl:text>)</xsl:text>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:apply-templates mode="inline" select="."/>
-     </xsl:otherwise>
-    </xsl:choose>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:template>
-
-<!-- NOT -->
-
-<xsl:template match="m:apply[m:not]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri"><xsl:value-of select="m:not/@definitionURL"/></xsl:variable>
-   <xsl:choose>
-   <xsl:when test="$uri != ''">
-    <a href="{$uri}">
-     <xsl:call-template name="mksymbol-init">
-      <xsl:with-param name="symbol" select="'not'"/>
-     </xsl:call-template>
-    </a>
-   </xsl:when>
-   <xsl:otherwise>
-     <xsl:call-template name="mksymbol-init">
-      <xsl:with-param name="symbol" select="'not'"/>
-     </xsl:call-template>
-   </xsl:otherwise>
-   </xsl:choose>
-   <xsl:apply-templates select="*[2]"/>
- </xsl:template>
-
-<!-- EXISTS -->
-
- <xsl:template match="m:apply[m:exists]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri"><xsl:value-of select="m:exists/@definitionURL"/></xsl:variable>
-  <xsl:variable name="charlength">
-   <xsl:apply-templates select="m:exists" mode="charcount"/>
-  </xsl:variable>
-  <xsl:choose>
-    <xsl:when test="$charlength > $framewidth">
-     <xsl:choose>
-     <xsl:when test="$uri != ''">
-      <a href="{$uri}">
-       <xsl:call-template name="mksymbol-init">
-        <xsl:with-param name="symbol" select="'exists'"/>
-       </xsl:call-template>
-      </a>
-     </xsl:when>
-     <xsl:otherwise>
-       <xsl:call-template name="mksymbol-init">
-        <xsl:with-param name="symbol" select="'exists'"/>
-       </xsl:call-template>
-     </xsl:otherwise>
-     </xsl:choose>
-     <xsl:apply-templates select="m:bvar/m:ci"/>
-     <xsl:text>:</xsl:text>
-     <xsl:apply-templates select="m:condition">
-      <xsl:with-param name="current_indent" select="$current_indent + 2 +
-                                string-length(bvar/ci)"/> 
-     </xsl:apply-templates>
-     <BR/> 
-      <xsl:call-template name="make_indent">
-       <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-      </xsl:call-template>
-     <xsl:text>.</xsl:text>
-      <xsl:apply-templates select="*[last()]">
-       <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-templates mode="inline" select="."/>
-    </xsl:otherwise>
-   </xsl:choose>
- </xsl:template>
-
-
-
-
-<!-- COUNTING -->
-
-<xsl:template match="m:cn|m:and|m:or|m:not|m:exists|m:eq|m:neq
-   |m:lt|m:leq|m:gt|m:geq|m:plus|m:minus|m:times" mode="charcount">
-<xsl:param name="incurrent_length" select="0"/> 
-    <xsl:choose>
-    <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
-     <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length + string-length()"/></xsl:apply-templates></xsl:variable>
-     <xsl:choose>
-     <xsl:when test="string($siblength) = &quot;&quot;">
-      <xsl:value-of select="$incurrent_length + string-length()"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="$incurrent_length + string-length()"/>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template> 
-
-</xsl:stylesheet> 
diff --git a/helm/style/html_reals.xsl b/helm/style/html_reals.xsl
deleted file mode 100644 (file)
index a78f454..0000000
+++ /dev/null
@@ -1,469 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!--***********************************************************************--> 
-<!-- INIT style for HTML                                                   -->
-<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena                      -->
-<!--***********************************************************************--> 
-
-<xsl:template name="mksymbol-reals">
- <xsl:param name="symbol" select="''"/>
-  <xsl:choose>
-   <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">
-    <xsl:variable name="fontsymbol">
-     <xsl:choose>
-      <xsl:when test="$symbol = 'leadsto'">
-       <xsl:value-of select="'&#174;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'sum'">
-       <xsl:value-of select="'&#229;'"/>
-      </xsl:when>
-      <xsl:otherwise>
-       <xsl:text>???</xsl:text>
-      </xsl:otherwise>
-     </xsl:choose>
-    </xsl:variable>
-    <FONT FACE="symbol" color="'blue'">
-     <xsl:value-of select="$fontsymbol"/>
-    </FONT>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:variable name="unicodesymbol">
-     <xsl:choose>
-      <xsl:when test="$symbol = 'leadsto'">
-       <xsl:value-of select="'&#8594;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'sum'">
-       <xsl:value-of select="'&#x02211;'"/>
-      </xsl:when>
-      <xsl:otherwise>
-       <xsl:text>???</xsl:text>
-      </xsl:otherwise>
-     </xsl:choose>
-    </xsl:variable>
-    <FONT color="'blue'">
-     <xsl:value-of select="$unicodesymbol"/>
-    </FONT>
-   </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!-- **************************************************************** -->
-<!--                   INLINE MODE                                    -->
-<!-- **************************************************************** -->
-
-<!-- SUM -->
-
-<xsl:template mode="inline" match="m:apply[m:sum]">
-     <xsl:variable name="uri">
-      <xsl:value-of select="m:sum/@definitionURL"/>
-     </xsl:variable>
-     <xsl:choose>
-      <xsl:when test="$uri != ''">
-       <a href="{$uri}">
-       <!-- 
-       <FONT FACE="symbol" color="'blue'">
-        <xsl:value-of select="'&#229;'"/>
-       </FONT> -->
-       <xsl:call-template name="mksymbol-reals">
-        <xsl:with-param name="symbol" select="'sum'"/>
-      </xsl:call-template>
-       </a>
-      </xsl:when>
-      <xsl:otherwise>
-       <!-- 
-       <FONT FACE="symbol" color="'blue'">
-        <xsl:value-of select="'&#229;'"/>
-       </FONT> -->
-       <xsl:call-template name="mksymbol-reals">
-        <xsl:with-param name="symbol" select="'sum'"/>
-       </xsl:call-template>
-      </xsl:otherwise>
-     </xsl:choose>
-     <xsl:choose>
-      <xsl:when test="m:condition">
-       <SUB>
-        <xsl:apply-templates select="m:condition"/>
-       </SUB>
-      </xsl:when>
-      <xsl:otherwise>
-       <SUB>
-        <xsl:apply-templates select="m:lowlimit/*[1]"/>
-        <xsl:call-template name="mksymbol-init">
-         <xsl:with-param name="symbol" select="'leq'"/>
-        </xsl:call-template>
-        <xsl:apply-templates select="m:bvar/*[1]"/>
-        <xsl:call-template name="mksymbol-init">
-         <xsl:with-param name="symbol" select="'leq'"/>
-        </xsl:call-template>
-        <xsl:apply-templates select="m:uplimit/*[1]"/>
-       </SUB>
-      </xsl:otherwise>
-     </xsl:choose>
-     <xsl:apply-templates mode="inline" select="*[position()=last()]"/>
- </xsl:template>
-
-
-<!-- LIMIT -->
-
-
-<xsl:template mode="inline" match="m:apply[m:limit]">
-     <xsl:variable name="uri"><xsl:value-of select="m:limit/@definitionURL"/></xsl:variable>
-     <xsl:choose>
-     <xsl:when test="$uri != ''">
-      <a href="{$uri}">
-       <xsl:text>lim</xsl:text>
-      </a>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:text>lim</xsl:text>
-     </xsl:otherwise>
-     </xsl:choose>
-     <SUB>
-      <xsl:apply-templates select="m:bvar/m:ci"/>
-      <xsl:call-template name="mksymbol-reals">
-       <xsl:with-param name="symbol" select="'leadsto'"/>
-      </xsl:call-template>
-      <xsl:apply-templates mode="inline" select="m:lowlimit"/>
-     </SUB>
-     <xsl:apply-templates mode="inline" select="*[4]"/>
- </xsl:template>
-
-<!-- DIFFERENTIATION -->
-
-<xsl:template mode="inline" match="m:apply[m:diff]">
-     <xsl:variable name="uri"><xsl:value-of select="m:diff/@definitionURL"/></xsl:variable>
-     <xsl:choose>
-     <xsl:when test="$uri != ''">
-      <a href="{$uri}">
-       <SUP>d</SUP>
-       <xsl:text>/</xsl:text>
-       <SUB>
-        <xsl:text>d</xsl:text>
-        <xsl:value-of select="m:bvar/m:ci"/>
-       </SUB>
-      </a>
-     </xsl:when>
-     <xsl:otherwise>
-      <SUP>d</SUP>
-       <xsl:text>/</xsl:text>
-       <SUB>
-        <xsl:text>d</xsl:text>
-        <xsl:value-of select="m:bvar/m:ci"/>
-       </SUB>
-     </xsl:otherwise>
-     </xsl:choose>
-     <xsl:apply-templates mode="inline" select="*[3]"/>
- </xsl:template>
-
-<!-- ABSOLUTE VALUE -->
-<xsl:template mode="inline" match="m:apply[m:abs]">
-  <xsl:variable name="uri">
-   <xsl:value-of select="m:abs/@definitionURL"/>
-  </xsl:variable>
-  <xsl:text>|</xsl:text>
-  <xsl:apply-templates mode="inline" select="*[2]"/>
-  <xsl:text>|</xsl:text>
-</xsl:template>
-
-<!-- FACTORIAL -->
-
-<xsl:template mode="inline" match="m:apply[m:fact]">
-  <xsl:variable name="uri">
-   <xsl:value-of select="m:abs/@definitionURL"/>
-  </xsl:variable>
-  <xsl:apply-templates mode="inline" select="*[2]"/>
-  <xsl:text>!</xsl:text>
-</xsl:template>
-
-<!-- SQUARE ROOT -->
-
-<xsl:template match="m:apply[m:root]">
-  <xsl:variable name="uri">
-   <xsl:value-of select="m:abs/@definitionURL"/>
-  </xsl:variable>
-  <xsl:text>(sqr</xsl:text>
-  <xsl:apply-templates mode="inline" select="*[2]"/>
-  <xsl:text>)</xsl:text>
-</xsl:template>
-
-<!-- POWER -->
-
-<xsl:template mode="inline" match="m:apply[m:power]">
-  <xsl:variable name="uri">
-   <xsl:value-of select="m:power/@definitionURL"/>
-  </xsl:variable>
-  <xsl:apply-templates mode="inline" select="*[2]"/>
-  <SUP>
-  <xsl:apply-templates mode="inline" select="*[3]"/>
-  </SUP>
-</xsl:template>
-
-<!-- MIN and MAX (binari: estendere) -->
-
- <xsl:template mode="inline" match="m:apply[m:min|m:max]">
-  <xsl:variable name="uri"><xsl:value-of select="*[1]/@definitionURL"/></xsl:variable>
-  <xsl:variable name="symbol">
-   <xsl:choose>
-    <xsl:when test="m:min">
-     <xsl:value-of select="'min'"/>
-    </xsl:when>
-    <xsl:when test="m:max">
-     <xsl:value-of select="'max'"/>
-    </xsl:when>
-   </xsl:choose>
-  </xsl:variable>
-  <xsl:choose>
-  <xsl:when test="$uri != ''">
-   <a href="{$uri}">
-    <xsl:value-of select="$symbol"/>
-   </a>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="$symbol"/>
-  </xsl:otherwise>
-  </xsl:choose>
-  <xsl:text>{</xsl:text>
-  <xsl:apply-templates mode="inline" select="*[2]"/>
-  <xsl:text>, </xsl:text>
-  <xsl:apply-templates mode="inline" select="*[3]"/>
-  <xsl:text>}</xsl:text>
-</xsl:template>
-
-<!-- **************************************************************** -->
-<!--                   COUNTING MODE                                    -->
-<!-- **************************************************************** -->
-
-<xsl:template match="m:apply[m:sum]">
- <xsl:apply-templates mode="inline" select="."/>
-</xsl:template>
-
-<xsl:template match="m:apply[m:limit]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri"><xsl:value-of select="m:limit/@definitionURL"/></xsl:variable>
-  <xsl:variable name="charlength">
-   <xsl:apply-templates select="m:limit" mode="charcount"/>
-  </xsl:variable>
-  <xsl:choose>
-    <xsl:when test="$charlength > $framewidth">
-     <xsl:choose>
-     <xsl:when test="$uri != ''">
-      <a href="{$uri}">
-       <xsl:text>lim</xsl:text>
-      </a>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:text>lim</xsl:text>
-     </xsl:otherwise>
-     </xsl:choose>
-     <SUB>
-      <xsl:apply-templates select="m:bvar/m:ci"/>
-      <xsl:call-template name="mksymbol-reals">
-       <xsl:with-param name="symbol" select="'leadsto'"/>
-      </xsl:call-template>
-      <xsl:apply-templates select="m:lowlimit"/>
-     </SUB>
-     <BR/> 
-     <xsl:call-template name="make_indent">
-      <xsl:with-param name="current_indent" select="$current_indent + 5"/> 
-     </xsl:call-template>
-     <xsl:apply-templates select="*[4]">
-      <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-     </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-templates mode="inline" select="."/>
-    </xsl:otherwise>
-   </xsl:choose>
- </xsl:template>
-
-<!-- DIFFERENTIATION -->
-<xsl:template match="m:apply[m:diff]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri"><xsl:value-of select="m:diff/@definitionURL"/></xsl:variable>
-     <xsl:choose>
-     <xsl:when test="$uri != ''">
-      <a href="{$uri}">
-       <SUP>d</SUP>
-       <xsl:text>/</xsl:text>
-       <SUB>
-        <xsl:text>d</xsl:text>
-        <xsl:value-of select="m:bvar/m:ci"/>
-       </SUB>
-      </a>
-     </xsl:when>
-     <xsl:otherwise>
-       <SUP>d</SUP>
-       <xsl:text>/</xsl:text>
-       <SUB>
-        <xsl:text>d</xsl:text>
-        <xsl:value-of select="m:bvar/m:ci"/>
-       </SUB>
-     </xsl:otherwise>
-     </xsl:choose>
-     <xsl:apply-templates select="*[3]">
-      <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-     </xsl:apply-templates>
- </xsl:template>
-
-
-<!-- ABSOLUTE VALUE -->
-<xsl:template match="m:apply[m:abs]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri">
-   <xsl:value-of select="m:abs/@definitionURL"/>
-  </xsl:variable>
-  <xsl:text>|</xsl:text>
-  <xsl:apply-templates select="*[2]">
-   <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-  </xsl:apply-templates>
-  <xsl:text>|</xsl:text>
- </xsl:template>
-
-<!-- FACTORIAL -->
-
-<xsl:template match="m:apply[m:fact]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri">
-   <xsl:value-of select="m:abs/@definitionURL"/>
-  </xsl:variable>
-  <xsl:apply-templates select="*[2]">
-   <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-  </xsl:apply-templates>
-  <xsl:text>!</xsl:text>
- </xsl:template>
-
-<!-- SQUARE ROOT -->
-
-<xsl:template match="m:apply[m:root]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri">
-   <xsl:value-of select="m:abs/@definitionURL"/>
-  </xsl:variable>
-  <xsl:text>(sqr</xsl:text>
-  <xsl:apply-templates select="*[2]">
-   <xsl:with-param name="current_indent" select="$current_indent + 5"/>
-  </xsl:apply-templates>
-  <xsl:text>)</xsl:text>
- </xsl:template>
-
-<!-- POWER -->
-
-<xsl:template match="m:apply[m:power]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri">
-   <xsl:value-of select="m:power/@definitionURL"/>
-  </xsl:variable>
-  <xsl:apply-templates select="*[2]"/>
-  <SUP>
-  <xsl:apply-templates select="*[3]"/>
-  </SUP>
- </xsl:template>
-
-<!-- MIN and MAX (binari: estendere) -->
-
- <xsl:template match="m:apply[m:min|m:max]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri"><xsl:value-of select="*[1]/@definitionURL"/></xsl:variable>
-  <xsl:variable name="charlength">
-   <xsl:apply-templates select="*[1]" mode="charcount"/>
-  </xsl:variable>
-  <xsl:variable name="symbol">
-   <xsl:choose>
-    <xsl:when test="m:min">
-     <xsl:value-of select="'min'"/>
-    </xsl:when>
-    <xsl:when test="m:max">
-     <xsl:value-of select="'max'"/>
-    </xsl:when>
-   </xsl:choose>
-  </xsl:variable>
-  <xsl:choose>
-    <xsl:when test="$charlength > $framewidth">
-     <xsl:choose>
-     <xsl:when test="$uri != ''">
-      <a href="{$uri}">
-       <xsl:value-of select="$symbol"/>
-      </a>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="$symbol"/>
-     </xsl:otherwise>
-     </xsl:choose>
-     <xsl:text>{</xsl:text>
-     <xsl:apply-templates select="*[2]">
-      <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-     </xsl:apply-templates>
-     <xsl:text>,</xsl:text>
-     <BR/> 
-     <xsl:call-template name="make_indent">
-      <xsl:with-param name="current_indent" select="$current_indent + 5"/> 
-     </xsl:call-template>
-     <xsl:apply-templates select="*[3]">
-      <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-     </xsl:apply-templates>
-     <xsl:text>}</xsl:text>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-templates mode="inline" select="."/>
-    </xsl:otherwise>
-   </xsl:choose>
- </xsl:template>
-
-<!-- COUNTING -->
-
-<xsl:template match="m:abs|m:fact|m:root|
-           m:sum|m:limit|m:diff|m:min|m:max" mode="charcount">
-<xsl:param name="incurrent_length" select="0"/> 
-    <xsl:choose>
-    <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
-     <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length + string-length()"/></xsl:apply-templates></xsl:variable>
-     <xsl:choose>
-     <xsl:when test="string($siblength) = &quot;&quot;">
-      <xsl:value-of select="$incurrent_length + string-length()"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="$incurrent_length + string-length()"/>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template> 
-
-</xsl:stylesheet> 
diff --git a/helm/style/html_set.xsl b/helm/style/html_set.xsl
deleted file mode 100644 (file)
index 4003d25..0000000
+++ /dev/null
@@ -1,389 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!--***********************************************************************--> 
-<!-- INIT style for HTML                                                   -->
-<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena                      -->
-<!--***********************************************************************--> 
-
-<xsl:template name="mksymbol">
- <xsl:param name="symbol" select="''"/>
-  <xsl:choose>
-   <xsl:when test="$UNICODEvsSYMBOL = 'symbol'">
-    <xsl:variable name="fontsymbol">
-     <xsl:choose>
-      <xsl:when test="$symbol = 'emptyset'">
-       <xsl:value-of select="'&#198;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'in'">
-       <xsl:value-of select="'&#206;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'notin'">
-       <xsl:value-of select="'&#207;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'intersect'">
-       <xsl:value-of select="'&#199;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'union'">
-       <xsl:value-of select="'&#200;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'subset'">
-       <xsl:value-of select="'&#205;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'prsubset'">
-       <xsl:value-of select="'&#204;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'setdiff'">
-       <xsl:value-of select="'/'"/>
-      </xsl:when>
-     </xsl:choose>
-    </xsl:variable>
-    <FONT FACE="symbol" mathcolor="blue">
-     <xsl:value-of select="$fontsymbol"/>
-    </FONT>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:variable name="unicodesymbol">
-     <xsl:choose>
-      <xsl:when test="$symbol = 'emptyset'">
-       <xsl:value-of select="'&#8709;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'in'">
-       <xsl:value-of select="'&#8712;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'notin'">
-       <xsl:value-of select="'&#8713;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'intersect'">
-       <xsl:value-of select="'&#8745;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'union'">
-       <xsl:value-of select="'&#8746;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'subset'">
-       <xsl:value-of select="'&#8838;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'prsubset'">
-       <xsl:value-of select="'&#8834;'"/>
-      </xsl:when>
-      <xsl:when test="$symbol = 'setdiff'">
-       <xsl:value-of select="'&#47;'"/>
-      </xsl:when>
-     </xsl:choose>
-    </xsl:variable>
-    <xsl:value-of select="$unicodesymbol"/>
-   </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!-- **************************************************************** -->
-<!--                   INLINE MODE                                    -->
-<!-- **************************************************************** -->
-
-<!-- SET -->
-
- <xsl:template mode="inline" match="m:set">
-  <xsl:variable name="uri" select="@definitionURL"/>
-  <xsl:choose>
-   <xsl:when test="count(child::*) = 0">
-    <xsl:call-template name="mksymbol">
-     <xsl:with-param name="symbol" select="'emptyset'"/>
-    </xsl:call-template>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:choose>
-     <xsl:when test="name(*[1]) = 'm:bvar'">
-      <xsl:text>{</xsl:text>
-      <xsl:apply-templates mode="inline" select="m:bvar/m:ci"/>
-      <xsl:text>:</xsl:text>
-      <xsl:apply-templates mode="inline" select="m:bvar/m:type"/>
-      <xsl:text>|</xsl:text>
-      <xsl:apply-templates mode="inline" select="*[position()=2]"/>
-      <xsl:text>}</xsl:text>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:text>{</xsl:text>
-      <xsl:for-each select="*">
-       <xsl:apply-templates mode="inline" select="."/>
-       <xsl:choose>
-        <xsl:when test="position() = last()">
-         <xsl:text>}</xsl:text>
-        </xsl:when>
-        <xsl:otherwise>
-         <xsl:text>,</xsl:text>
-        </xsl:otherwise>
-       </xsl:choose>
-      </xsl:for-each>
-     </xsl:otherwise>
-    </xsl:choose>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:template>
-
-
-<!-- CARD -->
-<xsl:template mode="inline" match="m:apply[m:card]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri">
-   <xsl:value-of select="m:card/@definitionURL"/>
-  </xsl:variable>
-  <xsl:text>|</xsl:text>
-  <xsl:apply-templates mode="inline" select="*[2]"/>
-  <xsl:text>|</xsl:text>
- </xsl:template>
-
-<xsl:template mode="inline" match="m:apply[m:in|m:notin|m:intersect|m:union
-  |m:subset|m:prsubset|m:setdiff]">
-  <xsl:variable name="uri"><xsl:value-of select="*[1]/@definitionURL"/></xsl:variable>
-  <xsl:variable name="symbol">
-   <xsl:choose>
-    <xsl:when test="m:in">
-     <xsl:value-of select="'&#206;'"/>
-    </xsl:when>
-    <xsl:when test="m:notin">
-     <xsl:value-of select="'&#207;'"/>
-    </xsl:when>
-    <xsl:when test="m:intersect">
-     <xsl:value-of select="'&#199;'"/>
-    </xsl:when>
-    <xsl:when test="m:union">
-     <xsl:value-of select="'&#200;'"/>
-    </xsl:when>
-    <xsl:when test="m:subset">
-     <xsl:value-of select="'&#205;'"/>
-    </xsl:when>
-    <xsl:when test="m:prsubset">
-     <xsl:value-of select="'&#204;'"/>
-    </xsl:when>
-    <xsl:when test="m:setdiff">
-     <xsl:value-of select="'/'"/>
-    </xsl:when>
-   </xsl:choose>
-  </xsl:variable>
-  <xsl:text>(</xsl:text>
-  <xsl:apply-templates mode="inline" select="*[2]"/>
-  <xsl:choose>
-  <xsl:when test="$uri != ''">
-   <a href="{$uri}">
-    <xsl:call-template name="mksymbol">
-     <xsl:with-param name="symbol">
-      <xsl:value-of select="local-name(*[1])"/>
-     </xsl:with-param>
-    </xsl:call-template>
-   </a>
-  </xsl:when>
-  <xsl:otherwise>
-    <xsl:call-template name="mksymbol">
-     <xsl:with-param name="symbol">
-      <xsl:value-of select="local-name(*[1])"/>
-     </xsl:with-param>
-    </xsl:call-template>
-  </xsl:otherwise>
-  </xsl:choose>
-  <xsl:apply-templates mode="inline" select="*[3]"/>
-  <xsl:text>)</xsl:text>
- </xsl:template>
-
-<!-- *************************************************************** -->
-
-<xsl:template match="m:apply[m:in|m:notin|m:intersect|m:union
-  |m:subset|m:prsubset|m:setdiff]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri"><xsl:value-of select="*[1]/@definitionURL"/></xsl:variable>
-  <xsl:variable name="charlength">
-   <xsl:apply-templates select="*[1]" mode="charcount"/>
-  </xsl:variable>
-  <xsl:variable name="symbol">
-   <xsl:choose>
-    <xsl:when test="m:in">
-     <xsl:value-of select="'&#206;'"/>
-    </xsl:when>
-    <xsl:when test="m:notin">
-     <xsl:value-of select="'&#207;'"/>
-    </xsl:when>
-    <xsl:when test="m:intersect">
-     <xsl:value-of select="'&#199;'"/>
-    </xsl:when>
-    <xsl:when test="m:union">
-     <xsl:value-of select="'&#200;'"/>
-    </xsl:when>
-    <xsl:when test="m:subset">
-     <xsl:value-of select="'&#205;'"/>
-    </xsl:when>
-    <xsl:when test="m:prsubset">
-     <xsl:value-of select="'&#204;'"/>
-    </xsl:when>
-    <xsl:when test="m:setdiff">
-     <xsl:value-of select="'/'"/>
-    </xsl:when>
-   </xsl:choose>
-  </xsl:variable>
-  <xsl:choose>
-    <xsl:when test="$charlength > $framewidth">
-     <xsl:text>(</xsl:text>
-     <xsl:apply-templates select="*[2]">
-      <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-     </xsl:apply-templates>
-     <BR/> 
-     <xsl:call-template name="make_indent">
-      <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-     </xsl:call-template>
-     <xsl:choose>
-     <xsl:when test="$uri != ''"> 
-      <a href="{$uri}">
-       <xsl:call-template name="mksymbol">
-        <xsl:with-param name="symbol">
-         <xsl:value-of select="local-name(*[1])"/>
-        </xsl:with-param>
-       </xsl:call-template>
-      </a>
-     </xsl:when>
-     <xsl:otherwise>
-       <xsl:call-template name="mksymbol">
-        <xsl:with-param name="symbol">
-         <xsl:value-of select="local-name(*[1])"/>
-        </xsl:with-param>
-       </xsl:call-template>
-     </xsl:otherwise>
-     </xsl:choose> 
-     <xsl:apply-templates select="*[3]">
-      <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-     </xsl:apply-templates>
-     <xsl:text>)</xsl:text>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-templates mode="inline" select="."/>
-    </xsl:otherwise>
-   </xsl:choose>
- </xsl:template>
-
-
-<!-- SET -->
-
- <xsl:template match="m:set">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri" select="@definitionURL"/>
-  <xsl:choose>
-   <xsl:when test="count(child::*) = 0">
-    <xsl:call-template name="mksymbol">
-     <xsl:with-param name="symbol" select="'emptyset'"/>
-    </xsl:call-template>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:variable name="charlength">
-     <xsl:apply-templates select="." mode="charcount"/>
-    </xsl:variable>
-    <xsl:choose>
-     <xsl:when test="$charlength > $framewidth">
-      <xsl:choose>
-       <xsl:when test="name(*[1]) = 'm:bvar'">
-        <xsl:text>{</xsl:text>
-        <xsl:apply-templates select="m:bvar/m:ci"/>
-        <xsl:text>:</xsl:text>
-        <xsl:apply-templates select="m:bvar/m:type">
-         <xsl:with-param name="current_indent" 
-           select="$current_indent + 2 + string-length(m:bvar/m:ci)"/>
-        </xsl:apply-templates><BR/>
-        <xsl:call-template name="make_indent">
-         <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:call-template>
-        <xsl:text>|</xsl:text>
-        <xsl:apply-templates select="m:condition">
-         <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-        </xsl:apply-templates>
-        <xsl:text>}</xsl:text>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:text>{</xsl:text>
-         <xsl:apply-templates select="*[position()=1]">
-          <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-         </xsl:apply-templates>
-         <xsl:for-each select="*[position()>1]">
-          <xsl:text>,</xsl:text>
-          <BR/>
-          <xsl:call-template name="make_indent">
-           <xsl:with-param name="current_indent" select="$current_indent + 2"/> 
-          </xsl:call-template>
-          <xsl:apply-templates select=".">
-           <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-          </xsl:apply-templates>
-         </xsl:for-each>
-        <xsl:text>}</xsl:text>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:apply-templates mode="inline" select="."/>
-     </xsl:otherwise>
-    </xsl:choose>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:template> 
-
-<!-- CARD -->
-<xsl:template match="m:apply[m:card]">
-  <xsl:param name="current_indent" select="0"/> 
-  <xsl:param name="width" select="$framewidth"/>
-  <xsl:variable name="uri">
-   <xsl:value-of select="m:card/@definitionURL"/>
-  </xsl:variable>
-  <xsl:text>|</xsl:text>
-  <xsl:apply-templates select="*[2]">
-   <xsl:with-param name="current_indent" select="$current_indent + 2"/>
-  </xsl:apply-templates>
-  <xsl:text>|</xsl:text>
- </xsl:template>
-
-<!-- COUNTING -->
-
-<xsl:template match="m:in|m:notin|m:intersect|m:union
-           |m:subset|m:prsubset|m:setdiff|m:card" mode="charcount">
-<xsl:param name="incurrent_length" select="0"/> 
-    <xsl:choose>
-    <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
-     <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length + string-length()"/></xsl:apply-templates></xsl:variable>
-     <xsl:choose>
-     <xsl:when test="string($siblength) = &quot;&quot;">
-      <xsl:value-of select="$incurrent_length + string-length()"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="$incurrent_length + string-length()"/>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template> 
-
-</xsl:stylesheet> 
diff --git a/helm/style/inductive.xsl b/helm/style/inductive.xsl
deleted file mode 100644 (file)
index 83569d7..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--******************************************************************--> 
-<!-- XSLT version 0.1 of CIC inductive objects to MathML content:     -->
-<!-- First draft: March 2001, Andrea asperti                          -->
-<!--******************************************************************-->
-
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-
-<xsl:template mode="inductive" match="APPLY">
- <xsl:param name="inductive_def_uri" select="''"/>
- <xsl:param name="inductive_def" select="/.."/>
- <xsl:param name="inductive_def_index" select="1"/>
- <xsl:param name="inductive_def_name" select="''"/>
- <xsl:param name="section_params" select="0"/>
- <!-- expected_args_type contains the types of the arguments expected by
-      the induction principle -->
- <xsl:variable name="InductiveTypeUrl"><xsl:call-template name="URLofURI4getter"><xsl:with-param name="uri" select="*[1]/@uri"/></xsl:call-template></xsl:variable>
- <xsl:variable name="expected_args_types" 
-       select="document($InductiveTypeUrl)/Definition/type//PROD[not(ancestor::source)]/source/*[1]"/>
- <xsl:variable name="no_expected_args" select="count($expected_args_types)"/>
- <xsl:variable name="actual_arguments" select="*[position()>(1+$section_params)]"/>
- <!-- First check that the induction principle is applied to the
-      expected number of arguments -->
- <xsl:choose>
-  <xsl:when test="$no_expected_args = count($actual_arguments)">
-   <!-- Now check that each actual argument starts with the
-        expected number of lambda abstractions -->
-   <xsl:variable name="argsOK"> 
-    <xsl:call-template name="check_args">
-     <xsl:with-param name="arg_types" select="$expected_args_types"/>
-     <xsl:with-param name="actual_args" select="$actual_arguments"/>
-    </xsl:call-template>
-   </xsl:variable>
-   <xsl:choose>
-    <!-- il semplice test $argsOK non funziona -->
-    <xsl:when test="string($argsOK) = 'true'">
-     <!-- arguments are in the expected form: we create a
-          "by_induction" content element -->
-     <!-- no_params is the number of paramters in square brackets -->
-     <xsl:variable name="no_params" 
-      select="$inductive_def/@noParams"/>
-     <!-- the inductive property is the first argument following
-          the parameters  -->
-     <xsl:variable name="inductive_property" 
-               select="$actual_arguments[1 + $no_params]"/>
-     <xsl:variable name="tail_args" 
-      select="$actual_arguments[position()> (1 + $no_params)]"/>
-     <!-- inductive_type contains the right inductive type in the
-          mutual inductive definition -->
-     <xsl:variable name="inductive_type" 
-      select="$inductive_def/InductiveType[position()=$inductive_def_index]"/>
-     <xsl:variable name="no_constructors" 
-      select="count($inductive_type/Constructor)"/>
-     <!-- each case has a single argument -->
-     <xsl:variable name="args_for_cases" 
-      select="$tail_args[($no_constructors + 1) > position()]"/>
-     <!-- extra_args contains the remaining arguments; the LAST one
-          of them is the argument we are inductively arguing on -->
-     <xsl:variable name="extra_args" 
-      select="$tail_args[position()> $no_constructors]"/>
-     <m:apply>
-      <m:csymbol>by_induction</m:csymbol>
-      <!-- the first (i.e. second) argument of by_induction
-           is the uri of the inductive definition -->
-      <m:ci><xsl:value-of select="$inductive_def_uri"/></m:ci>
-      <!-- next, we have the inductive property, currently not
-           used for rendering (it could be omitted??) -->
-      <xsl:apply-templates mode="pure" select="$inductive_property"/>
-      <!-- each case has its own "inductive_case" element -->
-      <!-- the inductive case element is composed by:
-           * "case_lhs" element, containing the constructor name applied
-              to its arguments. The arguments are abstraction variables
-              (with types) got form the initial lambdas of the argument
-              for the case.
-           * "induction_hypothesis" element, containg the induction 
-              hypothesis. Again, these are abstraction variables
-              (with types) got form the initial lambdas of the argument
-              for the case.
-           * body of the case, without specific markup.
-       -->
-      <xsl:for-each select="$inductive_type/Constructor">
-       <xsl:variable name="pos" select="position()"/>
-       <xsl:variable name="current_arg" 
-                     select="$args_for_cases[position()=$pos]"/>
-       <m:apply>
-        <m:csymbol>inductive_case</m:csymbol>
-        <m:apply>
-         <m:csymbol>case_lhs</m:csymbol>
-         <m:ci definitionURL="{$inductive_def_uri}">
-          <xsl:value-of select="@name"/>
-         </m:ci>     
-         <xsl:call-template name="get_constructor_args">
-          <xsl:with-param name="no_params" 
-               select="$no_params"/>
-          <xsl:with-param name="constructor_arity" 
-               select="*[1]"/>
-          <xsl:with-param name="actual_arg" 
-               select="$current_arg"/>
-          <xsl:with-param name="inductive_def_name" 
-               select="$inductive_def_name"/>
-          </xsl:call-template>
-        </m:apply>
-        <m:apply>
-         <m:csymbol>induction_hypothesis</m:csymbol>
-         <xsl:call-template name="get_induction_hypothesis">
-          <xsl:with-param name="no_params" 
-               select="$no_params"/>
-          <xsl:with-param name="constructor_arity" 
-               select="*[1]"/>
-          <xsl:with-param name="actual_arg" 
-               select="$current_arg"/>
-          <xsl:with-param name="inductive_def_name" 
-               select="$inductive_def_name"/>
-         </xsl:call-template>
-        </m:apply>
-        <xsl:call-template name="get_body">
-         <xsl:with-param name="no_params" 
-               select="$no_params"/>
-         <xsl:with-param name="constructor_arity" 
-               select="*[1]"/>
-         <xsl:with-param name="actual_arg" select="$current_arg"/>
-         <xsl:with-param name="inductive_def_name" 
-               select="$inductive_def_name"/>
-        </xsl:call-template>
-       </m:apply>
-      </xsl:for-each>
-      <!-- the inductive argument is the last argument of extra-args -->
-      <m:apply>
-       <m:csymbol>extra_args</m:csymbol>
-       <xsl:apply-templates mode="pure" select="$extra_args"/>
-      </m:apply>
-     </m:apply>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-templates mode="letin" select="."/>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:apply-templates mode="letin" select="."/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- check_args checks that the number of lambda abstractions
-     of each actual parameter is GREATER OR EQUAL to the number
-     or products of the corresponding formal parameter of the
-     induction principles. That is, that each argument is 
-     sufficiently eta-expanded.
-     If this is not the case, not good rendering looks possible.
-     Check_args returns a boolean. 
-   -->
-<xsl:template name="check_args">
- <xsl:param name="arg_types" select="/.."/>
- <xsl:param name="actual_args" select="/.."/>
- <xsl:param name="bool_var" select="true()"/>
- <xsl:choose>
-  <xsl:when test="count($arg_types) = 0">
-    <xsl:value-of select="$bool_var"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:variable name="no_expected_arg_of_arg">
-    <xsl:apply-templates mode="count_arity" select="$arg_types[1]">
-     <xsl:with-param name="what" select="'PROD'"/>
-    </xsl:apply-templates>
-   </xsl:variable>
-   <xsl:variable name="no_actual_abst_of_arg"> 
-    <xsl:apply-templates mode="count_arity" select="$actual_args[1]">
-     <xsl:with-param name="what" select="'LAMBDA'"/>
-    </xsl:apply-templates>
-   </xsl:variable>
-   <!-- REPLACE WITH EQUALITY ???? -->
-   <xsl:variable name="test_arg" 
-    select="$no_actual_abst_of_arg >= $no_expected_arg_of_arg"/> 
-   <xsl:call-template name="check_args">
-    <xsl:with-param name="arg_types" select="$arg_types[position()>1]"/>
-    <xsl:with-param name="actual_args" select="$actual_args[position()>1]"/>
-    <xsl:with-param name="bool_var" select="($bool_var and $test_arg)"/>
-   </xsl:call-template> 
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- count_arity counts the number of head lambda (or prod) -->
-<xsl:template mode="count_arity" match="*">
- <xsl:param name="what" select="'LAMBDA'"/>
- <xsl:param name="num" select="0"/>
- <!-- MANCANO I CAST ??? -->
- <xsl:choose>
-  <xsl:when test="name(.) = $what">
-   <xsl:apply-templates mode="count_arity" select="target/*[1]">
-    <xsl:with-param name="what" select="$what"/>
-    <xsl:with-param name="num" select="$num+1"/>
-   </xsl:apply-templates>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="$num"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- The following three functions are essentially identical
-     in their recursive structure.
-     The problem is that of decomposing an actual argument for
-     a case in three parts: 
-     * constructor variables
-     * induction hypothesis
-     * body
-     To this aim we must proceed in parallel with the type of
-     the constructor: if the type contains a prod, then the 
-     the corresponding lambda of the argument provides the 
-     constructor variable. Moreover, if the source type of the
-     prod contains a reference to the inductive type, it is a
-     recursive argument and the NEXT lambda of the argument 
-     provides an induction hypothesis.
-     Unfortunately the three functions cannot be merged into a
-     single one without a conversion from document tree fragments
-     to node-sets. 
--->
-<xsl:template name="get_constructor_args">
- <xsl:param name="no_params" select="0"/>
- <xsl:param name="constructor_arity" select="/.."/>
- <xsl:param name="actual_arg" select="/.."/>
- <xsl:param name="inductive_def_name" select="''"/>
- <xsl:choose>
- <xsl:when test="$no_params = 0">
- <xsl:if test="name($constructor_arity)='PROD'">
-  <m:bvar>
-   <m:ci><xsl:value-of select="$actual_arg/target/@binder"/></m:ci>
-   <m:type>
-    <xsl:apply-templates mode="pure" select="$actual_arg/source/*[1]"/>
-   </m:type> 
-  </m:bvar>
-  <xsl:choose>
-   <xsl:when test="$constructor_arity/source//REL[@binder=$inductive_def_name]">
-    <xsl:call-template name="get_constructor_args">
-    <xsl:with-param name="constructor_arity" 
-        select="$constructor_arity/target/*[1]"/>
-    <xsl:with-param name="actual_arg" 
-        select="$actual_arg/target/LAMBDA/target/*[1]"/>
-    <xsl:with-param name="inductive_def_name" 
-               select="$inductive_def_name"/>
-    </xsl:call-template>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:call-template name="get_constructor_args">
-    <xsl:with-param name="constructor_arity" 
-        select="$constructor_arity/target/*[1]"/>
-    <xsl:with-param name="actual_arg" 
-        select="$actual_arg/target/*[1]"/>
-    <xsl:with-param name="inductive_def_name" 
-               select="$inductive_def_name"/>
-    </xsl:call-template>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
-  <xsl:call-template name="get_constructor_args">
-    <xsl:with-param name="no_params" select="$no_params - 1"/>
-    <xsl:with-param name="constructor_arity" 
-        select="$constructor_arity/target/*[1]"/>
-    <xsl:with-param name="actual_arg" 
-        select="$actual_arg"/>
-    <xsl:with-param name="inductive_def_name" 
-               select="$inductive_def_name"/>
-    </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template name="get_induction_hypothesis">
- <xsl:param name="no_params" select="0"/>
- <xsl:param name="constructor_arity" select="/.."/>
- <xsl:param name="actual_arg" select="/.."/>
- <xsl:param name="inductive_def_name" select="''"/>
- <xsl:choose>
- <xsl:when test="$no_params = 0">
- <xsl:if test="name($constructor_arity)='PROD'">
-  <xsl:choose>
-   <xsl:when test="$constructor_arity/source//REL[@binder=$inductive_def_name]">
-    <m:bvar>
-     <m:ci>
-      <xsl:value-of select="$actual_arg/target/LAMBDA/target/@binder"/>
-     </m:ci>
-     <m:type>
-      <xsl:apply-templates mode="pure" 
-           select="$actual_arg/target/LAMBDA/source"/>
-     </m:type>
-    </m:bvar>
-    <xsl:call-template name="get_induction_hypothesis">
-    <xsl:with-param name="constructor_arity" 
-        select="$constructor_arity/target/*[1]"/>
-    <xsl:with-param name="actual_arg" 
-        select="$actual_arg/target/LAMBDA/target/*[1]"/>
-    <xsl:with-param name="inductive_def_name" 
-               select="$inductive_def_name"/>
-    </xsl:call-template>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:call-template name="get_induction_hypothesis">
-    <xsl:with-param name="constructor_arity" 
-        select="$constructor_arity/target/*[1]"/>
-    <xsl:with-param name="actual_arg" 
-        select="$actual_arg/target/*[1]"/>
-    <xsl:with-param name="inductive_def_name" 
-               select="$inductive_def_name"/>
-    </xsl:call-template>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
-  <xsl:call-template name="get_induction_hypothesis">
-    <xsl:with-param name="no_params" select="$no_params - 1"/>
-    <xsl:with-param name="constructor_arity" 
-        select="$constructor_arity/target/*[1]"/>
-    <xsl:with-param name="actual_arg" 
-        select="$actual_arg"/>
-    <xsl:with-param name="inductive_def_name" 
-               select="$inductive_def_name"/>
-    </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template name="get_body">
- <xsl:param name="no_params" select="0"/>
- <xsl:param name="constructor_arity" select="/.."/>
- <xsl:param name="actual_arg" select="/.."/>
- <xsl:param name="inductive_def_name" select="''"/>
- <xsl:choose>
- <xsl:when test="$no_params = 0">
- <xsl:choose>
- <xsl:when test="name($constructor_arity)='PROD'">
-  <xsl:choose>
-   <xsl:when test="$constructor_arity/source//REL[@binder=$inductive_def_name]">
-    <xsl:call-template name="get_body">
-    <xsl:with-param name="constructor_arity" 
-        select="$constructor_arity/target/*[1]"/>
-    <xsl:with-param name="actual_arg" 
-        select="$actual_arg/target/LAMBDA/target/*[1]"/>
-    <xsl:with-param name="inductive_def_name" 
-               select="$inductive_def_name"/>
-    </xsl:call-template>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:call-template name="get_body">
-    <xsl:with-param name="constructor_arity" 
-        select="$constructor_arity/target/*[1]"/>
-    <xsl:with-param name="actual_arg" 
-        select="$actual_arg/target/*[1]"/>
-    <xsl:with-param name="inductive_def_name" 
-               select="$inductive_def_name"/>
-    </xsl:call-template>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
-  <xsl:apply-templates mode="noannot" select="$actual_arg"/>
- </xsl:otherwise> 
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
-  <xsl:call-template name="get_body">
-    <xsl:with-param name="no_params" select="$no_params - 1"/>
-    <xsl:with-param name="constructor_arity" 
-        select="$constructor_arity/target/*[1]"/>
-    <xsl:with-param name="actual_arg" 
-        select="$actual_arg"/>
-    <xsl:with-param name="inductive_def_name" 
-               select="$inductive_def_name"/>
-    </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/lambda.xsl b/helm/style/lambda.xsl
deleted file mode 100644 (file)
index 28c876f..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--******************************************************************--> 
-<!-- Lambda Calculus                                                  -->
-<!-- First draft: March 20 2001, Andrea Asperti                       -->
-<!--******************************************************************-->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-<!-- ************************** LAMBDA ****************************** -->
-
-<!-- subst -->
-<xsl:template match="APPLY[CONST[(attribute::uri='cic:/Rocq/LAMBDA/Terms/subst_rec.con' or attribute::uri='cic:/Rocq/LAMBDA/Substitution/subst_rec_r.con')] and count(child::*) = 4]" mode="pure">
-       <m:apply>
-         <m:csymbol definitionURL="{CONST/@uri}">subst</m:csymbol>
-         <xsl:apply-templates select="*[3]" mode="pure"/>
-         <xsl:apply-templates select="*[2]" mode="pure"/>
-         <xsl:apply-templates select="*[4]" mode="pure"/>
-        </m:apply>
-</xsl:template>
-
-<xsl:template match="APPLY[CONST[(attribute::uri='cic:/Rocq/LAMBDA/Terms/subst.con' or attribute::uri='cic:/Rocq/LAMBDA/Substitution/subst_r.con')] and count(child::*) = 3]" mode="pure">
-       <m:apply>
-         <m:csymbol definitionURL="{CONST/@uri}">subst</m:csymbol>
-         <xsl:apply-templates select="*[2]" mode="pure"/>
-         <xsl:apply-templates select="*[3]" mode="pure"/>
-         <m:ci>0</m:ci>
-        </m:apply>
-</xsl:template>
-
-<!-- lift -->
-<xsl:template match="APPLY[CONST[(attribute::uri='cic:/Rocq/LAMBDA/Terms/lift_rec.con' or attribute::uri='cic:/Rocq/LAMBDA/Substitution/lift_rec_r.con')] and count(child::*) = 4]" mode="pure">
-       <m:apply>
-         <m:csymbol definitionURL="{CONST/@uri}">lift_with_base</m:csymbol>
-         <xsl:apply-templates select="*[2]" mode="pure"/>
-         <xsl:apply-templates select="*[3]" mode="pure"/>
-         <xsl:apply-templates select="*[4]" mode="pure"/>
-        </m:apply>
-</xsl:template>
-
-<xsl:template match="APPLY[CONST[(attribute::uri='cic:/Rocq/LAMBDA/Terms/lift.con' or attribute::uri='cic:/Rocq/LAMBDA/Substitution/lift_r.con')] and count(child::*) = 3]" mode="pure">
-       <m:apply>
-         <m:csymbol definitionURL="{CONST/@uri}">lift</m:csymbol>
-         <xsl:apply-templates select="*[2]" mode="pure"/>
-         <xsl:apply-templates select="*[3]" mode="pure"/>
-        </m:apply>
-</xsl:template>
-
-<!-- reduction -->
-<xsl:template match="APPLY[MUTIND[(position()='1' and attribute::uri='cic:/Rocq/LAMBDA/Reduction/red1.ind')] and count(child::*) = 3]" mode="pure">
-       <m:apply>
-         <m:csymbol definitionURL="{MUTIND/@uri}">beta_red1</m:csymbol>
-         <xsl:apply-templates select="*[2]" mode="pure"/>
-         <xsl:apply-templates select="*[3]" mode="pure"/>
-        </m:apply>
-</xsl:template>
-
-<xsl:template match="APPLY[MUTIND[(position()='1' and attribute::uri='cic:/Rocq/LAMBDA/Reduction/red.ind')] and count(child::*) = 3]" mode="pure">
-       <m:apply>
-         <m:csymbol definitionURL="{MUTIND/@uri}">beta_red</m:csymbol>
-         <xsl:apply-templates select="*[2]" mode="pure"/>
-         <xsl:apply-templates select="*[3]" mode="pure"/>
-        </m:apply>
-</xsl:template>
-
-<xsl:template match="APPLY[MUTIND[(position()='1' and attribute::uri='cic:/Rocq/LAMBDA/Reduction/par_red1.ind')] and count(child::*) = 3]" mode="pure">
-       <m:apply>
-         <m:csymbol definitionURL="{MUTIND/@uri}">par_beta_red1</m:csymbol>
-         <xsl:apply-templates select="*[2]" mode="pure"/>
-         <xsl:apply-templates select="*[3]" mode="pure"/>
-        </m:apply>
-</xsl:template>
-
-<xsl:template match="APPLY[MUTIND[(position()='1' and attribute::uri='cic:/Rocq/LAMBDA/Reduction/par_red.ind')] and count(child::*) = 3]" mode="pure">
-       <m:apply>
-         <m:csymbol definitionURL="{MUTIND/@uri}">par_beta_red</m:csymbol>
-         <xsl:apply-templates select="*[2]" mode="pure"/>
-         <xsl:apply-templates select="*[3]" mode="pure"/>
-        </m:apply>
-</xsl:template>
-
-<!-- unmark -->
-
-<xsl:template match="APPLY[CONST[(position()='1' and attribute::uri='cic:/Rocq/LAMBDA/Marks/unmark.con')] and count(child::*) = 2]" mode="pure">
-       <m:apply>
-         <m:csymbol definitionURL="{CONST/@uri}">forgetful</m:csymbol>
-         <xsl:apply-templates select="*[2]" mode="pure"/>
-        </m:apply>
-</xsl:template>
-
-<!-- boolean algebra of redexes -->
-
-<xsl:template match="APPLY[MUTIND[(position()='1' and attribute::uri='cic:/Rocq/LAMBDA/Redexes/sub.ind')] and count(child::*) = 3]" mode="pure">
-       <m:apply>
-         <m:subset definitionURL="{MUTIND/@uri}"/>
-         <xsl:apply-templates select="*[2]" mode="pure"/>
-         <xsl:apply-templates select="*[3]" mode="pure"/>
-        </m:apply>
-</xsl:template>
-
-<xsl:template match="APPLY[MUTIND[(position()='1' and attribute::uri='cic:/Rocq/LAMBDA/Redexes/union.ind')] and count(child::*) = 4]" mode="pure">
-       <m:apply>
-         <m:eq definitionURL="{MUTIND/@uri}"/>
-         <m:apply>
-          <m:union definitionURL="{MUTIND/@uri}"/>
-          <xsl:apply-templates select="*[2]" mode="pure"/>
-          <xsl:apply-templates select="*[3]" mode="pure"/>
-         </m:apply>
-         <xsl:apply-templates select="*[4]" mode="pure"/>
-        </m:apply>
-</xsl:template>
-
-<xsl:template match="APPLY[MUTIND[(position()='1' and attribute::uri='cic:/Rocq/LAMBDA/Redexes/comp.ind')] and count(child::*) = 3]" mode="pure">
-       <m:apply>
-         <m:csymbol definitionURL="{MUTIND/@uri}">isomorphic</m:csymbol>
-         <xsl:apply-templates select="*[2]" mode="pure"/>
-         <xsl:apply-templates select="*[3]" mode="pure"/>
-        </m:apply>
-</xsl:template>
-
-<xsl:template match="APPLY[MUTIND[(position()='1' and attribute::uri='cic:/Rocq/LAMBDA/Residuals/residuals.ind')] and count(child::*) = 4]" mode="pure">
-       <m:apply>
-         <m:eq definitionURL="{MUTIND/@uri}"/>
-         <m:apply>
-          <m:setdiff definitionURL="{MUTIND/@uri}"/>
-          <xsl:apply-templates select="*[2]" mode="pure"/>
-          <xsl:apply-templates select="*[3]" mode="pure"/>
-         </m:apply>
-         <xsl:apply-templates select="*[4]" mode="pure"/>
-        </m:apply>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/link.xsl b/helm/style/link.xsl
deleted file mode 100644 (file)
index e3568a1..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm"
-                              xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!--***********************************************************************--> 
-<!-- From MathML presentation or HTML to themselves with links             -->
-<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena                      -->
-<!-- First draft: March 16 2001, Irene Schena                              -->
-<!--***********************************************************************--> 
-
-<xsl:import href="links_library.xsl"/>
-
-<xsl:key name="id" use="@id" match="m:*"/>
-
-<xsl:template match = "m:semantics">
-   <xsl:apply-templates select="*[1]" mode="semantics"/>
-</xsl:template>
-
-<!-- Discharging content markup mantaining the linking info (helm:xref and 
-xlink:href) -->
-<xsl:template match = "*" mode="semantics">
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:if test="@xref">
-    <xsl:variable name="cnode" select="key('id',@xref)"/>
-    <xsl:if test="$cnode/@definitionURL"> 
-     <xsl:attribute name="xlink:href">
-      <xsl:call-template name="makeURL"><xsl:with-param name="uri" select="$cnode/@definitionURL"/></xsl:call-template>
-     </xsl:attribute>
-    <!-- xlink:show='other' requires the exact modality to be -->
-    <!-- specified in non-xlink markup. The point is that the -->
-    <!-- element is already MathML ==> we can't add other     -->
-    <!-- markup without introducing another new namespace.    -->
-    <!-- So, for now no markup is used.                       -->
-     <xsl:attribute name="xlink:show">other</xsl:attribute>
-    </xsl:if>
-    <xsl:if test="$cnode/@helm:xref">
-     <xsl:attribute name="helm:xref">
-      <xsl:value-of select="$cnode/@helm:xref"/>
-     </xsl:attribute>
-    </xsl:if> 
-   </xsl:if>
-   <xsl:apply-templates mode="semantics"/>
-  </xsl:copy>
-</xsl:template>
-
-<!-- _top to refresh the whole frameset (avoids the matrioska effect ;-) -->
-<!-- a[@href] doesn't match with every anchor elements!!!                -->
-<xsl:template match="*[@href]">
-   <xsl:copy>
-    <xsl:copy-of select="@*"/> 
-    <xsl:choose>
-    <xsl:when test="starts-with(@href,&quot;cic:&quot;)">
-     <xsl:attribute name="href">
-      <xsl:call-template name="makeURL">
-       <xsl:with-param name="uri" select="@href"/>
-      </xsl:call-template>
-     </xsl:attribute>
-     <xsl:attribute name="target">cic</xsl:attribute>
-    </xsl:when>
-    <xsl:when test="starts-with(@href,&quot;theory:&quot;)">
-     <xsl:attribute name="href">
-      <xsl:call-template name="makeTheoryURL">
-       <xsl:with-param name="uri" select="@href"/>
-      </xsl:call-template>
-     </xsl:attribute>
-     <xsl:attribute name="target">theory</xsl:attribute>
-    </xsl:when>
-    <xsl:when test="starts-with(@href,&quot;#&quot;)">
-     <xsl:attribute name="href"><xsl:value-of  select="@href"/></xsl:attribute>
-     <xsl:if test="@target">
-      <xsl:attribute name="target"><xsl:value-of select="@target"/></xsl:attribute>
-     </xsl:if>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:attribute name="href"><xsl:value-of  select="@href"/></xsl:attribute>
-     <xsl:attribute name="target">_blank</xsl:attribute>
-    </xsl:otherwise>
-    </xsl:choose>
-    <xsl:apply-templates/>
-   </xsl:copy>
-</xsl:template>
-
-<xsl:template match = "/|*">
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:apply-templates/>
-  </xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet> 
diff --git a/helm/style/links_library.xsl b/helm/style/links_library.xsl
deleted file mode 100644 (file)
index 22e0ac4..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!--***********************************************************************--> 
-<!-- auxiliary functions                                                   -->
-<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena                      -->
-<!--***********************************************************************--> 
-
-<!--      * is used for objects                      -->
-<!--    th* is used for theories                     -->
-<!-- embed* is used for objects embedded in theories -->
-
-<xsl:param name="getterURL" select="'http://localhost:8081/'"/>
-<xsl:param name="processorURL" select="'http://localhost:8080/helm/servlet/uwobo/'"/>
-<xsl:param name="draw_graphURL" select="'http://localhost:8083/'"/>
-<xsl:param name="uri_set_queueURL" select="'http://localhost:8084/'"/>
-<xsl:param name="proofcheckerURL" select="'http://localhost:48084/'"/>
-<!-- URL to the frameset (control + output) -->
-<xsl:param name="topurl" select="''"/>
-<xsl:param name="interfaceURL" select="''"/>
-<xsl:param name="thinterfaceURL" select="''"/>
-
-<xsl:param name="keys" select="'C1,HC2,L'"/>
-<xsl:param name="embedkeys" select="'TC1,HC2,L'"/>
-<xsl:param name="thkeys" select="'T1,T2,L,E'"/>
-
-<xsl:param name="naturalLanguage" select="'yes'"/>
-<xsl:param name="annotations" select="'no'"/>
-<xsl:param name="UNICODEvsSYMBOL" select="'symbol'"/>
-
-<xsl:param name="media-type" select="'text/html'"/>
-<xsl:param name="thmedia-type" select="'text/html'"/>
-<xsl:param name="doctype-public" select="'-//W3C//DTD XHTML 1.0 Transitional//EN'"/>
-<xsl:param name="encoding" select="'iso-8859-1'"/>
-<xsl:param name="thencoding" select="'iso-8859-1'"/>
-
-
-<xsl:template name="quote">
- <xsl:param name="s" select="''"/>
- <xsl:param name="news" select="''"/>
- <xsl:choose>
-  <xsl:when test="$s = ''"><xsl:value-of select="$news"/></xsl:when>
-  <xsl:otherwise>
-   <xsl:variable name="char" select="substring($s,1,1)"/>
-   <xsl:choose>
-    <xsl:when test="$char = ' '">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%20')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = '&amp;'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%26')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = '?'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%3F')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = '='">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%3D')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = '%'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%25')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = ','">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%2C')"/>
-     </xsl:call-template>
-    </xsl:when>
-<!--CSC: This breaks all the rest ;-)
-    <xsl:when test="$char = ':'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%3A')"/>
-     </xsl:call-template>
-    </xsl:when>
--->
-    <xsl:otherwise>
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,$char)"/>
-     </xsl:call-template>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:variable name="absPath">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s"><xsl:value-of select="$getterURL"/>getxml?uri=</xsl:with-param>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="escaped-doctype-public">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$doctype-public"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="escaped-processorURL">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$processorURL"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="escaped-getterURL">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$getterURL"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="escaped-interfaceURL">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$interfaceURL"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="escaped-topurl">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$topurl"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="escaped-thinterfaceURL">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$thinterfaceURL"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedthkeys">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$thkeys"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedembedkeys">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$embedkeys"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedkeys">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$keys"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedquotedkeys">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$quotedkeys"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedquotedthkeys">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$quotedthkeys"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedquotedembedkeys">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$quotedembedkeys"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="header0"><xsl:value-of select="$interfaceURL"/>?url=</xsl:variable>
-<xsl:variable name="thheader0"><xsl:value-of select="$thinterfaceURL"/>?url=</xsl:variable>
-<xsl:variable name="header1"><xsl:value-of select="$escaped-processorURL"/>apply?keys=</xsl:variable>
-<xsl:variable name="bothheader2">&#x26;param.naturalLanguage=<xsl:value-of select="$naturalLanguage"/>&#x26;param.proofcheckerURL=<xsl:value-of select="$proofcheckerURL"/>&#x26;param.draw_graphURL=<xsl:value-of select="$draw_graphURL"/>&#x26;param.uri_set_queueURL=<xsl:value-of select="$uri_set_queueURL"/>&#x26;param.UNICODEvsSYMBOL=<xsl:value-of select="$UNICODEvsSYMBOL"/>&#x26;param.annotations=<xsl:value-of select="$annotations"/>&#x26;prop.doctype-public=<xsl:value-of select="$escaped-doctype-public"/>&#x26;param.doctype-public=<xsl:value-of select="$escaped-doctype-public"/>&#x26;param.encoding=<xsl:value-of select="$encoding"/>&#x26;param.media-type=<xsl:value-of select="$media-type"/>&#x26;param.keys=<xsl:value-of select="$quotedkeys"/>&#x26;param.getterURL=<xsl:value-of select="$escaped-getterURL"/>&#x26;param.processorURL=<xsl:value-of select="$escaped-processorURL"/>&#x26;param.interfaceURL=<xsl:value-of select="$escaped-interfaceURL"/>&#x26;param.topurl=<xsl:value-of select="$escaped-topurl"/>&#x26;xmluri=<xsl:value-of select="$absPath"/></xsl:variable>
-<xsl:variable name="header2">&#x26;prop.media-type=<xsl:value-of select="$media-type"/>&#x26;prop.encoding=<xsl:value-of select="$encoding"/></xsl:variable>
-<xsl:variable name="thheader2">&#x26;prop.media-type=<xsl:value-of select="$thmedia-type"/>&#x26;param.thmedia-type=<xsl:value-of select="$thmedia-type"/>&#x26;param.thkeys=<xsl:value-of select="$quotedthkeys"/>&#x26;param.embedkeys=<xsl:value-of select="$quotedembedkeys"/>&#x26;param.thinterfaceURL=<xsl:value-of select="$escaped-thinterfaceURL"/>&#x26;param.thencoding=<xsl:value-of select="$thencoding"/>&#x26;prop.encoding=<xsl:value-of select="$thencoding"/></xsl:variable>
-
-<xsl:variable name="quotedheader1">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$header1"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedbothheader2">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$bothheader2"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedheader2">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$header2"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:variable name="quotedthheader2">
- <xsl:call-template name="quote">
-  <xsl:with-param name="s" select="$thheader2"/>
- </xsl:call-template>
-</xsl:variable>
-
-<!-- makeURL() maps URIs into URLs               -->
-<!-- The target of the URL is the whole frameset -->
-
-<xsl:variable name="biquotedfixedheader">
- <xsl:value-of select="$header0"/>
- <xsl:value-of select="$quotedheader1"/>
- <xsl:value-of select="$quotedquotedkeys"/>
- <xsl:value-of select="$quotedheader2"/>
- <xsl:value-of select="$quotedbothheader2"/>
-</xsl:variable>
-
-<xsl:variable name="biquotedthfixedheader">
- <xsl:value-of select="$thheader0"/>
- <xsl:value-of select="$quotedheader1"/>
- <xsl:value-of select="$quotedquotedthkeys"/>
- <xsl:value-of select="$quotedthheader2"/>
- <xsl:value-of select="$quotedbothheader2"/>
-</xsl:variable>
-
-<!-- NOTE: embedkeys and thkeys are propagated, but we are sure that -->
-<!-- they won't never be used.                                       -->
-<!--CSC: fixare il punto sopra!!! -->
-<!-- type, instead, is not propagated                                -->
-<xsl:template name="makeURL">
-<xsl:param name="uri" select="''"/>
- <xsl:variable name="uri_after_sharp" select="substring-after($uri,'#')"/>
- <xsl:variable name="cleanuri">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">
-    <xsl:value-of select="substring-before($uri,'#')"/>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:value-of select="$uri"/>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <xsl:variable name="sharpsuffix">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">%23<xsl:value-of select="$uri_after_sharp"/></xsl:when>
-   <xsl:otherwise></xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
-     <xsl:value-of select="$biquotedfixedheader"/>
-     <xsl:value-of select="$cleanuri"/>%26param.CICURI%3D<xsl:value-of select="$cleanuri"/>
-     <xsl:value-of select="$sharpsuffix"/>
-</xsl:template>
-
-<xsl:template name="makeTheoryURL">
-<xsl:param name="uri" select="''"/>
- <xsl:variable name="uri_after_sharp" select="substring-after($uri,'#')"/>
- <xsl:variable name="cleanuri">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">
-    <xsl:value-of select="substring-before($uri,'#')"/>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:value-of select="$uri"/>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <xsl:variable name="sharpsuffix">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">%23<xsl:value-of select="$uri_after_sharp"/></xsl:when>
-   <xsl:otherwise></xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
-     <xsl:value-of select="$biquotedthfixedheader"/>
-     <xsl:value-of select="$cleanuri"/>%26param.CICURI%3D<xsl:value-of select="$cleanuri"/>
-     <xsl:value-of select="$sharpsuffix"/>
-</xsl:template>
-
-<!-- makeURL4embedding() maps URIs into URLs              -->
-<!-- The target of the URL is only the processed document -->
-
-<xsl:template name="makeURL4embedding">
-<xsl:param name="uri" select="''"/>
-<xsl:param name="type" select="'standalone'"/>
- <xsl:variable name="uri_after_sharp" select="substring-after($uri,'#')"/>
- <xsl:variable name="cleanuri">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">
-    <xsl:value-of select="substring-before($uri,'#')"/>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:value-of select="$uri"/>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <xsl:variable name="sharpsuffix">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">%23<xsl:value-of select="$uri_after_sharp"/></xsl:when>
-   <xsl:otherwise></xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <xsl:value-of select="$header1"/>
- <xsl:value-of select="$quotedembedkeys"/>
- <xsl:value-of select="$header2"/>
- <xsl:value-of select="$bothheader2"/>
- <xsl:value-of select="$cleanuri"/>&#x26;param.CICURI=<xsl:value-of select="$cleanuri"/>&#x26;param.type=<xsl:value-of select="$type"/><xsl:value-of select="$sharpsuffix"/>
-</xsl:template>
-
-<!-- makeURL4InnerTypes() maps URIs into URLs              -->
-<!-- The target of the URL is only the processed document -->
-
-<xsl:template name="makeURL4InnerTypes">
-<xsl:param name="uri" select="''"/>
- <xsl:variable name="uri_after_sharp" select="substring-after($uri,'#')"/>
- <xsl:variable name="cleanuri">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">
-    <xsl:value-of select="substring-before($uri,'#')"/>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:value-of select="$uri"/>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <xsl:variable name="sharpsuffix">
-  <xsl:choose>
-   <xsl:when test="$uri_after_sharp">%23<xsl:value-of select="$uri_after_sharp"/></xsl:when>
-   <xsl:otherwise></xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
- <xsl:value-of select="$header1"/>d_c&#x26;param.getterURL=<xsl:value-of select="$escaped-getterURL"/>&#x26;param.CICURI=<xsl:value-of select="$cleanuri"/>&#x26;xmluri=<xsl:value-of select="$absPath"/><xsl:value-of select="$cleanuri"/>
- <xsl:value-of select="$sharpsuffix"/>
-</xsl:template>
-
-</xsl:stylesheet> 
diff --git a/helm/style/mk_dep_graph.xsl b/helm/style/mk_dep_graph.xsl
deleted file mode 100644 (file)
index 4cdc17f..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
- <!-- Note: the param processorURL is not available. It has been -->
- <!-- removed to keep the final URL short enought to make I.E.   -->
- <!-- work with it.                                              -->
-
- <xsl:import href="mk_meta_and_dep_graph.xsl"/>
-
- <xsl:variable name="base_RDF_URI" select="'helm:rdf:www.cs.unibo.it/helm/rdf/forward//'"/>
- <xsl:variable name="link_direction" select="''"/>
-
-</xsl:stylesheet>
diff --git a/helm/style/mk_meta_and_dep_graph.xsl b/helm/style/mk_meta_and_dep_graph.xsl
deleted file mode 100644 (file)
index a9a9a95..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!-- CSC: Sostituire l'andata a capo con la entity numerica opportuna -->
-<!DOCTYPE html [
- <!ENTITY CSCbr "
-">
-]>
-
-<xsl:stylesheet version="1.0"
-  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-  xmlns:h="http:/www.cs.unibo.it/helm/schemas/schema-h.rdf#">
-
-<xsl:output method="text"/>
-
-<xsl:param name="CICURI" select="''"/>
-<xsl:param name="PID" select="''"/>
-<xsl:param name="getterURL" select="''"/>
-<xsl:param name="uri_set_queueURL" select="''"/>
-<xsl:param name="uri_set_size" select="30"/>
-<xsl:variable name="base_URL_of_URI" select="concat($getterURL,'getxml?uri=')"/>
-
-<!-- CSC: next functions because I don't remember the name of the    -->
-<!-- CSC: subst function of xslt and I don't have the specs with me -->
-
-<!-- The next function is used to quote URIs for dotty -->
-<xsl:template name="quote">
- <xsl:param name="s" select="''"/>
- <xsl:param name="news" select="''"/>
- <xsl:choose>
-  <xsl:when test="$s = ''"><xsl:value-of select="$news"/></xsl:when>
-  <xsl:otherwise>
-   <xsl:variable name="char" select="substring($s,1,1)"/>
-   <xsl:choose>
-    <xsl:when test="$char = '/'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'X')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = ':'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'Y')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = '.'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'Z')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test='$char = "&apos;"'>
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'W')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = '-'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'J')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = '#'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'G')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = '('">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'O')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:when test="$char = ')'">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'C')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,$char)"/>
-     </xsl:call-template>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- The next function is used to quote URIs to embed them in an URL -->
-<xsl:template name="quote_url">
- <xsl:param name="s" select="''"/>
- <xsl:param name="news" select="''"/>
- <xsl:choose>
-  <xsl:when test="$s = ''"><xsl:value-of select="$news"/></xsl:when>
-  <xsl:otherwise>
-   <xsl:variable name="char" select="substring($s,1,1)"/>
-   <xsl:choose>
-    <xsl:when test="$char = '#'">
-     <xsl:call-template name="quote_url">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,'%23')"/>
-     </xsl:call-template>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:call-template name="quote_url">
-      <xsl:with-param name="s" select="substring($s,2)"/>
-      <xsl:with-param name="news" select="concat($news,$char)"/>
-     </xsl:call-template>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template name="RDFURI_of_CICURI">
- <xsl:param name="uri" select="''"/>
- <xsl:variable name="before" select="substring-before($uri,'#xpointer(1/')"/>
- <xsl:value-of select="$base_RDF_URI"/>
- <xsl:choose>
-  <xsl:when test="$before=''">
-   <xsl:value-of select="$uri"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="concat($before,',')"/>
-   <xsl:variable name="after" select="substring-after($uri,'#xpointer(1/')"/>
-   <xsl:value-of select="translate(substring-before($after,')'),'/',',')"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template match="/">
- <!--
- <xsl:text>strict digraph L0 { size = "83,83"; concentrate=true; node [style=filled, shape = box];&CSCbr;</xsl:text>
- -->
- <xsl:text>strict digraph L0 { size = "83,83"; node [style=filled, shape = box];&CSCbr;</xsl:text>
- <xsl:variable name="quoted_CICURI">
-  <xsl:call-template name="quote_url">
-   <xsl:with-param name="s" select="$CICURI"/>
-  </xsl:call-template>
- </xsl:variable>
- <!-- The nonce is used to force the document reload -->
- <xsl:variable name="dummy0" select="document(concat($uri_set_queueURL,'set_uri_set_size?uri=',$quoted_CICURI,'&amp;nonce=',generate-id(),'&amp;PID=',$PID,'&amp;size=',$uri_set_size))"/>
- <xsl:variable name="dummy1" select="document(concat($uri_set_queueURL,'add_if_not_in?uri=',$quoted_CICURI,'&amp;nonce=',generate-id(),'&amp;PID=',$PID))"/>
- <xsl:apply-templates mode="loop" select="document(concat($uri_set_queueURL,'get_next?uri=',$quoted_CICURI,'&amp;nonce=',generate-id(),'&amp;PID=',$PID))"/>
- <xsl:variable name="dummy2" select="document(concat($uri_set_queueURL,'reset_to_empty?PID=',$PID))"/>
- <xsl:text>}</xsl:text>
-</xsl:template>
-
-<xsl:template mode="loop" match="empty"/>
-
-<xsl:template mode="loop" match="uri|marked_uri">
- <xsl:variable name="rdfuri">
-  <xsl:call-template name="RDFURI_of_CICURI">
-   <xsl:with-param name="uri" select="@value"/>
-  </xsl:call-template>
- </xsl:variable>
- <xsl:variable name="document" select="document(concat($base_URL_of_URI,$rdfuri))"/>
- <xsl:choose>
-  <xsl:when test="$document/*">
-   <xsl:apply-templates mode="first_time" select="$document/*">
-    <xsl:with-param name="currentCICURI" select="@value"/>
-    <xsl:with-param name="quotedCurrentCICURI">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="@value"/>
-     </xsl:call-template>
-    </xsl:with-param>
-    <xsl:with-param name="do_not_visit" select="name(.)"/>
-   </xsl:apply-templates>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:apply-templates mode="first_time" select=".">
-    <xsl:with-param name="currentCICURI" select="@value"/>
-    <xsl:with-param name="quotedCurrentCICURI">
-     <xsl:call-template name="quote">
-      <xsl:with-param name="s" select="@value"/>
-     </xsl:call-template>
-    </xsl:with-param>
-    <xsl:with-param name="do_not_visit" select="'no_deps'"/>
-   </xsl:apply-templates>
-  </xsl:otherwise>
- </xsl:choose>
- <xsl:variable name="quoted_value">
-  <xsl:call-template name="quote_url">
-   <xsl:with-param name="s" select="@value"/>
-  </xsl:call-template>
- </xsl:variable>
- <!-- The couple (uri,nonce) is used to force the document reload -->
- <xsl:apply-templates mode="loop" select="document(concat($uri_set_queueURL,'get_next?uri=',$quoted_value,'&amp;nonce=',generate-id(),'&amp;PID=',$PID))"/>
-</xsl:template>
-
-
-<xsl:template mode="first_time" match="*">
- <xsl:param name="currentCICURI" select="''"/>
- <xsl:param name="quotedCurrentCICURI" select="''"/>
- <xsl:param name="do_not_visit" select="'uri'"/>
- <xsl:if test="$do_not_visit='uri'">
-  <xsl:apply-templates select=".">
-   <xsl:with-param name="currentCICURI" select="$currentCICURI"/>
-   <xsl:with-param name="quotedCurrentCICURI" select="$quotedCurrentCICURI"/>
-  </xsl:apply-templates>
- </xsl:if>
- <xsl:text> </xsl:text>
- <xsl:value-of select="$quotedCurrentCICURI"/>
-<!-- <xsl:text> [fontname="LucidaSansRegular",color=red,label="</xsl:text> -->
- <xsl:text> [label="</xsl:text>
- <xsl:value-of select="$currentCICURI"/>
- <xsl:text>",URL="</xsl:text>
- <xsl:value-of select="$currentCICURI"/>
- <xsl:text>"</xsl:text>
- <xsl:if test="name(document(concat($uri_set_queueURL,'is_overflowed?uri=',$quotedCurrentCICURI,'&amp;nonce=',generate-id(),'&amp;PID=',$PID))/*)='true'">
-  <xsl:text>,color=red</xsl:text>
- </xsl:if>
- <xsl:text>];&CSCbr;</xsl:text>
-</xsl:template>
-
-<xsl:template match="*">
- <xsl:param name="currentCICURI" select="''"/>
- <xsl:param name="quotedCurrentCICURI" select="''"/>
- <xsl:for-each select="*/*/*">
-  <xsl:variable name="quotedURI">
-   <xsl:call-template name="quote">
-    <xsl:with-param name="s" select="@rdf:value"/>
-   </xsl:call-template>
-  </xsl:variable>
-  <xsl:variable name="quoted_uri">
-   <xsl:call-template name="quote_url">
-    <xsl:with-param name="s" select="@rdf:value"/>
-   </xsl:call-template>
-  </xsl:variable>
-  <!-- The nonce, quotedCurrentCICURI are used to force the document reload -->
-  <xsl:if test="not(name(document(concat($uri_set_queueURL,'add_if_not_in?uri=',$quoted_uri,'&amp;nonce=',generate-id(),'&amp;PID=',$PID,'&amp;quotedCurrentCICURI=',$quotedCurrentCICURI))/*)='not_added_because_already_too_many')">
-   <xsl:text> </xsl:text>
-   <xsl:value-of select="$quotedCurrentCICURI"/>
-   <xsl:text> -&gt; </xsl:text>
-   <xsl:value-of select="$quotedURI"/>
-   <xsl:value-of select="$link_direction"/>
-   <xsl:text>;&CSCbr;</xsl:text>
-  </xsl:if>
- </xsl:for-each>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/mk_meta_graph.xsl b/helm/style/mk_meta_graph.xsl
deleted file mode 100644 (file)
index aecf9ef..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
- <!-- Note: the param processorURL is not available. It has been -->
- <!-- removed to keep the final URL short enought to make I.E.   -->
- <!-- work with it.                                              -->
-
- <xsl:import href="mk_meta_and_dep_graph.xsl"/>
-
- <xsl:variable name="base_RDF_URI" select="'helm:rdf:www.cs.unibo.it/helm/rdf/backward//'"/>
- <xsl:variable name="link_direction" select="' [dir=back]'"/>
-
-</xsl:stylesheet>
diff --git a/helm/style/mk_meta_theory.xsl b/helm/style/mk_meta_theory.xsl
deleted file mode 100644 (file)
index 3a07962..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0"
-   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-   xmlns:ht="http://www.cs.unibo.it/helm/namespaces/helm-theory"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:h="http:/www.cs.unibo.it/helm/schemas/schema-h.rdf#">
-
-<xsl:variable name="MainConclusion" select="'http://www.cs.unibo.it/helm/schemas/schema-h.rdf#MainConclusion'"/>
-<xsl:variable name="InConclusion" select="'http://www.cs.unibo.it/helm/schemas/schema-h.rdf#InConclusion'"/>
-<xsl:variable name="MainHypothesis" select="'http://www.cs.unibo.it/helm/schemas/schema-h.rdf#MainHypothesis'"/>
-<xsl:variable name="InHypothesis" select="'http://www.cs.unibo.it/helm/schemas/schema-h.rdf#InHypothesis'"/>
-<xsl:variable name="InBody" select="'http://www.cs.unibo.it/helm/schemas/schema-h.rdf#InBody'"/>
-
-<xsl:template match="/">
-               <html> 
-                <head>
-                 <title>Occurrences of <xsl:value-of select="*/*/@rdf:value"/></title>
-                 <style>
-                  a { text-decoration: none }
-                  a.underline {text-decoration: underline }
-                 </style>
-                </head>
-                <!-- CSC: method onLoad to be removed once the window -->
-                <!-- CSC: becomes a frame                              -->
-                <body bgcolor="white" onLoad="window.focus()">
-                <xsl:apply-templates/>
-                </body>
-               </html>
-</xsl:template>
-
-<xsl:template match="h:Object">
- <xsl:variable name="no_main"
-   select="count(*/h:Occurrence[@rdf:about=$MainConclusion])"/>
- <xsl:variable name="no_concl"
-   select="count(*/h:Occurrence[@rdf:about=$InConclusion])"/>
- <xsl:variable name="no_main_hyp"
-   select="count(*/h:Occurrence[@rdf:about=$MainHypothesis])"/>
- <xsl:variable name="no_in_hyp"
-   select="count(*/h:Occurrence[@rdf:about=$InHypothesis])"/>
- <xsl:variable name="no_body"
-   select="count(*/h:Occurrence[@rdf:about=$InBody])"/>
- <h1>Occurrences of <xsl:value-of select="@rdf:about"/></h1>
- <ul>
-       <xsl:if test="$no_main != 0">
-       <li><a class="underline" href ="#main">Head position in conclusion 
-            (<xsl:value-of select="$no_main"/>)</a></li>
-       </xsl:if>
-       <xsl:if test="$no_concl != 0">
-       <li><a class="underline" href ="#concl">In conclusion 
-            (<xsl:value-of select="$no_concl"/>)</a></li>
-       </xsl:if>
-       <xsl:if test="$no_main_hyp != 0">
-       <li><a class="underline" href ="#main_hyp">Head position in some hypothesis
-            (<xsl:value-of select="$no_main_hyp"/>)</a></li>
-       </xsl:if>
-       <xsl:if test="$no_in_hyp != 0">
-       <li><a class="underline" href ="#hyp">In hypotheses
-            (<xsl:value-of select="$no_in_hyp"/>)</a></li>
-       </xsl:if>
-       <xsl:if test="$no_body != 0">
-       <li><a class="underline" href ="#body">In the body
-            (<xsl:value-of select="$no_body"/>)</a></li>
-       </xsl:if>
- </ul>
- <xsl:choose>
-  <xsl:when test="$no_main = 0"/>
-  <xsl:when test="15 > $no_main">
-   <h2><a name="main">Head position inside conclusion:</a></h2>
-   <xsl:for-each select="*/h:Occurrence[@rdf:about=$MainConclusion]">
-    <div style="margin: 0.25cm 0cm 0.25cm 0.75cm">
-     <ht:OBJECT uri="{@rdf:value}" mode="typeonly"/>
-    </div>
-   </xsl:for-each>
-  </xsl:when>
-  <xsl:when test="$no_main >= 15">
-   <h2><a name="main">Head position inside conclusion:</a></h2>
-   <xsl:for-each select="*/h:Occurrence[@rdf:about=$MainConclusion]">
-    <div style="margin: 0cm 0cm 0cm 0.75cm">
-     <ht:OBJECT uri="{@rdf:value}" mode="linkonly"/>
-    </div>
-   </xsl:for-each>
-  </xsl:when>
- </xsl:choose>
- <xsl:choose>
-  <xsl:when test="$no_concl = 0"/>
-  <xsl:when test="15 > $no_concl">
-   <h2><a name="concl">Inside conclusion:</a></h2>
-   <xsl:for-each select="*/h:Occurrence[@rdf:about=$InConclusion]">
-    <div style="margin: 0.25cm 0cm 0.25cm 0.75cm">
-     <ht:OBJECT uri="{@rdf:value}" mode="typeonly"/>
-    </div>
-   </xsl:for-each>
-  </xsl:when>
-  <xsl:when test="$no_concl >= 15">
-   <h2><a name="concl">Inside conclusion:</a></h2>
-   <xsl:for-each select="*/h:Occurrence[@rdf:about=$InConclusion]">
-    <div style="margin: 0cm 0cm 0cm 0.75cm">
-     <ht:OBJECT uri="{@rdf:value}" mode="linkonly"/>
-    </div>
-   </xsl:for-each>
-  </xsl:when>
- </xsl:choose>
- <xsl:choose>
-  <xsl:when test="$no_main_hyp = 0"/>
-  <xsl:when test="15 > $no_main_hyp">
-   <h2><a name="main_hyp">Head position inside an hypothesis:</a></h2>
-   <xsl:for-each select="*/h:Occurrence[@rdf:about=$MainHypothesis]">
-    <div style="margin: 0.25cm 0cm 0.25cm 0.75cm">
-     <ht:OBJECT uri="{@rdf:value}" mode="typeonly"/>
-    </div>
-   </xsl:for-each>
-  </xsl:when>
-  <xsl:when test="$no_main_hyp >= 15">
-   <h2><a name="main_hyp">Head position inside an hypothesis:</a></h2>
-   <xsl:for-each select="*/h:Occurrence[@rdf:about=$MainHypothesis]">
-    <div style="margin: 0cm 0cm 0cm 0.75cm">
-     <ht:OBJECT uri="{@rdf:value}" mode="linkonly"/>
-    </div>
-   </xsl:for-each>
-  </xsl:when> 
- </xsl:choose>
- <xsl:choose>
-  <xsl:when test="$no_in_hyp = 0"/>
-  <xsl:when test="15 > $no_in_hyp">
-   <h2><a name="hyp">Inside an hypothesis:</a></h2>
-   <xsl:for-each select="*/h:Occurrence[@rdf:about=$InHypothesis]">
-    <div style="margin: 0.25cm 0cm 0.25cm 0.75cm">
-     <ht:OBJECT uri="{@rdf:value}" mode="typeonly"/>
-    </div>
-   </xsl:for-each>
-  </xsl:when>
-  <xsl:when test="$no_in_hyp >= 15">
-   <h2><a name="hyp">Inside an hypothesis:</a></h2>
-   <xsl:for-each select="*/h:Occurrence[@rdf:about=$InHypothesis]">
-    <div style="margin: 0cm 0cm 0cm 0.75cm">
-     <ht:OBJECT uri="{@rdf:value}" mode="linkonly"/>
-    </div>
-   </xsl:for-each>
-  </xsl:when>
- </xsl:choose>
- <xsl:if test="$no_body > 0">
-  <h2><a name="body">Inside the body:</a></h2>
-  <xsl:for-each select="*/h:Occurrence[@rdf:about=$InBody]">
-   <div style="margin: 0cm 0cm 0cm 0.75cm">
-    <ht:OBJECT uri="{@rdf:value}" mode="linkonly"/>
-   </div>
-  </xsl:for-each>
- </xsl:if>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/mmlctop.xsl b/helm/style/mmlctop.xsl
deleted file mode 100644 (file)
index 554c3a8..0000000
+++ /dev/null
@@ -1,3985 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- ******************************************************** -->
-<!--   XSL Transform of MathML content to MathML presentation -->
-<!--                                                          -->
-<!--   Authors Igor Rodionov <igor@csd.uwo.ca>,               -->
-<!--           Stephen Watt  <watt@csd.uwo.ca>.               -->  
-<!--                                                          -->
-<!--   (C) Copyright 2000  Symbolic Computation Laboratory,   -->
-<!--                       University of Western Ontario,     -->
-<!--                       London, Canada N6A 5B7.            -->
-<!--                                                          -->
-<!-- ******************************************************** -->
-<!--   Updated Nov. 2001 by:                                  -->
-<!--           S. Huerter <huerter@csd.uwo.ca>.               -->
-<!--                                                          -->
-<!--   Complies with the W3C MathML 2.0 Recommendation of     -->
-<!--   21 February 2001.                                      -->
-<!-- ******************************************************** -->
-
-<!-- ====================================================== -->
-<!--  April, 10 2002 - HELM group:                          -->
-<!--  Added the namespace prefix to all the output elements -->
-<!--  (see 7.1.1.2)                                         -->
-<!--  Changed the mml prefix into m (see A.3)               -->
-<!--  Added xref to every mo element                        -->
-<!--  New csymbol template                                  -->
-<!--  reln is not supported                                 -->
-<!--  HELM tag used for changes                             -->
-<!--  First draft: April 10 2002, Irene Schena              -->
-<!-- ====================================================== -->
-
-<xsl:stylesheet id="mmlctop.xsl"
-                version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!-- HELM: we don't have a default namespace.
-     Removed xmlns="http://www.w3.org/1998/Math/MathML" -->
-
-<!-- HELM: was
-<xsl:output method="xml" indent="yes"/>
-     only for HELM!
--->
-<xsl:output method="xml"/>
-
-<xsl:strip-space elements="apply semantics annotation-xml
-        csymbol fn cn ci interval matrix matrixrow vector
-        lambda bvar condition logbase degree set list
-        lowlimit uplimit"/>
-
-
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-<!--         Parameters, variables and constants           -->
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-
-<!-- ~~~~~~~~ Semantics related *constants*: ~~~~~~~~ -->
-
-<!-- Strip off semantics -->
-<xsl:variable name="SEM_STRIP" select="-1"/>
-
-<!-- Pass semantics "as is" -->
-<xsl:variable name="SEM_PASS" select="0"/>
-
-<!-- Add semantics at top level only -->
-<xsl:variable name="SEM_TOP" select="1"/>
-
-<!-- Add semantics at all levels -->
-<xsl:variable name="SEM_ALL" select="2"/>
-
-<!-- Semantics at top level only, with id refs -->
-<!-- NOTE: ids have to be already present in the
-           input for this feature to work. -->
-<xsl:variable name="SEM_XREF" select="3"/>
-
-<!-- No semantics at top level, with id refs -->
-<!-- NOTE: ids have to be already present in the
-           input for this feature to work. -->
-<xsl:variable name="SEM_XREF_EXT" select="4"/>
-
-
-<!-- ~~~~~~~~~~ Stylesheet *parameter*: SEM_SW ~~~~~~~~~~~~~~ -->
-<!-- Assumes one of the above values; SEM_PASS is the default -->
-<!-- The default can be overridden by specifying different    -->
-<!-- value on the command line when the stylesheet is invoked -->
-
-<!-- HELM: $SEM_SW was SEM_PASS (error!) -->
-<xsl:param name="SEM_SW" select="$SEM_XREF"/>
-
-
-<!-- ~~~~~~ Operator precedence definitions ~~~~~~ -->
-<xsl:variable name="UNION_OP" select="2"/>
-<xsl:variable name="INTERSECT_OP" select="6"/>
-<xsl:variable name="SETDIFF_OP" select="4"/>
-<xsl:variable name="NO_PREC" select="0"/>
-<xsl:variable name="UNION_PREC" select="1"/>
-<xsl:variable name="SETDIFF_PREC" select="1"/>
-<xsl:variable name="INTERSECT_PREC" select="3"/>
-<xsl:variable name="CARTPROD_PREC" select="3"/>
-<xsl:variable name="OR_PREC" select="5"/>
-<xsl:variable name="XOR_PREC" select="5"/>
-<xsl:variable name="AND_PREC" select="7"/>
-<xsl:variable name="PLUS_PREC" select="9"/>
-<xsl:variable name="MINUS_PREC" select="9"/>
-<xsl:variable name="MUL_PREC" select="11"/>
-<xsl:variable name="DIV_PREC" select="11"/>
-<xsl:variable name="NEG_PREC" select="13"/>
-<xsl:variable name="FUNCTION_PREC" select="99"/>
-
-<!-- ~~~~~ Miscellaneous constant definitions ~~~~~ -->
-
-<xsl:variable name="YES" select="1"/>
-<xsl:variable name="NO" select="0"/>
-<xsl:variable name="NO_PARAM" select="-1"/>
-<xsl:variable name="PAR_SAME" select="-3"/>
-<xsl:variable name="PAR_YES" select="-5"/>
-<xsl:variable name="PAR_NO" select="-7"/>
-<xsl:variable name="DOESNT_MATTER" select="-9"/>
-
-<!-- +++++++++++++++++ INDEX OF TEMPLATES +++++++++++++++++++ -->
-
-<!-- All templates are subdivided into the following categories
-     (listed in the order of appearance in the stylesheet):
-
-THE TOPMOST ELEMENT: MATH
- math
-
-SEMANTICS HANDLING
- semantics
-
-BASIC CONTAINER ELEMENTS
- cn, ci, csymbol
-
-BASIC CONTENT ELEMENTS
- fn, interval, inverse, sep, condition, declare, lambda, compose, ident
-
-     *NEW: apply, piecewise, domain, codomain, image
-
-ARITHMETIC, ALGEBRA & LOGIC
- quotient, exp, factorial, max, min, minus, plus, power, rem, divide,
- times, root, gcd, and, or, xor, not, forall, exists, abs, conjugate,
- arg, real, imaginary
-
-     *NEW: floor, ceiling, lcm
-
-RELATIONS
- neq, approx, tendsto, implies, in, notin, notsubset, notprsubset,
- subset, prsubset, eq, gt, lt, geq, leq, equivalent
-
-CALCULUS
- ln, log, diff, partialdiff, lowlimit, uplimit, bvar, degree,
- logbase, divergence, grad, curl, laplacian
-
-SET THEORY
- set, list, union, intersect, setdiff, card
-
-     *NEW: cartesianproduct
-
-SEQUENCES AND SERIES
- sum, product, limit
-
-     *NEW: int
-
-TRIGONOMETRY
- sin, cos, tan, sec, csc, cot, sinh, cosh, tanh, sech, csch, coth,
- arcsin, arccos, arctan
-
-     *NEW: arcsec, arccsc, arccot, arcsinh, arccosh, arctanh,
-           arcsech, arccsch, arccoth, 
-
-STATISTICS
- mean, sdev, variance, median, mode, moment
-
-LINEAR ALGEBRA
- vector, matrix, matrixrow, determinant, transpose, selector,
- vectorproduct, scalarproduct, outerproduct
--->
-
-
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~ TEMPLATES ~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-
-
-<!-- ***************** THE TOPMOST ELEMENT: MATH ***************** -->
-
-<xsl:template match = "m:math">
-<!-- HELM:  <m:math> only for HELM! -->
-  <xsl:choose>
-    <xsl:when test="$SEM_SW=$SEM_TOP or $SEM_SW=$SEM_ALL and *[2] or $SEM_SW=$SEM_XREF">             <m:semantics>                                                       
-    <m:mrow>                                                         
-          <xsl:apply-templates mode = "semantics"/>
-        </m:mrow>
-        <m:annotation-xml encoding="MathML">
-          <xsl:copy-of select="*"/>
-        </m:annotation-xml>
-      </m:semantics>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:apply-templates mode = "semantics"/>
-      </m:mrow>  
-    </xsl:otherwise>
-  </xsl:choose>
-<!-- HELM: </m:math> -->
-</xsl:template>
-
-
-<!-- ***************** SEMANTICS HANDLING ***************** -->
-
-<!-- This template is called recursively.  At each level   -->
-<!-- in the source tree it decides whether to strip off,   -->
-<!-- pass or add semantics at that level (depending on the -->
-<!-- value of SEM_SW parameter).  Then the actual template -->
-<!-- is applied to the node.                               -->
-
-<xsl:template match = "m:*" mode = "semantics">
-  <xsl:param name="IN_OP" select="$DOESNT_MATTER"/>
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$SEM_SW=$SEM_STRIP and self::m:semantics">
-      <xsl:apply-templates select="m:annotation-xml[@encoding='MathML']">
-        <xsl:with-param name="IN_OP" select="$IN_OP"/>
-        <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:when test="($SEM_SW=$SEM_PASS or $SEM_SW=$SEM_TOP) and self::m:semantics">
-      <m:semantics>
-        <xsl:apply-templates select="*[1]">   
-        <xsl:with-param name="IN_OP" select="$IN_OP"/>
-        <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-        <xsl:copy-of select="m:annotation-xml"/>
-      </m:semantics>
-    </xsl:when>
-    <xsl:when test="$SEM_SW=$SEM_ALL">
-      <m:semantics>
-        <xsl:choose>
-          <xsl:when test="self::m:semantics">
-            <xsl:apply-templates select="*[1]">
-              <xsl:with-param name="IN_OP" select="$IN_OP"/>
-              <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-              <xsl:with-param name="PARAM" select="$PARAM"/>
-              <xsl:with-param name="PAREN" select="$PAREN"/>
-              <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-            </xsl:apply-templates>
-            <xsl:copy-of select="m:annotation-xml"/>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:apply-templates select=".">
-              <xsl:with-param name="IN_OP" select="$IN_OP"/>
-              <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-              <xsl:with-param name="PARAM" select="$PARAM"/>
-              <xsl:with-param name="PAREN" select="$PAREN"/>
-              <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-            </xsl:apply-templates>
-            <m:annotation-xml encoding="MathML">
-              <xsl:copy-of select="."/>
-            </m:annotation-xml>
-          </xsl:otherwise>
-        </xsl:choose>
-      </m:semantics>
-    </xsl:when>
-    <xsl:when test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:choose>
-<!-- HELM: syntax error, was sematics -->
-        <xsl:when test="self::m:semantics">
-          <xsl:copy>
-            <xsl:copy-of select="@*"/>
-            <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-            </xsl:attribute>
-            <xsl:copy-of select="*[1]"/>
-            <xsl:copy-of select="m:annotation-xml"/>
-          </xsl:copy>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:apply-templates select=".">
-            <xsl:with-param name="IN_OP" select="$IN_OP"/>
-            <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-            <xsl:with-param name="PARAM" select="$PARAM"/>
-            <xsl:with-param name="PAREN" select="$PAREN"/>
-            <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-          </xsl:apply-templates>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:choose>
-        <xsl:when test="self::m:semantics">
-          <xsl:copy-of select="."/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:apply-templates select=".">
-            <xsl:with-param name="IN_OP" select="$IN_OP"/>
-            <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-            <xsl:with-param name="PARAM" select="$PARAM"/>
-            <xsl:with-param name="PAREN" select="$PAREN"/>
-            <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-          </xsl:apply-templates>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:semantics">
-  <xsl:apply-templates select="." mode = "semantics"/>
-</xsl:template>
-
-
-<!-- ***************** BASIC CONTAINER ELEMENTS ***************** -->
-
-<xsl:template match = "m:cn">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test=". &lt; 0 and $IN_PREC &gt; $NO_PREC and $PAREN=$PAR_NO
-                                                   and $PAR_NO_IGNORE=$NO">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="cn"/>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:choose>
-        <xsl:when test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:apply-templates select="." mode="cnid"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:apply-templates select="." mode="cn"/>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!-- HELM: the entity &#x2062; is not defined -->
-<xsl:template match = "m:cn" mode="cn">
-  <xsl:choose>
-    <xsl:when test="@base and (not(@type) or @type='integer' or @type='real')">
-      <m:msub>
-        <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='e-notation' and not(@base) and child::m:sep[1]">
-        <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
-        <m:mo> <xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-        <m:mo>e</m:mo>
-        <m:mo> <xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-        <m:mn> <xsl:value-of select="text()[2]"/> </m:mn>
-  </xsl:when>
-    <xsl:when test="@type='complex' and not(@base) and child::m:sep[1]">
-      <m:mfenced separators="">
-        <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
-        <xsl:if test="text()[2] &lt; 0">
-          <m:mo>-</m:mo>
-          <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
-        </xsl:if>
-        <xsl:if test="not(text()[2] &lt; 0)">
-          <m:mo>+</m:mo>
-          <m:mn> <xsl:value-of select="text()[2]"/> </m:mn>
-        </xsl:if>
-        <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-        <m:mo>i</m:mo>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="@type='complex' and @base and child::m:sep[1]">
-      <m:msub>
-        <m:mfenced separators="">
-          <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-          <xsl:if test="text()[2] &lt; 0">
-            <m:mo>-</m:mo>
-            <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
-          </xsl:if>
-          <xsl:if test="not(text()[2] &lt; 0)">
-            <m:mo>+</m:mo>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </xsl:if>
-          <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text></m:mo>
-          <m:mo>i</m:mo>
-        </m:mfenced>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='rational' and not(@base) and child::m:sep[1]">
-      <m:mfrac>
-        <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-        <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-      </m:mfrac>
-    </xsl:when>
-    <xsl:when test="@type='rational' and @base and child::m:sep[1]">
-      <m:msub>
-        <m:mfenced>
-          <m:mfrac>
-            <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </m:mfrac>
-        </m:mfenced>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='polar' and not(@base) and child::m:sep[1]">
-      <m:mrow>
-        <m:mo>Polar</m:mo>
-        <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-        <m:mfenced separators=",">
-          <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-          <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-        </m:mfenced>
-      </m:mrow>
-    </xsl:when>
-    <xsl:when test="@type='polar' and @base and child::m:sep[1]">
-      <m:msub>
-        <m:mrow>
-          <m:mo>Polar</m:mo>
-          <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text></m:mo>
-          <m:mfenced separators=",">
-            <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </m:mfenced>
-        </m:mrow>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-   </xsl:when>
-    <xsl:otherwise>
-<!-- HELM: cn could contain MathML presentation -->
-<!-- HELM: was
-      <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
-     Now is: -->
-    <xsl:choose>
-     <xsl:when test="child::text() and not(*[1])">
-      <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:choose>
-       <xsl:when test="not(*[2])">
-        <xsl:copy-of select="*[1]"/>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mrow>
-         <xsl:copy-of select="*|text()"/>
-        </m:mrow>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:otherwise>
-    </xsl:choose>
-<!-- HELM -->
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:cn" mode="cnid">
-  <xsl:choose>
-    <xsl:when test="@base and (not(@type) or @type='integer' or @type='real')">
-      <m:msub xref="{@id}">
-        <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='complex' and not(@base) and child::m:sep[1]">
-      <m:mfenced separators="" xref="{@id}">
-        <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
-        <xsl:if test="text()[2] &lt; 0">
-          <m:mo>-</m:mo>
-          <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
-        </xsl:if>
-        <xsl:if test="not(text()[2] &lt; 0)">
-          <m:mo>+</m:mo>
-          <m:mn> <xsl:value-of select="text()[2]"/> </m:mn>
-        </xsl:if>
-        <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text></m:mo>
-        <m:mo>i</m:mo>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="@type='complex' and @base and child::m:sep[1]">
-      <m:msub xref="{@id}">
-        <m:mfenced separators="">
-          <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-          <xsl:if test="text()[2] &lt; 0">
-            <m:mo>-</m:mo>
-            <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
-          </xsl:if>
-          <xsl:if test="not(text()[2] &lt; 0)">
-            <m:mo>+</m:mo>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </xsl:if>
-          <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-          <m:mo>i</m:mo>
-        </m:mfenced>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='rational' and not(@base) and child::m:sep[1]">
-      <m:mfrac xref="{@id}">
-        <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-        <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-      </m:mfrac>
-    </xsl:when>
-    <xsl:when test="@type='rational' and @base and child::m:sep[1]">
-      <m:msub xref="{@id}">
-        <m:mfenced>
-          <m:mfrac>
-            <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </m:mfrac>
-        </m:mfenced>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='polar' and not(@base) and child::m:sep[1]">
-      <m:mrow xref="{@id}">
-        <m:mo>Polar</m:mo>
-        <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-        <m:mfenced separators=",">
-          <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-          <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-        </m:mfenced>
-      </m:mrow>
-    </xsl:when>
-    <xsl:when test="@type='polar' and @base and child::m:sep[1]">
-      <m:msub xref="{@id}">
-        <m:mrow>
-          <m:mo>Polar</m:mo>
-          <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-          <m:mfenced separators=",">
-            <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </m:mfenced>
-        </m:mrow>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-   </xsl:when>
-    <xsl:otherwise>
-<!-- HELM: cn could contain MathML presentation -->
-<!-- HELM: was
-      <m:mn xref="{@id}"> <xsl:apply-templates mode = "semantics"/> </m:mn>
-     Now is: -->
-    <xsl:choose>
-     <xsl:when test="child::text() and not(*[1])">
-      <m:mn xref="{@id}"> <xsl:apply-templates mode = "semantics"/> </m:mn>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:variable name="id" select="@id"/>
-      <xsl:choose>
-       <xsl:when test="not(*[2])">
-        <xsl:for-each select="*[1]">
-         <xsl:copy>
-          <xsl:attribute name="xref">
-           <xsl:value-of select="$id"/>
-          </xsl:attribute>
-          <xsl:copy-of select="@*|*"/>
-         </xsl:copy>
-        </xsl:for-each>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mrow xref="{$id}">
-         <xsl:copy-of select="*|text()"/>
-        </m:mrow>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:otherwise>
-    </xsl:choose>
-<!-- HELM -->
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:ci">
-  <xsl:choose>
-    <xsl:when test="@type='vector' or @type=matrix or @type=set">
-      <m:mi mathvariant="bold">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates mode = "semantics"/>
-      </m:mi>
-    </xsl:when>
-    <xsl:when test="child::text() and not(child::*[1])">
-      <m:mi>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: ERROR, added mode="semantics", it didn't generate identifiers -->
-        <xsl:apply-templates mode = "semantics"/>
-      </m:mi>
-    </xsl:when>
-<!-- HELM: text & markup !!! Not compliant with the specification -->
-    <xsl:when test="child::text() and *[1] and not(*[1]=m:sep)">
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: added semantics mode -->
-        <xsl:apply-templates mode="semantics"/>
-      </m:mrow>
-    </xsl:when>
-<!-- HELM -->
-    <xsl:otherwise>
-      <xsl:if test="*[2]">
-        <m:mrow>
-          <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-            <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-            </xsl:attribute>
-          </xsl:if>
-          <xsl:apply-templates select="*"/>
-        </m:mrow>
-      </xsl:if>
-      <xsl:if test="not(*[2])">
-<!-- HELM: ci could contain MathML presentation -->
-<!-- HELM: was
-        <xsl:apply-templates select="*[1]"/>
-     Now is: -->
-       <xsl:variable name="id" select="@id"/>
-        <xsl:for-each select="*[1]">
-         <xsl:copy>
-          <xsl:attribute name="xref">
-           <xsl:value-of select="$id"/>
-          </xsl:attribute>
-         <xsl:copy-of select="@*|*"/>
-         </xsl:copy>
-        </xsl:for-each>
-<!-- HELM -->
-      </xsl:if>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:ci/m:*[not(self::m:sep)]">
-  <xsl:copy-of select = "."/>
-</xsl:template>
-
-<!-- HELM: revised version previous Version x.xx from Feb. 18, 2000 -->
-<xsl:template match = "m:csymbol">
-<!-- HELM: mrow to maintain csymbol id -->
-   <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-     <xsl:attribute name="xref">
-      <xsl:value-of select="@id"/>
-     </xsl:attribute>
-    </xsl:if>
-    <xsl:for-each select="* and text()">
-     <xsl:choose>
-     <xsl:when test="text()">
-      <m:mo><xsl:value-of select="."/></m:mo>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:copy-of select = "."/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:for-each>
-   </m:mrow>
-</xsl:template>
-
-<!-- HELM: csymbol cannot contain ci or cn elements, but only text and/or 
-presentation elements. PCDATA should render as if it were wrapped in 
-an mo. Mixed content: mrow which contains mo + presentation elements --> 
-<!-- <xsl:template match = "m:csymbol/m:*">
-  <xsl:choose>
-    <xsl:when test="self::m:cn or self::m:ci">
-      <xsl:apply-templates mode = "semantics"/>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:copy-of select = "."/>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:csymbol/text()">
-  <xsl:choose>
-    <xsl:when test=". &lt; 0 or . = 0 or . &gt; 0">
-      <m:mn> <xsl:copy-of select = "."/> </m:mn>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mi> <xsl:copy-of select = "."/> </m:mi>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template> -->
-
-
-<!-- ***************** BASIC CONTENT ELEMENTS ***************** -->
-
-<!-- HELM: the entity &#x2061; is not defined:                -->
-<!-- fn and domainofapplication are rendered as their content -->
-<xsl:template match = "m:apply[m:*[1][self::m:fn]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "m:fn[1]" mode = "semantics"/>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:fn/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:fn/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-    <m:mfenced separators=",">
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<!-- fn has been deprecated, so now we use: -->
-<xsl:template match = "m:apply">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="*[2]=m:domainofapplication">
-        <m:msub>
-          <xsl:apply-templates select = "*[position()=1]" mode = "semantics">
-            <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-          </xsl:apply-templates>
-          <xsl:apply-templates select = "*[position()=2]" mode = "semantics"/>
-          </m:msub>
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:domainofapplication/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:domainofapplication/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-          <m:mfenced separators=",">
-            <xsl:apply-templates select = "*[position()>2]" mode = "semantics"/>
-            </m:mfenced>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:apply-templates select = "*[position()=1]" mode = "semantics">
-              <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-            </xsl:apply-templates>
-            <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-            <m:mfenced separators=",">
-              <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-              </m:mfenced> 
-            </xsl:otherwise>
-          </xsl:choose>
-        </m:mrow>
-      </xsl:template>
-      
-      <xsl:template match = "m:domainofapplication">
-        <xsl:apply-templates select = "*[1]" mode = "semantics"/> 
-        </xsl:template>
-    
-      <xsl:template match = "m:fn">
-        <xsl:apply-templates select = "*[1]" mode = "semantics">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        </xsl:apply-templates>
-      </xsl:template>
-      
-      <xsl:template match = "m:interval">
-        <m:mfenced separators=",">
-          <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-            <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-            </xsl:attribute>
-          </xsl:if>
-          <xsl:if test="@closure='closed' or @closure='closed-open'">
-            <xsl:attribute name="open">[</xsl:attribute>
-          </xsl:if>
-          <xsl:if test="@closure='closed' or @closure='open-closed'">
-            <xsl:attribute name="close">]</xsl:attribute>
-          </xsl:if>
-          <xsl:apply-templates select="*" mode = "semantics"/>
-          </m:mfenced>
-        </xsl:template>
-        
-        <xsl:template match = "m:apply[m:*[1][self::m:apply[m:inverse[1]]]]">
-          <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "*[1]" mode = "semantics"/>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text> </m:mo>
-    <m:mfenced separators=",">
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mfenced>
- </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[*[1][self::m:inverse]]">
-  <xsl:choose>
-    <xsl:when test="*[2]=m:exp or *[2]=m:ln or *[2]=m:sin or *[2]=m:cos or
-                    *[2]=m:tan or *[2]=m:sec or *[2]=m:csc or *[2]=m:cot or
-                    *[2]=m:sinh or *[2]=m:cosh or *[2]=m:tanh or *[2]=m:sech or
-                    *[2]=m:csch or *[2]=m:coth or *[2]=m:arcsin or
-                    *[2]=m:arccos or *[2]=m:arctan">
-      <m:mo>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]" mode="inverse"/>
-      </m:mo>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:msup>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select = "*[2]"/>
-        <m:mfenced>
-<!-- HELM: xref added -->        
-         <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:inverse/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:inverse/@id"/>
-          </xsl:attribute>
-         </xsl:if>
-         <m:mn>-1</m:mn>
-        </m:mfenced>
-      </m:msup>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "*" mode="inverse">
-  <xsl:choose>
-    <xsl:when test="self::m:exp">
-      <xsl:value-of select="'ln'"/>
-    </xsl:when>
-    <xsl:when test="self::m:ln">
-      <xsl:value-of select="'exp'"/>
-    </xsl:when>
-    <xsl:when test="self::m:sin">
-      <xsl:value-of select="'arcsin'"/>
-    </xsl:when>
-    <xsl:when test="self::m:cos">
-      <xsl:value-of select="'arccos'"/>
-    </xsl:when>
-    <xsl:when test="self::m:tan">
-      <xsl:value-of select="'arctan'"/>
-    </xsl:when>
-    <xsl:when test="self::m:sec">
-      <xsl:value-of select="'arcsec'"/>
-    </xsl:when>
-    <xsl:when test="self::m:csc">
-      <xsl:value-of select="'arccsc'"/>
-    </xsl:when>
-    <xsl:when test="self::m:cot">
-      <xsl:value-of select="'arccot'"/>
-    </xsl:when>
-    <xsl:when test="self::m:sinh">
-      <xsl:value-of select="'arcsinh'"/>
-    </xsl:when>
-    <xsl:when test="self::m:cosh">
-      <xsl:value-of select="'arccosh'"/>
-    </xsl:when>
-    <xsl:when test="self::m:tanh">
-      <xsl:value-of select="'arctanh'"/>
-    </xsl:when>
-    <xsl:when test="self::m:sech">
-      <xsl:value-of select="'arcsech'"/>
-    </xsl:when>
-    <xsl:when test="self::m:csch">
-      <xsl:value-of select="'arccsch'"/>
-    </xsl:when>
-    <xsl:when test="self::m:coth">
-      <xsl:value-of select="'arccoth'"/>
-    </xsl:when>
-    <xsl:when test="self::m:arcsin">
-      <xsl:value-of select="'sin'"/>
-    </xsl:when>
-    <xsl:when test="self::m:arccos">
-      <xsl:value-of select="'cos'"/>
-    </xsl:when>
-    <xsl:when test="self::m:arctan">
-      <xsl:value-of select="'tan'"/>
-    </xsl:when>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:sep"/>
-
-<xsl:template match = "m:condition">
-  <xsl:choose>
-    <xsl:when test="parent::m:apply[m:forall[1]]"/>
-    <xsl:otherwise>
-      <xsl:choose>
-        <xsl:when test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <m:mrow xref="{@id}">
-            <xsl:apply-templates select="*" mode = "semantics"/>
-          </m:mrow>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:if test="not(*[2])">
-            <xsl:apply-templates select="*" mode = "semantics"/>
-          </xsl:if>
-          <xsl:if test="*[2]">
-            <m:mrow>
-              <xsl:apply-templates select="*" mode = "semantics"/>
-            </m:mrow>
-          </xsl:if>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:declare"/>
-
-<xsl:template match = "m:lambda">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x039B;</xsl:text> </m:mo>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text> </m:mo>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*">
-        <xsl:choose>
-          <xsl:when test="self::m:ci or self::m:cn">
-            <xsl:apply-templates select = "." mode="semantics"/>
-          </xsl:when>
-          <xsl:otherwise>
-            <m:mrow>
-              <xsl:apply-templates select = "." mode="semantics"/>
-            </m:mrow>
-          </xsl:otherwise>
-        </xsl:choose>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[*[1][self::m:apply[m:compose[1]]]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "*[1]" mode = "semantics"/>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-    <m:mfenced separators=",">
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mfenced>
- </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[*[1][self::m:compose]]">
-  <m:mfenced separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "m:*[2][self::m:ci[@type='fn'] |
-                                       self::m:fn]" mode="semantics"/>
-    <xsl:for-each select = "m:*[position()>2][self::m:ci[@type='fn'] |
-                                                            self::m:fn]">
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:compose/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:compose/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x2218;</xsl:text></m:mo>
-      <xsl:apply-templates select = "." mode="semantics"/>
-    </xsl:for-each>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:ident">
-  <xsl:choose>
-    <xsl:when test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <m:mo xref="{@id}">id</m:mo>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mo>id</m:mo>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match="m:piecewise">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if> 
-    <xsl:element name="m:mfenced">
-      <xsl:attribute name="open">{</xsl:attribute>
-      <xsl:attribute name="close"></xsl:attribute>
-      <m:mtable groupalign="left left left">
-       <xsl:for-each select="m:piece">
-       <m:mtr columnalign="left">
-          <m:mtd>
-            <m:mrow>
-              <xsl:apply-templates select="*[position()=1]" mode = "semantics"/>
-            </m:mrow>
-          </m:mtd>
-          <m:mtd>
-              <m:mrow>
-                <m:mtext>if <m:mspace width="5"/></m:mtext>
-                <xsl:apply-templates select="*[position()=2]" mode = "semantics"/>
-              </m:mrow> 
-            </m:mtd>
-          </m:mtr>
-        </xsl:for-each>
-        <xsl:if test="m:otherwise">
-          <m:mtr columnalign="left">
-            <m:mtd>
-              <m:mrow>
-                <xsl:apply-templates select="m:otherwise/*" mode = "semantics"/>
-              </m:mrow>
-            </m:mtd>
-            <m:mtd>
-              <m:mrow>
-              otherwise  
-            </m:mrow>
-          </m:mtd>
-      </m:mtr>
-    </xsl:if>
-  </m:mtable>
-</xsl:element>
-</m:mrow>
-</xsl:template>
-
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='domain']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:domain]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mi>domain</m:mi>
-    <m:mfenced open="(" close=")">
-      <xsl:apply-templates select="*[position()!=1]" mode = "semantics"/>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='codomain']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:codomain]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mi>codomain</m:mi>
-    <m:mfenced open="(" close=")">
-      <xsl:apply-templates select="*[position()!=1]" mode = "semantics"/>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='image']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:image]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mi>image</m:mi>
-    <m:mfenced open="(" close=")">
-      <xsl:apply-templates select="*[position()!=1]" mode = "semantics"/>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** ARITHMETIC, ALGEBRA & LOGIC ***************** -->
-
-<xsl:template match = "m:apply[m:quotient[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo form="prefix" fence="true" stretchy="true" lspace="0em" rspace="0em">
-      <xsl:text disable-output-escaping='yes'>&#x230A;</xsl:text>
-    </m:mo>
-    <m:mfrac>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:quotient/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:quotient/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-      <m:mrow>
-        <xsl:apply-templates select="*[2]" mode = "semantics">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        </xsl:apply-templates>
-      </m:mrow>
-      <m:mrow>
-        <xsl:apply-templates select="*[3]" mode = "semantics">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </m:mfrac>
-    <m:mo form="postfix" fence="true" stretchy="true" lspace="0em" rspace="0em">
-     <xsl:text disable-output-escaping='yes'>&#x230A;</xsl:text>
-    </m:mo>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[*[1][self::m:exp]]">
-  <m:msup>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:exp/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:exp/@id"/>
-          </xsl:attribute>
-        </xsl:if>e</m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-  </m:msup>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:factorial[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:factorial/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:factorial/@id"/>
-          </xsl:attribute>
-        </xsl:if>!</m:mo>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:max[1] | m:min[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[2]=m:bvar">
-      <m:munder>
-        <xsl:if test="*[1]=m:max">
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:max/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:max/@id"/>
-          </xsl:attribute>
-        </xsl:if>max</m:mo>
-        </xsl:if>
-        <xsl:if test="*[1]=m:min">
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:min/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:min/@id"/>
-          </xsl:attribute>
-        </xsl:if>min</m:mo>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]" mode = "semantics"/>
-      </m:munder>
-      <xsl:if test="*[3]=m:condition">
-        <m:mfenced open="{{" close="}}" separators="">
-          <m:mfenced open="" close="" separators=",">
-            <xsl:for-each select = "*[position()>3]">
-              <xsl:apply-templates select = "." mode="semantics"/>
-            </xsl:for-each>
-          </m:mfenced>
-          <m:mo>|</m:mo>
-          <xsl:apply-templates select="*[3]" mode = "semantics"/>
-        </m:mfenced>
-      </xsl:if>
-      <xsl:if test="not(*[3]=m:condition)">
-        <m:mfenced open="{{" close="}}" separators=",">
-          <xsl:for-each select = "*[position()>2]">
-            <xsl:apply-templates select = "." mode="semantics"/>
-          </xsl:for-each>
-        </m:mfenced>
-      </xsl:if>
-    </xsl:if>
-    <xsl:if test="*[2]=m:condition">
-      <xsl:if test="*[1]=m:max">
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:max/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:max/@id"/>
-          </xsl:attribute>
-        </xsl:if>max</m:mo>
-      </xsl:if>
-      <xsl:if test="*[1]=m:min">
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:min/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:min/@id"/>
-          </xsl:attribute>
-        </xsl:if>min</m:mo>
-      </xsl:if>
-      <m:mfenced open="{{" close="}}" separators="">
-        <xsl:if test="*[3]">
-          <m:mfenced open="" close="" separators=",">
-            <xsl:for-each select = "*[position()>2]">
-              <xsl:apply-templates select = "." mode="semantics"/>
-            </xsl:for-each>
-          </m:mfenced>
-          <m:mo>|</m:mo>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]" mode = "semantics"/>
-      </m:mfenced>
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:condition) and not(*[2]=m:bvar)">
-      <xsl:if test="*[1]=m:max">
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:max/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:max/@id"/>
-          </xsl:attribute>
-        </xsl:if>max</m:mo>
-      </xsl:if>
-      <xsl:if test="*[1]=m:min">
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:min/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:min/@id"/>
-          </xsl:attribute>
-        </xsl:if>min</m:mo>
-      </xsl:if>
-      <m:mfenced open="{{" close="}}" separators=",">
-        <xsl:for-each select = "*[position()>1]">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-    </xsl:if>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:minus[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $MINUS_PREC or $IN_PREC=$MINUS_PREC and
-                                                        $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="minus">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="minus">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="minus">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:minus[1]]" mode="minus">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:if test="not(*[3])">
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:minus/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:minus/@id"/>
-          </xsl:attribute>
-        </xsl:if>-</m:mo>
-    <xsl:apply-templates select="*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$NEG_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:if>
-  <xsl:if test="*[3]">
-    <xsl:apply-templates select="*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$MINUS_PREC"/>
-      <xsl:with-param name="PARAM" select="$PARAM"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-    </xsl:apply-templates>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:minus/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:minus/@id"/>
-          </xsl:attribute>
-        </xsl:if>-</m:mo>
-    <xsl:apply-templates select="*[3]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$MINUS_PREC"/>
-      <xsl:with-param name="PARAM" select="$PAR_SAME"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:plus[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $PLUS_PREC or $IN_PREC=$PLUS_PREC and
-                                                      $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="plus">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="plus">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="plus">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:plus[1]]" mode="plus">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:if test="*[2]">
-    <xsl:apply-templates select="*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
-      <xsl:with-param name="PARAM" select="$PARAM"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-    </xsl:apply-templates>
-    <xsl:for-each select = "*[position()>2]">
-      <xsl:choose>
-        <xsl:when test=". &lt; 0">
-          <m:mo>-</m:mo>
-          <m:mn> <xsl:value-of select="-."/> </m:mn>
-        </xsl:when>
-        <xsl:when test="self::m:apply[m:minus[1]] and not(*[3])">
-          <xsl:apply-templates select="." mode = "semantics">
-            <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
-            <xsl:with-param name="PAREN" select="$PAREN"/>
-            <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-          </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:plus/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:plus/@id"/>
-          </xsl:attribute>
-        </xsl:if>+</m:mo>
-          <xsl:apply-templates select="." mode = "semantics">
-            <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
-            <xsl:with-param name="PAREN" select="$PAREN"/>
-            <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-          </xsl:apply-templates>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:for-each>
-  </xsl:if>
-</xsl:template>
-
-<!-- HELM WARNING: power id is lost!                              -->
-<!-- msup should maintain the power definitionURL info but also the 
-     reference to apply                                           -->
-<xsl:template match = "m:apply[m:power[1]]">
-  <xsl:choose>
-    <xsl:when test="*[2]=m:apply[m:ln[1] | m:log[1] | m:abs[1] |
-                         m:gcd[1] | m:lcm[1] | m:sin[1] | m:cos[1] | m:tan[1] |
-                         m:sec[1] | m:csc[1] | m:cot[1] | m:sinh[1] |
-                         m:cosh[1] | m:tanh[1] | m:sech[1] | m:csch[1] |
-                         m:coth[1] | m:arcsin[1] | m:arccos[1] |
-                         m:arctan[1] | m:arcsec[1] | m:arccsc[1] | 
-                         m:arccot[1] | m:arcsinh[1] | m:arccosh[1] |
-                         m:arctanh[1] | m:arcsech[1] | m:arccsch [1]|
-                         m:arccoth[1] ]">
-      <xsl:apply-templates select="*[2]" mode = "semantics"/>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:msup>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select = "*[2]" mode = "semantics">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-        </xsl:apply-templates>
-        <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-      </m:msup>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:rem[1] | m:divide[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $DIV_PREC or $IN_PREC=$DIV_PREC and
-                                                    $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="remdiv">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="remdiv">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="remdiv">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:rem[1] | m:divide[1]]" mode="remdiv">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$DIV_PREC"/>
-      <xsl:with-param name="PARAM" select="$PARAM"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <m:mo>
-    <xsl:if test="m:rem">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:rem/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:rem/@id"/>
-          </xsl:attribute>
-        </xsl:if>      
-      <xsl:value-of select="'%'"/>
-    </xsl:if>
-    <xsl:if test="m:divide">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:divide/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:divide/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-      <xsl:value-of select="'/'"/>
-    </xsl:if>
-  </m:mo>
-  <xsl:apply-templates select = "*[3]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$DIV_PREC"/>
-    <xsl:with-param name="PARAM" select="$PAR_SAME"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-  </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:times[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $MUL_PREC or $IN_PREC=$MUL_PREC and
-                                                    $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="times">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="times">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="times">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:times[1]]" mode="times">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select="*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$MUL_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:if test="*[3]">
-    <xsl:for-each select = "*[position()>2]">
-<!-- HELM: to distinguish between * and the application -->
-<!-- Was:
-      <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text></m:mo>
-     Now is: -->
-     <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:times/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:times/@id"/>
-          </xsl:attribute>
-        </xsl:if>*</m:mo>
-      <xsl:apply-templates select="." mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$MUL_PREC"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-      </xsl:apply-templates>
-    </xsl:for-each>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:root[1]]">
-  <m:msqrt>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[2]=m:degree">
-      <xsl:apply-templates select="*[3]" mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-      </xsl:apply-templates>
-      <xsl:apply-templates select="*[2]" mode = "semantics"/>
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:degree)">
-      <xsl:apply-templates select="*[2]" mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-      </xsl:apply-templates>
-      <m:mn>2</m:mn>
-    </xsl:if>
-  </m:msqrt>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:gcd[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="not(parent::m:apply[m:power[1]])">
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:gcd/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:gcd/@id"/>
-          </xsl:attribute>
-        </xsl:if>gcd</m:mo>
-    </xsl:if>
-    <xsl:if test="parent::m:apply[m:power[1]]">
-      <m:msup>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:gcd/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:gcd/@id"/>
-          </xsl:attribute>
-        </xsl:if>gcd</m:mo>
-        <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-      </m:msup>
-    </xsl:if>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:and[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $AND_PREC">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="and">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="and">
-        <xsl:with-param name="PARAM" select="$IN_PREC"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="and">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:and[1]]" mode="and">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select="*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$AND_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:and/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:and/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x2227;</xsl:text></m:mo>
-    <xsl:apply-templates select="." mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$AND_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:or[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $OR_PREC">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="or">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="or">
-        <xsl:with-param name="PARAM" select="$IN_PREC"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="or">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:or[1]]" mode="or">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select="*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$OR_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo> 
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:or/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:or/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x2228;</xsl:text></m:mo>
-    <xsl:apply-templates select="." mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$OR_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:xor[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $XOR_PREC">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="xor">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                                                and not($SEM_SW=$SEM_ALL)">
-      <xsl:apply-templates select="." mode="xor">
-        <xsl:with-param name="PARAM" select="$IN_PREC"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="xor">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:xor[1]]" mode="xor">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select="*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$XOR_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:xor/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:xor/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x22BB;</xsl:text></m:mo>
-    <xsl:apply-templates select="." mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$XOR_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:not[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-<!-- HELM: was <m:mo>not</m:mo> 
-     Now is -->
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:not/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:not/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x000AC;</m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-    </xsl:apply-templates>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:forall[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:forall/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:forall/@id"/>
-          </xsl:attribute>
-        </xsl:if>for all</m:mo>
-    <xsl:if test="count(m:bvar) &gt; 1">
-      <m:mfenced separators=",">
-        <xsl:for-each select = "m:bvar">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-    </xsl:if>
-    <xsl:if test="count(m:bvar)=1">
-      <xsl:apply-templates select = "m:bvar" mode="semantics"/>
-    </xsl:if>
-    <xsl:if test="m:condition">
-      <m:mo>:</m:mo>
-      <xsl:apply-templates select = "m:condition/*" mode = "semantics"/>
-      <m:mo>,</m:mo>
-    </xsl:if>
-    <xsl:apply-templates select = "*[position()>1 and not(self::m:bvar) and
-                                not(self::m:condition)]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:exists[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:exists/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:exists/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x2203;</xsl:text> </m:mo>
-    <xsl:if test="count(m:bvar) &gt; 1">
-      <m:mfenced separators=",">
-        <xsl:for-each select = "m:bvar">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-    </xsl:if>
-    <xsl:if test="count(m:bvar)=1">
-      <xsl:apply-templates select = "m:bvar" mode="semantics"/>
-    </xsl:if>
-    <xsl:if test="m:condition">
-      <m:mo>,</m:mo>
-      <xsl:apply-templates select = "m:condition/*" mode = "semantics"/>
-    </xsl:if>
-    <xsl:if test="*[position()>1 and not(self::m:bvar) and not(self::m:condition)]">
-      <m:mo>:</m:mo>
-      <xsl:apply-templates select = "*[position()>1 and not(self::m:bvar) and
-                                not(self::m:condition)]" mode = "semantics"/>
-    </xsl:if>
-  </m:mrow>
-</xsl:template>
-
-<!-- HELM WARNING: abs id was lost! -->
-<xsl:template match = "m:apply[m:abs[1]]">
-  <xsl:if test="not(parent::m:apply[m:power[1]])">
-<!-- HELM: was
-    <m:mfenced open="|" close="|" separators="">
-     Now is: mrow + mo -->
-     <m:mrow>
-      <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:abs/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:abs/@id"/>
-          </xsl:attribute>
-        </xsl:if>|</m:mo>
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:abs/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:abs/@id"/>
-          </xsl:attribute>
-        </xsl:if>|</m:mo> 
-<!-- HELM: </m:mfenced> -->
-     </m:mrow>
-  </xsl:if>
-  <xsl:if test="parent::m:apply[m:power[1]]">
-    <m:msup>
-<!-- HELM: was
-      <m:mfenced open="|" close="|" separators="">
-     Now is: mrow + mo -->
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:abs/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:abs/@id"/>
-          </xsl:attribute>
-        </xsl:if>|</m:mo> 
-        <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:abs/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:abs/@id"/>
-          </xsl:attribute>
-        </xsl:if>|</m:mo> 
-<!-- HELM: </m:mfenced> -->
-      </m:mrow>
-      <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-    </m:msup>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:conjugate[1]]">
-  <m:mover>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mrow>
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mrow>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:conjugate/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:conjugate/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x0332;</xsl:text> </m:mo>
-  </m:mover>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:arg[1] | m:real[1] | m:imaginary[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-      <xsl:if test="m:arg">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:arg/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:arg/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'Arg'"/>
-      </xsl:if>
-      <xsl:if test="m:real">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:real/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:real/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'Re'"/>
-      </xsl:if>
-      <xsl:if test="m:imaginary">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:imaginary/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:imaginary/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'Im'"/>
-      </xsl:if>
-    </m:mo>
-    <m:mfenced separators="">
-      <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='lcm']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:lcm]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="not(parent::m:apply[m:power[1]])">
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:lcm/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:lcm/@id"/>
-          </xsl:attribute>
-        </xsl:if>lcm</m:mo>
-    </xsl:if>
-    <xsl:if test="parent::m:apply[m:power[1]]">
-      <m:msup>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:lcm/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:lcm/@id"/>
-          </xsl:attribute>
-        </xsl:if>lcm</m:mo>
-        <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-        </m:msup>
-      </xsl:if>
-      <m:mfenced separators=",">
-        <xsl:for-each select = "*[position()>1]">
-          <xsl:apply-templates select = "." mode="semantics"/>
-          </xsl:for-each>
-        </m:mfenced>
-      </m:mrow>
-    </xsl:template>
-
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='floor']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:floor]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:floor/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:floor/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&LeftFloor;]]> -->
-      <xsl:text disable-output-escaping="yes">&#x230A;</xsl:text>
-    </m:mo>
-    <xsl:apply-templates select="child::*[position()=last()]" mode="semantics"/>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:floor/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:floor/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&RightFloor;]]> -->
-<xsl:text disable-output-escaping="yes">&#x230B;</xsl:text>
-    </m:mo>
-</m:mrow>
-</xsl:template>
-
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='ceiling']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:ceiling]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:ceiling/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:ceiling/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&LeftCeiling;]]> -->
-      <xsl:text disable-output-escaping="yes">&#x2308;</xsl:text>
-    </m:mo>
-    <xsl:apply-templates select="child::*[position()=last()]"  mode="semantics"/>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:ceiling/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:ceiling/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&RightCeiling;]]> -->
-      <xsl:text disable-output-escaping="yes">&#x2309;</xsl:text>
-    </m:mo>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** RELATIONS ***************** -->
-
-<xsl:template match = "m:apply[m:neq | m:approx | m:tendsto | m:implies
-                     | m:in | m:notin | m:notsubset | m:notprsubset
-                     | m:subset | m:prsubset | m:eq | m:gt | m:lt
-                     | m:geq | m:leq | m:equivalent | m:factorof]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[1]=m:neq or *[1]=m:approx or *[1]=m:factorof or *[1]=m:tendsto or
-                  *[1]=m:implies or *[1]=m:in or *[1]=m:notin or
-                  *[1]=m:notsubset or *[1]=m:notprsubset">
-      <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-      <m:mo>
-        <xsl:if test="*[1]=m:neq">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:neq/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:neq/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x2260;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:approx">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:approx/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:approx/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x224A;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:factorof">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:factorof/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:factorof/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-          |
-        </xsl:if>
-        <xsl:if test="*[1]=m:tendsto">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:tendsto/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:tendsto/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x2192;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:implies">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:implies/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:implies/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x21D2;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:in">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:in/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:in/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-          <xsl:text disable-output-escaping='yes'>&#x2208;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:notin">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:notin/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:notin/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x2209;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:notsubset">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:notsubset/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:notsubset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x2284;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:notprsubset">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:notprsubset/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:notprsubset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x2288;</xsl:text>
-        </xsl:if>
-      </m:mo>
-      <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-      <xsl:if test="*[1]=m:tendsto and m:tendsto[1][@type='below']">
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:tendsto/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:tendsto/@id"/>
-          </xsl:attribute>
-        </xsl:if>-</m:mo>
-      </xsl:if>
-      <xsl:if test="*[1]=m:tendsto and m:tendsto[1][@type='above']">
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:tendsto/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:tendsto/@id"/>
-          </xsl:attribute>
-        </xsl:if>+</m:mo>
-      </xsl:if>
-    </xsl:if>
-    <xsl:if test="*[1]=m:subset or *[1]=m:prsubset or *[1]=m:eq or *[1]=m:gt
-               or *[1]=m:lt or *[1]=m:geq or *[1]=m:leq or *[1]=m:equivalent">
-      <xsl:apply-templates select = "*[2]" mode="semantics"/>
-      <xsl:for-each select = "*[position()>2]">
-        <m:mo>
-          <xsl:if test="../*[self::m:subset][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:subset/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:subset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-            <xsl:text disable-output-escaping='yes'>&#x2286;</xsl:text>
-          </xsl:if>
-          <xsl:if test="../*[self::m:prsubset][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:prsubset/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:prsubset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-           <xsl:text disable-output-escaping='yes'>&#x2282;</xsl:text>
-          </xsl:if>
-          <xsl:if test="../*[self::m:eq][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:eq/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:eq/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-            <xsl:value-of select="'='"/>
-          </xsl:if>
-          <xsl:if test="../*[self::m:gt][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:gt/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:gt/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-            <xsl:value-of select="'&gt;'"/>
-          </xsl:if>
-          <xsl:if test="../*[self::m:lt][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:lt/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:lt/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-            <xsl:value-of select="'&lt;'"/>
-          </xsl:if>
-          <xsl:if test="../*[self::m:geq][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:geq/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:geq/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-           <xsl:text disable-output-escaping='yes'>&#x2265;</xsl:text>
-          </xsl:if>
-          <xsl:if test="../*[self::m:leq][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:leq/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:leq/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-           <xsl:text disable-output-escaping='yes'>&#x2264;</xsl:text>
-          </xsl:if>
-          <xsl:if test="../*[self::m:equivalent][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:equivalent/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:equivalent/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-           <xsl:text disable-output-escaping='yes'>&#x2261;</xsl:text>
-          </xsl:if>
-        </m:mo>
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </xsl:if>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** CALCULUS ***************** -->
-
-<xsl:template match = "m:apply[*[1][self::m:ln]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="parent::m:apply[m:power[1]]">
-        <m:msup>
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:ln/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:ln/@id"/>
-          </xsl:attribute>
-        </xsl:if>ln</m:mo>
-          <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-        </m:msup>
-      </xsl:when>
-      <xsl:otherwise>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:ln/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:ln/@id"/>
-          </xsl:attribute>
-        </xsl:if>ln</m:mo>
-      </xsl:otherwise>
-    </xsl:choose>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-    </xsl:apply-templates>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:log[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="parent::m:apply[m:power[1]]">
-        <xsl:if test="not(*[2]=m:logbase)">
-          <m:msup>
-            <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:log/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:log/@id"/>
-          </xsl:attribute>
-        </xsl:if>log</m:mo>
-            <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-          </m:msup>
-        </xsl:if>
-        <xsl:if test="*[2]=m:logbase">
-          <m:msubsup>
-            <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:log/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:log/@id"/>
-          </xsl:attribute>
-        </xsl:if>log</m:mo>
-            <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-            <xsl:apply-templates select = "m:logbase" mode = "semantics"/>
-          </m:msubsup>
-        </xsl:if>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:if test="not(*[2]=m:logbase)">
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:log/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:log/@id"/>
-          </xsl:attribute>
-        </xsl:if>log</m:mo>
-        </xsl:if>
-        <xsl:if test="*[2]=m:logbase">
-          <m:msub>
-            <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:log/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:log/@id"/>
-          </xsl:attribute>
-        </xsl:if>log</m:mo>
-            <xsl:apply-templates select = "m:logbase" mode = "semantics"/>
-          </m:msub>
-        </xsl:if>
-      </xsl:otherwise>
-    </xsl:choose>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-    <xsl:if test="*[2]=m:logbase">
-      <xsl:apply-templates select = "*[3]" mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-      </xsl:apply-templates>
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:logbase)">
-      <xsl:apply-templates select = "*[2]" mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-      </xsl:apply-templates>
-    </xsl:if>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:diff[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[2]=m:bvar and m:bvar[*[2]=m:degree]">
-      <m:mfrac>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:diff/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:diff/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <m:msup>
-          <m:mo>d</m:mo>
-          <xsl:apply-templates select = "m:bvar/m:degree" mode = "semantics"/>
-        </m:msup>
-        <m:mrow>
-          <m:mo>d</m:mo>
-          <m:msup>
-            <xsl:apply-templates select = "m:bvar/*[1]" mode = "semantics"/>
-            <xsl:apply-templates select = "m:bvar/m:degree" mode = "semantics"/>
-          </m:msup>
-        </m:mrow>
-      </m:mfrac>
-    </xsl:if>
-    <xsl:if test="*[2]=m:bvar and not(m:bvar[*[2]=m:degree])">
-      <m:mfrac>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:diff/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:diff/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <m:mo>d</m:mo>
-        <m:mrow>
-          <m:mo>d</m:mo>
-          <xsl:apply-templates select = "m:bvar/*[1]" mode = "semantics"/>
-        </m:mrow>
-      </m:mfrac>
-    </xsl:if>
-    <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:partialdiff[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:for-each select = "m:bvar">
-      <xsl:if test="*[last()]=m:degree">
-        <m:mfrac>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:partialdiff/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:partialdiff/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-          <m:msup>
-             <m:mo>d</m:mo>
-             <xsl:apply-templates select = "m:degree" mode = "semantics"/>
-          </m:msup>
-          <m:mrow>
-            <m:mo>d</m:mo>
-            <m:msup>
-              <xsl:apply-templates select = "*[1]" mode = "semantics"/>
-              <xsl:apply-templates select = "m:degree" mode = "semantics"/>
-            </m:msup>
-          </m:mrow>
-        </m:mfrac>
-      </xsl:if>
-      <xsl:if test="not(*[last()]=m:degree)">
-        <m:mfrac>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:partialdiff/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:partialdiff/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-          <m:mo>d</m:mo>
-          <m:mrow>
-            <m:mo>d</m:mo>
-            <xsl:apply-templates select = "*[1]" mode = "semantics"/>
-          </m:mrow>
-        </m:mfrac>
-      </xsl:if>
-    </xsl:for-each>
-    <xsl:apply-templates select = "*[last()]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:lowlimit | m:uplimit | m:bvar | m:degree | m:logbase">
-  <xsl:apply-templates select="*" mode = "semantics"/>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:divergence[1] | m:grad[1] | m:curl[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-      <xsl:if test="*[1]=m:divergence">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:divergence/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:divergence/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'div'"/>
-      </xsl:if>
-      <xsl:if test="*[1]=m:grad">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:grad/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:grad/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'grad'"/>
-      </xsl:if>
-      <xsl:if test="*[1]=m:curl">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:curl/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:curl/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'curl'"/>
-      </xsl:if>
-    </m:mo>
-    <xsl:choose>
-      <xsl:when test="*[2]=m:ci">
-        <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <m:mfenced separators="">
-          <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-        </m:mfenced>
-      </xsl:otherwise>
-    </xsl:choose>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:laplacian[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:msup>
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:laplacian/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:laplacian/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:text disable-output-escaping='yes'>&#x0394;</xsl:text></m:mo>
-      <m:mn>2</m:mn>
-    </m:msup>
-    <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** SET THEORY ***************** -->
-
-<xsl:template match = "m:set | m:list">
-  <m:mfenced open="{{" close="}}" separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[1]=m:bvar and *[2]=m:condition">
-      <xsl:apply-templates select="m:bvar" mode = "semantics"/>
-      <m:mo>|</m:mo>
-      <xsl:apply-templates select="m:condition" mode = "semantics"/>
-    </xsl:if>
-    <xsl:if test="*[1]=m:condition and not(child::m:bvar)">
-      <m:mfenced open="" close="" separators=",">
-        <xsl:for-each select = "*[not(self::m:condition) and not(self::m:bvar)]">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-      <m:mo>|</m:mo>
-      <xsl:apply-templates select="m:condition" mode = "semantics"/>
-    </xsl:if>
-    <xsl:if test="not(child::m:bvar) and not(child::m:condition)">
-      <m:mfenced open="" close="" separators=",">
-        <xsl:for-each select = "*">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-    </xsl:if>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:union[1]]">
-  <xsl:param name="IN_OP" select="$DOESNT_MATTER"/>
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $UNION_PREC or $IN_PREC=$UNION_PREC
-                    and $PARAM=$PAR_SAME and not($IN_OP=$UNION_OP)">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="union">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="union">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="union">
-          <xsl:with-param name="IN_OP" select="$UNION_OP"/>
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:union[1]]" mode="union">
-  <xsl:param name="IN_OP" select="$DOESNT_MATTER"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode="semantics">
-    <xsl:with-param name="IN_PREC" select="$UNION_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:union/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:union/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x22C3;</m:mo>
-<!-- HELM: not rendered correctly <![CDATA[&Union;]]> -->
-  <!--   <xsl:text disable-output-escaping="yes">&#x22C3;</xsl:text></m:mo>-->
-    <xsl:apply-templates select = "." mode="semantics">
-      <xsl:with-param name="PARAM" select="$PAR_SAME"/>    <!--new-->
-      <xsl:with-param name="IN_PREC" select="$UNION_PREC"/>
-      <xsl:with-param name="IN_OP" select="$UNION_OP"/>    <!--new-->
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:intersect[1]]">
-  <xsl:param name="IN_OP" select="$DOESNT_MATTER"/>
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $INTERSECT_PREC or $IN_PREC=$INTERSECT_PREC
-                    and $PARAM=$PAR_SAME and not($IN_OP=$INTERSECT_OP)">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="intersect">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="intersect">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="intersect">
-          <xsl:with-param name="IN_OP" select="$INTERSECT_OP"/>
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:intersect[1]]" mode="intersect">
-  <xsl:param name="IN_OP" select="$DOESNT_MATTER"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode="semantics">
-    <xsl:with-param name="IN_PREC" select="$INTERSECT_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:intersect/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:intersect/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Intersection;]]> -->
-      <xsl:text disable-output-escaping="yes">&#x22C2;</xsl:text></m:mo>
-    <xsl:apply-templates select = "." mode="semantics">
-      <xsl:with-param name="PARAM" select="$PAR_SAME"/>    <!--new-->
-      <xsl:with-param name="IN_PREC" select="$INTERSECT_PREC"/>
-      <xsl:with-param name="IN_OP" select="$UNION_OP"/>    <!--new-->
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:setdiff[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $SETDIFF_PREC or $IN_PREC=$SETDIFF_PREC
-                    and $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="setdiff">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="setdiff">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="setdiff">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:setdiff[1]]" mode="setdiff">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$SETDIFF_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:setdiff/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:setdiff/@id"/>
-          </xsl:attribute>
-        </xsl:if>\</m:mo>
-  <xsl:apply-templates select = "*[3]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$SETDIFF_PREC"/>
-    <xsl:with-param name="PARAM" select="$PAR_SAME"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-  </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:cartesianproduct[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $CARTPROD_PREC or $IN_PREC=$CARTPROD_PREC
-                    and $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="cartprod">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="cartprod">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="cartprod">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:cartesianproduct[1]]" mode="cartprod">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$CARTPROD_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:cartesianproduct/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:cartesianproduct/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&times;]]> -->
-     <xsl:text disable-output-escaping="yes">&#x00D7;</xsl:text></m:mo>
-    <xsl:apply-templates select = "." mode="semantics">
-      <xsl:with-param name="IN_PREC" select="$CARTPROD_PREC"/>
-      <xsl:with-param name="PARAM" select="$PAR_SAME"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<!-- HELM WARNING: card id was lost! -->
-<xsl:template match = "m:apply[m:card[1]]">
-<!-- HELM: was
-  <m:mfenced open="|" close="|" separators=",">
-     Now is: mrow + mo -->
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:card/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:card/@id"/>
-          </xsl:attribute>
-        </xsl:if>|</mo>
-    <xsl:for-each select = "*[position()>1]">
-      <xsl:apply-templates select = "." mode="semantics"/>
-    </xsl:for-each>
-     <mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:setdiff/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:setdiff/@id"/>
-          </xsl:attribute>
-        </xsl:if>|</mo>
-  </m:mrow>
-<!-- HELM:  </m:mfenced> -->
-</xsl:template>
-
-
-<!-- ***************** SEQUENCES AND SERIES ***************** -->
-
-<xsl:template match = "m:apply[m:sum[1] | m:product[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="*[2]=m:bvar and m:lowlimit and m:uplimit">
-        <m:munderover>
-          <m:mo>
-            <xsl:if test="*[1]=m:sum">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:sum/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:sum/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-             <xsl:text disable-output-escaping='yes'>&#x2211;</xsl:text>
-            </xsl:if>
-            <xsl:if test="*[1]=m:product">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:product/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:product/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-             <xsl:text disable-output-escaping='yes'>&#x220F;</xsl:text>
-            </xsl:if>
-          </m:mo>
-          <m:mrow>
-            <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-            <m:mo>=</m:mo>
-            <xsl:apply-templates select = "m:lowlimit" mode = "semantics"/>
-          </m:mrow>
-          <xsl:apply-templates select = "m:uplimit" mode = "semantics"/>
-        </m:munderover>
-        <xsl:apply-templates select = "*[5]" mode = "semantics"/>
-      </xsl:when>
-      <xsl:when test="*[2]=m:bvar and *[3]=m:condition">
-        <m:munder>
-          <m:mo>
-            <xsl:if test="*[1]=m:sum">
-             <xsl:text disable-output-escaping='yes'>&#x2211;</xsl:text>
-            </xsl:if>
-            <xsl:if test="*[1]=m:product">
-             <xsl:text disable-output-escaping='yes'>&#x220F;</xsl:text>
-            </xsl:if>
-          </m:mo>
-          <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-        </m:munder>
-        <xsl:apply-templates select = "*[4]" mode = "semantics"/>
-      </xsl:when>
-      <xsl:when test="*[2]=m:domainofapplication">
-        <m:munder>
-          <m:mo>
-            <xsl:if test="*[1]=m:sum">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:sum/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:sum/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Sum;]]> -->
-              <xsl:text disable-output-escaping="yes">&#x2211;</xsl:text>
-            </xsl:if>
-            <xsl:if test="*[1]=m:product">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:product/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:product/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Product;]]> -->
-              <xsl:text disable-output-escaping="yes">&#x220F;</xsl:text>
-            </xsl:if>
-          </m:mo>
-          <xsl:apply-templates select="m:domainofapplication" mode = "semantics"/>
-        </m:munder>
-        <m:mrow>
-          <xsl:apply-templates select="*[position()=last()]" mode = "semantics"/>
-          </m:mrow>
-        </xsl:when>
-      </xsl:choose>
-    </m:mrow>
-  </xsl:template>
-  
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='int']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:int]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-    <xsl:when test="m:condition">
-      <m:msub>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:int/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:int/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Integral;]]> -->
-         <xsl:text disable-output-escaping="yes">&#x222B;</xsl:text></m:mo>
-        <xsl:apply-templates select="m:condition" mode="semantics"/>
-      </m:msub>
-      <m:mrow>
-        <xsl:apply-templates select="*[position()=last()]" mode="semantics"/>
-      </m:mrow>
-      <m:mrow>
-        <m:mo>d</m:mo>
-        <xsl:apply-templates select="m:bvar" mode="semantics"/>
-      </m:mrow>
-    </xsl:when>
-    <xsl:when test="m:domainofapplication">
-      <m:msub>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:int/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:int/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Integral;]]> -->
-         <xsl:text disable-output-escaping="yes">&#x222B;</xsl:text></m:mo>
-        <xsl:apply-templates select="m:domainofapplication" mode="semantics"/>
-      </m:msub>
-      <m:mrow>
-        <xsl:apply-templates select="*[position()=last()]" mode="semantics" />
-      </m:mrow>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:choose>
-        <xsl:when test="m:interval">
-          <m:msubsup>
-            <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:int/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:int/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Integral;]]> -->
-             <xsl:text disable-output-escaping="yes">&#x222B;</xsl:text></m:mo>
-            <xsl:apply-templates select="m:interval/*[position()=1]" mode="semantics" />
-            <xsl:apply-templates select="m:interval/*[position()=2]" mode="semantics"/>
-          </m:msubsup>
-          <xsl:apply-templates select="*[position()=last()]" mode="semantics"/>
-          <m:mo>d</m:mo>
-          <xsl:apply-templates select="m:bvar" mode="semantics"/>
-        </xsl:when>
-        <xsl:when test="m:lowlimit">
-        <m:msubsup>
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:int/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:int/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Integral;]]> -->
-           <xsl:text disable-output-escaping="yes">&#x222B;</xsl:text></m:mo>
-          <m:mrow><xsl:apply-templates select="m:lowlimit" mode="semantics"/></m:mrow>
-          <m:mrow><xsl:apply-templates select="m:uplimit" mode="semantics"/></m:mrow>
-        </m:msubsup>
-        <xsl:apply-templates select="*[position()=last()]" mode="semantics"/>
-        <m:mo>d</m:mo><xsl:apply-templates select="m:bvar" mode="semantics"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:int/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:int/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Integral;]]> -->
-         <xsl:text disable-output-escaping="yes">&#x222B;</xsl:text></m:mo>
-       <xsl:apply-templates select="*[position()=last()]" mode="semantics"/>
-       <m:mo>d</m:mo><xsl:apply-templates select="m:bvar" mode="semantics"/>
-      </xsl:otherwise>
-      </xsl:choose>
-    </xsl:otherwise>
-    </xsl:choose>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:limit[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:munder>
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:lim/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:lim/@id"/>
-          </xsl:attribute>
-        </xsl:if>lim</m:mo>
-      <m:mrow>
-        <xsl:if test="*[2]=m:bvar and *[3]=m:lowlimit">
-            <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-            <m:mo><xsl:text disable-output-escaping='yes'>&#x2192;</xsl:text></m:mo>
-            <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-        </xsl:if>
-        <xsl:if test="*[2]=m:bvar and *[3]=m:condition">
-          <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-        </xsl:if>
-      </m:mrow>
-    </m:munder>
-    <xsl:apply-templates select = "*[4]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** TRIGONOMETRY ***************** -->
-
-<xsl:template match = "m:apply[*[1][self::m:sin | self::m:cos |
-                       self::m:tan | self::m:sec | self::m:csc |
-                       self::m:cot | self::m:sinh | self::m:cosh |
-                       self::m:tanh | self::m:sech | self::m:csch |
-                       self::m:coth | self::m:arcsin | self::m:arccos |
-                       self::m:arctan | self::m:arcsec | self::m:arccsc | 
-                       self::m:arccot | self::m:arcsinh | self::m:arccosh |
-                       self::m:arctanh | self::m:arcsech | self::m:arccsch |
-                       self::m:arccoth ] ]">
-                        
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="not(parent::m:apply[m:power[1]])">
-      <xsl:apply-templates select = "*[1]" mode = "trigonometry"/>
-    </xsl:if>
-    <xsl:if test="parent::m:apply[m:power[1]]">
-      <m:msup>
-        <xsl:apply-templates select = "*[1]" mode = "trigonometry"/>
-        <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-      </m:msup>
-    </xsl:if>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "*" mode="trigonometry">
-  <m:mo>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="self::m:sin">
-        <xsl:value-of select="'sin'"/>
-      </xsl:when>
-      <xsl:when test="self::m:cos">
-        <xsl:value-of select="'cos'"/>
-      </xsl:when>
-      <xsl:when test="self::m:tan">
-        <xsl:value-of select="'tan'"/>
-      </xsl:when>
-      <xsl:when test="self::m:sec">
-        <xsl:value-of select="'sec'"/>
-      </xsl:when>
-      <xsl:when test="self::m:csc">
-        <xsl:value-of select="'csc'"/>
-      </xsl:when>
-      <xsl:when test="self::m:cot">
-        <xsl:value-of select="'cot'"/>
-      </xsl:when>
-      <xsl:when test="self::m:sinh">
-        <xsl:value-of select="'sinh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:cosh">
-        <xsl:value-of select="'cosh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:tanh">
-        <xsl:value-of select="'tanh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:sech">
-        <xsl:value-of select="'sech'"/>
-      </xsl:when>
-      <xsl:when test="self::m:csch">
-        <xsl:value-of select="'csch'"/>
-      </xsl:when>
-      <xsl:when test="self::m:coth">
-        <xsl:value-of select="'coth'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arcsin">
-        <xsl:value-of select="'arcsin'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccos">
-        <xsl:value-of select="'arccos'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arctan">
-        <xsl:value-of select="'arctan'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arcsec">
-        <xsl:value-of select="'arcsec'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccsc">
-        <xsl:value-of select="'arccsc'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccot">
-        <xsl:value-of select="'arccot'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arcsinh">
-        <xsl:value-of select="'arcsinh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccosh">
-        <xsl:value-of select="'arccosh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arctanh">
-        <xsl:value-of select="'arctanh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arcsech">
-        <xsl:value-of select="'arcsech'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccsch">
-        <xsl:value-of select="'arccsch'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccoth">
-        <xsl:value-of select="'arccot'"/>
-      </xsl:when>
-    </xsl:choose>
-  </m:mo>
-</xsl:template>
-
-
-<!-- ***************** STATISTICS ***************** -->
-
-<!-- HELM WARNING: mean id was lost! -->
-<xsl:template match = "m:apply[m:mean[1]]">
-<!-- HELM: was
-  <m:mfenced open="&lt;" close="&gt;" separators=",">
-     Now is: mrow + mo + separator (mo) -->
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:mean/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:mean/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x003C;</m:mo>
-    <xsl:for-each select = "*[position()>1]">
-<!-- HELM: if added -->
-      <xsl:if test="position() != 1">
-       <m:mo separator="true">,</m:mo>
-      </xsl:if> 
-      <xsl:apply-templates select = "." mode="semantics"/>
-    </xsl:for-each>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:mean/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:mean/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x003E;</m:mo>
-   </m:mrow>
-<!-- HELM:  </m:mfenced> -->
-</xsl:template>
-
-<xsl:template match = "m:apply[m:sdev[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:sdev/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:sdev/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-     <xsl:text disable-output-escaping='yes'>&#x03C3;</xsl:text></m:mo>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:variance[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:variance/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:variance/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-     <xsl:text disable-output-escaping='yes'>&#x03C3;</xsl:text></m:mo>
-    <m:msup>
-      <m:mfenced separators=",">
-        <xsl:for-each select = "*[position()>1]">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-      <m:mn>2</m:mn>
-    </m:msup>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:median[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:median/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:median/@id"/>
-          </xsl:attribute>
-        </xsl:if>median</m:mo>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:mode[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:mode/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:mode/@id"/>
-          </xsl:attribute>
-        </xsl:if>mode</m:mo>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<!-- HELM WARNING: mean id was lost! -->
-<xsl:template match = "m:apply[m:moment[1]]">
-<!-- HELM: was
-  <m:mfenced open="&lt;" close="&gt;" separators="">
-     Now is: mrow + mo -->
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:moment/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:momemt/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x003C;</m:mo>
-    <xsl:if test="*[2]=m:degree and not(*[3]=m:momentabout)">
-      <m:msup>
-        <xsl:apply-templates select="*[3]" mode = "semantics"/>
-          <xsl:apply-templates select="*[2]" mode = "semantics"/>
-          </m:msup>
-        </xsl:if>
-        <xsl:if test="*[2]=m:degree and *[3]=m:momentabout">
-          <m:msup>
-            <xsl:apply-templates select="*[4]" mode = "semantics"/>
-            <xsl:apply-templates select="*[2]" mode = "semantics"/>
-      </m:msup>  
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:degree) and *[2]=m:momentabout">
-       <xsl:for-each select = "*[position()>2]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:degree) and not(*[2]=m:momentabout)">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:mean/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:mean/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x003E;</m:mo>
-  </m:mrow>
-<!-- HELM:  </m:mfenced> -->
-</xsl:template>
-
-
-<!-- ***************** LINEAR ALGEBRA ***************** -->
-
-<xsl:template match="m:vector">
-  <m:mfenced separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mtable>
-      <xsl:for-each select="*">
-        <m:mtd>
-          <xsl:apply-templates select="." mode = "semantics"/>
-        </m:mtd>
-      </xsl:for-each>
-    </m:mtable>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:matrix">
-  <m:mfenced separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mtable>
-      <xsl:apply-templates select="*" mode = "semantics"/>
-    </m:mtable>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:matrixrow">
-  <m:mtr>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:for-each select="*">
-      <m:mtd>
-        <xsl:apply-templates select="." mode = "semantics"/>
-      </m:mtd>
-    </xsl:for-each>
-  </m:mtr>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:determinant[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:determinant/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:determinant/@id"/>
-          </xsl:attribute>
-        </xsl:if>det</m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:transpose[1]]">
-  <m:msup>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:transpose/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:transpose/@id"/>
-          </xsl:attribute>
-        </xsl:if>T</m:mo>
-  </m:msup>
-</xsl:template>
-
-<!-- HELM: ERROR, this template generates the selected content elements
-     and doesn't generate the presentation for selector                 -->
-<!--<xsl:template match = "m:apply[m:selector[1]]">
-  <xsl:if test="*[2]=m:matrix and *[3]=m:cn">
-      <xsl:variable name="m" select = "*[3]"/>
-      <xsl:choose>
-        <xsl:when test="*[4]=m:cn">
-          <xsl:variable name="n" select = "*[4]"/>
-          <xsl:copy-of select = "m:matrix/*[position()=$m]/*[position()=$n]"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:copy-of select = "m:matrix/*[position()=$m]"/>
-        </xsl:otherwise>
-      </xsl:choose>
-  </xsl:if>
-  <xsl:if test="(*[2]=m:vector or *[2]=m:list) and *[3]=m:cn">
-    <xsl:variable name="m" select = "*[3]"/>
-    <xsl:copy-of select = "*[2]/*[position()=$m]"/>
-  </xsl:if>
-</xsl:template> -->
-
-<xsl:template match = "m:apply[m:selector[1]]">
-   <msub>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-     <xsl:attribute name="xref">
-      <xsl:value-of select="@id"/>
-     </xsl:attribute>
-    </xsl:if> 
-    <xsl:apply-templates select = "*[2]" mode="semantics"/>
-    <m:mrow>
-     <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:selector/@id">
-      <xsl:attribute name="xref">
-       <xsl:value-of select="m:selector/@id"/>
-      </xsl:attribute>
-     </xsl:if>
-     <xsl:choose>
-     <xsl:when test="*[3]=m:cn">
-      <xsl:apply-templates select = "*[3]" mode="semantics"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <m:mi>*</m:mi>
-     </xsl:otherwise>
-     </xsl:choose> 
-     <xsl:if test="*[2]=m:matrix and *[4]=m:cn">
-      <xsl:apply-templates select = "*[4]" mode="semantics"/>
-     </xsl:if>
-    </m:mrow>
-   </msub>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:vectorproduct[1] |
-                                 m:scalarproduct[1] | m:outerproduct[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select="*[2]" mode = "semantics"/>
-    <m:mo>
-      <xsl:if test="m:vectorproduct[1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:vectorproduct/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:vectorproduct/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-       <xsl:text disable-output-escaping='yes'>&#x2A2F;</xsl:text>
-      </xsl:if>
-      <xsl:if test="m:scalarproduct[1] | m:outerproduct[1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and *[1]/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="*[1]/@id"/>
-          </xsl:attribute>
-        </xsl:if>           
-        <xsl:value-of select="'.'"/>
-      </xsl:if>
-    </m:mo>
-    <xsl:apply-templates select="*[3]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** CONSTANT and SYMBOL ELEMENTS ***************** -->
-
-<xsl:template match="m:integers">
-   <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:integers/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:integers/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-    <xsl:text disable-output-escaping='yes'>&#x2124;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:reals">
-   <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:reals/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:reals/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-    <xsl:text disable-output-escaping='yes'>&#x211D;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:rationals">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:rationals/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:rationals/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-   <xsl:text disable-output-escaping='yes'>&#x211A;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:naturalnumbers">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:naturalnumbers/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:naturalnumbers/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-   <xsl:text disable-output-escaping='yes'>&#x2115;</xsl:text></m:mi> 
-</xsl:template>
-
-<xsl:template match="m:complexes">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:complexes/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:complexes/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-   <xsl:text disable-output-escaping='yes'>&#x2102;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:primes">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:primes/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:primes/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-   <xsl:text disable-output-escaping='yes'>&#x2119;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:exponentiale">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:exponentiale/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:exponentiale/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-   <xsl:text disable-output-escaping="yes">&#x2147;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:imaginaryi">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:imaginaryi/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:imaginaryi/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&ImaginaryI;]]> -->
-   <xsl:text disable-output-escaping="yes">&#xF74E;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:notanumber">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:notanumber/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:notanumber/@id"/>
-          </xsl:attribute>
-        </xsl:if>NaN</m:mi>  
-</xsl:template>
-
-<xsl:template match="m:true">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:true/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:true/@id"/>
-          </xsl:attribute>
-        </xsl:if>true</m:mi>  
-</xsl:template>
-
-<xsl:template match="m:false">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:false/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:false/@id"/>
-          </xsl:attribute>
-        </xsl:if>false</m:mi>   
-</xsl:template>
-
-<xsl:template match="m:emptyset">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:emptyset/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:emptyset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&empty;]]> -->
-   <xsl:text disable-output-escaping="yes">&#xE2D3;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:pi">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:pi/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:pi/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&pi;]]> -->
-   <xsl:text disable-output-escaping="yes">&#x03C0;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:eulergamma">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:eulergamma/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:eulergamma/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&gamma;]]> -->
-   <xsl:text disable-output-escaping="yes">&#x03B3;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:infinity">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:infinity/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:infinity/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&infin;]]> -->
-   <xsl:text disable-output-escaping="yes">&#x221E;</xsl:text></m:mi>
-</xsl:template>
-
-</xsl:stylesheet>
-
-
diff --git a/helm/style/mmlctop.xsl-0.14 b/helm/style/mmlctop.xsl-0.14
deleted file mode 100755 (executable)
index 1568e1d..0000000
+++ /dev/null
@@ -1,3103 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- ******************************************************
-    
-     XSL Transform of MathML content to MathML presentation
-                                                    
-     Version 0.14, Dec. 13, 2000       
-     Authors Igor Rodionov <igor@csd.uwo.ca>,
-             Stephen Watt  <watt@csd.uwo.ca>.
-    
-     (C) Copyright 2000  Symbolic Computation Laboratory,
-                         University of Western Ontario,
-                         London, Canada N6A 5B7.
-     ****************************************************** -->
-
-
-<!-- ====================================================== -->
-<!--  April,28 2001 - HELM group:                           -->
-<!--  Added the namespace prefix to all the output elements -->
-<!--  Added the namespace prefix to all the xref attributes -->
-<!--  Changed the mml prefix into m                         -->
-<!--  Added xref to every mo element                        -->
-<!--  Changed mchar into the corresponding entity           -->
-<!--  First draft: April 27 2001, Irene Schena              -->
-<!-- ====================================================== -->
-
-<!-- Mostly complies with the W3C MathML 2.0 Candidate Recommenation 
-     of November 13, 2000.  The main difference is the use of <mchar>
-     which was removed from MathML 2.0 in the last working draft.
-  -->
-
-<xsl:stylesheet id="mmlctop.xsl"
-                version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!-- HELM: we don't have a default namespace.
-     Removed xmlns="http://www.w3.org/1998/Math/MathML" -->
-
-<!-- HELM: was
-<xsl:output method="xml" indent="yes"/>
--->
-<xsl:output method="xml"/>
-<!-- HELM -->
-
-<xsl:strip-space elements="apply semantics annotation-xml
-        csymbol fn cn ci interval matrix matrixrow vector
-        lambda bvar condition logbase degree set list
-        lowlimit uplimit"/>
-
-
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-<!--         Parameters, variables and constants           -->
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-
-<!-- ~~~~~~~~ Semantics related *constants*: ~~~~~~~~ -->
-
-<!-- Strip off semantics -->
-<xsl:variable name="SEM_STRIP" select="-1"/>
-
-<!-- Pass semantics "as is" -->
-<xsl:variable name="SEM_PASS" select="0"/>
-
-<!-- Add semantics at top level only -->
-<xsl:variable name="SEM_TOP" select="1"/>
-
-<!-- Add semantics at all levels -->
-<xsl:variable name="SEM_ALL" select="2"/>
-
-<!-- Semantics at top level only, with id refs -->
-<!-- NOTE: ids have to be already present in the
-           input for this feature to work. -->
-<xsl:variable name="SEM_XREF" select="3"/>
-
-<!-- No semantics at top level, with id refs -->
-<!-- NOTE: ids have to be already present in the
-           input for this feature to work. -->
-<xsl:variable name="SEM_XREF_EXT" select="4"/>
-
-
-<!-- ~~~~~~~~~~ Stylesheet *parameter*: SEM_SW ~~~~~~~~~~~~~~ -->
-<!-- Assumes one of the above values; SEM_PASS is the default -->
-<!-- The default can be overridden by specifying different    -->
-<!-- value on the command line when the stylesheet is invoked -->
-
-<!-- HELM: $SEM_SW was SEM_PASS (error!) -->
-<xsl:param name="SEM_SW" select="$SEM_XREF"/>
-
-<!-- ~~~~~~ Operator precedence definitions ~~~~~~ -->
-
-<xsl:variable name="NO_PREC" select="0"/>
-<xsl:variable name="UNION_PREC" select="1"/>
-<xsl:variable name="SETDIFF_PREC" select="1"/>
-<xsl:variable name="INTERSECT_PREC" select="3"/>
-<xsl:variable name="OR_PREC" select="5"/>
-<xsl:variable name="XOR_PREC" select="5"/>
-<xsl:variable name="AND_PREC" select="7"/>
-<xsl:variable name="PLUS_PREC" select="9"/>
-<xsl:variable name="MINUS_PREC" select="9"/>
-<xsl:variable name="MUL_PREC" select="11"/>
-<xsl:variable name="DIV_PREC" select="11"/>
-<xsl:variable name="NEG_PREC" select="13"/>
-<xsl:variable name="FUNCTION_PREC" select="99"/>
-
-<!-- ~~~~~ Miscellaneous constant definitions ~~~~~ -->
-
-<xsl:variable name="YES" select="1"/>
-<xsl:variable name="NO" select="0"/>
-<xsl:variable name="NO_PARAM" select="-1"/>
-<xsl:variable name="PAR_SAME" select="-3"/>
-<xsl:variable name="PAR_YES" select="-5"/>
-<xsl:variable name="PAR_NO" select="-7"/>
-
-
-<!-- +++++++++++++++++ INDEX OF TEMPLATES +++++++++++++++++++ -->
-
-<!-- All templates are subdivided into the following categories
-     (listed in the order of appearance in the stylesheet):
-
-THE TOPMOST ELEMENT: MATH
- math
-
-SEMANTICS HANDLING
- semantics
-
-BASIC CONTAINER ELEMENTS
- cn, ci, csymbol
-
-BASIC CONTENT ELEMENTS
- fn, interval, inverse, sep, condition, declare, lambda, compose, ident
-
-ARITHMETIC, ALGEBRA & LOGIC
- quotient, exp, factorial, max, min, minus, plus, power, rem, divide,
- times, root, gcd, and, or, xor, not, forall, exists, abs, conjugate,
- arg, real, imaginary
-
-RELATIONS
- neq, approx, tendsto, implies, in, notin, notsubset, notprsubset,
- subset, prsubset, eq, gt, lt, geq, leq, equivalent
-
-CALCULUS
- ln, log, diff, partialdiff, lowlimit, uplimit, bvar, degree,
- logbase, divergence, grad, curl, laplacian
-
-SET THEORY
- set, list, union, intersect, setdiff, card
-
-SEQUENCES AND SERIES
- sum, product, limit
-
-TRIGONOMETRY
- sin, cos, tan, sec, csc, cot, sinh, cosh, tanh, sech, csch, coth,
- arcsin, arccos, arctan
-
-STATISTICS
- mean, sdev, variance, median, mode, moment
-
-LINEAR ALGEBRA
- vector, matrix, matrixrow, determinant, transpose, selector,
- vectorproduct, scalarproduct, outerproduct
--->
-
-
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~ TEMPLATES ~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-
-
-<!-- ***************** THE TOPMOST ELEMENT: MATH ***************** -->
-
-<xsl:template match = "m:math">
-  <xsl:choose>
-    <xsl:when test="$SEM_SW=$SEM_TOP or $SEM_SW=$SEM_ALL and *[2] or
-                                                    $SEM_SW=$SEM_XREF">
-      <m:semantics>
-        <m:mrow>
-          <xsl:apply-templates mode = "semantics"/>
-        </m:mrow>
-        <m:annotation-xml encoding="MathML">
-          <xsl:copy-of select="*"/>
-        </m:annotation-xml>
-      </m:semantics>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:apply-templates mode = "semantics"/>
-      </m:mrow>  
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-
-<!-- ***************** SEMANTICS HANDLING ***************** -->
-
-<!-- This template is called recursively.  At each level   -->
-<!-- in the source tree it decides whether to strip off,   -->
-<!-- pass or add semantics at that level (depending on the -->
-<!-- value of SEM_SW parameter).  Then the actual template -->
-<!-- is applied to the node.                               -->
-
-<xsl:template match = "m:*" mode = "semantics">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$SEM_SW=$SEM_STRIP and self::m:semantics">
-      <xsl:apply-templates select="m:annotation-xml[@encoding='MathML']">
-        <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:when test="($SEM_SW=$SEM_PASS or $SEM_SW=$SEM_TOP) and self::m:semantics">
-      <m:semantics>
-        <xsl:apply-templates select="*[1]">
-          <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-        <xsl:copy-of select="m:annotation-xml"/>
-      </m:semantics>
-    </xsl:when>
-    <xsl:when test="$SEM_SW=$SEM_ALL">
-      <m:semantics>
-        <xsl:choose>
-          <xsl:when test="self::m:semantics">
-            <xsl:apply-templates select="*[1]">
-              <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-              <xsl:with-param name="PARAM" select="$PARAM"/>
-              <xsl:with-param name="PAREN" select="$PAREN"/>
-              <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-            </xsl:apply-templates>
-            <xsl:copy-of select="m:annotation-xml"/>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:apply-templates select=".">
-              <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-              <xsl:with-param name="PARAM" select="$PARAM"/>
-              <xsl:with-param name="PAREN" select="$PAREN"/>
-              <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-            </xsl:apply-templates>
-            <m:annotation-xml encoding="MathML">
-              <xsl:copy-of select="."/>
-            </m:annotation-xml>
-          </xsl:otherwise>
-        </xsl:choose>
-      </m:semantics>
-    </xsl:when>
-    <xsl:when test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:choose>
-<!-- HELM: syntax error: sematics -->
-        <xsl:when test="self::m:semantics">
-          <xsl:copy>
-            <xsl:copy-of select="@*"/>
-            <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-            </xsl:attribute>
-            <xsl:copy-of select="*[1]"/>
-            <xsl:copy-of select="m:annotation-xml"/>
-          </xsl:copy>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:apply-templates select=".">
-            <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-            <xsl:with-param name="PARAM" select="$PARAM"/>
-            <xsl:with-param name="PAREN" select="$PAREN"/>
-            <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-          </xsl:apply-templates>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:choose>
-        <xsl:when test="self::m:semantics">
-          <xsl:copy-of select="."/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:apply-templates select=".">
-            <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-            <xsl:with-param name="PARAM" select="$PARAM"/>
-            <xsl:with-param name="PAREN" select="$PAREN"/>
-            <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-          </xsl:apply-templates>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:semantics">
-  <xsl:apply-templates select="." mode = "semantics"/>
-</xsl:template>
-
-
-<!-- ***************** BASIC CONTAINER ELEMENTS ***************** -->
-
-<!-- HELM: cn could not contain MAthML presentation -->
-<xsl:template match = "m:cn">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-<!-- HELM: added -->
-<!-- CSC
-<xsl:choose>
-  <xsl:when test="child::text()">
--->
-<!-- HELM -->
-  <xsl:choose>
-    <xsl:when test=". &lt; 0 and $IN_PREC &gt; $NO_PREC and $PAREN=$PAR_NO
-                                                   and $PAR_NO_IGNORE=$NO">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="cn"/>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:choose>
-        <xsl:when test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:apply-templates select="." mode="cnid"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:apply-templates select="." mode="cn"/>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:otherwise>
-  </xsl:choose>
-<!-- HELM: added -->
-<!--CSC
-  </xsl:when>
-  <xsl:otherwise>
-   <m:mrow>
-    <xsl:attribute name="xref">
-     <xsl:value-of select="@id"/>
-    </xsl:attribute>
-    <xsl:copy-of select="*"/>
-   </m:mrow> 
-  </xsl:otherwise>
- </xsl:choose>
--->
-<!-- HELM -->
-</xsl:template>
-
-<xsl:template match = "m:cn" mode="cn">
-  <xsl:choose>
-    <xsl:when test="@base and (not(@type) or @type='integer' or @type='real')">
-      <m:msub>
-        <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='complex' and not(@base) and child::m:sep[1]">
-      <m:mfenced separators="">
-        <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
-        <xsl:if test="text()[2] &lt; 0">
-          <m:mo>-</m:mo>
-          <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
-        </xsl:if>
-        <xsl:if test="not(text()[2] &lt; 0)">
-          <m:mo>+</m:mo>
-          <m:mn> <xsl:value-of select="text()[2]"/> </m:mn>
-        </xsl:if>
-        <m:mo>&#x02062;</m:mo>
-        <m:mo>i</m:mo>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="@type='complex' and @base and child::m:sep[1]">
-      <m:msub>
-        <m:mfenced separators="">
-          <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-          <xsl:if test="text()[2] &lt; 0">
-            <m:mo>-</m:mo>
-            <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
-          </xsl:if>
-          <xsl:if test="not(text()[2] &lt; 0)">
-            <m:mo>+</m:mo>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </xsl:if>
-          <m:mo>&#x02062;</m:mo>
-          <m:mo>i</m:mo>
-        </m:mfenced>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='rational' and not(@base) and child::m:sep[1]">
-      <m:mfrac>
-        <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-        <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-      </m:mfrac>
-    </xsl:when>
-    <xsl:when test="@type='rational' and @base and child::m:sep[1]">
-      <m:msub>
-        <m:mfenced>
-          <m:mfrac>
-            <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </m:mfrac>
-        </m:mfenced>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='polar' and not(@base) and child::m:sep[1]">
-      <m:mrow>
-        <m:mo>Polar</m:mo>
-        <m:mo>&#x02062;</m:mo>
-        <m:mfenced separators=",">
-          <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-          <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-        </m:mfenced>
-      </m:mrow>
-    </xsl:when>
-    <xsl:when test="@type='polar' and @base and child::m:sep[1]">
-      <m:msub>
-        <m:mrow>
-          <m:mo>Polar</m:mo>
-          <m:mo>&#x02062;</m:mo>
-          <m:mfenced separators=",">
-            <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </m:mfenced>
-        </m:mrow>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-   </xsl:when>
-   <xsl:otherwise>
-<!--HELM: Was:
- <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
-HELM: Now is: -->
-    <xsl:choose>
-     <xsl:when test="child::text() and not(*[1])">
-      <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:choose>
-       <xsl:when test="not(*[2])">
-        <xsl:copy-of select="*[1]"/>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mrow>
-         <xsl:copy-of select="*|text()"/>
-        </m:mrow>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:otherwise>
-    </xsl:choose>
-<!-- HELM -->
-   </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:cn" mode="cnid">
-  <xsl:choose>
-    <xsl:when test="@base and (not(@type) or @type='integer' or @type='real')">
-      <m:msub xref="{@id}">
-        <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='complex' and not(@base) and child::m:sep[1]">
-      <m:mfenced separators="" xref="{@id}">
-        <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
-        <xsl:if test="text()[2] &lt; 0">
-          <m:mo>-</m:mo>
-          <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
-        </xsl:if>
-        <xsl:if test="not(text()[2] &lt; 0)">
-          <m:mo>+</m:mo>
-          <m:mn> <xsl:value-of select="text()[2]"/> </m:mn>
-        </xsl:if>
-        <m:mo>&#x02062;</m:mo>
-        <m:mo>i</m:mo>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="@type='complex' and @base and child::m:sep[1]">
-      <m:msub xref="{@id}">
-        <m:mfenced separators="">
-          <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-          <xsl:if test="text()[2] &lt; 0">
-            <m:mo>-</m:mo>
-            <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
-          </xsl:if>
-          <xsl:if test="not(text()[2] &lt; 0)">
-            <m:mo>+</m:mo>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </xsl:if>
-          <m:mo>&#x02062;</m:mo>
-          <m:mo>i</m:mo>
-        </m:mfenced>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='rational' and not(@base) and child::m:sep[1]">
-      <m:mfrac xref="{@id}">
-        <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-        <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-      </m:mfrac>
-    </xsl:when>
-    <xsl:when test="@type='rational' and @base and child::m:sep[1]">
-      <m:msub xref="{@id}">
-        <m:mfenced>
-          <m:mfrac>
-            <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </m:mfrac>
-        </m:mfenced>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='polar' and not(@base) and child::m:sep[1]">
-      <m:mrow xref="{@id}">
-        <m:mo>Polar</m:mo>
-        <m:mo>&#x02062;</m:mo>
-        <m:mfenced separators=",">
-          <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-          <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-        </m:mfenced>
-      </m:mrow>
-    </xsl:when>
-    <xsl:when test="@type='polar' and @base and child::m:sep[1]">
-      <m:msub xref="{@id}">
-        <m:mrow>
-          <m:mo>Polar</m:mo>
-          <m:mo>&#x02062;</m:mo>
-          <m:mfenced separators=",">
-            <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </m:mfenced>
-        </m:mrow>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:choose>
-     <xsl:when test="child::text() and not(*[1])">
-      <m:mn xref="{@id}"> <xsl:apply-templates mode = "semantics"/> </m:mn>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:variable name="id" select="@id"/>
-      <xsl:choose>
-       <xsl:when test="not(*[2])">
-        <xsl:for-each select="*[1]">
-         <xsl:copy>
-          <xsl:attribute name="xref">
-           <xsl:value-of select="$id"/>
-          </xsl:attribute>
-          <xsl:copy-of select="@*|*"/>
-         </xsl:copy>
-        </xsl:for-each>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mrow xref="{$id}">
-         <xsl:copy-of select="*|text()"/>
-        </m:mrow>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:otherwise>
-    </xsl:choose>
-   </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!-- HELM: ci could not contain MAthML presentation -->
-<xsl:template match = "m:ci">
-<!-- HELM -->
-  <xsl:choose>
-    <xsl:when test="@type='vector' or @type=matrix or @type=set">
-      <m:mi fontweight="bold">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates mode = "semantics"/>
-      </m:mi>
-    </xsl:when>
-    <xsl:when test="child::text() and not(child::*[1])">
-      <m:mi>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: added mode=semantics -->
-        <xsl:apply-templates mode = "semantics"/>
-      </m:mi>
-    </xsl:when>
-    <xsl:when test="child::text() and *[1] and not(*[1]=m:sep)">
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: added mode=semantics -->
-        <xsl:apply-templates mode = "semantics"/>
-      </m:mrow>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:if test="*[2]">
-        <m:mrow>
-          <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-            <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-            </xsl:attribute>
-          </xsl:if>
-          <xsl:apply-templates select="*"/>
-        </m:mrow>
-      </xsl:if>
-      <xsl:if test="not(*[2])">
-<!--HELM: Was:
-        <xsl:apply-templates select="*[1]"/>
-HELM: Now is: -->
-        <xsl:variable name="id" select="@id"/>
-        <xsl:for-each select="*[1]">
-         <xsl:copy>
-          <xsl:attribute name="xref">
-           <xsl:value-of select="$id"/>
-          </xsl:attribute>
-         <xsl:copy-of select="@*|*"/>
-         </xsl:copy>
-        </xsl:for-each>
-<!-- HELM -->
-      </xsl:if>
-    </xsl:otherwise>
-  </xsl:choose>
-<!-- HELM -->
-</xsl:template>
-
-<xsl:template match = "m:ci/m:*[not(self::m:sep)]">
-  <xsl:copy-of select = "."/>
-</xsl:template>
-
-<!-- HELM: previous Version x.xx from Feb. 18, 2000 -->
-<xsl:template match = "m:csymbol">
-<!-- HELM: added -->
-   <m:mrow>
-    <xsl:attribute name="xref">
-     <xsl:value-of select="@id"/>
-    </xsl:attribute>
-<!-- HELM -->
-   <xsl:choose>
-    <xsl:when test="*[1]">
-     <xsl:copy-of select = "*"/>
-    </xsl:when>
-   <xsl:otherwise>
-    <m:mo>
-     <xsl:apply-templates mode = "semantics"/>
-    </m:mo>
-   </xsl:otherwise>
-  </xsl:choose>
- </m:mrow>
-</xsl:template>
-
-
-<!-- HELM: csymbol cannot contain ci or cn elements, but only text or 
-presentation elements. PCDATA should render as if it were wrapped in 
-an mo. Mixed content: mrow which contains mo + presentation elements -->
-<!--<xsl:template match = "m:csymbol/m:*">
-  <xsl:choose>
-    <xsl:when test="self::m:cn or self::m:ci">
-      <xsl:apply-templates mode = "semantics"/>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:copy-of select = "."/>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:csymbol/text()">
-  <xsl:choose>
-    <xsl:when test=". &lt; 0 or . = 0 or . &gt; 0">
-      <mn> <xsl:copy-of select = "."/> </mn>
-    </xsl:when>
-    <xsl:otherwise>
-      <mi> <xsl:copy-of select = "."/> </mi>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>-->
-
-
-<!-- ***************** BASIC CONTENT ELEMENTS ***************** -->
-
-<xsl:template match = "m:apply[m:*[1][self::m:fn]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "m:fn[1]" mode = "semantics"/>
-    <m:mo> 
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:fn/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x02061;</m:mo>
-    <m:mfenced separators=",">
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:fn">
-  <xsl:apply-templates select = "*[1]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-  </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match = "m:interval">
-  <m:mfenced separators=",">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="@closure='closed' or @closure='closed-open'">
-      <xsl:attribute name="open">[</xsl:attribute>
-    </xsl:if>
-    <xsl:if test="@closure='closed' or @closure='open-closed'">
-      <xsl:attribute name="close">]</xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select="*" mode = "semantics"/>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:*[1][self::m:apply[m:inverse[1]]]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "*[1]" mode = "semantics"/>
-    <m:mo>&#x02061;</m:mo>
-    <m:mfenced separators=",">
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mfenced>
- </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[*[1][self::m:inverse]]">
-  <xsl:choose>
-    <xsl:when test="*[2]=m:exp or *[2]=m:ln or *[2]=m:sin or *[2]=m:cos or
-                    *[2]=m:tan or *[2]=m:sec or *[2]=m:csc or *[2]=m:cot or
-                    *[2]=m:sinh or *[2]=m:cosh or *[2]=m:tanh or *[2]=m:sech or
-                    *[2]=m:csch or *[2]=m:coth or *[2]=m:arcsin or
-                    *[2]=m:arccos or *[2]=m:arctan">
-      <m:mo>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]" mode="inverse"/>
-      </m:mo>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:msup>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select = "*[2]"/>
-        <m:mfenced>
-          <m:mn>-1</m:mn>
-        </m:mfenced>
-      </m:msup>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "*" mode="inverse">
-  <xsl:choose>
-    <xsl:when test="self::m:exp">
-      <xsl:value-of select="'ln'"/>
-    </xsl:when>
-    <xsl:when test="self::m:ln">
-      <xsl:value-of select="'exp'"/>
-    </xsl:when>
-    <xsl:when test="self::m:sin">
-      <xsl:value-of select="'arcsin'"/>
-    </xsl:when>
-    <xsl:when test="self::m:cos">
-      <xsl:value-of select="'arccos'"/>
-    </xsl:when>
-    <xsl:when test="self::m:tan">
-      <xsl:value-of select="'arctan'"/>
-    </xsl:when>
-    <xsl:when test="self::m:sec">
-      <xsl:value-of select="'arcsec'"/>
-    </xsl:when>
-    <xsl:when test="self::m:csc">
-      <xsl:value-of select="'arccsc'"/>
-    </xsl:when>
-    <xsl:when test="self::m:cot">
-      <xsl:value-of select="'arccot'"/>
-    </xsl:when>
-    <xsl:when test="self::m:sinh">
-      <xsl:value-of select="'arcsinh'"/>
-    </xsl:when>
-    <xsl:when test="self::m:cosh">
-      <xsl:value-of select="'arccosh'"/>
-    </xsl:when>
-    <xsl:when test="self::m:tanh">
-      <xsl:value-of select="'arctanh'"/>
-    </xsl:when>
-    <xsl:when test="self::m:sech">
-      <xsl:value-of select="'arcsech'"/>
-    </xsl:when>
-    <xsl:when test="self::m:csch">
-      <xsl:value-of select="'arccsch'"/>
-    </xsl:when>
-    <xsl:when test="self::m:coth">
-      <xsl:value-of select="'arccoth'"/>
-    </xsl:when>
-    <xsl:when test="self::m:arcsin">
-      <xsl:value-of select="'sin'"/>
-    </xsl:when>
-    <xsl:when test="self::m:arccos">
-      <xsl:value-of select="'cos'"/>
-    </xsl:when>
-    <xsl:when test="self::m:arctan">
-      <xsl:value-of select="'tan'"/>
-    </xsl:when>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:sep"/>
-
-<xsl:template match = "m:condition">
-  <xsl:choose>
-    <xsl:when test="parent::m:apply[m:forall[1]]"/>
-    <xsl:otherwise>
-      <xsl:choose>
-        <xsl:when test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <m:mrow xref="{@id}">
-            <xsl:apply-templates select="*" mode = "semantics"/>
-          </m:mrow>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:if test="not(*[2])">
-            <xsl:apply-templates select="*" mode = "semantics"/>
-          </xsl:if>
-          <xsl:if test="*[2]">
-            <m:mrow>
-              <xsl:apply-templates select="*" mode = "semantics"/>
-            </m:mrow>
-          </xsl:if>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:declare"/>
-
-<xsl:template match = "m:lambda">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>&#x0039B;</m:mo>
-    <m:mo>&#x02061;</m:mo>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*">
-        <xsl:choose>
-          <xsl:when test="self::m:ci or self::m:cn">
-            <xsl:apply-templates select = "." mode="semantics"/>
-          </xsl:when>
-          <xsl:otherwise>
-            <m:mrow>
-              <xsl:apply-templates select = "." mode="semantics"/>
-            </m:mrow>
-          </xsl:otherwise>
-        </xsl:choose>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[*[1][self::m:apply[m:compose[1]]]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "*[1]" mode = "semantics"/>
-    <m:mo>&#x02061;</m:mo>
-    <m:mfenced separators=",">
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mfenced>
- </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[*[1][self::m:compose]]">
-  <m:mfenced separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "m:*[2][self::m:ci[@type='fn'] |
-                                       self::m:fn]" mode="semantics"/>
-    <xsl:for-each select = "m:*[position()>2][self::m:ci[@type='fn'] |
-                                                            self::m:fn]">
-      <m:mo>
- <!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:compose/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x02218;</m:mo>
-      <xsl:apply-templates select = "." mode="semantics"/>
-    </xsl:for-each>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:ident">
-  <xsl:choose>
-    <xsl:when test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <m:mo xref="{@id}">id</m:mo>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mo>id</m:mo>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-
-<!-- ***************** ARITHMETIC, ALGEBRA & LOGIC ***************** -->
-
-<xsl:template match = "m:apply[m:quotient[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo form="prefix" fence="true" stretchy="true" lspace="0em" rspace="0em">&#x0230A;</m:mo>
-    <m:mfrac>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:quotient/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-      <m:mrow>
-        <xsl:apply-templates select="*[2]" mode = "semantics">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        </xsl:apply-templates>
-      </m:mrow>
-      <m:mrow>
-        <xsl:apply-templates select="*[3]" mode = "semantics">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </m:mfrac>
-    <m:mo form="postfix" fence="true" stretchy="true" lspace="0em" rspace="0em">&#x0230A;</m:mo>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[*[1][self::m:exp]]">
-  <m:msup>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-    <!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:exp/@id"/>
-          </xsl:attribute>
-        </xsl:if>e</m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-  </m:msup>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:factorial[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:factorial/@id"/>
-          </xsl:attribute>
-        </xsl:if>!</m:mo>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:max[1] | m:min[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[2]=m:bvar">
-      <m:munder>
-        <xsl:if test="*[1]=m:max">
-          <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:max/@id"/>
-          </xsl:attribute>
-        </xsl:if>max</m:mo>
-        </xsl:if>
-        <xsl:if test="*[1]=m:min">
-          <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:min/@id"/>
-          </xsl:attribute>
-        </xsl:if>min</m:mo>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]" mode = "semantics"/>
-      </m:munder>
-      <xsl:if test="*[3]=m:condition">
-        <m:mfenced open="{{" close="}}" separators="">
-          <m:mfenced open="" close="" separators=",">
-            <xsl:for-each select = "*[position()>3]">
-              <xsl:apply-templates select = "." mode="semantics"/>
-            </xsl:for-each>
-          </m:mfenced>
-          <m:mo>|</m:mo>
-          <xsl:apply-templates select="*[3]" mode = "semantics"/>
-        </m:mfenced>
-      </xsl:if>
-      <xsl:if test="not(*[3]=m:condition)">
-        <m:mfenced open="{{" close="}}" separators=",">
-          <xsl:for-each select = "*[position()>2]">
-            <xsl:apply-templates select = "." mode="semantics"/>
-          </xsl:for-each>
-        </m:mfenced>
-      </xsl:if>
-    </xsl:if>
-    <xsl:if test="*[2]=m:condition">
-      <xsl:if test="*[1]=m:max">
-        <m:mo>max</m:mo>
-      </xsl:if>
-      <xsl:if test="*[1]=m:min">
-        <m:mo>min</m:mo>
-      </xsl:if>
-      <m:mfenced open="{{" close="}}" separators="">
-        <xsl:if test="*[3]">
-          <m:mfenced open="" close="" separators=",">
-            <xsl:for-each select = "*[position()>2]">
-              <xsl:apply-templates select = "." mode="semantics"/>
-            </xsl:for-each>
-          </m:mfenced>
-          <m:mo>|</m:mo>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]" mode = "semantics"/>
-      </m:mfenced>
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:condition) and not(*[2]=m:bvar)">
-      <xsl:if test="*[1]=m:max">
-        <m:mo>max</m:mo>
-      </xsl:if>
-      <xsl:if test="*[1]=m:min">
-        <m:mo>min</m:mo>
-      </xsl:if>
-      <m:mfenced open="{{" close="}}" separators=",">
-        <xsl:for-each select = "*[position()>1]">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-    </xsl:if>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:minus[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $MINUS_PREC or $IN_PREC=$MINUS_PREC and
-                                                        $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="minus">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="minus">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="minus">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:minus[1]]" mode="minus">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:if test="not(*[3])">
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:minus/@id"/>
-          </xsl:attribute>
-        </xsl:if>-</m:mo>
-    <xsl:apply-templates select="*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$NEG_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:if>
-  <xsl:if test="*[3]">
-    <xsl:apply-templates select="*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$MINUS_PREC"/>
-      <xsl:with-param name="PARAM" select="$PARAM"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-    </xsl:apply-templates>
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:minus/@id"/>
-          </xsl:attribute>
-        </xsl:if>-</m:mo>
-    <xsl:apply-templates select="*[3]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$MINUS_PREC"/>
-      <xsl:with-param name="PARAM" select="$PAR_SAME"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:plus[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $PLUS_PREC or $IN_PREC=$PLUS_PREC and
-                                                      $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="plus">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="plus">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="plus">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:plus[1]]" mode="plus">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:if test="*[2]">
-    <xsl:apply-templates select="*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
-      <xsl:with-param name="PARAM" select="$PARAM"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-    </xsl:apply-templates>
-    <xsl:for-each select = "*[position()>2]">
-      <xsl:choose>
-        <xsl:when test=". &lt; 0">
-          <m:mo>-</m:mo>
-          <m:mn> <xsl:value-of select="-."/> </m:mn>
-        </xsl:when>
-        <xsl:when test="self::m:apply[m:minus[1]] and not(*[3])">
-          <xsl:apply-templates select="." mode = "semantics">
-            <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
-            <xsl:with-param name="PAREN" select="$PAREN"/>
-            <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-          </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-          <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:plus/@id"/>
-          </xsl:attribute>
-        </xsl:if>+</m:mo>
-          <xsl:apply-templates select="." mode = "semantics">
-            <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
-            <xsl:with-param name="PAREN" select="$PAREN"/>
-            <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-          </xsl:apply-templates>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:for-each>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:power[1]]">
-  <xsl:choose>
-    <xsl:when test="*[2]=m:apply[m:ln[1] | m:log[1] | m:abs[1] |
-                         m:gcd[1] | m:sin[1] | m:cos[1] | m:tan[1] |
-                         m:sec[1] | m:csc[1] | m:cot[1] | m:sinh[1] |
-                         m:cosh[1] | m:tanh[1] | m:sech[1] | m:csch[1] |
-                         m:coth[1] | m:arcsin[1] | m:arccos[1] |
-                         m:arctan[1]]">
-      <xsl:apply-templates select="*[2]" mode = "semantics"/>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:msup>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select = "*[2]" mode = "semantics">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-        </xsl:apply-templates>
-        <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-      </m:msup>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:rem[1] | m:divide[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $DIV_PREC or $IN_PREC=$DIV_PREC and
-                                                    $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="remdiv">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="remdiv">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="remdiv">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:rem[1] | m:divide[1]]" mode="remdiv">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$DIV_PREC"/>
-      <xsl:with-param name="PARAM" select="$PARAM"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <m:mo>
-    <xsl:if test="m:rem">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:rem/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-      <xsl:value-of select="'%'"/>
-    </xsl:if>
-    <xsl:if test="m:divide">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:divide/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-      <xsl:value-of select="'/'"/>
-    </xsl:if>
-  </m:mo>
-  <xsl:apply-templates select = "*[3]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$DIV_PREC"/>
-    <xsl:with-param name="PARAM" select="$PAR_SAME"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-  </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:times[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $MUL_PREC or $IN_PREC=$MUL_PREC and
-                                                    $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="times">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="times">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="times">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:times[1]]" mode="times">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select="*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$MUL_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:if test="*[3]">
-    <xsl:for-each select = "*[position()>2]">
-<!-- HELM: to distinguish between * and the application -->
-<!--      <m:mo>&#x02062;</m:mo> -->
-      <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:times/@id"/>
-          </xsl:attribute>
-        </xsl:if>*</m:mo>
-      <xsl:apply-templates select="." mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$MUL_PREC"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-      </xsl:apply-templates>
-    </xsl:for-each>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:root[1]]">
-  <m:msqrt>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[2]=m:degree">
-      <xsl:apply-templates select="*[3]" mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-      </xsl:apply-templates>
-      <xsl:apply-templates select="*[2]" mode = "semantics"/>
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:degree)">
-      <xsl:apply-templates select="*[2]" mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-      </xsl:apply-templates>
-      <m:mn>2</m:mn>
-    </xsl:if>
-  </m:msqrt>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:gcd[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="not(parent::m:apply[m:power[1]])">
-      <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:gcd/@id"/>
-          </xsl:attribute>
-        </xsl:if>gcd</m:mo>
-    </xsl:if>
-    <xsl:if test="parent::m:apply[m:power[1]]">
-      <m:msup>
-        <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:gcd/@id"/>
-          </xsl:attribute>
-        </xsl:if>gcd</m:mo>
-        <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-      </m:msup>
-    </xsl:if>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:and[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $AND_PREC">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="and">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="and">
-        <xsl:with-param name="PARAM" select="$IN_PREC"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="and">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:and[1]]" mode="and">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select="*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$AND_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:and/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x02227;</m:mo>
-    <xsl:apply-templates select="." mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$AND_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:or[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $OR_PREC">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="or">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="or">
-        <xsl:with-param name="PARAM" select="$IN_PREC"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="or">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:or[1]]" mode="or">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select="*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$OR_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo> 
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:or/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x02228;</m:mo>
-    <xsl:apply-templates select="." mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$OR_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:xor[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $XOR_PREC">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="xor">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                                                and not($SEM_SW=$SEM_ALL)">
-      <xsl:apply-templates select="." mode="xor">
-        <xsl:with-param name="PARAM" select="$IN_PREC"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="xor">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:xor[1]]" mode="xor">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select="*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$XOR_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
- <!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:xor/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x022BB;</m:mo>
-    <xsl:apply-templates select="." mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$XOR_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:not[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-<!-- HELM: was <m:mo>not</m:mo> -->
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:not/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x000AC;</m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-    </xsl:apply-templates>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:forall[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:forall/@id"/>
-          </xsl:attribute>
-        </xsl:if>for all</m:mo>
-    <xsl:if test="count(m:bvar) &gt; 1">
-      <m:mfenced separators=",">
-        <xsl:for-each select = "m:bvar">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-    </xsl:if>
-    <xsl:if test="count(m:bvar)=1">
-      <xsl:apply-templates select = "m:bvar" mode="semantics"/>
-    </xsl:if>
-    <xsl:if test="m:condition">
-      <m:mo>:</m:mo>
-      <xsl:apply-templates select = "m:condition/*" mode = "semantics"/>
-      <m:mo>,</m:mo>
-    </xsl:if>
-    <xsl:apply-templates select = "*[position()>1 and not(self::m:bvar) and
-                                not(self::m:condition)]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:exists[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo> 
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:exists/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x02203;</m:mo>
-    <xsl:if test="count(m:bvar) &gt; 1">
-      <m:mfenced separators=",">
-        <xsl:for-each select = "m:bvar">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-    </xsl:if>
-    <xsl:if test="count(m:bvar)=1">
-      <xsl:apply-templates select = "m:bvar" mode="semantics"/>
-    </xsl:if>
-    <xsl:if test="m:condition">
-      <m:mo>,</m:mo>
-      <xsl:apply-templates select = "m:condition/*" mode = "semantics"/>
-    </xsl:if>
-    <xsl:if test="*[position()>1 and not(self::m:bvar) and not(self::m:condition)]">
-      <m:mo>:</m:mo>
-      <xsl:apply-templates select = "*[position()>1 and not(self::m:bvar) and
-                                not(self::m:condition)]" mode = "semantics"/>
-    </xsl:if>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:abs[1]]">
-  <xsl:if test="not(parent::m:apply[m:power[1]])">
-    <m:mfenced open="|" close="|" separators="">
-      <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mfenced>
-  </xsl:if>
-  <xsl:if test="parent::m:apply[m:power[1]]">
-    <m:msup>
-      <m:mfenced open="|" close="|" separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-      </m:mfenced>
-      <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-    </m:msup>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:conjugate[1]]">
-  <m:mover>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mrow>
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mrow>
-    <m:mo>
- <!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:conjugate/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x00332;</m:mo>
-  </m:mover>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:arg[1] | m:real[1] | m:imaginary[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-      <xsl:if test="m:arg">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:arg/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'Arg'"/>
-      </xsl:if>
-      <xsl:if test="m:real">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:real/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'Re'"/>
-      </xsl:if>
-      <xsl:if test="m:imaginary">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:imaginary/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'Im'"/>
-      </xsl:if>
-    </m:mo>
-    <m:mfenced separators="">
-      <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** RELATIONS ***************** -->
-
-<xsl:template match = "m:apply[m:neq | m:approx | m:tendsto | m:implies
-                     | m:in | m:notin | m:notsubset | m:notprsubset
-                     | m:subset | m:prsubset | m:eq | m:gt | m:lt
-                     | m:geq | m:leq | m:equivalent]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[1]=m:neq or *[1]=m:approx or *[1]=m:tendsto or
-                  *[1]=m:implies or *[1]=m:in or *[1]=m:notin or
-                  *[1]=m:notsubset or *[1]=m:notprsubset">
-      <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-      <m:mo>
-        <xsl:if test="*[1]=m:neq">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:neq/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02260;
-        </xsl:if>
-        <xsl:if test="*[1]=m:approx">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:approx/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x0224A;
-        </xsl:if>
-        <xsl:if test="*[1]=m:tendsto">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:tendsto/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02192;
-        </xsl:if>
-        <xsl:if test="*[1]=m:implies">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:implies/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x021D2;
-        </xsl:if>
-        <xsl:if test="*[1]=m:in">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:in/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02208;
-        </xsl:if>
-        <xsl:if test="*[1]=m:notin">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:notin/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02209;
-        </xsl:if>
-        <xsl:if test="*[1]=m:notsubset">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:notsubset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02284;
-        </xsl:if>
-        <xsl:if test="*[1]=m:notprsubset">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:notprsubset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02288;
-        </xsl:if>
-      </m:mo>
-      <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-      <xsl:if test="*[1]=m:tendsto and m:tendsto[1][@type='below']">
-        <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:tendsto/@id"/>
-          </xsl:attribute>
-        </xsl:if>-</m:mo>
-      </xsl:if>
-      <xsl:if test="*[1]=m:tendsto and m:tendsto[1][@type='above']">
-        <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:tendsto/@id"/>
-          </xsl:attribute>
-        </xsl:if>+</m:mo>
-      </xsl:if>
-    </xsl:if>
-    <xsl:if test="*[1]=m:subset or *[1]=m:prsubset or *[1]=m:eq or *[1]=m:gt
-               or *[1]=m:lt or *[1]=m:geq or *[1]=m:leq or *[1]=m:equivalent">
-      <xsl:apply-templates select = "*[2]" mode="semantics"/>
-      <xsl:for-each select = "*[position()>2]">
-        <m:mo>
-          <xsl:if test="../*[self::m:subset][1]">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:subset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02286;
-          </xsl:if>
-          <xsl:if test="../*[self::m:prsubset][1]">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:prsubset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02282;
-          </xsl:if>
-          <xsl:if test="../*[self::m:eq][1]">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:eq/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-            <xsl:value-of select="'='"/>
-          </xsl:if>
-          <xsl:if test="../*[self::m:gt][1]">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:gt/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-            <xsl:value-of select="'&gt;'"/>
-          </xsl:if>
-          <xsl:if test="../*[self::m:lt][1]">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:lt/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-            <xsl:value-of select="'&lt;'"/>
-          </xsl:if>
-          <xsl:if test="../*[self::m:geq][1]">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:geq/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02265;
-          </xsl:if>
-          <xsl:if test="../*[self::m:leq][1]">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:leq/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02264;
-          </xsl:if>
-          <xsl:if test="../*[self::m:equivalent][1]">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:equivalent/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02261;
-          </xsl:if>
-        </m:mo>
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </xsl:if>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** CALCULUS ***************** -->
-
-<xsl:template match = "m:apply[*[1][self::m:ln]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="parent::m:apply[m:power[1]]">
-        <m:msup>
-          <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:ln/@id"/>
-          </xsl:attribute>
-        </xsl:if>ln</m:mo>
-          <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-        </m:msup>
-      </xsl:when>
-      <xsl:otherwise>
-        <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:ln/@id"/>
-          </xsl:attribute>
-        </xsl:if>ln</m:mo>
-      </xsl:otherwise>
-    </xsl:choose>
-    <m:mo>&#x02061;</m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-    </xsl:apply-templates>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:log[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="parent::m:apply[m:power[1]]">
-        <xsl:if test="not(*[2]=m:logbase)">
-          <m:msup>
-            <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:log/@id"/>
-          </xsl:attribute>
-        </xsl:if>log</m:mo>
-            <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-          </m:msup>
-        </xsl:if>
-        <xsl:if test="*[2]=m:logbase">
-          <m:msubsup>
-            <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:log/@id"/>
-          </xsl:attribute>
-        </xsl:if>log</m:mo>
-            <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-            <xsl:apply-templates select = "m:logbase" mode = "semantics"/>
-          </m:msubsup>
-        </xsl:if>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:if test="not(*[2]=m:logbase)">
-          <m:mo>log</m:mo>
-        </xsl:if>
-        <xsl:if test="*[2]=m:logbase">
-          <m:msub>
-            <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:log/@id"/>
-          </xsl:attribute>
-        </xsl:if>log</m:mo>
-            <xsl:apply-templates select = "m:logbase" mode = "semantics"/>
-          </m:msub>
-        </xsl:if>
-      </xsl:otherwise>
-    </xsl:choose>
-    <m:mo>&#x02061;</m:mo>
-    <xsl:if test="*[2]=m:logbase">
-      <xsl:apply-templates select = "*[3]" mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-      </xsl:apply-templates>
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:logbase)">
-      <xsl:apply-templates select = "*[2]" mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-      </xsl:apply-templates>
-    </xsl:if>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:diff[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[2]=m:bvar and m:bvar[*[2]=m:degree]">
-      <m:mfrac>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:diff/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <m:msup>
-          <m:mo>d</m:mo>
-          <xsl:apply-templates select = "m:bvar/m:degree" mode = "semantics"/>
-        </m:msup>
-        <m:mrow>
-          <m:mo>d</m:mo>
-          <m:msup>
-            <xsl:apply-templates select = "m:bvar/*[1]" mode = "semantics"/>
-            <xsl:apply-templates select = "m:bvar/m:degree" mode = "semantics"/>
-          </m:msup>
-        </m:mrow>
-      </m:mfrac>
-    </xsl:if>
-    <xsl:if test="*[2]=m:bvar and not(m:bvar[*[2]=m:degree])">
-      <m:mfrac>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:diff/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <m:mo>d</m:mo>
-        <m:mrow>
-          <m:mo>d</m:mo>
-          <xsl:apply-templates select = "m:bvar/*[1]" mode = "semantics"/>
-        </m:mrow>
-      </m:mfrac>
-    </xsl:if>
-    <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:partialdiff[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:for-each select = "m:bvar">
-      <xsl:if test="*[last()]=m:degree">
-        <m:mfrac>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:partialdiff/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-          <m:msup>
-             <m:mo>d</m:mo>
-             <xsl:apply-templates select = "m:degree" mode = "semantics"/>
-          </m:msup>
-          <m:mrow>
-            <m:mo>d</m:mo>
-            <m:msup>
-              <xsl:apply-templates select = "*[1]" mode = "semantics"/>
-              <xsl:apply-templates select = "m:degree" mode = "semantics"/>
-            </m:msup>
-          </m:mrow>
-        </m:mfrac>
-      </xsl:if>
-      <xsl:if test="not(*[last()]=m:degree)">
-        <m:mfrac>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:partialdiff/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-          <m:mo>d</m:mo>
-          <m:mrow>
-            <m:mo>d</m:mo>
-            <xsl:apply-templates select = "*[1]" mode = "semantics"/>
-          </m:mrow>
-        </m:mfrac>
-      </xsl:if>
-    </xsl:for-each>
-    <xsl:apply-templates select = "*[last()]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:lowlimit | m:uplimit | m:bvar | m:degree |
-                                                               m:logbase">
-  <xsl:apply-templates select="*" mode = "semantics"/>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:divergence[1] | m:grad[1] | m:curl[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-      <xsl:if test="*[1]=m:divergence">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:divergence/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'div'"/>
-      </xsl:if>
-      <xsl:if test="*[1]=m:grad">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:grad/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'grad'"/>
-      </xsl:if>
-      <xsl:if test="*[1]=m:curl">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:curl/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'curl'"/>
-      </xsl:if>
-    </m:mo>
-    <xsl:choose>
-      <xsl:when test="*[2]=m:ci">
-        <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <m:mfenced separators="">
-          <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-        </m:mfenced>
-      </xsl:otherwise>
-    </xsl:choose>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:laplacian[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:msup>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:laplacian/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-      <m:mo>&#x00394;</m:mo>
-      <m:mn>2</m:mn>
-    </m:msup>
-    <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** SET THEORY ***************** -->
-
-<xsl:template match = "m:set | m:list">
-  <m:mfenced open="{{" close="}}" separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[1]=m:bvar and *[2]=m:condition">
-      <xsl:apply-templates select="m:bvar" mode = "semantics"/>
-      <m:mo>|</m:mo>
-      <xsl:apply-templates select="m:condition" mode = "semantics"/>
-    </xsl:if>
-    <xsl:if test="*[1]=m:condition and not(child::m:bvar)">
-      <m:mfenced open="" close="" separators=",">
-        <xsl:for-each select = "*[not(self::m:condition) and not(self::m:bvar)]">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-      <m:mo>|</m:mo>
-      <xsl:apply-templates select="m:condition" mode = "semantics"/>
-    </xsl:if>
-    <xsl:if test="not(child::m:bvar) and not(child::m:condition)">
-      <m:mfenced open="" close="" separators=",">
-        <xsl:for-each select = "*">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-    </xsl:if>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:union[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $UNION_PREC or $IN_PREC=$UNION_PREC
-                    and $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="union">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="union">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="union">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:union[1]]" mode="union">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode="semantics">
-    <xsl:with-param name="IN_PREC" select="$UNION_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:union/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x022C3;</m:mo>
-    <xsl:apply-templates select = "." mode="semantics">
-      <xsl:with-param name="IN_PREC" select="$UNION_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:intersect[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $INTERSECT_PREC">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="intersect">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="intersect">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="intersect">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:intersect[1]]" mode="intersect">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode="semantics">
-    <xsl:with-param name="IN_PREC" select="$INTERSECT_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:intersect/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x022C2;</m:mo>
-    <xsl:apply-templates select = "." mode="semantics">
-      <xsl:with-param name="IN_PREC" select="$INTERSECT_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:setdiff[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $SETDIFF_PREC or $IN_PREC=$SETDIFF_PREC
-                    and $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="setdiff">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="setdiff">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="setdiff">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:setdiff[1]]" mode="setdiff">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$SETDIFF_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:setdiff/@id"/>
-          </xsl:attribute>
-        </xsl:if>\</m:mo>
-  <xsl:apply-templates select = "*[3]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$SETDIFF_PREC"/>
-    <xsl:with-param name="PARAM" select="$PAR_SAME"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-  </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:card[1]]">
-  <m:mfenced open="|" close="|" separators=",">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:for-each select = "*[position()>1]">
-      <xsl:apply-templates select = "." mode="semantics"/>
-    </xsl:for-each>
-  </m:mfenced>
-</xsl:template>
-
-
-<!-- ***************** SEQUENCES AND SERIES ***************** -->
-
-<xsl:template match = "m:apply[m:sum[1] | m:product[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="*[2]=m:bvar and m:lowlimit and m:uplimit">
-        <m:munderover>
-          <m:mo>
-            <xsl:if test="*[1]=m:sum">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:sum/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02211;
-            </xsl:if>
-            <xsl:if test="*[1]=m:product">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:product/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x0220F;
-            </xsl:if>
-          </m:mo>
-          <m:mrow>
-            <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-            <m:mo>=</m:mo>
-            <xsl:apply-templates select = "m:lowlimit" mode = "semantics"/>
-          </m:mrow>
-          <xsl:apply-templates select = "m:uplimit" mode = "semantics"/>
-        </m:munderover>
-        <xsl:apply-templates select = "*[5]" mode = "semantics"/>
-      </xsl:when>
-      <xsl:when test="*[2]=m:bvar and *[3]=m:condition">
-        <m:munder>
-          <m:mo>
-            <xsl:if test="*[1]=m:sum">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:sum/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02211;
-            </xsl:if>
-            <xsl:if test="*[1]=m:product">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:product/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x0220F;
-            </xsl:if>
-          </m:mo>
-          <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-        </m:munder>
-        <xsl:apply-templates select = "*[4]" mode = "semantics"/>
-      </xsl:when>
-    </xsl:choose>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:limit[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:munder>
-      <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:lim/@id"/>
-          </xsl:attribute>
-        </xsl:if>lim</m:mo>
-      <m:mrow>
-        <xsl:if test="*[2]=m:bvar and *[3]=m:lowlimit">
-            <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-            <m:mo>&#x02192;</m:mo>
-            <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-        </xsl:if>
-        <xsl:if test="*[2]=m:bvar and *[3]=m:condition">
-          <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-        </xsl:if>
-      </m:mrow>
-    </m:munder>
-    <xsl:apply-templates select = "*[4]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** TRIGONOMETRY ***************** -->
-
-<xsl:template match = "m:apply[*[1][self::m:sin | self::m:cos |
-                       self::m:tan | self::m:sec | self::m:csc |
-                       self::m:cot | self::m:sinh | self::m:cosh |
-                       self::m:tanh | self::m:sech | self::m:csch |
-                       self::m:coth | self::m:arcsin | self::m:arccos |
-                       self::m:arctan]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="not(parent::m:apply[m:power[1]])">
-      <xsl:apply-templates select = "*[1]" mode = "trigonometry"/>
-    </xsl:if>
-    <xsl:if test="parent::m:apply[m:power[1]]">
-      <m:msup>
-        <xsl:apply-templates select = "*[1]" mode = "trigonometry"/>
-        <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-      </m:msup>
-    </xsl:if>
-    <m:mo>&#x02061;</m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "*" mode="trigonometry">
-  <m:mo>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="self::m:sin">
-        <xsl:value-of select="'sin'"/>
-      </xsl:when>
-      <xsl:when test="self::m:cos">
-        <xsl:value-of select="'cos'"/>
-      </xsl:when>
-      <xsl:when test="self::m:tan">
-        <xsl:value-of select="'tan'"/>
-      </xsl:when>
-      <xsl:when test="self::m:sec">
-        <xsl:value-of select="'sec'"/>
-      </xsl:when>
-      <xsl:when test="self::m:csc">
-        <xsl:value-of select="'csc'"/>
-      </xsl:when>
-      <xsl:when test="self::m:cot">
-        <xsl:value-of select="'cot'"/>
-      </xsl:when>
-      <xsl:when test="self::m:sinh">
-        <xsl:value-of select="'sinh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:cosh">
-        <xsl:value-of select="'cosh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:tanh">
-        <xsl:value-of select="'tanh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:sech">
-        <xsl:value-of select="'sech'"/>
-      </xsl:when>
-      <xsl:when test="self::m:csch">
-        <xsl:value-of select="'csch'"/>
-      </xsl:when>
-      <xsl:when test="self::m:coth">
-        <xsl:value-of select="'coth'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arcsin">
-        <xsl:value-of select="'arcsin'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccos">
-        <xsl:value-of select="'arccos'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arctan">
-        <xsl:value-of select="'arctan'"/>
-      </xsl:when>
-    </xsl:choose>
-  </m:mo>
-</xsl:template>
-
-
-<!-- ***************** STATISTICS ***************** -->
-
-<xsl:template match = "m:apply[m:mean[1]]">
-  <m:mfenced open="&lt;" close="&gt;" separators=",">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:for-each select = "*[position()>1]">
-      <xsl:apply-templates select = "." mode="semantics"/>
-    </xsl:for-each>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:sdev[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:sdev/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x003C3;</m:mo>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:variance[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:variance/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x003C3;</m:mo>
-    <m:msup>
-      <m:mfenced separators=",">
-        <xsl:for-each select = "*[position()>1]">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-      <m:mn>2</m:mn>
-    </m:msup>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:median[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:median/@id"/>
-          </xsl:attribute>
-        </xsl:if>median</m:mo>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:mode[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:mode/@id"/>
-          </xsl:attribute>
-        </xsl:if>mode</m:mo>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:moment[1]]">
-  <m:mfenced open="&lt;" close="&gt;" separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[2]=m:degree">
-      <m:msup>
-        <xsl:apply-templates select="*[3]" mode = "semantics"/>
-        <xsl:apply-templates select="*[2]" mode = "semantics"/>
-      </m:msup>
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:degree)">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </xsl:if>
-  </m:mfenced>
-</xsl:template>
-
-
-<!-- ***************** LINEAR ALGEBRA ***************** -->
-
-<xsl:template match="m:vector">
-  <m:mfenced separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mtable>
-      <xsl:for-each select="*">
-        <m:mtd>
-          <xsl:apply-templates select="." mode = "semantics"/>
-        </m:mtd>
-      </xsl:for-each>
-    </m:mtable>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:matrix">
-  <m:mfenced separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mtable>
-      <xsl:apply-templates select="*" mode = "semantics"/>
-    </m:mtable>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:matrixrow">
-  <m:mtr>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:for-each select="*">
-      <m:mtd>
-        <xsl:apply-templates select="." mode = "semantics"/>
-      </m:mtd>
-    </xsl:for-each>
-  </m:mtr>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:determinant[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:determinant/@id"/>
-          </xsl:attribute>
-        </xsl:if>det</m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:transpose[1]]">
-  <m:msup>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-    <m:mo>
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:transpose/@id"/>
-          </xsl:attribute>
-        </xsl:if>T</m:mo>
-  </m:msup>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:selector[1]]">
-  <xsl:if test="*[2]=m:matrix and *[3]=m:cn">
-      <xsl:variable name="m" select = "*[3]"/>
-      <xsl:choose>
-        <xsl:when test="*[4]=m:cn">
-          <xsl:variable name="n" select = "*[4]"/>
-          <xsl:copy-of select = "m:matrix/*[position()=$m]/*[position()=$n]"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:copy-of select = "m:matrix/*[position()=$m]"/>
-        </xsl:otherwise>
-      </xsl:choose>
-  </xsl:if>
-  <xsl:if test="(*[2]=m:vector or *[2]=m:list) and *[3]=m:cn">
-    <xsl:variable name="m" select = "*[3]"/>
-    <xsl:copy-of select = "*[2]/*[position()=$m]"/>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:vectorproduct[1] |
-                                 m:scalarproduct[1] | m:outerproduct[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select="*[2]" mode = "semantics"/>
-    <m:mo>
-      <xsl:if test="m:vectorproduct[1]">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:vectorproduct/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        &#x02A2F;
-      </xsl:if>
-      <xsl:if test="m:scalarproduct[1] | m:outerproduct[1]">
-<!-- HELM: added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="*[1]/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'.'"/>
-      </xsl:if>
-    </m:mo>
-    <xsl:apply-templates select="*[3]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/mmlctop2_0.xsl b/helm/style/mmlctop2_0.xsl
deleted file mode 100644 (file)
index 554c3a8..0000000
+++ /dev/null
@@ -1,3985 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- ******************************************************** -->
-<!--   XSL Transform of MathML content to MathML presentation -->
-<!--                                                          -->
-<!--   Authors Igor Rodionov <igor@csd.uwo.ca>,               -->
-<!--           Stephen Watt  <watt@csd.uwo.ca>.               -->  
-<!--                                                          -->
-<!--   (C) Copyright 2000  Symbolic Computation Laboratory,   -->
-<!--                       University of Western Ontario,     -->
-<!--                       London, Canada N6A 5B7.            -->
-<!--                                                          -->
-<!-- ******************************************************** -->
-<!--   Updated Nov. 2001 by:                                  -->
-<!--           S. Huerter <huerter@csd.uwo.ca>.               -->
-<!--                                                          -->
-<!--   Complies with the W3C MathML 2.0 Recommendation of     -->
-<!--   21 February 2001.                                      -->
-<!-- ******************************************************** -->
-
-<!-- ====================================================== -->
-<!--  April, 10 2002 - HELM group:                          -->
-<!--  Added the namespace prefix to all the output elements -->
-<!--  (see 7.1.1.2)                                         -->
-<!--  Changed the mml prefix into m (see A.3)               -->
-<!--  Added xref to every mo element                        -->
-<!--  New csymbol template                                  -->
-<!--  reln is not supported                                 -->
-<!--  HELM tag used for changes                             -->
-<!--  First draft: April 10 2002, Irene Schena              -->
-<!-- ====================================================== -->
-
-<xsl:stylesheet id="mmlctop.xsl"
-                version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!-- HELM: we don't have a default namespace.
-     Removed xmlns="http://www.w3.org/1998/Math/MathML" -->
-
-<!-- HELM: was
-<xsl:output method="xml" indent="yes"/>
-     only for HELM!
--->
-<xsl:output method="xml"/>
-
-<xsl:strip-space elements="apply semantics annotation-xml
-        csymbol fn cn ci interval matrix matrixrow vector
-        lambda bvar condition logbase degree set list
-        lowlimit uplimit"/>
-
-
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-<!--         Parameters, variables and constants           -->
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-
-<!-- ~~~~~~~~ Semantics related *constants*: ~~~~~~~~ -->
-
-<!-- Strip off semantics -->
-<xsl:variable name="SEM_STRIP" select="-1"/>
-
-<!-- Pass semantics "as is" -->
-<xsl:variable name="SEM_PASS" select="0"/>
-
-<!-- Add semantics at top level only -->
-<xsl:variable name="SEM_TOP" select="1"/>
-
-<!-- Add semantics at all levels -->
-<xsl:variable name="SEM_ALL" select="2"/>
-
-<!-- Semantics at top level only, with id refs -->
-<!-- NOTE: ids have to be already present in the
-           input for this feature to work. -->
-<xsl:variable name="SEM_XREF" select="3"/>
-
-<!-- No semantics at top level, with id refs -->
-<!-- NOTE: ids have to be already present in the
-           input for this feature to work. -->
-<xsl:variable name="SEM_XREF_EXT" select="4"/>
-
-
-<!-- ~~~~~~~~~~ Stylesheet *parameter*: SEM_SW ~~~~~~~~~~~~~~ -->
-<!-- Assumes one of the above values; SEM_PASS is the default -->
-<!-- The default can be overridden by specifying different    -->
-<!-- value on the command line when the stylesheet is invoked -->
-
-<!-- HELM: $SEM_SW was SEM_PASS (error!) -->
-<xsl:param name="SEM_SW" select="$SEM_XREF"/>
-
-
-<!-- ~~~~~~ Operator precedence definitions ~~~~~~ -->
-<xsl:variable name="UNION_OP" select="2"/>
-<xsl:variable name="INTERSECT_OP" select="6"/>
-<xsl:variable name="SETDIFF_OP" select="4"/>
-<xsl:variable name="NO_PREC" select="0"/>
-<xsl:variable name="UNION_PREC" select="1"/>
-<xsl:variable name="SETDIFF_PREC" select="1"/>
-<xsl:variable name="INTERSECT_PREC" select="3"/>
-<xsl:variable name="CARTPROD_PREC" select="3"/>
-<xsl:variable name="OR_PREC" select="5"/>
-<xsl:variable name="XOR_PREC" select="5"/>
-<xsl:variable name="AND_PREC" select="7"/>
-<xsl:variable name="PLUS_PREC" select="9"/>
-<xsl:variable name="MINUS_PREC" select="9"/>
-<xsl:variable name="MUL_PREC" select="11"/>
-<xsl:variable name="DIV_PREC" select="11"/>
-<xsl:variable name="NEG_PREC" select="13"/>
-<xsl:variable name="FUNCTION_PREC" select="99"/>
-
-<!-- ~~~~~ Miscellaneous constant definitions ~~~~~ -->
-
-<xsl:variable name="YES" select="1"/>
-<xsl:variable name="NO" select="0"/>
-<xsl:variable name="NO_PARAM" select="-1"/>
-<xsl:variable name="PAR_SAME" select="-3"/>
-<xsl:variable name="PAR_YES" select="-5"/>
-<xsl:variable name="PAR_NO" select="-7"/>
-<xsl:variable name="DOESNT_MATTER" select="-9"/>
-
-<!-- +++++++++++++++++ INDEX OF TEMPLATES +++++++++++++++++++ -->
-
-<!-- All templates are subdivided into the following categories
-     (listed in the order of appearance in the stylesheet):
-
-THE TOPMOST ELEMENT: MATH
- math
-
-SEMANTICS HANDLING
- semantics
-
-BASIC CONTAINER ELEMENTS
- cn, ci, csymbol
-
-BASIC CONTENT ELEMENTS
- fn, interval, inverse, sep, condition, declare, lambda, compose, ident
-
-     *NEW: apply, piecewise, domain, codomain, image
-
-ARITHMETIC, ALGEBRA & LOGIC
- quotient, exp, factorial, max, min, minus, plus, power, rem, divide,
- times, root, gcd, and, or, xor, not, forall, exists, abs, conjugate,
- arg, real, imaginary
-
-     *NEW: floor, ceiling, lcm
-
-RELATIONS
- neq, approx, tendsto, implies, in, notin, notsubset, notprsubset,
- subset, prsubset, eq, gt, lt, geq, leq, equivalent
-
-CALCULUS
- ln, log, diff, partialdiff, lowlimit, uplimit, bvar, degree,
- logbase, divergence, grad, curl, laplacian
-
-SET THEORY
- set, list, union, intersect, setdiff, card
-
-     *NEW: cartesianproduct
-
-SEQUENCES AND SERIES
- sum, product, limit
-
-     *NEW: int
-
-TRIGONOMETRY
- sin, cos, tan, sec, csc, cot, sinh, cosh, tanh, sech, csch, coth,
- arcsin, arccos, arctan
-
-     *NEW: arcsec, arccsc, arccot, arcsinh, arccosh, arctanh,
-           arcsech, arccsch, arccoth, 
-
-STATISTICS
- mean, sdev, variance, median, mode, moment
-
-LINEAR ALGEBRA
- vector, matrix, matrixrow, determinant, transpose, selector,
- vectorproduct, scalarproduct, outerproduct
--->
-
-
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~ TEMPLATES ~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-
-
-<!-- ***************** THE TOPMOST ELEMENT: MATH ***************** -->
-
-<xsl:template match = "m:math">
-<!-- HELM:  <m:math> only for HELM! -->
-  <xsl:choose>
-    <xsl:when test="$SEM_SW=$SEM_TOP or $SEM_SW=$SEM_ALL and *[2] or $SEM_SW=$SEM_XREF">             <m:semantics>                                                       
-    <m:mrow>                                                         
-          <xsl:apply-templates mode = "semantics"/>
-        </m:mrow>
-        <m:annotation-xml encoding="MathML">
-          <xsl:copy-of select="*"/>
-        </m:annotation-xml>
-      </m:semantics>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:apply-templates mode = "semantics"/>
-      </m:mrow>  
-    </xsl:otherwise>
-  </xsl:choose>
-<!-- HELM: </m:math> -->
-</xsl:template>
-
-
-<!-- ***************** SEMANTICS HANDLING ***************** -->
-
-<!-- This template is called recursively.  At each level   -->
-<!-- in the source tree it decides whether to strip off,   -->
-<!-- pass or add semantics at that level (depending on the -->
-<!-- value of SEM_SW parameter).  Then the actual template -->
-<!-- is applied to the node.                               -->
-
-<xsl:template match = "m:*" mode = "semantics">
-  <xsl:param name="IN_OP" select="$DOESNT_MATTER"/>
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$SEM_SW=$SEM_STRIP and self::m:semantics">
-      <xsl:apply-templates select="m:annotation-xml[@encoding='MathML']">
-        <xsl:with-param name="IN_OP" select="$IN_OP"/>
-        <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:when test="($SEM_SW=$SEM_PASS or $SEM_SW=$SEM_TOP) and self::m:semantics">
-      <m:semantics>
-        <xsl:apply-templates select="*[1]">   
-        <xsl:with-param name="IN_OP" select="$IN_OP"/>
-        <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-        <xsl:copy-of select="m:annotation-xml"/>
-      </m:semantics>
-    </xsl:when>
-    <xsl:when test="$SEM_SW=$SEM_ALL">
-      <m:semantics>
-        <xsl:choose>
-          <xsl:when test="self::m:semantics">
-            <xsl:apply-templates select="*[1]">
-              <xsl:with-param name="IN_OP" select="$IN_OP"/>
-              <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-              <xsl:with-param name="PARAM" select="$PARAM"/>
-              <xsl:with-param name="PAREN" select="$PAREN"/>
-              <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-            </xsl:apply-templates>
-            <xsl:copy-of select="m:annotation-xml"/>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:apply-templates select=".">
-              <xsl:with-param name="IN_OP" select="$IN_OP"/>
-              <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-              <xsl:with-param name="PARAM" select="$PARAM"/>
-              <xsl:with-param name="PAREN" select="$PAREN"/>
-              <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-            </xsl:apply-templates>
-            <m:annotation-xml encoding="MathML">
-              <xsl:copy-of select="."/>
-            </m:annotation-xml>
-          </xsl:otherwise>
-        </xsl:choose>
-      </m:semantics>
-    </xsl:when>
-    <xsl:when test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:choose>
-<!-- HELM: syntax error, was sematics -->
-        <xsl:when test="self::m:semantics">
-          <xsl:copy>
-            <xsl:copy-of select="@*"/>
-            <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-            </xsl:attribute>
-            <xsl:copy-of select="*[1]"/>
-            <xsl:copy-of select="m:annotation-xml"/>
-          </xsl:copy>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:apply-templates select=".">
-            <xsl:with-param name="IN_OP" select="$IN_OP"/>
-            <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-            <xsl:with-param name="PARAM" select="$PARAM"/>
-            <xsl:with-param name="PAREN" select="$PAREN"/>
-            <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-          </xsl:apply-templates>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:choose>
-        <xsl:when test="self::m:semantics">
-          <xsl:copy-of select="."/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:apply-templates select=".">
-            <xsl:with-param name="IN_OP" select="$IN_OP"/>
-            <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
-            <xsl:with-param name="PARAM" select="$PARAM"/>
-            <xsl:with-param name="PAREN" select="$PAREN"/>
-            <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-          </xsl:apply-templates>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:semantics">
-  <xsl:apply-templates select="." mode = "semantics"/>
-</xsl:template>
-
-
-<!-- ***************** BASIC CONTAINER ELEMENTS ***************** -->
-
-<xsl:template match = "m:cn">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test=". &lt; 0 and $IN_PREC &gt; $NO_PREC and $PAREN=$PAR_NO
-                                                   and $PAR_NO_IGNORE=$NO">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="cn"/>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:choose>
-        <xsl:when test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:apply-templates select="." mode="cnid"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:apply-templates select="." mode="cn"/>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!-- HELM: the entity &#x2062; is not defined -->
-<xsl:template match = "m:cn" mode="cn">
-  <xsl:choose>
-    <xsl:when test="@base and (not(@type) or @type='integer' or @type='real')">
-      <m:msub>
-        <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='e-notation' and not(@base) and child::m:sep[1]">
-        <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
-        <m:mo> <xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-        <m:mo>e</m:mo>
-        <m:mo> <xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-        <m:mn> <xsl:value-of select="text()[2]"/> </m:mn>
-  </xsl:when>
-    <xsl:when test="@type='complex' and not(@base) and child::m:sep[1]">
-      <m:mfenced separators="">
-        <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
-        <xsl:if test="text()[2] &lt; 0">
-          <m:mo>-</m:mo>
-          <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
-        </xsl:if>
-        <xsl:if test="not(text()[2] &lt; 0)">
-          <m:mo>+</m:mo>
-          <m:mn> <xsl:value-of select="text()[2]"/> </m:mn>
-        </xsl:if>
-        <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-        <m:mo>i</m:mo>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="@type='complex' and @base and child::m:sep[1]">
-      <m:msub>
-        <m:mfenced separators="">
-          <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-          <xsl:if test="text()[2] &lt; 0">
-            <m:mo>-</m:mo>
-            <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
-          </xsl:if>
-          <xsl:if test="not(text()[2] &lt; 0)">
-            <m:mo>+</m:mo>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </xsl:if>
-          <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text></m:mo>
-          <m:mo>i</m:mo>
-        </m:mfenced>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='rational' and not(@base) and child::m:sep[1]">
-      <m:mfrac>
-        <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-        <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-      </m:mfrac>
-    </xsl:when>
-    <xsl:when test="@type='rational' and @base and child::m:sep[1]">
-      <m:msub>
-        <m:mfenced>
-          <m:mfrac>
-            <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </m:mfrac>
-        </m:mfenced>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='polar' and not(@base) and child::m:sep[1]">
-      <m:mrow>
-        <m:mo>Polar</m:mo>
-        <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-        <m:mfenced separators=",">
-          <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-          <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-        </m:mfenced>
-      </m:mrow>
-    </xsl:when>
-    <xsl:when test="@type='polar' and @base and child::m:sep[1]">
-      <m:msub>
-        <m:mrow>
-          <m:mo>Polar</m:mo>
-          <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text></m:mo>
-          <m:mfenced separators=",">
-            <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </m:mfenced>
-        </m:mrow>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-   </xsl:when>
-    <xsl:otherwise>
-<!-- HELM: cn could contain MathML presentation -->
-<!-- HELM: was
-      <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
-     Now is: -->
-    <xsl:choose>
-     <xsl:when test="child::text() and not(*[1])">
-      <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:choose>
-       <xsl:when test="not(*[2])">
-        <xsl:copy-of select="*[1]"/>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mrow>
-         <xsl:copy-of select="*|text()"/>
-        </m:mrow>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:otherwise>
-    </xsl:choose>
-<!-- HELM -->
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:cn" mode="cnid">
-  <xsl:choose>
-    <xsl:when test="@base and (not(@type) or @type='integer' or @type='real')">
-      <m:msub xref="{@id}">
-        <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='complex' and not(@base) and child::m:sep[1]">
-      <m:mfenced separators="" xref="{@id}">
-        <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
-        <xsl:if test="text()[2] &lt; 0">
-          <m:mo>-</m:mo>
-          <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
-        </xsl:if>
-        <xsl:if test="not(text()[2] &lt; 0)">
-          <m:mo>+</m:mo>
-          <m:mn> <xsl:value-of select="text()[2]"/> </m:mn>
-        </xsl:if>
-        <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text></m:mo>
-        <m:mo>i</m:mo>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="@type='complex' and @base and child::m:sep[1]">
-      <m:msub xref="{@id}">
-        <m:mfenced separators="">
-          <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-          <xsl:if test="text()[2] &lt; 0">
-            <m:mo>-</m:mo>
-            <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
-          </xsl:if>
-          <xsl:if test="not(text()[2] &lt; 0)">
-            <m:mo>+</m:mo>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </xsl:if>
-          <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-          <m:mo>i</m:mo>
-        </m:mfenced>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='rational' and not(@base) and child::m:sep[1]">
-      <m:mfrac xref="{@id}">
-        <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-        <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-      </m:mfrac>
-    </xsl:when>
-    <xsl:when test="@type='rational' and @base and child::m:sep[1]">
-      <m:msub xref="{@id}">
-        <m:mfenced>
-          <m:mfrac>
-            <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </m:mfrac>
-        </m:mfenced>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-    </xsl:when>
-    <xsl:when test="@type='polar' and not(@base) and child::m:sep[1]">
-      <m:mrow xref="{@id}">
-        <m:mo>Polar</m:mo>
-        <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-        <m:mfenced separators=",">
-          <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-          <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-        </m:mfenced>
-      </m:mrow>
-    </xsl:when>
-    <xsl:when test="@type='polar' and @base and child::m:sep[1]">
-      <m:msub xref="{@id}">
-        <m:mrow>
-          <m:mo>Polar</m:mo>
-          <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text> </m:mo>
-          <m:mfenced separators=",">
-            <m:mn> <xsl:apply-templates select="text()[1]"/> </m:mn>
-            <m:mn> <xsl:apply-templates select="text()[2]"/> </m:mn>
-          </m:mfenced>
-        </m:mrow>
-        <m:mn> <xsl:value-of select="@base"/> </m:mn>
-      </m:msub>
-   </xsl:when>
-    <xsl:otherwise>
-<!-- HELM: cn could contain MathML presentation -->
-<!-- HELM: was
-      <m:mn xref="{@id}"> <xsl:apply-templates mode = "semantics"/> </m:mn>
-     Now is: -->
-    <xsl:choose>
-     <xsl:when test="child::text() and not(*[1])">
-      <m:mn xref="{@id}"> <xsl:apply-templates mode = "semantics"/> </m:mn>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:variable name="id" select="@id"/>
-      <xsl:choose>
-       <xsl:when test="not(*[2])">
-        <xsl:for-each select="*[1]">
-         <xsl:copy>
-          <xsl:attribute name="xref">
-           <xsl:value-of select="$id"/>
-          </xsl:attribute>
-          <xsl:copy-of select="@*|*"/>
-         </xsl:copy>
-        </xsl:for-each>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mrow xref="{$id}">
-         <xsl:copy-of select="*|text()"/>
-        </m:mrow>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:otherwise>
-    </xsl:choose>
-<!-- HELM -->
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:ci">
-  <xsl:choose>
-    <xsl:when test="@type='vector' or @type=matrix or @type=set">
-      <m:mi mathvariant="bold">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates mode = "semantics"/>
-      </m:mi>
-    </xsl:when>
-    <xsl:when test="child::text() and not(child::*[1])">
-      <m:mi>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: ERROR, added mode="semantics", it didn't generate identifiers -->
-        <xsl:apply-templates mode = "semantics"/>
-      </m:mi>
-    </xsl:when>
-<!-- HELM: text & markup !!! Not compliant with the specification -->
-    <xsl:when test="child::text() and *[1] and not(*[1]=m:sep)">
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: added semantics mode -->
-        <xsl:apply-templates mode="semantics"/>
-      </m:mrow>
-    </xsl:when>
-<!-- HELM -->
-    <xsl:otherwise>
-      <xsl:if test="*[2]">
-        <m:mrow>
-          <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-            <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-            </xsl:attribute>
-          </xsl:if>
-          <xsl:apply-templates select="*"/>
-        </m:mrow>
-      </xsl:if>
-      <xsl:if test="not(*[2])">
-<!-- HELM: ci could contain MathML presentation -->
-<!-- HELM: was
-        <xsl:apply-templates select="*[1]"/>
-     Now is: -->
-       <xsl:variable name="id" select="@id"/>
-        <xsl:for-each select="*[1]">
-         <xsl:copy>
-          <xsl:attribute name="xref">
-           <xsl:value-of select="$id"/>
-          </xsl:attribute>
-         <xsl:copy-of select="@*|*"/>
-         </xsl:copy>
-        </xsl:for-each>
-<!-- HELM -->
-      </xsl:if>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:ci/m:*[not(self::m:sep)]">
-  <xsl:copy-of select = "."/>
-</xsl:template>
-
-<!-- HELM: revised version previous Version x.xx from Feb. 18, 2000 -->
-<xsl:template match = "m:csymbol">
-<!-- HELM: mrow to maintain csymbol id -->
-   <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-     <xsl:attribute name="xref">
-      <xsl:value-of select="@id"/>
-     </xsl:attribute>
-    </xsl:if>
-    <xsl:for-each select="* and text()">
-     <xsl:choose>
-     <xsl:when test="text()">
-      <m:mo><xsl:value-of select="."/></m:mo>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:copy-of select = "."/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:for-each>
-   </m:mrow>
-</xsl:template>
-
-<!-- HELM: csymbol cannot contain ci or cn elements, but only text and/or 
-presentation elements. PCDATA should render as if it were wrapped in 
-an mo. Mixed content: mrow which contains mo + presentation elements --> 
-<!-- <xsl:template match = "m:csymbol/m:*">
-  <xsl:choose>
-    <xsl:when test="self::m:cn or self::m:ci">
-      <xsl:apply-templates mode = "semantics"/>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:copy-of select = "."/>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:csymbol/text()">
-  <xsl:choose>
-    <xsl:when test=". &lt; 0 or . = 0 or . &gt; 0">
-      <m:mn> <xsl:copy-of select = "."/> </m:mn>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mi> <xsl:copy-of select = "."/> </m:mi>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template> -->
-
-
-<!-- ***************** BASIC CONTENT ELEMENTS ***************** -->
-
-<!-- HELM: the entity &#x2061; is not defined:                -->
-<!-- fn and domainofapplication are rendered as their content -->
-<xsl:template match = "m:apply[m:*[1][self::m:fn]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "m:fn[1]" mode = "semantics"/>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:fn/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:fn/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-    <m:mfenced separators=",">
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<!-- fn has been deprecated, so now we use: -->
-<xsl:template match = "m:apply">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="*[2]=m:domainofapplication">
-        <m:msub>
-          <xsl:apply-templates select = "*[position()=1]" mode = "semantics">
-            <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-          </xsl:apply-templates>
-          <xsl:apply-templates select = "*[position()=2]" mode = "semantics"/>
-          </m:msub>
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:domainofapplication/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:domainofapplication/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-          <m:mfenced separators=",">
-            <xsl:apply-templates select = "*[position()>2]" mode = "semantics"/>
-            </m:mfenced>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:apply-templates select = "*[position()=1]" mode = "semantics">
-              <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-            </xsl:apply-templates>
-            <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-            <m:mfenced separators=",">
-              <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-              </m:mfenced> 
-            </xsl:otherwise>
-          </xsl:choose>
-        </m:mrow>
-      </xsl:template>
-      
-      <xsl:template match = "m:domainofapplication">
-        <xsl:apply-templates select = "*[1]" mode = "semantics"/> 
-        </xsl:template>
-    
-      <xsl:template match = "m:fn">
-        <xsl:apply-templates select = "*[1]" mode = "semantics">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        </xsl:apply-templates>
-      </xsl:template>
-      
-      <xsl:template match = "m:interval">
-        <m:mfenced separators=",">
-          <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-            <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-            </xsl:attribute>
-          </xsl:if>
-          <xsl:if test="@closure='closed' or @closure='closed-open'">
-            <xsl:attribute name="open">[</xsl:attribute>
-          </xsl:if>
-          <xsl:if test="@closure='closed' or @closure='open-closed'">
-            <xsl:attribute name="close">]</xsl:attribute>
-          </xsl:if>
-          <xsl:apply-templates select="*" mode = "semantics"/>
-          </m:mfenced>
-        </xsl:template>
-        
-        <xsl:template match = "m:apply[m:*[1][self::m:apply[m:inverse[1]]]]">
-          <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "*[1]" mode = "semantics"/>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text> </m:mo>
-    <m:mfenced separators=",">
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mfenced>
- </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[*[1][self::m:inverse]]">
-  <xsl:choose>
-    <xsl:when test="*[2]=m:exp or *[2]=m:ln or *[2]=m:sin or *[2]=m:cos or
-                    *[2]=m:tan or *[2]=m:sec or *[2]=m:csc or *[2]=m:cot or
-                    *[2]=m:sinh or *[2]=m:cosh or *[2]=m:tanh or *[2]=m:sech or
-                    *[2]=m:csch or *[2]=m:coth or *[2]=m:arcsin or
-                    *[2]=m:arccos or *[2]=m:arctan">
-      <m:mo>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]" mode="inverse"/>
-      </m:mo>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:msup>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select = "*[2]"/>
-        <m:mfenced>
-<!-- HELM: xref added -->        
-         <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:inverse/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:inverse/@id"/>
-          </xsl:attribute>
-         </xsl:if>
-         <m:mn>-1</m:mn>
-        </m:mfenced>
-      </m:msup>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "*" mode="inverse">
-  <xsl:choose>
-    <xsl:when test="self::m:exp">
-      <xsl:value-of select="'ln'"/>
-    </xsl:when>
-    <xsl:when test="self::m:ln">
-      <xsl:value-of select="'exp'"/>
-    </xsl:when>
-    <xsl:when test="self::m:sin">
-      <xsl:value-of select="'arcsin'"/>
-    </xsl:when>
-    <xsl:when test="self::m:cos">
-      <xsl:value-of select="'arccos'"/>
-    </xsl:when>
-    <xsl:when test="self::m:tan">
-      <xsl:value-of select="'arctan'"/>
-    </xsl:when>
-    <xsl:when test="self::m:sec">
-      <xsl:value-of select="'arcsec'"/>
-    </xsl:when>
-    <xsl:when test="self::m:csc">
-      <xsl:value-of select="'arccsc'"/>
-    </xsl:when>
-    <xsl:when test="self::m:cot">
-      <xsl:value-of select="'arccot'"/>
-    </xsl:when>
-    <xsl:when test="self::m:sinh">
-      <xsl:value-of select="'arcsinh'"/>
-    </xsl:when>
-    <xsl:when test="self::m:cosh">
-      <xsl:value-of select="'arccosh'"/>
-    </xsl:when>
-    <xsl:when test="self::m:tanh">
-      <xsl:value-of select="'arctanh'"/>
-    </xsl:when>
-    <xsl:when test="self::m:sech">
-      <xsl:value-of select="'arcsech'"/>
-    </xsl:when>
-    <xsl:when test="self::m:csch">
-      <xsl:value-of select="'arccsch'"/>
-    </xsl:when>
-    <xsl:when test="self::m:coth">
-      <xsl:value-of select="'arccoth'"/>
-    </xsl:when>
-    <xsl:when test="self::m:arcsin">
-      <xsl:value-of select="'sin'"/>
-    </xsl:when>
-    <xsl:when test="self::m:arccos">
-      <xsl:value-of select="'cos'"/>
-    </xsl:when>
-    <xsl:when test="self::m:arctan">
-      <xsl:value-of select="'tan'"/>
-    </xsl:when>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:sep"/>
-
-<xsl:template match = "m:condition">
-  <xsl:choose>
-    <xsl:when test="parent::m:apply[m:forall[1]]"/>
-    <xsl:otherwise>
-      <xsl:choose>
-        <xsl:when test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <m:mrow xref="{@id}">
-            <xsl:apply-templates select="*" mode = "semantics"/>
-          </m:mrow>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:if test="not(*[2])">
-            <xsl:apply-templates select="*" mode = "semantics"/>
-          </xsl:if>
-          <xsl:if test="*[2]">
-            <m:mrow>
-              <xsl:apply-templates select="*" mode = "semantics"/>
-            </m:mrow>
-          </xsl:if>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:declare"/>
-
-<xsl:template match = "m:lambda">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x039B;</xsl:text> </m:mo>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text> </m:mo>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*">
-        <xsl:choose>
-          <xsl:when test="self::m:ci or self::m:cn">
-            <xsl:apply-templates select = "." mode="semantics"/>
-          </xsl:when>
-          <xsl:otherwise>
-            <m:mrow>
-              <xsl:apply-templates select = "." mode="semantics"/>
-            </m:mrow>
-          </xsl:otherwise>
-        </xsl:choose>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[*[1][self::m:apply[m:compose[1]]]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "*[1]" mode = "semantics"/>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-    <m:mfenced separators=",">
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mfenced>
- </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[*[1][self::m:compose]]">
-  <m:mfenced separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "m:*[2][self::m:ci[@type='fn'] |
-                                       self::m:fn]" mode="semantics"/>
-    <xsl:for-each select = "m:*[position()>2][self::m:ci[@type='fn'] |
-                                                            self::m:fn]">
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:compose/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:compose/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x2218;</xsl:text></m:mo>
-      <xsl:apply-templates select = "." mode="semantics"/>
-    </xsl:for-each>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:ident">
-  <xsl:choose>
-    <xsl:when test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <m:mo xref="{@id}">id</m:mo>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mo>id</m:mo>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match="m:piecewise">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if> 
-    <xsl:element name="m:mfenced">
-      <xsl:attribute name="open">{</xsl:attribute>
-      <xsl:attribute name="close"></xsl:attribute>
-      <m:mtable groupalign="left left left">
-       <xsl:for-each select="m:piece">
-       <m:mtr columnalign="left">
-          <m:mtd>
-            <m:mrow>
-              <xsl:apply-templates select="*[position()=1]" mode = "semantics"/>
-            </m:mrow>
-          </m:mtd>
-          <m:mtd>
-              <m:mrow>
-                <m:mtext>if <m:mspace width="5"/></m:mtext>
-                <xsl:apply-templates select="*[position()=2]" mode = "semantics"/>
-              </m:mrow> 
-            </m:mtd>
-          </m:mtr>
-        </xsl:for-each>
-        <xsl:if test="m:otherwise">
-          <m:mtr columnalign="left">
-            <m:mtd>
-              <m:mrow>
-                <xsl:apply-templates select="m:otherwise/*" mode = "semantics"/>
-              </m:mrow>
-            </m:mtd>
-            <m:mtd>
-              <m:mrow>
-              otherwise  
-            </m:mrow>
-          </m:mtd>
-      </m:mtr>
-    </xsl:if>
-  </m:mtable>
-</xsl:element>
-</m:mrow>
-</xsl:template>
-
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='domain']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:domain]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mi>domain</m:mi>
-    <m:mfenced open="(" close=")">
-      <xsl:apply-templates select="*[position()!=1]" mode = "semantics"/>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='codomain']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:codomain]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mi>codomain</m:mi>
-    <m:mfenced open="(" close=")">
-      <xsl:apply-templates select="*[position()!=1]" mode = "semantics"/>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='image']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:image]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mi>image</m:mi>
-    <m:mfenced open="(" close=")">
-      <xsl:apply-templates select="*[position()!=1]" mode = "semantics"/>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** ARITHMETIC, ALGEBRA & LOGIC ***************** -->
-
-<xsl:template match = "m:apply[m:quotient[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo form="prefix" fence="true" stretchy="true" lspace="0em" rspace="0em">
-      <xsl:text disable-output-escaping='yes'>&#x230A;</xsl:text>
-    </m:mo>
-    <m:mfrac>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:quotient/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:quotient/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-      <m:mrow>
-        <xsl:apply-templates select="*[2]" mode = "semantics">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        </xsl:apply-templates>
-      </m:mrow>
-      <m:mrow>
-        <xsl:apply-templates select="*[3]" mode = "semantics">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </m:mfrac>
-    <m:mo form="postfix" fence="true" stretchy="true" lspace="0em" rspace="0em">
-     <xsl:text disable-output-escaping='yes'>&#x230A;</xsl:text>
-    </m:mo>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[*[1][self::m:exp]]">
-  <m:msup>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:exp/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:exp/@id"/>
-          </xsl:attribute>
-        </xsl:if>e</m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-  </m:msup>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:factorial[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:factorial/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:factorial/@id"/>
-          </xsl:attribute>
-        </xsl:if>!</m:mo>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:max[1] | m:min[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[2]=m:bvar">
-      <m:munder>
-        <xsl:if test="*[1]=m:max">
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:max/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:max/@id"/>
-          </xsl:attribute>
-        </xsl:if>max</m:mo>
-        </xsl:if>
-        <xsl:if test="*[1]=m:min">
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:min/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:min/@id"/>
-          </xsl:attribute>
-        </xsl:if>min</m:mo>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]" mode = "semantics"/>
-      </m:munder>
-      <xsl:if test="*[3]=m:condition">
-        <m:mfenced open="{{" close="}}" separators="">
-          <m:mfenced open="" close="" separators=",">
-            <xsl:for-each select = "*[position()>3]">
-              <xsl:apply-templates select = "." mode="semantics"/>
-            </xsl:for-each>
-          </m:mfenced>
-          <m:mo>|</m:mo>
-          <xsl:apply-templates select="*[3]" mode = "semantics"/>
-        </m:mfenced>
-      </xsl:if>
-      <xsl:if test="not(*[3]=m:condition)">
-        <m:mfenced open="{{" close="}}" separators=",">
-          <xsl:for-each select = "*[position()>2]">
-            <xsl:apply-templates select = "." mode="semantics"/>
-          </xsl:for-each>
-        </m:mfenced>
-      </xsl:if>
-    </xsl:if>
-    <xsl:if test="*[2]=m:condition">
-      <xsl:if test="*[1]=m:max">
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:max/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:max/@id"/>
-          </xsl:attribute>
-        </xsl:if>max</m:mo>
-      </xsl:if>
-      <xsl:if test="*[1]=m:min">
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:min/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:min/@id"/>
-          </xsl:attribute>
-        </xsl:if>min</m:mo>
-      </xsl:if>
-      <m:mfenced open="{{" close="}}" separators="">
-        <xsl:if test="*[3]">
-          <m:mfenced open="" close="" separators=",">
-            <xsl:for-each select = "*[position()>2]">
-              <xsl:apply-templates select = "." mode="semantics"/>
-            </xsl:for-each>
-          </m:mfenced>
-          <m:mo>|</m:mo>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]" mode = "semantics"/>
-      </m:mfenced>
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:condition) and not(*[2]=m:bvar)">
-      <xsl:if test="*[1]=m:max">
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:max/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:max/@id"/>
-          </xsl:attribute>
-        </xsl:if>max</m:mo>
-      </xsl:if>
-      <xsl:if test="*[1]=m:min">
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:min/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:min/@id"/>
-          </xsl:attribute>
-        </xsl:if>min</m:mo>
-      </xsl:if>
-      <m:mfenced open="{{" close="}}" separators=",">
-        <xsl:for-each select = "*[position()>1]">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-    </xsl:if>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:minus[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $MINUS_PREC or $IN_PREC=$MINUS_PREC and
-                                                        $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="minus">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="minus">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="minus">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:minus[1]]" mode="minus">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:if test="not(*[3])">
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:minus/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:minus/@id"/>
-          </xsl:attribute>
-        </xsl:if>-</m:mo>
-    <xsl:apply-templates select="*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$NEG_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:if>
-  <xsl:if test="*[3]">
-    <xsl:apply-templates select="*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$MINUS_PREC"/>
-      <xsl:with-param name="PARAM" select="$PARAM"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-    </xsl:apply-templates>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:minus/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:minus/@id"/>
-          </xsl:attribute>
-        </xsl:if>-</m:mo>
-    <xsl:apply-templates select="*[3]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$MINUS_PREC"/>
-      <xsl:with-param name="PARAM" select="$PAR_SAME"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:plus[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $PLUS_PREC or $IN_PREC=$PLUS_PREC and
-                                                      $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="plus">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="plus">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="plus">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:plus[1]]" mode="plus">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:if test="*[2]">
-    <xsl:apply-templates select="*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
-      <xsl:with-param name="PARAM" select="$PARAM"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-    </xsl:apply-templates>
-    <xsl:for-each select = "*[position()>2]">
-      <xsl:choose>
-        <xsl:when test=". &lt; 0">
-          <m:mo>-</m:mo>
-          <m:mn> <xsl:value-of select="-."/> </m:mn>
-        </xsl:when>
-        <xsl:when test="self::m:apply[m:minus[1]] and not(*[3])">
-          <xsl:apply-templates select="." mode = "semantics">
-            <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
-            <xsl:with-param name="PAREN" select="$PAREN"/>
-            <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-          </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:plus/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:plus/@id"/>
-          </xsl:attribute>
-        </xsl:if>+</m:mo>
-          <xsl:apply-templates select="." mode = "semantics">
-            <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
-            <xsl:with-param name="PAREN" select="$PAREN"/>
-            <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-          </xsl:apply-templates>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:for-each>
-  </xsl:if>
-</xsl:template>
-
-<!-- HELM WARNING: power id is lost!                              -->
-<!-- msup should maintain the power definitionURL info but also the 
-     reference to apply                                           -->
-<xsl:template match = "m:apply[m:power[1]]">
-  <xsl:choose>
-    <xsl:when test="*[2]=m:apply[m:ln[1] | m:log[1] | m:abs[1] |
-                         m:gcd[1] | m:lcm[1] | m:sin[1] | m:cos[1] | m:tan[1] |
-                         m:sec[1] | m:csc[1] | m:cot[1] | m:sinh[1] |
-                         m:cosh[1] | m:tanh[1] | m:sech[1] | m:csch[1] |
-                         m:coth[1] | m:arcsin[1] | m:arccos[1] |
-                         m:arctan[1] | m:arcsec[1] | m:arccsc[1] | 
-                         m:arccot[1] | m:arcsinh[1] | m:arccosh[1] |
-                         m:arctanh[1] | m:arcsech[1] | m:arccsch [1]|
-                         m:arccoth[1] ]">
-      <xsl:apply-templates select="*[2]" mode = "semantics"/>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:msup>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select = "*[2]" mode = "semantics">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-        </xsl:apply-templates>
-        <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-      </m:msup>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:rem[1] | m:divide[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $DIV_PREC or $IN_PREC=$DIV_PREC and
-                                                    $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="remdiv">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="remdiv">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="remdiv">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:rem[1] | m:divide[1]]" mode="remdiv">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$DIV_PREC"/>
-      <xsl:with-param name="PARAM" select="$PARAM"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <m:mo>
-    <xsl:if test="m:rem">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:rem/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:rem/@id"/>
-          </xsl:attribute>
-        </xsl:if>      
-      <xsl:value-of select="'%'"/>
-    </xsl:if>
-    <xsl:if test="m:divide">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:divide/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:divide/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-      <xsl:value-of select="'/'"/>
-    </xsl:if>
-  </m:mo>
-  <xsl:apply-templates select = "*[3]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$DIV_PREC"/>
-    <xsl:with-param name="PARAM" select="$PAR_SAME"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-  </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:times[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $MUL_PREC or $IN_PREC=$MUL_PREC and
-                                                    $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="times">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="times">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="times">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:times[1]]" mode="times">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select="*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$MUL_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:if test="*[3]">
-    <xsl:for-each select = "*[position()>2]">
-<!-- HELM: to distinguish between * and the application -->
-<!-- Was:
-      <m:mo><xsl:text disable-output-escaping='yes'>&#x2062;</xsl:text></m:mo>
-     Now is: -->
-     <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:times/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:times/@id"/>
-          </xsl:attribute>
-        </xsl:if>*</m:mo>
-      <xsl:apply-templates select="." mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$MUL_PREC"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-      </xsl:apply-templates>
-    </xsl:for-each>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:root[1]]">
-  <m:msqrt>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[2]=m:degree">
-      <xsl:apply-templates select="*[3]" mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-      </xsl:apply-templates>
-      <xsl:apply-templates select="*[2]" mode = "semantics"/>
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:degree)">
-      <xsl:apply-templates select="*[2]" mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-      </xsl:apply-templates>
-      <m:mn>2</m:mn>
-    </xsl:if>
-  </m:msqrt>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:gcd[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="not(parent::m:apply[m:power[1]])">
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:gcd/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:gcd/@id"/>
-          </xsl:attribute>
-        </xsl:if>gcd</m:mo>
-    </xsl:if>
-    <xsl:if test="parent::m:apply[m:power[1]]">
-      <m:msup>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:gcd/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:gcd/@id"/>
-          </xsl:attribute>
-        </xsl:if>gcd</m:mo>
-        <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-      </m:msup>
-    </xsl:if>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:and[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $AND_PREC">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="and">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="and">
-        <xsl:with-param name="PARAM" select="$IN_PREC"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="and">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:and[1]]" mode="and">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select="*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$AND_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:and/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:and/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x2227;</xsl:text></m:mo>
-    <xsl:apply-templates select="." mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$AND_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:or[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $OR_PREC">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="or">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="or">
-        <xsl:with-param name="PARAM" select="$IN_PREC"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="or">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:or[1]]" mode="or">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select="*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$OR_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo> 
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:or/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:or/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x2228;</xsl:text></m:mo>
-    <xsl:apply-templates select="." mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$OR_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:xor[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $XOR_PREC">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="xor">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAR_YES"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                                                and not($SEM_SW=$SEM_ALL)">
-      <xsl:apply-templates select="." mode="xor">
-        <xsl:with-param name="PARAM" select="$IN_PREC"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="xor">
-          <xsl:with-param name="PARAM" select="$IN_PREC"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:xor[1]]" mode="xor">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select="*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$XOR_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:xor/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:xor/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x22BB;</xsl:text></m:mo>
-    <xsl:apply-templates select="." mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$XOR_PREC"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:not[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-<!-- HELM: was <m:mo>not</m:mo> 
-     Now is -->
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:not/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:not/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x000AC;</m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-    </xsl:apply-templates>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:forall[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:forall/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:forall/@id"/>
-          </xsl:attribute>
-        </xsl:if>for all</m:mo>
-    <xsl:if test="count(m:bvar) &gt; 1">
-      <m:mfenced separators=",">
-        <xsl:for-each select = "m:bvar">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-    </xsl:if>
-    <xsl:if test="count(m:bvar)=1">
-      <xsl:apply-templates select = "m:bvar" mode="semantics"/>
-    </xsl:if>
-    <xsl:if test="m:condition">
-      <m:mo>:</m:mo>
-      <xsl:apply-templates select = "m:condition/*" mode = "semantics"/>
-      <m:mo>,</m:mo>
-    </xsl:if>
-    <xsl:apply-templates select = "*[position()>1 and not(self::m:bvar) and
-                                not(self::m:condition)]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:exists[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:exists/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:exists/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x2203;</xsl:text> </m:mo>
-    <xsl:if test="count(m:bvar) &gt; 1">
-      <m:mfenced separators=",">
-        <xsl:for-each select = "m:bvar">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-    </xsl:if>
-    <xsl:if test="count(m:bvar)=1">
-      <xsl:apply-templates select = "m:bvar" mode="semantics"/>
-    </xsl:if>
-    <xsl:if test="m:condition">
-      <m:mo>,</m:mo>
-      <xsl:apply-templates select = "m:condition/*" mode = "semantics"/>
-    </xsl:if>
-    <xsl:if test="*[position()>1 and not(self::m:bvar) and not(self::m:condition)]">
-      <m:mo>:</m:mo>
-      <xsl:apply-templates select = "*[position()>1 and not(self::m:bvar) and
-                                not(self::m:condition)]" mode = "semantics"/>
-    </xsl:if>
-  </m:mrow>
-</xsl:template>
-
-<!-- HELM WARNING: abs id was lost! -->
-<xsl:template match = "m:apply[m:abs[1]]">
-  <xsl:if test="not(parent::m:apply[m:power[1]])">
-<!-- HELM: was
-    <m:mfenced open="|" close="|" separators="">
-     Now is: mrow + mo -->
-     <m:mrow>
-      <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-        <xsl:attribute name="xref">
-          <xsl:value-of select="@id"/>
-        </xsl:attribute>
-      </xsl:if>
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:abs/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:abs/@id"/>
-          </xsl:attribute>
-        </xsl:if>|</m:mo>
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:abs/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:abs/@id"/>
-          </xsl:attribute>
-        </xsl:if>|</m:mo> 
-<!-- HELM: </m:mfenced> -->
-     </m:mrow>
-  </xsl:if>
-  <xsl:if test="parent::m:apply[m:power[1]]">
-    <m:msup>
-<!-- HELM: was
-      <m:mfenced open="|" close="|" separators="">
-     Now is: mrow + mo -->
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:abs/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:abs/@id"/>
-          </xsl:attribute>
-        </xsl:if>|</m:mo> 
-        <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:abs/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:abs/@id"/>
-          </xsl:attribute>
-        </xsl:if>|</m:mo> 
-<!-- HELM: </m:mfenced> -->
-      </m:mrow>
-      <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-    </m:msup>
-  </xsl:if>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:conjugate[1]]">
-  <m:mover>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mrow>
-      <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
-    </m:mrow>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:conjugate/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:conjugate/@id"/>
-          </xsl:attribute>
-        </xsl:if><xsl:text disable-output-escaping='yes'>&#x0332;</xsl:text> </m:mo>
-  </m:mover>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:arg[1] | m:real[1] | m:imaginary[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-      <xsl:if test="m:arg">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:arg/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:arg/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'Arg'"/>
-      </xsl:if>
-      <xsl:if test="m:real">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:real/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:real/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'Re'"/>
-      </xsl:if>
-      <xsl:if test="m:imaginary">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:imaginary/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:imaginary/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'Im'"/>
-      </xsl:if>
-    </m:mo>
-    <m:mfenced separators="">
-      <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='lcm']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:lcm]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="not(parent::m:apply[m:power[1]])">
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:lcm/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:lcm/@id"/>
-          </xsl:attribute>
-        </xsl:if>lcm</m:mo>
-    </xsl:if>
-    <xsl:if test="parent::m:apply[m:power[1]]">
-      <m:msup>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:lcm/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:lcm/@id"/>
-          </xsl:attribute>
-        </xsl:if>lcm</m:mo>
-        <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-        </m:msup>
-      </xsl:if>
-      <m:mfenced separators=",">
-        <xsl:for-each select = "*[position()>1]">
-          <xsl:apply-templates select = "." mode="semantics"/>
-          </xsl:for-each>
-        </m:mfenced>
-      </m:mrow>
-    </xsl:template>
-
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='floor']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:floor]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:floor/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:floor/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&LeftFloor;]]> -->
-      <xsl:text disable-output-escaping="yes">&#x230A;</xsl:text>
-    </m:mo>
-    <xsl:apply-templates select="child::*[position()=last()]" mode="semantics"/>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:floor/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:floor/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&RightFloor;]]> -->
-<xsl:text disable-output-escaping="yes">&#x230B;</xsl:text>
-    </m:mo>
-</m:mrow>
-</xsl:template>
-
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='ceiling']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:ceiling]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:ceiling/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:ceiling/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&LeftCeiling;]]> -->
-      <xsl:text disable-output-escaping="yes">&#x2308;</xsl:text>
-    </m:mo>
-    <xsl:apply-templates select="child::*[position()=last()]"  mode="semantics"/>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:ceiling/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:ceiling/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&RightCeiling;]]> -->
-      <xsl:text disable-output-escaping="yes">&#x2309;</xsl:text>
-    </m:mo>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** RELATIONS ***************** -->
-
-<xsl:template match = "m:apply[m:neq | m:approx | m:tendsto | m:implies
-                     | m:in | m:notin | m:notsubset | m:notprsubset
-                     | m:subset | m:prsubset | m:eq | m:gt | m:lt
-                     | m:geq | m:leq | m:equivalent | m:factorof]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[1]=m:neq or *[1]=m:approx or *[1]=m:factorof or *[1]=m:tendsto or
-                  *[1]=m:implies or *[1]=m:in or *[1]=m:notin or
-                  *[1]=m:notsubset or *[1]=m:notprsubset">
-      <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-      <m:mo>
-        <xsl:if test="*[1]=m:neq">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:neq/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:neq/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x2260;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:approx">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:approx/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:approx/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x224A;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:factorof">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:factorof/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:factorof/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-          |
-        </xsl:if>
-        <xsl:if test="*[1]=m:tendsto">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:tendsto/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:tendsto/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x2192;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:implies">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:implies/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:implies/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x21D2;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:in">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:in/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:in/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-          <xsl:text disable-output-escaping='yes'>&#x2208;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:notin">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:notin/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:notin/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x2209;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:notsubset">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:notsubset/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:notsubset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x2284;</xsl:text>
-        </xsl:if>
-        <xsl:if test="*[1]=m:notprsubset">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:notprsubset/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:notprsubset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-         <xsl:text disable-output-escaping='yes'>&#x2288;</xsl:text>
-        </xsl:if>
-      </m:mo>
-      <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-      <xsl:if test="*[1]=m:tendsto and m:tendsto[1][@type='below']">
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:tendsto/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:tendsto/@id"/>
-          </xsl:attribute>
-        </xsl:if>-</m:mo>
-      </xsl:if>
-      <xsl:if test="*[1]=m:tendsto and m:tendsto[1][@type='above']">
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:tendsto/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:tendsto/@id"/>
-          </xsl:attribute>
-        </xsl:if>+</m:mo>
-      </xsl:if>
-    </xsl:if>
-    <xsl:if test="*[1]=m:subset or *[1]=m:prsubset or *[1]=m:eq or *[1]=m:gt
-               or *[1]=m:lt or *[1]=m:geq or *[1]=m:leq or *[1]=m:equivalent">
-      <xsl:apply-templates select = "*[2]" mode="semantics"/>
-      <xsl:for-each select = "*[position()>2]">
-        <m:mo>
-          <xsl:if test="../*[self::m:subset][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:subset/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:subset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-            <xsl:text disable-output-escaping='yes'>&#x2286;</xsl:text>
-          </xsl:if>
-          <xsl:if test="../*[self::m:prsubset][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:prsubset/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:prsubset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-           <xsl:text disable-output-escaping='yes'>&#x2282;</xsl:text>
-          </xsl:if>
-          <xsl:if test="../*[self::m:eq][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:eq/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:eq/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-            <xsl:value-of select="'='"/>
-          </xsl:if>
-          <xsl:if test="../*[self::m:gt][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:gt/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:gt/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-            <xsl:value-of select="'&gt;'"/>
-          </xsl:if>
-          <xsl:if test="../*[self::m:lt][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:lt/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:lt/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-            <xsl:value-of select="'&lt;'"/>
-          </xsl:if>
-          <xsl:if test="../*[self::m:geq][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:geq/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:geq/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-           <xsl:text disable-output-escaping='yes'>&#x2265;</xsl:text>
-          </xsl:if>
-          <xsl:if test="../*[self::m:leq][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:leq/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:leq/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-           <xsl:text disable-output-escaping='yes'>&#x2264;</xsl:text>
-          </xsl:if>
-          <xsl:if test="../*[self::m:equivalent][1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:equivalent/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:equivalent/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-           <xsl:text disable-output-escaping='yes'>&#x2261;</xsl:text>
-          </xsl:if>
-        </m:mo>
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </xsl:if>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** CALCULUS ***************** -->
-
-<xsl:template match = "m:apply[*[1][self::m:ln]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="parent::m:apply[m:power[1]]">
-        <m:msup>
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:ln/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:ln/@id"/>
-          </xsl:attribute>
-        </xsl:if>ln</m:mo>
-          <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-        </m:msup>
-      </xsl:when>
-      <xsl:otherwise>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:ln/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:ln/@id"/>
-          </xsl:attribute>
-        </xsl:if>ln</m:mo>
-      </xsl:otherwise>
-    </xsl:choose>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-    </xsl:apply-templates>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:log[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="parent::m:apply[m:power[1]]">
-        <xsl:if test="not(*[2]=m:logbase)">
-          <m:msup>
-            <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:log/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:log/@id"/>
-          </xsl:attribute>
-        </xsl:if>log</m:mo>
-            <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-          </m:msup>
-        </xsl:if>
-        <xsl:if test="*[2]=m:logbase">
-          <m:msubsup>
-            <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:log/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:log/@id"/>
-          </xsl:attribute>
-        </xsl:if>log</m:mo>
-            <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-            <xsl:apply-templates select = "m:logbase" mode = "semantics"/>
-          </m:msubsup>
-        </xsl:if>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:if test="not(*[2]=m:logbase)">
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:log/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:log/@id"/>
-          </xsl:attribute>
-        </xsl:if>log</m:mo>
-        </xsl:if>
-        <xsl:if test="*[2]=m:logbase">
-          <m:msub>
-            <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:log/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:log/@id"/>
-          </xsl:attribute>
-        </xsl:if>log</m:mo>
-            <xsl:apply-templates select = "m:logbase" mode = "semantics"/>
-          </m:msub>
-        </xsl:if>
-      </xsl:otherwise>
-    </xsl:choose>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-    <xsl:if test="*[2]=m:logbase">
-      <xsl:apply-templates select = "*[3]" mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-      </xsl:apply-templates>
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:logbase)">
-      <xsl:apply-templates select = "*[2]" mode = "semantics">
-        <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-      </xsl:apply-templates>
-    </xsl:if>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:diff[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[2]=m:bvar and m:bvar[*[2]=m:degree]">
-      <m:mfrac>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:diff/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:diff/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <m:msup>
-          <m:mo>d</m:mo>
-          <xsl:apply-templates select = "m:bvar/m:degree" mode = "semantics"/>
-        </m:msup>
-        <m:mrow>
-          <m:mo>d</m:mo>
-          <m:msup>
-            <xsl:apply-templates select = "m:bvar/*[1]" mode = "semantics"/>
-            <xsl:apply-templates select = "m:bvar/m:degree" mode = "semantics"/>
-          </m:msup>
-        </m:mrow>
-      </m:mfrac>
-    </xsl:if>
-    <xsl:if test="*[2]=m:bvar and not(m:bvar[*[2]=m:degree])">
-      <m:mfrac>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:diff/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:diff/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <m:mo>d</m:mo>
-        <m:mrow>
-          <m:mo>d</m:mo>
-          <xsl:apply-templates select = "m:bvar/*[1]" mode = "semantics"/>
-        </m:mrow>
-      </m:mfrac>
-    </xsl:if>
-    <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:partialdiff[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:for-each select = "m:bvar">
-      <xsl:if test="*[last()]=m:degree">
-        <m:mfrac>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:partialdiff/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:partialdiff/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-          <m:msup>
-             <m:mo>d</m:mo>
-             <xsl:apply-templates select = "m:degree" mode = "semantics"/>
-          </m:msup>
-          <m:mrow>
-            <m:mo>d</m:mo>
-            <m:msup>
-              <xsl:apply-templates select = "*[1]" mode = "semantics"/>
-              <xsl:apply-templates select = "m:degree" mode = "semantics"/>
-            </m:msup>
-          </m:mrow>
-        </m:mfrac>
-      </xsl:if>
-      <xsl:if test="not(*[last()]=m:degree)">
-        <m:mfrac>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:partialdiff/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:partialdiff/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-          <m:mo>d</m:mo>
-          <m:mrow>
-            <m:mo>d</m:mo>
-            <xsl:apply-templates select = "*[1]" mode = "semantics"/>
-          </m:mrow>
-        </m:mfrac>
-      </xsl:if>
-    </xsl:for-each>
-    <xsl:apply-templates select = "*[last()]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:lowlimit | m:uplimit | m:bvar | m:degree | m:logbase">
-  <xsl:apply-templates select="*" mode = "semantics"/>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:divergence[1] | m:grad[1] | m:curl[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-      <xsl:if test="*[1]=m:divergence">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:divergence/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:divergence/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'div'"/>
-      </xsl:if>
-      <xsl:if test="*[1]=m:grad">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:grad/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:grad/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'grad'"/>
-      </xsl:if>
-      <xsl:if test="*[1]=m:curl">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:curl/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:curl/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:value-of select="'curl'"/>
-      </xsl:if>
-    </m:mo>
-    <xsl:choose>
-      <xsl:when test="*[2]=m:ci">
-        <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <m:mfenced separators="">
-          <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-        </m:mfenced>
-      </xsl:otherwise>
-    </xsl:choose>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:laplacian[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:msup>
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:laplacian/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:laplacian/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:text disable-output-escaping='yes'>&#x0394;</xsl:text></m:mo>
-      <m:mn>2</m:mn>
-    </m:msup>
-    <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** SET THEORY ***************** -->
-
-<xsl:template match = "m:set | m:list">
-  <m:mfenced open="{{" close="}}" separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="*[1]=m:bvar and *[2]=m:condition">
-      <xsl:apply-templates select="m:bvar" mode = "semantics"/>
-      <m:mo>|</m:mo>
-      <xsl:apply-templates select="m:condition" mode = "semantics"/>
-    </xsl:if>
-    <xsl:if test="*[1]=m:condition and not(child::m:bvar)">
-      <m:mfenced open="" close="" separators=",">
-        <xsl:for-each select = "*[not(self::m:condition) and not(self::m:bvar)]">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-      <m:mo>|</m:mo>
-      <xsl:apply-templates select="m:condition" mode = "semantics"/>
-    </xsl:if>
-    <xsl:if test="not(child::m:bvar) and not(child::m:condition)">
-      <m:mfenced open="" close="" separators=",">
-        <xsl:for-each select = "*">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-    </xsl:if>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:union[1]]">
-  <xsl:param name="IN_OP" select="$DOESNT_MATTER"/>
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $UNION_PREC or $IN_PREC=$UNION_PREC
-                    and $PARAM=$PAR_SAME and not($IN_OP=$UNION_OP)">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="union">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="union">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="union">
-          <xsl:with-param name="IN_OP" select="$UNION_OP"/>
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:union[1]]" mode="union">
-  <xsl:param name="IN_OP" select="$DOESNT_MATTER"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode="semantics">
-    <xsl:with-param name="IN_PREC" select="$UNION_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:union/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:union/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x22C3;</m:mo>
-<!-- HELM: not rendered correctly <![CDATA[&Union;]]> -->
-  <!--   <xsl:text disable-output-escaping="yes">&#x22C3;</xsl:text></m:mo>-->
-    <xsl:apply-templates select = "." mode="semantics">
-      <xsl:with-param name="PARAM" select="$PAR_SAME"/>    <!--new-->
-      <xsl:with-param name="IN_PREC" select="$UNION_PREC"/>
-      <xsl:with-param name="IN_OP" select="$UNION_OP"/>    <!--new-->
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:intersect[1]]">
-  <xsl:param name="IN_OP" select="$DOESNT_MATTER"/>
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $INTERSECT_PREC or $IN_PREC=$INTERSECT_PREC
-                    and $PARAM=$PAR_SAME and not($IN_OP=$INTERSECT_OP)">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="intersect">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="intersect">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="intersect">
-          <xsl:with-param name="IN_OP" select="$INTERSECT_OP"/>
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:intersect[1]]" mode="intersect">
-  <xsl:param name="IN_OP" select="$DOESNT_MATTER"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode="semantics">
-    <xsl:with-param name="IN_PREC" select="$INTERSECT_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:intersect/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:intersect/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Intersection;]]> -->
-      <xsl:text disable-output-escaping="yes">&#x22C2;</xsl:text></m:mo>
-    <xsl:apply-templates select = "." mode="semantics">
-      <xsl:with-param name="PARAM" select="$PAR_SAME"/>    <!--new-->
-      <xsl:with-param name="IN_PREC" select="$INTERSECT_PREC"/>
-      <xsl:with-param name="IN_OP" select="$UNION_OP"/>    <!--new-->
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:setdiff[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $SETDIFF_PREC or $IN_PREC=$SETDIFF_PREC
-                    and $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="setdiff">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="setdiff">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="setdiff">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:setdiff[1]]" mode="setdiff">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$SETDIFF_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:setdiff/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:setdiff/@id"/>
-          </xsl:attribute>
-        </xsl:if>\</m:mo>
-  <xsl:apply-templates select = "*[3]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$SETDIFF_PREC"/>
-    <xsl:with-param name="PARAM" select="$PAR_SAME"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-  </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:cartesianproduct[1]]">
-  <xsl:param name="IN_PREC" select="$NO_PREC"/>
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:choose>
-    <xsl:when test="$IN_PREC &gt; $CARTPROD_PREC or $IN_PREC=$CARTPROD_PREC
-                    and $PARAM=$PAR_SAME">
-      <m:mfenced separators="">
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="cartprod">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mfenced>
-    </xsl:when>
-    <xsl:when test="$IN_PREC &gt; $NO_PREC and $IN_PREC &lt; $FUNCTION_PREC
-                    and not($SEM_SW=$SEM_ALL) and not($SEM_SW=$SEM_XREF)
-                    and not($SEM_SW=$SEM_XREF_EXT)">
-      <xsl:apply-templates select="." mode="cartprod">
-        <xsl:with-param name="PARAM" select="$PARAM"/>
-        <xsl:with-param name="PAREN" select="$PAREN"/>
-        <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-      </xsl:apply-templates>
-    </xsl:when>
-    <xsl:otherwise>
-      <m:mrow>
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="@id"/>
-          </xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="." mode="cartprod">
-          <xsl:with-param name="PARAM" select="$PARAM"/>
-          <xsl:with-param name="PAREN" select="$PAREN"/>
-          <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-        </xsl:apply-templates>
-      </m:mrow>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:cartesianproduct[1]]" mode="cartprod">
-  <xsl:param name="PARAM" select="$NO_PARAM"/>
-  <xsl:param name="PAREN" select="$PAR_NO"/>
-  <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
-  <xsl:apply-templates select = "*[2]" mode = "semantics">
-    <xsl:with-param name="IN_PREC" select="$CARTPROD_PREC"/>
-    <xsl:with-param name="PARAM" select="$PARAM"/>
-    <xsl:with-param name="PAREN" select="$PAREN"/>
-    <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
-  </xsl:apply-templates>
-  <xsl:for-each select = "*[position()>2]">
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and ../m:cartesianproduct/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="../m:cartesianproduct/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&times;]]> -->
-     <xsl:text disable-output-escaping="yes">&#x00D7;</xsl:text></m:mo>
-    <xsl:apply-templates select = "." mode="semantics">
-      <xsl:with-param name="IN_PREC" select="$CARTPROD_PREC"/>
-      <xsl:with-param name="PARAM" select="$PAR_SAME"/>
-      <xsl:with-param name="PAREN" select="$PAREN"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </xsl:for-each>
-</xsl:template>
-
-<!-- HELM WARNING: card id was lost! -->
-<xsl:template match = "m:apply[m:card[1]]">
-<!-- HELM: was
-  <m:mfenced open="|" close="|" separators=",">
-     Now is: mrow + mo -->
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:card/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:card/@id"/>
-          </xsl:attribute>
-        </xsl:if>|</mo>
-    <xsl:for-each select = "*[position()>1]">
-      <xsl:apply-templates select = "." mode="semantics"/>
-    </xsl:for-each>
-     <mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:setdiff/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:setdiff/@id"/>
-          </xsl:attribute>
-        </xsl:if>|</mo>
-  </m:mrow>
-<!-- HELM:  </m:mfenced> -->
-</xsl:template>
-
-
-<!-- ***************** SEQUENCES AND SERIES ***************** -->
-
-<xsl:template match = "m:apply[m:sum[1] | m:product[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="*[2]=m:bvar and m:lowlimit and m:uplimit">
-        <m:munderover>
-          <m:mo>
-            <xsl:if test="*[1]=m:sum">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:sum/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:sum/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-             <xsl:text disable-output-escaping='yes'>&#x2211;</xsl:text>
-            </xsl:if>
-            <xsl:if test="*[1]=m:product">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:product/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:product/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-             <xsl:text disable-output-escaping='yes'>&#x220F;</xsl:text>
-            </xsl:if>
-          </m:mo>
-          <m:mrow>
-            <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-            <m:mo>=</m:mo>
-            <xsl:apply-templates select = "m:lowlimit" mode = "semantics"/>
-          </m:mrow>
-          <xsl:apply-templates select = "m:uplimit" mode = "semantics"/>
-        </m:munderover>
-        <xsl:apply-templates select = "*[5]" mode = "semantics"/>
-      </xsl:when>
-      <xsl:when test="*[2]=m:bvar and *[3]=m:condition">
-        <m:munder>
-          <m:mo>
-            <xsl:if test="*[1]=m:sum">
-             <xsl:text disable-output-escaping='yes'>&#x2211;</xsl:text>
-            </xsl:if>
-            <xsl:if test="*[1]=m:product">
-             <xsl:text disable-output-escaping='yes'>&#x220F;</xsl:text>
-            </xsl:if>
-          </m:mo>
-          <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-        </m:munder>
-        <xsl:apply-templates select = "*[4]" mode = "semantics"/>
-      </xsl:when>
-      <xsl:when test="*[2]=m:domainofapplication">
-        <m:munder>
-          <m:mo>
-            <xsl:if test="*[1]=m:sum">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:sum/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:sum/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Sum;]]> -->
-              <xsl:text disable-output-escaping="yes">&#x2211;</xsl:text>
-            </xsl:if>
-            <xsl:if test="*[1]=m:product">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:product/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:product/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Product;]]> -->
-              <xsl:text disable-output-escaping="yes">&#x220F;</xsl:text>
-            </xsl:if>
-          </m:mo>
-          <xsl:apply-templates select="m:domainofapplication" mode = "semantics"/>
-        </m:munder>
-        <m:mrow>
-          <xsl:apply-templates select="*[position()=last()]" mode = "semantics"/>
-          </m:mrow>
-        </xsl:when>
-      </xsl:choose>
-    </m:mrow>
-  </xsl:template>
-  
-<!-- HELM: was (it didn't match with prefixed MathML)
-<xsl:template match="m:apply[child::*[position()=1 and name()='int']]">
-     Now is: -->
-<xsl:template match="m:apply[child::*[position()=1 and self::m:int]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-    <xsl:when test="m:condition">
-      <m:msub>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:int/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:int/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Integral;]]> -->
-         <xsl:text disable-output-escaping="yes">&#x222B;</xsl:text></m:mo>
-        <xsl:apply-templates select="m:condition" mode="semantics"/>
-      </m:msub>
-      <m:mrow>
-        <xsl:apply-templates select="*[position()=last()]" mode="semantics"/>
-      </m:mrow>
-      <m:mrow>
-        <m:mo>d</m:mo>
-        <xsl:apply-templates select="m:bvar" mode="semantics"/>
-      </m:mrow>
-    </xsl:when>
-    <xsl:when test="m:domainofapplication">
-      <m:msub>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:int/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:int/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Integral;]]> -->
-         <xsl:text disable-output-escaping="yes">&#x222B;</xsl:text></m:mo>
-        <xsl:apply-templates select="m:domainofapplication" mode="semantics"/>
-      </m:msub>
-      <m:mrow>
-        <xsl:apply-templates select="*[position()=last()]" mode="semantics" />
-      </m:mrow>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:choose>
-        <xsl:when test="m:interval">
-          <m:msubsup>
-            <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:int/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:int/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Integral;]]> -->
-             <xsl:text disable-output-escaping="yes">&#x222B;</xsl:text></m:mo>
-            <xsl:apply-templates select="m:interval/*[position()=1]" mode="semantics" />
-            <xsl:apply-templates select="m:interval/*[position()=2]" mode="semantics"/>
-          </m:msubsup>
-          <xsl:apply-templates select="*[position()=last()]" mode="semantics"/>
-          <m:mo>d</m:mo>
-          <xsl:apply-templates select="m:bvar" mode="semantics"/>
-        </xsl:when>
-        <xsl:when test="m:lowlimit">
-        <m:msubsup>
-          <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:int/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:int/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Integral;]]> -->
-           <xsl:text disable-output-escaping="yes">&#x222B;</xsl:text></m:mo>
-          <m:mrow><xsl:apply-templates select="m:lowlimit" mode="semantics"/></m:mrow>
-          <m:mrow><xsl:apply-templates select="m:uplimit" mode="semantics"/></m:mrow>
-        </m:msubsup>
-        <xsl:apply-templates select="*[position()=last()]" mode="semantics"/>
-        <m:mo>d</m:mo><xsl:apply-templates select="m:bvar" mode="semantics"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:int/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:int/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&Integral;]]> -->
-         <xsl:text disable-output-escaping="yes">&#x222B;</xsl:text></m:mo>
-       <xsl:apply-templates select="*[position()=last()]" mode="semantics"/>
-       <m:mo>d</m:mo><xsl:apply-templates select="m:bvar" mode="semantics"/>
-      </xsl:otherwise>
-      </xsl:choose>
-    </xsl:otherwise>
-    </xsl:choose>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:limit[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:munder>
-      <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:lim/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:lim/@id"/>
-          </xsl:attribute>
-        </xsl:if>lim</m:mo>
-      <m:mrow>
-        <xsl:if test="*[2]=m:bvar and *[3]=m:lowlimit">
-            <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-            <m:mo><xsl:text disable-output-escaping='yes'>&#x2192;</xsl:text></m:mo>
-            <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-        </xsl:if>
-        <xsl:if test="*[2]=m:bvar and *[3]=m:condition">
-          <xsl:apply-templates select = "*[3]" mode = "semantics"/>
-        </xsl:if>
-      </m:mrow>
-    </m:munder>
-    <xsl:apply-templates select = "*[4]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** TRIGONOMETRY ***************** -->
-
-<xsl:template match = "m:apply[*[1][self::m:sin | self::m:cos |
-                       self::m:tan | self::m:sec | self::m:csc |
-                       self::m:cot | self::m:sinh | self::m:cosh |
-                       self::m:tanh | self::m:sech | self::m:csch |
-                       self::m:coth | self::m:arcsin | self::m:arccos |
-                       self::m:arctan | self::m:arcsec | self::m:arccsc | 
-                       self::m:arccot | self::m:arcsinh | self::m:arccosh |
-                       self::m:arctanh | self::m:arcsech | self::m:arccsch |
-                       self::m:arccoth ] ]">
-                        
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:if test="not(parent::m:apply[m:power[1]])">
-      <xsl:apply-templates select = "*[1]" mode = "trigonometry"/>
-    </xsl:if>
-    <xsl:if test="parent::m:apply[m:power[1]]">
-      <m:msup>
-        <xsl:apply-templates select = "*[1]" mode = "trigonometry"/>
-        <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
-      </m:msup>
-    </xsl:if>
-    <m:mo><xsl:text disable-output-escaping='yes'>&#x2061;</xsl:text></m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics">
-      <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-      <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
-    </xsl:apply-templates>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "*" mode="trigonometry">
-  <m:mo>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:choose>
-      <xsl:when test="self::m:sin">
-        <xsl:value-of select="'sin'"/>
-      </xsl:when>
-      <xsl:when test="self::m:cos">
-        <xsl:value-of select="'cos'"/>
-      </xsl:when>
-      <xsl:when test="self::m:tan">
-        <xsl:value-of select="'tan'"/>
-      </xsl:when>
-      <xsl:when test="self::m:sec">
-        <xsl:value-of select="'sec'"/>
-      </xsl:when>
-      <xsl:when test="self::m:csc">
-        <xsl:value-of select="'csc'"/>
-      </xsl:when>
-      <xsl:when test="self::m:cot">
-        <xsl:value-of select="'cot'"/>
-      </xsl:when>
-      <xsl:when test="self::m:sinh">
-        <xsl:value-of select="'sinh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:cosh">
-        <xsl:value-of select="'cosh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:tanh">
-        <xsl:value-of select="'tanh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:sech">
-        <xsl:value-of select="'sech'"/>
-      </xsl:when>
-      <xsl:when test="self::m:csch">
-        <xsl:value-of select="'csch'"/>
-      </xsl:when>
-      <xsl:when test="self::m:coth">
-        <xsl:value-of select="'coth'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arcsin">
-        <xsl:value-of select="'arcsin'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccos">
-        <xsl:value-of select="'arccos'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arctan">
-        <xsl:value-of select="'arctan'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arcsec">
-        <xsl:value-of select="'arcsec'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccsc">
-        <xsl:value-of select="'arccsc'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccot">
-        <xsl:value-of select="'arccot'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arcsinh">
-        <xsl:value-of select="'arcsinh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccosh">
-        <xsl:value-of select="'arccosh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arctanh">
-        <xsl:value-of select="'arctanh'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arcsech">
-        <xsl:value-of select="'arcsech'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccsch">
-        <xsl:value-of select="'arccsch'"/>
-      </xsl:when>
-      <xsl:when test="self::m:arccoth">
-        <xsl:value-of select="'arccot'"/>
-      </xsl:when>
-    </xsl:choose>
-  </m:mo>
-</xsl:template>
-
-
-<!-- ***************** STATISTICS ***************** -->
-
-<!-- HELM WARNING: mean id was lost! -->
-<xsl:template match = "m:apply[m:mean[1]]">
-<!-- HELM: was
-  <m:mfenced open="&lt;" close="&gt;" separators=",">
-     Now is: mrow + mo + separator (mo) -->
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:mean/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:mean/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x003C;</m:mo>
-    <xsl:for-each select = "*[position()>1]">
-<!-- HELM: if added -->
-      <xsl:if test="position() != 1">
-       <m:mo separator="true">,</m:mo>
-      </xsl:if> 
-      <xsl:apply-templates select = "." mode="semantics"/>
-    </xsl:for-each>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:mean/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:mean/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x003E;</m:mo>
-   </m:mrow>
-<!-- HELM:  </m:mfenced> -->
-</xsl:template>
-
-<xsl:template match = "m:apply[m:sdev[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:sdev/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:sdev/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-     <xsl:text disable-output-escaping='yes'>&#x03C3;</xsl:text></m:mo>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:variance[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:variance/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:variance/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-     <xsl:text disable-output-escaping='yes'>&#x03C3;</xsl:text></m:mo>
-    <m:msup>
-      <m:mfenced separators=",">
-        <xsl:for-each select = "*[position()>1]">
-          <xsl:apply-templates select = "." mode="semantics"/>
-        </xsl:for-each>
-      </m:mfenced>
-      <m:mn>2</m:mn>
-    </m:msup>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:median[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:median/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:median/@id"/>
-          </xsl:attribute>
-        </xsl:if>median</m:mo>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:mode[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:mode/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:mode/@id"/>
-          </xsl:attribute>
-        </xsl:if>mode</m:mo>
-    <m:mfenced separators=",">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </m:mfenced>
-  </m:mrow>
-</xsl:template>
-
-<!-- HELM WARNING: mean id was lost! -->
-<xsl:template match = "m:apply[m:moment[1]]">
-<!-- HELM: was
-  <m:mfenced open="&lt;" close="&gt;" separators="">
-     Now is: mrow + mo -->
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:moment/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:momemt/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x003C;</m:mo>
-    <xsl:if test="*[2]=m:degree and not(*[3]=m:momentabout)">
-      <m:msup>
-        <xsl:apply-templates select="*[3]" mode = "semantics"/>
-          <xsl:apply-templates select="*[2]" mode = "semantics"/>
-          </m:msup>
-        </xsl:if>
-        <xsl:if test="*[2]=m:degree and *[3]=m:momentabout">
-          <m:msup>
-            <xsl:apply-templates select="*[4]" mode = "semantics"/>
-            <xsl:apply-templates select="*[2]" mode = "semantics"/>
-      </m:msup>  
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:degree) and *[2]=m:momentabout">
-       <xsl:for-each select = "*[position()>2]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </xsl:if>
-    <xsl:if test="not(*[2]=m:degree) and not(*[2]=m:momentabout)">
-      <xsl:for-each select = "*[position()>1]">
-        <xsl:apply-templates select = "." mode="semantics"/>
-      </xsl:for-each>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:mean/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:mean/@id"/>
-          </xsl:attribute>
-        </xsl:if>&#x003E;</m:mo>
-  </m:mrow>
-<!-- HELM:  </m:mfenced> -->
-</xsl:template>
-
-
-<!-- ***************** LINEAR ALGEBRA ***************** -->
-
-<xsl:template match="m:vector">
-  <m:mfenced separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mtable>
-      <xsl:for-each select="*">
-        <m:mtd>
-          <xsl:apply-templates select="." mode = "semantics"/>
-        </m:mtd>
-      </xsl:for-each>
-    </m:mtable>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:matrix">
-  <m:mfenced separators="">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mtable>
-      <xsl:apply-templates select="*" mode = "semantics"/>
-    </m:mtable>
-  </m:mfenced>
-</xsl:template>
-
-<xsl:template match = "m:matrixrow">
-  <m:mtr>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:for-each select="*">
-      <m:mtd>
-        <xsl:apply-templates select="." mode = "semantics"/>
-      </m:mtd>
-    </xsl:for-each>
-  </m:mtr>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:determinant[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:determinant/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:determinant/@id"/>
-          </xsl:attribute>
-        </xsl:if>det</m:mo>
-    <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:transpose[1]]">
-  <m:msup>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select = "*[2]" mode = "semantics"/>
-    <m:mo>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:transpose/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:transpose/@id"/>
-          </xsl:attribute>
-        </xsl:if>T</m:mo>
-  </m:msup>
-</xsl:template>
-
-<!-- HELM: ERROR, this template generates the selected content elements
-     and doesn't generate the presentation for selector                 -->
-<!--<xsl:template match = "m:apply[m:selector[1]]">
-  <xsl:if test="*[2]=m:matrix and *[3]=m:cn">
-      <xsl:variable name="m" select = "*[3]"/>
-      <xsl:choose>
-        <xsl:when test="*[4]=m:cn">
-          <xsl:variable name="n" select = "*[4]"/>
-          <xsl:copy-of select = "m:matrix/*[position()=$m]/*[position()=$n]"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:copy-of select = "m:matrix/*[position()=$m]"/>
-        </xsl:otherwise>
-      </xsl:choose>
-  </xsl:if>
-  <xsl:if test="(*[2]=m:vector or *[2]=m:list) and *[3]=m:cn">
-    <xsl:variable name="m" select = "*[3]"/>
-    <xsl:copy-of select = "*[2]/*[position()=$m]"/>
-  </xsl:if>
-</xsl:template> -->
-
-<xsl:template match = "m:apply[m:selector[1]]">
-   <msub>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-     <xsl:attribute name="xref">
-      <xsl:value-of select="@id"/>
-     </xsl:attribute>
-    </xsl:if> 
-    <xsl:apply-templates select = "*[2]" mode="semantics"/>
-    <m:mrow>
-     <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:selector/@id">
-      <xsl:attribute name="xref">
-       <xsl:value-of select="m:selector/@id"/>
-      </xsl:attribute>
-     </xsl:if>
-     <xsl:choose>
-     <xsl:when test="*[3]=m:cn">
-      <xsl:apply-templates select = "*[3]" mode="semantics"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <m:mi>*</m:mi>
-     </xsl:otherwise>
-     </xsl:choose> 
-     <xsl:if test="*[2]=m:matrix and *[4]=m:cn">
-      <xsl:apply-templates select = "*[4]" mode="semantics"/>
-     </xsl:if>
-    </m:mrow>
-   </msub>
-</xsl:template>
-
-<xsl:template match = "m:apply[m:vectorproduct[1] |
-                                 m:scalarproduct[1] | m:outerproduct[1]]">
-  <m:mrow>
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-    <xsl:apply-templates select="*[2]" mode = "semantics"/>
-    <m:mo>
-      <xsl:if test="m:vectorproduct[1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:vectorproduct/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:vectorproduct/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-       <xsl:text disable-output-escaping='yes'>&#x2A2F;</xsl:text>
-      </xsl:if>
-      <xsl:if test="m:scalarproduct[1] | m:outerproduct[1]">
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and *[1]/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="*[1]/@id"/>
-          </xsl:attribute>
-        </xsl:if>           
-        <xsl:value-of select="'.'"/>
-      </xsl:if>
-    </m:mo>
-    <xsl:apply-templates select="*[3]" mode = "semantics"/>
-  </m:mrow>
-</xsl:template>
-
-
-<!-- ***************** CONSTANT and SYMBOL ELEMENTS ***************** -->
-
-<xsl:template match="m:integers">
-   <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:integers/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:integers/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-    <xsl:text disable-output-escaping='yes'>&#x2124;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:reals">
-   <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:reals/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:reals/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-    <xsl:text disable-output-escaping='yes'>&#x211D;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:rationals">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:rationals/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:rationals/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-   <xsl:text disable-output-escaping='yes'>&#x211A;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:naturalnumbers">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:naturalnumbers/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:naturalnumbers/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-   <xsl:text disable-output-escaping='yes'>&#x2115;</xsl:text></m:mi> 
-</xsl:template>
-
-<xsl:template match="m:complexes">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:complexes/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:complexes/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-   <xsl:text disable-output-escaping='yes'>&#x2102;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:primes">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:primes/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:primes/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-   <xsl:text disable-output-escaping='yes'>&#x2119;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:exponentiale">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:exponentiale/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:exponentiale/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-   <xsl:text disable-output-escaping="yes">&#x2147;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:imaginaryi">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:imaginaryi/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:imaginaryi/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&ImaginaryI;]]> -->
-   <xsl:text disable-output-escaping="yes">&#xF74E;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:notanumber">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:notanumber/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:notanumber/@id"/>
-          </xsl:attribute>
-        </xsl:if>NaN</m:mi>  
-</xsl:template>
-
-<xsl:template match="m:true">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:true/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:true/@id"/>
-          </xsl:attribute>
-        </xsl:if>true</m:mi>  
-</xsl:template>
-
-<xsl:template match="m:false">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:false/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:false/@id"/>
-          </xsl:attribute>
-        </xsl:if>false</m:mi>   
-</xsl:template>
-
-<xsl:template match="m:emptyset">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:emptyset/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:emptyset/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&empty;]]> -->
-   <xsl:text disable-output-escaping="yes">&#xE2D3;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:pi">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:pi/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:pi/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&pi;]]> -->
-   <xsl:text disable-output-escaping="yes">&#x03C0;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:eulergamma">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:eulergamma/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:eulergamma/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&gamma;]]> -->
-   <xsl:text disable-output-escaping="yes">&#x03B3;</xsl:text></m:mi>
-</xsl:template>
-
-<xsl:template match="m:infinity">
-  <m:mi>
-<!-- HELM: xref added -->        
-        <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and m:infinity/@id">
-          <xsl:attribute name="xref">
-            <xsl:value-of select="m:infinity/@id"/>
-          </xsl:attribute>
-        </xsl:if>
-<!-- HELM: not rendered correctly <![CDATA[&infin;]]> -->
-   <xsl:text disable-output-escaping="yes">&#x221E;</xsl:text></m:mi>
-</xsl:template>
-
-</xsl:stylesheet>
-
-
diff --git a/helm/style/mmlextension.xsl b/helm/style/mmlextension.xsl
deleted file mode 100644 (file)
index 4a801a6..0000000
+++ /dev/null
@@ -1,2175 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- Extension to the XSLT version 0.07 of MathML content to presentation: -->
-<!-- First draft: February 19 2000, Andrea Asperti, Irene Schena           -->
-<!-- Revised: March 3 2000, Irene Schena                                   -->
-<!-- Revised: March 15 2000, Claudio Sacerdoti Coen, Irene Schena          -->
-<!-- Revised: March 21 2000, Irene Schena                                  -->
-<!--***********************************************************************--> 
-
-<!-- NOTE: the namespace declaration has to be done in the stylesheets 
-which generates the toplevel element (see for instance xlink) -->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm"
-                              xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!-- OLD: <xsl:import href="mml2mmlv1_0.xsl"/> -->
-
-<xsl:import href="mmlnotation.xsl"/>
-
-<xsl:import href="mmltheoryextension.xsl"/>
-
-
-<xsl:param name="explodeall" select="false()"/>
-
-<!--***********************************************************************-->
-<!-- Parameter affecting line-breaking                                     -->
-<!--***********************************************************************-->
-
-<xsl:variable name="framewidth" select="35"/>
-
-<!--***********************************************************************-->
-<!-- Gli oggetti sono stampati come mtext all'interno di una marca toplevel-->
-<!-- math ma al di fuori di semantics. Ora vi sono tanti semantics quanti  -->
-<!-- sono i termini: la presentation per un termine e' generata come primo -->
-<!-- figlio di un semantics e l'originario content viene inserito nel      -->
-<!-- nel secondo figlio di semantics, annotation-xml                       -->
-<!--***********************************************************************-->
-
-<!--**********************-->
-<!--        OBJECTS       -->
-<!--**********************-->
-
-<xsl:param name="type" select="'standalone'"/>
-
-<xsl:template match="/">
- <xsl:choose>
-  <xsl:when test="$type = 'standalone'">
-   <xsl:apply-templates select="*"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <to_be_embedded>
-    <xsl:apply-templates select="*"/>
-   </to_be_embedded>
-  </xsl:otherwise> 
- </xsl:choose>
-</xsl:template>
-
-<!-- DEFINITION -->
-
-<xsl:template match="Definition">
-    <m:math>
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>DEFINITION <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>) OF TYPE</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="type/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>AS</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="body/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-     </m:mtable>
-    </m:math>
-</xsl:template>
-
-<!-- AXIOM -->
-
-<xsl:template match="Axiom">
-    <m:math>
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>AXIOM <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>) OF TYPE</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="type/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-     </m:mtable>
-    </m:math>
-</xsl:template>
-
-<!-- UNFINISHED PROOF -->
-
-<xsl:template match="CurrentProof">
-    <m:math>
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>UNFINISHED PROOF <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>)</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>THESIS:</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="type/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>CONJECTURES:</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <xsl:for-each select="Conjecture">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow helm:xref="{@helm:xref}">
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:for-each select="Decl|Def|Hidden">
-          <xsl:choose>
-           <xsl:when test="name(.)='Decl'">
-            <m:mrow helm:xref="{@helm:xref}">
-             <xsl:choose>
-              <xsl:when test="@name">
-               <m:mi><xsl:value-of select="@name"/></m:mi>
-              </xsl:when>
-              <xsl:otherwise>
-               <m:mi>_</m:mi>
-              </xsl:otherwise>
-             </xsl:choose>
-             <m:mo>:</m:mo>
-             <xsl:apply-templates select="./*[1]"/>
-            </m:mrow>
-           </xsl:when>
-           <xsl:when test="name(.)='Def'">
-            <m:mrow helm:xref="{@helm:xref}">
-             <xsl:choose>
-              <xsl:when test="@name">
-               <m:mi><xsl:value-of select="@name"/></m:mi>
-              </xsl:when>
-              <xsl:otherwise>
-               <m:mi>_</m:mi>
-              </xsl:otherwise>
-             </xsl:choose>
-             <m:mo>:=</m:mo>
-             <xsl:apply-templates select="./*[1]"/>
-            </m:mrow>
-           </xsl:when>
-           <xsl:otherwise>
-            <m:mrow helm:xref="{@helm:xref}">
-             <m:mi>_</m:mi>
-             <m:mo>:?</m:mo>
-             <m:mi>_</m:mi>
-            </m:mrow>
-           </xsl:otherwise>
-          </xsl:choose>
-          <xsl:if test="not (position() = last())">
-           <m:mo>;</m:mo>
-          </xsl:if>
-         </xsl:for-each>
-         <m:mo>|-</m:mo>
-         <m:msub><m:mi>?</m:mi><m:mn><xsl:value-of select="@no"/></m:mn></m:msub>
-         <m:mo>:</m:mo>
-         <xsl:apply-templates select="./Goal/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      </xsl:for-each>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>PROOF:</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="body/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-     </m:mtable>
-    </m:math>
-</xsl:template>
-
-<!-- MUTUAL INDUCTIVE DEFINITION -->
-
-<xsl:template match="InductiveDefinition">
-    <m:math>
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
-     <xsl:for-each select="InductiveType">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <xsl:choose>
-         <xsl:when test="position() = 1">
-          <xsl:choose>
-          <xsl:when test="string(./@inductive) = &quot;true&quot;">
-           <m:mtext>INDUCTIVE DEFINITION</m:mtext>
-          </xsl:when>
-          <xsl:otherwise>
-           <m:mtext>COINDUCTIVE DEFINITION</m:mtext>
-          </xsl:otherwise>
-          </xsl:choose>  
-         </xsl:when>
-         <xsl:otherwise>
-          <m:mtext>AND</m:mtext>
-         </xsl:otherwise>
-         </xsl:choose>
-         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-         <m:mtext><xsl:value-of select="./@name"/>(<xsl:if test="string(../Params) != &quot;&quot;"><xsl:value-of select="../Params"/></xsl:if>)</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow> 
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <m:mtext>[</m:mtext>
-         <xsl:choose>
-         <xsl:when test="string(../Param) != &quot;&quot;">         
-          <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-           <xsl:for-each select="../Param">
-            <m:mtr>
-             <m:mtd>
-              <m:mrow>   
-               <m:mi><xsl:value-of select="./@name"/></m:mi>
-               <m:mo>:</m:mo>
-               <xsl:apply-templates select="*"/>
-              </m:mrow>
-             </m:mtd>
-            </m:mtr>
-           </xsl:for-each>
-            <m:mtr>
-             <m:mtd>
-              <m:mrow>
-               <m:mtext>]</m:mtext>
-              </m:mrow>
-             </m:mtd>
-            </m:mtr>
-          </m:mtable>
-         </xsl:when>
-         <xsl:otherwise>
-          <m:mtext>]</m:mtext>
-         </xsl:otherwise>
-         </xsl:choose>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>OF ARITY</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="./arity/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>BUILT FROM</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <xsl:for-each select="./Constructor">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <xsl:choose>
-         <xsl:when test="position() = 1">
-          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         </xsl:when>
-         <xsl:otherwise>
-          <m:mtext>|</m:mtext>
-          <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-         </xsl:otherwise>
-         </xsl:choose>
-         <m:mtext><xsl:value-of select="./@name"/> OF</m:mtext>
-         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-         <xsl:apply-templates select="./*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      </xsl:for-each>
-     </xsl:for-each>
-     </m:mtable>
-    </m:math>
-</xsl:template>
-
-<!-- VARIABLE -->
-
-<xsl:template match="Variable">
-    <m:math>
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mtext>VARIABLE <xsl:value-of select="@name"/> OF TYPE</m:mtext>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-         <xsl:apply-templates select="type/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <xsl:if test="name(*[1])='body'">
-       <m:mtr>
-        <m:mtd>
-         <m:mrow>
-          <m:mtext>AS</m:mtext>
-         </m:mrow>
-        </m:mtd>
-       </m:mtr>
-       <m:mtr>
-        <m:mtd>
-         <m:mrow>
-          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-          <xsl:apply-templates select="body/*[1]"/>
-         </m:mrow>
-        </m:mtd>
-       </m:mtr>
-      </xsl:if>
-     </m:mtable>
-    </m:math>
-</xsl:template>
-
-<!-- SEQUENT -->
-
-<xsl:template match="Sequent">
- <xsl:variable name="rowlines">
-  <xsl:for-each select="Decl|Def">
-   <xsl:if test="position() != last()">
-    <xsl:text>none </xsl:text>
-   </xsl:if>
-  </xsl:for-each>
-  <xsl:text>solid</xsl:text>
- </xsl:variable>
- <xsl:variable name="no" select="@no"/>
-    <m:math>
-     <m:mi><xsl:text>?</xsl:text><xsl:value-of select="$no"/></m:mi>
-     <m:mo>:</m:mo>
-     <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}" rowlines="{$rowlines}">
-      <xsl:for-each select="Decl|Def">
-       <m:mtr>
-        <m:mtd>
-         <m:mrow helm:xref="{@helm:xref}">
-          <m:mi><xsl:value-of select="@name"/></m:mi>
-          <xsl:choose>
-           <xsl:when test="name(.) = 'Decl'">
-            <m:mo>:</m:mo>
-           </xsl:when>
-           <xsl:otherwise>
-            <m:mo>:=</m:mo>
-           </xsl:otherwise>
-          </xsl:choose>
-          <xsl:apply-templates select="*[1]"/>
-         </m:mrow>
-        </m:mtd>
-       </m:mtr>
-      </xsl:for-each>
-      <xsl:if test="not(Decl|Def)">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      </xsl:if>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <xsl:apply-templates select="Goal/*[1]"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-     </m:mtable>
-    </m:math>
-</xsl:template>
-
-<!--**********************-->
-<!--        TERMS         -->
-<!--**********************-->
-
-<xsl:template match="m:bvar">
- <xsl:choose>
-  <xsl:when test="m:type">
-   <xsl:variable name="charlength">
-    <xsl:apply-templates select="m:ci" mode="charcount"/>
-   </xsl:variable>
-   <xsl:choose>
-    <xsl:when test="$charlength >= $framewidth">
-     <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <xsl:apply-templates select="m:ci"/>
-         <m:mo>:</m:mo>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-      <m:mtr>
-       <m:mtd>
-        <m:mrow>
-         <xsl:apply-templates select="m:type"/>
-        </m:mrow>
-       </m:mtd>
-      </m:mtr>
-     </m:mtable>
-    </xsl:when>
-    <xsl:otherwise>
-     <m:mrow>
-      <xsl:apply-templates select="m:ci"/>
-      <m:mo>:</m:mo>
-      <xsl:apply-templates select="m:type"/>
-     </m:mrow>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:apply-templates select="m:ci"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-
-<!-- CSYMBOL -->
-
-<xsl:template match="m:apply[m:csymbol]">
-<xsl:param name="nopar" select="0"/>
-    <xsl:variable name="name"><xsl:value-of select="m:csymbol"/></xsl:variable>
-    <xsl:variable name="charlength"><xsl:apply-templates select="m:csymbol" mode="charcount"/></xsl:variable>
-    <m:mrow>
-     <xsl:if test="@id">
-      <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
-     </xsl:if>
-     <xsl:variable name="id" select="m:csymbol/@id"/>
-     <xsl:choose>
-      <!-- META -->
-      <xsl:when test="$name='meta'">
-       <m:mrow>
-        <xsl:apply-templates select="*[position()=2]"/>
-        <m:mfenced open="[" close="]" separators=";">
-         <xsl:apply-templates select="*[position()>2]"/>
-        </m:mfenced>
-       </m:mrow>
-      </xsl:when>
-      <!-- FORALL -->
-      <xsl:when test="$name='forall'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo mathcolor="Blue">&#8704;</m:mo>
-            <xsl:apply-templates select="m:bvar"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>.</m:mo>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo mathcolor="Blue">&#8704;</m:mo>
-        <xsl:apply-templates select="m:bvar/m:ci"/>
-        <m:mo>:</m:mo>
-        <xsl:apply-templates select="m:bvar/m:type"/>
-        <m:mo>.</m:mo>
-        <xsl:apply-templates select="*[position()=3]"/>
-       </xsl:otherwise>
-       </xsl:choose> 
-      </xsl:when>
-      <!-- LET-IN -->
-      <xsl:when test="$name='let_in'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>LET</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="m:bvar"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>=</m:mo>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>IN</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[position()=4]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo>LET</m:mo>
-        <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        <xsl:apply-templates select="m:bvar/m:ci"/>
-        <m:mo>=</m:mo>
-        <xsl:apply-templates select="*[position()=3]"/>
-        <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        <m:mtext>IN</m:mtext>
-        <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        <xsl:apply-templates select="*[position()=4]"/>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when> 
-      <!-- PROD -->
-      <xsl:when test="$name='prod'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo mathcolor="Blue">&#x03a0;</m:mo>
-            <xsl:apply-templates select="m:bvar"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>.</m:mo>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo mathcolor="Blue">&#x03a0;</m:mo>
-        <xsl:apply-templates select="m:bvar/m:ci"/>
-        <m:mo>:</m:mo>
-        <xsl:apply-templates select="m:bvar/m:type"/>
-        <m:mo>.</m:mo>
-        <xsl:apply-templates select="*[position()=3]"/>
-       </xsl:otherwise>
-       </xsl:choose> 
-      </xsl:when>
-      <!-- ARROW -->
-      <xsl:when test="$name='arrow'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:if test="$nopar=0">
-             <m:mo stretchy="false">(</m:mo>
-            </xsl:if>
-            <xsl:apply-templates select="*[position()=2]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo mathmathcolor="Blue">&#x2192;</m:mo>
-            <xsl:choose>
-            <xsl:when test="*[position()=3]/m:csymbol">
-             <xsl:variable name="nextp"><xsl:value-of select="*[position()=3]/m:csymbol"/></xsl:variable>
-             <xsl:choose>
-             <xsl:when test="$nextp='arrow'">
-              <xsl:apply-templates select="*[position()=3]"><xsl:with-param name="nopar" select="1"/></xsl:apply-templates>
-             </xsl:when>
-             <xsl:otherwise>
-              <xsl:apply-templates select="*[position()=3]"/>
-             </xsl:otherwise>
-             </xsl:choose>
-            </xsl:when>
-            <xsl:otherwise>
-             <xsl:apply-templates select="*[position()=3]"/>
-            </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <xsl:if test="$nopar=0">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">)</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:if>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:if test="$nopar=0">
-         <m:mo stretchy="false">(</m:mo>
-        </xsl:if>
-        <xsl:apply-templates select="*[position()=2]"/>
-        <m:mo mathcolor="Blue">&#x2192;</m:mo>
-        <xsl:choose>
-        <xsl:when test="*[position()=3]/m:csymbol">
-         <xsl:variable name="nextp"><xsl:value-of select="*[position()=3]/m:csymbol"/></xsl:variable>
-         <xsl:choose>
-         <xsl:when test="$nextp='arrow'">
-          <xsl:apply-templates select="*[position()=3]"><xsl:with-param name="nopar" select="1"/></xsl:apply-templates>
-         </xsl:when>
-         <xsl:otherwise>
-          <xsl:apply-templates select="*[position()=3]"/>
-         </xsl:otherwise>
-         </xsl:choose>
-        </xsl:when>
-        <xsl:otherwise>
-         <xsl:apply-templates select="*[position()=3]"/>
-        </xsl:otherwise>
-        </xsl:choose>
-        <xsl:if test="$nopar=0">
-         <m:mo stretchy="false">)</m:mo>
-        </xsl:if>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- APP -->
-      <xsl:when test="$name='app'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">(</m:mo>
-<!-- added precedence to app = FUNCTION_PREC (99) -->
-            <xsl:apply-templates select="*[position()=2]">
-             <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-            </xsl:apply-templates>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <xsl:for-each select="*[position()>2]">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mphantom><m:mtext>(</m:mtext></m:mphantom>
-<!-- added precedence to app = FUNCTION_PREC (99) -->
-            <xsl:apply-templates select=".">
-             <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-            </xsl:apply-templates>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:for-each>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">)</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo stretchy="false">(</m:mo>
-<!-- added precedence to app = FUNCTION_PREC (99) -->
-        <xsl:apply-templates select="*[position()=2]">
-         <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-        </xsl:apply-templates>
-        <xsl:for-each select="*[position()>2]">
-         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-<!-- added precedence to app = FUNCTION_PREC (99) -->
-         <xsl:apply-templates select=".">
-          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
-         </xsl:apply-templates>
-        </xsl:for-each>
-        <m:mo stretchy="false">)</m:mo>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- CAST -->
-      <xsl:when test="$name='cast'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">(</m:mo>
-            <xsl:apply-templates select="*[position()=2]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo mathcolor="Maroon">:></m:mo>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">)</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo stretchy="false">(</m:mo>
-        <xsl:apply-templates select="*[position()=2]"/>
-        <m:mo mathcolor="Maroon">:></m:mo>
-        <xsl:apply-templates select="*[position()=3]"/>
-        <m:mo stretchy="false">)</m:mo>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- PROP -->
-      <xsl:when test="$name='Prop'">
-       <m:mo>Prop</m:mo>
-      </xsl:when>
-      <!-- SET -->
-      <xsl:when test="$name='Set'">
-       <m:mo>Set</m:mo>
-      </xsl:when>
-      <!-- TYPE -->
-      <xsl:when test="$name='Type'">
-       <m:mo>Type</m:mo>
-      </xsl:when>
-      <!-- MUTCASE -->
-      <xsl:when test="$name='mutcase'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <xsl:variable name="charlength"><xsl:apply-templates select="*[position()=2]" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>&lt;</m:mo>
-            <xsl:apply-templates select="*[position()=2]"/>
-            <xsl:if test="$framewidth > $charlength">
-             <m:mo>&gt;</m:mo>
-             <m:mo>CASES</m:mo>
-             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-             <xsl:apply-templates select="*[position()=3]"/>
-            </xsl:if>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <xsl:if test="$charlength >= $framewidth">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>&gt;</m:mo>
-            <m:mo>CASES</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:if>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>OF</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <xsl:for-each select="m:piecewise/m:piece">
-         <xsl:variable name="charlength"><xsl:apply-templates select="./*[2]" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-            <xsl:when test="position() = 1">
-              <m:mphantom><m:mtext>|</m:mtext></m:mphantom>
-            </xsl:when>
-            <xsl:otherwise>
-             <m:mo stretchy="false">|</m:mo>
-            </xsl:otherwise>
-            </xsl:choose>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="./*[2]"/>
-            <xsl:if test="$framewidth > $charlength">
-             <m:mo mathcolor="Green">&#x21d2;</m:mo>
-             <xsl:apply-templates select="./*[1]"/>
-            </xsl:if>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <xsl:if test="$charlength >= $framewidth">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mphantom><m:mtext>|_</m:mtext></m:mphantom>  
-            <m:mo mathcolor="Green">&#x21d2;</m:mo>
-            <xsl:apply-templates select="./*[1]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:if>
-        </xsl:for-each>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>END</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo>&lt;</m:mo><xsl:apply-templates select="*[position()=2]"/><m:mo>&gt;</m:mo>
-        <m:mo>CASES</m:mo>
-        <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        <xsl:apply-templates select="*[position()=3]"/>
-        <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        <m:mo>OF</m:mo>
-        <xsl:for-each select="m:piecewise/m:piece">
-         <xsl:choose>
-         <xsl:when test="position() != 1">
-          <m:mo stretchy="false">|</m:mo>
-         </xsl:when> 
-         </xsl:choose>
-         <xsl:apply-templates select="./*[2]"/>
-         <m:mo mathcolor="Green">&#x21d2;</m:mo>
-         <xsl:apply-templates select="./*[1]"/>
-        </xsl:for-each>
-        <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-        <m:mo>END</m:mo>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- FIX -->
-      <xsl:when test="$name='fix'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>FIX</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mi><xsl:value-of select="m:ci"/></m:mi>
-            <m:mo stretchy="false">{</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-            <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-            <xsl:for-each select="m:bvar"> 
-             <xsl:variable name="charlength"><xsl:apply-templates select="m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mi><xsl:value-of select="m:ci"/></m:mi>
-                <m:mo>:</m:mo>
-                <xsl:if test="$framewidth > $charlength">
-                 <xsl:apply-templates select="m:type"/>
-                </xsl:if>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr> 
-             <xsl:if test="$charlength >= $framewidth">
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mphantom><m:mtext>:=</m:mtext></m:mphantom>
-                <xsl:apply-templates select="m:type"/>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr>
-             </xsl:if>
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mo>:=</m:mo>
-                <xsl:apply-templates select="following-sibling::*[position()=1]"/>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr> 
-            </xsl:for-each>
-            </m:mtable>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">}</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo>FIX</m:mo>
-        <m:mi><xsl:value-of select="m:ci"/></m:mi>
-        <m:mo stretchy="false">{</m:mo>
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <xsl:for-each select="m:bvar"> 
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mi><xsl:value-of select="m:ci"/></m:mi>
-            <m:mo>:</m:mo>
-            <xsl:apply-templates select="m:type"/>
-            <m:mo>:=</m:mo>
-            <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
-            <xsl:if test="position()=last()">
-             <m:mo stretchy="false">}</m:mo>
-            </xsl:if>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:for-each>
-        </m:mtable>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- COFIX -->
-      <xsl:when test="$name='cofix'">
-       <xsl:choose>
-       <xsl:when test="$charlength >= $framewidth">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo>COFIX</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mi><xsl:value-of select="m:ci"/></m:mi>
-            <m:mo stretchy="false">{</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-            <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-            <xsl:for-each select="m:bvar">
-             <xsl:variable name="charlength"><xsl:apply-templates select="m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable> 
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mi><xsl:value-of select="m:ci"/></m:mi>
-                <m:mo>:</m:mo>
-                <xsl:if test="$framewidth > $charlength">
-                 <xsl:apply-templates select="m:type"/>
-                </xsl:if>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr> 
-             <xsl:if test="$charlength >= $framewidth">
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mphantom><m:mtext>:=</m:mtext></m:mphantom>
-                <xsl:apply-templates select="m:type"/>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr>
-             </xsl:if>
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mo>:=</m:mo>
-                <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr>
-            </xsl:for-each>
-            </m:mtable>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo stretchy="false">}</m:mo>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:mo>COFIX</m:mo>
-        <m:mi><xsl:value-of select="m:ci"/></m:mi>
-        <m:mo stretchy="false">{</m:mo>
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">  
-        <xsl:for-each select="m:bvar"> 
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mi><xsl:value-of select="m:ci"/></m:mi>
-            <m:mo>:</m:mo>
-            <xsl:apply-templates select="m:type"/>
-            <m:mo>:=</m:mo>
-            <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
-            <xsl:if test="position()=last()">
-             <m:mo stretchy="false">}</m:mo>
-            </xsl:if>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:for-each>
-        </m:mtable>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <!-- ***************************************** -->
-      <!-- *********** PROOF ELEMENTS ************** -->
-      <!-- ***************************************** -->
-      <!-- PROOF -->
-      <xsl:when test="$name='proof'">
-        <!-- CSC: $explodeall until the annotationHelper can handle mactions -->
-        <xsl:variable name="test" select="(not($explodeall)) and
-          (not(preceding-sibling::*[1]/text()='letin1')) and
-          (not(preceding-sibling::*[1]/text()='rw_step')) and
-          (not(name(..)='m:lambda'))"/>
-        <xsl:variable name="hidden_details">
-         <xsl:if test="$test">
-          <!-- Details hided (default) -->
-          <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-           <m:mtr>
-            <m:mtd>
-             <m:mrow>
-              <m:mtext mathcolor="Red">We&#x00a0;can&#x00a0;prove</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <!-- the last child is either the expected type, if provided,-->
-              <!-- or the synthesized type.                                -->
-              <xsl:apply-templates select="*[position()=last()]"/>
-              <m:mrow>
-               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-               <m:mtext mathcolor="Green">(explain)</m:mtext>
-              </m:mrow>
-             </m:mrow>
-            </m:mtd>
-           </m:mtr>
-          </m:mtable>
-         </xsl:if>
-        </xsl:variable>
-        <xsl:variable name="shown_details">
-         <!-- Show details -->
-         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-          <m:mtr>
-           <m:mtd>
-            <m:mrow>
-             <xsl:apply-templates select="*[position()=2]"/>
-            </m:mrow>
-           </m:mtd>
-          </m:mtr>
-          <xsl:variable name="hidedetails">
-            <m:mrow>
-             <m:mphantom>
-              <m:mtext>_</m:mtext>
-             </m:mphantom>
-             <xsl:if test="$test">
-              <m:mtext mathcolor="Green">(hide&#x00a0;details)</m:mtext>
-             </xsl:if>
-            </m:mrow>
-          </xsl:variable>
-          <m:mtr>
-           <m:mtd>
-            <m:mrow>
-             <m:mtext mathcolor="Red">we&#x00a0;proved</m:mtext>
-             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-             <xsl:apply-templates select="*[position()=3]"/>
-             <xsl:if test="not(*[4])">
-              <xsl:copy-of select="$hidedetails"/>
-             </xsl:if>
-            </m:mrow>
-           </m:mtd>
-          </m:mtr>
-          <xsl:if test="*[4]">
-           <m:mtr>
-            <m:mtd>
-             <m:mrow>
-              <m:mtext mathcolor="Red">that&#x00a0;is&#x00a0;equivalent&#x00a0;to</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[position()=4]"/>
-              <xsl:copy-of select="$hidedetails"/>
-             </m:mrow>
-            </m:mtd>
-           </m:mtr>
-          </xsl:if>
-         </m:mtable>
-        </xsl:variable>
-        <xsl:choose>
-         <xsl:when test="$test">
-          <m:maction actiontype="toggle">
-           <xsl:copy-of select="$hidden_details"/>
-           <xsl:copy-of select="$shown_details"/>
-          </m:maction>
-         </xsl:when>
-         <xsl:otherwise>
-          <xsl:copy-of select="$shown_details"/>
-         </xsl:otherwise>
-        </xsl:choose>
-      </xsl:when>
-      <!-- SIDE_PROOF -->
-      <xsl:when test="$name='side_proof'">
-        <xsl:variable name="test" select="(not($explodeall))"/>
-        <xsl:variable name="hidden_details">
-         <xsl:if test="$test">
-          <!-- Details hided (default) -->
-          <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-           <m:mtr>
-            <m:mtd>
-             <m:mrow>
-              <m:mtext mathcolor="Red">We&#x00a0;can&#x00a0;prove</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <!-- the last child is either the expected type, if provided,-->
-              <!-- or the synthesized type.                                -->
-              <xsl:apply-templates select="*[position()=last()]"/>
-              <m:mrow>
-               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-               <m:mtext mathcolor="Green">(explain)</m:mtext>
-              </m:mrow>
-             </m:mrow>
-            </m:mtd>
-           </m:mtr>
-          </m:mtable>
-         </xsl:if>
-        </xsl:variable>
-        <xsl:variable name="shown_details">
-         <!-- Show details -->
-         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-          <m:mtr>
-           <m:mtd>
-            <m:mrow>
-             <xsl:apply-templates select="*[position()=2]"/>
-            </m:mrow>
-           </m:mtd>
-          </m:mtr>
-          <xsl:variable name="hidedetails">
-            <m:mrow>
-             <m:mphantom>
-              <m:mtext>_</m:mtext>
-             </m:mphantom>
-             <xsl:if test="$test">
-              <m:mtext mathcolor="Green">(hide&#x00a0;details)</m:mtext>
-             </xsl:if>
-            </m:mrow>
-          </xsl:variable>
-          <m:mtr>
-           <m:mtd>
-            <m:mrow>
-             <m:mtext mathcolor="Red">we&#x00a0;proved</m:mtext>
-             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-             <xsl:apply-templates select="*[position()=3]"/>
-             <xsl:if test="not(*[4])">
-              <xsl:copy-of select="$hidedetails"/>
-             </xsl:if>
-            </m:mrow>
-           </m:mtd>
-          </m:mtr>
-          <xsl:if test="*[4]">
-           <m:mtr>
-            <m:mtd>
-             <m:mrow>
-              <m:mtext mathcolor="Red">that&#x00a0;is&#x00a0;equivalent&#x00a0;to</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[position()=4]"/>
-              <xsl:copy-of select="$hidedetails"/>
-             </m:mrow>
-            </m:mtd>
-           </m:mtr>
-          </xsl:if>
-         </m:mtable>
-        </xsl:variable>
-        <xsl:choose>
-         <xsl:when test="$test">
-          <m:maction actiontype="toggle">
-           <xsl:copy-of select="$hidden_details"/>
-           <xsl:copy-of select="$shown_details"/>
-          </m:maction>
-         </xsl:when>
-         <xsl:otherwise>
-          <xsl:copy-of select="$shown_details"/>
-         </xsl:otherwise>
-        </xsl:choose>
-      </xsl:when>
-      <!-- LETIN1 -->
-      <xsl:when test="$name='letin1'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[position()=2]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[position()=3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <xsl:when test="$name='by_induction'">
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="Red">We&#x00a0;prove</m:mtext>
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <xsl:apply-templates select="../*[3]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="Red">by&#x00a0;induction&#x00a0;on</m:mtext>
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <xsl:apply-templates 
-            select="*[position()=last()]/*[position()=last()]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-            <xsl:for-each select="*[position()>3 and not(position()=last())]">
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <xsl:apply-templates select="."/>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr>
-            </xsl:for-each>
-           </m:mtable>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-      </xsl:when>
-      <!-- inductive_case -->
-      <xsl:when test="$name='inductive_case'">
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="Red">Case</m:mtext>
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <xsl:apply-templates select="*[2]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-            <xsl:if test="*[3]/*[position()>1]">
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mtext mathcolor="Red">By&#x00a0;induction&#x00a0;hypothesis,&#x00a0;we&#x00a0;have:</m:mtext>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr>
-             <m:mtr>
-              <m:mtd>
-               <m:mrow>
-                <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-                <xsl:for-each select="*[3]/*[position()>1]">
-                 <m:mo stretchy="false">(</m:mo>
-                 <xsl:apply-templates select="m:ci"/>
-                 <m:mo stretchy="false">) </m:mo>
-                 <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-                 <xsl:apply-templates select="m:type"/>
-                </xsl:for-each>
-               </m:mrow>
-              </m:mtd>
-             </m:mtr>
-            </xsl:if>
-            <m:mtr>
-             <m:mtd>
-              <m:mrow>
-               <xsl:apply-templates select="*[4]"/>
-              </m:mrow>
-             </m:mtd>
-            </m:mtr>
-           </m:mtable>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-      </xsl:when>
-      <!-- case_lhs  -->
-      <xsl:when test="$name='case_lhs'">
-       <m:mrow>
-        <xsl:choose>
-         <xsl:when test="count(*)=2">
-          <xsl:apply-templates select="*[2]"/>
-         </xsl:when>
-         <xsl:otherwise>
-          <m:mo stretchy="false">(</m:mo>
-          <xsl:apply-templates select="*[2]"/>
-          <xsl:for-each select="m:bvar">
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <xsl:apply-templates select="*[1]"/>
-           <m:mtext>:</m:mtext>
-           <xsl:apply-templates select="m:type/*[1]"/>
-          </xsl:for-each>
-          <m:mo stretchy="false">)</m:mo>
-         </xsl:otherwise>
-        </xsl:choose>
-       </m:mrow>
-      </xsl:when>
-      <!-- false_ind  -->
-      <xsl:when test="$name='false_ind'">
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <xsl:apply-templates select="*[3]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="Red">Contradiction.</m:mtext>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-      </xsl:when>
-      <!-- LET-IN -->
-      <xsl:when test="$name='letin'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <!-- <xsl:for-each select="APPLY[m:csymbol and (string(m:csymbol)='let')]"> -->
-        <xsl:for-each select="*[(last() > position()) and (position()>1)]">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="."/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         </xsl:for-each>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[position()=last()]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <!-- LET -->
-      <xsl:when test="$name='let'">
-       <m:mtext>(</m:mtext>
-       <xsl:apply-templates select="m:ci"/>
-       <m:mtext>) </m:mtext>
-       <xsl:apply-templates select="*[3]"/>
-      </xsl:when>
-      <!-- RW_STEP -->
-      <xsl:when test="$name='rw_step'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-             <xsl:when test="name(*[2])='m:apply'">
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:when>
-             <xsl:otherwise>
-              <m:mtext>Consider</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Rewrite</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[3]"/>
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <m:mtext>with</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[4]"/>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mtext>by</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[5]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <!-- not existing any more
-      <xsl:when test="$name='thread'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-             <xsl:when test="name(*[last()])='m:apply'">
-              <xsl:apply-templates select="*[last()]"/>
-             </xsl:when>
-             <xsl:otherwise>
-              <m:mtext>Consider</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[last()]"/>
-             </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        <xsl:apply-templates mode="thread" select="*[(last()-2)]"/> 
-        </m:mtable>
-      </xsl:when>
-      --> 
-      <!-- REWRITE_AND_APPLY -->
-      <xsl:when test="$name='rewrite_and_apply'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[2]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Then&#x00a0;apply&#x00a0;it&#x00a0;to</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[position()>2]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-       </m:mtable>
-      </xsl:when>
-      <!-- AND_IND -->
-      <xsl:when test="$name='and_ind'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-             <xsl:when test="name(*[2])='m:apply'">
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:when>
-             <xsl:otherwise>
-              <m:mtext>Consider</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>In&#x00a0;particular,&#x00a0;we&#x00a0;have</m:mtext>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>(</m:mtext>
-            <xsl:apply-templates select="*[3]"/>
-            <m:mtext>)</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[4]"/>
-            </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>(</m:mtext>
-            <xsl:apply-templates select="*[5]"/>
-            <m:mtext>)</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[6]"/>
-            </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[7]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <!-- full_or_ind -->
-      <xsl:when test="$name='full_or_ind'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-             <xsl:when test="name(*[2])='m:apply'">
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:when>
-             <xsl:otherwise>
-              <m:mtext>Consider</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>We&#x00a0;proceed&#x00a0;by&#x00a0;cases&#x00a0;to&#x00a0;prove</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Left:&#x00a0;suppose</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mo stretchy="false">(</m:mo>
-            <xsl:apply-templates select="*[4]/m:bvar/m:ci"/>
-            <m:mo stretchy="false">)</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[4]/m:bvar/m:type/*[1]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[4]/*[3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Right:&#x00a0;suppose</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mo stretchy="false">(</m:mo>
-            <xsl:apply-templates select="*[5]/m:bvar/m:ci"/>
-            <m:mo stretchy="false">)</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[5]/m:bvar/m:type/*[1]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[5]/*[3]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <!-- OR_IND -->
-      <xsl:when test="$name='or_ind'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-             <xsl:when test="name(*[2])='m:apply'">
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:when>
-             <xsl:otherwise>
-              <m:mtext>Consider</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>We&#x00a0;prove</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[3]"/>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mtext>by&#x00a0;cases:</m:mtext>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Left</m:mtext>
-            <xsl:apply-templates select="*[4]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Right</m:mtext>
-            <xsl:apply-templates select="*[5]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <!-- EX_IND -->
-      <xsl:when test="$name='ex_ind'">
-        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:choose>
-             <xsl:when test="name(*[2])='m:apply'">
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:when>
-             <xsl:otherwise>
-              <m:mtext>Consider</m:mtext>
-              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-              <xsl:apply-templates select="*[2]"/>
-             </xsl:otherwise>
-            </xsl:choose>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Let</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[3]"/>
-            <m:mtext>:</m:mtext>
-            <xsl:apply-templates select="*[4]"/>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mtext>such&#x00a0;that</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mtext>(</m:mtext>
-             <xsl:apply-templates select="*[5]"/>
-            <m:mtext>)</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="*[6]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="*[7]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </m:mtable>
-      </xsl:when>
-      <!-- EQ_CHAIN -->
-      <xsl:when test="$name='eq_chain'">
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="Red">We&#x00a0;have&#x00a0;the&#x00a0;following&#x00a0;equality&#x00a0;chain:</m:mtext>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <xsl:for-each select="*[position() mod 2 = 0]">
-        <xsl:variable name="pos" select="position()"/>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <xsl:choose>
-           <xsl:when test="$pos = 1">
-            <xsl:apply-templates select="."/>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mo>=</m:mo>
-           </xsl:when>
-           <xsl:otherwise>
-            <m:mo>=</m:mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="."/>
-           </xsl:otherwise>
-           </xsl:choose>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <xsl:if test="$pos != last()">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-           <xsl:apply-templates select="../*[position()=2*$pos +1]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        </xsl:if>
-        </xsl:for-each>
-       </m:mtable>
-      </xsl:when>
-      <!-- DISEQ_CHAIN -->
-      <xsl:when test="$name='diseq_chain'">
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mtext mathcolor="Red">We&#x00a0;have&#x00a0;the&#x00a0;following&#x00a0;disequality&#x00a0;chain:</m:mtext>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <xsl:for-each select="*[position() mod 3 = 2]">
-        <xsl:variable name="pos" select="position()"/>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <xsl:choose>
-           <xsl:when test="$pos = 1">
-            <xsl:apply-templates select="."/>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <mo><xsl:apply-templates select="../*[position()=3*$pos]"/></mo>
-           </xsl:when>
-           <xsl:otherwise>
-            <mo><xsl:apply-templates select="../*[position()=3*($pos - 1)]"/></mo>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="."/>
-           </xsl:otherwise>
-           </xsl:choose>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <xsl:if test="$pos != last()">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-           <xsl:apply-templates select="../*[position()=3*$pos +1]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        </xsl:if>
-        </xsl:for-each>
-       </m:mtable>
-      </xsl:when>
-      <!-- ***************************************** -->
-      <!-- *********** NOTATIONS ******************* -->
-      <!-- ***************************************** -->
-      <!-- subst -->
-      <xsl:when test="$name='subst'">
-        <xsl:apply-templates select="*[3]"/>
-<!-- no font for ApplyFunction: <m:mo>&#xe8a0;</m:mo> -->
-        <m:mo stretchy="false">[</m:mo>
-        <xsl:apply-templates select="*[4]"/>
-        <m:mo mathcolor="Green">
-         <xsl:if test="$id != ''">
-          <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-         </xsl:if>&#8592;</m:mo>
-        <xsl:apply-templates select="*[2]"/>
-        <m:mo stretchy="false">]</m:mo>
-      </xsl:when>
-      <!-- lift -->
-      <xsl:when test="$name='lift'">
-        <m:msup>
-         <m:mo mathcolor="Green">
-          <xsl:if test="$id != ''">
-           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-          </xsl:if>&#8593;</m:mo>
-        <xsl:apply-templates select="*[2]"/>
-        </m:msup>
-       <m:mrow>
-        <m:mo stretchy="false">(</m:mo>
-         <xsl:apply-templates select="*[3]"/>
-        <m:mo stretchy="false">)</m:mo>
-        </m:mrow>
-      </xsl:when>
-      <!-- lift_with_base -->
-      <xsl:when test="$name='lift_with_base'">
-        <m:msubsup>
-         <m:mo mathcolor="Green">
-          <xsl:if test="$id != ''">
-           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-          </xsl:if>&#8593;</m:mo>
-        <xsl:apply-templates select="*[3]"/>
-        <xsl:apply-templates select="*[4]"/>
-        </m:msubsup>
-       <m:mrow>
-        <m:mo stretchy="false">(</m:mo>
-         <xsl:apply-templates select="*[2]"/>
-        <m:mo stretchy="false">)</m:mo>
-        </m:mrow>      
-      </xsl:when>
-      <!-- beta_red1 -->
-      <xsl:when test="$name='beta_red1'">
-        <xsl:apply-templates select="*[2]"/>
-        <m:munder>
-         <m:mo mathcolor="Green">
-          <xsl:if test="$id != ''">
-           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-          </xsl:if>&#8594;</m:mo>
-          <m:mi mathcolor="Green">&#946;</m:mi>
-        </m:munder>
-        <xsl:apply-templates select="*[3]"/>
-      </xsl:when>
-      <!-- beta_red -->
-      <xsl:when test="$name='beta_red'">
-        <xsl:apply-templates select="*[2]"/>
-        <m:munderover>
-         <m:mo mathcolor="Green">
-          <xsl:if test="$id != ''">
-           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-          </xsl:if>&#8594;</m:mo>
-          <m:mi mathcolor="Green">&#946;</m:mi>
-          <m:mi mathcolor="Green">*</m:mi>
-        </m:munderover>
-        <xsl:apply-templates select="*[3]"/>
-      </xsl:when>
-      <!-- par_beta_red1 -->
-      <xsl:when test="$name='par_beta_red1'">
-        <xsl:apply-templates select="*[2]"/>
-        <m:munder>
-         <m:mo mathcolor="Green">
-          <xsl:if test="$id != ''">
-           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-          </xsl:if>&#8658;</m:mo>
-          <m:mi mathcolor="Green">&#946;</m:mi>
-        </m:munder>
-        <xsl:apply-templates select="*[3]"/>
-      </xsl:when>
-      <!-- par_beta_red -->
-      <xsl:when test="$name='par_beta_red'">
-        <xsl:apply-templates select="*[2]"/>
-        <m:munderover>
-         <m:mo mathcolor="Green">
-          <xsl:if test="$id != ''">
-           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-          </xsl:if>&#8658;</m:mo>
-          <m:mi mathcolor="Green">&#946;</m:mi>
-          <m:mi mathcolor="Green">*</m:mi>
-        </m:munderover>
-        <xsl:apply-templates select="*[3]"/>
-      </xsl:when>
-      <!-- forgetful -->
-      <xsl:when test="$name='forgetful'">
-       <m:mfenced open="|" close="|">
-        <xsl:if test="$id != ''">
-         <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]"/>
-       </m:mfenced>
-      </xsl:when>
-      <!-- isomorphic -->
-      <xsl:when test="$name='isomorphic'">
-        <xsl:apply-templates select="*[2]"/>
-        <m:mo mathcolor="Green">
-         <xsl:if test="$id != ''">
-          <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-         </xsl:if>&#8773;</m:mo>
-        <xsl:apply-templates select="*[3]"/>
-      </xsl:when>
-      <!-- interp -->
-      <xsl:when test="$name='forgetful'">
-       <m:mfenced open="[" close="]">
-        <xsl:if test="$id != ''">
-         <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
-        </xsl:if>
-        <xsl:apply-templates select="*[2]"/>
-       </m:mfenced>
-      </xsl:when> 
-
-      <!-- ERROR -->
-      <xsl:otherwise>
-       <m:mi>ERROR</m:mi>
-      </xsl:otherwise>
-     </xsl:choose>
-    </m:mrow>
-</xsl:template>
-
-<!-- Il modo Thread non esiste piu' 
-<xsl:template match="*" mode="thread">
- <xsl:variable name="name"><xsl:value-of select="following-sibling::*[position()=1]/m:csymbol"/></xsl:variable>
- <xsl:choose>
-  <xsl:when test="$name='rw_step'">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext>Rewrite</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="following-sibling::*[position()=1]/*[2]"/>
-           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-           <m:mtext>with</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="following-sibling::*[position()=1]/*[3]"/>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <m:mtext>by</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="following-sibling::*[position()=1]/*[4]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext mathcolor="Red">we&#x00a0;get</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="."/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-   </xsl:when>
-   <xsl:otherwise>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <xsl:apply-templates select="following-sibling::*[position()=1]"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mtext mathcolor="Red">we&#x00a0;get</m:mtext>
-            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
-            <xsl:apply-templates select="."/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-    </xsl:otherwise>
-   </xsl:choose>
-         <xsl:apply-templates mode="thread" select="preceding-sibling::*[position()=2]"/>
-</xsl:template>
--->
-
-<!-- LAMBDA -->
-
-<xsl:template match="m:lambda">
-    <xsl:variable name="charlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"/></xsl:variable>
-    <m:mrow>
-     <xsl:if test="@id">
-      <xsl:attribute name="xref">
-       <xsl:value-of select="@id"/>
-      </xsl:attribute>
-     </xsl:if>
-     <xsl:choose>
-     <xsl:when test="$charlength >= $framewidth">
-      <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mo mathcolor="Red">&#x03bb;</m:mo>
-            <xsl:apply-templates select="m:bvar"/>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-       <m:mtr>
-        <m:mtd>
-         <m:mrow>
-          <m:mo>.</m:mo>
-          <xsl:apply-templates select="*[position()=2]"/>
-         </m:mrow>
-        </m:mtd>
-       </m:mtr>
-      </m:mtable>
-     </xsl:when>
-     <xsl:otherwise>
-      <m:mo mathcolor="Red">&#x03bb;</m:mo>
-      <xsl:apply-templates select="m:bvar/m:ci"/>
-      <m:mo>:</m:mo>
-      <xsl:apply-templates select="m:bvar/m:type"/>
-      <m:mo>.</m:mo>
-      <xsl:apply-templates select="*[position()=2]"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </m:mrow>
-</xsl:template>
-
-
-<!--**********************-->
-<!--       COUNTING       -->
-<!--**********************-->
-
-<xsl:template match="m:cn|m:and|m:or|m:not|m:exists|m:eq|m:lt|m:leq|m:gt|m:geq
- |m:in|m:notin|m:intersect|m:union|m:subset|m:prsubset|m:card|m:setdiff
- |m:plus|m:minus|m:times" mode="charcount">
-<xsl:param name="incurrent_length" select="0"/> 
-    <xsl:choose>
-    <xsl:when test="$framewidth > ($incurrent_length + 3 + string-length())">
-     <xsl:variable name="siblength">
-      <xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount">
-       <xsl:with-param name="incurrent_length" select="$incurrent_length + string-length()"/>
-      </xsl:apply-templates>
-     </xsl:variable>
-     <xsl:choose>
-     <xsl:when test="string($siblength) = &quot;&quot;">
-      <xsl:value-of select="$incurrent_length + 3 + string-length()"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="$incurrent_length + 3 + string-length()"/>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-<xsl:template match="m:ci|m:csymbol" mode="charcount">
-<xsl:param name="incurrent_length" select="0"/> 
-<xsl:param name="nosibling" select="0"/>
-    <xsl:choose>
-    <xsl:when test="$framewidth > ($incurrent_length + string-length()) and ($nosibling = 0)">
-     <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length + string-length()"/></xsl:apply-templates></xsl:variable>
-     <xsl:choose>
-     <xsl:when test="string($siblength) = &quot;&quot;">
-      <xsl:value-of select="$incurrent_length + string-length()"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="$incurrent_length + string-length()"/>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template> 
-
-<xsl:template match="*" mode="charcount">
-<xsl:param name="incurrent_length" select="0"/>
-<xsl:param name="nosibling" select="0"/>
- <xsl:choose>
-  <xsl:when test="count(child::*) = 0">
-   <!-- tremendous bug fixed. An empty element can still have siblings!!! -->
-   <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/></xsl:apply-templates></xsl:variable>
-   <xsl:choose>
-    <xsl:when test="string($siblength) = &quot;&quot;">
-     <xsl:value-of select="$incurrent_length"/>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:when>
-  <xsl:otherwise>
-    <xsl:variable name="childlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/><xsl:with-param name="nosibling" select="0"/></xsl:apply-templates></xsl:variable>
-    <xsl:choose>
-    <xsl:when test="$framewidth > number($childlength) and ($nosibling = 0)">
-     <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$childlength"/></xsl:apply-templates></xsl:variable>
-     <xsl:choose>
-     <xsl:when test="string($siblength) = &quot;&quot;">
-      <xsl:value-of select="number($childlength)"/>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="number($siblength)"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:value-of select="number($childlength)"/>
-    </xsl:otherwise>
-    </xsl:choose>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet> 
-
diff --git a/helm/style/mmlnotation.xsl b/helm/style/mmlnotation.xsl
deleted file mode 100644 (file)
index 5cf944e..0000000
+++ /dev/null
@@ -1,399 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- Notational extensions to the XSLT version 0.07 of MathML content      -->
-<!-- to presentation:                                                      -->
-<!-- First draft: February 19 2000, Andrea Asperti, Irene Schena           -->
-<!-- Revised: March 3 2000, Irene Schena                                   -->
-<!-- Revised: March 15 2000, Claudio Sacerdoti Coen, Irene Schena          -->
-<!-- Revised: March 21 2000, Irene Schena                                  -->
-<!--***********************************************************************--> 
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<xsl:import href="mmlctop.xsl"/>
-
-
-<!-- *********************************** -->
-<!-- BASE SET OF MATHML CONTENT ELEMENTS -->
-<!-- *********************************** -->
-
-<!-- Logic -->
-
-<xsl:template match = "m:apply[m:eq[1]]">
- <xsl:variable name="charlength">
-  <xsl:apply-templates select="*[1]" mode="charcount"/>
- </xsl:variable>
- <xsl:choose>
-  <xsl:when test="$charlength >= $framewidth">
-   <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-    <xsl:if test="@id">
-     <xsl:attribute name="xref">
-      <xsl:value-of select="@id"/>
-     </xsl:attribute>
-    </xsl:if>    
-    <m:mtr>
-     <m:mtd>
-      <m:mrow>
-       <m:mo stretchy="false">(</m:mo>
-       <xsl:apply-templates select="*[position()=2]"/>
-      </m:mrow>
-     </m:mtd>
-    </m:mtr>
-    <xsl:for-each select = "*[position()>2]">
-     <m:mtr>
-      <m:mtd>
-       <m:mrow>
-        <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-        <m:mo>
-         <xsl:if test="m:in/@id">
-          <xsl:attribute name="xref">
-           <xsl:value-of select="m:in/@id"/>
-          </xsl:attribute>
-         </xsl:if>=</m:mo>
-        <xsl:apply-templates select="."/>
-       </m:mrow>
-      </m:mtd>
-     </m:mtr>
-    </xsl:for-each>
-    <m:mtr>
-     <m:mtd>
-      <m:mrow>
-       <m:mo stretchy="false">)</m:mo>
-      </m:mrow>
-     </m:mtd>
-    </m:mtr>
-   </m:mtable>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:apply-imports/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- apply-imports without parenthesis -->
-<xsl:template match = "m:apply[m:geq[1]|m:leq[1]|m:gt[1]|m:lt[1]|m:in[1]|
-                               m:subset[1]|m:prsubset[1]]">
- <xsl:variable name="symbol">
-  <xsl:choose>
-   <xsl:when test="m:geq[1]">
-    <xsl:value-of select="'&#8805;'"/>
-   </xsl:when>
-   <xsl:when test="m:leq[1]">
-    <xsl:value-of select="'&#8804;'"/>
-   </xsl:when>
-   <xsl:when test="m:gt[1]">
-    <xsl:value-of select="'&#62;'"/>
-   </xsl:when>
-   <xsl:when test="m:lt[1]">
-    <xsl:value-of select="'&#60;&#32;'"/>
-   </xsl:when>
-   <xsl:when test="m:in[1]">
-    <xsl:value-of select="'&#x02208;'"/>
-   </xsl:when>
-   <xsl:when test="m:subset[1]">
-    <xsl:value-of select="'&#x02286;'"/>
-   </xsl:when>
-   <xsl:when test="m:prsubset[1]">
-    <xsl:value-of select="'&#x02282;'"/>
-   </xsl:when>
-  </xsl:choose>
- </xsl:variable>
- <xsl:variable name="charlength">
-  <xsl:apply-templates select="*[1]" mode="charcount"/>
- </xsl:variable>
- <xsl:choose>
-  <xsl:when test="$charlength >= $framewidth">
-   <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-    <xsl:if test="@id">
-     <xsl:attribute name="xref">
-      <xsl:value-of select="@id"/>
-     </xsl:attribute>
-    </xsl:if>    
-    <m:mtr>
-     <m:mtd>
-      <m:mrow>
-       <m:mo stretchy="false">(</m:mo>
-       <xsl:apply-templates select="*[position()=2]"/>
-      </m:mrow>
-     </m:mtd>
-    </m:mtr>
-    <xsl:for-each select = "*[position()>2]">
-     <m:mtr>
-      <m:mtd>
-       <m:mrow>
-        <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-        <m:mo>
-         <xsl:if test="*[1]/@id">
-          <xsl:attribute name="xref">
-           <xsl:value-of select="*[1]/@id"/>
-          </xsl:attribute>
-         </xsl:if><xsl:value-of select="$symbol"/></m:mo>
-        <xsl:apply-templates select="."/>
-       </m:mrow>
-      </m:mtd>
-     </m:mtr>
-    </xsl:for-each>
-    <m:mtr>
-     <m:mtd>
-      <m:mrow>
-       <m:mo stretchy="false">)</m:mo>
-      </m:mrow>
-     </m:mtd>
-    </m:mtr>
-   </m:mtable>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:apply-imports/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- apply-imports with parenthesis -->
-<xsl:template match = "m:apply[m:and[1]|m:or[1]
-          |m:intesect[1]|m:union[1]|m:setdiff[1]]">
- <xsl:variable name="symbol">
-  <xsl:choose>
-   <xsl:when test="m:and[1]">
-    <xsl:value-of select="'&#8743;'"/>
-   </xsl:when>
-   <xsl:when test="m:or[1]">
-    <xsl:value-of select="'&#8744;'"/>
-   </xsl:when>
-   <xsl:when test="m:intersect[1]">
-    <xsl:value-of select="'&#x022C2;'"/>
-   </xsl:when>
-   <xsl:when test="m:union[1]">
-    <xsl:value-of select="'&#x022C3;'"/>
-   </xsl:when>
-   <xsl:when test="m:setdiff[1]">
-    <xsl:value-of select="'&#x02216;'"/>
-   </xsl:when>
-  </xsl:choose>
- </xsl:variable>
- <xsl:variable name="charlength">
-  <xsl:apply-templates select="*[1]" mode="charcount"/>
- </xsl:variable>
- <xsl:choose>
-  <xsl:when test="$charlength >= $framewidth">
-   <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-    <xsl:if test="@id">
-     <xsl:attribute name="xref">
-      <xsl:value-of select="@id"/>
-     </xsl:attribute>
-    </xsl:if>    
-    <m:mtr>
-     <m:mtd>
-      <m:mrow>
-       <m:mo stretchy="false">(</m:mo>
-       <xsl:apply-templates select="*[position()=2]"/>
-      </m:mrow>
-     </m:mtd>
-    </m:mtr>
-    <xsl:for-each select = "*[position()>2]">
-     <m:mtr>
-      <m:mtd>
-       <m:mrow>
-        <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
-        <m:mo>
-         <xsl:if test="*[1]/@id">
-          <xsl:attribute name="xref">
-           <xsl:value-of select="*[1]/@id"/>
-          </xsl:attribute>
-         </xsl:if><xsl:value-of select="$symbol"/></m:mo>
-        <xsl:apply-templates select="."/>
-       </m:mrow>
-      </m:mtd>
-     </m:mtr>
-    </xsl:for-each>
-    <m:mtr>
-     <m:mtd>
-      <m:mrow>
-       <m:mo stretchy="false">)</m:mo>
-      </m:mrow>
-     </m:mtd>
-    </m:mtr>
-   </m:mtable>
-  </xsl:when>
-  <xsl:otherwise>
-<!-- Added mfenced because apply-imports doesn't support with-param for 
-     precedence  (XSLT 2.0) -->
-   <m:mfenced separators=" ">
-    <xsl:apply-imports/>
-   </m:mfenced>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template match = "m:set">
- <xsl:choose>
-  <xsl:when test="count(child::*) = 0">
-   <m:mi>
-    <xsl:if test="@id">
-     <xsl:attribute name="xref">
-      <xsl:value-of select="@id"/>
-     </xsl:attribute>
-    </xsl:if>&#x02205;</m:mi>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:variable name="charlength">
-    <xsl:apply-templates select="*[1]" mode="charcount"/>
-   </xsl:variable>
-   <xsl:choose>
-    <xsl:when test="$charlength >= $framewidth">
-     <xsl:choose>
-      <xsl:when test="name(*[1]) = 'm:bvar'">
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mo stretchy="false">
-            <xsl:if test="@id">
-             <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-             </xsl:attribute>
-            </xsl:if>{</m:mo>
-           <xsl:apply-templates select="*[position()=1]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mphantom><m:mtext>{</m:mtext></m:mphantom>
-           <m:mo stretchy="false">|</m:mo>
-           <xsl:apply-templates select="m:condition/*[1]"/>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mo stretchy="false">
-            <xsl:if test="@id">
-             <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-             </xsl:attribute>
-            </xsl:if>}</m:mo>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-      </xsl:when>
-      <xsl:otherwise>
-       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mo stretchy="false">
-            <xsl:if test="@id">
-             <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-             </xsl:attribute>
-            </xsl:if>{</m:mo>
-           <xsl:apply-templates select="*[position()=1]"/>
-           <xsl:if test="position() != last()">
-            <mo>,</mo>
-           </xsl:if>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-        <xsl:for-each select = "*[position()>2]">
-         <m:mtr>
-          <m:mtd>
-           <m:mrow>
-            <m:mphantom><m:mtext>{</m:mtext></m:mphantom>
-            <xsl:apply-templates select="."/>
-            <xsl:if test="position() != last()">
-             <mo>,</mo>
-            </xsl:if>
-           </m:mrow>
-          </m:mtd>
-         </m:mtr>
-        </xsl:for-each>
-        <m:mtr>
-         <m:mtd>
-          <m:mrow>
-           <m:mo stretchy="false">
-            <xsl:if test="@id">
-             <xsl:attribute name="xref">
-              <xsl:value-of select="@id"/>
-             </xsl:attribute>
-            </xsl:if>}</m:mo>
-          </m:mrow>
-         </m:mtd>
-        </m:mtr>
-       </m:mtable>
-      </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-imports/>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>      
-
-<xsl:template match = "m:apply[m:card[1]]">
-  <m:mfenced open="|" close="|" stretchy="false">
-    <xsl:if test="($SEM_SW=$SEM_XREF or $SEM_SW=$SEM_XREF_EXT) and @id">
-      <xsl:attribute name="xref">
-        <xsl:value-of select="@id"/>
-      </xsl:attribute>
-    </xsl:if>
-  <xsl:apply-templates select="*[2]"/>
-  </m:mfenced>
-</xsl:template>
-
-
-<xsl:template match = "m:eq[((preceding-sibling::*/text()='eq_chain') or (preceding-sibling::*/text()='diseq_chain'))] | m:neq[((preceding-sibling::*/text()='eq_chain') or (preceding-sibling::*/text()='diseq_chain'))] | m:lt[((preceding-sibling::*/text()='eq_chain') or (preceding-sibling::*/text()='diseq_chain'))] | m:gt[((preceding-sibling::*/text()='eq_chain') or (preceding-sibling::*/text()='diseq_chain'))] | m:leq[((preceding-sibling::*/text()='eq_chain') or (preceding-sibling::*/text()='diseq_chain'))] | m:geq[((preceding-sibling::*/text()='eq_chain') or (preceding-sibling::*/text()='diseq_chain'))]">
-  <xsl:choose>
-  <xsl:when test="local-name(.) = 'neq'">
-   <xsl:value-of select="'&#8800;'"/>
-  </xsl:when>
-  <xsl:when test="local-name(.) = 'lt'">
-   <xsl:value-of select="'&#60;&#32;'"/>
-  </xsl:when>
-  <xsl:when test="local-name(.) = 'gt'">
-   <xsl:value-of select="'&#62;'"/>
-  </xsl:when>
-  <xsl:when test="local-name(.) = 'leq'">
-   <xsl:value-of select="'&#8804;'"/>
-  </xsl:when>
-  <xsl:when test="local-name(.) = 'geq'">
-   <xsl:value-of select="'&#8805;'"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="'&#61;'"/>
-  </xsl:otherwise>
-  </xsl:choose>       
-</xsl:template>
-
-
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/helm/style/mmltheoryextension.xsl b/helm/style/mmltheoryextension.xsl
deleted file mode 100644 (file)
index d173c79..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- Extension to the XSLT version 0.07 of MathML content to presentation: -->
-<!-- First draft: March 22 2001, Irene Schena                              -->
-<!--***********************************************************************--> 
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-<xsl:template match="type">
-    <m:math>
-     <xsl:apply-templates select="*[1]"/>
-    </m:math>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/objcontent.xsl b/helm/style/objcontent.xsl
deleted file mode 100644 (file)
index ceb7a22..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--******************************************************************--> 
-<!-- XSLT version 0.1 of CIC objects to objects and MathML content:   -->
-<!-- First draft: March 21 2000, Irene Schena                         -->
-<!--******************************************************************-->
-
-<!--******************************************************************-->
-<!-- MANCA: gestione annotation e linking                             -->
-<!--******************************************************************-->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-<xsl:import href="content.xsl"/>
-
-<!-- ROOT -->
-
-<xsl:template match="cicxml">
-    <xsl:variable name="url"><xsl:value-of select="@baseurl"/></xsl:variable>
-    <xsl:variable name="stylesheet"><xsl:value-of select="@stylesheet"/></xsl:variable>
-    <!--
-    <xsl:processing-instruction name="cocoon-format">type="text/xml"</xsl:processing-instruction>
-    <xsl:processing-instruction name="xml-stylesheet">href="<xsl:value-of select='concat($url,$stylesheet)'/>" type="text/xsl"</xsl:processing-instruction>
-    <xsl:processing-instruction name="cocoon-process">type="xslt"</xsl:processing-instruction>
-    -->
-    <xsl:apply-templates select="*[1]"/>
-</xsl:template>
-
-<!-- CIC OBJECTS -->
-
-<xsl:template match="Sequent">  <!-- For Sequents there are no annotations --> 
-    <Sequent helm:xref="{@id}" no="{@no}">
-     <xsl:for-each select="Decl|Def|Hidden">
-      <xsl:copy>
-       <xsl:attribute name="name">
-        <xsl:value-of select="@name"/>
-       </xsl:attribute>
-       <xsl:attribute name="helm:xref">
-        <xsl:value-of select="@id"/>
-       </xsl:attribute>
-       <xsl:apply-templates select="*[1]"/>
-      </xsl:copy>
-     </xsl:for-each>
-     <Goal>
-      <xsl:apply-templates select="Goal/*[1]"/>
-     </Goal>
-    </Sequent> 
-</xsl:template>
-
-<xsl:template match="Definition" mode="noannot">
-    <Definition name="{@name}" helm:xref="{@id}">  
-     <xsl:if test="string(@params) != &quot;&quot;">
-      <Params>
-       <xsl:value-of select="@params"/>
-      </Params>
-     </xsl:if>
-<!--     <xsl:choose>
-      <xsl:when test="$showproof=0">
-       <body>
-        <m:mi>Here</m:mi>
-       </body>
-      </xsl:when>
-      <xsl:otherwise>
-       <body>
-        <xsl:apply-templates select="body"/>
-       </body>
-      </xsl:otherwise>
-     </xsl:choose> -->
-     <body>
-      <xsl:apply-templates select="body/*[1]"/>
-     </body>
-     <type>
-       <xsl:apply-templates select="type/*[1]"/>
-     </type>
-    </Definition> 
-</xsl:template>
-
-<xsl:template match="Axiom" mode="noannot"> 
-    <Axiom name="{@name}" helm:xref="{@id}">
-     <xsl:if test="string(@params) != &quot;&quot;">
-      <Params>
-       <xsl:value-of select="@params"/>
-      </Params>
-     </xsl:if>
-     <type>
-       <xsl:apply-templates select="type/*[1]"/>
-     </type>
-    </Axiom> 
-</xsl:template>
-
-<xsl:template match="CurrentProof" mode="noannot">
-    <CurrentProof name="{@name}" helm:xref="{@id}">
-     <xsl:for-each select="Conjecture">
-      <Conjecture no="{@no}" helm:xref="{@id}">
-        <xsl:for-each select="*">
-         <xsl:copy>
-          <xsl:copy-of select="@name"/>
-          <xsl:attribute name="helm:xref">
-           <xsl:value-of select="@id"/>
-          </xsl:attribute>
-          <xsl:apply-templates select="*"/>
-         </xsl:copy>
-        </xsl:for-each>
-      </Conjecture>
-     </xsl:for-each>
-     <body>
-       <xsl:apply-templates select="body/*[1]"/>
-     </body>
-     <type>
-       <xsl:apply-templates select="type/*[1]"/>
-     </type>
-    </CurrentProof> 
-</xsl:template>
-
-<xsl:template match="InductiveDefinition" mode="noannot">
-    <InductiveDefinition helm:xref="{@id}">
-     <xsl:if test="string(@params) != &quot;&quot;">
-      <Params>
-       <xsl:value-of select="@params"/>
-      </Params>
-     </xsl:if> 
-     <xsl:if test="string(@noParams) != 0"> 
-      <xsl:apply-templates select="InductiveType/arity/*[1]" mode="abstparams">
-       <xsl:with-param name="noparams" select="@noParams"/>
-      </xsl:apply-templates>
-     </xsl:if>
-     <xsl:for-each select="InductiveType">
-      <InductiveType name="{./@name}" inductive="{./@inductive}">
-       <arity>
-         <xsl:apply-templates select="./arity/*[1]" mode="abstparams">
-          <xsl:with-param name="noparams" select="../@noParams"/>
-          <xsl:with-param name="target" select="1"/>
-         </xsl:apply-templates>
-       </arity>
-       <xsl:for-each select="./Constructor">
-        <Constructor name="{./@name}">
-          <xsl:apply-templates select="./*[1]" mode="abstparams">
-           <xsl:with-param name="noparams" select="../../@noParams"/>
-           <xsl:with-param name="target" select="1"/>
-          </xsl:apply-templates>
-        </Constructor>
-       </xsl:for-each>
-      </InductiveType>
-     </xsl:for-each> 
-    </InductiveDefinition>       
-</xsl:template>
-
-<xsl:template match="Variable" mode="noannot"> 
-    <Variable name="{@name}" helm:xref="{@id}">
-     <xsl:if test="name(*[1])='body'">
-      <body>
-       <xsl:apply-templates select="body/*[1]"/>
-      </body>
-     </xsl:if>
-     <type>
-       <xsl:apply-templates select="type/*[1]"/>
-     </type>
-    </Variable> 
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/objtheorycontent.xsl b/helm/style/objtheorycontent.xsl
deleted file mode 100644 (file)
index 7d890d6..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--******************************************************************--> 
-<!-- XSLT version 0.1 of CIC objects to MathML content of types only: -->
-<!-- First draft: March 9 2001, Irene Schena                          -->
-<!--******************************************************************-->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-<xsl:import href="objcontent.xsl"/>
-<xsl:include href="headercontent.xsl"/>
-<xsl:include href="getter.xsl"/>
-
-<xsl:param name="type" select="'standalone'"/>
-<xsl:param name="getterURL" select="'http://localhost:8081/'"/>
-<xsl:param name="CICURI" select="''"/>
-
-<!-- CIC DEFINITION -->
-
-<xsl:template match="Definition">
-    <xsl:choose>
-   <xsl:when test="$type='typeonly'">
-    <type>
-     <xsl:apply-templates select="type/*[1]"/>
-    </type>
-   </xsl:when>
-   <xsl:otherwise>
-    <Definition name="{@name}" helm:xref="{@id}">  
-     <xsl:if test="string(@params) != &quot;&quot;">
-      <Params>
-       <xsl:value-of select="@params"/>
-      </Params>
-     </xsl:if>
-     <body>
-       <xsl:apply-templates select="body/*[1]"/>
-     </body>
-     <type>
-       <xsl:apply-templates select="type/*[1]"/>
-     </type>
-    </Definition>
-   </xsl:otherwise>
-   </xsl:choose>
-</xsl:template>
-
-<xsl:template match="Axiom|CurrentProof|InductiveDefinition|Variable">
-    <xsl:apply-templates select="." mode="noannot"/>
-</xsl:template>
-
-<xsl:template match="LAMBDA|LETIN|PROD|CAST|REL|SORT|APPLY|VAR|META|CONST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX">
-    <m:math>
-     <xsl:apply-templates select="." mode="noannot"/>
-    </m:math>
-</xsl:template>
-
-<xsl:template match="LAMBDA|LETIN|PROD|CAST|REL|SORT|APPLY|VAR|META|CONST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX" mode="noannot">
-    <xsl:apply-templates select="." mode="pure"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/params.xsl b/helm/style/params.xsl
deleted file mode 100644 (file)
index d703bfe..0000000
+++ /dev/null
@@ -1,374 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML">
-
-<!--***********************************************************************--> 
-<!-- auxiliary functions                                                   -->
-<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena                      -->
-<!--***********************************************************************--> 
-
-<!--***********************************************************************-->
-<!-- get the name from a URI                                               -->
-<!--***********************************************************************-->
-
-<!-- CSC: PROBLEMA: URI CHE NON CONTENGONO / ED INIZIANO CON cic: -->
-<xsl:template name="name_of_uri">
- <xsl:param name="uri" select="&quot;&quot;"/>
- <xsl:variable name="suffix" select="substring-after($uri, &quot;/&quot;)"/>
- <xsl:choose>
-  <xsl:when test="$suffix = &quot;&quot;">
-   <!-- CSC: PROBLEMA: .con PUO' APPARIRE ALL'INTERNO DELLE URI ===>
-     SCRIVERE UNA FUNZIONE RICORSIVA CHE RISOLVA -->
-   <xsl:value-of select="substring-before($uri,&quot;.con&quot;)"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:call-template name="name_of_uri">
-    <xsl:with-param name="uri" select="$suffix"/>
-   </xsl:call-template>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!--***********************************************************************-->
-<!-- erase common prefix from two uris                                     -->
-<!--***********************************************************************-->
-
-<xsl:template name="common_prefix">
- <xsl:param name="first_uri" select="&quot;&quot;"/>
- <xsl:param name="second_uri" select="&quot;&quot;"/>
- <xsl:choose>
-  <xsl:when test="(substring-before($first_uri,&quot;/&quot;) = 
-                substring-before($second_uri,&quot;/&quot;) and 
-                substring-after($second_uri,&quot;/&quot;) != &quot;&quot;)">
-   <xsl:call-template name="common_prefix">
-    <xsl:with-param 
-        name="first_uri" select="substring-after($first_uri,&quot;/&quot;)"/>
-    <xsl:with-param 
-        name="second_uri" select="substring-after($second_uri,&quot;/&quot;)"/>    </xsl:call-template>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:call-template name="slash_counting">
-    <xsl:with-param name="uri" select="$second_uri"/>
-    <xsl:with-param name="counter" select="0"/>
-   </xsl:call-template>
-  </xsl:otherwise>   
- </xsl:choose>
-</xsl:template>
-
-<xsl:template name="slash_counting">
- <xsl:param name="uri" select="&quot;&quot;"/>
- <xsl:param name="counter" select="0"/>
- <xsl:choose>
-  <xsl:when test="(substring-after($uri,&quot;/&quot;) != &quot;&quot;)">
-   <xsl:call-template name="slash_counting">
-    <xsl:with-param 
-        name="uri" select="substring-after($uri,&quot;/&quot;)"/>
-    <xsl:with-param
-        name="counter" select="$counter +1"/> 
-   </xsl:call-template>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="$counter"/>
-  </xsl:otherwise>
- </xsl:choose>   
-</xsl:template>
-
-<xsl:template name="blank_counting">
- <xsl:param name="string" select="&quot;&quot;"/>
- <xsl:param name="counter" select="0"/>
- <xsl:choose>
-  <xsl:when test="(substring-after($string,&quot; &quot;) != &quot;&quot;)">
-   <xsl:call-template name="blank_counting">
-    <xsl:with-param 
-        name="string" select="substring-after($string,&quot; &quot;)"/>
-    <xsl:with-param 
-        name="counter" select="$counter +1"/> 
-   </xsl:call-template>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="$counter + 1"/>
-  </xsl:otherwise> 
- </xsl:choose>  
-</xsl:template>
-
-<xsl:template name="double_point_counting">
- <xsl:param name="string" select="&quot;&quot;"/>
- <xsl:param name="counter" select="0"/>
- <xsl:choose>
-  <xsl:when test="(substring-after($string,&quot;:&quot;) != &quot;&quot;)">
-   <xsl:call-template name="double_point_counting">
-    <xsl:with-param 
-        name="string" select="substring-after($string,&quot;:&quot;)"/>
-    <xsl:with-param 
-        name="counter" select="$counter +1"/> 
-   </xsl:call-template>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="$counter"/>
-  </xsl:otherwise> 
- </xsl:choose>  
-</xsl:template>
-
-<xsl:template name="min">
- <xsl:param name="string" select="&quot;&quot;"/>
- <xsl:param name="counter" select="0"/>
- <xsl:choose>
-  <xsl:when test="contains($string,concat($counter,&quot;:&quot;))
-         or (0 > $counter)">
-  <xsl:value-of select="$counter"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:call-template name="min">
-    <xsl:with-param 
-        name="string" select="$string"/>
-    <xsl:with-param 
-        name="counter" select="$counter -1"/> 
-   </xsl:call-template>
-  </xsl:otherwise>
- </xsl:choose>  
-</xsl:template>
-
-<xsl:template name="get_no_params">
-    <xsl:param name="first_uri" select="&quot;&quot;"/>
-    <xsl:param name="second_uri" select="&quot;&quot;"/>
-     <xsl:variable name="offset">
-      <xsl:call-template name="common_prefix">
-       <xsl:with-param name="first_uri" select="$first_uri"/>
-       <xsl:with-param name="second_uri" select="$second_uri"/>
-      </xsl:call-template>
-     </xsl:variable>
-     <xsl:choose>
-         <xsl:when test="$offset > 0">
-          <xsl:variable name="params"> 
-        <xsl:variable name="second_url">
-                       <xsl:call-template name="URLofURI4getter">
-                               <xsl:with-param name="uri" select="$second_uri"/>
-                       </xsl:call-template>
-               </xsl:variable>
-        <xsl:value-of select="document($second_url)/*/@params"/>
-       </xsl:variable>
-       <xsl:variable name="minimum">
-        <xsl:call-template name="min">
-         <xsl:with-param name="string" select="$params"/>
-         <xsl:with-param name="counter" select="$offset - 1"/>
-        </xsl:call-template>
-       </xsl:variable>
-       <xsl:choose>
-        <xsl:when test="0 > $minimum">0</xsl:when>
-        <xsl:otherwise>
-         <xsl:variable name="relevant_params">
-          <!-- the blank after : in the next line is essential -->
-          <xsl:value-of 
-            select="substring-after($params,concat($minimum,&quot;: &quot;))"/>
-         </xsl:variable>
-         <xsl:variable name="tokens">
-          <xsl:call-template name="blank_counting">
-           <xsl:with-param name="string" select="$relevant_params"/>
-           <xsl:with-param name="counter" select="0"/>
-          </xsl:call-template>
-         </xsl:variable>
-         <xsl:variable name="separators">
-          <xsl:call-template name="double_point_counting">
-           <xsl:with-param name="string" select="$relevant_params"/>
-           <xsl:with-param name="counter" select="0"/>
-          </xsl:call-template>
-         </xsl:variable>
-         <xsl:value-of select="number($tokens - $separators)"/>
-        </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <xsl:otherwise>0</xsl:otherwise>
-     </xsl:choose>
-</xsl:template>
-
-
-<!--***********************************************************************-->
-<!--  Insert a subscript if there is a number at the end of a ci element   -->
-<!--***********************************************************************-->
-
-<xsl:template name="insert_subscript">
-<xsl:param name="node_value" select="&quot;&quot;"/>
-<xsl:param name="current_pos" select="1"/>
-<xsl:param name="start_pos" select="0"/>
-    <xsl:choose>
-    <xsl:when test="$current_pos &lt;= string-length(string($node_value))">
-    <xsl:variable name="current_char"><xsl:value-of select="substring(string($node_value),$current_pos,1)"/></xsl:variable>
-     <xsl:choose>
-     <xsl:when test="(string($current_char) != &quot;0&quot;) and (string($current_char) != &quot;1&quot;) and (string($current_char) != &quot;2&quot;) and (string($current_char) != &quot;3&quot;) and (string($current_char) != &quot;4&quot;) and (string($current_char) != &quot;5&quot;) and (string($current_char) != &quot;6&quot;) and (string($current_char) !=  &quot;7&quot;) and (string($current_char) != &quot;8&quot;) and (string($current_char) != &quot;9&quot;)">
-      <xsl:choose> 
-      <xsl:when test="$start_pos != 0">
-       <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value" select="$node_value"/><xsl:with-param name="current_pos" select="$current_pos + 1"/><xsl:with-param name="start_pos" select="0"/></xsl:call-template>
-      </xsl:when> 
-      <xsl:otherwise>
-       <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value" select="$node_value"/><xsl:with-param name="current_pos" select="$current_pos + 1"/><xsl:with-param name="start_pos" select="$start_pos"/></xsl:call-template>
-      </xsl:otherwise>
-      </xsl:choose>
-     </xsl:when>
-     <xsl:otherwise>  
-      <xsl:choose>
-      <xsl:when test="$start_pos = 0">
-       <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value" select="$node_value"/><xsl:with-param name="current_pos" select="$current_pos + 1"/><xsl:with-param name="start_pos" select="$current_pos"/></xsl:call-template>
-      </xsl:when>
-      <xsl:otherwise>
-       <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value" select="$node_value"/><xsl:with-param name="current_pos" select="$current_pos + 1"/><xsl:with-param name="start_pos" select="$start_pos"/></xsl:call-template>
-      </xsl:otherwise>
-      </xsl:choose>      
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:choose>
-     <xsl:when test="$start_pos != 0">
-      <m:msub>
-       <m:mi><xsl:value-of select="substring(string($node_value),1,$start_pos -1)"/></m:mi>
-       <m:mn><xsl:value-of select="substring(string($node_value),$start_pos)"/></m:mn>
-       </m:msub>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="$node_value"/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:otherwise>    
-    </xsl:choose>
-</xsl:template>
-
-
-<!--*******************************************-->
-<!--    ABSTRACTING PARAMETERS AND COUNTING    -->
-<!--*******************************************-->
-<!-- Si dimentica i CAST dei termini che astrae. Nel caso dell'astrazione -->
-<!-- dei lambda dei pattern del CASE, qualora i lambda non si trovino     -->
-<!-- nella forma weak-head, astrae solo i lambda che trova e restituisce  -->
-<!-- un corpo depurato da tutti i primi cast che precedono il termine     -->
-<!-- restituito.                                                          -->
-
-<xsl:template match="*" mode="abstparams">
-<xsl:param name="noparams" select="0"/>
-<xsl:param name="target" select="0"/>
-<xsl:param name="binder">PROD</xsl:param>
-    <xsl:choose>
-    <xsl:when test="($noparams != 0) and ((name(.)=string($binder)) or (name(.)=&quot;CAST&quot;))">
-     <xsl:choose>
-     <xsl:when test="name(.) = string($binder)">
-      <xsl:if test="$target = 0">
-       <xsl:choose>
-       <xsl:when test="string($binder) = &quot;LAMBDA&quot;">
-        <m:ci>
-         <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="target/@binder"/></xsl:with-param></xsl:call-template>
-        </m:ci>
-       </xsl:when>
-       <xsl:otherwise> 
-        <Param name="{target/@binder}">
-         <xsl:apply-templates select="source"/>
-        </Param>
-       </xsl:otherwise>
-       </xsl:choose>
-      </xsl:if>
-      <xsl:apply-templates select="target/*[1]" mode="abstparams">
-       <xsl:with-param name="noparams" select="$noparams - 1"/>
-       <xsl:with-param name="target" select="$target"/>
-       <xsl:with-param name="binder" select="$binder"/>
-      </xsl:apply-templates>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:apply-templates select="term/*[1]" mode="abstparams">
-       <xsl:with-param name="noparams" select="$noparams"/>
-       <xsl:with-param name="target" select="$target"/>
-       <xsl:with-param name="binder" select="$binder"/>
-      </xsl:apply-templates>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise> 
-     <xsl:choose>
-     <xsl:when test="($target = 1) and ($noparams != 0)">
-      <m:apply>
-      <m:csymbol>app</m:csymbol>
-<!-- Mancava modalita': sono all'interno di un termine -->
-      <xsl:apply-templates select="." mode="pure"/>
-      <xsl:call-template name="printparam"><xsl:with-param name="noleft" select="$noparams"/></xsl:call-template>
-      </m:apply>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:choose>
-      <xsl:when test="$noparams != 0">
-      <xsl:call-template name="printparam"><xsl:with-param name="noleft" select="$noparams"/></xsl:call-template>
-      </xsl:when>
-      <xsl:otherwise>
-       <xsl:if test="$target = 1">
-<!-- Mancava modalita': con target=1 posso provenire sia da un oggetto che da un termine -->
-        <xsl:choose>
-        <xsl:when test="string($binder) = &quot;LAMBDA&quot;">
-        <!-- CSC: era pure, ma deve essere noannot. Giusto, Irene? -->
-         <xsl:apply-templates select="." mode="noannot"/>
-        </xsl:when>
-        <xsl:otherwise>
-         <xsl:apply-templates select="."/>
-        </xsl:otherwise>
-        </xsl:choose>
-       </xsl:if>
-      </xsl:otherwise>
-      </xsl:choose>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>
-
-<xsl:template name="printparam">
-<xsl:param name="noleft" select="0"/>
-<xsl:param name="number" select="1"/>
-    <xsl:if test="$noleft != 0">
-     <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value">$<xsl:value-of select="$number"/></xsl:with-param></xsl:call-template></m:ci>
-     <xsl:call-template name="printparam"><xsl:with-param name="noleft" select="$noleft - 1"/><xsl:with-param name="number" select="$number + 1"/></xsl:call-template>  
-    </xsl:if>
-</xsl:template>
-
-<xsl:template match="*" mode="counting">
-<xsl:param name="noparams" select="0"/>
-<xsl:param name="count" select="0"/>
- <xsl:choose>
- <xsl:when test="name(.) = &quot;PROD&quot;">
-  <xsl:apply-templates select="target/*[1]" mode="counting">
-   <xsl:with-param name="noparams" select="$noparams"/>
-   <xsl:with-param name="count" select="$count + 1"/>
-  </xsl:apply-templates>
- </xsl:when>
- <xsl:when test="name(.) = &quot;CAST&quot;">
-  <xsl:apply-templates select="term/*[1]" mode="counting">
-   <xsl:with-param name="noparams" select="$noparams"/>
-   <xsl:with-param name="count" select="$count"/> 
-  </xsl:apply-templates>
- </xsl:when>
- <xsl:otherwise>
-  <xsl:value-of select="$count - $noparams"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet> 
diff --git a/helm/style/proofs.xsl b/helm/style/proofs.xsl
deleted file mode 100644 (file)
index f61cbe6..0000000
+++ /dev/null
@@ -1,1019 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--******************************************************************--> 
-<!-- Basic Logic                                                      -->
-<!-- (completely) Revisited: february 2001, Andrea Asperti            -->
-<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena                 -->
-<!--******************************************************************-->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-
-<!-- ************************* LOGIC *********************************-->
-
-<!-- Proof objects -->
-
-<!-- <xsl:key name="typeid" use="@of" match="TYPE"/> -->
-<xsl:key name="typeid" use="@of" match="TYPE"/>
-
-<!-- ALL this elements does not have inner type -->
-<xsl:template match="PROD|SORT|MUTIND" mode="noannot">
- <xsl:apply-templates select="." mode="pure"/>
-</xsl:template>
-
-<!-- Atomic elements that have an inner type iff the expected type -->
-<!-- is different from the synthesized type.                       -->
-<xsl:template match="REL|VAR|META|CONST|MUTCONSTRUCT" mode="noannot">
- <xsl:variable name="id" select="@id"/>
- <xsl:variable name="innertype_available">
-  <xsl:for-each select="$InnerTypes">
-   <xsl:if test="key('typeid',$id)/*">
-    <xsl:text>yes</xsl:text>
-   </xsl:if>
-  </xsl:for-each>
- </xsl:variable>
- <xsl:choose>
-  <xsl:when test="$naturalLanguage='yes' and @sort='Prop' and $innertype_available='yes'">
-   <m:apply helm:xref="{@id}">
-    <m:csymbol>proof</m:csymbol>
-    <xsl:apply-templates mode="proof_transform" select="."/>
-    <!-- <xsl:apply-templates mode="try_inductive" select="."/> -->
-    <xsl:for-each select="$InnerTypes">
-     <xsl:apply-templates mode="pure" select="key('typeid',$id)/*"/>
-    </xsl:for-each>
-   </m:apply>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:apply-templates select="." mode="pure"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- ALL ELEMENTS WITH A TYPE ARE TRANSLATED AS A PROOF-ELEMENT -->
-
-<!-- LAMBDA has inner type only if it is not nested inside another lambda -->
-<xsl:template match="LAMBDA" mode="noannot">
- <xsl:variable name="id" select="@id"/>
- <xsl:variable name="innertype_available">
-  <xsl:for-each select="$InnerTypes">
-   <xsl:if test="key('typeid',$id)/*">
-    <xsl:text>yes</xsl:text>
-   </xsl:if>
-  </xsl:for-each>
- </xsl:variable>
- <xsl:choose>
-  <xsl:when test="$naturalLanguage='yes' and @sort='Prop' and $innertype_available='yes'">
-   <m:apply helm:xref="{@id}">
-    <m:csymbol>proof</m:csymbol>
-    <xsl:apply-templates mode="proof_transform" select="."/>
-    <xsl:for-each select="$InnerTypes">
-     <xsl:apply-templates mode="pure" select="key('typeid',$id)/*"/>
-    </xsl:for-each>
-   </m:apply>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:apply-templates select="." mode="pure"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- ALL these elements have inner type -->
-<xsl:template match="LETIN|CAST|APPLY|MUTCASE|FIX|COFIX" mode="noannot">
- <xsl:variable name="id" select="@id"/>
- <xsl:choose>
-  <xsl:when test="$naturalLanguage='yes' and @sort='Prop'">
-   <m:apply helm:xref="{@id}">
-    <m:csymbol>proof</m:csymbol>
-    <xsl:apply-templates mode="proof_transform" select="."/>
-    <!-- <xsl:apply-templates mode="try_inductive" select="."/> -->
-    <xsl:for-each select="$InnerTypes">
-     <xsl:apply-templates mode="pure" select="key('typeid',$id)/*"/>
-    </xsl:for-each>
-   </m:apply>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:choose>
-    <xsl:when test="name()='APPLY'">
-     <!-- This is the case of an applicative expression wich is not
-          a proof but could contains proofs...
-          MODE LETIN OR MODE PURE ??? Big question -->
-     <xsl:apply-templates select="." mode="pure"/>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-templates select="." mode="pure"/>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- si presuppone che il tipo induttivo non sia mutuamente 
-     induttivo. Bisognerebbe andare a vedere l'ultimo parametro
-     del presunto "principio di induzione", tirare fuori il tipo induttivo
-     e vedere se il suo nome coincide con il prefisso di _ind. 
-     Ad esempio nat_double_ind e' definito dall'utente. L'ultimo
-     parametro di nat_double_ind e' di tipo nat, e nat e' diverso
-     da nat_double. Per ora, verifico solo l'esistenza di nat_double,
-     ma questo, benche' non porti ad errore, non copre tutti i
-     casi per quelli mutuamente induttivi -->
-
-<xsl:template mode="try_inductive" match="APPLY">
-   <xsl:variable name="id" select="@id"/>
-   <xsl:choose>
-    <xsl:when test="CONST[1]">
-     <xsl:variable name="uri" select="CONST[1]/@uri"/>
-     <xsl:choose>
-      <xsl:when test="contains($uri,'_ind.con')">
-       <xsl:variable name="ind_uri" 
-         select="concat(substring-before($uri,'_ind.con'),'.ind')"/>
-       <xsl:variable name="InductiveTypeUrl"><xsl:call-template name="URLofURI4getter"><xsl:with-param name="uri" select="$ind_uri"/></xsl:call-template></xsl:variable>
-       <xsl:variable name="inductive_def" 
-     select="document($InductiveTypeUrl)/InductiveDefinition"/>
-       <!-- check if the corresponding inductive definition actually
-            exists -->
-       <xsl:choose>
-        <xsl:when test="$inductive_def">
-         <xsl:variable name="ind_name">
-          <xsl:call-template name="get_name">
-           <xsl:with-param name="uri" select="$uri"/>
-          </xsl:call-template>
-         </xsl:variable>
-         <xsl:variable name="no_params">
-          <xsl:call-template name="get_no_params">
-           <xsl:with-param name="first_uri" select="$CICURI"/>
-           <xsl:with-param name="second_uri" select="$uri"/>
-          </xsl:call-template>
-         </xsl:variable>
-         <xsl:apply-templates mode="inductive" select=".">
-          <xsl:with-param name="inductive_def_uri" 
-           select="$ind_uri"/>
-          <xsl:with-param name="inductive_def" 
-           select="$inductive_def"/>
-          <xsl:with-param name="section_params" select="$no_params"/>
-          <xsl:with-param name="inductive_def_index" select="1"/>
-          <xsl:with-param name="inductive_def_name" select="$ind_name"/>
-         </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-         <xsl:apply-templates mode="letin" select="."/>
-        </xsl:otherwise>
-       </xsl:choose>
-      </xsl:when>
-      <xsl:otherwise>
-       <xsl:apply-templates mode="letin" select="."/>
-      </xsl:otherwise>
-     </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-templates mode="letin" select="."/>
-    </xsl:otherwise>
-   </xsl:choose>
-</xsl:template>
-
-<xsl:template mode="eq_transitive" match="*">
- <!-- <m:ci>eccomi-1: <xsl:value-of select="name()"/></m:ci> -->
- <xsl:choose>
-  <xsl:when test="name()='APPLY'">
-   <!-- <m:ci>eccomi-2: <xsl:value-of select="CONST[1]/@uri"/></m:ci> -->
-   <xsl:variable name="id" select="@id"/>
-   <xsl:choose>
-    <!-- ricordarsi di trattare il parametro -->
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/CSetoids/CSetoid_basics/eq_transitive_unfolded.con'] and count(child::*) = 7">
-     <!-- <m:ci>eccomi-3</m:ci> -->
-     <xsl:apply-templates mode="eq_transitive" select="*[6]"/>
-     <xsl:apply-templates mode="noannot" select="*[4]"/>
-     <xsl:apply-templates mode="eq_transitive" select="*[7]"/>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:call-template name="generate_side_proof">
-      <xsl:with-param name="proof" select="."/>
-      <xsl:with-param name="show_statement" select="0"/>
-     </xsl:call-template> 
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:call-template name="generate_side_proof">
-    <xsl:with-param name="proof" select="."/>
-    <xsl:with-param name="show_statement" select="0"/>
-   </xsl:call-template>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template mode="diseq" match="*">
-  <xsl:param name="rel" select="'eq'"/>
-  <xsl:choose>
-  <xsl:when test="name()='APPLY'">
-      <xsl:variable name="id" select="@id"/>
-   <xsl:choose>
-    <!-- ricordarsi di trattare il parametro -->
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/Basic_Properties_of_leEq/leEq_transitive.con'] and count(child::*) = 7">
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'leq'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="diseq" select="*[7]">
-        <xsl:with-param name="rel" select="'leq'"/>
-       </xsl:apply-templates>
-    </xsl:when> 
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/Basic_Properties_of_leEq/leEq_wdl.con'] and count(child::*) = 7">
-       <m:eq/>
-       <!-- <m:ci><xsl:value-of select="'eq'"/></m:ci> -->
-       <xsl:call-template name="generate_side_proof">
-        <xsl:with-param name="proof" select="*[7]"/>
-        <xsl:with-param name="show_statement" select="0"/>
-       </xsl:call-template>
-       <xsl:apply-templates mode="noannot" select="*[3]"/>
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'leq'"/>
-       </xsl:apply-templates>
-    </xsl:when> 
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/Basic_Properties_of_leEq/leEq_less_trans.con'] and count(child::*) = 7">
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'leq'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="diseq" select="*[7]">
-        <xsl:with-param name="rel" select="'lt'"/>
-       </xsl:apply-templates>
-    </xsl:when>
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/Basic_Properties_of_leEq/less_leEq_trans.con'] and count(child::*) = 7">
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'lt'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="diseq" select="*[7]">
-        <xsl:with-param name="rel" select="'leq'"/>
-       </xsl:apply-templates>
-    </xsl:when>  
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/Basic_Properties_of_leEq/leEq_wdr.con'] and count(child::*) = 7">
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'leq'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="diseq" select="*[7]">
-        <xsl:with-param name="rel" select="'eq'"/>
-       </xsl:apply-templates>
-    </xsl:when>  
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/COrdField_axioms/less_transitive_unfolded.con'] and count(child::*) = 7">
-      <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'lt'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="diseq" select="*[7]">
-        <xsl:with-param name="rel" select="'lt'"/>
-       </xsl:apply-templates>
-     </xsl:when> 
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/COrdField_axioms/less_wdr.con'] and count(child::*) = 7">
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'lt'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="diseq" select="*[7]">
-        <xsl:with-param name="rel" select="'eq'"/>
-       </xsl:apply-templates>
-     </xsl:when>
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/COrdField_axioms/less_wdl.con'] and count(child::*) = 7">
-       <m:eq/>
-       <!-- <m:ci><xsl:value-of select="'eq'"/></m:ci> -->
-       <xsl:call-template name="generate_side_proof">
-        <xsl:with-param name="proof" select="*[7]"/>
-        <xsl:with-param name="show_statement" select="0"/>
-       </xsl:call-template>
-       <xsl:apply-templates mode="noannot" select="*[3]"/>
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'lt'"/>
-       </xsl:apply-templates>
-    </xsl:when> 
-    <!-- 
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/CSetoids/CSetoid_basics/eq_transitive_unfolded.con'] and count(child::*) = 7">
-     <xsl:apply-templates mode="diseq" select="*[6]"/>
-     <m:eq/>
-     <xsl:apply-templates mode="noannot" select="*[4]"/>
-     <m:eq/>
-     <xsl:apply-templates mode="diseq" select="*[7]"/>
-    </xsl:when> 
-    -->
-    <xsl:otherwise>
-     <xsl:element name="{concat('m:',$rel)}"/>
-     <!-- <m:ci><xsl:value-of select="$rel"/></m:ci> -->  
-     <xsl:call-template name="generate_side_proof">
-      <xsl:with-param name="proof" select="."/>
-      <xsl:with-param name="show_statement" select="0"/>
-     </xsl:call-template> 
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:element name="{concat('m:',$rel)}"/> 
-   <!-- <m:ci><xsl:value-of select="$rel"/></m:ci> --> 
-   <xsl:call-template name="generate_side_proof">
-    <xsl:with-param name="proof" select="."/>
-    <xsl:with-param name="show_statement" select="0"/>
-   </xsl:call-template>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template mode="proof_transform" match="*">
- <xsl:choose>
-  <xsl:when test="name()='APPLY'">
-   <xsl:variable name="id" select="@id"/>
-   <xsl:choose>
-    <!-- Algebra equality (eq_transitive_unfolded) -->
-    <!-- It requires a special mode "eq_transitive"-->
-    <!-- togliere il parametro -->
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/CSetoids/CSetoid_basics/eq_transitive_unfolded.con'] and count(child::*) = 7">
-     <m:apply>
-       <m:csymbol>eq_chain</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*[3]"/>
-       <xsl:apply-templates mode="eq_transitive" select="*[6]"/>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="eq_transitive" select="*[7]"/>
-       <xsl:apply-templates mode="noannot" select="*[5]"/>
-     </m:apply>
-    </xsl:when>
-    <!-- Algebra disequalities -->
-    <!-- It requires a special mode "diseq"-->
-    <!-- togliere il parametro -->
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/Basic_Properties_of_leEq/leEq_transitive.con'] and count(child::*) = 7">
-     <m:apply>
-       <m:csymbol>diseq_chain</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*[3]"/>
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'leq'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="diseq" select="*[7]">
-        <xsl:with-param name="rel" select="'leq'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[5]"/>
-     </m:apply>
-    </xsl:when> 
-     <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/Basic_Properties_of_leEq/leEq_wdl.con'] and count(child::*) = 7">
-     <m:apply>
-       <m:csymbol>diseq_chain</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*[5]"/>
-       <m:eq/>
-       <!-- <m:ci><xsl:value-of select="'eq'"/></m:ci> -->
-       <xsl:call-template name="generate_side_proof">
-        <xsl:with-param name="proof" select="*[7]"/>
-        <xsl:with-param name="show_statement" select="0"/>
-       </xsl:call-template>
-       <xsl:apply-templates mode="noannot" select="*[3]"/>
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'leq'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-     </m:apply>
-    </xsl:when>
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/Basic_Properties_of_leEq/leEq_less_trans.con'] and count(child::*) = 7">
-     <m:apply>
-       <m:csymbol>diseq_chain</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*[3]"/>
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'leq'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="diseq" select="*[7]">
-        <xsl:with-param name="rel" select="'lt'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[5]"/>
-     </m:apply>
-    </xsl:when> 
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/Basic_Properties_of_leEq/less_leEq_trans.con'] and count(child::*) = 7">
-     <m:apply>
-       <m:csymbol>diseq_chain</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*[3]"/>
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'lt'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="diseq" select="*[7]">
-        <xsl:with-param name="rel" select="'leq'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[5]"/>
-     </m:apply>
-    </xsl:when>  
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/Basic_Properties_of_leEq/leEq_wdr.con'] and count(child::*) = 7">
-     <m:apply>
-       <m:csymbol>diseq_chain</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*[3]"/>
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'leq'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="diseq" select="*[7]">
-        <xsl:with-param name="rel" select="'eq'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[5]"/>
-     </m:apply>
-    </xsl:when>  
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/COrdField_axioms/less_transitive_unfolded.con'] and count(child::*) = 7">
-     <m:apply>
-       <m:csymbol>diseq_chain</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*[3]"/>
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'lt'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="diseq" select="*[7]">
-        <xsl:with-param name="rel" select="'lt'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[5]"/>
-     </m:apply>
-    </xsl:when>  
-    <!-- togliere il parametro -->
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/COrdField_axioms/less_wdr.con'] and count(child::*) = 7">
-     <m:apply>
-       <m:csymbol>diseq_chain</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*[3]"/>
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'lt'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-       <xsl:apply-templates mode="diseq" select="*[7]">
-        <xsl:with-param name="rel" select="'eq'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[5]"/>
-     </m:apply>
-    </xsl:when>
-    <!-- togliere il parametro -->
-    <xsl:when test="CONST[attribute::uri='cic:/Algebra/COrdFields/COrdField_axioms/less_wdl.con'] and count(child::*) = 7">
-     <m:apply>
-       <m:csymbol>diseq_chain</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*[5]"/>
-       <m:eq/>
-       <!-- <m:ci><xsl:value-of select="'eq'"/></m:ci> -->
-       <xsl:call-template name="generate_side_proof">
-        <xsl:with-param name="proof" select="*[7]"/>
-        <xsl:with-param name="show_statement" select="0"/>
-       </xsl:call-template>
-       <xsl:apply-templates mode="noannot" select="*[3]"/>
-       <xsl:apply-templates mode="diseq" select="*[6]">
-        <xsl:with-param name="rel" select="'lt'"/>
-       </xsl:apply-templates>
-       <xsl:apply-templates mode="noannot" select="*[4]"/>
-     </m:apply>
-    </xsl:when> 
-    <!-- EQUALITY -->
-    <xsl:when test="CONST[
- attribute::uri='cic:/Coq/Init/Logic/Equality/eq_ind.con' or
- attribute::uri='cic:/Coq/Init/Logic/Logic_lemmas/eq_ind_r.con' or
- attribute::uri='cic:/Coq/Init/Logic_Type/eqT_ind.con' or
- attribute::uri='cic:/Coq/Init/Logic_Type/eqT_ind_r.con' or
- attribute::uri='cic:/Coq/Zarith/auxiliary/eqT_ind_r.con'] and count(child::*) = 7">
-      <m:apply>
-       <m:csymbol>rw_step</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*[5]"/>
-       <xsl:apply-templates mode="pure" select="*[3]"/>
-       <xsl:apply-templates mode="pure" select="*[6]"/>
-       <xsl:call-template name="generate_side_proof">
-        <xsl:with-param name="proof" select="*[7]"/>
-       </xsl:call-template>
-       <!-- <xsl:apply-templates mode="proof_transform" select="*[7]"/> -->
-      </m:apply>
-    </xsl:when>
-    <!-- EQUALITY with extra-parameters -->
-    <xsl:when test="CONST[
- attribute::uri='cic:/Coq/Init/Logic/Equality/eq_ind.con' or
- attribute::uri='cic:/Coq/Init/Logic/Logic_lemmas/eq_ind_r.con' or
- attribute::uri='cic:/Coq/Init/Logic_Type/eqT_ind.con' or
- attribute::uri='cic:/Coq/Init/Logic_Type/eqT_ind_r.con' or
- attribute::uri='cic:/Coq/Zarith/auxiliary/eqT_ind_r.con'] and count(child::*) > 7">
-      <xsl:variable name="no_extraproofs" select="count(*[position()>7 and @sort='Prop' and (name(.)='LAMBDA' or name(.)='LETIN' or name(.)='APPLY' or name(.)='MUTCASE' or name(.)='FIX' or name(.)='COFIX')])"/>      
-      <xsl:choose>
-       <xsl:when test="$no_extraproofs=0"> 
-        <m:apply>
-         <m:csymbol>rewrite_and_apply</m:csymbol>
-         <m:apply>
-          <m:csymbol>rw_step</m:csymbol>
-          <xsl:apply-templates mode="noannot" select="*[5]"/>
-          <xsl:apply-templates mode="pure" select="*[3]"/>
-          <xsl:apply-templates mode="pure" select="*[6]"/>
-          <xsl:call-template name="generate_side_proof">
-           <xsl:with-param name="proof" select="*[7]"/>
-           </xsl:call-template>
-          <!-- <xsl:apply-templates mode="pure" select="*[7]"/> -->
-         </m:apply>
-         <xsl:apply-templates mode="noannot" select="*[position()>7]"/>
-        </m:apply>
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:choose>
-         <xsl:when test="*[5]/@sort='Prop'">
-          <m:apply helm:xref="{@id}">
-           <m:csymbol>letin</m:csymbol>
-           <m:apply>
-            <m:csymbol>let</m:csymbol>
-            <m:ci>
-             <xsl:call-template name="insert_subscript">
-              <xsl:with-param name="node_value" select="'h1'"/>
-             </xsl:call-template>
-            </m:ci>
-            <xsl:apply-templates mode="noannot" select="*[5]"/>
-           </m:apply>
-           <xsl:call-template name="gen_let">
-            <xsl:with-param name="init_pos" select="1"/>
-            <xsl:with-param name="from" select="7"/>
-           </xsl:call-template>
-           <m:apply>
-            <m:csymbol>rewrite_and_apply</m:csymbol>
-            <m:apply>
-             <m:csymbol>rw_step</m:csymbol>
-             <m:ci>
-              <xsl:call-template name="insert_subscript">
-               <xsl:with-param name="node_value" select="'h1'"/>
-              </xsl:call-template>
-             </m:ci>
-             <xsl:apply-templates mode="pure" select="*[3]"/>
-             <xsl:apply-templates mode="pure" select="*[6]"/>
-             <xsl:call-template name="generate_side_proof">
-              <xsl:with-param name="proof" select="*[7]"/>
-             </xsl:call-template>
-             <!-- <xsl:apply-templates mode="pure" select="*[7]"/> -->
-            </m:apply>
-            <xsl:apply-templates mode="flat" select="*[8]">
-             <xsl:with-param name="n">
-              <xsl:value-of select="2"/>
-             </xsl:with-param>
-            </xsl:apply-templates>
-           </m:apply>
-          </m:apply>
-         </xsl:when>
-         <xsl:otherwise>
-          <m:apply helm:xref="{@id}">
-           <m:csymbol>letin</m:csymbol>
-           <xsl:call-template name="gen_let">
-            <xsl:with-param name="init_pos" select="0"/>
-            <xsl:with-param name="form" select="7"/>
-           </xsl:call-template>
-           <m:apply>
-            <m:csymbol>rewrite_and_apply</m:csymbol>
-            <m:apply>
-             <m:csymbol>rw_step</m:csymbol>
-             <xsl:apply-templates mode="pure" select="*[5]"/>
-             <xsl:apply-templates mode="pure" select="*[3]"/>
-             <xsl:apply-templates mode="pure" select="*[6]"/>             
-             <xsl:call-template name="generate_side_proof">
-              <xsl:with-param name="proof" select="*[7]"/>
-             </xsl:call-template>
-             <!-- <xsl:apply-templates mode="pure" select="*[7]"/> -->
-            </m:apply>
-            <xsl:apply-templates mode="flat" select="*[8]">
-             <xsl:with-param name="n">
-              <xsl:value-of select="1"/>
-             </xsl:with-param>
-            </xsl:apply-templates>
-           </m:apply>
-          </m:apply>
-         </xsl:otherwise>
-        </xsl:choose>
-       </xsl:otherwise>
-      </xsl:choose>
-    </xsl:when>
-    <!-- False_ind -->
-    <xsl:when test="CONST[
-     attribute::uri='cic:/Coq/Init/Logic/False_ind.con'] and 
-     count(child::*) = 3">
-     <m:apply helm:xref="{@id}">
-       <m:csymbol>false_ind</m:csymbol>
-       <m:ci>cic:/Coq/Init/Logic/False_ind.con</m:ci>
-       <xsl:apply-templates mode="noannot" select="*[3]"/>
-     </m:apply>
-    </xsl:when>
-    <!-- gestire meglio il caso di and_ind quando la prova 
-         non e' della forma \x.\y.M -->
-    <xsl:when test="CONST[
- attribute::uri='cic:/Coq/Init/Logic/Conjunction/and_ind.con'] 
- and count(child::*) = 6 
- and name(*[5])='LAMBDA' 
- and name(*[5]/target/*[1])='LAMBDA'"> 
-      <m:apply helm:xref="{@id}">
-       <m:csymbol>and_ind</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*[6]"/>
-       <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="*[5]/target/@binder"/></xsl:with-param></xsl:call-template></m:ci>
-       <xsl:apply-templates mode="pure" select="*[5]/source/*"/>
-       <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="*[5]/target/LAMBDA/target/@binder"/></xsl:with-param></xsl:call-template></m:ci>
-       <xsl:apply-templates mode="pure" select="*[5]/target/LAMBDA/source/*"/>
-       <xsl:apply-templates mode="proof_transform" select="*[5]/target/LAMBDA/target/*"/> 
-      </m:apply>
-    </xsl:when>
-    <xsl:when test="CONST[
- attribute::uri='cic:/Coq/Init/Logic/Disjunction/or_ind.con'] 
- and count(child::*) = 7">
-      <xsl:choose>
-       <xsl:when test="name(*[5])='LAMBDA' 
-                 and name(*[6])='LAMBDA'">
-        <xsl:variable name="definition_url" 
-            select="'cic:/Coq/Init/Logic/Disjunction/or.ind'"/>
-        <m:apply helm:xref="{@id}">
-         <m:csymbol>full_or_ind</m:csymbol>
-         <xsl:apply-templates mode="noannot" select="*[7]"/>
-         <xsl:for-each select="$InnerTypes">
-          <xsl:apply-templates mode="pure" select="key('typeid',$id)/*[1]"/>
-         </xsl:for-each>
-         <m:apply>
-          <m:csymbol>left_case</m:csymbol>
-          <m:bvar>
-           <m:ci>
-            <xsl:value-of select="*[5]/target/@binder"/>
-           </m:ci>
-           <m:type>
-            <xsl:apply-templates mode="pure" select="*[5]/source/*[1]"/>
-           </m:type>
-          </m:bvar>
-          <xsl:apply-templates mode="noannot" select="*[5]/target/*[1]"/>
-         </m:apply>
-         <m:apply>
-          <m:csymbol>right_case</m:csymbol>
-          <m:bvar>
-           <m:ci>
-            <xsl:apply-templates mode="pure" select="*[6]/target/@binder"/>
-           </m:ci>
-           <m:type>
-            <xsl:apply-templates mode="pure" select="*[6]/source/*[1]"/>
-           </m:type>
-          </m:bvar>
-          <xsl:apply-templates mode="noannot" select="*[6]/target/*[1]"/>
-         </m:apply>
-        </m:apply>
-       </xsl:when>
-       <xsl:otherwise>
-        <m:apply helm:xref="{@id}">
-         <m:csymbol>or_ind</m:csymbol>
-         <xsl:apply-templates mode="noannot" select="*[7]"/>
-         <xsl:for-each select="$InnerTypes">
-          <xsl:apply-templates mode="pure" select="key('typeid',$id)/*[1]"/>
-         </xsl:for-each>
-         <xsl:apply-templates mode="pure" select="*[5]"/>
-         <xsl:apply-templates mode="pure" select="*[6]"/>
-        </m:apply>
-       </xsl:otherwise>
-      </xsl:choose>
-    </xsl:when>
-    <!-- ex_ind, exT_ind -->
-      <xsl:when test="(CONST[attribute::uri='cic:/Coq/Init/Logic_Type/exT_ind.con'] or
-      CONST[attribute::uri='cic:/Coq/Init/Logic/First_order_quantifiers/ex_ind.con'])  
- and count(child::*) = 6 
- and name(*[5])='LAMBDA' 
- and name(*[5]/target/*[1])='LAMBDA'"> 
-      <m:apply helm:xref="{@id}">
-       <m:csymbol>ex_ind</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="*[6]"/>
-       <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="*[5]/target/@binder"/></xsl:with-param></xsl:call-template></m:ci>
-       <xsl:apply-templates mode="pure" select="*[5]/source/*"/>
-       <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="*[5]/target/LAMBDA/target/@binder"/></xsl:with-param></xsl:call-template></m:ci>
-       <xsl:apply-templates mode="pure" select="*[5]/target/LAMBDA/source/*"/>
-       <xsl:apply-templates mode="proof_transform" select="*[5]/target/LAMBDA/target/*"/>
-      </m:apply>
-    </xsl:when>
-    <xsl:when test="name(*[1])='CONST'">
-     <xsl:apply-templates mode="try_inductive" select="."/>
-    </xsl:when>
-    <!-- patch temporanea per la gestione di redex -->
-    <xsl:when test="name(*[1])='LAMBDA' and count(child::*)=2
-         and *[2]/@sort='Prop'">
-     <m:apply helm:xref="{@id}">
-      <m:csymbol>letin</m:csymbol>
-      <m:apply>
-       <m:csymbol>let</m:csymbol>
-       <m:ci>
-        <xsl:call-template name="insert_subscript">
-         <xsl:with-param name="node_value">
-          <xsl:value-of select="*[1]/target/@binder"/>
-         </xsl:with-param>
-        </xsl:call-template>
-       </m:ci>
-       <xsl:apply-templates mode="noannot" select="*[2]"/>
-      </m:apply>
-      <xsl:apply-templates mode="proof_transform" select="*[1]/target/*[1]"/>
-     </m:apply>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-templates select="." mode="letin"/>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:when>
-  <xsl:when test="name()='LAMBDA'">
-   <xsl:choose>
-     <xsl:when test="(name(target/*[1])='APPLY'  and
-      name(target/*[1]/*[1])='CONST' and
-      (target/*[1]/*[1]/@uri='cic:/Coq/Init/Logic_Type/eqT_ind.con' or
-       target/*[1]/*[1]/@uri='cic:/Coq/Init/Logic_Type/eqT_ind_r.con' or
-       target/*[1]/*[1]/@uri='cic:/Coq/Zarith/auxiliary/eqT_ind_r.con')
-      and count(target/*[1]/*) = 8 
-      and name(target/*[1]/*[8])='REL'
-      and target/@binder = target/*[1]/*[8]/@binder )"> 
-      <m:apply>
-       <m:csymbol>rw_step</m:csymbol>
-       <xsl:apply-templates mode="noannot" select="target/*[1]/*[5]"/>
-       <xsl:apply-templates mode="pure" select="target/*[1]/*[3]"/>
-       <xsl:apply-templates mode="pure" select="target/*[1]/*[6]"/>
-       <xsl:call-template name="generate_side_proof">
-        <xsl:with-param name="proof" select="target/*[1]/*[7]"/>
-       </xsl:call-template>
-       <!-- <xsl:apply-templates mode="proof_transform" select="target/*[1]/*[7]"/> -->
-      </m:apply>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:apply-templates mode="pure" select="."/>
-     </xsl:otherwise>
-    </xsl:choose>
-   </xsl:when>
-  <xsl:otherwise>
-   <xsl:apply-templates select="." mode="pure"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template name="is_simple">
- <xsl:param name="proof" select="/.."/>
- <xsl:value-of select="(count($proof/*)=0) or ((name($proof)='APPLY') and (count($proof/*[@sort='Prop' and (name(.)='LAMBDA' or name(.)='LETIN' or name(.)='APPLY' or name(.)='MUTCASE' or name(.)='FIX' or name(.)='COFIX')]) = 0))"/>
-</xsl:template>
-
-<xsl:template name="generate_side_proof">
- <xsl:param name="proof" select="/.."/>
- <xsl:param name="show_statement" select="1"/>
-<!-- 
- <xsl:variable name="is_simple">
-  <xsl:call-template name="is_simple">
-   <xsl:with-param name="proof" select="$proof"/>
-  </xsl:call-template>
- </xsl:variable> -->
-<xsl:variable name="is_simple" select="(count($proof/*)=0) or ((name($proof)='APPLY') and (count($proof/*[@sort='Prop' and (name(.)='LAMBDA' or name(.)='LETIN' or name(.)='APPLY' or name(.)='MUTCASE' or name(.)='FIX' or name(.)='COFIX')]) = 0))"/>
- <xsl:choose>
-  <xsl:when test="$is_simple">
-   <xsl:choose>
-    <xsl:when test="name($proof)='APPLY'">
-     <xsl:apply-templates select="$proof" mode="letin"/>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:apply-templates select="$proof" mode="pure"/>
-    </xsl:otherwise>
-   </xsl:choose>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:variable name="id" select="@id"/>
-   <m:apply helm:xref="{@id}">
-    <xsl:choose>
-     <xsl:when test="$show_statement = 1">
-      <m:csymbol>proof</m:csymbol>
-     </xsl:when>
-     <xsl:otherwise>
-      <m:csymbol>side_proof</m:csymbol>
-     </xsl:otherwise>
-    </xsl:choose>
-    <xsl:apply-templates mode="proof_transform" select="$proof"/>
-    <xsl:for-each select="$InnerTypes">
-     <xsl:apply-templates mode="pure" select="key('typeid',$proof/@id)/*"/>
-    </xsl:for-each>
-   </m:apply>
-   <!-- <xsl:apply-templates select="$proof" mode="noannot"/> -->
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template match="APPLY" mode="letin">
-   <xsl:variable name="no_subproofs">
-    <xsl:variable name="stars">
-     <xsl:for-each select="*[@sort='Prop']">
-      <xsl:variable name="id" select="@id"/>
-      <xsl:variable name="innertype_available">
-       <xsl:for-each select="$InnerTypes">
-        <xsl:if test="key('typeid',$id)/*">
-         <xsl:text>yes</xsl:text>
-        </xsl:if>
-       </xsl:for-each>
-      </xsl:variable>
-      <xsl:if test="name(.)='LAMBDA' or name(.)='LETIN' or name(.)='APPLY' or name(.)='MUTCASE' or name(.)='FIX' or name(.)='COFIX' or ((name(.)='REL' or name(.)='VAR' or name(.)='META' or name(.)='CONST' or name(.)='MUTCONSTRUCT') and $innertype_available='yes')">
-       <!-- We generate one star for each subproof -->
-       <xsl:text>*</xsl:text>
-      </xsl:if>
-     </xsl:for-each>
-    </xsl:variable>
-    <xsl:value-of select="string-length($stars)"/>
-   </xsl:variable>
-   <!-- <m:cn><xsl:value-of select="$no_subproofs"/></m:cn> -->
-   <xsl:choose>
-    <xsl:when test="$naturalLanguage='yes' and ($no_subproofs = 1)">
-     <m:apply helm:xref="{@id}">
-      <m:csymbol>letin1</m:csymbol>
-      <xsl:for-each select="*[@sort='Prop']">
-       <xsl:variable name="id" select="@id"/>
-       <xsl:variable name="innertype_available">
-        <xsl:for-each select="$InnerTypes">
-         <xsl:if test="key('typeid',$id)/*">
-          <xsl:text>yes</xsl:text>
-         </xsl:if>
-        </xsl:for-each>
-       </xsl:variable>
-       <xsl:if test="name(.)='LAMBDA' or name(.)='LETIN' or name(.)='APPLY' or name(.)='MUTCASE' or name(.)='FIX' or name(.)='COFIX' or ((name(.)='REL' or name(.)='VAR' or name(.)='META' or name(.)='CONST' or name(.)='MUTCONSTRUCT') and $innertype_available='yes')">
-        <xsl:apply-templates mode="noannot" select="."/>
-       </xsl:if>
-      </xsl:for-each>
-      <!-- now re-process the application -->
-      <m:apply helm:xref="{@id}">
-       <m:csymbol>app</m:csymbol>
-       <!-- mode previous looks for siblings: 
-            call with the first child -->
-       <xsl:apply-templates mode="previous" select="*[1]"/>
-      </m:apply>
-     </m:apply>
-    </xsl:when>
-    <xsl:when test="$naturalLanguage='yes' and ($no_subproofs > 1)">
-     <m:apply helm:xref="{@id}">
-      <m:csymbol>letin</m:csymbol>
-      <!-- first process all subproofs (let-in) -->
-      <xsl:call-template name="gen_let"/>
-      <!-- now re-process the application  -->
-      <m:apply helm:xref="{@id}">
-       <m:csymbol>app</m:csymbol>
-       <!-- mode flat looks for siblings: call with the first child -->
-       <xsl:apply-templates mode="flat" select="*[1]"/>
-      </m:apply>
-     </m:apply>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:choose>
-     <xsl:when test="@sort='Prop'">
-      <m:apply>
-       <m:csymbol>app</m:csymbol>
-       <xsl:apply-templates mode="erase" select="*[1]"/>
-      </m:apply>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:apply-templates mode="pure" select="."/>
-     </xsl:otherwise>
-     </xsl:choose>
-    </xsl:otherwise>
-   </xsl:choose>
-</xsl:template>
-
-<xsl:template name="gen_let">
- <xsl:param name="init_pos" select="0"/>
- <xsl:param name="from" select="0"/>
-      <xsl:for-each select="*[position()>$from and @sort='Prop']">
-       <xsl:variable name="id" select="@id"/>
-       <xsl:variable name="innertype_available">
-        <xsl:for-each select="$InnerTypes">
-         <xsl:if test="key('typeid',$id)/*">
-          <xsl:text>yes</xsl:text>
-         </xsl:if>
-        </xsl:for-each>
-       </xsl:variable>
-       <xsl:if test="name(.)='LAMBDA' or name(.)='LETIN' or name(.)='APPLY' or name(.)='MUTCASE' or name(.)='FIX' or name(.)='COFIX' or ((name(.)='REL' or name(.)='VAR' or name(.)='META' or name(.)='CONST' or name(.)='MUTCONSTRUCT') and $innertype_available='yes')">
-        <m:apply>
-         <m:csymbol>let</m:csymbol>
-         <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="concat('h',position()+$init_pos)"/></xsl:with-param></xsl:call-template></m:ci>
-         <xsl:apply-templates mode="noannot" select="."/>
-        </m:apply>
-       </xsl:if>
-      </xsl:for-each>
-</xsl:template>
-
-<xsl:template match="*" mode="erase">
-  <xsl:choose>
-   <xsl:when test="@sort='Prop' or $naturalLanguage='no'">
-    <xsl:apply-templates mode="pure" select="."/>
-   </xsl:when>
-   <xsl:otherwise>
-    <m:ci>.</m:ci>
-   </xsl:otherwise>
-   </xsl:choose>
- <xsl:apply-templates mode="erase" select="following-sibling::*[1]"/>
-</xsl:template>
-
-<xsl:template match="*" mode="previous">
- <xsl:variable name="innertype_available">
-  <xsl:variable name="id" select="@id"/>
-  <xsl:for-each select="$InnerTypes">
-   <xsl:if test="key('typeid',$id)/*">
-    <xsl:text>yes</xsl:text>
-   </xsl:if>
-  </xsl:for-each>
- </xsl:variable>
- <xsl:choose>
-  <xsl:when test="@sort='Prop' and (name(.)='LAMBDA' or name(.)='LETIN' or name(.)='APPLY' or name(.)='MUTCASE' or name(.)='FIX' or name(.)='COFIX' or ((name(.)='REL' or name(.)='VAR' or name(.)='META' or name(.)='CONST' or name(.)='MUTCONSTRUCT') and $innertype_available='yes'))">
-   <m:ci>previous</m:ci>
-  </xsl:when>
-  <xsl:otherwise>
-   <!-- forse bisognerebbe trattare solo l'elemento di testa -->
-   <xsl:choose>
-   <xsl:when test="@sort='Prop' or $naturalLanguage='no'">
-    <xsl:apply-templates mode="pure" select="."/>
-   </xsl:when>
-   <xsl:otherwise>
-    <m:ci>.</m:ci>
-   </xsl:otherwise>
-   </xsl:choose>
-   <!-- <xsl:apply-templates select="." mode="pure"/> -->
-  </xsl:otherwise>
- </xsl:choose>
- <xsl:apply-templates mode="previous" select="following-sibling::*[1]"/>
-</xsl:template>
-
-<xsl:template match="*" mode="flat">
- <xsl:param name="n" select="1"/>
- <xsl:variable name="id" select="@id"/>
- <xsl:variable name="innertype_available">
-  <xsl:for-each select="$InnerTypes">
-   <xsl:if test="key('typeid',$id)/*">
-    <xsl:text>yes</xsl:text>
-   </xsl:if>
-  </xsl:for-each>
- </xsl:variable>
- <xsl:choose>
-  <xsl:when test="$naturalLanguage='yes' and @sort='Prop' and (name(.)='LAMBDA' or name(.)='LETIN' or name(.)='APPLY' or name(.)='MUTCASE' or name(.)='FIX' or name(.)='COFIX' or ((name(.)='REL' or name(.)='VAR' or name(.)='META' or name(.)='CONST' or name(.)='MUTCONSTRUCT') and $innertype_available='yes'))">
-   <m:ci>
-    <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="concat('h',$n)"/></xsl:with-param></xsl:call-template>
-   </m:ci>
-   <xsl:apply-templates mode="flat" select="following-sibling::*[1]">
-    <xsl:with-param name="n" select="$n+1"/>
-   </xsl:apply-templates>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:choose>
-    <xsl:when test="name()='REL' or @sort='Prop' or $naturalLanguage='no'">
-     <xsl:apply-templates mode="pure" select="."/>
-    </xsl:when>
-    <xsl:otherwise>
-     <m:ci>.</m:ci>
-    </xsl:otherwise>
-   </xsl:choose>
-   <!-- <xsl:apply-templates mode="pure" select="."/> -->
-   <xsl:apply-templates mode="flat" select="following-sibling::*[1]">
-    <xsl:with-param name="n" select="$n"/>
-   </xsl:apply-templates>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- Auxiliary functions -->
-<!-- OMDOC: now we have name_of_uri generalized on the extension that -->
-<!-- can replace the next template                                    -->
-<xsl:template name="get_name">
- <xsl:param name="uri" select="''"/>
- <xsl:variable name="sub_after" select="substring-after($uri,'/')"/>
- <xsl:choose>
-  <xsl:when test="contains($sub_after,'/')">
-   <xsl:call-template name="get_name">
-    <xsl:with-param name="uri" select="$sub_after"/>
-   </xsl:call-template>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="substring-before($sub_after,'_ind.con')"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- <xsl:template match="APPLY[CONST[
- attribute::uri='cic:/Coq/Init/Logic/Conjunction/and_ind.con']]" mode="appflat">
-    <xsl:choose>
-     <xsl:when test="count(child::*) > 4">
-      <m:apply helm:xref="{@id}">
-       <m:csymbol>app</m:csymbol>
-       <xsl:apply-templates mode="pure" select="*[1]"/>
-       <m:ci>*</m:ci>
-       <m:ci>*</m:ci>
-       <m:ci>*</m:ci>
-       <xsl:apply-templates mode="flat" select="*[5]"/>
-      </m:apply>
-     </xsl:when>
-     <xsl:otherwise>
-      <m:apply helm:xref="{@id}">
-       <m:csymbol>app</m:csymbol>
-       <xsl:apply-templates mode="flat" select="*[1]"/>
-      </m:apply>
-     </xsl:otherwise>
-    </xsl:choose>
-</xsl:template>  -->
-
-
-</xsl:stylesheet>
diff --git a/helm/style/ricerca.xsl b/helm/style/ricerca.xsl
deleted file mode 100644 (file)
index d665eac..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:th="http://www.cs.unibo.it/helm/namespaces/helm-theory">
-
-<xsl:param name="getterURL" select="'http://localhost:8081/'"/>
-
-<xsl:output method="html"/>
-
-<!-- CSC: absPath is the old way to retrieve a file. The new one is using -->
-<!--  URLofURI4getter, defined in getter.xsl                              -->
-<xsl:variable name="absPath"><xsl:value-of select="$getterURL"/>getxml?uri=</xsl:variable>
-
-<xsl:template match="/">
-               <html> 
-                <head></head>
-                <body>
-                <xsl:apply-templates/>
-                </body>
-               </html>
-</xsl:template>
-
-
-
-
-<!-- AGGIUNGERE cic: alle uri nei file Theory -->
-
-
-<xsl:template match="th:VARIABLE|th:DEFINITION|th:THEOREM|th:AXIOM">
-<xsl:param name="current_uri" select="''"/>
-<xsl:variable name="abs_uri">
- <xsl:call-template name="build_uri">
-  <xsl:with-param name="first_uri" select="$current_uri"/>
-  <xsl:with-param name="second_uri" select="@uri"/>
- </xsl:call-template>
-</xsl:variable>
-<xsl:variable name="found" 
-  select="boolean(document(concat($absPath,$abs_uri))//MUTIND[string(@uri)='cic:/Coq/Init/Logic/Equality/eq.ind'])"/>
-<xsl:if test="$found">
-  <xsl:value-of select="$abs_uri"/><BR/>
-</xsl:if>
-</xsl:template>
-
-<xsl:template match="th:SECTION">
-<xsl:param name="current_uri" select="''"/>
-<h1><xsl:value-of select="$current_uri"/></h1>
- <xsl:apply-templates>
-  <xsl:with-param name="current_uri">
-   <xsl:call-template name="build_uri">
-    <xsl:with-param name="first_uri" select="$current_uri"/>
-    <xsl:with-param name="second_uri" select="@uri"/>
-   </xsl:call-template>
-  </xsl:with-param> 
- </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="*">
-<xsl:param name="current_uri" select="''"/>
- <xsl:apply-templates>
-  <xsl:with-param name="current_uri" select="$current_uri"/>
- </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="text()">
-</xsl:template>
-
-<xsl:template name="build_uri">
- <xsl:param name="first_uri" select="''"/>
- <xsl:param name="second_uri" select="''"/>
- <xsl:choose>
-  <xsl:when test="starts-with($second_uri,'cic:')">
-   <xsl:value-of select="$second_uri"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="concat($first_uri,'/',$second_uri)"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/ring.xsl b/helm/style/ring.xsl
deleted file mode 100644 (file)
index d57723e..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:m="http://www.w3.org/1998/Math/MathML"
-                              xmlns:helm="http://www.cs.unibo.it/helm">
-                             
-<xsl:template match="APPLY[CONST/@uri='cic:/Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize_ok.con']" mode="pure">
-   <xsl:choose>
-      <xsl:when test="count(child::*) > 1">
-         <m:apply helm:xref="{@id}">
-            <m:csymbol>app</m:csymbol>
-            <xsl:apply-templates mode="noannot" select="*[1]"/>
-            <m:ci>...</m:ci>
-         </m:apply>
-      </xsl:when>
-      <xsl:otherwise>
-         <xsl:apply-imports/>
-      </xsl:otherwise>
-   </xsl:choose>
-</xsl:template>
-
-<xsl:template match="APPLY[CONST/@uri='cic:/Coq/ring/Ring_abstract/abstract_rings/interp_ap.con']" mode="pure">
-   <xsl:choose>
-      <xsl:when test="count(child::*) = 9">
-         <xsl:call-template name="start-interp">
-           <xsl:with-param name="rtree" select="*[9]"/>
-            <xsl:with-param name="atree" select="*[8]"/>
-        </xsl:call-template>
-      </xsl:when>
-      <xsl:otherwise>
-         <xsl:apply-imports/>
-      </xsl:otherwise>
-   </xsl:choose>
-</xsl:template>
-
-<xsl:template match="APPLY[CONST/@uri='cic:/Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con']" mode="pure">
-   <xsl:choose>
-      <xsl:when test="count(child::*) = 9 and *[APPLY and position()=9]
-                      [CONST/@uri='cic:/Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con']">
-         <m:apply helm:xref="{@id}">
-            <m:csymbol>app</m:csymbol>
-            <xsl:apply-templates mode="noannot" select="*[9]/*[1]"/>
-            <xsl:call-template name="start-interp">
-              <xsl:with-param name="rtree" select="*[9]/*[2]"/>
-               <xsl:with-param name="atree" select="*[8]"/>
-           </xsl:call-template>
-         </m:apply>
-      </xsl:when>
-      <xsl:otherwise>
-         <xsl:apply-imports/>
-      </xsl:otherwise>
-   </xsl:choose>
-</xsl:template>
-
-<!-- **************************  abstract polinomials rendering ************************ -->
-
-<xsl:template match="APPLY[MUTCONSTRUCT[@uri='cic:/Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind' 
-                                    and @noConstr='1']]" mode="interp">
-   <xsl:param name="atree"/>
-   <xsl:apply-templates select="*[2]" mode="interp">
-      <xsl:with-param name="atree" select="$atree"/>
-   </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="APPLY[MUTCONSTRUCT[@uri='cic:/Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind' 
-                                    and @noConstr='2']]" mode="interp">
-   <xsl:param name="atree"/>
-   <xsl:apply-templates mode="noannot" select="."/>
-</xsl:template>
-
-<xsl:template match="APPLY[MUTCONSTRUCT[@uri='cic:/Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind' 
-                                    and @noConstr='3']]" mode="interp">
-   <xsl:param name="atree"/>
-   <xsl:apply-templates mode="noannot" select="."/>
-</xsl:template>
-
-<xsl:template match="APPLY[MUTCONSTRUCT[@uri='cic:/Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind' 
-                                    and @noConstr='4']]" mode="interp">
-   <xsl:param name="atree"/>
-   <xsl:call-template name="mk-mml-op-interp">
-      <xsl:with-param name="arity" select="2"/>
-      <xsl:with-param name="c-tag" select="MUTCONSTRUCT"/>
-      <xsl:with-param name="m-tag" select="'plus'"/>
-      <xsl:with-param name="atree" select="$atree"/>
-   </xsl:call-template>
-</xsl:template>
-
-<xsl:template match="APPLY[MUTCONSTRUCT[@uri='cic:/Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind' 
-                                    and @noConstr='5']]" mode="interp">
-   <xsl:param name="atree"/>
-   <xsl:call-template name="mk-mml-op-interp">
-      <xsl:with-param name="arity" select="2"/>
-      <xsl:with-param name="c-tag" select="MUTCONSTRUCT"/>
-      <xsl:with-param name="m-tag" select="'times'"/>
-      <xsl:with-param name="atree" select="$atree"/>
-   </xsl:call-template>
-</xsl:template>
-
-<xsl:template match="APPLY[MUTCONSTRUCT[@uri='cic:/Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind' 
-                                    and @noConstr='6']]" mode="interp">
-   <xsl:param name="atree"/>
-   <xsl:call-template name="mk-mml-op-interp">
-      <xsl:with-param name="arity" select="1"/>
-      <xsl:with-param name="c-tag" select="MUTCONSTRUCT"/>
-      <xsl:with-param name="m-tag" select="'minus'"/>
-      <xsl:with-param name="atree" select="$atree"/>
-   </xsl:call-template> 
-</xsl:template>
-
-<xsl:template match="APPLY[MUTCONSTRUCT[@uri='cic:/Coq/ring/Quote/variables_map/index.ind' 
-                                    and @noConstr='1']]" mode="interp">
-   <xsl:param name="atree"/>
-   <xsl:apply-templates select="*[2]" mode="interp">
-      <xsl:with-param name="atree" select="$atree/*[4]"/>
-   </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="APPLY[MUTCONSTRUCT[@uri='cic:/Coq/ring/Quote/variables_map/index.ind' 
-                                    and @noConstr='2']]" mode="interp">
-   <xsl:param name="atree"/>
-   <xsl:apply-templates select="*[2]" mode="interp"> 
-      <xsl:with-param name="atree" select="$atree/*[5]"/>
-   </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="MUTCONSTRUCT[@uri='cic:/Coq/ring/Quote/variables_map/index.ind' 
-                              and @noConstr='3']" mode="interp">
-   <xsl:param name="atree"/>
-   <xsl:apply-templates select="$atree/*[3]" mode="noannot"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/rootcontent.xsl b/helm/style/rootcontent.xsl
deleted file mode 100644 (file)
index addef61..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- XSLT version 0.1 of the stylesheet to accomplish the right inclusion  -->
-<!-- of the content stylesheets:                                           -->
-<!-- First draft: May 26 2000, C.Sacerdoti Coen, I.Schena, F.Guidi         -->
-<!--***********************************************************************-->
-
-<!-- Schema of stylesheet precedences (from highest to lowest):          -->
-<!-- proofs.xsl-> reals.xsl-> set -> basic -> annotatedcont              -->
-<!-- because annotatedcont is imported and has lower precendence than    -->
-<!-- the templates of rootcontent (i.e. the templates of set and basic). -->
-<!-- annotatedcont -> objcontent -> content                              -->
-<!-- because annotatedcont generates an import precedence tree.          --> 
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<!--******************************************************************-->
-<!-- Variablie containing the absolute path of the CIC file            -->
-<!--******************************************************************-->
-
-<xsl:import href="annotatedcont.xsl"/>
-<xsl:import href="links_library.xsl"/>
-<xsl:import href="getter.xsl"/>
-
-<xsl:param name="getterURL" select="'http://localhost:8081/'"/>
-<xsl:param name="processorURL" select="'http://localhost:8080/helm/servlet/uwobo/'"/>
-<xsl:param name="naturalLanguage" select="'yes'"/>
-<xsl:param name="annotations" select="'no'"/>
-<xsl:param name="CICURI" select="''"/>
-
-<!-- CSC: Wrong: we assume that no '.body' can appear in the middle of the URI -->
-<xsl:variable name="BaseCICURI">
- <xsl:variable name="res" select="substring-before($CICURI,'.body')"/>
- <xsl:choose>
-  <xsl:when test="$res = ''">
-   <xsl:value-of select="$CICURI"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="$res"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:variable name="InnerTypesUri"><xsl:value-of select="concat($BaseCICURI,'.types')"/></xsl:variable>
-<!-- CSC: ?????????????????? -->
-<xsl:variable name="AnnotationsUri"><xsl:value-of select="concat($BaseCICURI,'.ann')"/></xsl:variable>
-
-<xsl:variable name="InnerTypesUrl"><xsl:call-template name="makeURL4InnerTypes"><xsl:with-param name="uri" select="$InnerTypesUri"/></xsl:call-template></xsl:variable>
-<xsl:variable name="ConstantTypeUrl"><xsl:call-template name="makeURL4InnerTypes"><xsl:with-param name="uri" select="$BaseCICURI"/></xsl:call-template></xsl:variable>
-<xsl:variable name="AnnotationsUrl"><xsl:call-template name="URLofURI4getter"><xsl:with-param name="uri" select="$AnnotationsUri"/></xsl:call-template></xsl:variable>
-
-
-<!-- WARNING: Using lazy evaluation: $CICURI.* may not exist, but -->
-<!-- document() is called only by need!!!                         -->
-<xsl:variable name="InnerTypes" select="document($InnerTypesUrl)"/>
-<xsl:variable name="CICAnnotations" select="document($AnnotationsUrl)"/> 
-
-<xsl:include href="headercontent.xsl"/>
-<xsl:include href="proofs.xsl"/>
-<xsl:variable name="showproof" select="0"/>
-</xsl:stylesheet>
-
-
-
-
-
-
-
-
diff --git a/helm/style/roottheory.xsl b/helm/style/roottheory.xsl
deleted file mode 100644 (file)
index 023190b..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- XSLT version 0.1 of the stylesheet to accomplish the right inclusion  -->
-<!-- of the theory content stylesheets:                                    -->
-<!-- First draft: May 26 2000, Claudio Sacerdoti Coen, Irene Schena        -->
-<!--              November 15 2000, Irene Schena                           -->
-<!--***********************************************************************-->
-
-<!-- Schema of stylesheet precedences (from highest to lowest):          -->
-<!-- theory_content -> rootcontent.xsl                                   -->
-<!-- because theory_content is included and has higher precendence than  -->
-<!-- the templates of rootcontent which are imported.                    -->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:import href="rootcontent.xsl"/>
-<xsl:include href="theory_content.xsl"/>
-
-</xsl:stylesheet>
diff --git a/helm/style/show_dc.xsl b/helm/style/show_dc.xsl
deleted file mode 100644 (file)
index 56f7957..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-                xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
-                xmlns:dc="http://purl.org/metadata/dublin_core#"
-                xmlns:dcq="http://purl.org/metadata/dublin_core_qualifiers#"
-                xmlns:h="http:/www.cs.unibo.it/helm/schemas/schema-h.rdf#"
-                xmlns:hth="http://www.cs.unibo.it/helm/schemas/schema-hth.rdf#">
-
-<xsl:output 
-       method="xml" 
-       encoding="iso-8859-1" 
-       media-type="text/html"
-       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
-       doctype-system="DTD/xhtml1-transitional.dtd" />
-
-<xsl:template name="loop_show_dc">
- <xsl:param name="CICURI" select="''"/>
- <xsl:param name="first_time" select="true()"/>
- <xsl:variable name="document" select="document(concat($BaseRDFURLDC,$CICURI))"/>
- <xsl:choose>
-  <xsl:when test="$document/rdf:RDF/*/*">
-   <h1>Dublin Core Metadata for <xsl:value-of select="$CICURI"/>:</h1>
-   <xsl:apply-templates mode="show_dc" select="$document">
-    <xsl:with-param name="CICURI" select="$CICURI"/>
-   </xsl:apply-templates>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:if test="$first_time">
-    <h1>No Dublin Core Metadata available for <xsl:value-of select="$CICURI"/>.</h1>
-   </xsl:if>
-  </xsl:otherwise>
- </xsl:choose>
- <xsl:variable name="basename">
-  <xsl:call-template name="get_basename">
-   <xsl:with-param name="CICURI" select="$CICURI"/>
-  </xsl:call-template>
- </xsl:variable>
- <xsl:variable name="parentURI" select="substring-before($CICURI,concat('/',$basename))"/>
- <xsl:if test="not($parentURI = 'cic:')">
-  <xsl:call-template name="loop_show_dc">
-   <xsl:with-param name="CICURI" select="$parentURI"/>
-   <xsl:with-param name="first_time" select="false()"/>
-  </xsl:call-template>
- </xsl:if>
-</xsl:template>
-
-<xsl:template name="get_basename">
- <xsl:param name="CICURI"/>
- <xsl:variable name="suffix" select="substring-after($CICURI,'/')"/>
- <xsl:choose>
-  <xsl:when test="$suffix = ''">
-   <xsl:value-of select="$CICURI"/>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:call-template name="get_basename">
-    <xsl:with-param name="CICURI" select="$suffix"/>
-   </xsl:call-template>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="/">
- <table>
-  <xsl:apply-templates mode="show_dc" select="rdf:RDF/*/*"/>
- </table>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:title">
- <tr>
-  <td>Title:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:creator">
- <tr>
-  <td>Creator:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:contributor">
- <tr>
-  <td>Contributor:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:subject">
- <tr>
-  <td>Subject:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:description">
- <tr>
-  <td>Description:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:publisher">
- <tr>
-  <td>Publisher:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:date">
- <tr>
-  <td>Date:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:coverage">
- <tr>
-  <td>Coverage:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:type">
- <tr>
-  <td>Type:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="hth:ResourceType">
- <xsl:value-of select="substring-after(@rdf:about,'#')"/>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:format">
- <tr>
-  <td>Format:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="hth:ResourceFormat">
- <xsl:value-of select="substring-after(@rdf:about,'#')"/>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:identifier">
- <tr>
-  <td>Identifier:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:source">
- <tr>
-  <td>Source:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:language">
- <tr>
-  <td>Language:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:relation">
- <tr>
-  <td>Relation:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dcq:RelationType">
- <xsl:value-of select="substring-after(@rdf:about,'#')"/>
- <xsl:text> </xsl:text>
- <xsl:value-of select="@rdf:value"/>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="dc:rights">
- <tr>
-  <td>Rights:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="hth:institution">
- <tr>
-  <td>Institution:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="hth:contact">
- <tr>
-  <td>Contact:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="hth:firstVersion">
- <tr>
-  <td>First Version:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="hth:modified">
- <tr>
-  <td>Modified:</td>
-  <td><xsl:apply-templates mode="show_dc"/></td>
- </tr>
-</xsl:template>
-
-<xsl:template mode="show_dc" match="*">
- <tr>
-  <td>ERROR!</td>
-  <td><xsl:value-of select="name(.)"/></td>
- </tr>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/theory_content.xsl b/helm/style/theory_content.xsl
deleted file mode 100644 (file)
index e3e50b1..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- XSLT version 0.1 of theory objects to theory sections:                -->
-<!-- First draft: May 08 2000, Claudio Sacerdoti Coen, Irene Schena        -->
-<!--***********************************************************************--> 
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:ht="http://www.cs.unibo.it/helm/namespaces/helm-theory">
-
-
-<!-- THEORY and SUBTHEORIES -->
-
-<xsl:template match="ht:SECTION">
-<xsl:param name="current_uri" select="''"/>
-<xsl:param name="delim" select="''"/>
-    <ht:SECTION name="{@uri}">
-     <xsl:apply-templates><xsl:with-param name="current_uri" select="concat($current_uri,$delim,string(@uri))"/><xsl:with-param name="delim" select="&quot;/&quot;"/></xsl:apply-templates>
-    </ht:SECTION>
-</xsl:template>
-
-<!-- MUTUAL -->
-
-<xsl:template match="ht:MUTUAL">
-<xsl:param name="current_uri" select="''"/>
-<xsl:param name="delim" select="''"/>
-   <ht:MUTUAL>
-    <xsl:apply-templates><xsl:with-param name="current_uri" select="$current_uri"/><xsl:with-param name="delim" select="$delim"/></xsl:apply-templates>
-   </ht:MUTUAL>
-</xsl:template>
-
-
-<!-- THEORY ELEMENTS -->
-
-<xsl:template match="ht:AXIOM|ht:DEFINITION|ht:THEOREM|ht:VARIABLE">
-<xsl:param name="current_uri" select="''"/>
-<xsl:param name="delim" select="''"/>
-<xsl:variable name="uri" select="concat(string($current_uri),$delim,string(@uri))"/>
-    <xsl:copy>
-     <xsl:copy-of select="@as"/>
-     <xsl:attribute name="uri"><xsl:value-of select="$uri"/></xsl:attribute>
-    </xsl:copy>
-</xsl:template>
-
-<xsl:template match="ht:OBJECT">
-<xsl:param name="current_uri" select="''"/>
-<xsl:param name="delim" select="''"/>
-<xsl:variable name="uri" select="concat(string($current_uri),$delim,string(@uri))"/>
-    <xsl:copy>
-     <xsl:copy-of select="@mode"/>
-     <xsl:attribute name="uri"><xsl:value-of select="$uri"/></xsl:attribute>
-    </xsl:copy>
-</xsl:template>
-
-<!-- Root and XHTML -->
-
-<xsl:template match = "/|*">
-<xsl:param name="current_uri" select="''"/>
-<xsl:param name="delim" select="''"/>
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:apply-templates><xsl:with-param name="current_uri" select="$current_uri"/><xsl:with-param name="delim" select="$delim"/></xsl:apply-templates>
-  </xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/theory_pres.xsl b/helm/style/theory_pres.xsl
deleted file mode 100644 (file)
index 47b2622..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Copyright (C) 2000, HELM Team                                     -->
-<!--                                                                   -->
-<!-- This file is part of HELM, an Hypertextual, Electronic            -->
-<!-- Library of Mathematics, developed at the Computer Science         -->
-<!-- Department, University of Bologna, Italy.                         -->
-<!--                                                                   -->
-<!-- HELM 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.            -->
-<!--                                                                   -->
-<!-- HELM 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 HELM; if not, write to the Free Software               -->
-<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
-<!-- MA  02111-1307, USA.                                              -->
-<!--                                                                   -->
-<!-- For details, see the HELM World-Wide-Web page,                    -->
-<!-- http://cs.unibo.it/helm/.                                         -->
-
-<!--***********************************************************************--> 
-<!-- XSLT version 0.1 of theory sections to HTML:                          -->
-<!-- First draft: May 10 2000, Irene Schena                                -->
-<!--              November 15 2000, Irene Schena                           -->
-<!--***********************************************************************--> 
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                              xmlns:ht="http://www.cs.unibo.it/helm/namespaces/helm-theory">
-
-<!--<xsl:output method="html" encoding="iso-8859-1"/>-->
-<xsl:output 
-       method="xml" 
-       encoding="iso-8859-1" 
-       media-type="text/html"
-       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
-       doctype-system="DTD/xhtml1-transitional.dtd" />
-
-<xsl:template match="ht:SECTION">
-     <xsl:apply-templates select="*"/>
-</xsl:template>
-
-<xsl:template match="ht:MUTUAL">
-     <h4>BEGIN MUTUAL DEFINITIONS</h4>
-     <xsl:apply-templates select="*"/>
-     <h4>END MUTUAL DEFINITIONS</h4>
-</xsl:template>
-
-<xsl:template match="ht:OBJECT">
- <xsl:variable name="delimiter">
-  <xsl:if test="@mode != 'linkonly'">
-   <xsl:text>:</xsl:text>
-  </xsl:if>
- </xsl:variable>
-    <table>
-     <tr>
-      <td colspan="2">
-       <b>Object<xsl:text>&#x00a0;</xsl:text><a href="{@uri}"><xsl:value-of select="@uri"/></a><xsl:value-of select="$delimiter"/></b>
-      </td>
-     </tr>
-     <xsl:if test="@mode != 'linkonly'">
-      <tr>
-       <td>&#x00a0;&#x00a0;&#x00a0;</td>
-       <td><ENTITY uri="{@uri}" type="{@mode}"/></td>
-      </tr>
-     </xsl:if>
-    </table>
-</xsl:template>
-
-<xsl:template match="ht:THEOREM">
-    <table>
-     <tr>
-      <td colspan="2">
-       <b><xsl:value-of select="@as"/><xsl:text>&#x00a0;</xsl:text><a href="{@uri}"><xsl:value-of select="@uri"/></a>:</b>
-      </td>
-     </tr>
-     <tr>
-      <td>&#x00a0;&#x00a0;&#x00a0;</td>
-      <td><ENTITY uri="{@uri}" type="typeonly"/></td>
-     </tr>
-    </table>
-</xsl:template>
-
-<xsl:template match="ht:AXIOM|ht:VARIABLE">
-    <table>
-     <tr>
-      <td colspan="2">
-       <b><xsl:value-of select="substring-after(string(name(.)), &quot;ht:&quot;)"/><xsl:text>&#x00a0;</xsl:text><a href="{@uri}"><xsl:value-of select="@uri"/></a>:</b>
-      </td>
-     </tr>
-     <tr>
-      <td>&#x00a0;&#x00a0;&#x00a0;</td>
-      <td><ENTITY uri="{@uri}" type="embed"/></td>
-     </tr>
-    </table>
-</xsl:template>
-
-<xsl:template match="ht:DEFINITION">
-<xsl:variable name="name"><xsl:choose><xsl:when test="@as='Inductive'">Inductive Definition</xsl:when><xsl:when test="@as='CoInductive'">CoInductive Definition</xsl:when><xsl:when test="@as='Record'">Record Definition</xsl:when><xsl:otherwise>Definition</xsl:otherwise></xsl:choose></xsl:variable>
-    <table>
-     <tr>
-      <td colspan="2">
-       <b><xsl:value-of select="string($name)"/><xsl:text>&#x00a0;</xsl:text><a href="{@uri}"><xsl:value-of select="@uri"/></a>:</b>
-      </td>
-     </tr>
-     <tr>
-      <td>&#x00a0;&#x00a0;&#x00a0;</td>
-      <td><ENTITY uri="{@uri}" type="embed"/></td>
-     </tr>
-    </table>
-</xsl:template>
-
-<!-- Root and XHTML -->
-
-<xsl:template match = "/|*">
-  <xsl:copy>
-   <xsl:copy-of select="@*"/>
-   <xsl:apply-templates/>
-  </xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/helm/style/xslt_index.txt b/helm/style/xslt_index.txt
deleted file mode 100644 (file)
index 2f31b96..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-annotatedcont.xsl
-annotatedpres.xsl
-content.xsl
-content_to_html.xsl
-contentlib.xsl
-drop_coercions.xsl
-expandobj.xsl
-genmmlid.xsl
-getter.xsl
-headercontent.xsl
-html_init.xsl
-html_reals.xsl
-html_set.xsl
-inductive.xsl
-lambda.xsl
-link.xsl
-links_library.xsl
-mk_dep_graph.xsl
-mk_meta_and_dep_graph.xsl
-mk_meta_graph.xsl
-mk_meta_theory.xsl
-mmlctop.xsl
-mmlextension.xsl
-mmlnotation.xsl
-mmltheoryextension.xsl
-objcontent.xsl
-objtheorycontent.xsl
-params.xsl
-proofs.xsl
-ricerca.xsl
-ring.xsl
-rootcontent.xsl
-roottheory.xsl
-show_dc.xsl
-theory_content.xsl
-theory_pres.xsl
diff --git a/helm/uwobo-panel/.cvsignore b/helm/uwobo-panel/.cvsignore
deleted file mode 100644 (file)
index 335ec95..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.tar.gz
diff --git a/helm/uwobo-panel/Makefile b/helm/uwobo-panel/Makefile
deleted file mode 100644 (file)
index cb4fdd9..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-all:
-
-clean:
-       rm -f uwobo-panel.tar.gz
-
-cleanbak:
-       rm -rf *~
-
-dist: clean cleanbak
-       cd ..; tar cvfz uwobo-panel.tar.gz uwobo-panel ; mv uwobo-panel.tar.gz uwobo-panel
diff --git a/helm/uwobo-panel/control.html b/helm/uwobo-panel/control.html
deleted file mode 100644 (file)
index e9e80d8..0000000
+++ /dev/null
@@ -1,488 +0,0 @@
-<html>
-
-<head>
-<title>UWOBO Control Panel</title>
-
-<style type="text/css">
-#normal { background-color: white; font-family: sans-serif }
-td.head { font-weight: bold; background-color: #e6e6fa; color: brown }
-td.back { background-color: #e6e6fa; color: brown }
-#indent { margin-left: 1cm; margin-right: 1cm }
-</style>
-
-<script language="JavaScript" src="control.js">
-</script>
-
-</head>
-
-<body id="normal">
-<a name="top"/>
-<table border="0" width="100%" cellpadding="4">
-<tr><td class="head" align="center"><big><big>UWOBO Control Panel</big></big></td></tr>
-</table>
-
-<br />
-
-<div id="indent">
-This is a control panel for the UWOBO servlet. You can control a local or remote UWOBO servlet by filling
-the appropriate fields <a href="#params">below</a> and sending the desired commands. In most cases, results of commands, such as error
-messages or documents, will be opened in the frame at the bottom of this page. For those commands sending multiple
-requests to the UWOBO server, a new window will be opened for each request issued. Note that in order to use
-this page <i>you must have JavaScript enabled</i>.
-If you have troubles, please send an email to the author:
-<a href="mailto:luca.padovani@cs.unibo.it">luca.padovani@cs.unibo.it</a>
-
-<br /><br />
-
-The sections:
-<ul>
-  <li><a href="#params">Global Parameters</a></li>
-  <li><a href="#sessions">Daemon Management</a></li>
-  <li><a href="#queries">Queries</a></li>
-  <li><a href="#stylesheets">Stylesheet Management</a></li>
-  <li><a href="#process">Processing</a></li>
-</ul>
-
-In case you want to customize the panel for your own needs, you can download the source archive
-(HTML + JavaScript):
-<ul>
-  <li>UWOBO Panel [<a href="uwobo-panel.tar.gz">.tar.gz</a>]</li>
-</ul>
-
-</div>
-
-<a name="params"/>
-<table border="0" width="100%" cellpadding="4" cellspacing="0">
-<tr>
-  <td class="head" align="left"><big>Global Parameters</big></td>
-  <td class="back" align="right"><a href="#top">top</a></td>
-</tr>
-</table>
-
-<br />
-
-<div id="indent">
-The following are global parameters used by all the other section to contact the UWOBO servlet and possibly a
-getter. The getter is not required for some operations and can be excluded by unchecking the proper buttons
-below.
-
-<br /><br />
-
-The following is the URL used to contact the UWOBO servlet. Note that the servlet is usually launched by
-<a href="http://jakarta.apache.org" target="top">TOMCAT</a>. <tt>localhost</tt> is relative to your machine. 
-
-<br /><br />
-
-<table border="0">
-  <tr>
-    <th colspan="2" align="left">UWOBO URL</th>
-  </tr>
-  <tr>
-    <td>
-      <form name="uwoboURL">
-        <script>
-          document.write('<input type="text" value="' + getInitialProcessorURL() + '" size="50"/>');
-       </script>
-      </form>
-    </td>
-    <td>
-      <form>
-        <select onChange="selectUwoboURL(this)">
-         <option value="">---</option>
-         <option value="localhost">localhost</option>
-         <option value="marcello.cs.unibo.it">marcello</option>
-         <option value="phd.cs.unibo.it">phd</option>
-         <option value="eolo.cs.unibo.it">eolo</option>
-    <option value="helm.phd.cs.unibo.it">helm</option>
-       </select>
-      </form>
-    </td>
-    <td>
-      <form>
-        <input type="button" value="Check" onClick="top.result.location.replace(getUwoboURL() + 'help')"/>
-      </form>
-    </td>
-  </tr>
-</table>
-
-The following is the URL used to contact the getter. The getter is usually launched manually.
-In all cases except for the check button below, 
-<tt>localhost</tt> is relative to the host running UWOBO, because the getter URL is sent as
-a parameter along with UWOBO commands. In other words, <tt>localhost</tt> <i>is</i> the host
-running UWOBO and not your machine.
-
-<br /><br />
-
-<table border="0">
-  <tr>
-    <th colspan="2" align="left">Getter URL</th>
-  </tr>
-  <tr>
-    <td>
-      <form name="getterURL">
-        <script>
-         document.write('<input type="text" value="' + getInitialGetterURL() + '" size="50"/>');
-       </script>
-      </form>
-    </td>
-    <td>
-      <form>
-        <select onChange="selectGetterURL(this)">
-         <option value="">---</option>
-         <option value="localhost">localhost</option>
-         <option value="marcello.cs.unibo.it">marcello</option>
-         <option value="phd.cs.unibo.it">phd</option>
-         <option value="eolo.cs.unibo.it">eolo</option>
-       </select>
-      </form>
-    </td>
-    <td>
-      <form>
-        <input type="button" value="Check" onClick="top.result.location.replace(getGetterURL() + 'help')"/>
-      </form>
-    </td>
-  </tr>
-</table>
-</div>
-
-<br />
-
-<a name="sessions"/>
-<table border="0" width="100%" cellpadding="4" cellspacing="0">
-<tr>
-  <td class="head" align="left"><big>Daemon Management</big></td>
-  <td class="back" align="right"><a href="#top">top</a></td>
-</tr>
-</table>
-
-<br />
-
-<div id="indent">
-<p>You can start a new daemon on a given port. The new daemon will have
-   an empty list of processed stylesheets.
-</p>
-<table border="0">
-  <tr>
-    <th colspan="2" align="left">Port</th>
-  </tr>
-  <tr>
-    <td>
-      <form name="sessions">
-        <script>
-         document.write('<input type="text" value="' + getInitialPort() + '" size="5"/>');
-       </script>
-      </form>
-    </td>
-    <td>
-      <form>
-        <input type="button" value="Start New Daemon" onClick="top.result.location.replace(getUwoboURL() + 'newsession?port=' + document.sessions.elements[0].value)"/>
-      </form>
-    </td>
-  </tr>
-</table>
-</div>
-
-<br />
-
-<div id="indent">
-<p>You can also kill the daemon. The log file will be mantained.</p>
-<table border="0">
-  <tr>
-    <td>
-      <form>
-        <input type="button" value="Stop Daemon" onClick="top.result.location.replace(getUwoboURL() + 'kill')"/>
-      </form>
-    </td>
-  </tr>
-</table>
-</div>
-
-<br />
-<a name="queries"/>
-<table border="0" width="100%" cellpadding="4" cellspacing="0">
-<tr>
-  <td class="head" align="left"><big>Queries</big></td>
-  <td class="back" align="right"><a href="#top">top</a></td>
-</tr>
-</table>
-
-<div id="indent">
-
-<br />
-
-The following are commands to do some simple queries about the UWOBO servlet.
-
-<br /><br />
-
-<table border="0">
-<tr>
-  <td>
-    Retrieve the version of the UWOBO servlet running at the UWOBO URL and list the syntax
-    of the accepted commands.
-    You can use this button to verify that a UWOBO servlet
-    is actually running there:
-  </td>
-</tr>
-<tr>
-  <td><form><input type="button" value="Help" onClick="top.result.location.replace(getUwoboURL() + 'help')"/></form></td>
-</tr>
-<tr>
-  <td>
-    Ask UWOBO for a list of the stylesheets currently compiled inside the servlet, along with their keys:
-  </td>
-</tr>
-<tr>
-  <td><form><input type="button" value="List Stylesheets" onClick="top.result.location.replace(getUwoboURL() + 'list')"/></form></td>
-</tr>
-</table>
-
-<br />
-
-</div>
-
-<a name="stylesheets"/>
-<table border="0" width="100%" cellpadding="4" cellspacing="0">
-<tr>
-  <td class="head" align="left"><big>Stylesheet Management</big></td>
-  <td class="back" align="right"><a href="#top">top</a></td>
-</tr>
-</table>
-
-<div id="indent">
-
-<br />
-
-In this section you can add, remove and reload stylesheet into the server. There are
-some frequently used stylesheets whose URIs and keys can be automatically filled in
-by selecting one of the options of the box below. Note that for such stylesheets
-the getter is used by default (you can deselect it, however):
-
-<br /><br 7>
-
-<table border="0">
-<tr>
-  <th align="left">Predefined Stylesheets</th>
-</tr>
-<tr>
-  <td>
-    <form name="predefinedStylesheets">
-      <select size="1" onChange="selectPredefinedStylesheet(this)">
-        <option value="">---</option>
-        <option value="C1,rootcontent.xsl,true">CIC ==&gt; MathML Content</option>
-        <option value="TC1,objtheorycontent.xsl,true">CIC ==&gt; MathML Content (Show only the thesis)</option>
-        <option value="C2,annotatedpres.xsl,true">MathML Content ==&gt; MathML Presentation</option>
-        <option value="T1,theory_content.xsl,true">Theory CIC ==&gt; MathML Content</option>
-        <option value="T2,theory_pres.xsl,true">Theory Content ==&gt; MathML Presentation</option>
-        <option value="E,expandobj.xsl,true">Expander</option>
-        <option value="G,genmmlid.xsl,true">MathML Content ==&gt; MathML Content + IDs</option>
-        <option value="HC2,content_to_html.xsl,true">MathML Content ==&gt; HTML</option>
-        <option value="L,link.xsl,true">Resolve links</option>
-        <option value="d_c,drop_coercions.xsl,true">Drop implicit coercions</option>
-        <option value="meta_theory,mk_meta_theory.xsl,true">Metadata (back-pointers) to theory</option>
-        <option value="L2H,ls2html.xsl,true">Getter LS ==&gt; HTML</option>
-        <option value="GP,getParam.xsl,true">Get Param</option>
-        <option value="RT,resolve_topurl.xsl,true">Logic-sheet to substitute the interface URL</option>
-        <option value="MC,metadataControl.xsl,true">Stylesheet to create links to metadata</option>
-        <option value="MGL,makeGraphLinks.xsl,true">Add hyperlink menus to graphs</option>
-        <option value="MMG,mk_meta_graph.xsl,true">Make graph of backward dependencies</option>
-        <option value="MDG,mk_dep_graph.xsl,true">Make graph of dependencies</option>
-      </select>
-    </form>
-  </td>
-  <td>
-    <form>
-      <input type="button" value="Load All Predefined" onClick="loadAllPredefined()"/>
-    </form>
-  </td>
-  <td>
-    <form>
-      <input type="button" value="Remove All Predefined" onClick="removeAllPredefined()"/>
-    </form>
-  </td>
-</tr>
-</table>
-
-Here you have to identify a stylesheet by means of a relative or absolute URI. Usually
-you will specify a relative URI when using the getter to retrieve the stylesheet.
-Moreover, you can specify a key associated to this stylesheet, so that it will be easier to
-refer to it in subsequent operations. If escaping is enabled, then the stylesheet URI will
-be escaped. This might be particularly useful if the stylesheet is loaded by the getter.
-
-<br /><br />
-
-<table border="0">
-<tr>
-  <th align="left">Stylesheet</th>
-  <th align="left">Key</th>
-  <th align="left">Use Getter</th>
-  <th align="left">Escape</th>
-</tr>
-<tr>
-  <td>
-    <form name="stylesheetURI">
-      <input type="text" size="50"/>
-    </form>
-  </td>
-  <td>
-    <form name="stylesheetKey">
-      <input type="text" size="10"/>
-    </form>
-  </td>
-  <td>
-    <form name="loadUseGetter">
-      <input type="checkbox" checked="true"/>
-    </form>
-  </td>
-  <td>
-    <form name="loadEscape">
-      <input type="checkbox" checked="true"/>
-    </form>
-  </td>
-  <td>
-    <form>
-      <input type="button" value="Load" onClick="loadStylesheet()"/>
-    </form>
-  </td>
-  <td>
-    <form>
-      <input type="button" value="Reload" onClick="reloadStylesheet()"/>
-    </form>
-  </td>
-  <td>
-    <form>
-      <input type="button" value="Remove" onClick="removeStylesheet()"/>
-    </form>
-  </td>
-</tr>
-</table>
-
-Use the buttons below to remove or reload <i>all</i> the stylesheets inside the servlet. Use these commands with
-care, and remember that the servlet can be shared among different users:
-
-<br /><br />
-
-<table border="0">
-<tr>
-  <td>
-    <form>
-      <input type="button" value="Remove All" onClick="removeAllStylesheets()"/>
-    </form>
-  </td>
-  <td>
-    <form>
-      <input type="button" value="Reload All" onClick="top.result.location.replace(getUwoboURL() + 'reload?keys=')"/>
-    </form>
-  </td>
-</tr>
-</table>
-</div>
-
-<a name="process"/>
-<table border="0" width="100%" cellpadding="4" cellspacing="0">
-<tr>
-  <td class="head" align="left"><big>Processing</big></td>
-  <td class="back" align="right"><a href="#top">top</a></td>
-</tr>
-</table>
-
-<div id="indent">
-
-<br />
-
-You can use the &quot;Apply&quot; command to perform a transformation. Specify the URI of the source
-document in the form below. The URI can be relative or absolute (in the former case you
-will probably want to enable the use of the getter).
-If escaping is enabled, then special characters are escaped. This might be particularly useful
-if the source is loaded by the getter.
-
-<br /><br />
-
-<table border="0">
-<tr>
-  <th align="left">Source Document</th>
-  <th align="left">Escape</th>
-</tr>
-<tr>
-  <td>
-    <form name="sourceDocument">
-      <input type="text" size="50"/>
-    </form>
-  </td>
-  <td>
-    <form name="escapeSource">
-      <input type="checkbox" checked="true"/>
-    </form>
-  </td>
-</tr>
-</table>
-
-You can specify a sequence of zero or more parameters separated by blanks. Each
-parameter is made of a name immediately followed by <tt>=</tt> and then a value.
-If &quot;Escape&quot; is checked, then parameters are escaped in the final
-URI.
-
-<br /><br />
-
-<table border="0">
-<tr>
-  <th align="left">Parameters (optional)</th>
-  <th align="left">Escape</th>
-</tr>
-<tr>
-  <td>
-    <form name="parameters">
-      <input type="text" size="50"/>
-    </form>
-  </td>
-  <td>
-    <form name="escapeParameters">
-      <input type="checkbox" checked="true"/>
-    </form>
-  </td>
-</tr>
-</table>
-
-In the key list specify a list of keys
-separated by blanks. This is the list of stylesheets to be applied in sequence to the
-source document.
-When ready, click on the button and have fun!
-
-<br /><br />
-
-<table border="0">
-<tr>
-  <th align="left">Key list</th>
-  <th align="left">Use Getter</th>
-</tr>
-<tr>
-  <td>
-    <form name="keyList">
-      <input type="text" size="50"/>
-    </form>
-  </td>
-  <td>
-    <form name="applyUseGetter">
-      <input type="checkbox" checked="true"/>
-    </form>
-  </td>
-  <td>
-    <form>
-      <input type="button" value="Apply" onClick="applyStylesheets()"/>
-    </form>
-  </td>
-</tr>
-</table>
-
-</div>
-
-<table border="0" width="100%" cellpadding="4" cellspacing="0">
-<tr>
-  <td class="back" align="left">Page maintained by: <a href="mailto:luca.padovani@cs.unibo.it">Luca Padovani</a></td>
-  <td class="back" align="right"><a href="#top">top</a></td>
-</tr>
-</table>
-
-</body>
-
-</html>
-
diff --git a/helm/uwobo-panel/control.js b/helm/uwobo-panel/control.js
deleted file mode 100644 (file)
index cd04429..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-
-function getParam(name, def)
-{
-  var search = top.location.search;
-  search = search.slice(1);
-  var args = search.split("&");
-  var value = "-1";
-  for (var i = 0 ; i < args.length ; i++) {
-    var couple = args[i].split("=");
-    if (couple[0] == name) value = couple[1];
-  }
-  if (value == "-1") value = def;
-  return value;
-}
-
-function getInitialPort()
-{
-  return "68080";
-}
-
-function getInitialProcessorURL()
-{
-  return getParam("processorURL", "http://phd.cs.unibo.it:8080/helm/servlet/uwobo/");
-}
-
-function getInitialGetterURL()
-{
-  return getParam("getterURL", "http://phd.cs.unibo.it:8081/");
-}
-
-function getUwoboURL()
-{
-  return document.uwoboURL.elements[0].value;
-}
-
-function getGetterURL()
-{
-  return document.getterURL.elements[0].value;
-}
-
-function selectUwoboURL(ss)
-{
-  if (ss.selectedIndex == 0) {
-    document.uwoboURL.elements[0].value = "";
-  } else {
-    document.uwoboURL.elements[0].value = "http://" + ss.options[ss.selectedIndex].value + ":8080/helm/servlet/uwobo/";
-  }
-}
-
-function selectGetterURL(ss)
-{
-  if (ss.selectedIndex == 0) {
-    document.getterURL.elements[0].value = "";
-  } else {
-    document.getterURL.elements[0].value = "http://" + ss.options[ss.selectedIndex].value + ":8081/";
-  }
-}
-
-function getPredefinedStylesheetKey(i)
-{
-  var v = document.predefinedStylesheets.elements[0].options[i].value;
-  var va = v.split(",");
-  return va[0];
-}
-
-function getPredefinedStylesheetURI(i)
-{
-  var v = document.predefinedStylesheets.elements[0].options[i].value;
-  var va = v.split(",");
-  return va[1];
-}
-
-function getPredefinedStylesheetUseGetter(i)
-{
-  var v = document.predefinedStylesheets.elements[0].options[i].value;
-  var va = v.split(",");
-  return va[2];
-}
-
-function selectPredefinedStylesheet(ss)
-{
-  if (ss.selectedIndex == 0) {
-    document.stylesheetURI.elements[0].value = "";
-    document.stylesheetKey.elements[0].value = "";
-  } else {
-    document.stylesheetURI.elements[0].value = getPredefinedStylesheetURI(ss.selectedIndex);
-    document.stylesheetKey.elements[0].value = getPredefinedStylesheetKey(ss.selectedIndex);
-  }
-
-  document.loadUseGetter.elements[0].checked = getPredefinedStylesheetUseGetter(ss.selectedIndex) == "true" ? true : false;
-  document.loadEscape.elements[0].checked = true;
-}
-
-function getStylesheetURL()
-{
-  var s;
-
-  if (document.loadUseGetter.elements[0].checked) {
-    s = getGetterURL() + "getxslt?uri=" + document.stylesheetURI.elements[0].value;
-  } else {
-    s = document.stylesheetURI.elements[0].value;
-  }
-
-  if (document.loadEscape.elements[0].checked) s = escape(s);
-  
-  return s;
-}
-
-function loadStylesheet()
-{
-  top.result.location.replace(getUwoboURL() + "add?bind=" + document.stylesheetKey.elements[0].value + "," + getStylesheetURL());
-}
-
-function removeStylesheet()
-{
-  top.result.location.replace(getUwoboURL() + "remove?keys=" + document.stylesheetKey.elements[0].value);
-}
-
-function removeAllStylesheets()
-{
-  top.result.location.replace(getUwoboURL() + "remove");
-}
-
-function reloadStylesheet()
-{
-  top.result.location.replace(getUwoboURL() + "reload?keys=" + document.stylesheetKey.elements[0].value);
-}
-
-function loadAllPredefined()
-{
-  with (document.predefinedStylesheets.elements[0]) {
-    var i;
-    var request = "";
-
-    for (i = 1; i < length; i++)
-      request +=
-        (request == "" ? "" : "&") +
-        "bind=" + getPredefinedStylesheetKey(i) + "," +  escape((getPredefinedStylesheetUseGetter(i) == "true" ? (getGetterURL() + "getxslt?uri=") : "") + getPredefinedStylesheetURI(i));
-    top.result.location.replace(getUwoboURL() + "add?" + request);
-  }
-}
-
-function removeAllPredefined()
-{
-  with (document.predefinedStylesheets.elements[0]) {
-    var i;
-    var request = "";
-
-    for (i = 1; i < length; i++)
-      request += getPredefinedStylesheetKey(i) + (i == length - 1 ? "" : ",");
-    top.result.location.replace(getUwoboURL() + "remove?keys=" + request);
-  }
-}
-
-function applyStylesheets()
-{
-  var i = 0;
-  var keyList = document.keyList.elements[0].value.split(" ");
-
-  var url = getUwoboURL() + "apply?xmluri=";
-  
-  var sourceURL = "";
-
-  if (document.applyUseGetter.elements[0].checked)
-    sourceURL += getGetterURL() + "getxml?uri=";
-    
-  sourceURL += document.sourceDocument.elements[0].value;
-
-  if (document.escapeSource.elements[0].checked)
-    url += escape(sourceURL);
-  else
-    url += sourceURL;
-
-  url += "&keys=";
-  for (i = 0; i < keyList.length; i++) {
-    url += keyList[i];
-    if (i < keyList.length - 1) url += ",";
-  }
-
-  var paramList = document.parameters.elements[0].value.split(" ");
-  for (i = 0; i < paramList.length; i++)
-    if (paramList[i].length > 0) {
-      if (document.escapeParameters.elements[0].checked) {
-        var p = paramList[i].split("=");
-        url += "&param." + p[0] + "=" + escape(p[1]);
-      } else
-        url += "&param." + paramList[i];
-    }
-  
-  top.result.location.replace(url);
-}
diff --git a/helm/uwobo-panel/index.html b/helm/uwobo-panel/index.html
deleted file mode 100644 (file)
index caeebcf..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-
-<frameset rows="75%,*">
-  <frame src="control.html" name="control"/>
-  <frame src="welcome.html" name="result"/>
-</frameset>
-
-</html>
diff --git a/helm/uwobo-panel/welcome.html b/helm/uwobo-panel/welcome.html
deleted file mode 100644 (file)
index f6fbed4..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
-
-<body bgcolor="white">
-</body>
-
-</html>
diff --git a/helm/uwobo/.cvsignore b/helm/uwobo/.cvsignore
deleted file mode 100644 (file)
index 7a77a0e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-*.cmi
-*.cmo
-*.cmx
-*.cma
-*.cmxa
-uwobo
-uwobo.opt
diff --git a/helm/uwobo/.depend b/helm/uwobo/.depend
deleted file mode 100644 (file)
index 0f1df97..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-uwobo.cmo: uwobo_common.cmi uwobo_engine.cmi uwobo_logger.cmi \
-    uwobo_styles.cmi 
-uwobo.cmx: uwobo_common.cmx uwobo_engine.cmx uwobo_logger.cmx \
-    uwobo_styles.cmx 
-uwobo_common.cmo: uwobo_common.cmi 
-uwobo_common.cmx: uwobo_common.cmi 
-uwobo_engine.cmo: uwobo_common.cmi uwobo_logger.cmi uwobo_styles.cmi \
-    uwobo_engine.cmi 
-uwobo_engine.cmx: uwobo_common.cmx uwobo_logger.cmx uwobo_styles.cmx \
-    uwobo_engine.cmi 
-uwobo_logger.cmo: uwobo_logger.cmi 
-uwobo_logger.cmx: uwobo_logger.cmi 
-uwobo_styles.cmo: uwobo_common.cmi uwobo_logger.cmi uwobo_styles.cmi 
-uwobo_styles.cmx: uwobo_common.cmx uwobo_logger.cmx uwobo_styles.cmi 
-uwobo_engine.cmi: uwobo_common.cmi uwobo_logger.cmi uwobo_styles.cmi 
-uwobo_styles.cmi: uwobo_common.cmi uwobo_logger.cmi 
diff --git a/helm/uwobo/Makefile b/helm/uwobo/Makefile
deleted file mode 100644 (file)
index b3a989e..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-VERSION = 0.2.1
-DISTDIR = uwobo-$(VERSION)
-DISTTARBALL = $(DISTDIR).tar.gz
-REQUIRES = http gdome2 gdome2-xslt pcre unix netclient
-COMMONOPTS = -package "$(REQUIRES)" -pp camlp4o
-OCAMLFIND = ocamlfind
-OCAMLC = $(OCAMLFIND) ocamlc $(COMMONOPTS)
-OCAMLOPT = $(OCAMLFIND) ocamlopt $(COMMONOPTS)
-OCAMLDEP = $(OCAMLFIND) ocamldep $(COMMONOPTS)
-OCAMLDOC =     \
-       ocamldoc        \
-               $(shell $(OCAMLFIND) query -i-format http)      \
-               $(shell $(OCAMLFIND) query -i-format gdome2)    \
-               $(shell $(OCAMLFIND) query -i-format gdome2-xslt)       \
-               $(shell $(OCAMLFIND) query -i-format pcre)      \
-               $(shell $(OCAMLFIND) query -i-format unix)
-MODULES = uwobo_common uwobo_styles uwobo_logger uwobo_engine
-OBJS = $(patsubst %,%.cmo,$(MODULES))
-OBJSOPT = $(patsubst %,%.cmx,$(MODULES))
-
-all: byte
-byte: uwobo
-opt: uwobo.opt
-world: byte opt
-
-include .depend
-depend:
-       $(OCAMLDEP) *.ml *.mli > .depend
-
-%.cmi: %.mli
-       $(OCAMLC) -c $<
-%.cmo: %.ml %.cmi
-       $(OCAMLC) -c $<
-%.cmx: %.ml %.cmi
-       $(OCAMLOPT) -c $<
-uwobo.cmo: uwobo.ml
-       $(OCAMLC) -c $<
-uwobo.cmx: uwobo.ml
-       $(OCAMLOPT) -c $<
-uwobo: $(OBJS) uwobo.ml
-       $(OCAMLC) -linkpkg -o $@ $^
-uwobo.opt: $(OBJSOPT) uwobo.ml
-       $(OCAMLOPT) -linkpkg -o $@ $^
-
-uwobo.dot: *.ml *.mli
-       $(OCAMLDOC) -dot -o $@ $^
-
-distclean: clean
-clean:
-       rm -f *.cm[aiox] *.o uwobo{,.opt,.dot}
-dist: distclean depend
-       mkdir $(DISTDIR)/
-       cp      \
-               $(patsubst %, %.ml, $(MODULES)) \
-               $(patsubst %, %.mli, $(MODULES))        \
-               uwobo.ml        \
-               Makefile .depend        \
-               $(DISTDIR)/
-       tar cvzf $(DISTTARBALL) $(DISTDIR)/
-       rm -rf $(DISTDIR)/
-distcheck: $(DISTTARBALL)
-       if [ -d $(DISTDIR) ]; then rm -rf $(DISTDIR); else true; fi
-       tar xvzf $<
-       cd $(DISTDIR); make
-       rm -rf $(DISTDIR)
-
-.PHONY: all dist distclean distcheck byte opt world depend clean
-
diff --git a/helm/uwobo/log/.cvsignore b/helm/uwobo/log/.cvsignore
deleted file mode 100644 (file)
index 397b4a7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.log
diff --git a/helm/uwobo/uwobo.ml b/helm/uwobo/uwobo.ml
deleted file mode 100644 (file)
index 0a0294c..0000000
+++ /dev/null
@@ -1,523 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Printf;;
-open Uwobo_common;;
-
- (* debugging settings *)
-let debug = false ;;
-let debug_level = `Notice ;;
-let debug_print s = if debug then prerr_endline s ;;
-Http_common.debug := false ;;
-
-  (* other settings *)
-let daemon_name = "UWOBO OCaml" ;;
-let default_log_base_file = "log/uwobo" ;; (* relative to execution dir *)
-let log_extension = ".log" ;;
-let default_port = 58080 ;;
-let port_env_var = "UWOBO_PORT" ;;
-let log_env_var = "UWOBO_LOG_FILE" ;; (* The extension _pid.log will be added *)
-let default_media_type = "text/html" ;;
-let default_encoding = "utf8" ;;
-let port =
-  try
-    int_of_string (Sys.getenv port_env_var)
-  with
-  | Not_found -> default_port
-  | Failure "int_of_string" ->
-     prerr_endline "Warning: invalid port number" ;
-     exit (-1)
-;;
-let logfilename_of_port port =
- let basename =
-  try
-   Sys.getenv log_env_var
-  with
-   Not_found -> default_log_base_file
- in
-  basename ^ "_" ^ string_of_int port ^ log_extension
-;;
-let logfile = logfilename_of_port port;;
-let logfile_perm = 0o640 ;;
-
-let respond_html body outchan =
-  Http_daemon.respond ~body ~headers:["Content-Type", "text/html"] outchan
-;;
-
-  (** perform an 'action' that can be applied to a list of keys or, if no keys
-  was given, to all keys *)
-let act_on_keys
-  keys_param styles logger per_key_action all_keys_action all_keys logmsg
-=
-  let keys =
-    try
-      Pcre.split ~pat:"," keys_param
-    with Http_types.Param_not_found _ -> []
-  in
-  match keys with
-  | [] -> (* no key provided, act on all stylesheets *)
-      logger#log (sprintf "%s all stylesheets (keys = %s) ..."
-        logmsg (String.concat ", " all_keys));
-      (try all_keys_action () with e -> logger#log (Printexc.to_string e));
-      logger#log (sprintf "Done! (all stylesheets)")
-  | keys ->
-      List.iter
-        (fun key -> (* act on a single stylesheet *)
-          logger#log (sprintf "%s stylesheet %s" logmsg key);
-          (try per_key_action key with e -> logger#log (Printexc.to_string e));
-          logger#log (sprintf "Done! (stylesheet %s)" key))
-        keys
-;;
-
-  (** parse parameters for '/apply' action *)
-let parse_apply_params =
-  let is_global_param x = Pcre.pmatch ~pat:"^param(\\.[^.]+){1}$" x in
-  let is_local_param x = Pcre.pmatch ~pat:"^param(\\.[^.]+){2}$" x in
-  let is_property x = Pcre.pmatch ~pat:"^prop\\.[^.]+$" x in
-  List.fold_left
-    (fun (old_params, old_properties) (name, value) ->
-      match name with
-      | name when is_global_param name ->
-          let name = Pcre.replace ~pat:"^param\\." name in
-          ((fun x -> (old_params x) @ [name, value]), old_properties)
-      | name when is_local_param name ->
-          let pieces = Pcre.extract ~pat:"^param\\.([^.]+)\\.(.*)" name in
-          let (key, name) = (pieces.(1), pieces.(2)) in
-          ((function
-            | x when x = key -> [name, value] @ (old_params x)
-            | x -> old_params x),
-           old_properties)
-      | name when is_property name ->
-          let name = Pcre.replace ~pat:"^prop\\." name in
-          (old_params, ((name, value) :: old_properties))
-      | _ -> (old_params, old_properties))
-    ((fun _ -> []), []) (* no parameters, no properties *)
-;;
-
-  (** Parse libxslt's message modes for error and debugging messages. Default is
-  to ignore mesages of both kind *)
-let parse_libxslt_msgs_mode (req: Http_types.request) =
-  ((try
-    (match req#param "errormode" with
-    | s when String.lowercase s = "ignore" -> LibXsltMsgIgnore
-    | s when String.lowercase s = "comment" -> LibXsltMsgComment
-    | s when String.lowercase s = "embed" -> LibXsltMsgEmbed
-    | err ->
-        raise (Uwobo_failure
-          (sprintf
-            "Unknown value '%s' for parameter '%s', use one of '%s' or '%s'"
-            err "errormode" "ignore" "comment")))
-  with Http_types.Param_not_found _ -> LibXsltMsgIgnore),
-  (try
-    (match req#param "debugmode" with
-    | s when String.lowercase s = "ignore" -> LibXsltMsgIgnore
-    | s when String.lowercase s = "comment" -> LibXsltMsgComment
-    | s when String.lowercase s = "embed" -> LibXsltMsgEmbed
-    | err ->
-        raise (Uwobo_failure
-          (sprintf
-            "Unknown value '%s' for parameter '%s', use one of '%s' or '%s'"
-            err "debugmode" "ignore" "comment")))
-  with Http_types.Param_not_found _ -> LibXsltMsgIgnore))
-;;
-
-  (** send ~cmd (without trailing "\n"!) through ~cmd_pipe, then wait for answer
-  on ~res_pipe (with a timeout of 60 seconds) and send over outchan data
-  received from ~res_pipe *)
-let short_circuit_grandfather_and_client ~cmd ~cmd_pipe ~res_pipe outchan =
-(*   debug_print (sprintf "Sending command '%s' to grandparent ..." cmd); *)
-  output_string cmd_pipe (cmd ^ "\n");  (* send command to grandfather *)
-  flush cmd_pipe;
-  let res_pipe_fd = Unix.descr_of_in_channel res_pipe in
-  let (read_fds, _, _) =  (* wait for an answer *)
-    Unix.select [res_pipe_fd] [] [] 60.0
-  in
-  (match read_fds with
-  | [fd] when fd = res_pipe_fd -> (* send answer to http client *)
-      Http_daemon.send_basic_headers ~code:200 outchan;
-      Http_daemon.send_header "Content-Type" "text/html" outchan;
-      Http_daemon.send_CRLF outchan;
-      (try
-        while true do
-          output_string outchan ((input_line res_pipe) ^ "\n")
-        done
-      with End_of_file -> flush outchan)
-  | _ ->  (* no answer received from grandfather *)
-      return_error "Timeout!" outchan)
-;;
-
-let (add_cmd_RE, remove_cmd_RE, reload_cmd_RE, kill_cmd_RE) =
-  (Pcre.regexp "^add ", Pcre.regexp "^remove ", Pcre.regexp "^reload ",
-   Pcre.regexp "^kill")
-;;
-
-  (** raised by child processes when HTTP daemon process have to be restarted *)
-exception Restart_HTTP_daemon ;;
-
-  (** log a list of libxslt's messages using a processing logger *)
-let log_libxslt_msgs logger libxslt_logger =
-  List.iter
-    (function
-      | (LibXsltErrorMsg _) as msg -> logger#logBold (string_of_xslt_msg msg)
-      | (LibXsltDebugMsg _) as msg -> logger#logEmph (string_of_xslt_msg msg))
-    libxslt_logger#msgs
-;;
-
-  (* LibXSLT logger *)
-let veillogger = new Uwobo_common.libXsltLogger ;;
-
-  (* start_new_session cmd_pipe_exit res_pipe_entrance outchan port logfile
-  @param cmd_pipe Pipe to be closed before forking
-  @param res_pipe Pipe to be closed before forking
-  @param outchan  To be closed before forking
-  @param port The port to be used
-  @param logfile The logfile to redirect the stdout and sterr to
-  *)
-  (* It can raise Failure "Connection refused" *)
-  (* It can raise Failure "Port already in use" *)
-let start_new_session cmd_pipe res_pipe outchan port logfile =
- let environment =
-  (* Here I am loosing the current value of port_env_var; *)
-  (* this should not matter                               *)
-  Unix.putenv port_env_var (string_of_int port) ;
-  Unix.environment ()
- in
-  (* Let's check that the port is free *)
-  (try
-    ignore
-     (Http_client.Convenience.http_head_message
-       ("http://127.0.0.1:" ^ string_of_int port ^ "/help")) ;
-    raise (Failure "Port already in use")
-   with
-    Failure "Connection refused" -> ()
-  ) ;
-  match Unix.fork () with
-     0 ->
-       Unix.handle_unix_error
-        (function () ->
-          (* 1. We close all the open pipes to avoid duplicating them *)
-          Unix.close (Unix.descr_of_out_channel cmd_pipe) ;
-          Unix.close (Unix.descr_of_in_channel res_pipe) ;
-          Unix.close (Unix.descr_of_out_channel outchan) ;
-          (* 2. We redirect stdout and stderr to the logfile *)
-          Unix.close Unix.stdout ;
-          assert
-           (Unix.openfile logfile [Unix.O_WRONLY ; Unix.O_APPEND ; Unix.O_CREAT]
-             0o664 = Unix.stdout) ;
-          Unix.close Unix.stderr ;
-          assert
-           (Unix.openfile logfile [Unix.O_WRONLY ; Unix.O_APPEND ; Unix.O_CREAT]
-             0o664 = Unix.stderr) ;
-          prerr_endline "***** Starting a new session" ;
-          (* 3. We exec a new copy of uwobo *)
-          Unix.execve Sys.executable_name [||] environment ; 
-          (* It should never reach this point *)
-          assert false
-        ) ()
-   | child when child > 0 ->
-      (* let's check if the new UWOBO started correctly *)
-      Unix.sleep 5 ;
-      (* It can raise Failure "Connection refused" *)
-      ignore
-        (Http_client.Convenience.http_head_message
-          ("http://127.0.0.1:" ^ string_of_int port ^ "/help"))
-   | _ -> failwith "Can't fork :-("
-;;
-
-  (* request handler action
-  @param syslogger Uwobo_logger.sysLogger instance used for logginf
-  @param styles Uwobo_styles.styles instance which keeps the stylesheets list
-  @param cmd_pipe output _channel_ used to _write_ update messages
-  @param res_pipe input _channel_ used to _read_ grandparent results
-  @param req http request instance
-  @param outchan output channel connected to http client
-  *)
-let callback
-  ~syslogger ~styles ~cmd_pipe ~res_pipe () (req: Http_types.request) outchan
-  =
-  try
-    syslogger#log `Notice (sprintf "Connection from %s" req#clientAddr);
-    syslogger#log `Debug (sprintf "Received request: %s" req#path);
-    (match req#path with
-    | "/add" ->
-        (let bindings = req#paramAll "bind" in
-        if bindings = [] then
-          return_error "No [key,stylesheet] binding provided" outchan
-        else begin
-          let cmd = sprintf "add %s" (String.concat ";" bindings) in
-          short_circuit_grandfather_and_client ~cmd ~cmd_pipe ~res_pipe outchan
-        end)
-    | "/kill" ->
-        let logger = new Uwobo_logger.processingLogger () in
-         logger#log "Exiting" ;
-         respond_html logger#asHtml outchan ;
-         let cmd = "kill" in
-          short_circuit_grandfather_and_client ~cmd ~cmd_pipe ~res_pipe outchan
-    | "/newsession" ->
-        let logger = new Uwobo_logger.processingLogger () in
-        let port = int_of_string (req#param "port") in
-        let logfile = logfilename_of_port port in
-        (try
-          start_new_session cmd_pipe res_pipe outchan port logfile ;
-          logger#log (sprintf "New session started: port = %d" port) ;
-          respond_html logger#asHtml outchan
-         with
-            Failure "int_of_string" ->
-             logger#log (sprintf "Invalid port number") ;
-             respond_html logger#asHtml outchan
-          | Failure "Port already in use" ->
-             Uwobo_common.return_error "port already in use" outchan
-          | Failure "Connection refused" ->
-             let log = ref [] in
-              (try
-                let ch = open_in logfile in
-                 while true do log := (input_line ch ^ "\n") :: !log ; done
-               with
-                  Sys_error _
-                | End_of_file -> ()
-              ) ;
-              let rec get_last_lines acc =
-               function
-                  (n,he::tl) when n > 0 ->
-                    get_last_lines (he ^ "<br />" ^ acc) (n-1,tl)
-                | _ -> acc
-              in
-               (* we just show the last 10 lines of the log file *)
-               let msg =
-                (if List.length !log > 0 then "<br />...<br />" else "<br />") ^
-                 get_last_lines "" (10,!log)
-               in
-                Uwobo_common.return_error "daemon not initialized"
-                 ~body:msg outchan)
-    | "/remove" ->
-          let cmd = sprintf "remove %s" (req#param "keys") in
-          short_circuit_grandfather_and_client ~cmd ~cmd_pipe ~res_pipe outchan
-    | "/reload" ->
-          let cmd = sprintf "reload %s" (req#param "keys") in
-          short_circuit_grandfather_and_client ~cmd ~cmd_pipe ~res_pipe outchan
-    | "/list" ->
-        (let logger = new Uwobo_logger.processingLogger () in
-        (match styles#list with
-        | [] -> logger#log "No stylesheets loaded (yet)!"
-        | l ->
-            logger#log "Stylesheets list:";
-            List.iter (fun s -> logger#log s) l);
-        respond_html logger#asHtml outchan)
-    | "/apply" ->
-        let logger = new Uwobo_logger.processingLogger () in
-        veillogger#clearMsgs;
-        let xmluri = req#param "xmluri" in
-        let keys = Pcre.split ~pat:"," (req#param "keys") in
-        (* notation: "local" parameters are those defined on a per-stylesheet
-        pasis (i.e. param.key.param=value), "global" parameters are those
-        defined for all stylesheets (i.e. param.param=value) *)
-        let (params, props) = parse_apply_params req#params in
-        let (libxslt_errormode, libxslt_debugmode) =
-          parse_libxslt_msgs_mode req
-        in
-        syslogger#log `Debug (sprintf "Parsing input document %s ..." xmluri);
-        let domImpl = Gdome.domImplementation () in
-        let input = domImpl#createDocumentFromURI ~uri:xmluri () in
-        syslogger#log `Debug "Applying stylesheet chain ...";
-        (try
-          let (write_result, media_type, encoding) = (* out_channel -> unit *)
-            Uwobo_engine.apply
-              ~logger:syslogger ~styles ~keys ~params ~props ~veillogger
-              ~errormode:libxslt_errormode ~debugmode:libxslt_debugmode
-              input
-          in
-          let content_type = (* value of Content-Type HTTP response header *)
-            sprintf "%s; charset=%s"
-              (match media_type with None -> default_media_type | Some t -> t)
-              (match encoding with None -> default_encoding | Some e -> e)
-          in
-          syslogger#log `Debug
-            (sprintf "sending output to client (Content-Type: %s)...."
-              content_type);
-          Http_daemon.send_basic_headers ~code:200 outchan;
-          Http_daemon.send_header "Content-Type" content_type outchan;
-          Http_daemon.send_CRLF outchan;
-          write_result outchan
-        with Uwobo_failure errmsg ->
-          return_error
-            ("Stylesheet chain application failed: " ^ errmsg)
-            ~body: ("<h2>LibXSLT's messages:</h2>" ^
-              String.concat "<br />\n"
-                (List.map string_of_xslt_msg veillogger#msgs))
-            outchan)
-    | "/help" -> respond_html usage_string outchan
-    | invalid_request ->
-        Http_daemon.respond_error ~status:(`Client_error `Bad_request) outchan);
-    syslogger#log `Debug (sprintf "%s done!" req#path);
-  with
-  | Http_types.Param_not_found attr_name ->
-      bad_request (sprintf "Parameter '%s' is missing" attr_name) outchan
-  | exc ->
-      return_error ("Uncaught exception: " ^ (Printexc.to_string exc)) outchan
-;;
-
-  (* UWOBO's startup *)
-let main () =
-    (* (1) system logger *)
-  let logger_outchan =
-   debug_print (sprintf "Logging to file %s" logfile);
-   open_out_gen [Open_wronly; Open_append; Open_creat] logfile_perm logfile
-  in
-  let syslogger =
-    new Uwobo_logger.sysLogger ~level:debug_level ~outchan:logger_outchan ()
-  in
-  syslogger#enable;
-    (* (2) stylesheets list *)
-  let styles = new Uwobo_styles.styles in
-    (* (3) clean up actions *)
-  let last_process = ref true in
-  let http_child = ref None in
-  let die_nice () = (** at_exit callback *)
-    if !last_process then begin
-      (match !http_child with
-      | None -> ()
-      | Some pid -> Unix.kill pid Sys.sigterm);
-      syslogger#log `Notice (sprintf "%s is terminating, bye!" daemon_name);
-      syslogger#disable;
-      close_out logger_outchan
-    end
-  in
-  at_exit die_nice;
-  ignore (Sys.signal Sys.sigterm
-    (Sys.Signal_handle (fun _ -> raise Sys.Break)));
-  syslogger#log `Notice
-    (sprintf "%s started and listening on port %d" daemon_name port);
-  syslogger#log `Notice (sprintf "current directory is %s" (Sys.getcwd ()));
-  Unix.putenv "http_proxy" "";  (* reset http_proxy to avoid libxslt problems *)
-  while true do
-    let (cmd_pipe_exit, cmd_pipe_entrance) = Unix.pipe () in
-    let (res_pipe_exit, res_pipe_entrance) = Unix.pipe () in
-    match Unix.fork () with
-    | child when child > 0 -> (* (4) parent: listen on cmd pipe for updates *)
-        http_child := Some child;
-        let stop_http_daemon () =  (* kill child *)
-          debug_print (sprintf "UWOBOmaster: killing pid %d" child);
-          Unix.kill child Sys.sigterm;  (* kill child ... *)
-          ignore (Unix.waitpid [] child);  (* ... and its zombie *)
-        in
-        Unix.close cmd_pipe_entrance;
-        Unix.close res_pipe_exit;
-        let cmd_pipe = Unix.in_channel_of_descr cmd_pipe_exit in
-        let res_pipe = Unix.out_channel_of_descr res_pipe_entrance in
-        (try
-          while true do
-            (* INVARIANT: 'Restart_HTTP_daemon' exception is raised only after
-            child process has been killed *)
-            debug_print "UWOBOmaster: waiting for commands ...";
-            let cmd = input_line cmd_pipe in
-            debug_print (sprintf "UWOBOmaster: received %s command" cmd);
-            (match cmd with  (* command from grandchild *)
-            | "test" ->
-                stop_http_daemon ();
-                output_string res_pipe "UWOBOmaster: Hello, world!\n";
-                flush res_pipe;
-                raise Restart_HTTP_daemon
-            | line when Pcre.pmatch ~rex:kill_cmd_RE line -> (* /kill *)
-                exit 0
-            | line when Pcre.pmatch ~rex:add_cmd_RE line -> (* /add *)
-                let bindings =
-                  Pcre.split ~pat:";" (Pcre.replace ~rex:add_cmd_RE line)
-                in
-                stop_http_daemon ();
-                let logger = new Uwobo_logger.processingLogger () in
-                List.iter
-                  (fun binding -> (* add a <key, stylesheet> binding *)
-                    let pieces = Pcre.split ~pat:"," binding in
-                    match pieces with
-                    | [key; style] ->
-                        logger#log (sprintf "adding binding <%s,%s>" key style);
-                        veillogger#clearMsgs;
-                        (try
-                          veillogger#clearMsgs;
-                          styles#add key style;
-                          log_libxslt_msgs logger veillogger;
-                        with e ->
-                          logger#log (Printexc.to_string e))
-                    | _ -> logger#log (sprintf "invalid binding %s" binding))
-                  bindings;
-                output_string res_pipe logger#asHtml;
-                flush res_pipe;
-                raise Restart_HTTP_daemon
-            | line when Pcre.pmatch ~rex:remove_cmd_RE line ->  (* /remove *)
-                stop_http_daemon ();
-                let arg = Pcre.replace ~rex:remove_cmd_RE line in
-                let logger = new Uwobo_logger.processingLogger () in
-                veillogger#clearMsgs;
-                act_on_keys
-                  arg styles logger
-                  styles#remove (fun () -> styles#removeAll) styles#keys
-                  "removing";
-                log_libxslt_msgs logger veillogger;
-                output_string res_pipe (logger#asHtml);
-                raise Restart_HTTP_daemon
-            | line when Pcre.pmatch ~rex:reload_cmd_RE line ->  (* /reload *)
-                stop_http_daemon ();
-                let arg = Pcre.replace ~rex:reload_cmd_RE line in
-                let logger = new Uwobo_logger.processingLogger () in
-                veillogger#clearMsgs;
-                act_on_keys
-                  arg styles logger
-                  styles#reload (fun () -> styles#reloadAll) styles#keys
-                  "reloading";
-                output_string res_pipe (logger#asHtml);
-                raise Restart_HTTP_daemon
-            | cmd ->  (* invalid interprocess command received *)
-                syslogger#log `Warning
-                  (sprintf "Ignoring invalid interprocess command: '%s'" cmd))
-          done
-        with Restart_HTTP_daemon ->
-          close_in cmd_pipe;  (* these calls close also fds *)
-          close_out res_pipe;)
-    | 0 ->  (* (5) child: serve http requests *)
-        Unix.close cmd_pipe_exit;
-        Unix.close res_pipe_entrance;
-        last_process := false;
-        let cmd_pipe = Unix.out_channel_of_descr cmd_pipe_entrance in
-        let res_pipe = Unix.in_channel_of_descr res_pipe_exit in
-        debug_print (sprintf "Starting HTTP daemon on port %d ..." port);
-          (* next invocation doesn't return, process will keep on serving HTTP
-          requests until it will get killed by father *)
-        Http_daemon.start'~port ~mode:`Fork
-          (callback ~syslogger ~styles ~cmd_pipe ~res_pipe ())
-    | _ (* < 0 *) ->  (* fork failed :-((( *)
-        failwith "Can't fork :-("
-  done
-;;
-
-  (* daemon initialization *)
-try
-  Sys.catch_break true;
-  main ()
-with Sys.Break -> ()  (* 'die_nice' registered with at_exit *)
-;;
-
diff --git a/helm/uwobo/uwobo_common.ml b/helm/uwobo/uwobo_common.ml
deleted file mode 100644 (file)
index 84ba199..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Printf ;;
-
-exception Uwobo_failure of string ;;
-
-let uwobo_namespace = "http://helm.cs.unibo.it/uwobo" ;;
-let xsl_namespace = "http://helm.cs.unibo.it/uwobo" ;;
-
-let supported_properties = [
-  "cdata-section-elements";
-  "doctype-public";
-  "doctype-system";
-  "encoding";
-  "indent";
-  "media-type";
-  "method";
-  "omit-xml-declaration";
-  "standalone";
-  "version"
-]
-
-let is_supported_property name = List.mem name supported_properties
-
-let version = "0.2.1" ;;
-
-let usage_string =
-  sprintf
-"
-<html>
-  <head>
-    <title>UWOBO's help message</title>
-  </head>
-  <body>
-    <h1>UWOBO (version: %s)</h1>
-    <h2>Information</h2>
-    Version: %s
-    <h2>Usage</h2>
-    <p>
-    Usage: <kbd>http://hostname:uwoboport/</kbd><em>command</em>
-    </p>
-    <p>
-    Available commands:
-    </p>
-    <p>
-      <b><kbd>help</kbd></b><br />
-      display this help message
-    </p>
-    <p>
-      <b><kbd>newsession?port=p</kbd></b><br />
-      starts a new daemon on a given port <em>p</em>
-    </p>
-    <p>
-      <b><kbd>kill</kbd></b><br />
-      kills the daemon. The log file is mantained.
-    </p>
-    <p>
-      <b><kbd>add?bind=key,uri[&bind=key,uri[&...]]</kbd></b><br />
-      load a new stylesheet, specified by <em>uri</em>, and bind it to key
-          <em>key</em>
-    </p>
-    <p>
-      <b><kbd>remove[?keys=key1,key2,...]</kbd></b><br />
-      unload stylesheets specified by <em>key1, key2, ...</em> or all
-          stylesheets if no key was given
-    </p>
-    <p>
-      <b><kbd>reload[?keys=key1,key2,...]</kbd></b><br />
-      reload stylesheets specified by <em>key1, key2, ...</em> or all
-          stylesheets if no key was given
-    </p>
-    <p>
-      <b><kbd>list</kbd></b><br />
-      return a list of loaded stylesheets
-    </p>
-    <p>
-      <b><kbd>apply?xmluri=uri&keys=key1,key2,...[&errormode={ignore|comment|embed}][&debugmode={ignore|comment|embed}][&param.name=value[&param.name=value[&...]]][&param.key.name=value[&param.key.name=value[&...]]][&prop.name[=value][&prop.name[=value][&...]]]</kbd></b><br />
-      apply a chain of stylesheets, specified by <em>key1, key2, ...</em>, to an
-      input document, specified by <em>uri</em>.<br />
-      Error and debugging modes could be ste to three different values.
-      <em>ignore</em> means that LibXSLT messages are ignored; <em>comment</em>
-      meanst that LibXSLT messages are embedded in the result document inside an
-      XML like comment; <em>embed</em> means that LibXSLT messages are embedded
-      at the beginning of the result document (as childs of the root node) in
-      XML elements in the UWOBO namespace<br />
-      Additional parameters can be set for each stylesheet application: global
-      parameters (i.e. parameters passed to all stylesheets) are set using
-      <em>param.name=value</em> syntax, per stylesheet parameters are set using
-      <em>param.key.name=value</em> where <em>key</em> is the key of a loaded
-      stylesheet.<br />
-      Properties of the final chain output can be set too: valueless properties
-      can be set using <em>prop.name</em> syntax, others can be set using
-      <em>prop.name=value</em> syntax.<br />
-      Current supported properties are: %s.
-    </p>
-  </body>
-</html>
-"
-  version version
-  (String.concat ", " supported_properties) (* supported properties *)
-;;
-
-let pp_error =
-  sprintf
-    "<html><body><span style=\"color:red\">Error: %s</span>%s</body></html>"
-;;
-let return_error msg ?(body = "") outchan =
-  Http_daemon.respond ~body:(pp_error msg body) outchan;;
-let bad_request body outchan =
-  Http_daemon.respond_error ~code:400 ~body outchan
-;;
-
-  (** {2 LibXSLT logging} *)
-
-type xslt_msg =
-  | LibXsltErrorMsg of string
-  | LibXsltDebugMsg of string
-;;
-
-let string_of_xslt_msg = function
-  | LibXsltErrorMsg msg -> "LibXSLT ERROR: " ^ msg
-  | LibXsltDebugMsg msg -> "LibXSLT DEBUG: " ^ msg
-;;
-
-type xslt_msg_mode =
-  | LibXsltMsgIgnore
-  | LibXsltMsgComment
-  | LibXsltMsgEmbed
-;;
-
-class libXsltLogger =
-  let is_libxslt_error = function LibXsltErrorMsg _ -> true | _ -> false in
-  let is_libxslt_debug = function LibXsltDebugMsg _ -> true | _ -> false in
-  let flatten_libxslt_msg = function
-    | LibXsltErrorMsg msg -> msg
-    | LibXsltDebugMsg msg -> msg
-  in
-  object (self)
-
-    initializer
-      Gdome_xslt.setErrorCallback
-        (Some (fun msg -> self#appendMsg (LibXsltErrorMsg msg)));
-      Gdome_xslt.setDebugCallback
-        (Some (fun msg -> self#appendMsg (LibXsltDebugMsg msg)))
-
-    val mutable libXsltMsgs = []  (** libxslt's error and debugging messages *)
-
-      (* libxslt's error and debugging messages handling *)
-
-    method private appendMsg msg = libXsltMsgs <- msg :: libXsltMsgs
-
-    method clearMsgs = libXsltMsgs <- []
-    method clearErrorMsgs =
-      libXsltMsgs <- List.filter is_libxslt_debug libXsltMsgs
-    method clearDebugMsgs =
-      libXsltMsgs <- List.filter is_libxslt_error libXsltMsgs
-
-    method msgs = libXsltMsgs
-    method errorMsgs =
-      List.map flatten_libxslt_msg (List.filter is_libxslt_error libXsltMsgs)
-    method debugMsgs =
-      List.map flatten_libxslt_msg (List.filter is_libxslt_debug libXsltMsgs)
-
-  end
-;;
-
diff --git a/helm/uwobo/uwobo_common.mli b/helm/uwobo/uwobo_common.mli
deleted file mode 100644 (file)
index 9bd90c5..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-exception Uwobo_failure of string
-
-  (** XML namespace of UWOBO generated XML elements *)
-val uwobo_namespace: string
-
-val supported_properties: string list
-val is_supported_property: string -> bool
-
-val version: string (** version *)
-val usage_string: string  (** HTTP GET usage string *)
-
-  (** return an ok (200) http response, which display in html an error message.
-  Error title is reported inside an h1 tag; error body, if given, follows *)
-val return_error: string -> ?body: string -> out_channel -> unit
-  (** return a 400 (bad request) http response *)
-val bad_request: string -> out_channel -> unit
-
-  (** {2 LibXSLT logging} *)
-
-  (** libxslt's message *)
-type xslt_msg =
-  | LibXsltErrorMsg of string   (** libxslt's error messages *)
-  | LibXsltDebugMsg of string   (** libxslt's debugging messages *)
-
-  (** pretty print a xslt_msg *)
-val string_of_xslt_msg: xslt_msg -> string
-
-  (** libxslt's message reporting mode. That is: how to report libxslt's
-  messages during apply method *)
-type xslt_msg_mode =
-  | LibXsltMsgIgnore    (** Ignore some kind of messages *)
-  | LibXsltMsgComment   (** Embed in XML comments some kind of messages *)
-  | LibXsltMsgEmbed     (** Embed in XML elements some kind of messages *)
-
-class libXsltLogger:
-  object
-
-    method clearMsgs: unit
-    method clearErrorMsgs: unit
-    method clearDebugMsgs: unit
-
-    method msgs: xslt_msg list
-    method errorMsgs: string list
-    method debugMsgs: string list
-
-  end
-
diff --git a/helm/uwobo/uwobo_engine.ml b/helm/uwobo/uwobo_engine.ml
deleted file mode 100644 (file)
index 03a3b42..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Printf;;
-open Uwobo_common;;
-
-  (** set this to true and uwobo will save transformation's intermediate results
-  in /tmp/uwobo_intermediate_<seqno>_<pid>.xml *)
-let save_intermediate_results = false;;
-
-let xslNS = Gdome.domString "http://www.w3.org/1999/XSL/Transform"
-let outputS = Gdome.domString "output"
-
-  (** given a Gdome.document representing an XSLT stylesheet and an output
-  property return 'Some value' where 'value' is the property value, or None if
-  it's not defined *)
-let get_property name (document: Gdome.document) =
-  let node_list = document#getElementsByTagNameNS xslNS outputS in
-  match node_list#item 0 with
-  | None -> None
-  | Some node ->
-      let element = new Gdome.element_of_node node in
-      let domName = Gdome.domString name in
-      if element#hasAttribute domName then
-        Some (element#getAttribute domName)#to_string
-      else
-        None
-;;
-
-let namespaceURI = Some (Gdome.domString Uwobo_common.uwobo_namespace) ;;
-
-  (** output type wrt adding of debugging/error messages *)
-type outputType =
-  | XmlOutput of Gdome.node
-  | TextPlainOutput of Gdome.text
-  | NoOutput
-;;
-
-exception Found of int ;;
-
-  (** add debugging and/or error messages to a Gdome document. Handle three
-  distinct cases: (1) output contains an XML tree, (2) output contains only one
-  text node, (3) output contains no data.
-  If output contains an XML tree then users wishes are preserved and messages
-  are either not included or included as comments or included as XML ndoes.
-  If output contains only a text node comments are either not included or
-  included at the beginning of the textual output.
-  If output contains no data (i.e. DOM superroot node with no element or text
-  children) messages are embedded as XML comments or not embedded at all *)
-let add_msgs ~errormode ~debugmode ~msgs (doc: Gdome.document) =
-  let getOutputType (doc: Gdome.document) =
-    let children = doc#get_childNodes in
-    let len = children#get_length in
-    let rec find_element i =
-      if i > len then
-        raise Not_found
-      else
-        (match children#item i with
-        | Some node when node#get_nodeType = GdomeNodeTypeT.ELEMENT_NODE ->
-            XmlOutput node
-        | _ -> find_element (i + 1))
-    in
-    let rec find_text i =
-      if i > len then
-        raise Not_found
-      else
-        (match children#item i with
-        | Some node when node#get_nodeType = GdomeNodeTypeT.TEXT_NODE ->
-            TextPlainOutput (new Gdome.text_of_node node)
-        | _ -> find_element (i + 1))
-    in
-    if len = 0 then
-      NoOutput
-    else
-      (try find_element 0 with Not_found ->
-        (try find_text 0 with Not_found -> NoOutput))
-  in
-  match getOutputType (doc :> Gdome.document) with
-  | XmlOutput node ->
-    let add_generic_msg mode build tagname =
-      (match mode with
-      | LibXsltMsgIgnore -> (fun msg -> ())
-      | LibXsltMsgComment ->
-          (fun msg ->
-(*                 let contents = string_of_xslt_msg (build msg) ^ "<br />" in *)
-            let contents = string_of_xslt_msg (build msg) in
-            ignore (node#insertBefore
-              ~newChild:(doc#createComment
-                (Gdome.domString contents) :> Gdome.node)
-              ~refChild:node#get_firstChild))
-      | LibXsltMsgEmbed ->
-          (fun msg ->
-(*                 let contents = string_of_xslt_msg (build msg) ^ "<br />" in *)
-            let contents = string_of_xslt_msg (build msg) in
-            let element =
-              doc#createElementNS
-                ~namespaceURI ~qualifiedName:(Gdome.domString tagname)
-            in
-            ignore (element#appendChild
-              (doc#createTextNode
-                ~data:(Gdome.domString contents) :> Gdome.node));
-            ignore (node#insertBefore
-              ~newChild:(element :> Gdome.node)
-              ~refChild:node#get_firstChild)))
-    in
-    let add_error_msg =
-      add_generic_msg
-        errormode (fun msg -> LibXsltErrorMsg msg) "uwobo:error"
-    in
-    let add_debug_msg =
-      add_generic_msg
-        debugmode (fun msg -> LibXsltDebugMsg msg) "uwobo:debug"
-    in
-    List.iter
-      (function
-        | LibXsltErrorMsg msg -> add_error_msg msg
-        | LibXsltDebugMsg msg -> add_debug_msg msg)
-      (List.rev msgs) (* because each msg is added as 1st children *)
-| TextPlainOutput text ->
-    let add_generic_msg mode build =
-      (match mode with
-      | LibXsltMsgIgnore -> (fun _ -> ())
-      | LibXsltMsgComment | LibXsltMsgEmbed ->
-          (fun msg ->
-            text#insertData ~offset:0
-              ~arg:(Gdome.domString
-                (string_of_xslt_msg (build msg) ^ "\n"))))
-    in
-    let add_error_msg =
-      add_generic_msg errormode (fun msg -> LibXsltErrorMsg msg)
-    in
-    let add_debug_msg =
-      add_generic_msg debugmode (fun msg -> LibXsltDebugMsg msg)
-    in
-    List.iter
-      (function
-        | LibXsltErrorMsg msg -> add_error_msg msg
-        | LibXsltDebugMsg msg -> add_debug_msg msg)
-      (List.rev msgs) (* because each msg is added as 1st children *)
-| NoOutput ->
-    let add_generic_msg mode build =
-      (match mode with
-      | LibXsltMsgIgnore -> (fun _ -> ())
-      | LibXsltMsgComment | LibXsltMsgEmbed ->
-          (fun msg ->
-            let comment_node =
-              (* use comments anyway because text nodes aren't allowed in DOM as
-              superroot children *)
-              doc#createComment
-                (Gdome.domString (string_of_xslt_msg (build msg)))
-            in
-            ignore (doc#insertBefore ~newChild:(comment_node :> Gdome.node)
-              ~refChild:doc#get_firstChild)))
-    in
-    let add_error_msg =
-      add_generic_msg errormode (fun msg -> LibXsltErrorMsg msg)
-    in
-    let add_debug_msg =
-      add_generic_msg debugmode (fun msg -> LibXsltDebugMsg msg)
-    in
-    List.iter
-      (function
-        | LibXsltErrorMsg msg -> add_error_msg msg
-        | LibXsltDebugMsg msg -> add_debug_msg msg)
-      (List.rev msgs) (* because each msg is added as 1st children *)
-;;
-
-let apply
-  ~(logger: Uwobo_logger.sysLogger)
-  ~(styles: Uwobo_styles.styles)
-  ~keys ~params ~props
-  ~(veillogger: Uwobo_common.libXsltLogger)
-  ?(errormode = LibXsltMsgIgnore) ?(debugmode = LibXsltMsgIgnore)
-  input
-  =
-    (* "p_" prefix means "processed" *)
-  let (p_stylesheets,last_stylesheet) = styles#get keys props logger in
-  logger#log `Debug "Creating input document ...";
-  let intermediate_results_seqno = ref 0 in
-  let result = (* Gdome.document *)
-    List.fold_left
-      (fun source (key, stylesheet) ->
-        logger#log `Debug (sprintf "Applying stylesheet %s ..." key);
-        try
-          let params =
-            List.map
-             (fun (key,value) ->
-               let quoted_value =
-                if String.contains value '\'' then
-                 if String.contains value '"' then
-                  raise
-                   (Failure
-                     ("A parameter value can not contain both single and " ^
-                      "double quotes, since it must be a valid XPath string " ^
-                      "literal"))
-                 else
-                  "\"" ^ value ^ "\""
-                else
-                 "'" ^ value ^ "'"
-               in
-                (key,quoted_value)
-             ) (params key)
-          in
-          logger#log `Debug
-            (sprintf "Gdome_xslt.applyStylesheet params=%s"
-              (String.concat ", " (List.map (fun (k,v) -> k^": "^v) params)));
-          let res = Gdome_xslt.applyStylesheet ~source ~stylesheet ~params in
-          if save_intermediate_results then begin
-            let domImpl = Gdome.domImplementation () in
-            ignore
-              (domImpl#saveDocumentToFile
-                ~doc:res
-                ~name:(sprintf "/tmp/uwobo_intermediate_%d_%d.xml"
-                  !intermediate_results_seqno (Unix.getpid()))
-                ());
-            incr intermediate_results_seqno;
-          end;
-          res
-        with e -> raise (Uwobo_failure (Printexc.to_string e)))
-      input
-      p_stylesheets
-  in
-    (* add error and debugging messages to result document *)
-  add_msgs ~errormode ~debugmode ~msgs:veillogger#msgs result;
-(*
-  (* DEBUGGING *)
-  add_msgs
-    ~errormode:LibXsltMsgEmbed ~debugmode:LibXsltMsgEmbed
-    ~msgs:[LibXsltErrorMsg "error1"; LibXsltDebugMsg "debug1"]
-    result;
-*)
-  let p_last_stylesheet = snd (List.hd (List.rev p_stylesheets)) in
-  ((fun outchan ->                              (* serialization function *)
-      Gdome_xslt.saveResultToChannel ~outchan ~result
-        ~stylesheet:p_last_stylesheet),
-   (get_property "media-type" last_stylesheet), (* media-type *)
-   (get_property "encoding" last_stylesheet))   (* encoding *)
-
diff --git a/helm/uwobo/uwobo_engine.mli b/helm/uwobo/uwobo_engine.mli
deleted file mode 100644 (file)
index 407afab..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Uwobo_common ;;
-
-  (**
-    @param logger logger for processing messages
-    @param styles stylesheets object
-    @param keys (ordered) list of stylesheet names to be applied
-    @param params function mapping stylesheet names to parameters list
-    @param props xml:output properties
-    @param errormode what to do with LibXSLT's error messages
-    @param debugmode what to do with LibXSLT's debugging messages
-    @param input URI of input document
-    @return a triple: 1st element is a function that takes an out_channel and
-    write the result document on it, 2nd element is a string option representing
-    the desired media-type, 3rd is a string option representing the desired
-    encoding
-  *)
-val apply:
-  logger: Uwobo_logger.sysLogger ->
-  styles: Uwobo_styles.styles ->
-  keys: string list ->
-  params: (string -> (string * string) list) ->
-  props: (string * string) list ->
-  veillogger: Uwobo_common.libXsltLogger ->
-  ?errormode: xslt_msg_mode -> ?debugmode: xslt_msg_mode ->
-  Gdome.document ->
-    ((out_channel -> unit) * string option * string option)
-
diff --git a/helm/uwobo/uwobo_logger.ml b/helm/uwobo/uwobo_logger.ml
deleted file mode 100644 (file)
index 0b557f1..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Printf;;
-
-type priority = [ 
-  `Emerg | `Alert | `Crit | `Err | `Warning | `Notice | `Info | `Debug
-]
-
-let int_of_priority = function
-  | `Emerg    -> 0
-  | `Alert    -> 1
-  | `Crit     -> 2
-  | `Err      -> 3
-  | `Warning  -> 4
-  | `Notice   -> 5
-  | `Info     -> 6
-  | `Debug    -> 7
-
-let string_of_priority = function
-  | `Emerg    -> "EMERGENCY"
-  | `Alert    -> "ALERT"
-  | `Crit     -> "CRITICAL"
-  | `Err      -> "ERROR"
-  | `Warning  -> "WARNING"
-  | `Notice   -> "NOTICE"
-  | `Info     -> "INFO"
-  | `Debug    -> "DEBUG"
-
-class sysLogger ?(level: priority = `Notice) ?(outchan = stderr) () =
-  object (self)
-    val level_no = int_of_priority level
-    val mutable enabled = false
-    method level = level
-    method levelNo = level_no
-    method enable = enabled <- true
-    method disable = enabled <- false
-    method log (prio: priority) msg =
-      let tm = Unix.localtime (Unix.time ()) in
-      if enabled && (int_of_priority prio <= level_no) then begin
-        fprintf outchan ("[UWOBO %02d/%02d/%4d %02d:%02d:%02d] %s: %s\n")
-          tm.Unix.tm_mday (tm.Unix.tm_mon + 1) (tm.Unix.tm_year + 1900)
-          tm.Unix.tm_hour tm.Unix.tm_min tm.Unix.tm_sec
-          (string_of_priority prio) msg;
-        flush outchan
-      end
-  end
-
-type lineType =
-  | Line of string        (** normal line *)
-  | LineBold of string    (** bold line *)
-  | LineEmph of string    (** emph line *)
-;;
-
-  (** non thread safe, a processingLogger is usually instantied locally for each
-  thread *)
-class processingLogger =
-  let html_escape = Netencoding.Html.encode ~in_enc:`Enc_iso88591 () in
-  let html_of_line = function
-    | Line l -> html_escape l
-    | LineBold l -> "<b>" ^ html_escape l ^ "</b>"
-    | LineEmph l -> "<em>" ^ html_escape l ^ "</em>"
-  in
-  let text_of_line = function
-    | Line l -> l
-    | LineBold l -> l
-    | LineEmph l -> l
-  in
-  fun () ->
-  object
-    val mutable log_lines = []
-    method log msg = log_lines <- Line msg :: log_lines
-    method logBold msg = log_lines <- LineBold msg :: log_lines
-    method logEmph msg = log_lines <- LineEmph msg :: log_lines
-    method asText =
-      String.concat "\n" (List.rev (List.map text_of_line log_lines))
-    method asHtml =
-      sprintf
-        "<html><body>\n%s\n</body></html>"
-        (String.concat "<br />\n" (List.map html_of_line (List.rev log_lines)))
-  end
-
diff --git a/helm/uwobo/uwobo_logger.mli b/helm/uwobo/uwobo_logger.mli
deleted file mode 100644 (file)
index 2a1a6cd..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-type priority = [
-  | `Emerg    (* system is unusable *)
-  | `Alert    (* action must be taken immediately *)
-  | `Crit     (* critical conditions *)
-  | `Err      (* error conditions *)
-  | `Warning  (* warning conditions *)
-  | `Notice   (* normal, but significant, condition *)
-  | `Info     (* informational message *)
-  | `Debug    (* debug-level message *)
-]
-
-  (**
-  Warning: logging is disabled by default, you have to invoke #enable method
-  before being able to log anything.
-  @param level minimum level of priority that will be reported, msg with
-  priority less than this will be ignored
-  @param outchan output channel on which output log messages *)
-class sysLogger:
-  ?level: priority -> ?outchan: out_channel ->
-  unit ->
-    object
-      method level: priority
-      method levelNo: int
-        (** enable logging, by default logging is disabled *)
-      method enable: unit
-        (** disable logging *)
-      method disable: unit
-        (** log a message *)
-      method log: priority -> string -> unit
-    end
-
-class processingLogger:
-  unit ->
-    object
-      method log: string -> unit
-      method logBold: string -> unit
-      method logEmph: string -> unit
-      method asText: string
-      method asHtml: string
-    end
-
diff --git a/helm/uwobo/uwobo_styles.ml b/helm/uwobo/uwobo_styles.ml
deleted file mode 100644 (file)
index 6b4791e..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Printf;;
-open Uwobo_common;;
-
-exception Stylesheet_not_found of string ;;
-exception Stylesheet_already_in of string ;;
-exception Unsupported_property of string;;
-
-let xslNS = Gdome.domString "http://www.w3.org/1999/XSL/Transform"
-let outputS = Gdome.domString "output"
-let q_outputS = Gdome.domString "xsl:output"
-
-let default_properties = [] (* no default properties *)
-
-  (** apply an output property to an xslt stylesheet *)
-let apply_property logger (element: Gdome.element) (name, value) =
-  if Uwobo_common.is_supported_property name then begin
-    logger#log `Debug (sprintf "Setting property: %s = %s" name value);
-    element#setAttribute (Gdome.domString name) (Gdome.domString value)
-  end else
-    raise (Unsupported_property name)
-
-  (** set a list of output properties in an xslt stylesheet, return a copy of
-  the given stylesheet modified as needed, given stylesheet wont be changed by
-  this operation.
-  Before applying "props" properties applies a set of default properties as
-  defined in "default_properties" *)
-let apply_properties logger last_stylesheet props =
-  let last_stylesheet =
-    new Gdome.document_of_node (last_stylesheet#cloneNode ~deep:true)
-  in
-  let output_element =
-    let node_list = last_stylesheet#getElementsByTagNameNS xslNS outputS in
-    (match node_list#item 0 with
-    | None -> (* no xsl:output element, create it from scratch *)
-        logger#log `Debug "Creating xsl:output node ...";
-        let elt = last_stylesheet#createElementNS (Some xslNS) q_outputS in
-        let root = last_stylesheet#get_documentElement in
-        ignore (root#appendChild (elt :> Gdome.node));
-        elt
-    | Some node -> new Gdome.element_of_node node)
-  in
-  List.iter
-    (apply_property logger (output_element :> Gdome.element))
-    (default_properties @ props);
-  last_stylesheet
-
-class styles =
-  object (self)
-    (* INVARIANT: 'stylesheets' and 'uris' are in sync *)
-
-     (** association list: key * props -> I_gdome_xslt.processed_stylesheet
-         It is the cache of the processed stylesheets *)
-    val mutable p_stylesheets = []
-    val mutable stylesheets = []  (** association list: key -> Gdome.document *)
-    val mutable uris = []         (** association list: key -> uri *)
-
-    val domImpl = Gdome.domImplementation ()
-
-      (** process an XSLT stylesheet *)
-    method private process uri =
-      let dom = domImpl#createDocumentFromURI ~uri () in
-      dom, Gdome_xslt.processStylesheet dom  (* produce libXSLT messages in
-                                                case of errors *)
-
-    (* stylesheets management *)
-
-    method add key uri =
-      if (List.mem_assoc key uris) then
-        raise (Stylesheet_already_in key)
-      else begin
-        uris <- (key, uri) :: uris;
-        let stylesheet, p_stylesheet = self#process uri in
-         stylesheets <- (key, stylesheet) :: stylesheets ;
-         p_stylesheets <- ((key,[]), p_stylesheet) :: p_stylesheets ;
-      end
-
-    method remove key =
-      if not (List.mem_assoc key uris) then
-        raise (Stylesheet_not_found key)
-      else begin
-        uris <- List.remove_assoc key uris;
-        stylesheets <- List.remove_assoc key stylesheets ;
-        p_stylesheets <-
-         List.filter (function ((key',_),_) -> key = key') p_stylesheets
-      end
-
-    method removeAll =
-      uris <- [];
-      stylesheets <- [];
-      p_stylesheets <- []
-
-    method reload key =
-      (try
-        let uri = List.assoc key uris in
-        let stylesheet,p_stylesheet = self#process uri in
-        stylesheets <-
-          (key, stylesheet) :: (List.remove_assoc key stylesheets) ;
-        (* we remove the processed stylesheet from the cache *)
-        p_stylesheets <-
-          List.filter (function ((key',_),_) -> key = key') p_stylesheets ;
-        p_stylesheets <- ((key,[]),p_stylesheet)::p_stylesheets
-      with Not_found ->
-        raise (Stylesheet_not_found key))
-
-    method reloadAll =
-      let (stylesheets',p_stylesheets') =
-       let processed =
-        List.map (fun (key, uri) -> (key, self#process uri)) uris
-       in
-        List.map (function (key,(stylesheet,_)) -> key,stylesheet) processed,
-        List.map
-         (function (key,(_,p_stylesheet)) -> (key,[]),p_stylesheet) processed
-      in
-       stylesheets <- stylesheets' ;
-       p_stylesheets <- p_stylesheets'
-
-    (* stylesheets usage *)
-
-    method keys = List.map fst uris
-
-    method list =
-      List.map
-        (fun (key, uri) ->
-          sprintf "key = %s, uri = %s" key (List.assoc key uris))
-        uris
-
-    method get keys props (logger : Uwobo_logger.sysLogger) =
-      match List.rev keys with
-         [] -> assert false
-       | last_key::rev_keys ->
-          let last_stylesheet =
-           try
-            List.assoc last_key stylesheets
-           with Not_found -> raise (Stylesheet_not_found last_key)
-          in
-          let p_last_stylesheet =
-           try
-            List.assoc (last_key,props) p_stylesheets
-           with
-            Not_found ->
-             (* Cache miss *)
-             let last_stylesheet' =
-               try
-                 apply_properties logger last_stylesheet props
-               with Unsupported_property prop ->
-                 raise (Uwobo_failure (sprintf "Unsupported property: %s" prop))
-             in
-             let p_last_stylesheet =
-              Gdome_xslt.processStylesheet last_stylesheet
-             in
-              p_stylesheets <-
-               ((last_key,props),p_last_stylesheet)::p_stylesheets ;
-              p_last_stylesheet
-          in
-           let p_stylesheets =
-            List.fold_left
-              (fun collected_styles key ->
-                let p_stylesheet =
-                 try
-                  List.assoc (key,[]) p_stylesheets
-                 with
-                  Not_found ->
-                   (* Cache miss *)
-prerr_endline ("##### CACHE MISS: " ^ key) ;
-                   let stylesheet =
-                     try
-                       List.assoc key stylesheets
-                     with Not_found -> raise (Stylesheet_not_found key)
-                   in
-                   let p_stylesheet = 
-                    Gdome_xslt.processStylesheet stylesheet
-                   in
-                    p_stylesheets <- ((key,[]),p_stylesheet)::p_stylesheets ;
-                    p_stylesheet
-                in
-                 (key,p_stylesheet)::collected_styles)
-              [last_key,p_last_stylesheet]
-              rev_keys
-           in
-            p_stylesheets, last_stylesheet
-  end
diff --git a/helm/uwobo/uwobo_styles.mli b/helm/uwobo/uwobo_styles.mli
deleted file mode 100644 (file)
index 95af2a4..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-(*
- * Copyright (C) 2003:
- *    Stefano Zacchiroli <zack@cs.unibo.it>
- *    for the HELM Team http://helm.cs.unibo.it/
- *
- *  This file is part of HELM, an Hypertextual, Electronic
- *  Library of Mathematics, developed at the Computer Science
- *  Department, University of Bologna, Italy.
- *
- *  HELM 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.
- *
- *  HELM 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 HELM; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- *  MA  02111-1307, USA.
- *
- *  For details, see the HELM World-Wide-Web page,
- *  http://helm.cs.unibo.it/
- *)
-
-open Uwobo_common ;;
-
-exception Stylesheet_not_found of string ;;
-exception Stylesheet_already_in of string ;;
-
-  (** hold UWOBO styles at runtime *)
-class styles:
-  object
-
-    (** {2 Stylesheets management} *)
-
-      (** add a stylesheet, bound to a given key, to the UWOBO loaded
-      stylesheets
-      @param key key to which the stylesheets will be bound
-      @param uri uri of the stylesheet to be loaded
-      @raise Stylesheet_already_in if key is already bound *)
-    method add: string -> string -> unit
-
-      (** remove the stylesheet bound to a given key *)
-    method remove: string -> unit
-
-      (** remove all loaded stylesheet *)
-    method removeAll: unit
-
-      (** reload the stylesheet bound to a given key *)
-    method reload: string -> unit
-
-      (** reload all stylesheets *)
-    method reloadAll: unit
-
-    (** {2 Stylesheets usage} *)
-
-      (** @return the list of currently loaded stylesheets' keys *)
-    method keys: string list
-
-      (** @return a list of strings, each string is a textual representation of
-      information related to a loaded stylesheet. This representation includes
-      at least stylesheet's key and URI *)
-    method list: string list
-
-      (**
-      @param key_list non empty list of keys
-      @param props list of prop
-      @param logger the logger to be used to report errors and warnings
-      @return a pair. The first argument of the pair is an association list
-      that maps given keys to gdome2-xslt processed stylesheets. The last
-      stylesheet xsl:output element is modified according to the given
-      properties. The second argument of the pair is the last unprocessed
-      stylesheet.
-      *)
-    method get:
-      string list -> (string * string) list -> Uwobo_logger.sysLogger ->
-        (string * I_gdome_xslt.processed_stylesheet) list * Gdome.document
-
-  end
-
diff --git a/helm/xmltheory/Coq_v2theoryxml/.cvsignore b/helm/xmltheory/Coq_v2theoryxml/.cvsignore
deleted file mode 100644 (file)
index e4a3d54..0000000
+++ /dev/null
@@ -1 +0,0 @@
-coq_v2theoryxml *.cmi *.cmo
diff --git a/helm/xmltheory/Coq_v2theoryxml/.depend b/helm/xmltheory/Coq_v2theoryxml/.depend
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/helm/xmltheory/Coq_v2theoryxml/Makefile b/helm/xmltheory/Coq_v2theoryxml/Makefile
deleted file mode 100644 (file)
index 1f9fae5..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-COQTOP=/home/projects/helm/EXPORT/V7
-OCAMLC=ocamlc -I $(COQTOP)/config -I $(COQTOP)/toplevel
-
-COQV2THEORYXMLOBJS= \
- $(COQTOP)/config/coq_config.cmo \
- $(COQTOP)/toplevel/usage.cmo \
- coq_v2theoryxml.cmo 
-
-coq_v2theoryxml: $(COQV2THEORYXMLOBJS)
-       $(OCAMLC) -o $@ unix.cma $(COQV2THEORYXMLOBJS)
-
-coq_v2theoryxml.cmo: coq_v2theoryxml.ml
-       $(OCAMLC) -c $<
-
-.PHONY: clean
-clean:
-       rm -f coq_v2theoryxml *.cmo *.cmi
diff --git a/helm/xmltheory/Coq_v2theoryxml/coq_v2theoryxml.ml b/helm/xmltheory/Coq_v2theoryxml/coq_v2theoryxml.ml
deleted file mode 100644 (file)
index b1e856e..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-(* environment *)
-
-let environment = Unix.environment ()
-
-let bindir = ref Coq_config.bindir
-let binary = "coqtop.byte"
-let image = ref ""
-let xml_theory_library_root = ref (
- try
-  Sys.getenv "XML_THEORY_LIBRARY_ROOT"
- with Not_found -> ""
-)
-
-(* the $COQBIN environment variable has priority over the Coq_config value *)
-let _ = 
-  try 
-    let c = Sys.getenv "COQBIN" in
-    if c <> "" then bindir := c
-  with Not_found -> ()
-
-(* coq_v2theoryxml options *)
-
-let keep = ref false
-
-(* Verifies that a string do not contains others caracters than letters, 
-   digits, or `_` *)
-
-let check_module_name s = 
-  let err () = 
-    output_string stderr
-      "Modules names must only contain letters, digits, or underscores\n"; 
-    output_string stderr
-      "and must begin with a letter\n";
-    exit 1 
-  in
-  match String.get s 0 with 
-    | 'a' .. 'z' | 'A' .. 'Z' -> 
-       for i = 1 to (String.length s)-1 do
-         match String.get s i with 
-           | 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_'  -> ()
-           | _ -> err ()
-       done
-    | _ -> err ()
-
- (* compilation of a file [file] with command [command] and args [args] *)
-
-let compile command args file =
-  let dirname = Filename.dirname file in
-  let basename = Filename.basename file in
-  let modulename =
-    if Filename.check_suffix basename ".vo" then
-      Filename.chop_suffix basename ".vo"
-    else
-      basename 
-  in
-  check_module_name modulename;
-  let tmpfile = Filename.temp_file "coq_v2theoryxml" ".v" in
-  let args' = 
-    command :: "-batch" :: "-silent" :: "-is" :: "barestate" :: args 
-    @ ["-load-vernac-source"; tmpfile] in
-  let devnull = 
-    if Sys.os_type = "Unix" then
-      Unix.openfile "/dev/null" [] 0o777 
-    else 
-      Unix.stdin
-  in 
-  let oc = open_out tmpfile in
-  Printf.fprintf oc "Require XmlTheory.\n" ;
-  Printf.fprintf oc "XmlTheory Begin %s \"%s\".\n" modulename
-   !xml_theory_library_root ;
-  Printf.fprintf oc "Load %s.\n" modulename;
-  Printf.fprintf oc "XmlTheory End.\n" ;
-  flush oc;
-  close_out oc;
-  try
-    let pid =
-      Unix.create_process_env command
-        (Array.of_list args') environment devnull Unix.stdout Unix.stderr in
-    let status = Unix.waitpid [] pid in
-    if not !keep then Sys.remove tmpfile ;
-    match status with
-      | _, Unix.WEXITED 0 -> ()
-      | _, Unix.WEXITED 127 -> 
-         Printf.printf "Cannot execute %s\n" command;
-         exit 1
-      | _, Unix.WEXITED c -> exit c
-      | _                 -> exit 1
-  with _ -> 
-    if not !keep then Sys.remove tmpfile; exit 1
-
-(* parsing of the command line
- *
- * special treatment for -bindir and -i.
- * other options are passed to coqtop *)
-
-let usage () =
-  Usage.print_usage
-   "Usage: coq_v2theoryxml <options> <Coq options> module...\n
-options are:
-  -xml-theory-library-root d   specify the path to the root of the XML library
-                               (overrides $XML_THEORY_LIBRARY_ROOT)
-  -image f                     specify an alternative executable for Coq
-  -t                           keep temporary files\n\n" ;
-  flush stderr ;
-  exit 1
-
-let parse_args () =
-  let rec parse (cfiles,args) = function
-    | [] -> 
-       List.rev cfiles, List.rev args
-    | "-xml-theory-library-root" :: v :: rem ->
-        xml_theory_library_root := v ; parse (cfiles,args) rem
-    | "-t" :: rem -> 
-       keep := true ; parse (cfiles,args) rem
-    | "-boot" :: rem ->
-       bindir:= Filename.concat Coq_config.coqtop "bin";
-       parse (cfiles, "-boot"::args) rem
-    | "-bindir" :: d :: rem ->
-       bindir := d ; parse (cfiles,args) rem
-    | "-bindir" :: []       ->
-       usage ()
-    | "-byte" :: rem ->
-       parse (cfiles,args) rem
-    | "-opt" :: rem ->
-        raise (Failure "To load ML modules, only -byte is allowed")
-    | "-image" :: f :: rem ->
-       image := f; parse (cfiles,args) rem
-    | "-image" :: [] ->
-       usage ()
-    | ("-?"|"-h"|"-H"|"-help"|"--help") :: _ -> usage ()
-    | ("-libdir"|"-outputstate"|"-I"|"-include"
-      |"-inputstate"|"-is"|"-load-vernac-source"|"-load-vernac-object"
-      |"-load-ml-source"|"-require"|"-load-ml-object"|"-user"
-      |"-init-file" as o) :: rem ->
-       begin
-         match rem with
-           | s :: rem' -> parse (cfiles,s::o::args) rem'
-           | []        -> usage ()
-       end
-    | "-R" as o :: s :: t :: rem -> parse (cfiles,t::s::o::args) rem
-    | ("-notactics"|"-debug"|"-db"|"-debugger"|"-nolib"|"-batch"|"-nois"
-      |"-q"|"-full"|"-profile"|"-just-parsing"|"-echo" |"-unsafe"|"-quiet"
-      |"-silent"|"-m" as o) :: rem ->
-       parse (cfiles,o::args) rem
-    | ("-v"|"--version") :: _ ->
-        Usage.version ()
-    | "-where" :: _ -> 
-       print_endline Coq_config.coqlib; exit 0
-    | f :: rem -> parse (f::cfiles,args) rem
-  in
-  parse ([],[]) (List.tl (Array.to_list Sys.argv))
-
-(* main: we parse the command line, define the command to compile files
- * and then call the compilation on each file *)
-
-let main () =
-  let cfiles, args = parse_args () in
-  if cfiles = [] then begin
-    prerr_endline "coq_v2theoryxml: too few arguments" ;
-    usage ()
-  end;
-  let coqtopname = 
-    if !image <> "" then !image else Filename.concat !bindir (binary ^ Coq_config.exec_extension)
-  in
-  if !xml_theory_library_root = "" then
-   begin
-    prerr_endline "coq_v2theoryxml: you must either set $XML_THEORY_LIBRARY_ROOT or use -xml-theory-library-root";
-    usage ()
-   end
-  else
-   List.iter (compile coqtopname args) cfiles ;
-   prerr_endline
-    ("\nWARNING: all the URIs in the generated XML files are broken." ^
-     "\n         See the README in the XML contrib to learn how to fix them.\n")
-    
-let _ = Printexc.print main (); exit 0
diff --git a/helm/xmltheory/FakeCoq_vo2xml/README b/helm/xmltheory/FakeCoq_vo2xml/README
deleted file mode 100644 (file)
index 4accfca..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# This coq_vo2xml must be put in PATH before the real coq_vo2xml.
-# It's aim is to run coq_v2theoryxml instead of coq_vo2xml
-# Remember to set $XML_THEORY_LIBRARY_ROOT before starting this coq_vo2xml
diff --git a/helm/xmltheory/FakeCoq_vo2xml/coq_vo2xml b/helm/xmltheory/FakeCoq_vo2xml/coq_vo2xml
deleted file mode 100755 (executable)
index 34e44a0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-BASEDIR=/home/projects/helm/EXPORT/xmltheory
-$BASEDIR/Coq_v2theoryxml/coq_v2theoryxml -R $BASEDIR/XmlTheory Bologna.XmlTheory $@
diff --git a/helm/xmltheory/XmlTheory/.cvsignore b/helm/xmltheory/XmlTheory/.cvsignore
deleted file mode 100644 (file)
index 1921ec2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.cmi *.cmo *.vo
diff --git a/helm/xmltheory/XmlTheory/.depend b/helm/xmltheory/XmlTheory/.depend
deleted file mode 100644 (file)
index 2b814a9..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-xmltheoryentries.cmo: xmltheoryentries.ml iXml.cmi
-xmltheoryentries.cmx: xmltheoryentries.ml iXml.cmx
-iXml.cmo: iXml.ml iXml.cmi
-iXml.cmx: iXml.ml iXml.cmi
-iXml.cmi: iXml.mli
-XmlTheory.vo: XmlTheory.v iXml.cmo xmltheoryentries.cmo
-XmlTheory.vi: XmlTheory.v iXml.cmo xmltheoryentries.cmo
-XmlTheory.html: XmlTheory.v iXml.cmo xmltheoryentries.cmo
diff --git a/helm/xmltheory/XmlTheory/COME_COMPILARE b/helm/xmltheory/XmlTheory/COME_COMPILARE
deleted file mode 100644 (file)
index f1389cc..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Settare
-
-OPT=-byte      # Nota: questo andrebbe fatto nel Make, ma un bug di coq_makefile
-               # lo impedisce
-COQTOP=...
diff --git a/helm/xmltheory/XmlTheory/Make b/helm/xmltheory/XmlTheory/Make
deleted file mode 100644 (file)
index a927b63..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
--R . Bologna.XmlTheory
--I $(COQTOP)/contrib/xml
-XmlTheory.v
-iXml.ml
-xmltheoryentries.ml
diff --git a/helm/xmltheory/XmlTheory/Makefile b/helm/xmltheory/XmlTheory/Makefile
deleted file mode 100644 (file)
index 1dc9d35..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-##############################################################################
-##                 The Calculus of Inductive Constructions                  ##
-##                                                                          ##
-##                                Projet Coq                                ##
-##                                                                          ##
-##                     INRIA                        ENS-CNRS                ##
-##              Rocquencourt                        Lyon                    ##
-##                                                                          ##
-##                                  Coq V7                                  ##
-##                                                                          ##
-##                                                                          ##
-##############################################################################
-
-# WARNING
-#
-# This Makefile has been automagically generated by coq_makefile
-# Edit at your own risks !
-#
-# END OF WARNING
-
-#
-# This Makefile was generated by the command line :
-# coq_makefile -f Make -o Makefile 
-#
-
-##########################
-#                        #
-# Variables definitions. #
-#                        #
-##########################
-
-CAMLP4LIB=`camlp4 -where`
-MAKE=make "COQBIN=$(COQBIN)" "OPT=$(OPT)"
-COQSRC=-I $(COQTOP)/kernel -I $(COQTOP)/lib \
-  -I $(COQTOP)/library -I $(COQTOP)/parsing -I $(COQTOP)/pretyping \
-  -I $(COQTOP)/proofs -I $(COQTOP)/syntax -I $(COQTOP)/tactics \
-  -I $(COQTOP)/toplevel -I $(CAMLP4LIB)
-ZFLAGS=$(OCAMLLIBS) $(COQSRC)
-COQFLAGS=-q $(OPT) $(COQLIBS)
-COQC=$(COQBIN)coqc
-COQFULL=$(COQBIN)coqc $(FULLOPT) -q $(COQLIBS)
-GALLINA=gallina
-COQ2HTML=coq2html
-COQ2LATEX=coq2latex
-CAMLC=ocamlc -c
-CAMLOPTC=ocamlopt -c
-CAMLLINK=ocamlc
-CAMLOPTLINK=ocamlopt
-COQDEP=$(COQBIN)coqdep -c
-COQVO2XML=coq_vo2xml
-
-#########################
-#                       #
-# Libraries definition. #
-#                       #
-#########################
-
-OCAMLLIBS=-I .\
-  -I $(COQTOP)/contrib/xml
-COQLIBS=-I .\
-  -R . Bologna.XmlTheory\
-  -I $(COQTOP)/contrib/xml
-
-###################################
-#                                 #
-# Definition of the "all" target. #
-#                                 #
-###################################
-
-all: XmlTheory.vo\
-  iXml.cmo\
-  xmltheoryentries.cmo
-
-spec: XmlTheory.vi
-
-gallina: XmlTheory.g
-
-html: XmlTheory.html
-
-tex: XmlTheory.tex
-
-gallinatex: XmlTheory.g.tex
-
-gallinahtml: XmlTheory.g.html
-
-xml: .xml_time_stamp
-.xml_time_stamp: XmlTheory.vo
-       $(COQVO2XML) $(COQFLAGS) $(?:%.o=%)
-       touch .xml_time_stamp
-
-####################
-#                  #
-# Special targets. #
-#                  #
-####################
-
-.PHONY: all opt byte archclean clean install depend xml
-
-.SUFFIXES: .mli .ml .cmo .cmi .cmx .v .vo .vi .g .html .tex .g.tex .g.html
-
-.mli.cmi:
-       $(CAMLC) $(ZDEBUG) $(ZFLAGS) $<
-
-.ml.cmo:
-       $(CAMLC) $(ZDEBUG) $(ZFLAGS) $<
-
-.ml.cmx:
-       $(CAMLOPTC) $(ZDEBUG) $(ZFLAGS) $<
-
-.v.vo:
-       $(COQC) $(COQDEBUG) $(COQFLAGS) $*
-
-.v.vi:
-       $(COQC) -i $(COQDEBUG) $(COQFLAGS) $*
-
-.v.g:
-       $(GALLINA) $<
-
-.v.html:
-       $(COQ2HTML) $<
-
-.v.tex:
-       $(COQ2LATEX) $< -latex -o $@
-
-.v.g.html:
-       $(GALLINA) -stdout $< | $(COQ2HTML) -f > $@
-
-.v.g.tex:
-       $(GALLINA) -stdout $< | $(COQ2LATEX) - -latex -o $@
-
-byte:
-       $(MAKE) all "OPT="
-
-opt:
-       $(MAKE) all "OPT=-opt"
-
-include .depend
-
-depend:
-       rm .depend
-       $(COQDEP) -i $(COQLIBS) *.v *.ml *.mli >.depend
-       $(COQDEP) $(COQLIBS) -suffix .html *.v >>.depend
-
-install:
-       @if test -z $(TARGETDIR); then echo "You must set TARGETDIR (for instance with 'make TARGETDIR=foobla install')"; exit 1; fi
-       cp -f *.vo $(TARGETDIR)
-       cp -f *.cmo $(TARGETDIR)
-
-Makefile: Make
-       mv -f Makefile Makefile.bak
-       $(COQBIN)coq_makefile -f Make -o Makefile
-
-clean:
-       rm -f *.cmo *.cmi *.cmx *.o *.vo *.vi *~
-
-archclean:
-       rm -f *.cmx *.o
-
-# WARNING
-#
-# This Makefile has been automagically generated by coq_makefile
-# Edit at your own risks !
-#
-# END OF WARNING
-
diff --git a/helm/xmltheory/XmlTheory/README b/helm/xmltheory/XmlTheory/README
deleted file mode 100644 (file)
index ce4c86c..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-Here we show the procedure to follow to add the recognition of
-a new syntactical form.
-
-Form to recognize in the model:
-
-Lemma existsDec : (l:(list A)){(list_exists l)}+{~(list_exists l)}.
-
-1. cd V7 ; grep "Lemma" */*.ml4
-   the result should be one or a few files. In this case the
-   only file is parsing/g_vernac.ml4. In the case of many files,
-   only one is the good one.
-2. open the file and search for Lemma:
-   thm_tok:
-    [ [ "Theorem" -> <:ast< "THEOREM" >>
-      | IDENT "Lemma" -> <:ast< "LEMMA" >>
-      | IDENT "Fact" -> <:ast< "FACT" >>
-      | IDENT "Remark" -> <:ast< "REMARK" >>
-      | IDENT "Decl" -> <:ast< "DECL" >> ] ]
-
-   so a Lemma is mapped into an ast of phylum thm_tok.
-   Let's search for thm_tok. Many occurrences are found,
-   but the only one that matches the form to recognize is
-
-  gallina:
-    (* Definition, Goal *)
-    [ [ thm = thm_tok; id = identarg; ":"; c = constrarg ->
-          <:ast< (StartProof $thm $id $c) >>
-
-  So the ast created is tagged StartProof
-3. grep "StartProof" */*.ml   (usually toplevel/...)
-   Open the file and search for StartProof.
-   This is found:
-    let _ =
-  add "StartProof"
-    (function
-       | [VARG_STRING kind;VARG_IDENTIFIER s;VARG_CONSTR com] ->
-           ...
-4. edit xmltheoryentries.ml and copy the entry for another rule,
-   substituting StartProof as the parameter for set_hook and
-   using the above match (with V. added where appropriate) after function:
-
-let module V = Vernacinterp in
- set_hook "StartProof"
-  (function
-      [V.VARG_STRING kind;V.VARG_IDENTIFIER s;V.VARG_CONSTR com] ->
-       ???
-    | _ -> fail ()
-  )
-;;
-
-    Finally, write OCaml code to print to XML the availables interesting
-    infos. In our case the code becomes
-
-let module V = Vernacinterp in
- set_hook "StartProof"
-  (function
-      [V.VARG_STRING kind;V.VARG_IDENTIFIER s;V.VARG_CONSTR com] ->
-       IXml.output
-        (Xml.xml_empty
-          "THEOREM"
-          ["uri", Names.string_of_id s ^ ".con"; "as",kind]
-        )
-    | _ -> fail ()
-  )
-;;
-
-     IXml.output should always be present and the code inside
-     (that is simply XML written in OCaml form) should be changed.
-     The syntax is
-        Xml.xml_empty "name" ["att1","value1" ; ... ; "attn","valuen"]
-     to create an empty element name with attributes att1 ... attn.
-     To create a non-empty element, use
-        Xml.xml_nempty "name" ["att1","value1" ; ... ; "attn","valuen"]
-         stream
-     where stream is an OCaml stream of other XML elements, as:
-       * another Xml.xml_nempty 
-       * an Xml.xml_empty
-       * [< stream1 ; ... ; streamk >]
diff --git a/helm/xmltheory/XmlTheory/XmlTheory.v b/helm/xmltheory/XmlTheory/XmlTheory.v
deleted file mode 100644 (file)
index 54fdf82..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-Declare ML Module "iXml" "xmltheoryentries".
-
-(*Vecchio, ma funzionante
-Grammar vernac vernac : ast :=
-  xml_theory_begin [ "XmlTheory" "Begin" stringarg($s) stringarg($f) "." ] ->
-     [(XMLTHEORYBEGIN $s $f)]
-| xml_theory_end [ "XmlTheory" "End" "." ] ->
-     [(XMLTHEORYEND)].
-*)
-
-Grammar vernac vernac : ast :=
-  xml_theory_begin [ "XmlTheory" "Begin" identarg($s) stringarg($f) "." ] ->
-     [(XMLTHEORYBEGIN $s $f)]
-| xml_theory_end [ "XmlTheory" "End" "." ] ->
-     [(XMLTHEORYEND)].
diff --git a/helm/xmltheory/XmlTheory/iXml.ml b/helm/xmltheory/XmlTheory/iXml.ml
deleted file mode 100644 (file)
index 98fb186..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-exception NoOpenNonEmptyElements
-
-type sectionTree =
-   Leaf of Xml.token Stream.t
- | Node of string * (string * string) list * sectionTree list ref
-;;
-
-let rec token_stream_of_section_tree_list =
- function
-    he::tl ->
-     [< token_stream_of_section_tree_list tl; token_stream_of_section_tree he >]
-  | [] -> [<>]
-and token_stream_of_section_tree =
- function
-    Leaf t -> [< t >]
-  | Node (elem_name, attr_list, section_tree) ->
-     Xml.xml_nempty elem_name attr_list
-      (token_stream_of_section_tree_list !section_tree)
-;;
-
-let section_stack = ref [];;
-let xmloutput = ref (ref []);;
-let filename = ref "";;
-
-let reset_output fname =
- filename := fname ;
- xmloutput := ref [] ;
- section_stack := []
-;;
-
-let output n =
- let xmloutput = !xmloutput in
-  xmloutput := (Leaf n) :: !xmloutput
-;;
-
-let open_non_empty_element elem_name  attr_list = 
- let newxmloutput = ref [] in
-  !xmloutput := (Node (elem_name, attr_list, newxmloutput)) :: !(!xmloutput) ;
-  section_stack := !xmloutput :: !section_stack ;
-  xmloutput := newxmloutput
-;;
-
-let close_non_empty_element () =
- match !section_stack with
-    oldxmloutput::oldsection_stack ->
-     xmloutput := oldxmloutput ;
-     section_stack := oldsection_stack
-  | _ -> raise NoOpenNonEmptyElements
-;;
-
-let print_output () =
- Xml.pp (token_stream_of_section_tree_list !(!xmloutput)) (Some !filename)
-;;
diff --git a/helm/xmltheory/XmlTheory/iXml.mli b/helm/xmltheory/XmlTheory/iXml.mli
deleted file mode 100644 (file)
index 11fad82..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-exception NoOpenNonEmptyElements
-
-val reset_output : string -> unit
-val output : Xml.token Stream.t -> unit
-val open_non_empty_element : string -> (string * string) list -> unit
-val close_non_empty_element : unit -> unit
-val print_output : unit -> unit
diff --git a/helm/xmltheory/XmlTheory/xmltheoryentries.ml b/helm/xmltheory/XmlTheory/xmltheoryentries.ml
deleted file mode 100644 (file)
index de3c503..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-(*********************)
-(* Utility functions *)
-(*********************)
-
-let fail () =
- Pp.warning "XmlTheory: AST not recognized"
-;;
-
-(* name is the name of the function to hook *)
-(* hook is an hook partial-function to recognize particular inputs *)
-let set_hook name hook =
- let module V = Vernacinterp in
-  let old = V.vinterp_map name in
-   V.vinterp_add name
-    (fun l () ->
-      old l () ;
-      hook l
-    )
-;;
-
-
-(*****************************************************)
-(* Vernacular administrative commands for the module *)
-(*****************************************************)
-
-let header =
-"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ^
-"<!DOCTYPE Theory SYSTEM \"http://www.cs.unibo.it/helm/dtd/maththeory.dtd\">\n"
-;;
-
-(*Vecchio, ma funzionante
-let module V = Vernacinterp in
- V.vinterp_add "XMLTHEORYBEGIN"
-  (function
-      [V.VARG_STRING curi ; V.VARG_STRING filename] ->
-       fun () ->
-        IXml.reset_output filename ;
-        IXml.output (Xml.xml_cdata header) ;
-        IXml.open_non_empty_element "Theory" ["uri","cic:" ^ curi]
-    | _ -> V.bad_vernac_args "XMLTHEORYBEGIN"
-  )
-;;
-*)
-
-let module V = Vernacinterp in
-let module L = Library in
-let module S = System in
-let module N = Names in
- V.vinterp_add "XMLTHEORYBEGIN"
-  (function
-      [V.VARG_IDENTIFIER id ; V.VARG_STRING root_dir] ->
-       fun () ->
-        let s = N.string_of_id id in
-         let lpe,_ =
-          S.find_file_in_path (L.get_load_path ()) (s^".v")
-         in
-          let curi = "/" ^ String.concat "/" lpe.S.coq_dirpath in
-          let dirname = root_dir ^ curi in
-           Unix.system ("mkdir -p " ^ dirname) ;
-          let filename = dirname ^ "/" ^ s ^ ".theory" in
-           IXml.reset_output filename ;
-           IXml.output (Xml.xml_cdata header) ;
-           IXml.open_non_empty_element "Theory" ["uri","cic:" ^ curi ^ "/" ^ s]
-    | _ -> V.bad_vernac_args "XMLTHEORYBEGIN"
-  )
-;;
-
-let module V = Vernacinterp in
- V.vinterp_add "XMLTHEORYEND"
-  (function
-      [] ->
-       fun () ->
-        IXml.close_non_empty_element () ;
-        IXml.print_output ()
-    | _ -> V.bad_vernac_args "XMLTHEORYEND"
-  )
-;;
-
-
-(**********************************************************)
-(* All the vernacular commands on which one is interested *)
-(* should be overridden here                              *)
-(**********************************************************)
-
-let module V = Vernacinterp in
-let module N = Names in
-let module S = System in
-let module L = Library in
- set_hook "Require"
-  (function
-      [V.VARG_STRING import; V.VARG_STRING specif; V.VARG_IDENTIFIER id] ->
-       (* id is the identifier of the module, but we need the absolute *)
-       (* identifier as an URI.                                        *)
-       (* E.g.: Logic ==> theory:/Coq/Init/Logic.theory                *)
-        let name = N.string_of_id id in
-         let ({S.coq_dirpath = coq_dirpath},_) = L.module_filename name in
-          let uri =
-           "theory:/" ^ (String.concat "/" coq_dirpath) ^ "/" ^ name ^ ".theory"
-          in
-           IXml.output
-            (Xml.xml_nempty "vernacular" []
-             (Xml.xml_empty
-               "Require"
-               ["import",import; "specif",specif; "uri",uri]
-             )
-            )
-    | _ -> fail ()
-   )
-;;
-
-let module V = Vernacinterp in
-let module T = Nametab in
-let module N = Names in
- set_hook "HintsResolve"
-  (function
-      (V.VARG_VARGLIST l)::lh ->
-        IXml.output
-         (Xml.xml_nempty "vernacular" []
-          (Xml.xml_nempty
-            "HintsResolve" []
-            [< Xml.xml_nempty "dbs" []
-                (List.fold_right
-                  (function
-                      (V.VARG_IDENTIFIER x) ->
-                        (function i ->
-                          [< Xml.xml_empty "db" ["name",N.string_of_id x];
-                             i
-                          >]
-                        )
-                    | _ -> Vernacinterp.bad_vernac_args "HintsResolve"
-                  )
-                l [<>]) ;
-               Xml.xml_nempty "hints" []
-                (List.fold_right
-                  (function
-                      (V.VARG_QUALID x) ->
-                        (function i ->
-                          [< Xml.xml_empty "hint" ["name",T.string_of_qualid x];
-                             i
-                          >]
-                        )
-                    | _ -> Vernacinterp.bad_vernac_args "HintsResolve"
-                  )
-                lh [<>]
-                )
-            >]
-          )
-         )
-    | _ -> fail ()
-  )
-;;
-
-let module V = Vernacinterp in
- set_hook "IMPLICIT_ARGS_ON"
-  (function
-      [] ->
-        IXml.output
-         (Xml.xml_nempty "vernacular" []
-          (Xml.xml_empty
-            "ImplicitArguments"
-            ["status","ON"]
-          )
-         )
-    | _ -> fail ()
-  )
-;;
-
-let module V = Vernacinterp in
- set_hook "DEFINITION"
-  (function
-      (* Coq anomaly: a Local definition is a Definition at the syntax *)
-      (* level but a Variable at the logical level. Here we have to    *)
-      (* recognize the two cases and treat them differently            *)
-      (V.VARG_STRING "LOCAL":: V.VARG_IDENTIFIER id:: V.VARG_CONSTR c:: rest) ->
-        IXml.output
-         (Xml.xml_nempty "VARIABLES" ["as","LOCAL"]
-           (Xml.xml_empty
-             "VARIABLE"
-             ["uri",Names.string_of_id id ^ ".var"]
-           )
-         )
-    | (V.VARG_STRING kind:: V.VARG_IDENTIFIER id:: V.VARG_CONSTR c :: rest) ->
-        IXml.output
-         (Xml.xml_empty
-           "DEFINITION"
-           ["uri", Names.string_of_id id ^ ".con" ; "as",kind]
-         )
-    | _ -> fail ()
-  )
-;;
-
-let module V = Vernacinterp in
- set_hook "BeginSection"
-  (function
-      [V.VARG_IDENTIFIER id] ->
-        IXml.open_non_empty_element "SECTION" ["uri", Names.string_of_id id]
-    | _ -> fail ()
-  )
-;;
-
-let module V = Vernacinterp in
- set_hook "EndSection"
-  (function
-      [V.VARG_IDENTIFIER id] ->
-        IXml.close_non_empty_element ()
-    | _ -> fail ()
-  )
-;;
-
-let module V = Vernacinterp in
- set_hook "StartProof"
-  (function
-      [V.VARG_STRING kind;V.VARG_IDENTIFIER s;V.VARG_CONSTR com] ->
-       IXml.output
-        (Xml.xml_empty
-          "THEOREM"
-          ["uri", Names.string_of_id s ^ ".con"; "as",kind]
-        )
-    | _ -> fail ()
-  )
-;;
-
-let module V = Vernacinterp in
- set_hook "MUTUALINDUCTIVE"
-  (function
-      [V.VARG_STRING f; V.VARG_VARGLIST indl] ->
-        (* we need the name of the first inductive defined *)
-        (* type in the block to get the URI                *)
-        let name =
-         match indl with
-            (V.VARG_VARGLIST ((V.VARG_IDENTIFIER name)::_))::_ -> name
-          | _ -> assert false
-        in
-         IXml.output
-          (Xml.xml_empty
-            "DEFINITION"
-            ["uri", Names.string_of_id name ^ ".ind"; "as",f]
-          )
-    | _ -> fail ()
-  )
-;;
-
-let module V = Vernacinterp in
- set_hook "VARIABLE"
-  (function
-      [V.VARG_STRING kind; V.VARG_BINDERLIST slcl] ->
-       (* here we need all the names *)
-       let names =
-        List.flatten (List.map fst slcl)
-       in
-        IXml.output
-         (Xml.xml_nempty "VARIABLES" ["as",kind]
-          (List.fold_right
-            (fun name s ->
-              [< (Xml.xml_empty
-                   "VARIABLE"
-                   ["uri",Names.string_of_id name ^ ".var"]
-                 ) ; s
-              >]
-            ) names [<>]
-          )
-         )
-    | _ -> fail ()
-  )
-;;
-
-let module V = Vernacinterp in
-let module T = Nametab in
-let module N = Names in
- set_hook "COERCION"
-  (function
-      [V.VARG_STRING kind; V.VARG_STRING identity; V.VARG_QUALID qid;
-       V.VARG_QUALID qids; V.VARG_QUALID qidt] ->
-        (* let's substitute empty strings with non-empty strings *)
-        (* to get a stricter DTD                                 *)
-        let remove_empty_string s = if s = "" then "UNSPECIFIED" else s in
-        let kind     = remove_empty_string kind     in
-        let identity = remove_empty_string identity in
-         IXml.output
-          (Xml.xml_nempty "vernacular" []
-           (Xml.xml_empty
-             "Coercion"
-             ["kind",kind; "identity",identity ; "name",T.string_of_qualid qid ;
-              "source",T.string_of_qualid qids;"target",T.string_of_qualid qidt]
-           )
-          )
-    | _ -> fail ()
-  )
-;;
-
-let module V = Vernacinterp in
- set_hook "MUTUALRECURSIVE"
-  (function
-      [V.VARG_VARGLIST lmi] ->
-        (* we need the name of the first inductive defined *)
-        (* type in the block to get the URI                *)
-        let name =
-         match lmi with
-            (V.VARG_VARGLIST ((V.VARG_IDENTIFIER name)::_))::_ -> name
-          | _ -> assert false
-        in
-         IXml.output
-          (Xml.xml_empty
-            "DEFINITION"
-            ["uri", Names.string_of_id name ^ ".con" ; "as","Fixpoint"]
-          )
-     | _ -> fail ()
-  )
-;;
-
-let module V = Vernacinterp in
- set_hook "MUTUALCORECURSIVE"
-  (function
-      [V.VARG_VARGLIST lmi] ->
-        (* we need the name of the first inductive defined *)
-        (* type in the block to get the URI                *)
-        let name =
-         match lmi with
-            (V.VARG_VARGLIST ((V.VARG_IDENTIFIER name)::_))::_ -> name
-          | _ -> assert false
-        in
-         IXml.output
-          (Xml.xml_empty
-            "DEFINITION"
-            ["uri", Names.string_of_id name ^ ".con" ; "as","CoFixpoint"]
-          )
-     | _ -> fail ()
-  )
-;;
-
-let module V = Vernacinterp in
- set_hook "RECORD"
-  (function
-      [V.VARG_STRING coe;
-       V.VARG_IDENTIFIER struc;
-       V.VARG_BINDERLIST binders;
-       V.VARG_CONSTR sort;
-       V.VARG_VARGLIST namec;
-       V.VARG_VARGLIST cfs] ->
-         IXml.output
-          (Xml.xml_empty
-            "DEFINITION"
-            ["uri", Names.string_of_id struc ^ ".ind" ; "as","Record"]
-          )
-     | _ -> fail ()
-  )
-;;
-
-let module V = Vernacinterp in
- set_hook "PARAMETER"
-  (function
-      [V.VARG_STRING kind; V.VARG_BINDERLIST slcl] ->
-       (* here we need all the names *)
-       let names =
-        List.flatten (List.map fst slcl)
-       in
-        IXml.output
-         (Xml.xml_nempty "AXIOMS" ["as",kind]
-          (List.fold_right
-            (fun name s ->
-              [< (Xml.xml_empty
-                   "AXIOM"
-                   ["uri",Names.string_of_id name ^ ".con"]
-                 ) ; s
-              >]
-            ) names [<>]
-          )
-         )
-    | _ -> fail ()
-  )
-;;
diff --git a/helm/xmltheory/maththeory.dtd b/helm/xmltheory/maththeory.dtd
deleted file mode 100644 (file)
index f010b65..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml encoding="ISO-8859-1"?>
-
-<!--*****************************************************************-->
-<!-- DTD FOR THEORY OBJECTS AT LEVEL OF CIC XML FILES:               -->
-<!-- First draft: May 10 2000, Claudio Sacerdoti Coen, Irene Schena  -->
-<!-- Revised: February 2001, Claudio Sacerdoti Coen                  -->
-<!-- Revised: May 01 2001, Claudio Sacerdoti Coen                    -->
-<!--*****************************************************************-->
-
-<!ENTITY % mathstructure '(AXIOMS|DEFINITION|THEOREM|VARIABLES|SECTION|vernacular)*'>
-
-<!ELEMENT Theory (%mathstructure;)>
-<!ATTLIST Theory
-          uri CDATA #REQUIRED>
-
-<!ELEMENT AXIOMS (AXIOM*)>
-<!ATTLIST AXIOMS
-          as (AXIOM|PARAMETER|PARAMETERS) #REQUIRED>
-
-<!ELEMENT AXIOM EMPTY>
-<!ATTLIST AXIOM
-          uri CDATA #REQUIRED>
-
-<!ELEMENT DEFINITION EMPTY>
-<!ATTLIST DEFINITION
-          uri CDATA #REQUIRED
-          as (DEFINITION|Inductive|CoInductive|Fixpoint|CoFixpoint|Record) #REQUIRED>
-
-<!ELEMENT THEOREM EMPTY>
-<!ATTLIST THEOREM
-          uri CDATA #REQUIRED
-          as (THEOREM|LEMMA|FACT|REMARK|DECL) #REQUIRED>
-
-<!ELEMENT VARIABLES (VARIABLE*)>
-<!ATTLIST VARIABLES
-          as (VARIABLE|VARIABLES|HYPOTHESIS|HYPOTHESES|LOCAL) #REQUIRED>
-
-<!ELEMENT VARIABLE EMPTY>
-<!ATTLIST VARIABLE
-          uri CDATA #REQUIRED>
-
-<!ELEMENT SECTION (%mathstructure;)>
-<!ATTLIST SECTION
-          uri CDATA #REQUIRED>
-
-<!ELEMENT vernacular (Require|ImplicitArguments|Coercion|HintsResolve)>
-
-<!ELEMENT Require EMPTY>
-<!ATTLIST Require
-          import (EXPORT|IMPORT)                             #REQUIRED
-          specif (UNSPECIFIED|IMPLEMENTATION|SPECIFICATION)  #REQUIRED
-          uri    CDATA                                       #REQUIRED>
-
-<!ELEMENT ImplicitArguments (EMPTY)>
-<!ATTLIST ImplicitArguments
-          status (ON) #REQUIRED>
-
-<!ELEMENT Coercion EMPTY>
-<!ATTLIST Coercion
-          kind     (LOCAL|UNSPECIFIED)    #REQUIRED
-          identity (IDENTITY|UNSPECIFIED) #REQUIRED
-          name     CDATA                  #REQUIRED
-          source   CDATA                  #REQUIRED
-          target   CDATA                  #REQUIRED>
-
-<!ELEMENT HintsResolve (dbs,hints)>
-
-<!ELEMENT dbs (db*)>
-
-<!ELEMENT db (EMPTY)>
-<!ATTLIST db
-          name CDATA #REQUIRED>
-
-<!ELEMENT hints (hint*)>
-
-<!ELEMENT hint (EMPTY)>
-<!ATTLIST hint
-          name CDATA #REQUIRED>
diff --git a/helm/xsltd/.cvsignore b/helm/xsltd/.cvsignore
deleted file mode 100644 (file)
index 4b1a68e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Makefile configure config.log config.cache config.status start-xaland
diff --git a/helm/xsltd/AUTHORS b/helm/xsltd/AUTHORS
deleted file mode 100644 (file)
index 1088c56..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
diff --git a/helm/xsltd/COPYING b/helm/xsltd/COPYING
deleted file mode 100644 (file)
index d60c31a..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   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.
-\f
-                   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.)
-\f
-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.
-\f
-  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.
-\f
-  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
-\f
-           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
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <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 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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/helm/xsltd/ChangeLog b/helm/xsltd/ChangeLog
deleted file mode 100644 (file)
index 20c36b4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-28/12/2000: First alpha release
diff --git a/helm/xsltd/Makefile.in b/helm/xsltd/Makefile.in
deleted file mode 100644 (file)
index 1d43f9c..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-BIN_DIR=@BIN_DIR@
-HELM_LIB_DIR=@HELM_LIB_DIR@
-
-all:
-
-install:
-       cp start-xaland $(BIN_DIR)
-       cp xaland.class $(HELM_LIB_DIR)
-
-distclean:
-       rm -f Makefile configure config.log config.cache config.status \
-        etc/configuration.xml etc/helm-math-engine-configuration.xml \
-        lib/configuration.pl *.spec start-xaland
-
-.PHONY: all install distclean
diff --git a/helm/xsltd/Makefile.old b/helm/xsltd/Makefile.old
deleted file mode 100644 (file)
index a56803c..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-JAVADIR = /opt/java/jdk1.3/bin
-HELM_STYLES_DIR = file:/home/lpadovan/miohelm/style
-
-start-xaland:
-       java -ss1024K -oss8192K \
-           xaland 12345 12346 \
-           $(HELM_STYLES_DIR)/rootcontent.xsl \
-           $(HELM_STYLES_DIR)/annotatedpres.xsl \
-           $(HELM_STYLES_DIR)/theory_content.xsl \
-           $(HELM_STYLES_DIR)/theory_pres.xsl
-
-start-xaland-DOM:
-       java -ss1024K -oss8192K \
-           xaland_DOM 12345 12346 \
-           $(HELM_STYLES_DIR)/rootcontent.xsl \
-           $(HELM_STYLES_DIR)/annotatedpres.xsl \
-           $(HELM_STYLES_DIR)/theory_content.xsl \
-           $(HELM_STYLES_DIR)/theory_pres.xsl
-
-start-xaland-2:
-       java -ss1024K -oss8192K \
-           xaland2 12345 12346 \
-           $(HELM_STYLES_DIR)/rootcontent.xsl \
-           $(HELM_STYLES_DIR)/annotatedpres.xsl \
-           $(HELM_STYLES_DIR)/theory_content.xsl \
-           $(HELM_STYLES_DIR)/theory_pres.xsl
-
-start-xaland-old:
-       java xaland 12345 12346 \
-         $(HELM_STYLES_DIR)/style_prima_del_linguaggio_naturale/rootcontent.xsl \
-         $(HELM_STYLES_DIR)/style_prima_del_linguaggio_naturale/annotatedpres.xsl \
-         $(HELM_STYLES_DIR)/style_prima_del_linguaggio_naturale/theory_content.xsl \
-         $(HELM_STYLES_DIR)/style_prima_del_linguaggio_naturale/theory_pres.xsl
-
-start-xaland-uwobo:
-       $(JAVADIR)/java -ss1024K -oss8192K \
-           xaland_uwobo 12345 12346 12347 \
-           $(HELM_STYLES_DIR)/rootcontent.xsl \
-           $(HELM_STYLES_DIR)/annotatedpres.xsl \
-           $(HELM_STYLES_DIR)/theory_content.xsl \
-           $(HELM_STYLES_DIR)/theory_pres.xsl
-
-start-xaland3:
-       java xaland 12347 12348 \
-           $(HELM_STYLES_DIR)/rootcontent.xsl \
-           $(HELM_STYLES_DIR)/annotatedpres.xsl \
-           $(HELM_STYLES_DIR)/theory_content.xsl \
-           $(HELM_STYLES_DIR)/theory_pres.xsl
diff --git a/helm/xsltd/NEWS b/helm/xsltd/NEWS
deleted file mode 100644 (file)
index 20c36b4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-28/12/2000: First alpha release
diff --git a/helm/xsltd/README b/helm/xsltd/README
deleted file mode 100644 (file)
index ab2790b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-NOTE: This is the first alpha release of project HELM.
-
-HELM (Hypertextual Electronic Library of Mathematics) is a project aimed
-at the creation of tools for the development and exploitation of a huge
-distributed library of formal mathematical knowledge. This package holds
-an UDP-based XSLT daemon.
-
-For more information see http://www.cs.unibo.it/helm
diff --git a/helm/xsltd/config.cache.pkg b/helm/xsltd/config.cache.pkg
deleted file mode 100644 (file)
index 97be23b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# This is the config.cache that holds the ``standard'' path for the
-# HELM library. It is supposed to be used when creating packages
-
-helm_cv_HELM_STYLES_DIR=${helm_cv_HELM_STYLES_DIR='$RESOLVED_PREFIX/share/helm/style'}
diff --git a/helm/xsltd/configure.in b/helm/xsltd/configure.in
deleted file mode 100644 (file)
index 2a8fcd0..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-AC_INIT(xaland.class)
-
-PACKAGE=helm_xsltd
-MAJOR_VERSION=0
-MINOR_VERSION=0
-MICRO_VERSION=2
-VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION
-
-DEFAULT_HELM_LIB_DIR=/usr/local/lib/helm
-DEFAULT_HELM_STYLE_DIR=/usr/local/share/helm/style
-
-AC_ARG_ENABLE(
-       defaults,
-       [  --enable-defaults[=ARG] if yes then use defaults (don't ask user) [default=auto]],
-       USE_DEFAULTS=$enableval,
-       USE_DEFAULTS=auto
-)
-
-if test "x$prefix" != xNONE; then
-  RESOLVED_PREFIX=$prefix
-else
-  RESOLVED_PREFIX=$ac_default_prefix
-fi
-
-if test "x$exec_prefix" != xNONE; then
-  RESOLVED_EXEC_PREFIX=$exec_prefix
-else
-  RESOLVED_EXEC_PREFIX=$RESOLVED_PREFIX
-fi
-
-BIN_DIR=$RESOLVED_EXEC_PREFIX/bin
-
-if test $USE_DEFAULTS = auto; then
-       AC_CHECK_PROG(HAVE_HELM_CONFIG, helm-config, yes, no)   
-       if test $HAVE_HELM_CONFIG = yes; then
-               HELM_LIB_DIR=`helm-config --lib-dir`
-               HELM_STYLE_DIR=`helm-config --style-dir`
-       else
-               USE_DEFAULTS=no
-       fi
-fi
-
-if test $USE_DEFAULTS = no; then
-       echo
-       echo "\`helm-config' is not installed (or I can't find it in your path)."
-       echo "Please, insert the lib directory for HELM..."
-       echo
-       echo -n "[[$DEFAULT_HELM_LIB_DIR]] ? "
-       read HELM_LIB_DIR
-       if test "x$HELM_LIB_DIR" = "x"; then
-               HELM_LIB_DIR=$DEFAULT_HELM_LIB_DIR
-       fi
-       echo
-       echo "Please, insert the directory where I can find the stylesheets for HELM..."
-       echo
-       echo -n "[[$DEFAULT_HELM_STYLE_DIR]] ? "
-       read HELM_STYLE_DIR
-       if test "x$HELM_STYLE_DIR" = "x"; then
-               HELM_STYLE_DIR=$DEFAULT_HELM_STYLE_DIR
-       fi
-elif test $USE_DEFAULTS = yes; then
-       HELM_LIB_DIR=$DEFAULT_HELM_LIB_DIR
-       HELM_STYLE_DIR=$DEFAULT_HELM_STYLE_DIR
-fi
-
-AC_MSG_CHECKING(for the $HELM_LIB_DIR)
-if test -d $HELM_LIB_DIR; then
-       AC_MSG_RESULT(ok)
-else
-       AC_MSG_RESULT(no)
-       AC_MSG_ERROR(please check your installation)
-fi
-
-AC_MSG_CHECKING(for $HELM_STYLE_DIR)
-if test -d $HELM_STYLE_DIR; then
-       AC_MSG_RESULT(ok)
-else
-       AC_MSG_RESULT(no)
-       AC_MSG_ERROR(please check your installation)
-fi
-
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-AC_SUBST(BIN_DIR)
-AC_SUBST(HELM_LIB_DIR)
-AC_SUBST(HELM_STYLE_DIR)
-
-AC_OUTPUT([
-  Makefile
-  start-xaland
-  helm_xsltd.spec
-], chmod +x start-xaland)
diff --git a/helm/xsltd/helm_xsltd.spec.in b/helm/xsltd/helm_xsltd.spec.in
deleted file mode 100644 (file)
index 9d9dafe..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-Summary: The UDP-based XSLTD daemon for project HELM.
-Name: @PACKAGE@
-Version: @VERSION@
-Release: 1
-Copyright: GPL
-URL: http://www.cs.unibo.it/helm
-Packager: Claudio Sacerdoti Coen <sacerdot@cs.unibo.it>
-Requires: helm_configuration = 0.0.1, helm_data = 0.0.1, helm_http_getter = 0.0.1
-Group: Applications/Publishing
-Source: www.cs.unibo.it:/helm/@PACKAGE@-@VERSION@-1.tar.gz
-%description
-HELM (Hypertextual Electronic Library of Mathematics) is a project aimed
-at the creation of tools for the development and exploitation of a huge
-distributed library of formal mathematical knowledge. This package holds
-an UDP-based XSLT daemon.
-For more information see http://www.cs.unibo.it/helm
-
-%prep
-%setup
-
-%build
-cp config.cache.pkg config.cache
-./configure
-make
-
-%install
-make install
-
-%files
-%doc AUTHORS COPYING ChangeLog NEWS README
-/usr/local/lib/helm/xaland.class
-%attr(755,root,root) /usr/local/bin/start-xaland
diff --git a/helm/xsltd/start-xaland.in b/helm/xsltd/start-xaland.in
deleted file mode 100755 (executable)
index 687e09b..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/bash
-
-# Copyright (C) 2000, HELM Team.
-# 
-# This file is part of HELM, an Hypertextual, Electronic
-# Library of Mathematics, developed at the Computer Science
-# Department, University of Bologna, Italy.
-# 
-# HELM 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.
-# 
-# HELM 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 HELM; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-# 
-# For details, see the HELM World-Wide-Web page,
-# http://cs.unibo.it/helm/.
-
-##########################################################################
-#        BEGIN OF THE PART TO CONFIGURE BEFORE USING THE SCRIPT          #
-##########################################################################
-
-# In the next line you have to set the path to the jdk1.3
-export PATH=/opt/java/jdk1.3/bin/:$PATH
-
-# In the next line you have to give the classpath to the 1.1 version of
-# xalan.jar
-export CLASSPATH1=/projects/helm/shared/libraries/java/xalan_1_1/xalan.jar
-
-# In the next line you have to give the classpath to the 1.1 version of
-# xerces.jar
-export CLASSPATH2=/projects/helm/shared/libraries/java/xalan_1_1/xerces.jar
-
-##########################################################################
-#                   END OF THE PART TO CONFIGURE                         #
-##########################################################################
-
-export CLASSPATH=$CLASSPATH1:$CLASSPATH2:$CLASSPATH:.
-export CLASS_DIR=@HELM_LIB_DIR@
-export HELM_STYLE_DIR=@HELM_STYLE_DIR@
-
-cd $CLASS_DIR &&
-java -ss1024K -oss8192K \
- xaland 12345 12346 \
- $HELM_STYLE_DIR/rootcontent.xsl \
- $HELM_STYLE_DIR/annotatedpres.xsl \
- $HELM_STYLE_DIR/theory_content.xsl \
- $HELM_STYLE_DIR/theory_pres.xsl
diff --git a/helm/xsltd/xaland-cpp/xaland.cpp b/helm/xsltd/xaland-cpp/xaland.cpp
deleted file mode 100644 (file)
index e221402..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-// Base header file.  Must be first.
-#include <Include/PlatformDefinitions.hpp>
-
-#include <iostream>
-#include <fstream>
-
-#include <util/PlatformUtils.hpp>
-
-#include <PlatformSupport/DOMStringHelper.hpp>
-
-#include <DOMSupport/DOMSupportDefault.hpp>
-
-#include <XPath/XObjectFactoryDefault.hpp>
-#include <XPath/XPathSupportDefault.hpp>
-#include <XPath/XPathFactoryDefault.hpp>
-
-#include <XSLT/StylesheetConstructionContextDefault.hpp>
-#include <XSLT/StylesheetExecutionContextDefault.hpp>
-#include <XSLT/XSLTEngineImpl.hpp>
-#include <XSLT/XSLTInit.hpp>
-#include <XSLT/XSLTInputSource.hpp>
-#include <XSLT/XSLTProcessorEnvSupportDefault.hpp>
-#include <XSLT/XSLTResultTarget.hpp>
-
-#include <XercesParserLiaison/XercesDOMSupport.hpp>
-#include <XercesParserLiaison/XercesParserLiaison.hpp>
-
-int main(int argc, const char* [])
-{
-#if !defined(XALAN_NO_NAMESPACES)
-   using std::cerr;
-   using std::endl;
-   using std::ofstream;
-#endif
-
-   if (argc != 1) {
-      cerr << "Usage: SimpleTransform"
-           << endl
-           << endl;
-   } else {
-      try {
-         // Call the static initializer for Xerces...
-         XMLPlatformUtils::Initialize();
-
-         {
-            // Initialize the Xalan XSLT subsystem...
-            XSLTInit theInit;
-
-            // Create the support objects that are necessary for
-            // running the processor...
-            XercesDOMSupport theDOMSupport;
-            XercesParserLiaison        theParserLiaison(theDOMSupport);
-            XPathSupportDefault        theXPathSupport(theDOMSupport);
-            XSLTProcessorEnvSupportDefault theXSLTProcessorEnvSupport;
-            XObjectFactoryDefault theXObjectFactory;
-            XPathFactoryDefault        theXPathFactory;
-
-            // Create a processor...
-            XSLTEngineImpl theProcessor(
-               theParserLiaison,
-               theXPathSupport,
-               theXSLTProcessorEnvSupport,
-               theDOMSupport,
-               theXObjectFactory,
-               theXPathFactory);
-
-            // Connect the processor to the support object...
-           theXSLTProcessorEnvSupport.setProcessor(&theProcessor);
-
-           // Create a stylesheet construction context, and a stylesheet
-           // execution context...
-           StylesheetConstructionContextDefault theConstructionContext(
-              theProcessor,
-              theXSLTProcessorEnvSupport,
-              theXPathFactory);
-
-           StylesheetExecutionContextDefault theExecutionContext(
-              theProcessor,
-              theXSLTProcessorEnvSupport,
-              theXPathSupport,
-              theXObjectFactory);
-
-           // Our input files...The assumption is that the executable will be
-           // run from same directory as the input files.
-           const XalanDOMString        theXMLFileName("foo.xml");
-           const XalanDOMString        theXSLFileName("foo.xsl");
-
-           // Our input sources...
-           XSLTInputSource theInputSource(c_wstr(theXMLFileName));
-           XSLTInputSource theStylesheetSource(c_wstr(theXSLFileName));
-
-           // Our output target...
-           const XalanDOMString theOutputFileName("foo.out");
-           XSLTResultTarget theResultTarget(theOutputFileName);
-
-           theProcessor.process(
-              theInputSource,
-              theStylesheetSource,
-              theResultTarget,
-              theConstructionContext,
-              theExecutionContext);
-
-         }
-
-         // Call the static terminator for Xerces...
-         XMLPlatformUtils::Terminate();
-      }
-      catch(...) {
-         cerr << "Exception caught!!!"
-              << endl
-              << endl;
-      }
-   }
-
-   return 0;
-}
-
-/**************************************************/
-/*
-
-public class xaland {
-   public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
-   {
-      XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL);
-      XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL);
-      style.process(xmlSource, xmlResult);
-   }
-
-   public static void main(String argv[]) throws  java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
-   {
-      int port    = Integer.parseInt(argv[0]);
-      int port2   = Integer.parseInt(argv[1]);
-      String xsl1 = argv[2];
-      String xsl2 = argv[3];
-      String theory_xsl1 = argv[4];
-      String theory_xsl2 = argv[5];
-
-      XSLTProcessor theory_processor =
-       XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison());
-      StylesheetRoot theory_style1 =
-         theory_processor.processStylesheet(theory_xsl1);
-      theory_processor.reset();
-      StylesheetRoot theory_style2 =
-         theory_processor.processStylesheet(theory_xsl2);
-      theory_processor.setStylesheet(theory_style2);
-
-      XSLTProcessor processor =
-       XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison());
-      StylesheetRoot style1 = processor.processStylesheet(xsl1);
-      processor.reset();
-      StylesheetRoot style2 = processor.processStylesheet(xsl2);
-      processor.setStylesheet(style2);
-
-      DatagramSocket socket = new DatagramSocket(port);
-
-      System.out.println("Demon activated on input port " + port +
-       " and output port " + port2);
-      while(true) {
-         System.out.print("Ready...");
-
-         /* Warning: the packet must be a fresh one! * /
-         DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
-         socket.receive(packet);
-         byte data[] = packet.getData();
-         int datalen = packet.getLength();
-         String received = new String(data,0,datalen);
-
-         int first = received.indexOf(' ');
-         int last  = received.lastIndexOf(' ');
-         String mode = received.substring(0,first);
-         String input = received.substring(first+1,last);
-         String output = received.substring(last+1);
-
-         System.out.println("request received! Parameters are");
-         System.out.println("Mode: " + mode + " ");
-         System.out.println("Input file: \"" + input + "\"");
-         System.out.println("Output file: \"" + output  + "\"\n");
-
-         if ((new File(output)).exists()) {
-            System.out.println("Using cached version\n");
-         } else {
-            FileOutputStream fout = new FileOutputStream(output);
-            if (mode.equals("cic")) {
-               processor.setDocumentHandler(style2.getSAXSerializer(fout));
-               XSLTResultTarget content = new XSLTResultTarget(processor);
-               style1.process(new XSLTInputSource(input), content);
-            } else if (mode.equals("theory")) {
-               theory_processor.setDocumentHandler(
-                  theory_style2.getSAXSerializer(fout));
-               XSLTResultTarget content =
-                  new XSLTResultTarget(theory_processor);
-               theory_style1.process(new XSLTInputSource(input), content);
-            }
-         }
-
-         InetAddress address = InetAddress.getLocalHost();
-         DatagramSocket socket2 = new DatagramSocket();
-
-         byte buf[] = new byte[0];
-         DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2);
-
-         socket2.send(packet2);
-      }
-   }
-}
-
-*/
diff --git a/helm/xsltd/xaland-java-DOM/xaland_DOM.class b/helm/xsltd/xaland-java-DOM/xaland_DOM.class
deleted file mode 100644 (file)
index 59c9683..0000000
Binary files a/helm/xsltd/xaland-java-DOM/xaland_DOM.class and /dev/null differ
diff --git a/helm/xsltd/xaland-java-DOM/xaland_DOM.java b/helm/xsltd/xaland-java-DOM/xaland_DOM.java
deleted file mode 100644 (file)
index 354f3b2..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright (C) 2000, HELM Team.
-// 
-// This file is part of HELM, an Hypertextual, Electronic
-// Library of Mathematics, developed at the Computer Science
-// Department, University of Bologna, Italy.
-// 
-// HELM 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.
-// 
-// HELM 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 HELM; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// 
-// For details, see the HELM World-Wide-Web page,
-// http://cs.unibo.it/helm/.
-
-import org.apache.xalan.xslt.*;
-import org.w3c.dom.Document;
-import java.net.*;
-import java.io.*;
-
-public class xaland_DOM {
-   public static void main(String argv[]) throws  java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
-   {
-      int port    = Integer.parseInt(argv[0]);
-      int port2   = Integer.parseInt(argv[1]);
-      String xsl1 = argv[2];
-      String xsl2 = argv[3];
-      String theory_xsl1 = argv[4];
-      String theory_xsl2 = argv[5];
-
-      XSLTProcessor theory_processor =
-       XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison());
-      StylesheetRoot theory_style1 =
-         theory_processor.processStylesheet(theory_xsl1);
-      theory_processor.reset();
-      StylesheetRoot theory_style2 =
-         theory_processor.processStylesheet(theory_xsl2);
-      theory_processor.setStylesheet(theory_style2);
-
-      XSLTProcessor processor =
-       XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison());
-      StylesheetRoot style1 = processor.processStylesheet(xsl1);
-      processor.reset();
-      StylesheetRoot style2 = processor.processStylesheet(xsl2);
-      processor.setStylesheet(style2);
-
-      DatagramSocket socket = new DatagramSocket(port);
-
-      System.out.println("Demon activated on input port " + port +
-       " and output port " + port2);
-      while(true) {
-         System.out.print("Ready...");
-
-         /* Warning: the packet must be a fresh one! */
-         DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
-         socket.receive(packet);
-         byte data[] = packet.getData();
-         int datalen = packet.getLength();
-         String received = new String(data,0,datalen);
-
-         int first = received.indexOf(' ');
-         int last  = received.lastIndexOf(' ');
-         String mode = received.substring(0,first);
-         String input = received.substring(first+1,last);
-         String output = received.substring(last+1);
-
-         System.out.println("request received! Parameters are");
-         System.out.println("Mode: " + mode + " ");
-         System.out.println("Input file: \"" + input + "\"");
-         System.out.println("Output file: \"" + output  + "\"\n");
-
-         if ((new File(output)).exists()) {
-            System.out.println("Using cached version\n");
-         } else {
-            FileOutputStream fout = new FileOutputStream(output);
-            if (mode.equals("cic")) {
-Document content_doc = new org.apache.xerces.dom.DocumentImpl();
-XSLTResultTarget content = new XSLTResultTarget(content_doc);
-/*
-               processor.setDocumentHandler(style2.getSAXSerializer(fout));
-               XSLTResultTarget content = new XSLTResultTarget(processor);
-*/
-System.out.print("Prima...\n");
-               style1.process(new XSLTInputSource(input), content);
-System.out.print("Durante...\n");
-               style2.process(new XSLTInputSource(content_doc),new XSLTResultTarget(fout));
-System.out.print("Dopo...\n");
-            } else if (mode.equals("theory")) {
-               theory_processor.setDocumentHandler(
-                  theory_style2.getSAXSerializer(fout));
-               XSLTResultTarget content =
-                  new XSLTResultTarget(theory_processor);
-               theory_style1.process(new XSLTInputSource(input), content);
-            }
-         }
-
-         InetAddress address = InetAddress.getLocalHost();
-         DatagramSocket socket2 = new DatagramSocket();
-
-         byte buf[] = new byte[0];
-         DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2);
-
-         socket2.send(packet2);
-      }
-   }
-}
diff --git a/helm/xsltd/xaland-java/rompi.class b/helm/xsltd/xaland-java/rompi.class
deleted file mode 100644 (file)
index 4abfe38..0000000
Binary files a/helm/xsltd/xaland-java/rompi.class and /dev/null differ
diff --git a/helm/xsltd/xaland-java/rompi.java b/helm/xsltd/xaland-java/rompi.java
deleted file mode 100644 (file)
index 721b9b2..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2000, HELM Team.
-// 
-// This file is part of HELM, an Hypertextual, Electronic
-// Library of Mathematics, developed at the Computer Science
-// Department, University of Bologna, Italy.
-// 
-// HELM 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.
-// 
-// HELM 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 HELM; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// 
-// For details, see the HELM World-Wide-Web page,
-// http://cs.unibo.it/helm/.
-
-import java.net.*;
-
-public class rompi {
-   public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException
-   {
-      /* Wait forever ;-) */
-      DatagramSocket socket2 = new DatagramSocket(12346);
-      DatagramPacket packet2 = new DatagramPacket(new byte[1],1);
-      System.out.println("Ho preso il socket e non lo lascio piu', caro pu, caro pu");
-      socket2.receive(packet2);
-   }
-}
diff --git a/helm/xsltd/xaland-java/sped.class b/helm/xsltd/xaland-java/sped.class
deleted file mode 100644 (file)
index cc6f53d..0000000
Binary files a/helm/xsltd/xaland-java/sped.class and /dev/null differ
diff --git a/helm/xsltd/xaland-java/sped.java b/helm/xsltd/xaland-java/sped.java
deleted file mode 100644 (file)
index 8082020..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2000, HELM Team.
-// 
-// This file is part of HELM, an Hypertextual, Electronic
-// Library of Mathematics, developed at the Computer Science
-// Department, University of Bologna, Italy.
-// 
-// HELM 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.
-// 
-// HELM 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 HELM; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// 
-// For details, see the HELM World-Wide-Web page,
-// http://cs.unibo.it/helm/.
-
-import java.net.*;
-
-public class sped {
-   public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException
-   {
-      String input = argv[0];
-      String out1  = argv[1];
-      String out2  = argv[2];
-
-      String sent = input + " " + out1 + " " + out2;
-      
-      InetAddress address = InetAddress.getLocalHost();
-      DatagramSocket socket = new DatagramSocket();
-
-      int strlen = sent.length();
-      byte buf[] = new byte[strlen];
-      sent.getBytes(0,strlen,buf,0);
-      DatagramPacket packet = new DatagramPacket(buf,strlen,address,12345);
-
-      socket.send(packet);
-
-
-      /* Wait for answer (or forever ;-) */
-      DatagramSocket socket2 = new DatagramSocket(12346);
-      DatagramPacket packet2 = new DatagramPacket(new byte[1],1);
-      socket2.receive(packet2);
-   }
-}
diff --git a/helm/xsltd/xaland-java/xaland.class b/helm/xsltd/xaland-java/xaland.class
deleted file mode 100644 (file)
index 6871fda..0000000
Binary files a/helm/xsltd/xaland-java/xaland.class and /dev/null differ
diff --git a/helm/xsltd/xaland-java/xaland.java b/helm/xsltd/xaland-java/xaland.java
deleted file mode 100644 (file)
index b32106c..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright (C) 2000, HELM Team.
-// 
-// This file is part of HELM, an Hypertextual, Electronic
-// Library of Mathematics, developed at the Computer Science
-// Department, University of Bologna, Italy.
-// 
-// HELM 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.
-// 
-// HELM 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 HELM; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// 
-// For details, see the HELM World-Wide-Web page,
-// http://cs.unibo.it/helm/.
-
-import org.apache.xalan.xslt.*;
-import java.net.*;
-import java.io.*;
-
-public class xaland {
-   public static void main(String argv[]) throws  java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
-   {
-      int port    = Integer.parseInt(argv[0]);
-      int port2   = Integer.parseInt(argv[1]);
-      String xsl1 = argv[2];
-      String xsl2 = argv[3];
-      String theory_xsl1 = argv[4];
-      String theory_xsl2 = argv[5];
-
-      XSLTProcessor theory_processor =
-       XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison());
-      StylesheetRoot theory_style1 =
-         theory_processor.processStylesheet(theory_xsl1);
-      theory_processor.reset();
-      StylesheetRoot theory_style2 =
-         theory_processor.processStylesheet(theory_xsl2);
-      theory_processor.setStylesheet(theory_style2);
-
-      XSLTProcessor processor =
-       XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison());
-      StylesheetRoot style1 = processor.processStylesheet(xsl1);
-      processor.reset();
-      StylesheetRoot style2 = processor.processStylesheet(xsl2);
-      processor.setStylesheet(style2);
-
-      DatagramSocket socket = new DatagramSocket(port);
-
-      System.out.println("Demon activated on input port " + port +
-       " and output port " + port2);
-      while(true) {
-         System.out.print("Ready...");
-
-         /* Warning: the packet must be a fresh one! */
-         DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
-         socket.receive(packet);
-         byte data[] = packet.getData();
-         int datalen = packet.getLength();
-         String received = new String(data,0,datalen);
-
-         int first = received.indexOf(' ');
-         int last  = received.lastIndexOf(' ');
-         String mode = received.substring(0,first);
-         String input = received.substring(first+1,last);
-         String output = received.substring(last+1);
-
-         System.out.println("request received! Parameters are");
-         System.out.println("Mode: " + mode + " ");
-         System.out.println("Input file: \"" + input + "\"");
-         System.out.println("Output file: \"" + output  + "\"\n");
-
-         if ((new File(output)).exists()) {
-            System.out.println("Using cached version\n");
-         } else {
-            FileOutputStream fout = new FileOutputStream(output);
-            if (mode.equals("cic")) {
-               processor.setDocumentHandler(style2.getSAXSerializer(fout));
-               XSLTResultTarget content = new XSLTResultTarget(processor);
-               style1.process(new XSLTInputSource(input), content);
-            } else if (mode.equals("theory")) {
-               theory_processor.setDocumentHandler(
-                  theory_style2.getSAXSerializer(fout));
-               XSLTResultTarget content =
-                  new XSLTResultTarget(theory_processor);
-               theory_style1.process(new XSLTInputSource(input), content);
-            }
-         }
-
-         InetAddress address = InetAddress.getLocalHost();
-         DatagramSocket socket2 = new DatagramSocket();
-
-         byte buf[] = new byte[0];
-         DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2);
-
-         socket2.send(packet2);
-      }
-   }
-}
diff --git a/helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco b/helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco
deleted file mode 100644 (file)
index b46ffa6..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-import org.apache.xalan.xslt.*;
-import java.net.*;
-import java.io.*;
-
-public class xaland {
-   public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
-   {
-      XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL);
-      XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL);
-      style.process(xmlSource, xmlResult);
-   }
-
-   public static void main(String argv[]) throws  java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
-   {
-      int port    = Integer.parseInt(argv[0]);
-      int port2   = Integer.parseInt(argv[1]);
-      String xsl1 = argv[2];
-      String xsl2 = argv[3];
-      String theory_xsl1 = argv[4];
-      String theory_xsl2 = argv[5];
-
-      XSLTProcessor theory_processor = XSLTProcessorFactory.getProcessor();
-      StylesheetRoot theory_style1 =
-         theory_processor.processStylesheet(theory_xsl1);
-      StylesheetRoot theory_style2 =
-         theory_processor.processStylesheet(theory_xsl2);
-      theory_processor.setStylesheet(theory_style2);
-
-      XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
-      StylesheetRoot style1 = processor.processStylesheet(xsl1);
-      StylesheetRoot style2 = processor.processStylesheet(xsl2);
-      processor.setStylesheet(style2);
-
-      DatagramSocket socket = new DatagramSocket(port);
-
-      System.out.println("Demon activated on input port " + port +
-       " and output port " + port2);
-      while(true) {
-         System.out.print("Ready...");
-
-         /* Warning: the packet must be a fresh one! */
-         DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
-         socket.receive(packet);
-         byte data[] = packet.getData();
-         int datalen = packet.getLength();
-         String received = new String(data,0,datalen);
-
-         int first = received.indexOf(' ');
-         int last  = received.lastIndexOf(' ');
-         String mode = received.substring(0,first);
-         String input = received.substring(first+1,last);
-         String output = received.substring(last+1);
-
-         System.out.println("request received! Parameters are");
-         System.out.println("Mode: " + mode + " ");
-         System.out.println("Input file: \"" + input + "\"");
-         System.out.println("Output file: \"" + output  + "\"\n");
-
-         if ((new File(output)).exists()) {
-            System.out.println("Using cached version\n");
-         } else {
-            FileOutputStream fout = new FileOutputStream(output);
-            if (mode.equals("cic")) {
-               processor.setDocumentHandler(style2.getSAXSerializer(fout));
-               XSLTResultTarget content = new XSLTResultTarget(processor);
-               style1.process(new XSLTInputSource(input), content);
-            } else if (mode.equals("theory")) {
-               theory_processor.setDocumentHandler(
-                  theory_style2.getSAXSerializer(fout));
-               XSLTResultTarget content =
-                  new XSLTResultTarget(theory_processor);
-               theory_style1.process(new XSLTInputSource(input), content);
-            }
-         }
-
-         InetAddress address = InetAddress.getLocalHost();
-         DatagramSocket socket2 = new DatagramSocket();
-
-         byte buf[] = new byte[0];
-         DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2);
-
-         socket2.send(packet2);
-      }
-   }
-}
diff --git a/helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco_ma_dopo_i_reset b/helm/xsltd/xaland-java/xaland.java.prima_del_loro_baco_ma_dopo_i_reset
deleted file mode 100644 (file)
index 1467cdd..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-import org.apache.xalan.xslt.*;
-import java.net.*;
-import java.io.*;
-
-public class xaland {
-   public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
-   {
-      XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL);
-      XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL);
-      style.process(xmlSource, xmlResult);
-   }
-
-   public static void main(String argv[]) throws  java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
-   {
-      int port    = Integer.parseInt(argv[0]);
-      int port2   = Integer.parseInt(argv[1]);
-      String xsl1 = argv[2];
-      String xsl2 = argv[3];
-      String theory_xsl1 = argv[4];
-      String theory_xsl2 = argv[5];
-
-      XSLTProcessor theory_processor = XSLTProcessorFactory.getProcessor();
-      StylesheetRoot theory_style1 =
-         theory_processor.processStylesheet(theory_xsl1);
-      theory_processor.reset();
-      StylesheetRoot theory_style2 =
-         theory_processor.processStylesheet(theory_xsl2);
-      theory_processor.setStylesheet(theory_style2);
-
-      XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
-      StylesheetRoot style1 = processor.processStylesheet(xsl1);
-      processor.reset();
-      StylesheetRoot style2 = processor.processStylesheet(xsl2);
-      processor.setStylesheet(style2);
-
-      DatagramSocket socket = new DatagramSocket(port);
-
-      System.out.println("Demon activated on input port " + port +
-       " and output port " + port2);
-      while(true) {
-         System.out.print("Ready...");
-
-         /* Warning: the packet must be a fresh one! */
-         DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
-         socket.receive(packet);
-         byte data[] = packet.getData();
-         int datalen = packet.getLength();
-         String received = new String(data,0,datalen);
-
-         int first = received.indexOf(' ');
-         int last  = received.lastIndexOf(' ');
-         String mode = received.substring(0,first);
-         String input = received.substring(first+1,last);
-         String output = received.substring(last+1);
-
-         System.out.println("request received! Parameters are");
-         System.out.println("Mode: " + mode + " ");
-         System.out.println("Input file: \"" + input + "\"");
-         System.out.println("Output file: \"" + output  + "\"\n");
-
-         if ((new File(output)).exists()) {
-            System.out.println("Using cached version\n");
-         } else {
-            FileOutputStream fout = new FileOutputStream(output);
-            if (mode.equals("cic")) {
-               processor.setDocumentHandler(style2.getSAXSerializer(fout));
-               XSLTResultTarget content = new XSLTResultTarget(processor);
-               style1.process(new XSLTInputSource(input), content);
-            } else if (mode.equals("theory")) {
-               theory_processor.setDocumentHandler(
-                  theory_style2.getSAXSerializer(fout));
-               XSLTResultTarget content =
-                  new XSLTResultTarget(theory_processor);
-               theory_style1.process(new XSLTInputSource(input), content);
-            }
-         }
-
-         InetAddress address = InetAddress.getLocalHost();
-         DatagramSocket socket2 = new DatagramSocket();
-
-         byte buf[] = new byte[0];
-         DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2);
-
-         socket2.send(packet2);
-      }
-   }
-}
diff --git a/helm/xsltd/xaland-java2/xaland2.class b/helm/xsltd/xaland-java2/xaland2.class
deleted file mode 100644 (file)
index 95b42c7..0000000
Binary files a/helm/xsltd/xaland-java2/xaland2.class and /dev/null differ
diff --git a/helm/xsltd/xaland-java2/xaland2.java b/helm/xsltd/xaland-java2/xaland2.java
deleted file mode 100644 (file)
index fc5e20b..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright (C) 2000, HELM Team.
-// 
-// This file is part of HELM, an Hypertextual, Electronic
-// Library of Mathematics, developed at the Computer Science
-// Department, University of Bologna, Italy.
-// 
-// HELM 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.
-// 
-// HELM 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 HELM; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// 
-// For details, see the HELM World-Wide-Web page,
-// http://cs.unibo.it/helm/.
-
-import java.net.*;
-import java.io.*;
-
-// Imported TraX classes
-import org.apache.trax.Processor;
-import org.apache.trax.Templates;
-import org.apache.trax.Transformer;
-import org.apache.trax.Result;
-import org.apache.trax.ProcessorException;
-import org.apache.trax.ProcessorFactoryException;
-import org.apache.trax.TransformException;
-
-// Imported SAX classes
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.Parser;
-import org.xml.sax.helpers.ParserAdapter;
-import org.xml.sax.helpers.XMLReaderFactory;
-import org.xml.sax.XMLReader;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.ext.LexicalHandler;
-
-// Imported DOM classes
-import org.w3c.dom.Node;
-
-// Imported Serializer classes
-import org.apache.serialize.OutputFormat;
-import org.apache.serialize.Serializer;
-import org.apache.serialize.SerializerFactory;
-
-// Imported JAVA API for XML Parsing 1.0 classes
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-
-public class xaland2 {
-   public static void main(String argv[]) throws  IOException, MalformedURLException, SAXException, ParserConfigurationException
-   {
-      int port    = Integer.parseInt(argv[0]);
-      int port2   = Integer.parseInt(argv[1]);
-      String xsl1 = argv[2];
-      String xsl2 = argv[3];
-      String theory_xsl1 = argv[4];
-      String theory_xsl2 = argv[5];
-
-      Processor theory_processor = Processor.newInstance("xslt");
-      Templates theory_style1 = theory_processor.process(new InputSource(theory_xsl1));
-      Transformer theory_transformer1 = theory_style1.newTransformer();
-
-      Templates theory_style2 = theory_processor.process(new InputSource(theory_xsl2));
-      Transformer theory_transformer2 = theory_style2.newTransformer();
-
-
-      Processor processor = Processor.newInstance("xslt");
-      Templates style1 = processor.process(new InputSource(xsl1));
-      Transformer transformer1 = style1.newTransformer();
-
-      Templates style2 = processor.process(new InputSource(xsl2));
-      Transformer transformer2 = style2.newTransformer();
-
-
-      DatagramSocket socket = new DatagramSocket(port);
-
-      System.out.println("Demon activated on input port " + port +
-       " and output port " + port2);
-      while(true) {
-         System.out.print("Ready...");
-
-         /* Warning: the packet must be a fresh one! */
-         DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
-         socket.receive(packet);
-         byte data[] = packet.getData();
-         int datalen = packet.getLength();
-         String received = new String(data,0,datalen);
-
-         int first = received.indexOf(' ');
-         int last  = received.lastIndexOf(' ');
-         String mode = received.substring(0,first);
-         String input = received.substring(first+1,last);
-         String output = received.substring(last+1);
-
-         System.out.println("request received! Parameters are");
-         System.out.println("Mode: " + mode + " ");
-         System.out.println("Input file: \"" + input + "\"");
-         System.out.println("Output file: \"" + output  + "\"\n");
-
-         if ((new File(output)).exists()) {
-            System.out.println("Using cached version\n");
-         } else {
-            FileOutputStream fout = new FileOutputStream(output);
-            if (mode.equals("cic")) {
-               XMLReader reader = XMLReaderFactory.createXMLReader();
-               ContentHandler chandler = transformer1.getInputContentHandler();
-               reader.setContentHandler(chandler);
-               if (chandler instanceof LexicalHandler)
-                reader.setProperty("http://xml.org/sax/properties/lexical-handler", chandler);
-               else
-                reader.setProperty("http://xml.org/sax/properties/lexical-handler", null);
-
-               transformer1.setContentHandler(transformer2.getInputContentHandler());
-               Serializer serializer = SerializerFactory.getSerializer("xml");
-               serializer.setOutputStream(fout);
-               transformer2.setContentHandler(serializer.asContentHandler());
-
-               reader.parse(input);
-            } else if (mode.equals("theory")) {
-               XMLReader reader = XMLReaderFactory.createXMLReader();
-               ContentHandler chandler = theory_transformer1.getInputContentHandler();
-               reader.setContentHandler(chandler);
-               if (chandler instanceof LexicalHandler)
-                reader.setProperty("http://xml.org/sax/properties/lexical-handler", chandler);
-               else
-                reader.setProperty("http://xml.org/sax/properties/lexical-handler", null);
-
-               theory_transformer1.setContentHandler(theory_transformer2.getInputContentHandler());
-               Serializer serializer = SerializerFactory.getSerializer("xml");
-               serializer.setOutputStream(fout);
-               theory_transformer2.setContentHandler(serializer.asContentHandler());
-
-               reader.parse(input);
-             }
-         }
-
-         InetAddress address = InetAddress.getLocalHost();
-         DatagramSocket socket2 = new DatagramSocket();
-
-         byte buf[] = new byte[0];
-         DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2);
-
-         socket2.send(packet2);
-      }
-   }
-}
diff --git a/helm/xsltd/xaland-uwobo/.cvsignore b/helm/xsltd/xaland-uwobo/.cvsignore
deleted file mode 100644 (file)
index 6b468b6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.class
diff --git a/helm/xsltd/xaland-uwobo/xaland_uwobo.java b/helm/xsltd/xaland-uwobo/xaland_uwobo.java
deleted file mode 100644 (file)
index 97f8cdf..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-//import org.apache.xalan.xslt.*;
-import java.net.*;
-import java.io.*;
-
-public class xaland_uwobo {
-   static DatagramSocket uwobo_socket;
-   static int portuwobo;
-
-   public static void send_to_uwobo(String cmd)
-   throws java.io.IOException
-   {
-      /*CSC: UDP based, but not fault-tolerant */
-      byte[] cmdBytes = cmd.getBytes();
-      DatagramPacket packet =
-       new DatagramPacket(cmdBytes, cmdBytes.length,
-        InetAddress.getLocalHost(), portuwobo);
-      uwobo_socket.send(packet);
-      DatagramPacket rcv = new DatagramPacket(new byte[0], 0);
-      uwobo_socket.receive(rcv);
-   }
-
-   public static void main(String argv[]) throws  java.io.IOException, java.net.MalformedURLException//, org.xml.sax.SAXException
-   {
-      int port  = Integer.parseInt(argv[0]);
-      int port2 = Integer.parseInt(argv[1]);
-      portuwobo = Integer.parseInt(argv[2]);
-      String xsl1 = argv[3];
-      String xsl2 = argv[4];
-      String theory_xsl1 = argv[5];
-      String theory_xsl2 = argv[6];
-
-      DatagramSocket socket = new DatagramSocket(port);
-      uwobo_socket = new DatagramSocket();
-
-      /* Initialize uwobo */
-      send_to_uwobo("add " + xsl1 + " ciccontent");
-      send_to_uwobo("add " + xsl2 + " cicpres");
-      send_to_uwobo("add " + theory_xsl1 + " theorycontent");
-      send_to_uwobo("add " + theory_xsl2 + " theorypres");
-
-
-      System.out.println("Demon activated on input port " + port +
-       " and output port " + port2);
-      while(true) {
-         System.out.print("Ready...");
-
-         /* Warning: the packet must be a fresh one! */
-         DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
-         socket.receive(packet);
-         byte data[] = packet.getData();
-         int datalen = packet.getLength();
-         String received = new String(data,0,datalen);
-
-         int first = received.indexOf(' ');
-         int last  = received.lastIndexOf(' ');
-         String mode = received.substring(0,first-1);
-         String input = received.substring(first+1,last);
-         String output = received.substring(last+1);
-
-         System.out.println("request received! Parameters are");
-         System.out.println("Mode: \"" + mode + "\"");
-         System.out.println("Input file: \"" + input + "\"");
-         System.out.println("Output file: \"" + output  + "\"\n");
-
-         if (mode == "cic")
-            send_to_uwobo("apply " + input + " " + output + " ciccontent cicpres");
-         else
-            send_to_uwobo("apply " + input + " " + output + " theorycontent theorypres");
-
-         InetAddress address = InetAddress.getLocalHost();
-         DatagramSocket socket2 = new DatagramSocket();
-
-         byte buf[] = new byte[0];
-         DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2);
-
-         socket2.send(packet2);
-      }
-   }
-}
diff --git a/helm/xsltd/xaland.class b/helm/xsltd/xaland.class
deleted file mode 100644 (file)
index 6871fda..0000000
Binary files a/helm/xsltd/xaland.class and /dev/null differ
diff --git a/helm/xsltd/xaland2.class b/helm/xsltd/xaland2.class
deleted file mode 100644 (file)
index 95b42c7..0000000
Binary files a/helm/xsltd/xaland2.class and /dev/null differ
diff --git a/helm/xsltd/xaland_DOM.class b/helm/xsltd/xaland_DOM.class
deleted file mode 100644 (file)
index 59c9683..0000000
Binary files a/helm/xsltd/xaland_DOM.class and /dev/null differ